botmux 3.7.1 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/capabilities.d.ts +17 -0
- package/dist/adapters/backend/capabilities.d.ts.map +1 -0
- package/dist/adapters/backend/capabilities.js +22 -0
- package/dist/adapters/backend/capabilities.js.map +1 -0
- package/dist/adapters/backend/critical-control-key.d.ts +19 -0
- package/dist/adapters/backend/critical-control-key.d.ts.map +1 -0
- package/dist/adapters/backend/critical-control-key.js +34 -0
- package/dist/adapters/backend/critical-control-key.js.map +1 -0
- package/dist/adapters/backend/herdr-backend.d.ts +9 -0
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +23 -4
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +3 -2
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/session-backend-selector.d.ts +61 -6
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
- package/dist/adapters/backend/session-backend-selector.js +173 -9
- package/dist/adapters/backend/session-backend-selector.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +10 -3
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +25 -8
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +3 -2
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +45 -4
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js +11 -0
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +3 -2
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/backend/zmx-backend.d.ts +286 -0
- package/dist/adapters/backend/zmx-backend.d.ts.map +1 -0
- package/dist/adapters/backend/zmx-backend.js +2396 -0
- package/dist/adapters/backend/zmx-backend.js.map +1 -0
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +3 -0
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +5 -1
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +26 -1
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts +79 -1
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
- package/dist/adapters/cli/fs-policy.js +290 -13
- package/dist/adapters/cli/fs-policy.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts.map +1 -1
- package/dist/adapters/cli/grok.js +4 -1
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
- package/dist/adapters/cli/oh-my-pi.js +5 -3
- package/dist/adapters/cli/oh-my-pi.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +7 -4
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +52 -35
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/strict-input-handle.d.ts +13 -0
- package/dist/adapters/cli/strict-input-handle.d.ts.map +1 -0
- package/dist/adapters/cli/strict-input-handle.js +39 -0
- package/dist/adapters/cli/strict-input-handle.js.map +1 -0
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +6 -4
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +16 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +137 -8
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +298 -12
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/session-list-liveness.d.ts +1 -1
- package/dist/cli/session-list-liveness.js +1 -1
- package/dist/cli/zmx-managed-attach.d.ts +41 -0
- package/dist/cli/zmx-managed-attach.d.ts.map +1 -0
- package/dist/cli/zmx-managed-attach.js +72 -0
- package/dist/cli/zmx-managed-attach.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +780 -131
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +90 -2
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/codex-rpc-engine.d.ts.map +1 -1
- package/dist/codex-rpc-engine.js +22 -6
- package/dist/codex-rpc-engine.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -1
- package/dist/config.js.map +1 -1
- package/dist/core/ask-broker.d.ts +22 -1
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +12 -5
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/botmux-wrapper.d.ts +18 -0
- package/dist/core/botmux-wrapper.d.ts.map +1 -1
- package/dist/core/botmux-wrapper.js +25 -1
- package/dist/core/botmux-wrapper.js.map +1 -1
- package/dist/core/chat-rename.d.ts +27 -0
- package/dist/core/chat-rename.d.ts.map +1 -0
- package/dist/core/chat-rename.js +53 -0
- package/dist/core/chat-rename.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +160 -12
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +25 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +102 -4
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +16 -2
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +611 -62
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +22 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +61 -0
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +6 -0
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +11 -1
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/device-isolation-daemon.d.ts +28 -6
- package/dist/core/device-isolation-daemon.d.ts.map +1 -1
- package/dist/core/device-isolation-daemon.js +96 -13
- package/dist/core/device-isolation-daemon.js.map +1 -1
- package/dist/core/host-overload-alert.d.ts +75 -0
- package/dist/core/host-overload-alert.d.ts.map +1 -1
- package/dist/core/host-overload-alert.js +103 -0
- package/dist/core/host-overload-alert.js.map +1 -1
- package/dist/core/idle-worker-sweeper.js +1 -1
- package/dist/core/idle-worker-sweeper.js.map +1 -1
- package/dist/core/inflight-input-tracker.d.ts +3 -0
- package/dist/core/inflight-input-tracker.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.js +9 -0
- package/dist/core/inflight-input-tracker.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +10 -0
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/persistent-backend.d.ts +32 -4
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +75 -6
- package/dist/core/persistent-backend.js.map +1 -1
- package/dist/core/plugins/mcp/gateway.js +2 -2
- package/dist/core/plugins/mcp/gateway.js.map +1 -1
- package/dist/core/plugins/runtime.d.ts +3 -0
- package/dist/core/plugins/runtime.d.ts.map +1 -1
- package/dist/core/plugins/runtime.js.map +1 -1
- package/dist/core/plugins/service-manager.d.ts +4 -1
- package/dist/core/plugins/service-manager.d.ts.map +1 -1
- package/dist/core/plugins/service-manager.js +11 -6
- package/dist/core/plugins/service-manager.js.map +1 -1
- package/dist/core/role-library.d.ts +48 -1
- package/dist/core/role-library.d.ts.map +1 -1
- package/dist/core/role-library.js +111 -3
- package/dist/core/role-library.js.map +1 -1
- package/dist/core/role-resolver.d.ts +14 -2
- package/dist/core/role-resolver.d.ts.map +1 -1
- package/dist/core/role-resolver.js +47 -4
- package/dist/core/role-resolver.js.map +1 -1
- package/dist/core/session-activity.d.ts +14 -0
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-activity.js +46 -1
- package/dist/core/session-activity.js.map +1 -1
- package/dist/core/session-board.d.ts +5 -2
- package/dist/core/session-board.d.ts.map +1 -1
- package/dist/core/session-board.js +5 -2
- package/dist/core/session-board.js.map +1 -1
- package/dist/core/session-liveness.d.ts +6 -5
- package/dist/core/session-liveness.d.ts.map +1 -1
- package/dist/core/session-liveness.js +34 -13
- package/dist/core/session-liveness.js.map +1 -1
- package/dist/core/session-manager.d.ts +3 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +397 -103
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-marker.d.ts +11 -2
- package/dist/core/session-marker.d.ts.map +1 -1
- package/dist/core/session-marker.js +50 -11
- package/dist/core/session-marker.js.map +1 -1
- package/dist/core/session-message-preview.d.ts +20 -0
- package/dist/core/session-message-preview.d.ts.map +1 -0
- package/dist/core/session-message-preview.js +188 -0
- package/dist/core/session-message-preview.js.map +1 -0
- package/dist/core/session-title.d.ts +5 -1
- package/dist/core/session-title.d.ts.map +1 -1
- package/dist/core/session-title.js +20 -3
- package/dist/core/session-title.js.map +1 -1
- package/dist/core/startup-commands.d.ts +1 -1
- package/dist/core/startup-commands.js +1 -1
- package/dist/core/terminal-url.d.ts.map +1 -1
- package/dist/core/terminal-url.js +3 -2
- package/dist/core/terminal-url.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +75 -12
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +35 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +23 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-ipc.d.ts +11 -0
- package/dist/core/worker-ipc.d.ts.map +1 -0
- package/dist/core/worker-ipc.js +26 -0
- package/dist/core/worker-ipc.js.map +1 -0
- package/dist/core/worker-pool.d.ts +179 -29
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +2118 -331
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +132 -3
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +1327 -449
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +2 -0
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +9 -0
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +4 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +5 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/federation-api.d.ts.map +1 -1
- package/dist/dashboard/federation-api.js +4 -0
- package/dist/dashboard/federation-api.js.map +1 -1
- package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
- package/dist/dashboard/federation-spoke-api.js +32 -5
- package/dist/dashboard/federation-spoke-api.js.map +1 -1
- package/dist/dashboard/public-redact.d.ts +8 -2
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +34 -7
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/session-card-model.d.ts.map +1 -1
- package/dist/dashboard/session-card-model.js +10 -2
- package/dist/dashboard/session-card-model.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +35 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +88 -1
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +0 -1
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +15 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +212 -58
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +3 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts +2 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/clipboard.d.ts +2 -0
- package/dist/dashboard/web/clipboard.d.ts.map +1 -0
- package/dist/dashboard/web/clipboard.js +42 -0
- package/dist/dashboard/web/clipboard.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +12 -8
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/dashboard-components.d.ts +17 -16
- package/dist/dashboard/web/dashboard-components.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-components.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +7 -3
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +205 -12
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/icon-tooltip.d.ts.map +1 -1
- package/dist/dashboard/web/icon-tooltip.js +16 -1
- package/dist/dashboard/web/icon-tooltip.js.map +1 -1
- package/dist/dashboard/web/listener-filters.d.ts +23 -0
- package/dist/dashboard/web/listener-filters.d.ts.map +1 -0
- package/dist/dashboard/web/listener-filters.js +36 -0
- package/dist/dashboard/web/listener-filters.js.map +1 -0
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/plugin-page.d.ts.map +1 -1
- package/dist/dashboard/web/plugin-page.js.map +1 -1
- package/dist/dashboard/web/preview-markdown.d.ts +5 -0
- package/dist/dashboard/web/preview-markdown.d.ts.map +1 -0
- package/dist/dashboard/web/preview-markdown.js +52 -0
- package/dist/dashboard/web/preview-markdown.js.map +1 -0
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +535 -10
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard/web/roles.d.ts +77 -0
- package/dist/dashboard/web/roles.d.ts.map +1 -1
- package/dist/dashboard/web/roles.js +98 -0
- package/dist/dashboard/web/roles.js.map +1 -1
- package/dist/dashboard/web/session-terminal.d.ts.map +1 -1
- package/dist/dashboard/web/session-terminal.js +6 -4
- package/dist/dashboard/web/session-terminal.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +4 -1
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +1 -1
- package/dist/dashboard/web/sessions-kanban.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts +3 -2
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +163 -28
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +25 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +58 -7
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +28 -3
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +61 -1
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts +6 -5
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +2 -0
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/v3-components.d.ts +3 -2
- package/dist/dashboard/web/v3-components.d.ts.map +1 -1
- package/dist/dashboard/web/v3-components.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +12 -2
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.js +0 -9
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
- package/dist/dashboard/web/webhook-logs-page.d.ts +2 -1
- package/dist/dashboard/web/webhook-logs-page.d.ts.map +1 -1
- package/dist/dashboard/web/webhook-logs-page.js +4 -1
- package/dist/dashboard/web/webhook-logs-page.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-FAPIMQV3.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-QFMH6ITB.js → chunk-5CJMHTT4.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-KQB42ML5.js → chunk-DLZK52JU.js} +14 -12
- package/dist/dashboard-web/chunks/chunk-FDZ7WOBW.js +16 -0
- package/dist/dashboard-web/chunks/{chunk-3QAUJXAS.js → chunk-GTAJV5YC.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-FNPGOZMX.js → chunk-IHNG6KE6.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-FLGXZJTD.js → chunk-VA6QWSGQ.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-XJ7BGPJH.js +1 -0
- package/dist/dashboard-web/chunks/chunk-ZJVTGU5X.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-LKWRT3GS.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-V6654ICQ.js +8 -0
- package/dist/dashboard-web/chunks/insights-page-237RMFQ5.js +7 -0
- package/dist/dashboard-web/chunks/{monitor-room-7IVIS75W.js → monitor-room-OO5Y4FRQ.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-5SSJRQZF.js → monitoring-page-OUEITM5P.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-EOND3L5D.js → office-page-4KNAHQ4Q.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-NISBVBBJ.js → overview-page-QDP4YK2S.js} +1 -1
- package/dist/dashboard-web/chunks/{plugin-page-JXC5F5YV.js → plugin-page-VEGTCEAS.js} +1 -1
- package/dist/dashboard-web/chunks/roles-page-PGXNZZNP.js +1 -0
- package/dist/dashboard-web/chunks/{schedules-page-AVOOKLUH.js → schedules-page-BJNC5TID.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-M2ZYYCMO.js +6 -0
- package/dist/dashboard-web/chunks/settings-page-IJFZKUUW.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-5MW54PCC.js → skills-page-YRAIRZOQ.js} +3 -3
- package/dist/dashboard-web/chunks/{team-federation-page-2SNIMVXI.js → team-federation-page-DEU27GRU.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-W6SBXXQC.js → v3-page-6KHEW2YL.js} +5 -5
- package/dist/dashboard-web/chunks/{whiteboards-page-STC54KTP.js → whiteboards-page-VDECAALH.js} +1 -1
- package/dist/dashboard-web/style.css +12545 -11432
- package/dist/dashboard.js +215 -36
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +41 -2
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +47 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +71 -19
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +71 -19
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/callback-button-marker.d.ts +34 -0
- package/dist/im/lark/callback-button-marker.d.ts.map +1 -0
- package/dist/im/lark/callback-button-marker.js +99 -0
- package/dist/im/lark/callback-button-marker.js.map +1 -0
- package/dist/im/lark/card-builder.d.ts +46 -10
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +299 -78
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +3 -4
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +380 -148
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +24 -1
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +101 -8
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/doc-comment.d.ts.map +1 -1
- package/dist/im/lark/doc-comment.js +6 -1
- package/dist/im/lark/doc-comment.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +115 -3
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +534 -147
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts +16 -12
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +48 -151
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/im/lark/grant-pending.d.ts +12 -4
- package/dist/im/lark/grant-pending.d.ts.map +1 -1
- package/dist/im/lark/grant-pending.js +31 -8
- package/dist/im/lark/grant-pending.js.map +1 -1
- package/dist/im/lark/invite-command.d.ts +20 -0
- package/dist/im/lark/invite-command.d.ts.map +1 -0
- package/dist/im/lark/invite-command.js +239 -0
- package/dist/im/lark/invite-command.js.map +1 -0
- package/dist/im/lark/md-card.d.ts +66 -4
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +201 -31
- package/dist/im/lark/md-card.js.map +1 -1
- package/dist/im/lark/mention-targets.d.ts +43 -0
- package/dist/im/lark/mention-targets.d.ts.map +1 -0
- package/dist/im/lark/mention-targets.js +190 -0
- package/dist/im/lark/mention-targets.js.map +1 -0
- package/dist/im/lark/message-parser.d.ts +31 -0
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +305 -32
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/reply-card-footer-signature.d.ts +7 -0
- package/dist/im/lark/reply-card-footer-signature.d.ts.map +1 -0
- package/dist/im/lark/reply-card-footer-signature.js +7 -0
- package/dist/im/lark/reply-card-footer-signature.js.map +1 -0
- package/dist/im/lark/sessions-card.d.ts.map +1 -1
- package/dist/im/lark/sessions-card.js +4 -1
- package/dist/im/lark/sessions-card.js.map +1 -1
- package/dist/im/lark/substitute-command.d.ts.map +1 -1
- package/dist/im/lark/substitute-command.js +8 -0
- package/dist/im/lark/substitute-command.js.map +1 -1
- package/dist/im/lark/topic-root-context.d.ts +35 -0
- package/dist/im/lark/topic-root-context.d.ts.map +1 -0
- package/dist/im/lark/topic-root-context.js +37 -0
- package/dist/im/lark/topic-root-context.js.map +1 -0
- package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card.js +2 -1
- package/dist/im/lark/v3-blocked-card.js.map +1 -1
- package/dist/im/lark/v3-gate-card.d.ts.map +1 -1
- package/dist/im/lark/v3-gate-card.js +2 -1
- package/dist/im/lark/v3-gate-card.js.map +1 -1
- package/dist/im/lark/v3-loop-grant-card.d.ts.map +1 -1
- package/dist/im/lark/v3-loop-grant-card.js +2 -1
- package/dist/im/lark/v3-loop-grant-card.js.map +1 -1
- package/dist/im/lark/v3-progress-card.d.ts.map +1 -1
- package/dist/im/lark/v3-progress-card.js +2 -1
- package/dist/im/lark/v3-progress-card.js.map +1 -1
- package/dist/im/lark/v3-revisit-grant-card.d.ts.map +1 -1
- package/dist/im/lark/v3-revisit-grant-card.js +2 -1
- package/dist/im/lark/v3-revisit-grant-card.js.map +1 -1
- package/dist/index-core-only.d.ts +3 -0
- package/dist/index-core-only.d.ts.map +1 -0
- package/dist/index-core-only.js +107 -0
- package/dist/index-core-only.js.map +1 -0
- package/dist/services/async-trigger-state.d.ts +8 -0
- package/dist/services/async-trigger-state.d.ts.map +1 -1
- package/dist/services/async-trigger-state.js +3 -2
- package/dist/services/async-trigger-state.js.map +1 -1
- package/dist/services/async-trigger-store.d.ts +10 -2
- package/dist/services/async-trigger-store.d.ts.map +1 -1
- package/dist/services/async-trigger-store.js +3 -2
- package/dist/services/async-trigger-store.js.map +1 -1
- package/dist/services/backend-availability.d.ts +3 -1
- package/dist/services/backend-availability.d.ts.map +1 -1
- package/dist/services/backend-availability.js +14 -1
- package/dist/services/backend-availability.js.map +1 -1
- package/dist/services/backend-type-store.d.ts.map +1 -1
- package/dist/services/backend-type-store.js +1 -1
- package/dist/services/backend-type-store.js.map +1 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +2 -1
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +14 -1
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +65 -1
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/card-prefs-store.d.ts +7 -2
- package/dist/services/card-prefs-store.d.ts.map +1 -1
- package/dist/services/card-prefs-store.js +30 -4
- package/dist/services/card-prefs-store.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +9 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
- package/dist/services/codex-app-runner-protocol.js +17 -0
- package/dist/services/codex-app-runner-protocol.js.map +1 -1
- package/dist/services/codex-app-token-usage.d.ts +93 -0
- package/dist/services/codex-app-token-usage.d.ts.map +1 -0
- package/dist/services/codex-app-token-usage.js +190 -0
- package/dist/services/codex-app-token-usage.js.map +1 -0
- package/dist/services/codex-transcript.d.ts +6 -1
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js +103 -32
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/federation-roster.d.ts +4 -0
- package/dist/services/federation-roster.d.ts.map +1 -1
- package/dist/services/federation-roster.js +3 -0
- package/dist/services/federation-roster.js.map +1 -1
- package/dist/services/federation-store.d.ts +6 -0
- package/dist/services/federation-store.d.ts.map +1 -1
- package/dist/services/federation-store.js.map +1 -1
- package/dist/services/grant-policy.d.ts +13 -0
- package/dist/services/grant-policy.d.ts.map +1 -0
- package/dist/services/grant-policy.js +40 -0
- package/dist/services/grant-policy.js.map +1 -0
- package/dist/services/grant-store.d.ts +24 -3
- package/dist/services/grant-store.d.ts.map +1 -1
- package/dist/services/grant-store.js +196 -12
- package/dist/services/grant-store.js.map +1 -1
- package/dist/services/groups-store.d.ts +36 -0
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +123 -1
- package/dist/services/groups-store.js.map +1 -1
- package/dist/services/jsonl-cursor.d.ts.map +1 -1
- package/dist/services/jsonl-cursor.js +8 -2
- package/dist/services/jsonl-cursor.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +32 -0
- package/dist/services/local-cli-opener.js.map +1 -1
- package/dist/services/message-listener-run-preview-store.d.ts +43 -0
- package/dist/services/message-listener-run-preview-store.d.ts.map +1 -0
- package/dist/services/message-listener-run-preview-store.js +152 -0
- package/dist/services/message-listener-run-preview-store.js.map +1 -0
- package/dist/services/message-listener-store.d.ts +26 -0
- package/dist/services/message-listener-store.d.ts.map +1 -0
- package/dist/services/message-listener-store.js +138 -0
- package/dist/services/message-listener-store.js.map +1 -0
- package/dist/services/message-listener.d.ts +112 -0
- package/dist/services/message-listener.d.ts.map +1 -0
- package/dist/services/message-listener.js +391 -0
- package/dist/services/message-listener.js.map +1 -0
- package/dist/services/overload-alert-migration.d.ts +15 -0
- package/dist/services/overload-alert-migration.d.ts.map +1 -0
- package/dist/services/overload-alert-migration.js +115 -0
- package/dist/services/overload-alert-migration.js.map +1 -0
- package/dist/services/send-policy.d.ts +38 -0
- package/dist/services/send-policy.d.ts.map +1 -1
- package/dist/services/send-policy.js +34 -0
- package/dist/services/send-policy.js.map +1 -1
- package/dist/services/session-store.d.ts +12 -1
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +44 -2
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +87 -12
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/substitute-mode-normalize.d.ts +3 -0
- package/dist/services/substitute-mode-normalize.d.ts.map +1 -1
- package/dist/services/substitute-mode-normalize.js +8 -0
- package/dist/services/substitute-mode-normalize.js.map +1 -1
- package/dist/services/substitute-mode-store.d.ts.map +1 -1
- package/dist/services/substitute-mode-store.js +8 -1
- package/dist/services/substitute-mode-store.js.map +1 -1
- package/dist/services/transcript-resolver.d.ts +6 -1
- package/dist/services/transcript-resolver.d.ts.map +1 -1
- package/dist/services/transcript-resolver.js +145 -29
- package/dist/services/transcript-resolver.js.map +1 -1
- package/dist/services/trigger-types.d.ts +16 -0
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js +6 -0
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/setup/bot-config-editor.js +2 -2
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-zmx.d.ts +31 -0
- package/dist/setup/ensure-zmx.d.ts.map +1 -0
- package/dist/setup/ensure-zmx.js +161 -0
- package/dist/setup/ensure-zmx.js.map +1 -0
- package/dist/setup/index.d.ts +1 -1
- package/dist/setup/index.js +1 -1
- package/dist/setup/open-platform-automation.d.ts +9 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +15 -2
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/setup-args.d.ts +1 -1
- package/dist/setup/setup-args.d.ts.map +1 -1
- package/dist/setup/setup-args.js +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +32 -0
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/injection-mode.d.ts +6 -2
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +10 -5
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/types.d.ts +79 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +1 -1
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +4 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/effort-confirm-dialog.d.ts +40 -0
- package/dist/utils/effort-confirm-dialog.d.ts.map +1 -0
- package/dist/utils/effort-confirm-dialog.js +74 -0
- package/dist/utils/effort-confirm-dialog.js.map +1 -0
- package/dist/utils/pending-input-queue.d.ts +56 -0
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js +80 -0
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/utils/render-dimensions.d.ts +8 -0
- package/dist/utils/render-dimensions.d.ts.map +1 -1
- package/dist/utils/render-dimensions.js +10 -0
- package/dist/utils/render-dimensions.js.map +1 -1
- package/dist/utils/stuck-key-guard.d.ts +3 -2
- package/dist/utils/stuck-key-guard.d.ts.map +1 -1
- package/dist/utils/stuck-key-guard.js +3 -3
- package/dist/utils/stuck-key-guard.js.map +1 -1
- package/dist/utils/terminal-renderer.d.ts +6 -0
- package/dist/utils/terminal-renderer.d.ts.map +1 -1
- package/dist/utils/terminal-renderer.js +15 -0
- package/dist/utils/terminal-renderer.js.map +1 -1
- package/dist/utils/tui-input-delivery.d.ts +32 -0
- package/dist/utils/tui-input-delivery.d.ts.map +1 -0
- package/dist/utils/tui-input-delivery.js +53 -0
- package/dist/utils/tui-input-delivery.js.map +1 -0
- package/dist/utils/xml.d.ts +19 -0
- package/dist/utils/xml.d.ts.map +1 -0
- package/dist/utils/xml.js +26 -0
- package/dist/utils/xml.js.map +1 -0
- package/dist/worker.js +1852 -374
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +8 -8
- package/dist/workflows/events/payloads.d.ts +8 -8
- package/dist/workflows/events/schema.d.ts +160 -160
- package/dist/workflows/v3/session-relay-client.js +1 -1
- package/dist/workflows/v3/session-relay-client.js.map +1 -1
- package/dist/workflows/v3/worker-fence.d.ts.map +1 -1
- package/dist/workflows/v3/worker-fence.js +15 -10
- package/dist/workflows/v3/worker-fence.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-UKA7K4JV.js +0 -10
- package/dist/dashboard-web/chunks/chunk-DFLNXQNT.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-A77YAB5Y.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-RUZNVXQB.js +0 -8
- package/dist/dashboard-web/chunks/insights-page-RF7U7RTA.js +0 -22
- package/dist/dashboard-web/chunks/roles-page-BUMKD7Y4.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-6HLSEAB7.js +0 -2
- package/dist/dashboard-web/chunks/settings-page-MJDZHQ4X.js +0 -2
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{a as vt}from"./chunk-FDZ7WOBW.js";import{a as Ct,c as St,h as Tt}from"./chunk-XJ7BGPJH.js";import{a as Nn,c as wt,f as Oe}from"./chunk-AGCPF6MT.js";import{a as sn}from"./chunk-ZJVTGU5X.js";import{a as yt,c as kt}from"./chunk-VA6QWSGQ.js";import{c as De,g as ht,q as We}from"./chunk-5CJMHTT4.js";import{A as en,C as ft,E as de,F as Me,G as ue,I as nn,a as Ae,f as ot,g as Sn,h as at,i as it,j as rt,k as lt,l as Tn,m as ct,n as dt,o as ut,p as mt,q as In,r as gt,s as pt,t as Ie,u as o,v as Be,w as Ne,y as xe}from"./chunk-DLZK52JU.js";import{a as bt}from"./chunk-SYC6D5XU.js";import{a as st,b as Hs,d as tn}from"./chunk-5THX4DI2.js";import{c as Le}from"./chunk-7SZRL6FY.js";var c=Le(st(),1),un=Le(Hs(),1);var xn=[24,72,168],Ks=new Set(xn);function Mn(e){let t=e==="7d"?168:Number(e);return!Number.isFinite(t)||!Ks.has(t)?null:t}function _s(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function Fs(e,t=Date.now()){return t-e*60*60*1e3}function Us(e,t,s=Date.now()){if(!e.sessionId||e.status!=="idle"||e.locked||e.pendingRepo||e.tuiPromptActive||e.agentAttention)return!1;let a=_s(e.lastMessageAt);return a!==null&&a<Fs(t,s)}function It(e,t,s=Date.now()){return e.filter(a=>Us(a,t,s))}var Nt={1:"claude-code",2:"aiden",3:"coco",4:"codex",5:"cursor",6:"gemini",7:"opencode",8:"antigravity",9:"mtr",10:"hermes",11:"codex-app",12:"mira",13:"seed",14:"traex",15:"pi",16:"copilot",17:"oh-my-pi",18:"relay",19:"mir",20:"kimi",21:"genius",22:"grok",23:"kiro-cli",24:"riff"},_o=new Set(Object.values(Nt)),js={"claude-code":"Claude",aiden:"Aiden",coco:"CoCo",codex:"Codex",cursor:"Cursor",gemini:"Gemini",genius:"Genius",opencode:"OpenCode",antigravity:"Antigravity",mtr:"MTR",hermes:"Hermes","codex-app":"Codex App",mira:"Mira",seed:"Seed",traex:"TRAE",pi:"Pi",copilot:"Copilot","oh-my-pi":"Oh My Pi",relay:"Relay",mir:"Mir CLI",kimi:"Kimi",grok:"Grok Build","kiro-cli":"Kiro",riff:"Riff"},xt=Object.values(Nt).map(e=>({id:e,label:js[e]??e}));function on(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function En(e){let t=on(e);return t===null?"-":t.toLocaleString("en-US")}function Mt(e,t){let s=String(e??"").replace(/\s+/g," ").trim();return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function Et(e,t){let s=String(e??"").replace(/\r\n?/g,`
|
|
2
|
+
`).replace(/[^\S\n]+\n/g,`
|
|
3
|
+
`).replace(/\n{3,}/g,`
|
|
4
|
+
|
|
5
|
+
`).replace(/^\n+/,"").replace(/\s+$/,"");return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function Lt(e){let t=Et(e.previewUserFullText??e.previewUserText??"",4e3),s=e.previewBotState==="replied"?Et(e.previewBotFullText??e.previewBotText??"",4e3):"";return{userText:Mt(t,120),userFullText:t,botText:Mt(s,220),botFullText:s}}var At={open:!1,suppressFocusOpen:!1};function Bt(e,t){switch(t){case"open":return{open:!0,suppressFocusOpen:!1};case"close":return{open:!1,suppressFocusOpen:!1};case"toggle":return{open:!e.open,suppressFocusOpen:!1};case"focus":return e.suppressFocusOpen?{open:e.open,suppressFocusOpen:!1}:{open:!0,suppressFocusOpen:!1};case"escape-refocus":return{open:!1,suppressFocusOpen:!0};default:return e}}var ge=[...xt.map(e=>e.id),"unknown"],Rn=[{id:"needs-you",labelKey:"sessions.board.needsYou",hintKey:"sessions.board.needsYouHint"},{id:"starting",labelKey:"sessions.board.starting",hintKey:"sessions.board.startingHint"},{id:"working",labelKey:"sessions.board.working",hintKey:"sessions.board.workingHint"},{id:"idle",labelKey:"sessions.board.idle",hintKey:"sessions.board.idleHint"}];function Ln(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}var Dt=["starting","working","idle","dormant","analyzing","active","limited","closed"];function Xe(e){let t=String(e??"unknown"),s=`sessions.status.${t}`,a=o(s);return a===s?t:a}function Ot(e){let t=0,s=0,a=0;for(let r of e)r?.status!=="closed"&&(t++,typeof r?.workerPid=="number"&&s++,r?.status==="dormant"&&a++);return{logical:t,resident:s,dormant:a}}function An(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function Rt(e){return e?.chatType==="p2p"?o("sessions.directChat"):o("sessions.groupChat")}function zs(e){let t=o("sessions.directChat"),s=String(e?.chatDisplayName??"").trim()||String(e?.chatId??"").trim()||o("sessions.chatUnknown"),a=de(e);return`${t} \xB7 ${s} - ${a}`}function Ee(e){let t=String(e?.chatId??"").trim();if(e?.chatType==="p2p")return zs(e);let s=Me(e),a=e?.chatType==="p2p"?(()=>{let r=String(e?.botName??"").trim();return r?` \xB7 ${r}`:""})():"";return s?`${Rt(e)} \xB7 ${s}${a}`:t?`${Rt(e)} \xB7 ${t}${a}`:o("sessions.chatUnknown")}function Bn(e,t=Me){return!!String(e?.chatId??"").trim()&&!t(e)}function Dn(e){let t=Ee(e),s=String(e?.chatId??"").trim();return s&&!t.includes(s)?`${t} \xB7 ${s}`:t}function Pt(e){return`${JSON.stringify(e)} ${Ee(e)} ${Dn(e)}`.toLowerCase()}function me(e){return typeof e=="string"?e.trim():""}function $t(e){let t=me(e?.chatId),s=me(e?.rootMessageId);return e?.scope==="chat"?t?"chat":"session":t&&s?"thread":"session"}function On(e){let t=me(e?.chatId),s=me(e?.rootMessageId),a=$t(e);return a==="thread"?`thread:${encodeURIComponent(t)}:${encodeURIComponent(s)}`:a==="chat"?`chat:${encodeURIComponent(t)}`:`session:${encodeURIComponent(me(e?.sessionId)||"unknown")}`}function Js(e,t){let s=[...e].sort((a,r)=>Number(a?.spawnedAt??0)-Number(r?.spawnedAt??0));for(let a of s){let r=me(a?.title);if(r)return r}return t}function an(e){let t=new Map;for(let a of e){let r=On(a),m=t.get(r);m?m.push(a):t.set(r,[a])}let s=[];for(let[a,r]of t){let m=[...r].sort((M,_)=>Number(_.lastMessageAt??0)-Number(M.lastMessageAt??0)),p=m[0]??{},l=$t(p),g=me(p.chatId),C=l==="thread"?me(p.rootMessageId):"",w=new Set(m.map(M=>me(M.larkAppId)||me(M.botName)).filter(Boolean)),S=Math.max(1,w.size),B=m.filter(M=>M.status!=="closed").length,A=m.filter(M=>M.lastInputFromBot===!0).length,N=m.reduce((M,_)=>Math.max(M,Number(_.lastMessageAt??0)),0),x=C||g||me(p.sessionId)||a;s.push({key:a,kind:l,chatId:g,...C?{rootMessageId:C}:{},title:Js(m,x),rows:m,botCount:S,activeCount:B,closedCount:m.length-B,inferredBotInputCount:A,latestActivityAt:N,multiBot:w.size>1,inferredBotTriggered:A>0})}return s.sort((a,r)=>r.latestActivityAt-a.latestActivityAt||a.key.localeCompare(r.key))}var Ge=Ct;function rn(e=Ie){return e.authed?!0:(e.publicReadOnly,!1)}var z={pin:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 14.3s4.2-3.9 4.2-7.3A4.2 4.2 0 0 0 8 2.9a4.2 4.2 0 0 0-4.2 4.1C3.8 10.4 8 14.3 8 14.3z"/><circle cx="8" cy="6.9" r="1.5"/></svg>',openChat:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M9.4 2.8h3.8v3.8"/><path d="M13.2 2.8 7.3 8.7"/><path d="M11.5 9.3v2.9a1.2 1.2 0 0 1-1.2 1.2H3.8a1.2 1.2 0 0 1-1.2-1.2V5.7a1.2 1.2 0 0 1 1.2-1.2h2.9"/></svg>',details:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="2.4" y="2.6" width="11.2" height="10.8" rx="2"/><path d="M5.2 5.4h5.6"/><path d="M5.2 8h5.6"/><path d="M5.2 10.6h3.2"/></svg>',terminal:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.8" y="2.2" width="12.4" height="10.5" rx="2"/><path d="M1.8 5h12.4"/><circle cx="4" cy="3.6" r=".45" fill="currentColor" stroke="none"/><path d="m4.2 7.3 1.8 1.6-1.8 1.6"/><path d="M8 10.6h3.4"/></svg>',key:'<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="6" cy="6.1" r="3"/><path d="M8.1 8.2 13 13.1"/><path d="M11.3 11.4 12.6 10.1"/><path d="M12.7 12.8 13.7 11.8"/></svg>',lock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.4a2.9 2.9 0 0 1 5.8 0V7"/><path d="M8 9.5v1.4"/></svg>',unlock:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="3" y="7" width="10" height="6.4" rx="1.8"/><path d="M5.1 7V5.3a2.9 2.9 0 0 1 5.1-1.9"/><path d="M8 9.5v1.4"/></svg>',close:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4.2 4.2 11.8 11.8"/><path d="M11.8 4.2 4.2 11.8"/></svg>',edit:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M10.7 3.3 12.7 5.3 6.3 11.7 3.7 12.3 4.3 9.7 10.7 3.3z"/></svg>',history:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3.2 7.8a4.8 4.8 0 1 0 1.4-3.4"/><path d="M3.2 3.1v3.2h3.2"/><path d="M8 5.4v3l2.1 1.2"/></svg>',restart:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M12.7 6.5A4.8 4.8 0 1 0 13 9"/><path d="M12.7 3.3v3.2H9.5"/></svg>',feishu:'<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 5.2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v3.3a2 2 0 0 1-2 2H7.1L4.3 13v-2.5H5"/><path d="M9.1 3.2h3.7v3.7"/><path d="M12.8 3.2 8.5 7.5"/></svg>',copy:'<svg viewBox="0 0 16 16" aria-hidden="true"><rect x="5.5" y="5.5" width="7.5" height="7.5" rx="1.4"/><path d="M10.5 5.5V4.1a1.4 1.4 0 0 0-1.4-1.4H4.1a1.4 1.4 0 0 0-1.4 1.4v5a1.4 1.4 0 0 0 1.4 1.4h1.4"/></svg>'};function ln(e){return e.locked?o("sessions.unlock"):o("sessions.lock")}async function Pn(e,t){let s=window.open("about:blank","_blank");s&&(s.opener=null),t&&(t.disabled=!0);try{let a=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/write-link`),r=await a.json().catch(()=>({}));if(!a.ok||r?.ok===!1||!r?.url){s?.close(),a.status!==401&&alert(`${o("sessions.writeLinkFail")}: ${r?.error??a.status}`);return}s?s.location.href=r.url:window.open(r.url,"_blank","noopener")}catch(a){s?.close(),alert(`${o("sessions.writeLinkFail")}: ${a}`)}finally{t&&(t.disabled=!1)}}async function Ht(e,t){t&&(t.disabled=!0);try{let s=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/spawn-command`),a=await s.json().catch(()=>({}));if(!s.ok||a?.ok===!1||!a?.command){s.status!==401&&alert(`${o("sessions.copyCommandFail")}: ${a?.error??s.status}`);return}if(await sn(a.command,o("sessions.copyCommand"))&&t){let r=t.textContent;t.textContent=o("sessions.copyCommandDone"),setTimeout(()=>{r!==null&&(t.textContent=r)},1500)}}catch(s){alert(`${o("sessions.copyCommandFail")}: ${s}`)}finally{t&&(t.disabled=!1)}}function $n(e){let t=String(e?.senderType??"unknown"),s=t==="app"||t==="bot"?"bot":t,a=String(e?.senderId??"").trim(),r=String(e?.senderName??"").trim();return`${s}:${a||r||"unknown"}`}function Kt(e){return e.status==="closed"?null:e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"needs-you":e.status==="starting"?"starting":e.status==="working"||e.status==="analyzing"||e.status==="active"?"working":(e.status==="dormant","idle")}function _t(e){let t=String(e.status??"unknown"),s=String(e.cliId??"unknown"),a=Ie.locale==="zh"?"\uFF1A":": ";return[o("sessions.restartConfirmIntro"),"",`${o("sessions.restartConfirmStatus")}${a}${Xe(t)}`,`${o("sessions.restartConfirmCli")}${a}${s}`,"",o("sessions.restartConfirmQuestion")].join(`
|
|
6
|
+
`)}function cn(e){return e.status!=="closed"&&!e.adopt&&!e.pendingRepo}async function Ft(){try{let e=await fetch("/api/groups");if(!e.ok)return[];let t=await e.json();return(Array.isArray(t?.bots)?t.bots:[]).filter(a=>a&&typeof a.larkAppId=="string").map(a=>({larkAppId:a.larkAppId,botName:typeof a.botName=="string"&&a.botName?a.botName:a.larkAppId}))}catch{return[]}}var Ve=new vt({html:!1,linkify:!0,breaks:!0});Ve.validateLink=e=>/^(https?:|mailto:)/i.test(e.trim());var Ut=Ve.renderer.rules.link_open;Ve.renderer.rules.link_open=(e,t,s,a,r)=>(e[t].attrSet("target","_blank"),e[t].attrSet("rel","noopener noreferrer nofollow"),Ut?Ut(e,t,s,a,r):r.renderToken(e,t,s));Ve.renderer.rules.image=(e,t)=>{let s=e[t],a=s.children?.reduce((l,g)=>l+(g.content??""),"")??"",r=Be(a.trim()||"image"),m=s.attrGet("src")??"";return/^(https?:|mailto:)/i.test(m.trim())?`<span class="session-card-exchange-img">\u{1F5BC} <a href="${Be(m)}" target="_blank" rel="noopener noreferrer nofollow">${r}</a></span>`:`<span class="session-card-exchange-img">\u{1F5BC} ${r}</span>`};function Hn(e){let t=String(e??"");if(!t.trim())return"";try{return Ve.render(t).trim()||`<p>${Be(t)}</p>`}catch{return`<p>${Be(t)}</p>`}}function Kn(e,t){let s=Math.max(0,Math.min(t,e.length)),r=e.slice(0,s).match(/(?:^|\s)@([^\s@]*)$/u);if(!r)return null;let m=r[1]??"";return{start:s-m.length-1,end:s,query:m}}function jt(e,t,s){let a=`@${s} `,r=e[t.end]===" "?t.end+1:t.end;return{text:e.slice(0,t.start)+a+e.slice(r),caret:t.start+a.length}}function zt(e,t){let s=t.trim().toLocaleLowerCase();return s?e.filter(a=>a.botName.toLocaleLowerCase().includes(s)||a.larkAppId.toLocaleLowerCase().includes(s)):[...e]}function Jt(e,t,s,a){if(a.length===0)return{text:e,caret:Math.max(0,Math.min(t,e.length))};let r=Math.max(0,Math.min(t,e.length)),m=Math.max(r,Math.min(s,e.length)),p=e.slice(0,r),l=e.slice(m),g=p&&!/\s$/u.test(p)?" ":"",C=l&&!/^\s/u.test(l)?" ":"",w=`${g}${a.join(" ")}${C}`;return{text:p+w+l,caret:p.length+w.length}}function Ws(e,t){let s=e.indexOf(t);if(s<0)return e;let a=e.slice(0,s),r=e.slice(s+t.length);return/\s$/u.test(a)&&/^\s/u.test(r)&&(r=r.slice(1)),a+r}function Wt(e,t,s,a){let r=Ws(e,t),m=s.map((p,l)=>a(l));return s.forEach((p,l)=>{let g=r.indexOf(p);g<0||p===m[l]||(r=r.slice(0,g)+m[l]+r.slice(g+p.length))}),{text:r,markers:m}}var E=Le(st(),1);var Xt=["backlog","todo","in_progress","in_review","done"];function Gt(e){return typeof e=="string"&&Xt.includes(e)?e:null}function Vt(e){if(e.status==="closed")return"done";let t=Gt(e.kanbanColumn);return t||(e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"in_review":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"in_progress":"todo")}var Xs=1e15;function Pe(e){if(typeof e.kanbanPosition=="number"&&Number.isFinite(e.kanbanPosition))return e.kanbanPosition;let t=typeof e.lastMessageAt=="number"&&Number.isFinite(e.lastMessageAt)?e.lastMessageAt:0;return Xs-t}function _n(e,t){return e!==null&&t!==null?(e+t)/2:e!==null?e+1024:t!==null?t-1024:1024}var I=Le(tn(),1),qt=[{id:"backlog",labelKey:"sessions.kanban.backlog"},{id:"todo",labelKey:"sessions.kanban.todo"},{id:"in_progress",labelKey:"sessions.kanban.inProgress"},{id:"in_review",labelKey:"sessions.kanban.inReview"},{id:"done",labelKey:"sessions.kanban.done"}],Fn=50;function Yt(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function Gs(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function Vs(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function qs(e){let t=(s="")=>`<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="5.4" fill="none" stroke="currentColor" stroke-width="1.6"${s}/>`;switch(e){case"backlog":return`${t(' stroke-dasharray="1.6 2.1"')}</svg>`;case"in_progress":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 0 1 7,10.4 Z" fill="currentColor"/></svg>`;case"in_review":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 1 1 3.6,7 Z" fill="currentColor"/></svg>`;case"done":return'<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="6.2" fill="currentColor"/><path d="M4.4 7.2 6.2 9 9.7 5.4" fill="none" stroke="var(--surface)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';default:return`${t()}</svg>`}}function Ke(e){return{__html:e}}function dn(e){return typeof e.remoteDeployment=="string"&&e.remoteDeployment.length>0}function Ys(e){return ue(e.title)||e.sessionId}function ts(e){let t=[],s=new Map;for(let m of e){let p=String(m.chatId??m.sessionId),l=s.get(p);l||(l={chatId:p,rows:[]},s.set(p,l),t.push(l)),l.rows.push(m)}let a=[];return{clusters:t.map(m=>(a.push(...m.rows),m.rows.length<2?{type:"card",row:m.rows[0]}:{type:"cluster",chatId:m.chatId,rows:m.rows})),flat:a}}function Qt(e){let t=new Map(qt.map(a=>[a.id,[]]));for(let a of e)t.get(Vt(a)).push(a);return{columns:qt.map(a=>{let r=(t.get(a.id)??[]).sort((g,C)=>Pe(g)-Pe(C)),m=0;a.id==="done"&&r.length>Fn&&(m=r.length-Fn,r=r.slice(0,Fn));let{clusters:p,flat:l}=ts(r);return t.set(a.id,l),{id:a.id,labelKey:a.labelKey,rows:r,clusters:p,hiddenCount:m}}),groups:t}}function Qs(e){let t=new Map;for(let s of e){if(s.status==="closed")continue;let a=String(s.larkAppId||s.botName||"unknown"),r=t.get(a);r||(r={name:de(s),larkAppId:s.larkAppId,rows:[]},t.set(a,r)),r.rows.push(s)}return[...t.values()].sort((s,a)=>s.name.localeCompare(a.name)).map(s=>{let a=s.rows.sort((m,p)=>Number(p.lastMessageAt??0)-Number(m.lastMessageAt??0)),{clusters:r}=ts(a);return{key:String(s.larkAppId??s.name),name:s.name,larkAppId:s.larkAppId,rows:a,clusters:r}})}function Un(e){return new Map(e.map(t=>[String(t.sessionId),t]))}function Zs(e){if(e.groupBy==="bot"){let a=e.rows.filter(r=>!dn(r));return{mode:"bot",columns:Qs(a),groups:new Map,rowById:Un(a),team:null,scope:null}}if(e.groupBy==="team"){if(!e.teamsLoaded)return{mode:"loading",groups:new Map,rowById:new Map,team:null,scope:null};let a=e.teams.find(S=>S.key===e.teamKey)??e.teams[0]??null,r=e.getTeamChatIds(a??void 0),m=a?e.rows.filter(S=>r.has(String(S.chatId))):[],p=(e.teamBoardKey===a?.key?e.teamBoardData?.board:null)??{},l=(e.teamBoardKey===a?.key?e.teamBoardData?.remoteRows:null)??[],g=[...m,...l].map(S=>{let B=p[String(S.sessionId)];return B?{...S,kanbanColumn:B.column,kanbanPosition:B.position}:S}),{columns:C,groups:w}=Qt(g);return{mode:"flow",columns:C,groups:w,rowById:Un(g),team:a,scope:{chats:r.size,sessions:g.length}}}let{columns:t,groups:s}=Qt(e.rows);return{mode:"flow",columns:t,groups:s,rowById:Un(e.rows),team:null,scope:null}}function eo(e){let t=new Map;return e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col;a&&s.scrollTop&&t.set(a,s.scrollTop)}),t}function no(e,t){t?.size&&e?.querySelectorAll(".kanban-col-list").forEach(s=>{let a=s.closest(".kanban-column")?.dataset.col,r=a?t.get(a):void 0;r&&(s.scrollTop=r)})}function Zt(e,t){for(let s of e.querySelectorAll(".kanban-card:not(.dragging)")){if(s.closest(".kanban-cluster.dragging"))continue;let a=s.getBoundingClientRect();if(t<a.top+a.height/2)return s}return null}function He(e){return(0,I.jsx)("button",{type:"button",className:`card-act kanban-card-act${e.className?` ${e.className}`:""}`,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,onClick:t=>{t.stopPropagation(),e.onClick(t.currentTarget)},dangerouslySetInnerHTML:Ke(e.icon)})}function to(e){let t=ue(e.row.title)||"",[s,a]=(0,E.useState)(t),r=(0,E.useRef)(null),m=(0,E.useRef)(!1);(0,E.useLayoutEffect)(()=>{r.current?.focus(),r.current?.select()},[]);let p=(0,E.useCallback)(l=>{if(m.current)return;m.current=!0;let g=s.trim();l&&g&&g!==t&&e.onCommit(e.row,g),e.onCancel()},[t,e,s]);return(0,I.jsx)("input",{ref:r,type:"text",className:"kanban-rename-input",maxLength:200,value:s,onChange:l=>a(l.currentTarget.value),onClick:l=>l.stopPropagation(),onBlur:()=>p(!0),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"?(l.preventDefault(),p(!0)):l.key==="Escape"&&(l.preventDefault(),p(!1))}})}function es(e){let{callbacks:t,row:s}=e,a=Ys(s),r=de(s),m=Me(s),p=Gs(s.workingDir),l=Vs(s),g=[m,p!=="-"?p:null].filter(Boolean).join(" \xB7 "),C=String(s.status??"unknown"),w=typeof s.remoteDeployment=="string"?s.remoteDeployment:"",S=e.editingId===s.sessionId,B=t.selectedSessionIds.has(String(s.sessionId)),A=["kanban-card",B?"selected":"",w?"kanban-card-remote":"",s.locked?"locked":"",e.dragId===s.sessionId?"dragging":"",e.dropBeforeId===s.sessionId?"drop-before":""].filter(Boolean).join(" "),N=w?null:(0,I.jsxs)("span",{className:"kanban-card-actions-rail",children:[(0,I.jsx)(He,{action:"history",icon:t.icons.history,label:o("sessions.history.title"),onClick:()=>t.onHistory(s)}),s.webPort&&t.onOpenTerminal?(0,I.jsx)(He,{action:"terminal",icon:t.icons.terminal,label:o("sessions.openReadonlyTerminal"),onClick:()=>t.onOpenTerminal?.(s)}):null,s.webPort&&t.onOpenWritableTerminal?(0,I.jsx)(He,{action:"write-link",icon:t.icons.key,label:o("sessions.openWritableTerminal"),onClick:x=>t.onOpenWritableTerminal?.(s,x)}):null,s.feishuChatLink?(0,I.jsx)("a",{className:"card-act kanban-card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),onClick:x=>x.stopPropagation(),dangerouslySetInnerHTML:Ke(t.icons.feishu)}):null,(0,I.jsx)(He,{action:"lock",className:s.locked?"locked":"",icon:s.locked?t.icons.unlock:t.icons.lock,label:t.lockActionLabel(s),onClick:x=>t.onToggleLock(s,x)}),(0,I.jsx)(He,{action:"details",icon:t.icons.details,label:o("sessions.details"),onClick:()=>t.onDetails(s)}),t.canRestartSession(s)?(0,I.jsx)(He,{action:"restart",icon:t.icons.restart,label:o("sessions.restart"),onClick:x=>t.onRestart(s,x)}):null]});return(0,I.jsxs)("article",{className:A,"data-id":s.sessionId,tabIndex:0,role:"button","aria-pressed":B,draggable:!0,onClick:x=>e.onCardClick(s,x),onKeyDown:x=>e.onCardKeyDown(s,x),onDragStart:x=>e.onDragStartCard(s,x),children:[(0,I.jsxs)("div",{className:"kanban-card-top",children:[(0,I.jsx)("span",{className:`badge cli-${Yt(s.cliId)}`,children:s.cliId??"unknown"}),s.adopt?(0,I.jsx)("span",{className:"badge",children:"adopt"}):null,s.locked?(0,I.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null,w?(0,I.jsx)("span",{className:"badge kanban-remote-badge",title:o("sessions.kanban.remoteHint",{name:w}),children:w}):null,N]}),(0,I.jsx)("div",{className:"kanban-card-title-row",children:S?(0,I.jsx)(to,{row:s,onCancel:e.onEditDone,onCommit:t.onRename}):(0,I.jsx)("p",{className:"kanban-card-title",title:String(s.title??a),onDoubleClick:x=>{x.stopPropagation(),e.cancelOpen(),w||e.onBeginEdit(s)},children:String(a).slice(0,140)})}),g||l?(0,I.jsxs)("div",{className:"kanban-card-meta-row",children:[g?(0,I.jsx)("p",{className:"kanban-card-desc",title:g,children:g}):(0,I.jsx)("span",{className:"kanban-card-desc kanban-card-desc-empty","aria-hidden":"true"}),l?(0,I.jsx)("span",{className:"session-signal",title:l,children:l}):null]}):null,(0,I.jsxs)("div",{className:"kanban-card-foot",children:[(0,I.jsx)("span",{className:"kanban-card-owner",dangerouslySetInnerHTML:Ke(`${xe({name:r,larkAppId:s.larkAppId,size:"sm"})}<span>${Be(r)}</span>`)}),(0,I.jsxs)("span",{className:"kanban-card-updated",children:[o("sessions.kanban.updated",{time:Ne(s.lastMessageAt)}),(0,I.jsx)("span",{className:"kanban-card-dot","data-status":Yt(C),title:t.sessionStatusText(C)})]})]})]})}function ns(e){let t=e.item;if(t.type==="card")return(0,I.jsx)(es,{...e.cardProps,row:t.row});let s=Me(t.rows[0])??t.chatId,a=e.dragCluster?.chatId===t.chatId&&e.dragCluster.col===e.columnId;return(0,I.jsxs)("div",{className:`kanban-cluster${e.expanded?" expanded":" collapsed"}${a?" dragging":""}`,"data-chat":t.chatId,children:[(0,I.jsxs)("header",{draggable:!0,title:`${s} \xB7 ${o("sessions.kanban.clusterDragHint")}`,onDragStart:r=>{e.columnId&&e.onDragStartCluster(t.chatId,e.columnId,r)},children:[(0,I.jsx)("span",{className:"kanban-cluster-avatar",dangerouslySetInnerHTML:Ke(en({chatId:t.chatId,name:s,size:"sm"}))}),(0,I.jsx)("span",{className:"kanban-cluster-name",children:s}),(0,I.jsx)("span",{className:"kanban-cluster-count",children:t.rows.length}),(0,I.jsx)("button",{type:"button",className:"kanban-cluster-toggle","aria-expanded":e.expanded,title:o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),"aria-label":o(e.expanded?"sessions.kanban.clusterCollapse":"sessions.kanban.clusterExpand"),onClick:r=>{r.stopPropagation(),e.onToggleExpanded()},children:(0,I.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,I.jsx)("path",{d:"m5.5 6.5 2.5 2.5 2.5-2.5"})})})]}),e.expanded?t.rows.map(r=>(0,I.jsx)(es,{...e.cardProps,row:r},r.sessionId)):null]})}function ss(e){let[t,s]=(0,E.useState)(e),[a,r]=(0,E.useState)(null),[m,p]=(0,E.useState)(null),[l,g]=(0,E.useState)(null),[C,w]=(0,E.useState)(null),[S,B]=(0,E.useState)(()=>new Set),A=(0,E.useRef)(null),N=(0,E.useRef)(null),x=(0,E.useRef)(null),M=(0,E.useRef)(new Map),_=(0,E.useRef)(new Map),U=(0,E.useRef)(m),j=!!a||!!m,O=(0,E.useCallback)(()=>{x.current!==null&&(clearTimeout(x.current),x.current=null)},[]),q=(0,E.useCallback)(T=>{N.current=eo(e.host),s(T)},[e.host]);(0,E.useEffect)(()=>{if(j){A.current=e;return}q(e)},[q,j,e]),(0,E.useEffect)(()=>{if(j||!A.current)return;let T=A.current;A.current=null,q(T)},[q,j]),(0,E.useLayoutEffect)(()=>{no(e.host,N.current),N.current=null},[t,e.host]),(0,E.useEffect)(()=>{U.current=m},[m]),(0,E.useEffect)(()=>()=>O(),[O]);let F=(0,E.useMemo)(()=>Zs(t),[t]);(0,E.useLayoutEffect)(()=>{M.current=F.groups,_.current=F.rowById},[F]),(0,E.useEffect)(()=>{t.groupBy==="team"&&!t.teamsLoaded&&t.onNeedTeams()},[t]),(0,E.useEffect)(()=>{t.groupBy==="team"&&F.mode==="flow"&&F.team&&t.onNeedTeamBoard(F.team)},[t,F]),(0,E.useEffect)(()=>{t.onTeamScope(F.mode==="flow"?F.scope:null)},[t,F]);let se=(0,E.useCallback)(()=>{p(null),g(null),w(null)},[]),P=(0,E.useCallback)(T=>{B(v=>{let H=new Set(v);return H.has(T)?H.delete(T):H.add(T),H})},[]),pe=(0,E.useCallback)(T=>{O(),!dn(T)&&r(T.sessionId)},[O]),Y=(0,E.useCallback)((T,v)=>{dn(T)||v.target.closest("a, button, input, label")||(O(),x.current=setTimeout(()=>{x.current=null,t.onToggleSelect(T)},220))},[O,t]),fe=(0,E.useCallback)((T,v)=>{v.key!=="Enter"&&v.key!==" "||v.target!==v.currentTarget||dn(T)||(v.preventDefault(),t.onToggleSelect(T))},[t]),oe=(0,E.useCallback)((T,v)=>{t.groupBy!=="bot"&&(O(),p({kind:"card",id:String(T.sessionId)}),v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(T.sessionId))))},[O,t.groupBy]),ce=(0,E.useCallback)((T,v,H)=>{t.groupBy!=="bot"&&(O(),p({kind:"cluster",chatId:T,col:v}),H.dataTransfer&&(H.dataTransfer.effectAllowed="move",H.dataTransfer.setData("text/plain",`cluster:${T}`)))},[O,t.groupBy]),W=(0,E.useCallback)((T,v)=>{!U.current||t.groupBy==="bot"||(v.preventDefault(),v.dataTransfer&&(v.dataTransfer.dropEffect="move"),g(T),w(Zt(v.currentTarget,v.clientY)?.dataset.id??null))},[t.groupBy]),Ce=(0,E.useCallback)((T,v)=>{let H=U.current;if(!H||t.groupBy==="bot")return;v.preventDefault();let ae=Zt(v.currentTarget,v.clientY);se();let ee=M.current,ie=T;if(H.kind==="cluster"){let f=(ee.get(H.col)??[]).filter(J=>String(J.chatId)===H.chatId).filter(J=>!(J.status==="closed"&&ie!=="done"));if(!f.length)return;let L=new Set(f.map(J=>J.sessionId)),R=(ee.get(ie)??[]).filter(J=>!L.has(J.sessionId)),D=ae?R.findIndex(J=>J.sessionId===ae.dataset.id):R.length;D<0&&(D=R.length);let K=D>0?R[D-1]:null,he=D<R.length?R[D]:null,Z=_n(K?Pe(K):null,he?Pe(he):null);t.onMoveRows(f.map((J,Re)=>({row:J,column:ie,position:Z+Re*.001})));return}let G=_.current.get(H.id);if(!G||G.status==="closed"&&ie!=="done")return;let X=(ee.get(ie)??[]).filter(f=>f.sessionId!==H.id),re=ae?X.findIndex(f=>f.sessionId===ae.dataset.id):X.length;re<0&&(re=X.length);let ve=re>0?X[re-1]:null,$e=re<X.length?X[re]:null,_e=_n(ve?Pe(ve):null,$e?Pe($e):null);t.onMoveRows([{row:G,column:ie,position:_e}])},[se,t]),be={dragId:m?.kind==="card"?m.id:null,dropBeforeId:C,editingId:a,groupBy:t.groupBy,callbacks:t,cancelOpen:O,onBeginEdit:pe,onCardClick:Y,onCardKeyDown:fe,onDragStartCard:oe,onEditDone:()=>r(null)};return F.mode==="loading"?(0,I.jsx)(De,{label:o("sessions.kanban.teamLoading"),className:"kanban-loading-state"}):F.mode==="bot"?F.columns.length?(0,I.jsx)(I.Fragment,{children:F.columns.map(T=>(0,I.jsxs)("section",{className:"kanban-column kanban-bot-col","data-bot":T.key,children:[(0,I.jsxs)("header",{children:[(0,I.jsx)("span",{className:"kanban-col-avatar",dangerouslySetInnerHTML:Ke(xe({name:T.name,larkAppId:T.larkAppId,size:"sm"}))}),(0,I.jsx)("h2",{children:T.name}),(0,I.jsx)("span",{className:"kanban-col-count",children:T.rows.length})]}),(0,I.jsx)("div",{className:"kanban-col-list",onDragOver:v=>W(T.key,v),onDragEnd:se,children:T.clusters.map(v=>(0,I.jsx)(ns,{item:v,dragCluster:m?.kind==="cluster"?m:null,cardProps:be,expanded:v.type==="cluster"&&S.has(`bot:${T.key}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&P(`bot:${T.key}:${v.chatId}`)},onDragStartCluster:ce},v.type==="card"?v.row.sessionId:v.chatId))})]},T.key))}):(0,I.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}):(0,I.jsx)(I.Fragment,{children:F.columns.map(T=>(0,I.jsxs)("section",{className:`kanban-column kanban-${T.id}${l===T.id?" drag-over":""}`,"data-col":T.id,onDragOver:v=>W(T.id,v),onDrop:v=>Ce(T.id,v),onDragEnd:se,children:[(0,I.jsxs)("header",{children:[(0,I.jsx)("span",{className:"kanban-col-icon",dangerouslySetInnerHTML:Ke(qs(T.id))}),(0,I.jsx)("h2",{children:o(T.labelKey)}),(0,I.jsx)("span",{className:"kanban-col-count",children:T.rows.length+T.hiddenCount})]}),(0,I.jsxs)("div",{className:"kanban-col-list",children:[T.rows.length?T.clusters.map(v=>(0,I.jsx)(ns,{item:v,columnId:T.id,dragCluster:m?.kind==="cluster"?m:null,cardProps:be,expanded:v.type==="cluster"&&S.has(`${T.id}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&P(`${T.id}:${v.chatId}`)},onDragStartCluster:ce},v.type==="card"?v.row.sessionId:v.chatId)):(0,I.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}),T.hiddenCount?(0,I.jsx)("div",{className:"kanban-col-more",children:o("sessions.kanban.moreHidden",{count:T.hiddenCount})}):null]})]},T.id))})}var n=Le(tn(),1),so=new Set(["image/png","image/jpeg","image/gif","image/webp"]),os=8,oo=10*1024*1024,ao=25*1024*1024;function io(e){return new Promise((t,s)=>{let a=new FileReader;a.onload=()=>typeof a.result=="string"?t(a.result):s(new Error("bad_image_data")),a.onerror=()=>s(a.error??new Error("image_read_failed")),a.readAsDataURL(e)})}function ro(e){return e===168?"7d":`${e}H`}var lo=xn.map(e=>({value:String(e),label:ro(e)}));function le(e){return{__html:e}}function te(){return typeof window>"u"?void 0:window.localStorage}function mn(e){let t=String(e.status??"unknown");return(0,n.jsx)("span",{className:`status status-${Ln(t)}`,children:Xe(t)})}function zn(e){return e.row.locked?(0,n.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null}function we(e){let t=e.className??`card-act${e.kind?` ${e.kind}`:""}`;return(0,n.jsx)("button",{type:"button",id:e.id,className:t,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,disabled:e.disabled,onClick:s=>{s.stopPropagation(),e.onClick(s.currentTarget)},dangerouslySetInnerHTML:le(e.icon)})}function rs(e){if(!e.url||!Oe())return null;let t=rn();return(0,n.jsxs)("span",{className:"term-pill",children:[(0,n.jsx)("a",{className:"term-btn term-open",href:e.url,target:"_blank",rel:"noopener","data-action":"terminal","data-tip":o("sessions.openReadonlyTerminal"),"aria-label":o("sessions.openReadonlyTerminal"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:le(z.terminal)}),t?(0,n.jsx)("button",{type:"button",className:"term-btn term-write","data-action":"write-link","data-tip":o("sessions.openWritableTerminal"),"aria-label":o("sessions.openWritableTerminal"),onClick:s=>{s.stopPropagation(),Pn(e.row,s.currentTarget)},dangerouslySetInnerHTML:le(z.key)}):null]})}function ls(e){let t=e.row;return t.scope!=="chat"||!t.feishuChatLink?null:(0,n.jsx)("a",{className:e.className??"card-act",href:t.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.openChat"),"aria-label":o("sessions.openChat"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:le(z.feishu)})}function co(e){let t=e.sortKey===e.sort;return(0,n.jsx)("th",{"data-sort":e.sort,"data-label":e.label,className:t?"sorted":void 0,"aria-sort":t?e.sortDir==="asc"?"ascending":"descending":"none",onClick:()=>e.onSort(e.sort),children:t?`${e.label} ${e.sortDir==="asc"?"\u25B2":"\u25BC"}`:e.label})}function as(e,t){return t==="spawnedAt"||t==="lastMessageAt"?Number(e[t]??0):t==="tokenIn"?on(e.tokenUsage?.in)??-1:t==="tokenOut"?on(e.tokenUsage?.out)??-1:t==="adopt"?!!e.adopt:t==="chat"?Ee(e).toLowerCase():String(e[t]??"").toLowerCase()}function is(e,t,s,a){let r=as(e,s),m=as(t,s),p=0;return typeof r=="number"&&typeof m=="number"?p=r-m:typeof r=="boolean"&&typeof m=="boolean"?p=Number(r)-Number(m):p=String(r).localeCompare(String(m)),p===0&&(p=Number(e.lastMessageAt??0)-Number(t.lastMessageAt??0)),a==="asc"?p:-p}function uo(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function mo(e,t,s){let a=s==="needs-you"?nn(e):Number(e.lastMessageAt??0),r=s==="needs-you"?nn(t):Number(t.lastMessageAt??0);return a!==r?s==="needs-you"?a-r:r-a:String(e.title??e.sessionId).localeCompare(String(t.title??t.sessionId))}function go(e){if(e==null||e==="")return"";let t=Number(e),s=Number.isFinite(t)&&t>0?new Date(t):new Date(String(e));return Number.isNaN(s.getTime())?"":s.toLocaleString()}function po(e){return e===void 0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m${Math.round(e%6e4/1e3)}s`}function Jn(e,t){(0,c.useEffect)(()=>{let s=e.current;if(s)if(t){if(!s.open)try{s.showModal()}catch{}}else s.open&&s.close()},[t,e])}function jn(e){let[t,s]=(0,c.useState)(!1);return(0,n.jsx)("button",{type:"button","data-copy":e.value,onClick:()=>{sn(e.value,o("sessions.copy")).then(a=>{a&&(s(!0),window.setTimeout(()=>s(!1),800))})},children:t?o("sessions.copied"):o("sessions.copy")})}function fo(e){let[t,s]=(0,c.useState)(0),[a,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)("button",{id:"locate-btn",type:"button",disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.locateSession(e.row);r(!1),m&&s(30)},children:t>0?o("sessions.cooldown",{seconds:t}):a?o("sessions.locating"):o("sessions.locate")})}function bo(e){let[t,s]=(0,c.useState)(0),[a,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)(we,{action:"locate",icon:z.pin,label:t>0?o("sessions.cooldown",{seconds:t}):o("sessions.locate"),disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.onLocate(e.row);r(!1),m&&s(30)}})}function ho(e){let t=ge.filter(l=>e.selected.has(l)).length,s=(0,c.useRef)(null),[a,r]=(0,c.useState)("");(0,c.useEffect)(()=>{let l=()=>{s.current?.open&&(s.current.open=!1)},g=w=>{let S=s.current;S?.open&&!S.contains(w.target)&&l()},C=w=>{w.key==="Escape"&&l()};return document.addEventListener("pointerdown",g,!0),document.addEventListener("keydown",C),()=>{document.removeEventListener("pointerdown",g,!0),document.removeEventListener("keydown",C)}},[]);let m=a.trim().toLowerCase(),p=m?ge.filter(l=>l.toLowerCase().includes(m)):ge;return(0,n.jsxs)("details",{className:"filter-cli",ref:s,children:[(0,n.jsxs)("summary",{children:[o("sessions.cli")," \xB7 ",(0,n.jsx)("b",{id:"cli-filter-count",className:t===ge.length?void 0:"cli-filter-active",children:t===ge.length?o("common.all"):`${t}/${ge.length}`})]}),(0,n.jsxs)("div",{className:"filter-cli-pop",role:"group","aria-label":o("sessions.cli"),children:[(0,n.jsxs)("div",{className:"filter-cli-head",children:[(0,n.jsx)("input",{type:"search",className:"filter-cli-search",placeholder:o("sessions.cliSearch"),value:a,autoFocus:!0,onChange:l=>r(l.currentTarget.value),onClick:l=>l.stopPropagation()}),(0,n.jsxs)("div",{className:"filter-cli-bulk",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{for(let l of ge)e.selected.has(l)||e.onToggle(l,!0)},children:o("sessions.cliSelectAll")}),(0,n.jsx)("button",{type:"button",onClick:()=>{for(let l of ge)e.selected.has(l)&&e.onToggle(l,!1)},children:o("sessions.cliClear")})]})]}),(0,n.jsx)("div",{className:"filter-cli-options",children:p.length===0?(0,n.jsx)("span",{className:"filter-cli-empty",children:o("sessions.cliNoMatch")}):p.map(l=>(0,n.jsxs)("label",{className:"filter-check",children:[(0,n.jsx)("input",{type:"checkbox",name:"cli",value:l,checked:e.selected.has(l),onChange:g=>e.onToggle(l,g.currentTarget.checked)}),(0,n.jsx)("span",{children:l})]},l))})]})]})}function yo(e){let t=[{value:"",label:o("sessions.anyStatus")},...Dt.map(l=>({value:l,label:Xe(l)}))],s=[{value:"",label:o("sessions.adoptAny")},{value:"yes",label:o("sessions.adoptYes")},{value:"no",label:o("sessions.adoptNo")}],a=t.find(l=>l.value===e.filters.status)?.label??o("sessions.anyStatus"),r=s.find(l=>l.value===e.filters.adopt)?.label??o("sessions.adoptAny"),m=[{value:"",label:o("sessions.chatAny")},...e.chatOptions],p=m.find(l=>l.value===e.filters.chat)?.label??o("sessions.chatAny");return(0,n.jsxs)("form",{id:"filters",className:"filters dashboard-toolbar sessions-filters",onSubmit:l=>l.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q",placeholder:o("sessions.search"),value:e.filters.q,onChange:l=>{let g=l.currentTarget.value;e.setFilters(C=>({...C,q:g}))}}),(0,n.jsx)(We,{label:a,value:e.filters.status,options:t,onChange:l=>e.setFilters(g=>({...g,status:l}))}),(0,n.jsx)(We,{label:r,value:e.filters.adopt,options:s,onChange:l=>e.setFilters(g=>({...g,adopt:l}))}),(0,n.jsx)(We,{ariaLabel:o("sessions.location"),className:"filter-chat-menu",label:p,value:e.filters.chat,options:m,searchable:!0,searchPlaceholder:o("sessions.chatSearch"),searchEmptyLabel:o("sessions.chatNoMatch"),onChange:l=>e.setFilters(g=>({...g,chat:l}))}),(0,n.jsx)(ho,{selected:e.filters.cli,onToggle:(l,g)=>{e.setFilters(C=>{let w=new Set(C.cli);return g?w.add(l):w.delete(l),{...C,cli:w}})}}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"multiBotTopics",checked:e.filters.multiBotTopics,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,multiBotTopics:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.multiBotTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"botTriggeredTopics",checked:e.filters.botTriggeredTopics,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,botTriggeredTopics:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.botTriggeredTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"showUnknownChats",checked:e.filters.showUnknownChats,onChange:l=>{let g=l.currentTarget.checked;dt(te(),g),e.setFilters(C=>({...C,showUnknownChats:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.showUnknownChats")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"active",checked:e.filters.active,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,active:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.activeOnly")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsx)(wo,{...e.idleCleanup})]})}function ko(e){let t=!!e.closeProgress||!!e.lockProgress,s=e.lockProgress?.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.lockSelected"),a=e.lockProgress&&!e.lockProgress.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.unlockSelected"),r=Oe();return(0,n.jsxs)("div",{id:"bulk-bar",className:"bulk-bar",hidden:e.selectedCount===0,children:[(0,n.jsx)("span",{id:"bulk-count",children:o("sessions.selectedCount",{count:e.selectedCount})}),r?(0,n.jsx)("button",{type:"button",id:"bulk-monitor-room",disabled:t||e.selectedCount===0,onClick:e.onAddToMonitorRoom,children:e.monitorRoomText??o("sessions.addToMonitorRoom")}):null,(0,n.jsx)("button",{type:"button",id:"bulk-lock",disabled:t||e.lockDisabled,onClick:()=>e.onLock(!0),children:s}),(0,n.jsx)("button",{type:"button",id:"bulk-unlock",disabled:t||e.unlockDisabled,onClick:()=>e.onLock(!1),children:a}),(0,n.jsx)("button",{type:"button",id:"bulk-close",className:"contrast",disabled:t,onClick:e.onClose,children:e.closeProgress?`${e.closeProgress.done}/${e.closeProgress.total}`:o("sessions.closeSelected")}),(0,n.jsx)("button",{type:"button",id:"bulk-clear",disabled:t,onClick:e.onClear,children:o("sessions.clearSelection")})]})}function wo(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(e.hours),[m,p]=(0,c.useState)(),l=(0,c.useRef)(null),g=(0,c.useRef)(null),C=(0,c.useRef)(null),w=e.countForHours(a);return(0,c.useEffect)(()=>{t?r(e.hours):p(void 0)},[t,e.hours]),(0,c.useLayoutEffect)(()=>{if(!t)return;let S=()=>{let A=g.current,N=C.current;if(!A||!N)return;let x=12,M=window.innerWidth,_=window.innerHeight,U=Math.max(0,Math.min(292,M-x*2)),j=A.getBoundingClientRect(),O=N.offsetHeight,q=Math.max(x,M-U-x),F=j.left+j.width/2-U/2,se=Math.min(Math.max(F,x),q),P=j.bottom+8,pe=j.top-O-8,Y=P+O<=_-x||pe<x?Math.min(Math.max(P,x),Math.max(x,_-O-x)):Math.max(x,pe);p({left:se,top:Y,width:U})},B=window.requestAnimationFrame(S);return window.addEventListener("resize",S),window.addEventListener("scroll",S,!0),()=>{window.cancelAnimationFrame(B),window.removeEventListener("resize",S),window.removeEventListener("scroll",S,!0)}},[t,e.busy,e.status]),(0,c.useEffect)(()=>{if(!t)return;let S=A=>{let N=A.target;N instanceof Node&&l.current?.contains(N)||N instanceof Node&&C.current?.contains(N)||s(!1)},B=A=>{A.key==="Escape"&&s(!1)};return document.addEventListener("pointerdown",S,!0),document.addEventListener("keydown",B),()=>{document.removeEventListener("pointerdown",S,!0),document.removeEventListener("keydown",B)}},[t]),(0,n.jsxs)("div",{id:"idle-cleanup-bar",className:`idle-cleanup-bar${w===0?" is-empty":""}${t?" is-open":""}`,ref:l,children:[(0,n.jsxs)("button",{ref:g,type:"button",id:"idle-cleanup-run",className:"contrast idle-cleanup-run","aria-haspopup":"dialog","aria-expanded":t,disabled:e.busy,onClick:()=>s(S=>!S),children:[(0,n.jsxs)("svg",{className:"idle-cleanup-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M3.5 6.5h17"}),(0,n.jsx)("path",{d:"M9 3.5h6"}),(0,n.jsx)("path",{d:"m6.5 6.5.9 13h9.2l.9-13"}),(0,n.jsx)("path",{d:"M10 10.5v5M14 10.5v5"})]}),(0,n.jsx)("span",{children:o("sessions.idleCleanupRun")})]}),t&&typeof document<"u"?(0,un.createPortal)((0,n.jsxs)("div",{ref:C,className:"idle-cleanup-pop",role:"dialog","aria-label":o("sessions.idleCleanupRun"),style:m??{visibility:"hidden"},children:[(0,n.jsxs)("div",{className:"idle-cleanup-pop-head",children:[(0,n.jsx)("span",{className:"idle-cleanup-pop-title",children:o("sessions.idleCleanupRun")}),(0,n.jsxs)("span",{id:"idle-cleanup-count",className:"idle-cleanup-count",children:[(0,n.jsx)("span",{className:"idle-cleanup-dot","aria-hidden":"true"}),o("sessions.idleCleanupCount",{count:w})]})]}),(0,n.jsxs)("div",{className:"idle-cleanup-pop-field",children:[(0,n.jsx)("span",{className:"idle-cleanup-label",children:o("sessions.idleCleanupOlderThan")}),(0,n.jsx)("div",{id:"idle-cleanup-threshold",className:"idle-cleanup-threshold-options",role:"radiogroup","aria-label":o("sessions.idleCleanupThreshold"),children:lo.map(S=>{let B=Mn(S.value),A=B===a;return(0,n.jsx)("button",{type:"button",className:A?"active":void 0,"aria-pressed":A?"true":"false",disabled:e.busy,onClick:()=>r(B),children:S.label},S.value)})})]}),e.busy&&e.status?(0,n.jsx)("span",{id:"idle-cleanup-status",className:"idle-cleanup-status","aria-live":"polite",children:e.status}):null,(0,n.jsxs)("div",{className:"idle-cleanup-pop-actions",children:[(0,n.jsx)("button",{type:"button",className:"idle-cleanup-cancel",disabled:e.busy,onClick:()=>s(!1),children:o("sessions.idleCleanupCancel")}),(0,n.jsx)("button",{type:"button",className:"idle-cleanup-confirm",disabled:e.busy||w===0,onClick:()=>{e.onRun(a).then(()=>s(!1))},children:o("sessions.idleCleanupApply")})]})]}),document.body):null]})}function Co(e){let t=(0,c.useRef)(null);(0,c.useLayoutEffect)(()=>{t.current&&(t.current.indeterminate=e.selectAllIndeterminate)},[e.selectAllIndeterminate]);let s=[{id:"botName",label:o("sessions.bot")},{id:"cliId",label:o("sessions.cli")},{id:"status",label:o("sessions.status")},{id:"chat",label:o("sessions.location")},{id:"tokenIn",label:o("sessions.tokenIn")},{id:"tokenOut",label:o("sessions.tokenOut")},{id:"title",label:o("sessions.titleCol")},{id:"workingDir",label:o("sessions.workingDir")},{id:"spawnedAt",label:o("sessions.created")},{id:"lastMessageAt",label:o("sessions.last")},{id:"adopt",label:o("sessions.adopt")}],a=s.filter(l=>!e.hiddenColumns.has(l.id)),r=2+a.length,m={select:o("sessions.selectSession"),botName:o("sessions.bot"),cliId:o("sessions.cli"),status:o("sessions.status"),chat:o("sessions.location"),tokenIn:o("sessions.tokenIn"),tokenOut:o("sessions.tokenOut"),title:o("sessions.titleCol"),workingDir:o("sessions.workingDir"),spawnedAt:o("sessions.created"),lastMessageAt:o("sessions.last"),adopt:o("sessions.adopt"),actions:o("sessions.actions")};function p(l,g){switch(g){case"botName":return(0,n.jsx)("td",{"data-label":m.botName,children:de(l)});case"cliId":return(0,n.jsx)("td",{"data-label":m.cliId,children:(0,n.jsx)("span",{className:`badge cli-${Ln(l.cliId)}`,children:l.cliId??"unknown"})});case"status":return(0,n.jsxs)("td",{"data-label":m.status,children:[(0,n.jsx)(mn,{status:l.status}),(0,n.jsx)(zn,{row:l})]});case"chat":return(0,n.jsx)("td",{className:"session-location-cell","data-label":m.chat,title:Dn(l),children:Ee(l)});case"tokenIn":return(0,n.jsx)("td",{className:"token-cell","data-label":m.tokenIn,children:En(l.tokenUsage?.in)});case"tokenOut":return(0,n.jsx)("td",{className:"token-cell","data-label":m.tokenOut,children:En(l.tokenUsage?.out)});case"title":return(0,n.jsx)("td",{className:"sessions-table-text-cell","data-label":m.title,title:String(l.title??""),children:ue(l.title??"").slice(0,48)});case"workingDir":return(0,n.jsx)("td",{className:"sessions-table-path-cell","data-label":m.workingDir,title:l.workingDir??"",children:String(l.workingDir??"").slice(-34)});case"spawnedAt":return(0,n.jsx)("td",{"data-label":m.spawnedAt,children:Ne(l.spawnedAt)});case"lastMessageAt":return(0,n.jsx)("td",{"data-label":m.lastMessageAt,children:Ne(l.lastMessageAt)});case"adopt":return(0,n.jsx)("td",{"data-label":m.adopt,children:l.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null});default:return null}}return(0,n.jsxs)("table",{id:"sessions-table",hidden:e.hidden,children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:(0,n.jsx)("input",{ref:t,type:"checkbox",id:"select-all",title:o("sessions.activeOnly"),checked:e.selectAllChecked,disabled:e.selectAllDisabled,onChange:l=>e.onSelectAll(l.currentTarget.checked)})}),a.map(l=>(0,n.jsx)(co,{sort:l.id,label:l.label,sortKey:e.sortKey,sortDir:e.sortDir,onSort:e.onSort},l.id)),(0,n.jsx)("th",{className:"session-table-columns-th",children:(0,n.jsxs)("details",{className:"session-table-columns-menu",children:[(0,n.jsxs)("summary",{title:o("sessions.columns"),children:[(0,n.jsx)("span",{className:"session-table-columns-icon","aria-hidden":"true",children:(0,n.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M2 4h12M2 8h12M2 12h12"})})}),o("sessions.columns")]}),(0,n.jsxs)("div",{className:"session-table-columns-dropdown",role:"menu",children:[(0,n.jsxs)("div",{className:"session-table-columns-header",children:[(0,n.jsx)("span",{children:o("sessions.columnsMenu")}),(0,n.jsx)("button",{type:"button",className:"session-table-columns-reset",onClick:e.onResetColumns,children:o("sessions.columnsReset")})]}),s.map(l=>(0,n.jsxs)("label",{className:"session-table-columns-item",children:[(0,n.jsx)("input",{type:"checkbox",checked:!e.hiddenColumns.has(l.id),onChange:()=>e.onToggleColumn(l.id)}),l.label]},l.id))]})]})})]})}),(0,n.jsx)("tbody",{children:e.rows.length?e.rows.map(l=>{let g=l.status==="closed",C=String(l.sessionId);return(0,n.jsxs)("tr",{"data-id":C,onClick:()=>e.onOpen(l),children:[(0,n.jsx)("td",{className:"sessions-table-select-cell","data-label":m.select,onClick:w=>w.stopPropagation(),children:(0,n.jsx)("input",{type:"checkbox",className:"row-select",checked:e.selected.has(C),disabled:g,onChange:w=>e.onSelect(C,w.currentTarget.checked)})}),a.map(w=>(0,n.jsx)(c.Fragment,{children:p(l,w.id)},w.id)),(0,n.jsx)("td",{className:"sessions-table-action-cell","data-label":m.actions,children:(0,n.jsx)("button",{className:"open",type:"button",children:o("sessions.details")})})]},C)}):(0,n.jsx)("tr",{children:(0,n.jsx)("td",{colSpan:r,className:"empty",children:o("sessions.empty")})})})]})}function vo(e){let{exchange:t}=e,s=(0,c.useRef)(null),a=(0,c.useRef)(null),r=(0,c.useRef)(null),[m,p]=(0,c.useReducer)(Bt,At),l=m.open,[g,C]=(0,c.useState)(null),w=`session-exchange-tooltip-${(0,c.useId)().replace(/[^a-zA-Z0-9_-]/g,"-")}`,S=(0,c.useCallback)(()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},[]),B=(0,c.useCallback)(()=>{S(),p("open")},[S]),A=(0,c.useCallback)(()=>{S(),p("close"),C(null)},[S]),N=(0,c.useCallback)(()=>{S(),r.current=window.setTimeout(A,120)},[S,A]),x=(0,c.useCallback)(()=>{let M=s.current,_=a.current;if(!M||!_)return;let U=M.getBoundingClientRect(),j=_.getBoundingClientRect(),O=12,q=9,F=U.top-O-q,se=window.innerHeight-U.bottom-O-q,P=F>=j.height||F>se?"top":"bottom",pe=U.left+U.width/2-j.width/2,Y=Math.min(Math.max(pe,O),Math.max(O,window.innerWidth-j.width-O)),fe=P==="top"?U.top-j.height-q:U.bottom+q,oe=Math.min(Math.max(fe,O),Math.max(O,window.innerHeight-j.height-O));C({left:Y,placement:P,top:oe})},[]);return(0,c.useLayoutEffect)(()=>{if(l)return x(),window.addEventListener("resize",x),window.addEventListener("scroll",x,!0),()=>{window.removeEventListener("resize",x),window.removeEventListener("scroll",x,!0)}},[t.botFullText,t.userFullText,l,x]),(0,c.useEffect)(()=>()=>S(),[S]),(0,c.useEffect)(()=>{if(!l)return;let M=U=>{let j=U.target;j instanceof Node&&(s.current?.contains(j)||a.current?.contains(j)||A())},_=U=>{U.key==="Escape"&&A()};return document.addEventListener("pointerdown",M),document.addEventListener("keydown",_),()=>{document.removeEventListener("pointerdown",M),document.removeEventListener("keydown",_)}},[A,l]),!t.userText&&!t.botText?null:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"session-card-exchange-wrap",children:(0,n.jsxs)("div",{ref:s,className:"session-card-exchange",role:"button",tabIndex:0,"aria-label":o("sessions.preview.showFull"),"aria-haspopup":"dialog","aria-controls":l?w:void 0,"aria-expanded":l,onClick:M=>{M.stopPropagation(),l?A():B()},onFocus:()=>{S(),p("focus")},onBlur:N,onPointerEnter:M=>{M.pointerType!=="touch"&&B()},onPointerLeave:M=>{M.pointerType!=="touch"&&N()},onKeyDown:M=>{M.key==="Escape"?A():(M.key==="Enter"||M.key===" ")&&(M.preventDefault(),l?A():B())},children:[t.userText?(0,n.jsxs)("div",{className:"session-card-exchange-line",children:[(0,n.jsx)("span",{children:o("sessions.history.user")}),(0,n.jsx)("p",{children:t.userText})]}):null,t.botText?(0,n.jsxs)("div",{className:"session-card-exchange-line bot",children:[(0,n.jsx)("span",{children:o("sessions.history.bot")}),(0,n.jsx)("p",{children:t.botText})]}):null]})}),l&&typeof document<"u"?(0,un.createPortal)((0,n.jsx)("div",{ref:a,id:w,className:"session-card-exchange-tooltip",role:"dialog","aria-label":o("sessions.preview.latestExchange"),"data-placement":g?.placement??"top",style:{left:g?.left??-1e4,top:g?.top??-1e4,visibility:g?"visible":"hidden"},onPointerEnter:S,onPointerLeave:M=>{M.pointerType!=="touch"&&N()},onFocusCapture:S,onBlur:M=>{let _=M.relatedTarget;_&&(a.current?.contains(_)||s.current?.contains(_))||N()},onKeyDown:M=>{M.key==="Escape"&&(M.stopPropagation(),S(),p("escape-refocus"),C(null),s.current?.focus())},children:(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-scroll",children:[t.userFullText?(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-line",children:[(0,n.jsx)("span",{children:o("sessions.history.user")}),(0,n.jsx)("div",{className:"session-card-exchange-md",dangerouslySetInnerHTML:le(Hn(t.userFullText))})]}):null,t.botFullText?(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-line bot",children:[(0,n.jsx)("span",{children:o("sessions.history.bot")}),(0,n.jsx)("div",{className:"session-card-exchange-md",dangerouslySetInnerHTML:le(Hn(t.botFullText))})]}):null]})}),document.body):null]})}function cs(e){let t=e.row,s=ue(t.title)||t.sessionId,a=de(t),r=Me(t),m=Ge(t),p=uo(t),l=An(t.workingDir),g=Lt(t),C=w=>{w.target.closest("a, button, input, label")||e.onToggleSelect(t)};return(0,n.jsxs)("article",{className:`session-card${e.selected?" selected":""}${t.locked?" locked":""}`,"data-id":t.sessionId,"aria-pressed":e.selected,onClick:C,children:[(0,n.jsxs)("div",{className:"session-card-top",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:le(xe({name:a,larkAppId:t.larkAppId,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-card-title",children:[(0,n.jsx)("strong",{title:String(t.title??s),children:String(s).slice(0,72)}),(0,n.jsxs)("span",{children:[a," \xB7 ",r??t.cliId??"unknown"]})]}),(0,n.jsxs)("span",{className:"session-card-status-group",children:[(0,n.jsx)(mn,{status:t.status}),(0,n.jsx)(zn,{row:t})]})]}),l!=="-"||t.adopt||p?(0,n.jsxs)("div",{className:"session-card-meta",children:[l!=="-"?(0,n.jsx)("span",{title:t.workingDir??"",children:l}):null,t.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null,p?(0,n.jsx)("span",{className:"session-signal",title:p,children:p}):null]}):null,(0,n.jsx)(vo,{exchange:g}),(0,n.jsx)("div",{className:"session-card-time",children:(0,n.jsx)("span",{children:t.agentAttention?.at?`${o("sessions.board.waiting")} ${Ne(nn(t))}`:`${o("sessions.last")}: ${Ne(t.lastMessageAt)}`})}),(0,n.jsxs)("div",{className:"session-card-actions",children:[(0,n.jsx)(ls,{row:t}),!t.feishuChatLink||t.scope!=="chat"?(0,n.jsx)(bo,{row:t,onLocate:e.onLocate}):null,(0,n.jsx)(we,{action:"details",icon:z.details,label:o("sessions.details"),onClick:()=>e.onOpen(t)}),cn(t)?(0,n.jsx)(we,{action:"restart",icon:z.restart,label:o("sessions.restart"),onClick:w=>e.onRestart(t,w)}):null,(0,n.jsx)(rs,{row:t,url:m}),t.status!=="closed"?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(we,{action:"lock",icon:t.locked?z.unlock:z.lock,label:ln(t),kind:t.locked?"locked":"",onClick:w=>e.onLock(t,!t.locked,w)}),(0,n.jsx)(we,{action:"close",icon:z.close,label:o("sessions.close"),kind:"danger",onClick:w=>e.onClose(t,w)})]}):null]})]})}function So(e){(0,c.useEffect)(()=>{!e.hidden&&!e.animated&&e.onAnimated()},[e.animated,e.hidden,e.onAnimated]);let t=new Map(Rn.map(a=>[a.id,[]]));for(let a of e.rows){let r=Kt(a);r&&t.get(r).push(a)}let s=e.order.map(a=>Rn.find(r=>r.id===a)).filter(a=>!!a);return(0,n.jsx)("div",{id:"sessions-board",className:`sessions-board${e.animated||e.hidden?"":" board-enter"}`,hidden:e.hidden,children:s.map((a,r)=>{let m=(t.get(a.id)??[]).sort((p,l)=>mo(p,l,a.id));return(0,n.jsxs)("section",{className:`session-board-column session-board-${a.id}${e.dragColId===a.id?" dragging":""}${e.dragOverCol===a.id?" drag-over":""}`,"data-col":a.id,onDragOver:p=>{e.dragColId&&(p.preventDefault(),p.dataTransfer&&(p.dataTransfer.dropEffect="move"),e.dragColId!==a.id&&e.onDragOverCol(a.id))},onDrop:p=>{e.dragColId&&(p.preventDefault(),e.onMoveColumnTo(e.dragColId,a.id),e.onDragCol(null),e.onDragOverCol(null))},children:[(0,n.jsxs)("header",{draggable:!0,title:o("sessions.board.dragHint"),onDragStart:p=>{e.onDragCol(a.id),p.dataTransfer&&(p.dataTransfer.effectAllowed="move",p.dataTransfer.setData("text/plain",a.id))},onDragEnd:()=>{e.onDragCol(null),e.onDragOverCol(null)},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{children:o(a.labelKey)}),(0,n.jsx)("p",{children:o(a.hintKey)})]}),(0,n.jsxs)("span",{className:"session-board-head-right",children:[(0,n.jsxs)("span",{className:"session-board-move",children:[(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"-1","aria-label":o("sessions.board.moveLeft"),disabled:r===0,onClick:()=>e.onMoveColumn(a.id,-1),children:"\u2039"}),(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"1","aria-label":o("sessions.board.moveRight"),disabled:r===s.length-1,onClick:()=>e.onMoveColumn(a.id,1),children:"\u203A"})]}),(0,n.jsx)("span",{className:"session-board-count",children:m.length})]})]}),(0,n.jsx)("div",{className:"session-board-list",children:m.length?m.map(p=>(0,n.jsx)(cs,{row:p,selected:e.selected.has(p.sessionId),onToggleSelect:e.onToggleSelect,onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},p.sessionId)):(0,n.jsx)("div",{className:"session-board-empty",children:o("sessions.board.emptyColumn")})})]},a.id)})})}function To(e){let t=ue(e.title).trim();return t||(e.kind==="thread"?o("sessions.topic.untitled"):e.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession"))}function Io(e){let t=(0,c.useMemo)(()=>an(e.rows),[e.rows]),s=(0,c.useMemo)(()=>new Map(an(e.relationRows??e.rows).map(a=>[a.key,a])),[e.relationRows,e.rows]);return(0,n.jsx)("div",{id:"sessions-topics",className:"sessions-topic-view",hidden:e.hidden,children:t.length?t.map(a=>{let r=s.get(a.key)??a,m=a.rows[0],p=Ee(m),l=To(r),g=r.rootMessageId||r.chatId;return(0,n.jsxs)("section",{className:`session-topic-group${r.multiBot?" multi-bot":""}${r.inferredBotTriggered?" inferred-bot-trigger":""}`,"data-topic-key":a.key,children:[(0,n.jsxs)("header",{children:[(0,n.jsx)("span",{className:"session-topic-avatar",dangerouslySetInnerHTML:le(en({chatId:a.chatId,name:p,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-topic-heading",children:[(0,n.jsx)("span",{className:"session-topic-location",children:p}),(0,n.jsx)("h2",{title:r.title,children:l}),(0,n.jsx)("code",{title:g,children:r.kind==="thread"?g:r.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession")})]}),(0,n.jsxs)("div",{className:"session-topic-summary","aria-label":o("sessions.topic.summary"),children:[r.multiBot?(0,n.jsx)("span",{className:"topic-chip collaboration",children:o("sessions.topic.collaboration")}):null,(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.sessions",{count:r.rows.length})}),(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.bots",{count:r.botCount})}),(0,n.jsx)("span",{className:"topic-chip active",children:o("sessions.topic.active",{count:r.activeCount})}),r.closedCount?(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.closed",{count:r.closedCount})}):null,r.inferredBotInputCount?(0,n.jsx)("span",{className:"topic-chip inferred",title:o("sessions.topic.inferredHint"),children:o("sessions.topic.botInputs",{count:r.inferredBotInputCount})}):null,(0,n.jsxs)("span",{className:"session-topic-updated",children:[o("sessions.last"),": ",Ne(r.latestActivityAt)]})]})]}),(0,n.jsx)("div",{className:"session-topic-members",children:a.rows.map(C=>(0,n.jsx)(cs,{row:C,selected:e.selected.has(C.sessionId),onToggleSelect:w=>{w.status!=="closed"?e.onToggleSelect(w):e.onOpen(w)},onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},C.sessionId))})]},a.key)}):(0,n.jsx)("div",{className:"sessions-topic-empty",children:o("sessions.topic.empty")})})}function No(e){let t=e.message,s=t.senderType==="user",a=t.senderType==="app"||t.senderType==="bot",r=s?t.senderName||(e.ownerOpenId&&t.senderId===e.ownerOpenId?o("sessions.history.owner"):o("sessions.history.user")):t.senderName||String(t.senderId??"").slice(0,16)||o(a?"sessions.history.bot":"sessions.history.system"),m=String(t.content??"").trim()||`[${t.msgType??"message"}]`;return(0,n.jsxs)("div",{className:`history-msg${e.groupStart?" group-start":" continuation"}`,children:[e.groupStart?s?t.senderAvatar?(0,n.jsx)("img",{className:"history-avatar-img",src:String(t.senderAvatar),alt:"",decoding:"async",referrerPolicy:"no-referrer"}):(0,n.jsx)("span",{className:"history-avatar-user","aria-hidden":"true",children:String(r).slice(0,1)}):(0,n.jsx)("span",{className:"history-avatar-bot",dangerouslySetInnerHTML:le(xe({name:r,larkAppId:t.senderBotAppId,avatarUrl:t.senderAvatar,size:"sm"}))}):(0,n.jsx)("span",{className:"history-avatar-spacer","aria-hidden":"true"}),(0,n.jsxs)("div",{className:"history-msg-main",children:[e.groupStart?(0,n.jsxs)("div",{className:"history-msg-meta",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)("time",{children:go(t.createTime)})]}):null,(0,n.jsx)("div",{className:"history-bubble",children:m})]})]})}function xo(e){let t=(0,c.useRef)(null);Jn(t,!!e.state);let s=e.state?Ae.sessions.get(e.state.sessionId):null,a=(0,c.useRef)(null),r=!!e.state&&!e.state.loading&&!e.state.error&&e.state.messages.length>0;return(0,c.useEffect)(()=>{if(!r)return;let m=a.current;m&&(m.scrollTop=m.scrollHeight)},[r,e.state?.sessionId,e.state?.messages.length]),(0,n.jsx)("dialog",{id:"history-modal",className:"history-modal",ref:t,onClose:e.onClose,onClick:m=>{m.target===m.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:le(xe({name:de(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsx)("strong",{title:String(s.title??""),children:(ue(s.title)||s.sessionId).slice(0,60)}),(0,n.jsx)("span",{className:"history-scope-tag",children:o("sessions.history.title")})]}),(0,n.jsx)("span",{className:"term-modal-actions",children:(0,n.jsx)(we,{id:"history-close",icon:z.close,label:o("sessions.dismiss"),onClick:e.onClose})})]}),(0,n.jsxs)("div",{className:"history-body",ref:a,children:[e.state.loading?(0,n.jsx)(De,{label:o("sessions.history.loading"),className:"term-modal-loading",compact:!0}):null,!e.state.loading&&e.state.error?(0,n.jsxs)("div",{className:"history-error",children:[o("sessions.history.fail"),": ",e.state.error,e.state.stale?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("span",{children:o("sessions.history.staleHint")})]}):null]}):null,!e.state.loading&&!e.state.error&&e.state.messages.length===0?(0,n.jsx)("div",{className:"history-error",children:o("sessions.history.empty")}):null,!e.state.loading&&!e.state.error&&e.state.messages.length>0?(0,n.jsx)("div",{className:"history-list",children:e.state.messages.map((m,p,l)=>(0,n.jsx)(No,{message:m,ownerOpenId:e.state?.ownerOpenId,groupStart:p===0||$n(l[p-1])!==$n(m)},m.messageId??p))}):null]})]}):null})}function Mo(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(""),m=(0,c.useRef)(null),p=ue(e.row.title)||e.row.sessionId;(0,c.useLayoutEffect)(()=>{if(!t||!m.current)return;let g=m.current;g.focus(),g.select(),(()=>{let w=getComputedStyle(g),S=document.createElement("span");S.style.cssText="position:absolute;visibility:hidden;white-space:pre",S.style.fontSize=w.fontSize,S.style.fontFamily=w.fontFamily,S.style.fontWeight=w.fontWeight,S.style.letterSpacing=w.letterSpacing,S.textContent=g.value||" ",document.body.appendChild(S);let B=Math.round(window.innerWidth*.6);g.style.width=`${Math.min(Math.max(S.offsetWidth+22,80),B)}px`,S.remove()})()},[t,a]);let l=g=>{let C=a.trim();s(!1),g&&C&&C!==p&&e.onRename(e.row,C)};return t?(0,n.jsx)("input",{ref:m,type:"text",className:"term-modal-name-input",maxLength:200,value:a,onChange:g=>r(g.currentTarget.value),onBlur:()=>l(!0),onKeyDown:g=>{g.stopPropagation(),g.key==="Enter"?(g.preventDefault(),l(!0)):g.key==="Escape"&&(g.preventDefault(),l(!1))}}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("strong",{className:"term-modal-name",title:String(e.row.title??p),children:String(p).slice(0,60)}),(0,n.jsx)(we,{id:"term-modal-edit",icon:z.edit,label:o("sessions.kanban.rename"),onClick:()=>{r(ue(e.row.title)||""),s(!0)}})]})}function Eo(e){let t=(0,c.useRef)(null);Jn(t,!!e.state);let s=e.state?Ae.sessions.get(e.state.sessionId):null,a=s?Ge(s):null,r=e.state?.url??a??"",m=s?String(s.cliId??"unknown"):"",p=s?An(s.workingDir):"";return(0,n.jsx)("dialog",{id:"term-modal",className:"term-modal",ref:t,onClose:e.onClose,onClick:l=>{l.target===l.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:le(xe({name:de(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsxs)("span",{className:"term-modal-title-copy",children:[(0,n.jsxs)("span",{className:"term-modal-title-main",children:[(0,n.jsx)(Mo,{row:s,onRename:e.onRename}),(0,n.jsx)(mn,{status:s.status})]}),(0,n.jsxs)("span",{className:"term-modal-subtitle",children:[(0,n.jsx)("span",{children:de(s)}),(0,n.jsx)("span",{children:m}),p!=="-"?(0,n.jsx)("span",{title:s.workingDir??"",children:p}):null]})]})]}),(0,n.jsxs)("span",{className:"term-modal-actions",children:[s.feishuChatLink?(0,n.jsx)("a",{className:"card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener",title:o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),dangerouslySetInnerHTML:le(z.feishu)}):null,(0,n.jsx)("a",{id:"term-modal-tab",className:"card-act",href:r,target:"_blank",rel:"noopener",title:o("sessions.kanban.openTab"),"aria-label":o("sessions.kanban.openTab"),dangerouslySetInnerHTML:le(z.terminal)}),(0,n.jsx)(we,{id:"term-modal-close",icon:z.close,label:o("sessions.dismiss"),onClick:e.onClose})]})]}),(0,n.jsx)("div",{className:"term-modal-body",children:(0,n.jsx)("div",{className:"term-modal-frame-shell",children:e.state.loading?(0,n.jsx)(De,{label:o("sessions.kanban.terminalLoading"),className:"term-modal-loading",compact:!0}):(0,n.jsx)("iframe",{className:"term-modal-frame",src:r,allow:"clipboard-read; clipboard-write"})})})]}):null})}function Ro(e){let t=e.report;if(!t||t.status!=="ok"){let g=t?.error?.message?String(t.error.message):String(t?.status??"error");return(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",g]})}let s=t.agg??{};if(!s.totalSpans)return(0,n.jsx)("p",{children:o("sessions.insightEmpty")});let a=[t.meta?.asOf?o("sessions.insightAsOf",{asOf:String(t.meta.asOf)}):null,t.meta?.partial?o("sessions.insightPartial"):null].filter(Boolean),r=Array.isArray(t.suggestions)?t.suggestions:[],m=Array.isArray(t.spans)?t.spans:[],p=g=>g==="bad"||g==="warn"?"!":"i",l=g=>g==="error"?"!":g==="running"?"...":"ok";return(0,n.jsxs)(n.Fragment,{children:[a.length?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:a.join(" \xB7 ")}):null,(0,n.jsx)("p",{children:o("sessions.insightMetrics",{total:String(s.totalSpans??0),failed:String(s.failedSpans??0),slow:String(s.slowSpans??0),rw:s.readWriteRatio===null||s.readWriteRatio===void 0?"-":String(s.readWriteRatio),compactions:String(s.compactions??0)})}),r.length?(0,n.jsxs)("details",{open:!0,children:[(0,n.jsx)("summary",{children:o("sessions.insightSuggestions")}),(0,n.jsx)("ul",{style:{paddingLeft:18,margin:"6px 0"},children:r.map((g,C)=>(0,n.jsxs)("li",{children:[p(String(g.severity??""))," ",(0,n.jsx)("b",{children:String(g.title??"")})," - ",String(g.action??""),Array.isArray(g.evidence)&&g.evidence.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("small",{style:{color:"var(--muted,#8f959e)"},children:g.evidence.join("; ")})]}):null]},C))})]}):null,m.length?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{children:[o("sessions.insightSpans")," (",m.length,")"]}),t.meta?.capped?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:o("sessions.insightCapped",{shown:String(t.meta.spansReturned??m.length),total:String(t.meta.spansTotal??m.length)})}):null,(0,n.jsx)("div",{style:{maxHeight:320,overflow:"auto"},children:(0,n.jsx)("table",{style:{width:"100%",fontSize:12},children:(0,n.jsx)("tbody",{children:[...m].sort((g,C)=>(g.relStartMs??0)-(C.relStartMs??0)).map((g,C)=>{let w=[g.inputSummary,g.outputSummary].filter(Boolean).map(String).join(" -> ");return(0,n.jsxs)("tr",{style:g.status==="error"?{color:"var(--danger,#d33)"}:void 0,children:[(0,n.jsx)("td",{children:l(String(g.status??""))}),(0,n.jsx)("td",{children:(0,n.jsx)("code",{children:String(g.tool??"")})}),(0,n.jsx)("td",{children:String(g.phase??"")}),(0,n.jsx)("td",{children:po(g.durationMs)}),(0,n.jsxs)("td",{children:["#",String(g.turnIndex??0)]}),(0,n.jsx)("td",{children:w})]},C)})})})})]}):null]})}function Lo(e){let[t,s]=(0,c.useState)(null);if((0,c.useEffect)(()=>s(null),[e.row.sessionId]),!Ie.authed)return null;let a=async()=>{s({loading:!0});try{let r=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/insight?detail=spans`),m=await r.json().catch(()=>({}));!m.ok||!m.report?s({loading:!1,error:String(m.error??r.status)}):s({loading:!1,report:m.report})}catch(r){s({loading:!1,error:String(r)})}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"insight-btn",type:"button",disabled:t?.loading,onClick:()=>{a()},children:o("sessions.insight")}),(0,n.jsxs)("div",{id:"insight-area",children:[t?.loading?(0,n.jsx)(De,{label:o("sessions.insightLoading"),compact:!0}):null,t?.error?(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",t.error]}):null,t?.report?(0,n.jsx)(Ro,{report:t.report}):null]})]})}function Ao(e){let t=(0,c.useRef)(null);Jn(t,!!e.row);let s=e.row,a=s?Ge(s):null;return(0,n.jsx)("dialog",{id:"drawer",ref:t,onClose:e.onClose,onClick:r=>{r.target===r.currentTarget&&e.onClose()},children:s?(0,n.jsxs)("article",{children:[(0,n.jsxs)("header",{children:[(0,n.jsxs)("div",{className:"drawer-title-row",children:[(0,n.jsx)("h3",{children:ue(s.title)||s.sessionId}),(0,n.jsx)(we,{id:"drawer-close",className:"card-act drawer-close-btn",icon:z.close,label:o("sessions.dismiss"),onClick:e.onClose})]}),(0,n.jsxs)("span",{className:"drawer-status-line",children:[(0,n.jsx)(mn,{status:s.status}),(0,n.jsx)(zn,{row:s})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:s.sessionId})," ",(0,n.jsx)(jn,{value:s.sessionId})]})]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.bot"),":"]})," ",de(s)," \xB7 ",(0,n.jsxs)("b",{children:[o("sessions.cli"),":"]})," ",s.cliId??"?"]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.location"),":"]})," ",Ee(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"chatId:"})," ",(0,n.jsx)("code",{children:s.chatId??""})," ",(0,n.jsx)(jn,{value:s.chatId??""})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"rootMessageId:"})," ",(0,n.jsx)("code",{children:s.rootMessageId??""})," ",(0,n.jsx)(jn,{value:s.rootMessageId??""})]}),s.threadId?(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"threadId:"})," ",(0,n.jsx)("code",{children:s.threadId})]}):null,(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.workingDir"),":"]})," ",s.workingDir??"-"]}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)(ls,{row:s}),!s.feishuChatLink||s.scope!=="chat"?(0,n.jsx)(fo,{row:s,locateSession:e.locateSession}):null,(0,n.jsx)("button",{id:"history-drawer-btn",type:"button",onClick:()=>e.openHistory(s),children:o("sessions.history.title")}),(0,n.jsx)(rs,{row:s,url:a}),rn()&&s.status!=="closed"?(0,n.jsx)("button",{id:"copy-cmd-btn",type:"button","data-tip":o("sessions.copyCommandHint"),onClick:r=>{Ht(s,r.currentTarget)},children:o("sessions.copyCommand")}):null,cn(s)?(0,n.jsx)("button",{id:"restart-btn",type:"button",onClick:async r=>{await e.restartSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.restart")}):null,(0,n.jsx)("button",{id:"lock-btn",type:"button",onClick:r=>{e.setSessionLocked(s,!s.locked,r.currentTarget)},children:ln(s)}),s.queued&&s.status!=="closed"?(0,n.jsx)("button",{id:"start-btn",type:"button",className:"primary",onClick:async r=>{await e.startSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.create.start")}):null,s.status==="closed"?(0,n.jsx)("button",{id:"resume-btn",type:"button",className:"primary",onClick:async r=>{await e.resumeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.resume")}):null,s.status!=="closed"?(0,n.jsx)("button",{id:"close-btn",type:"button",className:"contrast",onClick:async r=>{await e.closeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.close")}):null,(0,n.jsx)(Lo,{row:s})]})]}):null})}function Bo(e){let t=e.state;(0,c.useEffect)(()=>{let f=e.dialog;return()=>{f.open&&f.close()}},[e.dialog]),(0,c.useEffect)(()=>{let f=e.dialog;if(t){if(!f.open)try{f.showModal()}catch{}}else f.open&&f.close()},[e.dialog,t]),(0,c.useEffect)(()=>{let f=e.dialog,L=()=>e.onClose(),R=D=>{D.target===f&&e.onClose()};return f.addEventListener("close",L),f.addEventListener("click",R),()=>{f.removeEventListener("close",L),f.removeEventListener("click",R)}},[e]);let[s,a]=(0,c.useState)(""),[r,m]=(0,c.useState)([]),[p,l]=(0,c.useState)(new Set),[g,C]=(0,c.useState)("lead"),[w,S]=(0,c.useState)(""),[B,A]=(0,c.useState)("in_progress"),[N,x]=(0,c.useState)(""),[M,_]=(0,c.useState)(""),[U,j]=(0,c.useState)(!1),[O,q]=(0,c.useState)(!1),[F,se]=(0,c.useState)(""),[P,pe]=(0,c.useState)(()=>ut(te())),[Y,fe]=(0,c.useState)(null),[oe,ce]=(0,c.useState)(null),[W,Ce]=(0,c.useState)(0),be=(0,c.useRef)(null),T=(0,c.useRef)(1);if((0,c.useEffect)(()=>{t&&(a(""),m([]),l(new Set),C("lead"),S(""),A("in_progress"),x(""),_(""),j(!1),q(!1),se(""),fe(null),ce(null),Ce(0),T.current=1)},[t]),!t)return null;if(t.success){let f=t.success,L=typeof f.shareLink=="string"&&f.shareLink?f.shareLink:"",R=Array.isArray(f.failed)?f.failed.length:0,D=Array.isArray(f.spawned)?f.spawned.length:0,K=f.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress");return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.doneTitle")})}),(0,n.jsxs)("p",{children:[K,"\uFF08",D,"\uFF09"]}),R>0?(0,n.jsx)("p",{className:"cs-warn",children:o("sessions.create.partialFail",{n:String(R)})}):null,L?(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:L,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")})}):null,(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",id:"cs-done",className:"primary",onClick:e.onClose,children:o("sessions.create.close")})})]})}if(t.loading)return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsx)(De,{label:o("common.loading"),className:"cs-loading",compact:!0}),(0,n.jsx)("div",{className:"actions cs-actions",children:(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")})})]});let v=t.bots,H=[...p],ae=H,ee=f=>v.find(L=>L.larkAppId===f)?.botName??f,ie=F.trim().toLowerCase(),G=ie?v.filter(f=>f.botName.toLowerCase().includes(ie)||f.larkAppId.toLowerCase().includes(ie)):v,X=oe?zt(v,oe.query).slice(0,8):[],re=f=>{if(!oe)return;let L=jt(s,oe,f.botName);a(L.text),ce(null),Ce(0),l(R=>new Set(R).add(f.larkAppId)),S(R=>R||f.larkAppId),requestAnimationFrame(()=>{let R=be.current;R&&(R.focus(),R.setSelectionRange(L.caret,L.caret))})},ve=f=>{if(!(!oe||X.length===0)){if(f.key==="ArrowDown"||f.key==="ArrowUp"){f.preventDefault();let L=f.key==="ArrowDown"?1:-1;Ce(R=>(R+L+X.length)%X.length);return}if(f.key==="Enter"||f.key==="Tab"){f.preventDefault(),re(X[Math.min(W,X.length-1)]);return}f.key==="Escape"&&(f.preventDefault(),ce(null))}},$e=async f=>{let L=[...f.clipboardData.files].filter(Z=>Z.type.startsWith("image/"));if(L.length===0)return;f.preventDefault();let R=f.currentTarget.selectionStart??s.length,D=f.currentTarget.selectionEnd??R,K=L.filter(Z=>so.has(Z.type.toLowerCase()));if(K.length!==L.length){alert(o("sessions.create.imageUnsupported"));return}if(r.length+K.length>os){alert(o("sessions.create.imageCountLimit",{n:String(os)}));return}if(K.some(Z=>Z.size>oo)){alert(o("sessions.create.imageSizeLimit"));return}if(r.reduce((Z,J)=>Z+J.size,0)+K.reduce((Z,J)=>Z+J.size,0)>ao){alert(o("sessions.create.imageTotalLimit"));return}try{let Z=T.current,J=await Promise.all(K.map(async(ne,Fe)=>{let Se=await io(ne),Ue=Se.indexOf(",");if(Ue<0)throw new Error("bad_image_data");let ke=Z+Fe;return{id:`${Date.now()}-${Fe}-${Math.random().toString(36).slice(2)}`,ordinal:ke,marker:`[${o("sessions.create.imageMarker",{n:String(ke)})}]`,name:ne.name||`pasted-image-${r.length+Fe+1}`,mimeType:ne.type.toLowerCase(),size:ne.size,dataBase64:Se.slice(Ue+1),previewUrl:Se}}));T.current+=J.length;let Re=Jt(s,R,D,J.map(ne=>ne.marker));a(Re.text),m(ne=>[...ne,...J]),ce(null),requestAnimationFrame(()=>{let ne=be.current;ne&&(ne.focus(),ne.setSelectionRange(Re.caret,Re.caret))})}catch{alert(o("sessions.create.imageReadFailed"))}},_e=async f=>{f.preventDefault();let L=s.trim();if(!L){alert(o("sessions.create.errContent"));return}if(H.length===0){alert(o("sessions.create.errNoBot"));return}let R=w||H[0]||"";if(g==="lead"&&(!R||!H.includes(R))){alert(o("sessions.create.errLead"));return}q(!0),fe(null);try{let D=await fetch("/api/sessions/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({content:L,larkAppIds:H,mode:g,column:B,leadLarkAppId:g==="lead"?R:void 0,name:N.trim()||void 0,bindWorkingDir:M.trim()||void 0,images:r.map(he=>({name:he.name,mimeType:he.mimeType,dataBase64:he.dataBase64}))})}),K=await D.json().catch(()=>null);D.ok&&K?.ok?P?(fe(K),a(""),m([]),T.current=1,x("")):e.onSuccess(K):D.status!==401&&alert(`${o("sessions.create.failed")}: ${K?.error??D.status}`)}catch(D){alert(`${o("sessions.create.failed")}: ${D}`)}finally{q(!1)}};return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsxs)("form",{id:"cs-form",onSubmit:_e,children:[(0,n.jsxs)("fieldset",{className:"cs-content",children:[(0,n.jsx)("legend",{children:o("sessions.create.content")}),(0,n.jsxs)("div",{className:"cs-composer",children:[(0,n.jsx)("textarea",{ref:be,name:"content",rows:5,placeholder:o("sessions.create.contentPlaceholder"),"aria-describedby":"cs-content-help",required:!0,value:s,onChange:f=>{let L=f.currentTarget,R=L.value;a(R),ce(Kn(R,L.selectionStart??R.length)),Ce(0)},onClick:f=>ce(Kn(s,f.currentTarget.selectionStart??s.length)),onKeyDown:ve,onPaste:f=>{$e(f)},onBlur:()=>setTimeout(()=>ce(null),0)}),oe?(0,n.jsx)("div",{className:"cs-mention-menu",role:"listbox","aria-label":o("sessions.create.mentionBots"),children:X.length?X.map((f,L)=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":L===W,className:L===W?"active":void 0,onMouseDown:R=>R.preventDefault(),onClick:()=>re(f),children:[(0,n.jsxs)("strong",{children:["@",f.botName]}),(0,n.jsx)("small",{children:f.larkAppId})]},f.larkAppId)):(0,n.jsx)("p",{children:o("sessions.create.noBotMatch")})}):null]}),(0,n.jsx)("small",{id:"cs-content-help",children:o("sessions.create.contentHelp")}),r.length?(0,n.jsx)("div",{className:"cs-image-list","aria-label":o("sessions.create.pastedImages"),children:r.map(f=>(0,n.jsxs)("figure",{className:"cs-image-item",children:[(0,n.jsx)("img",{src:f.previewUrl,alt:f.name}),(0,n.jsxs)("figcaption",{title:`${f.marker} ${f.name}`,children:[(0,n.jsx)("strong",{children:f.marker}),(0,n.jsx)("span",{children:f.name})]}),(0,n.jsx)("button",{type:"button",className:"cs-image-remove","aria-label":o("sessions.create.removeImage",{name:`${f.marker} ${f.name}`}),title:o("sessions.create.removeImage",{name:`${f.marker} ${f.name}`}),onClick:()=>{let L=r.filter(D=>D.id!==f.id),R=Wt(s,f.marker,L.map(D=>D.marker),D=>`[${o("sessions.create.imageMarker",{n:String(D+1)})}]`);a(R.text),m(L.map((D,K)=>({...D,ordinal:K+1,marker:R.markers[K]}))),T.current=L.length+1},children:(0,n.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M7 7l10 10M17 7 7 17"})})})]},f.id))}):null]}),(0,n.jsxs)("fieldset",{className:"cs-bots",children:[(0,n.jsx)("legend",{children:o("sessions.create.bots")}),v.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("input",{className:"cs-bot-search",type:"search",name:"botSearch",placeholder:o("sessions.create.botSearchPlaceholder"),"aria-label":o("sessions.create.botSearchPlaceholder"),value:F,onChange:f=>se(f.currentTarget.value)}),G.length?(0,n.jsx)("div",{className:"cs-bot-list",children:G.map(f=>(0,n.jsxs)("label",{className:"cs-bot",children:[(0,n.jsx)("input",{type:"checkbox",name:"bot",value:f.larkAppId,checked:p.has(f.larkAppId),onChange:L=>{let R=L.currentTarget.checked;l(D=>{let K=new Set(D);return R?K.add(f.larkAppId):K.delete(f.larkAppId),K.has(w)||S(K.values().next().value??""),K})}})," ",(0,n.jsx)("span",{children:f.botName})]},f.larkAppId))}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBotMatch")}),H.length?(0,n.jsx)("small",{children:o("sessions.create.selectedCount",{n:String(H.length)})}):null]}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBots")})]}),(0,n.jsxs)("fieldset",{className:"cs-mode",children:[(0,n.jsx)("legend",{children:o("sessions.create.mode")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"lead",checked:g==="lead",onChange:()=>C("lead")})," ",o("sessions.create.modeLead")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"all",checked:g==="all",onChange:()=>C("all")})," ",o("sessions.create.modeAll")]}),(0,n.jsx)("small",{children:o("sessions.create.modeHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-lead-row",hidden:g!=="lead",children:[(0,n.jsx)("legend",{children:o("sessions.create.lead")}),(0,n.jsx)("select",{name:"lead",disabled:ae.length===0,value:ae.includes(w)?w:"",onChange:f=>S(f.currentTarget.value),children:ae.length?ae.map(f=>(0,n.jsx)("option",{value:f,children:ee(f)},f)):(0,n.jsx)("option",{value:"",disabled:!0,children:o("sessions.create.leadPickFirst")})}),(0,n.jsx)("small",{children:o("sessions.create.leadHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-column",children:[(0,n.jsx)("legend",{children:o("sessions.create.column")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"in_progress",checked:B==="in_progress",onChange:()=>A("in_progress")})," ",o("sessions.create.columnInProgress")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"backlog",checked:B==="backlog",onChange:()=>A("backlog")})," ",o("sessions.create.columnBacklog")]}),(0,n.jsx)("small",{children:o("sessions.create.columnHelp")})]}),(0,n.jsxs)("fieldset",{className:`cs-advanced${U?" open":""}`,children:[(0,n.jsx)("legend",{children:(0,n.jsx)("button",{type:"button",id:"cs-advanced-title",className:"cs-advanced-title","aria-expanded":U,"aria-controls":"cs-advanced-fields",onClick:()=>j(f=>!f),children:o("sessions.create.optionalConfig")})}),U?(0,n.jsxs)("div",{id:"cs-advanced-fields",className:"cs-advanced-fields",children:[(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.groupName")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"name",maxLength:60,placeholder:o("sessions.create.groupNamePlaceholder"),value:N,onChange:f=>x(f.currentTarget.value)})]}),(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.workingDir")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/foo",value:M,onChange:f=>_(f.currentTarget.value)}),(0,n.jsx)("small",{children:o("sessions.create.workingDirHelp")})]})]}):null]}),Y?(0,n.jsxs)("p",{className:"cs-keep-success",role:"status",children:[(0,n.jsxs)("span",{children:[Y.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress"),Array.isArray(Y.failed)&&Y.failed.length>0?` \xB7 ${o("sessions.create.partialFail",{n:String(Y.failed.length)})}`:""]}),typeof Y.shareLink=="string"&&Y.shareLink?(0,n.jsx)("a",{href:Y.shareLink,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")}):null]}):null,(0,n.jsxs)("div",{className:"actions cs-actions",children:[(0,n.jsxs)("label",{className:"cs-keep-open",title:o("sessions.create.keepOpenHelp"),children:[(0,n.jsx)("input",{type:"checkbox",name:"keepOpen",checked:P,onChange:f=>{let L=f.currentTarget.checked;pe(L),mt(te(),L)}}),(0,n.jsx)("span",{children:o("sessions.create.keepOpen")})]}),(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")}),(0,n.jsx)("button",{type:"submit",className:"cs-submit",disabled:O||v.length===0,children:O?o("sessions.create.submitting"):o("sessions.create.submit")})]})]})]})}function Do(){kt();let e=yt(i=>[...i.sessions.values()]),[t,s]=(0,c.useState)(0),a=(0,c.useCallback)(()=>s(i=>i+1),[]),[r,m]=(0,c.useState)({q:"",status:"",adopt:"",chat:"",multiBotTopics:!1,botTriggeredTopics:!1,showUnknownChats:rt(te()),active:!0,cli:new Set(ge)}),[p,l]=(0,c.useState)(new Set),[g,C]=(0,c.useState)("lastMessageAt"),[w,S]=(0,c.useState)("desc"),[B,A]=(0,c.useState)(()=>new Set(ot(te()))),[N,x]=(0,c.useState)(()=>it(te())),[M,_]=(0,c.useState)(()=>lt(te())),[U,j]=(0,c.useState)(!1),[O,q]=(0,c.useState)(null),[F,se]=(0,c.useState)(null),[P,pe]=(0,c.useState)(()=>gt(te())),Y=`${N}:${N==="kanban"?P:"-"}`,fe=(0,c.useRef)(!0),[oe,ce]=(0,c.useState)(0),[W,Ce]=(0,c.useState)([]),[be,T]=(0,c.useState)(null),[v,H]=(0,c.useState)(!1),ae=(0,c.useRef)(!1),[ee,ie]=(0,c.useState)(()=>{try{return window.localStorage.getItem(In)??""}catch{return""}}),[G,X]=(0,c.useState)({data:null,key:"",fetchedAt:0}),re=(0,c.useRef)(!1),ve=(0,c.useRef)(new Set),[$e,_e]=(0,c.useState)(""),[f,L]=(0,c.useState)(null),[R,D]=(0,c.useState)(null),[K,he]=(0,c.useState)(null),[Z,J]=(0,c.useState)(!1),[Re,ne]=(0,c.useState)(24),[Fe,Se]=(0,c.useState)(""),[Ue,ke]=(0,c.useState)(null),[ds,je]=(0,c.useState)(null),[us,Wn]=(0,c.useState)(null),[ms,gs]=(0,c.useState)(null),[gn,ps]=(0,c.useState)(null),[fs,qe]=(0,c.useState)(null),[bs,pn]=(0,c.useState)(!1),ze=(0,c.useRef)(0);(0,c.useLayoutEffect)(()=>{if(fe.current){fe.current=!1;return}ce(i=>i+1)},[Y]),(0,c.useEffect)(()=>{ps(document.getElementById("create-session-modal"))},[]),(0,c.useEffect)(()=>{ft().then(a)},[a]);let fn=(0,c.useMemo)(()=>{let i=new Map;for(let u of e){let d=String(u.chatId??"").trim();if(!d||!r.showUnknownChats&&Bn(u))continue;let b=Ee(u),y=i.get(d);(!y||b<y)&&i.set(d,b)}return[...i.entries()].sort((u,d)=>u[1].localeCompare(d[1])).map(([u,d])=>({value:u,label:d}))},[r.showUnknownChats,t,e]);(0,c.useEffect)(()=>{r.chat&&(fn.some(i=>i.value===r.chat)||m(i=>({...i,chat:""})))},[fn,r.chat]);let ye=(0,c.useMemo)(()=>{let i=r.q.toLowerCase(),u=[...r.cli],d=u.length>0&&u.length<ge.length,b=N==="kanban",y=r.multiBotTopics||r.botTriggeredTopics?new Set(an(e).filter(h=>!r.multiBotTopics||h.multiBot).filter(h=>!r.botTriggeredTopics||h.inferredBotTriggered).map(h=>h.key)):null,k=e.filter(h=>!d||u.includes(h.cliId??"unknown")).filter(h=>r.showUnknownChats||!Bn(h)).filter(h=>!r.status||h.status===r.status).filter(h=>!r.adopt||r.adopt==="yes"==!!h.adopt).filter(h=>!r.chat||String(h.chatId??"")===r.chat).filter(h=>!r.active||b||h.status!=="closed").filter(h=>!i||Pt(h).includes(i));return y?k.filter(h=>y.has(On(h))).sort((h,$)=>is(h,$,g,w)):k.sort((h,$)=>is(h,$,g,w))},[r,t,w,g,e,N]),bn=(0,c.useMemo)(()=>Ot(e),[e]),Te=(0,c.useMemo)(()=>new Map(e.map(i=>[i.sessionId,i])),[e,t]),Xn=(0,c.useMemo)(()=>ye.filter(i=>i.status!=="closed"),[ye]),Je=(N==="table"||N==="topics"?ye:Xn).filter(i=>i.status!=="closed"),Gn=[...p].map(i=>Te.get(i)).filter(i=>!!i&&i.status!=="closed"),Vn=Je.length>0&&Je.every(i=>p.has(i.sessionId)),hs=Je.some(i=>p.has(i.sessionId))&&!Vn;(0,c.useEffect)(()=>{l(i=>{let u=!1,d=new Set;for(let b of i){let y=Te.get(b);y&&y.status!=="closed"?d.add(b):u=!0}return u?d:i})},[Te]);let hn=(0,c.useCallback)(i=>{let u=new Set;if(!i)return u;for(let d of i.groupChats)u.add(d);if(be)for(let[d,b]of be){if(u.has(d))continue;let y=!1;for(let k of i.botIds)if(b.botIds.has(k)){y=!0;break}if(y){for(let k of b.observedNames)if(i.botNames.has(k)){u.add(d);break}}}return u},[be]),qn=(0,c.useMemo)(()=>{if(N==="kanban"&&P==="team"){let i=W.find(d=>d.key===ee)??W[0],u=hn(i);return ye.filter(d=>u.has(String(d.chatId)))}return ye},[P,ee,W,ye,hn,N]),yn=(0,c.useCallback)(i=>It(qn,i),[qn]),kn=(0,c.useCallback)(async()=>{if(!(ae.current||v)){ae.current=!0;try{let[i,u,d]=await Promise.all([fetch("/api/team/hosted").then(k=>k.json()).catch(()=>null),fetch("/api/team/remote-roster").then(k=>k.json()).catch(()=>null),fetch("/api/groups").then(k=>k.json()).catch(()=>null)]);Array.isArray(d?.chats)&&T(new Map(d.chats.map(k=>[String(k.chatId),{botIds:new Set((k.memberBots??[]).filter(h=>h.inChat).map(h=>String(h.larkAppId))),observedNames:new Set((k.observedBotNames??[]).map(h=>String(h)))}])));let b=k=>({ids:new Set(k.map(h=>String(h.larkAppId))),names:new Set(k.map(h=>String(h.name??"")).filter(Boolean))}),y=[];for(let k of i?.teams??[]){let{ids:h,names:$}=b(k.bots??[]);y.push({key:`local:${k.teamId}`,label:k.isDefault?o("team.myHostedTeam"):String(k.name??k.teamId),botIds:h,botNames:$,groupChats:new Set((k.groupChatIds??[]).map(V=>String(V)))})}for(let k of u?.memberships??[]){let{ids:h,names:$}=b(k.roster?.bots??[]);y.push({key:`${k.hubUrl}::${k.teamId}`,label:String(k.teamName??k.teamId??k.hubUrl),botIds:h,botNames:$,groupChats:new Set})}Ce(y),ie(k=>y.length&&!y.some(h=>h.key===k)?y[0].key:k)}finally{H(!0),ae.current=!1}}},[v]),Yn=(0,c.useCallback)(async(i,u,d,b,y)=>{try{let h=i.startsWith("local:")?await fetch(`/api/team/board/local/${encodeURIComponent(i.slice(6))}/move`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:u,column:d,position:b})}):await fetch("/api/team/remote-board-move",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({key:i,sessionId:u,column:d,position:b})}),$=await h.json().catch(()=>({}));(!h.ok||$?.ok===!1)&&(X(V=>{if(!V.data||V.key!==i)return V;let Q={...V.data.board};return y?Q[u]=y:delete Q[u],{...V,data:{...V.data,board:Q}}}),h.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${$?.error??h.status}`))}catch(k){X(h=>{if(!h.data||h.key!==i)return h;let $={...h.data.board};return y?$[u]=y:delete $[u],{...h,data:{...h.data,board:$}}}),alert(`${o("sessions.kanban.moveFail")}: ${k}`)}},[]),ys=(0,c.useCallback)(async i=>{let u=G.key===i.key&&Date.now()-G.fetchedAt<3e4;if(!(re.current||u)){re.current=!0;try{let b=i.key.startsWith("local:")?`/api/team/board/local/${encodeURIComponent(i.key.slice(6))}`:`/api/team/remote-board?key=${encodeURIComponent(i.key)}`,y=await fetch(b),k=await y.json().catch(()=>({}));if(!y.ok||k?.ok===!1)return;let h=typeof k.deploymentId=="string"?k.deploymentId:null,$=[];for(let V of Array.isArray(k.reports)?k.reports:[])if(!(h&&V.deploymentId===h))for(let Q of Array.isArray(V.sessions)?V.sessions:[])$.push({...Q,remoteDeployment:V.deploymentName||V.deploymentId});X({key:i.key,fetchedAt:Date.now(),data:{board:k.board&&typeof k.board=="object"?k.board:{},remoteRows:$}})}finally{re.current=!1}}},[G.fetchedAt,G.key]);(0,c.useEffect)(()=>{N==="kanban"&&P==="team"&&!v&&kn()},[P,v,kn,N]),(0,c.useEffect)(()=>{let i=window.setInterval(()=>{N==="kanban"&&P==="team"&&(X(u=>({...u,fetchedAt:0})),a())},3e4);return()=>window.clearInterval(i)},[P,a,N]);let Qn=(0,c.useCallback)(async(i,u,d,b)=>{try{let y=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/board`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({column:u,position:d})}),k=await y.json().catch(()=>({}));(!y.ok||k?.ok===!1)&&(i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),y.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${k?.error??y.status}`))}catch(y){i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),alert(`${o("sessions.kanban.moveFail")}: ${y}`)}},[a]),ks=(0,c.useCallback)(i=>{let u=!1;for(let d of i){let b=String(d.row.sessionId);if(!b||d.row.status==="closed"&&d.column!=="done")continue;if(P==="team"){let h=W.find(Q=>Q.key===ee)??W[0];if(!h)continue;let V=(G.key===h.key&&G.data?G.data.board:{})[b];X(Q=>{let tt=Q.key===h.key&&Q.data?Q.data:{board:{},remoteRows:Q.data?.remoteRows??[]},$s={...tt.board,[b]:{column:d.column,position:d.position}};return{...Q,key:h.key,data:{...tt,board:$s}}}),Yn(h.key,b,d.column,d.position,V),u=!0;continue}let y=Ae.sessions.get(b);if(!y)continue;let k={column:y.kanbanColumn,position:y.kanbanPosition};y.kanbanColumn=d.column,y.kanbanPosition=d.position,Qn(y,d.column,d.position,k),u=!0}u&&a()},[P,ee,W,G,Qn,Yn,a]),Zn=(0,c.useCallback)(async(i,u)=>{let d=i.title;i.title=u,a();try{let b=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/rename`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:u})}),y=await b.json().catch(()=>({}));(!b.ok||y?.ok===!1)&&(i.title=d,a(),b.status!==401&&alert(`${o("sessions.kanban.renameFail")}: ${y?.error??b.status}`))}catch(b){i.title=d,a(),alert(`${o("sessions.kanban.renameFail")}: ${b}`)}},[a]),wn=(0,c.useCallback)(async i=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/locate`,{method:"POST"}),d=await u.json();return d.ok?!0:(alert(`Locate failed: ${d.error??u.status}`),!1)}catch(u){return alert(`Locate error: ${u}`),!1}},[]),Cn=(0,c.useCallback)(async(i,u)=>{if(!confirm(o("sessions.closeConfirm")))return!1;u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/close`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b?.ok===!1?(d.status!==401&&alert(`Close failed: ${b?.error??d.status}`),!1):(l(y=>{let k=new Set(y);return k.delete(i.sessionId),k}),a(),!0)}catch(d){return alert(`Close error: ${d}`),!1}finally{u&&(u.disabled=!1)}},[a]),Ye=(0,c.useCallback)(async(i,u,d)=>{let b=!!i.locked;if(b===u)return!0;i.locked=u,a(),d&&(d.disabled=!0);try{let y=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:u})}),k=await y.json().catch(()=>({}));return!y.ok||k?.ok===!1?(i.locked=b,a(),y.status!==401&&alert(`${o("sessions.lockFailed")}: ${k?.error??y.status}`),!1):(i.locked=!!k.locked,a(),!0)}catch(y){return i.locked=b,a(),alert(`${o("sessions.lockFailed")}: ${y}`),!1}finally{d&&(d.disabled=!1)}},[a]),Qe=(0,c.useCallback)(async(i,u)=>{if(ve.current.has(i.sessionId)||!confirm(_t(i)))return!1;u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/restart`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b?.ok===!1?(d.status!==401&&alert(`${o("sessions.restartFailed")}: ${b?.error??d.status}`),!1):(ve.current.add(i.sessionId),window.setTimeout(()=>ve.current.delete(i.sessionId),5e3),!0)}catch(d){return alert(`${o("sessions.restartFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),ws=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/resume`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b.ok===!1?(alert(`${o("sessions.resumeFailed")}: ${b?.error??d.status}`),!1):!0}catch(d){return alert(`${o("sessions.resumeFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),Cs=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/start`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b.ok===!1?(d.status!==401&&alert(`${o("sessions.create.startFailed")}: ${b?.error??d.status}`),!1):!0}catch(d){return alert(`${o("sessions.create.startFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),Ze=(0,c.useCallback)(i=>{je({sessionId:i.sessionId,loading:!0,messages:[]}),(async()=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/history?limit=80`),d=await u.json().catch(()=>({}));if(!u.ok||d?.ok===!1){let y=String(d?.error??u.status),k=y==="not_found_yet"||y==="not_found";je(h=>h?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:y,stale:k}:h);return}let b=Array.isArray(d.messages)?d.messages:[];je(y=>y?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:b,ownerOpenId:d.ownerOpenId}:y)}catch(u){je(d=>d?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:String(u)}:d)}})()},[]),vs=(0,c.useCallback)(i=>{if(!Oe())return;let u=Ge(i);if(!u){ke(i.sessionId);return}Wn({sessionId:i.sessionId,url:u,loading:!1})},[]),Ss=(0,c.useCallback)((i,u)=>{Pn(i,u)},[]),Ts=(0,c.useCallback)(async()=>{let i=[...p];if(i.length===0||!confirm(o("sessions.closeBulkConfirm",{count:i.length})))return;L({done:0,total:i.length});let u=0,d=0,b=[...i];async function y(){for(;b.length;){let k=b.shift();try{let h=await fetch(`/api/sessions/${encodeURIComponent(k)}/close`,{method:"POST"}),$=await h.json().catch(()=>({}));(!h.ok||$?.ok===!1)&&(d+=1)}catch{d+=1}finally{u+=1,L({done:u,total:i.length})}}}await Promise.all(Array.from({length:Math.min(6,i.length)},()=>y())),L(null),l(new Set),a(),d>0&&alert(`Failed: ${d}/${i.length}`)},[a,p]),Is=(0,c.useCallback)(async i=>{let u=[...p].map(h=>Te.get(h)).filter(h=>!!h&&h.status!=="closed"&&!!h.locked!==i);if(u.length===0)return;D({locked:i,done:0,total:u.length});let d=0,b=0,y=[...u];async function k(){for(;y.length;){let h=y.shift(),$=!!h.locked;try{let V=await fetch(`/api/sessions/${encodeURIComponent(h.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:i})}),Q=await V.json().catch(()=>({}));!V.ok||Q?.ok===!1?(b+=1,h.locked=$):h.locked=!!Q.locked}catch{b+=1,h.locked=$}finally{d+=1,D({locked:i,done:d,total:u.length})}}}await Promise.all(Array.from({length:Math.min(6,u.length)},()=>k())),D(null),a(),b>0&&alert(`${o("sessions.lockFailed")}: ${b}/${u.length}`)},[a,Te,p]),Ns=(0,c.useCallback)(()=>{let i=[...p].filter(d=>!!Te.get(d));if(i.length===0)return;let u=St(i);he(o("sessions.monitorRoomAdded",{added:u.added,total:u.total})),window.setTimeout(()=>he(null),1800)},[Te,p]),xs=(0,c.useCallback)(async i=>{let u=Mn(i);if(!u)return;let d=yn(u);if(d.length!==0){ne(u),J(!0),Se(o("sessions.idleCleanupRunning"));try{let b=await fetch("/api/sessions/cleanup-idle",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({olderThanHours:u,sessionIds:d.map(k=>k.sessionId)})}),y=await b.json().catch(()=>({}));if(!b.ok){b.status!==401&&alert(`${o("sessions.idleCleanupFailed")}: ${y?.error??b.status}`),Se("");return}l(k=>{let h=new Set(k);for(let $ of y?.results??[])$?.ok&&$?.sessionId&&h.delete(String($.sessionId));return h}),Se(o("sessions.idleCleanupDone",{closed:Number(y?.closed??0),failed:Number(y?.failed??0)})),a()}catch(b){alert(`${o("sessions.idleCleanupFailed")}: ${b}`),Se("")}finally{J(!1)}}},[yn,a]),Ms=i=>{let u=at(i)??"board";u!==N&&(x(u),ct(te(),u))},Es=(i,u)=>{_(d=>{let b=d.indexOf(i),y=b+u;if(b<0||y<0||y>=d.length)return d;let k=[...d];return k.splice(b,1),k.splice(y,0,i),Tn(te(),k),k})},Rs=(i,u)=>{i!==u&&_(d=>{let b=d.indexOf(i),y=d.indexOf(u);if(b<0||y<0)return d;let k=[...d];return k.splice(b,1),k.splice(y,0,i),Tn(te(),k),k})},Ls=(0,c.useMemo)(()=>({rows:ye,groupBy:P,teams:W,teamsLoaded:v,teamKey:ee,teamBoardData:G.data,teamBoardKey:G.key}),[P,ee,W,v,ye,G.data,G.key]),As=Ue?Te.get(Ue)??null:null,vn=(0,c.useMemo)(()=>v?W.length?W.map(i=>({value:i.key,label:i.label})):[{value:"",label:o("sessions.kanban.noTeam")}]:[{value:"__loading",label:o("sessions.kanban.teamLoading")}],[W,v]),Bs=!v||W.length===0,et=W.some(i=>i.key===ee)?ee:vn[0]?.value??"",Ds=vn.find(i=>i.value===et)?.label??o("sessions.kanban.groupTeam"),Os=(0,c.useCallback)(()=>{ze.current+=1,pn(!1),qe(null)},[]),nt=(0,c.useCallback)(async()=>{let i=ze.current+1;ze.current=i,qe({bots:[],loading:!0}),pn(!0);try{let u=await Ft();if(ze.current!==i)return;qe({bots:u})}finally{ze.current===i&&pn(!1)}},[]),Ps=(0,c.useCallback)(async()=>{let i=window.prompt(o("sessions.debugTerminalPrompt"),"");if(i===null)return;let u=i.trim(),d=window.open("about:blank","_blank");d&&(d.opener=null);try{let b=await fetch("/api/debug-terminal",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(u?{workingDir:u}:{})}),y=await b.json().catch(()=>({}));if(!b.ok||y?.ok===!1||!y?.url){d?.close(),b.status!==401&&alert(`${o("sessions.debugTerminalFail")}: ${y?.error??b.status}`);return}d?d.location.href=y.url:window.open(y.url,"_blank","noopener")}catch(b){d?.close(),alert(`${o("sessions.debugTerminalFail")}: ${b}`)}},[]);return(0,c.useEffect)(()=>{let i=()=>{wt()&&Ie.authed&&nt()};return i(),window.addEventListener(Nn,i),()=>window.removeEventListener(Nn,i)},[]),(0,n.jsxs)("section",{className:"page sessions-page",children:[(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{className:"sessions-heading-main",children:[(0,n.jsx)("p",{className:"eyebrow",children:o("nav.sessions")}),(0,n.jsx)("h1",{children:o("sessions.title")}),(0,n.jsxs)("div",{className:"sessions-view-controls",children:[(0,n.jsx)("div",{className:"segmented sessions-view-toggle",role:"group","aria-label":o("sessions.viewMode"),children:[["kanban",o("sessions.viewKanban")],["board",o("sessions.viewBoard")],["topics",o("sessions.viewTopics")],["table",o("sessions.viewTable")]].map(([i,u])=>(0,n.jsx)("button",{type:"button","data-view":i,className:N===i?"active":void 0,"aria-pressed":N===i,onClick:()=>Ms(i),children:u},i))}),(0,n.jsx)("div",{className:`segmented kanban-groupby${N==="kanban"?" is-visible":" is-collapsed"}`,id:"kanban-groupby",role:"group","aria-label":o("sessions.kanban.groupBy"),"aria-hidden":N!=="kanban",children:[["flow",o("sessions.kanban.groupFlow")],["team",o("sessions.kanban.groupTeam")],["bot",o("sessions.kanban.groupBot")]].map(([i,u])=>(0,n.jsx)("button",{type:"button","data-groupby":i,className:P===i?"active":void 0,"aria-pressed":P===i,onClick:()=>{pe(i),pt(te(),i)},children:u},i))}),(0,n.jsx)("span",{id:"kanban-team-stats",className:"kanban-team-stats",hidden:!(N==="kanban"&&P==="team"&&v),children:$e}),(0,n.jsx)(We,{id:"kanban-team",className:"kanban-team-menu",ariaLabel:o("sessions.kanban.groupTeam"),hidden:!(N==="kanban"&&P==="team"),disabled:Bs,label:Ds,value:et,options:vn,onChange:i=>{if(W.some(u=>u.key===i)){ie(i);try{window.localStorage.setItem(In,i)}catch{}}}})]})]}),(0,n.jsxs)("div",{className:"page-heading-actions sessions-page-actions",children:[Oe()?(0,n.jsx)("button",{type:"button",id:"monitor-room-open",className:"monitor-room-open",onClick:()=>{window.location.href=Tt()},children:o("sessions.monitorRoom")}):null,Ie.authed?(0,n.jsx)("button",{type:"button",className:"debug-terminal-btn",title:o("sessions.debugTerminalHint"),onClick:()=>{Ps()},children:o("sessions.debugTerminal")}):null,Ie.authed?(0,n.jsx)(ht,{className:"page-primary-action create-session-btn",disabled:bs,onClick:()=>{nt()},children:o("sessions.create.button")}):null]})]}),(0,n.jsxs)("div",{className:"session-runtime-stats","aria-live":"polite",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:bn.logical}),o("sessions.runtime.logical")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:bn.resident}),o("sessions.runtime.resident")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:bn.dormant}),o("sessions.runtime.dormant")]})]}),(0,n.jsx)(yo,{chatOptions:fn,filters:r,setFilters:m,idleCleanup:{busy:Z,hours:Re,status:Fe,countForHours:i=>yn(i).length,onRun:xs}}),(0,n.jsx)(ko,{selectedCount:p.size,lockDisabled:!Gn.some(i=>!i.locked),unlockDisabled:!Gn.some(i=>!!i.locked),closeProgress:f,lockProgress:R,monitorRoomText:K,onClear:()=>l(new Set),onClose:()=>{Ts()},onAddToMonitorRoom:Ns,onLock:i=>{Is(i)}}),(0,n.jsxs)("div",{className:`sessions-view-stage${oe>0?" sessions-view-stage-enter":""}`,"data-view":N,"data-kanban-group":P,children:[(0,n.jsx)(Co,{rows:ye,selected:p,hidden:N!=="table",sortKey:g,sortDir:w,selectAllChecked:Vn,selectAllIndeterminate:hs,selectAllDisabled:Je.length===0,hiddenColumns:B,onToggleColumn:i=>{let u=!B.has(i),d=new Set(B);u?d.add(i):d.delete(i),Sn(te(),Array.from(d)),A(d),u&&i===g&&(C("lastMessageAt"),S("desc"))},onResetColumns:()=>{A(new Set),Sn(te(),[])},onOpen:i=>ke(i.sessionId),onSelect:(i,u)=>l(d=>{let b=new Set(d);return u?b.add(i):b.delete(i),b}),onSelectAll:i=>l(u=>{let d=new Set(u);for(let b of Je)i?d.add(b.sessionId):d.delete(b.sessionId);return d}),onSort:i=>{g===i?S(w==="asc"?"desc":"asc"):(C(i),S(i==="spawnedAt"||i==="lastMessageAt"?"desc":"asc"))}}),(0,n.jsx)(So,{rows:Xn,selected:p,hidden:N!=="board",order:M,animated:U,dragColId:O,dragOverCol:F,onAnimated:()=>j(!0),onMoveColumn:Es,onMoveColumnTo:Rs,onDragCol:q,onDragOverCol:se,onToggleSelect:i=>l(u=>{let d=new Set(u);return d.has(i.sessionId)?d.delete(i.sessionId):d.add(i.sessionId),d}),onOpen:i=>ke(i.sessionId),onHistory:Ze,onLocate:i=>wn(i),onRestart:(i,u)=>{Qe(i,u)},onLock:(i,u,d)=>{Ye(i,u,d)},onClose:(i,u)=>{Cn(i,u)}}),(0,n.jsx)(Io,{rows:ye,relationRows:e,selected:p,hidden:N!=="topics",onToggleSelect:i=>l(u=>{let d=new Set(u);return d.has(i.sessionId)?d.delete(i.sessionId):d.add(i.sessionId),d}),onOpen:i=>ke(i.sessionId),onHistory:Ze,onLocate:i=>wn(i),onRestart:(i,u)=>{Qe(i,u)},onLock:(i,u,d)=>{Ye(i,u,d)},onClose:(i,u)=>{Cn(i,u)}}),(0,n.jsx)("div",{id:"sessions-kanban",ref:gs,className:`sessions-kanban${P==="bot"?" kanban-mode-bot":""}`,hidden:N!=="kanban",children:N==="kanban"?(0,n.jsx)(ss,{host:ms,...Ls,canRestartSession:cn,getTeamChatIds:hn,icons:{details:z.details,feishu:z.feishu,history:z.history,key:z.key,lock:z.lock,restart:z.restart,terminal:z.terminal,unlock:z.unlock},lockActionLabel:ln,sessionStatusText:Xe,onDetails:i=>ke(String(i.sessionId)),onHistory:Ze,onMoveRows:ks,onNeedTeamBoard:i=>{ys(i)},onNeedTeams:()=>{kn()},onOpenTerminal:Oe()?vs:void 0,onOpenWritableTerminal:Oe()&&rn()?Ss:void 0,onRename:(i,u)=>{let d=Ae.sessions.get(String(i.sessionId));d&&Zn(d,u)},onRestart:(i,u)=>{let d=Ae.sessions.get(String(i.sessionId));d&&Qe(d,u)},onTeamScope:i=>_e(i?o("sessions.kanban.teamScope",{chats:i.chats,sessions:i.sessions}):""),onToggleLock:(i,u)=>{let d=Ae.sessions.get(String(i.sessionId));d&&Ye(d,!d.locked,u)},onToggleSelect:i=>l(u=>{let d=String(i.sessionId),b=new Set(u);return b.has(d)?b.delete(d):b.add(d),b}),selectedSessionIds:p}):null})]},oe),(0,n.jsx)(Ao,{row:As,onClose:()=>ke(null),locateSession:wn,openHistory:Ze,resumeSession:ws,restartSession:Qe,closeSession:Cn,setSessionLocked:Ye,startSession:Cs}),(0,n.jsx)(Eo,{state:us,onClose:()=>Wn(null),onRename:Zn}),(0,n.jsx)(xo,{state:ds,onClose:()=>je(null)}),gn?(0,un.createPortal)((0,n.jsx)(Bo,{dialog:gn,state:fs,onClose:Os,onSuccess:i=>qe(u=>u&&{...u,success:i})}),gn):null]})}function wa(e){return bt(e,(0,n.jsx)(Do,{}))}export{ho as CliFilterGroup,Io as TopicGroupsView,wa as renderSessionsPage};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as xe,c as A}from"./chunk-VA6QWSGQ.js";import{a as H,c as ce,j as Me,l as T,q as O}from"./chunk-5CJMHTT4.js";import{a as ve,t as be}from"./chunk-DLZK52JU.js";import{a as Oe}from"./chunk-SYC6D5XU.js";import{a as Te,d as de}from"./chunk-5THX4DI2.js";import{c as Y}from"./chunk-7SZRL6FY.js";var p=Y(Te(),1);var N=Y(Te(),1);var a=Y(de(),1),Le=["transcript_received","chat_received","participant_joined","participant_left","magic_share_started","magic_share_ended"],he=8e3,Ue=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,Ee="\u6301\u7EED\u6574\u7406\u4F1A\u8BAE\u7EAA\u8981\uFF0C\u91CD\u70B9\u8BB0\u5F55\u5DF2\u786E\u8BA4\u7684\u51B3\u7B56\u3001\u5F85\u529E\u4E8B\u9879\uFF08\u542B\u8D1F\u8D23\u4EBA\u548C\u622A\u6B62\u65F6\u95F4\uFF09\u4EE5\u53CA\u672A\u89E3\u51B3\u98CE\u9669\uFF1B\u5B57\u5E55\u4FEE\u8BA2\u65F6\u66F4\u65B0\u5DF2\u6709\u6761\u76EE\uFF0C\u4E0D\u91CD\u590D\u8BB0\u5F55\u540C\u4E00\u4E8B\u9879\u3002\u4EC5\u5728\u51FA\u73B0\u65B0\u7684\u5173\u952E\u51B3\u7B56\u3001\u660E\u786E\u5F85\u529E\u6216\u98CE\u9669\uFF0C\u6216\u88AB\u7528\u6237\u70B9\u540D\u65F6\uFF0C\u624D\u5728\u76D1\u542C\u7FA4\u8F93\u51FA\u7B80\u6D01\u589E\u91CF\uFF1B\u65E0\u5B9E\u8D28\u589E\u91CF\u65F6\u4FDD\u6301\u9759\u9ED8\uFF0C\u4E0D\u53D1\u9001\u786E\u8BA4\u6216\u5FC3\u8DF3\u3002\u9700\u8981\u5411\u4F1A\u8BAE\u5185\u53D1\u9001\u6587\u5B57\u6216\u8BED\u97F3\u65F6\uFF0C\u5FC5\u987B\u901A\u8FC7 botmux \u53D7\u7BA1 request-output/action gate \u63D0\u4EA4\uFF0C\u4E0D\u5F97\u7ED5\u8FC7\u6743\u9650\u3001\u6240\u6709\u6743\u4E0E\u5BA1\u6838\u7B56\u7565\u3002",Ie=0;function Ne(){return Ie+=1,`p${Ie}`}function we(e){return{...e,listenerPlacement:e.listenerPlacement??"auto",uiKey:Ne(),isNew:!1}}function He(e){let{uiKey:t,isNew:i,...r}=e;return r}function j(e){return(0,a.jsxs)("span",{className:"vc-profile-field-head",children:[e.title,(0,a.jsx)(Me,{label:e.title,children:(0,a.jsx)("span",{className:"vc-profile-help",children:e.help})})]})}function Re(e){let t=A(),i=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let r=i.current;if(!(!r||r.open))try{r.showModal()}catch{r.setAttribute("open","")}},[]),(0,a.jsxs)("dialog",{ref:i,className:["vc-profile-dialog",e.className].filter(Boolean).join(" "),onClose:e.onClose,onCancel:r=>{r.preventDefault(),e.onClose()},children:[(0,a.jsxs)("header",{className:"vc-profile-dialog-head",children:[(0,a.jsxs)("div",{children:[e.eyebrow?(0,a.jsx)("span",{children:e.eyebrow}):null,(0,a.jsx)("h3",{children:e.title})]}),(0,a.jsx)("button",{type:"button",className:"vc-profile-dialog-close","aria-label":t("settings.vcProfiles.close"),onClick:e.onClose})]}),(0,a.jsx)("div",{className:"vc-profile-dialog-body",children:e.children})]})}function Be(e){let t=A();return e.enabled?e.canWrite?(0,a.jsx)(_e,{canWrite:e.canWrite,listenerBotAppId:e.listenerBotAppId,listenerBotOptions:e.listenerBotOptions}):(0,a.jsx)("p",{className:"hint",children:t("settings.vcProfiles.needAuth")}):null}function _e(e){let t=A(),i=xe(),r=(0,N.useRef)(!1),g=e.listenerBotOptions,[f,m]=(0,N.useState)(e.listenerBotAppId??g[0]?.larkAppId??""),[u,y]=(0,N.useState)(null),[S,h]=(0,N.useState)(null),[b,C]=(0,N.useState)(!1),[$,V]=(0,N.useState)(!1),[R,W]=(0,N.useState)(!1),[c,v]=(0,N.useState)(!1),[k,x]=(0,N.useState)({}),[ee,z]=(0,N.useState)(!1),[ie,B]=(0,N.useState)(null),[ae,Z]=(0,N.useState)(null);(0,N.useEffect)(()=>(r.current=!0,()=>{r.current=!1}),[]);let G=(0,N.useRef)(0);(0,N.useEffect)(()=>{e.listenerBotAppId&&e.listenerBotAppId!==f&&!$&&m(e.listenerBotAppId)},[$,e.listenerBotAppId,f]);let K=(0,N.useCallback)(async l=>{let s=++G.current;if(y(null),V(!1),v(!1),x({}),B(null),Z(null),!l){h(null);return}C(!0);try{let o=await fetch(`/api/vc-meeting/consumer-profiles?listenerBotAppId=${encodeURIComponent(l)}`),d=await o.json().catch(()=>({}));if(!r.current||G.current!==s)return;!o.ok||d?.ok!==!0?(y(null),h(typeof d?.error=="string"?d.error:`HTTP ${o.status}`)):(y({forBot:l,revision:d.revision,catalogState:d.catalogState==="explicit_empty"||d.catalogState==="legacy_or_partial"||d.catalogState==="profiles"?d.catalogState:"uninitialized",defaultMode:d.defaultMode==="agents"?"agents":"listenOnly",defaultConsumerIds:Array.isArray(d.defaultConsumerIds)?d.defaultConsumerIds:[],profiles:(Array.isArray(d.profiles)?d.profiles:[]).map(we),agentOptions:Array.isArray(d.agentOptions)?d.agentOptions:[],templateCatalog:d.templateCatalog?.schemaVersion===1&&Array.isArray(d.templateCatalog.templates)?d.templateCatalog:{schemaVersion:1,templates:[]},...d.migrationOffer==="enable_seeded_minutes_default"?{migrationOffer:d.migrationOffer}:{}}),h(null),V(!1))}catch(o){if(!r.current||G.current!==s)return;y(null),h(o instanceof Error?o.message:String(o))}finally{r.current&&G.current===s&&C(!1)}},[]);(0,N.useEffect)(()=>{K(f)},[K,f]);let I=(0,N.useCallback)(l=>{y(s=>s&&l(s)),V(!0),z(!1)},[]),se=(0,N.useCallback)((l,s)=>{I(o=>({...o,profiles:o.profiles.map(d=>d.uiKey===l?{...d,...s}:d)}))},[I]),ue=(0,N.useCallback)(async()=>{if(!u||R||b||!u.forBot||u.forBot!==f)return;let l={};if(u.profiles.forEach((s,o)=>{Ue.test(s.id)||(l[`profiles[${o}].id`]=t("settings.vcProfiles.idInvalid")),(s.instructions??"").length>he&&(l[`profiles[${o}].instructions`]=t("settings.vcProfiles.instructionsTooLong"))}),Object.keys(l).length>0){x(l);return}W(!0),v(!1),x({});try{let s=await fetch("/api/vc-meeting/consumer-profiles",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({listenerBotAppId:u.forBot,expectedRevision:u.revision,defaultMode:u.defaultMode,defaultConsumerIds:u.defaultConsumerIds,profiles:u.profiles.map(He)})}),o=await s.json().catch(()=>({}));if(!r.current||u.forBot!==f)return;if(s.status===409){v(!0);return}if(s.status===422){let d={};for(let P of Array.isArray(o?.fieldErrors)?o.fieldErrors:[])typeof P?.path=="string"&&typeof P?.message=="string"&&(d[P.path]=P.message);x(Object.keys(d).length>0?d:{profiles:t("settings.vcProfiles.validationFailed")});return}if(!s.ok||o?.ok!==!0){x({profiles:typeof o?.error=="string"?o.error:`HTTP ${s.status}`});return}y({forBot:u.forBot,revision:o.revision,catalogState:o.catalogState==="explicit_empty"||o.catalogState==="legacy_or_partial"||o.catalogState==="profiles"?o.catalogState:"uninitialized",defaultMode:o.defaultMode==="agents"?"agents":"listenOnly",defaultConsumerIds:Array.isArray(o.defaultConsumerIds)?o.defaultConsumerIds:[],profiles:(Array.isArray(o.profiles)?o.profiles:[]).map(we),agentOptions:Array.isArray(o.agentOptions)?o.agentOptions:[],templateCatalog:o.templateCatalog?.schemaVersion===1&&Array.isArray(o.templateCatalog.templates)?o.templateCatalog:{schemaVersion:1,templates:[]},...o.migrationOffer==="enable_seeded_minutes_default"?{migrationOffer:o.migrationOffer}:{}}),V(!1),z(!0)}catch(s){if(!r.current)return;x({profiles:s instanceof Error?s.message:String(s)})}finally{r.current&&W(!1)}},[u,R,f,t]),Q=(0,N.useMemo)(()=>g.map(l=>({value:l.larkAppId,label:l.botName||l.larkAppId})),[g]),ge=Q.find(l=>l.value===f)?.label??f,L=(0,N.useMemo)(()=>u?u.agentOptions.map(l=>{let s=[l.online?void 0:t("settings.vcProfiles.agentOffline"),l.workingDirReady?void 0:t("settings.vcProfiles.agentNoWorkingDir"),l.reliableTurnTerminal?void 0:t("settings.vcProfiles.agentNoReliableTerminal"),l.managedSideEffectIsolation?void 0:t("settings.vcProfiles.agentNoManagedIsolation")].filter(Boolean);return{value:l.appId,label:(0,a.jsxs)("span",{className:"vc-agent-option",children:[(0,a.jsxs)("span",{className:"vc-agent-option-name",children:[l.label,l.cliId?(0,a.jsx)("em",{className:"vc-agent-option-cli",children:l.cliId}):null]}),s.length>0?(0,a.jsxs)("span",{className:"vc-agent-option-warn",children:["\u26A0 ",s.join(" \xB7 ")]}):null]})}}):[],[u,t]),fe=l=>{let s=u?.agentOptions.find(d=>d.appId===l);return s?!s.online||!s.workingDirReady||!s.reliableTurnTerminal||!s.managedSideEffectIsolation?`\u26A0 ${s.label}`:s.label:l},D=(0,N.useCallback)(l=>{let o=["observe_only","meeting_text","meeting_voice","meeting_text_voice"].map(d=>({value:d,label:t(`settings.vcProfiles.preset.${d}`)}));return(!l.isNew||l.permissionPreset==="custom")&&o.push({value:"custom",label:t("settings.vcProfiles.preset.custom")}),o},[t]),le=(0,N.useCallback)(()=>{let l=Ne();I(s=>({...s,profiles:[...s.profiles,{uiKey:l,isNew:!0,id:"",agentAppId:s.agentOptions[0]?.appId??"",responseMode:"silent",listenerPlacement:"auto",permissionPreset:"observe_only"}]})),B(l)},[I]),oe=(0,N.useCallback)(l=>{let s=Ne();I(o=>{let d=new Set(o.profiles.map(w=>w.id)),P=l.suggestedProfileId;for(let w=2;d.has(P);w+=1)P=`${l.suggestedProfileId.slice(0,60)}-${w}`;return{...o,profiles:[...o.profiles,{uiKey:s,isNew:!0,id:P,label:l.profileLabel[i],agentAppId:o.agentOptions[0]?.appId??"",instructions:l.instructions[i],activityTypes:[...l.activityTypes],responseMode:l.responseMode,listenerPlacement:l.listenerPlacement,permissionPreset:l.permissionPreset}]}}),Z(null),B(s)},[i,I]),J=(0,N.useCallback)(l=>{I(s=>({...s,profiles:s.profiles.filter(o=>o.uiKey!==l),defaultConsumerIds:s.defaultConsumerIds.filter(o=>s.profiles.some(d=>d.uiKey!==l&&d.id===o))})),B(s=>s===l?null:s)},[I]);if(g.length===0)return null;let F=l=>k[l],q=!e.canWrite||R||b,pe=u?.agentOptions.some(l=>l.workingDirReady&&l.reliableTurnTerminal&&l.managedSideEffectIsolation)??!1,te=u?.profiles.findIndex(l=>l.uiKey===ie)??-1,U=te>=0?u?.profiles[te]??null:null,ne=u?.templateCatalog.templates.find(l=>l.templateId===ae)??null,Ae=(l,s)=>{l.id&&I(o=>{let d=s?[...new Set([...o.defaultConsumerIds,l.id])]:o.defaultConsumerIds.filter(P=>P!==l.id);return{...o,defaultMode:d.length>0?"agents":"listenOnly",defaultConsumerIds:d}})};return(0,a.jsxs)("div",{className:"vc-profiles-section",children:[(0,a.jsxs)("div",{className:"settings-field-row",children:[(0,a.jsx)(T,{help:t("settings.vcProfiles.help"),children:t("settings.vcProfiles.title")}),e.listenerBotAppId===null&&Q.length>1?(0,a.jsxs)("div",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:t("settings.vcProfiles.listenerOwner")}),(0,a.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.vcProfiles.listenerOwner"),disabled:b||R,value:f,label:H(Q,f),options:Q,onChange:l=>{l!==f&&($&&!window.confirm(t("settings.vcProfiles.discardConfirm"))||m(l))}})]}):(0,a.jsx)("span",{className:"vc-profile-config-target",children:t("settings.vcProfiles.configuringBot",{bot:ge})})]}),(0,a.jsx)("p",{className:"hint vc-profiles-freeze",children:t("settings.vcProfiles.freezeNotice")}),b?(0,a.jsx)("p",{className:"hint",children:t("settings.vcProfiles.loading")}):null,S?(0,a.jsx)("p",{className:"hint-warn",children:S==="bot_not_in_config"?t("settings.vcProfiles.botNotInConfig"):`${t("settings.vcProfiles.loadFailed")}: ${S}`}):null,c?(0,a.jsxs)("p",{className:"hint-warn",children:[t("settings.vcProfiles.conflict")," ",(0,a.jsx)("button",{type:"button",className:"vc-profiles-link",onClick:()=>{K(f)},children:t("settings.vcProfiles.reload")})]}):null,F("profiles")?(0,a.jsx)("p",{className:"hint-warn",children:F("profiles")}):null,u?(0,a.jsxs)(a.Fragment,{children:[u.migrationOffer==="enable_seeded_minutes_default"?(0,a.jsxs)("p",{className:"hint-warn vc-profile-migration-offer",children:[t("settings.vcProfiles.migrationOffer")," ",(0,a.jsx)("button",{type:"button",className:"vc-profiles-link",disabled:q||$,onClick:()=>I(l=>({...l,defaultMode:"agents",defaultConsumerIds:["minutes"],profiles:l.profiles.map(s=>s.id==="minutes"?{...s,instructions:Ee,responseMode:"listener_thread",permissionPreset:"meeting_text_voice"}:s),migrationOffer:void 0})),children:t("settings.vcProfiles.migrationEnable")})]}):null,u.catalogState==="uninitialized"&&u.profiles.length===0&&!pe?(0,a.jsx)("p",{className:"hint-warn",children:t("settings.vcProfiles.noEligibleDefaultAgent")}):null,u.catalogState==="legacy_or_partial"?(0,a.jsx)("p",{className:"hint",children:t("settings.vcProfiles.legacyCatalog")}):null,(0,a.jsxs)("section",{className:"vc-profile-library-section",children:[(0,a.jsxs)("div",{className:"vc-profile-list-heading",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:t("settings.vcProfiles.list.title")}),(0,a.jsx)("p",{children:t("settings.vcProfiles.list.help")})]}),e.canWrite?(0,a.jsx)("button",{type:"button",className:"vc-profiles-link vc-profile-add",disabled:R||b,onClick:le,children:t("settings.vcProfiles.add")}):null]}),u.profiles.length>0?(0,a.jsx)("div",{className:"vc-profile-card-grid",children:u.profiles.map(l=>{let s=u.agentOptions.find(d=>d.appId===l.agentAppId),o=u.defaultMode==="agents"&&u.defaultConsumerIds.includes(l.id);return(0,a.jsxs)("article",{className:"vc-profile-summary-card",role:"button",tabIndex:0,onClick:()=>B(l.uiKey),onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),B(l.uiKey))},children:[(0,a.jsxs)("div",{className:"vc-profile-summary-top",children:[(0,a.jsx)("span",{className:"vc-profile-summary-icon","aria-hidden":"true",children:(l.label||l.id||"?").slice(0,1)}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:l.label||l.id||t("settings.vcProfiles.untitled")}),(0,a.jsx)("code",{children:l.id||t("settings.vcProfiles.newBadge")})]}),l.isNew?(0,a.jsx)("em",{children:t("settings.vcProfiles.newBadge")}):null]}),(0,a.jsx)("p",{children:(l.instructions??"").trim()||t("settings.vcProfiles.noInstructions")}),(0,a.jsxs)("div",{className:"vc-profile-summary-meta",children:[(0,a.jsx)("span",{children:s?.label??l.agentAppId}),(0,a.jsx)("span",{children:l.responseMode==="listener_thread"?t("settings.vcProfiles.responseListener"):t("settings.vcProfiles.responseSilent")})]}),(0,a.jsxs)("label",{className:"vc-profile-default-toggle",onClick:d=>d.stopPropagation(),children:[(0,a.jsx)("input",{type:"checkbox",checked:o,disabled:q||!l.id,onChange:d=>Ae(l,d.currentTarget.checked)}),(0,a.jsx)("span",{children:t("settings.vcProfiles.setDefault")})]})]},l.uiKey)})}):(0,a.jsx)("p",{className:"vc-profile-empty",children:t("settings.vcProfiles.list.empty")})]}),u.templateCatalog.templates.length>0?(0,a.jsxs)("section",{className:"vc-profile-template-catalog",children:[(0,a.jsxs)("div",{className:"vc-profile-template-heading",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:t("settings.vcProfiles.templates.title")}),(0,a.jsx)("p",{children:t("settings.vcProfiles.templates.help")})]}),(0,a.jsx)("span",{children:t("settings.vcProfiles.templates.builtinBadge")})]}),(0,a.jsx)("div",{className:"vc-profile-template-grid",children:u.templateCatalog.templates.map(l=>(0,a.jsxs)("button",{type:"button",className:"vc-profile-template-card",onClick:()=>Z(l.templateId),children:[(0,a.jsx)("span",{"aria-hidden":"true",children:"\u2726"}),(0,a.jsx)("strong",{children:l.title[i]}),(0,a.jsx)("p",{children:l.description[i]}),(0,a.jsxs)("em",{children:[t("settings.vcProfiles.viewDetails")," \u2192"]})]},`${l.templateId}@${l.version}`))})]}):null,(0,a.jsxs)("div",{className:"settings-field-row vc-profile-default-mode-row",children:[(0,a.jsx)(T,{help:t("settings.vcProfiles.defaultModeHelp"),children:t("settings.vcProfiles.defaultMode")}),(0,a.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.vcProfiles.defaultMode"),disabled:q,value:u.defaultMode,label:u.defaultMode==="agents"?t("settings.vcProfiles.defaultModeAgents"):t("settings.vcProfiles.defaultModeListenOnly"),options:[{value:"listenOnly",label:t("settings.vcProfiles.defaultModeListenOnly")},{value:"agents",label:t("settings.vcProfiles.defaultModeAgents")}],onChange:l=>I(s=>({...s,defaultMode:l==="agents"?"agents":"listenOnly"}))})]}),F("defaultConsumerIds")?(0,a.jsx)("em",{className:"vc-profile-err",children:F("defaultConsumerIds")}):null,F("defaultMode")?(0,a.jsx)("em",{className:"vc-profile-err",children:F("defaultMode")}):null,e.canWrite?(0,a.jsxs)("div",{className:"vc-profiles-actions",children:[(0,a.jsx)("button",{type:"button",className:"vc-profiles-save",disabled:!$||R||c,onClick:()=>{ue()},children:t(R?"settings.vcProfiles.saving":"settings.vcProfiles.save")}),ee?(0,a.jsx)("span",{className:"vc-profile-hint",children:t("settings.vcProfiles.saved")}):null,$&&!R?(0,a.jsx)("span",{className:"vc-profile-hint",children:t("settings.vcProfiles.unsaved")}):null]}):null,U?(0,a.jsx)($e,{profile:U,index:te,frozen:q,canWrite:e.canWrite,agentOptions:L,agentLabel:fe(U.agentAppId),presetOptions:D(U),error:F,onClose:()=>B(null),onUpdate:l=>se(U.uiKey,l),onIdChange:l=>{let s=U.id;I(o=>({...o,profiles:o.profiles.map(d=>d.uiKey===U.uiKey?{...d,id:l}:d),defaultConsumerIds:o.defaultConsumerIds.map(d=>d===s&&s?l:d).filter(Boolean)}))},onRemove:()=>J(U.uiKey)}):null,ne?(0,a.jsx)(Ve,{template:ne,locale:i,disabled:q||u.agentOptions.length===0,onClose:()=>Z(null),onUse:()=>oe(ne)}):null]}):null]})}function $e(e){let t=A(),{profile:i,index:r}=e;return(0,a.jsxs)(Re,{className:"vc-profile-editor-dialog",eyebrow:t("settings.vcProfiles.list.title"),title:i.label||i.id||t("settings.vcProfiles.untitled"),onClose:e.onClose,children:[(0,a.jsxs)("div",{className:"vc-profile-grid",children:[(0,a.jsxs)("label",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldId"),help:t("settings.vcProfiles.idHelp")})}),(0,a.jsx)("input",{type:"text",value:i.id,disabled:e.frozen||!i.isNew,placeholder:"minutes",onChange:g=>e.onIdChange(g.currentTarget.value)}),e.error(`profiles[${r}].id`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].id`)}):null]}),(0,a.jsxs)("label",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldLabel"),help:t("settings.vcProfiles.labelHelp")})}),(0,a.jsx)("input",{type:"text",value:i.label??"",disabled:e.frozen,onChange:g=>e.onUpdate({label:g.currentTarget.value||void 0})}),e.error(`profiles[${r}].label`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].label`)}):null]}),(0,a.jsxs)("div",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldAgent"),help:t("settings.vcProfiles.agentHelp")})}),(0,a.jsx)(O,{className:"vc-profile-agent-menu",ariaLabel:t("settings.vcProfiles.fieldAgent"),disabled:e.frozen,value:i.agentAppId,label:e.agentLabel,options:e.agentOptions,onChange:g=>e.onUpdate({agentAppId:g})}),e.error(`profiles[${r}].agentAppId`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].agentAppId`)}):null]}),(0,a.jsxs)("div",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldResponseMode"),help:t("settings.vcProfiles.responseModeHelp")})}),(0,a.jsx)(O,{ariaLabel:t("settings.vcProfiles.fieldResponseMode"),disabled:e.frozen,value:i.responseMode,label:i.responseMode==="listener_thread"?t("settings.vcProfiles.responseListener"):t("settings.vcProfiles.responseSilent"),options:[{value:"silent",label:t("settings.vcProfiles.responseSilent")},{value:"listener_thread",label:t("settings.vcProfiles.responseListener")}],onChange:g=>e.onUpdate({responseMode:g})}),e.error(`profiles[${r}].responseMode`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].responseMode`)}):null]}),(0,a.jsxs)("div",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldListenerPlacement"),help:t("settings.vcProfiles.listenerPlacementHelp")})}),(0,a.jsx)(O,{ariaLabel:t("settings.vcProfiles.fieldListenerPlacement"),disabled:e.frozen||i.responseMode==="silent",value:i.listenerPlacement??"auto",label:t(`settings.vcProfiles.listenerPlacement.${i.listenerPlacement??"auto"}`),options:["auto","chat","topic"].map(g=>({value:g,label:t(`settings.vcProfiles.listenerPlacement.${g}`)})),onChange:g=>e.onUpdate({listenerPlacement:g})}),e.error(`profiles[${r}].listenerPlacement`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].listenerPlacement`)}):null]}),(0,a.jsxs)("div",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldPreset"),help:t("settings.vcProfiles.presetHelp")})}),(0,a.jsx)(O,{ariaLabel:t("settings.vcProfiles.fieldPreset"),disabled:e.frozen,value:i.permissionPreset,label:H(e.presetOptions,i.permissionPreset),options:e.presetOptions,onChange:g=>e.onUpdate({permissionPreset:g})}),e.error(`profiles[${r}].permissionPreset`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].permissionPreset`)}):null]})]}),(0,a.jsxs)("label",{className:"vc-profile-field vc-profile-instructions",children:[(0,a.jsxs)("span",{children:[(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldInstructions"),help:t("settings.vcProfiles.instructionsHelp")}),(0,a.jsxs)("em",{className:"vc-profile-count",children:[(i.instructions??"").length,"/",he]})]}),(0,a.jsx)("textarea",{rows:7,maxLength:he,value:i.instructions??"",disabled:e.frozen,placeholder:t("settings.vcProfiles.instructionsPlaceholder"),onChange:g=>e.onUpdate({instructions:g.currentTarget.value||void 0})}),e.error(`profiles[${r}].instructions`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].instructions`)}):null]}),(0,a.jsxs)("div",{className:"vc-profile-field",children:[(0,a.jsx)("span",{children:(0,a.jsx)(j,{title:t("settings.vcProfiles.fieldActivityTypes"),help:t("settings.vcProfiles.activityHelp")})}),(0,a.jsx)("div",{className:"vc-profile-activity",children:Le.map(g=>{let f=i.activityTypes?.includes(g)??!1;return(0,a.jsxs)("label",{className:"vc-profile-check",children:[(0,a.jsx)("input",{type:"checkbox",checked:f,disabled:e.frozen,onChange:m=>{let u=new Set(i.activityTypes??[]);m.currentTarget.checked?u.add(g):u.delete(g),e.onUpdate({activityTypes:u.size>0?[...u]:void 0})}}),t(`settings.vcProfiles.activity.${g}`)]},g)})}),(0,a.jsx)("em",{className:"vc-profile-hint",children:t("settings.vcProfiles.activityAllHint")}),e.error(`profiles[${r}].activityTypes`)?(0,a.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${r}].activityTypes`)}):null]}),e.canWrite?(0,a.jsxs)("footer",{className:"vc-profile-dialog-actions",children:[(0,a.jsx)("button",{type:"button",className:"vc-profiles-link vc-profile-remove",disabled:e.frozen,onClick:e.onRemove,children:t("settings.vcProfiles.remove")}),(0,a.jsx)("button",{type:"button",className:"vc-profile-dialog-done",onClick:e.onClose,children:t("settings.vcProfiles.done")})]}):null]})}function Ve(e){let t=A(),i=e.template;return(0,a.jsxs)(Re,{className:"vc-profile-template-dialog",eyebrow:t("settings.vcProfiles.templates.title"),title:i.title[e.locale],onClose:e.onClose,children:[(0,a.jsx)("p",{className:"vc-profile-template-description",children:i.description[e.locale]}),(0,a.jsxs)("div",{className:"vc-profile-template-facts",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:t("settings.vcProfiles.fieldResponseMode")}),(0,a.jsx)("strong",{children:t(i.responseMode==="listener_thread"?"settings.vcProfiles.responseListener":"settings.vcProfiles.responseSilent")})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:t("settings.vcProfiles.fieldListenerPlacement")}),(0,a.jsx)("strong",{children:t(`settings.vcProfiles.listenerPlacement.${i.listenerPlacement}`)})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{children:t("settings.vcProfiles.fieldPreset")}),(0,a.jsx)("strong",{children:t(`settings.vcProfiles.preset.${i.permissionPreset}`)})]})]}),(0,a.jsxs)("section",{className:"vc-profile-template-prompt",children:[(0,a.jsx)("strong",{children:t("settings.vcProfiles.fieldInstructions")}),(0,a.jsx)("p",{children:i.instructions[e.locale]})]}),(0,a.jsxs)("section",{className:"vc-profile-template-events",children:[(0,a.jsx)("strong",{children:t("settings.vcProfiles.fieldActivityTypes")}),(0,a.jsx)("div",{children:i.activityTypes.map(r=>(0,a.jsx)("span",{children:t(`settings.vcProfiles.activity.${r}`)},r))})]}),(0,a.jsxs)("footer",{className:"vc-profile-dialog-actions",children:[(0,a.jsx)("button",{type:"button",className:"vc-profile-dialog-secondary",onClick:e.onClose,children:t("settings.vcProfiles.close")}),(0,a.jsx)("button",{type:"button",className:"vc-profile-template-use",disabled:e.disabled,onClick:e.onUse,children:t("settings.vcProfiles.templates.use")})]})]})}var n=Y(de(),1),ye=["Asia/Shanghai","Asia/Hong_Kong","Asia/Tokyo","Asia/Singapore","Asia/Kolkata","UTC","Europe/London","Europe/Paris","Europe/Moscow","America/Los_Angeles","America/New_York","America/Sao_Paulo","Australia/Sydney"];function Fe(e,t){if(!e||typeof e!="object")return null;if(e.failed){let i=e.failed.step==="install"?t("settings.herdrTraexInstallStepInstall"):t("settings.herdrTraexInstallStepAction");return{text:`${t("settings.herdrTraexInstallFailed")}\uFF08${i}\uFF09: ${e.failed.reason??""}`,cls:"hint-warn-inline"}}if(e.skippedReason==="plugin_unsupported"){let i=typeof e.herdrVersion=="string"&&e.herdrVersion?` (${e.herdrVersion})`:"";return{text:`${t("settings.herdrTraexUnsupported")}${i}`,cls:"hint-warn-inline"}}return e.installed||e.actionInvoked?{text:t("settings.herdrTraexInstalled"),cls:"hint-ok"}:e.alreadyInstalled?{text:t("settings.herdrTraexAlreadyInstalled"),cls:"hint-ok"}:null}function Pe(e){return{groupNamePrefix:typeof e?.groupNamePrefix=="string"?e.groupNamePrefix:"",publicReadOnly:e?.publicReadOnly===!0,openTerminalInFeishu:e?.openTerminalInFeishu===!0,enableLocalCliOpen:e?.enableLocalCliOpen===!0,localCliOpenMode:e?.localCliOpenMode==="resume"?"resume":"attach",chatBotDiscovery:e?.chatBotDiscovery!==!1,herdrTraexPlugin:{enabled:e?.herdrTraexPlugin?.enabled===!0,source:typeof e?.herdrTraexPlugin?.source=="string"?e.herdrTraexPlugin.source:"",ref:typeof e?.herdrTraexPlugin?.ref=="string"?e.herdrTraexPlugin.ref:"",recommendedSource:typeof e?.herdrTraexPlugin?.recommendedSource=="string"?e.herdrTraexPlugin.recommendedSource:"",recommendedRef:typeof e?.herdrTraexPlugin?.recommendedRef=="string"?e.herdrTraexPlugin.recommendedRef:""},codexRpcInput:e?.codexRpcInput===!0,bypassCodexHookTrust:e?.bypassCodexHookTrust!==!1,codexNotifier:{enabled:e?.codexNotifier?.enabled===!0,targetBotAppId:typeof e?.codexNotifier?.targetBotAppId=="string"?e.codexNotifier.targetBotAppId:null,notifyWhen:e?.codexNotifier?.notifyWhen==="always"?"always":"locked_only",platformSupported:e?.codexNotifier?.platformSupported===!0,hookInstalled:e?.codexNotifier?.hookInstalled===!0,botOptions:Array.isArray(e?.codexNotifier?.botOptions)?e.codexNotifier.botOptions:[],targetDaemonOnline:e?.codexNotifier?.targetDaemonOnline===!0,pendingCount:Number.isSafeInteger(e?.codexNotifier?.pendingCount)?Math.max(0,e.codexNotifier.pendingCount):0,workerOnline:e?.codexNotifier?.workerOnline===!0,lastError:e?.codexNotifier?.lastError&&typeof e.codexNotifier.lastError.message=="string"?e.codexNotifier.lastError:null},hostOverloadAlert:{enabled:e?.hostOverloadAlert?.enabled===!0,targetBotAppId:typeof e?.hostOverloadAlert?.targetBotAppId=="string"?e.hostOverloadAlert.targetBotAppId:null,enterLoadRatio:typeof e?.hostOverloadAlert?.enterLoadRatio=="number"?e.hostOverloadAlert.enterLoadRatio:1.5,enterMemUsedFrac:typeof e?.hostOverloadAlert?.enterMemUsedFrac=="number"?e.hostOverloadAlert.enterMemUsedFrac:.92,botOptions:Array.isArray(e?.hostOverloadAlert?.botOptions)?e.hostOverloadAlert.botOptions:[],targetDaemonOnline:e?.hostOverloadAlert?.targetDaemonOnline===!0},noVisibleOutputHint:e?.noVisibleOutputHint===!0,vcMeetingAgent:{enabled:e?.vcMeetingAgent?.enabled!==!1,listenerBotAppId:typeof e?.vcMeetingAgent?.listenerBotAppId=="string"?e.vcMeetingAgent.listenerBotAppId:null,listenerBotOptions:Array.isArray(e?.vcMeetingAgent?.listenerBotOptions)?e.vcMeetingAgent.listenerBotOptions:[],larkCliVersion:e?.vcMeetingAgent?.larkCliVersion===void 0?void 0:e.vcMeetingAgent.larkCliVersion??null,larkCliMeetsRequirement:e?.vcMeetingAgent?.larkCliMeetsRequirement===!0,larkCliMinVersion:typeof e?.vcMeetingAgent?.larkCliMinVersion=="string"?e.vcMeetingAgent.larkCliMinVersion:void 0},repoPickerMode:e?.repoPickerMode==="repos"?"repos":"all",maintenance:e?.maintenance&&typeof e.maintenance=="object"?e.maintenance:{},localDevInstall:e?.localDevInstall===!0,autoUpdateSupported:e?.autoUpdateSupported!==!1,whiteboard:{enabled:e?.whiteboard?.enabled===!0},remoteAccess:e?.remoteAccess===!0,scheduleTimeZone:typeof e?.scheduleTimeZone=="string"?e.scheduleTimeZone:"",hostTimeZone:typeof e?.hostTimeZone=="string"&&e.hostTimeZone?e.hostTimeZone:"UTC",effectiveScheduleTimeZone:typeof e?.effectiveScheduleTimeZone=="string"&&e.effectiveScheduleTimeZone?e.effectiveScheduleTimeZone:typeof e?.scheduleTimeZone=="string"&&e.scheduleTimeZone?e.scheduleTimeZone:typeof e?.hostTimeZone=="string"&&e.hostTimeZone?e.hostTimeZone:"UTC"}}function We(e,t){let i=e?.[t]??{};return{enabled:i.enabled===!0,time:typeof i.time=="string"?i.time:"04:00"}}function De(e,t){return t(e==="npm-global"?"update.kindNpm":e==="pnpm-global"?"update.kindPnpm":e==="yarn-global"?"update.kindYarn":e==="bun-global"?"update.kindBun":e==="source-checkout"?"update.kindSource":"update.kindUnknown")}function Ze(){let e=A(),t=(0,p.useRef)(!1),i=(0,p.useRef)(new Set),[r,g]=(0,p.useState)(null),[f,m]=(0,p.useState)(!1),[u,y]=(0,p.useState)(null),[S,h]=(0,p.useState)(!0),[b,C]=(0,p.useState)(!1),[$,V]=(0,p.useState)(null),[R,W]=(0,p.useState)(null),[c,v]=(0,p.useState)(null),[k,x]=(0,p.useState)(null),[ee,z]=(0,p.useState)(null),[ie,B]=(0,p.useState)(null),[ae,Z]=(0,p.useState)(!1),[G,K]=(0,p.useState)(!0),[I,se]=(0,p.useState)(!1),[ue,Q]=(0,p.useState)(""),[ge,L]=(0,p.useState)(!1),[fe,D]=(0,p.useState)(null),le=(0,p.useCallback)(()=>{for(let s of i.current)window.clearTimeout(s);i.current.clear()},[]),oe=(0,p.useCallback)((s,o)=>{let d=window.setTimeout(()=>{i.current.delete(d),s()},o);return i.current.add(d),d},[]),J=(0,p.useCallback)(async()=>{try{let s=await fetch("/api/update/status"),o=await s.json().catch(()=>({}));if(!t.current)return;if(!s.ok){x(null),z(o?.error??`HTTP ${s.status}`);return}x(o),z(null)}catch(s){if(!t.current)return;x(null),z(s instanceof Error?s.message:String(s))}},[]),F=(0,p.useCallback)(async()=>{try{let s=await fetch("/api/settings"),o=await s.json().catch(()=>({}));if(!t.current)return;if(!s.ok){g(null),y(o?.error??`HTTP ${s.status}`),m(!0);return}g(Pe(o.settings)),h(o.authed===!0),C(o.bound===!0),y(null),m(!0)}catch(s){if(!t.current)return;g(null),y(s instanceof Error?s.message:String(s)),m(!0)}},[]);(0,p.useEffect)(()=>(t.current=!0,F(),()=>{t.current=!1,le()}),[le,F]),(0,p.useEffect)(()=>{f&&(L(!1),D(null),Z(!1),S&&J())},[S,J,f]);async function q(s,o,d){if(!r)return;let P=r;g(d(r)),V(s),W({text:e("settings.saving")});try{let w=await fetch("/api/settings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(o)}),E=await w.json().catch(()=>({}));if(!t.current)return;if(!w.ok||E.ok===!1)throw typeof E?.feishuLoginQr=="string"&&E.feishuLoginQr&&v(E.feishuLoginQr),new Error(E?.error??`HTTP ${w.status}`);v(null);let X=Pe(E.settings);g(X),be.publicReadOnly=X.publicReadOnly,ve.setScheduleTimeZone(X.effectiveScheduleTimeZone);let re=Fe(E.herdrTraexInstall,e);W(re??{text:e("settings.saved"),cls:"hint-ok"})}catch(w){if(!t.current)return;let E=!1;try{let re=await fetch("/api/settings"),Se=await re.json().catch(()=>({}));if(t.current&&re.ok&&Se?.settings){let me=Pe(Se.settings);g(me),be.publicReadOnly=me.publicReadOnly,ve.setScheduleTimeZone(me.effectiveScheduleTimeZone),E=!0}}catch{}if(!t.current)return;E||g(P);let X=w instanceof Error?w.message:String(w);W({text:E?`${e("settings.saveReconciled")}: ${X}`:`${e("settings.saveFailed")}: ${X}`,cls:"hint-warn-inline"})}finally{t.current&&V(null)}}async function pe(){B(null),K(!0),se(!1);try{let s=await fetch("/api/update/changelog"),o=await s.json().catch(()=>({}));if(!t.current)return;Q(typeof o?.releasesUrl=="string"?o.releasesUrl:""),s.ok?(B(Array.isArray(o.releases)?o.releases:[]),K(o.ok!==!1),se(o.rateLimited===!0)):(B([]),K(!1))}catch{if(!t.current)return;B([]),K(!1)}}function te(){let s=Date.now(),o=async()=>{if(t.current){if(Date.now()-s>9e4){L(!1),D({text:e("update.restartSlow"),cls:"hint-warn-inline"});return}try{let d=await fetch("/__health",{cache:"no-store"});if(!t.current)return;if(d.ok){location.reload();return}}catch{}t.current&&oe(()=>{o()},2e3)}};oe(()=>{o()},3e3)}async function U(s){L(!0),D({text:e("update.restarting")});try{let o=await fetch("/api/update/restart",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(s?{update:s}:{})}),d=await o.json().catch(()=>({}));if(!o.ok||d.ok===!1)throw new Error(String(d.detail??d.error??`HTTP ${o.status}`));if(!t.current)return}catch(o){if(!t.current)return;L(!1),D({text:e("update.restartFailed",{detail:o instanceof Error?o.message:String(o)}),cls:"hint-warn-inline"});return}te()}async function ne(){let s=k;if(!s)return;if(!s.node.ok){window.alert(e("update.nodeTooOldAlert",{version:s.node.version,required:s.node.required}));return}if(!s.updateSupported||!s.updateCommand){window.alert(e("update.unsupportedInstall"));return}if(s.installs.multiple){let d=s.installs.entries.map(P=>`\u2022 ${P.binPath} (${De(P.kind,e)})`).join(`
|
|
2
|
+
`);if(!window.confirm(e("update.confirmMultiInstall",{paths:d})))return}let o=s.latest?e("update.confirmUpdate",{version:`v${s.latest}`,command:s.updateCommand}):e("update.confirmUpdateNoVer",{command:s.updateCommand});if(window.confirm(o)){L(!0),D({text:e("update.updating",{command:s.updateCommand})});try{let d=await fetch("/api/update/run",{method:"POST"}),P=await d.json().catch(()=>({}));if(!t.current)return;if(!d.ok||P.ok===!1){let w=P?.detail??P?.error??`HTTP ${d.status}`;L(!1),D({text:e("update.updateFailed",{detail:w}),cls:"hint-warn-inline"});return}P.changed?(L(!1),D({text:e("update.updatedChanged",{old:`v${P.oldVersion}`,new:`v${P.newVersion}`}),cls:"hint-ok"}),window.confirm(e("update.confirmRestart"))?await U({oldVersion:P.oldVersion,newVersion:P.newVersion}):t.current&&D({text:e("update.noRestartHint"),cls:"hint-ok"})):(L(!1),D({text:e("update.alreadyLatestRun",{version:`v${P.newVersion}`}),cls:"hint-ok"}),await J())}catch(d){if(!t.current)return;L(!1),D({text:e("update.updateFailed",{detail:d instanceof Error?d.message:String(d)}),cls:"hint-warn-inline"})}}}let l=r?(0,n.jsx)(Ke,{settings:r,canWrite:S,bound:b,savingKey:$,message:R,updateBlock:(0,n.jsx)(Ye,{canWrite:S,status:k,statusError:ee,changelog:ie,changelogOpen:ae,changelogOk:G,changelogRateLimited:I,releasesUrl:ue,busy:ge,message:fe,onCheck:()=>{x(null),B(null),Z(!1),D(null),z(null),J()},onToggleChangelog:()=>{let s=!ae;Z(s),s&&ie===null&&pe()},onUpdate:()=>{ne()},onRestart:()=>{window.confirm(e("update.confirmPlainRestart"))&&U(null)}}),feishuLoginQr:c,onCloseFeishuLoginQr:()=>v(null),onSave:q}):u?(0,n.jsxs)("p",{className:"hint-warn",children:[e("settings.loadFailed"),": ",u]}):(0,n.jsx)(ce,{label:e("settings.loading")});return(0,n.jsxs)("section",{className:"page settings-page",children:[(0,n.jsx)("div",{className:"page-heading",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.settings")}),(0,n.jsx)("h1",{children:e("settings.title")})]})}),l]})}function Ke(e){let t=A(),{settings:i,canWrite:r,bound:g,savingKey:f}=e,m=!r,u=We(i.maintenance,"autoUpdate"),y=!r||i.localDevInstall||!i.autoUpdateSupported,S=!r||i.maintenance.autoUpdate?.enabled!==!0,h=(c,v)=>{e.onSave(c,{[c]:v},k=>({...k,[c]:v}))},b=c=>e.onSave("herdrTraexPlugin",{herdrTraexPlugin:c},v=>({...v,herdrTraexPlugin:{...v.herdrTraexPlugin,...c}})),C=c=>e.onSave("codexNotifier",{codexNotifier:c},v=>({...v,codexNotifier:{...v.codexNotifier,...c}})),$=c=>e.onSave("hostOverloadAlert",{hostOverloadAlert:c},v=>({...v,hostOverloadAlert:{...v.hostOverloadAlert,...c}})),V=(0,p.useMemo)(()=>[{value:"all",label:t("settings.repoPickerModeAll")},{value:"repos",label:t("settings.repoPickerModeRepos")}],[t]),R=(0,p.useMemo)(()=>[{value:"attach",label:t("settings.localCliOpenModeAttach")},{value:"resume",label:t("settings.localCliOpenModeResume")}],[t]),W=(0,p.useMemo)(()=>[{value:"",label:t("settings.vcMeetingListenerBotAuto")},...i.vcMeetingAgent.listenerBotOptions.map(c=>{let v=c.botName||c.larkAppId,k=c.cliId?` \xB7 ${c.cliId}`:"",x=[c.vcMeetingAgentEnabled===!0?void 0:t("settings.vcMeetingListenerBotDisabled"),c.hasLarkCliProfile===!0?void 0:t("settings.vcMeetingListenerBotNoProfile")].filter(Boolean),ee=x.length>0?` \xB7 ${x.join(" \xB7 ")}`:"";return{value:c.larkAppId,label:`${v}${k}${ee}`}})],[i.vcMeetingAgent.listenerBotOptions,t]);return(0,n.jsxs)("div",{className:"settings-layout",children:[r?null:(0,n.jsx)("article",{className:"bd-card settings-card settings-alert-card",children:(0,n.jsx)("p",{className:"hint-warn",children:t("settings.readOnlyVisitor")})}),(0,n.jsx)(Ce,{title:t("settings.moduleGeneral"),description:t("settings.moduleGeneralHelp"),children:(0,n.jsxs)(ke,{className:"settings-group-main",children:[(0,n.jsxs)(_,{title:t("settings.sectionAccess"),children:[(0,n.jsx)(M,{title:t("settings.publicReadOnly"),help:t("settings.publicReadOnlyHelp"),checked:i.publicReadOnly,disabled:m||f==="publicReadOnly",onChange:c=>h("publicReadOnly",c)}),g?(0,n.jsx)(M,{title:t("settings.remoteAccess"),help:t("settings.remoteAccessHelp"),checked:i.remoteAccess,disabled:m||f==="remoteAccess",onChange:c=>h("remoteAccess",c)}):null]}),(0,n.jsxs)(_,{title:t("settings.sectionCards"),children:[(0,n.jsx)(M,{title:t("settings.openTerminalInFeishu"),help:t("settings.openTerminalInFeishuHelp"),checked:i.openTerminalInFeishu,disabled:m||f==="openTerminalInFeishu",onChange:c=>h("openTerminalInFeishu",c)}),(0,n.jsx)(M,{title:t("settings.enableLocalCliOpen"),help:t("settings.enableLocalCliOpenHelp"),checked:i.enableLocalCliOpen,disabled:m||f==="enableLocalCliOpen",onChange:c=>h("enableLocalCliOpen",c)}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.localCliOpenModeHelp"),children:t("settings.localCliOpenMode")}),(0,n.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.localCliOpenMode"),disabled:m||!i.enableLocalCliOpen||f==="localCliOpenMode",value:i.localCliOpenMode,label:H(R,i.localCliOpenMode),options:R,onChange:c=>{e.onSave("localCliOpenMode",{localCliOpenMode:c},v=>({...v,localCliOpenMode:c}))}})]})]}),(0,n.jsx)(_,{title:t("settings.sectionGroupCreation"),children:(0,n.jsx)(Je,{value:i.groupNamePrefix,disabled:m||f==="groupNamePrefix",onSave:c=>e.onSave("groupNamePrefix",{groupNamePrefix:c},v=>({...v,groupNamePrefix:c}))})}),(0,n.jsxs)(_,{title:t("settings.sectionExperimental"),children:[(0,n.jsx)(M,{title:t("settings.chatBotDiscovery"),help:t("settings.chatBotDiscoveryHelp"),checked:i.chatBotDiscovery,disabled:m||f==="chatBotDiscovery",onChange:c=>h("chatBotDiscovery",c)}),(0,n.jsx)(M,{title:t("settings.herdrTraexPlugin"),help:t("settings.herdrTraexPluginHelp"),checked:i.herdrTraexPlugin.enabled,disabled:m||f==="herdrTraexPlugin",onChange:c=>b({enabled:c})}),i.herdrTraexPlugin.enabled?(0,n.jsx)(Xe,{value:i.herdrTraexPlugin,disabled:m||f==="herdrTraexPlugin",onSave:c=>b(c)}):null,(0,n.jsx)(M,{title:t("settings.codexRpcInput"),help:t("settings.codexRpcInputHelp"),checked:i.codexRpcInput,disabled:m||f==="codexRpcInput",onChange:c=>h("codexRpcInput",c)}),(0,n.jsx)(M,{title:t("settings.bypassCodexHookTrust"),help:t("settings.bypassCodexHookTrustHelp"),checked:i.bypassCodexHookTrust,disabled:m||f==="bypassCodexHookTrust",onChange:c=>h("bypassCodexHookTrust",c)}),(0,n.jsx)(ze,{value:i.codexNotifier,disabled:m,saving:f==="codexNotifier",onSave:C}),(0,n.jsx)(M,{title:t("settings.noVisibleOutputHint"),help:t("settings.noVisibleOutputHintHelp"),checked:i.noVisibleOutputHint,disabled:m||f==="noVisibleOutputHint",onChange:c=>h("noVisibleOutputHint",c)})]}),(0,n.jsx)(_,{title:t("settings.sectionHostOverloadAlert"),children:(0,n.jsx)(qe,{value:i.hostOverloadAlert,disabled:m,saving:f==="hostOverloadAlert",onSave:$})}),(0,n.jsx)(_,{title:t("settings.sectionWhiteboard"),children:(0,n.jsx)(M,{title:t("settings.whiteboardEnable"),help:t("settings.whiteboardEnableHelp"),checked:i.whiteboard.enabled,disabled:m||f==="whiteboard",onChange:c=>{e.onSave("whiteboard",{whiteboard:{enabled:c}},v=>({...v,whiteboard:{enabled:c}}))}})}),(0,n.jsx)(_,{title:t("settings.sectionRepoPicker"),children:(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.repoPickerModeHelp"),children:t("settings.repoPickerMode")}),(0,n.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.repoPickerMode"),disabled:m||f==="repoPickerMode",value:i.repoPickerMode,label:H(V,i.repoPickerMode),options:V,onChange:c=>{e.onSave("repoPickerMode",{repoPickerMode:c},v=>({...v,repoPickerMode:c}))}})]})}),(0,n.jsx)(_,{title:t("settings.sectionSchedule"),children:(0,n.jsx)(Ge,{value:i.scheduleTimeZone,host:i.hostTimeZone,effective:i.effectiveScheduleTimeZone,disabled:m||f==="scheduleTimeZone",onSave:c=>{e.onSave("scheduleTimeZone",{scheduleTimeZone:c},v=>({...v,scheduleTimeZone:c??""}))}})})]})}),(0,n.jsx)(Ce,{className:"settings-module-meeting",title:t("settings.moduleMeeting"),description:t("settings.moduleMeetingHelp"),children:(0,n.jsx)(ke,{className:"settings-group-meeting",children:(0,n.jsxs)(_,{className:"settings-vc-block",title:t("settings.sectionVcMeetingAgent"),children:[(0,n.jsx)(M,{title:t("settings.vcMeetingAgent"),help:t("settings.vcMeetingAgentHelp"),checked:i.vcMeetingAgent.enabled,disabled:m||f==="vcMeetingAgent",onChange:c=>{e.onSave("vcMeetingAgent",{vcMeetingAgent:{enabled:c}},v=>({...v,vcMeetingAgent:{...v.vcMeetingAgent,enabled:c}}))}}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.vcMeetingListenerBotHelp"),children:t("settings.vcMeetingListenerBot")}),(0,n.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.vcMeetingListenerBot"),disabled:m||f==="vcMeetingAgent",value:i.vcMeetingAgent.listenerBotAppId??"",label:H(W,i.vcMeetingAgent.listenerBotAppId??""),options:W,onChange:c=>{let v=c||null;e.onSave("vcMeetingAgent",{vcMeetingAgent:{listenerBotAppId:v}},k=>({...k,vcMeetingAgent:{...k.vcMeetingAgent,listenerBotAppId:v}}))}})]}),(0,n.jsx)(je,{settings:i.vcMeetingAgent}),(0,n.jsx)(Be,{enabled:i.vcMeetingAgent.enabled,canWrite:r,listenerBotAppId:i.vcMeetingAgent.listenerBotAppId,listenerBotOptions:i.vcMeetingAgent.listenerBotOptions}),e.feishuLoginQr?(0,n.jsxs)("div",{className:"settings-feishu-login",children:[(0,n.jsx)("button",{type:"button",className:"settings-feishu-login-close","aria-label":t("settings.feishuLoginClose"),title:t("settings.feishuLoginClose"),onClick:e.onCloseFeishuLoginQr}),(0,n.jsx)("p",{children:t("settings.feishuLoginRequired")}),(0,n.jsx)("img",{src:e.feishuLoginQr,alt:t("settings.feishuLoginQrAlt")})]}):null]})})}),(0,n.jsx)(Ce,{title:t("settings.moduleSystem"),description:t("settings.moduleSystemHelp"),children:(0,n.jsxs)(ke,{className:"settings-group-ops",children:[(0,n.jsx)(_,{title:t("settings.sectionMaintenance"),titleExtra:i.localDevInstall?(0,n.jsx)("span",{className:"settings-title-note",children:t("settings.autoUpdateLocalDev")}):i.autoUpdateSupported?null:(0,n.jsx)("span",{className:"settings-title-note",children:t("settings.autoUpdateUnsupportedInstall")}),children:(0,n.jsxs)("div",{className:"settings-maintenance-grid",children:[(0,n.jsxs)("div",{className:"settings-maintenance-update",children:[(0,n.jsx)(M,{title:t("settings.autoUpdate"),help:t("settings.autoUpdateHelp"),checked:u.enabled,disabled:y||f==="autoUpdate",onChange:c=>{let v={enabled:c,time:u.time};e.onSave("autoUpdate",{maintenance:{autoUpdate:v}},k=>({...k,maintenance:{...k.maintenance,autoUpdate:v}}))}}),(0,n.jsx)("div",{className:"maint-time",children:(0,n.jsxs)("label",{children:[(0,n.jsx)("span",{children:t("settings.maintenanceTime")}),(0,n.jsx)("input",{type:"time",value:u.time,disabled:y||f==="autoUpdate",onChange:c=>{let v={enabled:u.enabled,time:c.currentTarget.value||"04:00"};e.onSave("autoUpdate",{maintenance:{autoUpdate:v}},k=>({...k,maintenance:{...k.maintenance,autoUpdate:v}}))}})]})})]}),(0,n.jsx)("div",{className:"settings-maintenance-restart",children:(0,n.jsx)(M,{title:t("settings.autoRestart"),help:t("settings.autoRestartHelp"),checked:i.maintenance.autoRestart?.enabled===!0,disabled:S||f==="autoRestart",onChange:c=>{let v={enabled:c};e.onSave("autoRestart",{maintenance:{autoRestart:v}},k=>({...k,maintenance:{...k.maintenance,autoRestart:v}}))}})})]})}),e.updateBlock]})}),(0,n.jsx)("div",{className:"settings-status-row",children:(0,n.jsx)("span",{className:`oncall-status ${e.message?.cls??""}`,"data-settings-status":!0,children:e.message?.text??""})})]})}function Ce(e){let t=["settings-module",e.className].filter(Boolean).join(" ");return(0,n.jsxs)("section",{className:t,children:[(0,n.jsxs)("header",{className:"settings-module-heading",children:[(0,n.jsx)("h2",{children:e.title}),(0,n.jsx)("p",{children:e.description})]}),e.children]})}function je(e){let t=A(),i=e.settings.larkCliVersion,r=typeof i=="string"&&e.settings.larkCliMeetsRequirement===!0,g=r?t("settings.larkCliReady",{version:i}):typeof i=="string"?t("settings.larkCliOutdated",{version:i,minimum:e.settings.larkCliMinVersion??"-"}):t("settings.larkCliMissing");return(0,n.jsxs)("div",{className:`settings-lark-cli-status ${r?"is-ready":"is-warning"}`,children:[(0,n.jsx)("span",{"aria-hidden":"true"}),(0,n.jsx)("strong",{children:g}),r?null:(0,n.jsx)("code",{children:"npm i -g @larksuite/cli@latest"})]})}function ke(e){let t=["settings-group",e.className].filter(Boolean).join(" ");return(0,n.jsx)("section",{className:t,children:(0,n.jsx)("article",{className:"bd-card settings-group-card",children:e.children})})}function _(e){let t=["settings-block",e.className].filter(Boolean).join(" ");return(0,n.jsx)("section",{className:t,children:(0,n.jsxs)("article",{className:"bd-card settings-card",children:[(0,n.jsxs)("div",{className:"settings-block-title-row",children:[(0,n.jsx)("h2",{className:"bd-section-title",children:e.title}),e.titleExtra?(0,n.jsx)("div",{className:"settings-block-title-extra",children:e.titleExtra}):null]}),e.children]})})}function ze(e){let t=A(),[i,r]=(0,p.useState)(!1),g=(0,p.useRef)(!1),f=(0,p.useMemo)(()=>[{value:"",label:t("settings.codexNotifierTargetPlaceholder")},...e.value.botOptions.map(C=>({value:C.larkAppId,label:[C.botName||C.larkAppId,C.cliId].filter(Boolean).join(" \xB7 ")}))],[e.value.botOptions,t]),m=(0,p.useMemo)(()=>[{value:"locked_only",label:t("settings.codexNotifierLockedOnly")},{value:"always",label:t("settings.codexNotifierAlways")}],[t]),u=e.value.botOptions.find(C=>C.larkAppId===e.value.targetBotAppId),y=!e.value.targetBotAppId||u?.recipientConfigured!==!0||u?.recipientVerified!==!0||!e.value.targetDaemonOnline||!e.value.platformSupported&&e.value.notifyWhen==="locked_only",S=e.value.enabled||i,h=e.disabled||e.saving;(0,p.useEffect)(()=>{if(!i||e.value.enabled||y){g.current=!1;return}h||g.current||(g.current=!0,e.onSave({enabled:!0}))},[h,y,i,e.onSave,e.value.enabled]),(0,p.useEffect)(()=>{e.value.enabled&&i&&r(!1)},[i,e.value.enabled]);let b=C=>{if(!C){g.current=!1,r(!1),e.value.enabled&&e.onSave({enabled:!1});return}if(y){r(!0);return}e.onSave({enabled:!0})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(M,{title:t("settings.codexNotifier"),help:t("settings.codexNotifierHelp"),checked:e.value.enabled||i,disabled:h,onChange:b}),S?(0,n.jsxs)("div",{className:"settings-codex-notifier-details",children:[e.value.enabled?null:(0,n.jsx)("p",{className:"settings-subfield-hint",children:t("settings.codexNotifierEnablePending")}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.codexNotifierTargetHelp"),children:t("settings.codexNotifierTarget")}),(0,n.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.codexNotifierTarget"),disabled:h,searchable:!0,value:e.value.targetBotAppId??"",label:H(f,e.value.targetBotAppId??""),options:f,onChange:C=>{e.onSave({targetBotAppId:C||null})}})]}),u?.recipientHint?(0,n.jsx)("p",{className:"settings-subfield-hint",children:t("settings.codexNotifierRecipient",{recipient:u.recipientHint})}):null,(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.codexNotifierNotifyWhenHelp"),children:t("settings.codexNotifierNotifyWhen")}),(0,n.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.codexNotifierNotifyWhen"),disabled:h,value:e.value.notifyWhen,label:H(m,e.value.notifyWhen),options:m,onChange:C=>{e.onSave({notifyWhen:C})}})]}),e.value.targetBotAppId?u?.recipientConfigured!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierRecipientMissing")}):e.value.targetDaemonOnline?u?.recipientVerified!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierRecipientUnverified")}):!e.value.platformSupported&&e.value.notifyWhen==="locked_only"?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierUnsupported")}):e.value.enabled?e.value.hookInstalled?e.value.workerOnline?e.value.lastError?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierLastError",{error:e.value.lastError.message})}):e.value.pendingCount>0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierPending",{count:e.value.pendingCount})}):null:(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierWorkerPending")}):(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierHookPending")}):null:(0,n.jsx)("p",{className:"hint-warn-inline",children:t(e.value.enabled?"settings.codexNotifierDaemonOffline":"settings.codexNotifierTargetOffline")}):(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierTargetRequired")})]}):null]})}function qe(e){let t=A(),i=e.disabled||e.saving,r=(0,p.useMemo)(()=>[{value:"",label:t("settings.hostOverloadAlertTargetPlaceholder")},...e.value.botOptions.map(b=>({value:b.larkAppId,label:[b.botName||b.larkAppId,b.cliId].filter(Boolean).join(" \xB7 ")}))],[e.value.botOptions,t]),g=e.value.botOptions.find(b=>b.larkAppId===e.value.targetBotAppId),[f,m]=(0,p.useState)(String(e.value.enterLoadRatio)),[u,y]=(0,p.useState)(String(Math.round(e.value.enterMemUsedFrac*100)));(0,p.useEffect)(()=>{m(String(e.value.enterLoadRatio))},[e.value.enterLoadRatio]),(0,p.useEffect)(()=>{y(String(Math.round(e.value.enterMemUsedFrac*100)))},[e.value.enterMemUsedFrac]);let S=()=>{let b=Number(f);Number.isFinite(b)&&b>0&&b!==e.value.enterLoadRatio?e.onSave({enterLoadRatio:b}):m(String(e.value.enterLoadRatio))},h=()=>{let b=Number(u),C=b/100;Number.isFinite(b)&&b>0&&b<=100&&C!==e.value.enterMemUsedFrac?e.onSave({enterMemUsedFrac:C}):y(String(Math.round(e.value.enterMemUsedFrac*100)))};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(M,{title:t("settings.hostOverloadAlert"),help:t("settings.hostOverloadAlertHelp"),checked:e.value.enabled,disabled:i||!e.value.enabled&&!e.value.targetBotAppId,onChange:b=>{e.onSave({enabled:b})}}),(0,n.jsxs)("div",{className:"settings-codex-notifier-details",children:[(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.hostOverloadAlertTargetHelp"),children:t("settings.hostOverloadAlertTarget")}),(0,n.jsx)(O,{className:"settings-field-menu",ariaLabel:t("settings.hostOverloadAlertTarget"),disabled:i,searchable:!0,value:e.value.targetBotAppId??"",label:H(r,e.value.targetBotAppId??""),options:r,onChange:b=>{e.onSave({targetBotAppId:b||null})}})]}),g?.recipientHint?(0,n.jsx)("p",{className:"settings-subfield-hint",children:t("settings.hostOverloadAlertRecipient",{recipient:g.recipientHint})}):null,(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.hostOverloadAlertEnterLoadHelp"),children:t("settings.hostOverloadAlertEnterLoad")}),(0,n.jsx)("input",{type:"number",min:.1,step:.1,className:"settings-text-input",value:f,disabled:i,onChange:b=>m(b.currentTarget.value),onBlur:S,onKeyDown:b=>{b.key==="Enter"&&S()}})]}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.hostOverloadAlertEnterMemHelp"),children:t("settings.hostOverloadAlertEnterMem")}),(0,n.jsx)("input",{type:"number",min:1,max:100,step:1,className:"settings-text-input",value:u,disabled:i,onChange:b=>y(b.currentTarget.value),onBlur:h,onKeyDown:b=>{b.key==="Enter"&&h()}})]}),e.value.targetBotAppId?g?.recipientConfigured!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.hostOverloadAlertRecipientMissing")}):e.value.targetDaemonOnline?g?.recipientVerified!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.hostOverloadAlertRecipientUnverified")}):null:(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.hostOverloadAlertTargetOffline")}):(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.hostOverloadAlertTargetRequired")})]})]})}function Ge(e){let t=A(),i=e.value.trim(),r=e.effective||e.value.trim()||e.host,g=(0,p.useMemo)(()=>{let f=i&&!ye.includes(i)?[i,...ye]:ye;return[{value:"",label:t("settings.scheduleTimeZoneHost",{host:e.host})},...f.map(m=>({value:m,label:m}))]},[e.host,t,i]);return(0,n.jsxs)("div",{className:"settings-field-row settings-timezone-row",children:[(0,n.jsx)(T,{help:t("settings.scheduleTimeZoneHelp",{host:e.host,effective:r}),children:t("settings.scheduleTimeZone")}),(0,n.jsx)(O,{className:"settings-field-menu settings-timezone-menu",ariaLabel:t("settings.scheduleTimeZone"),value:i,label:H(g,i),options:g,disabled:e.disabled,onChange:f=>e.onSave(f===""?null:f)})]})}function M(e){return(0,n.jsxs)("label",{className:"toggle-row",children:[(0,n.jsx)("input",{type:"checkbox",checked:e.checked,disabled:e.disabled,onChange:t=>e.onChange(t.currentTarget.checked)}),(0,n.jsx)("span",{className:"switch","aria-hidden":"true"}),(0,n.jsx)("span",{className:"toggle-tx",children:(0,n.jsx)("strong",{children:(0,n.jsx)(T,{className:"settings-toggle-title",help:e.help,children:e.title})})})]})}var Qe=32;function Je(e){let t=A(),[i,r]=(0,p.useState)(e.value);(0,p.useEffect)(()=>r(e.value),[e.value]);let g=i.trim().length>0,f=i===""||g,m=i!==e.value,u=()=>{e.disabled||!m||!f||e.onSave(i)};return(0,n.jsxs)("div",{className:"settings-subfield settings-group-prefix-editor",children:[(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.groupNamePrefixHelp"),children:t("settings.groupNamePrefix")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:i,maxLength:Qe,placeholder:t("settings.groupNamePrefixPlaceholder"),disabled:e.disabled,onChange:y=>r(y.currentTarget.value),onKeyDown:y=>{y.key==="Enter"&&(y.preventDefault(),u())}})]}),(0,n.jsx)("p",{className:"settings-subfield-hint","data-group-name-prefix-preview":!0,children:g?t("settings.groupNamePrefixPreview",{name:`${i}${t("settings.groupNamePrefixPreviewName")}`}):t("settings.groupNamePrefixDisabled")}),(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",className:"page-primary-action",disabled:e.disabled||!m||!f,onClick:u,children:t("settings.groupNamePrefixSave")})})]})}function Xe(e){let t=A(),[i,r]=(0,p.useState)(e.value.source),[g,f]=(0,p.useState)(e.value.ref);(0,p.useEffect)(()=>{r(e.value.source),f(e.value.ref)},[e.value.source,e.value.ref]);let m=i.trim(),u=g.trim(),y=m!==e.value.source.trim()||u!==e.value.ref.trim(),S=()=>{e.disabled||!y||e.onSave({source:m,ref:u})};return(0,n.jsxs)("div",{className:"settings-subfield",children:[(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.herdrTraexPluginSourceHelp"),children:t("settings.herdrTraexPluginSource")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:i,placeholder:t("settings.herdrTraexPluginSourcePlaceholder"),disabled:e.disabled,onChange:h=>r(h.currentTarget.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),S())}})]}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(T,{help:t("settings.herdrTraexPluginRefHelp"),children:t("settings.herdrTraexPluginRef")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:g,placeholder:t("settings.herdrTraexPluginRefPlaceholder"),disabled:e.disabled,onChange:h=>f(h.currentTarget.value),onKeyDown:h=>{h.key==="Enter"&&(h.preventDefault(),S())}})]}),m?null:(0,n.jsx)("p",{className:"hint-warn-inline settings-subfield-hint",children:t("settings.herdrTraexPluginSourceRequired")}),e.value.recommendedSource&&(m!==e.value.recommendedSource||u!==e.value.recommendedRef)?(0,n.jsxs)("p",{className:"settings-subfield-hint",children:[t("settings.herdrTraexPluginRecommended")," ",(0,n.jsxs)("button",{type:"button",className:"settings-inline-link",disabled:e.disabled,onClick:()=>{r(e.value.recommendedSource),f(e.value.recommendedRef)},children:[e.value.recommendedSource,e.value.recommendedRef?` @ ${e.value.recommendedRef}`:""]})]}):null,(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",className:"page-primary-action",disabled:e.disabled||!y,onClick:S,children:t("settings.herdrTraexPluginSave")})})]})}function Ye(e){let t=A(),i;if(!e.canWrite)i=(0,n.jsx)("p",{className:"hint-warn",children:t("update.loginRequired")});else if(e.statusError)i=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{className:"hint-warn",children:[t("update.checkFailed"),": ",e.statusError]}),(0,n.jsx)("div",{className:"update-actions",children:(0,n.jsx)("button",{type:"button","data-up":"check",onClick:e.onCheck,children:t("update.btnCheck")})})]});else if(!e.status)i=(0,n.jsx)(ce,{label:t("update.loading"),compact:!0});else{let r=e.status,g=r.localDevInstall||!r.updateSupported||e.busy;i=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{className:"update-version",children:[(0,n.jsxs)("span",{children:[t("update.current"),": ",(0,n.jsxs)("strong",{children:["v",r.current]})]})," ",(0,n.jsx)(tt,{status:r})]}),r.node.ok?null:(0,n.jsx)("p",{className:"hint-warn",children:t("update.nodeWarn",{version:r.node.version,required:r.node.required})}),!r.localDevInstall&&!r.updateSupported?(0,n.jsx)("p",{className:"hint-warn",children:t("update.unsupportedInstall")}):null,r.installs.multiple?(0,n.jsx)(nt,{entries:r.installs.entries}):null,(0,n.jsxs)("div",{className:"update-actions",children:[(0,n.jsx)("button",{type:"button","data-up":"check",disabled:e.busy,onClick:e.onCheck,children:t("update.btnCheck")}),(0,n.jsx)("button",{type:"button","data-up":"changelog",disabled:e.busy,onClick:e.onToggleChangelog,children:e.changelogOpen?t("update.btnChangelogHide"):t("update.btnChangelog")}),(0,n.jsx)("button",{type:"button",className:"page-primary-action","data-up":"update",disabled:g,onClick:e.onUpdate,children:t("update.btnUpdate")}),(0,n.jsx)("button",{type:"button","data-up":"restart",disabled:e.busy,onClick:e.onRestart,children:t("update.btnRestart")})]}),r.cliUpdates?.length?(0,n.jsx)(et,{entries:r.cliUpdates}):null,e.changelogOpen?(0,n.jsx)(it,{changelog:e.changelog,ok:e.changelogOk,rateLimited:e.changelogRateLimited,releasesUrl:e.releasesUrl}):null,e.message?(0,n.jsx)("p",{className:`oncall-status ${e.message.cls??""}`,children:e.message.text}):null]})}return(0,n.jsx)(_,{className:"settings-update-block",title:t("update.section"),titleExtra:e.status?.localDevInstall?(0,n.jsx)("span",{className:"settings-title-note",children:t("update.localDev")}):e.status&&!e.status.updateSupported?(0,n.jsx)("span",{className:"settings-title-note",children:t("update.unsupportedInstall")}):null,children:i})}function et(e){let t=A();return(0,n.jsxs)("div",{className:"cli-runtime-updates",children:[(0,n.jsx)("strong",{children:t("update.runtimeTitle")}),(0,n.jsx)("ul",{children:e.entries.map(i=>(0,n.jsxs)("li",{className:i.updateAvailable?"is-behind":"",children:[(0,n.jsxs)("div",{className:"cli-runtime-update-head",children:[(0,n.jsx)("span",{children:"Codex"}),i.updateAvailable&&i.latest?(0,n.jsx)("span",{className:"update-badge update-badge-new",children:t("update.runtimeAvailable",{current:i.current??"?",latest:i.latest})}):i.latest?(0,n.jsx)("span",{className:"update-badge update-badge-ok",children:t("update.upToDate")}):(0,n.jsx)("span",{className:"hint-warn-inline",children:t("update.checkUnavailable")})]}),(0,n.jsx)("code",{children:i.binPath}),i.updateAvailable?(0,n.jsxs)("small",{children:[t("update.runtimeCommand"),": ",(0,n.jsx)("code",{children:i.updateCommand})]}):null]},`${i.cliId}:${i.binPath}`))}),(0,n.jsx)("p",{className:"settings-help",children:t("update.runtimeHelp")})]})}function tt(e){let t=A(),i=e.status;return i.latest?i.behind?(0,n.jsx)("span",{className:"update-badge update-badge-new",children:t("update.newAvailable",{version:`v${i.latest}`})}):(0,n.jsx)("span",{className:"update-badge update-badge-ok",children:t("update.upToDate")}):(0,n.jsx)("span",{className:"hint-warn-inline",children:t("update.checkUnavailable")})}function nt(e){let t=A();return(0,n.jsxs)("div",{className:"hint-warn",children:[(0,n.jsx)("p",{children:t("update.multiInstallWarn")}),(0,n.jsx)("ul",{className:"update-install-list",children:e.entries.map(i=>(0,n.jsxs)("li",{children:[(0,n.jsx)("code",{children:i.binPath})," \u2192 ",De(i.kind,t)," ",(0,n.jsx)("small",{children:i.root})]},`${i.binPath}:${i.root}`))})]})}function it(e){let t=A();if(e.changelog===null)return(0,n.jsx)(ce,{label:t("update.changelogLoading"),compact:!0});if(!e.ok){let i=e.rateLimited?t("update.changelogRateLimited"):t("update.changelogFailed");return(0,n.jsxs)("p",{className:"hint-warn-inline",children:[i,e.releasesUrl?(0,n.jsxs)(n.Fragment,{children:[" ",(0,n.jsx)("a",{href:e.releasesUrl,target:"_blank",rel:"noopener",children:t("update.changelogViewOnGitHub")})]}):null]})}return e.changelog.length===0?(0,n.jsx)("p",{className:"empty",children:t("update.changelogEmpty")}):(0,n.jsx)("div",{className:"update-changelog",children:e.changelog.map(i=>{let r=i.name&&i.name!==`v${i.version}`?i.name:"",g=i.publishedAt?new Date(i.publishedAt).toLocaleDateString():"";return(0,n.jsxs)("details",{className:"update-release",open:!0,children:[(0,n.jsxs)("summary",{children:[(0,n.jsxs)("strong",{children:["v",i.version]})," ",r," ",(0,n.jsx)("small",{children:g})," ",(0,n.jsx)("a",{href:i.url,target:"_blank",rel:"noopener",children:"\u2197"})]}),(0,n.jsx)("pre",{className:"update-release-body",children:i.body||""})]},i.version)})})}function ft(e){return Oe(e,(0,n.jsx)(Ze,{}))}export{ze as CodexNotifierSettingsEditor,Je as GroupNamePrefixRow,qe as HostOverloadAlertSettingsEditor,Ge as TimeZoneRow,ft as renderSettingsPage};
|