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,344 @@
1
+ ---
2
+ title: "Prompt Caching"
3
+ summary: "Prompt caching knobs, merge order, provider behavior, and tuning patterns"
4
+ read_when:
5
+ - You want to reduce prompt token costs with cache retention
6
+ - You need per-agent cache behavior in multi-agent setups
7
+ - You are tuning heartbeat and cache-ttl pruning together
8
+ ---
9
+
10
+ # Prompt caching
11
+
12
+ Prompt caching means the model provider can reuse unchanged prompt prefixes (usually system/developer instructions and other stable context) across turns instead of re-processing them every time. Durar normalizes provider usage into `cacheRead` and `cacheWrite` where the upstream API exposes those counters directly.
13
+
14
+ Status surfaces can also recover cache counters from the most recent transcript
15
+ usage log when the live session snapshot is missing them, so `/status` can keep
16
+ showing a cache line after partial session metadata loss. Existing nonzero live
17
+ cache values still take precedence over transcript fallback values.
18
+
19
+ Why this matters: lower token cost, faster responses, and more predictable performance for long-running sessions. Without caching, repeated prompts pay the full prompt cost on every turn even when most input did not change.
20
+
21
+ This page covers all cache-related knobs that affect prompt reuse and token cost.
22
+
23
+ Provider references:
24
+
25
+ - Anthropic prompt caching: [https://platform.claude.com/docs/en/build-with-claude/prompt-caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)
26
+ - OpenAI prompt caching: [https://developers.openai.com/api/docs/guides/prompt-caching](https://developers.openai.com/api/docs/guides/prompt-caching)
27
+ - OpenAI API headers and request IDs: [https://developers.openai.com/api/reference/overview](https://developers.openai.com/api/reference/overview)
28
+ - Anthropic request IDs and errors: [https://platform.claude.com/docs/en/api/errors](https://platform.claude.com/docs/en/api/errors)
29
+
30
+ ## Primary knobs
31
+
32
+ ### `cacheRetention` (global default, model, and per-agent)
33
+
34
+ Set cache retention as a global default for all models:
35
+
36
+ ```yaml
37
+ agents:
38
+ defaults:
39
+ params:
40
+ cacheRetention: "long" # none | short | long
41
+ ```
42
+
43
+ Override per-model:
44
+
45
+ ```yaml
46
+ agents:
47
+ defaults:
48
+ models:
49
+ "anthropic/claude-opus-4-6":
50
+ params:
51
+ cacheRetention: "short" # none | short | long
52
+ ```
53
+
54
+ Per-agent override:
55
+
56
+ ```yaml
57
+ agents:
58
+ list:
59
+ - id: "alerts"
60
+ params:
61
+ cacheRetention: "none"
62
+ ```
63
+
64
+ Config merge order:
65
+
66
+ 1. `agents.defaults.params` (global default — applies to all models)
67
+ 2. `agents.defaults.models["provider/model"].params` (per-model override)
68
+ 3. `agents.list[].params` (matching agent id; overrides by key)
69
+
70
+ ### `contextPruning.mode: "cache-ttl"`
71
+
72
+ Prunes old tool-result context after cache TTL windows so post-idle requests do not re-cache oversized history.
73
+
74
+ ```yaml
75
+ agents:
76
+ defaults:
77
+ contextPruning:
78
+ mode: "cache-ttl"
79
+ ttl: "1h"
80
+ ```
81
+
82
+ See [Session Pruning](/concepts/session-pruning) for full behavior.
83
+
84
+ ### Heartbeat keep-warm
85
+
86
+ Heartbeat can keep cache windows warm and reduce repeated cache writes after idle gaps.
87
+
88
+ ```yaml
89
+ agents:
90
+ defaults:
91
+ heartbeat:
92
+ every: "55m"
93
+ ```
94
+
95
+ Per-agent heartbeat is supported at `agents.list[].heartbeat`.
96
+
97
+ ## Provider behavior
98
+
99
+ ### Anthropic (direct API)
100
+
101
+ - `cacheRetention` is supported.
102
+ - With Anthropic API-key auth profiles, Durar seeds `cacheRetention: "short"` for Anthropic model refs when unset.
103
+ - Anthropic native Messages responses expose both `cache_read_input_tokens` and `cache_creation_input_tokens`, so Durar can show both `cacheRead` and `cacheWrite`.
104
+ - For native Anthropic requests, `cacheRetention: "short"` maps to the default 5-minute ephemeral cache, and `cacheRetention: "long"` upgrades to the 1-hour TTL only on direct `api.anthropic.com` hosts.
105
+
106
+ ### OpenAI (direct API)
107
+
108
+ - Prompt caching is automatic on supported recent models. Durar does not need to inject block-level cache markers.
109
+ - Durar uses `prompt_cache_key` to keep cache routing stable across turns and uses `prompt_cache_retention: "24h"` only when `cacheRetention: "long"` is selected on direct OpenAI hosts.
110
+ - OpenAI responses expose cached prompt tokens via `usage.prompt_tokens_details.cached_tokens` (or `input_tokens_details.cached_tokens` on Responses API events). Durar maps that to `cacheRead`.
111
+ - OpenAI does not expose a separate cache-write token counter, so `cacheWrite` stays `0` on OpenAI paths even when the provider is warming a cache.
112
+ - OpenAI returns useful tracing and rate-limit headers such as `x-request-id`, `openai-processing-ms`, and `x-ratelimit-*`, but cache-hit accounting should come from the usage payload, not from headers.
113
+ - In practice, OpenAI often behaves like an initial-prefix cache rather than Anthropic-style moving full-history reuse. Stable long-prefix text turns can land near a `4864` cached-token plateau in current live probes, while tool-heavy or MCP-style transcripts often plateau near `4608` cached tokens even on exact repeats.
114
+
115
+ ### Anthropic Vertex
116
+
117
+ - Anthropic models on Vertex AI (`anthropic-vertex/*`) support `cacheRetention` the same way as direct Anthropic.
118
+ - `cacheRetention: "long"` maps to the real 1-hour prompt-cache TTL on Vertex AI endpoints.
119
+ - Default cache retention for `anthropic-vertex` matches direct Anthropic defaults.
120
+ - Vertex requests are routed through boundary-aware cache shaping so cache reuse stays aligned with what providers actually receive.
121
+
122
+ ### Amazon Bedrock
123
+
124
+ - Anthropic Claude model refs (`amazon-bedrock/*anthropic.claude*`) support explicit `cacheRetention` pass-through.
125
+ - Non-Anthropic Bedrock models are forced to `cacheRetention: "none"` at runtime.
126
+
127
+ ### OpenRouter Anthropic models
128
+
129
+ For `openrouter/anthropic/*` model refs, Durar injects Anthropic
130
+ `cache_control` on system/developer prompt blocks to improve prompt-cache
131
+ reuse only when the request is still targeting a verified OpenRouter route
132
+ (`openrouter` on its default endpoint, or any provider/base URL that resolves
133
+ to `openrouter.ai`).
134
+
135
+ If you repoint the model at an arbitrary OpenAI-compatible proxy URL, Durar
136
+ stops injecting those OpenRouter-specific Anthropic cache markers.
137
+
138
+ ### Other providers
139
+
140
+ If the provider does not support this cache mode, `cacheRetention` has no effect.
141
+
142
+ ### Google Gemini direct API
143
+
144
+ - Direct Gemini transport (`api: "google-generative-ai"`) reports cache hits
145
+ through upstream `cachedContentTokenCount`; Durar maps that to `cacheRead`.
146
+ - When `cacheRetention` is set on a direct Gemini model, Durar automatically
147
+ creates, reuses, and refreshes `cachedContents` resources for system prompts
148
+ on Google AI Studio runs. This means you no longer need to pre-create a
149
+ cached-content handle manually.
150
+ - You can still pass a pre-existing Gemini cached-content handle through as
151
+ `params.cachedContent` (or legacy `params.cached_content`) on the configured
152
+ model.
153
+ - This is separate from Anthropic/OpenAI prompt-prefix caching. For Gemini,
154
+ Durar manages a provider-native `cachedContents` resource rather than
155
+ injecting cache markers into the request.
156
+
157
+ ### Gemini CLI JSON usage
158
+
159
+ - Gemini CLI JSON output can also surface cache hits through `stats.cached`;
160
+ Durar maps that to `cacheRead`.
161
+ - If the CLI omits a direct `stats.input` value, Durar derives input tokens
162
+ from `stats.input_tokens - stats.cached`.
163
+ - This is usage normalization only. It does not mean Durar is creating
164
+ Anthropic/OpenAI-style prompt-cache markers for Gemini CLI.
165
+
166
+ ## System-prompt cache boundary
167
+
168
+ Durar splits the system prompt into a **stable prefix** and a **volatile
169
+ suffix** separated by an internal cache-prefix boundary. Content above the
170
+ boundary (tool definitions, skills metadata, workspace files, and other
171
+ relatively static context) is ordered so it stays byte-identical across turns.
172
+ Content below the boundary (for example `HEARTBEAT.md`, runtime timestamps, and
173
+ other per-turn metadata) is allowed to change without invalidating the cached
174
+ prefix.
175
+
176
+ Key design choices:
177
+
178
+ - Stable workspace project-context files are ordered before `HEARTBEAT.md` so
179
+ heartbeat churn does not bust the stable prefix.
180
+ - The boundary is applied across Anthropic-family, OpenAI-family, Google, and
181
+ CLI transport shaping so all supported providers benefit from the same prefix
182
+ stability.
183
+ - Codex Responses and Anthropic Vertex requests are routed through
184
+ boundary-aware cache shaping so cache reuse stays aligned with what providers
185
+ actually receive.
186
+ - System-prompt fingerprints are normalized (whitespace, line endings,
187
+ hook-added context, runtime capability ordering) so semantically unchanged
188
+ prompts share KV/cache across turns.
189
+
190
+ If you see unexpected `cacheWrite` spikes after a config or workspace change,
191
+ check whether the change lands above or below the cache boundary. Moving
192
+ volatile content below the boundary (or stabilizing it) often resolves the
193
+ issue.
194
+
195
+ ## Durar cache-stability guards
196
+
197
+ Durar also keeps several cache-sensitive payload shapes deterministic before
198
+ the request reaches the provider:
199
+
200
+ - Bundle MCP tool catalogs are sorted deterministically before tool
201
+ registration, so `listTools()` order changes do not churn the tools block and
202
+ bust prompt-cache prefixes.
203
+ - Legacy sessions with persisted image blocks keep the **3 most recent
204
+ completed turns** intact; older already-processed image blocks may be
205
+ replaced with a marker so image-heavy follow-ups do not keep re-sending large
206
+ stale payloads.
207
+
208
+ ## Tuning patterns
209
+
210
+ ### Mixed traffic (recommended default)
211
+
212
+ Keep a long-lived baseline on your main agent, disable caching on bursty notifier agents:
213
+
214
+ ```yaml
215
+ agents:
216
+ defaults:
217
+ model:
218
+ primary: "anthropic/claude-opus-4-6"
219
+ models:
220
+ "anthropic/claude-opus-4-6":
221
+ params:
222
+ cacheRetention: "long"
223
+ list:
224
+ - id: "research"
225
+ default: true
226
+ heartbeat:
227
+ every: "55m"
228
+ - id: "alerts"
229
+ params:
230
+ cacheRetention: "none"
231
+ ```
232
+
233
+ ### Cost-first baseline
234
+
235
+ - Set baseline `cacheRetention: "short"`.
236
+ - Enable `contextPruning.mode: "cache-ttl"`.
237
+ - Keep heartbeat below your TTL only for agents that benefit from warm caches.
238
+
239
+ ## Cache diagnostics
240
+
241
+ Durar exposes dedicated cache-trace diagnostics for embedded agent runs.
242
+
243
+ For normal user-facing diagnostics, `/status` and other usage summaries can use
244
+ the latest transcript usage entry as a fallback source for `cacheRead` /
245
+ `cacheWrite` when the live session entry does not have those counters.
246
+
247
+ ## Live regression tests
248
+
249
+ Durar keeps one combined live cache regression gate for repeated prefixes, tool turns, image turns, MCP-style tool transcripts, and an Anthropic no-cache control.
250
+
251
+ - `src/agents/live-cache-regression.live.test.ts`
252
+ - `src/agents/live-cache-regression-baseline.ts`
253
+
254
+ Run the narrow live gate with:
255
+
256
+ ```sh
257
+ Durar_LIVE_TEST=1 Durar_LIVE_CACHE_TEST=1 pnpm test:live:cache
258
+ ```
259
+
260
+ The baseline file stores the most recent observed live numbers plus the provider-specific regression floors used by the test.
261
+ The runner also uses fresh per-run session IDs and prompt namespaces so previous cache state does not pollute the current regression sample.
262
+
263
+ These tests intentionally do not use identical success criteria across providers.
264
+
265
+ ### Anthropic live expectations
266
+
267
+ - Expect explicit warmup writes via `cacheWrite`.
268
+ - Expect near-full history reuse on repeated turns because Anthropic cache control advances the cache breakpoint through the conversation.
269
+ - Current live assertions still use high hit-rate thresholds for stable, tool, and image paths.
270
+
271
+ ### OpenAI live expectations
272
+
273
+ - Expect `cacheRead` only. `cacheWrite` remains `0`.
274
+ - Treat repeated-turn cache reuse as a provider-specific plateau, not as Anthropic-style moving full-history reuse.
275
+ - Current live assertions use conservative floor checks derived from observed live behavior on `gpt-5.4-mini`:
276
+ - stable prefix: `cacheRead >= 4608`, hit rate `>= 0.90`
277
+ - tool transcript: `cacheRead >= 4096`, hit rate `>= 0.85`
278
+ - image transcript: `cacheRead >= 3840`, hit rate `>= 0.82`
279
+ - MCP-style transcript: `cacheRead >= 4096`, hit rate `>= 0.85`
280
+
281
+ Fresh combined live verification on 2026-04-04 landed at:
282
+
283
+ - stable prefix: `cacheRead=4864`, hit rate `0.966`
284
+ - tool transcript: `cacheRead=4608`, hit rate `0.896`
285
+ - image transcript: `cacheRead=4864`, hit rate `0.954`
286
+ - MCP-style transcript: `cacheRead=4608`, hit rate `0.891`
287
+
288
+ Recent local wall-clock time for the combined gate was about `88s`.
289
+
290
+ Why the assertions differ:
291
+
292
+ - Anthropic exposes explicit cache breakpoints and moving conversation-history reuse.
293
+ - OpenAI prompt caching is still exact-prefix sensitive, but the effective reusable prefix in live Responses traffic can plateau earlier than the full prompt.
294
+ - Because of that, comparing Anthropic and OpenAI by a single cross-provider percentage threshold creates false regressions.
295
+
296
+ ### `diagnostics.cacheTrace` config
297
+
298
+ ```yaml
299
+ diagnostics:
300
+ cacheTrace:
301
+ enabled: true
302
+ filePath: "~/.Durar/logs/cache-trace.jsonl" # optional
303
+ includeMessages: false # default true
304
+ includePrompt: false # default true
305
+ includeSystem: false # default true
306
+ ```
307
+
308
+ Defaults:
309
+
310
+ - `filePath`: `$Durar_STATE_DIR/logs/cache-trace.jsonl`
311
+ - `includeMessages`: `true`
312
+ - `includePrompt`: `true`
313
+ - `includeSystem`: `true`
314
+
315
+ ### Env toggles (one-off debugging)
316
+
317
+ - `Durar_CACHE_TRACE=1` enables cache tracing.
318
+ - `Durar_CACHE_TRACE_FILE=/path/to/cache-trace.jsonl` overrides output path.
319
+ - `Durar_CACHE_TRACE_MESSAGES=0|1` toggles full message payload capture.
320
+ - `Durar_CACHE_TRACE_PROMPT=0|1` toggles prompt text capture.
321
+ - `Durar_CACHE_TRACE_SYSTEM=0|1` toggles system prompt capture.
322
+
323
+ ### What to inspect
324
+
325
+ - Cache trace events are JSONL and include staged snapshots like `session:loaded`, `prompt:before`, `stream:context`, and `session:after`.
326
+ - Per-turn cache token impact is visible in normal usage surfaces via `cacheRead` and `cacheWrite` (for example `/usage full` and session usage summaries).
327
+ - For Anthropic, expect both `cacheRead` and `cacheWrite` when caching is active.
328
+ - For OpenAI, expect `cacheRead` on cache hits and `cacheWrite` to remain `0`; OpenAI does not publish a separate cache-write token field.
329
+ - If you need request tracing, log request IDs and rate-limit headers separately from cache metrics. Durar's current cache-trace output is focused on prompt/session shape and normalized token usage rather than raw provider response headers.
330
+
331
+ ## Quick troubleshooting
332
+
333
+ - High `cacheWrite` on most turns: check for volatile system-prompt inputs and verify model/provider supports your cache settings.
334
+ - High `cacheWrite` on Anthropic: often means the cache breakpoint is landing on content that changes every request.
335
+ - Low OpenAI `cacheRead`: verify the stable prefix is at the front, the repeated prefix is at least 1024 tokens, and the same `prompt_cache_key` is reused for turns that should share a cache.
336
+ - No effect from `cacheRetention`: confirm model key matches `agents.defaults.models["provider/model"]`.
337
+ - Bedrock Nova/Mistral requests with cache settings: expected runtime force to `none`.
338
+
339
+ Related docs:
340
+
341
+ - [Anthropic](/providers/anthropic)
342
+ - [Token Use and Costs](/reference/token-use)
343
+ - [Session Pruning](/concepts/session-pruning)
344
+ - [Gateway Configuration Reference](/gateway/configuration-reference)
@@ -0,0 +1,43 @@
1
+ ---
2
+ summary: "RPC adapters for external CLIs (signal-cli, legacy imsg) and gateway patterns"
3
+ read_when:
4
+ - Adding or changing external CLI integrations
5
+ - Debugging RPC adapters (signal-cli, imsg)
6
+ title: "RPC Adapters"
7
+ ---
8
+
9
+ # RPC adapters
10
+
11
+ Durar integrates external CLIs via JSON-RPC. Two patterns are used today.
12
+
13
+ ## Pattern A: HTTP daemon (signal-cli)
14
+
15
+ - `signal-cli` runs as a daemon with JSON-RPC over HTTP.
16
+ - Event stream is SSE (`/api/v1/events`).
17
+ - Health probe: `/api/v1/check`.
18
+ - Durar owns lifecycle when `channels.signal.autoStart=true`.
19
+
20
+ See [Signal](/channels/signal) for setup and endpoints.
21
+
22
+ ## Pattern B: stdio child process (legacy: imsg)
23
+
24
+ > **Note:** For new iMessage setups, use [BlueBubbles](/channels/bluebubbles) instead.
25
+
26
+ - Durar spawns `imsg rpc` as a child process (legacy iMessage integration).
27
+ - JSON-RPC is line-delimited over stdin/stdout (one JSON object per line).
28
+ - No TCP port, no daemon required.
29
+
30
+ Core methods used:
31
+
32
+ - `watch.subscribe` → notifications (`method: "message"`)
33
+ - `watch.unsubscribe`
34
+ - `send`
35
+ - `chats.list` (probe/diagnostics)
36
+
37
+ See [iMessage](/channels/imessage) for legacy setup and addressing (`chat_id` preferred).
38
+
39
+ ## Adapter guidelines
40
+
41
+ - Gateway owns the process (start/stop tied to provider lifecycle).
42
+ - Keep RPC clients resilient: timeouts, restart on exit.
43
+ - Prefer stable IDs (e.g., `chat_id`) over display strings.
@@ -0,0 +1,148 @@
1
+ ---
2
+ summary: "Canonical supported vs unsupported SecretRef credential surface"
3
+ read_when:
4
+ - Verifying SecretRef credential coverage
5
+ - Auditing whether a credential is eligible for `secrets configure` or `secrets apply`
6
+ - Verifying why a credential is outside the supported surface
7
+ title: "SecretRef Credential Surface"
8
+ ---
9
+
10
+ # SecretRef credential surface
11
+
12
+ This page defines the canonical SecretRef credential surface.
13
+
14
+ Scope intent:
15
+
16
+ - In scope: strictly user-supplied credentials that Durar does not mint or rotate.
17
+ - Out of scope: runtime-minted or rotating credentials, OAuth refresh material, and session-like artifacts.
18
+
19
+ ## Supported credentials
20
+
21
+ ### `Durar.json` targets (`secrets configure` + `secrets apply` + `secrets audit`)
22
+
23
+ [//]: # "secretref-supported-list-start"
24
+
25
+ - `models.providers.*.apiKey`
26
+ - `models.providers.*.headers.*`
27
+ - `models.providers.*.request.auth.token`
28
+ - `models.providers.*.request.auth.value`
29
+ - `models.providers.*.request.headers.*`
30
+ - `models.providers.*.request.proxy.tls.ca`
31
+ - `models.providers.*.request.proxy.tls.cert`
32
+ - `models.providers.*.request.proxy.tls.key`
33
+ - `models.providers.*.request.proxy.tls.passphrase`
34
+ - `models.providers.*.request.tls.ca`
35
+ - `models.providers.*.request.tls.cert`
36
+ - `models.providers.*.request.tls.key`
37
+ - `models.providers.*.request.tls.passphrase`
38
+ - `skills.entries.*.apiKey`
39
+ - `agents.defaults.memorySearch.remote.apiKey`
40
+ - `agents.list[].memorySearch.remote.apiKey`
41
+ - `talk.providers.*.apiKey`
42
+ - `messages.tts.providers.*.apiKey`
43
+ - `tools.web.fetch.firecrawl.apiKey`
44
+ - `plugins.entries.firecrawl.config.webFetch.apiKey`
45
+ - `plugins.entries.brave.config.webSearch.apiKey`
46
+ - `plugins.entries.google.config.webSearch.apiKey`
47
+ - `plugins.entries.xai.config.webSearch.apiKey`
48
+ - `plugins.entries.moonshot.config.webSearch.apiKey`
49
+ - `plugins.entries.perplexity.config.webSearch.apiKey`
50
+ - `plugins.entries.firecrawl.config.webSearch.apiKey`
51
+ - `plugins.entries.minimax.config.webSearch.apiKey`
52
+ - `plugins.entries.tavily.config.webSearch.apiKey`
53
+ - `tools.web.search.apiKey`
54
+ - `gateway.auth.password`
55
+ - `gateway.auth.token`
56
+ - `gateway.remote.token`
57
+ - `gateway.remote.password`
58
+ - `cron.webhookToken`
59
+ - `channels.telegram.botToken`
60
+ - `channels.telegram.webhookSecret`
61
+ - `channels.telegram.accounts.*.botToken`
62
+ - `channels.telegram.accounts.*.webhookSecret`
63
+ - `channels.slack.botToken`
64
+ - `channels.slack.appToken`
65
+ - `channels.slack.userToken`
66
+ - `channels.slack.signingSecret`
67
+ - `channels.slack.accounts.*.botToken`
68
+ - `channels.slack.accounts.*.appToken`
69
+ - `channels.slack.accounts.*.userToken`
70
+ - `channels.slack.accounts.*.signingSecret`
71
+ - `channels.discord.token`
72
+ - `channels.discord.pluralkit.token`
73
+ - `channels.discord.voice.tts.providers.*.apiKey`
74
+ - `channels.discord.accounts.*.token`
75
+ - `channels.discord.accounts.*.pluralkit.token`
76
+ - `channels.discord.accounts.*.voice.tts.providers.*.apiKey`
77
+ - `channels.irc.password`
78
+ - `channels.irc.nickserv.password`
79
+ - `channels.irc.accounts.*.password`
80
+ - `channels.irc.accounts.*.nickserv.password`
81
+ - `channels.bluebubbles.password`
82
+ - `channels.bluebubbles.accounts.*.password`
83
+ - `channels.feishu.appSecret`
84
+ - `channels.feishu.encryptKey`
85
+ - `channels.feishu.verificationToken`
86
+ - `channels.feishu.accounts.*.appSecret`
87
+ - `channels.feishu.accounts.*.encryptKey`
88
+ - `channels.feishu.accounts.*.verificationToken`
89
+ - `channels.msteams.appPassword`
90
+ - `channels.mattermost.botToken`
91
+ - `channels.mattermost.accounts.*.botToken`
92
+ - `channels.matrix.accessToken`
93
+ - `channels.matrix.password`
94
+ - `channels.matrix.accounts.*.accessToken`
95
+ - `channels.matrix.accounts.*.password`
96
+ - `channels.nextcloud-talk.botSecret`
97
+ - `channels.nextcloud-talk.apiPassword`
98
+ - `channels.nextcloud-talk.accounts.*.botSecret`
99
+ - `channels.nextcloud-talk.accounts.*.apiPassword`
100
+ - `channels.zalo.botToken`
101
+ - `channels.zalo.webhookSecret`
102
+ - `channels.zalo.accounts.*.botToken`
103
+ - `channels.zalo.accounts.*.webhookSecret`
104
+ - `channels.googlechat.serviceAccount` via sibling `serviceAccountRef` (compatibility exception)
105
+ - `channels.googlechat.accounts.*.serviceAccount` via sibling `serviceAccountRef` (compatibility exception)
106
+
107
+ ### `auth-profiles.json` targets (`secrets configure` + `secrets apply` + `secrets audit`)
108
+
109
+ - `profiles.*.keyRef` (`type: "api_key"`; unsupported when `auth.profiles.<id>.mode = "oauth"`)
110
+ - `profiles.*.tokenRef` (`type: "token"`; unsupported when `auth.profiles.<id>.mode = "oauth"`)
111
+
112
+ [//]: # "secretref-supported-list-end"
113
+
114
+ Notes:
115
+
116
+ - Auth-profile plan targets require `agentId`.
117
+ - Plan entries target `profiles.*.key` / `profiles.*.token` and write sibling refs (`keyRef` / `tokenRef`).
118
+ - Auth-profile refs are included in runtime resolution and audit coverage.
119
+ - OAuth policy guard: `auth.profiles.<id>.mode = "oauth"` cannot be combined with SecretRef inputs for that profile. Startup/reload and auth-profile resolution fail fast when this policy is violated.
120
+ - For SecretRef-managed model providers, generated `agents/*/agent/models.json` entries persist non-secret markers (not resolved secret values) for `apiKey`/header surfaces.
121
+ - Marker persistence is source-authoritative: Durar writes markers from the active source config snapshot (pre-resolution), not from resolved runtime secret values.
122
+ - For web search:
123
+ - In explicit provider mode (`tools.web.search.provider` set), only the selected provider key is active.
124
+ - In auto mode (`tools.web.search.provider` unset), only the first provider key that resolves by precedence is active.
125
+ - In auto mode, non-selected provider refs are treated as inactive until selected.
126
+ - Legacy `tools.web.search.*` provider paths still resolve during the compatibility window, but the canonical SecretRef surface is `plugins.entries.<plugin>.config.webSearch.*`.
127
+
128
+ ## Unsupported credentials
129
+
130
+ Out-of-scope credentials include:
131
+
132
+ [//]: # "secretref-unsupported-list-start"
133
+
134
+ - `commands.ownerDisplaySecret`
135
+ - `hooks.token`
136
+ - `hooks.gmail.pushToken`
137
+ - `hooks.mappings[].sessionKey`
138
+ - `auth-profiles.oauth.*`
139
+ - `channels.discord.threadBindings.webhookToken`
140
+ - `channels.discord.accounts.*.threadBindings.webhookToken`
141
+ - `channels.whatsapp.creds.json`
142
+ - `channels.whatsapp.accounts.*.creds.json`
143
+
144
+ [//]: # "secretref-unsupported-list-end"
145
+
146
+ Rationale:
147
+
148
+ - These credentials are minted, rotated, session-bearing, or OAuth-durable classes that do not fit read-only external SecretRef resolution.