fengming 0.3.10 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +2 -2
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/cli-startup-metadata.json +8 -8
- package/dist/control-ui/assets/{activity-D-mnRThU.js → activity-wgT0-JR0.js} +2 -2
- package/dist/control-ui/assets/{agents-U_KSP5I_.js → agents-DG5PobrT.js} +2 -2
- package/dist/control-ui/assets/{channels-ohK9_G1O.js → channels-CX28oM42.js} +2 -2
- package/dist/control-ui/assets/{cron-6ZCzfU29.js → cron-B8ixwBqU.js} +2 -2
- package/dist/control-ui/assets/{debug-CSsDLg_s.js → debug-CnkYZUXy.js} +2 -2
- package/dist/control-ui/assets/{index-jUDczxhd.js → index-DQRZJKbO.js} +4 -4
- package/dist/control-ui/assets/{instances-782ZoDT4.js → instances-BE3mV1JC.js} +2 -2
- package/dist/control-ui/assets/{nodes-BMX16BKM.js → nodes-Cou4PWRX.js} +2 -2
- package/dist/control-ui/assets/{sessions-jLGSApYa.js → sessions-DpAaBT21.js} +2 -2
- package/dist/control-ui/assets/{skills-DweBwUhs.js → skills-DjA_j_20.js} +2 -2
- package/dist/control-ui/assets/{workboard-BsU-FXIo.js → workboard-BFnvbS0k.js} +2 -2
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/sw.js +1 -1
- package/dist/gateway/protocol/index.d.ts +1 -1
- package/dist/{index-AZzJCgph.d.ts → index-DuDY3bCZ.d.ts} +2 -2
- package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
- package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
- package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
- package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
- package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
- package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
- package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
- package/dist/plugin-sdk/channel-core.d.ts +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
- package/dist/plugin-sdk/compat.d.ts +2 -2
- package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
- package/dist/plugin-sdk/config-schema.d.ts +2 -2
- package/dist/plugin-sdk/core.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +2 -2
- package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
- package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
- package/package.json +4 -409
- package/CHANGELOG.md +0 -42
- package/THIRD_PARTY_NOTICES.md +0 -37
- package/docs/.i18n/README.md +0 -81
- package/docs/.i18n/ar-navigation.json +0 -18
- package/docs/.i18n/de-navigation.json +0 -18
- package/docs/.i18n/es-navigation.json +0 -18
- package/docs/.i18n/fr-navigation.json +0 -18
- package/docs/.i18n/glossary.ar.json +0 -78
- package/docs/.i18n/glossary.de.json +0 -78
- package/docs/.i18n/glossary.es.json +0 -78
- package/docs/.i18n/glossary.fa.json +0 -78
- package/docs/.i18n/glossary.fr.json +0 -78
- package/docs/.i18n/glossary.id.json +0 -78
- package/docs/.i18n/glossary.it.json +0 -78
- package/docs/.i18n/glossary.ja-JP.json +0 -98
- package/docs/.i18n/glossary.ko.json +0 -78
- package/docs/.i18n/glossary.nl.json +0 -78
- package/docs/.i18n/glossary.pl.json +0 -78
- package/docs/.i18n/glossary.pt-BR.json +0 -78
- package/docs/.i18n/glossary.th.json +0 -78
- package/docs/.i18n/glossary.tr.json +0 -78
- package/docs/.i18n/glossary.uk.json +0 -78
- package/docs/.i18n/glossary.vi.json +0 -78
- package/docs/.i18n/glossary.zh-CN.json +0 -1122
- package/docs/.i18n/glossary.zh-TW.json +0 -78
- package/docs/.i18n/id-navigation.json +0 -18
- package/docs/.i18n/it-navigation.json +0 -18
- package/docs/.i18n/ja-navigation.json +0 -18
- package/docs/.i18n/ko-navigation.json +0 -18
- package/docs/.i18n/pl-navigation.json +0 -18
- package/docs/.i18n/pt-BR-navigation.json +0 -18
- package/docs/.i18n/tr-navigation.json +0 -18
- package/docs/.i18n/translation-workflow.md +0 -111
- package/docs/.i18n/zh-Hans-navigation.json +0 -552
- package/docs/AGENTS.md +0 -36
- package/docs/CLAUDE.md +0 -1
- package/docs/agent-runtime-architecture.md +0 -48
- package/docs/announcements/bluebubbles-imessage.md +0 -79
- package/docs/auth-credential-semantics.md +0 -124
- package/docs/automation/auth-monitoring.md +0 -11
- package/docs/automation/clawflow.md +0 -12
- package/docs/automation/cron-jobs.md +0 -534
- package/docs/automation/cron-vs-heartbeat.md +0 -11
- package/docs/automation/gmail-pubsub.md +0 -11
- package/docs/automation/hooks.md +0 -387
- package/docs/automation/index.md +0 -135
- package/docs/automation/poll.md +0 -12
- package/docs/automation/standing-orders.md +0 -250
- package/docs/automation/taskflow.md +0 -155
- package/docs/automation/tasks.md +0 -374
- package/docs/automation/troubleshooting.md +0 -12
- package/docs/automation/webhook.md +0 -12
- package/docs/brave-search.md +0 -11
- package/docs/channels/access-groups.md +0 -201
- package/docs/channels/ambient-room-events.md +0 -214
- package/docs/channels/bot-loop-protection.md +0 -131
- package/docs/channels/broadcast-groups.md +0 -472
- package/docs/channels/channel-routing.md +0 -162
- package/docs/channels/clickclack.md +0 -138
- package/docs/channels/discord.md +0 -1758
- package/docs/channels/feishu.md +0 -650
- package/docs/channels/googlechat.md +0 -284
- package/docs/channels/group-messages.md +0 -95
- package/docs/channels/groups.md +0 -524
- package/docs/channels/imessage-from-bluebubbles.md +0 -259
- package/docs/channels/imessage.md +0 -839
- package/docs/channels/index.md +0 -64
- package/docs/channels/irc.md +0 -253
- package/docs/channels/line.md +0 -243
- package/docs/channels/location.md +0 -71
- package/docs/channels/matrix-migration.md +0 -370
- package/docs/channels/matrix-presentation.md +0 -77
- package/docs/channels/matrix-push-rules.md +0 -150
- package/docs/channels/matrix.md +0 -921
- package/docs/channels/mattermost.md +0 -542
- package/docs/channels/msteams.md +0 -1096
- package/docs/channels/nextcloud-talk.md +0 -176
- package/docs/channels/nostr.md +0 -253
- package/docs/channels/pairing.md +0 -214
- package/docs/channels/qqbot.md +0 -314
- package/docs/channels/signal.md +0 -417
- package/docs/channels/slack.md +0 -1623
- package/docs/channels/synology-chat.md +0 -187
- package/docs/channels/telegram.md +0 -1124
- package/docs/channels/tlon.md +0 -296
- package/docs/channels/troubleshooting.md +0 -162
- package/docs/channels/twitch.md +0 -431
- package/docs/channels/wechat.md +0 -171
- package/docs/channels/whatsapp.md +0 -796
- package/docs/channels/yuanbao.md +0 -416
- package/docs/channels/zalo.md +0 -253
- package/docs/channels/zalouser.md +0 -217
- package/docs/ci.md +0 -657
- package/docs/clawhub/publishing.md +0 -96
- package/docs/cli/acp.md +0 -370
- package/docs/cli/agent.md +0 -109
- package/docs/cli/agents.md +0 -253
- package/docs/cli/approvals.md +0 -190
- package/docs/cli/backup.md +0 -98
- package/docs/cli/browser.md +0 -307
- package/docs/cli/channels.md +0 -154
- package/docs/cli/clawbot.md +0 -25
- package/docs/cli/commitments.md +0 -90
- package/docs/cli/completion.md +0 -39
- package/docs/cli/config.md +0 -504
- package/docs/cli/configure.md +0 -77
- package/docs/cli/crestodian.md +0 -337
- package/docs/cli/cron.md +0 -304
- package/docs/cli/daemon.md +0 -67
- package/docs/cli/dashboard.md +0 -33
- package/docs/cli/devices.md +0 -240
- package/docs/cli/directory.md +0 -68
- package/docs/cli/dns.md +0 -53
- package/docs/cli/docs.md +0 -63
- package/docs/cli/doctor.md +0 -241
- package/docs/cli/flows.md +0 -52
- package/docs/cli/gateway.md +0 -572
- package/docs/cli/health.md +0 -43
- package/docs/cli/hooks.md +0 -345
- package/docs/cli/index.md +0 -400
- package/docs/cli/infer.md +0 -364
- package/docs/cli/logs.md +0 -68
- package/docs/cli/mcp.md +0 -529
- package/docs/cli/memory.md +0 -183
- package/docs/cli/message.md +0 -317
- package/docs/cli/migrate.md +0 -334
- package/docs/cli/models.md +0 -239
- package/docs/cli/node.md +0 -177
- package/docs/cli/nodes.md +0 -76
- package/docs/cli/onboard.md +0 -250
- package/docs/cli/pairing.md +0 -77
- package/docs/cli/path.md +0 -511
- package/docs/cli/plugins.md +0 -459
- package/docs/cli/policy.md +0 -886
- package/docs/cli/proxy.md +0 -89
- package/docs/cli/qr.md +0 -56
- package/docs/cli/reset.md +0 -39
- package/docs/cli/sandbox.md +0 -208
- package/docs/cli/secrets.md +0 -202
- package/docs/cli/security.md +0 -136
- package/docs/cli/sessions.md +0 -164
- package/docs/cli/setup.md +0 -59
- package/docs/cli/skills.md +0 -122
- package/docs/cli/status.md +0 -45
- package/docs/cli/system.md +0 -89
- package/docs/cli/tasks.md +0 -111
- package/docs/cli/transcripts.md +0 -151
- package/docs/cli/tui.md +0 -91
- package/docs/cli/uninstall.md +0 -44
- package/docs/cli/update.md +0 -243
- package/docs/cli/voicecall.md +0 -204
- package/docs/cli/webhooks.md +0 -117
- package/docs/cli/wiki.md +0 -256
- package/docs/concepts/active-memory.md +0 -856
- package/docs/concepts/agent-loop.md +0 -185
- package/docs/concepts/agent-runtimes.md +0 -276
- package/docs/concepts/agent-workspace.md +0 -230
- package/docs/concepts/agent.md +0 -140
- package/docs/concepts/architecture.md +0 -154
- package/docs/concepts/channel-docking.md +0 -145
- package/docs/concepts/commitments.md +0 -150
- package/docs/concepts/compaction.md +0 -203
- package/docs/concepts/context-engine.md +0 -347
- package/docs/concepts/context.md +0 -199
- package/docs/concepts/delegate-architecture.md +0 -319
- package/docs/concepts/dreaming.md +0 -264
- package/docs/concepts/experimental-features.md +0 -109
- package/docs/concepts/features.md +0 -91
- package/docs/concepts/fengming-sdk.md +0 -323
- package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
- package/docs/concepts/mantis.md +0 -744
- package/docs/concepts/markdown-formatting.md +0 -139
- package/docs/concepts/memory-builtin.md +0 -148
- package/docs/concepts/memory-honcho.md +0 -144
- package/docs/concepts/memory-qmd.md +0 -271
- package/docs/concepts/memory-search.md +0 -167
- package/docs/concepts/memory.md +0 -299
- package/docs/concepts/message-lifecycle-refactor.md +0 -1126
- package/docs/concepts/messages.md +0 -214
- package/docs/concepts/model-failover.md +0 -384
- package/docs/concepts/model-providers.md +0 -719
- package/docs/concepts/models.md +0 -371
- package/docs/concepts/multi-agent.md +0 -625
- package/docs/concepts/oauth.md +0 -198
- package/docs/concepts/parallel-specialist-lanes.md +0 -127
- package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
- package/docs/concepts/presence.md +0 -117
- package/docs/concepts/progress-drafts.md +0 -406
- package/docs/concepts/qa-e2e-automation.md +0 -947
- package/docs/concepts/qa-matrix.md +0 -139
- package/docs/concepts/queue-steering.md +0 -90
- package/docs/concepts/queue.md +0 -136
- package/docs/concepts/retry.md +0 -86
- package/docs/concepts/session-pruning.md +0 -104
- package/docs/concepts/session-tool.md +0 -188
- package/docs/concepts/session.md +0 -164
- package/docs/concepts/soul.md +0 -116
- package/docs/concepts/streaming.md +0 -257
- package/docs/concepts/system-prompt.md +0 -328
- package/docs/concepts/timezone.md +0 -47
- package/docs/concepts/typebox.md +0 -309
- package/docs/concepts/typing-indicators.md +0 -88
- package/docs/concepts/usage-tracking.md +0 -66
- package/docs/date-time.md +0 -126
- package/docs/debug/node-issue.md +0 -90
- package/docs/diagnostics/flags.md +0 -182
- package/docs/docs.json +0 -1862
- package/docs/fengming-agent-runtime.md +0 -82
- package/docs/gateway/authentication.md +0 -256
- package/docs/gateway/background-process.md +0 -147
- package/docs/gateway/bonjour.md +0 -303
- package/docs/gateway/bridge-protocol.md +0 -97
- package/docs/gateway/cli-backends.md +0 -439
- package/docs/gateway/config-agents.md +0 -1525
- package/docs/gateway/config-channels.md +0 -945
- package/docs/gateway/config-tools.md +0 -774
- package/docs/gateway/configuration-examples.md +0 -704
- package/docs/gateway/configuration-reference.md +0 -1391
- package/docs/gateway/configuration.md +0 -739
- package/docs/gateway/diagnostics.md +0 -213
- package/docs/gateway/discovery.md +0 -154
- package/docs/gateway/doctor.md +0 -575
- package/docs/gateway/gateway-lock.md +0 -37
- package/docs/gateway/health.md +0 -73
- package/docs/gateway/heartbeat.md +0 -498
- package/docs/gateway/index.md +0 -383
- package/docs/gateway/local-model-services.md +0 -205
- package/docs/gateway/local-models.md +0 -355
- package/docs/gateway/logging.md +0 -149
- package/docs/gateway/multiple-gateways.md +0 -178
- package/docs/gateway/network-model.md +0 -15
- package/docs/gateway/openai-http-api.md +0 -378
- package/docs/gateway/openresponses-http-api.md +0 -347
- package/docs/gateway/openshell.md +0 -316
- package/docs/gateway/opentelemetry.md +0 -433
- package/docs/gateway/operator-scopes.md +0 -119
- package/docs/gateway/pairing.md +0 -207
- package/docs/gateway/prometheus.md +0 -249
- package/docs/gateway/protocol.md +0 -826
- package/docs/gateway/remote-gateway-readme.md +0 -169
- package/docs/gateway/remote.md +0 -280
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
- package/docs/gateway/sandboxing.md +0 -546
- package/docs/gateway/secrets-plan-contract.md +0 -159
- package/docs/gateway/secrets.md +0 -805
- package/docs/gateway/security/audit-checks.md +0 -127
- package/docs/gateway/security/exposure-runbook.md +0 -212
- package/docs/gateway/security/index.md +0 -1343
- package/docs/gateway/security/secure-file-operations.md +0 -76
- package/docs/gateway/security/shrinkwrap.md +0 -111
- package/docs/gateway/tailscale.md +0 -156
- package/docs/gateway/tools-invoke-http-api.md +0 -169
- package/docs/gateway/troubleshooting.md +0 -877
- package/docs/gateway/trusted-proxy-auth.md +0 -483
- package/docs/help/debugging.md +0 -341
- package/docs/help/environment.md +0 -233
- package/docs/help/faq-first-run.md +0 -870
- package/docs/help/faq-models.md +0 -556
- package/docs/help/faq.md +0 -2041
- package/docs/help/index.md +0 -39
- package/docs/help/scripts.md +0 -56
- package/docs/help/testing-live.md +0 -587
- package/docs/help/testing-updates-plugins.md +0 -299
- package/docs/help/testing.md +0 -977
- package/docs/help/troubleshooting.md +0 -449
- package/docs/index.md +0 -196
- package/docs/install/ansible.md +0 -233
- package/docs/install/azure.md +0 -315
- package/docs/install/bun.md +0 -59
- package/docs/install/clawdock.md +0 -112
- package/docs/install/development-channels.md +0 -148
- package/docs/install/digitalocean.md +0 -174
- package/docs/install/docker-vm-runtime.md +0 -154
- package/docs/install/docker.md +0 -564
- package/docs/install/exe-dev.md +0 -201
- package/docs/install/fly.md +0 -524
- package/docs/install/gcp.md +0 -418
- package/docs/install/hetzner.md +0 -285
- package/docs/install/hostinger.md +0 -98
- package/docs/install/index.md +0 -232
- package/docs/install/installer.md +0 -447
- package/docs/install/kubernetes.md +0 -196
- package/docs/install/macos-vm.md +0 -281
- package/docs/install/migrating-claude.md +0 -165
- package/docs/install/migrating-hermes.md +0 -178
- package/docs/install/migrating.md +0 -137
- package/docs/install/nix.md +0 -112
- package/docs/install/node.md +0 -142
- package/docs/install/northflank.mdx +0 -44
- package/docs/install/oracle.md +0 -218
- package/docs/install/podman.md +0 -216
- package/docs/install/railway.mdx +0 -92
- package/docs/install/raspberry-pi.md +0 -234
- package/docs/install/render.mdx +0 -167
- package/docs/install/uninstall.md +0 -131
- package/docs/install/updating.md +0 -284
- package/docs/install/upstash.md +0 -96
- package/docs/logging.md +0 -320
- package/docs/nav-tabs-underline.js +0 -100
- package/docs/network.md +0 -72
- package/docs/nodes/audio.md +0 -216
- package/docs/nodes/camera.md +0 -166
- package/docs/nodes/images.md +0 -77
- package/docs/nodes/index.md +0 -439
- package/docs/nodes/location-command.md +0 -102
- package/docs/nodes/media-understanding.md +0 -495
- package/docs/nodes/talk.md +0 -160
- package/docs/nodes/troubleshooting.md +0 -123
- package/docs/nodes/voicewake.md +0 -93
- package/docs/perplexity.md +0 -11
- package/docs/plan/codex-context-engine-harness.md +0 -624
- package/docs/plan/ui-channels.md +0 -284
- package/docs/platforms/digitalocean.md +0 -12
- package/docs/platforms/easyrunner.md +0 -109
- package/docs/platforms/index.md +0 -51
- package/docs/platforms/linux.md +0 -141
- package/docs/platforms/mac/bundled-gateway.md +0 -79
- package/docs/platforms/mac/canvas.md +0 -128
- package/docs/platforms/mac/child-process.md +0 -72
- package/docs/platforms/mac/dev-setup.md +0 -112
- package/docs/platforms/mac/health.md +0 -39
- package/docs/platforms/mac/icon.md +0 -36
- package/docs/platforms/mac/logging.md +0 -62
- package/docs/platforms/mac/menu-bar.md +0 -93
- package/docs/platforms/mac/peekaboo.md +0 -96
- package/docs/platforms/mac/permissions.md +0 -73
- package/docs/platforms/mac/remote.md +0 -123
- package/docs/platforms/mac/signing.md +0 -52
- package/docs/platforms/mac/skills.md +0 -43
- package/docs/platforms/mac/voice-overlay.md +0 -66
- package/docs/platforms/mac/voicewake.md +0 -73
- package/docs/platforms/mac/webchat.md +0 -54
- package/docs/platforms/mac/xpc.md +0 -66
- package/docs/platforms/oracle.md +0 -12
- package/docs/platforms/raspberry-pi.md +0 -13
- package/docs/platforms/windows.md +0 -286
- package/docs/plugins/adding-capabilities.md +0 -146
- package/docs/plugins/admin-http-rpc.md +0 -216
- package/docs/plugins/agent-tools.md +0 -13
- package/docs/plugins/architecture-internals.md +0 -1196
- package/docs/plugins/architecture.md +0 -483
- package/docs/plugins/building-extensions.md +0 -13
- package/docs/plugins/building-plugins.md +0 -335
- package/docs/plugins/bundles.md +0 -310
- package/docs/plugins/cli-backend-plugins.md +0 -310
- package/docs/plugins/codex-computer-use.md +0 -297
- package/docs/plugins/codex-harness-reference.md +0 -470
- package/docs/plugins/codex-harness-runtime.md +0 -268
- package/docs/plugins/codex-harness.md +0 -780
- package/docs/plugins/codex-native-plugins.md +0 -276
- package/docs/plugins/community.md +0 -77
- package/docs/plugins/compatibility.md +0 -167
- package/docs/plugins/copilot.md +0 -356
- package/docs/plugins/dependency-resolution.md +0 -176
- package/docs/plugins/google-meet.md +0 -1737
- package/docs/plugins/hooks.md +0 -484
- package/docs/plugins/install-overrides.md +0 -80
- package/docs/plugins/manage-plugins.md +0 -210
- package/docs/plugins/manifest.md +0 -1457
- package/docs/plugins/memory-lancedb.md +0 -385
- package/docs/plugins/memory-wiki.md +0 -529
- package/docs/plugins/message-presentation.md +0 -473
- package/docs/plugins/oc-path.md +0 -166
- package/docs/plugins/plugin-inventory.md +0 -189
- package/docs/plugins/plugin-permission-requests.md +0 -193
- package/docs/plugins/reference/acpx.md +0 -23
- package/docs/plugins/reference/admin-http-rpc.md +0 -23
- package/docs/plugins/reference/alibaba.md +0 -23
- package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
- package/docs/plugins/reference/amazon-bedrock.md +0 -23
- package/docs/plugins/reference/anthropic-vertex.md +0 -19
- package/docs/plugins/reference/anthropic.md +0 -23
- package/docs/plugins/reference/arcee.md +0 -23
- package/docs/plugins/reference/azure-speech.md +0 -23
- package/docs/plugins/reference/bonjour.md +0 -19
- package/docs/plugins/reference/brave.md +0 -23
- package/docs/plugins/reference/browser.md +0 -23
- package/docs/plugins/reference/byteplus.md +0 -19
- package/docs/plugins/reference/canvas.md +0 -19
- package/docs/plugins/reference/cerebras.md +0 -23
- package/docs/plugins/reference/chutes.md +0 -23
- package/docs/plugins/reference/clickclack.md +0 -23
- package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
- package/docs/plugins/reference/codex-supervisor.md +0 -27
- package/docs/plugins/reference/codex.md +0 -23
- package/docs/plugins/reference/comfy.md +0 -23
- package/docs/plugins/reference/copilot-proxy.md +0 -19
- package/docs/plugins/reference/copilot.md +0 -23
- package/docs/plugins/reference/deepgram.md +0 -23
- package/docs/plugins/reference/deepinfra.md +0 -23
- package/docs/plugins/reference/deepseek.md +0 -23
- package/docs/plugins/reference/diagnostics-otel.md +0 -19
- package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
- package/docs/plugins/reference/diffs-language-pack.md +0 -19
- package/docs/plugins/reference/diffs.md +0 -19
- package/docs/plugins/reference/discord.md +0 -23
- package/docs/plugins/reference/document-extract.md +0 -23
- package/docs/plugins/reference/duckduckgo.md +0 -23
- package/docs/plugins/reference/elevenlabs.md +0 -23
- package/docs/plugins/reference/exa.md +0 -23
- package/docs/plugins/reference/fal.md +0 -23
- package/docs/plugins/reference/feishu.md +0 -23
- package/docs/plugins/reference/file-transfer.md +0 -19
- package/docs/plugins/reference/firecrawl.md +0 -23
- package/docs/plugins/reference/fireworks.md +0 -23
- package/docs/plugins/reference/github-copilot.md +0 -23
- package/docs/plugins/reference/gmi.md +0 -23
- package/docs/plugins/reference/google-meet.md +0 -23
- package/docs/plugins/reference/google.md +0 -23
- package/docs/plugins/reference/googlechat.md +0 -23
- package/docs/plugins/reference/gradium.md +0 -23
- package/docs/plugins/reference/groq.md +0 -23
- package/docs/plugins/reference/huggingface.md +0 -23
- package/docs/plugins/reference/imessage.md +0 -23
- package/docs/plugins/reference/inworld.md +0 -23
- package/docs/plugins/reference/irc.md +0 -23
- package/docs/plugins/reference/kilocode.md +0 -23
- package/docs/plugins/reference/kimi.md +0 -23
- package/docs/plugins/reference/line.md +0 -23
- package/docs/plugins/reference/litellm.md +0 -23
- package/docs/plugins/reference/llm-task.md +0 -19
- package/docs/plugins/reference/lmstudio.md +0 -23
- package/docs/plugins/reference/lobster.md +0 -19
- package/docs/plugins/reference/matrix.md +0 -23
- package/docs/plugins/reference/mattermost.md +0 -23
- package/docs/plugins/reference/memory-core.md +0 -19
- package/docs/plugins/reference/memory-lancedb.md +0 -23
- package/docs/plugins/reference/memory-wiki.md +0 -23
- package/docs/plugins/reference/microsoft-foundry.md +0 -19
- package/docs/plugins/reference/microsoft.md +0 -19
- package/docs/plugins/reference/migrate-claude.md +0 -19
- package/docs/plugins/reference/migrate-hermes.md +0 -19
- package/docs/plugins/reference/minimax.md +0 -23
- package/docs/plugins/reference/mistral.md +0 -23
- package/docs/plugins/reference/moonshot.md +0 -23
- package/docs/plugins/reference/msteams.md +0 -23
- package/docs/plugins/reference/nextcloud-talk.md +0 -23
- package/docs/plugins/reference/nostr.md +0 -23
- package/docs/plugins/reference/novita.md +0 -23
- package/docs/plugins/reference/nvidia.md +0 -23
- package/docs/plugins/reference/oc-path.md +0 -23
- package/docs/plugins/reference/ollama.md +0 -23
- package/docs/plugins/reference/open-prose.md +0 -19
- package/docs/plugins/reference/openai.md +0 -23
- package/docs/plugins/reference/opencode-go.md +0 -23
- package/docs/plugins/reference/opencode.md +0 -23
- package/docs/plugins/reference/openrouter.md +0 -23
- package/docs/plugins/reference/openshell.md +0 -19
- package/docs/plugins/reference/perplexity.md +0 -23
- package/docs/plugins/reference/pixverse.md +0 -23
- package/docs/plugins/reference/policy.md +0 -72
- package/docs/plugins/reference/qa-channel.md +0 -23
- package/docs/plugins/reference/qa-lab.md +0 -19
- package/docs/plugins/reference/qa-matrix.md +0 -19
- package/docs/plugins/reference/qianfan.md +0 -23
- package/docs/plugins/reference/qqbot.md +0 -23
- package/docs/plugins/reference/qwen.md +0 -23
- package/docs/plugins/reference/runway.md +0 -23
- package/docs/plugins/reference/searxng.md +0 -19
- package/docs/plugins/reference/senseaudio.md +0 -23
- package/docs/plugins/reference/sglang.md +0 -23
- package/docs/plugins/reference/signal.md +0 -23
- package/docs/plugins/reference/skill-workshop.md +0 -23
- package/docs/plugins/reference/slack.md +0 -23
- package/docs/plugins/reference/stepfun.md +0 -23
- package/docs/plugins/reference/synology-chat.md +0 -23
- package/docs/plugins/reference/synthetic.md +0 -23
- package/docs/plugins/reference/tavily.md +0 -23
- package/docs/plugins/reference/telegram.md +0 -23
- package/docs/plugins/reference/tencent.md +0 -23
- package/docs/plugins/reference/tlon.md +0 -23
- package/docs/plugins/reference/together.md +0 -23
- package/docs/plugins/reference/tokenjuice.md +0 -23
- package/docs/plugins/reference/tts-local-cli.md +0 -19
- package/docs/plugins/reference/twitch.md +0 -23
- package/docs/plugins/reference/venice.md +0 -23
- package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
- package/docs/plugins/reference/vllm.md +0 -23
- package/docs/plugins/reference/voice-call.md +0 -23
- package/docs/plugins/reference/volcengine.md +0 -23
- package/docs/plugins/reference/voyage.md +0 -19
- package/docs/plugins/reference/vydra.md +0 -23
- package/docs/plugins/reference/web-readability.md +0 -19
- package/docs/plugins/reference/webhooks.md +0 -23
- package/docs/plugins/reference/whatsapp.md +0 -23
- package/docs/plugins/reference/workboard.md +0 -23
- package/docs/plugins/reference/xai.md +0 -23
- package/docs/plugins/reference/xiaomi.md +0 -23
- package/docs/plugins/reference/zai.md +0 -23
- package/docs/plugins/reference/zalo.md +0 -23
- package/docs/plugins/reference/zalouser.md +0 -24
- package/docs/plugins/reference.md +0 -145
- package/docs/plugins/sdk-agent-harness.md +0 -338
- package/docs/plugins/sdk-channel-inbound.md +0 -70
- package/docs/plugins/sdk-channel-ingress.md +0 -137
- package/docs/plugins/sdk-channel-message.md +0 -18
- package/docs/plugins/sdk-channel-outbound.md +0 -113
- package/docs/plugins/sdk-channel-plugins.md +0 -765
- package/docs/plugins/sdk-channel-turn.md +0 -9
- package/docs/plugins/sdk-entrypoints.md +0 -344
- package/docs/plugins/sdk-migration.md +0 -979
- package/docs/plugins/sdk-overview.md +0 -511
- package/docs/plugins/sdk-provider-plugins.md +0 -846
- package/docs/plugins/sdk-runtime.md +0 -676
- package/docs/plugins/sdk-setup.md +0 -550
- package/docs/plugins/sdk-subpaths.md +0 -391
- package/docs/plugins/sdk-testing.md +0 -403
- package/docs/plugins/skill-workshop.md +0 -713
- package/docs/plugins/tool-plugins.md +0 -411
- package/docs/plugins/voice-call.md +0 -942
- package/docs/plugins/webhooks.md +0 -192
- package/docs/plugins/workboard.md +0 -252
- package/docs/plugins/zalouser.md +0 -86
- package/docs/prose.md +0 -137
- package/docs/providers/alibaba.md +0 -158
- package/docs/providers/anthropic.md +0 -381
- package/docs/providers/arcee.md +0 -144
- package/docs/providers/azure-speech.md +0 -119
- package/docs/providers/bedrock-mantle.md +0 -211
- package/docs/providers/bedrock.md +0 -414
- package/docs/providers/cerebras.md +0 -130
- package/docs/providers/chutes.md +0 -153
- package/docs/providers/claude-max-api-proxy.md +0 -191
- package/docs/providers/cloudflare-ai-gateway.md +0 -119
- package/docs/providers/comfy.md +0 -362
- package/docs/providers/deepgram.md +0 -184
- package/docs/providers/deepinfra.md +0 -92
- package/docs/providers/deepseek.md +0 -146
- package/docs/providers/ds4.md +0 -309
- package/docs/providers/elevenlabs.md +0 -130
- package/docs/providers/fal.md +0 -240
- package/docs/providers/fireworks.md +0 -144
- package/docs/providers/github-copilot.md +0 -257
- package/docs/providers/gmi.md +0 -92
- package/docs/providers/google.md +0 -472
- package/docs/providers/gradium.md +0 -123
- package/docs/providers/groq.md +0 -171
- package/docs/providers/huggingface.md +0 -235
- package/docs/providers/index.md +0 -105
- package/docs/providers/inferrs.md +0 -272
- package/docs/providers/inworld.md +0 -120
- package/docs/providers/kilocode.md +0 -135
- package/docs/providers/litellm.md +0 -234
- package/docs/providers/lmstudio.md +0 -224
- package/docs/providers/minimax.md +0 -505
- package/docs/providers/mistral.md +0 -235
- package/docs/providers/models.md +0 -64
- package/docs/providers/moonshot.md +0 -413
- package/docs/providers/novita.md +0 -92
- package/docs/providers/nvidia.md +0 -158
- package/docs/providers/ollama-cloud.md +0 -115
- package/docs/providers/ollama.md +0 -1225
- package/docs/providers/openai.md +0 -1093
- package/docs/providers/opencode-go.md +0 -123
- package/docs/providers/opencode.md +0 -149
- package/docs/providers/openrouter.md +0 -349
- package/docs/providers/perplexity-provider.md +0 -123
- package/docs/providers/pixverse.md +0 -165
- package/docs/providers/qianfan.md +0 -132
- package/docs/providers/qwen-oauth.md +0 -115
- package/docs/providers/qwen.md +0 -364
- package/docs/providers/runway.md +0 -103
- package/docs/providers/senseaudio.md +0 -68
- package/docs/providers/sglang.md +0 -161
- package/docs/providers/stepfun.md +0 -229
- package/docs/providers/synthetic.md +0 -154
- package/docs/providers/tencent.md +0 -130
- package/docs/providers/together.md +0 -140
- package/docs/providers/venice.md +0 -312
- package/docs/providers/vercel-ai-gateway.md +0 -128
- package/docs/providers/vllm.md +0 -407
- package/docs/providers/volcengine.md +0 -199
- package/docs/providers/vydra.md +0 -180
- package/docs/providers/xai.md +0 -571
- package/docs/providers/xiaomi.md +0 -262
- package/docs/providers/zai.md +0 -224
- package/docs/refactor/access.md +0 -9
- package/docs/refactor/acp.md +0 -298
- package/docs/refactor/canvas.md +0 -131
- package/docs/refactor/database-first.md +0 -2256
- package/docs/refactor/ingress-core.md +0 -341
- package/docs/reference/AGENTS.default.md +0 -131
- package/docs/reference/RELEASING.md +0 -799
- package/docs/reference/api-usage-costs.md +0 -208
- package/docs/reference/application-modernization-plan.md +0 -208
- package/docs/reference/code-mode.md +0 -773
- package/docs/reference/credits.md +0 -33
- package/docs/reference/device-models.md +0 -50
- package/docs/reference/fengming-sdk-api-design.md +0 -390
- package/docs/reference/full-release-validation.md +0 -202
- package/docs/reference/memory-config.md +0 -604
- package/docs/reference/prompt-caching.md +0 -358
- package/docs/reference/release-performance-sweep.md +0 -360
- package/docs/reference/rich-output-protocol.md +0 -101
- package/docs/reference/rpc.md +0 -43
- package/docs/reference/secret-placeholder-conventions.md +0 -33
- package/docs/reference/secretref-credential-surface.md +0 -159
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
- package/docs/reference/session-management-compaction.md +0 -474
- package/docs/reference/templates/AGENTS.dev.md +0 -90
- package/docs/reference/templates/AGENTS.md +0 -227
- package/docs/reference/templates/BOOT.md +0 -16
- package/docs/reference/templates/BOOTSTRAP.md +0 -66
- package/docs/reference/templates/CLAUDE.md +0 -1
- package/docs/reference/templates/HEARTBEAT.md +0 -24
- package/docs/reference/templates/IDENTITY.dev.md +0 -52
- package/docs/reference/templates/IDENTITY.md +0 -34
- package/docs/reference/templates/SOUL.dev.md +0 -82
- package/docs/reference/templates/SOUL.md +0 -49
- package/docs/reference/templates/TOOLS.dev.md +0 -29
- package/docs/reference/templates/TOOLS.md +0 -51
- package/docs/reference/templates/USER.dev.md +0 -23
- package/docs/reference/templates/USER.md +0 -28
- package/docs/reference/test.md +0 -247
- package/docs/reference/token-use.md +0 -246
- package/docs/reference/transcript-hygiene.md +0 -214
- package/docs/reference/wizard.md +0 -252
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
- package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
- package/docs/security/formal-verification.md +0 -170
- package/docs/security/incident-response.md +0 -59
- package/docs/security/network-proxy.md +0 -268
- package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
- package/docs/snippets/plugin-publish/minimal-package.json +0 -16
- package/docs/specs/claw-supervisor.md +0 -247
- package/docs/start/bootstrapping.md +0 -49
- package/docs/start/docs-directory.md +0 -69
- package/docs/start/fengming.md +0 -252
- package/docs/start/getting-started.md +0 -152
- package/docs/start/hubs.md +0 -201
- package/docs/start/lore.md +0 -223
- package/docs/start/onboarding-overview.md +0 -72
- package/docs/start/onboarding.md +0 -98
- package/docs/start/quickstart.md +0 -25
- package/docs/start/setup.md +0 -178
- package/docs/start/showcase.md +0 -363
- package/docs/start/wizard-cli-automation.md +0 -232
- package/docs/start/wizard-cli-reference.md +0 -331
- package/docs/start/wizard.md +0 -141
- package/docs/style.css +0 -137
- package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
- package/docs/tools/acp-agents-setup.md +0 -351
- package/docs/tools/acp-agents.md +0 -854
- package/docs/tools/agent-send.md +0 -130
- package/docs/tools/apply-patch.md +0 -64
- package/docs/tools/brave-search.md +0 -139
- package/docs/tools/browser-control.md +0 -391
- package/docs/tools/browser-linux-troubleshooting.md +0 -173
- package/docs/tools/browser-login.md +0 -77
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
- package/docs/tools/browser.md +0 -810
- package/docs/tools/btw.md +0 -159
- package/docs/tools/capability-cookbook.md +0 -12
- package/docs/tools/clawhub.md +0 -5
- package/docs/tools/code-execution.md +0 -173
- package/docs/tools/creating-skills.md +0 -158
- package/docs/tools/diffs.md +0 -525
- package/docs/tools/duckduckgo-search.md +0 -109
- package/docs/tools/elevated.md +0 -128
- package/docs/tools/exa-search.md +0 -152
- package/docs/tools/exec-approvals-advanced.md +0 -444
- package/docs/tools/exec-approvals.md +0 -494
- package/docs/tools/exec.md +0 -285
- package/docs/tools/firecrawl.md +0 -155
- package/docs/tools/gemini-search.md +0 -114
- package/docs/tools/goal.md +0 -217
- package/docs/tools/grok-search.md +0 -129
- package/docs/tools/image-generation.md +0 -493
- package/docs/tools/index.md +0 -178
- package/docs/tools/kimi-search.md +0 -105
- package/docs/tools/llm-task.md +0 -137
- package/docs/tools/lobster.md +0 -365
- package/docs/tools/loop-detection.md +0 -154
- package/docs/tools/media-overview.md +0 -160
- package/docs/tools/minimax-search.md +0 -102
- package/docs/tools/multi-agent-sandbox-tools.md +0 -409
- package/docs/tools/music-generation.md +0 -372
- package/docs/tools/ollama-search.md +0 -153
- package/docs/tools/pdf.md +0 -213
- package/docs/tools/perplexity-search.md +0 -220
- package/docs/tools/plugin.md +0 -363
- package/docs/tools/reactions.md +0 -100
- package/docs/tools/searxng-search.md +0 -141
- package/docs/tools/skills-config.md +0 -195
- package/docs/tools/skills.md +0 -569
- package/docs/tools/slash-commands.md +0 -487
- package/docs/tools/steer.md +0 -77
- package/docs/tools/subagents.md +0 -651
- package/docs/tools/tavily.md +0 -162
- package/docs/tools/thinking.md +0 -142
- package/docs/tools/tokenjuice.md +0 -84
- package/docs/tools/tool-search.md +0 -269
- package/docs/tools/trajectory.md +0 -229
- package/docs/tools/tts.md +0 -1009
- package/docs/tools/video-generation.md +0 -555
- package/docs/tools/web-fetch.md +0 -210
- package/docs/tools/web.md +0 -461
- package/docs/tts.md +0 -11
- package/docs/vps.md +0 -139
- package/docs/web/control-ui.md +0 -512
- package/docs/web/dashboard.md +0 -107
- package/docs/web/index.md +0 -133
- package/docs/web/tui.md +0 -250
- package/docs/web/webchat.md +0 -102
- package/npm-shrinkwrap.json +0 -12861
- package/patches/.gitkeep +0 -0
- package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
- package/pnpm-workspace.yaml +0 -120
- package/scripts/crabbox-wrapper.mjs +0 -2004
- package/scripts/lib/official-external-channel-catalog.json +0 -560
- package/scripts/lib/official-external-plugin-catalog.json +0 -264
- package/scripts/lib/official-external-provider-catalog.json +0 -158
- package/scripts/lib/package-dist-imports.mjs +0 -171
- package/scripts/npm-runner.mjs +0 -91
- package/scripts/postinstall-bundled-plugins.mjs +0 -978
- package/scripts/preinstall-package-manager-warning.mjs +0 -64
- package/scripts/prepare-git-hooks.mjs +0 -72
- package/scripts/windows-cmd-helpers.mjs +0 -22
- package/skills/batch/SKILL.md +0 -118
- package/skills/code-review/SKILL.md +0 -107
- package/skills/debug/SKILL.md +0 -83
- package/skills/loop/SKILL.md +0 -118
- package/skills/run/SKILL.md +0 -79
- package/skills/run-skill-generator/SKILL.md +0 -179
- package/skills/verify/SKILL.md +0 -103
- package/src/agents/templates/HEARTBEAT.md +0 -3
package/docs/plan/ui-channels.md
DELETED
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: Decouple semantic message presentation from channel native UI renderers.
|
|
3
|
-
title: Channel presentation refactor plan
|
|
4
|
-
read_when:
|
|
5
|
-
- Refactoring channel message UI, interactive payloads, or native channel renderers
|
|
6
|
-
- Changing message tool capabilities, delivery hints, or cross-context markers
|
|
7
|
-
- Debugging Discord Carbon import fanout or channel plugin runtime laziness
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Status
|
|
11
|
-
|
|
12
|
-
Implemented for the shared agent, CLI, plugin capability, and outbound delivery surfaces:
|
|
13
|
-
|
|
14
|
-
- `ReplyPayload.presentation` carries semantic message UI.
|
|
15
|
-
- `ReplyPayload.delivery.pin` carries sent-message pin requests.
|
|
16
|
-
- Shared message actions expose `presentation`, `delivery`, and `pin` instead of provider-native `components`, `blocks`, `buttons`, or `card`.
|
|
17
|
-
- Core renders or auto-degrades presentation through plugin-declared outbound capabilities.
|
|
18
|
-
- Discord, Slack, Telegram, Mattermost, MS Teams, and Feishu renderers consume the generic contract.
|
|
19
|
-
- Discord channel control-plane code no longer imports Carbon-backed UI containers.
|
|
20
|
-
|
|
21
|
-
Canonical docs now live in [Message Presentation](/plugins/message-presentation).
|
|
22
|
-
Keep this plan as historical implementation context; update the canonical guide
|
|
23
|
-
for contract, renderer, or fallback behavior changes.
|
|
24
|
-
|
|
25
|
-
## Problem
|
|
26
|
-
|
|
27
|
-
Channel UI is currently split across several incompatible surfaces:
|
|
28
|
-
|
|
29
|
-
- Core owns a Discord-shaped cross-context renderer hook through `buildCrossContextComponents`.
|
|
30
|
-
- Discord `channel.ts` can import native Carbon UI through `DiscordUiContainer`, which pulls runtime UI dependencies into the channel plugin control plane.
|
|
31
|
-
- The agent and CLI expose native payload escape hatches such as Discord `components`, Slack `blocks`, Telegram or Mattermost `buttons`, and Teams or Feishu `card`.
|
|
32
|
-
- `ReplyPayload.channelData` carries both transport hints and native UI envelopes.
|
|
33
|
-
- The generic `interactive` model exists, but it is narrower than the richer layouts already used by Discord, Slack, Teams, Feishu, LINE, Telegram, and Mattermost.
|
|
34
|
-
|
|
35
|
-
This makes core aware of native UI shapes, weakens plugin runtime laziness, and gives agents too many provider-specific ways to express the same message intent.
|
|
36
|
-
|
|
37
|
-
## Goals
|
|
38
|
-
|
|
39
|
-
- Core decides the best semantic presentation for a message from declared capabilities.
|
|
40
|
-
- Extensions declare capabilities and render semantic presentation into native transport payloads.
|
|
41
|
-
- Web Control UI remains separate from chat native UI.
|
|
42
|
-
- Native channel payloads are not exposed through the shared agent or CLI message surface.
|
|
43
|
-
- Unsupported presentation features auto-degrade to the best text representation.
|
|
44
|
-
- Delivery behavior such as pinning a sent message is generic delivery metadata, not presentation.
|
|
45
|
-
|
|
46
|
-
## Non goals
|
|
47
|
-
|
|
48
|
-
- No backwards compatibility shim for `buildCrossContextComponents`.
|
|
49
|
-
- No public native escape hatches for `components`, `blocks`, `buttons`, or `card`.
|
|
50
|
-
- No core imports of channel-native UI libraries.
|
|
51
|
-
- No provider-specific SDK seams for bundled channels.
|
|
52
|
-
|
|
53
|
-
## Target model
|
|
54
|
-
|
|
55
|
-
Add a core-owned `presentation` field to `ReplyPayload`.
|
|
56
|
-
|
|
57
|
-
```ts
|
|
58
|
-
type MessagePresentationTone = "neutral" | "info" | "success" | "warning" | "danger";
|
|
59
|
-
|
|
60
|
-
type MessagePresentation = {
|
|
61
|
-
tone?: MessagePresentationTone;
|
|
62
|
-
title?: string;
|
|
63
|
-
blocks: MessagePresentationBlock[];
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
type MessagePresentationBlock =
|
|
67
|
-
| { type: "text"; text: string }
|
|
68
|
-
| { type: "context"; text: string }
|
|
69
|
-
| { type: "divider" }
|
|
70
|
-
| { type: "buttons"; buttons: MessagePresentationButton[] }
|
|
71
|
-
| { type: "select"; placeholder?: string; options: MessagePresentationOption[] };
|
|
72
|
-
|
|
73
|
-
type MessagePresentationButton = {
|
|
74
|
-
label: string;
|
|
75
|
-
value?: string;
|
|
76
|
-
url?: string;
|
|
77
|
-
style?: "primary" | "secondary" | "success" | "danger";
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
type MessagePresentationOption = {
|
|
81
|
-
label: string;
|
|
82
|
-
value: string;
|
|
83
|
-
};
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
`interactive` becomes a subset of `presentation` during migration:
|
|
87
|
-
|
|
88
|
-
- `interactive` text block maps to `presentation.blocks[].type = "text"`.
|
|
89
|
-
- `interactive` buttons block maps to `presentation.blocks[].type = "buttons"`.
|
|
90
|
-
- `interactive` select block maps to `presentation.blocks[].type = "select"`.
|
|
91
|
-
|
|
92
|
-
The external agent and CLI schemas now use `presentation`; `interactive` remains an internal legacy parser/rendering helper for existing reply producers.
|
|
93
|
-
The public producer-facing API treats `interactive` as deprecated. Runtime
|
|
94
|
-
support remains so existing approval helpers and older plugins continue to
|
|
95
|
-
work while new code emits `presentation`.
|
|
96
|
-
|
|
97
|
-
## Delivery metadata
|
|
98
|
-
|
|
99
|
-
Add a core-owned `delivery` field for send behavior that is not UI.
|
|
100
|
-
|
|
101
|
-
```ts
|
|
102
|
-
type ReplyPayloadDelivery = {
|
|
103
|
-
pin?:
|
|
104
|
-
| boolean
|
|
105
|
-
| {
|
|
106
|
-
enabled: boolean;
|
|
107
|
-
notify?: boolean;
|
|
108
|
-
required?: boolean;
|
|
109
|
-
};
|
|
110
|
-
};
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Semantics:
|
|
114
|
-
|
|
115
|
-
- `delivery.pin = true` means pin the first successfully delivered message.
|
|
116
|
-
- `notify` defaults to `false`.
|
|
117
|
-
- `required` defaults to `false`; unsupported channels or failed pinning auto-degrade by continuing delivery.
|
|
118
|
-
- Manual `pin`, `unpin`, and `list-pins` message actions remain for existing messages.
|
|
119
|
-
|
|
120
|
-
Current Telegram ACP topic binding should move from `channelData.telegram.pin = true` to `delivery.pin = true`.
|
|
121
|
-
|
|
122
|
-
## Runtime capability contract
|
|
123
|
-
|
|
124
|
-
Add presentation and delivery render hooks to the runtime outbound adapter, not the control-plane channel plugin.
|
|
125
|
-
|
|
126
|
-
```ts
|
|
127
|
-
type ChannelPresentationCapabilities = {
|
|
128
|
-
supported: boolean;
|
|
129
|
-
buttons?: boolean;
|
|
130
|
-
selects?: boolean;
|
|
131
|
-
context?: boolean;
|
|
132
|
-
divider?: boolean;
|
|
133
|
-
tones?: MessagePresentationTone[];
|
|
134
|
-
limits?: {
|
|
135
|
-
actions?: {
|
|
136
|
-
maxActions?: number;
|
|
137
|
-
maxActionsPerRow?: number;
|
|
138
|
-
maxRows?: number;
|
|
139
|
-
maxLabelLength?: number;
|
|
140
|
-
maxValueBytes?: number;
|
|
141
|
-
supportsStyles?: boolean;
|
|
142
|
-
supportsDisabled?: boolean;
|
|
143
|
-
supportsLayoutHints?: boolean;
|
|
144
|
-
};
|
|
145
|
-
selects?: {
|
|
146
|
-
maxOptions?: number;
|
|
147
|
-
maxLabelLength?: number;
|
|
148
|
-
maxValueBytes?: number;
|
|
149
|
-
};
|
|
150
|
-
text?: {
|
|
151
|
-
maxLength?: number;
|
|
152
|
-
encoding?: "characters" | "utf8-bytes" | "utf16-units";
|
|
153
|
-
markdownDialect?: "plain" | "markdown" | "html" | "slack-mrkdwn" | "discord-markdown";
|
|
154
|
-
supportsEdit?: boolean;
|
|
155
|
-
};
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
type ChannelDeliveryCapabilities = {
|
|
160
|
-
pinSentMessage?: boolean;
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
type ChannelOutboundAdapter = {
|
|
164
|
-
presentationCapabilities?: ChannelPresentationCapabilities;
|
|
165
|
-
|
|
166
|
-
renderPresentation?: (params: {
|
|
167
|
-
payload: ReplyPayload;
|
|
168
|
-
presentation: MessagePresentation;
|
|
169
|
-
ctx: ChannelOutboundSendContext;
|
|
170
|
-
}) => ReplyPayload | null;
|
|
171
|
-
|
|
172
|
-
deliveryCapabilities?: ChannelDeliveryCapabilities;
|
|
173
|
-
|
|
174
|
-
pinDeliveredMessage?: (params: {
|
|
175
|
-
cfg: FengMingConfig;
|
|
176
|
-
accountId?: string | null;
|
|
177
|
-
to: string;
|
|
178
|
-
threadId?: string | number | null;
|
|
179
|
-
messageId: string;
|
|
180
|
-
notify: boolean;
|
|
181
|
-
}) => Promise<void>;
|
|
182
|
-
};
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
Core behavior:
|
|
186
|
-
|
|
187
|
-
- Resolve target channel and runtime adapter.
|
|
188
|
-
- Ask for presentation capabilities.
|
|
189
|
-
- Degrade unsupported blocks and apply generic capability limits before
|
|
190
|
-
rendering.
|
|
191
|
-
- Call `renderPresentation`.
|
|
192
|
-
- If no renderer exists, convert presentation to text fallback.
|
|
193
|
-
- After successful send, call `pinDeliveredMessage` when `delivery.pin` is requested and supported.
|
|
194
|
-
|
|
195
|
-
## Channel mapping
|
|
196
|
-
|
|
197
|
-
Discord:
|
|
198
|
-
|
|
199
|
-
- Render `presentation` to components v2 and Carbon containers in runtime-only modules.
|
|
200
|
-
- Keep accent color helpers in light modules.
|
|
201
|
-
- Remove `DiscordUiContainer` imports from channel plugin control-plane code.
|
|
202
|
-
|
|
203
|
-
Slack:
|
|
204
|
-
|
|
205
|
-
- Render `presentation` to Block Kit.
|
|
206
|
-
- Remove agent and CLI `blocks` input.
|
|
207
|
-
|
|
208
|
-
Telegram:
|
|
209
|
-
|
|
210
|
-
- Render text, context, and dividers as text.
|
|
211
|
-
- Render actions and select as inline keyboards when configured and allowed for the target surface.
|
|
212
|
-
- Use text fallback when inline buttons are disabled.
|
|
213
|
-
- Move ACP topic pinning to `delivery.pin`.
|
|
214
|
-
|
|
215
|
-
Mattermost:
|
|
216
|
-
|
|
217
|
-
- Render actions as interactive buttons where configured.
|
|
218
|
-
- Render other blocks as text fallback.
|
|
219
|
-
|
|
220
|
-
MS Teams:
|
|
221
|
-
|
|
222
|
-
- Render `presentation` to Adaptive Cards.
|
|
223
|
-
- Keep manual pin/unpin/list-pins actions.
|
|
224
|
-
- Optionally implement `pinDeliveredMessage` if Graph support is reliable for the target conversation.
|
|
225
|
-
|
|
226
|
-
Feishu:
|
|
227
|
-
|
|
228
|
-
- Render `presentation` to interactive cards.
|
|
229
|
-
- Keep manual pin/unpin/list-pins actions.
|
|
230
|
-
- Optionally implement `pinDeliveredMessage` for sent-message pinning if API behavior is reliable.
|
|
231
|
-
|
|
232
|
-
LINE:
|
|
233
|
-
|
|
234
|
-
- Render `presentation` to Flex or template messages where possible.
|
|
235
|
-
- Fall back to text for unsupported blocks.
|
|
236
|
-
- Remove LINE UI payloads from `channelData`.
|
|
237
|
-
|
|
238
|
-
Plain or limited channels:
|
|
239
|
-
|
|
240
|
-
- Convert presentation to text with conservative formatting.
|
|
241
|
-
|
|
242
|
-
## Refactor steps
|
|
243
|
-
|
|
244
|
-
1. Reapply the Discord release fix that splits `ui-colors.ts` from Carbon-backed UI and removes `DiscordUiContainer` from `extensions/discord/src/channel.ts`.
|
|
245
|
-
2. Add `presentation` and `delivery` to `ReplyPayload`, outbound payload normalization, delivery summaries, and hook payloads.
|
|
246
|
-
3. Add `MessagePresentation` schema and parser helpers in a narrow SDK/runtime subpath.
|
|
247
|
-
4. Replace message capabilities `buttons`, `cards`, `components`, and `blocks` with semantic presentation capabilities.
|
|
248
|
-
5. Add runtime outbound adapter hooks for presentation render and delivery pinning.
|
|
249
|
-
6. Replace cross-context component construction with `buildCrossContextPresentation`.
|
|
250
|
-
7. Delete `src/infra/outbound/channel-adapters.ts` and remove `buildCrossContextComponents` from channel plugin types.
|
|
251
|
-
8. Change `maybeApplyCrossContextMarker` to attach `presentation` instead of native params.
|
|
252
|
-
9. Update plugin-dispatch send paths to consume only semantic presentation and delivery metadata.
|
|
253
|
-
10. Remove agent and CLI native payload params: `components`, `blocks`, `buttons`, and `card`.
|
|
254
|
-
11. Remove SDK helpers that create native message-tool schemas, replacing them with presentation schema helpers.
|
|
255
|
-
12. Remove UI/native envelopes from `channelData`; keep only transport metadata until each remaining field is reviewed.
|
|
256
|
-
13. Migrate Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, and LINE renderers.
|
|
257
|
-
14. Update docs for message CLI, channel pages, plugin SDK, and capability cookbook.
|
|
258
|
-
15. Run import fanout profiling for Discord and affected channel entrypoints.
|
|
259
|
-
|
|
260
|
-
Steps 1-11 and 13-14 are implemented in this refactor for the shared agent, CLI, plugin capability, and outbound adapter contracts. Step 12 remains a deeper internal cleanup pass for provider-private `channelData` transport envelopes. Step 15 remains follow-up validation if we want quantified import-fanout numbers beyond the type/test gate.
|
|
261
|
-
|
|
262
|
-
## Tests
|
|
263
|
-
|
|
264
|
-
Add or update:
|
|
265
|
-
|
|
266
|
-
- Presentation normalization tests.
|
|
267
|
-
- Presentation auto-degrade tests for unsupported blocks.
|
|
268
|
-
- Cross-context marker tests for plugin dispatch and core delivery paths.
|
|
269
|
-
- Channel render matrix tests for Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, LINE, and text fallback.
|
|
270
|
-
- Message tool schema tests proving native fields are gone.
|
|
271
|
-
- CLI tests proving native flags are gone.
|
|
272
|
-
- Discord entrypoint import-laziness regression covering Carbon.
|
|
273
|
-
- Delivery pin tests covering Telegram and generic fallback.
|
|
274
|
-
|
|
275
|
-
## Open questions
|
|
276
|
-
|
|
277
|
-
- Should `delivery.pin` be implemented for Discord, Slack, MS Teams, and Feishu in the first pass, or only Telegram first?
|
|
278
|
-
- Should `delivery` eventually absorb existing fields such as `replyToId`, `replyToCurrent`, `silent`, and `audioAsVoice`, or stay focused on post-send behaviors?
|
|
279
|
-
- Should presentation support images or file references directly, or should media remain separate from UI layout for now?
|
|
280
|
-
|
|
281
|
-
## Related
|
|
282
|
-
|
|
283
|
-
- [Channels overview](/channels)
|
|
284
|
-
- [Message presentation](/plugins/message-presentation)
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Redirect to /install/digitalocean"
|
|
3
|
-
title: "DigitalOcean (platform)"
|
|
4
|
-
redirect: /install/digitalocean
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
This page has moved to [DigitalOcean](/install/digitalocean).
|
|
8
|
-
|
|
9
|
-
## Related
|
|
10
|
-
|
|
11
|
-
- [Install overview](/install)
|
|
12
|
-
- [VPS hosting](/vps)
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Run the FengMing Gateway on EasyRunner with Podman and Caddy"
|
|
3
|
-
read_when:
|
|
4
|
-
- Deploying FengMing on EasyRunner
|
|
5
|
-
- Running the Gateway behind EasyRunner's Caddy proxy
|
|
6
|
-
- Choosing persistent volumes and auth for a hosted Gateway
|
|
7
|
-
title: "EasyRunner"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
EasyRunner can host the FengMing Gateway as a small containerized app behind its
|
|
11
|
-
Caddy proxy. This guide assumes an EasyRunner host that runs Podman-compatible
|
|
12
|
-
Compose apps and exposes HTTPS through Caddy.
|
|
13
|
-
|
|
14
|
-
## Before you begin
|
|
15
|
-
|
|
16
|
-
- An EasyRunner server with a domain routed to it.
|
|
17
|
-
- A built or published FengMing container image.
|
|
18
|
-
- A persistent config volume for `/home/node/.fengming`.
|
|
19
|
-
- A persistent workspace volume for `/workspace`.
|
|
20
|
-
- A strong Gateway token or password.
|
|
21
|
-
|
|
22
|
-
Keep device auth enabled when possible. If your reverse proxy deployment cannot
|
|
23
|
-
carry device identity correctly, fix trusted-proxy settings first; use
|
|
24
|
-
dangerous auth bypasses only for a fully private, operator-controlled network.
|
|
25
|
-
|
|
26
|
-
## Compose app
|
|
27
|
-
|
|
28
|
-
Create an EasyRunner app with a Compose file shaped like this:
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
services:
|
|
32
|
-
fengming:
|
|
33
|
-
image: ghcr.io/fengming/fengming:latest
|
|
34
|
-
restart: unless-stopped
|
|
35
|
-
environment:
|
|
36
|
-
FENGMING_GATEWAY_TOKEN: ${FENGMING_GATEWAY_TOKEN}
|
|
37
|
-
FENGMING_HOME: /home/node
|
|
38
|
-
FENGMING_STATE_DIR: /home/node/.fengming
|
|
39
|
-
FENGMING_CONFIG_PATH: /home/node/.fengming/fengming.json
|
|
40
|
-
FENGMING_WORKSPACE_DIR: /workspace
|
|
41
|
-
volumes:
|
|
42
|
-
- fengming-config:/home/node/.fengming
|
|
43
|
-
- fengming-workspace:/workspace
|
|
44
|
-
labels:
|
|
45
|
-
caddy: fengming.example.com
|
|
46
|
-
caddy.reverse_proxy: "{{upstreams 1455}}"
|
|
47
|
-
command: ["fengming", "gateway", "--bind", "lan", "--port", "1455"]
|
|
48
|
-
|
|
49
|
-
volumes:
|
|
50
|
-
fengming-config:
|
|
51
|
-
fengming-workspace:
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Replace `fengming.example.com` with your Gateway hostname. Store
|
|
55
|
-
`FENGMING_GATEWAY_TOKEN` in EasyRunner's secret/environment manager instead of
|
|
56
|
-
committing it to the app definition.
|
|
57
|
-
|
|
58
|
-
## Configure FengMing
|
|
59
|
-
|
|
60
|
-
Inside the persistent config volume, keep the Gateway reachable only through
|
|
61
|
-
the proxy and require auth:
|
|
62
|
-
|
|
63
|
-
```json5
|
|
64
|
-
{
|
|
65
|
-
gateway: {
|
|
66
|
-
bind: "lan",
|
|
67
|
-
port: 1455,
|
|
68
|
-
auth: {
|
|
69
|
-
token: "${FENGMING_GATEWAY_TOKEN}",
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
If Caddy terminates TLS for the Gateway, configure trusted proxy settings for
|
|
76
|
-
the exact proxy path rather than disabling auth checks globally. See
|
|
77
|
-
[Trusted proxy auth](/gateway/trusted-proxy-auth).
|
|
78
|
-
|
|
79
|
-
## Verify
|
|
80
|
-
|
|
81
|
-
From your workstation:
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
fengming gateway probe --url https://fengming.example.com --token <token>
|
|
85
|
-
fengming gateway status --url https://fengming.example.com --token <token>
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
From the EasyRunner host, check the app logs for a listening Gateway and no
|
|
89
|
-
startup SecretRef, plugin, or channel auth failures.
|
|
90
|
-
|
|
91
|
-
## Updates and backups
|
|
92
|
-
|
|
93
|
-
- Pull or build the new FengMing image, then redeploy the EasyRunner app.
|
|
94
|
-
- Back up the `fengming-config` volume before updates.
|
|
95
|
-
- Back up `fengming-workspace` if agents write durable project data there.
|
|
96
|
-
- Run `fengming doctor` after major updates to catch config migrations and
|
|
97
|
-
service warnings.
|
|
98
|
-
|
|
99
|
-
## Troubleshooting
|
|
100
|
-
|
|
101
|
-
- `gateway probe` cannot connect: confirm the Caddy hostname points at the app
|
|
102
|
-
and that the container listens on `0.0.0.0:1455`.
|
|
103
|
-
- Auth fails: rotate the token in EasyRunner secrets and the local client
|
|
104
|
-
command together.
|
|
105
|
-
- Files are root-owned after restore: repair the mounted volumes so the
|
|
106
|
-
container user can write `/home/node/.fengming` and `/workspace`.
|
|
107
|
-
- Browser or channel plugins fail: check whether the required external
|
|
108
|
-
binaries, network egress, and mounted credentials are available inside the
|
|
109
|
-
container.
|
package/docs/platforms/index.md
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Platform support overview (Gateway + companion apps)"
|
|
3
|
-
read_when:
|
|
4
|
-
- Looking for OS support or install paths
|
|
5
|
-
- Deciding where to run the Gateway
|
|
6
|
-
title: "Platforms"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
FengMing core is written in TypeScript. **Node is the recommended runtime**.
|
|
10
|
-
Bun is not recommended for the Gateway — known issues with WhatsApp and
|
|
11
|
-
Telegram channels; see [Bun (experimental)](/install/bun) for details.
|
|
12
|
-
|
|
13
|
-
## Choose your OS
|
|
14
|
-
|
|
15
|
-
- Windows: [Windows](/platforms/windows)
|
|
16
|
-
- Linux: [Linux](/platforms/linux)
|
|
17
|
-
|
|
18
|
-
## VPS and hosting
|
|
19
|
-
|
|
20
|
-
- VPS hub: [VPS hosting](/vps)
|
|
21
|
-
- Fly.io: [Fly.io](/install/fly)
|
|
22
|
-
- Hetzner (Docker): [Hetzner](/install/hetzner)
|
|
23
|
-
- GCP (Compute Engine): [GCP](/install/gcp)
|
|
24
|
-
- Azure (Linux VM): [Azure](/install/azure)
|
|
25
|
-
- exe.dev (VM + HTTPS proxy): [exe.dev](/install/exe-dev)
|
|
26
|
-
- EasyRunner (Podman + Caddy): [EasyRunner](/platforms/easyrunner)
|
|
27
|
-
|
|
28
|
-
## Common links
|
|
29
|
-
|
|
30
|
-
- Install guide: [Getting Started](/start/getting-started)
|
|
31
|
-
- Gateway runbook: [Gateway](/gateway)
|
|
32
|
-
- Gateway configuration: [Configuration](/gateway/configuration)
|
|
33
|
-
- Service status: `fengming gateway status`
|
|
34
|
-
|
|
35
|
-
## Gateway service install (CLI)
|
|
36
|
-
|
|
37
|
-
Use one of these (all supported):
|
|
38
|
-
|
|
39
|
-
- Wizard (recommended): `fengming onboard --install-daemon`
|
|
40
|
-
- Direct: `fengming gateway install`
|
|
41
|
-
- Configure flow: `fengming configure` → select **Gateway service**
|
|
42
|
-
- Repair/migrate: `fengming doctor` (offers to install or fix the service)
|
|
43
|
-
|
|
44
|
-
The service target depends on OS:
|
|
45
|
-
|
|
46
|
-
- Linux/WSL2: systemd user service (`fengming-gateway[-<profile>].service`)
|
|
47
|
-
- Native Windows: Scheduled Task (`FengMing Gateway` or `FengMing Gateway (<profile>)`), with a per-user Startup-folder login item fallback if task creation is denied
|
|
48
|
-
|
|
49
|
-
## Related
|
|
50
|
-
|
|
51
|
-
- [Install overview](/install)
|
package/docs/platforms/linux.md
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Linux support + companion app status"
|
|
3
|
-
read_when:
|
|
4
|
-
- Looking for Linux companion app status
|
|
5
|
-
- Planning platform coverage or contributions
|
|
6
|
-
- Debugging Linux OOM kills or exit 137 on a VPS or container
|
|
7
|
-
title: "Linux app"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
The Gateway is fully supported on Linux. **Node is the recommended runtime**.
|
|
11
|
-
Bun is not recommended for the Gateway (WhatsApp/Telegram bugs).
|
|
12
|
-
|
|
13
|
-
Native Linux companion apps are planned. Contributions are welcome if you want to help build one.
|
|
14
|
-
|
|
15
|
-
## Beginner quick path (VPS)
|
|
16
|
-
|
|
17
|
-
1. Install Node 24 (recommended; Node 22 LTS, currently `22.19+`, still works for compatibility)
|
|
18
|
-
2. `npm i -g fengming@latest`
|
|
19
|
-
3. `fengming onboard --install-daemon`
|
|
20
|
-
4. From your laptop: `ssh -N -L 18789:127.0.0.1:18789 <user>@<host>`
|
|
21
|
-
5. Open `http://127.0.0.1:18789/` and authenticate with the configured shared secret (token by default; password if you set `gateway.auth.mode: "password"`)
|
|
22
|
-
|
|
23
|
-
Full Linux server guide: [Linux Server](/vps). Step-by-step VPS example: [exe.dev](/install/exe-dev)
|
|
24
|
-
|
|
25
|
-
## Install
|
|
26
|
-
|
|
27
|
-
- [Getting Started](/start/getting-started)
|
|
28
|
-
- [Install & updates](/install/updating)
|
|
29
|
-
- Optional flows: [Bun (experimental)](/install/bun), [Nix](/install/nix), [Docker](/install/docker)
|
|
30
|
-
|
|
31
|
-
## Gateway
|
|
32
|
-
|
|
33
|
-
- [Gateway runbook](/gateway)
|
|
34
|
-
- [Configuration](/gateway/configuration)
|
|
35
|
-
|
|
36
|
-
## Gateway service install (CLI)
|
|
37
|
-
|
|
38
|
-
Use one of these:
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
fengming onboard --install-daemon
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Or:
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
fengming gateway install
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Or:
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
fengming configure
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Select **Gateway service** when prompted.
|
|
57
|
-
|
|
58
|
-
Repair/migrate:
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
fengming doctor
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## System control (systemd user unit)
|
|
65
|
-
|
|
66
|
-
FengMing installs a systemd **user** service by default. Use a **system**
|
|
67
|
-
service for shared or always-on servers. `fengming gateway install` and
|
|
68
|
-
`fengming onboard --install-daemon` already render the current canonical unit
|
|
69
|
-
for you; write one by hand only when you need a custom system/service-manager
|
|
70
|
-
setup. The full service guidance lives in the [Gateway runbook](/gateway).
|
|
71
|
-
|
|
72
|
-
Minimal setup:
|
|
73
|
-
|
|
74
|
-
Create `~/.config/systemd/user/fengming-gateway[-<profile>].service`:
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
[Unit]
|
|
78
|
-
Description=FengMing Gateway (profile: <profile>, v<version>)
|
|
79
|
-
After=network-online.target
|
|
80
|
-
Wants=network-online.target
|
|
81
|
-
|
|
82
|
-
[Service]
|
|
83
|
-
ExecStart=/usr/local/bin/fengming gateway --port 18789
|
|
84
|
-
Restart=always
|
|
85
|
-
RestartSec=5
|
|
86
|
-
TimeoutStopSec=30
|
|
87
|
-
TimeoutStartSec=30
|
|
88
|
-
SuccessExitStatus=0 143
|
|
89
|
-
KillMode=control-group
|
|
90
|
-
|
|
91
|
-
[Install]
|
|
92
|
-
WantedBy=default.target
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Enable it:
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
systemctl --user enable --now fengming-gateway[-<profile>].service
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Memory pressure and OOM kills
|
|
102
|
-
|
|
103
|
-
On Linux, the kernel chooses an OOM victim when a host, VM, or container cgroup
|
|
104
|
-
runs out of memory. The Gateway can be a poor victim because it owns long-lived
|
|
105
|
-
sessions and channel connections. FengMing therefore biases transient child
|
|
106
|
-
processes to be killed before the Gateway when possible.
|
|
107
|
-
|
|
108
|
-
For eligible Linux child spawns, FengMing starts the child through a short
|
|
109
|
-
`/bin/sh` wrapper that raises the child's own `oom_score_adj` to `1000`, then
|
|
110
|
-
`exec`s the real command. This is an unprivileged operation because the child is
|
|
111
|
-
only increasing its own OOM kill likelihood.
|
|
112
|
-
|
|
113
|
-
Covered child process surfaces include:
|
|
114
|
-
|
|
115
|
-
- supervisor-managed command children,
|
|
116
|
-
- PTY shell children,
|
|
117
|
-
- MCP stdio server children,
|
|
118
|
-
- FengMing-launched browser/Chrome processes.
|
|
119
|
-
|
|
120
|
-
The wrapper is Linux-only and is skipped when `/bin/sh` is unavailable. It is
|
|
121
|
-
also skipped if the child env sets `FENGMING_CHILD_OOM_SCORE_ADJ=0`, `false`,
|
|
122
|
-
`no`, or `off`.
|
|
123
|
-
|
|
124
|
-
To verify a child process:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
cat /proc/<child-pid>/oom_score_adj
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Expected value for covered children is `1000`. The Gateway process should keep
|
|
131
|
-
its normal score, usually `0`.
|
|
132
|
-
|
|
133
|
-
This does not replace normal memory tuning. If a VPS or container repeatedly
|
|
134
|
-
kills children, increase the memory limit, reduce concurrency, or add stronger
|
|
135
|
-
resource controls such as systemd `MemoryMax=` or container-level memory limits.
|
|
136
|
-
|
|
137
|
-
## Related
|
|
138
|
-
|
|
139
|
-
- [Install overview](/install)
|
|
140
|
-
- [Linux server](/vps)
|
|
141
|
-
- [Raspberry Pi](/platforms/raspberry-pi)
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Gateway runtime on macOS (external launchd service)"
|
|
3
|
-
read_when:
|
|
4
|
-
- Packaging FengMing.app
|
|
5
|
-
- Debugging the macOS gateway launchd service
|
|
6
|
-
- Installing the gateway CLI for macOS
|
|
7
|
-
title: "Gateway on macOS"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
FengMing.app no longer bundles Node/Bun or the Gateway runtime. The macOS app
|
|
11
|
-
expects an **external** `fengming` CLI install, does not spawn the Gateway as a
|
|
12
|
-
child process, and manages a per-user launchd service to keep the Gateway
|
|
13
|
-
running (or attaches to an existing local Gateway if one is already running).
|
|
14
|
-
|
|
15
|
-
## Install the CLI (required for local mode)
|
|
16
|
-
|
|
17
|
-
Node 24 is the default runtime on the Mac. Node 22 LTS, currently `22.19+`, still works for compatibility. Then install `fengming` globally:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
npm install -g fengming@<version>
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The macOS app's **Install CLI** button runs the same global install flow the app
|
|
24
|
-
uses internally: it prefers npm first, then pnpm, then bun if that is the only
|
|
25
|
-
detected package manager. Node remains the recommended Gateway runtime.
|
|
26
|
-
|
|
27
|
-
## Launchd (Gateway as LaunchAgent)
|
|
28
|
-
|
|
29
|
-
Label:
|
|
30
|
-
|
|
31
|
-
- `ai.fengming.gateway` (or `ai.fengming.<profile>`; legacy `com.fengming.*` may remain)
|
|
32
|
-
|
|
33
|
-
Plist location (per-user):
|
|
34
|
-
|
|
35
|
-
- `~/Library/LaunchAgents/ai.fengming.gateway.plist`
|
|
36
|
-
(or `~/Library/LaunchAgents/ai.fengming.<profile>.plist`)
|
|
37
|
-
|
|
38
|
-
Manager:
|
|
39
|
-
|
|
40
|
-
- The macOS app owns LaunchAgent install/update in Local mode.
|
|
41
|
-
- The CLI can also install it: `fengming gateway install`.
|
|
42
|
-
|
|
43
|
-
Behavior:
|
|
44
|
-
|
|
45
|
-
- "FengMing Active" enables/disables the LaunchAgent.
|
|
46
|
-
- App quit does **not** stop the gateway (launchd keeps it alive).
|
|
47
|
-
- If a Gateway is already running on the configured port, the app attaches to
|
|
48
|
-
it instead of starting a new one.
|
|
49
|
-
|
|
50
|
-
Logging:
|
|
51
|
-
|
|
52
|
-
- launchd stdout: `~/Library/Logs/fengming/gateway.log` (profiles use `gateway-<profile>.log`)
|
|
53
|
-
- launchd stderr: suppressed
|
|
54
|
-
|
|
55
|
-
## Version compatibility
|
|
56
|
-
|
|
57
|
-
The macOS app checks the gateway version against its own version. If they're
|
|
58
|
-
incompatible, update the global CLI to match the app version.
|
|
59
|
-
|
|
60
|
-
## Smoke check
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
fengming --version
|
|
64
|
-
|
|
65
|
-
FENGMING_SKIP_CHANNELS=1 \
|
|
66
|
-
FENGMING_SKIP_CANVAS_HOST=1 \
|
|
67
|
-
fengming gateway --port 18999 --bind loopback
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Then:
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
fengming gateway call health --url ws://127.0.0.1:18999 --timeout 3000
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Related
|
|
77
|
-
|
|
78
|
-
- [macOS app](/platforms/macos)
|
|
79
|
-
- [Gateway runbook](/gateway)
|