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,826 +0,0 @@
1
- ---
2
- summary: "Gateway WebSocket protocol: handshake, frames, versioning"
3
- read_when:
4
- - Implementing or updating gateway WS clients
5
- - Debugging protocol mismatches or connect failures
6
- - Regenerating protocol schema/models
7
- title: "Gateway protocol"
8
- ---
9
-
10
- The Gateway WS protocol is the **single control plane + node transport** for
11
- FengMing. All clients (CLI, web UI, macOS app, iOS/Android nodes, headless
12
- nodes) connect over WebSocket and declare their **role** + **scope** at
13
- handshake time.
14
-
15
- ## Transport
16
-
17
- - WebSocket, text frames with JSON payloads.
18
- - First frame **must** be a `connect` request.
19
- - Pre-connect frames are capped at 64 KiB. After a successful handshake, clients
20
- should follow the `hello-ok.policy.maxPayload` and
21
- `hello-ok.policy.maxBufferedBytes` limits. With diagnostics enabled,
22
- oversized inbound frames and slow outbound buffers emit `payload.large` events
23
- before the gateway closes or drops the affected frame. These events keep
24
- sizes, limits, surfaces, and safe reason codes. They do not keep the message
25
- body, attachment contents, raw frame body, tokens, cookies, or secret values.
26
-
27
- ## Handshake (connect)
28
-
29
- Gateway → Client (pre-connect challenge):
30
-
31
- ```json
32
- {
33
- "type": "event",
34
- "event": "connect.challenge",
35
- "payload": { "nonce": "…", "ts": 1737264000000 }
36
- }
37
- ```
38
-
39
- Client → Gateway:
40
-
41
- ```json
42
- {
43
- "type": "req",
44
- "id": "…",
45
- "method": "connect",
46
- "params": {
47
- "minProtocol": 3,
48
- "maxProtocol": 4,
49
- "client": {
50
- "id": "cli",
51
- "version": "1.2.3",
52
- "platform": "macos",
53
- "mode": "operator"
54
- },
55
- "role": "operator",
56
- "scopes": ["operator.read", "operator.write"],
57
- "caps": [],
58
- "commands": [],
59
- "permissions": {},
60
- "auth": { "token": "…" },
61
- "locale": "en-US",
62
- "userAgent": "fengming-cli/1.2.3",
63
- "device": {
64
- "id": "device_fingerprint",
65
- "publicKey": "…",
66
- "signature": "…",
67
- "signedAt": 1737264000000,
68
- "nonce": "…"
69
- }
70
- }
71
- }
72
- ```
73
-
74
- Gateway → Client:
75
-
76
- ```json
77
- {
78
- "type": "res",
79
- "id": "…",
80
- "ok": true,
81
- "payload": {
82
- "type": "hello-ok",
83
- "protocol": 4,
84
- "server": { "version": "…", "connId": "…" },
85
- "features": { "methods": ["…"], "events": ["…"] },
86
- "snapshot": { "…": "…" },
87
- "auth": {
88
- "role": "operator",
89
- "scopes": ["operator.read", "operator.write"]
90
- },
91
- "policy": {
92
- "maxPayload": 26214400,
93
- "maxBufferedBytes": 52428800,
94
- "tickIntervalMs": 15000
95
- }
96
- }
97
- }
98
- ```
99
-
100
- While the Gateway is still finishing startup sidecars, the `connect` request can
101
- return a retryable `UNAVAILABLE` error with `details.reason` set to
102
- `"startup-sidecars"` and `retryAfterMs`. Clients should retry that response
103
- within their overall connection budget instead of surfacing it as a terminal
104
- handshake failure.
105
-
106
- `server`, `features`, `snapshot`, and `policy` are all required by the schema
107
- (`packages/gateway-protocol/src/schema/frames.ts`). `auth` is also required and reports
108
- the negotiated role/scopes. `pluginSurfaceUrls` is optional and maps plugin
109
- surface names, such as `canvas`, to scoped hosted URLs.
110
-
111
- Scoped plugin surface URLs may expire. Nodes can call
112
- `node.pluginSurface.refresh` with `{ "surface": "canvas" }` to receive a fresh
113
- entry in `pluginSurfaceUrls`. The experimental Canvas plugin refactor does not
114
- support the deprecated `canvasHostUrl`, `canvasCapability`, or
115
- `node.canvas.capability.refresh` compatibility path; current native clients and
116
- gateways must use plugin surfaces.
117
-
118
- When no device token is issued, `hello-ok.auth` reports the negotiated
119
- permissions without token fields:
120
-
121
- ```json
122
- {
123
- "auth": {
124
- "role": "operator",
125
- "scopes": ["operator.read", "operator.write"]
126
- }
127
- }
128
- ```
129
-
130
- Trusted same-process backend clients (`client.id: "gateway-client"`,
131
- `client.mode: "backend"`) may omit `device` on direct loopback connections when
132
- they authenticate with the shared gateway token/password. This path is reserved
133
- for internal control-plane RPCs and keeps stale CLI/device pairing baselines from
134
- blocking local backend work such as subagent session updates. Remote clients,
135
- browser-origin clients, node clients, and explicit device-token/device-identity
136
- clients still use the normal pairing and scope-upgrade checks.
137
-
138
- When a device token is issued, `hello-ok` also includes:
139
-
140
- ```json
141
- {
142
- "auth": {
143
- "deviceToken": "…",
144
- "role": "operator",
145
- "scopes": ["operator.read", "operator.write"]
146
- }
147
- }
148
- ```
149
-
150
- Built-in QR/setup-code bootstrap is a fresh mobile handoff path. A successful
151
- baseline setup-code connect returns a primary node token plus one bounded
152
- operator token:
153
-
154
- ```json
155
- {
156
- "auth": {
157
- "deviceToken": "…",
158
- "role": "node",
159
- "scopes": [],
160
- "deviceTokens": [
161
- {
162
- "deviceToken": "…",
163
- "role": "operator",
164
- "scopes": ["operator.approvals", "operator.read", "operator.talk.secrets", "operator.write"]
165
- }
166
- ]
167
- }
168
- }
169
- ```
170
-
171
- The operator handoff is intentionally bounded so QR onboarding can start the
172
- mobile operator loop without granting `operator.admin` or `operator.pairing`.
173
- It does include `operator.talk.secrets` so the native client can read the Talk
174
- configuration it needs after bootstrap. Broader admin and pairing scopes require
175
- a separate approved operator pairing or token flow. Clients should persist
176
- `hello-ok.auth.deviceTokens` only
177
- when the connect used bootstrap auth on trusted transport such as `wss://` or
178
- loopback/local pairing.
179
-
180
- ### Node example
181
-
182
- ```json
183
- {
184
- "type": "req",
185
- "id": "…",
186
- "method": "connect",
187
- "params": {
188
- "minProtocol": 3,
189
- "maxProtocol": 4,
190
- "client": {
191
- "id": "ios-node",
192
- "version": "1.2.3",
193
- "platform": "ios",
194
- "mode": "node"
195
- },
196
- "role": "node",
197
- "scopes": [],
198
- "caps": ["camera", "canvas", "screen", "location", "voice"],
199
- "commands": ["camera.snap", "canvas.navigate", "screen.record", "location.get"],
200
- "permissions": { "camera.capture": true, "screen.record": false },
201
- "auth": { "token": "…" },
202
- "locale": "en-US",
203
- "userAgent": "fengming-ios/1.2.3",
204
- "device": {
205
- "id": "device_fingerprint",
206
- "publicKey": "…",
207
- "signature": "…",
208
- "signedAt": 1737264000000,
209
- "nonce": "…"
210
- }
211
- }
212
- }
213
- ```
214
-
215
- ## Framing
216
-
217
- - **Request**: `{type:"req", id, method, params}`
218
- - **Response**: `{type:"res", id, ok, payload|error}`
219
- - **Event**: `{type:"event", event, payload, seq?, stateVersion?}`
220
-
221
- Side-effecting methods require **idempotency keys** (see schema).
222
-
223
- ## Roles + scopes
224
-
225
- For the full operator scope model, approval-time checks, and shared-secret
226
- semantics, see [Operator scopes](/gateway/operator-scopes).
227
-
228
- ### Roles
229
-
230
- - `operator` = control plane client (CLI/UI/automation).
231
- - `node` = capability host (camera/screen/canvas/system.run).
232
-
233
- ### Scopes (operator)
234
-
235
- Common scopes:
236
-
237
- - `operator.read`
238
- - `operator.write`
239
- - `operator.admin`
240
- - `operator.approvals`
241
- - `operator.pairing`
242
- - `operator.talk.secrets`
243
-
244
- `talk.config` with `includeSecrets: true` requires `operator.talk.secrets`
245
- (or `operator.admin`).
246
-
247
- Plugin-registered gateway RPC methods may request their own operator scope, but
248
- reserved core admin prefixes (`config.*`, `exec.approvals.*`, `wizard.*`,
249
- `update.*`) always resolve to `operator.admin`.
250
-
251
- Method scope is only the first gate. Some slash commands reached through
252
- `chat.send` apply stricter command-level checks on top. For example, persistent
253
- `/config set` and `/config unset` writes require `operator.admin`.
254
-
255
- `node.pair.approve` also has an extra approval-time scope check on top of the
256
- base method scope:
257
-
258
- - commandless requests: `operator.pairing`
259
- - requests with non-exec node commands: `operator.pairing` + `operator.write`
260
- - requests that include `system.run`, `system.run.prepare`, or `system.which`:
261
- `operator.pairing` + `operator.admin`
262
-
263
- ### Caps/commands/permissions (node)
264
-
265
- Nodes declare capability claims at connect time:
266
-
267
- - `caps`: high-level capability categories such as `camera`, `canvas`, `screen`,
268
- `location`, `voice`, and `talk`.
269
- - `commands`: command allowlist for invoke.
270
- - `permissions`: granular toggles (e.g. `screen.record`, `camera.capture`).
271
-
272
- The Gateway treats these as **claims** and enforces server-side allowlists.
273
-
274
- ## Presence
275
-
276
- - `system-presence` returns entries keyed by device identity.
277
- - Presence entries include `deviceId`, `roles`, and `scopes` so UIs can show a single row per device
278
- even when it connects as both **operator** and **node**.
279
- - `node.list` includes optional `lastSeenAtMs` and `lastSeenReason` fields. Connected nodes report
280
- their current connection time as `lastSeenAtMs` with reason `connect`; paired nodes can also report
281
- durable background presence when a trusted node event updates their pairing metadata.
282
-
283
- ### Node background alive event
284
-
285
- Nodes may call `node.event` with `event: "node.presence.alive"` to record that a paired node was
286
- alive during a background wake without marking it connected.
287
-
288
- ```json
289
- {
290
- "event": "node.presence.alive",
291
- "payloadJSON": "{\"trigger\":\"silent_push\",\"sentAtMs\":1737264000000,\"displayName\":\"Peter's iPhone\",\"version\":\"2026.4.28\",\"platform\":\"iOS 18.4.0\",\"deviceFamily\":\"iPhone\",\"modelIdentifier\":\"iPhone17,1\",\"pushTransport\":\"relay\"}"
292
- }
293
- ```
294
-
295
- `trigger` is a closed enum: `background`, `silent_push`, `bg_app_refresh`,
296
- `significant_location`, `manual`, or `connect`. Unknown trigger strings are normalized to
297
- `background` by the gateway before persistence. The event is durable only for authenticated node
298
- device sessions; device-less or unpaired sessions return `handled: false`.
299
-
300
- Successful gateways return a structured result:
301
-
302
- ```json
303
- {
304
- "ok": true,
305
- "event": "node.presence.alive",
306
- "handled": true,
307
- "reason": "persisted"
308
- }
309
- ```
310
-
311
- Older gateways may still return `{ "ok": true }` for `node.event`; clients should treat that as an
312
- acknowledged RPC, not as durable presence persistence.
313
-
314
- ## Broadcast event scoping
315
-
316
- Server-pushed WebSocket broadcast events are scope-gated so that pairing-scoped or node-only sessions do not passively receive session content.
317
-
318
- - **Chat, agent, and tool-result frames** (including streamed `agent` events and tool call results) require at least `operator.read`. Sessions without `operator.read` skip these frames entirely.
319
- - **Plugin-defined `plugin.*` broadcasts** are gated to `operator.write` or `operator.admin`, depending on how the plugin registered them.
320
- - **Status and transport events** (`heartbeat`, `presence`, `tick`, connect/disconnect lifecycle, etc.) remain unrestricted so transport health stays observable to every authenticated session.
321
- - **Unknown broadcast event families** are scope-gated by default (fail-closed) unless a registered handler explicitly relaxes them.
322
-
323
- Each client connection keeps its own per-client sequence number so broadcasts preserve monotonic ordering on that socket even when different clients see different scope-filtered subsets of the event stream.
324
-
325
- ## Common RPC method families
326
-
327
- The public WS surface is broader than the handshake/auth examples above. This
328
- is not a generated dump — `hello-ok.features.methods` is a conservative
329
- discovery list built from `src/gateway/server-methods-list.ts` plus loaded
330
- plugin/channel method exports. Treat it as feature discovery, not a full
331
- enumeration of `src/gateway/server-methods/*.ts`.
332
-
333
- <AccordionGroup>
334
- <Accordion title="System and identity">
335
- - `health` returns the cached or freshly probed gateway health snapshot.
336
- - `diagnostics.stability` returns the recent bounded diagnostic stability recorder. It keeps operational metadata such as event names, counts, byte sizes, memory readings, queue/session state, channel/plugin names, and session ids. It does not keep chat text, webhook bodies, tool outputs, raw request or response bodies, tokens, cookies, or secret values. Operator read scope is required.
337
- - `status` returns the `/status`-style gateway summary; sensitive fields are included only for admin-scoped operator clients.
338
- - `gateway.identity.get` returns the gateway device identity used by relay and pairing flows.
339
- - `system-presence` returns the current presence snapshot for connected operator/node devices.
340
- - `system-event` appends a system event and can update/broadcast presence context.
341
- - `last-heartbeat` returns the latest persisted heartbeat event.
342
- - `set-heartbeats` toggles heartbeat processing on the gateway.
343
-
344
- </Accordion>
345
-
346
- <Accordion title="Models and usage">
347
- - `models.list` returns the runtime-allowed model catalog. Pass `{ "view": "configured" }` for picker-sized configured models (`agents.defaults.models` first, then `models.providers.*.models`), or `{ "view": "all" }` for the full catalog.
348
- - `usage.status` returns provider usage windows/remaining quota summaries.
349
- - `usage.cost` returns aggregated cost usage summaries for a date range.
350
- Pass `agentId` for one agent, or `agentScope: "all"` to aggregate configured agents.
351
- - `doctor.memory.status` returns vector-memory / cached embedding readiness for the active default agent workspace. Pass `{ "probe": true }` or `{ "deep": true }` only when the caller explicitly wants a live embedding provider ping.
352
- - `doctor.memory.remHarness` returns a bounded, read-only REM harness preview for remote control-plane clients. It can include workspace paths, memory snippets, rendered grounded markdown, and deep promotion candidates, so callers need `operator.read`.
353
- - `sessions.usage` returns per-session usage summaries. Pass `agentId` for one
354
- agent, or `agentScope: "all"` to list configured agents together.
355
- - `sessions.usage.timeseries` returns timeseries usage for one session.
356
- - `sessions.usage.logs` returns usage log entries for one session.
357
-
358
- </Accordion>
359
-
360
- <Accordion title="Channels and login helpers">
361
- - `channels.status` returns built-in + bundled channel/plugin status summaries.
362
- - `channels.logout` logs out a specific channel/account where the channel supports logout.
363
- - `web.login.start` starts a QR/web login flow for the current QR-capable web channel provider.
364
- - `web.login.wait` waits for that QR/web login flow to complete and starts the channel on success.
365
- - `push.test` sends a test APNs push to a registered iOS node.
366
- - `voicewake.get` returns the stored wake-word triggers.
367
- - `voicewake.set` updates wake-word triggers and broadcasts the change.
368
-
369
- </Accordion>
370
-
371
- <Accordion title="Messaging and logs">
372
- - `send` is the direct outbound-delivery RPC for channel/account/thread-targeted sends outside the chat runner.
373
- - `logs.tail` returns the configured gateway file-log tail with cursor/limit and max-byte controls.
374
-
375
- </Accordion>
376
-
377
- <Accordion title="Talk and TTS">
378
- - `talk.catalog` returns the read-only Talk provider catalog for speech, streaming transcription, and realtime voice. It includes provider ids, labels, configured state, exposed model/voice ids, canonical modes, transports, brain strategies, and realtime audio/capability flags without returning provider secrets or mutating global config.
379
- - `talk.config` returns the effective Talk config payload; `includeSecrets` requires `operator.talk.secrets` (or `operator.admin`).
380
- - `talk.session.create` creates a Gateway-owned Talk session for `realtime/gateway-relay`, `transcription/gateway-relay`, or `stt-tts/managed-room`. For `stt-tts/managed-room`, `operator.write` callers that pass `sessionKey` must also pass `spawnedBy` for scoped session-key visibility; unscoped `sessionKey` creation and `brain: "direct-tools"` require `operator.admin`.
381
- - `talk.session.join` validates a managed-room session token, emits `session.ready` or `session.replaced` events as needed, and returns room/session metadata plus recent Talk events without the plaintext token or stored token hash.
382
- - `talk.session.appendAudio` appends base64 PCM input audio to Gateway-owned realtime relay and transcription sessions.
383
- - `talk.session.startTurn`, `talk.session.endTurn`, and `talk.session.cancelTurn` drive managed-room turn lifecycle with stale-turn rejection before state is cleared.
384
- - `talk.session.cancelOutput` stops assistant audio output, primarily for VAD-gated barge-in in Gateway relay sessions.
385
- - `talk.session.submitToolResult` completes a provider tool call emitted by a Gateway-owned realtime relay session. Pass `options: { willContinue: true }` for interim tool output when a final result will follow, or `options: { suppressResponse: true }` when the tool result should satisfy the provider call without starting another realtime assistant response.
386
- - `talk.session.steer` sends active-run voice control into a Gateway-owned agent-backed Talk session. It accepts `{ sessionId, text, mode? }`, where `mode` is `status`, `steer`, `cancel`, or `followup`; omitted mode is classified from the spoken text.
387
- - `talk.session.close` closes a Gateway-owned relay, transcription, or managed-room session and emits terminal Talk events.
388
- - `talk.mode` sets/broadcasts the current Talk mode state for WebChat/Control UI clients.
389
- - `talk.client.create` creates a client-owned realtime provider session using `webrtc` or `provider-websocket` while the Gateway owns config, credentials, instructions, and tool policy.
390
- - `talk.client.toolCall` lets client-owned realtime transports forward provider tool calls to Gateway policy. The first supported tool is `fengming_agent_consult`; clients receive a run id and wait for normal chat lifecycle events before submitting the provider-specific tool result.
391
- - `talk.client.steer` sends active-run voice control for client-owned realtime transports. The Gateway resolves the active embedded run from `sessionKey` and returns a structured accepted/rejected result instead of silently dropping steering.
392
- - `talk.event` is the single Talk event channel for realtime, transcription, STT/TTS, managed-room, telephony, and meeting adapters.
393
- - `talk.speak` synthesizes speech through the active Talk speech provider.
394
- - `tts.status` returns TTS enabled state, active provider, fallback providers, and provider config state.
395
- - `tts.providers` returns the visible TTS provider inventory.
396
- - `tts.enable` and `tts.disable` toggle TTS prefs state.
397
- - `tts.setProvider` updates the preferred TTS provider.
398
- - `tts.convert` runs one-shot text-to-speech conversion.
399
-
400
- </Accordion>
401
-
402
- <Accordion title="Secrets, config, update, and wizard">
403
- - `secrets.reload` re-resolves active SecretRefs and swaps runtime secret state only on full success.
404
- - `secrets.resolve` resolves command-target secret assignments for a specific command/target set.
405
- - `config.get` returns the current config snapshot and hash.
406
- - `config.set` writes a validated config payload.
407
- - `config.patch` merges a partial config update.
408
- - `config.apply` validates + replaces the full config payload.
409
- - `config.schema` returns the live config schema payload used by Control UI and CLI tooling: schema, `uiHints`, version, and generation metadata, including plugin + channel schema metadata when the runtime can load it. The schema includes field `title` / `description` metadata derived from the same labels and help text used by the UI, including nested object, wildcard, array-item, and `anyOf` / `oneOf` / `allOf` composition branches when matching field documentation exists.
410
- - `config.schema.lookup` returns a path-scoped lookup payload for one config path: normalized path, a shallow schema node, matched hint + `hintPath`, optional `reloadKind`, and immediate child summaries for UI/CLI drill-down. `reloadKind` is one of `restart`, `hot`, or `none` and mirrors the Gateway config reload planner for the requested path. Lookup schema nodes keep the user-facing docs and common validation fields (`title`, `description`, `type`, `enum`, `const`, `format`, `pattern`, numeric/string/array/object bounds, and flags like `additionalProperties`, `deprecated`, `readOnly`, `writeOnly`). Child summaries expose `key`, normalized `path`, `type`, `required`, `hasChildren`, optional `reloadKind`, plus the matched `hint` / `hintPath`.
411
- - `update.run` runs the gateway update flow and schedules a restart only when the update itself succeeded; callers with a session can include `continuationMessage` so startup resumes one follow-up agent turn through the restart continuation queue. Package-manager updates from the control plane use a detached managed-service handoff instead of replacing the package tree inside the live Gateway. A started handoff returns `ok: true` with `result.reason: "managed-service-handoff-started"` and `handoff.status: "started"`; unavailable or failed handoffs return `ok: false` with `managed-service-handoff-unavailable` or `managed-service-handoff-failed`, plus `handoff.command` when a manual shell update is required. During a started handoff, the restart sentinel may briefly report `stats.reason: "restart-health-pending"`; the continuation is delayed until the CLI verifies the restarted Gateway and writes the final `ok` sentinel.
412
- - `update.status` returns the latest cached update restart sentinel, including the post-restart running version when available.
413
- - `wizard.start`, `wizard.next`, `wizard.status`, and `wizard.cancel` expose the onboarding wizard over WS RPC.
414
-
415
- </Accordion>
416
-
417
- <Accordion title="Agent and workspace helpers">
418
- - `agents.list` returns configured agent entries, including effective model and runtime metadata.
419
- - `agents.create`, `agents.update`, and `agents.delete` manage agent records and workspace wiring.
420
- - `agents.files.list`, `agents.files.get`, and `agents.files.set` manage the bootstrap workspace files exposed for an agent.
421
- - `tasks.list`, `tasks.get`, and `tasks.cancel` expose the Gateway task ledger to SDK and operator clients.
422
- - `artifacts.list`, `artifacts.get`, and `artifacts.download` expose transcript-derived artifact summaries and downloads for an explicit `sessionKey`, `runId`, or `taskId` scope. Run and task queries resolve the owning session server-side and only return transcript media with matching provenance; unsafe or local URL sources return unsupported downloads instead of fetching server-side.
423
- - `environments.list` and `environments.status` expose read-only Gateway-local and node environment discovery for SDK clients.
424
- - `agent.identity.get` returns the effective assistant identity for an agent or session.
425
- - `agent.wait` waits for a run to finish and returns the terminal snapshot when available.
426
-
427
- </Accordion>
428
-
429
- <Accordion title="Session control">
430
- - `sessions.list` returns the current session index, including per-row `agentRuntime` metadata when an agent runtime backend is configured.
431
- - `sessions.subscribe` and `sessions.unsubscribe` toggle session change event subscriptions for the current WS client.
432
- - `sessions.messages.subscribe` and `sessions.messages.unsubscribe` toggle transcript/message event subscriptions for one session.
433
- - `sessions.preview` returns bounded transcript previews for specific session keys.
434
- - `sessions.describe` returns one Gateway session row for an exact session key.
435
- - `sessions.resolve` resolves or canonicalizes a session target.
436
- - `sessions.create` creates a new session entry.
437
- - `sessions.send` sends a message into an existing session.
438
- - `sessions.steer` is the interrupt-and-steer variant for an active session.
439
- - `sessions.abort` aborts active work for a session. A caller may pass `key` plus optional `runId`, or pass `runId` alone for active runs the Gateway can resolve to a session.
440
- - `sessions.patch` updates session metadata/overrides and reports the resolved canonical model plus effective `agentRuntime`.
441
- - `sessions.reset`, `sessions.delete`, and `sessions.compact` perform session maintenance.
442
- - `sessions.get` returns the full stored session row.
443
- - Chat execution still uses `chat.history`, `chat.send`, `chat.abort`, and `chat.inject`. `chat.history` is display-normalized for UI clients: inline directive tags are stripped from visible text, plain-text tool-call XML payloads (including `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>`, and truncated tool-call blocks) and leaked ASCII/full-width model control tokens are stripped, pure silent-token assistant rows such as exact `NO_REPLY` / `no_reply` are omitted, and oversized rows can be replaced with placeholders.
444
-
445
- </Accordion>
446
-
447
- <Accordion title="Device pairing and device tokens">
448
- - `device.pair.list` returns pending and approved paired devices.
449
- - `device.pair.approve`, `device.pair.reject`, and `device.pair.remove` manage device-pairing records.
450
- - `device.token.rotate` rotates a paired device token within its approved role and caller scope bounds.
451
- - `device.token.revoke` revokes a paired device token within its approved role and caller scope bounds.
452
-
453
- </Accordion>
454
-
455
- <Accordion title="Node pairing, invoke, and pending work">
456
- - `node.pair.request`, `node.pair.list`, `node.pair.approve`, `node.pair.reject`, `node.pair.remove`, and `node.pair.verify` cover node pairing and bootstrap verification.
457
- - `node.list` and `node.describe` return known/connected node state.
458
- - `node.rename` updates a paired node label.
459
- - `node.invoke` forwards a command to a connected node.
460
- - `node.invoke.result` returns the result for an invoke request.
461
- - `node.event` carries node-originated events back into the gateway.
462
- - `node.pending.pull` and `node.pending.ack` are the connected-node queue APIs.
463
- - `node.pending.enqueue` and `node.pending.drain` manage durable pending work for offline/disconnected nodes.
464
-
465
- </Accordion>
466
-
467
- <Accordion title="Approval families">
468
- - `exec.approval.request`, `exec.approval.get`, `exec.approval.list`, and `exec.approval.resolve` cover one-shot exec approval requests plus pending approval lookup/replay.
469
- - `exec.approval.waitDecision` waits on one pending exec approval and returns the final decision (or `null` on timeout).
470
- - `exec.approvals.get` and `exec.approvals.set` manage gateway exec approval policy snapshots.
471
- - `exec.approvals.node.get` and `exec.approvals.node.set` manage node-local exec approval policy via node relay commands.
472
- - `plugin.approval.request`, `plugin.approval.list`, `plugin.approval.waitDecision`, and `plugin.approval.resolve` cover plugin-defined approval flows.
473
-
474
- </Accordion>
475
-
476
- <Accordion title="Automation, skills, and tools">
477
- - Automation: `wake` schedules an immediate or next-heartbeat wake text injection; `cron.get`, `cron.list`, `cron.status`, `cron.add`, `cron.update`, `cron.remove`, `cron.run`, `cron.runs` manage scheduled work.
478
- - `cron.run` remains an enqueue-style RPC for manual runs. Clients that need completion semantics should read the returned `runId` and poll `cron.runs`.
479
- - `cron.runs` accepts an optional non-empty `runId` filter so clients can follow one queued manual run without racing against other history entries for the same job.
480
- - Skills and tools: `commands.list`, `skills.*`, `tools.catalog`, `tools.effective`, `tools.invoke`.
481
-
482
- </Accordion>
483
- </AccordionGroup>
484
-
485
- ### Common event families
486
-
487
- - `chat`: UI chat updates such as `chat.inject` and other transcript-only chat
488
- events. In protocol v4, delta payloads carry `deltaText`; `message` remains
489
- the cumulative assistant snapshot. Non-prefix replacements set `replace=true`
490
- and use `deltaText` as the replacement text.
491
- - `session.message`, `session.operation`, and `session.tool`: transcript,
492
- in-flight session operation, and event-stream updates for a subscribed
493
- session.
494
- - `sessions.changed`: session index or metadata changed.
495
- - `presence`: system presence snapshot updates.
496
- - `tick`: periodic keepalive / liveness event.
497
- - `health`: gateway health snapshot update.
498
- - `heartbeat`: heartbeat event stream update.
499
- - `cron`: cron run/job change event.
500
- - `shutdown`: gateway shutdown notification.
501
- - `node.pair.requested` / `node.pair.resolved`: node pairing lifecycle.
502
- - `node.invoke.request`: node invoke request broadcast.
503
- - `device.pair.requested` / `device.pair.resolved`: paired-device lifecycle.
504
- - `voicewake.changed`: wake-word trigger config changed.
505
- - `exec.approval.requested` / `exec.approval.resolved`: exec approval
506
- lifecycle.
507
- - `plugin.approval.requested` / `plugin.approval.resolved`: plugin approval
508
- lifecycle.
509
-
510
- ### Node helper methods
511
-
512
- - Nodes may call `skills.bins` to fetch the current list of skill executables
513
- for auto-allow checks.
514
-
515
- ### Task ledger RPCs
516
-
517
- Operator clients may inspect and cancel Gateway background task records through
518
- the task ledger RPCs. These methods return sanitized task summaries, not raw
519
- runtime state.
520
-
521
- - `tasks.list` requires `operator.read`.
522
- - Params: optional `status` (`"queued"`, `"running"`, `"completed"`,
523
- `"failed"`, `"cancelled"`, or `"timed_out"`) or an array of those statuses,
524
- optional `agentId`, optional `sessionKey`, optional `limit` from `1` to
525
- `500`, and optional string `cursor`.
526
- - Result: `{ "tasks": TaskSummary[], "nextCursor"?: string }`.
527
- - `tasks.get` requires `operator.read`.
528
- - Params: `{ "taskId": string }`.
529
- - Result: `{ "task": TaskSummary }`.
530
- - Missing task ids return the Gateway not-found error shape.
531
- - `tasks.cancel` requires `operator.write`.
532
- - Params: `{ "taskId": string, "reason"?: string }`.
533
- - Result:
534
- `{ "found": boolean, "cancelled": boolean, "reason"?: string, "task"?: TaskSummary }`.
535
- - `found` reports whether the ledger had a matching task. `cancelled`
536
- reports whether the runtime accepted or recorded cancellation.
537
-
538
- `TaskSummary` includes `id`, `status`, and optional metadata such as `kind`,
539
- `runtime`, `title`, `agentId`, `sessionKey`, `childSessionKey`, `ownerKey`,
540
- `runId`, `taskId`, `flowId`, `parentTaskId`, `sourceId`, timestamps, progress,
541
- terminal summary, and sanitized error text.
542
-
543
- ### Operator helper methods
544
-
545
- - Operators may call `commands.list` (`operator.read`) to fetch the runtime
546
- command inventory for an agent.
547
- - `agentId` is optional; omit it to read the default agent workspace.
548
- - `scope` controls which surface the primary `name` targets:
549
- - `text` returns the primary text command token without the leading `/`
550
- - `native` and the default `both` path return provider-aware native names
551
- when available
552
- - `textAliases` carries exact slash aliases such as `/model` and `/m`.
553
- - `nativeName` carries the provider-aware native command name when one exists.
554
- - `provider` is optional and only affects native naming plus native plugin
555
- command availability.
556
- - `includeArgs=false` omits serialized argument metadata from the response.
557
- - Operators may call `tools.catalog` (`operator.read`) to fetch the runtime tool catalog for an
558
- agent. The response includes grouped tools and provenance metadata:
559
- - `source`: `core` or `plugin`
560
- - `pluginId`: plugin owner when `source="plugin"`
561
- - `optional`: whether a plugin tool is optional
562
- - Operators may call `tools.effective` (`operator.read`) to fetch the runtime-effective tool
563
- inventory for a session.
564
- - `sessionKey` is required.
565
- - The gateway derives trusted runtime context from the session server-side instead of accepting
566
- caller-supplied auth or delivery context.
567
- - The response is a session-scoped server-derived projection of the active inventory,
568
- including core, plugin, channel, and already-discovered MCP server tools.
569
- - `tools.effective` is read-only for MCP: it may project a warm session MCP catalog through the
570
- final tool policy, but it does not create MCP runtimes, connect transports, or issue
571
- `tools/list`. If no matching warm catalog exists, the response may include a notice such as
572
- `mcp-not-yet-connected`, `mcp-not-yet-listed`, or `mcp-stale-catalog`.
573
- - Effective tool entries use `source="core"`, `source="plugin"`, `source="channel"`, or
574
- `source="mcp"`.
575
- - Operators may call `tools.invoke` (`operator.write`) to invoke one available tool through the
576
- same gateway policy path as `/tools/invoke`.
577
- - `name` is required. `args`, `sessionKey`, `agentId`, `confirm`, and
578
- `idempotencyKey` are optional.
579
- - If both `sessionKey` and `agentId` are present, the resolved session agent must match
580
- `agentId`.
581
- - The response is an SDK-facing envelope with `ok`, `toolName`, optional `output`, and typed
582
- `error` fields. Approval or policy refusals return `ok:false` in the payload rather than
583
- bypassing the gateway tool policy pipeline.
584
- - Operators may call `skills.status` (`operator.read`) to fetch the visible
585
- skill inventory for an agent.
586
- - `agentId` is optional; omit it to read the default agent workspace.
587
- - The response includes eligibility, missing requirements, config checks, and
588
- sanitized install options without exposing raw secret values.
589
- - Operators may call `skills.search` and `skills.detail` (`operator.read`) for
590
- ClawHub discovery metadata.
591
- - Operators may call `skills.upload.begin`, `skills.upload.chunk`, and
592
- `skills.upload.commit` (`operator.admin`) to stage a private skill archive
593
- before installing it. This is a separate admin upload path for trusted clients,
594
- not the normal ClawHub skill install flow, and is disabled by default unless
595
- `skills.install.allowUploadedArchives` is enabled.
596
- - `skills.upload.begin({ kind: "skill-archive", slug, sizeBytes, sha256?, force?, idempotencyKey? })`
597
- creates an upload bound to that slug and force value.
598
- - `skills.upload.chunk({ uploadId, offset, dataBase64 })` appends bytes at
599
- the exact decoded offset.
600
- - `skills.upload.commit({ uploadId, sha256? })` verifies the final size and
601
- SHA-256. Commit only finalizes the upload; it does not install the skill.
602
- - Uploaded skill archives are zip archives containing a `SKILL.md` root. The
603
- archive's internal directory name never selects the install target.
604
- - Operators may call `skills.install` (`operator.admin`) in three modes:
605
- - ClawHub mode: `{ source: "clawhub", slug, version?, force? }` installs a
606
- skill folder into the default agent workspace `skills/` directory.
607
- - Upload mode: `{ source: "upload", uploadId, slug, force?, sha256?, timeoutMs? }`
608
- installs a committed upload into the default agent workspace `skills/<slug>`
609
- directory. The slug and force value must match the original
610
- `skills.upload.begin` request. This mode is rejected unless
611
- `skills.install.allowUploadedArchives` is enabled. The setting does not
612
- affect ClawHub installs.
613
- - Gateway installer mode: `{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }`
614
- runs a declared `metadata.fengming.install` action on the gateway host.
615
- - Operators may call `skills.update` (`operator.admin`) in two modes:
616
- - ClawHub mode updates one tracked slug or all tracked ClawHub installs in
617
- the default agent workspace.
618
- - Config mode patches `skills.entries.<skillKey>` values such as `enabled`,
619
- `apiKey`, and `env`.
620
-
621
- ### `models.list` views
622
-
623
- `models.list` accepts an optional `view` parameter:
624
-
625
- - Omitted or `"default"`: current runtime behavior. If `agents.defaults.models` is configured, the response is the allowed catalog, including dynamically discovered models for `provider/*` entries. Otherwise the response is the full Gateway catalog.
626
- - `"configured"`: picker-sized behavior. If `agents.defaults.models` is configured, it still wins, including provider-scoped discovery for `provider/*` entries. Without an allowlist, the response uses explicit `models.providers.*.models` entries, falling back to the full catalog only when no configured model rows exist.
627
- - `"all"`: full Gateway catalog, bypassing `agents.defaults.models`. Use this for diagnostics and discovery UIs, not normal model pickers.
628
-
629
- ## Exec approvals
630
-
631
- - When an exec request needs approval, the gateway broadcasts `exec.approval.requested`.
632
- - Operator clients resolve by calling `exec.approval.resolve` (requires `operator.approvals` scope).
633
- - For `host=node`, `exec.approval.request` must include `systemRunPlan` (canonical `argv`/`cwd`/`rawCommand`/session metadata). Requests missing `systemRunPlan` are rejected.
634
- - After approval, forwarded `node.invoke system.run` calls reuse that canonical
635
- `systemRunPlan` as the authoritative command/cwd/session context.
636
- - If a caller mutates `command`, `rawCommand`, `cwd`, `agentId`, or
637
- `sessionKey` between prepare and the final approved `system.run` forward, the
638
- gateway rejects the run instead of trusting the mutated payload.
639
-
640
- ## Agent delivery fallback
641
-
642
- - `agent` requests can include `deliver=true` to request outbound delivery.
643
- - `bestEffortDeliver=false` keeps strict behavior: unresolved or internal-only delivery targets return `INVALID_REQUEST`.
644
- - `bestEffortDeliver=true` allows fallback to session-only execution when no external deliverable route can be resolved (for example internal/webchat sessions or ambiguous multi-channel configs).
645
- - Final `agent` results may include `result.deliveryStatus` when delivery was
646
- requested, using the same `sent`, `suppressed`, `partial_failed`, and `failed`
647
- statuses documented for [`fengming agent --json --deliver`](/cli/agent#json-delivery-status).
648
-
649
- ## Versioning
650
-
651
- - `PROTOCOL_VERSION` lives in `packages/gateway-protocol/src/version.ts`.
652
- - Clients send `minProtocol` + `maxProtocol`; the server rejects ranges that
653
- do not include its current protocol. Current clients and servers require
654
- protocol v4.
655
- - Schemas + models are generated from TypeBox definitions:
656
- - `pnpm protocol:gen`
657
- - `pnpm protocol:gen:swift`
658
- - `pnpm protocol:check`
659
-
660
- ### Client constants
661
-
662
- The reference client in `src/gateway/client.ts` uses these defaults. Values are
663
- stable across protocol v4 and are the expected baseline for third-party clients.
664
-
665
- | Constant | Default | Source |
666
- | ----------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------ |
667
- | `PROTOCOL_VERSION` | `4` | `packages/gateway-protocol/src/version.ts` |
668
- | `MIN_CLIENT_PROTOCOL_VERSION` | `4` | `packages/gateway-protocol/src/version.ts` |
669
- | Request timeout (per RPC) | `30_000` ms | `src/gateway/client.ts` (`requestTimeoutMs`) |
670
- | Preauth / connect-challenge timeout | `15_000` ms | `src/gateway/handshake-timeouts.ts` (config/env can raise the paired server/client budget) |
671
- | Initial reconnect backoff | `1_000` ms | `src/gateway/client.ts` (`backoffMs`) |
672
- | Max reconnect backoff | `30_000` ms | `src/gateway/client.ts` (`scheduleReconnect`) |
673
- | Fast-retry clamp after device-token close | `250` ms | `src/gateway/client.ts` |
674
- | Force-stop grace before `terminate()` | `250` ms | `FORCE_STOP_TERMINATE_GRACE_MS` |
675
- | `stopAndWait()` default timeout | `1_000` ms | `STOP_AND_WAIT_TIMEOUT_MS` |
676
- | Default tick interval (pre `hello-ok`) | `30_000` ms | `src/gateway/client.ts` |
677
- | Tick-timeout close | code `4000` when silence exceeds `tickIntervalMs * 2` | `src/gateway/client.ts` |
678
- | `MAX_PAYLOAD_BYTES` | `25 * 1024 * 1024` (25 MB) | `src/gateway/server-constants.ts` |
679
-
680
- The server advertises the effective `policy.tickIntervalMs`, `policy.maxPayload`,
681
- and `policy.maxBufferedBytes` in `hello-ok`; clients should honor those values
682
- rather than the pre-handshake defaults.
683
-
684
- ## Auth
685
-
686
- - Shared-secret gateway auth uses `connect.params.auth.token` or
687
- `connect.params.auth.password`, depending on the configured auth mode.
688
- - Identity-bearing modes such as Tailscale Serve
689
- (`gateway.auth.allowTailscale: true`) or non-loopback
690
- `gateway.auth.mode: "trusted-proxy"` satisfy the connect auth check from
691
- request headers instead of `connect.params.auth.*`.
692
- - Private-ingress `gateway.auth.mode: "none"` skips shared-secret connect auth
693
- entirely; do not expose that mode on public/untrusted ingress.
694
- - After pairing, the Gateway issues a **device token** scoped to the connection
695
- role + scopes. It is returned in `hello-ok.auth.deviceToken` and should be
696
- persisted by the client for future connects.
697
- - Clients should persist the primary `hello-ok.auth.deviceToken` after any
698
- successful connect.
699
- - Reconnecting with that **stored** device token should also reuse the stored
700
- approved scope set for that token. This preserves read/probe/status access
701
- that was already granted and avoids silently collapsing reconnects to a
702
- narrower implicit admin-only scope.
703
- - Client-side connect auth assembly (`selectConnectAuth` in
704
- `src/gateway/client.ts`):
705
- - `auth.password` is orthogonal and is always forwarded when set.
706
- - `auth.token` is populated in priority order: explicit shared token first,
707
- then an explicit `deviceToken`, then a stored per-device token (keyed by
708
- `deviceId` + `role`).
709
- - `auth.bootstrapToken` is sent only when none of the above resolved an
710
- `auth.token`. A shared token or any resolved device token suppresses it.
711
- - Auto-promotion of a stored device token on the one-shot
712
- `AUTH_TOKEN_MISMATCH` retry is gated to **trusted endpoints only** —
713
- loopback, or `wss://` with a pinned `tlsFingerprint`. Public `wss://`
714
- without pinning does not qualify.
715
- - Built-in setup-code bootstrap returns the primary node
716
- `hello-ok.auth.deviceToken` plus a bounded operator token in
717
- `hello-ok.auth.deviceTokens` for trusted mobile handoff. The operator token
718
- includes `operator.talk.secrets` for native Talk configuration reads and
719
- excludes `operator.admin` and `operator.pairing`.
720
- - While a non-baseline setup-code bootstrap is waiting for approval, `PAIRING_REQUIRED`
721
- details include `recommendedNextStep: "wait_then_retry"`, `retryable: true`,
722
- and `pauseReconnect: false`. Clients should keep reconnecting with the same
723
- bootstrap token until the request is approved or the token becomes invalid.
724
- - Persist `hello-ok.auth.deviceTokens` only when the connect used bootstrap auth
725
- on a trusted transport such as `wss://` or loopback/local pairing.
726
- - If a client supplies an **explicit** `deviceToken` or explicit `scopes`, that
727
- caller-requested scope set remains authoritative; cached scopes are only
728
- reused when the client is reusing the stored per-device token.
729
- - Device tokens can be rotated/revoked via `device.token.rotate` and
730
- `device.token.revoke` (requires `operator.pairing` scope). Rotating or
731
- revoking a node or other non-operator role also requires `operator.admin`.
732
- - `device.token.rotate` returns rotation metadata. It echoes the replacement
733
- bearer token only for same-device calls that are already authenticated with
734
- that device token, so token-only clients can persist their replacement before
735
- reconnecting. Shared/admin rotations do not echo the bearer token.
736
- - Token issuance, rotation, and revocation stay bounded to the approved role set
737
- recorded in that device's pairing entry; token mutation cannot expand or
738
- target a device role that pairing approval never granted.
739
- - For paired-device token sessions, device management is self-scoped unless the
740
- caller also has `operator.admin`: non-admin callers can manage only the
741
- operator token for their **own** device entry. Node and other non-operator
742
- token management is admin-only, even for the caller's own device.
743
- - `device.token.rotate` and `device.token.revoke` also check the target operator
744
- token scope set against the caller's current session scopes. Non-admin callers
745
- cannot rotate or revoke a broader operator token than they already hold.
746
- - Auth failures include `error.details.code` plus recovery hints:
747
- - `error.details.canRetryWithDeviceToken` (boolean)
748
- - `error.details.recommendedNextStep` (`retry_with_device_token`, `update_auth_configuration`, `update_auth_credentials`, `wait_then_retry`, `review_auth_configuration`)
749
- - Client behavior for `AUTH_TOKEN_MISMATCH`:
750
- - Trusted clients may attempt one bounded retry with a cached per-device token.
751
- - If that retry fails, clients should stop automatic reconnect loops and surface operator action guidance.
752
- - `AUTH_SCOPE_MISMATCH` means the device token was recognized but does not cover
753
- the requested role/scopes. Clients should not present this as a bad token;
754
- prompt the operator to re-pair or approve the narrower/broader scope contract.
755
-
756
- ## Device identity + pairing
757
-
758
- - Nodes should include a stable device identity (`device.id`) derived from a
759
- keypair fingerprint.
760
- - Gateways issue tokens per device + role.
761
- - Pairing approvals are required for new device IDs unless local auto-approval
762
- is enabled.
763
- - Pairing auto-approval is centered on direct local loopback connects.
764
- - FengMing also has a narrow backend/container-local self-connect path for
765
- trusted shared-secret helper flows.
766
- - Same-host tailnet or LAN connects are still treated as remote for pairing and
767
- require approval.
768
- - WS clients normally include `device` identity during `connect` (operator +
769
- node). The only device-less operator exceptions are explicit trust paths:
770
- - `gateway.controlUi.allowInsecureAuth=true` for localhost-only insecure HTTP compatibility.
771
- - successful `gateway.auth.mode: "trusted-proxy"` operator Control UI auth.
772
- - `gateway.controlUi.dangerouslyDisableDeviceAuth=true` (break-glass, severe security downgrade).
773
- - direct-loopback `gateway-client` backend RPCs authenticated with the shared
774
- gateway token/password.
775
- - Omitting device identity has scope consequences. When a Control UI connection
776
- lacks device identity, `shouldClearUnboundScopesForMissingDeviceIdentity`
777
- clears self-declared scopes to an empty set for token, password, and
778
- trusted-proxy auth. The connection is allowed on explicit trust paths, but
779
- scope-gated methods fail. The exception is local Control UI token/password
780
- sessions with `allowInsecureAuth`, which preserve scopes. For other cases,
781
- set `gateway.controlUi.dangerouslyDisableDeviceAuth=true` only as a
782
- break-glass scope-preservation path.
783
- - All connections must sign the server-provided `connect.challenge` nonce.
784
-
785
- ### Device auth migration diagnostics
786
-
787
- For legacy clients that still use pre-challenge signing behavior, `connect` now returns
788
- `DEVICE_AUTH_*` detail codes under `error.details.code` with a stable `error.details.reason`.
789
-
790
- Common migration failures:
791
-
792
- | Message | details.code | details.reason | Meaning |
793
- | --------------------------- | -------------------------------- | ------------------------ | -------------------------------------------------- |
794
- | `device nonce required` | `DEVICE_AUTH_NONCE_REQUIRED` | `device-nonce-missing` | Client omitted `device.nonce` (or sent blank). |
795
- | `device nonce mismatch` | `DEVICE_AUTH_NONCE_MISMATCH` | `device-nonce-mismatch` | Client signed with a stale/wrong nonce. |
796
- | `device signature invalid` | `DEVICE_AUTH_SIGNATURE_INVALID` | `device-signature` | Signature payload does not match v2 payload. |
797
- | `device signature expired` | `DEVICE_AUTH_SIGNATURE_EXPIRED` | `device-signature-stale` | Signed timestamp is outside allowed skew. |
798
- | `device identity mismatch` | `DEVICE_AUTH_DEVICE_ID_MISMATCH` | `device-id-mismatch` | `device.id` does not match public key fingerprint. |
799
- | `device public key invalid` | `DEVICE_AUTH_PUBLIC_KEY_INVALID` | `device-public-key` | Public key format/canonicalization failed. |
800
-
801
- Migration target:
802
-
803
- - Always wait for `connect.challenge`.
804
- - Sign the v2 payload that includes the server nonce.
805
- - Send the same nonce in `connect.params.device.nonce`.
806
- - Preferred signature payload is `v3`, which binds `platform` and `deviceFamily`
807
- in addition to device/client/role/scopes/token/nonce fields.
808
- - Legacy `v2` signatures remain accepted for compatibility, but paired-device
809
- metadata pinning still controls command policy on reconnect.
810
-
811
- ## TLS + pinning
812
-
813
- - TLS is supported for WS connections.
814
- - Clients may optionally pin the gateway cert fingerprint (see `gateway.tls`
815
- config plus `gateway.remote.tlsFingerprint` or CLI `--tls-fingerprint`).
816
-
817
- ## Scope
818
-
819
- This protocol exposes the **full gateway API** (status, channels, models, chat,
820
- agent, sessions, nodes, approvals, etc.). The exact surface is defined by the
821
- TypeBox schemas in `packages/gateway-protocol/src/schema.ts`.
822
-
823
- ## Related
824
-
825
- - [Bridge protocol](/gateway/bridge-protocol)
826
- - [Gateway runbook](/gateway)