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,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Model authentication: OAuth, API keys, and Claude CLI reuse"
|
|
3
|
+
read_when:
|
|
4
|
+
- Debugging model auth or OAuth expiry
|
|
5
|
+
- Documenting authentication or credential storage
|
|
6
|
+
title: "Authentication"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Authentication (Model Providers)
|
|
10
|
+
|
|
11
|
+
<Note>
|
|
12
|
+
This page covers **model provider** authentication (API keys, OAuth, Claude CLI reuse). For **gateway connection** authentication (token, password, trusted-proxy), see [Configuration](/gateway/configuration) and [Trusted Proxy Auth](/gateway/trusted-proxy-auth).
|
|
13
|
+
</Note>
|
|
14
|
+
|
|
15
|
+
Durar supports OAuth and API keys for model providers. For always-on gateway
|
|
16
|
+
hosts, API keys are usually the most predictable option. Subscription/OAuth
|
|
17
|
+
flows are also supported when they match your provider account model.
|
|
18
|
+
|
|
19
|
+
See [/concepts/oauth](/concepts/oauth) for the full OAuth flow and storage
|
|
20
|
+
layout.
|
|
21
|
+
For SecretRef-based auth (`env`/`file`/`exec` providers), see [Secrets Management](/gateway/secrets).
|
|
22
|
+
For credential eligibility/reason-code rules used by `models status --probe`, see
|
|
23
|
+
[Auth Credential Semantics](/auth-credential-semantics).
|
|
24
|
+
|
|
25
|
+
## Recommended setup (API key, any provider)
|
|
26
|
+
|
|
27
|
+
If you’re running a long-lived gateway, start with an API key for your chosen
|
|
28
|
+
provider.
|
|
29
|
+
For Anthropic specifically, API key auth is the safe path. Claude CLI reuse is
|
|
30
|
+
the other supported subscription-style setup path.
|
|
31
|
+
|
|
32
|
+
1. Create an API key in your provider console.
|
|
33
|
+
2. Put it on the **gateway host** (the machine running `Durar gateway`).
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
export <PROVIDER>_API_KEY="..."
|
|
37
|
+
Durar models status
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
3. If the Gateway runs under systemd/launchd, prefer putting the key in
|
|
41
|
+
`~/.Durar/.env` so the daemon can read it:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cat >> ~/.Durar/.env <<'EOF'
|
|
45
|
+
<PROVIDER>_API_KEY=...
|
|
46
|
+
EOF
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Then restart the daemon (or restart your Gateway process) and re-check:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
Durar models status
|
|
53
|
+
Durar doctor
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If you’d rather not manage env vars yourself, onboarding can store
|
|
57
|
+
API keys for daemon use: `Durar onboard`.
|
|
58
|
+
|
|
59
|
+
See [Help](/help) for details on env inheritance (`env.shellEnv`,
|
|
60
|
+
`~/.Durar/.env`, systemd/launchd).
|
|
61
|
+
|
|
62
|
+
## Anthropic: legacy token compatibility
|
|
63
|
+
|
|
64
|
+
Anthropic setup-token auth is still available in Durar as a
|
|
65
|
+
legacy/manual path. Anthropic's public Claude Code docs still cover direct
|
|
66
|
+
Claude Code terminal use under Claude plans, but Anthropic separately told
|
|
67
|
+
Durar users that the **Durar** Claude-login path counts as third-party
|
|
68
|
+
harness usage and requires **Extra Usage** billed separately from the
|
|
69
|
+
subscription.
|
|
70
|
+
|
|
71
|
+
For the clearest setup path, use an Anthropic API key or migrate to Claude CLI
|
|
72
|
+
on the gateway host.
|
|
73
|
+
|
|
74
|
+
Manual token entry (any provider; writes `auth-profiles.json` + updates config):
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
Durar models auth paste-token --provider openrouter
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Auth profile refs are also supported for static credentials:
|
|
81
|
+
|
|
82
|
+
- `api_key` credentials can use `keyRef: { source, provider, id }`
|
|
83
|
+
- `token` credentials can use `tokenRef: { source, provider, id }`
|
|
84
|
+
- OAuth-mode profiles do not support SecretRef credentials; if `auth.profiles.<id>.mode` is set to `"oauth"`, SecretRef-backed `keyRef`/`tokenRef` input for that profile is rejected.
|
|
85
|
+
|
|
86
|
+
Automation-friendly check (exit `1` when expired/missing, `2` when expiring):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
Durar models status --check
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Live auth probes:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
Durar models status --probe
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Notes:
|
|
99
|
+
|
|
100
|
+
- Probe rows can come from auth profiles, env credentials, or `models.json`.
|
|
101
|
+
- If explicit `auth.order.<provider>` omits a stored profile, probe reports
|
|
102
|
+
`excluded_by_auth_order` for that profile instead of trying it.
|
|
103
|
+
- If auth exists but Durar cannot resolve a probeable model candidate for
|
|
104
|
+
that provider, probe reports `status: no_model`.
|
|
105
|
+
- Rate-limit cooldowns can be model-scoped. A profile cooling down for one
|
|
106
|
+
model can still be usable for a sibling model on the same provider.
|
|
107
|
+
|
|
108
|
+
Optional ops scripts (systemd/Termux) are documented here:
|
|
109
|
+
[Auth monitoring scripts](/help/scripts#auth-monitoring-scripts)
|
|
110
|
+
|
|
111
|
+
## Anthropic: Claude CLI migration
|
|
112
|
+
|
|
113
|
+
If Claude CLI is already installed and signed in on the gateway host, you can
|
|
114
|
+
switch an existing Anthropic setup over to the CLI backend. This is a
|
|
115
|
+
supported Durar migration path for reusing a local Claude CLI login on that
|
|
116
|
+
host.
|
|
117
|
+
|
|
118
|
+
Prerequisites:
|
|
119
|
+
|
|
120
|
+
- `claude` installed on the gateway host
|
|
121
|
+
- Claude CLI already signed in there with `claude auth login`
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
Durar models auth login --provider anthropic --method cli --set-default
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
This keeps your existing Anthropic auth profiles for rollback, but changes the
|
|
128
|
+
default model selection to `claude-cli/...` and adds matching Claude CLI
|
|
129
|
+
allowlist entries under `agents.defaults.models`.
|
|
130
|
+
|
|
131
|
+
Verify:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
Durar models status
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Onboarding shortcut:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
Durar onboard --auth-choice anthropic-cli
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Interactive `Durar onboard` and `Durar configure` still prefer Claude CLI
|
|
144
|
+
for Anthropic, but Anthropic setup-token is available again as a
|
|
145
|
+
legacy/manual path and should be used with the Extra Usage billing expectation.
|
|
146
|
+
|
|
147
|
+
## Checking model auth status
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
Durar models status
|
|
151
|
+
Durar doctor
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## API key rotation behavior (gateway)
|
|
155
|
+
|
|
156
|
+
Some providers support retrying a request with alternative keys when an API call
|
|
157
|
+
hits a provider rate limit.
|
|
158
|
+
|
|
159
|
+
- Priority order:
|
|
160
|
+
- `Durar_LIVE_<PROVIDER>_KEY` (single override)
|
|
161
|
+
- `<PROVIDER>_API_KEYS`
|
|
162
|
+
- `<PROVIDER>_API_KEY`
|
|
163
|
+
- `<PROVIDER>_API_KEY_*`
|
|
164
|
+
- Google providers also include `GOOGLE_API_KEY` as an additional fallback.
|
|
165
|
+
- The same key list is deduplicated before use.
|
|
166
|
+
- Durar retries with the next key only for rate-limit errors (for example
|
|
167
|
+
`429`, `rate_limit`, `quota`, `resource exhausted`, `Too many concurrent
|
|
168
|
+
requests`, `ThrottlingException`, `concurrency limit reached`, or
|
|
169
|
+
`workers_ai ... quota limit exceeded`).
|
|
170
|
+
- Non-rate-limit errors are not retried with alternate keys.
|
|
171
|
+
- If all keys fail, the final error from the last attempt is returned.
|
|
172
|
+
|
|
173
|
+
## Controlling which credential is used
|
|
174
|
+
|
|
175
|
+
### Per-session (chat command)
|
|
176
|
+
|
|
177
|
+
Use `/model <alias-or-id>@<profileId>` to pin a specific provider credential for the current session (example profile ids: `anthropic:default`, `anthropic:work`).
|
|
178
|
+
|
|
179
|
+
Use `/model` (or `/model list`) for a compact picker; use `/model status` for the full view (candidates + next auth profile, plus provider endpoint details when configured).
|
|
180
|
+
|
|
181
|
+
### Per-agent (CLI override)
|
|
182
|
+
|
|
183
|
+
Set an explicit auth profile order override for an agent (stored in that agent’s `auth-profiles.json`):
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
Durar models auth order get --provider anthropic
|
|
187
|
+
Durar models auth order set --provider anthropic anthropic:default
|
|
188
|
+
Durar models auth order clear --provider anthropic
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Use `--agent <id>` to target a specific agent; omit it to use the configured default agent.
|
|
192
|
+
When you debug order issues, `Durar models status --probe` shows omitted
|
|
193
|
+
stored profiles as `excluded_by_auth_order` instead of silently skipping them.
|
|
194
|
+
When you debug cooldown issues, remember that rate-limit cooldowns can be tied
|
|
195
|
+
to one model id rather than the whole provider profile.
|
|
196
|
+
|
|
197
|
+
## Troubleshooting
|
|
198
|
+
|
|
199
|
+
### "No credentials found"
|
|
200
|
+
|
|
201
|
+
If the Anthropic profile is missing, migrate that setup to Claude CLI or an API
|
|
202
|
+
key on the **gateway host**, then re-check:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
Durar models status
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Token expiring/expired
|
|
209
|
+
|
|
210
|
+
Run `Durar models status` to confirm which profile is expiring. If a legacy
|
|
211
|
+
Anthropic token profile is missing or expired, migrate that setup to Claude CLI
|
|
212
|
+
or an API key.
|
|
213
|
+
|
|
214
|
+
## Claude CLI requirements
|
|
215
|
+
|
|
216
|
+
Only needed for the Anthropic Claude CLI reuse path:
|
|
217
|
+
|
|
218
|
+
- Claude Code CLI installed (`claude` command available)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Background exec execution and process management"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or modifying background exec behavior
|
|
5
|
+
- Debugging long-running exec tasks
|
|
6
|
+
title: "Background Exec and Process Tool"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Background Exec + Process Tool
|
|
10
|
+
|
|
11
|
+
Durar runs shell commands through the `exec` tool and keeps long‑running tasks in memory. The `process` tool manages those background sessions.
|
|
12
|
+
|
|
13
|
+
## exec tool
|
|
14
|
+
|
|
15
|
+
Key parameters:
|
|
16
|
+
|
|
17
|
+
- `command` (required)
|
|
18
|
+
- `yieldMs` (default 10000): auto‑background after this delay
|
|
19
|
+
- `background` (bool): background immediately
|
|
20
|
+
- `timeout` (seconds, default 1800): kill the process after this timeout
|
|
21
|
+
- `elevated` (bool): run outside the sandbox if elevated mode is enabled/allowed (`gateway` by default, or `node` when the exec target is `node`)
|
|
22
|
+
- Need a real TTY? Set `pty: true`.
|
|
23
|
+
- `workdir`, `env`
|
|
24
|
+
|
|
25
|
+
Behavior:
|
|
26
|
+
|
|
27
|
+
- Foreground runs return output directly.
|
|
28
|
+
- When backgrounded (explicit or timeout), the tool returns `status: "running"` + `sessionId` and a short tail.
|
|
29
|
+
- Output is kept in memory until the session is polled or cleared.
|
|
30
|
+
- If the `process` tool is disallowed, `exec` runs synchronously and ignores `yieldMs`/`background`.
|
|
31
|
+
- Spawned exec commands receive `Durar_SHELL=exec` for context-aware shell/profile rules.
|
|
32
|
+
- For long-running work that starts now, start it once and rely on automatic
|
|
33
|
+
completion wake when it is enabled and the command emits output or fails.
|
|
34
|
+
- If automatic completion wake is unavailable, or you need quiet-success
|
|
35
|
+
confirmation for a command that exited cleanly without output, use `process`
|
|
36
|
+
to confirm completion.
|
|
37
|
+
- Do not emulate reminders or delayed follow-ups with `sleep` loops or repeated
|
|
38
|
+
polling; use cron for future work.
|
|
39
|
+
|
|
40
|
+
## Child process bridging
|
|
41
|
+
|
|
42
|
+
When spawning long-running child processes outside the exec/process tools (for example, CLI respawns or gateway helpers), attach the child-process bridge helper so termination signals are forwarded and listeners are detached on exit/error. This avoids orphaned processes on systemd and keeps shutdown behavior consistent across platforms.
|
|
43
|
+
|
|
44
|
+
Environment overrides:
|
|
45
|
+
|
|
46
|
+
- `PI_BASH_YIELD_MS`: default yield (ms)
|
|
47
|
+
- `PI_BASH_MAX_OUTPUT_CHARS`: in‑memory output cap (chars)
|
|
48
|
+
- `Durar_BASH_PENDING_MAX_OUTPUT_CHARS`: pending stdout/stderr cap per stream (chars)
|
|
49
|
+
- `PI_BASH_JOB_TTL_MS`: TTL for finished sessions (ms, bounded to 1m–3h)
|
|
50
|
+
|
|
51
|
+
Config (preferred):
|
|
52
|
+
|
|
53
|
+
- `tools.exec.backgroundMs` (default 10000)
|
|
54
|
+
- `tools.exec.timeoutSec` (default 1800)
|
|
55
|
+
- `tools.exec.cleanupMs` (default 1800000)
|
|
56
|
+
- `tools.exec.notifyOnExit` (default true): enqueue a system event + request heartbeat when a backgrounded exec exits.
|
|
57
|
+
- `tools.exec.notifyOnExitEmptySuccess` (default false): when true, also enqueue completion events for successful backgrounded runs that produced no output.
|
|
58
|
+
|
|
59
|
+
## process tool
|
|
60
|
+
|
|
61
|
+
Actions:
|
|
62
|
+
|
|
63
|
+
- `list`: running + finished sessions
|
|
64
|
+
- `poll`: drain new output for a session (also reports exit status)
|
|
65
|
+
- `log`: read the aggregated output (supports `offset` + `limit`)
|
|
66
|
+
- `write`: send stdin (`data`, optional `eof`)
|
|
67
|
+
- `send-keys`: send explicit key tokens or bytes to a PTY-backed session
|
|
68
|
+
- `submit`: send Enter / carriage return to a PTY-backed session
|
|
69
|
+
- `paste`: send literal text, optionally wrapped in bracketed paste mode
|
|
70
|
+
- `kill`: terminate a background session
|
|
71
|
+
- `clear`: remove a finished session from memory
|
|
72
|
+
- `remove`: kill if running, otherwise clear if finished
|
|
73
|
+
|
|
74
|
+
Notes:
|
|
75
|
+
|
|
76
|
+
- Only backgrounded sessions are listed/persisted in memory.
|
|
77
|
+
- Sessions are lost on process restart (no disk persistence).
|
|
78
|
+
- Session logs are only saved to chat history if you run `process poll/log` and the tool result is recorded.
|
|
79
|
+
- `process` is scoped per agent; it only sees sessions started by that agent.
|
|
80
|
+
- Use `poll` / `log` for status, logs, quiet-success confirmation, or
|
|
81
|
+
completion confirmation when automatic completion wake is unavailable.
|
|
82
|
+
- Use `write` / `send-keys` / `submit` / `paste` / `kill` when you need input
|
|
83
|
+
or intervention.
|
|
84
|
+
- `process list` includes a derived `name` (command verb + target) for quick scans.
|
|
85
|
+
- `process log` uses line-based `offset`/`limit`.
|
|
86
|
+
- When both `offset` and `limit` are omitted, it returns the last 200 lines and includes a paging hint.
|
|
87
|
+
- When `offset` is provided and `limit` is omitted, it returns from `offset` to the end (not capped to 200).
|
|
88
|
+
- Polling is for on-demand status, not wait-loop scheduling. If the work should
|
|
89
|
+
happen later, use cron instead.
|
|
90
|
+
|
|
91
|
+
## Examples
|
|
92
|
+
|
|
93
|
+
Run a long task and poll later:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Start immediately in background:
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{ "tool": "exec", "command": "npm run build", "background": true }
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Send stdin:
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Send PTY keys:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Submit current line:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Paste literal text:
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
|
|
131
|
+
```
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Bonjour/mDNS discovery + debugging (Gateway beacons, clients, and common failure modes)"
|
|
3
|
+
read_when:
|
|
4
|
+
- Debugging Bonjour discovery issues on macOS/iOS
|
|
5
|
+
- Changing mDNS service types, TXT records, or discovery UX
|
|
6
|
+
title: "Bonjour Discovery"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Bonjour / mDNS discovery
|
|
10
|
+
|
|
11
|
+
Durar uses Bonjour (mDNS / DNS‑SD) to discover an active Gateway (WebSocket endpoint).
|
|
12
|
+
Multicast `local.` browsing is a **LAN-only convenience**. For cross-network discovery, the
|
|
13
|
+
same beacon can also be published through a configured wide-area DNS-SD domain. Discovery is
|
|
14
|
+
still best-effort and does **not** replace SSH or Tailnet-based connectivity.
|
|
15
|
+
|
|
16
|
+
## Wide-area Bonjour (Unicast DNS-SD) over Tailscale
|
|
17
|
+
|
|
18
|
+
If the node and gateway are on different networks, multicast mDNS won’t cross the
|
|
19
|
+
boundary. You can keep the same discovery UX by switching to **unicast DNS‑SD**
|
|
20
|
+
("Wide‑Area Bonjour") over Tailscale.
|
|
21
|
+
|
|
22
|
+
High‑level steps:
|
|
23
|
+
|
|
24
|
+
1. Run a DNS server on the gateway host (reachable over Tailnet).
|
|
25
|
+
2. Publish DNS‑SD records for `_Durar-gw._tcp` under a dedicated zone
|
|
26
|
+
(example: `Durar.internal.`).
|
|
27
|
+
3. Configure Tailscale **split DNS** so your chosen domain resolves via that
|
|
28
|
+
DNS server for clients (including iOS).
|
|
29
|
+
|
|
30
|
+
Durar supports any discovery domain; `Durar.internal.` is just an example.
|
|
31
|
+
iOS/Android nodes browse both `local.` and your configured wide‑area domain.
|
|
32
|
+
|
|
33
|
+
### Gateway config (recommended)
|
|
34
|
+
|
|
35
|
+
```json5
|
|
36
|
+
{
|
|
37
|
+
gateway: { bind: "tailnet" }, // tailnet-only (recommended)
|
|
38
|
+
discovery: { wideArea: { enabled: true } }, // enables wide-area DNS-SD publishing
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### One-time DNS server setup (gateway host)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
Durar dns setup --apply
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This installs CoreDNS and configures it to:
|
|
49
|
+
|
|
50
|
+
- listen on port 53 only on the gateway’s Tailscale interfaces
|
|
51
|
+
- serve your chosen domain (example: `Durar.internal.`) from `~/.Durar/dns/<domain>.db`
|
|
52
|
+
|
|
53
|
+
Validate from a tailnet‑connected machine:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
dns-sd -B _Durar-gw._tcp Durar.internal.
|
|
57
|
+
dig @<TAILNET_IPV4> -p 53 _Durar-gw._tcp.Durar.internal PTR +short
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Tailscale DNS settings
|
|
61
|
+
|
|
62
|
+
In the Tailscale admin console:
|
|
63
|
+
|
|
64
|
+
- Add a nameserver pointing at the gateway’s tailnet IP (UDP/TCP 53).
|
|
65
|
+
- Add split DNS so your discovery domain uses that nameserver.
|
|
66
|
+
|
|
67
|
+
Once clients accept tailnet DNS, iOS nodes and CLI discovery can browse
|
|
68
|
+
`_Durar-gw._tcp` in your discovery domain without multicast.
|
|
69
|
+
|
|
70
|
+
### Gateway listener security (recommended)
|
|
71
|
+
|
|
72
|
+
The Gateway WS port (default `18789`) binds to loopback by default. For LAN/tailnet
|
|
73
|
+
access, bind explicitly and keep auth enabled.
|
|
74
|
+
|
|
75
|
+
For tailnet‑only setups:
|
|
76
|
+
|
|
77
|
+
- Set `gateway.bind: "tailnet"` in `~/.Durar/Durar.json`.
|
|
78
|
+
- Restart the Gateway (or restart the macOS menubar app).
|
|
79
|
+
|
|
80
|
+
## What advertises
|
|
81
|
+
|
|
82
|
+
Only the Gateway advertises `_Durar-gw._tcp`.
|
|
83
|
+
|
|
84
|
+
## Service types
|
|
85
|
+
|
|
86
|
+
- `_Durar-gw._tcp` — gateway transport beacon (used by macOS/iOS/Android nodes).
|
|
87
|
+
|
|
88
|
+
## TXT keys (non-secret hints)
|
|
89
|
+
|
|
90
|
+
The Gateway advertises small non‑secret hints to make UI flows convenient:
|
|
91
|
+
|
|
92
|
+
- `role=gateway`
|
|
93
|
+
- `displayName=<friendly name>`
|
|
94
|
+
- `lanHost=<hostname>.local`
|
|
95
|
+
- `gatewayPort=<port>` (Gateway WS + HTTP)
|
|
96
|
+
- `gatewayTls=1` (only when TLS is enabled)
|
|
97
|
+
- `gatewayTlsSha256=<sha256>` (only when TLS is enabled and fingerprint is available)
|
|
98
|
+
- `canvasPort=<port>` (only when the canvas host is enabled; currently the same as `gatewayPort`)
|
|
99
|
+
- `transport=gateway`
|
|
100
|
+
- `tailnetDns=<magicdns>` (optional hint when Tailnet is available)
|
|
101
|
+
- `sshPort=<port>` (mDNS full mode only; wide-area DNS-SD may omit it)
|
|
102
|
+
- `cliPath=<path>` (mDNS full mode only; wide-area DNS-SD still writes it as a remote-install hint)
|
|
103
|
+
|
|
104
|
+
Security notes:
|
|
105
|
+
|
|
106
|
+
- Bonjour/mDNS TXT records are **unauthenticated**. Clients must not treat TXT as authoritative routing.
|
|
107
|
+
- Clients should route using the resolved service endpoint (SRV + A/AAAA). Treat `lanHost`, `tailnetDns`, `gatewayPort`, and `gatewayTlsSha256` as hints only.
|
|
108
|
+
- SSH auto-targeting should likewise use the resolved service host, not TXT-only hints.
|
|
109
|
+
- TLS pinning must never allow an advertised `gatewayTlsSha256` to override a previously stored pin.
|
|
110
|
+
- iOS/Android nodes should treat discovery-based direct connects as **TLS-only** and require explicit user confirmation before trusting a first-time fingerprint.
|
|
111
|
+
|
|
112
|
+
## Debugging on macOS
|
|
113
|
+
|
|
114
|
+
Useful built‑in tools:
|
|
115
|
+
|
|
116
|
+
- Browse instances:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
dns-sd -B _Durar-gw._tcp local.
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
- Resolve one instance (replace `<instance>`):
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
dns-sd -L "<instance>" _Durar-gw._tcp local.
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
If browsing works but resolving fails, you’re usually hitting a LAN policy or
|
|
129
|
+
mDNS resolver issue.
|
|
130
|
+
|
|
131
|
+
## Debugging in Gateway logs
|
|
132
|
+
|
|
133
|
+
The Gateway writes a rolling log file (printed on startup as
|
|
134
|
+
`gateway log file: ...`). Look for `bonjour:` lines, especially:
|
|
135
|
+
|
|
136
|
+
- `bonjour: advertise failed ...`
|
|
137
|
+
- `bonjour: ... name conflict resolved` / `hostname conflict resolved`
|
|
138
|
+
- `bonjour: watchdog detected non-announced service ...`
|
|
139
|
+
|
|
140
|
+
## Debugging on iOS node
|
|
141
|
+
|
|
142
|
+
The iOS node uses `NWBrowser` to discover `_Durar-gw._tcp`.
|
|
143
|
+
|
|
144
|
+
To capture logs:
|
|
145
|
+
|
|
146
|
+
- Settings → Gateway → Advanced → **Discovery Debug Logs**
|
|
147
|
+
- Settings → Gateway → Advanced → **Discovery Logs** → reproduce → **Copy**
|
|
148
|
+
|
|
149
|
+
The log includes browser state transitions and result‑set changes.
|
|
150
|
+
|
|
151
|
+
## Common failure modes
|
|
152
|
+
|
|
153
|
+
- **Bonjour doesn’t cross networks**: use Tailnet or SSH.
|
|
154
|
+
- **Multicast blocked**: some Wi‑Fi networks disable mDNS.
|
|
155
|
+
- **Sleep / interface churn**: macOS may temporarily drop mDNS results; retry.
|
|
156
|
+
- **Browse works but resolve fails**: keep machine names simple (avoid emojis or
|
|
157
|
+
punctuation), then restart the Gateway. The service instance name derives from
|
|
158
|
+
the host name, so overly complex names can confuse some resolvers.
|
|
159
|
+
|
|
160
|
+
## Escaped instance names (`\032`)
|
|
161
|
+
|
|
162
|
+
Bonjour/DNS‑SD often escapes bytes in service instance names as decimal `\DDD`
|
|
163
|
+
sequences (e.g. spaces become `\032`).
|
|
164
|
+
|
|
165
|
+
- This is normal at the protocol level.
|
|
166
|
+
- UIs should decode for display (iOS uses `BonjourEscapes.decode`).
|
|
167
|
+
|
|
168
|
+
## Disabling / configuration
|
|
169
|
+
|
|
170
|
+
- `Durar_DISABLE_BONJOUR=1` disables advertising (legacy: `Durar_DISABLE_BONJOUR`).
|
|
171
|
+
- `gateway.bind` in `~/.Durar/Durar.json` controls the Gateway bind mode.
|
|
172
|
+
- `Durar_SSH_PORT` overrides the SSH port when `sshPort` is advertised (legacy: `Durar_SSH_PORT`).
|
|
173
|
+
- `Durar_TAILNET_DNS` publishes a MagicDNS hint in TXT (legacy: `Durar_TAILNET_DNS`).
|
|
174
|
+
- `Durar_CLI_PATH` overrides the advertised CLI path (legacy: `Durar_CLI_PATH`).
|
|
175
|
+
|
|
176
|
+
## Related docs
|
|
177
|
+
|
|
178
|
+
- Discovery policy and transport selection: [Discovery](/gateway/discovery)
|
|
179
|
+
- Node pairing + approvals: [Gateway pairing](/gateway/pairing)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Historical bridge protocol (legacy nodes): TCP JSONL, pairing, scoped RPC"
|
|
3
|
+
read_when:
|
|
4
|
+
- Building or debugging node clients (iOS/Android/macOS node mode)
|
|
5
|
+
- Investigating pairing or bridge auth failures
|
|
6
|
+
- Auditing the node surface exposed by the gateway
|
|
7
|
+
title: "Bridge Protocol"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Bridge protocol (legacy node transport)
|
|
11
|
+
|
|
12
|
+
<Warning>
|
|
13
|
+
The TCP bridge has been **removed**. Current Durar builds do not ship the bridge listener and `bridge.*` config keys are no longer in the schema. This page is kept for historical reference only. Use the [Gateway Protocol](/gateway/protocol) for all node/operator clients.
|
|
14
|
+
</Warning>
|
|
15
|
+
|
|
16
|
+
## Why it existed
|
|
17
|
+
|
|
18
|
+
- **Security boundary**: the bridge exposes a small allowlist instead of the
|
|
19
|
+
full gateway API surface.
|
|
20
|
+
- **Pairing + node identity**: node admission is owned by the gateway and tied
|
|
21
|
+
to a per-node token.
|
|
22
|
+
- **Discovery UX**: nodes can discover gateways via Bonjour on LAN, or connect
|
|
23
|
+
directly over a tailnet.
|
|
24
|
+
- **Loopback WS**: the full WS control plane stays local unless tunneled via SSH.
|
|
25
|
+
|
|
26
|
+
## Transport
|
|
27
|
+
|
|
28
|
+
- TCP, one JSON object per line (JSONL).
|
|
29
|
+
- Optional TLS (when `bridge.tls.enabled` is true).
|
|
30
|
+
- Historical default listener port was `18790` (current builds do not start a
|
|
31
|
+
TCP bridge).
|
|
32
|
+
|
|
33
|
+
When TLS is enabled, discovery TXT records include `bridgeTls=1` plus
|
|
34
|
+
`bridgeTlsSha256` as a non-secret hint. Note that Bonjour/mDNS TXT records are
|
|
35
|
+
unauthenticated; clients must not treat the advertised fingerprint as an
|
|
36
|
+
authoritative pin without explicit user intent or other out-of-band verification.
|
|
37
|
+
|
|
38
|
+
## Handshake + pairing
|
|
39
|
+
|
|
40
|
+
1. Client sends `hello` with node metadata + token (if already paired).
|
|
41
|
+
2. If not paired, gateway replies `error` (`NOT_PAIRED`/`UNAUTHORIZED`).
|
|
42
|
+
3. Client sends `pair-request`.
|
|
43
|
+
4. Gateway waits for approval, then sends `pair-ok` and `hello-ok`.
|
|
44
|
+
|
|
45
|
+
Historically, `hello-ok` returned `serverName` and could include
|
|
46
|
+
`canvasHostUrl`.
|
|
47
|
+
|
|
48
|
+
## Frames
|
|
49
|
+
|
|
50
|
+
Client → Gateway:
|
|
51
|
+
|
|
52
|
+
- `req` / `res`: scoped gateway RPC (chat, sessions, config, health, voicewake, skills.bins)
|
|
53
|
+
- `event`: node signals (voice transcript, agent request, chat subscribe, exec lifecycle)
|
|
54
|
+
|
|
55
|
+
Gateway → Client:
|
|
56
|
+
|
|
57
|
+
- `invoke` / `invoke-res`: node commands (`canvas.*`, `camera.*`, `screen.record`,
|
|
58
|
+
`location.get`, `sms.send`)
|
|
59
|
+
- `event`: chat updates for subscribed sessions
|
|
60
|
+
- `ping` / `pong`: keepalive
|
|
61
|
+
|
|
62
|
+
Legacy allowlist enforcement lived in `src/gateway/server-bridge.ts` (removed).
|
|
63
|
+
|
|
64
|
+
## Exec lifecycle events
|
|
65
|
+
|
|
66
|
+
Nodes can emit `exec.finished` or `exec.denied` events to surface system.run activity.
|
|
67
|
+
These are mapped to system events in the gateway. (Legacy nodes may still emit `exec.started`.)
|
|
68
|
+
|
|
69
|
+
Payload fields (all optional unless noted):
|
|
70
|
+
|
|
71
|
+
- `sessionKey` (required): agent session to receive the system event.
|
|
72
|
+
- `runId`: unique exec id for grouping.
|
|
73
|
+
- `command`: raw or formatted command string.
|
|
74
|
+
- `exitCode`, `timedOut`, `success`, `output`: completion details (finished only).
|
|
75
|
+
- `reason`: denial reason (denied only).
|
|
76
|
+
|
|
77
|
+
## Historical tailnet usage
|
|
78
|
+
|
|
79
|
+
- Bind the bridge to a tailnet IP: `bridge.bind: "tailnet"` in
|
|
80
|
+
`~/.Durar/Durar.json` (historical only; `bridge.*` is no longer valid).
|
|
81
|
+
- Clients connect via MagicDNS name or tailnet IP.
|
|
82
|
+
- Bonjour does **not** cross networks; use manual host/port or wide-area DNS‑SD
|
|
83
|
+
when needed.
|
|
84
|
+
|
|
85
|
+
## Versioning
|
|
86
|
+
|
|
87
|
+
The bridge was **implicit v1** (no min/max negotiation). This section is
|
|
88
|
+
historical reference only; current node/operator clients use the WebSocket
|
|
89
|
+
[Gateway Protocol](/gateway/protocol).
|