nodmix 2026.5.25
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 +11573 -0
- package/LICENSE +21 -0
- package/README.md +486 -0
- package/docs/.i18n/README.md +81 -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 +78 -0
- package/docs/.i18n/glossary.de.json +78 -0
- package/docs/.i18n/glossary.es.json +78 -0
- package/docs/.i18n/glossary.fa.json +78 -0
- package/docs/.i18n/glossary.fr.json +78 -0
- package/docs/.i18n/glossary.id.json +78 -0
- package/docs/.i18n/glossary.it.json +78 -0
- package/docs/.i18n/glossary.ja-JP.json +98 -0
- package/docs/.i18n/glossary.ko.json +78 -0
- package/docs/.i18n/glossary.nl.json +78 -0
- package/docs/.i18n/glossary.pl.json +78 -0
- package/docs/.i18n/glossary.pt-BR.json +78 -0
- package/docs/.i18n/glossary.th.json +78 -0
- package/docs/.i18n/glossary.tr.json +78 -0
- package/docs/.i18n/glossary.uk.json +78 -0
- package/docs/.i18n/glossary.vi.json +78 -0
- package/docs/.i18n/glossary.zh-CN.json +1002 -0
- package/docs/.i18n/glossary.zh-TW.json +78 -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/translation-workflow.md +111 -0
- package/docs/.i18n/zh-Hans-navigation.json +542 -0
- package/docs/AGENTS.md +36 -0
- package/docs/announcements/bluebubbles-imessage.md +79 -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/pr/quick-settings-browser-tools.png +0 -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 +124 -0
- package/docs/automation/auth-monitoring.md +11 -0
- package/docs/automation/clawflow.md +12 -0
- package/docs/automation/cron-jobs.md +500 -0
- package/docs/automation/cron-vs-heartbeat.md +11 -0
- package/docs/automation/gmail-pubsub.md +11 -0
- package/docs/automation/hooks.md +365 -0
- package/docs/automation/index.md +135 -0
- package/docs/automation/poll.md +12 -0
- package/docs/automation/standing-orders.md +250 -0
- package/docs/automation/taskflow.md +155 -0
- package/docs/automation/tasks.md +374 -0
- package/docs/automation/troubleshooting.md +12 -0
- package/docs/automation/webhook.md +12 -0
- package/docs/brave-search.md +11 -0
- package/docs/channels/access-groups.md +201 -0
- package/docs/channels/ambient-room-events.md +214 -0
- package/docs/channels/bot-loop-protection.md +131 -0
- package/docs/channels/broadcast-groups.md +472 -0
- package/docs/channels/channel-routing.md +162 -0
- package/docs/channels/clickclack.md +138 -0
- package/docs/channels/discord.md +1762 -0
- package/docs/channels/feishu.md +502 -0
- package/docs/channels/googlechat.md +284 -0
- package/docs/channels/group-messages.md +95 -0
- package/docs/channels/groups.md +519 -0
- package/docs/channels/imessage-from-bluebubbles.md +259 -0
- package/docs/channels/imessage.md +813 -0
- package/docs/channels/index.md +64 -0
- package/docs/channels/irc.md +253 -0
- package/docs/channels/line.md +243 -0
- package/docs/channels/location.md +71 -0
- package/docs/channels/matrix-migration.md +370 -0
- package/docs/channels/matrix-presentation.md +77 -0
- package/docs/channels/matrix-push-rules.md +150 -0
- package/docs/channels/matrix.md +921 -0
- package/docs/channels/mattermost.md +542 -0
- package/docs/channels/msteams.md +1042 -0
- package/docs/channels/nextcloud-talk.md +176 -0
- package/docs/channels/nostr.md +253 -0
- package/docs/channels/pairing.md +214 -0
- package/docs/channels/qqbot.md +309 -0
- package/docs/channels/signal.md +400 -0
- package/docs/channels/slack.md +1564 -0
- package/docs/channels/synology-chat.md +187 -0
- package/docs/channels/telegram.md +1107 -0
- package/docs/channels/tlon.md +296 -0
- package/docs/channels/troubleshooting.md +161 -0
- package/docs/channels/twitch.md +431 -0
- package/docs/channels/wechat.md +171 -0
- package/docs/channels/whatsapp.md +739 -0
- package/docs/channels/yuanbao.md +416 -0
- package/docs/channels/zalo.md +253 -0
- package/docs/channels/zalouser.md +199 -0
- package/docs/ci.md +612 -0
- package/docs/clawhub/publishing.md +96 -0
- package/docs/cli/acp.md +370 -0
- package/docs/cli/agent.md +103 -0
- package/docs/cli/agents.md +232 -0
- package/docs/cli/approvals.md +190 -0
- package/docs/cli/backup.md +97 -0
- package/docs/cli/browser.md +307 -0
- package/docs/cli/channels.md +154 -0
- package/docs/cli/clawbot.md +25 -0
- package/docs/cli/commitments.md +90 -0
- package/docs/cli/completion.md +39 -0
- package/docs/cli/config.md +504 -0
- package/docs/cli/configure.md +77 -0
- package/docs/cli/crestodian.md +332 -0
- package/docs/cli/cron.md +281 -0
- package/docs/cli/daemon.md +67 -0
- package/docs/cli/dashboard.md +33 -0
- package/docs/cli/devices.md +204 -0
- package/docs/cli/directory.md +68 -0
- package/docs/cli/dns.md +53 -0
- package/docs/cli/docs.md +73 -0
- package/docs/cli/doctor.md +237 -0
- package/docs/cli/flows.md +52 -0
- package/docs/cli/gateway.md +567 -0
- package/docs/cli/health.md +43 -0
- package/docs/cli/hooks.md +345 -0
- package/docs/cli/index.md +396 -0
- package/docs/cli/infer.md +364 -0
- package/docs/cli/logs.md +65 -0
- package/docs/cli/mcp.md +529 -0
- package/docs/cli/memory.md +183 -0
- package/docs/cli/message.md +317 -0
- package/docs/cli/migrate.md +290 -0
- package/docs/cli/models.md +224 -0
- package/docs/cli/node.md +177 -0
- package/docs/cli/nodes.md +76 -0
- package/docs/cli/onboard.md +245 -0
- package/docs/cli/pairing.md +77 -0
- package/docs/cli/path.md +502 -0
- package/docs/cli/plugins.md +454 -0
- package/docs/cli/policy.md +418 -0
- package/docs/cli/proxy.md +89 -0
- package/docs/cli/qr.md +56 -0
- package/docs/cli/reset.md +39 -0
- package/docs/cli/sandbox.md +208 -0
- package/docs/cli/secrets.md +202 -0
- package/docs/cli/security.md +124 -0
- package/docs/cli/sessions.md +164 -0
- package/docs/cli/setup.md +59 -0
- package/docs/cli/skills.md +102 -0
- package/docs/cli/status.md +45 -0
- package/docs/cli/system.md +89 -0
- package/docs/cli/tasks.md +111 -0
- package/docs/cli/tui.md +89 -0
- package/docs/cli/uninstall.md +44 -0
- package/docs/cli/update.md +242 -0
- package/docs/cli/voicecall.md +204 -0
- package/docs/cli/webhooks.md +117 -0
- package/docs/cli/wiki.md +256 -0
- package/docs/concepts/active-memory.md +856 -0
- package/docs/concepts/agent-loop.md +185 -0
- package/docs/concepts/agent-runtimes.md +243 -0
- package/docs/concepts/agent-workspace.md +230 -0
- package/docs/concepts/agent.md +136 -0
- package/docs/concepts/architecture.md +154 -0
- package/docs/concepts/channel-docking.md +145 -0
- package/docs/concepts/commitments.md +150 -0
- package/docs/concepts/compaction.md +203 -0
- package/docs/concepts/context-engine.md +306 -0
- package/docs/concepts/context.md +199 -0
- package/docs/concepts/delegate-architecture.md +319 -0
- package/docs/concepts/dreaming.md +261 -0
- package/docs/concepts/experimental-features.md +108 -0
- package/docs/concepts/features.md +91 -0
- package/docs/concepts/mantis-slack-desktop-runbook.md +202 -0
- package/docs/concepts/mantis.md +740 -0
- package/docs/concepts/markdown-formatting.md +139 -0
- package/docs/concepts/memory-builtin.md +146 -0
- package/docs/concepts/memory-honcho.md +144 -0
- package/docs/concepts/memory-qmd.md +271 -0
- package/docs/concepts/memory-search.md +166 -0
- package/docs/concepts/memory.md +258 -0
- package/docs/concepts/message-lifecycle-refactor.md +1128 -0
- package/docs/concepts/messages.md +214 -0
- package/docs/concepts/model-failover.md +385 -0
- package/docs/concepts/model-providers.md +715 -0
- package/docs/concepts/models.md +370 -0
- package/docs/concepts/multi-agent.md +619 -0
- package/docs/concepts/oauth.md +198 -0
- package/docs/concepts/openclaw-sdk.md +323 -0
- package/docs/concepts/parallel-specialist-lanes.md +127 -0
- package/docs/concepts/personal-agent-benchmark-pack.md +74 -0
- package/docs/concepts/presence.md +117 -0
- package/docs/concepts/progress-drafts.md +362 -0
- package/docs/concepts/qa-e2e-automation.md +820 -0
- package/docs/concepts/qa-matrix.md +139 -0
- package/docs/concepts/queue-steering.md +90 -0
- package/docs/concepts/queue.md +122 -0
- package/docs/concepts/retry.md +86 -0
- package/docs/concepts/session-pruning.md +104 -0
- package/docs/concepts/session-tool.md +190 -0
- package/docs/concepts/session.md +164 -0
- package/docs/concepts/soul.md +116 -0
- package/docs/concepts/streaming.md +251 -0
- package/docs/concepts/system-prompt.md +310 -0
- package/docs/concepts/timezone.md +47 -0
- package/docs/concepts/typebox.md +309 -0
- package/docs/concepts/typing-indicators.md +88 -0
- package/docs/concepts/usage-tracking.md +66 -0
- package/docs/date-time.md +126 -0
- package/docs/debug/node-issue.md +90 -0
- package/docs/diagnostics/flags.md +138 -0
- package/docs/docs.json +1832 -0
- package/docs/gateway/authentication.md +239 -0
- package/docs/gateway/background-process.md +147 -0
- package/docs/gateway/bonjour.md +303 -0
- package/docs/gateway/bridge-protocol.md +94 -0
- package/docs/gateway/cli-backends.md +420 -0
- package/docs/gateway/config-agents.md +1514 -0
- package/docs/gateway/config-channels.md +945 -0
- package/docs/gateway/config-tools.md +769 -0
- package/docs/gateway/configuration-examples.md +705 -0
- package/docs/gateway/configuration-reference.md +1393 -0
- package/docs/gateway/configuration.md +737 -0
- package/docs/gateway/diagnostics.md +213 -0
- package/docs/gateway/discovery.md +154 -0
- package/docs/gateway/doctor.md +574 -0
- package/docs/gateway/gateway-lock.md +37 -0
- package/docs/gateway/health.md +73 -0
- package/docs/gateway/heartbeat.md +493 -0
- package/docs/gateway/index.md +383 -0
- package/docs/gateway/local-model-services.md +205 -0
- package/docs/gateway/local-models.md +355 -0
- package/docs/gateway/logging.md +149 -0
- package/docs/gateway/multiple-gateways.md +178 -0
- package/docs/gateway/network-model.md +15 -0
- package/docs/gateway/openai-http-api.md +350 -0
- package/docs/gateway/openresponses-http-api.md +347 -0
- package/docs/gateway/openshell.md +316 -0
- package/docs/gateway/opentelemetry.md +404 -0
- package/docs/gateway/operator-scopes.md +111 -0
- package/docs/gateway/pairing.md +207 -0
- package/docs/gateway/prometheus.md +230 -0
- package/docs/gateway/protocol.md +803 -0
- package/docs/gateway/remote-gateway-readme.md +169 -0
- package/docs/gateway/remote.md +280 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +146 -0
- package/docs/gateway/sandboxing.md +545 -0
- package/docs/gateway/secrets-plan-contract.md +114 -0
- package/docs/gateway/secrets.md +609 -0
- package/docs/gateway/security/audit-checks.md +127 -0
- package/docs/gateway/security/index.md +1326 -0
- package/docs/gateway/security/secure-file-operations.md +76 -0
- package/docs/gateway/tailscale.md +156 -0
- package/docs/gateway/tools-invoke-http-api.md +169 -0
- package/docs/gateway/troubleshooting.md +772 -0
- package/docs/gateway/trusted-proxy-auth.md +451 -0
- package/docs/help/debugging.md +344 -0
- package/docs/help/environment.md +214 -0
- package/docs/help/faq-first-run.md +867 -0
- package/docs/help/faq-models.md +553 -0
- package/docs/help/faq.md +1975 -0
- package/docs/help/gpt55-codex-agentic-parity-maintainers.md +196 -0
- package/docs/help/gpt55-codex-agentic-parity.md +230 -0
- package/docs/help/index.md +39 -0
- package/docs/help/scripts.md +56 -0
- package/docs/help/testing-live.md +580 -0
- package/docs/help/testing-updates-plugins.md +291 -0
- package/docs/help/testing.md +928 -0
- package/docs/help/troubleshooting.md +424 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-get-group-id.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 +233 -0
- package/docs/install/azure.md +315 -0
- package/docs/install/bun.md +59 -0
- package/docs/install/clawdock.md +112 -0
- package/docs/install/development-channels.md +135 -0
- package/docs/install/digitalocean.md +174 -0
- package/docs/install/docker-vm-runtime.md +154 -0
- package/docs/install/docker.md +562 -0
- package/docs/install/exe-dev.md +201 -0
- package/docs/install/fly.md +524 -0
- package/docs/install/gcp.md +418 -0
- package/docs/install/hetzner.md +285 -0
- package/docs/install/hostinger.md +98 -0
- package/docs/install/index.md +221 -0
- package/docs/install/installer.md +455 -0
- package/docs/install/kubernetes.md +196 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-claude.md +165 -0
- package/docs/install/migrating-hermes.md +177 -0
- package/docs/install/migrating.md +137 -0
- package/docs/install/nix.md +112 -0
- package/docs/install/node.md +142 -0
- package/docs/install/northflank.mdx +44 -0
- package/docs/install/oracle.md +218 -0
- package/docs/install/podman.md +210 -0
- package/docs/install/railway.mdx +92 -0
- package/docs/install/raspberry-pi.md +234 -0
- package/docs/install/render.mdx +167 -0
- package/docs/install/uninstall.md +131 -0
- package/docs/install/updating.md +280 -0
- package/docs/logging.md +318 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +72 -0
- package/docs/nodes/audio.md +215 -0
- package/docs/nodes/camera.md +166 -0
- package/docs/nodes/images.md +77 -0
- package/docs/nodes/index.md +439 -0
- package/docs/nodes/location-command.md +102 -0
- package/docs/nodes/media-understanding.md +469 -0
- package/docs/nodes/talk.md +154 -0
- package/docs/nodes/troubleshooting.md +123 -0
- package/docs/nodes/voicewake.md +93 -0
- package/docs/perplexity.md +11 -0
- package/docs/pi-dev.md +82 -0
- package/docs/pi.md +573 -0
- package/docs/plan/codex-context-engine-harness.md +624 -0
- package/docs/plan/ui-channels.md +284 -0
- package/docs/platforms/android.md +285 -0
- package/docs/platforms/digitalocean.md +12 -0
- package/docs/platforms/index.md +60 -0
- package/docs/platforms/ios.md +283 -0
- package/docs/platforms/linux.md +141 -0
- package/docs/platforms/mac/bundled-gateway.md +79 -0
- package/docs/platforms/mac/canvas.md +128 -0
- package/docs/platforms/mac/child-process.md +72 -0
- package/docs/platforms/mac/dev-setup.md +112 -0
- package/docs/platforms/mac/health.md +39 -0
- package/docs/platforms/mac/icon.md +36 -0
- package/docs/platforms/mac/logging.md +62 -0
- package/docs/platforms/mac/menu-bar.md +93 -0
- package/docs/platforms/mac/peekaboo.md +92 -0
- package/docs/platforms/mac/permissions.md +53 -0
- package/docs/platforms/mac/remote.md +123 -0
- package/docs/platforms/mac/signing.md +52 -0
- package/docs/platforms/mac/skills.md +43 -0
- package/docs/platforms/mac/voice-overlay.md +66 -0
- package/docs/platforms/mac/voicewake.md +73 -0
- package/docs/platforms/mac/webchat.md +54 -0
- package/docs/platforms/mac/xpc.md +66 -0
- package/docs/platforms/macos.md +226 -0
- package/docs/platforms/oracle.md +12 -0
- package/docs/platforms/raspberry-pi.md +13 -0
- package/docs/platforms/windows.md +286 -0
- package/docs/plugins/adding-capabilities.md +133 -0
- package/docs/plugins/admin-http-rpc.md +216 -0
- package/docs/plugins/agent-tools.md +13 -0
- package/docs/plugins/architecture-internals.md +1195 -0
- package/docs/plugins/architecture.md +481 -0
- package/docs/plugins/building-extensions.md +13 -0
- package/docs/plugins/building-plugins.md +330 -0
- package/docs/plugins/bundles.md +310 -0
- package/docs/plugins/cli-backend-plugins.md +310 -0
- package/docs/plugins/codex-computer-use.md +293 -0
- package/docs/plugins/codex-harness-reference.md +409 -0
- package/docs/plugins/codex-harness-runtime.md +247 -0
- package/docs/plugins/codex-harness.md +746 -0
- package/docs/plugins/codex-native-plugins.md +276 -0
- package/docs/plugins/community.md +77 -0
- package/docs/plugins/compatibility.md +164 -0
- package/docs/plugins/dependency-resolution.md +143 -0
- package/docs/plugins/google-meet.md +1737 -0
- package/docs/plugins/hooks.md +459 -0
- package/docs/plugins/install-overrides.md +80 -0
- package/docs/plugins/manage-plugins.md +210 -0
- package/docs/plugins/manifest.md +1359 -0
- package/docs/plugins/memory-lancedb.md +385 -0
- package/docs/plugins/memory-wiki.md +529 -0
- package/docs/plugins/message-presentation.md +473 -0
- package/docs/plugins/oc-path.md +166 -0
- package/docs/plugins/plugin-inventory.md +182 -0
- package/docs/plugins/reference/acpx.md +23 -0
- package/docs/plugins/reference/admin-http-rpc.md +23 -0
- package/docs/plugins/reference/alibaba.md +23 -0
- package/docs/plugins/reference/amazon-bedrock-mantle.md +23 -0
- package/docs/plugins/reference/amazon-bedrock.md +23 -0
- package/docs/plugins/reference/anthropic-vertex.md +19 -0
- package/docs/plugins/reference/anthropic.md +23 -0
- package/docs/plugins/reference/arcee.md +23 -0
- package/docs/plugins/reference/azure-speech.md +23 -0
- package/docs/plugins/reference/bonjour.md +19 -0
- package/docs/plugins/reference/brave.md +23 -0
- package/docs/plugins/reference/browser.md +23 -0
- package/docs/plugins/reference/byteplus.md +19 -0
- package/docs/plugins/reference/canvas.md +19 -0
- package/docs/plugins/reference/cerebras.md +23 -0
- package/docs/plugins/reference/chutes.md +23 -0
- package/docs/plugins/reference/clickclack.md +23 -0
- package/docs/plugins/reference/cloudflare-ai-gateway.md +23 -0
- package/docs/plugins/reference/codex.md +23 -0
- package/docs/plugins/reference/comfy.md +23 -0
- package/docs/plugins/reference/copilot-proxy.md +19 -0
- package/docs/plugins/reference/deepgram.md +23 -0
- package/docs/plugins/reference/deepinfra.md +23 -0
- package/docs/plugins/reference/deepseek.md +23 -0
- package/docs/plugins/reference/diagnostics-otel.md +19 -0
- package/docs/plugins/reference/diagnostics-prometheus.md +19 -0
- package/docs/plugins/reference/diffs.md +19 -0
- package/docs/plugins/reference/discord.md +23 -0
- package/docs/plugins/reference/document-extract.md +23 -0
- package/docs/plugins/reference/duckduckgo.md +23 -0
- package/docs/plugins/reference/elevenlabs.md +23 -0
- package/docs/plugins/reference/exa.md +23 -0
- package/docs/plugins/reference/fal.md +23 -0
- package/docs/plugins/reference/feishu.md +23 -0
- package/docs/plugins/reference/file-transfer.md +19 -0
- package/docs/plugins/reference/firecrawl.md +23 -0
- package/docs/plugins/reference/fireworks.md +23 -0
- package/docs/plugins/reference/github-copilot.md +23 -0
- package/docs/plugins/reference/google-meet.md +23 -0
- package/docs/plugins/reference/google.md +23 -0
- package/docs/plugins/reference/googlechat.md +23 -0
- package/docs/plugins/reference/gradium.md +23 -0
- package/docs/plugins/reference/groq.md +23 -0
- package/docs/plugins/reference/huggingface.md +23 -0
- package/docs/plugins/reference/imessage.md +23 -0
- package/docs/plugins/reference/inworld.md +23 -0
- package/docs/plugins/reference/irc.md +23 -0
- package/docs/plugins/reference/kilocode.md +23 -0
- package/docs/plugins/reference/kimi.md +23 -0
- package/docs/plugins/reference/line.md +23 -0
- package/docs/plugins/reference/litellm.md +23 -0
- package/docs/plugins/reference/llm-task.md +19 -0
- package/docs/plugins/reference/lmstudio.md +23 -0
- package/docs/plugins/reference/lobster.md +19 -0
- package/docs/plugins/reference/matrix.md +23 -0
- package/docs/plugins/reference/mattermost.md +23 -0
- package/docs/plugins/reference/memory-core.md +19 -0
- package/docs/plugins/reference/memory-lancedb.md +23 -0
- package/docs/plugins/reference/memory-wiki.md +23 -0
- package/docs/plugins/reference/microsoft-foundry.md +19 -0
- package/docs/plugins/reference/microsoft.md +19 -0
- package/docs/plugins/reference/migrate-claude.md +19 -0
- package/docs/plugins/reference/migrate-hermes.md +19 -0
- package/docs/plugins/reference/minimax.md +23 -0
- package/docs/plugins/reference/mistral.md +23 -0
- package/docs/plugins/reference/moonshot.md +23 -0
- package/docs/plugins/reference/msteams.md +23 -0
- package/docs/plugins/reference/nextcloud-talk.md +23 -0
- package/docs/plugins/reference/nostr.md +23 -0
- package/docs/plugins/reference/nvidia.md +23 -0
- package/docs/plugins/reference/oc-path.md +23 -0
- package/docs/plugins/reference/ollama.md +23 -0
- package/docs/plugins/reference/open-prose.md +19 -0
- package/docs/plugins/reference/openai.md +23 -0
- package/docs/plugins/reference/opencode-go.md +23 -0
- package/docs/plugins/reference/opencode.md +23 -0
- package/docs/plugins/reference/openrouter.md +23 -0
- package/docs/plugins/reference/openshell.md +19 -0
- package/docs/plugins/reference/perplexity.md +23 -0
- package/docs/plugins/reference/policy.md +23 -0
- package/docs/plugins/reference/qa-channel.md +23 -0
- package/docs/plugins/reference/qa-lab.md +19 -0
- package/docs/plugins/reference/qa-matrix.md +19 -0
- package/docs/plugins/reference/qianfan.md +23 -0
- package/docs/plugins/reference/qqbot.md +23 -0
- package/docs/plugins/reference/qwen.md +23 -0
- package/docs/plugins/reference/runway.md +23 -0
- package/docs/plugins/reference/searxng.md +19 -0
- package/docs/plugins/reference/senseaudio.md +23 -0
- package/docs/plugins/reference/sglang.md +23 -0
- package/docs/plugins/reference/signal.md +23 -0
- package/docs/plugins/reference/skill-workshop.md +23 -0
- package/docs/plugins/reference/slack.md +23 -0
- package/docs/plugins/reference/stepfun.md +23 -0
- package/docs/plugins/reference/synology-chat.md +23 -0
- package/docs/plugins/reference/synthetic.md +23 -0
- package/docs/plugins/reference/tavily.md +23 -0
- package/docs/plugins/reference/telegram.md +23 -0
- package/docs/plugins/reference/tencent.md +23 -0
- package/docs/plugins/reference/tlon.md +23 -0
- package/docs/plugins/reference/together.md +23 -0
- package/docs/plugins/reference/tokenjuice.md +23 -0
- package/docs/plugins/reference/tts-local-cli.md +19 -0
- package/docs/plugins/reference/twitch.md +23 -0
- package/docs/plugins/reference/venice.md +23 -0
- package/docs/plugins/reference/vercel-ai-gateway.md +23 -0
- package/docs/plugins/reference/vllm.md +23 -0
- package/docs/plugins/reference/voice-call.md +23 -0
- package/docs/plugins/reference/volcengine.md +23 -0
- package/docs/plugins/reference/voyage.md +19 -0
- package/docs/plugins/reference/vydra.md +23 -0
- package/docs/plugins/reference/web-readability.md +19 -0
- package/docs/plugins/reference/webhooks.md +23 -0
- package/docs/plugins/reference/whatsapp.md +23 -0
- package/docs/plugins/reference/xai.md +23 -0
- package/docs/plugins/reference/xiaomi.md +23 -0
- package/docs/plugins/reference/zai.md +23 -0
- package/docs/plugins/reference/zalo.md +23 -0
- package/docs/plugins/reference/zalouser.md +24 -0
- package/docs/plugins/reference.md +138 -0
- package/docs/plugins/sdk-agent-harness.md +339 -0
- package/docs/plugins/sdk-channel-ingress.md +137 -0
- package/docs/plugins/sdk-channel-message.md +458 -0
- package/docs/plugins/sdk-channel-plugins.md +762 -0
- package/docs/plugins/sdk-channel-turn.md +580 -0
- package/docs/plugins/sdk-entrypoints.md +333 -0
- package/docs/plugins/sdk-migration.md +949 -0
- package/docs/plugins/sdk-overview.md +501 -0
- package/docs/plugins/sdk-provider-plugins.md +807 -0
- package/docs/plugins/sdk-runtime.md +676 -0
- package/docs/plugins/sdk-setup.md +550 -0
- package/docs/plugins/sdk-subpaths.md +396 -0
- package/docs/plugins/sdk-testing.md +401 -0
- package/docs/plugins/skill-workshop.md +713 -0
- package/docs/plugins/tool-plugins.md +411 -0
- package/docs/plugins/voice-call.md +943 -0
- package/docs/plugins/webhooks.md +192 -0
- package/docs/plugins/zalouser.md +86 -0
- package/docs/prose.md +137 -0
- package/docs/providers/alibaba.md +158 -0
- package/docs/providers/anthropic.md +344 -0
- package/docs/providers/arcee.md +144 -0
- package/docs/providers/azure-speech.md +119 -0
- package/docs/providers/bedrock-mantle.md +211 -0
- package/docs/providers/bedrock.md +414 -0
- package/docs/providers/cerebras.md +130 -0
- package/docs/providers/chutes.md +153 -0
- package/docs/providers/claude-max-api-proxy.md +188 -0
- package/docs/providers/cloudflare-ai-gateway.md +119 -0
- package/docs/providers/comfy.md +362 -0
- package/docs/providers/deepgram.md +184 -0
- package/docs/providers/deepinfra.md +87 -0
- package/docs/providers/deepseek.md +146 -0
- package/docs/providers/ds4.md +309 -0
- package/docs/providers/elevenlabs.md +130 -0
- package/docs/providers/fal.md +204 -0
- package/docs/providers/fireworks.md +144 -0
- package/docs/providers/github-copilot.md +225 -0
- package/docs/providers/glm.md +137 -0
- package/docs/providers/google.md +472 -0
- package/docs/providers/gradium.md +123 -0
- package/docs/providers/groq.md +180 -0
- package/docs/providers/huggingface.md +235 -0
- package/docs/providers/index.md +102 -0
- package/docs/providers/inferrs.md +272 -0
- package/docs/providers/inworld.md +120 -0
- package/docs/providers/kilocode.md +135 -0
- package/docs/providers/litellm.md +234 -0
- package/docs/providers/lmstudio.md +224 -0
- package/docs/providers/minimax.md +505 -0
- package/docs/providers/mistral.md +235 -0
- package/docs/providers/models.md +65 -0
- package/docs/providers/moonshot.md +413 -0
- package/docs/providers/nvidia.md +140 -0
- package/docs/providers/ollama.md +1180 -0
- package/docs/providers/openai.md +1057 -0
- package/docs/providers/opencode-go.md +123 -0
- package/docs/providers/opencode.md +149 -0
- package/docs/providers/openrouter.md +349 -0
- package/docs/providers/perplexity-provider.md +123 -0
- package/docs/providers/qianfan.md +132 -0
- package/docs/providers/qwen.md +332 -0
- package/docs/providers/runway.md +103 -0
- package/docs/providers/senseaudio.md +68 -0
- package/docs/providers/sglang.md +161 -0
- package/docs/providers/stepfun.md +229 -0
- package/docs/providers/synthetic.md +154 -0
- package/docs/providers/tencent.md +130 -0
- package/docs/providers/together.md +141 -0
- package/docs/providers/venice.md +315 -0
- package/docs/providers/vercel-ai-gateway.md +128 -0
- package/docs/providers/vllm.md +383 -0
- package/docs/providers/volcengine.md +199 -0
- package/docs/providers/vydra.md +180 -0
- package/docs/providers/xai.md +560 -0
- package/docs/providers/xiaomi.md +188 -0
- package/docs/providers/zai.md +203 -0
- package/docs/refactor/access.md +9 -0
- package/docs/refactor/acp.md +298 -0
- package/docs/refactor/canvas.md +131 -0
- package/docs/refactor/ingress-core.md +341 -0
- package/docs/reference/AGENTS.default.md +129 -0
- package/docs/reference/RELEASING.md +767 -0
- package/docs/reference/api-usage-costs.md +202 -0
- package/docs/reference/application-modernization-plan.md +208 -0
- package/docs/reference/code-mode.md +757 -0
- package/docs/reference/credits.md +33 -0
- package/docs/reference/device-models.md +50 -0
- package/docs/reference/full-release-validation.md +202 -0
- package/docs/reference/memory-config.md +630 -0
- package/docs/reference/openclaw-sdk-api-design.md +390 -0
- package/docs/reference/prompt-caching.md +358 -0
- package/docs/reference/rich-output-protocol.md +79 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +159 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +663 -0
- package/docs/reference/session-management-compaction.md +461 -0
- package/docs/reference/templates/AGENTS.dev.md +89 -0
- package/docs/reference/templates/AGENTS.md +225 -0
- package/docs/reference/templates/BOOT.md +16 -0
- package/docs/reference/templates/BOOTSTRAP.md +66 -0
- package/docs/reference/templates/HEARTBEAT.md +16 -0
- package/docs/reference/templates/IDENTITY.dev.md +52 -0
- package/docs/reference/templates/IDENTITY.md +34 -0
- package/docs/reference/templates/SOUL.dev.md +82 -0
- package/docs/reference/templates/SOUL.md +49 -0
- package/docs/reference/templates/TOOLS.dev.md +29 -0
- package/docs/reference/templates/TOOLS.md +51 -0
- package/docs/reference/templates/USER.dev.md +23 -0
- package/docs/reference/templates/USER.md +28 -0
- package/docs/reference/test.md +239 -0
- package/docs/reference/token-use.md +233 -0
- package/docs/reference/transcript-hygiene.md +214 -0
- package/docs/reference/wizard.md +252 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +101 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
- package/docs/security/formal-verification.md +170 -0
- package/docs/security/incident-response.md +59 -0
- package/docs/security/network-proxy.md +268 -0
- package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +12 -0
- package/docs/snippets/plugin-publish/minimal-package.json +16 -0
- package/docs/start/bootstrapping.md +49 -0
- package/docs/start/docs-directory.md +69 -0
- package/docs/start/getting-started.md +152 -0
- package/docs/start/hubs.md +201 -0
- package/docs/start/lore.md +223 -0
- package/docs/start/onboarding-overview.md +72 -0
- package/docs/start/onboarding.md +95 -0
- package/docs/start/openclaw.md +244 -0
- package/docs/start/quickstart.md +25 -0
- package/docs/start/setup.md +178 -0
- package/docs/start/showcase.md +383 -0
- package/docs/start/wizard-cli-automation.md +232 -0
- package/docs/start/wizard-cli-reference.md +331 -0
- package/docs/start/wizard.md +141 -0
- package/docs/style.css +184 -0
- package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +316 -0
- package/docs/tools/acp-agents-setup.md +352 -0
- package/docs/tools/acp-agents.md +847 -0
- package/docs/tools/agent-send.md +112 -0
- package/docs/tools/apply-patch.md +64 -0
- package/docs/tools/brave-search.md +139 -0
- package/docs/tools/browser-control.md +391 -0
- package/docs/tools/browser-linux-troubleshooting.md +173 -0
- package/docs/tools/browser-login.md +77 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +219 -0
- package/docs/tools/browser.md +769 -0
- package/docs/tools/btw.md +159 -0
- package/docs/tools/capability-cookbook.md +12 -0
- package/docs/tools/clawhub.md +5 -0
- package/docs/tools/code-execution.md +173 -0
- package/docs/tools/creating-skills.md +120 -0
- package/docs/tools/diffs.md +506 -0
- package/docs/tools/duckduckgo-search.md +109 -0
- package/docs/tools/elevated.md +128 -0
- package/docs/tools/exa-search.md +152 -0
- package/docs/tools/exec-approvals-advanced.md +360 -0
- package/docs/tools/exec-approvals.md +474 -0
- package/docs/tools/exec.md +282 -0
- package/docs/tools/firecrawl.md +155 -0
- package/docs/tools/gemini-search.md +114 -0
- package/docs/tools/grok-search.md +113 -0
- package/docs/tools/image-generation.md +433 -0
- package/docs/tools/index.md +178 -0
- package/docs/tools/kimi-search.md +105 -0
- package/docs/tools/llm-task.md +137 -0
- package/docs/tools/lobster.md +365 -0
- package/docs/tools/loop-detection.md +154 -0
- package/docs/tools/media-overview.md +157 -0
- package/docs/tools/minimax-search.md +102 -0
- package/docs/tools/multi-agent-sandbox-tools.md +409 -0
- package/docs/tools/music-generation.md +371 -0
- package/docs/tools/ollama-search.md +153 -0
- package/docs/tools/pdf.md +195 -0
- package/docs/tools/perplexity-search.md +220 -0
- package/docs/tools/plugin.md +327 -0
- package/docs/tools/reactions.md +100 -0
- package/docs/tools/searxng-search.md +141 -0
- package/docs/tools/skills-config.md +195 -0
- package/docs/tools/skills.md +535 -0
- package/docs/tools/slash-commands.md +488 -0
- package/docs/tools/steer.md +84 -0
- package/docs/tools/subagents.md +650 -0
- package/docs/tools/tavily.md +162 -0
- package/docs/tools/thinking.md +140 -0
- package/docs/tools/tokenjuice.md +81 -0
- package/docs/tools/tool-search.md +269 -0
- package/docs/tools/trajectory.md +229 -0
- package/docs/tools/tts.md +1004 -0
- package/docs/tools/video-generation.md +552 -0
- package/docs/tools/web-fetch.md +195 -0
- package/docs/tools/web.md +459 -0
- package/docs/tts.md +11 -0
- package/docs/vps.md +139 -0
- package/docs/web/control-ui.md +503 -0
- package/docs/web/dashboard.md +107 -0
- package/docs/web/index.md +133 -0
- package/docs/web/tui.md +246 -0
- package/docs/web/webchat.md +99 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/nodmix.mjs +487 -0
- package/package.json +1852 -0
- package/patches/.gitkeep +0 -0
- package/patches/@agentclientprotocol__claude-agent-acp@0.36.1.patch +41 -0
- package/pnpm-workspace.yaml +63 -0
- package/scripts/crabbox-wrapper.mjs +353 -0
- package/scripts/lib/official-external-channel-catalog.json +559 -0
- package/scripts/lib/official-external-plugin-catalog.json +192 -0
- package/scripts/lib/official-external-provider-catalog.json +117 -0
- package/scripts/lib/package-dist-imports.mjs +171 -0
- package/scripts/npm-runner.mjs +91 -0
- package/scripts/postinstall-bundled-plugins.mjs +978 -0
- package/scripts/preinstall-package-manager-warning.mjs +64 -0
- package/scripts/windows-cmd-helpers.mjs +20 -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/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +78 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +149 -0
- package/skills/diagram-maker/SKILL.md +53 -0
- package/skills/diagram-maker/references/excalidraw-patterns.md +85 -0
- package/skills/diagram-maker/references/svg-template.md +112 -0
- package/skills/discord/SKILL.md +136 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +47 -0
- package/skills/gh-issues/SKILL.md +213 -0
- package/skills/gifgrep/SKILL.md +85 -0
- package/skills/github/SKILL.md +84 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +105 -0
- package/skills/himalaya/SKILL.md +80 -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/meme-maker/SKILL.md +42 -0
- package/skills/meme-maker/references/templates.json +358 -0
- package/skills/meme-maker/scripts/meme.mjs +398 -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 +319 -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/node-inspect-debugger/SKILL.md +85 -0
- package/skills/notion/SKILL.md +150 -0
- package/skills/obsidian/SKILL.md +119 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +71 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +154 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +126 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/pyproject.toml +10 -0
- package/skills/python-debugpy/SKILL.md +73 -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 +78 -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 +169 -0
- package/skills/skill-creator/scripts/test_package_skill.py +161 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +116 -0
- package/skills/slack/SKILL.md +78 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spike/SKILL.md +51 -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 +91 -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 +64 -0
- package/skills/xurl/SKILL.md +120 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "How to run tests locally (vitest) and when to use force/coverage modes"
|
|
3
|
+
read_when:
|
|
4
|
+
- Running or fixing tests
|
|
5
|
+
title: "Tests"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
- Full testing kit (suites, live, Docker): [Testing](/help/testing)
|
|
9
|
+
- Update and plugin package validation: [Testing updates and plugins](/help/testing-updates-plugins)
|
|
10
|
+
|
|
11
|
+
- `pnpm test:force`: Kills any lingering gateway process holding the default control port, then runs the full Vitest suite with an isolated gateway port so server tests don't collide with a running instance. Use this when a prior gateway run left port 18789 occupied.
|
|
12
|
+
- `pnpm test:coverage`: Runs the unit suite with V8 coverage (via `vitest.unit.config.ts`). This is a default-unit-lane coverage gate, not whole-repo all-file coverage. Thresholds are 70% lines/functions/statements and 55% branches. Because `coverage.all` is false and the default lane scopes coverage includes to non-fast unit tests with sibling source files, the gate measures source owned by this lane instead of every transitive import it happens to load.
|
|
13
|
+
- `pnpm test:coverage:changed`: Runs unit coverage only for files changed since `origin/main`.
|
|
14
|
+
- `pnpm test:changed`: cheap smart changed test run. It runs precise targets from direct test edits, sibling `*.test.ts` files, explicit source mappings, and the local import graph. Broad/config/package changes are skipped unless they map to precise tests.
|
|
15
|
+
- `NODMIX_TEST_CHANGED_BROAD=1 pnpm test:changed`: explicit broad changed test run. Use it when a test harness/config/package edit should fall back to Vitest's broader changed-test behavior.
|
|
16
|
+
- `pnpm changed:lanes`: shows the architectural lanes triggered by the diff against `origin/main`.
|
|
17
|
+
- `pnpm check:changed`: runs the smart changed check gate for the diff against `origin/main`. It runs typecheck, lint, and guard commands for the affected architectural lanes, but does not run Vitest tests. Use `pnpm test:changed` or explicit `pnpm test <target>` for test proof.
|
|
18
|
+
- Codex worktrees and linked/sparse checkouts: avoid direct local `pnpm test*`, `pnpm check*`, and `pnpm crabbox:run` unless you have verified pnpm will not reconcile dependencies. For tiny explicit-file proof use `node scripts/run-vitest.mjs <path-or-filter>`; for changed gates or broad proof use `node scripts/crabbox-wrapper.mjs run --provider blacksmith-testbox ... --shell -- "pnpm check:changed"` so pnpm runs inside Testbox.
|
|
19
|
+
- `NODMIX_HEAVY_CHECK_LOCK_SCOPE=worktree <local-heavy-check command>`: keeps heavy-check serialization inside the current worktree instead of the Git common dir for commands such as `pnpm check:changed` and targeted `pnpm test ...`. Use it only on high-capacity local hosts when you intentionally run independent checks across linked worktrees.
|
|
20
|
+
- `pnpm test`: routes explicit file/directory targets through scoped Vitest lanes. Untargeted runs use fixed shard groups and expand to leaf configs for local parallel execution; the extension group always expands to the per-extension shard configs instead of one giant root-project process.
|
|
21
|
+
- Test wrapper runs end with a short `[test] passed|failed|skipped ... in ...` summary. Vitest's own duration line stays the per-shard detail.
|
|
22
|
+
- Shared Nodmix test state: use `src/test-utils/nodmix-test-state.ts` from Vitest when a test needs an isolated `HOME`, `NODMIX_STATE_DIR`, `NODMIX_CONFIG_PATH`, config fixture, workspace, agent dir, or auth-profile store.
|
|
23
|
+
- Process E2E helpers: use `test/helpers/nodmix-test-instance.ts` when a Vitest process-level E2E test needs a running Gateway, CLI env, log capture, and cleanup in one place.
|
|
24
|
+
- Docker/Bash E2E helpers: lanes that source `scripts/lib/docker-e2e-image.sh` can pass `docker_e2e_test_state_shell_b64 <label> <scenario>` into the container and decode it with `scripts/lib/nodmix-e2e-instance.sh`; multi-home scripts can pass `docker_e2e_test_state_function_b64` and call `nodmix_test_state_create <label> <scenario>` in each flow. Lower-level callers can use `scripts/lib/nodmix-test-state.mjs shell --label <name> --scenario <name>` for an in-container shell snippet, or `node scripts/lib/nodmix-test-state.mjs -- create --label <name> --scenario <name> --env-file <path> --json` for a sourceable host env file. The `--` before `create` keeps newer Node runtimes from treating `--env-file` as a Node flag. Docker/Bash lanes that launch a Gateway can source `scripts/lib/nodmix-e2e-instance.sh` inside the container for entrypoint resolution, mock OpenAI startup, Gateway foreground/background launch, readiness probes, state env export, log dumps, and process cleanup.
|
|
25
|
+
- Full, extension, and include-pattern shard runs update local timing data in `.artifacts/vitest-shard-timings.json`; later whole-config runs use those timings to balance slow and fast shards. Include-pattern CI shards append the shard name to the timing key, which keeps filtered shard timings visible without replacing whole-config timing data. Set `NODMIX_TEST_PROJECTS_TIMINGS=0` to ignore the local timing artifact.
|
|
26
|
+
- Selected `plugin-sdk` and `commands` test files now route through dedicated light lanes that keep only `test/setup.ts`, leaving runtime-heavy cases on their existing lanes.
|
|
27
|
+
- Source files with sibling tests map to that sibling before falling back to wider directory globs. Helper edits under `src/channels/plugins/contracts/test-helpers`, `src/plugin-sdk/test-helpers`, and `src/plugins/contracts` use a local import graph to run importing tests instead of broad-running every shard when the dependency path is precise.
|
|
28
|
+
- `auto-reply` now also splits into three dedicated configs (`core`, `top-level`, `reply`) so the reply harness does not dominate the lighter top-level status/token/helper tests.
|
|
29
|
+
- Base Vitest config now defaults to `pool: "threads"` and `isolate: false`, with the shared non-isolated runner enabled across the repo configs.
|
|
30
|
+
- `pnpm test:channels` runs `vitest.channels.config.ts`.
|
|
31
|
+
- `pnpm test:extensions` and `pnpm test extensions` run all extension/plugin shards. Heavy channel plugins, the browser plugin, and OpenAI run as dedicated shards; other plugin groups stay batched. Use `pnpm test extensions/<id>` for one bundled plugin lane.
|
|
32
|
+
- `pnpm test:perf:imports`: enables Vitest import-duration + import-breakdown reporting, while still using scoped lane routing for explicit file/directory targets.
|
|
33
|
+
- `pnpm test:perf:imports:changed`: same import profiling, but only for files changed since `origin/main`.
|
|
34
|
+
- `pnpm test:perf:changed:bench -- --ref <git-ref>` benchmarks the routed changed-mode path against the native root-project run for the same committed git diff.
|
|
35
|
+
- `pnpm test:perf:changed:bench -- --worktree` benchmarks the current worktree change set without committing first.
|
|
36
|
+
- `pnpm test:perf:profile:main`: writes a CPU profile for the Vitest main thread (`.artifacts/vitest-main-profile`).
|
|
37
|
+
- `pnpm test:perf:profile:runner`: writes CPU + heap profiles for the unit runner (`.artifacts/vitest-runner-profile`).
|
|
38
|
+
- `pnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.json`: runs every full-suite Vitest leaf config serially and writes grouped duration data plus per-config JSON/log artifacts. The Test Performance Agent uses this as its baseline before attempting slow-test fixes.
|
|
39
|
+
- `pnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.json`: compares grouped reports after a performance-focused change.
|
|
40
|
+
- Gateway integration: opt-in via `NODMIX_TEST_INCLUDE_GATEWAY=1 pnpm test` or `pnpm test:gateway`.
|
|
41
|
+
- `pnpm test:e2e`: Runs gateway end-to-end smoke tests (multi-instance WS/HTTP/node pairing). Defaults to `threads` + `isolate: false` with adaptive workers in `vitest.e2e.config.ts`; tune with `NODMIX_E2E_WORKERS=<n>` and set `NODMIX_E2E_VERBOSE=1` for verbose logs.
|
|
42
|
+
- `pnpm test:live`: Runs provider live tests (minimax/zai). Requires API keys and `LIVE=1` (or provider-specific `*_LIVE_TEST=1`) to unskip.
|
|
43
|
+
- `pnpm test:docker:all`: Builds the shared live-test image, packs Nodmix once as an npm tarball, builds/reuses a bare Node/Git runner image plus a functional image that installs that tarball into `/app`, then runs Docker smoke lanes with `NODMIX_SKIP_DOCKER_BUILD=1` through a weighted scheduler. The bare image (`NODMIX_DOCKER_E2E_BARE_IMAGE`) is used for installer/update/plugin-dependency lanes; those lanes mount the prebuilt tarball instead of using copied repo sources. The functional image (`NODMIX_DOCKER_E2E_FUNCTIONAL_IMAGE`) is used for normal built-app functionality lanes. `scripts/package-nodmix-for-docker.mjs` is the single local/CI package packer and validates the tarball plus `dist/postinstall-inventory.json` before Docker consumes it. Docker lane definitions live in `scripts/lib/docker-e2e-scenarios.mjs`; planner logic lives in `scripts/lib/docker-e2e-plan.mjs`; `scripts/test-docker-all.mjs` executes the selected plan. `node scripts/test-docker-all.mjs --plan-json` emits the scheduler-owned CI plan for selected lanes, image kinds, package/live-image needs, state scenarios, and credential checks without building or running Docker. `NODMIX_DOCKER_ALL_PARALLELISM=<n>` controls process slots and defaults to 10; `NODMIX_DOCKER_ALL_TAIL_PARALLELISM=<n>` controls the provider-sensitive tail pool and defaults to 10. Heavy lane caps default to `NODMIX_DOCKER_ALL_LIVE_LIMIT=9`, `NODMIX_DOCKER_ALL_NPM_LIMIT=10`, and `NODMIX_DOCKER_ALL_SERVICE_LIMIT=7`; provider caps default to one heavy lane per provider via `NODMIX_DOCKER_ALL_LIVE_CLAUDE_LIMIT=4`, `NODMIX_DOCKER_ALL_LIVE_CODEX_LIMIT=4`, and `NODMIX_DOCKER_ALL_LIVE_GEMINI_LIMIT=4`. Use `NODMIX_DOCKER_ALL_WEIGHT_LIMIT` or `NODMIX_DOCKER_ALL_DOCKER_LIMIT` for larger hosts. If one lane exceeds the effective weight or resource cap on a low-parallelism host, it can still start from an empty pool and will run alone until it releases capacity. Lane starts are staggered by 2 seconds by default to avoid local Docker daemon create storms; override with `NODMIX_DOCKER_ALL_START_STAGGER_MS=<ms>`. The runner preflights Docker by default, cleans stale Nodmix E2E containers, emits active-lane status every 30 seconds, shares provider CLI tool caches between compatible lanes, retries transient live-provider failures once by default (`NODMIX_DOCKER_ALL_LIVE_RETRIES=<n>`), and stores lane timings in `.artifacts/docker-tests/lane-timings.json` for longest-first ordering on later runs. Use `NODMIX_DOCKER_ALL_DRY_RUN=1` to print the lane manifest without running Docker, `NODMIX_DOCKER_ALL_STATUS_INTERVAL_MS=<ms>` to tune status output, or `NODMIX_DOCKER_ALL_TIMINGS=0` to disable timing reuse. Use `NODMIX_DOCKER_ALL_LIVE_MODE=skip` for deterministic/local lanes only or `NODMIX_DOCKER_ALL_LIVE_MODE=only` for live-provider lanes only; package aliases are `pnpm test:docker:local:all` and `pnpm test:docker:live:all`. Live-only mode merges main and tail live lanes into one longest-first pool so provider buckets can pack Claude, Codex, and Gemini work together. The runner stops scheduling new pooled lanes after the first failure unless `NODMIX_DOCKER_ALL_FAIL_FAST=0` is set, and each lane has a 120-minute fallback timeout overrideable with `NODMIX_DOCKER_ALL_LANE_TIMEOUT_MS`; selected live/tail lanes use tighter per-lane caps. CLI backend Docker setup commands have their own timeout via `NODMIX_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS` (default 180). Per-lane logs, `summary.json`, `failures.json`, and phase timings are written under `.artifacts/docker-tests/<run-id>/`; use `pnpm test:docker:timings <summary.json>` to inspect slow lanes and `pnpm test:docker:rerun <run-id|summary.json|failures.json>` to print cheap targeted rerun commands.
|
|
44
|
+
- `pnpm test:docker:browser-cdp-snapshot`: Builds a Chromium-backed source E2E container, starts raw CDP plus an isolated Gateway, runs `browser doctor --deep`, and verifies CDP role snapshots include link URLs, cursor-promoted clickables, iframe refs, and frame metadata.
|
|
45
|
+
- `pnpm test:docker:skill-install`: Installs the packed Nodmix tarball in a bare Docker runner, disables `skills.install.allowUploadedArchives`, resolves a current skill slug from live ClawHub search, installs it through `nodmix skills install`, and verifies `SKILL.md`, `.clawhub/origin.json`, `.clawhub/lock.json`, and `skills info --json`.
|
|
46
|
+
- CLI backend live Docker probes can be run as focused lanes, for example `pnpm test:docker:live-cli-backend:claude`, `pnpm test:docker:live-cli-backend:claude:resume`, or `pnpm test:docker:live-cli-backend:claude:mcp`. Gemini has matching `:resume` and `:mcp` aliases.
|
|
47
|
+
- `pnpm test:docker:openwebui`: Starts Dockerized Nodmix + Open WebUI, signs in through Open WebUI, checks `/api/models`, then runs a real proxied chat through `/api/chat/completions`. Requires a usable live model key, pulls an external Open WebUI image, and is not expected to be CI-stable like the normal unit/e2e suites.
|
|
48
|
+
- `pnpm test:docker:mcp-channels`: Starts a seeded Gateway container and a second client container that spawns `nodmix mcp serve`, then verifies routed conversation discovery, transcript reads, attachment metadata, live event queue behavior, outbound send routing, and Claude-style channel + permission notifications over the real stdio bridge. The Claude notification assertion reads the raw stdio MCP frames directly so the smoke reflects what the bridge actually emits.
|
|
49
|
+
- `pnpm test:docker:upgrade-survivor`: Installs the packed Nodmix tarball over a dirty old-user fixture, runs package update plus non-interactive doctor without live provider or channel keys, then starts a loopback Gateway and checks that agents, channel config, plugin allowlists, workspace/session files, stale legacy plugin dependency state, startup, and RPC status survive.
|
|
50
|
+
- `pnpm test:docker:published-upgrade-survivor`: Installs `nodmix@latest` by default, seeds realistic existing-user files without live provider or channel keys, configures that baseline with a baked `nodmix config set` command recipe, updates that published install to the packed Nodmix tarball, runs non-interactive doctor, writes `.artifacts/upgrade-survivor/summary.json`, then starts a loopback Gateway and checks that configured intents, workspace/session files, stale plugin config and legacy dependency state, startup, `/healthz`, `/readyz`, and RPC status survive or repair cleanly. Override one baseline with `NODMIX_UPGRADE_SURVIVOR_BASELINE_SPEC`, expand an exact local matrix with `NODMIX_UPGRADE_SURVIVOR_BASELINE_SPECS` such as `nodmix@2026.5.2 nodmix@2026.4.23 nodmix@2026.4.15`, or add scenario fixtures with `NODMIX_UPGRADE_SURVIVOR_SCENARIOS=reported-issues`; the reported-issues set includes `configured-plugin-installs` to verify configured external Nodmix plugins install automatically during upgrade and `stale-source-plugin-shadow` to keep source-only plugin shadows from breaking startup. Package Acceptance exposes those as `published_upgrade_survivor_baseline`, `published_upgrade_survivor_baselines`, and `published_upgrade_survivor_scenarios`, and resolves meta baseline tokens such as `last-stable-4` or `all-since-2026.4.23` before handing exact package specs to Docker lanes.
|
|
51
|
+
- `pnpm test:docker:update-migration`: Runs the published-upgrade survivor harness in the cleanup-heavy `plugin-deps-cleanup` scenario, starting at `nodmix@2026.4.23` by default. The separate `Update Migration` workflow expands this lane with `baselines=all-since-2026.4.23` so every stable published package from `.23` onward updates to the candidate and proves configured-plugin dependency cleanup outside Full Release CI.
|
|
52
|
+
- `pnpm test:docker:plugins`: Runs install/update smoke for local path, `file:`, npm registry packages with hoisted dependencies, git moving refs, ClawHub fixtures, marketplace updates, and Claude-bundle enable/inspect.
|
|
53
|
+
|
|
54
|
+
## Local PR gate
|
|
55
|
+
|
|
56
|
+
For local PR land/gate checks, run:
|
|
57
|
+
|
|
58
|
+
- `pnpm check:changed`
|
|
59
|
+
- `pnpm check`
|
|
60
|
+
- `pnpm check:test-types`
|
|
61
|
+
- `pnpm build`
|
|
62
|
+
- `pnpm test`
|
|
63
|
+
- `pnpm check:docs`
|
|
64
|
+
|
|
65
|
+
If `pnpm test` flakes on a loaded host, rerun once before treating it as a regression, then isolate with `pnpm test <path/to/test>`. For memory-constrained hosts, use:
|
|
66
|
+
|
|
67
|
+
- `NODMIX_VITEST_MAX_WORKERS=1 pnpm test`
|
|
68
|
+
- `NODMIX_VITEST_FS_MODULE_CACHE_PATH=/tmp/nodmix-vitest-cache pnpm test:changed`
|
|
69
|
+
|
|
70
|
+
## Model latency bench (local keys)
|
|
71
|
+
|
|
72
|
+
Script: [`scripts/bench-model.ts`](https://github.com/nodmix/nodmix/blob/main/scripts/bench-model.ts)
|
|
73
|
+
|
|
74
|
+
Usage:
|
|
75
|
+
|
|
76
|
+
- `pnpm tsx scripts/bench-model.ts --runs 10`
|
|
77
|
+
- Optional env: `MINIMAX_API_KEY`, `MINIMAX_BASE_URL`, `MINIMAX_MODEL`, `ANTHROPIC_API_KEY`
|
|
78
|
+
- Default prompt: "Reply with a single word: ok. No punctuation or extra text."
|
|
79
|
+
|
|
80
|
+
Last run (2025-12-31, 20 runs):
|
|
81
|
+
|
|
82
|
+
- minimax median 1279ms (min 1114, max 2431)
|
|
83
|
+
- opus median 2454ms (min 1224, max 3170)
|
|
84
|
+
|
|
85
|
+
## CLI startup bench
|
|
86
|
+
|
|
87
|
+
Script: [`scripts/bench-cli-startup.ts`](https://github.com/nodmix/nodmix/blob/main/scripts/bench-cli-startup.ts)
|
|
88
|
+
|
|
89
|
+
Usage:
|
|
90
|
+
|
|
91
|
+
- `pnpm test:startup:bench`
|
|
92
|
+
- `pnpm test:startup:bench:smoke`
|
|
93
|
+
- `pnpm test:startup:bench:save`
|
|
94
|
+
- `pnpm test:startup:bench:update`
|
|
95
|
+
- `pnpm test:startup:bench:check`
|
|
96
|
+
- `pnpm tsx scripts/bench-cli-startup.ts`
|
|
97
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --runs 12`
|
|
98
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --preset real`
|
|
99
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --preset real --case status --case gatewayStatus --runs 3`
|
|
100
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --preset real --case tasksJson --case tasksListJson --case tasksAuditJson --runs 3`
|
|
101
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --entry nodmix.mjs --entry-secondary dist/entry.js --preset all`
|
|
102
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --preset all --output .artifacts/cli-startup-bench-all.json`
|
|
103
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --preset real --case gatewayStatusJson --output .artifacts/cli-startup-bench-smoke.json`
|
|
104
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --preset real --cpu-prof-dir .artifacts/cli-cpu`
|
|
105
|
+
- `pnpm tsx scripts/bench-cli-startup.ts --json`
|
|
106
|
+
|
|
107
|
+
Presets:
|
|
108
|
+
|
|
109
|
+
- `startup`: `--version`, `--help`, `health`, `health --json`, `status --json`, `status`
|
|
110
|
+
- `real`: `health`, `status`, `status --json`, `sessions`, `sessions --json`, `tasks --json`, `tasks list --json`, `tasks audit --json`, `agents list --json`, `gateway status`, `gateway status --json`, `gateway health --json`, `config get gateway.port`
|
|
111
|
+
- `all`: both presets
|
|
112
|
+
|
|
113
|
+
Output includes `sampleCount`, avg, p50, p95, min/max, exit-code/signal distribution, and max RSS summaries for each command. Optional `--cpu-prof-dir` / `--heap-prof-dir` writes V8 profiles per run so timing and profile capture use the same harness.
|
|
114
|
+
|
|
115
|
+
Saved output conventions:
|
|
116
|
+
|
|
117
|
+
- `pnpm test:startup:bench:smoke` writes the targeted smoke artifact at `.artifacts/cli-startup-bench-smoke.json`
|
|
118
|
+
- `pnpm test:startup:bench:save` writes the full-suite artifact at `.artifacts/cli-startup-bench-all.json` using `runs=5` and `warmup=1`
|
|
119
|
+
- `pnpm test:startup:bench:update` refreshes the checked-in baseline fixture at `test/fixtures/cli-startup-bench.json` using `runs=5` and `warmup=1`
|
|
120
|
+
|
|
121
|
+
Checked-in fixture:
|
|
122
|
+
|
|
123
|
+
- `test/fixtures/cli-startup-bench.json`
|
|
124
|
+
- Refresh with `pnpm test:startup:bench:update`
|
|
125
|
+
- Compare current results against the fixture with `pnpm test:startup:bench:check`
|
|
126
|
+
|
|
127
|
+
## Gateway startup bench
|
|
128
|
+
|
|
129
|
+
Script: [`scripts/bench-gateway-startup.ts`](https://github.com/nodmix/nodmix/blob/main/scripts/bench-gateway-startup.ts)
|
|
130
|
+
|
|
131
|
+
The benchmark defaults to the built CLI entry at `dist/entry.js`; run
|
|
132
|
+
`pnpm build` before using the package-script commands. To measure the source
|
|
133
|
+
runner instead, pass `--entry scripts/run-node.mjs` and keep those results
|
|
134
|
+
separate from built-entry baselines.
|
|
135
|
+
|
|
136
|
+
Usage:
|
|
137
|
+
|
|
138
|
+
- `pnpm test:startup:gateway -- --runs 5 --warmup 1`
|
|
139
|
+
- `pnpm test:startup:gateway -- --case default --runs 10 --warmup 1`
|
|
140
|
+
- `pnpm test:startup:gateway -- --case skipChannels --case fiftyPlugins --runs 5`
|
|
141
|
+
- `node --import tsx scripts/bench-gateway-startup.ts --case default --runs 5 --output .artifacts/gateway-startup.json`
|
|
142
|
+
- `node --import tsx scripts/bench-gateway-startup.ts --case default --runs 3 --cpu-prof-dir .artifacts/gateway-startup-cpu`
|
|
143
|
+
|
|
144
|
+
Case ids:
|
|
145
|
+
|
|
146
|
+
- `default`: normal Gateway startup.
|
|
147
|
+
- `skipChannels`: Gateway startup with channel startup skipped.
|
|
148
|
+
- `oneInternalHook`: one configured internal hook.
|
|
149
|
+
- `allInternalHooks`: all internal hooks.
|
|
150
|
+
- `fiftyPlugins`: 50 manifest plugins.
|
|
151
|
+
- `fiftyStartupLazyPlugins`: 50 startup-lazy manifest plugins.
|
|
152
|
+
|
|
153
|
+
Output includes first process output, `/healthz`, `/readyz`, HTTP listen log time,
|
|
154
|
+
Gateway ready log time, CPU time, CPU core ratio, max RSS, heap, startup trace
|
|
155
|
+
metrics, event-loop delay, and plugin lookup-table detail metrics. The script
|
|
156
|
+
enables `NODMIX_GATEWAY_STARTUP_TRACE=1` in the child Gateway environment.
|
|
157
|
+
|
|
158
|
+
Read `/healthz` as liveness: the HTTP server can answer. Read `/readyz` as
|
|
159
|
+
usable readiness: startup plugin sidecars, channels, and ready-critical
|
|
160
|
+
post-attach work have settled. Gateway startup hooks are dispatched
|
|
161
|
+
asynchronously and are not part of the readiness guarantee. Ready log time is the
|
|
162
|
+
Gateway's internal ready log timestamp; it is useful for process-side
|
|
163
|
+
attribution but is not a substitute for the external `/readyz` probe.
|
|
164
|
+
|
|
165
|
+
Use JSON output or `--output` when comparing changes. Use `--cpu-prof-dir` only
|
|
166
|
+
after the trace output points at import, compile, or CPU-bound work that cannot
|
|
167
|
+
be explained from phase timings alone. Do not compare source-runner results with
|
|
168
|
+
built `dist/entry.js` results as the same baseline.
|
|
169
|
+
|
|
170
|
+
## Gateway restart bench
|
|
171
|
+
|
|
172
|
+
Script: [`scripts/bench-gateway-restart.ts`](https://github.com/nodmix/nodmix/blob/main/scripts/bench-gateway-restart.ts)
|
|
173
|
+
|
|
174
|
+
The restart benchmark is supported on macOS and Linux only. It uses SIGUSR1 for
|
|
175
|
+
in-process restarts and fails immediately on Windows.
|
|
176
|
+
|
|
177
|
+
The benchmark defaults to the built CLI entry at `dist/entry.js`; run
|
|
178
|
+
`pnpm build` before using the package-script commands. To measure the source
|
|
179
|
+
runner instead, pass `--entry scripts/run-node.mjs` and keep those results
|
|
180
|
+
separate from built-entry baselines.
|
|
181
|
+
|
|
182
|
+
Usage:
|
|
183
|
+
|
|
184
|
+
- `pnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5`
|
|
185
|
+
- `pnpm test:restart:gateway -- --case default --runs 3 --restarts 3 --warmup 1`
|
|
186
|
+
- `pnpm test:restart:gateway -- --case skipChannelsAcpxProbe --case skipChannelsNoAcpxProbe --runs 1 --restarts 5`
|
|
187
|
+
- `node --import tsx scripts/bench-gateway-restart.ts --case fiftyPlugins --runs 1 --restarts 5 --output .artifacts/gateway-restart.json`
|
|
188
|
+
- `node --import tsx scripts/bench-gateway-restart.ts --json`
|
|
189
|
+
|
|
190
|
+
Case ids:
|
|
191
|
+
|
|
192
|
+
- `skipChannels`: restart with channels skipped.
|
|
193
|
+
- `skipChannelsAcpxProbe`: restart with channels skipped and ACPX startup probe on.
|
|
194
|
+
- `skipChannelsNoAcpxProbe`: restart with channels skipped and ACPX startup probe off.
|
|
195
|
+
- `default`: normal restart.
|
|
196
|
+
- `fiftyPlugins`: restart with 50 manifest plugins.
|
|
197
|
+
|
|
198
|
+
Output includes next `/healthz`, next `/readyz`, downtime, restart ready timing,
|
|
199
|
+
CPU, RSS, startup trace metrics for the replacement process, and restart trace
|
|
200
|
+
metrics for signal handling, active-work drain, close phases, next start, ready
|
|
201
|
+
timing, and memory snapshots. The script enables
|
|
202
|
+
`NODMIX_GATEWAY_STARTUP_TRACE=1` and `NODMIX_GATEWAY_RESTART_TRACE=1` in the
|
|
203
|
+
child Gateway environment.
|
|
204
|
+
|
|
205
|
+
Use this benchmark when a change touches restart signaling, close handlers,
|
|
206
|
+
startup-after-restart, sidecar shutdown, service handoff, or readiness after
|
|
207
|
+
restart. Start with `skipChannels` when isolating Gateway mechanics from channel
|
|
208
|
+
startup. Use `default` or plugin-heavy cases only after the narrow case explains
|
|
209
|
+
the restart path.
|
|
210
|
+
|
|
211
|
+
Trace metrics are attribution hints, not verdicts. A restart change should be
|
|
212
|
+
judged from multiple samples, the matching owner span, `/healthz` and `/readyz`
|
|
213
|
+
behavior, and the user-visible restart contract.
|
|
214
|
+
|
|
215
|
+
## Onboarding E2E (Docker)
|
|
216
|
+
|
|
217
|
+
Docker is optional; this is only needed for containerized onboarding smoke tests.
|
|
218
|
+
|
|
219
|
+
Full cold-start flow in a clean Linux container:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
scripts/e2e/onboard-docker.sh
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
This script drives the interactive wizard via a pseudo-tty, verifies config/workspace/session files, then starts the gateway and runs `nodmix health`.
|
|
226
|
+
|
|
227
|
+
## QR import smoke (Docker)
|
|
228
|
+
|
|
229
|
+
Ensures the maintained QR runtime helper loads under the supported Docker Node runtimes (Node 24 default, Node 22 compatible):
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
pnpm test:docker:qr
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Related
|
|
236
|
+
|
|
237
|
+
- [Testing](/help/testing)
|
|
238
|
+
- [Testing live](/help/testing-live)
|
|
239
|
+
- [Testing updates and plugins](/help/testing-updates-plugins)
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "How Nodmix builds prompt context and reports token usage + costs"
|
|
3
|
+
read_when:
|
|
4
|
+
- Explaining token usage, costs, or context windows
|
|
5
|
+
- Debugging context growth or compaction behavior
|
|
6
|
+
title: "Token use and costs"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Nodmix tracks **tokens**, not characters. Tokens are model-specific, but most
|
|
10
|
+
OpenAI-style models average ~4 characters per token for English text.
|
|
11
|
+
|
|
12
|
+
## How the system prompt is built
|
|
13
|
+
|
|
14
|
+
Nodmix assembles its own system prompt on every run. It includes:
|
|
15
|
+
|
|
16
|
+
- Tool list + short descriptions
|
|
17
|
+
- Skills list (only metadata; instructions are loaded on demand with `read`).
|
|
18
|
+
The compact skills block is bounded by `skills.limits.maxSkillsPromptChars`,
|
|
19
|
+
with optional per-agent override at
|
|
20
|
+
`agents.list[].skillsLimits.maxSkillsPromptChars`.
|
|
21
|
+
- Self-update instructions
|
|
22
|
+
- Workspace + bootstrap files (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md` when new, plus `MEMORY.md` when present). Lowercase root `memory.md` is not injected; it is legacy repair input for `nodmix doctor --fix` when paired with `MEMORY.md`. Large files are truncated by `agents.defaults.bootstrapMaxChars` (default: 12000), and total bootstrap injection is capped by `agents.defaults.bootstrapTotalMaxChars` (default: 60000). `memory/*.md` daily files are not part of the normal bootstrap prompt; they remain on-demand via memory tools on ordinary turns, but reset/startup model runs can prepend a one-shot startup-context block with recent daily memory for that first turn. Bare chat `/new` and `/reset` commands are acknowledged without invoking the model. The startup prelude is controlled by `agents.defaults.startupContext`.
|
|
23
|
+
- Time (UTC + user timezone)
|
|
24
|
+
- Reply tags + heartbeat behavior
|
|
25
|
+
- Runtime metadata (host/OS/model/thinking)
|
|
26
|
+
|
|
27
|
+
See the full breakdown in [System Prompt](/concepts/system-prompt).
|
|
28
|
+
|
|
29
|
+
## What counts in the context window
|
|
30
|
+
|
|
31
|
+
Everything the model receives counts toward the context limit:
|
|
32
|
+
|
|
33
|
+
- System prompt (all sections listed above)
|
|
34
|
+
- Conversation history (user + assistant messages)
|
|
35
|
+
- Tool calls and tool results
|
|
36
|
+
- Attachments/transcripts (images, audio, files)
|
|
37
|
+
- Compaction summaries and pruning artifacts
|
|
38
|
+
- Provider wrappers or safety headers (not visible, but still counted)
|
|
39
|
+
|
|
40
|
+
Some runtime-heavy surfaces have their own explicit caps:
|
|
41
|
+
|
|
42
|
+
- `agents.defaults.contextLimits.memoryGetMaxChars`
|
|
43
|
+
- `agents.defaults.contextLimits.memoryGetDefaultLines`
|
|
44
|
+
- `agents.defaults.contextLimits.toolResultMaxChars`
|
|
45
|
+
- `agents.defaults.contextLimits.postCompactionMaxChars`
|
|
46
|
+
|
|
47
|
+
Per-agent overrides live under `agents.list[].contextLimits`. These knobs are
|
|
48
|
+
for bounded runtime excerpts and injected runtime-owned blocks. They are
|
|
49
|
+
separate from bootstrap limits, startup-context limits, and skills prompt
|
|
50
|
+
limits.
|
|
51
|
+
|
|
52
|
+
For images, Nodmix downscales transcript/tool image payloads before provider calls.
|
|
53
|
+
Use `agents.defaults.imageMaxDimensionPx` (default: `1200`) to tune this:
|
|
54
|
+
|
|
55
|
+
- Lower values usually reduce vision-token usage and payload size.
|
|
56
|
+
- Higher values preserve more visual detail for OCR/UI-heavy screenshots.
|
|
57
|
+
|
|
58
|
+
For a practical breakdown (per injected file, tools, skills, and system prompt size), use `/context list` or `/context detail`. See [Context](/concepts/context).
|
|
59
|
+
|
|
60
|
+
## How to see current token usage
|
|
61
|
+
|
|
62
|
+
Use these in chat:
|
|
63
|
+
|
|
64
|
+
- `/status` → **emoji-rich status card** with the session model, context usage,
|
|
65
|
+
last response input/output tokens, and **estimated cost** (API key only).
|
|
66
|
+
- `/usage off|tokens|full` → appends a **per-response usage footer** to every reply.
|
|
67
|
+
- Persists per session (stored as `responseUsage`).
|
|
68
|
+
- OAuth auth **hides cost** (tokens only).
|
|
69
|
+
- `/usage cost` → shows a local cost summary from Nodmix session logs.
|
|
70
|
+
|
|
71
|
+
Other surfaces:
|
|
72
|
+
|
|
73
|
+
- **TUI/Web TUI:** `/status` + `/usage` are supported.
|
|
74
|
+
- **CLI:** `nodmix status --usage` and `nodmix channels list` show
|
|
75
|
+
normalized provider quota windows (`X% left`, not per-response costs).
|
|
76
|
+
Current usage-window providers: Anthropic, GitHub Copilot, Gemini CLI,
|
|
77
|
+
OpenAI Codex, MiniMax, Xiaomi, and z.ai.
|
|
78
|
+
|
|
79
|
+
Usage surfaces normalize common provider-native field aliases before display.
|
|
80
|
+
For OpenAI-family Responses traffic, that includes both `input_tokens` /
|
|
81
|
+
`output_tokens` and `prompt_tokens` / `completion_tokens`, so transport-specific
|
|
82
|
+
field names do not change `/status`, `/usage`, or session summaries.
|
|
83
|
+
Gemini CLI JSON usage is normalized too: reply text comes from `response`, and
|
|
84
|
+
`stats.cached` maps to `cacheRead` with `stats.input_tokens - stats.cached`
|
|
85
|
+
used when the CLI omits an explicit `stats.input` field.
|
|
86
|
+
For native OpenAI-family Responses traffic, WebSocket/SSE usage aliases are
|
|
87
|
+
normalized the same way, and totals fall back to normalized input + output when
|
|
88
|
+
`total_tokens` is missing or `0`.
|
|
89
|
+
When the current session snapshot is sparse, `/status` and `session_status` can
|
|
90
|
+
also recover token/cache counters and the active runtime model label from the
|
|
91
|
+
most recent transcript usage log. Existing nonzero live values still take
|
|
92
|
+
precedence over transcript fallback values, and larger prompt-oriented
|
|
93
|
+
transcript totals can win when stored totals are missing or smaller.
|
|
94
|
+
Usage auth for provider quota windows comes from provider-specific hooks when
|
|
95
|
+
available; otherwise Nodmix falls back to matching OAuth/API-key credentials
|
|
96
|
+
from auth profiles, env, or config.
|
|
97
|
+
Assistant transcript entries persist the same normalized usage shape, including
|
|
98
|
+
`usage.cost` when the active model has pricing configured and the provider
|
|
99
|
+
returns usage metadata. This gives `/usage cost` and transcript-backed session
|
|
100
|
+
status a stable source even after the live runtime state is gone.
|
|
101
|
+
|
|
102
|
+
Nodmix keeps provider usage accounting separate from the current context
|
|
103
|
+
snapshot. Provider `usage.total` can include cached input, output, and multiple
|
|
104
|
+
tool-loop model calls, so it is useful for cost and telemetry but can overstate
|
|
105
|
+
the live context window. Context displays and diagnostics use the latest prompt
|
|
106
|
+
snapshot (`promptTokens`, or the last model call when no prompt snapshot is
|
|
107
|
+
available) for `context.used`.
|
|
108
|
+
|
|
109
|
+
## Cost estimation (when shown)
|
|
110
|
+
|
|
111
|
+
Costs are estimated from your model pricing config:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
models.providers.<provider>.models[].cost
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
These are **USD per 1M tokens** for `input`, `output`, `cacheRead`, and
|
|
118
|
+
`cacheWrite`. If pricing is missing, Nodmix shows tokens only. OAuth tokens
|
|
119
|
+
never show dollar cost.
|
|
120
|
+
|
|
121
|
+
After sidecars and channels reach the Gateway ready path, Nodmix starts an
|
|
122
|
+
optional background pricing bootstrap for configured model refs that do not
|
|
123
|
+
already have local pricing. That bootstrap fetches remote OpenRouter and LiteLLM
|
|
124
|
+
pricing catalogs. Set `models.pricing.enabled: false` to skip those catalog
|
|
125
|
+
fetches on offline or restricted networks; explicit
|
|
126
|
+
`models.providers.*.models[].cost` entries continue to drive local cost
|
|
127
|
+
estimates.
|
|
128
|
+
|
|
129
|
+
## Cache TTL and pruning impact
|
|
130
|
+
|
|
131
|
+
Provider prompt caching only applies within the cache TTL window. Nodmix can
|
|
132
|
+
optionally run **cache-ttl pruning**: it prunes the session once the cache TTL
|
|
133
|
+
has expired, then resets the cache window so subsequent requests can re-use the
|
|
134
|
+
freshly cached context instead of re-caching the full history. This keeps cache
|
|
135
|
+
write costs lower when a session goes idle past the TTL.
|
|
136
|
+
|
|
137
|
+
Configure it in [Gateway configuration](/gateway/configuration) and see the
|
|
138
|
+
behavior details in [Session pruning](/concepts/session-pruning).
|
|
139
|
+
|
|
140
|
+
Heartbeat can keep the cache **warm** across idle gaps. If your model cache TTL
|
|
141
|
+
is `1h`, setting the heartbeat interval just under that (e.g., `55m`) can avoid
|
|
142
|
+
re-caching the full prompt, reducing cache write costs.
|
|
143
|
+
|
|
144
|
+
In multi-agent setups, you can keep one shared model config and tune cache behavior
|
|
145
|
+
per agent with `agents.list[].params.cacheRetention`.
|
|
146
|
+
|
|
147
|
+
For a full knob-by-knob guide, see [Prompt Caching](/reference/prompt-caching).
|
|
148
|
+
|
|
149
|
+
For Anthropic API pricing, cache reads are significantly cheaper than input
|
|
150
|
+
tokens, while cache writes are billed at a higher multiplier. See Anthropic's
|
|
151
|
+
prompt caching pricing for the latest rates and TTL multipliers:
|
|
152
|
+
[https://docs.anthropic.com/docs/build-with-claude/prompt-caching](https://docs.anthropic.com/docs/build-with-claude/prompt-caching)
|
|
153
|
+
|
|
154
|
+
### Example: keep 1h cache warm with heartbeat
|
|
155
|
+
|
|
156
|
+
```yaml
|
|
157
|
+
agents:
|
|
158
|
+
defaults:
|
|
159
|
+
model:
|
|
160
|
+
primary: "anthropic/claude-opus-4-6"
|
|
161
|
+
models:
|
|
162
|
+
"anthropic/claude-opus-4-6":
|
|
163
|
+
params:
|
|
164
|
+
cacheRetention: "long"
|
|
165
|
+
heartbeat:
|
|
166
|
+
every: "55m"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Example: mixed traffic with per-agent cache strategy
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
agents:
|
|
173
|
+
defaults:
|
|
174
|
+
model:
|
|
175
|
+
primary: "anthropic/claude-opus-4-6"
|
|
176
|
+
models:
|
|
177
|
+
"anthropic/claude-opus-4-6":
|
|
178
|
+
params:
|
|
179
|
+
cacheRetention: "long" # default baseline for most agents
|
|
180
|
+
list:
|
|
181
|
+
- id: "research"
|
|
182
|
+
default: true
|
|
183
|
+
heartbeat:
|
|
184
|
+
every: "55m" # keep long cache warm for deep sessions
|
|
185
|
+
- id: "alerts"
|
|
186
|
+
params:
|
|
187
|
+
cacheRetention: "none" # avoid cache writes for bursty notifications
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
`agents.list[].params` merges on top of the selected model's `params`, so you can
|
|
191
|
+
override only `cacheRetention` and inherit other model defaults unchanged.
|
|
192
|
+
|
|
193
|
+
### Example: enable Anthropic 1M context beta header
|
|
194
|
+
|
|
195
|
+
Anthropic's 1M context window is currently beta-gated. Nodmix can inject the
|
|
196
|
+
required `anthropic-beta` value when you enable `context1m` on supported Opus
|
|
197
|
+
or Sonnet models.
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
agents:
|
|
201
|
+
defaults:
|
|
202
|
+
models:
|
|
203
|
+
"anthropic/claude-opus-4-6":
|
|
204
|
+
params:
|
|
205
|
+
context1m: true
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
This maps to Anthropic's `context-1m-2025-08-07` beta header.
|
|
209
|
+
|
|
210
|
+
This only applies when `context1m: true` is set on that model entry.
|
|
211
|
+
|
|
212
|
+
Requirement: the credential must be eligible for long-context usage. If not,
|
|
213
|
+
Anthropic responds with a provider-side rate limit error for that request.
|
|
214
|
+
|
|
215
|
+
If you authenticate Anthropic with OAuth/subscription tokens (`sk-ant-oat-*`),
|
|
216
|
+
Nodmix skips the `context-1m-*` beta header because Anthropic currently
|
|
217
|
+
rejects that combination with HTTP 401.
|
|
218
|
+
|
|
219
|
+
## Tips for reducing token pressure
|
|
220
|
+
|
|
221
|
+
- Use `/compact` to summarize long sessions.
|
|
222
|
+
- Trim large tool outputs in your workflows.
|
|
223
|
+
- Lower `agents.defaults.imageMaxDimensionPx` for screenshot-heavy sessions.
|
|
224
|
+
- Keep skill descriptions short (skill list is injected into the prompt).
|
|
225
|
+
- Prefer smaller models for verbose, exploratory work.
|
|
226
|
+
|
|
227
|
+
See [Skills](/tools/skills) for the exact skill list overhead formula.
|
|
228
|
+
|
|
229
|
+
## Related
|
|
230
|
+
|
|
231
|
+
- [API usage and costs](/reference/api-usage-costs)
|
|
232
|
+
- [Prompt caching](/reference/prompt-caching)
|
|
233
|
+
- [Usage tracking](/concepts/usage-tracking)
|