fengming 0.3.10 → 0.3.12

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 (871) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/cli/run-main.js +3 -3
  4. package/dist/cli-startup-metadata.json +8 -8
  5. package/dist/{command-registry-DMB-HKIk.js → command-registry-BHIBvpgR.js} +2 -2
  6. package/dist/{command-registry-C5ooX6PF.js → command-registry-BT5icv-c.js} +2 -2
  7. package/dist/{command-registry-core-B2w_XWvn.js → command-registry-core-C-a3GaYV.js} +2 -2
  8. package/dist/{completion-cli-Bf4mEw2W.js → completion-cli-BUfFF31m.js} +2 -2
  9. package/dist/control-ui/assets/{activity-D-mnRThU.js → activity-DF1iC1pF.js} +2 -2
  10. package/dist/control-ui/assets/{agents-U_KSP5I_.js → agents-CDGNJA8n.js} +2 -2
  11. package/dist/control-ui/assets/{channels-ohK9_G1O.js → channels-CAPFdCrE.js} +2 -2
  12. package/dist/control-ui/assets/{cron-6ZCzfU29.js → cron-DUUdUzzu.js} +2 -2
  13. package/dist/control-ui/assets/{debug-CSsDLg_s.js → debug-BwfVXGKK.js} +2 -2
  14. package/dist/control-ui/assets/{index-jUDczxhd.js → index-JWV4rMUy.js} +4 -4
  15. package/dist/control-ui/assets/{instances-782ZoDT4.js → instances-BqAPpn0Y.js} +2 -2
  16. package/dist/control-ui/assets/{nodes-BMX16BKM.js → nodes-gya-0PkG.js} +2 -2
  17. package/dist/control-ui/assets/{sessions-jLGSApYa.js → sessions-BdttyTpI.js} +2 -2
  18. package/dist/control-ui/assets/{skills-DweBwUhs.js → skills-D_rtwBjc.js} +2 -2
  19. package/dist/control-ui/assets/{workboard-BsU-FXIo.js → workboard-CIGDGkWB.js} +2 -2
  20. package/dist/control-ui/index.html +1 -1
  21. package/dist/control-ui/sw.js +1 -1
  22. package/dist/crestodian/crestodian.js +1 -1
  23. package/dist/crestodian/rescue-message.js +1 -1
  24. package/dist/{crestodian-C0x7JjF-.js → crestodian-CAxGCgHM.js} +3 -3
  25. package/dist/{dialogue-No0NvYX7.js → dialogue-CHuN9qet.js} +1 -1
  26. package/dist/gateway/protocol/index.d.ts +1 -1
  27. package/dist/{index-AZzJCgph.d.ts → index-DbpfOFUf.d.ts} +1 -1
  28. package/dist/{operations-Z85LFqsT.js → operations-Mvnrndji.js} +1 -1
  29. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  30. package/dist/plugin-sdk/{agent-harness-runtime-CgQiThzm.d.ts → agent-harness-runtime-Bkrjji63.d.ts} +2 -2
  31. package/dist/plugin-sdk/agent-harness-runtime.d.ts +4 -4
  32. package/dist/plugin-sdk/agent-harness-task-runtime.d.ts +1 -1
  33. package/dist/plugin-sdk/agent-harness.d.ts +4 -4
  34. package/dist/plugin-sdk/agent-runtime.d.ts +1 -1
  35. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-ZTBQez8k.d.ts} +9 -9
  36. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +1 -1
  37. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +1 -1
  38. package/dist/plugin-sdk/channel-core.d.ts +2 -2
  39. package/dist/plugin-sdk/channel-entry-contract.d.ts +1 -1
  40. package/dist/plugin-sdk/{channel-pairing-CX6ncj1r.d.ts → channel-pairing-CzsPAHgH.d.ts} +1 -1
  41. package/dist/plugin-sdk/channel-pairing.d.ts +1 -1
  42. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  43. package/dist/plugin-sdk/cli-backend.d.ts +1 -1
  44. package/dist/plugin-sdk/compat.d.ts +4 -4
  45. package/dist/plugin-sdk/{config-schema-DuJUjn6k.d.ts → config-schema-N64y7n8C.d.ts} +1 -1
  46. package/dist/plugin-sdk/config-schema.d.ts +4 -4
  47. package/dist/plugin-sdk/{core-CPtu2Ftl.d.ts → core-BWZB2hNB.d.ts} +1 -1
  48. package/dist/plugin-sdk/core.d.ts +7 -7
  49. package/dist/plugin-sdk/{delegate-uk6vAMkc.d.ts → delegate-o5xckIuc.d.ts} +1 -1
  50. package/dist/plugin-sdk/discord.d.ts +3 -3
  51. package/dist/plugin-sdk/{fengming-runtime-Dt2ZEVYX.d.ts → fengming-runtime-abXAXyq2.d.ts} +1 -1
  52. package/dist/plugin-sdk/gateway-runtime.d.ts +1 -1
  53. package/dist/plugin-sdk/{host-compat-CM0h9ODw.d.ts → host-compat-D2Ky8seZ.d.ts} +1 -1
  54. package/dist/plugin-sdk/{http-registry-BniL_epL.d.ts → http-registry-oxJbX3E-.d.ts} +2 -2
  55. package/dist/plugin-sdk/image-generation-core.d.ts +4 -4
  56. package/dist/plugin-sdk/image-generation-runtime.d.ts +3 -3
  57. package/dist/plugin-sdk/index.d.ts +4 -4
  58. package/dist/plugin-sdk/lmstudio.d.ts +1 -1
  59. package/dist/plugin-sdk/{loader-aELh60PE.d.ts → loader-CgJhYjxT.d.ts} +3 -3
  60. package/dist/plugin-sdk/{logger-BpB3--7Z.d.ts → logger-CyDIBtoX.d.ts} +1 -1
  61. package/dist/plugin-sdk/logging-core.d.ts +3 -3
  62. package/dist/plugin-sdk/memory-core-host-engine-embeddings.d.ts +2 -2
  63. package/dist/plugin-sdk/memory-core-host-engine-foundation.d.ts +3 -3
  64. package/dist/plugin-sdk/{memory-core-host-engine-storage-DYPjOQCg.d.ts → memory-core-host-engine-storage-DfW7ZqD0.d.ts} +1 -1
  65. package/dist/plugin-sdk/memory-core-host-engine-storage.d.ts +1 -1
  66. package/dist/plugin-sdk/memory-core-host-runtime-cli.d.ts +1 -1
  67. package/dist/plugin-sdk/memory-core-host-runtime-core.d.ts +3 -3
  68. package/dist/plugin-sdk/memory-core.d.ts +3 -3
  69. package/dist/plugin-sdk/memory-host-core.d.ts +3 -3
  70. package/dist/plugin-sdk/migration-runtime.d.ts +1 -1
  71. package/dist/plugin-sdk/migration.d.ts +1 -1
  72. package/dist/plugin-sdk/music-generation-core.d.ts +2 -2
  73. package/dist/plugin-sdk/{plugin-entry-DO9kQeTr.d.ts → plugin-entry-C9xM-ZA9.d.ts} +1 -1
  74. package/dist/plugin-sdk/plugin-entry.d.ts +3 -3
  75. package/dist/plugin-sdk/plugin-runtime.d.ts +3 -3
  76. package/dist/plugin-sdk/{provider-api-key-auth-DvIiojS6.d.ts → provider-api-key-auth-DOmYPTC2.d.ts} +1 -1
  77. package/dist/plugin-sdk/provider-auth-api-key.d.ts +4 -4
  78. package/dist/plugin-sdk/{provider-auth-helpers-CYkWZ0vq.d.ts → provider-auth-helpers-pqDNrZTd.d.ts} +1 -1
  79. package/dist/plugin-sdk/{provider-auth-input-DUV6ZTw4.d.ts → provider-auth-input-Ckt-cU4H.d.ts} +1 -1
  80. package/dist/plugin-sdk/provider-auth-result.d.ts +1 -1
  81. package/dist/plugin-sdk/provider-auth-runtime.d.ts +1 -1
  82. package/dist/plugin-sdk/provider-auth.d.ts +5 -5
  83. package/dist/plugin-sdk/provider-catalog-runtime.d.ts +2 -2
  84. package/dist/plugin-sdk/{provider-catalog-shared-Cm3SyFfL.d.ts → provider-catalog-shared-QvOT8Wz1.d.ts} +1 -1
  85. package/dist/plugin-sdk/provider-catalog-shared.d.ts +2 -2
  86. package/dist/plugin-sdk/provider-entry.d.ts +3 -3
  87. package/dist/plugin-sdk/{provider-model-shared-D5rgn7Gb.d.ts → provider-model-shared-Bnc8IMx5.d.ts} +1 -1
  88. package/dist/plugin-sdk/provider-model-shared.d.ts +2 -2
  89. package/dist/plugin-sdk/{provider-registry-DxdZT9UN.d.ts → provider-registry-Ba1nNfhA.d.ts} +1 -1
  90. package/dist/plugin-sdk/{provider-registry-DiKX35tc.d.ts → provider-registry-CqB5bSAD.d.ts} +1 -1
  91. package/dist/plugin-sdk/{provider-registry-D0vmhPWL.d.ts → provider-registry-CxdVib8g.d.ts} +1 -1
  92. package/dist/plugin-sdk/{provider-self-hosted-setup-BPx7JMDC.d.ts → provider-self-hosted-setup-eMoeVPnF.d.ts} +1 -1
  93. package/dist/plugin-sdk/provider-setup.d.ts +2 -2
  94. package/dist/plugin-sdk/{provider-stream-DcC2vn_N.d.ts → provider-stream-CGaLae9n.d.ts} +1 -1
  95. package/dist/plugin-sdk/provider-stream-family.d.ts +2 -2
  96. package/dist/plugin-sdk/{provider-stream-shared-ByDv3QKm.d.ts → provider-stream-shared-u5mt-8_i.d.ts} +1 -1
  97. package/dist/plugin-sdk/provider-stream-shared.d.ts +1 -1
  98. package/dist/plugin-sdk/provider-stream.d.ts +2 -2
  99. package/dist/plugin-sdk/provider-tools.d.ts +1 -1
  100. package/dist/plugin-sdk/provider-web-fetch-contract.d.ts +1 -1
  101. package/dist/plugin-sdk/provider-web-fetch.d.ts +1 -1
  102. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  103. package/dist/plugin-sdk/{provider-web-search-contract-fields-CY4v8kS-.d.ts → provider-web-search-contract-fields-BiWOSs_d.d.ts} +1 -1
  104. package/dist/plugin-sdk/provider-web-search-contract.d.ts +2 -2
  105. package/dist/plugin-sdk/provider-web-search.d.ts +1 -1
  106. package/dist/plugin-sdk/realtime-transcription.d.ts +1 -1
  107. package/dist/plugin-sdk/realtime-voice.d.ts +1 -1
  108. package/dist/plugin-sdk/{redact-identifier-CVwkabcI.d.ts → redact-identifier-CVqsKaEK.d.ts} +1 -1
  109. package/dist/plugin-sdk/{registry-CzaGoAKH.d.ts → registry-Gq9OFlb3.d.ts} +2 -2
  110. package/dist/plugin-sdk/{registry-types-DN1yiH3F.d.ts → registry-types-DyBkef1H.d.ts} +2 -2
  111. package/dist/plugin-sdk/reply-runtime.d.ts +1 -1
  112. package/dist/plugin-sdk/runtime-env.d.ts +3 -3
  113. package/dist/plugin-sdk/runtime-store.d.ts +1 -1
  114. package/dist/plugin-sdk/runtime.d.ts +3 -3
  115. package/dist/plugin-sdk/self-hosted-provider-setup.d.ts +2 -2
  116. package/dist/plugin-sdk/simple-completion-runtime.d.ts +1 -1
  117. package/dist/plugin-sdk/speech-core.d.ts +2 -2
  118. package/dist/plugin-sdk/speech.d.ts +2 -2
  119. package/dist/plugin-sdk/{subsystem-n4Y4vCcQ.d.ts → subsystem-Boo2DQIV.d.ts} +1 -1
  120. package/dist/plugin-sdk/text-runtime.d.ts +2 -2
  121. package/dist/plugin-sdk/tool-plugin.d.ts +2 -2
  122. package/dist/plugin-sdk/{types-BI8R-vGd.d.ts → types-DGF1KeaJ.d.ts} +2 -2
  123. package/dist/plugin-sdk/{types-CsqNt0j8.d.ts → types-DpaN54PS.d.ts} +1 -1
  124. package/dist/plugin-sdk/{unhandled-rejections-D9eBl3hT.d.ts → unhandled-rejections-Bez6JG0y.d.ts} +2 -2
  125. package/dist/plugin-sdk/video-generation-core.d.ts +3 -3
  126. package/dist/plugin-sdk/video-generation-runtime.d.ts +3 -3
  127. package/dist/plugin-sdk/webhook-ingress.d.ts +1 -1
  128. package/dist/plugin-sdk/webhook-targets.d.ts +1 -1
  129. package/dist/{program-D19g2jaa.js → program-BaCHjV-F.js} +1 -1
  130. package/dist/{register.crestodian-BhIukKDA.js → register.crestodian-DMJEPMf3.js} +1 -1
  131. package/dist/register.subclis-B0BgjwyK.js +3 -0
  132. package/dist/{register.subclis-DVk0HU4k.js → register.subclis-BuoWG93n.js} +2 -2
  133. package/dist/{register.subclis-core-BK7nVvl6.js → register.subclis-core-BGBFrWE3.js} +2 -2
  134. package/dist/{standalone-CHrieUsw.js → standalone-CV2Ud6F7.js} +1 -1
  135. package/dist/tui-Bvt7hhwe.js +3 -0
  136. package/dist/tui-CFSmzhsm.js +2 -0
  137. package/dist/{tui-backend-_Pn3Byj-.js → tui-backend-Bm_t5G7x.js} +4 -4
  138. package/dist/{tui-cli-CAiC39zd.js → tui-cli-9Ny23hmo.js} +1 -1
  139. package/dist/tui-ink-run-CuExfFLV.js +2 -0
  140. package/dist/{tui-ink-run-ChXEGj1h.js → tui-ink-run-qNL49iQn.js} +17 -1
  141. package/package.json +6 -410
  142. package/CHANGELOG.md +0 -42
  143. package/THIRD_PARTY_NOTICES.md +0 -37
  144. package/dist/register.subclis-Bsvdh8RI.js +0 -3
  145. package/dist/tui-C733Qov0.js +0 -2
  146. package/dist/tui-DqbscVN5.js +0 -3
  147. package/dist/tui-ink-run-D4mSfLHj.js +0 -2
  148. package/docs/.i18n/README.md +0 -81
  149. package/docs/.i18n/ar-navigation.json +0 -18
  150. package/docs/.i18n/de-navigation.json +0 -18
  151. package/docs/.i18n/es-navigation.json +0 -18
  152. package/docs/.i18n/fr-navigation.json +0 -18
  153. package/docs/.i18n/glossary.ar.json +0 -78
  154. package/docs/.i18n/glossary.de.json +0 -78
  155. package/docs/.i18n/glossary.es.json +0 -78
  156. package/docs/.i18n/glossary.fa.json +0 -78
  157. package/docs/.i18n/glossary.fr.json +0 -78
  158. package/docs/.i18n/glossary.id.json +0 -78
  159. package/docs/.i18n/glossary.it.json +0 -78
  160. package/docs/.i18n/glossary.ja-JP.json +0 -98
  161. package/docs/.i18n/glossary.ko.json +0 -78
  162. package/docs/.i18n/glossary.nl.json +0 -78
  163. package/docs/.i18n/glossary.pl.json +0 -78
  164. package/docs/.i18n/glossary.pt-BR.json +0 -78
  165. package/docs/.i18n/glossary.th.json +0 -78
  166. package/docs/.i18n/glossary.tr.json +0 -78
  167. package/docs/.i18n/glossary.uk.json +0 -78
  168. package/docs/.i18n/glossary.vi.json +0 -78
  169. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  170. package/docs/.i18n/glossary.zh-TW.json +0 -78
  171. package/docs/.i18n/id-navigation.json +0 -18
  172. package/docs/.i18n/it-navigation.json +0 -18
  173. package/docs/.i18n/ja-navigation.json +0 -18
  174. package/docs/.i18n/ko-navigation.json +0 -18
  175. package/docs/.i18n/pl-navigation.json +0 -18
  176. package/docs/.i18n/pt-BR-navigation.json +0 -18
  177. package/docs/.i18n/tr-navigation.json +0 -18
  178. package/docs/.i18n/translation-workflow.md +0 -111
  179. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  180. package/docs/AGENTS.md +0 -36
  181. package/docs/CLAUDE.md +0 -1
  182. package/docs/agent-runtime-architecture.md +0 -48
  183. package/docs/announcements/bluebubbles-imessage.md +0 -79
  184. package/docs/auth-credential-semantics.md +0 -124
  185. package/docs/automation/auth-monitoring.md +0 -11
  186. package/docs/automation/clawflow.md +0 -12
  187. package/docs/automation/cron-jobs.md +0 -534
  188. package/docs/automation/cron-vs-heartbeat.md +0 -11
  189. package/docs/automation/gmail-pubsub.md +0 -11
  190. package/docs/automation/hooks.md +0 -387
  191. package/docs/automation/index.md +0 -135
  192. package/docs/automation/poll.md +0 -12
  193. package/docs/automation/standing-orders.md +0 -250
  194. package/docs/automation/taskflow.md +0 -155
  195. package/docs/automation/tasks.md +0 -374
  196. package/docs/automation/troubleshooting.md +0 -12
  197. package/docs/automation/webhook.md +0 -12
  198. package/docs/brave-search.md +0 -11
  199. package/docs/channels/access-groups.md +0 -201
  200. package/docs/channels/ambient-room-events.md +0 -214
  201. package/docs/channels/bot-loop-protection.md +0 -131
  202. package/docs/channels/broadcast-groups.md +0 -472
  203. package/docs/channels/channel-routing.md +0 -162
  204. package/docs/channels/clickclack.md +0 -138
  205. package/docs/channels/discord.md +0 -1758
  206. package/docs/channels/feishu.md +0 -650
  207. package/docs/channels/googlechat.md +0 -284
  208. package/docs/channels/group-messages.md +0 -95
  209. package/docs/channels/groups.md +0 -524
  210. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  211. package/docs/channels/imessage.md +0 -839
  212. package/docs/channels/index.md +0 -64
  213. package/docs/channels/irc.md +0 -253
  214. package/docs/channels/line.md +0 -243
  215. package/docs/channels/location.md +0 -71
  216. package/docs/channels/matrix-migration.md +0 -370
  217. package/docs/channels/matrix-presentation.md +0 -77
  218. package/docs/channels/matrix-push-rules.md +0 -150
  219. package/docs/channels/matrix.md +0 -921
  220. package/docs/channels/mattermost.md +0 -542
  221. package/docs/channels/msteams.md +0 -1096
  222. package/docs/channels/nextcloud-talk.md +0 -176
  223. package/docs/channels/nostr.md +0 -253
  224. package/docs/channels/pairing.md +0 -214
  225. package/docs/channels/qqbot.md +0 -314
  226. package/docs/channels/signal.md +0 -417
  227. package/docs/channels/slack.md +0 -1623
  228. package/docs/channels/synology-chat.md +0 -187
  229. package/docs/channels/telegram.md +0 -1124
  230. package/docs/channels/tlon.md +0 -296
  231. package/docs/channels/troubleshooting.md +0 -162
  232. package/docs/channels/twitch.md +0 -431
  233. package/docs/channels/wechat.md +0 -171
  234. package/docs/channels/whatsapp.md +0 -796
  235. package/docs/channels/yuanbao.md +0 -416
  236. package/docs/channels/zalo.md +0 -253
  237. package/docs/channels/zalouser.md +0 -217
  238. package/docs/ci.md +0 -657
  239. package/docs/clawhub/publishing.md +0 -96
  240. package/docs/cli/acp.md +0 -370
  241. package/docs/cli/agent.md +0 -109
  242. package/docs/cli/agents.md +0 -253
  243. package/docs/cli/approvals.md +0 -190
  244. package/docs/cli/backup.md +0 -98
  245. package/docs/cli/browser.md +0 -307
  246. package/docs/cli/channels.md +0 -154
  247. package/docs/cli/clawbot.md +0 -25
  248. package/docs/cli/commitments.md +0 -90
  249. package/docs/cli/completion.md +0 -39
  250. package/docs/cli/config.md +0 -504
  251. package/docs/cli/configure.md +0 -77
  252. package/docs/cli/crestodian.md +0 -337
  253. package/docs/cli/cron.md +0 -304
  254. package/docs/cli/daemon.md +0 -67
  255. package/docs/cli/dashboard.md +0 -33
  256. package/docs/cli/devices.md +0 -240
  257. package/docs/cli/directory.md +0 -68
  258. package/docs/cli/dns.md +0 -53
  259. package/docs/cli/docs.md +0 -63
  260. package/docs/cli/doctor.md +0 -241
  261. package/docs/cli/flows.md +0 -52
  262. package/docs/cli/gateway.md +0 -572
  263. package/docs/cli/health.md +0 -43
  264. package/docs/cli/hooks.md +0 -345
  265. package/docs/cli/index.md +0 -400
  266. package/docs/cli/infer.md +0 -364
  267. package/docs/cli/logs.md +0 -68
  268. package/docs/cli/mcp.md +0 -529
  269. package/docs/cli/memory.md +0 -183
  270. package/docs/cli/message.md +0 -317
  271. package/docs/cli/migrate.md +0 -334
  272. package/docs/cli/models.md +0 -239
  273. package/docs/cli/node.md +0 -177
  274. package/docs/cli/nodes.md +0 -76
  275. package/docs/cli/onboard.md +0 -250
  276. package/docs/cli/pairing.md +0 -77
  277. package/docs/cli/path.md +0 -511
  278. package/docs/cli/plugins.md +0 -459
  279. package/docs/cli/policy.md +0 -886
  280. package/docs/cli/proxy.md +0 -89
  281. package/docs/cli/qr.md +0 -56
  282. package/docs/cli/reset.md +0 -39
  283. package/docs/cli/sandbox.md +0 -208
  284. package/docs/cli/secrets.md +0 -202
  285. package/docs/cli/security.md +0 -136
  286. package/docs/cli/sessions.md +0 -164
  287. package/docs/cli/setup.md +0 -59
  288. package/docs/cli/skills.md +0 -122
  289. package/docs/cli/status.md +0 -45
  290. package/docs/cli/system.md +0 -89
  291. package/docs/cli/tasks.md +0 -111
  292. package/docs/cli/transcripts.md +0 -151
  293. package/docs/cli/tui.md +0 -91
  294. package/docs/cli/uninstall.md +0 -44
  295. package/docs/cli/update.md +0 -243
  296. package/docs/cli/voicecall.md +0 -204
  297. package/docs/cli/webhooks.md +0 -117
  298. package/docs/cli/wiki.md +0 -256
  299. package/docs/concepts/active-memory.md +0 -856
  300. package/docs/concepts/agent-loop.md +0 -185
  301. package/docs/concepts/agent-runtimes.md +0 -276
  302. package/docs/concepts/agent-workspace.md +0 -230
  303. package/docs/concepts/agent.md +0 -140
  304. package/docs/concepts/architecture.md +0 -154
  305. package/docs/concepts/channel-docking.md +0 -145
  306. package/docs/concepts/commitments.md +0 -150
  307. package/docs/concepts/compaction.md +0 -203
  308. package/docs/concepts/context-engine.md +0 -347
  309. package/docs/concepts/context.md +0 -199
  310. package/docs/concepts/delegate-architecture.md +0 -319
  311. package/docs/concepts/dreaming.md +0 -264
  312. package/docs/concepts/experimental-features.md +0 -109
  313. package/docs/concepts/features.md +0 -91
  314. package/docs/concepts/fengming-sdk.md +0 -323
  315. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  316. package/docs/concepts/mantis.md +0 -744
  317. package/docs/concepts/markdown-formatting.md +0 -139
  318. package/docs/concepts/memory-builtin.md +0 -148
  319. package/docs/concepts/memory-honcho.md +0 -144
  320. package/docs/concepts/memory-qmd.md +0 -271
  321. package/docs/concepts/memory-search.md +0 -167
  322. package/docs/concepts/memory.md +0 -299
  323. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  324. package/docs/concepts/messages.md +0 -214
  325. package/docs/concepts/model-failover.md +0 -384
  326. package/docs/concepts/model-providers.md +0 -719
  327. package/docs/concepts/models.md +0 -371
  328. package/docs/concepts/multi-agent.md +0 -625
  329. package/docs/concepts/oauth.md +0 -198
  330. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  331. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  332. package/docs/concepts/presence.md +0 -117
  333. package/docs/concepts/progress-drafts.md +0 -406
  334. package/docs/concepts/qa-e2e-automation.md +0 -947
  335. package/docs/concepts/qa-matrix.md +0 -139
  336. package/docs/concepts/queue-steering.md +0 -90
  337. package/docs/concepts/queue.md +0 -136
  338. package/docs/concepts/retry.md +0 -86
  339. package/docs/concepts/session-pruning.md +0 -104
  340. package/docs/concepts/session-tool.md +0 -188
  341. package/docs/concepts/session.md +0 -164
  342. package/docs/concepts/soul.md +0 -116
  343. package/docs/concepts/streaming.md +0 -257
  344. package/docs/concepts/system-prompt.md +0 -328
  345. package/docs/concepts/timezone.md +0 -47
  346. package/docs/concepts/typebox.md +0 -309
  347. package/docs/concepts/typing-indicators.md +0 -88
  348. package/docs/concepts/usage-tracking.md +0 -66
  349. package/docs/date-time.md +0 -126
  350. package/docs/debug/node-issue.md +0 -90
  351. package/docs/diagnostics/flags.md +0 -182
  352. package/docs/docs.json +0 -1862
  353. package/docs/fengming-agent-runtime.md +0 -82
  354. package/docs/gateway/authentication.md +0 -256
  355. package/docs/gateway/background-process.md +0 -147
  356. package/docs/gateway/bonjour.md +0 -303
  357. package/docs/gateway/bridge-protocol.md +0 -97
  358. package/docs/gateway/cli-backends.md +0 -439
  359. package/docs/gateway/config-agents.md +0 -1525
  360. package/docs/gateway/config-channels.md +0 -945
  361. package/docs/gateway/config-tools.md +0 -774
  362. package/docs/gateway/configuration-examples.md +0 -704
  363. package/docs/gateway/configuration-reference.md +0 -1391
  364. package/docs/gateway/configuration.md +0 -739
  365. package/docs/gateway/diagnostics.md +0 -213
  366. package/docs/gateway/discovery.md +0 -154
  367. package/docs/gateway/doctor.md +0 -575
  368. package/docs/gateway/gateway-lock.md +0 -37
  369. package/docs/gateway/health.md +0 -73
  370. package/docs/gateway/heartbeat.md +0 -498
  371. package/docs/gateway/index.md +0 -383
  372. package/docs/gateway/local-model-services.md +0 -205
  373. package/docs/gateway/local-models.md +0 -355
  374. package/docs/gateway/logging.md +0 -149
  375. package/docs/gateway/multiple-gateways.md +0 -178
  376. package/docs/gateway/network-model.md +0 -15
  377. package/docs/gateway/openai-http-api.md +0 -378
  378. package/docs/gateway/openresponses-http-api.md +0 -347
  379. package/docs/gateway/openshell.md +0 -316
  380. package/docs/gateway/opentelemetry.md +0 -433
  381. package/docs/gateway/operator-scopes.md +0 -119
  382. package/docs/gateway/pairing.md +0 -207
  383. package/docs/gateway/prometheus.md +0 -249
  384. package/docs/gateway/protocol.md +0 -826
  385. package/docs/gateway/remote-gateway-readme.md +0 -169
  386. package/docs/gateway/remote.md +0 -280
  387. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  388. package/docs/gateway/sandboxing.md +0 -546
  389. package/docs/gateway/secrets-plan-contract.md +0 -159
  390. package/docs/gateway/secrets.md +0 -805
  391. package/docs/gateway/security/audit-checks.md +0 -127
  392. package/docs/gateway/security/exposure-runbook.md +0 -212
  393. package/docs/gateway/security/index.md +0 -1343
  394. package/docs/gateway/security/secure-file-operations.md +0 -76
  395. package/docs/gateway/security/shrinkwrap.md +0 -111
  396. package/docs/gateway/tailscale.md +0 -156
  397. package/docs/gateway/tools-invoke-http-api.md +0 -169
  398. package/docs/gateway/troubleshooting.md +0 -877
  399. package/docs/gateway/trusted-proxy-auth.md +0 -483
  400. package/docs/help/debugging.md +0 -341
  401. package/docs/help/environment.md +0 -233
  402. package/docs/help/faq-first-run.md +0 -870
  403. package/docs/help/faq-models.md +0 -556
  404. package/docs/help/faq.md +0 -2041
  405. package/docs/help/index.md +0 -39
  406. package/docs/help/scripts.md +0 -56
  407. package/docs/help/testing-live.md +0 -587
  408. package/docs/help/testing-updates-plugins.md +0 -299
  409. package/docs/help/testing.md +0 -977
  410. package/docs/help/troubleshooting.md +0 -449
  411. package/docs/index.md +0 -196
  412. package/docs/install/ansible.md +0 -233
  413. package/docs/install/azure.md +0 -315
  414. package/docs/install/bun.md +0 -59
  415. package/docs/install/clawdock.md +0 -112
  416. package/docs/install/development-channels.md +0 -148
  417. package/docs/install/digitalocean.md +0 -174
  418. package/docs/install/docker-vm-runtime.md +0 -154
  419. package/docs/install/docker.md +0 -564
  420. package/docs/install/exe-dev.md +0 -201
  421. package/docs/install/fly.md +0 -524
  422. package/docs/install/gcp.md +0 -418
  423. package/docs/install/hetzner.md +0 -285
  424. package/docs/install/hostinger.md +0 -98
  425. package/docs/install/index.md +0 -232
  426. package/docs/install/installer.md +0 -447
  427. package/docs/install/kubernetes.md +0 -196
  428. package/docs/install/macos-vm.md +0 -281
  429. package/docs/install/migrating-claude.md +0 -165
  430. package/docs/install/migrating-hermes.md +0 -178
  431. package/docs/install/migrating.md +0 -137
  432. package/docs/install/nix.md +0 -112
  433. package/docs/install/node.md +0 -142
  434. package/docs/install/northflank.mdx +0 -44
  435. package/docs/install/oracle.md +0 -218
  436. package/docs/install/podman.md +0 -216
  437. package/docs/install/railway.mdx +0 -92
  438. package/docs/install/raspberry-pi.md +0 -234
  439. package/docs/install/render.mdx +0 -167
  440. package/docs/install/uninstall.md +0 -131
  441. package/docs/install/updating.md +0 -284
  442. package/docs/install/upstash.md +0 -96
  443. package/docs/logging.md +0 -320
  444. package/docs/nav-tabs-underline.js +0 -100
  445. package/docs/network.md +0 -72
  446. package/docs/nodes/audio.md +0 -216
  447. package/docs/nodes/camera.md +0 -166
  448. package/docs/nodes/images.md +0 -77
  449. package/docs/nodes/index.md +0 -439
  450. package/docs/nodes/location-command.md +0 -102
  451. package/docs/nodes/media-understanding.md +0 -495
  452. package/docs/nodes/talk.md +0 -160
  453. package/docs/nodes/troubleshooting.md +0 -123
  454. package/docs/nodes/voicewake.md +0 -93
  455. package/docs/perplexity.md +0 -11
  456. package/docs/plan/codex-context-engine-harness.md +0 -624
  457. package/docs/plan/ui-channels.md +0 -284
  458. package/docs/platforms/digitalocean.md +0 -12
  459. package/docs/platforms/easyrunner.md +0 -109
  460. package/docs/platforms/index.md +0 -51
  461. package/docs/platforms/linux.md +0 -141
  462. package/docs/platforms/mac/bundled-gateway.md +0 -79
  463. package/docs/platforms/mac/canvas.md +0 -128
  464. package/docs/platforms/mac/child-process.md +0 -72
  465. package/docs/platforms/mac/dev-setup.md +0 -112
  466. package/docs/platforms/mac/health.md +0 -39
  467. package/docs/platforms/mac/icon.md +0 -36
  468. package/docs/platforms/mac/logging.md +0 -62
  469. package/docs/platforms/mac/menu-bar.md +0 -93
  470. package/docs/platforms/mac/peekaboo.md +0 -96
  471. package/docs/platforms/mac/permissions.md +0 -73
  472. package/docs/platforms/mac/remote.md +0 -123
  473. package/docs/platforms/mac/signing.md +0 -52
  474. package/docs/platforms/mac/skills.md +0 -43
  475. package/docs/platforms/mac/voice-overlay.md +0 -66
  476. package/docs/platforms/mac/voicewake.md +0 -73
  477. package/docs/platforms/mac/webchat.md +0 -54
  478. package/docs/platforms/mac/xpc.md +0 -66
  479. package/docs/platforms/oracle.md +0 -12
  480. package/docs/platforms/raspberry-pi.md +0 -13
  481. package/docs/platforms/windows.md +0 -286
  482. package/docs/plugins/adding-capabilities.md +0 -146
  483. package/docs/plugins/admin-http-rpc.md +0 -216
  484. package/docs/plugins/agent-tools.md +0 -13
  485. package/docs/plugins/architecture-internals.md +0 -1196
  486. package/docs/plugins/architecture.md +0 -483
  487. package/docs/plugins/building-extensions.md +0 -13
  488. package/docs/plugins/building-plugins.md +0 -335
  489. package/docs/plugins/bundles.md +0 -310
  490. package/docs/plugins/cli-backend-plugins.md +0 -310
  491. package/docs/plugins/codex-computer-use.md +0 -297
  492. package/docs/plugins/codex-harness-reference.md +0 -470
  493. package/docs/plugins/codex-harness-runtime.md +0 -268
  494. package/docs/plugins/codex-harness.md +0 -780
  495. package/docs/plugins/codex-native-plugins.md +0 -276
  496. package/docs/plugins/community.md +0 -77
  497. package/docs/plugins/compatibility.md +0 -167
  498. package/docs/plugins/copilot.md +0 -356
  499. package/docs/plugins/dependency-resolution.md +0 -176
  500. package/docs/plugins/google-meet.md +0 -1737
  501. package/docs/plugins/hooks.md +0 -484
  502. package/docs/plugins/install-overrides.md +0 -80
  503. package/docs/plugins/manage-plugins.md +0 -210
  504. package/docs/plugins/manifest.md +0 -1457
  505. package/docs/plugins/memory-lancedb.md +0 -385
  506. package/docs/plugins/memory-wiki.md +0 -529
  507. package/docs/plugins/message-presentation.md +0 -473
  508. package/docs/plugins/oc-path.md +0 -166
  509. package/docs/plugins/plugin-inventory.md +0 -189
  510. package/docs/plugins/plugin-permission-requests.md +0 -193
  511. package/docs/plugins/reference/acpx.md +0 -23
  512. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  513. package/docs/plugins/reference/alibaba.md +0 -23
  514. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  515. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  516. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  517. package/docs/plugins/reference/anthropic.md +0 -23
  518. package/docs/plugins/reference/arcee.md +0 -23
  519. package/docs/plugins/reference/azure-speech.md +0 -23
  520. package/docs/plugins/reference/bonjour.md +0 -19
  521. package/docs/plugins/reference/brave.md +0 -23
  522. package/docs/plugins/reference/browser.md +0 -23
  523. package/docs/plugins/reference/byteplus.md +0 -19
  524. package/docs/plugins/reference/canvas.md +0 -19
  525. package/docs/plugins/reference/cerebras.md +0 -23
  526. package/docs/plugins/reference/chutes.md +0 -23
  527. package/docs/plugins/reference/clickclack.md +0 -23
  528. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  529. package/docs/plugins/reference/codex-supervisor.md +0 -27
  530. package/docs/plugins/reference/codex.md +0 -23
  531. package/docs/plugins/reference/comfy.md +0 -23
  532. package/docs/plugins/reference/copilot-proxy.md +0 -19
  533. package/docs/plugins/reference/copilot.md +0 -23
  534. package/docs/plugins/reference/deepgram.md +0 -23
  535. package/docs/plugins/reference/deepinfra.md +0 -23
  536. package/docs/plugins/reference/deepseek.md +0 -23
  537. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  538. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  539. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  540. package/docs/plugins/reference/diffs.md +0 -19
  541. package/docs/plugins/reference/discord.md +0 -23
  542. package/docs/plugins/reference/document-extract.md +0 -23
  543. package/docs/plugins/reference/duckduckgo.md +0 -23
  544. package/docs/plugins/reference/elevenlabs.md +0 -23
  545. package/docs/plugins/reference/exa.md +0 -23
  546. package/docs/plugins/reference/fal.md +0 -23
  547. package/docs/plugins/reference/feishu.md +0 -23
  548. package/docs/plugins/reference/file-transfer.md +0 -19
  549. package/docs/plugins/reference/firecrawl.md +0 -23
  550. package/docs/plugins/reference/fireworks.md +0 -23
  551. package/docs/plugins/reference/github-copilot.md +0 -23
  552. package/docs/plugins/reference/gmi.md +0 -23
  553. package/docs/plugins/reference/google-meet.md +0 -23
  554. package/docs/plugins/reference/google.md +0 -23
  555. package/docs/plugins/reference/googlechat.md +0 -23
  556. package/docs/plugins/reference/gradium.md +0 -23
  557. package/docs/plugins/reference/groq.md +0 -23
  558. package/docs/plugins/reference/huggingface.md +0 -23
  559. package/docs/plugins/reference/imessage.md +0 -23
  560. package/docs/plugins/reference/inworld.md +0 -23
  561. package/docs/plugins/reference/irc.md +0 -23
  562. package/docs/plugins/reference/kilocode.md +0 -23
  563. package/docs/plugins/reference/kimi.md +0 -23
  564. package/docs/plugins/reference/line.md +0 -23
  565. package/docs/plugins/reference/litellm.md +0 -23
  566. package/docs/plugins/reference/llm-task.md +0 -19
  567. package/docs/plugins/reference/lmstudio.md +0 -23
  568. package/docs/plugins/reference/lobster.md +0 -19
  569. package/docs/plugins/reference/matrix.md +0 -23
  570. package/docs/plugins/reference/mattermost.md +0 -23
  571. package/docs/plugins/reference/memory-core.md +0 -19
  572. package/docs/plugins/reference/memory-lancedb.md +0 -23
  573. package/docs/plugins/reference/memory-wiki.md +0 -23
  574. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  575. package/docs/plugins/reference/microsoft.md +0 -19
  576. package/docs/plugins/reference/migrate-claude.md +0 -19
  577. package/docs/plugins/reference/migrate-hermes.md +0 -19
  578. package/docs/plugins/reference/minimax.md +0 -23
  579. package/docs/plugins/reference/mistral.md +0 -23
  580. package/docs/plugins/reference/moonshot.md +0 -23
  581. package/docs/plugins/reference/msteams.md +0 -23
  582. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  583. package/docs/plugins/reference/nostr.md +0 -23
  584. package/docs/plugins/reference/novita.md +0 -23
  585. package/docs/plugins/reference/nvidia.md +0 -23
  586. package/docs/plugins/reference/oc-path.md +0 -23
  587. package/docs/plugins/reference/ollama.md +0 -23
  588. package/docs/plugins/reference/open-prose.md +0 -19
  589. package/docs/plugins/reference/openai.md +0 -23
  590. package/docs/plugins/reference/opencode-go.md +0 -23
  591. package/docs/plugins/reference/opencode.md +0 -23
  592. package/docs/plugins/reference/openrouter.md +0 -23
  593. package/docs/plugins/reference/openshell.md +0 -19
  594. package/docs/plugins/reference/perplexity.md +0 -23
  595. package/docs/plugins/reference/pixverse.md +0 -23
  596. package/docs/plugins/reference/policy.md +0 -72
  597. package/docs/plugins/reference/qa-channel.md +0 -23
  598. package/docs/plugins/reference/qa-lab.md +0 -19
  599. package/docs/plugins/reference/qa-matrix.md +0 -19
  600. package/docs/plugins/reference/qianfan.md +0 -23
  601. package/docs/plugins/reference/qqbot.md +0 -23
  602. package/docs/plugins/reference/qwen.md +0 -23
  603. package/docs/plugins/reference/runway.md +0 -23
  604. package/docs/plugins/reference/searxng.md +0 -19
  605. package/docs/plugins/reference/senseaudio.md +0 -23
  606. package/docs/plugins/reference/sglang.md +0 -23
  607. package/docs/plugins/reference/signal.md +0 -23
  608. package/docs/plugins/reference/skill-workshop.md +0 -23
  609. package/docs/plugins/reference/slack.md +0 -23
  610. package/docs/plugins/reference/stepfun.md +0 -23
  611. package/docs/plugins/reference/synology-chat.md +0 -23
  612. package/docs/plugins/reference/synthetic.md +0 -23
  613. package/docs/plugins/reference/tavily.md +0 -23
  614. package/docs/plugins/reference/telegram.md +0 -23
  615. package/docs/plugins/reference/tencent.md +0 -23
  616. package/docs/plugins/reference/tlon.md +0 -23
  617. package/docs/plugins/reference/together.md +0 -23
  618. package/docs/plugins/reference/tokenjuice.md +0 -23
  619. package/docs/plugins/reference/tts-local-cli.md +0 -19
  620. package/docs/plugins/reference/twitch.md +0 -23
  621. package/docs/plugins/reference/venice.md +0 -23
  622. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  623. package/docs/plugins/reference/vllm.md +0 -23
  624. package/docs/plugins/reference/voice-call.md +0 -23
  625. package/docs/plugins/reference/volcengine.md +0 -23
  626. package/docs/plugins/reference/voyage.md +0 -19
  627. package/docs/plugins/reference/vydra.md +0 -23
  628. package/docs/plugins/reference/web-readability.md +0 -19
  629. package/docs/plugins/reference/webhooks.md +0 -23
  630. package/docs/plugins/reference/whatsapp.md +0 -23
  631. package/docs/plugins/reference/workboard.md +0 -23
  632. package/docs/plugins/reference/xai.md +0 -23
  633. package/docs/plugins/reference/xiaomi.md +0 -23
  634. package/docs/plugins/reference/zai.md +0 -23
  635. package/docs/plugins/reference/zalo.md +0 -23
  636. package/docs/plugins/reference/zalouser.md +0 -24
  637. package/docs/plugins/reference.md +0 -145
  638. package/docs/plugins/sdk-agent-harness.md +0 -338
  639. package/docs/plugins/sdk-channel-inbound.md +0 -70
  640. package/docs/plugins/sdk-channel-ingress.md +0 -137
  641. package/docs/plugins/sdk-channel-message.md +0 -18
  642. package/docs/plugins/sdk-channel-outbound.md +0 -113
  643. package/docs/plugins/sdk-channel-plugins.md +0 -765
  644. package/docs/plugins/sdk-channel-turn.md +0 -9
  645. package/docs/plugins/sdk-entrypoints.md +0 -344
  646. package/docs/plugins/sdk-migration.md +0 -979
  647. package/docs/plugins/sdk-overview.md +0 -511
  648. package/docs/plugins/sdk-provider-plugins.md +0 -846
  649. package/docs/plugins/sdk-runtime.md +0 -676
  650. package/docs/plugins/sdk-setup.md +0 -550
  651. package/docs/plugins/sdk-subpaths.md +0 -391
  652. package/docs/plugins/sdk-testing.md +0 -403
  653. package/docs/plugins/skill-workshop.md +0 -713
  654. package/docs/plugins/tool-plugins.md +0 -411
  655. package/docs/plugins/voice-call.md +0 -942
  656. package/docs/plugins/webhooks.md +0 -192
  657. package/docs/plugins/workboard.md +0 -252
  658. package/docs/plugins/zalouser.md +0 -86
  659. package/docs/prose.md +0 -137
  660. package/docs/providers/alibaba.md +0 -158
  661. package/docs/providers/anthropic.md +0 -381
  662. package/docs/providers/arcee.md +0 -144
  663. package/docs/providers/azure-speech.md +0 -119
  664. package/docs/providers/bedrock-mantle.md +0 -211
  665. package/docs/providers/bedrock.md +0 -414
  666. package/docs/providers/cerebras.md +0 -130
  667. package/docs/providers/chutes.md +0 -153
  668. package/docs/providers/claude-max-api-proxy.md +0 -191
  669. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  670. package/docs/providers/comfy.md +0 -362
  671. package/docs/providers/deepgram.md +0 -184
  672. package/docs/providers/deepinfra.md +0 -92
  673. package/docs/providers/deepseek.md +0 -146
  674. package/docs/providers/ds4.md +0 -309
  675. package/docs/providers/elevenlabs.md +0 -130
  676. package/docs/providers/fal.md +0 -240
  677. package/docs/providers/fireworks.md +0 -144
  678. package/docs/providers/github-copilot.md +0 -257
  679. package/docs/providers/gmi.md +0 -92
  680. package/docs/providers/google.md +0 -472
  681. package/docs/providers/gradium.md +0 -123
  682. package/docs/providers/groq.md +0 -171
  683. package/docs/providers/huggingface.md +0 -235
  684. package/docs/providers/index.md +0 -105
  685. package/docs/providers/inferrs.md +0 -272
  686. package/docs/providers/inworld.md +0 -120
  687. package/docs/providers/kilocode.md +0 -135
  688. package/docs/providers/litellm.md +0 -234
  689. package/docs/providers/lmstudio.md +0 -224
  690. package/docs/providers/minimax.md +0 -505
  691. package/docs/providers/mistral.md +0 -235
  692. package/docs/providers/models.md +0 -64
  693. package/docs/providers/moonshot.md +0 -413
  694. package/docs/providers/novita.md +0 -92
  695. package/docs/providers/nvidia.md +0 -158
  696. package/docs/providers/ollama-cloud.md +0 -115
  697. package/docs/providers/ollama.md +0 -1225
  698. package/docs/providers/openai.md +0 -1093
  699. package/docs/providers/opencode-go.md +0 -123
  700. package/docs/providers/opencode.md +0 -149
  701. package/docs/providers/openrouter.md +0 -349
  702. package/docs/providers/perplexity-provider.md +0 -123
  703. package/docs/providers/pixverse.md +0 -165
  704. package/docs/providers/qianfan.md +0 -132
  705. package/docs/providers/qwen-oauth.md +0 -115
  706. package/docs/providers/qwen.md +0 -364
  707. package/docs/providers/runway.md +0 -103
  708. package/docs/providers/senseaudio.md +0 -68
  709. package/docs/providers/sglang.md +0 -161
  710. package/docs/providers/stepfun.md +0 -229
  711. package/docs/providers/synthetic.md +0 -154
  712. package/docs/providers/tencent.md +0 -130
  713. package/docs/providers/together.md +0 -140
  714. package/docs/providers/venice.md +0 -312
  715. package/docs/providers/vercel-ai-gateway.md +0 -128
  716. package/docs/providers/vllm.md +0 -407
  717. package/docs/providers/volcengine.md +0 -199
  718. package/docs/providers/vydra.md +0 -180
  719. package/docs/providers/xai.md +0 -571
  720. package/docs/providers/xiaomi.md +0 -262
  721. package/docs/providers/zai.md +0 -224
  722. package/docs/refactor/access.md +0 -9
  723. package/docs/refactor/acp.md +0 -298
  724. package/docs/refactor/canvas.md +0 -131
  725. package/docs/refactor/database-first.md +0 -2256
  726. package/docs/refactor/ingress-core.md +0 -341
  727. package/docs/reference/AGENTS.default.md +0 -131
  728. package/docs/reference/RELEASING.md +0 -799
  729. package/docs/reference/api-usage-costs.md +0 -208
  730. package/docs/reference/application-modernization-plan.md +0 -208
  731. package/docs/reference/code-mode.md +0 -773
  732. package/docs/reference/credits.md +0 -33
  733. package/docs/reference/device-models.md +0 -50
  734. package/docs/reference/fengming-sdk-api-design.md +0 -390
  735. package/docs/reference/full-release-validation.md +0 -202
  736. package/docs/reference/memory-config.md +0 -604
  737. package/docs/reference/prompt-caching.md +0 -358
  738. package/docs/reference/release-performance-sweep.md +0 -360
  739. package/docs/reference/rich-output-protocol.md +0 -101
  740. package/docs/reference/rpc.md +0 -43
  741. package/docs/reference/secret-placeholder-conventions.md +0 -33
  742. package/docs/reference/secretref-credential-surface.md +0 -159
  743. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  744. package/docs/reference/session-management-compaction.md +0 -474
  745. package/docs/reference/templates/AGENTS.dev.md +0 -90
  746. package/docs/reference/templates/AGENTS.md +0 -227
  747. package/docs/reference/templates/BOOT.md +0 -16
  748. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  749. package/docs/reference/templates/CLAUDE.md +0 -1
  750. package/docs/reference/templates/HEARTBEAT.md +0 -24
  751. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  752. package/docs/reference/templates/IDENTITY.md +0 -34
  753. package/docs/reference/templates/SOUL.dev.md +0 -82
  754. package/docs/reference/templates/SOUL.md +0 -49
  755. package/docs/reference/templates/TOOLS.dev.md +0 -29
  756. package/docs/reference/templates/TOOLS.md +0 -51
  757. package/docs/reference/templates/USER.dev.md +0 -23
  758. package/docs/reference/templates/USER.md +0 -28
  759. package/docs/reference/test.md +0 -247
  760. package/docs/reference/token-use.md +0 -246
  761. package/docs/reference/transcript-hygiene.md +0 -214
  762. package/docs/reference/wizard.md +0 -252
  763. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  764. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  765. package/docs/security/formal-verification.md +0 -170
  766. package/docs/security/incident-response.md +0 -59
  767. package/docs/security/network-proxy.md +0 -268
  768. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  769. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  770. package/docs/specs/claw-supervisor.md +0 -247
  771. package/docs/start/bootstrapping.md +0 -49
  772. package/docs/start/docs-directory.md +0 -69
  773. package/docs/start/fengming.md +0 -252
  774. package/docs/start/getting-started.md +0 -152
  775. package/docs/start/hubs.md +0 -201
  776. package/docs/start/lore.md +0 -223
  777. package/docs/start/onboarding-overview.md +0 -72
  778. package/docs/start/onboarding.md +0 -98
  779. package/docs/start/quickstart.md +0 -25
  780. package/docs/start/setup.md +0 -178
  781. package/docs/start/showcase.md +0 -363
  782. package/docs/start/wizard-cli-automation.md +0 -232
  783. package/docs/start/wizard-cli-reference.md +0 -331
  784. package/docs/start/wizard.md +0 -141
  785. package/docs/style.css +0 -137
  786. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  787. package/docs/tools/acp-agents-setup.md +0 -351
  788. package/docs/tools/acp-agents.md +0 -854
  789. package/docs/tools/agent-send.md +0 -130
  790. package/docs/tools/apply-patch.md +0 -64
  791. package/docs/tools/brave-search.md +0 -139
  792. package/docs/tools/browser-control.md +0 -391
  793. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  794. package/docs/tools/browser-login.md +0 -77
  795. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  796. package/docs/tools/browser.md +0 -810
  797. package/docs/tools/btw.md +0 -159
  798. package/docs/tools/capability-cookbook.md +0 -12
  799. package/docs/tools/clawhub.md +0 -5
  800. package/docs/tools/code-execution.md +0 -173
  801. package/docs/tools/creating-skills.md +0 -158
  802. package/docs/tools/diffs.md +0 -525
  803. package/docs/tools/duckduckgo-search.md +0 -109
  804. package/docs/tools/elevated.md +0 -128
  805. package/docs/tools/exa-search.md +0 -152
  806. package/docs/tools/exec-approvals-advanced.md +0 -444
  807. package/docs/tools/exec-approvals.md +0 -494
  808. package/docs/tools/exec.md +0 -285
  809. package/docs/tools/firecrawl.md +0 -155
  810. package/docs/tools/gemini-search.md +0 -114
  811. package/docs/tools/goal.md +0 -217
  812. package/docs/tools/grok-search.md +0 -129
  813. package/docs/tools/image-generation.md +0 -493
  814. package/docs/tools/index.md +0 -178
  815. package/docs/tools/kimi-search.md +0 -105
  816. package/docs/tools/llm-task.md +0 -137
  817. package/docs/tools/lobster.md +0 -365
  818. package/docs/tools/loop-detection.md +0 -154
  819. package/docs/tools/media-overview.md +0 -160
  820. package/docs/tools/minimax-search.md +0 -102
  821. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  822. package/docs/tools/music-generation.md +0 -372
  823. package/docs/tools/ollama-search.md +0 -153
  824. package/docs/tools/pdf.md +0 -213
  825. package/docs/tools/perplexity-search.md +0 -220
  826. package/docs/tools/plugin.md +0 -363
  827. package/docs/tools/reactions.md +0 -100
  828. package/docs/tools/searxng-search.md +0 -141
  829. package/docs/tools/skills-config.md +0 -195
  830. package/docs/tools/skills.md +0 -569
  831. package/docs/tools/slash-commands.md +0 -487
  832. package/docs/tools/steer.md +0 -77
  833. package/docs/tools/subagents.md +0 -651
  834. package/docs/tools/tavily.md +0 -162
  835. package/docs/tools/thinking.md +0 -142
  836. package/docs/tools/tokenjuice.md +0 -84
  837. package/docs/tools/tool-search.md +0 -269
  838. package/docs/tools/trajectory.md +0 -229
  839. package/docs/tools/tts.md +0 -1009
  840. package/docs/tools/video-generation.md +0 -555
  841. package/docs/tools/web-fetch.md +0 -210
  842. package/docs/tools/web.md +0 -461
  843. package/docs/tts.md +0 -11
  844. package/docs/vps.md +0 -139
  845. package/docs/web/control-ui.md +0 -512
  846. package/docs/web/dashboard.md +0 -107
  847. package/docs/web/index.md +0 -133
  848. package/docs/web/tui.md +0 -250
  849. package/docs/web/webchat.md +0 -102
  850. package/npm-shrinkwrap.json +0 -12861
  851. package/patches/.gitkeep +0 -0
  852. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  853. package/pnpm-workspace.yaml +0 -120
  854. package/scripts/crabbox-wrapper.mjs +0 -2004
  855. package/scripts/lib/official-external-channel-catalog.json +0 -560
  856. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  857. package/scripts/lib/official-external-provider-catalog.json +0 -158
  858. package/scripts/lib/package-dist-imports.mjs +0 -171
  859. package/scripts/npm-runner.mjs +0 -91
  860. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  861. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  862. package/scripts/prepare-git-hooks.mjs +0 -72
  863. package/scripts/windows-cmd-helpers.mjs +0 -22
  864. package/skills/batch/SKILL.md +0 -118
  865. package/skills/code-review/SKILL.md +0 -107
  866. package/skills/debug/SKILL.md +0 -83
  867. package/skills/loop/SKILL.md +0 -118
  868. package/skills/run/SKILL.md +0 -79
  869. package/skills/run-skill-generator/SKILL.md +0 -179
  870. package/skills/verify/SKILL.md +0 -103
  871. package/src/agents/templates/HEARTBEAT.md +0 -3
@@ -1,1124 +0,0 @@
1
- ---
2
- summary: "Telegram bot support status, capabilities, and configuration"
3
- read_when:
4
- - Working on Telegram features or webhooks
5
- title: "Telegram"
6
- ---
7
-
8
- Production-ready for bot DMs and groups via grammY. Long polling is the default mode; webhook mode is optional.
9
-
10
- <CardGroup cols={3}>
11
- <Card title="Pairing" icon="link" href="/channels/pairing">
12
- Default DM policy for Telegram is pairing.
13
- </Card>
14
- <Card title="Channel troubleshooting" icon="wrench" href="/channels/troubleshooting">
15
- Cross-channel diagnostics and repair playbooks.
16
- </Card>
17
- <Card title="Gateway configuration" icon="settings" href="/gateway/configuration">
18
- Full channel config patterns and examples.
19
- </Card>
20
- </CardGroup>
21
-
22
- ## Quick setup
23
-
24
- <Steps>
25
- <Step title="Create the bot token in BotFather">
26
- Open Telegram and chat with **@BotFather** (confirm the handle is exactly `@BotFather`).
27
-
28
- Run `/newbot`, follow prompts, and save the token.
29
-
30
- </Step>
31
-
32
- <Step title="Configure token and DM policy">
33
-
34
- ```json5
35
- {
36
- channels: {
37
- telegram: {
38
- enabled: true,
39
- botToken: "123:abc",
40
- dmPolicy: "pairing",
41
- groups: { "*": { requireMention: true } },
42
- },
43
- },
44
- }
45
- ```
46
-
47
- Env fallback: `TELEGRAM_BOT_TOKEN=...` (default account only).
48
- Telegram does **not** use `fengming channels login telegram`; configure token in config/env, then start gateway.
49
-
50
- </Step>
51
-
52
- <Step title="Start gateway and approve first DM">
53
-
54
- ```bash
55
- fengming gateway
56
- fengming pairing list telegram
57
- fengming pairing approve telegram <CODE>
58
- ```
59
-
60
- Pairing codes expire after 1 hour.
61
-
62
- </Step>
63
-
64
- <Step title="Add the bot to a group">
65
- Add the bot to your group, then get both IDs that group access needs:
66
-
67
- - your Telegram user ID, used in `allowFrom` / `groupAllowFrom`
68
- - the Telegram group chat ID, used as the key under `channels.telegram.groups`
69
-
70
- For first-time setup, get the group chat ID from `fengming logs --follow`, a forwarded-ID bot, or Bot API `getUpdates`. After the group is allowed, `/whoami@<bot_username>` can confirm the user and group IDs.
71
-
72
- Negative Telegram supergroup IDs that start with `-100` are group chat IDs. Put them under `channels.telegram.groups`, not under `groupAllowFrom`.
73
-
74
- </Step>
75
- </Steps>
76
-
77
- <Note>
78
- Token resolution order is account-aware. In practice, config values win over env fallback, and `TELEGRAM_BOT_TOKEN` only applies to the default account.
79
- After a successful startup, FengMing caches the bot identity in the state directory for up to 24 hours so restarts can avoid an extra Telegram `getMe` call; changing or removing the token clears that cache.
80
- </Note>
81
-
82
- ## Telegram side settings
83
-
84
- <AccordionGroup>
85
- <Accordion title="Privacy mode and group visibility">
86
- Telegram bots default to **Privacy Mode**, which limits what group messages they receive.
87
-
88
- If the bot must see all group messages, either:
89
-
90
- - disable privacy mode via `/setprivacy`, or
91
- - make the bot a group admin.
92
-
93
- When toggling privacy mode, remove + re-add the bot in each group so Telegram applies the change.
94
-
95
- </Accordion>
96
-
97
- <Accordion title="Group permissions">
98
- Admin status is controlled in Telegram group settings.
99
-
100
- Admin bots receive all group messages, which is useful for always-on group behavior.
101
-
102
- </Accordion>
103
-
104
- <Accordion title="Helpful BotFather toggles">
105
-
106
- - `/setjoingroups` to allow/deny group adds
107
- - `/setprivacy` for group visibility behavior
108
-
109
- </Accordion>
110
- </AccordionGroup>
111
-
112
- ## Access control and activation
113
-
114
- <Tabs>
115
- <Tab title="DM policy">
116
- `channels.telegram.dmPolicy` controls direct message access:
117
-
118
- - `pairing` (default)
119
- - `allowlist` (requires at least one sender ID in `allowFrom`)
120
- - `open` (requires `allowFrom` to include `"*"`)
121
- - `disabled`
122
-
123
- `dmPolicy: "open"` with `allowFrom: ["*"]` lets any Telegram account that finds or guesses the bot username command the bot. Use it only for intentionally public bots with tightly restricted tools; one-owner bots should use `allowlist` with numeric user IDs.
124
-
125
- `channels.telegram.allowFrom` accepts numeric Telegram user IDs. `telegram:` / `tg:` prefixes are accepted and normalized.
126
- In multi-account configs, a restrictive top-level `channels.telegram.allowFrom` is treated as a safety boundary: account-level `allowFrom: ["*"]` entries do not make that account public unless the effective account allowlist still contains an explicit wildcard after merging.
127
- `dmPolicy: "allowlist"` with empty `allowFrom` blocks all DMs and is rejected by config validation.
128
- Setup asks for numeric user IDs only.
129
- If you upgraded and your config contains `@username` allowlist entries, run `fengming doctor --fix` to resolve them (best-effort; requires a Telegram bot token).
130
- If you previously relied on pairing-store allowlist files, `fengming doctor --fix` can recover entries into `channels.telegram.allowFrom` in allowlist flows (for example when `dmPolicy: "allowlist"` has no explicit IDs yet).
131
-
132
- For one-owner bots, prefer `dmPolicy: "allowlist"` with explicit numeric `allowFrom` IDs to keep access policy durable in config (instead of depending on previous pairing approvals).
133
-
134
- Common confusion: DM pairing approval does not mean "this sender is authorized everywhere".
135
- Pairing grants DM access. If no command owner exists yet, the first approved pairing also sets `commands.ownerAllowFrom` so owner-only commands and exec approvals have an explicit operator account.
136
- Group sender authorization still comes from explicit config allowlists.
137
- If you want "I am authorized once and both DMs and group commands work", put your numeric Telegram user ID in `channels.telegram.allowFrom`; for owner-only commands, make sure `commands.ownerAllowFrom` contains `telegram:<your user id>`.
138
-
139
- ### Finding your Telegram user ID
140
-
141
- Safer (no third-party bot):
142
-
143
- 1. DM your bot.
144
- 2. Run `fengming logs --follow`.
145
- 3. Read `from.id`.
146
-
147
- Official Bot API method:
148
-
149
- ```bash
150
- curl "https://api.telegram.org/bot<bot_token>/getUpdates"
151
- ```
152
-
153
- Third-party method (less private): `@userinfobot` or `@getidsbot`.
154
-
155
- </Tab>
156
-
157
- <Tab title="Group policy and allowlists">
158
- Two controls apply together:
159
-
160
- 1. **Which groups are allowed** (`channels.telegram.groups`)
161
- - no `groups` config:
162
- - with `groupPolicy: "open"`: any group can pass group-ID checks
163
- - with `groupPolicy: "allowlist"` (default): groups are blocked until you add `groups` entries (or `"*"`)
164
- - `groups` configured: acts as allowlist (explicit IDs or `"*"`)
165
-
166
- 2. **Which senders are allowed in groups** (`channels.telegram.groupPolicy`)
167
- - `open`
168
- - `allowlist` (default)
169
- - `disabled`
170
-
171
- `groupAllowFrom` is used for group sender filtering. If not set, Telegram falls back to `allowFrom`.
172
- `groupAllowFrom` entries should be numeric Telegram user IDs (`telegram:` / `tg:` prefixes are normalized).
173
- Do not put Telegram group or supergroup chat IDs in `groupAllowFrom`. Negative chat IDs belong under `channels.telegram.groups`.
174
- Non-numeric entries are ignored for sender authorization.
175
- Security boundary (`2026.2.25+`): group sender auth does **not** inherit DM pairing-store approvals.
176
- Pairing stays DM-only. For groups, set `groupAllowFrom` or per-group/per-topic `allowFrom`.
177
- If `groupAllowFrom` is unset, Telegram falls back to config `allowFrom`, not the pairing store.
178
- Practical pattern for one-owner bots: set your user ID in `channels.telegram.allowFrom`, leave `groupAllowFrom` unset, and allow the target groups under `channels.telegram.groups`.
179
- Runtime note: if `channels.telegram` is completely missing, runtime defaults to fail-closed `groupPolicy="allowlist"` unless `channels.defaults.groupPolicy` is explicitly set.
180
-
181
- Owner-only group setup:
182
-
183
- ```json5
184
- {
185
- channels: {
186
- telegram: {
187
- enabled: true,
188
- dmPolicy: "pairing",
189
- allowFrom: ["<YOUR_TELEGRAM_USER_ID>"],
190
- groupPolicy: "allowlist",
191
- groups: {
192
- "<GROUP_CHAT_ID>": {
193
- requireMention: true,
194
- },
195
- },
196
- },
197
- },
198
- }
199
- ```
200
-
201
- Test it from the group with `@<bot_username> ping`. Plain group messages do not trigger the bot while `requireMention: true`.
202
-
203
- Example: allow any member in one specific group:
204
-
205
- ```json5
206
- {
207
- channels: {
208
- telegram: {
209
- groups: {
210
- "-1001234567890": {
211
- groupPolicy: "open",
212
- requireMention: false,
213
- },
214
- },
215
- },
216
- },
217
- }
218
- ```
219
-
220
- Example: allow only specific users inside one specific group:
221
-
222
- ```json5
223
- {
224
- channels: {
225
- telegram: {
226
- groups: {
227
- "-1001234567890": {
228
- requireMention: true,
229
- allowFrom: ["8734062810", "745123456"],
230
- },
231
- },
232
- },
233
- },
234
- }
235
- ```
236
-
237
- <Warning>
238
- Common mistake: `groupAllowFrom` is not a Telegram group allowlist.
239
-
240
- - Put negative Telegram group or supergroup chat IDs like `-1001234567890` under `channels.telegram.groups`.
241
- - Put Telegram user IDs like `8734062810` under `groupAllowFrom` when you want to limit which people inside an allowed group can trigger the bot.
242
- - Use `groupAllowFrom: ["*"]` only when you want any member of an allowed group to be able to talk to the bot.
243
-
244
- </Warning>
245
-
246
- </Tab>
247
-
248
- <Tab title="Mention behavior">
249
- Group replies require mention by default.
250
-
251
- Mention can come from:
252
-
253
- - native `@botusername` mention, or
254
- - mention patterns in:
255
- - `agents.list[].groupChat.mentionPatterns`
256
- - `messages.groupChat.mentionPatterns`
257
-
258
- Session-level command toggles:
259
-
260
- - `/activation always`
261
- - `/activation mention`
262
-
263
- These update session state only. Use config for persistence.
264
-
265
- Persistent config example:
266
-
267
- ```json5
268
- {
269
- channels: {
270
- telegram: {
271
- groups: {
272
- "*": { requireMention: false },
273
- },
274
- },
275
- },
276
- }
277
- ```
278
-
279
- Getting the group chat ID:
280
-
281
- - forward a group message to `@userinfobot` / `@getidsbot`
282
- - or read `chat.id` from `fengming logs --follow`
283
- - or inspect Bot API `getUpdates`
284
- - after the group is allowed, run `/whoami@<bot_username>` if native commands are enabled
285
-
286
- </Tab>
287
- </Tabs>
288
-
289
- ## Runtime behavior
290
-
291
- - Telegram is owned by the gateway process.
292
- - Routing is deterministic: Telegram inbound replies back to Telegram (the model does not pick channels).
293
- - Inbound messages normalize into the shared channel envelope with reply metadata, media placeholders, and persisted reply-chain context for Telegram replies the gateway has observed.
294
- - Group sessions are isolated by group ID. Forum topics append `:topic:<threadId>` to keep topics isolated.
295
- - DM messages can carry `message_thread_id`; FengMing preserves it for replies. DM topic sessions split only when Telegram `getMe` reports `has_topics_enabled: true` for the bot; otherwise DMs stay on the flat session.
296
- - Long polling uses grammY runner with per-chat/per-thread sequencing. Overall runner sink concurrency uses `agents.defaults.maxConcurrent`.
297
- - Multi-account startup bounds concurrent Telegram `getMe` probes so large bot fleets do not fan out every account probe at once.
298
- - Long polling is guarded inside each gateway process so only one active poller can use a bot token at a time. If you still see `getUpdates` 409 conflicts, another FengMing gateway, script, or external poller is likely using the same token.
299
- - Long-polling watchdog restarts trigger after 120 seconds without completed `getUpdates` liveness by default. Increase `channels.telegram.pollingStallThresholdMs` only if your deployment still sees false polling-stall restarts during long-running work. The value is in milliseconds and is allowed from `30000` to `600000`; per-account overrides are supported.
300
- - Telegram Bot API has no read-receipt support (`sendReadReceipts` does not apply).
301
-
302
- <Note>
303
- `channels.telegram.dm.threadReplies` and `channels.telegram.direct.<chatId>.threadReplies` were removed. Run `fengming doctor --fix` after upgrading if your config still has those keys. DM topic routing now follows the bot capability from Telegram `getMe.has_topics_enabled`, which is controlled by BotFather threaded mode: topics-enabled bots use thread-scoped DM sessions when Telegram sends `message_thread_id`; other DMs stay on the flat session.
304
- </Note>
305
-
306
- ## Feature reference
307
-
308
- <AccordionGroup>
309
- <Accordion title="Live stream preview (message edits)">
310
- FengMing can stream partial replies in real time:
311
-
312
- - direct chats: preview message + `editMessageText`
313
- - groups/topics: preview message + `editMessageText`
314
- - direct-chat tool progress: optional native `sendMessageDraft` status preview when enabled and supported
315
-
316
- Requirement:
317
-
318
- - `channels.telegram.streaming` is `off | partial | block | progress` (default: `partial`)
319
- - `progress` keeps one editable status draft for tool progress, clears it at completion, and sends the final answer as a normal message
320
- - `streaming.preview.toolProgress` controls whether tool/progress updates reuse the same edited preview message (default: `true` when preview streaming is active)
321
- - `streaming.preview.commandText` controls command/exec detail inside those tool-progress lines: `raw` (default, preserves released behavior) or `status` (tool label only)
322
- - legacy `channels.telegram.streamMode` and boolean `streaming` values are detected; run `fengming doctor --fix` to migrate them to `channels.telegram.streaming.mode`
323
-
324
- Tool-progress preview updates are the short status lines shown while tools run, for example command execution, file reads, planning updates, patch summaries, or Codex preamble/commentary text in Codex app-server mode. Telegram keeps these enabled by default to match released FengMing behavior from `v2026.4.22` and later.
325
-
326
- Direct chats can use native Telegram drafts for these tool-progress lines without persisting tool chatter into chat history. Native drafts stop before answer text starts; final answers stay on the normal persistent delivery path. This lane is off by default and should be gated to trusted DM IDs first:
327
-
328
- ```json
329
- {
330
- "channels": {
331
- "telegram": {
332
- "streaming": {
333
- "mode": "partial",
334
- "preview": {
335
- "toolProgress": true,
336
- "nativeToolProgress": true,
337
- "nativeToolProgressAllowFrom": ["123456789"]
338
- }
339
- }
340
- }
341
- }
342
- }
343
- ```
344
-
345
- To keep the edited preview for answer text but hide tool-progress lines, set:
346
-
347
- ```json
348
- {
349
- "channels": {
350
- "telegram": {
351
- "streaming": {
352
- "mode": "partial",
353
- "preview": {
354
- "toolProgress": false
355
- }
356
- }
357
- }
358
- }
359
- }
360
- ```
361
-
362
- To keep tool-progress visible but hide command/exec text, set:
363
-
364
- ```json
365
- {
366
- "channels": {
367
- "telegram": {
368
- "streaming": {
369
- "mode": "partial",
370
- "preview": {
371
- "commandText": "status"
372
- }
373
- }
374
- }
375
- }
376
- }
377
- ```
378
-
379
- Use `progress` mode when you want visible tool progress without editing the final answer into that same message. Put the command-text policy under `streaming.progress`:
380
-
381
- ```json
382
- {
383
- "channels": {
384
- "telegram": {
385
- "streaming": {
386
- "mode": "progress",
387
- "progress": {
388
- "toolProgress": true,
389
- "commandText": "status"
390
- }
391
- }
392
- }
393
- }
394
- }
395
- ```
396
-
397
- Use `streaming.mode: "off"` only when you want final-only delivery: Telegram preview edits are disabled and generic tool/progress chatter is suppressed instead of being sent as standalone status messages. Approval prompts, media payloads, and errors still route through normal final delivery. Use `streaming.preview.toolProgress: false` when you only want to keep answer preview edits while hiding the tool-progress status lines.
398
-
399
- <Note>
400
- Telegram selected quote replies are the exception. When `replyToMode` is `"first"`, `"all"`, or `"batched"` and the inbound message includes selected quote text, FengMing sends the final answer through Telegram's native quote-reply path instead of editing the answer preview, so `streaming.preview.toolProgress` cannot show the short status lines for that turn. Current-message replies without selected quote text still keep preview streaming. Set `replyToMode: "off"` when tool-progress visibility matters more than native quote replies, or set `streaming.preview.toolProgress: false` to acknowledge the trade-off.
401
- </Note>
402
-
403
- For text-only replies:
404
-
405
- - short DM/group/topic previews: FengMing keeps the same preview message and performs the final edit in place
406
- - long text finals that split into multiple Telegram messages reuse the existing preview as the first final chunk when possible, then send only the remaining chunks
407
- - progress-mode finals clear the status draft and use normal final delivery instead of editing the draft into the answer
408
- - if the final edit fails before the completed text is confirmed, FengMing uses normal final delivery and cleans up the stale preview
409
-
410
- For complex replies (for example media payloads), FengMing falls back to normal final delivery and then cleans up the preview message.
411
-
412
- Preview streaming is separate from block streaming. When block streaming is explicitly enabled for Telegram, FengMing skips the preview stream to avoid double-streaming.
413
-
414
- Reasoning stream behavior:
415
-
416
- - `/reasoning stream` uses a supported channel's reasoning-preview path; on Telegram, it streams reasoning into the live preview while generating
417
- - the reasoning preview is deleted after final delivery; use `/reasoning on` when reasoning should remain visible
418
- - final answer is sent without reasoning text
419
-
420
- </Accordion>
421
-
422
- <Accordion title="Formatting and HTML fallback">
423
- Outbound text uses Telegram `parse_mode: "HTML"`.
424
-
425
- - Markdown-ish text is rendered to Telegram-safe HTML.
426
- - Supported Telegram HTML tags are preserved; unsupported HTML is escaped.
427
- - If Telegram rejects parsed HTML, FengMing retries as plain text.
428
-
429
- Link previews are enabled by default and can be disabled with `channels.telegram.linkPreview: false`.
430
-
431
- </Accordion>
432
-
433
- <Accordion title="Native commands and custom commands">
434
- Telegram command menu registration is handled at startup with `setMyCommands`.
435
-
436
- Native command defaults:
437
-
438
- - `commands.native: "auto"` enables native commands for Telegram
439
-
440
- Add custom command menu entries:
441
-
442
- ```json5
443
- {
444
- channels: {
445
- telegram: {
446
- customCommands: [
447
- { command: "backup", description: "Git backup" },
448
- { command: "generate", description: "Create an image" },
449
- ],
450
- },
451
- },
452
- }
453
- ```
454
-
455
- Rules:
456
-
457
- - names are normalized (strip leading `/`, lowercase)
458
- - valid pattern: `a-z`, `0-9`, `_`, length `1..32`
459
- - custom commands cannot override native commands
460
- - conflicts/duplicates are skipped and logged
461
-
462
- Notes:
463
-
464
- - custom commands are menu entries only; they do not auto-implement behavior
465
- - plugin/skill commands can still work when typed even if not shown in Telegram menu
466
-
467
- If native commands are disabled, built-ins are removed. Custom/plugin commands may still register if configured.
468
-
469
- Common setup failures:
470
-
471
- - `setMyCommands failed` with `BOT_COMMANDS_TOO_MUCH` means the Telegram menu still overflowed after trimming; reduce plugin/skill/custom commands or disable `channels.telegram.commands.native`.
472
- - `deleteWebhook`, `deleteMyCommands`, or `setMyCommands` failing with `404: Not Found` while direct Bot API curl commands work can mean `channels.telegram.apiRoot` was set to the full `/bot<TOKEN>` endpoint. `apiRoot` must be only the Bot API root, and `fengming doctor --fix` removes an accidental trailing `/bot<TOKEN>`.
473
- - `getMe returned 401` means Telegram rejected the configured bot token. Update `botToken`, `tokenFile`, or `TELEGRAM_BOT_TOKEN` with the current BotFather token; FengMing stops before polling so this is not reported as a webhook cleanup failure.
474
- - `setMyCommands failed` with network/fetch errors usually means outbound DNS/HTTPS to `api.telegram.org` is blocked.
475
-
476
- ### Device pairing commands (`device-pair` plugin)
477
-
478
- When the `device-pair` plugin is installed:
479
-
480
- 1. `/pair` generates setup code
481
- 2. paste code in iOS app
482
- 3. `/pair pending` lists pending requests (including role/scopes)
483
- 4. approve the request:
484
- - `/pair approve <requestId>` for explicit approval
485
- - `/pair approve` when there is only one pending request
486
- - `/pair approve latest` for most recent
487
-
488
- The setup code carries a short-lived bootstrap token. Built-in setup-code bootstrap is node-only: the first connect creates a pending node request, and after approval the Gateway returns a durable node token with `scopes: []`. It does not return a handed-off operator token; operator access requires a separate approved operator pairing or token flow.
489
-
490
- If a device retries with changed auth details (for example role/scopes/public key), the previous pending request is superseded and the new request uses a different `requestId`. Re-run `/pair pending` before approving.
491
-
492
- More details: [Pairing](/channels/pairing#pair-via-telegram-recommended-for-ios).
493
-
494
- </Accordion>
495
-
496
- <Accordion title="Inline buttons">
497
- Configure inline keyboard scope:
498
-
499
- ```json5
500
- {
501
- channels: {
502
- telegram: {
503
- capabilities: {
504
- inlineButtons: "allowlist",
505
- },
506
- },
507
- },
508
- }
509
- ```
510
-
511
- Per-account override:
512
-
513
- ```json5
514
- {
515
- channels: {
516
- telegram: {
517
- accounts: {
518
- main: {
519
- capabilities: {
520
- inlineButtons: "allowlist",
521
- },
522
- },
523
- },
524
- },
525
- },
526
- }
527
- ```
528
-
529
- Scopes:
530
-
531
- - `off`
532
- - `dm`
533
- - `group`
534
- - `all`
535
- - `allowlist` (default)
536
-
537
- Legacy `capabilities: ["inlineButtons"]` maps to `inlineButtons: "all"`.
538
-
539
- Message action example:
540
-
541
- ```json5
542
- {
543
- action: "send",
544
- channel: "telegram",
545
- to: "123456789",
546
- message: "Choose an option:",
547
- buttons: [
548
- [
549
- { text: "Yes", callback_data: "yes" },
550
- { text: "No", callback_data: "no" },
551
- ],
552
- [{ text: "Cancel", callback_data: "cancel" }],
553
- ],
554
- }
555
- ```
556
-
557
- Mini App button example:
558
-
559
- ```json5
560
- {
561
- action: "send",
562
- channel: "telegram",
563
- to: "123456789",
564
- message: "Open app:",
565
- presentation: {
566
- blocks: [
567
- {
568
- type: "buttons",
569
- buttons: [{ label: "Launch", web_app: { url: "https://example.com/app" } }],
570
- },
571
- ],
572
- },
573
- }
574
- ```
575
-
576
- Telegram `web_app` buttons work only in private chats between a user and the
577
- bot.
578
-
579
- Callback clicks are passed to the agent as text:
580
- `callback_data: <value>`
581
-
582
- </Accordion>
583
-
584
- <Accordion title="Telegram message actions for agents and automation">
585
- Telegram tool actions include:
586
-
587
- - `sendMessage` (`to`, `content`, optional `mediaUrl`, `replyToMessageId`, `messageThreadId`)
588
- - `react` (`chatId`, `messageId`, `emoji`)
589
- - `deleteMessage` (`chatId`, `messageId`)
590
- - `editMessage` (`chatId`, `messageId`, `content`)
591
- - `createForumTopic` (`chatId`, `name`, optional `iconColor`, `iconCustomEmojiId`)
592
-
593
- Channel message actions expose ergonomic aliases (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`).
594
-
595
- Gating controls:
596
-
597
- - `channels.telegram.actions.sendMessage`
598
- - `channels.telegram.actions.deleteMessage`
599
- - `channels.telegram.actions.reactions`
600
- - `channels.telegram.actions.sticker` (default: disabled)
601
-
602
- Note: `edit` and `topic-create` are currently enabled by default and do not have separate `channels.telegram.actions.*` toggles.
603
- Runtime sends use the active config/secrets snapshot (startup/reload), so action paths do not perform ad-hoc SecretRef re-resolution per send.
604
-
605
- Reaction removal semantics: [/tools/reactions](/tools/reactions)
606
-
607
- </Accordion>
608
-
609
- <Accordion title="Reply threading tags">
610
- Telegram supports explicit reply threading tags in generated output:
611
-
612
- - `[[reply_to_current]]` replies to the triggering message
613
- - `[[reply_to:<id>]]` replies to a specific Telegram message ID
614
-
615
- `channels.telegram.replyToMode` controls handling:
616
-
617
- - `off` (default)
618
- - `first`
619
- - `all`
620
-
621
- When reply threading is enabled and the original Telegram text or caption is available, FengMing includes a native Telegram quote excerpt automatically. Telegram caps native quote text at 1024 UTF-16 code units, so longer messages are quoted from the start and fall back to a plain reply if Telegram rejects the quote.
622
-
623
- Note: `off` disables implicit reply threading. Explicit `[[reply_to_*]]` tags are still honored.
624
-
625
- </Accordion>
626
-
627
- <Accordion title="Forum topics and thread behavior">
628
- Forum supergroups:
629
-
630
- - topic session keys append `:topic:<threadId>`
631
- - replies and typing target the topic thread
632
- - topic config path:
633
- `channels.telegram.groups.<chatId>.topics.<threadId>`
634
-
635
- General topic (`threadId=1`) special-case:
636
-
637
- - message sends omit `message_thread_id` (Telegram rejects `sendMessage(...thread_id=1)`)
638
- - typing actions still include `message_thread_id`
639
-
640
- Topic inheritance: topic entries inherit group settings unless overridden (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
641
- `agentId` is topic-only and does not inherit from group defaults.
642
- `topics."*"` sets defaults for every topic in that group; exact topic IDs still win over `"*"`.
643
-
644
- **Per-topic agent routing**: Each topic can route to a different agent by setting `agentId` in the topic config. This gives each topic its own isolated workspace, memory, and session. Example:
645
-
646
- ```json5
647
- {
648
- channels: {
649
- telegram: {
650
- groups: {
651
- "-1001234567890": {
652
- topics: {
653
- "1": { agentId: "main" }, // General topic → main agent
654
- "3": { agentId: "zu" }, // Dev topic → zu agent
655
- "5": { agentId: "coder" } // Code review → coder agent
656
- }
657
- }
658
- }
659
- }
660
- }
661
- }
662
- ```
663
-
664
- Each topic then has its own session key: `agent:zu:telegram:group:-1001234567890:topic:3`
665
-
666
- **Persistent ACP topic binding**: Forum topics can pin ACP harness sessions through top-level typed ACP bindings (`bindings[]` with `type: "acp"` and `match.channel: "telegram"`, `peer.kind: "group"`, and a topic-qualified id like `-1001234567890:topic:42`). Currently scoped to forum topics in groups/supergroups. See [ACP Agents](/tools/acp-agents).
667
-
668
- **Thread-bound ACP spawn from chat**: `/acp spawn <agent> --thread here|auto` binds the current topic to a new ACP session; follow-ups route there directly. FengMing pins the spawn confirmation in-topic. Requires `channels.telegram.threadBindings.spawnSessions` to remain enabled (default: `true`).
669
-
670
- Template context exposes `MessageThreadId` and `IsForum`. DM chats with `message_thread_id` keep reply metadata; they use thread-aware session keys only when Telegram `getMe` reports `has_topics_enabled: true` for the bot.
671
- The former `dm.threadReplies` and `direct.*.threadReplies` overrides are intentionally retired; use BotFather threaded mode as the single source of truth and run `fengming doctor --fix` to remove stale config keys.
672
-
673
- </Accordion>
674
-
675
- <Accordion title="Audio, video, and stickers">
676
- ### Audio messages
677
-
678
- Telegram distinguishes voice notes vs audio files.
679
-
680
- - default: audio file behavior
681
- - tag `[[audio_as_voice]]` in agent reply to force voice-note send
682
- - inbound voice-note transcripts are framed as machine-generated,
683
- untrusted text in the agent context; mention detection still uses the raw
684
- transcript so mention-gated voice messages continue to work.
685
-
686
- Message action example:
687
-
688
- ```json5
689
- {
690
- action: "send",
691
- channel: "telegram",
692
- to: "123456789",
693
- media: "https://example.com/voice.ogg",
694
- asVoice: true,
695
- }
696
- ```
697
-
698
- ### Video messages
699
-
700
- Telegram distinguishes video files vs video notes.
701
-
702
- Message action example:
703
-
704
- ```json5
705
- {
706
- action: "send",
707
- channel: "telegram",
708
- to: "123456789",
709
- media: "https://example.com/video.mp4",
710
- asVideoNote: true,
711
- }
712
- ```
713
-
714
- Video notes do not support captions; provided message text is sent separately.
715
-
716
- ### Stickers
717
-
718
- Inbound sticker handling:
719
-
720
- - static WEBP: downloaded and processed (placeholder `<media:sticker>`)
721
- - animated TGS: skipped
722
- - video WEBM: skipped
723
-
724
- Sticker context fields:
725
-
726
- - `Sticker.emoji`
727
- - `Sticker.setName`
728
- - `Sticker.fileId`
729
- - `Sticker.fileUniqueId`
730
- - `Sticker.cachedDescription`
731
-
732
- Sticker cache file:
733
-
734
- - `~/.fengming/telegram/sticker-cache.json`
735
-
736
- Stickers are described once (when possible) and cached to reduce repeated vision calls.
737
-
738
- Enable sticker actions:
739
-
740
- ```json5
741
- {
742
- channels: {
743
- telegram: {
744
- actions: {
745
- sticker: true,
746
- },
747
- },
748
- },
749
- }
750
- ```
751
-
752
- Send sticker action:
753
-
754
- ```json5
755
- {
756
- action: "sticker",
757
- channel: "telegram",
758
- to: "123456789",
759
- fileId: "CAACAgIAAxkBAAI...",
760
- }
761
- ```
762
-
763
- Search cached stickers:
764
-
765
- ```json5
766
- {
767
- action: "sticker-search",
768
- channel: "telegram",
769
- query: "cat waving",
770
- limit: 5,
771
- }
772
- ```
773
-
774
- </Accordion>
775
-
776
- <Accordion title="Reaction notifications">
777
- Telegram reactions arrive as `message_reaction` updates (separate from message payloads).
778
-
779
- When enabled, FengMing enqueues system events like:
780
-
781
- - `Telegram reaction added: 👍 by Alice (@alice) on msg 42`
782
-
783
- Config:
784
-
785
- - `channels.telegram.reactionNotifications`: `off | own | all` (default: `own`)
786
- - `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` (default: `minimal`)
787
-
788
- Notes:
789
-
790
- - `own` means user reactions to bot-sent messages only (best-effort via sent-message cache).
791
- - Reaction events still respect Telegram access controls (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); unauthorized senders are dropped.
792
- - Telegram does not provide thread IDs in reaction updates.
793
- - non-forum groups route to group chat session
794
- - forum groups route to the group general-topic session (`:topic:1`), not the exact originating topic
795
-
796
- `allowed_updates` for polling/webhook include `message_reaction` automatically.
797
-
798
- </Accordion>
799
-
800
- <Accordion title="Ack reactions">
801
- `ackReaction` sends an acknowledgement emoji while FengMing is processing an inbound message. `ackReactionScope` decides *when* that emoji is actually sent.
802
-
803
- **Emoji (`ackReaction`) resolution order:**
804
-
805
- - `channels.telegram.accounts.<accountId>.ackReaction`
806
- - `channels.telegram.ackReaction`
807
- - `messages.ackReaction`
808
- - agent identity emoji fallback (`agents.list[].identity.emoji`, else "👀")
809
-
810
- Notes:
811
-
812
- - Telegram expects unicode emoji (for example "👀").
813
- - Use `""` to disable the reaction for a channel or account.
814
-
815
- **Scope (`messages.ackReactionScope`):**
816
-
817
- The Telegram provider reads scope from `messages.ackReactionScope` (default `"group-mentions"`). There is no Telegram-account or Telegram-channel-level override today.
818
-
819
- Values: `"all"` (DMs + groups), `"direct"` (DMs only), `"group-all"` (every group message, no DMs), `"group-mentions"` (groups when the bot is mentioned; **no DMs** — this is the default), `"off"` / `"none"` (disabled).
820
-
821
- <Note>
822
- The default scope (`"group-mentions"`) does not fire ack reactions in direct messages. To get an ack reaction on inbound Telegram DMs, set `messages.ackReactionScope` to `"direct"` or `"all"`. The value is read at Telegram provider startup, so a gateway restart is needed for the change to take effect.
823
- </Note>
824
-
825
- </Accordion>
826
-
827
- <Accordion title="Config writes from Telegram events and commands">
828
- Channel config writes are enabled by default (`configWrites !== false`).
829
-
830
- Telegram-triggered writes include:
831
-
832
- - group migration events (`migrate_to_chat_id`) to update `channels.telegram.groups`
833
- - `/config set` and `/config unset` (requires command enablement)
834
-
835
- Disable:
836
-
837
- ```json5
838
- {
839
- channels: {
840
- telegram: {
841
- configWrites: false,
842
- },
843
- },
844
- }
845
- ```
846
-
847
- </Accordion>
848
-
849
- <Accordion title="Long polling vs webhook">
850
- Default is long polling. For webhook mode set `channels.telegram.webhookUrl` and `channels.telegram.webhookSecret`; optional `webhookPath`, `webhookHost`, `webhookPort` (defaults `/telegram-webhook`, `127.0.0.1`, `8787`).
851
-
852
- In long-polling mode FengMing persists its restart watermark only after an update dispatches successfully. If a handler fails, that update remains retryable in the same process and is not written as completed for restart dedupe.
853
-
854
- The local listener binds to `127.0.0.1:8787`. For public ingress, either put a reverse proxy in front of the local port or set `webhookHost: "0.0.0.0"` intentionally.
855
-
856
- Webhook mode validates request guards, the Telegram secret token, and the JSON body before returning `200` to Telegram.
857
- FengMing then processes the update asynchronously through the same per-chat/per-topic bot lanes used by long polling, so slow agent turns do not hold Telegram's delivery ACK.
858
-
859
- </Accordion>
860
-
861
- <Accordion title="Limits, retry, and CLI targets">
862
- - `channels.telegram.textChunkLimit` default is 4000.
863
- - `channels.telegram.chunkMode="newline"` prefers paragraph boundaries (blank lines) before length splitting.
864
- - `channels.telegram.mediaMaxMb` (default 100) caps inbound and outbound Telegram media size.
865
- - `channels.telegram.mediaGroupFlushMs` (default 500) controls how long Telegram albums/media groups are buffered before FengMing dispatches them as one inbound message. Increase it if album parts arrive late; decrease it to reduce album reply latency.
866
- - `channels.telegram.timeoutSeconds` overrides Telegram API client timeout (if unset, grammY default applies). Bot clients clamp configured values below the 60-second outbound text/typing request guard so grammY does not abort visible reply delivery before FengMing's transport guard and fallback can run. Long polling still uses a 45-second `getUpdates` request guard so idle polls are not abandoned indefinitely.
867
- - `channels.telegram.pollingStallThresholdMs` defaults to `120000`; tune between `30000` and `600000` only for false-positive polling-stall restarts.
868
- - group context history uses `channels.telegram.historyLimit` or `messages.groupChat.historyLimit` (default 50); `0` disables.
869
- - reply/quote/forward supplemental context is normalized into one selected conversation context window when the gateway has observed the parent messages; the observed-message cache is persisted beside the session store. Telegram only includes one shallow `reply_to_message` in updates, so chains older than the cache are limited to Telegram's current update payload.
870
- - Telegram allowlists primarily gate who can trigger the agent, not a full supplemental-context redaction boundary.
871
- - DM history controls:
872
- - `channels.telegram.dmHistoryLimit`
873
- - `channels.telegram.dms["<user_id>"].historyLimit`
874
- - `channels.telegram.retry` config applies to Telegram send helpers (CLI/tools/actions) for recoverable outbound API errors. Inbound final-reply delivery also uses a bounded safe-send retry for Telegram pre-connect failures, but it does not retry ambiguous post-send network envelopes that could duplicate visible messages.
875
-
876
- CLI and message-tool send targets can be numeric chat ID, username, or a forum topic target:
877
-
878
- ```bash
879
- fengming message send --channel telegram --target 123456789 --message "hi"
880
- fengming message send --channel telegram --target @name --message "hi"
881
- fengming message send --channel telegram --target -1001234567890:topic:42 --message "hi topic"
882
- ```
883
-
884
- Telegram polls use `fengming message poll` and support forum topics:
885
-
886
- ```bash
887
- fengming message poll --channel telegram --target 123456789 \
888
- --poll-question "Ship it?" --poll-option "Yes" --poll-option "No"
889
- fengming message poll --channel telegram --target -1001234567890:topic:42 \
890
- --poll-question "Pick a time" --poll-option "10am" --poll-option "2pm" \
891
- --poll-duration-seconds 300 --poll-public
892
- ```
893
-
894
- Telegram-only poll flags:
895
-
896
- - `--poll-duration-seconds` (5-600)
897
- - `--poll-anonymous`
898
- - `--poll-public`
899
- - `--thread-id` for forum topics (or use a `:topic:` target)
900
-
901
- Telegram send also supports:
902
-
903
- - `--presentation` with `buttons` blocks for inline keyboards when `channels.telegram.capabilities.inlineButtons` allows it
904
- - `--pin` or `--delivery '{"pin":true}'` to request pinned delivery when the bot can pin in that chat
905
- - `--force-document` to send outbound images, GIFs, and videos as documents instead of compressed photo, animated-media, or video uploads
906
-
907
- Action gating:
908
-
909
- - `channels.telegram.actions.sendMessage=false` disables outbound Telegram messages, including polls
910
- - `channels.telegram.actions.poll=false` disables Telegram poll creation while leaving regular sends enabled
911
-
912
- </Accordion>
913
-
914
- <Accordion title="Exec approvals in Telegram">
915
- Telegram supports exec approvals in approver DMs and can optionally post prompts in the originating chat or topic. Approvers must be numeric Telegram user IDs.
916
-
917
- Config path:
918
-
919
- - `channels.telegram.execApprovals.enabled` (auto-enables when at least one approver is resolvable)
920
- - `channels.telegram.execApprovals.approvers` (falls back to numeric owner IDs from `commands.ownerAllowFrom`)
921
- - `channels.telegram.execApprovals.target`: `dm` (default) | `channel` | `both`
922
- - `agentFilter`, `sessionFilter`
923
-
924
- `channels.telegram.allowFrom`, `groupAllowFrom`, and `defaultTo` control who can talk to the bot and where it sends normal replies. They do not make someone an exec approver. The first approved DM pairing bootstraps `commands.ownerAllowFrom` when no command owner exists yet, so the one-owner setup still works without duplicating IDs under `execApprovals.approvers`.
925
-
926
- Channel delivery shows the command text in the chat; only enable `channel` or `both` in trusted groups/topics. When the prompt lands in a forum topic, FengMing preserves the topic for the approval prompt and the follow-up. Exec approvals expire after 30 minutes by default.
927
-
928
- Inline approval buttons also require `channels.telegram.capabilities.inlineButtons` to allow the target surface (`dm`, `group`, or `all`). Approval IDs prefixed with `plugin:` resolve through plugin approvals; others resolve through exec approvals first.
929
-
930
- See [Exec approvals](/tools/exec-approvals).
931
-
932
- </Accordion>
933
- </AccordionGroup>
934
-
935
- ## Error reply controls
936
-
937
- When the agent encounters a delivery or provider error, Telegram can either reply with the error text or suppress it. Two config keys control this behavior:
938
-
939
- | Key | Values | Default | Description |
940
- | ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- |
941
- | `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` sends a friendly error message to the chat. `silent` suppresses error replies entirely. |
942
- | `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Minimum time between error replies to the same chat. Prevents error spam during outages. |
943
-
944
- Per-account, per-group, and per-topic overrides are supported (same inheritance as other Telegram config keys).
945
-
946
- ```json5
947
- {
948
- channels: {
949
- telegram: {
950
- errorPolicy: "reply",
951
- errorCooldownMs: 120000,
952
- groups: {
953
- "-1001234567890": {
954
- errorPolicy: "silent", // suppress errors in this group
955
- },
956
- },
957
- },
958
- },
959
- }
960
- ```
961
-
962
- ## Troubleshooting
963
-
964
- <AccordionGroup>
965
- <Accordion title="Bot does not respond to non mention group messages">
966
-
967
- - If `requireMention=false`, Telegram privacy mode must allow full visibility.
968
- - BotFather: `/setprivacy` -> Disable
969
- - then remove + re-add bot to group
970
- - `fengming channels status` warns when config expects unmentioned group messages.
971
- - `fengming channels status --probe` can check explicit numeric group IDs; wildcard `"*"` cannot be membership-probed.
972
- - quick session test: `/activation always`.
973
-
974
- </Accordion>
975
-
976
- <Accordion title="Bot not seeing group messages at all">
977
-
978
- - when `channels.telegram.groups` exists, group must be listed (or include `"*"`)
979
- - verify bot membership in group
980
- - review logs: `fengming logs --follow` for skip reasons
981
-
982
- </Accordion>
983
-
984
- <Accordion title="Commands work partially or not at all">
985
-
986
- - authorize your sender identity (pairing and/or numeric `allowFrom`)
987
- - command authorization still applies even when group policy is `open`
988
- - `setMyCommands failed` with `BOT_COMMANDS_TOO_MUCH` means the native menu has too many entries; reduce plugin/skill/custom commands or disable native menus
989
- - `deleteMyCommands` / `setMyCommands` startup calls and `sendChatAction` typing calls are bounded and retry once through Telegram's transport fallback on request timeout. Persistent network/fetch errors usually indicate DNS/HTTPS reachability issues to `api.telegram.org`
990
-
991
- </Accordion>
992
-
993
- <Accordion title="Startup reports unauthorized token">
994
-
995
- - `getMe returned 401` is a Telegram authentication failure for the configured bot token.
996
- - Re-copy or regenerate the bot token in BotFather, then update `channels.telegram.botToken`, `channels.telegram.tokenFile`, `channels.telegram.accounts.<id>.botToken`, or `TELEGRAM_BOT_TOKEN` for the default account.
997
- - `deleteWebhook 401 Unauthorized` during startup is also an auth failure; treating it as "no webhook exists" would only defer the same bad-token failure to later API calls.
998
-
999
- </Accordion>
1000
-
1001
- <Accordion title="Polling or network instability">
1002
-
1003
- - Node 22+ + custom fetch/proxy can trigger immediate abort behavior if AbortSignal types mismatch.
1004
- - Some hosts resolve `api.telegram.org` to IPv6 first; broken IPv6 egress can cause intermittent Telegram API failures.
1005
- - If logs include `TypeError: fetch failed` or `Network request for 'getUpdates' failed!`, FengMing now retries these as recoverable network errors.
1006
- - During polling startup, FengMing reuses the successful startup `getMe` probe for grammY so the runner does not need a second `getMe` before the first `getUpdates`.
1007
- - If `deleteWebhook` fails with a transient network error during polling startup, FengMing continues into long polling instead of making another pre-poll control-plane call. A still-active webhook surfaces as a `getUpdates` conflict; FengMing then rebuilds the Telegram transport and retries webhook cleanup.
1008
- - If Telegram sockets recycle on a short fixed cadence, check for a low `channels.telegram.timeoutSeconds`; bot clients clamp configured values below the outbound and `getUpdates` request guards, but older releases could abort every poll or reply when this was set below those guards.
1009
- - If logs include `Polling stall detected`, FengMing restarts polling and rebuilds the Telegram transport after 120 seconds without completed long-poll liveness by default.
1010
- - `fengming channels status --probe` and `fengming doctor` warn when a running polling account has not completed `getUpdates` after startup grace, when a running webhook account has not completed `setWebhook` after startup grace, or when the last successful polling transport activity is stale.
1011
- - Increase `channels.telegram.pollingStallThresholdMs` only when long-running `getUpdates` calls are healthy but your host still reports false polling-stall restarts. Persistent stalls usually point to proxy, DNS, IPv6, or TLS egress issues between the host and `api.telegram.org`.
1012
- - Telegram also honors process proxy env for Bot API transport, including `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, and their lowercase variants. `NO_PROXY` / `no_proxy` can still bypass `api.telegram.org`.
1013
- - If the FengMing managed proxy is configured through `FENGMING_PROXY_URL` for a service environment and no standard proxy env is present, Telegram uses that URL for Bot API transport too.
1014
- - On VPS hosts with unstable direct egress/TLS, route Telegram API calls through `channels.telegram.proxy`:
1015
-
1016
- ```yaml
1017
- channels:
1018
- telegram:
1019
- proxy: socks5://<user>:<password>@proxy-host:1080
1020
- ```
1021
-
1022
- - Node 22+ defaults to `autoSelectFamily=true` (except WSL2). Telegram DNS result order honors `FENGMING_TELEGRAM_DNS_RESULT_ORDER`, then `channels.telegram.network.dnsResultOrder`, then the process default such as `NODE_OPTIONS=--dns-result-order=ipv4first`; if none applies, Node 22+ falls back to `ipv4first`.
1023
- - If your host is WSL2 or explicitly works better with IPv4-only behavior, force family selection:
1024
-
1025
- ```yaml
1026
- channels:
1027
- telegram:
1028
- network:
1029
- autoSelectFamily: false
1030
- ```
1031
-
1032
- - RFC 2544 benchmark-range answers (`198.18.0.0/15`) are already allowed
1033
- for Telegram media downloads by default. If a trusted fake-IP or
1034
- transparent proxy rewrites `api.telegram.org` to some other
1035
- private/internal/special-use address during media downloads, you can opt
1036
- in to the Telegram-only bypass:
1037
-
1038
- ```yaml
1039
- channels:
1040
- telegram:
1041
- network:
1042
- dangerouslyAllowPrivateNetwork: true
1043
- ```
1044
-
1045
- - The same opt-in is available per account at
1046
- `channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork`.
1047
- - If your proxy resolves Telegram media hosts into `198.18.x.x`, leave the
1048
- dangerous flag off first. Telegram media already allows the RFC 2544
1049
- benchmark range by default.
1050
-
1051
- <Warning>
1052
- `channels.telegram.network.dangerouslyAllowPrivateNetwork` weakens Telegram
1053
- media SSRF protections. Use it only for trusted operator-controlled proxy
1054
- environments such as Clash, Mihomo, or Surge fake-IP routing when they
1055
- synthesize private or special-use answers outside the RFC 2544 benchmark
1056
- range. Leave it off for normal public internet Telegram access.
1057
- </Warning>
1058
-
1059
- - Environment overrides (temporary):
1060
- - `FENGMING_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1`
1061
- - `FENGMING_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1`
1062
- - `FENGMING_TELEGRAM_DNS_RESULT_ORDER=ipv4first`
1063
- - Validate DNS answers:
1064
-
1065
- ```bash
1066
- dig +short api.telegram.org A
1067
- dig +short api.telegram.org AAAA
1068
- ```
1069
-
1070
- </Accordion>
1071
- </AccordionGroup>
1072
-
1073
- More help: [Channel troubleshooting](/channels/troubleshooting).
1074
-
1075
- ## Configuration reference
1076
-
1077
- Primary reference: [Configuration reference - Telegram](/gateway/config-channels#telegram).
1078
-
1079
- <Accordion title="High-signal Telegram fields">
1080
-
1081
- - startup/auth: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` must point to a regular file; symlinks are rejected)
1082
- - access control: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, top-level `bindings[]` (`type: "acp"`)
1083
- - topic defaults: `groups.<chatId>.topics."*"` applies to unmatched forum topics; exact topic IDs override it
1084
- - exec approvals: `execApprovals`, `accounts.*.execApprovals`
1085
- - command/menu: `commands.native`, `commands.nativeSkills`, `customCommands`
1086
- - threading/replies: `replyToMode`
1087
- - streaming: `streaming` (preview), `streaming.preview.toolProgress`, `blockStreaming`
1088
- - formatting/delivery: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix`
1089
- - media/network: `mediaMaxMb`, `mediaGroupFlushMs`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy`
1090
- - custom API root: `apiRoot` (Bot API root only; do not include `/bot<TOKEN>`)
1091
- - webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`
1092
- - actions/capabilities: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker`
1093
- - reactions: `reactionNotifications`, `reactionLevel`
1094
- - errors: `errorPolicy`, `errorCooldownMs`
1095
- - writes/history: `configWrites`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
1096
-
1097
- </Accordion>
1098
-
1099
- <Note>
1100
- Multi-account precedence: when two or more account IDs are configured, set `channels.telegram.defaultAccount` (or include `channels.telegram.accounts.default`) to make default routing explicit. Otherwise FengMing falls back to the first normalized account ID and `fengming doctor` warns. Named accounts inherit `channels.telegram.allowFrom` / `groupAllowFrom`, but not `accounts.default.*` values.
1101
- </Note>
1102
-
1103
- ## Related
1104
-
1105
- <CardGroup cols={2}>
1106
- <Card title="Pairing" icon="link" href="/channels/pairing">
1107
- Pair a Telegram user to the gateway.
1108
- </Card>
1109
- <Card title="Groups" icon="users" href="/channels/groups">
1110
- Group and topic allowlist behavior.
1111
- </Card>
1112
- <Card title="Channel routing" icon="route" href="/channels/channel-routing">
1113
- Route inbound messages to agents.
1114
- </Card>
1115
- <Card title="Security" icon="shield" href="/gateway/security">
1116
- Threat model and hardening.
1117
- </Card>
1118
- <Card title="Multi-agent routing" icon="sitemap" href="/concepts/multi-agent">
1119
- Map groups and topics to agents.
1120
- </Card>
1121
- <Card title="Troubleshooting" icon="wrench" href="/channels/troubleshooting">
1122
- Cross-channel diagnostics.
1123
- </Card>
1124
- </CardGroup>