botmux 3.4.3 → 3.5.2
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 +10 -7
- package/README.md +11 -6
- package/dist/adapters/backend/herdr-backend.d.ts +43 -6
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +362 -28
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/reproduce-command.d.ts +39 -0
- package/dist/adapters/backend/reproduce-command.d.ts.map +1 -0
- package/dist/adapters/backend/reproduce-command.js +63 -0
- package/dist/adapters/backend/reproduce-command.js.map +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/backend/session-backend-selector.d.ts +10 -1
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
- package/dist/adapters/backend/session-backend-selector.js +73 -4
- package/dist/adapters/backend/session-backend-selector.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +16 -0
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +4 -0
- 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 +539 -0
- package/dist/adapters/cli/fs-policy.js.map +1 -0
- package/dist/adapters/cli/pi-initial-prompt.d.ts.map +1 -1
- package/dist/adapters/cli/pi-initial-prompt.js +5 -1
- package/dist/adapters/cli/pi-initial-prompt.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/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +5 -0
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +3 -3
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/adapters/hook-installer.d.ts +7 -0
- package/dist/adapters/hook-installer.d.ts.map +1 -1
- package/dist/adapters/hook-installer.js +56 -0
- package/dist/adapters/hook-installer.js.map +1 -1
- package/dist/bot-registry.d.ts +39 -23
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +134 -2
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/capabilities.d.ts +24 -0
- package/dist/cli/capabilities.d.ts.map +1 -0
- package/dist/cli/capabilities.js +25 -0
- package/dist/cli/capabilities.js.map +1 -0
- package/dist/cli/create-group-resolver.d.ts +24 -0
- package/dist/cli/create-group-resolver.d.ts.map +1 -1
- package/dist/cli/create-group-resolver.js +23 -0
- package/dist/cli/create-group-resolver.js.map +1 -1
- package/dist/cli/daemon-lifecycle-env.d.ts +5 -7
- package/dist/cli/daemon-lifecycle-env.d.ts.map +1 -1
- package/dist/cli/daemon-lifecycle-env.js +13 -7
- package/dist/cli/daemon-lifecycle-env.js.map +1 -1
- package/dist/cli/exact-chat-grant-client.d.ts +48 -0
- package/dist/cli/exact-chat-grant-client.d.ts.map +1 -0
- package/dist/cli/exact-chat-grant-client.js +108 -0
- package/dist/cli/exact-chat-grant-client.js.map +1 -0
- package/dist/cli/exact-chat-grant.d.ts +18 -0
- package/dist/cli/exact-chat-grant.d.ts.map +1 -0
- package/dist/cli/exact-chat-grant.js +97 -0
- package/dist/cli/exact-chat-grant.js.map +1 -0
- package/dist/cli.d.ts +10 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +795 -144
- package/dist/cli.js.map +1 -1
- package/dist/codex-rpc-engine.d.ts +26 -0
- package/dist/codex-rpc-engine.d.ts.map +1 -1
- package/dist/codex-rpc-engine.js +113 -2
- package/dist/codex-rpc-engine.js.map +1 -1
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/core/bot-live-control.d.ts +41 -0
- package/dist/core/bot-live-control.d.ts.map +1 -0
- package/dist/core/bot-live-control.js +135 -0
- package/dist/core/bot-live-control.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +44 -66
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/daemon-config-fence.d.ts +8 -0
- package/dist/core/daemon-config-fence.d.ts.map +1 -0
- package/dist/core/daemon-config-fence.js +13 -0
- package/dist/core/daemon-config-fence.js.map +1 -0
- package/dist/core/dashboard-events.d.ts +5 -0
- package/dist/core/dashboard-events.d.ts.map +1 -1
- package/dist/core/dashboard-events.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +21 -2
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +258 -32
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dispatch-registry.d.ts +12 -0
- package/dist/core/dispatch-registry.d.ts.map +1 -0
- package/dist/core/dispatch-registry.js +33 -0
- package/dist/core/dispatch-registry.js.map +1 -0
- package/dist/core/dispatch.d.ts +99 -0
- package/dist/core/dispatch.d.ts.map +1 -1
- package/dist/core/dispatch.js +136 -0
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +10 -3
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/persistent-backend.d.ts +16 -2
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +40 -0
- package/dist/core/persistent-backend.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/session-discovery.d.ts +8 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +140 -8
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +102 -68
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-title.d.ts +8 -0
- package/dist/core/session-title.d.ts.map +1 -1
- package/dist/core/session-title.js +54 -0
- package/dist/core/session-title.js.map +1 -1
- package/dist/core/terminal-write-auth.d.ts +15 -0
- package/dist/core/terminal-write-auth.d.ts.map +1 -1
- package/dist/core/terminal-write-auth.js +20 -0
- package/dist/core/terminal-write-auth.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +3 -2
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +33 -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 +51 -8
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +439 -25
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +4 -2
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +403 -26
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts +127 -1
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +1104 -25
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +5 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +7 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/debug-terminal.d.ts +18 -0
- package/dist/dashboard/debug-terminal.d.ts.map +1 -0
- package/dist/dashboard/debug-terminal.js +338 -0
- package/dist/dashboard/debug-terminal.js.map +1 -0
- package/dist/dashboard/public-redact.d.ts +2 -0
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +12 -3
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/registry.d.ts +8 -0
- package/dist/dashboard/registry.d.ts.map +1 -1
- package/dist/dashboard/registry.js +13 -0
- package/dist/dashboard/registry.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +47 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +102 -1
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +2 -0
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +17 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +249 -11
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +22 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +19 -0
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +114 -28
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/icon-tooltip.d.ts +3 -0
- package/dist/dashboard/web/icon-tooltip.d.ts.map +1 -0
- package/dist/dashboard/web/icon-tooltip.js +108 -0
- package/dist/dashboard/web/icon-tooltip.js.map +1 -0
- package/dist/dashboard/web/sessions-kanban.js +2 -2
- 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 +49 -53
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +2 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +46 -2
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +78 -0
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +88 -1
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +2 -0
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +13 -1
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-AUKV7P4L.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-P6GO5KT4.js → chunk-KPQAUX7V.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-UBOLHQCK.js → chunk-NRL6CVAS.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-JNRSPKLS.js → chunk-R7IAKAYX.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-CUV65BIQ.js → chunk-X2L65IOM.js} +8 -8
- package/dist/dashboard-web/chunks/{connectors-page-KTC2QWNW.js → connectors-page-HDQFEXZI.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-B3EKGOLY.js → groups-page-6DKXBYOM.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-X6RXNCWX.js → insights-page-NWARTJ6J.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-LLRA5LQW.js → monitor-room-AGX3XRJX.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-7MT5FEOS.js → monitoring-page-GGGIWN4C.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-KD46D5TD.js → office-page-6SIVKSK3.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-JUWNH32O.js → overview-page-FVR3NKAF.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-P6F7NLOI.js → roles-page-WE2YB7KN.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-XIHWZST4.js → schedules-page-TB3I24XN.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-KOOOASIL.js +2 -0
- package/dist/dashboard-web/chunks/settings-page-IEBR7TGN.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-A46KVWBL.js → skills-page-3QAT2IWD.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-SDUC56DF.js → team-federation-page-K4VVAVAK.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-J5JOTUSQ.js → v3-page-V6IOJR2B.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-U7LSOAWI.js → whiteboards-page-V6CGKRNX.js} +1 -1
- package/dist/dashboard-web/style.css +218 -10
- package/dist/dashboard.js +380 -8
- package/dist/dashboard.js.map +1 -1
- package/dist/features/codex-notifier/adoption.d.ts +11 -0
- package/dist/features/codex-notifier/adoption.d.ts.map +1 -0
- package/dist/features/codex-notifier/adoption.js +11 -0
- package/dist/features/codex-notifier/adoption.js.map +1 -0
- package/dist/features/codex-notifier/app-opener.d.ts +21 -0
- package/dist/features/codex-notifier/app-opener.d.ts.map +1 -0
- package/dist/features/codex-notifier/app-opener.js +33 -0
- package/dist/features/codex-notifier/app-opener.js.map +1 -0
- package/dist/features/codex-notifier/card-action.d.ts +27 -0
- package/dist/features/codex-notifier/card-action.d.ts.map +1 -0
- package/dist/features/codex-notifier/card-action.js +84 -0
- package/dist/features/codex-notifier/card-action.js.map +1 -0
- package/dist/features/codex-notifier/card.d.ts +12 -0
- package/dist/features/codex-notifier/card.d.ts.map +1 -0
- package/dist/features/codex-notifier/card.js +150 -0
- package/dist/features/codex-notifier/card.js.map +1 -0
- package/dist/features/codex-notifier/codex-context.d.ts +12 -0
- package/dist/features/codex-notifier/codex-context.d.ts.map +1 -0
- package/dist/features/codex-notifier/codex-context.js +161 -0
- package/dist/features/codex-notifier/codex-context.js.map +1 -0
- package/dist/features/codex-notifier/config.d.ts +9 -0
- package/dist/features/codex-notifier/config.d.ts.map +1 -0
- package/dist/features/codex-notifier/config.js +11 -0
- package/dist/features/codex-notifier/config.js.map +1 -0
- package/dist/features/codex-notifier/confirmed-turn.d.ts +20 -0
- package/dist/features/codex-notifier/confirmed-turn.d.ts.map +1 -0
- package/dist/features/codex-notifier/confirmed-turn.js +130 -0
- package/dist/features/codex-notifier/confirmed-turn.js.map +1 -0
- package/dist/features/codex-notifier/emitter.d.ts +13 -0
- package/dist/features/codex-notifier/emitter.d.ts.map +1 -0
- package/dist/features/codex-notifier/emitter.js +33 -0
- package/dist/features/codex-notifier/emitter.js.map +1 -0
- package/dist/features/codex-notifier/event-store.d.ts +29 -0
- package/dist/features/codex-notifier/event-store.d.ts.map +1 -0
- package/dist/features/codex-notifier/event-store.js +217 -0
- package/dist/features/codex-notifier/event-store.js.map +1 -0
- package/dist/features/codex-notifier/event.d.ts +46 -0
- package/dist/features/codex-notifier/event.d.ts.map +1 -0
- package/dist/features/codex-notifier/event.js +188 -0
- package/dist/features/codex-notifier/event.js.map +1 -0
- package/dist/features/codex-notifier/hook-cli.d.ts +23 -0
- package/dist/features/codex-notifier/hook-cli.d.ts.map +1 -0
- package/dist/features/codex-notifier/hook-cli.js +130 -0
- package/dist/features/codex-notifier/hook-cli.js.map +1 -0
- package/dist/features/codex-notifier/hook-installer.d.ts +19 -0
- package/dist/features/codex-notifier/hook-installer.d.ts.map +1 -0
- package/dist/features/codex-notifier/hook-installer.js +158 -0
- package/dist/features/codex-notifier/hook-installer.js.map +1 -0
- package/dist/features/codex-notifier/index.d.ts +21 -0
- package/dist/features/codex-notifier/index.d.ts.map +1 -0
- package/dist/features/codex-notifier/index.js +19 -0
- package/dist/features/codex-notifier/index.js.map +1 -0
- package/dist/features/codex-notifier/internal-turn.d.ts +5 -0
- package/dist/features/codex-notifier/internal-turn.d.ts.map +1 -0
- package/dist/features/codex-notifier/internal-turn.js +43 -0
- package/dist/features/codex-notifier/internal-turn.js.map +1 -0
- package/dist/features/codex-notifier/outbox-worker.d.ts +71 -0
- package/dist/features/codex-notifier/outbox-worker.d.ts.map +1 -0
- package/dist/features/codex-notifier/outbox-worker.js +290 -0
- package/dist/features/codex-notifier/outbox-worker.js.map +1 -0
- package/dist/features/codex-notifier/outbox.d.ts +25 -0
- package/dist/features/codex-notifier/outbox.d.ts.map +1 -0
- package/dist/features/codex-notifier/outbox.js +225 -0
- package/dist/features/codex-notifier/outbox.js.map +1 -0
- package/dist/features/codex-notifier/paths.d.ts +7 -0
- package/dist/features/codex-notifier/paths.d.ts.map +1 -0
- package/dist/features/codex-notifier/paths.js +20 -0
- package/dist/features/codex-notifier/paths.js.map +1 -0
- package/dist/features/codex-notifier/screen-lock.d.ts +12 -0
- package/dist/features/codex-notifier/screen-lock.d.ts.map +1 -0
- package/dist/features/codex-notifier/screen-lock.js +47 -0
- package/dist/features/codex-notifier/screen-lock.js.map +1 -0
- package/dist/features/codex-notifier/side-conversation-monitor.d.ts +102 -0
- package/dist/features/codex-notifier/side-conversation-monitor.d.ts.map +1 -0
- package/dist/features/codex-notifier/side-conversation-monitor.js +774 -0
- package/dist/features/codex-notifier/side-conversation-monitor.js.map +1 -0
- package/dist/features/codex-notifier/types.d.ts +42 -0
- package/dist/features/codex-notifier/types.d.ts.map +1 -0
- package/dist/features/codex-notifier/types.js +2 -0
- package/dist/features/codex-notifier/types.js.map +1 -0
- package/dist/features/codex-notifier/worker-lock.d.ts +8 -0
- package/dist/features/codex-notifier/worker-lock.d.ts.map +1 -0
- package/dist/features/codex-notifier/worker-lock.js +108 -0
- package/dist/features/codex-notifier/worker-lock.js.map +1 -0
- package/dist/global-config.d.ts +13 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +34 -1
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1 -19
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +1 -19
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +0 -13
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +2 -36
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +2 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +166 -64
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +98 -4
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +317 -29
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +48 -33
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/services/codex-app-threads.d.ts +47 -0
- package/dist/services/codex-app-threads.d.ts.map +1 -1
- package/dist/services/codex-app-threads.js +502 -10
- package/dist/services/codex-app-threads.js.map +1 -1
- package/dist/services/exact-chat-grant.d.ts +83 -0
- package/dist/services/exact-chat-grant.d.ts.map +1 -0
- package/dist/services/exact-chat-grant.js +249 -0
- package/dist/services/exact-chat-grant.js.map +1 -0
- package/dist/services/group-creator.d.ts +11 -0
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +18 -9
- package/dist/services/group-creator.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +10 -5
- package/dist/services/local-cli-opener.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/traex-user-input.d.ts +19 -0
- package/dist/services/traex-user-input.d.ts.map +1 -0
- package/dist/services/traex-user-input.js +57 -0
- package/dist/services/traex-user-input.js.map +1 -0
- package/dist/setup/open-platform-automation.d.ts +24 -3
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +45 -8
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/verify-permissions.d.ts +18 -0
- package/dist/setup/verify-permissions.d.ts.map +1 -1
- package/dist/setup/verify-permissions.js +60 -0
- package/dist/setup/verify-permissions.js.map +1 -1
- package/dist/types.d.ts +83 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +2 -2
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +14 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/stuck-detector.d.ts +45 -0
- package/dist/utils/stuck-detector.d.ts.map +1 -0
- package/dist/utils/stuck-detector.js +188 -0
- package/dist/utils/stuck-detector.js.map +1 -0
- package/dist/utils/stuck-key-guard.d.ts +75 -0
- package/dist/utils/stuck-key-guard.d.ts.map +1 -0
- package/dist/utils/stuck-key-guard.js +77 -0
- package/dist/utils/stuck-key-guard.js.map +1 -0
- package/dist/worker.js +1119 -588
- 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/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/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/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/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-B5AY4B2J.js +0 -5
- package/dist/dashboard-web/chunks/sessions-page-2VECQ27T.js +0 -3
- package/dist/dashboard-web/chunks/settings-page-HMIUE2JA.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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"AAgBA,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"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"}
|
package/dist/im/lark/client.js
CHANGED
|
@@ -13,6 +13,15 @@ import { listObservedBots } from '../../services/observed-bots-store.js';
|
|
|
13
13
|
import { getBotCapability } from '../../services/bot-profile-store.js';
|
|
14
14
|
import { resolveTeamRoleFile } from '../../core/role-resolver.js';
|
|
15
15
|
import { larkHosts, normalizeBrand, sdkDomain } from './lark-hosts.js';
|
|
16
|
+
function larkRequestDeadline(options) {
|
|
17
|
+
const timeout = options?.timeoutMs;
|
|
18
|
+
return {
|
|
19
|
+
...(typeof timeout === 'number' && Number.isFinite(timeout) && timeout > 0
|
|
20
|
+
? { timeout: Math.max(1, Math.floor(timeout)) }
|
|
21
|
+
: {}),
|
|
22
|
+
...(options?.signal ? { signal: options.signal } : {}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
16
25
|
/**
|
|
17
26
|
* Call a Feishu GET endpoint without a request body.
|
|
18
27
|
*
|
|
@@ -28,8 +37,13 @@ import { larkHosts, normalizeBrand, sdkDomain } from './lark-hosts.js';
|
|
|
28
37
|
* already be interpolated by the caller. Returns the parsed JSON body
|
|
29
38
|
* (`{ code, msg, data }`), identical to the generated method's resolved value.
|
|
30
39
|
*/
|
|
31
|
-
export async function larkGet(c, url, params = {}) {
|
|
32
|
-
return c.request({
|
|
40
|
+
export async function larkGet(c, url, params = {}, options) {
|
|
41
|
+
return c.request({
|
|
42
|
+
method: 'GET',
|
|
43
|
+
url,
|
|
44
|
+
params,
|
|
45
|
+
...larkRequestDeadline(options),
|
|
46
|
+
});
|
|
33
47
|
}
|
|
34
48
|
// Cached lightweight Lark clients for all configured bots (for isInChat checks).
|
|
35
49
|
//
|
|
@@ -53,25 +67,47 @@ const probeLarkLogger = {
|
|
|
53
67
|
trace: (..._msg) => { },
|
|
54
68
|
};
|
|
55
69
|
let allBotClients = null;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
let allBotClientsFingerprint = null;
|
|
71
|
+
function loadAllBotClientConfigs() {
|
|
72
|
+
try {
|
|
73
|
+
return loadBotConfigs();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// riff sandbox:没有 bots.json,只有经 env 合成注册进 registry 的 bot——
|
|
77
|
+
// 降级用注册表里的配置,`botmux bots list` 等只读探测照常可用。
|
|
78
|
+
return getAllBots().map((b) => b.config);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function getAllBotClients(opts = {}) {
|
|
82
|
+
if (!allBotClients || opts.refresh) {
|
|
83
|
+
const cfgs = loadAllBotClientConfigs();
|
|
84
|
+
// The strict stable-App resolver is an authorization boundary and must see
|
|
85
|
+
// bots appended after this process started. Reload the controlled config on
|
|
86
|
+
// every strict resolution, while retaining Client instances when the exact
|
|
87
|
+
// credential/domain tuple is unchanged. Discovery callers keep the cheap
|
|
88
|
+
// process cache.
|
|
89
|
+
const fingerprint = JSON.stringify(cfgs.map(cfg => [
|
|
90
|
+
cfg.larkAppId,
|
|
91
|
+
cfg.cliId,
|
|
92
|
+
cfg.larkAppSecret,
|
|
93
|
+
normalizeBrand(cfg.brand),
|
|
94
|
+
]));
|
|
95
|
+
if (!allBotClients || allBotClientsFingerprint !== fingerprint) {
|
|
96
|
+
allBotClients = cfgs.map((cfg) => ({
|
|
97
|
+
appId: cfg.larkAppId,
|
|
98
|
+
cliId: cfg.cliId,
|
|
99
|
+
client: new Client({ appId: cfg.larkAppId, appSecret: cfg.larkAppSecret, domain: sdkDomain(normalizeBrand(cfg.brand)), logger: probeLarkLogger }),
|
|
100
|
+
}));
|
|
101
|
+
allBotClientsFingerprint = fingerprint;
|
|
66
102
|
}
|
|
67
|
-
allBotClients = cfgs.map((cfg) => ({
|
|
68
|
-
appId: cfg.larkAppId,
|
|
69
|
-
cliId: cfg.cliId,
|
|
70
|
-
client: new Client({ appId: cfg.larkAppId, appSecret: cfg.larkAppSecret, domain: sdkDomain(normalizeBrand(cfg.brand)), logger: probeLarkLogger }),
|
|
71
|
-
}));
|
|
72
103
|
}
|
|
73
104
|
return allBotClients;
|
|
74
105
|
}
|
|
106
|
+
/** Test seam for suites that replace the configured bot set at runtime. */
|
|
107
|
+
export function __testOnly_resetAllBotClients() {
|
|
108
|
+
allBotClients = null;
|
|
109
|
+
allBotClientsFingerprint = null;
|
|
110
|
+
}
|
|
75
111
|
// ─── Error types ──────────────────────────────────────────────────────────────
|
|
76
112
|
/** Thrown when the target message has been withdrawn (Lark code 230011). */
|
|
77
113
|
export class MessageWithdrawnError extends Error {
|
|
@@ -350,17 +386,27 @@ export async function isHumanOpenId(larkAppId, openId) {
|
|
|
350
386
|
return false;
|
|
351
387
|
}
|
|
352
388
|
}
|
|
353
|
-
export async function sendUserMessage(larkAppId, openId, content, msgType = 'text') {
|
|
389
|
+
export async function sendUserMessage(larkAppId, openId, content, msgType = 'text', uuid, requestOptions) {
|
|
354
390
|
const c = getBotClient(larkAppId);
|
|
355
391
|
const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
392
|
+
const data = {
|
|
393
|
+
receive_id: openId,
|
|
394
|
+
msg_type: msgType,
|
|
395
|
+
content: body,
|
|
396
|
+
...(uuid ? { uuid } : {}),
|
|
397
|
+
};
|
|
398
|
+
const res = requestOptions
|
|
399
|
+
? await c.request({
|
|
400
|
+
method: 'POST',
|
|
401
|
+
url: '/open-apis/im/v1/messages',
|
|
402
|
+
params: { receive_id_type: 'open_id' },
|
|
403
|
+
data,
|
|
404
|
+
...larkRequestDeadline(requestOptions),
|
|
405
|
+
})
|
|
406
|
+
: await c.im.v1.message.create({
|
|
407
|
+
params: { receive_id_type: 'open_id' },
|
|
408
|
+
data,
|
|
409
|
+
});
|
|
364
410
|
if (res.code !== 0) {
|
|
365
411
|
throw new Error(`Failed to send user message: ${res.msg} (code: ${res.code})`);
|
|
366
412
|
}
|
|
@@ -649,15 +695,18 @@ export async function getMessageDetail(larkAppId, messageId, options = {}) {
|
|
|
649
695
|
// user AND bot senders); without it the server omits them. Matters here for
|
|
650
696
|
// merge_forward sub-messages, whose senders appear nowhere else.
|
|
651
697
|
with_sender_name: 'true',
|
|
652
|
-
});
|
|
698
|
+
}, options);
|
|
653
699
|
if (res.code !== 0) {
|
|
654
700
|
throw new Error(`Failed to get message: ${res.msg} (code: ${res.code})`);
|
|
655
701
|
}
|
|
656
702
|
return res.data;
|
|
657
703
|
}
|
|
658
|
-
export async function getMessageChatId(larkAppId, messageId) {
|
|
704
|
+
export async function getMessageChatId(larkAppId, messageId, options) {
|
|
659
705
|
try {
|
|
660
|
-
const detail = await getMessageDetail(larkAppId, messageId, {
|
|
706
|
+
const detail = await getMessageDetail(larkAppId, messageId, {
|
|
707
|
+
userCardContent: false,
|
|
708
|
+
...options,
|
|
709
|
+
});
|
|
661
710
|
const candidates = [
|
|
662
711
|
detail?.items?.[0]?.chat_id,
|
|
663
712
|
detail?.chat_id,
|
|
@@ -670,6 +719,9 @@ export async function getMessageChatId(larkAppId, messageId) {
|
|
|
670
719
|
return null;
|
|
671
720
|
}
|
|
672
721
|
catch (err) {
|
|
722
|
+
if (options?.signal?.aborted) {
|
|
723
|
+
throw options.signal.reason instanceof Error ? options.signal.reason : err;
|
|
724
|
+
}
|
|
673
725
|
logger.debug(`[message] failed to resolve chat_id for ${messageId.substring(0, 12)}: ${err instanceof Error ? err.message : err}`);
|
|
674
726
|
return null;
|
|
675
727
|
}
|
|
@@ -1167,6 +1219,242 @@ async function listChatBotsViaMembersBots(larkAppId, chatId, timeoutMs) {
|
|
|
1167
1219
|
return { ok: false, reason: err?.message ?? String(err), cacheable: true };
|
|
1168
1220
|
}
|
|
1169
1221
|
}
|
|
1222
|
+
/**
|
|
1223
|
+
* Read the current chat's bot members from Feishu and fail closed on any API
|
|
1224
|
+
* error. This is the authorization-grade counterpart to
|
|
1225
|
+
* {@link listChatBotMembers}: it NEVER consults the 30-day observed/cross-ref
|
|
1226
|
+
* fallback and NEVER treats a cached capability failure as membership truth.
|
|
1227
|
+
*
|
|
1228
|
+
* Keep this separate from the user-facing discovery helper. `/members/bots`
|
|
1229
|
+
* is still an undocumented endpoint, so discovery may degrade gracefully; a
|
|
1230
|
+
* permission mutation must not.
|
|
1231
|
+
*/
|
|
1232
|
+
export async function listCurrentChatBotMembers(larkAppId, chatId) {
|
|
1233
|
+
const timeoutMs = config.chatBotDiscovery?.listBotsApiTimeoutMs ?? 3_000;
|
|
1234
|
+
const result = await listChatBotsViaMembersBots(larkAppId, chatId, timeoutMs);
|
|
1235
|
+
if (!result.ok) {
|
|
1236
|
+
throw new Error(`live_chat_bot_members_unavailable: ${result.reason}`);
|
|
1237
|
+
}
|
|
1238
|
+
return result.items.map(item => ({ openId: item.botId, displayName: item.botName }));
|
|
1239
|
+
}
|
|
1240
|
+
/**
|
|
1241
|
+
* Resolve stable configured Lark app ids to the receiver-scoped open_ids that
|
|
1242
|
+
* may be written to the receiver's exact chatGrant.
|
|
1243
|
+
*
|
|
1244
|
+
* This is deliberately stricter than bot discovery. Identity is accepted only
|
|
1245
|
+
* when all three current signals agree: the receiver's live `/members/bots`
|
|
1246
|
+
* row, the subject app's own `is_in_chat` result, and one exact, unique
|
|
1247
|
+
* `bot_name` binding from bots-info.json. Cross-reference and observed-bot
|
|
1248
|
+
* stores are never consulted, because either can be stale or scoped to another
|
|
1249
|
+
* app.
|
|
1250
|
+
*/
|
|
1251
|
+
export async function resolveCurrentChatBotOpenIdsByLarkAppIds(receiverLarkAppId, chatId, subjectLarkAppIds) {
|
|
1252
|
+
const timeoutMs = config.chatBotDiscovery?.listBotsApiTimeoutMs ?? 3_000;
|
|
1253
|
+
const live = await listChatBotsViaMembersBots(receiverLarkAppId, chatId, timeoutMs);
|
|
1254
|
+
if (!live.ok) {
|
|
1255
|
+
return {
|
|
1256
|
+
ok: false,
|
|
1257
|
+
error: 'live_membership_unavailable',
|
|
1258
|
+
message: `live_chat_bot_members_unavailable: ${live.reason}`,
|
|
1259
|
+
};
|
|
1260
|
+
}
|
|
1261
|
+
const configured = getAllBotClients({ refresh: true });
|
|
1262
|
+
const configuredByAppId = new Map(configured.map(entry => [entry.appId, entry]));
|
|
1263
|
+
const namesByAppId = new Map();
|
|
1264
|
+
try {
|
|
1265
|
+
const raw = JSON.parse(readFileSync(join(config.session.dataDir, 'bots-info.json'), 'utf-8'));
|
|
1266
|
+
if (!Array.isArray(raw))
|
|
1267
|
+
throw new Error('bots-info.json must contain an array');
|
|
1268
|
+
for (const entry of raw) {
|
|
1269
|
+
const appId = typeof entry?.larkAppId === 'string' ? entry.larkAppId.trim() : '';
|
|
1270
|
+
const botName = typeof entry?.botName === 'string' ? entry.botName.trim() : '';
|
|
1271
|
+
if (!appId || !botName)
|
|
1272
|
+
continue;
|
|
1273
|
+
const names = namesByAppId.get(appId);
|
|
1274
|
+
if (names)
|
|
1275
|
+
names.push(botName);
|
|
1276
|
+
else
|
|
1277
|
+
namesByAppId.set(appId, [botName]);
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
catch (err) {
|
|
1281
|
+
return {
|
|
1282
|
+
ok: false,
|
|
1283
|
+
error: 'subject_lark_app_name_unavailable',
|
|
1284
|
+
message: `Unable to read a strict bot_name binding: ${err?.message ?? String(err)}`,
|
|
1285
|
+
invalidSubjectLarkAppIds: subjectLarkAppIds,
|
|
1286
|
+
};
|
|
1287
|
+
}
|
|
1288
|
+
const subjectNames = new Map();
|
|
1289
|
+
for (const subjectLarkAppId of subjectLarkAppIds) {
|
|
1290
|
+
if (!configuredByAppId.has(subjectLarkAppId)) {
|
|
1291
|
+
return {
|
|
1292
|
+
ok: false,
|
|
1293
|
+
error: 'subject_lark_app_not_configured',
|
|
1294
|
+
message: 'Every subject app must be configured in this botmux runtime',
|
|
1295
|
+
invalidSubjectLarkAppIds: [subjectLarkAppId],
|
|
1296
|
+
};
|
|
1297
|
+
}
|
|
1298
|
+
const names = namesByAppId.get(subjectLarkAppId) ?? [];
|
|
1299
|
+
if (names.length !== 1) {
|
|
1300
|
+
return {
|
|
1301
|
+
ok: false,
|
|
1302
|
+
error: names.length === 0 ? 'subject_lark_app_name_unavailable' : 'subject_lark_app_ambiguous',
|
|
1303
|
+
message: names.length === 0
|
|
1304
|
+
? 'Every subject app must have one non-empty bot_name in bots-info.json'
|
|
1305
|
+
: 'A subject app has multiple bot_name bindings in bots-info.json',
|
|
1306
|
+
invalidSubjectLarkAppIds: [subjectLarkAppId],
|
|
1307
|
+
};
|
|
1308
|
+
}
|
|
1309
|
+
subjectNames.set(subjectLarkAppId, names[0]);
|
|
1310
|
+
}
|
|
1311
|
+
// If multiple configured apps claim the requested name, probe every claimant.
|
|
1312
|
+
// A strict name is safe only when exactly one claimant is currently in chat
|
|
1313
|
+
// and it is the requested subject app.
|
|
1314
|
+
const candidateAppIds = new Set();
|
|
1315
|
+
const requestedNames = new Set(subjectNames.values());
|
|
1316
|
+
for (const entry of configured) {
|
|
1317
|
+
const names = namesByAppId.get(entry.appId) ?? [];
|
|
1318
|
+
if (names.length === 1 && requestedNames.has(names[0]))
|
|
1319
|
+
candidateAppIds.add(entry.appId);
|
|
1320
|
+
}
|
|
1321
|
+
const inChatByAppId = new Map();
|
|
1322
|
+
for (const appId of candidateAppIds) {
|
|
1323
|
+
const entry = configuredByAppId.get(appId);
|
|
1324
|
+
try {
|
|
1325
|
+
const res = await promiseWithTimeout(larkGet(entry.client, `/open-apis/im/v1/chats/${encodeURIComponent(chatId)}/members/is_in_chat`), timeoutMs, `is_in_chat for ${appId}`);
|
|
1326
|
+
if (res?.code !== 0 || typeof res?.data?.is_in_chat !== 'boolean') {
|
|
1327
|
+
return {
|
|
1328
|
+
ok: false,
|
|
1329
|
+
error: 'live_membership_unavailable',
|
|
1330
|
+
message: `is_in_chat failed for ${appId}: code=${res?.code ?? 'unknown'} msg=${res?.msg ?? ''}`,
|
|
1331
|
+
invalidSubjectLarkAppIds: subjectLarkAppIds.includes(appId) ? [appId] : undefined,
|
|
1332
|
+
};
|
|
1333
|
+
}
|
|
1334
|
+
inChatByAppId.set(appId, res.data.is_in_chat);
|
|
1335
|
+
}
|
|
1336
|
+
catch (err) {
|
|
1337
|
+
return {
|
|
1338
|
+
ok: false,
|
|
1339
|
+
error: 'live_membership_unavailable',
|
|
1340
|
+
message: `is_in_chat failed for ${appId}: ${err?.message ?? String(err)}`,
|
|
1341
|
+
invalidSubjectLarkAppIds: subjectLarkAppIds.includes(appId) ? [appId] : undefined,
|
|
1342
|
+
};
|
|
1343
|
+
}
|
|
1344
|
+
}
|
|
1345
|
+
const mappings = [];
|
|
1346
|
+
const mappedOpenIds = new Set();
|
|
1347
|
+
for (const subjectLarkAppId of subjectLarkAppIds) {
|
|
1348
|
+
const botName = subjectNames.get(subjectLarkAppId);
|
|
1349
|
+
if (inChatByAppId.get(subjectLarkAppId) !== true) {
|
|
1350
|
+
return {
|
|
1351
|
+
ok: false,
|
|
1352
|
+
error: 'subject_lark_app_not_in_chat',
|
|
1353
|
+
message: 'Every subject app must independently confirm it is in the current chat',
|
|
1354
|
+
invalidSubjectLarkAppIds: [subjectLarkAppId],
|
|
1355
|
+
};
|
|
1356
|
+
}
|
|
1357
|
+
const configuredInChatWithName = configured.filter(entry => {
|
|
1358
|
+
const names = namesByAppId.get(entry.appId) ?? [];
|
|
1359
|
+
return names.length === 1 && names[0] === botName && inChatByAppId.get(entry.appId) === true;
|
|
1360
|
+
});
|
|
1361
|
+
const liveRows = live.items.filter(item => item.botName === botName);
|
|
1362
|
+
if (configuredInChatWithName.length !== 1
|
|
1363
|
+
|| configuredInChatWithName[0].appId !== subjectLarkAppId
|
|
1364
|
+
|| liveRows.length !== 1
|
|
1365
|
+
|| mappedOpenIds.has(liveRows[0]?.botId)) {
|
|
1366
|
+
return {
|
|
1367
|
+
ok: false,
|
|
1368
|
+
error: 'subject_lark_app_ambiguous',
|
|
1369
|
+
message: 'Stable app identity did not bind to exactly one live bot_name row',
|
|
1370
|
+
invalidSubjectLarkAppIds: [subjectLarkAppId],
|
|
1371
|
+
};
|
|
1372
|
+
}
|
|
1373
|
+
mappings.push({ larkAppId: subjectLarkAppId, subjectOpenId: liveRows[0].botId });
|
|
1374
|
+
mappedOpenIds.add(liveRows[0].botId);
|
|
1375
|
+
}
|
|
1376
|
+
return { ok: true, mappings };
|
|
1377
|
+
}
|
|
1378
|
+
/**
|
|
1379
|
+
* Resolve a foreign-bot SENDER open_id (receiver-scoped) to a same-deployment
|
|
1380
|
+
* sibling, using only live authorization-grade signals — never the possibly
|
|
1381
|
+
* stale/uninitialized cross-ref or observed stores. This closes the cold-start
|
|
1382
|
+
* window where a same-machine sibling @s a receiver whose cross-ref has not yet
|
|
1383
|
+
* learned that sibling's receiver-scoped open_id (Lark open_id is per-app).
|
|
1384
|
+
*
|
|
1385
|
+
* Identity is accepted only when all signals agree, mirroring
|
|
1386
|
+
* {@link resolveCurrentChatBotOpenIdsByLarkAppIds}:
|
|
1387
|
+
* 1. the receiver's live `/members/bots` row carries `bot_id === senderOpenId`;
|
|
1388
|
+
* 2. exactly one locally-configured bot (other than the receiver) has that
|
|
1389
|
+
* exact `bot_name` in bots-info.json — a unique name binding;
|
|
1390
|
+
* 3. that candidate app independently confirms `is_in_chat` and binds to
|
|
1391
|
+
* exactly one live row for its name (the strict resolver's own re-check).
|
|
1392
|
+
*
|
|
1393
|
+
* Fails closed (returns `{ ok: false }`) on any API error, ambiguity, or name
|
|
1394
|
+
* collision, so the caller falls back to the `/grant` request card. Never
|
|
1395
|
+
* authorizes a genuine external bot: an external sender's open_id has no
|
|
1396
|
+
* locally-configured app of the same unique name, so step 2 fails.
|
|
1397
|
+
*/
|
|
1398
|
+
export async function resolveSiblingBotBySenderOpenId(receiverLarkAppId, chatId, senderOpenId) {
|
|
1399
|
+
if (!senderOpenId)
|
|
1400
|
+
return { ok: false, reason: 'no_sender_open_id' };
|
|
1401
|
+
const timeoutMs = config.chatBotDiscovery?.listBotsApiTimeoutMs ?? 3_000;
|
|
1402
|
+
const live = await listChatBotsViaMembersBots(receiverLarkAppId, chatId, timeoutMs);
|
|
1403
|
+
if (!live.ok)
|
|
1404
|
+
return { ok: false, reason: `live_membership_unavailable: ${live.reason}` };
|
|
1405
|
+
// 1. The sender must appear in the receiver's live bot roster by open_id.
|
|
1406
|
+
const liveRow = live.items.find(item => item.botId === senderOpenId);
|
|
1407
|
+
if (!liveRow)
|
|
1408
|
+
return { ok: false, reason: 'sender_not_in_live_roster' };
|
|
1409
|
+
const botName = liveRow.botName;
|
|
1410
|
+
// 2. Exactly one locally-configured sibling (≠ receiver) must claim that
|
|
1411
|
+
// exact name. Read the controlled config fresh — a sibling appended after
|
|
1412
|
+
// this process started must still be recognized (auth boundary).
|
|
1413
|
+
let candidateAppIds = [];
|
|
1414
|
+
try {
|
|
1415
|
+
const raw = JSON.parse(readFileSync(join(config.session.dataDir, 'bots-info.json'), 'utf-8'));
|
|
1416
|
+
if (!Array.isArray(raw))
|
|
1417
|
+
throw new Error('bots-info.json must contain an array');
|
|
1418
|
+
const namesByAppId = new Map();
|
|
1419
|
+
for (const entry of raw) {
|
|
1420
|
+
const appId = typeof entry?.larkAppId === 'string' ? entry.larkAppId.trim() : '';
|
|
1421
|
+
const name = typeof entry?.botName === 'string' ? entry.botName.trim() : '';
|
|
1422
|
+
if (!appId || !name)
|
|
1423
|
+
continue;
|
|
1424
|
+
const names = namesByAppId.get(appId);
|
|
1425
|
+
if (names)
|
|
1426
|
+
names.push(name);
|
|
1427
|
+
else
|
|
1428
|
+
namesByAppId.set(appId, [name]);
|
|
1429
|
+
}
|
|
1430
|
+
for (const [appId, names] of namesByAppId) {
|
|
1431
|
+
if (appId === receiverLarkAppId)
|
|
1432
|
+
continue;
|
|
1433
|
+
// Require a unique name binding for the app — an app with multiple names
|
|
1434
|
+
// is ambiguous and must not shortcut vetting.
|
|
1435
|
+
if (names.length === 1 && names[0] === botName)
|
|
1436
|
+
candidateAppIds.push(appId);
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
catch (err) {
|
|
1440
|
+
return { ok: false, reason: `bots_info_unavailable: ${err?.message ?? String(err)}` };
|
|
1441
|
+
}
|
|
1442
|
+
if (candidateAppIds.length !== 1) {
|
|
1443
|
+
return { ok: false, reason: candidateAppIds.length === 0 ? 'no_sibling_with_name' : 'ambiguous_sibling_name' };
|
|
1444
|
+
}
|
|
1445
|
+
const candidateAppId = candidateAppIds[0];
|
|
1446
|
+
// 3. Delegate the strict re-check (is_in_chat + unique name + unique live
|
|
1447
|
+
// row) to the auth-grade resolver, then require it to bind back to exactly
|
|
1448
|
+
// the sender's open_id.
|
|
1449
|
+
const resolved = await resolveCurrentChatBotOpenIdsByLarkAppIds(receiverLarkAppId, chatId, [candidateAppId]);
|
|
1450
|
+
if (!resolved.ok)
|
|
1451
|
+
return { ok: false, reason: `strict_resolve_failed: ${resolved.error}` };
|
|
1452
|
+
const mapping = resolved.mappings.find(m => m.larkAppId === candidateAppId);
|
|
1453
|
+
if (!mapping || mapping.subjectOpenId !== senderOpenId) {
|
|
1454
|
+
return { ok: false, reason: 'strict_resolve_open_id_mismatch' };
|
|
1455
|
+
}
|
|
1456
|
+
return { ok: true, larkAppId: candidateAppId, botName, senderOpenId };
|
|
1457
|
+
}
|
|
1170
1458
|
// `/members/bots` returns the observer-scoped mention handle (`bot_id`) and
|
|
1171
1459
|
// display name only. Bind botmux identity only when a configured bot has already
|
|
1172
1460
|
// been proven to be in this chat and the name match is unique, OR the item's
|