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,947 +0,0 @@
1
- ---
2
- summary: "QA stack overview: qa-lab, qa-channel, repo-backed scenarios, live transport lanes, transport adapters, and reporting."
3
- read_when:
4
- - Understanding how the QA stack fits together
5
- - Extending qa-lab, qa-channel, or a transport adapter
6
- - Adding repo-backed QA scenarios
7
- - Building higher-realism QA automation around the Gateway dashboard
8
- title: "QA overview"
9
- ---
10
-
11
- The private QA stack is meant to exercise FengMing in a more realistic,
12
- channel-shaped way than a single unit test can.
13
-
14
- Current pieces:
15
-
16
- - `extensions/qa-channel`: synthetic message channel with DM, channel, thread,
17
- reaction, edit, and delete surfaces.
18
- - `extensions/qa-lab`: debugger UI and QA bus for observing the transcript,
19
- injecting inbound messages, and exporting a Markdown report.
20
- - `extensions/qa-matrix`, future runner plugins: live-transport adapters that
21
- drive a real channel inside a child QA gateway.
22
- - `qa/`: repo-backed seed assets for the kickoff task and baseline QA
23
- scenarios.
24
- - [Mantis](/concepts/mantis): before and after live verification for bugs that
25
- need real transports, browser screenshots, VM state, and PR evidence.
26
-
27
- ## Command surface
28
-
29
- Every QA flow runs under `pnpm fengming qa <subcommand>`. Many have `pnpm qa:*`
30
- script aliases; both forms are supported.
31
-
32
- | Command | Purpose |
33
- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
34
- | `qa run` | Bundled QA self-check; writes a Markdown report. |
35
- | `qa suite` | Run repo-backed scenarios against the QA gateway lane. Aliases: `pnpm fengming qa suite --runner multipass` for a disposable Linux VM. |
36
- | `qa coverage` | Print the markdown scenario-coverage inventory (`--json` for machine output). |
37
- | `qa parity-report` | Compare two `qa-suite-summary.json` files and write the agentic parity report, or use `--runtime-axis --token-efficiency` to write Codex-vs-FengMing runtime parity and token-efficiency reports from one runtime-pair summary. |
38
- | `qa character-eval` | Run the character QA scenario across multiple live models with a judged report. See [Reporting](#reporting). |
39
- | `qa manual` | Run a one-off prompt against the selected provider/model lane. |
40
- | `qa ui` | Start the QA debugger UI and local QA bus (alias: `pnpm qa:lab:ui`). |
41
- | `qa docker-build-image` | Build the prebaked QA Docker image. |
42
- | `qa docker-scaffold` | Write a docker-compose scaffold for the QA dashboard + gateway lane. |
43
- | `qa up` | Build the QA site, start the Docker-backed stack, print the URL (alias: `pnpm qa:lab:up`; `:fast` variant adds `--use-prebuilt-image --bind-ui-dist --skip-ui-build`). |
44
- | `qa aimock` | Start only the AIMock provider server. |
45
- | `qa mock-openai` | Start only the scenario-aware `mock-openai` provider server. |
46
- | `qa credentials doctor` / `add` / `list` / `remove` | Manage the shared Convex credential pool. |
47
- | `qa matrix` | Live transport lane against a disposable Tuwunel homeserver. See [Matrix QA](/concepts/qa-matrix). |
48
- | `qa telegram` | Live transport lane against a real private Telegram group. |
49
- | `qa discord` | Live transport lane against a real private Discord guild channel. |
50
- | `qa slack` | Live transport lane against a real private Slack channel. |
51
- | `qa mantis` | Before and after verification runner for live transport bugs, with Discord status-reactions evidence, Crabbox desktop/browser smoke, and Slack-in-VNC smoke. See [Mantis](/concepts/mantis) and [Mantis Slack Desktop Runbook](/concepts/mantis-slack-desktop-runbook). |
52
-
53
- ## Operator flow
54
-
55
- The current QA operator flow is a two-pane QA site:
56
-
57
- - Left: Gateway dashboard (Control UI) with the agent.
58
- - Right: QA Lab, showing the Slack-ish transcript and scenario plan.
59
-
60
- Run it with:
61
-
62
- ```bash
63
- pnpm qa:lab:up
64
- ```
65
-
66
- That builds the QA site, starts the Docker-backed gateway lane, and exposes the
67
- QA Lab page where an operator or automation loop can give the agent a QA
68
- mission, observe real channel behavior, and record what worked, failed, or
69
- stayed blocked.
70
-
71
- For faster QA Lab UI iteration without rebuilding the Docker image each time,
72
- start the stack with a bind-mounted QA Lab bundle:
73
-
74
- ```bash
75
- pnpm fengming qa docker-build-image
76
- pnpm qa:lab:build
77
- pnpm qa:lab:up:fast
78
- pnpm qa:lab:watch
79
- ```
80
-
81
- `qa:lab:up:fast` keeps the Docker services on a prebuilt image and bind-mounts
82
- `extensions/qa-lab/web/dist` into the `qa-lab` container. `qa:lab:watch`
83
- rebuilds that bundle on change, and the browser auto-reloads when the QA Lab
84
- asset hash changes.
85
-
86
- For a local OpenTelemetry signal smoke, run:
87
-
88
- ```bash
89
- pnpm qa:otel:smoke
90
- ```
91
-
92
- That script starts a local OTLP/HTTP receiver, runs the `otel-trace-smoke` QA
93
- scenario with the `diagnostics-otel` plugin enabled, then asserts traces,
94
- metrics, and logs are exported. It decodes the exported protobuf trace spans
95
- and checks the release-critical shape:
96
- `fengming.run`, `fengming.harness.run`, a latest GenAI semantic-convention
97
- model-call span, `fengming.context.assembled`, and `fengming.message.delivery`
98
- must be present. The smoke forces
99
- `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`, so the model-call
100
- span must use the `{gen_ai.operation.name} {gen_ai.request.model}` name;
101
- model calls must not export `StreamAbandoned` on successful turns; raw diagnostic IDs and
102
- `fengming.content.*` attributes must stay out of the trace. The raw OTLP
103
- payloads must not contain the prompt sentinel, response sentinel, or QA session
104
- key. It writes `otel-smoke-summary.json` next to the QA suite artifacts.
105
-
106
- For a collector-backed OpenTelemetry smoke, run:
107
-
108
- ```bash
109
- pnpm qa:otel:collector-smoke
110
- ```
111
-
112
- That lane puts a real OpenTelemetry Collector Docker container in front of the
113
- same local receiver. Use it when changing endpoint wiring, collector
114
- compatibility, or OTLP export behavior that the in-process receiver could mask.
115
-
116
- For the protected Prometheus scrape smoke, run:
117
-
118
- ```bash
119
- pnpm qa:prometheus:smoke
120
- ```
121
-
122
- That alias runs the `docker-prometheus-smoke` QA scenario with
123
- `diagnostics-prometheus` enabled, verifies unauthenticated scrapes are rejected,
124
- then checks the authenticated scrape includes release-critical metric families
125
- without prompt content, response content, raw diagnostic identifiers, auth
126
- tokens, or local paths.
127
-
128
- To run both observability smokes back to back, use:
129
-
130
- ```bash
131
- pnpm qa:observability:smoke
132
- ```
133
-
134
- For the collector-backed OpenTelemetry lane plus the protected Prometheus scrape
135
- smoke, use:
136
-
137
- ```bash
138
- pnpm qa:observability:collector-smoke
139
- ```
140
-
141
- Observability QA stays source-checkout only. The npm tarball intentionally omits
142
- QA Lab, so package Docker release lanes do not run `qa` commands. Use
143
- `pnpm qa:otel:smoke`, `pnpm qa:prometheus:smoke`, or
144
- `pnpm qa:observability:smoke` from a built source checkout when changing
145
- diagnostics instrumentation.
146
-
147
- For a transport-real Matrix smoke lane, run:
148
-
149
- ```bash
150
- pnpm fengming qa matrix --profile fast --fail-fast
151
- ```
152
-
153
- The full CLI reference, profile/scenario catalog, env vars, and artifact layout for this lane live in [Matrix QA](/concepts/qa-matrix). At a glance: it provisions a disposable Tuwunel homeserver in Docker, registers temporary driver/SUT/observer users, runs the real Matrix plugin inside a child QA gateway scoped to that transport (no `qa-channel`), then writes a Markdown report, JSON summary, observed-events artifact, and combined output log under `.artifacts/qa-e2e/matrix-<timestamp>/`.
154
-
155
- The scenarios cover transport behavior that unit tests cannot prove end to end: mention gating, allow-bot policies, allowlists, top-level and threaded replies, DM routing, reaction handling, inbound edit suppression, restart replay dedupe, homeserver interruption recovery, approval metadata delivery, media handling, and Matrix E2EE bootstrap/recovery/verification flows. The E2EE CLI profile also drives `fengming matrix encryption setup` and verification commands through the same disposable homeserver before checking gateway replies.
156
-
157
- Discord also has Mantis-only opt-in scenarios for bug reproduction. Use
158
- `--scenario discord-status-reactions-tool-only` for the explicit status reaction
159
- timeline, or `--scenario discord-thread-reply-filepath-attachment` to create a
160
- real Discord thread and verify that `message.thread-reply` preserves a
161
- `filePath` attachment. These scenarios stay out of the default live Discord lane
162
- because they are before/after repro probes rather than broad smoke coverage.
163
- The thread-attachment Mantis workflow can also add a logged-in Discord Web
164
- witness video when `MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR` or
165
- `MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64` is configured in the QA
166
- environment. That viewer profile is only for visual capture; the pass/fail
167
- decision still comes from the Discord REST oracle.
168
-
169
- CI uses the same command surface in `.github/workflows/qa-live-transports-convex.yml`. Scheduled and default manual runs execute the fast Matrix profile with live frontier credentials, `--fast`, and `FENGMING_QA_MATRIX_NO_REPLY_WINDOW_MS=3000`. Manual `matrix_profile=all` fans out into the five profile shards so the exhaustive catalog can run in parallel while keeping one artifact directory per shard.
170
-
171
- For transport-real Telegram, Discord, and Slack smoke lanes:
172
-
173
- ```bash
174
- pnpm fengming qa telegram
175
- pnpm fengming qa discord
176
- pnpm fengming qa slack
177
- ```
178
-
179
- They target a pre-existing real channel with two bots (driver + SUT). Required env vars, scenario lists, output artifacts, and the Convex credential pool are documented in [Telegram, Discord, and Slack QA reference](#telegram-discord-and-slack-qa-reference) below.
180
-
181
- For a full Slack desktop VM run with VNC rescue, run:
182
-
183
- ```bash
184
- pnpm fengming qa mantis slack-desktop-smoke \
185
- --gateway-setup \
186
- --scenario slack-canary \
187
- --keep-lease
188
- ```
189
-
190
- That command leases a Crabbox desktop/browser machine, runs the Slack live lane
191
- inside the VM, opens Slack Web in the VNC browser, captures the desktop, and
192
- copies `slack-qa/`, `slack-desktop-smoke.png`, and `slack-desktop-smoke.mp4`
193
- when video capture is available back to the Mantis artifact directory. Crabbox
194
- desktop/browser leases provide the capture tools and browser/native-build helper
195
- packages up front, so the scenario should only install fallbacks on older
196
- leases. Mantis reports total and per-phase timings in
197
- `mantis-slack-desktop-smoke-report.md` so slow runs show whether time went into
198
- lease warmup, credential acquisition, remote setup, or artifact copy. Reuse
199
- `--lease-id <cbx_...>` after logging in to Slack Web manually through VNC;
200
- reused leases also keep Crabbox's pnpm store cache warm. The default
201
- `--hydrate-mode source` verifies from a source checkout and runs install/build
202
- inside the VM. Use `--hydrate-mode prehydrated` only when the reused remote
203
- workspace already has `node_modules` and a built `dist/`; that mode skips the
204
- expensive install/build step and fails closed when the workspace is not ready.
205
- With `--gateway-setup`, Mantis leaves a persistent FengMing Slack gateway
206
- running inside the VM on port `38973`; without it, the command runs the normal
207
- bot-to-bot Slack QA lane and exits after artifact capture.
208
-
209
- To prove native Slack approval UI with desktop evidence, run the Mantis approval
210
- checkpoint mode:
211
-
212
- ```bash
213
- pnpm fengming qa mantis slack-desktop-smoke \
214
- --approval-checkpoints \
215
- --credential-source convex \
216
- --credential-role maintainer
217
- ```
218
-
219
- This mode is mutually exclusive with `--gateway-setup`. It runs the Slack
220
- approval scenarios, rejects non-approval scenario ids, waits at each pending and
221
- resolved approval state, renders the observed Slack API message into
222
- `approval-checkpoints/<scenario>-pending.png` and
223
- `approval-checkpoints/<scenario>-resolved.png`, then fails if any checkpoint,
224
- message evidence, acknowledgement, or rendered screenshot is missing or empty.
225
- Cold CI leases may still show Slack sign-in in `slack-desktop-smoke.png`; the
226
- approval checkpoint images are the visual proof for this lane.
227
-
228
- The operator checklist, GitHub workflow dispatch command, evidence-comment
229
- contract, hydrate-mode decision table, timing interpretation, and failure
230
- handling steps live in [Mantis Slack Desktop Runbook](/concepts/mantis-slack-desktop-runbook).
231
-
232
- For an agent/CV style desktop task, run:
233
-
234
- ```bash
235
- pnpm fengming qa mantis visual-task \
236
- --browser-url https://example.net \
237
- --expect-text "Example Domain" \
238
- --vision-model openai/gpt-5.5
239
- ```
240
-
241
- `visual-task` leases or reuses a Crabbox desktop/browser machine, starts
242
- `crabbox record --while`, drives the visible browser through a nested
243
- `visual-driver`, captures `visual-task.png`, runs `fengming infer image describe`
244
- against the screenshot when `--vision-mode image-describe` is selected, and
245
- writes `visual-task.mp4`, `mantis-visual-task-summary.json`,
246
- `mantis-visual-task-driver-result.json`, and `mantis-visual-task-report.md`.
247
- When `--expect-text` is set, the vision prompt asks for a structured JSON
248
- verdict and only passes when the model reports positive visible evidence; a
249
- negative response that merely quotes the target text fails the assertion.
250
- Use `--vision-mode metadata` for a no-model smoke that proves the desktop,
251
- browser, screenshot, and video plumbing without calling an image-understanding
252
- provider. Recording is a required artifact for `visual-task`; if Crabbox records
253
- no non-empty `visual-task.mp4`, the task fails even when the visual driver
254
- passed. On failure, Mantis keeps the lease for VNC unless the task had already
255
- passed and `--keep-lease` was not set.
256
-
257
- Before using pooled live credentials, run:
258
-
259
- ```bash
260
- pnpm fengming qa credentials doctor
261
- ```
262
-
263
- The doctor checks Convex broker env, validates endpoint settings, and verifies admin/list reachability when the maintainer secret is present. It reports only set/missing status for secrets.
264
-
265
- ## Live transport coverage
266
-
267
- Live transport lanes share one contract instead of each inventing their own scenario list shape. `qa-channel` is the broad synthetic product-behavior suite and is not part of the live transport coverage matrix.
268
-
269
- Live transport runners should import the shared scenario ids, baseline
270
- coverage helpers, and scenario-selection helper from
271
- `fengming/plugin-sdk/qa-live-transport-scenarios`.
272
-
273
- | Lane | Canary | Mention gating | Bot-to-bot | Allowlist block | Top-level reply | Restart resume | Thread follow-up | Thread isolation | Reaction observation | Help command | Native command registration |
274
- | -------- | ------ | -------------- | ---------- | --------------- | --------------- | -------------- | ---------------- | ---------------- | -------------------- | ------------ | --------------------------- |
275
- | Matrix | x | x | x | x | x | x | x | x | x | | |
276
- | Telegram | x | x | x | | | | | | | x | |
277
- | Discord | x | x | x | | | | | | | | x |
278
- | Slack | x | x | x | x | x | x | x | x | | | |
279
-
280
- This keeps `qa-channel` as the broad product-behavior suite while Matrix,
281
- Telegram, and future live transports share one explicit transport-contract
282
- checklist.
283
-
284
- For a disposable Linux VM lane without bringing Docker into the QA path, run:
285
-
286
- ```bash
287
- pnpm fengming qa suite --runner multipass --scenario channel-chat-baseline
288
- ```
289
-
290
- This boots a fresh Multipass guest, installs dependencies, builds FengMing
291
- inside the guest, runs `qa suite`, then copies the normal QA report and
292
- summary back into `.artifacts/qa-e2e/...` on the host.
293
- It reuses the same scenario-selection behavior as `qa suite` on the host.
294
- Host and Multipass suite runs execute multiple selected scenarios in parallel
295
- with isolated gateway workers by default. `qa-channel` defaults to concurrency
296
- 4, capped by the selected scenario count. Use `--concurrency <count>` to tune
297
- the worker count, or `--concurrency 1` for serial execution.
298
- Use `--pack personal-agent` to run the personal assistant benchmark pack. The
299
- pack selector is additive with repeated `--scenario` flags: explicit scenarios
300
- run first, then pack scenarios run in pack order with duplicates removed.
301
- Use `--pack observability` when a custom QA runner already supplies the
302
- OpenTelemetry collector setup and wants the OpenTelemetry and Prometheus
303
- diagnostics smoke scenarios selected together.
304
- The command exits non-zero when any scenario fails. Use `--allow-failures` when
305
- you want artifacts without a failing exit code.
306
- Live runs forward the supported QA auth inputs that are practical for the
307
- guest: env-based provider keys, the QA live provider config path, and
308
- `CODEX_HOME` when present. Keep `--output-dir` under the repo root so the guest
309
- can write back through the mounted workspace.
310
-
311
- ## Telegram, Discord, and Slack QA reference
312
-
313
- Matrix has a [dedicated page](/concepts/qa-matrix) because of its scenario count and Docker-backed homeserver provisioning. Telegram, Discord, and Slack are smaller - a handful of scenarios each, no profile system, against pre-existing real channels - so their reference lives here.
314
-
315
- ### Shared CLI flags
316
-
317
- These lanes register through `extensions/qa-lab/src/live-transports/shared/live-transport-cli.ts` and accept the same flags:
318
-
319
- | Flag | Default | Description |
320
- | ------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
321
- | `--scenario <id>` | - | Run only this scenario. Repeatable. |
322
- | `--output-dir <path>` | `<repo>/.artifacts/qa-e2e/{telegram,discord,slack}-<timestamp>` | Where reports/summary/observed messages and the output log are written. Relative paths resolve against `--repo-root`. |
323
- | `--repo-root <path>` | `process.cwd()` | Repository root when invoking from a neutral cwd. |
324
- | `--sut-account <id>` | `sut` | Temporary account id inside the QA gateway config. |
325
- | `--provider-mode <mode>` | `live-frontier` | `mock-openai` or `live-frontier` (legacy `live-openai` still works). |
326
- | `--model <ref>` / `--alt-model <ref>` | provider default | Primary/alternate model refs. |
327
- | `--fast` | off | Provider fast mode where supported. |
328
- | `--credential-source <env\|convex>` | `env` | See [Convex credential pool](#convex-credential-pool). |
329
- | `--credential-role <maintainer\|ci>` | `ci` in CI, `maintainer` otherwise | Role used when `--credential-source convex`. |
330
-
331
- Each lane exits non-zero on any failed scenario. `--allow-failures` writes artifacts without setting a failing exit code.
332
-
333
- ### Telegram QA
334
-
335
- ```bash
336
- pnpm fengming qa telegram
337
- ```
338
-
339
- Targets one real private Telegram group with two distinct bots (driver + SUT). The SUT bot must have a Telegram username; bot-to-bot observation works best when both bots have **Bot-to-Bot Communication Mode** enabled in `@BotFather`.
340
-
341
- Required env when `--credential-source env`:
342
-
343
- - `FENGMING_QA_TELEGRAM_GROUP_ID` - numeric chat id (string).
344
- - `FENGMING_QA_TELEGRAM_DRIVER_BOT_TOKEN`
345
- - `FENGMING_QA_TELEGRAM_SUT_BOT_TOKEN`
346
-
347
- Optional:
348
-
349
- - `FENGMING_QA_TELEGRAM_CAPTURE_CONTENT=1` keeps message bodies in observed-message artifacts (default redacts).
350
-
351
- Scenarios (`extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts`):
352
-
353
- - `telegram-canary`
354
- - `telegram-mention-gating`
355
- - `telegram-mentioned-message-reply`
356
- - `telegram-help-command`
357
- - `telegram-commands-command`
358
- - `telegram-tools-compact-command`
359
- - `telegram-whoami-command`
360
- - `telegram-status-command`
361
- - `telegram-repeated-command-authorization`
362
- - `telegram-other-bot-command-gating`
363
- - `telegram-context-command`
364
- - `telegram-current-session-status-tool`
365
- - `telegram-reply-chain-exact-marker`
366
- - `telegram-stream-final-single-message`
367
- - `telegram-long-final-reuses-preview`
368
- - `telegram-long-final-three-chunks`
369
-
370
- The implicit default set always covers canary, mention gating, native command replies, command addressing, and bot-to-bot group replies. `mock-openai` defaults also include deterministic reply-chain and final-message streaming checks. `telegram-current-session-status-tool` remains opt-in because it is only stable when threaded directly after canary, not after arbitrary native command replies. Use `pnpm fengming qa telegram --list-scenarios --provider-mode mock-openai` to print the current default/optional split with regression refs.
371
-
372
- Output artifacts:
373
-
374
- - `telegram-qa-report.md`
375
- - `telegram-qa-summary.json` - includes per-reply RTT (driver send → observed SUT reply) starting with the canary.
376
- - `telegram-qa-observed-messages.json` - bodies redacted unless `FENGMING_QA_TELEGRAM_CAPTURE_CONTENT=1`.
377
-
378
- Package RTT comparison uses the same Telegram credential contract while keeping
379
- its RTT sample controls on the RTT harness path:
380
-
381
- ```bash
382
- pnpm rtt fengming@beta \
383
- --credential-source convex \
384
- --credential-role maintainer \
385
- --samples 20 \
386
- --sample-timeout-ms 30000
387
- ```
388
-
389
- When `--credential-source convex` is set, the RTT Docker wrapper leases a
390
- `kind: "telegram"` credential, exports the leased group/driver/SUT bot env into
391
- the installed-package run, heartbeats the lease, and releases it on shutdown.
392
- `--samples` and `--sample-timeout-ms` still feed
393
- `FENGMING_NPM_TELEGRAM_WARM_SAMPLES` and
394
- `FENGMING_NPM_TELEGRAM_SAMPLE_TIMEOUT_MS`, so `result.json` remains comparable
395
- across env-backed and Convex-backed RTT runs.
396
-
397
- ### Discord QA
398
-
399
- ```bash
400
- pnpm fengming qa discord
401
- ```
402
-
403
- Targets one real private Discord guild channel with two bots: a driver bot controlled by the harness and a SUT bot started by the child FengMing gateway through the bundled Discord plugin. Verifies channel mention handling, that the SUT bot has registered the native `/help` command with Discord, and opt-in Mantis evidence scenarios.
404
-
405
- Required env when `--credential-source env`:
406
-
407
- - `FENGMING_QA_DISCORD_GUILD_ID`
408
- - `FENGMING_QA_DISCORD_CHANNEL_ID`
409
- - `FENGMING_QA_DISCORD_DRIVER_BOT_TOKEN`
410
- - `FENGMING_QA_DISCORD_SUT_BOT_TOKEN`
411
- - `FENGMING_QA_DISCORD_SUT_APPLICATION_ID` - must match the SUT bot user id returned by Discord (the lane fails fast otherwise).
412
-
413
- Optional:
414
-
415
- - `FENGMING_QA_DISCORD_CAPTURE_CONTENT=1` keeps message bodies in observed-message artifacts.
416
- - `FENGMING_QA_DISCORD_VOICE_CHANNEL_ID` selects the voice/stage channel for `discord-voice-autojoin`; without it, the scenario picks the first visible voice/stage channel for the SUT bot.
417
-
418
- Scenarios (`extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts:36`):
419
-
420
- - `discord-canary`
421
- - `discord-mention-gating`
422
- - `discord-native-help-command-registration`
423
- - `discord-voice-autojoin` - opt-in voice scenario. Runs by itself, enables `channels.discord.voice.autoJoin`, and verifies the SUT bot's current Discord voice state is the target voice/stage channel. Convex Discord credentials may include optional `voiceChannelId`; otherwise the runner discovers the first visible voice/stage channel in the guild.
424
- - `discord-status-reactions-tool-only` - opt-in Mantis scenario. Runs by itself because it switches the SUT to always-on, tool-only guild replies with `messages.statusReactions.enabled=true`, then captures a REST reaction timeline plus HTML/PNG visual artifacts. Mantis before/after reports also preserve scenario-provided MP4 artifacts as `baseline.mp4` and `candidate.mp4`.
425
-
426
- Run the Discord voice auto-join scenario explicitly:
427
-
428
- ```bash
429
- pnpm fengming qa discord \
430
- --scenario discord-voice-autojoin \
431
- --provider-mode mock-openai
432
- ```
433
-
434
- Run the Mantis status-reaction scenario explicitly:
435
-
436
- ```bash
437
- pnpm fengming qa discord \
438
- --scenario discord-status-reactions-tool-only \
439
- --provider-mode live-frontier \
440
- --model openai/gpt-5.5 \
441
- --alt-model openai/gpt-5.5 \
442
- --fast
443
- ```
444
-
445
- Output artifacts:
446
-
447
- - `discord-qa-report.md`
448
- - `discord-qa-summary.json`
449
- - `discord-qa-observed-messages.json` - bodies redacted unless `FENGMING_QA_DISCORD_CAPTURE_CONTENT=1`.
450
- - `discord-qa-reaction-timelines.json` and `discord-status-reactions-tool-only-timeline.png` when the status-reaction scenario runs.
451
-
452
- ### Slack QA
453
-
454
- ```bash
455
- pnpm fengming qa slack
456
- ```
457
-
458
- Targets one real private Slack channel with two distinct bots: a driver bot controlled by the harness and a SUT bot started by the child FengMing gateway through the bundled Slack plugin.
459
-
460
- Required env when `--credential-source env`:
461
-
462
- - `FENGMING_QA_SLACK_CHANNEL_ID`
463
- - `FENGMING_QA_SLACK_DRIVER_BOT_TOKEN`
464
- - `FENGMING_QA_SLACK_SUT_BOT_TOKEN`
465
- - `FENGMING_QA_SLACK_SUT_APP_TOKEN`
466
-
467
- Optional:
468
-
469
- - `FENGMING_QA_SLACK_CAPTURE_CONTENT=1` keeps message bodies in observed-message artifacts.
470
- - `FENGMING_QA_SLACK_APPROVAL_CHECKPOINT_DIR` enables visual approval
471
- checkpoints for Mantis. The runner writes `<scenario>.pending.json` and
472
- `<scenario>.resolved.json`, then waits for matching `.ack.json` files.
473
- - `FENGMING_QA_SLACK_APPROVAL_CHECKPOINT_TIMEOUT_MS` overrides the checkpoint
474
- acknowledgement timeout. The default is `120000`.
475
-
476
- Scenarios (`extensions/qa-lab/src/live-transports/slack/slack-live.runtime.ts`):
477
-
478
- - `slack-canary`
479
- - `slack-mention-gating`
480
- - `slack-allowlist-block`
481
- - `slack-top-level-reply-shape`
482
- - `slack-restart-resume`
483
- - `slack-thread-follow-up`
484
- - `slack-thread-isolation`
485
- - `slack-approval-exec-native` - opt-in native Slack exec approval scenario.
486
- Requests an exec approval through the gateway, verifies the Slack message has
487
- native approval buttons, resolves it, and verifies the resolved Slack update.
488
- - `slack-approval-plugin-native` - opt-in native Slack plugin approval scenario.
489
- Enables exec and plugin approval forwarding together so plugin events are not
490
- suppressed by exec approval routing, then verifies the same pending/resolved
491
- native Slack UI path.
492
-
493
- Output artifacts:
494
-
495
- - `slack-qa-report.md`
496
- - `slack-qa-summary.json`
497
- - `slack-qa-observed-messages.json` - bodies redacted unless `FENGMING_QA_SLACK_CAPTURE_CONTENT=1`.
498
- - `approval-checkpoints/` - only when Mantis sets
499
- `FENGMING_QA_SLACK_APPROVAL_CHECKPOINT_DIR`; contains checkpoint JSON,
500
- acknowledgement JSON, and pending/resolved screenshots.
501
-
502
- #### Setting up the Slack workspace
503
-
504
- The lane needs two distinct Slack apps in one workspace, plus a channel both bots are members of:
505
-
506
- - `channelId` - the `Cxxxxxxxxxx` id of a channel both bots have been invited to. Use a dedicated channel; the lane posts on every run.
507
- - `driverBotToken` - bot token (`xoxb-...`) of the **Driver** app.
508
- - `sutBotToken` - bot token (`xoxb-...`) of the **SUT** app, which must be a separate Slack app from the driver so its bot user id is distinct.
509
- - `sutAppToken` - app-level token (`xapp-...`) of the SUT app with `connections:write`, used by Socket Mode so the SUT app can receive events.
510
-
511
- Prefer a Slack workspace dedicated to QA over reusing a production workspace.
512
-
513
- The SUT manifest below intentionally narrows the bundled Slack plugin's production install (`extensions/slack/src/setup-shared.ts:10`) to the permissions and events covered by the live Slack QA suite. For the production-channel setup as users see it, see [Slack channel quick setup](/channels/slack#quick-setup); the QA Driver/SUT pair is intentionally separate because the lane needs two distinct bot user ids in one workspace.
514
-
515
- **1. Create the Driver app**
516
-
517
- Go to [api.slack.com/apps](https://api.slack.com/apps) → _Create New App_ → _From a manifest_ → pick the QA workspace, paste the following manifest, then _Install to Workspace_:
518
-
519
- ```json
520
- {
521
- "display_information": {
522
- "name": "FengMing QA Driver",
523
- "description": "Test driver bot for FengMing QA Slack live lane"
524
- },
525
- "features": {
526
- "bot_user": {
527
- "display_name": "FengMing QA Driver",
528
- "always_online": true
529
- }
530
- },
531
- "oauth_config": {
532
- "scopes": {
533
- "bot": ["chat:write", "channels:history", "groups:history", "users:read"]
534
- }
535
- },
536
- "settings": {
537
- "socket_mode_enabled": false
538
- }
539
- }
540
- ```
541
-
542
- Copy the _Bot User OAuth Token_ (`xoxb-...`) - that becomes `driverBotToken`. The driver only needs to post messages and identify itself; no events, no Socket Mode.
543
-
544
- **2. Create the SUT app**
545
-
546
- Repeat _Create New App → From a manifest_ in the same workspace. This QA app intentionally uses a narrower version of the bundled Slack plugin's production manifest (`extensions/slack/src/setup-shared.ts:10`): reaction scopes and events are omitted because the live Slack QA suite does not cover reaction handling yet.
547
-
548
- ```json
549
- {
550
- "display_information": {
551
- "name": "FengMing QA SUT",
552
- "description": "FengMing QA SUT connector for FengMing"
553
- },
554
- "features": {
555
- "bot_user": {
556
- "display_name": "FengMing QA SUT",
557
- "always_online": true
558
- },
559
- "app_home": {
560
- "home_tab_enabled": true,
561
- "messages_tab_enabled": true,
562
- "messages_tab_read_only_enabled": false
563
- }
564
- },
565
- "oauth_config": {
566
- "scopes": {
567
- "bot": [
568
- "app_mentions:read",
569
- "assistant:write",
570
- "channels:history",
571
- "channels:read",
572
- "chat:write",
573
- "commands",
574
- "emoji:read",
575
- "files:read",
576
- "files:write",
577
- "groups:history",
578
- "groups:read",
579
- "im:history",
580
- "im:read",
581
- "im:write",
582
- "mpim:history",
583
- "mpim:read",
584
- "mpim:write",
585
- "pins:read",
586
- "pins:write",
587
- "usergroups:read",
588
- "users:read"
589
- ]
590
- }
591
- },
592
- "settings": {
593
- "socket_mode_enabled": true,
594
- "event_subscriptions": {
595
- "bot_events": [
596
- "app_home_opened",
597
- "app_mention",
598
- "channel_rename",
599
- "member_joined_channel",
600
- "member_left_channel",
601
- "message.channels",
602
- "message.groups",
603
- "message.im",
604
- "message.mpim",
605
- "pin_added",
606
- "pin_removed"
607
- ]
608
- }
609
- }
610
- }
611
- ```
612
-
613
- After Slack creates the app, do two things on its settings page:
614
-
615
- - _Install to Workspace_ → copy the _Bot User OAuth Token_ → that becomes `sutBotToken`.
616
- - _Basic Information → App-Level Tokens → Generate Token and Scopes_ → add scope `connections:write` → save → copy the `xapp-...` value → that becomes `sutAppToken`.
617
-
618
- Verify the two bots have distinct user ids by calling `auth.test` on each token. The runtime distinguishes driver and SUT by user id; reusing one app for both will fail mention-gating immediately.
619
-
620
- **3. Create the channel**
621
-
622
- In the QA workspace, create a channel (e.g. `#fengming-qa`) and invite both bots from inside the channel:
623
-
624
- ```
625
- /invite @FengMing QA Driver
626
- /invite @FengMing QA SUT
627
- ```
628
-
629
- Copy the `Cxxxxxxxxxx` id from _channel info → About → Channel ID_ - that becomes `channelId`. A public channel works; if you use a private channel both apps already have `groups:history` so the harness's history reads will still succeed.
630
-
631
- **4. Register the credentials**
632
-
633
- Two options. Use env vars for single-machine debugging (set the four `FENGMING_QA_SLACK_*` variables and pass `--credential-source env`), or seed the shared Convex pool so CI and other maintainers can lease them.
634
-
635
- For the Convex pool, write the four fields to a JSON file:
636
-
637
- ```json
638
- {
639
- "channelId": "Cxxxxxxxxxx",
640
- "driverBotToken": "xoxb-...",
641
- "sutBotToken": "xoxb-...",
642
- "sutAppToken": "xapp-..."
643
- }
644
- ```
645
-
646
- With `FENGMING_QA_CONVEX_SITE_URL` and `FENGMING_QA_CONVEX_SECRET_MAINTAINER` exported in your shell, register and verify:
647
-
648
- ```bash
649
- pnpm fengming qa credentials add \
650
- --kind slack \
651
- --payload-file slack-creds.json \
652
- --note "QA Slack pool seed"
653
-
654
- pnpm fengming qa credentials list --kind slack --status all --json
655
- ```
656
-
657
- Expect `count: 1`, `status: "active"`, no `lease` field.
658
-
659
- **5. Verify end to end**
660
-
661
- Run the lane locally to confirm both bots can talk to each other through the broker:
662
-
663
- ```bash
664
- pnpm fengming qa slack \
665
- --credential-source convex \
666
- --credential-role maintainer \
667
- --output-dir .artifacts/qa-e2e/slack-local
668
- ```
669
-
670
- A green run completes in well under 30 seconds and `slack-qa-report.md` shows both `slack-canary` and `slack-mention-gating` at status `pass`. If the lane hangs for ~90 seconds and exits with `Convex credential pool exhausted for kind "slack"`, either the pool is empty or every row is leased - `qa credentials list --kind slack --status all --json` will tell you which.
671
-
672
- ### WhatsApp QA
673
-
674
- ```bash
675
- pnpm fengming qa whatsapp
676
- ```
677
-
678
- Targets two dedicated WhatsApp Web accounts: a driver account controlled by
679
- the harness and a SUT account started by the child FengMing gateway through the
680
- bundled WhatsApp plugin.
681
-
682
- Required env when `--credential-source env`:
683
-
684
- - `FENGMING_QA_WHATSAPP_DRIVER_PHONE_E164`
685
- - `FENGMING_QA_WHATSAPP_SUT_PHONE_E164`
686
- - `FENGMING_QA_WHATSAPP_DRIVER_AUTH_ARCHIVE_BASE64`
687
- - `FENGMING_QA_WHATSAPP_SUT_AUTH_ARCHIVE_BASE64`
688
-
689
- Optional:
690
-
691
- - `FENGMING_QA_WHATSAPP_GROUP_JID` enables `whatsapp-mention-gating`.
692
- - `FENGMING_QA_WHATSAPP_CAPTURE_CONTENT=1` keeps message bodies in
693
- observed-message artifacts.
694
-
695
- Scenarios (`extensions/qa-lab/src/live-transports/whatsapp/whatsapp-live.runtime.ts`):
696
-
697
- - `whatsapp-canary`
698
- - `whatsapp-pairing-block`
699
- - `whatsapp-mention-gating`
700
- - `whatsapp-approval-exec-native` - opt-in native WhatsApp exec approval
701
- scenario. Requests an exec approval through the gateway, verifies the
702
- WhatsApp message has native reaction approval affordances, resolves it, and
703
- verifies the resolved WhatsApp follow-up.
704
- - `whatsapp-approval-plugin-native` - opt-in native WhatsApp plugin approval
705
- scenario. Enables exec and plugin approval forwarding together, then verifies
706
- the same pending/resolved native WhatsApp path.
707
-
708
- Output artifacts:
709
-
710
- - `whatsapp-qa-report.md`
711
- - `whatsapp-qa-summary.json`
712
- - `whatsapp-qa-observed-messages.json` - bodies redacted unless `FENGMING_QA_WHATSAPP_CAPTURE_CONTENT=1`.
713
-
714
- ### Convex credential pool
715
-
716
- Telegram, Discord, Slack, and WhatsApp lanes can lease credentials from a shared Convex pool instead of reading the env vars above. Pass `--credential-source convex` (or set `FENGMING_QA_CREDENTIAL_SOURCE=convex`); QA Lab acquires an exclusive lease, heartbeats it for the duration of the run, and releases it on shutdown. Pool kinds are `"telegram"`, `"discord"`, `"slack"`, and `"whatsapp"`.
717
-
718
- Payload shapes the broker validates on `admin/add`:
719
-
720
- - Telegram (`kind: "telegram"`): `{ groupId: string, driverToken: string, sutToken: string }` - `groupId` must be a numeric chat-id string.
721
- - Telegram real user (`kind: "telegram-user"`): `{ groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }` - Mantis Telegram Desktop proof only. Generic QA Lab lanes must not acquire this kind.
722
- - Discord (`kind: "discord"`): `{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string }`.
723
- - WhatsApp (`kind: "whatsapp"`): `{ driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }` - phone numbers must be distinct E.164 strings.
724
-
725
- The Mantis Telegram Desktop proof workflow holds one exclusive Convex
726
- `telegram-user` lease for both the TDLib CLI driver and Telegram Desktop
727
- witness, then releases it after publishing proof.
728
-
729
- When a PR needs a deterministic visual diff, Mantis can use the same mock model
730
- reply on `main` and on the PR head while the Telegram formatter or delivery
731
- layer changes. Capture defaults are tuned for PR comments: standard Crabbox
732
- class, 24fps desktop recording, 24fps motion GIF, and 1920px preview width.
733
- Before/after comments should publish a clean bundle that contains only the
734
- intended GIFs.
735
-
736
- Slack lanes can also use the pool. Slack payload shape checks currently live in the Slack QA runner rather than the broker; use `{ channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string }`, with a Slack channel id like `Cxxxxxxxxxx`. See [Setting up the Slack workspace](#setting-up-the-slack-workspace) for app and scope provisioning.
737
-
738
- Operational env vars and the Convex broker endpoint contract live in [Testing → Shared Telegram credentials via Convex](/help/testing#shared-telegram-credentials-via-convex-v1) (the section name predates the multi-channel pool; the lease semantics are shared across kinds).
739
-
740
- ## Repo-backed seeds
741
-
742
- Seed assets live in `qa/`:
743
-
744
- - `qa/scenarios/index.md`
745
- - `qa/scenarios/<theme>/*.md`
746
-
747
- These are intentionally in git so the QA plan is visible to both humans and the
748
- agent.
749
-
750
- `qa-lab` should stay a generic markdown runner. Each scenario markdown file is
751
- the source of truth for one test run and should define:
752
-
753
- - scenario metadata
754
- - optional category, capability, lane, and risk metadata
755
- - docs and code refs
756
- - optional plugin requirements
757
- - optional gateway config patch
758
- - the executable `qa-flow`
759
-
760
- The reusable runtime surface that backs `qa-flow` is allowed to stay generic
761
- and cross-cutting. For example, markdown scenarios can combine transport-side
762
- helpers with browser-side helpers that drive the embedded Control UI through the
763
- Gateway `browser.request` seam without adding a special-case runner.
764
-
765
- Scenario files should be grouped by product capability rather than source tree
766
- folder. Keep scenario IDs stable when files move; use `docsRefs` and `codeRefs`
767
- for implementation traceability.
768
-
769
- The baseline list should stay broad enough to cover:
770
-
771
- - DM and channel chat
772
- - thread behavior
773
- - message action lifecycle
774
- - cron callbacks
775
- - memory recall
776
- - model switching
777
- - subagent handoff
778
- - repo-reading and docs-reading
779
- - one small build task such as Lobster Invaders
780
-
781
- ## Provider mock lanes
782
-
783
- `qa suite` has two local provider mock lanes:
784
-
785
- - `mock-openai` is the scenario-aware FengMing mock. It remains the default
786
- deterministic mock lane for repo-backed QA and parity gates.
787
- - `aimock` starts an AIMock-backed provider server for experimental protocol,
788
- fixture, record/replay, and chaos coverage. It is additive and does not
789
- replace the `mock-openai` scenario dispatcher.
790
-
791
- Provider-lane implementation lives under `extensions/qa-lab/src/providers/`.
792
- Each provider owns its defaults, local server startup, gateway model config,
793
- auth-profile staging needs, and live/mock capability flags. Shared suite and
794
- gateway code should route through the provider registry instead of branching on
795
- provider names.
796
-
797
- ## Transport adapters
798
-
799
- `qa-lab` owns a generic transport seam for markdown QA scenarios. `qa-channel` is the first adapter on that seam, but the design target is wider: future real or synthetic channels should plug into the same suite runner instead of adding a transport-specific QA runner.
800
-
801
- At the architecture level, the split is:
802
-
803
- - `qa-lab` owns generic scenario execution, worker concurrency, artifact writing, and reporting.
804
- - The transport adapter owns gateway config, readiness, inbound and outbound observation, transport actions, and normalized transport state.
805
- - Markdown scenario files under `qa/scenarios/` define the test run; `qa-lab` provides the reusable runtime surface that executes them.
806
-
807
- ### Adding a channel
808
-
809
- Adding a channel to the markdown QA system requires exactly two things:
810
-
811
- 1. A transport adapter for the channel.
812
- 2. A scenario pack that exercises the channel contract.
813
-
814
- Do not add a new top-level QA command root when the shared `qa-lab` host can own the flow.
815
-
816
- `qa-lab` owns the shared host mechanics:
817
-
818
- - the `fengming qa` command root
819
- - suite startup and teardown
820
- - worker concurrency
821
- - artifact writing
822
- - report generation
823
- - scenario execution
824
- - compatibility aliases for older `qa-channel` scenarios
825
-
826
- Runner plugins own the transport contract:
827
-
828
- - how `fengming qa <runner>` is mounted beneath the shared `qa` root
829
- - how the gateway is configured for that transport
830
- - how readiness is checked
831
- - how inbound events are injected
832
- - how outbound messages are observed
833
- - how transcripts and normalized transport state are exposed
834
- - how transport-backed actions are executed
835
- - how transport-specific reset or cleanup is handled
836
-
837
- The minimum adoption bar for a new channel:
838
-
839
- 1. Keep `qa-lab` as the owner of the shared `qa` root.
840
- 2. Implement the transport runner on the shared `qa-lab` host seam.
841
- 3. Keep transport-specific mechanics inside the runner plugin or channel harness.
842
- 4. Mount the runner as `fengming qa <runner>` instead of registering a competing root command. Runner plugins should declare `qaRunners` in `fengming.plugin.json` and export a matching `qaRunnerCliRegistrations` array from `runtime-api.ts`. Keep `runtime-api.ts` light; lazy CLI and runner execution should stay behind separate entrypoints.
843
- 5. Author or adapt markdown scenarios under the themed `qa/scenarios/` directories.
844
- 6. Use the generic scenario helpers for new scenarios.
845
- 7. Keep existing compatibility aliases working unless the repo is doing an intentional migration.
846
-
847
- The decision rule is strict:
848
-
849
- - If behavior can be expressed once in `qa-lab`, put it in `qa-lab`.
850
- - If behavior depends on one channel transport, keep it in that runner plugin or plugin harness.
851
- - If a scenario needs a new capability that more than one channel can use, add a generic helper instead of a channel-specific branch in `suite.ts`.
852
- - If a behavior is only meaningful for one transport, keep the scenario transport-specific and make that explicit in the scenario contract.
853
-
854
- ### Scenario helper names
855
-
856
- Preferred generic helpers for new scenarios:
857
-
858
- - `waitForTransportReady`
859
- - `waitForChannelReady`
860
- - `injectInboundMessage`
861
- - `injectOutboundMessage`
862
- - `waitForTransportOutboundMessage`
863
- - `waitForChannelOutboundMessage`
864
- - `waitForNoTransportOutbound`
865
- - `getTransportSnapshot`
866
- - `readTransportMessage`
867
- - `readTransportTranscript`
868
- - `formatTransportTranscript`
869
- - `resetTransport`
870
-
871
- Compatibility aliases remain available for existing scenarios - `waitForQaChannelReady`, `waitForOutboundMessage`, `waitForNoOutbound`, `formatConversationTranscript`, `resetBus` - but new scenario authoring should use the generic names. The aliases exist to avoid a flag-day migration, not as the model going forward.
872
-
873
- ## Reporting
874
-
875
- `qa-lab` exports a Markdown protocol report from the observed bus timeline.
876
- The report should answer:
877
-
878
- - What worked
879
- - What failed
880
- - What stayed blocked
881
- - What follow-up scenarios are worth adding
882
-
883
- For the inventory of available scenarios - useful when sizing follow-up work or wiring a new transport - run `pnpm fengming qa coverage` (add `--json` for machine-readable output).
884
- When choosing focused proof for a touched behavior or file path, run `pnpm fengming qa coverage --match <query>`.
885
- The match report searches scenario metadata, docs refs, code refs, coverage IDs, plugins, and provider requirements, then prints matching `qa suite --scenario ...` targets.
886
- Treat it as a discovery aid, not a gate replacement; the selected scenario still needs the right provider mode, live transport, Multipass, Testbox, or release lane for the behavior under test.
887
-
888
- For character and style checks, run the same scenario across multiple live model
889
- refs and write a judged Markdown report:
890
-
891
- ```bash
892
- pnpm fengming qa character-eval \
893
- --model openai/gpt-5.5,thinking=medium,fast \
894
- --model openai/gpt-5.2,thinking=xhigh \
895
- --model openai/gpt-5,thinking=xhigh \
896
- --model anthropic/claude-opus-4-8,thinking=high \
897
- --model anthropic/claude-sonnet-4-6,thinking=high \
898
- --model zai/glm-5.1,thinking=high \
899
- --model moonshot/kimi-k2.5,thinking=high \
900
- --model google/gemini-3.1-pro-preview,thinking=high \
901
- --judge-model openai/gpt-5.5,thinking=xhigh,fast \
902
- --judge-model anthropic/claude-opus-4-8,thinking=high \
903
- --blind-judge-models \
904
- --concurrency 16 \
905
- --judge-concurrency 16
906
- ```
907
-
908
- The command runs local QA gateway child processes, not Docker. Character eval
909
- scenarios should set the persona through `SOUL.md`, then run ordinary user turns
910
- such as chat, workspace help, and small file tasks. The candidate model should
911
- not be told that it is being evaluated. The command preserves each full
912
- transcript, records basic run stats, then asks the judge models in fast mode with
913
- `xhigh` reasoning where supported to rank the runs by naturalness, vibe, and humor.
914
- Use `--blind-judge-models` when comparing providers: the judge prompt still gets
915
- every transcript and run status, but candidate refs are replaced with neutral
916
- labels such as `candidate-01`; the report maps rankings back to real refs after
917
- parsing.
918
- Candidate runs default to `high` thinking, with `medium` for GPT-5.5 and `xhigh`
919
- for older OpenAI eval refs that support it. Override a specific candidate inline with
920
- `--model provider/model,thinking=<level>`. `--thinking <level>` still sets a
921
- global fallback, and the older `--model-thinking <provider/model=level>` form is
922
- kept for compatibility.
923
- OpenAI candidate refs default to fast mode so priority processing is used where
924
- the provider supports it. Add `,fast`, `,no-fast`, or `,fast=false` inline when a
925
- single candidate or judge needs an override. Pass `--fast` only when you want to
926
- force fast mode on for every candidate model. Candidate and judge durations are
927
- recorded in the report for benchmark analysis, but judge prompts explicitly say
928
- not to rank by speed.
929
- Candidate and judge model runs both default to concurrency 16. Lower
930
- `--concurrency` or `--judge-concurrency` when provider limits or local gateway
931
- pressure make a run too noisy.
932
- When no candidate `--model` is passed, the character eval defaults to
933
- `openai/gpt-5.5`, `openai/gpt-5.2`, `openai/gpt-5`, `anthropic/claude-opus-4-8`,
934
- `anthropic/claude-sonnet-4-6`, `zai/glm-5.1`,
935
- `moonshot/kimi-k2.5`, and
936
- `google/gemini-3.1-pro-preview` when no `--model` is passed.
937
- When no `--judge-model` is passed, the judges default to
938
- `openai/gpt-5.5,thinking=xhigh,fast` and
939
- `anthropic/claude-opus-4-8,thinking=high`.
940
-
941
- ## Related docs
942
-
943
- - [Matrix QA](/concepts/qa-matrix)
944
- - [Personal agent benchmark pack](/concepts/personal-agent-benchmark-pack)
945
- - [QA Channel](/channels/qa-channel)
946
- - [Testing](/help/testing)
947
- - [Dashboard](/web/dashboard)