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,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Use Xiaomi MiMo models with Nodmix"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want Xiaomi MiMo models in Nodmix
|
|
5
|
+
- You need XIAOMI_API_KEY setup
|
|
6
|
+
title: "Xiaomi MiMo"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Xiaomi MiMo is the API platform for **MiMo** models. Nodmix includes a bundled `xiaomi` plugin that registers both an OpenAI-compatible chat provider and a speech (TTS) provider against the same `XIAOMI_API_KEY`.
|
|
10
|
+
|
|
11
|
+
| Property | Value |
|
|
12
|
+
| --------------- | ---------------------------------------- |
|
|
13
|
+
| Provider id | `xiaomi` |
|
|
14
|
+
| Plugin | bundled, `enabledByDefault: true` |
|
|
15
|
+
| Auth env var | `XIAOMI_API_KEY` |
|
|
16
|
+
| Onboarding flag | `--auth-choice xiaomi-api-key` |
|
|
17
|
+
| Direct CLI flag | `--xiaomi-api-key <key>` |
|
|
18
|
+
| Contracts | chat completions + `speechProviders` |
|
|
19
|
+
| API | OpenAI-compatible (`openai-completions`) |
|
|
20
|
+
| Base URL | `https://api.xiaomimimo.com/v1` |
|
|
21
|
+
| Default model | `xiaomi/mimo-v2-flash` |
|
|
22
|
+
| TTS default | `mimo-v2.5-tts`, voice `mimo_default` |
|
|
23
|
+
|
|
24
|
+
## Getting started
|
|
25
|
+
|
|
26
|
+
<Steps>
|
|
27
|
+
<Step title="Get an API key">
|
|
28
|
+
Create an API key in the [Xiaomi MiMo console](https://platform.xiaomimimo.com/#/console/api-keys).
|
|
29
|
+
</Step>
|
|
30
|
+
<Step title="Run onboarding">
|
|
31
|
+
```bash
|
|
32
|
+
nodmix onboard --auth-choice xiaomi-api-key
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Or pass the key directly:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
nodmix onboard --auth-choice xiaomi-api-key --xiaomi-api-key "$XIAOMI_API_KEY"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
</Step>
|
|
42
|
+
<Step title="Verify the model is available">
|
|
43
|
+
```bash
|
|
44
|
+
nodmix models list --provider xiaomi
|
|
45
|
+
```
|
|
46
|
+
</Step>
|
|
47
|
+
</Steps>
|
|
48
|
+
|
|
49
|
+
## Built-in catalog
|
|
50
|
+
|
|
51
|
+
| Model ref | Input | Context | Max output | Reasoning | Notes |
|
|
52
|
+
| ---------------------- | ----------- | --------- | ---------- | --------- | ------------- |
|
|
53
|
+
| `xiaomi/mimo-v2-flash` | text | 262,144 | 8,192 | No | Default model |
|
|
54
|
+
| `xiaomi/mimo-v2-pro` | text | 1,048,576 | 32,000 | Yes | Large context |
|
|
55
|
+
| `xiaomi/mimo-v2-omni` | text, image | 262,144 | 32,000 | Yes | Multimodal |
|
|
56
|
+
|
|
57
|
+
<Tip>
|
|
58
|
+
The default model ref is `xiaomi/mimo-v2-flash`. The provider is injected automatically when `XIAOMI_API_KEY` is set or an auth profile exists.
|
|
59
|
+
</Tip>
|
|
60
|
+
|
|
61
|
+
## Text-to-speech
|
|
62
|
+
|
|
63
|
+
The bundled `xiaomi` plugin also registers Xiaomi MiMo as a speech provider for
|
|
64
|
+
`messages.tts`. It calls Xiaomi's chat-completions TTS contract with the text as
|
|
65
|
+
an `assistant` message and optional style guidance as a `user` message.
|
|
66
|
+
|
|
67
|
+
| Property | Value |
|
|
68
|
+
| -------- | ---------------------------------------- |
|
|
69
|
+
| TTS id | `xiaomi` (`mimo` alias) |
|
|
70
|
+
| Auth | `XIAOMI_API_KEY` |
|
|
71
|
+
| API | `POST /v1/chat/completions` with `audio` |
|
|
72
|
+
| Default | `mimo-v2.5-tts`, voice `mimo_default` |
|
|
73
|
+
| Output | MP3 by default; WAV when configured |
|
|
74
|
+
|
|
75
|
+
```json5
|
|
76
|
+
{
|
|
77
|
+
messages: {
|
|
78
|
+
tts: {
|
|
79
|
+
auto: "always",
|
|
80
|
+
provider: "xiaomi",
|
|
81
|
+
providers: {
|
|
82
|
+
xiaomi: {
|
|
83
|
+
apiKey: "xiaomi_api_key",
|
|
84
|
+
model: "mimo-v2.5-tts",
|
|
85
|
+
voice: "mimo_default",
|
|
86
|
+
format: "mp3",
|
|
87
|
+
style: "Bright, natural, conversational tone.",
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Supported built-in voices include `mimo_default`, `default_zh`, `default_en`,
|
|
96
|
+
`Mia`, `Chloe`, `Milo`, and `Dean`. `mimo-v2-tts` is supported for older MiMo
|
|
97
|
+
TTS accounts; the default uses the current MiMo-V2.5 TTS model. For voice-note
|
|
98
|
+
targets such as Feishu and Telegram, Nodmix transcodes Xiaomi output to 48kHz
|
|
99
|
+
Opus with `ffmpeg` before delivery.
|
|
100
|
+
|
|
101
|
+
## Config example
|
|
102
|
+
|
|
103
|
+
```json5
|
|
104
|
+
{
|
|
105
|
+
env: { XIAOMI_API_KEY: "your-key" },
|
|
106
|
+
agents: { defaults: { model: { primary: "xiaomi/mimo-v2-flash" } } },
|
|
107
|
+
models: {
|
|
108
|
+
mode: "merge",
|
|
109
|
+
providers: {
|
|
110
|
+
xiaomi: {
|
|
111
|
+
baseUrl: "https://api.xiaomimimo.com/v1",
|
|
112
|
+
api: "openai-completions",
|
|
113
|
+
apiKey: "XIAOMI_API_KEY",
|
|
114
|
+
models: [
|
|
115
|
+
{
|
|
116
|
+
id: "mimo-v2-flash",
|
|
117
|
+
name: "Xiaomi MiMo V2 Flash",
|
|
118
|
+
reasoning: false,
|
|
119
|
+
input: ["text"],
|
|
120
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
121
|
+
contextWindow: 262144,
|
|
122
|
+
maxTokens: 8192,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: "mimo-v2-pro",
|
|
126
|
+
name: "Xiaomi MiMo V2 Pro",
|
|
127
|
+
reasoning: true,
|
|
128
|
+
input: ["text"],
|
|
129
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
130
|
+
contextWindow: 1048576,
|
|
131
|
+
maxTokens: 32000,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: "mimo-v2-omni",
|
|
135
|
+
name: "Xiaomi MiMo V2 Omni",
|
|
136
|
+
reasoning: true,
|
|
137
|
+
input: ["text", "image"],
|
|
138
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
139
|
+
contextWindow: 262144,
|
|
140
|
+
maxTokens: 32000,
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
<AccordionGroup>
|
|
150
|
+
<Accordion title="Auto-injection behavior">
|
|
151
|
+
The `xiaomi` provider is injected automatically when `XIAOMI_API_KEY` is set in your environment or an auth profile exists. You do not need to manually configure the provider unless you want to override model metadata or the base URL.
|
|
152
|
+
</Accordion>
|
|
153
|
+
|
|
154
|
+
<Accordion title="Model details">
|
|
155
|
+
- **mimo-v2-flash** — lightweight and fast, ideal for general-purpose text tasks. No reasoning support.
|
|
156
|
+
- **mimo-v2-pro** — supports reasoning with a 1M token context window for long-document workloads.
|
|
157
|
+
- **mimo-v2-omni** — reasoning-enabled multimodal model that accepts both text and image inputs.
|
|
158
|
+
|
|
159
|
+
<Note>
|
|
160
|
+
All models use the `xiaomi/` prefix (for example `xiaomi/mimo-v2-pro`).
|
|
161
|
+
</Note>
|
|
162
|
+
|
|
163
|
+
</Accordion>
|
|
164
|
+
|
|
165
|
+
<Accordion title="Troubleshooting">
|
|
166
|
+
- If models do not appear, confirm `XIAOMI_API_KEY` is set and valid.
|
|
167
|
+
- When the Gateway runs as a daemon, ensure the key is available to that process (for example in `~/.nodmix/.env` or via `env.shellEnv`).
|
|
168
|
+
|
|
169
|
+
<Warning>
|
|
170
|
+
Keys set only in your interactive shell are not visible to daemon-managed gateway processes. Use `~/.nodmix/.env` or `env.shellEnv` config for persistent availability.
|
|
171
|
+
</Warning>
|
|
172
|
+
|
|
173
|
+
</Accordion>
|
|
174
|
+
</AccordionGroup>
|
|
175
|
+
|
|
176
|
+
## Related
|
|
177
|
+
|
|
178
|
+
<CardGroup cols={2}>
|
|
179
|
+
<Card title="Model selection" href="/concepts/model-providers" icon="layers">
|
|
180
|
+
Choosing providers, model refs, and failover behavior.
|
|
181
|
+
</Card>
|
|
182
|
+
<Card title="Configuration reference" href="/gateway/configuration-reference" icon="gear">
|
|
183
|
+
Full Nodmix configuration reference.
|
|
184
|
+
</Card>
|
|
185
|
+
<Card title="Xiaomi MiMo console" href="https://platform.xiaomimimo.com" icon="arrow-up-right-from-square">
|
|
186
|
+
Xiaomi MiMo dashboard and API key management.
|
|
187
|
+
</Card>
|
|
188
|
+
</CardGroup>
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Use Z.AI (GLM models) with Nodmix"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want Z.AI / GLM models in Nodmix
|
|
5
|
+
- You need a simple ZAI_API_KEY setup
|
|
6
|
+
title: "Z.AI"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Z.AI is the API platform for **GLM** models. It provides REST APIs for GLM and uses API keys
|
|
10
|
+
for authentication. Create your API key in the Z.AI console. Nodmix uses the `zai` provider
|
|
11
|
+
with a Z.AI API key.
|
|
12
|
+
|
|
13
|
+
- Provider: `zai`
|
|
14
|
+
- Auth: `ZAI_API_KEY`
|
|
15
|
+
- API: Z.AI Chat Completions (Bearer auth)
|
|
16
|
+
|
|
17
|
+
## Getting started
|
|
18
|
+
|
|
19
|
+
<Tabs>
|
|
20
|
+
<Tab title="Auto-detect endpoint">
|
|
21
|
+
**Best for:** most users. Nodmix detects the matching Z.AI endpoint from the key and applies the correct base URL automatically.
|
|
22
|
+
|
|
23
|
+
<Steps>
|
|
24
|
+
<Step title="Run onboarding">
|
|
25
|
+
```bash
|
|
26
|
+
nodmix onboard --auth-choice zai-api-key
|
|
27
|
+
```
|
|
28
|
+
</Step>
|
|
29
|
+
<Step title="Set a default model">
|
|
30
|
+
```json5
|
|
31
|
+
{
|
|
32
|
+
env: { ZAI_API_KEY: "sk-..." },
|
|
33
|
+
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
</Step>
|
|
37
|
+
<Step title="Verify the model is listed">
|
|
38
|
+
```bash
|
|
39
|
+
nodmix models list --all --provider zai
|
|
40
|
+
```
|
|
41
|
+
</Step>
|
|
42
|
+
</Steps>
|
|
43
|
+
|
|
44
|
+
</Tab>
|
|
45
|
+
|
|
46
|
+
<Tab title="Explicit regional endpoint">
|
|
47
|
+
**Best for:** users who want to force a specific Coding Plan or general API surface.
|
|
48
|
+
|
|
49
|
+
<Steps>
|
|
50
|
+
<Step title="Pick the right onboarding choice">
|
|
51
|
+
```bash
|
|
52
|
+
# Coding Plan Global (recommended for Coding Plan users)
|
|
53
|
+
nodmix onboard --auth-choice zai-coding-global
|
|
54
|
+
|
|
55
|
+
# Coding Plan CN (China region)
|
|
56
|
+
nodmix onboard --auth-choice zai-coding-cn
|
|
57
|
+
|
|
58
|
+
# General API
|
|
59
|
+
nodmix onboard --auth-choice zai-global
|
|
60
|
+
|
|
61
|
+
# General API CN (China region)
|
|
62
|
+
nodmix onboard --auth-choice zai-cn
|
|
63
|
+
```
|
|
64
|
+
</Step>
|
|
65
|
+
<Step title="Set a default model">
|
|
66
|
+
```json5
|
|
67
|
+
{
|
|
68
|
+
env: { ZAI_API_KEY: "sk-..." },
|
|
69
|
+
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
</Step>
|
|
73
|
+
<Step title="Verify the model is listed">
|
|
74
|
+
```bash
|
|
75
|
+
nodmix models list --all --provider zai
|
|
76
|
+
```
|
|
77
|
+
</Step>
|
|
78
|
+
</Steps>
|
|
79
|
+
|
|
80
|
+
</Tab>
|
|
81
|
+
</Tabs>
|
|
82
|
+
|
|
83
|
+
## Built-in catalog
|
|
84
|
+
|
|
85
|
+
Nodmix ships the bundled `zai` provider catalog in the plugin manifest, so read-only
|
|
86
|
+
listing can show known GLM rows without loading provider runtime:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
nodmix models list --all --provider zai
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The manifest-backed catalog currently includes:
|
|
93
|
+
|
|
94
|
+
| Model ref | Notes |
|
|
95
|
+
| -------------------- | ------------- |
|
|
96
|
+
| `zai/glm-5.1` | Default model |
|
|
97
|
+
| `zai/glm-5` | |
|
|
98
|
+
| `zai/glm-5-turbo` | |
|
|
99
|
+
| `zai/glm-5v-turbo` | |
|
|
100
|
+
| `zai/glm-4.7` | |
|
|
101
|
+
| `zai/glm-4.7-flash` | |
|
|
102
|
+
| `zai/glm-4.7-flashx` | |
|
|
103
|
+
| `zai/glm-4.6` | |
|
|
104
|
+
| `zai/glm-4.6v` | |
|
|
105
|
+
| `zai/glm-4.5` | |
|
|
106
|
+
| `zai/glm-4.5-air` | |
|
|
107
|
+
| `zai/glm-4.5-flash` | |
|
|
108
|
+
| `zai/glm-4.5v` | |
|
|
109
|
+
|
|
110
|
+
<Tip>
|
|
111
|
+
GLM models are available as `zai/<model>` (example: `zai/glm-5`). The default bundled model ref is `zai/glm-5.1`.
|
|
112
|
+
</Tip>
|
|
113
|
+
|
|
114
|
+
## Advanced configuration
|
|
115
|
+
|
|
116
|
+
<AccordionGroup>
|
|
117
|
+
<Accordion title="Forward-resolving unknown GLM-5 models">
|
|
118
|
+
Unknown `glm-5*` ids still forward-resolve on the bundled provider path by
|
|
119
|
+
synthesizing provider-owned metadata from the `glm-4.7` template when the id
|
|
120
|
+
matches the current GLM-5 family shape.
|
|
121
|
+
</Accordion>
|
|
122
|
+
|
|
123
|
+
<Accordion title="Tool-call streaming">
|
|
124
|
+
`tool_stream` is enabled by default for Z.AI tool-call streaming. To disable it:
|
|
125
|
+
|
|
126
|
+
```json5
|
|
127
|
+
{
|
|
128
|
+
agents: {
|
|
129
|
+
defaults: {
|
|
130
|
+
models: {
|
|
131
|
+
"zai/<model>": {
|
|
132
|
+
params: { tool_stream: false },
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
</Accordion>
|
|
141
|
+
|
|
142
|
+
<Accordion title="Thinking and preserved thinking">
|
|
143
|
+
Z.AI thinking follows Nodmix's `/think` controls. With thinking off,
|
|
144
|
+
Nodmix sends `thinking: { type: "disabled" }` to avoid responses that
|
|
145
|
+
spend the output budget on `reasoning_content` before visible text.
|
|
146
|
+
|
|
147
|
+
Preserved thinking is opt-in because Z.AI requires the full historical
|
|
148
|
+
`reasoning_content` to be replayed, which increases prompt tokens. Enable it
|
|
149
|
+
per model:
|
|
150
|
+
|
|
151
|
+
```json5
|
|
152
|
+
{
|
|
153
|
+
agents: {
|
|
154
|
+
defaults: {
|
|
155
|
+
models: {
|
|
156
|
+
"zai/glm-5.1": {
|
|
157
|
+
params: { preserveThinking: true },
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
When enabled and thinking is on, Nodmix sends
|
|
166
|
+
`thinking: { type: "enabled", clear_thinking: false }` and replays prior
|
|
167
|
+
`reasoning_content` for the same OpenAI-compatible transcript.
|
|
168
|
+
|
|
169
|
+
Advanced users can still override the exact provider payload with
|
|
170
|
+
`params.extra_body.thinking`.
|
|
171
|
+
|
|
172
|
+
</Accordion>
|
|
173
|
+
|
|
174
|
+
<Accordion title="Image understanding">
|
|
175
|
+
The bundled Z.AI plugin registers image understanding.
|
|
176
|
+
|
|
177
|
+
| Property | Value |
|
|
178
|
+
| ------------- | ----------- |
|
|
179
|
+
| Model | `glm-4.6v` |
|
|
180
|
+
|
|
181
|
+
Image understanding is auto-resolved from the configured Z.AI auth — no
|
|
182
|
+
additional config is needed.
|
|
183
|
+
|
|
184
|
+
</Accordion>
|
|
185
|
+
|
|
186
|
+
<Accordion title="Auth details">
|
|
187
|
+
- Z.AI uses Bearer auth with your API key.
|
|
188
|
+
- The `zai-api-key` onboarding choice auto-detects the matching Z.AI endpoint from the key prefix.
|
|
189
|
+
- Use the explicit regional choices (`zai-coding-global`, `zai-coding-cn`, `zai-global`, `zai-cn`) when you want to force a specific API surface.
|
|
190
|
+
|
|
191
|
+
</Accordion>
|
|
192
|
+
</AccordionGroup>
|
|
193
|
+
|
|
194
|
+
## Related
|
|
195
|
+
|
|
196
|
+
<CardGroup cols={2}>
|
|
197
|
+
<Card title="GLM model family" href="/providers/glm" icon="microchip">
|
|
198
|
+
Model family overview for GLM.
|
|
199
|
+
</Card>
|
|
200
|
+
<Card title="Model selection" href="/concepts/model-providers" icon="layers">
|
|
201
|
+
Choosing providers, model refs, and failover behavior.
|
|
202
|
+
</Card>
|
|
203
|
+
</CardGroup>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Redirect to /refactor/ingress-core"
|
|
3
|
+
read_when:
|
|
4
|
+
- Changing channel ingress, sender access, command authorization, or access-group handling
|
|
5
|
+
title: "Channel access cleanup"
|
|
6
|
+
sidebarTitle: "Channel access cleanup"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
The channel access cleanup plan now lives in [Ingress core deletion plan](/refactor/ingress-core).
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Migration plan for making ACP session and ACPX process ownership explicit"
|
|
3
|
+
read_when:
|
|
4
|
+
- Refactoring ACP session lifecycle or ACPX process cleanup
|
|
5
|
+
- Debugging ACPX orphan processes, PID reuse, or multi-gateway cleanup safety
|
|
6
|
+
- Changing sessions_list visibility for spawned ACP or subagent sessions
|
|
7
|
+
- Designing ownership metadata for background tasks, ACP sessions, or process leases
|
|
8
|
+
title: "ACP lifecycle refactor"
|
|
9
|
+
sidebarTitle: "ACP lifecycle refactor"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
ACP lifecycle currently works, but too much of it is inferred after the fact.
|
|
13
|
+
Process cleanup reconstructs ownership from PIDs, command strings, wrapper
|
|
14
|
+
paths, and the live process table. Session visibility reconstructs ownership
|
|
15
|
+
from session-key strings plus secondary `sessions.list({ spawnedBy })` lookups.
|
|
16
|
+
That makes narrow fixes possible, but it also makes edge cases easy to miss:
|
|
17
|
+
PID reuse, quoted commands, adapter grandchildren, multi-gateway state roots,
|
|
18
|
+
`cancel` versus `close`, and `tree` versus `all` visibility all become separate
|
|
19
|
+
places to rediscover the same ownership rules.
|
|
20
|
+
|
|
21
|
+
This refactor makes ownership first-class. The goal is not a new ACP product
|
|
22
|
+
surface; it is a safer internal contract for the existing ACP and ACPX behavior.
|
|
23
|
+
|
|
24
|
+
## Goals
|
|
25
|
+
|
|
26
|
+
- Cleanup never signals a process unless current live evidence matches an
|
|
27
|
+
Nodmix-owned lease.
|
|
28
|
+
- `cancel`, `close`, and startup reaping have distinct lifecycle intents.
|
|
29
|
+
- `sessions_list`, `sessions_history`, `sessions_send`, and status checks use
|
|
30
|
+
the same requester-owned session model.
|
|
31
|
+
- Multi-gateway installs cannot reap each other's ACPX wrappers.
|
|
32
|
+
- Old ACPX session records keep working during migration.
|
|
33
|
+
- The runtime remains plugin-owned; core does not learn ACPX package details.
|
|
34
|
+
|
|
35
|
+
## Non-goals
|
|
36
|
+
|
|
37
|
+
- Replacing ACPX or changing the public `/acp` command surface.
|
|
38
|
+
- Moving vendor-specific ACP adapter behavior into core.
|
|
39
|
+
- Requiring users to manually clean state before upgrading.
|
|
40
|
+
- Making `cancel` close reusable ACP sessions.
|
|
41
|
+
|
|
42
|
+
## Target Model
|
|
43
|
+
|
|
44
|
+
### Gateway Instance Identity
|
|
45
|
+
|
|
46
|
+
Each Gateway process should have a stable runtime instance id:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
type GatewayInstanceId = string;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
It can be generated on Gateway startup and persisted in state for the life of
|
|
53
|
+
that install. It is not a security secret; it is an ownership discriminator used
|
|
54
|
+
to avoid confusing one Gateway's ACP processes with another Gateway's processes.
|
|
55
|
+
|
|
56
|
+
### ACP Session Ownership
|
|
57
|
+
|
|
58
|
+
Every spawned ACP session should have normalized ownership metadata:
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
type AcpSessionOwner = {
|
|
62
|
+
sessionKey: string;
|
|
63
|
+
spawnedBy?: string;
|
|
64
|
+
parentSessionKey?: string;
|
|
65
|
+
ownerSessionKey: string;
|
|
66
|
+
agentId: string;
|
|
67
|
+
backend: "acpx";
|
|
68
|
+
gatewayInstanceId: GatewayInstanceId;
|
|
69
|
+
createdAt: number;
|
|
70
|
+
};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The Gateway should return these fields on session rows where they are known.
|
|
74
|
+
Visibility filtering should be a pure check over row metadata:
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
canSeeSessionRow({
|
|
78
|
+
row,
|
|
79
|
+
requesterSessionKey,
|
|
80
|
+
visibility,
|
|
81
|
+
a2aPolicy,
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
That removes hidden secondary `sessions.list({ spawnedBy })` calls from
|
|
86
|
+
visibility checks. A spawned cross-agent ACP child is requester-owned because
|
|
87
|
+
the row says so, not because a second query happens to find it.
|
|
88
|
+
|
|
89
|
+
### ACPX Process Leases
|
|
90
|
+
|
|
91
|
+
Every generated wrapper launch should create a lease record:
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
type AcpxProcessLease = {
|
|
95
|
+
leaseId: string;
|
|
96
|
+
gatewayInstanceId: GatewayInstanceId;
|
|
97
|
+
sessionKey: string;
|
|
98
|
+
wrapperRoot: string;
|
|
99
|
+
wrapperPath: string;
|
|
100
|
+
rootPid: number;
|
|
101
|
+
processGroupId?: number;
|
|
102
|
+
commandHash: string;
|
|
103
|
+
startedAt: number;
|
|
104
|
+
state: "open" | "closing" | "closed" | "lost";
|
|
105
|
+
};
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The wrapper process should receive the lease id and gateway instance id in its
|
|
109
|
+
environment:
|
|
110
|
+
|
|
111
|
+
```sh
|
|
112
|
+
NODMIX_ACPX_LEASE_ID=...
|
|
113
|
+
NODMIX_GATEWAY_INSTANCE_ID=...
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
When the platform allows it, verification should prefer live process metadata
|
|
117
|
+
that cannot be confused by command quoting:
|
|
118
|
+
|
|
119
|
+
- root PID still exists
|
|
120
|
+
- live wrapper path is under `wrapperRoot`
|
|
121
|
+
- process group matches the lease when available
|
|
122
|
+
- environment contains the expected lease id when readable
|
|
123
|
+
- command hash or executable path matches the lease
|
|
124
|
+
|
|
125
|
+
If the live process cannot be verified, cleanup fails closed.
|
|
126
|
+
|
|
127
|
+
## Lifecycle Controller
|
|
128
|
+
|
|
129
|
+
Introduce one ACPX lifecycle controller that owns process leases and cleanup
|
|
130
|
+
policy:
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
interface AcpxLifecycleController {
|
|
134
|
+
ensureSession(input: AcpRuntimeEnsureInput): Promise<AcpRuntimeHandle>;
|
|
135
|
+
cancelTurn(handle: AcpRuntimeHandle): Promise<void>;
|
|
136
|
+
closeSession(input: {
|
|
137
|
+
handle: AcpRuntimeHandle;
|
|
138
|
+
discardPersistentState?: boolean;
|
|
139
|
+
reason?: string;
|
|
140
|
+
}): Promise<void>;
|
|
141
|
+
reapStartupOrphans(): Promise<void>;
|
|
142
|
+
verifyOwnedTree(lease: AcpxProcessLease): Promise<OwnedProcessTree | null>;
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
`cancelTurn` requests turn cancellation only. It must not reap reusable wrapper
|
|
147
|
+
or adapter processes.
|
|
148
|
+
|
|
149
|
+
`closeSession` is allowed to reap, but only after loading the session record,
|
|
150
|
+
loading the lease, and verifying the live process tree still belongs to that
|
|
151
|
+
lease.
|
|
152
|
+
|
|
153
|
+
`reapStartupOrphans` starts from open leases in state. It may use the process
|
|
154
|
+
table to find descendants, but it should not scan arbitrary ACP-looking
|
|
155
|
+
commands first and then decide they are probably ours.
|
|
156
|
+
|
|
157
|
+
## Wrapper Contract
|
|
158
|
+
|
|
159
|
+
Generated wrappers should stay small. They should:
|
|
160
|
+
|
|
161
|
+
- start the adapter in a process group where supported
|
|
162
|
+
- forward normal termination signals to the process group
|
|
163
|
+
- detect parent death
|
|
164
|
+
- on parent death, send SIGTERM, then keep the wrapper alive until the SIGKILL
|
|
165
|
+
fallback runs
|
|
166
|
+
- report root PID and process group id back to the lifecycle controller when
|
|
167
|
+
that is available
|
|
168
|
+
|
|
169
|
+
Wrappers should not decide session policy. They only enforce local process-tree
|
|
170
|
+
cleanup for their own adapter group.
|
|
171
|
+
|
|
172
|
+
## Session Visibility Contract
|
|
173
|
+
|
|
174
|
+
Visibility should use normalized row ownership:
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
type SessionVisibilityInput = {
|
|
178
|
+
requesterSessionKey: string;
|
|
179
|
+
row: {
|
|
180
|
+
key: string;
|
|
181
|
+
agentId: string;
|
|
182
|
+
ownerSessionKey?: string;
|
|
183
|
+
spawnedBy?: string;
|
|
184
|
+
parentSessionKey?: string;
|
|
185
|
+
};
|
|
186
|
+
visibility: "self" | "tree" | "agent" | "all";
|
|
187
|
+
a2aPolicy: AgentToAgentPolicy;
|
|
188
|
+
};
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Rules:
|
|
192
|
+
|
|
193
|
+
- `self`: only the requester session.
|
|
194
|
+
- `tree`: requester session plus rows owned by or spawned from the requester.
|
|
195
|
+
- `all`: all same-agent rows, a2a-allowed cross-agent rows, and requester-owned
|
|
196
|
+
spawned cross-agent rows even when general a2a is disabled.
|
|
197
|
+
- `agent`: same agent only, unless an explicit owner relationship says the row
|
|
198
|
+
belongs to the requester.
|
|
199
|
+
|
|
200
|
+
This makes `tree` and `all` monotonic: `all` must not hide an owned child that
|
|
201
|
+
`tree` would show.
|
|
202
|
+
|
|
203
|
+
## Migration Plan
|
|
204
|
+
|
|
205
|
+
### Phase 1: Add Identity And Leases
|
|
206
|
+
|
|
207
|
+
- Add `gatewayInstanceId` to Gateway state.
|
|
208
|
+
- Add an ACPX lease store under the ACPX state directory.
|
|
209
|
+
- Write a lease before spawning a generated wrapper.
|
|
210
|
+
- Store `leaseId` on new ACPX session records.
|
|
211
|
+
- Keep existing PID and command fields for old records.
|
|
212
|
+
|
|
213
|
+
### Phase 2: Lease-First Cleanup
|
|
214
|
+
|
|
215
|
+
- Change close cleanup to load `leaseId` first.
|
|
216
|
+
- Verify live process ownership against the lease before signaling.
|
|
217
|
+
- Keep the current root PID and wrapper-root fallback only for legacy records.
|
|
218
|
+
- Mark leases `closed` after verified cleanup.
|
|
219
|
+
- Mark leases `lost` when the process is gone before cleanup.
|
|
220
|
+
|
|
221
|
+
### Phase 3: Lease-First Startup Reaping
|
|
222
|
+
|
|
223
|
+
- Startup reaping scans open leases.
|
|
224
|
+
- For each lease, verify the root process and collect descendants.
|
|
225
|
+
- Reap verified trees children-first.
|
|
226
|
+
- Expire old `closed` and `lost` leases with a bounded retention window.
|
|
227
|
+
- Keep command-marker scanning only as a temporary legacy fallback, guarded by
|
|
228
|
+
wrapper root and Gateway instance where possible.
|
|
229
|
+
|
|
230
|
+
### Phase 4: Session Ownership Rows
|
|
231
|
+
|
|
232
|
+
- Add ownership metadata to Gateway session rows.
|
|
233
|
+
- Teach ACPX, subagent, background-task, and session-store writers to populate
|
|
234
|
+
`ownerSessionKey` or `spawnedBy`.
|
|
235
|
+
- Convert session visibility checks to use row metadata.
|
|
236
|
+
- Remove visibility-time secondary `sessions.list({ spawnedBy })` lookups.
|
|
237
|
+
|
|
238
|
+
### Phase 5: Remove Legacy Heuristics
|
|
239
|
+
|
|
240
|
+
After one release window:
|
|
241
|
+
|
|
242
|
+
- stop relying on stored root command strings for non-legacy ACPX cleanup
|
|
243
|
+
- remove command-marker startup scans
|
|
244
|
+
- remove visibility fallback list lookups
|
|
245
|
+
- keep defensive fail-closed behavior for missing or unverifiable leases
|
|
246
|
+
|
|
247
|
+
## Tests
|
|
248
|
+
|
|
249
|
+
Add two table-driven suites.
|
|
250
|
+
|
|
251
|
+
Process lifecycle simulator:
|
|
252
|
+
|
|
253
|
+
- PID reused by unrelated process
|
|
254
|
+
- PID reused by another Gateway's wrapper root
|
|
255
|
+
- stored wrapper command is shell-quoted, live `ps` command is not
|
|
256
|
+
- adapter child exits, grandchild remains in the process group
|
|
257
|
+
- parent death SIGTERM fallback reaches SIGKILL
|
|
258
|
+
- process listing unavailable
|
|
259
|
+
- stale lease with missing process
|
|
260
|
+
- startup orphan with wrapper, adapter child, and grandchild
|
|
261
|
+
|
|
262
|
+
Session visibility matrix:
|
|
263
|
+
|
|
264
|
+
- `self`, `tree`, `agent`, `all`
|
|
265
|
+
- a2a enabled and disabled
|
|
266
|
+
- same-agent row
|
|
267
|
+
- cross-agent row
|
|
268
|
+
- requester-owned spawned cross-agent ACP row
|
|
269
|
+
- sandboxed requester clamped to `tree`
|
|
270
|
+
- list, history, send, and status actions
|
|
271
|
+
|
|
272
|
+
The important invariant: a requester-owned spawned child is visible wherever
|
|
273
|
+
the configured visibility includes the requester session tree, and `all` is not
|
|
274
|
+
less capable than `tree`.
|
|
275
|
+
|
|
276
|
+
## Compatibility Notes
|
|
277
|
+
|
|
278
|
+
Old session records may not have `leaseId`. They should use the legacy
|
|
279
|
+
fail-closed cleanup path:
|
|
280
|
+
|
|
281
|
+
- require a live root process
|
|
282
|
+
- require wrapper-root ownership when a generated wrapper is expected
|
|
283
|
+
- require command agreement for non-wrapper roots
|
|
284
|
+
- never signal based only on stale stored PID metadata
|
|
285
|
+
|
|
286
|
+
If a legacy record cannot be verified, leave it alone. Startup lease cleanup and
|
|
287
|
+
the next release window should eventually retire the fallback.
|
|
288
|
+
|
|
289
|
+
## Success Criteria
|
|
290
|
+
|
|
291
|
+
- Closing an old or stale ACPX session cannot kill another Gateway's process.
|
|
292
|
+
- Parent death does not leave stubborn adapter grandchildren running.
|
|
293
|
+
- `cancel` aborts the active turn without closing reusable sessions.
|
|
294
|
+
- `sessions_list` can show requester-owned cross-agent ACP children under both
|
|
295
|
+
`tree` and `all`.
|
|
296
|
+
- Startup cleanup is driven by leases, not broad command-string scans.
|
|
297
|
+
- The focused process and visibility matrix tests cover every edge case that
|
|
298
|
+
previously required one-off review fixes.
|