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,466 @@
1
+ ---
2
+ summary: "Voice Call plugin: outbound + inbound calls via Twilio/Telnyx/Plivo (plugin install + config + CLI)"
3
+ read_when:
4
+ - You want to place an outbound voice call from Durar
5
+ - You are configuring or developing the voice-call plugin
6
+ title: "Voice Call Plugin"
7
+ ---
8
+
9
+ # Voice Call (plugin)
10
+
11
+ Voice calls for Durar via a plugin. Supports outbound notifications and
12
+ multi-turn conversations with inbound policies.
13
+
14
+ Current providers:
15
+
16
+ - `twilio` (Programmable Voice + Media Streams)
17
+ - `telnyx` (Call Control v2)
18
+ - `plivo` (Voice API + XML transfer + GetInput speech)
19
+ - `mock` (dev/no network)
20
+
21
+ Quick mental model:
22
+
23
+ - Install plugin
24
+ - Restart Gateway
25
+ - Configure under `plugins.entries.voice-call.config`
26
+ - Use `Durar voicecall ...` or the `voice_call` tool
27
+
28
+ ## Where it runs (local vs remote)
29
+
30
+ The Voice Call plugin runs **inside the Gateway process**.
31
+
32
+ If you use a remote Gateway, install/configure the plugin on the **machine running the Gateway**, then restart the Gateway to load it.
33
+
34
+ ## Install
35
+
36
+ ### Option A: install from npm (recommended)
37
+
38
+ ```bash
39
+ Durar plugins install @Durar/voice-call
40
+ ```
41
+
42
+ Restart the Gateway afterwards.
43
+
44
+ ### Option B: install from a local folder (dev, no copying)
45
+
46
+ ```bash
47
+ PLUGIN_SRC=./path/to/local/voice-call-plugin
48
+ Durar plugins install "$PLUGIN_SRC"
49
+ cd "$PLUGIN_SRC" && pnpm install
50
+ ```
51
+
52
+ Restart the Gateway afterwards.
53
+
54
+ ## Config
55
+
56
+ Set config under `plugins.entries.voice-call.config`:
57
+
58
+ ```json5
59
+ {
60
+ plugins: {
61
+ entries: {
62
+ "voice-call": {
63
+ enabled: true,
64
+ config: {
65
+ provider: "twilio", // or "telnyx" | "plivo" | "mock"
66
+ fromNumber: "+15550001234",
67
+ toNumber: "+15550005678",
68
+
69
+ twilio: {
70
+ accountSid: "ACxxxxxxxx",
71
+ authToken: "...",
72
+ },
73
+
74
+ telnyx: {
75
+ apiKey: "...",
76
+ connectionId: "...",
77
+ // Telnyx webhook public key from the Telnyx Mission Control Portal
78
+ // (Base64 string; can also be set via TELNYX_PUBLIC_KEY).
79
+ publicKey: "...",
80
+ },
81
+
82
+ plivo: {
83
+ authId: "MAxxxxxxxxxxxxxxxxxxxx",
84
+ authToken: "...",
85
+ },
86
+
87
+ // Webhook server
88
+ serve: {
89
+ port: 3334,
90
+ path: "/voice/webhook",
91
+ },
92
+
93
+ // Webhook security (recommended for tunnels/proxies)
94
+ webhookSecurity: {
95
+ allowedHosts: ["voice.example.com"],
96
+ trustedProxyIPs: ["100.64.0.1"],
97
+ },
98
+
99
+ // Public exposure (pick one)
100
+ // publicUrl: "https://example.ngrok.app/voice/webhook",
101
+ // tunnel: { provider: "ngrok" },
102
+ // tailscale: { mode: "funnel", path: "/voice/webhook" }
103
+
104
+ outbound: {
105
+ defaultMode: "notify", // notify | conversation
106
+ },
107
+
108
+ streaming: {
109
+ enabled: true,
110
+ provider: "openai", // optional; first registered realtime transcription provider when unset
111
+ streamPath: "/voice/stream",
112
+ providers: {
113
+ openai: {
114
+ apiKey: "sk-...", // optional if OPENAI_API_KEY is set
115
+ model: "gpt-4o-transcribe",
116
+ silenceDurationMs: 800,
117
+ vadThreshold: 0.5,
118
+ },
119
+ },
120
+ preStartTimeoutMs: 5000,
121
+ maxPendingConnections: 32,
122
+ maxPendingConnectionsPerIp: 4,
123
+ maxConnections: 128,
124
+ },
125
+ },
126
+ },
127
+ },
128
+ },
129
+ }
130
+ ```
131
+
132
+ Notes:
133
+
134
+ - Twilio/Telnyx require a **publicly reachable** webhook URL.
135
+ - Plivo requires a **publicly reachable** webhook URL.
136
+ - `mock` is a local dev provider (no network calls).
137
+ - If older configs still use `provider: "log"`, `twilio.from`, or legacy `streaming.*` OpenAI keys, run `Durar doctor --fix` to rewrite them.
138
+ - Telnyx requires `telnyx.publicKey` (or `TELNYX_PUBLIC_KEY`) unless `skipSignatureVerification` is true.
139
+ - `skipSignatureVerification` is for local testing only.
140
+ - If you use ngrok free tier, set `publicUrl` to the exact ngrok URL; signature verification is always enforced.
141
+ - `tunnel.allowNgrokFreeTierLoopbackBypass: true` allows Twilio webhooks with invalid signatures **only** when `tunnel.provider="ngrok"` and `serve.bind` is loopback (ngrok local agent). Use for local dev only.
142
+ - Ngrok free tier URLs can change or add interstitial behavior; if `publicUrl` drifts, Twilio signatures will fail. For production, prefer a stable domain or Tailscale funnel.
143
+ - Streaming security defaults:
144
+ - `streaming.preStartTimeoutMs` closes sockets that never send a valid `start` frame.
145
+ - `streaming.maxPendingConnections` caps total unauthenticated pre-start sockets.
146
+ - `streaming.maxPendingConnectionsPerIp` caps unauthenticated pre-start sockets per source IP.
147
+ - `streaming.maxConnections` caps total open media stream sockets (pending + active).
148
+ - Runtime fallback still accepts those old voice-call keys for now, but the rewrite path is `Durar doctor --fix` and the compat shim is temporary.
149
+
150
+ ## Streaming transcription
151
+
152
+ `streaming` selects a realtime transcription provider for live call audio.
153
+
154
+ Current runtime behavior:
155
+
156
+ - `streaming.provider` is optional. If unset, Voice Call uses the first
157
+ registered realtime transcription provider.
158
+ - Today the bundled provider is OpenAI, registered by the bundled `openai`
159
+ plugin.
160
+ - Provider-owned raw config lives under `streaming.providers.<providerId>`.
161
+ - If `streaming.provider` points at an unregistered provider, or no realtime
162
+ transcription provider is registered at all, Voice Call logs a warning and
163
+ skips media streaming instead of failing the whole plugin.
164
+
165
+ OpenAI streaming transcription defaults:
166
+
167
+ - API key: `streaming.providers.openai.apiKey` or `OPENAI_API_KEY`
168
+ - model: `gpt-4o-transcribe`
169
+ - `silenceDurationMs`: `800`
170
+ - `vadThreshold`: `0.5`
171
+
172
+ Example:
173
+
174
+ ```json5
175
+ {
176
+ plugins: {
177
+ entries: {
178
+ "voice-call": {
179
+ config: {
180
+ streaming: {
181
+ enabled: true,
182
+ provider: "openai",
183
+ streamPath: "/voice/stream",
184
+ providers: {
185
+ openai: {
186
+ apiKey: "sk-...", // optional if OPENAI_API_KEY is set
187
+ model: "gpt-4o-transcribe",
188
+ silenceDurationMs: 800,
189
+ vadThreshold: 0.5,
190
+ },
191
+ },
192
+ },
193
+ },
194
+ },
195
+ },
196
+ },
197
+ }
198
+ ```
199
+
200
+ Legacy keys are still auto-migrated by `Durar doctor --fix`:
201
+
202
+ - `streaming.sttProvider` → `streaming.provider`
203
+ - `streaming.openaiApiKey` → `streaming.providers.openai.apiKey`
204
+ - `streaming.sttModel` → `streaming.providers.openai.model`
205
+ - `streaming.silenceDurationMs` → `streaming.providers.openai.silenceDurationMs`
206
+ - `streaming.vadThreshold` → `streaming.providers.openai.vadThreshold`
207
+
208
+ ## Stale call reaper
209
+
210
+ Use `staleCallReaperSeconds` to end calls that never receive a terminal webhook
211
+ (for example, notify-mode calls that never complete). The default is `0`
212
+ (disabled).
213
+
214
+ Recommended ranges:
215
+
216
+ - **Production:** `120`–`300` seconds for notify-style flows.
217
+ - Keep this value **higher than `maxDurationSeconds`** so normal calls can
218
+ finish. A good starting point is `maxDurationSeconds + 30–60` seconds.
219
+
220
+ Example:
221
+
222
+ ```json5
223
+ {
224
+ plugins: {
225
+ entries: {
226
+ "voice-call": {
227
+ config: {
228
+ maxDurationSeconds: 300,
229
+ staleCallReaperSeconds: 360,
230
+ },
231
+ },
232
+ },
233
+ },
234
+ }
235
+ ```
236
+
237
+ ## Webhook Security
238
+
239
+ When a proxy or tunnel sits in front of the Gateway, the plugin reconstructs the
240
+ public URL for signature verification. These options control which forwarded
241
+ headers are trusted.
242
+
243
+ `webhookSecurity.allowedHosts` allowlists hosts from forwarding headers.
244
+
245
+ `webhookSecurity.trustForwardingHeaders` trusts forwarded headers without an allowlist.
246
+
247
+ `webhookSecurity.trustedProxyIPs` only trusts forwarded headers when the request
248
+ remote IP matches the list.
249
+
250
+ Webhook replay protection is enabled for Twilio and Plivo. Replayed valid webhook
251
+ requests are acknowledged but skipped for side effects.
252
+
253
+ Twilio conversation turns include a per-turn token in `<Gather>` callbacks, so
254
+ stale/replayed speech callbacks cannot satisfy a newer pending transcript turn.
255
+
256
+ Unauthenticated webhook requests are rejected before body reads when the
257
+ provider's required signature headers are missing.
258
+
259
+ The voice-call webhook uses the shared pre-auth body profile (64 KB / 5 seconds)
260
+ plus a per-IP in-flight cap before signature verification.
261
+
262
+ Example with a stable public host:
263
+
264
+ ```json5
265
+ {
266
+ plugins: {
267
+ entries: {
268
+ "voice-call": {
269
+ config: {
270
+ publicUrl: "https://voice.example.com/voice/webhook",
271
+ webhookSecurity: {
272
+ allowedHosts: ["voice.example.com"],
273
+ },
274
+ },
275
+ },
276
+ },
277
+ },
278
+ }
279
+ ```
280
+
281
+ ## TTS for calls
282
+
283
+ Voice Call uses the core `messages.tts` configuration for
284
+ streaming speech on calls. You can override it under the plugin config with the
285
+ **same shape** — it deep‑merges with `messages.tts`.
286
+
287
+ ```json5
288
+ {
289
+ tts: {
290
+ provider: "elevenlabs",
291
+ providers: {
292
+ elevenlabs: {
293
+ voiceId: "pMsXgVXv3BLzUgSXRplE",
294
+ modelId: "eleven_multilingual_v2",
295
+ },
296
+ },
297
+ },
298
+ }
299
+ ```
300
+
301
+ Notes:
302
+
303
+ - Legacy `tts.<provider>` keys inside plugin config (`openai`, `elevenlabs`, `microsoft`, `edge`) are auto-migrated to `tts.providers.<provider>` on load. Prefer the `providers` shape in committed config.
304
+ - **Microsoft speech is ignored for voice calls** (telephony audio needs PCM; the current Microsoft transport does not expose telephony PCM output).
305
+ - Core TTS is used when Twilio media streaming is enabled; otherwise calls fall back to provider native voices.
306
+ - If a Twilio media stream is already active, Voice Call does not fall back to TwiML `<Say>`. If telephony TTS is unavailable in that state, the playback request fails instead of mixing two playback paths.
307
+ - When telephony TTS falls back to a secondary provider, Voice Call logs a warning with the provider chain (`from`, `to`, `attempts`) for debugging.
308
+
309
+ ### More examples
310
+
311
+ Use core TTS only (no override):
312
+
313
+ ```json5
314
+ {
315
+ messages: {
316
+ tts: {
317
+ provider: "openai",
318
+ providers: {
319
+ openai: { voice: "alloy" },
320
+ },
321
+ },
322
+ },
323
+ }
324
+ ```
325
+
326
+ Override to ElevenLabs just for calls (keep core default elsewhere):
327
+
328
+ ```json5
329
+ {
330
+ plugins: {
331
+ entries: {
332
+ "voice-call": {
333
+ config: {
334
+ tts: {
335
+ provider: "elevenlabs",
336
+ providers: {
337
+ elevenlabs: {
338
+ apiKey: "elevenlabs_key",
339
+ voiceId: "pMsXgVXv3BLzUgSXRplE",
340
+ modelId: "eleven_multilingual_v2",
341
+ },
342
+ },
343
+ },
344
+ },
345
+ },
346
+ },
347
+ },
348
+ }
349
+ ```
350
+
351
+ Override only the OpenAI model for calls (deep‑merge example):
352
+
353
+ ```json5
354
+ {
355
+ plugins: {
356
+ entries: {
357
+ "voice-call": {
358
+ config: {
359
+ tts: {
360
+ providers: {
361
+ openai: {
362
+ model: "gpt-4o-mini-tts",
363
+ voice: "marin",
364
+ },
365
+ },
366
+ },
367
+ },
368
+ },
369
+ },
370
+ },
371
+ }
372
+ ```
373
+
374
+ ## Inbound calls
375
+
376
+ Inbound policy defaults to `disabled`. To enable inbound calls, set:
377
+
378
+ ```json5
379
+ {
380
+ inboundPolicy: "allowlist",
381
+ allowFrom: ["+15550001234"],
382
+ inboundGreeting: "Hello! How can I help?",
383
+ }
384
+ ```
385
+
386
+ `inboundPolicy: "allowlist"` is a low-assurance caller-ID screen. The plugin
387
+ normalizes the provider-supplied `From` value and compares it to `allowFrom`.
388
+ Webhook verification authenticates provider delivery and payload integrity, but
389
+ it does not prove PSTN/VoIP caller-number ownership. Treat `allowFrom` as
390
+ caller-ID filtering, not strong caller identity.
391
+
392
+ Auto-responses use the agent system. Tune with:
393
+
394
+ - `responseModel`
395
+ - `responseSystemPrompt`
396
+ - `responseTimeoutMs`
397
+
398
+ ### Spoken output contract
399
+
400
+ For auto-responses, Voice Call appends a strict spoken-output contract to the system prompt:
401
+
402
+ - `{"spoken":"..."}`
403
+
404
+ Voice Call then extracts speech text defensively:
405
+
406
+ - Ignores payloads marked as reasoning/error content.
407
+ - Parses direct JSON, fenced JSON, or inline `"spoken"` keys.
408
+ - Falls back to plain text and removes likely planning/meta lead-in paragraphs.
409
+
410
+ This keeps spoken playback focused on caller-facing text and avoids leaking planning text into audio.
411
+
412
+ ### Conversation startup behavior
413
+
414
+ For outbound `conversation` calls, first-message handling is tied to live playback state:
415
+
416
+ - Barge-in queue clear and auto-response are suppressed only while the initial greeting is actively speaking.
417
+ - If initial playback fails, the call returns to `listening` and the initial message remains queued for retry.
418
+ - Initial playback for Twilio streaming starts on stream connect without extra delay.
419
+
420
+ ### Twilio stream disconnect grace
421
+
422
+ When a Twilio media stream disconnects, Voice Call waits `2000ms` before auto-ending the call:
423
+
424
+ - If the stream reconnects during that window, auto-end is canceled.
425
+ - If no stream is re-registered after the grace period, the call is ended to prevent stuck active calls.
426
+
427
+ ## CLI
428
+
429
+ ```bash
430
+ Durar voicecall call --to "+15555550123" --message "Hello from Durar"
431
+ Durar voicecall start --to "+15555550123" # alias for call
432
+ Durar voicecall continue --call-id <id> --message "Any questions?"
433
+ Durar voicecall speak --call-id <id> --message "One moment"
434
+ Durar voicecall end --call-id <id>
435
+ Durar voicecall status --call-id <id>
436
+ Durar voicecall tail
437
+ Durar voicecall latency # summarize turn latency from logs
438
+ Durar voicecall expose --mode funnel
439
+ ```
440
+
441
+ `latency` reads `calls.jsonl` from the default voice-call storage path. Use
442
+ `--file <path>` to point at a different log and `--last <n>` to limit analysis
443
+ to the last N records (default 200). Output includes p50/p90/p99 for turn
444
+ latency and listen-wait times.
445
+
446
+ ## Agent tool
447
+
448
+ Tool name: `voice_call`
449
+
450
+ Actions:
451
+
452
+ - `initiate_call` (message, to?, mode?)
453
+ - `continue_call` (callId, message)
454
+ - `speak_to_user` (callId, message)
455
+ - `end_call` (callId)
456
+ - `get_status` (callId)
457
+
458
+ This repo ships a matching skill doc at `skills/voice-call/SKILL.md`.
459
+
460
+ ## Gateway RPC
461
+
462
+ - `voicecall.initiate` (`to?`, `message`, `mode?`)
463
+ - `voicecall.continue` (`callId`, `message`)
464
+ - `voicecall.speak` (`callId`, `message`)
465
+ - `voicecall.end` (`callId`)
466
+ - `voicecall.status` (`callId`)
@@ -0,0 +1,78 @@
1
+ ---
2
+ summary: "Zalo Personal plugin: QR login + messaging via native zca-js (plugin install + channel config + tool)"
3
+ read_when:
4
+ - You want Zalo Personal (unofficial) support in Durar
5
+ - You are configuring or developing the zalouser plugin
6
+ title: "Zalo Personal Plugin"
7
+ ---
8
+
9
+ # Zalo Personal (plugin)
10
+
11
+ Zalo Personal support for Durar via a plugin, using native `zca-js` to automate a normal Zalo user account.
12
+
13
+ > **Warning:** Unofficial automation may lead to account suspension/ban. Use at your own risk.
14
+
15
+ ## Naming
16
+
17
+ 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.
18
+
19
+ ## Where it runs
20
+
21
+ This plugin runs **inside the Gateway process**.
22
+
23
+ If you use a remote Gateway, install/configure it on the **machine running the Gateway**, then restart the Gateway.
24
+
25
+ No external `zca`/`openzca` CLI binary is required.
26
+
27
+ ## Install
28
+
29
+ ### Option A: install from npm
30
+
31
+ ```bash
32
+ Durar plugins install @Durar/zalouser
33
+ ```
34
+
35
+ Restart the Gateway afterwards.
36
+
37
+ ### Option B: install from a local folder (dev)
38
+
39
+ ```bash
40
+ PLUGIN_SRC=./path/to/local/zalouser-plugin
41
+ Durar plugins install "$PLUGIN_SRC"
42
+ cd "$PLUGIN_SRC" && pnpm install
43
+ ```
44
+
45
+ Restart the Gateway afterwards.
46
+
47
+ ## Config
48
+
49
+ Channel config lives under `channels.zalouser` (not `plugins.entries.*`):
50
+
51
+ ```json5
52
+ {
53
+ channels: {
54
+ zalouser: {
55
+ enabled: true,
56
+ dmPolicy: "pairing",
57
+ },
58
+ },
59
+ }
60
+ ```
61
+
62
+ ## CLI
63
+
64
+ ```bash
65
+ Durar channels login --channel zalouser
66
+ Durar channels logout --channel zalouser
67
+ Durar channels status --probe
68
+ Durar message send --channel zalouser --target <threadId> --message "Hello from Durar"
69
+ Durar directory peers list --channel zalouser --query "name"
70
+ ```
71
+
72
+ ## Agent tool
73
+
74
+ Tool name: `zalouser`
75
+
76
+ Actions: `send`, `image`, `link`, `friends`, `groups`, `me`, `status`
77
+
78
+ Channel message actions also support `react` for message reactions.
package/docs/prose.md ADDED
@@ -0,0 +1,134 @@
1
+ ---
2
+ summary: "OpenProse: .prose workflows, slash commands, and state in Durar"
3
+ read_when:
4
+ - You want to run or write .prose workflows
5
+ - You want to enable the OpenProse plugin
6
+ - You need to understand state storage
7
+ title: "OpenProse"
8
+ ---
9
+
10
+ # OpenProse
11
+
12
+ OpenProse is a portable, markdown-first workflow format for orchestrating AI sessions. In Durar it ships as a plugin that installs an OpenProse skill pack plus a `/prose` slash command. Programs live in `.prose` files and can spawn multiple sub-agents with explicit control flow.
13
+
14
+ Official site: [https://www.prose.md](https://www.prose.md)
15
+
16
+ ## What it can do
17
+
18
+ - Multi-agent research + synthesis with explicit parallelism.
19
+ - Repeatable approval-safe workflows (code review, incident triage, content pipelines).
20
+ - Reusable `.prose` programs you can run across supported agent runtimes.
21
+
22
+ ## Install + enable
23
+
24
+ Bundled plugins are disabled by default. Enable OpenProse:
25
+
26
+ ```bash
27
+ Durar plugins enable open-prose
28
+ ```
29
+
30
+ Restart the Gateway after enabling the plugin.
31
+
32
+ Dev/local checkout: `Durar plugins install ./path/to/local/open-prose-plugin`
33
+
34
+ Related docs: [Plugins](/tools/plugin), [Plugin manifest](/plugins/manifest), [Skills](/tools/skills).
35
+
36
+ ## Slash command
37
+
38
+ OpenProse registers `/prose` as a user-invocable skill command. It routes to the OpenProse VM instructions and uses Durar tools under the hood.
39
+
40
+ Common commands:
41
+
42
+ ```
43
+ /prose help
44
+ /prose run <file.prose>
45
+ /prose run <handle/slug>
46
+ /prose run <https://example.com/file.prose>
47
+ /prose compile <file.prose>
48
+ /prose examples
49
+ /prose update
50
+ ```
51
+
52
+ ## Example: a simple `.prose` file
53
+
54
+ ```prose
55
+ # Research + synthesis with two agents running in parallel.
56
+
57
+ input topic: "What should we research?"
58
+
59
+ agent researcher:
60
+ model: sonnet
61
+ prompt: "You research thoroughly and cite sources."
62
+
63
+ agent writer:
64
+ model: opus
65
+ prompt: "You write a concise summary."
66
+
67
+ parallel:
68
+ findings = session: researcher
69
+ prompt: "Research {topic}."
70
+ draft = session: writer
71
+ prompt: "Summarize {topic}."
72
+
73
+ session "Merge the findings + draft into a final answer."
74
+ context: { findings, draft }
75
+ ```
76
+
77
+ ## File locations
78
+
79
+ OpenProse keeps state under `.prose/` in your workspace:
80
+
81
+ ```
82
+ .prose/
83
+ ├── .env
84
+ ├── runs/
85
+ │ └── {YYYYMMDD}-{HHMMSS}-{random}/
86
+ │ ├── program.prose
87
+ │ ├── state.md
88
+ │ ├── bindings/
89
+ │ └── agents/
90
+ └── agents/
91
+ ```
92
+
93
+ User-level persistent agents live at:
94
+
95
+ ```
96
+ ~/.prose/agents/
97
+ ```
98
+
99
+ ## State modes
100
+
101
+ OpenProse supports multiple state backends:
102
+
103
+ - **filesystem** (default): `.prose/runs/...`
104
+ - **in-context**: transient, for small programs
105
+ - **sqlite** (experimental): requires `sqlite3` binary
106
+ - **postgres** (experimental): requires `psql` and a connection string
107
+
108
+ Notes:
109
+
110
+ - sqlite/postgres are opt-in and experimental.
111
+ - postgres credentials flow into subagent logs; use a dedicated, least-privileged DB.
112
+
113
+ ## Remote programs
114
+
115
+ `/prose run <handle/slug>` resolves to `https://p.prose.md/<handle>/<slug>`.
116
+ Direct URLs are fetched as-is. This uses the `web_fetch` tool (or `exec` for POST).
117
+
118
+ ## Durar runtime mapping
119
+
120
+ OpenProse programs map to Durar primitives:
121
+
122
+ | OpenProse concept | Durar tool |
123
+ | ------------------------- | ---------------- |
124
+ | Spawn session / Task tool | `sessions_spawn` |
125
+ | File read/write | `read` / `write` |
126
+ | Web fetch | `web_fetch` |
127
+
128
+ If your tool allowlist blocks these tools, OpenProse programs will fail. See [Skills config](/tools/skills-config).
129
+
130
+ ## Security + approvals
131
+
132
+ Treat `.prose` files like code. Review before running. Use Durar tool allowlists and approval gates to control side effects.
133
+
134
+ For deterministic, approval-gated workflows, compare with [Lobster](/tools/lobster).