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,516 @@
1
+ ---
2
+ title: "Plugin Setup and Config"
3
+ sidebarTitle: "Setup and Config"
4
+ summary: "Setup wizards, setup-entry.ts, config schemas, and package.json metadata"
5
+ read_when:
6
+ - You are adding a setup wizard to a plugin
7
+ - You need to understand setup-entry.ts vs index.ts
8
+ - You are defining plugin config schemas or package.json Durar metadata
9
+ ---
10
+
11
+ # Plugin Setup and Config
12
+
13
+ Reference for plugin packaging (`package.json` metadata), manifests
14
+ (`Durar.plugin.json`), setup entries, and config schemas.
15
+
16
+ <Tip>
17
+ **Looking for a walkthrough?** The how-to guides cover packaging in context:
18
+ [Channel Plugins](/plugins/sdk-channel-plugins#step-1-package-and-manifest) and
19
+ [Provider Plugins](/plugins/sdk-provider-plugins#step-1-package-and-manifest).
20
+ </Tip>
21
+
22
+ ## Package metadata
23
+
24
+ Your `package.json` needs an `Durar` field that tells the plugin system what
25
+ your plugin provides:
26
+
27
+ **Channel plugin:**
28
+
29
+ ```json
30
+ {
31
+ "name": "@myorg/Durar-my-channel",
32
+ "version": "1.0.0",
33
+ "type": "module",
34
+ "Durar": {
35
+ "extensions": ["./index.ts"],
36
+ "setupEntry": "./setup-entry.ts",
37
+ "channel": {
38
+ "id": "my-channel",
39
+ "label": "My Channel",
40
+ "blurb": "Short description of the channel."
41
+ }
42
+ }
43
+ }
44
+ ```
45
+
46
+ **Provider plugin / Durar Gateway publish baseline:**
47
+
48
+ ```json Durar-Durar Gateway-package.json
49
+ {
50
+ "name": "@myorg/Durar-my-plugin",
51
+ "version": "1.0.0",
52
+ "type": "module",
53
+ "Durar": {
54
+ "extensions": ["./index.ts"],
55
+ "compat": {
56
+ "pluginApi": ">=2026.3.24-beta.2",
57
+ "minGatewayVersion": "2026.3.24-beta.2"
58
+ },
59
+ "build": {
60
+ "DurarVersion": "2026.3.24-beta.2",
61
+ "pluginSdkVersion": "2026.3.24-beta.2"
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ If you publish the plugin externally on Durar Gateway, those `compat` and `build`
68
+ fields are required. The canonical publish snippets live in
69
+ `docs/snippets/plugin-publish/`.
70
+
71
+ ### `Durar` fields
72
+
73
+ | Field | Type | Description |
74
+ | ------------ | ---------- | ------------------------------------------------------------------------------------------------------ |
75
+ | `extensions` | `string[]` | Entry point files (relative to package root) |
76
+ | `setupEntry` | `string` | Lightweight setup-only entry (optional) |
77
+ | `channel` | `object` | Channel catalog metadata for setup, picker, quickstart, and status surfaces |
78
+ | `providers` | `string[]` | Provider ids registered by this plugin |
79
+ | `install` | `object` | Install hints: `npmSpec`, `localPath`, `defaultChoice`, `minHostVersion`, `allowInvalidConfigRecovery` |
80
+ | `startup` | `object` | Startup behavior flags |
81
+
82
+ ### `Durar.channel`
83
+
84
+ `Durar.channel` is cheap package metadata for channel discovery and setup
85
+ surfaces before runtime loads.
86
+
87
+ | Field | Type | What it means |
88
+ | -------------------------------------- | ---------- | ----------------------------------------------------------------------------- |
89
+ | `id` | `string` | Canonical channel id. |
90
+ | `label` | `string` | Primary channel label. |
91
+ | `selectionLabel` | `string` | Picker/setup label when it should differ from `label`. |
92
+ | `detailLabel` | `string` | Secondary detail label for richer channel catalogs and status surfaces. |
93
+ | `docsPath` | `string` | Docs path for setup and selection links. |
94
+ | `docsLabel` | `string` | Override label used for docs links when it should differ from the channel id. |
95
+ | `blurb` | `string` | Short onboarding/catalog description. |
96
+ | `order` | `number` | Sort order in channel catalogs. |
97
+ | `aliases` | `string[]` | Extra lookup aliases for channel selection. |
98
+ | `preferOver` | `string[]` | Lower-priority plugin/channel ids this channel should outrank. |
99
+ | `systemImage` | `string` | Optional icon/system-image name for channel UI catalogs. |
100
+ | `selectionDocsPrefix` | `string` | Prefix text before docs links in selection surfaces. |
101
+ | `selectionDocsOmitLabel` | `boolean` | Show the docs path directly instead of a labeled docs link in selection copy. |
102
+ | `selectionExtras` | `string[]` | Extra short strings appended in selection copy. |
103
+ | `markdownCapable` | `boolean` | Marks the channel as markdown-capable for outbound formatting decisions. |
104
+ | `showConfigured` | `boolean` | Controls whether configured-channel listing surfaces show this channel. |
105
+ | `quickstartAllowFrom` | `boolean` | Opt this channel into the standard quickstart `allowFrom` setup flow. |
106
+ | `forceAccountBinding` | `boolean` | Require explicit account binding even when only one account exists. |
107
+ | `preferSessionLookupForAnnounceTarget` | `boolean` | Prefer session lookup when resolving announce targets for this channel. |
108
+
109
+ Example:
110
+
111
+ ```json
112
+ {
113
+ "Durar": {
114
+ "channel": {
115
+ "id": "my-channel",
116
+ "label": "My Channel",
117
+ "selectionLabel": "My Channel (self-hosted)",
118
+ "detailLabel": "My Channel Bot",
119
+ "docsPath": "/channels/my-channel",
120
+ "docsLabel": "my-channel",
121
+ "blurb": "Webhook-based self-hosted chat integration.",
122
+ "order": 80,
123
+ "aliases": ["mc"],
124
+ "preferOver": ["my-channel-legacy"],
125
+ "selectionDocsPrefix": "Guide:",
126
+ "selectionExtras": ["Markdown"],
127
+ "markdownCapable": true,
128
+ "quickstartAllowFrom": true
129
+ }
130
+ }
131
+ }
132
+ ```
133
+
134
+ ### `Durar.install`
135
+
136
+ `Durar.install` is package metadata, not manifest metadata.
137
+
138
+ | Field | Type | What it means |
139
+ | ---------------------------- | -------------------- | -------------------------------------------------------------------------------- |
140
+ | `npmSpec` | `string` | Canonical npm spec for install/update flows. |
141
+ | `localPath` | `string` | Local development or bundled install path. |
142
+ | `defaultChoice` | `"npm"` \| `"local"` | Preferred install source when both are available. |
143
+ | `minHostVersion` | `string` | Minimum supported Durar version in the form `>=x.y.z`. |
144
+ | `allowInvalidConfigRecovery` | `boolean` | Lets bundled-plugin reinstall flows recover from specific stale-config failures. |
145
+
146
+ If `minHostVersion` is set, install and manifest-registry loading both enforce
147
+ it. Older hosts skip the plugin; invalid version strings are rejected.
148
+
149
+ `allowInvalidConfigRecovery` is not a general bypass for broken configs. It is
150
+ for narrow bundled-plugin recovery only, so reinstall/setup can repair known
151
+ upgrade leftovers like a missing bundled plugin path or stale `channels.<id>`
152
+ entry for that same plugin. If config is broken for unrelated reasons, install
153
+ still fails closed and tells the operator to run `Durar doctor --fix`.
154
+
155
+ ### Deferred full load
156
+
157
+ Channel plugins can opt into deferred loading with:
158
+
159
+ ```json
160
+ {
161
+ "Durar": {
162
+ "extensions": ["./index.ts"],
163
+ "setupEntry": "./setup-entry.ts",
164
+ "startup": {
165
+ "deferConfiguredChannelFullLoadUntilAfterListen": true
166
+ }
167
+ }
168
+ }
169
+ ```
170
+
171
+ When enabled, Durar loads only `setupEntry` during the pre-listen startup
172
+ phase, even for already-configured channels. The full entry loads after the
173
+ gateway starts listening.
174
+
175
+ <Warning>
176
+ Only enable deferred loading when your `setupEntry` registers everything the
177
+ gateway needs before it starts listening (channel registration, HTTP routes,
178
+ gateway methods). If the full entry owns required startup capabilities, keep
179
+ the default behavior.
180
+ </Warning>
181
+
182
+ If your setup/full entry registers gateway RPC methods, keep them on a
183
+ plugin-specific prefix. Reserved core admin namespaces (`config.*`,
184
+ `exec.approvals.*`, `wizard.*`, `update.*`) stay core-owned and always resolve
185
+ to `operator.admin`.
186
+
187
+ ## Plugin manifest
188
+
189
+ Every native plugin must ship an `Durar.plugin.json` in the package root.
190
+ Durar uses this to validate config without executing plugin code.
191
+
192
+ ```json
193
+ {
194
+ "id": "my-plugin",
195
+ "name": "My Plugin",
196
+ "description": "Adds My Plugin capabilities to Durar",
197
+ "configSchema": {
198
+ "type": "object",
199
+ "additionalProperties": false,
200
+ "properties": {
201
+ "webhookSecret": {
202
+ "type": "string",
203
+ "description": "Webhook verification secret"
204
+ }
205
+ }
206
+ }
207
+ }
208
+ ```
209
+
210
+ For channel plugins, add `kind` and `channels`:
211
+
212
+ ```json
213
+ {
214
+ "id": "my-channel",
215
+ "kind": "channel",
216
+ "channels": ["my-channel"],
217
+ "configSchema": {
218
+ "type": "object",
219
+ "additionalProperties": false,
220
+ "properties": {}
221
+ }
222
+ }
223
+ ```
224
+
225
+ Even plugins with no config must ship a schema. An empty schema is valid:
226
+
227
+ ```json
228
+ {
229
+ "id": "my-plugin",
230
+ "configSchema": {
231
+ "type": "object",
232
+ "additionalProperties": false
233
+ }
234
+ }
235
+ ```
236
+
237
+ See [Plugin Manifest](/plugins/manifest) for the full schema reference.
238
+
239
+ ## Durar Gateway publishing
240
+
241
+ For plugin packages, use the package-specific Durar Gateway command:
242
+
243
+ ```bash
244
+ Durar Gateway package publish your-org/your-plugin --dry-run
245
+ Durar Gateway package publish your-org/your-plugin
246
+ ```
247
+
248
+ The legacy skill-only publish alias is for skills. Plugin packages should
249
+ always use `Durar Gateway package publish`.
250
+
251
+ ## Setup entry
252
+
253
+ The `setup-entry.ts` file is a lightweight alternative to `index.ts` that
254
+ Durar loads when it only needs setup surfaces (onboarding, config repair,
255
+ disabled channel inspection).
256
+
257
+ ```typescript
258
+ // setup-entry.ts
259
+ import { defineSetupPluginEntry } from "Durar/plugin-sdk/channel-core";
260
+ import { myChannelPlugin } from "./src/channel.js";
261
+
262
+ export default defineSetupPluginEntry(myChannelPlugin);
263
+ ```
264
+
265
+ This avoids loading heavy runtime code (crypto libraries, CLI registrations,
266
+ background services) during setup flows.
267
+
268
+ **When Durar uses `setupEntry` instead of the full entry:**
269
+
270
+ - The channel is disabled but needs setup/onboarding surfaces
271
+ - The channel is enabled but unconfigured
272
+ - Deferred loading is enabled (`deferConfiguredChannelFullLoadUntilAfterListen`)
273
+
274
+ **What `setupEntry` must register:**
275
+
276
+ - The channel plugin object (via `defineSetupPluginEntry`)
277
+ - Any HTTP routes required before gateway listen
278
+ - Any gateway methods needed during startup
279
+
280
+ Those startup gateway methods should still avoid reserved core admin
281
+ namespaces such as `config.*` or `update.*`.
282
+
283
+ **What `setupEntry` should NOT include:**
284
+
285
+ - CLI registrations
286
+ - Background services
287
+ - Heavy runtime imports (crypto, SDKs)
288
+ - Gateway methods only needed after startup
289
+
290
+ ### Narrow setup helper imports
291
+
292
+ For hot setup-only paths, prefer the narrow setup helper seams over the broader
293
+ `plugin-sdk/setup` umbrella when you only need part of the setup surface:
294
+
295
+ | Import path | Use it for | Key exports |
296
+ | ---------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
297
+ | `plugin-sdk/setup-runtime` | setup-time runtime helpers that stay available in `setupEntry` / deferred channel startup | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
298
+ | `plugin-sdk/setup-adapter-runtime` | environment-aware account setup adapters | `createEnvPatchedAccountSetupAdapter` |
299
+ | `plugin-sdk/setup-tools` | setup/install CLI/archive/docs helpers | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
300
+
301
+ Use the broader `plugin-sdk/setup` seam when you want the full shared setup
302
+ toolbox, including config-patch helpers such as
303
+ `moveSingleAccountChannelSectionToDefaultAccount(...)`.
304
+
305
+ The setup patch adapters stay hot-path safe on import. Their bundled
306
+ single-account promotion contract-surface lookup is lazy, so importing
307
+ `plugin-sdk/setup-runtime` does not eagerly load bundled contract-surface
308
+ discovery before the adapter is actually used.
309
+
310
+ ### Channel-owned single-account promotion
311
+
312
+ When a channel upgrades from a single-account top-level config to
313
+ `channels.<id>.accounts.*`, the default shared behavior is to move promoted
314
+ account-scoped values into `accounts.default`.
315
+
316
+ Bundled channels can narrow or override that promotion through their setup
317
+ contract surface:
318
+
319
+ - `singleAccountKeysToMove`: extra top-level keys that should move into the
320
+ promoted account
321
+ - `namedAccountPromotionKeys`: when named accounts already exist, only these
322
+ keys move into the promoted account; shared policy/delivery keys stay at the
323
+ channel root
324
+ - `resolveSingleAccountPromotionTarget(...)`: choose which existing account
325
+ receives promoted values
326
+
327
+ Matrix is the current bundled example. If exactly one named Matrix account
328
+ already exists, or if `defaultAccount` points at an existing non-canonical key
329
+ such as `Ops`, promotion preserves that account instead of creating a new
330
+ `accounts.default` entry.
331
+
332
+ ## Config schema
333
+
334
+ Plugin config is validated against the JSON Schema in your manifest. Users
335
+ configure plugins via:
336
+
337
+ ```json5
338
+ {
339
+ plugins: {
340
+ entries: {
341
+ "my-plugin": {
342
+ config: {
343
+ webhookSecret: "abc123",
344
+ },
345
+ },
346
+ },
347
+ },
348
+ }
349
+ ```
350
+
351
+ Your plugin receives this config as `api.pluginConfig` during registration.
352
+
353
+ For channel-specific config, use the channel config section instead:
354
+
355
+ ```json5
356
+ {
357
+ channels: {
358
+ "my-channel": {
359
+ token: "bot-token",
360
+ allowFrom: ["user1", "user2"],
361
+ },
362
+ },
363
+ }
364
+ ```
365
+
366
+ ### Building channel config schemas
367
+
368
+ Use `buildChannelConfigSchema` from `Durar/plugin-sdk/core` to convert a
369
+ Zod schema into the `ChannelConfigSchema` wrapper that Durar validates:
370
+
371
+ ```typescript
372
+ import { z } from "zod";
373
+ import { buildChannelConfigSchema } from "Durar/plugin-sdk/core";
374
+
375
+ const accountSchema = z.object({
376
+ token: z.string().optional(),
377
+ allowFrom: z.array(z.string()).optional(),
378
+ accounts: z.object({}).catchall(z.any()).optional(),
379
+ defaultAccount: z.string().optional(),
380
+ });
381
+
382
+ const configSchema = buildChannelConfigSchema(accountSchema);
383
+ ```
384
+
385
+ ## Setup wizards
386
+
387
+ Channel plugins can provide interactive setup wizards for `Durar onboard`.
388
+ The wizard is a `ChannelSetupWizard` object on the `ChannelPlugin`:
389
+
390
+ ```typescript
391
+ import type { ChannelSetupWizard } from "Durar/plugin-sdk/channel-setup";
392
+
393
+ const setupWizard: ChannelSetupWizard = {
394
+ channel: "my-channel",
395
+ status: {
396
+ configuredLabel: "Connected",
397
+ unconfiguredLabel: "Not configured",
398
+ resolveConfigured: ({ cfg }) => Boolean((cfg.channels as any)?.["my-channel"]?.token),
399
+ },
400
+ credentials: [
401
+ {
402
+ inputKey: "token",
403
+ providerHint: "my-channel",
404
+ credentialLabel: "Bot token",
405
+ preferredEnvVar: "MY_CHANNEL_BOT_TOKEN",
406
+ envPrompt: "Use MY_CHANNEL_BOT_TOKEN from environment?",
407
+ keepPrompt: "Keep current token?",
408
+ inputPrompt: "Enter your bot token:",
409
+ inspect: ({ cfg, accountId }) => {
410
+ const token = (cfg.channels as any)?.["my-channel"]?.token;
411
+ return {
412
+ accountConfigured: Boolean(token),
413
+ hasConfiguredValue: Boolean(token),
414
+ };
415
+ },
416
+ },
417
+ ],
418
+ };
419
+ ```
420
+
421
+ The `ChannelSetupWizard` type supports `credentials`, `textInputs`,
422
+ `dmPolicy`, `allowFrom`, `groupAccess`, `prepare`, `finalize`, and more.
423
+ See bundled plugin packages (for example the Discord plugin `src/channel.setup.ts`) for
424
+ full examples.
425
+
426
+ For DM allowlist prompts that only need the standard
427
+ `note -> prompt -> parse -> merge -> patch` flow, prefer the shared setup
428
+ helpers from `Durar/plugin-sdk/setup`: `createPromptParsedAllowFromForAccount(...)`,
429
+ `createTopLevelChannelParsedAllowFromPrompt(...)`, and
430
+ `createNestedChannelParsedAllowFromPrompt(...)`.
431
+
432
+ For channel setup status blocks that only vary by labels, scores, and optional
433
+ extra lines, prefer `createStandardChannelSetupStatus(...)` from
434
+ `Durar/plugin-sdk/setup` instead of hand-rolling the same `status` object in
435
+ each plugin.
436
+
437
+ For optional setup surfaces that should only appear in certain contexts, use
438
+ `createOptionalChannelSetupSurface` from `Durar/plugin-sdk/channel-setup`:
439
+
440
+ ```typescript
441
+ import { createOptionalChannelSetupSurface } from "Durar/plugin-sdk/channel-setup";
442
+
443
+ const setupSurface = createOptionalChannelSetupSurface({
444
+ channel: "my-channel",
445
+ label: "My Channel",
446
+ npmSpec: "@myorg/Durar-my-channel",
447
+ docsPath: "/channels/my-channel",
448
+ });
449
+ // Returns { setupAdapter, setupWizard }
450
+ ```
451
+
452
+ `plugin-sdk/channel-setup` also exposes the lower-level
453
+ `createOptionalChannelSetupAdapter(...)` and
454
+ `createOptionalChannelSetupWizard(...)` builders when you only need one half of
455
+ that optional-install surface.
456
+
457
+ The generated optional adapter/wizard fail closed on real config writes. They
458
+ reuse one install-required message across `validateInput`,
459
+ `applyAccountConfig`, and `finalize`, and append a docs link when `docsPath` is
460
+ set.
461
+
462
+ For binary-backed setup UIs, prefer the shared delegated helpers instead of
463
+ copying the same binary/status glue into every channel:
464
+
465
+ - `createDetectedBinaryStatus(...)` for status blocks that vary only by labels,
466
+ hints, scores, and binary detection
467
+ - `createCliPathTextInput(...)` for path-backed text inputs
468
+ - `createDelegatedSetupWizardStatusResolvers(...)`,
469
+ `createDelegatedPrepare(...)`, `createDelegatedFinalize(...)`, and
470
+ `createDelegatedResolveConfigured(...)` when `setupEntry` needs to forward to
471
+ a heavier full wizard lazily
472
+ - `createDelegatedTextInputShouldPrompt(...)` when `setupEntry` only needs to
473
+ delegate a `textInputs[*].shouldPrompt` decision
474
+
475
+ ## Publishing and installing
476
+
477
+ **External plugins:** publish to [Durar Gateway](/tools/Durar Gateway) or npm, then install:
478
+
479
+ ```bash
480
+ Durar plugins install @myorg/Durar-my-plugin
481
+ ```
482
+
483
+ Durar tries Durar Gateway first and falls back to npm automatically. You can also
484
+ force Durar Gateway explicitly:
485
+
486
+ ```bash
487
+ Durar plugins install Durar Gateway:@myorg/Durar-my-plugin # Durar Gateway only
488
+ ```
489
+
490
+ There is no matching `npm:` override. Use the normal npm package spec when you
491
+ want the npm path after Durar Gateway fallback:
492
+
493
+ ```bash
494
+ Durar plugins install @myorg/Durar-my-plugin
495
+ ```
496
+
497
+ **In-repo plugins:** place under the bundled plugin workspace tree and they are automatically
498
+ discovered during build.
499
+
500
+ **Users can install:**
501
+
502
+ ```bash
503
+ Durar plugins install <package-name>
504
+ ```
505
+
506
+ <Info>
507
+ For npm-sourced installs, `Durar plugins install` runs
508
+ `npm install --ignore-scripts` (no lifecycle scripts). Keep plugin dependency
509
+ trees pure JS/TS and avoid packages that require `postinstall` builds.
510
+ </Info>
511
+
512
+ ## Related
513
+
514
+ - [SDK Entry Points](/plugins/sdk-entrypoints) -- `definePluginEntry` and `defineChannelPluginEntry`
515
+ - [Plugin Manifest](/plugins/manifest) -- full manifest schema reference
516
+ - [Building Plugins](/plugins/building-plugins) -- step-by-step getting started guide