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/web/tui.md
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Terminal UI (TUI): connect to the Gateway from any machine"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want a beginner-friendly walkthrough of the TUI
|
|
5
|
+
- You need the complete list of TUI features, commands, and shortcuts
|
|
6
|
+
title: "TUI"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# TUI (Terminal UI)
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
1. Start the Gateway.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
Durar gateway
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. Open the TUI.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
Durar tui
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
3. Type a message and press Enter.
|
|
26
|
+
|
|
27
|
+
Remote Gateway:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
Durar tui --url ws://<host>:<port> --token <gateway-token>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Use `--password` if your Gateway uses password auth.
|
|
34
|
+
|
|
35
|
+
## What you see
|
|
36
|
+
|
|
37
|
+
- Header: connection URL, current agent, current session.
|
|
38
|
+
- Chat log: user messages, assistant replies, system notices, tool cards.
|
|
39
|
+
- Status line: connection/run state (connecting, running, streaming, idle, error).
|
|
40
|
+
- Footer: connection state + agent + session + model + think/fast/verbose/reasoning + token counts + deliver.
|
|
41
|
+
- Input: text editor with autocomplete.
|
|
42
|
+
|
|
43
|
+
## Mental model: agents + sessions
|
|
44
|
+
|
|
45
|
+
- Agents are unique slugs (e.g. `main`, `research`). The Gateway exposes the list.
|
|
46
|
+
- Sessions belong to the current agent.
|
|
47
|
+
- Session keys are stored as `agent:<agentId>:<sessionKey>`.
|
|
48
|
+
- If you type `/session main`, the TUI expands it to `agent:<currentAgent>:main`.
|
|
49
|
+
- If you type `/session agent:other:main`, you switch to that agent session explicitly.
|
|
50
|
+
- Session scope:
|
|
51
|
+
- `per-sender` (default): each agent has many sessions.
|
|
52
|
+
- `global`: the TUI always uses the `global` session (the picker may be empty).
|
|
53
|
+
- The current agent + session are always visible in the footer.
|
|
54
|
+
|
|
55
|
+
## Sending + delivery
|
|
56
|
+
|
|
57
|
+
- Messages are sent to the Gateway; delivery to providers is off by default.
|
|
58
|
+
- Turn delivery on:
|
|
59
|
+
- `/deliver on`
|
|
60
|
+
- or the Settings panel
|
|
61
|
+
- or start with `Durar tui --deliver`
|
|
62
|
+
|
|
63
|
+
## Pickers + overlays
|
|
64
|
+
|
|
65
|
+
- Model picker: list available models and set the session override.
|
|
66
|
+
- Agent picker: choose a different agent.
|
|
67
|
+
- Session picker: shows only sessions for the current agent.
|
|
68
|
+
- Settings: toggle deliver, tool output expansion, and thinking visibility.
|
|
69
|
+
|
|
70
|
+
## Keyboard shortcuts
|
|
71
|
+
|
|
72
|
+
- Enter: send message
|
|
73
|
+
- Esc: abort active run
|
|
74
|
+
- Ctrl+C: clear input (press twice to exit)
|
|
75
|
+
- Ctrl+D: exit
|
|
76
|
+
- Ctrl+L: model picker
|
|
77
|
+
- Ctrl+G: agent picker
|
|
78
|
+
- Ctrl+P: session picker
|
|
79
|
+
- Ctrl+O: toggle tool output expansion
|
|
80
|
+
- Ctrl+T: toggle thinking visibility (reloads history)
|
|
81
|
+
|
|
82
|
+
## Slash commands
|
|
83
|
+
|
|
84
|
+
Core:
|
|
85
|
+
|
|
86
|
+
- `/help`
|
|
87
|
+
- `/status`
|
|
88
|
+
- `/agent <id>` (or `/agents`)
|
|
89
|
+
- `/session <key>` (or `/sessions`)
|
|
90
|
+
- `/model <provider/model>` (or `/models`)
|
|
91
|
+
|
|
92
|
+
Session controls:
|
|
93
|
+
|
|
94
|
+
- `/think <off|minimal|low|medium|high>`
|
|
95
|
+
- `/fast <status|on|off>`
|
|
96
|
+
- `/verbose <on|full|off>`
|
|
97
|
+
- `/reasoning <on|off|stream>`
|
|
98
|
+
- `/usage <off|tokens|full>`
|
|
99
|
+
- `/elevated <on|off|ask|full>` (alias: `/elev`)
|
|
100
|
+
- `/activation <mention|always>`
|
|
101
|
+
- `/deliver <on|off>`
|
|
102
|
+
|
|
103
|
+
Session lifecycle:
|
|
104
|
+
|
|
105
|
+
- `/new` or `/reset` (reset the session)
|
|
106
|
+
- `/abort` (abort the active run)
|
|
107
|
+
- `/settings`
|
|
108
|
+
- `/exit`
|
|
109
|
+
|
|
110
|
+
Other Gateway slash commands (for example, `/context`) are forwarded to the Gateway and shown as system output. See [Slash commands](/tools/slash-commands).
|
|
111
|
+
|
|
112
|
+
## Local shell commands
|
|
113
|
+
|
|
114
|
+
- Prefix a line with `!` to run a local shell command on the TUI host.
|
|
115
|
+
- The TUI prompts once per session to allow local execution; declining keeps `!` disabled for the session.
|
|
116
|
+
- Commands run in a fresh, non-interactive shell in the TUI working directory (no persistent `cd`/env).
|
|
117
|
+
- Local shell commands receive `Durar_SHELL=tui-local` in their environment.
|
|
118
|
+
- A lone `!` is sent as a normal message; leading spaces do not trigger local exec.
|
|
119
|
+
|
|
120
|
+
## Tool output
|
|
121
|
+
|
|
122
|
+
- Tool calls show as cards with args + results.
|
|
123
|
+
- Ctrl+O toggles between collapsed/expanded views.
|
|
124
|
+
- While tools run, partial updates stream into the same card.
|
|
125
|
+
|
|
126
|
+
## Terminal colors
|
|
127
|
+
|
|
128
|
+
- The TUI keeps assistant body text in your terminal's default foreground so dark and light terminals both stay readable.
|
|
129
|
+
- If your terminal uses a light background and auto-detection is wrong, set `Durar_THEME=light` before launching `Durar tui`.
|
|
130
|
+
- To force the original dark palette instead, set `Durar_THEME=dark`.
|
|
131
|
+
|
|
132
|
+
## History + streaming
|
|
133
|
+
|
|
134
|
+
- On connect, the TUI loads the latest history (default 200 messages).
|
|
135
|
+
- Streaming responses update in place until finalized.
|
|
136
|
+
- The TUI also listens to agent tool events for richer tool cards.
|
|
137
|
+
|
|
138
|
+
## Connection details
|
|
139
|
+
|
|
140
|
+
- The TUI registers with the Gateway as `mode: "tui"`.
|
|
141
|
+
- Reconnects show a system message; event gaps are surfaced in the log.
|
|
142
|
+
|
|
143
|
+
## Options
|
|
144
|
+
|
|
145
|
+
- `--url <url>`: Gateway WebSocket URL (defaults to config or `ws://127.0.0.1:<port>`)
|
|
146
|
+
- `--token <token>`: Gateway token (if required)
|
|
147
|
+
- `--password <password>`: Gateway password (if required)
|
|
148
|
+
- `--session <key>`: Session key (default: `main`, or `global` when scope is global)
|
|
149
|
+
- `--deliver`: Deliver assistant replies to the provider (default off)
|
|
150
|
+
- `--thinking <level>`: Override thinking level for sends
|
|
151
|
+
- `--message <text>`: Send an initial message after connecting
|
|
152
|
+
- `--timeout-ms <ms>`: Agent timeout in ms (defaults to `agents.defaults.timeoutSeconds`)
|
|
153
|
+
- `--history-limit <n>`: History entries to load (default `200`)
|
|
154
|
+
|
|
155
|
+
Note: when you set `--url`, the TUI does not fall back to config or environment credentials.
|
|
156
|
+
Pass `--token` or `--password` explicitly. Missing explicit credentials is an error.
|
|
157
|
+
|
|
158
|
+
## Troubleshooting
|
|
159
|
+
|
|
160
|
+
No output after sending a message:
|
|
161
|
+
|
|
162
|
+
- Run `/status` in the TUI to confirm the Gateway is connected and idle/busy.
|
|
163
|
+
- Check the Gateway logs: `Durar logs --follow`.
|
|
164
|
+
- Confirm the agent can run: `Durar status` and `Durar models status`.
|
|
165
|
+
- If you expect messages in a chat channel, enable delivery (`/deliver on` or `--deliver`).
|
|
166
|
+
|
|
167
|
+
## Connection troubleshooting
|
|
168
|
+
|
|
169
|
+
- `disconnected`: ensure the Gateway is running and your `--url/--token/--password` are correct.
|
|
170
|
+
- No agents in picker: check `Durar agents list` and your routing config.
|
|
171
|
+
- Empty session picker: you might be in global scope or have no sessions yet.
|
|
172
|
+
|
|
173
|
+
## Related
|
|
174
|
+
|
|
175
|
+
- [Control UI](/web/control-ui) — web-based control interface
|
|
176
|
+
- [CLI Reference](/cli) — full CLI command reference
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Loopback WebChat static host and Gateway WS usage for chat UI"
|
|
3
|
+
read_when:
|
|
4
|
+
- Debugging or configuring WebChat access
|
|
5
|
+
title: "WebChat"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# WebChat (Gateway WebSocket UI)
|
|
9
|
+
|
|
10
|
+
Status: the macOS/iOS SwiftUI chat UI talks directly to the Gateway WebSocket.
|
|
11
|
+
|
|
12
|
+
## What it is
|
|
13
|
+
|
|
14
|
+
- A native chat UI for the gateway (no embedded browser and no local static server).
|
|
15
|
+
- Uses the same sessions and routing rules as other channels.
|
|
16
|
+
- Deterministic routing: replies always go back to WebChat.
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
1. Start the gateway.
|
|
21
|
+
2. Open the WebChat UI (macOS/iOS app) or the Control UI chat tab.
|
|
22
|
+
3. Ensure a valid gateway auth path is configured (shared-secret by default,
|
|
23
|
+
even on loopback).
|
|
24
|
+
|
|
25
|
+
## How it works (behavior)
|
|
26
|
+
|
|
27
|
+
- The UI connects to the Gateway WebSocket and uses `chat.history`, `chat.send`, and `chat.inject`.
|
|
28
|
+
- `chat.history` is bounded for stability: Gateway may truncate long text fields, omit heavy metadata, and replace oversized entries with `[chat.history omitted: message too large]`.
|
|
29
|
+
- `chat.history` is also display-normalized: inline delivery directive tags
|
|
30
|
+
such as `[[reply_to_*]]` and `[[audio_as_voice]]`, plain-text tool-call XML
|
|
31
|
+
payloads (including `<tool_call>...</tool_call>`,
|
|
32
|
+
`<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`,
|
|
33
|
+
`<function_calls>...</function_calls>`, and truncated tool-call blocks), and
|
|
34
|
+
leaked ASCII/full-width model control tokens are stripped from visible text,
|
|
35
|
+
and assistant entries whose whole visible text is only the exact silent
|
|
36
|
+
token `NO_REPLY` / `no_reply` are omitted.
|
|
37
|
+
- `chat.inject` appends an assistant note directly to the transcript and broadcasts it to the UI (no agent run).
|
|
38
|
+
- Aborted runs can keep partial assistant output visible in the UI.
|
|
39
|
+
- Gateway persists aborted partial assistant text into transcript history when buffered output exists, and marks those entries with abort metadata.
|
|
40
|
+
- History is always fetched from the gateway (no local file watching).
|
|
41
|
+
- If the gateway is unreachable, WebChat is read-only.
|
|
42
|
+
|
|
43
|
+
## Control UI agents tools panel
|
|
44
|
+
|
|
45
|
+
- The Control UI `/agents` Tools panel has two separate views:
|
|
46
|
+
- **Available Right Now** uses `tools.effective(sessionKey=...)` and shows what the current
|
|
47
|
+
session can actually use at runtime, including core, plugin, and channel-owned tools.
|
|
48
|
+
- **Tool Configuration** uses `tools.catalog` and stays focused on profiles, overrides, and
|
|
49
|
+
catalog semantics.
|
|
50
|
+
- Runtime availability is session-scoped. Switching sessions on the same agent can change the
|
|
51
|
+
**Available Right Now** list.
|
|
52
|
+
- The config editor does not imply runtime availability; effective access still follows policy
|
|
53
|
+
precedence (`allow`/`deny`, per-agent and provider/channel overrides).
|
|
54
|
+
|
|
55
|
+
## Remote use
|
|
56
|
+
|
|
57
|
+
- Remote mode tunnels the gateway WebSocket over SSH/Tailscale.
|
|
58
|
+
- You do not need to run a separate WebChat server.
|
|
59
|
+
|
|
60
|
+
## Configuration reference (WebChat)
|
|
61
|
+
|
|
62
|
+
Full configuration: [Configuration](/gateway/configuration)
|
|
63
|
+
|
|
64
|
+
WebChat options:
|
|
65
|
+
|
|
66
|
+
- `gateway.webchat.chatHistoryMaxChars`: maximum character count for text fields in `chat.history` responses. When a transcript entry exceeds this limit, Gateway truncates long text fields and may replace oversized messages with a placeholder. Per-request `maxChars` can also be sent by the client to override this default for a single `chat.history` call.
|
|
67
|
+
|
|
68
|
+
Related global options:
|
|
69
|
+
|
|
70
|
+
- `gateway.port`, `gateway.bind`: WebSocket host/port.
|
|
71
|
+
- `gateway.auth.mode`, `gateway.auth.token`, `gateway.auth.password`:
|
|
72
|
+
shared-secret WebSocket auth.
|
|
73
|
+
- `gateway.auth.allowTailscale`: browser Control UI chat tab can use Tailscale
|
|
74
|
+
Serve identity headers when enabled.
|
|
75
|
+
- `gateway.auth.mode: "trusted-proxy"`: reverse-proxy auth for browser clients behind an identity-aware **non-loopback** proxy source (see [Trusted Proxy Auth](/gateway/trusted-proxy-auth)).
|
|
76
|
+
- `gateway.remote.url`, `gateway.remote.token`, `gateway.remote.password`: remote gateway target.
|
|
77
|
+
- `session.*`: session storage and main key defaults.
|
|
Binary file
|
|
Binary file
|
package/durar.mjs
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { access } from "node:fs/promises";
|
|
5
|
+
import module from "node:module";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
const MIN_NODE_MAJOR = 22;
|
|
9
|
+
const MIN_NODE_MINOR = 12;
|
|
10
|
+
const MIN_NODE_VERSION = `${MIN_NODE_MAJOR}.${MIN_NODE_MINOR}`;
|
|
11
|
+
|
|
12
|
+
const parseNodeVersion = (rawVersion) => {
|
|
13
|
+
const [majorRaw = "0", minorRaw = "0"] = rawVersion.split(".");
|
|
14
|
+
return {
|
|
15
|
+
major: Number(majorRaw),
|
|
16
|
+
minor: Number(minorRaw),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const isSupportedNodeVersion = (version) =>
|
|
21
|
+
version.major > MIN_NODE_MAJOR ||
|
|
22
|
+
(version.major === MIN_NODE_MAJOR && version.minor >= MIN_NODE_MINOR);
|
|
23
|
+
|
|
24
|
+
const ensureSupportedNodeVersion = () => {
|
|
25
|
+
if (isSupportedNodeVersion(parseNodeVersion(process.versions.node))) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
process.stderr.write(
|
|
30
|
+
`openclaw: Node.js v${MIN_NODE_VERSION}+ is required (current: v${process.versions.node}).\n` +
|
|
31
|
+
"If you use nvm, run:\n" +
|
|
32
|
+
` nvm install ${MIN_NODE_MAJOR}\n` +
|
|
33
|
+
` nvm use ${MIN_NODE_MAJOR}\n` +
|
|
34
|
+
` nvm alias default ${MIN_NODE_MAJOR}\n`,
|
|
35
|
+
);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
ensureSupportedNodeVersion();
|
|
40
|
+
|
|
41
|
+
// https://nodejs.org/api/module.html#module-compile-cache
|
|
42
|
+
if (module.enableCompileCache && !process.env.NODE_DISABLE_COMPILE_CACHE) {
|
|
43
|
+
try {
|
|
44
|
+
module.enableCompileCache();
|
|
45
|
+
} catch {
|
|
46
|
+
// Ignore errors
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const isModuleNotFoundError = (err) =>
|
|
51
|
+
err && typeof err === "object" && "code" in err && err.code === "ERR_MODULE_NOT_FOUND";
|
|
52
|
+
|
|
53
|
+
const isDirectModuleNotFoundError = (err, specifier) => {
|
|
54
|
+
if (!isModuleNotFoundError(err)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const expectedUrl = new URL(specifier, import.meta.url);
|
|
59
|
+
if ("url" in err && err.url === expectedUrl.href) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const message = "message" in err && typeof err.message === "string" ? err.message : "";
|
|
64
|
+
const expectedPath = fileURLToPath(expectedUrl);
|
|
65
|
+
return (
|
|
66
|
+
message.includes(`Cannot find module '${expectedPath}'`) ||
|
|
67
|
+
message.includes(`Cannot find module "${expectedPath}"`)
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const installProcessWarningFilter = async () => {
|
|
72
|
+
// Keep bootstrap warnings consistent with the TypeScript runtime.
|
|
73
|
+
for (const specifier of ["./dist/warning-filter.js", "./dist/warning-filter.mjs"]) {
|
|
74
|
+
try {
|
|
75
|
+
const mod = await import(specifier);
|
|
76
|
+
if (typeof mod.installProcessWarningFilter === "function") {
|
|
77
|
+
mod.installProcessWarningFilter();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
} catch (err) {
|
|
81
|
+
if (isDirectModuleNotFoundError(err, specifier)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const tryImport = async (specifier) => {
|
|
90
|
+
try {
|
|
91
|
+
await import(specifier);
|
|
92
|
+
return true;
|
|
93
|
+
} catch (err) {
|
|
94
|
+
// Only swallow direct entry misses; rethrow transitive resolution failures.
|
|
95
|
+
if (isDirectModuleNotFoundError(err, specifier)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const exists = async (specifier) => {
|
|
103
|
+
try {
|
|
104
|
+
await access(new URL(specifier, import.meta.url));
|
|
105
|
+
return true;
|
|
106
|
+
} catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const buildMissingEntryErrorMessage = async () => {
|
|
112
|
+
const lines = ["openclaw: missing dist/entry.(m)js (build output)."];
|
|
113
|
+
if (!(await exists("./src/entry.ts"))) {
|
|
114
|
+
return lines.join("\n");
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
lines.push("This install looks like an unbuilt source tree or GitHub source archive.");
|
|
118
|
+
lines.push(
|
|
119
|
+
"Build locally with `pnpm install && pnpm build`, or install a built package instead.",
|
|
120
|
+
);
|
|
121
|
+
lines.push(
|
|
122
|
+
"For pinned GitHub installs, use `npm install -g github:openclaw/openclaw#<ref>` instead of a raw `/archive/<ref>.tar.gz` URL.",
|
|
123
|
+
);
|
|
124
|
+
lines.push("For releases, use `npm install -g openclaw@latest`.");
|
|
125
|
+
return lines.join("\n");
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const isBareRootHelpInvocation = (argv) =>
|
|
129
|
+
argv.length === 3 && (argv[2] === "--help" || argv[2] === "-h");
|
|
130
|
+
|
|
131
|
+
const loadPrecomputedRootHelpText = () => {
|
|
132
|
+
try {
|
|
133
|
+
const raw = readFileSync(new URL("./dist/cli-startup-metadata.json", import.meta.url), "utf8");
|
|
134
|
+
const parsed = JSON.parse(raw);
|
|
135
|
+
return typeof parsed?.rootHelpText === "string" && parsed.rootHelpText.length > 0
|
|
136
|
+
? parsed.rootHelpText
|
|
137
|
+
: null;
|
|
138
|
+
} catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const tryOutputBareRootHelp = async () => {
|
|
144
|
+
if (!isBareRootHelpInvocation(process.argv)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const precomputed = loadPrecomputedRootHelpText();
|
|
148
|
+
if (precomputed) {
|
|
149
|
+
process.stdout.write(precomputed);
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
for (const specifier of ["./dist/cli/program/root-help.js", "./dist/cli/program/root-help.mjs"]) {
|
|
153
|
+
try {
|
|
154
|
+
const mod = await import(specifier);
|
|
155
|
+
if (typeof mod.outputRootHelp === "function") {
|
|
156
|
+
mod.outputRootHelp();
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
} catch (err) {
|
|
160
|
+
if (isDirectModuleNotFoundError(err, specifier)) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
throw err;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return false;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
if (await tryOutputBareRootHelp()) {
|
|
170
|
+
// OK
|
|
171
|
+
} else {
|
|
172
|
+
await installProcessWarningFilter();
|
|
173
|
+
if (await tryImport("./dist/entry.js")) {
|
|
174
|
+
// OK
|
|
175
|
+
} else if (await tryImport("./dist/entry.mjs")) {
|
|
176
|
+
// OK
|
|
177
|
+
} else {
|
|
178
|
+
throw new Error(await buildMissingEntryErrorMessage());
|
|
179
|
+
}
|
|
180
|
+
}
|