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,1457 +0,0 @@
1
- ---
2
- summary: "Plugin manifest + JSON schema requirements (strict config validation)"
3
- read_when:
4
- - You are building an FengMing plugin
5
- - You need to ship a plugin config schema or debug plugin validation errors
6
- title: "Plugin manifest"
7
- ---
8
-
9
- This page is for the **native FengMing plugin manifest** only.
10
-
11
- For compatible bundle layouts, see [Plugin bundles](/plugins/bundles).
12
-
13
- Compatible bundle formats use different manifest files:
14
-
15
- - Codex bundle: `.codex-plugin/plugin.json`
16
- - Claude bundle: `.claude-plugin/plugin.json` or the default Claude component
17
- layout without a manifest
18
- - Cursor bundle: `.cursor-plugin/plugin.json`
19
-
20
- FengMing auto-detects those bundle layouts too, but they are not validated
21
- against the `fengming.plugin.json` schema described here.
22
-
23
- For compatible bundles, FengMing currently reads bundle metadata plus declared
24
- skill roots, Claude command roots, Claude bundle `settings.json` defaults,
25
- Claude bundle LSP defaults, and supported hook packs when the layout matches
26
- FengMing runtime expectations.
27
-
28
- Every native FengMing plugin **must** ship a `fengming.plugin.json` file in the
29
- **plugin root**. FengMing uses this manifest to validate configuration
30
- **without executing plugin code**. Missing or invalid manifests are treated as
31
- plugin errors and block config validation.
32
-
33
- See the full plugin system guide: [Plugins](/tools/plugin).
34
- For the native capability model and current external-compatibility guidance:
35
- [Capability model](/plugins/architecture#public-capability-model).
36
-
37
- ## What this file does
38
-
39
- `fengming.plugin.json` is the metadata FengMing reads **before it loads your
40
- plugin code**. Everything below must be cheap enough to inspect without booting
41
- plugin runtime.
42
-
43
- **Use it for:**
44
-
45
- - plugin identity, config validation, and config UI hints
46
- - auth, onboarding, and setup metadata (alias, auto-enable, provider env vars, auth choices)
47
- - activation hints for control-plane surfaces
48
- - shorthand model-family ownership
49
- - static capability-ownership snapshots (`contracts`)
50
- - QA runner metadata the shared `fengming qa` host can inspect
51
- - channel-specific config metadata merged into catalog and validation surfaces
52
-
53
- **Do not use it for:** registering runtime behavior, declaring code entrypoints,
54
- or npm install metadata. Those belong in your plugin code and `package.json`.
55
-
56
- ## Minimal example
57
-
58
- ```json
59
- {
60
- "id": "voice-call",
61
- "configSchema": {
62
- "type": "object",
63
- "additionalProperties": false,
64
- "properties": {}
65
- }
66
- }
67
- ```
68
-
69
- ## Rich example
70
-
71
- ```json
72
- {
73
- "id": "openrouter",
74
- "name": "OpenRouter",
75
- "description": "OpenRouter provider plugin",
76
- "version": "1.0.0",
77
- "providers": ["openrouter"],
78
- "modelSupport": {
79
- "modelPrefixes": ["router-"]
80
- },
81
- "modelIdNormalization": {
82
- "providers": {
83
- "openrouter": {
84
- "prefixWhenBare": "openrouter"
85
- }
86
- }
87
- },
88
- "providerEndpoints": [
89
- {
90
- "endpointClass": "openrouter",
91
- "hostSuffixes": ["openrouter.ai"]
92
- }
93
- ],
94
- "providerRequest": {
95
- "providers": {
96
- "openrouter": {
97
- "family": "openrouter"
98
- }
99
- }
100
- },
101
- "cliBackends": ["openrouter-cli"],
102
- "syntheticAuthRefs": ["openrouter-cli"],
103
- "setup": {
104
- "providers": [
105
- {
106
- "id": "openrouter",
107
- "envVars": ["OPENROUTER_API_KEY"]
108
- }
109
- ]
110
- },
111
- "providerAuthAliases": {
112
- "openrouter-coding": "openrouter"
113
- },
114
- "channelEnvVars": {
115
- "openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"]
116
- },
117
- "providerAuthChoices": [
118
- {
119
- "provider": "openrouter",
120
- "method": "api-key",
121
- "choiceId": "openrouter-api-key",
122
- "choiceLabel": "OpenRouter API key",
123
- "groupId": "openrouter",
124
- "groupLabel": "OpenRouter",
125
- "optionKey": "openrouterApiKey",
126
- "cliFlag": "--openrouter-api-key",
127
- "cliOption": "--openrouter-api-key <key>",
128
- "cliDescription": "OpenRouter API key",
129
- "onboardingScopes": ["text-inference"]
130
- }
131
- ],
132
- "uiHints": {
133
- "apiKey": {
134
- "label": "API key",
135
- "placeholder": "sk-or-v1-...",
136
- "sensitive": true
137
- }
138
- },
139
- "configSchema": {
140
- "type": "object",
141
- "additionalProperties": false,
142
- "properties": {
143
- "apiKey": {
144
- "type": "string"
145
- }
146
- }
147
- }
148
- }
149
- ```
150
-
151
- ## Top-level field reference
152
-
153
- | Field | Required | Type | What it means |
154
- | ------------------------------------ | -------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
155
- | `id` | Yes | `string` | Canonical plugin id. This is the id used in `plugins.entries.<id>`. |
156
- | `configSchema` | Yes | `object` | Inline JSON Schema for this plugin's config. |
157
- | `requiresPlugins` | No | `string[]` | Plugin ids that must also be installed for this plugin to have an effect. Discovery keeps the plugin loadable but warns when any required plugin is missing. |
158
- | `enabledByDefault` | No | `true` | Marks a bundled plugin as enabled by default. Omit it, or set any non-`true` value, to leave the plugin disabled by default. |
159
- | `enabledByDefaultOnPlatforms` | No | `string[]` | Marks a bundled plugin as enabled by default only on the listed Node.js platforms, for example `["darwin"]`. Explicit config still wins. |
160
- | `legacyPluginIds` | No | `string[]` | Legacy ids that normalize to this canonical plugin id. |
161
- | `autoEnableWhenConfiguredProviders` | No | `string[]` | Provider ids that should auto-enable this plugin when auth, config, or model refs mention them. |
162
- | `kind` | No | `"memory"` \| `"context-engine"` | Declares an exclusive plugin kind used by `plugins.slots.*`. |
163
- | `channels` | No | `string[]` | Channel ids owned by this plugin. Used for discovery and config validation. |
164
- | `providers` | No | `string[]` | Provider ids owned by this plugin. |
165
- | `providerCatalogEntry` | No | `string` | Lightweight provider-catalog module path, relative to the plugin root, for manifest-scoped provider catalog metadata that can be loaded without activating the full plugin runtime. |
166
- | `modelSupport` | No | `object` | Manifest-owned shorthand model-family metadata used to auto-load the plugin before runtime. |
167
- | `modelCatalog` | No | `object` | Declarative model catalog metadata for providers owned by this plugin. This is the control-plane contract for future read-only listing, onboarding, model pickers, aliases, and suppression without loading plugin runtime. |
168
- | `modelPricing` | No | `object` | Provider-owned external pricing lookup policy. Use it to opt local/self-hosted providers out of remote pricing catalogs or map provider refs to OpenRouter/LiteLLM catalog ids without hardcoding provider ids in core. |
169
- | `modelIdNormalization` | No | `object` | Provider-owned model-id alias/prefix cleanup that must run before provider runtime loads. |
170
- | `providerEndpoints` | No | `object[]` | Manifest-owned endpoint host/baseUrl metadata for provider routes that core must classify before provider runtime loads. |
171
- | `providerRequest` | No | `object` | Cheap provider-family and request-compatibility metadata used by generic request policy before provider runtime loads. |
172
- | `secretProviderIntegrations` | No | `Record<string, object>` | Declarative SecretRef exec provider presets that setup or install surfaces can offer without hardcoding provider-specific integrations in core. |
173
- | `cliBackends` | No | `string[]` | CLI inference backend ids owned by this plugin. Used for startup auto-activation from explicit config refs. |
174
- | `syntheticAuthRefs` | No | `string[]` | Provider or CLI backend refs whose plugin-owned synthetic auth hook should be probed during cold model discovery before runtime loads. |
175
- | `nonSecretAuthMarkers` | No | `string[]` | Bundled-plugin-owned placeholder API key values that represent non-secret local, OAuth, or ambient credential state. |
176
- | `commandAliases` | No | `object[]` | Command names owned by this plugin that should produce plugin-aware config and CLI diagnostics before runtime loads. |
177
- | `providerAuthEnvVars` | No | `Record<string, string[]>` | Deprecated compatibility env metadata for provider auth/status lookup. Prefer `setup.providers[].envVars` for new plugins; FengMing still reads this during the deprecation window. |
178
- | `providerAuthAliases` | No | `Record<string, string>` | Provider ids that should reuse another provider id for auth lookup, for example a coding provider that shares the base provider API key and auth profiles. |
179
- | `channelEnvVars` | No | `Record<string, string[]>` | Cheap channel env metadata that FengMing can inspect without loading plugin code. Use this for env-driven channel setup or auth surfaces that generic startup/config helpers should see. |
180
- | `providerAuthChoices` | No | `object[]` | Cheap auth-choice metadata for onboarding pickers, preferred-provider resolution, and simple CLI flag wiring. |
181
- | `activation` | No | `object` | Cheap activation planner metadata for startup, provider, command, channel, route, and capability-triggered loading. Metadata only; plugin runtime still owns actual behavior. |
182
- | `setup` | No | `object` | Cheap setup/onboarding descriptors that discovery and setup surfaces can inspect without loading plugin runtime. |
183
- | `qaRunners` | No | `object[]` | Cheap QA runner descriptors used by the shared `fengming qa` host before plugin runtime loads. |
184
- | `contracts` | No | `object` | Static capability ownership snapshot for external auth hooks, embeddings, speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search, and tool ownership. |
185
- | `mediaUnderstandingProviderMetadata` | No | `Record<string, object>` | Cheap media-understanding defaults for provider ids declared in `contracts.mediaUnderstandingProviders`. |
186
- | `imageGenerationProviderMetadata` | No | `Record<string, object>` | Cheap image-generation auth metadata for provider ids declared in `contracts.imageGenerationProviders`, including provider-owned auth aliases and base-url guards. |
187
- | `videoGenerationProviderMetadata` | No | `Record<string, object>` | Cheap video-generation auth metadata for provider ids declared in `contracts.videoGenerationProviders`, including provider-owned auth aliases and base-url guards. |
188
- | `musicGenerationProviderMetadata` | No | `Record<string, object>` | Cheap music-generation auth metadata for provider ids declared in `contracts.musicGenerationProviders`, including provider-owned auth aliases and base-url guards. |
189
- | `toolMetadata` | No | `Record<string, object>` | Cheap availability metadata for plugin-owned tools declared in `contracts.tools`. Use it when a tool should not load runtime unless config, env, or auth evidence exists. |
190
- | `channelConfigs` | No | `Record<string, object>` | Manifest-owned channel config metadata merged into discovery and validation surfaces before runtime loads. |
191
- | `skills` | No | `string[]` | Skill directories to load, relative to the plugin root. |
192
- | `name` | No | `string` | Human-readable plugin name. |
193
- | `description` | No | `string` | Short summary shown in plugin surfaces. |
194
- | `version` | No | `string` | Informational plugin version. |
195
- | `uiHints` | No | `Record<string, object>` | UI labels, placeholders, and sensitivity hints for config fields. |
196
-
197
- ## Generation provider metadata reference
198
-
199
- The generation provider metadata fields describe static auth signals for
200
- providers declared in the matching `contracts.*GenerationProviders` list.
201
- FengMing reads these fields before provider runtime loads so core tools can
202
- decide whether a generation provider is available without importing every
203
- provider plugin.
204
-
205
- Use these fields only for cheap, declarative facts. Transport, request
206
- transforms, token refresh, credential validation, and actual generation behavior
207
- stay in the plugin runtime.
208
-
209
- ```json
210
- {
211
- "contracts": {
212
- "imageGenerationProviders": ["example-image"]
213
- },
214
- "imageGenerationProviderMetadata": {
215
- "example-image": {
216
- "aliases": ["example-image-oauth"],
217
- "authProviders": ["example-image"],
218
- "configSignals": [
219
- {
220
- "rootPath": "plugins.entries.example-image.config",
221
- "overlayPath": "image",
222
- "mode": {
223
- "path": "mode",
224
- "default": "local",
225
- "allowed": ["local"]
226
- },
227
- "requiredAny": ["workflow", "workflowPath"],
228
- "required": ["promptNodeId"]
229
- }
230
- ],
231
- "authSignals": [
232
- {
233
- "provider": "example-image"
234
- },
235
- {
236
- "provider": "example-image-oauth",
237
- "providerBaseUrl": {
238
- "provider": "example-image",
239
- "defaultBaseUrl": "https://api.example.com/v1",
240
- "allowedBaseUrls": ["https://api.example.com/v1"]
241
- }
242
- }
243
- ]
244
- }
245
- }
246
- }
247
- ```
248
-
249
- Each metadata entry supports:
250
-
251
- | Field | Required | Type | What it means |
252
- | ---------------------- | -------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
253
- | `aliases` | No | `string[]` | Additional provider ids that should count as static auth aliases for the generation provider. |
254
- | `authProviders` | No | `string[]` | Provider ids whose configured auth profiles should count as auth for this generation provider. |
255
- | `configSignals` | No | `object[]` | Cheap config-only availability signals for local or self-hosted providers that can be configured without auth profiles or env vars. |
256
- | `authSignals` | No | `object[]` | Explicit auth signals. When present, these replace the default signal set from the provider id, `aliases`, and `authProviders`. |
257
- | `referenceAudioInputs` | No | `boolean` | Video-generation only. Set to `true` when the provider accepts reference audio assets; otherwise `video_generate` hides audio reference parameters. |
258
-
259
- Each `configSignals` entry supports:
260
-
261
- | Field | Required | Type | What it means |
262
- | ------------- | -------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
263
- | `rootPath` | Yes | `string` | Dot path to the plugin-owned config object to inspect, for example `plugins.entries.example.config`. |
264
- | `overlayPath` | No | `string` | Dot path inside the root config whose object should overlay the root object before evaluating the signal. Use this for capability-specific config such as `image`, `video`, or `music`. |
265
- | `required` | No | `string[]` | Dot paths inside the effective config that must have configured values. Strings must be non-empty; objects and arrays must not be empty. |
266
- | `requiredAny` | No | `string[]` | Dot paths inside the effective config where at least one must have a configured value. |
267
- | `mode` | No | `object` | Optional string mode guard inside the effective config. Use this when config-only availability applies only to one mode. |
268
-
269
- Each `mode` guard supports:
270
-
271
- | Field | Required | Type | What it means |
272
- | ------------ | -------- | ---------- | ---------------------------------------------------------------------------------- |
273
- | `path` | No | `string` | Dot path inside the effective config. Defaults to `mode`. |
274
- | `default` | No | `string` | Mode value to use when the config omits the path. |
275
- | `allowed` | No | `string[]` | If present, the signal passes only when the effective mode is one of these values. |
276
- | `disallowed` | No | `string[]` | If present, the signal fails when the effective mode is one of these values. |
277
-
278
- Each `authSignals` entry supports:
279
-
280
- | Field | Required | Type | What it means |
281
- | ----------------- | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
282
- | `provider` | Yes | `string` | Provider id to check in configured auth profiles. |
283
- | `providerBaseUrl` | No | `object` | Optional guard that makes the signal count only when the referenced configured provider uses an allowed base URL. Use this when an auth alias is valid only for certain APIs. |
284
-
285
- Each `providerBaseUrl` guard supports:
286
-
287
- | Field | Required | Type | What it means |
288
- | ----------------- | -------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
289
- | `provider` | Yes | `string` | Provider config id whose `baseUrl` should be checked. |
290
- | `defaultBaseUrl` | No | `string` | Base URL to assume when the provider config omits `baseUrl`. |
291
- | `allowedBaseUrls` | Yes | `string[]` | Allowed base URLs for this auth signal. The signal is ignored when the configured or default base URL does not match one of these normalized values. |
292
-
293
- ## Tool metadata reference
294
-
295
- `toolMetadata` uses the same `configSignals` and `authSignals` shapes as
296
- generation provider metadata, keyed by tool name. `contracts.tools` declares
297
- ownership. `toolMetadata` declares cheap availability evidence so FengMing can
298
- avoid importing a plugin runtime just to have its tool factory return `null`.
299
-
300
- ```json
301
- {
302
- "setup": {
303
- "providers": [
304
- {
305
- "id": "example",
306
- "envVars": ["EXAMPLE_API_KEY"]
307
- }
308
- ]
309
- },
310
- "contracts": {
311
- "tools": ["example_search"]
312
- },
313
- "toolMetadata": {
314
- "example_search": {
315
- "authSignals": [
316
- {
317
- "provider": "example"
318
- }
319
- ],
320
- "configSignals": [
321
- {
322
- "rootPath": "plugins.entries.example.config",
323
- "overlayPath": "search",
324
- "required": ["apiKey"]
325
- }
326
- ]
327
- }
328
- }
329
- }
330
- ```
331
-
332
- If a tool has no `toolMetadata`, FengMing preserves the existing behavior and
333
- loads the owning plugin when the tool contract matches policy. For hot-path
334
- tools whose factory depends on auth/config, plugin authors should declare
335
- `toolMetadata` instead of making core import runtime to ask.
336
-
337
- ## providerAuthChoices reference
338
-
339
- Each `providerAuthChoices` entry describes one onboarding or auth choice.
340
- FengMing reads this before provider runtime loads.
341
- Provider setup lists use these manifest choices, descriptor-derived setup
342
- choices, and install-catalog metadata without loading provider runtime.
343
-
344
- | Field | Required | Type | What it means |
345
- | --------------------- | -------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
346
- | `provider` | Yes | `string` | Provider id this choice belongs to. |
347
- | `method` | Yes | `string` | Auth method id to dispatch to. |
348
- | `choiceId` | Yes | `string` | Stable auth-choice id used by onboarding and CLI flows. |
349
- | `choiceLabel` | No | `string` | User-facing label. If omitted, FengMing falls back to `choiceId`. |
350
- | `choiceHint` | No | `string` | Short helper text for the picker. |
351
- | `assistantPriority` | No | `number` | Lower values sort earlier in assistant-driven interactive pickers. |
352
- | `assistantVisibility` | No | `"visible"` \| `"manual-only"` | Hide the choice from assistant pickers while still allowing manual CLI selection. |
353
- | `deprecatedChoiceIds` | No | `string[]` | Legacy choice ids that should redirect users to this replacement choice. |
354
- | `groupId` | No | `string` | Optional group id for grouping related choices. |
355
- | `groupLabel` | No | `string` | User-facing label for that group. |
356
- | `groupHint` | No | `string` | Short helper text for the group. |
357
- | `optionKey` | No | `string` | Internal option key for simple one-flag auth flows. |
358
- | `cliFlag` | No | `string` | CLI flag name, such as `--openrouter-api-key`. |
359
- | `cliOption` | No | `string` | Full CLI option shape, such as `--openrouter-api-key <key>`. |
360
- | `cliDescription` | No | `string` | Description used in CLI help. |
361
- | `onboardingScopes` | No | `Array<"text-inference" \| "image-generation" \| "music-generation">` | Which onboarding surfaces this choice should appear in. If omitted, it defaults to `["text-inference"]`. |
362
-
363
- ## commandAliases reference
364
-
365
- Use `commandAliases` when a plugin owns a runtime command name that users may
366
- mistakenly put in `plugins.allow` or try to run as a root CLI command. FengMing
367
- uses this metadata for diagnostics without importing plugin runtime code.
368
-
369
- ```json
370
- {
371
- "commandAliases": [
372
- {
373
- "name": "dreaming",
374
- "kind": "runtime-slash",
375
- "cliCommand": "memory"
376
- }
377
- ]
378
- }
379
- ```
380
-
381
- | Field | Required | Type | What it means |
382
- | ------------ | -------- | ----------------- | ----------------------------------------------------------------------- |
383
- | `name` | Yes | `string` | Command name that belongs to this plugin. |
384
- | `kind` | No | `"runtime-slash"` | Marks the alias as a chat slash command rather than a root CLI command. |
385
- | `cliCommand` | No | `string` | Related root CLI command to suggest for CLI operations, if one exists. |
386
-
387
- ## activation reference
388
-
389
- Use `activation` when the plugin can cheaply declare which control-plane events
390
- should include it in an activation/load plan.
391
-
392
- This block is planner metadata, not a lifecycle API. It does not register
393
- runtime behavior, does not replace `register(...)`, and does not promise that
394
- plugin code has already executed. The activation planner uses these fields to
395
- narrow candidate plugins before falling back to existing manifest ownership
396
- metadata such as `providers`, `channels`, `commandAliases`, `setup.providers`,
397
- `contracts.tools`, and hooks.
398
-
399
- Prefer the narrowest metadata that already describes ownership. Use
400
- `providers`, `channels`, `commandAliases`, setup descriptors, or `contracts`
401
- when those fields express the relationship. Use `activation` for extra planner
402
- hints that cannot be represented by those ownership fields.
403
- Use top-level `cliBackends` for CLI runtime aliases such as `claude-cli`,
404
- `my-cli`, or `google-gemini-cli`; `activation.onAgentHarnesses` is only for
405
- embedded agent harness ids that do not already have an ownership field.
406
-
407
- This block is metadata only. It does not register runtime behavior, and it does
408
- not replace `register(...)`, `setupEntry`, or other runtime/plugin entrypoints.
409
- Current consumers use it as a narrowing hint before broader plugin loading, so
410
- missing non-startup activation metadata usually only costs performance; it
411
- should not change correctness while manifest ownership fallbacks still exist.
412
-
413
- Every plugin should set `activation.onStartup` intentionally. Set it to `true`
414
- only when the plugin must run during Gateway startup. Set it to `false` when
415
- the plugin is inert at startup and should load only from narrower triggers.
416
- Omitting `onStartup` no longer startup-loads the plugin implicitly; use explicit
417
- activation metadata for startup, channel, config, agent-harness, memory, or
418
- other narrower activation triggers.
419
-
420
- ```json
421
- {
422
- "activation": {
423
- "onStartup": false,
424
- "onProviders": ["openai"],
425
- "onCommands": ["models"],
426
- "onChannels": ["web"],
427
- "onRoutes": ["gateway-webhook"],
428
- "onConfigPaths": ["browser"],
429
- "onCapabilities": ["provider", "tool"]
430
- }
431
- }
432
- ```
433
-
434
- | Field | Required | Type | What it means |
435
- | ------------------ | -------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
436
- | `onStartup` | No | `boolean` | Explicit Gateway startup activation. Every plugin should set this. `true` imports the plugin during startup; `false` keeps it startup-lazy unless another matched trigger requires loading. |
437
- | `onProviders` | No | `string[]` | Provider ids that should include this plugin in activation/load plans. |
438
- | `onAgentHarnesses` | No | `string[]` | Embedded agent harness runtime ids that should include this plugin in activation/load plans. Use top-level `cliBackends` for CLI backend aliases. |
439
- | `onCommands` | No | `string[]` | Command ids that should include this plugin in activation/load plans. |
440
- | `onChannels` | No | `string[]` | Channel ids that should include this plugin in activation/load plans. |
441
- | `onRoutes` | No | `string[]` | Route kinds that should include this plugin in activation/load plans. |
442
- | `onConfigPaths` | No | `string[]` | Root-relative config paths that should include this plugin in startup/load plans when the path is present and not explicitly disabled. |
443
- | `onCapabilities` | No | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Broad capability hints used by control-plane activation planning. Prefer narrower fields when possible. |
444
-
445
- Current live consumers:
446
-
447
- - Gateway startup planning uses `activation.onStartup` for explicit startup
448
- import
449
- - command-triggered CLI planning falls back to legacy
450
- `commandAliases[].cliCommand` or `commandAliases[].name`
451
- - agent-runtime startup planning uses `activation.onAgentHarnesses` for
452
- embedded harnesses and top-level `cliBackends[]` for CLI runtime aliases
453
- - channel-triggered setup/channel planning falls back to legacy `channels[]`
454
- ownership when explicit channel activation metadata is missing
455
- - startup plugin planning uses `activation.onConfigPaths` for non-channel root
456
- config surfaces such as the bundled browser plugin's `browser` block
457
- - provider-triggered setup/runtime planning falls back to legacy
458
- `providers[]` and top-level `cliBackends[]` ownership when explicit provider
459
- activation metadata is missing
460
-
461
- Planner diagnostics can distinguish explicit activation hints from manifest
462
- ownership fallback. For example, `activation-command-hint` means
463
- `activation.onCommands` matched, while `manifest-command-alias` means the
464
- planner used `commandAliases` ownership instead. These reason labels are for
465
- host diagnostics and tests; plugin authors should keep declaring the metadata
466
- that best describes ownership.
467
-
468
- ## qaRunners reference
469
-
470
- Use `qaRunners` when a plugin contributes one or more transport runners beneath
471
- the shared `fengming qa` root. Keep this metadata cheap and static; the plugin
472
- runtime still owns actual CLI registration through a lightweight
473
- `runtime-api.ts` surface that exports `qaRunnerCliRegistrations`.
474
-
475
- ```json
476
- {
477
- "qaRunners": [
478
- {
479
- "commandName": "matrix",
480
- "description": "Run the Docker-backed Matrix live QA lane against a disposable homeserver"
481
- }
482
- ]
483
- }
484
- ```
485
-
486
- | Field | Required | Type | What it means |
487
- | ------------- | -------- | -------- | ------------------------------------------------------------------ |
488
- | `commandName` | Yes | `string` | Subcommand mounted beneath `fengming qa`, for example `matrix`. |
489
- | `description` | No | `string` | Fallback help text used when the shared host needs a stub command. |
490
-
491
- ## setup reference
492
-
493
- Use `setup` when setup and onboarding surfaces need cheap plugin-owned metadata
494
- before runtime loads.
495
-
496
- ```json
497
- {
498
- "setup": {
499
- "providers": [
500
- {
501
- "id": "openai",
502
- "authMethods": ["api-key"],
503
- "envVars": ["OPENAI_API_KEY"],
504
- "authEvidence": [
505
- {
506
- "type": "local-file-with-env",
507
- "fileEnvVar": "OPENAI_CREDENTIALS_FILE",
508
- "requiresAllEnv": ["OPENAI_PROJECT"],
509
- "credentialMarker": "openai-local-credentials",
510
- "source": "openai local credentials"
511
- }
512
- ]
513
- }
514
- ],
515
- "cliBackends": ["openai-cli"],
516
- "configMigrations": ["legacy-openai-auth"],
517
- "requiresRuntime": false
518
- }
519
- }
520
- ```
521
-
522
- Top-level `cliBackends` stays valid and continues to describe CLI inference
523
- backends. `setup.cliBackends` is the setup-specific descriptor surface for
524
- control-plane/setup flows that should stay metadata-only.
525
-
526
- When present, `setup.providers` and `setup.cliBackends` are the preferred
527
- descriptor-first lookup surface for setup discovery. If the descriptor only
528
- narrows the candidate plugin and setup still needs richer setup-time runtime
529
- hooks, set `requiresRuntime: true` and keep `setup-api` in place as the
530
- fallback execution path.
531
-
532
- FengMing also includes `setup.providers[].envVars` in generic provider auth and
533
- env-var lookups. `providerAuthEnvVars` remains supported through a compatibility
534
- adapter during the deprecation window, but non-bundled plugins that still use it
535
- receive a manifest diagnostic. New plugins should put setup/status env metadata
536
- on `setup.providers[].envVars`.
537
-
538
- FengMing can also derive simple setup choices from `setup.providers[].authMethods`
539
- when no setup entry is available, or when `setup.requiresRuntime: false`
540
- declares setup runtime unnecessary. Explicit `providerAuthChoices` entries stay
541
- preferred for custom labels, CLI flags, onboarding scope, and assistant metadata.
542
-
543
- Set `requiresRuntime: false` only when those descriptors are sufficient for the
544
- setup surface. FengMing treats explicit `false` as a descriptor-only contract
545
- and will not execute `setup-api` or `fengming.setupEntry` for setup lookup. If
546
- a descriptor-only plugin still ships one of those setup runtime entries,
547
- FengMing reports an additive diagnostic and continues ignoring it. Omitted
548
- `requiresRuntime` keeps legacy fallback behavior so existing plugins that added
549
- descriptors without the flag do not break.
550
-
551
- Because setup lookup can execute plugin-owned `setup-api` code, normalized
552
- `setup.providers[].id` and `setup.cliBackends[]` values must stay unique across
553
- discovered plugins. Ambiguous ownership fails closed instead of picking a
554
- winner from discovery order.
555
-
556
- When setup runtime does execute, setup registry diagnostics report descriptor
557
- drift if `setup-api` registers a provider or CLI backend that the manifest
558
- descriptors do not declare, or if a descriptor has no matching runtime
559
- registration. These diagnostics are additive and do not reject legacy plugins.
560
-
561
- ### setup.providers reference
562
-
563
- | Field | Required | Type | What it means |
564
- | -------------- | -------- | ---------- | ------------------------------------------------------------------------------------------------ |
565
- | `id` | Yes | `string` | Provider id exposed during setup or onboarding. Keep normalized ids globally unique. |
566
- | `authMethods` | No | `string[]` | Setup/auth method ids this provider supports without loading full runtime. |
567
- | `envVars` | No | `string[]` | Env vars that generic setup/status surfaces can check before plugin runtime loads. |
568
- | `authEvidence` | No | `object[]` | Cheap local auth evidence checks for providers that can authenticate through non-secret markers. |
569
-
570
- `authEvidence` is for provider-owned local credential markers that can be
571
- verified without loading runtime code. These checks must stay cheap and local:
572
- no network calls, no keychain or secret-manager reads, no shell commands, and no
573
- provider API probes.
574
-
575
- Supported evidence entries:
576
-
577
- | Field | Required | Type | What it means |
578
- | ------------------ | -------- | ---------- | -------------------------------------------------------------------------------------------------------------- |
579
- | `type` | Yes | `string` | Currently `local-file-with-env`. |
580
- | `fileEnvVar` | No | `string` | Env var containing an explicit credential file path. |
581
- | `fallbackPaths` | No | `string[]` | Local credential file paths checked when `fileEnvVar` is absent or empty. Supports `${HOME}` and `${APPDATA}`. |
582
- | `requiresAnyEnv` | No | `string[]` | At least one listed env var must be non-empty before the evidence is valid. |
583
- | `requiresAllEnv` | No | `string[]` | Every listed env var must be non-empty before the evidence is valid. |
584
- | `credentialMarker` | Yes | `string` | Non-secret marker returned when the evidence is present. |
585
- | `source` | No | `string` | User-facing source label for auth/status output. |
586
-
587
- ### setup fields
588
-
589
- | Field | Required | Type | What it means |
590
- | ------------------ | -------- | ---------- | --------------------------------------------------------------------------------------------------- |
591
- | `providers` | No | `object[]` | Provider setup descriptors exposed during setup and onboarding. |
592
- | `cliBackends` | No | `string[]` | Setup-time backend ids used for descriptor-first setup lookup. Keep normalized ids globally unique. |
593
- | `configMigrations` | No | `string[]` | Config migration ids owned by this plugin's setup surface. |
594
- | `requiresRuntime` | No | `boolean` | Whether setup still needs `setup-api` execution after descriptor lookup. |
595
-
596
- ## uiHints reference
597
-
598
- `uiHints` is a map from config field names to small rendering hints.
599
-
600
- ```json
601
- {
602
- "uiHints": {
603
- "apiKey": {
604
- "label": "API key",
605
- "help": "Used for OpenRouter requests",
606
- "placeholder": "sk-or-v1-...",
607
- "sensitive": true
608
- }
609
- }
610
- }
611
- ```
612
-
613
- Each field hint can include:
614
-
615
- | Field | Type | What it means |
616
- | ------------- | ---------- | --------------------------------------- |
617
- | `label` | `string` | User-facing field label. |
618
- | `help` | `string` | Short helper text. |
619
- | `tags` | `string[]` | Optional UI tags. |
620
- | `advanced` | `boolean` | Marks the field as advanced. |
621
- | `sensitive` | `boolean` | Marks the field as secret or sensitive. |
622
- | `placeholder` | `string` | Placeholder text for form inputs. |
623
-
624
- ## contracts reference
625
-
626
- Use `contracts` only for static capability ownership metadata that FengMing can
627
- read without importing the plugin runtime.
628
-
629
- ```json
630
- {
631
- "contracts": {
632
- "agentToolResultMiddleware": ["fengming", "codex"],
633
- "externalAuthProviders": ["acme-ai"],
634
- "embeddingProviders": ["openai-compatible"],
635
- "speechProviders": ["openai"],
636
- "realtimeTranscriptionProviders": ["openai"],
637
- "realtimeVoiceProviders": ["openai"],
638
- "memoryEmbeddingProviders": ["local"],
639
- "mediaUnderstandingProviders": ["openai"],
640
- "imageGenerationProviders": ["openai"],
641
- "videoGenerationProviders": ["qwen"],
642
- "webFetchProviders": ["firecrawl"],
643
- "webSearchProviders": ["gemini"],
644
- "migrationProviders": ["hermes"],
645
- "gatewayMethodDispatch": ["authenticated-request"],
646
- "tools": ["firecrawl_search", "firecrawl_scrape"]
647
- }
648
- }
649
- ```
650
-
651
- Each list is optional:
652
-
653
- | Field | Type | What it means |
654
- | -------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------- |
655
- | `embeddedExtensionFactories` | `string[]` | Codex app-server extension factory ids, currently `codex-app-server`. |
656
- | `agentToolResultMiddleware` | `string[]` | Runtime ids a bundled plugin may register tool-result middleware for. |
657
- | `externalAuthProviders` | `string[]` | Provider ids whose external auth profile hook this plugin owns. |
658
- | `embeddingProviders` | `string[]` | General embedding provider ids this plugin owns for reusable vector embedding use, including memory. |
659
- | `speechProviders` | `string[]` | Speech provider ids this plugin owns. |
660
- | `realtimeTranscriptionProviders` | `string[]` | Realtime-transcription provider ids this plugin owns. |
661
- | `realtimeVoiceProviders` | `string[]` | Realtime-voice provider ids this plugin owns. |
662
- | `memoryEmbeddingProviders` | `string[]` | Deprecated memory-specific embedding provider ids this plugin owns. |
663
- | `mediaUnderstandingProviders` | `string[]` | Media-understanding provider ids this plugin owns. |
664
- | `transcriptSourceProviders` | `string[]` | Transcript source provider ids this plugin owns. |
665
- | `imageGenerationProviders` | `string[]` | Image-generation provider ids this plugin owns. |
666
- | `videoGenerationProviders` | `string[]` | Video-generation provider ids this plugin owns. |
667
- | `webFetchProviders` | `string[]` | Web-fetch provider ids this plugin owns. |
668
- | `webSearchProviders` | `string[]` | Web-search provider ids this plugin owns. |
669
- | `migrationProviders` | `string[]` | Import provider ids this plugin owns for `fengming migrate`. |
670
- | `gatewayMethodDispatch` | `string[]` | Reserved entitlement for authenticated plugin HTTP routes that dispatch Gateway methods in-process. |
671
- | `tools` | `string[]` | Agent tool names this plugin owns. |
672
-
673
- `contracts.embeddedExtensionFactories` is retained for bundled Codex
674
- app-server-only extension factories. Bundled tool-result transforms should
675
- declare `contracts.agentToolResultMiddleware` and register with
676
- `api.registerAgentToolResultMiddleware(...)` instead. External plugins cannot
677
- register tool-result middleware because the seam can rewrite high-trust tool
678
- output before the model sees it.
679
-
680
- Runtime `api.registerTool(...)` registrations must match `contracts.tools`.
681
- Tool discovery uses this list to load only the plugin runtimes that can own the
682
- requested tools.
683
-
684
- Provider plugins that implement `resolveExternalAuthProfiles` should declare
685
- `contracts.externalAuthProviders`; undeclared external-auth hooks are ignored.
686
-
687
- General embedding providers should declare `contracts.embeddingProviders` for
688
- each adapter registered with `api.registerEmbeddingProvider(...)`. Use the
689
- general contract for reusable vector generation, including providers consumed by
690
- memory search. `contracts.memoryEmbeddingProviders` is deprecated
691
- memory-specific compatibility and remains only while existing providers migrate
692
- to the generic embedding provider seam.
693
-
694
- `contracts.gatewayMethodDispatch` currently accepts
695
- `"authenticated-request"`. It is an API hygiene gate for native plugin HTTP
696
- routes that intentionally dispatch Gateway control-plane methods in-process, not
697
- a sandbox against malicious native plugins. Use it only for tightly reviewed
698
- bundled/operator surfaces that already require Gateway HTTP auth.
699
-
700
- ## mediaUnderstandingProviderMetadata reference
701
-
702
- Use `mediaUnderstandingProviderMetadata` when a media-understanding provider has
703
- default models, auto-auth fallback priority, or native document support that
704
- generic core helpers need before runtime loads. Keys must also be declared in
705
- `contracts.mediaUnderstandingProviders`.
706
-
707
- ```json
708
- {
709
- "contracts": {
710
- "mediaUnderstandingProviders": ["example"]
711
- },
712
- "mediaUnderstandingProviderMetadata": {
713
- "example": {
714
- "capabilities": ["image", "audio"],
715
- "defaultModels": {
716
- "image": "example-vision-latest",
717
- "audio": "example-transcribe-latest"
718
- },
719
- "autoPriority": {
720
- "image": 40
721
- },
722
- "nativeDocumentInputs": ["pdf"]
723
- }
724
- }
725
- }
726
- ```
727
-
728
- Each provider entry can include:
729
-
730
- | Field | Type | What it means |
731
- | ---------------------- | ----------------------------------- | ---------------------------------------------------------------------------- |
732
- | `capabilities` | `("image" \| "audio" \| "video")[]` | Media capabilities exposed by this provider. |
733
- | `defaultModels` | `Record<string, string>` | Capability-to-model defaults used when config does not specify a model. |
734
- | `autoPriority` | `Record<string, number>` | Lower numbers sort earlier for automatic credential-based provider fallback. |
735
- | `nativeDocumentInputs` | `"pdf"[]` | Native document inputs supported by the provider. |
736
-
737
- ## channelConfigs reference
738
-
739
- Use `channelConfigs` when a channel plugin needs cheap config metadata before
740
- runtime loads. Read-only channel setup/status discovery can use this metadata
741
- directly for configured external channels when no setup entry is available, or
742
- when `setup.requiresRuntime: false` declares setup runtime unnecessary.
743
-
744
- `channelConfigs` is plugin manifest metadata, not a new top-level user config
745
- section. Users still configure channel instances under `channels.<channel-id>`.
746
- FengMing reads manifest metadata to decide which plugin owns that configured
747
- channel before plugin runtime code executes.
748
-
749
- For a channel plugin, `configSchema` and `channelConfigs` describe different
750
- paths:
751
-
752
- - `configSchema` validates `plugins.entries.<plugin-id>.config`
753
- - `channelConfigs.<channel-id>.schema` validates `channels.<channel-id>`
754
-
755
- Non-bundled plugins that declare `channels[]` should also declare matching
756
- `channelConfigs` entries. Without them, FengMing can still load the plugin, but
757
- cold-path config schema, setup, and Control UI surfaces cannot know the
758
- channel-owned option shape until plugin runtime executes.
759
-
760
- `channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled` and
761
- `nativeSkillsAutoEnabled` can declare static `auto` defaults for command config
762
- checks that run before channel runtime loads. Bundled channels can also publish
763
- the same defaults through `package.json#fengming.channel.commands` alongside
764
- their other package-owned channel catalog metadata.
765
-
766
- ```json
767
- {
768
- "channelConfigs": {
769
- "matrix": {
770
- "schema": {
771
- "type": "object",
772
- "additionalProperties": false,
773
- "properties": {
774
- "homeserverUrl": { "type": "string" }
775
- }
776
- },
777
- "uiHints": {
778
- "homeserverUrl": {
779
- "label": "Homeserver URL",
780
- "placeholder": "https://matrix.example.com"
781
- }
782
- },
783
- "label": "Matrix",
784
- "description": "Matrix homeserver connection",
785
- "commands": {
786
- "nativeCommandsAutoEnabled": true,
787
- "nativeSkillsAutoEnabled": true
788
- },
789
- "preferOver": ["matrix-legacy"]
790
- }
791
- }
792
- }
793
- ```
794
-
795
- Each channel entry can include:
796
-
797
- | Field | Type | What it means |
798
- | ------------- | ------------------------ | ----------------------------------------------------------------------------------------- |
799
- | `schema` | `object` | JSON Schema for `channels.<id>`. Required for each declared channel config entry. |
800
- | `uiHints` | `Record<string, object>` | Optional UI labels/placeholders/sensitive hints for that channel config section. |
801
- | `label` | `string` | Channel label merged into picker and inspect surfaces when runtime metadata is not ready. |
802
- | `description` | `string` | Short channel description for inspect and catalog surfaces. |
803
- | `commands` | `object` | Static native command and native skill auto-defaults for pre-runtime config checks. |
804
- | `preferOver` | `string[]` | Legacy or lower-priority plugin ids this channel should outrank in selection surfaces. |
805
-
806
- ### Replacing another channel plugin
807
-
808
- Use `preferOver` when your plugin is the preferred owner for a channel id that
809
- another plugin can also provide. Common cases are a renamed plugin id, a
810
- standalone plugin that supersedes a bundled plugin, or a maintained fork that
811
- keeps the same channel id for config compatibility.
812
-
813
- ```json
814
- {
815
- "id": "acme-chat",
816
- "channels": ["chat"],
817
- "channelConfigs": {
818
- "chat": {
819
- "schema": {
820
- "type": "object",
821
- "additionalProperties": false,
822
- "properties": {
823
- "webhookUrl": { "type": "string" }
824
- }
825
- },
826
- "preferOver": ["chat"]
827
- }
828
- }
829
- }
830
- ```
831
-
832
- When `channels.chat` is configured, FengMing considers both the channel id and
833
- the preferred plugin id. If the lower-priority plugin was only selected because
834
- it is bundled or enabled by default, FengMing disables it in the effective
835
- runtime config so one plugin owns the channel and its tools. Explicit user
836
- selection still wins: if the user explicitly enables both plugins, FengMing
837
- preserves that choice and reports duplicate channel/tool diagnostics instead of
838
- silently changing the requested plugin set.
839
-
840
- Keep `preferOver` scoped to plugin ids that can really provide the same channel.
841
- It is not a general priority field and it does not rename user config keys.
842
-
843
- ## modelSupport reference
844
-
845
- Use `modelSupport` when FengMing should infer your provider plugin from
846
- shorthand model ids like `gpt-5.5` or `claude-sonnet-4.6` before plugin runtime
847
- loads.
848
-
849
- ```json
850
- {
851
- "modelSupport": {
852
- "modelPrefixes": ["gpt-", "o1", "o3", "o4"],
853
- "modelPatterns": ["^computer-use-preview"]
854
- }
855
- }
856
- ```
857
-
858
- FengMing applies this precedence:
859
-
860
- - explicit `provider/model` refs use the owning `providers` manifest metadata
861
- - `modelPatterns` beat `modelPrefixes`
862
- - if one non-bundled plugin and one bundled plugin both match, the non-bundled
863
- plugin wins
864
- - remaining ambiguity is ignored until the user or config specifies a provider
865
-
866
- Fields:
867
-
868
- | Field | Type | What it means |
869
- | --------------- | ---------- | ------------------------------------------------------------------------------- |
870
- | `modelPrefixes` | `string[]` | Prefixes matched with `startsWith` against shorthand model ids. |
871
- | `modelPatterns` | `string[]` | Regex sources matched against shorthand model ids after profile suffix removal. |
872
-
873
- `modelPatterns` entries are compiled through `compileSafeRegex`, which rejects
874
- patterns containing nested repetition (for example `(a+)+$`). Patterns that fail
875
- the safety check are silently skipped, the same as syntactically invalid regex.
876
- Keep patterns simple and avoid nested quantifiers.
877
-
878
- ## modelCatalog reference
879
-
880
- Use `modelCatalog` when FengMing should know provider model metadata before
881
- loading plugin runtime. This is the manifest-owned source for fixed catalog
882
- rows, provider aliases, suppression rules, and discovery mode. Runtime refresh
883
- still belongs in provider runtime code, but the manifest tells core when runtime
884
- is required.
885
-
886
- ```json
887
- {
888
- "providers": ["openai"],
889
- "modelCatalog": {
890
- "providers": {
891
- "openai": {
892
- "baseUrl": "https://api.openai.com/v1",
893
- "api": "openai-responses",
894
- "models": [
895
- {
896
- "id": "gpt-5.4",
897
- "name": "GPT-5.4",
898
- "input": ["text", "image"],
899
- "reasoning": true,
900
- "contextWindow": 256000,
901
- "maxTokens": 128000,
902
- "cost": {
903
- "input": 1.25,
904
- "output": 10,
905
- "cacheRead": 0.125
906
- },
907
- "status": "available",
908
- "tags": ["default"]
909
- }
910
- ]
911
- }
912
- },
913
- "aliases": {
914
- "azure-openai-responses": {
915
- "provider": "openai",
916
- "api": "azure-openai-responses"
917
- }
918
- },
919
- "suppressions": [
920
- {
921
- "provider": "azure-openai-responses",
922
- "model": "gpt-5.3-codex-spark",
923
- "reason": "not available on Azure OpenAI Responses"
924
- }
925
- ],
926
- "discovery": {
927
- "openai": "static"
928
- }
929
- }
930
- }
931
- ```
932
-
933
- Top-level fields:
934
-
935
- | Field | Type | What it means |
936
- | ---------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
937
- | `providers` | `Record<string, object>` | Catalog rows for provider ids owned by this plugin. Keys should also appear in top-level `providers`. |
938
- | `aliases` | `Record<string, object>` | Provider aliases that should resolve to an owned provider for catalog or suppression planning. |
939
- | `suppressions` | `object[]` | Model rows from another source that this plugin suppresses for a provider-specific reason. |
940
- | `discovery` | `Record<string, "static" \| "refreshable" \| "runtime">` | Whether the provider catalog can be read from manifest metadata, refreshed into cache, or requires runtime. |
941
- | `runtimeAugment` | `boolean` | Set to `true` only when the provider runtime must append catalog rows after manifest/config planning. |
942
-
943
- `aliases` participates in provider ownership lookup for model-catalog planning.
944
- Alias targets must be top-level providers owned by the same plugin. When a
945
- provider-filtered list uses an alias, FengMing can read the owning manifest and
946
- apply alias API/base URL overrides without loading provider runtime.
947
- Aliases do not expand unfiltered catalog listings; broad lists emit the owning
948
- canonical provider rows only.
949
-
950
- `suppressions` replaces the old provider runtime `suppressBuiltInModel` hook.
951
- Suppression entries are honored only when the provider is owned by the plugin or
952
- declared as a `modelCatalog.aliases` key that targets an owned provider. Runtime
953
- suppression hooks are no longer called during model resolution.
954
-
955
- Provider fields:
956
-
957
- | Field | Type | What it means |
958
- | --------- | ------------------------ | ----------------------------------------------------------------- |
959
- | `baseUrl` | `string` | Optional default base URL for models in this provider catalog. |
960
- | `api` | `ModelApi` | Optional default API adapter for models in this provider catalog. |
961
- | `headers` | `Record<string, string>` | Optional static headers that apply to this provider catalog. |
962
- | `models` | `object[]` | Required model rows. Rows without an `id` are ignored. |
963
-
964
- Model fields:
965
-
966
- | Field | Type | What it means |
967
- | --------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------- |
968
- | `id` | `string` | Provider-local model id, without the `provider/` prefix. |
969
- | `name` | `string` | Optional display name. |
970
- | `api` | `ModelApi` | Optional per-model API override. |
971
- | `baseUrl` | `string` | Optional per-model base URL override. |
972
- | `headers` | `Record<string, string>` | Optional per-model static headers. |
973
- | `input` | `Array<"text" \| "image" \| "document" \| "audio" \| "video">` | Modalities the model accepts. |
974
- | `reasoning` | `boolean` | Whether the model exposes reasoning behavior. |
975
- | `contextWindow` | `number` | Native provider context window. |
976
- | `contextTokens` | `number` | Optional effective runtime context cap when different from `contextWindow`. |
977
- | `maxTokens` | `number` | Maximum output tokens when known. |
978
- | `cost` | `object` | Optional USD per million token pricing, including optional `tieredPricing`. |
979
- | `compat` | `object` | Optional compatibility flags matching FengMing model config compatibility. |
980
- | `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | Listing status. Suppress only when the row must not appear at all. |
981
- | `statusReason` | `string` | Optional reason shown with non-available status. |
982
- | `replaces` | `string[]` | Older provider-local model ids this model supersedes. |
983
- | `replacedBy` | `string` | Replacement provider-local model id for deprecated rows. |
984
- | `tags` | `string[]` | Stable tags used by pickers and filters. |
985
-
986
- Suppression fields:
987
-
988
- | Field | Type | What it means |
989
- | -------------------------- | ---------- | --------------------------------------------------------------------------------------------------------- |
990
- | `provider` | `string` | Provider id for the upstream row to suppress. Must be owned by this plugin or declared as an owned alias. |
991
- | `model` | `string` | Provider-local model id to suppress. |
992
- | `reason` | `string` | Optional message shown when the suppressed row is requested directly. |
993
- | `when.baseUrlHosts` | `string[]` | Optional list of effective provider base URL hosts required before the suppression applies. |
994
- | `when.providerConfigApiIn` | `string[]` | Optional list of exact provider-config `api` values required before the suppression applies. |
995
-
996
- Do not put runtime-only data in `modelCatalog`. Use `static` only when manifest
997
- rows are complete enough for provider-filtered list and picker surfaces to skip
998
- registry/runtime discovery. Use `refreshable` when manifest rows are useful
999
- listable seeds or supplements but a refresh/cache can add more rows later;
1000
- refreshable rows are not authoritative by themselves. Use `runtime` when FengMing
1001
- must load provider runtime to know the list.
1002
-
1003
- ## modelIdNormalization reference
1004
-
1005
- Use `modelIdNormalization` for cheap provider-owned model-id cleanup that must
1006
- happen before provider runtime loads. This keeps aliases such as short model
1007
- names, provider-local legacy ids, and proxy prefix rules in the owning plugin
1008
- manifest instead of in core model-selection tables.
1009
-
1010
- ```json
1011
- {
1012
- "providers": ["anthropic", "openrouter"],
1013
- "modelIdNormalization": {
1014
- "providers": {
1015
- "anthropic": {
1016
- "aliases": {
1017
- "sonnet-4.6": "claude-sonnet-4-6"
1018
- }
1019
- },
1020
- "openrouter": {
1021
- "prefixWhenBare": "openrouter"
1022
- }
1023
- }
1024
- }
1025
- }
1026
- ```
1027
-
1028
- Provider fields:
1029
-
1030
- | Field | Type | What it means |
1031
- | ------------------------------------ | ----------------------- | ----------------------------------------------------------------------------------------- |
1032
- | `aliases` | `Record<string,string>` | Case-insensitive exact model-id aliases. Values are returned as written. |
1033
- | `stripPrefixes` | `string[]` | Prefixes to remove before alias lookup, useful for legacy provider/model duplication. |
1034
- | `prefixWhenBare` | `string` | Prefix to add when the normalized model id does not already contain `/`. |
1035
- | `prefixWhenBareAfterAliasStartsWith` | `object[]` | Conditional bare-id prefix rules after alias lookup, keyed by `modelPrefix` and `prefix`. |
1036
-
1037
- ## providerEndpoints reference
1038
-
1039
- Use `providerEndpoints` for endpoint classification that generic request policy
1040
- must know before provider runtime loads. Core still owns the meaning of each
1041
- `endpointClass`; plugin manifests own the host and base URL metadata.
1042
-
1043
- Endpoint fields:
1044
-
1045
- | Field | Type | What it means |
1046
- | ------------------------------ | ---------- | ---------------------------------------------------------------------------------------------- |
1047
- | `endpointClass` | `string` | Known core endpoint class, such as `openrouter`, `moonshot-native`, or `google-vertex`. |
1048
- | `hosts` | `string[]` | Exact hostnames that map to the endpoint class. |
1049
- | `hostSuffixes` | `string[]` | Host suffixes that map to the endpoint class. Prefix with `.` for domain suffix-only matching. |
1050
- | `baseUrls` | `string[]` | Exact normalized HTTP(S) base URLs that map to the endpoint class. |
1051
- | `googleVertexRegion` | `string` | Static Google Vertex region for exact global hosts. |
1052
- | `googleVertexRegionHostSuffix` | `string` | Suffix to strip from matching hosts to expose the Google Vertex region prefix. |
1053
-
1054
- ## providerRequest reference
1055
-
1056
- Use `providerRequest` for cheap request-compatibility metadata that generic
1057
- request policy needs without loading provider runtime. Keep behavior-specific
1058
- payload rewriting in provider runtime hooks or shared provider-family helpers.
1059
-
1060
- ```json
1061
- {
1062
- "providers": ["vllm"],
1063
- "providerRequest": {
1064
- "providers": {
1065
- "vllm": {
1066
- "family": "vllm",
1067
- "openAICompletions": {
1068
- "supportsStreamingUsage": true
1069
- }
1070
- }
1071
- }
1072
- }
1073
- }
1074
- ```
1075
-
1076
- Provider fields:
1077
-
1078
- | Field | Type | What it means |
1079
- | --------------------- | ------------ | -------------------------------------------------------------------------------------- |
1080
- | `family` | `string` | Provider family label used by generic request compatibility decisions and diagnostics. |
1081
- | `compatibilityFamily` | `"moonshot"` | Optional provider-family compatibility bucket for shared request helpers. |
1082
- | `openAICompletions` | `object` | OpenAI-compatible completions request flags, currently `supportsStreamingUsage`. |
1083
-
1084
- ## secretProviderIntegrations reference
1085
-
1086
- Use `secretProviderIntegrations` when a plugin can publish a reusable SecretRef
1087
- exec provider preset. FengMing reads this metadata before plugin runtime loads,
1088
- stores plugin ownership in `secrets.providers.<alias>.pluginIntegration`, and
1089
- leaves actual secret resolution to the SecretRef runtime.
1090
- Presets are exposed only for bundled plugins and installed plugins discovered
1091
- from the managed plugin install roots, such as git and ClawHub installs.
1092
-
1093
- ```json
1094
- {
1095
- "secretProviderIntegrations": {
1096
- "secret-store": {
1097
- "providerAlias": "team-secrets",
1098
- "displayName": "Team secrets",
1099
- "source": "exec",
1100
- "command": "${node}",
1101
- "args": ["./bin/resolve-secrets.mjs"]
1102
- }
1103
- }
1104
- }
1105
- ```
1106
-
1107
- The map key is the integration id. If `providerAlias` is omitted, FengMing uses
1108
- the integration id as the SecretRef provider alias. Provider aliases must match
1109
- the normal SecretRef provider alias pattern, for example `team-secrets` or
1110
- `onepassword-work`.
1111
-
1112
- When an operator selects the preset, FengMing writes a provider reference like:
1113
-
1114
- ```json
1115
- {
1116
- "secrets": {
1117
- "providers": {
1118
- "team-secrets": {
1119
- "source": "exec",
1120
- "pluginIntegration": {
1121
- "pluginId": "acme-secrets",
1122
- "integrationId": "secret-store"
1123
- }
1124
- }
1125
- }
1126
- }
1127
- }
1128
- ```
1129
-
1130
- At startup/reload, FengMing resolves that provider by loading current plugin
1131
- manifest metadata, checking that the owning plugin is installed and active, and
1132
- materializing the exec command from the manifest. Disabling or removing the
1133
- plugin revokes the provider for active SecretRefs. Operators who want standalone
1134
- exec configuration can still write manual `command`/`args` providers directly.
1135
-
1136
- Only `source: "exec"` presets are currently supported. `command` must be
1137
- `${node}`, and `args[0]` must be a `./` plugin-root-relative resolver script.
1138
- FengMing materializes it at startup/reload to the current Node executable and
1139
- the absolute in-plugin script path. Node options such as `--require`, `--import`,
1140
- `--loader`, `--env-file`, `--eval`, and `--print` are not part of the manifest
1141
- preset contract. Operators who need non-Node commands can configure standalone
1142
- manual exec providers directly.
1143
-
1144
- FengMing derives `trustedDirs` for manifest presets from the plugin root and,
1145
- for `${node}` presets, the current Node executable directory. Manifest-authored
1146
- `trustedDirs` are ignored. Other exec provider options such as `timeoutMs`,
1147
- `maxOutputBytes`, `jsonOnly`, `env`, `passEnv`, and `allowInsecurePath` pass
1148
- through to the normal SecretRef exec provider config.
1149
-
1150
- ## modelPricing reference
1151
-
1152
- Use `modelPricing` when a provider needs control-plane pricing behavior before
1153
- runtime loads. The Gateway pricing cache reads this metadata without importing
1154
- provider runtime code.
1155
-
1156
- ```json
1157
- {
1158
- "providers": ["ollama", "openrouter"],
1159
- "modelPricing": {
1160
- "providers": {
1161
- "ollama": {
1162
- "external": false
1163
- },
1164
- "openrouter": {
1165
- "openRouter": {
1166
- "passthroughProviderModel": true
1167
- },
1168
- "liteLLM": false
1169
- }
1170
- }
1171
- }
1172
- }
1173
- ```
1174
-
1175
- Provider fields:
1176
-
1177
- | Field | Type | What it means |
1178
- | ------------ | ----------------- | -------------------------------------------------------------------------------------------------- |
1179
- | `external` | `boolean` | Set `false` for local/self-hosted providers that should never fetch OpenRouter or LiteLLM pricing. |
1180
- | `openRouter` | `false \| object` | OpenRouter pricing lookup mapping. `false` disables OpenRouter lookup for this provider. |
1181
- | `liteLLM` | `false \| object` | LiteLLM pricing lookup mapping. `false` disables LiteLLM lookup for this provider. |
1182
-
1183
- Source fields:
1184
-
1185
- | Field | Type | What it means |
1186
- | -------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------- |
1187
- | `provider` | `string` | External catalog provider id when it differs from the FengMing provider id, for example `z-ai` for a `zai` provider. |
1188
- | `passthroughProviderModel` | `boolean` | Treat slash-containing model ids as nested provider/model refs, useful for proxy providers such as OpenRouter. |
1189
- | `modelIdTransforms` | `"version-dots"[]` | Extra external catalog model-id variants. `version-dots` tries dotted version ids like `claude-opus-4.6`. |
1190
-
1191
- ### FengMing Provider Index
1192
-
1193
- The FengMing Provider Index is FengMing-owned preview metadata for providers
1194
- whose plugins may not be installed yet. It is not part of a plugin manifest.
1195
- Plugin manifests remain the installed-plugin authority. The Provider Index is
1196
- the internal fallback contract that future installable-provider and pre-install
1197
- model picker surfaces will consume when a provider plugin is not installed.
1198
-
1199
- Catalog authority order:
1200
-
1201
- 1. User config.
1202
- 2. Installed plugin manifest `modelCatalog`.
1203
- 3. Model catalog cache from explicit refresh.
1204
- 4. FengMing Provider Index preview rows.
1205
-
1206
- The Provider Index must not contain secrets, enabled state, runtime hooks, or
1207
- live account-specific model data. Its preview catalogs use the same
1208
- `modelCatalog` provider row shape as plugin manifests, but should stay limited
1209
- to stable display metadata unless runtime adapter fields such as `api`,
1210
- `baseUrl`, pricing, or compatibility flags are intentionally kept aligned with
1211
- the installed plugin manifest. Providers with live `/models` discovery should
1212
- write refreshed rows through the explicit model catalog cache path instead of
1213
- making normal listing or onboarding call provider APIs.
1214
-
1215
- Provider Index entries may also carry installable-plugin metadata for providers
1216
- whose plugin has moved out of core or is otherwise not installed yet. This
1217
- metadata mirrors the channel catalog pattern: package name, npm install spec,
1218
- expected integrity, and cheap auth-choice labels are enough to show an
1219
- installable setup option. Once the plugin is installed, its manifest wins and
1220
- the Provider Index entry is ignored for that provider.
1221
-
1222
- Legacy top-level capability keys are deprecated. Use `fengming doctor --fix` to
1223
- move `speechProviders`, `realtimeTranscriptionProviders`,
1224
- `realtimeVoiceProviders`, `mediaUnderstandingProviders`,
1225
- `imageGenerationProviders`, `videoGenerationProviders`,
1226
- `webFetchProviders`, and `webSearchProviders` under `contracts`; normal
1227
- manifest loading no longer treats those top-level fields as capability
1228
- ownership.
1229
-
1230
- ## Manifest versus package.json
1231
-
1232
- The two files serve different jobs:
1233
-
1234
- | File | Use it for |
1235
- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
1236
- | `fengming.plugin.json` | Discovery, config validation, auth-choice metadata, and UI hints that must exist before plugin code runs |
1237
- | `package.json` | npm metadata, dependency installation, and the `fengming` block used for entrypoints, install gating, setup, or catalog metadata |
1238
-
1239
- If you are unsure where a piece of metadata belongs, use this rule:
1240
-
1241
- - if FengMing must know it before loading plugin code, put it in `fengming.plugin.json`
1242
- - if it is about packaging, entry files, or npm install behavior, put it in `package.json`
1243
-
1244
- ### package.json fields that affect discovery
1245
-
1246
- Some pre-runtime plugin metadata intentionally lives in `package.json` under the
1247
- `fengming` block instead of `fengming.plugin.json`.
1248
- `fengming.bundle` and `fengming.bundle.json` are not FengMing plugin contracts;
1249
- native plugins must use `fengming.plugin.json` plus the supported
1250
- `package.json#fengming` fields below.
1251
-
1252
- Important examples:
1253
-
1254
- | Field | What it means |
1255
- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1256
- | `fengming.extensions` | Declares native plugin entrypoints. Must stay inside the plugin package directory. |
1257
- | `fengming.runtimeExtensions` | Declares built JavaScript runtime entrypoints for installed packages. Must stay inside the plugin package directory. |
1258
- | `fengming.setupEntry` | Lightweight setup-only entrypoint used during onboarding, deferred channel startup, and read-only channel status/SecretRef discovery. Must stay inside the plugin package directory. |
1259
- | `fengming.runtimeSetupEntry` | Declares the built JavaScript setup entrypoint for installed packages. Requires `setupEntry`, must exist, and must stay inside the plugin package directory. |
1260
- | `fengming.channel` | Cheap channel catalog metadata like labels, docs paths, aliases, and selection copy. |
1261
- | `fengming.channel.commands` | Static native command and native skill auto-default metadata used by config, audit, and command-list surfaces before channel runtime loads. |
1262
- | `fengming.channel.configuredState` | Lightweight configured-state checker metadata that can answer "does env-only setup already exist?" without loading the full channel runtime. |
1263
- | `fengming.channel.persistedAuthState` | Lightweight persisted-auth checker metadata that can answer "is anything already signed in?" without loading the full channel runtime. |
1264
- | `fengming.install.clawhubSpec` / `fengming.install.npmSpec` / `fengming.install.localPath` | Install/update hints for bundled and externally published plugins. |
1265
- | `fengming.install.defaultChoice` | Preferred install path when multiple install sources are available. |
1266
- | `fengming.install.minHostVersion` | Minimum supported FengMing host version, using a semver floor like `>=2026.3.22` or `>=2026.5.1-beta.1`. |
1267
- | `fengming.compat.pluginApi` | Minimum FengMing plugin API range required by this package, using a semver floor like `>=2026.5.27`. |
1268
- | `fengming.install.expectedIntegrity` | Expected npm dist integrity string such as `sha512-...`; install and update flows verify the fetched artifact against it. |
1269
- | `fengming.install.allowInvalidConfigRecovery` | Allows a narrow bundled-plugin reinstall recovery path when config is invalid. |
1270
- | `fengming.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Lets setup-runtime channel surfaces load before listen, then defers the full configured channel plugin until post-listen activation. |
1271
-
1272
- Manifest metadata decides which provider/channel/setup choices appear in
1273
- onboarding before runtime loads. `package.json#fengming.install` tells
1274
- onboarding how to fetch or enable that plugin when the user picks one of those
1275
- choices. Do not move install hints into `fengming.plugin.json`.
1276
-
1277
- `fengming.install.minHostVersion` is enforced during install and manifest
1278
- registry loading for non-bundled plugin sources. Invalid values are rejected;
1279
- newer-but-valid values skip external plugins on older hosts. Bundled source
1280
- plugins are assumed to be co-versioned with the host checkout.
1281
-
1282
- `fengming.compat.pluginApi` is enforced during package install for non-bundled
1283
- plugin sources. Use it for the FengMing plugin SDK/runtime API floor that the
1284
- package was built against. It can be stricter than `minHostVersion` when a
1285
- plugin package needs a newer API but still keeps a lower install hint for other
1286
- flows. Official FengMing release sync bumps existing official plugin API floors
1287
- to the FengMing release version by default, but plugin-only releases can keep a
1288
- lower floor when the package intentionally supports older hosts. Do not use the
1289
- package version alone as the compatibility contract. `peerDependencies.fengming`
1290
- remains npm package metadata; FengMing uses the `fengming.compat.pluginApi`
1291
- contract for install compatibility decisions.
1292
-
1293
- Official install-on-demand metadata should use `clawhubSpec` when the plugin is
1294
- published on ClawHub; onboarding treats that as the preferred remote source and
1295
- records ClawHub artifact facts after install. `npmSpec` remains the compatibility
1296
- fallback for packages that have not moved to ClawHub yet.
1297
-
1298
- Exact npm version pinning already lives in `npmSpec`, for example
1299
- `"npmSpec": "@wecom/wecom-fengming-plugin@1.2.3"`. Official external catalog
1300
- entries should pair exact specs with `expectedIntegrity` so update flows fail
1301
- closed if the fetched npm artifact no longer matches the pinned release.
1302
- Interactive onboarding still offers trusted registry npm specs, including bare
1303
- package names and dist-tags, for compatibility. Catalog diagnostics can
1304
- distinguish exact, floating, integrity-pinned, missing-integrity, package-name
1305
- mismatch, and invalid default-choice sources. They also warn when
1306
- `expectedIntegrity` is present but there is no valid npm source it can pin.
1307
- When `expectedIntegrity` is present,
1308
- install/update flows enforce it; when it is omitted, the registry resolution is
1309
- recorded without an integrity pin.
1310
-
1311
- Channel plugins should provide `fengming.setupEntry` when status, channel list,
1312
- or SecretRef scans need to identify configured accounts without loading the full
1313
- runtime. The setup entry should expose channel metadata plus setup-safe config,
1314
- status, and secrets adapters; keep network clients, gateway listeners, and
1315
- transport runtimes in the main extension entrypoint.
1316
-
1317
- Runtime entrypoint fields do not override package-boundary checks for source
1318
- entrypoint fields. For example, `fengming.runtimeExtensions` cannot make an
1319
- escaping `fengming.extensions` path loadable.
1320
-
1321
- `fengming.install.allowInvalidConfigRecovery` is intentionally narrow. It does
1322
- not make arbitrary broken configs installable. Today it only allows install
1323
- flows to recover from specific stale bundled-plugin upgrade failures, such as a
1324
- missing bundled plugin path or a stale `channels.<id>` entry for that same
1325
- bundled plugin. Unrelated config errors still block install and send operators
1326
- to `fengming doctor --fix`.
1327
-
1328
- `fengming.channel.persistedAuthState` is package metadata for a tiny checker
1329
- module:
1330
-
1331
- ```json
1332
- {
1333
- "fengming": {
1334
- "channel": {
1335
- "id": "whatsapp",
1336
- "persistedAuthState": {
1337
- "specifier": "./auth-presence",
1338
- "exportName": "hasAnyWhatsAppAuth"
1339
- }
1340
- }
1341
- }
1342
- }
1343
- ```
1344
-
1345
- Use it when setup, doctor, status, or read-only presence flows need a cheap
1346
- yes/no auth probe before the full channel plugin loads. Persisted auth state is
1347
- not configured channel state: do not use this metadata to auto-enable plugins,
1348
- repair runtime dependencies, or decide whether a channel runtime should load.
1349
- The target export should be a small function that reads persisted state only; do
1350
- not route it through the full channel runtime barrel.
1351
-
1352
- `fengming.channel.configuredState` follows the same shape for cheap env-only
1353
- configured checks:
1354
-
1355
- ```json
1356
- {
1357
- "fengming": {
1358
- "channel": {
1359
- "id": "telegram",
1360
- "configuredState": {
1361
- "specifier": "./configured-state",
1362
- "exportName": "hasTelegramConfiguredState"
1363
- }
1364
- }
1365
- }
1366
- }
1367
- ```
1368
-
1369
- Use it when a channel can answer configured-state from env or other tiny
1370
- non-runtime inputs. If the check needs full config resolution or the real
1371
- channel runtime, keep that logic in the plugin `config.hasConfiguredState`
1372
- hook instead.
1373
-
1374
- ## Discovery precedence (duplicate plugin ids)
1375
-
1376
- FengMing discovers plugins from several roots. For the raw filesystem scan
1377
- order, see [Plugin scan
1378
- order](/gateway/configuration-reference#plugin-scan-order). If two discoveries
1379
- share the same `id`, only the **highest-precedence** manifest is kept;
1380
- lower-precedence duplicates are dropped instead of loading beside it.
1381
-
1382
- Precedence, highest to lowest:
1383
-
1384
- 1. **Config-selected** — a path explicitly pinned in `plugins.entries.<id>`
1385
- 2. **Bundled** — plugins shipped with FengMing
1386
- 3. **Global install** — plugins installed into the global FengMing plugin root
1387
- 4. **Workspace** — plugins discovered relative to the current workspace
1388
-
1389
- Implications:
1390
-
1391
- - A forked or stale copy of a bundled plugin sitting in the workspace will not shadow the bundled build.
1392
- - To actually override a bundled plugin with a local one, pin it via `plugins.entries.<id>` so it wins by precedence rather than relying on workspace discovery.
1393
- - Duplicate drops are logged so Doctor and startup diagnostics can point at the discarded copy.
1394
- - Config-selected duplicate overrides are worded as explicit overrides in diagnostics, but still warn so stale forks and accidental shadows stay visible.
1395
-
1396
- ## JSON Schema requirements
1397
-
1398
- - **Every plugin must ship a JSON Schema**, even if it accepts no config.
1399
- - An empty schema is acceptable (for example, `{ "type": "object", "additionalProperties": false }`).
1400
- - Schemas are validated at config read/write time, not at runtime.
1401
- - When extending or forking a bundled plugin with new config keys, update that plugin's `fengming.plugin.json` `configSchema` at the same time. Bundled plugin schemas are strict, so adding `plugins.entries.<id>.config.myNewKey` in user config without adding `myNewKey` to `configSchema.properties` will be rejected before the plugin runtime loads.
1402
-
1403
- Example schema extension:
1404
-
1405
- ```json
1406
- {
1407
- "configSchema": {
1408
- "type": "object",
1409
- "additionalProperties": false,
1410
- "properties": {
1411
- "myNewKey": {
1412
- "type": "string"
1413
- }
1414
- }
1415
- }
1416
- }
1417
- ```
1418
-
1419
- ## Validation behavior
1420
-
1421
- - Unknown `channels.*` keys are **errors**, unless the channel id is declared by
1422
- a plugin manifest.
1423
- - `plugins.entries.<id>`, `plugins.allow`, `plugins.deny`, and `plugins.slots.*`
1424
- must reference **discoverable** plugin ids. Unknown ids are **errors**.
1425
- - If a plugin is installed but has a broken or missing manifest or schema,
1426
- validation fails and Doctor reports the plugin error.
1427
- - If plugin config exists but the plugin is **disabled**, the config is kept and
1428
- a **warning** is surfaced in Doctor + logs.
1429
-
1430
- See [Configuration reference](/gateway/configuration) for the full `plugins.*` schema.
1431
-
1432
- ## Notes
1433
-
1434
- - The manifest is **required for native FengMing plugins**, including local filesystem loads. Runtime still loads the plugin module separately; the manifest is only for discovery + validation.
1435
- - Native manifests are parsed with JSON5, so comments, trailing commas, and unquoted keys are accepted as long as the final value is still an object.
1436
- - Only documented manifest fields are read by the manifest loader. Avoid custom top-level keys.
1437
- - `channels`, `providers`, `cliBackends`, and `skills` can all be omitted when a plugin does not need them.
1438
- - `providerCatalogEntry` must stay lightweight and should not import broad runtime code; use it for static provider catalog metadata or narrow discovery descriptors, not request-time execution.
1439
- - Exclusive plugin kinds are selected through `plugins.slots.*`: `kind: "memory"` via `plugins.slots.memory`, `kind: "context-engine"` via `plugins.slots.contextEngine` (default `legacy`).
1440
- - Declare exclusive plugin kind in this manifest. Runtime-entry `FengMingPluginDefinition.kind` is deprecated and remains only as a compatibility fallback for older plugins.
1441
- - Env-var metadata (`setup.providers[].envVars`, deprecated `providerAuthEnvVars`, and `channelEnvVars`) is declarative only. Status, audit, cron delivery validation, and other read-only surfaces still apply plugin trust and effective activation policy before treating an env var as configured.
1442
- - For runtime wizard metadata that requires provider code, see [Provider runtime hooks](/plugins/architecture-internals#provider-runtime-hooks).
1443
- - If your plugin depends on native modules, document the build steps and any package-manager allowlist requirements (for example, pnpm `allow-build-scripts` + `pnpm rebuild <package>`).
1444
-
1445
- ## Related
1446
-
1447
- <CardGroup cols={3}>
1448
- <Card title="Building plugins" href="/plugins/building-plugins" icon="rocket">
1449
- Getting started with plugins.
1450
- </Card>
1451
- <Card title="Plugin architecture" href="/plugins/architecture" icon="diagram-project">
1452
- Internal architecture and capability model.
1453
- </Card>
1454
- <Card title="SDK overview" href="/plugins/sdk-overview" icon="book">
1455
- Plugin SDK reference and subpath imports.
1456
- </Card>
1457
- </CardGroup>