@symerian/symi 3.0.20 → 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 (737) hide show
  1. package/dist/{audio-preflight-BaCdNfrk.js → audio-preflight-D7BVT-ls.js} +4 -4
  2. package/dist/build-info.json +3 -3
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/{chrome-UfmVM0xR.js → chrome-B5CO2vB5.js} +7 -7
  5. package/dist/{deliver-BqXdac6W.js → deliver-CrwjsDwv.js} +1 -1
  6. package/dist/extensionAPI.js +7 -7
  7. package/dist/{image-DIWsXYcW.js → image-Csu7WcLW.js} +1 -1
  8. package/dist/{manager-DW3SxcPr.js → manager-BkkVjTO8.js} +1 -1
  9. package/dist/{pi-embedded-BNch0U5F.js → pi-embedded-Dhp64z5l.js} +16 -16
  10. package/dist/{pi-embedded-helpers-IkHl02JF.js → pi-embedded-helpers-840E4hop.js} +4 -4
  11. package/dist/{pw-ai-nMkA-oDJ.js → pw-ai-CBgJf_RR.js} +1 -1
  12. package/dist/{runner-DNEC58JI.js → runner-BbFKo1ne.js} +1 -1
  13. package/dist/{synthesis-BWAr0sZ9.js → synthesis-DoEM0E8_.js} +7 -7
  14. package/dist/{web-7a-m_UxL.js → web-BYXJn-Ps.js} +7 -7
  15. package/package.json +1 -1
  16. package/docs/.i18n/README.md +0 -31
  17. package/docs/.i18n/glossary.ja-JP.json +0 -14
  18. package/docs/.i18n/glossary.zh-CN.json +0 -210
  19. package/docs/.i18n/ja-JP.tm.jsonl +0 -0
  20. package/docs/.i18n/zh-CN.tm.jsonl +0 -1303
  21. package/docs/CNAME +0 -1
  22. package/docs/assets/install-script.svg +0 -1
  23. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  24. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  25. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  26. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  27. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  28. package/docs/assets/pixel-symi.svg +0 -60
  29. package/docs/assets/showcase/agents-ui.jpg +0 -0
  30. package/docs/assets/showcase/bambu-cli.png +0 -0
  31. package/docs/assets/showcase/codexmonitor.png +0 -0
  32. package/docs/assets/showcase/gohome-grafana.png +0 -0
  33. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  34. package/docs/assets/showcase/oura-health.png +0 -0
  35. package/docs/assets/showcase/padel-cli.svg +0 -11
  36. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  37. package/docs/assets/showcase/papla-tts.jpg +0 -0
  38. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  39. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  40. package/docs/assets/showcase/roborock-status.svg +0 -13
  41. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  42. package/docs/assets/showcase/snag.png +0 -0
  43. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  44. package/docs/assets/showcase/wienerlinien.png +0 -0
  45. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  46. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  47. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  48. package/docs/assets/sponsors/blacksmith.svg +0 -14
  49. package/docs/assets/sponsors/openai.svg +0 -3
  50. package/docs/assets/symi-logo-text-dark.png +0 -0
  51. package/docs/assets/symi-logo-text.png +0 -0
  52. package/docs/automation/auth-monitoring.md +0 -44
  53. package/docs/automation/cron-jobs.md +0 -540
  54. package/docs/automation/cron-vs-heartbeat.md +0 -286
  55. package/docs/automation/gmail-pubsub.md +0 -256
  56. package/docs/automation/hooks.md +0 -998
  57. package/docs/automation/poll.md +0 -61
  58. package/docs/automation/troubleshooting.md +0 -122
  59. package/docs/automation/webhook.md +0 -213
  60. package/docs/brave-search.md +0 -41
  61. package/docs/capabilities.md +0 -151
  62. package/docs/channels/bluebubbles.md +0 -346
  63. package/docs/channels/broadcast-groups.md +0 -441
  64. package/docs/channels/channel-routing.md +0 -112
  65. package/docs/channels/feishu.md +0 -586
  66. package/docs/channels/googlechat.md +0 -253
  67. package/docs/channels/grammy.md +0 -31
  68. package/docs/channels/group-messages.md +0 -82
  69. package/docs/channels/groups.md +0 -364
  70. package/docs/channels/imessage.md +0 -366
  71. package/docs/channels/index.md +0 -46
  72. package/docs/channels/irc.md +0 -234
  73. package/docs/channels/line.md +0 -186
  74. package/docs/channels/location.md +0 -56
  75. package/docs/channels/matrix.md +0 -300
  76. package/docs/channels/mattermost.md +0 -158
  77. package/docs/channels/msteams.md +0 -769
  78. package/docs/channels/nextcloud-talk.md +0 -138
  79. package/docs/channels/nostr.md +0 -233
  80. package/docs/channels/pairing.md +0 -100
  81. package/docs/channels/signal.md +0 -322
  82. package/docs/channels/slack.md +0 -510
  83. package/docs/channels/telegram.md +0 -748
  84. package/docs/channels/tlon.md +0 -148
  85. package/docs/channels/troubleshooting.md +0 -110
  86. package/docs/channels/twitch.md +0 -379
  87. package/docs/channels/whatsapp.md +0 -444
  88. package/docs/channels/zalo.md +0 -192
  89. package/docs/channels/zalouser.md +0 -140
  90. package/docs/ci.md +0 -50
  91. package/docs/cli/acp.md +0 -182
  92. package/docs/cli/agent.md +0 -24
  93. package/docs/cli/agents.md +0 -75
  94. package/docs/cli/approvals.md +0 -50
  95. package/docs/cli/browser.md +0 -107
  96. package/docs/cli/channels.md +0 -73
  97. package/docs/cli/config.md +0 -50
  98. package/docs/cli/configure.md +0 -32
  99. package/docs/cli/cron.md +0 -44
  100. package/docs/cli/dashboard.md +0 -16
  101. package/docs/cli/devices.md +0 -73
  102. package/docs/cli/directory.md +0 -62
  103. package/docs/cli/dns.md +0 -23
  104. package/docs/cli/docs.md +0 -15
  105. package/docs/cli/doctor.md +0 -41
  106. package/docs/cli/gateway.md +0 -202
  107. package/docs/cli/health.md +0 -21
  108. package/docs/cli/hooks.md +0 -313
  109. package/docs/cli/index.md +0 -1029
  110. package/docs/cli/logs.md +0 -28
  111. package/docs/cli/memory.md +0 -45
  112. package/docs/cli/message.md +0 -214
  113. package/docs/cli/models.md +0 -79
  114. package/docs/cli/node.md +0 -112
  115. package/docs/cli/nodes.md +0 -73
  116. package/docs/cli/onboard.md +0 -76
  117. package/docs/cli/pairing.md +0 -21
  118. package/docs/cli/plugins.md +0 -92
  119. package/docs/cli/reset.md +0 -17
  120. package/docs/cli/sandbox.md +0 -152
  121. package/docs/cli/security.md +0 -64
  122. package/docs/cli/sessions.md +0 -16
  123. package/docs/cli/setup.md +0 -29
  124. package/docs/cli/skills.md +0 -26
  125. package/docs/cli/status.md +0 -25
  126. package/docs/cli/system.md +0 -60
  127. package/docs/cli/tui.md +0 -23
  128. package/docs/cli/uninstall.md +0 -17
  129. package/docs/cli/update.md +0 -98
  130. package/docs/cli/voicecall.md +0 -34
  131. package/docs/cli/webhooks.md +0 -25
  132. package/docs/concepts/agent-loop.md +0 -148
  133. package/docs/concepts/agent-workspace.md +0 -234
  134. package/docs/concepts/agent.md +0 -123
  135. package/docs/concepts/architecture.md +0 -135
  136. package/docs/concepts/compaction.md +0 -61
  137. package/docs/concepts/context.md +0 -161
  138. package/docs/concepts/features.md +0 -51
  139. package/docs/concepts/markdown-formatting.md +0 -128
  140. package/docs/concepts/memory.md +0 -729
  141. package/docs/concepts/messages.md +0 -153
  142. package/docs/concepts/model-failover.md +0 -149
  143. package/docs/concepts/model-providers.md +0 -424
  144. package/docs/concepts/models.md +0 -208
  145. package/docs/concepts/multi-agent.md +0 -521
  146. package/docs/concepts/oauth.md +0 -145
  147. package/docs/concepts/presence.md +0 -102
  148. package/docs/concepts/queue.md +0 -86
  149. package/docs/concepts/retry.md +0 -64
  150. package/docs/concepts/session-pruning.md +0 -123
  151. package/docs/concepts/session-tool.md +0 -213
  152. package/docs/concepts/session.md +0 -199
  153. package/docs/concepts/sessions.md +0 -10
  154. package/docs/concepts/streaming.md +0 -129
  155. package/docs/concepts/system-prompt.md +0 -128
  156. package/docs/concepts/timezone.md +0 -90
  157. package/docs/concepts/typebox.md +0 -289
  158. package/docs/concepts/typing-indicators.md +0 -68
  159. package/docs/concepts/usage-tracking.md +0 -35
  160. package/docs/date-time.md +0 -127
  161. package/docs/debug/node-issue.md +0 -85
  162. package/docs/diagnostics/flags.md +0 -91
  163. package/docs/docs.json +0 -1849
  164. package/docs/experiments/onboarding-config-protocol.md +0 -40
  165. package/docs/experiments/plans/browser-evaluate-cdp-refactor.md +0 -229
  166. package/docs/experiments/plans/cron-add-hardening.md +0 -62
  167. package/docs/experiments/plans/group-policy-hardening.md +0 -40
  168. package/docs/experiments/plans/openresponses-gateway.md +0 -123
  169. package/docs/experiments/plans/pty-process-supervision.md +0 -192
  170. package/docs/experiments/plans/session-binding-channel-agnostic.md +0 -202
  171. package/docs/experiments/plans/thread-bound-subagents.md +0 -281
  172. package/docs/experiments/proposals/model-config.md +0 -36
  173. package/docs/experiments/research/memory.md +0 -228
  174. package/docs/gateway/authentication.md +0 -162
  175. package/docs/gateway/background-process.md +0 -96
  176. package/docs/gateway/bonjour.md +0 -177
  177. package/docs/gateway/bridge-protocol.md +0 -91
  178. package/docs/gateway/cli-backends.md +0 -225
  179. package/docs/gateway/configuration-examples.md +0 -610
  180. package/docs/gateway/configuration-reference.md +0 -2465
  181. package/docs/gateway/configuration.md +0 -488
  182. package/docs/gateway/discovery.md +0 -123
  183. package/docs/gateway/doctor.md +0 -282
  184. package/docs/gateway/gateway-lock.md +0 -34
  185. package/docs/gateway/health.md +0 -35
  186. package/docs/gateway/heartbeat.md +0 -374
  187. package/docs/gateway/index.md +0 -254
  188. package/docs/gateway/local-models.md +0 -150
  189. package/docs/gateway/logging.md +0 -113
  190. package/docs/gateway/multiple-gateways.md +0 -112
  191. package/docs/gateway/network-model.md +0 -20
  192. package/docs/gateway/openai-http-api.md +0 -119
  193. package/docs/gateway/openresponses-http-api.md +0 -333
  194. package/docs/gateway/pairing.md +0 -99
  195. package/docs/gateway/protocol.md +0 -221
  196. package/docs/gateway/remote-gateway-readme.md +0 -158
  197. package/docs/gateway/remote.md +0 -131
  198. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -128
  199. package/docs/gateway/sandboxing.md +0 -203
  200. package/docs/gateway/security/index.md +0 -931
  201. package/docs/gateway/tailscale.md +0 -132
  202. package/docs/gateway/tools-invoke-http-api.md +0 -110
  203. package/docs/gateway/troubleshooting.md +0 -317
  204. package/docs/gateway/trusted-proxy-auth.md +0 -270
  205. package/docs/glass-ui-rendering-invariants.md +0 -451
  206. package/docs/help/debugging.md +0 -162
  207. package/docs/help/environment.md +0 -107
  208. package/docs/help/faq.md +0 -2846
  209. package/docs/help/index.md +0 -21
  210. package/docs/help/scripts.md +0 -28
  211. package/docs/help/testing.md +0 -385
  212. package/docs/help/troubleshooting.md +0 -264
  213. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  214. package/docs/images/feishu-step2-create-app.png +0 -0
  215. package/docs/images/feishu-step3-credentials.png +0 -0
  216. package/docs/images/feishu-step4-permissions.png +0 -0
  217. package/docs/images/feishu-step5-bot-capability.png +0 -0
  218. package/docs/images/feishu-step6-event-subscription.png +0 -0
  219. package/docs/images/groups-flow.svg +0 -52
  220. package/docs/images/mobile-ui-screenshot.png +0 -0
  221. package/docs/index.md +0 -186
  222. package/docs/install/ansible.md +0 -207
  223. package/docs/install/bun.md +0 -59
  224. package/docs/install/development-channels.md +0 -75
  225. package/docs/install/docker.md +0 -583
  226. package/docs/install/exe-dev.md +0 -126
  227. package/docs/install/fly.md +0 -472
  228. package/docs/install/gcp.md +0 -499
  229. package/docs/install/hetzner.md +0 -347
  230. package/docs/install/index.md +0 -218
  231. package/docs/install/installer.md +0 -405
  232. package/docs/install/macos-vm.md +0 -281
  233. package/docs/install/migrating.md +0 -192
  234. package/docs/install/nix.md +0 -98
  235. package/docs/install/node.md +0 -138
  236. package/docs/install/northflank.mdx +0 -49
  237. package/docs/install/podman.md +0 -108
  238. package/docs/install/railway.mdx +0 -95
  239. package/docs/install/render.mdx +0 -158
  240. package/docs/install/uninstall.md +0 -128
  241. package/docs/install/updating.md +0 -231
  242. package/docs/ja-JP/AGENTS.md +0 -37
  243. package/docs/ja-JP/index.md +0 -183
  244. package/docs/ja-JP/start/getting-started.md +0 -125
  245. package/docs/ja-JP/start/wizard.md +0 -77
  246. package/docs/logging.md +0 -350
  247. package/docs/nav-tabs-underline.js +0 -100
  248. package/docs/network.md +0 -54
  249. package/docs/nodes/audio.md +0 -133
  250. package/docs/nodes/camera.md +0 -156
  251. package/docs/nodes/images.md +0 -72
  252. package/docs/nodes/index.md +0 -342
  253. package/docs/nodes/location-command.md +0 -113
  254. package/docs/nodes/media-understanding.md +0 -379
  255. package/docs/nodes/talk.md +0 -90
  256. package/docs/nodes/troubleshooting.md +0 -112
  257. package/docs/nodes/voicewake.md +0 -65
  258. package/docs/perplexity.md +0 -80
  259. package/docs/phase-6.5-pre-flight-audit.md +0 -268
  260. package/docs/pi-dev.md +0 -70
  261. package/docs/pi.md +0 -610
  262. package/docs/platforms/android.md +0 -151
  263. package/docs/platforms/digitalocean.md +0 -265
  264. package/docs/platforms/index.md +0 -53
  265. package/docs/platforms/ios.md +0 -108
  266. package/docs/platforms/linux.md +0 -94
  267. package/docs/platforms/mac/bundled-gateway.md +0 -73
  268. package/docs/platforms/mac/canvas.md +0 -125
  269. package/docs/platforms/mac/child-process.md +0 -69
  270. package/docs/platforms/mac/dev-setup.md +0 -104
  271. package/docs/platforms/mac/health.md +0 -34
  272. package/docs/platforms/mac/icon.md +0 -31
  273. package/docs/platforms/mac/logging.md +0 -57
  274. package/docs/platforms/mac/menu-bar.md +0 -81
  275. package/docs/platforms/mac/peekaboo.md +0 -65
  276. package/docs/platforms/mac/permissions.md +0 -50
  277. package/docs/platforms/mac/release.md +0 -85
  278. package/docs/platforms/mac/remote.md +0 -84
  279. package/docs/platforms/mac/signing.md +0 -47
  280. package/docs/platforms/mac/skills.md +0 -33
  281. package/docs/platforms/mac/voice-overlay.md +0 -60
  282. package/docs/platforms/mac/voicewake.md +0 -66
  283. package/docs/platforms/mac/webchat.md +0 -43
  284. package/docs/platforms/mac/xpc.md +0 -61
  285. package/docs/platforms/macos.md +0 -204
  286. package/docs/platforms/oracle.md +0 -303
  287. package/docs/platforms/raspberry-pi.md +0 -358
  288. package/docs/platforms/windows.md +0 -159
  289. package/docs/plugins/agent-tools.md +0 -99
  290. package/docs/plugins/community.md +0 -44
  291. package/docs/plugins/manifest.md +0 -71
  292. package/docs/plugins/voice-call.md +0 -322
  293. package/docs/plugins/zalouser.md +0 -81
  294. package/docs/prose.md +0 -134
  295. package/docs/providers/anthropic.md +0 -174
  296. package/docs/providers/bedrock.md +0 -176
  297. package/docs/providers/claude-max-api-proxy.md +0 -148
  298. package/docs/providers/cloudflare-ai-gateway.md +0 -71
  299. package/docs/providers/deepgram.md +0 -93
  300. package/docs/providers/github-copilot.md +0 -72
  301. package/docs/providers/glm.md +0 -33
  302. package/docs/providers/huggingface.md +0 -209
  303. package/docs/providers/index.md +0 -67
  304. package/docs/providers/litellm.md +0 -153
  305. package/docs/providers/minimax.md +0 -208
  306. package/docs/providers/models.md +0 -52
  307. package/docs/providers/moonshot.md +0 -142
  308. package/docs/providers/nvidia.md +0 -55
  309. package/docs/providers/ollama.md +0 -250
  310. package/docs/providers/openai.md +0 -62
  311. package/docs/providers/opencode.md +0 -36
  312. package/docs/providers/openrouter.md +0 -37
  313. package/docs/providers/qianfan.md +0 -38
  314. package/docs/providers/qwen.md +0 -53
  315. package/docs/providers/synthetic.md +0 -99
  316. package/docs/providers/together.md +0 -65
  317. package/docs/providers/venice.md +0 -267
  318. package/docs/providers/vercel-ai-gateway.md +0 -50
  319. package/docs/providers/vllm.md +0 -92
  320. package/docs/providers/xiaomi.md +0 -64
  321. package/docs/providers/zai.md +0 -38
  322. package/docs/refactor/exec-host.md +0 -316
  323. package/docs/refactor/outbound-session-mirroring.md +0 -83
  324. package/docs/refactor/plugin-sdk.md +0 -214
  325. package/docs/refactor/strict-config.md +0 -93
  326. package/docs/refactor/syminet.md +0 -417
  327. package/docs/reference/AGENTS.default.md +0 -123
  328. package/docs/reference/RELEASING.md +0 -120
  329. package/docs/reference/api-usage-costs.md +0 -138
  330. package/docs/reference/credits.md +0 -28
  331. package/docs/reference/device-models.md +0 -47
  332. package/docs/reference/rpc.md +0 -43
  333. package/docs/reference/session-management-compaction.md +0 -284
  334. package/docs/reference/test.md +0 -51
  335. package/docs/reference/token-use.md +0 -136
  336. package/docs/reference/transcript-hygiene.md +0 -151
  337. package/docs/reference/wizard.md +0 -265
  338. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -89
  339. package/docs/security/README.md +0 -16
  340. package/docs/security/THREAT-MODEL-ATLAS.md +0 -600
  341. package/docs/security/formal-verification.md +0 -164
  342. package/docs/start/bootstrapping.md +0 -41
  343. package/docs/start/docs-directory.md +0 -63
  344. package/docs/start/getting-started.md +0 -135
  345. package/docs/start/hubs.md +0 -196
  346. package/docs/start/lore.md +0 -216
  347. package/docs/start/onboarding-overview.md +0 -51
  348. package/docs/start/onboarding.md +0 -81
  349. package/docs/start/quickstart.md +0 -22
  350. package/docs/start/setup.md +0 -160
  351. package/docs/start/showcase.md +0 -414
  352. package/docs/start/symi.md +0 -211
  353. package/docs/start/wizard-cli-automation.md +0 -158
  354. package/docs/start/wizard-cli-reference.md +0 -255
  355. package/docs/start/wizard.md +0 -109
  356. package/docs/style.css +0 -37
  357. package/docs/tools/agent-send.md +0 -52
  358. package/docs/tools/apply-patch.md +0 -51
  359. package/docs/tools/browser-linux-troubleshooting.md +0 -139
  360. package/docs/tools/browser-login.md +0 -67
  361. package/docs/tools/browser.md +0 -587
  362. package/docs/tools/chrome-extension.md +0 -183
  363. package/docs/tools/creating-skills.md +0 -54
  364. package/docs/tools/elevated.md +0 -55
  365. package/docs/tools/exec-approvals.md +0 -261
  366. package/docs/tools/exec.md +0 -184
  367. package/docs/tools/firecrawl.md +0 -61
  368. package/docs/tools/index.md +0 -540
  369. package/docs/tools/llm-task.md +0 -115
  370. package/docs/tools/loop-detection.md +0 -98
  371. package/docs/tools/multi-agent-sandbox-tools.md +0 -396
  372. package/docs/tools/pipeline.md +0 -340
  373. package/docs/tools/plugin.md +0 -687
  374. package/docs/tools/reactions.md +0 -21
  375. package/docs/tools/skills-config.md +0 -76
  376. package/docs/tools/skills.md +0 -300
  377. package/docs/tools/slash-commands.md +0 -202
  378. package/docs/tools/subagents.md +0 -232
  379. package/docs/tools/symihub.md +0 -256
  380. package/docs/tools/thinking.md +0 -75
  381. package/docs/tools/web.md +0 -265
  382. package/docs/tts.md +0 -398
  383. package/docs/vps.md +0 -43
  384. package/docs/web/control-ui.md +0 -247
  385. package/docs/web/dashboard.md +0 -46
  386. package/docs/web/index.md +0 -118
  387. package/docs/web/tui.md +0 -162
  388. package/docs/web/webchat.md +0 -53
  389. package/docs/whatsapp-symi-ai-zh.jpg +0 -0
  390. package/docs/whatsapp-symi.jpg +0 -0
  391. package/docs/zh-CN/AGENTS.md +0 -59
  392. package/docs/zh-CN/automation/auth-monitoring.md +0 -47
  393. package/docs/zh-CN/automation/cron-jobs.md +0 -422
  394. package/docs/zh-CN/automation/cron-vs-heartbeat.md +0 -286
  395. package/docs/zh-CN/automation/gmail-pubsub.md +0 -249
  396. package/docs/zh-CN/automation/hooks.md +0 -881
  397. package/docs/zh-CN/automation/poll.md +0 -68
  398. package/docs/zh-CN/automation/troubleshooting.md +0 -8
  399. package/docs/zh-CN/automation/webhook.md +0 -161
  400. package/docs/zh-CN/brave-search.md +0 -48
  401. package/docs/zh-CN/channels/bluebubbles.md +0 -271
  402. package/docs/zh-CN/channels/broadcast-groups.md +0 -448
  403. package/docs/zh-CN/channels/channel-routing.md +0 -112
  404. package/docs/zh-CN/channels/feishu.md +0 -629
  405. package/docs/zh-CN/channels/googlechat.md +0 -257
  406. package/docs/zh-CN/channels/grammy.md +0 -38
  407. package/docs/zh-CN/channels/group-messages.md +0 -89
  408. package/docs/zh-CN/channels/groups.md +0 -369
  409. package/docs/zh-CN/channels/imessage.md +0 -300
  410. package/docs/zh-CN/channels/index.md +0 -52
  411. package/docs/zh-CN/channels/line.md +0 -180
  412. package/docs/zh-CN/channels/location.md +0 -63
  413. package/docs/zh-CN/channels/matrix.md +0 -221
  414. package/docs/zh-CN/channels/mattermost.md +0 -144
  415. package/docs/zh-CN/channels/msteams.md +0 -773
  416. package/docs/zh-CN/channels/nextcloud-talk.md +0 -142
  417. package/docs/zh-CN/channels/nostr.md +0 -240
  418. package/docs/zh-CN/channels/pairing.md +0 -86
  419. package/docs/zh-CN/channels/signal.md +0 -207
  420. package/docs/zh-CN/channels/slack.md +0 -529
  421. package/docs/zh-CN/channels/telegram.md +0 -748
  422. package/docs/zh-CN/channels/tlon.md +0 -136
  423. package/docs/zh-CN/channels/troubleshooting.md +0 -34
  424. package/docs/zh-CN/channels/twitch.md +0 -385
  425. package/docs/zh-CN/channels/whatsapp.md +0 -411
  426. package/docs/zh-CN/channels/zalo.md +0 -196
  427. package/docs/zh-CN/channels/zalouser.md +0 -147
  428. package/docs/zh-CN/cli/acp.md +0 -173
  429. package/docs/zh-CN/cli/agent.md +0 -30
  430. package/docs/zh-CN/cli/agents.md +0 -82
  431. package/docs/zh-CN/cli/approvals.md +0 -57
  432. package/docs/zh-CN/cli/browser.md +0 -114
  433. package/docs/zh-CN/cli/channels.md +0 -80
  434. package/docs/zh-CN/cli/config.md +0 -57
  435. package/docs/zh-CN/cli/configure.md +0 -37
  436. package/docs/zh-CN/cli/cron.md +0 -43
  437. package/docs/zh-CN/cli/dashboard.md +0 -23
  438. package/docs/zh-CN/cli/devices.md +0 -74
  439. package/docs/zh-CN/cli/directory.md +0 -69
  440. package/docs/zh-CN/cli/dns.md +0 -30
  441. package/docs/zh-CN/cli/docs.md +0 -22
  442. package/docs/zh-CN/cli/doctor.md +0 -48
  443. package/docs/zh-CN/cli/gateway.md +0 -206
  444. package/docs/zh-CN/cli/health.md +0 -28
  445. package/docs/zh-CN/cli/hooks.md +0 -298
  446. package/docs/zh-CN/cli/index.md +0 -1025
  447. package/docs/zh-CN/cli/logs.md +0 -31
  448. package/docs/zh-CN/cli/memory.md +0 -52
  449. package/docs/zh-CN/cli/message.md +0 -205
  450. package/docs/zh-CN/cli/models.md +0 -85
  451. package/docs/zh-CN/cli/node.md +0 -115
  452. package/docs/zh-CN/cli/nodes.md +0 -80
  453. package/docs/zh-CN/cli/onboard.md +0 -36
  454. package/docs/zh-CN/cli/pairing.md +0 -28
  455. package/docs/zh-CN/cli/plugins.md +0 -66
  456. package/docs/zh-CN/cli/reset.md +0 -24
  457. package/docs/zh-CN/cli/sandbox.md +0 -158
  458. package/docs/zh-CN/cli/security.md +0 -33
  459. package/docs/zh-CN/cli/sessions.md +0 -23
  460. package/docs/zh-CN/cli/setup.md +0 -36
  461. package/docs/zh-CN/cli/skills.md +0 -33
  462. package/docs/zh-CN/cli/status.md +0 -32
  463. package/docs/zh-CN/cli/system.md +0 -63
  464. package/docs/zh-CN/cli/tui.md +0 -30
  465. package/docs/zh-CN/cli/uninstall.md +0 -24
  466. package/docs/zh-CN/cli/update.md +0 -101
  467. package/docs/zh-CN/cli/voicecall.md +0 -41
  468. package/docs/zh-CN/cli/webhooks.md +0 -32
  469. package/docs/zh-CN/concepts/agent-loop.md +0 -146
  470. package/docs/zh-CN/concepts/agent-workspace.md +0 -219
  471. package/docs/zh-CN/concepts/agent.md +0 -115
  472. package/docs/zh-CN/concepts/architecture.md +0 -122
  473. package/docs/zh-CN/concepts/compaction.md +0 -67
  474. package/docs/zh-CN/concepts/context.md +0 -168
  475. package/docs/zh-CN/concepts/features.md +0 -57
  476. package/docs/zh-CN/concepts/markdown-formatting.md +0 -115
  477. package/docs/zh-CN/concepts/memory.md +0 -412
  478. package/docs/zh-CN/concepts/messages.md +0 -140
  479. package/docs/zh-CN/concepts/model-failover.md +0 -145
  480. package/docs/zh-CN/concepts/model-providers.md +0 -320
  481. package/docs/zh-CN/concepts/models.md +0 -196
  482. package/docs/zh-CN/concepts/multi-agent.md +0 -371
  483. package/docs/zh-CN/concepts/oauth.md +0 -151
  484. package/docs/zh-CN/concepts/presence.md +0 -99
  485. package/docs/zh-CN/concepts/queue.md +0 -91
  486. package/docs/zh-CN/concepts/retry.md +0 -71
  487. package/docs/zh-CN/concepts/session-pruning.md +0 -129
  488. package/docs/zh-CN/concepts/session-tool.md +0 -198
  489. package/docs/zh-CN/concepts/session.md +0 -158
  490. package/docs/zh-CN/concepts/sessions.md +0 -17
  491. package/docs/zh-CN/concepts/streaming.md +0 -131
  492. package/docs/zh-CN/concepts/system-prompt.md +0 -99
  493. package/docs/zh-CN/concepts/timezone.md +0 -94
  494. package/docs/zh-CN/concepts/typebox.md +0 -284
  495. package/docs/zh-CN/concepts/typing-indicators.md +0 -74
  496. package/docs/zh-CN/concepts/usage-tracking.md +0 -42
  497. package/docs/zh-CN/date-time.md +0 -128
  498. package/docs/zh-CN/debug/node-issue.md +0 -90
  499. package/docs/zh-CN/diagnostics/flags.md +0 -98
  500. package/docs/zh-CN/experiments/onboarding-config-protocol.md +0 -47
  501. package/docs/zh-CN/experiments/plans/cron-add-hardening.md +0 -69
  502. package/docs/zh-CN/experiments/plans/group-policy-hardening.md +0 -45
  503. package/docs/zh-CN/experiments/plans/openresponses-gateway.md +0 -121
  504. package/docs/zh-CN/experiments/proposals/model-config.md +0 -42
  505. package/docs/zh-CN/experiments/research/memory.md +0 -235
  506. package/docs/zh-CN/gateway/authentication.md +0 -142
  507. package/docs/zh-CN/gateway/background-process.md +0 -100
  508. package/docs/zh-CN/gateway/bonjour.md +0 -174
  509. package/docs/zh-CN/gateway/bridge-protocol.md +0 -86
  510. package/docs/zh-CN/gateway/cli-backends.md +0 -213
  511. package/docs/zh-CN/gateway/configuration-examples.md +0 -580
  512. package/docs/zh-CN/gateway/configuration.md +0 -3284
  513. package/docs/zh-CN/gateway/discovery.md +0 -123
  514. package/docs/zh-CN/gateway/doctor.md +0 -238
  515. package/docs/zh-CN/gateway/gateway-lock.md +0 -41
  516. package/docs/zh-CN/gateway/health.md +0 -42
  517. package/docs/zh-CN/gateway/heartbeat.md +0 -272
  518. package/docs/zh-CN/gateway/index.md +0 -335
  519. package/docs/zh-CN/gateway/local-models.md +0 -157
  520. package/docs/zh-CN/gateway/logging.md +0 -114
  521. package/docs/zh-CN/gateway/multiple-gateways.md +0 -119
  522. package/docs/zh-CN/gateway/network-model.md +0 -23
  523. package/docs/zh-CN/gateway/openai-http-api.md +0 -125
  524. package/docs/zh-CN/gateway/openresponses-http-api.md +0 -317
  525. package/docs/zh-CN/gateway/pairing.md +0 -99
  526. package/docs/zh-CN/gateway/protocol.md +0 -220
  527. package/docs/zh-CN/gateway/remote-gateway-readme.md +0 -164
  528. package/docs/zh-CN/gateway/remote.md +0 -133
  529. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -135
  530. package/docs/zh-CN/gateway/sandboxing.md +0 -188
  531. package/docs/zh-CN/gateway/security/index.md +0 -772
  532. package/docs/zh-CN/gateway/tailscale.md +0 -124
  533. package/docs/zh-CN/gateway/tools-invoke-http-api.md +0 -92
  534. package/docs/zh-CN/gateway/troubleshooting.md +0 -758
  535. package/docs/zh-CN/help/debugging.md +0 -160
  536. package/docs/zh-CN/help/environment.md +0 -88
  537. package/docs/zh-CN/help/faq.md +0 -2613
  538. package/docs/zh-CN/help/index.md +0 -28
  539. package/docs/zh-CN/help/scripts.md +0 -35
  540. package/docs/zh-CN/help/testing.md +0 -375
  541. package/docs/zh-CN/help/troubleshooting.md +0 -104
  542. package/docs/zh-CN/index.md +0 -183
  543. package/docs/zh-CN/install/ansible.md +0 -214
  544. package/docs/zh-CN/install/bun.md +0 -65
  545. package/docs/zh-CN/install/development-channels.md +0 -81
  546. package/docs/zh-CN/install/docker.md +0 -525
  547. package/docs/zh-CN/install/exe-dev.md +0 -127
  548. package/docs/zh-CN/install/fly.md +0 -476
  549. package/docs/zh-CN/install/gcp.md +0 -509
  550. package/docs/zh-CN/install/hetzner.md +0 -336
  551. package/docs/zh-CN/install/index.md +0 -193
  552. package/docs/zh-CN/install/installer.md +0 -128
  553. package/docs/zh-CN/install/macos-vm.md +0 -288
  554. package/docs/zh-CN/install/migrating.md +0 -199
  555. package/docs/zh-CN/install/nix.md +0 -99
  556. package/docs/zh-CN/install/node.md +0 -8
  557. package/docs/zh-CN/install/northflank.mdx +0 -56
  558. package/docs/zh-CN/install/railway.mdx +0 -102
  559. package/docs/zh-CN/install/render.mdx +0 -168
  560. package/docs/zh-CN/install/uninstall.md +0 -135
  561. package/docs/zh-CN/install/updating.md +0 -233
  562. package/docs/zh-CN/logging.md +0 -329
  563. package/docs/zh-CN/network.md +0 -59
  564. package/docs/zh-CN/nodes/audio.md +0 -120
  565. package/docs/zh-CN/nodes/camera.md +0 -162
  566. package/docs/zh-CN/nodes/images.md +0 -79
  567. package/docs/zh-CN/nodes/index.md +0 -348
  568. package/docs/zh-CN/nodes/location-command.md +0 -120
  569. package/docs/zh-CN/nodes/media-understanding.md +0 -380
  570. package/docs/zh-CN/nodes/talk.md +0 -97
  571. package/docs/zh-CN/nodes/troubleshooting.md +0 -8
  572. package/docs/zh-CN/nodes/voicewake.md +0 -72
  573. package/docs/zh-CN/perplexity.md +0 -84
  574. package/docs/zh-CN/pi-dev.md +0 -77
  575. package/docs/zh-CN/pi.md +0 -617
  576. package/docs/zh-CN/platforms/android.md +0 -155
  577. package/docs/zh-CN/platforms/digitalocean.md +0 -268
  578. package/docs/zh-CN/platforms/index.md +0 -60
  579. package/docs/zh-CN/platforms/ios.md +0 -114
  580. package/docs/zh-CN/platforms/linux.md +0 -101
  581. package/docs/zh-CN/platforms/mac/bundled-gateway.md +0 -75
  582. package/docs/zh-CN/platforms/mac/canvas.md +0 -128
  583. package/docs/zh-CN/platforms/mac/child-process.md +0 -73
  584. package/docs/zh-CN/platforms/mac/dev-setup.md +0 -109
  585. package/docs/zh-CN/platforms/mac/health.md +0 -41
  586. package/docs/zh-CN/platforms/mac/icon.md +0 -38
  587. package/docs/zh-CN/platforms/mac/logging.md +0 -64
  588. package/docs/zh-CN/platforms/mac/menu-bar.md +0 -88
  589. package/docs/zh-CN/platforms/mac/peekaboo.md +0 -62
  590. package/docs/zh-CN/platforms/mac/permissions.md +0 -46
  591. package/docs/zh-CN/platforms/mac/release.md +0 -92
  592. package/docs/zh-CN/platforms/mac/remote.md +0 -90
  593. package/docs/zh-CN/platforms/mac/signing.md +0 -54
  594. package/docs/zh-CN/platforms/mac/skills.md +0 -40
  595. package/docs/zh-CN/platforms/mac/voice-overlay.md +0 -67
  596. package/docs/zh-CN/platforms/mac/voicewake.md +0 -73
  597. package/docs/zh-CN/platforms/mac/webchat.md +0 -43
  598. package/docs/zh-CN/platforms/mac/xpc.md +0 -68
  599. package/docs/zh-CN/platforms/macos.md +0 -193
  600. package/docs/zh-CN/platforms/oracle.md +0 -310
  601. package/docs/zh-CN/platforms/raspberry-pi.md +0 -365
  602. package/docs/zh-CN/platforms/windows.md +0 -156
  603. package/docs/zh-CN/plugins/agent-tools.md +0 -99
  604. package/docs/zh-CN/plugins/manifest.md +0 -68
  605. package/docs/zh-CN/plugins/voice-call.md +0 -250
  606. package/docs/zh-CN/plugins/zalouser.md +0 -88
  607. package/docs/zh-CN/prose.md +0 -141
  608. package/docs/zh-CN/providers/anthropic.md +0 -159
  609. package/docs/zh-CN/providers/bedrock.md +0 -170
  610. package/docs/zh-CN/providers/claude-max-api-proxy.md +0 -155
  611. package/docs/zh-CN/providers/deepgram.md +0 -97
  612. package/docs/zh-CN/providers/github-copilot.md +0 -67
  613. package/docs/zh-CN/providers/glm.md +0 -39
  614. package/docs/zh-CN/providers/index.md +0 -66
  615. package/docs/zh-CN/providers/minimax.md +0 -206
  616. package/docs/zh-CN/providers/models.md +0 -55
  617. package/docs/zh-CN/providers/moonshot.md +0 -145
  618. package/docs/zh-CN/providers/ollama.md +0 -230
  619. package/docs/zh-CN/providers/openai.md +0 -68
  620. package/docs/zh-CN/providers/opencode.md +0 -41
  621. package/docs/zh-CN/providers/openrouter.md +0 -43
  622. package/docs/zh-CN/providers/qianfan.md +0 -8
  623. package/docs/zh-CN/providers/qwen.md +0 -55
  624. package/docs/zh-CN/providers/synthetic.md +0 -102
  625. package/docs/zh-CN/providers/venice.md +0 -274
  626. package/docs/zh-CN/providers/vercel-ai-gateway.md +0 -57
  627. package/docs/zh-CN/providers/xiaomi.md +0 -68
  628. package/docs/zh-CN/providers/zai.md +0 -41
  629. package/docs/zh-CN/refactor/exec-host.md +0 -323
  630. package/docs/zh-CN/refactor/outbound-session-mirroring.md +0 -90
  631. package/docs/zh-CN/refactor/plugin-sdk.md +0 -221
  632. package/docs/zh-CN/refactor/strict-config.md +0 -100
  633. package/docs/zh-CN/refactor/syminet.md +0 -424
  634. package/docs/zh-CN/reference/AGENTS.default.md +0 -130
  635. package/docs/zh-CN/reference/RELEASING.md +0 -122
  636. package/docs/zh-CN/reference/api-usage-costs.md +0 -136
  637. package/docs/zh-CN/reference/credits.md +0 -34
  638. package/docs/zh-CN/reference/device-models.md +0 -54
  639. package/docs/zh-CN/reference/rpc.md +0 -48
  640. package/docs/zh-CN/reference/session-management-compaction.md +0 -286
  641. package/docs/zh-CN/reference/templates/AGENTS.dev.md +0 -89
  642. package/docs/zh-CN/reference/templates/AGENTS.md +0 -234
  643. package/docs/zh-CN/reference/templates/BOOT.md +0 -17
  644. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +0 -68
  645. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +0 -54
  646. package/docs/zh-CN/reference/templates/IDENTITY.md +0 -36
  647. package/docs/zh-CN/reference/templates/SYMICORE.dev.md +0 -83
  648. package/docs/zh-CN/reference/templates/SYMICORE.md +0 -49
  649. package/docs/zh-CN/reference/templates/SYMIPULSE.md +0 -69
  650. package/docs/zh-CN/reference/templates/TOOLS.dev.md +0 -31
  651. package/docs/zh-CN/reference/templates/TOOLS.md +0 -53
  652. package/docs/zh-CN/reference/templates/USER.dev.md +0 -25
  653. package/docs/zh-CN/reference/templates/USER.md +0 -30
  654. package/docs/zh-CN/reference/test.md +0 -57
  655. package/docs/zh-CN/reference/token-use.md +0 -119
  656. package/docs/zh-CN/reference/transcript-hygiene.md +0 -109
  657. package/docs/zh-CN/reference/wizard.md +0 -9
  658. package/docs/zh-CN/security/formal-verification.md +0 -171
  659. package/docs/zh-CN/start/bootstrapping.md +0 -9
  660. package/docs/zh-CN/start/docs-directory.md +0 -69
  661. package/docs/zh-CN/start/getting-started.md +0 -201
  662. package/docs/zh-CN/start/hubs.md +0 -199
  663. package/docs/zh-CN/start/lore.md +0 -223
  664. package/docs/zh-CN/start/onboarding.md +0 -105
  665. package/docs/zh-CN/start/quickstart.md +0 -88
  666. package/docs/zh-CN/start/setup.md +0 -151
  667. package/docs/zh-CN/start/showcase.md +0 -421
  668. package/docs/zh-CN/start/symi.md +0 -244
  669. package/docs/zh-CN/start/wizard.md +0 -326
  670. package/docs/zh-CN/tools/agent-send.md +0 -58
  671. package/docs/zh-CN/tools/apply-patch.md +0 -57
  672. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +0 -144
  673. package/docs/zh-CN/tools/browser-login.md +0 -75
  674. package/docs/zh-CN/tools/browser.md +0 -553
  675. package/docs/zh-CN/tools/chrome-extension.md +0 -183
  676. package/docs/zh-CN/tools/creating-skills.md +0 -61
  677. package/docs/zh-CN/tools/elevated.md +0 -62
  678. package/docs/zh-CN/tools/exec-approvals.md +0 -233
  679. package/docs/zh-CN/tools/exec.md +0 -169
  680. package/docs/zh-CN/tools/firecrawl.md +0 -68
  681. package/docs/zh-CN/tools/index.md +0 -508
  682. package/docs/zh-CN/tools/llm-task.md +0 -117
  683. package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +0 -400
  684. package/docs/zh-CN/tools/pipeline.md +0 -349
  685. package/docs/zh-CN/tools/plugin.md +0 -639
  686. package/docs/zh-CN/tools/reactions.md +0 -28
  687. package/docs/zh-CN/tools/skills-config.md +0 -78
  688. package/docs/zh-CN/tools/skills.md +0 -279
  689. package/docs/zh-CN/tools/slash-commands.md +0 -196
  690. package/docs/zh-CN/tools/subagents.md +0 -167
  691. package/docs/zh-CN/tools/symihub.md +0 -209
  692. package/docs/zh-CN/tools/thinking.md +0 -80
  693. package/docs/zh-CN/tools/web.md +0 -257
  694. package/docs/zh-CN/tts.md +0 -373
  695. package/docs/zh-CN/vps.md +0 -47
  696. package/docs/zh-CN/web/control-ui.md +0 -190
  697. package/docs/zh-CN/web/dashboard.md +0 -53
  698. package/docs/zh-CN/web/index.md +0 -118
  699. package/docs/zh-CN/web/tui.md +0 -166
  700. package/docs/zh-CN/web/webchat.md +0 -56
  701. package/extensions/imessage/index.ts +0 -17
  702. package/extensions/imessage/node_modules/.bin/symi +0 -21
  703. package/extensions/imessage/package.json +0 -15
  704. package/extensions/imessage/src/channel.outbound.test.ts +0 -66
  705. package/extensions/imessage/src/channel.ts +0 -298
  706. package/extensions/imessage/src/runtime.ts +0 -14
  707. package/extensions/imessage/symi.plugin.json +0 -9
  708. package/extensions/line/index.ts +0 -19
  709. package/extensions/line/node_modules/.bin/symi +0 -21
  710. package/extensions/line/package.json +0 -30
  711. package/extensions/line/src/card-command.ts +0 -344
  712. package/extensions/line/src/channel.logout.test.ts +0 -133
  713. package/extensions/line/src/channel.sendPayload.test.ts +0 -312
  714. package/extensions/line/src/channel.startup.test.ts +0 -133
  715. package/extensions/line/src/channel.ts +0 -801
  716. package/extensions/line/src/runtime.ts +0 -14
  717. package/extensions/line/symi.plugin.json +0 -9
  718. package/extensions/signal/index.ts +0 -17
  719. package/extensions/signal/node_modules/.bin/symi +0 -21
  720. package/extensions/signal/package.json +0 -15
  721. package/extensions/signal/src/channel.ts +0 -302
  722. package/extensions/signal/src/runtime.ts +0 -14
  723. package/extensions/signal/symi.plugin.json +0 -9
  724. package/extensions/telegram/index.ts +0 -17
  725. package/extensions/telegram/node_modules/.bin/symi +0 -21
  726. package/extensions/telegram/package.json +0 -15
  727. package/extensions/telegram/src/channel.test.ts +0 -125
  728. package/extensions/telegram/src/channel.ts +0 -560
  729. package/extensions/telegram/src/runtime.ts +0 -14
  730. package/extensions/telegram/symi.plugin.json +0 -9
  731. package/extensions/whatsapp/index.ts +0 -17
  732. package/extensions/whatsapp/node_modules/.bin/symi +0 -21
  733. package/extensions/whatsapp/package.json +0 -15
  734. package/extensions/whatsapp/src/channel.ts +0 -465
  735. package/extensions/whatsapp/src/resolve-target.test.ts +0 -170
  736. package/extensions/whatsapp/src/runtime.ts +0 -14
  737. package/extensions/whatsapp/symi.plugin.json +0 -9
@@ -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)