@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.
Files changed (688) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/package.json +1 -1
  4. package/docs/.i18n/README.md +0 -31
  5. package/docs/.i18n/glossary.ja-JP.json +0 -14
  6. package/docs/.i18n/glossary.zh-CN.json +0 -210
  7. package/docs/.i18n/ja-JP.tm.jsonl +0 -0
  8. package/docs/.i18n/zh-CN.tm.jsonl +0 -1303
  9. package/docs/CNAME +0 -1
  10. package/docs/assets/install-script.svg +0 -1
  11. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  12. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  13. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  14. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  15. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  16. package/docs/assets/pixel-symi.svg +0 -60
  17. package/docs/assets/showcase/agents-ui.jpg +0 -0
  18. package/docs/assets/showcase/bambu-cli.png +0 -0
  19. package/docs/assets/showcase/codexmonitor.png +0 -0
  20. package/docs/assets/showcase/gohome-grafana.png +0 -0
  21. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  22. package/docs/assets/showcase/oura-health.png +0 -0
  23. package/docs/assets/showcase/padel-cli.svg +0 -11
  24. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  25. package/docs/assets/showcase/papla-tts.jpg +0 -0
  26. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  27. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  28. package/docs/assets/showcase/roborock-status.svg +0 -13
  29. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  30. package/docs/assets/showcase/snag.png +0 -0
  31. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  32. package/docs/assets/showcase/wienerlinien.png +0 -0
  33. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  34. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  35. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  36. package/docs/assets/sponsors/blacksmith.svg +0 -14
  37. package/docs/assets/sponsors/openai.svg +0 -3
  38. package/docs/assets/symi-logo-text-dark.png +0 -0
  39. package/docs/assets/symi-logo-text.png +0 -0
  40. package/docs/automation/auth-monitoring.md +0 -44
  41. package/docs/automation/cron-jobs.md +0 -540
  42. package/docs/automation/cron-vs-heartbeat.md +0 -286
  43. package/docs/automation/gmail-pubsub.md +0 -256
  44. package/docs/automation/hooks.md +0 -998
  45. package/docs/automation/poll.md +0 -61
  46. package/docs/automation/troubleshooting.md +0 -122
  47. package/docs/automation/webhook.md +0 -213
  48. package/docs/brave-search.md +0 -41
  49. package/docs/capabilities.md +0 -151
  50. package/docs/channels/bluebubbles.md +0 -346
  51. package/docs/channels/broadcast-groups.md +0 -441
  52. package/docs/channels/channel-routing.md +0 -112
  53. package/docs/channels/feishu.md +0 -586
  54. package/docs/channels/googlechat.md +0 -253
  55. package/docs/channels/grammy.md +0 -31
  56. package/docs/channels/group-messages.md +0 -82
  57. package/docs/channels/groups.md +0 -364
  58. package/docs/channels/imessage.md +0 -366
  59. package/docs/channels/index.md +0 -46
  60. package/docs/channels/irc.md +0 -234
  61. package/docs/channels/line.md +0 -186
  62. package/docs/channels/location.md +0 -56
  63. package/docs/channels/matrix.md +0 -300
  64. package/docs/channels/mattermost.md +0 -158
  65. package/docs/channels/msteams.md +0 -769
  66. package/docs/channels/nextcloud-talk.md +0 -138
  67. package/docs/channels/nostr.md +0 -233
  68. package/docs/channels/pairing.md +0 -100
  69. package/docs/channels/signal.md +0 -322
  70. package/docs/channels/slack.md +0 -510
  71. package/docs/channels/telegram.md +0 -748
  72. package/docs/channels/tlon.md +0 -148
  73. package/docs/channels/troubleshooting.md +0 -110
  74. package/docs/channels/twitch.md +0 -379
  75. package/docs/channels/whatsapp.md +0 -444
  76. package/docs/channels/zalo.md +0 -192
  77. package/docs/channels/zalouser.md +0 -140
  78. package/docs/ci.md +0 -50
  79. package/docs/cli/acp.md +0 -182
  80. package/docs/cli/agent.md +0 -24
  81. package/docs/cli/agents.md +0 -75
  82. package/docs/cli/approvals.md +0 -50
  83. package/docs/cli/browser.md +0 -107
  84. package/docs/cli/channels.md +0 -73
  85. package/docs/cli/config.md +0 -50
  86. package/docs/cli/configure.md +0 -32
  87. package/docs/cli/cron.md +0 -44
  88. package/docs/cli/dashboard.md +0 -16
  89. package/docs/cli/devices.md +0 -73
  90. package/docs/cli/directory.md +0 -62
  91. package/docs/cli/dns.md +0 -23
  92. package/docs/cli/docs.md +0 -15
  93. package/docs/cli/doctor.md +0 -41
  94. package/docs/cli/gateway.md +0 -202
  95. package/docs/cli/health.md +0 -21
  96. package/docs/cli/hooks.md +0 -313
  97. package/docs/cli/index.md +0 -1029
  98. package/docs/cli/logs.md +0 -28
  99. package/docs/cli/memory.md +0 -45
  100. package/docs/cli/message.md +0 -214
  101. package/docs/cli/models.md +0 -79
  102. package/docs/cli/node.md +0 -112
  103. package/docs/cli/nodes.md +0 -73
  104. package/docs/cli/onboard.md +0 -76
  105. package/docs/cli/pairing.md +0 -21
  106. package/docs/cli/plugins.md +0 -92
  107. package/docs/cli/reset.md +0 -17
  108. package/docs/cli/sandbox.md +0 -152
  109. package/docs/cli/security.md +0 -64
  110. package/docs/cli/sessions.md +0 -16
  111. package/docs/cli/setup.md +0 -29
  112. package/docs/cli/skills.md +0 -26
  113. package/docs/cli/status.md +0 -25
  114. package/docs/cli/system.md +0 -60
  115. package/docs/cli/tui.md +0 -23
  116. package/docs/cli/uninstall.md +0 -17
  117. package/docs/cli/update.md +0 -98
  118. package/docs/cli/voicecall.md +0 -34
  119. package/docs/cli/webhooks.md +0 -25
  120. package/docs/concepts/agent-loop.md +0 -148
  121. package/docs/concepts/agent-workspace.md +0 -234
  122. package/docs/concepts/agent.md +0 -123
  123. package/docs/concepts/architecture.md +0 -135
  124. package/docs/concepts/compaction.md +0 -61
  125. package/docs/concepts/context.md +0 -161
  126. package/docs/concepts/features.md +0 -51
  127. package/docs/concepts/markdown-formatting.md +0 -128
  128. package/docs/concepts/memory.md +0 -729
  129. package/docs/concepts/messages.md +0 -153
  130. package/docs/concepts/model-failover.md +0 -149
  131. package/docs/concepts/model-providers.md +0 -424
  132. package/docs/concepts/models.md +0 -208
  133. package/docs/concepts/multi-agent.md +0 -521
  134. package/docs/concepts/oauth.md +0 -145
  135. package/docs/concepts/presence.md +0 -102
  136. package/docs/concepts/queue.md +0 -86
  137. package/docs/concepts/retry.md +0 -64
  138. package/docs/concepts/session-pruning.md +0 -123
  139. package/docs/concepts/session-tool.md +0 -213
  140. package/docs/concepts/session.md +0 -199
  141. package/docs/concepts/sessions.md +0 -10
  142. package/docs/concepts/streaming.md +0 -129
  143. package/docs/concepts/system-prompt.md +0 -128
  144. package/docs/concepts/timezone.md +0 -90
  145. package/docs/concepts/typebox.md +0 -289
  146. package/docs/concepts/typing-indicators.md +0 -68
  147. package/docs/concepts/usage-tracking.md +0 -35
  148. package/docs/date-time.md +0 -127
  149. package/docs/debug/node-issue.md +0 -85
  150. package/docs/diagnostics/flags.md +0 -91
  151. package/docs/docs.json +0 -1849
  152. package/docs/experiments/onboarding-config-protocol.md +0 -40
  153. package/docs/experiments/plans/browser-evaluate-cdp-refactor.md +0 -229
  154. package/docs/experiments/plans/cron-add-hardening.md +0 -62
  155. package/docs/experiments/plans/group-policy-hardening.md +0 -40
  156. package/docs/experiments/plans/openresponses-gateway.md +0 -123
  157. package/docs/experiments/plans/pty-process-supervision.md +0 -192
  158. package/docs/experiments/plans/session-binding-channel-agnostic.md +0 -202
  159. package/docs/experiments/plans/thread-bound-subagents.md +0 -281
  160. package/docs/experiments/proposals/model-config.md +0 -36
  161. package/docs/experiments/research/memory.md +0 -228
  162. package/docs/gateway/authentication.md +0 -162
  163. package/docs/gateway/background-process.md +0 -96
  164. package/docs/gateway/bonjour.md +0 -177
  165. package/docs/gateway/bridge-protocol.md +0 -91
  166. package/docs/gateway/cli-backends.md +0 -225
  167. package/docs/gateway/configuration-examples.md +0 -610
  168. package/docs/gateway/configuration-reference.md +0 -2465
  169. package/docs/gateway/configuration.md +0 -488
  170. package/docs/gateway/discovery.md +0 -123
  171. package/docs/gateway/doctor.md +0 -282
  172. package/docs/gateway/gateway-lock.md +0 -34
  173. package/docs/gateway/health.md +0 -35
  174. package/docs/gateway/heartbeat.md +0 -374
  175. package/docs/gateway/index.md +0 -254
  176. package/docs/gateway/local-models.md +0 -150
  177. package/docs/gateway/logging.md +0 -113
  178. package/docs/gateway/multiple-gateways.md +0 -112
  179. package/docs/gateway/network-model.md +0 -20
  180. package/docs/gateway/openai-http-api.md +0 -119
  181. package/docs/gateway/openresponses-http-api.md +0 -333
  182. package/docs/gateway/pairing.md +0 -99
  183. package/docs/gateway/protocol.md +0 -221
  184. package/docs/gateway/remote-gateway-readme.md +0 -158
  185. package/docs/gateway/remote.md +0 -131
  186. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -128
  187. package/docs/gateway/sandboxing.md +0 -203
  188. package/docs/gateway/security/index.md +0 -931
  189. package/docs/gateway/tailscale.md +0 -132
  190. package/docs/gateway/tools-invoke-http-api.md +0 -110
  191. package/docs/gateway/troubleshooting.md +0 -317
  192. package/docs/gateway/trusted-proxy-auth.md +0 -270
  193. package/docs/glass-ui-rendering-invariants.md +0 -451
  194. package/docs/help/debugging.md +0 -162
  195. package/docs/help/environment.md +0 -107
  196. package/docs/help/faq.md +0 -2846
  197. package/docs/help/index.md +0 -21
  198. package/docs/help/scripts.md +0 -28
  199. package/docs/help/testing.md +0 -385
  200. package/docs/help/troubleshooting.md +0 -264
  201. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  202. package/docs/images/feishu-step2-create-app.png +0 -0
  203. package/docs/images/feishu-step3-credentials.png +0 -0
  204. package/docs/images/feishu-step4-permissions.png +0 -0
  205. package/docs/images/feishu-step5-bot-capability.png +0 -0
  206. package/docs/images/feishu-step6-event-subscription.png +0 -0
  207. package/docs/images/groups-flow.svg +0 -52
  208. package/docs/images/mobile-ui-screenshot.png +0 -0
  209. package/docs/index.md +0 -186
  210. package/docs/install/ansible.md +0 -207
  211. package/docs/install/bun.md +0 -59
  212. package/docs/install/development-channels.md +0 -75
  213. package/docs/install/docker.md +0 -583
  214. package/docs/install/exe-dev.md +0 -126
  215. package/docs/install/fly.md +0 -472
  216. package/docs/install/gcp.md +0 -499
  217. package/docs/install/hetzner.md +0 -347
  218. package/docs/install/index.md +0 -218
  219. package/docs/install/installer.md +0 -405
  220. package/docs/install/macos-vm.md +0 -281
  221. package/docs/install/migrating.md +0 -192
  222. package/docs/install/nix.md +0 -98
  223. package/docs/install/node.md +0 -138
  224. package/docs/install/northflank.mdx +0 -49
  225. package/docs/install/podman.md +0 -108
  226. package/docs/install/railway.mdx +0 -95
  227. package/docs/install/render.mdx +0 -158
  228. package/docs/install/uninstall.md +0 -128
  229. package/docs/install/updating.md +0 -231
  230. package/docs/ja-JP/AGENTS.md +0 -37
  231. package/docs/ja-JP/index.md +0 -183
  232. package/docs/ja-JP/start/getting-started.md +0 -125
  233. package/docs/ja-JP/start/wizard.md +0 -77
  234. package/docs/logging.md +0 -350
  235. package/docs/nav-tabs-underline.js +0 -100
  236. package/docs/network.md +0 -54
  237. package/docs/nodes/audio.md +0 -133
  238. package/docs/nodes/camera.md +0 -156
  239. package/docs/nodes/images.md +0 -72
  240. package/docs/nodes/index.md +0 -342
  241. package/docs/nodes/location-command.md +0 -113
  242. package/docs/nodes/media-understanding.md +0 -379
  243. package/docs/nodes/talk.md +0 -90
  244. package/docs/nodes/troubleshooting.md +0 -112
  245. package/docs/nodes/voicewake.md +0 -65
  246. package/docs/perplexity.md +0 -80
  247. package/docs/phase-6.5-pre-flight-audit.md +0 -268
  248. package/docs/pi-dev.md +0 -70
  249. package/docs/pi.md +0 -610
  250. package/docs/platforms/android.md +0 -151
  251. package/docs/platforms/digitalocean.md +0 -265
  252. package/docs/platforms/index.md +0 -53
  253. package/docs/platforms/ios.md +0 -108
  254. package/docs/platforms/linux.md +0 -94
  255. package/docs/platforms/mac/bundled-gateway.md +0 -73
  256. package/docs/platforms/mac/canvas.md +0 -125
  257. package/docs/platforms/mac/child-process.md +0 -69
  258. package/docs/platforms/mac/dev-setup.md +0 -104
  259. package/docs/platforms/mac/health.md +0 -34
  260. package/docs/platforms/mac/icon.md +0 -31
  261. package/docs/platforms/mac/logging.md +0 -57
  262. package/docs/platforms/mac/menu-bar.md +0 -81
  263. package/docs/platforms/mac/peekaboo.md +0 -65
  264. package/docs/platforms/mac/permissions.md +0 -50
  265. package/docs/platforms/mac/release.md +0 -85
  266. package/docs/platforms/mac/remote.md +0 -84
  267. package/docs/platforms/mac/signing.md +0 -47
  268. package/docs/platforms/mac/skills.md +0 -33
  269. package/docs/platforms/mac/voice-overlay.md +0 -60
  270. package/docs/platforms/mac/voicewake.md +0 -66
  271. package/docs/platforms/mac/webchat.md +0 -43
  272. package/docs/platforms/mac/xpc.md +0 -61
  273. package/docs/platforms/macos.md +0 -204
  274. package/docs/platforms/oracle.md +0 -303
  275. package/docs/platforms/raspberry-pi.md +0 -358
  276. package/docs/platforms/windows.md +0 -159
  277. package/docs/plugins/agent-tools.md +0 -99
  278. package/docs/plugins/community.md +0 -44
  279. package/docs/plugins/manifest.md +0 -71
  280. package/docs/plugins/voice-call.md +0 -322
  281. package/docs/plugins/zalouser.md +0 -81
  282. package/docs/prose.md +0 -134
  283. package/docs/providers/anthropic.md +0 -174
  284. package/docs/providers/bedrock.md +0 -176
  285. package/docs/providers/claude-max-api-proxy.md +0 -148
  286. package/docs/providers/cloudflare-ai-gateway.md +0 -71
  287. package/docs/providers/deepgram.md +0 -93
  288. package/docs/providers/github-copilot.md +0 -72
  289. package/docs/providers/glm.md +0 -33
  290. package/docs/providers/huggingface.md +0 -209
  291. package/docs/providers/index.md +0 -67
  292. package/docs/providers/litellm.md +0 -153
  293. package/docs/providers/minimax.md +0 -208
  294. package/docs/providers/models.md +0 -52
  295. package/docs/providers/moonshot.md +0 -142
  296. package/docs/providers/nvidia.md +0 -55
  297. package/docs/providers/ollama.md +0 -250
  298. package/docs/providers/openai.md +0 -62
  299. package/docs/providers/opencode.md +0 -36
  300. package/docs/providers/openrouter.md +0 -37
  301. package/docs/providers/qianfan.md +0 -38
  302. package/docs/providers/qwen.md +0 -53
  303. package/docs/providers/synthetic.md +0 -99
  304. package/docs/providers/together.md +0 -65
  305. package/docs/providers/venice.md +0 -267
  306. package/docs/providers/vercel-ai-gateway.md +0 -50
  307. package/docs/providers/vllm.md +0 -92
  308. package/docs/providers/xiaomi.md +0 -64
  309. package/docs/providers/zai.md +0 -38
  310. package/docs/refactor/exec-host.md +0 -316
  311. package/docs/refactor/outbound-session-mirroring.md +0 -83
  312. package/docs/refactor/plugin-sdk.md +0 -214
  313. package/docs/refactor/strict-config.md +0 -93
  314. package/docs/refactor/syminet.md +0 -417
  315. package/docs/reference/AGENTS.default.md +0 -123
  316. package/docs/reference/RELEASING.md +0 -120
  317. package/docs/reference/api-usage-costs.md +0 -138
  318. package/docs/reference/credits.md +0 -28
  319. package/docs/reference/device-models.md +0 -47
  320. package/docs/reference/rpc.md +0 -43
  321. package/docs/reference/session-management-compaction.md +0 -284
  322. package/docs/reference/test.md +0 -51
  323. package/docs/reference/token-use.md +0 -136
  324. package/docs/reference/transcript-hygiene.md +0 -151
  325. package/docs/reference/wizard.md +0 -265
  326. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -89
  327. package/docs/security/README.md +0 -16
  328. package/docs/security/THREAT-MODEL-ATLAS.md +0 -600
  329. package/docs/security/formal-verification.md +0 -164
  330. package/docs/start/bootstrapping.md +0 -41
  331. package/docs/start/docs-directory.md +0 -63
  332. package/docs/start/getting-started.md +0 -135
  333. package/docs/start/hubs.md +0 -196
  334. package/docs/start/lore.md +0 -216
  335. package/docs/start/onboarding-overview.md +0 -51
  336. package/docs/start/onboarding.md +0 -81
  337. package/docs/start/quickstart.md +0 -22
  338. package/docs/start/setup.md +0 -160
  339. package/docs/start/showcase.md +0 -414
  340. package/docs/start/symi.md +0 -211
  341. package/docs/start/wizard-cli-automation.md +0 -158
  342. package/docs/start/wizard-cli-reference.md +0 -255
  343. package/docs/start/wizard.md +0 -109
  344. package/docs/style.css +0 -37
  345. package/docs/tools/agent-send.md +0 -52
  346. package/docs/tools/apply-patch.md +0 -51
  347. package/docs/tools/browser-linux-troubleshooting.md +0 -139
  348. package/docs/tools/browser-login.md +0 -67
  349. package/docs/tools/browser.md +0 -587
  350. package/docs/tools/chrome-extension.md +0 -183
  351. package/docs/tools/creating-skills.md +0 -54
  352. package/docs/tools/elevated.md +0 -55
  353. package/docs/tools/exec-approvals.md +0 -261
  354. package/docs/tools/exec.md +0 -184
  355. package/docs/tools/firecrawl.md +0 -61
  356. package/docs/tools/index.md +0 -540
  357. package/docs/tools/llm-task.md +0 -115
  358. package/docs/tools/loop-detection.md +0 -98
  359. package/docs/tools/multi-agent-sandbox-tools.md +0 -396
  360. package/docs/tools/pipeline.md +0 -340
  361. package/docs/tools/plugin.md +0 -687
  362. package/docs/tools/reactions.md +0 -21
  363. package/docs/tools/skills-config.md +0 -76
  364. package/docs/tools/skills.md +0 -300
  365. package/docs/tools/slash-commands.md +0 -202
  366. package/docs/tools/subagents.md +0 -232
  367. package/docs/tools/symihub.md +0 -256
  368. package/docs/tools/thinking.md +0 -75
  369. package/docs/tools/web.md +0 -265
  370. package/docs/tts.md +0 -398
  371. package/docs/vps.md +0 -43
  372. package/docs/web/control-ui.md +0 -247
  373. package/docs/web/dashboard.md +0 -46
  374. package/docs/web/index.md +0 -118
  375. package/docs/web/tui.md +0 -162
  376. package/docs/web/webchat.md +0 -53
  377. package/docs/whatsapp-symi-ai-zh.jpg +0 -0
  378. package/docs/whatsapp-symi.jpg +0 -0
  379. package/docs/zh-CN/AGENTS.md +0 -59
  380. package/docs/zh-CN/automation/auth-monitoring.md +0 -47
  381. package/docs/zh-CN/automation/cron-jobs.md +0 -422
  382. package/docs/zh-CN/automation/cron-vs-heartbeat.md +0 -286
  383. package/docs/zh-CN/automation/gmail-pubsub.md +0 -249
  384. package/docs/zh-CN/automation/hooks.md +0 -881
  385. package/docs/zh-CN/automation/poll.md +0 -68
  386. package/docs/zh-CN/automation/troubleshooting.md +0 -8
  387. package/docs/zh-CN/automation/webhook.md +0 -161
  388. package/docs/zh-CN/brave-search.md +0 -48
  389. package/docs/zh-CN/channels/bluebubbles.md +0 -271
  390. package/docs/zh-CN/channels/broadcast-groups.md +0 -448
  391. package/docs/zh-CN/channels/channel-routing.md +0 -112
  392. package/docs/zh-CN/channels/feishu.md +0 -629
  393. package/docs/zh-CN/channels/googlechat.md +0 -257
  394. package/docs/zh-CN/channels/grammy.md +0 -38
  395. package/docs/zh-CN/channels/group-messages.md +0 -89
  396. package/docs/zh-CN/channels/groups.md +0 -369
  397. package/docs/zh-CN/channels/imessage.md +0 -300
  398. package/docs/zh-CN/channels/index.md +0 -52
  399. package/docs/zh-CN/channels/line.md +0 -180
  400. package/docs/zh-CN/channels/location.md +0 -63
  401. package/docs/zh-CN/channels/matrix.md +0 -221
  402. package/docs/zh-CN/channels/mattermost.md +0 -144
  403. package/docs/zh-CN/channels/msteams.md +0 -773
  404. package/docs/zh-CN/channels/nextcloud-talk.md +0 -142
  405. package/docs/zh-CN/channels/nostr.md +0 -240
  406. package/docs/zh-CN/channels/pairing.md +0 -86
  407. package/docs/zh-CN/channels/signal.md +0 -207
  408. package/docs/zh-CN/channels/slack.md +0 -529
  409. package/docs/zh-CN/channels/telegram.md +0 -748
  410. package/docs/zh-CN/channels/tlon.md +0 -136
  411. package/docs/zh-CN/channels/troubleshooting.md +0 -34
  412. package/docs/zh-CN/channels/twitch.md +0 -385
  413. package/docs/zh-CN/channels/whatsapp.md +0 -411
  414. package/docs/zh-CN/channels/zalo.md +0 -196
  415. package/docs/zh-CN/channels/zalouser.md +0 -147
  416. package/docs/zh-CN/cli/acp.md +0 -173
  417. package/docs/zh-CN/cli/agent.md +0 -30
  418. package/docs/zh-CN/cli/agents.md +0 -82
  419. package/docs/zh-CN/cli/approvals.md +0 -57
  420. package/docs/zh-CN/cli/browser.md +0 -114
  421. package/docs/zh-CN/cli/channels.md +0 -80
  422. package/docs/zh-CN/cli/config.md +0 -57
  423. package/docs/zh-CN/cli/configure.md +0 -37
  424. package/docs/zh-CN/cli/cron.md +0 -43
  425. package/docs/zh-CN/cli/dashboard.md +0 -23
  426. package/docs/zh-CN/cli/devices.md +0 -74
  427. package/docs/zh-CN/cli/directory.md +0 -69
  428. package/docs/zh-CN/cli/dns.md +0 -30
  429. package/docs/zh-CN/cli/docs.md +0 -22
  430. package/docs/zh-CN/cli/doctor.md +0 -48
  431. package/docs/zh-CN/cli/gateway.md +0 -206
  432. package/docs/zh-CN/cli/health.md +0 -28
  433. package/docs/zh-CN/cli/hooks.md +0 -298
  434. package/docs/zh-CN/cli/index.md +0 -1025
  435. package/docs/zh-CN/cli/logs.md +0 -31
  436. package/docs/zh-CN/cli/memory.md +0 -52
  437. package/docs/zh-CN/cli/message.md +0 -205
  438. package/docs/zh-CN/cli/models.md +0 -85
  439. package/docs/zh-CN/cli/node.md +0 -115
  440. package/docs/zh-CN/cli/nodes.md +0 -80
  441. package/docs/zh-CN/cli/onboard.md +0 -36
  442. package/docs/zh-CN/cli/pairing.md +0 -28
  443. package/docs/zh-CN/cli/plugins.md +0 -66
  444. package/docs/zh-CN/cli/reset.md +0 -24
  445. package/docs/zh-CN/cli/sandbox.md +0 -158
  446. package/docs/zh-CN/cli/security.md +0 -33
  447. package/docs/zh-CN/cli/sessions.md +0 -23
  448. package/docs/zh-CN/cli/setup.md +0 -36
  449. package/docs/zh-CN/cli/skills.md +0 -33
  450. package/docs/zh-CN/cli/status.md +0 -32
  451. package/docs/zh-CN/cli/system.md +0 -63
  452. package/docs/zh-CN/cli/tui.md +0 -30
  453. package/docs/zh-CN/cli/uninstall.md +0 -24
  454. package/docs/zh-CN/cli/update.md +0 -101
  455. package/docs/zh-CN/cli/voicecall.md +0 -41
  456. package/docs/zh-CN/cli/webhooks.md +0 -32
  457. package/docs/zh-CN/concepts/agent-loop.md +0 -146
  458. package/docs/zh-CN/concepts/agent-workspace.md +0 -219
  459. package/docs/zh-CN/concepts/agent.md +0 -115
  460. package/docs/zh-CN/concepts/architecture.md +0 -122
  461. package/docs/zh-CN/concepts/compaction.md +0 -67
  462. package/docs/zh-CN/concepts/context.md +0 -168
  463. package/docs/zh-CN/concepts/features.md +0 -57
  464. package/docs/zh-CN/concepts/markdown-formatting.md +0 -115
  465. package/docs/zh-CN/concepts/memory.md +0 -412
  466. package/docs/zh-CN/concepts/messages.md +0 -140
  467. package/docs/zh-CN/concepts/model-failover.md +0 -145
  468. package/docs/zh-CN/concepts/model-providers.md +0 -320
  469. package/docs/zh-CN/concepts/models.md +0 -196
  470. package/docs/zh-CN/concepts/multi-agent.md +0 -371
  471. package/docs/zh-CN/concepts/oauth.md +0 -151
  472. package/docs/zh-CN/concepts/presence.md +0 -99
  473. package/docs/zh-CN/concepts/queue.md +0 -91
  474. package/docs/zh-CN/concepts/retry.md +0 -71
  475. package/docs/zh-CN/concepts/session-pruning.md +0 -129
  476. package/docs/zh-CN/concepts/session-tool.md +0 -198
  477. package/docs/zh-CN/concepts/session.md +0 -158
  478. package/docs/zh-CN/concepts/sessions.md +0 -17
  479. package/docs/zh-CN/concepts/streaming.md +0 -131
  480. package/docs/zh-CN/concepts/system-prompt.md +0 -99
  481. package/docs/zh-CN/concepts/timezone.md +0 -94
  482. package/docs/zh-CN/concepts/typebox.md +0 -284
  483. package/docs/zh-CN/concepts/typing-indicators.md +0 -74
  484. package/docs/zh-CN/concepts/usage-tracking.md +0 -42
  485. package/docs/zh-CN/date-time.md +0 -128
  486. package/docs/zh-CN/debug/node-issue.md +0 -90
  487. package/docs/zh-CN/diagnostics/flags.md +0 -98
  488. package/docs/zh-CN/experiments/onboarding-config-protocol.md +0 -47
  489. package/docs/zh-CN/experiments/plans/cron-add-hardening.md +0 -69
  490. package/docs/zh-CN/experiments/plans/group-policy-hardening.md +0 -45
  491. package/docs/zh-CN/experiments/plans/openresponses-gateway.md +0 -121
  492. package/docs/zh-CN/experiments/proposals/model-config.md +0 -42
  493. package/docs/zh-CN/experiments/research/memory.md +0 -235
  494. package/docs/zh-CN/gateway/authentication.md +0 -142
  495. package/docs/zh-CN/gateway/background-process.md +0 -100
  496. package/docs/zh-CN/gateway/bonjour.md +0 -174
  497. package/docs/zh-CN/gateway/bridge-protocol.md +0 -86
  498. package/docs/zh-CN/gateway/cli-backends.md +0 -213
  499. package/docs/zh-CN/gateway/configuration-examples.md +0 -580
  500. package/docs/zh-CN/gateway/configuration.md +0 -3284
  501. package/docs/zh-CN/gateway/discovery.md +0 -123
  502. package/docs/zh-CN/gateway/doctor.md +0 -238
  503. package/docs/zh-CN/gateway/gateway-lock.md +0 -41
  504. package/docs/zh-CN/gateway/health.md +0 -42
  505. package/docs/zh-CN/gateway/heartbeat.md +0 -272
  506. package/docs/zh-CN/gateway/index.md +0 -335
  507. package/docs/zh-CN/gateway/local-models.md +0 -157
  508. package/docs/zh-CN/gateway/logging.md +0 -114
  509. package/docs/zh-CN/gateway/multiple-gateways.md +0 -119
  510. package/docs/zh-CN/gateway/network-model.md +0 -23
  511. package/docs/zh-CN/gateway/openai-http-api.md +0 -125
  512. package/docs/zh-CN/gateway/openresponses-http-api.md +0 -317
  513. package/docs/zh-CN/gateway/pairing.md +0 -99
  514. package/docs/zh-CN/gateway/protocol.md +0 -220
  515. package/docs/zh-CN/gateway/remote-gateway-readme.md +0 -164
  516. package/docs/zh-CN/gateway/remote.md +0 -133
  517. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -135
  518. package/docs/zh-CN/gateway/sandboxing.md +0 -188
  519. package/docs/zh-CN/gateway/security/index.md +0 -772
  520. package/docs/zh-CN/gateway/tailscale.md +0 -124
  521. package/docs/zh-CN/gateway/tools-invoke-http-api.md +0 -92
  522. package/docs/zh-CN/gateway/troubleshooting.md +0 -758
  523. package/docs/zh-CN/help/debugging.md +0 -160
  524. package/docs/zh-CN/help/environment.md +0 -88
  525. package/docs/zh-CN/help/faq.md +0 -2613
  526. package/docs/zh-CN/help/index.md +0 -28
  527. package/docs/zh-CN/help/scripts.md +0 -35
  528. package/docs/zh-CN/help/testing.md +0 -375
  529. package/docs/zh-CN/help/troubleshooting.md +0 -104
  530. package/docs/zh-CN/index.md +0 -183
  531. package/docs/zh-CN/install/ansible.md +0 -214
  532. package/docs/zh-CN/install/bun.md +0 -65
  533. package/docs/zh-CN/install/development-channels.md +0 -81
  534. package/docs/zh-CN/install/docker.md +0 -525
  535. package/docs/zh-CN/install/exe-dev.md +0 -127
  536. package/docs/zh-CN/install/fly.md +0 -476
  537. package/docs/zh-CN/install/gcp.md +0 -509
  538. package/docs/zh-CN/install/hetzner.md +0 -336
  539. package/docs/zh-CN/install/index.md +0 -193
  540. package/docs/zh-CN/install/installer.md +0 -128
  541. package/docs/zh-CN/install/macos-vm.md +0 -288
  542. package/docs/zh-CN/install/migrating.md +0 -199
  543. package/docs/zh-CN/install/nix.md +0 -99
  544. package/docs/zh-CN/install/node.md +0 -8
  545. package/docs/zh-CN/install/northflank.mdx +0 -56
  546. package/docs/zh-CN/install/railway.mdx +0 -102
  547. package/docs/zh-CN/install/render.mdx +0 -168
  548. package/docs/zh-CN/install/uninstall.md +0 -135
  549. package/docs/zh-CN/install/updating.md +0 -233
  550. package/docs/zh-CN/logging.md +0 -329
  551. package/docs/zh-CN/network.md +0 -59
  552. package/docs/zh-CN/nodes/audio.md +0 -120
  553. package/docs/zh-CN/nodes/camera.md +0 -162
  554. package/docs/zh-CN/nodes/images.md +0 -79
  555. package/docs/zh-CN/nodes/index.md +0 -348
  556. package/docs/zh-CN/nodes/location-command.md +0 -120
  557. package/docs/zh-CN/nodes/media-understanding.md +0 -380
  558. package/docs/zh-CN/nodes/talk.md +0 -97
  559. package/docs/zh-CN/nodes/troubleshooting.md +0 -8
  560. package/docs/zh-CN/nodes/voicewake.md +0 -72
  561. package/docs/zh-CN/perplexity.md +0 -84
  562. package/docs/zh-CN/pi-dev.md +0 -77
  563. package/docs/zh-CN/pi.md +0 -617
  564. package/docs/zh-CN/platforms/android.md +0 -155
  565. package/docs/zh-CN/platforms/digitalocean.md +0 -268
  566. package/docs/zh-CN/platforms/index.md +0 -60
  567. package/docs/zh-CN/platforms/ios.md +0 -114
  568. package/docs/zh-CN/platforms/linux.md +0 -101
  569. package/docs/zh-CN/platforms/mac/bundled-gateway.md +0 -75
  570. package/docs/zh-CN/platforms/mac/canvas.md +0 -128
  571. package/docs/zh-CN/platforms/mac/child-process.md +0 -73
  572. package/docs/zh-CN/platforms/mac/dev-setup.md +0 -109
  573. package/docs/zh-CN/platforms/mac/health.md +0 -41
  574. package/docs/zh-CN/platforms/mac/icon.md +0 -38
  575. package/docs/zh-CN/platforms/mac/logging.md +0 -64
  576. package/docs/zh-CN/platforms/mac/menu-bar.md +0 -88
  577. package/docs/zh-CN/platforms/mac/peekaboo.md +0 -62
  578. package/docs/zh-CN/platforms/mac/permissions.md +0 -46
  579. package/docs/zh-CN/platforms/mac/release.md +0 -92
  580. package/docs/zh-CN/platforms/mac/remote.md +0 -90
  581. package/docs/zh-CN/platforms/mac/signing.md +0 -54
  582. package/docs/zh-CN/platforms/mac/skills.md +0 -40
  583. package/docs/zh-CN/platforms/mac/voice-overlay.md +0 -67
  584. package/docs/zh-CN/platforms/mac/voicewake.md +0 -73
  585. package/docs/zh-CN/platforms/mac/webchat.md +0 -43
  586. package/docs/zh-CN/platforms/mac/xpc.md +0 -68
  587. package/docs/zh-CN/platforms/macos.md +0 -193
  588. package/docs/zh-CN/platforms/oracle.md +0 -310
  589. package/docs/zh-CN/platforms/raspberry-pi.md +0 -365
  590. package/docs/zh-CN/platforms/windows.md +0 -156
  591. package/docs/zh-CN/plugins/agent-tools.md +0 -99
  592. package/docs/zh-CN/plugins/manifest.md +0 -68
  593. package/docs/zh-CN/plugins/voice-call.md +0 -250
  594. package/docs/zh-CN/plugins/zalouser.md +0 -88
  595. package/docs/zh-CN/prose.md +0 -141
  596. package/docs/zh-CN/providers/anthropic.md +0 -159
  597. package/docs/zh-CN/providers/bedrock.md +0 -170
  598. package/docs/zh-CN/providers/claude-max-api-proxy.md +0 -155
  599. package/docs/zh-CN/providers/deepgram.md +0 -97
  600. package/docs/zh-CN/providers/github-copilot.md +0 -67
  601. package/docs/zh-CN/providers/glm.md +0 -39
  602. package/docs/zh-CN/providers/index.md +0 -66
  603. package/docs/zh-CN/providers/minimax.md +0 -206
  604. package/docs/zh-CN/providers/models.md +0 -55
  605. package/docs/zh-CN/providers/moonshot.md +0 -145
  606. package/docs/zh-CN/providers/ollama.md +0 -230
  607. package/docs/zh-CN/providers/openai.md +0 -68
  608. package/docs/zh-CN/providers/opencode.md +0 -41
  609. package/docs/zh-CN/providers/openrouter.md +0 -43
  610. package/docs/zh-CN/providers/qianfan.md +0 -8
  611. package/docs/zh-CN/providers/qwen.md +0 -55
  612. package/docs/zh-CN/providers/synthetic.md +0 -102
  613. package/docs/zh-CN/providers/venice.md +0 -274
  614. package/docs/zh-CN/providers/vercel-ai-gateway.md +0 -57
  615. package/docs/zh-CN/providers/xiaomi.md +0 -68
  616. package/docs/zh-CN/providers/zai.md +0 -41
  617. package/docs/zh-CN/refactor/exec-host.md +0 -323
  618. package/docs/zh-CN/refactor/outbound-session-mirroring.md +0 -90
  619. package/docs/zh-CN/refactor/plugin-sdk.md +0 -221
  620. package/docs/zh-CN/refactor/strict-config.md +0 -100
  621. package/docs/zh-CN/refactor/syminet.md +0 -424
  622. package/docs/zh-CN/reference/AGENTS.default.md +0 -130
  623. package/docs/zh-CN/reference/RELEASING.md +0 -122
  624. package/docs/zh-CN/reference/api-usage-costs.md +0 -136
  625. package/docs/zh-CN/reference/credits.md +0 -34
  626. package/docs/zh-CN/reference/device-models.md +0 -54
  627. package/docs/zh-CN/reference/rpc.md +0 -48
  628. package/docs/zh-CN/reference/session-management-compaction.md +0 -286
  629. package/docs/zh-CN/reference/templates/AGENTS.dev.md +0 -89
  630. package/docs/zh-CN/reference/templates/AGENTS.md +0 -234
  631. package/docs/zh-CN/reference/templates/BOOT.md +0 -17
  632. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +0 -68
  633. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +0 -54
  634. package/docs/zh-CN/reference/templates/IDENTITY.md +0 -36
  635. package/docs/zh-CN/reference/templates/SYMICORE.dev.md +0 -83
  636. package/docs/zh-CN/reference/templates/SYMICORE.md +0 -49
  637. package/docs/zh-CN/reference/templates/SYMIPULSE.md +0 -69
  638. package/docs/zh-CN/reference/templates/TOOLS.dev.md +0 -31
  639. package/docs/zh-CN/reference/templates/TOOLS.md +0 -53
  640. package/docs/zh-CN/reference/templates/USER.dev.md +0 -25
  641. package/docs/zh-CN/reference/templates/USER.md +0 -30
  642. package/docs/zh-CN/reference/test.md +0 -57
  643. package/docs/zh-CN/reference/token-use.md +0 -119
  644. package/docs/zh-CN/reference/transcript-hygiene.md +0 -109
  645. package/docs/zh-CN/reference/wizard.md +0 -9
  646. package/docs/zh-CN/security/formal-verification.md +0 -171
  647. package/docs/zh-CN/start/bootstrapping.md +0 -9
  648. package/docs/zh-CN/start/docs-directory.md +0 -69
  649. package/docs/zh-CN/start/getting-started.md +0 -201
  650. package/docs/zh-CN/start/hubs.md +0 -199
  651. package/docs/zh-CN/start/lore.md +0 -223
  652. package/docs/zh-CN/start/onboarding.md +0 -105
  653. package/docs/zh-CN/start/quickstart.md +0 -88
  654. package/docs/zh-CN/start/setup.md +0 -151
  655. package/docs/zh-CN/start/showcase.md +0 -421
  656. package/docs/zh-CN/start/symi.md +0 -244
  657. package/docs/zh-CN/start/wizard.md +0 -326
  658. package/docs/zh-CN/tools/agent-send.md +0 -58
  659. package/docs/zh-CN/tools/apply-patch.md +0 -57
  660. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +0 -144
  661. package/docs/zh-CN/tools/browser-login.md +0 -75
  662. package/docs/zh-CN/tools/browser.md +0 -553
  663. package/docs/zh-CN/tools/chrome-extension.md +0 -183
  664. package/docs/zh-CN/tools/creating-skills.md +0 -61
  665. package/docs/zh-CN/tools/elevated.md +0 -62
  666. package/docs/zh-CN/tools/exec-approvals.md +0 -233
  667. package/docs/zh-CN/tools/exec.md +0 -169
  668. package/docs/zh-CN/tools/firecrawl.md +0 -68
  669. package/docs/zh-CN/tools/index.md +0 -508
  670. package/docs/zh-CN/tools/llm-task.md +0 -117
  671. package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +0 -400
  672. package/docs/zh-CN/tools/pipeline.md +0 -349
  673. package/docs/zh-CN/tools/plugin.md +0 -639
  674. package/docs/zh-CN/tools/reactions.md +0 -28
  675. package/docs/zh-CN/tools/skills-config.md +0 -78
  676. package/docs/zh-CN/tools/skills.md +0 -279
  677. package/docs/zh-CN/tools/slash-commands.md +0 -196
  678. package/docs/zh-CN/tools/subagents.md +0 -167
  679. package/docs/zh-CN/tools/symihub.md +0 -209
  680. package/docs/zh-CN/tools/thinking.md +0 -80
  681. package/docs/zh-CN/tools/web.md +0 -257
  682. package/docs/zh-CN/tts.md +0 -373
  683. package/docs/zh-CN/vps.md +0 -47
  684. package/docs/zh-CN/web/control-ui.md +0 -190
  685. package/docs/zh-CN/web/dashboard.md +0 -53
  686. package/docs/zh-CN/web/index.md +0 -118
  687. package/docs/zh-CN/web/tui.md +0 -166
  688. package/docs/zh-CN/web/webchat.md +0 -56
@@ -1,769 +0,0 @@
1
- ---
2
- summary: "Microsoft Teams bot support status, capabilities, and configuration"
3
- read_when:
4
- - Working on MS Teams channel features
5
- title: "Microsoft Teams"
6
- ---
7
-
8
- # Microsoft Teams (plugin)
9
-
10
- > "Abandon all hope, ye who enter here."
11
-
12
- Updated: 2026-01-21
13
-
14
- Status: text + DM attachments are supported; channel/group file sending requires `sharePointSiteId` + Graph permissions (see [Sending files in group chats](#sending-files-in-group-chats)). Polls are sent via Adaptive Cards.
15
-
16
- ## Plugin required
17
-
18
- Microsoft Teams ships as a plugin and is not bundled with the core install.
19
-
20
- **Breaking change (2026.1.15):** MS Teams moved out of core. If you use it, you must install the plugin.
21
-
22
- Explainable: keeps core installs lighter and lets MS Teams dependencies update independently.
23
-
24
- Install via CLI (npm registry):
25
-
26
- ```bash
27
- symi plugins install @symi/msteams
28
- ```
29
-
30
- Local checkout (when running from a git repo):
31
-
32
- ```bash
33
- symi plugins install ./extensions/msteams
34
- ```
35
-
36
- If you choose Teams during configure/onboarding and a git checkout is detected,
37
- Symi will offer the local install path automatically.
38
-
39
- Details: [Plugins](/tools/plugin)
40
-
41
- ## Onboarding
42
-
43
- 1. Install the Microsoft Teams plugin.
44
- 2. Create an **Azure Bot** (App ID + client secret + tenant ID).
45
- 3. Configure Symi with those credentials.
46
- 4. Expose `/api/messages` (port 3978 by default) via a public URL or tunnel.
47
- 5. Install the Teams app package and start the gateway.
48
-
49
- Minimal config:
50
-
51
- ```json5
52
- {
53
- channels: {
54
- msteams: {
55
- enabled: true,
56
- appId: "<APP_ID>",
57
- appPassword: "<APP_PASSWORD>",
58
- tenantId: "<TENANT_ID>",
59
- webhook: { port: 3978, path: "/api/messages" },
60
- },
61
- },
62
- }
63
- ```
64
-
65
- Note: group chats are blocked by default (`channels.msteams.groupPolicy: "allowlist"`). To allow group replies, set `channels.msteams.groupAllowFrom` (or use `groupPolicy: "open"` to allow any member, mention-gated).
66
-
67
- ## Goals
68
-
69
- - Talk to Symi via Teams DMs, group chats, or channels.
70
- - Keep routing deterministic: replies always go back to the channel they arrived on.
71
- - Default to safe channel behavior (mentions required unless configured otherwise).
72
-
73
- ## Config writes
74
-
75
- By default, Microsoft Teams is allowed to write config updates triggered by `/config set|unset` (requires `commands.config: true`).
76
-
77
- Disable with:
78
-
79
- ```json5
80
- {
81
- channels: { msteams: { configWrites: false } },
82
- }
83
- ```
84
-
85
- ## Access control (DMs + groups)
86
-
87
- **DM access**
88
-
89
- - Default: `channels.msteams.dmPolicy = "pairing"`. Unknown senders are ignored until approved.
90
- - `channels.msteams.allowFrom` accepts AAD object IDs, UPNs, or display names. The wizard resolves names to IDs via Microsoft Graph when credentials allow.
91
-
92
- **Group access**
93
-
94
- - Default: `channels.msteams.groupPolicy = "allowlist"` (blocked unless you add `groupAllowFrom`). Use `channels.defaults.groupPolicy` to override the default when unset.
95
- - `channels.msteams.groupAllowFrom` controls which senders can trigger in group chats/channels (falls back to `channels.msteams.allowFrom`).
96
- - Set `groupPolicy: "open"` to allow any member (still mention‑gated by default).
97
- - To allow **no channels**, set `channels.msteams.groupPolicy: "disabled"`.
98
-
99
- Example:
100
-
101
- ```json5
102
- {
103
- channels: {
104
- msteams: {
105
- groupPolicy: "allowlist",
106
- groupAllowFrom: ["user@org.com"],
107
- },
108
- },
109
- }
110
- ```
111
-
112
- **Teams + channel allowlist**
113
-
114
- - Scope group/channel replies by listing teams and channels under `channels.msteams.teams`.
115
- - Keys can be team IDs or names; channel keys can be conversation IDs or names.
116
- - When `groupPolicy="allowlist"` and a teams allowlist is present, only listed teams/channels are accepted (mention‑gated).
117
- - The configure wizard accepts `Team/Channel` entries and stores them for you.
118
- - On startup, Symi resolves team/channel and user allowlist names to IDs (when Graph permissions allow)
119
- and logs the mapping; unresolved entries are kept as typed.
120
-
121
- Example:
122
-
123
- ```json5
124
- {
125
- channels: {
126
- msteams: {
127
- groupPolicy: "allowlist",
128
- teams: {
129
- "My Team": {
130
- channels: {
131
- General: { requireMention: true },
132
- },
133
- },
134
- },
135
- },
136
- },
137
- }
138
- ```
139
-
140
- ## How it works
141
-
142
- 1. Install the Microsoft Teams plugin.
143
- 2. Create an **Azure Bot** (App ID + secret + tenant ID).
144
- 3. Build a **Teams app package** that references the bot and includes the RSC permissions below.
145
- 4. Upload/install the Teams app into a team (or personal scope for DMs).
146
- 5. Configure `msteams` in `~/.symi/symi.json` (or env vars) and start the gateway.
147
- 6. The gateway listens for Bot Framework webhook traffic on `/api/messages` by default.
148
-
149
- ## Azure Bot Setup (Prerequisites)
150
-
151
- Before configuring Symi, you need to create an Azure Bot resource.
152
-
153
- ### Step 1: Create Azure Bot
154
-
155
- 1. Go to [Create Azure Bot](https://portal.azure.com/#create/Microsoft.AzureBot)
156
- 2. Fill in the **Basics** tab:
157
-
158
- | Field | Value |
159
- | ------------------ | ---------------------------------------------------- |
160
- | **Bot handle** | Your bot name, e.g., `symi-msteams` (must be unique) |
161
- | **Subscription** | Select your Azure subscription |
162
- | **Resource group** | Create new or use existing |
163
- | **Pricing tier** | **Free** for dev/testing |
164
- | **Type of App** | **Single Tenant** (recommended - see note below) |
165
- | **Creation type** | **Create new Microsoft App ID** |
166
-
167
- > **Deprecation notice:** Creation of new multi-tenant bots was deprecated after 2025-07-31. Use **Single Tenant** for new bots.
168
-
169
- 3. Click **Review + create** → **Create** (wait ~1-2 minutes)
170
-
171
- ### Step 2: Get Credentials
172
-
173
- 1. Go to your Azure Bot resource → **Configuration**
174
- 2. Copy **Microsoft App ID** → this is your `appId`
175
- 3. Click **Manage Password** → go to the App Registration
176
- 4. Under **Certificates & secrets** → **New client secret** → copy the **Value** → this is your `appPassword`
177
- 5. Go to **Overview** → copy **Directory (tenant) ID** → this is your `tenantId`
178
-
179
- ### Step 3: Configure Messaging Endpoint
180
-
181
- 1. In Azure Bot → **Configuration**
182
- 2. Set **Messaging endpoint** to your webhook URL:
183
- - Production: `https://your-domain.com/api/messages`
184
- - Local dev: Use a tunnel (see [Local Development](#local-development-tunneling) below)
185
-
186
- ### Step 4: Enable Teams Channel
187
-
188
- 1. In Azure Bot → **Channels**
189
- 2. Click **Microsoft Teams** → Configure → Save
190
- 3. Accept the Terms of Service
191
-
192
- ## Local Development (Tunneling)
193
-
194
- Teams can't reach `localhost`. Use a tunnel for local development:
195
-
196
- **Option A: ngrok**
197
-
198
- ```bash
199
- ngrok http 3978
200
- # Copy the https URL, e.g., https://abc123.ngrok.io
201
- # Set messaging endpoint to: https://abc123.ngrok.io/api/messages
202
- ```
203
-
204
- **Option B: Tailscale Funnel**
205
-
206
- ```bash
207
- tailscale funnel 3978
208
- # Use your Tailscale funnel URL as the messaging endpoint
209
- ```
210
-
211
- ## Teams Developer Portal (Alternative)
212
-
213
- Instead of manually creating a manifest ZIP, you can use the [Teams Developer Portal](https://dev.teams.microsoft.com/apps):
214
-
215
- 1. Click **+ New app**
216
- 2. Fill in basic info (name, description, developer info)
217
- 3. Go to **App features** → **Bot**
218
- 4. Select **Enter a bot ID manually** and paste your Azure Bot App ID
219
- 5. Check scopes: **Personal**, **Team**, **Group Chat**
220
- 6. Click **Distribute** → **Download app package**
221
- 7. In Teams: **Apps** → **Manage your apps** → **Upload a custom app** → select the ZIP
222
-
223
- This is often easier than hand-editing JSON manifests.
224
-
225
- ## Testing the Bot
226
-
227
- **Option A: Azure Web Chat (verify webhook first)**
228
-
229
- 1. In Azure Portal → your Azure Bot resource → **Test in Web Chat**
230
- 2. Send a message - you should see a response
231
- 3. This confirms your webhook endpoint works before Teams setup
232
-
233
- **Option B: Teams (after app installation)**
234
-
235
- 1. Install the Teams app (sideload or org catalog)
236
- 2. Find the bot in Teams and send a DM
237
- 3. Check gateway logs for incoming activity
238
-
239
- ## Onboarding (minimal)
240
-
241
- 1. **Install the Microsoft Teams plugin**
242
- - From npm: `symi plugins install @symi/msteams`
243
- - From a local checkout: `symi plugins install ./extensions/msteams`
244
-
245
- 2. **Bot registration**
246
- - Create an Azure Bot (see above) and note:
247
- - App ID
248
- - Client secret (App password)
249
- - Tenant ID (single-tenant)
250
-
251
- 3. **Teams app manifest**
252
- - Include a `bot` entry with `botId = <App ID>`.
253
- - Scopes: `personal`, `team`, `groupChat`.
254
- - `supportsFiles: true` (required for personal scope file handling).
255
- - Add RSC permissions (below).
256
- - Create icons: `outline.png` (32x32) and `color.png` (192x192).
257
- - Zip all three files together: `manifest.json`, `outline.png`, `color.png`.
258
-
259
- 4. **Configure Symi**
260
-
261
- ```json
262
- {
263
- "msteams": {
264
- "enabled": true,
265
- "appId": "<APP_ID>",
266
- "appPassword": "<APP_PASSWORD>",
267
- "tenantId": "<TENANT_ID>",
268
- "webhook": { "port": 3978, "path": "/api/messages" }
269
- }
270
- }
271
- ```
272
-
273
- You can also use environment variables instead of config keys:
274
- - `MSTEAMS_APP_ID`
275
- - `MSTEAMS_APP_PASSWORD`
276
- - `MSTEAMS_TENANT_ID`
277
-
278
- 5. **Bot endpoint**
279
- - Set the Azure Bot Messaging Endpoint to:
280
- - `https://<host>:3978/api/messages` (or your chosen path/port).
281
-
282
- 6. **Run the gateway**
283
- - The Teams channel starts automatically when the plugin is installed and `msteams` config exists with credentials.
284
-
285
- ## History context
286
-
287
- - `channels.msteams.historyLimit` controls how many recent channel/group messages are wrapped into the prompt.
288
- - Falls back to `messages.groupChat.historyLimit`. Set `0` to disable (default 50).
289
- - DM history can be limited with `channels.msteams.dmHistoryLimit` (user turns). Per-user overrides: `channels.msteams.dms["<user_id>"].historyLimit`.
290
-
291
- ## Current Teams RSC Permissions (Manifest)
292
-
293
- These are the **existing resourceSpecific permissions** in our Teams app manifest. They only apply inside the team/chat where the app is installed.
294
-
295
- **For channels (team scope):**
296
-
297
- - `ChannelMessage.Read.Group` (Application) - receive all channel messages without @mention
298
- - `ChannelMessage.Send.Group` (Application)
299
- - `Member.Read.Group` (Application)
300
- - `Owner.Read.Group` (Application)
301
- - `ChannelSettings.Read.Group` (Application)
302
- - `TeamMember.Read.Group` (Application)
303
- - `TeamSettings.Read.Group` (Application)
304
-
305
- **For group chats:**
306
-
307
- - `ChatMessage.Read.Chat` (Application) - receive all group chat messages without @mention
308
-
309
- ## Example Teams Manifest (redacted)
310
-
311
- Minimal, valid example with the required fields. Replace IDs and URLs.
312
-
313
- ```json
314
- {
315
- "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.23/MicrosoftTeams.schema.json",
316
- "manifestVersion": "1.23",
317
- "version": "1.0.0",
318
- "id": "00000000-0000-0000-0000-000000000000",
319
- "name": { "short": "Symi" },
320
- "developer": {
321
- "name": "Your Org",
322
- "websiteUrl": "https://example.com",
323
- "privacyUrl": "https://example.com/privacy",
324
- "termsOfUseUrl": "https://example.com/terms"
325
- },
326
- "description": { "short": "Symi in Teams", "full": "Symi in Teams" },
327
- "icons": { "outline": "outline.png", "color": "color.png" },
328
- "accentColor": "#5B6DEF",
329
- "bots": [
330
- {
331
- "botId": "11111111-1111-1111-1111-111111111111",
332
- "scopes": ["personal", "team", "groupChat"],
333
- "isNotificationOnly": false,
334
- "supportsCalling": false,
335
- "supportsVideo": false,
336
- "supportsFiles": true
337
- }
338
- ],
339
- "webApplicationInfo": {
340
- "id": "11111111-1111-1111-1111-111111111111"
341
- },
342
- "authorization": {
343
- "permissions": {
344
- "resourceSpecific": [
345
- { "name": "ChannelMessage.Read.Group", "type": "Application" },
346
- { "name": "ChannelMessage.Send.Group", "type": "Application" },
347
- { "name": "Member.Read.Group", "type": "Application" },
348
- { "name": "Owner.Read.Group", "type": "Application" },
349
- { "name": "ChannelSettings.Read.Group", "type": "Application" },
350
- { "name": "TeamMember.Read.Group", "type": "Application" },
351
- { "name": "TeamSettings.Read.Group", "type": "Application" },
352
- { "name": "ChatMessage.Read.Chat", "type": "Application" }
353
- ]
354
- }
355
- }
356
- }
357
- ```
358
-
359
- ### Manifest caveats (must-have fields)
360
-
361
- - `bots[].botId` **must** match the Azure Bot App ID.
362
- - `webApplicationInfo.id` **must** match the Azure Bot App ID.
363
- - `bots[].scopes` must include the surfaces you plan to use (`personal`, `team`, `groupChat`).
364
- - `bots[].supportsFiles: true` is required for file handling in personal scope.
365
- - `authorization.permissions.resourceSpecific` must include channel read/send if you want channel traffic.
366
-
367
- ### Updating an existing app
368
-
369
- To update an already-installed Teams app (e.g., to add RSC permissions):
370
-
371
- 1. Update your `manifest.json` with the new settings
372
- 2. **Increment the `version` field** (e.g., `1.0.0` → `1.1.0`)
373
- 3. **Re-zip** the manifest with icons (`manifest.json`, `outline.png`, `color.png`)
374
- 4. Upload the new zip:
375
- - **Option A (Teams Admin Center):** Teams Admin Center → Teams apps → Manage apps → find your app → Upload new version
376
- - **Option B (Sideload):** In Teams → Apps → Manage your apps → Upload a custom app
377
- 5. **For team channels:** Reinstall the app in each team for new permissions to take effect
378
- 6. **Fully quit and relaunch Teams** (not just close the window) to clear cached app metadata
379
-
380
- ## Capabilities: RSC only vs Graph
381
-
382
- ### With **Teams RSC only** (app installed, no Graph API permissions)
383
-
384
- Works:
385
-
386
- - Read channel message **text** content.
387
- - Send channel message **text** content.
388
- - Receive **personal (DM)** file attachments.
389
-
390
- Does NOT work:
391
-
392
- - Channel/group **image or file contents** (payload only includes HTML stub).
393
- - Downloading attachments stored in SharePoint/OneDrive.
394
- - Reading message history (beyond the live webhook event).
395
-
396
- ### With **Teams RSC + Microsoft Graph Application permissions**
397
-
398
- Adds:
399
-
400
- - Downloading hosted contents (images pasted into messages).
401
- - Downloading file attachments stored in SharePoint/OneDrive.
402
- - Reading channel/chat message history via Graph.
403
-
404
- ### RSC vs Graph API
405
-
406
- | Capability | RSC Permissions | Graph API |
407
- | ----------------------- | -------------------- | ----------------------------------- |
408
- | **Real-time messages** | Yes (via webhook) | No (polling only) |
409
- | **Historical messages** | No | Yes (can query history) |
410
- | **Setup complexity** | App manifest only | Requires admin consent + token flow |
411
- | **Works offline** | No (must be running) | Yes (query anytime) |
412
-
413
- **Bottom line:** RSC is for real-time listening; Graph API is for historical access. For catching up on missed messages while offline, you need Graph API with `ChannelMessage.Read.All` (requires admin consent).
414
-
415
- ## Graph-enabled media + history (required for channels)
416
-
417
- If you need images/files in **channels** or want to fetch **message history**, you must enable Microsoft Graph permissions and grant admin consent.
418
-
419
- 1. In Entra ID (Azure AD) **App Registration**, add Microsoft Graph **Application permissions**:
420
- - `ChannelMessage.Read.All` (channel attachments + history)
421
- - `Chat.Read.All` or `ChatMessage.Read.All` (group chats)
422
- 2. **Grant admin consent** for the tenant.
423
- 3. Bump the Teams app **manifest version**, re-upload, and **reinstall the app in Teams**.
424
- 4. **Fully quit and relaunch Teams** to clear cached app metadata.
425
-
426
- **Additional permission for user mentions:** User @mentions work out of the box for users in the conversation. However, if you want to dynamically search and mention users who are **not in the current conversation**, add `User.Read.All` (Application) permission and grant admin consent.
427
-
428
- ## Known Limitations
429
-
430
- ### Webhook timeouts
431
-
432
- Teams delivers messages via HTTP webhook. If processing takes too long (e.g., slow LLM responses), you may see:
433
-
434
- - Gateway timeouts
435
- - Teams retrying the message (causing duplicates)
436
- - Dropped replies
437
-
438
- Symi handles this by returning quickly and sending replies proactively, but very slow responses may still cause issues.
439
-
440
- ### Formatting
441
-
442
- - Basic formatting works: **bold**, _italic_, `code`, links
443
- - Complex markdown (tables, nested lists) may not render correctly
444
- - Adaptive Cards are supported for polls and arbitrary card sends (see below)
445
-
446
- ## Configuration
447
-
448
- Key settings (see `/gateway/configuration` for shared channel patterns):
449
-
450
- - `channels.msteams.enabled`: enable/disable the channel.
451
- - `channels.msteams.appId`, `channels.msteams.appPassword`, `channels.msteams.tenantId`: bot credentials.
452
- - `channels.msteams.webhook.port` (default `3978`)
453
- - `channels.msteams.webhook.path` (default `/api/messages`)
454
- - `channels.msteams.dmPolicy`: `pairing | allowlist | open | disabled` (default: pairing)
455
- - `channels.msteams.allowFrom`: allowlist for DMs (AAD object IDs, UPNs, or display names). The wizard resolves names to IDs during setup when Graph access is available.
456
- - `channels.msteams.textChunkLimit`: outbound text chunk size.
457
- - `channels.msteams.chunkMode`: `length` (default) or `newline` to split on blank lines (paragraph boundaries) before length chunking.
458
- - `channels.msteams.mediaAllowHosts`: allowlist for inbound attachment hosts (defaults to Microsoft/Teams domains).
459
- - `channels.msteams.mediaAuthAllowHosts`: allowlist for attaching Authorization headers on media retries (defaults to Graph + Bot Framework hosts).
460
- - `channels.msteams.requireMention`: require @mention in channels/groups (default true).
461
- - `channels.msteams.replyStyle`: `thread | top-level` (see [Reply Style](#reply-style-threads-vs-posts)).
462
- - `channels.msteams.teams.<teamId>.replyStyle`: per-team override.
463
- - `channels.msteams.teams.<teamId>.requireMention`: per-team override.
464
- - `channels.msteams.teams.<teamId>.tools`: default per-team tool policy overrides (`allow`/`deny`/`alsoAllow`) used when a channel override is missing.
465
- - `channels.msteams.teams.<teamId>.toolsBySender`: default per-team per-sender tool policy overrides (`"*"` wildcard supported).
466
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle`: per-channel override.
467
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention`: per-channel override.
468
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.tools`: per-channel tool policy overrides (`allow`/`deny`/`alsoAllow`).
469
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender`: per-channel per-sender tool policy overrides (`"*"` wildcard supported).
470
- - `channels.msteams.sharePointSiteId`: SharePoint site ID for file uploads in group chats/channels (see [Sending files in group chats](#sending-files-in-group-chats)).
471
-
472
- ## Routing & Sessions
473
-
474
- - Session keys follow the standard agent format (see [/concepts/session](/concepts/session)):
475
- - Direct messages share the main session (`agent:<agentId>:<mainKey>`).
476
- - Channel/group messages use conversation id:
477
- - `agent:<agentId>:msteams:channel:<conversationId>`
478
- - `agent:<agentId>:msteams:group:<conversationId>`
479
-
480
- ## Reply Style: Threads vs Posts
481
-
482
- Teams recently introduced two channel UI styles over the same underlying data model:
483
-
484
- | Style | Description | Recommended `replyStyle` |
485
- | ------------------------ | --------------------------------------------------------- | ------------------------ |
486
- | **Posts** (classic) | Messages appear as cards with threaded replies underneath | `thread` (default) |
487
- | **Threads** (Slack-like) | Messages flow linearly, more like Slack | `top-level` |
488
-
489
- **The problem:** The Teams API does not expose which UI style a channel uses. If you use the wrong `replyStyle`:
490
-
491
- - `thread` in a Threads-style channel → replies appear nested awkwardly
492
- - `top-level` in a Posts-style channel → replies appear as separate top-level posts instead of in-thread
493
-
494
- **Solution:** Configure `replyStyle` per-channel based on how the channel is set up:
495
-
496
- ```json
497
- {
498
- "msteams": {
499
- "replyStyle": "thread",
500
- "teams": {
501
- "19:abc...@thread.tacv2": {
502
- "channels": {
503
- "19:xyz...@thread.tacv2": {
504
- "replyStyle": "top-level"
505
- }
506
- }
507
- }
508
- }
509
- }
510
- }
511
- ```
512
-
513
- ## Attachments & Images
514
-
515
- **Current limitations:**
516
-
517
- - **DMs:** Images and file attachments work via Teams bot file APIs.
518
- - **Channels/groups:** Attachments live in M365 storage (SharePoint/OneDrive). The webhook payload only includes an HTML stub, not the actual file bytes. **Graph API permissions are required** to download channel attachments.
519
-
520
- Without Graph permissions, channel messages with images will be received as text-only (the image content is not accessible to the bot).
521
- By default, Symi only downloads media from Microsoft/Teams hostnames. Override with `channels.msteams.mediaAllowHosts` (use `["*"]` to allow any host).
522
- Authorization headers are only attached for hosts in `channels.msteams.mediaAuthAllowHosts` (defaults to Graph + Bot Framework hosts). Keep this list strict (avoid multi-tenant suffixes).
523
-
524
- ## Sending files in group chats
525
-
526
- Bots can send files in DMs using the FileConsentCard flow (built-in). However, **sending files in group chats/channels** requires additional setup:
527
-
528
- | Context | How files are sent | Setup needed |
529
- | ------------------------ | -------------------------------------------- | ----------------------------------------------- |
530
- | **DMs** | FileConsentCard → user accepts → bot uploads | Works out of the box |
531
- | **Group chats/channels** | Upload to SharePoint → share link | Requires `sharePointSiteId` + Graph permissions |
532
- | **Images (any context)** | Base64-encoded inline | Works out of the box |
533
-
534
- ### Why group chats need SharePoint
535
-
536
- Bots don't have a personal OneDrive drive (the `/me/drive` Graph API endpoint doesn't work for application identities). To send files in group chats/channels, the bot uploads to a **SharePoint site** and creates a sharing link.
537
-
538
- ### Setup
539
-
540
- 1. **Add Graph API permissions** in Entra ID (Azure AD) → App Registration:
541
- - `Sites.ReadWrite.All` (Application) - upload files to SharePoint
542
- - `Chat.Read.All` (Application) - optional, enables per-user sharing links
543
-
544
- 2. **Grant admin consent** for the tenant.
545
-
546
- 3. **Get your SharePoint site ID:**
547
-
548
- ```bash
549
- # Via Graph Explorer or curl with a valid token:
550
- curl -H "Authorization: Bearer $TOKEN" \
551
- "https://graph.microsoft.com/v1.0/sites/{hostname}:/{site-path}"
552
-
553
- # Example: for a site at "contoso.sharepoint.com/sites/BotFiles"
554
- curl -H "Authorization: Bearer $TOKEN" \
555
- "https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/BotFiles"
556
-
557
- # Response includes: "id": "contoso.sharepoint.com,guid1,guid2"
558
- ```
559
-
560
- 4. **Configure Symi:**
561
-
562
- ```json5
563
- {
564
- channels: {
565
- msteams: {
566
- // ... other config ...
567
- sharePointSiteId: "contoso.sharepoint.com,guid1,guid2",
568
- },
569
- },
570
- }
571
- ```
572
-
573
- ### Sharing behavior
574
-
575
- | Permission | Sharing behavior |
576
- | --------------------------------------- | --------------------------------------------------------- |
577
- | `Sites.ReadWrite.All` only | Organization-wide sharing link (anyone in org can access) |
578
- | `Sites.ReadWrite.All` + `Chat.Read.All` | Per-user sharing link (only chat members can access) |
579
-
580
- Per-user sharing is more secure as only the chat participants can access the file. If `Chat.Read.All` permission is missing, the bot falls back to organization-wide sharing.
581
-
582
- ### Fallback behavior
583
-
584
- | Scenario | Result |
585
- | ------------------------------------------------- | -------------------------------------------------- |
586
- | Group chat + file + `sharePointSiteId` configured | Upload to SharePoint, send sharing link |
587
- | Group chat + file + no `sharePointSiteId` | Attempt OneDrive upload (may fail), send text only |
588
- | Personal chat + file | FileConsentCard flow (works without SharePoint) |
589
- | Any context + image | Base64-encoded inline (works without SharePoint) |
590
-
591
- ### Files stored location
592
-
593
- Uploaded files are stored in a `/SymiShared/` folder in the configured SharePoint site's default document library.
594
-
595
- ## Polls (Adaptive Cards)
596
-
597
- Symi sends Teams polls as Adaptive Cards (there is no native Teams poll API).
598
-
599
- - CLI: `symi message poll --channel msteams --target conversation:<id> ...`
600
- - Votes are recorded by the gateway in `~/.symi/msteams-polls.json`.
601
- - The gateway must stay online to record votes.
602
- - Polls do not auto-post result summaries yet (inspect the store file if needed).
603
-
604
- ## Adaptive Cards (arbitrary)
605
-
606
- Send any Adaptive Card JSON to Teams users or conversations using the `message` tool or CLI.
607
-
608
- The `card` parameter accepts an Adaptive Card JSON object. When `card` is provided, the message text is optional.
609
-
610
- **Agent tool:**
611
-
612
- ```json
613
- {
614
- "action": "send",
615
- "channel": "msteams",
616
- "target": "user:<id>",
617
- "card": {
618
- "type": "AdaptiveCard",
619
- "version": "1.5",
620
- "body": [{ "type": "TextBlock", "text": "Hello!" }]
621
- }
622
- }
623
- ```
624
-
625
- **CLI:**
626
-
627
- ```bash
628
- symi message send --channel msteams \
629
- --target "conversation:19:abc...@thread.tacv2" \
630
- --card '{"type":"AdaptiveCard","version":"1.5","body":[{"type":"TextBlock","text":"Hello!"}]}'
631
- ```
632
-
633
- See [Adaptive Cards documentation](https://adaptivecards.io/) for card schema and examples. For target format details, see [Target formats](#target-formats) below.
634
-
635
- ## Target formats
636
-
637
- MSTeams targets use prefixes to distinguish between users and conversations:
638
-
639
- | Target type | Format | Example |
640
- | ------------------- | -------------------------------- | --------------------------------------------------- |
641
- | User (by ID) | `user:<aad-object-id>` | `user:40a1a0ed-4ff2-4164-a219-55518990c197` |
642
- | User (by name) | `user:<display-name>` | `user:John Smith` (requires Graph API) |
643
- | Group/channel | `conversation:<conversation-id>` | `conversation:19:abc123...@thread.tacv2` |
644
- | Group/channel (raw) | `<conversation-id>` | `19:abc123...@thread.tacv2` (if contains `@thread`) |
645
-
646
- **CLI examples:**
647
-
648
- ```bash
649
- # Send to a user by ID
650
- symi message send --channel msteams --target "user:40a1a0ed-..." --message "Hello"
651
-
652
- # Send to a user by display name (triggers Graph API lookup)
653
- symi message send --channel msteams --target "user:John Smith" --message "Hello"
654
-
655
- # Send to a group chat or channel
656
- symi message send --channel msteams --target "conversation:19:abc...@thread.tacv2" --message "Hello"
657
-
658
- # Send an Adaptive Card to a conversation
659
- symi message send --channel msteams --target "conversation:19:abc...@thread.tacv2" \
660
- --card '{"type":"AdaptiveCard","version":"1.5","body":[{"type":"TextBlock","text":"Hello"}]}'
661
- ```
662
-
663
- **Agent tool examples:**
664
-
665
- ```json
666
- {
667
- "action": "send",
668
- "channel": "msteams",
669
- "target": "user:John Smith",
670
- "message": "Hello!"
671
- }
672
- ```
673
-
674
- ```json
675
- {
676
- "action": "send",
677
- "channel": "msteams",
678
- "target": "conversation:19:abc...@thread.tacv2",
679
- "card": {
680
- "type": "AdaptiveCard",
681
- "version": "1.5",
682
- "body": [{ "type": "TextBlock", "text": "Hello" }]
683
- }
684
- }
685
- ```
686
-
687
- Note: Without the `user:` prefix, names default to group/team resolution. Always use `user:` when targeting people by display name.
688
-
689
- ## Proactive messaging
690
-
691
- - Proactive messages are only possible **after** a user has interacted, because we store conversation references at that point.
692
- - See `/gateway/configuration` for `dmPolicy` and allowlist gating.
693
-
694
- ## Team and Channel IDs (Common Gotcha)
695
-
696
- The `groupId` query parameter in Teams URLs is **NOT** the team ID used for configuration. Extract IDs from the URL path instead:
697
-
698
- **Team URL:**
699
-
700
- ```
701
- https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/conversations?groupId=...
702
- └────────────────────────────┘
703
- Team ID (URL-decode this)
704
- ```
705
-
706
- **Channel URL:**
707
-
708
- ```
709
- https://teams.microsoft.com/l/channel/19%3A15bc...%40thread.tacv2/ChannelName?groupId=...
710
- └─────────────────────────┘
711
- Channel ID (URL-decode this)
712
- ```
713
-
714
- **For config:**
715
-
716
- - Team ID = path segment after `/team/` (URL-decoded, e.g., `19:Bk4j...@thread.tacv2`)
717
- - Channel ID = path segment after `/channel/` (URL-decoded)
718
- - **Ignore** the `groupId` query parameter
719
-
720
- ## Private Channels
721
-
722
- Bots have limited support in private channels:
723
-
724
- | Feature | Standard Channels | Private Channels |
725
- | ---------------------------- | ----------------- | ---------------------- |
726
- | Bot installation | Yes | Limited |
727
- | Real-time messages (webhook) | Yes | May not work |
728
- | RSC permissions | Yes | May behave differently |
729
- | @mentions | Yes | If bot is accessible |
730
- | Graph API history | Yes | Yes (with permissions) |
731
-
732
- **Workarounds if private channels don't work:**
733
-
734
- 1. Use standard channels for bot interactions
735
- 2. Use DMs - users can always message the bot directly
736
- 3. Use Graph API for historical access (requires `ChannelMessage.Read.All`)
737
-
738
- ## Troubleshooting
739
-
740
- ### Common issues
741
-
742
- - **Images not showing in channels:** Graph permissions or admin consent missing. Reinstall the Teams app and fully quit/reopen Teams.
743
- - **No responses in channel:** mentions are required by default; set `channels.msteams.requireMention=false` or configure per team/channel.
744
- - **Version mismatch (Teams still shows old manifest):** remove + re-add the app and fully quit Teams to refresh.
745
- - **401 Unauthorized from webhook:** Expected when testing manually without Azure JWT - means endpoint is reachable but auth failed. Use Azure Web Chat to test properly.
746
-
747
- ### Manifest upload errors
748
-
749
- - **"Icon file cannot be empty":** The manifest references icon files that are 0 bytes. Create valid PNG icons (32x32 for `outline.png`, 192x192 for `color.png`).
750
- - **"webApplicationInfo.Id already in use":** The app is still installed in another team/chat. Find and uninstall it first, or wait 5-10 minutes for propagation.
751
- - **"Something went wrong" on upload:** Upload via [https://admin.teams.microsoft.com](https://admin.teams.microsoft.com) instead, open browser DevTools (F12) → Network tab, and check the response body for the actual error.
752
- - **Sideload failing:** Try "Upload an app to your org's app catalog" instead of "Upload a custom app" - this often bypasses sideload restrictions.
753
-
754
- ### RSC permissions not working
755
-
756
- 1. Verify `webApplicationInfo.id` matches your bot's App ID exactly
757
- 2. Re-upload the app and reinstall in the team/chat
758
- 3. Check if your org admin has blocked RSC permissions
759
- 4. Confirm you're using the right scope: `ChannelMessage.Read.Group` for teams, `ChatMessage.Read.Chat` for group chats
760
-
761
- ## References
762
-
763
- - [Create Azure Bot](https://learn.microsoft.com/en-us/azure/bot-service/bot-service-quickstart-registration) - Azure Bot setup guide
764
- - [Teams Developer Portal](https://dev.teams.microsoft.com/apps) - create/manage Teams apps
765
- - [Teams app manifest schema](https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema)
766
- - [Receive channel messages with RSC](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/channel-messages-with-rsc)
767
- - [RSC permissions reference](https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent)
768
- - [Teams bot file handling](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/bots-filesv4) (channel/group requires Graph)
769
- - [Proactive messaging](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages)