botmux 3.7.1 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/capabilities.d.ts +17 -0
- package/dist/adapters/backend/capabilities.d.ts.map +1 -0
- package/dist/adapters/backend/capabilities.js +22 -0
- package/dist/adapters/backend/capabilities.js.map +1 -0
- package/dist/adapters/backend/critical-control-key.d.ts +19 -0
- package/dist/adapters/backend/critical-control-key.d.ts.map +1 -0
- package/dist/adapters/backend/critical-control-key.js +34 -0
- package/dist/adapters/backend/critical-control-key.js.map +1 -0
- package/dist/adapters/backend/herdr-backend.d.ts +9 -0
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +23 -4
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +3 -2
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/session-backend-selector.d.ts +61 -6
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
- package/dist/adapters/backend/session-backend-selector.js +173 -9
- package/dist/adapters/backend/session-backend-selector.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +10 -3
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +25 -8
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +3 -2
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +45 -4
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js +11 -0
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +3 -2
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/backend/zmx-backend.d.ts +286 -0
- package/dist/adapters/backend/zmx-backend.d.ts.map +1 -0
- package/dist/adapters/backend/zmx-backend.js +2396 -0
- package/dist/adapters/backend/zmx-backend.js.map +1 -0
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +3 -0
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +5 -1
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +26 -1
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts +79 -1
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
- package/dist/adapters/cli/fs-policy.js +290 -13
- package/dist/adapters/cli/fs-policy.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts.map +1 -1
- package/dist/adapters/cli/grok.js +4 -1
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
- package/dist/adapters/cli/oh-my-pi.js +5 -3
- package/dist/adapters/cli/oh-my-pi.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +7 -4
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +52 -35
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/strict-input-handle.d.ts +13 -0
- package/dist/adapters/cli/strict-input-handle.d.ts.map +1 -0
- package/dist/adapters/cli/strict-input-handle.js +39 -0
- package/dist/adapters/cli/strict-input-handle.js.map +1 -0
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +6 -4
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +16 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +137 -8
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +298 -12
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/session-list-liveness.d.ts +1 -1
- package/dist/cli/session-list-liveness.js +1 -1
- package/dist/cli/zmx-managed-attach.d.ts +41 -0
- package/dist/cli/zmx-managed-attach.d.ts.map +1 -0
- package/dist/cli/zmx-managed-attach.js +72 -0
- package/dist/cli/zmx-managed-attach.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +780 -131
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +90 -2
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/codex-rpc-engine.d.ts.map +1 -1
- package/dist/codex-rpc-engine.js +22 -6
- package/dist/codex-rpc-engine.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -1
- package/dist/config.js.map +1 -1
- package/dist/core/ask-broker.d.ts +22 -1
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +12 -5
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/botmux-wrapper.d.ts +18 -0
- package/dist/core/botmux-wrapper.d.ts.map +1 -1
- package/dist/core/botmux-wrapper.js +25 -1
- package/dist/core/botmux-wrapper.js.map +1 -1
- package/dist/core/chat-rename.d.ts +27 -0
- package/dist/core/chat-rename.d.ts.map +1 -0
- package/dist/core/chat-rename.js +53 -0
- package/dist/core/chat-rename.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +160 -12
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +25 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +102 -4
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +16 -2
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +611 -62
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +22 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +61 -0
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +6 -0
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +11 -1
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/device-isolation-daemon.d.ts +28 -6
- package/dist/core/device-isolation-daemon.d.ts.map +1 -1
- package/dist/core/device-isolation-daemon.js +96 -13
- package/dist/core/device-isolation-daemon.js.map +1 -1
- package/dist/core/host-overload-alert.d.ts +75 -0
- package/dist/core/host-overload-alert.d.ts.map +1 -1
- package/dist/core/host-overload-alert.js +103 -0
- package/dist/core/host-overload-alert.js.map +1 -1
- package/dist/core/idle-worker-sweeper.js +1 -1
- package/dist/core/idle-worker-sweeper.js.map +1 -1
- package/dist/core/inflight-input-tracker.d.ts +3 -0
- package/dist/core/inflight-input-tracker.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.js +9 -0
- package/dist/core/inflight-input-tracker.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +10 -0
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/persistent-backend.d.ts +32 -4
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +75 -6
- package/dist/core/persistent-backend.js.map +1 -1
- package/dist/core/plugins/mcp/gateway.js +2 -2
- package/dist/core/plugins/mcp/gateway.js.map +1 -1
- package/dist/core/plugins/runtime.d.ts +3 -0
- package/dist/core/plugins/runtime.d.ts.map +1 -1
- package/dist/core/plugins/runtime.js.map +1 -1
- package/dist/core/plugins/service-manager.d.ts +4 -1
- package/dist/core/plugins/service-manager.d.ts.map +1 -1
- package/dist/core/plugins/service-manager.js +11 -6
- package/dist/core/plugins/service-manager.js.map +1 -1
- package/dist/core/role-library.d.ts +48 -1
- package/dist/core/role-library.d.ts.map +1 -1
- package/dist/core/role-library.js +111 -3
- package/dist/core/role-library.js.map +1 -1
- package/dist/core/role-resolver.d.ts +14 -2
- package/dist/core/role-resolver.d.ts.map +1 -1
- package/dist/core/role-resolver.js +47 -4
- package/dist/core/role-resolver.js.map +1 -1
- package/dist/core/session-activity.d.ts +14 -0
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-activity.js +46 -1
- package/dist/core/session-activity.js.map +1 -1
- package/dist/core/session-board.d.ts +5 -2
- package/dist/core/session-board.d.ts.map +1 -1
- package/dist/core/session-board.js +5 -2
- package/dist/core/session-board.js.map +1 -1
- package/dist/core/session-liveness.d.ts +6 -5
- package/dist/core/session-liveness.d.ts.map +1 -1
- package/dist/core/session-liveness.js +34 -13
- package/dist/core/session-liveness.js.map +1 -1
- package/dist/core/session-manager.d.ts +3 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +397 -103
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-marker.d.ts +11 -2
- package/dist/core/session-marker.d.ts.map +1 -1
- package/dist/core/session-marker.js +50 -11
- package/dist/core/session-marker.js.map +1 -1
- package/dist/core/session-message-preview.d.ts +20 -0
- package/dist/core/session-message-preview.d.ts.map +1 -0
- package/dist/core/session-message-preview.js +188 -0
- package/dist/core/session-message-preview.js.map +1 -0
- package/dist/core/session-title.d.ts +5 -1
- package/dist/core/session-title.d.ts.map +1 -1
- package/dist/core/session-title.js +20 -3
- package/dist/core/session-title.js.map +1 -1
- package/dist/core/startup-commands.d.ts +1 -1
- package/dist/core/startup-commands.js +1 -1
- package/dist/core/terminal-url.d.ts.map +1 -1
- package/dist/core/terminal-url.js +3 -2
- package/dist/core/terminal-url.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +75 -12
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +35 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +23 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-ipc.d.ts +11 -0
- package/dist/core/worker-ipc.d.ts.map +1 -0
- package/dist/core/worker-ipc.js +26 -0
- package/dist/core/worker-ipc.js.map +1 -0
- package/dist/core/worker-pool.d.ts +179 -29
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +2118 -331
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +132 -3
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +1327 -449
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +2 -0
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +9 -0
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +4 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +5 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/federation-api.d.ts.map +1 -1
- package/dist/dashboard/federation-api.js +4 -0
- package/dist/dashboard/federation-api.js.map +1 -1
- package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
- package/dist/dashboard/federation-spoke-api.js +32 -5
- package/dist/dashboard/federation-spoke-api.js.map +1 -1
- package/dist/dashboard/public-redact.d.ts +8 -2
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +34 -7
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/session-card-model.d.ts.map +1 -1
- package/dist/dashboard/session-card-model.js +10 -2
- package/dist/dashboard/session-card-model.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +35 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +88 -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 +0 -1
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +15 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +212 -58
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +3 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts +2 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/clipboard.d.ts +2 -0
- package/dist/dashboard/web/clipboard.d.ts.map +1 -0
- package/dist/dashboard/web/clipboard.js +42 -0
- package/dist/dashboard/web/clipboard.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +12 -8
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/dashboard-components.d.ts +17 -16
- package/dist/dashboard/web/dashboard-components.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-components.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +7 -3
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +205 -12
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/icon-tooltip.d.ts.map +1 -1
- package/dist/dashboard/web/icon-tooltip.js +16 -1
- package/dist/dashboard/web/icon-tooltip.js.map +1 -1
- package/dist/dashboard/web/listener-filters.d.ts +23 -0
- package/dist/dashboard/web/listener-filters.d.ts.map +1 -0
- package/dist/dashboard/web/listener-filters.js +36 -0
- package/dist/dashboard/web/listener-filters.js.map +1 -0
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/plugin-page.d.ts.map +1 -1
- package/dist/dashboard/web/plugin-page.js.map +1 -1
- package/dist/dashboard/web/preview-markdown.d.ts +5 -0
- package/dist/dashboard/web/preview-markdown.d.ts.map +1 -0
- package/dist/dashboard/web/preview-markdown.js +52 -0
- package/dist/dashboard/web/preview-markdown.js.map +1 -0
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +535 -10
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard/web/roles.d.ts +77 -0
- package/dist/dashboard/web/roles.d.ts.map +1 -1
- package/dist/dashboard/web/roles.js +98 -0
- package/dist/dashboard/web/roles.js.map +1 -1
- package/dist/dashboard/web/session-terminal.d.ts.map +1 -1
- package/dist/dashboard/web/session-terminal.js +6 -4
- package/dist/dashboard/web/session-terminal.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +4 -1
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +1 -1
- package/dist/dashboard/web/sessions-kanban.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts +3 -2
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +163 -28
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +25 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +58 -7
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +28 -3
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +61 -1
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts +6 -5
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +2 -0
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/v3-components.d.ts +3 -2
- package/dist/dashboard/web/v3-components.d.ts.map +1 -1
- package/dist/dashboard/web/v3-components.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +12 -2
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.js +0 -9
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
- package/dist/dashboard/web/webhook-logs-page.d.ts +2 -1
- package/dist/dashboard/web/webhook-logs-page.d.ts.map +1 -1
- package/dist/dashboard/web/webhook-logs-page.js +4 -1
- package/dist/dashboard/web/webhook-logs-page.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-FAPIMQV3.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-QFMH6ITB.js → chunk-5CJMHTT4.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-KQB42ML5.js → chunk-DLZK52JU.js} +14 -12
- package/dist/dashboard-web/chunks/chunk-FDZ7WOBW.js +16 -0
- package/dist/dashboard-web/chunks/{chunk-3QAUJXAS.js → chunk-GTAJV5YC.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-FNPGOZMX.js → chunk-IHNG6KE6.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-FLGXZJTD.js → chunk-VA6QWSGQ.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-XJ7BGPJH.js +1 -0
- package/dist/dashboard-web/chunks/chunk-ZJVTGU5X.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-LKWRT3GS.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-V6654ICQ.js +8 -0
- package/dist/dashboard-web/chunks/insights-page-237RMFQ5.js +7 -0
- package/dist/dashboard-web/chunks/{monitor-room-7IVIS75W.js → monitor-room-OO5Y4FRQ.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-5SSJRQZF.js → monitoring-page-OUEITM5P.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-EOND3L5D.js → office-page-4KNAHQ4Q.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-NISBVBBJ.js → overview-page-QDP4YK2S.js} +1 -1
- package/dist/dashboard-web/chunks/{plugin-page-JXC5F5YV.js → plugin-page-VEGTCEAS.js} +1 -1
- package/dist/dashboard-web/chunks/roles-page-PGXNZZNP.js +1 -0
- package/dist/dashboard-web/chunks/{schedules-page-AVOOKLUH.js → schedules-page-BJNC5TID.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-M2ZYYCMO.js +6 -0
- package/dist/dashboard-web/chunks/settings-page-IJFZKUUW.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-5MW54PCC.js → skills-page-YRAIRZOQ.js} +3 -3
- package/dist/dashboard-web/chunks/{team-federation-page-2SNIMVXI.js → team-federation-page-DEU27GRU.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-W6SBXXQC.js → v3-page-6KHEW2YL.js} +5 -5
- package/dist/dashboard-web/chunks/{whiteboards-page-STC54KTP.js → whiteboards-page-VDECAALH.js} +1 -1
- package/dist/dashboard-web/style.css +12545 -11432
- package/dist/dashboard.js +215 -36
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +41 -2
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +47 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +71 -19
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +71 -19
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/callback-button-marker.d.ts +34 -0
- package/dist/im/lark/callback-button-marker.d.ts.map +1 -0
- package/dist/im/lark/callback-button-marker.js +99 -0
- package/dist/im/lark/callback-button-marker.js.map +1 -0
- package/dist/im/lark/card-builder.d.ts +46 -10
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +299 -78
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +3 -4
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +380 -148
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +24 -1
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +101 -8
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/doc-comment.d.ts.map +1 -1
- package/dist/im/lark/doc-comment.js +6 -1
- package/dist/im/lark/doc-comment.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +115 -3
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +534 -147
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts +16 -12
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +48 -151
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/im/lark/grant-pending.d.ts +12 -4
- package/dist/im/lark/grant-pending.d.ts.map +1 -1
- package/dist/im/lark/grant-pending.js +31 -8
- package/dist/im/lark/grant-pending.js.map +1 -1
- package/dist/im/lark/invite-command.d.ts +20 -0
- package/dist/im/lark/invite-command.d.ts.map +1 -0
- package/dist/im/lark/invite-command.js +239 -0
- package/dist/im/lark/invite-command.js.map +1 -0
- package/dist/im/lark/md-card.d.ts +66 -4
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +201 -31
- package/dist/im/lark/md-card.js.map +1 -1
- package/dist/im/lark/mention-targets.d.ts +43 -0
- package/dist/im/lark/mention-targets.d.ts.map +1 -0
- package/dist/im/lark/mention-targets.js +190 -0
- package/dist/im/lark/mention-targets.js.map +1 -0
- package/dist/im/lark/message-parser.d.ts +31 -0
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +305 -32
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/reply-card-footer-signature.d.ts +7 -0
- package/dist/im/lark/reply-card-footer-signature.d.ts.map +1 -0
- package/dist/im/lark/reply-card-footer-signature.js +7 -0
- package/dist/im/lark/reply-card-footer-signature.js.map +1 -0
- package/dist/im/lark/sessions-card.d.ts.map +1 -1
- package/dist/im/lark/sessions-card.js +4 -1
- package/dist/im/lark/sessions-card.js.map +1 -1
- package/dist/im/lark/substitute-command.d.ts.map +1 -1
- package/dist/im/lark/substitute-command.js +8 -0
- package/dist/im/lark/substitute-command.js.map +1 -1
- package/dist/im/lark/topic-root-context.d.ts +35 -0
- package/dist/im/lark/topic-root-context.d.ts.map +1 -0
- package/dist/im/lark/topic-root-context.js +37 -0
- package/dist/im/lark/topic-root-context.js.map +1 -0
- package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card.js +2 -1
- package/dist/im/lark/v3-blocked-card.js.map +1 -1
- package/dist/im/lark/v3-gate-card.d.ts.map +1 -1
- package/dist/im/lark/v3-gate-card.js +2 -1
- package/dist/im/lark/v3-gate-card.js.map +1 -1
- package/dist/im/lark/v3-loop-grant-card.d.ts.map +1 -1
- package/dist/im/lark/v3-loop-grant-card.js +2 -1
- package/dist/im/lark/v3-loop-grant-card.js.map +1 -1
- package/dist/im/lark/v3-progress-card.d.ts.map +1 -1
- package/dist/im/lark/v3-progress-card.js +2 -1
- package/dist/im/lark/v3-progress-card.js.map +1 -1
- package/dist/im/lark/v3-revisit-grant-card.d.ts.map +1 -1
- package/dist/im/lark/v3-revisit-grant-card.js +2 -1
- package/dist/im/lark/v3-revisit-grant-card.js.map +1 -1
- package/dist/index-core-only.d.ts +3 -0
- package/dist/index-core-only.d.ts.map +1 -0
- package/dist/index-core-only.js +107 -0
- package/dist/index-core-only.js.map +1 -0
- package/dist/services/async-trigger-state.d.ts +8 -0
- package/dist/services/async-trigger-state.d.ts.map +1 -1
- package/dist/services/async-trigger-state.js +3 -2
- package/dist/services/async-trigger-state.js.map +1 -1
- package/dist/services/async-trigger-store.d.ts +10 -2
- package/dist/services/async-trigger-store.d.ts.map +1 -1
- package/dist/services/async-trigger-store.js +3 -2
- package/dist/services/async-trigger-store.js.map +1 -1
- package/dist/services/backend-availability.d.ts +3 -1
- package/dist/services/backend-availability.d.ts.map +1 -1
- package/dist/services/backend-availability.js +14 -1
- package/dist/services/backend-availability.js.map +1 -1
- package/dist/services/backend-type-store.d.ts.map +1 -1
- package/dist/services/backend-type-store.js +1 -1
- package/dist/services/backend-type-store.js.map +1 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +2 -1
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +14 -1
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +65 -1
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/card-prefs-store.d.ts +7 -2
- package/dist/services/card-prefs-store.d.ts.map +1 -1
- package/dist/services/card-prefs-store.js +30 -4
- package/dist/services/card-prefs-store.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +9 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
- package/dist/services/codex-app-runner-protocol.js +17 -0
- package/dist/services/codex-app-runner-protocol.js.map +1 -1
- package/dist/services/codex-app-token-usage.d.ts +93 -0
- package/dist/services/codex-app-token-usage.d.ts.map +1 -0
- package/dist/services/codex-app-token-usage.js +190 -0
- package/dist/services/codex-app-token-usage.js.map +1 -0
- package/dist/services/codex-transcript.d.ts +6 -1
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js +103 -32
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/federation-roster.d.ts +4 -0
- package/dist/services/federation-roster.d.ts.map +1 -1
- package/dist/services/federation-roster.js +3 -0
- package/dist/services/federation-roster.js.map +1 -1
- package/dist/services/federation-store.d.ts +6 -0
- package/dist/services/federation-store.d.ts.map +1 -1
- package/dist/services/federation-store.js.map +1 -1
- package/dist/services/grant-policy.d.ts +13 -0
- package/dist/services/grant-policy.d.ts.map +1 -0
- package/dist/services/grant-policy.js +40 -0
- package/dist/services/grant-policy.js.map +1 -0
- package/dist/services/grant-store.d.ts +24 -3
- package/dist/services/grant-store.d.ts.map +1 -1
- package/dist/services/grant-store.js +196 -12
- package/dist/services/grant-store.js.map +1 -1
- package/dist/services/groups-store.d.ts +36 -0
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +123 -1
- package/dist/services/groups-store.js.map +1 -1
- package/dist/services/jsonl-cursor.d.ts.map +1 -1
- package/dist/services/jsonl-cursor.js +8 -2
- package/dist/services/jsonl-cursor.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +32 -0
- package/dist/services/local-cli-opener.js.map +1 -1
- package/dist/services/message-listener-run-preview-store.d.ts +43 -0
- package/dist/services/message-listener-run-preview-store.d.ts.map +1 -0
- package/dist/services/message-listener-run-preview-store.js +152 -0
- package/dist/services/message-listener-run-preview-store.js.map +1 -0
- package/dist/services/message-listener-store.d.ts +26 -0
- package/dist/services/message-listener-store.d.ts.map +1 -0
- package/dist/services/message-listener-store.js +138 -0
- package/dist/services/message-listener-store.js.map +1 -0
- package/dist/services/message-listener.d.ts +112 -0
- package/dist/services/message-listener.d.ts.map +1 -0
- package/dist/services/message-listener.js +391 -0
- package/dist/services/message-listener.js.map +1 -0
- package/dist/services/overload-alert-migration.d.ts +15 -0
- package/dist/services/overload-alert-migration.d.ts.map +1 -0
- package/dist/services/overload-alert-migration.js +115 -0
- package/dist/services/overload-alert-migration.js.map +1 -0
- package/dist/services/send-policy.d.ts +38 -0
- package/dist/services/send-policy.d.ts.map +1 -1
- package/dist/services/send-policy.js +34 -0
- package/dist/services/send-policy.js.map +1 -1
- package/dist/services/session-store.d.ts +12 -1
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +44 -2
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +87 -12
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/substitute-mode-normalize.d.ts +3 -0
- package/dist/services/substitute-mode-normalize.d.ts.map +1 -1
- package/dist/services/substitute-mode-normalize.js +8 -0
- package/dist/services/substitute-mode-normalize.js.map +1 -1
- package/dist/services/substitute-mode-store.d.ts.map +1 -1
- package/dist/services/substitute-mode-store.js +8 -1
- package/dist/services/substitute-mode-store.js.map +1 -1
- package/dist/services/transcript-resolver.d.ts +6 -1
- package/dist/services/transcript-resolver.d.ts.map +1 -1
- package/dist/services/transcript-resolver.js +145 -29
- package/dist/services/transcript-resolver.js.map +1 -1
- package/dist/services/trigger-types.d.ts +16 -0
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js +6 -0
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/setup/bot-config-editor.js +2 -2
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-zmx.d.ts +31 -0
- package/dist/setup/ensure-zmx.d.ts.map +1 -0
- package/dist/setup/ensure-zmx.js +161 -0
- package/dist/setup/ensure-zmx.js.map +1 -0
- package/dist/setup/index.d.ts +1 -1
- package/dist/setup/index.js +1 -1
- package/dist/setup/open-platform-automation.d.ts +9 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +15 -2
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/setup-args.d.ts +1 -1
- package/dist/setup/setup-args.d.ts.map +1 -1
- package/dist/setup/setup-args.js +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +32 -0
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/injection-mode.d.ts +6 -2
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +10 -5
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/types.d.ts +79 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +1 -1
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +4 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/effort-confirm-dialog.d.ts +40 -0
- package/dist/utils/effort-confirm-dialog.d.ts.map +1 -0
- package/dist/utils/effort-confirm-dialog.js +74 -0
- package/dist/utils/effort-confirm-dialog.js.map +1 -0
- package/dist/utils/pending-input-queue.d.ts +56 -0
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js +80 -0
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/utils/render-dimensions.d.ts +8 -0
- package/dist/utils/render-dimensions.d.ts.map +1 -1
- package/dist/utils/render-dimensions.js +10 -0
- package/dist/utils/render-dimensions.js.map +1 -1
- package/dist/utils/stuck-key-guard.d.ts +3 -2
- package/dist/utils/stuck-key-guard.d.ts.map +1 -1
- package/dist/utils/stuck-key-guard.js +3 -3
- package/dist/utils/stuck-key-guard.js.map +1 -1
- package/dist/utils/terminal-renderer.d.ts +6 -0
- package/dist/utils/terminal-renderer.d.ts.map +1 -1
- package/dist/utils/terminal-renderer.js +15 -0
- package/dist/utils/terminal-renderer.js.map +1 -1
- package/dist/utils/tui-input-delivery.d.ts +32 -0
- package/dist/utils/tui-input-delivery.d.ts.map +1 -0
- package/dist/utils/tui-input-delivery.js +53 -0
- package/dist/utils/tui-input-delivery.js.map +1 -0
- package/dist/utils/xml.d.ts +19 -0
- package/dist/utils/xml.d.ts.map +1 -0
- package/dist/utils/xml.js +26 -0
- package/dist/utils/xml.js.map +1 -0
- package/dist/worker.js +1852 -374
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +8 -8
- package/dist/workflows/events/payloads.d.ts +8 -8
- package/dist/workflows/events/schema.d.ts +160 -160
- package/dist/workflows/v3/session-relay-client.js +1 -1
- package/dist/workflows/v3/session-relay-client.js.map +1 -1
- package/dist/workflows/v3/worker-fence.d.ts.map +1 -1
- package/dist/workflows/v3/worker-fence.js +15 -10
- package/dist/workflows/v3/worker-fence.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-UKA7K4JV.js +0 -10
- package/dist/dashboard-web/chunks/chunk-DFLNXQNT.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-A77YAB5Y.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-RUZNVXQB.js +0 -8
- package/dist/dashboard-web/chunks/insights-page-RF7U7RTA.js +0 -22
- package/dist/dashboard-web/chunks/roles-page-BUMKD7Y4.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-6HLSEAB7.js +0 -2
- package/dist/dashboard-web/chunks/settings-page-MJDZHQ4X.js +0 -2
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { closeSync, existsSync, fstatSync, openSync, readSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { config } from '../config.js';
|
|
4
|
+
import { BoundedMap } from '../utils/bounded-map.js';
|
|
5
|
+
const PREVIEW_TAIL_BYTES = 64 * 1024;
|
|
6
|
+
const PREVIEW_TAIL_ROWS = 40;
|
|
7
|
+
const USER_PREVIEW_LENGTH = 120;
|
|
8
|
+
const BOT_PREVIEW_LENGTH = 220;
|
|
9
|
+
const FULL_PREVIEW_LENGTH = 4_000;
|
|
10
|
+
const PREVIEW_FILE_CACHE_MAX_ENTRIES = 2_048;
|
|
11
|
+
/** Dashboard snapshots may compose hundreds of rows at once. Keep parsed tails
|
|
12
|
+
* behind a bounded stat-keyed cache so an unchanged `/api/sessions` refresh
|
|
13
|
+
* does not synchronously reread up to 64 KiB twice per session. */
|
|
14
|
+
const previewFileCache = new BoundedMap(PREVIEW_FILE_CACHE_MAX_ENTRIES);
|
|
15
|
+
const CLEARED_SESSION_MESSAGE_PREVIEW = {
|
|
16
|
+
previewUserText: null,
|
|
17
|
+
previewBotText: null,
|
|
18
|
+
previewUserFullText: null,
|
|
19
|
+
previewBotFullText: null,
|
|
20
|
+
previewUserAt: null,
|
|
21
|
+
previewBotAt: null,
|
|
22
|
+
previewBotState: null,
|
|
23
|
+
};
|
|
24
|
+
function compactText(value, limit) {
|
|
25
|
+
const text = String(value ?? '').replace(/\s+/g, ' ').trim();
|
|
26
|
+
if (!text)
|
|
27
|
+
return '';
|
|
28
|
+
return text.length > limit ? `${text.slice(0, limit - 1)}…` : text;
|
|
29
|
+
}
|
|
30
|
+
/** Length-bound a value while PRESERVING newlines, so the overlay can render
|
|
31
|
+
* the reply's Markdown structure. Horizontal whitespace is tidied but line
|
|
32
|
+
* breaks survive — the compact single-line card summary keeps using
|
|
33
|
+
* compactText(). */
|
|
34
|
+
function compactMultiline(value, limit) {
|
|
35
|
+
const text = String(value ?? '')
|
|
36
|
+
.replace(/\r\n?/g, '\n')
|
|
37
|
+
.replace(/[^\S\n]+\n/g, '\n')
|
|
38
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
39
|
+
.replace(/^\n+/, '')
|
|
40
|
+
.replace(/\s+$/, '');
|
|
41
|
+
if (!text)
|
|
42
|
+
return '';
|
|
43
|
+
return text.length > limit ? `${text.slice(0, limit - 1)}…` : text;
|
|
44
|
+
}
|
|
45
|
+
/** Read a bounded JSONL tail. A partial first line is discarded when the file
|
|
46
|
+
* is larger than the read window; malformed/truncated rows are skipped. */
|
|
47
|
+
function readLatestJsonlRow(path, kind) {
|
|
48
|
+
if (!existsSync(path))
|
|
49
|
+
return undefined;
|
|
50
|
+
let fd;
|
|
51
|
+
try {
|
|
52
|
+
fd = openSync(path, 'r');
|
|
53
|
+
const stat = fstatSync(fd);
|
|
54
|
+
const size = stat.size;
|
|
55
|
+
if (size <= 0)
|
|
56
|
+
return undefined;
|
|
57
|
+
const cacheKey = `${kind}:${path}`;
|
|
58
|
+
const cached = previewFileCache.get(cacheKey);
|
|
59
|
+
if (cached && cached.size === size && cached.mtimeMs === stat.mtimeMs) {
|
|
60
|
+
return cached.row;
|
|
61
|
+
}
|
|
62
|
+
const length = Math.min(size, PREVIEW_TAIL_BYTES);
|
|
63
|
+
const start = size - length;
|
|
64
|
+
const buffer = Buffer.allocUnsafe(length);
|
|
65
|
+
const bytesRead = readSync(fd, buffer, 0, length, start);
|
|
66
|
+
let text = buffer.subarray(0, bytesRead).toString('utf8');
|
|
67
|
+
if (start > 0) {
|
|
68
|
+
const firstNewline = text.indexOf('\n');
|
|
69
|
+
text = firstNewline >= 0 ? text.slice(firstNewline + 1) : '';
|
|
70
|
+
}
|
|
71
|
+
const rows = [];
|
|
72
|
+
for (const line of text.split('\n')) {
|
|
73
|
+
if (!line.trim())
|
|
74
|
+
continue;
|
|
75
|
+
try {
|
|
76
|
+
const parsed = JSON.parse(line);
|
|
77
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed))
|
|
78
|
+
rows.push(parsed);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Best-effort presentation data: skip malformed or concurrently-written rows.
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const matches = kind === 'user'
|
|
85
|
+
? (row) => row.senderType === 'user'
|
|
86
|
+
: (row) => typeof row.sentAtMs === 'number' && typeof row.previewText === 'string';
|
|
87
|
+
let latest;
|
|
88
|
+
for (let i = rows.length - 1, seen = 0; i >= 0 && seen < PREVIEW_TAIL_ROWS; i--, seen++) {
|
|
89
|
+
if (matches(rows[i])) {
|
|
90
|
+
latest = rows[i];
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const row = latest
|
|
95
|
+
? kind === 'user'
|
|
96
|
+
? {
|
|
97
|
+
senderType: 'user',
|
|
98
|
+
content: compactMultiline(latest.content, FULL_PREVIEW_LENGTH),
|
|
99
|
+
createTime: latest.createTime,
|
|
100
|
+
}
|
|
101
|
+
: {
|
|
102
|
+
previewText: compactMultiline(latest.previewText, FULL_PREVIEW_LENGTH),
|
|
103
|
+
sentAtMs: latest.sentAtMs,
|
|
104
|
+
}
|
|
105
|
+
: undefined;
|
|
106
|
+
previewFileCache.set(cacheKey, {
|
|
107
|
+
mtimeMs: stat.mtimeMs,
|
|
108
|
+
row,
|
|
109
|
+
size,
|
|
110
|
+
});
|
|
111
|
+
return row;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
if (fd !== undefined) {
|
|
118
|
+
try {
|
|
119
|
+
closeSync(fd);
|
|
120
|
+
}
|
|
121
|
+
catch { /* best effort */ }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function numberOrUndefined(value) {
|
|
126
|
+
const n = Number(value);
|
|
127
|
+
return Number.isFinite(n) && n > 0 ? n : undefined;
|
|
128
|
+
}
|
|
129
|
+
function sessionActivityAt(session) {
|
|
130
|
+
const value = session.lastMessageAt ?? session.createdAt;
|
|
131
|
+
if (!value)
|
|
132
|
+
return undefined;
|
|
133
|
+
const parsed = Date.parse(value);
|
|
134
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
135
|
+
}
|
|
136
|
+
function safeJsonlKey(value) {
|
|
137
|
+
const key = String(value ?? '');
|
|
138
|
+
return /^[A-Za-z0-9_-]+$/.test(key) ? key : undefined;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Build the latest user/bot exchange shown on dashboard session cards.
|
|
142
|
+
*
|
|
143
|
+
* User text comes from the local inbound queue (with persisted lastUserPrompt
|
|
144
|
+
* as a fallback). Bot text comes from the append-only turn-sends marker written
|
|
145
|
+
* by `botmux send`. Both reads are bounded and best-effort so a corrupt marker
|
|
146
|
+
* cannot break `/api/sessions`.
|
|
147
|
+
*/
|
|
148
|
+
export function buildSessionMessagePreview(session) {
|
|
149
|
+
if (session.status === 'closed') {
|
|
150
|
+
return { ...CLEARED_SESSION_MESSAGE_PREVIEW };
|
|
151
|
+
}
|
|
152
|
+
const queueAnchor = session.deferredScheduleRun?.routingAnchor
|
|
153
|
+
?? (session.scope === 'chat' ? session.chatId : session.rootMessageId);
|
|
154
|
+
const safeQueueAnchor = safeJsonlKey(queueAnchor);
|
|
155
|
+
// Queue files are keyed by routing anchor, not session id. Both chat-scope
|
|
156
|
+
// (chatId) and thread-scope (rootMessageId) anchors can be re-used after an
|
|
157
|
+
// old session closes, so closed rows are handled by the early return above.
|
|
158
|
+
const latestUser = safeQueueAnchor
|
|
159
|
+
? readLatestJsonlRow(join(config.session.dataDir, 'queues', `${safeQueueAnchor}.jsonl`), 'user')
|
|
160
|
+
: undefined;
|
|
161
|
+
const safeSessionId = safeJsonlKey(session.sessionId);
|
|
162
|
+
const latestBot = safeSessionId
|
|
163
|
+
? readLatestJsonlRow(join(config.session.dataDir, 'turn-sends', `${safeSessionId}.jsonl`), 'bot')
|
|
164
|
+
: undefined;
|
|
165
|
+
const userFullText = compactMultiline(latestUser?.content ?? session.lastUserPrompt ?? '', FULL_PREVIEW_LENGTH);
|
|
166
|
+
const botFullText = compactMultiline(latestBot?.previewText ?? '', FULL_PREVIEW_LENGTH);
|
|
167
|
+
const previewUserAt = userFullText
|
|
168
|
+
? (numberOrUndefined(latestUser?.createTime) ?? sessionActivityAt(session))
|
|
169
|
+
: undefined;
|
|
170
|
+
const previewBotAt = numberOrUndefined(latestBot?.sentAtMs);
|
|
171
|
+
let previewBotState;
|
|
172
|
+
if (previewBotAt) {
|
|
173
|
+
previewBotState = !previewUserAt || previewBotAt >= previewUserAt ? 'replied' : 'waiting';
|
|
174
|
+
}
|
|
175
|
+
else if (previewUserAt) {
|
|
176
|
+
previewBotState = 'waiting';
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
previewUserText: compactText(userFullText, USER_PREVIEW_LENGTH) || undefined,
|
|
180
|
+
previewBotText: compactText(botFullText, BOT_PREVIEW_LENGTH) || undefined,
|
|
181
|
+
previewUserFullText: userFullText || undefined,
|
|
182
|
+
previewBotFullText: botFullText || undefined,
|
|
183
|
+
previewUserAt,
|
|
184
|
+
previewBotAt,
|
|
185
|
+
previewBotState,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=session-message-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-message-preview.js","sourceRoot":"","sources":["../../src/core/session-message-preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { Session } from '../types.js';
|
|
2
|
+
export type SessionTitleSource = 'initial' | 'user' | 'agent' | 'cli' | 'dashboard' | 'system';
|
|
2
3
|
export type SessionTitleUpdateResult = {
|
|
3
4
|
ok: true;
|
|
4
5
|
title: string;
|
|
6
|
+
updatedAt: string;
|
|
7
|
+
source: SessionTitleSource;
|
|
5
8
|
} | {
|
|
6
9
|
ok: false;
|
|
7
10
|
error: 'bad_title';
|
|
@@ -14,6 +17,7 @@ export declare function extractBotmuxLarkNativeSessionTitlePrompt(rawContent: un
|
|
|
14
17
|
export declare function buildBotmuxLarkNativeSessionTitle(rawContent: unknown, mentions?: readonly {
|
|
15
18
|
name: string;
|
|
16
19
|
}[], emptyContentFallback?: unknown): string;
|
|
20
|
+
export declare function normalizeSessionTitleSource(value: unknown, fallback: SessionTitleSource): SessionTitleSource;
|
|
17
21
|
/** Persist a display-title change and keep dashboard subscribers in sync. */
|
|
18
|
-
export declare function updateSessionTitle(session: Session, rawTitle: unknown): SessionTitleUpdateResult;
|
|
22
|
+
export declare function updateSessionTitle(session: Session, rawTitle: unknown, source: SessionTitleSource): SessionTitleUpdateResult;
|
|
19
23
|
//# sourceMappingURL=session-title.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-title.d.ts","sourceRoot":"","sources":["../../src/core/session-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK3C,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"session-title.d.ts","sourceRoot":"","sources":["../../src/core/session-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK3C,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/F,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC1E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AA+BtC,sCAAsC;AACtC,wBAAgB,yCAAyC,CACvD,UAAU,EAAE,OAAO,EACnB,QAAQ,CAAC,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACrC,MAAM,GAAG,SAAS,CAcpB;AAED,8CAA8C;AAC9C,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,OAAO,EACnB,QAAQ,CAAC,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EACtC,oBAAoB,CAAC,EAAE,OAAO,GAC7B,MAAM,CAeR;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAY5G;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,kBAAkB,GACzB,wBAAwB,CAoB1B"}
|
|
@@ -52,20 +52,37 @@ export function buildBotmuxLarkNativeSessionTitle(rawContent, mentions, emptyCon
|
|
|
52
52
|
: normalized;
|
|
53
53
|
return `${BOTMUX_LARK_TITLE_PREFIX} ${displayContent}`;
|
|
54
54
|
}
|
|
55
|
+
export function normalizeSessionTitleSource(value, fallback) {
|
|
56
|
+
if (value === 'initial' ||
|
|
57
|
+
value === 'user' ||
|
|
58
|
+
value === 'agent' ||
|
|
59
|
+
value === 'cli' ||
|
|
60
|
+
value === 'dashboard' ||
|
|
61
|
+
value === 'system') {
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
return fallback;
|
|
65
|
+
}
|
|
55
66
|
/** Persist a display-title change and keep dashboard subscribers in sync. */
|
|
56
|
-
export function updateSessionTitle(session, rawTitle) {
|
|
67
|
+
export function updateSessionTitle(session, rawTitle, source) {
|
|
57
68
|
const title = normalizeSessionTitle(rawTitle);
|
|
58
69
|
if (!title)
|
|
59
70
|
return { ok: false, error: 'bad_title' };
|
|
71
|
+
const updatedAt = new Date().toISOString();
|
|
60
72
|
session.title = title;
|
|
61
73
|
session.nativeSessionTitle = title;
|
|
62
74
|
session.nativeSessionTitleUserDefined = true;
|
|
63
75
|
session.nativeSessionTitleAwaitingContent = undefined;
|
|
76
|
+
session.titleUpdatedAt = updatedAt;
|
|
77
|
+
session.titleSource = source;
|
|
64
78
|
sessionStore.updateSession(session);
|
|
65
79
|
dashboardEventBus.publish({
|
|
66
80
|
type: 'session.update',
|
|
67
|
-
body: {
|
|
81
|
+
body: {
|
|
82
|
+
sessionId: session.sessionId,
|
|
83
|
+
patch: { title, titleUpdatedAt: updatedAt, titleSource: source },
|
|
84
|
+
},
|
|
68
85
|
});
|
|
69
|
-
return { ok: true, title };
|
|
86
|
+
return { ok: true, title, updatedAt, source };
|
|
70
87
|
}
|
|
71
88
|
//# sourceMappingURL=session-title.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-title.js","sourceRoot":"","sources":["../../src/core/session-title.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-title.js","sourceRoot":"","sources":["../../src/core/session-title.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ export declare function parseStartupCommandsInput(raw: string): string[];
|
|
|
32
32
|
export declare function normalizeStartupCommandList(arr: unknown): string[];
|
|
33
33
|
/**
|
|
34
34
|
* Whether a spawn should (re-)run startupCommands. They run on a genuinely fresh
|
|
35
|
-
* CLI process; a reattach to a LIVE persistent (tmux/zellij/herdr) pane — e.g. a
|
|
35
|
+
* CLI process; a reattach to a LIVE persistent (tmux/zellij/herdr/zmx) pane — e.g. a
|
|
36
36
|
* daemon restart recovering an existing session — is the SAME CLI with its
|
|
37
37
|
* effort/model/context already established, so re-typing `/effort` (idempotent)
|
|
38
38
|
* or `/clear`,`/compact` (NOT idempotent) would corrupt it. Skip on reattach.
|
|
@@ -62,7 +62,7 @@ export function normalizeStartupCommandList(arr) {
|
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Whether a spawn should (re-)run startupCommands. They run on a genuinely fresh
|
|
65
|
-
* CLI process; a reattach to a LIVE persistent (tmux/zellij/herdr) pane — e.g. a
|
|
65
|
+
* CLI process; a reattach to a LIVE persistent (tmux/zellij/herdr/zmx) pane — e.g. a
|
|
66
66
|
* daemon restart recovering an existing session — is the SAME CLI with its
|
|
67
67
|
* effort/model/context already established, so re-typing `/effort` (idempotent)
|
|
68
68
|
* or `/clear`,`/compact` (NOT idempotent) would corrupt it. Skip on reattach.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-url.d.ts","sourceRoot":"","sources":["../../src/core/terminal-url.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"terminal-url.d.ts","sourceRoot":"","sources":["../../src/core/terminal-url.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AAEH,UAAU,kBAAkB;IAC1B,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACxD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;uEACmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AASD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGvD;AAED;qDACqD;AACrD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;sDAIsD;AACtD,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CA2C/F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { config } from '../config.js';
|
|
2
|
+
import { formatUrlHost } from './dashboard-url.js';
|
|
2
3
|
import { platformMachineBaseUrl, publicReverseProxyBaseUrl } from '../platform/binding.js';
|
|
3
4
|
import { isRemoteAccessEnabled } from '../global-config.js';
|
|
4
5
|
let proxyPort = 0;
|
|
@@ -77,8 +78,8 @@ export function buildTerminalUrl(ds, opts = {}) {
|
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
const base = proxyReady
|
|
80
|
-
? `http://${config.web.externalHost}:${getTerminalAdvertisedPort()}/s/${ds.session.sessionId}`
|
|
81
|
-
: `http://${config.web.externalHost}:${ds.workerPort ?? ds.session.webPort}`;
|
|
81
|
+
? `http://${formatUrlHost(config.web.externalHost)}:${getTerminalAdvertisedPort()}/s/${ds.session.sessionId}`
|
|
82
|
+
: `http://${formatUrlHost(config.web.externalHost)}:${ds.workerPort ?? ds.session.webPort}`;
|
|
82
83
|
return opts.write
|
|
83
84
|
? withCapability(base, 'token', ds.workerToken)
|
|
84
85
|
: withCapability(base, 'viewToken', ds.workerViewToken);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-url.js","sourceRoot":"","sources":["../../src/core/terminal-url.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"terminal-url.js","sourceRoot":"","sources":["../../src/core/terminal-url.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-session.d.ts","sourceRoot":"","sources":["../../src/core/trigger-session.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4D,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,sCAAsC,CAAC;AASnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC5C;AAED;;oEAEoE;AACpE,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;oDAEgD;IAChD,cAAc,CAAC,EAAE,CACf,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,KACrD,IAAI,GAAG;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC;;kBAEc;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;uEAEmE;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAOD;sEACsE;AACtE,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED;0EAC0E;AAC1E,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrG;AAED;;gFAEgF;AAChF,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAsBhF;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxF;AAED;;0EAE0E;AAC1E,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAyB5F;AAED;;;;;;mEAMmE;AACnE,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,GAAG,OAAO,CAEvG;AAmID,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,kBAAkB,EACxB,QAAQ,CAAC,EAAE,6BAA6B,GACvC,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"trigger-session.d.ts","sourceRoot":"","sources":["../../src/core/trigger-session.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4D,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,sCAAsC,CAAC;AASnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC5C;AAED;;oEAEoE;AACpE,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;oDAEgD;IAChD,cAAc,CAAC,EAAE,CACf,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,KACrD,IAAI,GAAG;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC;;kBAEc;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;uEAEmE;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAOD;sEACsE;AACtE,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED;0EAC0E;AAC1E,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrG;AAED;;gFAEgF;AAChF,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAsBhF;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxF;AAED;;0EAE0E;AAC1E,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAyB5F;AAED;;;;;;mEAMmE;AACnE,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,GAAG,OAAO,CAEvG;AAmID,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,kBAAkB,EACxB,QAAQ,CAAC,EAAE,6BAA6B,GACvC,OAAO,CAAC,eAAe,CAAC,CAugB1B"}
|
|
@@ -10,11 +10,11 @@ import { localeForBot, t } from '../i18n/index.js';
|
|
|
10
10
|
import { validateWorkingDir } from './working-dir.js';
|
|
11
11
|
import { buildFollowUpCliInput, buildNewTopicCliInput, ensureSessionWhiteboard, getAvailableBots, rememberLastCliInput } from './session-manager.js';
|
|
12
12
|
import { markSessionActivity } from './session-activity.js';
|
|
13
|
-
import { forkWorker, getCurrentCliVersion, sendWorkerInput } from './worker-pool.js';
|
|
13
|
+
import { closeSession, forkWorker, getCurrentCliVersion, sendWorkerInput, setActiveSessionIfActive } from './worker-pool.js';
|
|
14
14
|
import { armTriggerFinalSuppression, disarmTriggerFinalSuppression, inheritTriggerReplyAnchor } from './trigger-final-suppression.js';
|
|
15
15
|
import { botAutoWorktreeEnabled } from '../services/default-worktree.js';
|
|
16
16
|
import * as messageQueue from '../services/message-queue.js';
|
|
17
|
-
import { sessionKey } from './types.js';
|
|
17
|
+
import { sessionKey, larkTransportEnabled, isHttpVirtualSession } from './types.js';
|
|
18
18
|
function triggerTitle(req) {
|
|
19
19
|
const name = req.envelope.sourceName || req.source.connectorId || req.source.type;
|
|
20
20
|
return `[External] ${name}`.slice(0, 50);
|
|
@@ -259,6 +259,30 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
259
259
|
if (req.target.kind !== 'turn') {
|
|
260
260
|
return { ok: false, errorCode: 'workflow_trigger_not_implemented', error: 'only turn triggers are implemented in this daemon route' };
|
|
261
261
|
}
|
|
262
|
+
// apiOnly (core-only) fail-closed: a bot with no Feishu transport must never
|
|
263
|
+
// be steered into a real chat. Enforce the request SHAPE, not just the boot
|
|
264
|
+
// hint — otherwise a caller could pass a real chatId/rootMessageId (or omit a
|
|
265
|
+
// response mode) and re-enter the Feishu delivery path. Require an explicit
|
|
266
|
+
// HTTP response mode; reject real chat/root targets; a supplied sessionId may
|
|
267
|
+
// only re-address this bot's own existing HTTP virtual session.
|
|
268
|
+
if (getBot(larkAppId).config.apiOnly === true) {
|
|
269
|
+
if (!req.options?.waitForFinalOutput && !req.options?.asyncReturnSessionId) {
|
|
270
|
+
return { ok: false, errorCode: 'bad_request', error: 'apiOnly bot requires an HTTP response mode (waitForFinalOutput or asyncReturnSessionId)' };
|
|
271
|
+
}
|
|
272
|
+
if (req.target.rootMessageId) {
|
|
273
|
+
return { ok: false, errorCode: 'bad_request', error: 'apiOnly bot cannot target a Feishu rootMessageId' };
|
|
274
|
+
}
|
|
275
|
+
const targetChatId = typeof req.target.chatId === 'string' ? req.target.chatId.trim() : '';
|
|
276
|
+
if (targetChatId && !isHttpVirtualSession(targetChatId)) {
|
|
277
|
+
return { ok: false, errorCode: 'bad_request', error: 'apiOnly bot cannot target a real Feishu chatId' };
|
|
278
|
+
}
|
|
279
|
+
if (req.target.sessionId) {
|
|
280
|
+
const bound = activeBySessionId(deps.activeSessions, req.target.sessionId);
|
|
281
|
+
if (bound && !isHttpVirtualSession(bound.chatId)) {
|
|
282
|
+
return { ok: false, errorCode: 'bad_request', error: 'apiOnly bot may only resume its own HTTP virtual session' };
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
262
286
|
const dryRun = !!req.options?.dryRun;
|
|
263
287
|
const prompt = buildUntrustedEventPrompt(req, triggerId);
|
|
264
288
|
const topicMessage = buildExternalEventTopicMessage(req, larkAppId);
|
|
@@ -291,9 +315,9 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
291
315
|
return { ok: false, errorCode: 'target_required', error: 'turn target requires chatId, rootMessageId, or an active sessionId' };
|
|
292
316
|
}
|
|
293
317
|
}
|
|
294
|
-
const
|
|
318
|
+
const httpVirtual = isHttpVirtualSession(chatId);
|
|
295
319
|
let inChat = true;
|
|
296
|
-
if (!
|
|
320
|
+
if (!httpVirtual) {
|
|
297
321
|
inChat = await groupsStore.isInChat(larkAppId, chatId);
|
|
298
322
|
}
|
|
299
323
|
if (!inChat) {
|
|
@@ -303,8 +327,8 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
303
327
|
// session per top-level event, so an external event must NOT fold into the
|
|
304
328
|
// group's one chat-scope session. Explicit rootMessageId is a stricter target:
|
|
305
329
|
// it always routes to that thread anchor after daemon-side chat ownership check.
|
|
306
|
-
const regularGroupMode =
|
|
307
|
-
if (!ds && !req.target.sessionId && !rootMessageId && !
|
|
330
|
+
const regularGroupMode = httpVirtual ? 'chat' : resolveRegularGroupMode(larkAppId, chatId);
|
|
331
|
+
if (!ds && !req.target.sessionId && !rootMessageId && !httpVirtual
|
|
308
332
|
&& (regularGroupMode !== 'new-topic' || topicMessage === null)) {
|
|
309
333
|
ds = deps.activeSessions.get(sessionKey(chatId, larkAppId));
|
|
310
334
|
}
|
|
@@ -421,13 +445,13 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
421
445
|
return { ok: false, errorCode: 'trigger_failed', error: wd.error };
|
|
422
446
|
}
|
|
423
447
|
const bot = getBot(larkAppId);
|
|
424
|
-
const chatMode =
|
|
448
|
+
const chatMode = httpVirtual
|
|
425
449
|
? 'group'
|
|
426
450
|
: await getChatMode(larkAppId, chatId, { forceRefresh: true });
|
|
427
451
|
let scope = rootMessageId ? 'thread' : 'chat';
|
|
428
452
|
let anchor = rootMessageId || chatId;
|
|
429
453
|
const shouldOpenOwnTopic = !rootMessageId
|
|
430
|
-
&& !
|
|
454
|
+
&& !httpVirtual
|
|
431
455
|
&& externalEventOpensOwnTopic(chatMode, regularGroupMode);
|
|
432
456
|
if (shouldOpenOwnTopic && topicMessage !== null) {
|
|
433
457
|
anchor = await sendMessage(larkAppId, chatId, topicMessage);
|
|
@@ -442,6 +466,21 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
442
466
|
session.lastMessageAt = new Date(now).toISOString();
|
|
443
467
|
session.workingDir = wd.workingDir;
|
|
444
468
|
session.cliId = bot.config.cliId;
|
|
469
|
+
// Per-turn model / reasoning-effort override — scoped to codex-family bots
|
|
470
|
+
// (the documented B-mode target) and to a freshly-created trigger session.
|
|
471
|
+
// Gating on cliId keeps the contract honest and bounded: it never silently
|
|
472
|
+
// changes the model of a Claude/Gemini/CoCo bot, and a fold-in to an existing
|
|
473
|
+
// worker never reaches here. reasoningEffort is codex-only regardless (other
|
|
474
|
+
// adapters ignore it); model is gated here so it can't leak to non-codex CLIs.
|
|
475
|
+
const isCodexFamily = bot.config.cliId === 'codex' || bot.config.cliId === 'codex-app';
|
|
476
|
+
if (isCodexFamily) {
|
|
477
|
+
if (typeof req.options?.model === 'string' && req.options.model.trim()) {
|
|
478
|
+
session.model = req.options.model.trim();
|
|
479
|
+
}
|
|
480
|
+
if (req.options?.reasoningEffort) {
|
|
481
|
+
session.reasoningEffort = req.options.reasoningEffort;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
445
484
|
sessionStore.updateSession(session);
|
|
446
485
|
messageQueue.ensureQueue(anchor);
|
|
447
486
|
const newDs = {
|
|
@@ -465,7 +504,7 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
465
504
|
// asyncReturnSessionId)与虚拟会话是程序化「请求-应答」调用,每次一个 worktree 既反直觉又会
|
|
466
505
|
// 泄漏(无回收),一律在基目录直接跑、不建 worktree。commitRepoSelection 会自己 buildNewTopicPrompt /
|
|
467
506
|
// ensureSessionWhiteboard,故此分支跳过上面那套(省一次 getAvailableBots 通讯录往返)。
|
|
468
|
-
const useAutoWt = !
|
|
507
|
+
const useAutoWt = !httpVirtual
|
|
469
508
|
&& !req.options?.waitForFinalOutput
|
|
470
509
|
&& !req.options?.asyncReturnSessionId
|
|
471
510
|
&& !stableTurnId
|
|
@@ -494,7 +533,16 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
494
533
|
if (loudTurnId)
|
|
495
534
|
newDs.pendingTurnId = loudTurnId;
|
|
496
535
|
armLoudFinalSuppression(newDs);
|
|
497
|
-
deps.activeSessions
|
|
536
|
+
if (!setActiveSessionIfActive(deps.activeSessions, sessionKey(anchor, larkAppId), newDs)) {
|
|
537
|
+
disarmLoudFinalSuppression(newDs);
|
|
538
|
+
await closeSession(session.sessionId);
|
|
539
|
+
return {
|
|
540
|
+
ok: false,
|
|
541
|
+
triggerId,
|
|
542
|
+
errorCode: 'trigger_failed',
|
|
543
|
+
error: 'session route is reserved by an active persisted session',
|
|
544
|
+
};
|
|
545
|
+
}
|
|
498
546
|
const { runAutoWorktreeCommit } = await import('../im/lark/card-handler.js');
|
|
499
547
|
void runAutoWorktreeCommit({
|
|
500
548
|
ds: newDs, anchor, larkAppId, baseDir: wd.workingDir, title: triggerTitle(req),
|
|
@@ -512,7 +560,14 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
512
560
|
};
|
|
513
561
|
}
|
|
514
562
|
ensureSessionWhiteboard(newDs);
|
|
515
|
-
|
|
563
|
+
// Skip the Feishu roster probe (getAvailableBots → listChatBotMembers →
|
|
564
|
+
// /is_in_chat) for no-transport sessions: an apiOnly bot or an HTTP virtual
|
|
565
|
+
// chat has no real Lark chat to enumerate, and probing a synthetic id only
|
|
566
|
+
// adds a failing network round-trip + latency. No peer bots → empty roster.
|
|
567
|
+
const availableBots = larkTransportEnabled({ chatId, apiOnly: bot.config.apiOnly })
|
|
568
|
+
? await getAvailableBots(larkAppId, chatId)
|
|
569
|
+
: [];
|
|
570
|
+
const promptInput = buildNewTopicCliInput(prompt, session.sessionId, bot.config.cliId, bot.config.cliPathOverride, undefined, undefined, availableBots, undefined, { name: bot.botName, openId: bot.botOpenId }, localeForBot(larkAppId), undefined, {
|
|
516
571
|
larkAppId,
|
|
517
572
|
chatId,
|
|
518
573
|
whiteboardId: newDs.session.whiteboardId,
|
|
@@ -523,7 +578,15 @@ export async function triggerSessionTurn(req, deps, internal) {
|
|
|
523
578
|
// Register right before the fork branches (no await between here and forkWorker)
|
|
524
579
|
// so a concurrent inbound message can't observe this session worker-less and
|
|
525
580
|
// race a duplicate re-fork — the set-and-fork atomicity the original path had.
|
|
526
|
-
deps.activeSessions
|
|
581
|
+
if (!setActiveSessionIfActive(deps.activeSessions, sessionKey(anchor, larkAppId), newDs)) {
|
|
582
|
+
await closeSession(session.sessionId);
|
|
583
|
+
return {
|
|
584
|
+
ok: false,
|
|
585
|
+
triggerId,
|
|
586
|
+
errorCode: 'trigger_failed',
|
|
587
|
+
error: 'session was closed while the trigger was being prepared',
|
|
588
|
+
};
|
|
589
|
+
}
|
|
527
590
|
rememberInput(newDs, prompt, promptInput);
|
|
528
591
|
if (req.options?.waitForFinalOutput) {
|
|
529
592
|
return waitForSessionFinalOutput(newDs, triggerId, req.options?.timeoutMs ?? 120_000, (text) => ({
|