fengming 0.3.10 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (761) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/cli-startup-metadata.json +8 -8
  4. package/dist/control-ui/assets/{activity-D-mnRThU.js → activity-wgT0-JR0.js} +2 -2
  5. package/dist/control-ui/assets/{agents-U_KSP5I_.js → agents-DG5PobrT.js} +2 -2
  6. package/dist/control-ui/assets/{channels-ohK9_G1O.js → channels-CX28oM42.js} +2 -2
  7. package/dist/control-ui/assets/{cron-6ZCzfU29.js → cron-B8ixwBqU.js} +2 -2
  8. package/dist/control-ui/assets/{debug-CSsDLg_s.js → debug-CnkYZUXy.js} +2 -2
  9. package/dist/control-ui/assets/{index-jUDczxhd.js → index-DQRZJKbO.js} +4 -4
  10. package/dist/control-ui/assets/{instances-782ZoDT4.js → instances-BE3mV1JC.js} +2 -2
  11. package/dist/control-ui/assets/{nodes-BMX16BKM.js → nodes-Cou4PWRX.js} +2 -2
  12. package/dist/control-ui/assets/{sessions-jLGSApYa.js → sessions-DpAaBT21.js} +2 -2
  13. package/dist/control-ui/assets/{skills-DweBwUhs.js → skills-DjA_j_20.js} +2 -2
  14. package/dist/control-ui/assets/{workboard-BsU-FXIo.js → workboard-BFnvbS0k.js} +2 -2
  15. package/dist/control-ui/index.html +1 -1
  16. package/dist/control-ui/sw.js +1 -1
  17. package/dist/gateway/protocol/index.d.ts +1 -1
  18. package/dist/{index-AZzJCgph.d.ts → index-DuDY3bCZ.d.ts} +2 -2
  19. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  20. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  21. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
  22. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  23. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  24. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  25. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  26. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  27. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  28. package/dist/plugin-sdk/compat.d.ts +2 -2
  29. package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
  30. package/dist/plugin-sdk/config-schema.d.ts +2 -2
  31. package/dist/plugin-sdk/core.d.ts +1 -1
  32. package/dist/plugin-sdk/discord.d.ts +2 -2
  33. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  34. package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
  35. package/package.json +4 -409
  36. package/CHANGELOG.md +0 -42
  37. package/THIRD_PARTY_NOTICES.md +0 -37
  38. package/docs/.i18n/README.md +0 -81
  39. package/docs/.i18n/ar-navigation.json +0 -18
  40. package/docs/.i18n/de-navigation.json +0 -18
  41. package/docs/.i18n/es-navigation.json +0 -18
  42. package/docs/.i18n/fr-navigation.json +0 -18
  43. package/docs/.i18n/glossary.ar.json +0 -78
  44. package/docs/.i18n/glossary.de.json +0 -78
  45. package/docs/.i18n/glossary.es.json +0 -78
  46. package/docs/.i18n/glossary.fa.json +0 -78
  47. package/docs/.i18n/glossary.fr.json +0 -78
  48. package/docs/.i18n/glossary.id.json +0 -78
  49. package/docs/.i18n/glossary.it.json +0 -78
  50. package/docs/.i18n/glossary.ja-JP.json +0 -98
  51. package/docs/.i18n/glossary.ko.json +0 -78
  52. package/docs/.i18n/glossary.nl.json +0 -78
  53. package/docs/.i18n/glossary.pl.json +0 -78
  54. package/docs/.i18n/glossary.pt-BR.json +0 -78
  55. package/docs/.i18n/glossary.th.json +0 -78
  56. package/docs/.i18n/glossary.tr.json +0 -78
  57. package/docs/.i18n/glossary.uk.json +0 -78
  58. package/docs/.i18n/glossary.vi.json +0 -78
  59. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  60. package/docs/.i18n/glossary.zh-TW.json +0 -78
  61. package/docs/.i18n/id-navigation.json +0 -18
  62. package/docs/.i18n/it-navigation.json +0 -18
  63. package/docs/.i18n/ja-navigation.json +0 -18
  64. package/docs/.i18n/ko-navigation.json +0 -18
  65. package/docs/.i18n/pl-navigation.json +0 -18
  66. package/docs/.i18n/pt-BR-navigation.json +0 -18
  67. package/docs/.i18n/tr-navigation.json +0 -18
  68. package/docs/.i18n/translation-workflow.md +0 -111
  69. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  70. package/docs/AGENTS.md +0 -36
  71. package/docs/CLAUDE.md +0 -1
  72. package/docs/agent-runtime-architecture.md +0 -48
  73. package/docs/announcements/bluebubbles-imessage.md +0 -79
  74. package/docs/auth-credential-semantics.md +0 -124
  75. package/docs/automation/auth-monitoring.md +0 -11
  76. package/docs/automation/clawflow.md +0 -12
  77. package/docs/automation/cron-jobs.md +0 -534
  78. package/docs/automation/cron-vs-heartbeat.md +0 -11
  79. package/docs/automation/gmail-pubsub.md +0 -11
  80. package/docs/automation/hooks.md +0 -387
  81. package/docs/automation/index.md +0 -135
  82. package/docs/automation/poll.md +0 -12
  83. package/docs/automation/standing-orders.md +0 -250
  84. package/docs/automation/taskflow.md +0 -155
  85. package/docs/automation/tasks.md +0 -374
  86. package/docs/automation/troubleshooting.md +0 -12
  87. package/docs/automation/webhook.md +0 -12
  88. package/docs/brave-search.md +0 -11
  89. package/docs/channels/access-groups.md +0 -201
  90. package/docs/channels/ambient-room-events.md +0 -214
  91. package/docs/channels/bot-loop-protection.md +0 -131
  92. package/docs/channels/broadcast-groups.md +0 -472
  93. package/docs/channels/channel-routing.md +0 -162
  94. package/docs/channels/clickclack.md +0 -138
  95. package/docs/channels/discord.md +0 -1758
  96. package/docs/channels/feishu.md +0 -650
  97. package/docs/channels/googlechat.md +0 -284
  98. package/docs/channels/group-messages.md +0 -95
  99. package/docs/channels/groups.md +0 -524
  100. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  101. package/docs/channels/imessage.md +0 -839
  102. package/docs/channels/index.md +0 -64
  103. package/docs/channels/irc.md +0 -253
  104. package/docs/channels/line.md +0 -243
  105. package/docs/channels/location.md +0 -71
  106. package/docs/channels/matrix-migration.md +0 -370
  107. package/docs/channels/matrix-presentation.md +0 -77
  108. package/docs/channels/matrix-push-rules.md +0 -150
  109. package/docs/channels/matrix.md +0 -921
  110. package/docs/channels/mattermost.md +0 -542
  111. package/docs/channels/msteams.md +0 -1096
  112. package/docs/channels/nextcloud-talk.md +0 -176
  113. package/docs/channels/nostr.md +0 -253
  114. package/docs/channels/pairing.md +0 -214
  115. package/docs/channels/qqbot.md +0 -314
  116. package/docs/channels/signal.md +0 -417
  117. package/docs/channels/slack.md +0 -1623
  118. package/docs/channels/synology-chat.md +0 -187
  119. package/docs/channels/telegram.md +0 -1124
  120. package/docs/channels/tlon.md +0 -296
  121. package/docs/channels/troubleshooting.md +0 -162
  122. package/docs/channels/twitch.md +0 -431
  123. package/docs/channels/wechat.md +0 -171
  124. package/docs/channels/whatsapp.md +0 -796
  125. package/docs/channels/yuanbao.md +0 -416
  126. package/docs/channels/zalo.md +0 -253
  127. package/docs/channels/zalouser.md +0 -217
  128. package/docs/ci.md +0 -657
  129. package/docs/clawhub/publishing.md +0 -96
  130. package/docs/cli/acp.md +0 -370
  131. package/docs/cli/agent.md +0 -109
  132. package/docs/cli/agents.md +0 -253
  133. package/docs/cli/approvals.md +0 -190
  134. package/docs/cli/backup.md +0 -98
  135. package/docs/cli/browser.md +0 -307
  136. package/docs/cli/channels.md +0 -154
  137. package/docs/cli/clawbot.md +0 -25
  138. package/docs/cli/commitments.md +0 -90
  139. package/docs/cli/completion.md +0 -39
  140. package/docs/cli/config.md +0 -504
  141. package/docs/cli/configure.md +0 -77
  142. package/docs/cli/crestodian.md +0 -337
  143. package/docs/cli/cron.md +0 -304
  144. package/docs/cli/daemon.md +0 -67
  145. package/docs/cli/dashboard.md +0 -33
  146. package/docs/cli/devices.md +0 -240
  147. package/docs/cli/directory.md +0 -68
  148. package/docs/cli/dns.md +0 -53
  149. package/docs/cli/docs.md +0 -63
  150. package/docs/cli/doctor.md +0 -241
  151. package/docs/cli/flows.md +0 -52
  152. package/docs/cli/gateway.md +0 -572
  153. package/docs/cli/health.md +0 -43
  154. package/docs/cli/hooks.md +0 -345
  155. package/docs/cli/index.md +0 -400
  156. package/docs/cli/infer.md +0 -364
  157. package/docs/cli/logs.md +0 -68
  158. package/docs/cli/mcp.md +0 -529
  159. package/docs/cli/memory.md +0 -183
  160. package/docs/cli/message.md +0 -317
  161. package/docs/cli/migrate.md +0 -334
  162. package/docs/cli/models.md +0 -239
  163. package/docs/cli/node.md +0 -177
  164. package/docs/cli/nodes.md +0 -76
  165. package/docs/cli/onboard.md +0 -250
  166. package/docs/cli/pairing.md +0 -77
  167. package/docs/cli/path.md +0 -511
  168. package/docs/cli/plugins.md +0 -459
  169. package/docs/cli/policy.md +0 -886
  170. package/docs/cli/proxy.md +0 -89
  171. package/docs/cli/qr.md +0 -56
  172. package/docs/cli/reset.md +0 -39
  173. package/docs/cli/sandbox.md +0 -208
  174. package/docs/cli/secrets.md +0 -202
  175. package/docs/cli/security.md +0 -136
  176. package/docs/cli/sessions.md +0 -164
  177. package/docs/cli/setup.md +0 -59
  178. package/docs/cli/skills.md +0 -122
  179. package/docs/cli/status.md +0 -45
  180. package/docs/cli/system.md +0 -89
  181. package/docs/cli/tasks.md +0 -111
  182. package/docs/cli/transcripts.md +0 -151
  183. package/docs/cli/tui.md +0 -91
  184. package/docs/cli/uninstall.md +0 -44
  185. package/docs/cli/update.md +0 -243
  186. package/docs/cli/voicecall.md +0 -204
  187. package/docs/cli/webhooks.md +0 -117
  188. package/docs/cli/wiki.md +0 -256
  189. package/docs/concepts/active-memory.md +0 -856
  190. package/docs/concepts/agent-loop.md +0 -185
  191. package/docs/concepts/agent-runtimes.md +0 -276
  192. package/docs/concepts/agent-workspace.md +0 -230
  193. package/docs/concepts/agent.md +0 -140
  194. package/docs/concepts/architecture.md +0 -154
  195. package/docs/concepts/channel-docking.md +0 -145
  196. package/docs/concepts/commitments.md +0 -150
  197. package/docs/concepts/compaction.md +0 -203
  198. package/docs/concepts/context-engine.md +0 -347
  199. package/docs/concepts/context.md +0 -199
  200. package/docs/concepts/delegate-architecture.md +0 -319
  201. package/docs/concepts/dreaming.md +0 -264
  202. package/docs/concepts/experimental-features.md +0 -109
  203. package/docs/concepts/features.md +0 -91
  204. package/docs/concepts/fengming-sdk.md +0 -323
  205. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  206. package/docs/concepts/mantis.md +0 -744
  207. package/docs/concepts/markdown-formatting.md +0 -139
  208. package/docs/concepts/memory-builtin.md +0 -148
  209. package/docs/concepts/memory-honcho.md +0 -144
  210. package/docs/concepts/memory-qmd.md +0 -271
  211. package/docs/concepts/memory-search.md +0 -167
  212. package/docs/concepts/memory.md +0 -299
  213. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  214. package/docs/concepts/messages.md +0 -214
  215. package/docs/concepts/model-failover.md +0 -384
  216. package/docs/concepts/model-providers.md +0 -719
  217. package/docs/concepts/models.md +0 -371
  218. package/docs/concepts/multi-agent.md +0 -625
  219. package/docs/concepts/oauth.md +0 -198
  220. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  221. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  222. package/docs/concepts/presence.md +0 -117
  223. package/docs/concepts/progress-drafts.md +0 -406
  224. package/docs/concepts/qa-e2e-automation.md +0 -947
  225. package/docs/concepts/qa-matrix.md +0 -139
  226. package/docs/concepts/queue-steering.md +0 -90
  227. package/docs/concepts/queue.md +0 -136
  228. package/docs/concepts/retry.md +0 -86
  229. package/docs/concepts/session-pruning.md +0 -104
  230. package/docs/concepts/session-tool.md +0 -188
  231. package/docs/concepts/session.md +0 -164
  232. package/docs/concepts/soul.md +0 -116
  233. package/docs/concepts/streaming.md +0 -257
  234. package/docs/concepts/system-prompt.md +0 -328
  235. package/docs/concepts/timezone.md +0 -47
  236. package/docs/concepts/typebox.md +0 -309
  237. package/docs/concepts/typing-indicators.md +0 -88
  238. package/docs/concepts/usage-tracking.md +0 -66
  239. package/docs/date-time.md +0 -126
  240. package/docs/debug/node-issue.md +0 -90
  241. package/docs/diagnostics/flags.md +0 -182
  242. package/docs/docs.json +0 -1862
  243. package/docs/fengming-agent-runtime.md +0 -82
  244. package/docs/gateway/authentication.md +0 -256
  245. package/docs/gateway/background-process.md +0 -147
  246. package/docs/gateway/bonjour.md +0 -303
  247. package/docs/gateway/bridge-protocol.md +0 -97
  248. package/docs/gateway/cli-backends.md +0 -439
  249. package/docs/gateway/config-agents.md +0 -1525
  250. package/docs/gateway/config-channels.md +0 -945
  251. package/docs/gateway/config-tools.md +0 -774
  252. package/docs/gateway/configuration-examples.md +0 -704
  253. package/docs/gateway/configuration-reference.md +0 -1391
  254. package/docs/gateway/configuration.md +0 -739
  255. package/docs/gateway/diagnostics.md +0 -213
  256. package/docs/gateway/discovery.md +0 -154
  257. package/docs/gateway/doctor.md +0 -575
  258. package/docs/gateway/gateway-lock.md +0 -37
  259. package/docs/gateway/health.md +0 -73
  260. package/docs/gateway/heartbeat.md +0 -498
  261. package/docs/gateway/index.md +0 -383
  262. package/docs/gateway/local-model-services.md +0 -205
  263. package/docs/gateway/local-models.md +0 -355
  264. package/docs/gateway/logging.md +0 -149
  265. package/docs/gateway/multiple-gateways.md +0 -178
  266. package/docs/gateway/network-model.md +0 -15
  267. package/docs/gateway/openai-http-api.md +0 -378
  268. package/docs/gateway/openresponses-http-api.md +0 -347
  269. package/docs/gateway/openshell.md +0 -316
  270. package/docs/gateway/opentelemetry.md +0 -433
  271. package/docs/gateway/operator-scopes.md +0 -119
  272. package/docs/gateway/pairing.md +0 -207
  273. package/docs/gateway/prometheus.md +0 -249
  274. package/docs/gateway/protocol.md +0 -826
  275. package/docs/gateway/remote-gateway-readme.md +0 -169
  276. package/docs/gateway/remote.md +0 -280
  277. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  278. package/docs/gateway/sandboxing.md +0 -546
  279. package/docs/gateway/secrets-plan-contract.md +0 -159
  280. package/docs/gateway/secrets.md +0 -805
  281. package/docs/gateway/security/audit-checks.md +0 -127
  282. package/docs/gateway/security/exposure-runbook.md +0 -212
  283. package/docs/gateway/security/index.md +0 -1343
  284. package/docs/gateway/security/secure-file-operations.md +0 -76
  285. package/docs/gateway/security/shrinkwrap.md +0 -111
  286. package/docs/gateway/tailscale.md +0 -156
  287. package/docs/gateway/tools-invoke-http-api.md +0 -169
  288. package/docs/gateway/troubleshooting.md +0 -877
  289. package/docs/gateway/trusted-proxy-auth.md +0 -483
  290. package/docs/help/debugging.md +0 -341
  291. package/docs/help/environment.md +0 -233
  292. package/docs/help/faq-first-run.md +0 -870
  293. package/docs/help/faq-models.md +0 -556
  294. package/docs/help/faq.md +0 -2041
  295. package/docs/help/index.md +0 -39
  296. package/docs/help/scripts.md +0 -56
  297. package/docs/help/testing-live.md +0 -587
  298. package/docs/help/testing-updates-plugins.md +0 -299
  299. package/docs/help/testing.md +0 -977
  300. package/docs/help/troubleshooting.md +0 -449
  301. package/docs/index.md +0 -196
  302. package/docs/install/ansible.md +0 -233
  303. package/docs/install/azure.md +0 -315
  304. package/docs/install/bun.md +0 -59
  305. package/docs/install/clawdock.md +0 -112
  306. package/docs/install/development-channels.md +0 -148
  307. package/docs/install/digitalocean.md +0 -174
  308. package/docs/install/docker-vm-runtime.md +0 -154
  309. package/docs/install/docker.md +0 -564
  310. package/docs/install/exe-dev.md +0 -201
  311. package/docs/install/fly.md +0 -524
  312. package/docs/install/gcp.md +0 -418
  313. package/docs/install/hetzner.md +0 -285
  314. package/docs/install/hostinger.md +0 -98
  315. package/docs/install/index.md +0 -232
  316. package/docs/install/installer.md +0 -447
  317. package/docs/install/kubernetes.md +0 -196
  318. package/docs/install/macos-vm.md +0 -281
  319. package/docs/install/migrating-claude.md +0 -165
  320. package/docs/install/migrating-hermes.md +0 -178
  321. package/docs/install/migrating.md +0 -137
  322. package/docs/install/nix.md +0 -112
  323. package/docs/install/node.md +0 -142
  324. package/docs/install/northflank.mdx +0 -44
  325. package/docs/install/oracle.md +0 -218
  326. package/docs/install/podman.md +0 -216
  327. package/docs/install/railway.mdx +0 -92
  328. package/docs/install/raspberry-pi.md +0 -234
  329. package/docs/install/render.mdx +0 -167
  330. package/docs/install/uninstall.md +0 -131
  331. package/docs/install/updating.md +0 -284
  332. package/docs/install/upstash.md +0 -96
  333. package/docs/logging.md +0 -320
  334. package/docs/nav-tabs-underline.js +0 -100
  335. package/docs/network.md +0 -72
  336. package/docs/nodes/audio.md +0 -216
  337. package/docs/nodes/camera.md +0 -166
  338. package/docs/nodes/images.md +0 -77
  339. package/docs/nodes/index.md +0 -439
  340. package/docs/nodes/location-command.md +0 -102
  341. package/docs/nodes/media-understanding.md +0 -495
  342. package/docs/nodes/talk.md +0 -160
  343. package/docs/nodes/troubleshooting.md +0 -123
  344. package/docs/nodes/voicewake.md +0 -93
  345. package/docs/perplexity.md +0 -11
  346. package/docs/plan/codex-context-engine-harness.md +0 -624
  347. package/docs/plan/ui-channels.md +0 -284
  348. package/docs/platforms/digitalocean.md +0 -12
  349. package/docs/platforms/easyrunner.md +0 -109
  350. package/docs/platforms/index.md +0 -51
  351. package/docs/platforms/linux.md +0 -141
  352. package/docs/platforms/mac/bundled-gateway.md +0 -79
  353. package/docs/platforms/mac/canvas.md +0 -128
  354. package/docs/platforms/mac/child-process.md +0 -72
  355. package/docs/platforms/mac/dev-setup.md +0 -112
  356. package/docs/platforms/mac/health.md +0 -39
  357. package/docs/platforms/mac/icon.md +0 -36
  358. package/docs/platforms/mac/logging.md +0 -62
  359. package/docs/platforms/mac/menu-bar.md +0 -93
  360. package/docs/platforms/mac/peekaboo.md +0 -96
  361. package/docs/platforms/mac/permissions.md +0 -73
  362. package/docs/platforms/mac/remote.md +0 -123
  363. package/docs/platforms/mac/signing.md +0 -52
  364. package/docs/platforms/mac/skills.md +0 -43
  365. package/docs/platforms/mac/voice-overlay.md +0 -66
  366. package/docs/platforms/mac/voicewake.md +0 -73
  367. package/docs/platforms/mac/webchat.md +0 -54
  368. package/docs/platforms/mac/xpc.md +0 -66
  369. package/docs/platforms/oracle.md +0 -12
  370. package/docs/platforms/raspberry-pi.md +0 -13
  371. package/docs/platforms/windows.md +0 -286
  372. package/docs/plugins/adding-capabilities.md +0 -146
  373. package/docs/plugins/admin-http-rpc.md +0 -216
  374. package/docs/plugins/agent-tools.md +0 -13
  375. package/docs/plugins/architecture-internals.md +0 -1196
  376. package/docs/plugins/architecture.md +0 -483
  377. package/docs/plugins/building-extensions.md +0 -13
  378. package/docs/plugins/building-plugins.md +0 -335
  379. package/docs/plugins/bundles.md +0 -310
  380. package/docs/plugins/cli-backend-plugins.md +0 -310
  381. package/docs/plugins/codex-computer-use.md +0 -297
  382. package/docs/plugins/codex-harness-reference.md +0 -470
  383. package/docs/plugins/codex-harness-runtime.md +0 -268
  384. package/docs/plugins/codex-harness.md +0 -780
  385. package/docs/plugins/codex-native-plugins.md +0 -276
  386. package/docs/plugins/community.md +0 -77
  387. package/docs/plugins/compatibility.md +0 -167
  388. package/docs/plugins/copilot.md +0 -356
  389. package/docs/plugins/dependency-resolution.md +0 -176
  390. package/docs/plugins/google-meet.md +0 -1737
  391. package/docs/plugins/hooks.md +0 -484
  392. package/docs/plugins/install-overrides.md +0 -80
  393. package/docs/plugins/manage-plugins.md +0 -210
  394. package/docs/plugins/manifest.md +0 -1457
  395. package/docs/plugins/memory-lancedb.md +0 -385
  396. package/docs/plugins/memory-wiki.md +0 -529
  397. package/docs/plugins/message-presentation.md +0 -473
  398. package/docs/plugins/oc-path.md +0 -166
  399. package/docs/plugins/plugin-inventory.md +0 -189
  400. package/docs/plugins/plugin-permission-requests.md +0 -193
  401. package/docs/plugins/reference/acpx.md +0 -23
  402. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  403. package/docs/plugins/reference/alibaba.md +0 -23
  404. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  405. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  406. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  407. package/docs/plugins/reference/anthropic.md +0 -23
  408. package/docs/plugins/reference/arcee.md +0 -23
  409. package/docs/plugins/reference/azure-speech.md +0 -23
  410. package/docs/plugins/reference/bonjour.md +0 -19
  411. package/docs/plugins/reference/brave.md +0 -23
  412. package/docs/plugins/reference/browser.md +0 -23
  413. package/docs/plugins/reference/byteplus.md +0 -19
  414. package/docs/plugins/reference/canvas.md +0 -19
  415. package/docs/plugins/reference/cerebras.md +0 -23
  416. package/docs/plugins/reference/chutes.md +0 -23
  417. package/docs/plugins/reference/clickclack.md +0 -23
  418. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  419. package/docs/plugins/reference/codex-supervisor.md +0 -27
  420. package/docs/plugins/reference/codex.md +0 -23
  421. package/docs/plugins/reference/comfy.md +0 -23
  422. package/docs/plugins/reference/copilot-proxy.md +0 -19
  423. package/docs/plugins/reference/copilot.md +0 -23
  424. package/docs/plugins/reference/deepgram.md +0 -23
  425. package/docs/plugins/reference/deepinfra.md +0 -23
  426. package/docs/plugins/reference/deepseek.md +0 -23
  427. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  428. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  429. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  430. package/docs/plugins/reference/diffs.md +0 -19
  431. package/docs/plugins/reference/discord.md +0 -23
  432. package/docs/plugins/reference/document-extract.md +0 -23
  433. package/docs/plugins/reference/duckduckgo.md +0 -23
  434. package/docs/plugins/reference/elevenlabs.md +0 -23
  435. package/docs/plugins/reference/exa.md +0 -23
  436. package/docs/plugins/reference/fal.md +0 -23
  437. package/docs/plugins/reference/feishu.md +0 -23
  438. package/docs/plugins/reference/file-transfer.md +0 -19
  439. package/docs/plugins/reference/firecrawl.md +0 -23
  440. package/docs/plugins/reference/fireworks.md +0 -23
  441. package/docs/plugins/reference/github-copilot.md +0 -23
  442. package/docs/plugins/reference/gmi.md +0 -23
  443. package/docs/plugins/reference/google-meet.md +0 -23
  444. package/docs/plugins/reference/google.md +0 -23
  445. package/docs/plugins/reference/googlechat.md +0 -23
  446. package/docs/plugins/reference/gradium.md +0 -23
  447. package/docs/plugins/reference/groq.md +0 -23
  448. package/docs/plugins/reference/huggingface.md +0 -23
  449. package/docs/plugins/reference/imessage.md +0 -23
  450. package/docs/plugins/reference/inworld.md +0 -23
  451. package/docs/plugins/reference/irc.md +0 -23
  452. package/docs/plugins/reference/kilocode.md +0 -23
  453. package/docs/plugins/reference/kimi.md +0 -23
  454. package/docs/plugins/reference/line.md +0 -23
  455. package/docs/plugins/reference/litellm.md +0 -23
  456. package/docs/plugins/reference/llm-task.md +0 -19
  457. package/docs/plugins/reference/lmstudio.md +0 -23
  458. package/docs/plugins/reference/lobster.md +0 -19
  459. package/docs/plugins/reference/matrix.md +0 -23
  460. package/docs/plugins/reference/mattermost.md +0 -23
  461. package/docs/plugins/reference/memory-core.md +0 -19
  462. package/docs/plugins/reference/memory-lancedb.md +0 -23
  463. package/docs/plugins/reference/memory-wiki.md +0 -23
  464. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  465. package/docs/plugins/reference/microsoft.md +0 -19
  466. package/docs/plugins/reference/migrate-claude.md +0 -19
  467. package/docs/plugins/reference/migrate-hermes.md +0 -19
  468. package/docs/plugins/reference/minimax.md +0 -23
  469. package/docs/plugins/reference/mistral.md +0 -23
  470. package/docs/plugins/reference/moonshot.md +0 -23
  471. package/docs/plugins/reference/msteams.md +0 -23
  472. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  473. package/docs/plugins/reference/nostr.md +0 -23
  474. package/docs/plugins/reference/novita.md +0 -23
  475. package/docs/plugins/reference/nvidia.md +0 -23
  476. package/docs/plugins/reference/oc-path.md +0 -23
  477. package/docs/plugins/reference/ollama.md +0 -23
  478. package/docs/plugins/reference/open-prose.md +0 -19
  479. package/docs/plugins/reference/openai.md +0 -23
  480. package/docs/plugins/reference/opencode-go.md +0 -23
  481. package/docs/plugins/reference/opencode.md +0 -23
  482. package/docs/plugins/reference/openrouter.md +0 -23
  483. package/docs/plugins/reference/openshell.md +0 -19
  484. package/docs/plugins/reference/perplexity.md +0 -23
  485. package/docs/plugins/reference/pixverse.md +0 -23
  486. package/docs/plugins/reference/policy.md +0 -72
  487. package/docs/plugins/reference/qa-channel.md +0 -23
  488. package/docs/plugins/reference/qa-lab.md +0 -19
  489. package/docs/plugins/reference/qa-matrix.md +0 -19
  490. package/docs/plugins/reference/qianfan.md +0 -23
  491. package/docs/plugins/reference/qqbot.md +0 -23
  492. package/docs/plugins/reference/qwen.md +0 -23
  493. package/docs/plugins/reference/runway.md +0 -23
  494. package/docs/plugins/reference/searxng.md +0 -19
  495. package/docs/plugins/reference/senseaudio.md +0 -23
  496. package/docs/plugins/reference/sglang.md +0 -23
  497. package/docs/plugins/reference/signal.md +0 -23
  498. package/docs/plugins/reference/skill-workshop.md +0 -23
  499. package/docs/plugins/reference/slack.md +0 -23
  500. package/docs/plugins/reference/stepfun.md +0 -23
  501. package/docs/plugins/reference/synology-chat.md +0 -23
  502. package/docs/plugins/reference/synthetic.md +0 -23
  503. package/docs/plugins/reference/tavily.md +0 -23
  504. package/docs/plugins/reference/telegram.md +0 -23
  505. package/docs/plugins/reference/tencent.md +0 -23
  506. package/docs/plugins/reference/tlon.md +0 -23
  507. package/docs/plugins/reference/together.md +0 -23
  508. package/docs/plugins/reference/tokenjuice.md +0 -23
  509. package/docs/plugins/reference/tts-local-cli.md +0 -19
  510. package/docs/plugins/reference/twitch.md +0 -23
  511. package/docs/plugins/reference/venice.md +0 -23
  512. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  513. package/docs/plugins/reference/vllm.md +0 -23
  514. package/docs/plugins/reference/voice-call.md +0 -23
  515. package/docs/plugins/reference/volcengine.md +0 -23
  516. package/docs/plugins/reference/voyage.md +0 -19
  517. package/docs/plugins/reference/vydra.md +0 -23
  518. package/docs/plugins/reference/web-readability.md +0 -19
  519. package/docs/plugins/reference/webhooks.md +0 -23
  520. package/docs/plugins/reference/whatsapp.md +0 -23
  521. package/docs/plugins/reference/workboard.md +0 -23
  522. package/docs/plugins/reference/xai.md +0 -23
  523. package/docs/plugins/reference/xiaomi.md +0 -23
  524. package/docs/plugins/reference/zai.md +0 -23
  525. package/docs/plugins/reference/zalo.md +0 -23
  526. package/docs/plugins/reference/zalouser.md +0 -24
  527. package/docs/plugins/reference.md +0 -145
  528. package/docs/plugins/sdk-agent-harness.md +0 -338
  529. package/docs/plugins/sdk-channel-inbound.md +0 -70
  530. package/docs/plugins/sdk-channel-ingress.md +0 -137
  531. package/docs/plugins/sdk-channel-message.md +0 -18
  532. package/docs/plugins/sdk-channel-outbound.md +0 -113
  533. package/docs/plugins/sdk-channel-plugins.md +0 -765
  534. package/docs/plugins/sdk-channel-turn.md +0 -9
  535. package/docs/plugins/sdk-entrypoints.md +0 -344
  536. package/docs/plugins/sdk-migration.md +0 -979
  537. package/docs/plugins/sdk-overview.md +0 -511
  538. package/docs/plugins/sdk-provider-plugins.md +0 -846
  539. package/docs/plugins/sdk-runtime.md +0 -676
  540. package/docs/plugins/sdk-setup.md +0 -550
  541. package/docs/plugins/sdk-subpaths.md +0 -391
  542. package/docs/plugins/sdk-testing.md +0 -403
  543. package/docs/plugins/skill-workshop.md +0 -713
  544. package/docs/plugins/tool-plugins.md +0 -411
  545. package/docs/plugins/voice-call.md +0 -942
  546. package/docs/plugins/webhooks.md +0 -192
  547. package/docs/plugins/workboard.md +0 -252
  548. package/docs/plugins/zalouser.md +0 -86
  549. package/docs/prose.md +0 -137
  550. package/docs/providers/alibaba.md +0 -158
  551. package/docs/providers/anthropic.md +0 -381
  552. package/docs/providers/arcee.md +0 -144
  553. package/docs/providers/azure-speech.md +0 -119
  554. package/docs/providers/bedrock-mantle.md +0 -211
  555. package/docs/providers/bedrock.md +0 -414
  556. package/docs/providers/cerebras.md +0 -130
  557. package/docs/providers/chutes.md +0 -153
  558. package/docs/providers/claude-max-api-proxy.md +0 -191
  559. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  560. package/docs/providers/comfy.md +0 -362
  561. package/docs/providers/deepgram.md +0 -184
  562. package/docs/providers/deepinfra.md +0 -92
  563. package/docs/providers/deepseek.md +0 -146
  564. package/docs/providers/ds4.md +0 -309
  565. package/docs/providers/elevenlabs.md +0 -130
  566. package/docs/providers/fal.md +0 -240
  567. package/docs/providers/fireworks.md +0 -144
  568. package/docs/providers/github-copilot.md +0 -257
  569. package/docs/providers/gmi.md +0 -92
  570. package/docs/providers/google.md +0 -472
  571. package/docs/providers/gradium.md +0 -123
  572. package/docs/providers/groq.md +0 -171
  573. package/docs/providers/huggingface.md +0 -235
  574. package/docs/providers/index.md +0 -105
  575. package/docs/providers/inferrs.md +0 -272
  576. package/docs/providers/inworld.md +0 -120
  577. package/docs/providers/kilocode.md +0 -135
  578. package/docs/providers/litellm.md +0 -234
  579. package/docs/providers/lmstudio.md +0 -224
  580. package/docs/providers/minimax.md +0 -505
  581. package/docs/providers/mistral.md +0 -235
  582. package/docs/providers/models.md +0 -64
  583. package/docs/providers/moonshot.md +0 -413
  584. package/docs/providers/novita.md +0 -92
  585. package/docs/providers/nvidia.md +0 -158
  586. package/docs/providers/ollama-cloud.md +0 -115
  587. package/docs/providers/ollama.md +0 -1225
  588. package/docs/providers/openai.md +0 -1093
  589. package/docs/providers/opencode-go.md +0 -123
  590. package/docs/providers/opencode.md +0 -149
  591. package/docs/providers/openrouter.md +0 -349
  592. package/docs/providers/perplexity-provider.md +0 -123
  593. package/docs/providers/pixverse.md +0 -165
  594. package/docs/providers/qianfan.md +0 -132
  595. package/docs/providers/qwen-oauth.md +0 -115
  596. package/docs/providers/qwen.md +0 -364
  597. package/docs/providers/runway.md +0 -103
  598. package/docs/providers/senseaudio.md +0 -68
  599. package/docs/providers/sglang.md +0 -161
  600. package/docs/providers/stepfun.md +0 -229
  601. package/docs/providers/synthetic.md +0 -154
  602. package/docs/providers/tencent.md +0 -130
  603. package/docs/providers/together.md +0 -140
  604. package/docs/providers/venice.md +0 -312
  605. package/docs/providers/vercel-ai-gateway.md +0 -128
  606. package/docs/providers/vllm.md +0 -407
  607. package/docs/providers/volcengine.md +0 -199
  608. package/docs/providers/vydra.md +0 -180
  609. package/docs/providers/xai.md +0 -571
  610. package/docs/providers/xiaomi.md +0 -262
  611. package/docs/providers/zai.md +0 -224
  612. package/docs/refactor/access.md +0 -9
  613. package/docs/refactor/acp.md +0 -298
  614. package/docs/refactor/canvas.md +0 -131
  615. package/docs/refactor/database-first.md +0 -2256
  616. package/docs/refactor/ingress-core.md +0 -341
  617. package/docs/reference/AGENTS.default.md +0 -131
  618. package/docs/reference/RELEASING.md +0 -799
  619. package/docs/reference/api-usage-costs.md +0 -208
  620. package/docs/reference/application-modernization-plan.md +0 -208
  621. package/docs/reference/code-mode.md +0 -773
  622. package/docs/reference/credits.md +0 -33
  623. package/docs/reference/device-models.md +0 -50
  624. package/docs/reference/fengming-sdk-api-design.md +0 -390
  625. package/docs/reference/full-release-validation.md +0 -202
  626. package/docs/reference/memory-config.md +0 -604
  627. package/docs/reference/prompt-caching.md +0 -358
  628. package/docs/reference/release-performance-sweep.md +0 -360
  629. package/docs/reference/rich-output-protocol.md +0 -101
  630. package/docs/reference/rpc.md +0 -43
  631. package/docs/reference/secret-placeholder-conventions.md +0 -33
  632. package/docs/reference/secretref-credential-surface.md +0 -159
  633. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  634. package/docs/reference/session-management-compaction.md +0 -474
  635. package/docs/reference/templates/AGENTS.dev.md +0 -90
  636. package/docs/reference/templates/AGENTS.md +0 -227
  637. package/docs/reference/templates/BOOT.md +0 -16
  638. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  639. package/docs/reference/templates/CLAUDE.md +0 -1
  640. package/docs/reference/templates/HEARTBEAT.md +0 -24
  641. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  642. package/docs/reference/templates/IDENTITY.md +0 -34
  643. package/docs/reference/templates/SOUL.dev.md +0 -82
  644. package/docs/reference/templates/SOUL.md +0 -49
  645. package/docs/reference/templates/TOOLS.dev.md +0 -29
  646. package/docs/reference/templates/TOOLS.md +0 -51
  647. package/docs/reference/templates/USER.dev.md +0 -23
  648. package/docs/reference/templates/USER.md +0 -28
  649. package/docs/reference/test.md +0 -247
  650. package/docs/reference/token-use.md +0 -246
  651. package/docs/reference/transcript-hygiene.md +0 -214
  652. package/docs/reference/wizard.md +0 -252
  653. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  654. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  655. package/docs/security/formal-verification.md +0 -170
  656. package/docs/security/incident-response.md +0 -59
  657. package/docs/security/network-proxy.md +0 -268
  658. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  659. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  660. package/docs/specs/claw-supervisor.md +0 -247
  661. package/docs/start/bootstrapping.md +0 -49
  662. package/docs/start/docs-directory.md +0 -69
  663. package/docs/start/fengming.md +0 -252
  664. package/docs/start/getting-started.md +0 -152
  665. package/docs/start/hubs.md +0 -201
  666. package/docs/start/lore.md +0 -223
  667. package/docs/start/onboarding-overview.md +0 -72
  668. package/docs/start/onboarding.md +0 -98
  669. package/docs/start/quickstart.md +0 -25
  670. package/docs/start/setup.md +0 -178
  671. package/docs/start/showcase.md +0 -363
  672. package/docs/start/wizard-cli-automation.md +0 -232
  673. package/docs/start/wizard-cli-reference.md +0 -331
  674. package/docs/start/wizard.md +0 -141
  675. package/docs/style.css +0 -137
  676. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  677. package/docs/tools/acp-agents-setup.md +0 -351
  678. package/docs/tools/acp-agents.md +0 -854
  679. package/docs/tools/agent-send.md +0 -130
  680. package/docs/tools/apply-patch.md +0 -64
  681. package/docs/tools/brave-search.md +0 -139
  682. package/docs/tools/browser-control.md +0 -391
  683. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  684. package/docs/tools/browser-login.md +0 -77
  685. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  686. package/docs/tools/browser.md +0 -810
  687. package/docs/tools/btw.md +0 -159
  688. package/docs/tools/capability-cookbook.md +0 -12
  689. package/docs/tools/clawhub.md +0 -5
  690. package/docs/tools/code-execution.md +0 -173
  691. package/docs/tools/creating-skills.md +0 -158
  692. package/docs/tools/diffs.md +0 -525
  693. package/docs/tools/duckduckgo-search.md +0 -109
  694. package/docs/tools/elevated.md +0 -128
  695. package/docs/tools/exa-search.md +0 -152
  696. package/docs/tools/exec-approvals-advanced.md +0 -444
  697. package/docs/tools/exec-approvals.md +0 -494
  698. package/docs/tools/exec.md +0 -285
  699. package/docs/tools/firecrawl.md +0 -155
  700. package/docs/tools/gemini-search.md +0 -114
  701. package/docs/tools/goal.md +0 -217
  702. package/docs/tools/grok-search.md +0 -129
  703. package/docs/tools/image-generation.md +0 -493
  704. package/docs/tools/index.md +0 -178
  705. package/docs/tools/kimi-search.md +0 -105
  706. package/docs/tools/llm-task.md +0 -137
  707. package/docs/tools/lobster.md +0 -365
  708. package/docs/tools/loop-detection.md +0 -154
  709. package/docs/tools/media-overview.md +0 -160
  710. package/docs/tools/minimax-search.md +0 -102
  711. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  712. package/docs/tools/music-generation.md +0 -372
  713. package/docs/tools/ollama-search.md +0 -153
  714. package/docs/tools/pdf.md +0 -213
  715. package/docs/tools/perplexity-search.md +0 -220
  716. package/docs/tools/plugin.md +0 -363
  717. package/docs/tools/reactions.md +0 -100
  718. package/docs/tools/searxng-search.md +0 -141
  719. package/docs/tools/skills-config.md +0 -195
  720. package/docs/tools/skills.md +0 -569
  721. package/docs/tools/slash-commands.md +0 -487
  722. package/docs/tools/steer.md +0 -77
  723. package/docs/tools/subagents.md +0 -651
  724. package/docs/tools/tavily.md +0 -162
  725. package/docs/tools/thinking.md +0 -142
  726. package/docs/tools/tokenjuice.md +0 -84
  727. package/docs/tools/tool-search.md +0 -269
  728. package/docs/tools/trajectory.md +0 -229
  729. package/docs/tools/tts.md +0 -1009
  730. package/docs/tools/video-generation.md +0 -555
  731. package/docs/tools/web-fetch.md +0 -210
  732. package/docs/tools/web.md +0 -461
  733. package/docs/tts.md +0 -11
  734. package/docs/vps.md +0 -139
  735. package/docs/web/control-ui.md +0 -512
  736. package/docs/web/dashboard.md +0 -107
  737. package/docs/web/index.md +0 -133
  738. package/docs/web/tui.md +0 -250
  739. package/docs/web/webchat.md +0 -102
  740. package/npm-shrinkwrap.json +0 -12861
  741. package/patches/.gitkeep +0 -0
  742. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  743. package/pnpm-workspace.yaml +0 -120
  744. package/scripts/crabbox-wrapper.mjs +0 -2004
  745. package/scripts/lib/official-external-channel-catalog.json +0 -560
  746. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  747. package/scripts/lib/official-external-provider-catalog.json +0 -158
  748. package/scripts/lib/package-dist-imports.mjs +0 -171
  749. package/scripts/npm-runner.mjs +0 -91
  750. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  751. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  752. package/scripts/prepare-git-hooks.mjs +0 -72
  753. package/scripts/windows-cmd-helpers.mjs +0 -22
  754. package/skills/batch/SKILL.md +0 -118
  755. package/skills/code-review/SKILL.md +0 -107
  756. package/skills/debug/SKILL.md +0 -83
  757. package/skills/loop/SKILL.md +0 -118
  758. package/skills/run/SKILL.md +0 -79
  759. package/skills/run-skill-generator/SKILL.md +0 -179
  760. package/skills/verify/SKILL.md +0 -103
  761. 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)