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.
- package/CHANGELOG.md +5497 -0
- package/LICENSE +21 -0
- package/README.md +614 -0
- package/assets/avatar-placeholder.svg +19 -0
- package/assets/chrome-extension/icons/icon128.png +0 -0
- package/assets/chrome-extension/icons/icon16.png +0 -0
- package/assets/chrome-extension/icons/icon32.png +0 -0
- package/assets/chrome-extension/icons/icon48.png +0 -0
- package/assets/dmg-background-small.png +0 -0
- package/assets/dmg-background.png +0 -0
- package/docs/.i18n/README.md +72 -0
- package/docs/.i18n/ar-navigation.json +18 -0
- package/docs/.i18n/de-navigation.json +18 -0
- package/docs/.i18n/es-navigation.json +18 -0
- package/docs/.i18n/fr-navigation.json +18 -0
- package/docs/.i18n/glossary.ar.json +5 -0
- package/docs/.i18n/glossary.de.json +5 -0
- package/docs/.i18n/glossary.es.json +5 -0
- package/docs/.i18n/glossary.fr.json +5 -0
- package/docs/.i18n/glossary.id.json +5 -0
- package/docs/.i18n/glossary.it.json +5 -0
- package/docs/.i18n/glossary.ja-JP.json +14 -0
- package/docs/.i18n/glossary.ko.json +5 -0
- package/docs/.i18n/glossary.pl.json +5 -0
- package/docs/.i18n/glossary.pt-BR.json +5 -0
- package/docs/.i18n/glossary.tr.json +5 -0
- package/docs/.i18n/glossary.zh-CN.json +358 -0
- package/docs/.i18n/id-navigation.json +18 -0
- package/docs/.i18n/it-navigation.json +18 -0
- package/docs/.i18n/ja-navigation.json +18 -0
- package/docs/.i18n/ko-navigation.json +18 -0
- package/docs/.i18n/pl-navigation.json +18 -0
- package/docs/.i18n/pt-BR-navigation.json +18 -0
- package/docs/.i18n/tr-navigation.json +18 -0
- package/docs/.i18n/zh-Hans-navigation.json +544 -0
- package/docs/assets/install-script.svg +1 -0
- package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
- package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
- package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
- package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
- package/docs/assets/macos-onboarding/05-permissions.png +0 -0
- package/docs/assets/openclaw-logo-text-dark.png +0 -0
- package/docs/assets/openclaw-logo-text-dark.svg +418 -0
- package/docs/assets/openclaw-logo-text.png +0 -0
- package/docs/assets/openclaw-logo-text.svg +418 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/showcase/agents-ui.jpg +0 -0
- package/docs/assets/showcase/bambu-cli.png +0 -0
- package/docs/assets/showcase/codexmonitor.png +0 -0
- package/docs/assets/showcase/gohome-grafana.png +0 -0
- package/docs/assets/showcase/ios-testflight.jpg +0 -0
- package/docs/assets/showcase/oura-health.png +0 -0
- package/docs/assets/showcase/padel-cli.svg +11 -0
- package/docs/assets/showcase/padel-screenshot.jpg +0 -0
- package/docs/assets/showcase/papla-tts.jpg +0 -0
- package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
- package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
- package/docs/assets/showcase/roborock-status.svg +13 -0
- package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
- package/docs/assets/showcase/snag.png +0 -0
- package/docs/assets/showcase/tesco-shop.jpg +0 -0
- package/docs/assets/showcase/wienerlinien.png +0 -0
- package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
- package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
- package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
- package/docs/assets/sponsors/blacksmith-light.svg +14 -0
- package/docs/assets/sponsors/blacksmith.svg +14 -0
- package/docs/assets/sponsors/convex-light.svg +16 -0
- package/docs/assets/sponsors/convex.svg +16 -0
- package/docs/assets/sponsors/github-light.svg +3 -0
- package/docs/assets/sponsors/github.svg +3 -0
- package/docs/assets/sponsors/nvidia-dark.svg +9 -0
- package/docs/assets/sponsors/nvidia.svg +9 -0
- package/docs/assets/sponsors/openai-light.svg +3 -0
- package/docs/assets/sponsors/openai.svg +3 -0
- package/docs/assets/sponsors/vercel-light.svg +5 -0
- package/docs/assets/sponsors/vercel.svg +5 -0
- package/docs/auth-credential-semantics.md +80 -0
- package/docs/automation/auth-monitoring.md +8 -0
- package/docs/automation/clawflow.md +8 -0
- package/docs/automation/cron-jobs.md +410 -0
- package/docs/automation/cron-vs-heartbeat.md +8 -0
- package/docs/automation/gmail-pubsub.md +8 -0
- package/docs/automation/hooks.md +303 -0
- package/docs/automation/index.md +115 -0
- package/docs/automation/poll.md +8 -0
- package/docs/automation/standing-orders.md +254 -0
- package/docs/automation/taskflow.md +82 -0
- package/docs/automation/tasks.md +323 -0
- package/docs/automation/troubleshooting.md +8 -0
- package/docs/automation/webhook.md +8 -0
- package/docs/brave-search.md +103 -0
- package/docs/channels/bluebubbles.md +435 -0
- package/docs/channels/broadcast-groups.md +442 -0
- package/docs/channels/channel-routing.md +139 -0
- package/docs/channels/discord.md +1254 -0
- package/docs/channels/feishu.md +793 -0
- package/docs/channels/googlechat.md +270 -0
- package/docs/channels/group-messages.md +84 -0
- package/docs/channels/groups.md +410 -0
- package/docs/channels/imessage.md +427 -0
- package/docs/channels/index.md +50 -0
- package/docs/channels/irc.md +252 -0
- package/docs/channels/line.md +225 -0
- package/docs/channels/location.md +56 -0
- package/docs/channels/matrix.md +869 -0
- package/docs/channels/mattermost.md +472 -0
- package/docs/channels/msteams.md +805 -0
- package/docs/channels/nextcloud-talk.md +149 -0
- package/docs/channels/nostr.md +252 -0
- package/docs/channels/pairing.md +129 -0
- package/docs/channels/qqbot.md +193 -0
- package/docs/channels/signal.md +337 -0
- package/docs/channels/slack.md +681 -0
- package/docs/channels/synology-chat.md +185 -0
- package/docs/channels/telegram.md +1072 -0
- package/docs/channels/tlon.md +290 -0
- package/docs/channels/troubleshooting.md +133 -0
- package/docs/channels/twitch.md +394 -0
- package/docs/channels/whatsapp.md +488 -0
- package/docs/channels/zalo.md +254 -0
- package/docs/channels/zalouser.md +195 -0
- package/docs/ci.md +66 -0
- package/docs/cli/acp.md +316 -0
- package/docs/cli/agent.md +57 -0
- package/docs/cli/agents.md +220 -0
- package/docs/cli/approvals.md +136 -0
- package/docs/cli/backup.md +84 -0
- package/docs/cli/browser.md +233 -0
- package/docs/cli/channels.md +131 -0
- package/docs/cli/clawbot.md +21 -0
- package/docs/cli/completion.md +35 -0
- package/docs/cli/config.md +353 -0
- package/docs/cli/configure.md +70 -0
- package/docs/cli/cron.md +167 -0
- package/docs/cli/daemon.md +57 -0
- package/docs/cli/dashboard.md +22 -0
- package/docs/cli/devices.md +171 -0
- package/docs/cli/directory.md +63 -0
- package/docs/cli/dns.md +48 -0
- package/docs/cli/docs.md +28 -0
- package/docs/cli/doctor.md +63 -0
- package/docs/cli/flows.md +18 -0
- package/docs/cli/gateway.md +307 -0
- package/docs/cli/health.md +36 -0
- package/docs/cli/hooks.md +337 -0
- package/docs/cli/index.md +1836 -0
- package/docs/cli/logs.md +59 -0
- package/docs/cli/mcp.md +505 -0
- package/docs/cli/memory.md +139 -0
- package/docs/cli/message.md +300 -0
- package/docs/cli/models.md +136 -0
- package/docs/cli/node.md +137 -0
- package/docs/cli/nodes.md +66 -0
- package/docs/cli/onboard.md +171 -0
- package/docs/cli/pairing.md +65 -0
- package/docs/cli/plugins.md +305 -0
- package/docs/cli/qr.md +52 -0
- package/docs/cli/reset.md +35 -0
- package/docs/cli/sandbox.md +197 -0
- package/docs/cli/secrets.md +197 -0
- package/docs/cli/security.md +86 -0
- package/docs/cli/sessions.md +113 -0
- package/docs/cli/setup.md +45 -0
- package/docs/cli/skills.md +59 -0
- package/docs/cli/status.md +35 -0
- package/docs/cli/system.md +71 -0
- package/docs/cli/tui.md +30 -0
- package/docs/cli/uninstall.md +39 -0
- package/docs/cli/update.md +113 -0
- package/docs/cli/voicecall.md +34 -0
- package/docs/cli/webhooks.md +91 -0
- package/docs/concepts/agent-loop.md +168 -0
- package/docs/concepts/agent-workspace.md +246 -0
- package/docs/concepts/agent.md +129 -0
- package/docs/concepts/architecture.md +156 -0
- package/docs/concepts/compaction.md +122 -0
- package/docs/concepts/context-engine.md +274 -0
- package/docs/concepts/context.md +179 -0
- package/docs/concepts/delegate-architecture.md +307 -0
- package/docs/concepts/dreaming.md +173 -0
- package/docs/concepts/features.md +76 -0
- package/docs/concepts/markdown-formatting.md +130 -0
- package/docs/concepts/memory-builtin.md +105 -0
- package/docs/concepts/memory-honcho.md +140 -0
- package/docs/concepts/memory-qmd.md +163 -0
- package/docs/concepts/memory-search.md +141 -0
- package/docs/concepts/memory.md +121 -0
- package/docs/concepts/messages.md +161 -0
- package/docs/concepts/model-failover.md +349 -0
- package/docs/concepts/model-providers.md +799 -0
- package/docs/concepts/models.md +255 -0
- package/docs/concepts/multi-agent.md +615 -0
- package/docs/concepts/oauth.md +225 -0
- package/docs/concepts/presence.md +102 -0
- package/docs/concepts/queue.md +89 -0
- package/docs/concepts/retry.md +69 -0
- package/docs/concepts/session-pruning.md +92 -0
- package/docs/concepts/session-tool.md +141 -0
- package/docs/concepts/session.md +116 -0
- package/docs/concepts/soul.md +110 -0
- package/docs/concepts/streaming.md +161 -0
- package/docs/concepts/system-prompt.md +182 -0
- package/docs/concepts/timezone.md +97 -0
- package/docs/concepts/typebox.md +307 -0
- package/docs/concepts/typing-indicators.md +69 -0
- package/docs/concepts/usage-tracking.md +59 -0
- package/docs/date-time.md +128 -0
- package/docs/debug/node-issue.md +85 -0
- package/docs/diagnostics/flags.md +91 -0
- package/docs/docs.json +1601 -0
- package/docs/gateway/authentication.md +218 -0
- package/docs/gateway/background-process.md +131 -0
- package/docs/gateway/bonjour.md +179 -0
- package/docs/gateway/bridge-protocol.md +89 -0
- package/docs/gateway/cli-backends.md +310 -0
- package/docs/gateway/configuration-examples.md +631 -0
- package/docs/gateway/configuration-reference.md +3618 -0
- package/docs/gateway/configuration.md +698 -0
- package/docs/gateway/discovery.md +141 -0
- package/docs/gateway/doctor.md +494 -0
- package/docs/gateway/gateway-lock.md +37 -0
- package/docs/gateway/health.md +61 -0
- package/docs/gateway/heartbeat.md +443 -0
- package/docs/gateway/index.md +367 -0
- package/docs/gateway/local-models.md +163 -0
- package/docs/gateway/logging.md +113 -0
- package/docs/gateway/multiple-gateways.md +120 -0
- package/docs/gateway/network-model.md +25 -0
- package/docs/gateway/openai-http-api.md +280 -0
- package/docs/gateway/openresponses-http-api.md +340 -0
- package/docs/gateway/openshell.md +307 -0
- package/docs/gateway/pairing.md +138 -0
- package/docs/gateway/protocol.md +588 -0
- package/docs/gateway/remote-gateway-readme.md +164 -0
- package/docs/gateway/remote.md +251 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +141 -0
- package/docs/gateway/sandboxing.md +473 -0
- package/docs/gateway/secrets-plan-contract.md +116 -0
- package/docs/gateway/secrets.md +541 -0
- package/docs/gateway/security/index.md +1362 -0
- package/docs/gateway/tailscale.md +136 -0
- package/docs/gateway/tools-invoke-http-api.md +161 -0
- package/docs/gateway/troubleshooting.md +451 -0
- package/docs/gateway/trusted-proxy-auth.md +399 -0
- package/docs/help/debugging.md +168 -0
- package/docs/help/environment.md +165 -0
- package/docs/help/faq.md +3244 -0
- package/docs/help/index.md +28 -0
- package/docs/help/scripts.md +27 -0
- package/docs/help/testing.md +640 -0
- package/docs/help/troubleshooting.md +372 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-step2-create-app.png +0 -0
- package/docs/images/feishu-step3-credentials.png +0 -0
- package/docs/images/feishu-step4-permissions.png +0 -0
- package/docs/images/feishu-step5-bot-capability.png +0 -0
- package/docs/images/feishu-step6-event-subscription.png +0 -0
- package/docs/images/feishu-verification-token.png +0 -0
- package/docs/images/groups-flow.svg +52 -0
- package/docs/images/mobile-ui-screenshot.png +0 -0
- package/docs/index.md +196 -0
- package/docs/install/ansible.md +230 -0
- package/docs/install/azure.md +311 -0
- package/docs/install/bun.md +55 -0
- package/docs/install/clawdock.md +106 -0
- package/docs/install/development-channels.md +131 -0
- package/docs/install/digitalocean.md +129 -0
- package/docs/install/docker-vm-runtime.md +142 -0
- package/docs/install/docker.md +412 -0
- package/docs/install/exe-dev.md +133 -0
- package/docs/install/fly.md +504 -0
- package/docs/install/gcp.md +412 -0
- package/docs/install/hetzner.md +259 -0
- package/docs/install/index.md +212 -0
- package/docs/install/installer.md +443 -0
- package/docs/install/kubernetes.md +192 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-matrix.md +349 -0
- package/docs/install/migrating.md +112 -0
- package/docs/install/nix.md +89 -0
- package/docs/install/node.md +144 -0
- package/docs/install/northflank.mdx +42 -0
- package/docs/install/oracle.md +158 -0
- package/docs/install/podman.md +210 -0
- package/docs/install/railway.mdx +90 -0
- package/docs/install/raspberry-pi.md +159 -0
- package/docs/install/render.mdx +165 -0
- package/docs/install/uninstall.md +128 -0
- package/docs/install/updating.md +142 -0
- package/docs/logging.md +389 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +69 -0
- package/docs/nodes/audio.md +191 -0
- package/docs/nodes/camera.md +162 -0
- package/docs/nodes/images.md +73 -0
- package/docs/nodes/index.md +408 -0
- package/docs/nodes/location-command.md +98 -0
- package/docs/nodes/media-understanding.md +432 -0
- package/docs/nodes/talk.md +92 -0
- package/docs/nodes/troubleshooting.md +123 -0
- package/docs/nodes/voicewake.md +66 -0
- package/docs/perplexity.md +181 -0
- package/docs/pi-dev.md +80 -0
- package/docs/pi.md +570 -0
- package/docs/platforms/android.md +244 -0
- package/docs/platforms/digitalocean.md +266 -0
- package/docs/platforms/index.md +55 -0
- package/docs/platforms/ios.md +223 -0
- package/docs/platforms/linux.md +100 -0
- package/docs/platforms/mac/bundled-gateway.md +75 -0
- package/docs/platforms/mac/canvas.md +125 -0
- package/docs/platforms/mac/child-process.md +69 -0
- package/docs/platforms/mac/dev-setup.md +107 -0
- package/docs/platforms/mac/health.md +34 -0
- package/docs/platforms/mac/icon.md +31 -0
- package/docs/platforms/mac/logging.md +57 -0
- package/docs/platforms/mac/menu-bar.md +81 -0
- package/docs/platforms/mac/peekaboo.md +65 -0
- package/docs/platforms/mac/permissions.md +50 -0
- package/docs/platforms/mac/remote.md +84 -0
- package/docs/platforms/mac/signing.md +47 -0
- package/docs/platforms/mac/skills.md +40 -0
- package/docs/platforms/mac/voice-overlay.md +60 -0
- package/docs/platforms/mac/voicewake.md +67 -0
- package/docs/platforms/mac/webchat.md +51 -0
- package/docs/platforms/mac/xpc.md +61 -0
- package/docs/platforms/macos.md +229 -0
- package/docs/platforms/oracle.md +305 -0
- package/docs/platforms/raspberry-pi.md +420 -0
- package/docs/platforms/windows.md +241 -0
- package/docs/plugins/agent-tools.md +10 -0
- package/docs/plugins/architecture.md +1609 -0
- package/docs/plugins/building-extensions.md +10 -0
- package/docs/plugins/building-plugins.md +319 -0
- package/docs/plugins/bundles.md +292 -0
- package/docs/plugins/community.md +149 -0
- package/docs/plugins/manifest.md +412 -0
- package/docs/plugins/sdk-channel-plugins.md +508 -0
- package/docs/plugins/sdk-entrypoints.md +210 -0
- package/docs/plugins/sdk-migration.md +359 -0
- package/docs/plugins/sdk-overview.md +475 -0
- package/docs/plugins/sdk-provider-plugins.md +712 -0
- package/docs/plugins/sdk-runtime.md +381 -0
- package/docs/plugins/sdk-setup.md +516 -0
- package/docs/plugins/sdk-testing.md +263 -0
- package/docs/plugins/voice-call.md +466 -0
- package/docs/plugins/zalouser.md +78 -0
- package/docs/prose.md +134 -0
- package/docs/providers/anthropic.md +402 -0
- package/docs/providers/bedrock-mantle.md +91 -0
- package/docs/providers/bedrock.md +273 -0
- package/docs/providers/chutes.md +103 -0
- package/docs/providers/claude-max-api-proxy.md +163 -0
- package/docs/providers/cloudflare-ai-gateway.md +71 -0
- package/docs/providers/deepgram.md +93 -0
- package/docs/providers/deepseek.md +53 -0
- package/docs/providers/fireworks.md +69 -0
- package/docs/providers/github-copilot.md +80 -0
- package/docs/providers/glm.md +68 -0
- package/docs/providers/google.md +149 -0
- package/docs/providers/groq.md +105 -0
- package/docs/providers/huggingface.md +193 -0
- package/docs/providers/index.md +81 -0
- package/docs/providers/kilocode.md +89 -0
- package/docs/providers/litellm.md +159 -0
- package/docs/providers/minimax.md +281 -0
- package/docs/providers/mistral.md +68 -0
- package/docs/providers/models.md +56 -0
- package/docs/providers/moonshot.md +224 -0
- package/docs/providers/nvidia.md +58 -0
- package/docs/providers/ollama.md +379 -0
- package/docs/providers/openai.md +472 -0
- package/docs/providers/opencode-go.md +45 -0
- package/docs/providers/opencode.md +68 -0
- package/docs/providers/openrouter.md +59 -0
- package/docs/providers/perplexity-provider.md +62 -0
- package/docs/providers/qianfan.md +90 -0
- package/docs/providers/qwen.md +128 -0
- package/docs/providers/qwen_modelstudio.md +137 -0
- package/docs/providers/sglang.md +115 -0
- package/docs/providers/stepfun.md +152 -0
- package/docs/providers/synthetic.md +101 -0
- package/docs/providers/together.md +70 -0
- package/docs/providers/venice.md +282 -0
- package/docs/providers/vercel-ai-gateway.md +60 -0
- package/docs/providers/vllm.md +103 -0
- package/docs/providers/volcengine.md +94 -0
- package/docs/providers/xai.md +94 -0
- package/docs/providers/xiaomi.md +89 -0
- package/docs/providers/zai.md +75 -0
- package/docs/reference/AGENTS.default.md +126 -0
- package/docs/reference/RELEASING.md +138 -0
- package/docs/reference/api-usage-costs.md +198 -0
- package/docs/reference/credits.md +30 -0
- package/docs/reference/device-models.md +47 -0
- package/docs/reference/memory-config.md +421 -0
- package/docs/reference/prompt-caching.md +344 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +148 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +607 -0
- package/docs/reference/session-management-compaction.md +352 -0
- package/docs/reference/templates/AGENTS.dev.md +84 -0
- package/docs/reference/templates/AGENTS.md +219 -0
- package/docs/reference/templates/BOOT.md +12 -0
- package/docs/reference/templates/BOOTSTRAP.md +62 -0
- package/docs/reference/templates/CLAUDE.md +1 -0
- package/docs/reference/templates/HEARTBEAT.md +14 -0
- package/docs/reference/templates/IDENTITY.dev.md +48 -0
- package/docs/reference/templates/IDENTITY.md +30 -0
- package/docs/reference/templates/SOUL.dev.md +77 -0
- package/docs/reference/templates/SOUL.md +45 -0
- package/docs/reference/templates/TOOLS.dev.md +25 -0
- package/docs/reference/templates/TOOLS.md +47 -0
- package/docs/reference/templates/USER.dev.md +19 -0
- package/docs/reference/templates/USER.md +24 -0
- package/docs/reference/test.md +119 -0
- package/docs/reference/token-use.md +197 -0
- package/docs/reference/transcript-hygiene.md +151 -0
- package/docs/reference/wizard.md +245 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +608 -0
- package/docs/security/formal-verification.md +167 -0
- package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +9 -0
- package/docs/snippets/plugin-publish/minimal-package.json +16 -0
- package/docs/start/bootstrapping.md +41 -0
- package/docs/start/docs-directory.md +67 -0
- package/docs/start/getting-started.md +148 -0
- package/docs/start/hubs.md +199 -0
- package/docs/start/lore.md +219 -0
- package/docs/start/onboarding-overview.md +69 -0
- package/docs/start/onboarding.md +92 -0
- package/docs/start/openclaw.md +225 -0
- package/docs/start/quickstart.md +22 -0
- package/docs/start/setup.md +172 -0
- package/docs/start/showcase.md +418 -0
- package/docs/start/wizard-cli-automation.md +233 -0
- package/docs/start/wizard-cli-reference.md +324 -0
- package/docs/start/wizard.md +127 -0
- package/docs/style.css +37 -0
- package/docs/tools/acp-agents.md +837 -0
- package/docs/tools/agent-send.md +100 -0
- package/docs/tools/apply-patch.md +52 -0
- package/docs/tools/brave-search.md +107 -0
- package/docs/tools/browser-linux-troubleshooting.md +145 -0
- package/docs/tools/browser-login.md +73 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +221 -0
- package/docs/tools/browser.md +890 -0
- package/docs/tools/btw.md +142 -0
- package/docs/tools/capability-cookbook.md +119 -0
- package/docs/tools/clawhub.md +348 -0
- package/docs/tools/code-execution.md +90 -0
- package/docs/tools/creating-skills.md +119 -0
- package/docs/tools/diffs.md +434 -0
- package/docs/tools/duckduckgo-search.md +102 -0
- package/docs/tools/elevated.md +116 -0
- package/docs/tools/exa-search.md +127 -0
- package/docs/tools/exec-approvals.md +635 -0
- package/docs/tools/exec.md +237 -0
- package/docs/tools/firecrawl.md +147 -0
- package/docs/tools/gemini-search.md +98 -0
- package/docs/tools/grok-search.md +102 -0
- package/docs/tools/image-generation.md +139 -0
- package/docs/tools/index.md +174 -0
- package/docs/tools/kimi-search.md +98 -0
- package/docs/tools/llm-task.md +119 -0
- package/docs/tools/lobster.md +348 -0
- package/docs/tools/loop-detection.md +100 -0
- package/docs/tools/minimax-search.md +99 -0
- package/docs/tools/multi-agent-sandbox-tools.md +373 -0
- package/docs/tools/ollama-search.md +100 -0
- package/docs/tools/pdf.md +176 -0
- package/docs/tools/perplexity-search.md +185 -0
- package/docs/tools/plugin.md +348 -0
- package/docs/tools/reactions.md +78 -0
- package/docs/tools/searxng-search.md +132 -0
- package/docs/tools/skills-config.md +133 -0
- package/docs/tools/skills.md +377 -0
- package/docs/tools/slash-commands.md +322 -0
- package/docs/tools/subagents.md +341 -0
- package/docs/tools/tavily.md +129 -0
- package/docs/tools/thinking.md +102 -0
- package/docs/tools/tts.md +452 -0
- package/docs/tools/web-fetch.md +159 -0
- package/docs/tools/web.md +417 -0
- package/docs/tts.md +452 -0
- package/docs/vps.md +115 -0
- package/docs/web/control-ui.md +318 -0
- package/docs/web/dashboard.md +93 -0
- package/docs/web/index.md +126 -0
- package/docs/web/tui.md +176 -0
- package/docs/web/webchat.md +77 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/durar.mjs +180 -0
- package/package.json +1259 -0
- package/scripts/npm-runner.mjs +111 -0
- package/scripts/postinstall-bundled-plugins.mjs +188 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +199 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +316 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +885 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +320 -0
- package/skills/model-usage/scripts/test_model_usage.py +40 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/node-connect/SKILL.md +142 -0
- package/skills/notion/SKILL.md +174 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +62 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +88 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +151 -0
- package/skills/sherpa-onnx-tts/SKILL.md +109 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +372 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +139 -0
- package/skills/skill-creator/scripts/quick_validate.py +159 -0
- package/skills/skill-creator/scripts/test_package_skill.py +160 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/taskflow/SKILL.md +149 -0
- package/skills/taskflow/examples/inbox-triage.lobster +33 -0
- package/skills/taskflow/examples/pr-intake.lobster +32 -0
- package/skills/taskflow-inbox-triage/SKILL.md +119 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +170 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +108 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +129 -0
- package/skills/xurl/SKILL.md +461 -0
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Inbound image/audio/video understanding (optional) with provider + CLI fallbacks"
|
|
3
|
+
read_when:
|
|
4
|
+
- Designing or refactoring media understanding
|
|
5
|
+
- Tuning inbound audio/video/image preprocessing
|
|
6
|
+
title: "Media Understanding"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Media Understanding - Inbound (2026-01-17)
|
|
10
|
+
|
|
11
|
+
Durar can **summarize inbound media** (image/audio/video) before the reply pipeline runs. It auto‑detects when local tools or provider keys are available, and can be disabled or customized. If understanding is off, models still receive the original files/URLs as usual.
|
|
12
|
+
|
|
13
|
+
Vendor-specific media behavior is registered by vendor plugins, while Durar
|
|
14
|
+
core owns the shared `tools.media` config, fallback order, and reply-pipeline
|
|
15
|
+
integration.
|
|
16
|
+
|
|
17
|
+
## Goals
|
|
18
|
+
|
|
19
|
+
- Optional: pre‑digest inbound media into short text for faster routing + better command parsing.
|
|
20
|
+
- Preserve original media delivery to the model (always).
|
|
21
|
+
- Support **provider APIs** and **CLI fallbacks**.
|
|
22
|
+
- Allow multiple models with ordered fallback (error/size/timeout).
|
|
23
|
+
|
|
24
|
+
## High-level behavior
|
|
25
|
+
|
|
26
|
+
1. Collect inbound attachments (`MediaPaths`, `MediaUrls`, `MediaTypes`).
|
|
27
|
+
2. For each enabled capability (image/audio/video), select attachments per policy (default: **first**).
|
|
28
|
+
3. Choose the first eligible model entry (size + capability + auth).
|
|
29
|
+
4. If a model fails or the media is too large, **fall back to the next entry**.
|
|
30
|
+
5. On success:
|
|
31
|
+
- `Body` becomes `[Image]`, `[Audio]`, or `[Video]` block.
|
|
32
|
+
- Audio sets `{{Transcript}}`; command parsing uses caption text when present,
|
|
33
|
+
otherwise the transcript.
|
|
34
|
+
- Captions are preserved as `User text:` inside the block.
|
|
35
|
+
|
|
36
|
+
If understanding fails or is disabled, **the reply flow continues** with the original body + attachments.
|
|
37
|
+
|
|
38
|
+
## Config overview
|
|
39
|
+
|
|
40
|
+
`tools.media` supports **shared models** plus per‑capability overrides:
|
|
41
|
+
|
|
42
|
+
- `tools.media.models`: shared model list (use `capabilities` to gate).
|
|
43
|
+
- `tools.media.image` / `tools.media.audio` / `tools.media.video`:
|
|
44
|
+
- defaults (`prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`)
|
|
45
|
+
- provider overrides (`baseUrl`, `headers`, `providerOptions`)
|
|
46
|
+
- Deepgram audio options via `tools.media.audio.providerOptions.deepgram`
|
|
47
|
+
- audio transcript echo controls (`echoTranscript`, default `false`; `echoFormat`)
|
|
48
|
+
- optional **per‑capability `models` list** (preferred before shared models)
|
|
49
|
+
- `attachments` policy (`mode`, `maxAttachments`, `prefer`)
|
|
50
|
+
- `scope` (optional gating by channel/chatType/session key)
|
|
51
|
+
- `tools.media.concurrency`: max concurrent capability runs (default **2**).
|
|
52
|
+
|
|
53
|
+
```json5
|
|
54
|
+
{
|
|
55
|
+
tools: {
|
|
56
|
+
media: {
|
|
57
|
+
models: [
|
|
58
|
+
/* shared list */
|
|
59
|
+
],
|
|
60
|
+
image: {
|
|
61
|
+
/* optional overrides */
|
|
62
|
+
},
|
|
63
|
+
audio: {
|
|
64
|
+
/* optional overrides */
|
|
65
|
+
echoTranscript: true,
|
|
66
|
+
echoFormat: '📝 "{transcript}"',
|
|
67
|
+
},
|
|
68
|
+
video: {
|
|
69
|
+
/* optional overrides */
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Model entries
|
|
77
|
+
|
|
78
|
+
Each `models[]` entry can be **provider** or **CLI**:
|
|
79
|
+
|
|
80
|
+
```json5
|
|
81
|
+
{
|
|
82
|
+
type: "provider", // default if omitted
|
|
83
|
+
provider: "openai",
|
|
84
|
+
model: "gpt-5.4-mini",
|
|
85
|
+
prompt: "Describe the image in <= 500 chars.",
|
|
86
|
+
maxChars: 500,
|
|
87
|
+
maxBytes: 10485760,
|
|
88
|
+
timeoutSeconds: 60,
|
|
89
|
+
capabilities: ["image"], // optional, used for multi‑modal entries
|
|
90
|
+
profile: "vision-profile",
|
|
91
|
+
preferredProfile: "vision-fallback",
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```json5
|
|
96
|
+
{
|
|
97
|
+
type: "cli",
|
|
98
|
+
command: "gemini",
|
|
99
|
+
args: [
|
|
100
|
+
"-m",
|
|
101
|
+
"gemini-3-flash",
|
|
102
|
+
"--allowed-tools",
|
|
103
|
+
"read_file",
|
|
104
|
+
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
|
|
105
|
+
],
|
|
106
|
+
maxChars: 500,
|
|
107
|
+
maxBytes: 52428800,
|
|
108
|
+
timeoutSeconds: 120,
|
|
109
|
+
capabilities: ["video", "image"],
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
CLI templates can also use:
|
|
114
|
+
|
|
115
|
+
- `{{MediaDir}}` (directory containing the media file)
|
|
116
|
+
- `{{OutputDir}}` (scratch dir created for this run)
|
|
117
|
+
- `{{OutputBase}}` (scratch file base path, no extension)
|
|
118
|
+
|
|
119
|
+
## Defaults and limits
|
|
120
|
+
|
|
121
|
+
Recommended defaults:
|
|
122
|
+
|
|
123
|
+
- `maxChars`: **500** for image/video (short, command‑friendly)
|
|
124
|
+
- `maxChars`: **unset** for audio (full transcript unless you set a limit)
|
|
125
|
+
- `maxBytes`:
|
|
126
|
+
- image: **10MB**
|
|
127
|
+
- audio: **20MB**
|
|
128
|
+
- video: **50MB**
|
|
129
|
+
|
|
130
|
+
Rules:
|
|
131
|
+
|
|
132
|
+
- If media exceeds `maxBytes`, that model is skipped and the **next model is tried**.
|
|
133
|
+
- Audio files smaller than **1024 bytes** are treated as empty/corrupt and skipped before provider/CLI transcription.
|
|
134
|
+
- If the model returns more than `maxChars`, output is trimmed.
|
|
135
|
+
- `prompt` defaults to simple “Describe the {media}.” plus the `maxChars` guidance (image/video only).
|
|
136
|
+
- If the active primary image model already supports vision natively, Durar
|
|
137
|
+
skips the `[Image]` summary block and passes the original image into the
|
|
138
|
+
model instead.
|
|
139
|
+
- If `<capability>.enabled: true` but no models are configured, Durar tries the
|
|
140
|
+
**active reply model** when its provider supports the capability.
|
|
141
|
+
|
|
142
|
+
### Auto-detect media understanding (default)
|
|
143
|
+
|
|
144
|
+
If `tools.media.<capability>.enabled` is **not** set to `false` and you haven’t
|
|
145
|
+
configured models, Durar auto-detects in this order and **stops at the first
|
|
146
|
+
working option**:
|
|
147
|
+
|
|
148
|
+
1. **Active reply model** when its provider supports the capability.
|
|
149
|
+
2. **`agents.defaults.imageModel`** primary/fallback refs (image only).
|
|
150
|
+
3. **Local CLIs** (audio only; if installed)
|
|
151
|
+
- `sherpa-onnx-offline` (requires `SHERPA_ONNX_MODEL_DIR` with encoder/decoder/joiner/tokens)
|
|
152
|
+
- `whisper-cli` (`whisper-cpp`; uses `WHISPER_CPP_MODEL` or the bundled tiny model)
|
|
153
|
+
- `whisper` (Python CLI; downloads models automatically)
|
|
154
|
+
4. **Gemini CLI** (`gemini`) using `read_many_files`
|
|
155
|
+
5. **Provider auth**
|
|
156
|
+
- Configured `models.providers.*` entries that support the capability are
|
|
157
|
+
tried before the bundled fallback order.
|
|
158
|
+
- Image-only config providers with an image-capable model auto-register for
|
|
159
|
+
media understanding even when they are not a bundled vendor plugin.
|
|
160
|
+
- Bundled fallback order:
|
|
161
|
+
- Audio: OpenAI → Groq → Deepgram → Google → Mistral
|
|
162
|
+
- Image: OpenAI → Anthropic → Google → MiniMax → MiniMax Portal → Z.AI
|
|
163
|
+
- Video: Google → Qwen → Moonshot
|
|
164
|
+
|
|
165
|
+
To disable auto-detection, set:
|
|
166
|
+
|
|
167
|
+
```json5
|
|
168
|
+
{
|
|
169
|
+
tools: {
|
|
170
|
+
media: {
|
|
171
|
+
audio: {
|
|
172
|
+
enabled: false,
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Note: Binary detection is best-effort across macOS/Linux/Windows; ensure the CLI is on `PATH` (we expand `~`), or set an explicit CLI model with a full command path.
|
|
180
|
+
|
|
181
|
+
### Proxy environment support (provider models)
|
|
182
|
+
|
|
183
|
+
When provider-based **audio** and **video** media understanding is enabled, Durar
|
|
184
|
+
honors standard outbound proxy environment variables for provider HTTP calls:
|
|
185
|
+
|
|
186
|
+
- `HTTPS_PROXY`
|
|
187
|
+
- `HTTP_PROXY`
|
|
188
|
+
- `https_proxy`
|
|
189
|
+
- `http_proxy`
|
|
190
|
+
|
|
191
|
+
If no proxy env vars are set, media understanding uses direct egress.
|
|
192
|
+
If the proxy value is malformed, Durar logs a warning and falls back to direct
|
|
193
|
+
fetch.
|
|
194
|
+
|
|
195
|
+
## Capabilities (optional)
|
|
196
|
+
|
|
197
|
+
If you set `capabilities`, the entry only runs for those media types. For shared
|
|
198
|
+
lists, Durar can infer defaults:
|
|
199
|
+
|
|
200
|
+
- `openai`, `anthropic`, `minimax`: **image**
|
|
201
|
+
- `minimax-portal`: **image**
|
|
202
|
+
- `moonshot`: **image + video**
|
|
203
|
+
- `openrouter`: **image**
|
|
204
|
+
- `google` (Gemini API): **image + audio + video**
|
|
205
|
+
- `qwen`: **image + video**
|
|
206
|
+
- `mistral`: **audio**
|
|
207
|
+
- `zai`: **image**
|
|
208
|
+
- `groq`: **audio**
|
|
209
|
+
- `deepgram`: **audio**
|
|
210
|
+
- Any `models.providers.<id>.models[]` catalog with an image-capable model:
|
|
211
|
+
**image**
|
|
212
|
+
|
|
213
|
+
For CLI entries, **set `capabilities` explicitly** to avoid surprising matches.
|
|
214
|
+
If you omit `capabilities`, the entry is eligible for the list it appears in.
|
|
215
|
+
|
|
216
|
+
## Provider support matrix (Durar integrations)
|
|
217
|
+
|
|
218
|
+
| Capability | Provider integration | Notes |
|
|
219
|
+
| ---------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
220
|
+
| Image | OpenAI, OpenRouter, Anthropic, Google, MiniMax, Moonshot, Qwen, Z.AI, config providers | Vendor plugins register image support; MiniMax and MiniMax OAuth both use `MiniMax-VL-01`; image-capable config providers auto-register. |
|
|
221
|
+
| Audio | OpenAI, Groq, Deepgram, Google, Mistral | Provider transcription (Whisper/Deepgram/Gemini/Voxtral). |
|
|
222
|
+
| Video | Google, Qwen, Moonshot | Provider video understanding via vendor plugins; Qwen video understanding uses the Standard DashScope endpoints. |
|
|
223
|
+
|
|
224
|
+
MiniMax note:
|
|
225
|
+
|
|
226
|
+
- `minimax` and `minimax-portal` image understanding comes from the plugin-owned
|
|
227
|
+
`MiniMax-VL-01` media provider.
|
|
228
|
+
- The bundled MiniMax text catalog still starts text-only; explicit
|
|
229
|
+
`models.providers.minimax` entries materialize image-capable M2.7 chat refs.
|
|
230
|
+
|
|
231
|
+
## Model selection guidance
|
|
232
|
+
|
|
233
|
+
- Prefer the strongest latest-generation model available for each media capability when quality and safety matter.
|
|
234
|
+
- For tool-enabled agents handling untrusted inputs, avoid older/weaker media models.
|
|
235
|
+
- Keep at least one fallback per capability for availability (quality model + faster/cheaper model).
|
|
236
|
+
- CLI fallbacks (`whisper-cli`, `whisper`, `gemini`) are useful when provider APIs are unavailable.
|
|
237
|
+
- `parakeet-mlx` note: with `--output-dir`, Durar reads `<output-dir>/<media-basename>.txt` when output format is `txt` (or unspecified); non-`txt` formats fall back to stdout.
|
|
238
|
+
|
|
239
|
+
## Attachment policy
|
|
240
|
+
|
|
241
|
+
Per‑capability `attachments` controls which attachments are processed:
|
|
242
|
+
|
|
243
|
+
- `mode`: `first` (default) or `all`
|
|
244
|
+
- `maxAttachments`: cap the number processed (default **1**)
|
|
245
|
+
- `prefer`: `first`, `last`, `path`, `url`
|
|
246
|
+
|
|
247
|
+
When `mode: "all"`, outputs are labeled `[Image 1/2]`, `[Audio 2/2]`, etc.
|
|
248
|
+
|
|
249
|
+
File-attachment extraction behavior:
|
|
250
|
+
|
|
251
|
+
- Extracted file text is wrapped as **untrusted external content** before it is
|
|
252
|
+
appended to the media prompt.
|
|
253
|
+
- The injected block uses explicit boundary markers like
|
|
254
|
+
`<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>` /
|
|
255
|
+
`<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>` and includes a
|
|
256
|
+
`Source: External` metadata line.
|
|
257
|
+
- This attachment-extraction path intentionally omits the long
|
|
258
|
+
`SECURITY NOTICE:` banner to avoid bloating the media prompt; the boundary
|
|
259
|
+
markers and metadata still remain.
|
|
260
|
+
- If a file has no extractable text, Durar injects `[No extractable text]`.
|
|
261
|
+
- If a PDF falls back to rendered page images in this path, the media prompt keeps
|
|
262
|
+
the placeholder `[PDF content rendered to images; images not forwarded to model]`
|
|
263
|
+
because this attachment-extraction step forwards text blocks, not the rendered PDF images.
|
|
264
|
+
|
|
265
|
+
## Config examples
|
|
266
|
+
|
|
267
|
+
### 1) Shared models list + overrides
|
|
268
|
+
|
|
269
|
+
```json5
|
|
270
|
+
{
|
|
271
|
+
tools: {
|
|
272
|
+
media: {
|
|
273
|
+
models: [
|
|
274
|
+
{ provider: "openai", model: "gpt-5.4-mini", capabilities: ["image"] },
|
|
275
|
+
{
|
|
276
|
+
provider: "google",
|
|
277
|
+
model: "gemini-3-flash-preview",
|
|
278
|
+
capabilities: ["image", "audio", "video"],
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
type: "cli",
|
|
282
|
+
command: "gemini",
|
|
283
|
+
args: [
|
|
284
|
+
"-m",
|
|
285
|
+
"gemini-3-flash",
|
|
286
|
+
"--allowed-tools",
|
|
287
|
+
"read_file",
|
|
288
|
+
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
|
|
289
|
+
],
|
|
290
|
+
capabilities: ["image", "video"],
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
audio: {
|
|
294
|
+
attachments: { mode: "all", maxAttachments: 2 },
|
|
295
|
+
},
|
|
296
|
+
video: {
|
|
297
|
+
maxChars: 500,
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### 2) Audio + Video only (image off)
|
|
305
|
+
|
|
306
|
+
```json5
|
|
307
|
+
{
|
|
308
|
+
tools: {
|
|
309
|
+
media: {
|
|
310
|
+
audio: {
|
|
311
|
+
enabled: true,
|
|
312
|
+
models: [
|
|
313
|
+
{ provider: "openai", model: "gpt-4o-mini-transcribe" },
|
|
314
|
+
{
|
|
315
|
+
type: "cli",
|
|
316
|
+
command: "whisper",
|
|
317
|
+
args: ["--model", "base", "{{MediaPath}}"],
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
},
|
|
321
|
+
video: {
|
|
322
|
+
enabled: true,
|
|
323
|
+
maxChars: 500,
|
|
324
|
+
models: [
|
|
325
|
+
{ provider: "google", model: "gemini-3-flash-preview" },
|
|
326
|
+
{
|
|
327
|
+
type: "cli",
|
|
328
|
+
command: "gemini",
|
|
329
|
+
args: [
|
|
330
|
+
"-m",
|
|
331
|
+
"gemini-3-flash",
|
|
332
|
+
"--allowed-tools",
|
|
333
|
+
"read_file",
|
|
334
|
+
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
|
|
335
|
+
],
|
|
336
|
+
},
|
|
337
|
+
],
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### 3) Optional image understanding
|
|
345
|
+
|
|
346
|
+
```json5
|
|
347
|
+
{
|
|
348
|
+
tools: {
|
|
349
|
+
media: {
|
|
350
|
+
image: {
|
|
351
|
+
enabled: true,
|
|
352
|
+
maxBytes: 10485760,
|
|
353
|
+
maxChars: 500,
|
|
354
|
+
models: [
|
|
355
|
+
{ provider: "openai", model: "gpt-5.4-mini" },
|
|
356
|
+
{ provider: "anthropic", model: "claude-opus-4-6" },
|
|
357
|
+
{
|
|
358
|
+
type: "cli",
|
|
359
|
+
command: "gemini",
|
|
360
|
+
args: [
|
|
361
|
+
"-m",
|
|
362
|
+
"gemini-3-flash",
|
|
363
|
+
"--allowed-tools",
|
|
364
|
+
"read_file",
|
|
365
|
+
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
|
|
366
|
+
],
|
|
367
|
+
},
|
|
368
|
+
],
|
|
369
|
+
},
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### 4) Multi-modal single entry (explicit capabilities)
|
|
376
|
+
|
|
377
|
+
```json5
|
|
378
|
+
{
|
|
379
|
+
tools: {
|
|
380
|
+
media: {
|
|
381
|
+
image: {
|
|
382
|
+
models: [
|
|
383
|
+
{
|
|
384
|
+
provider: "google",
|
|
385
|
+
model: "gemini-3.1-pro-preview",
|
|
386
|
+
capabilities: ["image", "video", "audio"],
|
|
387
|
+
},
|
|
388
|
+
],
|
|
389
|
+
},
|
|
390
|
+
audio: {
|
|
391
|
+
models: [
|
|
392
|
+
{
|
|
393
|
+
provider: "google",
|
|
394
|
+
model: "gemini-3.1-pro-preview",
|
|
395
|
+
capabilities: ["image", "video", "audio"],
|
|
396
|
+
},
|
|
397
|
+
],
|
|
398
|
+
},
|
|
399
|
+
video: {
|
|
400
|
+
models: [
|
|
401
|
+
{
|
|
402
|
+
provider: "google",
|
|
403
|
+
model: "gemini-3.1-pro-preview",
|
|
404
|
+
capabilities: ["image", "video", "audio"],
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
## Status output
|
|
414
|
+
|
|
415
|
+
When media understanding runs, `/status` includes a short summary line:
|
|
416
|
+
|
|
417
|
+
```
|
|
418
|
+
📎 Media: image ok (openai/gpt-5.4-mini) · audio skipped (maxBytes)
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
This shows per‑capability outcomes and the chosen provider/model when applicable.
|
|
422
|
+
|
|
423
|
+
## Notes
|
|
424
|
+
|
|
425
|
+
- Understanding is **best‑effort**. Errors do not block replies.
|
|
426
|
+
- Attachments are still passed to models even when understanding is disabled.
|
|
427
|
+
- Use `scope` to limit where understanding runs (e.g. only DMs).
|
|
428
|
+
|
|
429
|
+
## Related docs
|
|
430
|
+
|
|
431
|
+
- [Configuration](/gateway/configuration)
|
|
432
|
+
- [Image & Media Support](/nodes/images)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Talk mode: continuous speech conversations with ElevenLabs TTS"
|
|
3
|
+
read_when:
|
|
4
|
+
- Implementing Talk mode on macOS/iOS/Android
|
|
5
|
+
- Changing voice/TTS/interrupt behavior
|
|
6
|
+
title: "Talk Mode"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Talk Mode
|
|
10
|
+
|
|
11
|
+
Talk mode is a continuous voice conversation loop:
|
|
12
|
+
|
|
13
|
+
1. Listen for speech
|
|
14
|
+
2. Send transcript to the model (main session, chat.send)
|
|
15
|
+
3. Wait for the response
|
|
16
|
+
4. Speak it via the configured Talk provider (`talk.speak`)
|
|
17
|
+
|
|
18
|
+
## Behavior (macOS)
|
|
19
|
+
|
|
20
|
+
- **Always-on overlay** while Talk mode is enabled.
|
|
21
|
+
- **Listening → Thinking → Speaking** phase transitions.
|
|
22
|
+
- On a **short pause** (silence window), the current transcript is sent.
|
|
23
|
+
- Replies are **written to WebChat** (same as typing).
|
|
24
|
+
- **Interrupt on speech** (default on): if the user starts talking while the assistant is speaking, we stop playback and note the interruption timestamp for the next prompt.
|
|
25
|
+
|
|
26
|
+
## Voice directives in replies
|
|
27
|
+
|
|
28
|
+
The assistant may prefix its reply with a **single JSON line** to control voice:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{ "voice": "<voice-id>", "once": true }
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Rules:
|
|
35
|
+
|
|
36
|
+
- First non-empty line only.
|
|
37
|
+
- Unknown keys are ignored.
|
|
38
|
+
- `once: true` applies to the current reply only.
|
|
39
|
+
- Without `once`, the voice becomes the new default for Talk mode.
|
|
40
|
+
- The JSON line is stripped before TTS playback.
|
|
41
|
+
|
|
42
|
+
Supported keys:
|
|
43
|
+
|
|
44
|
+
- `voice` / `voice_id` / `voiceId`
|
|
45
|
+
- `model` / `model_id` / `modelId`
|
|
46
|
+
- `speed`, `rate` (WPM), `stability`, `similarity`, `style`, `speakerBoost`
|
|
47
|
+
- `seed`, `normalize`, `lang`, `output_format`, `latency_tier`
|
|
48
|
+
- `once`
|
|
49
|
+
|
|
50
|
+
## Config (`~/.Durar/Durar.json`)
|
|
51
|
+
|
|
52
|
+
```json5
|
|
53
|
+
{
|
|
54
|
+
talk: {
|
|
55
|
+
voiceId: "elevenlabs_voice_id",
|
|
56
|
+
modelId: "eleven_v3",
|
|
57
|
+
outputFormat: "mp3_44100_128",
|
|
58
|
+
apiKey: "elevenlabs_api_key",
|
|
59
|
+
silenceTimeoutMs: 1500,
|
|
60
|
+
interruptOnSpeech: true,
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Defaults:
|
|
66
|
+
|
|
67
|
+
- `interruptOnSpeech`: true
|
|
68
|
+
- `silenceTimeoutMs`: when unset, Talk keeps the platform default pause window before sending the transcript (`700 ms on macOS and Android, 900 ms on iOS`)
|
|
69
|
+
- `voiceId`: falls back to `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID` (or first ElevenLabs voice when API key is available)
|
|
70
|
+
- `modelId`: defaults to `eleven_v3` when unset
|
|
71
|
+
- `apiKey`: falls back to `ELEVENLABS_API_KEY` (or gateway shell profile if available)
|
|
72
|
+
- `outputFormat`: defaults to `pcm_44100` on macOS/iOS and `pcm_24000` on Android (set `mp3_*` to force MP3 streaming)
|
|
73
|
+
|
|
74
|
+
## macOS UI
|
|
75
|
+
|
|
76
|
+
- Menu bar toggle: **Talk**
|
|
77
|
+
- Config tab: **Talk Mode** group (voice id + interrupt toggle)
|
|
78
|
+
- Overlay:
|
|
79
|
+
- **Listening**: cloud pulses with mic level
|
|
80
|
+
- **Thinking**: sinking animation
|
|
81
|
+
- **Speaking**: radiating rings
|
|
82
|
+
- Click cloud: stop speaking
|
|
83
|
+
- Click X: exit Talk mode
|
|
84
|
+
|
|
85
|
+
## Notes
|
|
86
|
+
|
|
87
|
+
- Requires Speech + Microphone permissions.
|
|
88
|
+
- Uses `chat.send` against session key `main`.
|
|
89
|
+
- The gateway resolves Talk playback through `talk.speak` using the active Talk provider. Android falls back to local system TTS only when that RPC is unavailable.
|
|
90
|
+
- `stability` for `eleven_v3` is validated to `0.0`, `0.5`, or `1.0`; other models accept `0..1`.
|
|
91
|
+
- `latency_tier` is validated to `0..4` when set.
|
|
92
|
+
- Android supports `pcm_16000`, `pcm_22050`, `pcm_24000`, and `pcm_44100` output formats for low-latency AudioTrack streaming.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Troubleshoot node pairing, foreground requirements, permissions, and tool failures"
|
|
3
|
+
read_when:
|
|
4
|
+
- Node is connected but camera/canvas/screen/exec tools fail
|
|
5
|
+
- You need the node pairing versus approvals mental model
|
|
6
|
+
title: "Node Troubleshooting"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Node troubleshooting
|
|
10
|
+
|
|
11
|
+
Use this page when a node is visible in status but node tools fail.
|
|
12
|
+
|
|
13
|
+
## Command ladder
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
Durar status
|
|
17
|
+
Durar gateway status
|
|
18
|
+
Durar logs --follow
|
|
19
|
+
Durar doctor
|
|
20
|
+
Durar channels status --probe
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Then run node specific checks:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
Durar nodes status
|
|
27
|
+
Durar nodes describe --node <idOrNameOrIp>
|
|
28
|
+
Durar approvals get --node <idOrNameOrIp>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Healthy signals:
|
|
32
|
+
|
|
33
|
+
- Node is connected and paired for role `node`.
|
|
34
|
+
- `nodes describe` includes the capability you are calling.
|
|
35
|
+
- Exec approvals show expected mode/allowlist.
|
|
36
|
+
|
|
37
|
+
## Foreground requirements
|
|
38
|
+
|
|
39
|
+
`canvas.*`, `camera.*`, and `screen.*` are foreground only on iOS/Android nodes.
|
|
40
|
+
|
|
41
|
+
Quick check and fix:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
Durar nodes describe --node <idOrNameOrIp>
|
|
45
|
+
Durar nodes canvas snapshot --node <idOrNameOrIp>
|
|
46
|
+
Durar logs --follow
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If you see `NODE_BACKGROUND_UNAVAILABLE`, bring the node app to the foreground and retry.
|
|
50
|
+
|
|
51
|
+
## Permissions matrix
|
|
52
|
+
|
|
53
|
+
| Capability | iOS | Android | macOS node app | Typical failure code |
|
|
54
|
+
| ---------------------------- | --------------------------------------- | -------------------------------------------- | ----------------------------- | ------------------------------ |
|
|
55
|
+
| `camera.snap`, `camera.clip` | Camera (+ mic for clip audio) | Camera (+ mic for clip audio) | Camera (+ mic for clip audio) | `*_PERMISSION_REQUIRED` |
|
|
56
|
+
| `screen.record` | Screen Recording (+ mic optional) | Screen capture prompt (+ mic optional) | Screen Recording | `*_PERMISSION_REQUIRED` |
|
|
57
|
+
| `location.get` | While Using or Always (depends on mode) | Foreground/Background location based on mode | Location permission | `LOCATION_PERMISSION_REQUIRED` |
|
|
58
|
+
| `system.run` | n/a (node host path) | n/a (node host path) | Exec approvals required | `SYSTEM_RUN_DENIED` |
|
|
59
|
+
|
|
60
|
+
## Pairing versus approvals
|
|
61
|
+
|
|
62
|
+
These are different gates:
|
|
63
|
+
|
|
64
|
+
1. **Device pairing**: can this node connect to the gateway?
|
|
65
|
+
2. **Gateway node command policy**: is the RPC command ID allowed by `gateway.nodes.allowCommands` / `denyCommands` and platform defaults?
|
|
66
|
+
3. **Exec approvals**: can this node run a specific shell command locally?
|
|
67
|
+
|
|
68
|
+
Quick checks:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
Durar devices list
|
|
72
|
+
Durar nodes status
|
|
73
|
+
Durar approvals get --node <idOrNameOrIp>
|
|
74
|
+
Durar approvals allowlist add --node <idOrNameOrIp> "/usr/bin/uname"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
If pairing is missing, approve the node device first.
|
|
78
|
+
If `nodes describe` is missing a command, check the gateway node command policy and whether the node actually declared that command on connect.
|
|
79
|
+
If pairing is fine but `system.run` fails, fix exec approvals/allowlist on that node.
|
|
80
|
+
|
|
81
|
+
Node pairing is an identity/trust gate, not a per-command approval surface. For `system.run`, the per-node policy lives in that node's exec approvals file (`Durar approvals get --node ...`), not in the gateway pairing record.
|
|
82
|
+
|
|
83
|
+
For approval-backed `host=node` runs, the gateway also binds execution to the
|
|
84
|
+
prepared canonical `systemRunPlan`. If a later caller mutates command/cwd or
|
|
85
|
+
session metadata before the approved run is forwarded, the gateway rejects the
|
|
86
|
+
run as an approval mismatch instead of trusting the edited payload.
|
|
87
|
+
|
|
88
|
+
## Common node error codes
|
|
89
|
+
|
|
90
|
+
- `NODE_BACKGROUND_UNAVAILABLE` → app is backgrounded; bring it foreground.
|
|
91
|
+
- `CAMERA_DISABLED` → camera toggle disabled in node settings.
|
|
92
|
+
- `*_PERMISSION_REQUIRED` → OS permission missing/denied.
|
|
93
|
+
- `LOCATION_DISABLED` → location mode is off.
|
|
94
|
+
- `LOCATION_PERMISSION_REQUIRED` → requested location mode not granted.
|
|
95
|
+
- `LOCATION_BACKGROUND_UNAVAILABLE` → app is backgrounded but only While Using permission exists.
|
|
96
|
+
- `SYSTEM_RUN_DENIED: approval required` → exec request needs explicit approval.
|
|
97
|
+
- `SYSTEM_RUN_DENIED: allowlist miss` → command blocked by allowlist mode.
|
|
98
|
+
On Windows node hosts, shell-wrapper forms like `cmd.exe /c ...` are treated as allowlist misses in
|
|
99
|
+
allowlist mode unless approved via ask flow.
|
|
100
|
+
|
|
101
|
+
## Fast recovery loop
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
Durar nodes status
|
|
105
|
+
Durar nodes describe --node <idOrNameOrIp>
|
|
106
|
+
Durar approvals get --node <idOrNameOrIp>
|
|
107
|
+
Durar logs --follow
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
If still stuck:
|
|
111
|
+
|
|
112
|
+
- Re-approve device pairing.
|
|
113
|
+
- Re-open node app (foreground).
|
|
114
|
+
- Re-grant OS permissions.
|
|
115
|
+
- Recreate/adjust exec approval policy.
|
|
116
|
+
|
|
117
|
+
Related:
|
|
118
|
+
|
|
119
|
+
- [/nodes/index](/nodes/index)
|
|
120
|
+
- [/nodes/camera](/nodes/camera)
|
|
121
|
+
- [/nodes/location-command](/nodes/location-command)
|
|
122
|
+
- [/tools/exec-approvals](/tools/exec-approvals)
|
|
123
|
+
- [/gateway/pairing](/gateway/pairing)
|