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
package/docs/logging.md
ADDED
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Logging overview: file logs, console output, CLI tailing, and the Control UI"
|
|
3
|
+
read_when:
|
|
4
|
+
- You need a beginner-friendly overview of logging
|
|
5
|
+
- You want to configure log levels or formats
|
|
6
|
+
- You are troubleshooting and need to find logs quickly
|
|
7
|
+
title: "Logging Overview"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Logging
|
|
11
|
+
|
|
12
|
+
Durar has two main log surfaces:
|
|
13
|
+
|
|
14
|
+
- **File logs** (JSON lines) written by the Gateway.
|
|
15
|
+
- **Console output** shown in terminals and the Gateway Debug UI.
|
|
16
|
+
|
|
17
|
+
The Control UI **Logs** tab tails the gateway file log. This page explains where
|
|
18
|
+
logs live, how to read them, and how to configure log levels and formats.
|
|
19
|
+
|
|
20
|
+
## Where logs live
|
|
21
|
+
|
|
22
|
+
By default, the Gateway writes a rolling log file under:
|
|
23
|
+
|
|
24
|
+
`/tmp/Durar/Durar-YYYY-MM-DD.log`
|
|
25
|
+
|
|
26
|
+
The date uses the gateway host's local timezone.
|
|
27
|
+
|
|
28
|
+
You can override this in `~/.Durar/Durar.json`:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"logging": {
|
|
33
|
+
"file": "/path/to/Durar.log"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## How to read logs
|
|
39
|
+
|
|
40
|
+
### CLI: live tail (recommended)
|
|
41
|
+
|
|
42
|
+
Use the CLI to tail the gateway log file via RPC:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
Durar logs --follow
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Useful current options:
|
|
49
|
+
|
|
50
|
+
- `--local-time`: render timestamps in your local timezone
|
|
51
|
+
- `--url <url>` / `--token <token>` / `--timeout <ms>`: standard Gateway RPC flags
|
|
52
|
+
- `--expect-final`: agent-backed RPC final-response wait flag (accepted here via the shared client layer)
|
|
53
|
+
|
|
54
|
+
Output modes:
|
|
55
|
+
|
|
56
|
+
- **TTY sessions**: pretty, colorized, structured log lines.
|
|
57
|
+
- **Non-TTY sessions**: plain text.
|
|
58
|
+
- `--json`: line-delimited JSON (one log event per line).
|
|
59
|
+
- `--plain`: force plain text in TTY sessions.
|
|
60
|
+
- `--no-color`: disable ANSI colors.
|
|
61
|
+
|
|
62
|
+
When you pass an explicit `--url`, the CLI does not auto-apply config or
|
|
63
|
+
environment credentials; include `--token` yourself if the target Gateway
|
|
64
|
+
requires auth.
|
|
65
|
+
|
|
66
|
+
In JSON mode, the CLI emits `type`-tagged objects:
|
|
67
|
+
|
|
68
|
+
- `meta`: stream metadata (file, cursor, size)
|
|
69
|
+
- `log`: parsed log entry
|
|
70
|
+
- `notice`: truncation / rotation hints
|
|
71
|
+
- `raw`: unparsed log line
|
|
72
|
+
|
|
73
|
+
If the local loopback Gateway asks for pairing, `Durar logs` falls back to
|
|
74
|
+
the configured local log file automatically. Explicit `--url` targets do not
|
|
75
|
+
use this fallback.
|
|
76
|
+
|
|
77
|
+
If the Gateway is unreachable, the CLI prints a short hint to run:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
Durar doctor
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Control UI (web)
|
|
84
|
+
|
|
85
|
+
The Control UI’s **Logs** tab tails the same file using `logs.tail`.
|
|
86
|
+
See [/web/control-ui](/web/control-ui) for how to open it.
|
|
87
|
+
|
|
88
|
+
### Channel-only logs
|
|
89
|
+
|
|
90
|
+
To filter channel activity (WhatsApp/Telegram/etc), use:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
Durar channels logs --channel whatsapp
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Log formats
|
|
97
|
+
|
|
98
|
+
### File logs (JSONL)
|
|
99
|
+
|
|
100
|
+
Each line in the log file is a JSON object. The CLI and Control UI parse these
|
|
101
|
+
entries to render structured output (time, level, subsystem, message).
|
|
102
|
+
|
|
103
|
+
### Console output
|
|
104
|
+
|
|
105
|
+
Console logs are **TTY-aware** and formatted for readability:
|
|
106
|
+
|
|
107
|
+
- Subsystem prefixes (e.g. `gateway/channels/whatsapp`)
|
|
108
|
+
- Level coloring (info/warn/error)
|
|
109
|
+
- Optional compact or JSON mode
|
|
110
|
+
|
|
111
|
+
Console formatting is controlled by `logging.consoleStyle`.
|
|
112
|
+
|
|
113
|
+
### Gateway WebSocket logs
|
|
114
|
+
|
|
115
|
+
`Durar gateway` also has WebSocket protocol logging for RPC traffic:
|
|
116
|
+
|
|
117
|
+
- normal mode: only interesting results (errors, parse errors, slow calls)
|
|
118
|
+
- `--verbose`: all request/response traffic
|
|
119
|
+
- `--ws-log auto|compact|full`: pick the verbose rendering style
|
|
120
|
+
- `--compact`: alias for `--ws-log compact`
|
|
121
|
+
|
|
122
|
+
Examples:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
Durar gateway
|
|
126
|
+
Durar gateway --verbose --ws-log compact
|
|
127
|
+
Durar gateway --verbose --ws-log full
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Configuring logging
|
|
131
|
+
|
|
132
|
+
All logging configuration lives under `logging` in `~/.Durar/Durar.json`.
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"logging": {
|
|
137
|
+
"level": "info",
|
|
138
|
+
"file": "/tmp/Durar/Durar-YYYY-MM-DD.log",
|
|
139
|
+
"consoleLevel": "info",
|
|
140
|
+
"consoleStyle": "pretty",
|
|
141
|
+
"redactSensitive": "tools",
|
|
142
|
+
"redactPatterns": ["sk-.*"]
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Log levels
|
|
148
|
+
|
|
149
|
+
- `logging.level`: **file logs** (JSONL) level.
|
|
150
|
+
- `logging.consoleLevel`: **console** verbosity level.
|
|
151
|
+
|
|
152
|
+
You can override both via the **`Durar_LOG_LEVEL`** environment variable (e.g. `Durar_LOG_LEVEL=debug`). The env var takes precedence over the config file, so you can raise verbosity for a single run without editing `Durar.json`. You can also pass the global CLI option **`--log-level <level>`** (for example, `Durar --log-level debug gateway run`), which overrides the environment variable for that command.
|
|
153
|
+
|
|
154
|
+
`--verbose` only affects console output and WS log verbosity; it does not change
|
|
155
|
+
file log levels.
|
|
156
|
+
|
|
157
|
+
### Console styles
|
|
158
|
+
|
|
159
|
+
`logging.consoleStyle`:
|
|
160
|
+
|
|
161
|
+
- `pretty`: human-friendly, colored, with timestamps.
|
|
162
|
+
- `compact`: tighter output (best for long sessions).
|
|
163
|
+
- `json`: JSON per line (for log processors).
|
|
164
|
+
|
|
165
|
+
### Redaction
|
|
166
|
+
|
|
167
|
+
Tool summaries can redact sensitive tokens before they hit the console:
|
|
168
|
+
|
|
169
|
+
- `logging.redactSensitive`: `off` | `tools` (default: `tools`)
|
|
170
|
+
- `logging.redactPatterns`: list of regex strings to override the default set
|
|
171
|
+
|
|
172
|
+
Redaction affects **console output only** and does not alter file logs.
|
|
173
|
+
|
|
174
|
+
## Diagnostics + OpenTelemetry
|
|
175
|
+
|
|
176
|
+
Diagnostics are structured, machine-readable events for model runs **and**
|
|
177
|
+
message-flow telemetry (webhooks, queueing, session state). They do **not**
|
|
178
|
+
replace logs; they exist to feed metrics, traces, and other exporters.
|
|
179
|
+
|
|
180
|
+
Diagnostics events are emitted in-process, but exporters only attach when
|
|
181
|
+
diagnostics + the exporter plugin are enabled.
|
|
182
|
+
|
|
183
|
+
### OpenTelemetry vs OTLP
|
|
184
|
+
|
|
185
|
+
- **OpenTelemetry (OTel)**: the data model + SDKs for traces, metrics, and logs.
|
|
186
|
+
- **OTLP**: the wire protocol used to export OTel data to a collector/backend.
|
|
187
|
+
- Durar exports via **OTLP/HTTP (protobuf)** today.
|
|
188
|
+
|
|
189
|
+
### Signals exported
|
|
190
|
+
|
|
191
|
+
- **Metrics**: counters + histograms (token usage, message flow, queueing).
|
|
192
|
+
- **Traces**: spans for model usage + webhook/message processing.
|
|
193
|
+
- **Logs**: exported over OTLP when `diagnostics.otel.logs` is enabled. Log
|
|
194
|
+
volume can be high; keep `logging.level` and exporter filters in mind.
|
|
195
|
+
|
|
196
|
+
### Diagnostic event catalog
|
|
197
|
+
|
|
198
|
+
Model usage:
|
|
199
|
+
|
|
200
|
+
- `model.usage`: tokens, cost, duration, context, provider/model/channel, session ids.
|
|
201
|
+
|
|
202
|
+
Message flow:
|
|
203
|
+
|
|
204
|
+
- `webhook.received`: webhook ingress per channel.
|
|
205
|
+
- `webhook.processed`: webhook handled + duration.
|
|
206
|
+
- `webhook.error`: webhook handler errors.
|
|
207
|
+
- `message.queued`: message enqueued for processing.
|
|
208
|
+
- `message.processed`: outcome + duration + optional error.
|
|
209
|
+
|
|
210
|
+
Queue + session:
|
|
211
|
+
|
|
212
|
+
- `queue.lane.enqueue`: command queue lane enqueue + depth.
|
|
213
|
+
- `queue.lane.dequeue`: command queue lane dequeue + wait time.
|
|
214
|
+
- `session.state`: session state transition + reason.
|
|
215
|
+
- `session.stuck`: session stuck warning + age.
|
|
216
|
+
- `run.attempt`: run retry/attempt metadata.
|
|
217
|
+
- `diagnostic.heartbeat`: aggregate counters (webhooks/queue/session).
|
|
218
|
+
|
|
219
|
+
### Enable diagnostics (no exporter)
|
|
220
|
+
|
|
221
|
+
Use this if you want diagnostics events available to plugins or custom sinks:
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"diagnostics": {
|
|
226
|
+
"enabled": true
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Diagnostics flags (targeted logs)
|
|
232
|
+
|
|
233
|
+
Use flags to turn on extra, targeted debug logs without raising `logging.level`.
|
|
234
|
+
Flags are case-insensitive and support wildcards (e.g. `telegram.*` or `*`).
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"diagnostics": {
|
|
239
|
+
"flags": ["telegram.http"]
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Env override (one-off):
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
Durar_DIAGNOSTICS=telegram.http,telegram.payload
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Notes:
|
|
251
|
+
|
|
252
|
+
- Flag logs go to the standard log file (same as `logging.file`).
|
|
253
|
+
- Output is still redacted according to `logging.redactSensitive`.
|
|
254
|
+
- Full guide: [/diagnostics/flags](/diagnostics/flags).
|
|
255
|
+
|
|
256
|
+
### Export to OpenTelemetry
|
|
257
|
+
|
|
258
|
+
Diagnostics can be exported via the `diagnostics-otel` plugin (OTLP/HTTP). This
|
|
259
|
+
works with any OpenTelemetry collector/backend that accepts OTLP/HTTP.
|
|
260
|
+
|
|
261
|
+
```json
|
|
262
|
+
{
|
|
263
|
+
"plugins": {
|
|
264
|
+
"allow": ["diagnostics-otel"],
|
|
265
|
+
"entries": {
|
|
266
|
+
"diagnostics-otel": {
|
|
267
|
+
"enabled": true
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
"diagnostics": {
|
|
272
|
+
"enabled": true,
|
|
273
|
+
"otel": {
|
|
274
|
+
"enabled": true,
|
|
275
|
+
"endpoint": "http://otel-collector:4318",
|
|
276
|
+
"protocol": "http/protobuf",
|
|
277
|
+
"serviceName": "Durar-gateway",
|
|
278
|
+
"traces": true,
|
|
279
|
+
"metrics": true,
|
|
280
|
+
"logs": true,
|
|
281
|
+
"sampleRate": 0.2,
|
|
282
|
+
"flushIntervalMs": 60000
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Notes:
|
|
289
|
+
|
|
290
|
+
- You can also enable the plugin with `Durar plugins enable diagnostics-otel`.
|
|
291
|
+
- `protocol` currently supports `http/protobuf` only. `grpc` is ignored.
|
|
292
|
+
- Metrics include token usage, cost, context size, run duration, and message-flow
|
|
293
|
+
counters/histograms (webhooks, queueing, session state, queue depth/wait).
|
|
294
|
+
- Traces/metrics can be toggled with `traces` / `metrics` (default: on). Traces
|
|
295
|
+
include model usage spans plus webhook/message processing spans when enabled.
|
|
296
|
+
- Set `headers` when your collector requires auth.
|
|
297
|
+
- Environment variables supported: `OTEL_EXPORTER_OTLP_ENDPOINT`,
|
|
298
|
+
`OTEL_SERVICE_NAME`, `OTEL_EXPORTER_OTLP_PROTOCOL`.
|
|
299
|
+
|
|
300
|
+
### Exported metrics (names + types)
|
|
301
|
+
|
|
302
|
+
Model usage:
|
|
303
|
+
|
|
304
|
+
- `Durar.tokens` (counter, attrs: `Durar.token`, `Durar.channel`,
|
|
305
|
+
`Durar.provider`, `Durar.model`)
|
|
306
|
+
- `Durar.cost.usd` (counter, attrs: `Durar.channel`, `Durar.provider`,
|
|
307
|
+
`Durar.model`)
|
|
308
|
+
- `Durar.run.duration_ms` (histogram, attrs: `Durar.channel`,
|
|
309
|
+
`Durar.provider`, `Durar.model`)
|
|
310
|
+
- `Durar.context.tokens` (histogram, attrs: `Durar.context`,
|
|
311
|
+
`Durar.channel`, `Durar.provider`, `Durar.model`)
|
|
312
|
+
|
|
313
|
+
Message flow:
|
|
314
|
+
|
|
315
|
+
- `Durar.webhook.received` (counter, attrs: `Durar.channel`,
|
|
316
|
+
`Durar.webhook`)
|
|
317
|
+
- `Durar.webhook.error` (counter, attrs: `Durar.channel`,
|
|
318
|
+
`Durar.webhook`)
|
|
319
|
+
- `Durar.webhook.duration_ms` (histogram, attrs: `Durar.channel`,
|
|
320
|
+
`Durar.webhook`)
|
|
321
|
+
- `Durar.message.queued` (counter, attrs: `Durar.channel`,
|
|
322
|
+
`Durar.source`)
|
|
323
|
+
- `Durar.message.processed` (counter, attrs: `Durar.channel`,
|
|
324
|
+
`Durar.outcome`)
|
|
325
|
+
- `Durar.message.duration_ms` (histogram, attrs: `Durar.channel`,
|
|
326
|
+
`Durar.outcome`)
|
|
327
|
+
|
|
328
|
+
Queues + sessions:
|
|
329
|
+
|
|
330
|
+
- `Durar.queue.lane.enqueue` (counter, attrs: `Durar.lane`)
|
|
331
|
+
- `Durar.queue.lane.dequeue` (counter, attrs: `Durar.lane`)
|
|
332
|
+
- `Durar.queue.depth` (histogram, attrs: `Durar.lane` or
|
|
333
|
+
`Durar.channel=heartbeat`)
|
|
334
|
+
- `Durar.queue.wait_ms` (histogram, attrs: `Durar.lane`)
|
|
335
|
+
- `Durar.session.state` (counter, attrs: `Durar.state`, `Durar.reason`)
|
|
336
|
+
- `Durar.session.stuck` (counter, attrs: `Durar.state`)
|
|
337
|
+
- `Durar.session.stuck_age_ms` (histogram, attrs: `Durar.state`)
|
|
338
|
+
- `Durar.run.attempt` (counter, attrs: `Durar.attempt`)
|
|
339
|
+
|
|
340
|
+
### Exported spans (names + key attributes)
|
|
341
|
+
|
|
342
|
+
- `Durar.model.usage`
|
|
343
|
+
- `Durar.channel`, `Durar.provider`, `Durar.model`
|
|
344
|
+
- `Durar.sessionKey`, `Durar.sessionId`
|
|
345
|
+
- `Durar.tokens.*` (input/output/cache_read/cache_write/total)
|
|
346
|
+
- `Durar.webhook.processed`
|
|
347
|
+
- `Durar.channel`, `Durar.webhook`, `Durar.chatId`
|
|
348
|
+
- `Durar.webhook.error`
|
|
349
|
+
- `Durar.channel`, `Durar.webhook`, `Durar.chatId`,
|
|
350
|
+
`Durar.error`
|
|
351
|
+
- `Durar.message.processed`
|
|
352
|
+
- `Durar.channel`, `Durar.outcome`, `Durar.chatId`,
|
|
353
|
+
`Durar.messageId`, `Durar.sessionKey`, `Durar.sessionId`,
|
|
354
|
+
`Durar.reason`
|
|
355
|
+
- `Durar.session.stuck`
|
|
356
|
+
- `Durar.state`, `Durar.ageMs`, `Durar.queueDepth`,
|
|
357
|
+
`Durar.sessionKey`, `Durar.sessionId`
|
|
358
|
+
|
|
359
|
+
### Sampling + flushing
|
|
360
|
+
|
|
361
|
+
- Trace sampling: `diagnostics.otel.sampleRate` (0.0–1.0, root spans only).
|
|
362
|
+
- Metric export interval: `diagnostics.otel.flushIntervalMs` (min 1000ms).
|
|
363
|
+
|
|
364
|
+
### Protocol notes
|
|
365
|
+
|
|
366
|
+
- OTLP/HTTP endpoints can be set via `diagnostics.otel.endpoint` or
|
|
367
|
+
`OTEL_EXPORTER_OTLP_ENDPOINT`.
|
|
368
|
+
- If the endpoint already contains `/v1/traces` or `/v1/metrics`, it is used as-is.
|
|
369
|
+
- If the endpoint already contains `/v1/logs`, it is used as-is for logs.
|
|
370
|
+
- `diagnostics.otel.logs` enables OTLP log export for the main logger output.
|
|
371
|
+
|
|
372
|
+
### Log export behavior
|
|
373
|
+
|
|
374
|
+
- OTLP logs use the same structured records written to `logging.file`.
|
|
375
|
+
- Respect `logging.level` (file log level). Console redaction does **not** apply
|
|
376
|
+
to OTLP logs.
|
|
377
|
+
- High-volume installs should prefer OTLP collector sampling/filtering.
|
|
378
|
+
|
|
379
|
+
## Troubleshooting tips
|
|
380
|
+
|
|
381
|
+
- **Gateway not reachable?** Run `Durar doctor` first.
|
|
382
|
+
- **Logs empty?** Check that the Gateway is running and writing to the file path
|
|
383
|
+
in `logging.file`.
|
|
384
|
+
- **Need more detail?** Set `logging.level` to `debug` or `trace` and retry.
|
|
385
|
+
|
|
386
|
+
## Related
|
|
387
|
+
|
|
388
|
+
- [Gateway Logging Internals](/gateway/logging) — WS log styles, subsystem prefixes, and console capture
|
|
389
|
+
- [Diagnostics](/gateway/configuration-reference#diagnostics) — OpenTelemetry export and cache trace config
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
const NAV_TABS_SELECTOR = ".nav-tabs";
|
|
3
|
+
const ACTIVE_UNDERLINE_SELECTOR = ".nav-tabs-item > div.bg-primary";
|
|
4
|
+
const UNDERLINE_CLASS = "nav-tabs-underline";
|
|
5
|
+
const READY_CLASS = "nav-tabs-underline-ready";
|
|
6
|
+
|
|
7
|
+
let navTabs = null;
|
|
8
|
+
let navTabsObserver = null;
|
|
9
|
+
let lastX = null;
|
|
10
|
+
let lastWidth = null;
|
|
11
|
+
|
|
12
|
+
const ensureUnderline = (tabs) => {
|
|
13
|
+
let underline = tabs.querySelector(`.${UNDERLINE_CLASS}`);
|
|
14
|
+
if (!underline) {
|
|
15
|
+
underline = document.createElement("div");
|
|
16
|
+
underline.className = UNDERLINE_CLASS;
|
|
17
|
+
tabs.appendChild(underline);
|
|
18
|
+
}
|
|
19
|
+
return underline;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const getActiveTab = (tabs) => {
|
|
23
|
+
const activeUnderline = tabs.querySelector(ACTIVE_UNDERLINE_SELECTOR);
|
|
24
|
+
return activeUnderline?.closest(".nav-tabs-item") ?? null;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const updateUnderline = () => {
|
|
28
|
+
if (!navTabs) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
ensureUnderline(navTabs);
|
|
33
|
+
|
|
34
|
+
const activeTab = getActiveTab(navTabs);
|
|
35
|
+
if (!activeTab) {
|
|
36
|
+
navTabs.classList.remove(READY_CLASS);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const navRect = navTabs.getBoundingClientRect();
|
|
41
|
+
const tabRect = activeTab.getBoundingClientRect();
|
|
42
|
+
const left = tabRect.left - navRect.left;
|
|
43
|
+
|
|
44
|
+
navTabs.style.setProperty("--nav-tab-underline-x", `${left}px`);
|
|
45
|
+
navTabs.style.setProperty("--nav-tab-underline-width", `${tabRect.width}px`);
|
|
46
|
+
navTabs.classList.add(READY_CLASS);
|
|
47
|
+
|
|
48
|
+
lastX = left;
|
|
49
|
+
lastWidth = tabRect.width;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const scheduleUpdate = () => {
|
|
53
|
+
requestAnimationFrame(updateUnderline);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const setupNavTabsObserver = (tabs) => {
|
|
57
|
+
if (!tabs || tabs === navTabs) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
navTabs = tabs;
|
|
62
|
+
ensureUnderline(navTabs);
|
|
63
|
+
if (lastX !== null && lastWidth !== null) {
|
|
64
|
+
navTabs.style.setProperty("--nav-tab-underline-x", `${lastX}px`);
|
|
65
|
+
navTabs.style.setProperty("--nav-tab-underline-width", `${lastWidth}px`);
|
|
66
|
+
navTabs.classList.add(READY_CLASS);
|
|
67
|
+
}
|
|
68
|
+
navTabsObserver?.disconnect();
|
|
69
|
+
navTabsObserver = new MutationObserver(scheduleUpdate);
|
|
70
|
+
navTabsObserver.observe(navTabs, {
|
|
71
|
+
subtree: true,
|
|
72
|
+
attributes: true,
|
|
73
|
+
attributeFilter: ["class"],
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
scheduleUpdate();
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const setupObservers = () => {
|
|
80
|
+
const tabs = document.querySelector(NAV_TABS_SELECTOR);
|
|
81
|
+
if (tabs) {
|
|
82
|
+
setupNavTabsObserver(tabs);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const rootObserver = new MutationObserver(setupObservers);
|
|
87
|
+
|
|
88
|
+
if (document.readyState === "loading") {
|
|
89
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
90
|
+
setupObservers();
|
|
91
|
+
rootObserver.observe(document.body, { childList: true, subtree: true });
|
|
92
|
+
});
|
|
93
|
+
} else {
|
|
94
|
+
setupObservers();
|
|
95
|
+
rootObserver.observe(document.body, { childList: true, subtree: true });
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
window.addEventListener("resize", scheduleUpdate);
|
|
99
|
+
void document.fonts?.ready?.then(scheduleUpdate, () => {});
|
|
100
|
+
})();
|
package/docs/network.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Network hub: gateway surfaces, pairing, discovery, and security"
|
|
3
|
+
read_when:
|
|
4
|
+
- You need the network architecture + security overview
|
|
5
|
+
- You are debugging local vs tailnet access or pairing
|
|
6
|
+
- You want the canonical list of networking docs
|
|
7
|
+
title: "Network"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Network hub
|
|
11
|
+
|
|
12
|
+
This hub links the core docs for how Durar connects, pairs, and secures
|
|
13
|
+
devices across localhost, LAN, and tailnet.
|
|
14
|
+
|
|
15
|
+
## Core model
|
|
16
|
+
|
|
17
|
+
Most operations flow through the Gateway (`Durar gateway`), a single long-running process that owns channel connections and the WebSocket control plane.
|
|
18
|
+
|
|
19
|
+
- **Loopback first**: the Gateway WS defaults to `ws://127.0.0.1:18789`.
|
|
20
|
+
Non-loopback binds require a valid gateway auth path: shared-secret
|
|
21
|
+
token/password auth, or a correctly configured non-loopback
|
|
22
|
+
`trusted-proxy` deployment.
|
|
23
|
+
- **One Gateway per host** is recommended. For isolation, run multiple gateways with isolated profiles and ports ([Multiple Gateways](/gateway/multiple-gateways)).
|
|
24
|
+
- **Canvas host** is served on the same port as the Gateway (`/__Durar__/canvas/`, `/__Durar__/a2ui/`), protected by Gateway auth when bound beyond loopback.
|
|
25
|
+
- **Remote access** is typically SSH tunnel or Tailscale VPN ([Remote Access](/gateway/remote)).
|
|
26
|
+
|
|
27
|
+
Key references:
|
|
28
|
+
|
|
29
|
+
- [Gateway architecture](/concepts/architecture)
|
|
30
|
+
- [Gateway protocol](/gateway/protocol)
|
|
31
|
+
- [Gateway runbook](/gateway)
|
|
32
|
+
- [Web surfaces + bind modes](/web)
|
|
33
|
+
|
|
34
|
+
## Pairing + identity
|
|
35
|
+
|
|
36
|
+
- [Pairing overview (DM + nodes)](/channels/pairing)
|
|
37
|
+
- [Gateway-owned node pairing](/gateway/pairing)
|
|
38
|
+
- [Devices CLI (pairing + token rotation)](/cli/devices)
|
|
39
|
+
- [Pairing CLI (DM approvals)](/cli/pairing)
|
|
40
|
+
|
|
41
|
+
Local trust:
|
|
42
|
+
|
|
43
|
+
- Direct local loopback connects can be auto-approved for pairing to keep
|
|
44
|
+
same-host UX smooth.
|
|
45
|
+
- Durar also has a narrow backend/container-local self-connect path for
|
|
46
|
+
trusted shared-secret helper flows.
|
|
47
|
+
- Tailnet and LAN clients, including same-host tailnet binds, still require
|
|
48
|
+
explicit pairing approval.
|
|
49
|
+
|
|
50
|
+
## Discovery + transports
|
|
51
|
+
|
|
52
|
+
- [Discovery & transports](/gateway/discovery)
|
|
53
|
+
- [Bonjour / mDNS](/gateway/bonjour)
|
|
54
|
+
- [Remote access (SSH)](/gateway/remote)
|
|
55
|
+
- [Tailscale](/gateway/tailscale)
|
|
56
|
+
|
|
57
|
+
## Nodes + transports
|
|
58
|
+
|
|
59
|
+
- [Nodes overview](/nodes)
|
|
60
|
+
- [Bridge protocol (legacy nodes, historical)](/gateway/bridge-protocol)
|
|
61
|
+
- [Node runbook: iOS](/platforms/ios)
|
|
62
|
+
- [Node runbook: Android](/platforms/android)
|
|
63
|
+
|
|
64
|
+
## Security
|
|
65
|
+
|
|
66
|
+
- [Security overview](/gateway/security)
|
|
67
|
+
- [Gateway config reference](/gateway/configuration)
|
|
68
|
+
- [Troubleshooting](/gateway/troubleshooting)
|
|
69
|
+
- [Doctor](/gateway/doctor)
|