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,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Agent workspace: location, layout, and backup strategy"
|
|
3
|
+
read_when:
|
|
4
|
+
- You need to explain the agent workspace or its file layout
|
|
5
|
+
- You want to back up or migrate an agent workspace
|
|
6
|
+
title: "Agent Workspace"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Agent workspace
|
|
10
|
+
|
|
11
|
+
The workspace is the agent's home. It is the only working directory used for
|
|
12
|
+
file tools and for workspace context. Keep it private and treat it as memory.
|
|
13
|
+
|
|
14
|
+
This is separate from `~/.Durar/`, which stores config, credentials, and
|
|
15
|
+
sessions.
|
|
16
|
+
|
|
17
|
+
**Important:** the workspace is the **default cwd**, not a hard sandbox. Tools
|
|
18
|
+
resolve relative paths against the workspace, but absolute paths can still reach
|
|
19
|
+
elsewhere on the host unless sandboxing is enabled. If you need isolation, use
|
|
20
|
+
[`agents.defaults.sandbox`](/gateway/sandboxing) (and/or per‑agent sandbox config).
|
|
21
|
+
When sandboxing is enabled and `workspaceAccess` is not `"rw"`, tools operate
|
|
22
|
+
inside a sandbox workspace under `~/.Durar/sandboxes`, not your host workspace.
|
|
23
|
+
|
|
24
|
+
## Default location
|
|
25
|
+
|
|
26
|
+
- Default: `~/.Durar/workspace`
|
|
27
|
+
- If `Durar_PROFILE` is set and not `"default"`, the default becomes
|
|
28
|
+
`~/.Durar/workspace-<profile>`.
|
|
29
|
+
- Override in `~/.Durar/Durar.json`:
|
|
30
|
+
|
|
31
|
+
```json5
|
|
32
|
+
{
|
|
33
|
+
agent: {
|
|
34
|
+
workspace: "~/.Durar/workspace",
|
|
35
|
+
},
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`Durar onboard`, `Durar configure`, or `Durar setup` will create the
|
|
40
|
+
workspace and seed the bootstrap files if they are missing.
|
|
41
|
+
Sandbox seed copies only accept regular in-workspace files; symlink/hardlink
|
|
42
|
+
aliases that resolve outside the source workspace are ignored.
|
|
43
|
+
|
|
44
|
+
If you already manage the workspace files yourself, you can disable bootstrap
|
|
45
|
+
file creation:
|
|
46
|
+
|
|
47
|
+
```json5
|
|
48
|
+
{ agent: { skipBootstrap: true } }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Extra workspace folders
|
|
52
|
+
|
|
53
|
+
Older installs may have created `~/Durar`. Keeping multiple workspace
|
|
54
|
+
directories around can cause confusing auth or state drift, because only one
|
|
55
|
+
workspace is active at a time.
|
|
56
|
+
|
|
57
|
+
**Recommendation:** keep a single active workspace. If you no longer use the
|
|
58
|
+
extra folders, archive or move them to Trash (for example `trash ~/Durar`).
|
|
59
|
+
If you intentionally keep multiple workspaces, make sure
|
|
60
|
+
`agents.defaults.workspace` points to the active one.
|
|
61
|
+
|
|
62
|
+
`Durar doctor` warns when it detects extra workspace directories.
|
|
63
|
+
|
|
64
|
+
## Workspace file map (what each file means)
|
|
65
|
+
|
|
66
|
+
These are the standard files Durar expects inside the workspace:
|
|
67
|
+
|
|
68
|
+
- `AGENTS.md`
|
|
69
|
+
- Operating instructions for the agent and how it should use memory.
|
|
70
|
+
- Loaded at the start of every session.
|
|
71
|
+
- Good place for rules, priorities, and "how to behave" details.
|
|
72
|
+
|
|
73
|
+
- `SOUL.md`
|
|
74
|
+
- Persona, tone, and boundaries.
|
|
75
|
+
- Loaded every session.
|
|
76
|
+
- Guide: [SOUL.md Personality Guide](/concepts/soul)
|
|
77
|
+
|
|
78
|
+
- `USER.md`
|
|
79
|
+
- Who the user is and how to address them.
|
|
80
|
+
- Loaded every session.
|
|
81
|
+
|
|
82
|
+
- `IDENTITY.md`
|
|
83
|
+
- The agent's name, vibe, and emoji.
|
|
84
|
+
- Created/updated during the bootstrap ritual.
|
|
85
|
+
|
|
86
|
+
- `TOOLS.md`
|
|
87
|
+
- Notes about your local tools and conventions.
|
|
88
|
+
- Does not control tool availability; it is only guidance.
|
|
89
|
+
|
|
90
|
+
- `HEARTBEAT.md`
|
|
91
|
+
- Optional tiny checklist for heartbeat runs.
|
|
92
|
+
- Keep it short to avoid token burn.
|
|
93
|
+
|
|
94
|
+
- `BOOT.md`
|
|
95
|
+
- Optional startup checklist executed on gateway restart when internal hooks are enabled.
|
|
96
|
+
- Keep it short; use the message tool for outbound sends.
|
|
97
|
+
|
|
98
|
+
- `BOOTSTRAP.md`
|
|
99
|
+
- One-time first-run ritual.
|
|
100
|
+
- Only created for a brand-new workspace.
|
|
101
|
+
- Delete it after the ritual is complete.
|
|
102
|
+
|
|
103
|
+
- `memory/YYYY-MM-DD.md`
|
|
104
|
+
- Daily memory log (one file per day).
|
|
105
|
+
- Recommended to read today + yesterday on session start.
|
|
106
|
+
|
|
107
|
+
- `MEMORY.md` (optional)
|
|
108
|
+
- Curated long-term memory.
|
|
109
|
+
- Only load in the main, private session (not shared/group contexts).
|
|
110
|
+
|
|
111
|
+
See [Memory](/concepts/memory) for the workflow and automatic memory flush.
|
|
112
|
+
|
|
113
|
+
- `skills/` (optional)
|
|
114
|
+
- Workspace-specific skills.
|
|
115
|
+
- Highest-precedence skill location for that workspace.
|
|
116
|
+
- Overrides project agent skills, personal agent skills, managed skills, bundled skills, and `skills.load.extraDirs` when names collide.
|
|
117
|
+
|
|
118
|
+
- `canvas/` (optional)
|
|
119
|
+
- Canvas UI files for node displays (for example `canvas/index.html`).
|
|
120
|
+
|
|
121
|
+
If any bootstrap file is missing, Durar injects a "missing file" marker into
|
|
122
|
+
the session and continues. Large bootstrap files are truncated when injected;
|
|
123
|
+
adjust limits with `agents.defaults.bootstrapMaxChars` (default: 20000) and
|
|
124
|
+
`agents.defaults.bootstrapTotalMaxChars` (default: 150000).
|
|
125
|
+
`Durar setup` can recreate missing defaults without overwriting existing
|
|
126
|
+
files.
|
|
127
|
+
|
|
128
|
+
## What is NOT in the workspace
|
|
129
|
+
|
|
130
|
+
These live under `~/.Durar/` and should NOT be committed to the workspace repo:
|
|
131
|
+
|
|
132
|
+
- `~/.Durar/Durar.json` (config)
|
|
133
|
+
- `~/.Durar/agents/<agentId>/agent/auth-profiles.json` (model auth profiles: OAuth + API keys)
|
|
134
|
+
- `~/.Durar/credentials/` (channel/provider state plus legacy OAuth import data)
|
|
135
|
+
- `~/.Durar/agents/<agentId>/sessions/` (session transcripts + metadata)
|
|
136
|
+
- `~/.Durar/skills/` (managed skills)
|
|
137
|
+
|
|
138
|
+
If you need to migrate sessions or config, copy them separately and keep them
|
|
139
|
+
out of version control.
|
|
140
|
+
|
|
141
|
+
## Git backup (recommended, private)
|
|
142
|
+
|
|
143
|
+
Treat the workspace as private memory. Put it in a **private** git repo so it is
|
|
144
|
+
backed up and recoverable.
|
|
145
|
+
|
|
146
|
+
Run these steps on the machine where the Gateway runs (that is where the
|
|
147
|
+
workspace lives).
|
|
148
|
+
|
|
149
|
+
### 1) Initialize the repo
|
|
150
|
+
|
|
151
|
+
If git is installed, brand-new workspaces are initialized automatically. If this
|
|
152
|
+
workspace is not already a repo, run:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
cd ~/.Durar/workspace
|
|
156
|
+
git init
|
|
157
|
+
git add AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md memory/
|
|
158
|
+
git commit -m "Add agent workspace"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 2) Add a private remote (beginner-friendly options)
|
|
162
|
+
|
|
163
|
+
Option A: GitHub web UI
|
|
164
|
+
|
|
165
|
+
1. Create a new **private** repository on GitHub.
|
|
166
|
+
2. Do not initialize with a README (avoids merge conflicts).
|
|
167
|
+
3. Copy the HTTPS remote URL.
|
|
168
|
+
4. Add the remote and push:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
git branch -M main
|
|
172
|
+
git remote add origin <https-url>
|
|
173
|
+
git push -u origin main
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Option B: GitHub CLI (`gh`)
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
gh auth login
|
|
180
|
+
gh repo create Durar-workspace --private --source . --remote origin --push
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Option C: GitLab web UI
|
|
184
|
+
|
|
185
|
+
1. Create a new **private** repository on GitLab.
|
|
186
|
+
2. Do not initialize with a README (avoids merge conflicts).
|
|
187
|
+
3. Copy the HTTPS remote URL.
|
|
188
|
+
4. Add the remote and push:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
git branch -M main
|
|
192
|
+
git remote add origin <https-url>
|
|
193
|
+
git push -u origin main
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 3) Ongoing updates
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
git status
|
|
200
|
+
git add .
|
|
201
|
+
git commit -m "Update memory"
|
|
202
|
+
git push
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Do not commit secrets
|
|
206
|
+
|
|
207
|
+
Even in a private repo, avoid storing secrets in the workspace:
|
|
208
|
+
|
|
209
|
+
- API keys, OAuth tokens, passwords, or private credentials.
|
|
210
|
+
- Anything under `~/.Durar/`.
|
|
211
|
+
- Raw dumps of chats or sensitive attachments.
|
|
212
|
+
|
|
213
|
+
If you must store sensitive references, use placeholders and keep the real
|
|
214
|
+
secret elsewhere (password manager, environment variables, or `~/.Durar/`).
|
|
215
|
+
|
|
216
|
+
Suggested `.gitignore` starter:
|
|
217
|
+
|
|
218
|
+
```gitignore
|
|
219
|
+
.DS_Store
|
|
220
|
+
.env
|
|
221
|
+
**/*.key
|
|
222
|
+
**/*.pem
|
|
223
|
+
**/secrets*
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Moving the workspace to a new machine
|
|
227
|
+
|
|
228
|
+
1. Clone the repo to the desired path (default `~/.Durar/workspace`).
|
|
229
|
+
2. Set `agents.defaults.workspace` to that path in `~/.Durar/Durar.json`.
|
|
230
|
+
3. Run `Durar setup --workspace <path>` to seed any missing files.
|
|
231
|
+
4. If you need sessions, copy `~/.Durar/agents/<agentId>/sessions/` from the
|
|
232
|
+
old machine separately.
|
|
233
|
+
|
|
234
|
+
## Advanced notes
|
|
235
|
+
|
|
236
|
+
- Multi-agent routing can use different workspaces per agent. See
|
|
237
|
+
[Channel routing](/channels/channel-routing) for routing configuration.
|
|
238
|
+
- If `agents.defaults.sandbox` is enabled, non-main sessions can use per-session sandbox
|
|
239
|
+
workspaces under `agents.defaults.sandbox.workspaceRoot`.
|
|
240
|
+
|
|
241
|
+
## Related
|
|
242
|
+
|
|
243
|
+
- [Standing Orders](/automation/standing-orders) — persistent instructions in workspace files
|
|
244
|
+
- [Heartbeat](/gateway/heartbeat) — HEARTBEAT.md workspace file
|
|
245
|
+
- [Session](/concepts/session) — session storage paths
|
|
246
|
+
- [Sandboxing](/gateway/sandboxing) — workspace access in sandboxed environments
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Agent runtime, workspace contract, and session bootstrap"
|
|
3
|
+
read_when:
|
|
4
|
+
- Changing agent runtime, workspace bootstrap, or session behavior
|
|
5
|
+
title: "Agent Runtime"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Agent Runtime
|
|
9
|
+
|
|
10
|
+
Durar runs a single embedded agent runtime.
|
|
11
|
+
|
|
12
|
+
## Workspace (required)
|
|
13
|
+
|
|
14
|
+
Durar uses a single agent workspace directory (`agents.defaults.workspace`) as the agent’s **only** working directory (`cwd`) for tools and context.
|
|
15
|
+
|
|
16
|
+
Recommended: use `Durar setup` to create `~/.Durar/Durar.json` if missing and initialize the workspace files.
|
|
17
|
+
|
|
18
|
+
Full workspace layout + backup guide: [Agent workspace](/concepts/agent-workspace)
|
|
19
|
+
|
|
20
|
+
If `agents.defaults.sandbox` is enabled, non-main sessions can override this with
|
|
21
|
+
per-session workspaces under `agents.defaults.sandbox.workspaceRoot` (see
|
|
22
|
+
[Gateway configuration](/gateway/configuration)).
|
|
23
|
+
|
|
24
|
+
## Bootstrap files (injected)
|
|
25
|
+
|
|
26
|
+
Inside `agents.defaults.workspace`, Durar expects these user-editable files:
|
|
27
|
+
|
|
28
|
+
- `AGENTS.md` — operating instructions + “memory”
|
|
29
|
+
- `SOUL.md` — persona, boundaries, tone
|
|
30
|
+
- `TOOLS.md` — user-maintained tool notes (e.g. `imsg`, `sag`, conventions)
|
|
31
|
+
- `BOOTSTRAP.md` — one-time first-run ritual (deleted after completion)
|
|
32
|
+
- `IDENTITY.md` — agent name/vibe/emoji
|
|
33
|
+
- `USER.md` — user profile + preferred address
|
|
34
|
+
|
|
35
|
+
On the first turn of a new session, Durar injects the contents of these files directly into the agent context.
|
|
36
|
+
|
|
37
|
+
Blank files are skipped. Large files are trimmed and truncated with a marker so prompts stay lean (read the file for full content).
|
|
38
|
+
|
|
39
|
+
If a file is missing, Durar injects a single “missing file” marker line (and `Durar setup` will create a safe default template).
|
|
40
|
+
|
|
41
|
+
`BOOTSTRAP.md` is only created for a **brand new workspace** (no other bootstrap files present). If you delete it after completing the ritual, it should not be recreated on later restarts.
|
|
42
|
+
|
|
43
|
+
To disable bootstrap file creation entirely (for pre-seeded workspaces), set:
|
|
44
|
+
|
|
45
|
+
```json5
|
|
46
|
+
{ agent: { skipBootstrap: true } }
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Built-in tools
|
|
50
|
+
|
|
51
|
+
Core tools (read/exec/edit/write and related system tools) are always available,
|
|
52
|
+
subject to tool policy. `apply_patch` is optional and gated by
|
|
53
|
+
`tools.exec.applyPatch`. `TOOLS.md` does **not** control which tools exist; it’s
|
|
54
|
+
guidance for how _you_ want them used.
|
|
55
|
+
|
|
56
|
+
## Skills
|
|
57
|
+
|
|
58
|
+
Durar loads skills from these locations (highest precedence first):
|
|
59
|
+
|
|
60
|
+
- Workspace: `<workspace>/skills`
|
|
61
|
+
- Project agent skills: `<workspace>/.agents/skills`
|
|
62
|
+
- Personal agent skills: `~/.agents/skills`
|
|
63
|
+
- Managed/local: `~/.Durar/skills`
|
|
64
|
+
- Bundled (shipped with the install)
|
|
65
|
+
- Extra skill folders: `skills.load.extraDirs`
|
|
66
|
+
|
|
67
|
+
Skills can be gated by config/env (see `skills` in [Gateway configuration](/gateway/configuration)).
|
|
68
|
+
|
|
69
|
+
## Runtime boundaries
|
|
70
|
+
|
|
71
|
+
The embedded agent runtime is built on the Pi agent core (models, tools, and
|
|
72
|
+
prompt pipeline). Session management, discovery, tool wiring, and channel
|
|
73
|
+
delivery are Durar-owned layers on top of that core.
|
|
74
|
+
|
|
75
|
+
## Sessions
|
|
76
|
+
|
|
77
|
+
Session transcripts are stored as JSONL at:
|
|
78
|
+
|
|
79
|
+
- `~/.Durar/agents/<agentId>/sessions/<SessionId>.jsonl`
|
|
80
|
+
|
|
81
|
+
The session ID is stable and chosen by Durar.
|
|
82
|
+
Legacy session folders from other tools are not read.
|
|
83
|
+
|
|
84
|
+
## Steering while streaming
|
|
85
|
+
|
|
86
|
+
When queue mode is `steer`, inbound messages are injected into the current run.
|
|
87
|
+
Queued steering is delivered **after the current assistant turn finishes
|
|
88
|
+
executing its tool calls**, before the next LLM call. Steering no longer skips
|
|
89
|
+
remaining tool calls from the current assistant message; it injects the queued
|
|
90
|
+
message at the next model boundary instead.
|
|
91
|
+
|
|
92
|
+
When queue mode is `followup` or `collect`, inbound messages are held until the
|
|
93
|
+
current turn ends, then a new agent turn starts with the queued payloads. See
|
|
94
|
+
[Queue](/concepts/queue) for mode + debounce/cap behavior.
|
|
95
|
+
|
|
96
|
+
Block streaming sends completed assistant blocks as soon as they finish; it is
|
|
97
|
+
**off by default** (`agents.defaults.blockStreamingDefault: "off"`).
|
|
98
|
+
Tune the boundary via `agents.defaults.blockStreamingBreak` (`text_end` vs `message_end`; defaults to text_end).
|
|
99
|
+
Control soft block chunking with `agents.defaults.blockStreamingChunk` (defaults to
|
|
100
|
+
800–1200 chars; prefers paragraph breaks, then newlines; sentences last).
|
|
101
|
+
Coalesce streamed chunks with `agents.defaults.blockStreamingCoalesce` to reduce
|
|
102
|
+
single-line spam (idle-based merging before send). Non-Telegram channels require
|
|
103
|
+
explicit `*.blockStreaming: true` to enable block replies.
|
|
104
|
+
Verbose tool summaries are emitted at tool start (no debounce); Control UI
|
|
105
|
+
streams tool output via agent events when available.
|
|
106
|
+
More details: [Streaming + chunking](/concepts/streaming).
|
|
107
|
+
|
|
108
|
+
## Model refs
|
|
109
|
+
|
|
110
|
+
Model refs in config (for example `agents.defaults.model` and `agents.defaults.models`) are parsed by splitting on the **first** `/`.
|
|
111
|
+
|
|
112
|
+
- Use `provider/model` when configuring models.
|
|
113
|
+
- If the model ID itself contains `/` (OpenRouter-style), include the provider prefix (example: `openrouter/moonshotai/kimi-k2`).
|
|
114
|
+
- If you omit the provider, Durar tries an alias first, then a unique
|
|
115
|
+
configured-provider match for that exact model id, and only then falls back
|
|
116
|
+
to the configured default provider. If that provider no longer exposes the
|
|
117
|
+
configured default model, Durar falls back to the first configured
|
|
118
|
+
provider/model instead of surfacing a stale removed-provider default.
|
|
119
|
+
|
|
120
|
+
## Configuration (minimal)
|
|
121
|
+
|
|
122
|
+
At minimum, set:
|
|
123
|
+
|
|
124
|
+
- `agents.defaults.workspace`
|
|
125
|
+
- `channels.whatsapp.allowFrom` (strongly recommended)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
_Next: [Group Chats](/channels/group-messages)_ 🦞
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "WebSocket gateway architecture, components, and client flows"
|
|
3
|
+
read_when:
|
|
4
|
+
- Working on gateway protocol, clients, or transports
|
|
5
|
+
title: "Gateway Architecture"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Gateway architecture
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
- A single long‑lived **Gateway** owns all messaging surfaces (WhatsApp via
|
|
13
|
+
Baileys, Telegram via grammY, Slack, Discord, Signal, iMessage, WebChat).
|
|
14
|
+
- Control-plane clients (macOS app, CLI, web UI, automations) connect to the
|
|
15
|
+
Gateway over **WebSocket** on the configured bind host (default
|
|
16
|
+
`127.0.0.1:18789`).
|
|
17
|
+
- **Nodes** (macOS/iOS/Android/headless) also connect over **WebSocket**, but
|
|
18
|
+
declare `role: node` with explicit caps/commands.
|
|
19
|
+
- One Gateway per host; it is the only place that opens a WhatsApp session.
|
|
20
|
+
- The **canvas host** is served by the Gateway HTTP server under:
|
|
21
|
+
- `/__Durar__/canvas/` (agent-editable HTML/CSS/JS)
|
|
22
|
+
- `/__Durar__/a2ui/` (A2UI host)
|
|
23
|
+
It uses the same port as the Gateway (default `18789`).
|
|
24
|
+
|
|
25
|
+
## Components and flows
|
|
26
|
+
|
|
27
|
+
### Gateway (daemon)
|
|
28
|
+
|
|
29
|
+
- Maintains provider connections.
|
|
30
|
+
- Exposes a typed WS API (requests, responses, server‑push events).
|
|
31
|
+
- Validates inbound frames against JSON Schema.
|
|
32
|
+
- Emits events like `agent`, `chat`, `presence`, `health`, `heartbeat`, `cron`.
|
|
33
|
+
|
|
34
|
+
### Clients (mac app / CLI / web admin)
|
|
35
|
+
|
|
36
|
+
- One WS connection per client.
|
|
37
|
+
- Send requests (`health`, `status`, `send`, `agent`, `system-presence`).
|
|
38
|
+
- Subscribe to events (`tick`, `agent`, `presence`, `shutdown`).
|
|
39
|
+
|
|
40
|
+
### Nodes (macOS / iOS / Android / headless)
|
|
41
|
+
|
|
42
|
+
- Connect to the **same WS server** with `role: node`.
|
|
43
|
+
- Provide a device identity in `connect`; pairing is **device‑based** (role `node`) and
|
|
44
|
+
approval lives in the device pairing store.
|
|
45
|
+
- Expose commands like `canvas.*`, `camera.*`, `screen.record`, `location.get`.
|
|
46
|
+
|
|
47
|
+
Protocol details:
|
|
48
|
+
|
|
49
|
+
- [Gateway protocol](/gateway/protocol)
|
|
50
|
+
|
|
51
|
+
### WebChat
|
|
52
|
+
|
|
53
|
+
- Static UI that uses the Gateway WS API for chat history and sends.
|
|
54
|
+
- In remote setups, connects through the same SSH/Tailscale tunnel as other
|
|
55
|
+
clients.
|
|
56
|
+
|
|
57
|
+
## Connection lifecycle (single client)
|
|
58
|
+
|
|
59
|
+
```mermaid
|
|
60
|
+
sequenceDiagram
|
|
61
|
+
participant Client
|
|
62
|
+
participant Gateway
|
|
63
|
+
|
|
64
|
+
Client->>Gateway: req:connect
|
|
65
|
+
Gateway-->>Client: res (ok)
|
|
66
|
+
Note right of Gateway: or res error + close
|
|
67
|
+
Note left of Client: payload=hello-ok<br>snapshot: presence + health
|
|
68
|
+
|
|
69
|
+
Gateway-->>Client: event:presence
|
|
70
|
+
Gateway-->>Client: event:tick
|
|
71
|
+
|
|
72
|
+
Client->>Gateway: req:agent
|
|
73
|
+
Gateway-->>Client: res:agent<br>ack {runId, status:"accepted"}
|
|
74
|
+
Gateway-->>Client: event:agent<br>(streaming)
|
|
75
|
+
Gateway-->>Client: res:agent<br>final {runId, status, summary}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Wire protocol (summary)
|
|
79
|
+
|
|
80
|
+
- Transport: WebSocket, text frames with JSON payloads.
|
|
81
|
+
- First frame **must** be `connect`.
|
|
82
|
+
- After handshake:
|
|
83
|
+
- Requests: `{type:"req", id, method, params}` → `{type:"res", id, ok, payload|error}`
|
|
84
|
+
- Events: `{type:"event", event, payload, seq?, stateVersion?}`
|
|
85
|
+
- `hello-ok.features.methods` / `events` are discovery metadata, not a
|
|
86
|
+
generated dump of every callable helper route.
|
|
87
|
+
- Shared-secret auth uses `connect.params.auth.token` or
|
|
88
|
+
`connect.params.auth.password`, depending on the configured gateway auth mode.
|
|
89
|
+
- Identity-bearing modes such as Tailscale Serve
|
|
90
|
+
(`gateway.auth.allowTailscale: true`) or non-loopback
|
|
91
|
+
`gateway.auth.mode: "trusted-proxy"` satisfy auth from request headers
|
|
92
|
+
instead of `connect.params.auth.*`.
|
|
93
|
+
- Private-ingress `gateway.auth.mode: "none"` disables shared-secret auth
|
|
94
|
+
entirely; keep that mode off public/untrusted ingress.
|
|
95
|
+
- Idempotency keys are required for side‑effecting methods (`send`, `agent`) to
|
|
96
|
+
safely retry; the server keeps a short‑lived dedupe cache.
|
|
97
|
+
- Nodes must include `role: "node"` plus caps/commands/permissions in `connect`.
|
|
98
|
+
|
|
99
|
+
## Pairing + local trust
|
|
100
|
+
|
|
101
|
+
- All WS clients (operators + nodes) include a **device identity** on `connect`.
|
|
102
|
+
- New device IDs require pairing approval; the Gateway issues a **device token**
|
|
103
|
+
for subsequent connects.
|
|
104
|
+
- Direct local loopback connects can be auto-approved to keep same-host UX
|
|
105
|
+
smooth.
|
|
106
|
+
- Durar also has a narrow backend/container-local self-connect path for
|
|
107
|
+
trusted shared-secret helper flows.
|
|
108
|
+
- Tailnet and LAN connects, including same-host tailnet binds, still require
|
|
109
|
+
explicit pairing approval.
|
|
110
|
+
- All connects must sign the `connect.challenge` nonce.
|
|
111
|
+
- Signature payload `v3` also binds `platform` + `deviceFamily`; the gateway
|
|
112
|
+
pins paired metadata on reconnect and requires repair pairing for metadata
|
|
113
|
+
changes.
|
|
114
|
+
- **Non‑local** connects still require explicit approval.
|
|
115
|
+
- Gateway auth (`gateway.auth.*`) still applies to **all** connections, local or
|
|
116
|
+
remote.
|
|
117
|
+
|
|
118
|
+
Details: [Gateway protocol](/gateway/protocol), [Pairing](/channels/pairing),
|
|
119
|
+
[Security](/gateway/security).
|
|
120
|
+
|
|
121
|
+
## Protocol typing and codegen
|
|
122
|
+
|
|
123
|
+
- TypeBox schemas define the protocol.
|
|
124
|
+
- JSON Schema is generated from those schemas.
|
|
125
|
+
- Swift models are generated from the JSON Schema.
|
|
126
|
+
|
|
127
|
+
## Remote access
|
|
128
|
+
|
|
129
|
+
- Preferred: Tailscale or VPN.
|
|
130
|
+
- Alternative: SSH tunnel
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
ssh -N -L 18789:127.0.0.1:18789 user@host
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
- The same handshake + auth token apply over the tunnel.
|
|
137
|
+
- TLS + optional pinning can be enabled for WS in remote setups.
|
|
138
|
+
|
|
139
|
+
## Operations snapshot
|
|
140
|
+
|
|
141
|
+
- Start: `Durar gateway` (foreground, logs to stdout).
|
|
142
|
+
- Health: `health` over WS (also included in `hello-ok`).
|
|
143
|
+
- Supervision: launchd/systemd for auto‑restart.
|
|
144
|
+
|
|
145
|
+
## Invariants
|
|
146
|
+
|
|
147
|
+
- Exactly one Gateway controls a single Baileys session per host.
|
|
148
|
+
- Handshake is mandatory; any non‑JSON or non‑connect first frame is a hard close.
|
|
149
|
+
- Events are not replayed; clients must refresh on gaps.
|
|
150
|
+
|
|
151
|
+
## Related
|
|
152
|
+
|
|
153
|
+
- [Agent Loop](/concepts/agent-loop) — detailed agent execution cycle
|
|
154
|
+
- [Gateway Protocol](/gateway/protocol) — WebSocket protocol contract
|
|
155
|
+
- [Queue](/concepts/queue) — command queue and concurrency
|
|
156
|
+
- [Security](/gateway/security) — trust model and hardening
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "How Durar summarizes long conversations to stay within model limits"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want to understand auto-compaction and /compact
|
|
5
|
+
- You are debugging long sessions hitting context limits
|
|
6
|
+
title: "Compaction"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Compaction
|
|
10
|
+
|
|
11
|
+
Every model has a context window -- the maximum number of tokens it can process.
|
|
12
|
+
When a conversation approaches that limit, Durar **compacts** older messages
|
|
13
|
+
into a summary so the chat can continue.
|
|
14
|
+
|
|
15
|
+
## How it works
|
|
16
|
+
|
|
17
|
+
1. Older conversation turns are summarized into a compact entry.
|
|
18
|
+
2. The summary is saved in the session transcript.
|
|
19
|
+
3. Recent messages are kept intact.
|
|
20
|
+
|
|
21
|
+
When Durar splits history into compaction chunks, it keeps assistant tool
|
|
22
|
+
calls paired with their matching `toolResult` entries. If a split point lands
|
|
23
|
+
inside a tool block, Durar moves the boundary so the pair stays together and
|
|
24
|
+
the current unsummarized tail is preserved.
|
|
25
|
+
|
|
26
|
+
The full conversation history stays on disk. Compaction only changes what the
|
|
27
|
+
model sees on the next turn.
|
|
28
|
+
|
|
29
|
+
## Auto-compaction
|
|
30
|
+
|
|
31
|
+
Auto-compaction is on by default. It runs when the session nears the context
|
|
32
|
+
limit, or when the model returns a context-overflow error (in which case
|
|
33
|
+
Durar compacts and retries). Typical overflow signatures include
|
|
34
|
+
`request_too_large`, `context length exceeded`, `input exceeds the maximum
|
|
35
|
+
number of tokens`, `input token count exceeds the maximum number of input
|
|
36
|
+
tokens`, `input is too long for the model`, and `ollama error: context length
|
|
37
|
+
exceeded`.
|
|
38
|
+
|
|
39
|
+
<Info>
|
|
40
|
+
Before compacting, Durar automatically reminds the agent to save important
|
|
41
|
+
notes to [memory](/concepts/memory) files. This prevents context loss.
|
|
42
|
+
</Info>
|
|
43
|
+
|
|
44
|
+
## Manual compaction
|
|
45
|
+
|
|
46
|
+
Type `/compact` in any chat to force a compaction. Add instructions to guide
|
|
47
|
+
the summary:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
/compact Focus on the API design decisions
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Using a different model
|
|
54
|
+
|
|
55
|
+
By default, compaction uses your agent's primary model. You can use a more
|
|
56
|
+
capable model for better summaries:
|
|
57
|
+
|
|
58
|
+
```json5
|
|
59
|
+
{
|
|
60
|
+
agents: {
|
|
61
|
+
defaults: {
|
|
62
|
+
compaction: {
|
|
63
|
+
model: "openrouter/anthropic/claude-sonnet-4-6",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Compaction start notice
|
|
71
|
+
|
|
72
|
+
By default, compaction runs silently. To show a brief notice when compaction
|
|
73
|
+
starts, enable `notifyUser`:
|
|
74
|
+
|
|
75
|
+
```json5
|
|
76
|
+
{
|
|
77
|
+
agents: {
|
|
78
|
+
defaults: {
|
|
79
|
+
compaction: {
|
|
80
|
+
notifyUser: true,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
When enabled, the user sees a short message (for example, "Compacting
|
|
88
|
+
context...") at the start of each compaction run.
|
|
89
|
+
|
|
90
|
+
## Compaction vs pruning
|
|
91
|
+
|
|
92
|
+
| | Compaction | Pruning |
|
|
93
|
+
| ---------------- | ----------------------------- | -------------------------------- |
|
|
94
|
+
| **What it does** | Summarizes older conversation | Trims old tool results |
|
|
95
|
+
| **Saved?** | Yes (in session transcript) | No (in-memory only, per request) |
|
|
96
|
+
| **Scope** | Entire conversation | Tool results only |
|
|
97
|
+
|
|
98
|
+
[Session pruning](/concepts/session-pruning) is a lighter-weight complement that
|
|
99
|
+
trims tool output without summarizing.
|
|
100
|
+
|
|
101
|
+
## Troubleshooting
|
|
102
|
+
|
|
103
|
+
**Compacting too often?** The model's context window may be small, or tool
|
|
104
|
+
outputs may be large. Try enabling
|
|
105
|
+
[session pruning](/concepts/session-pruning).
|
|
106
|
+
|
|
107
|
+
**Context feels stale after compaction?** Use `/compact Focus on <topic>` to
|
|
108
|
+
guide the summary, or enable the [memory flush](/concepts/memory) so notes
|
|
109
|
+
survive.
|
|
110
|
+
|
|
111
|
+
**Need a clean slate?** `/new` starts a fresh session without compacting.
|
|
112
|
+
|
|
113
|
+
For advanced configuration (reserve tokens, identifier preservation, custom
|
|
114
|
+
context engines, OpenAI server-side compaction), see the
|
|
115
|
+
[Session Management Deep Dive](/reference/session-management-compaction).
|
|
116
|
+
|
|
117
|
+
## Related
|
|
118
|
+
|
|
119
|
+
- [Session](/concepts/session) — session management and lifecycle
|
|
120
|
+
- [Session Pruning](/concepts/session-pruning) — trimming tool results
|
|
121
|
+
- [Context](/concepts/context) — how context is built for agent turns
|
|
122
|
+
- [Hooks](/automation/hooks) — compaction lifecycle hooks (before_compaction, after_compaction)
|