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
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Register a freshly-issued nonce (called when the alert card is sent). */
|
|
2
|
+
export declare function registerOverloadNonce(nonce: string): void;
|
|
3
|
+
/**
|
|
4
|
+
* Try to claim `nonce` for `action`. Returns true exactly once per (nonce,
|
|
5
|
+
* action): the two buttons on one card each get one claim, so the owner can
|
|
6
|
+
* click BOTH 清僵尸 and 挂起闲置 on the same alert, but neither twice. Unknown
|
|
7
|
+
* or expired nonce → false (stale card).
|
|
8
|
+
*/
|
|
9
|
+
export declare function claimOverloadNonce(nonce: string, action: string): boolean;
|
|
10
|
+
export declare function _resetOverloadNoncesForTest(): void;
|
|
11
|
+
export declare function _overloadNonceCountForTest(): number;
|
|
12
|
+
/**
|
|
13
|
+
* Undo a claim for `(nonce, action)` so the button can be retried. Called when
|
|
14
|
+
* the action a claim guarded (the sweep) fails: without this a transient error
|
|
15
|
+
* would permanently burn the button and force the owner to the CLI. No-op if
|
|
16
|
+
* the nonce already expired/pruned.
|
|
17
|
+
*/
|
|
18
|
+
export declare function releaseOverloadNonce(nonce: string, action: string): void;
|
|
19
|
+
//# sourceMappingURL=overload-nonce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overload-nonce.d.ts","sourceRoot":"","sources":["../../../src/im/lark/overload-nonce.ts"],"names":[],"mappings":"AA2BA,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUzE;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAAsC;AACzF,wBAAgB,0BAA0B,IAAI,MAAM,CAAwB;AAE5E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIxE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-shot nonce store for host-overload alert cards. Each `entered` alert card
|
|
3
|
+
* embeds a fresh nonce in its button `value`; the daemon that sent the card
|
|
4
|
+
* remembers it here. When the owner clicks a button, the handler validates the
|
|
5
|
+
* nonce is still live before executing, then burns it — so a re-delivered
|
|
6
|
+
* callback, a double-tap, or a click on a stale card (from before a daemon
|
|
7
|
+
* restart) can't fire the destructive op twice.
|
|
8
|
+
*
|
|
9
|
+
* Pure in-memory, per daemon process (the sending daemon is the one that
|
|
10
|
+
* validates, since it sent the card). Daemon restart clears it → old cards
|
|
11
|
+
* expire naturally, which is the desired behaviour.
|
|
12
|
+
*/
|
|
13
|
+
const NONCE_TTL_MS = 60 * 60_000; // 1h: an alert older than this is stale; re-alert will issue a new one.
|
|
14
|
+
const nonces = new Map();
|
|
15
|
+
let lastPrunedAt = 0;
|
|
16
|
+
const PRUNE_INTERVAL_MS = 60_000;
|
|
17
|
+
function prune(now) {
|
|
18
|
+
if (now - lastPrunedAt < PRUNE_INTERVAL_MS)
|
|
19
|
+
return;
|
|
20
|
+
lastPrunedAt = now;
|
|
21
|
+
for (const [k, e] of nonces) {
|
|
22
|
+
if (now - e.at >= NONCE_TTL_MS)
|
|
23
|
+
nonces.delete(k);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Register a freshly-issued nonce (called when the alert card is sent). */
|
|
27
|
+
export function registerOverloadNonce(nonce) {
|
|
28
|
+
if (!nonce)
|
|
29
|
+
return;
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
prune(now);
|
|
32
|
+
nonces.set(nonce, { at: now, usedActions: new Set() });
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Try to claim `nonce` for `action`. Returns true exactly once per (nonce,
|
|
36
|
+
* action): the two buttons on one card each get one claim, so the owner can
|
|
37
|
+
* click BOTH 清僵尸 and 挂起闲置 on the same alert, but neither twice. Unknown
|
|
38
|
+
* or expired nonce → false (stale card).
|
|
39
|
+
*/
|
|
40
|
+
export function claimOverloadNonce(nonce, action) {
|
|
41
|
+
if (!nonce)
|
|
42
|
+
return false;
|
|
43
|
+
const now = Date.now();
|
|
44
|
+
prune(now);
|
|
45
|
+
const e = nonces.get(nonce);
|
|
46
|
+
if (!e)
|
|
47
|
+
return false;
|
|
48
|
+
if (now - e.at >= NONCE_TTL_MS) {
|
|
49
|
+
nonces.delete(nonce);
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (e.usedActions.has(action))
|
|
53
|
+
return false;
|
|
54
|
+
e.usedActions.add(action);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
export function _resetOverloadNoncesForTest() { nonces.clear(); lastPrunedAt = 0; }
|
|
58
|
+
export function _overloadNonceCountForTest() { return nonces.size; }
|
|
59
|
+
/**
|
|
60
|
+
* Undo a claim for `(nonce, action)` so the button can be retried. Called when
|
|
61
|
+
* the action a claim guarded (the sweep) fails: without this a transient error
|
|
62
|
+
* would permanently burn the button and force the owner to the CLI. No-op if
|
|
63
|
+
* the nonce already expired/pruned.
|
|
64
|
+
*/
|
|
65
|
+
export function releaseOverloadNonce(nonce, action) {
|
|
66
|
+
if (!nonce)
|
|
67
|
+
return;
|
|
68
|
+
const e = nonces.get(nonce);
|
|
69
|
+
if (e)
|
|
70
|
+
e.usedActions.delete(action);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=overload-nonce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overload-nonce.js","sourceRoot":"","sources":["../../../src/im/lark/overload-nonce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,wEAAwE;AAG1G,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;AAC7C,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,SAAS,KAAK,CAAC,GAAW;IACxB,IAAI,GAAG,GAAG,YAAY,GAAG,iBAAiB;QAAE,OAAO;IACnD,YAAY,GAAG,GAAG,CAAC;IACnB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,YAAY;YAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,CAAC,GAAG,CAAC,CAAC;IACX,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,MAAc;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,CAAC,GAAG,CAAC,CAAC;IACX,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IACvE,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,2BAA2B,KAAW,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;AACzF,MAAM,UAAU,0BAA0B,KAAa,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,MAAc;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC;QAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3-progress-card.d.ts","sourceRoot":"","sources":["../../../src/im/lark/v3-progress-card.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,oBAAoB,CAAC;KAC5B,CAAC;CACH;AAID,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,qBAA0B,GAClC,MAAM,
|
|
1
|
+
{"version":3,"file":"v3-progress-card.d.ts","sourceRoot":"","sources":["../../../src/im/lark/v3-progress-card.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,oBAAoB,CAAC;KAC5B,CAAC;CACH;AAID,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CA6IR"}
|
|
@@ -79,6 +79,11 @@ export function buildV3ProgressCard(view, options = {}) {
|
|
|
79
79
|
parts.push(`\`${escapeMd(view.issue.errorCode)}\``);
|
|
80
80
|
appendSection(elements, '⚠️ 错误码', parts.length > 0 ? parts.join(' · ') : 'UNKNOWN');
|
|
81
81
|
}
|
|
82
|
+
if (view.feishuHostFailed) {
|
|
83
|
+
appendSection(elements, 'Feishu host 节点失败', view.upstreamNonHostFinished
|
|
84
|
+
? '上游非 host 节点已完成,失败发生在 Feishu host 节点。该节点可能是通知,也可能是业务交付;请按 DAG 语义核对后再决定是否重试。'
|
|
85
|
+
: '失败发生在 Feishu host 节点。该节点可能是通知,也可能是业务交付;其它业务节点状态请以节点进度为准。');
|
|
86
|
+
}
|
|
82
87
|
if (view.uncertainHostEffectCount && view.uncertainHostEffectCount > 0) {
|
|
83
88
|
appendSection(elements, '⚠️ 外部效果待核实', `流程已停止,但有 ${view.uncertainHostEffectCount} 个外部操作的最终状态无法确认。请在 Web 详情中核对,不要直接重试该节点。`);
|
|
84
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3-progress-card.js","sourceRoot":"","sources":["../../../src/im/lark/v3-progress-card.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"v3-progress-card.js","sourceRoot":"","sources":["../../../src/im/lark/v3-progress-card.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure four-state resolution for `GET /api/sessions/:id/trigger-result`
|
|
3
|
+
* (async dispatch design A). Kept free of daemon/registry imports so it can be
|
|
4
|
+
* unit-tested directly; dashboard-ipc-server gathers the three inputs (live
|
|
5
|
+
* session, on-disk session record, persisted async result) and calls this.
|
|
6
|
+
*
|
|
7
|
+
* State contract (see docs/developer/platform/botmux-async-dispatch-design.md):
|
|
8
|
+
* - completed: final output captured (mem OR durable) → output.content + finishedAt
|
|
9
|
+
* - running: live session in flight, or a session record still open
|
|
10
|
+
* - failed: session record closed with no captured output (no_output; soft
|
|
11
|
+
* terminal — may be a genuine failure OR a caller-initiated close)
|
|
12
|
+
* - not_found: no session record anywhere (never existed / invalid id)
|
|
13
|
+
*
|
|
14
|
+
* Restart guarantee: as long as EITHER a session record OR a persisted result
|
|
15
|
+
* exists, this never returns not_found — an already-completed turn resolves to
|
|
16
|
+
* completed even after the in-memory Map is gone.
|
|
17
|
+
*/
|
|
18
|
+
import type { TriggerResponse } from './trigger-types.js';
|
|
19
|
+
/** Fail-closed / positive-proof cross-bot ownership gate for trigger-result.
|
|
20
|
+
*
|
|
21
|
+
* sessionStore.getSession() scans EVERY bot's sessions-*.json and the async
|
|
22
|
+
* store is a machine-wide shared directory, so a request routed to daemon A
|
|
23
|
+
* carrying a sessionId owned by bot B could read B's record / persisted output.
|
|
24
|
+
* This decides which of the two shared-store sources daemon `owner` may trust.
|
|
25
|
+
*
|
|
26
|
+
* A source is kept ONLY with POSITIVE proof of ownership — "not known-foreign"
|
|
27
|
+
* is deliberately insufficient, so a legacy unstamped persisted file with no
|
|
28
|
+
* owned session (unprovable owner) is dropped rather than leaked.
|
|
29
|
+
*
|
|
30
|
+
* - live ds: always ours (in THIS daemon's registry) → caller passes liveDs.
|
|
31
|
+
* - stored: keep iff there's a live ds OR its larkAppId == owner.
|
|
32
|
+
* - persisted: keep iff stamped with owner, OR (unstamped legacy) corroborated
|
|
33
|
+
* by an owned session context for the same id.
|
|
34
|
+
*
|
|
35
|
+
* Returns which sources survive, plus `foreignLeak` = raw data existed but none
|
|
36
|
+
* of it is attributable to us (→ caller returns a clean not_found miss). */
|
|
37
|
+
export interface OwnershipInputs {
|
|
38
|
+
owner: string;
|
|
39
|
+
liveDs: boolean;
|
|
40
|
+
storedOwner?: string;
|
|
41
|
+
storedExists: boolean;
|
|
42
|
+
persistedOwner?: string;
|
|
43
|
+
persistedExists: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface OwnershipDecision {
|
|
46
|
+
keepStored: boolean;
|
|
47
|
+
keepPersisted: boolean;
|
|
48
|
+
foreignLeak: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare function decideAsyncOwnership(inp: OwnershipInputs): OwnershipDecision;
|
|
51
|
+
export interface AsyncStateInputs {
|
|
52
|
+
sessionId: string;
|
|
53
|
+
/** Whether a live DaemonSession is currently registered for this id. */
|
|
54
|
+
liveActive: boolean;
|
|
55
|
+
/** chatId from the live session or the stored record, if known. */
|
|
56
|
+
chatId?: string;
|
|
57
|
+
/** In-memory async result for the resolved trigger, if the session is live. */
|
|
58
|
+
memResult?: {
|
|
59
|
+
status: 'pending' | 'completed';
|
|
60
|
+
content?: string;
|
|
61
|
+
completedAt?: number;
|
|
62
|
+
};
|
|
63
|
+
/** triggerId the in-memory result is keyed under (latest or explicit). */
|
|
64
|
+
memTriggerId?: string;
|
|
65
|
+
/** Durable persisted result (survives restart), if any. */
|
|
66
|
+
persisted?: {
|
|
67
|
+
triggerId: string;
|
|
68
|
+
result: {
|
|
69
|
+
status: 'pending' | 'completed';
|
|
70
|
+
content?: string;
|
|
71
|
+
completedAt?: number;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
/** On-disk session record status: 'open' (active), 'closed', or absent. */
|
|
75
|
+
storedStatus?: 'open' | 'closed';
|
|
76
|
+
/** closedAt ISO string from the stored record, for failed/finishedAt. */
|
|
77
|
+
closedAt?: string;
|
|
78
|
+
/** triggerId from the request query, if the caller pinned one. */
|
|
79
|
+
requestedTriggerId?: string;
|
|
80
|
+
}
|
|
81
|
+
export declare function resolveAsyncTriggerState(inp: AsyncStateInputs): TriggerResponse;
|
|
82
|
+
//# sourceMappingURL=async-trigger-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-trigger-state.d.ts","sourceRoot":"","sources":["../../src/services/async-trigger-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;;;;;;;;;;;;6EAiB6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AACD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AACD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,iBAAiB,CAW5E;AAGD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE;YAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACrF,CAAC;IACF,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACjC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,GAAG,eAAe,CA2F/E"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export function decideAsyncOwnership(inp) {
|
|
2
|
+
const keepStored = inp.storedExists && (inp.liveDs || (!!inp.owner && inp.storedOwner === inp.owner));
|
|
3
|
+
const ownedSessionForId = inp.liveDs || keepStored;
|
|
4
|
+
const keepPersisted = inp.persistedExists && ((!!inp.owner && inp.persistedOwner === inp.owner) ||
|
|
5
|
+
(inp.persistedOwner === undefined && ownedSessionForId));
|
|
6
|
+
// Raw data surfaced from the shared stores, but nothing is attributable to us.
|
|
7
|
+
const foreignLeak = !inp.liveDs && !keepStored && !keepPersisted && (inp.storedExists || inp.persistedExists);
|
|
8
|
+
return { keepStored, keepPersisted, foreignLeak };
|
|
9
|
+
}
|
|
10
|
+
export function resolveAsyncTriggerState(inp) {
|
|
11
|
+
const { sessionId, chatId } = inp;
|
|
12
|
+
// Precise-triggerId miss: the caller pinned ?triggerId= but no record (in
|
|
13
|
+
// memory or durable) matches it, AND a session context exists for this id.
|
|
14
|
+
// Preserve the legacy bad_request semantics — do NOT fall through to session
|
|
15
|
+
// open/closed and misreport running/failed for a trigger this session never
|
|
16
|
+
// had. (The caller only passes memResult/persisted that actually match the
|
|
17
|
+
// requested id, so "both absent + session exists" == precise miss.) When no
|
|
18
|
+
// session exists at all, this falls through to the not_found branch below.
|
|
19
|
+
const sessionExists = inp.liveActive || inp.storedStatus !== undefined;
|
|
20
|
+
if (inp.requestedTriggerId && !inp.memResult && !inp.persisted && sessionExists) {
|
|
21
|
+
// No `state`: this is a request-shape error (the caller pinned a triggerId
|
|
22
|
+
// this session never had), NOT one of the four task-lifecycle states. Keep
|
|
23
|
+
// it distinct from the public `state:"not_found"` (ok:true, session absent)
|
|
24
|
+
// so callers don't conflate "bad request" with "no such session".
|
|
25
|
+
return {
|
|
26
|
+
ok: false,
|
|
27
|
+
triggerId: inp.requestedTriggerId,
|
|
28
|
+
errorCode: 'bad_request',
|
|
29
|
+
error: `async trigger not found for session: ${inp.requestedTriggerId}`,
|
|
30
|
+
message: 'requested triggerId not found for this session',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const completed = (inp.memResult?.status === 'completed' && inp.memTriggerId
|
|
34
|
+
? { triggerId: inp.memTriggerId, content: inp.memResult.content, completedAt: inp.memResult.completedAt }
|
|
35
|
+
: undefined) ??
|
|
36
|
+
(inp.persisted?.result.status === 'completed'
|
|
37
|
+
? { triggerId: inp.persisted.triggerId, content: inp.persisted.result.content, completedAt: inp.persisted.result.completedAt }
|
|
38
|
+
: undefined);
|
|
39
|
+
if (completed) {
|
|
40
|
+
const finishedAt = completed.completedAt ? new Date(completed.completedAt).toISOString() : undefined;
|
|
41
|
+
return {
|
|
42
|
+
ok: true,
|
|
43
|
+
state: 'completed',
|
|
44
|
+
triggerId: completed.triggerId,
|
|
45
|
+
action: 'completed',
|
|
46
|
+
target: { kind: 'turn', sessionId, chatId },
|
|
47
|
+
output: completed.content !== undefined ? { content: completed.content } : undefined,
|
|
48
|
+
finishedAt,
|
|
49
|
+
async: { status: 'completed', sessionId, completedAt: finishedAt },
|
|
50
|
+
message: 'async trigger completed',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Closed record with no captured output → soft-terminal failed. Checked
|
|
54
|
+
// BEFORE the durable-pending running branch: a closed session whose persisted
|
|
55
|
+
// record is still `pending` was armed but never completed (a cancel/close or a
|
|
56
|
+
// genuine failure), so it must resolve to failed, not loop as running forever.
|
|
57
|
+
// The caller distinguishes its own cancel via intent, not this signal.
|
|
58
|
+
if (inp.storedStatus === 'closed') {
|
|
59
|
+
return {
|
|
60
|
+
ok: true,
|
|
61
|
+
state: 'failed',
|
|
62
|
+
triggerId: inp.persisted?.triggerId ?? inp.requestedTriggerId,
|
|
63
|
+
target: { kind: 'turn', sessionId, chatId },
|
|
64
|
+
errorCode: 'no_output',
|
|
65
|
+
error: '会话已终止但未捕获最终产出(可能失败或被取消)',
|
|
66
|
+
finishedAt: inp.closedAt ?? undefined,
|
|
67
|
+
message: 'async trigger terminated without output',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Running: a live session (worker in flight), a still-open session record,
|
|
71
|
+
// or a durable pending result with NO session record on disk (restart edge:
|
|
72
|
+
// the trigger was armed but its session file is momentarily unavailable —
|
|
73
|
+
// never downgrade this to not_found).
|
|
74
|
+
if (inp.liveActive || inp.storedStatus === 'open' || inp.persisted?.result.status === 'pending') {
|
|
75
|
+
return {
|
|
76
|
+
ok: true,
|
|
77
|
+
state: 'running',
|
|
78
|
+
triggerId: inp.persisted?.triggerId ?? inp.requestedTriggerId,
|
|
79
|
+
action: 'queued',
|
|
80
|
+
target: { kind: 'turn', sessionId, chatId },
|
|
81
|
+
async: { status: 'pending', sessionId },
|
|
82
|
+
message: 'async trigger running',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// No session record anywhere, no persisted result.
|
|
86
|
+
return {
|
|
87
|
+
ok: true,
|
|
88
|
+
state: 'not_found',
|
|
89
|
+
triggerId: inp.requestedTriggerId,
|
|
90
|
+
errorCode: 'session_not_found',
|
|
91
|
+
error: `no session record for: ${sessionId}`,
|
|
92
|
+
message: 'no session found',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=async-trigger-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-trigger-state.js","sourceRoot":"","sources":["../../src/services/async-trigger-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface PersistedAsyncTriggerResult {
|
|
2
|
+
status: 'pending' | 'completed';
|
|
3
|
+
createdAt: number;
|
|
4
|
+
completedAt?: number;
|
|
5
|
+
content?: string;
|
|
6
|
+
}
|
|
7
|
+
/** Record a freshly-armed async trigger as pending. Best-effort; a failed write
|
|
8
|
+
* only loses the restart-recovery guarantee, never the in-memory path.
|
|
9
|
+
* `ownerLarkAppId` is REQUIRED — it stamps the owning bot so cross-bot lookups
|
|
10
|
+
* can be rejected fail-closed (an unstamped file would be un-attributable and
|
|
11
|
+
* therefore un-servable). Pass '' only in tests that deliberately exercise the
|
|
12
|
+
* legacy-unstamped path. */
|
|
13
|
+
export declare function recordPending(sessionId: string, triggerId: string, createdAt: number, ownerLarkAppId: string): void;
|
|
14
|
+
/** Mark an async trigger completed with its captured final output.
|
|
15
|
+
* `ownerLarkAppId` is REQUIRED (see recordPending). */
|
|
16
|
+
export declare function recordCompleted(sessionId: string, triggerId: string, content: string, completedAt: number, ownerLarkAppId: string): void;
|
|
17
|
+
/** Look up a persisted result. With no triggerId, resolves the latest recorded
|
|
18
|
+
* one (mirrors the in-memory latestAsyncTriggerId semantics). Returns the
|
|
19
|
+
* stamped `ownerLarkAppId` (if any) so the caller can enforce cross-bot
|
|
20
|
+
* isolation before trusting the result. */
|
|
21
|
+
export declare function lookup(sessionId: string, triggerId?: string): {
|
|
22
|
+
triggerId: string;
|
|
23
|
+
result: PersistedAsyncTriggerResult;
|
|
24
|
+
ownerLarkAppId?: string;
|
|
25
|
+
} | undefined;
|
|
26
|
+
/** Delete a session's persisted async results (called on session close). */
|
|
27
|
+
export declare function deleteResults(sessionId: string): void;
|
|
28
|
+
//# sourceMappingURL=async-trigger-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-trigger-store.d.ts","sourceRoot":"","sources":["../../src/services/async-trigger-store.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkDD;;;;;6BAK6B;AAC7B,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAMnH;AAED;wDACwD;AACxD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAYxI;AAED;;;4CAG4C;AAC5C,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,2BAA2B,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,SAAS,CAOZ;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAGrD"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async trigger result store — durably persists asyncReturnSessionId trigger
|
|
3
|
+
* outcomes so `GET /api/sessions/:id/trigger-result` survives a daemon restart.
|
|
4
|
+
*
|
|
5
|
+
* Background: async trigger state normally lives only in memory on the active
|
|
6
|
+
* DaemonSession (`asyncTriggerResults`). A daemon restart (or idle-suspend)
|
|
7
|
+
* drops that Map, which would make a poller see `session_not_found` for a turn
|
|
8
|
+
* that in fact already completed — a false "task lost" for programmatic callers
|
|
9
|
+
* (e.g. the riff task runner) that reconcile purely off this endpoint.
|
|
10
|
+
*
|
|
11
|
+
* This store mirrors frozen-card-store's on-disk contract (atomic tmp+rename
|
|
12
|
+
* under {dataDir}/async-triggers/{sessionId}.json). It holds the final output
|
|
13
|
+
* text so `completed` can be rebuilt from disk after a restart — the CLI
|
|
14
|
+
* transcript is the ultimate source of truth, but insight-layer projections
|
|
15
|
+
* deliberately scrub raw output, so re-parsing them cannot reproduce
|
|
16
|
+
* output.content. Persisting the captured final_output is both cheaper and
|
|
17
|
+
* strictly more faithful than transcript re-parsing across 20+ CLI formats.
|
|
18
|
+
*
|
|
19
|
+
* The file is keyed by botmux sessionId (1:1 with a virtual async session's
|
|
20
|
+
* single turn) and stores every triggerId seen for that session, so both
|
|
21
|
+
* latest-wins polling (by sessionId) and exact-match polling (by triggerId)
|
|
22
|
+
* resolve after a restart.
|
|
23
|
+
*/
|
|
24
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, renameSync, unlinkSync } from 'node:fs';
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { config } from '../config.js';
|
|
27
|
+
import { logger } from '../utils/logger.js';
|
|
28
|
+
function getDir() {
|
|
29
|
+
return join(config.session.dataDir, 'async-triggers');
|
|
30
|
+
}
|
|
31
|
+
function getFilePath(sessionId) {
|
|
32
|
+
return join(getDir(), `${sessionId}.json`);
|
|
33
|
+
}
|
|
34
|
+
function ensureDir() {
|
|
35
|
+
const dir = getDir();
|
|
36
|
+
if (!existsSync(dir))
|
|
37
|
+
mkdirSync(dir, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
function load(sessionId) {
|
|
40
|
+
const fp = getFilePath(sessionId);
|
|
41
|
+
if (!existsSync(fp))
|
|
42
|
+
return { results: {} };
|
|
43
|
+
try {
|
|
44
|
+
const data = JSON.parse(readFileSync(fp, 'utf-8'));
|
|
45
|
+
if (!data || typeof data !== 'object' || typeof data.results !== 'object')
|
|
46
|
+
return { results: {} };
|
|
47
|
+
return { ownerLarkAppId: data.ownerLarkAppId, latestTriggerId: data.latestTriggerId, results: data.results ?? {} };
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
logger.debug(`Failed to load async trigger results for ${sessionId}: ${err}`);
|
|
51
|
+
return { results: {} };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function save(sessionId, file) {
|
|
55
|
+
ensureDir();
|
|
56
|
+
const fp = getFilePath(sessionId);
|
|
57
|
+
const tmpFp = fp + '.tmp';
|
|
58
|
+
try {
|
|
59
|
+
writeFileSync(tmpFp, JSON.stringify(file, null, 2), 'utf-8');
|
|
60
|
+
renameSync(tmpFp, fp);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
logger.debug(`Failed to persist async trigger results for ${sessionId}: ${err}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Record a freshly-armed async trigger as pending. Best-effort; a failed write
|
|
67
|
+
* only loses the restart-recovery guarantee, never the in-memory path.
|
|
68
|
+
* `ownerLarkAppId` is REQUIRED — it stamps the owning bot so cross-bot lookups
|
|
69
|
+
* can be rejected fail-closed (an unstamped file would be un-attributable and
|
|
70
|
+
* therefore un-servable). Pass '' only in tests that deliberately exercise the
|
|
71
|
+
* legacy-unstamped path. */
|
|
72
|
+
export function recordPending(sessionId, triggerId, createdAt, ownerLarkAppId) {
|
|
73
|
+
const file = load(sessionId);
|
|
74
|
+
if (ownerLarkAppId)
|
|
75
|
+
file.ownerLarkAppId = ownerLarkAppId;
|
|
76
|
+
file.results[triggerId] = { status: 'pending', createdAt };
|
|
77
|
+
file.latestTriggerId = triggerId;
|
|
78
|
+
save(sessionId, file);
|
|
79
|
+
}
|
|
80
|
+
/** Mark an async trigger completed with its captured final output.
|
|
81
|
+
* `ownerLarkAppId` is REQUIRED (see recordPending). */
|
|
82
|
+
export function recordCompleted(sessionId, triggerId, content, completedAt, ownerLarkAppId) {
|
|
83
|
+
const file = load(sessionId);
|
|
84
|
+
if (ownerLarkAppId)
|
|
85
|
+
file.ownerLarkAppId = ownerLarkAppId;
|
|
86
|
+
const prev = file.results[triggerId];
|
|
87
|
+
file.results[triggerId] = {
|
|
88
|
+
status: 'completed',
|
|
89
|
+
createdAt: prev?.createdAt ?? completedAt,
|
|
90
|
+
completedAt,
|
|
91
|
+
content,
|
|
92
|
+
};
|
|
93
|
+
if (!file.latestTriggerId)
|
|
94
|
+
file.latestTriggerId = triggerId;
|
|
95
|
+
save(sessionId, file);
|
|
96
|
+
}
|
|
97
|
+
/** Look up a persisted result. With no triggerId, resolves the latest recorded
|
|
98
|
+
* one (mirrors the in-memory latestAsyncTriggerId semantics). Returns the
|
|
99
|
+
* stamped `ownerLarkAppId` (if any) so the caller can enforce cross-bot
|
|
100
|
+
* isolation before trusting the result. */
|
|
101
|
+
export function lookup(sessionId, triggerId) {
|
|
102
|
+
const file = load(sessionId);
|
|
103
|
+
const resolved = triggerId || file.latestTriggerId;
|
|
104
|
+
if (!resolved)
|
|
105
|
+
return undefined;
|
|
106
|
+
const result = file.results[resolved];
|
|
107
|
+
if (!result)
|
|
108
|
+
return undefined;
|
|
109
|
+
return { triggerId: resolved, result, ownerLarkAppId: file.ownerLarkAppId };
|
|
110
|
+
}
|
|
111
|
+
/** Delete a session's persisted async results (called on session close). */
|
|
112
|
+
export function deleteResults(sessionId) {
|
|
113
|
+
const fp = getFilePath(sessionId);
|
|
114
|
+
try {
|
|
115
|
+
if (existsSync(fp))
|
|
116
|
+
unlinkSync(fp);
|
|
117
|
+
}
|
|
118
|
+
catch { /* ignore */ }
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=async-trigger-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-trigger-store.js","sourceRoot":"","sources":["../../src/services/async-trigger-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot-config-store.d.ts","sourceRoot":"","sources":["../../src/services/bot-config-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bot-config-store.d.ts","sourceRoot":"","sources":["../../src/services/bot-config-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { getBot, readBotSkillPolicy } from '../bot-registry.js';
|
|
2
|
+
import { republishResolvedAllowedUsersDescriptor, scheduleAllowedUsersResolveRetryFromMutation } from '../bot-registry.js';
|
|
3
|
+
import { config } from '../config.js';
|
|
4
|
+
import { writeAllowedUsersResolveCache } from '../utils/allowed-users-cache.js';
|
|
2
5
|
import { rmwBotEntry } from './config-store.js';
|
|
3
6
|
import { resolveAllowedUsersWithMap } from '../im/lark/client.js';
|
|
4
7
|
import { CLI_OPTIONS, resolveCliId } from '../setup/bot-config-editor.js';
|
|
@@ -6,7 +9,7 @@ import { expandHomePath } from '../utils/working-dir.js';
|
|
|
6
9
|
import { resolveTeamRoleFile } from '../core/role-resolver.js';
|
|
7
10
|
import { statSync } from 'node:fs';
|
|
8
11
|
import { logger } from '../utils/logger.js';
|
|
9
|
-
import { parseCustomPassthroughInput } from '../core/passthrough-commands.js';
|
|
12
|
+
import { parseCustomPassthroughInput, parseCanTalkDaemonCommandsInput } from '../core/passthrough-commands.js';
|
|
10
13
|
import { parseStartupCommandsInput } from '../core/startup-commands.js';
|
|
11
14
|
import { isReservedPerBotEnvKey, sanitizePerBotEnv } from '../core/per-bot-env.js';
|
|
12
15
|
/**
|
|
@@ -39,6 +42,7 @@ export const CONFIG_FIELDS = [
|
|
|
39
42
|
{ key: 'p2pMode', configKey: 'p2pMode', kind: 'enum', effect: 'immediate', clearable: true, enumValues: ['thread', 'chat'], hint: '私聊单聊模式 thread|chat;chat=扁平连续会话,thread/unset 回默认(每条 DM 独立会话)' },
|
|
40
43
|
{ key: 'maxLiveWorkers', configKey: 'maxLiveWorkers', kind: 'number', effect: 'immediate', clearable: true, hint: '最大常驻会话数;超过后最久未用的会话自动休眠(退出后台进程和 CLI、回收内存,下条消息冷恢复);unset=默认 30' },
|
|
41
44
|
{ key: 'customPassthroughCommands', configKey: 'customPassthroughCommands', kind: 'stringList', effect: 'immediate', clearable: true, hint: '额外放行透传给 CLI 的 slash 命令(逗号/空格分隔,如 /goal /export);unset 回仅内置白名单' },
|
|
45
|
+
{ key: 'canTalkDaemonCommands', configKey: 'canTalkDaemonCommands', kind: 'stringList', effect: 'immediate', clearable: true, parseList: parseCanTalkDaemonCommandsInput, hint: '把列出的 daemon 命令权限从 canOperate(仅管理员)降到 canTalk(对话放行即可用),如 /status /help;仅认 daemon 命令,透传命令无效;unset 回全部仅管理员' },
|
|
42
46
|
{ key: 'startupCommands', configKey: 'startupCommands', kind: 'stringList', effect: 'next-session', clearable: true, parseList: parseStartupCommandsInput, hint: '开会话后、首条消息前自动发给 CLI 的命令(逗号/换行分隔,可带参数,如 /effort ultracode);unset 回不发' },
|
|
43
47
|
{ key: 'env', configKey: 'env', kind: 'json', effect: 'next-session', clearable: true, hint: 'per-bot 环境变量 JSON(如 {"ANTHROPIC_BASE_URL":"…","ANTHROPIC_AUTH_TOKEN":"…"} 让本 bot 走 GLM/第三方服务商,或设 HTTPS_PROXY);注入到本 bot 的 CLI 进程,下个会话生效;值不显示(脱敏);unset 清除' },
|
|
44
48
|
{ key: 'backendType', configKey: 'backendType', kind: 'enum', effect: 'next-session', clearable: true, enumValues: ['pty', 'tmux', 'herdr', 'zellij', 'riff'], hint: '会话后端类型:pty=本地 PTY 子进程(默认)|tmux=tmux 会话|herdr=herdr 终端复用|zellij=zellij 多路复用|riff=远程 riff agent 服务;选 riff 时需配置 riff 字段;unset 回 pty' },
|
|
@@ -215,7 +219,7 @@ export async function setBotAllowedUsers(larkAppId, rawEntries, senderOpenId) {
|
|
|
215
219
|
catch {
|
|
216
220
|
return { ok: false, reason: 'bot_not_registered' };
|
|
217
221
|
}
|
|
218
|
-
const { resolved, map } = await resolveAllowedUsersWithMap(larkAppId, rawEntries);
|
|
222
|
+
const { resolved, map, entryStatus } = await resolveAllowedUsersWithMap(larkAppId, rawEntries);
|
|
219
223
|
if (resolved.length === 0)
|
|
220
224
|
return { ok: false, reason: 'empty_resolved' };
|
|
221
225
|
if (senderOpenId && !resolved.includes(senderOpenId))
|
|
@@ -229,6 +233,34 @@ export async function setBotAllowedUsers(larkAppId, rawEntries, senderOpenId) {
|
|
|
229
233
|
bot.config.allowedUsers = rawEntries;
|
|
230
234
|
bot.resolvedAllowedUsers = resolved;
|
|
231
235
|
bot.rawAllowedUserResolution = map;
|
|
236
|
+
// Keep the last-known-good sidecar + dashboard descriptor in lockstep with the
|
|
237
|
+
// live allowlist. Without this, a hot `set allowedUsers` (e.g. owner switches
|
|
238
|
+
// from email to on_ while contact API is healthy) leaves the new raw key out
|
|
239
|
+
// of the cache; the next clean restart during an API blip would then resolve
|
|
240
|
+
// empty and fail-closed lock the owner out — the exact bug this feature fixes.
|
|
241
|
+
// retainKeys prunes stale keys (old email/union no longer configured);
|
|
242
|
+
// deleteEntries drops entries that resolved DEFINITIVELY-gone in THIS set (e.g.
|
|
243
|
+
// a removed co-owner) so a later transient restart can't revive them from cache.
|
|
244
|
+
const definitiveEntries = [];
|
|
245
|
+
let anyTransient = false;
|
|
246
|
+
for (const [entry, status] of entryStatus.entries()) {
|
|
247
|
+
if (status === 'definitive')
|
|
248
|
+
definitiveEntries.push(entry);
|
|
249
|
+
else if (status === 'transient')
|
|
250
|
+
anyTransient = true;
|
|
251
|
+
}
|
|
252
|
+
writeAllowedUsersResolveCache(config.session.dataDir, larkAppId, {
|
|
253
|
+
map,
|
|
254
|
+
retainKeys: rawEntries,
|
|
255
|
+
deleteEntries: definitiveEntries,
|
|
256
|
+
});
|
|
257
|
+
republishResolvedAllowedUsersDescriptor(larkAppId, resolved);
|
|
258
|
+
// Partial-transient set: the owner (senderOpenId) resolved (self_lockout guard
|
|
259
|
+
// above guarantees it), but some OTHER entry transient-failed. Schedule the
|
|
260
|
+
// same background heal the startup path uses so that entry recovers when the
|
|
261
|
+
// contact API does, instead of silently staying dropped until the next restart.
|
|
262
|
+
if (anyTransient)
|
|
263
|
+
scheduleAllowedUsersResolveRetryFromMutation(larkAppId);
|
|
232
264
|
logger.info(`[config:${larkAppId}] allowedUsers updated: ${rawEntries.length} entries, ${resolved.length} resolved`);
|
|
233
265
|
return { ok: true, raw: rawEntries, resolved };
|
|
234
266
|
}
|