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
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bots.json sandbox-config auto-migration (old fields → fs-policy model).
|
|
3
|
+
*
|
|
4
|
+
* Runs at daemon startup, inside the shared cross-process file lock (multiple
|
|
5
|
+
* per-bot daemons boot concurrently against the same bots.json). Writes the
|
|
6
|
+
* NEW fields while KEEPING the legacy ones on disk — a downgraded daemon reads
|
|
7
|
+
* the untouched legacy fields, so downgrade needs no reverse script (design
|
|
8
|
+
* doc §6.2: upgrade rewrites, downgrade is zero-op). The original file is
|
|
9
|
+
* backed up once to `bots.json.bak-sandbox-v1` before the first rewrite.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent: entries that already carry `sandboxPaths` (or have nothing to
|
|
12
|
+
* migrate) are skipped, so every subsequent boot is a no-op.
|
|
13
|
+
*/
|
|
14
|
+
import { promises as fsp, existsSync } from 'node:fs';
|
|
15
|
+
import { resolve } from 'node:path';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { withFileLock } from '../utils/file-lock.js';
|
|
18
|
+
import { writeRawConfigAtomic } from './config-store.js';
|
|
19
|
+
import { migrateLegacySandboxFields } from '../adapters/cli/fs-policy.js';
|
|
20
|
+
import { logger } from '../utils/logger.js';
|
|
21
|
+
/** The bots.json path the daemon will load (same resolution as loadBotConfigs). */
|
|
22
|
+
export function resolveBotsConfigPath() {
|
|
23
|
+
const fromEnv = process.env.BOTS_CONFIG;
|
|
24
|
+
if (fromEnv) {
|
|
25
|
+
const p = resolve(fromEnv);
|
|
26
|
+
return existsSync(p) ? p : null;
|
|
27
|
+
}
|
|
28
|
+
const p = resolve(homedir(), '.botmux', 'bots.json');
|
|
29
|
+
return existsSync(p) ? p : null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Migrate every entry's legacy sandbox fields in `path`. Returns the appIds
|
|
33
|
+
* that were migrated (empty = file untouched). Never throws on a malformed
|
|
34
|
+
* file — migration must not brick daemon startup; loadBotConfigs surfaces
|
|
35
|
+
* parse errors with better context right after.
|
|
36
|
+
*/
|
|
37
|
+
export async function migrateSandboxConfigOnDisk(path) {
|
|
38
|
+
try {
|
|
39
|
+
return await withFileLock(path, async () => {
|
|
40
|
+
let raw;
|
|
41
|
+
try {
|
|
42
|
+
raw = JSON.parse(await fsp.readFile(path, 'utf-8'));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return { migrated: [] };
|
|
46
|
+
}
|
|
47
|
+
if (!Array.isArray(raw))
|
|
48
|
+
return { migrated: [] };
|
|
49
|
+
const migrated = [];
|
|
50
|
+
for (const entry of raw) {
|
|
51
|
+
if (!entry || typeof entry !== 'object')
|
|
52
|
+
continue;
|
|
53
|
+
const m = migrateLegacySandboxFields(entry);
|
|
54
|
+
if (!m)
|
|
55
|
+
continue;
|
|
56
|
+
entry.sandbox = m.sandbox;
|
|
57
|
+
if (m.sandboxPaths)
|
|
58
|
+
entry.sandboxPaths = m.sandboxPaths;
|
|
59
|
+
migrated.push(typeof entry.larkAppId === 'string' ? entry.larkAppId : '<unknown>');
|
|
60
|
+
}
|
|
61
|
+
if (!migrated.length)
|
|
62
|
+
return { migrated };
|
|
63
|
+
const bak = `${path}.bak-sandbox-v1`;
|
|
64
|
+
if (!existsSync(bak)) {
|
|
65
|
+
await fsp.copyFile(path, bak);
|
|
66
|
+
await fsp.chmod(bak, 0o600);
|
|
67
|
+
}
|
|
68
|
+
await writeRawConfigAtomic(path, raw);
|
|
69
|
+
logger.info(`[sandbox-migration] migrated legacy sandbox fields for ${migrated.length} bot(s): ${migrated.join(', ')} (backup: ${bak})`);
|
|
70
|
+
return { migrated };
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
logger.warn(`[sandbox-migration] skipped (${err instanceof Error ? err.message : String(err)})`);
|
|
75
|
+
return { migrated: [] };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Startup convenience: resolve the config path and migrate if present. */
|
|
79
|
+
export async function migrateSandboxConfigAtStartup() {
|
|
80
|
+
const path = resolveBotsConfigPath();
|
|
81
|
+
if (!path)
|
|
82
|
+
return;
|
|
83
|
+
await migrateSandboxConfigOnDisk(path);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=sandbox-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-migration.js","sourceRoot":"","sources":["../../src/services/sandbox-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,4 +19,32 @@ export declare function updateBotReadIsolation(larkAppId: string, enabled: boole
|
|
|
19
19
|
ok: false;
|
|
20
20
|
reason: string;
|
|
21
21
|
}>;
|
|
22
|
+
/** The three-tier sandbox path lists a bot may declare (highest-precedence
|
|
23
|
+
* layer of the FsPolicy). Empty/absent tiers fall back to deny-by-default. */
|
|
24
|
+
export interface SandboxPathTiers {
|
|
25
|
+
readWrite?: string[];
|
|
26
|
+
readOnly?: string[];
|
|
27
|
+
deny?: string[];
|
|
28
|
+
}
|
|
29
|
+
/** Current configured sandboxPaths for a bot (undefined = none set). */
|
|
30
|
+
export declare function getBotSandboxPaths(larkAppId: string): SandboxPathTiers | undefined;
|
|
31
|
+
/** Normalize a three-tier sandboxPaths object for storage: per-tier trim/dedup,
|
|
32
|
+
* then CROSS-TIER dedup resolving a path listed in >1 tier to the MORE
|
|
33
|
+
* RESTRICTIVE tier (deny > readOnly > readWrite) — matching fs-policy's
|
|
34
|
+
* mergeFsRules same-source tie-break, so what's stored matches what the sandbox
|
|
35
|
+
* (and the dashboard UI/tester) resolve. Returns `{}` when every tier is empty
|
|
36
|
+
* (caller treats that as "clear the field"). Pure — unit-tested directly. */
|
|
37
|
+
export declare function normalizeSandboxPaths(tiers: SandboxPathTiers): SandboxPathTiers;
|
|
38
|
+
/** Per-bot sandboxPaths (readWrite/readOnly/deny) persistence. Same contract as
|
|
39
|
+
* {@link updateBotSandbox}: atomic bots.json write + in-memory sync, so the next
|
|
40
|
+
* session spawn reads `botCfg.sandboxPaths` without a daemon restart. Passing an
|
|
41
|
+
* all-empty tiers object CLEARS the field (bots.json stays clean → pure
|
|
42
|
+
* deny-by-default baseline). */
|
|
43
|
+
export declare function updateBotSandboxPaths(larkAppId: string, tiers: SandboxPathTiers): Promise<{
|
|
44
|
+
ok: true;
|
|
45
|
+
sandboxPaths?: SandboxPathTiers;
|
|
46
|
+
} | {
|
|
47
|
+
ok: false;
|
|
48
|
+
reason: string;
|
|
49
|
+
}>;
|
|
22
50
|
//# sourceMappingURL=sandbox-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-store.d.ts","sourceRoot":"","sources":["../../src/services/sandbox-store.ts"],"names":[],"mappings":"AAUA,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAczE;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;uFAEuF;AACvF,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAc/E"}
|
|
1
|
+
{"version":3,"file":"sandbox-store.d.ts","sourceRoot":"","sources":["../../src/services/sandbox-store.ts"],"names":[],"mappings":"AAUA,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAczE;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;uFAEuF;AACvF,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAc/E;AAED;+EAC+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAElF;AAkBD;;;;;8EAK8E;AAC9E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAc/E;AAED;;;;iCAIiC;AACjC,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBxF"}
|
|
@@ -70,4 +70,86 @@ export async function updateBotReadIsolation(larkAppId, enabled) {
|
|
|
70
70
|
logger.info(`[read-isolation:${larkAppId}] readIsolation → ${enabled}`);
|
|
71
71
|
return { ok: true, readIsolation: enabled };
|
|
72
72
|
}
|
|
73
|
+
/** Current configured sandboxPaths for a bot (undefined = none set). */
|
|
74
|
+
export function getBotSandboxPaths(larkAppId) {
|
|
75
|
+
try {
|
|
76
|
+
return getBot(larkAppId).config.sandboxPaths;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Trim + drop empties + dedupe one tier's path list. Returns undefined for an
|
|
83
|
+
* empty result so an all-empty tiers object collapses to "no sandboxPaths". */
|
|
84
|
+
function normalizeTier(list) {
|
|
85
|
+
if (!Array.isArray(list))
|
|
86
|
+
return undefined;
|
|
87
|
+
const seen = new Set();
|
|
88
|
+
const out = [];
|
|
89
|
+
for (const raw of list) {
|
|
90
|
+
if (typeof raw !== 'string')
|
|
91
|
+
continue;
|
|
92
|
+
const p = raw.trim();
|
|
93
|
+
if (!p || seen.has(p))
|
|
94
|
+
continue;
|
|
95
|
+
seen.add(p);
|
|
96
|
+
out.push(p);
|
|
97
|
+
}
|
|
98
|
+
return out.length ? out : undefined;
|
|
99
|
+
}
|
|
100
|
+
/** Normalize a three-tier sandboxPaths object for storage: per-tier trim/dedup,
|
|
101
|
+
* then CROSS-TIER dedup resolving a path listed in >1 tier to the MORE
|
|
102
|
+
* RESTRICTIVE tier (deny > readOnly > readWrite) — matching fs-policy's
|
|
103
|
+
* mergeFsRules same-source tie-break, so what's stored matches what the sandbox
|
|
104
|
+
* (and the dashboard UI/tester) resolve. Returns `{}` when every tier is empty
|
|
105
|
+
* (caller treats that as "clear the field"). Pure — unit-tested directly. */
|
|
106
|
+
export function normalizeSandboxPaths(tiers) {
|
|
107
|
+
const rw = normalizeTier(tiers.readWrite);
|
|
108
|
+
const ro = normalizeTier(tiers.readOnly);
|
|
109
|
+
const deny = normalizeTier(tiers.deny);
|
|
110
|
+
const normPath = (p) => p.replace(/\/+$/, '') || '/';
|
|
111
|
+
const denySet = new Set((deny ?? []).map(normPath));
|
|
112
|
+
const roSet = new Set((ro ?? []).map(normPath));
|
|
113
|
+
const keptRw = (rw ?? []).filter(p => !denySet.has(normPath(p)) && !roSet.has(normPath(p)));
|
|
114
|
+
const keptRo = (ro ?? []).filter(p => !denySet.has(normPath(p)));
|
|
115
|
+
const out = {};
|
|
116
|
+
if (keptRw.length)
|
|
117
|
+
out.readWrite = keptRw;
|
|
118
|
+
if (keptRo.length)
|
|
119
|
+
out.readOnly = keptRo;
|
|
120
|
+
if (deny)
|
|
121
|
+
out.deny = deny;
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
/** Per-bot sandboxPaths (readWrite/readOnly/deny) persistence. Same contract as
|
|
125
|
+
* {@link updateBotSandbox}: atomic bots.json write + in-memory sync, so the next
|
|
126
|
+
* session spawn reads `botCfg.sandboxPaths` without a daemon restart. Passing an
|
|
127
|
+
* all-empty tiers object CLEARS the field (bots.json stays clean → pure
|
|
128
|
+
* deny-by-default baseline). */
|
|
129
|
+
export async function updateBotSandboxPaths(larkAppId, tiers) {
|
|
130
|
+
let bot;
|
|
131
|
+
try {
|
|
132
|
+
bot = getBot(larkAppId);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return { ok: false, reason: 'bot_not_registered' };
|
|
136
|
+
}
|
|
137
|
+
const normalized = normalizeSandboxPaths(tiers);
|
|
138
|
+
const isEmpty = !normalized.readWrite && !normalized.readOnly && !normalized.deny;
|
|
139
|
+
const r = await rmwBotEntry(larkAppId, (entry) => {
|
|
140
|
+
if (isEmpty)
|
|
141
|
+
delete entry.sandboxPaths; // clear → preserves deny-by-default baseline
|
|
142
|
+
else
|
|
143
|
+
entry.sandboxPaths = normalized;
|
|
144
|
+
return { write: true, result: isEmpty ? undefined : normalized };
|
|
145
|
+
});
|
|
146
|
+
if (!r.ok)
|
|
147
|
+
return { ok: false, reason: r.reason };
|
|
148
|
+
if (isEmpty)
|
|
149
|
+
delete bot.config.sandboxPaths;
|
|
150
|
+
else
|
|
151
|
+
bot.config.sandboxPaths = normalized;
|
|
152
|
+
logger.info(`[sandbox:${larkAppId}] sandboxPaths → rw=${normalized.readWrite?.length ?? 0} ro=${normalized.readOnly?.length ?? 0} deny=${normalized.deny?.length ?? 0}`);
|
|
153
|
+
return { ok: true, sandboxPaths: isEmpty ? undefined : normalized };
|
|
154
|
+
}
|
|
73
155
|
//# sourceMappingURL=sandbox-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-store.js","sourceRoot":"","sources":["../../src/services/sandbox-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox-store.js","sourceRoot":"","sources":["../../src/services/sandbox-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AskQuestion } from '../core/ask-types.js';
|
|
2
|
+
export interface TraexUserInputQuestion {
|
|
3
|
+
id: string;
|
|
4
|
+
question: AskQuestion;
|
|
5
|
+
}
|
|
6
|
+
export type TraexUserInputParseResult = {
|
|
7
|
+
kind: 'answerable';
|
|
8
|
+
questions: TraexUserInputQuestion[];
|
|
9
|
+
} | {
|
|
10
|
+
kind: 'unsupported';
|
|
11
|
+
reason: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Convert TRAE's app-server requestUserInput payload into the existing
|
|
15
|
+
* button-card contract. The card cannot faithfully represent a free-text or
|
|
16
|
+
* malformed question, so a mixed batch must not silently drop those questions.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseTraexUserInputQuestions(params: unknown): TraexUserInputParseResult;
|
|
19
|
+
//# sourceMappingURL=traex-user-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traex-user-input.d.ts","sourceRoot":"","sources":["../../src/services/traex-user-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,sBAAsB,EAAE,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,GAAG,yBAAyB,CAqDvF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert TRAE's app-server requestUserInput payload into the existing
|
|
3
|
+
* button-card contract. The card cannot faithfully represent a free-text or
|
|
4
|
+
* malformed question, so a mixed batch must not silently drop those questions.
|
|
5
|
+
*/
|
|
6
|
+
export function parseTraexUserInputQuestions(params) {
|
|
7
|
+
if (!params || typeof params !== 'object' || Array.isArray(params)) {
|
|
8
|
+
return { kind: 'unsupported', reason: 'missing request parameters' };
|
|
9
|
+
}
|
|
10
|
+
const rawQuestions = params.questions;
|
|
11
|
+
if (!Array.isArray(rawQuestions) || rawQuestions.length === 0) {
|
|
12
|
+
return { kind: 'unsupported', reason: 'missing questions' };
|
|
13
|
+
}
|
|
14
|
+
const questions = [];
|
|
15
|
+
const ids = new Set();
|
|
16
|
+
for (let index = 0; index < rawQuestions.length; index++) {
|
|
17
|
+
const raw = rawQuestions[index];
|
|
18
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
19
|
+
return { kind: 'unsupported', reason: `question ${index + 1} is malformed` };
|
|
20
|
+
}
|
|
21
|
+
const question = raw;
|
|
22
|
+
if (!Array.isArray(question.options) || question.options.length < 2) {
|
|
23
|
+
return { kind: 'unsupported', reason: `question ${index + 1} has fewer than two options` };
|
|
24
|
+
}
|
|
25
|
+
const options = [];
|
|
26
|
+
for (const option of question.options) {
|
|
27
|
+
if (!option || typeof option !== 'object' || Array.isArray(option)) {
|
|
28
|
+
return { kind: 'unsupported', reason: `question ${index + 1} has a malformed option` };
|
|
29
|
+
}
|
|
30
|
+
const label = option.label;
|
|
31
|
+
if (typeof label !== 'string' || !label.trim()) {
|
|
32
|
+
return { kind: 'unsupported', reason: `question ${index + 1} has an invalid option label` };
|
|
33
|
+
}
|
|
34
|
+
options.push({ key: label, label });
|
|
35
|
+
}
|
|
36
|
+
const id = typeof question.id === 'string' && question.id ? question.id : `q${index}`;
|
|
37
|
+
if (ids.has(id)) {
|
|
38
|
+
return { kind: 'unsupported', reason: `duplicate question id: ${id}` };
|
|
39
|
+
}
|
|
40
|
+
ids.add(id);
|
|
41
|
+
const prompt = typeof question.question === 'string' && question.question.trim()
|
|
42
|
+
? question.question
|
|
43
|
+
: typeof question.header === 'string' && question.header.trim()
|
|
44
|
+
? question.header
|
|
45
|
+
: `Question ${index + 1}`;
|
|
46
|
+
questions.push({
|
|
47
|
+
id,
|
|
48
|
+
question: {
|
|
49
|
+
prompt,
|
|
50
|
+
multiSelect: question.multiSelect === true,
|
|
51
|
+
options,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return { kind: 'answerable', questions };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=traex-user-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traex-user-input.js","sourceRoot":"","sources":["../../src/services/traex-user-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,10 +64,14 @@ export type OpenPlatformAutomationResult = {
|
|
|
64
64
|
missingVcEvents: string[];
|
|
65
65
|
/** 回读确认事件接收方式已是长连接(ok:true 时恒为 true,显式带回供门函数统一判定)。 */
|
|
66
66
|
eventModeReady: boolean;
|
|
67
|
+
/** Managed onboarding only: exact same-session event mode readback. */
|
|
68
|
+
eventMode?: number;
|
|
69
|
+
/** Managed onboarding only: exact baseline event + callback count read back before session cleanup. */
|
|
70
|
+
verifiedEventCount?: number;
|
|
67
71
|
versionId?: string;
|
|
68
72
|
} | {
|
|
69
73
|
ok: false;
|
|
70
|
-
reason: 'unsupported_brand' | 'missing_session' | 'invalid_session' | 'login_failed' | 'qr_expired' | 'timeout' | 'missing_csrf' | 'scope_mapping_failed' | 'network' | 'api_error';
|
|
74
|
+
reason: 'unsupported_brand' | 'missing_session' | 'invalid_session' | 'login_failed' | 'qr_expired' | 'timeout' | 'missing_csrf' | 'owner_session_mismatch' | 'scope_mapping_failed' | 'event_verification_failed' | 'version_verification_failed' | 'network' | 'api_error';
|
|
71
75
|
message: string;
|
|
72
76
|
sessionFile?: string;
|
|
73
77
|
/** Number of events successfully subscribed (0 when event update failed before downstream error). */
|
|
@@ -78,6 +82,12 @@ export type OpenPlatformAutomationResult = {
|
|
|
78
82
|
missingVcEvents?: string[];
|
|
79
83
|
/** 事件接收方式是否回读确认为长连接(走到订阅阶段才有;早期失败为 undefined)。 */
|
|
80
84
|
eventModeReady?: boolean;
|
|
85
|
+
/** Managed onboarding exact event-mode ACK, preserved across later scope propagation failure. */
|
|
86
|
+
eventMode?: number;
|
|
87
|
+
/** Managed onboarding exact baseline count ACK, preserved across later scope propagation failure. */
|
|
88
|
+
verifiedEventCount?: number;
|
|
89
|
+
/** Exact published version ACK, preserved across later scope propagation failure. */
|
|
90
|
+
versionId?: string;
|
|
81
91
|
};
|
|
82
92
|
export interface OpenPlatformAutomationOptions {
|
|
83
93
|
appId: string;
|
|
@@ -85,10 +95,12 @@ export interface OpenPlatformAutomationOptions {
|
|
|
85
95
|
sessionFilePath?: string;
|
|
86
96
|
bytedcliFallbackSessionFilePath?: string;
|
|
87
97
|
disableBytedcliFallback?: boolean;
|
|
88
|
-
/** Ignore cached
|
|
98
|
+
/** Ignore any shared cached account and require the exact App owner to scan. */
|
|
89
99
|
forceQrLogin?: boolean;
|
|
90
100
|
/** Reuse a valid cache or fail instead of presenting another QR. */
|
|
91
101
|
disableQrLogin?: boolean;
|
|
102
|
+
/** Require all baseline events/callbacks and a published version to be proven before managed activation. */
|
|
103
|
+
requireVerifiedEvents?: boolean;
|
|
92
104
|
fetchImpl?: typeof fetch;
|
|
93
105
|
scopeManifest?: ScopeManifest;
|
|
94
106
|
pollIntervalMs?: number;
|
|
@@ -97,6 +109,10 @@ export interface OpenPlatformAutomationOptions {
|
|
|
97
109
|
qrText: string;
|
|
98
110
|
qrPayload: string;
|
|
99
111
|
}) => void | Promise<void>;
|
|
112
|
+
/** Emitted once only after Feishu reports this exact QR as scanned. */
|
|
113
|
+
onQrScanConfirmed?: (info: {
|
|
114
|
+
confirmedAt: number;
|
|
115
|
+
}) => void | Promise<void>;
|
|
100
116
|
onStatus?: (message: string) => void | Promise<void>;
|
|
101
117
|
}
|
|
102
118
|
export type FeishuWebSessionSource = 'botmux_cache' | 'qr_login' | 'bytedcli_fallback';
|
|
@@ -133,6 +149,10 @@ export interface FeishuWebSessionOptions {
|
|
|
133
149
|
qrText: string;
|
|
134
150
|
qrPayload: string;
|
|
135
151
|
}) => void | Promise<void>;
|
|
152
|
+
/** Emitted once only after polling observes Feishu status=2 for this QR. */
|
|
153
|
+
onQrScanConfirmed?: (info: {
|
|
154
|
+
confirmedAt: number;
|
|
155
|
+
}) => void | Promise<void>;
|
|
136
156
|
onStatus?: (message: string) => void | Promise<void>;
|
|
137
157
|
}
|
|
138
158
|
export type FeishuOpenPlatformSessionInspectionResult = {
|
|
@@ -378,7 +398,8 @@ export declare function listOpenPlatformApps(client: OpenPlatformApiClient, opts
|
|
|
378
398
|
export declare function fetchOpenPlatformAppSecret(client: OpenPlatformApiClient, clientId: string): Promise<string>;
|
|
379
399
|
export declare class OpenPlatformApiError extends Error {
|
|
380
400
|
readonly payload: unknown;
|
|
381
|
-
|
|
401
|
+
readonly status: number;
|
|
402
|
+
constructor(message: string, payload: unknown, status: number);
|
|
382
403
|
}
|
|
383
404
|
/** 从 app_version/list 响应算下一个版本号(最新已发布 +1,无发布版 → 0.0.1)。 */
|
|
384
405
|
export declare function nextAppVersion(payload: unknown): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-platform-automation.d.ts","sourceRoot":"","sources":["../../src/setup/open-platform-automation.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,uMAO1B,CAAC;AAEX,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,oCAAqC,CAAC;AAE1E,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,kCAAmC,CAAC;AAEvE,oCAAoC;AACpC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAS5C,eAAO,MAAM,qBAAqB,yIAEjC,CAAC;AACF,eAAO,MAAM,sBAAsB,yIAElC,CAAC;AAEF,eAAO,MAAM,mBAAmB,mCAAmC,CAAC;AAYpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,+CAA+C;AAC/C,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,4BAA4B,GACpC;IACE,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,sBAAsB,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,sDAAsD;IACtD,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EACF,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,cAAc,GACd,YAAY,GACZ,SAAS,GACT,cAAc,GACd,sBAAsB,GACtB,SAAS,GACT,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"open-platform-automation.d.ts","sourceRoot":"","sources":["../../src/setup/open-platform-automation.ts"],"names":[],"mappings":"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"}
|
|
@@ -394,6 +394,7 @@ export async function automateOpenPlatformSetup(options) {
|
|
|
394
394
|
pollIntervalMs: options.pollIntervalMs,
|
|
395
395
|
maxWaitMs: options.maxWaitMs,
|
|
396
396
|
onQrCode: options.onQrCode,
|
|
397
|
+
onQrScanConfirmed: options.onQrScanConfirmed,
|
|
397
398
|
onStatus: options.onStatus,
|
|
398
399
|
});
|
|
399
400
|
if (!preparedSession.ok) {
|
|
@@ -460,10 +461,10 @@ export async function automateOpenPlatformSetup(options) {
|
|
|
460
461
|
data = null;
|
|
461
462
|
}
|
|
462
463
|
if (!response.ok) {
|
|
463
|
-
throw new OpenPlatformApiError(`HTTP ${response.status} ${path}: ${summarizeOpenPlatformPayload(data)}`, data);
|
|
464
|
+
throw new OpenPlatformApiError(`HTTP ${response.status} ${path}: ${summarizeOpenPlatformPayload(data)}`, data, response.status);
|
|
464
465
|
}
|
|
465
466
|
if (data && typeof data === 'object' && typeof data.code === 'number' && data.code !== 0) {
|
|
466
|
-
throw new OpenPlatformApiError(`code=${data.code} msg=${data.msg ?? data.message ?? ''}`, data);
|
|
467
|
+
throw new OpenPlatformApiError(`code=${data.code} msg=${data.msg ?? data.message ?? ''}`, data, response.status);
|
|
467
468
|
}
|
|
468
469
|
return data;
|
|
469
470
|
};
|
|
@@ -472,7 +473,12 @@ export async function automateOpenPlatformSetup(options) {
|
|
|
472
473
|
allScopesPayload = await postJson(`/developers/v1/scope/all/${options.appId}`);
|
|
473
474
|
}
|
|
474
475
|
catch (err) {
|
|
475
|
-
return {
|
|
476
|
+
return {
|
|
477
|
+
ok: false,
|
|
478
|
+
reason: openPlatformOwnerAccessDenied(err) ? 'owner_session_mismatch' : 'api_error',
|
|
479
|
+
message: `读取开放平台 scope 列表失败: ${safeErrorMessage(err)}`,
|
|
480
|
+
sessionFile,
|
|
481
|
+
};
|
|
476
482
|
}
|
|
477
483
|
const manifest = options.scopeManifest ?? readDefaultScopeManifest();
|
|
478
484
|
const catalog = extractOpenPlatformScopeEntries(allScopesPayload);
|
|
@@ -615,7 +621,7 @@ export async function automateOpenPlatformSetup(options) {
|
|
|
615
621
|
+ BOT_BASELINE_CALLBACKS.filter(name => callbackState?.callbacks.includes(name)).length;
|
|
616
622
|
const eventWarning = eventWarnings.length > 0 ? eventWarnings.join('; ') : undefined;
|
|
617
623
|
const criticalIssues = [
|
|
618
|
-
...BOT_CRITICAL_APP_EVENTS.filter(name => !hasEvent(name)),
|
|
624
|
+
...(options.requireVerifiedEvents ? missingBaselineEvents : BOT_CRITICAL_APP_EVENTS.filter(name => !hasEvent(name))),
|
|
619
625
|
...missingCallbacks,
|
|
620
626
|
];
|
|
621
627
|
// 长连接模式必须以回读为准:switch 接口返回成功≠生效,mode 不是 4 时
|
|
@@ -631,7 +637,7 @@ export async function automateOpenPlatformSetup(options) {
|
|
|
631
637
|
if (criticalIssues.length > 0) {
|
|
632
638
|
return {
|
|
633
639
|
ok: false,
|
|
634
|
-
reason: 'api_error',
|
|
640
|
+
reason: options.requireVerifiedEvents ? 'event_verification_failed' : 'api_error',
|
|
635
641
|
message: `核心事件/回调订阅未生效(${criticalIssues.join('; ')}),机器人将收不到消息或卡片点击;请到开放平台「事件与回调」手动补齐后重试`,
|
|
636
642
|
sessionFile,
|
|
637
643
|
subscribedEventCount,
|
|
@@ -653,6 +659,18 @@ export async function automateOpenPlatformSetup(options) {
|
|
|
653
659
|
const appVersion = nextAppVersion(versionList);
|
|
654
660
|
const created = await postJson(`/developers/v1/app_version/create/${options.appId}`, buildAppVersionCreatePayload(appVersion, visibleMemberIds));
|
|
655
661
|
const versionId = extractVersionId(created);
|
|
662
|
+
if (options.requireVerifiedEvents && !versionId) {
|
|
663
|
+
return {
|
|
664
|
+
ok: false,
|
|
665
|
+
reason: 'version_verification_failed',
|
|
666
|
+
message: '开放平台未返回可发布的精确版本 ID,受管机器人保持未激活',
|
|
667
|
+
sessionFile,
|
|
668
|
+
subscribedEventCount,
|
|
669
|
+
eventWarning,
|
|
670
|
+
missingVcEvents,
|
|
671
|
+
eventModeReady,
|
|
672
|
+
};
|
|
673
|
+
}
|
|
656
674
|
if (versionId) {
|
|
657
675
|
await postJson(`/developers/v1/publish/commit/${options.appId}/${versionId}`, { clientId: options.appId });
|
|
658
676
|
}
|
|
@@ -668,6 +686,12 @@ export async function automateOpenPlatformSetup(options) {
|
|
|
668
686
|
eventWarning,
|
|
669
687
|
missingVcEvents,
|
|
670
688
|
eventModeReady,
|
|
689
|
+
...(options.requireVerifiedEvents
|
|
690
|
+
? {
|
|
691
|
+
eventMode: eventState?.eventMode,
|
|
692
|
+
verifiedEventCount: BOT_BASELINE_APP_EVENTS.length + BOT_BASELINE_CALLBACKS.length,
|
|
693
|
+
}
|
|
694
|
+
: {}),
|
|
671
695
|
versionId,
|
|
672
696
|
};
|
|
673
697
|
}
|
|
@@ -755,10 +779,10 @@ export async function createOpenPlatformApiClient(cookies, opts = {}) {
|
|
|
755
779
|
data = null;
|
|
756
780
|
}
|
|
757
781
|
if (!response.ok) {
|
|
758
|
-
throw new OpenPlatformApiError(`HTTP ${response.status} ${path}: ${summarizeOpenPlatformPayload(data)}`, data);
|
|
782
|
+
throw new OpenPlatformApiError(`HTTP ${response.status} ${path}: ${summarizeOpenPlatformPayload(data)}`, data, response.status);
|
|
759
783
|
}
|
|
760
784
|
if (data && typeof data === 'object' && typeof data.code === 'number' && data.code !== 0) {
|
|
761
|
-
throw new OpenPlatformApiError(`code=${data.code} msg=${data.msg ?? data.message ?? ''}`, data);
|
|
785
|
+
throw new OpenPlatformApiError(`code=${data.code} msg=${data.msg ?? data.message ?? ''}`, data, response.status);
|
|
762
786
|
}
|
|
763
787
|
return data;
|
|
764
788
|
};
|
|
@@ -1095,11 +1119,16 @@ async function loginFeishuWebSession(fetcher, options) {
|
|
|
1095
1119
|
const maxWaitMs = options.maxWaitMs ?? 120_000;
|
|
1096
1120
|
const start = Date.now();
|
|
1097
1121
|
let lastStatusMessage = '';
|
|
1122
|
+
let scanConfirmationEmitted = false;
|
|
1098
1123
|
for (;;) {
|
|
1099
1124
|
if (Date.now() - start > maxWaitMs) {
|
|
1100
1125
|
throw new FeishuWebSessionError('等待飞书扫码超时', 'timeout');
|
|
1101
1126
|
}
|
|
1102
1127
|
const poll = await pollFeishuQrLogin(session, fetcher, qrInit.flowKey);
|
|
1128
|
+
if (poll.status === 2 && !scanConfirmationEmitted) {
|
|
1129
|
+
scanConfirmationEmitted = true;
|
|
1130
|
+
await options.onQrScanConfirmed?.({ confirmedAt: Date.now() });
|
|
1131
|
+
}
|
|
1103
1132
|
if (poll.nextStep === 'enter_app') {
|
|
1104
1133
|
if (poll.crossLoginUri) {
|
|
1105
1134
|
await session.fetchRaw(fetcher, poll.crossLoginUri, { method: 'GET' });
|
|
@@ -1255,11 +1284,19 @@ class MutableCookieJar {
|
|
|
1255
1284
|
}
|
|
1256
1285
|
export class OpenPlatformApiError extends Error {
|
|
1257
1286
|
payload;
|
|
1258
|
-
|
|
1287
|
+
status;
|
|
1288
|
+
constructor(message, payload, status) {
|
|
1259
1289
|
super(message);
|
|
1260
1290
|
this.payload = payload;
|
|
1291
|
+
this.status = status;
|
|
1261
1292
|
}
|
|
1262
1293
|
}
|
|
1294
|
+
function openPlatformOwnerAccessDenied(error) {
|
|
1295
|
+
if (!(error instanceof OpenPlatformApiError))
|
|
1296
|
+
return false;
|
|
1297
|
+
const payload = asRecord(error.payload);
|
|
1298
|
+
return error.status === 403 && payload.code === 10003;
|
|
1299
|
+
}
|
|
1263
1300
|
class FeishuWebSessionError extends Error {
|
|
1264
1301
|
reason;
|
|
1265
1302
|
constructor(message, reason) {
|