fengming 0.3.9 → 0.3.11

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 (763) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/{bundled-channel-config-schema-DpdKMATU.d.ts → bundled-channel-config-schema-Bte--ZlY.d.ts} +26 -26
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/cli-startup-metadata.json +8 -8
  5. package/dist/control-ui/assets/{activity-B2W-IeAT.js → activity-wgT0-JR0.js} +2 -2
  6. package/dist/control-ui/assets/{agents-mRUyNVCz.js → agents-DG5PobrT.js} +2 -2
  7. package/dist/control-ui/assets/{channels-8QHOqBnt.js → channels-CX28oM42.js} +2 -2
  8. package/dist/control-ui/assets/{cron-H3unP_mO.js → cron-B8ixwBqU.js} +2 -2
  9. package/dist/control-ui/assets/{debug-CxLsQ9vH.js → debug-CnkYZUXy.js} +2 -2
  10. package/dist/control-ui/assets/{index-jtIYT0Eh.js → index-DQRZJKbO.js} +4 -4
  11. package/dist/control-ui/assets/{instances-B1JQeCRb.js → instances-BE3mV1JC.js} +2 -2
  12. package/dist/control-ui/assets/{nodes-RGOmq_1l.js → nodes-Cou4PWRX.js} +2 -2
  13. package/dist/control-ui/assets/{sessions-C2O-Jgpg.js → sessions-DpAaBT21.js} +2 -2
  14. package/dist/control-ui/assets/{skills-jyJOYA4I.js → skills-DjA_j_20.js} +2 -2
  15. package/dist/control-ui/assets/{workboard-uM_kK8cQ.js → workboard-BFnvbS0k.js} +2 -2
  16. package/dist/control-ui/index.html +1 -1
  17. package/dist/control-ui/sw.js +1 -1
  18. package/dist/gateway/protocol/index.d.ts +1 -1
  19. package/dist/{index-DhOQs6M_.d.ts → index-DuDY3bCZ.d.ts} +45 -45
  20. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  21. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  22. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
  23. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  24. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  25. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  26. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  27. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  28. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  29. package/dist/plugin-sdk/compat.d.ts +2 -2
  30. package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
  31. package/dist/plugin-sdk/config-schema.d.ts +4 -4
  32. package/dist/plugin-sdk/core.d.ts +1 -1
  33. package/dist/plugin-sdk/discord.d.ts +2 -2
  34. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  35. package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
  36. package/dist/{zod-schema.core-Cuz0lz6m.d.ts → zod-schema.core-BGLctDlK.d.ts} +1 -1
  37. package/package.json +7 -412
  38. package/CHANGELOG.md +0 -38
  39. package/THIRD_PARTY_NOTICES.md +0 -37
  40. package/docs/.i18n/README.md +0 -81
  41. package/docs/.i18n/ar-navigation.json +0 -18
  42. package/docs/.i18n/de-navigation.json +0 -18
  43. package/docs/.i18n/es-navigation.json +0 -18
  44. package/docs/.i18n/fr-navigation.json +0 -18
  45. package/docs/.i18n/glossary.ar.json +0 -78
  46. package/docs/.i18n/glossary.de.json +0 -78
  47. package/docs/.i18n/glossary.es.json +0 -78
  48. package/docs/.i18n/glossary.fa.json +0 -78
  49. package/docs/.i18n/glossary.fr.json +0 -78
  50. package/docs/.i18n/glossary.id.json +0 -78
  51. package/docs/.i18n/glossary.it.json +0 -78
  52. package/docs/.i18n/glossary.ja-JP.json +0 -98
  53. package/docs/.i18n/glossary.ko.json +0 -78
  54. package/docs/.i18n/glossary.nl.json +0 -78
  55. package/docs/.i18n/glossary.pl.json +0 -78
  56. package/docs/.i18n/glossary.pt-BR.json +0 -78
  57. package/docs/.i18n/glossary.th.json +0 -78
  58. package/docs/.i18n/glossary.tr.json +0 -78
  59. package/docs/.i18n/glossary.uk.json +0 -78
  60. package/docs/.i18n/glossary.vi.json +0 -78
  61. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  62. package/docs/.i18n/glossary.zh-TW.json +0 -78
  63. package/docs/.i18n/id-navigation.json +0 -18
  64. package/docs/.i18n/it-navigation.json +0 -18
  65. package/docs/.i18n/ja-navigation.json +0 -18
  66. package/docs/.i18n/ko-navigation.json +0 -18
  67. package/docs/.i18n/pl-navigation.json +0 -18
  68. package/docs/.i18n/pt-BR-navigation.json +0 -18
  69. package/docs/.i18n/tr-navigation.json +0 -18
  70. package/docs/.i18n/translation-workflow.md +0 -111
  71. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  72. package/docs/AGENTS.md +0 -36
  73. package/docs/CLAUDE.md +0 -1
  74. package/docs/agent-runtime-architecture.md +0 -48
  75. package/docs/announcements/bluebubbles-imessage.md +0 -79
  76. package/docs/auth-credential-semantics.md +0 -124
  77. package/docs/automation/auth-monitoring.md +0 -11
  78. package/docs/automation/clawflow.md +0 -12
  79. package/docs/automation/cron-jobs.md +0 -534
  80. package/docs/automation/cron-vs-heartbeat.md +0 -11
  81. package/docs/automation/gmail-pubsub.md +0 -11
  82. package/docs/automation/hooks.md +0 -387
  83. package/docs/automation/index.md +0 -135
  84. package/docs/automation/poll.md +0 -12
  85. package/docs/automation/standing-orders.md +0 -250
  86. package/docs/automation/taskflow.md +0 -155
  87. package/docs/automation/tasks.md +0 -374
  88. package/docs/automation/troubleshooting.md +0 -12
  89. package/docs/automation/webhook.md +0 -12
  90. package/docs/brave-search.md +0 -11
  91. package/docs/channels/access-groups.md +0 -201
  92. package/docs/channels/ambient-room-events.md +0 -214
  93. package/docs/channels/bot-loop-protection.md +0 -131
  94. package/docs/channels/broadcast-groups.md +0 -472
  95. package/docs/channels/channel-routing.md +0 -162
  96. package/docs/channels/clickclack.md +0 -138
  97. package/docs/channels/discord.md +0 -1758
  98. package/docs/channels/feishu.md +0 -650
  99. package/docs/channels/googlechat.md +0 -284
  100. package/docs/channels/group-messages.md +0 -95
  101. package/docs/channels/groups.md +0 -524
  102. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  103. package/docs/channels/imessage.md +0 -839
  104. package/docs/channels/index.md +0 -64
  105. package/docs/channels/irc.md +0 -253
  106. package/docs/channels/line.md +0 -243
  107. package/docs/channels/location.md +0 -71
  108. package/docs/channels/matrix-migration.md +0 -370
  109. package/docs/channels/matrix-presentation.md +0 -77
  110. package/docs/channels/matrix-push-rules.md +0 -150
  111. package/docs/channels/matrix.md +0 -921
  112. package/docs/channels/mattermost.md +0 -542
  113. package/docs/channels/msteams.md +0 -1096
  114. package/docs/channels/nextcloud-talk.md +0 -176
  115. package/docs/channels/nostr.md +0 -253
  116. package/docs/channels/pairing.md +0 -214
  117. package/docs/channels/qqbot.md +0 -314
  118. package/docs/channels/signal.md +0 -417
  119. package/docs/channels/slack.md +0 -1623
  120. package/docs/channels/synology-chat.md +0 -187
  121. package/docs/channels/telegram.md +0 -1124
  122. package/docs/channels/tlon.md +0 -296
  123. package/docs/channels/troubleshooting.md +0 -162
  124. package/docs/channels/twitch.md +0 -431
  125. package/docs/channels/wechat.md +0 -171
  126. package/docs/channels/whatsapp.md +0 -796
  127. package/docs/channels/yuanbao.md +0 -416
  128. package/docs/channels/zalo.md +0 -253
  129. package/docs/channels/zalouser.md +0 -217
  130. package/docs/ci.md +0 -657
  131. package/docs/clawhub/publishing.md +0 -96
  132. package/docs/cli/acp.md +0 -370
  133. package/docs/cli/agent.md +0 -109
  134. package/docs/cli/agents.md +0 -253
  135. package/docs/cli/approvals.md +0 -190
  136. package/docs/cli/backup.md +0 -98
  137. package/docs/cli/browser.md +0 -307
  138. package/docs/cli/channels.md +0 -154
  139. package/docs/cli/clawbot.md +0 -25
  140. package/docs/cli/commitments.md +0 -90
  141. package/docs/cli/completion.md +0 -39
  142. package/docs/cli/config.md +0 -504
  143. package/docs/cli/configure.md +0 -77
  144. package/docs/cli/crestodian.md +0 -337
  145. package/docs/cli/cron.md +0 -304
  146. package/docs/cli/daemon.md +0 -67
  147. package/docs/cli/dashboard.md +0 -33
  148. package/docs/cli/devices.md +0 -240
  149. package/docs/cli/directory.md +0 -68
  150. package/docs/cli/dns.md +0 -53
  151. package/docs/cli/docs.md +0 -63
  152. package/docs/cli/doctor.md +0 -241
  153. package/docs/cli/flows.md +0 -52
  154. package/docs/cli/gateway.md +0 -572
  155. package/docs/cli/health.md +0 -43
  156. package/docs/cli/hooks.md +0 -345
  157. package/docs/cli/index.md +0 -400
  158. package/docs/cli/infer.md +0 -364
  159. package/docs/cli/logs.md +0 -68
  160. package/docs/cli/mcp.md +0 -529
  161. package/docs/cli/memory.md +0 -183
  162. package/docs/cli/message.md +0 -317
  163. package/docs/cli/migrate.md +0 -334
  164. package/docs/cli/models.md +0 -239
  165. package/docs/cli/node.md +0 -177
  166. package/docs/cli/nodes.md +0 -76
  167. package/docs/cli/onboard.md +0 -250
  168. package/docs/cli/pairing.md +0 -77
  169. package/docs/cli/path.md +0 -511
  170. package/docs/cli/plugins.md +0 -459
  171. package/docs/cli/policy.md +0 -886
  172. package/docs/cli/proxy.md +0 -89
  173. package/docs/cli/qr.md +0 -56
  174. package/docs/cli/reset.md +0 -39
  175. package/docs/cli/sandbox.md +0 -208
  176. package/docs/cli/secrets.md +0 -202
  177. package/docs/cli/security.md +0 -136
  178. package/docs/cli/sessions.md +0 -164
  179. package/docs/cli/setup.md +0 -59
  180. package/docs/cli/skills.md +0 -122
  181. package/docs/cli/status.md +0 -45
  182. package/docs/cli/system.md +0 -89
  183. package/docs/cli/tasks.md +0 -111
  184. package/docs/cli/transcripts.md +0 -151
  185. package/docs/cli/tui.md +0 -91
  186. package/docs/cli/uninstall.md +0 -44
  187. package/docs/cli/update.md +0 -243
  188. package/docs/cli/voicecall.md +0 -204
  189. package/docs/cli/webhooks.md +0 -117
  190. package/docs/cli/wiki.md +0 -256
  191. package/docs/concepts/active-memory.md +0 -856
  192. package/docs/concepts/agent-loop.md +0 -185
  193. package/docs/concepts/agent-runtimes.md +0 -276
  194. package/docs/concepts/agent-workspace.md +0 -230
  195. package/docs/concepts/agent.md +0 -140
  196. package/docs/concepts/architecture.md +0 -154
  197. package/docs/concepts/channel-docking.md +0 -145
  198. package/docs/concepts/commitments.md +0 -150
  199. package/docs/concepts/compaction.md +0 -203
  200. package/docs/concepts/context-engine.md +0 -347
  201. package/docs/concepts/context.md +0 -199
  202. package/docs/concepts/delegate-architecture.md +0 -319
  203. package/docs/concepts/dreaming.md +0 -264
  204. package/docs/concepts/experimental-features.md +0 -109
  205. package/docs/concepts/features.md +0 -91
  206. package/docs/concepts/fengming-sdk.md +0 -323
  207. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  208. package/docs/concepts/mantis.md +0 -744
  209. package/docs/concepts/markdown-formatting.md +0 -139
  210. package/docs/concepts/memory-builtin.md +0 -148
  211. package/docs/concepts/memory-honcho.md +0 -144
  212. package/docs/concepts/memory-qmd.md +0 -271
  213. package/docs/concepts/memory-search.md +0 -167
  214. package/docs/concepts/memory.md +0 -299
  215. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  216. package/docs/concepts/messages.md +0 -214
  217. package/docs/concepts/model-failover.md +0 -384
  218. package/docs/concepts/model-providers.md +0 -719
  219. package/docs/concepts/models.md +0 -371
  220. package/docs/concepts/multi-agent.md +0 -625
  221. package/docs/concepts/oauth.md +0 -198
  222. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  223. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  224. package/docs/concepts/presence.md +0 -117
  225. package/docs/concepts/progress-drafts.md +0 -406
  226. package/docs/concepts/qa-e2e-automation.md +0 -947
  227. package/docs/concepts/qa-matrix.md +0 -139
  228. package/docs/concepts/queue-steering.md +0 -90
  229. package/docs/concepts/queue.md +0 -136
  230. package/docs/concepts/retry.md +0 -86
  231. package/docs/concepts/session-pruning.md +0 -104
  232. package/docs/concepts/session-tool.md +0 -188
  233. package/docs/concepts/session.md +0 -164
  234. package/docs/concepts/soul.md +0 -116
  235. package/docs/concepts/streaming.md +0 -257
  236. package/docs/concepts/system-prompt.md +0 -328
  237. package/docs/concepts/timezone.md +0 -47
  238. package/docs/concepts/typebox.md +0 -309
  239. package/docs/concepts/typing-indicators.md +0 -88
  240. package/docs/concepts/usage-tracking.md +0 -66
  241. package/docs/date-time.md +0 -126
  242. package/docs/debug/node-issue.md +0 -90
  243. package/docs/diagnostics/flags.md +0 -182
  244. package/docs/docs.json +0 -1862
  245. package/docs/fengming-agent-runtime.md +0 -82
  246. package/docs/gateway/authentication.md +0 -256
  247. package/docs/gateway/background-process.md +0 -147
  248. package/docs/gateway/bonjour.md +0 -303
  249. package/docs/gateway/bridge-protocol.md +0 -97
  250. package/docs/gateway/cli-backends.md +0 -439
  251. package/docs/gateway/config-agents.md +0 -1525
  252. package/docs/gateway/config-channels.md +0 -945
  253. package/docs/gateway/config-tools.md +0 -774
  254. package/docs/gateway/configuration-examples.md +0 -704
  255. package/docs/gateway/configuration-reference.md +0 -1391
  256. package/docs/gateway/configuration.md +0 -739
  257. package/docs/gateway/diagnostics.md +0 -213
  258. package/docs/gateway/discovery.md +0 -154
  259. package/docs/gateway/doctor.md +0 -575
  260. package/docs/gateway/gateway-lock.md +0 -37
  261. package/docs/gateway/health.md +0 -73
  262. package/docs/gateway/heartbeat.md +0 -498
  263. package/docs/gateway/index.md +0 -383
  264. package/docs/gateway/local-model-services.md +0 -205
  265. package/docs/gateway/local-models.md +0 -355
  266. package/docs/gateway/logging.md +0 -149
  267. package/docs/gateway/multiple-gateways.md +0 -178
  268. package/docs/gateway/network-model.md +0 -15
  269. package/docs/gateway/openai-http-api.md +0 -378
  270. package/docs/gateway/openresponses-http-api.md +0 -347
  271. package/docs/gateway/openshell.md +0 -316
  272. package/docs/gateway/opentelemetry.md +0 -433
  273. package/docs/gateway/operator-scopes.md +0 -119
  274. package/docs/gateway/pairing.md +0 -207
  275. package/docs/gateway/prometheus.md +0 -249
  276. package/docs/gateway/protocol.md +0 -826
  277. package/docs/gateway/remote-gateway-readme.md +0 -169
  278. package/docs/gateway/remote.md +0 -280
  279. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  280. package/docs/gateway/sandboxing.md +0 -546
  281. package/docs/gateway/secrets-plan-contract.md +0 -159
  282. package/docs/gateway/secrets.md +0 -805
  283. package/docs/gateway/security/audit-checks.md +0 -127
  284. package/docs/gateway/security/exposure-runbook.md +0 -212
  285. package/docs/gateway/security/index.md +0 -1343
  286. package/docs/gateway/security/secure-file-operations.md +0 -76
  287. package/docs/gateway/security/shrinkwrap.md +0 -111
  288. package/docs/gateway/tailscale.md +0 -156
  289. package/docs/gateway/tools-invoke-http-api.md +0 -169
  290. package/docs/gateway/troubleshooting.md +0 -877
  291. package/docs/gateway/trusted-proxy-auth.md +0 -483
  292. package/docs/help/debugging.md +0 -341
  293. package/docs/help/environment.md +0 -233
  294. package/docs/help/faq-first-run.md +0 -870
  295. package/docs/help/faq-models.md +0 -556
  296. package/docs/help/faq.md +0 -2041
  297. package/docs/help/index.md +0 -39
  298. package/docs/help/scripts.md +0 -56
  299. package/docs/help/testing-live.md +0 -587
  300. package/docs/help/testing-updates-plugins.md +0 -299
  301. package/docs/help/testing.md +0 -977
  302. package/docs/help/troubleshooting.md +0 -449
  303. package/docs/index.md +0 -196
  304. package/docs/install/ansible.md +0 -233
  305. package/docs/install/azure.md +0 -315
  306. package/docs/install/bun.md +0 -59
  307. package/docs/install/clawdock.md +0 -112
  308. package/docs/install/development-channels.md +0 -148
  309. package/docs/install/digitalocean.md +0 -174
  310. package/docs/install/docker-vm-runtime.md +0 -154
  311. package/docs/install/docker.md +0 -564
  312. package/docs/install/exe-dev.md +0 -201
  313. package/docs/install/fly.md +0 -524
  314. package/docs/install/gcp.md +0 -418
  315. package/docs/install/hetzner.md +0 -285
  316. package/docs/install/hostinger.md +0 -98
  317. package/docs/install/index.md +0 -232
  318. package/docs/install/installer.md +0 -447
  319. package/docs/install/kubernetes.md +0 -196
  320. package/docs/install/macos-vm.md +0 -281
  321. package/docs/install/migrating-claude.md +0 -165
  322. package/docs/install/migrating-hermes.md +0 -178
  323. package/docs/install/migrating.md +0 -137
  324. package/docs/install/nix.md +0 -112
  325. package/docs/install/node.md +0 -142
  326. package/docs/install/northflank.mdx +0 -44
  327. package/docs/install/oracle.md +0 -218
  328. package/docs/install/podman.md +0 -216
  329. package/docs/install/railway.mdx +0 -92
  330. package/docs/install/raspberry-pi.md +0 -234
  331. package/docs/install/render.mdx +0 -167
  332. package/docs/install/uninstall.md +0 -131
  333. package/docs/install/updating.md +0 -284
  334. package/docs/install/upstash.md +0 -96
  335. package/docs/logging.md +0 -320
  336. package/docs/nav-tabs-underline.js +0 -100
  337. package/docs/network.md +0 -72
  338. package/docs/nodes/audio.md +0 -216
  339. package/docs/nodes/camera.md +0 -166
  340. package/docs/nodes/images.md +0 -77
  341. package/docs/nodes/index.md +0 -439
  342. package/docs/nodes/location-command.md +0 -102
  343. package/docs/nodes/media-understanding.md +0 -495
  344. package/docs/nodes/talk.md +0 -160
  345. package/docs/nodes/troubleshooting.md +0 -123
  346. package/docs/nodes/voicewake.md +0 -93
  347. package/docs/perplexity.md +0 -11
  348. package/docs/plan/codex-context-engine-harness.md +0 -624
  349. package/docs/plan/ui-channels.md +0 -284
  350. package/docs/platforms/digitalocean.md +0 -12
  351. package/docs/platforms/easyrunner.md +0 -109
  352. package/docs/platforms/index.md +0 -51
  353. package/docs/platforms/linux.md +0 -141
  354. package/docs/platforms/mac/bundled-gateway.md +0 -79
  355. package/docs/platforms/mac/canvas.md +0 -128
  356. package/docs/platforms/mac/child-process.md +0 -72
  357. package/docs/platforms/mac/dev-setup.md +0 -112
  358. package/docs/platforms/mac/health.md +0 -39
  359. package/docs/platforms/mac/icon.md +0 -36
  360. package/docs/platforms/mac/logging.md +0 -62
  361. package/docs/platforms/mac/menu-bar.md +0 -93
  362. package/docs/platforms/mac/peekaboo.md +0 -96
  363. package/docs/platforms/mac/permissions.md +0 -73
  364. package/docs/platforms/mac/remote.md +0 -123
  365. package/docs/platforms/mac/signing.md +0 -52
  366. package/docs/platforms/mac/skills.md +0 -43
  367. package/docs/platforms/mac/voice-overlay.md +0 -66
  368. package/docs/platforms/mac/voicewake.md +0 -73
  369. package/docs/platforms/mac/webchat.md +0 -54
  370. package/docs/platforms/mac/xpc.md +0 -66
  371. package/docs/platforms/oracle.md +0 -12
  372. package/docs/platforms/raspberry-pi.md +0 -13
  373. package/docs/platforms/windows.md +0 -286
  374. package/docs/plugins/adding-capabilities.md +0 -146
  375. package/docs/plugins/admin-http-rpc.md +0 -216
  376. package/docs/plugins/agent-tools.md +0 -13
  377. package/docs/plugins/architecture-internals.md +0 -1196
  378. package/docs/plugins/architecture.md +0 -483
  379. package/docs/plugins/building-extensions.md +0 -13
  380. package/docs/plugins/building-plugins.md +0 -335
  381. package/docs/plugins/bundles.md +0 -310
  382. package/docs/plugins/cli-backend-plugins.md +0 -310
  383. package/docs/plugins/codex-computer-use.md +0 -297
  384. package/docs/plugins/codex-harness-reference.md +0 -470
  385. package/docs/plugins/codex-harness-runtime.md +0 -268
  386. package/docs/plugins/codex-harness.md +0 -780
  387. package/docs/plugins/codex-native-plugins.md +0 -276
  388. package/docs/plugins/community.md +0 -77
  389. package/docs/plugins/compatibility.md +0 -167
  390. package/docs/plugins/copilot.md +0 -356
  391. package/docs/plugins/dependency-resolution.md +0 -176
  392. package/docs/plugins/google-meet.md +0 -1737
  393. package/docs/plugins/hooks.md +0 -484
  394. package/docs/plugins/install-overrides.md +0 -80
  395. package/docs/plugins/manage-plugins.md +0 -210
  396. package/docs/plugins/manifest.md +0 -1457
  397. package/docs/plugins/memory-lancedb.md +0 -385
  398. package/docs/plugins/memory-wiki.md +0 -529
  399. package/docs/plugins/message-presentation.md +0 -473
  400. package/docs/plugins/oc-path.md +0 -166
  401. package/docs/plugins/plugin-inventory.md +0 -189
  402. package/docs/plugins/plugin-permission-requests.md +0 -193
  403. package/docs/plugins/reference/acpx.md +0 -23
  404. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  405. package/docs/plugins/reference/alibaba.md +0 -23
  406. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  407. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  408. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  409. package/docs/plugins/reference/anthropic.md +0 -23
  410. package/docs/plugins/reference/arcee.md +0 -23
  411. package/docs/plugins/reference/azure-speech.md +0 -23
  412. package/docs/plugins/reference/bonjour.md +0 -19
  413. package/docs/plugins/reference/brave.md +0 -23
  414. package/docs/plugins/reference/browser.md +0 -23
  415. package/docs/plugins/reference/byteplus.md +0 -19
  416. package/docs/plugins/reference/canvas.md +0 -19
  417. package/docs/plugins/reference/cerebras.md +0 -23
  418. package/docs/plugins/reference/chutes.md +0 -23
  419. package/docs/plugins/reference/clickclack.md +0 -23
  420. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  421. package/docs/plugins/reference/codex-supervisor.md +0 -27
  422. package/docs/plugins/reference/codex.md +0 -23
  423. package/docs/plugins/reference/comfy.md +0 -23
  424. package/docs/plugins/reference/copilot-proxy.md +0 -19
  425. package/docs/plugins/reference/copilot.md +0 -23
  426. package/docs/plugins/reference/deepgram.md +0 -23
  427. package/docs/plugins/reference/deepinfra.md +0 -23
  428. package/docs/plugins/reference/deepseek.md +0 -23
  429. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  430. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  431. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  432. package/docs/plugins/reference/diffs.md +0 -19
  433. package/docs/plugins/reference/discord.md +0 -23
  434. package/docs/plugins/reference/document-extract.md +0 -23
  435. package/docs/plugins/reference/duckduckgo.md +0 -23
  436. package/docs/plugins/reference/elevenlabs.md +0 -23
  437. package/docs/plugins/reference/exa.md +0 -23
  438. package/docs/plugins/reference/fal.md +0 -23
  439. package/docs/plugins/reference/feishu.md +0 -23
  440. package/docs/plugins/reference/file-transfer.md +0 -19
  441. package/docs/plugins/reference/firecrawl.md +0 -23
  442. package/docs/plugins/reference/fireworks.md +0 -23
  443. package/docs/plugins/reference/github-copilot.md +0 -23
  444. package/docs/plugins/reference/gmi.md +0 -23
  445. package/docs/plugins/reference/google-meet.md +0 -23
  446. package/docs/plugins/reference/google.md +0 -23
  447. package/docs/plugins/reference/googlechat.md +0 -23
  448. package/docs/plugins/reference/gradium.md +0 -23
  449. package/docs/plugins/reference/groq.md +0 -23
  450. package/docs/plugins/reference/huggingface.md +0 -23
  451. package/docs/plugins/reference/imessage.md +0 -23
  452. package/docs/plugins/reference/inworld.md +0 -23
  453. package/docs/plugins/reference/irc.md +0 -23
  454. package/docs/plugins/reference/kilocode.md +0 -23
  455. package/docs/plugins/reference/kimi.md +0 -23
  456. package/docs/plugins/reference/line.md +0 -23
  457. package/docs/plugins/reference/litellm.md +0 -23
  458. package/docs/plugins/reference/llm-task.md +0 -19
  459. package/docs/plugins/reference/lmstudio.md +0 -23
  460. package/docs/plugins/reference/lobster.md +0 -19
  461. package/docs/plugins/reference/matrix.md +0 -23
  462. package/docs/plugins/reference/mattermost.md +0 -23
  463. package/docs/plugins/reference/memory-core.md +0 -19
  464. package/docs/plugins/reference/memory-lancedb.md +0 -23
  465. package/docs/plugins/reference/memory-wiki.md +0 -23
  466. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  467. package/docs/plugins/reference/microsoft.md +0 -19
  468. package/docs/plugins/reference/migrate-claude.md +0 -19
  469. package/docs/plugins/reference/migrate-hermes.md +0 -19
  470. package/docs/plugins/reference/minimax.md +0 -23
  471. package/docs/plugins/reference/mistral.md +0 -23
  472. package/docs/plugins/reference/moonshot.md +0 -23
  473. package/docs/plugins/reference/msteams.md +0 -23
  474. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  475. package/docs/plugins/reference/nostr.md +0 -23
  476. package/docs/plugins/reference/novita.md +0 -23
  477. package/docs/plugins/reference/nvidia.md +0 -23
  478. package/docs/plugins/reference/oc-path.md +0 -23
  479. package/docs/plugins/reference/ollama.md +0 -23
  480. package/docs/plugins/reference/open-prose.md +0 -19
  481. package/docs/plugins/reference/openai.md +0 -23
  482. package/docs/plugins/reference/opencode-go.md +0 -23
  483. package/docs/plugins/reference/opencode.md +0 -23
  484. package/docs/plugins/reference/openrouter.md +0 -23
  485. package/docs/plugins/reference/openshell.md +0 -19
  486. package/docs/plugins/reference/perplexity.md +0 -23
  487. package/docs/plugins/reference/pixverse.md +0 -23
  488. package/docs/plugins/reference/policy.md +0 -72
  489. package/docs/plugins/reference/qa-channel.md +0 -23
  490. package/docs/plugins/reference/qa-lab.md +0 -19
  491. package/docs/plugins/reference/qa-matrix.md +0 -19
  492. package/docs/plugins/reference/qianfan.md +0 -23
  493. package/docs/plugins/reference/qqbot.md +0 -23
  494. package/docs/plugins/reference/qwen.md +0 -23
  495. package/docs/plugins/reference/runway.md +0 -23
  496. package/docs/plugins/reference/searxng.md +0 -19
  497. package/docs/plugins/reference/senseaudio.md +0 -23
  498. package/docs/plugins/reference/sglang.md +0 -23
  499. package/docs/plugins/reference/signal.md +0 -23
  500. package/docs/plugins/reference/skill-workshop.md +0 -23
  501. package/docs/plugins/reference/slack.md +0 -23
  502. package/docs/plugins/reference/stepfun.md +0 -23
  503. package/docs/plugins/reference/synology-chat.md +0 -23
  504. package/docs/plugins/reference/synthetic.md +0 -23
  505. package/docs/plugins/reference/tavily.md +0 -23
  506. package/docs/plugins/reference/telegram.md +0 -23
  507. package/docs/plugins/reference/tencent.md +0 -23
  508. package/docs/plugins/reference/tlon.md +0 -23
  509. package/docs/plugins/reference/together.md +0 -23
  510. package/docs/plugins/reference/tokenjuice.md +0 -23
  511. package/docs/plugins/reference/tts-local-cli.md +0 -19
  512. package/docs/plugins/reference/twitch.md +0 -23
  513. package/docs/plugins/reference/venice.md +0 -23
  514. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  515. package/docs/plugins/reference/vllm.md +0 -23
  516. package/docs/plugins/reference/voice-call.md +0 -23
  517. package/docs/plugins/reference/volcengine.md +0 -23
  518. package/docs/plugins/reference/voyage.md +0 -19
  519. package/docs/plugins/reference/vydra.md +0 -23
  520. package/docs/plugins/reference/web-readability.md +0 -19
  521. package/docs/plugins/reference/webhooks.md +0 -23
  522. package/docs/plugins/reference/whatsapp.md +0 -23
  523. package/docs/plugins/reference/workboard.md +0 -23
  524. package/docs/plugins/reference/xai.md +0 -23
  525. package/docs/plugins/reference/xiaomi.md +0 -23
  526. package/docs/plugins/reference/zai.md +0 -23
  527. package/docs/plugins/reference/zalo.md +0 -23
  528. package/docs/plugins/reference/zalouser.md +0 -24
  529. package/docs/plugins/reference.md +0 -145
  530. package/docs/plugins/sdk-agent-harness.md +0 -338
  531. package/docs/plugins/sdk-channel-inbound.md +0 -70
  532. package/docs/plugins/sdk-channel-ingress.md +0 -137
  533. package/docs/plugins/sdk-channel-message.md +0 -18
  534. package/docs/plugins/sdk-channel-outbound.md +0 -113
  535. package/docs/plugins/sdk-channel-plugins.md +0 -765
  536. package/docs/plugins/sdk-channel-turn.md +0 -9
  537. package/docs/plugins/sdk-entrypoints.md +0 -344
  538. package/docs/plugins/sdk-migration.md +0 -979
  539. package/docs/plugins/sdk-overview.md +0 -511
  540. package/docs/plugins/sdk-provider-plugins.md +0 -846
  541. package/docs/plugins/sdk-runtime.md +0 -676
  542. package/docs/plugins/sdk-setup.md +0 -550
  543. package/docs/plugins/sdk-subpaths.md +0 -391
  544. package/docs/plugins/sdk-testing.md +0 -403
  545. package/docs/plugins/skill-workshop.md +0 -713
  546. package/docs/plugins/tool-plugins.md +0 -411
  547. package/docs/plugins/voice-call.md +0 -942
  548. package/docs/plugins/webhooks.md +0 -192
  549. package/docs/plugins/workboard.md +0 -252
  550. package/docs/plugins/zalouser.md +0 -86
  551. package/docs/prose.md +0 -137
  552. package/docs/providers/alibaba.md +0 -158
  553. package/docs/providers/anthropic.md +0 -381
  554. package/docs/providers/arcee.md +0 -144
  555. package/docs/providers/azure-speech.md +0 -119
  556. package/docs/providers/bedrock-mantle.md +0 -211
  557. package/docs/providers/bedrock.md +0 -414
  558. package/docs/providers/cerebras.md +0 -130
  559. package/docs/providers/chutes.md +0 -153
  560. package/docs/providers/claude-max-api-proxy.md +0 -191
  561. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  562. package/docs/providers/comfy.md +0 -362
  563. package/docs/providers/deepgram.md +0 -184
  564. package/docs/providers/deepinfra.md +0 -92
  565. package/docs/providers/deepseek.md +0 -146
  566. package/docs/providers/ds4.md +0 -309
  567. package/docs/providers/elevenlabs.md +0 -130
  568. package/docs/providers/fal.md +0 -240
  569. package/docs/providers/fireworks.md +0 -144
  570. package/docs/providers/github-copilot.md +0 -257
  571. package/docs/providers/gmi.md +0 -92
  572. package/docs/providers/google.md +0 -472
  573. package/docs/providers/gradium.md +0 -123
  574. package/docs/providers/groq.md +0 -171
  575. package/docs/providers/huggingface.md +0 -235
  576. package/docs/providers/index.md +0 -105
  577. package/docs/providers/inferrs.md +0 -272
  578. package/docs/providers/inworld.md +0 -120
  579. package/docs/providers/kilocode.md +0 -135
  580. package/docs/providers/litellm.md +0 -234
  581. package/docs/providers/lmstudio.md +0 -224
  582. package/docs/providers/minimax.md +0 -505
  583. package/docs/providers/mistral.md +0 -235
  584. package/docs/providers/models.md +0 -64
  585. package/docs/providers/moonshot.md +0 -413
  586. package/docs/providers/novita.md +0 -92
  587. package/docs/providers/nvidia.md +0 -158
  588. package/docs/providers/ollama-cloud.md +0 -115
  589. package/docs/providers/ollama.md +0 -1225
  590. package/docs/providers/openai.md +0 -1093
  591. package/docs/providers/opencode-go.md +0 -123
  592. package/docs/providers/opencode.md +0 -149
  593. package/docs/providers/openrouter.md +0 -349
  594. package/docs/providers/perplexity-provider.md +0 -123
  595. package/docs/providers/pixverse.md +0 -165
  596. package/docs/providers/qianfan.md +0 -132
  597. package/docs/providers/qwen-oauth.md +0 -115
  598. package/docs/providers/qwen.md +0 -364
  599. package/docs/providers/runway.md +0 -103
  600. package/docs/providers/senseaudio.md +0 -68
  601. package/docs/providers/sglang.md +0 -161
  602. package/docs/providers/stepfun.md +0 -229
  603. package/docs/providers/synthetic.md +0 -154
  604. package/docs/providers/tencent.md +0 -130
  605. package/docs/providers/together.md +0 -140
  606. package/docs/providers/venice.md +0 -312
  607. package/docs/providers/vercel-ai-gateway.md +0 -128
  608. package/docs/providers/vllm.md +0 -407
  609. package/docs/providers/volcengine.md +0 -199
  610. package/docs/providers/vydra.md +0 -180
  611. package/docs/providers/xai.md +0 -571
  612. package/docs/providers/xiaomi.md +0 -262
  613. package/docs/providers/zai.md +0 -224
  614. package/docs/refactor/access.md +0 -9
  615. package/docs/refactor/acp.md +0 -298
  616. package/docs/refactor/canvas.md +0 -131
  617. package/docs/refactor/database-first.md +0 -2256
  618. package/docs/refactor/ingress-core.md +0 -341
  619. package/docs/reference/AGENTS.default.md +0 -131
  620. package/docs/reference/RELEASING.md +0 -799
  621. package/docs/reference/api-usage-costs.md +0 -208
  622. package/docs/reference/application-modernization-plan.md +0 -208
  623. package/docs/reference/code-mode.md +0 -773
  624. package/docs/reference/credits.md +0 -33
  625. package/docs/reference/device-models.md +0 -50
  626. package/docs/reference/fengming-sdk-api-design.md +0 -390
  627. package/docs/reference/full-release-validation.md +0 -202
  628. package/docs/reference/memory-config.md +0 -604
  629. package/docs/reference/prompt-caching.md +0 -358
  630. package/docs/reference/release-performance-sweep.md +0 -360
  631. package/docs/reference/rich-output-protocol.md +0 -101
  632. package/docs/reference/rpc.md +0 -43
  633. package/docs/reference/secret-placeholder-conventions.md +0 -33
  634. package/docs/reference/secretref-credential-surface.md +0 -159
  635. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  636. package/docs/reference/session-management-compaction.md +0 -474
  637. package/docs/reference/templates/AGENTS.dev.md +0 -90
  638. package/docs/reference/templates/AGENTS.md +0 -227
  639. package/docs/reference/templates/BOOT.md +0 -16
  640. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  641. package/docs/reference/templates/CLAUDE.md +0 -1
  642. package/docs/reference/templates/HEARTBEAT.md +0 -24
  643. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  644. package/docs/reference/templates/IDENTITY.md +0 -34
  645. package/docs/reference/templates/SOUL.dev.md +0 -82
  646. package/docs/reference/templates/SOUL.md +0 -49
  647. package/docs/reference/templates/TOOLS.dev.md +0 -29
  648. package/docs/reference/templates/TOOLS.md +0 -51
  649. package/docs/reference/templates/USER.dev.md +0 -23
  650. package/docs/reference/templates/USER.md +0 -28
  651. package/docs/reference/test.md +0 -247
  652. package/docs/reference/token-use.md +0 -246
  653. package/docs/reference/transcript-hygiene.md +0 -214
  654. package/docs/reference/wizard.md +0 -252
  655. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  656. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  657. package/docs/security/formal-verification.md +0 -170
  658. package/docs/security/incident-response.md +0 -59
  659. package/docs/security/network-proxy.md +0 -268
  660. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  661. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  662. package/docs/specs/claw-supervisor.md +0 -247
  663. package/docs/start/bootstrapping.md +0 -49
  664. package/docs/start/docs-directory.md +0 -69
  665. package/docs/start/fengming.md +0 -252
  666. package/docs/start/getting-started.md +0 -152
  667. package/docs/start/hubs.md +0 -201
  668. package/docs/start/lore.md +0 -223
  669. package/docs/start/onboarding-overview.md +0 -72
  670. package/docs/start/onboarding.md +0 -98
  671. package/docs/start/quickstart.md +0 -25
  672. package/docs/start/setup.md +0 -178
  673. package/docs/start/showcase.md +0 -363
  674. package/docs/start/wizard-cli-automation.md +0 -232
  675. package/docs/start/wizard-cli-reference.md +0 -331
  676. package/docs/start/wizard.md +0 -141
  677. package/docs/style.css +0 -137
  678. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  679. package/docs/tools/acp-agents-setup.md +0 -351
  680. package/docs/tools/acp-agents.md +0 -854
  681. package/docs/tools/agent-send.md +0 -130
  682. package/docs/tools/apply-patch.md +0 -64
  683. package/docs/tools/brave-search.md +0 -139
  684. package/docs/tools/browser-control.md +0 -391
  685. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  686. package/docs/tools/browser-login.md +0 -77
  687. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  688. package/docs/tools/browser.md +0 -810
  689. package/docs/tools/btw.md +0 -159
  690. package/docs/tools/capability-cookbook.md +0 -12
  691. package/docs/tools/clawhub.md +0 -5
  692. package/docs/tools/code-execution.md +0 -173
  693. package/docs/tools/creating-skills.md +0 -158
  694. package/docs/tools/diffs.md +0 -525
  695. package/docs/tools/duckduckgo-search.md +0 -109
  696. package/docs/tools/elevated.md +0 -128
  697. package/docs/tools/exa-search.md +0 -152
  698. package/docs/tools/exec-approvals-advanced.md +0 -444
  699. package/docs/tools/exec-approvals.md +0 -494
  700. package/docs/tools/exec.md +0 -285
  701. package/docs/tools/firecrawl.md +0 -155
  702. package/docs/tools/gemini-search.md +0 -114
  703. package/docs/tools/goal.md +0 -217
  704. package/docs/tools/grok-search.md +0 -129
  705. package/docs/tools/image-generation.md +0 -493
  706. package/docs/tools/index.md +0 -178
  707. package/docs/tools/kimi-search.md +0 -105
  708. package/docs/tools/llm-task.md +0 -137
  709. package/docs/tools/lobster.md +0 -365
  710. package/docs/tools/loop-detection.md +0 -154
  711. package/docs/tools/media-overview.md +0 -160
  712. package/docs/tools/minimax-search.md +0 -102
  713. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  714. package/docs/tools/music-generation.md +0 -372
  715. package/docs/tools/ollama-search.md +0 -153
  716. package/docs/tools/pdf.md +0 -213
  717. package/docs/tools/perplexity-search.md +0 -220
  718. package/docs/tools/plugin.md +0 -363
  719. package/docs/tools/reactions.md +0 -100
  720. package/docs/tools/searxng-search.md +0 -141
  721. package/docs/tools/skills-config.md +0 -195
  722. package/docs/tools/skills.md +0 -569
  723. package/docs/tools/slash-commands.md +0 -487
  724. package/docs/tools/steer.md +0 -77
  725. package/docs/tools/subagents.md +0 -651
  726. package/docs/tools/tavily.md +0 -162
  727. package/docs/tools/thinking.md +0 -142
  728. package/docs/tools/tokenjuice.md +0 -84
  729. package/docs/tools/tool-search.md +0 -269
  730. package/docs/tools/trajectory.md +0 -229
  731. package/docs/tools/tts.md +0 -1009
  732. package/docs/tools/video-generation.md +0 -555
  733. package/docs/tools/web-fetch.md +0 -210
  734. package/docs/tools/web.md +0 -461
  735. package/docs/tts.md +0 -11
  736. package/docs/vps.md +0 -139
  737. package/docs/web/control-ui.md +0 -512
  738. package/docs/web/dashboard.md +0 -107
  739. package/docs/web/index.md +0 -133
  740. package/docs/web/tui.md +0 -250
  741. package/docs/web/webchat.md +0 -102
  742. package/npm-shrinkwrap.json +0 -12861
  743. package/patches/.gitkeep +0 -0
  744. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  745. package/pnpm-workspace.yaml +0 -120
  746. package/scripts/crabbox-wrapper.mjs +0 -2004
  747. package/scripts/lib/official-external-channel-catalog.json +0 -560
  748. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  749. package/scripts/lib/official-external-provider-catalog.json +0 -158
  750. package/scripts/lib/package-dist-imports.mjs +0 -171
  751. package/scripts/npm-runner.mjs +0 -91
  752. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  753. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  754. package/scripts/prepare-git-hooks.mjs +0 -72
  755. package/scripts/windows-cmd-helpers.mjs +0 -22
  756. package/skills/batch/SKILL.md +0 -118
  757. package/skills/code-review/SKILL.md +0 -107
  758. package/skills/debug/SKILL.md +0 -83
  759. package/skills/loop/SKILL.md +0 -118
  760. package/skills/run/SKILL.md +0 -79
  761. package/skills/run-skill-generator/SKILL.md +0 -179
  762. package/skills/verify/SKILL.md +0 -103
  763. package/src/agents/templates/HEARTBEAT.md +0 -3
package/docs/tools/tts.md DELETED
@@ -1,1009 +0,0 @@
1
- ---
2
- summary: "Text-to-speech for outbound replies — providers, personas, slash commands, and per-channel output"
3
- read_when:
4
- - Enabling text-to-speech for replies
5
- - Configuring a TTS provider, fallback chain, or persona
6
- - Using /tts commands or directives
7
- title: "Text-to-speech"
8
- sidebarTitle: "Text to speech (TTS)"
9
- ---
10
-
11
- FengMing can convert outbound replies into audio across **14 speech providers**
12
- and deliver native voice messages on Feishu, Matrix, Telegram, and WhatsApp,
13
- audio attachments everywhere else, and PCM/Ulaw streams for telephony and Talk.
14
-
15
- TTS is the speech-output half of Talk's `stt-tts` mode. Provider-native
16
- `realtime` Talk sessions synthesize speech inside the realtime provider instead
17
- of calling this TTS path, while `transcription` sessions do not synthesize an
18
- assistant voice response.
19
-
20
- ## Quick start
21
-
22
- <Steps>
23
- <Step title="Pick a provider">
24
- OpenAI and ElevenLabs are the most reliable hosted options. Microsoft and
25
- Local CLI work without an API key. See the [provider matrix](#supported-providers)
26
- for the full list.
27
- </Step>
28
- <Step title="Set the API key">
29
- Export the env var for your provider (for example `OPENAI_API_KEY`,
30
- `ELEVENLABS_API_KEY`). Microsoft and Local CLI need no key.
31
- </Step>
32
- <Step title="Enable in config">
33
- Set `messages.tts.auto: "always"` and `messages.tts.provider`:
34
-
35
- ```json5
36
- {
37
- messages: {
38
- tts: {
39
- auto: "always",
40
- provider: "elevenlabs",
41
- },
42
- },
43
- }
44
- ```
45
-
46
- </Step>
47
- <Step title="Try it in chat">
48
- `/tts status` shows the current state. `/tts audio Hello from FengMing`
49
- sends a one-off audio reply.
50
- </Step>
51
- </Steps>
52
-
53
- <Note>
54
- Auto-TTS is **off** by default. When `messages.tts.provider` is unset,
55
- FengMing picks the first configured provider in registry auto-select order.
56
- The built-in `tts` agent tool is explicit-intent only: ordinary chat stays
57
- text unless the user asks for audio, uses `/tts`, or enables Auto-TTS/directive
58
- speech.
59
- </Note>
60
-
61
- ## Supported providers
62
-
63
- | Provider | Auth | Notes |
64
- | ----------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
65
- | **Azure Speech** | `AZURE_SPEECH_KEY` + `AZURE_SPEECH_REGION` (also `AZURE_SPEECH_API_KEY`, `SPEECH_KEY`, `SPEECH_REGION`) | Native Ogg/Opus voice-note output and telephony. |
66
- | **DeepInfra** | `DEEPINFRA_API_KEY` | OpenAI-compatible TTS. Defaults to `hexgrad/Kokoro-82M`. |
67
- | **ElevenLabs** | `ELEVENLABS_API_KEY` or `XI_API_KEY` | Voice cloning, multilingual, deterministic via `seed`; streamed for Discord voice playback. |
68
- | **Google Gemini** | `GEMINI_API_KEY` or `GOOGLE_API_KEY` | Gemini API batch TTS; persona-aware via `promptTemplate: "audio-profile-v1"`. |
69
- | **Gradium** | `GRADIUM_API_KEY` | Voice-note and telephony output. |
70
- | **Inworld** | `INWORLD_API_KEY` | Streaming TTS API. Native Opus voice-note and PCM telephony. |
71
- | **Local CLI** | none | Runs a configured local TTS command. |
72
- | **Microsoft** | none | Public Edge neural TTS via `node-edge-tts`. Best-effort, no SLA. |
73
- | **MiniMax** | `MINIMAX_API_KEY` (or Token Plan: `MINIMAX_OAUTH_TOKEN`, `MINIMAX_CODE_PLAN_KEY`, `MINIMAX_CODING_API_KEY`) | T2A v2 API. Defaults to `speech-2.8-hd`. |
74
- | **OpenAI** | `OPENAI_API_KEY` | Also used for auto-summary; supports persona `instructions`. |
75
- | **OpenRouter** | `OPENROUTER_API_KEY` (can reuse `models.providers.openrouter.apiKey`) | Default model `hexgrad/kokoro-82m`. |
76
- | **Volcengine** | `VOLCENGINE_TTS_API_KEY` or `BYTEPLUS_SEED_SPEECH_API_KEY` (legacy AppID/token: `VOLCENGINE_TTS_APPID`/`_TOKEN`) | BytePlus Seed Speech HTTP API. |
77
- | **Vydra** | `VYDRA_API_KEY` | Shared image, video, and speech provider. |
78
- | **xAI** | `XAI_API_KEY` | xAI batch TTS. Native Opus voice-note is **not** supported. |
79
- | **Xiaomi MiMo** | `XIAOMI_API_KEY` | MiMo TTS through Xiaomi chat completions. |
80
-
81
- If multiple providers are configured, the selected one is used first and the
82
- others are fallback options. Auto-summary uses `summaryModel` (or
83
- `agents.defaults.model.primary`), so that provider must also be authenticated
84
- if you keep summaries enabled.
85
-
86
- <Warning>
87
- The bundled **Microsoft** provider uses Microsoft Edge's online neural TTS
88
- service via `node-edge-tts`. It is a public web service without a published
89
- SLA or quota — treat it as best-effort. The legacy provider id `edge` is
90
- normalized to `microsoft` and `fengming doctor --fix` rewrites persisted
91
- config; new configs should always use `microsoft`.
92
- </Warning>
93
-
94
- ## Configuration
95
-
96
- TTS config lives under `messages.tts` in `~/.fengming/fengming.json`. Pick a
97
- preset and adapt the provider block:
98
-
99
- <Tabs>
100
- <Tab title="Azure Speech">
101
- ```json5
102
- {
103
- messages: {
104
- tts: {
105
- auto: "always",
106
- provider: "azure-speech",
107
- providers: {
108
- "azure-speech": {
109
- apiKey: "${AZURE_SPEECH_KEY}",
110
- region: "eastus",
111
- speakerVoice: "en-US-JennyNeural",
112
- lang: "en-US",
113
- outputFormat: "audio-24khz-48kbitrate-mono-mp3",
114
- voiceNoteOutputFormat: "ogg-24khz-16bit-mono-opus",
115
- },
116
- },
117
- },
118
- },
119
- }
120
- ```
121
- </Tab>
122
- <Tab title="ElevenLabs">
123
- ```json5
124
- {
125
- messages: {
126
- tts: {
127
- auto: "always",
128
- provider: "elevenlabs",
129
- providers: {
130
- elevenlabs: {
131
- apiKey: "${ELEVENLABS_API_KEY}",
132
- model: "eleven_multilingual_v2",
133
- speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",
134
- },
135
- },
136
- },
137
- },
138
- }
139
- ```
140
- </Tab>
141
- <Tab title="Google Gemini">
142
- ```json5
143
- {
144
- messages: {
145
- tts: {
146
- auto: "always",
147
- provider: "google",
148
- providers: {
149
- google: {
150
- apiKey: "${GEMINI_API_KEY}",
151
- model: "gemini-3.1-flash-tts-preview",
152
- speakerVoice: "Kore",
153
- // Optional natural-language style prompts:
154
- // audioProfile: "Speak in a calm, podcast-host tone.",
155
- // speakerName: "Alex",
156
- },
157
- },
158
- },
159
- },
160
- }
161
- ```
162
- </Tab>
163
- <Tab title="Gradium">
164
- ```json5
165
- {
166
- messages: {
167
- tts: {
168
- auto: "always",
169
- provider: "gradium",
170
- providers: {
171
- gradium: {
172
- apiKey: "${GRADIUM_API_KEY}",
173
- speakerVoiceId: "YTpq7expH9539ERJ",
174
- },
175
- },
176
- },
177
- },
178
- }
179
- ```
180
- </Tab>
181
- <Tab title="Inworld">
182
- ```json5
183
- {
184
- messages: {
185
- tts: {
186
- auto: "always",
187
- provider: "inworld",
188
- providers: {
189
- inworld: {
190
- apiKey: "${INWORLD_API_KEY}",
191
- modelId: "inworld-tts-1.5-max",
192
- speakerVoiceId: "Sarah",
193
- temperature: 0.7,
194
- },
195
- },
196
- },
197
- },
198
- }
199
- ```
200
- </Tab>
201
- <Tab title="Local CLI">
202
- ```json5
203
- {
204
- messages: {
205
- tts: {
206
- auto: "always",
207
- provider: "tts-local-cli",
208
- providers: {
209
- "tts-local-cli": {
210
- command: "say",
211
- args: ["-o", "{{OutputPath}}", "{{Text}}"],
212
- outputFormat: "wav",
213
- timeoutMs: 120000,
214
- },
215
- },
216
- },
217
- },
218
- }
219
- ```
220
- </Tab>
221
- <Tab title="Microsoft (no key)">
222
- ```json5
223
- {
224
- messages: {
225
- tts: {
226
- auto: "always",
227
- provider: "microsoft",
228
- providers: {
229
- microsoft: {
230
- enabled: true,
231
- speakerVoice: "en-US-MichelleNeural",
232
- lang: "en-US",
233
- outputFormat: "audio-24khz-48kbitrate-mono-mp3",
234
- rate: "+0%",
235
- pitch: "+0%",
236
- },
237
- },
238
- },
239
- },
240
- }
241
- ```
242
- </Tab>
243
- <Tab title="MiniMax">
244
- ```json5
245
- {
246
- messages: {
247
- tts: {
248
- auto: "always",
249
- provider: "minimax",
250
- providers: {
251
- minimax: {
252
- apiKey: "${MINIMAX_API_KEY}",
253
- model: "speech-2.8-hd",
254
- speakerVoiceId: "English_expressive_narrator",
255
- speed: 1.0,
256
- vol: 1.0,
257
- pitch: 0,
258
- },
259
- },
260
- },
261
- },
262
- }
263
- ```
264
- </Tab>
265
- <Tab title="OpenAI + ElevenLabs">
266
- ```json5
267
- {
268
- messages: {
269
- tts: {
270
- auto: "always",
271
- provider: "openai",
272
- summaryModel: "openai/gpt-4.1-mini",
273
- modelOverrides: { enabled: true },
274
- providers: {
275
- openai: {
276
- apiKey: "${OPENAI_API_KEY}",
277
- model: "gpt-4o-mini-tts",
278
- speakerVoice: "alloy",
279
- },
280
- elevenlabs: {
281
- apiKey: "${ELEVENLABS_API_KEY}",
282
- model: "eleven_multilingual_v2",
283
- speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",
284
- voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0 },
285
- applyTextNormalization: "auto",
286
- languageCode: "en",
287
- },
288
- },
289
- },
290
- },
291
- }
292
- ```
293
- </Tab>
294
- <Tab title="OpenRouter">
295
- ```json5
296
- {
297
- messages: {
298
- tts: {
299
- auto: "always",
300
- provider: "openrouter",
301
- providers: {
302
- openrouter: {
303
- apiKey: "${OPENROUTER_API_KEY}",
304
- model: "hexgrad/kokoro-82m",
305
- speakerVoice: "af_alloy",
306
- responseFormat: "mp3",
307
- },
308
- },
309
- },
310
- },
311
- }
312
- ```
313
- </Tab>
314
- <Tab title="Volcengine">
315
- ```json5
316
- {
317
- messages: {
318
- tts: {
319
- auto: "always",
320
- provider: "volcengine",
321
- providers: {
322
- volcengine: {
323
- apiKey: "${VOLCENGINE_TTS_API_KEY}",
324
- resourceId: "seed-tts-1.0",
325
- speakerVoice: "en_female_anna_mars_bigtts",
326
- },
327
- },
328
- },
329
- },
330
- }
331
- ```
332
- </Tab>
333
- <Tab title="xAI">
334
- ```json5
335
- {
336
- messages: {
337
- tts: {
338
- auto: "always",
339
- provider: "xai",
340
- providers: {
341
- xai: {
342
- apiKey: "${XAI_API_KEY}",
343
- speakerVoiceId: "eve",
344
- language: "en",
345
- responseFormat: "mp3",
346
- },
347
- },
348
- },
349
- },
350
- }
351
- ```
352
- </Tab>
353
- <Tab title="Xiaomi MiMo">
354
- ```json5
355
- {
356
- messages: {
357
- tts: {
358
- auto: "always",
359
- provider: "xiaomi",
360
- providers: {
361
- xiaomi: {
362
- apiKey: "${XIAOMI_API_KEY}",
363
- model: "mimo-v2.5-tts",
364
- speakerVoice: "mimo_default",
365
- format: "mp3",
366
- },
367
- },
368
- },
369
- },
370
- }
371
- ```
372
- </Tab>
373
- </Tabs>
374
-
375
- ### Per-agent voice overrides
376
-
377
- Use `agents.list[].tts` when one agent should speak with a different provider,
378
- voice, model, persona, or auto-TTS mode. The agent block deep-merges over
379
- `messages.tts`, so provider credentials can stay in the global provider config:
380
-
381
- ```json5
382
- {
383
- messages: {
384
- tts: {
385
- auto: "always",
386
- provider: "elevenlabs",
387
- providers: {
388
- elevenlabs: { apiKey: "${ELEVENLABS_API_KEY}", model: "eleven_multilingual_v2" },
389
- },
390
- },
391
- },
392
- agents: {
393
- list: [
394
- {
395
- id: "reader",
396
- tts: {
397
- providers: {
398
- elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" },
399
- },
400
- },
401
- },
402
- ],
403
- },
404
- }
405
- ```
406
-
407
- To pin a per-agent persona, set `agents.list[].tts.persona` alongside provider
408
- config — it overrides the global `messages.tts.persona` for that agent only.
409
-
410
- Precedence order for automatic replies, `/tts audio`, `/tts status`, and the
411
- `tts` agent tool:
412
-
413
- 1. `messages.tts`
414
- 2. active `agents.list[].tts`
415
- 3. channel override, when the channel supports `channels.<channel>.tts`
416
- 4. account override, when the channel passes `channels.<channel>.accounts.<id>.tts`
417
- 5. local `/tts` preferences for this host
418
- 6. inline `[[tts:...]]` directives when [model overrides](#model-driven-directives) are enabled
419
-
420
- Channel and account overrides use the same shape as `messages.tts` and
421
- deep-merge over the earlier layers, so shared provider credentials can stay in
422
- `messages.tts` while a channel or bot account changes only speaker voice, model, persona,
423
- or auto mode:
424
-
425
- ```json5
426
- {
427
- messages: {
428
- tts: {
429
- provider: "openai",
430
- providers: {
431
- openai: { apiKey: "${OPENAI_API_KEY}", model: "gpt-4o-mini-tts" },
432
- },
433
- },
434
- },
435
- channels: {
436
- feishu: {
437
- accounts: {
438
- english: {
439
- tts: {
440
- providers: {
441
- openai: { speakerVoice: "shimmer" },
442
- },
443
- },
444
- },
445
- },
446
- },
447
- },
448
- }
449
- ```
450
-
451
- ## Personas
452
-
453
- A **persona** is a stable spoken identity that can be applied deterministically
454
- across providers. It can prefer one provider, define provider-neutral prompt
455
- intent, and carry provider-specific bindings for voices, models, prompt
456
- templates, seeds, and voice settings.
457
-
458
- ### Minimal persona
459
-
460
- ```json5
461
- {
462
- messages: {
463
- tts: {
464
- auto: "always",
465
- persona: "narrator",
466
- personas: {
467
- narrator: {
468
- label: "Narrator",
469
- provider: "elevenlabs",
470
- providers: {
471
- elevenlabs: {
472
- speakerVoiceId: "EXAVITQu4vr4xnSDxMaL",
473
- modelId: "eleven_multilingual_v2",
474
- },
475
- },
476
- },
477
- },
478
- },
479
- },
480
- }
481
- ```
482
-
483
- ### Full persona (provider-neutral prompt)
484
-
485
- ```json5
486
- {
487
- messages: {
488
- tts: {
489
- auto: "always",
490
- persona: "alfred",
491
- personas: {
492
- alfred: {
493
- label: "Alfred",
494
- description: "Dry, warm British butler narrator.",
495
- provider: "google",
496
- fallbackPolicy: "preserve-persona",
497
- prompt: {
498
- profile: "A brilliant British butler. Dry, witty, warm, charming, emotionally expressive, never generic.",
499
- scene: "A quiet late-night study. Close-mic narration for a trusted operator.",
500
- sampleContext: "The speaker is answering a private technical request with concise confidence and dry warmth.",
501
- style: "Refined, understated, lightly amused.",
502
- accent: "British English.",
503
- pacing: "Measured, with short dramatic pauses.",
504
- constraints: ["Do not read configuration values aloud.", "Do not explain the persona."],
505
- },
506
- providers: {
507
- google: {
508
- model: "gemini-3.1-flash-tts-preview",
509
- speakerVoice: "Algieba",
510
- promptTemplate: "audio-profile-v1",
511
- },
512
- openai: { model: "gpt-4o-mini-tts", speakerVoice: "cedar" },
513
- elevenlabs: {
514
- speakerVoiceId: "voice_id",
515
- modelId: "eleven_multilingual_v2",
516
- seed: 42,
517
- voiceSettings: {
518
- stability: 0.65,
519
- similarityBoost: 0.8,
520
- style: 0.25,
521
- useSpeakerBoost: true,
522
- speed: 0.95,
523
- },
524
- },
525
- },
526
- },
527
- },
528
- },
529
- },
530
- }
531
- ```
532
-
533
- ### Persona resolution
534
-
535
- The active persona is selected deterministically:
536
-
537
- 1. `/tts persona <id>` local preference, if set.
538
- 2. `messages.tts.persona`, if set.
539
- 3. No persona.
540
-
541
- Provider selection runs explicit-first:
542
-
543
- 1. Direct overrides (CLI, gateway, Talk, allowed TTS directives).
544
- 2. `/tts provider <id>` local preference.
545
- 3. Active persona's `provider`.
546
- 4. `messages.tts.provider`.
547
- 5. Registry auto-select.
548
-
549
- For each provider attempt, FengMing merges configs in this order:
550
-
551
- 1. `messages.tts.providers.<id>`
552
- 2. `messages.tts.personas.<persona>.providers.<id>`
553
- 3. Trusted request overrides
554
- 4. Allowed model-emitted TTS directive overrides
555
-
556
- ### How providers use persona prompts
557
-
558
- Persona prompt fields (`profile`, `scene`, `sampleContext`, `style`, `accent`,
559
- `pacing`, `constraints`) are **provider-neutral**. Each provider decides how
560
- to use them:
561
-
562
- <AccordionGroup>
563
- <Accordion title="Google Gemini">
564
- Wraps persona prompt fields in a Gemini TTS prompt structure **only when**
565
- the effective Google provider config sets `promptTemplate: "audio-profile-v1"`
566
- or `personaPrompt`. The older `audioProfile` and `speakerName` fields are
567
- still prepended as Google-specific prompt text. Inline audio tags such as
568
- `[whispers]` or `[laughs]` inside a `[[tts:text]]` block are preserved
569
- inside the Gemini transcript; FengMing does not generate these tags.
570
- </Accordion>
571
- <Accordion title="OpenAI">
572
- Maps persona prompt fields to the request `instructions` field **only when**
573
- no explicit OpenAI `instructions` is configured. Explicit `instructions`
574
- always wins.
575
- </Accordion>
576
- <Accordion title="Other providers">
577
- Use only the provider-specific persona bindings under
578
- `personas.<id>.providers.<provider>`. Persona prompt fields are ignored
579
- unless the provider implements its own persona-prompt mapping.
580
- </Accordion>
581
- </AccordionGroup>
582
-
583
- ### Fallback policy
584
-
585
- `fallbackPolicy` controls behavior when a persona has **no binding** for the
586
- attempted provider:
587
-
588
- | Policy | Behavior |
589
- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
590
- | `preserve-persona` | **Default.** Provider-neutral prompt fields stay available; the provider may use them or ignore them. |
591
- | `provider-defaults` | Persona is omitted from prompt preparation for that attempt; the provider uses its neutral defaults while fallback to other providers continues. |
592
- | `fail` | Skip that provider attempt with `reasonCode: "not_configured"` and `personaBinding: "missing"`. Fallback providers are still tried. |
593
-
594
- The whole TTS request only fails when **every** attempted provider is skipped
595
- or fails.
596
-
597
- Talk session provider selection is session-scoped. A Talk client should choose
598
- provider ids, model ids, voice ids, and locales from `talk.catalog` and pass
599
- them through the Talk session or handoff request. Opening a voice session should
600
- not mutate `messages.tts` or global Talk provider defaults.
601
-
602
- ## Model-driven directives
603
-
604
- By default, the assistant **can** emit `[[tts:...]]` directives to override
605
- voice, model, or speed for a single reply, plus an optional
606
- `[[tts:text]]...[[/tts:text]]` block for expressive cues that should appear in
607
- audio only:
608
-
609
- ```text
610
- Here you go.
611
-
612
- [[tts:speakerVoiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
613
- [[tts:text]](laughs) Read the song once more.[[/tts:text]]
614
- ```
615
-
616
- When `messages.tts.auto` is `"tagged"`, **directives are required** to trigger
617
- audio. Streaming block delivery strips directives from visible text before the
618
- channel sees them, even when split across adjacent blocks.
619
-
620
- `provider=...` is ignored unless `modelOverrides.allowProvider: true`. When a
621
- reply declares `provider=...`, the other keys in that directive are parsed
622
- only by that provider; unsupported keys are stripped and reported as TTS
623
- directive warnings.
624
-
625
- **Available directive keys:**
626
-
627
- - `provider` (registered provider id; requires `allowProvider: true`)
628
- - `speakerVoice` / `speakerVoiceId` (legacy aliases: `voice`, `voiceName`, `voice_name`, `google_voice`, `voiceId`)
629
- - `model` / `google_model`
630
- - `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost`
631
- - `vol` / `volume` (MiniMax volume, 0–10)
632
- - `pitch` (MiniMax integer pitch, −12 to 12; fractional values are truncated)
633
- - `emotion` (Volcengine emotion tag)
634
- - `applyTextNormalization` (`auto|on|off`)
635
- - `languageCode` (ISO 639-1)
636
- - `seed`
637
-
638
- **Disable model overrides entirely:**
639
-
640
- ```json5
641
- { messages: { tts: { modelOverrides: { enabled: false } } } }
642
- ```
643
-
644
- **Allow provider switching while keeping other knobs configurable:**
645
-
646
- ```json5
647
- { messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } }
648
- ```
649
-
650
- ## Slash commands
651
-
652
- Single command `/tts`. On Discord, FengMing also registers `/voice` because
653
- `/tts` is a built-in Discord command — text `/tts ...` still works.
654
-
655
- ```text
656
- /tts off | on | status
657
- /tts chat on | off | default
658
- /tts latest
659
- /tts provider <id>
660
- /tts persona <id> | off
661
- /tts limit <chars>
662
- /tts summary off
663
- /tts audio <text>
664
- ```
665
-
666
- <Note>
667
- Commands require an authorized sender (allowlist/owner rules apply) and either
668
- `commands.text` or native command registration must be enabled.
669
- </Note>
670
-
671
- Behavior notes:
672
-
673
- - `/tts on` writes the local TTS preference to `always`; `/tts off` writes it to `off`.
674
- - `/tts chat on|off|default` writes a session-scoped auto-TTS override for the current chat.
675
- - `/tts persona <id>` writes the local persona preference; `/tts persona off` clears it.
676
- - `/tts latest` reads the latest assistant reply from the current session transcript and sends it as audio once. It stores only a hash of that reply on the session entry to suppress duplicate voice sends.
677
- - `/tts audio` generates a one-off audio reply (does **not** toggle TTS on).
678
- - `limit` and `summary` are stored in **local prefs**, not the main config.
679
- - `/tts status` includes fallback diagnostics for the latest attempt — `Fallback: <primary> -> <used>`, `Attempts: ...`, and per-attempt detail (`provider:outcome(reasonCode) latency`).
680
- - `/status` shows the active TTS mode plus configured provider, model, voice, and sanitized custom endpoint metadata when TTS is enabled.
681
-
682
- ## Per-user preferences
683
-
684
- Slash commands write local overrides to `prefsPath`. The default is
685
- `~/.fengming/settings/tts.json`; override with the `FENGMING_TTS_PREFS` env var
686
- or `messages.tts.prefsPath`.
687
-
688
- | Stored field | Effect |
689
- | ------------ | -------------------------------------------- |
690
- | `auto` | Local auto-TTS override (`always`, `off`, …) |
691
- | `provider` | Local primary provider override |
692
- | `persona` | Local persona override |
693
- | `maxLength` | Summary threshold (default `1500` chars) |
694
- | `summarize` | Summary toggle (default `true`) |
695
-
696
- These override the effective config from `messages.tts` plus the active
697
- `agents.list[].tts` block for that host.
698
-
699
- ## Output formats (fixed)
700
-
701
- TTS voice delivery is channel-capability driven. Channel plugins advertise
702
- whether voice-style TTS should ask providers for a native `voice-note` target or
703
- keep normal `audio-file` synthesis and only mark compatible output for voice
704
- delivery.
705
-
706
- - **Voice-note capable channels**: voice-note replies prefer Opus (`opus_48000_64` from ElevenLabs, `opus` from OpenAI).
707
- - 48kHz / 64kbps is a good voice message tradeoff.
708
- - **Feishu / WhatsApp**: when a voice-note reply is produced as MP3/WebM/WAV/M4A
709
- or another likely audio file, the channel plugin transcodes it to 48kHz
710
- Ogg/Opus with `ffmpeg` before sending the native voice message. WhatsApp sends
711
- the result through the Baileys `audio` payload with `ptt: true` and
712
- `audio/ogg; codecs=opus`. If conversion fails, Feishu receives the original
713
- file as an attachment; WhatsApp send fails rather than posting an incompatible
714
- PTT payload.
715
- - **Other channels**: MP3 (`mp3_44100_128` from ElevenLabs, `mp3` from OpenAI).
716
- - 44.1kHz / 128kbps is the default balance for speech clarity.
717
- - **MiniMax**: MP3 (`speech-2.8-hd` model, 32kHz sample rate) for normal audio attachments. For channel-advertised voice-note targets, FengMing transcodes the MiniMax MP3 to 48kHz Opus with `ffmpeg` before delivery when the channel advertises transcoding.
718
- - **Xiaomi MiMo**: MP3 by default, or WAV when configured. For channel-advertised voice-note targets, FengMing transcodes Xiaomi output to 48kHz Opus with `ffmpeg` before delivery when the channel advertises transcoding.
719
- - **Local CLI**: uses the configured `outputFormat`. Voice-note targets are
720
- converted to Ogg/Opus and telephony output is converted to raw 16 kHz mono PCM
721
- with `ffmpeg`.
722
- - **Google Gemini**: Gemini API TTS returns raw 24kHz PCM. FengMing wraps it as WAV for audio attachments, transcodes it to 48kHz Opus for voice-note targets, and returns PCM directly for Talk/telephony.
723
- - **Gradium**: WAV for audio attachments, Opus for voice-note targets, and `ulaw_8000` at 8 kHz for telephony.
724
- - **Inworld**: MP3 for normal audio attachments, native `OGG_OPUS` for voice-note targets, and raw `PCM` at 22050 Hz for Talk/telephony.
725
- - **xAI**: MP3 by default; `responseFormat` may be `mp3`, `wav`, `pcm`, `mulaw`, or `alaw`. FengMing uses xAI's batch REST TTS endpoint and returns a complete audio attachment; xAI's streaming TTS WebSocket is not used by this provider path. Native Opus voice-note format is not supported by this path.
726
- - **Microsoft**: uses `microsoft.outputFormat` (default `audio-24khz-48kbitrate-mono-mp3`).
727
- - The bundled transport accepts an `outputFormat`, but not all formats are available from the service.
728
- - Output format values follow Microsoft Speech output formats (including Ogg/WebM Opus).
729
- - Telegram `sendVoice` accepts OGG/MP3/M4A; use OpenAI/ElevenLabs if you need
730
- guaranteed Opus voice messages.
731
- - If the configured Microsoft output format fails, FengMing retries with MP3.
732
-
733
- OpenAI/ElevenLabs output formats are fixed per channel (see above).
734
-
735
- ## Auto-TTS behavior
736
-
737
- When `messages.tts.auto` is enabled, FengMing:
738
-
739
- - Skips TTS if the reply already contains media or a `MEDIA:` directive.
740
- - Skips very short replies (under 10 chars).
741
- - Summarizes long replies when summaries are enabled, using
742
- `summaryModel` (or `agents.defaults.model.primary`).
743
- - Attaches the generated audio to the reply.
744
- - In `mode: "final"`, still sends audio-only TTS for streamed final replies
745
- after the text stream completes; the generated media goes through the same
746
- channel media normalization as normal reply attachments.
747
-
748
- If the reply exceeds `maxLength` and summary is off (or no API key for the
749
- summary model), audio is skipped and the normal text reply is sent.
750
-
751
- ```text
752
- Reply -> TTS enabled?
753
- no -> send text
754
- yes -> has media / MEDIA: / short?
755
- yes -> send text
756
- no -> length > limit?
757
- no -> TTS -> attach audio
758
- yes -> summary enabled?
759
- no -> send text
760
- yes -> summarize -> TTS -> attach audio
761
- ```
762
-
763
- ## Output formats by channel
764
-
765
- | Target | Format |
766
- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
767
- | Feishu / Matrix / Telegram / WhatsApp | Voice-note replies prefer **Opus** (`opus_48000_64` from ElevenLabs, `opus` from OpenAI). 48 kHz / 64 kbps balances clarity and size. |
768
- | Other channels | **MP3** (`mp3_44100_128` from ElevenLabs, `mp3` from OpenAI). 44.1 kHz / 128 kbps default for speech. |
769
- | Talk / telephony | Provider-native **PCM** (Inworld 22050 Hz, Google 24 kHz), or `ulaw_8000` from Gradium for telephony. |
770
-
771
- Per-provider notes:
772
-
773
- - **Feishu / WhatsApp transcoding:** When a voice-note reply lands as MP3/WebM/WAV/M4A, the channel plugin transcodes to 48 kHz Ogg/Opus with `ffmpeg`. WhatsApp sends through Baileys with `ptt: true` and `audio/ogg; codecs=opus`. If conversion fails: Feishu falls back to attaching the original file; WhatsApp send fails rather than posting an incompatible PTT payload.
774
- - **MiniMax / Xiaomi MiMo:** Default MP3 (32 kHz for MiniMax `speech-2.8-hd`); transcoded to 48 kHz Opus for voice-note targets via `ffmpeg`.
775
- - **Local CLI:** Uses configured `outputFormat`. Voice-note targets are converted to Ogg/Opus and telephony output to raw 16 kHz mono PCM.
776
- - **Google Gemini:** Returns raw 24 kHz PCM. FengMing wraps as WAV for attachments, transcodes to 48 kHz Opus for voice-note targets, returns PCM directly for Talk/telephony.
777
- - **Inworld:** MP3 attachments, native `OGG_OPUS` voice-note, raw `PCM` 22050 Hz for Talk/telephony.
778
- - **xAI:** MP3 by default; `responseFormat` may be `mp3|wav|pcm|mulaw|alaw`. Uses xAI's batch REST endpoint — streaming WebSocket TTS is **not** used. Native Opus voice-note format is **not** supported.
779
- - **Microsoft:** Uses `microsoft.outputFormat` (default `audio-24khz-48kbitrate-mono-mp3`). Telegram `sendVoice` accepts OGG/MP3/M4A; use OpenAI/ElevenLabs if you need guaranteed Opus voice messages. If the configured Microsoft format fails, FengMing retries with MP3.
780
-
781
- OpenAI and ElevenLabs output formats are fixed per channel as listed above.
782
-
783
- ## Field reference
784
-
785
- <AccordionGroup>
786
- <Accordion title="Top-level messages.tts.*">
787
- <ParamField path="auto" type='"off" | "always" | "inbound" | "tagged"'>
788
- Auto-TTS mode. `inbound` only sends audio after an inbound voice message; `tagged` only sends audio when the reply includes `[[tts:...]]` directives or a `[[tts:text]]` block.
789
- </ParamField>
790
- <ParamField path="enabled" type="boolean" deprecated>
791
- Legacy toggle. `fengming doctor --fix` migrates this to `auto`.
792
- </ParamField>
793
- <ParamField path="mode" type='"final" | "all"' default="final">
794
- `"all"` includes tool/block replies in addition to final replies.
795
- </ParamField>
796
- <ParamField path="provider" type="string">
797
- Speech provider id. When unset, FengMing uses the first configured provider in registry auto-select order. Legacy `provider: "edge"` is rewritten to `"microsoft"` by `fengming doctor --fix`.
798
- </ParamField>
799
- <ParamField path="persona" type="string">
800
- Active persona id from `personas`. Normalized to lowercase.
801
- </ParamField>
802
- <ParamField path="personas.<id>" type="object">
803
- Stable spoken identity. Fields: `label`, `description`, `provider`, `fallbackPolicy`, `prompt`, `providers.<provider>`. See [Personas](#personas).
804
- </ParamField>
805
- <ParamField path="summaryModel" type="string">
806
- Cheap model for auto-summary; defaults to `agents.defaults.model.primary`. Accepts `provider/model` or a configured model alias.
807
- </ParamField>
808
- <ParamField path="modelOverrides" type="object">
809
- Allow the model to emit TTS directives. `enabled` defaults to `true`; `allowProvider` defaults to `false`.
810
- </ParamField>
811
- <ParamField path="providers.<id>" type="object">
812
- Provider-owned settings keyed by speech provider id. Legacy direct blocks (`messages.tts.openai`, `.elevenlabs`, `.microsoft`, `.edge`) are rewritten by `fengming doctor --fix`; commit only `messages.tts.providers.<id>`.
813
- </ParamField>
814
- <ParamField path="maxTextLength" type="number">
815
- Hard cap for TTS input characters. `/tts audio` fails if exceeded.
816
- </ParamField>
817
- <ParamField path="timeoutMs" type="number">
818
- Request timeout in milliseconds.
819
- </ParamField>
820
- <ParamField path="prefsPath" type="string">
821
- Override the local prefs JSON path (provider/limit/summary). Default `~/.fengming/settings/tts.json`.
822
- </ParamField>
823
- </Accordion>
824
-
825
- <Accordion title="Azure Speech">
826
- <ParamField path="apiKey" type="string">Env: `AZURE_SPEECH_KEY`, `AZURE_SPEECH_API_KEY`, or `SPEECH_KEY`.</ParamField>
827
- <ParamField path="region" type="string">Azure Speech region (e.g. `eastus`). Env: `AZURE_SPEECH_REGION` or `SPEECH_REGION`.</ParamField>
828
- <ParamField path="endpoint" type="string">Optional Azure Speech endpoint override (alias `baseUrl`).</ParamField>
829
- <ParamField path="speakerVoice" type="string">Azure voice ShortName. Default `en-US-JennyNeural`. Legacy alias: `voice`.</ParamField>
830
- <ParamField path="lang" type="string">SSML language code. Default `en-US`.</ParamField>
831
- <ParamField path="outputFormat" type="string">Azure `X-Microsoft-OutputFormat` for standard audio. Default `audio-24khz-48kbitrate-mono-mp3`.</ParamField>
832
- <ParamField path="voiceNoteOutputFormat" type="string">Azure `X-Microsoft-OutputFormat` for voice-note output. Default `ogg-24khz-16bit-mono-opus`.</ParamField>
833
- </Accordion>
834
-
835
- <Accordion title="ElevenLabs">
836
- <ParamField path="apiKey" type="string">Falls back to `ELEVENLABS_API_KEY` or `XI_API_KEY`.</ParamField>
837
- <ParamField path="model" type="string">Model id (e.g. `eleven_multilingual_v2`, `eleven_v3`).</ParamField>
838
- <ParamField path="speakerVoiceId" type="string">ElevenLabs voice id. Legacy alias: `voiceId`.</ParamField>
839
- <ParamField path="voiceSettings" type="object">
840
- `stability`, `similarityBoost`, `style` (each `0..1`), `useSpeakerBoost` (`true|false`), `speed` (`0.5..2.0`, `1.0` = normal).
841
- </ParamField>
842
- <ParamField path="applyTextNormalization" type='"auto" | "on" | "off"'>Text normalization mode.</ParamField>
843
- <ParamField path="languageCode" type="string">2-letter ISO 639-1 (e.g. `en`, `de`).</ParamField>
844
- <ParamField path="seed" type="number">Integer `0..4294967295` for best-effort determinism.</ParamField>
845
- <ParamField path="baseUrl" type="string">Override ElevenLabs API base URL.</ParamField>
846
- </Accordion>
847
-
848
- <Accordion title="Google Gemini">
849
- <ParamField path="apiKey" type="string">Falls back to `GEMINI_API_KEY` / `GOOGLE_API_KEY`. If omitted, TTS can reuse `models.providers.google.apiKey` before env fallback.</ParamField>
850
- <ParamField path="model" type="string">Gemini TTS model. Default `gemini-3.1-flash-tts-preview`.</ParamField>
851
- <ParamField path="speakerVoice" type="string">Gemini prebuilt voice name. Default `Kore`. Legacy aliases: `voiceName`, `voice`.</ParamField>
852
- <ParamField path="audioProfile" type="string">Natural-language style prompt prepended before spoken text.</ParamField>
853
- <ParamField path="speakerName" type="string">Optional speaker label prepended before spoken text when your prompt uses a named speaker.</ParamField>
854
- <ParamField path="promptTemplate" type='"audio-profile-v1"'>Set to `audio-profile-v1` to wrap active persona prompt fields in a deterministic Gemini TTS prompt structure.</ParamField>
855
- <ParamField path="personaPrompt" type="string">Google-specific extra persona prompt text appended to the template's Director's Notes.</ParamField>
856
- <ParamField path="baseUrl" type="string">Only `https://generativelanguage.googleapis.com` is accepted.</ParamField>
857
- </Accordion>
858
-
859
- <Accordion title="Gradium">
860
- <ParamField path="apiKey" type="string">Env: `GRADIUM_API_KEY`.</ParamField>
861
- <ParamField path="baseUrl" type="string">Default `https://api.gradium.ai`.</ParamField>
862
- <ParamField path="speakerVoiceId" type="string">Default Emma (`YTpq7expH9539ERJ`). Legacy alias: `voiceId`.</ParamField>
863
- </Accordion>
864
-
865
- <Accordion title="Inworld">
866
- ### Inworld primary
867
-
868
- <ParamField path="apiKey" type="string">Env: `INWORLD_API_KEY`.</ParamField>
869
- <ParamField path="baseUrl" type="string">Default `https://api.inworld.ai`.</ParamField>
870
- <ParamField path="modelId" type="string">Default `inworld-tts-1.5-max`. Also: `inworld-tts-1.5-mini`, `inworld-tts-1-max`, `inworld-tts-1`.</ParamField>
871
- <ParamField path="speakerVoiceId" type="string">Default `Sarah`. Legacy alias: `voiceId`.</ParamField>
872
- <ParamField path="temperature" type="number">Sampling temperature `0..2`.</ParamField>
873
-
874
- </Accordion>
875
-
876
- <Accordion title="Local CLI (tts-local-cli)">
877
- <ParamField path="command" type="string">Local executable or command string for CLI TTS.</ParamField>
878
- <ParamField path="args" type="string[]">Command arguments. Supports `{{Text}}`, `{{OutputPath}}`, `{{OutputDir}}`, `{{OutputBase}}` placeholders.</ParamField>
879
- <ParamField path="outputFormat" type='"mp3" | "opus" | "wav"'>Expected CLI output format. Default `mp3` for audio attachments.</ParamField>
880
- <ParamField path="timeoutMs" type="number">Command timeout in milliseconds. Default `120000`.</ParamField>
881
- <ParamField path="cwd" type="string">Optional command working directory.</ParamField>
882
- <ParamField path="env" type="Record<string, string>">Optional environment overrides for the command.</ParamField>
883
- </Accordion>
884
-
885
- <Accordion title="Microsoft (no API key)">
886
- <ParamField path="enabled" type="boolean" default="true">Allow Microsoft speech usage.</ParamField>
887
- <ParamField path="speakerVoice" type="string">Microsoft neural voice name (e.g. `en-US-MichelleNeural`). Legacy alias: `voice`.</ParamField>
888
- <ParamField path="lang" type="string">Language code (e.g. `en-US`).</ParamField>
889
- <ParamField path="outputFormat" type="string">Microsoft output format. Default `audio-24khz-48kbitrate-mono-mp3`. Not all formats are supported by the bundled Edge-backed transport.</ParamField>
890
- <ParamField path="rate / pitch / volume" type="string">Percent strings (e.g. `+10%`, `-5%`).</ParamField>
891
- <ParamField path="saveSubtitles" type="boolean">Write JSON subtitles alongside the audio file.</ParamField>
892
- <ParamField path="proxy" type="string">Proxy URL for Microsoft speech requests.</ParamField>
893
- <ParamField path="timeoutMs" type="number">Request timeout override (ms).</ParamField>
894
- <ParamField path="edge.*" type="object" deprecated>Legacy alias. Run `fengming doctor --fix` to rewrite persisted config to `providers.microsoft`.</ParamField>
895
- </Accordion>
896
-
897
- <Accordion title="MiniMax">
898
- <ParamField path="apiKey" type="string">Falls back to `MINIMAX_API_KEY`. Token Plan auth via `MINIMAX_OAUTH_TOKEN`, `MINIMAX_CODE_PLAN_KEY`, or `MINIMAX_CODING_API_KEY`.</ParamField>
899
- <ParamField path="baseUrl" type="string">Default `https://api.minimax.io`. Env: `MINIMAX_API_HOST`.</ParamField>
900
- <ParamField path="model" type="string">Default `speech-2.8-hd`. Env: `MINIMAX_TTS_MODEL`.</ParamField>
901
- <ParamField path="speakerVoiceId" type="string">Default `English_expressive_narrator`. Env: `MINIMAX_TTS_VOICE_ID`. Legacy alias: `voiceId`.</ParamField>
902
- <ParamField path="speed" type="number">`0.5..2.0`. Default `1.0`.</ParamField>
903
- <ParamField path="vol" type="number">`(0, 10]`. Default `1.0`.</ParamField>
904
- <ParamField path="pitch" type="number">Integer `-12..12`. Default `0`. Fractional values are truncated before the request.</ParamField>
905
- </Accordion>
906
-
907
- <Accordion title="OpenAI">
908
- <ParamField path="apiKey" type="string">Falls back to `OPENAI_API_KEY`.</ParamField>
909
- <ParamField path="model" type="string">OpenAI TTS model id (e.g. `gpt-4o-mini-tts`).</ParamField>
910
- <ParamField path="speakerVoice" type="string">Voice name (e.g. `alloy`, `cedar`). Legacy alias: `voice`.</ParamField>
911
- <ParamField path="instructions" type="string">Explicit OpenAI `instructions` field. When set, persona prompt fields are **not** auto-mapped.</ParamField>
912
- <ParamField path="extraBody / extra_body" type="Record<string, unknown>">Extra JSON fields merged into `/audio/speech` request bodies after generated OpenAI TTS fields. Use this for OpenAI-compatible endpoints such as Kokoro that require provider-specific keys like `lang`; unsafe prototype keys are ignored.</ParamField>
913
- <ParamField path="baseUrl" type="string">
914
- Override the OpenAI TTS endpoint. Resolution order: config → `OPENAI_TTS_BASE_URL` → `https://api.openai.com/v1`. Non-default values are treated as OpenAI-compatible TTS endpoints, so custom model and voice names are accepted.
915
- </ParamField>
916
- </Accordion>
917
-
918
- <Accordion title="OpenRouter">
919
- <ParamField path="apiKey" type="string">Env: `OPENROUTER_API_KEY`. Can reuse `models.providers.openrouter.apiKey`.</ParamField>
920
- <ParamField path="baseUrl" type="string">Default `https://openrouter.ai/api/v1`. Legacy `https://openrouter.ai/v1` is normalized.</ParamField>
921
- <ParamField path="model" type="string">Default `hexgrad/kokoro-82m`. Alias: `modelId`.</ParamField>
922
- <ParamField path="speakerVoice" type="string">Default `af_alloy`. Legacy aliases: `voice`, `voiceId`.</ParamField>
923
- <ParamField path="responseFormat" type='"mp3" | "pcm"'>Default `mp3`.</ParamField>
924
- <ParamField path="speed" type="number">Provider-native speed override.</ParamField>
925
- </Accordion>
926
-
927
- <Accordion title="Volcengine (BytePlus Seed Speech)">
928
- <ParamField path="apiKey" type="string">Env: `VOLCENGINE_TTS_API_KEY` or `BYTEPLUS_SEED_SPEECH_API_KEY`.</ParamField>
929
- <ParamField path="resourceId" type="string">Default `seed-tts-1.0`. Env: `VOLCENGINE_TTS_RESOURCE_ID`. Use `seed-tts-2.0` when your project has TTS 2.0 entitlement.</ParamField>
930
- <ParamField path="appKey" type="string">App key header. Default `aGjiRDfUWi`. Env: `VOLCENGINE_TTS_APP_KEY`.</ParamField>
931
- <ParamField path="baseUrl" type="string">Override the Seed Speech TTS HTTP endpoint. Env: `VOLCENGINE_TTS_BASE_URL`.</ParamField>
932
- <ParamField path="speakerVoice" type="string">Voice type. Default `en_female_anna_mars_bigtts`. Env: `VOLCENGINE_TTS_VOICE`. Legacy alias: `voice`.</ParamField>
933
- <ParamField path="speedRatio" type="number">Provider-native speed ratio.</ParamField>
934
- <ParamField path="emotion" type="string">Provider-native emotion tag.</ParamField>
935
- <ParamField path="appId / token / cluster" type="string" deprecated>Legacy Volcengine Speech Console fields. Env: `VOLCENGINE_TTS_APPID`, `VOLCENGINE_TTS_TOKEN`, `VOLCENGINE_TTS_CLUSTER` (default `volcano_tts`).</ParamField>
936
- </Accordion>
937
-
938
- <Accordion title="xAI">
939
- <ParamField path="apiKey" type="string">Env: `XAI_API_KEY`.</ParamField>
940
- <ParamField path="baseUrl" type="string">Default `https://api.x.ai/v1`. Env: `XAI_BASE_URL`.</ParamField>
941
- <ParamField path="speakerVoiceId" type="string">Default `eve`. Live voices: `ara`, `eve`, `leo`, `rex`, `sal`, `una`. Legacy alias: `voiceId`.</ParamField>
942
- <ParamField path="language" type="string">BCP-47 language code or `auto`. Default `en`.</ParamField>
943
- <ParamField path="responseFormat" type='"mp3" | "wav" | "pcm" | "mulaw" | "alaw"'>Default `mp3`.</ParamField>
944
- <ParamField path="speed" type="number">Provider-native speed override.</ParamField>
945
- </Accordion>
946
-
947
- <Accordion title="Xiaomi MiMo">
948
- <ParamField path="apiKey" type="string">Env: `XIAOMI_API_KEY`.</ParamField>
949
- <ParamField path="baseUrl" type="string">Default `https://api.xiaomimimo.com/v1`. Env: `XIAOMI_BASE_URL`.</ParamField>
950
- <ParamField path="model" type="string">Default `mimo-v2.5-tts`. Env: `XIAOMI_TTS_MODEL`. Also supports `mimo-v2-tts`.</ParamField>
951
- <ParamField path="speakerVoice" type="string">Default `mimo_default`. Env: `XIAOMI_TTS_VOICE`. Legacy alias: `voice`.</ParamField>
952
- <ParamField path="format" type='"mp3" | "wav"'>Default `mp3`. Env: `XIAOMI_TTS_FORMAT`.</ParamField>
953
- <ParamField path="style" type="string">Optional natural-language style instruction sent as the user message; not spoken.</ParamField>
954
- </Accordion>
955
- </AccordionGroup>
956
-
957
- ## Agent tool
958
-
959
- The `tts` tool converts text to speech and returns an audio attachment for
960
- reply delivery. On Feishu, Matrix, Telegram, and WhatsApp, the audio is
961
- delivered as a voice message rather than a file attachment. Feishu and
962
- WhatsApp can transcode non-Opus TTS output on this path when `ffmpeg` is
963
- available.
964
-
965
- WhatsApp sends audio through Baileys as a PTT voice note (`audio` with
966
- `ptt: true`) and sends visible text **separately** from PTT audio because
967
- clients do not consistently render captions on voice notes.
968
-
969
- The tool accepts optional `channel` and `timeoutMs` fields; `timeoutMs` is a
970
- per-call provider request timeout in milliseconds. Per-call values override
971
- `messages.tts.timeoutMs`; configured TTS timeouts override any plugin-authored
972
- provider default.
973
-
974
- ## Gateway RPC
975
-
976
- | Method | Purpose |
977
- | ----------------- | ---------------------------------------- |
978
- | `tts.status` | Read current TTS state and last attempt. |
979
- | `tts.enable` | Set local auto preference to `always`. |
980
- | `tts.disable` | Set local auto preference to `off`. |
981
- | `tts.convert` | One-off text → audio. |
982
- | `tts.setProvider` | Set local provider preference. |
983
- | `tts.setPersona` | Set local persona preference. |
984
- | `tts.providers` | List configured providers and status. |
985
-
986
- ## Service links
987
-
988
- - [OpenAI text-to-speech guide](https://platform.openai.com/docs/guides/text-to-speech)
989
- - [OpenAI Audio API reference](https://platform.openai.com/docs/api-reference/audio)
990
- - [Azure Speech REST text-to-speech](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech)
991
- - [Azure Speech provider](/providers/azure-speech)
992
- - [ElevenLabs Text to Speech](https://elevenlabs.io/docs/api-reference/text-to-speech)
993
- - [ElevenLabs Authentication](https://elevenlabs.io/docs/api-reference/authentication)
994
- - [Gradium](/providers/gradium)
995
- - [Inworld TTS API](https://docs.inworld.ai/tts/tts)
996
- - [MiniMax T2A v2 API](https://platform.minimaxi.com/document/T2A%20V2)
997
- - [Volcengine TTS HTTP API](/providers/volcengine#text-to-speech)
998
- - [Xiaomi MiMo speech synthesis](/providers/xiaomi#text-to-speech)
999
- - [node-edge-tts](https://github.com/SchneeHertz/node-edge-tts)
1000
- - [Microsoft Speech output formats](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech#audio-outputs)
1001
- - [xAI text to speech](https://docs.x.ai/developers/rest-api-reference/inference/voice#text-to-speech-rest)
1002
-
1003
- ## Related
1004
-
1005
- - [Media overview](/tools/media-overview)
1006
- - [Music generation](/tools/music-generation)
1007
- - [Video generation](/tools/video-generation)
1008
- - [Slash commands](/tools/slash-commands)
1009
- - [Voice call plugin](/plugins/voice-call)