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,7 +1,9 @@
|
|
|
1
1
|
import { adoptTargetKey, adoptTargetLabel } from '../../core/session-discovery.js';
|
|
2
2
|
import { t } from '../../i18n/index.js';
|
|
3
|
+
import { cardUsageFooterSegment } from './md-card.js';
|
|
3
4
|
import { readGlobalConfig } from '../../global-config.js';
|
|
4
5
|
import { isLocalCliOpenEnabled } from '../../services/local-cli-opener.js';
|
|
6
|
+
import { clampGrantQuotaForCard, DEFAULT_GRANT_DURATION_MS, DEFAULT_GRANT_QUOTA, GRANT_DURATION_OPTIONS, } from '../../services/grant-policy.js';
|
|
5
7
|
/** select_static 里代表「清回默认 / 未设置」的哨兵值(model / lang 下拉用)。 */
|
|
6
8
|
export const CONFIG_UNSET = '__unset__';
|
|
7
9
|
/** 布尔字段按配置页的逻辑分组(与 dashboard 的 Bot Profiles 区块对应)。 */
|
|
@@ -255,24 +257,27 @@ export function buildSessionCard(sessionId, rootId, terminalUrl, title, cliId, s
|
|
|
255
257
|
const cliName = getCliDisplayName(cliId ?? 'claude-code');
|
|
256
258
|
const effectiveCliId = cliId ?? 'claude-code';
|
|
257
259
|
const actionBase = { root_id: rootId, session_id: sessionId, cli_id: effectiveCliId };
|
|
258
|
-
const actions = [
|
|
259
|
-
|
|
260
|
+
const actions = [];
|
|
261
|
+
if (terminalUrl) {
|
|
262
|
+
actions.push({
|
|
260
263
|
tag: 'button',
|
|
261
264
|
text: { tag: 'plain_text', content: t(showManageButtons ? 'card.btn.open_writable_terminal' : 'card.btn.open_terminal', undefined, locale) },
|
|
262
265
|
type: 'primary',
|
|
263
266
|
multi_url: terminalMultiUrl(terminalUrl),
|
|
264
|
-
}
|
|
265
|
-
|
|
267
|
+
});
|
|
268
|
+
}
|
|
266
269
|
if (!showManageButtons) {
|
|
267
270
|
const localBtn = cliId ? localCliButton(effectiveCliId, actionBase, locale, localCliReady) : undefined;
|
|
268
271
|
if (localBtn)
|
|
269
272
|
actions.push(localBtn);
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
if (terminalUrl) {
|
|
274
|
+
actions.push({
|
|
275
|
+
tag: 'button',
|
|
276
|
+
text: { tag: 'plain_text', content: t('card.btn.get_write_link', undefined, locale) },
|
|
277
|
+
type: 'default',
|
|
278
|
+
value: { action: 'get_write_link', ...actionBase },
|
|
279
|
+
});
|
|
280
|
+
}
|
|
276
281
|
}
|
|
277
282
|
if (showManageButtons && !adoptMode) {
|
|
278
283
|
actions.push({
|
|
@@ -576,7 +581,7 @@ function streamStatusLabel(status, usageLimit, locale) {
|
|
|
576
581
|
/** Push the shared "output body" elements (usage-limit notice + screenshot) used
|
|
577
582
|
* by both {@link buildStreamingCard} and {@link buildPrivateSnapshotCard}. */
|
|
578
583
|
function pushStreamBody(elements, opts) {
|
|
579
|
-
const { status, usageLimit, displayMode, imageKey, cliName, locale } = opts;
|
|
584
|
+
const { status, usageLimit, displayMode, imageKey, cliName, locale, usage } = opts;
|
|
580
585
|
if (status === 'limited' && usageLimit) {
|
|
581
586
|
elements.push({
|
|
582
587
|
tag: 'markdown',
|
|
@@ -595,6 +600,17 @@ function pushStreamBody(elements, opts) {
|
|
|
595
600
|
}
|
|
596
601
|
elements.push({ tag: 'hr' });
|
|
597
602
|
}
|
|
603
|
+
// Native Context / Token usage line (grey, small) when this bot displays usage
|
|
604
|
+
// on the streaming card. Missing metrics are omitted independently by
|
|
605
|
+
// cardUsageFooterSegment; a fully-empty snapshot renders nothing.
|
|
606
|
+
const usageSeg = usage ? cardUsageFooterSegment(usage, locale, 'streaming') : null;
|
|
607
|
+
if (usageSeg) {
|
|
608
|
+
elements.push({
|
|
609
|
+
tag: 'markdown',
|
|
610
|
+
text_size: 'notation_small_v2',
|
|
611
|
+
content: `<font color='grey'>${usageSeg}</font>`,
|
|
612
|
+
});
|
|
613
|
+
}
|
|
598
614
|
}
|
|
599
615
|
/**
|
|
600
616
|
* Build a Feishu streaming card that shows live terminal output + controls.
|
|
@@ -607,14 +623,14 @@ function pushStreamBody(elements, opts) {
|
|
|
607
623
|
* Quick-action buttons (Esc, ^C, Tab, Space, Enter, ←↑↓→, ½屏 ↑/↓) appear
|
|
608
624
|
* whenever displayMode !== 'hidden'.
|
|
609
625
|
*/
|
|
610
|
-
export function buildStreamingCard(sessionId, rootId, terminalUrl, title, screenContent, status, cliId, displayMode = 'hidden', cardNonce, imageKey, adoptMode, showTakeover, locale, usageLimit, writableTerminalUrl, localCliReady = false) {
|
|
626
|
+
export function buildStreamingCard(sessionId, rootId, terminalUrl, title, screenContent, status, cliId, displayMode = 'hidden', cardNonce, imageKey, adoptMode, showTakeover, locale, usageLimit, writableTerminalUrl, localCliReady = false, usage) {
|
|
611
627
|
const effectiveCliId = cliId ?? 'claude-code';
|
|
612
628
|
const cliName = getCliDisplayName(effectiveCliId);
|
|
613
629
|
const actionBase = { root_id: rootId, session_id: sessionId, cli_id: effectiveCliId, ...(cardNonce ? { card_nonce: cardNonce } : {}) };
|
|
614
630
|
const displayStatus = status === 'limited' && usageLimit?.retryReady ? 'retry_ready' : status;
|
|
615
631
|
const elements = [];
|
|
616
632
|
// ── Output body (shared with the private snapshot card) ──────────────────
|
|
617
|
-
pushStreamBody(elements, { status, usageLimit, displayMode, imageKey, cliName, locale });
|
|
633
|
+
pushStreamBody(elements, { status, usageLimit, displayMode, imageKey, cliName, locale, usage });
|
|
618
634
|
// ── Main control row: display toggle, mode toggle, terminal, manage ─────
|
|
619
635
|
const headerActions = [];
|
|
620
636
|
headerActions.push({
|
|
@@ -639,12 +655,14 @@ export function buildStreamingCard(sessionId, rootId, terminalUrl, title, screen
|
|
|
639
655
|
value: { action: 'refresh_screenshot', ...actionBase },
|
|
640
656
|
});
|
|
641
657
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
658
|
+
if (terminalUrl) {
|
|
659
|
+
headerActions.push({
|
|
660
|
+
tag: 'button',
|
|
661
|
+
text: { tag: 'plain_text', content: t('card.btn.open_terminal', undefined, locale) },
|
|
662
|
+
type: 'primary',
|
|
663
|
+
multi_url: terminalMultiUrl(terminalUrl),
|
|
664
|
+
});
|
|
665
|
+
}
|
|
648
666
|
const localBtn = cliId ? localCliButton(effectiveCliId, actionBase, locale, localCliReady) : undefined;
|
|
649
667
|
if (localBtn)
|
|
650
668
|
headerActions.push(localBtn);
|
|
@@ -656,12 +674,14 @@ export function buildStreamingCard(sessionId, rootId, terminalUrl, title, screen
|
|
|
656
674
|
value: { action: 'retry_last_task', ...actionBase },
|
|
657
675
|
});
|
|
658
676
|
}
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
677
|
+
if (terminalUrl) {
|
|
678
|
+
headerActions.push({
|
|
679
|
+
tag: 'button',
|
|
680
|
+
text: { tag: 'plain_text', content: t('card.btn.get_write_link', undefined, locale) },
|
|
681
|
+
type: 'default',
|
|
682
|
+
value: { action: 'get_write_link', ...actionBase },
|
|
683
|
+
});
|
|
684
|
+
}
|
|
665
685
|
if (adoptMode) {
|
|
666
686
|
if (showTakeover) {
|
|
667
687
|
headerActions.push({
|
|
@@ -744,9 +764,8 @@ export function buildStreamingCard(sessionId, rootId, terminalUrl, title, screen
|
|
|
744
764
|
* Build a static "private snapshot" card for `/card` in private mode — sent via
|
|
745
765
|
* the ephemeral API to one user at a time. Unlike {@link buildStreamingCard} it
|
|
746
766
|
* is **never PATCH-updated** (ephemeral cards can't be), so it carries only a
|
|
747
|
-
* one-shot snapshot of the terminal screenshot plus
|
|
748
|
-
* • read-only "open terminal" link
|
|
749
|
-
* • "get write link", whose callback DMs the writable link to the clicker;
|
|
767
|
+
* one-shot snapshot of the terminal screenshot plus controls:
|
|
768
|
+
* • when available, a read-only "open terminal" link and "get write link";
|
|
750
769
|
* • "close session", whose callback kills the session and (in private mode)
|
|
751
770
|
* sends the "closed" card ephemeral to the owner audience too — so the
|
|
752
771
|
* session title / CLI name / workingDir on it don't leak to the group.
|
|
@@ -789,32 +808,33 @@ export function buildPrivateSnapshotCard(terminalUrl, title, status, cliId, imag
|
|
|
789
808
|
elements.push({ tag: 'hr' });
|
|
790
809
|
}
|
|
791
810
|
}
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
actions
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
{
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
value: { action: 'close', ...actionBase },
|
|
812
|
-
},
|
|
813
|
-
],
|
|
811
|
+
const actions = [];
|
|
812
|
+
if (terminalUrl) {
|
|
813
|
+
actions.push({
|
|
814
|
+
tag: 'button',
|
|
815
|
+
text: { tag: 'plain_text', content: t('card.btn.open_terminal', undefined, locale) },
|
|
816
|
+
type: 'primary',
|
|
817
|
+
multi_url: terminalMultiUrl(terminalUrl),
|
|
818
|
+
}, {
|
|
819
|
+
tag: 'button',
|
|
820
|
+
text: { tag: 'plain_text', content: t('card.btn.get_write_link', undefined, locale) },
|
|
821
|
+
type: 'default',
|
|
822
|
+
value: { action: 'get_write_link', ...actionBase },
|
|
823
|
+
});
|
|
824
|
+
}
|
|
825
|
+
actions.push({
|
|
826
|
+
tag: 'button',
|
|
827
|
+
text: { tag: 'plain_text', content: t('card.btn.close_session', undefined, locale) },
|
|
828
|
+
type: 'danger',
|
|
829
|
+
value: { action: 'close', ...actionBase },
|
|
814
830
|
});
|
|
831
|
+
elements.push({ tag: 'action', actions });
|
|
815
832
|
elements.push({
|
|
816
833
|
tag: 'note',
|
|
817
|
-
elements: [{
|
|
834
|
+
elements: [{
|
|
835
|
+
tag: 'lark_md',
|
|
836
|
+
content: t(terminalUrl ? 'card.private.snapshot_note' : 'card.private.snapshot_note_no_terminal', undefined, locale),
|
|
837
|
+
}],
|
|
818
838
|
});
|
|
819
839
|
const card = {
|
|
820
840
|
config: { wide_screen_mode: true },
|
|
@@ -1086,8 +1106,7 @@ export function buildRepoSelectCard(projects, currentPath, rootMessageId, locale
|
|
|
1086
1106
|
};
|
|
1087
1107
|
return JSON.stringify(card);
|
|
1088
1108
|
}
|
|
1089
|
-
/**
|
|
1090
|
-
* 多目标共用一张卡,按钮 value 带 target_open_ids 数组,owner 点一次范围套用到全部。 */
|
|
1109
|
+
/** 授权卡片:有效期与消息额度并列展示,owner 一次提交两项限制。 */
|
|
1091
1110
|
export function buildGrantCard(o, locale) {
|
|
1092
1111
|
const names = o.targets.map(t => `**${escapeMd(t.name)}**`).join('、');
|
|
1093
1112
|
const single = o.targets[0];
|
|
@@ -1096,27 +1115,129 @@ export function buildGrantCard(o, locale) {
|
|
|
1096
1115
|
: o.targets.length > 1
|
|
1097
1116
|
? t('card.grant.body_owner_multi', { names, owner: o.ownerOpenId }, locale)
|
|
1098
1117
|
: t('card.grant.body_owner', { name: escapeMd(single?.name ?? ''), owner: o.ownerOpenId }, locale);
|
|
1099
|
-
|
|
1100
|
-
//
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
//
|
|
1118
|
+
const durationMs = o.durationMs ?? DEFAULT_GRANT_DURATION_MS;
|
|
1119
|
+
// 夹取到卡片可提交区间:历史 messageQuota.defaultLimit(parser 无上限)若 >MAX,
|
|
1120
|
+
// 直接透传会让初值超过 normalize 上限 → owner 一点授权就报「参数无效」发不出。
|
|
1121
|
+
const quota = clampGrantQuotaForCard(o.quota ?? DEFAULT_GRANT_QUOTA);
|
|
1122
|
+
// target_names 与 target_open_ids 同序:授权成功后据此把目标登记进 observed 花名册。
|
|
1123
|
+
const v = {
|
|
1124
|
+
target_open_ids: o.targets.map(t => t.openId),
|
|
1125
|
+
target_names: o.targets.map(t => t.name),
|
|
1126
|
+
chat_id: o.chatId,
|
|
1127
|
+
nonce: o.nonce,
|
|
1128
|
+
mode: o.mode,
|
|
1129
|
+
};
|
|
1130
|
+
const button = (action, text, type) => ({
|
|
1131
|
+
tag: 'button',
|
|
1132
|
+
type,
|
|
1133
|
+
text: { tag: 'plain_text', content: text },
|
|
1134
|
+
name: action,
|
|
1135
|
+
// v2(schema 2.0)卡片的表单提交按钮用 action_type: 'form_submit'(与本文件其它 2.0 表单
|
|
1136
|
+
// 一致,也是本卡最初 live 验证过的写法)。曾一度改成 v2 的 form_action_type: 'submit'(见
|
|
1137
|
+
// 授权卡 UI 并排布局那次),实测点击授权按钮无任何反应——callback 不触发。故钉回 form_submit。
|
|
1138
|
+
action_type: 'form_submit',
|
|
1139
|
+
value: { action, ...v },
|
|
1140
|
+
});
|
|
1104
1141
|
const grantButtons = [
|
|
1105
|
-
|
|
1142
|
+
button('grant_chat', t('card.grant.btn_chat', undefined, locale), 'primary'),
|
|
1106
1143
|
];
|
|
1107
1144
|
if (o.mode === 'owner') {
|
|
1108
|
-
grantButtons.push(
|
|
1145
|
+
grantButtons.push(button('grant_global', t('card.grant.btn_global', undefined, locale), 'default'));
|
|
1109
1146
|
}
|
|
1110
|
-
grantButtons.push(
|
|
1147
|
+
grantButtons.push(button('grant_deny', t('card.grant.btn_deny', undefined, locale), 'danger'));
|
|
1111
1148
|
const card = {
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
{ tag: '
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1149
|
+
schema: '2.0',
|
|
1150
|
+
config: { update_multi: true, width_mode: 'default' },
|
|
1151
|
+
header: {
|
|
1152
|
+
template: 'orange',
|
|
1153
|
+
title: { tag: 'plain_text', content: t('card.grant.title', undefined, locale) },
|
|
1154
|
+
},
|
|
1155
|
+
body: {
|
|
1156
|
+
direction: 'vertical',
|
|
1157
|
+
padding: '12px 12px 20px 12px',
|
|
1158
|
+
vertical_spacing: 'medium',
|
|
1159
|
+
elements: [
|
|
1160
|
+
{ tag: 'markdown', content: body },
|
|
1161
|
+
{
|
|
1162
|
+
tag: 'form',
|
|
1163
|
+
name: 'grant_limits_form',
|
|
1164
|
+
vertical_spacing: 'large',
|
|
1165
|
+
elements: [
|
|
1166
|
+
{
|
|
1167
|
+
tag: 'column_set',
|
|
1168
|
+
flex_mode: 'bisect',
|
|
1169
|
+
horizontal_spacing: 'medium',
|
|
1170
|
+
columns: [
|
|
1171
|
+
{
|
|
1172
|
+
tag: 'column',
|
|
1173
|
+
width: 'weighted',
|
|
1174
|
+
weight: 1,
|
|
1175
|
+
vertical_spacing: 'small',
|
|
1176
|
+
elements: [
|
|
1177
|
+
{
|
|
1178
|
+
tag: 'markdown',
|
|
1179
|
+
content: `**${t('card.grant.duration_label', undefined, locale)}**`,
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
tag: 'select_static',
|
|
1183
|
+
name: 'grant_duration',
|
|
1184
|
+
width: 'fill',
|
|
1185
|
+
initial_option: String(durationMs),
|
|
1186
|
+
placeholder: { tag: 'plain_text', content: t('card.grant.duration_label', undefined, locale) },
|
|
1187
|
+
options: [
|
|
1188
|
+
...GRANT_DURATION_OPTIONS.map(ms => ({
|
|
1189
|
+
text: { tag: 'plain_text', content: t(`card.grant.duration_${ms}`, undefined, locale) },
|
|
1190
|
+
value: String(ms),
|
|
1191
|
+
})),
|
|
1192
|
+
{
|
|
1193
|
+
text: { tag: 'plain_text', content: t('card.grant.duration_permanent', undefined, locale) },
|
|
1194
|
+
value: 'permanent',
|
|
1195
|
+
},
|
|
1196
|
+
],
|
|
1197
|
+
},
|
|
1198
|
+
],
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
tag: 'column',
|
|
1202
|
+
width: 'weighted',
|
|
1203
|
+
weight: 1,
|
|
1204
|
+
vertical_spacing: 'small',
|
|
1205
|
+
elements: [
|
|
1206
|
+
{
|
|
1207
|
+
tag: 'markdown',
|
|
1208
|
+
content: `**${t('card.grant.quota_label', undefined, locale)}**`,
|
|
1209
|
+
},
|
|
1210
|
+
{
|
|
1211
|
+
tag: 'input',
|
|
1212
|
+
name: 'grant_quota',
|
|
1213
|
+
width: 'fill',
|
|
1214
|
+
default_value: quota === undefined ? '' : String(quota),
|
|
1215
|
+
placeholder: { tag: 'plain_text', content: t('card.grant.quota_placeholder', undefined, locale) },
|
|
1216
|
+
},
|
|
1217
|
+
],
|
|
1218
|
+
},
|
|
1219
|
+
],
|
|
1220
|
+
},
|
|
1221
|
+
{
|
|
1222
|
+
tag: 'column_set',
|
|
1223
|
+
flex_mode: 'none',
|
|
1224
|
+
horizontal_spacing: 'small',
|
|
1225
|
+
columns: grantButtons.map(action => ({
|
|
1226
|
+
tag: 'column',
|
|
1227
|
+
width: 'auto',
|
|
1228
|
+
vertical_align: 'center',
|
|
1229
|
+
elements: [action],
|
|
1230
|
+
})),
|
|
1231
|
+
},
|
|
1232
|
+
],
|
|
1233
|
+
},
|
|
1234
|
+
{
|
|
1235
|
+
tag: 'markdown',
|
|
1236
|
+
text_size: 'notation',
|
|
1237
|
+
content: `<font color="grey">${t('card.grant.note', undefined, locale)}</font>`,
|
|
1238
|
+
},
|
|
1239
|
+
],
|
|
1240
|
+
},
|
|
1120
1241
|
};
|
|
1121
1242
|
return JSON.stringify(card);
|
|
1122
1243
|
}
|
|
@@ -1129,14 +1250,15 @@ export function buildGrantCard(o, locale) {
|
|
|
1129
1250
|
* 能据 open_id 展示对方身份(远比裸 open_id 可读),代价是可能偶尔触发一次空会话(产品上可接受,
|
|
1130
1251
|
* 且名字缺失是少数边角情况)。真人被 `<at>` 不会自动开会话。传 string/string[](无 isBot 信息)
|
|
1131
1252
|
* 时按真人处理(@ 全部),保持旧调用方/单测兼容。 */
|
|
1132
|
-
export function buildGrantNotifyCard(kind, target, locale, quota) {
|
|
1253
|
+
export function buildGrantNotifyCard(kind, target, locale, quota, expiresAt) {
|
|
1133
1254
|
const entries = (Array.isArray(target) ? target : [target]).map(tt => typeof tt === 'string' ? { openId: tt, name: undefined, isBot: false } : tt);
|
|
1134
|
-
const at = entries
|
|
1135
|
-
? e.name // bot 有名字:纯文本,不 <at>(不唤醒对方)
|
|
1136
|
-
: `<at id=${e.openId}></at>`).join(' ');
|
|
1255
|
+
const at = renderGrantAtMentions(entries);
|
|
1137
1256
|
let content = t(kind === 'chat' ? 'card.grant.notify_chat' : 'card.grant.notify_global', { at }, locale);
|
|
1138
1257
|
if (quota !== undefined && quota > 0)
|
|
1139
1258
|
content += t('card.grant.notify_quota_suffix', { n: quota }, locale);
|
|
1259
|
+
if (expiresAt !== undefined) {
|
|
1260
|
+
content += t('card.grant.notify_expiry_suffix', { time: formatGrantExpiry(expiresAt, locale) }, locale);
|
|
1261
|
+
}
|
|
1140
1262
|
const card = {
|
|
1141
1263
|
config: { wide_screen_mode: true },
|
|
1142
1264
|
elements: [{ tag: 'div', text: { tag: 'lark_md', content } }],
|
|
@@ -1153,13 +1275,83 @@ export function buildQuotaExhaustedCard(targetOpenId, limit, locale) {
|
|
|
1153
1275
|
};
|
|
1154
1276
|
return JSON.stringify(card);
|
|
1155
1277
|
}
|
|
1156
|
-
/**
|
|
1157
|
-
|
|
1158
|
-
|
|
1278
|
+
/**
|
|
1279
|
+
* Reject card for `/adopt` (and Codex App / resume import) attempted while the
|
|
1280
|
+
* session is still on the first-spawn repo-select gate (`pendingRepo`). Adopt
|
|
1281
|
+
* attaches to an already-running CLI, so it cannot double as a way to finish
|
|
1282
|
+
* that gate: the two states are mutually exclusive by design. Rather than fold
|
|
1283
|
+
* the buffered repo-card messages into the takeover (complex + leaks botmux
|
|
1284
|
+
* envelopes into the external CLI), we refuse and offer a one-tap "close
|
|
1285
|
+
* session" so the user can retire the pending session and re-issue `/adopt`
|
|
1286
|
+
* cleanly. The close button reuses the shared `action: 'close'` handler; the
|
|
1287
|
+
* resulting closed card honours privateCard on its own.
|
|
1288
|
+
*/
|
|
1289
|
+
export function buildAdoptBlockedCard(rootId, sessionId, cliId, locale) {
|
|
1290
|
+
const actionBase = { root_id: rootId, session_id: sessionId, cli_id: cliId ?? 'claude-code' };
|
|
1159
1291
|
const card = {
|
|
1160
1292
|
config: { wide_screen_mode: true },
|
|
1293
|
+
header: {
|
|
1294
|
+
title: { tag: 'plain_text', content: t('card.adopt_blocked.title', undefined, locale) },
|
|
1295
|
+
template: 'orange',
|
|
1296
|
+
},
|
|
1297
|
+
elements: [
|
|
1298
|
+
{ tag: 'markdown', content: t('card.adopt_blocked.body', undefined, locale) },
|
|
1299
|
+
{
|
|
1300
|
+
tag: 'action',
|
|
1301
|
+
actions: [
|
|
1302
|
+
{
|
|
1303
|
+
tag: 'button',
|
|
1304
|
+
text: { tag: 'plain_text', content: t('card.btn.close_session', undefined, locale) },
|
|
1305
|
+
type: 'danger',
|
|
1306
|
+
value: { action: 'close', ...actionBase },
|
|
1307
|
+
},
|
|
1308
|
+
],
|
|
1309
|
+
},
|
|
1310
|
+
],
|
|
1311
|
+
};
|
|
1312
|
+
return JSON.stringify(card);
|
|
1313
|
+
}
|
|
1314
|
+
/** 授权处置后的终态卡(无按钮,防重复点击)。 */
|
|
1315
|
+
function formatGrantExpiry(expiresAt, locale) {
|
|
1316
|
+
return new Date(expiresAt).toLocaleString(locale === 'en' ? 'en-US' : 'zh-CN', { hour12: false });
|
|
1317
|
+
}
|
|
1318
|
+
function renderGrantAtMentions(target) {
|
|
1319
|
+
const entries = (Array.isArray(target) ? target : [target]).map(tt => typeof tt === 'string' ? { openId: tt, name: undefined, isBot: false } : tt);
|
|
1320
|
+
return entries.map(e => e.isBot && e.name && e.name.length > 0
|
|
1321
|
+
? e.name
|
|
1322
|
+
: `<at id=${e.openId}></at>`).join(' ');
|
|
1323
|
+
}
|
|
1324
|
+
/** 授权处置后的终态卡(无按钮,防重复点击)。授权成功(chat/global)时**就地 patch 原卡**即为
|
|
1325
|
+
* 此卡:正文直接 @ 被授权人 + 额度/有效期,一张卡既是结果态又 ping 到 ta,无需再单独发通知卡或
|
|
1326
|
+
* 撤回原卡(见申晗 2026-07-31 反馈)。deny 或无 targets 时回落到不带 @ 的简单状态文案。 */
|
|
1327
|
+
export function buildGrantResultCard(kind, locale, quota, expiresAt, targets) {
|
|
1328
|
+
let content;
|
|
1329
|
+
const at = targets !== undefined ? renderGrantAtMentions(targets) : '';
|
|
1330
|
+
if (kind !== 'deny' && at) {
|
|
1331
|
+
// 授权成功且有被授权人:复用 notify 文案({at} 已获授权,发消息 @ 我即可 + 额度/有效期后缀),
|
|
1332
|
+
// 让就地 patch 的原卡直接把授权成功通知 + @ping 合为一张。
|
|
1333
|
+
content = t(kind === 'chat' ? 'card.grant.notify_chat' : 'card.grant.notify_global', { at }, locale);
|
|
1334
|
+
if (quota !== undefined && quota > 0)
|
|
1335
|
+
content += t('card.grant.notify_quota_suffix', { n: quota }, locale);
|
|
1336
|
+
if (expiresAt !== undefined)
|
|
1337
|
+
content += t('card.grant.notify_expiry_suffix', { time: formatGrantExpiry(expiresAt, locale) }, locale);
|
|
1338
|
+
}
|
|
1339
|
+
else {
|
|
1340
|
+
// deny / 无 targets 回落:简单状态态(无 @)。
|
|
1341
|
+
const key = kind === 'chat' ? 'card.grant.result_chat' : kind === 'global' ? 'card.grant.result_global' : 'card.grant.result_deny';
|
|
1342
|
+
content = t(key, undefined, locale);
|
|
1343
|
+
if (kind !== 'deny') {
|
|
1344
|
+
if (expiresAt !== undefined)
|
|
1345
|
+
content += `\n${t('card.grant.result_expiry', { time: formatGrantExpiry(expiresAt, locale) }, locale)}`;
|
|
1346
|
+
if (quota !== undefined)
|
|
1347
|
+
content += `\n${t('card.grant.result_quota', { n: quota }, locale)}`;
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
const card = {
|
|
1351
|
+
schema: '2.0',
|
|
1352
|
+
config: { update_multi: true, width_mode: 'default' },
|
|
1161
1353
|
header: { template: kind === 'deny' ? 'grey' : 'green', title: { tag: 'plain_text', content: t('card.grant.title', undefined, locale) } },
|
|
1162
|
-
|
|
1354
|
+
body: { elements: [{ tag: 'markdown', content }] },
|
|
1163
1355
|
};
|
|
1164
1356
|
return JSON.stringify(card);
|
|
1165
1357
|
}
|
|
@@ -1296,6 +1488,23 @@ export function buildTuiPromptResolvedCard(selectedText, locale) {
|
|
|
1296
1488
|
};
|
|
1297
1489
|
return JSON.stringify(card);
|
|
1298
1490
|
}
|
|
1491
|
+
/** Build a terminal failure state when worker/backend input was not confirmed. */
|
|
1492
|
+
export function buildTuiPromptFailedCard(message, locale) {
|
|
1493
|
+
const card = {
|
|
1494
|
+
config: { wide_screen_mode: true },
|
|
1495
|
+
header: {
|
|
1496
|
+
title: { tag: 'plain_text', content: t('card.status.failed', undefined, locale) },
|
|
1497
|
+
template: 'red',
|
|
1498
|
+
},
|
|
1499
|
+
elements: [
|
|
1500
|
+
{
|
|
1501
|
+
tag: 'div',
|
|
1502
|
+
text: { tag: 'lark_md', content: escapeMd(message) },
|
|
1503
|
+
},
|
|
1504
|
+
],
|
|
1505
|
+
};
|
|
1506
|
+
return JSON.stringify(card);
|
|
1507
|
+
}
|
|
1299
1508
|
// ─── Adopt cards ─────────────────────────────────────────────────────────────
|
|
1300
1509
|
function formatDuration(ms) {
|
|
1301
1510
|
const s = Math.floor(ms / 1000);
|
|
@@ -1385,7 +1594,18 @@ targetScope = 'chat',
|
|
|
1385
1594
|
* to p2p, or post-relay inbound routing misclassifies it as a group).
|
|
1386
1595
|
* Authoritative from the /relay command's session chatType. Default 'group'
|
|
1387
1596
|
* covers legacy cards rendered before this field existed. */
|
|
1388
|
-
targetChatType = 'group'
|
|
1597
|
+
targetChatType = 'group',
|
|
1598
|
+
/** When 'private', the card is (or will be) delivered as an ephemeral card
|
|
1599
|
+
* visible only to the invoker — so the session title / source-chat name never
|
|
1600
|
+
* leak to other group members. Baked into every button value as `visibility`
|
|
1601
|
+
* so the re-render handlers (select / page / search) know they must delete +
|
|
1602
|
+
* resend an ephemeral card instead of returning a body for Lark to patch in
|
|
1603
|
+
* place (ephemeral cards can't be PATCH-updated). Default 'public' preserves
|
|
1604
|
+
* the legacy visible-to-all picker. Only ever set 'private' for flat chat-
|
|
1605
|
+
* scope 普通群 targets: ephemeral has no thread anchor, so command-handler
|
|
1606
|
+
* gates it on `targetScope === 'chat'` (thread-scope 话题群/话题 stay public
|
|
1607
|
+
* in-thread — see the gate comment there). p2p never goes ephemeral. */
|
|
1608
|
+
visibility = 'public') {
|
|
1389
1609
|
const searchQuery = state?.searchQuery ?? '';
|
|
1390
1610
|
const requestedPage = state?.page ?? 0;
|
|
1391
1611
|
const selectedSessionId = state?.selectedSessionId;
|
|
@@ -1407,6 +1627,7 @@ targetChatType = 'group') {
|
|
|
1407
1627
|
target_scope: targetScope,
|
|
1408
1628
|
target_chat_type: targetChatType,
|
|
1409
1629
|
invoker_open_id: invokerOpenId,
|
|
1630
|
+
visibility,
|
|
1410
1631
|
search: searchQuery,
|
|
1411
1632
|
page,
|
|
1412
1633
|
selected: selectedSessionId ?? '',
|