@symerian/symi 3.0.16 → 3.0.17
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/docs/.i18n/zh-CN.tm.jsonl +0 -20
- package/docs/automation/cron-jobs.md +0 -2
- package/docs/automation/hooks.md +0 -2
- package/docs/automation/poll.md +0 -8
- package/docs/automation/webhook.md +0 -2
- package/docs/capabilities.md +0 -2
- package/docs/channels/broadcast-groups.md +0 -1
- package/docs/channels/channel-routing.md +4 -10
- package/docs/channels/group-messages.md +0 -2
- package/docs/channels/groups.md +0 -10
- package/docs/channels/index.md +0 -1
- package/docs/channels/matrix.md +0 -2
- package/docs/channels/msteams.md +0 -2
- package/docs/channels/pairing.md +0 -3
- package/docs/channels/signal.md +0 -2
- package/docs/channels/troubleshooting.md +0 -7
- package/docs/cli/channels.md +0 -6
- package/docs/cli/configure.md +0 -1
- package/docs/cli/directory.md +0 -1
- package/docs/cli/index.md +0 -7
- package/docs/cli/message.md +1 -47
- package/docs/cli/status.md +0 -1
- package/docs/concepts/architecture.md +0 -1
- package/docs/concepts/features.md +0 -2
- package/docs/concepts/markdown-formatting.md +6 -8
- package/docs/concepts/memory.md +0 -4
- package/docs/concepts/messages.md +0 -1
- package/docs/concepts/models.md +0 -1
- package/docs/concepts/multi-agent.md +4 -19
- package/docs/concepts/queue.md +0 -3
- package/docs/concepts/retry.md +0 -5
- package/docs/concepts/session-tool.md +0 -2
- package/docs/concepts/session.md +2 -9
- package/docs/concepts/streaming.md +0 -2
- package/docs/concepts/system-prompt.md +0 -1
- package/docs/concepts/timezone.md +0 -1
- package/docs/date-time.md +0 -1
- package/docs/docs.json +2 -11
- package/docs/experiments/plans/cron-add-hardening.md +0 -1
- package/docs/experiments/plans/session-binding-channel-agnostic.md +2 -23
- package/docs/experiments/plans/thread-bound-subagents.md +7 -64
- package/docs/gateway/configuration-examples.md +0 -10
- package/docs/gateway/configuration-reference.md +22 -47
- package/docs/gateway/configuration.md +0 -3
- package/docs/gateway/heartbeat.md +0 -2
- package/docs/gateway/security/index.md +1 -6
- package/docs/gateway/troubleshooting.md +0 -1
- package/docs/help/faq.md +0 -13
- package/docs/help/troubleshooting.md +0 -1
- package/docs/index.md +0 -6
- package/docs/install/ansible.md +2 -3
- package/docs/install/docker.md +1 -7
- package/docs/install/fly.md +0 -14
- package/docs/install/northflank.mdx +7 -11
- package/docs/install/railway.mdx +6 -10
- package/docs/install/render.mdx +1 -2
- package/docs/ja-JP/index.md +0 -3
- package/docs/pi.md +3 -5
- package/docs/platforms/digitalocean.md +0 -1
- package/docs/platforms/mac/voicewake.md +0 -1
- package/docs/providers/index.md +0 -2
- package/docs/refactor/outbound-session-mirroring.md +0 -2
- package/docs/reference/AGENTS.default.md +0 -1
- package/docs/reference/RELEASING.md +0 -1
- package/docs/reference/session-management-compaction.md +0 -1
- package/docs/reference/templates/AGENTS.md +0 -7
- package/docs/reference/wizard.md +0 -4
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -1
- package/docs/security/README.md +0 -1
- package/docs/security/THREAT-MODEL-ATLAS.md +7 -10
- package/docs/start/docs-directory.md +0 -1
- package/docs/start/hubs.md +0 -1
- package/docs/start/lore.md +0 -3
- package/docs/start/setup.md +0 -2
- package/docs/start/showcase.md +0 -2
- package/docs/start/symi.md +0 -4
- package/docs/start/wizard-cli-reference.md +0 -4
- package/docs/start/wizard.md +3 -4
- package/docs/tools/agent-send.md +0 -1
- package/docs/tools/elevated.md +0 -2
- package/docs/tools/exec-approvals.md +0 -1
- package/docs/tools/index.md +0 -7
- package/docs/tools/multi-agent-sandbox-tools.md +1 -2
- package/docs/tools/reactions.md +0 -1
- package/docs/tools/slash-commands.md +0 -14
- package/docs/tools/symihub.md +0 -1
- package/docs/tts.md +0 -1
- package/docs/web/control-ui.md +0 -1
- package/docs/zh-CN/automation/cron-jobs.md +0 -2
- package/docs/zh-CN/automation/poll.md +0 -8
- package/docs/zh-CN/automation/webhook.md +0 -2
- package/docs/zh-CN/channels/broadcast-groups.md +0 -1
- package/docs/zh-CN/channels/channel-routing.md +4 -9
- package/docs/zh-CN/channels/group-messages.md +0 -2
- package/docs/zh-CN/channels/groups.md +0 -10
- package/docs/zh-CN/channels/imessage.md +0 -2
- package/docs/zh-CN/channels/index.md +0 -1
- package/docs/zh-CN/channels/msteams.md +0 -2
- package/docs/zh-CN/channels/pairing.md +0 -3
- package/docs/zh-CN/channels/signal.md +0 -2
- package/docs/zh-CN/channels/slack.md +0 -2
- package/docs/zh-CN/channels/telegram.md +0 -3
- package/docs/zh-CN/channels/troubleshooting.md +0 -2
- package/docs/zh-CN/cli/channels.md +0 -6
- package/docs/zh-CN/cli/configure.md +0 -1
- package/docs/zh-CN/cli/directory.md +0 -1
- package/docs/zh-CN/cli/index.md +0 -7
- package/docs/zh-CN/cli/message.md +1 -42
- package/docs/zh-CN/cli/status.md +0 -1
- package/docs/zh-CN/concepts/architecture.md +0 -1
- package/docs/zh-CN/concepts/features.md +0 -2
- package/docs/zh-CN/concepts/markdown-formatting.md +6 -8
- package/docs/zh-CN/concepts/messages.md +0 -1
- package/docs/zh-CN/concepts/multi-agent.md +4 -5
- package/docs/zh-CN/concepts/queue.md +0 -3
- package/docs/zh-CN/concepts/retry.md +0 -5
- package/docs/zh-CN/concepts/session-tool.md +0 -2
- package/docs/zh-CN/concepts/session.md +3 -11
- package/docs/zh-CN/concepts/streaming.md +0 -2
- package/docs/zh-CN/concepts/system-prompt.md +0 -2
- package/docs/zh-CN/concepts/timezone.md +0 -2
- package/docs/zh-CN/date-time.md +0 -1
- package/docs/zh-CN/experiments/plans/cron-add-hardening.md +0 -1
- package/docs/zh-CN/gateway/configuration-examples.md +0 -7
- package/docs/zh-CN/gateway/configuration.md +2 -50
- package/docs/zh-CN/gateway/heartbeat.md +0 -2
- package/docs/zh-CN/gateway/security/index.md +1 -6
- package/docs/zh-CN/gateway/troubleshooting.md +1 -14
- package/docs/zh-CN/help/faq.md +0 -15
- package/docs/zh-CN/index.md +0 -3
- package/docs/zh-CN/install/ansible.md +2 -3
- package/docs/zh-CN/install/docker.md +1 -7
- package/docs/zh-CN/install/fly.md +0 -14
- package/docs/zh-CN/install/northflank.mdx +7 -11
- package/docs/zh-CN/install/railway.mdx +6 -10
- package/docs/zh-CN/install/render.mdx +1 -2
- package/docs/zh-CN/pi.md +3 -5
- package/docs/zh-CN/platforms/digitalocean.md +0 -1
- package/docs/zh-CN/platforms/mac/voicewake.md +0 -1
- package/docs/zh-CN/providers/index.md +0 -2
- package/docs/zh-CN/refactor/outbound-session-mirroring.md +0 -2
- package/docs/zh-CN/reference/AGENTS.default.md +0 -1
- package/docs/zh-CN/reference/RELEASING.md +0 -1
- package/docs/zh-CN/reference/session-management-compaction.md +0 -1
- package/docs/zh-CN/reference/templates/AGENTS.md +0 -5
- package/docs/zh-CN/start/docs-directory.md +0 -1
- package/docs/zh-CN/start/getting-started.md +0 -5
- package/docs/zh-CN/start/hubs.md +0 -1
- package/docs/zh-CN/start/lore.md +0 -3
- package/docs/zh-CN/start/setup.md +0 -2
- package/docs/zh-CN/start/showcase.md +0 -2
- package/docs/zh-CN/start/symi.md +0 -4
- package/docs/zh-CN/start/wizard.md +0 -5
- package/docs/zh-CN/tools/agent-send.md +0 -1
- package/docs/zh-CN/tools/elevated.md +0 -2
- package/docs/zh-CN/tools/exec-approvals.md +0 -1
- package/docs/zh-CN/tools/index.md +0 -7
- package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +1 -2
- package/docs/zh-CN/tools/reactions.md +0 -1
- package/docs/zh-CN/tools/slash-commands.md +0 -9
- package/docs/zh-CN/tts.md +0 -2
- package/docs/zh-CN/web/control-ui.md +0 -1
- package/package.json +1 -1
- package/docs/channels/discord.md +0 -998
- package/docs/zh-CN/channels/discord.md +0 -468
|
@@ -53,17 +53,10 @@ Full troubleshooting: [/channels/whatsapp#troubleshooting-quick](/channels/whats
|
|
|
53
53
|
|
|
54
54
|
Full troubleshooting: [/channels/telegram#troubleshooting](/channels/telegram#troubleshooting)
|
|
55
55
|
|
|
56
|
-
## Discord
|
|
57
|
-
|
|
58
|
-
### Discord failure signatures
|
|
59
|
-
|
|
60
56
|
| Symptom | Fastest check | Fix |
|
|
61
57
|
| ------------------------------- | ----------------------------------- | --------------------------------------------------------- |
|
|
62
58
|
| Bot online but no guild replies | `symi channels status --probe` | Allow guild/channel and verify message content intent. |
|
|
63
59
|
| Group messages ignored | Check logs for mention gating drops | Mention bot or set guild/channel `requireMention: false`. |
|
|
64
|
-
| DM replies missing | `symi pairing list discord` | Approve DM pairing or adjust DM policy. |
|
|
65
|
-
|
|
66
|
-
Full troubleshooting: [/channels/discord#troubleshooting](/channels/discord#troubleshooting)
|
|
67
60
|
|
|
68
61
|
## Slack
|
|
69
62
|
|
package/docs/cli/channels.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
summary: "CLI reference for `symi channels` (accounts, status, login/logout, logs)"
|
|
3
3
|
read_when:
|
|
4
|
-
- You want to add/remove channel accounts (WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (plugin)/Signal/iMessage)
|
|
5
4
|
- You want to check channel status or tail channel logs
|
|
6
5
|
title: "channels"
|
|
7
6
|
---
|
|
@@ -21,7 +20,6 @@ Related docs:
|
|
|
21
20
|
symi channels list
|
|
22
21
|
symi channels status
|
|
23
22
|
symi channels capabilities
|
|
24
|
-
symi channels capabilities --channel discord --target channel:123
|
|
25
23
|
symi channels resolve --channel slack "#general" "@jane"
|
|
26
24
|
symi channels logs --channel all
|
|
27
25
|
```
|
|
@@ -54,14 +52,11 @@ Fetch provider capability hints (intents/scopes where available) plus static fea
|
|
|
54
52
|
|
|
55
53
|
```bash
|
|
56
54
|
symi channels capabilities
|
|
57
|
-
symi channels capabilities --channel discord --target channel:123
|
|
58
55
|
```
|
|
59
56
|
|
|
60
57
|
Notes:
|
|
61
58
|
|
|
62
59
|
- `--channel` is optional; omit it to list every channel (including extensions).
|
|
63
|
-
- `--target` accepts `channel:<id>` or a raw numeric channel id and only applies to Discord.
|
|
64
|
-
- Probes are provider-specific: Discord intents + optional channel permissions; Slack bot + user scopes; Telegram bot flags + webhook; Signal daemon version; MS Teams app token + Graph roles/scopes (annotated where known). Channels without probes report `Probe: unavailable`.
|
|
65
60
|
|
|
66
61
|
## Resolve names to IDs
|
|
67
62
|
|
|
@@ -69,7 +64,6 @@ Resolve channel/user names to IDs using the provider directory:
|
|
|
69
64
|
|
|
70
65
|
```bash
|
|
71
66
|
symi channels resolve --channel slack "#general" "@jane"
|
|
72
|
-
symi channels resolve --channel discord "My Server/#support" "@someone"
|
|
73
67
|
symi channels resolve --channel matrix "Project Room"
|
|
74
68
|
```
|
|
75
69
|
|
package/docs/cli/configure.md
CHANGED
|
@@ -23,7 +23,6 @@ Related:
|
|
|
23
23
|
Notes:
|
|
24
24
|
|
|
25
25
|
- Choosing where the Gateway runs always updates `gateway.mode`. You can select "Continue" without other sections if that is all you need.
|
|
26
|
-
- Channel-oriented services (Slack/Discord/Matrix/Microsoft Teams) prompt for channel/room allowlists during setup. You can enter names or IDs; the wizard resolves names to IDs when possible.
|
|
27
26
|
|
|
28
27
|
## Examples
|
|
29
28
|
|
package/docs/cli/directory.md
CHANGED
|
@@ -34,7 +34,6 @@ symi message send --channel slack --target user:U012ABCDEF --message "hello"
|
|
|
34
34
|
- WhatsApp: `+15551234567` (DM), `1234567890-1234567890@g.us` (group)
|
|
35
35
|
- Telegram: `@username` or numeric chat id; groups are numeric ids
|
|
36
36
|
- Slack: `user:U…` and `channel:C…`
|
|
37
|
-
- Discord: `user:<id>` and `channel:<id>`
|
|
38
37
|
- Matrix (plugin): `user:@user:server`, `room:!roomId:server`, or `#alias:server`
|
|
39
38
|
- Microsoft Teams (plugin): `user:<id>` and `conversation:<id>`
|
|
40
39
|
- Zalo (plugin): user id (Bot API)
|
package/docs/cli/index.md
CHANGED
|
@@ -372,8 +372,6 @@ Options:
|
|
|
372
372
|
|
|
373
373
|
### `channels`
|
|
374
374
|
|
|
375
|
-
Manage chat channel accounts (WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (plugin)/Signal/iMessage/MS Teams).
|
|
376
|
-
|
|
377
375
|
Subcommands:
|
|
378
376
|
|
|
379
377
|
- `channels list`: show configured channels and auth profiles.
|
|
@@ -387,7 +385,6 @@ Subcommands:
|
|
|
387
385
|
|
|
388
386
|
Common options:
|
|
389
387
|
|
|
390
|
-
- `--channel <name>`: `whatsapp|telegram|discord|googlechat|slack|mattermost|signal|imessage|msteams`
|
|
391
388
|
- `--account <id>`: channel account id (default `default`)
|
|
392
389
|
- `--name <label>`: display name for the account
|
|
393
390
|
|
|
@@ -419,8 +416,6 @@ Examples:
|
|
|
419
416
|
|
|
420
417
|
```bash
|
|
421
418
|
symi channels add --channel telegram --account alerts --name "Alerts Bot" --token $TELEGRAM_BOT_TOKEN
|
|
422
|
-
symi channels add --channel discord --account work --name "Work Bot" --token $DISCORD_BOT_TOKEN
|
|
423
|
-
symi channels remove --channel discord --account work --delete
|
|
424
419
|
symi channels status --probe
|
|
425
420
|
symi status --deep
|
|
426
421
|
```
|
|
@@ -492,7 +487,6 @@ Subcommands:
|
|
|
492
487
|
Examples:
|
|
493
488
|
|
|
494
489
|
- `symi message send --target +15555550123 --message "Hi"`
|
|
495
|
-
- `symi message poll --channel discord --target channel:123 --poll-question "Snack?" --poll-option Pizza --poll-option Sushi`
|
|
496
490
|
|
|
497
491
|
### `agent`
|
|
498
492
|
|
|
@@ -508,7 +502,6 @@ Options:
|
|
|
508
502
|
- `--session-id <id>`
|
|
509
503
|
- `--thinking <off|minimal|low|medium|high|xhigh>` (GPT-5.2 + Codex models only)
|
|
510
504
|
- `--verbose <on|full|off>`
|
|
511
|
-
- `--channel <whatsapp|telegram|discord|slack|mattermost|signal|imessage|msteams>`
|
|
512
505
|
- `--local`
|
|
513
506
|
- `--deliver`
|
|
514
507
|
- `--json`
|
package/docs/cli/message.md
CHANGED
|
@@ -9,7 +9,6 @@ title: "message"
|
|
|
9
9
|
# `symi message`
|
|
10
10
|
|
|
11
11
|
Single outbound command for sending messages and channel actions
|
|
12
|
-
(Discord/Google Chat/Slack/Mattermost (plugin)/Telegram/WhatsApp/Signal/iMessage/MS Teams).
|
|
13
12
|
|
|
14
13
|
## Usage
|
|
15
14
|
|
|
@@ -21,13 +20,11 @@ Channel selection:
|
|
|
21
20
|
|
|
22
21
|
- `--channel` required if more than one channel is configured.
|
|
23
22
|
- If exactly one channel is configured, it becomes the default.
|
|
24
|
-
- Values: `whatsapp|telegram|discord|googlechat|slack|mattermost|signal|imessage|msteams` (Mattermost requires plugin)
|
|
25
23
|
|
|
26
24
|
Target formats (`--target`):
|
|
27
25
|
|
|
28
26
|
- WhatsApp: E.164 or group JID
|
|
29
27
|
- Telegram: chat id or `@username`
|
|
30
|
-
- Discord: `channel:<id>` or `user:<id>` (or `<@id>` mention; raw numeric ids are treated as channels)
|
|
31
28
|
- Google Chat: `spaces/<spaceId>` or `users/<userId>`
|
|
32
29
|
- Slack: `channel:<id>` or `user:<id>` (raw channel id is accepted)
|
|
33
30
|
- Mattermost (plugin): `channel:<id>`, `user:<id>`, or `@username` (bare ids are treated as channels)
|
|
@@ -37,7 +34,6 @@ Target formats (`--target`):
|
|
|
37
34
|
|
|
38
35
|
Name lookup:
|
|
39
36
|
|
|
40
|
-
- For supported providers (Discord/Slack/etc), channel names like `Help` or `#help` are resolved via the directory cache.
|
|
41
37
|
- On cache miss, Symi will attempt a live directory lookup when the provider supports it.
|
|
42
38
|
|
|
43
39
|
## Common flags
|
|
@@ -55,7 +51,6 @@ Name lookup:
|
|
|
55
51
|
### Core
|
|
56
52
|
|
|
57
53
|
- `send`
|
|
58
|
-
- Channels: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (plugin)/Signal/iMessage/MS Teams
|
|
59
54
|
- Required: `--target`, plus `--message` or `--media`
|
|
60
55
|
- Optional: `--media`, `--reply-to`, `--thread-id`, `--gif-playback`
|
|
61
56
|
- Telegram only: `--buttons` (requires `channels.telegram.capabilities.inlineButtons` to allow it)
|
|
@@ -64,14 +59,11 @@ Name lookup:
|
|
|
64
59
|
- WhatsApp only: `--gif-playback`
|
|
65
60
|
|
|
66
61
|
- `poll`
|
|
67
|
-
- Channels: WhatsApp/Telegram/Discord/Matrix/MS Teams
|
|
68
62
|
- Required: `--target`, `--poll-question`, `--poll-option` (repeat)
|
|
69
63
|
- Optional: `--poll-multi`
|
|
70
|
-
- Discord only: `--poll-duration-hours`, `--silent`, `--message`
|
|
71
64
|
- Telegram only: `--poll-duration-seconds` (5-600), `--silent`, `--poll-anonymous` / `--poll-public`, `--thread-id`
|
|
72
65
|
|
|
73
66
|
- `react`
|
|
74
|
-
- Channels: Discord/Google Chat/Slack/Telegram/WhatsApp/Signal
|
|
75
67
|
- Required: `--message-id`, `--target`
|
|
76
68
|
- Optional: `--emoji`, `--remove`, `--participant`, `--from-me`, `--target-author`, `--target-author-uuid`
|
|
77
69
|
- Note: `--remove` requires `--emoji` (omit `--emoji` to clear own reactions where supported; see /tools/reactions)
|
|
@@ -79,96 +71,69 @@ Name lookup:
|
|
|
79
71
|
- Signal group reactions: `--target-author` or `--target-author-uuid` required
|
|
80
72
|
|
|
81
73
|
- `reactions`
|
|
82
|
-
- Channels: Discord/Google Chat/Slack
|
|
83
74
|
- Required: `--message-id`, `--target`
|
|
84
75
|
- Optional: `--limit`
|
|
85
76
|
|
|
86
77
|
- `read`
|
|
87
|
-
- Channels: Discord/Slack
|
|
88
78
|
- Required: `--target`
|
|
89
79
|
- Optional: `--limit`, `--before`, `--after`
|
|
90
|
-
- Discord only: `--around`
|
|
91
80
|
|
|
92
81
|
- `edit`
|
|
93
|
-
- Channels: Discord/Slack
|
|
94
82
|
- Required: `--message-id`, `--message`, `--target`
|
|
95
83
|
|
|
96
84
|
- `delete`
|
|
97
|
-
- Channels: Discord/Slack/Telegram
|
|
98
85
|
- Required: `--message-id`, `--target`
|
|
99
86
|
|
|
100
87
|
- `pin` / `unpin`
|
|
101
|
-
- Channels: Discord/Slack
|
|
102
88
|
- Required: `--message-id`, `--target`
|
|
103
89
|
|
|
104
90
|
- `pins` (list)
|
|
105
|
-
- Channels: Discord/Slack
|
|
106
91
|
- Required: `--target`
|
|
107
92
|
|
|
108
93
|
- `permissions`
|
|
109
|
-
- Channels: Discord
|
|
110
94
|
- Required: `--target`
|
|
111
95
|
|
|
112
96
|
- `search`
|
|
113
|
-
- Channels: Discord
|
|
114
97
|
- Required: `--guild-id`, `--query`
|
|
115
98
|
- Optional: `--channel-id`, `--channel-ids` (repeat), `--author-id`, `--author-ids` (repeat), `--limit`
|
|
116
99
|
|
|
117
100
|
### Threads
|
|
118
101
|
|
|
119
102
|
- `thread create`
|
|
120
|
-
- Channels: Discord
|
|
121
103
|
- Required: `--thread-name`, `--target` (channel id)
|
|
122
104
|
- Optional: `--message-id`, `--message`, `--auto-archive-min`
|
|
123
105
|
|
|
124
106
|
- `thread list`
|
|
125
|
-
- Channels: Discord
|
|
126
107
|
- Required: `--guild-id`
|
|
127
108
|
- Optional: `--channel-id`, `--include-archived`, `--before`, `--limit`
|
|
128
109
|
|
|
129
110
|
- `thread reply`
|
|
130
|
-
- Channels: Discord
|
|
131
111
|
- Required: `--target` (thread id), `--message`
|
|
132
112
|
- Optional: `--media`, `--reply-to`
|
|
133
113
|
|
|
134
114
|
### Emojis
|
|
135
115
|
|
|
136
116
|
- `emoji list`
|
|
137
|
-
- Discord: `--guild-id`
|
|
138
117
|
- Slack: no extra flags
|
|
139
118
|
|
|
140
119
|
- `emoji upload`
|
|
141
|
-
- Channels: Discord
|
|
142
120
|
- Required: `--guild-id`, `--emoji-name`, `--media`
|
|
143
121
|
- Optional: `--role-ids` (repeat)
|
|
144
122
|
|
|
145
123
|
### Stickers
|
|
146
124
|
|
|
147
125
|
- `sticker send`
|
|
148
|
-
- Channels: Discord
|
|
149
126
|
- Required: `--target`, `--sticker-id` (repeat)
|
|
150
127
|
- Optional: `--message`
|
|
151
128
|
|
|
152
129
|
- `sticker upload`
|
|
153
|
-
- Channels: Discord
|
|
154
130
|
- Required: `--guild-id`, `--sticker-name`, `--sticker-desc`, `--sticker-tags`, `--media`
|
|
155
131
|
|
|
156
132
|
### Roles / Channels / Members / Voice
|
|
157
133
|
|
|
158
|
-
- `role info` (Discord): `--guild-id`
|
|
159
|
-
- `role add` / `role remove` (Discord): `--guild-id`, `--user-id`, `--role-id`
|
|
160
|
-
- `channel info` (Discord): `--target`
|
|
161
|
-
- `channel list` (Discord): `--guild-id`
|
|
162
|
-
- `member info` (Discord/Slack): `--user-id` (+ `--guild-id` for Discord)
|
|
163
|
-
- `voice status` (Discord): `--guild-id`, `--user-id`
|
|
164
|
-
|
|
165
134
|
### Events
|
|
166
135
|
|
|
167
|
-
-
|
|
168
|
-
- `event create` (Discord): `--guild-id`, `--event-name`, `--start-time`
|
|
169
|
-
- Optional: `--end-time`, `--desc`, `--channel-id`, `--location`, `--event-type`
|
|
170
|
-
|
|
171
|
-
### Moderation (Discord)
|
|
136
|
+
- Optional: `--end-time`, `--desc`, `--channel-id`, `--location`, `--event-type`
|
|
172
137
|
|
|
173
138
|
- `timeout`: `--guild-id`, `--user-id` (optional `--duration-min` or `--until`; omit both to clear timeout)
|
|
174
139
|
- `kick`: `--guild-id`, `--user-id` (+ `--reason`)
|
|
@@ -184,27 +149,16 @@ Name lookup:
|
|
|
184
149
|
|
|
185
150
|
## Examples
|
|
186
151
|
|
|
187
|
-
Send a Discord reply:
|
|
188
|
-
|
|
189
152
|
```
|
|
190
|
-
symi message send --channel discord \
|
|
191
153
|
--target channel:123 --message "hi" --reply-to 456
|
|
192
154
|
```
|
|
193
155
|
|
|
194
|
-
Send a Discord message with components:
|
|
195
|
-
|
|
196
156
|
```
|
|
197
|
-
symi message send --channel discord \
|
|
198
157
|
--target channel:123 --message "Choose:" \
|
|
199
158
|
--components '{"text":"Choose a path","blocks":[{"type":"actions","buttons":[{"label":"Approve","style":"success"},{"label":"Decline","style":"danger"}]}]}'
|
|
200
159
|
```
|
|
201
160
|
|
|
202
|
-
See [Discord components](/channels/discord#interactive-components) for the full schema.
|
|
203
|
-
|
|
204
|
-
Create a Discord poll:
|
|
205
|
-
|
|
206
161
|
```
|
|
207
|
-
symi message poll --channel discord \
|
|
208
162
|
--target channel:123 \
|
|
209
163
|
--poll-question "Snack?" \
|
|
210
164
|
--poll-option Pizza --poll-option Sushi \
|
package/docs/cli/status.md
CHANGED
|
@@ -19,7 +19,6 @@ symi status --usage
|
|
|
19
19
|
|
|
20
20
|
Notes:
|
|
21
21
|
|
|
22
|
-
- `--deep` runs live probes (WhatsApp Web + Telegram + Discord + Google Chat + Slack + Signal).
|
|
23
22
|
- Output includes per-agent session stores when multiple agents are configured.
|
|
24
23
|
- Overview includes Gateway + node host service install/runtime status when available.
|
|
25
24
|
- Overview includes update channel + git SHA (for source checkouts).
|
|
@@ -12,7 +12,6 @@ Last updated: 2026-01-22
|
|
|
12
12
|
## Overview
|
|
13
13
|
|
|
14
14
|
- A single long‑lived **Gateway** owns all messaging surfaces (WhatsApp via
|
|
15
|
-
Baileys, Telegram via grammY, Slack, Discord, Signal, iMessage, WebChat).
|
|
16
15
|
- Control-plane clients (macOS app, CLI, web UI, automations) connect to the
|
|
17
16
|
Gateway over **WebSocket** on the configured bind host (default
|
|
18
17
|
`127.0.0.1:18789`).
|
|
@@ -9,7 +9,6 @@ title: "Features"
|
|
|
9
9
|
|
|
10
10
|
<Columns>
|
|
11
11
|
<Card title="Channels" icon="message-square">
|
|
12
|
-
WhatsApp, Telegram, Discord, and iMessage with a single Gateway.
|
|
13
12
|
</Card>
|
|
14
13
|
<Card title="Plugins" icon="plug">
|
|
15
14
|
Add Mattermost and more with extensions.
|
|
@@ -32,7 +31,6 @@ title: "Features"
|
|
|
32
31
|
|
|
33
32
|
- WhatsApp integration via WhatsApp Web (Baileys)
|
|
34
33
|
- Telegram bot support (grammY)
|
|
35
|
-
- Discord bot support (channels.discord.js)
|
|
36
34
|
- Mattermost bot support (plugin)
|
|
37
35
|
- iMessage integration via local imsg CLI (macOS)
|
|
38
36
|
- Agent bridge for Pi in RPC mode with tool streaming
|
|
@@ -57,7 +57,6 @@ IR (schematic):
|
|
|
57
57
|
## Where it is used
|
|
58
58
|
|
|
59
59
|
- Slack, Telegram, and Signal outbound adapters render from the IR.
|
|
60
|
-
- Other channels (WhatsApp, iMessage, MS Teams, Discord) still use plain text or
|
|
61
60
|
their own formatting rules, with Markdown table conversion applied before
|
|
62
61
|
chunking when enabled.
|
|
63
62
|
|
|
@@ -74,13 +73,12 @@ Config keys:
|
|
|
74
73
|
|
|
75
74
|
```yaml
|
|
76
75
|
channels:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
tables: off
|
|
76
|
+
markdown:
|
|
77
|
+
tables: code
|
|
78
|
+
accounts:
|
|
79
|
+
work:
|
|
80
|
+
markdown:
|
|
81
|
+
tables: off
|
|
84
82
|
```
|
|
85
83
|
|
|
86
84
|
## Chunking rules
|
package/docs/concepts/memory.md
CHANGED
|
@@ -203,9 +203,7 @@ out to QMD for retrieval. Key points:
|
|
|
203
203
|
Default is DM-only (`deny` all, `allow` direct chats); loosen it to surface QMD
|
|
204
204
|
hits in groups/channels.
|
|
205
205
|
- `match.keyPrefix` matches the **normalized** session key (lowercased, with any
|
|
206
|
-
leading `agent:<id>:` stripped). Example: `discord:channel:`.
|
|
207
206
|
- `match.rawKeyPrefix` matches the **raw** session key (lowercased), including
|
|
208
|
-
`agent:<id>:`. Example: `agent:main:discord:`.
|
|
209
207
|
- Legacy: `match.keyPrefix: "agent:..."` is still treated as a raw-key prefix,
|
|
210
208
|
but prefer `rawKeyPrefix` for clarity.
|
|
211
209
|
- When `scope` denies a search, Symi logs a warning with the derived
|
|
@@ -238,9 +236,7 @@ memory: {
|
|
|
238
236
|
rules: [
|
|
239
237
|
{ action: "allow", match: { chatType: "direct" } },
|
|
240
238
|
// Normalized session-key prefix (strips `agent:<id>:`).
|
|
241
|
-
{ action: "deny", match: { keyPrefix: "discord:channel:" } },
|
|
242
239
|
// Raw session-key prefix (includes `agent:<id>:`).
|
|
243
|
-
{ action: "deny", match: { rawKeyPrefix: "agent:main:discord:" } },
|
|
244
240
|
]
|
|
245
241
|
},
|
|
246
242
|
paths: [
|
package/docs/concepts/models.md
CHANGED
|
@@ -104,7 +104,6 @@ You can switch models for the current session without restarting:
|
|
|
104
104
|
Notes:
|
|
105
105
|
|
|
106
106
|
- `/model` (and `/model list`) is a compact, numbered picker (model family + available providers).
|
|
107
|
-
- On Discord, `/model` and `/models` open an interactive picker with provider and model dropdowns plus a Submit step.
|
|
108
107
|
- `/model <#>` selects from that picker.
|
|
109
108
|
- `/model status` is the detailed view (auth candidates and, when configured, provider endpoint `baseUrl` + `api` mode).
|
|
110
109
|
- Model refs are parsed by splitting on the **first** `/`. Use `provider/model` when typing `/model <ref>`.
|
|
@@ -90,7 +90,6 @@ Each agent gets its own workspace with `SYMICORE.md`, `AGENTS.md`, and optional
|
|
|
90
90
|
|
|
91
91
|
Create one account per agent on your preferred channels:
|
|
92
92
|
|
|
93
|
-
- Discord: one bot per agent, enable Message Content Intent, copy each token.
|
|
94
93
|
- Telegram: one bot per agent via BotFather, copy each token.
|
|
95
94
|
- WhatsApp: link each phone number per account.
|
|
96
95
|
|
|
@@ -98,8 +97,6 @@ Create one account per agent on your preferred channels:
|
|
|
98
97
|
symi channels login --channel whatsapp --account work
|
|
99
98
|
```
|
|
100
99
|
|
|
101
|
-
See channel guides: [Discord](/channels/discord), [Telegram](/channels/telegram), [WhatsApp](/channels/whatsapp).
|
|
102
|
-
|
|
103
100
|
</Step>
|
|
104
101
|
|
|
105
102
|
<Step title="Add agents, accounts, and bindings">
|
|
@@ -175,12 +172,10 @@ Bindings are **deterministic** and **most-specific wins**:
|
|
|
175
172
|
|
|
176
173
|
1. `peer` match (exact DM/group/channel id)
|
|
177
174
|
2. `parentPeer` match (thread inheritance)
|
|
178
|
-
3. `
|
|
179
|
-
4. `
|
|
180
|
-
5. `
|
|
181
|
-
6. `
|
|
182
|
-
7. channel-level match (`accountId: "*"`)
|
|
183
|
-
8. fallback to default agent (`agents.list[].default`, else first list entry, default: `main`)
|
|
175
|
+
3. `teamId` (Slack)
|
|
176
|
+
4. `accountId` match for a channel
|
|
177
|
+
5. channel-level match (`accountId: "*"`)
|
|
178
|
+
6. fallback to default agent (`agents.list[].default`, else first list entry, default: `main`)
|
|
184
179
|
|
|
185
180
|
If multiple bindings match in the same tier, the first one in config order wins.
|
|
186
181
|
If a binding sets multiple match fields (for example `peer` + `guildId`), all specified fields are required (`AND` semantics).
|
|
@@ -200,10 +195,6 @@ multiple phone numbers without mixing sessions.
|
|
|
200
195
|
|
|
201
196
|
## Platform examples
|
|
202
197
|
|
|
203
|
-
### Discord bots per agent
|
|
204
|
-
|
|
205
|
-
Each Discord bot account maps to a unique `accountId`. Bind each account to an agent and keep allowlists per bot.
|
|
206
|
-
|
|
207
198
|
```json5
|
|
208
199
|
{
|
|
209
200
|
agents: {
|
|
@@ -213,15 +204,11 @@ Each Discord bot account maps to a unique `accountId`. Bind each account to an a
|
|
|
213
204
|
],
|
|
214
205
|
},
|
|
215
206
|
bindings: [
|
|
216
|
-
{ agentId: "main", match: { channel: "discord", accountId: "default" } },
|
|
217
|
-
{ agentId: "coding", match: { channel: "discord", accountId: "coding" } },
|
|
218
207
|
],
|
|
219
208
|
channels: {
|
|
220
|
-
discord: {
|
|
221
209
|
groupPolicy: "allowlist",
|
|
222
210
|
accounts: {
|
|
223
211
|
default: {
|
|
224
|
-
token: "DISCORD_BOT_TOKEN_MAIN",
|
|
225
212
|
guilds: {
|
|
226
213
|
"123456789012345678": {
|
|
227
214
|
channels: {
|
|
@@ -231,7 +218,6 @@ Each Discord bot account maps to a unique `accountId`. Bind each account to an a
|
|
|
231
218
|
},
|
|
232
219
|
},
|
|
233
220
|
coding: {
|
|
234
|
-
token: "DISCORD_BOT_TOKEN_CODING",
|
|
235
221
|
guilds: {
|
|
236
222
|
"123456789012345678": {
|
|
237
223
|
channels: {
|
|
@@ -249,7 +235,6 @@ Each Discord bot account maps to a unique `accountId`. Bind each account to an a
|
|
|
249
235
|
Notes:
|
|
250
236
|
|
|
251
237
|
- Invite each bot to the guild and enable Message Content Intent.
|
|
252
|
-
- Tokens live in `channels.discord.accounts.<id>.token` (default account can use `DISCORD_BOT_TOKEN`).
|
|
253
238
|
|
|
254
239
|
### Telegram bots per agent
|
|
255
240
|
|
package/docs/concepts/queue.md
CHANGED
|
@@ -36,7 +36,6 @@ Inbound messages can steer the current run, wait for a followup turn, or do both
|
|
|
36
36
|
Steer-backlog means you can get a followup response after the steered run, so
|
|
37
37
|
streaming surfaces can look like duplicates. Prefer `collect`/`steer` if you want
|
|
38
38
|
one response per inbound message.
|
|
39
|
-
Send `/queue collect` as a standalone command (per-session) or set `messages.queue.byChannel.discord: "collect"`.
|
|
40
39
|
|
|
41
40
|
Defaults (when unset in config):
|
|
42
41
|
|
|
@@ -52,7 +51,6 @@ Configure globally or per channel via `messages.queue`:
|
|
|
52
51
|
debounceMs: 1000,
|
|
53
52
|
cap: 20,
|
|
54
53
|
drop: "summarize",
|
|
55
|
-
byChannel: { discord: "collect" },
|
|
56
54
|
},
|
|
57
55
|
},
|
|
58
56
|
}
|
|
@@ -77,7 +75,6 @@ Defaults: `debounceMs: 1000`, `cap: 20`, `drop: summarize`.
|
|
|
77
75
|
|
|
78
76
|
## Scope and guarantees
|
|
79
77
|
|
|
80
|
-
- Applies to auto-reply agent runs across all inbound channels that use the gateway reply pipeline (WhatsApp web, Telegram, Slack, Discord, Signal, iMessage, webchat, etc.).
|
|
81
78
|
- Default lane (`main`) is process-wide for inbound + main heartbeats; set `agents.defaults.maxConcurrent` to allow multiple sessions in parallel.
|
|
82
79
|
- Additional lanes may exist (e.g. `cron`, `subagent`) so background jobs can run in parallel without blocking inbound replies.
|
|
83
80
|
- Per-session lanes guarantee that only one agent run touches a given session at a time.
|
package/docs/concepts/retry.md
CHANGED
|
@@ -21,14 +21,10 @@ title: "Retry Policy"
|
|
|
21
21
|
- Jitter: 0.1 (10 percent)
|
|
22
22
|
- Provider defaults:
|
|
23
23
|
- Telegram min delay: 400 ms
|
|
24
|
-
- Discord min delay: 500 ms
|
|
25
24
|
|
|
26
25
|
## Behavior
|
|
27
26
|
|
|
28
|
-
### Discord
|
|
29
|
-
|
|
30
27
|
- Retries only on rate-limit errors (HTTP 429).
|
|
31
|
-
- Uses Discord `retry_after` when available, otherwise exponential backoff.
|
|
32
28
|
|
|
33
29
|
### Telegram
|
|
34
30
|
|
|
@@ -51,7 +47,6 @@ Set retry policy per provider in `~/.symi/symi.json`:
|
|
|
51
47
|
jitter: 0.1,
|
|
52
48
|
},
|
|
53
49
|
},
|
|
54
|
-
discord: {
|
|
55
50
|
retry: {
|
|
56
51
|
attempts: 3,
|
|
57
52
|
minDelayMs: 500,
|
|
@@ -47,7 +47,6 @@ Row shape (JSON):
|
|
|
47
47
|
|
|
48
48
|
- `key`: session key (string)
|
|
49
49
|
- `kind`: `main | group | cron | hook | node | other`
|
|
50
|
-
- `channel`: `whatsapp | telegram | discord | signal | imessage | webchat | internal | unknown`
|
|
51
50
|
- `displayName` (group display label if available)
|
|
52
51
|
- `updatedAt` (ms)
|
|
53
52
|
- `sessionId`
|
|
@@ -121,7 +120,6 @@ Policy-based blocking by channel/chat type (not per session id).
|
|
|
121
120
|
"sendPolicy": {
|
|
122
121
|
"rules": [
|
|
123
122
|
{
|
|
124
|
-
"match": { "channel": "discord", "chatType": "group" },
|
|
125
123
|
"action": "deny"
|
|
126
124
|
}
|
|
127
125
|
],
|
package/docs/concepts/session.md
CHANGED
|
@@ -106,7 +106,6 @@ the workspace is writable. See [Memory](/concepts/memory) and
|
|
|
106
106
|
- Daily reset: defaults to **4:00 AM local time on the gateway host**. A session is stale once its last update is earlier than the most recent daily reset time.
|
|
107
107
|
- Idle reset (optional): `idleMinutes` adds a sliding idle window. When both daily and idle resets are configured, **whichever expires first** forces a new session.
|
|
108
108
|
- Legacy idle-only: if you set `session.idleMinutes` without any `session.reset`/`resetByType` config, Symi stays in idle-only mode for backward compatibility.
|
|
109
|
-
- Per-type overrides (optional): `resetByType` lets you override the policy for `direct`, `group`, and `thread` sessions (thread = Slack/Discord threads, Telegram topics, Matrix threads when provided by the connector).
|
|
110
109
|
- Per-channel overrides (optional): `resetByChannel` overrides the reset policy for a channel (applies to all session types for that channel and takes precedence over `reset`/`resetByType`).
|
|
111
110
|
- Reset triggers: exact `/new` or `/reset` (plus any extras in `resetTriggers`) start a fresh session id and pass the remainder of the message through. `/new <model>` accepts a model alias, `provider/model`, or provider name (fuzzy match) to set the new session model. If `/new` or `/reset` is sent alone, Symi runs a short “hello” greeting turn to confirm the reset.
|
|
112
111
|
- Manual reset: delete specific keys from the store or remove the JSONL transcript; the next message recreates them.
|
|
@@ -121,10 +120,8 @@ Block delivery for specific session types without listing individual ids.
|
|
|
121
120
|
session: {
|
|
122
121
|
sendPolicy: {
|
|
123
122
|
rules: [
|
|
124
|
-
{ action: "deny", match: { channel: "discord", chatType: "group" } },
|
|
125
123
|
{ action: "deny", match: { keyPrefix: "cron:" } },
|
|
126
124
|
// Match the raw session key (including the `agent:<id>:` prefix).
|
|
127
|
-
{ action: "deny", match: { rawKeyPrefix: "agent:main:discord:" } },
|
|
128
125
|
],
|
|
129
126
|
default: "allow",
|
|
130
127
|
},
|
|
@@ -147,9 +144,7 @@ Runtime override (owner only):
|
|
|
147
144
|
session: {
|
|
148
145
|
scope: "per-sender", // keep group keys separate
|
|
149
146
|
dmScope: "main", // DM continuity (set per-channel-peer/per-account-channel-peer for shared inboxes)
|
|
150
|
-
identityLinks: {
|
|
151
|
-
alice: ["telegram:123456789", "discord:987654321012345678"],
|
|
152
|
-
},
|
|
147
|
+
identityLinks: {},
|
|
153
148
|
reset: {
|
|
154
149
|
// Defaults: mode=daily, atHour=4 (gateway host local time).
|
|
155
150
|
// If you also set idleMinutes, whichever expires first wins.
|
|
@@ -162,9 +157,7 @@ Runtime override (owner only):
|
|
|
162
157
|
direct: { mode: "idle", idleMinutes: 240 },
|
|
163
158
|
group: { mode: "idle", idleMinutes: 120 },
|
|
164
159
|
},
|
|
165
|
-
resetByChannel: {
|
|
166
|
-
discord: { mode: "idle", idleMinutes: 10080 },
|
|
167
|
-
},
|
|
160
|
+
resetByChannel: {},
|
|
168
161
|
resetTriggers: ["/new", "/reset"],
|
|
169
162
|
store: "~/.symi/agents/{agentId}/sessions/sessions.json",
|
|
170
163
|
mainKey: "main",
|
|
@@ -45,7 +45,6 @@ Legend:
|
|
|
45
45
|
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (merge streamed blocks before send).
|
|
46
46
|
- Channel hard cap: `*.textChunkLimit` (e.g., `channels.whatsapp.textChunkLimit`).
|
|
47
47
|
- Channel chunk mode: `*.chunkMode` (`length` default, `newline` splits on blank lines (paragraph boundaries) before length chunking).
|
|
48
|
-
- Discord soft cap: `channels.discord.maxLinesPerMessage` (default 17) splits tall replies to avoid UI clipping.
|
|
49
48
|
|
|
50
49
|
**Boundary semantics:**
|
|
51
50
|
|
|
@@ -78,7 +77,6 @@ progressive output.
|
|
|
78
77
|
- Joiner is derived from `blockStreamingChunk.breakPreference`
|
|
79
78
|
(`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → space).
|
|
80
79
|
- Channel overrides are available via `*.blockStreamingCoalesce` (including per-account configs).
|
|
81
|
-
- Default coalesce `minChars` is bumped to 1500 for Signal/Slack/Discord unless overridden.
|
|
82
80
|
|
|
83
81
|
## Human-like pacing between blocks
|
|
84
82
|
|
|
@@ -123,7 +123,6 @@ This keeps the base prompt small while still enabling targeted skill usage.
|
|
|
123
123
|
|
|
124
124
|
When available, the system prompt includes a **Documentation** section that points to the
|
|
125
125
|
local Symi docs directory (either `docs/` in the repo workspace or the bundled npm
|
|
126
|
-
package docs) and also notes the public mirror, source repo, community Discord, and
|
|
127
126
|
SymiHub ([https://symihub.com](https://symihub.com)) for skills discovery. The prompt instructs the model to consult local docs first
|
|
128
127
|
for Symi behavior, commands, configuration, or architecture, and to run
|
|
129
128
|
`symi status` itself when possible (asking the user only when it lacks access).
|
|
@@ -62,7 +62,6 @@ You can override this with:
|
|
|
62
62
|
|
|
63
63
|
## Tool payloads (raw provider data + normalized fields)
|
|
64
64
|
|
|
65
|
-
Tool calls (`channels.discord.readMessages`, `channels.slack.readMessages`, etc.) return **raw provider timestamps**.
|
|
66
65
|
We also attach normalized fields for consistency:
|
|
67
66
|
|
|
68
67
|
- `timestampMs` (UTC epoch milliseconds)
|
package/docs/date-time.md
CHANGED
|
@@ -116,7 +116,6 @@ Channel tools return **provider-native timestamps** and add normalized fields fo
|
|
|
116
116
|
Raw provider fields are preserved so nothing is lost.
|
|
117
117
|
|
|
118
118
|
- Slack: epoch-like strings from the API
|
|
119
|
-
- Discord: UTC ISO timestamps
|
|
120
119
|
- Telegram/WhatsApp: provider-specific numeric/ISO timestamps
|
|
121
120
|
|
|
122
121
|
If you need local time, convert it downstream using the known timezone.
|
package/docs/docs.json
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://mintlify.com/docs.json",
|
|
3
3
|
"name": "Symi",
|
|
4
|
-
"description": "Self-hosted gateway that connects WhatsApp, Telegram, Discord, iMessage, and more to AI coding agents. Run a single Gateway process on your own machine and message your AI assistant from anywhere.",
|
|
5
4
|
"theme": "mint",
|
|
6
5
|
"icons": {
|
|
7
6
|
"library": "lucide"
|
|
@@ -123,10 +122,7 @@
|
|
|
123
122
|
"source": "/message",
|
|
124
123
|
"destination": "/cli/message"
|
|
125
124
|
},
|
|
126
|
-
{
|
|
127
|
-
"source": "/providers/discord",
|
|
128
|
-
"destination": "/channels/discord"
|
|
129
|
-
},
|
|
125
|
+
{},
|
|
130
126
|
{
|
|
131
127
|
"source": "/providers/googlechat",
|
|
132
128
|
"destination": "/channels/googlechat"
|
|
@@ -307,10 +303,7 @@
|
|
|
307
303
|
"source": "/device-models",
|
|
308
304
|
"destination": "/reference/device-models"
|
|
309
305
|
},
|
|
310
|
-
{
|
|
311
|
-
"source": "/discord",
|
|
312
|
-
"destination": "/channels/discord"
|
|
313
|
-
},
|
|
306
|
+
{},
|
|
314
307
|
{
|
|
315
308
|
"source": "/discovery",
|
|
316
309
|
"destination": "/gateway/discovery"
|
|
@@ -883,7 +876,6 @@
|
|
|
883
876
|
"pages": [
|
|
884
877
|
"channels/whatsapp",
|
|
885
878
|
"channels/telegram",
|
|
886
|
-
"channels/discord",
|
|
887
879
|
"channels/irc",
|
|
888
880
|
"channels/slack",
|
|
889
881
|
"channels/feishu",
|
|
@@ -1397,7 +1389,6 @@
|
|
|
1397
1389
|
"pages": [
|
|
1398
1390
|
"zh-CN/channels/whatsapp",
|
|
1399
1391
|
"zh-CN/channels/telegram",
|
|
1400
|
-
"zh-CN/channels/discord",
|
|
1401
1392
|
"zh-CN/channels/slack",
|
|
1402
1393
|
"zh-CN/channels/feishu",
|
|
1403
1394
|
"zh-CN/channels/googlechat",
|