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
|
@@ -1,10 +1,70 @@
|
|
|
1
|
-
import { realpathSync, statSync } from 'node:fs';
|
|
1
|
+
import { lstatSync, realpathSync, statSync } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
3
|
+
import { basename, dirname, join } from 'node:path';
|
|
4
4
|
/** 角色库根:v0 固定约定,不做配置。 */
|
|
5
5
|
export function roleLibraryRoot() {
|
|
6
6
|
return join(homedir(), 'botmux-roles');
|
|
7
7
|
}
|
|
8
|
+
/** appId 必须是「单段目录名」:它要被拼进沙盒 readWrite 白名单路径,含 `/` 或
|
|
9
|
+
* `.`/`..` 的值会被 join/realpath 归一到**角色库之外**(`join(root, '../../.ssh')`
|
|
10
|
+
* = `~/.ssh`),把 rw 授给任意目录。bots.json 是机主自己写的,但手改/拼错不该
|
|
11
|
+
* 升级成一次沙盒逃逸。 */
|
|
12
|
+
const APP_ID_SEGMENT_RE = /^(?!\.{1,2}$)[A-Za-z0-9_.-]+$/;
|
|
13
|
+
/**
|
|
14
|
+
* 该 bot 自己的角色库子树(`<角色库根 realpath>/<appId>`)——沙盒 readWrite 白名单用。
|
|
15
|
+
* 任何一步不满足就返回 null:宁可不产生规则(角色系统不可用,机主看得见查得到),
|
|
16
|
+
* 也不能把 readWrite 授到角色库之外。
|
|
17
|
+
*
|
|
18
|
+
* 三道校验,缺一不可:
|
|
19
|
+
* 1. appId 形状(单段目录名)——见 APP_ID_SEGMENT_RE。
|
|
20
|
+
* 2. 只 realpath 角色库根的**父目录**,然后 `botmux-roles` 与 `<appId>` 这**最后两段
|
|
21
|
+
* 各自 lstat、必须是真目录**。为什么这么切:沙盒两个引擎都按 canonical 路径匹配,
|
|
22
|
+
* `$HOME` 本身是符号链接的机器(`/home/u` → `/data00/home/u` 这一类)不归一会静默
|
|
23
|
+
* fail-open——所以上层中间段必须 realpath、也允许它们是链接;但最后两段一旦跟链,
|
|
24
|
+
* 「授权本 bot 的角色库」就变成「授权链接指向的任意目录」。
|
|
25
|
+
* 3. 因此末两段用 **lstat 而不是 stat/realpath**:若 `<root>` 或 `<root>/<appId>` 在
|
|
26
|
+
* spawn 前已被摆成指向 `~/.ssh`、`~/.botmux` 或**另一个 bot 的角色库**的符号链接,
|
|
27
|
+
* 跟随解析会把链接目标当成本 bot 的子树直接授 rw —— 任意目录读写 + 跨 bot 越权。
|
|
28
|
+
* 末两段确定不是链接、上层已 realpath,返回值天然是 canonical 路径,调用方不得再
|
|
29
|
+
* realpath(再跟一次就把这道校验作废了)。
|
|
30
|
+
*
|
|
31
|
+
* 明确不在本函数(也不在本文件)射程内的两件事,都需要宿主级写权限,而拿到宿主级写
|
|
32
|
+
* 权限的人本来就能直接改 bots.json 关掉沙盒 —— 且这两条对策略里**每一条**路径规则
|
|
33
|
+
* (workingDir、botHome、cliDataPaths…全都在同一时点做一次存在性检查)都同样成立,
|
|
34
|
+
* 只为这一条规则加固属于安全戏剧:
|
|
35
|
+
* - TOCTOU:lstat 之后、真正 spawn/bind 之前把目录换成符号链接。路径型沙盒(Seatbelt
|
|
36
|
+
* 吃路径字符串、bwrap 吃 bind 源)无法靠持 fd 关闭这个窗口。
|
|
37
|
+
* - mount point:末段是 bind/FUSE 挂载点时仍是「真目录」,能把挂载目标整棵授出去。
|
|
38
|
+
*
|
|
39
|
+
* 另一件既有遗留:大小写不敏感卷上两个仅大小写不同的 appId 指向同一目录。那是角色库
|
|
40
|
+
* 按 appId 分目录这个布局本身的性质(不开沙盒也一样共享),要治得在 bot 配置加载期按
|
|
41
|
+
* 文件系统身份拒绝碰撞。
|
|
42
|
+
*/
|
|
43
|
+
export function roleLibrarySubtree(appId, rootOverride) {
|
|
44
|
+
if (typeof appId !== 'string' || !APP_ID_SEGMENT_RE.test(appId))
|
|
45
|
+
return null;
|
|
46
|
+
const root = rootOverride ?? roleLibraryRoot();
|
|
47
|
+
const realDir = (p) => {
|
|
48
|
+
try {
|
|
49
|
+
const st = lstatSync(p);
|
|
50
|
+
return st.isSymbolicLink() || !st.isDirectory() ? null : p;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
let parentReal;
|
|
57
|
+
try {
|
|
58
|
+
parentReal = realpathSync(dirname(root));
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const rootPath = realDir(join(parentReal, basename(root)));
|
|
64
|
+
if (!rootPath)
|
|
65
|
+
return null;
|
|
66
|
+
return realDir(join(rootPath, appId));
|
|
67
|
+
}
|
|
8
68
|
/** 文件系统身份包含判断(dev+ino):从 childReal 逐级向上,某祖先与 rootReal 同一目录即包含。
|
|
9
69
|
* 不依赖字符串大小写语义——大小写敏感/不敏感卷、darwin/linux 行为一致。
|
|
10
70
|
* childReal === rootReal 时首个检查从其父目录开始,天然拒绝根本身。 */
|
|
@@ -25,8 +85,24 @@ function isContainedIn(childReal, rootReal) {
|
|
|
25
85
|
* `botmux role switch` 的目标目录硬校验(调用方是模型,不可信):
|
|
26
86
|
* realpath 归一化(防 ../ 与符号链接逃逸)→ 必须位于角色库根之下
|
|
27
87
|
* (文件系统身份 dev+ino 比较,防前缀兄弟目录与大小写变体绕过)→ 必须是已存在的目录。
|
|
88
|
+
*
|
|
89
|
+
* 传了 `ownAppId` 时**收窄到该 bot 自己的子树** `<角色库根>/<appId>`:不传等同旧行为
|
|
90
|
+
* (只 pin 全局根)。收窄的理由是不收窄就能切进**别的 bot 的角色目录**——`/cd` 路由随后
|
|
91
|
+
* 把 `ds.workingDir` 钉过去(`dashboard-ipc-server.ts`),而 `ds.workingDir` 在 fs-policy
|
|
92
|
+
* 里**永远拿 readWrite**,于是那个 bot 的沙盒会话拿到对方角色目录(含 `users/<别人
|
|
93
|
+
* openId>/` 私有角色)的 readWrite——rw 从 workingDir 那条腿来,不是从角色库专用 grant
|
|
94
|
+
* (后者按本 bot appId keying,对错位目标返 null)。
|
|
95
|
+
*
|
|
96
|
+
* **FAIL-CLOSED(codex delta review)**:传了 `ownAppId` 但 `<根>/<appId>` 不是真目录
|
|
97
|
+
* (旧 runbook 用人类 slug 命名这一层,或被摆成符号链接)时**直接拒绝**
|
|
98
|
+
* (`own_role_library_missing`),**不回落全局根**。曾经的「回落全局根」是 fail-open:
|
|
99
|
+
* 存量非 appId 布局下它让 `botmux role switch` 继续能切进任意 bot 的库内目录并经
|
|
100
|
+
* workingDir 拿 rw,正是收窄要堵的越权。fail-closed 的代价是存量非 appId 部署在迁移
|
|
101
|
+
* (`docs/roles/deploy-runbook.md` §8:把这层目录名改成 appId)之前切不动角色——但
|
|
102
|
+
* 沙盒下角色系统本就 EPERM 不可用,fail-closed 不额外损失可用功能;非沙盒部署迁移一次
|
|
103
|
+
* 即恢复。人工 IM `/cd` 不走本校验(走 `validateWorkingDir`),不受影响。
|
|
28
104
|
*/
|
|
29
|
-
export function validateRoleLibraryPath(input, rootOverride) {
|
|
105
|
+
export function validateRoleLibraryPath(input, rootOverride, ownAppId) {
|
|
30
106
|
const raw = (input ?? '').trim();
|
|
31
107
|
if (!raw)
|
|
32
108
|
return { ok: false, error: 'empty_path' };
|
|
@@ -50,6 +126,38 @@ export function validateRoleLibraryPath(input, rootOverride) {
|
|
|
50
126
|
catch {
|
|
51
127
|
return { ok: false, error: 'role_library_missing' };
|
|
52
128
|
}
|
|
129
|
+
// 收窄边界:本 bot 自己的子树。传了 ownAppId 但子树不是真目录(缺失/文件/符号链接)
|
|
130
|
+
// → FAIL-CLOSED,绝不回落全局根(回落是 fail-open,见函数注释)。
|
|
131
|
+
if (ownAppId) {
|
|
132
|
+
const ownSubtree = roleLibrarySubtree(ownAppId, rootOverride);
|
|
133
|
+
if (!ownSubtree)
|
|
134
|
+
return { ok: false, error: 'own_role_library_missing' };
|
|
135
|
+
let real;
|
|
136
|
+
try {
|
|
137
|
+
real = realpathSync(expanded);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return { ok: false, error: 'dir_not_found' };
|
|
141
|
+
}
|
|
142
|
+
if (/[\x00-\x1f\x7f]/.test(real))
|
|
143
|
+
return { ok: false, error: 'invalid_path_chars' };
|
|
144
|
+
if (!isContainedIn(real, ownSubtree)) {
|
|
145
|
+
// 区分两种越界,便于运营自查:在库内但不在自己子树 → 跨 bot(同样 403)。
|
|
146
|
+
return {
|
|
147
|
+
ok: false,
|
|
148
|
+
error: isContainedIn(real, rootReal) ? 'outside_own_role_library' : 'outside_role_library',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
if (!statSync(real).isDirectory())
|
|
153
|
+
return { ok: false, error: 'not_a_directory' };
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return { ok: false, error: 'dir_not_found' };
|
|
157
|
+
}
|
|
158
|
+
return { ok: true, resolvedPath: real };
|
|
159
|
+
}
|
|
160
|
+
// 未传 ownAppId:旧行为,只 pin 全局根(内部/测试调用方)。
|
|
53
161
|
let real;
|
|
54
162
|
try {
|
|
55
163
|
real = realpathSync(expanded);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-library.js","sourceRoot":"","sources":["../../src/core/role-library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"role-library.js","sourceRoot":"","sources":["../../src/core/role-library.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,8 +45,20 @@ export declare function resolveRole(larkAppId: string, chatId: string): {
|
|
|
45
45
|
};
|
|
46
46
|
export type RoleInjectMode = 'every' | 'once';
|
|
47
47
|
/**
|
|
48
|
-
* Read the injection mode
|
|
49
|
-
*
|
|
48
|
+
* Read the bot-level DEFAULT injection mode (applies to any chat that hasn't set
|
|
49
|
+
* its own). Defaults to 'every' (legacy) when unset/unparseable. This is the
|
|
50
|
+
* fallback consulted by readRoleInjectMode — it lets an operator make the bot's
|
|
51
|
+
* default role inject-once across all its chats from the Bot config page,
|
|
52
|
+
* without touching each chat individually.
|
|
53
|
+
*/
|
|
54
|
+
export declare function readTeamRoleInjectMode(larkAppId: string): RoleInjectMode;
|
|
55
|
+
/** Persist the bot-level default injection mode. 'every' removes the sidecar. */
|
|
56
|
+
export declare function writeTeamRoleInjectMode(larkAppId: string, mode: RoleInjectMode): void;
|
|
57
|
+
/**
|
|
58
|
+
* Read the injection mode for a (bot, chat). A chat that set its own mode via
|
|
59
|
+
* 角色管理 wins (sidecar present ⇒ 'once'); otherwise we fall back to the
|
|
60
|
+
* bot-level default (readTeamRoleInjectMode), which itself defaults to 'every'
|
|
61
|
+
* — so legacy behavior is unchanged until an operator opts a bot into 'once'.
|
|
50
62
|
*/
|
|
51
63
|
export declare function readRoleInjectMode(larkAppId: string, chatId: string): RoleInjectMode;
|
|
52
64
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-resolver.d.ts","sourceRoot":"","sources":["../../src/core/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAeH,eAAO,MAAM,cAAc,QAAY,CAAC;AA6BxC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAoED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhF;AAED,uEAAuE;AACvE,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQtF;AAED,qCAAqC;AACrC,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAazE;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAY7D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAM7G;AAaD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"role-resolver.d.ts","sourceRoot":"","sources":["../../src/core/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAeH,eAAO,MAAM,cAAc,QAAY,CAAC;AA6BxC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAoED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhF;AAED,uEAAuE;AACvE,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQtF;AAED,qCAAqC;AACrC,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAazE;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAY7D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAM7G;AAaD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;AAc9C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAUxE;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CASrF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAUpF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CASjG;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG5E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAI5E"}
|
|
@@ -204,9 +204,52 @@ function roleMetaFilePath(larkAppId, chatId) {
|
|
|
204
204
|
assertRoleChatId(chatId);
|
|
205
205
|
return join(config.session.dataDir, 'roles', larkAppId, `${chatId}.meta.json`);
|
|
206
206
|
}
|
|
207
|
+
/** Absolute path to the bot-level default role metadata sidecar (sits next to
|
|
208
|
+
* the team role .md, keyed by app only — no chat). */
|
|
209
|
+
function teamRoleMetaFilePath(larkAppId) {
|
|
210
|
+
return join(config.session.dataDir, 'team-roles', `${larkAppId}.meta.json`);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Read the bot-level DEFAULT injection mode (applies to any chat that hasn't set
|
|
214
|
+
* its own). Defaults to 'every' (legacy) when unset/unparseable. This is the
|
|
215
|
+
* fallback consulted by readRoleInjectMode — it lets an operator make the bot's
|
|
216
|
+
* default role inject-once across all its chats from the Bot config page,
|
|
217
|
+
* without touching each chat individually.
|
|
218
|
+
*/
|
|
219
|
+
export function readTeamRoleInjectMode(larkAppId) {
|
|
220
|
+
if (!larkAppId)
|
|
221
|
+
return 'every';
|
|
222
|
+
try {
|
|
223
|
+
const fp = teamRoleMetaFilePath(larkAppId);
|
|
224
|
+
if (!existsSync(fp))
|
|
225
|
+
return 'every';
|
|
226
|
+
const meta = JSON.parse(readFileSync(fp, 'utf-8'));
|
|
227
|
+
return meta?.inject === 'once' ? 'once' : 'every';
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return 'every';
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/** Persist the bot-level default injection mode. 'every' removes the sidecar. */
|
|
234
|
+
export function writeTeamRoleInjectMode(larkAppId, mode) {
|
|
235
|
+
const fp = teamRoleMetaFilePath(larkAppId);
|
|
236
|
+
if (mode === 'once') {
|
|
237
|
+
mkdirSync(dirname(fp), { recursive: true });
|
|
238
|
+
atomicWriteFileSync(fp, JSON.stringify({ inject: 'once' }));
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
try {
|
|
242
|
+
unlinkSync(fp);
|
|
243
|
+
}
|
|
244
|
+
catch { /* already absent */ }
|
|
245
|
+
}
|
|
246
|
+
logger.info(`[role] team inject mode app=${larkAppId} => ${mode}`);
|
|
247
|
+
}
|
|
207
248
|
/**
|
|
208
|
-
* Read the injection mode for a (bot, chat).
|
|
209
|
-
* sidecar
|
|
249
|
+
* Read the injection mode for a (bot, chat). A chat that set its own mode via
|
|
250
|
+
* 角色管理 wins (sidecar present ⇒ 'once'); otherwise we fall back to the
|
|
251
|
+
* bot-level default (readTeamRoleInjectMode), which itself defaults to 'every'
|
|
252
|
+
* — so legacy behavior is unchanged until an operator opts a bot into 'once'.
|
|
210
253
|
*/
|
|
211
254
|
export function readRoleInjectMode(larkAppId, chatId) {
|
|
212
255
|
if (!larkAppId || !chatId || !isValidRoleChatId(chatId))
|
|
@@ -214,12 +257,12 @@ export function readRoleInjectMode(larkAppId, chatId) {
|
|
|
214
257
|
try {
|
|
215
258
|
const fp = roleMetaFilePath(larkAppId, chatId);
|
|
216
259
|
if (!existsSync(fp))
|
|
217
|
-
return
|
|
260
|
+
return readTeamRoleInjectMode(larkAppId);
|
|
218
261
|
const meta = JSON.parse(readFileSync(fp, 'utf-8'));
|
|
219
262
|
return meta?.inject === 'once' ? 'once' : 'every';
|
|
220
263
|
}
|
|
221
264
|
catch {
|
|
222
|
-
return
|
|
265
|
+
return readTeamRoleInjectMode(larkAppId);
|
|
223
266
|
}
|
|
224
267
|
}
|
|
225
268
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-resolver.js","sourceRoot":"","sources":["../../src/core/role-resolver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"role-resolver.js","sourceRoot":"","sources":["../../src/core/role-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import type { DaemonSession } from './types.js';
|
|
2
2
|
export declare function markSessionActivity(ds: DaemonSession, at?: number): void;
|
|
3
|
+
/** Refresh the latest user/bot exchange after its append-only source file has
|
|
4
|
+
* been written. Some inbound routes mark activity before appending to queues,
|
|
5
|
+
* so keeping this explicit avoids publishing the previous turn's preview. */
|
|
6
|
+
export declare function publishSessionMessagePreviewPatch(ds: DaemonSession): void;
|
|
7
|
+
/** Publish the persisted close state and explicitly clear message previews.
|
|
8
|
+
*
|
|
9
|
+
* Dashboard clients merge `session.update` patches into their current row.
|
|
10
|
+
* Deleting the turn-send marker therefore is not enough: every live close
|
|
11
|
+
* entrypoint must overwrite preview fields or an already-open dashboard keeps
|
|
12
|
+
* rendering the last private exchange until its next full hydrate.
|
|
13
|
+
*/
|
|
14
|
+
export declare function publishClosedSessionPatch(sessionId: string, closedAt?: number, extraPatch?: {
|
|
15
|
+
tokenUsage: unknown;
|
|
16
|
+
}): void;
|
|
3
17
|
/** Publish the latest inbound sender kind after quoteTarget* has been updated.
|
|
4
18
|
*
|
|
5
19
|
* `markSessionActivity()` runs before some routing paths finish writing their
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-activity.d.ts","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-activity.d.ts","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,GAAE,MAAmB,GAAG,IAAI,CAgBpF;AAED;;6EAE6E;AAC7E,wBAAgB,iCAAiC,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAQzE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,GACnC,IAAI,CAmBN;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAQpE;AAED;;;;eAIe;AACf,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAgB7D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAK9D;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAK1D;AAED;;;;;;;;2EAQ2E;AAC3E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAGlE"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import * as sessionStore from '../services/session-store.js';
|
|
7
7
|
import { dashboardEventBus } from './dashboard-events.js';
|
|
8
8
|
import { composeRowFromActive } from './dashboard-rows.js';
|
|
9
|
+
import { buildSessionMessagePreview } from './session-message-preview.js';
|
|
9
10
|
export function markSessionActivity(ds, at = Date.now()) {
|
|
10
11
|
ds.lastMessageAt = at;
|
|
11
12
|
const iso = new Date(at).toISOString();
|
|
@@ -15,7 +16,51 @@ export function markSessionActivity(ds, at = Date.now()) {
|
|
|
15
16
|
}
|
|
16
17
|
dashboardEventBus.publish({
|
|
17
18
|
type: 'session.update',
|
|
18
|
-
body: {
|
|
19
|
+
body: {
|
|
20
|
+
sessionId: ds.session.sessionId,
|
|
21
|
+
patch: {
|
|
22
|
+
lastMessageAt: at,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** Refresh the latest user/bot exchange after its append-only source file has
|
|
28
|
+
* been written. Some inbound routes mark activity before appending to queues,
|
|
29
|
+
* so keeping this explicit avoids publishing the previous turn's preview. */
|
|
30
|
+
export function publishSessionMessagePreviewPatch(ds) {
|
|
31
|
+
dashboardEventBus.publish({
|
|
32
|
+
type: 'session.update',
|
|
33
|
+
body: {
|
|
34
|
+
sessionId: ds.session.sessionId,
|
|
35
|
+
patch: buildSessionMessagePreview(ds.session),
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** Publish the persisted close state and explicitly clear message previews.
|
|
40
|
+
*
|
|
41
|
+
* Dashboard clients merge `session.update` patches into their current row.
|
|
42
|
+
* Deleting the turn-send marker therefore is not enough: every live close
|
|
43
|
+
* entrypoint must overwrite preview fields or an already-open dashboard keeps
|
|
44
|
+
* rendering the last private exchange until its next full hydrate.
|
|
45
|
+
*/
|
|
46
|
+
export function publishClosedSessionPatch(sessionId, closedAt, extraPatch) {
|
|
47
|
+
dashboardEventBus.publish({
|
|
48
|
+
type: 'session.update',
|
|
49
|
+
body: {
|
|
50
|
+
sessionId,
|
|
51
|
+
patch: {
|
|
52
|
+
status: 'closed',
|
|
53
|
+
closedAt: closedAt ?? Date.now(),
|
|
54
|
+
...extraPatch,
|
|
55
|
+
previewUserText: null,
|
|
56
|
+
previewBotText: null,
|
|
57
|
+
previewUserFullText: null,
|
|
58
|
+
previewBotFullText: null,
|
|
59
|
+
previewUserAt: null,
|
|
60
|
+
previewBotAt: null,
|
|
61
|
+
previewBotState: null,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
19
64
|
});
|
|
20
65
|
}
|
|
21
66
|
/** Publish the latest inbound sender kind after quoteTarget* has been updated.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-activity.js","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,4EAA4E;AAC5E,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-activity.js","sourceRoot":"","sources":["../../src/core/session-activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,10 @@ export declare const SESSION_TITLE_MAX = 200;
|
|
|
4
4
|
export declare function normalizeKanbanColumn(value: unknown): SessionKanbanColumn | null;
|
|
5
5
|
/** 排序位置是任意有限数(拖拽用相邻中点插入,会出现小数/大数)。 */
|
|
6
6
|
export declare function normalizeKanbanPosition(value: unknown): number | null;
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
7
|
+
/**
|
|
8
|
+
* 重命名标题:单行化、移除会被终端解释的 C0/C1/DEL 控制字符、限长;
|
|
9
|
+
* 空串视为非法。标题既会写到 `botmux list` 的本机 TTY,也会送进原生
|
|
10
|
+
* TUI 的 `/rename`,所以这里是两条路径共用的输入边界。
|
|
11
|
+
*/
|
|
9
12
|
export declare function normalizeSessionTitle(value: unknown): string | null;
|
|
10
13
|
//# sourceMappingURL=session-board.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-board.d.ts","sourceRoot":"","sources":["../../src/core/session-board.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,kEAAmE,CAAC;AAClG,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAIhF;AAED,sCAAsC;AACtC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAErE;AAED;
|
|
1
|
+
{"version":3,"file":"session-board.d.ts","sourceRoot":"","sources":["../../src/core/session-board.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,kEAAmE,CAAC;AAClG,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAIhF;AAED,sCAAsC;AACtC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAErE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKnE"}
|
|
@@ -12,8 +12,11 @@ export function normalizeKanbanColumn(value) {
|
|
|
12
12
|
export function normalizeKanbanPosition(value) {
|
|
13
13
|
return typeof value === 'number' && Number.isFinite(value) ? value : null;
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
15
|
+
/**
|
|
16
|
+
* 重命名标题:单行化、移除会被终端解释的 C0/C1/DEL 控制字符、限长;
|
|
17
|
+
* 空串视为非法。标题既会写到 `botmux list` 的本机 TTY,也会送进原生
|
|
18
|
+
* TUI 的 `/rename`,所以这里是两条路径共用的输入边界。
|
|
19
|
+
*/
|
|
17
20
|
export function normalizeSessionTitle(value) {
|
|
18
21
|
if (typeof value !== 'string')
|
|
19
22
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-board.js","sourceRoot":"","sources":["../../src/core/session-board.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,wCAAwC;AACxC,8BAA8B;AAE9B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGlG,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1F,CAAC,CAAE,KAA6B;QAChC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED;
|
|
1
|
+
{"version":3,"file":"session-board.js","sourceRoot":"","sources":["../../src/core/session-board.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,wCAAwC;AACxC,8BAA8B;AAE9B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGlG,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1F,CAAC,CAAE,KAA6B;QAChC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/F,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { Session } from '../types.js';
|
|
2
2
|
/** Liveness check for an arbitrary pid without signalling it (signal 0). */
|
|
3
3
|
export declare function isProcessAlive(pid: number): boolean;
|
|
4
|
-
/** True when a `bmx-<prefix>` tmux session exists. Best-effort; tmux missing
|
|
4
|
+
/** True when a `bmx-<prefix>` legacy tmux session exists. Best-effort; tmux missing
|
|
5
5
|
* or any error → treated as "no pane". */
|
|
6
6
|
export declare function tmuxSessionExists(name: string): boolean;
|
|
7
7
|
/**
|
|
8
8
|
* True when a session record is a stopped zombie: no live CLI process and no
|
|
9
|
-
*
|
|
10
|
-
* CLI pid is authoritative (we never spawned a botmux
|
|
11
|
-
* sessions, both the recorded worker pid and the
|
|
12
|
-
*
|
|
9
|
+
* recoverable backing target. Mirrors cli.ts `delete stopped`. For adopted
|
|
10
|
+
* sessions the original CLI pid is authoritative (we never spawned a botmux
|
|
11
|
+
* worker); for normal sessions, both the recorded worker pid and the exact
|
|
12
|
+
* persisted backend target must be gone. Caller is responsible for the
|
|
13
|
+
* `status === 'active'` gate.
|
|
13
14
|
*/
|
|
14
15
|
export declare function isSessionStopped(s: Session): boolean;
|
|
15
16
|
//# sourceMappingURL=session-liveness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-liveness.d.ts","sourceRoot":"","sources":["../../src/core/session-liveness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-liveness.d.ts","sourceRoot":"","sources":["../../src/core/session-liveness.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASnD;AAED;2CAC2C;AAC3C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOvD;AASD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAsCpD"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared "is this session a stopped zombie?" predicate — the same notion the
|
|
3
|
-
* `botmux delete stopped` CLI subcommand uses (dead CLI process + no
|
|
4
|
-
* factored out so the host-overload alert's "清僵尸"
|
|
5
|
-
* semantics server-side without duplicating (or
|
|
3
|
+
* `botmux delete stopped` CLI subcommand uses (dead CLI process + no exact
|
|
4
|
+
* persistent backing), factored out so the host-overload alert's "清僵尸"
|
|
5
|
+
* button can reuse the exact semantics server-side without duplicating (or
|
|
6
|
+
* drifting from) the CLI logic.
|
|
6
7
|
*
|
|
7
8
|
* A zombie = a session the store still marks `active`, but whose CLI process is
|
|
8
|
-
* gone and has no backing
|
|
9
|
-
* just a stale record holding a slot. Intentionally-suspended sessions are NOT
|
|
9
|
+
* gone and has no recoverable backing target — i.e. nothing is actually
|
|
10
|
+
* running, it's just a stale record holding a slot. Intentionally-suspended sessions are NOT
|
|
10
11
|
* zombies: they're worker-less on purpose and cold-resume on the next message.
|
|
11
12
|
* botmux's own cap-suspend deliberately clears the pid AND destroys the backing
|
|
12
|
-
* CLI/
|
|
13
|
+
* CLI/backend (that's how it reclaims memory), so the pid/backend probe alone can't
|
|
13
14
|
* tell such a session apart from a true zombie — it would classify the just-
|
|
14
15
|
* suspended session as stopped and let the sweep permanently close it. The
|
|
15
16
|
* persisted `suspendedColdResume` marker is therefore authoritative and short-
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
* (session-list-liveness.ts). Callers still gate on `status === 'active'`.
|
|
18
19
|
*/
|
|
19
20
|
import { execFileSync } from 'node:child_process';
|
|
21
|
+
import { isSuspendableBackendType, probePersistentBackendTarget, resolvePersistentBackendTarget, } from './persistent-backend.js';
|
|
20
22
|
/** Liveness check for an arbitrary pid without signalling it (signal 0). */
|
|
21
23
|
export function isProcessAlive(pid) {
|
|
22
24
|
if (!Number.isInteger(pid) || pid <= 0)
|
|
@@ -30,7 +32,7 @@ export function isProcessAlive(pid) {
|
|
|
30
32
|
return err?.code === 'EPERM';
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
|
-
/** True when a `bmx-<prefix>` tmux session exists. Best-effort; tmux missing
|
|
35
|
+
/** True when a `bmx-<prefix>` legacy tmux session exists. Best-effort; tmux missing
|
|
34
36
|
* or any error → treated as "no pane". */
|
|
35
37
|
export function tmuxSessionExists(name) {
|
|
36
38
|
try {
|
|
@@ -49,10 +51,11 @@ function adoptedCliPid(s) {
|
|
|
49
51
|
}
|
|
50
52
|
/**
|
|
51
53
|
* True when a session record is a stopped zombie: no live CLI process and no
|
|
52
|
-
*
|
|
53
|
-
* CLI pid is authoritative (we never spawned a botmux
|
|
54
|
-
* sessions, both the recorded worker pid and the
|
|
55
|
-
*
|
|
54
|
+
* recoverable backing target. Mirrors cli.ts `delete stopped`. For adopted
|
|
55
|
+
* sessions the original CLI pid is authoritative (we never spawned a botmux
|
|
56
|
+
* worker); for normal sessions, both the recorded worker pid and the exact
|
|
57
|
+
* persisted backend target must be gone. Caller is responsible for the
|
|
58
|
+
* `status === 'active'` gate.
|
|
56
59
|
*/
|
|
57
60
|
export function isSessionStopped(s) {
|
|
58
61
|
// botmux cap-suspended a session on purpose: pid cleared + backing CLI/tmux
|
|
@@ -70,7 +73,25 @@ export function isSessionStopped(s) {
|
|
|
70
73
|
// spawning a tmux child per live session and stalling the daemon loop.
|
|
71
74
|
if (s.pid && isProcessAlive(s.pid))
|
|
72
75
|
return false;
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
// Remote Riff tasks have no local worker/backing process to prove dead.
|
|
77
|
+
// ZMX likewise owns one independent daemon per session: a missing backing
|
|
78
|
+
// daemon can mean a normal process/host restart, and the transcript-backed
|
|
79
|
+
// row remains recoverable by a lazy cold-resume. Neither backend is safe to
|
|
80
|
+
// permanently close from this local zombie heuristic.
|
|
81
|
+
if (s.backendType === 'riff' || s.backendType === 'zmx')
|
|
82
|
+
return false;
|
|
83
|
+
if (s.backendType === 'pty')
|
|
84
|
+
return true;
|
|
85
|
+
// Rows created before backend stamping used tmux as their only externally
|
|
86
|
+
// recoverable backing. Preserve that compatibility probe.
|
|
87
|
+
if (s.backendType === undefined) {
|
|
88
|
+
return !tmuxSessionExists(`bmx-${s.sessionId.substring(0, 8)}`);
|
|
89
|
+
}
|
|
90
|
+
if (!isSuspendableBackendType(s.backendType))
|
|
91
|
+
return true;
|
|
92
|
+
const target = resolvePersistentBackendTarget(s.backendType, s.sessionId, s.persistentBackendTarget);
|
|
93
|
+
// Only positive absence is safe to sweep. A transient backend/control-plane
|
|
94
|
+
// failure must not turn a live persistent CLI into a destructive "zombie".
|
|
95
|
+
return probePersistentBackendTarget(target) === 'missing';
|
|
75
96
|
}
|
|
76
97
|
//# sourceMappingURL=session-liveness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-liveness.js","sourceRoot":"","sources":["../../src/core/session-liveness.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-liveness.js","sourceRoot":"","sources":["../../src/core/session-liveness.ts"],"names":[],"mappings":"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"}
|
|
@@ -235,7 +235,7 @@ export declare function rememberLastCliInput(ds: DaemonSession, userPrompt: stri
|
|
|
235
235
|
}): void;
|
|
236
236
|
/**
|
|
237
237
|
* Whether daemon restore should eagerly re-fork a worker to re-attach a
|
|
238
|
-
* surviving backing pane. True for every persistent backend (tmux/herdr/zellij);
|
|
238
|
+
* surviving backing pane. True for every persistent backend (tmux/herdr/zellij/zmx);
|
|
239
239
|
* the pty backend has nothing to re-attach to, so it stays lazy.
|
|
240
240
|
*
|
|
241
241
|
* Eager re-attach is what makes a session actually come back after a restart —
|
|
@@ -302,13 +302,14 @@ export declare function ensureTerminalWorkerPort(ds: DaemonSession): Promise<num
|
|
|
302
302
|
* manual resume could resurrect a stale member epoch
|
|
303
303
|
* - 'deferred_unmaterialized' — a silent fresh-topic run finished without
|
|
304
304
|
* publishing, so it has no conversation to resume
|
|
305
|
+
* - 'resume_cancelled' — a concurrent close won while resume was committing
|
|
305
306
|
*/
|
|
306
307
|
export declare function resumeSession(sessionId: string, activeSessions: Map<string, DaemonSession>): Promise<{
|
|
307
308
|
ok: true;
|
|
308
309
|
ds: DaemonSession;
|
|
309
310
|
} | {
|
|
310
311
|
ok: false;
|
|
311
|
-
error: 'not_found' | 'not_closed' | 'anchor_occupied' | 'adopt_unsupported' | 'vc_receiver_managed' | 'deferred_unmaterialized';
|
|
312
|
+
error: 'not_found' | 'not_closed' | 'anchor_occupied' | 'adopt_unsupported' | 'vc_receiver_managed' | 'deferred_unmaterialized' | 'resume_cancelled';
|
|
312
313
|
activeSessionId?: string;
|
|
313
314
|
}>;
|
|
314
315
|
/**
|