@symerian/symi 3.0.21 → 3.0.22
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/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/package.json +1 -1
- package/docs/.i18n/README.md +0 -31
- package/docs/.i18n/glossary.ja-JP.json +0 -14
- package/docs/.i18n/glossary.zh-CN.json +0 -210
- package/docs/.i18n/ja-JP.tm.jsonl +0 -0
- package/docs/.i18n/zh-CN.tm.jsonl +0 -1303
- package/docs/CNAME +0 -1
- package/docs/assets/install-script.svg +0 -1
- 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/pixel-symi.svg +0 -60
- 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 +0 -11
- 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 +0 -13
- 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.svg +0 -14
- package/docs/assets/sponsors/openai.svg +0 -3
- package/docs/assets/symi-logo-text-dark.png +0 -0
- package/docs/assets/symi-logo-text.png +0 -0
- package/docs/automation/auth-monitoring.md +0 -44
- package/docs/automation/cron-jobs.md +0 -540
- package/docs/automation/cron-vs-heartbeat.md +0 -286
- package/docs/automation/gmail-pubsub.md +0 -256
- package/docs/automation/hooks.md +0 -998
- package/docs/automation/poll.md +0 -61
- package/docs/automation/troubleshooting.md +0 -122
- package/docs/automation/webhook.md +0 -213
- package/docs/brave-search.md +0 -41
- package/docs/capabilities.md +0 -151
- package/docs/channels/bluebubbles.md +0 -346
- package/docs/channels/broadcast-groups.md +0 -441
- package/docs/channels/channel-routing.md +0 -112
- package/docs/channels/feishu.md +0 -586
- package/docs/channels/googlechat.md +0 -253
- package/docs/channels/grammy.md +0 -31
- package/docs/channels/group-messages.md +0 -82
- package/docs/channels/groups.md +0 -364
- package/docs/channels/imessage.md +0 -366
- package/docs/channels/index.md +0 -46
- package/docs/channels/irc.md +0 -234
- package/docs/channels/line.md +0 -186
- package/docs/channels/location.md +0 -56
- package/docs/channels/matrix.md +0 -300
- package/docs/channels/mattermost.md +0 -158
- package/docs/channels/msteams.md +0 -769
- package/docs/channels/nextcloud-talk.md +0 -138
- package/docs/channels/nostr.md +0 -233
- package/docs/channels/pairing.md +0 -100
- package/docs/channels/signal.md +0 -322
- package/docs/channels/slack.md +0 -510
- package/docs/channels/telegram.md +0 -748
- package/docs/channels/tlon.md +0 -148
- package/docs/channels/troubleshooting.md +0 -110
- package/docs/channels/twitch.md +0 -379
- package/docs/channels/whatsapp.md +0 -444
- package/docs/channels/zalo.md +0 -192
- package/docs/channels/zalouser.md +0 -140
- package/docs/ci.md +0 -50
- package/docs/cli/acp.md +0 -182
- package/docs/cli/agent.md +0 -24
- package/docs/cli/agents.md +0 -75
- package/docs/cli/approvals.md +0 -50
- package/docs/cli/browser.md +0 -107
- package/docs/cli/channels.md +0 -73
- package/docs/cli/config.md +0 -50
- package/docs/cli/configure.md +0 -32
- package/docs/cli/cron.md +0 -44
- package/docs/cli/dashboard.md +0 -16
- package/docs/cli/devices.md +0 -73
- package/docs/cli/directory.md +0 -62
- package/docs/cli/dns.md +0 -23
- package/docs/cli/docs.md +0 -15
- package/docs/cli/doctor.md +0 -41
- package/docs/cli/gateway.md +0 -202
- package/docs/cli/health.md +0 -21
- package/docs/cli/hooks.md +0 -313
- package/docs/cli/index.md +0 -1029
- package/docs/cli/logs.md +0 -28
- package/docs/cli/memory.md +0 -45
- package/docs/cli/message.md +0 -214
- package/docs/cli/models.md +0 -79
- package/docs/cli/node.md +0 -112
- package/docs/cli/nodes.md +0 -73
- package/docs/cli/onboard.md +0 -76
- package/docs/cli/pairing.md +0 -21
- package/docs/cli/plugins.md +0 -92
- package/docs/cli/reset.md +0 -17
- package/docs/cli/sandbox.md +0 -152
- package/docs/cli/security.md +0 -64
- package/docs/cli/sessions.md +0 -16
- package/docs/cli/setup.md +0 -29
- package/docs/cli/skills.md +0 -26
- package/docs/cli/status.md +0 -25
- package/docs/cli/system.md +0 -60
- package/docs/cli/tui.md +0 -23
- package/docs/cli/uninstall.md +0 -17
- package/docs/cli/update.md +0 -98
- package/docs/cli/voicecall.md +0 -34
- package/docs/cli/webhooks.md +0 -25
- package/docs/concepts/agent-loop.md +0 -148
- package/docs/concepts/agent-workspace.md +0 -234
- package/docs/concepts/agent.md +0 -123
- package/docs/concepts/architecture.md +0 -135
- package/docs/concepts/compaction.md +0 -61
- package/docs/concepts/context.md +0 -161
- package/docs/concepts/features.md +0 -51
- package/docs/concepts/markdown-formatting.md +0 -128
- package/docs/concepts/memory.md +0 -729
- package/docs/concepts/messages.md +0 -153
- package/docs/concepts/model-failover.md +0 -149
- package/docs/concepts/model-providers.md +0 -424
- package/docs/concepts/models.md +0 -208
- package/docs/concepts/multi-agent.md +0 -521
- package/docs/concepts/oauth.md +0 -145
- package/docs/concepts/presence.md +0 -102
- package/docs/concepts/queue.md +0 -86
- package/docs/concepts/retry.md +0 -64
- package/docs/concepts/session-pruning.md +0 -123
- package/docs/concepts/session-tool.md +0 -213
- package/docs/concepts/session.md +0 -199
- package/docs/concepts/sessions.md +0 -10
- package/docs/concepts/streaming.md +0 -129
- package/docs/concepts/system-prompt.md +0 -128
- package/docs/concepts/timezone.md +0 -90
- package/docs/concepts/typebox.md +0 -289
- package/docs/concepts/typing-indicators.md +0 -68
- package/docs/concepts/usage-tracking.md +0 -35
- package/docs/date-time.md +0 -127
- package/docs/debug/node-issue.md +0 -85
- package/docs/diagnostics/flags.md +0 -91
- package/docs/docs.json +0 -1849
- package/docs/experiments/onboarding-config-protocol.md +0 -40
- package/docs/experiments/plans/browser-evaluate-cdp-refactor.md +0 -229
- package/docs/experiments/plans/cron-add-hardening.md +0 -62
- package/docs/experiments/plans/group-policy-hardening.md +0 -40
- package/docs/experiments/plans/openresponses-gateway.md +0 -123
- package/docs/experiments/plans/pty-process-supervision.md +0 -192
- package/docs/experiments/plans/session-binding-channel-agnostic.md +0 -202
- package/docs/experiments/plans/thread-bound-subagents.md +0 -281
- package/docs/experiments/proposals/model-config.md +0 -36
- package/docs/experiments/research/memory.md +0 -228
- package/docs/gateway/authentication.md +0 -162
- package/docs/gateway/background-process.md +0 -96
- package/docs/gateway/bonjour.md +0 -177
- package/docs/gateway/bridge-protocol.md +0 -91
- package/docs/gateway/cli-backends.md +0 -225
- package/docs/gateway/configuration-examples.md +0 -610
- package/docs/gateway/configuration-reference.md +0 -2465
- package/docs/gateway/configuration.md +0 -488
- package/docs/gateway/discovery.md +0 -123
- package/docs/gateway/doctor.md +0 -282
- package/docs/gateway/gateway-lock.md +0 -34
- package/docs/gateway/health.md +0 -35
- package/docs/gateway/heartbeat.md +0 -374
- package/docs/gateway/index.md +0 -254
- package/docs/gateway/local-models.md +0 -150
- package/docs/gateway/logging.md +0 -113
- package/docs/gateway/multiple-gateways.md +0 -112
- package/docs/gateway/network-model.md +0 -20
- package/docs/gateway/openai-http-api.md +0 -119
- package/docs/gateway/openresponses-http-api.md +0 -333
- package/docs/gateway/pairing.md +0 -99
- package/docs/gateway/protocol.md +0 -221
- package/docs/gateway/remote-gateway-readme.md +0 -158
- package/docs/gateway/remote.md +0 -131
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -128
- package/docs/gateway/sandboxing.md +0 -203
- package/docs/gateway/security/index.md +0 -931
- package/docs/gateway/tailscale.md +0 -132
- package/docs/gateway/tools-invoke-http-api.md +0 -110
- package/docs/gateway/troubleshooting.md +0 -317
- package/docs/gateway/trusted-proxy-auth.md +0 -270
- package/docs/glass-ui-rendering-invariants.md +0 -451
- package/docs/help/debugging.md +0 -162
- package/docs/help/environment.md +0 -107
- package/docs/help/faq.md +0 -2846
- package/docs/help/index.md +0 -21
- package/docs/help/scripts.md +0 -28
- package/docs/help/testing.md +0 -385
- package/docs/help/troubleshooting.md +0 -264
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-step2-create-app.png +0 -0
- package/docs/images/feishu-step3-credentials.png +0 -0
- package/docs/images/feishu-step4-permissions.png +0 -0
- package/docs/images/feishu-step5-bot-capability.png +0 -0
- package/docs/images/feishu-step6-event-subscription.png +0 -0
- package/docs/images/groups-flow.svg +0 -52
- package/docs/images/mobile-ui-screenshot.png +0 -0
- package/docs/index.md +0 -186
- package/docs/install/ansible.md +0 -207
- package/docs/install/bun.md +0 -59
- package/docs/install/development-channels.md +0 -75
- package/docs/install/docker.md +0 -583
- package/docs/install/exe-dev.md +0 -126
- package/docs/install/fly.md +0 -472
- package/docs/install/gcp.md +0 -499
- package/docs/install/hetzner.md +0 -347
- package/docs/install/index.md +0 -218
- package/docs/install/installer.md +0 -405
- package/docs/install/macos-vm.md +0 -281
- package/docs/install/migrating.md +0 -192
- package/docs/install/nix.md +0 -98
- package/docs/install/node.md +0 -138
- package/docs/install/northflank.mdx +0 -49
- package/docs/install/podman.md +0 -108
- package/docs/install/railway.mdx +0 -95
- package/docs/install/render.mdx +0 -158
- package/docs/install/uninstall.md +0 -128
- package/docs/install/updating.md +0 -231
- package/docs/ja-JP/AGENTS.md +0 -37
- package/docs/ja-JP/index.md +0 -183
- package/docs/ja-JP/start/getting-started.md +0 -125
- package/docs/ja-JP/start/wizard.md +0 -77
- package/docs/logging.md +0 -350
- package/docs/nav-tabs-underline.js +0 -100
- package/docs/network.md +0 -54
- package/docs/nodes/audio.md +0 -133
- package/docs/nodes/camera.md +0 -156
- package/docs/nodes/images.md +0 -72
- package/docs/nodes/index.md +0 -342
- package/docs/nodes/location-command.md +0 -113
- package/docs/nodes/media-understanding.md +0 -379
- package/docs/nodes/talk.md +0 -90
- package/docs/nodes/troubleshooting.md +0 -112
- package/docs/nodes/voicewake.md +0 -65
- package/docs/perplexity.md +0 -80
- package/docs/phase-6.5-pre-flight-audit.md +0 -268
- package/docs/pi-dev.md +0 -70
- package/docs/pi.md +0 -610
- package/docs/platforms/android.md +0 -151
- package/docs/platforms/digitalocean.md +0 -265
- package/docs/platforms/index.md +0 -53
- package/docs/platforms/ios.md +0 -108
- package/docs/platforms/linux.md +0 -94
- package/docs/platforms/mac/bundled-gateway.md +0 -73
- package/docs/platforms/mac/canvas.md +0 -125
- package/docs/platforms/mac/child-process.md +0 -69
- package/docs/platforms/mac/dev-setup.md +0 -104
- package/docs/platforms/mac/health.md +0 -34
- package/docs/platforms/mac/icon.md +0 -31
- package/docs/platforms/mac/logging.md +0 -57
- package/docs/platforms/mac/menu-bar.md +0 -81
- package/docs/platforms/mac/peekaboo.md +0 -65
- package/docs/platforms/mac/permissions.md +0 -50
- package/docs/platforms/mac/release.md +0 -85
- package/docs/platforms/mac/remote.md +0 -84
- package/docs/platforms/mac/signing.md +0 -47
- package/docs/platforms/mac/skills.md +0 -33
- package/docs/platforms/mac/voice-overlay.md +0 -60
- package/docs/platforms/mac/voicewake.md +0 -66
- package/docs/platforms/mac/webchat.md +0 -43
- package/docs/platforms/mac/xpc.md +0 -61
- package/docs/platforms/macos.md +0 -204
- package/docs/platforms/oracle.md +0 -303
- package/docs/platforms/raspberry-pi.md +0 -358
- package/docs/platforms/windows.md +0 -159
- package/docs/plugins/agent-tools.md +0 -99
- package/docs/plugins/community.md +0 -44
- package/docs/plugins/manifest.md +0 -71
- package/docs/plugins/voice-call.md +0 -322
- package/docs/plugins/zalouser.md +0 -81
- package/docs/prose.md +0 -134
- package/docs/providers/anthropic.md +0 -174
- package/docs/providers/bedrock.md +0 -176
- package/docs/providers/claude-max-api-proxy.md +0 -148
- package/docs/providers/cloudflare-ai-gateway.md +0 -71
- package/docs/providers/deepgram.md +0 -93
- package/docs/providers/github-copilot.md +0 -72
- package/docs/providers/glm.md +0 -33
- package/docs/providers/huggingface.md +0 -209
- package/docs/providers/index.md +0 -67
- package/docs/providers/litellm.md +0 -153
- package/docs/providers/minimax.md +0 -208
- package/docs/providers/models.md +0 -52
- package/docs/providers/moonshot.md +0 -142
- package/docs/providers/nvidia.md +0 -55
- package/docs/providers/ollama.md +0 -250
- package/docs/providers/openai.md +0 -62
- package/docs/providers/opencode.md +0 -36
- package/docs/providers/openrouter.md +0 -37
- package/docs/providers/qianfan.md +0 -38
- package/docs/providers/qwen.md +0 -53
- package/docs/providers/synthetic.md +0 -99
- package/docs/providers/together.md +0 -65
- package/docs/providers/venice.md +0 -267
- package/docs/providers/vercel-ai-gateway.md +0 -50
- package/docs/providers/vllm.md +0 -92
- package/docs/providers/xiaomi.md +0 -64
- package/docs/providers/zai.md +0 -38
- package/docs/refactor/exec-host.md +0 -316
- package/docs/refactor/outbound-session-mirroring.md +0 -83
- package/docs/refactor/plugin-sdk.md +0 -214
- package/docs/refactor/strict-config.md +0 -93
- package/docs/refactor/syminet.md +0 -417
- package/docs/reference/AGENTS.default.md +0 -123
- package/docs/reference/RELEASING.md +0 -120
- package/docs/reference/api-usage-costs.md +0 -138
- package/docs/reference/credits.md +0 -28
- package/docs/reference/device-models.md +0 -47
- package/docs/reference/rpc.md +0 -43
- package/docs/reference/session-management-compaction.md +0 -284
- package/docs/reference/test.md +0 -51
- package/docs/reference/token-use.md +0 -136
- package/docs/reference/transcript-hygiene.md +0 -151
- package/docs/reference/wizard.md +0 -265
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -89
- package/docs/security/README.md +0 -16
- package/docs/security/THREAT-MODEL-ATLAS.md +0 -600
- package/docs/security/formal-verification.md +0 -164
- package/docs/start/bootstrapping.md +0 -41
- package/docs/start/docs-directory.md +0 -63
- package/docs/start/getting-started.md +0 -135
- package/docs/start/hubs.md +0 -196
- package/docs/start/lore.md +0 -216
- package/docs/start/onboarding-overview.md +0 -51
- package/docs/start/onboarding.md +0 -81
- package/docs/start/quickstart.md +0 -22
- package/docs/start/setup.md +0 -160
- package/docs/start/showcase.md +0 -414
- package/docs/start/symi.md +0 -211
- package/docs/start/wizard-cli-automation.md +0 -158
- package/docs/start/wizard-cli-reference.md +0 -255
- package/docs/start/wizard.md +0 -109
- package/docs/style.css +0 -37
- package/docs/tools/agent-send.md +0 -52
- package/docs/tools/apply-patch.md +0 -51
- package/docs/tools/browser-linux-troubleshooting.md +0 -139
- package/docs/tools/browser-login.md +0 -67
- package/docs/tools/browser.md +0 -587
- package/docs/tools/chrome-extension.md +0 -183
- package/docs/tools/creating-skills.md +0 -54
- package/docs/tools/elevated.md +0 -55
- package/docs/tools/exec-approvals.md +0 -261
- package/docs/tools/exec.md +0 -184
- package/docs/tools/firecrawl.md +0 -61
- package/docs/tools/index.md +0 -540
- package/docs/tools/llm-task.md +0 -115
- package/docs/tools/loop-detection.md +0 -98
- package/docs/tools/multi-agent-sandbox-tools.md +0 -396
- package/docs/tools/pipeline.md +0 -340
- package/docs/tools/plugin.md +0 -687
- package/docs/tools/reactions.md +0 -21
- package/docs/tools/skills-config.md +0 -76
- package/docs/tools/skills.md +0 -300
- package/docs/tools/slash-commands.md +0 -202
- package/docs/tools/subagents.md +0 -232
- package/docs/tools/symihub.md +0 -256
- package/docs/tools/thinking.md +0 -75
- package/docs/tools/web.md +0 -265
- package/docs/tts.md +0 -398
- package/docs/vps.md +0 -43
- package/docs/web/control-ui.md +0 -247
- package/docs/web/dashboard.md +0 -46
- package/docs/web/index.md +0 -118
- package/docs/web/tui.md +0 -162
- package/docs/web/webchat.md +0 -53
- package/docs/whatsapp-symi-ai-zh.jpg +0 -0
- package/docs/whatsapp-symi.jpg +0 -0
- package/docs/zh-CN/AGENTS.md +0 -59
- package/docs/zh-CN/automation/auth-monitoring.md +0 -47
- package/docs/zh-CN/automation/cron-jobs.md +0 -422
- package/docs/zh-CN/automation/cron-vs-heartbeat.md +0 -286
- package/docs/zh-CN/automation/gmail-pubsub.md +0 -249
- package/docs/zh-CN/automation/hooks.md +0 -881
- package/docs/zh-CN/automation/poll.md +0 -68
- package/docs/zh-CN/automation/troubleshooting.md +0 -8
- package/docs/zh-CN/automation/webhook.md +0 -161
- package/docs/zh-CN/brave-search.md +0 -48
- package/docs/zh-CN/channels/bluebubbles.md +0 -271
- package/docs/zh-CN/channels/broadcast-groups.md +0 -448
- package/docs/zh-CN/channels/channel-routing.md +0 -112
- package/docs/zh-CN/channels/feishu.md +0 -629
- package/docs/zh-CN/channels/googlechat.md +0 -257
- package/docs/zh-CN/channels/grammy.md +0 -38
- package/docs/zh-CN/channels/group-messages.md +0 -89
- package/docs/zh-CN/channels/groups.md +0 -369
- package/docs/zh-CN/channels/imessage.md +0 -300
- package/docs/zh-CN/channels/index.md +0 -52
- package/docs/zh-CN/channels/line.md +0 -180
- package/docs/zh-CN/channels/location.md +0 -63
- package/docs/zh-CN/channels/matrix.md +0 -221
- package/docs/zh-CN/channels/mattermost.md +0 -144
- package/docs/zh-CN/channels/msteams.md +0 -773
- package/docs/zh-CN/channels/nextcloud-talk.md +0 -142
- package/docs/zh-CN/channels/nostr.md +0 -240
- package/docs/zh-CN/channels/pairing.md +0 -86
- package/docs/zh-CN/channels/signal.md +0 -207
- package/docs/zh-CN/channels/slack.md +0 -529
- package/docs/zh-CN/channels/telegram.md +0 -748
- package/docs/zh-CN/channels/tlon.md +0 -136
- package/docs/zh-CN/channels/troubleshooting.md +0 -34
- package/docs/zh-CN/channels/twitch.md +0 -385
- package/docs/zh-CN/channels/whatsapp.md +0 -411
- package/docs/zh-CN/channels/zalo.md +0 -196
- package/docs/zh-CN/channels/zalouser.md +0 -147
- package/docs/zh-CN/cli/acp.md +0 -173
- package/docs/zh-CN/cli/agent.md +0 -30
- package/docs/zh-CN/cli/agents.md +0 -82
- package/docs/zh-CN/cli/approvals.md +0 -57
- package/docs/zh-CN/cli/browser.md +0 -114
- package/docs/zh-CN/cli/channels.md +0 -80
- package/docs/zh-CN/cli/config.md +0 -57
- package/docs/zh-CN/cli/configure.md +0 -37
- package/docs/zh-CN/cli/cron.md +0 -43
- package/docs/zh-CN/cli/dashboard.md +0 -23
- package/docs/zh-CN/cli/devices.md +0 -74
- package/docs/zh-CN/cli/directory.md +0 -69
- package/docs/zh-CN/cli/dns.md +0 -30
- package/docs/zh-CN/cli/docs.md +0 -22
- package/docs/zh-CN/cli/doctor.md +0 -48
- package/docs/zh-CN/cli/gateway.md +0 -206
- package/docs/zh-CN/cli/health.md +0 -28
- package/docs/zh-CN/cli/hooks.md +0 -298
- package/docs/zh-CN/cli/index.md +0 -1025
- package/docs/zh-CN/cli/logs.md +0 -31
- package/docs/zh-CN/cli/memory.md +0 -52
- package/docs/zh-CN/cli/message.md +0 -205
- package/docs/zh-CN/cli/models.md +0 -85
- package/docs/zh-CN/cli/node.md +0 -115
- package/docs/zh-CN/cli/nodes.md +0 -80
- package/docs/zh-CN/cli/onboard.md +0 -36
- package/docs/zh-CN/cli/pairing.md +0 -28
- package/docs/zh-CN/cli/plugins.md +0 -66
- package/docs/zh-CN/cli/reset.md +0 -24
- package/docs/zh-CN/cli/sandbox.md +0 -158
- package/docs/zh-CN/cli/security.md +0 -33
- package/docs/zh-CN/cli/sessions.md +0 -23
- package/docs/zh-CN/cli/setup.md +0 -36
- package/docs/zh-CN/cli/skills.md +0 -33
- package/docs/zh-CN/cli/status.md +0 -32
- package/docs/zh-CN/cli/system.md +0 -63
- package/docs/zh-CN/cli/tui.md +0 -30
- package/docs/zh-CN/cli/uninstall.md +0 -24
- package/docs/zh-CN/cli/update.md +0 -101
- package/docs/zh-CN/cli/voicecall.md +0 -41
- package/docs/zh-CN/cli/webhooks.md +0 -32
- package/docs/zh-CN/concepts/agent-loop.md +0 -146
- package/docs/zh-CN/concepts/agent-workspace.md +0 -219
- package/docs/zh-CN/concepts/agent.md +0 -115
- package/docs/zh-CN/concepts/architecture.md +0 -122
- package/docs/zh-CN/concepts/compaction.md +0 -67
- package/docs/zh-CN/concepts/context.md +0 -168
- package/docs/zh-CN/concepts/features.md +0 -57
- package/docs/zh-CN/concepts/markdown-formatting.md +0 -115
- package/docs/zh-CN/concepts/memory.md +0 -412
- package/docs/zh-CN/concepts/messages.md +0 -140
- package/docs/zh-CN/concepts/model-failover.md +0 -145
- package/docs/zh-CN/concepts/model-providers.md +0 -320
- package/docs/zh-CN/concepts/models.md +0 -196
- package/docs/zh-CN/concepts/multi-agent.md +0 -371
- package/docs/zh-CN/concepts/oauth.md +0 -151
- package/docs/zh-CN/concepts/presence.md +0 -99
- package/docs/zh-CN/concepts/queue.md +0 -91
- package/docs/zh-CN/concepts/retry.md +0 -71
- package/docs/zh-CN/concepts/session-pruning.md +0 -129
- package/docs/zh-CN/concepts/session-tool.md +0 -198
- package/docs/zh-CN/concepts/session.md +0 -158
- package/docs/zh-CN/concepts/sessions.md +0 -17
- package/docs/zh-CN/concepts/streaming.md +0 -131
- package/docs/zh-CN/concepts/system-prompt.md +0 -99
- package/docs/zh-CN/concepts/timezone.md +0 -94
- package/docs/zh-CN/concepts/typebox.md +0 -284
- package/docs/zh-CN/concepts/typing-indicators.md +0 -74
- package/docs/zh-CN/concepts/usage-tracking.md +0 -42
- package/docs/zh-CN/date-time.md +0 -128
- package/docs/zh-CN/debug/node-issue.md +0 -90
- package/docs/zh-CN/diagnostics/flags.md +0 -98
- package/docs/zh-CN/experiments/onboarding-config-protocol.md +0 -47
- package/docs/zh-CN/experiments/plans/cron-add-hardening.md +0 -69
- package/docs/zh-CN/experiments/plans/group-policy-hardening.md +0 -45
- package/docs/zh-CN/experiments/plans/openresponses-gateway.md +0 -121
- package/docs/zh-CN/experiments/proposals/model-config.md +0 -42
- package/docs/zh-CN/experiments/research/memory.md +0 -235
- package/docs/zh-CN/gateway/authentication.md +0 -142
- package/docs/zh-CN/gateway/background-process.md +0 -100
- package/docs/zh-CN/gateway/bonjour.md +0 -174
- package/docs/zh-CN/gateway/bridge-protocol.md +0 -86
- package/docs/zh-CN/gateway/cli-backends.md +0 -213
- package/docs/zh-CN/gateway/configuration-examples.md +0 -580
- package/docs/zh-CN/gateway/configuration.md +0 -3284
- package/docs/zh-CN/gateway/discovery.md +0 -123
- package/docs/zh-CN/gateway/doctor.md +0 -238
- package/docs/zh-CN/gateway/gateway-lock.md +0 -41
- package/docs/zh-CN/gateway/health.md +0 -42
- package/docs/zh-CN/gateway/heartbeat.md +0 -272
- package/docs/zh-CN/gateway/index.md +0 -335
- package/docs/zh-CN/gateway/local-models.md +0 -157
- package/docs/zh-CN/gateway/logging.md +0 -114
- package/docs/zh-CN/gateway/multiple-gateways.md +0 -119
- package/docs/zh-CN/gateway/network-model.md +0 -23
- package/docs/zh-CN/gateway/openai-http-api.md +0 -125
- package/docs/zh-CN/gateway/openresponses-http-api.md +0 -317
- package/docs/zh-CN/gateway/pairing.md +0 -99
- package/docs/zh-CN/gateway/protocol.md +0 -220
- package/docs/zh-CN/gateway/remote-gateway-readme.md +0 -164
- package/docs/zh-CN/gateway/remote.md +0 -133
- package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -135
- package/docs/zh-CN/gateway/sandboxing.md +0 -188
- package/docs/zh-CN/gateway/security/index.md +0 -772
- package/docs/zh-CN/gateway/tailscale.md +0 -124
- package/docs/zh-CN/gateway/tools-invoke-http-api.md +0 -92
- package/docs/zh-CN/gateway/troubleshooting.md +0 -758
- package/docs/zh-CN/help/debugging.md +0 -160
- package/docs/zh-CN/help/environment.md +0 -88
- package/docs/zh-CN/help/faq.md +0 -2613
- package/docs/zh-CN/help/index.md +0 -28
- package/docs/zh-CN/help/scripts.md +0 -35
- package/docs/zh-CN/help/testing.md +0 -375
- package/docs/zh-CN/help/troubleshooting.md +0 -104
- package/docs/zh-CN/index.md +0 -183
- package/docs/zh-CN/install/ansible.md +0 -214
- package/docs/zh-CN/install/bun.md +0 -65
- package/docs/zh-CN/install/development-channels.md +0 -81
- package/docs/zh-CN/install/docker.md +0 -525
- package/docs/zh-CN/install/exe-dev.md +0 -127
- package/docs/zh-CN/install/fly.md +0 -476
- package/docs/zh-CN/install/gcp.md +0 -509
- package/docs/zh-CN/install/hetzner.md +0 -336
- package/docs/zh-CN/install/index.md +0 -193
- package/docs/zh-CN/install/installer.md +0 -128
- package/docs/zh-CN/install/macos-vm.md +0 -288
- package/docs/zh-CN/install/migrating.md +0 -199
- package/docs/zh-CN/install/nix.md +0 -99
- package/docs/zh-CN/install/node.md +0 -8
- package/docs/zh-CN/install/northflank.mdx +0 -56
- package/docs/zh-CN/install/railway.mdx +0 -102
- package/docs/zh-CN/install/render.mdx +0 -168
- package/docs/zh-CN/install/uninstall.md +0 -135
- package/docs/zh-CN/install/updating.md +0 -233
- package/docs/zh-CN/logging.md +0 -329
- package/docs/zh-CN/network.md +0 -59
- package/docs/zh-CN/nodes/audio.md +0 -120
- package/docs/zh-CN/nodes/camera.md +0 -162
- package/docs/zh-CN/nodes/images.md +0 -79
- package/docs/zh-CN/nodes/index.md +0 -348
- package/docs/zh-CN/nodes/location-command.md +0 -120
- package/docs/zh-CN/nodes/media-understanding.md +0 -380
- package/docs/zh-CN/nodes/talk.md +0 -97
- package/docs/zh-CN/nodes/troubleshooting.md +0 -8
- package/docs/zh-CN/nodes/voicewake.md +0 -72
- package/docs/zh-CN/perplexity.md +0 -84
- package/docs/zh-CN/pi-dev.md +0 -77
- package/docs/zh-CN/pi.md +0 -617
- package/docs/zh-CN/platforms/android.md +0 -155
- package/docs/zh-CN/platforms/digitalocean.md +0 -268
- package/docs/zh-CN/platforms/index.md +0 -60
- package/docs/zh-CN/platforms/ios.md +0 -114
- package/docs/zh-CN/platforms/linux.md +0 -101
- package/docs/zh-CN/platforms/mac/bundled-gateway.md +0 -75
- package/docs/zh-CN/platforms/mac/canvas.md +0 -128
- package/docs/zh-CN/platforms/mac/child-process.md +0 -73
- package/docs/zh-CN/platforms/mac/dev-setup.md +0 -109
- package/docs/zh-CN/platforms/mac/health.md +0 -41
- package/docs/zh-CN/platforms/mac/icon.md +0 -38
- package/docs/zh-CN/platforms/mac/logging.md +0 -64
- package/docs/zh-CN/platforms/mac/menu-bar.md +0 -88
- package/docs/zh-CN/platforms/mac/peekaboo.md +0 -62
- package/docs/zh-CN/platforms/mac/permissions.md +0 -46
- package/docs/zh-CN/platforms/mac/release.md +0 -92
- package/docs/zh-CN/platforms/mac/remote.md +0 -90
- package/docs/zh-CN/platforms/mac/signing.md +0 -54
- package/docs/zh-CN/platforms/mac/skills.md +0 -40
- package/docs/zh-CN/platforms/mac/voice-overlay.md +0 -67
- package/docs/zh-CN/platforms/mac/voicewake.md +0 -73
- package/docs/zh-CN/platforms/mac/webchat.md +0 -43
- package/docs/zh-CN/platforms/mac/xpc.md +0 -68
- package/docs/zh-CN/platforms/macos.md +0 -193
- package/docs/zh-CN/platforms/oracle.md +0 -310
- package/docs/zh-CN/platforms/raspberry-pi.md +0 -365
- package/docs/zh-CN/platforms/windows.md +0 -156
- package/docs/zh-CN/plugins/agent-tools.md +0 -99
- package/docs/zh-CN/plugins/manifest.md +0 -68
- package/docs/zh-CN/plugins/voice-call.md +0 -250
- package/docs/zh-CN/plugins/zalouser.md +0 -88
- package/docs/zh-CN/prose.md +0 -141
- package/docs/zh-CN/providers/anthropic.md +0 -159
- package/docs/zh-CN/providers/bedrock.md +0 -170
- package/docs/zh-CN/providers/claude-max-api-proxy.md +0 -155
- package/docs/zh-CN/providers/deepgram.md +0 -97
- package/docs/zh-CN/providers/github-copilot.md +0 -67
- package/docs/zh-CN/providers/glm.md +0 -39
- package/docs/zh-CN/providers/index.md +0 -66
- package/docs/zh-CN/providers/minimax.md +0 -206
- package/docs/zh-CN/providers/models.md +0 -55
- package/docs/zh-CN/providers/moonshot.md +0 -145
- package/docs/zh-CN/providers/ollama.md +0 -230
- package/docs/zh-CN/providers/openai.md +0 -68
- package/docs/zh-CN/providers/opencode.md +0 -41
- package/docs/zh-CN/providers/openrouter.md +0 -43
- package/docs/zh-CN/providers/qianfan.md +0 -8
- package/docs/zh-CN/providers/qwen.md +0 -55
- package/docs/zh-CN/providers/synthetic.md +0 -102
- package/docs/zh-CN/providers/venice.md +0 -274
- package/docs/zh-CN/providers/vercel-ai-gateway.md +0 -57
- package/docs/zh-CN/providers/xiaomi.md +0 -68
- package/docs/zh-CN/providers/zai.md +0 -41
- package/docs/zh-CN/refactor/exec-host.md +0 -323
- package/docs/zh-CN/refactor/outbound-session-mirroring.md +0 -90
- package/docs/zh-CN/refactor/plugin-sdk.md +0 -221
- package/docs/zh-CN/refactor/strict-config.md +0 -100
- package/docs/zh-CN/refactor/syminet.md +0 -424
- package/docs/zh-CN/reference/AGENTS.default.md +0 -130
- package/docs/zh-CN/reference/RELEASING.md +0 -122
- package/docs/zh-CN/reference/api-usage-costs.md +0 -136
- package/docs/zh-CN/reference/credits.md +0 -34
- package/docs/zh-CN/reference/device-models.md +0 -54
- package/docs/zh-CN/reference/rpc.md +0 -48
- package/docs/zh-CN/reference/session-management-compaction.md +0 -286
- package/docs/zh-CN/reference/templates/AGENTS.dev.md +0 -89
- package/docs/zh-CN/reference/templates/AGENTS.md +0 -234
- package/docs/zh-CN/reference/templates/BOOT.md +0 -17
- package/docs/zh-CN/reference/templates/BOOTSTRAP.md +0 -68
- package/docs/zh-CN/reference/templates/IDENTITY.dev.md +0 -54
- package/docs/zh-CN/reference/templates/IDENTITY.md +0 -36
- package/docs/zh-CN/reference/templates/SYMICORE.dev.md +0 -83
- package/docs/zh-CN/reference/templates/SYMICORE.md +0 -49
- package/docs/zh-CN/reference/templates/SYMIPULSE.md +0 -69
- package/docs/zh-CN/reference/templates/TOOLS.dev.md +0 -31
- package/docs/zh-CN/reference/templates/TOOLS.md +0 -53
- package/docs/zh-CN/reference/templates/USER.dev.md +0 -25
- package/docs/zh-CN/reference/templates/USER.md +0 -30
- package/docs/zh-CN/reference/test.md +0 -57
- package/docs/zh-CN/reference/token-use.md +0 -119
- package/docs/zh-CN/reference/transcript-hygiene.md +0 -109
- package/docs/zh-CN/reference/wizard.md +0 -9
- package/docs/zh-CN/security/formal-verification.md +0 -171
- package/docs/zh-CN/start/bootstrapping.md +0 -9
- package/docs/zh-CN/start/docs-directory.md +0 -69
- package/docs/zh-CN/start/getting-started.md +0 -201
- package/docs/zh-CN/start/hubs.md +0 -199
- package/docs/zh-CN/start/lore.md +0 -223
- package/docs/zh-CN/start/onboarding.md +0 -105
- package/docs/zh-CN/start/quickstart.md +0 -88
- package/docs/zh-CN/start/setup.md +0 -151
- package/docs/zh-CN/start/showcase.md +0 -421
- package/docs/zh-CN/start/symi.md +0 -244
- package/docs/zh-CN/start/wizard.md +0 -326
- package/docs/zh-CN/tools/agent-send.md +0 -58
- package/docs/zh-CN/tools/apply-patch.md +0 -57
- package/docs/zh-CN/tools/browser-linux-troubleshooting.md +0 -144
- package/docs/zh-CN/tools/browser-login.md +0 -75
- package/docs/zh-CN/tools/browser.md +0 -553
- package/docs/zh-CN/tools/chrome-extension.md +0 -183
- package/docs/zh-CN/tools/creating-skills.md +0 -61
- package/docs/zh-CN/tools/elevated.md +0 -62
- package/docs/zh-CN/tools/exec-approvals.md +0 -233
- package/docs/zh-CN/tools/exec.md +0 -169
- package/docs/zh-CN/tools/firecrawl.md +0 -68
- package/docs/zh-CN/tools/index.md +0 -508
- package/docs/zh-CN/tools/llm-task.md +0 -117
- package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +0 -400
- package/docs/zh-CN/tools/pipeline.md +0 -349
- package/docs/zh-CN/tools/plugin.md +0 -639
- package/docs/zh-CN/tools/reactions.md +0 -28
- package/docs/zh-CN/tools/skills-config.md +0 -78
- package/docs/zh-CN/tools/skills.md +0 -279
- package/docs/zh-CN/tools/slash-commands.md +0 -196
- package/docs/zh-CN/tools/subagents.md +0 -167
- package/docs/zh-CN/tools/symihub.md +0 -209
- package/docs/zh-CN/tools/thinking.md +0 -80
- package/docs/zh-CN/tools/web.md +0 -257
- package/docs/zh-CN/tts.md +0 -373
- package/docs/zh-CN/vps.md +0 -47
- package/docs/zh-CN/web/control-ui.md +0 -190
- package/docs/zh-CN/web/dashboard.md +0 -53
- package/docs/zh-CN/web/index.md +0 -118
- package/docs/zh-CN/web/tui.md +0 -166
- package/docs/zh-CN/web/webchat.md +0 -56
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when: You want multiple isolated agents (workspaces + auth) in one gateway process.
|
|
3
|
-
status: active
|
|
4
|
-
summary: 多智能体路由:隔离的智能体、渠道账户和绑定
|
|
5
|
-
title: 多智能体路由
|
|
6
|
-
x-i18n:
|
|
7
|
-
generated_at: "2026-02-03T07:47:38Z"
|
|
8
|
-
model: claude-opus-4-5
|
|
9
|
-
provider: pi
|
|
10
|
-
source_hash: 1848266c632cd6c96ff99ea9eb9c17bbfe6d35fa1f90450853083e7c548d5324
|
|
11
|
-
source_path: concepts/multi-agent.md
|
|
12
|
-
workflow: 15
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# 多智能体路由
|
|
16
|
-
|
|
17
|
-
目标:多个*隔离的*智能体(独立的工作区 + `agentDir` + 会话),加上多个渠道账户(例如两个 WhatsApp)在一个运行的 Gateway 网关中。入站消息通过绑定路由到智能体。
|
|
18
|
-
|
|
19
|
-
## 什么是"一个智能体"?
|
|
20
|
-
|
|
21
|
-
一个**智能体**是一个完全独立作用域的大脑,拥有自己的:
|
|
22
|
-
|
|
23
|
-
- **工作区**(文件、AGENTS.md/SYMICORE.md/USER.md、本地笔记、人设规则)。
|
|
24
|
-
- **状态目录**(`agentDir`)用于认证配置文件、模型注册表和每智能体配置。
|
|
25
|
-
- **会话存储**(聊天历史 + 路由状态)位于 `~/.symi/agents/<agentId>/sessions` 下。
|
|
26
|
-
|
|
27
|
-
认证配置文件是**每智能体独立的**。每个智能体从自己的位置读取:
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
~/.symi/agents/<agentId>/agent/auth-profiles.json
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
主智能体凭证**不会**自动共享。切勿在智能体之间重用 `agentDir`(这会导致认证/会话冲突)。如果你想共享凭证,请将 `auth-profiles.json` 复制到另一个智能体的 `agentDir`。
|
|
34
|
-
|
|
35
|
-
Skills 通过每个工作区的 `skills/` 文件夹实现每智能体独立,共享的 Skills 可从 `~/.symi/skills` 获取。参见 [Skills:每智能体 vs 共享](/tools/skills#per-agent-vs-shared-skills)。
|
|
36
|
-
|
|
37
|
-
Gateway 网关可以托管**一个智能体**(默认)或**多个智能体**并行。
|
|
38
|
-
|
|
39
|
-
**工作区注意事项:** 每个智能体的工作区是**默认 cwd**,而不是硬性沙箱。相对路径在工作区内解析,但绝对路径可以访问主机的其他位置,除非启用了沙箱隔离。参见 [沙箱隔离](/gateway/sandboxing)。
|
|
40
|
-
|
|
41
|
-
## 路径(快速映射)
|
|
42
|
-
|
|
43
|
-
- 配置:`~/.symi/symi.json`(或 `SYMI_CONFIG_PATH`)
|
|
44
|
-
- 状态目录:`~/.symi`(或 `SYMI_STATE_DIR`)
|
|
45
|
-
- 工作区:`~/.symi/workspace`(或 `~/.symi/workspace-<agentId>`)
|
|
46
|
-
- 智能体目录:`~/.symi/agents/<agentId>/agent`(或 `agents.list[].agentDir`)
|
|
47
|
-
- 会话:`~/.symi/agents/<agentId>/sessions`
|
|
48
|
-
|
|
49
|
-
### 单智能体模式(默认)
|
|
50
|
-
|
|
51
|
-
如果你什么都不做,Symi 运行单个智能体:
|
|
52
|
-
|
|
53
|
-
- `agentId` 默认为 **`main`**。
|
|
54
|
-
- 会话键为 `agent:main:<mainKey>`。
|
|
55
|
-
- 工作区默认为 `~/.symi/workspace`(或当设置了 `SYMI_PROFILE` 时为 `~/.symi/workspace-<profile>`)。
|
|
56
|
-
- 状态默认为 `~/.symi/agents/main/agent`。
|
|
57
|
-
|
|
58
|
-
## 智能体助手
|
|
59
|
-
|
|
60
|
-
使用智能体向导添加新的隔离智能体:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
symi agents add work
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
然后添加 `bindings`(或让向导完成)来路由入站消息。
|
|
67
|
-
|
|
68
|
-
验证:
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
symi agents list --bindings
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## 多个智能体 = 多个人、多种人格
|
|
75
|
-
|
|
76
|
-
使用**多个智能体**,每个 `agentId` 成为一个**完全隔离的人格**:
|
|
77
|
-
|
|
78
|
-
- **不同的电话号码/账户**(每渠道 `accountId`)。
|
|
79
|
-
- **不同的人格**(每智能体工作区文件如 `AGENTS.md` 和 `SYMICORE.md`)。
|
|
80
|
-
- **独立的认证 + 会话**(除非明确启用,否则无交叉通信)。
|
|
81
|
-
|
|
82
|
-
这让**多个人**共享一个 Gateway 网关服务器,同时保持他们的 AI"大脑"和数据隔离。
|
|
83
|
-
|
|
84
|
-
## 一个 WhatsApp 号码,多个人(私信分割)
|
|
85
|
-
|
|
86
|
-
你可以将**不同的 WhatsApp 私信**路由到不同的智能体,同时保持**一个 WhatsApp 账户**。使用 `peer.kind: "dm"` 匹配发送者 E.164(如 `+15551234567`)。回复仍然来自同一个 WhatsApp 号码(无每智能体发送者身份)。
|
|
87
|
-
|
|
88
|
-
重要细节:直接聊天折叠到智能体的**主会话键**,因此真正的隔离需要**每人一个智能体**。
|
|
89
|
-
|
|
90
|
-
示例:
|
|
91
|
-
|
|
92
|
-
```json5
|
|
93
|
-
{
|
|
94
|
-
agents: {
|
|
95
|
-
list: [
|
|
96
|
-
{ id: "alex", workspace: "~/.symi/workspace-alex" },
|
|
97
|
-
{ id: "mia", workspace: "~/.symi/workspace-mia" },
|
|
98
|
-
],
|
|
99
|
-
},
|
|
100
|
-
bindings: [
|
|
101
|
-
{ agentId: "alex", match: { channel: "whatsapp", peer: { kind: "dm", id: "+15551230001" } } },
|
|
102
|
-
{ agentId: "mia", match: { channel: "whatsapp", peer: { kind: "dm", id: "+15551230002" } } },
|
|
103
|
-
],
|
|
104
|
-
channels: {
|
|
105
|
-
whatsapp: {
|
|
106
|
-
dmPolicy: "allowlist",
|
|
107
|
-
allowFrom: ["+15551230001", "+15551230002"],
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
注意事项:
|
|
114
|
-
|
|
115
|
-
- 私信访问控制是**每 WhatsApp 账户全局的**(配对/允许列表),而不是每智能体。
|
|
116
|
-
- 对于共享群组,将群组绑定到一个智能体或使用 [广播群组](/channels/broadcast-groups)。
|
|
117
|
-
|
|
118
|
-
## 路由规则(消息如何选择智能体)
|
|
119
|
-
|
|
120
|
-
绑定是**确定性的**,**最具体的优先**:
|
|
121
|
-
|
|
122
|
-
1. `peer` 匹配(精确私信/群组/频道 id)
|
|
123
|
-
2. `teamId`(Slack)
|
|
124
|
-
3. 渠道的 `accountId` 匹配
|
|
125
|
-
4. 渠道级匹配(`accountId: "*"`)
|
|
126
|
-
5. 回退到默认智能体(`agents.list[].default`,否则列表中的第一个条目,默认:`main`)
|
|
127
|
-
|
|
128
|
-
## 多账户/电话号码
|
|
129
|
-
|
|
130
|
-
支持**多账户**的渠道(如 WhatsApp)使用 `accountId` 来识别每个登录。每个 `accountId` 可以路由到不同的智能体,因此一个服务器可以托管多个电话号码而不混合会话。
|
|
131
|
-
|
|
132
|
-
## 概念
|
|
133
|
-
|
|
134
|
-
- `agentId`:一个"大脑"(工作区、每智能体认证、每智能体会话存储)。
|
|
135
|
-
- `accountId`:一个渠道账户实例(例如 WhatsApp 账户 `"personal"` vs `"biz"`)。
|
|
136
|
-
- `binding`:通过 `(channel, accountId, peer)` 以及可选的 guild/team id 将入站消息路由到 `agentId`。
|
|
137
|
-
- 直接聊天折叠到 `agent:<agentId>:<mainKey>`(每智能体"主";`session.mainKey`)。
|
|
138
|
-
|
|
139
|
-
## 示例:两个 WhatsApp → 两个智能体
|
|
140
|
-
|
|
141
|
-
`~/.symi/symi.json`(JSON5):
|
|
142
|
-
|
|
143
|
-
```js
|
|
144
|
-
{
|
|
145
|
-
agents: {
|
|
146
|
-
list: [
|
|
147
|
-
{
|
|
148
|
-
id: "home",
|
|
149
|
-
default: true,
|
|
150
|
-
name: "Home",
|
|
151
|
-
workspace: "~/.symi/workspace-home",
|
|
152
|
-
agentDir: "~/.symi/agents/home/agent",
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
id: "work",
|
|
156
|
-
name: "Work",
|
|
157
|
-
workspace: "~/.symi/workspace-work",
|
|
158
|
-
agentDir: "~/.symi/agents/work/agent",
|
|
159
|
-
},
|
|
160
|
-
],
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
// 确定性路由:第一个匹配获胜(最具体的优先)。
|
|
164
|
-
bindings: [
|
|
165
|
-
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
|
|
166
|
-
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
|
|
167
|
-
|
|
168
|
-
// 可选的每对等方覆盖(示例:将特定群组发送到 work 智能体)。
|
|
169
|
-
{
|
|
170
|
-
agentId: "work",
|
|
171
|
-
match: {
|
|
172
|
-
channel: "whatsapp",
|
|
173
|
-
accountId: "personal",
|
|
174
|
-
peer: { kind: "group", id: "1203630...@g.us" },
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
],
|
|
178
|
-
|
|
179
|
-
// 默认关闭:智能体到智能体的消息必须明确启用 + 加入允许列表。
|
|
180
|
-
tools: {
|
|
181
|
-
agentToAgent: {
|
|
182
|
-
enabled: false,
|
|
183
|
-
allow: ["home", "work"],
|
|
184
|
-
},
|
|
185
|
-
},
|
|
186
|
-
|
|
187
|
-
channels: {
|
|
188
|
-
whatsapp: {
|
|
189
|
-
accounts: {
|
|
190
|
-
personal: {
|
|
191
|
-
// 可选覆盖。默认:~/.symi/credentials/whatsapp/personal
|
|
192
|
-
// authDir: "~/.symi/credentials/whatsapp/personal",
|
|
193
|
-
},
|
|
194
|
-
biz: {
|
|
195
|
-
// 可选覆盖。默认:~/.symi/credentials/whatsapp/biz
|
|
196
|
-
// authDir: "~/.symi/credentials/whatsapp/biz",
|
|
197
|
-
},
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
},
|
|
201
|
-
}
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
## 示例:WhatsApp 日常聊天 + Telegram 深度工作
|
|
205
|
-
|
|
206
|
-
按渠道分割:将 WhatsApp 路由到快速日常智能体,Telegram 路由到 Opus 智能体。
|
|
207
|
-
|
|
208
|
-
```json5
|
|
209
|
-
{
|
|
210
|
-
agents: {
|
|
211
|
-
list: [
|
|
212
|
-
{
|
|
213
|
-
id: "chat",
|
|
214
|
-
name: "Everyday",
|
|
215
|
-
workspace: "~/.symi/workspace-chat",
|
|
216
|
-
model: "anthropic/claude-sonnet-4-5",
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
id: "opus",
|
|
220
|
-
name: "Deep Work",
|
|
221
|
-
workspace: "~/.symi/workspace-opus",
|
|
222
|
-
model: "anthropic/claude-opus-4-5",
|
|
223
|
-
},
|
|
224
|
-
],
|
|
225
|
-
},
|
|
226
|
-
bindings: [
|
|
227
|
-
{ agentId: "chat", match: { channel: "whatsapp" } },
|
|
228
|
-
{ agentId: "opus", match: { channel: "telegram" } },
|
|
229
|
-
],
|
|
230
|
-
}
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
注意事项:
|
|
234
|
-
|
|
235
|
-
- 如果你有一个渠道的多个账户,请在绑定中添加 `accountId`(例如 `{ channel: "whatsapp", accountId: "personal" }`)。
|
|
236
|
-
- 要将单个私信/群组路由到 Opus 而保持其余在 chat 上,请为该对等方添加 `match.peer` 绑定;对等方匹配始终优先于渠道级规则。
|
|
237
|
-
|
|
238
|
-
## 示例:同一渠道,一个对等方到 Opus
|
|
239
|
-
|
|
240
|
-
保持 WhatsApp 在快速智能体上,但将一个私信路由到 Opus:
|
|
241
|
-
|
|
242
|
-
```json5
|
|
243
|
-
{
|
|
244
|
-
agents: {
|
|
245
|
-
list: [
|
|
246
|
-
{
|
|
247
|
-
id: "chat",
|
|
248
|
-
name: "Everyday",
|
|
249
|
-
workspace: "~/.symi/workspace-chat",
|
|
250
|
-
model: "anthropic/claude-sonnet-4-5",
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
id: "opus",
|
|
254
|
-
name: "Deep Work",
|
|
255
|
-
workspace: "~/.symi/workspace-opus",
|
|
256
|
-
model: "anthropic/claude-opus-4-5",
|
|
257
|
-
},
|
|
258
|
-
],
|
|
259
|
-
},
|
|
260
|
-
bindings: [
|
|
261
|
-
{ agentId: "opus", match: { channel: "whatsapp", peer: { kind: "dm", id: "+15551234567" } } },
|
|
262
|
-
{ agentId: "chat", match: { channel: "whatsapp" } },
|
|
263
|
-
],
|
|
264
|
-
}
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
对等方绑定始终获胜,因此将它们放在渠道级规则之上。
|
|
268
|
-
|
|
269
|
-
## 绑定到 WhatsApp 群组的家庭智能体
|
|
270
|
-
|
|
271
|
-
将专用家庭智能体绑定到单个 WhatsApp 群组,使用提及限制和更严格的工具策略:
|
|
272
|
-
|
|
273
|
-
```json5
|
|
274
|
-
{
|
|
275
|
-
agents: {
|
|
276
|
-
list: [
|
|
277
|
-
{
|
|
278
|
-
id: "family",
|
|
279
|
-
name: "Family",
|
|
280
|
-
workspace: "~/.symi/workspace-family",
|
|
281
|
-
identity: { name: "Family Bot" },
|
|
282
|
-
groupChat: {
|
|
283
|
-
mentionPatterns: ["@family", "@familybot", "@Family Bot"],
|
|
284
|
-
},
|
|
285
|
-
sandbox: {
|
|
286
|
-
mode: "all",
|
|
287
|
-
scope: "agent",
|
|
288
|
-
},
|
|
289
|
-
tools: {
|
|
290
|
-
allow: [
|
|
291
|
-
"exec",
|
|
292
|
-
"read",
|
|
293
|
-
"sessions_list",
|
|
294
|
-
"sessions_history",
|
|
295
|
-
"sessions_send",
|
|
296
|
-
"sessions_spawn",
|
|
297
|
-
"session_status",
|
|
298
|
-
],
|
|
299
|
-
deny: ["write", "edit", "apply_patch", "browser", "canvas", "nodes", "cron"],
|
|
300
|
-
},
|
|
301
|
-
},
|
|
302
|
-
],
|
|
303
|
-
},
|
|
304
|
-
bindings: [
|
|
305
|
-
{
|
|
306
|
-
agentId: "family",
|
|
307
|
-
match: {
|
|
308
|
-
channel: "whatsapp",
|
|
309
|
-
peer: { kind: "group", id: "120363999999999999@g.us" },
|
|
310
|
-
},
|
|
311
|
-
},
|
|
312
|
-
],
|
|
313
|
-
}
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
注意事项:
|
|
317
|
-
|
|
318
|
-
- 工具允许/拒绝列表是**工具**,不是 Skills。如果 skill 需要运行二进制文件,请确保 `exec` 被允许且二进制文件存在于沙箱中。
|
|
319
|
-
- 对于更严格的限制,设置 `agents.list[].groupChat.mentionPatterns` 并为渠道保持群组允许列表启用。
|
|
320
|
-
|
|
321
|
-
## 每智能体沙箱和工具配置
|
|
322
|
-
|
|
323
|
-
从 v2026.1.6 开始,每个智能体可以有自己的沙箱和工具限制:
|
|
324
|
-
|
|
325
|
-
```js
|
|
326
|
-
{
|
|
327
|
-
agents: {
|
|
328
|
-
list: [
|
|
329
|
-
{
|
|
330
|
-
id: "personal",
|
|
331
|
-
workspace: "~/.symi/workspace-personal",
|
|
332
|
-
sandbox: {
|
|
333
|
-
mode: "off", // 个人智能体无沙箱
|
|
334
|
-
},
|
|
335
|
-
// 无工具限制 - 所有工具可用
|
|
336
|
-
},
|
|
337
|
-
{
|
|
338
|
-
id: "family",
|
|
339
|
-
workspace: "~/.symi/workspace-family",
|
|
340
|
-
sandbox: {
|
|
341
|
-
mode: "all", // 始终沙箱隔离
|
|
342
|
-
scope: "agent", // 每智能体一个容器
|
|
343
|
-
docker: {
|
|
344
|
-
// 容器创建后的可选一次性设置
|
|
345
|
-
setupCommand: "apt-get update && apt-get install -y git curl",
|
|
346
|
-
},
|
|
347
|
-
},
|
|
348
|
-
tools: {
|
|
349
|
-
allow: ["read"], // 仅 read 工具
|
|
350
|
-
deny: ["exec", "write", "edit", "apply_patch"], // 拒绝其他
|
|
351
|
-
},
|
|
352
|
-
},
|
|
353
|
-
],
|
|
354
|
-
},
|
|
355
|
-
}
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
注意:`setupCommand` 位于 `sandbox.docker` 下,在容器创建时运行一次。
|
|
359
|
-
当解析的 scope 为 `"shared"` 时,每智能体 `sandbox.docker.*` 覆盖会被忽略。
|
|
360
|
-
|
|
361
|
-
**好处:**
|
|
362
|
-
|
|
363
|
-
- **安全隔离**:限制不受信任智能体的工具
|
|
364
|
-
- **资源控制**:沙箱隔离特定智能体同时保持其他智能体在主机上
|
|
365
|
-
- **灵活策略**:每智能体不同的权限
|
|
366
|
-
|
|
367
|
-
注意:`tools.elevated` 是**全局的**且基于发送者;不能按智能体配置。
|
|
368
|
-
如果你需要每智能体边界,使用 `agents.list[].tools` 拒绝 `exec`。
|
|
369
|
-
对于群组定向,使用 `agents.list[].groupChat.mentionPatterns` 使 @提及清晰地映射到目标智能体。
|
|
370
|
-
|
|
371
|
-
参见 [多智能体沙箱和工具](/tools/multi-agent-sandbox-tools) 了解详细示例。
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when:
|
|
3
|
-
- 你想全面了解 Symi 的 OAuth 流程
|
|
4
|
-
- 你遇到了令牌失效/登出问题
|
|
5
|
-
- 你想了解 setup-token 或 OAuth 认证流程
|
|
6
|
-
- 你想使用多账户或配置文件路由
|
|
7
|
-
summary: Symi 中的 OAuth:令牌交换、存储和多账户模式
|
|
8
|
-
title: OAuth
|
|
9
|
-
x-i18n:
|
|
10
|
-
generated_at: "2026-02-01T20:23:29Z"
|
|
11
|
-
model: claude-opus-4-5
|
|
12
|
-
provider: pi
|
|
13
|
-
source_hash: af714bdadc4a89295a18da1eba5f5b857c8d533ebabe9b0758b722fe60c36124
|
|
14
|
-
source_path: concepts/oauth.md
|
|
15
|
-
workflow: 14
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# OAuth
|
|
19
|
-
|
|
20
|
-
Symi 支持通过 OAuth 进行"订阅认证",适用于提供此功能的提供商(特别是 **OpenAI Codex(ChatGPT OAuth)**)。对于 Anthropic 订阅,请使用 **setup-token** 流程。本页说明:
|
|
21
|
-
|
|
22
|
-
- OAuth **令牌交换**的工作原理(PKCE)
|
|
23
|
-
- 令牌**存储**在哪里(以及原因)
|
|
24
|
-
- 如何处理**多账户**(配置文件 + 按会话覆盖)
|
|
25
|
-
|
|
26
|
-
Symi 还支持**提供商插件**,它们自带 OAuth 或 API 密钥流程。通过以下命令运行:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
symi models auth login --provider <id>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## 令牌汇聚点(为什么需要它)
|
|
33
|
-
|
|
34
|
-
OAuth 提供商通常在登录/刷新流程中发放**新的刷新令牌**。某些提供商(或 OAuth 客户端)在为同一用户/应用发放新令牌时,可能会使旧的刷新令牌失效。
|
|
35
|
-
|
|
36
|
-
实际症状:
|
|
37
|
-
|
|
38
|
-
- 你通过 Symi _和_ Claude Code / Codex CLI 登录 → 其中一个稍后会随机"登出"
|
|
39
|
-
|
|
40
|
-
为减少这种情况,Symi 将 `auth-profiles.json` 视为**令牌汇聚点**:
|
|
41
|
-
|
|
42
|
-
- 运行时从**同一个位置**读取凭据
|
|
43
|
-
- 我们可以保留多个配置文件并确定性地路由它们
|
|
44
|
-
|
|
45
|
-
## 存储(令牌存放位置)
|
|
46
|
-
|
|
47
|
-
密钥按**智能体**存储:
|
|
48
|
-
|
|
49
|
-
- 认证配置文件(OAuth + API 密钥):`~/.symi/agents/<agentId>/agent/auth-profiles.json`
|
|
50
|
-
- 运行时缓存(自动管理;请勿编辑):`~/.symi/agents/<agentId>/agent/auth.json`
|
|
51
|
-
|
|
52
|
-
仅用于导入的旧版文件(仍然支持,但不是主存储):
|
|
53
|
-
|
|
54
|
-
- `~/.symi/credentials/oauth.json`(首次使用时导入到 `auth-profiles.json`)
|
|
55
|
-
|
|
56
|
-
以上所有路径也遵循 `$SYMI_STATE_DIR`(状态目录覆盖)。完整参考:[/gateway/configuration](/gateway/configuration#auth-storage-oauth--api-keys)
|
|
57
|
-
|
|
58
|
-
## Anthropic setup-token(订阅认证)
|
|
59
|
-
|
|
60
|
-
在任意机器上运行 `claude setup-token`,然后将其粘贴到 Symi 中:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
symi models auth setup-token --provider anthropic
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
如果你在其他地方生成了令牌,可以手动粘贴:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
symi models auth paste-token --provider anthropic
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
验证:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
symi models status
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## OAuth 交换(登录工作原理)
|
|
79
|
-
|
|
80
|
-
Symi 的交互式登录流程在 `@mariozechner/pi-ai` 中实现,并集成到向导/命令中。
|
|
81
|
-
|
|
82
|
-
### Anthropic(Claude Pro/Max)setup-token
|
|
83
|
-
|
|
84
|
-
流程概要:
|
|
85
|
-
|
|
86
|
-
1. 运行 `claude setup-token`
|
|
87
|
-
2. 将令牌粘贴到 Symi
|
|
88
|
-
3. 作为令牌认证配置文件存储(无刷新)
|
|
89
|
-
|
|
90
|
-
向导路径为 `symi onboard` → 认证选择 `setup-token`(Anthropic)。
|
|
91
|
-
|
|
92
|
-
### OpenAI Codex(ChatGPT OAuth)
|
|
93
|
-
|
|
94
|
-
流程概要(PKCE):
|
|
95
|
-
|
|
96
|
-
1. 生成 PKCE 验证器/质询 + 随机 `state`
|
|
97
|
-
2. 打开 `https://auth.openai.com/oauth/authorize?...`
|
|
98
|
-
3. 尝试在 `http://127.0.0.1:1455/auth/callback` 捕获回调
|
|
99
|
-
4. 如果回调无法绑定(或你在远程/无头环境中),手动粘贴重定向 URL/代码
|
|
100
|
-
5. 在 `https://auth.openai.com/oauth/token` 进行交换
|
|
101
|
-
6. 从访问令牌中提取 `accountId` 并存储 `{ access, refresh, expires, accountId }`
|
|
102
|
-
|
|
103
|
-
向导路径为 `symi onboard` → 认证选择 `openai-codex`。
|
|
104
|
-
|
|
105
|
-
## 刷新 + 过期
|
|
106
|
-
|
|
107
|
-
配置文件存储 `expires` 时间戳。
|
|
108
|
-
|
|
109
|
-
运行时:
|
|
110
|
-
|
|
111
|
-
- 如果 `expires` 在未来 → 使用已存储的访问令牌
|
|
112
|
-
- 如果已过期 → 刷新(在文件锁下)并覆盖已存储的凭据
|
|
113
|
-
|
|
114
|
-
刷新流程是自动的;你通常不需要手动管理令牌。
|
|
115
|
-
|
|
116
|
-
## 多账户(配置文件)+ 路由
|
|
117
|
-
|
|
118
|
-
两种模式:
|
|
119
|
-
|
|
120
|
-
### 1)推荐:独立智能体
|
|
121
|
-
|
|
122
|
-
如果你希望"个人"和"工作"永远不交叉,请使用隔离的智能体(独立的会话 + 凭据 + 工作区):
|
|
123
|
-
|
|
124
|
-
```bash
|
|
125
|
-
symi agents add work
|
|
126
|
-
symi agents add personal
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
然后按智能体配置认证(向导),并将聊天路由到正确的智能体。
|
|
130
|
-
|
|
131
|
-
### 2)高级:单个智能体中的多个配置文件
|
|
132
|
-
|
|
133
|
-
`auth-profiles.json` 支持同一提供商的多个配置文件 ID。
|
|
134
|
-
|
|
135
|
-
选择使用哪个配置文件:
|
|
136
|
-
|
|
137
|
-
- 通过配置顺序全局设置(`auth.order`)
|
|
138
|
-
- 通过 `/model ...@<profileId>` 按会话设置
|
|
139
|
-
|
|
140
|
-
示例(会话覆盖):
|
|
141
|
-
|
|
142
|
-
- `/model Opus@anthropic:work`
|
|
143
|
-
|
|
144
|
-
如何查看存在哪些配置文件 ID:
|
|
145
|
-
|
|
146
|
-
- `symi channels list --json`(显示 `auth[]`)
|
|
147
|
-
|
|
148
|
-
相关文档:
|
|
149
|
-
|
|
150
|
-
- [/concepts/model-failover](/concepts/model-failover)(轮换 + 冷却规则)
|
|
151
|
-
- [/tools/slash-commands](/tools/slash-commands)(命令界面)
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when:
|
|
3
|
-
- 调试实例标签页
|
|
4
|
-
- 排查重复或过期的实例行
|
|
5
|
-
- 更改 Gateway 网关 WS 连接或系统事件信标
|
|
6
|
-
summary: Symi 在线状态条目如何生成、合并和显示
|
|
7
|
-
title: 在线状态
|
|
8
|
-
x-i18n:
|
|
9
|
-
generated_at: "2026-02-03T07:46:37Z"
|
|
10
|
-
model: claude-opus-4-5
|
|
11
|
-
provider: pi
|
|
12
|
-
source_hash: c752c76a880878fed673d656db88beb5dbdeefff2491985127ad791521f97d00
|
|
13
|
-
source_path: concepts/presence.md
|
|
14
|
-
workflow: 15
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# 在线状态
|
|
18
|
-
|
|
19
|
-
Symi"在线状态"是以下内容的轻量级、尽力而为的视图:
|
|
20
|
-
|
|
21
|
-
- **Gateway 网关**本身,以及
|
|
22
|
-
- **连接到 Gateway 网关的客户端**(mac 应用、WebChat、CLI 等)
|
|
23
|
-
|
|
24
|
-
在线状态主要用于渲染 macOS 应用的**实例**标签页,并为运维人员提供快速可见性。
|
|
25
|
-
|
|
26
|
-
## 在线状态字段(显示的内容)
|
|
27
|
-
|
|
28
|
-
在线状态条目是具有以下字段的结构化对象:
|
|
29
|
-
|
|
30
|
-
- `instanceId`(可选但强烈推荐):稳定的客户端身份(通常是 `connect.client.instanceId`)
|
|
31
|
-
- `host`:人类友好的主机名
|
|
32
|
-
- `ip`:尽力而为的 IP 地址
|
|
33
|
-
- `version`:客户端版本字符串
|
|
34
|
-
- `deviceFamily` / `modelIdentifier`:硬件提示
|
|
35
|
-
- `mode`:`ui`、`webchat`、`cli`、`backend`、`probe`、`test`、`node`,...
|
|
36
|
-
- `lastInputSeconds`:"自上次用户输入以来的秒数"(如果已知)
|
|
37
|
-
- `reason`:`self`、`connect`、`node-connected`、`periodic`,...
|
|
38
|
-
- `ts`:最后更新时间戳(自纪元以来的毫秒数)
|
|
39
|
-
|
|
40
|
-
## 生产者(在线状态来源)
|
|
41
|
-
|
|
42
|
-
在线状态条目由多个来源生成并**合并**。
|
|
43
|
-
|
|
44
|
-
### 1)Gateway 网关自身条目
|
|
45
|
-
|
|
46
|
-
Gateway 网关始终在启动时植入一个"self"条目,这样即使在任何客户端连接之前,UI 也能显示 Gateway 网关主机。
|
|
47
|
-
|
|
48
|
-
### 2)WebSocket 连接
|
|
49
|
-
|
|
50
|
-
每个 WS 客户端都以 `connect` 请求开始。在成功握手后,Gateway 网关为该连接更新插入一个在线状态条目。
|
|
51
|
-
|
|
52
|
-
#### 为什么一次性 CLI 命令不会显示
|
|
53
|
-
|
|
54
|
-
CLI 经常为短暂的一次性命令进行连接。为避免实例列表被刷屏,`client.mode === "cli"` **不会**被转换为在线状态条目。
|
|
55
|
-
|
|
56
|
-
### 3)`system-event` 信标
|
|
57
|
-
|
|
58
|
-
客户端可以通过 `system-event` 方法发送更丰富的周期性信标。mac 应用使用此方法报告主机名、IP 和 `lastInputSeconds`。
|
|
59
|
-
|
|
60
|
-
### 4)节点连接(role: node)
|
|
61
|
-
|
|
62
|
-
当节点通过 Gateway 网关 WebSocket 以 `role: node` 连接时,Gateway 网关为该节点更新插入一个在线状态条目(与其他 WS 客户端流程相同)。
|
|
63
|
-
|
|
64
|
-
## 合并 + 去重规则(为什么 `instanceId` 很重要)
|
|
65
|
-
|
|
66
|
-
在线状态条目存储在单个内存映射中:
|
|
67
|
-
|
|
68
|
-
- 条目以**在线状态键**为索引。
|
|
69
|
-
- 最佳键是稳定的 `instanceId`(来自 `connect.client.instanceId`),它在重启后仍然有效。
|
|
70
|
-
- 键不区分大小写。
|
|
71
|
-
|
|
72
|
-
如果客户端在没有稳定 `instanceId` 的情况下重新连接,它可能会显示为**重复**行。
|
|
73
|
-
|
|
74
|
-
## TTL 和有界大小
|
|
75
|
-
|
|
76
|
-
在线状态是有意设计为短暂的:
|
|
77
|
-
|
|
78
|
-
- **TTL:** 超过 5 分钟的条目会被修剪
|
|
79
|
-
- **最大条目数:** 200(最旧的优先删除)
|
|
80
|
-
|
|
81
|
-
这使列表保持新鲜并避免无限制的内存增长。
|
|
82
|
-
|
|
83
|
-
## 远程/隧道注意事项(回环 IP)
|
|
84
|
-
|
|
85
|
-
当客户端通过 SSH 隧道/本地端口转发连接时,Gateway 网关可能会看到远程地址为 `127.0.0.1`。为避免覆盖客户端报告的有效 IP,回环远程地址会被忽略。
|
|
86
|
-
|
|
87
|
-
## 消费者
|
|
88
|
-
|
|
89
|
-
### macOS 实例标签页
|
|
90
|
-
|
|
91
|
-
macOS 应用渲染 `system-presence` 的输出,并根据最后更新的时间应用一个小的状态指示器(活跃/空闲/过期)。
|
|
92
|
-
|
|
93
|
-
## 调试技巧
|
|
94
|
-
|
|
95
|
-
- 要查看原始列表,对 Gateway 网关调用 `system-presence`。
|
|
96
|
-
- 如果你看到重复项:
|
|
97
|
-
- 确认客户端在握手中发送稳定的 `client.instanceId`
|
|
98
|
-
- 确认周期性信标使用相同的 `instanceId`
|
|
99
|
-
- 检查连接派生的条目是否缺少 `instanceId`(这种情况下重复是预期的)
|