botmux 3.16.0 → 3.17.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/riff-backend.d.ts +84 -1
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +202 -19
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +8 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +15 -0
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +61 -7
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +80 -9
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +62 -4
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +240 -27
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +4 -2
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +27 -0
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +28 -0
- 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 +51 -23
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/dsh-tui.d.ts +24 -0
- package/dist/adapters/cli/dsh-tui.d.ts.map +1 -0
- package/dist/adapters/cli/dsh-tui.js +99 -0
- package/dist/adapters/cli/dsh-tui.js.map +1 -0
- package/dist/adapters/cli/dsh.d.ts.map +1 -1
- package/dist/adapters/cli/dsh.js +15 -9
- package/dist/adapters/cli/dsh.js.map +1 -1
- package/dist/adapters/cli/fs-policy.d.ts +98 -1
- package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
- package/dist/adapters/cli/fs-policy.js +182 -7
- package/dist/adapters/cli/fs-policy.js.map +1 -1
- package/dist/adapters/cli/grok.js +16 -18
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/model-catalog-json.d.ts +17 -0
- package/dist/adapters/cli/model-catalog-json.d.ts.map +1 -0
- package/dist/adapters/cli/model-catalog-json.js +43 -0
- package/dist/adapters/cli/model-catalog-json.js.map +1 -0
- package/dist/adapters/cli/oh-my-pi.d.ts +2 -0
- package/dist/adapters/cli/oh-my-pi.d.ts.map +1 -1
- package/dist/adapters/cli/oh-my-pi.js +45 -13
- package/dist/adapters/cli/oh-my-pi.js.map +1 -1
- package/dist/adapters/cli/opencode.js +1 -1
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +6 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/relay.d.ts.map +1 -1
- package/dist/adapters/cli/relay.js +7 -0
- package/dist/adapters/cli/relay.js.map +1 -1
- package/dist/adapters/cli/seed.d.ts.map +1 -1
- package/dist/adapters/cli/seed.js +6 -0
- package/dist/adapters/cli/seed.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +20 -14
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts +4 -0
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +153 -0
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +42 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/autostart.d.ts +6 -0
- package/dist/autostart.d.ts.map +1 -1
- package/dist/autostart.js +21 -1
- package/dist/autostart.js.map +1 -1
- package/dist/bot-registry.d.ts +27 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +62 -2
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/vc-agent.d.ts.map +1 -1
- package/dist/cli/vc-agent.js +21 -3
- package/dist/cli/vc-agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +92 -1
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +28 -0
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/bot-steer-directive.d.ts +25 -0
- package/dist/core/bot-steer-directive.d.ts.map +1 -0
- package/dist/core/bot-steer-directive.js +47 -0
- package/dist/core/bot-steer-directive.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +102 -18
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +53 -13
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +3 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +26 -5
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +10 -1
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +12 -2
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/dispatch.d.ts.map +1 -1
- package/dist/core/dispatch.js +5 -4
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/existing-app-server.d.ts +22 -0
- package/dist/core/existing-app-server.d.ts.map +1 -0
- package/dist/core/existing-app-server.js +85 -0
- package/dist/core/existing-app-server.js.map +1 -0
- package/dist/core/native-topic-id.d.ts +9 -0
- package/dist/core/native-topic-id.d.ts.map +1 -0
- package/dist/core/native-topic-id.js +14 -0
- package/dist/core/native-topic-id.js.map +1 -0
- package/dist/core/per-bot-env.d.ts.map +1 -1
- package/dist/core/per-bot-env.js +10 -0
- package/dist/core/per-bot-env.js.map +1 -1
- package/dist/core/plugins/mcp/gateway.d.ts +27 -3
- package/dist/core/plugins/mcp/gateway.d.ts.map +1 -1
- package/dist/core/plugins/mcp/gateway.js +272 -26
- package/dist/core/plugins/mcp/gateway.js.map +1 -1
- package/dist/core/plugins/mcp/host.d.ts +18 -0
- package/dist/core/plugins/mcp/host.d.ts.map +1 -1
- package/dist/core/plugins/mcp/host.js +80 -16
- package/dist/core/plugins/mcp/host.js.map +1 -1
- package/dist/core/plugins/mcp/launch-record.d.ts +14 -0
- package/dist/core/plugins/mcp/launch-record.d.ts.map +1 -0
- package/dist/core/plugins/mcp/launch-record.js +63 -0
- package/dist/core/plugins/mcp/launch-record.js.map +1 -0
- package/dist/core/session-activity.d.ts +11 -0
- package/dist/core/session-activity.d.ts.map +1 -1
- package/dist/core/session-activity.js +23 -0
- package/dist/core/session-activity.js.map +1 -1
- package/dist/core/session-group-birth.d.ts.map +1 -1
- package/dist/core/session-group-birth.js +23 -8
- package/dist/core/session-group-birth.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -4
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +16 -20
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/shared-adopt.d.ts +20 -0
- package/dist/core/shared-adopt.d.ts.map +1 -0
- package/dist/core/shared-adopt.js +26 -0
- package/dist/core/shared-adopt.js.map +1 -0
- package/dist/core/skills/customize-command.d.ts +7 -0
- package/dist/core/skills/customize-command.d.ts.map +1 -0
- package/dist/core/skills/customize-command.js +303 -0
- package/dist/core/skills/customize-command.js.map +1 -0
- package/dist/core/terminal-write-auth.d.ts +15 -0
- package/dist/core/terminal-write-auth.d.ts.map +1 -1
- package/dist/core/terminal-write-auth.js +15 -0
- package/dist/core/terminal-write-auth.js.map +1 -1
- package/dist/core/terminal-write-frame.d.ts +30 -0
- package/dist/core/terminal-write-frame.d.ts.map +1 -0
- package/dist/core/terminal-write-frame.js +44 -0
- package/dist/core/terminal-write-frame.js.map +1 -0
- package/dist/core/types.d.ts +14 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +6 -8
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +31 -6
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +444 -102
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/core/worker-startup-retry.d.ts +52 -0
- package/dist/core/worker-startup-retry.d.ts.map +1 -0
- package/dist/core/worker-startup-retry.js +68 -0
- package/dist/core/worker-startup-retry.js.map +1 -0
- package/dist/daemon.d.ts +9 -8
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +467 -171
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/autostart-api.d.ts +26 -0
- package/dist/dashboard/autostart-api.d.ts.map +1 -0
- package/dist/dashboard/autostart-api.js +88 -0
- package/dist/dashboard/autostart-api.js.map +1 -0
- package/dist/dashboard/bot-payload.d.ts +5 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +2 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/control-csrf.d.ts +29 -1
- package/dist/dashboard/control-csrf.d.ts.map +1 -1
- package/dist/dashboard/control-csrf.js +49 -10
- package/dist/dashboard/control-csrf.js.map +1 -1
- package/dist/dashboard/customization-api.d.ts +23 -0
- package/dist/dashboard/customization-api.d.ts.map +1 -0
- package/dist/dashboard/customization-api.js +198 -0
- package/dist/dashboard/customization-api.js.map +1 -0
- package/dist/dashboard/debug-terminal.d.ts +13 -1
- package/dist/dashboard/debug-terminal.d.ts.map +1 -1
- package/dist/dashboard/debug-terminal.js +18 -4
- package/dist/dashboard/debug-terminal.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +0 -23
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +7 -28
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/terminal-control-route.d.ts +32 -0
- package/dist/dashboard/terminal-control-route.d.ts.map +1 -0
- package/dist/dashboard/terminal-control-route.js +70 -0
- package/dist/dashboard/terminal-control-route.js.map +1 -0
- package/dist/dashboard/terminal-control.d.ts +64 -13
- package/dist/dashboard/terminal-control.d.ts.map +1 -1
- package/dist/dashboard/terminal-control.js +77 -14
- package/dist/dashboard/terminal-control.js.map +1 -1
- package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -1
- package/dist/dashboard/terminal-front-proxy.js +41 -9
- package/dist/dashboard/terminal-front-proxy.js.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.d.ts +69 -18
- package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
- package/dist/dashboard/vc-consumer-profiles-api.js +149 -29
- package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-api.d.ts +34 -2
- package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-api.js +39 -4
- package/dist/dashboard/web/agent-workbench-api.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-appearance.d.ts +6 -3
- package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-appearance.js +7 -4
- package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-model.d.ts +2 -0
- package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-model.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-page.js +2 -2
- package/dist/dashboard/web/agent-workbench-page.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-panes.d.ts +59 -4
- package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-panes.js +493 -85
- package/dist/dashboard/web/agent-workbench-panes.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-session-list.d.ts +11 -7
- package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-session-list.js +24 -31
- package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -1
- package/dist/dashboard/web/agent-workbench-terminal-control.d.ts +198 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.js +292 -0
- package/dist/dashboard/web/agent-workbench-terminal-control.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-view.d.ts +3 -2
- package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -1
- package/dist/dashboard/web/agent-workbench-view.js +69 -50
- package/dist/dashboard/web/agent-workbench-view.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +58 -7
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +24 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +191 -16
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +17 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +51 -2
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +32 -8
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/confirm-modal.d.ts +35 -0
- package/dist/dashboard/web/confirm-modal.d.ts.map +1 -0
- package/dist/dashboard/web/confirm-modal.js +111 -0
- package/dist/dashboard/web/confirm-modal.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +2 -1
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/customization-page.d.ts +3 -0
- package/dist/dashboard/web/customization-page.d.ts.map +1 -0
- package/dist/dashboard/web/customization-page.js +315 -0
- package/dist/dashboard/web/customization-page.js.map +1 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +1 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +11 -9
- 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 +226 -42
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/monitor-room.d.ts.map +1 -1
- package/dist/dashboard/web/monitor-room.js +3 -2
- package/dist/dashboard/web/monitor-room.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +98 -63
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/roles-page.d.ts.map +1 -1
- package/dist/dashboard/web/roles-page.js +4 -3
- package/dist/dashboard/web/roles-page.js.map +1 -1
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
- package/dist/dashboard/web/schedules-page.js +165 -18
- package/dist/dashboard/web/schedules-page.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts +2 -0
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +142 -24
- package/dist/dashboard/web/sessions-kanban.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +177 -94
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +5 -4
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +0 -8
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +185 -65
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills/skill-library-tab.d.ts +2 -0
- package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -1
- package/dist/dashboard/web/skills/skill-library-tab.js +15 -1
- package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +5 -4
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +5 -0
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +4 -0
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation-page.js +3 -2
- package/dist/dashboard/web/team-federation-page.js.map +1 -1
- package/dist/dashboard/web/toast.d.ts +15 -0
- package/dist/dashboard/web/toast.d.ts.map +1 -0
- package/dist/dashboard/web/toast.js +70 -0
- package/dist/dashboard/web/toast.js.map +1 -0
- package/dist/dashboard/web/v3-components.d.ts.map +1 -1
- package/dist/dashboard/web/v3-components.js +2 -1
- package/dist/dashboard/web/v3-components.js.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts +10 -12
- package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
- package/dist/dashboard/web/vc-consumer-profiles-section.js +219 -200
- package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
- package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards-page.js +2 -1
- package/dist/dashboard/web/whiteboards-page.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-LZSUOCEQ.js +1 -0
- package/dist/dashboard-web/chunks/agent-workbench-page-YONDRJU7.js +1 -0
- package/dist/dashboard-web/chunks/bot-defaults-page-X7LV6373.js +1 -0
- package/dist/dashboard-web/chunks/chunk-2PVRDXEL.js +1 -0
- package/dist/dashboard-web/chunks/chunk-53JUKBU2.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-5CJMHTT4.js → chunk-5QX4OYOR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-NACP7BMR.js → chunk-5VRVJFQR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-FDZ7WOBW.js → chunk-6ROOZWYV.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-F6KNPF4R.js → chunk-CK22743G.js} +15 -19
- package/dist/dashboard-web/chunks/chunk-CVNIMUPY.js +25 -0
- package/dist/dashboard-web/chunks/chunk-GJC2TMWS.js +2 -0
- package/dist/dashboard-web/chunks/chunk-OT6L6G7R.js +1 -0
- package/dist/dashboard-web/chunks/chunk-QITAMHW6.js +1 -0
- package/dist/dashboard-web/chunks/chunk-RHVFZC5Z.js +1 -0
- package/dist/dashboard-web/chunks/chunk-SOBMN2VY.js +1 -0
- package/dist/dashboard-web/chunks/chunk-SZOB6VK2.js +1 -0
- package/dist/dashboard-web/chunks/chunk-XVIXNQGC.js +44 -0
- package/dist/dashboard-web/chunks/chunk-YUJF34ME.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-LB2HEJ7F.js +1 -0
- package/dist/dashboard-web/chunks/customization-page-4GXBYLG6.js +105 -0
- package/dist/dashboard-web/chunks/feedback-page-IZQ7VLDG.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-4WCP5OEV.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-HJFDYR5N.js → insights-page-TXQHIPQL.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-V7PCP47V.js → monitor-room-VBRVWXCM.js} +8 -8
- package/dist/dashboard-web/chunks/monitoring-page-QDDZWERE.js +2 -0
- package/dist/dashboard-web/chunks/office-page-PENFNYPG.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-BZQDP6MP.js +1 -0
- package/dist/dashboard-web/chunks/plugin-page-JX4GSWZS.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-VPNINZNK.js +1 -0
- package/dist/dashboard-web/chunks/schedules-page-BITO6HEA.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-ZKCOVTD2.js +8 -0
- package/dist/dashboard-web/chunks/settings-page-UT6JDTS6.js +2 -0
- package/dist/dashboard-web/chunks/skills-page-GULXVAJY.js +4 -0
- package/dist/dashboard-web/chunks/team-federation-page-CUUJWGEG.js +1 -0
- package/dist/dashboard-web/chunks/v3-page-5WVJ5AUR.js +94 -0
- package/dist/dashboard-web/chunks/whiteboards-page-FZ2CME4H.js +1 -0
- package/dist/dashboard-web/design-tokens.css +236 -0
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard-web/style.css +1930 -114
- package/dist/dashboard.js +360 -279
- package/dist/dashboard.js.map +1 -1
- package/dist/desktop/renderer/app.js +6 -0
- package/dist/desktop/renderer/app.js.map +1 -1
- package/dist/dsh-runner.js +139 -17
- package/dist/dsh-runner.js.map +1 -1
- package/dist/global-config.d.ts +33 -2
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +62 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +13 -4
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.d.ts +27 -3
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +33 -4
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +13 -4
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +2 -0
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +7 -4
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +135 -20
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +38 -3
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +163 -13
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card-handler.js +2 -1
- package/dist/im/lark/v3-blocked-card-handler.js.map +1 -1
- package/dist/im/lark/v3-blocked-card.d.ts +1 -1
- package/dist/im/lark/v3-blocked-card.d.ts.map +1 -1
- package/dist/im/lark/v3-blocked-card.js +14 -0
- package/dist/im/lark/v3-blocked-card.js.map +1 -1
- package/dist/index-core-only.js +2 -0
- package/dist/index-core-only.js.map +1 -1
- package/dist/index-daemon.js +3 -0
- package/dist/index-daemon.js.map +1 -1
- package/dist/platform/binding.d.ts +37 -0
- package/dist/platform/binding.d.ts.map +1 -1
- package/dist/platform/binding.js +15 -0
- package/dist/platform/binding.js.map +1 -1
- package/dist/services/bridge-turn-journal.d.ts +63 -0
- package/dist/services/bridge-turn-journal.d.ts.map +1 -0
- package/dist/services/bridge-turn-journal.js +149 -0
- package/dist/services/bridge-turn-journal.js.map +1 -0
- package/dist/services/bridge-turn-queue.d.ts +8 -1
- package/dist/services/bridge-turn-queue.d.ts.map +1 -1
- package/dist/services/bridge-turn-queue.js +2 -1
- package/dist/services/bridge-turn-queue.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +5 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
- package/dist/services/codex-app-runner-protocol.js +5 -0
- package/dist/services/codex-app-runner-protocol.js.map +1 -1
- package/dist/services/customization-store.d.ts +93 -0
- package/dist/services/customization-store.d.ts.map +1 -0
- package/dist/services/customization-store.js +542 -0
- package/dist/services/customization-store.js.map +1 -0
- package/dist/services/file-bridge-path.d.ts.map +1 -1
- package/dist/services/file-bridge-path.js +3 -0
- package/dist/services/file-bridge-path.js.map +1 -1
- package/dist/services/grok-transcript.d.ts.map +1 -1
- package/dist/services/grok-transcript.js +44 -9
- package/dist/services/grok-transcript.js.map +1 -1
- package/dist/services/local-cli-opener.d.ts.map +1 -1
- package/dist/services/local-cli-opener.js +12 -3
- package/dist/services/local-cli-opener.js.map +1 -1
- package/dist/services/model-catalog.d.ts +54 -0
- package/dist/services/model-catalog.d.ts.map +1 -0
- package/dist/services/model-catalog.js +147 -0
- package/dist/services/model-catalog.js.map +1 -0
- package/dist/services/omp-transcript.d.ts +27 -0
- package/dist/services/omp-transcript.d.ts.map +1 -0
- package/dist/services/omp-transcript.js +214 -0
- package/dist/services/omp-transcript.js.map +1 -0
- package/dist/services/platform-team-store.d.ts +16 -8
- package/dist/services/platform-team-store.d.ts.map +1 -1
- package/dist/services/platform-team-store.js +17 -10
- package/dist/services/platform-team-store.js.map +1 -1
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +13 -8
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts.map +1 -1
- package/dist/services/resumable-session-discovery.js +117 -35
- package/dist/services/resumable-session-discovery.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +5 -3
- package/dist/services/structured-bridge-clis.d.ts.map +1 -1
- package/dist/services/structured-bridge-clis.js +5 -1
- package/dist/services/structured-bridge-clis.js.map +1 -1
- package/dist/services/vc-meeting-action-gate.d.ts.map +1 -1
- package/dist/services/vc-meeting-action-gate.js +15 -4
- package/dist/services/vc-meeting-action-gate.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +46 -66
- package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js +33 -292
- package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -1
- package/dist/services/vc-meeting-consumer-profile-templates.js +3 -3
- package/dist/services/vc-meeting-consumer-profile-templates.js.map +1 -1
- package/dist/services/vc-meeting-delivery-store.d.ts +18 -0
- package/dist/services/vc-meeting-delivery-store.d.ts.map +1 -1
- package/dist/services/vc-meeting-delivery-store.js +55 -0
- package/dist/services/vc-meeting-delivery-store.js.map +1 -1
- package/dist/services/vc-meeting-send-policy.d.ts +21 -1
- package/dist/services/vc-meeting-send-policy.d.ts.map +1 -1
- package/dist/services/vc-meeting-send-policy.js +30 -2
- package/dist/services/vc-meeting-send-policy.js.map +1 -1
- package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts +78 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.d.ts.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.js +227 -0
- package/dist/services/vc-meeting-shared-consumer-catalog-store.js.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.d.ts +53 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.d.ts.map +1 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.js +161 -0
- package/dist/services/vc-meeting-shared-consumer-catalog.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +1 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/open-platform-automation.d.ts +20 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +27 -0
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/skills/customization-bundle.d.ts +83 -0
- package/dist/skills/customization-bundle.d.ts.map +1 -0
- package/dist/skills/customization-bundle.js +214 -0
- package/dist/skills/customization-bundle.js.map +1 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +10 -3
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/effective-builtins.d.ts +38 -0
- package/dist/skills/effective-builtins.d.ts.map +1 -0
- package/dist/skills/effective-builtins.js +96 -0
- package/dist/skills/effective-builtins.js.map +1 -0
- package/dist/skills/injection-mode.d.ts +4 -1
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +11 -3
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +24 -1
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/prompt-fragments.d.ts +58 -0
- package/dist/skills/prompt-fragments.d.ts.map +1 -0
- package/dist/skills/prompt-fragments.js +88 -0
- package/dist/skills/prompt-fragments.js.map +1 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts +50 -0
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +43 -0
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/utils/idle-detector.d.ts +12 -0
- package/dist/utils/idle-detector.d.ts.map +1 -1
- package/dist/utils/idle-detector.js +88 -2
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/stuck-detector.d.ts +5 -0
- package/dist/utils/stuck-detector.d.ts.map +1 -1
- package/dist/utils/stuck-detector.js +41 -0
- package/dist/utils/stuck-detector.js.map +1 -1
- package/dist/utils/usage-limit-tracker.d.ts +46 -0
- package/dist/utils/usage-limit-tracker.d.ts.map +1 -0
- package/dist/utils/usage-limit-tracker.js +91 -0
- package/dist/utils/usage-limit-tracker.js.map +1 -0
- package/dist/utils/user-token.js +1 -1
- package/dist/utils/user-token.js.map +1 -1
- package/dist/worker.js +812 -125
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +14 -14
- package/dist/workflows/events/payloads.d.ts +12 -12
- package/dist/workflows/events/schema.d.ts +164 -164
- package/dist/workflows/migration/v2-to-v3.js +1 -1
- package/dist/workflows/migration/v2-to-v3.js.map +1 -1
- package/dist/workflows/v3/architect.d.ts.map +1 -1
- package/dist/workflows/v3/architect.js +11 -5
- package/dist/workflows/v3/architect.js.map +1 -1
- package/dist/workflows/v3/artifact-contract-declarations.d.ts +22 -0
- package/dist/workflows/v3/artifact-contract-declarations.d.ts.map +1 -0
- package/dist/workflows/v3/artifact-contract-declarations.js +95 -0
- package/dist/workflows/v3/artifact-contract-declarations.js.map +1 -0
- package/dist/workflows/v3/contract.d.ts +1 -0
- package/dist/workflows/v3/contract.d.ts.map +1 -1
- package/dist/workflows/v3/contract.js.map +1 -1
- package/dist/workflows/v3/daemon-run.d.ts +2 -2
- package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
- package/dist/workflows/v3/daemon-run.js +4 -0
- package/dist/workflows/v3/daemon-run.js.map +1 -1
- package/dist/workflows/v3/dag.d.ts +7 -0
- package/dist/workflows/v3/dag.d.ts.map +1 -1
- package/dist/workflows/v3/dag.js +69 -8
- package/dist/workflows/v3/dag.js.map +1 -1
- package/dist/workflows/v3/ephemeral-pool.js +1 -1
- package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
- package/dist/workflows/v3/event-contract.d.ts +3 -1
- package/dist/workflows/v3/event-contract.d.ts.map +1 -1
- package/dist/workflows/v3/host.d.ts.map +1 -1
- package/dist/workflows/v3/host.js +5 -1
- package/dist/workflows/v3/host.js.map +1 -1
- package/dist/workflows/v3/journal.d.ts +1 -1
- package/dist/workflows/v3/journal.d.ts.map +1 -1
- package/dist/workflows/v3/journal.js.map +1 -1
- package/dist/workflows/v3/library-materialize.d.ts.map +1 -1
- package/dist/workflows/v3/library-materialize.js +9 -1
- package/dist/workflows/v3/library-materialize.js.map +1 -1
- package/dist/workflows/v3/library-schema.d.ts +3 -1
- package/dist/workflows/v3/library-schema.d.ts.map +1 -1
- package/dist/workflows/v3/library-schema.js +20 -4
- package/dist/workflows/v3/library-schema.js.map +1 -1
- package/dist/workflows/v3/library-store.d.ts.map +1 -1
- package/dist/workflows/v3/library-store.js +15 -3
- package/dist/workflows/v3/library-store.js.map +1 -1
- package/dist/workflows/v3/run-envelope.d.ts +16 -16
- package/dist/workflows/v3/shared-node-runtime.d.ts +2 -1
- package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -1
- package/dist/workflows/v3/shared-node-runtime.js +48 -7
- package/dist/workflows/v3/shared-node-runtime.js.map +1 -1
- package/package.json +2 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +0 -1
- package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +0 -10
- package/dist/dashboard-web/chunks/chunk-22WIADUT.js +0 -2
- package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +0 -1
- package/dist/dashboard-web/chunks/chunk-2W6SCN3M.js +0 -1
- package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +0 -1
- package/dist/dashboard-web/chunks/chunk-5THX4DI2.js +0 -66
- package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +0 -1
- package/dist/dashboard-web/chunks/chunk-AGCPF6MT.js +0 -1
- package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +0 -1
- package/dist/dashboard-web/chunks/chunk-SYC6D5XU.js +0 -1
- package/dist/dashboard-web/chunks/connectors-page-VOISXXII.js +0 -1
- package/dist/dashboard-web/chunks/feedback-page-RN6HRZMS.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +0 -8
- package/dist/dashboard-web/chunks/monitoring-page-NKEKVQAP.js +0 -2
- package/dist/dashboard-web/chunks/office-page-GVJF73XW.js +0 -1
- package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +0 -1
- package/dist/dashboard-web/chunks/plugin-page-J3OF5IY4.js +0 -1
- package/dist/dashboard-web/chunks/roles-page-WQIRSOLZ.js +0 -1
- package/dist/dashboard-web/chunks/schedules-page-J2DEY2X6.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +0 -8
- package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +0 -2
- package/dist/dashboard-web/chunks/skills-page-HGIFR3IU.js +0 -4
- package/dist/dashboard-web/chunks/team-federation-page-MR5ZPL4B.js +0 -1
- package/dist/dashboard-web/chunks/v3-page-GBR5JWPE.js +0 -94
- package/dist/dashboard-web/chunks/whiteboards-page-QAZM4BN3.js +0 -1
- package/dist/services/vc-meeting-consumer-profile-store.d.ts +0 -39
- package/dist/services/vc-meeting-consumer-profile-store.d.ts.map +0 -1
- package/dist/services/vc-meeting-consumer-profile-store.js +0 -191
- package/dist/services/vc-meeting-consumer-profile-store.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{a as zt,c as Jt,h as Xt}from"./chunk-XJ7BGPJH.js";import{a as Gt}from"./chunk-6ROOZWYV.js";import{c as Xe}from"./chunk-2PVRDXEL.js";import{a as Jn,c as jt}from"./chunk-SZOB6VK2.js";import{a as Gn,b as Kt,c as nn,d as _t,e as Ft}from"./chunk-YUJF34ME.js";import{a as yn}from"./chunk-ZJVTGU5X.js";import{a as B}from"./chunk-SOBMN2VY.js";import{a as Ut}from"./chunk-KTQ7B6ZR.js";import{a as wn,b as Ht}from"./chunk-OT6L6G7R.js";import{c as Je,g as Dt,q as $t}from"./chunk-5QX4OYOR.js";import{b as zn,d as Ot}from"./chunk-RHVFZC5Z.js";import{a as $e}from"./chunk-QITAMHW6.js";import{C as Ge,E as bn,G as Pt,I as ge,J as _e,K as pe,M as hn,d as St,e as _n,g as It,j as Tt,k as Nt,l as xt,m as Fn,n as Rt,o as Un,p as Et,q as Mt,r as jn,s as Lt,t as At,w as He,x as o,y as en,z as Ke}from"./chunk-CK22743G.js";import{a as Ct,c as Bt}from"./chunk-XVIXNQGC.js";import{c as De,d as vt,e as kn}from"./chunk-CVNIMUPY.js";var c=De(vt(),1),cn=De(Ct(),1);var Xn=[24,72,168],Qs=new Set(Xn);function Wn(e){let t=e==="7d"?168:Number(e);return!Number.isFinite(t)||!Qs.has(t)?null:t}function eo(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function no(e,t=Date.now()){return t-e*60*60*1e3}function to(e,t,s=Date.now()){if(!e.sessionId||e.status!=="idle"||e.locked||e.pendingRepo||e.tuiPromptActive||e.agentAttention)return!1;let a=eo(e.lastMessageAt);return a!==null&&a<no(t,s)}function Wt(e,t,s=Date.now()){return e.filter(a=>to(a,t,s))}var Vt={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",25:"reasonix",26:"opencode2",27:"dsh",28:"mojo"},ca=new Set(Object.values(Vt)),so={"claude-code":"Claude",aiden:"Aiden",coco:"CoCo",codex:"Codex",cursor:"Cursor",gemini:"Gemini",genius:"Genius",opencode:"OpenCode",opencode2:"OpenCode 2",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",reasonix:"Reasonix",dsh:"DeepSeek Harness","dsh-tui":"DeepSeek Harness TUI",mojo:"Mojo"},qt=Object.values(Vt).map(e=>({id:e,label:so[e]??e}));function vn(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Vn(e){let t=vn(e);return t===null?"-":t.toLocaleString("en-US")}function Yt(e,t){let s=String(e??"").replace(/\s+/g," ").trim();return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function Zt(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 Cn(e){let t=Zt(e.previewUserFullText??e.previewUserText??"",4e3),s=e.previewBotState==="replied"?Zt(e.previewBotFullText??e.previewBotText??"",4e3):"";return{userText:Yt(t,120),userFullText:t,botText:Yt(s,220),botFullText:s}}var ns={open:!1,suppressFocusOpen:!1};function ts(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 se=[...qt.map(e=>e.id),"unknown"],qn=[{id:"needs-you",labelKey:"sessions.board.needsYou",hintKey:"sessions.board.needsYouHint"},{id:"working",labelKey:"sessions.board.working",hintKey:"sessions.board.workingHint"},{id:"todo",labelKey:"sessions.board.todo",hintKey:"sessions.board.todoHint"},{id:"idle",labelKey:"sessions.board.idle",hintKey:"sessions.board.idleHint"}];function Sn(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}var ss=["starting","working","idle","dormant","analyzing","stalled","active","limited","closed"];function tn(e){let t=String(e??"unknown"),s=`sessions.status.${t}`,a=o(s);return a===s?t:a}function os(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 Yn(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function Qt(e){return e?.chatType==="p2p"?o("sessions.directChat"):o("sessions.groupChat")}function oo(e){let t=o("sessions.directChat"),s=String(e?.chatDisplayName??"").trim()||String(e?.chatId??"").trim()||o("sessions.chatUnknown"),a=ge(e);return`${t} \xB7 ${s} - ${a}`}function Fe(e){let t=String(e?.chatId??"").trim();if(e?.chatType==="p2p")return oo(e);let s=_e(e),a=e?.chatType==="p2p"?(()=>{let r=String(e?.botName??"").trim();return r?` \xB7 ${r}`:""})():"";return s?`${Qt(e)} \xB7 ${s}${a}`:t?`${Qt(e)} \xB7 ${t}${a}`:o("sessions.chatUnknown")}function Zn(e,t=_e){return!!String(e?.chatId??"").trim()&&!t(e)}function es(e,t){let s=String(t??"").trim();return!!s&&String(e??"").includes(s)}function as(e,t,s){if(e===void 0)return t;let a=es(e,s),r=es(t,s);return a!==r?a?t:e:t<e?t:e}function Qn(e){let t=Fe(e),s=String(e?.chatId??"").trim();return s&&!t.includes(s)?`${t} \xB7 ${s}`:t}function is(e){return`${JSON.stringify(e)} ${Fe(e)} ${Qn(e)}`.toLowerCase()}function fe(e){return typeof e=="string"?e.trim():""}function rs(e){let t=fe(e?.chatId),s=fe(e?.rootMessageId);return e?.scope==="chat"?t?"chat":"session":t&&s?"thread":"session"}function et(e){let t=fe(e?.chatId),s=fe(e?.rootMessageId),a=rs(e);return a==="thread"?`thread:${encodeURIComponent(t)}:${encodeURIComponent(s)}`:a==="chat"?`chat:${encodeURIComponent(t)}`:`session:${encodeURIComponent(fe(e?.sessionId)||"unknown")}`}function ao(e,t){let s=[...e].sort((a,r)=>Number(a?.spawnedAt??0)-Number(r?.spawnedAt??0));for(let a of s){let r=fe(a?.title);if(r)return r}return t}function In(e){let t=new Map;for(let a of e){let r=et(a),l=t.get(r);l?l.push(a):t.set(r,[a])}let s=[];for(let[a,r]of t){let l=[...r].sort((R,U)=>Number(U.lastMessageAt??0)-Number(R.lastMessageAt??0)),p=l[0]??{},d=rs(p),g=fe(p.chatId),v=d==="thread"?fe(p.rootMessageId):"",b=new Set(l.map(R=>fe(R.larkAppId)||fe(R.botName)).filter(Boolean)),h=Math.max(1,b.size),L=l.filter(R=>R.status!=="closed").length,P=l.filter(R=>R.lastInputFromBot===!0).length,D=l.reduce((R,U)=>Math.max(R,Number(U.lastMessageAt??0)),0),T=v||g||fe(p.sessionId)||a;s.push({key:a,kind:d,chatId:g,...v?{rootMessageId:v}:{},title:ao(l,T),rows:l,botCount:h,activeCount:L,closedCount:l.length-L,inferredBotInputCount:P,latestActivityAt:D,multiBot:b.size>1,inferredBotTriggered:P>0})}return s.sort((a,r)=>r.latestActivityAt-a.latestActivityAt||a.key.localeCompare(r.key))}var sn=zt;function on(e=He){return e.authed?!0:(e.publicReadOnly,!1)}var J={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 Tn(e){return e.locked?o("sessions.unlock"):o("sessions.lock")}async function Nn(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&&B(`${o("sessions.writeLinkFail")}: ${r?.error??a.status}`,{kind:"error"});return}s?s.location.href=r.url:window.open(r.url,"_blank","noopener")}catch(a){s?.close(),B(`${o("sessions.writeLinkFail")}: ${a}`,{kind:"error"})}finally{t&&(t.disabled=!1)}}async function ls(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&&B(`${o("sessions.copyCommandFail")}: ${a?.error??s.status}`,{kind:"error"});return}if(await yn(a.command,o("sessions.copyCommand"))&&t){let r=t.textContent;t.textContent=o("sessions.copyCommandDone"),setTimeout(()=>{r!==null&&(t.textContent=r)},1500)}}catch(s){B(`${o("sessions.copyCommandFail")}: ${s}`,{kind:"error"})}finally{t&&(t.disabled=!1)}}function nt(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 an(e){return e.status==="closed"?null:e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"||e.status==="stalled"?"needs-you":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"working":io(e)?"todo":"idle"}function io(e){let t=e?.openTodos;return!!t&&typeof t.remaining=="number"&&t.remaining>0}function cs(e){let t=String(e.status??"unknown"),s=String(e.cliId??"unknown"),a=He.locale==="zh"?"\uFF1A":": ";return[o("sessions.restartConfirmIntro"),"",`${o("sessions.restartConfirmStatus")}${a}${tn(t)}`,`${o("sessions.restartConfirmCli")}${a}${s}`,"",o("sessions.restartConfirmQuestion")].join(`
|
|
6
|
+
`)}function xn(e){return e.status!=="closed"&&!e.adopt&&!e.pendingRepo&&!Ut(e.cliId)}async function ds(){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 rn=new Gt({html:!1,linkify:!0,breaks:!0});rn.validateLink=e=>/^(https?:|mailto:)/i.test(e.trim());var us=rn.renderer.rules.link_open;rn.renderer.rules.link_open=(e,t,s,a,r)=>(e[t].attrSet("target","_blank"),e[t].attrSet("rel","noopener noreferrer nofollow"),us?us(e,t,s,a,r):r.renderToken(e,t,s));rn.renderer.rules.image=(e,t)=>{let s=e[t],a=s.children?.reduce((d,g)=>d+(g.content??""),"")??"",r=en(a.trim()||"image"),l=s.attrGet("src")??"";return/^(https?:|mailto:)/i.test(l.trim())?`<span class="session-card-exchange-img">\u{1F5BC} <a href="${en(l)}" target="_blank" rel="noopener noreferrer nofollow">${r}</a></span>`:`<span class="session-card-exchange-img">\u{1F5BC} ${r}</span>`};function tt(e){let t=String(e??"");if(!t.trim())return"";try{return rn.render(t).trim()||`<p>${en(t)}</p>`}catch{return`<p>${en(t)}</p>`}}function st(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 l=r[1]??"";return{start:s-l.length-1,end:s,query:l}}function ms(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 gs(e,t){let s=t.trim().toLocaleLowerCase();return s?e.filter(a=>a.botName.toLocaleLowerCase().includes(s)||a.larkAppId.toLocaleLowerCase().includes(s)):[...e]}function ps(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)),l=Math.max(r,Math.min(s,e.length)),p=e.slice(0,r),d=e.slice(l),g=p&&!/\s$/u.test(p)?" ":"",v=d&&!/^\s/u.test(d)?" ":"",b=`${g}${a.join(" ")}${v}`;return{text:p+b+d,caret:p.length+b.length}}function ro(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 fs(e,t,s,a){let r=ro(e,t),l=s.map((p,d)=>a(d));return s.forEach((p,d)=>{let g=r.indexOf(p);g<0||p===l[d]||(r=r.slice(0,g)+l[d]+r.slice(g+p.length))}),{text:r,markers:l}}var A=De(vt(),1),Ts=De(Ct(),1);var bs=["backlog","todo","in_progress","in_review","done"];function hs(e){return typeof e=="string"&&bs.includes(e)?e:null}function ys(e){if(e.status==="closed")return"done";let t=hs(e.kanbanColumn);return t||(e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"||e.status==="stalled"?"in_review":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"in_progress":"todo")}var lo=1e15;function We(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 lo-t}function ot(e,t){return e!==null&&t!==null?(e+t)/2:e!==null?e+1024:t!==null?t-1024:1024}var S=De(kn(),1),ks=[{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"}],at=50;function ws(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function co(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}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"):e.status==="stalled"?o("sessions.board.signalStalled"):""}function mo(e){switch(e){case"backlog":return"kanban-col-dot-idle";case"todo":return"kanban-col-dot-todo";case"in_progress":return"kanban-col-dot-work";case"in_review":return"kanban-col-dot-need";case"done":return"kanban-col-dot-done";default:return"kanban-col-dot-idle"}}function ln(e){return{__html:e}}function Rn(e){return typeof e.remoteDeployment=="string"&&e.remoteDeployment.length>0}function go(e){return pe(e.title)||e.sessionId}function Ns(e){let t=[],s=new Map;for(let l of e){let p=String(l.chatId??l.sessionId),d=s.get(p);d||(d={chatId:p,rows:[]},s.set(p,d),t.push(d)),d.rows.push(l)}let a=[];return{clusters:t.map(l=>(a.push(...l.rows),l.rows.length<2?{type:"card",row:l.rows[0]}:{type:"cluster",chatId:l.chatId,rows:l.rows})),flat:a}}function vs(e){let t=new Map(ks.map(a=>[a.id,[]]));for(let a of e)t.get(ys(a)).push(a);return{columns:ks.map(a=>{let r=(t.get(a.id)??[]).sort((g,v)=>We(g)-We(v)),l=0;a.id==="done"&&r.length>at&&(l=r.length-at,r=r.slice(0,at));let{clusters:p,flat:d}=Ns(r);return t.set(a.id,d),{id:a.id,labelKey:a.labelKey,rows:r,clusters:p,hiddenCount:l}}),groups:t}}function po(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:ge(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((l,p)=>Number(p.lastMessageAt??0)-Number(l.lastMessageAt??0)),{clusters:r}=Ns(a);return{key:String(s.larkAppId??s.name),name:s.name,larkAppId:s.larkAppId,rows:a,clusters:r}})}function it(e){return new Map(e.map(t=>[String(t.sessionId),t]))}function fo(e){if(e.groupBy==="bot"){let a=e.rows.filter(r=>!Rn(r));return{mode:"bot",columns:po(a),groups:new Map,rowById:it(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(h=>h.key===e.teamKey)??e.teams[0]??null,r=e.getTeamChatIds(a??void 0),l=a?e.rows.filter(h=>r.has(String(h.chatId))):[],p=(e.teamBoardKey===a?.key?e.teamBoardData?.board:null)??{},d=(e.teamBoardKey===a?.key?e.teamBoardData?.remoteRows:null)??[],g=[...l,...d].map(h=>{let L=p[String(h.sessionId)];return L?{...h,kanbanColumn:L.column,kanbanPosition:L.position}:h}),{columns:v,groups:b}=vs(g);return{mode:"flow",columns:v,groups:b,rowById:it(g),team:a,scope:{chats:r.size,sessions:g.length}}}let{columns:t,groups:s}=vs(e.rows);return{mode:"flow",columns:t,groups:s,rowById:it(e.rows),team:null,scope:null}}function bo(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 ho(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 Cs(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 yo(e){let[t,s]=(0,A.useState)(!1),[a,r]=(0,A.useState)(null),l=(0,A.useRef)(null),p=(0,A.useRef)(null),d=(0,A.useCallback)(()=>{let g=l.current;if(!g)return;let v=g.getBoundingClientRect(),b=190,h=8,L=e.items.length*34+10,P=Math.min(Math.max(v.right-b,h),window.innerWidth-b-h),D=window.innerHeight-v.bottom-h,T=v.top-h,R=D>=L||D>T?"bottom":"top",U=R==="bottom"?v.bottom+6:v.top-L-6;r({top:Math.max(h,U),left:P,placement:R})},[e.items.length]);return(0,A.useEffect)(()=>{if(!t)return;let g=window.requestAnimationFrame(d),v=()=>d();return window.addEventListener("resize",v),window.addEventListener("scroll",v,!0),()=>{window.cancelAnimationFrame(g),window.removeEventListener("resize",v),window.removeEventListener("scroll",v,!0)}},[t,d]),(0,A.useEffect)(()=>{if(!t)return;let g=b=>{let h=b.target;h instanceof Node&&(l.current?.contains(h)||p.current?.contains(h))||s(!1)},v=b=>{b.key==="Escape"&&s(!1)};return document.addEventListener("pointerdown",g,!0),document.addEventListener("keydown",v),()=>{document.removeEventListener("pointerdown",g,!0),document.removeEventListener("keydown",v)}},[t]),(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)("button",{ref:l,type:"button",className:`kanban-card-more${t?" is-open":""}`,"data-action":"more","data-menu-items":e.items.map(g=>g.key).join(","),"aria-label":o("sessions.cardMenu"),"aria-haspopup":"menu","aria-expanded":t,onClick:g=>{g.stopPropagation(),s(v=>!v)},children:(0,S.jsxs)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:[(0,S.jsx)("circle",{cx:"8",cy:"3.2",r:"1.3",fill:"currentColor"}),(0,S.jsx)("circle",{cx:"8",cy:"8",r:"1.3",fill:"currentColor"}),(0,S.jsx)("circle",{cx:"8",cy:"12.8",r:"1.3",fill:"currentColor"})]})}),t&&typeof document<"u"?(0,Ts.createPortal)((0,S.jsx)("div",{ref:p,className:`card-menu-pop card-menu-${a?.placement??"bottom"}`,role:"menu","aria-label":o("sessions.cardMenu"),style:{top:`${a?.top??-1e4}px`,left:`${a?.left??-1e4}px`,visibility:a?"visible":"hidden"},onClick:g=>g.stopPropagation(),onPointerDown:g=>g.stopPropagation(),children:e.items.map(g=>g.href?(0,S.jsxs)("a",{role:"menuitem",className:`card-menu-item${g.danger?" danger":""}`,href:g.href,target:"_blank",rel:"noopener",onClick:()=>s(!1),children:[g.icon?(0,S.jsx)("span",{className:"card-menu-icon",dangerouslySetInnerHTML:ln(g.icon)}):null,(0,S.jsx)("span",{className:"card-menu-label",children:g.label})]},g.key):(0,S.jsxs)("button",{type:"button",role:"menuitem",disabled:g.disabled,className:`card-menu-item${g.danger?" danger":""}`,onClick:v=>{s(!1),g.onSelect?.(v.currentTarget)},children:[g.icon?(0,S.jsx)("span",{className:"card-menu-icon",dangerouslySetInnerHTML:ln(g.icon)}):null,(0,S.jsx)("span",{className:"card-menu-label",children:g.label})]},g.key))}),document.body):null]})}function ko(e){let t=pe(e.row.title)||"",[s,a]=(0,A.useState)(t),r=(0,A.useRef)(null),l=(0,A.useRef)(!1);(0,A.useLayoutEffect)(()=>{r.current?.focus(),r.current?.select()},[]);let p=(0,A.useCallback)(d=>{if(l.current)return;l.current=!0;let g=s.trim();d&&g&&g!==t&&e.onCommit(e.row,g),e.onCancel()},[t,e,s]);return(0,S.jsx)("input",{ref:r,type:"text",className:"kanban-rename-input",maxLength:200,value:s,onChange:d=>a(d.currentTarget.value),onClick:d=>d.stopPropagation(),onBlur:()=>p(!0),onKeyDown:d=>{d.stopPropagation(),d.key==="Enter"?(d.preventDefault(),p(!0)):d.key==="Escape"&&(d.preventDefault(),p(!1))}})}function Ss(e){let{callbacks:t,row:s}=e,a=go(s),r=ge(s),l=_e(s),p=co(s.workingDir),d=uo(s),v=an(s)??(s.status==="closed"?"closed":"idle"),b=Cn(s),h=b.botText||b.userText,L=[r,l].filter(Boolean).join(" \xB7 "),P=String(s.status??"unknown"),D=typeof s.remoteDeployment=="string"?s.remoteDeployment:"",T=e.editingId===s.sessionId,R=t.selectedSessionIds.has(String(s.sessionId)),U=["kanban-card",R?"selected":"",D?"kanban-card-remote":"",s.locked?"locked":"",e.dragId===s.sessionId?"dragging":"",e.dropBeforeId===s.sessionId?"drop-before":""].filter(Boolean).join(" "),H=[];return D||(H.push({key:"details",label:o("sessions.details"),icon:t.icons.details,onSelect:()=>t.onDetails(s)}),H.push({key:"history",label:o("sessions.history.title"),icon:t.icons.history,onSelect:()=>t.onHistory(s)}),s.webPort&&t.onOpenWritableTerminal&&H.push({key:"write-link",label:o("sessions.openWritableTerminal"),icon:t.icons.key,onSelect:O=>t.onOpenWritableTerminal?.(s,O)}),s.feishuChatLink&&H.push({key:"feishu",label:o("sessions.kanban.openFeishu"),icon:t.icons.feishu,href:s.feishuChatLink}),t.canRestartSession(s)&&H.push({key:"restart",label:o("sessions.restart"),icon:t.icons.restart,onSelect:O=>t.onRestart(s,O)}),H.push({key:"lock",label:t.lockActionLabel(s),icon:s.locked?t.icons.unlock:t.icons.lock,onSelect:O=>t.onToggleLock(s,O)}),s.status!=="closed"&&t.onClose&&H.push({key:"close",label:o("sessions.close"),icon:t.icons.close,danger:!0,onSelect:O=>t.onClose?.(s,O)})),(0,S.jsxs)("article",{className:U,"data-id":s.sessionId,"data-signal":v,tabIndex:0,role:"button","aria-pressed":R,draggable:!0,onClick:O=>e.onCardClick(s,O),onKeyDown:O=>e.onCardKeyDown(s,O),onDragStart:O=>e.onDragStartCard(s,O),children:[(0,S.jsxs)("div",{className:"kanban-card-head",children:[(0,S.jsx)("span",{className:`badge cli-${ws(s.cliId)}`,children:s.cliId??"unknown"}),s.adopt?(0,S.jsx)("span",{className:"badge",children:"adopt"}):null,s.locked?(0,S.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null,D?(0,S.jsx)("span",{className:"badge kanban-remote-badge",title:o("sessions.kanban.remoteHint",{name:D}),children:D}):null,d?(0,S.jsx)("span",{className:"session-signal",title:d,children:d}):null,H.length?(0,S.jsx)(yo,{items:H}):null]}),(0,S.jsx)("div",{className:"kanban-card-title-row",children:T?(0,S.jsx)(ko,{row:s,onCancel:e.onEditDone,onCommit:t.onRename}):(0,S.jsx)("p",{className:"kanban-card-title",title:String(s.title??a),onDoubleClick:O=>{O.stopPropagation(),e.cancelOpen(),D||e.onBeginEdit(s)},children:String(a).slice(0,140)})}),L?(0,S.jsx)("p",{className:"kanban-card-meta",title:p!=="-"?`${L} \xB7 ${p}`:L,children:L}):null,h?(0,S.jsx)("p",{className:"kanban-card-preview",title:h,children:h}):null,(0,S.jsxs)("div",{className:"kanban-card-foot",children:[(0,S.jsxs)("span",{className:"kanban-card-updated",children:[o("sessions.kanban.updated",{time:Ke(s.lastMessageAt)}),(0,S.jsx)("span",{className:"kanban-card-dot","data-status":ws(P),title:t.sessionStatusText(P)})]}),!D&&s.webPort&&t.onOpenTerminal?(0,S.jsxs)("button",{type:"button",className:"kanban-card-term","data-action":"terminal",onClick:O=>{O.stopPropagation(),t.onOpenTerminal?.(s)},children:[(0,S.jsx)("span",{dangerouslySetInnerHTML:ln(t.icons.terminal)}),o("sessions.terminal")]}):null]})]})}function Is(e){let t=e.item;if(t.type==="card")return(0,S.jsx)(Ss,{...e.cardProps,row:t.row});let s=_e(t.rows[0])??t.chatId,a=e.dragCluster?.chatId===t.chatId&&e.dragCluster.col===e.columnId;return(0,S.jsxs)("div",{className:`kanban-cluster${e.expanded?" expanded":" collapsed"}${a?" dragging":""}`,"data-chat":t.chatId,children:[(0,S.jsxs)("header",{draggable:!0,title:`${s} \xB7 ${o("sessions.kanban.clusterDragHint")}`,onDragStart:r=>{e.columnId&&e.onDragStartCluster(t.chatId,e.columnId,r)},children:[(0,S.jsx)("span",{className:"kanban-cluster-avatar",dangerouslySetInnerHTML:ln(bn({chatId:t.chatId,name:s,size:"sm"}))}),(0,S.jsx)("span",{className:"kanban-cluster-name",children:s}),(0,S.jsx)("span",{className:"kanban-cluster-count",children:t.rows.length}),(0,S.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,S.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,S.jsx)("path",{d:"m5.5 6.5 2.5 2.5 2.5-2.5"})})})]}),e.expanded?t.rows.map(r=>(0,S.jsx)(Ss,{...e.cardProps,row:r},r.sessionId)):null]})}function xs(e){let[t,s]=(0,A.useState)(e),[a,r]=(0,A.useState)(null),[l,p]=(0,A.useState)(null),[d,g]=(0,A.useState)(null),[v,b]=(0,A.useState)(null),[h,L]=(0,A.useState)(()=>new Set),P=(0,A.useRef)(null),D=(0,A.useRef)(null),T=(0,A.useRef)(null),R=(0,A.useRef)(new Map),U=(0,A.useRef)(new Map),H=(0,A.useRef)(l),O=!!a||!!l,x=(0,A.useCallback)(()=>{T.current!==null&&(clearTimeout(T.current),T.current=null)},[]),K=(0,A.useCallback)(I=>{D.current=bo(e.host),s(I)},[e.host]);(0,A.useEffect)(()=>{if(O){P.current=e;return}K(e)},[K,O,e]),(0,A.useEffect)(()=>{if(O||!P.current)return;let I=P.current;P.current=null,K(I)},[K,O]),(0,A.useLayoutEffect)(()=>{ho(e.host,D.current),D.current=null},[t,e.host]),(0,A.useEffect)(()=>{H.current=l},[l]),(0,A.useEffect)(()=>()=>x(),[x]);let _=(0,A.useMemo)(()=>fo(t),[t]);(0,A.useLayoutEffect)(()=>{R.current=_.groups,U.current=_.rowById},[_]),(0,A.useEffect)(()=>{t.groupBy==="team"&&!t.teamsLoaded&&t.onNeedTeams()},[t]),(0,A.useEffect)(()=>{t.groupBy==="team"&&_.mode==="flow"&&_.team&&t.onNeedTeamBoard(_.team)},[t,_]),(0,A.useEffect)(()=>{t.onTeamScope(_.mode==="flow"?_.scope:null)},[t,_]);let ne=(0,A.useCallback)(()=>{p(null),g(null),b(null)},[]),q=(0,A.useCallback)(I=>{L(E=>{let F=new Set(E);return F.has(I)?F.delete(I):F.add(I),F})},[]),j=(0,A.useCallback)(I=>{x(),!Rn(I)&&r(I.sessionId)},[x]),Ce=(0,A.useCallback)((I,E)=>{Rn(I)||E.target.closest("a, button, input, label")||(x(),T.current=setTimeout(()=>{T.current=null,t.onToggleSelect(I)},220))},[x,t]),Se=(0,A.useCallback)((I,E)=>{E.key!=="Enter"&&E.key!==" "||E.target!==E.currentTarget||Rn(I)||(E.preventDefault(),t.onToggleSelect(I))},[t]),be=(0,A.useCallback)((I,E)=>{t.groupBy!=="bot"&&(x(),p({kind:"card",id:String(I.sessionId)}),E.dataTransfer&&(E.dataTransfer.effectAllowed="move",E.dataTransfer.setData("text/plain",String(I.sessionId))))},[x,t.groupBy]),Ie=(0,A.useCallback)((I,E,F)=>{t.groupBy!=="bot"&&(x(),p({kind:"cluster",chatId:I,col:E}),F.dataTransfer&&(F.dataTransfer.effectAllowed="move",F.dataTransfer.setData("text/plain",`cluster:${I}`)))},[x,t.groupBy]),Me=(0,A.useCallback)((I,E)=>{!H.current||t.groupBy==="bot"||(E.preventDefault(),E.dataTransfer&&(E.dataTransfer.dropEffect="move"),g(I),b(Cs(E.currentTarget,E.clientY)?.dataset.id??null))},[t.groupBy]),Y=(0,A.useCallback)((I,E)=>{let F=H.current;if(!F||t.groupBy==="bot")return;E.preventDefault();let Te=Cs(E.currentTarget,E.clientY);ne();let he=R.current,V=I;if(F.kind==="cluster"){let te=(he.get(F.col)??[]).filter(ee=>String(ee.chatId)===F.chatId).filter(ee=>!(ee.status==="closed"&&V!=="done"));if(!te.length)return;let Ue=new Set(te.map(ee=>ee.sessionId)),oe=(he.get(V)??[]).filter(ee=>!Ue.has(ee.sessionId)),ue=Te?oe.findIndex(ee=>ee.sessionId===Te.dataset.id):oe.length;ue<0&&(ue=oe.length);let me=ue>0?oe[ue-1]:null,Ve=ue<oe.length?oe[ue]:null,qe=ot(me?We(me):null,Ve?We(Ve):null);t.onMoveRows(te.map((ee,we)=>({row:ee,column:V,position:qe+we*.001})));return}let Ne=U.current.get(F.id);if(!Ne||Ne.status==="closed"&&V!=="done")return;let W=(he.get(V)??[]).filter(te=>te.sessionId!==F.id),Q=Te?W.findIndex(te=>te.sessionId===Te.dataset.id):W.length;Q<0&&(Q=W.length);let ye=Q>0?W[Q-1]:null,re=Q<W.length?W[Q]:null,ke=ot(ye?We(ye):null,re?We(re):null);t.onMoveRows([{row:Ne,column:V,position:ke}])},[ne,t]),Le={dragId:l?.kind==="card"?l.id:null,dropBeforeId:v,editingId:a,groupBy:t.groupBy,callbacks:t,cancelOpen:x,onBeginEdit:j,onCardClick:Ce,onCardKeyDown:Se,onDragStartCard:be,onEditDone:()=>r(null)};return _.mode==="loading"?(0,S.jsx)(Je,{label:o("sessions.kanban.teamLoading"),className:"kanban-loading-state"}):_.mode==="bot"?_.columns.length?(0,S.jsx)(S.Fragment,{children:_.columns.map(I=>(0,S.jsxs)("section",{className:"kanban-column kanban-bot-col","data-bot":I.key,children:[(0,S.jsxs)("header",{children:[(0,S.jsx)("span",{className:"kanban-col-avatar",dangerouslySetInnerHTML:ln(Ge({name:I.name,larkAppId:I.larkAppId,size:"sm"}))}),(0,S.jsx)("h2",{children:I.name}),(0,S.jsx)("span",{className:"kanban-col-count",children:I.rows.length})]}),(0,S.jsx)("div",{className:"kanban-col-list",onDragOver:E=>Me(I.key,E),onDragEnd:ne,children:I.clusters.map(E=>(0,S.jsx)(Is,{item:E,dragCluster:l?.kind==="cluster"?l:null,cardProps:Le,expanded:E.type==="cluster"&&h.has(`bot:${I.key}:${E.chatId}`),onToggleExpanded:()=>{E.type==="cluster"&&q(`bot:${I.key}:${E.chatId}`)},onDragStartCluster:Ie},E.type==="card"?E.row.sessionId:E.chatId))})]},I.key))}):(0,S.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}):(0,S.jsx)(S.Fragment,{children:_.columns.map(I=>(0,S.jsxs)("section",{className:`kanban-column kanban-${I.id}${d===I.id?" drag-over":""}`,"data-col":I.id,onDragOver:E=>Me(I.id,E),onDrop:E=>Y(I.id,E),onDragEnd:ne,children:[(0,S.jsxs)("header",{children:[(0,S.jsx)("span",{className:`kanban-col-dot ${mo(I.id)}`,"aria-hidden":"true"}),(0,S.jsx)("h2",{children:o(I.labelKey)}),(0,S.jsx)("span",{className:"kanban-col-count",children:I.rows.length+I.hiddenCount})]}),(0,S.jsxs)("div",{className:"kanban-col-list",children:[I.rows.length?I.clusters.map(E=>(0,S.jsx)(Is,{item:E,columnId:I.id,dragCluster:l?.kind==="cluster"?l:null,cardProps:Le,expanded:E.type==="cluster"&&h.has(`${I.id}:${E.chatId}`),onToggleExpanded:()=>{E.type==="cluster"&&q(`${I.id}:${E.chatId}`)},onDragStartCluster:Ie},E.type==="card"?E.row.sessionId:E.chatId)):(0,S.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}),I.hiddenCount?(0,S.jsx)("div",{className:"kanban-col-more",children:o("sessions.kanban.moreHidden",{count:I.hiddenCount})}):null]})]},I.id))})}var n=De(kn(),1),wo=new Set(["image/png","image/jpeg","image/gif","image/webp"]),Rs=8,vo=10*1024*1024,Co=25*1024*1024;function So(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 Io(e){return e===168?"7d":`${e}H`}var To=Xn.map(e=>({value:String(e),label:Io(e)}));function de(e){return{__html:e}}function ae(){return typeof window>"u"?void 0:window.localStorage}function En(e){let t=String(e.status??"unknown");return(0,n.jsx)("span",{className:`status status-${Sn(t)}`,children:tn(t)})}function lt(e){let t=e.row?.openTodos,[s,a]=(0,c.useState)(null),[r,l]=(0,c.useState)(!1),[p,d]=(0,c.useState)(!1),g=(0,c.useRef)(null),v=(0,c.useRef)(null);if((0,c.useEffect)(()=>{if(!r)return;let x=_=>{let ne=_.target;v.current?.contains(ne)||g.current?.contains(ne)||(l(!1),a(null))},K=_=>{_.key==="Escape"&&(l(!1),a(null))};return document.addEventListener("mousedown",x,!0),document.addEventListener("keydown",K,!0),()=>{document.removeEventListener("mousedown",x,!0),document.removeEventListener("keydown",K,!0)}},[r]),!t||typeof t.remaining!="number"||t.remaining<=0)return null;let b=Number(t.total??0),h=Number(t.done??0),L=o("sessions.board.todoBadge",{done:h,total:b}),P=o("sessions.board.todoBadgeTitle",{remaining:t.remaining,total:b,done:h}),D=Array.isArray(t.items)?t.items:[],T=x=>x==="completed"?"\u2713":x==="in_progress"?"\u25B6":"\u25CB",R=x=>{let K=x.getBoundingClientRect();a({x:K.left,y:K.bottom+6})},U=()=>{let x=_=>_==="completed"?"[x]":_==="in_progress"?"[>]":"[ ]",K=D.map((_,ne)=>`${x(_.status)} ${_.text||`#${ne+1}`}`);return`${P}
|
|
7
|
+
${K.join(`
|
|
8
|
+
`)}`},H=async()=>{let x=U();try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(x);else{let K=document.createElement("textarea");K.value=x,K.style.position="fixed",K.style.opacity="0",document.body.appendChild(K),K.select(),document.execCommand("copy"),document.body.removeChild(K)}d(!0),window.setTimeout(()=>d(!1),1500)}catch{}},O=r||s;return(0,n.jsxs)("span",{ref:g,className:`session-todo-badge${t.hasInProgress?" active":""}${r?" pinned":""}`,tabIndex:0,onMouseEnter:x=>{r||R(x.currentTarget)},onFocus:x=>{r||R(x.currentTarget)},onMouseLeave:()=>{r||a(null)},onBlur:()=>{r||a(null)},onClick:x=>{x.stopPropagation(),r?(l(!1),a(null)):(R(x.currentTarget),l(!0))},children:[t.hasInProgress?(0,n.jsx)("span",{className:"session-todo-dot","aria-hidden":"true"}):null,L,O&&D.length?(0,cn.createPortal)((0,n.jsxs)("div",{ref:v,className:`session-todo-pop${r?" pinned":""}`,role:r?"dialog":"tooltip",style:{left:`${s?.x??0}px`,top:`${s?.y??0}px`},onMouseDown:x=>x.stopPropagation(),children:[(0,n.jsxs)("div",{className:"session-todo-pop-head",children:[(0,n.jsx)("span",{className:"session-todo-pop-title",children:P}),r?(0,n.jsx)("button",{type:"button",className:"session-todo-pop-copy",onClick:x=>{x.stopPropagation(),H()},children:p?o("sessions.board.todoCopied"):o("sessions.board.todoCopy")}):(0,n.jsx)("span",{className:"session-todo-pop-hint",children:o("sessions.board.todoClickHint")})]}),(0,n.jsx)("div",{className:"session-todo-pop-list",children:D.map((x,K)=>(0,n.jsxs)("div",{className:`session-todo-pop-item st-${Sn(x.status)}`,children:[(0,n.jsx)("span",{className:"session-todo-pop-glyph","aria-hidden":"true",children:T(x.status)}),(0,n.jsx)("span",{className:"session-todo-pop-text",children:x.text||`#${K+1}`})]},K))})]}),document.body):null]})}function ct(e){return e.row.locked?(0,n.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null}function ve(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:de(e.icon)})}function No(e){if(!e.url||!Xe())return null;let t=on();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:de(J.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(),Nn(e.row,s.currentTarget)},dangerouslySetInnerHTML:de(J.key)}):null]})}function xo(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:de(J.feishu)})}function Ro(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 Es(e,t){return t==="spawnedAt"||t==="lastMessageAt"?Number(e[t]??0):t==="tokenIn"?vn(e.tokenUsage?.in)??-1:t==="tokenOut"?vn(e.tokenUsage?.out)??-1:t==="adopt"?!!e.adopt:t==="chat"?Fe(e).toLowerCase():t==="cliId"?dn(e).toLowerCase():String(e[t]??"").toLowerCase()}function dn(e){return String(e.runtimeDisplayName??e.cliId??"unknown")}function Ms(e,t,s,a){let r=Es(e,s),l=Es(t,s),p=0;return typeof r=="number"&&typeof l=="number"?p=r-l:typeof r=="boolean"&&typeof l=="boolean"?p=Number(r)-Number(l):p=String(r).localeCompare(String(l)),p===0&&(p=Number(e.lastMessageAt??0)-Number(t.lastMessageAt??0)),a==="asc"?p:-p}function Eo(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"):e.status==="stalled"?o("sessions.board.signalStalled"):""}function Mo(e,t,s){let a=s==="needs-you"?hn(e):Number(e.lastMessageAt??0),r=s==="needs-you"?hn(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 Lo(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 Ao(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 Mn(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 rt(e){let[t,s]=(0,c.useState)(!1);return(0,n.jsx)("button",{type:"button","data-copy":e.value,onClick:()=>{yn(e.value,o("sessions.copy")).then(a=>{a&&(s(!0),window.setTimeout(()=>s(!1),800))})},children:t?o("sessions.copied"):o("sessions.copy")})}function Po(e){let[t,s]=(0,c.useState)(0),[a,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(t<=0)return;let l=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(l)},[t]),(0,n.jsx)("button",{id:"locate-btn",type:"button",disabled:a||t>0,onClick:async()=>{r(!0);let l=await e.locateSession(e.row);r(!1),l&&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 l=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(l)},[t]),(0,n.jsx)(ve,{action:"locate",icon:J.pin,label:t>0?o("sessions.cooldown",{seconds:t}):o("sessions.locate"),disabled:a||t>0,onClick:async()=>{r(!0);let l=await e.onLocate(e.row);r(!1),l&&s(30)}})}function Ya(e){let t=se.filter(d=>e.selected.has(d)).length,s=(0,c.useRef)(null),[a,r]=(0,c.useState)("");(0,c.useEffect)(()=>{let d=()=>{s.current?.open&&(s.current.open=!1)},g=b=>{let h=s.current;h?.open&&!h.contains(b.target)&&d()},v=b=>{b.key==="Escape"&&d()};return document.addEventListener("pointerdown",g,!0),document.addEventListener("keydown",v),()=>{document.removeEventListener("pointerdown",g,!0),document.removeEventListener("keydown",v)}},[]);let l=a.trim().toLowerCase(),p=l?se.filter(d=>d.toLowerCase().includes(l)):se;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===se.length?void 0:"cli-filter-active",children:t===se.length?o("common.all"):`${t}/${se.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:d=>r(d.currentTarget.value),onClick:d=>d.stopPropagation()}),(0,n.jsxs)("div",{className:"filter-cli-bulk",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{for(let d of se)e.selected.has(d)||e.onToggle(d,!0)},children:o("sessions.cliSelectAll")}),(0,n.jsx)("button",{type:"button",onClick:()=>{for(let d of se)e.selected.has(d)&&e.onToggle(d,!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(d=>(0,n.jsxs)("label",{className:"filter-check",children:[(0,n.jsx)("input",{type:"checkbox",name:"cli",value:d,checked:e.selected.has(d),onChange:g=>e.onToggle(d,g.currentTarget.checked)}),(0,n.jsx)("span",{children:d})]},d))})]})]})}function Oo(e){let t=[{key:"lastMessageAt",label:o("sessions.sort.lastMessageAt")},{key:"spawnedAt",label:o("sessions.sort.spawnedAt")},{key:"title",label:o("sessions.sort.title")},{key:"status",label:o("sessions.sort.status")}],s=t.find(a=>a.key===e.sortKey)??t[0];return(0,n.jsxs)("details",{className:"sessions-sort-menu sect-sort-menu",children:[(0,n.jsx)("summary",{"aria-label":o("sessions.sort"),children:(0,n.jsxs)("span",{className:"sect-sort-value",children:[o("sessions.sort"),": ",s.label," ",e.sortDir==="asc"?"\u2191":"\u2193"]})}),(0,n.jsx)("div",{className:"sect-sort-pop",role:"menu",children:t.map(a=>(0,n.jsxs)("button",{type:"button",role:"menuitem","aria-current":a.key===e.sortKey?"true":void 0,onClick:()=>e.onSort(a.key),children:[a.label,a.key===e.sortKey?e.sortDir==="asc"?" \u2191":" \u2193":null]},a.key))})]})}function Do(e){let t=(0,c.useRef)(null);Mn(t,e.open);let[s,a]=(0,c.useState)(""),r=[{value:"",label:o("sessions.anyStatus")},...ss.map(b=>({value:b,label:tn(b)}))],l=[{value:"",label:o("sessions.adoptAny")},{value:"yes",label:o("sessions.adoptYes")},{value:"no",label:o("sessions.adoptNo")}],p=[{value:"",label:o("sessions.chatAny")},...e.chatOptions],d=s.trim().toLowerCase(),g=d?se.filter(b=>b.toLowerCase().includes(d)):se,v=()=>{Un(ae(),!1),e.setFilters(()=>({q:e.filters.q,status:"",adopt:"",chat:"",multiBotTopics:!1,botTriggeredTopics:!1,showUnknownChats:!1,active:!0,cli:new Set(se)}))};return(0,n.jsxs)("dialog",{ref:t,className:"sessions-filter-drawer",onClose:e.onClose,onClick:b=>{b.target===b.currentTarget&&e.onClose()},children:[(0,n.jsxs)("header",{children:[(0,n.jsx)("h3",{children:o("sessions.filters.title")}),(0,n.jsx)(ve,{className:"card-act drawer-close-btn",icon:J.close,label:o("sessions.dismiss"),onClick:e.onClose})]}),(0,n.jsxs)("div",{className:"sessions-filter-drawer-body",children:[(0,n.jsxs)("div",{className:"sessions-filter-field",children:[(0,n.jsx)("span",{className:"sessions-filter-label",children:o("sessions.status")}),(0,n.jsx)("select",{value:e.filters.status,onChange:b=>e.setFilters(h=>({...h,status:b.currentTarget.value})),children:r.map(b=>(0,n.jsx)("option",{value:b.value,children:b.label},b.value||"any"))})]}),(0,n.jsxs)("div",{className:"sessions-filter-field",children:[(0,n.jsx)("span",{className:"sessions-filter-label",children:o("sessions.adopt")}),(0,n.jsx)("select",{value:e.filters.adopt,onChange:b=>e.setFilters(h=>({...h,adopt:b.currentTarget.value})),children:l.map(b=>(0,n.jsx)("option",{value:b.value,children:b.label},b.value||"any"))})]}),(0,n.jsxs)("div",{className:"sessions-filter-field",children:[(0,n.jsx)("span",{className:"sessions-filter-label",children:o("sessions.location")}),(0,n.jsx)("select",{value:e.filters.chat,onChange:b=>e.setFilters(h=>({...h,chat:b.currentTarget.value})),children:p.map(b=>(0,n.jsx)("option",{value:b.value,children:b.label},b.value||"any"))})]}),(0,n.jsxs)("div",{className:"sessions-filter-field",children:[(0,n.jsx)("span",{className:"sessions-filter-label",children:o("sessions.cli")}),(0,n.jsxs)("div",{className:"sessions-filter-cli",children:[(0,n.jsx)("input",{type:"search",className:"sessions-filter-cli-search",placeholder:o("sessions.cliSearch"),value:s,onChange:b=>a(b.currentTarget.value)}),(0,n.jsxs)("div",{className:"sessions-filter-cli-bulk",children:[(0,n.jsx)("button",{type:"button",onClick:()=>e.setFilters(b=>({...b,cli:new Set(se)})),children:o("sessions.cliSelectAll")}),(0,n.jsx)("button",{type:"button",onClick:()=>e.setFilters(b=>({...b,cli:new Set})),children:o("sessions.cliClear")})]}),(0,n.jsx)("div",{className:"sessions-filter-cli-list",children:g.length===0?(0,n.jsx)("span",{className:"filter-cli-empty",children:o("sessions.cliNoMatch")}):g.map(b=>(0,n.jsxs)("label",{className:"filter-check",children:[(0,n.jsx)("input",{type:"checkbox",name:"cli",value:b,checked:e.filters.cli.has(b),onChange:h=>{let L=h.currentTarget.checked;e.setFilters(P=>{let D=new Set(P.cli);return L?D.add(b):D.delete(b),{...P,cli:D}})}}),(0,n.jsx)("span",{children:b})]},b))})]})]}),(0,n.jsxs)("div",{className:"sessions-filter-toggles",children:[(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"multiBotTopics",checked:e.filters.multiBotTopics,onChange:b=>{let h=b.currentTarget.checked;e.setFilters(L=>({...L,multiBotTopics:h}))}}),(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:b=>{let h=b.currentTarget.checked;e.setFilters(L=>({...L,botTriggeredTopics:h}))}}),(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:b=>{let h=b.currentTarget.checked;Un(ae(),h),e.setFilters(L=>({...L,showUnknownChats:h}))}}),(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:b=>{let h=b.currentTarget.checked;e.setFilters(L=>({...L,active:h}))}}),(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.jsxs)("footer",{children:[(0,n.jsx)("button",{type:"button",className:"sessions-filter-clear",onClick:v,children:o("sessions.filters.clear")}),(0,n.jsx)("button",{type:"button",className:"primary sessions-filter-done",onClick:e.onClose,children:o("sessions.filters.done")})]})]})}function $o(e){let[t,s]=(0,c.useState)(!1),a=[{value:"stalled",label:o("sessions.view.need")},{value:"working",label:o("sessions.view.work")},{value:"",label:o("sessions.view.all")}],r=[e.filters.status!=="",e.filters.adopt!=="",e.filters.chat!=="",e.filters.cli.size<se.length,e.filters.multiBotTopics,e.filters.botTriggeredTopics,e.filters.showUnknownChats,!e.filters.active].filter(Boolean).length;return(0,n.jsxs)("form",{id:"filters",className:"filters dashboard-toolbar sessions-filters sessions-toolbar",onSubmit:l=>l.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q",placeholder:o("sessions.search"),value:e.filters.q,onChange:l=>{let p=l.currentTarget.value;e.setFilters(d=>({...d,q:p}))}}),(0,n.jsx)("div",{className:"segmented sessions-quick-view",role:"group","aria-label":o("sessions.status"),children:a.map(l=>(0,n.jsx)("button",{type:"button","data-quick":l.value,className:e.filters.status===l.value?"active":void 0,"aria-pressed":e.filters.status===l.value,onClick:()=>e.setFilters(p=>({...p,status:l.value})),children:l.label},l.label))}),(0,n.jsxs)("button",{type:"button",className:`sessions-filter-btn${r>0?" has-active":""}`,"aria-haspopup":"dialog","aria-expanded":t,onClick:()=>s(!0),children:[o("sessions.filters.title"),r>0?(0,n.jsx)("span",{className:"sessions-filter-count",children:r}):null]}),(0,n.jsx)(Oo,{sortKey:e.sortKey,sortDir:e.sortDir,onSort:e.onSort}),(0,n.jsx)(Ko,{...e.idleCleanup}),(0,n.jsx)(Do,{open:t,chatOptions:e.chatOptions,filters:e.filters,setFilters:e.setFilters,onClose:()=>s(!1)})]})}function Ho(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=Xe();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 Ko(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(e.hours),[l,p]=(0,c.useState)(),d=(0,c.useRef)(null),g=(0,c.useRef)(null),v=(0,c.useRef)(null),b=e.countForHours(a);return(0,c.useEffect)(()=>{t?r(e.hours):p(void 0)},[t,e.hours]),(0,c.useLayoutEffect)(()=>{if(!t)return;let h=()=>{let P=g.current,D=v.current;if(!P||!D)return;let T=12,R=window.innerWidth,U=window.innerHeight,H=Math.max(0,Math.min(292,R-T*2)),O=P.getBoundingClientRect(),x=D.offsetHeight,K=Math.max(T,R-H-T),_=O.left+O.width/2-H/2,ne=Math.min(Math.max(_,T),K),q=O.bottom+8,j=O.top-x-8,Ce=q+x<=U-T||j<T?Math.min(Math.max(q,T),Math.max(T,U-x-T)):Math.max(T,j);p({left:ne,top:Ce,width:H})},L=window.requestAnimationFrame(h);return window.addEventListener("resize",h),window.addEventListener("scroll",h,!0),()=>{window.cancelAnimationFrame(L),window.removeEventListener("resize",h),window.removeEventListener("scroll",h,!0)}},[t,e.busy,e.status]),(0,c.useEffect)(()=>{if(!t)return;let h=P=>{let D=P.target;D instanceof Node&&d.current?.contains(D)||D instanceof Node&&v.current?.contains(D)||s(!1)},L=P=>{P.key==="Escape"&&s(!1)};return document.addEventListener("pointerdown",h,!0),document.addEventListener("keydown",L),()=>{document.removeEventListener("pointerdown",h,!0),document.removeEventListener("keydown",L)}},[t]),(0,n.jsxs)("div",{id:"idle-cleanup-bar",className:`idle-cleanup-bar${b===0?" is-empty":""}${t?" is-open":""}`,ref:d,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(h=>!h),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,cn.createPortal)((0,n.jsxs)("div",{ref:v,className:"idle-cleanup-pop",role:"dialog","aria-label":o("sessions.idleCleanupRun"),style:l??{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:b})]})]}),(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:To.map(h=>{let L=Wn(h.value),P=L===a;return(0,n.jsx)("button",{type:"button",className:P?"active":void 0,"aria-pressed":P?"true":"false",disabled:e.busy,onClick:()=>r(L),children:h.label},h.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||b===0,onClick:()=>{e.onRun(a).then(()=>s(!1))},children:o("sessions.idleCleanupApply")})]})]}),document.body):null]})}function _o(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(d=>!e.hiddenColumns.has(d.id)),r=2+a.length,l={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(d,g){switch(g){case"botName":return(0,n.jsx)("td",{"data-label":l.botName,children:ge(d)});case"cliId":return(0,n.jsx)("td",{"data-label":l.cliId,children:(0,n.jsx)("span",{className:`badge cli-${Sn(d.cliId)}`,title:d.runtimeId&&d.runtimeId!==d.cliId?`${d.cliId} / ${d.runtimeId}`:void 0,children:dn(d)})});case"status":return(0,n.jsxs)("td",{"data-label":l.status,children:[(0,n.jsx)(En,{status:d.status}),(0,n.jsx)(lt,{row:d}),(0,n.jsx)(ct,{row:d})]});case"chat":return(0,n.jsx)("td",{className:"session-location-cell","data-label":l.chat,title:Qn(d),children:Fe(d)});case"tokenIn":return(0,n.jsx)("td",{className:"token-cell","data-label":l.tokenIn,children:Vn(d.tokenUsage?.in)});case"tokenOut":return(0,n.jsx)("td",{className:"token-cell","data-label":l.tokenOut,children:Vn(d.tokenUsage?.out)});case"title":return(0,n.jsx)("td",{className:"sessions-table-text-cell","data-label":l.title,title:String(d.title??""),children:pe(d.title??"").slice(0,48)});case"workingDir":return(0,n.jsx)("td",{className:"sessions-table-path-cell","data-label":l.workingDir,title:d.workingDir??"",children:String(d.workingDir??"").slice(-34)});case"spawnedAt":return(0,n.jsx)("td",{"data-label":l.spawnedAt,children:Ke(d.spawnedAt)});case"lastMessageAt":return(0,n.jsx)("td",{"data-label":l.lastMessageAt,children:Ke(d.lastMessageAt)});case"adopt":return(0,n.jsx)("td",{"data-label":l.adopt,children:d.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:d=>e.onSelectAll(d.currentTarget.checked)})}),a.map(d=>(0,n.jsx)(Ro,{sort:d.id,label:d.label,sortKey:e.sortKey,sortDir:e.sortDir,onSort:e.onSort},d.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(d=>(0,n.jsxs)("label",{className:"session-table-columns-item",children:[(0,n.jsx)("input",{type:"checkbox",checked:!e.hiddenColumns.has(d.id),onChange:()=>e.onToggleColumn(d.id)}),d.label]},d.id))]})]})})]})}),(0,n.jsx)("tbody",{children:e.rows.length?e.rows.map(d=>{let g=d.status==="closed",v=String(d.sessionId);return(0,n.jsxs)("tr",{"data-id":v,onClick:()=>e.onOpen(d),children:[(0,n.jsx)("td",{className:"sessions-table-select-cell","data-label":l.select,onClick:b=>b.stopPropagation(),children:(0,n.jsx)("input",{type:"checkbox",className:"row-select",checked:e.selected.has(v),disabled:g,onChange:b=>e.onSelect(v,b.currentTarget.checked)})}),a.map(b=>(0,n.jsx)(c.Fragment,{children:p(d,b.id)},b.id)),(0,n.jsx)("td",{className:"sessions-table-action-cell","data-label":l.actions,children:(0,n.jsx)("button",{className:"open",type:"button",children:o("sessions.details")})})]},v)}):(0,n.jsx)("tr",{children:(0,n.jsx)("td",{colSpan:r,className:"empty",children:o("sessions.empty")})})})]})}function Fo(e){let{exchange:t}=e,s=(0,c.useRef)(null),a=(0,c.useRef)(null),r=(0,c.useRef)(null),[l,p]=(0,c.useReducer)(ts,ns),d=l.open,[g,v]=(0,c.useState)(null),b=`session-exchange-tooltip-${(0,c.useId)().replace(/[^a-zA-Z0-9_-]/g,"-")}`,h=(0,c.useCallback)(()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},[]),L=(0,c.useCallback)(()=>{h(),p("open")},[h]),P=(0,c.useCallback)(()=>{h(),p("close"),v(null)},[h]),D=(0,c.useCallback)(()=>{h(),r.current=window.setTimeout(P,120)},[h,P]),T=(0,c.useCallback)(()=>{let R=s.current,U=a.current;if(!R||!U)return;let H=R.getBoundingClientRect(),O=U.getBoundingClientRect(),x=12,K=9,_=H.top-x-K,ne=window.innerHeight-H.bottom-x-K,q=_>=O.height||_>ne?"top":"bottom",j=H.left+H.width/2-O.width/2,Ce=Math.min(Math.max(j,x),Math.max(x,window.innerWidth-O.width-x)),Se=q==="top"?H.top-O.height-K:H.bottom+K,be=Math.min(Math.max(Se,x),Math.max(x,window.innerHeight-O.height-x));v({left:Ce,placement:q,top:be})},[]);return(0,c.useLayoutEffect)(()=>{if(d)return T(),window.addEventListener("resize",T),window.addEventListener("scroll",T,!0),()=>{window.removeEventListener("resize",T),window.removeEventListener("scroll",T,!0)}},[t.botFullText,t.userFullText,d,T]),(0,c.useEffect)(()=>()=>h(),[h]),(0,c.useEffect)(()=>{if(!d)return;let R=H=>{let O=H.target;O instanceof Node&&(s.current?.contains(O)||a.current?.contains(O)||P())},U=H=>{H.key==="Escape"&&P()};return document.addEventListener("pointerdown",R),document.addEventListener("keydown",U),()=>{document.removeEventListener("pointerdown",R),document.removeEventListener("keydown",U)}},[P,d]),!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":d?b:void 0,"aria-expanded":d,onClick:R=>{R.stopPropagation(),d?P():L()},onFocus:()=>{h(),p("focus")},onBlur:D,onPointerEnter:R=>{R.pointerType!=="touch"&&L()},onPointerLeave:R=>{R.pointerType!=="touch"&&D()},onKeyDown:R=>{R.key==="Escape"?P():(R.key==="Enter"||R.key===" ")&&(R.preventDefault(),d?P():L())},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]})}),d&&typeof document<"u"?(0,cn.createPortal)((0,n.jsx)("div",{ref:a,id:b,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:h,onPointerLeave:R=>{R.pointerType!=="touch"&&D()},onFocusCapture:h,onBlur:R=>{let U=R.relatedTarget;U&&(a.current?.contains(U)||s.current?.contains(U))||D()},onKeyDown:R=>{R.key==="Escape"&&(R.stopPropagation(),h(),p("escape-refocus"),v(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:de(tt(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:de(tt(t.botFullText))})]}):null]})}),document.body):null]})}function Ls(e){let t=e.row,s=pe(t.title)||t.sessionId,a=ge(t),r=_e(t),l=sn(t),p=Eo(t),d=Yn(t.workingDir),g=Cn(t),v=an(t)??(t.status==="closed"?"closed":"idle"),b=h=>{h.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,"data-signal":v,"aria-pressed":e.selected,onClick:b,children:[(0,n.jsxs)("div",{className:"session-card-top",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:de(Ge({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??dn(t)]})]}),(0,n.jsxs)("span",{className:"session-card-status-group",children:[(0,n.jsx)(En,{status:t.status}),(0,n.jsx)(lt,{row:t}),(0,n.jsx)(ct,{row:t})]})]}),d!=="-"||t.adopt||p?(0,n.jsxs)("div",{className:"session-card-meta",children:[d!=="-"?(0,n.jsx)("span",{title:t.workingDir??"",children:d}):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)(Fo,{exchange:g}),(0,n.jsx)("div",{className:"session-card-time",children:(0,n.jsx)("span",{children:t.agentAttention?.at?`${o("sessions.board.waiting")} ${Ke(hn(t))}`:`${o("sessions.last")}: ${Ke(t.lastMessageAt)}`})}),(0,n.jsxs)("div",{className:"session-card-actions",children:[(0,n.jsx)(xo,{row:t}),!t.feishuChatLink||t.scope!=="chat"?(0,n.jsx)(Bo,{row:t,onLocate:e.onLocate}):null,(0,n.jsx)(ve,{action:"details",icon:J.details,label:o("sessions.details"),onClick:()=>e.onOpen(t)}),xn(t)?(0,n.jsx)(ve,{action:"restart",icon:J.restart,label:o("sessions.restart"),onClick:h=>e.onRestart(t,h)}):null,(0,n.jsx)(No,{row:t,url:l}),t.status!=="closed"?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ve,{action:"lock",icon:t.locked?J.unlock:J.lock,label:Tn(t),kind:t.locked?"locked":"",onClick:h=>e.onLock(t,!t.locked,h)}),(0,n.jsx)(ve,{action:"close",icon:J.close,label:o("sessions.close"),kind:"danger",onClick:h=>e.onClose(t,h)})]}):null]})]})}function Uo(e){(0,c.useEffect)(()=>{!e.hidden&&!e.animated&&e.onAnimated()},[e.animated,e.hidden,e.onAnimated]);let t=new Map(qn.map(a=>[a.id,[]]));for(let a of e.rows){let r=an(a);r&&t.get(r).push(a)}let s=e.order.map(a=>qn.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 l=(t.get(a.id)??[]).sort((p,d)=>Mo(p,d,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:l.length})]})]}),(0,n.jsx)("div",{className:"session-board-list",children:l.length?l.map(p=>(0,n.jsx)(Ls,{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 jo(e){let t=pe(e.title).trim();return t||(e.kind==="thread"?o("sessions.topic.untitled"):e.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession"))}function zo(e){let t=(0,c.useMemo)(()=>In(e.rows),[e.rows]),s=(0,c.useMemo)(()=>new Map(In(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,l=a.rows[0],p=Fe(l),d=jo(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:de(bn({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:d}),(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"),": ",Ke(r.latestActivityAt)]})]})]}),(0,n.jsx)("div",{className:"session-topic-members",children:a.rows.map(v=>(0,n.jsx)(Ls,{row:v,selected:e.selected.has(v.sessionId),onToggleSelect:b=>{b.status!=="closed"?e.onToggleSelect(b):e.onOpen(b)},onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},v.sessionId))})]},a.key)}):(0,n.jsx)("div",{className:"sessions-topic-empty",children:o("sessions.topic.empty")})})}function Go(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"),l=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:de(Ge({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:Lo(t.createTime)})]}):null,(0,n.jsx)("div",{className:"history-bubble",children:l})]})]})}function Jo(e){let t=(0,c.useRef)(null);Mn(t,!!e.state);let s=e.state?$e.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 l=a.current;l&&(l.scrollTop=l.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: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:de(Ge({name:ge(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsx)("strong",{title:String(s.title??""),children:(pe(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)(ve,{id:"history-close",icon:J.close,label:o("sessions.dismiss"),onClick:e.onClose})})]}),(0,n.jsxs)("div",{className:"history-body",ref:a,children:[e.state.loading?(0,n.jsx)(Je,{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((l,p,d)=>(0,n.jsx)(Go,{message:l,ownerOpenId:e.state?.ownerOpenId,groupStart:p===0||nt(d[p-1])!==nt(l)},l.messageId??p))}):null]})]}):null})}function Xo(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(""),l=(0,c.useRef)(null),p=pe(e.row.title)||e.row.sessionId;(0,c.useLayoutEffect)(()=>{if(!t||!l.current)return;let g=l.current;g.focus(),g.select(),(()=>{let b=getComputedStyle(g),h=document.createElement("span");h.style.cssText="position:absolute;visibility:hidden;white-space:pre",h.style.fontSize=b.fontSize,h.style.fontFamily=b.fontFamily,h.style.fontWeight=b.fontWeight,h.style.letterSpacing=b.letterSpacing,h.textContent=g.value||" ",document.body.appendChild(h);let L=Math.round(window.innerWidth*.6);g.style.width=`${Math.min(Math.max(h.offsetWidth+22,80),L)}px`,h.remove()})()},[t,a]);let d=g=>{let v=a.trim();s(!1),g&&v&&v!==p&&e.onRename(e.row,v)};return t?(0,n.jsx)("input",{ref:l,type:"text",className:"term-modal-name-input",maxLength:200,value:a,onChange:g=>r(g.currentTarget.value),onBlur:()=>d(!0),onKeyDown:g=>{g.stopPropagation(),g.key==="Enter"?(g.preventDefault(),d(!0)):g.key==="Escape"&&(g.preventDefault(),d(!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)(ve,{id:"term-modal-edit",icon:J.edit,label:o("sessions.kanban.rename"),onClick:()=>{r(pe(e.row.title)||""),s(!0)}})]})}function Wo(e){let t=(0,c.useRef)(null);Mn(t,!!e.state);let s=e.state?$e.sessions.get(e.state.sessionId):null,a=s?sn(s):null,r=e.state?.url??a??"",l=s?dn(s):"",p=s?Yn(s.workingDir):"";return(0,n.jsx)("dialog",{id:"term-modal",className:"term-modal",ref:t,onClose:e.onClose,onClick:d=>{d.target===d.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:de(Ge({name:ge(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)(Xo,{row:s,onRename:e.onRename}),(0,n.jsx)(En,{status:s.status})]}),(0,n.jsxs)("span",{className:"term-modal-subtitle",children:[(0,n.jsx)("span",{children:ge(s)}),(0,n.jsx)("span",{children:l}),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:de(J.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:de(J.terminal)}),(0,n.jsx)(ve,{id:"term-modal-close",icon:J.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)(Je,{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 Vo(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:[],l=Array.isArray(t.spans)?t.spans:[],p=g=>g==="bad"||g==="warn"?"!":"i",d=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,v)=>(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]},v))})]}):null,l.length?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{children:[o("sessions.insightSpans")," (",l.length,")"]}),t.meta?.capped?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:o("sessions.insightCapped",{shown:String(t.meta.spansReturned??l.length),total:String(t.meta.spansTotal??l.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:[...l].sort((g,v)=>(g.relStartMs??0)-(v.relStartMs??0)).map((g,v)=>{let b=[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:d(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:Ao(g.durationMs)}),(0,n.jsxs)("td",{children:["#",String(g.turnIndex??0)]}),(0,n.jsx)("td",{children:b})]},v)})})})})]}):null]})}function qo(e){let[t,s]=(0,c.useState)(null);if((0,c.useEffect)(()=>s(null),[e.row.sessionId]),!He.authed)return null;let a=async()=>{s({loading:!0});try{let r=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/insight?detail=spans`),l=await r.json().catch(()=>({}));!l.ok||!l.report?s({loading:!1,error:String(l.error??r.status)}):s({loading:!1,report:l.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)(Je,{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)(Vo,{report:t.report}):null]})]})}function Yo(e){let t=(0,c.useRef)(null);Mn(t,!!e.row);let s=e.row,a=s?sn(s):null,r=!!s&&s.status==="closed",l=!!s&&!r&&!!a;return(0,n.jsx)("dialog",{id:"drawer",ref:t,onClose:e.onClose,onClick:p=>{p.target===p.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:pe(s.title)||s.sessionId}),(0,n.jsx)(ve,{id:"drawer-close",className:"card-act drawer-close-btn",icon:J.close,label:o("sessions.dismiss"),onClick:e.onClose})]}),(0,n.jsxs)("span",{className:"drawer-status-line",children:[(0,n.jsx)(En,{status:s.status}),(0,n.jsx)(lt,{row:s}),(0,n.jsx)(ct,{row:s})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:s.sessionId})," ",(0,n.jsx)(rt,{value:s.sessionId})]})]}),(0,n.jsxs)("div",{className:"drawer-body",children:[(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.bot"),":"]})," ",ge(s)," \xB7 ",(0,n.jsxs)("b",{children:[o("sessions.cli"),":"]})," ",dn(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.location"),":"]})," ",Fe(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"chatId:"})," ",(0,n.jsx)("code",{children:s.chatId??""})," ",(0,n.jsx)(rt,{value:s.chatId??""})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"rootMessageId:"})," ",(0,n.jsx)("code",{children:s.rootMessageId??""})," ",(0,n.jsx)(rt,{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.jsx)(qo,{row:s})]}),(0,n.jsxs)("footer",{className:"drawer-foot",children:[(0,n.jsx)("div",{className:"drawer-foot-actions",children:r?(0,n.jsx)("button",{id:"resume-btn",type:"button",className:"primary drawer-btn-primary",onClick:async p=>{await e.resumeSession(s,p.currentTarget)&&e.onClose()},children:o("sessions.resume")}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"takeover-btn",type:"button",className:"primary drawer-btn-primary",disabled:!l,title:l?void 0:o("sessions.openReadonlyTerminal"),onClick:p=>e.onTakeover(s,p.currentTarget),children:o("sessions.takeoverTerminal")}),xn(s)?(0,n.jsx)("button",{id:"restart-btn",type:"button",className:"drawer-btn-secondary",onClick:async p=>{await e.restartSession(s,p.currentTarget)&&e.onClose()},children:o("sessions.restart")}):null,(0,n.jsx)("button",{id:"close-btn",type:"button",className:"drawer-btn-danger",onClick:async p=>{await e.closeSession(s,p.currentTarget)&&e.onClose()},children:o("sessions.close")})]})}),(0,n.jsxs)("details",{className:"drawer-more",children:[(0,n.jsx)("summary",{"aria-label":o("sessions.more"),children:o("sessions.more")}),(0,n.jsxs)("div",{className:"drawer-more-pop",role:"menu",children:[(0,n.jsx)("button",{id:"history-drawer-btn",type:"button",role:"menuitem",onClick:()=>e.openHistory(s),children:o("sessions.history.title")}),on()&&!r?(0,n.jsx)("button",{id:"copy-cmd-btn",type:"button",role:"menuitem","data-tip":o("sessions.copyCommandHint"),onClick:p=>{ls(s,p.currentTarget)},children:o("sessions.copyCommand")}):null,(0,n.jsx)("button",{id:"lock-btn",type:"button",role:"menuitem",onClick:p=>{e.setSessionLocked(s,!s.locked,p.currentTarget)},children:Tn(s)}),!s.feishuChatLink||s.scope!=="chat"?(0,n.jsx)("span",{className:"drawer-more-item",children:(0,n.jsx)(Po,{row:s,locateSession:e.locateSession})}):(0,n.jsx)("a",{className:"drawer-more-item drawer-more-link",href:s.feishuChatLink,target:"_blank",rel:"noopener",role:"menuitem",children:o("sessions.openChat")}),s.queued&&!r?(0,n.jsx)("button",{id:"start-btn",type:"button",role:"menuitem",onClick:async p=>{await e.startSession(s,p.currentTarget)&&e.onClose()},children:o("sessions.create.start")}):null]})]})]})]}):null})}function Zo(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,N=()=>e.onClose(),M=$=>{$.target===f&&e.onClose()};return f.addEventListener("close",N),f.addEventListener("click",M),()=>{f.removeEventListener("close",N),f.removeEventListener("click",M)}},[e]);let[s,a]=(0,c.useState)(""),[r,l]=(0,c.useState)([]),[p,d]=(0,c.useState)(new Set),[g,v]=(0,c.useState)("lead"),[b,h]=(0,c.useState)(""),[L,P]=(0,c.useState)("in_progress"),[D,T]=(0,c.useState)(""),[R,U]=(0,c.useState)(""),[H,O]=(0,c.useState)(!1),[x,K]=(0,c.useState)(!1),[_,ne]=(0,c.useState)(()=>Et(ae())),[q,j]=(0,c.useState)(null),[Ce,Se]=(0,c.useState)([]),[be,Ie]=(0,c.useState)(""),[Me,Y]=(0,c.useState)(""),[Le,I]=(0,c.useState)(""),[E,F]=(0,c.useState)(""),[Te,he]=(0,c.useState)(!1),[V,Ne]=(0,c.useState)(!1),[W,Q]=(0,c.useState)(""),[ye,re]=(0,c.useState)(""),[ke,te]=(0,c.useState)(null),[Ue,oe]=(0,c.useState)(0),ue=(0,c.useRef)(null),me=(0,c.useRef)(1);(0,c.useEffect)(()=>{t&&(a(""),l([]),d(new Set),v("lead"),h(""),P("in_progress"),T(""),U(""),O(!1),K(!1),j(null),Y(""),I(""),F(""),Q(""),re(""),te(null),oe(0),me.current=1)},[t]),(0,c.useEffect)(()=>{if(!W)return;let f=!0,N=window.setInterval(()=>{fetch("/api/feed-groups").then(async M=>{let $=await M.json().catch(()=>({}));!M.ok||!$.ok||!f||(Se(Array.isArray($.groups)?$.groups:[]),Ie(typeof $.larkAppId=="string"?$.larkAppId:""),F(""),Q(""),re(""))}).catch(()=>{})},1e3);return()=>{f=!1,window.clearInterval(N)}},[W]),(0,c.useEffect)(()=>{if(!t||t.loading||t.success)return;let f=!0;return he(!0),fetch("/api/feed-groups").then(async N=>{let M=await N.json().catch(()=>({}));if(!N.ok||!M.ok)throw new Error(M.message??M.error??`HTTP ${N.status}`);f&&(Se(Array.isArray(M.groups)?M.groups:[]),Ie(typeof M.larkAppId=="string"?M.larkAppId:""),F(""))}).catch(N=>{f&&F(N instanceof Error?N.message:String(N))}).finally(()=>{f&&he(!1)}),()=>{f=!1}},[t]);let Ve=async()=>{let f=be?`?larkAppId=${encodeURIComponent(be)}`:"",N=await fetch(`/api/feed-groups/auth-url${f}`),M=await N.json().catch(()=>({}));if(!N.ok||!M.authUrl){B(M.error??`HTTP ${N.status}`,{kind:"error"});return}Q(String(M.authUrl)),re("")},qe=async f=>{Ne(!0);try{let N=await fetch("/api/feed-groups/oauth-callback",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({callbackUrl:f.trim()})}),M=await N.json().catch(()=>({}));if(!N.ok||!M.ok)throw new Error(M.message??M.error??`HTTP ${N.status}`);let $=await fetch("/api/feed-groups"),X=await $.json().catch(()=>({}));if(!$.ok||!X.ok)throw new Error(X.message??X.error??`HTTP ${$.status}`);Se(Array.isArray(X.groups)?X.groups:[]),Ie(typeof X.larkAppId=="string"?X.larkAppId:""),F(""),Q(""),re("")}catch(N){B(N instanceof Error?N.message:String(N),{kind:"error"})}finally{Ne(!1)}};if(!t)return null;if(t.success){let f=t.success,N=typeof f.shareLink=="string"&&f.shareLink?f.shareLink:"",M=Array.isArray(f.failed)?f.failed.length:0,$=Array.isArray(f.spawned)?f.spawned.length:0,X=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:[X,"\uFF08",$,"\uFF09"]}),M>0?(0,n.jsx)("p",{className:"cs-warn",children:o("sessions.create.partialFail",{n:String(M)})}):null,N?(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:N,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)(Je,{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 ee=t.bots,we=[...p],Ye=we,Ln=f=>ee.find(N=>N.larkAppId===f)?.botName??f,xe=ke?gs(ee,ke.query).slice(0,8):[],je=f=>{if(!ke)return;let N=ms(s,ke,f.botName);a(N.text),te(null),oe(0),d(M=>new Set(M).add(f.larkAppId)),h(M=>M||f.larkAppId),requestAnimationFrame(()=>{let M=ue.current;M&&(M.focus(),M.setSelectionRange(N.caret,N.caret))})},un=f=>{if(!(!ke||xe.length===0)){if(f.key==="ArrowDown"||f.key==="ArrowUp"){f.preventDefault();let N=f.key==="ArrowDown"?1:-1;oe(M=>(M+N+xe.length)%xe.length);return}if(f.key==="Enter"||f.key==="Tab"){f.preventDefault(),je(xe[Math.min(Ue,xe.length-1)]);return}f.key==="Escape"&&(f.preventDefault(),te(null))}},Ae=async f=>{let N=[...f.clipboardData.files].filter(le=>le.type.startsWith("image/"));if(N.length===0)return;f.preventDefault();let M=f.currentTarget.selectionStart??s.length,$=f.currentTarget.selectionEnd??M,X=N.filter(le=>wo.has(le.type.toLowerCase()));if(X.length!==N.length){B(o("sessions.create.imageUnsupported"),{kind:"warning"});return}if(r.length+X.length>Rs){B(o("sessions.create.imageCountLimit",{n:String(Rs)}),{kind:"warning"});return}if(X.some(le=>le.size>vo)){B(o("sessions.create.imageSizeLimit"),{kind:"warning"});return}if(r.reduce((le,Re)=>le+Re.size,0)+X.reduce((le,Re)=>le+Re.size,0)>Co){B(o("sessions.create.imageTotalLimit"),{kind:"warning"});return}try{let le=me.current,Re=await Promise.all(X.map(async(ie,ze)=>{let Ee=await So(ie),Ze=Ee.indexOf(",");if(Ze<0)throw new Error("bad_image_data");let ce=le+ze;return{id:`${Date.now()}-${ze}-${Math.random().toString(36).slice(2)}`,ordinal:ce,marker:`[${o("sessions.create.imageMarker",{n:String(ce)})}]`,name:ie.name||`pasted-image-${r.length+ze+1}`,mimeType:ie.type.toLowerCase(),size:ie.size,dataBase64:Ee.slice(Ze+1),previewUrl:Ee}}));me.current+=Re.length;let Be=ps(s,M,$,Re.map(ie=>ie.marker));a(Be.text),l(ie=>[...ie,...Re]),te(null),requestAnimationFrame(()=>{let ie=ue.current;ie&&(ie.focus(),ie.setSelectionRange(Be.caret,Be.caret))})}catch{B(o("sessions.create.imageReadFailed"),{kind:"error"})}},An=async f=>{f.preventDefault();let N=s.trim();if(!N){B(o("sessions.create.errContent"),{kind:"warning"});return}if(we.length===0){B(o("sessions.create.errNoBot"),{kind:"warning"});return}let M=b||we[0]||"";if(g==="lead"&&(!M||!we.includes(M))){B(o("sessions.create.errLead"),{kind:"warning"});return}K(!0),j(null);try{let $=await fetch("/api/sessions/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({content:N,larkAppIds:we,mode:g,column:L,leadLarkAppId:g==="lead"?M:void 0,name:D.trim()||void 0,bindWorkingDir:R.trim()||void 0,feedGroupId:Me||void 0,newFeedGroupName:Le.trim()||void 0,feedGroupAppId:Me||Le.trim()?be:void 0,images:r.map(Pe=>({name:Pe.name,mimeType:Pe.mimeType,dataBase64:Pe.dataBase64}))})}),X=await $.json().catch(()=>null);$.ok&&X?.ok?_?(j(X),a(""),l([]),me.current=1,T("")):e.onSuccess(X):$.status!==401&&B(`${o("sessions.create.failed")}: ${X?.error??$.status}`,{kind:"error"})}catch($){B(`${o("sessions.create.failed")}: ${$}`,{kind:"error"})}finally{K(!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:An,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:ue,name:"content",rows:5,placeholder:o("sessions.create.contentPlaceholder"),"aria-describedby":"cs-content-help",required:!0,value:s,onChange:f=>{let N=f.currentTarget,M=N.value;a(M),te(st(M,N.selectionStart??M.length)),oe(0)},onClick:f=>te(st(s,f.currentTarget.selectionStart??s.length)),onKeyDown:un,onPaste:f=>{Ae(f)},onBlur:()=>setTimeout(()=>te(null),0)}),ke?(0,n.jsx)("div",{className:"cs-mention-menu",role:"listbox","aria-label":o("sessions.create.mentionBots"),children:xe.length?xe.map((f,N)=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":N===Ue,className:N===Ue?"active":void 0,onMouseDown:M=>M.preventDefault(),onClick:()=>je(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 N=r.filter($=>$.id!==f.id),M=fs(s,f.marker,N.map($=>$.marker),$=>`[${o("sessions.create.imageMarker",{n:String($+1)})}]`);a(M.text),l(N.map(($,X)=>({...$,ordinal:X+1,marker:M.markers[X]}))),me.current=N.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")}),(0,n.jsx)(Ft,{bots:ee,selected:p,onToggle:(f,N)=>{d(M=>{let $=new Set(M);return N?$.add(f):$.delete(f),$.has(b)||h($.values().next().value??""),$})},searchPlaceholder:o("botPicker.searchPlaceholder"),noMatchLabel:o("botPicker.noMatch"),emptyLabel:o("sessions.create.noBots"),selectedCountLabel:f=>o("botPicker.selectedCount",{n:String(f)})})]}),(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:()=>v("lead")})," ",o("sessions.create.modeLead")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"all",checked:g==="all",onChange:()=>v("all")})," ",o("sessions.create.modeAll")]}),(0,n.jsx)("small",{children:o("sessions.create.modeHelp")})]}),W?(0,n.jsx)("div",{className:"feed-group-auth-overlay",children:(0,n.jsxs)("section",{className:"feed-group-auth-card",role:"dialog","aria-modal":"true","aria-labelledby":"session-feed-group-auth-title",children:[(0,n.jsx)("h3",{id:"session-feed-group-auth-title",children:"\u6388\u6743\u98DE\u4E66\u6807\u7B7E"}),(0,n.jsxs)("p",{children:["\u70B9\u51FB\u4E0B\u9762\u7684\u6309\u94AE\uFF0C\u5728\u98DE\u4E66\u9875\u9762\u786E\u8BA4\u6388\u6743\u3002\u5982\u679C BotMux \u4E0E\u6D4F\u89C8\u5668\u5728\u540C\u4E00\u53F0\u7535\u8111\uFF0C\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u5B8C\u6210\u6388\u6743\u3002\u5982\u679C BotMux \u8FD0\u884C\u5728\u8FDC\u7A0B\u865A\u62DF\u673A\u4E0A\uFF0C\u6D4F\u89C8\u5668\u4F1A\u56E0\u65E0\u6CD5\u8BBF\u95EE\u672C\u673A\u5730\u5740 ",(0,n.jsx)("code",{children:"127.0.0.1:9768"})," \u800C\u663E\u793A\u201C\u65E0\u6CD5\u8BBF\u95EE\u201D\uFF1B\u6B64\u65F6\u8BF7\u590D\u5236\u5730\u5740\u680F\u4E2D\u7684\u5B8C\u6574\u94FE\u63A5\u5E76\u7C98\u8D34\u5230\u4E0B\u65B9\u3002"]}),(0,n.jsx)("button",{type:"button",className:"primary feed-group-auth-open",onClick:()=>window.open(W,"_blank","noopener"),children:"\u8DF3\u8F6C\u98DE\u4E66\u6388\u6743"}),(0,n.jsxs)("label",{children:[(0,n.jsx)("span",{children:"\u8BF7\u628A\u70B9\u51FB\u6388\u6743\u540E\u7684\u5B8C\u6574\u94FE\u63A5\u7C98\u8D34\u5728\u8FD9\u91CC"}),(0,n.jsx)("input",{type:"url",value:ye,placeholder:"http://127.0.0.1:9768/callback?code=\u2026&state=\u2026",onChange:f=>re(f.currentTarget.value)})]}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{Q(""),re("")},children:"\u53D6\u6D88"}),(0,n.jsx)("button",{type:"button",className:"primary",disabled:!ye.trim()||V,onClick:()=>{qe(ye)},children:V?"\u6B63\u5728\u5B8C\u6210\u6388\u6743\u2026":"\u5B8C\u6210\u6388\u6743"})]})]})}):null,(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:Ye.length===0,value:Ye.includes(b)?b:"",onChange:f=>h(f.currentTarget.value),children:Ye.length?Ye.map(f=>(0,n.jsx)("option",{value:f,children:Ln(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:L==="in_progress",onChange:()=>P("in_progress")})," ",o("sessions.create.columnInProgress")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"backlog",checked:L==="backlog",onChange:()=>P("backlog")})," ",o("sessions.create.columnBacklog")]}),(0,n.jsx)("small",{children:o("sessions.create.columnHelp")})]}),(0,n.jsxs)("fieldset",{className:`cs-advanced${H?" open":""}`,children:[(0,n.jsx)("legend",{children:(0,n.jsx)("button",{type:"button",id:"cs-advanced-title",className:"cs-advanced-title","aria-expanded":H,"aria-controls":"cs-advanced-fields",onClick:()=>O(f=>!f),children:o("sessions.create.optionalConfig")})}),H?(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:D,onChange:f=>T(f.currentTarget.value)})]}),(0,n.jsxs)("fieldset",{className:"cs-feed-group",children:[(0,n.jsx)("legend",{children:"\u98DE\u4E66\u6807\u7B7E\uFF08\u53EF\u9009\uFF09"}),(0,n.jsx)(_t,{groups:Ce,selectedId:Me,newName:Le,disabled:Te||!!E,onChange:(f,N)=>{Y(f),I(N)}}),(0,n.jsx)("small",{children:"\u5C55\u5F00\u540E\u53EF\u5728\u7B2C\u4E00\u884C\u8F93\u5165\u65B0\u6807\u7B7E\u540D\u79F0\uFF0C\u6216\u9009\u62E9\u4E0B\u65B9\u5DF2\u6709\u6807\u7B7E\u3002"}),Te?(0,n.jsx)("small",{children:"\u6B63\u5728\u8BFB\u53D6\u98DE\u4E66\u6807\u7B7E\u2026"}):null,E?(0,n.jsxs)("div",{className:"cs-warn",children:[(0,n.jsx)("small",{children:E})," ",(0,n.jsx)("button",{type:"button",disabled:V,onClick:()=>{Ve()},children:V?"\u6B63\u5728\u5B8C\u6210\u6388\u6743\u2026":"\u7ACB\u5373\u6388\u6743"}),(0,n.jsx)("small",{children:" \u6388\u6743\u540E\u4F1A\u5F39\u7A97\u63D0\u793A\u4F60\u7C98\u8D34\u56DE\u8C03\u5730\u5740\u3002"})]}):null]}),(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:R,onChange:f=>U(f.currentTarget.value)}),(0,n.jsx)("small",{children:o("sessions.create.workingDirHelp")})]})]}):null]}),q?(0,n.jsxs)("p",{className:"cs-keep-success",role:"status",children:[(0,n.jsxs)("span",{children:[q.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress"),Array.isArray(q.failed)&&q.failed.length>0?` \xB7 ${o("sessions.create.partialFail",{n:String(q.failed.length)})}`:""]}),typeof q.shareLink=="string"&&q.shareLink?(0,n.jsx)("a",{href:q.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:_,onChange:f=>{let N=f.currentTarget.checked;ne(N),Mt(ae(),N)}}),(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:x||ee.length===0,children:x?o("sessions.create.submitting"):o("sessions.create.submit")})]})]})]})}function Qo(){return(0,n.jsx)("div",{className:"sessions-skeleton","aria-busy":"true","aria-label":o("sessions.loadingSessions"),children:[0,1,2,3].map(e=>(0,n.jsxs)("div",{className:"sessions-skeleton-col",children:[(0,n.jsx)("div",{className:"skel skel-head"}),(0,n.jsx)("div",{className:"skel skel-card"}),(0,n.jsx)("div",{className:"skel skel-card skel-card-short"}),(0,n.jsx)("div",{className:"skel skel-card"})]},e))})}function ea(){Ot();let e=zn(i=>[...i.sessions.values()]),t=zn(i=>i.bootstrapped),[s,a]=(0,c.useState)(0),r=(0,c.useCallback)(()=>a(i=>i+1),[]),[l,p]=(0,c.useState)({q:"",status:"",adopt:"",chat:"",multiBotTopics:!1,botTriggeredTopics:!1,showUnknownChats:Nt(ae()),active:!0,cli:new Set(se)}),[d,g]=(0,c.useState)(new Set),[v,b]=(0,c.useState)("lastMessageAt"),[h,L]=(0,c.useState)("desc"),[P,D]=(0,c.useState)(()=>new Set(St(ae()))),[T,R]=(0,c.useState)(()=>Tt(ae())),[U,H]=(0,c.useState)(()=>xt(ae())),[O,x]=(0,c.useState)(!1),[K,_]=(0,c.useState)(null),[ne,q]=(0,c.useState)(null),[j,Ce]=(0,c.useState)(()=>Lt(ae())),Se=`${T}:${T==="kanban"?j:"-"}`,be=(0,c.useRef)(!0),[Ie,Me]=(0,c.useState)(0),[Y,Le]=(0,c.useState)([]),[I,E]=(0,c.useState)(null),[F,Te]=(0,c.useState)(!1),he=(0,c.useRef)(!1),[V,Ne]=(0,c.useState)(()=>{try{return window.localStorage.getItem(jn)??""}catch{return""}}),[W,Q]=(0,c.useState)({data:null,key:"",fetchedAt:0}),ye=(0,c.useRef)(!1),re=(0,c.useRef)(new Set),[ke,te]=(0,c.useState)(""),[Ue,oe]=(0,c.useState)(null),[ue,me]=(0,c.useState)(null),[Ve,qe]=(0,c.useState)(null),[ee,we]=(0,c.useState)(!1),[Ye,Ln]=(0,c.useState)(24),[xe,je]=(0,c.useState)(""),[un,Ae]=(0,c.useState)(null),[An,f]=(0,c.useState)(null),[N,M]=(0,c.useState)(null),[$,X]=(0,c.useState)(null),[Pe,le]=(0,c.useState)(null),[Re,Be]=(0,c.useState)(null),[ie,ze]=(0,c.useState)(!1),Ee=(0,c.useRef)(0);(0,c.useLayoutEffect)(()=>{if(be.current){be.current=!1;return}Me(i=>i+1)},[Se]),(0,c.useEffect)(()=>{le(document.getElementById("create-session-modal"))},[]),(0,c.useEffect)(()=>{Pt().then(r)},[r]);let Ze=(0,c.useMemo)(()=>{let i=new Map;for(let u of e){let m=String(u.chatId??"").trim();if(!m||!l.showUnknownChats&&Zn(u))continue;let y=Fe(u);i.set(m,as(i.get(m),y,m))}return[...i.entries()].sort((u,m)=>u[1].localeCompare(m[1])).map(([u,m])=>({value:u,label:m}))},[l.showUnknownChats,s,e]);(0,c.useEffect)(()=>{l.chat&&(Ze.some(i=>i.value===l.chat)||p(i=>({...i,chat:""})))},[Ze,l.chat]);let ce=(0,c.useMemo)(()=>{let i=l.q.toLowerCase(),u=[...l.cli],m=u.length>0&&u.length<se.length,y=T==="kanban",w=l.multiBotTopics||l.botTriggeredTopics?new Set(In(e).filter(k=>!l.multiBotTopics||k.multiBot).filter(k=>!l.botTriggeredTopics||k.inferredBotTriggered).map(k=>k.key)):null,C=e.filter(k=>!m||u.includes(k.cliId??"unknown")).filter(k=>l.showUnknownChats||!Zn(k)).filter(k=>!l.status||k.status===l.status).filter(k=>!l.adopt||l.adopt==="yes"==!!k.adopt).filter(k=>!l.chat||String(k.chatId??"")===l.chat).filter(k=>!l.active||y||k.status!=="closed").filter(k=>!i||is(k).includes(i));return w?C.filter(k=>w.has(et(k))).sort((k,z)=>Ms(k,z,v,h)):C.sort((k,z)=>Ms(k,z,v,h))},[l,s,h,v,e,T]),Pn=(0,c.useMemo)(()=>os(e),[e]),Oe=(0,c.useMemo)(()=>new Map(e.map(i=>[i.sessionId,i])),[e,s]),dt=(0,c.useMemo)(()=>ce.filter(i=>i.status!=="closed"),[ce]),Qe=(T==="table"||T==="topics"?ce:dt).filter(i=>i.status!=="closed"),ut=[...d].map(i=>Oe.get(i)).filter(i=>!!i&&i.status!=="closed"),mt=Qe.length>0&&Qe.every(i=>d.has(i.sessionId)),As=Qe.some(i=>d.has(i.sessionId))&&!mt;(0,c.useEffect)(()=>{g(i=>{let u=!1,m=new Set;for(let y of i){let w=Oe.get(y);w&&w.status!=="closed"?m.add(y):u=!0}return u?m:i})},[Oe]);let Bn=(0,c.useCallback)(i=>{let u=new Set;if(!i)return u;for(let m of i.groupChats)u.add(m);if(I)for(let[m,y]of I){if(u.has(m))continue;let w=!1;for(let C of i.botIds)if(y.botIds.has(C)){w=!0;break}if(w){for(let C of y.observedNames)if(i.botNames.has(C)){u.add(m);break}}}return u},[I]),gt=(0,c.useMemo)(()=>{if(T==="kanban"&&j==="team"){let i=Y.find(m=>m.key===V)??Y[0],u=Bn(i);return ce.filter(m=>u.has(String(m.chatId)))}return ce},[j,V,Y,ce,Bn,T]),On=(0,c.useCallback)(i=>Wt(gt,i),[gt]),Dn=(0,c.useCallback)(async()=>{if(!(he.current||F)){he.current=!0;try{let[i,u,m]=await Promise.all([fetch("/api/team/hosted").then(C=>C.json()).catch(()=>null),fetch("/api/team/remote-roster").then(C=>C.json()).catch(()=>null),fetch("/api/groups").then(C=>C.json()).catch(()=>null)]);Array.isArray(m?.chats)&&E(new Map(m.chats.map(C=>[String(C.chatId),{botIds:new Set((C.memberBots??[]).filter(k=>k.inChat).map(k=>String(k.larkAppId))),observedNames:new Set((C.observedBotNames??[]).map(k=>String(k)))}])));let y=C=>({ids:new Set(C.map(k=>String(k.larkAppId))),names:new Set(C.map(k=>String(k.name??"")).filter(Boolean))}),w=[];for(let C of i?.teams??[]){let{ids:k,names:z}=y(C.bots??[]);w.push({key:`local:${C.teamId}`,label:C.isDefault?o("team.myHostedTeam"):String(C.name??C.teamId),botIds:k,botNames:z,groupChats:new Set((C.groupChatIds??[]).map(G=>String(G)))})}for(let C of u?.memberships??[]){let{ids:k,names:z}=y(C.roster?.bots??[]);w.push({key:`${C.hubUrl}::${C.teamId}`,label:String(C.teamName??C.teamId??C.hubUrl),botIds:k,botNames:z,groupChats:new Set})}Le(w),Ne(C=>w.length&&!w.some(k=>k.key===C)?w[0].key:C)}finally{Te(!0),he.current=!1}}},[F]),pt=(0,c.useCallback)(async(i,u,m,y,w)=>{try{let k=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:m,position:y})}):await fetch("/api/team/remote-board-move",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({key:i,sessionId:u,column:m,position:y})}),z=await k.json().catch(()=>({}));(!k.ok||z?.ok===!1)&&(Q(G=>{if(!G.data||G.key!==i)return G;let Z={...G.data.board};return w?Z[u]=w:delete Z[u],{...G,data:{...G.data,board:Z}}}),k.status!==401&&B(`${o("sessions.kanban.moveFail")}: ${z?.error??k.status}`,{kind:"error"}))}catch(C){Q(k=>{if(!k.data||k.key!==i)return k;let z={...k.data.board};return w?z[u]=w:delete z[u],{...k,data:{...k.data,board:z}}}),B(`${o("sessions.kanban.moveFail")}: ${C}`,{kind:"error"})}},[]),Ps=(0,c.useCallback)(async i=>{let u=W.key===i.key&&Date.now()-W.fetchedAt<3e4;if(!(ye.current||u)){ye.current=!0;try{let y=i.key.startsWith("local:")?`/api/team/board/local/${encodeURIComponent(i.key.slice(6))}`:`/api/team/remote-board?key=${encodeURIComponent(i.key)}`,w=await fetch(y),C=await w.json().catch(()=>({}));if(!w.ok||C?.ok===!1)return;let k=typeof C.deploymentId=="string"?C.deploymentId:null,z=[];for(let G of Array.isArray(C.reports)?C.reports:[])if(!(k&&G.deploymentId===k))for(let Z of Array.isArray(G.sessions)?G.sessions:[])z.push({...Z,remoteDeployment:G.deploymentName||G.deploymentId});Q({key:i.key,fetchedAt:Date.now(),data:{board:C.board&&typeof C.board=="object"?C.board:{},remoteRows:z}})}finally{ye.current=!1}}},[W.fetchedAt,W.key]);(0,c.useEffect)(()=>{T==="kanban"&&j==="team"&&!F&&Dn()},[j,F,Dn,T]),(0,c.useEffect)(()=>{let i=window.setInterval(()=>{T==="kanban"&&j==="team"&&(Q(u=>({...u,fetchedAt:0})),r())},3e4);return()=>window.clearInterval(i)},[j,r,T]);let ft=(0,c.useCallback)(async(i,u,m,y)=>{try{let w=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/board`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({column:u,position:m})}),C=await w.json().catch(()=>({}));(!w.ok||C?.ok===!1)&&(i.kanbanColumn=y.column,i.kanbanPosition=y.position,r(),w.status!==401&&B(`${o("sessions.kanban.moveFail")}: ${C?.error??w.status}`,{kind:"error"}))}catch(w){i.kanbanColumn=y.column,i.kanbanPosition=y.position,r(),B(`${o("sessions.kanban.moveFail")}: ${w}`,{kind:"error"})}},[r]),Bs=(0,c.useCallback)(i=>{let u=!1;for(let m of i){let y=String(m.row.sessionId);if(!y||m.row.status==="closed"&&m.column!=="done")continue;if(j==="team"){let k=Y.find(Z=>Z.key===V)??Y[0];if(!k)continue;let G=(W.key===k.key&&W.data?W.data.board:{})[y];Q(Z=>{let wt=Z.key===k.key&&Z.data?Z.data:{board:{},remoteRows:Z.data?.remoteRows??[]},Zs={...wt.board,[y]:{column:m.column,position:m.position}};return{...Z,key:k.key,data:{...wt,board:Zs}}}),pt(k.key,y,m.column,m.position,G),u=!0;continue}let w=$e.sessions.get(y);if(!w)continue;let C={column:w.kanbanColumn,position:w.kanbanPosition};w.kanbanColumn=m.column,w.kanbanPosition=m.position,ft(w,m.column,m.position,C),u=!0}u&&r()},[j,V,Y,W,ft,pt,r]),bt=(0,c.useCallback)(async(i,u)=>{let m=i.title;i.title=u,r();try{let y=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/rename`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:u})}),w=await y.json().catch(()=>({}));(!y.ok||w?.ok===!1)&&(i.title=m,r(),y.status!==401&&B(`${o("sessions.kanban.renameFail")}: ${w?.error??y.status}`,{kind:"error"}))}catch(y){i.title=m,r(),B(`${o("sessions.kanban.renameFail")}: ${y}`,{kind:"error"})}},[r]),$n=(0,c.useCallback)(async i=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/locate`,{method:"POST"}),m=await u.json();return m.ok?!0:(B(`Locate failed: ${m.error??u.status}`,{kind:"error"}),!1)}catch(u){return B(`Locate error: ${u}`,{kind:"error"}),!1}},[]),mn=(0,c.useCallback)(async(i,u)=>{if(!await wn({title:"\u5173\u95ED\u4F1A\u8BDD",message:o("sessions.closeConfirm"),danger:!0}))return!1;u&&(u.disabled=!0);try{let m=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/close`,{method:"POST"}),y=await m.json().catch(()=>({}));if(!m.ok||y?.ok===!1)return m.status!==401&&B(`Close failed: ${y?.error??m.status}`,{kind:"error"}),!1;let w=Gn(y);return w&&B(Kt(w)?`\u26A0\uFE0F Closed locally, but a credentialed host subtree could NOT be proven terminated: ${nn(w)}. The remote session WAS cancelled \u2014 inspect the local host process.`:`\u26A0\uFE0F Closed locally, but the remote session was NOT cancelled: ${nn(w)} \u2014 manual cleanup required.`,{kind:"warning"}),g(C=>{let k=new Set(C);return k.delete(i.sessionId),k}),r(),!0}catch(m){return B(`Close error: ${m}`,{kind:"error"}),!1}finally{u&&(u.disabled=!1)}},[r]),gn=(0,c.useCallback)(async(i,u,m)=>{let y=!!i.locked;if(y===u)return!0;i.locked=u,r(),m&&(m.disabled=!0);try{let w=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:u})}),C=await w.json().catch(()=>({}));return!w.ok||C?.ok===!1?(i.locked=y,r(),w.status!==401&&B(`${o("sessions.lockFailed")}: ${C?.error??w.status}`,{kind:"error"}),!1):(i.locked=!!C.locked,r(),!0)}catch(w){return i.locked=y,r(),B(`${o("sessions.lockFailed")}: ${w}`,{kind:"error"}),!1}finally{m&&(m.disabled=!1)}},[r]),pn=(0,c.useCallback)(async(i,u)=>{if(re.current.has(i.sessionId)||!await wn({title:"\u91CD\u542F\u4F1A\u8BDD",message:cs(i),danger:!0}))return!1;u&&(u.disabled=!0);try{let m=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/restart`,{method:"POST"}),y=await m.json().catch(()=>({}));return!m.ok||y?.ok===!1?(m.status!==401&&B(`${o("sessions.restartFailed")}: ${y?.message??y?.error??m.status}`,{kind:"error"}),!1):(re.current.add(i.sessionId),window.setTimeout(()=>re.current.delete(i.sessionId),5e3),!0)}catch(m){return B(`${o("sessions.restartFailed")}: ${m}`,{kind:"error"}),!1}finally{u&&(u.disabled=!1)}},[]),Os=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let m=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/resume`,{method:"POST"}),y=await m.json().catch(()=>({}));return!m.ok||y.ok===!1?(B(`${o("sessions.resumeFailed")}: ${y?.error??m.status}`,{kind:"error"}),!1):!0}catch(m){return B(`${o("sessions.resumeFailed")}: ${m}`,{kind:"error"}),!1}finally{u&&(u.disabled=!1)}},[]),Ds=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let m=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/start`,{method:"POST"}),y=await m.json().catch(()=>({}));return!m.ok||y.ok===!1?(m.status!==401&&B(`${o("sessions.create.startFailed")}: ${y?.error??m.status}`,{kind:"error"}),!1):!0}catch(m){return B(`${o("sessions.create.startFailed")}: ${m}`,{kind:"error"}),!1}finally{u&&(u.disabled=!1)}},[]),fn=(0,c.useCallback)(i=>{f({sessionId:i.sessionId,loading:!0,messages:[]}),(async()=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/history?limit=80`),m=await u.json().catch(()=>({}));if(!u.ok||m?.ok===!1){let w=String(m?.error??u.status),C=w==="not_found_yet"||w==="not_found";f(k=>k?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:w,stale:C}:k);return}let y=Array.isArray(m.messages)?m.messages:[];f(w=>w?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:y,ownerOpenId:m.ownerOpenId}:w)}catch(u){f(m=>m?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:String(u)}:m)}})()},[]),Hn=(0,c.useCallback)(i=>{if(!Xe())return;let u=sn(i);if(!u){Ae(i.sessionId);return}M({sessionId:i.sessionId,url:u,loading:!1})},[]),$s=(0,c.useCallback)((i,u)=>{Nn(i,u)},[]),Hs=(0,c.useCallback)((i,u)=>{if(on()&&i.status!=="closed"){Nn(i,u);return}Hn(i)},[Hn]),Ks=(0,c.useCallback)(async()=>{let i=[...d];if(i.length===0||!await wn({title:"\u5173\u95ED\u4F1A\u8BDD",message:o("sessions.closeBulkConfirm",{count:i.length}),danger:!0}))return;oe({done:0,total:i.length});let u=0,m=0,y=[],w=[...i];async function C(){for(;w.length;){let k=w.shift();try{let z=await fetch(`/api/sessions/${encodeURIComponent(k)}/close`,{method:"POST"}),G=await z.json().catch(()=>({}));if(!z.ok||G?.ok===!1)m+=1;else{let Z=Gn(G);Z&&y.push(nn(Z))}}catch{m+=1}finally{u+=1,oe({done:u,total:i.length})}}}await Promise.all(Array.from({length:Math.min(6,i.length)},()=>C())),oe(null),g(new Set),r(),m>0&&B(`Failed: ${m}/${i.length}`,{kind:"error"}),y.length>0&&B(`\u26A0\uFE0F ${y.length}/${i.length} closed locally but left a residual requiring manual cleanup: ${y.join(", ")}`,{kind:"warning"})},[r,d]),_s=(0,c.useCallback)(async i=>{let u=[...d].map(k=>Oe.get(k)).filter(k=>!!k&&k.status!=="closed"&&!!k.locked!==i);if(u.length===0)return;me({locked:i,done:0,total:u.length});let m=0,y=0,w=[...u];async function C(){for(;w.length;){let k=w.shift(),z=!!k.locked;try{let G=await fetch(`/api/sessions/${encodeURIComponent(k.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:i})}),Z=await G.json().catch(()=>({}));!G.ok||Z?.ok===!1?(y+=1,k.locked=z):k.locked=!!Z.locked}catch{y+=1,k.locked=z}finally{m+=1,me({locked:i,done:m,total:u.length})}}}await Promise.all(Array.from({length:Math.min(6,u.length)},()=>C())),me(null),r(),y>0&&B(`${o("sessions.lockFailed")}: ${y}/${u.length}`,{kind:"error"})},[r,Oe,d]),Fs=(0,c.useCallback)(()=>{let i=[...d].filter(m=>!!Oe.get(m));if(i.length===0)return;let u=Jt(i);qe(o("sessions.monitorRoomAdded",{added:u.added,total:u.total})),window.setTimeout(()=>qe(null),1800)},[Oe,d]),Us=(0,c.useCallback)(async i=>{let u=Wn(i);if(!u)return;let m=On(u);if(m.length!==0){Ln(u),we(!0),je(o("sessions.idleCleanupRunning"));try{let y=await fetch("/api/sessions/cleanup-idle",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({olderThanHours:u,sessionIds:m.map(k=>k.sessionId)})}),w=await y.json().catch(()=>({}));if(!y.ok){y.status!==401&&B(`${o("sessions.idleCleanupFailed")}: ${w?.error??y.status}`,{kind:"error"}),je("");return}g(k=>{let z=new Set(k);for(let G of w?.results??[])G?.ok&&G?.sessionId&&z.delete(String(G.sessionId));return z}),je(o("sessions.idleCleanupDone",{closed:Number(w?.closed??0),failed:Number(w?.failed??0)}));let C=(w?.results??[]).filter(k=>k?.ok&&k?.residual).map(k=>nn(k.residual));C.length>0&&B(`\u26A0\uFE0F ${C.length} session(s) closed locally but left a residual requiring manual cleanup: ${C.join(", ")}`,{kind:"warning"}),r()}catch(y){B(`${o("sessions.idleCleanupFailed")}: ${y}`,{kind:"error"}),je("")}finally{we(!1)}}},[On,r]),js=i=>{let u=It(i)??"board";u!==T&&(R(u),Rt(ae(),u))},ht=(0,c.useCallback)(i=>{v===i?L(u=>u==="asc"?"desc":"asc"):(b(i),L(i==="spawnedAt"||i==="lastMessageAt"?"desc":"asc"))},[v]),zs=(i,u)=>{H(m=>{let y=m.indexOf(i),w=y+u;if(y<0||w<0||w>=m.length)return m;let C=[...m];return C.splice(y,1),C.splice(w,0,i),Fn(ae(),C),C})},Gs=(i,u)=>{i!==u&&H(m=>{let y=m.indexOf(i),w=m.indexOf(u);if(y<0||w<0)return m;let C=[...m];return C.splice(y,1),C.splice(w,0,i),Fn(ae(),C),C})},Js=(0,c.useMemo)(()=>({rows:ce,groupBy:j,teams:Y,teamsLoaded:F,teamKey:V,teamBoardData:W.data,teamBoardKey:W.key}),[j,V,Y,F,ce,W.data,W.key]),Xs=un?Oe.get(un)??null:null,Kn=(0,c.useMemo)(()=>F?Y.length?Y.map(i=>({value:i.key,label:i.label})):[{value:"",label:o("sessions.kanban.noTeam")}]:[{value:"__loading",label:o("sessions.kanban.teamLoading")}],[Y,F]),Ws=!F||Y.length===0,yt=Y.some(i=>i.key===V)?V:Kn[0]?.value??"",Vs=Kn.find(i=>i.value===yt)?.label??o("sessions.kanban.groupTeam"),qs=(0,c.useCallback)(()=>{Ee.current+=1,ze(!1),Be(null)},[]),kt=(0,c.useCallback)(async()=>{let i=Ee.current+1;Ee.current=i,Be({bots:[],loading:!0}),ze(!0);try{let u=await ds();if(Ee.current!==i)return;Be({bots:u})}finally{Ee.current===i&&ze(!1)}},[]),Ys=(0,c.useCallback)(async()=>{let i=await Ht({title:o("sessions.debugTerminal"),message:o("sessions.debugTerminalPrompt")});if(i===null)return;let u=i.trim(),m=window.open("about:blank","_blank");m&&(m.opener=null);try{let y=await fetch("/api/debug-terminal",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(u?{workingDir:u}:{})}),w=await y.json().catch(()=>({}));if(!y.ok||w?.ok===!1||!w?.url){m?.close(),y.status!==401&&B(`${o("sessions.debugTerminalFail")}: ${w?.error??y.status}`,{kind:"error"});return}m?m.location.href=w.url:window.open(w.url,"_blank","noopener")}catch(y){m?.close(),B(`${o("sessions.debugTerminalFail")}: ${y}`,{kind:"error"})}},[]);return(0,c.useEffect)(()=>{let i=()=>{jt()&&He.authed&&kt()};return i(),window.addEventListener(Jn,i),()=>window.removeEventListener(Jn,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:T===i?"active":void 0,"aria-pressed":T===i,onClick:()=>js(i),children:u},i))}),(0,n.jsx)("div",{className:`segmented kanban-groupby${T==="kanban"?" is-visible":" is-collapsed"}`,id:"kanban-groupby",role:"group","aria-label":o("sessions.kanban.groupBy"),"aria-hidden":T!=="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:j===i?"active":void 0,"aria-pressed":j===i,onClick:()=>{Ce(i),At(ae(),i)},children:u},i))}),(0,n.jsx)("span",{id:"kanban-team-stats",className:"kanban-team-stats",hidden:!(T==="kanban"&&j==="team"&&F),children:ke}),(0,n.jsx)($t,{id:"kanban-team",className:"kanban-team-menu",ariaLabel:o("sessions.kanban.groupTeam"),hidden:!(T==="kanban"&&j==="team"),disabled:Ws,label:Vs,value:yt,options:Kn,onChange:i=>{if(Y.some(u=>u.key===i)){Ne(i);try{window.localStorage.setItem(jn,i)}catch{}}}})]})]}),(0,n.jsxs)("div",{className:"page-heading-actions sessions-page-actions",children:[Xe()?(0,n.jsx)("button",{type:"button",id:"monitor-room-open",className:"monitor-room-open",onClick:()=>{window.location.href=Xt()},children:o("sessions.monitorRoom")}):null,He.authed?(0,n.jsx)("button",{type:"button",className:"debug-terminal-btn",title:o("sessions.debugTerminalHint"),onClick:()=>{Ys()},children:o("sessions.debugTerminal")}):null,He.authed?(0,n.jsx)(Dt,{className:"page-primary-action create-session-btn",disabled:ie,onClick:()=>{kt()},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:Pn.logical}),o("sessions.runtime.logical")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:Pn.resident}),o("sessions.runtime.resident")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:Pn.dormant}),o("sessions.runtime.dormant")]})]}),(0,n.jsx)($o,{chatOptions:Ze,filters:l,setFilters:p,sortKey:v,sortDir:h,onSort:ht,idleCleanup:{busy:ee,hours:Ye,status:xe,countForHours:i=>On(i).length,onRun:Us}}),(0,n.jsx)(Ho,{selectedCount:d.size,lockDisabled:!ut.some(i=>!i.locked),unlockDisabled:!ut.some(i=>!!i.locked),closeProgress:Ue,lockProgress:ue,monitorRoomText:Ve,onClear:()=>g(new Set),onClose:()=>{Ks()},onAddToMonitorRoom:Fs,onLock:i=>{_s(i)}}),(0,n.jsxs)("div",{className:`sessions-view-stage${Ie>0?" sessions-view-stage-enter":""}`,"data-view":T,"data-kanban-group":j,children:[t?null:(0,n.jsx)(Qo,{}),(0,n.jsx)(_o,{rows:ce,selected:d,hidden:T!=="table"||!t,sortKey:v,sortDir:h,selectAllChecked:mt,selectAllIndeterminate:As,selectAllDisabled:Qe.length===0,hiddenColumns:P,onToggleColumn:i=>{let u=!P.has(i),m=new Set(P);u?m.add(i):m.delete(i),_n(ae(),Array.from(m)),D(m),u&&i===v&&(b("lastMessageAt"),L("desc"))},onResetColumns:()=>{D(new Set),_n(ae(),[])},onOpen:i=>Ae(i.sessionId),onSelect:(i,u)=>g(m=>{let y=new Set(m);return u?y.add(i):y.delete(i),y}),onSelectAll:i=>g(u=>{let m=new Set(u);for(let y of Qe)i?m.add(y.sessionId):m.delete(y.sessionId);return m}),onSort:ht}),(0,n.jsx)(Uo,{rows:dt,selected:d,hidden:T!=="board"||!t,order:U,animated:O,dragColId:K,dragOverCol:ne,onAnimated:()=>x(!0),onMoveColumn:zs,onMoveColumnTo:Gs,onDragCol:_,onDragOverCol:q,onToggleSelect:i=>g(u=>{let m=new Set(u);return m.has(i.sessionId)?m.delete(i.sessionId):m.add(i.sessionId),m}),onOpen:i=>Ae(i.sessionId),onHistory:fn,onLocate:i=>$n(i),onRestart:(i,u)=>{pn(i,u)},onLock:(i,u,m)=>{gn(i,u,m)},onClose:(i,u)=>{mn(i,u)}}),(0,n.jsx)(zo,{rows:ce,relationRows:e,selected:d,hidden:T!=="topics"||!t,onToggleSelect:i=>g(u=>{let m=new Set(u);return m.has(i.sessionId)?m.delete(i.sessionId):m.add(i.sessionId),m}),onOpen:i=>Ae(i.sessionId),onHistory:fn,onLocate:i=>$n(i),onRestart:(i,u)=>{pn(i,u)},onLock:(i,u,m)=>{gn(i,u,m)},onClose:(i,u)=>{mn(i,u)}}),(0,n.jsx)("div",{id:"sessions-kanban",ref:X,className:`sessions-kanban${j==="bot"?" kanban-mode-bot":""}`,hidden:T!=="kanban"||!t,children:T==="kanban"?(0,n.jsx)(xs,{host:$,...Js,canRestartSession:xn,getTeamChatIds:Bn,icons:{details:J.details,feishu:J.feishu,history:J.history,key:J.key,lock:J.lock,restart:J.restart,close:J.close,terminal:J.terminal,unlock:J.unlock},lockActionLabel:Tn,sessionStatusText:tn,onClose:(i,u)=>{let m=$e.sessions.get(String(i.sessionId));m&&mn(m,u)},onDetails:i=>Ae(String(i.sessionId)),onHistory:fn,onMoveRows:Bs,onNeedTeamBoard:i=>{Ps(i)},onNeedTeams:()=>{Dn()},onOpenTerminal:Xe()?Hn:void 0,onOpenWritableTerminal:Xe()&&on()?$s:void 0,onRename:(i,u)=>{let m=$e.sessions.get(String(i.sessionId));m&&bt(m,u)},onRestart:(i,u)=>{let m=$e.sessions.get(String(i.sessionId));m&&pn(m,u)},onTeamScope:i=>te(i?o("sessions.kanban.teamScope",{chats:i.chats,sessions:i.sessions}):""),onToggleLock:(i,u)=>{let m=$e.sessions.get(String(i.sessionId));m&&gn(m,!m.locked,u)},onToggleSelect:i=>g(u=>{let m=String(i.sessionId),y=new Set(u);return y.has(m)?y.delete(m):y.add(m),y}),selectedSessionIds:d}):null})]},Ie),(0,n.jsx)(Yo,{row:Xs,onClose:()=>Ae(null),locateSession:$n,openHistory:fn,resumeSession:Os,restartSession:pn,closeSession:mn,setSessionLocked:gn,startSession:Ds,onTakeover:Hs}),(0,n.jsx)(Wo,{state:N,onClose:()=>M(null),onRename:bt}),(0,n.jsx)(Jo,{state:An,onClose:()=>f(null)}),Pe?(0,cn.createPortal)((0,n.jsx)(Zo,{dialog:Pe,state:Re,onClose:qs,onSuccess:i=>Be(u=>u&&{...u,success:i})}),Pe):null]})}function Za(e){return Bt(e,(0,n.jsx)(ea,{}))}export{Ya as CliFilterGroup,zo as TopicGroupsView,Za as renderSessionsPage};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as Ke}from"./chunk-G5ZS2YUS.js";import{a as xe}from"./chunk-SOBMN2VY.js";import{a as ye}from"./chunk-OT6L6G7R.js";import{a as K,c as he,j as De,l as I,q as F}from"./chunk-5QX4OYOR.js";import{c as Ze,d as O}from"./chunk-RHVFZC5Z.js";import{a as Re}from"./chunk-QITAMHW6.js";import{w as Ie}from"./chunk-CK22743G.js";import{c as We}from"./chunk-XVIXNQGC.js";import{c as ue,d as _e,e as Te}from"./chunk-CVNIMUPY.js";var f=ue(_e(),1);var P=ue(_e(),1);var i=ue(Te(),1),Ye=["transcript_received","chat_received","participant_joined","participant_left","magic_share_started","magic_share_ended"],Ee=8e3,et=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;function ze(e,t,a,s,o){return`${e?"1":"0"}|${t??""}|${a??""}|${s?"1":"0"}|${o??""}`}function tt(e){return ze(e.vcEnabled,e.textOutputPolicy,e.voiceOutputPolicy,e.realtimeVoiceEnabled,e.catalogDefaultConsumerId)}function nt(e){return e.map(t=>{let a=t.textOutputPolicy??null,s=t.voiceOutputPolicy??null,o=t.realtimeVoiceEnabled===!0,u=t.catalogDefaultConsumerId??null,m=t.vcEligible!==!1,y=m&&t.vcEnabled!==!1;return{appId:t.appId,label:t.label||t.appId,...t.cliId?{cliId:t.cliId}:{},online:t.online,workingDirReady:t.workingDirReady,reliableTurnTerminal:t.reliableTurnTerminal,managedSideEffectEligible:t.managedSideEffectEligible,sandboxIsolated:t.sandboxIsolated,vcEligible:m,vcEnabled:y,textOutputPolicy:a,voiceOutputPolicy:s,realtimeVoiceEnabled:o,catalogDefaultConsumerId:u,baseline:ze(y,a,s,o,u)}})}var je=0;function Le(){return je+=1,`p${je}`}function it(e){return{...e,listenerPlacement:e.listenerPlacement??"auto",uiKey:Le(),isNew:!1}}function at(e){let{uiKey:t,isNew:a,...s}=e;return s}function lt(e){return e.workingDirReady&&e.reliableTurnTerminal&&e.managedSideEffectEligible}function ee(e){return(0,i.jsxs)("span",{className:"vc-profile-field-head",children:[e.title,(0,i.jsx)(De,{label:e.title,children:(0,i.jsx)("span",{className:"vc-profile-help",children:e.help})})]})}function qe(e){let t=O(),a=(0,P.useRef)(null);return(0,P.useEffect)(()=>{let s=a.current;if(!(!s||s.open))try{s.showModal()}catch{s.setAttribute("open","")}},[]),(0,i.jsxs)("dialog",{ref:a,className:["vc-profile-dialog",e.className].filter(Boolean).join(" "),onClose:e.onClose,onCancel:s=>{s.preventDefault(),e.onClose()},children:[(0,i.jsxs)("header",{className:"vc-profile-dialog-head",children:[(0,i.jsxs)("div",{children:[e.eyebrow?(0,i.jsx)("span",{children:e.eyebrow}):null,(0,i.jsx)("h3",{children:e.title})]}),(0,i.jsx)("button",{type:"button",className:"vc-profile-dialog-close","aria-label":t("settings.vcProfiles.close"),onClick:e.onClose})]}),(0,i.jsx)("div",{className:"vc-profile-dialog-body",children:e.children})]})}function Ge(e){let t=O();return e.enabled?e.canWrite?(0,i.jsx)(st,{canWrite:e.canWrite,onFeishuLoginQr:e.onFeishuLoginQr}):(0,i.jsx)("p",{className:"hint",children:t("settings.vcProfiles.needAuth")}):null}function st(e){let t=O(),a=Ze(),s=(0,P.useRef)(!1),[o,u]=(0,P.useState)(null),[m,y]=(0,P.useState)(null),[k,M]=(0,P.useState)(!1),[N,b]=(0,P.useState)(!1),[C,te]=(0,P.useState)(!1),[j,Q]=(0,P.useState)(!1),[d,v]=(0,P.useState)({}),[A,ne]=(0,P.useState)(!1),[ie,Z]=(0,P.useState)(null),[ae,J]=(0,P.useState)(null),[_,ge]=(0,P.useState)(null),[fe,le]=(0,P.useState)({}),[z,Oe]=(0,P.useState)("");(0,P.useEffect)(()=>(s.current=!0,()=>{s.current=!1}),[]);let X=(0,P.useRef)(0),pe=(0,P.useCallback)(async()=>{let l=++X.current;b(!1),Q(!1),v({}),Z(null),J(null),M(!0);try{let r=await fetch("/api/vc-meeting/consumer-profiles"),c=await r.json().catch(()=>({}));if(!s.current||X.current!==l)return;!r.ok||c?.ok!==!0?(u(null),y(typeof c?.error=="string"?c.error:`HTTP ${r.status}`)):(u(Qe(c)),y(null),b(!1))}catch(r){if(!s.current||X.current!==l)return;u(null),y(r instanceof Error?r.message:String(r))}finally{s.current&&X.current===l&&M(!1)}},[]);(0,P.useEffect)(()=>{pe()},[pe]);let E=(0,P.useCallback)(l=>{u(r=>r&&l(r)),b(!0),ne(!1)},[]),we=(0,P.useCallback)((l,r)=>{E(c=>({...c,profiles:c.profiles.map(p=>p.uiKey===l?{...p,...r}:p)}))},[E]),L=(0,P.useCallback)(async()=>{if(!o||C||k)return;let l={};if(o.profiles.forEach((r,c)=>{et.test(r.id)||(l[`profiles[${c}].id`]=t("settings.vcProfiles.idInvalid")),(r.instructions??"").length>Ee&&(l[`profiles[${c}].instructions`]=t("settings.vcProfiles.instructionsTooLong"))}),Object.keys(l).length>0){v(l);return}te(!0),Q(!1),v({});try{let r=await fetch("/api/vc-meeting/consumer-profiles",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({expectedRevision:o.revision,defaultMode:o.defaultMode,defaultConsumerIds:o.defaultConsumerIds,profiles:o.profiles.map(at),botOutputPolicies:o.botPolicies.filter(p=>tt(p)!==p.baseline).map(p=>({appId:p.appId,vcEnabled:p.vcEnabled,textOutputPolicy:p.textOutputPolicy,voiceOutputPolicy:p.voiceOutputPolicy,realtimeVoiceEnabled:p.realtimeVoiceEnabled,catalogDefaultConsumerId:p.catalogDefaultConsumerId}))})}),c=await r.json().catch(()=>({}));if(!s.current)return;if(r.status===409){Q(!0);return}if(r.status===422){let p={};for(let T of Array.isArray(c?.fieldErrors)?c.fieldErrors:[])typeof T?.path=="string"&&typeof T?.message=="string"&&(p[T.path]=T.message);v(Object.keys(p).length>0?p:{profiles:t("settings.vcProfiles.validationFailed")});return}if(!r.ok||c?.ok!==!0){v({profiles:typeof c?.error=="string"?c.error:`HTTP ${r.status}`});return}u(Qe(c)),b(!1),ne(!0)}catch(r){if(!s.current)return;v({profiles:r instanceof Error?r.message:String(r)})}finally{s.current&&te(!1)}},[o,k,C,t]),se=(0,P.useCallback)((l,r)=>{u(c=>c&&{...c,botPolicies:c.botPolicies.map(p=>p.appId===l?{...p,...r}:p)}),b(!0),ne(!1)},[]),D=(0,P.useCallback)(async l=>{if(!_){ge(l),le(r=>({...r,[l]:{ok:!0,text:t("settings.vcProfiles.botPolicies.preflightRunning")}}));try{let r=await fetch("/api/vc-meeting/bot-preflight",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({appId:l})}),c=await r.json().catch(()=>({}));if(!s.current)return;if(r.ok&&c?.ok===!0){e.onFeishuLoginQr?.(null),le(p=>({...p,[l]:{ok:!0,text:t("settings.vcProfiles.botPolicies.preflightOk")}}));return}typeof c?.feishuLoginQr=="string"&&c.feishuLoginQr&&e.onFeishuLoginQr?.(c.feishuLoginQr),le(p=>({...p,[l]:{ok:!1,text:typeof c?.error=="string"?c.error:`HTTP ${r.status}`}}))}catch(r){if(!s.current)return;le(c=>({...c,[l]:{ok:!1,text:r instanceof Error?r.message:String(r)}}))}finally{s.current&&ge(null)}}},[_,e,t]),me=(0,P.useCallback)(l=>{let c=["observe_only","meeting_text","meeting_voice","meeting_text_voice"].map(p=>({value:p,label:t(`settings.vcProfiles.preset.${p}`)}));return(!l.isNew||l.permissionPreset==="custom")&&c.push({value:"custom",label:t("settings.vcProfiles.preset.custom")}),c},[t]),oe=(0,P.useCallback)(()=>{let l=Le();E(r=>({...r,profiles:[...r.profiles,{uiKey:l,isNew:!0,id:"",responseMode:"silent",listenerPlacement:"auto",permissionPreset:"observe_only"}]})),Z(l)},[E]),Me=(0,P.useCallback)(l=>{let r=Le();E(c=>{let p=new Set(c.profiles.map($=>$.id)),T=l.suggestedProfileId;for(let $=2;p.has(T);$+=1)T=`${l.suggestedProfileId.slice(0,60)}-${$}`;return{...c,profiles:[...c.profiles,{uiKey:r,isNew:!0,id:T,label:l.profileLabel[a],instructions:l.instructions[a],activityTypes:[...l.activityTypes],responseMode:l.responseMode,listenerPlacement:l.listenerPlacement,permissionPreset:l.permissionPreset}]}}),J(null),Z(r)},[a,E]),Pe=(0,P.useCallback)(l=>{E(r=>{let c=r.defaultConsumerIds.filter(p=>r.profiles.some(T=>T.uiKey!==l&&T.id===p));return{...r,profiles:r.profiles.filter(p=>p.uiKey!==l),defaultConsumerIds:c,defaultMode:c.length>0?r.defaultMode:"listenOnly"}}),Z(r=>r===l?null:r)},[E]),Ne=(0,P.useMemo)(()=>{if(!o)return[];let l=z.trim().toLowerCase();return[...l?o.botPolicies.filter(c=>c.label.toLowerCase().includes(l)||c.appId.toLowerCase().includes(l)):o.botPolicies].sort((c,p)=>c.vcEnabled!==p.vcEnabled?c.vcEnabled?-1:1:c.online!==p.online?c.online?-1:1:c.label.localeCompare(p.label))},[o,z]),W=l=>d[l],q=!e.canWrite||C||k,ke=o?.agentOptions.some(lt)??!1,ve=o?.profiles.findIndex(l=>l.uiKey===ie)??-1,H=ve>=0?o?.profiles[ve]??null:null,re=o?.templateCatalog.templates.find(l=>l.templateId===ae)??null,ce=l=>{l.id&&E(r=>{let p=r.defaultConsumerIds.length===1&&r.defaultConsumerIds[0]===l.id?[]:[l.id];return{...r,defaultMode:p.length>0?"agents":"listenOnly",defaultConsumerIds:p}})};return(0,i.jsxs)("div",{className:"vc-profiles-section",children:[(0,i.jsx)("div",{className:"settings-field-row",children:(0,i.jsx)(I,{help:t("settings.vcProfiles.help"),children:t("settings.vcProfiles.title")})}),(0,i.jsx)("p",{className:"hint vc-profiles-shared",children:t("settings.vcProfiles.sharedNotice")}),(0,i.jsx)("p",{className:"hint vc-profiles-freeze",children:t("settings.vcProfiles.freezeNotice")}),k?(0,i.jsx)("p",{className:"hint",children:t("settings.vcProfiles.loading")}):null,m?(0,i.jsxs)("p",{className:"hint-warn",children:[t("settings.vcProfiles.loadFailed"),": ",m]}):null,j?(0,i.jsxs)("p",{className:"hint-warn",children:[t("settings.vcProfiles.conflict")," ",(0,i.jsx)("button",{type:"button",className:"vc-profiles-link",onClick:()=>{pe()},children:t("settings.vcProfiles.reload")})]}):null,W("profiles")?(0,i.jsx)("p",{className:"hint-warn",children:W("profiles")}):null,o?(0,i.jsxs)(i.Fragment,{children:[ke?null:(0,i.jsx)("p",{className:"hint-warn",children:t("settings.vcProfiles.noEligibleDefaultAgent")}),(0,i.jsxs)("section",{className:"vc-profile-library-section",children:[(0,i.jsxs)("div",{className:"vc-profile-list-heading",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("strong",{children:t("settings.vcProfiles.list.title")}),(0,i.jsx)("p",{children:t("settings.vcProfiles.list.help")})]}),e.canWrite?(0,i.jsx)("button",{type:"button",className:"vc-profiles-link vc-profile-add",disabled:C||k,onClick:oe,children:t("settings.vcProfiles.add")}):null]}),o.profiles.length>0?(0,i.jsx)("div",{className:"vc-profile-card-grid",children:o.profiles.map(l=>{let r=o.defaultMode==="agents"&&o.defaultConsumerIds.includes(l.id);return(0,i.jsxs)("article",{className:"vc-profile-summary-card",role:"button",tabIndex:0,onClick:()=>Z(l.uiKey),onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),Z(l.uiKey))},children:[(0,i.jsxs)("div",{className:"vc-profile-summary-top",children:[(0,i.jsx)("span",{className:"vc-profile-summary-icon","aria-hidden":"true",children:(l.label||l.id||"?").slice(0,1)}),(0,i.jsxs)("div",{children:[(0,i.jsx)("strong",{children:l.label||l.id||t("settings.vcProfiles.untitled")}),(0,i.jsx)("code",{children:l.id||t("settings.vcProfiles.newBadge")})]}),l.isNew?(0,i.jsx)("em",{children:t("settings.vcProfiles.newBadge")}):null]}),(0,i.jsx)("p",{children:(l.instructions??"").trim()||t("settings.vcProfiles.noInstructions")}),(0,i.jsxs)("div",{className:"vc-profile-summary-meta",children:[(0,i.jsx)("span",{children:l.responseMode==="listener_thread"?t("settings.vcProfiles.responseListener"):t("settings.vcProfiles.responseSilent")}),(0,i.jsx)("span",{children:t(`settings.vcProfiles.preset.${l.permissionPreset}`)})]}),(0,i.jsxs)("label",{className:"vc-profile-default-toggle",onClick:c=>c.stopPropagation(),children:[(0,i.jsx)("input",{type:"radio",name:"vc-profile-default",checked:r,disabled:q||!l.id,onChange:()=>ce(l),onClick:()=>{r&&ce(l)}}),(0,i.jsx)("span",{children:t("settings.vcProfiles.setDefault")})]})]},l.uiKey)})}):(0,i.jsx)("p",{className:"vc-profile-empty",children:t("settings.vcProfiles.list.empty")}),(0,i.jsx)("p",{className:"hint vc-profile-default-single",children:t("settings.vcProfiles.defaultSingleHint")})]}),o.templateCatalog.templates.length>0?(0,i.jsxs)("section",{className:"vc-profile-template-catalog",children:[(0,i.jsxs)("div",{className:"vc-profile-template-heading",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("strong",{children:t("settings.vcProfiles.templates.title")}),(0,i.jsx)("p",{children:t("settings.vcProfiles.templates.help")})]}),(0,i.jsx)("span",{children:t("settings.vcProfiles.templates.builtinBadge")})]}),(0,i.jsx)("div",{className:"vc-profile-template-grid",children:o.templateCatalog.templates.map(l=>(0,i.jsxs)("button",{type:"button",className:"vc-profile-template-card",onClick:()=>J(l.templateId),children:[(0,i.jsx)("span",{"aria-hidden":"true",children:"\u2726"}),(0,i.jsx)("strong",{children:l.title[a]}),(0,i.jsx)("p",{children:l.description[a]}),(0,i.jsxs)("em",{children:[t("settings.vcProfiles.viewDetails")," \u2192"]})]},`${l.templateId}@${l.version}`))})]}):null,(0,i.jsxs)("section",{className:"vc-profile-library-section vc-bot-policy-section",children:[(0,i.jsxs)("div",{className:"vc-profile-list-heading",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("strong",{children:t("settings.vcProfiles.botPolicies.title")}),(0,i.jsx)("p",{children:t("settings.vcProfiles.botPolicies.help")})]}),(0,i.jsx)("input",{type:"search",className:"vc-bot-policy-search",placeholder:t("settings.vcProfiles.botPolicies.searchPlaceholder"),value:z,disabled:q,onChange:l=>Oe(l.target.value)})]}),(0,i.jsxs)("div",{className:"vc-bot-policy-table",style:{maxHeight:320,overflowY:"auto"},children:[Ne.length===0?(0,i.jsx)("p",{className:"vc-bot-policy-empty hint",children:t("settings.vcProfiles.botPolicies.noMatch")}):null,Ne.map(l=>{let r=l.textOutputPolicy??"allow",c=l.realtimeVoiceEnabled?l.voiceOutputPolicy??"allow":"deny",p=w=>t(`settings.vcProfiles.botPolicies.${w}`),T=[l.vcEligible?void 0:t("settings.vcProfiles.botPolicies.vcIneligible"),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.managedSideEffectEligible?void 0:t("settings.vcProfiles.agentNoManagedIsolation"),l.managedSideEffectEligible&&!l.sandboxIsolated?t("settings.vcProfiles.agentUnsandboxedRisk"):void 0].filter(w=>!!w),$=!e.canWrite||C||k,Ce=(w,Y)=>(0,i.jsxs)("select",{className:"vc-bot-policy-select",value:Y??"default",disabled:$||!l.vcEnabled,onChange:Fe=>{let Se=Fe.target.value;se(l.appId,{[w]:Se==="default"?null:Se})},children:[(0,i.jsx)("option",{value:"default",children:t("settings.vcProfiles.botPolicies.default")}),(0,i.jsx)("option",{value:"allow",children:p("allow")}),(0,i.jsx)("option",{value:"approval",children:p("approval")}),(0,i.jsx)("option",{value:"deny",children:p("deny")})]}),de=fe[l.appId];return(0,i.jsxs)("div",{className:"vc-bot-policy-row",children:[(0,i.jsxs)("span",{className:"vc-bot-policy-name",title:l.appId,children:[l.online?"":"\u26AA ",l.label,T.length>0?(0,i.jsx)(De,{className:"vc-bot-policy-warn-tip",label:T.join(" \xB7 "),trigger:(0,i.jsx)("em",{className:"vc-bot-policy-warn","aria-hidden":"true",children:"\u26A0"}),children:(0,i.jsx)("span",{className:"vc-bot-policy-warn-pop",children:T.map((w,Y)=>(0,i.jsx)("div",{children:w},Y))})}):null,de?(0,i.jsx)("em",{className:de.ok?"vc-bot-policy-preflight":"vc-bot-policy-warn",children:de.text}):null]}),(0,i.jsxs)("label",{className:"vc-bot-policy-cell vc-bot-policy-enabled",children:[(0,i.jsx)("input",{type:"checkbox",checked:l.vcEnabled,disabled:$||!l.vcEligible,onChange:w=>se(l.appId,{vcEnabled:w.target.checked})}),(0,i.jsx)("span",{children:t("settings.vcProfiles.botPolicies.vcEnabled")})]}),(0,i.jsxs)("label",{className:"vc-bot-policy-cell",children:[(0,i.jsx)("span",{children:t("settings.vcProfiles.botPolicies.defaultProfile")}),(0,i.jsxs)("select",{className:"vc-bot-policy-select",value:l.catalogDefaultConsumerId??"",disabled:$||!l.vcEnabled,onChange:w=>{let Y=w.target.value;se(l.appId,{catalogDefaultConsumerId:Y===""?null:Y})},children:[(0,i.jsx)("option",{value:"",children:t("settings.vcProfiles.botPolicies.defaultProfileFollowGlobal")}),o.profiles.map(w=>(0,i.jsx)("option",{value:w.id,children:w.label||w.id},w.id))]})]}),(0,i.jsxs)("label",{className:"vc-bot-policy-cell",children:[(0,i.jsx)("span",{children:t("settings.vcProfiles.botPolicies.text")}),Ce("textOutputPolicy",l.textOutputPolicy)]}),(0,i.jsxs)("label",{className:"vc-bot-policy-cell",children:[(0,i.jsx)("span",{children:t("settings.vcProfiles.botPolicies.voice")}),Ce("voiceOutputPolicy",l.voiceOutputPolicy)]}),(0,i.jsxs)("label",{className:"vc-bot-policy-cell vc-bot-policy-rtv",children:[(0,i.jsx)("input",{type:"checkbox",checked:l.realtimeVoiceEnabled,disabled:$||!l.vcEnabled,onChange:w=>se(l.appId,{realtimeVoiceEnabled:w.target.checked})}),(0,i.jsx)("span",{children:t("settings.vcProfiles.botPolicies.realtimeVoice")})]}),(0,i.jsxs)("span",{className:"vc-bot-policy-effective hint",children:[t("settings.vcProfiles.botPolicies.effective")," ",l.vcEnabled?`${p(r)} / ${p(c)}`:t("settings.vcProfiles.botPolicies.vcOff")]}),(0,i.jsx)("button",{type:"button",className:"bd-btn bd-btn-ghost vc-bot-policy-preflight-btn",disabled:!e.canWrite||!l.vcEligible||_!==null,title:t("settings.vcProfiles.botPolicies.preflightHelp"),onClick:()=>{D(l.appId)},children:_===l.appId?t("settings.vcProfiles.botPolicies.preflightRunning"):t("settings.vcProfiles.botPolicies.preflight")})]},l.appId)})]})]}),(0,i.jsxs)("div",{className:"settings-field-row vc-profile-default-mode-row",children:[(0,i.jsx)(I,{help:t("settings.vcProfiles.defaultModeHelp"),children:t("settings.vcProfiles.defaultMode")}),(0,i.jsx)(F,{className:"settings-field-menu",ariaLabel:t("settings.vcProfiles.defaultMode"),disabled:q,value:o.defaultMode,label:o.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=>E(r=>({...r,defaultMode:l==="agents"?"agents":"listenOnly"}))})]}),W("defaultConsumerIds")?(0,i.jsx)("em",{className:"vc-profile-err",children:W("defaultConsumerIds")}):null,W("defaultMode")?(0,i.jsx)("em",{className:"vc-profile-err",children:W("defaultMode")}):null,e.canWrite?(0,i.jsxs)("div",{className:"vc-profiles-actions",children:[(0,i.jsx)("button",{type:"button",className:"vc-profiles-save",disabled:!N||C||j,onClick:()=>{L()},children:t(C?"settings.vcProfiles.saving":"settings.vcProfiles.save")}),A?(0,i.jsx)("span",{className:"vc-profile-hint",children:t("settings.vcProfiles.saved")}):null,N&&!C?(0,i.jsx)("span",{className:"vc-profile-hint",children:t("settings.vcProfiles.unsaved")}):null]}):null,H?(0,i.jsx)(ot,{profile:H,index:ve,frozen:q,canWrite:e.canWrite,presetOptions:me(H),error:W,onClose:()=>Z(null),onUpdate:l=>we(H.uiKey,l),onIdChange:l=>{let r=H.id;E(c=>{let p=c.defaultConsumerIds.map(T=>T===r&&r?l:T).filter(Boolean);return{...c,profiles:c.profiles.map(T=>T.uiKey===H.uiKey?{...T,id:l}:T),defaultConsumerIds:p,defaultMode:p.length>0?c.defaultMode:"listenOnly"}})},onRemove:()=>Pe(H.uiKey)}):null,re?(0,i.jsx)(rt,{template:re,locale:a,disabled:q,onClose:()=>J(null),onUse:()=>Me(re)}):null]}):null]})}function Qe(e){let t=Array.isArray(e.agentOptions)?e.agentOptions:[];return{revision:e.revision,catalogState:e.catalogState==="explicit_empty"||e.catalogState==="profiles"?e.catalogState:"uninitialized",defaultMode:e.defaultMode==="agents"?"agents":"listenOnly",defaultConsumerIds:Array.isArray(e.defaultConsumerIds)?e.defaultConsumerIds:[],profiles:(Array.isArray(e.profiles)?e.profiles:[]).map(it),agentOptions:t,botPolicies:nt(t),templateCatalog:e.templateCatalog?.schemaVersion===1&&Array.isArray(e.templateCatalog.templates)?e.templateCatalog:{schemaVersion:1,templates:[]}}}function ot(e){let t=O(),{profile:a,index:s}=e;return(0,i.jsxs)(qe,{className:"vc-profile-editor-dialog",eyebrow:t("settings.vcProfiles.list.title"),title:a.label||a.id||t("settings.vcProfiles.untitled"),onClose:e.onClose,children:[(0,i.jsxs)("div",{className:"vc-profile-grid",children:[(0,i.jsxs)("label",{className:"vc-profile-field",children:[(0,i.jsx)("span",{children:(0,i.jsx)(ee,{title:t("settings.vcProfiles.fieldId"),help:t("settings.vcProfiles.idHelp")})}),(0,i.jsx)("input",{type:"text",value:a.id,disabled:e.frozen||!a.isNew,placeholder:"minutes",onChange:o=>e.onIdChange(o.currentTarget.value)}),e.error(`profiles[${s}].id`)?(0,i.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${s}].id`)}):null]}),(0,i.jsxs)("label",{className:"vc-profile-field",children:[(0,i.jsx)("span",{children:(0,i.jsx)(ee,{title:t("settings.vcProfiles.fieldLabel"),help:t("settings.vcProfiles.labelHelp")})}),(0,i.jsx)("input",{type:"text",value:a.label??"",disabled:e.frozen,onChange:o=>e.onUpdate({label:o.currentTarget.value||void 0})}),e.error(`profiles[${s}].label`)?(0,i.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${s}].label`)}):null]}),(0,i.jsxs)("div",{className:"vc-profile-field",children:[(0,i.jsx)("span",{children:(0,i.jsx)(ee,{title:t("settings.vcProfiles.fieldResponseMode"),help:t("settings.vcProfiles.responseModeHelp")})}),(0,i.jsx)(F,{ariaLabel:t("settings.vcProfiles.fieldResponseMode"),disabled:e.frozen,value:a.responseMode,label:a.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:o=>e.onUpdate({responseMode:o})}),e.error(`profiles[${s}].responseMode`)?(0,i.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${s}].responseMode`)}):null]}),(0,i.jsxs)("div",{className:"vc-profile-field",children:[(0,i.jsx)("span",{children:(0,i.jsx)(ee,{title:t("settings.vcProfiles.fieldListenerPlacement"),help:t("settings.vcProfiles.listenerPlacementHelp")})}),(0,i.jsx)(F,{ariaLabel:t("settings.vcProfiles.fieldListenerPlacement"),disabled:e.frozen||a.responseMode==="silent",value:a.listenerPlacement??"auto",label:t(`settings.vcProfiles.listenerPlacement.${a.listenerPlacement??"auto"}`),options:["auto","chat","topic"].map(o=>({value:o,label:t(`settings.vcProfiles.listenerPlacement.${o}`)})),onChange:o=>e.onUpdate({listenerPlacement:o})}),e.error(`profiles[${s}].listenerPlacement`)?(0,i.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${s}].listenerPlacement`)}):null]}),(0,i.jsxs)("div",{className:"vc-profile-field",children:[(0,i.jsx)("span",{children:(0,i.jsx)(ee,{title:t("settings.vcProfiles.fieldPreset"),help:t("settings.vcProfiles.presetHelp")})}),(0,i.jsx)(F,{ariaLabel:t("settings.vcProfiles.fieldPreset"),disabled:e.frozen,value:a.permissionPreset,label:K(e.presetOptions,a.permissionPreset),options:e.presetOptions,onChange:o=>e.onUpdate({permissionPreset:o})}),e.error(`profiles[${s}].permissionPreset`)?(0,i.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${s}].permissionPreset`)}):null]})]}),(0,i.jsxs)("label",{className:"vc-profile-field vc-profile-instructions",children:[(0,i.jsxs)("span",{children:[(0,i.jsx)(ee,{title:t("settings.vcProfiles.fieldInstructions"),help:t("settings.vcProfiles.instructionsHelp")}),(0,i.jsxs)("em",{className:"vc-profile-count",children:[(a.instructions??"").length,"/",Ee]})]}),(0,i.jsx)("textarea",{rows:7,maxLength:Ee,value:a.instructions??"",disabled:e.frozen,placeholder:t("settings.vcProfiles.instructionsPlaceholder"),onChange:o=>e.onUpdate({instructions:o.currentTarget.value||void 0})}),e.error(`profiles[${s}].instructions`)?(0,i.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${s}].instructions`)}):null]}),(0,i.jsxs)("div",{className:"vc-profile-field",children:[(0,i.jsx)("span",{children:(0,i.jsx)(ee,{title:t("settings.vcProfiles.fieldActivityTypes"),help:t("settings.vcProfiles.activityHelp")})}),(0,i.jsx)("div",{className:"vc-profile-activity",children:Ye.map(o=>{let u=a.activityTypes?.includes(o)??!1;return(0,i.jsxs)("label",{className:"vc-profile-check",children:[(0,i.jsx)("input",{type:"checkbox",checked:u,disabled:e.frozen,onChange:m=>{let y=new Set(a.activityTypes??[]);m.currentTarget.checked?y.add(o):y.delete(o),e.onUpdate({activityTypes:y.size>0?[...y]:void 0})}}),t(`settings.vcProfiles.activity.${o}`)]},o)})}),(0,i.jsx)("em",{className:"vc-profile-hint",children:t("settings.vcProfiles.activityAllHint")}),e.error(`profiles[${s}].activityTypes`)?(0,i.jsx)("em",{className:"vc-profile-err",children:e.error(`profiles[${s}].activityTypes`)}):null]}),e.canWrite?(0,i.jsxs)("footer",{className:"vc-profile-dialog-actions",children:[(0,i.jsx)("button",{type:"button",className:"vc-profiles-link vc-profile-remove",disabled:e.frozen,onClick:e.onRemove,children:t("settings.vcProfiles.remove")}),(0,i.jsx)("button",{type:"button",className:"vc-profile-dialog-done",onClick:e.onClose,children:t("settings.vcProfiles.done")})]}):null]})}function rt(e){let t=O(),a=e.template;return(0,i.jsxs)(qe,{className:"vc-profile-template-dialog",eyebrow:t("settings.vcProfiles.templates.title"),title:a.title[e.locale],onClose:e.onClose,children:[(0,i.jsx)("p",{className:"vc-profile-template-description",children:a.description[e.locale]}),(0,i.jsxs)("div",{className:"vc-profile-template-facts",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{children:t("settings.vcProfiles.fieldResponseMode")}),(0,i.jsx)("strong",{children:t(a.responseMode==="listener_thread"?"settings.vcProfiles.responseListener":"settings.vcProfiles.responseSilent")})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{children:t("settings.vcProfiles.fieldListenerPlacement")}),(0,i.jsx)("strong",{children:t(`settings.vcProfiles.listenerPlacement.${a.listenerPlacement}`)})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{children:t("settings.vcProfiles.fieldPreset")}),(0,i.jsx)("strong",{children:t(`settings.vcProfiles.preset.${a.permissionPreset}`)})]})]}),(0,i.jsxs)("section",{className:"vc-profile-template-prompt",children:[(0,i.jsx)("strong",{children:t("settings.vcProfiles.fieldInstructions")}),(0,i.jsx)("p",{children:a.instructions[e.locale]})]}),(0,i.jsxs)("section",{className:"vc-profile-template-events",children:[(0,i.jsx)("strong",{children:t("settings.vcProfiles.fieldActivityTypes")}),(0,i.jsx)("div",{children:a.activityTypes.map(s=>(0,i.jsx)("span",{children:t(`settings.vcProfiles.activity.${s}`)},s))})]}),(0,i.jsxs)("footer",{className:"vc-profile-dialog-actions",children:[(0,i.jsx)("button",{type:"button",className:"vc-profile-dialog-secondary",onClick:e.onClose,children:t("settings.vcProfiles.close")}),(0,i.jsx)("button",{type:"button",className:"vc-profile-template-use",disabled:e.disabled,onClick:e.onUse,children:t("settings.vcProfiles.templates.use")})]})]})}var n=ue(Te(),1),Ue=["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 Je(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;return typeof t.supported=="boolean"&&typeof t.enabled=="boolean"?{supported:t.supported,enabled:t.enabled}:null}function ct(e,t){if(!e||typeof e!="object")return null;if(e.failed){let a=e.failed.step==="install"?t("settings.herdrTraexInstallStepInstall"):t("settings.herdrTraexInstallStepAction");return{text:`${t("settings.herdrTraexInstallFailed")}\uFF08${a}\uFF09: ${e.failed.reason??""}`,cls:"hint-warn-inline"}}if(e.skippedReason==="plugin_unsupported"){let a=typeof e.herdrVersion=="string"&&e.herdrVersion?` (${e.herdrVersion})`:"";return{text:`${t("settings.herdrTraexUnsupported")}${a}`,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 Be(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,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},workflow:{enabled:e?.workflow?.enabled!==!1},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 dt(e,t){let a=e?.[t]??{};return{enabled:a.enabled===!0,time:typeof a.time=="string"?a.time:"04:00"}}function Xe(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 ut(){let e=O(),t=(0,f.useRef)(!1),a=(0,f.useRef)(new Set),[s,o]=(0,f.useState)(null),[u,m]=(0,f.useState)(!1),[y,k]=(0,f.useState)(null),[M,N]=(0,f.useState)(!0),[b,C]=(0,f.useState)(!1),[te,j]=(0,f.useState)(null),[Q,d]=(0,f.useState)(null),[v,A]=(0,f.useState)(null),[ne,ie]=(0,f.useState)(null),[Z,ae]=(0,f.useState)(null),[J,_]=(0,f.useState)(null),[ge,fe]=(0,f.useState)(!1),[le,z]=(0,f.useState)(!0),[Oe,X]=(0,f.useState)(!1),[pe,E]=(0,f.useState)(""),[we,L]=(0,f.useState)(!1),[se,D]=(0,f.useState)(null),[me,oe]=(0,f.useState)(null),[Me,Pe]=(0,f.useState)(!1),[Ne,W]=(0,f.useState)(!1),[q,ke]=(0,f.useState)(!1),[ve,H]=(0,f.useState)(null),re=(0,f.useCallback)(()=>{for(let g of a.current)window.clearTimeout(g);a.current.clear()},[]),ce=(0,f.useCallback)((g,h)=>{let x=window.setTimeout(()=>{a.current.delete(x),g()},h);return a.current.add(x),x},[]),l=(0,f.useCallback)(async()=>{try{let g=await fetch("/api/update/status"),h=await g.json().catch(()=>({}));if(!t.current)return;if(!g.ok){ie(null),ae(h?.error??`HTTP ${g.status}`);return}ie(h),ae(null)}catch(g){if(!t.current)return;ie(null),ae(g instanceof Error?g.message:String(g))}},[]),r=(0,f.useCallback)(async()=>{Pe(!0);try{let g=await fetch("/api/autostart",{cache:"no-store"}),h=await g.json().catch(()=>({})),x=g.ok?Je(h.state):null;if(!x)throw new Error("invalid_state");if(!t.current)return;oe(x),W(!1)}catch{if(!t.current)return;W(!0)}finally{t.current&&Pe(!1)}},[]),c=(0,f.useCallback)(async()=>{try{let g=await fetch("/api/settings"),h=await g.json().catch(()=>({}));if(!t.current)return;if(!g.ok){o(null),k(h?.error??`HTTP ${g.status}`),m(!0);return}o(Be(h.settings)),N(h.authed===!0),C(h.bound===!0),k(null),m(!0)}catch(g){if(!t.current)return;o(null),k(g instanceof Error?g.message:String(g)),m(!0)}},[]);(0,f.useEffect)(()=>(t.current=!0,c(),()=>{t.current=!1,re()}),[re,c]),(0,f.useEffect)(()=>{u&&(L(!1),D(null),fe(!1),H(null),M&&(l(),r()))},[M,r,l,u]);async function p(g){if(!me||q)return;let h=me;ke(!0),oe({...h,enabled:g}),H({text:e("settings.autostartSaving")});try{let x=await fetch("/api/autostart",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:g})}),U=await x.json().catch(()=>({})),S=x.ok?Je(U.state):null;if(!S)throw new Error("save_failed");if(!t.current)return;oe(S),H({text:e("settings.autostartSaved"),cls:"hint-ok"})}catch{if(!t.current)return;oe(h),H({text:e("settings.autostartSaveFailed"),cls:"hint-warn-inline"}),r()}finally{t.current&&ke(!1)}}async function T(g,h,x){if(!s)return;let U=s;o(x(s)),j(g),d({text:e("settings.saving")});try{let S=await fetch("/api/settings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(h)}),V=await S.json().catch(()=>({}));if(!t.current)return;if(!S.ok||V.ok===!1)throw typeof V?.feishuLoginQr=="string"&&V.feishuLoginQr&&A(V.feishuLoginQr),new Error(V?.error??`HTTP ${S.status}`);A(null);let G=Be(V.settings);o(G),Ie.publicReadOnly=G.publicReadOnly,Re.setScheduleTimeZone(G.effectiveScheduleTimeZone);let be=ct(V.herdrTraexInstall,e);d(be??{text:e("settings.saved"),cls:"hint-ok"}),be||ce(()=>{t.current&&d(null)},1500)}catch(S){if(!t.current)return;let V=!1;try{let be=await fetch("/api/settings"),$e=await be.json().catch(()=>({}));if(t.current&&be.ok&&$e?.settings){let Ae=Be($e.settings);o(Ae),Ie.publicReadOnly=Ae.publicReadOnly,Re.setScheduleTimeZone(Ae.effectiveScheduleTimeZone),V=!0}}catch{}if(!t.current)return;V||o(U);let G=S instanceof Error?S.message:String(S);d({text:V?`${e("settings.saveReconciled")}: ${G}`:`${e("settings.saveFailed")}: ${G}`,cls:"hint-warn-inline"})}finally{t.current&&j(null)}}async function $(){_(null),z(!0),X(!1);try{let g=await fetch("/api/update/changelog"),h=await g.json().catch(()=>({}));if(!t.current)return;E(typeof h?.releasesUrl=="string"?h.releasesUrl:""),g.ok?(_(Array.isArray(h.releases)?h.releases:[]),z(h.ok!==!1),X(h.rateLimited===!0)):(_([]),z(!1))}catch{if(!t.current)return;_([]),z(!1)}}function Ce(){let g=Date.now(),h=async()=>{if(t.current){if(Date.now()-g>9e4){L(!1),D({text:e("update.restartSlow"),cls:"hint-warn-inline"});return}try{let x=await fetch("/__health",{cache:"no-store"});if(!t.current)return;if(x.ok){location.reload();return}}catch{}t.current&&ce(()=>{h()},2e3)}};ce(()=>{h()},3e3)}async function de(g){L(!0),D({text:e("update.restarting")});try{let h=await fetch("/api/update/restart",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(g?{update:g}:{})}),x=await h.json().catch(()=>({}));if(!h.ok||x.ok===!1){if(x.error==="update_target_unavailable"||x.error==="update_target_drifted"){if(!t.current)return;L(!1),D({text:e(`update.${x.error}`,{dir:String(x.dir??"")}),cls:"hint-warn-inline"}),l();return}throw new Error(String(x.detail??x.error??`HTTP ${h.status}`))}if(!t.current)return}catch(h){if(!t.current)return;L(!1),D({text:e("update.restartFailed",{detail:h instanceof Error?h.message:String(h)}),cls:"hint-warn-inline"});return}Ce()}async function w(){let g=ne;if(!g)return;if(!g.node.ok){xe(e("update.nodeTooOldAlert",{version:g.node.version,required:g.node.required}),{kind:"warning"});return}let h=g.localDevInstall===!0;if(h){if(!g.localDevUpdatable){xe(e("update.localDev"),{kind:"warning"});return}}else if(!g.updateSupported||!g.updateCommand){xe(e("update.unsupportedInstall"),{kind:"warning"});return}if(g.installs.multiple){let U=g.installs.entries.map(S=>`\u2022 ${S.binPath} (${Xe(S.kind,e)})`).join(`
|
|
2
|
+
`);if(!await ye({title:e("update.confirmMultiInstallTitle"),message:e("update.confirmMultiInstall",{paths:U}),confirmLabel:e("update.btnContinue"),cancelLabel:e("update.btnCancel")}))return}let x=h?e("update.confirmUpdateLocalDev"):g.latest?e("update.confirmUpdate",{version:`v${g.latest}`,command:g.updateCommand}):e("update.confirmUpdateNoVer",{command:g.updateCommand});if(await ye({title:e("update.confirmUpdateTitle"),message:x,confirmLabel:e("update.btnRunUpdate"),cancelLabel:e("update.btnCancel")})){L(!0),D({text:h?e("update.updatingLocalDev"):e("update.updating",{command:g.updateCommand})});try{let U=await fetch("/api/update/run",{method:"POST"}),S=await U.json().catch(()=>({}));if(!t.current)return;if(!U.ok||S.ok===!1){if(S?.error==="dirty_worktree"){L(!1),D({text:e("update.dirtyWorktree",{detail:String(S.detail??"")}),cls:"hint-warn-inline"});return}let G=S?.detail??S?.error??`HTTP ${U.status}`;L(!1),D({text:e("update.updateFailed",{detail:G}),cls:"hint-warn-inline"});return}Ke(S)?(L(!1),D({text:S.changed?e("update.updatedChanged",{old:`v${S.oldVersion}`,new:`v${S.newVersion}`}):e("update.builtNeedsRestart"),cls:"hint-ok"}),await ye({title:e("update.confirmRestartTitle"),message:e("update.confirmRestart"),confirmLabel:e("update.btnRestartNow"),cancelLabel:e("update.btnLater")})?await de({oldVersion:S.oldVersion,newVersion:S.newVersion}):t.current&&D({text:e("update.noRestartHint"),cls:"hint-ok"})):(L(!1),D({text:e("update.alreadyLatestRun",{version:`v${S.newVersion}`}),cls:"hint-ok"}),await l())}catch(U){if(!t.current)return;L(!1),D({text:e("update.updateFailed",{detail:U instanceof Error?U.message:String(U)}),cls:"hint-warn-inline"})}}}let Se=s?(0,n.jsx)(gt,{settings:s,canWrite:M,bound:b,savingKey:te,message:Q,autostartBlock:(0,n.jsx)(Nt,{canWrite:M,state:me,loading:Me,error:Ne,busy:q,message:ve,onChange:g=>{p(g)},onRetry:()=>{r()}}),updateBlock:(0,n.jsx)(kt,{canWrite:M,status:ne,statusError:Z,changelog:J,changelogOpen:ge,changelogOk:le,changelogRateLimited:Oe,releasesUrl:pe,busy:we,message:se,onCheck:()=>{ie(null),_(null),fe(!1),D(null),ae(null),l()},onToggleChangelog:()=>{let g=!ge;fe(g),g&&J===null&&$()},onUpdate:()=>{w()},onRestart:()=>{(async()=>await ye({title:e("update.confirmRestartTitle"),message:e("update.confirmPlainRestart"),confirmLabel:e("update.btnRestartNow"),cancelLabel:e("update.btnCancel")})&&de(null))()}}),feishuLoginQr:v,onCloseFeishuLoginQr:()=>A(null),onFeishuLoginQr:A,onSave:T}):y?(0,n.jsxs)("p",{className:"hint-warn",children:[e("settings.loadFailed"),": ",y]}):(0,n.jsx)(he,{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")})]})}),Se]})}function gt(e){let t=O(),{settings:a,canWrite:s,bound:o,savingKey:u}=e,m=!s,y=dt(a.maintenance,"autoUpdate"),k=!s||a.localDevInstall||!a.autoUpdateSupported,M=!s||a.maintenance.autoUpdate?.enabled!==!0,N=(d,v)=>{e.onSave(d,{[d]:v},A=>({...A,[d]:v}))},b=d=>e.onSave("herdrTraexPlugin",{herdrTraexPlugin:d},v=>({...v,herdrTraexPlugin:{...v.herdrTraexPlugin,...d}})),C=d=>e.onSave("codexNotifier",{codexNotifier:d},v=>({...v,codexNotifier:{...v.codexNotifier,...d}})),te=d=>e.onSave("hostOverloadAlert",{hostOverloadAlert:d},v=>({...v,hostOverloadAlert:{...v.hostOverloadAlert,...d}})),j=(0,f.useMemo)(()=>[{value:"all",label:t("settings.repoPickerModeAll")},{value:"repos",label:t("settings.repoPickerModeRepos")}],[t]),Q=(0,f.useMemo)(()=>[{value:"attach",label:t("settings.localCliOpenModeAttach")},{value:"resume",label:t("settings.localCliOpenModeResume")}],[t]);return(0,n.jsxs)("div",{className:"settings-layout",children:[(0,n.jsx)(ft,{tr:t}),(0,n.jsxs)("div",{className:"settings-content",children:[s?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)(He,{title:t("settings.moduleGeneral"),description:t("settings.moduleGeneralHelp"),children:(0,n.jsxs)(Ve,{className:"settings-group-main",children:[(0,n.jsxs)(B,{id:"settings-access",title:t("settings.sectionAccess"),children:[(0,n.jsx)(R,{title:t("settings.publicReadOnly"),help:t("settings.publicReadOnlyHelp"),checked:a.publicReadOnly,disabled:m||u==="publicReadOnly",onChange:d=>N("publicReadOnly",d)}),o?(0,n.jsx)(R,{title:t("settings.remoteAccess"),help:t("settings.remoteAccessHelp"),checked:a.remoteAccess,disabled:m||u==="remoteAccess",onChange:d=>N("remoteAccess",d)}):null]}),(0,n.jsxs)(B,{id:"settings-cards",title:t("settings.sectionCards"),children:[(0,n.jsx)(R,{title:t("settings.openTerminalInFeishu"),help:t("settings.openTerminalInFeishuHelp"),checked:a.openTerminalInFeishu,disabled:m||u==="openTerminalInFeishu",onChange:d=>N("openTerminalInFeishu",d)}),(0,n.jsx)(R,{title:t("settings.enableLocalCliOpen"),help:t("settings.enableLocalCliOpenHelp"),checked:a.enableLocalCliOpen,disabled:m||u==="enableLocalCliOpen",onChange:d=>N("enableLocalCliOpen",d)}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(I,{help:t("settings.localCliOpenModeHelp"),children:t("settings.localCliOpenMode")}),(0,n.jsx)(F,{className:"settings-field-menu",ariaLabel:t("settings.localCliOpenMode"),disabled:m||!a.enableLocalCliOpen||u==="localCliOpenMode",value:a.localCliOpenMode,label:K(Q,a.localCliOpenMode),options:Q,onChange:d=>{e.onSave("localCliOpenMode",{localCliOpenMode:d},v=>({...v,localCliOpenMode:d}))}})]})]}),(0,n.jsx)(B,{id:"settings-group-creation",title:t("settings.sectionGroupCreation"),children:(0,n.jsx)(yt,{value:a.groupNamePrefix,disabled:m||u==="groupNamePrefix",onSave:d=>e.onSave("groupNamePrefix",{groupNamePrefix:d},v=>({...v,groupNamePrefix:d}))})}),(0,n.jsxs)(B,{id:"settings-experimental",title:t("settings.sectionExperimental"),children:[(0,n.jsx)(R,{title:t("settings.chatBotDiscovery"),help:t("settings.chatBotDiscoveryHelp"),checked:a.chatBotDiscovery,disabled:m||u==="chatBotDiscovery",onChange:d=>N("chatBotDiscovery",d)}),(0,n.jsx)(R,{title:t("settings.herdrTraexPlugin"),help:t("settings.herdrTraexPluginHelp"),checked:a.herdrTraexPlugin.enabled,disabled:m||u==="herdrTraexPlugin",onChange:d=>b({enabled:d})}),a.herdrTraexPlugin.enabled?(0,n.jsx)(Pt,{value:a.herdrTraexPlugin,disabled:m||u==="herdrTraexPlugin",onSave:d=>b(d)}):null,(0,n.jsx)(R,{title:t("settings.codexRpcInput"),help:t("settings.codexRpcInputHelp"),checked:a.codexRpcInput,disabled:m||u==="codexRpcInput",onChange:d=>N("codexRpcInput",d)}),(0,n.jsx)(R,{title:t("settings.bypassCodexHookTrust"),help:t("settings.bypassCodexHookTrustHelp"),checked:a.bypassCodexHookTrust,disabled:m||u==="bypassCodexHookTrust",onChange:d=>N("bypassCodexHookTrust",d)}),(0,n.jsx)(mt,{value:a.codexNotifier,disabled:m,saving:u==="codexNotifier",onSave:C}),(0,n.jsx)(R,{title:t("settings.noVisibleOutputHint"),help:t("settings.noVisibleOutputHintHelp"),checked:a.noVisibleOutputHint,disabled:m||u==="noVisibleOutputHint",onChange:d=>N("noVisibleOutputHint",d)})]}),(0,n.jsx)(B,{id:"settings-overload",title:t("settings.sectionHostOverloadAlert"),children:(0,n.jsx)(vt,{value:a.hostOverloadAlert,disabled:m,saving:u==="hostOverloadAlert",onSave:te})}),(0,n.jsx)(B,{id:"settings-whiteboard",title:t("settings.sectionWhiteboard"),children:(0,n.jsx)(R,{title:t("settings.whiteboardEnable"),help:t("settings.whiteboardEnableHelp"),checked:a.whiteboard.enabled,disabled:m||u==="whiteboard",onChange:d=>{e.onSave("whiteboard",{whiteboard:{enabled:d}},v=>({...v,whiteboard:{enabled:d}}))}})}),(0,n.jsx)(B,{title:t("settings.sectionWorkflow"),children:(0,n.jsx)(R,{title:t("settings.workflowEnable"),help:t("settings.workflowEnableHelp"),checked:a.workflow.enabled,disabled:m||u==="workflow",onChange:d=>{e.onSave("workflow",{workflow:{enabled:d}},v=>({...v,workflow:{enabled:d}}))}})}),(0,n.jsx)(B,{id:"settings-repo-picker",title:t("settings.sectionRepoPicker"),children:(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(I,{help:t("settings.repoPickerModeHelp"),children:t("settings.repoPickerMode")}),(0,n.jsx)(F,{className:"settings-field-menu",ariaLabel:t("settings.repoPickerMode"),disabled:m||u==="repoPickerMode",value:a.repoPickerMode,label:K(j,a.repoPickerMode),options:j,onChange:d=>{e.onSave("repoPickerMode",{repoPickerMode:d},v=>({...v,repoPickerMode:d}))}})]})}),(0,n.jsx)(B,{id:"settings-schedule",title:t("settings.sectionSchedule"),children:(0,n.jsx)(bt,{value:a.scheduleTimeZone,host:a.hostTimeZone,effective:a.effectiveScheduleTimeZone,disabled:m||u==="scheduleTimeZone",onSave:d=>{e.onSave("scheduleTimeZone",{scheduleTimeZone:d},v=>({...v,scheduleTimeZone:d??""}))}})})]})}),(0,n.jsx)(He,{className:"settings-module-meeting",title:t("settings.moduleMeeting"),description:t("settings.moduleMeetingHelp"),children:(0,n.jsx)(Ve,{className:"settings-group-meeting",children:(0,n.jsxs)(B,{id:"settings-vc",className:"settings-vc-block",title:t("settings.sectionVcMeetingAgent"),children:[(0,n.jsx)(R,{title:t("settings.vcMeetingAgent"),help:t("settings.vcMeetingAgentHelp"),checked:a.vcMeetingAgent.enabled,disabled:m||u==="vcMeetingAgent",onChange:d=>{e.onSave("vcMeetingAgent",{vcMeetingAgent:{enabled:d}},v=>({...v,vcMeetingAgent:{...v.vcMeetingAgent,enabled:d}}))}}),(0,n.jsx)(pt,{settings:a.vcMeetingAgent}),(0,n.jsx)(Ge,{enabled:a.vcMeetingAgent.enabled,canWrite:s,onFeishuLoginQr:e.onFeishuLoginQr}),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)(He,{title:t("settings.moduleSystem"),description:t("settings.moduleSystemHelp"),children:(0,n.jsxs)(Ve,{className:"settings-group-ops",children:[e.autostartBlock,(0,n.jsx)(B,{id:"settings-maintenance",title:t("settings.sectionMaintenance"),titleExtra:a.localDevInstall?(0,n.jsx)("span",{className:"settings-title-note",children:t("settings.autoUpdateLocalDev")}):a.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)(R,{title:t("settings.autoUpdate"),help:t("settings.autoUpdateHelp"),checked:y.enabled,disabled:k||u==="autoUpdate",onChange:d=>{let v={enabled:d,time:y.time};e.onSave("autoUpdate",{maintenance:{autoUpdate:v}},A=>({...A,maintenance:{...A.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:y.time,disabled:k||u==="autoUpdate",onChange:d=>{let v={enabled:y.enabled,time:d.currentTarget.value||"04:00"};e.onSave("autoUpdate",{maintenance:{autoUpdate:v}},A=>({...A,maintenance:{...A.maintenance,autoUpdate:v}}))}})]})})]}),(0,n.jsx)("div",{className:"settings-maintenance-restart",children:(0,n.jsx)(R,{title:t("settings.autoRestart"),help:t("settings.autoRestartHelp"),checked:a.maintenance.autoRestart?.enabled===!0,disabled:M||u==="autoRestart",onChange:d=>{let v={enabled:d};e.onSave("autoRestart",{maintenance:{autoRestart:v}},A=>({...A,maintenance:{...A.maintenance,autoRestart:v}}))}})})]})}),(0,n.jsx)("div",{id:"settings-update",children: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 ft(e){let t=e.tr,a=[{label:t("settings.moduleGeneral"),items:[{id:"settings-access",label:t("settings.sectionAccess")},{id:"settings-cards",label:t("settings.sectionCards")},{id:"settings-group-creation",label:t("settings.sectionGroupCreation")},{id:"settings-experimental",label:t("settings.sectionExperimental")},{id:"settings-overload",label:t("settings.sectionHostOverloadAlert")},{id:"settings-whiteboard",label:t("settings.sectionWhiteboard")},{id:"settings-repo-picker",label:t("settings.sectionRepoPicker")},{id:"settings-schedule",label:t("settings.sectionSchedule")}]},{label:t("settings.moduleMeeting"),items:[{id:"settings-vc",label:t("settings.sectionVcMeetingAgent")}]},{label:t("settings.moduleSystem"),items:[{id:"settings-maintenance",label:t("settings.sectionMaintenance")},{id:"settings-update",label:t("settings.sectionUpdate")}]}];return(0,n.jsx)("nav",{className:"settings-nav","aria-label":t("settings.title"),children:a.map(s=>(0,n.jsxs)("div",{className:"settings-nav-group",children:[(0,n.jsx)("p",{className:"settings-nav-group-label",children:s.label}),s.items.map(o=>(0,n.jsx)("button",{type:"button",className:"settings-nav-link",onClick:()=>{document.getElementById(o.id)?.scrollIntoView({behavior:"smooth",block:"start"})},children:o.label},o.id))]},s.label))})}function He(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 pt(e){let t=O(),a=e.settings.larkCliVersion,s=typeof a=="string"&&e.settings.larkCliMeetsRequirement===!0,o=s?t("settings.larkCliReady",{version:a}):typeof a=="string"?t("settings.larkCliOutdated",{version:a,minimum:e.settings.larkCliMinVersion??"-"}):t("settings.larkCliMissing");return(0,n.jsxs)("div",{className:`settings-lark-cli-status ${s?"is-ready":"is-warning"}`,children:[(0,n.jsx)("span",{"aria-hidden":"true"}),(0,n.jsx)("strong",{children:o}),s?null:(0,n.jsx)("code",{children:"npm i -g @larksuite/cli@latest"})]})}function Ve(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 B(e){let t=["settings-block",e.className].filter(Boolean).join(" ");return(0,n.jsx)("section",{className:t,id:e.id,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 mt(e){let t=O(),[a,s]=(0,f.useState)(!1),o=(0,f.useRef)(!1),u=(0,f.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,f.useMemo)(()=>[{value:"locked_only",label:t("settings.codexNotifierLockedOnly")},{value:"always",label:t("settings.codexNotifierAlways")}],[t]),y=e.value.botOptions.find(C=>C.larkAppId===e.value.targetBotAppId),k=!e.value.targetBotAppId||y?.recipientConfigured!==!0||y?.recipientVerified!==!0||!e.value.targetDaemonOnline||!e.value.platformSupported&&e.value.notifyWhen==="locked_only",M=e.value.enabled||a,N=e.disabled||e.saving;(0,f.useEffect)(()=>{if(!a||e.value.enabled||k){o.current=!1;return}N||o.current||(o.current=!0,e.onSave({enabled:!0}))},[N,k,a,e.onSave,e.value.enabled]),(0,f.useEffect)(()=>{e.value.enabled&&a&&s(!1)},[a,e.value.enabled]);let b=C=>{if(!C){o.current=!1,s(!1),e.value.enabled&&e.onSave({enabled:!1});return}if(k){s(!0);return}e.onSave({enabled:!0})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(R,{title:t("settings.codexNotifier"),help:t("settings.codexNotifierHelp"),checked:e.value.enabled||a,disabled:N,onChange:b}),M?(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)(I,{help:t("settings.codexNotifierTargetHelp"),children:t("settings.codexNotifierTarget")}),(0,n.jsx)(F,{className:"settings-field-menu",ariaLabel:t("settings.codexNotifierTarget"),disabled:N,searchable:!0,value:e.value.targetBotAppId??"",label:K(u,e.value.targetBotAppId??""),options:u,onChange:C=>{e.onSave({targetBotAppId:C||null})}})]}),y?.recipientHint?(0,n.jsx)("p",{className:"settings-subfield-hint",children:t("settings.codexNotifierRecipient",{recipient:y.recipientHint})}):null,(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(I,{help:t("settings.codexNotifierNotifyWhenHelp"),children:t("settings.codexNotifierNotifyWhen")}),(0,n.jsx)(F,{className:"settings-field-menu",ariaLabel:t("settings.codexNotifierNotifyWhen"),disabled:N,value:e.value.notifyWhen,label:K(m,e.value.notifyWhen),options:m,onChange:C=>{e.onSave({notifyWhen:C})}})]}),e.value.targetBotAppId?y?.recipientConfigured!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.codexNotifierRecipientMissing")}):e.value.targetDaemonOnline?y?.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 vt(e){let t=O(),a=e.disabled||e.saving,s=(0,f.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]),o=e.value.botOptions.find(b=>b.larkAppId===e.value.targetBotAppId),[u,m]=(0,f.useState)(String(e.value.enterLoadRatio)),[y,k]=(0,f.useState)(String(Math.round(e.value.enterMemUsedFrac*100)));(0,f.useEffect)(()=>{m(String(e.value.enterLoadRatio))},[e.value.enterLoadRatio]),(0,f.useEffect)(()=>{k(String(Math.round(e.value.enterMemUsedFrac*100)))},[e.value.enterMemUsedFrac]);let M=()=>{let b=Number(u);Number.isFinite(b)&&b>0&&b!==e.value.enterLoadRatio?e.onSave({enterLoadRatio:b}):m(String(e.value.enterLoadRatio))},N=()=>{let b=Number(y),C=b/100;Number.isFinite(b)&&b>0&&b<=100&&C!==e.value.enterMemUsedFrac?e.onSave({enterMemUsedFrac:C}):k(String(Math.round(e.value.enterMemUsedFrac*100)))};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(R,{title:t("settings.hostOverloadAlert"),help:t("settings.hostOverloadAlertHelp"),checked:e.value.enabled,disabled:a||!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)(I,{help:t("settings.hostOverloadAlertTargetHelp"),children:t("settings.hostOverloadAlertTarget")}),(0,n.jsx)(F,{className:"settings-field-menu",ariaLabel:t("settings.hostOverloadAlertTarget"),disabled:a,searchable:!0,value:e.value.targetBotAppId??"",label:K(s,e.value.targetBotAppId??""),options:s,onChange:b=>{e.onSave({targetBotAppId:b||null})}})]}),o?.recipientHint?(0,n.jsx)("p",{className:"settings-subfield-hint",children:t("settings.hostOverloadAlertRecipient",{recipient:o.recipientHint})}):null,(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(I,{help:t("settings.hostOverloadAlertEnterLoadHelp"),children:t("settings.hostOverloadAlertEnterLoad")}),(0,n.jsx)("input",{type:"number",min:.1,step:.1,className:"settings-text-input",value:u,disabled:a,onChange:b=>m(b.currentTarget.value),onBlur:M,onKeyDown:b=>{b.key==="Enter"&&M()}})]}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(I,{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:y,disabled:a,onChange:b=>k(b.currentTarget.value),onBlur:N,onKeyDown:b=>{b.key==="Enter"&&N()}})]}),e.value.targetBotAppId?o?.recipientConfigured!==!0?(0,n.jsx)("p",{className:"hint-warn-inline",children:t("settings.hostOverloadAlertRecipientMissing")}):e.value.targetDaemonOnline?o?.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 bt(e){let t=O(),a=e.value.trim(),s=e.effective||e.value.trim()||e.host,o=(0,f.useMemo)(()=>{let u=a&&!Ue.includes(a)?[a,...Ue]:Ue;return[{value:"",label:t("settings.scheduleTimeZoneHost",{host:e.host})},...u.map(m=>({value:m,label:m}))]},[e.host,t,a]);return(0,n.jsxs)("div",{className:"settings-field-row settings-timezone-row",children:[(0,n.jsx)(I,{help:t("settings.scheduleTimeZoneHelp",{host:e.host,effective:s}),children:t("settings.scheduleTimeZone")}),(0,n.jsx)(F,{className:"settings-field-menu settings-timezone-menu",ariaLabel:t("settings.scheduleTimeZone"),value:a,label:K(o,a),options:o,disabled:e.disabled,onChange:u=>e.onSave(u===""?null:u)})]})}function R(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)(I,{className:"settings-toggle-title",help:e.help,children:e.title})})})]})}var ht=32;function yt(e){let t=O(),[a,s]=(0,f.useState)(e.value);(0,f.useEffect)(()=>s(e.value),[e.value]);let o=a.trim().length>0,u=a===""||o,m=a!==e.value,y=()=>{e.disabled||!m||!u||e.onSave(a)};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)(I,{help:t("settings.groupNamePrefixHelp"),children:t("settings.groupNamePrefix")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:a,maxLength:ht,placeholder:t("settings.groupNamePrefixPlaceholder"),disabled:e.disabled,onChange:k=>s(k.currentTarget.value),onKeyDown:k=>{k.key==="Enter"&&(k.preventDefault(),y())}})]}),(0,n.jsx)("p",{className:"settings-subfield-hint","data-group-name-prefix-preview":!0,children:o?t("settings.groupNamePrefixPreview",{name:`${a}${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||!u,onClick:y,children:t("settings.groupNamePrefixSave")})})]})}function Pt(e){let t=O(),[a,s]=(0,f.useState)(e.value.source),[o,u]=(0,f.useState)(e.value.ref);(0,f.useEffect)(()=>{s(e.value.source),u(e.value.ref)},[e.value.source,e.value.ref]);let m=a.trim(),y=o.trim(),k=m!==e.value.source.trim()||y!==e.value.ref.trim(),M=()=>{e.disabled||!k||e.onSave({source:m,ref:y})};return(0,n.jsxs)("div",{className:"settings-subfield",children:[(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(I,{help:t("settings.herdrTraexPluginSourceHelp"),children:t("settings.herdrTraexPluginSource")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:a,placeholder:t("settings.herdrTraexPluginSourcePlaceholder"),disabled:e.disabled,onChange:N=>s(N.currentTarget.value),onKeyDown:N=>{N.key==="Enter"&&(N.preventDefault(),M())}})]}),(0,n.jsxs)("div",{className:"settings-field-row",children:[(0,n.jsx)(I,{help:t("settings.herdrTraexPluginRefHelp"),children:t("settings.herdrTraexPluginRef")}),(0,n.jsx)("input",{className:"settings-text-input",type:"text",value:o,placeholder:t("settings.herdrTraexPluginRefPlaceholder"),disabled:e.disabled,onChange:N=>u(N.currentTarget.value),onKeyDown:N=>{N.key==="Enter"&&(N.preventDefault(),M())}})]}),m?null:(0,n.jsx)("p",{className:"hint-warn-inline settings-subfield-hint",children:t("settings.herdrTraexPluginSourceRequired")}),e.value.recommendedSource&&(m!==e.value.recommendedSource||y!==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:()=>{s(e.value.recommendedSource),u(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||!k,onClick:M,children:t("settings.herdrTraexPluginSave")})})]})}function Nt(e){let t=O(),a;return e.canWrite?e.loading&&!e.state?a=(0,n.jsx)(he,{label:t("settings.autostartLoading"),compact:!0}):e.error&&!e.state?a=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"hint-warn",children:t("settings.autostartLoadFailed")}),(0,n.jsx)("div",{className:"update-actions",children:(0,n.jsx)("button",{type:"button",onClick:e.onRetry,children:t("settings.autostartRetry")})})]}):e.state?.supported===!1?a=(0,n.jsx)("p",{className:"hint-warn",children:t("settings.autostartUnsupported")}):e.state?a=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(R,{title:t("settings.autostartToggle"),help:t("settings.autostartHelp"),checked:e.state.enabled,disabled:e.busy,onChange:e.onChange}),e.message?(0,n.jsx)("p",{className:`oncall-status ${e.message.cls??""}`,role:"status","aria-live":"polite",children:e.message.text}):null]}):a=null:a=(0,n.jsx)("p",{className:"hint-warn",children:t("settings.autostartLoginRequired")}),(0,n.jsx)(B,{title:t("settings.sectionAutostart"),children:a})}function kt(e){let t=O(),a;if(!e.canWrite)a=(0,n.jsx)("p",{className:"hint-warn",children:t("update.loginRequired")});else if(e.statusError)a=(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)a=(0,n.jsx)(he,{label:t("update.loading"),compact:!0});else{let s=e.status,o=e.busy||(s.localDevInstall?!s.localDevUpdatable:!s.updateSupported),u=s.localDevInstall?t("update.btnUpdateLocalDev"):t("update.btnUpdate");a=(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",s.current]})]})," ",(0,n.jsx)(St,{status:s})]}),s.node.ok?null:(0,n.jsx)("p",{className:"hint-warn",children:t("update.nodeWarn",{version:s.node.version,required:s.node.required})}),!s.localDevInstall&&!s.updateSupported?(0,n.jsx)("p",{className:"hint-warn",children:t("update.unsupportedInstall")}):null,s.localDevInstall?(0,n.jsx)("p",{className:"hint",children:s.localDevUpdatable?t("update.localDevUpdatable"):t("update.localDev")}):null,s.installs.multiple?(0,n.jsx)(Tt,{entries:s.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:o,onClick:e.onUpdate,children:u}),(0,n.jsx)("button",{type:"button","data-up":"restart",disabled:e.busy,onClick:e.onRestart,children:t("update.btnRestart")})]}),s.cliUpdates?.length?(0,n.jsx)(Ct,{entries:s.cliUpdates}):null,e.changelogOpen?(0,n.jsx)(xt,{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)(B,{className:"settings-update-block",title:t("update.section"),titleExtra:e.status?.localDevInstall?(0,n.jsx)("span",{className:"settings-title-note",children:e.status.localDevUpdatable?t("update.localDevNote"):t("update.localDev")}):e.status&&!e.status.updateSupported?(0,n.jsx)("span",{className:"settings-title-note",children:t("update.unsupportedInstall")}):null,children:a})}function Ct(e){let t=O();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(a=>(0,n.jsxs)("li",{className:a.updateAvailable?"is-behind":"",children:[(0,n.jsxs)("div",{className:"cli-runtime-update-head",children:[(0,n.jsx)("span",{children:a.displayName}),a.updateAvailable&&a.latest?(0,n.jsx)("span",{className:"update-badge update-badge-new",children:t("update.runtimeAvailable",{current:a.current??"?",latest:a.latest})}):a.managed?a.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)("span",{className:"hint-warn-inline",children:t("update.runtimeUnmanaged")})]}),(0,n.jsx)("code",{children:a.binPath}),a.updateAvailable&&a.updateCommand?(0,n.jsxs)("small",{children:[t("update.runtimeCommand"),": ",(0,n.jsx)("code",{children:a.updateCommand})]}):null]},`${a.runtimeId}:${a.binPath}`))}),(0,n.jsx)("p",{className:"settings-help",children:t("update.runtimeHelp")})]})}function St(e){let t=O(),a=e.status;return a.latest?a.behind?(0,n.jsx)("span",{className:"update-badge update-badge-new",children:t("update.newAvailable",{version:`v${a.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 Tt(e){let t=O();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(a=>(0,n.jsxs)("li",{children:[(0,n.jsx)("code",{children:a.binPath})," \u2192 ",Xe(a.kind,t)," ",(0,n.jsx)("small",{children:a.root})]},`${a.binPath}:${a.root}`))})]})}function xt(e){let t=O();if(e.changelog===null)return(0,n.jsx)(he,{label:t("update.changelogLoading"),compact:!0});if(!e.ok){let a=e.rateLimited?t("update.changelogRateLimited"):t("update.changelogFailed");return(0,n.jsxs)("p",{className:"hint-warn-inline",children:[a,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(a=>{let s=a.name&&a.name!==`v${a.version}`?a.name:"",o=a.publishedAt?new Date(a.publishedAt).toLocaleDateString():"";return(0,n.jsxs)("details",{className:"update-release",open:!0,children:[(0,n.jsxs)("summary",{children:[(0,n.jsxs)("strong",{children:["v",a.version]})," ",s," ",(0,n.jsx)("small",{children:o})," ",(0,n.jsx)("a",{href:a.url,target:"_blank",rel:"noopener",children:"\u2197"})]}),(0,n.jsx)("pre",{className:"update-release-body",children:a.body||""})]},a.version)})})}function Vt(e){return We(e,(0,n.jsx)(ut,{}))}export{mt as CodexNotifierSettingsEditor,yt as GroupNamePrefixRow,vt as HostOverloadAlertSettingsEditor,bt as TimeZoneRow,Vt as renderSettingsPage};
|