botmux 3.10.0 → 3.11.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/herdr-backend.d.ts +4 -3
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +11 -8
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/pty-backend.d.ts +1 -1
- package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
- package/dist/adapters/backend/pty-backend.js +4 -1
- package/dist/adapters/backend/pty-backend.js.map +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +29 -5
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +302 -31
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +6 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +7 -0
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +4 -1
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +37 -3
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.d.ts +3 -3
- package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +9 -3
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.d.ts +3 -3
- package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zellij-observe-backend.js +12 -7
- package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +11 -2
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +35 -2
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +88 -7
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/runner-input.d.ts +15 -14
- package/dist/adapters/cli/runner-input.d.ts.map +1 -1
- package/dist/adapters/cli/runner-input.js +64 -26
- package/dist/adapters/cli/runner-input.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +20 -5
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +24 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +110 -5
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/fleet-shutdown.d.ts +47 -0
- package/dist/cli/fleet-shutdown.d.ts.map +1 -0
- package/dist/cli/fleet-shutdown.js +387 -0
- package/dist/cli/fleet-shutdown.js.map +1 -0
- package/dist/cli/pm2-descriptor-guard.d.ts +19 -0
- package/dist/cli/pm2-descriptor-guard.d.ts.map +1 -0
- package/dist/cli/pm2-descriptor-guard.js +122 -0
- package/dist/cli/pm2-descriptor-guard.js.map +1 -0
- package/dist/cli/pm2-exact-start.d.ts +16 -0
- package/dist/cli/pm2-exact-start.d.ts.map +1 -0
- package/dist/cli/pm2-exact-start.js +63 -0
- package/dist/cli/pm2-exact-start.js.map +1 -0
- package/dist/cli/pm2-god-admission.d.ts +8 -0
- package/dist/cli/pm2-god-admission.d.ts.map +1 -0
- package/dist/cli/pm2-god-admission.js +25 -0
- package/dist/cli/pm2-god-admission.js.map +1 -0
- package/dist/cli/pm2-jlist.d.ts +13 -0
- package/dist/cli/pm2-jlist.d.ts.map +1 -0
- package/dist/cli/pm2-jlist.js +108 -0
- package/dist/cli/pm2-jlist.js.map +1 -0
- package/dist/cli/pm2-preflight.d.ts +10 -0
- package/dist/cli/pm2-preflight.d.ts.map +1 -0
- package/dist/cli/pm2-preflight.js +23 -0
- package/dist/cli/pm2-preflight.js.map +1 -0
- package/dist/cli/pm2-shutdown-capability.d.ts +27 -0
- package/dist/cli/pm2-shutdown-capability.d.ts.map +1 -0
- package/dist/cli/pm2-shutdown-capability.js +161 -0
- package/dist/cli/pm2-shutdown-capability.js.map +1 -0
- package/dist/cli/pm2-start-transaction.d.ts +55 -0
- package/dist/cli/pm2-start-transaction.d.ts.map +1 -0
- package/dist/cli/pm2-start-transaction.js +220 -0
- package/dist/cli/pm2-start-transaction.js.map +1 -0
- package/dist/cli/send-dispatch.d.ts +12 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +31 -4
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli/session-list-liveness.d.ts +1 -0
- package/dist/cli/session-list-liveness.d.ts.map +1 -1
- package/dist/cli/session-list-liveness.js +6 -0
- package/dist/cli/session-list-liveness.js.map +1 -1
- package/dist/cli/session-picker-layout.d.ts +26 -0
- package/dist/cli/session-picker-layout.d.ts.map +1 -0
- package/dist/cli/session-picker-layout.js +123 -0
- package/dist/cli/session-picker-layout.js.map +1 -0
- package/dist/cli/session-picker-viewport.d.ts +49 -0
- package/dist/cli/session-picker-viewport.d.ts.map +1 -0
- package/dist/cli/session-picker-viewport.js +46 -0
- package/dist/cli/session-picker-viewport.js.map +1 -0
- package/dist/cli/supervisor-shutdown-client.d.ts +31 -0
- package/dist/cli/supervisor-shutdown-client.d.ts.map +1 -0
- package/dist/cli/supervisor-shutdown-client.js +146 -0
- package/dist/cli/supervisor-shutdown-client.js.map +1 -0
- package/dist/cli/terminal-width.d.ts +48 -0
- package/dist/cli/terminal-width.d.ts.map +1 -0
- package/dist/cli/terminal-width.js +119 -0
- package/dist/cli/terminal-width.js.map +1 -0
- package/dist/cli/vc-agent.d.ts.map +1 -1
- package/dist/cli/vc-agent.js +1 -1
- package/dist/cli/vc-agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2269 -716
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +1630 -125
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/ask-api.d.ts +8 -1
- package/dist/core/ask-api.d.ts.map +1 -1
- package/dist/core/ask-api.js +18 -0
- package/dist/core/ask-api.js.map +1 -1
- package/dist/core/ask-broker.d.ts +20 -0
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +467 -47
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/ask-persist-store.d.ts +126 -0
- package/dist/core/ask-persist-store.d.ts.map +1 -0
- package/dist/core/ask-persist-store.js +188 -0
- package/dist/core/ask-persist-store.js.map +1 -0
- package/dist/core/ask-types.d.ts +80 -0
- package/dist/core/ask-types.d.ts.map +1 -1
- package/dist/core/ask-types.js +62 -0
- package/dist/core/ask-types.js.map +1 -1
- package/dist/core/cli-session-id-publisher.d.ts +20 -0
- package/dist/core/cli-session-id-publisher.d.ts.map +1 -0
- package/dist/core/cli-session-id-publisher.js +21 -0
- package/dist/core/cli-session-id-publisher.js.map +1 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +427 -255
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +13 -0
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +385 -26
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +9 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +842 -288
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/explicit-session-backing-cleanup.d.ts +49 -0
- package/dist/core/explicit-session-backing-cleanup.d.ts.map +1 -0
- package/dist/core/explicit-session-backing-cleanup.js +76 -0
- package/dist/core/explicit-session-backing-cleanup.js.map +1 -0
- package/dist/core/idle-worker-sweeper.d.ts +20 -0
- package/dist/core/idle-worker-sweeper.d.ts.map +1 -1
- package/dist/core/idle-worker-sweeper.js +18 -0
- package/dist/core/idle-worker-sweeper.js.map +1 -1
- package/dist/core/inflight-input-tracker.d.ts +10 -0
- package/dist/core/inflight-input-tracker.d.ts.map +1 -1
- package/dist/core/inflight-input-tracker.js +7 -0
- package/dist/core/inflight-input-tracker.js.map +1 -1
- package/dist/core/managed-origin-attestation.d.ts +51 -0
- package/dist/core/managed-origin-attestation.d.ts.map +1 -0
- package/dist/core/managed-origin-attestation.js +208 -0
- package/dist/core/managed-origin-attestation.js.map +1 -0
- package/dist/core/managed-origin-capability.d.ts +62 -3
- package/dist/core/managed-origin-capability.d.ts.map +1 -1
- package/dist/core/managed-origin-capability.js +419 -9
- package/dist/core/managed-origin-capability.js.map +1 -1
- package/dist/core/pending-repo-journal.d.ts +6 -0
- package/dist/core/pending-repo-journal.d.ts.map +1 -0
- package/dist/core/pending-repo-journal.js +85 -0
- package/dist/core/pending-repo-journal.js.map +1 -0
- package/dist/core/persistent-backend.d.ts +6 -1
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +12 -6
- package/dist/core/persistent-backend.js.map +1 -1
- package/dist/core/process-start-identity.d.ts +3 -0
- package/dist/core/process-start-identity.d.ts.map +1 -0
- package/dist/core/process-start-identity.js +62 -0
- package/dist/core/process-start-identity.js.map +1 -0
- package/dist/core/raw-command-writer.d.ts +34 -0
- package/dist/core/raw-command-writer.d.ts.map +1 -0
- package/dist/core/raw-command-writer.js +48 -0
- package/dist/core/raw-command-writer.js.map +1 -0
- package/dist/core/reply-target.d.ts +85 -22
- package/dist/core/reply-target.d.ts.map +1 -1
- package/dist/core/reply-target.js +267 -32
- package/dist/core/reply-target.js.map +1 -1
- package/dist/core/resource-monitor/runtime.d.ts.map +1 -1
- package/dist/core/resource-monitor/runtime.js +4 -1
- package/dist/core/resource-monitor/runtime.js.map +1 -1
- package/dist/core/restart-report.d.ts +6 -1
- package/dist/core/restart-report.d.ts.map +1 -1
- package/dist/core/restart-report.js +22 -4
- package/dist/core/restart-report.js.map +1 -1
- package/dist/core/riff-shutdown-detach.d.ts +164 -0
- package/dist/core/riff-shutdown-detach.d.ts.map +1 -0
- package/dist/core/riff-shutdown-detach.js +787 -0
- package/dist/core/riff-shutdown-detach.js.map +1 -0
- package/dist/core/riff-worker-shutdown-readiness.d.ts +17 -0
- package/dist/core/riff-worker-shutdown-readiness.d.ts.map +1 -0
- package/dist/core/riff-worker-shutdown-readiness.js +21 -0
- package/dist/core/riff-worker-shutdown-readiness.js.map +1 -0
- package/dist/core/session-manager.d.ts +6 -6
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1227 -594
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-marker.d.ts +1 -1
- package/dist/core/session-marker.d.ts.map +1 -1
- package/dist/core/session-marker.js +2 -2
- package/dist/core/session-marker.js.map +1 -1
- package/dist/core/session-mutation-guard.d.ts +17 -0
- package/dist/core/session-mutation-guard.d.ts.map +1 -0
- package/dist/core/session-mutation-guard.js +33 -0
- package/dist/core/session-mutation-guard.js.map +1 -0
- package/dist/core/shutdown-budgets.d.ts +27 -0
- package/dist/core/shutdown-budgets.d.ts.map +1 -0
- package/dist/core/shutdown-budgets.js +47 -0
- package/dist/core/shutdown-budgets.js.map +1 -0
- package/dist/core/supervisor-shutdown-ipc.d.ts +10 -0
- package/dist/core/supervisor-shutdown-ipc.d.ts.map +1 -0
- package/dist/core/supervisor-shutdown-ipc.js +10 -0
- package/dist/core/supervisor-shutdown-ipc.js.map +1 -0
- package/dist/core/supervisor-shutdown-protocol.d.ts +16 -0
- package/dist/core/supervisor-shutdown-protocol.d.ts.map +1 -0
- package/dist/core/supervisor-shutdown-protocol.js +16 -0
- package/dist/core/supervisor-shutdown-protocol.js.map +1 -0
- package/dist/core/trigger-final-suppression.d.ts +4 -0
- package/dist/core/trigger-final-suppression.d.ts.map +1 -1
- package/dist/core/trigger-final-suppression.js +6 -11
- package/dist/core/trigger-final-suppression.js.map +1 -1
- package/dist/core/trigger-session.d.ts +70 -0
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +923 -145
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +94 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +194 -13
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +2597 -547
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +76 -2
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +2255 -773
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +20 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +24 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/feed-groups.d.ts +17 -0
- package/dist/dashboard/feed-groups.d.ts.map +1 -0
- package/dist/dashboard/feed-groups.js +75 -0
- package/dist/dashboard/feed-groups.js.map +1 -0
- package/dist/dashboard/session-card-model.d.ts +1 -1
- package/dist/dashboard/session-card-model.d.ts.map +1 -1
- package/dist/dashboard/session-card-model.js +8 -5
- package/dist/dashboard/session-card-model.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +4 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +139 -46
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +4 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +40 -3
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +95 -2
- 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 +86 -40
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/kanban-model.js +1 -1
- package/dist/dashboard/web/kanban-model.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts.map +1 -1
- package/dist/dashboard/web/overview-page.js +3 -2
- package/dist/dashboard/web/overview-page.js.map +1 -1
- package/dist/dashboard/web/overview.d.ts +3 -0
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +2 -0
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/sessions-kanban.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-kanban.js +2 -0
- 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 +103 -2
- 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 +3 -2
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +8 -0
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +15 -0
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-GED4FEMS.js +10 -0
- package/dist/dashboard-web/chunks/chunk-6J5LS5AU.js +51 -0
- package/dist/dashboard-web/chunks/{chunk-ZU3UUKAR.js → chunk-HK7NIBJG.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-3UE7S77S.js → chunk-KRHWZEXU.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-VBXJOJFH.js +1 -0
- package/dist/dashboard-web/chunks/connectors-page-EELM66G3.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-WKUV6E42.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-T2ZX2RWL.js → insights-page-54UBPPOC.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-YNVBAGR6.js → monitor-room-PORHVKRH.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-LHM55YWN.js → monitoring-page-XGA7AXNL.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-ATXVP7PW.js → office-page-AO3AFG45.js} +1 -1
- package/dist/dashboard-web/chunks/overview-page-F5BUTYR6.js +1 -0
- package/dist/dashboard-web/chunks/{roles-page-56VWM6CD.js → roles-page-M5GIASJU.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-S5K6U4EO.js → schedules-page-O232WQRR.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-YFRPSTIL.js +6 -0
- package/dist/dashboard-web/chunks/{settings-page-QUZDQARR.js → settings-page-OJAZLZQT.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-IFY7AEND.js → skills-page-EFZQPWV4.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-C7FJQPFZ.js → team-federation-page-ZJVAP7HW.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-2LMF3WWR.js → v3-page-GYWTRGO2.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-3XC6QRMY.js → whiteboards-page-MSDAG6P7.js} +1 -1
- package/dist/dashboard-web/style.css +255 -0
- package/dist/dashboard.js +172 -7
- package/dist/dashboard.js.map +1 -1
- package/dist/desktop/renderer/app.js +21 -0
- package/dist/desktop/renderer/app.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +35 -9
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +35 -9
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/ask-card.d.ts +23 -0
- package/dist/im/lark/ask-card.d.ts.map +1 -1
- package/dist/im/lark/ask-card.js +94 -4
- package/dist/im/lark/ask-card.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +6 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +112 -15
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +496 -310
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +7 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +39 -26
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/doc-comment.d.ts +7 -4
- package/dist/im/lark/doc-comment.d.ts.map +1 -1
- package/dist/im/lark/doc-comment.js +19 -6
- package/dist/im/lark/doc-comment.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +16 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +88 -23
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/forward-followup-content.d.ts.map +1 -1
- package/dist/im/lark/forward-followup-content.js +9 -1
- package/dist/im/lark/forward-followup-content.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +7 -4
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/im/lark/md-card.d.ts +11 -0
- package/dist/im/lark/md-card.d.ts.map +1 -1
- package/dist/im/lark/md-card.js +46 -0
- package/dist/im/lark/md-card.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts +23 -2
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +58 -3
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/im/lark/overview-card.d.ts.map +1 -1
- package/dist/im/lark/overview-card.js +2 -1
- package/dist/im/lark/overview-card.js.map +1 -1
- package/dist/services/async-trigger-state.d.ts +6 -1
- package/dist/services/async-trigger-state.d.ts.map +1 -1
- package/dist/services/async-trigger-state.js +21 -0
- package/dist/services/async-trigger-state.js.map +1 -1
- package/dist/services/async-trigger-store.d.ts +23 -1
- package/dist/services/async-trigger-store.d.ts.map +1 -1
- package/dist/services/async-trigger-store.js +96 -13
- package/dist/services/async-trigger-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +40 -0
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +124 -24
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/codex-app-runner-protocol.d.ts +8 -0
- package/dist/services/codex-app-runner-protocol.d.ts.map +1 -1
- package/dist/services/codex-app-runner-protocol.js +9 -2
- package/dist/services/codex-app-runner-protocol.js.map +1 -1
- package/dist/services/codex-bridge-queue.d.ts +1 -0
- package/dist/services/codex-bridge-queue.d.ts.map +1 -1
- package/dist/services/codex-bridge-queue.js +1 -0
- package/dist/services/codex-bridge-queue.js.map +1 -1
- package/dist/services/codex-service-tier.d.ts +2 -0
- package/dist/services/codex-service-tier.d.ts.map +1 -1
- package/dist/services/codex-service-tier.js +1 -0
- package/dist/services/codex-service-tier.js.map +1 -1
- package/dist/services/codex-transcript.d.ts +27 -0
- package/dist/services/codex-transcript.d.ts.map +1 -1
- package/dist/services/codex-transcript.js +340 -2
- package/dist/services/codex-transcript.js.map +1 -1
- package/dist/services/grant-policy.d.ts +3 -0
- package/dist/services/grant-policy.d.ts.map +1 -1
- package/dist/services/grant-policy.js +5 -0
- package/dist/services/grant-policy.js.map +1 -1
- package/dist/services/grant-prefs-store.d.ts +6 -3
- package/dist/services/grant-prefs-store.d.ts.map +1 -1
- package/dist/services/grant-prefs-store.js +42 -12
- package/dist/services/grant-prefs-store.js.map +1 -1
- package/dist/services/hook-runner.d.ts +20 -1
- package/dist/services/hook-runner.d.ts.map +1 -1
- package/dist/services/hook-runner.js +17 -13
- package/dist/services/hook-runner.js.map +1 -1
- package/dist/services/idempotency-store.d.ts +134 -0
- package/dist/services/idempotency-store.d.ts.map +1 -0
- package/dist/services/idempotency-store.js +299 -0
- package/dist/services/idempotency-store.js.map +1 -0
- package/dist/services/jsonl-cursor.d.ts +7 -3
- package/dist/services/jsonl-cursor.d.ts.map +1 -1
- package/dist/services/jsonl-cursor.js +55 -31
- package/dist/services/jsonl-cursor.js.map +1 -1
- package/dist/services/open-platform-rename.d.ts.map +1 -1
- package/dist/services/open-platform-rename.js +1 -108
- package/dist/services/open-platform-rename.js.map +1 -1
- package/dist/services/restart-intent-store.d.ts +22 -2
- package/dist/services/restart-intent-store.d.ts.map +1 -1
- package/dist/services/restart-intent-store.js +160 -18
- package/dist/services/restart-intent-store.js.map +1 -1
- package/dist/services/sandbox-store.d.ts +22 -0
- package/dist/services/sandbox-store.d.ts.map +1 -1
- package/dist/services/sandbox-store.js +37 -8
- package/dist/services/sandbox-store.js.map +1 -1
- package/dist/services/send-policy.d.ts +41 -33
- package/dist/services/send-policy.d.ts.map +1 -1
- package/dist/services/send-policy.js +39 -40
- package/dist/services/send-policy.js.map +1 -1
- package/dist/services/session-store.d.ts +66 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +403 -67
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/submit-notification.d.ts +3 -0
- package/dist/services/submit-notification.d.ts.map +1 -0
- package/dist/services/submit-notification.js +15 -0
- package/dist/services/submit-notification.js.map +1 -0
- package/dist/services/traex-transcript.d.ts +25 -2
- package/dist/services/traex-transcript.d.ts.map +1 -1
- package/dist/services/traex-transcript.js +133 -1
- package/dist/services/traex-transcript.js.map +1 -1
- package/dist/services/trigger-types.d.ts +13 -1
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js +39 -0
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/services/voice/index.d.ts +3 -2
- package/dist/services/voice/index.d.ts.map +1 -1
- package/dist/services/voice/index.js +5 -5
- package/dist/services/voice/index.js.map +1 -1
- package/dist/services/voice/openai.d.ts +2 -1
- package/dist/services/voice/openai.d.ts.map +1 -1
- package/dist/services/voice/openai.js +2 -1
- package/dist/services/voice/openai.js.map +1 -1
- package/dist/services/voice/sami.d.ts +5 -2
- package/dist/services/voice/sami.d.ts.map +1 -1
- package/dist/services/voice/sami.js +19 -4
- package/dist/services/voice/sami.js.map +1 -1
- package/dist/setup/bots-store.d.ts.map +1 -1
- package/dist/setup/bots-store.js +10 -4
- package/dist/setup/bots-store.js.map +1 -1
- package/dist/setup/lark-scopes.json +2 -0
- package/dist/setup/open-platform-automation.d.ts +9 -1
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +44 -15
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/open-platform-visibility.d.ts +42 -0
- package/dist/setup/open-platform-visibility.d.ts.map +1 -0
- package/dist/setup/open-platform-visibility.js +133 -0
- package/dist/setup/open-platform-visibility.js.map +1 -0
- package/dist/setup/verify-permissions.d.ts.map +1 -1
- package/dist/setup/verify-permissions.js +6 -0
- package/dist/setup/verify-permissions.js.map +1 -1
- package/dist/skills/definitions.js +2 -2
- package/dist/types.d.ts +290 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +1 -0
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js +1 -1
- package/dist/utils/bot-routing.js.map +1 -1
- package/dist/utils/child-env.d.ts +1 -1
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +9 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/codex-app-control.d.ts +438 -0
- package/dist/utils/codex-app-control.d.ts.map +1 -0
- package/dist/utils/codex-app-control.js +2336 -0
- package/dist/utils/codex-app-control.js.map +1 -0
- package/dist/utils/codex-app-dispatch-ledger.d.ts +78 -0
- package/dist/utils/codex-app-dispatch-ledger.d.ts.map +1 -0
- package/dist/utils/codex-app-dispatch-ledger.js +149 -0
- package/dist/utils/codex-app-dispatch-ledger.js.map +1 -0
- package/dist/utils/codex-app-turn-dispatch.d.ts +77 -0
- package/dist/utils/codex-app-turn-dispatch.d.ts.map +1 -0
- package/dist/utils/codex-app-turn-dispatch.js +141 -0
- package/dist/utils/codex-app-turn-dispatch.js.map +1 -0
- package/dist/utils/codex-app-turn-liveness.d.ts +125 -0
- package/dist/utils/codex-app-turn-liveness.d.ts.map +1 -0
- package/dist/utils/codex-app-turn-liveness.js +301 -0
- package/dist/utils/codex-app-turn-liveness.js.map +1 -0
- 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 +19 -0
- package/dist/utils/idle-detector.js.map +1 -1
- package/dist/utils/input-gate.d.ts +87 -0
- package/dist/utils/input-gate.d.ts.map +1 -1
- package/dist/utils/input-gate.js +86 -0
- package/dist/utils/input-gate.js.map +1 -1
- package/dist/utils/lark-upload.d.ts.map +1 -1
- package/dist/utils/lark-upload.js +52 -1
- package/dist/utils/lark-upload.js.map +1 -1
- package/dist/utils/pending-input-queue.d.ts +15 -0
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js +5 -1
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/utils/user-token.d.ts.map +1 -1
- package/dist/utils/user-token.js +53 -2
- package/dist/utils/user-token.js.map +1 -1
- package/dist/worker-ipc-preload.d.ts +12 -0
- package/dist/worker-ipc-preload.d.ts.map +1 -0
- package/dist/worker-ipc-preload.js +44 -0
- package/dist/worker-ipc-preload.js.map +1 -0
- package/dist/worker.js +2604 -325
- package/dist/worker.js.map +1 -1
- package/dist/workflows/v3/session-relay-client.d.ts +1 -0
- package/dist/workflows/v3/session-relay-client.d.ts.map +1 -1
- package/dist/workflows/v3/session-relay-client.js +12 -3
- package/dist/workflows/v3/session-relay-client.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-LTVOUDIS.js +0 -10
- package/dist/dashboard-web/chunks/chunk-DCS35UMD.js +0 -1
- package/dist/dashboard-web/chunks/chunk-MFQPCVHY.js +0 -51
- package/dist/dashboard-web/chunks/connectors-page-5KWDIMKC.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-FHOKYXMW.js +0 -8
- package/dist/dashboard-web/chunks/overview-page-QYI3KBDD.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-WBP4N7D2.js +0 -6
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as H,b as Q}from"./chunk-EVK77ASG.js";import{a as de}from"./chunk-ZJVTGU5X.js";import{c as W}from"./chunk-ZU3UUKAR.js";import{a as ce,c as le,g as Ie,l as M,q as ie}from"./chunk-5CJMHTT4.js";import"./chunk-MFQPCVHY.js";import{a as se}from"./chunk-SYC6D5XU.js";import{a as Le,d as re}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var i=K(Le(),1);var m=K(Le(),1);var n=K(re(),1),Oe=50,we={total:0,ok:0,error:0,successRate:0};function $e(t,e=Date.now()){if(t==="all")return;let s=t==="24h"?24:t==="7d"?168:720;return new Date(e-s*60*60*1e3).toISOString()}function He(t,e=0){let s=new URLSearchParams({limit:String(Oe),offset:String(e)});t.connectorId&&s.set("connectorId",t.connectorId),t.status&&s.set("status",t.status);let g=$e(t.timeWindow);return g&&s.set("since",g),t.query.trim()&&s.set("q",t.query.trim()),s}function Te(t){if(!t)return"\u2014";let e=new Date(t);return Number.isFinite(e.getTime())?e.toLocaleString():t}function ue(t){return t===void 0||!Number.isFinite(t)?"\u2014":t<1e3?`${Math.round(t)} ms`:t<6e4?`${(t/1e3).toFixed(t<1e4?1:0)} s`:`${(t/6e4).toFixed(1)} min`}function Ae(t){return t===void 0?"\u2014":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}function ve(t){return t.value===void 0||t.value===null?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):typeof t.value=="object"&&!Array.isArray(t.value)&&Object.keys(t.value).length===0?(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:t.empty}):(0,n.jsx)("pre",{className:`webhook-log-json${t.fullHeight?" full-height":""}`,children:(0,n.jsx)("code",{children:JSON.stringify(t.value,null,2)})})}function qe(t){let e=[["kind",t.value?.kind],["mode",t.value?.mode],["botId",t.value?.botId],["chatId",t.value?.chatId],["sessionId",t.value?.sessionId],["rootMessageId",t.value?.rootMessageId],["workflowId",t.value?.workflowId]].filter(([,s])=>s!=null&&s!=="");return e.length?(0,n.jsx)("dl",{className:"webhook-log-target-facts",children:e.map(([s,g])=>(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:s}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:String(g)})})]},s))}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:"\u2014"})}function Ce(t){return(0,n.jsx)(ie,{id:t.id,className:"webhook-log-filter-menu",ariaLabel:t.label,style:{width:"100%",minWidth:0},value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function ge(t){return(0,n.jsxs)("article",{className:`card webhook-log-metric${t.tone?` ${t.tone}`:""}`,children:[(0,n.jsx)("span",{children:t.label}),(0,n.jsx)("strong",{children:t.value}),(0,n.jsx)("small",{children:t.hint||"\xA0"})]})}function Me(t={}){let e=W(),s=(0,m.useRef)(!1),g=(0,m.useRef)([]),[w,L]=(0,m.useState)([]),[f,I]=(0,m.useState)([]),[y,D]=(0,m.useState)(we),[N,O]=(0,m.useState)({connectorId:"",status:"",timeWindow:"7d",query:""}),[d,r]=(0,m.useState)(null),[R,_]=(0,m.useState)(!0),[v,U]=(0,m.useState)(!1),[A,J]=(0,m.useState)(!1),[V,Y]=(0,m.useState)(0),[q,P]=(0,m.useState)(""),[X,Z]=(0,m.useState)(!1),T=(0,m.useMemo)(()=>new Map(w.map(c=>[c.id,c.name])),[w]),u=(0,m.useMemo)(()=>f.find(c=>c.triggerId===d)??f[0]??null,[f,d]),ee=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allConnectors")},...w.map(c=>({value:c.id,label:c.name}))],[w,e]),B=(0,m.useMemo)(()=>[{value:"",label:e("webhookLogs.allStatuses")},{value:"ok",label:e("webhookLogs.success")},{value:"error",label:e("webhookLogs.failed")}],[e]),be=(0,m.useMemo)(()=>[{value:"24h",label:e("webhookLogs.last24h")},{value:"7d",label:e("webhookLogs.last7d")},{value:"30d",label:e("webhookLogs.last30d")},{value:"all",label:e("webhookLogs.allTime")}],[e]),$=(0,m.useCallback)(async(c=!1,k=!1)=>{k?U(!0):_(!0),P("");let z=c?g.current.length:0,oe=He(N,z),b=new URLSearchParams(oe);b.delete("limit"),b.delete("offset");try{let[F,te]=await Promise.all([H(`/api/trigger-logs?${oe}`),c?Promise.resolve(null):H(`/api/trigger-logs/summary?${b}`)]);if(!s.current)return;if(F.status!==200)throw new Error(String(F.body?.error||F.status));let S=Array.isArray(F.body?.logs)?F.body.logs:[],ne=c?[...g.current,...S]:S;g.current=ne,I(ne),Y(Number(F.body?.total??S.length)),J(F.body?.hasMore===!0),c||(D(te?.status===200?te.body?.summary??we:we),r(ae=>S.some(ye=>ye.triggerId===ae)?ae:S[0]?.triggerId??null))}catch(F){s.current&&P(F?.message||e("webhookLogs.loadFailed"))}finally{s.current&&(_(!1),U(!1))}},[N,e]);(0,m.useEffect)(()=>(s.current=!0,H("/api/connectors").then(c=>{s.current&&c.status===200&&L(Array.isArray(c.body?.connectors)?c.body.connectors:[])}),()=>{s.current=!1}),[]),(0,m.useEffect)(()=>{let c=setTimeout(()=>{$(!1)},N.query?260:0);return()=>clearTimeout(c)},[N,$]),(0,m.useEffect)(()=>{let c=setInterval(()=>{$(!1,!0)},15e3);return()=>clearInterval(c)},[$]);async function he(){!u||!await de(JSON.stringify(u,null,2),e("webhookLogs.copyJson"))||(Z(!0),setTimeout(()=>s.current&&Z(!1),1200))}let fe=u?.request?.payloadOmittedReason==="disabled"?e("webhookLogs.payloadDisabled"):u?.request?.payloadOmittedReason==="too_large"?e("webhookLogs.payloadTooLarge"):e("webhookLogs.payloadUnavailable"),j=(0,n.jsxs)(n.Fragment,{children:[t.embedded?null:(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,n.jsx)("h1",{children:e("nav.webhookLogs")}),(0,n.jsx)("p",{className:"webhook-log-heading-copy",children:e("webhookLogs.subtitle")})]}),(0,n.jsxs)("div",{className:"page-heading-actions",children:[(0,n.jsxs)("span",{className:`webhook-log-live${v?" refreshing":""}`,children:[(0,n.jsx)("i",{}),e("webhookLogs.autoRefresh")]}),(0,n.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})]})]}),(0,n.jsxs)("section",{className:"webhook-log-metrics","aria-label":e("webhookLogs.summary"),children:[(0,n.jsx)(ge,{label:e("webhookLogs.total"),value:y.total,hint:e("webhookLogs.filteredRange")}),(0,n.jsx)(ge,{label:e("webhookLogs.successRate"),value:`${y.successRate.toFixed(y.successRate%1?1:0)}%`,tone:"ok",hint:`${y.ok} ${e("webhookLogs.calls")}`}),(0,n.jsx)(ge,{label:e("webhookLogs.failures"),value:y.error,tone:y.error?"error":void 0,hint:y.error?e("webhookLogs.needsReview"):e("webhookLogs.noFailures")}),(0,n.jsx)(ge,{label:e("webhookLogs.p95"),value:ue(y.p95DurationMs),hint:`${e("webhookLogs.average")} ${ue(y.avgDurationMs)}`})]}),(0,n.jsxs)("form",{className:"filters dashboard-toolbar webhook-log-toolbar",onSubmit:c=>c.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q","aria-label":e("webhookLogs.search"),placeholder:e("webhookLogs.searchPlaceholder"),value:N.query,onChange:c=>{let k=c.currentTarget.value;O(z=>({...z,query:k}))}}),(0,n.jsx)(Ce,{id:"webhook-log-connector",label:e("webhookLogs.connector"),value:N.connectorId,options:ee,onChange:c=>O(k=>({...k,connectorId:c}))}),(0,n.jsx)(Ce,{id:"webhook-log-status",label:e("webhookLogs.status"),value:N.status,options:B,onChange:c=>O(k=>({...k,status:c}))}),(0,n.jsx)(Ce,{id:"webhook-log-window",label:e("webhookLogs.timeRange"),value:N.timeWindow,options:be,onChange:c=>O(k=>({...k,timeWindow:c}))}),(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-refresh",disabled:v,onClick:()=>{$(!1,!0)},children:e("webhookLogs.refresh")})]}),q?(0,n.jsxs)("p",{className:"err webhook-log-error",children:[e("webhookLogs.loadFailed"),": ",q]}):null,(0,n.jsxs)("section",{className:"webhook-log-workspace",children:[(0,n.jsxs)("article",{className:"card webhook-log-list-panel",children:[(0,n.jsx)("header",{className:"webhook-log-panel-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e("webhookLogs.records")}),(0,n.jsx)("span",{children:e("webhookLogs.matching",{count:V})})]})}),R&&!f.length?(0,n.jsx)(le,{label:e("webhookLogs.loading"),compact:!0}):null,!R&&!f.length?(0,n.jsxs)("div",{className:"webhook-log-empty",children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"\u25CE"}),(0,n.jsx)("strong",{children:e("webhookLogs.empty")}),(0,n.jsx)("p",{children:e("webhookLogs.emptyHint")})]}):null,(0,n.jsx)("div",{className:"webhook-log-list",role:"listbox","aria-label":e("webhookLogs.records"),children:f.map(c=>{let k=u?.triggerId===c.triggerId;return(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":k,className:`webhook-log-row${k?" active":""}`,onClick:()=>r(c.triggerId),children:[(0,n.jsx)("span",{className:`webhook-log-status-dot ${c.status}`,"aria-hidden":"true"}),(0,n.jsxs)("span",{className:"webhook-log-row-main",children:[(0,n.jsxs)("span",{className:"webhook-log-row-title",children:[(0,n.jsx)("strong",{children:T.get(c.connectorId||"")||c.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsx)("code",{children:c.request?.method||"POST"})]}),(0,n.jsxs)("span",{className:"webhook-log-row-meta",children:[(0,n.jsx)("span",{children:Te(c.createdAt)}),(0,n.jsx)("span",{children:c.errorCode||c.action})]})]}),(0,n.jsxs)("span",{className:"webhook-log-row-result",children:[(0,n.jsx)("b",{className:c.status,children:c.response?.httpStatus??(c.status==="ok"?"2xx":"ERR")}),(0,n.jsx)("small",{children:ue(c.response?.durationMs)})]})]},`${c.triggerId}-${c.createdAt}`)})}),A?(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-more",disabled:R,onClick:()=>{$(!0)},children:e("webhookLogs.loadMore")}):null]}),(0,n.jsx)("article",{className:"card webhook-log-detail-panel",children:u?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"webhook-log-detail-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:`webhook-log-result-pill ${u.status}`,children:u.status==="ok"?e("webhookLogs.success"):e("webhookLogs.failed")}),(0,n.jsx)("h2",{children:T.get(u.connectorId||"")||u.connectorId||e("webhookLogs.unknownConnector")}),(0,n.jsxs)("p",{children:[Te(u.createdAt)," \xB7 ",u.request?.method||"POST"," ",u.request?.path||"/webhook/\u2026"]})]}),(0,n.jsx)("button",{type:"button",className:"ghost",onClick:()=>{he()},children:e(X?"webhookLogs.copied":"webhookLogs.copyJson")})]}),u.error?(0,n.jsxs)("div",{className:"webhook-log-failure",children:[(0,n.jsx)("strong",{children:u.errorCode||e("webhookLogs.failureReason")}),(0,n.jsx)("span",{children:u.error})]}):null,(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.overview")}),(0,n.jsxs)("dl",{className:"webhook-log-facts",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.httpStatus")}),(0,n.jsx)("dd",{children:u.response?.httpStatus??"\u2014"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.duration")}),(0,n.jsx)("dd",{children:ue(u.response?.durationMs)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.action")}),(0,n.jsx)("dd",{children:u.action})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.bodySize")}),(0,n.jsx)("dd",{children:Ae(u.request?.bodyBytes)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Trigger ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.triggerId})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Request ID"}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.requestId||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.remoteAddress")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.request?.remoteAddress||"\u2014"})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e("webhookLogs.target")}),(0,n.jsx)("dd",{children:(0,n.jsx)("code",{children:u.target?.chatId||u.target?.sessionId||u.response?.chatId||"\u2014"})})]})]})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.queryParams")}),(0,n.jsx)(ve,{value:u.request?.query,empty:e("webhookLogs.none")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.headers"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),(0,n.jsx)(ve,{value:u.request?.headers,empty:e("webhookLogs.headersNotStored")})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsxs)("h3",{children:[e("webhookLogs.payload"),(0,n.jsx)("small",{children:e("webhookLogs.redacted")})]}),u.request?.payloadStored?(0,n.jsx)(ve,{value:u.request.payload,empty:e("webhookLogs.none")}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:fe})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.routeTarget")}),(0,n.jsx)(qe,{value:u.target})]})]}):(0,n.jsx)("div",{className:"webhook-log-empty",children:(0,n.jsx)("strong",{children:e("webhookLogs.selectRecord")})})})]})]});return t.embedded?(0,n.jsx)("section",{className:"webhook-logs-content webhook-logs-panel",children:j}):(0,n.jsx)("section",{className:"page webhook-logs-content webhook-logs-page",children:j})}var o=K(re(),1);function Be(t,e){return t.map(s=>s.id===e.id?e:s)}var Pe={name:"",botId:"",kind:"turn",workflowId:"",mode:"dynamic",chatId:"",manualChat:!1,manualChatId:"",allowChats:[],deduplicate:!1,dedup:"",instruction:"",topicMessageMode:"default",topicMessageText:"",suppressFinalOutput:!1,verify:"token",secret:"",storePayload:!0};function ao(t,e){return{promptEnvelope:{sourceName:t.promptEnvelope?.sourceName||t.name,instruction:e}}}function Ge(t){return[{value:"turn",label:t("connectors.kindTurn")},{value:"workflow",label:t("connectors.kindWorkflowRetiring"),disabled:!0}]}function Ne(t){return`${location.origin}/webhook/${encodeURIComponent(t)}`}function me(t){return(0,o.jsx)(ie,{id:t.id,className:"connector-form-menu",ariaLabel:t.label,value:t.value,label:ce(t.options,t.value),options:t.options,onChange:t.onChange})}function xe(t){let e=(0,i.useRef)(null),[s,g]=(0,i.useState)(!1),[w,L]=(0,i.useState)(""),f=Array.isArray(t.value)?t.value:t.value?[t.value]:[],I=(0,i.useMemo)(()=>new Set(f),[f]),y=w.trim().toLocaleLowerCase(),D=(0,i.useMemo)(()=>y?t.groups.filter(d=>`${d.name} ${d.chatId}`.toLocaleLowerCase().includes(y)):t.groups,[y,t.groups]),N=t.multiple?f.length===0?t.allLabel||t.placeholder:t.selectedCountLabel(f.length):t.groups.find(d=>d.chatId===f[0])?.name||f[0]||t.placeholder;(0,i.useEffect)(()=>{if(!s)return;let d=r=>{e.current?.contains(r.target)||g(!1)};return document.addEventListener("pointerdown",d),()=>document.removeEventListener("pointerdown",d)},[s]);function O(d){if(!t.multiple){t.onChange(d),g(!1),L("");return}t.onChange(I.has(d)?f.filter(r=>r!==d):[...f,d])}return(0,o.jsxs)("div",{ref:e,className:`connector-group-picker${s?" open":""}`,children:[(0,o.jsxs)("button",{id:t.id,type:"button",className:"connector-group-picker-trigger","aria-label":t.label,"aria-haspopup":"listbox","aria-expanded":s,onClick:()=>g(d=>!d),children:[(0,o.jsx)("span",{className:f.length||t.multiple&&t.allLabel?"":"muted",children:N}),(0,o.jsx)("span",{className:"connector-group-picker-chevron","aria-hidden":"true"})]}),s?(0,o.jsxs)("div",{className:"connector-group-picker-popover",children:[(0,o.jsxs)("label",{className:"connector-group-search",htmlFor:`${t.id}-search`,children:[(0,o.jsx)("span",{className:"connector-group-search-icon","aria-hidden":"true"}),(0,o.jsx)("input",{id:`${t.id}-search`,type:"search",autoComplete:"off",autoFocus:!0,value:w,placeholder:t.searchPlaceholder,onChange:d=>L(d.currentTarget.value),onKeyDown:d=>{d.key==="Escape"&&(d.preventDefault(),g(!1))}})]}),(0,o.jsxs)("div",{className:"connector-group-options",role:"listbox","aria-label":t.label,"aria-multiselectable":t.multiple||void 0,children:[t.multiple&&t.allLabel&&!y?(0,o.jsxs)("button",{type:"button",className:`connector-group-option connector-group-option-all${f.length===0?" selected":""}`,role:"option","aria-selected":f.length===0,onClick:()=>t.onChange([]),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:t.allLabel}),(0,o.jsx)("small",{children:t.placeholder})]})]}):null,D.map(d=>{let r=I.has(d.chatId);return(0,o.jsxs)("button",{type:"button",className:`connector-group-option${r?" selected":""}`,role:"option","aria-selected":r,onClick:()=>O(d.chatId),children:[(0,o.jsx)("span",{className:"connector-group-check","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:d.name||d.chatId}),d.name?(0,o.jsx)("small",{children:d.chatId}):null]})]},d.chatId)}),D.length?null:(0,o.jsx)("p",{className:"connector-group-empty",children:t.emptyLabel})]})]}):null]})}function pe(t,e){return t.filter(s=>s.bots.includes(e))}function We(t,e){let s=t.target.chatId||"",g=s&&pe(e,t.target.botId).some(w=>w.chatId===s);return{name:t.name,botId:t.target.botId,kind:t.target.kind,workflowId:t.target.workflowId||"",mode:t.target.mode,chatId:g?s:"",manualChat:!!(s&&!g),manualChatId:g?"":s,allowChats:t.target.allowChats||[],deduplicate:!!t.lifecycleExtractors?.dedupKey,dedup:t.lifecycleExtractors?.dedupKey||"",instruction:t.promptEnvelope?.instruction||"",topicMessageMode:t.topicMessage?.mode||"default",topicMessageText:t.topicMessage?.text||"",suppressFinalOutput:t.suppressFinalOutput===!0,verify:t.verify?.type||"token",secret:"",storePayload:t.loggingPolicy?.storePayload!==!1}}function _e(t){let e=W(),s=t.active==="webhooks",g=t.active==="logs";return(0,o.jsxs)("nav",{className:"connectors-subnav-slot connectors-subnav insight-tabs",role:"tablist","aria-label":e("nav.connectors"),children:[(0,o.jsx)("a",{href:"#/connectors",className:`itab${s?" on":""}`,role:"tab","aria-selected":s,children:e("connectors.tabWebhooks")}),(0,o.jsx)("a",{href:"#/connectors/logs",className:`itab${g?" on":""}`,role:"tab","aria-selected":g,children:e("connectors.tabLogs")})]})}function Se(t){let e=W(),s=(0,i.useRef)(!1),g=(0,i.useRef)(null),w=(0,i.useRef)(null),[L,f]=(0,i.useState)([]),[I,y]=(0,i.useState)([]),[D,N]=(0,i.useState)([]),[O,d]=(0,i.useState)(!0),[r,R]=(0,i.useState)(Pe),[_,v]=(0,i.useState)(null),[U,A]=(0,i.useState)(null),[J,V]=(0,i.useState)(!1),[Y,q]=(0,i.useState)(!1),[P,X]=(0,i.useState)(null),[Z,T]=(0,i.useState)(null),[u,ee]=(0,i.useState)(null),B=(0,i.useMemo)(()=>pe(I,r.botId),[I,r.botId]),be=(0,i.useMemo)(()=>L.length?L.map(a=>({value:a.larkAppId,label:a.botName})):[{value:"",label:e("connectors.noOnlineBots")}],[L,e]),$=(0,i.useMemo)(()=>Ge(e),[e]),he=(0,i.useMemo)(()=>[{value:"dynamic",label:e("connectors.modeDynamic")},{value:"fixed",label:e("connectors.modeFixed")},{value:"new-group",label:e("connectors.modeNewGroup")}],[e]),fe=(0,i.useMemo)(()=>[{value:"token",label:e("connectors.verifyToken")},{value:"hmac-sha256",label:e("connectors.verifyHmac")}],[e]),j=(0,i.useCallback)(a=>I.find(p=>p.chatId===a)?.name||a,[I]),c=(0,i.useCallback)((a,l)=>{R(p=>{let C=p.botId&&a.some(E=>E.larkAppId===p.botId)?p.botId:a[0]?.larkAppId??"",h=pe(l,C),x=p.chatId&&h.some(E=>E.chatId===p.chatId)?p.chatId:h[0]?.chatId??"",G=new Set(h.map(E=>E.chatId));return{...p,botId:C,chatId:x,allowChats:p.allowChats.filter(E=>G.has(E))}})},[]),k=(0,i.useCallback)(async()=>{d(!0);try{let[a,l,p]=await Promise.all([H("/api/bots"),H("/api/connectors"),H("/api/groups")]);if(!s.current)return;let C=(a.body?.bots||[]).map(x=>({larkAppId:x.larkAppId,botName:x.botName||x.larkAppId})),h=(p.body?.chats||[]).map(x=>({chatId:x.chatId,name:x.name||"",bots:(x.memberBots||[]).filter(G=>G.inChat).map(G=>G.larkAppId)}));f(C),y(h),N(Array.isArray(l.body?.connectors)?l.body.connectors:[]),c(C,h)}finally{s.current&&d(!1)}},[c]);(0,i.useEffect)(()=>(s.current=!0,k(),()=>{s.current=!1,g.current&&clearTimeout(g.current)}),[k]),(0,i.useEffect)(()=>{let a=new Set(B.map(l=>l.chatId));R(l=>({...l,chatId:l.chatId&&a.has(l.chatId)?l.chatId:B[0]?.chatId??"",allowChats:l.allowChats.filter(p=>a.has(p))}))},[B]),(0,i.useEffect)(()=>{let a=w.current;if(a)if(Y){if(!a.open)try{a.showModal()}catch{}let l=a.querySelector(".connector-modal-body");l&&(l.scrollTop=0)}else a.open&&a.close()},[Y]),(0,i.useEffect)(()=>()=>{let a=w.current;a?.open&&a.close()},[]);function z(a){return e(a==="fixed"?"connectors.modeLabelFixed":a==="new-group"?"connectors.modeLabelNewGroup":"connectors.modeLabelDynamic")}function oe(a){return e(a==="workflow"?"connectors.kindLabelWorkflow":"connectors.kindLabelTurn")}function b(a){R(l=>({...l,...a}))}function F(){v(null),A(null),X(null),R(a=>{let l=a.botId||L[0]?.larkAppId||"";return{...Pe,botId:l,chatId:pe(I,l)[0]?.chatId||""}}),q(!0)}function te(a){v(null),A(null),T(null),X(a),R(We(a,I)),q(!0)}function S(){J||(q(!1),v(null),A(null),X(null))}async function ne(){v(null),A(null);let a=r.name.trim(),l=r.botId;if(!a){v({text:e("connectors.errName"),error:!0});return}if(!l){v({text:e("connectors.errBot"),error:!0});return}if(r.kind==="workflow"){v({text:e("connectors.errLegacyWorkflowRetired"),error:!0});return}let p=r.topicMessageText.trim();if(r.topicMessageMode==="custom"&&!p){v({text:e("connectors.errTopicMessage"),error:!0});return}let C={name:a,enabled:P?.enabled??!0,target:{kind:r.kind,mode:r.mode,botId:l},promptEnvelope:{sourceName:a,instruction:r.instruction.trim()},topicMessage:{mode:r.topicMessageMode,...r.topicMessageMode==="custom"?{text:p}:{}},suppressFinalOutput:r.suppressFinalOutput,verify:{type:r.verify},loggingPolicy:{storePayload:r.storePayload,storeHeaders:!0,retentionDays:14}};if(r.mode==="fixed"){let h=r.manualChat?r.manualChatId.trim():r.chatId;if(!h){v({text:e("connectors.errChat"),error:!0});return}C.target.chatId=h}else r.mode==="dynamic"&&(C.target.allowChats=r.allowChats);if(r.mode==="new-group"){let h=r.dedup.trim();if(r.deduplicate&&!h){v({text:e("connectors.errDedup"),error:!0});return}C.lifecycleExtractors=r.deduplicate?{dedupKey:h}:null}else C.lifecycleExtractors=null;r.secret.trim()&&(C.secret=r.secret.trim()),V(!0),v({text:e(P?"connectors.saving":"connectors.creating")});try{let h=await Q(P?"PUT":"POST",P?`/api/connectors/${encodeURIComponent(P.id)}`:"/api/connectors",C);if(!s.current)return;if((h.status===201||h.status===200)&&h.body?.ok){if(P){let ke=P.id;N(De=>Be(De,h.body.connector)),T({id:ke,text:e("connectors.updated")}),q(!1),X(null);return}let x=h.body.webhookUrl||Ne(h.body.connector.id),G=(h.body.connector?.verify?.type??"token")==="token",E=r.mode==="dynamic",Ee=E?C.target.allowChats?.[0]||"<chatId>":"";v(null),A({name:a,mode:r.mode,chatId:C.target.chatId,url:x,secret:h.body.secret,isToken:G,isDynamic:E,exampleChat:Ee}),R(ke=>({...ke,name:"",workflowId:"",manualChatId:"",dedup:"",secret:"",instruction:"",topicMessageMode:"default",topicMessageText:"",suppressFinalOutput:!1,allowChats:[],storePayload:!0})),await k()}else{let x=h.body?.error||h.status;v({text:e("connectors.createFailed",{error:String(x)}),error:!0})}}finally{s.current&&V(!1)}}async function ae(a){T({id:a.id,text:e(a.enabled?"connectors.disabling":"connectors.enabling")});let l=await Q("PATCH",`/api/connectors/${encodeURIComponent(a.id)}`,{enabled:!a.enabled});if(s.current)if(l.status===200&&l.body?.ok)T(null),await k();else{let p=l.body?.error||l.status;T({id:a.id,text:e("connectors.toggleFailed",{error:String(p)}),error:!0})}}async function ye(a){let l=a.loggingPolicy?.storePayload!==!1;T({id:a.id,text:e("connectors.saving")});let p=await Q("PUT",`/api/connectors/${encodeURIComponent(a.id)}`,{loggingPolicy:{storePayload:!l,storeHeaders:a.loggingPolicy?.storeHeaders!==!1,retentionDays:a.loggingPolicy?.retentionDays??14}});if(s.current)if(p.status===200&&p.body?.ok)T(null),await k();else{let C=p.body?.error||p.status;T({id:a.id,text:e("connectors.saveFailed",{error:String(C)}),error:!0})}}async function Fe(a){if(!confirm(e("connectors.delConfirm")))return;T({id:a.id,text:e("connectors.deleting")});let l=await Q("DELETE",`/api/connectors/${encodeURIComponent(a.id)}`);if(s.current)if(l.status===200&&l.body?.ok)T(null),await k();else{let p=l.body?.error||l.status;T({id:a.id,text:e("connectors.deleteFailed",{error:String(p)}),error:!0})}}function Re(a){de(Ne(a.id),e("connectors.copy")).then(l=>{!l||!s.current||(ee(a.id),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{s.current&&ee(null)},1200))})}return(0,o.jsxs)("section",{className:"page connectors-page",children:[(0,o.jsxs)("div",{className:"page-heading",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("p",{className:"eyebrow",children:e("nav.connectors")}),(0,o.jsx)("h1",{children:e("nav.connectors")})]}),(0,o.jsx)("div",{className:"page-heading-actions",children:t.tab==="webhooks"?(0,o.jsx)(Ie,{className:"page-primary-action connector-create-trigger",onClick:F,children:e("connectors.createTitle")}):(0,o.jsx)("a",{className:"button page-primary-action",href:"#/connectors",children:e("webhookLogs.manage")})})]}),(0,o.jsx)(_e,{active:t.tab}),t.tab==="webhooks"?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("dialog",{ref:w,className:"connector-create-modal",onCancel:a=>{a.preventDefault(),S()},onClose:S,onClick:a=>{a.target===a.currentTarget&&S()},children:(0,o.jsxs)("article",{className:"connector-modal-card",children:[(0,o.jsxs)("header",{className:"connector-modal-header",children:[(0,o.jsx)("h3",{children:e(P?"connectors.editTitle":"connectors.createTitle")}),(0,o.jsx)("button",{type:"button",className:"connector-modal-close","aria-label":e("connectors.close"),title:e("connectors.close"),disabled:J,onClick:S,children:(0,o.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]}),(0,o.jsx)("div",{className:"connector-modal-body",children:U?(0,o.jsx)(Ue,{created:U,groupName:j}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"cn-form",children:[(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-name",children:[(0,o.jsx)(M,{children:e("connectors.fName")}),(0,o.jsx)("input",{id:"cn-name",value:r.name,onChange:a=>b({name:a.currentTarget.value}),placeholder:e("connectors.fNamePh")})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fBot")}),(0,o.jsx)(me,{id:"cn-bot",label:e("connectors.fBot"),value:r.botId,options:be,onChange:a=>b({botId:a})})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fKind")}),(0,o.jsx)(me,{id:"cn-kind",label:e("connectors.fKind"),value:r.kind,options:$,onChange:a=>b({kind:a})})]}),r.kind==="workflow"?(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-wf",children:[(0,o.jsx)(M,{children:e("connectors.fWf")}),(0,o.jsx)("input",{id:"cn-wf",value:r.workflowId,onChange:a=>b({workflowId:a.currentTarget.value}),placeholder:"workflowId"})]}):null,(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fMode")}),(0,o.jsx)(me,{id:"cn-mode",label:e("connectors.fMode"),value:r.mode,options:he,onChange:a=>b({mode:a})})]}),r.mode==="fixed"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsx)(M,{children:e("connectors.fFixedChat")}),(0,o.jsxs)("div",{className:"connector-chat-control",children:[r.manualChat?(0,o.jsx)("input",{id:"cn-chat",value:r.manualChatId,onChange:a=>b({manualChatId:a.currentTarget.value}),placeholder:e("connectors.fChatManualPh")}):(0,o.jsx)(xe,{id:"cn-chat-sel",label:e("connectors.fFixedChat"),groups:B,value:r.chatId,placeholder:e("connectors.groupPickerPlaceholder"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>b({chatId:a})}),(0,o.jsx)("button",{type:"button",className:"ghost connector-inline-link",onClick:()=>b({manualChat:!r.manualChat}),children:r.manualChat?e("connectors.chatListLink"):e("connectors.chatManualLink")})]})]}):r.mode==="dynamic"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide",children:[(0,o.jsxs)(M,{help:e("connectors.allowHint"),children:[e("connectors.fAllow"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)(xe,{id:"cn-allow-chats",label:e("connectors.fAllow"),groups:B,value:r.allowChats,multiple:!0,allLabel:e("connectors.allowAll"),placeholder:e("connectors.allowAllHint"),searchPlaceholder:e("connectors.groupSearchPlaceholder"),emptyLabel:e("connectors.groupNoMatches"),selectedCountLabel:a=>e("connectors.groupSelectedCount",{count:a}),onChange:a=>b({allowChats:a})})]}):null,r.mode==="dynamic"?(0,o.jsx)("div",{className:"cn-field-wide",children:(0,o.jsx)("div",{className:"muted connector-form-hint",dangerouslySetInnerHTML:{__html:e("connectors.dynamicHint")}})}):null,r.mode==="new-group"?(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-new-group-config",children:[(0,o.jsx)(M,{children:e("connectors.newGroupStrategy")}),(0,o.jsxs)("div",{className:"connector-strategy-options",role:"radiogroup","aria-label":e("connectors.newGroupStrategy"),children:[(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":!r.deduplicate,className:`connector-strategy-option${r.deduplicate?"":" selected"}`,onClick:()=>b({deduplicate:!1}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupFresh")}),(0,o.jsx)("small",{children:e("connectors.newGroupFreshHint")})]})]}),(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.deduplicate,className:`connector-strategy-option${r.deduplicate?" selected":""}`,onClick:()=>b({deduplicate:!0}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e("connectors.newGroupReuse")}),(0,o.jsx)("small",{children:e("connectors.newGroupReuseHint")})]})]})]}),r.deduplicate?(0,o.jsxs)("label",{className:"connector-dedup-field",htmlFor:"cn-dedup",children:[(0,o.jsx)(M,{help:(0,o.jsx)("span",{dangerouslySetInnerHTML:{__html:e("connectors.dedupHint")}}),children:e("connectors.fDedup")}),(0,o.jsx)("input",{id:"cn-dedup",value:r.dedup,onChange:a=>b({dedup:a.currentTarget.value}),placeholder:e("connectors.fDedupPh")})]}):null,(0,o.jsx)("p",{className:"connector-new-group-note",children:e("connectors.newGroupNotice")})]}):null,(0,o.jsxs)("label",{className:"cn-field cn-field-wide",htmlFor:"cn-instruction",children:[(0,o.jsxs)(M,{help:e("connectors.fInstructionPh"),children:[e("connectors.fInstruction"),(0,o.jsx)("span",{className:"muted cn-optional",children:e("connectors.optional")})]}),(0,o.jsx)("textarea",{id:"cn-instruction",rows:3,value:r.instruction,onChange:a=>b({instruction:a.currentTarget.value}),placeholder:e("connectors.fInstructionPh")})]}),(0,o.jsxs)("div",{className:"cn-field cn-field-wide connector-topic-message-config",children:[(0,o.jsx)(M,{help:e("connectors.topicMessageHint"),children:e("connectors.topicMessage")}),(0,o.jsx)("div",{className:"connector-topic-message-options",role:"radiogroup","aria-label":e("connectors.topicMessage"),children:["default","custom","none"].map(a=>(0,o.jsxs)("button",{type:"button",role:"radio","aria-checked":r.topicMessageMode===a,className:`connector-topic-message-option${r.topicMessageMode===a?" selected":""}`,onClick:()=>b({topicMessageMode:a}),children:[(0,o.jsx)("span",{className:"connector-strategy-radio","aria-hidden":"true"}),(0,o.jsxs)("span",{children:[(0,o.jsx)("b",{children:e(`connectors.topicMessage${a==="default"?"Default":a==="custom"?"Custom":"None"}`)}),(0,o.jsx)("small",{children:e(`connectors.topicMessage${a==="default"?"DefaultHint":a==="custom"?"CustomHint":"NoneHint"}`)})]})]},a))}),r.topicMessageMode==="custom"?(0,o.jsxs)("label",{className:"connector-topic-message-input",htmlFor:"cn-topic-message",children:[(0,o.jsx)("input",{id:"cn-topic-message",type:"text",maxLength:200,value:r.topicMessageText,onChange:a=>b({topicMessageText:a.currentTarget.value}),placeholder:e("connectors.topicMessageCustomPh")}),(0,o.jsxs)("small",{children:[e("connectors.topicMessageCustomHelp"),(0,o.jsxs)("span",{children:[Array.from(r.topicMessageText).length,"/200"]})]})]}):(0,o.jsx)("p",{className:`connector-topic-message-preview${r.topicMessageMode==="none"?" muted":""}`,children:r.topicMessageMode==="none"?e("connectors.topicMessageNonePreview"):e("connectors.topicMessagePreview",{source:r.name.trim()||e("connectors.topicMessageSourceFallback")})})]}),(0,o.jsxs)("label",{className:"connector-log-policy cn-field-wide",htmlFor:"cn-store-payload",children:[(0,o.jsx)("input",{id:"cn-store-payload",type:"checkbox",checked:r.storePayload,onChange:a=>b({storePayload:a.currentTarget.checked})}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e("connectors.storePayload")}),(0,o.jsx)("small",{children:e("connectors.storePayloadHint")})]})]}),(0,o.jsxs)("label",{className:"connector-log-policy cn-field-wide",htmlFor:"cn-suppress-final",children:[(0,o.jsx)("input",{id:"cn-suppress-final",type:"checkbox",checked:r.suppressFinalOutput,onChange:a=>b({suppressFinalOutput:a.currentTarget.checked})}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e("connectors.suppressFinalOutput")}),(0,o.jsx)("small",{children:e("connectors.suppressFinalOutputHint")})]})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fVerify")}),(0,o.jsx)(me,{id:"cn-verify",label:e("connectors.fVerify"),value:r.verify,options:fe,onChange:a=>b({verify:a})})]}),(0,o.jsxs)("label",{className:"cn-field",htmlFor:"cn-secret",children:[(0,o.jsx)(M,{children:e("connectors.fSecret")}),(0,o.jsx)("input",{id:"cn-secret",value:r.secret,onChange:a=>b({secret:a.currentTarget.value}),placeholder:e(P?"connectors.fSecretEditPh":"connectors.fSecretPh")})]})]}),_?(0,o.jsx)("p",{className:`connector-create-message${_.error?" err":""}`,children:_.text}):null]})}),(0,o.jsxs)("footer",{className:"connector-modal-actions",children:[(0,o.jsx)("button",{type:"button",disabled:J,onClick:S,children:e("connectors.cancel")}),U?(0,o.jsx)("button",{type:"button",className:"primary",onClick:S,children:e("connectors.close")}):(0,o.jsx)("button",{id:"cn-create",type:"button",className:"primary",disabled:J,onClick:()=>{ne()},children:e(P?"connectors.btnSave":"connectors.btnCreate")})]})]})}),(0,o.jsx)("section",{className:"overview-block connector-section connector-list-section",children:(0,o.jsx)("div",{className:"card connector-list-card",children:O?(0,o.jsx)(le,{className:"connector-list-loading",label:e("connectors.loading"),compact:!0}):(0,o.jsx)(Je,{connectors:D,bots:L,copiedId:u,editMsg:Z,groupName:j,modeLabel:z,kindLabel:oe,onCopy:Re,onEdit:te,onToggle:a=>{ae(a)},onTogglePayloadLogging:a=>{ye(a)},onDelete:a=>{Fe(a)}})})})]}):(0,o.jsx)(Me,{embedded:!0})]})}function Ue(t){let e=W(),s=t.created,g=s.isDynamic?`${s.url}?chatId=${s.exampleChat}`:s.url,w=s.exampleChat!=="<chatId>"?`\uFF08${t.groupName(s.exampleChat)}\uFF09`:"";return(0,o.jsx)("div",{className:"connector-created-wrap",children:(0,o.jsxs)("div",{className:"card connector-created-card",children:[(0,o.jsxs)("p",{className:"connector-created-title ok",children:[e("connectors.createdPrefix",{name:s.name}),s.mode==="fixed"&&s.chatId?(0,o.jsxs)("span",{className:"muted",children:[" \xB7 ",e("connectors.createdDest",{name:t.groupName(s.chatId)})]}):null]}),(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsx)("code",{children:s.url})]}),s.secret?(0,o.jsxs)("p",{className:"connector-created-line",children:[(0,o.jsxs)("span",{className:"muted",children:[s.isToken?e("connectors.tokenLabel"):e("connectors.signLabel"),e("connectors.secretOnce")]}),(0,o.jsx)("code",{children:s.secret})]}):null,s.isToken&&s.isDynamic?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageDynamicLede",{gn:w})}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageDynamicNote")}})]}):s.isToken?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("p",{className:"muted connector-created-help",children:e("connectors.usageTokenLede")}),(0,o.jsx)("pre",{children:(0,o.jsx)("code",{children:`curl -X POST '${g}' -H 'content-type: application/json' -d '{}'`})}),(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageTokenNote")}})]}):(0,o.jsx)("p",{className:"muted connector-created-help",dangerouslySetInnerHTML:{__html:e("connectors.usageHmac")+(s.isDynamic?e("connectors.usageHmacDynamic"):"")}})]})})}function Je(t){let e=W();return t.connectors.length?(0,o.jsx)(o.Fragment,{children:t.connectors.map(s=>{let g=t.bots.find(N=>N.larkAppId===s.target.botId),w=Ne(s.id),L=(s.verify?.type??"token")==="token",f=e(L?"connectors.badgeToken":"connectors.badgeSign"),I=s.target.mode==="fixed"&&s.target.chatId?e("connectors.dest",{name:t.groupName(s.target.chatId)}):"",y=t.editMsg?.id===s.id?t.editMsg:null,D=t.copiedId===s.id;return(0,o.jsxs)("div",{className:"card connector-item-card",children:[(0,o.jsxs)("div",{className:"connector-item-head",children:[(0,o.jsxs)("div",{className:"connector-item-main",children:[(0,o.jsxs)("div",{className:"connector-item-title",children:[(0,o.jsx)("b",{children:s.name}),(0,o.jsx)("span",{className:s.enabled?"connector-status-pill ok":"connector-status-pill muted",children:s.enabled?e("connectors.enabled"):e("connectors.disabled")})]}),(0,o.jsxs)("div",{className:"connector-item-meta",children:[(0,o.jsx)("span",{children:g?.botName||s.target.botId}),(0,o.jsx)("span",{children:t.kindLabel(s.target.kind)}),(0,o.jsx)("span",{children:t.modeLabel(s.target.mode)}),I?(0,o.jsx)("span",{children:I}):null,(0,o.jsx)("span",{children:f}),(0,o.jsx)("span",{children:s.loggingPolicy?.storePayload!==!1?e("connectors.payloadLogged",{days:s.loggingPolicy?.retentionDays??14}):e("connectors.metadataOnly")})]})]}),(0,o.jsx)("button",{className:`ghost connector-copy-button${D?" copied":""}`,type:"button",onClick:()=>t.onCopy(s),children:e(D?"connectors.copied":"connectors.copy")})]}),(0,o.jsxs)("div",{className:"connector-url-row",children:[(0,o.jsx)("span",{className:"muted",children:e("connectors.webhookUrl")}),(0,o.jsxs)("code",{children:[w,L?"/<token>":""]})]}),L?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.tokenHint")}}):null,s.target.kind==="workflow"?(0,o.jsx)("div",{className:"muted connector-item-note",children:e("connectors.legacyWorkflowNote")}):null,s.target.mode==="dynamic"?(0,o.jsx)("div",{className:"muted connector-item-note",dangerouslySetInnerHTML:{__html:e("connectors.dynamicReqHint")}}):null,s.promptEnvelope?.instruction?(0,o.jsxs)("div",{className:"muted connector-item-note",children:[e("connectors.instructionPrefix"),s.promptEnvelope.instruction]}):null,(0,o.jsx)("div",{className:"muted connector-item-note",children:s.topicMessage?.mode==="none"?e("connectors.topicMessageListNone"):s.topicMessage?.mode==="custom"?e("connectors.topicMessageListCustom",{text:s.topicMessage.text||""}):e("connectors.topicMessageListDefault")}),y?(0,o.jsx)("div",{className:y.error?"err connector-item-note":"muted connector-item-note",children:y.text}):null,(0,o.jsxs)("div",{className:"connector-item-actions",children:[(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onEdit(s),children:e("connectors.btnEdit")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onTogglePayloadLogging(s),children:s.loggingPolicy?.storePayload!==!1?e("connectors.btnDisablePayloadLog"):e("connectors.btnEnablePayloadLog")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onToggle(s),children:s.enabled?e("connectors.btnDisable"):e("connectors.btnEnable")}),(0,o.jsx)("button",{className:"ghost",type:"button",onClick:()=>t.onDelete(s),children:e("connectors.btnDel")})]})]},s.id)})}):(0,o.jsx)("p",{className:"muted connector-list-empty",children:e("connectors.empty")})}function so(t){return se(t,(0,o.jsx)(Se,{tab:"webhooks"}))}function ro(t){return se(t,(0,o.jsx)(Se,{tab:"logs"}))}export{ao as buildConnectorInstructionUpdateBody,Ge as buildConnectorKindOptions,ro as renderConnectorsLogsPage,so as renderConnectorsPage,Be as replaceConnectorById};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{a as he,b as ve,c as be,d as ye}from"./chunk-R3FXBFQH.js";import{a as fe}from"./chunk-ZJVTGU5X.js";import{c as me}from"./chunk-ZU3UUKAR.js";import{c as Z,g as X,h as le,m as ce,n as ue,o as de,p as pe,q as ge}from"./chunk-5CJMHTT4.js";import{c as j,d as J,u as z,x as ae,z as ne}from"./chunk-MFQPCVHY.js";import{a as se}from"./chunk-SYC6D5XU.js";import{a as $e,d as ie}from"./chunk-5THX4DI2.js";import{c as K}from"./chunk-7SZRL6FY.js";var i=K($e(),1);var Me=/^[A-Za-z0-9._-]{1,64}$/,ke=6,we=30;function Y(o,t){return be(o,t)}function Pe(o,t,r=we){let n=Number.isFinite(r)?Math.max(1,Math.floor(r)):we,a=o.length,c=Math.max(1,Math.ceil(a/n)),s=Number.isFinite(t)?Math.floor(t):1,d=Math.min(c,Math.max(1,s)),f=(d-1)*n,I=Math.min(a,f+n);return{rows:o.slice(f,I),page:d,totalPages:c,from:a===0?0:f+1,to:I,total:a}}async function Ce(o,t,r){if(o.length===0)return[];let n=new Array(o.length),a=0,c=Math.min(Math.max(1,t),o.length);return await Promise.all(Array.from({length:c},async()=>{for(;a<o.length;){let s=a++;n[s]=await r(o[s])}})),n}function Q(o){return Me.test(o)&&o!=="."&&o!==".."}function ee(o){let t=String(o??"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return Q(t)?t:"profile"}async function V(){let t=await(await fetch("/api/role-profiles")).json().catch(()=>({}));return Array.isArray(t.profiles)?t.profiles:[]}async function Ie(o){let t=await V(),r=await Ce(t,ke,async s=>{try{let f=await(await fetch(`/api/role-profiles/${encodeURIComponent(s.profileId)}`)).json().catch(()=>({}));return[s.profileId,Array.isArray(f.entries)?f.entries:[]]}catch{return[s.profileId,[]]}}),n=new Set,a=[];for(let s of o.chats??[])for(let d of s.memberBots??[]){if(!d?.inChat||!d?.hasRole||!d?.larkAppId)continue;let f=Y(d.larkAppId,s.chatId);n.has(f)||(n.add(f),a.push({chatId:s.chatId,larkAppId:d.larkAppId}))}let c=await ye(a);return{profiles:t,entriesById:new Map(r),groupRoleContentByBot:c,loaded:!0}}async function Se(o){let t=(o.memberBots??[]).filter(r=>r?.inChat&&r?.larkAppId);return Ce(t,ke,async r=>{try{let a=await(await fetch(`/api/roles/${encodeURIComponent(r.larkAppId)}/${encodeURIComponent(o.chatId)}`)).json().catch(()=>({})),c=a?.hasEffectiveRole??a?.hasRole,s="effectiveContent"in a?a.effectiveContent:a.content,d=c?String(s??"").trim():"",f=a?.effectiveSource==="chat"||a?.effectiveSource==="team"?a.effectiveSource:null;return{larkAppId:r.larkAppId,botName:r.botName,content:d,status:d?f??"chat":"empty"}}catch{return{larkAppId:r.larkAppId,botName:r.botName,content:"",status:"error"}}})}function Ne(o,t){return o.filter(r=>!t||!t.has(r.larkAppId))}function Re(o,t){let r=t.q.trim().toLowerCase();return o.filter(n=>!r||(n.name??"").toLowerCase().includes(r)||n.chatId.toLowerCase().includes(r)||(n.ownerId??"").toLowerCase().includes(r)).filter(n=>!t.missingOnly||(n.memberBots??[]).some(a=>!a.inChat))}function xe(o,t){if(t.size===0)return!0;let r=o?.memberBots??[];for(let n of t)if(!r.some(a=>a.larkAppId===n&&a.inChat))return!1;return!0}function Ae(o){let t=Array.isArray(o)?o:[],r=t.filter(n=>!!n?.ok).length;return{rows:t,okCount:r,failed:t.length-r}}function Ge(o,t,r){let n=String(o??"").trim();if(!n)return null;if(r)return{kind:"warn",text:z("groups.roleProfileBootstrapFailed",{name:n,reason:String(r)})};let a=typeof t=="string"&&t.trim()?t.trim():"";return a?{kind:"ok",text:z("groups.roleProfileBootstrapSent",{name:n,messageId:a})}:{kind:"ok",text:z("groups.roleProfileBootstrapDone",{name:n})}}function Be(o,t,r,n,a){let c=new Set(n);a&&c.add(a);let s={chatId:t,name:r,ownerId:a??null,memberBots:o.bots.map(d=>({larkAppId:d.larkAppId,botName:d.botName,inChat:c.has(d.larkAppId),oncallChat:null}))};return{bots:o.bots,chats:[s,...o.chats.filter(d=>d.chatId!==t)]}}var e=K(ie(),1);function Te(){return{profiles:[],entriesById:new Map,groupRoleContentByBot:new Map,loaded:!1}}function Oe(o){let t={};for(let r of ae(o).split(";")){if(!r)continue;let n=r.indexOf(":");n<=0||(t[r.slice(0,n)]=r.slice(n+1))}return t}function De(o){let t=o.chat,r=t.avatar??ne(t.chatId),[n,a]=(0,i.useState)(!1);(0,i.useEffect)(()=>{a(!1)},[r]);let c=t.name??t.chatId,s=!!r&&!n;return(0,e.jsx)("span",{className:`orb-avatar orb-square orb-avatar-sm${s?" orb-has-img":""}`,style:Oe(c),"aria-hidden":"true",children:s?(0,e.jsx)("img",{className:"orb-img",src:r,alt:"",decoding:"async",referrerPolicy:"no-referrer",onError:()=>a(!0)}):null})}function te(o){return(0,e.jsxs)("p",{className:"hint-warn",children:[(0,e.jsx)("strong",{children:o.title}),(0,e.jsx)("br",{}),(0,e.jsx)("small",{children:String(o.reason??"unknown")})]})}function Ee(o){return(0,e.jsx)(e.Fragment,{children:Ne(o.bots,o.excludeIds).map(t=>(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox",name:"bot",value:t.larkAppId}),(0,e.jsxs)("span",{className:"checkbox-row-main",children:[(0,e.jsx)("strong",{children:t.botName??t.larkAppId}),(0,e.jsxs)("small",{children:["(",t.larkAppId,")"]})]})]},t.larkAppId))})}function Fe(o){let t=o.summary;return t.rows.length?(0,e.jsxs)("div",{className:t.failed?"hint-warn":"hint-ok",children:[(0,e.jsxs)("strong",{children:["\u6DFB\u52A0\u7ED3\u679C\uFF1A\u6210\u529F ",t.okCount,"/",t.rows.length,t.failed?`\uFF0C\u5931\u8D25 ${t.failed}`:""]}),(0,e.jsx)("ul",{children:t.rows.map((r,n)=>{let a=String(r?.id??"?");return(0,e.jsxs)("li",{children:[(0,e.jsx)("code",{children:a}),": ",r?.ok?"OK":`failed (${String(r?.error??"unknown")})`]},`${a}-${n}`)})})]}):(0,e.jsx)("p",{className:"hint-warn",children:"\u6CA1\u6709\u8FD4\u56DE\u6DFB\u52A0\u7ED3\u679C\u3002"})}function je(o){let{chat:t,context:r,tr:n}=o;if(!r.profiles.length||!r.loaded)return null;let a=new Map;for(let f of t.memberBots??[])f?.inChat&&a.set(f.larkAppId,r.groupRoleContentByBot.get(Y(f.larkAppId,t.chatId))??null);if(!he(a))return null;let s=ve(t.memberBots??[],r.profiles,r.entriesById,a)[0];if(!s)return(0,e.jsx)("div",{className:"g-profile-status muted",children:n("groups.profileStatusUnmatched")});let d=s.kind==="full"?"groups.profileStatusFullChat":"groups.profileStatusPartial";return(0,e.jsx)("div",{className:`g-profile-status ${s.kind}`,children:n(d,{name:s.profileId,matched:s.matched,total:s.total,chat:s.chatMatched})})}function Ue(o){return o?o.error?"error":o.inChat?"in":"out":"unknown"}function He(o,t){switch(o){case"in":return t("groups.botStatusIn");case"out":return t("groups.botStatusOut");case"error":return t("groups.botStatusError");default:return t("groups.botStatusUnknown")}}function _e(o){let t=new Map((o.chat.memberBots??[]).map(r=>[r.larkAppId,r]));return(0,e.jsx)("div",{className:"groups-bot-strip","aria-label":o.tr("groups.botCoverage"),children:o.bots.map(r=>{let n=t.get(r.larkAppId),a=Ue(n),c=He(a,o.tr),s=r.botName??r.larkAppId;return(0,e.jsxs)("span",{className:`groups-bot-pill groups-bot-${a}`,title:`${s}: ${c}${n?.error?` (${String(n.error)})`:""}`,children:[(0,e.jsx)("i",{"aria-hidden":"true"}),(0,e.jsx)("span",{className:"groups-bot-name",children:s}),(0,e.jsx)("span",{className:"groups-bot-state",children:c})]},r.larkAppId)})})}var We=(0,i.memo)(function(t){let{chat:r,tr:n}=t,c=(r.memberBots??[]).filter(s=>s.inChat).length;return(0,e.jsxs)(ue,{kind:"group",className:"groups-list-row","data-chat":r.chatId,children:[(0,e.jsx)(De,{chat:r}),(0,e.jsxs)(de,{children:[(0,e.jsxs)("div",{className:"groups-row-head",children:[(0,e.jsx)("b",{children:r.name??r.chatId}),(0,e.jsxs)("span",{className:"groups-row-meta",children:[(0,e.jsx)("span",{className:"groups-row-tag",children:(0,e.jsx)("code",{children:r.chatId})}),r.ownerId?(0,e.jsxs)("span",{className:"groups-row-tag groups-row-owner-tag",children:[(0,e.jsx)("span",{children:n("groups.owner")}),(0,e.jsx)("code",{children:r.ownerId})]}):null]})]}),(0,e.jsx)(je,{chat:r,context:t.roleContext,tr:n})]}),(0,e.jsx)("span",{className:"groups-row-count",children:n("groups.memberSummary",{count:c,total:t.bots.length})}),(0,e.jsxs)("div",{className:"groups-row-lower",children:[(0,e.jsx)(_e,{chat:r,bots:t.bots,tr:n}),(0,e.jsxs)(pe,{children:[(0,e.jsx)(X,{className:"add-bots",onClick:()=>t.onAddBots(r),children:n("groups.addBots")}),(0,e.jsx)("button",{className:"save-profile",type:"button",onClick:()=>t.onSaveProfile(r),children:n("groups.saveAsProfile")}),(0,e.jsx)("button",{className:"manage-chat",type:"button",onClick:()=>t.onManage(r),children:n("groups.manage")})]})]})]})});function Je(o){let{tr:t}=o,[r,n]=(0,i.useState)(!1),[a,c]=(0,i.useState)(null),[s,d]=(0,i.useState)(null),[f,I]=(0,i.useState)(!1),[p,h]=(0,i.useState)("");async function w(u){u.preventDefault();let v=new FormData(u.currentTarget),g=String(v.get("name")??"").trim(),y=String(v.get("bindWorkingDir")??"").trim(),C=String(v.get("roleProfileId")??"").trim(),x=v.getAll("bot");if(x.length===0){c({title:"\u8BF7\u9009\u62E9 bot",reason:"\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u521B\u5EFA\u7FA4\u804A\u3002"});return}n(!0),c(null);try{let P=await fetch("/api/groups/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:g||void 0,larkAppIds:x,bindWorkingDir:y||void 0,roleProfileId:C||void 0})}),S=await P.json().catch(()=>({ok:!1,error:`HTTP ${P.status}`}));S.ok&&S.chatId?(d(S),o.onCreated(S,x,g)):(c({title:"\u521B\u5EFA\u5931\u8D25",reason:S.error??`HTTP ${P.status}`}),n(!1))}catch(P){c({title:"\u7F51\u7EDC\u9519\u8BEF",reason:P}),n(!1)}}if(s){let u=String(s.chatId),v=typeof s.shareLink=="string"&&s.shareLink?s.shareLink:`https://applink.feishu.cn/client/chat/open?openChatId=${encodeURIComponent(u)}`,g=s.invalidBotIds??[],y=s.invalidUserIds??[],C=Array.isArray(s.oncallBindings)?s.oncallBindings:[],x=C.filter(R=>R?.ok).length,P=C.filter(R=>!R?.ok),S=Ge(typeof s.roleProfileId=="string"?s.roleProfileId:"",s.roleProfileBootstrapMessageId,s.roleProfileBootstrapError);return(0,e.jsxs)("article",{className:"g-create-dialog g-create-success",children:[(0,e.jsx)("header",{children:(0,e.jsx)("h3",{children:t("groups.successTitle")})}),(0,e.jsxs)("p",{children:[(0,e.jsx)("b",{children:"chatId:"})," ",(0,e.jsx)("code",{children:u})," ",(0,e.jsx)("button",{type:"button","data-copy":u,onClick:()=>{fe(u,t("sessions.copy")).then(R=>{R&&(I(!0),o.setTimer(()=>I(!1),800))})},children:t(f?"sessions.copied":"sessions.copy")})]}),(0,e.jsxs)("p",{children:[(0,e.jsx)("b",{children:"\u521B\u5EFA\u8005:"})," ",(0,e.jsx)("code",{children:String(s.creator??"?")})]}),(0,e.jsx)(ze,{resp:s}),C.length>0?P.length===0?(0,e.jsxs)("p",{className:"hint-ok",children:["\u5DF2\u7ED1\u5B9A\u76EE\u5F55\uFF1A",(0,e.jsx)("code",{children:String(s.bindResolvedPath??"")}),"\uFF08",x,"/",C.length," bots\uFF09"]}):(0,e.jsxs)("p",{className:"hint-warn",children:["\u76EE\u5F55\u7ED1\u5B9A\u90E8\u5206\u5931\u8D25\uFF1A\u6210\u529F ",x,"/",C.length,"\u3002",P.map((R,A)=>(0,e.jsxs)("span",{children:[(0,e.jsx)("br",{}),(0,e.jsx)("code",{children:String(R?.larkAppId??"?")}),": ",String(R?.error??"unknown")]},`${R?.larkAppId??"?"}-${A}`))]}):null,S?(0,e.jsx)("p",{className:S.kind==="ok"?"hint-ok":"hint-warn",children:S.text}):null,g.length||y.length?(0,e.jsxs)("ul",{children:[g.length?(0,e.jsxs)("li",{children:["\u65E0\u6548 bot id: ",(0,e.jsx)("code",{children:g.join(", ")})]}):null,y.length?(0,e.jsxs)("li",{children:["\u65E0\u6548\u7528\u6237 open_id: ",(0,e.jsx)("code",{children:y.join(", ")})]}):null]}):null,(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-create-close",onClick:o.onClose,children:t("sessions.dismiss")}),(0,e.jsx)("a",{className:"btn-link primary",href:v,target:"_blank",rel:"noopener",children:t("groups.openGroup")})]})]})}return(0,e.jsxs)("article",{className:"g-create-dialog",children:[(0,e.jsxs)("header",{className:"g-create-head",children:[(0,e.jsx)("h3",{children:t("groups.createTitle")}),(0,e.jsx)("p",{children:t("groups.createHelp")})]}),(0,e.jsxs)("form",{id:"g-createform",className:"g-create-form",onSubmit:u=>{w(u)},children:[(0,e.jsxs)("fieldset",{className:"g-modal-field g-create-bots",children:[(0,e.jsx)("legend",{children:t("groups.botPicker")}),(0,e.jsx)("div",{className:"g-bot-picker",children:(0,e.jsx)(Ee,{bots:o.bots})})]}),(0,e.jsxs)("div",{className:"g-create-fields",children:[(0,e.jsxs)("fieldset",{className:"g-modal-field",children:[(0,e.jsx)("legend",{children:t("groups.name")}),(0,e.jsx)("input",{type:"text",name:"name",placeholder:t("groups.namePlaceholder"),maxLength:60})]}),(0,e.jsxs)("fieldset",{className:"g-modal-field",children:[(0,e.jsx)("legend",{children:t("groups.bindDir")}),(0,e.jsx)("input",{type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/botmux"}),(0,e.jsx)("small",{children:t("groups.bindDirHelp")})]}),(0,e.jsxs)("fieldset",{className:"g-modal-field g-profile-field",children:[(0,e.jsx)("legend",{children:t("groups.roleProfile")}),(0,e.jsx)("input",{type:"hidden",name:"roleProfileId",value:p}),(0,e.jsx)(ge,{className:"g-profile-menu",ariaLabel:t("groups.roleProfile"),label:p||t("groups.roleProfileNone"),value:p,options:[{value:"",label:t("groups.roleProfileNone")},...o.roleProfiles.map(u=>({value:u.profileId,label:u.profileId}))],onChange:h}),(0,e.jsx)("small",{children:t("groups.roleProfileHelp")})]})]}),(0,e.jsx)("div",{className:"g-create-status","data-create-status":!0,"aria-live":"polite",children:a?(0,e.jsx)(te,{...a}):null}),(0,e.jsxs)("div",{className:"actions g-create-actions",children:[(0,e.jsx)("button",{type:"button",id:"g-create-cancel",onClick:o.onClose,children:t("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:r,children:r?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("i",{className:"button-spinner","aria-hidden":"true"}),t("groups.createSubmitting")]}):t("groups.createSubmit")})]})]})]})}function ze(o){let t=o.resp,r=t.autoInvitedOpenId,n=!!t.autoInviteRejected,a=t.ownerTransferredTo,c=t.transferError,s=t.notifyMessageId,d=t.notifyError;return r?(0,e.jsxs)("p",{className:"hint-ok",children:["\u5DF2\u81EA\u52A8\u9080\u8BF7\u4F60\uFF08",(0,e.jsx)("code",{children:r}),"\uFF09\u4F5C\u4E3A\u6210\u5458\u3002",a?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsx)("small",{children:"\u7FA4\u4E3B\u5DF2\u4ECE\u673A\u5668\u4EBA\u8F6C\u8BA9\u7ED9\u4F60\u3002"})]}):null,c?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{className:"hint-warn-inline",children:["\u26A0 \u81EA\u52A8\u8F6C\u8BA9\u7FA4\u4E3B\u5931\u8D25\uFF08",c,"\uFF09\uFF0C\u4F60\u73B0\u5728\u662F\u6210\u5458\u4F46\u7FA4\u4E3B\u4ECD\u662F\u673A\u5668\u4EBA\u3002"]})]}):null,s?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{children:["\u673A\u5668\u4EBA\u5DF2\u5728\u7FA4\u91CC @ \u4E86\u4F60\uFF08\u6D88\u606F id ",(0,e.jsx)("code",{children:s}),"\uFF09\uFF0C\u770B\u98DE\u4E66\u901A\u77E5\u5C31\u80FD\u8FDB\u7FA4\u3002"]})]}):null,d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("br",{}),(0,e.jsxs)("small",{className:"hint-warn-inline",children:["\u26A0 \u81EA\u52A8 @ \u901A\u77E5\u5931\u8D25\uFF08",d,"\uFF09\uFF0C\u65B0\u7FA4\u53EF\u80FD\u4E0D\u4F1A\u4E3B\u52A8\u51FA\u73B0\u5728\u4F60\u4FA7\u8FB9\u680F\uFF0C\u5EFA\u8BAE\u4ECE\u4E0B\u9762\u6309\u94AE\u8DF3\u8FDB\u53BB\u3002"]})]}):null]}):n?(0,e.jsxs)("p",{className:"hint-warn",children:["\u98DE\u4E66\u62D2\u7EDD\u4E86\u81EA\u52A8\u9080\u8BF7\uFF08\u4F60\u7684 open_id \u5728\u521B\u5EFA\u8005 bot \u7684 scope \u4E0B\u4E0D\u53EF\u7528\uFF09\u3002",(0,e.jsx)("strong",{children:"\u4F60\u76EE\u524D\u4E0D\u662F\u65B0\u7FA4\u6210\u5458"}),"\uFF0C\u9700\u8981\u8BA9\u7FA4\u91CC\u7684\u67D0\u4E2A\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u6765\u3002"]}):(0,e.jsxs)("p",{className:"hint-warn",children:["\u6CA1\u5728 dashboard \u7F13\u5B58\u91CC\u627E\u5230 ownerOpenId\uFF0C",(0,e.jsx)("strong",{children:"\u6CA1\u6709\u81EA\u52A8\u9080\u8BF7\u4F60"}),"\u3002\u70B9\u5F00\u4E0B\u9762\u94FE\u63A5\u524D\uFF0C\u5148\u8BA9\u7FA4\u91CC\u4EFB\u4E00\u673A\u5668\u4EBA\u624B\u52A8\u628A\u4F60\u52A0\u8FDB\u53BB\u3002"]})}function Ve(o){let{chat:t,tr:r}=o,[n,a]=(0,i.useState)(!1),[c,s]=(0,i.useState)(null),[d,f]=(0,i.useState)(null),I=(0,i.useMemo)(()=>new Set((t.memberBots??[]).filter(h=>h.inChat).map(h=>h.larkAppId)),[t]);async function p(h){h.preventDefault();let u=new FormData(h.currentTarget).getAll("bot");if(u.length===0){s({title:"\u8BF7\u9009\u62E9 bot",reason:"\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u6DFB\u52A0\u3002"}),f(null);return}a(!0),s(null),f(null);try{let g=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/add-bots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:u})})).json();if(g.error==="no_proxy_bot")s({title:"\u65E0\u6CD5\u6DFB\u52A0 bot",reason:"\u5F53\u524D\u7FA4\u91CC\u6CA1\u6709\u53EF\u4EE3\u7406\u64CD\u4F5C\u7684 bot\u3002\u8BF7\u5148\u5728\u98DE\u4E66\u91CC\u624B\u52A8\u62C9\u5165\u4E00\u4E2A bot\uFF0C\u7136\u540E\u91CD\u8BD5\u3002"});else if(g.result){let y=Ae(g.result);try{await o.onReloadGroups({force:!0}),f({result:y})}catch(C){f({result:y,refreshError:`\u6DFB\u52A0\u7ED3\u679C\u5DF2\u8FD4\u56DE\uFF0C\u4F46\u5237\u65B0\u7FA4\u7EC4\u5217\u8868\u5931\u8D25\uFF1A${C}`})}}else s({title:"\u54CD\u5E94\u5F02\u5E38",reason:JSON.stringify(g)})}catch(v){s({title:"\u7F51\u7EDC\u9519\u8BEF",reason:v})}finally{a(!1)}}return(0,e.jsxs)("article",{className:"g-add-bots-dialog",children:[(0,e.jsx)("header",{children:(0,e.jsxs)("h3",{children:[r("groups.addBots")," \xB7 ",t.name??t.chatId]})}),(0,e.jsx)("p",{children:r("groups.createHelp")}),(0,e.jsxs)("form",{id:"g-addform",onSubmit:h=>{p(h)},children:[(0,e.jsx)(Ee,{bots:o.bots,excludeIds:I}),(0,e.jsxs)("div",{"data-add-status":!0,"aria-live":"polite",children:[c?(0,e.jsx)(te,{...c}):null,d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(Fe,{summary:d.result}),d.refreshError?(0,e.jsx)(te,{title:"\u5237\u65B0\u5931\u8D25",reason:d.refreshError}):null]}):null]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-cancel",onClick:o.onClose,children:r("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:n,children:n?"Adding...":r("groups.addBots")})]})]})]})}function qe(o){let{tr:t}=o,[r,n]=(0,i.useState)([]),[a,c]=(0,i.useState)([]),[s,d]=(0,i.useState)(!0),[f,I]=(0,i.useState)(null),p=(0,i.useMemo)(()=>[...a].sort((m,T)=>m.profileId.localeCompare(T.profileId)),[a]),h=p.length>0,w=r.filter(m=>m.status==="empty").length,u=r.filter(m=>m.status==="error").length,v=!s&&!f&&r.length>0&&u===0,[g,y]=(0,i.useState)("new"),[C,x]=(0,i.useState)(o.suggestedProfileId),[P,S]=(0,i.useState)(""),[R,A]=(0,i.useState)(!1),[_,G]=(0,i.useState)(null),B=g==="overwrite"?P:C.trim(),D=t(g==="overwrite"?"groups.saveProfileOverwriteSubmit":"groups.saveProfileSubmit"),q=f||(s?t("groups.saveProfilePreparing"):u?t("groups.saveProfileFailedLoadSummary",{count:u}):r.length?w?t("groups.saveProfileEntrySummaryWithEmpty",{count:r.length,emptyCount:w}):t("groups.saveProfileEntrySummary",{count:r.length}):t("groups.saveProfileNoRoles"));(0,i.useEffect)(()=>{let m=!0;return d(!0),I(null),G(null),(async()=>{try{let[T,L]=await Promise.all([Se(o.chat),V().catch(()=>[])]);if(!m)return;let M=[...L].sort((O,U)=>O.profileId.localeCompare(U.profileId));n(T),c(L),S(O=>M.some(U=>U.profileId===O)?O:M[0]?.profileId??"")}catch(T){if(!m)return;n([]),c([]),S(""),I(T instanceof Error?T.message:String(T))}finally{m&&d(!1)}})(),()=>{m=!1}},[o.chat]);async function $(m){if(m.preventDefault(),!!v){if(!Q(B)){G({text:t("groups.saveProfileInvalid"),className:"error"});return}A(!0),G({text:t("groups.saveProfileSaving")});try{let L=(await Promise.all(r.map(async M=>(await fetch(`/api/role-profiles/${encodeURIComponent(B)}/${encodeURIComponent(M.larkAppId)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:M.content,allowEmpty:!0})})).ok))).filter(Boolean).length;if(L!==r.length){G({text:t("groups.saveProfileFailed",{saved:L,total:r.length}),className:"error"}),A(!1);return}G({text:t("groups.saveProfileDone",{name:B,count:L}),className:"ok"}),await o.onRefreshRoleContext(),o.setTimer(o.onClose,700)}catch(T){G({text:String(T),className:"error"}),A(!1)}}}function N(m){m==="overwrite"&&!h||(y(m),G(null))}return(0,e.jsxs)("article",{className:"g-save-profile-dialog",children:[(0,e.jsxs)("header",{children:[(0,e.jsx)("h3",{children:t("groups.saveProfileTitle")}),(0,e.jsx)("p",{children:t("groups.saveProfileIntro",{name:o.chat.name??o.chat.chatId,count:s?"-":r.length})})]}),(0,e.jsxs)("form",{id:"g-save-profile-form",onSubmit:m=>{$(m)},children:[(0,e.jsxs)("section",{className:"g-save-profile-panel",children:[(0,e.jsxs)("div",{className:"g-save-profile-section-head",children:[(0,e.jsx)("span",{children:t("groups.saveProfileScope")}),(0,e.jsx)("small",{children:t("groups.saveProfileScopeHelp")})]}),(0,e.jsxs)("div",{className:"g-save-profile-stats",children:[(0,e.jsxs)("span",{children:[t("groups.saveProfileBotCount")," ",(0,e.jsx)("strong",{children:s?"-":r.length})]}),u?(0,e.jsxs)("span",{className:"warn",children:[t("groups.saveProfileLoadFailed")," ",(0,e.jsx)("strong",{children:u})]}):null]}),(0,e.jsx)("div",{className:"g-save-profile-entry-list",children:s?(0,e.jsx)("div",{className:"g-save-profile-loading",children:(0,e.jsx)(Z,{label:t("common.loading")})}):f?(0,e.jsx)("div",{className:"g-save-profile-empty",children:f}):r.length?r.map(m=>(0,e.jsxs)("div",{className:`g-save-profile-entry ${m.status==="error"?"error":""}`,children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:m.botName??m.larkAppId}),(0,e.jsx)("code",{children:m.larkAppId})]}),(0,e.jsx)("span",{className:`g-save-profile-entry-status ${m.status==="error"?"error":"ok"}`,children:t(m.status==="error"?"groups.saveProfileStatus.error":"groups.saveProfileStatus.entry")})]},m.larkAppId)):(0,e.jsx)("div",{className:"g-save-profile-empty",children:t("groups.saveProfileNoRoles")})})]}),(0,e.jsxs)("div",{className:"form-row",children:[(0,e.jsx)("span",{children:t("groups.saveProfileMode")}),(0,e.jsxs)("div",{className:"g-save-profile-switch",role:"tablist","aria-label":t("groups.saveProfileMode"),children:[(0,e.jsx)("button",{type:"button",className:g==="new"?"active":"","data-save-profile-mode":"new","aria-pressed":g==="new",onClick:()=>N("new"),children:t("groups.saveProfileNew")}),(0,e.jsx)("button",{type:"button",className:g==="overwrite"?"active":"","data-save-profile-mode":"overwrite","aria-pressed":g==="overwrite",disabled:!h,onClick:()=>N("overwrite"),children:t("groups.saveProfileOverwrite")})]})]}),(0,e.jsxs)("label",{className:"form-row","data-profile-mode-row":"new",hidden:g!=="new",children:[(0,e.jsx)("span",{children:t("groups.saveProfileIdLabel")}),(0,e.jsx)("input",{type:"text",name:"profileId",value:C,maxLength:64,autoComplete:"off",onChange:m=>{x(m.currentTarget.value),G(null)}}),(0,e.jsx)("small",{children:t("groups.saveProfileInvalid")})]}),(0,e.jsxs)("div",{className:"form-row","data-profile-mode-row":"overwrite",hidden:g!=="overwrite",children:[(0,e.jsx)("span",{children:t("groups.saveProfileExistingLabel")}),h?(0,e.jsx)("div",{className:"g-save-profile-picker",children:p.map(m=>(0,e.jsxs)("button",{type:"button",className:`g-save-profile-pick ${m.profileId===P?"selected":""}`,"data-profile-id":m.profileId,"aria-pressed":m.profileId===P,onClick:()=>{S(m.profileId),y("overwrite"),G(null)},children:[(0,e.jsx)("span",{children:m.profileId}),(0,e.jsx)("small",{children:t("groups.saveProfileExistingMeta",{count:m.entryCount??0})})]},m.profileId))}):(0,e.jsx)("div",{className:"g-save-profile-summary warn",children:t("groups.saveProfileExistingEmpty")}),(0,e.jsx)("small",{children:t("groups.saveProfileOverwriteHelp")})]}),(0,e.jsxs)("div",{className:"g-save-profile-target",children:[(0,e.jsx)("span",{children:t("groups.saveProfileTarget")}),(0,e.jsx)("code",{"data-save-profile-target":!0,children:B||"-"}),(0,e.jsx)("small",{"data-save-profile-target-mode":!0,children:t(g==="overwrite"?"groups.saveProfileTargetOverwrite":"groups.saveProfileTargetNew")})]}),(0,e.jsx)("div",{className:`g-save-profile-summary ${v?"":"warn"}`,children:q}),(0,e.jsx)("div",{className:`g-save-profile-status ${_?.className??""}`,"data-save-profile-status":!0,children:_?.text??""}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",id:"g-save-profile-cancel",onClick:o.onClose,children:t("groups.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary",disabled:!v||R||g==="overwrite"&&!P,children:R?t("groups.saveProfileSaving"):D})]})]})]})}function Ke(o){let{member:t,tr:r}=o,n=(0,i.useRef)(null),[a,c]=(0,i.useState)(!!t.oncallChat),[s,d]=(0,i.useState)(t.oncallChat?.workingDir??""),[f,I]=(0,i.useState)(!1),[p,h]=(0,i.useState)(null);async function w(){h(null);let u=s.trim();if(a&&!u){h({text:r("groups.needWorkingDir"),className:"hint-warn-inline"});return}I(!0);try{let v=`/api/groups/${encodeURIComponent(o.chat.chatId)}/oncall/${encodeURIComponent(t.larkAppId)}`,g=a?await fetch(v,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({workingDir:u})}):await fetch(v,{method:"DELETE"}),y=await g.json().catch(()=>({}));if(g.ok&&y.ok){h({text:a?`\u2713 \u5DF2\u7ED1\u5B9A \u2192 ${y.resolvedPath??u}`:"\u2713 \u5DF2\u89E3\u7ED1",className:"hint-ok"});try{await o.onSaved()}catch{}}else h({text:`\u2717 ${y.error??g.status}`,className:"hint-warn-inline"})}catch(v){h({text:`\u2717 ${v?.message??v}`,className:"hint-warn-inline"})}finally{I(!1)}}return(0,e.jsxs)("div",{className:"oncall-row","data-bot":t.larkAppId,children:[(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox","data-action":"toggle",checked:a,onChange:u=>{c(u.currentTarget.checked),u.currentTarget.checked&&window.setTimeout(()=>n.current?.focus(),0)}}),(0,e.jsx)("strong",{children:t.botName??t.larkAppId}),(0,e.jsxs)("small",{children:["(",t.larkAppId,")"]})]}),(0,e.jsxs)("div",{className:"oncall-row-body",children:[(0,e.jsx)("input",{ref:n,type:"text","data-input":"workingDir",placeholder:"e.g. /root/iserver/botmux",value:s,disabled:!a,onChange:u=>d(u.currentTarget.value)}),(0,e.jsx)("button",{type:"button","data-action":"save",disabled:f,onClick:()=>{w()},children:r("groups.save")}),(0,e.jsx)("span",{className:`oncall-status ${p?.className??""}`,"data-status":!0,children:p?.text??""})]})]})}function Ze(o){let{chat:t,tr:r}=o,n=(t.memberBots??[]).filter(p=>p.inChat),a=typeof t.ownerId=="string"?t.ownerId:"",[c,s]=(0,i.useState)(()=>new Set);function d(p,h){s(w=>{let u=new Set(w);return h?u.add(p):u.delete(p),u})}async function f(){let p=[...c];if(p.length===0){alert("\u81F3\u5C11\u9009\u4E00\u4E2A\u673A\u5668\u4EBA");return}if(confirm(`\u786E\u5B9A\u8BA9 ${p.length} \u4E2A\u673A\u5668\u4EBA\u9000\u51FA\u7FA4\u804A\uFF1F\u8BE5 bot \u5728\u6B64\u7FA4\u7684\u4F1A\u8BDD\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))try{let w=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/leave`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:p})})).json(),u=(w.result??[]).map(v=>{if(!v.ok)return`${v.larkAppId}: \u5931\u8D25 (${v.error??"unknown"})`;let g=v.closedSessions??[],y=g.filter(P=>!P.ok).length,C=g.length-y,x=g.length===0?"":y===0?`\uFF08\u5173\u95ED ${C} \u4E2A\u4F1A\u8BDD\uFF09`:`\uFF08\u5173\u95ED ${C} \u4E2A\uFF0C${y} \u4E2A\u5931\u8D25\uFF09`;return`${v.larkAppId}: OK${x}`}).join(`
|
|
2
|
-
`);alert(u||`Unexpected: ${JSON.stringify(w)}`),await o.onReloadGroups({force:!0})}catch(h){alert("Network error: "+h)}finally{o.onClose()}}async function I(){if(n.length===0||!confirm(`\u786E\u5B9A\u89E3\u6563\u7FA4\u804A\u300C${t.name??t.chatId}\u300D\uFF1F\u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\uFF0C\u672C\u7FA4\u6240\u6709\u673A\u5668\u4EBA\u4F1A\u8BDD\u4E5F\u4F1A\u4E00\u5E76\u5173\u95ED\u3002`))return;let p=[...n].sort((w,u)=>(u.larkAppId===a?1:0)-(w.larkAppId===a?1:0)),h=[];for(let w of p)try{let u=await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/disband`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppId:w.larkAppId})}),v=await u.json();if(v.ok){let g=v.closedSessions??[],y=g.filter(P=>!P.ok).length,C=g.length-y,x=g.length===0?"":y===0?`
|
|
3
|
-
\u5173\u95ED\u4E86 ${C} \u4E2A\u4F1A\u8BDD\u3002`:`
|
|
4
|
-
\u5173\u95ED\u4E86 ${C} \u4E2A\u4F1A\u8BDD\uFF0C${y} \u4E2A\u4F1A\u8BDD\u5173\u95ED\u5931\u8D25\u3002`;alert(`\u5DF2\u89E3\u6563\uFF08\u7531 ${w.botName??w.larkAppId} \u6267\u884C\uFF09${x}`),await o.onReloadGroups({force:!0}),o.onClose();return}h.push(`${w.botName??w.larkAppId}: ${v.error??u.status}`)}catch(u){h.push(`${w.botName??w.larkAppId}: ${u}`)}alert(`\u6240\u6709\u5728\u7FA4\u673A\u5668\u4EBA\u5747\u65E0\u6CD5\u89E3\u6563\uFF1A
|
|
5
|
-
${h.join(`
|
|
6
|
-
`)}
|
|
7
|
-
|
|
8
|
-
\u5EFA\u8BAE\u6539\u7528\u300C\u9000\u51FA\u7FA4\u804A\u300D\u3002`)}return(0,e.jsxs)("article",{className:"g-manage-dialog",children:[(0,e.jsx)("header",{children:(0,e.jsx)("h3",{children:r("groups.manageTitle",{name:t.name??t.chatId})})}),(0,e.jsxs)("div",{className:"g-manage-meta",children:[(0,e.jsxs)("span",{children:[(0,e.jsx)("b",{children:"chatId"}),(0,e.jsx)("code",{children:t.chatId})]}),(0,e.jsxs)("span",{children:[(0,e.jsx)("b",{children:r("groups.owner")}),(0,e.jsx)("code",{children:t.ownerId??r("common.unknown")})]})]}),(0,e.jsxs)("fieldset",{children:[(0,e.jsx)("legend",{children:r("groups.oncall")}),(0,e.jsx)("p",{children:(0,e.jsx)("small",{children:r("groups.oncallHelp")})}),n.length===0?(0,e.jsx)("p",{className:"empty",children:"\u6CA1\u6709\u673A\u5668\u4EBA\u5728\u7FA4\u91CC"}):n.map(p=>(0,e.jsx)(Ke,{chat:t,member:p,tr:r,onSaved:async()=>{await o.onReloadGroups({force:!0})}},p.larkAppId))]}),(0,e.jsxs)("fieldset",{children:[(0,e.jsx)("legend",{children:r("groups.leaveTitle")}),n.length===0?(0,e.jsx)("p",{className:"empty",children:"\u6CA1\u6709\u673A\u5668\u4EBA\u5728\u7FA4\u91CC"}):(0,e.jsx)("div",{className:"g-leave-picker",children:n.map(p=>(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox",name:"leave-bot",value:p.larkAppId,checked:c.has(p.larkAppId),onChange:h=>d(p.larkAppId,h.currentTarget.checked)}),(0,e.jsxs)("span",{className:"checkbox-row-main",children:[(0,e.jsx)("strong",{children:p.botName??p.larkAppId}),p.larkAppId===a?(0,e.jsx)("small",{children:"\xB7 \u7FA4\u4E3B"}):null]})]},p.larkAppId))})]}),(0,e.jsx)("p",{className:"g-manage-danger-hint",children:r("groups.dangerHint")}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",onClick:o.onClose,children:r("sessions.dismiss")}),(0,e.jsx)("button",{id:"g-leave-btn",type:"button",disabled:n.length===0,onClick:()=>{f()},children:r("groups.leaveSelected")}),(0,e.jsx)("button",{id:"g-disband-btn",type:"button",className:"contrast",disabled:n.length===0,onClick:()=>{I()},children:r("groups.disband")})]})]})}function Xe(o){let t=(0,i.useRef)(null);(0,i.useEffect)(()=>{let a=t.current;if(!a)return;let c=()=>o.onClose();return a.addEventListener("close",c),()=>a.removeEventListener("close",c)},[o.onClose]),(0,i.useEffect)(()=>{let a=t.current;a&&(o.dialog&&!a.open&&a.showModal(),!o.dialog&&a.open&&a.close())},[o.dialog]);let r=null;o.dialog?.type==="create"?r=(0,e.jsx)(Je,{bots:o.snapshot.bots,roleProfiles:o.dialog.roleProfiles,tr:o.tr,onClose:o.onClose,onCreated:o.onCreated,setTimer:o.setTimer}):o.dialog?.type==="add-bots"?r=(0,e.jsx)(Ve,{chat:o.dialog.chat,bots:o.snapshot.bots,tr:o.tr,onClose:o.onClose,onReloadGroups:o.onReloadGroups}):o.dialog?.type==="save-profile"?r=(0,e.jsx)(qe,{chat:o.dialog.chat,suggestedProfileId:o.dialog.suggestedProfileId,tr:o.tr,onClose:o.onClose,onRefreshRoleContext:o.onRefreshRoleContext,setTimer:o.setTimer}):o.dialog?.type==="manage"&&(r=(0,e.jsx)(Ze,{chat:o.dialog.chat,tr:o.tr,onClose:o.onClose,onReloadGroups:o.onReloadGroups}));let n=o.dialog?.type==="create"?"groups-create-modal":void 0;return(0,e.jsx)("dialog",{id:"g-drawer",className:n,ref:t,onMouseDown:a=>{a.target===a.currentTarget&&a.currentTarget.close()},children:r})}function Ye(){let o=me(),t=(0,i.useRef)(!1),r=(0,i.useRef)(j),n=(0,i.useRef)(new Set),a=(0,i.useRef)(new Map),c=(0,i.useRef)(0),[s,d]=(0,i.useState)(j),[f,I]=(0,i.useState)(()=>Te()),[p,h]=(0,i.useState)({q:"",missingOnly:!1}),[w,u]=(0,i.useState)(!0),[v,g]=(0,i.useState)(null),[y,C]=(0,i.useState)(!1),[x,P]=(0,i.useState)(null),[S,R]=(0,i.useState)(1),A=(0,i.useCallback)(l=>{d(b=>{let k=typeof l=="function"?l(b):l;return r.current=k,k})},[]),_=(0,i.useCallback)((l,b)=>{let k=window.setTimeout(()=>{n.current.delete(k),t.current&&l()},b);return n.current.add(k),k},[]),G=(0,i.useCallback)(l=>new Promise(b=>{let k=window.setTimeout(()=>{n.current.delete(k),a.current.delete(k),b()},l);n.current.add(k),a.current.set(k,b)}),[]),B=(0,i.useCallback)(async l=>{let b=++c.current;try{let k=await Ie(l??r.current);t.current&&b===c.current&&I(k)}catch{t.current&&b===c.current&&I({...Te(),loaded:!0})}},[]),D=(0,i.useCallback)(async l=>{let b=await J({force:l?.force});return t.current&&(A(b),g(null),B(b)),b},[B,A]),q=(0,i.useCallback)(async(l,b)=>{let k=[600,1200,1200,1200,1200,1200];for(let E of k){if(await G(E),!t.current)return;let F;try{F=await J({force:!0})}catch{continue}if(!t.current)return;let H=(F.chats??[]).find(W=>W.chatId===l);if(H&&xe(H,b)){A(F),B(F);return}}},[G,B,A]);(0,i.useEffect)(()=>(t.current=!0,(async()=>{u(!0);try{await D()}catch(l){t.current&&(A(j),g(l instanceof Error?l.message:String(l)),B(j))}finally{t.current&&u(!1)}})(),()=>{t.current=!1,c.current+=1;for(let l of n.current)window.clearTimeout(l);n.current.clear();for(let l of a.current.values())l();a.current.clear()}),[D]);let $=(0,i.useMemo)(()=>Re(s.chats,p),[s.chats,p]),N=(0,i.useMemo)(()=>Pe($,S),[$,S]);(0,i.useEffect)(()=>{S!==N.page&&R(N.page)},[S,N.page]);async function m(){C(!0);try{await D({force:!0})}catch(l){g(l instanceof Error?l.message:String(l))}finally{t.current&&C(!1)}}async function T(){if(r.current.bots.length===0){alert(o("groups.noBotsOnline"));return}let l=[];try{l=await V()}catch{}t.current&&P({type:"create",roleProfiles:l})}function L(l,b,k){let E=String(l.chatId),F=Array.isArray(l.invalidBotIds)?l.invalidBotIds:[],H=b.filter(Le=>!F.includes(Le)),W=new Set(H);typeof l.creator=="string"&&l.creator&&W.add(l.creator);let re=Be(r.current,E,k||E,H,l.creator);A(re),B(re),q(E,W).catch(()=>{})}let M=(0,i.useCallback)(l=>{let b=new Set((l.memberBots??[]).filter(E=>E.inChat).map(E=>E.larkAppId));if(!r.current.bots.filter(E=>!b.has(E.larkAppId)).length){alert("All configured bots are already in this chat.");return}P({type:"add-bots",chat:l})},[]),O=(0,i.useCallback)(l=>{let b=ee(l.name??""),k=b==="profile"?ee(l.chatId):b;P({type:"save-profile",chat:l,suggestedProfileId:k})},[]),U=(0,i.useCallback)(l=>{P({type:"manage",chat:l})},[]);function oe(l){let b=document.getElementById("g-body");b&&(b.scrollTop=0),R(l)}return(0,e.jsxs)("section",{className:"page groups-page",children:[(0,e.jsxs)("div",{className:"page-heading",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:o("nav.groups")}),(0,e.jsx)("h1",{children:o("groups.title")})]}),(0,e.jsx)("div",{className:"page-heading-actions",children:(0,e.jsx)(X,{id:"g-create",className:"page-primary-action",onClick:()=>{T()},children:o("groups.create")})})]}),(0,e.jsxs)("form",{id:"g-filters",className:"filters dashboard-toolbar groups-toolbar",onSubmit:l=>l.preventDefault(),children:[(0,e.jsx)("input",{type:"search",name:"q",placeholder:o("groups.search"),value:p.q,onChange:l=>{let b=l.currentTarget.value;R(1),h(k=>({...k,q:b}))}}),(0,e.jsxs)("label",{className:"filter-toggle",children:[(0,e.jsx)("input",{type:"checkbox",name:"missing",checked:p.missingOnly,onChange:l=>{let b=l.currentTarget.checked;R(1),h(k=>({...k,missingOnly:b}))}}),(0,e.jsx)("span",{className:"filter-toggle-label",children:o("groups.missingOnly")}),(0,e.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,e.jsx)("span",{className:"groups-toolbar-spacer","aria-hidden":"true"}),(0,e.jsxs)("span",{className:"groups-toolbar-count",children:[o("groups.matrixTitle")," ",w?"-/-":`${$.length}/${s.chats.length}`]}),(0,e.jsx)(le,{id:"g-refresh",label:o("groups.refresh"),busy:y,disabled:y,onClick:()=>{m()}})]}),v?(0,e.jsxs)("p",{className:"hint-warn",children:["\u52A0\u8F7D\u7FA4\u7EC4\u5931\u8D25\uFF1A",v]}):null,(0,e.jsx)("section",{className:"overview-block groups-matrix-section",children:w?(0,e.jsx)("div",{id:"g-loading",children:(0,e.jsx)(Z,{label:o("common.loading")})}):(0,e.jsxs)("div",{className:"groups-list-wrap",id:"g-table-wrap",children:[$.length===0?(0,e.jsx)("div",{className:"empty groups-list-empty",id:"g-body",children:o("groups.empty")}):(0,e.jsx)(ce,{id:"g-body",className:"groups-list",children:N.rows.map(l=>(0,e.jsx)(We,{chat:l,bots:s.bots,roleContext:f,tr:o,onAddBots:M,onSaveProfile:O,onManage:U},l.chatId))}),$.length>0&&N.totalPages>1?(0,e.jsxs)("nav",{className:"groups-pagination","aria-label":o("groups.paginationLabel"),children:[(0,e.jsx)("span",{className:"groups-pagination-status","aria-live":"polite",children:o("groups.pageStatus",{page:N.page,pages:N.totalPages,from:N.from,to:N.to,total:N.total})}),(0,e.jsxs)("div",{className:"groups-pagination-actions",children:[(0,e.jsx)("button",{type:"button",disabled:N.page<=1,onClick:()=>oe(N.page-1),children:o("groups.prevPage")}),(0,e.jsx)("button",{type:"button",disabled:N.page>=N.totalPages,onClick:()=>oe(N.page+1),children:o("groups.nextPage")})]})]}):null]})}),(0,e.jsx)(Xe,{dialog:x,snapshot:s,tr:o,onClose:()=>P(null),onCreated:L,onReloadGroups:D,onRefreshRoleContext:()=>B(),setTimer:_})]})}function ut(o){return se(o,(0,e.jsx)(Ye,{}))}export{ut as renderGroupsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as Q,b as j}from"./chunk-DCS35UMD.js";import{a as J,c as A}from"./chunk-ZU3UUKAR.js";import{b as H,d as M,e as T,f as O,k as W,m as x,n as I,o as P,p as X,r as G}from"./chunk-5CJMHTT4.js";import{C as $,E as C,F as q,G as y,H as f,I as h,w as L,y as k}from"./chunk-MFQPCVHY.js";import{a as V}from"./chunk-SYC6D5XU.js";import{a as ae,d as K}from"./chunk-5THX4DI2.js";import{c as E}from"./chunk-7SZRL6FY.js";var r=E(ae(),1);var t=E(K(),1),re=new Set(["working","analyzing","active","starting"]),le=new Set(["idle","dormant"]),ee="botmux.overview.teamExpanded",te="botmux.overview.activeSort",_=5,z=1,ce=260;function ve(){try{return window.localStorage.getItem(ee)==="1"}catch{return!1}}function me(e){try{window.localStorage.setItem(ee,e?"1":"0")}catch{}}function de(e){return e==="attention"?"attention":"time"}function ue(){try{return de(window.localStorage.getItem(te))}catch{return"time"}}function we(e){try{window.localStorage.setItem(te,e)}catch{}}function pe(e,s){let o=(i,a)=>Number(a.lastMessageAt??0)-Number(i.lastMessageAt??0);return s==="attention"?[...e].sort((i,a)=>{let d=f(i)?0:1,l=f(a)?0:1;if(d!==l)return d-l;if(d===0){let p=h(i)-h(a);if(p!==0)return p}return o(i,a)}):[...e].sort(o)}function fe(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function ge(e,s){let o=String(e??"unknown"),i=`sessions.status.${o}`,a=s(i);return a===i?o:a}function Se(e){if(!e)return z*_;let s=window.getComputedStyle(e).gridTemplateColumns.split(/\s+/).filter(i=>Number.parseFloat(i)>0);return Math.max(1,s.length||_)*z}function be(e,s){if(!e)return;let o=document.querySelector(".sidebar");if(!o||window.matchMedia("(max-width: 980px)").matches){e.style.removeProperty(s);return}let i=o.getBoundingClientRect().bottom,a=e.getBoundingClientRect().top,l=`${Math.max(ce,Math.round(i-a))}px`;e.style.getPropertyValue(s)!==l&&e.style.setProperty(s,l)}function he({card:e}){let s=A(),o=!e.online&&e.active.length===0,i=e.attention.length>0,a=e.busy.length>0,d=i?"warn":a?"busy":o?"off":"ok",l;if(i){let v=[...e.attention].sort((g,S)=>h(g)-h(S))[0];l=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("b",{children:(y(v.title)||v.sessionId).slice(0,60)})," \xB7 ",f(v)??""]})}else if(a){let v=[...e.busy].sort((g,S)=>Number(S.lastMessageAt??0)-Number(g.lastMessageAt??0))[0];l=(0,t.jsx)("b",{children:(y(v.title)||v.sessionId).slice(0,60)})}else o?l=s("overview.botOffline"):l=s("overview.botIdle");let p=i?(0,t.jsx)("span",{className:"tag tag-warn",children:s("overview.botNeedsYou")}):a?(0,t.jsx)("span",{className:"tag tag-run",children:s("overview.botBusy",{count:e.busy.length})}):o?(0,t.jsx)("span",{className:"tag tag-off",children:s("overview.botOff")}):(0,t.jsx)("span",{className:"tag tag-ok",children:s("overview.botReady")});return(0,t.jsxs)("article",{className:`mate${i?" mate-attn":""}${o?" mate-off":""}`,children:[(0,t.jsxs)("div",{className:"mate-top",children:[(0,t.jsx)(H,{html:k({name:e.botName,larkAppId:e.larkAppId,avatarUrl:e.botAvatarUrl,dot:d})}),(0,t.jsxs)("div",{className:"mate-id",children:[(0,t.jsx)("b",{children:e.botName}),(0,t.jsx)("span",{className:"mate-role",children:e.cliId})]})]}),(0,t.jsx)("div",{className:"mate-task",children:l}),(0,t.jsxs)("div",{className:"mate-foot",children:[p,(0,t.jsx)("span",{children:e.lastActiveAt?s("overview.lastActive",{time:L(e.lastActiveAt)}):s("common.never")})]})]})}function Ae({session:e}){let s=A(),o=C(e),i=String(e.status??"unknown"),a=f(e);return(0,t.jsxs)(I,{kind:"session",children:[(0,t.jsx)(H,{html:k({name:o,larkAppId:e.larkAppId,size:"sm"})}),(0,t.jsxs)(P,{children:[(0,t.jsx)("b",{children:(y(e.title)||e.sessionId).slice(0,64)}),(0,t.jsxs)("span",{children:[o," \xB7 ",q(e)??e.cliId??"unknown"," \xB7 ",L(e.lastMessageAt)]})]}),(0,t.jsx)(X,{children:a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("a",{className:"overview-list-action",href:"#/sessions",children:s("strip.handle")}),(0,t.jsx)("span",{className:"status overview-list-status status-attention",children:a})]}):(0,t.jsx)("span",{className:`status overview-list-status status-${fe(i)}`,children:ge(i,s)})})]})}function Ne({schedule:e,timeZone:s}){let o=e.nextRunAt?new Date(e.nextRunAt).toLocaleString(void 0,s?{timeZone:s,timeZoneName:"short"}:void 0):"-";return(0,t.jsxs)(I,{kind:"schedule",children:[(0,t.jsxs)(P,{children:[(0,t.jsx)("strong",{children:e.name??e.id}),(0,t.jsxs)("span",{children:[C(e)," \xB7 ",e.parsed?.display??""]})]}),(0,t.jsx)("span",{className:"overview-list-meta",children:(0,t.jsx)(W,{text:o,showPopover:!1,durationMs:2600})})]})}function ye({mode:e,onModeChange:s}){let o=A(),i=o(e==="attention"?"overview.sortAttentionFirst":"overview.sortByTime");return(0,t.jsx)(G,{className:"overview-active-sort-menu",label:i,value:e,options:[{value:"time",label:o("overview.sortByTime")},{value:"attention",label:o("overview.sortAttentionFirst")}],onChange:s})}function Me(){let e=A(),s=(0,r.useRef)(null),o=(0,r.useRef)(null),i=(0,r.useRef)(null),[a,d]=(0,r.useState)(ve),[l,p]=(0,r.useState)(ue),[v,g]=(0,r.useState)(z*_),[S,D]=(0,r.useState)(0),{sessions:N,schedules:B,scheduleTimeZone:ne}=J(n=>({sessions:[...n.sessions.values()],schedules:[...n.schedules.values()],scheduleTimeZone:n.scheduleTimeZone}));(0,r.useEffect)(()=>{let n=0,m=()=>{window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{let w=Se(s.current);g(c=>c===w?c:w)})};m();let u=typeof ResizeObserver>"u"||!s.current?null:new ResizeObserver(m);return u&&s.current&&u.observe(s.current),window.addEventListener("resize",m),()=>{window.cancelAnimationFrame(n),u?.disconnect(),window.removeEventListener("resize",m)}},[]),(0,r.useEffect)(()=>{Q().then(()=>D(n=>n+1)),$().then(()=>D(n=>n+1))},[]);let F=(0,r.useMemo)(()=>N.filter(n=>n.status!=="closed"),[N]),b=(0,r.useMemo)(()=>j(N),[N,S]),U=a?b:b.slice(0,v),Y=(0,r.useMemo)(()=>pe(F.filter(n=>f(n)||re.has(n.status)||le.has(n.status)),l).slice(0,7),[F,l]),R=(0,r.useMemo)(()=>B.filter(n=>n.nextRunAt).sort((n,m)=>Date.parse(n.nextRunAt)-Date.parse(m.nextRunAt)).slice(0,5),[B]);(0,r.useEffect)(()=>{let n=[{el:o.current,propertyName:"--active-sessions-min-height"},{el:i.current,propertyName:"--schedules-panel-min-height"}].filter(c=>!!c.el);if(!n.length)return;let m=0,u=()=>{window.cancelAnimationFrame(m),m=window.requestAnimationFrame(()=>{for(let c of n)be(c.el,c.propertyName)})};u();let w=typeof ResizeObserver>"u"?null:new ResizeObserver(u);if(w){for(let ie of n)w.observe(ie.el);let c=document.querySelector(".sidebar"),Z=n[0].el.closest(".page");c&&w.observe(c),Z&&w.observe(Z)}return window.addEventListener("resize",u),()=>{window.cancelAnimationFrame(m),w?.disconnect(),window.removeEventListener("resize",u);for(let c of n)c.el.style.removeProperty(c.propertyName)}},[a,v,b.length,R.length]);let se=()=>{d(n=>(me(!n),!n))},oe=n=>{p(n),we(n)};return(0,t.jsxs)("section",{className:"page hero-page",children:[(0,t.jsx)("div",{className:"page-heading",children:(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"eyebrow",children:e("app.subtitle")}),(0,t.jsx)("h1",{children:e("overview.title")})]})}),(0,t.jsxs)("div",{className:"overview-layout",children:[(0,t.jsxs)("div",{className:"overview-main",children:[(0,t.jsxs)("section",{className:"overview-block team-section",children:[(0,t.jsx)(M,{title:e("overview.team"),count:e("overview.teamCount",{count:b.length}),hint:e("overview.teamHint"),children:(0,t.jsx)(O,{children:(0,t.jsx)(T,{href:"#/bot-defaults",children:e("overview.viewAllPlain")})})}),(0,t.jsx)("div",{className:"team-grid",id:"team-grid",ref:s,children:U.length?U.map(n=>(0,t.jsx)(he,{card:n},n.larkAppId??n.botName)):(0,t.jsx)("div",{className:"empty",children:e("overview.noSessions")})}),b.length>v?(0,t.jsx)("button",{type:"button",className:"team-toggle",id:"team-toggle",onClick:se,children:e(a?"overview.teamCollapse":"overview.teamExpand")}):null]}),(0,t.jsxs)("section",{className:"overview-block",children:[(0,t.jsx)(M,{title:e("overview.activeSessions"),children:(0,t.jsxs)(O,{children:[(0,t.jsx)(ye,{mode:l,onModeChange:oe}),(0,t.jsx)(T,{href:"#/sessions",children:e("overview.viewAllPlain")})]})}),(0,t.jsx)("section",{className:"panel active-sessions-panel",ref:o,children:(0,t.jsx)(x,{id:"recent-sessions",children:Y.length?Y.map(n=>(0,t.jsx)(Ae,{session:n},n.sessionId)):(0,t.jsx)("li",{className:"empty",children:e("overview.noSessions")})})})]})]}),(0,t.jsx)("aside",{className:"overview-side",children:(0,t.jsxs)("section",{className:"overview-block",children:[(0,t.jsx)(M,{title:e("overview.nextSchedules"),children:(0,t.jsx)(T,{href:"#/schedules",children:e("overview.viewAllPlain")})}),(0,t.jsx)("section",{className:"panel schedules-panel",ref:i,children:(0,t.jsx)(x,{id:"next-schedules",children:R.length?R.map(n=>(0,t.jsx)(Ne,{schedule:n,timeZone:ne},n.id)):(0,t.jsx)("li",{className:"empty",children:e("overview.noSchedules")})})})]})})]})]})}function Ce(e){e.classList.add("overview-root");let s=V(e,(0,t.jsx)(Me,{}));return()=>{s(),e.classList.remove("overview-root")}}export{Ce as renderOverviewPage};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{a as St}from"./chunk-FDZ7WOBW.js";import{a as vt,c as It,h as Tt}from"./chunk-XJ7BGPJH.js";import{a as xn,c as Ct,f as Oe}from"./chunk-AGCPF6MT.js";import{a as on}from"./chunk-ZJVTGU5X.js";import{a as kt,c as wt}from"./chunk-ZU3UUKAR.js";import{c as Pe,g as yt,q as We}from"./chunk-5CJMHTT4.js";import{A as nn,C as bt,E as de,F as Re,G as ue,I as tn,a as Ae,f as at,g as In,h as it,i as rt,j as lt,k as ct,l as Tn,m as dt,n as ut,o as mt,p as gt,q as Nn,r as pt,s as ft,t as Te,u as o,v as Be,w as Ne,y as xe}from"./chunk-MFQPCVHY.js";import{a as ht}from"./chunk-SYC6D5XU.js";import{a as ot,b as _s,d as sn}from"./chunk-5THX4DI2.js";import{c as Le}from"./chunk-7SZRL6FY.js";var c=Le(ot(),1),mn=Le(_s(),1);var Rn=[24,72,168],Ks=new Set(Rn);function Mn(e){let t=e==="7d"?168:Number(e);return!Number.isFinite(t)||!Ks.has(t)?null:t}function Fs(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function Us(e,t=Date.now()){return t-e*60*60*1e3}function zs(e,t,s=Date.now()){if(!e.sessionId||e.status!=="idle"||e.locked||e.pendingRepo||e.tuiPromptActive||e.agentAttention)return!1;let a=Fs(e.lastMessageAt);return a!==null&&a<Us(t,s)}function Nt(e,t,s=Date.now()){return e.filter(a=>zs(a,t,s))}var xt={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"},jo=new Set(Object.values(xt)),js={"claude-code":"Claude",aiden:"Aiden",coco:"CoCo",codex:"Codex",cursor:"Cursor",gemini:"Gemini",genius:"Genius",opencode:"OpenCode",antigravity:"Antigravity",mtr:"MTR",hermes:"Hermes","codex-app":"Codex App",mira:"Mira",seed:"Seed",traex:"TRAE",pi:"Pi",copilot:"Copilot","oh-my-pi":"Oh My Pi",relay:"Relay",mir:"Mir CLI",kimi:"Kimi",grok:"Grok Build","kiro-cli":"Kiro",riff:"Riff",reasonix:"Reasonix"},Rt=Object.values(xt).map(e=>({id:e,label:js[e]??e}));function an(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function En(e){let t=an(e);return t===null?"-":t.toLocaleString("en-US")}function Mt(e,t){let s=String(e??"").replace(/\s+/g," ").trim();return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function Et(e,t){let s=String(e??"").replace(/\r\n?/g,`
|
|
2
|
-
`).replace(/[^\S\n]+\n/g,`
|
|
3
|
-
`).replace(/\n{3,}/g,`
|
|
4
|
-
|
|
5
|
-
`).replace(/^\n+/,"").replace(/\s+$/,"");return s?s.length>t?`${s.slice(0,t-1)}\u2026`:s:""}function At(e){let t=Et(e.previewUserFullText??e.previewUserText??"",4e3),s=e.previewBotState==="replied"?Et(e.previewBotFullText??e.previewBotText??"",4e3):"";return{userText:Mt(t,120),userFullText:t,botText:Mt(s,220),botFullText:s}}var Bt={open:!1,suppressFocusOpen:!1};function Pt(e,t){switch(t){case"open":return{open:!0,suppressFocusOpen:!1};case"close":return{open:!1,suppressFocusOpen:!1};case"toggle":return{open:!e.open,suppressFocusOpen:!1};case"focus":return e.suppressFocusOpen?{open:e.open,suppressFocusOpen:!1}:{open:!0,suppressFocusOpen:!1};case"escape-refocus":return{open:!1,suppressFocusOpen:!0};default:return e}}var ge=[...Rt.map(e=>e.id),"unknown"],Ln=[{id:"needs-you",labelKey:"sessions.board.needsYou",hintKey:"sessions.board.needsYouHint"},{id:"starting",labelKey:"sessions.board.starting",hintKey:"sessions.board.startingHint"},{id:"working",labelKey:"sessions.board.working",hintKey:"sessions.board.workingHint"},{id:"idle",labelKey:"sessions.board.idle",hintKey:"sessions.board.idleHint"}];function An(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}var Ot=["starting","working","idle","dormant","analyzing","active","limited","closed"];function Ge(e){let t=String(e??"unknown"),s=`sessions.status.${t}`,a=o(s);return a===s?t:a}function Dt(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 Bn(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function Lt(e){return e?.chatType==="p2p"?o("sessions.directChat"):o("sessions.groupChat")}function Js(e){let t=o("sessions.directChat"),s=String(e?.chatDisplayName??"").trim()||String(e?.chatId??"").trim()||o("sessions.chatUnknown"),a=de(e);return`${t} \xB7 ${s} - ${a}`}function Me(e){let t=String(e?.chatId??"").trim();if(e?.chatType==="p2p")return Js(e);let s=Re(e),a=e?.chatType==="p2p"?(()=>{let r=String(e?.botName??"").trim();return r?` \xB7 ${r}`:""})():"";return s?`${Lt(e)} \xB7 ${s}${a}`:t?`${Lt(e)} \xB7 ${t}${a}`:o("sessions.chatUnknown")}function Pn(e,t=Re){return!!String(e?.chatId??"").trim()&&!t(e)}function On(e){let t=Me(e),s=String(e?.chatId??"").trim();return s&&!t.includes(s)?`${t} \xB7 ${s}`:t}function $t(e){return`${JSON.stringify(e)} ${Me(e)} ${On(e)}`.toLowerCase()}function me(e){return typeof e=="string"?e.trim():""}function Ht(e){let t=me(e?.chatId),s=me(e?.rootMessageId);return e?.scope==="chat"?t?"chat":"session":t&&s?"thread":"session"}function Dn(e){let t=me(e?.chatId),s=me(e?.rootMessageId),a=Ht(e);return a==="thread"?`thread:${encodeURIComponent(t)}:${encodeURIComponent(s)}`:a==="chat"?`chat:${encodeURIComponent(t)}`:`session:${encodeURIComponent(me(e?.sessionId)||"unknown")}`}function Ws(e,t){let s=[...e].sort((a,r)=>Number(a?.spawnedAt??0)-Number(r?.spawnedAt??0));for(let a of s){let r=me(a?.title);if(r)return r}return t}function rn(e){let t=new Map;for(let a of e){let r=Dn(a),m=t.get(r);m?m.push(a):t.set(r,[a])}let s=[];for(let[a,r]of t){let m=[...r].sort((R,K)=>Number(K.lastMessageAt??0)-Number(R.lastMessageAt??0)),p=m[0]??{},l=Ht(p),g=me(p.chatId),C=l==="thread"?me(p.rootMessageId):"",w=new Set(m.map(R=>me(R.larkAppId)||me(R.botName)).filter(Boolean)),S=Math.max(1,w.size),B=m.filter(R=>R.status!=="closed").length,A=m.filter(R=>R.lastInputFromBot===!0).length,N=m.reduce((R,K)=>Math.max(R,Number(K.lastMessageAt??0)),0),x=C||g||me(p.sessionId)||a;s.push({key:a,kind:l,chatId:g,...C?{rootMessageId:C}:{},title:Ws(m,x),rows:m,botCount:S,activeCount:B,closedCount:m.length-B,inferredBotInputCount:A,latestActivityAt:N,multiBot:w.size>1,inferredBotTriggered:A>0})}return s.sort((a,r)=>r.latestActivityAt-a.latestActivityAt||a.key.localeCompare(r.key))}var Xe=vt;function ln(e=Te){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 cn(e){return e.locked?o("sessions.unlock"):o("sessions.lock")}async function $n(e,t){let s=window.open("about:blank","_blank");s&&(s.opener=null),t&&(t.disabled=!0);try{let a=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/write-link`),r=await a.json().catch(()=>({}));if(!a.ok||r?.ok===!1||!r?.url){s?.close(),a.status!==401&&alert(`${o("sessions.writeLinkFail")}: ${r?.error??a.status}`);return}s?s.location.href=r.url:window.open(r.url,"_blank","noopener")}catch(a){s?.close(),alert(`${o("sessions.writeLinkFail")}: ${a}`)}finally{t&&(t.disabled=!1)}}async function _t(e,t){t&&(t.disabled=!0);try{let s=await fetch(`/api/sessions/${encodeURIComponent(e.sessionId)}/spawn-command`),a=await s.json().catch(()=>({}));if(!s.ok||a?.ok===!1||!a?.command){s.status!==401&&alert(`${o("sessions.copyCommandFail")}: ${a?.error??s.status}`);return}if(await on(a.command,o("sessions.copyCommand"))&&t){let r=t.textContent;t.textContent=o("sessions.copyCommandDone"),setTimeout(()=>{r!==null&&(t.textContent=r)},1500)}}catch(s){alert(`${o("sessions.copyCommandFail")}: ${s}`)}finally{t&&(t.disabled=!1)}}function Hn(e){let t=String(e?.senderType??"unknown"),s=t==="app"||t==="bot"?"bot":t,a=String(e?.senderId??"").trim(),r=String(e?.senderName??"").trim();return`${s}:${a||r||"unknown"}`}function Kt(e){return e.status==="closed"?null:e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"needs-you":e.status==="starting"?"starting":e.status==="working"||e.status==="analyzing"||e.status==="active"?"working":(e.status==="dormant","idle")}function Ft(e){let t=String(e.status??"unknown"),s=String(e.cliId??"unknown"),a=Te.locale==="zh"?"\uFF1A":": ";return[o("sessions.restartConfirmIntro"),"",`${o("sessions.restartConfirmStatus")}${a}${Ge(t)}`,`${o("sessions.restartConfirmCli")}${a}${s}`,"",o("sessions.restartConfirmQuestion")].join(`
|
|
6
|
-
`)}function dn(e){return e.status!=="closed"&&!e.adopt&&!e.pendingRepo}async function Ut(){try{let e=await fetch("/api/groups");if(!e.ok)return[];let t=await e.json();return(Array.isArray(t?.bots)?t.bots:[]).filter(a=>a&&typeof a.larkAppId=="string").map(a=>({larkAppId:a.larkAppId,botName:typeof a.botName=="string"&&a.botName?a.botName:a.larkAppId}))}catch{return[]}}var Ve=new St({html:!1,linkify:!0,breaks:!0});Ve.validateLink=e=>/^(https?:|mailto:)/i.test(e.trim());var zt=Ve.renderer.rules.link_open;Ve.renderer.rules.link_open=(e,t,s,a,r)=>(e[t].attrSet("target","_blank"),e[t].attrSet("rel","noopener noreferrer nofollow"),zt?zt(e,t,s,a,r):r.renderToken(e,t,s));Ve.renderer.rules.image=(e,t)=>{let s=e[t],a=s.children?.reduce((l,g)=>l+(g.content??""),"")??"",r=Be(a.trim()||"image"),m=s.attrGet("src")??"";return/^(https?:|mailto:)/i.test(m.trim())?`<span class="session-card-exchange-img">\u{1F5BC} <a href="${Be(m)}" target="_blank" rel="noopener noreferrer nofollow">${r}</a></span>`:`<span class="session-card-exchange-img">\u{1F5BC} ${r}</span>`};function _n(e){let t=String(e??"");if(!t.trim())return"";try{return Ve.render(t).trim()||`<p>${Be(t)}</p>`}catch{return`<p>${Be(t)}</p>`}}function Kn(e,t){let s=Math.max(0,Math.min(t,e.length)),r=e.slice(0,s).match(/(?:^|\s)@([^\s@]*)$/u);if(!r)return null;let m=r[1]??"";return{start:s-m.length-1,end:s,query:m}}function jt(e,t,s){let a=`@${s} `,r=e[t.end]===" "?t.end+1:t.end;return{text:e.slice(0,t.start)+a+e.slice(r),caret:t.start+a.length}}function Jt(e,t){let s=t.trim().toLocaleLowerCase();return s?e.filter(a=>a.botName.toLocaleLowerCase().includes(s)||a.larkAppId.toLocaleLowerCase().includes(s)):[...e]}function Wt(e,t,s,a){if(a.length===0)return{text:e,caret:Math.max(0,Math.min(t,e.length))};let r=Math.max(0,Math.min(t,e.length)),m=Math.max(r,Math.min(s,e.length)),p=e.slice(0,r),l=e.slice(m),g=p&&!/\s$/u.test(p)?" ":"",C=l&&!/^\s/u.test(l)?" ":"",w=`${g}${a.join(" ")}${C}`;return{text:p+w+l,caret:p.length+w.length}}function Gs(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 Gt(e,t,s,a){let r=Gs(e,t),m=s.map((p,l)=>a(l));return s.forEach((p,l)=>{let g=r.indexOf(p);g<0||p===m[l]||(r=r.slice(0,g)+m[l]+r.slice(g+p.length))}),{text:r,markers:m}}var M=Le(ot(),1);var Xt=["backlog","todo","in_progress","in_review","done"];function Vt(e){return typeof e=="string"&&Xt.includes(e)?e:null}function qt(e){if(e.status==="closed")return"done";let t=Vt(e.kanbanColumn);return t||(e.pendingRepo||e.tuiPromptActive||e.agentAttention||e.status==="limited"?"in_review":e.status==="starting"||e.status==="working"||e.status==="analyzing"||e.status==="active"?"in_progress":"todo")}var Xs=1e15;function De(e){if(typeof e.kanbanPosition=="number"&&Number.isFinite(e.kanbanPosition))return e.kanbanPosition;let t=typeof e.lastMessageAt=="number"&&Number.isFinite(e.lastMessageAt)?e.lastMessageAt:0;return Xs-t}function Fn(e,t){return e!==null&&t!==null?(e+t)/2:e!==null?e+1024:t!==null?t-1024:1024}var T=Le(sn(),1),Yt=[{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"}],Un=50;function Zt(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function Vs(e){let t=String(e??"").trim();return t?t.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)??t:"-"}function qs(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function Ys(e){let t=(s="")=>`<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="5.4" fill="none" stroke="currentColor" stroke-width="1.6"${s}/>`;switch(e){case"backlog":return`${t(' stroke-dasharray="1.6 2.1"')}</svg>`;case"in_progress":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 0 1 7,10.4 Z" fill="currentColor"/></svg>`;case"in_review":return`${t()}<path d="M7,7 L7,3.6 A3.4,3.4 0 1 1 3.6,7 Z" fill="currentColor"/></svg>`;case"done":return'<svg viewBox="0 0 14 14" aria-hidden="true"><circle cx="7" cy="7" r="6.2" fill="currentColor"/><path d="M4.4 7.2 6.2 9 9.7 5.4" fill="none" stroke="var(--surface)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>';default:return`${t()}</svg>`}}function _e(e){return{__html:e}}function un(e){return typeof e.remoteDeployment=="string"&&e.remoteDeployment.length>0}function Zs(e){return ue(e.title)||e.sessionId}function ss(e){let t=[],s=new Map;for(let m of e){let p=String(m.chatId??m.sessionId),l=s.get(p);l||(l={chatId:p,rows:[]},s.set(p,l),t.push(l)),l.rows.push(m)}let a=[];return{clusters:t.map(m=>(a.push(...m.rows),m.rows.length<2?{type:"card",row:m.rows[0]}:{type:"cluster",chatId:m.chatId,rows:m.rows})),flat:a}}function Qt(e){let t=new Map(Yt.map(a=>[a.id,[]]));for(let a of e)t.get(qt(a)).push(a);return{columns:Yt.map(a=>{let r=(t.get(a.id)??[]).sort((g,C)=>De(g)-De(C)),m=0;a.id==="done"&&r.length>Un&&(m=r.length-Un,r=r.slice(0,Un));let{clusters:p,flat:l}=ss(r);return t.set(a.id,l),{id:a.id,labelKey:a.labelKey,rows:r,clusters:p,hiddenCount:m}}),groups:t}}function Qs(e){let t=new Map;for(let s of e){if(s.status==="closed")continue;let a=String(s.larkAppId||s.botName||"unknown"),r=t.get(a);r||(r={name:de(s),larkAppId:s.larkAppId,rows:[]},t.set(a,r)),r.rows.push(s)}return[...t.values()].sort((s,a)=>s.name.localeCompare(a.name)).map(s=>{let a=s.rows.sort((m,p)=>Number(p.lastMessageAt??0)-Number(m.lastMessageAt??0)),{clusters:r}=ss(a);return{key:String(s.larkAppId??s.name),name:s.name,larkAppId:s.larkAppId,rows:a,clusters:r}})}function zn(e){return new Map(e.map(t=>[String(t.sessionId),t]))}function eo(e){if(e.groupBy==="bot"){let a=e.rows.filter(r=>!un(r));return{mode:"bot",columns:Qs(a),groups:new Map,rowById:zn(a),team:null,scope:null}}if(e.groupBy==="team"){if(!e.teamsLoaded)return{mode:"loading",groups:new Map,rowById:new Map,team:null,scope:null};let a=e.teams.find(S=>S.key===e.teamKey)??e.teams[0]??null,r=e.getTeamChatIds(a??void 0),m=a?e.rows.filter(S=>r.has(String(S.chatId))):[],p=(e.teamBoardKey===a?.key?e.teamBoardData?.board:null)??{},l=(e.teamBoardKey===a?.key?e.teamBoardData?.remoteRows:null)??[],g=[...m,...l].map(S=>{let B=p[String(S.sessionId)];return B?{...S,kanbanColumn:B.column,kanbanPosition:B.position}:S}),{columns:C,groups:w}=Qt(g);return{mode:"flow",columns:C,groups:w,rowById:zn(g),team:a,scope:{chats:r.size,sessions:g.length}}}let{columns:t,groups:s}=Qt(e.rows);return{mode:"flow",columns:t,groups:s,rowById:zn(e.rows),team:null,scope:null}}function no(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 to(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 es(e,t){for(let s of e.querySelectorAll(".kanban-card:not(.dragging)")){if(s.closest(".kanban-cluster.dragging"))continue;let a=s.getBoundingClientRect();if(t<a.top+a.height/2)return s}return null}function He(e){return(0,T.jsx)("button",{type:"button",className:`card-act kanban-card-act${e.className?` ${e.className}`:""}`,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,onClick:t=>{t.stopPropagation(),e.onClick(t.currentTarget)},dangerouslySetInnerHTML:_e(e.icon)})}function so(e){let t=ue(e.row.title)||"",[s,a]=(0,M.useState)(t),r=(0,M.useRef)(null),m=(0,M.useRef)(!1);(0,M.useLayoutEffect)(()=>{r.current?.focus(),r.current?.select()},[]);let p=(0,M.useCallback)(l=>{if(m.current)return;m.current=!0;let g=s.trim();l&&g&&g!==t&&e.onCommit(e.row,g),e.onCancel()},[t,e,s]);return(0,T.jsx)("input",{ref:r,type:"text",className:"kanban-rename-input",maxLength:200,value:s,onChange:l=>a(l.currentTarget.value),onClick:l=>l.stopPropagation(),onBlur:()=>p(!0),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"?(l.preventDefault(),p(!0)):l.key==="Escape"&&(l.preventDefault(),p(!1))}})}function ns(e){let{callbacks:t,row:s}=e,a=Zs(s),r=de(s),m=Re(s),p=Vs(s.workingDir),l=qs(s),g=[m,p!=="-"?p:null].filter(Boolean).join(" \xB7 "),C=String(s.status??"unknown"),w=typeof s.remoteDeployment=="string"?s.remoteDeployment:"",S=e.editingId===s.sessionId,B=t.selectedSessionIds.has(String(s.sessionId)),A=["kanban-card",B?"selected":"",w?"kanban-card-remote":"",s.locked?"locked":"",e.dragId===s.sessionId?"dragging":"",e.dropBeforeId===s.sessionId?"drop-before":""].filter(Boolean).join(" "),N=w?null:(0,T.jsxs)("span",{className:"kanban-card-actions-rail",children:[(0,T.jsx)(He,{action:"history",icon:t.icons.history,label:o("sessions.history.title"),onClick:()=>t.onHistory(s)}),s.webPort&&t.onOpenTerminal?(0,T.jsx)(He,{action:"terminal",icon:t.icons.terminal,label:o("sessions.openReadonlyTerminal"),onClick:()=>t.onOpenTerminal?.(s)}):null,s.webPort&&t.onOpenWritableTerminal?(0,T.jsx)(He,{action:"write-link",icon:t.icons.key,label:o("sessions.openWritableTerminal"),onClick:x=>t.onOpenWritableTerminal?.(s,x)}):null,s.feishuChatLink?(0,T.jsx)("a",{className:"card-act kanban-card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),onClick:x=>x.stopPropagation(),dangerouslySetInnerHTML:_e(t.icons.feishu)}):null,(0,T.jsx)(He,{action:"lock",className:s.locked?"locked":"",icon:s.locked?t.icons.unlock:t.icons.lock,label:t.lockActionLabel(s),onClick:x=>t.onToggleLock(s,x)}),(0,T.jsx)(He,{action:"details",icon:t.icons.details,label:o("sessions.details"),onClick:()=>t.onDetails(s)}),t.canRestartSession(s)?(0,T.jsx)(He,{action:"restart",icon:t.icons.restart,label:o("sessions.restart"),onClick:x=>t.onRestart(s,x)}):null]});return(0,T.jsxs)("article",{className:A,"data-id":s.sessionId,tabIndex:0,role:"button","aria-pressed":B,draggable:!0,onClick:x=>e.onCardClick(s,x),onKeyDown:x=>e.onCardKeyDown(s,x),onDragStart:x=>e.onDragStartCard(s,x),children:[(0,T.jsxs)("div",{className:"kanban-card-top",children:[(0,T.jsx)("span",{className:`badge cli-${Zt(s.cliId)}`,children:s.cliId??"unknown"}),s.adopt?(0,T.jsx)("span",{className:"badge",children:"adopt"}):null,s.locked?(0,T.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null,w?(0,T.jsx)("span",{className:"badge kanban-remote-badge",title:o("sessions.kanban.remoteHint",{name:w}),children:w}):null,N]}),(0,T.jsx)("div",{className:"kanban-card-title-row",children:S?(0,T.jsx)(so,{row:s,onCancel:e.onEditDone,onCommit:t.onRename}):(0,T.jsx)("p",{className:"kanban-card-title",title:String(s.title??a),onDoubleClick:x=>{x.stopPropagation(),e.cancelOpen(),w||e.onBeginEdit(s)},children:String(a).slice(0,140)})}),g||l?(0,T.jsxs)("div",{className:"kanban-card-meta-row",children:[g?(0,T.jsx)("p",{className:"kanban-card-desc",title:g,children:g}):(0,T.jsx)("span",{className:"kanban-card-desc kanban-card-desc-empty","aria-hidden":"true"}),l?(0,T.jsx)("span",{className:"session-signal",title:l,children:l}):null]}):null,(0,T.jsxs)("div",{className:"kanban-card-foot",children:[(0,T.jsx)("span",{className:"kanban-card-owner",dangerouslySetInnerHTML:_e(`${xe({name:r,larkAppId:s.larkAppId,size:"sm"})}<span>${Be(r)}</span>`)}),(0,T.jsxs)("span",{className:"kanban-card-updated",children:[o("sessions.kanban.updated",{time:Ne(s.lastMessageAt)}),(0,T.jsx)("span",{className:"kanban-card-dot","data-status":Zt(C),title:t.sessionStatusText(C)})]})]})]})}function ts(e){let t=e.item;if(t.type==="card")return(0,T.jsx)(ns,{...e.cardProps,row:t.row});let s=Re(t.rows[0])??t.chatId,a=e.dragCluster?.chatId===t.chatId&&e.dragCluster.col===e.columnId;return(0,T.jsxs)("div",{className:`kanban-cluster${e.expanded?" expanded":" collapsed"}${a?" dragging":""}`,"data-chat":t.chatId,children:[(0,T.jsxs)("header",{draggable:!0,title:`${s} \xB7 ${o("sessions.kanban.clusterDragHint")}`,onDragStart:r=>{e.columnId&&e.onDragStartCluster(t.chatId,e.columnId,r)},children:[(0,T.jsx)("span",{className:"kanban-cluster-avatar",dangerouslySetInnerHTML:_e(nn({chatId:t.chatId,name:s,size:"sm"}))}),(0,T.jsx)("span",{className:"kanban-cluster-name",children:s}),(0,T.jsx)("span",{className:"kanban-cluster-count",children:t.rows.length}),(0,T.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,T.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,T.jsx)("path",{d:"m5.5 6.5 2.5 2.5 2.5-2.5"})})})]}),e.expanded?t.rows.map(r=>(0,T.jsx)(ns,{...e.cardProps,row:r},r.sessionId)):null]})}function os(e){let[t,s]=(0,M.useState)(e),[a,r]=(0,M.useState)(null),[m,p]=(0,M.useState)(null),[l,g]=(0,M.useState)(null),[C,w]=(0,M.useState)(null),[S,B]=(0,M.useState)(()=>new Set),A=(0,M.useRef)(null),N=(0,M.useRef)(null),x=(0,M.useRef)(null),R=(0,M.useRef)(new Map),K=(0,M.useRef)(new Map),U=(0,M.useRef)(m),z=!!a||!!m,O=(0,M.useCallback)(()=>{x.current!==null&&(clearTimeout(x.current),x.current=null)},[]),q=(0,M.useCallback)(I=>{N.current=no(e.host),s(I)},[e.host]);(0,M.useEffect)(()=>{if(z){A.current=e;return}q(e)},[q,z,e]),(0,M.useEffect)(()=>{if(z||!A.current)return;let I=A.current;A.current=null,q(I)},[q,z]),(0,M.useLayoutEffect)(()=>{to(e.host,N.current),N.current=null},[t,e.host]),(0,M.useEffect)(()=>{U.current=m},[m]),(0,M.useEffect)(()=>()=>O(),[O]);let F=(0,M.useMemo)(()=>eo(t),[t]);(0,M.useLayoutEffect)(()=>{R.current=F.groups,K.current=F.rowById},[F]),(0,M.useEffect)(()=>{t.groupBy==="team"&&!t.teamsLoaded&&t.onNeedTeams()},[t]),(0,M.useEffect)(()=>{t.groupBy==="team"&&F.mode==="flow"&&F.team&&t.onNeedTeamBoard(F.team)},[t,F]),(0,M.useEffect)(()=>{t.onTeamScope(F.mode==="flow"?F.scope:null)},[t,F]);let se=(0,M.useCallback)(()=>{p(null),g(null),w(null)},[]),D=(0,M.useCallback)(I=>{B(v=>{let H=new Set(v);return H.has(I)?H.delete(I):H.add(I),H})},[]),pe=(0,M.useCallback)(I=>{O(),!un(I)&&r(I.sessionId)},[O]),Y=(0,M.useCallback)((I,v)=>{un(I)||v.target.closest("a, button, input, label")||(O(),x.current=setTimeout(()=>{x.current=null,t.onToggleSelect(I)},220))},[O,t]),fe=(0,M.useCallback)((I,v)=>{v.key!=="Enter"&&v.key!==" "||v.target!==v.currentTarget||un(I)||(v.preventDefault(),t.onToggleSelect(I))},[t]),oe=(0,M.useCallback)((I,v)=>{t.groupBy!=="bot"&&(O(),p({kind:"card",id:String(I.sessionId)}),v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(I.sessionId))))},[O,t.groupBy]),ce=(0,M.useCallback)((I,v,H)=>{t.groupBy!=="bot"&&(O(),p({kind:"cluster",chatId:I,col:v}),H.dataTransfer&&(H.dataTransfer.effectAllowed="move",H.dataTransfer.setData("text/plain",`cluster:${I}`)))},[O,t.groupBy]),W=(0,M.useCallback)((I,v)=>{!U.current||t.groupBy==="bot"||(v.preventDefault(),v.dataTransfer&&(v.dataTransfer.dropEffect="move"),g(I),w(es(v.currentTarget,v.clientY)?.dataset.id??null))},[t.groupBy]),Ce=(0,M.useCallback)((I,v)=>{let H=U.current;if(!H||t.groupBy==="bot")return;v.preventDefault();let ae=es(v.currentTarget,v.clientY);se();let ee=R.current,ie=I;if(H.kind==="cluster"){let f=(ee.get(H.col)??[]).filter(J=>String(J.chatId)===H.chatId).filter(J=>!(J.status==="closed"&&ie!=="done"));if(!f.length)return;let L=new Set(f.map(J=>J.sessionId)),E=(ee.get(ie)??[]).filter(J=>!L.has(J.sessionId)),P=ae?E.findIndex(J=>J.sessionId===ae.dataset.id):E.length;P<0&&(P=E.length);let _=P>0?E[P-1]:null,he=P<E.length?E[P]:null,Q=Fn(_?De(_):null,he?De(he):null);t.onMoveRows(f.map((J,Ee)=>({row:J,column:ie,position:Q+Ee*.001})));return}let X=K.current.get(H.id);if(!X||X.status==="closed"&&ie!=="done")return;let G=(ee.get(ie)??[]).filter(f=>f.sessionId!==H.id),re=ae?G.findIndex(f=>f.sessionId===ae.dataset.id):G.length;re<0&&(re=G.length);let ve=re>0?G[re-1]:null,$e=re<G.length?G[re]:null,Ke=Fn(ve?De(ve):null,$e?De($e):null);t.onMoveRows([{row:X,column:ie,position:Ke}])},[se,t]),be={dragId:m?.kind==="card"?m.id:null,dropBeforeId:C,editingId:a,groupBy:t.groupBy,callbacks:t,cancelOpen:O,onBeginEdit:pe,onCardClick:Y,onCardKeyDown:fe,onDragStartCard:oe,onEditDone:()=>r(null)};return F.mode==="loading"?(0,T.jsx)(Pe,{label:o("sessions.kanban.teamLoading"),className:"kanban-loading-state"}):F.mode==="bot"?F.columns.length?(0,T.jsx)(T.Fragment,{children:F.columns.map(I=>(0,T.jsxs)("section",{className:"kanban-column kanban-bot-col","data-bot":I.key,children:[(0,T.jsxs)("header",{children:[(0,T.jsx)("span",{className:"kanban-col-avatar",dangerouslySetInnerHTML:_e(xe({name:I.name,larkAppId:I.larkAppId,size:"sm"}))}),(0,T.jsx)("h2",{children:I.name}),(0,T.jsx)("span",{className:"kanban-col-count",children:I.rows.length})]}),(0,T.jsx)("div",{className:"kanban-col-list",onDragOver:v=>W(I.key,v),onDragEnd:se,children:I.clusters.map(v=>(0,T.jsx)(ts,{item:v,dragCluster:m?.kind==="cluster"?m:null,cardProps:be,expanded:v.type==="cluster"&&S.has(`bot:${I.key}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&D(`bot:${I.key}:${v.chatId}`)},onDragStartCluster:ce},v.type==="card"?v.row.sessionId:v.chatId))})]},I.key))}):(0,T.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}):(0,T.jsx)(T.Fragment,{children:F.columns.map(I=>(0,T.jsxs)("section",{className:`kanban-column kanban-${I.id}${l===I.id?" drag-over":""}`,"data-col":I.id,onDragOver:v=>W(I.id,v),onDrop:v=>Ce(I.id,v),onDragEnd:se,children:[(0,T.jsxs)("header",{children:[(0,T.jsx)("span",{className:"kanban-col-icon",dangerouslySetInnerHTML:_e(Ys(I.id))}),(0,T.jsx)("h2",{children:o(I.labelKey)}),(0,T.jsx)("span",{className:"kanban-col-count",children:I.rows.length+I.hiddenCount})]}),(0,T.jsxs)("div",{className:"kanban-col-list",children:[I.rows.length?I.clusters.map(v=>(0,T.jsx)(ts,{item:v,columnId:I.id,dragCluster:m?.kind==="cluster"?m:null,cardProps:be,expanded:v.type==="cluster"&&S.has(`${I.id}:${v.chatId}`),onToggleExpanded:()=>{v.type==="cluster"&&D(`${I.id}:${v.chatId}`)},onDragStartCluster:ce},v.type==="card"?v.row.sessionId:v.chatId)):(0,T.jsx)("div",{className:"kanban-col-empty",children:o("sessions.board.emptyColumn")}),I.hiddenCount?(0,T.jsx)("div",{className:"kanban-col-more",children:o("sessions.kanban.moreHidden",{count:I.hiddenCount})}):null]})]},I.id))})}var n=Le(sn(),1),oo=new Set(["image/png","image/jpeg","image/gif","image/webp"]),as=8,ao=10*1024*1024,io=25*1024*1024;function ro(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 lo(e){return e===168?"7d":`${e}H`}var co=Rn.map(e=>({value:String(e),label:lo(e)}));function le(e){return{__html:e}}function te(){return typeof window>"u"?void 0:window.localStorage}function gn(e){let t=String(e.status??"unknown");return(0,n.jsx)("span",{className:`status status-${An(t)}`,children:Ge(t)})}function Jn(e){return e.row.locked?(0,n.jsx)("span",{className:"session-lock-badge",title:o("sessions.locked"),children:o("sessions.locked")}):null}function we(e){let t=e.className??`card-act${e.kind?` ${e.kind}`:""}`;return(0,n.jsx)("button",{type:"button",id:e.id,className:t,"data-action":e.action,"data-tip":e.label,"aria-label":e.label,disabled:e.disabled,onClick:s=>{s.stopPropagation(),e.onClick(s.currentTarget)},dangerouslySetInnerHTML:le(e.icon)})}function ls(e){if(!e.url||!Oe())return null;let t=ln();return(0,n.jsxs)("span",{className:"term-pill",children:[(0,n.jsx)("a",{className:"term-btn term-open",href:e.url,target:"_blank",rel:"noopener","data-action":"terminal","data-tip":o("sessions.openReadonlyTerminal"),"aria-label":o("sessions.openReadonlyTerminal"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:le(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(),$n(e.row,s.currentTarget)},dangerouslySetInnerHTML:le(j.key)}):null]})}function cs(e){let t=e.row;return t.scope!=="chat"||!t.feishuChatLink?null:(0,n.jsx)("a",{className:e.className??"card-act",href:t.feishuChatLink,target:"_blank",rel:"noopener","data-tip":o("sessions.openChat"),"aria-label":o("sessions.openChat"),onClick:s=>s.stopPropagation(),dangerouslySetInnerHTML:le(j.feishu)})}function uo(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 is(e,t){return t==="spawnedAt"||t==="lastMessageAt"?Number(e[t]??0):t==="tokenIn"?an(e.tokenUsage?.in)??-1:t==="tokenOut"?an(e.tokenUsage?.out)??-1:t==="adopt"?!!e.adopt:t==="chat"?Me(e).toLowerCase():t==="cliId"?qe(e).toLowerCase():String(e[t]??"").toLowerCase()}function qe(e){return String(e.runtimeDisplayName??e.cliId??"unknown")}function rs(e,t,s,a){let r=is(e,s),m=is(t,s),p=0;return typeof r=="number"&&typeof m=="number"?p=r-m:typeof r=="boolean"&&typeof m=="boolean"?p=Number(r)-Number(m):p=String(r).localeCompare(String(m)),p===0&&(p=Number(e.lastMessageAt??0)-Number(t.lastMessageAt??0)),a==="asc"?p:-p}function mo(e){return e.agentAttention?.reason?e.agentAttention.reason:e.agentAttention?o("sessions.board.signalAgent"):e.pendingRepo?o("sessions.board.signalRepo"):e.tuiPromptActive?o("sessions.board.signalPrompt"):e.status==="limited"?o("sessions.board.signalLimited"):""}function go(e,t,s){let a=s==="needs-you"?tn(e):Number(e.lastMessageAt??0),r=s==="needs-you"?tn(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 po(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 fo(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 Wn(e,t){(0,c.useEffect)(()=>{let s=e.current;if(s)if(t){if(!s.open)try{s.showModal()}catch{}}else s.open&&s.close()},[t,e])}function jn(e){let[t,s]=(0,c.useState)(!1);return(0,n.jsx)("button",{type:"button","data-copy":e.value,onClick:()=>{on(e.value,o("sessions.copy")).then(a=>{a&&(s(!0),window.setTimeout(()=>s(!1),800))})},children:t?o("sessions.copied"):o("sessions.copy")})}function bo(e){let[t,s]=(0,c.useState)(0),[a,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)("button",{id:"locate-btn",type:"button",disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.locateSession(e.row);r(!1),m&&s(30)},children:t>0?o("sessions.cooldown",{seconds:t}):a?o("sessions.locating"):o("sessions.locate")})}function ho(e){let[t,s]=(0,c.useState)(0),[a,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(t<=0)return;let m=window.setTimeout(()=>s(t-1),1e3);return()=>window.clearTimeout(m)},[t]),(0,n.jsx)(we,{action:"locate",icon:j.pin,label:t>0?o("sessions.cooldown",{seconds:t}):o("sessions.locate"),disabled:a||t>0,onClick:async()=>{r(!0);let m=await e.onLocate(e.row);r(!1),m&&s(30)}})}function yo(e){let t=ge.filter(l=>e.selected.has(l)).length,s=(0,c.useRef)(null),[a,r]=(0,c.useState)("");(0,c.useEffect)(()=>{let l=()=>{s.current?.open&&(s.current.open=!1)},g=w=>{let S=s.current;S?.open&&!S.contains(w.target)&&l()},C=w=>{w.key==="Escape"&&l()};return document.addEventListener("pointerdown",g,!0),document.addEventListener("keydown",C),()=>{document.removeEventListener("pointerdown",g,!0),document.removeEventListener("keydown",C)}},[]);let m=a.trim().toLowerCase(),p=m?ge.filter(l=>l.toLowerCase().includes(m)):ge;return(0,n.jsxs)("details",{className:"filter-cli",ref:s,children:[(0,n.jsxs)("summary",{children:[o("sessions.cli")," \xB7 ",(0,n.jsx)("b",{id:"cli-filter-count",className:t===ge.length?void 0:"cli-filter-active",children:t===ge.length?o("common.all"):`${t}/${ge.length}`})]}),(0,n.jsxs)("div",{className:"filter-cli-pop",role:"group","aria-label":o("sessions.cli"),children:[(0,n.jsxs)("div",{className:"filter-cli-head",children:[(0,n.jsx)("input",{type:"search",className:"filter-cli-search",placeholder:o("sessions.cliSearch"),value:a,autoFocus:!0,onChange:l=>r(l.currentTarget.value),onClick:l=>l.stopPropagation()}),(0,n.jsxs)("div",{className:"filter-cli-bulk",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{for(let l of ge)e.selected.has(l)||e.onToggle(l,!0)},children:o("sessions.cliSelectAll")}),(0,n.jsx)("button",{type:"button",onClick:()=>{for(let l of ge)e.selected.has(l)&&e.onToggle(l,!1)},children:o("sessions.cliClear")})]})]}),(0,n.jsx)("div",{className:"filter-cli-options",children:p.length===0?(0,n.jsx)("span",{className:"filter-cli-empty",children:o("sessions.cliNoMatch")}):p.map(l=>(0,n.jsxs)("label",{className:"filter-check",children:[(0,n.jsx)("input",{type:"checkbox",name:"cli",value:l,checked:e.selected.has(l),onChange:g=>e.onToggle(l,g.currentTarget.checked)}),(0,n.jsx)("span",{children:l})]},l))})]})]})}function ko(e){let t=[{value:"",label:o("sessions.anyStatus")},...Ot.map(l=>({value:l,label:Ge(l)}))],s=[{value:"",label:o("sessions.adoptAny")},{value:"yes",label:o("sessions.adoptYes")},{value:"no",label:o("sessions.adoptNo")}],a=t.find(l=>l.value===e.filters.status)?.label??o("sessions.anyStatus"),r=s.find(l=>l.value===e.filters.adopt)?.label??o("sessions.adoptAny"),m=[{value:"",label:o("sessions.chatAny")},...e.chatOptions],p=m.find(l=>l.value===e.filters.chat)?.label??o("sessions.chatAny");return(0,n.jsxs)("form",{id:"filters",className:"filters dashboard-toolbar sessions-filters",onSubmit:l=>l.preventDefault(),children:[(0,n.jsx)("input",{type:"search",name:"q",placeholder:o("sessions.search"),value:e.filters.q,onChange:l=>{let g=l.currentTarget.value;e.setFilters(C=>({...C,q:g}))}}),(0,n.jsx)(We,{label:a,value:e.filters.status,options:t,onChange:l=>e.setFilters(g=>({...g,status:l}))}),(0,n.jsx)(We,{label:r,value:e.filters.adopt,options:s,onChange:l=>e.setFilters(g=>({...g,adopt:l}))}),(0,n.jsx)(We,{ariaLabel:o("sessions.location"),className:"filter-chat-menu",label:p,value:e.filters.chat,options:m,searchable:!0,searchPlaceholder:o("sessions.chatSearch"),searchEmptyLabel:o("sessions.chatNoMatch"),onChange:l=>e.setFilters(g=>({...g,chat:l}))}),(0,n.jsx)(yo,{selected:e.filters.cli,onToggle:(l,g)=>{e.setFilters(C=>{let w=new Set(C.cli);return g?w.add(l):w.delete(l),{...C,cli:w}})}}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"multiBotTopics",checked:e.filters.multiBotTopics,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,multiBotTopics:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.multiBotTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"botTriggeredTopics",checked:e.filters.botTriggeredTopics,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,botTriggeredTopics:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.botTriggeredTopics")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"showUnknownChats",checked:e.filters.showUnknownChats,onChange:l=>{let g=l.currentTarget.checked;ut(te(),g),e.setFilters(C=>({...C,showUnknownChats:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.showUnknownChats")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsxs)("label",{className:"filter-toggle",children:[(0,n.jsx)("input",{type:"checkbox",name:"active",checked:e.filters.active,onChange:l=>{let g=l.currentTarget.checked;e.setFilters(C=>({...C,active:g}))}}),(0,n.jsx)("span",{className:"filter-toggle-label",children:o("sessions.activeOnly")}),(0,n.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,n.jsx)(Co,{...e.idleCleanup})]})}function wo(e){let t=!!e.closeProgress||!!e.lockProgress,s=e.lockProgress?.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.lockSelected"),a=e.lockProgress&&!e.lockProgress.locked?`${e.lockProgress.done}/${e.lockProgress.total}`:o("sessions.unlockSelected"),r=Oe();return(0,n.jsxs)("div",{id:"bulk-bar",className:"bulk-bar",hidden:e.selectedCount===0,children:[(0,n.jsx)("span",{id:"bulk-count",children:o("sessions.selectedCount",{count:e.selectedCount})}),r?(0,n.jsx)("button",{type:"button",id:"bulk-monitor-room",disabled:t||e.selectedCount===0,onClick:e.onAddToMonitorRoom,children:e.monitorRoomText??o("sessions.addToMonitorRoom")}):null,(0,n.jsx)("button",{type:"button",id:"bulk-lock",disabled:t||e.lockDisabled,onClick:()=>e.onLock(!0),children:s}),(0,n.jsx)("button",{type:"button",id:"bulk-unlock",disabled:t||e.unlockDisabled,onClick:()=>e.onLock(!1),children:a}),(0,n.jsx)("button",{type:"button",id:"bulk-close",className:"contrast",disabled:t,onClick:e.onClose,children:e.closeProgress?`${e.closeProgress.done}/${e.closeProgress.total}`:o("sessions.closeSelected")}),(0,n.jsx)("button",{type:"button",id:"bulk-clear",disabled:t,onClick:e.onClear,children:o("sessions.clearSelection")})]})}function Co(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(e.hours),[m,p]=(0,c.useState)(),l=(0,c.useRef)(null),g=(0,c.useRef)(null),C=(0,c.useRef)(null),w=e.countForHours(a);return(0,c.useEffect)(()=>{t?r(e.hours):p(void 0)},[t,e.hours]),(0,c.useLayoutEffect)(()=>{if(!t)return;let S=()=>{let A=g.current,N=C.current;if(!A||!N)return;let x=12,R=window.innerWidth,K=window.innerHeight,U=Math.max(0,Math.min(292,R-x*2)),z=A.getBoundingClientRect(),O=N.offsetHeight,q=Math.max(x,R-U-x),F=z.left+z.width/2-U/2,se=Math.min(Math.max(F,x),q),D=z.bottom+8,pe=z.top-O-8,Y=D+O<=K-x||pe<x?Math.min(Math.max(D,x),Math.max(x,K-O-x)):Math.max(x,pe);p({left:se,top:Y,width:U})},B=window.requestAnimationFrame(S);return window.addEventListener("resize",S),window.addEventListener("scroll",S,!0),()=>{window.cancelAnimationFrame(B),window.removeEventListener("resize",S),window.removeEventListener("scroll",S,!0)}},[t,e.busy,e.status]),(0,c.useEffect)(()=>{if(!t)return;let S=A=>{let N=A.target;N instanceof Node&&l.current?.contains(N)||N instanceof Node&&C.current?.contains(N)||s(!1)},B=A=>{A.key==="Escape"&&s(!1)};return document.addEventListener("pointerdown",S,!0),document.addEventListener("keydown",B),()=>{document.removeEventListener("pointerdown",S,!0),document.removeEventListener("keydown",B)}},[t]),(0,n.jsxs)("div",{id:"idle-cleanup-bar",className:`idle-cleanup-bar${w===0?" is-empty":""}${t?" is-open":""}`,ref:l,children:[(0,n.jsxs)("button",{ref:g,type:"button",id:"idle-cleanup-run",className:"contrast idle-cleanup-run","aria-haspopup":"dialog","aria-expanded":t,disabled:e.busy,onClick:()=>s(S=>!S),children:[(0,n.jsxs)("svg",{className:"idle-cleanup-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M3.5 6.5h17"}),(0,n.jsx)("path",{d:"M9 3.5h6"}),(0,n.jsx)("path",{d:"m6.5 6.5.9 13h9.2l.9-13"}),(0,n.jsx)("path",{d:"M10 10.5v5M14 10.5v5"})]}),(0,n.jsx)("span",{children:o("sessions.idleCleanupRun")})]}),t&&typeof document<"u"?(0,mn.createPortal)((0,n.jsxs)("div",{ref:C,className:"idle-cleanup-pop",role:"dialog","aria-label":o("sessions.idleCleanupRun"),style:m??{visibility:"hidden"},children:[(0,n.jsxs)("div",{className:"idle-cleanup-pop-head",children:[(0,n.jsx)("span",{className:"idle-cleanup-pop-title",children:o("sessions.idleCleanupRun")}),(0,n.jsxs)("span",{id:"idle-cleanup-count",className:"idle-cleanup-count",children:[(0,n.jsx)("span",{className:"idle-cleanup-dot","aria-hidden":"true"}),o("sessions.idleCleanupCount",{count:w})]})]}),(0,n.jsxs)("div",{className:"idle-cleanup-pop-field",children:[(0,n.jsx)("span",{className:"idle-cleanup-label",children:o("sessions.idleCleanupOlderThan")}),(0,n.jsx)("div",{id:"idle-cleanup-threshold",className:"idle-cleanup-threshold-options",role:"radiogroup","aria-label":o("sessions.idleCleanupThreshold"),children:co.map(S=>{let B=Mn(S.value),A=B===a;return(0,n.jsx)("button",{type:"button",className:A?"active":void 0,"aria-pressed":A?"true":"false",disabled:e.busy,onClick:()=>r(B),children:S.label},S.value)})})]}),e.busy&&e.status?(0,n.jsx)("span",{id:"idle-cleanup-status",className:"idle-cleanup-status","aria-live":"polite",children:e.status}):null,(0,n.jsxs)("div",{className:"idle-cleanup-pop-actions",children:[(0,n.jsx)("button",{type:"button",className:"idle-cleanup-cancel",disabled:e.busy,onClick:()=>s(!1),children:o("sessions.idleCleanupCancel")}),(0,n.jsx)("button",{type:"button",className:"idle-cleanup-confirm",disabled:e.busy||w===0,onClick:()=>{e.onRun(a).then(()=>s(!1))},children:o("sessions.idleCleanupApply")})]})]}),document.body):null]})}function vo(e){let t=(0,c.useRef)(null);(0,c.useLayoutEffect)(()=>{t.current&&(t.current.indeterminate=e.selectAllIndeterminate)},[e.selectAllIndeterminate]);let s=[{id:"botName",label:o("sessions.bot")},{id:"cliId",label:o("sessions.cli")},{id:"status",label:o("sessions.status")},{id:"chat",label:o("sessions.location")},{id:"tokenIn",label:o("sessions.tokenIn")},{id:"tokenOut",label:o("sessions.tokenOut")},{id:"title",label:o("sessions.titleCol")},{id:"workingDir",label:o("sessions.workingDir")},{id:"spawnedAt",label:o("sessions.created")},{id:"lastMessageAt",label:o("sessions.last")},{id:"adopt",label:o("sessions.adopt")}],a=s.filter(l=>!e.hiddenColumns.has(l.id)),r=2+a.length,m={select:o("sessions.selectSession"),botName:o("sessions.bot"),cliId:o("sessions.cli"),status:o("sessions.status"),chat:o("sessions.location"),tokenIn:o("sessions.tokenIn"),tokenOut:o("sessions.tokenOut"),title:o("sessions.titleCol"),workingDir:o("sessions.workingDir"),spawnedAt:o("sessions.created"),lastMessageAt:o("sessions.last"),adopt:o("sessions.adopt"),actions:o("sessions.actions")};function p(l,g){switch(g){case"botName":return(0,n.jsx)("td",{"data-label":m.botName,children:de(l)});case"cliId":return(0,n.jsx)("td",{"data-label":m.cliId,children:(0,n.jsx)("span",{className:`badge cli-${An(l.cliId)}`,title:l.runtimeId&&l.runtimeId!==l.cliId?`${l.cliId} / ${l.runtimeId}`:void 0,children:qe(l)})});case"status":return(0,n.jsxs)("td",{"data-label":m.status,children:[(0,n.jsx)(gn,{status:l.status}),(0,n.jsx)(Jn,{row:l})]});case"chat":return(0,n.jsx)("td",{className:"session-location-cell","data-label":m.chat,title:On(l),children:Me(l)});case"tokenIn":return(0,n.jsx)("td",{className:"token-cell","data-label":m.tokenIn,children:En(l.tokenUsage?.in)});case"tokenOut":return(0,n.jsx)("td",{className:"token-cell","data-label":m.tokenOut,children:En(l.tokenUsage?.out)});case"title":return(0,n.jsx)("td",{className:"sessions-table-text-cell","data-label":m.title,title:String(l.title??""),children:ue(l.title??"").slice(0,48)});case"workingDir":return(0,n.jsx)("td",{className:"sessions-table-path-cell","data-label":m.workingDir,title:l.workingDir??"",children:String(l.workingDir??"").slice(-34)});case"spawnedAt":return(0,n.jsx)("td",{"data-label":m.spawnedAt,children:Ne(l.spawnedAt)});case"lastMessageAt":return(0,n.jsx)("td",{"data-label":m.lastMessageAt,children:Ne(l.lastMessageAt)});case"adopt":return(0,n.jsx)("td",{"data-label":m.adopt,children:l.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null});default:return null}}return(0,n.jsxs)("table",{id:"sessions-table",hidden:e.hidden,children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:(0,n.jsx)("input",{ref:t,type:"checkbox",id:"select-all",title:o("sessions.activeOnly"),checked:e.selectAllChecked,disabled:e.selectAllDisabled,onChange:l=>e.onSelectAll(l.currentTarget.checked)})}),a.map(l=>(0,n.jsx)(uo,{sort:l.id,label:l.label,sortKey:e.sortKey,sortDir:e.sortDir,onSort:e.onSort},l.id)),(0,n.jsx)("th",{className:"session-table-columns-th",children:(0,n.jsxs)("details",{className:"session-table-columns-menu",children:[(0,n.jsxs)("summary",{title:o("sessions.columns"),children:[(0,n.jsx)("span",{className:"session-table-columns-icon","aria-hidden":"true",children:(0,n.jsx)("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M2 4h12M2 8h12M2 12h12"})})}),o("sessions.columns")]}),(0,n.jsxs)("div",{className:"session-table-columns-dropdown",role:"menu",children:[(0,n.jsxs)("div",{className:"session-table-columns-header",children:[(0,n.jsx)("span",{children:o("sessions.columnsMenu")}),(0,n.jsx)("button",{type:"button",className:"session-table-columns-reset",onClick:e.onResetColumns,children:o("sessions.columnsReset")})]}),s.map(l=>(0,n.jsxs)("label",{className:"session-table-columns-item",children:[(0,n.jsx)("input",{type:"checkbox",checked:!e.hiddenColumns.has(l.id),onChange:()=>e.onToggleColumn(l.id)}),l.label]},l.id))]})]})})]})}),(0,n.jsx)("tbody",{children:e.rows.length?e.rows.map(l=>{let g=l.status==="closed",C=String(l.sessionId);return(0,n.jsxs)("tr",{"data-id":C,onClick:()=>e.onOpen(l),children:[(0,n.jsx)("td",{className:"sessions-table-select-cell","data-label":m.select,onClick:w=>w.stopPropagation(),children:(0,n.jsx)("input",{type:"checkbox",className:"row-select",checked:e.selected.has(C),disabled:g,onChange:w=>e.onSelect(C,w.currentTarget.checked)})}),a.map(w=>(0,n.jsx)(c.Fragment,{children:p(l,w.id)},w.id)),(0,n.jsx)("td",{className:"sessions-table-action-cell","data-label":m.actions,children:(0,n.jsx)("button",{className:"open",type:"button",children:o("sessions.details")})})]},C)}):(0,n.jsx)("tr",{children:(0,n.jsx)("td",{colSpan:r,className:"empty",children:o("sessions.empty")})})})]})}function So(e){let{exchange:t}=e,s=(0,c.useRef)(null),a=(0,c.useRef)(null),r=(0,c.useRef)(null),[m,p]=(0,c.useReducer)(Pt,Bt),l=m.open,[g,C]=(0,c.useState)(null),w=`session-exchange-tooltip-${(0,c.useId)().replace(/[^a-zA-Z0-9_-]/g,"-")}`,S=(0,c.useCallback)(()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},[]),B=(0,c.useCallback)(()=>{S(),p("open")},[S]),A=(0,c.useCallback)(()=>{S(),p("close"),C(null)},[S]),N=(0,c.useCallback)(()=>{S(),r.current=window.setTimeout(A,120)},[S,A]),x=(0,c.useCallback)(()=>{let R=s.current,K=a.current;if(!R||!K)return;let U=R.getBoundingClientRect(),z=K.getBoundingClientRect(),O=12,q=9,F=U.top-O-q,se=window.innerHeight-U.bottom-O-q,D=F>=z.height||F>se?"top":"bottom",pe=U.left+U.width/2-z.width/2,Y=Math.min(Math.max(pe,O),Math.max(O,window.innerWidth-z.width-O)),fe=D==="top"?U.top-z.height-q:U.bottom+q,oe=Math.min(Math.max(fe,O),Math.max(O,window.innerHeight-z.height-O));C({left:Y,placement:D,top:oe})},[]);return(0,c.useLayoutEffect)(()=>{if(l)return x(),window.addEventListener("resize",x),window.addEventListener("scroll",x,!0),()=>{window.removeEventListener("resize",x),window.removeEventListener("scroll",x,!0)}},[t.botFullText,t.userFullText,l,x]),(0,c.useEffect)(()=>()=>S(),[S]),(0,c.useEffect)(()=>{if(!l)return;let R=U=>{let z=U.target;z instanceof Node&&(s.current?.contains(z)||a.current?.contains(z)||A())},K=U=>{U.key==="Escape"&&A()};return document.addEventListener("pointerdown",R),document.addEventListener("keydown",K),()=>{document.removeEventListener("pointerdown",R),document.removeEventListener("keydown",K)}},[A,l]),!t.userText&&!t.botText?null:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"session-card-exchange-wrap",children:(0,n.jsxs)("div",{ref:s,className:"session-card-exchange",role:"button",tabIndex:0,"aria-label":o("sessions.preview.showFull"),"aria-haspopup":"dialog","aria-controls":l?w:void 0,"aria-expanded":l,onClick:R=>{R.stopPropagation(),l?A():B()},onFocus:()=>{S(),p("focus")},onBlur:N,onPointerEnter:R=>{R.pointerType!=="touch"&&B()},onPointerLeave:R=>{R.pointerType!=="touch"&&N()},onKeyDown:R=>{R.key==="Escape"?A():(R.key==="Enter"||R.key===" ")&&(R.preventDefault(),l?A():B())},children:[t.userText?(0,n.jsxs)("div",{className:"session-card-exchange-line",children:[(0,n.jsx)("span",{children:o("sessions.history.user")}),(0,n.jsx)("p",{children:t.userText})]}):null,t.botText?(0,n.jsxs)("div",{className:"session-card-exchange-line bot",children:[(0,n.jsx)("span",{children:o("sessions.history.bot")}),(0,n.jsx)("p",{children:t.botText})]}):null]})}),l&&typeof document<"u"?(0,mn.createPortal)((0,n.jsx)("div",{ref:a,id:w,className:"session-card-exchange-tooltip",role:"dialog","aria-label":o("sessions.preview.latestExchange"),"data-placement":g?.placement??"top",style:{left:g?.left??-1e4,top:g?.top??-1e4,visibility:g?"visible":"hidden"},onPointerEnter:S,onPointerLeave:R=>{R.pointerType!=="touch"&&N()},onFocusCapture:S,onBlur:R=>{let K=R.relatedTarget;K&&(a.current?.contains(K)||s.current?.contains(K))||N()},onKeyDown:R=>{R.key==="Escape"&&(R.stopPropagation(),S(),p("escape-refocus"),C(null),s.current?.focus())},children:(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-scroll",children:[t.userFullText?(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-line",children:[(0,n.jsx)("span",{children:o("sessions.history.user")}),(0,n.jsx)("div",{className:"session-card-exchange-md",dangerouslySetInnerHTML:le(_n(t.userFullText))})]}):null,t.botFullText?(0,n.jsxs)("div",{className:"session-card-exchange-tooltip-line bot",children:[(0,n.jsx)("span",{children:o("sessions.history.bot")}),(0,n.jsx)("div",{className:"session-card-exchange-md",dangerouslySetInnerHTML:le(_n(t.botFullText))})]}):null]})}),document.body):null]})}function ds(e){let t=e.row,s=ue(t.title)||t.sessionId,a=de(t),r=Re(t),m=Xe(t),p=mo(t),l=Bn(t.workingDir),g=At(t),C=w=>{w.target.closest("a, button, input, label")||e.onToggleSelect(t)};return(0,n.jsxs)("article",{className:`session-card${e.selected?" selected":""}${t.locked?" locked":""}`,"data-id":t.sessionId,"aria-pressed":e.selected,onClick:C,children:[(0,n.jsxs)("div",{className:"session-card-top",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:le(xe({name:a,larkAppId:t.larkAppId,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-card-title",children:[(0,n.jsx)("strong",{title:String(t.title??s),children:String(s).slice(0,72)}),(0,n.jsxs)("span",{children:[a," \xB7 ",r??qe(t)]})]}),(0,n.jsxs)("span",{className:"session-card-status-group",children:[(0,n.jsx)(gn,{status:t.status}),(0,n.jsx)(Jn,{row:t})]})]}),l!=="-"||t.adopt||p?(0,n.jsxs)("div",{className:"session-card-meta",children:[l!=="-"?(0,n.jsx)("span",{title:t.workingDir??"",children:l}):null,t.adopt?(0,n.jsx)("span",{className:"badge",children:"adopt"}):null,p?(0,n.jsx)("span",{className:"session-signal",title:p,children:p}):null]}):null,(0,n.jsx)(So,{exchange:g}),(0,n.jsx)("div",{className:"session-card-time",children:(0,n.jsx)("span",{children:t.agentAttention?.at?`${o("sessions.board.waiting")} ${Ne(tn(t))}`:`${o("sessions.last")}: ${Ne(t.lastMessageAt)}`})}),(0,n.jsxs)("div",{className:"session-card-actions",children:[(0,n.jsx)(cs,{row:t}),!t.feishuChatLink||t.scope!=="chat"?(0,n.jsx)(ho,{row:t,onLocate:e.onLocate}):null,(0,n.jsx)(we,{action:"details",icon:j.details,label:o("sessions.details"),onClick:()=>e.onOpen(t)}),dn(t)?(0,n.jsx)(we,{action:"restart",icon:j.restart,label:o("sessions.restart"),onClick:w=>e.onRestart(t,w)}):null,(0,n.jsx)(ls,{row:t,url:m}),t.status!=="closed"?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(we,{action:"lock",icon:t.locked?j.unlock:j.lock,label:cn(t),kind:t.locked?"locked":"",onClick:w=>e.onLock(t,!t.locked,w)}),(0,n.jsx)(we,{action:"close",icon:j.close,label:o("sessions.close"),kind:"danger",onClick:w=>e.onClose(t,w)})]}):null]})]})}function Io(e){(0,c.useEffect)(()=>{!e.hidden&&!e.animated&&e.onAnimated()},[e.animated,e.hidden,e.onAnimated]);let t=new Map(Ln.map(a=>[a.id,[]]));for(let a of e.rows){let r=Kt(a);r&&t.get(r).push(a)}let s=e.order.map(a=>Ln.find(r=>r.id===a)).filter(a=>!!a);return(0,n.jsx)("div",{id:"sessions-board",className:`sessions-board${e.animated||e.hidden?"":" board-enter"}`,hidden:e.hidden,children:s.map((a,r)=>{let m=(t.get(a.id)??[]).sort((p,l)=>go(p,l,a.id));return(0,n.jsxs)("section",{className:`session-board-column session-board-${a.id}${e.dragColId===a.id?" dragging":""}${e.dragOverCol===a.id?" drag-over":""}`,"data-col":a.id,onDragOver:p=>{e.dragColId&&(p.preventDefault(),p.dataTransfer&&(p.dataTransfer.dropEffect="move"),e.dragColId!==a.id&&e.onDragOverCol(a.id))},onDrop:p=>{e.dragColId&&(p.preventDefault(),e.onMoveColumnTo(e.dragColId,a.id),e.onDragCol(null),e.onDragOverCol(null))},children:[(0,n.jsxs)("header",{draggable:!0,title:o("sessions.board.dragHint"),onDragStart:p=>{e.onDragCol(a.id),p.dataTransfer&&(p.dataTransfer.effectAllowed="move",p.dataTransfer.setData("text/plain",a.id))},onDragEnd:()=>{e.onDragCol(null),e.onDragOverCol(null)},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{children:o(a.labelKey)}),(0,n.jsx)("p",{children:o(a.hintKey)})]}),(0,n.jsxs)("span",{className:"session-board-head-right",children:[(0,n.jsxs)("span",{className:"session-board-move",children:[(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"-1","aria-label":o("sessions.board.moveLeft"),disabled:r===0,onClick:()=>e.onMoveColumn(a.id,-1),children:"\u2039"}),(0,n.jsx)("button",{type:"button","data-move-col":a.id,"data-dir":"1","aria-label":o("sessions.board.moveRight"),disabled:r===s.length-1,onClick:()=>e.onMoveColumn(a.id,1),children:"\u203A"})]}),(0,n.jsx)("span",{className:"session-board-count",children:m.length})]})]}),(0,n.jsx)("div",{className:"session-board-list",children:m.length?m.map(p=>(0,n.jsx)(ds,{row:p,selected:e.selected.has(p.sessionId),onToggleSelect:e.onToggleSelect,onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},p.sessionId)):(0,n.jsx)("div",{className:"session-board-empty",children:o("sessions.board.emptyColumn")})})]},a.id)})})}function To(e){let t=ue(e.title).trim();return t||(e.kind==="thread"?o("sessions.topic.untitled"):e.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession"))}function No(e){let t=(0,c.useMemo)(()=>rn(e.rows),[e.rows]),s=(0,c.useMemo)(()=>new Map(rn(e.relationRows??e.rows).map(a=>[a.key,a])),[e.relationRows,e.rows]);return(0,n.jsx)("div",{id:"sessions-topics",className:"sessions-topic-view",hidden:e.hidden,children:t.length?t.map(a=>{let r=s.get(a.key)??a,m=a.rows[0],p=Me(m),l=To(r),g=r.rootMessageId||r.chatId;return(0,n.jsxs)("section",{className:`session-topic-group${r.multiBot?" multi-bot":""}${r.inferredBotTriggered?" inferred-bot-trigger":""}`,"data-topic-key":a.key,children:[(0,n.jsxs)("header",{children:[(0,n.jsx)("span",{className:"session-topic-avatar",dangerouslySetInnerHTML:le(nn({chatId:a.chatId,name:p,size:"sm"}))}),(0,n.jsxs)("div",{className:"session-topic-heading",children:[(0,n.jsx)("span",{className:"session-topic-location",children:p}),(0,n.jsx)("h2",{title:r.title,children:l}),(0,n.jsx)("code",{title:g,children:r.kind==="thread"?g:r.kind==="chat"?o("sessions.topic.wholeChat"):o("sessions.topic.singleSession")})]}),(0,n.jsxs)("div",{className:"session-topic-summary","aria-label":o("sessions.topic.summary"),children:[r.multiBot?(0,n.jsx)("span",{className:"topic-chip collaboration",children:o("sessions.topic.collaboration")}):null,(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.sessions",{count:r.rows.length})}),(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.bots",{count:r.botCount})}),(0,n.jsx)("span",{className:"topic-chip active",children:o("sessions.topic.active",{count:r.activeCount})}),r.closedCount?(0,n.jsx)("span",{className:"topic-chip",children:o("sessions.topic.closed",{count:r.closedCount})}):null,r.inferredBotInputCount?(0,n.jsx)("span",{className:"topic-chip inferred",title:o("sessions.topic.inferredHint"),children:o("sessions.topic.botInputs",{count:r.inferredBotInputCount})}):null,(0,n.jsxs)("span",{className:"session-topic-updated",children:[o("sessions.last"),": ",Ne(r.latestActivityAt)]})]})]}),(0,n.jsx)("div",{className:"session-topic-members",children:a.rows.map(C=>(0,n.jsx)(ds,{row:C,selected:e.selected.has(C.sessionId),onToggleSelect:w=>{w.status!=="closed"?e.onToggleSelect(w):e.onOpen(w)},onOpen:e.onOpen,onHistory:e.onHistory,onLocate:e.onLocate,onRestart:e.onRestart,onLock:e.onLock,onClose:e.onClose},C.sessionId))})]},a.key)}):(0,n.jsx)("div",{className:"sessions-topic-empty",children:o("sessions.topic.empty")})})}function xo(e){let t=e.message,s=t.senderType==="user",a=t.senderType==="app"||t.senderType==="bot",r=s?t.senderName||(e.ownerOpenId&&t.senderId===e.ownerOpenId?o("sessions.history.owner"):o("sessions.history.user")):t.senderName||String(t.senderId??"").slice(0,16)||o(a?"sessions.history.bot":"sessions.history.system"),m=String(t.content??"").trim()||`[${t.msgType??"message"}]`;return(0,n.jsxs)("div",{className:`history-msg${e.groupStart?" group-start":" continuation"}`,children:[e.groupStart?s?t.senderAvatar?(0,n.jsx)("img",{className:"history-avatar-img",src:String(t.senderAvatar),alt:"",decoding:"async",referrerPolicy:"no-referrer"}):(0,n.jsx)("span",{className:"history-avatar-user","aria-hidden":"true",children:String(r).slice(0,1)}):(0,n.jsx)("span",{className:"history-avatar-bot",dangerouslySetInnerHTML:le(xe({name:r,larkAppId:t.senderBotAppId,avatarUrl:t.senderAvatar,size:"sm"}))}):(0,n.jsx)("span",{className:"history-avatar-spacer","aria-hidden":"true"}),(0,n.jsxs)("div",{className:"history-msg-main",children:[e.groupStart?(0,n.jsxs)("div",{className:"history-msg-meta",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)("time",{children:po(t.createTime)})]}):null,(0,n.jsx)("div",{className:"history-bubble",children:m})]})]})}function Ro(e){let t=(0,c.useRef)(null);Wn(t,!!e.state);let s=e.state?Ae.sessions.get(e.state.sessionId):null,a=(0,c.useRef)(null),r=!!e.state&&!e.state.loading&&!e.state.error&&e.state.messages.length>0;return(0,c.useEffect)(()=>{if(!r)return;let m=a.current;m&&(m.scrollTop=m.scrollHeight)},[r,e.state?.sessionId,e.state?.messages.length]),(0,n.jsx)("dialog",{id:"history-modal",className:"history-modal",ref:t,onClose:e.onClose,onClick:m=>{m.target===m.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:le(xe({name:de(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsx)("strong",{title:String(s.title??""),children:(ue(s.title)||s.sessionId).slice(0,60)}),(0,n.jsx)("span",{className:"history-scope-tag",children:o("sessions.history.title")})]}),(0,n.jsx)("span",{className:"term-modal-actions",children:(0,n.jsx)(we,{id:"history-close",icon: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)(Pe,{label:o("sessions.history.loading"),className:"term-modal-loading",compact:!0}):null,!e.state.loading&&e.state.error?(0,n.jsxs)("div",{className:"history-error",children:[o("sessions.history.fail"),": ",e.state.error,e.state.stale?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("span",{children:o("sessions.history.staleHint")})]}):null]}):null,!e.state.loading&&!e.state.error&&e.state.messages.length===0?(0,n.jsx)("div",{className:"history-error",children:o("sessions.history.empty")}):null,!e.state.loading&&!e.state.error&&e.state.messages.length>0?(0,n.jsx)("div",{className:"history-list",children:e.state.messages.map((m,p,l)=>(0,n.jsx)(xo,{message:m,ownerOpenId:e.state?.ownerOpenId,groupStart:p===0||Hn(l[p-1])!==Hn(m)},m.messageId??p))}):null]})]}):null})}function Mo(e){let[t,s]=(0,c.useState)(!1),[a,r]=(0,c.useState)(""),m=(0,c.useRef)(null),p=ue(e.row.title)||e.row.sessionId;(0,c.useLayoutEffect)(()=>{if(!t||!m.current)return;let g=m.current;g.focus(),g.select(),(()=>{let w=getComputedStyle(g),S=document.createElement("span");S.style.cssText="position:absolute;visibility:hidden;white-space:pre",S.style.fontSize=w.fontSize,S.style.fontFamily=w.fontFamily,S.style.fontWeight=w.fontWeight,S.style.letterSpacing=w.letterSpacing,S.textContent=g.value||" ",document.body.appendChild(S);let B=Math.round(window.innerWidth*.6);g.style.width=`${Math.min(Math.max(S.offsetWidth+22,80),B)}px`,S.remove()})()},[t,a]);let l=g=>{let C=a.trim();s(!1),g&&C&&C!==p&&e.onRename(e.row,C)};return t?(0,n.jsx)("input",{ref:m,type:"text",className:"term-modal-name-input",maxLength:200,value:a,onChange:g=>r(g.currentTarget.value),onBlur:()=>l(!0),onKeyDown:g=>{g.stopPropagation(),g.key==="Enter"?(g.preventDefault(),l(!0)):g.key==="Escape"&&(g.preventDefault(),l(!1))}}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("strong",{className:"term-modal-name",title:String(e.row.title??p),children:String(p).slice(0,60)}),(0,n.jsx)(we,{id:"term-modal-edit",icon:j.edit,label:o("sessions.kanban.rename"),onClick:()=>{r(ue(e.row.title)||""),s(!0)}})]})}function Eo(e){let t=(0,c.useRef)(null);Wn(t,!!e.state);let s=e.state?Ae.sessions.get(e.state.sessionId):null,a=s?Xe(s):null,r=e.state?.url??a??"",m=s?qe(s):"",p=s?Bn(s.workingDir):"";return(0,n.jsx)("dialog",{id:"term-modal",className:"term-modal",ref:t,onClose:e.onClose,onClick:l=>{l.target===l.currentTarget&&e.onClose()},children:e.state&&s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"term-modal-head",children:[(0,n.jsxs)("span",{className:"term-modal-title",children:[(0,n.jsx)("span",{dangerouslySetInnerHTML:le(xe({name:de(s),larkAppId:s.larkAppId,size:"sm"}))}),(0,n.jsxs)("span",{className:"term-modal-title-copy",children:[(0,n.jsxs)("span",{className:"term-modal-title-main",children:[(0,n.jsx)(Mo,{row:s,onRename:e.onRename}),(0,n.jsx)(gn,{status:s.status})]}),(0,n.jsxs)("span",{className:"term-modal-subtitle",children:[(0,n.jsx)("span",{children:de(s)}),(0,n.jsx)("span",{children:m}),p!=="-"?(0,n.jsx)("span",{title:s.workingDir??"",children:p}):null]})]})]}),(0,n.jsxs)("span",{className:"term-modal-actions",children:[s.feishuChatLink?(0,n.jsx)("a",{className:"card-act",href:s.feishuChatLink,target:"_blank",rel:"noopener",title:o("sessions.kanban.openFeishu"),"aria-label":o("sessions.kanban.openFeishu"),dangerouslySetInnerHTML:le(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:le(j.terminal)}),(0,n.jsx)(we,{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)(Pe,{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 Lo(e){let t=e.report;if(!t||t.status!=="ok"){let g=t?.error?.message?String(t.error.message):String(t?.status??"error");return(0,n.jsxs)("p",{children:[o("sessions.insightUnavailable"),": ",g]})}let s=t.agg??{};if(!s.totalSpans)return(0,n.jsx)("p",{children:o("sessions.insightEmpty")});let a=[t.meta?.asOf?o("sessions.insightAsOf",{asOf:String(t.meta.asOf)}):null,t.meta?.partial?o("sessions.insightPartial"):null].filter(Boolean),r=Array.isArray(t.suggestions)?t.suggestions:[],m=Array.isArray(t.spans)?t.spans:[],p=g=>g==="bad"||g==="warn"?"!":"i",l=g=>g==="error"?"!":g==="running"?"...":"ok";return(0,n.jsxs)(n.Fragment,{children:[a.length?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:a.join(" \xB7 ")}):null,(0,n.jsx)("p",{children:o("sessions.insightMetrics",{total:String(s.totalSpans??0),failed:String(s.failedSpans??0),slow:String(s.slowSpans??0),rw:s.readWriteRatio===null||s.readWriteRatio===void 0?"-":String(s.readWriteRatio),compactions:String(s.compactions??0)})}),r.length?(0,n.jsxs)("details",{open:!0,children:[(0,n.jsx)("summary",{children:o("sessions.insightSuggestions")}),(0,n.jsx)("ul",{style:{paddingLeft:18,margin:"6px 0"},children:r.map((g,C)=>(0,n.jsxs)("li",{children:[p(String(g.severity??""))," ",(0,n.jsx)("b",{children:String(g.title??"")})," - ",String(g.action??""),Array.isArray(g.evidence)&&g.evidence.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("br",{}),(0,n.jsx)("small",{style:{color:"var(--muted,#8f959e)"},children:g.evidence.join("; ")})]}):null]},C))})]}):null,m.length?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{children:[o("sessions.insightSpans")," (",m.length,")"]}),t.meta?.capped?(0,n.jsx)("p",{style:{fontSize:12,color:"var(--muted,#8f959e)"},children:o("sessions.insightCapped",{shown:String(t.meta.spansReturned??m.length),total:String(t.meta.spansTotal??m.length)})}):null,(0,n.jsx)("div",{style:{maxHeight:320,overflow:"auto"},children:(0,n.jsx)("table",{style:{width:"100%",fontSize:12},children:(0,n.jsx)("tbody",{children:[...m].sort((g,C)=>(g.relStartMs??0)-(C.relStartMs??0)).map((g,C)=>{let w=[g.inputSummary,g.outputSummary].filter(Boolean).map(String).join(" -> ");return(0,n.jsxs)("tr",{style:g.status==="error"?{color:"var(--danger,#d33)"}:void 0,children:[(0,n.jsx)("td",{children:l(String(g.status??""))}),(0,n.jsx)("td",{children:(0,n.jsx)("code",{children:String(g.tool??"")})}),(0,n.jsx)("td",{children:String(g.phase??"")}),(0,n.jsx)("td",{children:fo(g.durationMs)}),(0,n.jsxs)("td",{children:["#",String(g.turnIndex??0)]}),(0,n.jsx)("td",{children:w})]},C)})})})})]}):null]})}function Ao(e){let[t,s]=(0,c.useState)(null);if((0,c.useEffect)(()=>s(null),[e.row.sessionId]),!Te.authed)return null;let a=async()=>{s({loading:!0});try{let r=await fetch(`/api/sessions/${encodeURIComponent(e.row.sessionId)}/insight?detail=spans`),m=await r.json().catch(()=>({}));!m.ok||!m.report?s({loading:!1,error:String(m.error??r.status)}):s({loading:!1,report:m.report})}catch(r){s({loading:!1,error:String(r)})}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{id:"insight-btn",type:"button",disabled:t?.loading,onClick:()=>{a()},children:o("sessions.insight")}),(0,n.jsxs)("div",{id:"insight-area",children:[t?.loading?(0,n.jsx)(Pe,{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)(Lo,{report:t.report}):null]})]})}function Bo(e){let t=(0,c.useRef)(null);Wn(t,!!e.row);let s=e.row,a=s?Xe(s):null;return(0,n.jsx)("dialog",{id:"drawer",ref:t,onClose:e.onClose,onClick:r=>{r.target===r.currentTarget&&e.onClose()},children:s?(0,n.jsxs)("article",{children:[(0,n.jsxs)("header",{children:[(0,n.jsxs)("div",{className:"drawer-title-row",children:[(0,n.jsx)("h3",{children:ue(s.title)||s.sessionId}),(0,n.jsx)(we,{id:"drawer-close",className:"card-act drawer-close-btn",icon:j.close,label:o("sessions.dismiss"),onClick:e.onClose})]}),(0,n.jsxs)("span",{className:"drawer-status-line",children:[(0,n.jsx)(gn,{status:s.status}),(0,n.jsx)(Jn,{row:s})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("code",{children:s.sessionId})," ",(0,n.jsx)(jn,{value:s.sessionId})]})]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.bot"),":"]})," ",de(s)," \xB7 ",(0,n.jsxs)("b",{children:[o("sessions.cli"),":"]})," ",qe(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.location"),":"]})," ",Me(s)]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"chatId:"})," ",(0,n.jsx)("code",{children:s.chatId??""})," ",(0,n.jsx)(jn,{value:s.chatId??""})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"rootMessageId:"})," ",(0,n.jsx)("code",{children:s.rootMessageId??""})," ",(0,n.jsx)(jn,{value:s.rootMessageId??""})]}),s.threadId?(0,n.jsxs)("p",{children:[(0,n.jsx)("b",{children:"threadId:"})," ",(0,n.jsx)("code",{children:s.threadId})]}):null,(0,n.jsxs)("p",{children:[(0,n.jsxs)("b",{children:[o("sessions.workingDir"),":"]})," ",s.workingDir??"-"]}),(0,n.jsxs)("div",{className:"actions",children:[(0,n.jsx)(cs,{row:s}),!s.feishuChatLink||s.scope!=="chat"?(0,n.jsx)(bo,{row:s,locateSession:e.locateSession}):null,(0,n.jsx)("button",{id:"history-drawer-btn",type:"button",onClick:()=>e.openHistory(s),children:o("sessions.history.title")}),(0,n.jsx)(ls,{row:s,url:a}),ln()&&s.status!=="closed"?(0,n.jsx)("button",{id:"copy-cmd-btn",type:"button","data-tip":o("sessions.copyCommandHint"),onClick:r=>{_t(s,r.currentTarget)},children:o("sessions.copyCommand")}):null,dn(s)?(0,n.jsx)("button",{id:"restart-btn",type:"button",onClick:async r=>{await e.restartSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.restart")}):null,(0,n.jsx)("button",{id:"lock-btn",type:"button",onClick:r=>{e.setSessionLocked(s,!s.locked,r.currentTarget)},children:cn(s)}),s.queued&&s.status!=="closed"?(0,n.jsx)("button",{id:"start-btn",type:"button",className:"primary",onClick:async r=>{await e.startSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.create.start")}):null,s.status==="closed"?(0,n.jsx)("button",{id:"resume-btn",type:"button",className:"primary",onClick:async r=>{await e.resumeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.resume")}):null,s.status!=="closed"?(0,n.jsx)("button",{id:"close-btn",type:"button",className:"contrast",onClick:async r=>{await e.closeSession(s,r.currentTarget)&&e.onClose()},children:o("sessions.close")}):null,(0,n.jsx)(Ao,{row:s})]})]}):null})}function Po(e){let t=e.state;(0,c.useEffect)(()=>{let f=e.dialog;return()=>{f.open&&f.close()}},[e.dialog]),(0,c.useEffect)(()=>{let f=e.dialog;if(t){if(!f.open)try{f.showModal()}catch{}}else f.open&&f.close()},[e.dialog,t]),(0,c.useEffect)(()=>{let f=e.dialog,L=()=>e.onClose(),E=P=>{P.target===f&&e.onClose()};return f.addEventListener("close",L),f.addEventListener("click",E),()=>{f.removeEventListener("close",L),f.removeEventListener("click",E)}},[e]);let[s,a]=(0,c.useState)(""),[r,m]=(0,c.useState)([]),[p,l]=(0,c.useState)(new Set),[g,C]=(0,c.useState)("lead"),[w,S]=(0,c.useState)(""),[B,A]=(0,c.useState)("in_progress"),[N,x]=(0,c.useState)(""),[R,K]=(0,c.useState)(""),[U,z]=(0,c.useState)(!1),[O,q]=(0,c.useState)(!1),[F,se]=(0,c.useState)(""),[D,pe]=(0,c.useState)(()=>mt(te())),[Y,fe]=(0,c.useState)(null),[oe,ce]=(0,c.useState)(null),[W,Ce]=(0,c.useState)(0),be=(0,c.useRef)(null),I=(0,c.useRef)(1);if((0,c.useEffect)(()=>{t&&(a(""),m([]),l(new Set),C("lead"),S(""),A("in_progress"),x(""),K(""),z(!1),q(!1),se(""),fe(null),ce(null),Ce(0),I.current=1)},[t]),!t)return null;if(t.success){let f=t.success,L=typeof f.shareLink=="string"&&f.shareLink?f.shareLink:"",E=Array.isArray(f.failed)?f.failed.length:0,P=Array.isArray(f.spawned)?f.spawned.length:0,_=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:[_,"\uFF08",P,"\uFF09"]}),E>0?(0,n.jsx)("p",{className:"cs-warn",children:o("sessions.create.partialFail",{n:String(E)})}):null,L?(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:L,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")})}):null,(0,n.jsx)("div",{className:"actions",children:(0,n.jsx)("button",{type:"button",id:"cs-done",className:"primary",onClick:e.onClose,children:o("sessions.create.close")})})]})}if(t.loading)return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsx)(Pe,{label:o("common.loading"),className:"cs-loading",compact:!0}),(0,n.jsx)("div",{className:"actions cs-actions",children:(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")})})]});let v=t.bots,H=[...p],ae=H,ee=f=>v.find(L=>L.larkAppId===f)?.botName??f,ie=F.trim().toLowerCase(),X=ie?v.filter(f=>f.botName.toLowerCase().includes(ie)||f.larkAppId.toLowerCase().includes(ie)):v,G=oe?Jt(v,oe.query).slice(0,8):[],re=f=>{if(!oe)return;let L=jt(s,oe,f.botName);a(L.text),ce(null),Ce(0),l(E=>new Set(E).add(f.larkAppId)),S(E=>E||f.larkAppId),requestAnimationFrame(()=>{let E=be.current;E&&(E.focus(),E.setSelectionRange(L.caret,L.caret))})},ve=f=>{if(!(!oe||G.length===0)){if(f.key==="ArrowDown"||f.key==="ArrowUp"){f.preventDefault();let L=f.key==="ArrowDown"?1:-1;Ce(E=>(E+L+G.length)%G.length);return}if(f.key==="Enter"||f.key==="Tab"){f.preventDefault(),re(G[Math.min(W,G.length-1)]);return}f.key==="Escape"&&(f.preventDefault(),ce(null))}},$e=async f=>{let L=[...f.clipboardData.files].filter(Q=>Q.type.startsWith("image/"));if(L.length===0)return;f.preventDefault();let E=f.currentTarget.selectionStart??s.length,P=f.currentTarget.selectionEnd??E,_=L.filter(Q=>oo.has(Q.type.toLowerCase()));if(_.length!==L.length){alert(o("sessions.create.imageUnsupported"));return}if(r.length+_.length>as){alert(o("sessions.create.imageCountLimit",{n:String(as)}));return}if(_.some(Q=>Q.size>ao)){alert(o("sessions.create.imageSizeLimit"));return}if(r.reduce((Q,J)=>Q+J.size,0)+_.reduce((Q,J)=>Q+J.size,0)>io){alert(o("sessions.create.imageTotalLimit"));return}try{let Q=I.current,J=await Promise.all(_.map(async(ne,Fe)=>{let Se=await ro(ne),Ue=Se.indexOf(",");if(Ue<0)throw new Error("bad_image_data");let ke=Q+Fe;return{id:`${Date.now()}-${Fe}-${Math.random().toString(36).slice(2)}`,ordinal:ke,marker:`[${o("sessions.create.imageMarker",{n:String(ke)})}]`,name:ne.name||`pasted-image-${r.length+Fe+1}`,mimeType:ne.type.toLowerCase(),size:ne.size,dataBase64:Se.slice(Ue+1),previewUrl:Se}}));I.current+=J.length;let Ee=Wt(s,E,P,J.map(ne=>ne.marker));a(Ee.text),m(ne=>[...ne,...J]),ce(null),requestAnimationFrame(()=>{let ne=be.current;ne&&(ne.focus(),ne.setSelectionRange(Ee.caret,Ee.caret))})}catch{alert(o("sessions.create.imageReadFailed"))}},Ke=async f=>{f.preventDefault();let L=s.trim();if(!L){alert(o("sessions.create.errContent"));return}if(H.length===0){alert(o("sessions.create.errNoBot"));return}let E=w||H[0]||"";if(g==="lead"&&(!E||!H.includes(E))){alert(o("sessions.create.errLead"));return}q(!0),fe(null);try{let P=await fetch("/api/sessions/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({content:L,larkAppIds:H,mode:g,column:B,leadLarkAppId:g==="lead"?E:void 0,name:N.trim()||void 0,bindWorkingDir:R.trim()||void 0,images:r.map(he=>({name:he.name,mimeType:he.mimeType,dataBase64:he.dataBase64}))})}),_=await P.json().catch(()=>null);P.ok&&_?.ok?D?(fe(_),a(""),m([]),I.current=1,x("")):e.onSuccess(_):P.status!==401&&alert(`${o("sessions.create.failed")}: ${_?.error??P.status}`)}catch(P){alert(`${o("sessions.create.failed")}: ${P}`)}finally{q(!1)}};return(0,n.jsxs)("article",{className:"cs-card",children:[(0,n.jsx)("header",{className:"cs-header",children:(0,n.jsx)("h3",{children:o("sessions.create.title")})}),(0,n.jsxs)("form",{id:"cs-form",onSubmit:Ke,children:[(0,n.jsxs)("fieldset",{className:"cs-content",children:[(0,n.jsx)("legend",{children:o("sessions.create.content")}),(0,n.jsxs)("div",{className:"cs-composer",children:[(0,n.jsx)("textarea",{ref:be,name:"content",rows:5,placeholder:o("sessions.create.contentPlaceholder"),"aria-describedby":"cs-content-help",required:!0,value:s,onChange:f=>{let L=f.currentTarget,E=L.value;a(E),ce(Kn(E,L.selectionStart??E.length)),Ce(0)},onClick:f=>ce(Kn(s,f.currentTarget.selectionStart??s.length)),onKeyDown:ve,onPaste:f=>{$e(f)},onBlur:()=>setTimeout(()=>ce(null),0)}),oe?(0,n.jsx)("div",{className:"cs-mention-menu",role:"listbox","aria-label":o("sessions.create.mentionBots"),children:G.length?G.map((f,L)=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":L===W,className:L===W?"active":void 0,onMouseDown:E=>E.preventDefault(),onClick:()=>re(f),children:[(0,n.jsxs)("strong",{children:["@",f.botName]}),(0,n.jsx)("small",{children:f.larkAppId})]},f.larkAppId)):(0,n.jsx)("p",{children:o("sessions.create.noBotMatch")})}):null]}),(0,n.jsx)("small",{id:"cs-content-help",children:o("sessions.create.contentHelp")}),r.length?(0,n.jsx)("div",{className:"cs-image-list","aria-label":o("sessions.create.pastedImages"),children:r.map(f=>(0,n.jsxs)("figure",{className:"cs-image-item",children:[(0,n.jsx)("img",{src:f.previewUrl,alt:f.name}),(0,n.jsxs)("figcaption",{title:`${f.marker} ${f.name}`,children:[(0,n.jsx)("strong",{children:f.marker}),(0,n.jsx)("span",{children:f.name})]}),(0,n.jsx)("button",{type:"button",className:"cs-image-remove","aria-label":o("sessions.create.removeImage",{name:`${f.marker} ${f.name}`}),title:o("sessions.create.removeImage",{name:`${f.marker} ${f.name}`}),onClick:()=>{let L=r.filter(P=>P.id!==f.id),E=Gt(s,f.marker,L.map(P=>P.marker),P=>`[${o("sessions.create.imageMarker",{n:String(P+1)})}]`);a(E.text),m(L.map((P,_)=>({...P,ordinal:_+1,marker:E.markers[_]}))),I.current=L.length+1},children:(0,n.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M7 7l10 10M17 7 7 17"})})})]},f.id))}):null]}),(0,n.jsxs)("fieldset",{className:"cs-bots",children:[(0,n.jsx)("legend",{children:o("sessions.create.bots")}),v.length?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("input",{className:"cs-bot-search",type:"search",name:"botSearch",placeholder:o("sessions.create.botSearchPlaceholder"),"aria-label":o("sessions.create.botSearchPlaceholder"),value:F,onChange:f=>se(f.currentTarget.value)}),X.length?(0,n.jsx)("div",{className:"cs-bot-list",children:X.map(f=>(0,n.jsxs)("label",{className:"cs-bot",children:[(0,n.jsx)("input",{type:"checkbox",name:"bot",value:f.larkAppId,checked:p.has(f.larkAppId),onChange:L=>{let E=L.currentTarget.checked;l(P=>{let _=new Set(P);return E?_.add(f.larkAppId):_.delete(f.larkAppId),_.has(w)||S(_.values().next().value??""),_})}})," ",(0,n.jsx)("span",{children:f.botName})]},f.larkAppId))}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBotMatch")}),H.length?(0,n.jsx)("small",{children:o("sessions.create.selectedCount",{n:String(H.length)})}):null]}):(0,n.jsx)("p",{className:"cs-empty",children:o("sessions.create.noBots")})]}),(0,n.jsxs)("fieldset",{className:"cs-mode",children:[(0,n.jsx)("legend",{children:o("sessions.create.mode")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"lead",checked:g==="lead",onChange:()=>C("lead")})," ",o("sessions.create.modeLead")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"mode",value:"all",checked:g==="all",onChange:()=>C("all")})," ",o("sessions.create.modeAll")]}),(0,n.jsx)("small",{children:o("sessions.create.modeHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-lead-row",hidden:g!=="lead",children:[(0,n.jsx)("legend",{children:o("sessions.create.lead")}),(0,n.jsx)("select",{name:"lead",disabled:ae.length===0,value:ae.includes(w)?w:"",onChange:f=>S(f.currentTarget.value),children:ae.length?ae.map(f=>(0,n.jsx)("option",{value:f,children:ee(f)},f)):(0,n.jsx)("option",{value:"",disabled:!0,children:o("sessions.create.leadPickFirst")})}),(0,n.jsx)("small",{children:o("sessions.create.leadHelp")})]}),(0,n.jsxs)("fieldset",{className:"cs-column",children:[(0,n.jsx)("legend",{children:o("sessions.create.column")}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"in_progress",checked:B==="in_progress",onChange:()=>A("in_progress")})," ",o("sessions.create.columnInProgress")]}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"column",value:"backlog",checked:B==="backlog",onChange:()=>A("backlog")})," ",o("sessions.create.columnBacklog")]}),(0,n.jsx)("small",{children:o("sessions.create.columnHelp")})]}),(0,n.jsxs)("fieldset",{className:`cs-advanced${U?" open":""}`,children:[(0,n.jsx)("legend",{children:(0,n.jsx)("button",{type:"button",id:"cs-advanced-title",className:"cs-advanced-title","aria-expanded":U,"aria-controls":"cs-advanced-fields",onClick:()=>z(f=>!f),children:o("sessions.create.optionalConfig")})}),U?(0,n.jsxs)("div",{id:"cs-advanced-fields",className:"cs-advanced-fields",children:[(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.groupName")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"name",maxLength:60,placeholder:o("sessions.create.groupNamePlaceholder"),value:N,onChange:f=>x(f.currentTarget.value)})]}),(0,n.jsxs)("label",{className:"cs-advanced-field",children:[(0,n.jsx)("span",{children:o("sessions.create.workingDir")}),(0,n.jsx)("input",{className:"cs-pill-input",type:"text",name:"bindWorkingDir",placeholder:"e.g. ~/projects/foo",value:R,onChange:f=>K(f.currentTarget.value)}),(0,n.jsx)("small",{children:o("sessions.create.workingDirHelp")})]})]}):null]}),Y?(0,n.jsxs)("p",{className:"cs-keep-success",role:"status",children:[(0,n.jsxs)("span",{children:[Y.column==="backlog"?o("sessions.create.doneBacklog"):o("sessions.create.doneInProgress"),Array.isArray(Y.failed)&&Y.failed.length>0?` \xB7 ${o("sessions.create.partialFail",{n:String(Y.failed.length)})}`:""]}),typeof Y.shareLink=="string"&&Y.shareLink?(0,n.jsx)("a",{href:Y.shareLink,target:"_blank",rel:"noopener",children:o("sessions.create.openChat")}):null]}):null,(0,n.jsxs)("div",{className:"actions cs-actions",children:[(0,n.jsxs)("label",{className:"cs-keep-open",title:o("sessions.create.keepOpenHelp"),children:[(0,n.jsx)("input",{type:"checkbox",name:"keepOpen",checked:D,onChange:f=>{let L=f.currentTarget.checked;pe(L),gt(te(),L)}}),(0,n.jsx)("span",{children:o("sessions.create.keepOpen")})]}),(0,n.jsx)("button",{type:"button",id:"cs-cancel",onClick:e.onClose,children:o("sessions.create.cancel")}),(0,n.jsx)("button",{type:"submit",className:"cs-submit",disabled:O||v.length===0,children:O?o("sessions.create.submitting"):o("sessions.create.submit")})]})]})]})}function Oo(){wt();let e=kt(i=>[...i.sessions.values()]),[t,s]=(0,c.useState)(0),a=(0,c.useCallback)(()=>s(i=>i+1),[]),[r,m]=(0,c.useState)({q:"",status:"",adopt:"",chat:"",multiBotTopics:!1,botTriggeredTopics:!1,showUnknownChats:lt(te()),active:!0,cli:new Set(ge)}),[p,l]=(0,c.useState)(new Set),[g,C]=(0,c.useState)("lastMessageAt"),[w,S]=(0,c.useState)("desc"),[B,A]=(0,c.useState)(()=>new Set(at(te()))),[N,x]=(0,c.useState)(()=>rt(te())),[R,K]=(0,c.useState)(()=>ct(te())),[U,z]=(0,c.useState)(!1),[O,q]=(0,c.useState)(null),[F,se]=(0,c.useState)(null),[D,pe]=(0,c.useState)(()=>pt(te())),Y=`${N}:${N==="kanban"?D:"-"}`,fe=(0,c.useRef)(!0),[oe,ce]=(0,c.useState)(0),[W,Ce]=(0,c.useState)([]),[be,I]=(0,c.useState)(null),[v,H]=(0,c.useState)(!1),ae=(0,c.useRef)(!1),[ee,ie]=(0,c.useState)(()=>{try{return window.localStorage.getItem(Nn)??""}catch{return""}}),[X,G]=(0,c.useState)({data:null,key:"",fetchedAt:0}),re=(0,c.useRef)(!1),ve=(0,c.useRef)(new Set),[$e,Ke]=(0,c.useState)(""),[f,L]=(0,c.useState)(null),[E,P]=(0,c.useState)(null),[_,he]=(0,c.useState)(null),[Q,J]=(0,c.useState)(!1),[Ee,ne]=(0,c.useState)(24),[Fe,Se]=(0,c.useState)(""),[Ue,ke]=(0,c.useState)(null),[us,ze]=(0,c.useState)(null),[ms,Gn]=(0,c.useState)(null),[gs,ps]=(0,c.useState)(null),[pn,fs]=(0,c.useState)(null),[bs,Ye]=(0,c.useState)(null),[hs,fn]=(0,c.useState)(!1),je=(0,c.useRef)(0);(0,c.useLayoutEffect)(()=>{if(fe.current){fe.current=!1;return}ce(i=>i+1)},[Y]),(0,c.useEffect)(()=>{fs(document.getElementById("create-session-modal"))},[]),(0,c.useEffect)(()=>{bt().then(a)},[a]);let bn=(0,c.useMemo)(()=>{let i=new Map;for(let u of e){let d=String(u.chatId??"").trim();if(!d||!r.showUnknownChats&&Pn(u))continue;let b=Me(u),y=i.get(d);(!y||b<y)&&i.set(d,b)}return[...i.entries()].sort((u,d)=>u[1].localeCompare(d[1])).map(([u,d])=>({value:u,label:d}))},[r.showUnknownChats,t,e]);(0,c.useEffect)(()=>{r.chat&&(bn.some(i=>i.value===r.chat)||m(i=>({...i,chat:""})))},[bn,r.chat]);let ye=(0,c.useMemo)(()=>{let i=r.q.toLowerCase(),u=[...r.cli],d=u.length>0&&u.length<ge.length,b=N==="kanban",y=r.multiBotTopics||r.botTriggeredTopics?new Set(rn(e).filter(h=>!r.multiBotTopics||h.multiBot).filter(h=>!r.botTriggeredTopics||h.inferredBotTriggered).map(h=>h.key)):null,k=e.filter(h=>!d||u.includes(h.cliId??"unknown")).filter(h=>r.showUnknownChats||!Pn(h)).filter(h=>!r.status||h.status===r.status).filter(h=>!r.adopt||r.adopt==="yes"==!!h.adopt).filter(h=>!r.chat||String(h.chatId??"")===r.chat).filter(h=>!r.active||b||h.status!=="closed").filter(h=>!i||$t(h).includes(i));return y?k.filter(h=>y.has(Dn(h))).sort((h,$)=>rs(h,$,g,w)):k.sort((h,$)=>rs(h,$,g,w))},[r,t,w,g,e,N]),hn=(0,c.useMemo)(()=>Dt(e),[e]),Ie=(0,c.useMemo)(()=>new Map(e.map(i=>[i.sessionId,i])),[e,t]),Xn=(0,c.useMemo)(()=>ye.filter(i=>i.status!=="closed"),[ye]),Je=(N==="table"||N==="topics"?ye:Xn).filter(i=>i.status!=="closed"),Vn=[...p].map(i=>Ie.get(i)).filter(i=>!!i&&i.status!=="closed"),qn=Je.length>0&&Je.every(i=>p.has(i.sessionId)),ys=Je.some(i=>p.has(i.sessionId))&&!qn;(0,c.useEffect)(()=>{l(i=>{let u=!1,d=new Set;for(let b of i){let y=Ie.get(b);y&&y.status!=="closed"?d.add(b):u=!0}return u?d:i})},[Ie]);let yn=(0,c.useCallback)(i=>{let u=new Set;if(!i)return u;for(let d of i.groupChats)u.add(d);if(be)for(let[d,b]of be){if(u.has(d))continue;let y=!1;for(let k of i.botIds)if(b.botIds.has(k)){y=!0;break}if(y){for(let k of b.observedNames)if(i.botNames.has(k)){u.add(d);break}}}return u},[be]),Yn=(0,c.useMemo)(()=>{if(N==="kanban"&&D==="team"){let i=W.find(d=>d.key===ee)??W[0],u=yn(i);return ye.filter(d=>u.has(String(d.chatId)))}return ye},[D,ee,W,ye,yn,N]),kn=(0,c.useCallback)(i=>Nt(Yn,i),[Yn]),wn=(0,c.useCallback)(async()=>{if(!(ae.current||v)){ae.current=!0;try{let[i,u,d]=await Promise.all([fetch("/api/team/hosted").then(k=>k.json()).catch(()=>null),fetch("/api/team/remote-roster").then(k=>k.json()).catch(()=>null),fetch("/api/groups").then(k=>k.json()).catch(()=>null)]);Array.isArray(d?.chats)&&I(new Map(d.chats.map(k=>[String(k.chatId),{botIds:new Set((k.memberBots??[]).filter(h=>h.inChat).map(h=>String(h.larkAppId))),observedNames:new Set((k.observedBotNames??[]).map(h=>String(h)))}])));let b=k=>({ids:new Set(k.map(h=>String(h.larkAppId))),names:new Set(k.map(h=>String(h.name??"")).filter(Boolean))}),y=[];for(let k of i?.teams??[]){let{ids:h,names:$}=b(k.bots??[]);y.push({key:`local:${k.teamId}`,label:k.isDefault?o("team.myHostedTeam"):String(k.name??k.teamId),botIds:h,botNames:$,groupChats:new Set((k.groupChatIds??[]).map(V=>String(V)))})}for(let k of u?.memberships??[]){let{ids:h,names:$}=b(k.roster?.bots??[]);y.push({key:`${k.hubUrl}::${k.teamId}`,label:String(k.teamName??k.teamId??k.hubUrl),botIds:h,botNames:$,groupChats:new Set})}Ce(y),ie(k=>y.length&&!y.some(h=>h.key===k)?y[0].key:k)}finally{H(!0),ae.current=!1}}},[v]),Zn=(0,c.useCallback)(async(i,u,d,b,y)=>{try{let h=i.startsWith("local:")?await fetch(`/api/team/board/local/${encodeURIComponent(i.slice(6))}/move`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:u,column:d,position:b})}):await fetch("/api/team/remote-board-move",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({key:i,sessionId:u,column:d,position:b})}),$=await h.json().catch(()=>({}));(!h.ok||$?.ok===!1)&&(G(V=>{if(!V.data||V.key!==i)return V;let Z={...V.data.board};return y?Z[u]=y:delete Z[u],{...V,data:{...V.data,board:Z}}}),h.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${$?.error??h.status}`))}catch(k){G(h=>{if(!h.data||h.key!==i)return h;let $={...h.data.board};return y?$[u]=y:delete $[u],{...h,data:{...h.data,board:$}}}),alert(`${o("sessions.kanban.moveFail")}: ${k}`)}},[]),ks=(0,c.useCallback)(async i=>{let u=X.key===i.key&&Date.now()-X.fetchedAt<3e4;if(!(re.current||u)){re.current=!0;try{let b=i.key.startsWith("local:")?`/api/team/board/local/${encodeURIComponent(i.key.slice(6))}`:`/api/team/remote-board?key=${encodeURIComponent(i.key)}`,y=await fetch(b),k=await y.json().catch(()=>({}));if(!y.ok||k?.ok===!1)return;let h=typeof k.deploymentId=="string"?k.deploymentId:null,$=[];for(let V of Array.isArray(k.reports)?k.reports:[])if(!(h&&V.deploymentId===h))for(let Z of Array.isArray(V.sessions)?V.sessions:[])$.push({...Z,remoteDeployment:V.deploymentName||V.deploymentId});G({key:i.key,fetchedAt:Date.now(),data:{board:k.board&&typeof k.board=="object"?k.board:{},remoteRows:$}})}finally{re.current=!1}}},[X.fetchedAt,X.key]);(0,c.useEffect)(()=>{N==="kanban"&&D==="team"&&!v&&wn()},[D,v,wn,N]),(0,c.useEffect)(()=>{let i=window.setInterval(()=>{N==="kanban"&&D==="team"&&(G(u=>({...u,fetchedAt:0})),a())},3e4);return()=>window.clearInterval(i)},[D,a,N]);let Qn=(0,c.useCallback)(async(i,u,d,b)=>{try{let y=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/board`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({column:u,position:d})}),k=await y.json().catch(()=>({}));(!y.ok||k?.ok===!1)&&(i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),y.status!==401&&alert(`${o("sessions.kanban.moveFail")}: ${k?.error??y.status}`))}catch(y){i.kanbanColumn=b.column,i.kanbanPosition=b.position,a(),alert(`${o("sessions.kanban.moveFail")}: ${y}`)}},[a]),ws=(0,c.useCallback)(i=>{let u=!1;for(let d of i){let b=String(d.row.sessionId);if(!b||d.row.status==="closed"&&d.column!=="done")continue;if(D==="team"){let h=W.find(Z=>Z.key===ee)??W[0];if(!h)continue;let V=(X.key===h.key&&X.data?X.data.board:{})[b];G(Z=>{let st=Z.key===h.key&&Z.data?Z.data:{board:{},remoteRows:Z.data?.remoteRows??[]},Hs={...st.board,[b]:{column:d.column,position:d.position}};return{...Z,key:h.key,data:{...st,board:Hs}}}),Zn(h.key,b,d.column,d.position,V),u=!0;continue}let y=Ae.sessions.get(b);if(!y)continue;let k={column:y.kanbanColumn,position:y.kanbanPosition};y.kanbanColumn=d.column,y.kanbanPosition=d.position,Qn(y,d.column,d.position,k),u=!0}u&&a()},[D,ee,W,X,Qn,Zn,a]),et=(0,c.useCallback)(async(i,u)=>{let d=i.title;i.title=u,a();try{let b=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/rename`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:u})}),y=await b.json().catch(()=>({}));(!b.ok||y?.ok===!1)&&(i.title=d,a(),b.status!==401&&alert(`${o("sessions.kanban.renameFail")}: ${y?.error??b.status}`))}catch(b){i.title=d,a(),alert(`${o("sessions.kanban.renameFail")}: ${b}`)}},[a]),Cn=(0,c.useCallback)(async i=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/locate`,{method:"POST"}),d=await u.json();return d.ok?!0:(alert(`Locate failed: ${d.error??u.status}`),!1)}catch(u){return alert(`Locate error: ${u}`),!1}},[]),vn=(0,c.useCallback)(async(i,u)=>{if(!confirm(o("sessions.closeConfirm")))return!1;u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/close`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b?.ok===!1?(d.status!==401&&alert(`Close failed: ${b?.error??d.status}`),!1):(l(y=>{let k=new Set(y);return k.delete(i.sessionId),k}),a(),!0)}catch(d){return alert(`Close error: ${d}`),!1}finally{u&&(u.disabled=!1)}},[a]),Ze=(0,c.useCallback)(async(i,u,d)=>{let b=!!i.locked;if(b===u)return!0;i.locked=u,a(),d&&(d.disabled=!0);try{let y=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:u})}),k=await y.json().catch(()=>({}));return!y.ok||k?.ok===!1?(i.locked=b,a(),y.status!==401&&alert(`${o("sessions.lockFailed")}: ${k?.error??y.status}`),!1):(i.locked=!!k.locked,a(),!0)}catch(y){return i.locked=b,a(),alert(`${o("sessions.lockFailed")}: ${y}`),!1}finally{d&&(d.disabled=!1)}},[a]),Qe=(0,c.useCallback)(async(i,u)=>{if(ve.current.has(i.sessionId)||!confirm(Ft(i)))return!1;u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/restart`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b?.ok===!1?(d.status!==401&&alert(`${o("sessions.restartFailed")}: ${b?.error??d.status}`),!1):(ve.current.add(i.sessionId),window.setTimeout(()=>ve.current.delete(i.sessionId),5e3),!0)}catch(d){return alert(`${o("sessions.restartFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),Cs=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/resume`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b.ok===!1?(alert(`${o("sessions.resumeFailed")}: ${b?.error??d.status}`),!1):!0}catch(d){return alert(`${o("sessions.resumeFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),vs=(0,c.useCallback)(async(i,u)=>{u&&(u.disabled=!0);try{let d=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/start`,{method:"POST"}),b=await d.json().catch(()=>({}));return!d.ok||b.ok===!1?(d.status!==401&&alert(`${o("sessions.create.startFailed")}: ${b?.error??d.status}`),!1):!0}catch(d){return alert(`${o("sessions.create.startFailed")}: ${d}`),!1}finally{u&&(u.disabled=!1)}},[]),en=(0,c.useCallback)(i=>{ze({sessionId:i.sessionId,loading:!0,messages:[]}),(async()=>{try{let u=await fetch(`/api/sessions/${encodeURIComponent(i.sessionId)}/history?limit=80`),d=await u.json().catch(()=>({}));if(!u.ok||d?.ok===!1){let y=String(d?.error??u.status),k=y==="not_found_yet"||y==="not_found";ze(h=>h?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:y,stale:k}:h);return}let b=Array.isArray(d.messages)?d.messages:[];ze(y=>y?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:b,ownerOpenId:d.ownerOpenId}:y)}catch(u){ze(d=>d?.sessionId===i.sessionId?{sessionId:i.sessionId,loading:!1,messages:[],error:String(u)}:d)}})()},[]),Ss=(0,c.useCallback)(i=>{if(!Oe())return;let u=Xe(i);if(!u){ke(i.sessionId);return}Gn({sessionId:i.sessionId,url:u,loading:!1})},[]),Is=(0,c.useCallback)((i,u)=>{$n(i,u)},[]),Ts=(0,c.useCallback)(async()=>{let i=[...p];if(i.length===0||!confirm(o("sessions.closeBulkConfirm",{count:i.length})))return;L({done:0,total:i.length});let u=0,d=0,b=[...i];async function y(){for(;b.length;){let k=b.shift();try{let h=await fetch(`/api/sessions/${encodeURIComponent(k)}/close`,{method:"POST"}),$=await h.json().catch(()=>({}));(!h.ok||$?.ok===!1)&&(d+=1)}catch{d+=1}finally{u+=1,L({done:u,total:i.length})}}}await Promise.all(Array.from({length:Math.min(6,i.length)},()=>y())),L(null),l(new Set),a(),d>0&&alert(`Failed: ${d}/${i.length}`)},[a,p]),Ns=(0,c.useCallback)(async i=>{let u=[...p].map(h=>Ie.get(h)).filter(h=>!!h&&h.status!=="closed"&&!!h.locked!==i);if(u.length===0)return;P({locked:i,done:0,total:u.length});let d=0,b=0,y=[...u];async function k(){for(;y.length;){let h=y.shift(),$=!!h.locked;try{let V=await fetch(`/api/sessions/${encodeURIComponent(h.sessionId)}/lock`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({locked:i})}),Z=await V.json().catch(()=>({}));!V.ok||Z?.ok===!1?(b+=1,h.locked=$):h.locked=!!Z.locked}catch{b+=1,h.locked=$}finally{d+=1,P({locked:i,done:d,total:u.length})}}}await Promise.all(Array.from({length:Math.min(6,u.length)},()=>k())),P(null),a(),b>0&&alert(`${o("sessions.lockFailed")}: ${b}/${u.length}`)},[a,Ie,p]),xs=(0,c.useCallback)(()=>{let i=[...p].filter(d=>!!Ie.get(d));if(i.length===0)return;let u=It(i);he(o("sessions.monitorRoomAdded",{added:u.added,total:u.total})),window.setTimeout(()=>he(null),1800)},[Ie,p]),Rs=(0,c.useCallback)(async i=>{let u=Mn(i);if(!u)return;let d=kn(u);if(d.length!==0){ne(u),J(!0),Se(o("sessions.idleCleanupRunning"));try{let b=await fetch("/api/sessions/cleanup-idle",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({olderThanHours:u,sessionIds:d.map(k=>k.sessionId)})}),y=await b.json().catch(()=>({}));if(!b.ok){b.status!==401&&alert(`${o("sessions.idleCleanupFailed")}: ${y?.error??b.status}`),Se("");return}l(k=>{let h=new Set(k);for(let $ of y?.results??[])$?.ok&&$?.sessionId&&h.delete(String($.sessionId));return h}),Se(o("sessions.idleCleanupDone",{closed:Number(y?.closed??0),failed:Number(y?.failed??0)})),a()}catch(b){alert(`${o("sessions.idleCleanupFailed")}: ${b}`),Se("")}finally{J(!1)}}},[kn,a]),Ms=i=>{let u=it(i)??"board";u!==N&&(x(u),dt(te(),u))},Es=(i,u)=>{K(d=>{let b=d.indexOf(i),y=b+u;if(b<0||y<0||y>=d.length)return d;let k=[...d];return k.splice(b,1),k.splice(y,0,i),Tn(te(),k),k})},Ls=(i,u)=>{i!==u&&K(d=>{let b=d.indexOf(i),y=d.indexOf(u);if(b<0||y<0)return d;let k=[...d];return k.splice(b,1),k.splice(y,0,i),Tn(te(),k),k})},As=(0,c.useMemo)(()=>({rows:ye,groupBy:D,teams:W,teamsLoaded:v,teamKey:ee,teamBoardData:X.data,teamBoardKey:X.key}),[D,ee,W,v,ye,X.data,X.key]),Bs=Ue?Ie.get(Ue)??null:null,Sn=(0,c.useMemo)(()=>v?W.length?W.map(i=>({value:i.key,label:i.label})):[{value:"",label:o("sessions.kanban.noTeam")}]:[{value:"__loading",label:o("sessions.kanban.teamLoading")}],[W,v]),Ps=!v||W.length===0,nt=W.some(i=>i.key===ee)?ee:Sn[0]?.value??"",Os=Sn.find(i=>i.value===nt)?.label??o("sessions.kanban.groupTeam"),Ds=(0,c.useCallback)(()=>{je.current+=1,fn(!1),Ye(null)},[]),tt=(0,c.useCallback)(async()=>{let i=je.current+1;je.current=i,Ye({bots:[],loading:!0}),fn(!0);try{let u=await Ut();if(je.current!==i)return;Ye({bots:u})}finally{je.current===i&&fn(!1)}},[]),$s=(0,c.useCallback)(async()=>{let i=window.prompt(o("sessions.debugTerminalPrompt"),"");if(i===null)return;let u=i.trim(),d=window.open("about:blank","_blank");d&&(d.opener=null);try{let b=await fetch("/api/debug-terminal",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(u?{workingDir:u}:{})}),y=await b.json().catch(()=>({}));if(!b.ok||y?.ok===!1||!y?.url){d?.close(),b.status!==401&&alert(`${o("sessions.debugTerminalFail")}: ${y?.error??b.status}`);return}d?d.location.href=y.url:window.open(y.url,"_blank","noopener")}catch(b){d?.close(),alert(`${o("sessions.debugTerminalFail")}: ${b}`)}},[]);return(0,c.useEffect)(()=>{let i=()=>{Ct()&&Te.authed&&tt()};return i(),window.addEventListener(xn,i),()=>window.removeEventListener(xn,i)},[]),(0,n.jsxs)("section",{className:"page sessions-page",children:[(0,n.jsxs)("div",{className:"page-heading",children:[(0,n.jsxs)("div",{className:"sessions-heading-main",children:[(0,n.jsx)("p",{className:"eyebrow",children:o("nav.sessions")}),(0,n.jsx)("h1",{children:o("sessions.title")}),(0,n.jsxs)("div",{className:"sessions-view-controls",children:[(0,n.jsx)("div",{className:"segmented sessions-view-toggle",role:"group","aria-label":o("sessions.viewMode"),children:[["kanban",o("sessions.viewKanban")],["board",o("sessions.viewBoard")],["topics",o("sessions.viewTopics")],["table",o("sessions.viewTable")]].map(([i,u])=>(0,n.jsx)("button",{type:"button","data-view":i,className:N===i?"active":void 0,"aria-pressed":N===i,onClick:()=>Ms(i),children:u},i))}),(0,n.jsx)("div",{className:`segmented kanban-groupby${N==="kanban"?" is-visible":" is-collapsed"}`,id:"kanban-groupby",role:"group","aria-label":o("sessions.kanban.groupBy"),"aria-hidden":N!=="kanban",children:[["flow",o("sessions.kanban.groupFlow")],["team",o("sessions.kanban.groupTeam")],["bot",o("sessions.kanban.groupBot")]].map(([i,u])=>(0,n.jsx)("button",{type:"button","data-groupby":i,className:D===i?"active":void 0,"aria-pressed":D===i,onClick:()=>{pe(i),ft(te(),i)},children:u},i))}),(0,n.jsx)("span",{id:"kanban-team-stats",className:"kanban-team-stats",hidden:!(N==="kanban"&&D==="team"&&v),children:$e}),(0,n.jsx)(We,{id:"kanban-team",className:"kanban-team-menu",ariaLabel:o("sessions.kanban.groupTeam"),hidden:!(N==="kanban"&&D==="team"),disabled:Ps,label:Os,value:nt,options:Sn,onChange:i=>{if(W.some(u=>u.key===i)){ie(i);try{window.localStorage.setItem(Nn,i)}catch{}}}})]})]}),(0,n.jsxs)("div",{className:"page-heading-actions sessions-page-actions",children:[Oe()?(0,n.jsx)("button",{type:"button",id:"monitor-room-open",className:"monitor-room-open",onClick:()=>{window.location.href=Tt()},children:o("sessions.monitorRoom")}):null,Te.authed?(0,n.jsx)("button",{type:"button",className:"debug-terminal-btn",title:o("sessions.debugTerminalHint"),onClick:()=>{$s()},children:o("sessions.debugTerminal")}):null,Te.authed?(0,n.jsx)(yt,{className:"page-primary-action create-session-btn",disabled:hs,onClick:()=>{tt()},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:hn.logical}),o("sessions.runtime.logical")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:hn.resident}),o("sessions.runtime.resident")]}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{children:hn.dormant}),o("sessions.runtime.dormant")]})]}),(0,n.jsx)(ko,{chatOptions:bn,filters:r,setFilters:m,idleCleanup:{busy:Q,hours:Ee,status:Fe,countForHours:i=>kn(i).length,onRun:Rs}}),(0,n.jsx)(wo,{selectedCount:p.size,lockDisabled:!Vn.some(i=>!i.locked),unlockDisabled:!Vn.some(i=>!!i.locked),closeProgress:f,lockProgress:E,monitorRoomText:_,onClear:()=>l(new Set),onClose:()=>{Ts()},onAddToMonitorRoom:xs,onLock:i=>{Ns(i)}}),(0,n.jsxs)("div",{className:`sessions-view-stage${oe>0?" sessions-view-stage-enter":""}`,"data-view":N,"data-kanban-group":D,children:[(0,n.jsx)(vo,{rows:ye,selected:p,hidden:N!=="table",sortKey:g,sortDir:w,selectAllChecked:qn,selectAllIndeterminate:ys,selectAllDisabled:Je.length===0,hiddenColumns:B,onToggleColumn:i=>{let u=!B.has(i),d=new Set(B);u?d.add(i):d.delete(i),In(te(),Array.from(d)),A(d),u&&i===g&&(C("lastMessageAt"),S("desc"))},onResetColumns:()=>{A(new Set),In(te(),[])},onOpen:i=>ke(i.sessionId),onSelect:(i,u)=>l(d=>{let b=new Set(d);return u?b.add(i):b.delete(i),b}),onSelectAll:i=>l(u=>{let d=new Set(u);for(let b of Je)i?d.add(b.sessionId):d.delete(b.sessionId);return d}),onSort:i=>{g===i?S(w==="asc"?"desc":"asc"):(C(i),S(i==="spawnedAt"||i==="lastMessageAt"?"desc":"asc"))}}),(0,n.jsx)(Io,{rows:Xn,selected:p,hidden:N!=="board",order:R,animated:U,dragColId:O,dragOverCol:F,onAnimated:()=>z(!0),onMoveColumn:Es,onMoveColumnTo:Ls,onDragCol:q,onDragOverCol:se,onToggleSelect:i=>l(u=>{let d=new Set(u);return d.has(i.sessionId)?d.delete(i.sessionId):d.add(i.sessionId),d}),onOpen:i=>ke(i.sessionId),onHistory:en,onLocate:i=>Cn(i),onRestart:(i,u)=>{Qe(i,u)},onLock:(i,u,d)=>{Ze(i,u,d)},onClose:(i,u)=>{vn(i,u)}}),(0,n.jsx)(No,{rows:ye,relationRows:e,selected:p,hidden:N!=="topics",onToggleSelect:i=>l(u=>{let d=new Set(u);return d.has(i.sessionId)?d.delete(i.sessionId):d.add(i.sessionId),d}),onOpen:i=>ke(i.sessionId),onHistory:en,onLocate:i=>Cn(i),onRestart:(i,u)=>{Qe(i,u)},onLock:(i,u,d)=>{Ze(i,u,d)},onClose:(i,u)=>{vn(i,u)}}),(0,n.jsx)("div",{id:"sessions-kanban",ref:ps,className:`sessions-kanban${D==="bot"?" kanban-mode-bot":""}`,hidden:N!=="kanban",children:N==="kanban"?(0,n.jsx)(os,{host:gs,...As,canRestartSession:dn,getTeamChatIds:yn,icons:{details:j.details,feishu:j.feishu,history:j.history,key:j.key,lock:j.lock,restart:j.restart,terminal:j.terminal,unlock:j.unlock},lockActionLabel:cn,sessionStatusText:Ge,onDetails:i=>ke(String(i.sessionId)),onHistory:en,onMoveRows:ws,onNeedTeamBoard:i=>{ks(i)},onNeedTeams:()=>{wn()},onOpenTerminal:Oe()?Ss:void 0,onOpenWritableTerminal:Oe()&&ln()?Is:void 0,onRename:(i,u)=>{let d=Ae.sessions.get(String(i.sessionId));d&&et(d,u)},onRestart:(i,u)=>{let d=Ae.sessions.get(String(i.sessionId));d&&Qe(d,u)},onTeamScope:i=>Ke(i?o("sessions.kanban.teamScope",{chats:i.chats,sessions:i.sessions}):""),onToggleLock:(i,u)=>{let d=Ae.sessions.get(String(i.sessionId));d&&Ze(d,!d.locked,u)},onToggleSelect:i=>l(u=>{let d=String(i.sessionId),b=new Set(u);return b.has(d)?b.delete(d):b.add(d),b}),selectedSessionIds:p}):null})]},oe),(0,n.jsx)(Bo,{row:Bs,onClose:()=>ke(null),locateSession:Cn,openHistory:en,resumeSession:Cs,restartSession:Qe,closeSession:vn,setSessionLocked:Ze,startSession:vs}),(0,n.jsx)(Eo,{state:ms,onClose:()=>Gn(null),onRename:et}),(0,n.jsx)(Ro,{state:us,onClose:()=>ze(null)}),pn?(0,mn.createPortal)((0,n.jsx)(Po,{dialog:pn,state:bs,onClose:Ds,onSuccess:i=>Ye(u=>u&&{...u,success:i})}),pn):null]})}function Ia(e){return ht(e,(0,n.jsx)(Oo,{}))}export{yo as CliFilterGroup,No as TopicGroupsView,Ia as renderSessionsPage};
|