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,356 +0,0 @@
1
- ---
2
- summary: "Run FengMing embedded agent turns through the external GitHub Copilot SDK harness"
3
- title: "Copilot SDK harness"
4
- read_when:
5
- - You want to use the GitHub Copilot SDK harness for an agent
6
- - You need configuration examples for the `copilot` runtime
7
- - You are wiring an agent to subscription Copilot (github / fengming / copilot) and want it to run through the Copilot CLI
8
- ---
9
-
10
- The external `@fengming/copilot` plugin lets FengMing run embedded subscription
11
- Copilot agent turns through the GitHub Copilot CLI (`@github/copilot-sdk`)
12
- instead of the built-in PI harness.
13
-
14
- Use the Copilot SDK harness when you want the Copilot CLI session to own the
15
- low-level agent loop: native tool execution, native compaction
16
- (`infiniteSessions`), and CLI-managed thread state under `copilotHome`.
17
- FengMing still owns chat channels, session files, model selection, FengMing
18
- dynamic tools (bridged), approvals, media delivery, the visible transcript
19
- mirror, `/btw` side questions (handled by the in-tree PI fallback — see
20
- [Side questions (`/btw`)](#side-questions-btw)), and `fengming doctor`.
21
-
22
- For the broader model/provider/runtime split, start with
23
- [Agent runtimes](/concepts/agent-runtimes).
24
-
25
- ## Requirements
26
-
27
- - FengMing with the `@fengming/copilot` plugin installed.
28
- - If your config uses `plugins.allow`, include `copilot` (the manifest
29
- id declared by the plugin). A restrictive
30
- allowlist that uses the npm-style `@fengming/copilot` package name
31
- will leave the plugin blocked and the runtime will not load
32
- even with `agentRuntime.id: "copilot"`.
33
- - A GitHub Copilot subscription that can drive the Copilot CLI (or a
34
- `gitHubToken` env / auth-profile entry for headless / cron runs).
35
- - A writable `copilotHome` directory. The harness defaults to
36
- `~/.fengming/agents/<agentId>/copilot` for full per-agent isolation. The
37
- platform default (`%APPDATA%\copilot` on Windows, `$XDG_CONFIG_HOME/copilot`
38
- or `~/.config/copilot` elsewhere) is used as the doctor probe fallback when
39
- no explicit home is set.
40
-
41
- `fengming doctor` runs the plugin
42
- [doctor contract](#doctor-and-probes) for the extension; failures there are
43
- the canonical way to confirm the environment is ready before opting an agent
44
- in.
45
-
46
- ## Plugin install
47
-
48
- The Copilot runtime is an external plugin so the core `fengming` package does
49
- not carry the `@github/copilot-sdk` dependency or its platform-specific
50
- `@github/copilot-<platform>-<arch>` CLI binary. Together they add roughly
51
- 260 MB, so install them only for agents that opt into this runtime:
52
-
53
- ```bash
54
- fengming plugins install @fengming/copilot
55
- ```
56
-
57
- The wizard installs the plugin the first time you select a
58
- `github-copilot/*` model **and** your config opts the model (or its
59
- provider) into the Copilot agent runtime via
60
- `agentRuntime: { id: "copilot" }` (see [Quickstart](#quickstart) below).
61
- Without the opt-in, fengming uses its built-in GitHub Copilot provider
62
- and never installs the runtime plugin.
63
-
64
- The runtime resolves the SDK in this order:
65
-
66
- 1. `import("@github/copilot-sdk")` from the installed `@fengming/copilot`
67
- package.
68
- 2. The well-known fallback dir `~/.fengming/npm-runtime/copilot/` (the
69
- legacy on-demand install target).
70
-
71
- A missing SDK surfaces a single error with code `COPILOT_SDK_MISSING`
72
- and the plugin reinstall command above.
73
-
74
- ## Quickstart
75
-
76
- Pin one model (or one provider) to the harness:
77
-
78
- ```json5
79
- {
80
- agents: {
81
- defaults: {
82
- model: "github-copilot/gpt-5.5",
83
- models: {
84
- "github-copilot/gpt-5.5": {
85
- agentRuntime: { id: "copilot" },
86
- },
87
- },
88
- },
89
- },
90
- }
91
- ```
92
-
93
- Both routes are equivalent. Use `agentRuntime.id` on a single model entry
94
- when only that model should be routed through the harness; set
95
- `agentRuntime.id` on a provider when every model under that provider should
96
- use it.
97
-
98
- ## Supported providers
99
-
100
- The harness advertises support for the canonical `github-copilot` provider
101
- (the same id owned by `extensions/github-copilot`):
102
-
103
- - `github-copilot`
104
-
105
- Anything outside that set falls through `selection.ts`'s `auto_pi` branch back
106
- to PI.
107
-
108
- ## Auth
109
-
110
- Per-agent precedence, applied during `runCopilotAttempt`:
111
-
112
- 1. **Explicit `useLoggedInUser: true`** on the attempt input. Uses the Copilot
113
- CLI's logged-in user resolved under the agent's `copilotHome`.
114
- 2. **Explicit `gitHubToken`** on the attempt input (with `profileId` +
115
- `profileVersion`). Useful for direct CLI invocations and tests where the
116
- caller wants to bypass auth-profile resolution.
117
- 3. **Contract-resolved `resolvedApiKey` + `authProfileId`** from the
118
- `EmbeddedRunAttemptParams` shape. This is the **production main path**:
119
- core resolves the agent's configured `github-copilot` auth profile
120
- (via `src/infra/provider-usage.auth.ts:resolveProviderAuths`) before
121
- invoking the harness, and the harness consumes both fields directly.
122
- This makes a `github-copilot:<profile>` auth profile work end-to-end
123
- for headless / cron / multi-profile setups without env vars.
124
- 4. **Env-var fallback** for direct CLI / dogfood runs where no auth
125
- profile is configured. The runtime checks the following vars in
126
- precedence order, mirroring the shipped `github-copilot` provider
127
- (`extensions/github-copilot/auth.ts`) and the documented Copilot SDK
128
- setup:
129
- 1. `FENGMING_GITHUB_TOKEN` -- harness-specific override; set this
130
- to pin a token for the FengMing harness without disturbing
131
- system-wide `gh` / Copilot CLI config.
132
- 2. `COPILOT_GITHUB_TOKEN` -- standard Copilot SDK / CLI env var.
133
- 3. `GH_TOKEN` -- standard `gh` CLI env var (matches the existing
134
- `github-copilot` provider precedence).
135
- 4. `GITHUB_TOKEN` -- generic GitHub token fallback.
136
-
137
- The first non-empty value wins; empty strings are treated as
138
- absent. The synthesised pool profile id is `env:<NAME>` and the
139
- profileVersion is a non-reversible sha256 fingerprint of the
140
- token, so rotating the env value cleanly busts the client pool.
141
-
142
- 5. **Default `useLoggedInUser`** when no token signal is available.
143
-
144
- Each agent gets a dedicated `copilotHome` so Copilot CLI tokens, sessions, and
145
- config do not leak between agents on the same machine. The default is
146
- `<agentDir>/copilot` when the host hands the harness an agent directory
147
- (isolating SDK state from FengMing's `models.json` / `auth-profiles.json` in
148
- the same directory), or `~/.fengming/agents/<agentId>/copilot` otherwise.
149
- Override with `copilotHome: <path>` on the attempt input when you need a
150
- custom location (for example, a shared mount for migration).
151
-
152
- `probeCopilotAuthShape` (see [Doctor and probes](#doctor-and-probes)) is the
153
- pure shape check that validates which of the modes above will be used.
154
- It does not perform a live SDK handshake.
155
-
156
- ## Configuration surface
157
-
158
- The harness reads its config from per-attempt input
159
- (`runCopilotAttempt({...})`) plus a small set of env defaults inside
160
- `extensions/copilot/src/`:
161
-
162
- - `copilotHome` — per-agent CLI state directory (defaults documented above).
163
- - `model` — string or `{ provider, id, api? }`. When omitted, FengMing uses
164
- the agent's normal model selection and the harness verifies the resolved
165
- provider is in the supported set.
166
- - `reasoningEffort` — `"low" | "medium" | "high" | "xhigh"`. Maps from
167
- FengMing's `ThinkLevel` / `ReasoningLevel` resolution in
168
- `auto-reply/thinking.ts`.
169
- - `infiniteSessionConfig` — optional override for the SDK
170
- `infiniteSessions` block driven by `harness.compact`. Defaults are safe to
171
- leave as-is.
172
- - `hooksConfig` — optional bridge config exposing FengMing
173
- before/after-message-write hooks to the SDK loop.
174
- - `permissionPolicy` — optional override for the SDK's
175
- `onPermissionRequest` handler used for built-in SDK tool kinds
176
- (`shell`, `write`, `read`, `url`, `mcp`, `memory`, `hook`). Defaults
177
- to `rejectAllPolicy` as a safety net; in practice the SDK never
178
- invokes any of those kinds because every bridged FengMing tool is
179
- registered with `overridesBuiltInTool: true` and
180
- `skipPermission: true` so 100% of tool calls flow through FengMing's
181
- wrapped `execute()`. See [Permissions and ask_user](#permissions-and-ask_user).
182
- - `enableSessionTelemetry` — opt-in OpenTelemetry routing via
183
- `telemetry-bridge.ts`.
184
-
185
- Nothing in the rest of FengMing needs to know about these fields. Other
186
- plugins, channels, and core code only see the standard
187
- `AgentHarnessAttemptParams` / `AgentHarnessAttemptResult` shape.
188
-
189
- ## Compaction
190
-
191
- When `harness.compact` runs, the Copilot SDK harness:
192
-
193
- 1. Enables `infiniteSessions` on the SDK session.
194
- 2. Lets the SDK perform its native compaction.
195
- 3. Writes an FengMing-shaped marker at
196
- `workspacePath/files/fengming-compaction-<ts>.json` so existing FengMing
197
- transcript readers still see a familiar artifact.
198
-
199
- The FengMing side transcript mirror (see below) continues to receive the
200
- post-compaction messages, so user-facing chat history stays consistent.
201
-
202
- ## Transcript mirroring
203
-
204
- `runCopilotAttempt` dual-writes each turn's mirrorable messages into the
205
- FengMing audit transcript via
206
- `extensions/copilot/src/dual-write-transcripts.ts`. The mirror is
207
- per-session scoped (`copilot:${sessionId}`) and uses a per-message
208
- identity (`${role}:${sha256_16(role,content)}`) so re-emits of prior-turn
209
- entries collide with existing on-disk keys and do not duplicate.
210
-
211
- The mirror is wrapped in two layers of failure containment so a transcript
212
- write failure cannot fail the attempt: an internal best-effort wrapper and a
213
- defense-in-depth `.catch(...)` at the attempt level. Failures are logged but
214
- not surfaced.
215
-
216
- ## Side questions (`/btw`)
217
-
218
- `/btw` is **not** native on this harness. `createCopilotAgentHarness()`
219
- deliberately leaves `harness.runSideQuestion` undefined, so FengMing's `/btw`
220
- dispatcher (`src/agents/btw.ts`) falls through to the same in-tree PI fallback
221
- path it uses for every non-Codex runtime: the configured model provider is
222
- called directly with a short side-question prompt and streamed back via
223
- `streamSimple` (no CLI session, no extra pool slot).
224
-
225
- This keeps Copilot CLI sessions reserved for the agent's main turn loop, and
226
- keeps `/btw` behavior identical to other PI-backed runtimes. The contract is
227
- asserted in
228
- [`extensions/copilot/harness.test.ts`](https://github.com/fengming/fengming/blob/main/extensions/copilot/harness.test.ts)
229
- under `describe("runSideQuestion")`.
230
-
231
- ## Doctor and probes
232
-
233
- `extensions/copilot/doctor-contract-api.ts` is auto-loaded by
234
- `src/plugins/doctor-contract-registry.ts`. It contributes:
235
-
236
- - An empty `legacyConfigRules` (no retired fields at MVP).
237
- - A no-op `normalizeCompatibilityConfig` (kept so future field retirements
238
- have a stable in-tree home).
239
- - One `sessionRouteStateOwners` entry claiming provider `github-copilot`;
240
- runtime `copilot`; CLI session key `copilot`; auth profile
241
- prefix `github-copilot:`.
242
-
243
- `extensions/copilot/src/doctor-probes.ts` exports three imperative probes
244
- that hosts (including `fengming doctor`) can call to verify the environment:
245
-
246
- | Probe | What it checks | Reasons it can fail |
247
- | -------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
248
- | `probeCopilotCliVersion` | `copilot --version` exits 0 with a non-empty version string | `non-zero-exit`, `empty-version`, `spawn-failed`, `spawn-error`, `probe-timeout` |
249
- | `probeCopilotHomeWritable` | `mkdir -p copilotHome` + write + rm a marker file | `copilothome-not-writable` (with the underlying fs error in `details.rawError`) |
250
- | `probeCopilotAuthShape` | At least one of `useLoggedInUser`, `gitHubToken`, or `profileId`+`profileVersion` | `no-auth-source` |
251
-
252
- Each probe accepts a DI seam (`spawnFn`, `fsApi`) so tests do not spawn the
253
- real Copilot CLI or touch the host fs.
254
-
255
- ## Limitations
256
-
257
- - The harness only claims the canonical `github-copilot` provider at MVP.
258
- Additional providers (BYOK or otherwise) should land in follow-up PRs that
259
- ship the adapter alongside the wire-up.
260
- - The harness does not deliver TUI; PI's TUI is unaffected and remains the
261
- fallback for whatever runtimes do not have a peer surface.
262
- - PI session state is not migrated when an agent switches to `copilot`.
263
- Selection is per attempt; existing PI sessions remain valid.
264
- - **Interactive `ask_user` is not yet wired.** The SDK's
265
- `onUserInputRequest` handler is intentionally not registered, which
266
- per the SDK contract hides the `ask_user` tool from the model
267
- entirely. Agents running under this harness make best-judgment
268
- decisions from the initial prompt rather than asking clarifying
269
- questions mid-turn. A follow-up will port the codex pattern at
270
- `extensions/codex/src/app-server/user-input-bridge.ts` to route SDK
271
- `UserInputRequest`s through the FengMing channel/TUI prompt path; the
272
- dormant scaffolding in `extensions/copilot/src/user-input-bridge.ts`
273
- is the surface that follow-up will wire.
274
-
275
- ## Permissions and ask_user
276
-
277
- Permission enforcement for bridged FengMing tools happens **inside the
278
- tool wrapper**, not via the SDK's `onPermissionRequest` callback. The
279
- same `wrapToolWithBeforeToolCallHook` that PI uses
280
- (`src/agents/pi-tools.before-tool-call.ts`) is applied by
281
- `createFengMingCodingTools` to every coding tool: loop detection,
282
- trusted plugin policies, before-tool-call hooks, and two-phase plugin
283
- approvals via the gateway (`plugin.approval.request`) all run with the
284
- exact same code path as native PI attempts.
285
-
286
- To let that wrapper own the decision, the SDK Tool returned by
287
- `convertFengMingToolToSdkTool` is marked with:
288
-
289
- - `overridesBuiltInTool: true` — replaces the Copilot CLI's built-in
290
- tool of the same name (edit, read, write, bash, …) so every tool
291
- invocation routes back to FengMing.
292
- - `skipPermission: true` — tells the SDK not to fire
293
- `onPermissionRequest({kind: "custom-tool"})` before invoking the tool.
294
- The wrapped `execute()` performs the richer FengMing policy check
295
- internally; an SDK-level prompt would either short-circuit FengMing's
296
- enforcement (if we allow-all) or block every tool call (if we
297
- reject-all) — neither matches PI parity.
298
-
299
- The in-tree codex harness uses the same split: bridged FengMing tools
300
- are wrapped (`extensions/codex/src/app-server/dynamic-tools.ts`) and
301
- the codex-app-server's _own_ native approval kinds
302
- (`item/commandExecution/requestApproval`,
303
- `item/fileChange/requestApproval`,
304
- `item/permissions/requestApproval`) are routed through
305
- `plugin.approval.request`
306
- (`extensions/codex/src/app-server/approval-bridge.ts`). The Copilot SDK
307
- equivalent — fail-closed `rejectAllPolicy` for any non-`custom-tool`
308
- kind that ever reaches `onPermissionRequest` — is the same safety net,
309
- and it does not fire in practice because `overridesBuiltInTool: true`
310
- displaces every built-in.
311
-
312
- For the wrapped-tool layer to make policy decisions equivalent to PI,
313
- the harness forwards the full PI attempt-tool context to
314
- `createFengMingCodingTools` — identity (`senderIsOwner`,
315
- `memberRoleIds`, `ownerOnlyToolAllowlist`, …), channel/routing
316
- (`groupId`, `currentChannelId`, `replyToMode`, message-tool toggles),
317
- auth (`authProfileStore`), run identity
318
- (`sessionKey`/`runSessionKey` derived from `sandboxSessionKey`,
319
- `runId`), model context (`modelApi`, `modelContextWindowTokens`,
320
- `modelCompat`, `modelHasVision`), and run hooks (`onToolOutcome`,
321
- `onYield`). Without those fields, owner-only allowlists silently
322
- behave as deny-by-default, plugin-trust policies cannot resolve to the
323
- right scope, and `session_status: "current"` resolves to a stale
324
- sandbox key. The bridge builder is in
325
- `extensions/copilot/src/tool-bridge.ts` and mirrors the PI
326
- authoritative call at
327
- `src/agents/pi-embedded-runner/run/attempt.ts:1029-1117`. Two PI fields
328
- are intentionally **not** forwarded at MVP and tracked as follow-ups:
329
- `sandbox` (the harness does not yet route through `resolveSandboxContext`)
330
- and the PI tool-search/code-mode machinery
331
- (`toolSearchCatalogRef`, `includeCoreTools`,
332
- `includeToolSearchControls`, `toolSearchCatalogExecutor`,
333
- `toolConstructionPlan`), which has no analog at the SDK boundary.
334
-
335
- ### Session-level GitHub token
336
-
337
- The Copilot SDK contract distinguishes the **client-level** GitHub
338
- token (`CopilotClientOptions.gitHubToken`, used to authenticate the
339
- CLI process itself) from the **session-level** token
340
- (`SessionConfig.gitHubToken`, which determines content exclusion,
341
- model routing, and quota for that session and is honored on both
342
- `createSession` and `resumeSession`). The harness resolves auth once
343
- via `resolveCopilotAuth` and sets both fields when the auth mode is
344
- `gitHubToken` (an explicit `auth.gitHubToken` or a contract-resolved
345
- `resolvedApiKey` from a configured `github-copilot` auth profile).
346
- When the resolved mode is `useLoggedInUser`, the session-level field
347
- is omitted so the SDK keeps deriving identity from the logged-in
348
- identity.
349
-
350
- `ask_user` is intentionally hidden — see Limitations above.
351
-
352
- ## Related
353
-
354
- - [Agent runtimes](/concepts/agent-runtimes)
355
- - [Codex harness](/plugins/codex-harness)
356
- - [Agent harness plugins (SDK reference)](/plugins/sdk-agent-harness)
@@ -1,176 +0,0 @@
1
- ---
2
- summary: "How FengMing installs plugin packages and resolves plugin dependencies"
3
- read_when:
4
- - You are debugging plugin package installs
5
- - You are changing plugin startup, doctor, or package-manager install behavior
6
- - You are maintaining packaged FengMing installs or bundled plugin manifests
7
- title: "Plugin dependency resolution"
8
- sidebarTitle: "Dependencies"
9
- ---
10
-
11
- FengMing keeps plugin dependency work at install/update time. Runtime loading
12
- does not run package managers, repair dependency trees, or mutate the FengMing
13
- package directory.
14
-
15
- ## Responsibility split
16
-
17
- Plugin packages own their dependency graph:
18
-
19
- - runtime dependencies live in the plugin package `dependencies` or
20
- `optionalDependencies`
21
- - SDK/core imports are peer or supplied FengMing imports
22
- - local development plugins bring their own already-installed dependencies
23
- - npm and git plugins are installed into FengMing-owned package roots
24
-
25
- FengMing owns only the plugin lifecycle:
26
-
27
- - discover the plugin source
28
- - install or update the package when explicitly requested
29
- - record the install metadata
30
- - load the plugin entrypoint
31
- - fail with an actionable error when dependencies are missing
32
-
33
- ## Install roots
34
-
35
- FengMing uses stable per-source roots:
36
-
37
- - npm packages install into per-plugin projects under
38
- `~/.fengming/npm/projects/<encoded-package>`
39
- - git packages clone under `~/.fengming/git`
40
- - local/path/archive installs are copied or referenced without dependency repair
41
-
42
- npm installs run in that per-plugin project root with:
43
-
44
- ```bash
45
- cd ~/.fengming/npm/projects/<encoded-package>
46
- npm install --omit=dev --omit=peer --legacy-peer-deps --ignore-scripts --no-audit --no-fund
47
- ```
48
-
49
- `fengming plugins install npm-pack:<path.tgz>` uses that same per-plugin npm
50
- project root for a local npm-pack tarball. FengMing reads the tarball's npm
51
- metadata, adds it to the managed project as a copied `file:` dependency, runs
52
- the normal npm install, and then verifies the installed lockfile metadata before
53
- trusting the plugin.
54
- This is intended for package-acceptance and release-candidate proof where a
55
- local pack artifact should behave like the registry artifact it simulates.
56
-
57
- npm may hoist transitive dependencies to the per-plugin project's
58
- `node_modules` beside the plugin package. FengMing scans the managed project
59
- root before trusting the install and removes that project during uninstall, so
60
- hoisted runtime dependencies stay inside that plugin's cleanup boundary.
61
-
62
- Published npm plugin packages can ship `npm-shrinkwrap.json`. npm uses that
63
- publishable lockfile during install, and FengMing's managed npm project root
64
- supports it through the normal npm install path. FengMing-owned publishable
65
- plugin packages must include a package-local shrinkwrap generated from that
66
- plugin package's published dependency graph:
67
-
68
- ```bash
69
- pnpm deps:shrinkwrap:generate
70
- pnpm deps:shrinkwrap:check
71
- ```
72
-
73
- The generator strips plugin `devDependencies`, applies the workspace override
74
- policy, and writes `extensions/<id>/npm-shrinkwrap.json` for each
75
- `publishToNpm` plugin. Third-party plugin packages may also ship shrinkwrap;
76
- FengMing does not require it for community packages, but npm will respect it
77
- when present.
78
-
79
- FengMing-owned npm plugin packages can also publish with explicit
80
- `bundledDependencies`. The npm publish path overlays the runtime dependency
81
- name list, removes dev-only workspace metadata from the published package
82
- manifest, runs a script-free npm install for package-local runtime
83
- dependencies, then packs or publishes the plugin tarball with those dependency
84
- files included. Native-heavy packages, including Codex and ACP runtimes, opt out
85
- with `fengming.release.bundleRuntimeDependencies: false`; those packages still
86
- ship their shrinkwrap, but npm resolves runtime dependencies during install
87
- instead of embedding every platform binary in the plugin tarball. The root
88
- `fengming` package does not bundle its full dependency tree.
89
-
90
- Plugins that import `fengming/plugin-sdk/*` declare `fengming` as a peer
91
- dependency. FengMing does not let npm install a separate registry copy of the
92
- host package into a managed project, because stale host packages can affect npm
93
- peer resolution inside that plugin. Managed npm installs skip npm peer
94
- resolution/materialization and FengMing reasserts plugin-local
95
- `node_modules/fengming` links for installed packages that declare the host peer
96
- after install or update.
97
-
98
- git installs clone or refresh the repository, then run:
99
-
100
- ```bash
101
- npm install --omit=dev --ignore-scripts --no-audit --no-fund
102
- ```
103
-
104
- The installed plugin then loads from that package directory, so package-local
105
- and parent `node_modules` resolution works the same way it does for a normal
106
- Node package.
107
-
108
- ## Local plugins
109
-
110
- Local plugins are treated as developer-controlled directories. FengMing does not
111
- run `npm install`, `pnpm install`, or dependency repair for them. If a local
112
- plugin has dependencies, install them in that plugin before loading it.
113
-
114
- Third-party TypeScript local plugins can use the emergency Jiti path. Packaged
115
- JavaScript plugins and bundled internal plugins load through native
116
- import/require instead of Jiti.
117
-
118
- ## Startup and reload
119
-
120
- Gateway startup and config reload never install plugin dependencies. They read
121
- the plugin install records, compute the entrypoint, and load it.
122
-
123
- If a dependency is missing at runtime, the plugin fails to load and the error
124
- should point the operator to an explicit fix:
125
-
126
- ```bash
127
- fengming plugins update <id>
128
- fengming plugins install <source>
129
- fengming doctor --fix
130
- ```
131
-
132
- `doctor --fix` can clean legacy FengMing-generated dependency state and recover
133
- downloadable plugins that are missing from the local install records when config
134
- references them. Doctor does not repair dependencies for an already-installed
135
- local plugin.
136
-
137
- ## Bundled plugins
138
-
139
- Lightweight and core-critical bundled plugins are shipped as part of FengMing.
140
- They should either have no heavy runtime dependency tree or be moved out to a
141
- downloadable package on ClawHub/npm.
142
-
143
- For the current generated list of plugins that ship in the core package, install
144
- externally, or stay source-only, see [Plugin inventory](/plugins/plugin-inventory).
145
-
146
- Bundled plugin manifests must not request dependency staging. Large or optional
147
- plugin functionality should be packaged as a normal plugin and installed through
148
- the same npm/git/ClawHub path as third-party plugins.
149
-
150
- In source checkouts, FengMing treats the repository as a pnpm monorepo. After
151
- `pnpm install`, bundled plugins load from `extensions/<id>` so package-local
152
- workspace dependencies are available and edits are picked up directly. Source
153
- checkout development is pnpm-only; plain `npm install` at the repository root is
154
- not a supported way to prepare bundled plugin dependencies.
155
-
156
- | Install shape | Bundled plugin location | Dependency owner |
157
- | -------------------------------- | ------------------------------------- | -------------------------------------------------------------------- |
158
- | `npm install -g fengming` | Built runtime tree inside the package | FengMing package and explicit plugin install/update/doctor flows |
159
- | Git checkout plus `pnpm install` | `extensions/<id>` workspace packages | The pnpm workspace, including each plugin package's own dependencies |
160
- | `fengming plugins install ...` | Managed npm project/git/ClawHub root | The plugin install/update flow |
161
-
162
- ## Legacy cleanup
163
-
164
- Older FengMing versions generated bundled-plugin dependency roots at startup or
165
- during doctor repair. Current doctor cleanup removes those stale directories and
166
- symlinks when `--fix` is used, including old `plugin-runtime-deps` roots, global
167
- Node-prefix package symlinks that point at pruned `plugin-runtime-deps` targets,
168
- `.fengming-runtime-deps*` manifests, generated plugin `node_modules`, install
169
- stage directories, and package-local pnpm stores. Packaged postinstall also
170
- removes those global symlinks before pruning the legacy target roots so upgrades
171
- do not leave dangling ESM package imports.
172
-
173
- Older npm installs also used a shared `~/.fengming/npm/node_modules` root.
174
- Current install, update, uninstall, and doctor flows still recognize that legacy
175
- flat root only for recovery and cleanup. New npm installs should create
176
- per-plugin project roots instead.