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,404 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Export Nodmix diagnostics to any OpenTelemetry collector via the diagnostics-otel plugin (OTLP/HTTP)"
|
|
3
|
+
title: "OpenTelemetry export"
|
|
4
|
+
read_when:
|
|
5
|
+
- You want to send Nodmix model usage, message flow, or session metrics to an OpenTelemetry collector
|
|
6
|
+
- You are wiring traces, metrics, or logs into Grafana, Datadog, Honeycomb, New Relic, Tempo, or another OTLP backend
|
|
7
|
+
- You need the exact metric names, span names, or attribute shapes to build dashboards or alerts
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Nodmix exports diagnostics through the official `diagnostics-otel` plugin
|
|
11
|
+
using **OTLP/HTTP (protobuf)**. Any collector or backend that accepts OTLP/HTTP
|
|
12
|
+
works without code changes. For local file logs and how to read them, see
|
|
13
|
+
[Logging](/logging).
|
|
14
|
+
|
|
15
|
+
## How it fits together
|
|
16
|
+
|
|
17
|
+
- **Diagnostics events** are structured, in-process records emitted by the
|
|
18
|
+
Gateway and bundled plugins for model runs, message flow, sessions, queues,
|
|
19
|
+
and exec.
|
|
20
|
+
- **`diagnostics-otel` plugin** subscribes to those events and exports them as
|
|
21
|
+
OpenTelemetry **metrics**, **traces**, and **logs** over OTLP/HTTP.
|
|
22
|
+
- **Provider calls** receive a W3C `traceparent` header from Nodmix's
|
|
23
|
+
trusted model-call span context when the provider transport accepts custom
|
|
24
|
+
headers. Plugin-emitted trace context is not propagated.
|
|
25
|
+
- Exporters only attach when both the diagnostics surface and the plugin are
|
|
26
|
+
enabled, so the in-process cost stays near zero by default.
|
|
27
|
+
|
|
28
|
+
## Quick start
|
|
29
|
+
|
|
30
|
+
For packaged installs, install the plugin first:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
nodmix plugins install clawhub:@nodmix/diagnostics-otel
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```json5
|
|
37
|
+
{
|
|
38
|
+
plugins: {
|
|
39
|
+
allow: ["diagnostics-otel"],
|
|
40
|
+
entries: {
|
|
41
|
+
"diagnostics-otel": { enabled: true },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
diagnostics: {
|
|
45
|
+
enabled: true,
|
|
46
|
+
otel: {
|
|
47
|
+
enabled: true,
|
|
48
|
+
endpoint: "http://otel-collector:4318",
|
|
49
|
+
protocol: "http/protobuf",
|
|
50
|
+
serviceName: "nodmix-gateway",
|
|
51
|
+
traces: true,
|
|
52
|
+
metrics: true,
|
|
53
|
+
logs: true,
|
|
54
|
+
sampleRate: 0.2,
|
|
55
|
+
flushIntervalMs: 60000,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
You can also enable the plugin from the CLI:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
nodmix plugins enable diagnostics-otel
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
<Note>
|
|
68
|
+
`protocol` currently supports `http/protobuf` only. `grpc` is ignored.
|
|
69
|
+
</Note>
|
|
70
|
+
|
|
71
|
+
## Signals exported
|
|
72
|
+
|
|
73
|
+
| Signal | What goes in it |
|
|
74
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
75
|
+
| **Metrics** | Counters and histograms for token usage, cost, run duration, message flow, Talk events, queue lanes, session state/recovery, exec, and memory pressure. |
|
|
76
|
+
| **Traces** | Spans for model usage, model calls, harness lifecycle, tool execution, exec, webhook/message processing, context assembly, and tool loops. |
|
|
77
|
+
| **Logs** | Structured `logging.file` records exported over OTLP when `diagnostics.otel.logs` is enabled. |
|
|
78
|
+
|
|
79
|
+
Toggle `traces`, `metrics`, and `logs` independently. All three default to on
|
|
80
|
+
when `diagnostics.otel.enabled` is true.
|
|
81
|
+
|
|
82
|
+
## Configuration reference
|
|
83
|
+
|
|
84
|
+
```json5
|
|
85
|
+
{
|
|
86
|
+
diagnostics: {
|
|
87
|
+
enabled: true,
|
|
88
|
+
otel: {
|
|
89
|
+
enabled: true,
|
|
90
|
+
endpoint: "http://otel-collector:4318",
|
|
91
|
+
tracesEndpoint: "http://otel-collector:4318/v1/traces",
|
|
92
|
+
metricsEndpoint: "http://otel-collector:4318/v1/metrics",
|
|
93
|
+
logsEndpoint: "http://otel-collector:4318/v1/logs",
|
|
94
|
+
protocol: "http/protobuf", // grpc is ignored
|
|
95
|
+
serviceName: "nodmix-gateway",
|
|
96
|
+
headers: { "x-collector-token": "..." },
|
|
97
|
+
traces: true,
|
|
98
|
+
metrics: true,
|
|
99
|
+
logs: true,
|
|
100
|
+
sampleRate: 0.2, // root-span sampler, 0.0..1.0
|
|
101
|
+
flushIntervalMs: 60000, // metric export interval (min 1000ms)
|
|
102
|
+
captureContent: {
|
|
103
|
+
enabled: false,
|
|
104
|
+
inputMessages: false,
|
|
105
|
+
outputMessages: false,
|
|
106
|
+
toolInputs: false,
|
|
107
|
+
toolOutputs: false,
|
|
108
|
+
systemPrompt: false,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Environment variables
|
|
116
|
+
|
|
117
|
+
| Variable | Purpose |
|
|
118
|
+
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
119
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | Override `diagnostics.otel.endpoint`. If the value already contains `/v1/traces`, `/v1/metrics`, or `/v1/logs`, it is used as-is. |
|
|
120
|
+
| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` / `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` / `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | Signal-specific endpoint overrides used when the matching `diagnostics.otel.*Endpoint` config key is unset. Signal-specific config wins over signal-specific env, which wins over the shared endpoint. |
|
|
121
|
+
| `OTEL_SERVICE_NAME` | Override `diagnostics.otel.serviceName`. |
|
|
122
|
+
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Override the wire protocol (only `http/protobuf` is honored today). |
|
|
123
|
+
| `OTEL_SEMCONV_STABILITY_OPT_IN` | Set to `gen_ai_latest_experimental` to emit the latest experimental GenAI span attribute (`gen_ai.provider.name`) instead of the legacy `gen_ai.system`. GenAI metrics always use bounded, low-cardinality semantic attributes regardless. |
|
|
124
|
+
| `NODMIX_OTEL_PRELOADED` | Set to `1` when another preload or host process already registered the global OpenTelemetry SDK. The plugin then skips its own NodeSDK lifecycle but still wires diagnostic listeners and honors `traces`/`metrics`/`logs`. |
|
|
125
|
+
|
|
126
|
+
## Privacy and content capture
|
|
127
|
+
|
|
128
|
+
Raw model/tool content is **not** exported by default. Spans carry bounded
|
|
129
|
+
identifiers (channel, provider, model, error category, hash-only request ids)
|
|
130
|
+
and never include prompt text, response text, tool inputs, tool outputs, or
|
|
131
|
+
session keys.
|
|
132
|
+
Talk metrics export only bounded event metadata such as mode, transport,
|
|
133
|
+
provider, and event type. They do not include transcripts, audio payloads,
|
|
134
|
+
session ids, turn ids, call ids, room ids, or handoff tokens.
|
|
135
|
+
|
|
136
|
+
Outbound model requests may include a W3C `traceparent` header. That header is
|
|
137
|
+
generated only from Nodmix-owned diagnostic trace context for the active model
|
|
138
|
+
call. Existing caller-supplied `traceparent` headers are replaced, so plugins or
|
|
139
|
+
custom provider options cannot spoof cross-service trace ancestry.
|
|
140
|
+
|
|
141
|
+
Set `diagnostics.otel.captureContent.*` to `true` only when your collector and
|
|
142
|
+
retention policy are approved for prompt, response, tool, or system-prompt
|
|
143
|
+
text. Each subkey is opt-in independently:
|
|
144
|
+
|
|
145
|
+
- `inputMessages` - user prompt content.
|
|
146
|
+
- `outputMessages` - model response content.
|
|
147
|
+
- `toolInputs` - tool argument payloads.
|
|
148
|
+
- `toolOutputs` - tool result payloads.
|
|
149
|
+
- `systemPrompt` - assembled system/developer prompt.
|
|
150
|
+
|
|
151
|
+
When any subkey is enabled, model and tool spans get bounded, redacted
|
|
152
|
+
`nodmix.content.*` attributes for that class only.
|
|
153
|
+
|
|
154
|
+
## Sampling and flushing
|
|
155
|
+
|
|
156
|
+
- **Traces:** `diagnostics.otel.sampleRate` (root-span only, `0.0` drops all,
|
|
157
|
+
`1.0` keeps all).
|
|
158
|
+
- **Metrics:** `diagnostics.otel.flushIntervalMs` (minimum `1000`).
|
|
159
|
+
- **Logs:** OTLP logs respect `logging.level` (file log level). They use the
|
|
160
|
+
diagnostic log-record redaction path, not console formatting. High-volume
|
|
161
|
+
installs should prefer OTLP collector sampling/filtering over local sampling.
|
|
162
|
+
- **File-log correlation:** JSONL file logs include top-level `traceId`,
|
|
163
|
+
`spanId`, `parentSpanId`, and `traceFlags` when the log call carries a valid
|
|
164
|
+
diagnostic trace context, which lets log processors join local log lines with
|
|
165
|
+
exported spans.
|
|
166
|
+
- **Request correlation:** Gateway HTTP requests and WebSocket frames create an
|
|
167
|
+
internal request trace scope. Logs and diagnostic events inside that scope
|
|
168
|
+
inherit the request trace by default, while agent run and model-call spans are
|
|
169
|
+
created as children so provider `traceparent` headers stay on the same trace.
|
|
170
|
+
|
|
171
|
+
## Exported metrics
|
|
172
|
+
|
|
173
|
+
### Model usage
|
|
174
|
+
|
|
175
|
+
- `nodmix.tokens` (counter, attrs: `nodmix.token`, `nodmix.channel`, `nodmix.provider`, `nodmix.model`, `nodmix.agent`)
|
|
176
|
+
- `nodmix.cost.usd` (counter, attrs: `nodmix.channel`, `nodmix.provider`, `nodmix.model`)
|
|
177
|
+
- `nodmix.run.duration_ms` (histogram, attrs: `nodmix.channel`, `nodmix.provider`, `nodmix.model`)
|
|
178
|
+
- `nodmix.context.tokens` (histogram, attrs: `nodmix.context`, `nodmix.channel`, `nodmix.provider`, `nodmix.model`)
|
|
179
|
+
- `gen_ai.client.token.usage` (histogram, GenAI semantic-conventions metric, attrs: `gen_ai.token.type` = `input`/`output`, `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`)
|
|
180
|
+
- `gen_ai.client.operation.duration` (histogram, seconds, GenAI semantic-conventions metric, attrs: `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`, optional `error.type`)
|
|
181
|
+
- `nodmix.model_call.duration_ms` (histogram, attrs: `nodmix.provider`, `nodmix.model`, `nodmix.api`, `nodmix.transport`, plus `nodmix.errorCategory` and `nodmix.failureKind` on classified errors)
|
|
182
|
+
- `nodmix.model_call.request_bytes` (histogram, UTF-8 byte size of the final model request payload; no raw payload content)
|
|
183
|
+
- `nodmix.model_call.response_bytes` (histogram, UTF-8 byte size of streamed model response events; no raw response content)
|
|
184
|
+
- `nodmix.model_call.time_to_first_byte_ms` (histogram, elapsed time before the first streamed response event)
|
|
185
|
+
|
|
186
|
+
### Message flow
|
|
187
|
+
|
|
188
|
+
- `nodmix.webhook.received` (counter, attrs: `nodmix.channel`, `nodmix.webhook`)
|
|
189
|
+
- `nodmix.webhook.error` (counter, attrs: `nodmix.channel`, `nodmix.webhook`)
|
|
190
|
+
- `nodmix.webhook.duration_ms` (histogram, attrs: `nodmix.channel`, `nodmix.webhook`)
|
|
191
|
+
- `nodmix.message.queued` (counter, attrs: `nodmix.channel`, `nodmix.source`)
|
|
192
|
+
- `nodmix.message.received` (counter, attrs: `nodmix.channel`, `nodmix.source`)
|
|
193
|
+
- `nodmix.message.dispatch.started` (counter, attrs: `nodmix.channel`, `nodmix.source`)
|
|
194
|
+
- `nodmix.message.dispatch.completed` (counter, attrs: `nodmix.channel`, `nodmix.outcome`, `nodmix.reason`, `nodmix.source`)
|
|
195
|
+
- `nodmix.message.dispatch.duration_ms` (histogram, attrs: `nodmix.channel`, `nodmix.outcome`, `nodmix.reason`, `nodmix.source`)
|
|
196
|
+
- `nodmix.message.processed` (counter, attrs: `nodmix.channel`, `nodmix.outcome`)
|
|
197
|
+
- `nodmix.message.duration_ms` (histogram, attrs: `nodmix.channel`, `nodmix.outcome`)
|
|
198
|
+
- `nodmix.message.delivery.started` (counter, attrs: `nodmix.channel`, `nodmix.delivery.kind`)
|
|
199
|
+
- `nodmix.message.delivery.duration_ms` (histogram, attrs: `nodmix.channel`, `nodmix.delivery.kind`, `nodmix.outcome`, `nodmix.errorCategory`)
|
|
200
|
+
|
|
201
|
+
### Talk
|
|
202
|
+
|
|
203
|
+
- `nodmix.talk.event` (counter, attrs: `nodmix.talk.event_type`, `nodmix.talk.mode`, `nodmix.talk.transport`, `nodmix.talk.brain`, `nodmix.talk.provider`)
|
|
204
|
+
- `nodmix.talk.event.duration_ms` (histogram, attrs: same as `nodmix.talk.event`; emitted when a Talk event reports duration)
|
|
205
|
+
- `nodmix.talk.audio.bytes` (histogram, attrs: same as `nodmix.talk.event`; emitted for Talk audio frame events that report byte length)
|
|
206
|
+
|
|
207
|
+
### Queues and sessions
|
|
208
|
+
|
|
209
|
+
- `nodmix.queue.lane.enqueue` (counter, attrs: `nodmix.lane`)
|
|
210
|
+
- `nodmix.queue.lane.dequeue` (counter, attrs: `nodmix.lane`)
|
|
211
|
+
- `nodmix.queue.depth` (histogram, attrs: `nodmix.lane` or `nodmix.channel=heartbeat`)
|
|
212
|
+
- `nodmix.queue.wait_ms` (histogram, attrs: `nodmix.lane`)
|
|
213
|
+
- `nodmix.session.state` (counter, attrs: `nodmix.state`, `nodmix.reason`)
|
|
214
|
+
- `nodmix.session.stuck` (counter, attrs: `nodmix.state`; emitted only for stale session bookkeeping with no active work)
|
|
215
|
+
- `nodmix.session.stuck_age_ms` (histogram, attrs: `nodmix.state`; emitted only for stale session bookkeeping with no active work)
|
|
216
|
+
- `nodmix.session.turn.created` (counter, attrs: `nodmix.agent`, `nodmix.channel`, `nodmix.trigger`)
|
|
217
|
+
- `nodmix.session.recovery.requested` (counter, attrs: `nodmix.state`, `nodmix.action`, `nodmix.active_work_kind`, `nodmix.reason`)
|
|
218
|
+
- `nodmix.session.recovery.completed` (counter, attrs: `nodmix.state`, `nodmix.action`, `nodmix.status`, `nodmix.active_work_kind`, `nodmix.reason`)
|
|
219
|
+
- `nodmix.session.recovery.age_ms` (histogram, attrs: same as the matching recovery counter)
|
|
220
|
+
- `nodmix.run.attempt` (counter, attrs: `nodmix.attempt`)
|
|
221
|
+
|
|
222
|
+
### Session liveness telemetry
|
|
223
|
+
|
|
224
|
+
`diagnostics.stuckSessionWarnMs` is the no-progress age threshold for session
|
|
225
|
+
liveness diagnostics. A `processing` session does not age toward this threshold
|
|
226
|
+
while Nodmix observes reply, tool, status, block, or ACP runtime progress.
|
|
227
|
+
Typing keepalives are not counted as progress, so a silent model or harness can
|
|
228
|
+
still be detected.
|
|
229
|
+
|
|
230
|
+
Nodmix classifies sessions by the work it can still observe:
|
|
231
|
+
|
|
232
|
+
- `session.long_running`: active embedded work, model calls, or tool calls are
|
|
233
|
+
still making progress.
|
|
234
|
+
- `session.stalled`: active work exists, but the active run has not reported
|
|
235
|
+
recent progress. Stalled embedded runs stay observe-only at first, then
|
|
236
|
+
abort-drain after `diagnostics.stuckSessionAbortMs` with no progress so queued
|
|
237
|
+
turns behind the lane can resume. When unset, the abort threshold defaults to
|
|
238
|
+
the safer extended window of at least 5 minutes and 3x
|
|
239
|
+
`diagnostics.stuckSessionWarnMs`.
|
|
240
|
+
- `session.stuck`: stale session bookkeeping with no active work. This releases
|
|
241
|
+
the affected session lane immediately.
|
|
242
|
+
|
|
243
|
+
Recovery emits structured `session.recovery.requested` and
|
|
244
|
+
`session.recovery.completed` events. Diagnostic session state is marked idle
|
|
245
|
+
only after a mutating recovery outcome (`aborted` or `released`) and only if the
|
|
246
|
+
same processing generation is still current.
|
|
247
|
+
|
|
248
|
+
Only `session.stuck` emits the `nodmix.session.stuck` counter, the
|
|
249
|
+
`nodmix.session.stuck_age_ms` histogram, and the `nodmix.session.stuck`
|
|
250
|
+
span. Repeated `session.stuck` diagnostics back off while the session remains
|
|
251
|
+
unchanged, so dashboards should alert on sustained increases rather than every
|
|
252
|
+
heartbeat tick. For the config knob and defaults, see
|
|
253
|
+
[Configuration reference](/gateway/configuration-reference#diagnostics).
|
|
254
|
+
|
|
255
|
+
### Harness lifecycle
|
|
256
|
+
|
|
257
|
+
- `nodmix.harness.duration_ms` (histogram, attrs: `nodmix.harness.id`, `nodmix.harness.plugin`, `nodmix.outcome`, `nodmix.harness.phase` on errors)
|
|
258
|
+
|
|
259
|
+
### Exec
|
|
260
|
+
|
|
261
|
+
- `nodmix.exec.duration_ms` (histogram, attrs: `nodmix.exec.target`, `nodmix.exec.mode`, `nodmix.outcome`, `nodmix.failureKind`)
|
|
262
|
+
|
|
263
|
+
### Diagnostics internals (memory and tool loop)
|
|
264
|
+
|
|
265
|
+
- `nodmix.memory.heap_used_bytes` (histogram, attrs: `nodmix.memory.kind`)
|
|
266
|
+
- `nodmix.memory.rss_bytes` (histogram)
|
|
267
|
+
- `nodmix.memory.pressure` (counter, attrs: `nodmix.memory.level`)
|
|
268
|
+
- `nodmix.tool.loop.iterations` (counter, attrs: `nodmix.toolName`, `nodmix.outcome`)
|
|
269
|
+
- `nodmix.tool.loop.duration_ms` (histogram, attrs: `nodmix.toolName`, `nodmix.outcome`)
|
|
270
|
+
|
|
271
|
+
## Exported spans
|
|
272
|
+
|
|
273
|
+
- `nodmix.model.usage`
|
|
274
|
+
- `nodmix.channel`, `nodmix.provider`, `nodmix.model`
|
|
275
|
+
- `nodmix.tokens.*` (input/output/cache_read/cache_write/total)
|
|
276
|
+
- `gen_ai.system` by default, or `gen_ai.provider.name` when the latest GenAI semantic conventions are opted in
|
|
277
|
+
- `gen_ai.request.model`, `gen_ai.operation.name`, `gen_ai.usage.*`
|
|
278
|
+
- `nodmix.run`
|
|
279
|
+
- `nodmix.outcome`, `nodmix.channel`, `nodmix.provider`, `nodmix.model`, `nodmix.errorCategory`
|
|
280
|
+
- `nodmix.model.call`
|
|
281
|
+
- `gen_ai.system` by default, or `gen_ai.provider.name` when the latest GenAI semantic conventions are opted in
|
|
282
|
+
- `gen_ai.request.model`, `gen_ai.operation.name`, `nodmix.provider`, `nodmix.model`, `nodmix.api`, `nodmix.transport`
|
|
283
|
+
- `nodmix.errorCategory` and optional `nodmix.failureKind` on errors
|
|
284
|
+
- `nodmix.model_call.request_bytes`, `nodmix.model_call.response_bytes`, `nodmix.model_call.time_to_first_byte_ms`
|
|
285
|
+
- `nodmix.provider.request_id_hash` (bounded SHA-based hash of the upstream provider request id; raw ids are not exported)
|
|
286
|
+
- `nodmix.harness.run`
|
|
287
|
+
- `nodmix.harness.id`, `nodmix.harness.plugin`, `nodmix.outcome`, `nodmix.provider`, `nodmix.model`, `nodmix.channel`
|
|
288
|
+
- On completion: `nodmix.harness.result_classification`, `nodmix.harness.yield_detected`, `nodmix.harness.items.started`, `nodmix.harness.items.completed`, `nodmix.harness.items.active`
|
|
289
|
+
- On error: `nodmix.harness.phase`, `nodmix.errorCategory`, optional `nodmix.harness.cleanup_failed`
|
|
290
|
+
- `nodmix.tool.execution`
|
|
291
|
+
- `gen_ai.tool.name`, `nodmix.toolName`, `nodmix.errorCategory`, `nodmix.tool.params.*`
|
|
292
|
+
- `nodmix.exec`
|
|
293
|
+
- `nodmix.exec.target`, `nodmix.exec.mode`, `nodmix.outcome`, `nodmix.failureKind`, `nodmix.exec.command_length`, `nodmix.exec.exit_code`, `nodmix.exec.timed_out`
|
|
294
|
+
- `nodmix.webhook.processed`
|
|
295
|
+
- `nodmix.channel`, `nodmix.webhook`
|
|
296
|
+
- `nodmix.webhook.error`
|
|
297
|
+
- `nodmix.channel`, `nodmix.webhook`, `nodmix.error`
|
|
298
|
+
- `nodmix.message.processed`
|
|
299
|
+
- `nodmix.channel`, `nodmix.outcome`, `nodmix.reason`
|
|
300
|
+
- `nodmix.message.delivery`
|
|
301
|
+
- `nodmix.channel`, `nodmix.delivery.kind`, `nodmix.outcome`, `nodmix.errorCategory`, `nodmix.delivery.result_count`
|
|
302
|
+
- `nodmix.session.stuck`
|
|
303
|
+
- `nodmix.state`, `nodmix.ageMs`, `nodmix.queueDepth`
|
|
304
|
+
- `nodmix.context.assembled`
|
|
305
|
+
- `nodmix.prompt.size`, `nodmix.history.size`, `nodmix.context.tokens`, `nodmix.errorCategory` (no prompt, history, response, or session-key content)
|
|
306
|
+
- `nodmix.tool.loop`
|
|
307
|
+
- `nodmix.toolName`, `nodmix.outcome`, `nodmix.iterations`, `nodmix.errorCategory` (no loop messages, params, or tool output)
|
|
308
|
+
- `nodmix.memory.pressure`
|
|
309
|
+
- `nodmix.memory.level`, `nodmix.memory.heap_used_bytes`, `nodmix.memory.rss_bytes`
|
|
310
|
+
|
|
311
|
+
When content capture is explicitly enabled, model and tool spans can also
|
|
312
|
+
include bounded, redacted `nodmix.content.*` attributes for the specific
|
|
313
|
+
content classes you opted into.
|
|
314
|
+
|
|
315
|
+
## Diagnostic event catalog
|
|
316
|
+
|
|
317
|
+
The events below back the metrics and spans above. Plugins can also subscribe
|
|
318
|
+
to them directly without OTLP export.
|
|
319
|
+
|
|
320
|
+
**Model usage**
|
|
321
|
+
|
|
322
|
+
- `model.usage` - tokens, cost, duration, context, provider/model/channel,
|
|
323
|
+
session ids. `usage` is provider/turn accounting for cost and telemetry;
|
|
324
|
+
`context.used` is the current prompt/context snapshot and can be lower than
|
|
325
|
+
provider `usage.total` when cached input or tool-loop calls are involved.
|
|
326
|
+
|
|
327
|
+
**Message flow**
|
|
328
|
+
|
|
329
|
+
- `webhook.received` / `webhook.processed` / `webhook.error`
|
|
330
|
+
- `message.queued` / `message.processed`
|
|
331
|
+
- `message.delivery.started` / `message.delivery.completed` / `message.delivery.error`
|
|
332
|
+
|
|
333
|
+
**Queue and session**
|
|
334
|
+
|
|
335
|
+
- `queue.lane.enqueue` / `queue.lane.dequeue`
|
|
336
|
+
- `session.state` / `session.long_running` / `session.stalled` / `session.stuck`
|
|
337
|
+
- `run.attempt` / `run.progress`
|
|
338
|
+
- `diagnostic.heartbeat` (aggregate counters: webhooks/queue/session)
|
|
339
|
+
|
|
340
|
+
**Harness lifecycle**
|
|
341
|
+
|
|
342
|
+
- `harness.run.started` / `harness.run.completed` / `harness.run.error` -
|
|
343
|
+
per-run lifecycle for the agent harness. Includes `harnessId`, optional
|
|
344
|
+
`pluginId`, provider/model/channel, and run id. Completion adds
|
|
345
|
+
`durationMs`, `outcome`, optional `resultClassification`, `yieldDetected`,
|
|
346
|
+
and `itemLifecycle` counts. Errors add `phase`
|
|
347
|
+
(`prepare`/`start`/`send`/`resolve`/`cleanup`), `errorCategory`, and
|
|
348
|
+
optional `cleanupFailed`.
|
|
349
|
+
|
|
350
|
+
**Exec**
|
|
351
|
+
|
|
352
|
+
- `exec.process.completed` - terminal outcome, duration, target, mode, exit
|
|
353
|
+
code, and failure kind. Command text and working directories are not
|
|
354
|
+
included.
|
|
355
|
+
|
|
356
|
+
## Without an exporter
|
|
357
|
+
|
|
358
|
+
You can keep diagnostics events available to plugins or custom sinks without
|
|
359
|
+
running `diagnostics-otel`:
|
|
360
|
+
|
|
361
|
+
```json5
|
|
362
|
+
{
|
|
363
|
+
diagnostics: { enabled: true },
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
For targeted debug output without raising `logging.level`, use diagnostics
|
|
368
|
+
flags. Flags are case-insensitive and support wildcards (e.g. `telegram.*` or
|
|
369
|
+
`*`):
|
|
370
|
+
|
|
371
|
+
```json5
|
|
372
|
+
{
|
|
373
|
+
diagnostics: { flags: ["telegram.http"] },
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
Or as a one-off env override:
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
NODMIX_DIAGNOSTICS=telegram.http,telegram.payload nodmix gateway
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Flag output goes to the standard log file (`logging.file`) and is still
|
|
384
|
+
redacted by `logging.redactSensitive`. Full guide:
|
|
385
|
+
[Diagnostics flags](/diagnostics/flags).
|
|
386
|
+
|
|
387
|
+
## Disable
|
|
388
|
+
|
|
389
|
+
```json5
|
|
390
|
+
{
|
|
391
|
+
diagnostics: { otel: { enabled: false } },
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
You can also leave `diagnostics-otel` out of `plugins.allow`, or run
|
|
396
|
+
`nodmix plugins disable diagnostics-otel`.
|
|
397
|
+
|
|
398
|
+
## Related
|
|
399
|
+
|
|
400
|
+
- [Logging](/logging) - file logs, console output, CLI tailing, and the Control UI Logs tab
|
|
401
|
+
- [Gateway logging internals](/gateway/logging) - WS log styles, subsystem prefixes, and console capture
|
|
402
|
+
- [Diagnostics flags](/diagnostics/flags) - targeted debug-log flags
|
|
403
|
+
- [Diagnostics export](/gateway/diagnostics) - operator support-bundle tool (separate from OTEL export)
|
|
404
|
+
- [Configuration reference](/gateway/configuration-reference#diagnostics) - full `diagnostics.*` field reference
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Operator roles, scopes, and approval-time checks for Gateway clients"
|
|
3
|
+
read_when:
|
|
4
|
+
- Debugging missing operator scope errors
|
|
5
|
+
- Reviewing device or node pairing approvals
|
|
6
|
+
- Adding or classifying Gateway RPC methods
|
|
7
|
+
title: "Operator scopes"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Operator scopes define what a Gateway client may do after it authenticates.
|
|
11
|
+
They are a control-plane guardrail inside one trusted Gateway operator domain,
|
|
12
|
+
not hostile multi-tenant isolation. If you need strong separation between
|
|
13
|
+
people, teams, or machines, run separate Gateways under separate OS users or
|
|
14
|
+
hosts.
|
|
15
|
+
|
|
16
|
+
Related: [Security](/gateway/security), [Gateway protocol](/gateway/protocol),
|
|
17
|
+
[Gateway pairing](/gateway/pairing), [Devices CLI](/cli/devices).
|
|
18
|
+
|
|
19
|
+
## Roles
|
|
20
|
+
|
|
21
|
+
Gateway WebSocket clients connect with one role:
|
|
22
|
+
|
|
23
|
+
- `operator`: control-plane clients such as CLI, Control UI, automation, and
|
|
24
|
+
trusted helper processes.
|
|
25
|
+
- `node`: capability hosts such as macOS, iOS, Android, or headless nodes that
|
|
26
|
+
expose commands through `node.invoke`.
|
|
27
|
+
|
|
28
|
+
Operator RPC methods require the `operator` role. Node-originated methods
|
|
29
|
+
require the `node` role.
|
|
30
|
+
|
|
31
|
+
## Scope levels
|
|
32
|
+
|
|
33
|
+
| Scope | Meaning |
|
|
34
|
+
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
35
|
+
| `operator.read` | Read-only status, lists, catalog, logs, session reads, and other non-mutating control-plane calls. |
|
|
36
|
+
| `operator.write` | Normal mutating operator actions such as sending messages, invoking tools, updating talk/voice settings, and node command relay. Also satisfies `operator.read`. |
|
|
37
|
+
| `operator.admin` | Administrative control-plane access. Satisfies every `operator.*` scope. Required for config mutation, updates, native hooks, sensitive reserved namespaces, and high-risk approvals. |
|
|
38
|
+
| `operator.pairing` | Device and node pairing management, including listing, approving, rejecting, removing, rotating, and revoking pairing records or device tokens. |
|
|
39
|
+
| `operator.approvals` | Exec and plugin approval APIs. |
|
|
40
|
+
| `operator.talk.secrets` | Reading Talk configuration with secrets included. |
|
|
41
|
+
|
|
42
|
+
Unknown future `operator.*` scopes require an exact match unless the caller has
|
|
43
|
+
`operator.admin`.
|
|
44
|
+
|
|
45
|
+
## Method scope is only the first gate
|
|
46
|
+
|
|
47
|
+
Each Gateway RPC has a least-privilege method scope. That method scope decides
|
|
48
|
+
whether the request can reach the handler. Some handlers then apply stricter
|
|
49
|
+
approval-time checks based on the concrete thing being approved or mutated.
|
|
50
|
+
|
|
51
|
+
Examples:
|
|
52
|
+
|
|
53
|
+
- `device.pair.approve` is reachable with `operator.pairing`, but approving an
|
|
54
|
+
operator device can only mint or preserve scopes the caller already holds.
|
|
55
|
+
- `node.pair.approve` is reachable with `operator.pairing`, then derives extra
|
|
56
|
+
approval scopes from the pending node command list.
|
|
57
|
+
- `chat.send` is normally a write-scoped method, but persistent `/config set`
|
|
58
|
+
and `/config unset` require `operator.admin` at command level.
|
|
59
|
+
|
|
60
|
+
This lets lower-scope operators perform low-risk pairing actions without making
|
|
61
|
+
all pairing approval admin-only.
|
|
62
|
+
|
|
63
|
+
## Device pairing approvals
|
|
64
|
+
|
|
65
|
+
Device pairing records are the durable source of approved roles and scopes.
|
|
66
|
+
Already paired devices do not get broader access silently: reconnects that ask
|
|
67
|
+
for a broader role or broader scopes create a new pending upgrade request.
|
|
68
|
+
|
|
69
|
+
When approving a device request:
|
|
70
|
+
|
|
71
|
+
- A request with no operator role does not need operator token scope approval.
|
|
72
|
+
- A request for `operator.read`, `operator.write`, `operator.approvals`,
|
|
73
|
+
`operator.pairing`, or `operator.talk.secrets` requires the caller to hold
|
|
74
|
+
those scopes, or `operator.admin`.
|
|
75
|
+
- A request for `operator.admin` requires `operator.admin`.
|
|
76
|
+
- A repair request with no explicit scopes can inherit the existing operator
|
|
77
|
+
token scopes. If that existing token is admin-scoped, approval still requires
|
|
78
|
+
`operator.admin`.
|
|
79
|
+
|
|
80
|
+
For paired-device token sessions, management is self-scoped unless the caller
|
|
81
|
+
also has `operator.admin`: non-admin callers see only their own pairing entries,
|
|
82
|
+
can approve or reject only their own pending request, and can rotate, revoke, or
|
|
83
|
+
remove only their own device entry.
|
|
84
|
+
|
|
85
|
+
## Node pairing approvals
|
|
86
|
+
|
|
87
|
+
Legacy `node.pair.*` uses a separate Gateway-owned node pairing store. WS nodes
|
|
88
|
+
use device pairing with `role: node`, but the same approval-level vocabulary
|
|
89
|
+
applies.
|
|
90
|
+
|
|
91
|
+
`node.pair.approve` uses the pending request command list to derive additional
|
|
92
|
+
required scopes:
|
|
93
|
+
|
|
94
|
+
- Commandless request: `operator.pairing`
|
|
95
|
+
- Non-exec node commands: `operator.pairing` + `operator.write`
|
|
96
|
+
- `system.run`, `system.run.prepare`, or `system.which`:
|
|
97
|
+
`operator.pairing` + `operator.admin`
|
|
98
|
+
|
|
99
|
+
Node pairing establishes identity and trust. It does not replace the node's
|
|
100
|
+
own `system.run` exec approval policy.
|
|
101
|
+
|
|
102
|
+
## Shared-secret auth
|
|
103
|
+
|
|
104
|
+
Shared gateway token/password auth is treated as trusted operator access for
|
|
105
|
+
that Gateway. OpenAI-compatible HTTP surfaces, `/tools/invoke`, and HTTP session
|
|
106
|
+
history endpoints restore the normal full operator default scope set for
|
|
107
|
+
shared-secret bearer auth, even if a caller sends narrower declared scopes.
|
|
108
|
+
|
|
109
|
+
Identity-bearing modes, such as trusted proxy auth or private-ingress `none`,
|
|
110
|
+
can still honor explicit declared scopes. Use separate Gateways for real trust
|
|
111
|
+
boundary separation.
|