botmux 3.5.2 → 3.6.0
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/README.en.md +56 -396
- package/README.md +55 -396
- package/dist/.runtime-build-id +1 -0
- package/dist/adapters/cli/claude-code.d.ts +6 -0
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +197 -11
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.js +4 -4
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +9 -6
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/codex.js +5 -5
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
- package/dist/adapters/cli/fs-policy.js +5 -7
- package/dist/adapters/cli/fs-policy.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts +2 -1
- package/dist/adapters/cli/grok.d.ts.map +1 -1
- package/dist/adapters/cli/grok.js +2 -1
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/hermes.d.ts.map +1 -1
- package/dist/adapters/cli/hermes.js +8 -4
- package/dist/adapters/cli/hermes.js.map +1 -1
- package/dist/adapters/cli/mtr.d.ts.map +1 -1
- package/dist/adapters/cli/mtr.js +3 -2
- package/dist/adapters/cli/mtr.js.map +1 -1
- package/dist/adapters/cli/opencode.d.ts.map +1 -1
- package/dist/adapters/cli/opencode.js +5 -4
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/relay.js +2 -2
- package/dist/adapters/cli/relay.js.map +1 -1
- package/dist/adapters/cli/runner-input.d.ts +2 -2
- package/dist/adapters/cli/runner-input.d.ts.map +1 -1
- package/dist/adapters/cli/runner-input.js +9 -6
- package/dist/adapters/cli/runner-input.js.map +1 -1
- package/dist/adapters/cli/seed.d.ts.map +1 -1
- package/dist/adapters/cli/seed.js +2 -1
- package/dist/adapters/cli/seed.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +3 -2
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +25 -18
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +28 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +75 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +272 -86
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +85 -192
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/config.d.ts +0 -16
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -30
- package/dist/config.js.map +1 -1
- package/dist/core/ask-broker.d.ts +12 -0
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +41 -0
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/bot-turn-mutation-gate.d.ts +24 -0
- package/dist/core/bot-turn-mutation-gate.d.ts.map +1 -0
- package/dist/core/bot-turn-mutation-gate.js +369 -0
- package/dist/core/bot-turn-mutation-gate.js.map +1 -0
- package/dist/core/command-handler.d.ts +5 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +38 -16
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +330 -57
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +8 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/host-overload-alert.d.ts +157 -0
- package/dist/core/host-overload-alert.d.ts.map +1 -0
- package/dist/core/host-overload-alert.js +251 -0
- package/dist/core/host-overload-alert.js.map +1 -0
- package/dist/core/passthrough-commands.d.ts +8 -0
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +19 -0
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/restart-coordinator.d.ts +28 -0
- package/dist/core/restart-coordinator.d.ts.map +1 -0
- package/dist/core/restart-coordinator.js +82 -0
- package/dist/core/restart-coordinator.js.map +1 -0
- package/dist/core/restart-followup-policy.d.ts +112 -0
- package/dist/core/restart-followup-policy.d.ts.map +1 -0
- package/dist/core/restart-followup-policy.js +49 -0
- package/dist/core/restart-followup-policy.js.map +1 -0
- package/dist/core/role-library.d.ts +1 -1
- package/dist/core/role-library.js +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +8 -0
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-discovery.d.ts +14 -0
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +25 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-liveness.d.ts +15 -0
- package/dist/core/session-liveness.d.ts.map +1 -0
- package/dist/core/session-liveness.js +76 -0
- package/dist/core/session-liveness.js.map +1 -0
- package/dist/core/session-row-enrichment.d.ts +15 -0
- package/dist/core/session-row-enrichment.d.ts.map +1 -0
- package/dist/core/session-row-enrichment.js +93 -0
- package/dist/core/session-row-enrichment.js.map +1 -0
- package/dist/core/slash-inject.js +1 -1
- package/dist/core/slash-inject.js.map +1 -1
- package/dist/core/trigger-final-suppression.d.ts +24 -0
- package/dist/core/trigger-final-suppression.d.ts.map +1 -0
- package/dist/core/trigger-final-suppression.js +97 -0
- package/dist/core/trigger-final-suppression.js.map +1 -0
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +64 -4
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +6 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +20 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +283 -32
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +5 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +520 -35
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/aggregator.d.ts +1 -0
- package/dist/dashboard/aggregator.d.ts.map +1 -1
- package/dist/dashboard/aggregator.js +34 -6
- package/dist/dashboard/aggregator.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +3 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +3 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/compat.d.ts +102 -2
- package/dist/dashboard/compat.d.ts.map +1 -1
- package/dist/dashboard/compat.js +78 -14
- package/dist/dashboard/compat.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +1 -0
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/desktop-asks.d.ts +21 -0
- package/dist/dashboard/desktop-asks.d.ts.map +1 -0
- package/dist/dashboard/desktop-asks.js +49 -0
- package/dist/dashboard/desktop-asks.js.map +1 -0
- package/dist/dashboard/public-redact.d.ts +7 -0
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +35 -3
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/session-presentation.d.ts +16 -0
- package/dist/dashboard/session-presentation.d.ts.map +1 -0
- package/dist/dashboard/session-presentation.js +62 -0
- package/dist/dashboard/session-presentation.js.map +1 -0
- package/dist/dashboard/settings-write-applier.d.ts +2 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +19 -1
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/trigger-api.d.ts.map +1 -1
- package/dist/dashboard/trigger-api.js +19 -1
- package/dist/dashboard/trigger-api.js.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.d.ts +7 -2
- package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.js +13 -0
- package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +18 -5
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +97 -35
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +3 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/client-shell.d.ts +29 -0
- package/dist/dashboard/web/client-shell.d.ts.map +1 -0
- package/dist/dashboard/web/client-shell.js +89 -0
- package/dist/dashboard/web/client-shell.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +5 -1
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +100 -8
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +7 -0
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +32 -0
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +1 -1
- package/dist/dashboard/web/sessions-kanban.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +77 -23
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +4 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +14 -1
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +6 -0
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +55 -30
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +1 -2
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +69 -20
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.js +128 -42
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +9 -2
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-VQMPUJ4Y.js +10 -0
- package/dist/dashboard-web/chunks/chunk-AGCPF6MT.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-KPQAUX7V.js → chunk-JMRGZQDB.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-R7IAKAYX.js → chunk-NP4JUBGS.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-NRL6CVAS.js → chunk-P327LXOT.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-X2L65IOM.js → chunk-SNKATZWK.js} +15 -15
- package/dist/dashboard-web/chunks/connectors-page-DOY4J3ZL.js +1 -0
- package/dist/dashboard-web/chunks/{groups-page-6DKXBYOM.js → groups-page-74TS2DIH.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-NWARTJ6J.js → insights-page-AYCO65JC.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-AGX3XRJX.js → monitor-room-YKYLTSAN.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-GGGIWN4C.js → monitoring-page-QBIUNRBR.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-6SIVKSK3.js → office-page-4PH2A26P.js} +1 -1
- package/dist/dashboard-web/chunks/overview-page-H73D5UT4.js +1 -0
- package/dist/dashboard-web/chunks/{roles-page-WE2YB7KN.js → roles-page-U4BTOQ7F.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-TB3I24XN.js → schedules-page-RHRHX7R7.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-VSC6AM5G.js +2 -0
- package/dist/dashboard-web/chunks/settings-page-LF3RKM5P.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-3QAT2IWD.js → skills-page-SYOIGGXH.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-K4VVAVAK.js → team-federation-page-RMBLASTW.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-V6IOJR2B.js → v3-page-XJXKKJRN.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-V6CGKRNX.js → whiteboards-page-K3YVSTHJ.js} +1 -1
- package/dist/dashboard-web/style.css +551 -0
- package/dist/dashboard.js +153 -9
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +11 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +23 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +5 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +5 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +1 -1
- package/dist/im/lark/card-builder.js +1 -1
- package/dist/im/lark/card-handler.d.ts +10 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +163 -17
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +11 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +47 -18
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +13 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +20 -0
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/identity-cache.d.ts +25 -1
- package/dist/im/lark/identity-cache.d.ts.map +1 -1
- package/dist/im/lark/identity-cache.js +47 -1
- package/dist/im/lark/identity-cache.js.map +1 -1
- package/dist/im/lark/overload-nonce.d.ts +19 -0
- package/dist/im/lark/overload-nonce.d.ts.map +1 -0
- package/dist/im/lark/overload-nonce.js +72 -0
- package/dist/im/lark/overload-nonce.js.map +1 -0
- package/dist/im/lark/v3-progress-card.d.ts.map +1 -1
- package/dist/im/lark/v3-progress-card.js +5 -0
- package/dist/im/lark/v3-progress-card.js.map +1 -1
- package/dist/services/async-trigger-state.d.ts +82 -0
- package/dist/services/async-trigger-state.d.ts.map +1 -0
- package/dist/services/async-trigger-state.js +95 -0
- package/dist/services/async-trigger-state.js.map +1 -0
- package/dist/services/async-trigger-store.d.ts +28 -0
- package/dist/services/async-trigger-store.d.ts.map +1 -0
- package/dist/services/async-trigger-store.js +120 -0
- package/dist/services/async-trigger-store.js.map +1 -0
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +34 -2
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +32 -0
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +39 -0
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/bridge-turn-queue.d.ts.map +1 -1
- package/dist/services/bridge-turn-queue.js +15 -1
- package/dist/services/bridge-turn-queue.js.map +1 -1
- package/dist/services/card-prefs-store.d.ts +4 -0
- package/dist/services/card-prefs-store.d.ts.map +1 -1
- package/dist/services/card-prefs-store.js +8 -0
- package/dist/services/card-prefs-store.js.map +1 -1
- package/dist/services/claude-transcript.d.ts +23 -0
- package/dist/services/claude-transcript.d.ts.map +1 -1
- package/dist/services/claude-transcript.js +33 -0
- package/dist/services/claude-transcript.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +61 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -0
- package/dist/services/codex-app-runner-protocol.js +170 -0
- package/dist/services/codex-app-runner-protocol.js.map +1 -0
- package/dist/services/codex-app-turn-controller.d.ts +72 -0
- package/dist/services/codex-app-turn-controller.d.ts.map +1 -0
- package/dist/services/codex-app-turn-controller.js +524 -0
- package/dist/services/codex-app-turn-controller.js.map +1 -0
- package/dist/services/codex-runner-freshness.d.ts +39 -0
- package/dist/services/codex-runner-freshness.d.ts.map +1 -0
- package/dist/services/codex-runner-freshness.js +78 -0
- package/dist/services/codex-runner-freshness.js.map +1 -0
- package/dist/services/connector-store.d.ts +6 -0
- package/dist/services/connector-store.d.ts.map +1 -1
- package/dist/services/connector-store.js.map +1 -1
- package/dist/services/grant-store.d.ts.map +1 -1
- package/dist/services/grant-store.js +16 -0
- package/dist/services/grant-store.js.map +1 -1
- package/dist/services/hermes-transcript.d.ts +1 -0
- package/dist/services/hermes-transcript.d.ts.map +1 -1
- package/dist/services/hermes-transcript.js +49 -0
- package/dist/services/hermes-transcript.js.map +1 -1
- package/dist/services/schedule-split-migration.d.ts +2 -0
- package/dist/services/schedule-split-migration.d.ts.map +1 -0
- package/dist/services/schedule-split-migration.js +159 -0
- package/dist/services/schedule-split-migration.js.map +1 -0
- package/dist/services/schedule-store.d.ts +28 -4
- package/dist/services/schedule-store.d.ts.map +1 -1
- package/dist/services/schedule-store.js +118 -33
- package/dist/services/schedule-store.js.map +1 -1
- package/dist/services/trigger-types.d.ts +18 -1
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js +3 -0
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-store.js +1 -0
- package/dist/services/vc-meeting-consumer-profile-store.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-templates.d.ts +32 -0
- package/dist/services/vc-meeting-consumer-profile-templates.d.ts.map +1 -0
- package/dist/services/vc-meeting-consumer-profile-templates.js +106 -0
- package/dist/services/vc-meeting-consumer-profile-templates.js.map +1 -0
- package/dist/services/vc-meeting-delivery-feed.d.ts +1 -1
- package/dist/services/vc-meeting-delivery-feed.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-feed.js +2 -1
- package/dist/services/vc-meeting-delivery-feed.js.map +1 -1
- package/dist/services/vc-meeting-delivery-hub-store.d.ts +3 -1
- package/dist/services/vc-meeting-delivery-hub-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-hub-store.js +11 -0
- package/dist/services/vc-meeting-delivery-hub-store.js.map +1 -1
- package/dist/services/vc-meeting-delivery-protocol.d.ts +9 -2
- package/dist/services/vc-meeting-delivery-protocol.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-protocol.js +10 -1
- package/dist/services/vc-meeting-delivery-protocol.js.map +1 -1
- package/dist/services/vc-meeting-delivery-receiver.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-receiver.js +10 -1
- package/dist/services/vc-meeting-delivery-receiver.js.map +1 -1
- package/dist/services/vc-meeting-delivery-store.d.ts +12 -2
- package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-store.js +14 -2
- package/dist/services/vc-meeting-delivery-store.js.map +1 -1
- package/dist/services/vc-meeting-im-reply.d.ts +2 -1
- package/dist/services/vc-meeting-im-reply.d.ts.map +1 -1
- package/dist/services/vc-meeting-im-reply.js +19 -3
- package/dist/services/vc-meeting-im-reply.js.map +1 -1
- package/dist/services/vc-meeting-listener-output-protocol.d.ts +27 -0
- package/dist/services/vc-meeting-listener-output-protocol.d.ts.map +1 -0
- package/dist/services/vc-meeting-listener-output-protocol.js +58 -0
- package/dist/services/vc-meeting-listener-output-protocol.js.map +1 -0
- package/dist/services/vc-meeting-listener-topic-store.d.ts +31 -0
- package/dist/services/vc-meeting-listener-topic-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-listener-topic-store.js +120 -0
- package/dist/services/vc-meeting-listener-topic-store.js.map +1 -0
- package/dist/services/vc-meeting-runtime-store.d.ts +2 -1
- package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-runtime-store.js +8 -0
- package/dist/services/vc-meeting-runtime-store.js.map +1 -1
- package/dist/services/vc-meeting-send-policy.d.ts +8 -1
- package/dist/services/vc-meeting-send-policy.d.ts.map +1 -1
- package/dist/services/vc-meeting-send-policy.js +8 -0
- package/dist/services/vc-meeting-send-policy.js.map +1 -1
- package/dist/types.d.ts +40 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/allowed-users-apply.d.ts +76 -0
- package/dist/utils/allowed-users-apply.d.ts.map +1 -0
- package/dist/utils/allowed-users-apply.js +123 -0
- package/dist/utils/allowed-users-apply.js.map +1 -0
- package/dist/utils/allowed-users-cache.d.ts +29 -0
- package/dist/utils/allowed-users-cache.d.ts.map +1 -0
- package/dist/utils/allowed-users-cache.js +82 -0
- package/dist/utils/allowed-users-cache.js.map +1 -0
- package/dist/utils/child-env.d.ts +2 -1
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +2 -1
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts +27 -1
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +92 -20
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/utils/input-gate.d.ts +2 -0
- package/dist/utils/input-gate.d.ts.map +1 -1
- package/dist/utils/input-gate.js +2 -0
- package/dist/utils/input-gate.js.map +1 -1
- package/dist/utils/runtime-build-id.d.ts +21 -0
- package/dist/utils/runtime-build-id.d.ts.map +1 -0
- package/dist/utils/runtime-build-id.js +83 -0
- package/dist/utils/runtime-build-id.js.map +1 -0
- package/dist/utils/terminal-renderer.d.ts +3 -3
- package/dist/utils/terminal-renderer.js +3 -3
- package/dist/vc-agent/cards.d.ts.map +1 -1
- package/dist/vc-agent/cards.js +21 -1
- package/dist/vc-agent/cards.js.map +1 -1
- package/dist/worker.js +601 -179
- package/dist/worker.js.map +1 -1
- package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -1
- package/dist/workflows/hostExecutors/botmux-schedule.js +13 -1
- package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -1
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +20 -20
- package/dist/workflows/migration/v2-to-v3.d.ts.map +1 -1
- package/dist/workflows/migration/v2-to-v3.js +5 -1
- package/dist/workflows/migration/v2-to-v3.js.map +1 -1
- package/dist/workflows/v3/architect.d.ts.map +1 -1
- package/dist/workflows/v3/architect.js +1 -0
- package/dist/workflows/v3/architect.js.map +1 -1
- package/dist/workflows/v3/cli-run.d.ts +9 -0
- package/dist/workflows/v3/cli-run.d.ts.map +1 -1
- package/dist/workflows/v3/cli-run.js +17 -2
- package/dist/workflows/v3/cli-run.js.map +1 -1
- package/dist/workflows/v3/goal-cli.d.ts +58 -0
- package/dist/workflows/v3/goal-cli.d.ts.map +1 -0
- package/dist/workflows/v3/goal-cli.js +430 -0
- package/dist/workflows/v3/goal-cli.js.map +1 -0
- package/dist/workflows/v3/library-materialize.d.ts.map +1 -1
- package/dist/workflows/v3/library-materialize.js +5 -1
- package/dist/workflows/v3/library-materialize.js.map +1 -1
- package/dist/workflows/v3/library-schema.d.ts +21 -0
- package/dist/workflows/v3/library-schema.d.ts.map +1 -1
- package/dist/workflows/v3/library-schema.js +95 -1
- package/dist/workflows/v3/library-schema.js.map +1 -1
- package/dist/workflows/v3/progress-projection.d.ts +3 -0
- package/dist/workflows/v3/progress-projection.d.ts.map +1 -1
- package/dist/workflows/v3/progress-projection.js +23 -1
- package/dist/workflows/v3/progress-projection.js.map +1 -1
- package/dist/workflows/v3/run-envelope.d.ts +46 -1
- package/dist/workflows/v3/run-envelope.d.ts.map +1 -1
- package/dist/workflows/v3/run-envelope.js +32 -1
- package/dist/workflows/v3/run-envelope.js.map +1 -1
- package/package.json +2 -2
- package/dist/dashboard-web/chunks/bot-defaults-page-AUKV7P4L.js +0 -10
- package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-HDQFEXZI.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-FVR3NKAF.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-KOOOASIL.js +0 -2
- package/dist/dashboard-web/chunks/settings-page-IEBR7TGN.js +0 -2
- package/dist/utils/screen-analyzer.d.ts +0 -75
- package/dist/utils/screen-analyzer.d.ts.map +0 -1
- package/dist/utils/screen-analyzer.js +0 -333
- package/dist/utils/screen-analyzer.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,434 +1,93 @@
|
|
|
1
1
|
# botmux
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<img src="cover.svg" alt="botmux
|
|
4
|
+
<img src="cover.svg" alt="botmux" width="760">
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="
|
|
9
|
-
<img src="https://img.shields.io/badge/node-%3E%3D22-brightgreen.svg" alt="Node
|
|
10
|
-
<a href="
|
|
11
|
-
<a href="https://github.com/deepcoldy/botmux"><img src="https://img.shields.io/github/stars/deepcoldy/botmux.svg?style=social" alt="
|
|
8
|
+
<a href="https://www.npmjs.com/package/botmux"><img src="https://img.shields.io/npm/v/botmux.svg" alt="npm"></a>
|
|
9
|
+
<img src="https://img.shields.io/badge/node-%3E%3D22-brightgreen.svg" alt="Node >= 22">
|
|
10
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT"></a>
|
|
11
|
+
<a href="https://github.com/deepcoldy/botmux"><img src="https://img.shields.io/github/stars/deepcoldy/botmux.svg?style=social" alt="Stars"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
+
<p align="center"><b>在飞书里遥控你的 AI 编程 CLI。</b>一条消息启动一个会话,每个会话一个独立 CLI 进程,实时流式回传——手机、电脑、终端三端同步。</p>
|
|
15
|
+
|
|
14
16
|
<p align="center">
|
|
15
|
-
<a href="
|
|
17
|
+
<a href="https://deepcoldy.github.io/botmux/"><b>📖 文档</b></a> ·
|
|
18
|
+
<a href="#5-分钟接入"><b>🚀 快速接入</b></a> ·
|
|
19
|
+
<a href="https://bytedance.larkoffice.com/wiki/UBOXwH01CixfxfkqxUpcKgvQnsg"><b>✨ 效果展示</b></a> ·
|
|
20
|
+
<a href="README.en.md">English</a>
|
|
16
21
|
</p>
|
|
17
22
|
|
|
18
23
|
<p align="center">
|
|
19
|
-
|
|
24
|
+
<img src="docs/assets/botmux-product-panorama.png" width="1000" alt="botmux 产品全景:飞书话题连接实时卡片、Web 终端、多 Bot 编排与 20+ CLI / Agent">
|
|
20
25
|
</p>
|
|
21
26
|
|
|
22
27
|
---
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
> ✨ **先看效果**:[**《5 分钟创建一个真正好用的飞书助理》**](https://bytedance.larkoffice.com/wiki/UBOXwH01CixfxfkqxUpcKgvQnsg) —— 飞书图文 + 视频演示:AI 消息提醒 / 多端同步跨端操作 / 多 Bot 协作 / 多话题并行编排 / 语音总结 + 飞书会议 / Oncall 与个人替身。
|
|
27
|
-
|
|
28
|
-
> 📖 **完整文档**(命令 / 配置 / 最佳实践 / 排错):**<https://deepcoldy.github.io/botmux/>** ——本 README 只讲为什么用它和怎么快速上手。
|
|
29
|
-
|
|
30
|
-
## 演示
|
|
31
|
-
|
|
32
|
-
| 飞书流式卡片 | Web 终端 | tmux 会话管理 | 多机器人协作 |
|
|
33
|
-
|:-:|:-:|:-:|:-:|
|
|
34
|
-
| <img src="gif/fold&unfold.gif" width="220" /> | <img src="gif/web_terminal.gif" width="220" /> | <img src="gif/tmux.gif" width="220" /> | <img src="docs/setup/multi-bot-collab.png" width="220" /> |
|
|
35
|
-
|
|
36
|
-
<details>
|
|
37
|
-
<summary>完整演示视频</summary>
|
|
38
|
-
|
|
39
|
-
[演示视频](https://github.com/user-attachments/assets/3ba4c681-0a7e-4a03-89c8-b8d26b544a65)
|
|
40
|
-
</details>
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## 为什么选择 botmux
|
|
45
|
-
|
|
46
|
-
### 设计理念
|
|
47
|
-
|
|
48
|
-
**不做 SDK wrapper,直接桥接 CLI。**
|
|
49
|
-
|
|
50
|
-
botmux 不重新实现 Agent 能力,而是直接桥接已有的 AI 编程 CLI(Claude Code、Codex、Cursor、Gemini、OpenCode、Antigravity、GitHub Copilot、Kimi Code、Kiro)。记忆、上下文管理、工具调用、权限体系——这些能力 CLI 本身都在快速迭代,botmux 选择站在这个进化之上,而不是平行重造一套。CLI 的每次升级,botmux 零适配自动受益。
|
|
51
|
-
|
|
52
|
-
### 核心优势
|
|
53
|
-
|
|
54
|
-
与 OpenClaw 等基于 Agent SDK 构建的方案相比:
|
|
55
|
-
|
|
56
|
-
| 特性 | botmux | OpenClaw 类方案 |
|
|
57
|
-
|------|--------|----------------|
|
|
58
|
-
| 底层架构 | 直接桥接完整 CLI 进程 | 基于 Agent SDK 重新构建 |
|
|
59
|
-
| CLI 能力 | 完整运行时(hooks、memory、plan mode、Skill、`/` 命令) | SDK API 子集,需手动实现缺失功能 |
|
|
60
|
-
| CLI 升级 | 零适配自动受益 | 需要跟进 SDK 版本变更 |
|
|
61
|
-
| 记忆 / 上下文 | 直接复用 CLI 内建的记忆系统,随 CLI 迭代自动增强 | 需自建记忆系统,与 CLI 原生能力重复 |
|
|
62
|
-
| 多 CLI 支持 | 多种 CLI 一键切换(Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity / GitHub Copilot / Kimi Code / Grok Build / Kiro 等) | 绑定单一 SDK,无法切换 CLI |
|
|
63
|
-
| Web 终端 | 可交互的完整终端,移动端快捷键工具栏,手机/电脑/飞书三端同步 | 通常仅 Web 聊天界面或只读输出 |
|
|
64
|
-
| 多机器人协作 | 多 bot 同群 @mention 路由,独立进程隔离,不同 CLI 赛博斗蛐蛐 | 通常单机器人 |
|
|
65
|
-
| 多话题协作模式 | 主 bot 自动拆任务、开多话题、派多 bot 并行协作(coder+reviewer),飞书任务清单当共享进度板 | 通常需人工逐个分派、无统一进度板 |
|
|
66
|
-
| 终端直连 | tmux attach 直接进入 CLI 进程,和本地开发体验一致 | 无法直接操作底层终端 |
|
|
67
|
-
| 安装部署 | `npm install -g botmux`,5 分钟飞书配置即可使用 | 安装简单,但配置项较多 |
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## 功能特性
|
|
72
|
-
|
|
73
|
-
### Skill 管理
|
|
74
|
-
|
|
75
|
-
botmux 可以管理 CLI 无关的自定义 Skill Registry,并按 bot 配置在会话启动时优先披露指定 skill;未配置时完全保持 Claude / Codex 等 CLI 自己的默认 skill 行为。安装、bot 级策略、Claude scoped plugin 和 Codex prompt delivery 说明见 [Skill 管理](docs/setup/skills.md)。
|
|
76
|
-
|
|
77
|
-
### 实时流式卡片
|
|
78
|
-
|
|
79
|
-
每轮对话一张实时更新的飞书卡片,是你在手机/飞书上感知并操控 CLI 的主窗口:
|
|
80
|
-
|
|
81
|
-
- **终端画面实时截图刷新到卡片**(xterm 无头渲染成图,原样还原 CLI 的 TUI);可一键「显示 / 隐藏输出」「导出文字」「上下翻屏」
|
|
82
|
-
- **状态实时指示**:启动中 → 正在分析 → 工作中 / 执行中 → 等待输入;额度用满会标「限额已达 · 可重试」
|
|
83
|
-
- **卡片上直接操作**:打开(可写)终端、🔑 取操作链接、重启 / 关闭 / 接管会话、重发上一条任务
|
|
84
|
-
- **每轮一张新卡片**,上一轮冻结存档;会话用 `/relay` 搬到别的群后,原卡片自动冻结为存档
|
|
85
|
-
- **关闭给「可恢复」卡片**(附 CLI 原生 resume 命令),随时点回来继续
|
|
86
|
-
|
|
87
|
-
### Web 终端(可交互)
|
|
88
|
-
|
|
89
|
-
每个会话提供一个 Web 终端,地址为 `http://<WEB_EXTERNAL_HOST>:<端口>`。
|
|
90
|
-
|
|
91
|
-
- `WEB_EXTERNAL_HOST` 未配置或留空时,启动/重启会自动探测当前非回环 IPv4;如需固定代理、NAT 地址或域名,请在 `~/.botmux/.env` 中显式设置。由 botmux 会话、Dashboard 或自动升级触发的重启均以该文件为准,避免旧 daemon 地址被带入新进程。
|
|
92
|
-
- **只读链接** — 展示在群话题的流式卡片上,随时查看进度
|
|
93
|
-
- **可操作链接** — 按需获取(点击卡片上的「🔑 获取操作链接」通过私聊发送),可直接在浏览器中操作 CLI
|
|
94
|
-
- 移动端/平板提供悬浮快捷键工具栏(Esc、Ctrl+C、Tab、方向键等),手机上也能流畅操作
|
|
95
|
-
|
|
96
|
-
### 多机器人协作
|
|
97
|
-
|
|
98
|
-
同一台机器上可运行多个飞书机器人,每个机器人可对应不同的 CLI。同一群聊中通过 @mention 路由消息,仅「你 + 1 个机器人」的 1v1 群无需 @ 自动响应,多人群默认必须 @(可通过「群聊 @ 策略」配置话题内免 @ / 全群免 @);多机器人时 `@<bot1> @<bot2> /t xxx` 可让每个被 @ 的机器人在同一条消息上各自独立开新话题。先发一次 `@<bot1> @<bot2> /introduce` 让它们互相登记 open_id,之后各 bot 就能在自己的会话里显式 @mention 对方协作(命令详见 [📖 文档 · 斜杠命令](https://deepcoldy.github.io/botmux/slash-commands))。
|
|
99
|
-
|
|
100
|
-
### 多话题协作模式
|
|
101
|
-
|
|
102
|
-
「多机器人协作」的升级版:主 bot(**编排者**)把一个大任务拆成多个**子项目**,在群里**自动开多条话题**,每条话题派一组 bot 并行推进(常见「一个写代码 + 一个 review」),用一张**飞书任务清单**当所有人共享的进度板,最后由主 bot 收齐汇总。一个普通群就是一个并行工作台,你在飞书任务面板一眼看完成度。
|
|
103
|
-
|
|
104
|
-
**怎么跑** —— `botmux-orchestrate` skill 教编排者走完整流程:
|
|
105
|
-
|
|
106
|
-
> 拆子项目 → 提一版「子项目 ↔ bot」分配 → 发给你**一次审批**(可用卡片确认) → 建飞书任务清单 → 逐个开话题派活 → 收齐回报 → 汇总
|
|
29
|
+
Daemon 监听飞书消息,为每个新会话自动 spawn 一个独立的会话进程,把 AI 编程 CLI / Agent 的输出实时流式回传成飞书卡片,并提供可交互的 Web 终端。它**不重造 Agent 能力**,而是直接桥接你已经在用的工具(**20+ CLI / Agent 适配器**,见 [支持的 CLI / Agent](#支持的-cli--agent))。
|
|
107
30
|
|
|
108
|
-
|
|
31
|
+
## 它解决什么
|
|
109
32
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
--brief-file /tmp/brief.md
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
- `--bot-app <larkAppId[:角色]>` —— 同机 Bot 的推荐入口;自动完成 receiver-scoped 精确对话授权与实际接单确认。它不授管理命令权,不能与 `--repo` 同用,驻守 Bot 应使用自身默认工作目录。
|
|
117
|
-
- `--bot <open_id[:名字[:角色]]>` —— 兼容外部/旧链路的原始 open_id 入口;调用方自行保证 receiver 作用域、权限与接单状态。
|
|
118
|
-
- `--repo <目录>` —— 只适用于已经具备 operate 信任的旧 `--bot` 链路;预设子 bot 工作目录(绝对路径,需在子 bot 所在机器上存在)。
|
|
119
|
-
- `--standby` —— **必须配 `--repo`**(且不能与 `--into` 同用):只发一次 `/repo` 把 bot 拉起到指定目录待命、不派简报,之后用 `--into ... --brief(-file)` 激活派活。
|
|
120
|
-
- `--into <话题root>` —— 回到已有话题追加一条(激活待命的 bot / 追加协调);仍需指定 bot,且非 standby 时必须带 `--brief` 或 `--brief-file`。
|
|
121
|
-
|
|
122
|
-
子 Bot 完成后运行 `botmux report`。纯同机 `--bot-app` 派单会在每一轮任务中自动注入带精确 seed 的 `botmux report --dispatch-root <seed>` 命令,把回报直接注入 dispatch 时登记的原 PM session;即使同一 chat-scope 会话后来又收到新派单,也不会串到新 seed。legacy / mixed `--bot` 仍保留无精确 seed 的跨机兼容回退。
|
|
123
|
-
|
|
124
|
-
**协作边界**:
|
|
33
|
+
- **Agent 收不到通知、手机控不了** — CLI 跑在开发机上,人在手机上。botmux 把每轮输出推成飞书卡片,随时随地查看 / 追问 / 打断,还能开可写 Web 终端直接操作。
|
|
34
|
+
- **CLI 不感知飞书上下文** — 把机器人拉进话题群 / oncall 群,@ 一句就在你本机的代码库里开跑;会话可以用 `/relay` 原样搬到另一个群,上下文一点不丢。
|
|
35
|
+
- **单个 Agent 不够用** — 同一个群里放多个不同 CLI 的机器人,@ 谁谁干活,让 Claude Code 和 Codex 一起 review 同一个 MR、各自独立分析、观点不同自动互怼。
|
|
125
36
|
|
|
126
|
-
|
|
127
|
-
- 子 bot 须已在群里、可被 @(具备 `im:message.group_at_msg.include_bot` 权限)。
|
|
128
|
-
- 一条话题可放多个 bot,它们在话题内互相 @ 协作(如 coder 写完 @ reviewer 审)。
|
|
37
|
+
## 5 分钟接入
|
|
129
38
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
安装 tmux 后自动启用。CLI 进程常驻在 tmux session 内,所有功能不受影响。
|
|
133
|
-
|
|
134
|
-
**核心收益:Daemon 重启不中断 CLI。** `botmux restart` 时 worker 进程退出,但 tmux session(及其中的 CLI 进程)保持运行。下次收到消息时 worker 自动 re-attach,无需 `--resume` 重载上下文。
|
|
135
|
-
|
|
136
|
-
| 事件 | tmux session | CLI 进程 |
|
|
137
|
-
|------|-------------|---------|
|
|
138
|
-
| `botmux restart` | 存活 | 存活(下次消息 re-attach) |
|
|
139
|
-
| `/close` 或关闭按钮 | 销毁 | 终止(SIGHUP) |
|
|
140
|
-
| CLI 自行退出 / 崩溃 | 随之关闭 | 已退出(自动重启用新 session) |
|
|
39
|
+
> 约 5 分钟:`botmux setup` 一次飞书扫码就连续建好应用、配全权限、发版(加 `--no-open-platform-auto` 则只建应用、跳过权限与发版的自动配置,之后需手动完成;手动创建 / 粘贴凭证是 setup 里的另一个选项)。
|
|
141
40
|
|
|
142
41
|
```bash
|
|
143
|
-
|
|
144
|
-
botmux
|
|
145
|
-
|
|
146
|
-
# 也可以手动 attach(会话名 = bmx-<sessionId 前 8 位>)
|
|
147
|
-
tmux attach -t bmx-<session-id-前8位>
|
|
148
|
-
# Ctrl+B, D 退出 attach,不影响 CLI 继续运行
|
|
149
|
-
|
|
150
|
-
# 强制降级到纯 pty 模式(不使用 tmux)
|
|
151
|
-
BACKEND_TYPE=pty botmux start
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 会话接入(Adopt)
|
|
155
|
-
|
|
156
|
-
将已在 tmux 中运行的 CLI 进程无缝接入 Botmux,在手机上通过飞书查看进度和交互。
|
|
157
|
-
|
|
158
|
-
```
|
|
159
|
-
/adopt # 弹出选择卡片:① 接管运行中的会话 ② 从磁盘 resume 导入历史会话
|
|
160
|
-
/adopt 0:2.0 # 直接接入指定 tmux pane(或传历史会话 id 直接 resume 导入)
|
|
42
|
+
npm install -g botmux # 需要 Node >= 22
|
|
43
|
+
botmux setup # 一次扫码建应用 → 选 CLI → 选工作目录(自动配权限 + 发版)
|
|
44
|
+
botmux start # 启动 daemon(botmux autostart enable 设开机自启)
|
|
161
45
|
```
|
|
162
46
|
|
|
163
|
-
|
|
164
|
-
- **共享模式** — Botmux 接入后,iTerm2 和飞书双向同步:流式卡片实时显示终端输出,飞书聊天框输入直接透传到终端
|
|
165
|
-
- **一键接管** — 点击流式卡片上的「🔄 接管」按钮,Botmux 以 `--resume` 重建会话,转为标准 Botmux 会话
|
|
166
|
-
- **安全断开** — 点击「⏏ 断开」,Botmux 退出观察,原 CLI 不受影响
|
|
167
|
-
|
|
168
|
-
### 定时任务
|
|
169
|
-
|
|
170
|
-
支持三种调度类型 + 中文自然语言,支持原话题延续(到点在同一话题内继续,不另开 thread)。
|
|
47
|
+
然后私聊机器人、或 `botmux dashboard` 拉个群,直接开聊。完整步骤(含 Lark 国际版、`--no-open-platform-auto` 后手动配置权限 / 发版、排查)见 **[5 分钟快速接入](https://deepcoldy.github.io/botmux/quickstart)**。
|
|
171
48
|
|
|
172
|
-
|
|
173
|
-
- **斜杠命令**(快捷):`/schedule 每日17:50 帮我看看AI圈有什么新闻`
|
|
174
|
-
- **对话触发**(灵活):直接跟 agent 说「帮我加个每天 18:00 检查部署的定时任务」,自动触发 `botmux-schedule` Skill
|
|
49
|
+
## 核心场景
|
|
175
50
|
|
|
176
|
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
51
|
+
- **[实时流式卡片](https://deepcoldy.github.io/botmux/cards)** — 每轮对话一张实时刷新的卡片,终端画面原样截图回传;一键显示/隐藏输出、翻屏、重启/关闭/接管会话。
|
|
52
|
+
- **[多机器人协作](https://deepcoldy.github.io/botmux/multi-bot)** — 同群多 bot @mention 路由,不同 CLI 背后不同模型,天然多样性;方案评审 / 代码 review / 技术选型让它们互相挑刺。
|
|
53
|
+
- **[多话题并行编排](https://deepcoldy.github.io/botmux/multi-topic)** — 给编排者一个大任务,它自动在群里种话题、拉各 bot 起独立会话跑流水线,飞书任务面板一眼看完所有子任务进度。
|
|
54
|
+
- **[可交互 Web 终端](https://deepcoldy.github.io/botmux/web-terminal)** — 不只是看输出,浏览器 / 手机直接操作 CLI,移动端带悬浮快捷键栏(Esc、Ctrl+C、方向键)。
|
|
55
|
+
- **[会话接入 & 接力](https://deepcoldy.github.io/botmux/adopt)** — 本地 tmux 里跑到一半,手机 `/adopt` 接管;`/relay` 把整个会话(原进程、原记忆)搬进团队群继续。
|
|
56
|
+
- **[定时任务](https://deepcoldy.github.io/botmux/schedule) & [外部触发](https://deepcoldy.github.io/botmux/webhook)** — 自然语言配周期任务(报警分析 / 群总结);从外部系统编程式触发用 [Webhook](https://deepcoldy.github.io/botmux/webhook) 或 [API 任务触发](https://deepcoldy.github.io/botmux/api-task-trigger)。
|
|
57
|
+
- **[Oncall 模式](https://deepcoldy.github.io/botmux/oncall) & [语音总结](https://deepcoldy.github.io/botmux/voice)** — 拉进 oncall 群,任何成员 @ 即在项目目录排查;配好 TTS 后每张卡片页脚会多一个 🔊 语音总结按钮,让模型「说人话」。
|
|
181
58
|
|
|
182
|
-
|
|
59
|
+
更多:[角色与团队](https://deepcoldy.github.io/botmux/roles) · [文件沙盒](https://deepcoldy.github.io/botmux/sandbox) · [Dashboard 管控面](https://deepcoldy.github.io/botmux/dashboard) · [tmux 会话常驻](https://deepcoldy.github.io/botmux/tmux) · [飞书会议智能体(效果展示)](https://bytedance.larkoffice.com/wiki/UBOXwH01CixfxfkqxUpcKgvQnsg)。
|
|
183
60
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
- `botmux send` — 向当前话题发消息(支持文本、图片、文件、interactive 卡片 JSON、@mention)
|
|
187
|
-
- `botmux history` — 读取当前会话历史消息(话题/thread 会话拉话题内,普通群 chat-scope 会话拉整群)
|
|
188
|
-
- `botmux quoted <message_id>` — 用户用引用 UI @ 机器人时,按需读取被引用的那条消息
|
|
189
|
-
- `botmux bots list` — 查询当前群聊的机器人及 open_id
|
|
190
|
-
- `botmux schedule` — 增删改查定时任务
|
|
191
|
-
- `botmux-workflow` — 用自然语言或 `/workflow` 编排有界多步任务;成功 run 可保存为 Saved Workflow 并复用
|
|
192
|
-
|
|
193
|
-
这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent 使用。Skill + CLI 的组合相比 Anthropic 官方 Telegram channel 那套 MCP 方案:CLI 启动不用做 MCP 握手、不占用工具列表 token,且对 Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity / GitHub Copilot 通用 —— 只要 CLI 能读 system prompt 跑 shell 命令就行,不依赖任何 MCP 协议支持。
|
|
194
|
-
|
|
195
|
-
### Dashboard 管控面
|
|
196
|
-
|
|
197
|
-
> 命令行 `botmux dashboard` 出一次性 token URL,浏览器里跨所有 daemon/机器人管控
|
|
198
|
-
|
|
199
|
-
- 一键定位回飞书话题 / 跳 Web 终端 / 多选批量关闭会话
|
|
200
|
-
- 添加机器人对齐 Feishu 单次扫码主路径:名称可选且全程冻结,支持 AI CLI / 工作目录选择、管理员 fail-closed 补填与显式兼容模式
|
|
201
|
-
- 拉新群、自动转让群主、@ 提醒
|
|
202
|
-
- 解散群聊、bot 退群(关联会话自动清理)
|
|
203
|
-
- **Codex 独立任务完成通知(实验性、默认关闭)**:macOS 锁屏时由所选 Bot 私聊同步 Codex App/CLI 最终回复,也覆盖 Codex App Side Chat;普通 App 会话可通过飞书回调请求运行 BotMux 的 Mac 打开原会话,或在飞书中接管继续处理,临时 Side Chat 只同步结果。在「设置 → 实验性配置」选择 Bot 与通知时机([设计与维护说明](docs/design/codex-notifier.md))
|
|
204
|
-
- **会话洞察**(owner-only,只读):解析各会话 transcript,看动作 span / 工作时序 / 上下文曲线 / 失败聚合 + 诊断建议;聊天里发 `/insight` 可取当前会话摘要卡
|
|
205
|
-
- **Workflows 管控面**:
|
|
206
|
-
- v3 Run List 与 Run Detail 展示 DAG、节点状态、决策记录和 attempt 终端日志,到 terminal 自动停轮询
|
|
207
|
-
- **Dashboard 内可直接 cancel v3 run**;humanGate / retry / grant 继续通过绑定话题里的可信飞书卡片处理
|
|
208
|
-
- 新流程统一在飞书用自然语言或 `/workflow` 创建、运行、保存和复用;v2 Dashboard/Catalog 已下线
|
|
209
|
-
|
|
210
|
-
<img src="docs/dashboard.png" alt="botmux dashboard" width="800" />
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## 前置要求
|
|
215
|
-
|
|
216
|
-
- **Node.js** >= 22
|
|
217
|
-
- **AI 编程 CLI / 本地 Agent 应用** 已安装并完成认证(`claude`、`codex`、`coco`、`cursor-agent`、`gemini`、`genius`、`opencode`、`hermes`、`seed`(Seed CLI,Claude Code 衍生)、`relay`(Relay CLI,Seed 新版)、`pi`、`omp`(oh-my-pi,Pi 衍生)、`copilot`(GitHub Copilot CLI)、`traex`(TRAE CLI)、`mircli`(Mir CLI)、`agy`(Antigravity)、`kimi`(Kimi Code)、`grok`(Grok Build)或 `kiro-cli`(Kiro)在 PATH 中)
|
|
218
|
-
- **CoCo 最低版本 `0.120.32`**:type-ahead(会话忙时即可发新消息,由 CoCo 自己的消息队列接住)依赖 0.120.32+ 的行为;更早版本忙时输入可能丢失或串行,请升级后再用
|
|
219
|
-
- **tmux** >= 3.x(可选,安装后自动启用会话常驻)
|
|
220
|
-
- **CJK 字体**(用于截图渲染中文/emoji):
|
|
221
|
-
- macOS 自带 PingFang/Hiragino,无需配置
|
|
222
|
-
- Debian/Ubuntu:daemon 启动时若检测到缺字体会后台 `apt-get install fonts-noto-cjk fonts-noto-color-emoji`(需免密 sudo 或以 root 运行;装完重启 daemon 生效)
|
|
223
|
-
- 其他 Linux 发行版请手动安装 Noto CJK + Noto Color Emoji(包名视发行版而定)
|
|
224
|
-
|
|
225
|
-
## 5 分钟快速接入
|
|
226
|
-
|
|
227
|
-
> 💡 **TL;DR**:`npm i -g botmux` → `botmux setup`,飞书租户**扫一次码**就能建好一个可用机器人 → `botmux start`。这次扫码拿到的 Web 登录态会连续完成:按 `botmux-N`(可自定义)命名并创建应用、读取 AppID/AppSecret、导入权限、配置重定向 URL、创建并提交发布版本。整个开放平台配置都由 setup 默认完成;加 `--no-open-platform-auto` 可跳过应用创建后的权限/发版自动配置。
|
|
228
|
-
|
|
229
|
-
### 1. 安装 botmux
|
|
230
|
-
|
|
231
|
-
```bash
|
|
232
|
-
npm install -g botmux
|
|
233
|
-
# 或:pnpm add -g botmux
|
|
234
|
-
# 或:bun add -g botmux
|
|
235
|
-
```
|
|
61
|
+
## 支持的 CLI / Agent
|
|
236
62
|
|
|
237
|
-
|
|
63
|
+
`bots.json` 里用 `cliId` 一键切换。**20+ 适配器**,覆盖本地 CLI(进程隔离,`tmux attach` 可直连)和 API / 云 Agent(如 Mira、riff——通过 API / 远端接入,非本地进程)。代表项:
|
|
238
64
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
### 2. 创建应用并配置(`botmux setup`)
|
|
242
|
-
|
|
243
|
-
跑 `botmux setup`,全程交互式选择(↑/↓ 选择、输入即搜索、⏎ 确认、Esc 取消;非交互终端自动回退为序号输入):
|
|
244
|
-
|
|
245
|
-
1. **操作**:首次安装直接进入创建流程;已有配置时先选「添加新机器人 / 重新配置 / 编辑现有机器人 / 删除机器人」。
|
|
246
|
-
2. **飞书应用来源**:三选一——
|
|
247
|
-
- **一次扫码创建新应用(推荐)**:可填写机器人名称;留空自动使用 `botmux-0`、`botmux-1`……。首次扫码拿到 Web 登录态后,botmux 自动上传默认图标、创建企业自建应用、读取 AppID/AppSecret,并复用同一登录态继续配置权限与发版;后续添加会先显示当前账号与企业供确认,有效期内免扫码。Web 自动创建不可用或使用 Lark 国际版时,可由用户明确选择 `@larksuiteoapi/node-sdk` 兼容模式;兼容模式可能需要额外扫码,且应用名称由平台决定。
|
|
248
|
-
- **选择已有应用**:复用(或扫码获取)飞书 Web 登录态,列出你在开放平台创建过的应用,选中后**自动读取 AppID/AppSecret**——换机器重配、复用旧应用不用再去后台翻 Secret(仅飞书租户)。
|
|
249
|
-
- **手动输入 AppID/Secret**:见文末折叠的「手动创建应用」。
|
|
250
|
-
3. **选择 CLI**:选本次要接入的 CLI(可搜索,如输入 `cla` 过滤出 Claude)。
|
|
251
|
-
4. **新话题工作目录**:二选一——
|
|
252
|
-
- **固定默认目录(推荐)**:新话题直接在指定目录启动、**不弹卡片**(落 `defaultWorkingDir` 字段,之后可用 `/config` 或 `botmux setup edit` 修改)。想让机器人"直接进目录干活"选这个。
|
|
253
|
-
- **仓库选择卡片**:新话题先弹卡片,从扫描到的 git 仓库里选一个再启动,适合经常在多个仓库间切换。下一问填**仓库扫描根目录**,通常是 git 项目的**父级目录**(如 `~/projects`,支持逗号分隔多个),卡片从该目录**向下**查找 git 仓库(最多 3 层);尽量别填 `~`(要遍历太多文件夹)。
|
|
254
|
-
|
|
255
|
-
应用创建后会直接复用同一份 Web 登录态,自动导入权限、配置 `http://127.0.0.1:9768/callback` 重定向 URL、创建并提交发布版本。Feishu 主路径是**首次最多扫码一次、后续有效期内免扫**;缓存账号/企业会在创建前展示并用同一份 cookie 再次比对,登录态失效时先提示,不会静默弹码。只有用户主动「更换账号」或明确选择 SDK 兼容模式时才会重新扫码。
|
|
256
|
-
|
|
257
|
-
> ✅ **飞书 (feishu.cn) 与 Lark 国际版 (larksuite.com) 均支持**。飞书走单次 Web 扫码;用户明确选择 SDK 兼容模式后,会自动识别并记住 Lark 国际版租户。手动粘 AppID/Secret 时会让你选一次租户类型。每个机器人按所属版本独立连对应域名,同一台机器可同时跑飞书 + Lark 机器人,登录凭证按应用隔离、互不干扰。
|
|
258
|
-
|
|
259
|
-
setup 末尾会用 `tenant_access_token` 校验凭证(通过才落盘 `bots.json`),并把完整权限 JSON 写到 `~/.botmux/lark-scopes.json` 备查。
|
|
260
|
-
|
|
261
|
-
<details>
|
|
262
|
-
<summary><b>脚本化(非 TUI)setup</b> —— 给 coding agent / 自动化脚本用的字段级子命令,不依赖交互问答顺序</summary>
|
|
263
|
-
|
|
264
|
-
```bash
|
|
265
|
-
botmux setup list --json # 列出机器人(secret 脱敏)
|
|
266
|
-
botmux setup add --create-app \
|
|
267
|
-
--app-name 研发助手 \
|
|
268
|
-
--allowed-users alice@example.com # 首次扫码;后续有效登录态下免扫
|
|
269
|
-
botmux setup add --create-app --switch-account \
|
|
270
|
-
--allowed-users alice@example.com # 明确更换账号并覆盖本机登录态
|
|
271
|
-
botmux setup configure botmux-1 # partial 后重跑开放平台配置并上线
|
|
272
|
-
botmux setup add \
|
|
273
|
-
--app-id cli_xxx --app-secret xxx \
|
|
274
|
-
--allowed-users alice@example.com \
|
|
275
|
-
--cli codex --working-dir ~/projects # 添加(写盘前照样校验凭证)
|
|
276
|
-
botmux setup edit botmux-0 --cli claude-code \
|
|
277
|
-
--default-working-dir /data/proj # 按字段修改;值传 - 清空
|
|
278
|
-
botmux setup remove botmux-1 --yes # 非交互删除必须 --yes
|
|
279
|
-
botmux setup help # 完整 flag 列表
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
- `--working-dir` 是仓库选择卡片的扫描根;`--default-working-dir` 是固定默认目录(新话题直接启动、不弹卡),对应 TUI 里工作目录模式的两个选项。
|
|
283
|
-
- `--create-app` 默认先复用并在 stderr 显示已确认的账号/企业;无缓存时首次扫码。`--switch-account` 强制重新扫码并覆盖本机登录态。`--json` 不会在缺少有效缓存时自行弹码,需显式加 `--switch-account`。
|
|
284
|
-
- 成功 JSON 会把 `openPlatform.status` 明确标成 `ready` / `ready_with_warnings` / `manual` / `skipped`。应用和本地配置已创建、但 Feishu 权限/事件/回调等关键配置失败时,命令返回非零退出码与 `partial: true`,不会自动启动新 Bot,并给出可继续执行的 `botmux setup configure <bot>` 命令;会话失效时命令自动带 `--switch-account`,Lark 手工配置则不会给出无效的循环重试。partial Bot 仍保留在 `bots.json` 以便重试,整组 `botmux start/restart` 仍会启动它,建议先 configure 成功再重启 fleet。
|
|
285
|
-
- 已有凭证模式的开放平台自动配置默认跳过,需要时显式加 `--open-platform-auto`。`--compatibility-mode` 必须显式选择,可能需要额外扫码且不支持 `--app-name`。
|
|
286
|
-
- 以前对交互问答「管道喂数字」的脚本请迁移到这些子命令:问答序列一变(本版本就新增了工作目录模式一问),喂数字会静默错位。
|
|
287
|
-
|
|
288
|
-
</details>
|
|
289
|
-
|
|
290
|
-
### 3. 启动
|
|
291
|
-
|
|
292
|
-
```bash
|
|
293
|
-
botmux start
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
> start 前再校验一次凭证;权限未配齐不会阻塞 daemon,只 WARN。如果之后需要确认事件订阅,飞书后台会要求 daemon 已在跑才能识别长连接。
|
|
297
|
-
|
|
298
|
-
### 4. 建群开聊
|
|
299
|
-
|
|
300
|
-
1. 飞书中创建一个**话题群**
|
|
301
|
-
2. 进入群设置 → 群机器人 → 添加刚创建的机器人
|
|
302
|
-
3. 在群里发消息,机器人自动响应
|
|
303
|
-
|
|
304
|
-

|
|
305
|
-
|
|
306
|
-
### 5. 开机自启(推荐)
|
|
307
|
-
|
|
308
|
-
确认机器人能正常收发消息之后,跑一次:
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
botmux autostart enable
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
<details>
|
|
315
|
-
<summary><b>手动配置开放平台:建应用 / 权限 / 重定向 / 发版(备用)</b> —— 默认由 botmux setup 使用同一次登录态自动完成,仅在自动配置失败、或想手动核对时展开</summary>
|
|
316
|
-
|
|
317
|
-
<br>
|
|
318
|
-
|
|
319
|
-
**手动创建应用**:去 [飞书开放平台](https://open.larkoffice.com/app) 建「企业自建应用」,在「凭证与基础信息」复制 **App ID / App Secret**,在 `botmux setup` 的「飞书应用来源」步骤选「手动输入 AppID/Secret」粘贴回来。
|
|
320
|
-
|
|
321
|
-

|
|
322
|
-
|
|
323
|
-
**添加权限**:按 terminal 提示的一键复制命令把权限 JSON 复制到剪贴板,进入「权限管理」→「批量导入/导出权限」粘贴 → 提交审批。可用性范围选「仅自己可见」会自动通过:
|
|
324
|
-
|
|
325
|
-

|
|
326
|
-
|
|
327
|
-
完整 JSON 已经写到 `~/.botmux/lark-scopes.json`,源仓库版本在 [src/setup/lark-scopes.json](src/setup/lark-scopes.json)(与本仓库内部 wiki 文档同步,覆盖 tenant + user 双套域 ≈ 290 项)。
|
|
328
|
-
|
|
329
|
-
```bash
|
|
330
|
-
# macOS 本地
|
|
331
|
-
cat ~/.botmux/lark-scopes.json | pbcopy
|
|
332
|
-
# Linux 桌面 (本地有 X 服务器)
|
|
333
|
-
cat ~/.botmux/lark-scopes.json | xclip -selection clipboard
|
|
334
|
-
# SSH / 无 DISPLAY:直接 cat, 在本地 terminal 鼠标选中即写本地剪贴板
|
|
335
|
-
cat ~/.botmux/lark-scopes.json
|
|
336
|
-
# SSH 上 OSC 52 直接写本地剪贴板 (iTerm2 / kitty / WezTerm / Alacritty / tmux 1.5+)
|
|
337
|
-
base64 -w0 < ~/.botmux/lark-scopes.json | awk 'BEGIN{printf "\033]52;c;"}{printf "%s",$0}END{printf "\a"}'
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
**添加重定向 URL(按需)**:如果之后要在飞书里 `/login` 让 botmux 以你的身份调云文档/日历/Wiki 等 API,进入「安全设置」→「重定向 URL」填入 `http://127.0.0.1:9768/callback`。只用 bot 收发消息的话这一步可以跳过。
|
|
341
|
-
|
|
342
|
-
**发版**:进入「版本管理与发布」,点击「创建版本」并发布。可用性范围选择「仅自己可见」即可自动通过审核。
|
|
343
|
-
|
|
344
|
-

|
|
345
|
-
|
|
346
|
-
</details>
|
|
347
|
-
|
|
348
|
-
<details>
|
|
349
|
-
<summary><b>机器人收不到消息时的自查</b></summary>
|
|
350
|
-
|
|
351
|
-
<br>
|
|
352
|
-
|
|
353
|
-
botmux 会自动开启机器人能力、长连接事件模式并订阅基础事件,正常情况下不用动。如果按上面步骤走完 bot **完全收不到任何消息**(连私聊都不回),分别确认这两项:
|
|
354
|
-
|
|
355
|
-
- **事件订阅**:开放平台 → 你的应用 → 事件与回调 → 应当订阅 `im.message.receive_v1` + `card.action.trigger`(默认已订阅,如缺失就手动添加)。订阅方式必须是「使用长连接接收事件」(WebSocket),且 botmux daemon 已经在跑。
|
|
356
|
-
- **机器人能力**:开放平台 → 你的应用 → 应用功能 → 机器人 应当已开通(默认开通),名字/头像可以改。
|
|
357
|
-
|
|
358
|
-
确认后重启 daemon:`botmux restart`。
|
|
359
|
-
|
|
360
|
-
</details>
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
## 使用指南
|
|
365
|
-
|
|
366
|
-
### 使用流程
|
|
367
|
-
|
|
368
|
-
1. 在飞书话题群中发送消息创建新话题;或在普通群中发 `/t <prompt>` 主动开新话题;也可在 Dashboard 为单个 bot 开启普通群回复开话题
|
|
369
|
-
2. 机器人弹出仓库选择卡片 — 选择项目或点击「直接开启会话」(被 `/oncall bind` 绑过的 bot 会跳过此步;绑定按 bot 计)
|
|
370
|
-
3. CLI 在所选目录下启动
|
|
371
|
-
4. 话题中出现实时流式卡片,展示终端输出并支持 Markdown 渲染
|
|
372
|
-
5. 每次回复创建新的流式卡片,上一轮卡片冻结在最后状态
|
|
373
|
-
6. 点击卡片上的「🔑 获取操作链接」通过私聊获取可写终端链接
|
|
374
|
-
7. CLI 通过 `botmux send` 命令在话题中回复(由 `botmux-send` Skill 自动引导)
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
### 多步 Workflow(v3)
|
|
379
|
-
|
|
380
|
-
- 直接用自然语言说“调研三家竞品并出报告”“把 A/B/C 串起来自动做”,bot 会先轻确认是否切换到 Workflow,再澄清、编排并执行有界 DAG。
|
|
381
|
-
- 明确要编排时可发 `/workflow <目标>`;查看/取消 run 用 `/workflow list|show|cancel`。
|
|
382
|
-
- 成功 run 可用 `/workflow save last 周报` 固化;之后 `/workflow run 周报 region=sg` 复用,缺少的必填参数会单独补问。
|
|
383
|
-
- v2 runtime 已下线。旧定义与历史 run 只保留 `botmux template migrate-v3` / `archive-runs` 离线迁移归档入口。
|
|
384
|
-
|
|
385
|
-
---
|
|
386
|
-
|
|
387
|
-
### Bot 级环境变量(接入 GLM / 第三方服务商)
|
|
388
|
-
|
|
389
|
-
每个 `bots.json` 条目都可以配置独立的 `env` 对象,注入到**该 bot 的 CLI 进程**。典型用途:让某个 bot 跑 GLM Coding Plan / 第三方 Anthropic·OpenAI 兼容服务商,另一个 bot 仍跑官方 Claude——只需给前者填上服务商的端点和 key:
|
|
390
|
-
|
|
391
|
-
```json
|
|
392
|
-
{
|
|
393
|
-
"cliId": "claude-code",
|
|
394
|
-
"workingDir": "~/projects",
|
|
395
|
-
"env": {
|
|
396
|
-
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
|
|
397
|
-
"ANTHROPIC_AUTH_TOKEN": "你的 GLM Coding Plan key"
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
> GLM 国内站把 `ANTHROPIC_BASE_URL` 换成 `https://open.bigmodel.cn/api/anthropic`。给 Codex 这类 OpenAI 协议 CLI 接入时,填 `OPENAI_BASE_URL` / `OPENAI_API_KEY`(指向服务商的 OpenAI 兼容端点)而非 `ANTHROPIC_*`。也可用于设 `HTTPS_PROXY`、CLI 专属开关等。
|
|
403
|
-
|
|
404
|
-
要点:
|
|
405
|
-
|
|
406
|
-
- `env` 只接受合法环境变量名,值支持字符串、数字、布尔值;`BOTMUX_` / `LARK_APP_` 等 botmux 保留键会被忽略(防止串改会话路由/凭证)。
|
|
407
|
-
- 按**会话**注入到 CLI 进程(下个新会话起效)。tmux/zellij 后端经每个 pane 的 `/usr/bin/env` 注入,**不写入共享 server 全局 env**,所以一个 bot 的服务商配置不会串到别的 bot。
|
|
408
|
-
- 也可在 dashboard 的「机器人默认设置 → 环境变量」里填写(owner 鉴权),或用 `/config set env '{...}'`。
|
|
409
|
-
- 不要把它当成安全密钥库:值以明文存在 `bots.json` 与进程环境中,可能被本机诊断工具看到。
|
|
410
|
-
|
|
411
|
-
---
|
|
65
|
+
`claude-code` · `codex` · `gemini` · `cursor` · `opencode` · `antigravity` · `copilot` · `grok` · `kimi` · `kiro-cli` · `aiden` · `coco`(TRAE) · `hermes` · `mira` · `riff`(云 Agent) …
|
|
412
66
|
|
|
413
|
-
|
|
67
|
+
当前完整 `cliId` 以 [`src/adapters/cli/registry.ts`](https://github.com/deepcoldy/botmux/blob/master/src/adapters/cli/registry.ts) 为准;各 CLI 的配置与套 wrapper / 网关方法见 [多 CLI 适配器](https://deepcoldy.github.io/botmux/adapters)。
|
|
414
68
|
|
|
415
|
-
|
|
69
|
+
## 设计理念:直接桥接 CLI,不做 SDK wrapper
|
|
416
70
|
|
|
417
|
-
|
|
71
|
+
botmux 不重新实现记忆、上下文管理、工具调用、权限体系——**多数 CLI 原生能力无需 botmux 重造,CLI 升级通常直接受益**(接口 / 参数 / 输出格式 / resume 语义有变时,adapter 仍可能要跟进)。用户照常发人话,daemon 在后台把上下文封装成结构化 prompt 再喂给 CLI。基于 Agent SDK 的方案则相反:能力取决于 SDK 暴露的接口面与你自己的集成实现。
|
|
418
72
|
|
|
419
|
-
|
|
420
|
-
|------|------|
|
|
421
|
-
| 斜杠命令 / CLI 命令 / 会话内子命令 | [命令参考](https://deepcoldy.github.io/botmux/slash-commands) |
|
|
422
|
-
| `bots.json` 字段 / 环境变量 / 文件位置 | [配置参考](https://deepcoldy.github.io/botmux/bots-json) |
|
|
423
|
-
| 多 CLI 适配器(含 wrapper / 网关接入) | [适配器](https://deepcoldy.github.io/botmux/adapters) |
|
|
424
|
-
| 按场景的最佳实践(Oncall / 报警运维 / 个人研发 / 多人协作) | [最佳实践](https://deepcoldy.github.io/botmux/best-practices) |
|
|
425
|
-
| 常见踩坑 / FAQ 排错 | [踩坑](https://deepcoldy.github.io/botmux/pitfalls) · [FAQ](https://deepcoldy.github.io/botmux/faq) |
|
|
426
|
-
| 功能详解:定时任务 / Oncall / Dashboard / 多机器人协作 / 会话接力 | [定时](https://deepcoldy.github.io/botmux/schedule) · [Oncall](https://deepcoldy.github.io/botmux/oncall) · [Dashboard](https://deepcoldy.github.io/botmux/dashboard) · [多 bot](https://deepcoldy.github.io/botmux/multi-bot) · [接力](https://deepcoldy.github.io/botmux/relay) |
|
|
73
|
+
下表只对比**可核验的集成边界**,不对其它方案下「必然缺失」的结论:
|
|
427
74
|
|
|
428
|
-
|
|
75
|
+
| 集成边界 | botmux | 基于 Agent SDK 的方案 |
|
|
76
|
+
|------|--------|----------------------|
|
|
77
|
+
| 桥接对象 | 完整 CLI 进程(含 hooks / memory / plan mode / MCP / `/` 命令等 CLI 自带运行时) | SDK 暴露的接口面 |
|
|
78
|
+
| CLI 升级 | 多数直接受益;接口 / resume 有变时 adapter 跟进 | 取决于 SDK 版本与集成实现 |
|
|
79
|
+
| 记忆 / 上下文 | 直接复用 CLI 内建 | 取决于 SDK / 自建 |
|
|
80
|
+
| 多 CLI / Agent | 20+ 适配器一键切换 | 取决于 SDK 覆盖面 |
|
|
81
|
+
| 多机器人 | 同群多 bot @mention 路由 | 取决于实现 |
|
|
82
|
+
| 终端直连 | 本地 CLI 可 `tmux attach` 进真进程 | 取决于实现 |
|
|
429
83
|
|
|
430
|
-
|
|
84
|
+
## 文档 · 社区 · 贡献
|
|
431
85
|
|
|
432
|
-
|
|
86
|
+
- 📖 **完整文档**(命令 / 配置 / 最佳实践 / 排错):**<https://deepcoldy.github.io/botmux/>**
|
|
87
|
+
- ✨ **效果展示**(图文 + 视频演示):[《5 分钟创建一个真正好用的飞书助理》](https://bytedance.larkoffice.com/wiki/UBOXwH01CixfxfkqxUpcKgvQnsg)
|
|
88
|
+
- ❓ **常见问题 / 排错**:[FAQ](https://deepcoldy.github.io/botmux/faq) · [常见踩坑](https://deepcoldy.github.io/botmux/pitfalls)
|
|
89
|
+
- 💬 **交流群**:[关于 & 资源](https://deepcoldy.github.io/botmux/about) 页有内部 / 外部「Botmux 交流群」的扫码入群入口。
|
|
90
|
+
- 🤝 **贡献**:欢迎 issue / PR。新增适配器见 [多 CLI 适配器](https://deepcoldy.github.io/botmux/adapters)。
|
|
91
|
+
- 📄 **License**:[MIT](LICENSE)
|
|
433
92
|
|
|
434
|
-
|
|
93
|
+
<p align="center">好用的话,顺手点个 ⭐ Star 吧 → <a href="https://github.com/deepcoldy/botmux">deepcoldy/botmux</a></p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
60a584b9ef0c7f0360b50a9fb9277167b4a6f3b3c20e329c225dab251f7e7e55
|
|
@@ -39,6 +39,12 @@ export interface ClaudeResumeTargetSyncResult {
|
|
|
39
39
|
* directory. Copies are retained in older project directories because they are
|
|
40
40
|
* useful native Claude history; choosing the newest candidate on every resume
|
|
41
41
|
* prevents a later `/cd` back to an earlier cwd from reviving a stale branch.
|
|
42
|
+
*
|
|
43
|
+
* The Claude data root is writable by the sandboxed CLI while this helper runs
|
|
44
|
+
* in the unsandboxed worker. Treat every scanned leaf as hostile: UUID-gate the
|
|
45
|
+
* filename, reject symlink/non-regular source and target entries, enforce
|
|
46
|
+
* realpath containment, and atomically replace the target via a private temp
|
|
47
|
+
* inode so copy cannot read or write through a child-planted symlink.
|
|
42
48
|
*/
|
|
43
49
|
export declare function syncClaudeResumeTargetToCwd(sessionId: string, cwd: string, dataDir?: string): ClaudeResumeTargetSyncResult;
|
|
44
50
|
/** Returns the absolute path to Claude Code's per-process session state file.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAqB/D;;;;yEAIyE;AACzE,eAAO,MAAM,uBAAuB,QAA6B,CAAC;AAElE;;6EAE6E;AAC7E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAiC,GAC1C,MAAM,EAAE,CAmBV;AAED;;;gEAGgE;AAChE,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAgC,GAAG,MAAM,CAG3H;AAED;;;;6EAI6E;AAC7E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAgC,GAAG,MAAM,CAG/F;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AA0KD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAgC,GACxC,4BAA4B,CA0D9B;AAyDD;;;;;;;;;wEASwE;AACxE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAgC,GAAG,MAAM,CAEjG;AAoBD;;;;;0CAK0C;AAC1C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,MAAgC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoC9J;AAED;;;;;;;;;;;;;;oDAcoD;AACpD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAgC,GAAG,MAAM,EAAE,CAmCzG;AAoKD;;;;;2EAK2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;kFAC8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;kFAE8E;IAC9E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;iCAE6B;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD;;oDAEgD;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,0FAA0F;IAC1F,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAezE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CA8alG;AAED,eAAO,MAAM,MAAM,gCAA0B,CAAC"}
|