fengming 0.3.9 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/{bundled-channel-config-schema-DpdKMATU.d.ts → bundled-channel-config-schema-Bte--ZlY.d.ts} +26 -26
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/cli-startup-metadata.json +8 -8
  5. package/dist/control-ui/assets/{activity-B2W-IeAT.js → activity-wgT0-JR0.js} +2 -2
  6. package/dist/control-ui/assets/{agents-mRUyNVCz.js → agents-DG5PobrT.js} +2 -2
  7. package/dist/control-ui/assets/{channels-8QHOqBnt.js → channels-CX28oM42.js} +2 -2
  8. package/dist/control-ui/assets/{cron-H3unP_mO.js → cron-B8ixwBqU.js} +2 -2
  9. package/dist/control-ui/assets/{debug-CxLsQ9vH.js → debug-CnkYZUXy.js} +2 -2
  10. package/dist/control-ui/assets/{index-jtIYT0Eh.js → index-DQRZJKbO.js} +4 -4
  11. package/dist/control-ui/assets/{instances-B1JQeCRb.js → instances-BE3mV1JC.js} +2 -2
  12. package/dist/control-ui/assets/{nodes-RGOmq_1l.js → nodes-Cou4PWRX.js} +2 -2
  13. package/dist/control-ui/assets/{sessions-C2O-Jgpg.js → sessions-DpAaBT21.js} +2 -2
  14. package/dist/control-ui/assets/{skills-jyJOYA4I.js → skills-DjA_j_20.js} +2 -2
  15. package/dist/control-ui/assets/{workboard-uM_kK8cQ.js → workboard-BFnvbS0k.js} +2 -2
  16. package/dist/control-ui/index.html +1 -1
  17. package/dist/control-ui/sw.js +1 -1
  18. package/dist/gateway/protocol/index.d.ts +1 -1
  19. package/dist/{index-DhOQs6M_.d.ts → index-DuDY3bCZ.d.ts} +45 -45
  20. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  21. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  22. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
  23. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  24. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  25. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  26. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  27. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  28. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  29. package/dist/plugin-sdk/compat.d.ts +2 -2
  30. package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
  31. package/dist/plugin-sdk/config-schema.d.ts +4 -4
  32. package/dist/plugin-sdk/core.d.ts +1 -1
  33. package/dist/plugin-sdk/discord.d.ts +2 -2
  34. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  35. package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
  36. package/dist/{zod-schema.core-Cuz0lz6m.d.ts → zod-schema.core-BGLctDlK.d.ts} +1 -1
  37. package/package.json +7 -412
  38. package/CHANGELOG.md +0 -38
  39. package/THIRD_PARTY_NOTICES.md +0 -37
  40. package/docs/.i18n/README.md +0 -81
  41. package/docs/.i18n/ar-navigation.json +0 -18
  42. package/docs/.i18n/de-navigation.json +0 -18
  43. package/docs/.i18n/es-navigation.json +0 -18
  44. package/docs/.i18n/fr-navigation.json +0 -18
  45. package/docs/.i18n/glossary.ar.json +0 -78
  46. package/docs/.i18n/glossary.de.json +0 -78
  47. package/docs/.i18n/glossary.es.json +0 -78
  48. package/docs/.i18n/glossary.fa.json +0 -78
  49. package/docs/.i18n/glossary.fr.json +0 -78
  50. package/docs/.i18n/glossary.id.json +0 -78
  51. package/docs/.i18n/glossary.it.json +0 -78
  52. package/docs/.i18n/glossary.ja-JP.json +0 -98
  53. package/docs/.i18n/glossary.ko.json +0 -78
  54. package/docs/.i18n/glossary.nl.json +0 -78
  55. package/docs/.i18n/glossary.pl.json +0 -78
  56. package/docs/.i18n/glossary.pt-BR.json +0 -78
  57. package/docs/.i18n/glossary.th.json +0 -78
  58. package/docs/.i18n/glossary.tr.json +0 -78
  59. package/docs/.i18n/glossary.uk.json +0 -78
  60. package/docs/.i18n/glossary.vi.json +0 -78
  61. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  62. package/docs/.i18n/glossary.zh-TW.json +0 -78
  63. package/docs/.i18n/id-navigation.json +0 -18
  64. package/docs/.i18n/it-navigation.json +0 -18
  65. package/docs/.i18n/ja-navigation.json +0 -18
  66. package/docs/.i18n/ko-navigation.json +0 -18
  67. package/docs/.i18n/pl-navigation.json +0 -18
  68. package/docs/.i18n/pt-BR-navigation.json +0 -18
  69. package/docs/.i18n/tr-navigation.json +0 -18
  70. package/docs/.i18n/translation-workflow.md +0 -111
  71. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  72. package/docs/AGENTS.md +0 -36
  73. package/docs/CLAUDE.md +0 -1
  74. package/docs/agent-runtime-architecture.md +0 -48
  75. package/docs/announcements/bluebubbles-imessage.md +0 -79
  76. package/docs/auth-credential-semantics.md +0 -124
  77. package/docs/automation/auth-monitoring.md +0 -11
  78. package/docs/automation/clawflow.md +0 -12
  79. package/docs/automation/cron-jobs.md +0 -534
  80. package/docs/automation/cron-vs-heartbeat.md +0 -11
  81. package/docs/automation/gmail-pubsub.md +0 -11
  82. package/docs/automation/hooks.md +0 -387
  83. package/docs/automation/index.md +0 -135
  84. package/docs/automation/poll.md +0 -12
  85. package/docs/automation/standing-orders.md +0 -250
  86. package/docs/automation/taskflow.md +0 -155
  87. package/docs/automation/tasks.md +0 -374
  88. package/docs/automation/troubleshooting.md +0 -12
  89. package/docs/automation/webhook.md +0 -12
  90. package/docs/brave-search.md +0 -11
  91. package/docs/channels/access-groups.md +0 -201
  92. package/docs/channels/ambient-room-events.md +0 -214
  93. package/docs/channels/bot-loop-protection.md +0 -131
  94. package/docs/channels/broadcast-groups.md +0 -472
  95. package/docs/channels/channel-routing.md +0 -162
  96. package/docs/channels/clickclack.md +0 -138
  97. package/docs/channels/discord.md +0 -1758
  98. package/docs/channels/feishu.md +0 -650
  99. package/docs/channels/googlechat.md +0 -284
  100. package/docs/channels/group-messages.md +0 -95
  101. package/docs/channels/groups.md +0 -524
  102. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  103. package/docs/channels/imessage.md +0 -839
  104. package/docs/channels/index.md +0 -64
  105. package/docs/channels/irc.md +0 -253
  106. package/docs/channels/line.md +0 -243
  107. package/docs/channels/location.md +0 -71
  108. package/docs/channels/matrix-migration.md +0 -370
  109. package/docs/channels/matrix-presentation.md +0 -77
  110. package/docs/channels/matrix-push-rules.md +0 -150
  111. package/docs/channels/matrix.md +0 -921
  112. package/docs/channels/mattermost.md +0 -542
  113. package/docs/channels/msteams.md +0 -1096
  114. package/docs/channels/nextcloud-talk.md +0 -176
  115. package/docs/channels/nostr.md +0 -253
  116. package/docs/channels/pairing.md +0 -214
  117. package/docs/channels/qqbot.md +0 -314
  118. package/docs/channels/signal.md +0 -417
  119. package/docs/channels/slack.md +0 -1623
  120. package/docs/channels/synology-chat.md +0 -187
  121. package/docs/channels/telegram.md +0 -1124
  122. package/docs/channels/tlon.md +0 -296
  123. package/docs/channels/troubleshooting.md +0 -162
  124. package/docs/channels/twitch.md +0 -431
  125. package/docs/channels/wechat.md +0 -171
  126. package/docs/channels/whatsapp.md +0 -796
  127. package/docs/channels/yuanbao.md +0 -416
  128. package/docs/channels/zalo.md +0 -253
  129. package/docs/channels/zalouser.md +0 -217
  130. package/docs/ci.md +0 -657
  131. package/docs/clawhub/publishing.md +0 -96
  132. package/docs/cli/acp.md +0 -370
  133. package/docs/cli/agent.md +0 -109
  134. package/docs/cli/agents.md +0 -253
  135. package/docs/cli/approvals.md +0 -190
  136. package/docs/cli/backup.md +0 -98
  137. package/docs/cli/browser.md +0 -307
  138. package/docs/cli/channels.md +0 -154
  139. package/docs/cli/clawbot.md +0 -25
  140. package/docs/cli/commitments.md +0 -90
  141. package/docs/cli/completion.md +0 -39
  142. package/docs/cli/config.md +0 -504
  143. package/docs/cli/configure.md +0 -77
  144. package/docs/cli/crestodian.md +0 -337
  145. package/docs/cli/cron.md +0 -304
  146. package/docs/cli/daemon.md +0 -67
  147. package/docs/cli/dashboard.md +0 -33
  148. package/docs/cli/devices.md +0 -240
  149. package/docs/cli/directory.md +0 -68
  150. package/docs/cli/dns.md +0 -53
  151. package/docs/cli/docs.md +0 -63
  152. package/docs/cli/doctor.md +0 -241
  153. package/docs/cli/flows.md +0 -52
  154. package/docs/cli/gateway.md +0 -572
  155. package/docs/cli/health.md +0 -43
  156. package/docs/cli/hooks.md +0 -345
  157. package/docs/cli/index.md +0 -400
  158. package/docs/cli/infer.md +0 -364
  159. package/docs/cli/logs.md +0 -68
  160. package/docs/cli/mcp.md +0 -529
  161. package/docs/cli/memory.md +0 -183
  162. package/docs/cli/message.md +0 -317
  163. package/docs/cli/migrate.md +0 -334
  164. package/docs/cli/models.md +0 -239
  165. package/docs/cli/node.md +0 -177
  166. package/docs/cli/nodes.md +0 -76
  167. package/docs/cli/onboard.md +0 -250
  168. package/docs/cli/pairing.md +0 -77
  169. package/docs/cli/path.md +0 -511
  170. package/docs/cli/plugins.md +0 -459
  171. package/docs/cli/policy.md +0 -886
  172. package/docs/cli/proxy.md +0 -89
  173. package/docs/cli/qr.md +0 -56
  174. package/docs/cli/reset.md +0 -39
  175. package/docs/cli/sandbox.md +0 -208
  176. package/docs/cli/secrets.md +0 -202
  177. package/docs/cli/security.md +0 -136
  178. package/docs/cli/sessions.md +0 -164
  179. package/docs/cli/setup.md +0 -59
  180. package/docs/cli/skills.md +0 -122
  181. package/docs/cli/status.md +0 -45
  182. package/docs/cli/system.md +0 -89
  183. package/docs/cli/tasks.md +0 -111
  184. package/docs/cli/transcripts.md +0 -151
  185. package/docs/cli/tui.md +0 -91
  186. package/docs/cli/uninstall.md +0 -44
  187. package/docs/cli/update.md +0 -243
  188. package/docs/cli/voicecall.md +0 -204
  189. package/docs/cli/webhooks.md +0 -117
  190. package/docs/cli/wiki.md +0 -256
  191. package/docs/concepts/active-memory.md +0 -856
  192. package/docs/concepts/agent-loop.md +0 -185
  193. package/docs/concepts/agent-runtimes.md +0 -276
  194. package/docs/concepts/agent-workspace.md +0 -230
  195. package/docs/concepts/agent.md +0 -140
  196. package/docs/concepts/architecture.md +0 -154
  197. package/docs/concepts/channel-docking.md +0 -145
  198. package/docs/concepts/commitments.md +0 -150
  199. package/docs/concepts/compaction.md +0 -203
  200. package/docs/concepts/context-engine.md +0 -347
  201. package/docs/concepts/context.md +0 -199
  202. package/docs/concepts/delegate-architecture.md +0 -319
  203. package/docs/concepts/dreaming.md +0 -264
  204. package/docs/concepts/experimental-features.md +0 -109
  205. package/docs/concepts/features.md +0 -91
  206. package/docs/concepts/fengming-sdk.md +0 -323
  207. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  208. package/docs/concepts/mantis.md +0 -744
  209. package/docs/concepts/markdown-formatting.md +0 -139
  210. package/docs/concepts/memory-builtin.md +0 -148
  211. package/docs/concepts/memory-honcho.md +0 -144
  212. package/docs/concepts/memory-qmd.md +0 -271
  213. package/docs/concepts/memory-search.md +0 -167
  214. package/docs/concepts/memory.md +0 -299
  215. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  216. package/docs/concepts/messages.md +0 -214
  217. package/docs/concepts/model-failover.md +0 -384
  218. package/docs/concepts/model-providers.md +0 -719
  219. package/docs/concepts/models.md +0 -371
  220. package/docs/concepts/multi-agent.md +0 -625
  221. package/docs/concepts/oauth.md +0 -198
  222. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  223. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  224. package/docs/concepts/presence.md +0 -117
  225. package/docs/concepts/progress-drafts.md +0 -406
  226. package/docs/concepts/qa-e2e-automation.md +0 -947
  227. package/docs/concepts/qa-matrix.md +0 -139
  228. package/docs/concepts/queue-steering.md +0 -90
  229. package/docs/concepts/queue.md +0 -136
  230. package/docs/concepts/retry.md +0 -86
  231. package/docs/concepts/session-pruning.md +0 -104
  232. package/docs/concepts/session-tool.md +0 -188
  233. package/docs/concepts/session.md +0 -164
  234. package/docs/concepts/soul.md +0 -116
  235. package/docs/concepts/streaming.md +0 -257
  236. package/docs/concepts/system-prompt.md +0 -328
  237. package/docs/concepts/timezone.md +0 -47
  238. package/docs/concepts/typebox.md +0 -309
  239. package/docs/concepts/typing-indicators.md +0 -88
  240. package/docs/concepts/usage-tracking.md +0 -66
  241. package/docs/date-time.md +0 -126
  242. package/docs/debug/node-issue.md +0 -90
  243. package/docs/diagnostics/flags.md +0 -182
  244. package/docs/docs.json +0 -1862
  245. package/docs/fengming-agent-runtime.md +0 -82
  246. package/docs/gateway/authentication.md +0 -256
  247. package/docs/gateway/background-process.md +0 -147
  248. package/docs/gateway/bonjour.md +0 -303
  249. package/docs/gateway/bridge-protocol.md +0 -97
  250. package/docs/gateway/cli-backends.md +0 -439
  251. package/docs/gateway/config-agents.md +0 -1525
  252. package/docs/gateway/config-channels.md +0 -945
  253. package/docs/gateway/config-tools.md +0 -774
  254. package/docs/gateway/configuration-examples.md +0 -704
  255. package/docs/gateway/configuration-reference.md +0 -1391
  256. package/docs/gateway/configuration.md +0 -739
  257. package/docs/gateway/diagnostics.md +0 -213
  258. package/docs/gateway/discovery.md +0 -154
  259. package/docs/gateway/doctor.md +0 -575
  260. package/docs/gateway/gateway-lock.md +0 -37
  261. package/docs/gateway/health.md +0 -73
  262. package/docs/gateway/heartbeat.md +0 -498
  263. package/docs/gateway/index.md +0 -383
  264. package/docs/gateway/local-model-services.md +0 -205
  265. package/docs/gateway/local-models.md +0 -355
  266. package/docs/gateway/logging.md +0 -149
  267. package/docs/gateway/multiple-gateways.md +0 -178
  268. package/docs/gateway/network-model.md +0 -15
  269. package/docs/gateway/openai-http-api.md +0 -378
  270. package/docs/gateway/openresponses-http-api.md +0 -347
  271. package/docs/gateway/openshell.md +0 -316
  272. package/docs/gateway/opentelemetry.md +0 -433
  273. package/docs/gateway/operator-scopes.md +0 -119
  274. package/docs/gateway/pairing.md +0 -207
  275. package/docs/gateway/prometheus.md +0 -249
  276. package/docs/gateway/protocol.md +0 -826
  277. package/docs/gateway/remote-gateway-readme.md +0 -169
  278. package/docs/gateway/remote.md +0 -280
  279. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  280. package/docs/gateway/sandboxing.md +0 -546
  281. package/docs/gateway/secrets-plan-contract.md +0 -159
  282. package/docs/gateway/secrets.md +0 -805
  283. package/docs/gateway/security/audit-checks.md +0 -127
  284. package/docs/gateway/security/exposure-runbook.md +0 -212
  285. package/docs/gateway/security/index.md +0 -1343
  286. package/docs/gateway/security/secure-file-operations.md +0 -76
  287. package/docs/gateway/security/shrinkwrap.md +0 -111
  288. package/docs/gateway/tailscale.md +0 -156
  289. package/docs/gateway/tools-invoke-http-api.md +0 -169
  290. package/docs/gateway/troubleshooting.md +0 -877
  291. package/docs/gateway/trusted-proxy-auth.md +0 -483
  292. package/docs/help/debugging.md +0 -341
  293. package/docs/help/environment.md +0 -233
  294. package/docs/help/faq-first-run.md +0 -870
  295. package/docs/help/faq-models.md +0 -556
  296. package/docs/help/faq.md +0 -2041
  297. package/docs/help/index.md +0 -39
  298. package/docs/help/scripts.md +0 -56
  299. package/docs/help/testing-live.md +0 -587
  300. package/docs/help/testing-updates-plugins.md +0 -299
  301. package/docs/help/testing.md +0 -977
  302. package/docs/help/troubleshooting.md +0 -449
  303. package/docs/index.md +0 -196
  304. package/docs/install/ansible.md +0 -233
  305. package/docs/install/azure.md +0 -315
  306. package/docs/install/bun.md +0 -59
  307. package/docs/install/clawdock.md +0 -112
  308. package/docs/install/development-channels.md +0 -148
  309. package/docs/install/digitalocean.md +0 -174
  310. package/docs/install/docker-vm-runtime.md +0 -154
  311. package/docs/install/docker.md +0 -564
  312. package/docs/install/exe-dev.md +0 -201
  313. package/docs/install/fly.md +0 -524
  314. package/docs/install/gcp.md +0 -418
  315. package/docs/install/hetzner.md +0 -285
  316. package/docs/install/hostinger.md +0 -98
  317. package/docs/install/index.md +0 -232
  318. package/docs/install/installer.md +0 -447
  319. package/docs/install/kubernetes.md +0 -196
  320. package/docs/install/macos-vm.md +0 -281
  321. package/docs/install/migrating-claude.md +0 -165
  322. package/docs/install/migrating-hermes.md +0 -178
  323. package/docs/install/migrating.md +0 -137
  324. package/docs/install/nix.md +0 -112
  325. package/docs/install/node.md +0 -142
  326. package/docs/install/northflank.mdx +0 -44
  327. package/docs/install/oracle.md +0 -218
  328. package/docs/install/podman.md +0 -216
  329. package/docs/install/railway.mdx +0 -92
  330. package/docs/install/raspberry-pi.md +0 -234
  331. package/docs/install/render.mdx +0 -167
  332. package/docs/install/uninstall.md +0 -131
  333. package/docs/install/updating.md +0 -284
  334. package/docs/install/upstash.md +0 -96
  335. package/docs/logging.md +0 -320
  336. package/docs/nav-tabs-underline.js +0 -100
  337. package/docs/network.md +0 -72
  338. package/docs/nodes/audio.md +0 -216
  339. package/docs/nodes/camera.md +0 -166
  340. package/docs/nodes/images.md +0 -77
  341. package/docs/nodes/index.md +0 -439
  342. package/docs/nodes/location-command.md +0 -102
  343. package/docs/nodes/media-understanding.md +0 -495
  344. package/docs/nodes/talk.md +0 -160
  345. package/docs/nodes/troubleshooting.md +0 -123
  346. package/docs/nodes/voicewake.md +0 -93
  347. package/docs/perplexity.md +0 -11
  348. package/docs/plan/codex-context-engine-harness.md +0 -624
  349. package/docs/plan/ui-channels.md +0 -284
  350. package/docs/platforms/digitalocean.md +0 -12
  351. package/docs/platforms/easyrunner.md +0 -109
  352. package/docs/platforms/index.md +0 -51
  353. package/docs/platforms/linux.md +0 -141
  354. package/docs/platforms/mac/bundled-gateway.md +0 -79
  355. package/docs/platforms/mac/canvas.md +0 -128
  356. package/docs/platforms/mac/child-process.md +0 -72
  357. package/docs/platforms/mac/dev-setup.md +0 -112
  358. package/docs/platforms/mac/health.md +0 -39
  359. package/docs/platforms/mac/icon.md +0 -36
  360. package/docs/platforms/mac/logging.md +0 -62
  361. package/docs/platforms/mac/menu-bar.md +0 -93
  362. package/docs/platforms/mac/peekaboo.md +0 -96
  363. package/docs/platforms/mac/permissions.md +0 -73
  364. package/docs/platforms/mac/remote.md +0 -123
  365. package/docs/platforms/mac/signing.md +0 -52
  366. package/docs/platforms/mac/skills.md +0 -43
  367. package/docs/platforms/mac/voice-overlay.md +0 -66
  368. package/docs/platforms/mac/voicewake.md +0 -73
  369. package/docs/platforms/mac/webchat.md +0 -54
  370. package/docs/platforms/mac/xpc.md +0 -66
  371. package/docs/platforms/oracle.md +0 -12
  372. package/docs/platforms/raspberry-pi.md +0 -13
  373. package/docs/platforms/windows.md +0 -286
  374. package/docs/plugins/adding-capabilities.md +0 -146
  375. package/docs/plugins/admin-http-rpc.md +0 -216
  376. package/docs/plugins/agent-tools.md +0 -13
  377. package/docs/plugins/architecture-internals.md +0 -1196
  378. package/docs/plugins/architecture.md +0 -483
  379. package/docs/plugins/building-extensions.md +0 -13
  380. package/docs/plugins/building-plugins.md +0 -335
  381. package/docs/plugins/bundles.md +0 -310
  382. package/docs/plugins/cli-backend-plugins.md +0 -310
  383. package/docs/plugins/codex-computer-use.md +0 -297
  384. package/docs/plugins/codex-harness-reference.md +0 -470
  385. package/docs/plugins/codex-harness-runtime.md +0 -268
  386. package/docs/plugins/codex-harness.md +0 -780
  387. package/docs/plugins/codex-native-plugins.md +0 -276
  388. package/docs/plugins/community.md +0 -77
  389. package/docs/plugins/compatibility.md +0 -167
  390. package/docs/plugins/copilot.md +0 -356
  391. package/docs/plugins/dependency-resolution.md +0 -176
  392. package/docs/plugins/google-meet.md +0 -1737
  393. package/docs/plugins/hooks.md +0 -484
  394. package/docs/plugins/install-overrides.md +0 -80
  395. package/docs/plugins/manage-plugins.md +0 -210
  396. package/docs/plugins/manifest.md +0 -1457
  397. package/docs/plugins/memory-lancedb.md +0 -385
  398. package/docs/plugins/memory-wiki.md +0 -529
  399. package/docs/plugins/message-presentation.md +0 -473
  400. package/docs/plugins/oc-path.md +0 -166
  401. package/docs/plugins/plugin-inventory.md +0 -189
  402. package/docs/plugins/plugin-permission-requests.md +0 -193
  403. package/docs/plugins/reference/acpx.md +0 -23
  404. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  405. package/docs/plugins/reference/alibaba.md +0 -23
  406. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  407. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  408. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  409. package/docs/plugins/reference/anthropic.md +0 -23
  410. package/docs/plugins/reference/arcee.md +0 -23
  411. package/docs/plugins/reference/azure-speech.md +0 -23
  412. package/docs/plugins/reference/bonjour.md +0 -19
  413. package/docs/plugins/reference/brave.md +0 -23
  414. package/docs/plugins/reference/browser.md +0 -23
  415. package/docs/plugins/reference/byteplus.md +0 -19
  416. package/docs/plugins/reference/canvas.md +0 -19
  417. package/docs/plugins/reference/cerebras.md +0 -23
  418. package/docs/plugins/reference/chutes.md +0 -23
  419. package/docs/plugins/reference/clickclack.md +0 -23
  420. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  421. package/docs/plugins/reference/codex-supervisor.md +0 -27
  422. package/docs/plugins/reference/codex.md +0 -23
  423. package/docs/plugins/reference/comfy.md +0 -23
  424. package/docs/plugins/reference/copilot-proxy.md +0 -19
  425. package/docs/plugins/reference/copilot.md +0 -23
  426. package/docs/plugins/reference/deepgram.md +0 -23
  427. package/docs/plugins/reference/deepinfra.md +0 -23
  428. package/docs/plugins/reference/deepseek.md +0 -23
  429. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  430. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  431. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  432. package/docs/plugins/reference/diffs.md +0 -19
  433. package/docs/plugins/reference/discord.md +0 -23
  434. package/docs/plugins/reference/document-extract.md +0 -23
  435. package/docs/plugins/reference/duckduckgo.md +0 -23
  436. package/docs/plugins/reference/elevenlabs.md +0 -23
  437. package/docs/plugins/reference/exa.md +0 -23
  438. package/docs/plugins/reference/fal.md +0 -23
  439. package/docs/plugins/reference/feishu.md +0 -23
  440. package/docs/plugins/reference/file-transfer.md +0 -19
  441. package/docs/plugins/reference/firecrawl.md +0 -23
  442. package/docs/plugins/reference/fireworks.md +0 -23
  443. package/docs/plugins/reference/github-copilot.md +0 -23
  444. package/docs/plugins/reference/gmi.md +0 -23
  445. package/docs/plugins/reference/google-meet.md +0 -23
  446. package/docs/plugins/reference/google.md +0 -23
  447. package/docs/plugins/reference/googlechat.md +0 -23
  448. package/docs/plugins/reference/gradium.md +0 -23
  449. package/docs/plugins/reference/groq.md +0 -23
  450. package/docs/plugins/reference/huggingface.md +0 -23
  451. package/docs/plugins/reference/imessage.md +0 -23
  452. package/docs/plugins/reference/inworld.md +0 -23
  453. package/docs/plugins/reference/irc.md +0 -23
  454. package/docs/plugins/reference/kilocode.md +0 -23
  455. package/docs/plugins/reference/kimi.md +0 -23
  456. package/docs/plugins/reference/line.md +0 -23
  457. package/docs/plugins/reference/litellm.md +0 -23
  458. package/docs/plugins/reference/llm-task.md +0 -19
  459. package/docs/plugins/reference/lmstudio.md +0 -23
  460. package/docs/plugins/reference/lobster.md +0 -19
  461. package/docs/plugins/reference/matrix.md +0 -23
  462. package/docs/plugins/reference/mattermost.md +0 -23
  463. package/docs/plugins/reference/memory-core.md +0 -19
  464. package/docs/plugins/reference/memory-lancedb.md +0 -23
  465. package/docs/plugins/reference/memory-wiki.md +0 -23
  466. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  467. package/docs/plugins/reference/microsoft.md +0 -19
  468. package/docs/plugins/reference/migrate-claude.md +0 -19
  469. package/docs/plugins/reference/migrate-hermes.md +0 -19
  470. package/docs/plugins/reference/minimax.md +0 -23
  471. package/docs/plugins/reference/mistral.md +0 -23
  472. package/docs/plugins/reference/moonshot.md +0 -23
  473. package/docs/plugins/reference/msteams.md +0 -23
  474. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  475. package/docs/plugins/reference/nostr.md +0 -23
  476. package/docs/plugins/reference/novita.md +0 -23
  477. package/docs/plugins/reference/nvidia.md +0 -23
  478. package/docs/plugins/reference/oc-path.md +0 -23
  479. package/docs/plugins/reference/ollama.md +0 -23
  480. package/docs/plugins/reference/open-prose.md +0 -19
  481. package/docs/plugins/reference/openai.md +0 -23
  482. package/docs/plugins/reference/opencode-go.md +0 -23
  483. package/docs/plugins/reference/opencode.md +0 -23
  484. package/docs/plugins/reference/openrouter.md +0 -23
  485. package/docs/plugins/reference/openshell.md +0 -19
  486. package/docs/plugins/reference/perplexity.md +0 -23
  487. package/docs/plugins/reference/pixverse.md +0 -23
  488. package/docs/plugins/reference/policy.md +0 -72
  489. package/docs/plugins/reference/qa-channel.md +0 -23
  490. package/docs/plugins/reference/qa-lab.md +0 -19
  491. package/docs/plugins/reference/qa-matrix.md +0 -19
  492. package/docs/plugins/reference/qianfan.md +0 -23
  493. package/docs/plugins/reference/qqbot.md +0 -23
  494. package/docs/plugins/reference/qwen.md +0 -23
  495. package/docs/plugins/reference/runway.md +0 -23
  496. package/docs/plugins/reference/searxng.md +0 -19
  497. package/docs/plugins/reference/senseaudio.md +0 -23
  498. package/docs/plugins/reference/sglang.md +0 -23
  499. package/docs/plugins/reference/signal.md +0 -23
  500. package/docs/plugins/reference/skill-workshop.md +0 -23
  501. package/docs/plugins/reference/slack.md +0 -23
  502. package/docs/plugins/reference/stepfun.md +0 -23
  503. package/docs/plugins/reference/synology-chat.md +0 -23
  504. package/docs/plugins/reference/synthetic.md +0 -23
  505. package/docs/plugins/reference/tavily.md +0 -23
  506. package/docs/plugins/reference/telegram.md +0 -23
  507. package/docs/plugins/reference/tencent.md +0 -23
  508. package/docs/plugins/reference/tlon.md +0 -23
  509. package/docs/plugins/reference/together.md +0 -23
  510. package/docs/plugins/reference/tokenjuice.md +0 -23
  511. package/docs/plugins/reference/tts-local-cli.md +0 -19
  512. package/docs/plugins/reference/twitch.md +0 -23
  513. package/docs/plugins/reference/venice.md +0 -23
  514. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  515. package/docs/plugins/reference/vllm.md +0 -23
  516. package/docs/plugins/reference/voice-call.md +0 -23
  517. package/docs/plugins/reference/volcengine.md +0 -23
  518. package/docs/plugins/reference/voyage.md +0 -19
  519. package/docs/plugins/reference/vydra.md +0 -23
  520. package/docs/plugins/reference/web-readability.md +0 -19
  521. package/docs/plugins/reference/webhooks.md +0 -23
  522. package/docs/plugins/reference/whatsapp.md +0 -23
  523. package/docs/plugins/reference/workboard.md +0 -23
  524. package/docs/plugins/reference/xai.md +0 -23
  525. package/docs/plugins/reference/xiaomi.md +0 -23
  526. package/docs/plugins/reference/zai.md +0 -23
  527. package/docs/plugins/reference/zalo.md +0 -23
  528. package/docs/plugins/reference/zalouser.md +0 -24
  529. package/docs/plugins/reference.md +0 -145
  530. package/docs/plugins/sdk-agent-harness.md +0 -338
  531. package/docs/plugins/sdk-channel-inbound.md +0 -70
  532. package/docs/plugins/sdk-channel-ingress.md +0 -137
  533. package/docs/plugins/sdk-channel-message.md +0 -18
  534. package/docs/plugins/sdk-channel-outbound.md +0 -113
  535. package/docs/plugins/sdk-channel-plugins.md +0 -765
  536. package/docs/plugins/sdk-channel-turn.md +0 -9
  537. package/docs/plugins/sdk-entrypoints.md +0 -344
  538. package/docs/plugins/sdk-migration.md +0 -979
  539. package/docs/plugins/sdk-overview.md +0 -511
  540. package/docs/plugins/sdk-provider-plugins.md +0 -846
  541. package/docs/plugins/sdk-runtime.md +0 -676
  542. package/docs/plugins/sdk-setup.md +0 -550
  543. package/docs/plugins/sdk-subpaths.md +0 -391
  544. package/docs/plugins/sdk-testing.md +0 -403
  545. package/docs/plugins/skill-workshop.md +0 -713
  546. package/docs/plugins/tool-plugins.md +0 -411
  547. package/docs/plugins/voice-call.md +0 -942
  548. package/docs/plugins/webhooks.md +0 -192
  549. package/docs/plugins/workboard.md +0 -252
  550. package/docs/plugins/zalouser.md +0 -86
  551. package/docs/prose.md +0 -137
  552. package/docs/providers/alibaba.md +0 -158
  553. package/docs/providers/anthropic.md +0 -381
  554. package/docs/providers/arcee.md +0 -144
  555. package/docs/providers/azure-speech.md +0 -119
  556. package/docs/providers/bedrock-mantle.md +0 -211
  557. package/docs/providers/bedrock.md +0 -414
  558. package/docs/providers/cerebras.md +0 -130
  559. package/docs/providers/chutes.md +0 -153
  560. package/docs/providers/claude-max-api-proxy.md +0 -191
  561. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  562. package/docs/providers/comfy.md +0 -362
  563. package/docs/providers/deepgram.md +0 -184
  564. package/docs/providers/deepinfra.md +0 -92
  565. package/docs/providers/deepseek.md +0 -146
  566. package/docs/providers/ds4.md +0 -309
  567. package/docs/providers/elevenlabs.md +0 -130
  568. package/docs/providers/fal.md +0 -240
  569. package/docs/providers/fireworks.md +0 -144
  570. package/docs/providers/github-copilot.md +0 -257
  571. package/docs/providers/gmi.md +0 -92
  572. package/docs/providers/google.md +0 -472
  573. package/docs/providers/gradium.md +0 -123
  574. package/docs/providers/groq.md +0 -171
  575. package/docs/providers/huggingface.md +0 -235
  576. package/docs/providers/index.md +0 -105
  577. package/docs/providers/inferrs.md +0 -272
  578. package/docs/providers/inworld.md +0 -120
  579. package/docs/providers/kilocode.md +0 -135
  580. package/docs/providers/litellm.md +0 -234
  581. package/docs/providers/lmstudio.md +0 -224
  582. package/docs/providers/minimax.md +0 -505
  583. package/docs/providers/mistral.md +0 -235
  584. package/docs/providers/models.md +0 -64
  585. package/docs/providers/moonshot.md +0 -413
  586. package/docs/providers/novita.md +0 -92
  587. package/docs/providers/nvidia.md +0 -158
  588. package/docs/providers/ollama-cloud.md +0 -115
  589. package/docs/providers/ollama.md +0 -1225
  590. package/docs/providers/openai.md +0 -1093
  591. package/docs/providers/opencode-go.md +0 -123
  592. package/docs/providers/opencode.md +0 -149
  593. package/docs/providers/openrouter.md +0 -349
  594. package/docs/providers/perplexity-provider.md +0 -123
  595. package/docs/providers/pixverse.md +0 -165
  596. package/docs/providers/qianfan.md +0 -132
  597. package/docs/providers/qwen-oauth.md +0 -115
  598. package/docs/providers/qwen.md +0 -364
  599. package/docs/providers/runway.md +0 -103
  600. package/docs/providers/senseaudio.md +0 -68
  601. package/docs/providers/sglang.md +0 -161
  602. package/docs/providers/stepfun.md +0 -229
  603. package/docs/providers/synthetic.md +0 -154
  604. package/docs/providers/tencent.md +0 -130
  605. package/docs/providers/together.md +0 -140
  606. package/docs/providers/venice.md +0 -312
  607. package/docs/providers/vercel-ai-gateway.md +0 -128
  608. package/docs/providers/vllm.md +0 -407
  609. package/docs/providers/volcengine.md +0 -199
  610. package/docs/providers/vydra.md +0 -180
  611. package/docs/providers/xai.md +0 -571
  612. package/docs/providers/xiaomi.md +0 -262
  613. package/docs/providers/zai.md +0 -224
  614. package/docs/refactor/access.md +0 -9
  615. package/docs/refactor/acp.md +0 -298
  616. package/docs/refactor/canvas.md +0 -131
  617. package/docs/refactor/database-first.md +0 -2256
  618. package/docs/refactor/ingress-core.md +0 -341
  619. package/docs/reference/AGENTS.default.md +0 -131
  620. package/docs/reference/RELEASING.md +0 -799
  621. package/docs/reference/api-usage-costs.md +0 -208
  622. package/docs/reference/application-modernization-plan.md +0 -208
  623. package/docs/reference/code-mode.md +0 -773
  624. package/docs/reference/credits.md +0 -33
  625. package/docs/reference/device-models.md +0 -50
  626. package/docs/reference/fengming-sdk-api-design.md +0 -390
  627. package/docs/reference/full-release-validation.md +0 -202
  628. package/docs/reference/memory-config.md +0 -604
  629. package/docs/reference/prompt-caching.md +0 -358
  630. package/docs/reference/release-performance-sweep.md +0 -360
  631. package/docs/reference/rich-output-protocol.md +0 -101
  632. package/docs/reference/rpc.md +0 -43
  633. package/docs/reference/secret-placeholder-conventions.md +0 -33
  634. package/docs/reference/secretref-credential-surface.md +0 -159
  635. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  636. package/docs/reference/session-management-compaction.md +0 -474
  637. package/docs/reference/templates/AGENTS.dev.md +0 -90
  638. package/docs/reference/templates/AGENTS.md +0 -227
  639. package/docs/reference/templates/BOOT.md +0 -16
  640. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  641. package/docs/reference/templates/CLAUDE.md +0 -1
  642. package/docs/reference/templates/HEARTBEAT.md +0 -24
  643. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  644. package/docs/reference/templates/IDENTITY.md +0 -34
  645. package/docs/reference/templates/SOUL.dev.md +0 -82
  646. package/docs/reference/templates/SOUL.md +0 -49
  647. package/docs/reference/templates/TOOLS.dev.md +0 -29
  648. package/docs/reference/templates/TOOLS.md +0 -51
  649. package/docs/reference/templates/USER.dev.md +0 -23
  650. package/docs/reference/templates/USER.md +0 -28
  651. package/docs/reference/test.md +0 -247
  652. package/docs/reference/token-use.md +0 -246
  653. package/docs/reference/transcript-hygiene.md +0 -214
  654. package/docs/reference/wizard.md +0 -252
  655. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  656. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  657. package/docs/security/formal-verification.md +0 -170
  658. package/docs/security/incident-response.md +0 -59
  659. package/docs/security/network-proxy.md +0 -268
  660. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  661. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  662. package/docs/specs/claw-supervisor.md +0 -247
  663. package/docs/start/bootstrapping.md +0 -49
  664. package/docs/start/docs-directory.md +0 -69
  665. package/docs/start/fengming.md +0 -252
  666. package/docs/start/getting-started.md +0 -152
  667. package/docs/start/hubs.md +0 -201
  668. package/docs/start/lore.md +0 -223
  669. package/docs/start/onboarding-overview.md +0 -72
  670. package/docs/start/onboarding.md +0 -98
  671. package/docs/start/quickstart.md +0 -25
  672. package/docs/start/setup.md +0 -178
  673. package/docs/start/showcase.md +0 -363
  674. package/docs/start/wizard-cli-automation.md +0 -232
  675. package/docs/start/wizard-cli-reference.md +0 -331
  676. package/docs/start/wizard.md +0 -141
  677. package/docs/style.css +0 -137
  678. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  679. package/docs/tools/acp-agents-setup.md +0 -351
  680. package/docs/tools/acp-agents.md +0 -854
  681. package/docs/tools/agent-send.md +0 -130
  682. package/docs/tools/apply-patch.md +0 -64
  683. package/docs/tools/brave-search.md +0 -139
  684. package/docs/tools/browser-control.md +0 -391
  685. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  686. package/docs/tools/browser-login.md +0 -77
  687. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  688. package/docs/tools/browser.md +0 -810
  689. package/docs/tools/btw.md +0 -159
  690. package/docs/tools/capability-cookbook.md +0 -12
  691. package/docs/tools/clawhub.md +0 -5
  692. package/docs/tools/code-execution.md +0 -173
  693. package/docs/tools/creating-skills.md +0 -158
  694. package/docs/tools/diffs.md +0 -525
  695. package/docs/tools/duckduckgo-search.md +0 -109
  696. package/docs/tools/elevated.md +0 -128
  697. package/docs/tools/exa-search.md +0 -152
  698. package/docs/tools/exec-approvals-advanced.md +0 -444
  699. package/docs/tools/exec-approvals.md +0 -494
  700. package/docs/tools/exec.md +0 -285
  701. package/docs/tools/firecrawl.md +0 -155
  702. package/docs/tools/gemini-search.md +0 -114
  703. package/docs/tools/goal.md +0 -217
  704. package/docs/tools/grok-search.md +0 -129
  705. package/docs/tools/image-generation.md +0 -493
  706. package/docs/tools/index.md +0 -178
  707. package/docs/tools/kimi-search.md +0 -105
  708. package/docs/tools/llm-task.md +0 -137
  709. package/docs/tools/lobster.md +0 -365
  710. package/docs/tools/loop-detection.md +0 -154
  711. package/docs/tools/media-overview.md +0 -160
  712. package/docs/tools/minimax-search.md +0 -102
  713. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  714. package/docs/tools/music-generation.md +0 -372
  715. package/docs/tools/ollama-search.md +0 -153
  716. package/docs/tools/pdf.md +0 -213
  717. package/docs/tools/perplexity-search.md +0 -220
  718. package/docs/tools/plugin.md +0 -363
  719. package/docs/tools/reactions.md +0 -100
  720. package/docs/tools/searxng-search.md +0 -141
  721. package/docs/tools/skills-config.md +0 -195
  722. package/docs/tools/skills.md +0 -569
  723. package/docs/tools/slash-commands.md +0 -487
  724. package/docs/tools/steer.md +0 -77
  725. package/docs/tools/subagents.md +0 -651
  726. package/docs/tools/tavily.md +0 -162
  727. package/docs/tools/thinking.md +0 -142
  728. package/docs/tools/tokenjuice.md +0 -84
  729. package/docs/tools/tool-search.md +0 -269
  730. package/docs/tools/trajectory.md +0 -229
  731. package/docs/tools/tts.md +0 -1009
  732. package/docs/tools/video-generation.md +0 -555
  733. package/docs/tools/web-fetch.md +0 -210
  734. package/docs/tools/web.md +0 -461
  735. package/docs/tts.md +0 -11
  736. package/docs/vps.md +0 -139
  737. package/docs/web/control-ui.md +0 -512
  738. package/docs/web/dashboard.md +0 -107
  739. package/docs/web/index.md +0 -133
  740. package/docs/web/tui.md +0 -250
  741. package/docs/web/webchat.md +0 -102
  742. package/npm-shrinkwrap.json +0 -12861
  743. package/patches/.gitkeep +0 -0
  744. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  745. package/pnpm-workspace.yaml +0 -120
  746. package/scripts/crabbox-wrapper.mjs +0 -2004
  747. package/scripts/lib/official-external-channel-catalog.json +0 -560
  748. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  749. package/scripts/lib/official-external-provider-catalog.json +0 -158
  750. package/scripts/lib/package-dist-imports.mjs +0 -171
  751. package/scripts/npm-runner.mjs +0 -91
  752. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  753. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  754. package/scripts/prepare-git-hooks.mjs +0 -72
  755. package/scripts/windows-cmd-helpers.mjs +0 -22
  756. package/skills/batch/SKILL.md +0 -118
  757. package/skills/code-review/SKILL.md +0 -107
  758. package/skills/debug/SKILL.md +0 -83
  759. package/skills/loop/SKILL.md +0 -118
  760. package/skills/run/SKILL.md +0 -79
  761. package/skills/run-skill-generator/SKILL.md +0 -179
  762. package/skills/verify/SKILL.md +0 -103
  763. package/src/agents/templates/HEARTBEAT.md +0 -3
@@ -1,370 +0,0 @@
1
- ---
2
- summary: "How FengMing upgrades the previous Matrix plugin in place, including encrypted-state recovery limits and manual recovery steps."
3
- read_when:
4
- - Upgrading an existing Matrix installation
5
- - Migrating encrypted Matrix history and device state
6
- title: "Matrix migration"
7
- ---
8
-
9
- Upgrade from the previous public `matrix` plugin to the current implementation.
10
-
11
- For most users, the upgrade is in place:
12
-
13
- - the plugin stays `@fengming/matrix`
14
- - the channel stays `matrix`
15
- - your config stays under `channels.matrix`
16
- - cached credentials stay under `~/.fengming/credentials/matrix/`
17
- - runtime state stays under `~/.fengming/matrix/`
18
-
19
- You do not need to rename config keys or reinstall the plugin under a new name.
20
-
21
- ## What the migration does automatically
22
-
23
- When the gateway starts, and when you run [`fengming doctor --fix`](/gateway/doctor), FengMing tries to repair old Matrix state automatically.
24
- Before any actionable Matrix migration step mutates on-disk state, FengMing creates or reuses a focused recovery snapshot.
25
-
26
- When you use `fengming update`, the exact trigger depends on how FengMing is installed:
27
-
28
- - source installs run `fengming doctor --fix` during the update flow, then restart the gateway by default
29
- - package-manager installs update the package, run a non-interactive doctor pass, then rely on the default gateway restart so startup can finish Matrix migration
30
- - if you use `fengming update --no-restart`, startup-backed Matrix migration is deferred until you later run `fengming doctor --fix` and restart the gateway
31
-
32
- Automatic migration covers:
33
-
34
- - creating or reusing a pre-migration snapshot under `~/Backups/fengming-migrations/`
35
- - reusing your cached Matrix credentials
36
- - keeping the same account selection and `channels.matrix` config
37
- - moving the oldest flat Matrix sync store into the current account-scoped location
38
- - moving the oldest flat Matrix crypto store into the current account-scoped location when the target account can be resolved safely
39
- - extracting a previously saved Matrix room-key backup decryption key from the old rust crypto store, when that key exists locally
40
- - reusing the most complete existing token-hash storage root for the same Matrix account, homeserver, and user when the access token changes later
41
- - scanning sibling token-hash storage roots for pending encrypted-state restore metadata when the Matrix access token changed but the account/device identity stayed the same
42
- - restoring backed-up room keys into the new crypto store on the next Matrix startup
43
-
44
- Snapshot details:
45
-
46
- - FengMing writes a marker file at `~/.fengming/matrix/migration-snapshot.json` after a successful snapshot so later startup and repair passes can reuse the same archive.
47
- - These automatic Matrix migration snapshots back up config + state only (`includeWorkspace: false`).
48
- - If Matrix only has warning-only migration state, for example because `userId` or `accessToken` is still missing, FengMing does not create the snapshot yet because no Matrix mutation is actionable.
49
- - If the snapshot step fails, FengMing skips Matrix migration for that run instead of mutating state without a recovery point.
50
-
51
- About multi-account upgrades:
52
-
53
- - the oldest flat Matrix store (`~/.fengming/matrix/bot-storage.json` and `~/.fengming/matrix/crypto/`) came from a single-store layout, so FengMing can only migrate it into one resolved Matrix account target
54
- - already account-scoped legacy Matrix stores are detected and prepared per configured Matrix account
55
-
56
- ## What the migration cannot do automatically
57
-
58
- The previous public Matrix plugin did **not** automatically create Matrix room-key backups. It persisted local crypto state and requested device verification, but it did not guarantee that your room keys were backed up to the homeserver.
59
-
60
- That means some encrypted installs can only be migrated partially.
61
-
62
- FengMing cannot automatically recover:
63
-
64
- - local-only room keys that were never backed up
65
- - encrypted state when the target Matrix account cannot be resolved yet because `homeserver`, `userId`, or `accessToken` are still unavailable
66
- - automatic migration of one shared flat Matrix store when multiple Matrix accounts are configured but `channels.matrix.defaultAccount` is not set
67
- - custom plugin path installs that are pinned to a repo path instead of the standard Matrix package
68
- - a missing recovery key when the old store had backed-up keys but did not keep the decryption key locally
69
-
70
- Current warning scope:
71
-
72
- - custom Matrix plugin path installs are surfaced by both gateway startup and `fengming doctor`
73
-
74
- If your old installation had local-only encrypted history that was never backed up, some older encrypted messages may remain unreadable after the upgrade.
75
-
76
- ## Recommended upgrade flow
77
-
78
- 1. Update FengMing and the Matrix plugin normally.
79
- Prefer plain `fengming update` without `--no-restart` so startup can finish the Matrix migration immediately.
80
- 2. Run:
81
-
82
- ```bash
83
- fengming doctor --fix
84
- ```
85
-
86
- If Matrix has actionable migration work, doctor will create or reuse the pre-migration snapshot first and print the archive path.
87
-
88
- 3. Start or restart the gateway.
89
- 4. Check current verification and backup state:
90
-
91
- ```bash
92
- fengming matrix verify status
93
- fengming matrix verify backup status
94
- ```
95
-
96
- 5. Put the recovery key for the Matrix account you are repairing in an account-specific environment variable. For a single default account, `MATRIX_RECOVERY_KEY` is fine. For multiple accounts, use one variable per account, for example `MATRIX_RECOVERY_KEY_ASSISTANT`, and add `--account assistant` to the command.
97
-
98
- 6. If FengMing tells you a recovery key is needed, run the command for the matching account:
99
-
100
- ```bash
101
- printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify backup restore --recovery-key-stdin
102
- printf '%s\n' "$MATRIX_RECOVERY_KEY_ASSISTANT" | fengming matrix verify backup restore --recovery-key-stdin --account assistant
103
- ```
104
-
105
- 7. If this device is still unverified, run the command for the matching account:
106
-
107
- ```bash
108
- printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify device --recovery-key-stdin
109
- printf '%s\n' "$MATRIX_RECOVERY_KEY_ASSISTANT" | fengming matrix verify device --recovery-key-stdin --account assistant
110
- ```
111
-
112
- If the recovery key is accepted and backup is usable, but `Cross-signing verified`
113
- is still `no`, complete self-verification from another Matrix client:
114
-
115
- ```bash
116
- fengming matrix verify self
117
- ```
118
-
119
- Accept the request in another Matrix client, compare the emoji or decimals,
120
- and type `yes` only when they match. The command exits successfully only
121
- after `Cross-signing verified` becomes `yes`.
122
-
123
- 8. If you are intentionally abandoning unrecoverable old history and want a fresh backup baseline for future messages, run:
124
-
125
- ```bash
126
- fengming matrix verify backup reset --yes
127
- ```
128
-
129
- 9. If no server-side key backup exists yet, create one for future recoveries:
130
-
131
- ```bash
132
- fengming matrix verify bootstrap
133
- ```
134
-
135
- ## How encrypted migration works
136
-
137
- Encrypted migration is a two-stage process:
138
-
139
- 1. Startup or `fengming doctor --fix` creates or reuses the pre-migration snapshot if encrypted migration is actionable.
140
- 2. Startup or `fengming doctor --fix` inspects the old Matrix crypto store through the active Matrix plugin install.
141
- 3. If a backup decryption key is found, FengMing writes it into the new recovery-key flow and marks room-key restore as pending.
142
- 4. On the next Matrix startup, FengMing restores backed-up room keys into the new crypto store automatically.
143
-
144
- If the old store reports room keys that were never backed up, FengMing warns instead of pretending recovery succeeded.
145
-
146
- ## Common messages and what they mean
147
-
148
- ### Upgrade and detection messages
149
-
150
- `Matrix plugin upgraded in place.`
151
-
152
- - Meaning: the old on-disk Matrix state was detected and migrated into the current layout.
153
- - What to do: nothing unless the same output also includes warnings.
154
-
155
- `Matrix migration snapshot created before applying Matrix upgrades.`
156
-
157
- - Meaning: FengMing created a recovery archive before mutating Matrix state.
158
- - What to do: keep the printed archive path until you confirm migration succeeded.
159
-
160
- `Matrix migration snapshot reused before applying Matrix upgrades.`
161
-
162
- - Meaning: FengMing found an existing Matrix migration snapshot marker and reused that archive instead of creating a duplicate backup.
163
- - What to do: keep the printed archive path until you confirm migration succeeded.
164
-
165
- `Legacy Matrix state detected at ... but channels.matrix is not configured yet.`
166
-
167
- - Meaning: old Matrix state exists, but FengMing cannot map it to a current Matrix account because Matrix is not configured.
168
- - What to do: configure `channels.matrix`, then rerun `fengming doctor --fix` or restart the gateway.
169
-
170
- `Legacy Matrix state detected at ... but the new account-scoped target could not be resolved yet (need homeserver, userId, and access token for channels.matrix...).`
171
-
172
- - Meaning: FengMing found old state, but it still cannot determine the exact current account/device root.
173
- - What to do: start the gateway once with a working Matrix login, or rerun `fengming doctor --fix` after cached credentials exist.
174
-
175
- `Legacy Matrix state detected at ... but multiple Matrix accounts are configured and channels.matrix.defaultAccount is not set.`
176
-
177
- - Meaning: FengMing found one shared flat Matrix store, but it refuses to guess which named Matrix account should receive it.
178
- - What to do: set `channels.matrix.defaultAccount` to the intended account, then rerun `fengming doctor --fix` or restart the gateway.
179
-
180
- `Matrix legacy sync store not migrated because the target already exists (...)`
181
-
182
- - Meaning: the new account-scoped location already has a sync or crypto store, so FengMing did not overwrite it automatically.
183
- - What to do: verify that the current account is the correct one before manually removing or moving the conflicting target.
184
-
185
- `Failed migrating Matrix legacy sync store (...)` or `Failed migrating Matrix legacy crypto store (...)`
186
-
187
- - Meaning: FengMing tried to move old Matrix state but the filesystem operation failed.
188
- - What to do: inspect filesystem permissions and disk state, then rerun `fengming doctor --fix`.
189
-
190
- `Legacy Matrix encrypted state detected at ... but channels.matrix is not configured yet.`
191
-
192
- - Meaning: FengMing found an old encrypted Matrix store, but there is no current Matrix config to attach it to.
193
- - What to do: configure `channels.matrix`, then rerun `fengming doctor --fix` or restart the gateway.
194
-
195
- `Legacy Matrix encrypted state detected at ... but the account-scoped target could not be resolved yet (need homeserver, userId, and access token for channels.matrix...).`
196
-
197
- - Meaning: the encrypted store exists, but FengMing cannot safely decide which current account/device it belongs to.
198
- - What to do: start the gateway once with a working Matrix login, or rerun `fengming doctor --fix` after cached credentials are available.
199
-
200
- `Legacy Matrix encrypted state detected at ... but multiple Matrix accounts are configured and channels.matrix.defaultAccount is not set.`
201
-
202
- - Meaning: FengMing found one shared flat legacy crypto store, but it refuses to guess which named Matrix account should receive it.
203
- - What to do: set `channels.matrix.defaultAccount` to the intended account, then rerun `fengming doctor --fix` or restart the gateway.
204
-
205
- `Matrix migration warnings are present, but no on-disk Matrix mutation is actionable yet. No pre-migration snapshot was needed.`
206
-
207
- - Meaning: FengMing detected old Matrix state, but the migration is still blocked on missing identity or credential data.
208
- - What to do: finish Matrix login or config setup, then rerun `fengming doctor --fix` or restart the gateway.
209
-
210
- `Legacy Matrix encrypted state was detected, but the Matrix plugin helper is unavailable. Install or repair @fengming/matrix so FengMing can inspect the old rust crypto store before upgrading.`
211
-
212
- - Meaning: FengMing found old encrypted Matrix state, but it could not load the helper entrypoint from the Matrix plugin that normally inspects that store.
213
- - What to do: reinstall or repair the Matrix plugin (`fengming plugins install @fengming/matrix`, or `fengming plugins install ./path/to/local/matrix-plugin` for a repo checkout), then rerun `fengming doctor --fix` or restart the gateway.
214
-
215
- `Matrix plugin helper path is unsafe: ... Reinstall @fengming/matrix and try again.`
216
-
217
- - Meaning: FengMing found a helper file path that escapes the plugin root or fails plugin boundary checks, so it refused to import it.
218
- - What to do: reinstall the Matrix plugin from a trusted path, then rerun `fengming doctor --fix` or restart the gateway.
219
-
220
- `- Failed creating a Matrix migration snapshot before repair: ...`
221
-
222
- `- Skipping Matrix migration changes for now. Resolve the snapshot failure, then rerun "fengming doctor --fix".`
223
-
224
- - Meaning: FengMing refused to mutate Matrix state because it could not create the recovery snapshot first.
225
- - What to do: resolve the backup error, then rerun `fengming doctor --fix` or restart the gateway.
226
-
227
- `Failed migrating legacy Matrix client storage: ...`
228
-
229
- - Meaning: the Matrix client-side fallback found old flat storage, but the move failed. FengMing now aborts that fallback instead of silently starting with a fresh store.
230
- - What to do: inspect filesystem permissions or conflicts, keep the old state intact, and retry after fixing the error.
231
-
232
- `Matrix is installed from a custom path: ...`
233
-
234
- - Meaning: Matrix is pinned to a path install, so mainline updates do not automatically replace it with the repo's standard Matrix package.
235
- - What to do: reinstall with `fengming plugins install @fengming/matrix` when you want to return to the default Matrix plugin.
236
-
237
- ### Encrypted-state recovery messages
238
-
239
- `matrix: restored X/Y room key(s) from legacy encrypted-state backup`
240
-
241
- - Meaning: backed-up room keys were restored successfully into the new crypto store.
242
- - What to do: usually nothing.
243
-
244
- `matrix: N legacy local-only room key(s) were never backed up and could not be restored automatically`
245
-
246
- - Meaning: some old room keys existed only in the old local store and had never been uploaded to Matrix backup.
247
- - What to do: expect some old encrypted history to remain unavailable unless you can recover those keys manually from another verified client.
248
-
249
- `Legacy Matrix encrypted state for account "..." has backed-up room keys, but no local backup decryption key was found. Ask the operator to run "fengming matrix verify backup restore --recovery-key-stdin" after upgrade if they have the recovery key.`
250
-
251
- - Meaning: backup exists, but FengMing could not recover the recovery key automatically.
252
- - What to do: run `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify backup restore --recovery-key-stdin`.
253
-
254
- `Failed inspecting legacy Matrix encrypted state for account "..." (...): ...`
255
-
256
- - Meaning: FengMing found the old encrypted store, but it could not inspect it safely enough to prepare recovery.
257
- - What to do: rerun `fengming doctor --fix`. If it repeats, keep the old state directory intact and recover using another verified Matrix client plus `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify backup restore --recovery-key-stdin`.
258
-
259
- `Legacy Matrix backup key was found for account "...", but .../recovery-key.json already contains a different recovery key. Leaving the existing file unchanged.`
260
-
261
- - Meaning: FengMing detected a backup key conflict and refused to overwrite the current recovery-key file automatically.
262
- - What to do: verify which recovery key is correct before retrying any restore command.
263
-
264
- `Legacy Matrix encrypted state for account "..." cannot be fully converted automatically because the old rust crypto store does not expose all local room keys for export.`
265
-
266
- - Meaning: this is the hard limit of the old storage format.
267
- - What to do: backed-up keys can still be restored, but local-only encrypted history may remain unavailable.
268
-
269
- `matrix: failed restoring room keys from legacy encrypted-state backup: ...`
270
-
271
- - Meaning: the new plugin attempted restore but Matrix returned an error.
272
- - What to do: run `fengming matrix verify backup status`, then retry with `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify backup restore --recovery-key-stdin` if needed.
273
-
274
- ### Manual recovery messages
275
-
276
- `Backup key is not loaded on this device. Run 'fengming matrix verify backup restore' to load it and restore old room keys.`
277
-
278
- - Meaning: FengMing knows you should have a backup key, but it is not active on this device.
279
- - What to do: run `fengming matrix verify backup restore`, or set `MATRIX_RECOVERY_KEY` and run `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify backup restore --recovery-key-stdin` if needed.
280
-
281
- `Store a recovery key with 'fengming matrix verify device --recovery-key-stdin', then run 'fengming matrix verify backup restore'.`
282
-
283
- - Meaning: this device does not currently have the recovery key stored.
284
- - What to do: set `MATRIX_RECOVERY_KEY`, run `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify device --recovery-key-stdin`, then restore the backup.
285
-
286
- `Backup key mismatch on this device. Re-run 'fengming matrix verify device --recovery-key-stdin' with the matching recovery key.`
287
-
288
- - Meaning: the stored key does not match the active Matrix backup.
289
- - What to do: set `MATRIX_RECOVERY_KEY` to the correct key and run `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify device --recovery-key-stdin`.
290
-
291
- If you accept losing unrecoverable old encrypted history, you can instead reset the
292
- current backup baseline with `fengming matrix verify backup reset --yes`. When the
293
- stored backup secret is broken, that reset may also recreate secret storage so the
294
- new backup key can load correctly after restart.
295
-
296
- `Backup trust chain is not verified on this device. Re-run 'fengming matrix verify device --recovery-key-stdin'.`
297
-
298
- - Meaning: the backup exists, but this device does not trust the cross-signing chain strongly enough yet.
299
- - What to do: set `MATRIX_RECOVERY_KEY` and run `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify device --recovery-key-stdin`.
300
-
301
- `Matrix recovery key is required`
302
-
303
- - Meaning: you tried a recovery step without supplying a recovery key when one was required.
304
- - What to do: rerun the command with `--recovery-key-stdin`, for example `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify device --recovery-key-stdin`.
305
-
306
- `Invalid Matrix recovery key: ...`
307
-
308
- - Meaning: the provided key could not be parsed or did not match the expected format.
309
- - What to do: retry with the exact recovery key from your Matrix client or recovery-key file.
310
-
311
- `Matrix recovery key was applied, but this device still lacks full Matrix identity trust.`
312
-
313
- - Meaning: FengMing could apply the recovery key, but Matrix still has not
314
- established full cross-signing identity trust for this device. Check the
315
- command output for `Recovery key accepted`, `Backup usable`,
316
- `Cross-signing verified`, and `Device verified by owner`.
317
- - What to do: run `fengming matrix verify self`, accept the request in another
318
- Matrix client, compare the SAS, and type `yes` only when it matches. The
319
- command waits for full Matrix identity trust before reporting success. Use
320
- `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify bootstrap --recovery-key-stdin --force-reset-cross-signing`
321
- only when you intentionally want to replace the current cross-signing identity.
322
-
323
- `Matrix key backup is not active on this device after loading from secret storage.`
324
-
325
- - Meaning: secret storage did not produce an active backup session on this device.
326
- - What to do: verify the device first, then recheck with `fengming matrix verify backup status`.
327
-
328
- `Matrix crypto backend cannot load backup keys from secret storage. Verify this device with 'fengming matrix verify device --recovery-key-stdin' first.`
329
-
330
- - Meaning: this device cannot restore from secret storage until device verification is complete.
331
- - What to do: run `printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify device --recovery-key-stdin` first.
332
-
333
- ### Custom plugin install messages
334
-
335
- `Matrix is installed from a custom path that no longer exists: ...`
336
-
337
- - Meaning: your plugin install record points at a local path that is gone.
338
- - What to do: reinstall with `fengming plugins install @fengming/matrix`, or if you are running from a repo checkout, `fengming plugins install ./path/to/local/matrix-plugin`.
339
-
340
- ## If encrypted history still does not come back
341
-
342
- Run these checks in order:
343
-
344
- ```bash
345
- fengming matrix verify status --verbose
346
- fengming matrix verify backup status --verbose
347
- printf '%s\n' "$MATRIX_RECOVERY_KEY" | fengming matrix verify backup restore --recovery-key-stdin --verbose
348
- ```
349
-
350
- If the backup restores successfully but some old rooms are still missing history, those missing keys were probably never backed up by the previous plugin.
351
-
352
- ## If you want to start fresh for future messages
353
-
354
- If you accept losing unrecoverable old encrypted history and only want a clean backup baseline going forward, run these commands in order:
355
-
356
- ```bash
357
- fengming matrix verify backup reset --yes
358
- fengming matrix verify backup status --verbose
359
- fengming matrix verify status
360
- ```
361
-
362
- If the device is still unverified after that, finish verification from your Matrix client by comparing the SAS emoji or decimal codes and confirming that they match.
363
-
364
- ## Related
365
-
366
- - [Matrix](/channels/matrix): channel setup and config.
367
- - [Matrix push rules](/channels/matrix-push-rules): notification routing.
368
- - [Doctor](/gateway/doctor): health check and automatic migration trigger.
369
- - [Migration guide](/install/migrating): all migration paths (machine moves, cross-system imports).
370
- - [Plugins](/tools/plugin): plugin install and registration.
@@ -1,77 +0,0 @@
1
- ---
2
- summary: "Matrix MessagePresentation metadata for FengMing-aware clients"
3
- read_when:
4
- - Building Matrix clients that render FengMing rich responses
5
- - Debugging com.fengming.presentation event content
6
- title: "Matrix presentation metadata"
7
- ---
8
-
9
- FengMing can attach normalized `MessagePresentation` metadata to outbound Matrix `m.room.message` events under `com.fengming.presentation`.
10
-
11
- Stock Matrix clients continue to render the plain text `body`. FengMing-aware clients can read the structured metadata and render native UI such as buttons, selects, context rows, and dividers.
12
-
13
- ## Event content
14
-
15
- The metadata is stored in Matrix event content:
16
-
17
- ```json
18
- {
19
- "msgtype": "m.text",
20
- "body": "Select model\n\n- DeepSeek: /model deepseek/deepseek-chat",
21
- "com.fengming.presentation": {
22
- "version": 1,
23
- "type": "message.presentation",
24
- "title": "Select model",
25
- "tone": "info",
26
- "blocks": [
27
- {
28
- "type": "select",
29
- "placeholder": "Choose model",
30
- "options": [
31
- {
32
- "label": "DeepSeek",
33
- "value": "/model deepseek/deepseek-chat"
34
- }
35
- ]
36
- }
37
- ]
38
- }
39
- }
40
- ```
41
-
42
- `version` is the Matrix presentation metadata schema version. `type` is a stable discriminator for FengMing-aware clients. Clients should ignore unknown `type` values, unknown versions they cannot safely interpret, and unknown block types.
43
-
44
- ## Fallback behavior
45
-
46
- FengMing always renders a readable plain text fallback into `body`. The structured metadata is additive and must not be required for basic Matrix interoperability.
47
-
48
- Unsupported clients should continue to show the fallback text. FengMing-aware clients may prefer the structured metadata for display while preserving the fallback text for copy, search, notifications, and accessibility.
49
-
50
- ## Supported blocks
51
-
52
- The Matrix outbound adapter advertises support for:
53
-
54
- - `buttons`
55
- - `select`
56
- - `context`
57
- - `divider`
58
-
59
- Clients should treat these blocks as best-effort presentation hints. Unknown fields and unknown block types should be ignored rather than causing the full message to fail rendering.
60
-
61
- ## Interactions
62
-
63
- This metadata does not add Matrix callback semantics. Button and select option values are fallback interaction payloads, usually slash commands or text commands. A Matrix client that wants to support interaction can send the selected value back to the room as a normal message.
64
-
65
- For example, a button with value `/model deepseek/deepseek-chat` can be handled by sending that value as an encrypted Matrix text message in the same room.
66
-
67
- ## Relationship to approval metadata
68
-
69
- `com.fengming.presentation` is for general rich message presentation.
70
-
71
- Approval prompts use the dedicated `com.fengming.approval` metadata because approvals carry safety-sensitive state, decisions, and exec/plugin details. If both metadata keys are present on the same event, clients should prefer the dedicated approval renderer.
72
-
73
- ## Media messages
74
-
75
- When a reply contains multiple media URLs, FengMing sends one Matrix event per media URL. Presentation metadata is attached only to the first media event so clients have one stable structured payload and duplicate renderers are avoided.
76
-
77
- Keep presentation metadata compact. Large user-visible text should stay in `body` and use the normal Matrix text chunking path.
@@ -1,150 +0,0 @@
1
- ---
2
- summary: "Per-recipient Matrix push rules for quiet finalized preview edits"
3
- read_when:
4
- - Setting up Matrix quiet streaming for self-hosted Synapse or Tuwunel
5
- - Users want notifications only on finished blocks, not on every preview edit
6
- title: "Matrix push rules for quiet previews"
7
- ---
8
-
9
- When `channels.matrix.streaming` is `"quiet"`, FengMing edits a single preview event in place and marks the finalized edit with a custom content flag. Matrix clients notify on the final edit only if a per-user push rule matches that flag. This page is for operators who self-host Matrix and want to install that rule for each recipient account.
10
-
11
- If you only want stock Matrix notification behavior, use `streaming: "partial"` or leave streaming off. See [Matrix channel setup](/channels/matrix#streaming-previews).
12
-
13
- ## Prerequisites
14
-
15
- - recipient user = the person who should receive the notification
16
- - bot user = the FengMing Matrix account that sends the reply
17
- - use the recipient user's access token for the API calls below
18
- - match `sender` in the push rule against the bot user's full MXID
19
- - the recipient account must already have working pushers — quiet preview rules only work when normal Matrix push delivery is healthy
20
-
21
- ## Steps
22
-
23
- <Steps>
24
- <Step title="Configure quiet previews">
25
-
26
- ```json5
27
- {
28
- channels: {
29
- matrix: {
30
- streaming: "quiet",
31
- },
32
- },
33
- }
34
- ```
35
-
36
- </Step>
37
-
38
- <Step title="Get the recipient's access token">
39
- Reuse an existing client session token where possible. To mint a fresh one:
40
-
41
- ```bash
42
- curl -sS -X POST \
43
- "https://matrix.example.org/_matrix/client/v3/login" \
44
- -H "Content-Type: application/json" \
45
- --data '{
46
- "type": "m.login.password",
47
- "identifier": { "type": "m.id.user", "user": "@alice:example.org" },
48
- "password": "REDACTED"
49
- }'
50
- ```
51
-
52
- </Step>
53
-
54
- <Step title="Verify pushers exist">
55
-
56
- ```bash
57
- curl -sS \
58
- -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
59
- "https://matrix.example.org/_matrix/client/v3/pushers"
60
- ```
61
-
62
- If no pushers come back, fix normal Matrix push delivery for this account before continuing.
63
-
64
- </Step>
65
-
66
- <Step title="Install the override push rule">
67
- FengMing marks finalized text-only preview edits with `content["com.fengming.finalized_preview"] = true`. Install a rule that matches that marker plus the bot MXID as sender:
68
-
69
- ```bash
70
- curl -sS -X PUT \
71
- "https://matrix.example.org/_matrix/client/v3/pushrules/global/override/fengming-finalized-preview-botname" \
72
- -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
73
- -H "Content-Type: application/json" \
74
- --data '{
75
- "conditions": [
76
- { "kind": "event_match", "key": "type", "pattern": "m.room.message" },
77
- {
78
- "kind": "event_property_is",
79
- "key": "content.m\\.relates_to.rel_type",
80
- "value": "m.replace"
81
- },
82
- {
83
- "kind": "event_property_is",
84
- "key": "content.com\\.fengming\\.finalized_preview",
85
- "value": true
86
- },
87
- { "kind": "event_match", "key": "sender", "pattern": "@bot:example.org" }
88
- ],
89
- "actions": [
90
- "notify",
91
- { "set_tweak": "sound", "value": "default" },
92
- { "set_tweak": "highlight", "value": false }
93
- ]
94
- }'
95
- ```
96
-
97
- Replace before running:
98
-
99
- - `https://matrix.example.org`: your homeserver base URL
100
- - `$USER_ACCESS_TOKEN`: the recipient user's access token
101
- - `fengming-finalized-preview-botname`: a rule ID unique per bot per recipient (pattern: `fengming-finalized-preview-<botname>`)
102
- - `@bot:example.org`: your FengMing bot MXID, not the recipient's
103
-
104
- </Step>
105
-
106
- <Step title="Verify">
107
-
108
- ```bash
109
- curl -sS \
110
- -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
111
- "https://matrix.example.org/_matrix/client/v3/pushrules/global/override/fengming-finalized-preview-botname"
112
- ```
113
-
114
- Then test a streamed reply. In quiet mode the room shows a quiet draft preview and notifies once the block or turn finishes.
115
-
116
- </Step>
117
- </Steps>
118
-
119
- To remove the rule later, `DELETE` the same rule URL with the recipient's token.
120
-
121
- ## Multi-bot notes
122
-
123
- Push rules are keyed by `ruleId`: re-running `PUT` against the same ID updates a single rule. For multiple FengMing bots notifying the same recipient, create one rule per bot with a distinct sender match.
124
-
125
- New user-defined `override` rules are inserted ahead of default suppress rules, so no extra ordering parameter is needed. The rule only affects text-only preview edits that can be finalized in place; media fallbacks and stale-preview fallbacks use normal Matrix delivery.
126
-
127
- ## Homeserver notes
128
-
129
- <AccordionGroup>
130
- <Accordion title="Synapse">
131
- No special `homeserver.yaml` change is required. If normal Matrix notifications already reach this user, the recipient token + `pushrules` call above is the main setup step.
132
-
133
- If you run Synapse behind a reverse proxy or workers, make sure `/_matrix/client/.../pushrules/` reaches Synapse correctly. Push delivery is handled by the main process or `synapse.app.pusher` / configured pusher workers — ensure those are healthy.
134
-
135
- The rule uses the `event_property_is` push-rule condition (MSC3758, push rule v1.10), which was added to Synapse in 2023. Older Synapse releases accept the `PUT pushrules/...` call but silently never match the condition — upgrade Synapse if no notification arrives on a finalized preview edit.
136
-
137
- </Accordion>
138
-
139
- <Accordion title="Tuwunel">
140
- Same flow as Synapse; no Tuwunel-specific config is needed for the finalized preview marker.
141
-
142
- If notifications disappear while the user is active on another device, check whether `suppress_push_when_active` is enabled. Tuwunel added this option in 1.4.2 (September 2025) and it can intentionally suppress pushes to other devices while one device is active.
143
-
144
- </Accordion>
145
- </AccordionGroup>
146
-
147
- ## Related
148
-
149
- - [Matrix channel setup](/channels/matrix)
150
- - [Streaming concepts](/concepts/streaming)