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,254 @@
1
+ ---
2
+ summary: "Zalo bot support status, capabilities, and configuration"
3
+ read_when:
4
+ - Working on Zalo features or webhooks
5
+ title: "Zalo"
6
+ ---
7
+
8
+ # Zalo (Bot API)
9
+
10
+ Status: experimental. DMs are supported. The [Capabilities](#capabilities) section below reflects current Marketplace-bot behavior.
11
+
12
+ ## Bundled plugin
13
+
14
+ Zalo ships as a bundled plugin in current Durar releases, so normal packaged
15
+ builds do not need a separate install.
16
+
17
+ If you are on an older build or a custom install that excludes Zalo, install it
18
+ manually:
19
+
20
+ - Install via CLI: `Durar plugins install @Durar/zalo`
21
+ - Or from a source checkout: `Durar plugins install ./path/to/local/zalo-plugin`
22
+ - Details: [Plugins](/tools/plugin)
23
+
24
+ ## Quick setup (beginner)
25
+
26
+ 1. Ensure the Zalo plugin is available.
27
+ - Current packaged Durar releases already bundle it.
28
+ - Older/custom installs can add it manually with the commands above.
29
+ 2. Set the token:
30
+ - Env: `ZALO_BOT_TOKEN=...`
31
+ - Or config: `channels.zalo.accounts.default.botToken: "..."`.
32
+ 3. Restart the gateway (or finish setup).
33
+ 4. DM access is pairing by default; approve the pairing code on first contact.
34
+
35
+ Minimal config:
36
+
37
+ ```json5
38
+ {
39
+ channels: {
40
+ zalo: {
41
+ enabled: true,
42
+ accounts: {
43
+ default: {
44
+ botToken: "12345689:abc-xyz",
45
+ dmPolicy: "pairing",
46
+ },
47
+ },
48
+ },
49
+ },
50
+ }
51
+ ```
52
+
53
+ ## What it is
54
+
55
+ Zalo is a Vietnam-focused messaging app; its Bot API lets the Gateway run a bot for 1:1 conversations.
56
+ It is a good fit for support or notifications where you want deterministic routing back to Zalo.
57
+
58
+ This page reflects current Durar behavior for **Zalo Bot Creator / Marketplace bots**.
59
+ **Zalo Official Account (OA) bots** are a different Zalo product surface and may behave differently.
60
+
61
+ - A Zalo Bot API channel owned by the Gateway.
62
+ - Deterministic routing: replies go back to Zalo; the model never chooses channels.
63
+ - DMs share the agent's main session.
64
+ - The [Capabilities](#capabilities) section below shows current Marketplace-bot support.
65
+
66
+ ## Setup (fast path)
67
+
68
+ ### 1) Create a bot token (Zalo Bot Platform)
69
+
70
+ 1. Go to [https://bot.zaloplatforms.com](https://bot.zaloplatforms.com) and sign in.
71
+ 2. Create a new bot and configure its settings.
72
+ 3. Copy the full bot token (typically `numeric_id:secret`). For Marketplace bots, the usable runtime token may appear in the bot's welcome message after creation.
73
+
74
+ ### 2) Configure the token (env or config)
75
+
76
+ Example:
77
+
78
+ ```json5
79
+ {
80
+ channels: {
81
+ zalo: {
82
+ enabled: true,
83
+ accounts: {
84
+ default: {
85
+ botToken: "12345689:abc-xyz",
86
+ dmPolicy: "pairing",
87
+ },
88
+ },
89
+ },
90
+ },
91
+ }
92
+ ```
93
+
94
+ If you later move to a Zalo bot surface where groups are available, you can add group-specific config such as `groupPolicy` and `groupAllowFrom` explicitly. For current Marketplace-bot behavior, see [Capabilities](#capabilities).
95
+
96
+ Env option: `ZALO_BOT_TOKEN=...` (works for the default account only).
97
+
98
+ Multi-account support: use `channels.zalo.accounts` with per-account tokens and optional `name`.
99
+
100
+ 3. Restart the gateway. Zalo starts when a token is resolved (env or config).
101
+ 4. DM access defaults to pairing. Approve the code when the bot is first contacted.
102
+
103
+ ## How it works (behavior)
104
+
105
+ - Inbound messages are normalized into the shared channel envelope with media placeholders.
106
+ - Replies always route back to the same Zalo chat.
107
+ - Long-polling by default; webhook mode available with `channels.zalo.webhookUrl`.
108
+
109
+ ## Limits
110
+
111
+ - Outbound text is chunked to 2000 characters (Zalo API limit).
112
+ - Media downloads/uploads are capped by `channels.zalo.mediaMaxMb` (default 5).
113
+ - Streaming is blocked by default due to the 2000 char limit making streaming less useful.
114
+
115
+ ## Access control (DMs)
116
+
117
+ ### DM access
118
+
119
+ - Default: `channels.zalo.dmPolicy = "pairing"`. Unknown senders receive a pairing code; messages are ignored until approved (codes expire after 1 hour).
120
+ - Approve via:
121
+ - `Durar pairing list zalo`
122
+ - `Durar pairing approve zalo <CODE>`
123
+ - Pairing is the default token exchange. Details: [Pairing](/channels/pairing)
124
+ - `channels.zalo.allowFrom` accepts numeric user IDs (no username lookup available).
125
+
126
+ ## Access control (Groups)
127
+
128
+ For **Zalo Bot Creator / Marketplace bots**, group support was not available in practice because the bot could not be added to a group at all.
129
+
130
+ That means the group-related config keys below exist in the schema, but were not usable for Marketplace bots:
131
+
132
+ - `channels.zalo.groupPolicy` controls group inbound handling: `open | allowlist | disabled`.
133
+ - `channels.zalo.groupAllowFrom` restricts which sender IDs can trigger the bot in groups.
134
+ - If `groupAllowFrom` is unset, Zalo falls back to `allowFrom` for sender checks.
135
+ - Runtime note: if `channels.zalo` is missing entirely, runtime still falls back to `groupPolicy="allowlist"` for safety.
136
+
137
+ The group policy values (when group access is available on your bot surface) are:
138
+
139
+ - `groupPolicy: "disabled"` — blocks all group messages.
140
+ - `groupPolicy: "open"` — allows any group member (mention-gated).
141
+ - `groupPolicy: "allowlist"` — fail-closed default; only allowed senders are accepted.
142
+
143
+ If you are using a different Zalo bot product surface and have verified working group behavior, document that separately rather than assuming it matches the Marketplace-bot flow.
144
+
145
+ ## Long-polling vs webhook
146
+
147
+ - Default: long-polling (no public URL required).
148
+ - Webhook mode: set `channels.zalo.webhookUrl` and `channels.zalo.webhookSecret`.
149
+ - The webhook secret must be 8-256 characters.
150
+ - Webhook URL must use HTTPS.
151
+ - Zalo sends events with `X-Bot-Api-Secret-Token` header for verification.
152
+ - Gateway HTTP handles webhook requests at `channels.zalo.webhookPath` (defaults to the webhook URL path).
153
+ - Requests must use `Content-Type: application/json` (or `+json` media types).
154
+ - Duplicate events (`event_name + message_id`) are ignored for a short replay window.
155
+ - Burst traffic is rate-limited per path/source and may return HTTP 429.
156
+
157
+ **Note:** getUpdates (polling) and webhook are mutually exclusive per Zalo API docs.
158
+
159
+ ## Supported message types
160
+
161
+ For a quick support snapshot, see [Capabilities](#capabilities). The notes below add detail where the behavior needs extra context.
162
+
163
+ - **Text messages**: Full support with 2000 character chunking.
164
+ - **Plain URLs in text**: Behave like normal text input.
165
+ - **Link previews / rich link cards**: See the Marketplace-bot status in [Capabilities](#capabilities); they did not reliably trigger a reply.
166
+ - **Image messages**: See the Marketplace-bot status in [Capabilities](#capabilities); inbound image handling was unreliable (typing indicator without a final reply).
167
+ - **Stickers**: See the Marketplace-bot status in [Capabilities](#capabilities).
168
+ - **Voice notes / audio files / video / generic file attachments**: See the Marketplace-bot status in [Capabilities](#capabilities).
169
+ - **Unsupported types**: Logged (for example, messages from protected users).
170
+
171
+ ## Capabilities
172
+
173
+ This table summarizes current **Zalo Bot Creator / Marketplace bot** behavior in Durar.
174
+
175
+ | Feature | Status |
176
+ | --------------------------- | --------------------------------------- |
177
+ | Direct messages | ✅ Supported |
178
+ | Groups | ❌ Not available for Marketplace bots |
179
+ | Media (inbound images) | ⚠️ Limited / verify in your environment |
180
+ | Media (outbound images) | ⚠️ Not re-tested for Marketplace bots |
181
+ | Plain URLs in text | ✅ Supported |
182
+ | Link previews | ⚠️ Unreliable for Marketplace bots |
183
+ | Reactions | ❌ Not supported |
184
+ | Stickers | ⚠️ No agent reply for Marketplace bots |
185
+ | Voice notes / audio / video | ⚠️ No agent reply for Marketplace bots |
186
+ | File attachments | ⚠️ No agent reply for Marketplace bots |
187
+ | Threads | ❌ Not supported |
188
+ | Polls | ❌ Not supported |
189
+ | Native commands | ❌ Not supported |
190
+ | Streaming | ⚠️ Blocked (2000 char limit) |
191
+
192
+ ## Delivery targets (CLI/cron)
193
+
194
+ - Use a chat id as the target.
195
+ - Example: `Durar message send --channel zalo --target 123456789 --message "hi"`.
196
+
197
+ ## Troubleshooting
198
+
199
+ **Bot doesn't respond:**
200
+
201
+ - Check that the token is valid: `Durar channels status --probe`
202
+ - Verify the sender is approved (pairing or allowFrom)
203
+ - Check gateway logs: `Durar logs --follow`
204
+
205
+ **Webhook not receiving events:**
206
+
207
+ - Ensure webhook URL uses HTTPS
208
+ - Verify secret token is 8-256 characters
209
+ - Confirm the gateway HTTP endpoint is reachable on the configured path
210
+ - Check that getUpdates polling is not running (they're mutually exclusive)
211
+
212
+ ## Configuration reference (Zalo)
213
+
214
+ Full configuration: [Configuration](/gateway/configuration)
215
+
216
+ The flat top-level keys (`channels.zalo.botToken`, `channels.zalo.dmPolicy`, and similar) are a legacy single-account shorthand. Prefer `channels.zalo.accounts.<id>.*` for new configs. Both forms are still documented here because they exist in the schema.
217
+
218
+ Provider options:
219
+
220
+ - `channels.zalo.enabled`: enable/disable channel startup.
221
+ - `channels.zalo.botToken`: bot token from Zalo Bot Platform.
222
+ - `channels.zalo.tokenFile`: read token from a regular file path. Symlinks are rejected.
223
+ - `channels.zalo.dmPolicy`: `pairing | allowlist | open | disabled` (default: pairing).
224
+ - `channels.zalo.allowFrom`: DM allowlist (user IDs). `open` requires `"*"`. The wizard will ask for numeric IDs.
225
+ - `channels.zalo.groupPolicy`: `open | allowlist | disabled` (default: allowlist). Present in config; see [Capabilities](#capabilities) and [Access control (Groups)](#access-control-groups) for current Marketplace-bot behavior.
226
+ - `channels.zalo.groupAllowFrom`: group sender allowlist (user IDs). Falls back to `allowFrom` when unset.
227
+ - `channels.zalo.mediaMaxMb`: inbound/outbound media cap (MB, default 5).
228
+ - `channels.zalo.webhookUrl`: enable webhook mode (HTTPS required).
229
+ - `channels.zalo.webhookSecret`: webhook secret (8-256 chars).
230
+ - `channels.zalo.webhookPath`: webhook path on the gateway HTTP server.
231
+ - `channels.zalo.proxy`: proxy URL for API requests.
232
+
233
+ Multi-account options:
234
+
235
+ - `channels.zalo.accounts.<id>.botToken`: per-account token.
236
+ - `channels.zalo.accounts.<id>.tokenFile`: per-account regular token file. Symlinks are rejected.
237
+ - `channels.zalo.accounts.<id>.name`: display name.
238
+ - `channels.zalo.accounts.<id>.enabled`: enable/disable account.
239
+ - `channels.zalo.accounts.<id>.dmPolicy`: per-account DM policy.
240
+ - `channels.zalo.accounts.<id>.allowFrom`: per-account allowlist.
241
+ - `channels.zalo.accounts.<id>.groupPolicy`: per-account group policy. Present in config; see [Capabilities](#capabilities) and [Access control (Groups)](#access-control-groups) for current Marketplace-bot behavior.
242
+ - `channels.zalo.accounts.<id>.groupAllowFrom`: per-account group sender allowlist.
243
+ - `channels.zalo.accounts.<id>.webhookUrl`: per-account webhook URL.
244
+ - `channels.zalo.accounts.<id>.webhookSecret`: per-account webhook secret.
245
+ - `channels.zalo.accounts.<id>.webhookPath`: per-account webhook path.
246
+ - `channels.zalo.accounts.<id>.proxy`: per-account proxy URL.
247
+
248
+ ## Related
249
+
250
+ - [Channels Overview](/channels) — all supported channels
251
+ - [Pairing](/channels/pairing) — DM authentication and pairing flow
252
+ - [Groups](/channels/groups) — group chat behavior and mention gating
253
+ - [Channel Routing](/channels/channel-routing) — session routing for messages
254
+ - [Security](/gateway/security) — access model and hardening
@@ -0,0 +1,195 @@
1
+ ---
2
+ summary: "Zalo personal account support via native zca-js (QR login), capabilities, and configuration"
3
+ read_when:
4
+ - Setting up Zalo Personal for Durar
5
+ - Debugging Zalo Personal login or message flow
6
+ title: "Zalo Personal"
7
+ ---
8
+
9
+ # Zalo Personal (unofficial)
10
+
11
+ Status: experimental. This integration automates a **personal Zalo account** via native `zca-js` inside Durar.
12
+
13
+ > **Warning:** This is an unofficial integration and may result in account suspension/ban. Use at your own risk.
14
+
15
+ ## Bundled plugin
16
+
17
+ Zalo Personal ships as a bundled plugin in current Durar releases, so normal
18
+ packaged builds do not need a separate install.
19
+
20
+ If you are on an older build or a custom install that excludes Zalo Personal,
21
+ install it manually:
22
+
23
+ - Install via CLI: `Durar plugins install @Durar/zalouser`
24
+ - Or from a source checkout: `Durar plugins install ./path/to/local/zalouser-plugin`
25
+ - Details: [Plugins](/tools/plugin)
26
+
27
+ No external `zca`/`openzca` CLI binary is required.
28
+
29
+ ## Quick setup (beginner)
30
+
31
+ 1. Ensure the Zalo Personal plugin is available.
32
+ - Current packaged Durar releases already bundle it.
33
+ - Older/custom installs can add it manually with the commands above.
34
+ 2. Login (QR, on the Gateway machine):
35
+ - `Durar channels login --channel zalouser`
36
+ - Scan the QR code with the Zalo mobile app.
37
+ 3. Enable the channel:
38
+
39
+ ```json5
40
+ {
41
+ channels: {
42
+ zalouser: {
43
+ enabled: true,
44
+ dmPolicy: "pairing",
45
+ },
46
+ },
47
+ }
48
+ ```
49
+
50
+ 4. Restart the Gateway (or finish setup).
51
+ 5. DM access defaults to pairing; approve the pairing code on first contact.
52
+
53
+ ## What it is
54
+
55
+ - Runs entirely in-process via `zca-js`.
56
+ - Uses native event listeners to receive inbound messages.
57
+ - Sends replies directly through the JS API (text/media/link).
58
+ - Designed for “personal account” use cases where Zalo Bot API is not available.
59
+
60
+ ## Naming
61
+
62
+ Channel id is `zalouser` to make it explicit this automates a **personal Zalo user account** (unofficial). We keep `zalo` reserved for a potential future official Zalo API integration.
63
+
64
+ ## Finding IDs (directory)
65
+
66
+ Use the directory CLI to discover peers/groups and their IDs:
67
+
68
+ ```bash
69
+ Durar directory self --channel zalouser
70
+ Durar directory peers list --channel zalouser --query "name"
71
+ Durar directory groups list --channel zalouser --query "work"
72
+ ```
73
+
74
+ ## Limits
75
+
76
+ - Outbound text is chunked to ~2000 characters (Zalo client limits).
77
+ - Streaming is blocked by default.
78
+
79
+ ## Access control (DMs)
80
+
81
+ `channels.zalouser.dmPolicy` supports: `pairing | allowlist | open | disabled` (default: `pairing`).
82
+
83
+ `channels.zalouser.allowFrom` accepts user IDs or names. During setup, names are resolved to IDs using the plugin's in-process contact lookup.
84
+
85
+ Approve via:
86
+
87
+ - `Durar pairing list zalouser`
88
+ - `Durar pairing approve zalouser <code>`
89
+
90
+ ## Group access (optional)
91
+
92
+ - Default: `channels.zalouser.groupPolicy = "open"` (groups allowed). Use `channels.defaults.groupPolicy` to override the default when unset.
93
+ - Restrict to an allowlist with:
94
+ - `channels.zalouser.groupPolicy = "allowlist"`
95
+ - `channels.zalouser.groups` (keys should be stable group IDs; names are resolved to IDs on startup when possible)
96
+ - `channels.zalouser.groupAllowFrom` (controls which senders in allowed groups can trigger the bot)
97
+ - Block all groups: `channels.zalouser.groupPolicy = "disabled"`.
98
+ - The configure wizard can prompt for group allowlists.
99
+ - On startup, Durar resolves group/user names in allowlists to IDs and logs the mapping.
100
+ - Group allowlist matching is ID-only by default. Unresolved names are ignored for auth unless `channels.zalouser.dangerouslyAllowNameMatching: true` is enabled.
101
+ - `channels.zalouser.dangerouslyAllowNameMatching: true` is a break-glass compatibility mode that re-enables mutable group-name matching.
102
+ - If `groupAllowFrom` is unset, runtime falls back to `allowFrom` for group sender checks.
103
+ - Sender checks apply to both normal group messages and control commands (for example `/new`, `/reset`).
104
+
105
+ Example:
106
+
107
+ ```json5
108
+ {
109
+ channels: {
110
+ zalouser: {
111
+ groupPolicy: "allowlist",
112
+ groupAllowFrom: ["1471383327500481391"],
113
+ groups: {
114
+ "123456789": { allow: true },
115
+ "Work Chat": { allow: true },
116
+ },
117
+ },
118
+ },
119
+ }
120
+ ```
121
+
122
+ ### Group mention gating
123
+
124
+ - `channels.zalouser.groups.<group>.requireMention` controls whether group replies require a mention.
125
+ - Resolution order: exact group id/name -> normalized group slug -> `*` -> default (`true`).
126
+ - This applies both to allowlisted groups and open group mode.
127
+ - Authorized control commands (for example `/new`) can bypass mention gating.
128
+ - When a group message is skipped because mention is required, Durar stores it as pending group history and includes it on the next processed group message.
129
+ - Group history limit defaults to `messages.groupChat.historyLimit` (fallback `50`). You can override per account with `channels.zalouser.historyLimit`.
130
+
131
+ Example:
132
+
133
+ ```json5
134
+ {
135
+ channels: {
136
+ zalouser: {
137
+ groupPolicy: "allowlist",
138
+ groups: {
139
+ "*": { allow: true, requireMention: true },
140
+ "Work Chat": { allow: true, requireMention: false },
141
+ },
142
+ },
143
+ },
144
+ }
145
+ ```
146
+
147
+ ## Multi-account
148
+
149
+ Accounts map to `zalouser` profiles in Durar state. Example:
150
+
151
+ ```json5
152
+ {
153
+ channels: {
154
+ zalouser: {
155
+ enabled: true,
156
+ defaultAccount: "default",
157
+ accounts: {
158
+ work: { enabled: true, profile: "work" },
159
+ },
160
+ },
161
+ },
162
+ }
163
+ ```
164
+
165
+ ## Typing, reactions, and delivery acknowledgements
166
+
167
+ - Durar sends a typing event before dispatching a reply (best-effort).
168
+ - Message reaction action `react` is supported for `zalouser` in channel actions.
169
+ - Use `remove: true` to remove a specific reaction emoji from a message.
170
+ - Reaction semantics: [Reactions](/tools/reactions)
171
+ - For inbound messages that include event metadata, Durar sends delivered + seen acknowledgements (best-effort).
172
+
173
+ ## Troubleshooting
174
+
175
+ **Login doesn't stick:**
176
+
177
+ - `Durar channels status --probe`
178
+ - Re-login: `Durar channels logout --channel zalouser && Durar channels login --channel zalouser`
179
+
180
+ **Allowlist/group name didn't resolve:**
181
+
182
+ - Use numeric IDs in `allowFrom`/`groupAllowFrom`/`groups`, or exact friend/group names.
183
+
184
+ **Upgraded from old CLI-based setup:**
185
+
186
+ - Remove any old external `zca` process assumptions.
187
+ - The channel now runs fully in Durar without external CLI binaries.
188
+
189
+ ## Related
190
+
191
+ - [Channels Overview](/channels) — all supported channels
192
+ - [Pairing](/channels/pairing) — DM authentication and pairing flow
193
+ - [Groups](/channels/groups) — group chat behavior and mention gating
194
+ - [Channel Routing](/channels/channel-routing) — session routing for messages
195
+ - [Security](/gateway/security) — access model and hardening
package/docs/ci.md ADDED
@@ -0,0 +1,66 @@
1
+ ---
2
+ title: CI Pipeline
3
+ summary: "CI job graph, scope gates, and local command equivalents"
4
+ read_when:
5
+ - You need to understand why a CI job did or did not run
6
+ - You are debugging failing GitHub Actions checks
7
+ ---
8
+
9
+ # CI Pipeline
10
+
11
+ The CI runs on every push to `main` and every pull request. It uses smart scoping to skip expensive jobs when only unrelated areas changed.
12
+
13
+ ## Job Overview
14
+
15
+ | Job | Purpose | When it runs |
16
+ | ------------------------ | ---------------------------------------------------------------------------------------- | ----------------------------------- |
17
+ | `preflight` | Detect docs-only changes, changed scopes, changed extensions, and build the CI manifest | Always on non-draft pushes and PRs |
18
+ | `security-fast` | Private key detection, workflow audit via `zizmor`, production dependency audit | Always on non-draft pushes and PRs |
19
+ | `build-artifacts` | Build `dist/` and the Control UI once, upload reusable artifacts for downstream jobs | Node-relevant changes |
20
+ | `checks-fast-core` | Fast Linux correctness lanes such as bundled/plugin-contract/protocol checks | Node-relevant changes |
21
+ | `checks-fast-extensions` | Aggregate the extension shard lanes after `checks-fast-extensions-shard` completes | Node-relevant changes |
22
+ | `extension-fast` | Focused tests for only the changed bundled plugins | When extension changes are detected |
23
+ | `check` | Main local gate in CI: `pnpm check` plus `pnpm build:strict-smoke` | Node-relevant changes |
24
+ | `check-additional` | Architecture and boundary guards plus the gateway watch regression harness | Node-relevant changes |
25
+ | `build-smoke` | Built-CLI smoke tests and startup-memory smoke | Node-relevant changes |
26
+ | `checks` | Heavier Linux Node lanes: full tests, channel tests, and push-only Node 22 compatibility | Node-relevant changes |
27
+ | `check-docs` | Docs formatting, lint, and broken-link checks | Docs changed |
28
+ | `skills-python` | Ruff + pytest for Python-backed skills | Python-skill-relevant changes |
29
+ | `checks-windows` | Windows-specific test lanes | Windows-relevant changes |
30
+ | `macos-node` | macOS TypeScript test lane using the shared built artifacts | macOS-relevant changes |
31
+ | `macos-swift` | Swift lint, build, and tests for the macOS app | macOS-relevant changes |
32
+ | `android` | Android build and test matrix | Android-relevant changes |
33
+
34
+ ## Fail-Fast Order
35
+
36
+ Jobs are ordered so cheap checks fail before expensive ones run:
37
+
38
+ 1. `preflight` decides which lanes exist at all. The `docs-scope` and `changed-scope` logic are steps inside this job, not standalone jobs.
39
+ 2. `security-fast`, `check`, `check-additional`, `check-docs`, and `skills-python` fail quickly without waiting on the heavier artifact and platform matrix jobs.
40
+ 3. `build-artifacts` overlaps with the fast Linux lanes so downstream consumers can start as soon as the shared build is ready.
41
+ 4. Heavier platform and runtime lanes fan out after that: `checks-fast-core`, `checks-fast-extensions`, `extension-fast`, `checks`, `checks-windows`, `macos-node`, `macos-swift`, and `android`.
42
+
43
+ Scope logic lives in `scripts/ci-changed-scope.mjs` and is covered by unit tests in `src/scripts/ci-changed-scope.test.ts`.
44
+ The separate `install-smoke` workflow reuses the same scope script through its own `preflight` job. It computes `run_install_smoke` from the narrower changed-smoke signal, so Docker/install smoke only runs for install, packaging, and container-relevant changes.
45
+
46
+ On pushes, the `checks` matrix adds the push-only `compat-node22` lane. On pull requests, that lane is skipped and the matrix stays focused on the normal test/channel lanes.
47
+
48
+ ## Runners
49
+
50
+ | Runner | Jobs |
51
+ | -------------------------------- | ---------------------------------------------------------------------------------------------------- |
52
+ | `blacksmith-16vcpu-ubuntu-2404` | `preflight`, `security-fast`, `build-artifacts`, Linux checks, docs checks, Python skills, `android` |
53
+ | `blacksmith-32vcpu-windows-2025` | `checks-windows` |
54
+ | `macos-latest` | `macos-node`, `macos-swift` |
55
+
56
+ ## Local Equivalents
57
+
58
+ ```bash
59
+ pnpm check # types + lint + format
60
+ pnpm build:strict-smoke
61
+ pnpm test:gateway:watch-regression
62
+ pnpm test # vitest tests
63
+ pnpm test:channels
64
+ pnpm check:docs # docs format + lint + broken links
65
+ pnpm build # build dist when CI artifact/build-smoke lanes matter
66
+ ```