fengming 0.3.9 → 0.3.11

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