botmux 3.5.0 → 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/backend/sandbox.d.ts +99 -279
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +424 -826
- package/dist/adapters/backend/sandbox.js.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +9 -5
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts +244 -0
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -0
- package/dist/adapters/cli/fs-policy.js +537 -0
- package/dist/adapters/cli/fs-policy.js.map +1 -0
- 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/read-isolation.d.ts +14 -200
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +18 -477
- package/dist/adapters/cli/read-isolation.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 +54 -23
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +91 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +297 -104
- 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 +53 -73
- 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 +356 -84
- 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 +20 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/plugins/mcp/gateway-installer.d.ts.map +1 -1
- package/dist/core/plugins/mcp/gateway-installer.js +14 -2
- package/dist/core/plugins/mcp/gateway-installer.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-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +90 -60
- package/dist/core/session-manager.js.map +1 -1
- 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 +44 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +333 -38
- 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 +526 -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 +8 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +10 -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 +16 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +288 -7
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +10 -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 +130 -22
- 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 +78 -67
- 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-QCPPKCX3.js → chunk-JMRGZQDB.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-EJDYUINZ.js → chunk-NP4JUBGS.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-WXPMNEYV.js → chunk-P327LXOT.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-SNKATZWK.js +49 -0
- package/dist/dashboard-web/chunks/connectors-page-DOY4J3ZL.js +1 -0
- package/dist/dashboard-web/chunks/{groups-page-3P4TLUMF.js → groups-page-74TS2DIH.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-TDCZV56A.js → insights-page-AYCO65JC.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-QWCWL3SX.js → monitor-room-YKYLTSAN.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-IOWFSNVC.js → monitoring-page-QBIUNRBR.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-5AUPEHZP.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-WJVB52ET.js → roles-page-U4BTOQ7F.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-RVRWHP4V.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-7YT5TIX5.js → skills-page-SYOIGGXH.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-NJZKTU7A.js → team-federation-page-RMBLASTW.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-NQ73UA2Q.js → v3-page-XJXKKJRN.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-DSM3MDMN.js → whiteboards-page-K3YVSTHJ.js} +1 -1
- package/dist/dashboard-web/style.css +571 -3
- package/dist/dashboard.js +238 -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 +27 -1
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +6 -19
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +6 -19
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +1 -14
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +1 -35
- package/dist/im/lark/card-builder.js.map +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 +161 -44
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +47 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +127 -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 +48 -3
- 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/sandbox-migration.d.ts +14 -0
- package/dist/services/sandbox-migration.d.ts.map +1 -0
- package/dist/services/sandbox-migration.js +85 -0
- package/dist/services/sandbox-migration.js.map +1 -0
- package/dist/services/sandbox-store.d.ts +28 -0
- package/dist/services/sandbox-store.d.ts.map +1 -1
- package/dist/services/sandbox-store.js +82 -0
- package/dist/services/sandbox-store.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 +53 -4
- 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 +4 -3
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +16 -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 +1010 -669
- package/dist/worker.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +56 -0
- package/dist/workflows/events/payloads.d.ts.map +1 -1
- package/dist/workflows/events/payloads.js +9 -0
- package/dist/workflows/events/payloads.js.map +1 -1
- package/dist/workflows/events/schema.d.ts +86 -0
- package/dist/workflows/events/schema.d.ts.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/shared/sandbox-policy.d.ts +10 -1
- package/dist/workflows/shared/sandbox-policy.d.ts.map +1 -1
- package/dist/workflows/shared/sandbox-policy.js +12 -0
- package/dist/workflows/shared/sandbox-policy.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/bot-resolve.d.ts.map +1 -1
- package/dist/workflows/v3/bot-resolve.js +36 -0
- package/dist/workflows/v3/bot-resolve.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/contract.d.ts +8 -0
- package/dist/workflows/v3/contract.d.ts.map +1 -1
- package/dist/workflows/v3/contract.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-O376WSER.js +0 -5
- package/dist/dashboard-web/chunks/chunk-H7P5UV4W.js +0 -49
- package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-IR54AOAI.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-QJMI6NLW.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-KWLGBX6G.js +0 -3
- package/dist/dashboard-web/chunks/settings-page-TNZEPC7V.js +0 -2
- package/dist/services/sandbox-land.d.ts +0 -45
- package/dist/services/sandbox-land.d.ts.map +0 -1
- package/dist/services/sandbox-land.js +0 -394
- package/dist/services/sandbox-land.js.map +0 -1
- 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
|
@@ -273,7 +273,7 @@ function BotDefaultsCard(props) {
|
|
|
273
273
|
return (_jsxs("article", { className: "bd-card bd-profile", "data-appid": bot.larkAppId, children: [_jsxs("header", { className: "bd-profile-head", children: [_jsx(Html, { html: botAvatarHtml({ name, larkAppId: bot.larkAppId }) }), _jsxs("div", { className: "bd-profile-id", children: [_jsx("strong", { children: name }), _jsx("code", { children: bot.larkAppId })] })] }), _jsxs("p", { className: "hint-warn-inline", children: ["\u67E5\u8BE2\u5931\u8D25\uFF1A", bot.error] })] }));
|
|
274
274
|
}
|
|
275
275
|
const def = bot.defaultOncall ?? { enabled: false, workingDir: '', since: 0 };
|
|
276
|
-
return (_jsxs("article", { className: "bd-card bd-profile", "data-appid": bot.larkAppId, children: [_jsxs("header", { className: "bd-profile-head", children: [_jsx(BotAvatarControl, { bot: bot, name: name, patchBot: patchBot }), _jsx("div", { className: "bd-profile-main", children: _jsx(BotProfileIdentity, { bot: bot, cli: cli, patchBot: patchBot, meta: (_jsxs(_Fragment, { children: [_jsxs("small", { className: "bd-meta-ok", children: ["\u25CF ", tr('botDefaults.metaOnline')] }), _jsxs("small", { "data-oncall-since": true, children: [tr('botDefaults.lastEnabled'), ": ", fmtSince(def.since ?? 0)] }), _jsx("small", { children: tr('botDefaults.autobound', { count: bot.autoboundChatCount ?? 0 }) })] })) }) })] }), _jsxs("div", { className: "bd-body bd-grid", children: [_jsxs("div", { className: "bd-column", children: [_jsxs("section", { className: "bd-tile", children: [_jsx(BotAgentSection, { bot: bot, sessionFallback: cli, cliState: cliState, patchBot: patchBot }), _jsx(WorkingDirSection, { bot: bot, patchBot: patchBot, putCardPref: putCardPref }), bot.cliId !== 'riff' && _jsx(SandboxSection, { bot: bot, patchBot: patchBot }), bot.cliId !== 'riff' && _jsx(BackendTypeSection, { bot: bot, patchBot: patchBot })] }), _jsx("section", { className: "bd-tile", children: _jsx(RuntimeEnvironmentSection, { bot: bot, patchBot: patchBot }) }), _jsx("section", { className: "bd-tile", children: _jsx(GrantSection, { bot: bot, patchBot: patchBot }) })] }), _jsxs("div", { className: "bd-column", children: [_jsxs("section", { className: "bd-tile", children: [_jsx(SessionModeSection, { bot: bot, patchBot: patchBot, putCardPref: putCardPref }), _jsx(SubstituteModeSection, { bot: bot, patchBot: patchBot }), _jsx(CrossBotSection, { bot: bot, putCardPref: putCardPref }), _jsx(SessionCapSection, { bot: bot, patchBot: patchBot })] }), _jsxs("section", { className: "bd-tile", children: [_jsx(CardBehaviorSection, { bot: bot, putCardPref: putCardPref }), _jsx(CodexAppDisplaySection, { bot: bot, putCardPref: putCardPref }), _jsx(SummaryTriggerSection, { bot: bot, patchBot: patchBot }), _jsx(BrandSection, { bot: bot, patchBot: patchBot })] }), _jsx("section", { className: "bd-tile", children: _jsx(RoleSection, { bot: bot, patchBot: patchBot }) })] })] })] }));
|
|
276
|
+
return (_jsxs("article", { className: "bd-card bd-profile", "data-appid": bot.larkAppId, children: [_jsxs("header", { className: "bd-profile-head", children: [_jsx(BotAvatarControl, { bot: bot, name: name, patchBot: patchBot }), _jsx("div", { className: "bd-profile-main", children: _jsx(BotProfileIdentity, { bot: bot, cli: cli, patchBot: patchBot, meta: (_jsxs(_Fragment, { children: [_jsxs("small", { className: "bd-meta-ok", children: ["\u25CF ", tr('botDefaults.metaOnline')] }), _jsxs("small", { "data-oncall-since": true, children: [tr('botDefaults.lastEnabled'), ": ", fmtSince(def.since ?? 0)] }), _jsx("small", { children: tr('botDefaults.autobound', { count: bot.autoboundChatCount ?? 0 }) })] })) }) })] }), _jsxs("div", { className: "bd-body bd-grid", children: [_jsxs("div", { className: "bd-column", children: [_jsxs("section", { className: "bd-tile", children: [_jsx(BotAgentSection, { bot: bot, sessionFallback: cli, cliState: cliState, patchBot: patchBot }), _jsx(WorkingDirSection, { bot: bot, patchBot: patchBot, putCardPref: putCardPref }), bot.cliId !== 'riff' && _jsx(SandboxSection, { bot: bot, patchBot: patchBot }), bot.cliId !== 'riff' && bot.sandbox === true && _jsx(SandboxPathsSection, { bot: bot, patchBot: patchBot }), bot.cliId !== 'riff' && _jsx(BackendTypeSection, { bot: bot, patchBot: patchBot })] }), _jsx("section", { className: "bd-tile", children: _jsx(RuntimeEnvironmentSection, { bot: bot, patchBot: patchBot }) }), _jsx("section", { className: "bd-tile", children: _jsx(GrantSection, { bot: bot, patchBot: patchBot }) }), _jsx("section", { className: "bd-tile", children: _jsx(SlashCommandPermissionsSection, { bot: bot, patchBot: patchBot }) })] }), _jsxs("div", { className: "bd-column", children: [_jsxs("section", { className: "bd-tile", children: [_jsx(SessionModeSection, { bot: bot, patchBot: patchBot, putCardPref: putCardPref }), _jsx(SubstituteModeSection, { bot: bot, patchBot: patchBot }), _jsx(CrossBotSection, { bot: bot, putCardPref: putCardPref }), _jsx(SessionCapSection, { bot: bot, patchBot: patchBot, putCardPref: putCardPref })] }), _jsxs("section", { className: "bd-tile", children: [_jsx(CardBehaviorSection, { bot: bot, putCardPref: putCardPref }), _jsx(CodexAppDisplaySection, { bot: bot, putCardPref: putCardPref }), _jsx(SummaryTriggerSection, { bot: bot, patchBot: patchBot }), _jsx(BrandSection, { bot: bot, patchBot: patchBot })] }), _jsx("section", { className: "bd-tile", children: _jsx(RoleSection, { bot: bot, patchBot: patchBot }) })] })] })] }));
|
|
277
277
|
}
|
|
278
278
|
function RuntimeEnvironmentSection(props) {
|
|
279
279
|
const tr = useT();
|
|
@@ -833,14 +833,204 @@ function SandboxSection(props) {
|
|
|
833
833
|
setBusy(false);
|
|
834
834
|
}
|
|
835
835
|
}
|
|
836
|
-
//
|
|
837
|
-
//
|
|
838
|
-
//
|
|
839
|
-
// (
|
|
840
|
-
//
|
|
836
|
+
// The unified fs-policy always provides deny-by-default file read/write
|
|
837
|
+
// isolation. This capability line is narrower: whether the CLI's global data
|
|
838
|
+
// root can additionally be redirected into this bot's private BOT_HOME
|
|
839
|
+
// (claude/codex, no wrapper), keeping CLI credentials/config/history separate
|
|
840
|
+
// from sibling bots. Keep that distinction explicit in the UI copy.
|
|
841
841
|
const readIsoSupported = bot.readIsolationSupported === true;
|
|
842
842
|
return (_jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('botDefaults.sectionSandbox') }), _jsx(ToggleRow, { checked: enabled, disabled: busy, dataAction: "toggle-sandbox", title: tr('botDefaults.sandboxToggle'), help: tr('botDefaults.sandboxHelp'), onChange: checked => void toggle(checked) }), _jsx("p", { className: "bd-section-note", "data-read-iso-capability": readIsoSupported ? 'yes' : 'no', children: readIsoSupported ? `+ ${tr('botDefaults.sandboxReadIsoOn')}` : tr('botDefaults.sandboxReadIsoOff') }), _jsx("div", { className: "actions", children: _jsx(StatusSpan, { status: status, attr: { 'data-sandbox-status': '' } }) })] }));
|
|
843
843
|
}
|
|
844
|
+
/** Restrictiveness ranking — mirrors fs-policy.ts RESTRICTIVENESS so a same-path
|
|
845
|
+
* cross-tier conflict resolves the SAME way the sandbox will (deny > ro > rw). */
|
|
846
|
+
const SBX_RESTRICTIVENESS = { readWrite: 0, readOnly: 1, deny: 2 };
|
|
847
|
+
/** Effective access for `path` under the three tiers: DEEPEST (longest-prefix)
|
|
848
|
+
* matching rule wins; at equal depth (same path across tiers) the MORE
|
|
849
|
+
* RESTRICTIVE tier wins — mirrors fs-policy.ts accessForPath + mergeFsRules so
|
|
850
|
+
* the UI's live labels + path tester agree with what the sandbox enforces.
|
|
851
|
+
* `home` expands a leading `~` the same way the worker does before matching, so
|
|
852
|
+
* `~`-relative entries line up with absolute tree nodes. */
|
|
853
|
+
export function effectiveAccess(tiers, path, home) {
|
|
854
|
+
const expand = (p) => (p === '~' || p.startsWith('~/')) ? home.replace(/\/+$/, '') + p.slice(1) : p;
|
|
855
|
+
const norm = (p) => expand(p).replace(/\/+$/, '') || '/';
|
|
856
|
+
const target = norm(path);
|
|
857
|
+
const covers = (parent, child) => {
|
|
858
|
+
const a = norm(parent), b = norm(child);
|
|
859
|
+
return a === b || b.startsWith(a === '/' ? '/' : a + '/');
|
|
860
|
+
};
|
|
861
|
+
const depth = (p) => norm(p) === '/' ? 0 : norm(p).split('/').filter(Boolean).length;
|
|
862
|
+
let best;
|
|
863
|
+
const consider = (access, rule) => {
|
|
864
|
+
if (!covers(rule, target))
|
|
865
|
+
return;
|
|
866
|
+
const d = depth(rule);
|
|
867
|
+
if (!best || d > best.ruleDepth
|
|
868
|
+
|| (d === best.ruleDepth && SBX_RESTRICTIVENESS[access] > SBX_RESTRICTIVENESS[best.access])) {
|
|
869
|
+
best = { access, ruleDepth: d, rule };
|
|
870
|
+
}
|
|
871
|
+
};
|
|
872
|
+
for (const p of tiers.readWrite)
|
|
873
|
+
consider('readWrite', p);
|
|
874
|
+
for (const p of tiers.readOnly)
|
|
875
|
+
consider('readOnly', p);
|
|
876
|
+
for (const p of tiers.deny)
|
|
877
|
+
consider('deny', p);
|
|
878
|
+
return best ? { access: best.access, rule: best.rule } : { access: 'none' };
|
|
879
|
+
}
|
|
880
|
+
function emptyTiers() { return { readWrite: [], readOnly: [], deny: [] }; }
|
|
881
|
+
function normTiers(t) {
|
|
882
|
+
if (!t)
|
|
883
|
+
return emptyTiers();
|
|
884
|
+
return { readWrite: [...(t.readWrite ?? [])], readOnly: [...(t.readOnly ?? [])], deny: [...(t.deny ?? [])] };
|
|
885
|
+
}
|
|
886
|
+
function tiersEqual(a, b) {
|
|
887
|
+
const k = (x) => [...x].sort().join('\n');
|
|
888
|
+
return k(a.readWrite) === k(b.readWrite) && k(a.readOnly) === k(b.readOnly) && k(a.deny) === k(b.deny);
|
|
889
|
+
}
|
|
890
|
+
/** Serialize tiers to the copy-paste text form (one path per line, tier-tagged). */
|
|
891
|
+
function tiersToText(t) {
|
|
892
|
+
const lines = [];
|
|
893
|
+
for (const p of t.readWrite)
|
|
894
|
+
lines.push(`rw ${p}`);
|
|
895
|
+
for (const p of t.readOnly)
|
|
896
|
+
lines.push(`ro ${p}`);
|
|
897
|
+
for (const p of t.deny)
|
|
898
|
+
lines.push(`deny ${p}`);
|
|
899
|
+
return lines.join('\n');
|
|
900
|
+
}
|
|
901
|
+
/** Parse the copy-paste text form back into tiers. Tolerates `rw`/`readWrite`,
|
|
902
|
+
* `ro`/`readOnly`, `deny`/`-`; blank lines and `#` comments are ignored. */
|
|
903
|
+
function textToTiers(text) {
|
|
904
|
+
const t = emptyTiers();
|
|
905
|
+
for (const raw of text.split('\n')) {
|
|
906
|
+
const line = raw.trim();
|
|
907
|
+
if (!line || line.startsWith('#'))
|
|
908
|
+
continue;
|
|
909
|
+
const m = /^(\S+)\s+(.+)$/.exec(line);
|
|
910
|
+
if (!m)
|
|
911
|
+
continue;
|
|
912
|
+
const tag = m[1].toLowerCase();
|
|
913
|
+
const path = m[2].trim();
|
|
914
|
+
if (tag === 'rw' || tag === 'readwrite' || tag === 'rw:')
|
|
915
|
+
t.readWrite.push(path);
|
|
916
|
+
else if (tag === 'ro' || tag === 'readonly' || tag === 'ro:')
|
|
917
|
+
t.readOnly.push(path);
|
|
918
|
+
else if (tag === 'deny' || tag === '-' || tag === 'deny:')
|
|
919
|
+
t.deny.push(path);
|
|
920
|
+
}
|
|
921
|
+
return t;
|
|
922
|
+
}
|
|
923
|
+
function SandboxPathsSection(props) {
|
|
924
|
+
const tr = useT();
|
|
925
|
+
const { bot, patchBot } = props;
|
|
926
|
+
const [tiers, setTiers] = useState(() => normTiers(bot.sandboxPaths));
|
|
927
|
+
const [text, setText] = useState(() => tiersToText(normTiers(bot.sandboxPaths)));
|
|
928
|
+
const [textMode, setTextMode] = useState(false);
|
|
929
|
+
const [status, setStatus] = useState(null);
|
|
930
|
+
const [busy, setBusy] = useState(false);
|
|
931
|
+
const [testPath, setTestPath] = useState('');
|
|
932
|
+
// Lazy directory tree: path → child dir list (undefined = not yet loaded).
|
|
933
|
+
const [children, setChildren] = useState({});
|
|
934
|
+
const [expanded, setExpanded] = useState(new Set());
|
|
935
|
+
const [roots, setRoots] = useState([]);
|
|
936
|
+
// Canonical $HOME (first fs-list root) — used to expand `~` in tiers/tester
|
|
937
|
+
// the SAME way the worker does, so `~`-relative entries match absolute tree
|
|
938
|
+
// nodes and effective-access labels are accurate.
|
|
939
|
+
const [homeRoot, setHomeRoot] = useState('~');
|
|
940
|
+
const saved = useMemo(() => normTiers(bot.sandboxPaths), [bot.sandboxPaths]);
|
|
941
|
+
useEffect(() => { setTiers(normTiers(bot.sandboxPaths)); setText(tiersToText(normTiers(bot.sandboxPaths))); }, [bot.sandboxPaths]);
|
|
942
|
+
const dirty = !tiersEqual(tiers, saved);
|
|
943
|
+
const loadDir = useCallback(async (path) => {
|
|
944
|
+
try {
|
|
945
|
+
const q = path ? `?path=${encodeURIComponent(path)}` : '';
|
|
946
|
+
const r = await fetch(`/api/fs/list${q}`);
|
|
947
|
+
const j = await r.json();
|
|
948
|
+
if (!j.ok)
|
|
949
|
+
return;
|
|
950
|
+
if (!path) {
|
|
951
|
+
setRoots(j.entries.map((e) => ({ name: e.name, path: e.path })));
|
|
952
|
+
// Backend returns canonical $HOME explicitly (realpath'd) so `~` expansion
|
|
953
|
+
// here matches the realpath'd child nodes + the worker's sandbox binds.
|
|
954
|
+
if (typeof j.home === 'string' && j.home.startsWith('/'))
|
|
955
|
+
setHomeRoot(j.home);
|
|
956
|
+
}
|
|
957
|
+
else
|
|
958
|
+
setChildren(prev => ({ ...prev, [path]: j.entries.map((e) => ({ name: e.name, path: e.path })) }));
|
|
959
|
+
}
|
|
960
|
+
catch { /* listing is best-effort; manual/text entry still works */ }
|
|
961
|
+
}, []);
|
|
962
|
+
useEffect(() => { if (!textMode && roots.length === 0)
|
|
963
|
+
void loadDir(''); }, [textMode, roots.length, loadDir]);
|
|
964
|
+
// The tier a path is EXPLICITLY set to (undefined = inherits from ancestor).
|
|
965
|
+
const explicitTier = useCallback((path) => {
|
|
966
|
+
const n = path.replace(/\/+$/, '') || '/';
|
|
967
|
+
if (tiers.readWrite.some(p => (p.replace(/\/+$/, '') || '/') === n))
|
|
968
|
+
return 'readWrite';
|
|
969
|
+
if (tiers.readOnly.some(p => (p.replace(/\/+$/, '') || '/') === n))
|
|
970
|
+
return 'readOnly';
|
|
971
|
+
if (tiers.deny.some(p => (p.replace(/\/+$/, '') || '/') === n))
|
|
972
|
+
return 'deny';
|
|
973
|
+
return undefined;
|
|
974
|
+
}, [tiers]);
|
|
975
|
+
// Cycle a node: inherit → readWrite → readOnly → deny → inherit.
|
|
976
|
+
const cycleNode = useCallback((path) => {
|
|
977
|
+
setStatus(null);
|
|
978
|
+
const n = path.replace(/\/+$/, '') || '/';
|
|
979
|
+
const cur = explicitTier(path);
|
|
980
|
+
const next = cur === undefined ? 'readWrite' : cur === 'readWrite' ? 'readOnly' : cur === 'readOnly' ? 'deny' : undefined;
|
|
981
|
+
setTiers(prev => {
|
|
982
|
+
const strip = (arr) => arr.filter(p => (p.replace(/\/+$/, '') || '/') !== n);
|
|
983
|
+
const t = { readWrite: strip(prev.readWrite), readOnly: strip(prev.readOnly), deny: strip(prev.deny) };
|
|
984
|
+
if (next)
|
|
985
|
+
t[next].push(path);
|
|
986
|
+
setText(tiersToText(t));
|
|
987
|
+
return t;
|
|
988
|
+
});
|
|
989
|
+
}, [explicitTier]);
|
|
990
|
+
function syncFromText(next) {
|
|
991
|
+
setText(next);
|
|
992
|
+
setTiers(textToTiers(next));
|
|
993
|
+
setStatus(null);
|
|
994
|
+
}
|
|
995
|
+
async function save() {
|
|
996
|
+
setBusy(true);
|
|
997
|
+
setStatus(null);
|
|
998
|
+
try {
|
|
999
|
+
const res = await sendJson('PUT', `/api/bots/${encodeURIComponent(bot.larkAppId)}/sandbox-paths`, tiers);
|
|
1000
|
+
if (res.ok && res.body.ok) {
|
|
1001
|
+
setStatus({ text: `✓ ${tr('botDefaults.sbxPathsSaved')}`, ok: true });
|
|
1002
|
+
patchBot(bot.larkAppId, { sandboxPaths: res.body.sandboxPaths ?? { readWrite: [], readOnly: [], deny: [] } });
|
|
1003
|
+
}
|
|
1004
|
+
else {
|
|
1005
|
+
setStatus({ text: `✗ ${responseErrorText(res)}` });
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
catch (e) {
|
|
1009
|
+
setStatus({ text: `✗ ${caughtErrorText(e)}` });
|
|
1010
|
+
}
|
|
1011
|
+
finally {
|
|
1012
|
+
setBusy(false);
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
const tierBadge = (a) => a === 'readWrite' ? tr('botDefaults.sbxRw')
|
|
1016
|
+
: a === 'readOnly' ? tr('botDefaults.sbxRo')
|
|
1017
|
+
: a === 'deny' ? tr('botDefaults.sbxDeny')
|
|
1018
|
+
: tr('botDefaults.sbxNone');
|
|
1019
|
+
function TreeNode(props) {
|
|
1020
|
+
const { name, path, depth } = props;
|
|
1021
|
+
const isOpen = expanded.has(path);
|
|
1022
|
+
const explicit = explicitTier(path);
|
|
1023
|
+
const eff = effectiveAccess(tiers, path, homeRoot);
|
|
1024
|
+
const kids = children[path];
|
|
1025
|
+
return (_jsxs("div", { className: "bd-sbx-node", children: [_jsxs("div", { className: "bd-sbx-row", style: { paddingLeft: depth * 16 }, children: [_jsx("span", { className: "bd-sbx-twisty", onClick: () => {
|
|
1026
|
+
setExpanded(prev => { const s = new Set(prev); s.has(path) ? s.delete(path) : s.add(path); return s; });
|
|
1027
|
+
if (!kids)
|
|
1028
|
+
void loadDir(path);
|
|
1029
|
+
}, children: isOpen ? '▾' : '▸' }), _jsx("span", { className: "bd-sbx-name", title: path, children: name }), _jsx("button", { type: "button", className: `bd-sbx-state bd-sbx-state-${explicit ?? 'inherit'}`, "data-action": "cycle-sandbox-path", "data-path": path, title: explicit ? undefined : `${tr('botDefaults.sbxInherit')}: ${tierBadge(eff.access)}`, onClick: () => cycleNode(path), children: explicit ? tierBadge(explicit) : `↳ ${tierBadge(eff.access)}` })] }), isOpen && (_jsxs("div", { className: "bd-sbx-kids", children: [kids?.map(c => _jsx(TreeNode, { name: c.name, path: c.path, depth: depth + 1 }, c.path)), kids && kids.length === 0 && (_jsx("div", { className: "bd-sbx-empty", style: { paddingLeft: (depth + 1) * 16 + 20 }, children: tr('botDefaults.sbxNoSubdirs') }))] }))] }));
|
|
1030
|
+
}
|
|
1031
|
+
const testResult = testPath.trim() ? effectiveAccess(tiers, testPath.trim(), homeRoot) : null;
|
|
1032
|
+
return (_jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('botDefaults.sectionSandboxPaths') }), _jsx("p", { className: "bd-section-note", children: tr('botDefaults.sbxPathsHelp') }), _jsx("div", { className: "actions", style: { gap: 8, flexWrap: 'wrap' }, children: _jsx("button", { type: "button", className: "bd-btn", onClick: () => setTextMode(m => !m), children: textMode ? tr('botDefaults.sbxPathsTreeMode') : tr('botDefaults.sbxPathsTextMode') }) }), textMode ? (_jsx("textarea", { className: "bd-sbx-text", "data-field": "sandbox-paths-text", rows: 8, value: text, spellCheck: false, placeholder: 'rw ~/my-data\nro ~/reference-repos\ndeny ~/my-data/secrets', onChange: e => syncFromText(e.target.value) })) : (_jsx("div", { className: "bd-sbx-tree", "data-field": "sandbox-paths-tree", children: roots.map(r => _jsx(TreeNode, { name: r.name, path: r.path, depth: 0 }, r.path)) })), _jsxs("div", { className: "bd-sbx-tester", children: [_jsx("input", { className: "bd-sbx-test-input", "data-field": "sandbox-path-test", placeholder: tr('botDefaults.sbxTestPlaceholder'), value: testPath, onChange: e => setTestPath(e.target.value) }), testResult && (_jsxs("span", { className: `bd-sbx-test-out bd-sbx-state-${testResult.access}`, "data-test-access": testResult.access, children: [tierBadge(testResult.access), testResult.rule ? ` ← ${testResult.rule}` : ''] }))] }), _jsxs("div", { className: "actions", children: [_jsx("button", { type: "button", className: "bd-btn bd-btn-primary", "data-action": "save-sandbox-paths", disabled: busy || !dirty, onClick: () => void save(), children: tr('botDefaults.sbxPathsSave') }), _jsx(StatusSpan, { status: status, attr: { 'data-sandbox-paths-status': '' } })] })] }));
|
|
1033
|
+
}
|
|
844
1034
|
const BACKEND_TYPE_OPTIONS = [
|
|
845
1035
|
{ value: '', labelKey: 'botDefaults.backendAuto' },
|
|
846
1036
|
{ value: 'tmux', labelKey: 'botDefaults.backendTmux' },
|
|
@@ -1539,11 +1729,39 @@ function SessionCapSection(props) {
|
|
|
1539
1729
|
const [input, setInput] = useState(initial == null ? '' : String(initial));
|
|
1540
1730
|
const [status, setStatus] = useState(null);
|
|
1541
1731
|
const [busy, setBusy] = useState(false);
|
|
1732
|
+
const [overloadAlert, setOverloadAlert] = useState(props.bot.overloadAlert === true);
|
|
1733
|
+
const [overloadBusy, setOverloadBusy] = useState(false);
|
|
1542
1734
|
useEffect(() => {
|
|
1543
1735
|
const next = typeof props.bot.maxLiveWorkers === 'number' ? props.bot.maxLiveWorkers : null;
|
|
1544
1736
|
setCap(next);
|
|
1545
1737
|
setInput(next == null ? '' : String(next));
|
|
1546
1738
|
}, [props.bot.maxLiveWorkers]);
|
|
1739
|
+
useEffect(() => {
|
|
1740
|
+
setOverloadAlert(props.bot.overloadAlert === true);
|
|
1741
|
+
}, [props.bot.overloadAlert]);
|
|
1742
|
+
async function saveOverloadAlert(next) {
|
|
1743
|
+
setOverloadBusy(true);
|
|
1744
|
+
setStatus(null);
|
|
1745
|
+
setOverloadAlert(next); // optimistic
|
|
1746
|
+
try {
|
|
1747
|
+
const res = await props.putCardPref({ overloadAlert: next });
|
|
1748
|
+
if (res.ok && res.body.ok) {
|
|
1749
|
+
props.patchBot(props.bot.larkAppId, { overloadAlert: next });
|
|
1750
|
+
setStatus({ text: `✓ ${tr('botDefaults.cardPrefSaved')}`, ok: true });
|
|
1751
|
+
}
|
|
1752
|
+
else {
|
|
1753
|
+
setOverloadAlert(!next); // revert
|
|
1754
|
+
setStatus({ text: `✗ ${responseErrorText(res)}` });
|
|
1755
|
+
}
|
|
1756
|
+
}
|
|
1757
|
+
catch (e) {
|
|
1758
|
+
setOverloadAlert(!next); // revert
|
|
1759
|
+
setStatus({ text: `✗ ${caughtErrorText(e)}` });
|
|
1760
|
+
}
|
|
1761
|
+
finally {
|
|
1762
|
+
setOverloadBusy(false);
|
|
1763
|
+
}
|
|
1764
|
+
}
|
|
1547
1765
|
async function save(value) {
|
|
1548
1766
|
setStatus(null);
|
|
1549
1767
|
setBusy(true);
|
|
@@ -1580,7 +1798,7 @@ function SessionCapSection(props) {
|
|
|
1580
1798
|
cap: effectiveCap,
|
|
1581
1799
|
dormant,
|
|
1582
1800
|
logical,
|
|
1583
|
-
}) })] }), _jsxs("div", { className: "actions", children: [_jsx("button", { type: "button", className: "primary", "data-action": "save-session-cap", disabled: busy, onClick: saveInput, children: tr('botDefaults.maxLiveWorkersSave') }), _jsx("button", { type: "button", "data-action": "off-session-cap", disabled: busy, onClick: () => { setInput(''); void save(null); }, children: tr('botDefaults.maxLiveWorkersOff') }), _jsx(StatusSpan, { status: status, attr: { 'data-session-cap-status': '' } })] })] }));
|
|
1801
|
+
}) })] }), _jsxs("div", { className: "actions", children: [_jsx("button", { type: "button", className: "primary", "data-action": "save-session-cap", disabled: busy, onClick: saveInput, children: tr('botDefaults.maxLiveWorkersSave') }), _jsx("button", { type: "button", "data-action": "off-session-cap", disabled: busy, onClick: () => { setInput(''); void save(null); }, children: tr('botDefaults.maxLiveWorkersOff') }), _jsx(StatusSpan, { status: status, attr: { 'data-session-cap-status': '' } })] }), _jsx(ToggleRow, { checked: overloadAlert, disabled: overloadBusy, dataAction: "toggle-overload-alert", title: tr('botDefaults.overloadAlert'), help: tr('botDefaults.overloadAlertHelp'), onChange: checked => void saveOverloadAlert(checked) })] }));
|
|
1584
1802
|
}
|
|
1585
1803
|
function StartupCommandsSection(props) {
|
|
1586
1804
|
const tr = useT();
|
|
@@ -1612,6 +1830,69 @@ function StartupCommandsSection(props) {
|
|
|
1612
1830
|
}
|
|
1613
1831
|
return (_jsxs("div", { className: "bd-subsection", children: [_jsx("h4", { className: "bd-subsection-title", children: _jsx(FieldTitle, { help: tr('botDefaults.startupCommandsHelp'), children: tr('botDefaults.sectionStartupCommands') }) }), _jsx("textarea", { "data-input": "startupCommands", rows: 3, placeholder: tr('botDefaults.startupCommandsPlaceholder'), value: value, disabled: busy, onChange: event => setValue(event.currentTarget.value) }), _jsxs("div", { className: "actions", children: [_jsx("button", { type: "button", className: "primary", "data-action": "save-startup-commands", disabled: busy, onClick: () => void save(), children: tr('botDefaults.startupCommandsSave') }), _jsx(StatusSpan, { status: status, attr: { 'data-startup-commands-status': '' } })] })] }));
|
|
1614
1832
|
}
|
|
1833
|
+
// Slash 命令权限:把 /botconfig 的 customPassthroughCommands(透传给 CLI)与
|
|
1834
|
+
// canTalkDaemonCommands(daemon 命令降到 canTalk)搬到 Dashboard 可视化编辑。
|
|
1835
|
+
// 两者都是 stringList immediate 字段,走各自的 PUT 代理路由,空串=清除回默认。
|
|
1836
|
+
function SlashCommandPermissionsSection(props) {
|
|
1837
|
+
const tr = useT();
|
|
1838
|
+
const [passthrough, setPassthrough] = useState(typeof props.bot.customPassthroughCommands === 'string' ? props.bot.customPassthroughCommands : '');
|
|
1839
|
+
const [canTalk, setCanTalk] = useState(typeof props.bot.canTalkDaemonCommands === 'string' ? props.bot.canTalkDaemonCommands : '');
|
|
1840
|
+
const [status, setStatus] = useState(null);
|
|
1841
|
+
const [busy, setBusy] = useState(null);
|
|
1842
|
+
useEffect(() => {
|
|
1843
|
+
setPassthrough(typeof props.bot.customPassthroughCommands === 'string' ? props.bot.customPassthroughCommands : '');
|
|
1844
|
+
}, [props.bot.customPassthroughCommands]);
|
|
1845
|
+
// 分开两个 effect:只让「被保存的那个字段」的 prop 变化重置对应输入框,否则保存
|
|
1846
|
+
// 一个字段触发 patchBot 重渲染会连带把另一个字段的未保存草稿一并清空。
|
|
1847
|
+
useEffect(() => {
|
|
1848
|
+
setCanTalk(typeof props.bot.canTalkDaemonCommands === 'string' ? props.bot.canTalkDaemonCommands : '');
|
|
1849
|
+
}, [props.bot.canTalkDaemonCommands]);
|
|
1850
|
+
async function savePassthrough() {
|
|
1851
|
+
setStatus(null);
|
|
1852
|
+
setBusy('passthrough');
|
|
1853
|
+
try {
|
|
1854
|
+
const res = await sendJson('PUT', `/api/bots/${encodeURIComponent(props.bot.larkAppId)}/custom-passthrough`, { customPassthroughCommands: passthrough });
|
|
1855
|
+
if (res.ok && res.body.ok) {
|
|
1856
|
+
const next = typeof res.body.customPassthroughCommands === 'string' ? res.body.customPassthroughCommands : '';
|
|
1857
|
+
setPassthrough(next);
|
|
1858
|
+
props.patchBot(props.bot.larkAppId, { customPassthroughCommands: next });
|
|
1859
|
+
setStatus({ text: `✓ ${tr('botDefaults.cardPrefSaved')}`, ok: true });
|
|
1860
|
+
}
|
|
1861
|
+
else {
|
|
1862
|
+
setStatus({ text: `✗ ${responseErrorText(res)}` });
|
|
1863
|
+
}
|
|
1864
|
+
}
|
|
1865
|
+
catch (e) {
|
|
1866
|
+
setStatus({ text: `✗ ${caughtErrorText(e)}` });
|
|
1867
|
+
}
|
|
1868
|
+
finally {
|
|
1869
|
+
setBusy(null);
|
|
1870
|
+
}
|
|
1871
|
+
}
|
|
1872
|
+
async function saveCanTalk() {
|
|
1873
|
+
setStatus(null);
|
|
1874
|
+
setBusy('cantalk');
|
|
1875
|
+
try {
|
|
1876
|
+
const res = await sendJson('PUT', `/api/bots/${encodeURIComponent(props.bot.larkAppId)}/cantalk-daemon-commands`, { canTalkDaemonCommands: canTalk });
|
|
1877
|
+
if (res.ok && res.body.ok) {
|
|
1878
|
+
const next = typeof res.body.canTalkDaemonCommands === 'string' ? res.body.canTalkDaemonCommands : '';
|
|
1879
|
+
setCanTalk(next);
|
|
1880
|
+
props.patchBot(props.bot.larkAppId, { canTalkDaemonCommands: next });
|
|
1881
|
+
setStatus({ text: `✓ ${tr('botDefaults.cardPrefSaved')}`, ok: true });
|
|
1882
|
+
}
|
|
1883
|
+
else {
|
|
1884
|
+
setStatus({ text: `✗ ${responseErrorText(res)}` });
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
catch (e) {
|
|
1888
|
+
setStatus({ text: `✗ ${caughtErrorText(e)}` });
|
|
1889
|
+
}
|
|
1890
|
+
finally {
|
|
1891
|
+
setBusy(null);
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1894
|
+
return (_jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: _jsx(FieldTitle, { help: tr('botDefaults.sectionSlashCommandsHelp'), children: tr('botDefaults.sectionSlashCommands') }) }), _jsxs("div", { className: "bd-subsection", children: [_jsx("h4", { className: "bd-subsection-title", children: _jsx(FieldTitle, { help: tr('botDefaults.customPassthroughHelp'), children: tr('botDefaults.customPassthrough') }) }), _jsx("textarea", { "data-input": "customPassthroughCommands", rows: 2, placeholder: tr('botDefaults.customPassthroughPlaceholder'), value: passthrough, disabled: busy === 'passthrough', onChange: event => setPassthrough(event.currentTarget.value) }), _jsx("div", { className: "actions", children: _jsx("button", { type: "button", className: "primary", "data-action": "save-custom-passthrough", disabled: busy === 'passthrough', onClick: () => void savePassthrough(), children: tr('botDefaults.customPassthroughSave') }) })] }), _jsxs("div", { className: "bd-subsection", children: [_jsx("h4", { className: "bd-subsection-title", children: _jsx(FieldTitle, { help: tr('botDefaults.canTalkDaemonHelp'), children: tr('botDefaults.canTalkDaemon') }) }), _jsx("textarea", { "data-input": "canTalkDaemonCommands", rows: 2, placeholder: tr('botDefaults.canTalkDaemonPlaceholder'), value: canTalk, disabled: busy === 'cantalk', onChange: event => setCanTalk(event.currentTarget.value) }), _jsx("div", { className: "actions", children: _jsx("button", { type: "button", className: "primary", "data-action": "save-cantalk-daemon", disabled: busy === 'cantalk', onClick: () => void saveCanTalk(), children: tr('botDefaults.canTalkDaemonSave') }) })] }), _jsx(StatusSpan, { status: status, attr: { 'data-slash-commands-status': '' } })] }));
|
|
1895
|
+
}
|
|
1615
1896
|
function LaunchShellSection(props) {
|
|
1616
1897
|
const tr = useT();
|
|
1617
1898
|
const [value, setValue] = useState(typeof props.bot.launchShell === 'string' ? props.bot.launchShell : '');
|