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,284 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Decouple semantic message presentation from channel native UI renderers.
|
|
3
|
+
title: Channel presentation refactor plan
|
|
4
|
+
read_when:
|
|
5
|
+
- Refactoring channel message UI, interactive payloads, or native channel renderers
|
|
6
|
+
- Changing message tool capabilities, delivery hints, or cross-context markers
|
|
7
|
+
- Debugging Discord Carbon import fanout or channel plugin runtime laziness
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Status
|
|
11
|
+
|
|
12
|
+
Implemented for the shared agent, CLI, plugin capability, and outbound delivery surfaces:
|
|
13
|
+
|
|
14
|
+
- `ReplyPayload.presentation` carries semantic message UI.
|
|
15
|
+
- `ReplyPayload.delivery.pin` carries sent-message pin requests.
|
|
16
|
+
- Shared message actions expose `presentation`, `delivery`, and `pin` instead of provider-native `components`, `blocks`, `buttons`, or `card`.
|
|
17
|
+
- Core renders or auto-degrades presentation through plugin-declared outbound capabilities.
|
|
18
|
+
- Discord, Slack, Telegram, Mattermost, MS Teams, and Feishu renderers consume the generic contract.
|
|
19
|
+
- Discord channel control-plane code no longer imports Carbon-backed UI containers.
|
|
20
|
+
|
|
21
|
+
Canonical docs now live in [Message Presentation](/plugins/message-presentation).
|
|
22
|
+
Keep this plan as historical implementation context; update the canonical guide
|
|
23
|
+
for contract, renderer, or fallback behavior changes.
|
|
24
|
+
|
|
25
|
+
## Problem
|
|
26
|
+
|
|
27
|
+
Channel UI is currently split across several incompatible surfaces:
|
|
28
|
+
|
|
29
|
+
- Core owns a Discord-shaped cross-context renderer hook through `buildCrossContextComponents`.
|
|
30
|
+
- Discord `channel.ts` can import native Carbon UI through `DiscordUiContainer`, which pulls runtime UI dependencies into the channel plugin control plane.
|
|
31
|
+
- The agent and CLI expose native payload escape hatches such as Discord `components`, Slack `blocks`, Telegram or Mattermost `buttons`, and Teams or Feishu `card`.
|
|
32
|
+
- `ReplyPayload.channelData` carries both transport hints and native UI envelopes.
|
|
33
|
+
- The generic `interactive` model exists, but it is narrower than the richer layouts already used by Discord, Slack, Teams, Feishu, LINE, Telegram, and Mattermost.
|
|
34
|
+
|
|
35
|
+
This makes core aware of native UI shapes, weakens plugin runtime laziness, and gives agents too many provider-specific ways to express the same message intent.
|
|
36
|
+
|
|
37
|
+
## Goals
|
|
38
|
+
|
|
39
|
+
- Core decides the best semantic presentation for a message from declared capabilities.
|
|
40
|
+
- Extensions declare capabilities and render semantic presentation into native transport payloads.
|
|
41
|
+
- Web Control UI remains separate from chat native UI.
|
|
42
|
+
- Native channel payloads are not exposed through the shared agent or CLI message surface.
|
|
43
|
+
- Unsupported presentation features auto-degrade to the best text representation.
|
|
44
|
+
- Delivery behavior such as pinning a sent message is generic delivery metadata, not presentation.
|
|
45
|
+
|
|
46
|
+
## Non goals
|
|
47
|
+
|
|
48
|
+
- No backwards compatibility shim for `buildCrossContextComponents`.
|
|
49
|
+
- No public native escape hatches for `components`, `blocks`, `buttons`, or `card`.
|
|
50
|
+
- No core imports of channel-native UI libraries.
|
|
51
|
+
- No provider-specific SDK seams for bundled channels.
|
|
52
|
+
|
|
53
|
+
## Target model
|
|
54
|
+
|
|
55
|
+
Add a core-owned `presentation` field to `ReplyPayload`.
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
type MessagePresentationTone = "neutral" | "info" | "success" | "warning" | "danger";
|
|
59
|
+
|
|
60
|
+
type MessagePresentation = {
|
|
61
|
+
tone?: MessagePresentationTone;
|
|
62
|
+
title?: string;
|
|
63
|
+
blocks: MessagePresentationBlock[];
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
type MessagePresentationBlock =
|
|
67
|
+
| { type: "text"; text: string }
|
|
68
|
+
| { type: "context"; text: string }
|
|
69
|
+
| { type: "divider" }
|
|
70
|
+
| { type: "buttons"; buttons: MessagePresentationButton[] }
|
|
71
|
+
| { type: "select"; placeholder?: string; options: MessagePresentationOption[] };
|
|
72
|
+
|
|
73
|
+
type MessagePresentationButton = {
|
|
74
|
+
label: string;
|
|
75
|
+
value?: string;
|
|
76
|
+
url?: string;
|
|
77
|
+
style?: "primary" | "secondary" | "success" | "danger";
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
type MessagePresentationOption = {
|
|
81
|
+
label: string;
|
|
82
|
+
value: string;
|
|
83
|
+
};
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
`interactive` becomes a subset of `presentation` during migration:
|
|
87
|
+
|
|
88
|
+
- `interactive` text block maps to `presentation.blocks[].type = "text"`.
|
|
89
|
+
- `interactive` buttons block maps to `presentation.blocks[].type = "buttons"`.
|
|
90
|
+
- `interactive` select block maps to `presentation.blocks[].type = "select"`.
|
|
91
|
+
|
|
92
|
+
The external agent and CLI schemas now use `presentation`; `interactive` remains an internal legacy parser/rendering helper for existing reply producers.
|
|
93
|
+
The public producer-facing API treats `interactive` as deprecated. Runtime
|
|
94
|
+
support remains so existing approval helpers and older plugins continue to
|
|
95
|
+
work while new code emits `presentation`.
|
|
96
|
+
|
|
97
|
+
## Delivery metadata
|
|
98
|
+
|
|
99
|
+
Add a core-owned `delivery` field for send behavior that is not UI.
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
type ReplyPayloadDelivery = {
|
|
103
|
+
pin?:
|
|
104
|
+
| boolean
|
|
105
|
+
| {
|
|
106
|
+
enabled: boolean;
|
|
107
|
+
notify?: boolean;
|
|
108
|
+
required?: boolean;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Semantics:
|
|
114
|
+
|
|
115
|
+
- `delivery.pin = true` means pin the first successfully delivered message.
|
|
116
|
+
- `notify` defaults to `false`.
|
|
117
|
+
- `required` defaults to `false`; unsupported channels or failed pinning auto-degrade by continuing delivery.
|
|
118
|
+
- Manual `pin`, `unpin`, and `list-pins` message actions remain for existing messages.
|
|
119
|
+
|
|
120
|
+
Current Telegram ACP topic binding should move from `channelData.telegram.pin = true` to `delivery.pin = true`.
|
|
121
|
+
|
|
122
|
+
## Runtime capability contract
|
|
123
|
+
|
|
124
|
+
Add presentation and delivery render hooks to the runtime outbound adapter, not the control-plane channel plugin.
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
type ChannelPresentationCapabilities = {
|
|
128
|
+
supported: boolean;
|
|
129
|
+
buttons?: boolean;
|
|
130
|
+
selects?: boolean;
|
|
131
|
+
context?: boolean;
|
|
132
|
+
divider?: boolean;
|
|
133
|
+
tones?: MessagePresentationTone[];
|
|
134
|
+
limits?: {
|
|
135
|
+
actions?: {
|
|
136
|
+
maxActions?: number;
|
|
137
|
+
maxActionsPerRow?: number;
|
|
138
|
+
maxRows?: number;
|
|
139
|
+
maxLabelLength?: number;
|
|
140
|
+
maxValueBytes?: number;
|
|
141
|
+
supportsStyles?: boolean;
|
|
142
|
+
supportsDisabled?: boolean;
|
|
143
|
+
supportsLayoutHints?: boolean;
|
|
144
|
+
};
|
|
145
|
+
selects?: {
|
|
146
|
+
maxOptions?: number;
|
|
147
|
+
maxLabelLength?: number;
|
|
148
|
+
maxValueBytes?: number;
|
|
149
|
+
};
|
|
150
|
+
text?: {
|
|
151
|
+
maxLength?: number;
|
|
152
|
+
encoding?: "characters" | "utf8-bytes" | "utf16-units";
|
|
153
|
+
markdownDialect?: "plain" | "markdown" | "html" | "slack-mrkdwn" | "discord-markdown";
|
|
154
|
+
supportsEdit?: boolean;
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
type ChannelDeliveryCapabilities = {
|
|
160
|
+
pinSentMessage?: boolean;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
type ChannelOutboundAdapter = {
|
|
164
|
+
presentationCapabilities?: ChannelPresentationCapabilities;
|
|
165
|
+
|
|
166
|
+
renderPresentation?: (params: {
|
|
167
|
+
payload: ReplyPayload;
|
|
168
|
+
presentation: MessagePresentation;
|
|
169
|
+
ctx: ChannelOutboundSendContext;
|
|
170
|
+
}) => ReplyPayload | null;
|
|
171
|
+
|
|
172
|
+
deliveryCapabilities?: ChannelDeliveryCapabilities;
|
|
173
|
+
|
|
174
|
+
pinDeliveredMessage?: (params: {
|
|
175
|
+
cfg: NodmixConfig;
|
|
176
|
+
accountId?: string | null;
|
|
177
|
+
to: string;
|
|
178
|
+
threadId?: string | number | null;
|
|
179
|
+
messageId: string;
|
|
180
|
+
notify: boolean;
|
|
181
|
+
}) => Promise<void>;
|
|
182
|
+
};
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Core behavior:
|
|
186
|
+
|
|
187
|
+
- Resolve target channel and runtime adapter.
|
|
188
|
+
- Ask for presentation capabilities.
|
|
189
|
+
- Degrade unsupported blocks and apply generic capability limits before
|
|
190
|
+
rendering.
|
|
191
|
+
- Call `renderPresentation`.
|
|
192
|
+
- If no renderer exists, convert presentation to text fallback.
|
|
193
|
+
- After successful send, call `pinDeliveredMessage` when `delivery.pin` is requested and supported.
|
|
194
|
+
|
|
195
|
+
## Channel mapping
|
|
196
|
+
|
|
197
|
+
Discord:
|
|
198
|
+
|
|
199
|
+
- Render `presentation` to components v2 and Carbon containers in runtime-only modules.
|
|
200
|
+
- Keep accent color helpers in light modules.
|
|
201
|
+
- Remove `DiscordUiContainer` imports from channel plugin control-plane code.
|
|
202
|
+
|
|
203
|
+
Slack:
|
|
204
|
+
|
|
205
|
+
- Render `presentation` to Block Kit.
|
|
206
|
+
- Remove agent and CLI `blocks` input.
|
|
207
|
+
|
|
208
|
+
Telegram:
|
|
209
|
+
|
|
210
|
+
- Render text, context, and dividers as text.
|
|
211
|
+
- Render actions and select as inline keyboards when configured and allowed for the target surface.
|
|
212
|
+
- Use text fallback when inline buttons are disabled.
|
|
213
|
+
- Move ACP topic pinning to `delivery.pin`.
|
|
214
|
+
|
|
215
|
+
Mattermost:
|
|
216
|
+
|
|
217
|
+
- Render actions as interactive buttons where configured.
|
|
218
|
+
- Render other blocks as text fallback.
|
|
219
|
+
|
|
220
|
+
MS Teams:
|
|
221
|
+
|
|
222
|
+
- Render `presentation` to Adaptive Cards.
|
|
223
|
+
- Keep manual pin/unpin/list-pins actions.
|
|
224
|
+
- Optionally implement `pinDeliveredMessage` if Graph support is reliable for the target conversation.
|
|
225
|
+
|
|
226
|
+
Feishu:
|
|
227
|
+
|
|
228
|
+
- Render `presentation` to interactive cards.
|
|
229
|
+
- Keep manual pin/unpin/list-pins actions.
|
|
230
|
+
- Optionally implement `pinDeliveredMessage` for sent-message pinning if API behavior is reliable.
|
|
231
|
+
|
|
232
|
+
LINE:
|
|
233
|
+
|
|
234
|
+
- Render `presentation` to Flex or template messages where possible.
|
|
235
|
+
- Fall back to text for unsupported blocks.
|
|
236
|
+
- Remove LINE UI payloads from `channelData`.
|
|
237
|
+
|
|
238
|
+
Plain or limited channels:
|
|
239
|
+
|
|
240
|
+
- Convert presentation to text with conservative formatting.
|
|
241
|
+
|
|
242
|
+
## Refactor steps
|
|
243
|
+
|
|
244
|
+
1. Reapply the Discord release fix that splits `ui-colors.ts` from Carbon-backed UI and removes `DiscordUiContainer` from `extensions/discord/src/channel.ts`.
|
|
245
|
+
2. Add `presentation` and `delivery` to `ReplyPayload`, outbound payload normalization, delivery summaries, and hook payloads.
|
|
246
|
+
3. Add `MessagePresentation` schema and parser helpers in a narrow SDK/runtime subpath.
|
|
247
|
+
4. Replace message capabilities `buttons`, `cards`, `components`, and `blocks` with semantic presentation capabilities.
|
|
248
|
+
5. Add runtime outbound adapter hooks for presentation render and delivery pinning.
|
|
249
|
+
6. Replace cross-context component construction with `buildCrossContextPresentation`.
|
|
250
|
+
7. Delete `src/infra/outbound/channel-adapters.ts` and remove `buildCrossContextComponents` from channel plugin types.
|
|
251
|
+
8. Change `maybeApplyCrossContextMarker` to attach `presentation` instead of native params.
|
|
252
|
+
9. Update plugin-dispatch send paths to consume only semantic presentation and delivery metadata.
|
|
253
|
+
10. Remove agent and CLI native payload params: `components`, `blocks`, `buttons`, and `card`.
|
|
254
|
+
11. Remove SDK helpers that create native message-tool schemas, replacing them with presentation schema helpers.
|
|
255
|
+
12. Remove UI/native envelopes from `channelData`; keep only transport metadata until each remaining field is reviewed.
|
|
256
|
+
13. Migrate Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, and LINE renderers.
|
|
257
|
+
14. Update docs for message CLI, channel pages, plugin SDK, and capability cookbook.
|
|
258
|
+
15. Run import fanout profiling for Discord and affected channel entrypoints.
|
|
259
|
+
|
|
260
|
+
Steps 1-11 and 13-14 are implemented in this refactor for the shared agent, CLI, plugin capability, and outbound adapter contracts. Step 12 remains a deeper internal cleanup pass for provider-private `channelData` transport envelopes. Step 15 remains follow-up validation if we want quantified import-fanout numbers beyond the type/test gate.
|
|
261
|
+
|
|
262
|
+
## Tests
|
|
263
|
+
|
|
264
|
+
Add or update:
|
|
265
|
+
|
|
266
|
+
- Presentation normalization tests.
|
|
267
|
+
- Presentation auto-degrade tests for unsupported blocks.
|
|
268
|
+
- Cross-context marker tests for plugin dispatch and core delivery paths.
|
|
269
|
+
- Channel render matrix tests for Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, LINE, and text fallback.
|
|
270
|
+
- Message tool schema tests proving native fields are gone.
|
|
271
|
+
- CLI tests proving native flags are gone.
|
|
272
|
+
- Discord entrypoint import-laziness regression covering Carbon.
|
|
273
|
+
- Delivery pin tests covering Telegram and generic fallback.
|
|
274
|
+
|
|
275
|
+
## Open questions
|
|
276
|
+
|
|
277
|
+
- Should `delivery.pin` be implemented for Discord, Slack, MS Teams, and Feishu in the first pass, or only Telegram first?
|
|
278
|
+
- Should `delivery` eventually absorb existing fields such as `replyToId`, `replyToCurrent`, `silent`, and `audioAsVoice`, or stay focused on post-send behaviors?
|
|
279
|
+
- Should presentation support images or file references directly, or should media remain separate from UI layout for now?
|
|
280
|
+
|
|
281
|
+
## Related
|
|
282
|
+
|
|
283
|
+
- [Channels overview](/channels)
|
|
284
|
+
- [Message presentation](/plugins/message-presentation)
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Android app (node): connection runbook + Connect/Chat/Voice/Canvas command surface"
|
|
3
|
+
read_when:
|
|
4
|
+
- Pairing or reconnecting the Android node
|
|
5
|
+
- Debugging Android gateway discovery or auth
|
|
6
|
+
- Verifying chat history parity across clients
|
|
7
|
+
title: "Android app"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<Note>
|
|
11
|
+
The official Android app is available on [Google Play](https://play.google.com/store/apps/details?id=ai.nodmix.app&hl=en_IN). It is a companion node and requires a running Nodmix Gateway. The source code is also available in the [Nodmix repository](https://github.com/nodmix/nodmix) under `apps/android`; see [apps/android/README.md](https://github.com/nodmix/nodmix/blob/main/apps/android/README.md) for build instructions.
|
|
12
|
+
</Note>
|
|
13
|
+
|
|
14
|
+
## Support snapshot
|
|
15
|
+
|
|
16
|
+
- Role: companion node app (Android does not host the Gateway).
|
|
17
|
+
- Gateway required: yes (run it on macOS, Linux, or Windows via WSL2).
|
|
18
|
+
- Install: [Google Play](https://play.google.com/store/apps/details?id=ai.nodmix.app&hl=en_IN) for the app, [Getting Started](/start/getting-started) for the Gateway, then [Pairing](/channels/pairing).
|
|
19
|
+
- Gateway: [Runbook](/gateway) + [Configuration](/gateway/configuration).
|
|
20
|
+
- Protocols: [Gateway protocol](/gateway/protocol) (nodes + control plane).
|
|
21
|
+
|
|
22
|
+
## System control
|
|
23
|
+
|
|
24
|
+
System control (launchd/systemd) lives on the Gateway host. See [Gateway](/gateway).
|
|
25
|
+
|
|
26
|
+
## Connection runbook
|
|
27
|
+
|
|
28
|
+
Android node app ⇄ (mDNS/NSD + WebSocket) ⇄ **Gateway**
|
|
29
|
+
|
|
30
|
+
Android connects directly to the Gateway WebSocket and uses device pairing (`role: node`).
|
|
31
|
+
|
|
32
|
+
For Tailscale or public hosts, Android requires a secure endpoint:
|
|
33
|
+
|
|
34
|
+
- Preferred: Tailscale Serve / Funnel with `https://<magicdns>` / `wss://<magicdns>`
|
|
35
|
+
- Also supported: any other `wss://` Gateway URL with a real TLS endpoint
|
|
36
|
+
- Cleartext `ws://` remains supported on private LAN addresses / `.local` hosts, plus `localhost`, `127.0.0.1`, and the Android emulator bridge (`10.0.2.2`)
|
|
37
|
+
|
|
38
|
+
### Prerequisites
|
|
39
|
+
|
|
40
|
+
- You can run the Gateway on the "master" machine.
|
|
41
|
+
- Android device/emulator can reach the gateway WebSocket:
|
|
42
|
+
- Same LAN with mDNS/NSD, **or**
|
|
43
|
+
- Same Tailscale tailnet using Wide-Area Bonjour / unicast DNS-SD (see below), **or**
|
|
44
|
+
- Manual gateway host/port (fallback)
|
|
45
|
+
- Tailnet/public mobile pairing does **not** use raw tailnet IP `ws://` endpoints. Use Tailscale Serve or another `wss://` URL instead.
|
|
46
|
+
- You can run the CLI (`nodmix`) on the gateway machine (or via SSH).
|
|
47
|
+
|
|
48
|
+
### 1) Start the Gateway
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
nodmix gateway --port 18789 --verbose
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Confirm in logs you see something like:
|
|
55
|
+
|
|
56
|
+
- `listening on ws://0.0.0.0:18789`
|
|
57
|
+
|
|
58
|
+
For remote Android access over Tailscale, prefer Serve/Funnel instead of a raw tailnet bind:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
nodmix gateway --tailscale serve
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
This gives Android a secure `wss://` / `https://` endpoint. A plain `gateway.bind: "tailnet"` setup is not enough for first-time remote Android pairing unless you also terminate TLS separately.
|
|
65
|
+
|
|
66
|
+
### 2) Verify discovery (optional)
|
|
67
|
+
|
|
68
|
+
From the gateway machine:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
dns-sd -B _nodmix-gw._tcp local.
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
More debugging notes: [Bonjour](/gateway/bonjour).
|
|
75
|
+
|
|
76
|
+
If you also configured a wide-area discovery domain, compare against:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
nodmix gateway discover --json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
That shows `local.` plus the configured wide-area domain in one pass and uses the resolved
|
|
83
|
+
service endpoint instead of TXT-only hints.
|
|
84
|
+
|
|
85
|
+
#### Tailnet (Vienna ⇄ London) discovery via unicast DNS-SD
|
|
86
|
+
|
|
87
|
+
Android NSD/mDNS discovery won't cross networks. If your Android node and the gateway are on different networks but connected via Tailscale, use Wide-Area Bonjour / unicast DNS-SD instead.
|
|
88
|
+
|
|
89
|
+
Discovery alone is not sufficient for tailnet/public Android pairing. The discovered route still needs a secure endpoint (`wss://` or Tailscale Serve):
|
|
90
|
+
|
|
91
|
+
1. Set up a DNS-SD zone (example `nodmix.internal.`) on the gateway host and publish `_nodmix-gw._tcp` records.
|
|
92
|
+
2. Configure Tailscale split DNS for your chosen domain pointing at that DNS server.
|
|
93
|
+
|
|
94
|
+
Details and example CoreDNS config: [Bonjour](/gateway/bonjour).
|
|
95
|
+
|
|
96
|
+
### 3) Connect from Android
|
|
97
|
+
|
|
98
|
+
In the Android app:
|
|
99
|
+
|
|
100
|
+
- The app keeps its gateway connection alive via a **foreground service** (persistent notification).
|
|
101
|
+
- Open the **Connect** tab.
|
|
102
|
+
- Use **Setup Code** or **Manual** mode.
|
|
103
|
+
- If discovery is blocked, use manual host/port in **Advanced controls**. For private LAN hosts, `ws://` still works. For Tailscale/public hosts, turn on TLS and use a `wss://` / Tailscale Serve endpoint.
|
|
104
|
+
|
|
105
|
+
After the first successful pairing, Android auto-reconnects on launch:
|
|
106
|
+
|
|
107
|
+
- Manual endpoint (if enabled), otherwise
|
|
108
|
+
- The last discovered gateway (best-effort).
|
|
109
|
+
|
|
110
|
+
### Presence alive beacons
|
|
111
|
+
|
|
112
|
+
After the authenticated node session connects, and when the app moves to the background while the
|
|
113
|
+
foreground service is still connected, Android calls `node.event` with
|
|
114
|
+
`event: "node.presence.alive"`. The gateway records this as `lastSeenAtMs`/`lastSeenReason` on the
|
|
115
|
+
paired node/device metadata only after the authenticated node device identity is known.
|
|
116
|
+
|
|
117
|
+
The app counts the beacon as successfully recorded only when the gateway response includes
|
|
118
|
+
`handled: true`. Older gateways may acknowledge `node.event` with `{ "ok": true }`; that response is
|
|
119
|
+
compatible but does not count as a durable last-seen update.
|
|
120
|
+
|
|
121
|
+
### 4) Approve pairing (CLI)
|
|
122
|
+
|
|
123
|
+
On the gateway machine:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
nodmix devices list
|
|
127
|
+
nodmix devices approve <requestId>
|
|
128
|
+
nodmix devices reject <requestId>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Pairing details: [Pairing](/channels/pairing).
|
|
132
|
+
|
|
133
|
+
Optional: if the Android node always connects from a tightly controlled subnet,
|
|
134
|
+
you can opt in to first-time node auto-approval with explicit CIDRs or exact IPs:
|
|
135
|
+
|
|
136
|
+
```json5
|
|
137
|
+
{
|
|
138
|
+
gateway: {
|
|
139
|
+
nodes: {
|
|
140
|
+
pairing: {
|
|
141
|
+
autoApproveCidrs: ["192.168.1.0/24"],
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
This is disabled by default. It applies only to fresh `role: node` pairing with
|
|
149
|
+
no requested scopes. Operator/browser pairing and any role, scope, metadata, or
|
|
150
|
+
public-key change still require manual approval.
|
|
151
|
+
|
|
152
|
+
### 5) Verify the node is connected
|
|
153
|
+
|
|
154
|
+
- Via nodes status:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
nodmix nodes status
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
- Via Gateway:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
nodmix gateway call node.list --params "{}"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 6) Chat + history
|
|
167
|
+
|
|
168
|
+
The Android Chat tab supports session selection (default `main`, plus other existing sessions):
|
|
169
|
+
|
|
170
|
+
- History: `chat.history` (display-normalized; inline directive tags are
|
|
171
|
+
stripped from visible text, plain-text tool-call XML payloads (including
|
|
172
|
+
`<tool_call>...</tool_call>`, `<function_call>...</function_call>`,
|
|
173
|
+
`<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>`, and
|
|
174
|
+
truncated tool-call blocks) and leaked ASCII/full-width model control tokens
|
|
175
|
+
are stripped, pure silent-token assistant rows such as exact `NO_REPLY` /
|
|
176
|
+
`no_reply` are omitted, and oversized rows can be replaced with placeholders)
|
|
177
|
+
- Send: `chat.send`
|
|
178
|
+
- Push updates (best-effort): `chat.subscribe` → `event:"chat"`
|
|
179
|
+
|
|
180
|
+
### 7) Canvas + camera
|
|
181
|
+
|
|
182
|
+
#### Gateway Canvas Host (recommended for web content)
|
|
183
|
+
|
|
184
|
+
If you want the node to show real HTML/CSS/JS that the agent can edit on disk, point the node at the Gateway canvas host.
|
|
185
|
+
|
|
186
|
+
<Note>
|
|
187
|
+
Nodes load canvas from the Gateway HTTP server (same port as `gateway.port`, default `18789`).
|
|
188
|
+
</Note>
|
|
189
|
+
|
|
190
|
+
1. Create `~/.nodmix/workspace/canvas/index.html` on the gateway host.
|
|
191
|
+
|
|
192
|
+
2. Navigate the node to it (LAN):
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
nodmix nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18789/__nodmix__/canvas/"}'
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Tailnet (optional): if both devices are on Tailscale, use a MagicDNS name or tailnet IP instead of `.local`, e.g. `http://<gateway-magicdns>:18789/__nodmix__/canvas/`.
|
|
199
|
+
|
|
200
|
+
This server injects a live-reload client into HTML and reloads on file changes.
|
|
201
|
+
The A2UI host lives at `http://<gateway-host>:18789/__nodmix__/a2ui/`.
|
|
202
|
+
|
|
203
|
+
Canvas commands (foreground only):
|
|
204
|
+
|
|
205
|
+
- `canvas.eval`, `canvas.snapshot`, `canvas.navigate` (use `{"url":""}` or `{"url":"/"}` to return to the default scaffold). `canvas.snapshot` returns `{ format, base64 }` (default `format="jpeg"`).
|
|
206
|
+
- A2UI: `canvas.a2ui.push`, `canvas.a2ui.reset` (`canvas.a2ui.pushJSONL` legacy alias)
|
|
207
|
+
|
|
208
|
+
Camera commands (foreground only; permission-gated):
|
|
209
|
+
|
|
210
|
+
- `camera.snap` (jpg)
|
|
211
|
+
- `camera.clip` (mp4)
|
|
212
|
+
|
|
213
|
+
See [Camera node](/nodes/camera) for parameters and CLI helpers.
|
|
214
|
+
|
|
215
|
+
### 8) Voice + expanded Android command surface
|
|
216
|
+
|
|
217
|
+
- Voice tab: Android has two explicit capture modes. **Mic** is a manual Voice-tab session that sends each pause as a chat turn and stops when the app leaves the foreground or the user leaves the Voice tab. **Talk** is continuous Talk Mode and keeps listening until toggled off or the node disconnects.
|
|
218
|
+
- Talk Mode promotes the existing foreground service from `dataSync` to `dataSync|microphone` before capture starts, then demotes it when Talk Mode stops. Android 14+ requires the `FOREGROUND_SERVICE_MICROPHONE` declaration, the `RECORD_AUDIO` runtime grant, and the microphone service type at runtime.
|
|
219
|
+
- By default, Android Talk uses native speech recognition, Gateway chat, and `talk.speak` through the configured gateway Talk provider. Local system TTS is used only when `talk.speak` is unavailable.
|
|
220
|
+
- Android Talk uses realtime Gateway relay only when `talk.realtime.mode` is `realtime` and `talk.realtime.transport` is `gateway-relay`.
|
|
221
|
+
- Voice wake remains disabled in the Android UX/runtime.
|
|
222
|
+
- Additional Android command families (availability depends on device + permissions):
|
|
223
|
+
- `device.status`, `device.info`, `device.permissions`, `device.health`
|
|
224
|
+
- `notifications.list`, `notifications.actions` (see [Notification forwarding](#notification-forwarding) below)
|
|
225
|
+
- `photos.latest`
|
|
226
|
+
- `contacts.search`, `contacts.add`
|
|
227
|
+
- `calendar.events`, `calendar.add`
|
|
228
|
+
- `callLog.search`
|
|
229
|
+
- `sms.search`
|
|
230
|
+
- `motion.activity`, `motion.pedometer`
|
|
231
|
+
|
|
232
|
+
## Assistant entrypoints
|
|
233
|
+
|
|
234
|
+
Android supports launching Nodmix from the system assistant trigger (Google
|
|
235
|
+
Assistant). When configured, holding the home button or saying "Hey Google, ask
|
|
236
|
+
Nodmix..." opens the app and hands the prompt into the chat composer.
|
|
237
|
+
|
|
238
|
+
This uses Android **App Actions** metadata declared in the app manifest. No
|
|
239
|
+
extra configuration is needed on the gateway side -- the assistant intent is
|
|
240
|
+
handled entirely by the Android app and forwarded as a normal chat message.
|
|
241
|
+
|
|
242
|
+
<Note>
|
|
243
|
+
App Actions availability depends on the device, Google Play Services version,
|
|
244
|
+
and whether the user has set Nodmix as the default assistant app.
|
|
245
|
+
</Note>
|
|
246
|
+
|
|
247
|
+
## Notification forwarding
|
|
248
|
+
|
|
249
|
+
Android can forward device notifications to the gateway as events. Several controls let you scope which notifications are forwarded and when.
|
|
250
|
+
|
|
251
|
+
| Key | Type | Description |
|
|
252
|
+
| -------------------------------- | -------------- | ------------------------------------------------------------------------------------------------- |
|
|
253
|
+
| `notifications.allowPackages` | string[] | Only forward notifications from these package names. If set, all other packages are ignored. |
|
|
254
|
+
| `notifications.denyPackages` | string[] | Never forward notifications from these package names. Applied after `allowPackages`. |
|
|
255
|
+
| `notifications.quietHours.start` | string (HH:mm) | Start of quiet hours window (local device time). Notifications are suppressed during this window. |
|
|
256
|
+
| `notifications.quietHours.end` | string (HH:mm) | End of quiet hours window. |
|
|
257
|
+
| `notifications.rateLimit` | number | Maximum forwarded notifications per package per minute. Excess notifications are dropped. |
|
|
258
|
+
|
|
259
|
+
The notification picker also uses safer behavior for forwarded notification events, preventing accidental forwarding of sensitive system notifications.
|
|
260
|
+
|
|
261
|
+
Example configuration:
|
|
262
|
+
|
|
263
|
+
```json5
|
|
264
|
+
{
|
|
265
|
+
notifications: {
|
|
266
|
+
allowPackages: ["com.slack", "com.whatsapp"],
|
|
267
|
+
denyPackages: ["com.android.systemui"],
|
|
268
|
+
quietHours: {
|
|
269
|
+
start: "22:00",
|
|
270
|
+
end: "07:00",
|
|
271
|
+
},
|
|
272
|
+
rateLimit: 5,
|
|
273
|
+
},
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
<Note>
|
|
278
|
+
Notification forwarding requires the Android Notification Listener permission. The app prompts for this during setup.
|
|
279
|
+
</Note>
|
|
280
|
+
|
|
281
|
+
## Related
|
|
282
|
+
|
|
283
|
+
- [iOS app](/platforms/ios)
|
|
284
|
+
- [Nodes](/nodes)
|
|
285
|
+
- [Android node troubleshooting](/nodes/troubleshooting)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Redirect to /install/digitalocean"
|
|
3
|
+
title: "DigitalOcean (platform)"
|
|
4
|
+
redirect: /install/digitalocean
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This page has moved to [DigitalOcean](/install/digitalocean).
|
|
8
|
+
|
|
9
|
+
## Related
|
|
10
|
+
|
|
11
|
+
- [Install overview](/install)
|
|
12
|
+
- [VPS hosting](/vps)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Platform support overview (Gateway + companion apps)"
|
|
3
|
+
read_when:
|
|
4
|
+
- Looking for OS support or install paths
|
|
5
|
+
- Deciding where to run the Gateway
|
|
6
|
+
title: "Platforms"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Nodmix core is written in TypeScript. **Node is the recommended runtime**.
|
|
10
|
+
Bun is not recommended for the Gateway — known issues with WhatsApp and
|
|
11
|
+
Telegram channels; see [Bun (experimental)](/install/bun) for details.
|
|
12
|
+
|
|
13
|
+
Companion apps exist for macOS (menu bar app) and mobile nodes (iOS/Android). Windows and
|
|
14
|
+
Linux companion apps are planned, but the Gateway is fully supported today.
|
|
15
|
+
Native companion apps for Windows are also planned; the Gateway is recommended via WSL2.
|
|
16
|
+
|
|
17
|
+
## Choose your OS
|
|
18
|
+
|
|
19
|
+
- macOS: [macOS](/platforms/macos)
|
|
20
|
+
- iOS: [iOS](/platforms/ios)
|
|
21
|
+
- Android: [Android](/platforms/android)
|
|
22
|
+
- Windows: [Windows](/platforms/windows)
|
|
23
|
+
- Linux: [Linux](/platforms/linux)
|
|
24
|
+
|
|
25
|
+
## VPS and hosting
|
|
26
|
+
|
|
27
|
+
- VPS hub: [VPS hosting](/vps)
|
|
28
|
+
- Fly.io: [Fly.io](/install/fly)
|
|
29
|
+
- Hetzner (Docker): [Hetzner](/install/hetzner)
|
|
30
|
+
- GCP (Compute Engine): [GCP](/install/gcp)
|
|
31
|
+
- Azure (Linux VM): [Azure](/install/azure)
|
|
32
|
+
- exe.dev (VM + HTTPS proxy): [exe.dev](/install/exe-dev)
|
|
33
|
+
|
|
34
|
+
## Common links
|
|
35
|
+
|
|
36
|
+
- Install guide: [Getting Started](/start/getting-started)
|
|
37
|
+
- Gateway runbook: [Gateway](/gateway)
|
|
38
|
+
- Gateway configuration: [Configuration](/gateway/configuration)
|
|
39
|
+
- Service status: `nodmix gateway status`
|
|
40
|
+
|
|
41
|
+
## Gateway service install (CLI)
|
|
42
|
+
|
|
43
|
+
Use one of these (all supported):
|
|
44
|
+
|
|
45
|
+
- Wizard (recommended): `nodmix onboard --install-daemon`
|
|
46
|
+
- Direct: `nodmix gateway install`
|
|
47
|
+
- Configure flow: `nodmix configure` → select **Gateway service**
|
|
48
|
+
- Repair/migrate: `nodmix doctor` (offers to install or fix the service)
|
|
49
|
+
|
|
50
|
+
The service target depends on OS:
|
|
51
|
+
|
|
52
|
+
- macOS: LaunchAgent (`ai.nodmix.gateway` or `ai.nodmix.<profile>`; legacy `com.nodmix.*`)
|
|
53
|
+
- Linux/WSL2: systemd user service (`nodmix-gateway[-<profile>].service`)
|
|
54
|
+
- Native Windows: Scheduled Task (`Nodmix Gateway` or `Nodmix Gateway (<profile>)`), with a per-user Startup-folder login item fallback if task creation is denied
|
|
55
|
+
|
|
56
|
+
## Related
|
|
57
|
+
|
|
58
|
+
- [Install overview](/install)
|
|
59
|
+
- [macOS app](/platforms/macos)
|
|
60
|
+
- [iOS app](/platforms/ios)
|