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 +1 @@
|
|
|
1
|
-
import{a as n,t as s,u as i}from"./chunk-
|
|
1
|
+
import{a as n,t as s,u as i}from"./chunk-6J5LS5AU.js";import{a as l}from"./chunk-5THX4DI2.js";import{c as S}from"./chunk-7SZRL6FY.js";var e=S(l(),1);function f(o){return n.on(o)}function m(o){let u=(0,e.useRef)(o),r=(0,e.useRef)(null);u.current=o;let a=()=>{let t=n.getSnapshot();if(r.current&&r.current.version===t.version)return r.current.value;let c=u.current(t);return r.current={version:t.version,value:c},c};return(0,e.useSyncExternalStore)(f,a,a)}function h(o){return s.on(o)}function p(){return s.locale}function v(){return(0,e.useSyncExternalStore)(h,p,p)}function T(){return v(),i}export{m as a,v as b,T as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{q as T}from"./chunk-5CJMHTT4.js";import{u as t}from"./chunk-MFQPCVHY.js";import{a as Z,d as B}from"./chunk-5THX4DI2.js";import{c as E}from"./chunk-7SZRL6FY.js";var r=E(Z(),1);var e=E(B(),1),nn="botmux:open-bot-onboarding",L={id:"claude-code",label:"Claude"},G="glm-5.1";function x(){return{options:[L],ttadkModelDefault:G,ttadkModelSuggestions:[],suggestedAppName:"botmux-0",webSession:{status:"checking"}}}function Q(){return{appName:"",cliId:L.id,dirMode:"fixed",workingDir:"~",model:""}}function en(n,o){return n||o==="checking"}function q(n){return n instanceof Error?n.message:String(n)}function X(n){return n.status==="completed"||n.status==="failed"||n.status==="needs_owner"}function N(n){return n==="login_failed"||n==="invalid_session"||n==="identity_unavailable"||n==="session_changed"}function tn(n){return n.status==="waiting_for_scan"?n.registrationMode==="compat"?t("botOnboarding.waitingCompat"):t("botOnboarding.waiting",{name:n.appName??""}):n.status==="verifying"?t("botOnboarding.verifying"):n.status==="configuring_permissions"?n.permissionStatusMsg?`${t("botOnboarding.configuringPermissions")} ${n.permissionStatusMsg}`:t("botOnboarding.configuringPermissions"):n.status==="waiting_for_platform_scan"?t("botOnboarding.platformScanHint"):n.status==="needs_owner"?t("botOnboarding.needsOwnerTitle"):n.status==="completed"?t("botOnboarding.completed",{name:n.appName??t("botOnboarding.botFallback")}):n.status==="failed"?n.appId?t("botOnboarding.partialFailureTitle"):n.error==="qr_expired"?t("botOnboarding.qrExpiredTitle"):N(n.error)?t("botOnboarding.authIncompleteTitle"):t("botOnboarding.createFailedTitle"):t("botOnboarding.starting")}async function on(){try{let n=await fetch("/api/cli-options"),o=await n.json();if(n.ok&&Array.isArray(o?.options)){let a=typeof o.ttadkModelDefault=="string"&&o.ttadkModelDefault.trim()?o.ttadkModelDefault.trim():G,l=Array.isArray(o.ttadkModelSuggestions)?o.ttadkModelSuggestions.filter(f=>typeof f=="string"):[],d=typeof o.suggestedAppName=="string"&&o.suggestedAppName.trim()?o.suggestedAppName.trim():"botmux-0",b=o?.webSession?.identity,c=o?.webSession?.status==="ready"&&typeof b?.userId=="string"&&typeof b?.userName=="string"&&typeof b?.tenantId=="string"&&typeof b?.tenantName=="string"?{status:"ready",source:typeof o.webSession.source=="string"?o.webSession.source:"botmux_cache",identity:{userId:b.userId,userName:b.userName,...typeof b.email=="string"?{email:b.email}:{},tenantId:b.tenantId,tenantName:b.tenantName}}:{status:"scan_required",...typeof o?.webSession?.reason=="string"?{reason:o.webSession.reason}:{}};return{options:o.options,ttadkModelDefault:a,ttadkModelSuggestions:l,suggestedAppName:d,webSession:c}}}catch{}return{...x(),webSession:{status:"scan_required"}}}function K(n,o,a){let l=a.options.find(f=>f.id===o),d=l?.gateway==="ttadk",b=d&&l?.acceptsModel!==!1,c=n.model;return d&&!b?c="":b&&!c.trim()?c=a.ttadkModelDefault:!b&&c.trim()===a.ttadkModelDefault&&(c=""),{...n,cliId:o,model:c}}function an(n,o){let a=o.options.some(l=>l.id===n.cliId)?n.cliId:o.options[0]?.id??L.id;return K({...n},a,o)}async function gn(){window.dispatchEvent(new Event(nn))}function rn(n){let{job:o}=n;if(o.status!=="completed"&&o.status!=="needs_owner"||!o.permission)return null;let a=o.permission;if(a.ok){let d=[t("botOnboarding.permissionOk",{count:a.scopeCount??0})];return a.skippedScopeCount&&a.skippedScopeCount>0&&d.push(t("botOnboarding.permissionSkipped",{count:a.skippedScopeCount})),a.versionId&&d.push(t("botOnboarding.permissionVersion",{version:a.versionId})),(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("p",{className:"hint-ok",children:d.join(" ")}),a.scopeWarning?(0,e.jsx)("p",{className:"hint-warn",children:a.scopeWarning}):null]})}let l=o.remainingSteps??[];return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("p",{className:"hint-warn",children:[t("botOnboarding.permissionManual"),a.message?`\uFF08${a.message}\uFF09`:""]}),l.length?(0,e.jsx)("ol",{className:"onboarding-steps",children:l.map(d=>(0,e.jsx)("li",{children:(0,e.jsx)("a",{href:d.url,target:"_blank",rel:"noopener",children:d.title})},`${d.title}:${d.url}`))}):null]})}function sn(n){let{job:o}=n;return o.appId?(0,e.jsxs)("p",{className:"onboarding-meta",children:[(0,e.jsx)("b",{children:"App ID:"})," ",(0,e.jsx)("code",{children:o.appId}),o.appName?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{children:" / "}),(0,e.jsxs)("b",{children:[t("botOnboarding.appNameLabel"),":"]})," ",(0,e.jsx)("code",{children:o.appName})]}):null,o.cliId?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{children:" / "}),(0,e.jsx)("b",{children:"CLI:"})," ",(0,e.jsx)("code",{children:o.cliId})]}):null,o.workingDir?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{children:" / "}),(0,e.jsxs)("b",{children:[t("botOnboarding.metaDir"),":"]})," ",(0,e.jsx)("code",{children:o.workingDir})]}):null]}):null}function W(n){return(0,e.jsxs)("div",{className:"qr-card",children:[(0,e.jsx)("img",{className:"qr-image",src:n.dataUrl,alt:n.alt}),n.link?(0,e.jsx)("a",{className:"onboarding-link",href:n.link,target:"_blank",rel:"noopener",children:t("botOnboarding.openLink")}):null]})}function z(n,o){return n.find(a=>a.value===o)?.label??o}function ln(n){let{job:o,ownerError:a}=n.view;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("p",{className:`onboarding-status status-${o.status}`,children:tn(o)}),o.status==="waiting_for_scan"&&o.qrDataUrl?(0,e.jsx)(W,{dataUrl:o.qrDataUrl,alt:t("botOnboarding.qrAlt"),link:o.qrUrl}):null,o.status==="waiting_for_platform_scan"&&o.platformQrDataUrl?(0,e.jsx)(W,{dataUrl:o.platformQrDataUrl,alt:t("botOnboarding.platformQrAlt")}):null,(0,e.jsx)(sn,{job:o}),(0,e.jsx)(rn,{job:o}),o.status==="needs_owner"?(0,e.jsxs)("form",{className:"onboarding-form",id:"ob-owner-form",onSubmit:l=>{l.preventDefault(),n.onSubmitOwner(o,n.ownerInput,n.ownerIdInput)},children:[(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.ownerLabel")}),(0,e.jsx)("input",{id:"ob-owner",type:"text",inputMode:"email",placeholder:t("botOnboarding.ownerPlaceholder"),autoComplete:"off",spellCheck:!1,value:n.ownerInput,onChange:l=>n.onOwnerInputChange(l.currentTarget.value)})]}),(0,e.jsx)("p",{className:"hint-warn",children:t("botOnboarding.needsOwnerDescription")}),(0,e.jsxs)("details",{className:"onboarding-technical",children:[(0,e.jsx)("summary",{children:t("botOnboarding.ownerUseId")}),(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.ownerIdLabel")}),(0,e.jsx)("input",{id:"ob-owner-id",type:"text",placeholder:t("botOnboarding.ownerIdPlaceholder"),autoComplete:"off",spellCheck:!1,value:n.ownerIdInput,onChange:l=>n.onOwnerIdInputChange(l.currentTarget.value)})]})]}),a?(0,e.jsx)("p",{className:"form-error",children:a}):null,(0,e.jsx)("div",{className:"actions onboarding-actions",children:(0,e.jsx)("button",{type:"submit",className:"primary onboarding-submit",children:t("botOnboarding.ownerSubmit")})})]}):null,o.status==="completed"?(0,e.jsx)("p",{className:"hint-ok",children:o.liveStarted?t("botOnboarding.liveOk"):t("botOnboarding.restartHint")}):null,o.status==="failed"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("p",{className:"hint-warn",children:o.appId?t("botOnboarding.partialFailureDescription"):o.error==="qr_expired"?t("botOnboarding.qrExpiredDescription"):N(o.error)?t("botOnboarding.authIncompleteDescription"):t("botOnboarding.createFailedDescription")}),(0,e.jsxs)("details",{className:"onboarding-technical",children:[(0,e.jsx)("summary",{children:t("botOnboarding.technicalDetails")}),(0,e.jsx)("code",{children:o.message??o.error??"unknown"})]}),(0,e.jsxs)("div",{className:"actions onboarding-actions",children:[(0,e.jsx)("button",{type:"button",onClick:n.onClose,children:t("botOnboarding.close")}),o.appId?null:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",onClick:()=>n.onRetry("compat"),children:t("botOnboarding.compatibilityMode")}),(0,e.jsx)("button",{type:"button",className:"primary onboarding-submit",onClick:()=>n.onRetry("web"),children:o.error==="qr_expired"?t("botOnboarding.generateQr"):N(o.error)?t("botOnboarding.scanAgain"):t("botOnboarding.retry")})]})]})]}):null,o.status==="completed"?(0,e.jsx)("div",{className:"actions onboarding-actions",children:(0,e.jsx)("button",{type:"button",onClick:n.onClose,children:t("botOnboarding.close")})}):null]})}function dn(n){let o=n.cliState.options.find(s=>s.id===n.form.cliId),a=o?.gateway==="ttadk"&&o.acceptsModel!==!1,l=o?.gateway==="ttadk"&&o.acceptsModel===!1,d=a?t("botOnboarding.modelTtadkPlaceholder").replace("{model}",n.cliState.ttadkModelDefault):t("botOnboarding.modelPlaceholder"),b=n.form.dirMode==="card"?t("botOnboarding.dirLabelCard"):t("botOnboarding.dirLabelFixed"),c=n.form.dirMode==="card"?t("botOnboarding.dirPlaceholderCard"):t("botOnboarding.dirPlaceholderFixed"),f=[...n.cliState.options].sort((s,p)=>s.label.localeCompare(p.label,"en",{sensitivity:"base"})).map(s=>({value:s.id,label:s.available===!1?t("botOnboarding.cliMissingOption",{label:s.label,command:s.command??s.id}):s.label})),S=[{value:"fixed",label:t("botOnboarding.dirModeFixed")},{value:"card",label:t("botOnboarding.dirModeCard")}];return(0,e.jsxs)("form",{id:"onboarding-form",className:"onboarding-form",onSubmit:n.onSubmit,children:[(0,e.jsx)("div",{className:"onboarding-session","aria-live":"polite",children:n.sessionMode==="checking"?(0,e.jsx)("p",{children:t("botOnboarding.sessionChecking")}):n.cliState.webSession.status==="ready"?n.sessionMode==="reuse"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:t("botOnboarding.sessionReady",{user:n.cliState.webSession.identity.userName,tenant:n.cliState.webSession.identity.tenantName})}),n.cliState.webSession.identity.email?(0,e.jsx)("small",{children:n.cliState.webSession.identity.email}):null]}),(0,e.jsx)("button",{type:"button",className:"onboarding-session-action",onClick:()=>n.onSessionModeChange("qr"),children:t("botOnboarding.switchAccount")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:t("botOnboarding.sessionSwitching")}),(0,e.jsx)("small",{children:t("botOnboarding.sessionSwitchingHint")})]}),(0,e.jsx)("button",{type:"button",className:"onboarding-session-action",onClick:()=>n.onSessionModeChange("reuse"),children:t("botOnboarding.reuseCurrentAccount")})]}):(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:t("botOnboarding.sessionScanRequired")}),(0,e.jsx)("small",{children:t("botOnboarding.sessionScanRequiredHint")})]})}),(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.appNameLabel")}),(0,e.jsx)("input",{id:"ob-app-name",type:"text",maxLength:64,value:n.form.appName,placeholder:t("botOnboarding.appNamePlaceholder"),autoComplete:"off",spellCheck:!1,onChange:s=>n.onFormChange({...n.form,appName:s.currentTarget.value})}),(0,e.jsx)("small",{className:"onboarding-field-hint",children:t("botOnboarding.appNameHint",{name:n.cliState.suggestedAppName})})]}),(0,e.jsxs)("div",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.cliLabel")}),(0,e.jsx)(T,{id:"ob-cli",className:"onboarding-menu",ariaLabel:t("botOnboarding.cliLabel"),label:z(f,n.form.cliId),value:n.form.cliId,options:f,searchable:!0,searchPlaceholder:t("common.dropdownSearch"),searchEmptyLabel:t("common.dropdownSearchEmpty"),onChange:s=>{n.onFormChange(K(n.form,s,n.cliState))}}),o?.available===!1?(0,e.jsx)("small",{className:"hint-warn",children:t("botOnboarding.cliMissingHint",{command:o.command??n.form.cliId})}):(0,e.jsx)("small",{className:"onboarding-field-hint",children:n.form.cliId})]}),(0,e.jsxs)("div",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.dirModeLabel")}),(0,e.jsx)(T,{id:"ob-dir-mode",className:"onboarding-menu",ariaLabel:t("botOnboarding.dirModeLabel"),label:z(S,n.form.dirMode),value:n.form.dirMode,options:S,onChange:s=>n.onFormChange({...n.form,dirMode:s})})]}),(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:b}),(0,e.jsx)("input",{id:"ob-dir",type:"text",value:n.form.workingDir,placeholder:c,autoComplete:"off",spellCheck:!1,onChange:s=>n.onFormChange({...n.form,workingDir:s.currentTarget.value})})]}),l?null:(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.modelLabel")}),(0,e.jsx)("input",{id:"ob-model",type:"text",list:a?"ob-model-suggestions":void 0,placeholder:d,autoComplete:"off",spellCheck:!1,value:n.form.model,onChange:s=>n.onFormChange({...n.form,model:s.currentTarget.value})}),a?(0,e.jsx)("datalist",{id:"ob-model-suggestions",children:n.cliState.ttadkModelSuggestions.map(s=>(0,e.jsx)("option",{value:s},s))}):null]}),n.error?(0,e.jsx)("p",{className:"form-error",children:n.error}):null,(0,e.jsxs)("div",{className:"actions onboarding-actions",children:[(0,e.jsx)("button",{type:"button",id:"ob-cancel",disabled:n.submitting,onClick:n.onClose,children:t("botOnboarding.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary onboarding-submit",disabled:en(n.submitting,n.sessionMode),children:n.submitting?t("botOnboarding.starting"):n.sessionMode==="reuse"?t("botOnboarding.confirmReuse"):t("botOnboarding.startScan")})]})]})}function un(n){let o=(0,r.useRef)(null),a=(0,r.useRef)(null),l=(0,r.useRef)(0),[d,b]=(0,r.useState)(()=>x()),[c,f]=(0,r.useState)(()=>Q()),[S,s]=(0,r.useState)("checking"),[p,w]=(0,r.useState)({kind:"form"}),[P,I]=(0,r.useState)(!1),[R,M]=(0,r.useState)(""),[A,_]=(0,r.useState)(""),g=(0,r.useCallback)(()=>{a.current!==null&&(window.clearInterval(a.current),a.current=null)},[]),v=(0,r.useCallback)(()=>{g(),n.onClose()},[n,g]),y=(0,r.useCallback)(i=>{w({kind:"job",job:i}),i.status==="needs_owner"&&(M(i.suggestedOwner??""),_("")),X(i)&&g()},[g]),J=(0,r.useCallback)(async i=>{let m=await fetch(`/api/bot-onboarding/${encodeURIComponent(i)}`),u=await m.json();if(!m.ok||!u?.job)throw new Error(u?.error??`http_${m.status}`);y(u.job)},[y]),j=(0,r.useCallback)(i=>{g(),a.current=window.setInterval(()=>{J(i).catch(m=>{g(),w({kind:"job",job:{id:i,status:"failed",message:q(m)}})})},1200)},[J,g]),U=(0,r.useCallback)(()=>{g();let i=l.current+1;l.current=i;let m=x();b(m),f(Q()),s("checking"),w({kind:"form"}),I(!1),M(""),_(""),on().then(u=>{l.current===i&&(b(u),f(k=>an(k,u)),s(u.webSession.status==="ready"?"reuse":"qr"))})},[g]);(0,r.useEffect)(()=>{if(n.open){U();return}g(),l.current+=1},[n.open,U,g]),(0,r.useEffect)(()=>{let i=o.current;if(i)if(n.open&&!i.open)try{i.showModal()}catch{}else!n.open&&i.open&&i.close()},[n.open]),(0,r.useEffect)(()=>()=>g(),[g]);let C=(0,r.useCallback)(async(i,m)=>{g(),I(!0),w({kind:"job",job:{id:"",status:"starting"}});try{let u=m??(S==="reuse"?"reuse":"qr"),k=i==="web"&&u==="reuse"&&d.webSession.status==="ready"?{userId:d.webSession.identity.userId,tenantId:d.webSession.identity.tenantId}:void 0,h=await fetch("/api/bot-onboarding/start",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({appName:i==="web"&&c.appName.trim()||void 0,registrationMode:i,...i==="web"?{sessionMode:u,expectedIdentity:k}:{},cliId:c.cliId,workingDir:c.workingDir.trim(),dirMode:c.dirMode,model:c.model.trim()||void 0})}),O=await h.json();if(h.status===400){w({kind:"form",error:O?.message??O?.error??"invalid_input"});return}if(!h.ok||!O?.job?.id)throw new Error(O?.error??`http_${h.status}`);let F=O.job;y(F),X(F)||j(F.id)}catch(u){w({kind:"job",job:{id:"",status:"failed",message:q(u)}})}finally{I(!1)}},[y,d.webSession,c,S,j,g]),H=(0,r.useCallback)(i=>{i.preventDefault(),C("web")},[C]),$=(0,r.useCallback)(i=>{if(i==="compat"&&!window.confirm(t("botOnboarding.compatibilityConfirm")))return;let m=i==="web"&&p.kind==="job"&&N(p.job.error);m&&s("qr"),C(i,m?"qr":void 0)},[C,p]),V=(0,r.useCallback)(async(i,m,u)=>{let k=[m.trim(),u.trim()].filter(Boolean).join(",");if(!k){w({kind:"job",job:i,ownerError:t("botOnboarding.ownerEmpty")});return}try{let h=await fetch(`/api/bot-onboarding/${encodeURIComponent(i.id)}/owner`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({owner:k})}),O=await h.json();if(!h.ok){w({kind:"job",job:i,ownerError:O?.message??O?.error??t("botOnboarding.ownerInvalid")});return}O?.job&&y(O.job)}catch(h){w({kind:"job",job:i,ownerError:q(h)})}},[y]),Y=(0,r.useMemo)(()=>p.kind==="form"?(0,e.jsx)(dn,{cliState:d,form:c,sessionMode:S,error:p.error,submitting:P,onFormChange:f,onSessionModeChange:s,onSubmit:H,onClose:v}):(0,e.jsx)(ln,{view:p,ownerInput:R,ownerIdInput:A,onOwnerInputChange:M,onOwnerIdInputChange:_,onSubmitOwner:V,onRetry:$,onClose:v}),[d,v,c,A,R,$,S,H,V,P,p]),D=p.kind==="form"||p.kind==="job"&&(p.job.status==="completed"||p.job.status==="failed");return(0,e.jsx)("dialog",{className:"onboarding-dialog",ref:o,onCancel:i=>{D||i.preventDefault()},onClose:()=>{D&&v()},onClick:i=>{D&&i.target===i.currentTarget&&v()},children:(0,e.jsxs)("article",{className:"onboarding-card",children:[(0,e.jsxs)("header",{className:"onboarding-header",children:[(0,e.jsx)("h3",{children:t("botOnboarding.title")}),(0,e.jsx)("p",{children:t("botOnboarding.intro")})]}),Y]})})}export{nn as a,gn as b,un as c};
|
|
1
|
+
import{q as T}from"./chunk-5CJMHTT4.js";import{u as t}from"./chunk-6J5LS5AU.js";import{a as Z,d as B}from"./chunk-5THX4DI2.js";import{c as E}from"./chunk-7SZRL6FY.js";var r=E(Z(),1);var e=E(B(),1),nn="botmux:open-bot-onboarding",L={id:"claude-code",label:"Claude"},G="glm-5.1";function x(){return{options:[L],ttadkModelDefault:G,ttadkModelSuggestions:[],suggestedAppName:"botmux-0",webSession:{status:"checking"}}}function Q(){return{appName:"",cliId:L.id,dirMode:"fixed",workingDir:"~",model:""}}function en(n,o){return n||o==="checking"}function q(n){return n instanceof Error?n.message:String(n)}function X(n){return n.status==="completed"||n.status==="failed"||n.status==="needs_owner"}function N(n){return n==="login_failed"||n==="invalid_session"||n==="identity_unavailable"||n==="session_changed"}function tn(n){return n.status==="waiting_for_scan"?n.registrationMode==="compat"?t("botOnboarding.waitingCompat"):t("botOnboarding.waiting",{name:n.appName??""}):n.status==="verifying"?t("botOnboarding.verifying"):n.status==="configuring_permissions"?n.permissionStatusMsg?`${t("botOnboarding.configuringPermissions")} ${n.permissionStatusMsg}`:t("botOnboarding.configuringPermissions"):n.status==="waiting_for_platform_scan"?t("botOnboarding.platformScanHint"):n.status==="needs_owner"?t("botOnboarding.needsOwnerTitle"):n.status==="completed"?t("botOnboarding.completed",{name:n.appName??t("botOnboarding.botFallback")}):n.status==="failed"?n.appId?t("botOnboarding.partialFailureTitle"):n.error==="qr_expired"?t("botOnboarding.qrExpiredTitle"):N(n.error)?t("botOnboarding.authIncompleteTitle"):t("botOnboarding.createFailedTitle"):t("botOnboarding.starting")}async function on(){try{let n=await fetch("/api/cli-options"),o=await n.json();if(n.ok&&Array.isArray(o?.options)){let a=typeof o.ttadkModelDefault=="string"&&o.ttadkModelDefault.trim()?o.ttadkModelDefault.trim():G,l=Array.isArray(o.ttadkModelSuggestions)?o.ttadkModelSuggestions.filter(f=>typeof f=="string"):[],d=typeof o.suggestedAppName=="string"&&o.suggestedAppName.trim()?o.suggestedAppName.trim():"botmux-0",b=o?.webSession?.identity,c=o?.webSession?.status==="ready"&&typeof b?.userId=="string"&&typeof b?.userName=="string"&&typeof b?.tenantId=="string"&&typeof b?.tenantName=="string"?{status:"ready",source:typeof o.webSession.source=="string"?o.webSession.source:"botmux_cache",identity:{userId:b.userId,userName:b.userName,...typeof b.email=="string"?{email:b.email}:{},tenantId:b.tenantId,tenantName:b.tenantName}}:{status:"scan_required",...typeof o?.webSession?.reason=="string"?{reason:o.webSession.reason}:{}};return{options:o.options,ttadkModelDefault:a,ttadkModelSuggestions:l,suggestedAppName:d,webSession:c}}}catch{}return{...x(),webSession:{status:"scan_required"}}}function K(n,o,a){let l=a.options.find(f=>f.id===o),d=l?.gateway==="ttadk",b=d&&l?.acceptsModel!==!1,c=n.model;return d&&!b?c="":b&&!c.trim()?c=a.ttadkModelDefault:!b&&c.trim()===a.ttadkModelDefault&&(c=""),{...n,cliId:o,model:c}}function an(n,o){let a=o.options.some(l=>l.id===n.cliId)?n.cliId:o.options[0]?.id??L.id;return K({...n},a,o)}async function gn(){window.dispatchEvent(new Event(nn))}function rn(n){let{job:o}=n;if(o.status!=="completed"&&o.status!=="needs_owner"||!o.permission)return null;let a=o.permission;if(a.ok){let d=[t("botOnboarding.permissionOk",{count:a.scopeCount??0})];return a.skippedScopeCount&&a.skippedScopeCount>0&&d.push(t("botOnboarding.permissionSkipped",{count:a.skippedScopeCount})),a.versionId&&d.push(t("botOnboarding.permissionVersion",{version:a.versionId})),(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("p",{className:"hint-ok",children:d.join(" ")}),a.scopeWarning?(0,e.jsx)("p",{className:"hint-warn",children:a.scopeWarning}):null]})}let l=o.remainingSteps??[];return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("p",{className:"hint-warn",children:[t("botOnboarding.permissionManual"),a.message?`\uFF08${a.message}\uFF09`:""]}),l.length?(0,e.jsx)("ol",{className:"onboarding-steps",children:l.map(d=>(0,e.jsx)("li",{children:(0,e.jsx)("a",{href:d.url,target:"_blank",rel:"noopener",children:d.title})},`${d.title}:${d.url}`))}):null]})}function sn(n){let{job:o}=n;return o.appId?(0,e.jsxs)("p",{className:"onboarding-meta",children:[(0,e.jsx)("b",{children:"App ID:"})," ",(0,e.jsx)("code",{children:o.appId}),o.appName?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{children:" / "}),(0,e.jsxs)("b",{children:[t("botOnboarding.appNameLabel"),":"]})," ",(0,e.jsx)("code",{children:o.appName})]}):null,o.cliId?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{children:" / "}),(0,e.jsx)("b",{children:"CLI:"})," ",(0,e.jsx)("code",{children:o.cliId})]}):null,o.workingDir?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("span",{children:" / "}),(0,e.jsxs)("b",{children:[t("botOnboarding.metaDir"),":"]})," ",(0,e.jsx)("code",{children:o.workingDir})]}):null]}):null}function W(n){return(0,e.jsxs)("div",{className:"qr-card",children:[(0,e.jsx)("img",{className:"qr-image",src:n.dataUrl,alt:n.alt}),n.link?(0,e.jsx)("a",{className:"onboarding-link",href:n.link,target:"_blank",rel:"noopener",children:t("botOnboarding.openLink")}):null]})}function z(n,o){return n.find(a=>a.value===o)?.label??o}function ln(n){let{job:o,ownerError:a}=n.view;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("p",{className:`onboarding-status status-${o.status}`,children:tn(o)}),o.status==="waiting_for_scan"&&o.qrDataUrl?(0,e.jsx)(W,{dataUrl:o.qrDataUrl,alt:t("botOnboarding.qrAlt"),link:o.qrUrl}):null,o.status==="waiting_for_platform_scan"&&o.platformQrDataUrl?(0,e.jsx)(W,{dataUrl:o.platformQrDataUrl,alt:t("botOnboarding.platformQrAlt")}):null,(0,e.jsx)(sn,{job:o}),(0,e.jsx)(rn,{job:o}),o.status==="needs_owner"?(0,e.jsxs)("form",{className:"onboarding-form",id:"ob-owner-form",onSubmit:l=>{l.preventDefault(),n.onSubmitOwner(o,n.ownerInput,n.ownerIdInput)},children:[(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.ownerLabel")}),(0,e.jsx)("input",{id:"ob-owner",type:"text",inputMode:"email",placeholder:t("botOnboarding.ownerPlaceholder"),autoComplete:"off",spellCheck:!1,value:n.ownerInput,onChange:l=>n.onOwnerInputChange(l.currentTarget.value)})]}),(0,e.jsx)("p",{className:"hint-warn",children:t("botOnboarding.needsOwnerDescription")}),(0,e.jsxs)("details",{className:"onboarding-technical",children:[(0,e.jsx)("summary",{children:t("botOnboarding.ownerUseId")}),(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.ownerIdLabel")}),(0,e.jsx)("input",{id:"ob-owner-id",type:"text",placeholder:t("botOnboarding.ownerIdPlaceholder"),autoComplete:"off",spellCheck:!1,value:n.ownerIdInput,onChange:l=>n.onOwnerIdInputChange(l.currentTarget.value)})]})]}),a?(0,e.jsx)("p",{className:"form-error",children:a}):null,(0,e.jsx)("div",{className:"actions onboarding-actions",children:(0,e.jsx)("button",{type:"submit",className:"primary onboarding-submit",children:t("botOnboarding.ownerSubmit")})})]}):null,o.status==="completed"?(0,e.jsx)("p",{className:"hint-ok",children:o.liveStarted?t("botOnboarding.liveOk"):t("botOnboarding.restartHint")}):null,o.status==="failed"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("p",{className:"hint-warn",children:o.appId?t("botOnboarding.partialFailureDescription"):o.error==="qr_expired"?t("botOnboarding.qrExpiredDescription"):N(o.error)?t("botOnboarding.authIncompleteDescription"):t("botOnboarding.createFailedDescription")}),(0,e.jsxs)("details",{className:"onboarding-technical",children:[(0,e.jsx)("summary",{children:t("botOnboarding.technicalDetails")}),(0,e.jsx)("code",{children:o.message??o.error??"unknown"})]}),(0,e.jsxs)("div",{className:"actions onboarding-actions",children:[(0,e.jsx)("button",{type:"button",onClick:n.onClose,children:t("botOnboarding.close")}),o.appId?null:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("button",{type:"button",onClick:()=>n.onRetry("compat"),children:t("botOnboarding.compatibilityMode")}),(0,e.jsx)("button",{type:"button",className:"primary onboarding-submit",onClick:()=>n.onRetry("web"),children:o.error==="qr_expired"?t("botOnboarding.generateQr"):N(o.error)?t("botOnboarding.scanAgain"):t("botOnboarding.retry")})]})]})]}):null,o.status==="completed"?(0,e.jsx)("div",{className:"actions onboarding-actions",children:(0,e.jsx)("button",{type:"button",onClick:n.onClose,children:t("botOnboarding.close")})}):null]})}function dn(n){let o=n.cliState.options.find(s=>s.id===n.form.cliId),a=o?.gateway==="ttadk"&&o.acceptsModel!==!1,l=o?.gateway==="ttadk"&&o.acceptsModel===!1,d=a?t("botOnboarding.modelTtadkPlaceholder").replace("{model}",n.cliState.ttadkModelDefault):t("botOnboarding.modelPlaceholder"),b=n.form.dirMode==="card"?t("botOnboarding.dirLabelCard"):t("botOnboarding.dirLabelFixed"),c=n.form.dirMode==="card"?t("botOnboarding.dirPlaceholderCard"):t("botOnboarding.dirPlaceholderFixed"),f=[...n.cliState.options].sort((s,p)=>s.label.localeCompare(p.label,"en",{sensitivity:"base"})).map(s=>({value:s.id,label:s.available===!1?t("botOnboarding.cliMissingOption",{label:s.label,command:s.command??s.id}):s.label})),S=[{value:"fixed",label:t("botOnboarding.dirModeFixed")},{value:"card",label:t("botOnboarding.dirModeCard")}];return(0,e.jsxs)("form",{id:"onboarding-form",className:"onboarding-form",onSubmit:n.onSubmit,children:[(0,e.jsx)("div",{className:"onboarding-session","aria-live":"polite",children:n.sessionMode==="checking"?(0,e.jsx)("p",{children:t("botOnboarding.sessionChecking")}):n.cliState.webSession.status==="ready"?n.sessionMode==="reuse"?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:t("botOnboarding.sessionReady",{user:n.cliState.webSession.identity.userName,tenant:n.cliState.webSession.identity.tenantName})}),n.cliState.webSession.identity.email?(0,e.jsx)("small",{children:n.cliState.webSession.identity.email}):null]}),(0,e.jsx)("button",{type:"button",className:"onboarding-session-action",onClick:()=>n.onSessionModeChange("qr"),children:t("botOnboarding.switchAccount")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:t("botOnboarding.sessionSwitching")}),(0,e.jsx)("small",{children:t("botOnboarding.sessionSwitchingHint")})]}),(0,e.jsx)("button",{type:"button",className:"onboarding-session-action",onClick:()=>n.onSessionModeChange("reuse"),children:t("botOnboarding.reuseCurrentAccount")})]}):(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:t("botOnboarding.sessionScanRequired")}),(0,e.jsx)("small",{children:t("botOnboarding.sessionScanRequiredHint")})]})}),(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.appNameLabel")}),(0,e.jsx)("input",{id:"ob-app-name",type:"text",maxLength:64,value:n.form.appName,placeholder:t("botOnboarding.appNamePlaceholder"),autoComplete:"off",spellCheck:!1,onChange:s=>n.onFormChange({...n.form,appName:s.currentTarget.value})}),(0,e.jsx)("small",{className:"onboarding-field-hint",children:t("botOnboarding.appNameHint",{name:n.cliState.suggestedAppName})})]}),(0,e.jsxs)("div",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.cliLabel")}),(0,e.jsx)(T,{id:"ob-cli",className:"onboarding-menu",ariaLabel:t("botOnboarding.cliLabel"),label:z(f,n.form.cliId),value:n.form.cliId,options:f,searchable:!0,searchPlaceholder:t("common.dropdownSearch"),searchEmptyLabel:t("common.dropdownSearchEmpty"),onChange:s=>{n.onFormChange(K(n.form,s,n.cliState))}}),o?.available===!1?(0,e.jsx)("small",{className:"hint-warn",children:t("botOnboarding.cliMissingHint",{command:o.command??n.form.cliId})}):(0,e.jsx)("small",{className:"onboarding-field-hint",children:n.form.cliId})]}),(0,e.jsxs)("div",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.dirModeLabel")}),(0,e.jsx)(T,{id:"ob-dir-mode",className:"onboarding-menu",ariaLabel:t("botOnboarding.dirModeLabel"),label:z(S,n.form.dirMode),value:n.form.dirMode,options:S,onChange:s=>n.onFormChange({...n.form,dirMode:s})})]}),(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:b}),(0,e.jsx)("input",{id:"ob-dir",type:"text",value:n.form.workingDir,placeholder:c,autoComplete:"off",spellCheck:!1,onChange:s=>n.onFormChange({...n.form,workingDir:s.currentTarget.value})})]}),l?null:(0,e.jsxs)("label",{className:"onboarding-field",children:[(0,e.jsx)("span",{children:t("botOnboarding.modelLabel")}),(0,e.jsx)("input",{id:"ob-model",type:"text",list:a?"ob-model-suggestions":void 0,placeholder:d,autoComplete:"off",spellCheck:!1,value:n.form.model,onChange:s=>n.onFormChange({...n.form,model:s.currentTarget.value})}),a?(0,e.jsx)("datalist",{id:"ob-model-suggestions",children:n.cliState.ttadkModelSuggestions.map(s=>(0,e.jsx)("option",{value:s},s))}):null]}),n.error?(0,e.jsx)("p",{className:"form-error",children:n.error}):null,(0,e.jsxs)("div",{className:"actions onboarding-actions",children:[(0,e.jsx)("button",{type:"button",id:"ob-cancel",disabled:n.submitting,onClick:n.onClose,children:t("botOnboarding.cancel")}),(0,e.jsx)("button",{type:"submit",className:"primary onboarding-submit",disabled:en(n.submitting,n.sessionMode),children:n.submitting?t("botOnboarding.starting"):n.sessionMode==="reuse"?t("botOnboarding.confirmReuse"):t("botOnboarding.startScan")})]})]})}function un(n){let o=(0,r.useRef)(null),a=(0,r.useRef)(null),l=(0,r.useRef)(0),[d,b]=(0,r.useState)(()=>x()),[c,f]=(0,r.useState)(()=>Q()),[S,s]=(0,r.useState)("checking"),[p,w]=(0,r.useState)({kind:"form"}),[P,I]=(0,r.useState)(!1),[R,M]=(0,r.useState)(""),[A,_]=(0,r.useState)(""),g=(0,r.useCallback)(()=>{a.current!==null&&(window.clearInterval(a.current),a.current=null)},[]),v=(0,r.useCallback)(()=>{g(),n.onClose()},[n,g]),y=(0,r.useCallback)(i=>{w({kind:"job",job:i}),i.status==="needs_owner"&&(M(i.suggestedOwner??""),_("")),X(i)&&g()},[g]),J=(0,r.useCallback)(async i=>{let m=await fetch(`/api/bot-onboarding/${encodeURIComponent(i)}`),u=await m.json();if(!m.ok||!u?.job)throw new Error(u?.error??`http_${m.status}`);y(u.job)},[y]),j=(0,r.useCallback)(i=>{g(),a.current=window.setInterval(()=>{J(i).catch(m=>{g(),w({kind:"job",job:{id:i,status:"failed",message:q(m)}})})},1200)},[J,g]),U=(0,r.useCallback)(()=>{g();let i=l.current+1;l.current=i;let m=x();b(m),f(Q()),s("checking"),w({kind:"form"}),I(!1),M(""),_(""),on().then(u=>{l.current===i&&(b(u),f(k=>an(k,u)),s(u.webSession.status==="ready"?"reuse":"qr"))})},[g]);(0,r.useEffect)(()=>{if(n.open){U();return}g(),l.current+=1},[n.open,U,g]),(0,r.useEffect)(()=>{let i=o.current;if(i)if(n.open&&!i.open)try{i.showModal()}catch{}else!n.open&&i.open&&i.close()},[n.open]),(0,r.useEffect)(()=>()=>g(),[g]);let C=(0,r.useCallback)(async(i,m)=>{g(),I(!0),w({kind:"job",job:{id:"",status:"starting"}});try{let u=m??(S==="reuse"?"reuse":"qr"),k=i==="web"&&u==="reuse"&&d.webSession.status==="ready"?{userId:d.webSession.identity.userId,tenantId:d.webSession.identity.tenantId}:void 0,h=await fetch("/api/bot-onboarding/start",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({appName:i==="web"&&c.appName.trim()||void 0,registrationMode:i,...i==="web"?{sessionMode:u,expectedIdentity:k}:{},cliId:c.cliId,workingDir:c.workingDir.trim(),dirMode:c.dirMode,model:c.model.trim()||void 0})}),O=await h.json();if(h.status===400){w({kind:"form",error:O?.message??O?.error??"invalid_input"});return}if(!h.ok||!O?.job?.id)throw new Error(O?.error??`http_${h.status}`);let F=O.job;y(F),X(F)||j(F.id)}catch(u){w({kind:"job",job:{id:"",status:"failed",message:q(u)}})}finally{I(!1)}},[y,d.webSession,c,S,j,g]),H=(0,r.useCallback)(i=>{i.preventDefault(),C("web")},[C]),$=(0,r.useCallback)(i=>{if(i==="compat"&&!window.confirm(t("botOnboarding.compatibilityConfirm")))return;let m=i==="web"&&p.kind==="job"&&N(p.job.error);m&&s("qr"),C(i,m?"qr":void 0)},[C,p]),V=(0,r.useCallback)(async(i,m,u)=>{let k=[m.trim(),u.trim()].filter(Boolean).join(",");if(!k){w({kind:"job",job:i,ownerError:t("botOnboarding.ownerEmpty")});return}try{let h=await fetch(`/api/bot-onboarding/${encodeURIComponent(i.id)}/owner`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({owner:k})}),O=await h.json();if(!h.ok){w({kind:"job",job:i,ownerError:O?.message??O?.error??t("botOnboarding.ownerInvalid")});return}O?.job&&y(O.job)}catch(h){w({kind:"job",job:i,ownerError:q(h)})}},[y]),Y=(0,r.useMemo)(()=>p.kind==="form"?(0,e.jsx)(dn,{cliState:d,form:c,sessionMode:S,error:p.error,submitting:P,onFormChange:f,onSessionModeChange:s,onSubmit:H,onClose:v}):(0,e.jsx)(ln,{view:p,ownerInput:R,ownerIdInput:A,onOwnerInputChange:M,onOwnerIdInputChange:_,onSubmitOwner:V,onRetry:$,onClose:v}),[d,v,c,A,R,$,S,H,V,P,p]),D=p.kind==="form"||p.kind==="job"&&(p.job.status==="completed"||p.job.status==="failed");return(0,e.jsx)("dialog",{className:"onboarding-dialog",ref:o,onCancel:i=>{D||i.preventDefault()},onClose:()=>{D&&v()},onClick:i=>{D&&i.target===i.currentTarget&&v()},children:(0,e.jsxs)("article",{className:"onboarding-card",children:[(0,e.jsxs)("header",{className:"onboarding-header",children:[(0,e.jsx)("h3",{children:t("botOnboarding.title")}),(0,e.jsx)("p",{children:t("botOnboarding.intro")})]}),Y]})})}export{nn as a,gn as b,un as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{E as i,I as c,d as r}from"./chunk-6J5LS5AU.js";var l={chats:[],bots:[]};async function A(){try{l=await r()}catch{}}var p=new Set(["working","analyzing","active","starting"]);function m(d){let s=new Map,e=t=>{let a=s.get(t);return a||(a={botName:t,larkAppId:t,cliId:"unknown",online:!1,sessions:[],active:[],busy:[],attention:[],lastActiveAt:0},s.set(t,a)),a};for(let t of l.bots??[]){let a=e(t.larkAppId??t.botName??"-");a.online=!0,t.botName&&(a.botName=t.botName),t.botAvatarUrl&&(a.botAvatarUrl=t.botAvatarUrl),t.cliId&&(a.cliId=t.cliId),t.brand&&(a.brand=t.brand)}let b=[...d].sort((t,a)=>+(t.status==="closed")-+(a.status==="closed"));for(let t of b){let a=t.larkAppId??t.botName??"-";if(t.status==="closed"&&!s.has(a))continue;let o=e(a);t.botName&&(o.botName===o.larkAppId||!o.botName)&&(o.botName=t.botName),o.sessions.push(t),t.cliId&&o.cliId==="unknown"&&(o.cliId=t.cliId),o.lastActiveAt=Math.max(o.lastActiveAt,Number(t.lastMessageAt??0)),t.status!=="closed"&&(o.active.push(t),p.has(t.status)&&o.busy.push(t),c(t)&&o.attention.push(t))}for(let t of s.values())if(t.botName===t.larkAppId){let a=i(t.larkAppId);a&&(t.botName=a)}return[...s.values()].sort((t,a)=>{let o=n=>n.attention.length?0:n.busy.length?1:n.online||n.active.length?2:3;return o(t)!==o(a)?o(t)-o(a):a.lastActiveAt-t.lastActiveAt})}export{A as a,m as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as A,b as V}from"./chunk-EVK77ASG.js";import{a as ue}from"./chunk-ZJVTGU5X.js";import{c as _}from"./chunk-HK7NIBJG.js";import{a as le,c as ie,g as xe,l as M,q as de}from"./chunk-5CJMHTT4.js";import"./chunk-6J5LS5AU.js";import{a as re}from"./chunk-SYC6D5XU.js";import{a as Pe,d as ce}from"./chunk-5THX4DI2.js";import{c as j}from"./chunk-7SZRL6FY.js";var i=j(Pe(),1);var m=j(Pe(),1);var n=j(ce(),1),Be=50,Ne={total:0,ok:0,error:0,successRate:0};function Ge(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 We(t,e=0){let s=new URLSearchParams({limit:String(Be),offset:String(e)});t.connectorId&&s.set("connectorId",t.connectorId),t.status&&s.set("status",t.status);let g=Ge(t.timeWindow);return g&&s.set("since",g),t.query.trim()&&s.set("q",t.query.trim()),s}function Se(t){if(!t)return"\u2014";let e=new Date(t);return Number.isFinite(e.getTime())?e.toLocaleString():t}function ge(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 _e(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 Le(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 Ue(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 Ie(t){return(0,n.jsx)(de,{id:t.id,className:"webhook-log-filter-menu",ariaLabel:t.label,style:{width:"100%",minWidth:0},value:t.value,label:le(t.options,t.value),options:t.options,onChange:t.onChange})}function me(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 Fe(t={}){let e=_(),s=(0,m.useRef)(!1),g=(0,m.useRef)([]),[w,L]=(0,m.useState)([]),[f,I]=(0,m.useState)([]),[y,E]=(0,m.useState)(Ne),[N,O]=(0,m.useState)({connectorId:"",status:"",timeWindow:"7d",query:""}),[d,r]=(0,m.useState)(null),[R,U]=(0,m.useState)(!0),[v,J]=(0,m.useState)(!1),[$,X]=(0,m.useState)(!1),[Y,Z]=(0,m.useState)(0),[q,P]=(0,m.useState)(""),[K,ee]=(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]),oe=(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]),fe=(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]),H=(0,m.useCallback)(async(c=!1,k=!1)=>{k?J(!0):U(!0),P("");let Q=c?g.current.length:0,te=We(N,Q),h=new URLSearchParams(te);h.delete("limit"),h.delete("offset");try{let[F,ne]=await Promise.all([A(`/api/trigger-logs?${te}`),c?Promise.resolve(null):A(`/api/trigger-logs/summary?${h}`)]);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:[],ae=c?[...g.current,...S]:S;g.current=ae,I(ae),Z(Number(F.body?.total??S.length)),X(F.body?.hasMore===!0),c||(E(ne?.status===200?ne.body?.summary??Ne:Ne),r(se=>S.some(we=>we.triggerId===se)?se:S[0]?.triggerId??null))}catch(F){s.current&&P(F?.message||e("webhookLogs.loadFailed"))}finally{s.current&&(U(!1),J(!1))}},[N,e]);(0,m.useEffect)(()=>(s.current=!0,A("/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(()=>{H(!1)},N.query?260:0);return()=>clearTimeout(c)},[N,H]),(0,m.useEffect)(()=>{let c=setInterval(()=>{H(!1,!0)},15e3);return()=>clearInterval(c)},[H]);async function ye(){!u||!await ue(JSON.stringify(u,null,2),e("webhookLogs.copyJson"))||(ee(!0),setTimeout(()=>s.current&&ee(!1),1200))}let ke=u?.request?.payloadOmittedReason==="disabled"?e("webhookLogs.payloadDisabled"):u?.request?.payloadOmittedReason==="too_large"?e("webhookLogs.payloadTooLarge"):e("webhookLogs.payloadUnavailable"),z=(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)(me,{label:e("webhookLogs.total"),value:y.total,hint:e("webhookLogs.filteredRange")}),(0,n.jsx)(me,{label:e("webhookLogs.successRate"),value:`${y.successRate.toFixed(y.successRate%1?1:0)}%`,tone:"ok",hint:`${y.ok} ${e("webhookLogs.calls")}`}),(0,n.jsx)(me,{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)(me,{label:e("webhookLogs.p95"),value:ge(y.p95DurationMs),hint:`${e("webhookLogs.average")} ${ge(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(Q=>({...Q,query:k}))}}),(0,n.jsx)(Ie,{id:"webhook-log-connector",label:e("webhookLogs.connector"),value:N.connectorId,options:oe,onChange:c=>O(k=>({...k,connectorId:c}))}),(0,n.jsx)(Ie,{id:"webhook-log-status",label:e("webhookLogs.status"),value:N.status,options:B,onChange:c=>O(k=>({...k,status:c}))}),(0,n.jsx)(Ie,{id:"webhook-log-window",label:e("webhookLogs.timeRange"),value:N.timeWindow,options:fe,onChange:c=>O(k=>({...k,timeWindow:c}))}),(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-refresh",disabled:v,onClick:()=>{H(!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:Y})})]})}),R&&!f.length?(0,n.jsx)(ie,{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:Se(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:ge(c.response?.durationMs)})]})]},`${c.triggerId}-${c.createdAt}`)})}),$?(0,n.jsx)("button",{type:"button",className:"ghost webhook-log-more",disabled:R,onClick:()=>{H(!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:[Se(u.createdAt)," \xB7 ",u.request?.method||"POST"," ",u.request?.path||"/webhook/\u2026"]})]}),(0,n.jsx)("button",{type:"button",className:"ghost",onClick:()=>{ye()},children:e(K?"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:ge(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:_e(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)(Le,{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)(Le,{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)(Le,{value:u.request.payload,empty:e("webhookLogs.none")}):(0,n.jsx)("p",{className:"webhook-log-detail-empty",children:ke})]}),(0,n.jsxs)("section",{className:"webhook-log-detail-section",children:[(0,n.jsx)("h3",{children:e("webhookLogs.routeTarget")}),(0,n.jsx)(Ue,{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:z}):(0,n.jsx)("section",{className:"page webhook-logs-content webhook-logs-page",children:z})}var o=j(ce(),1);function Je(t,e){return t.map(s=>s.id===e.id?e:s)}var Re={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 io(t,e){return{promptEnvelope:{sourceName:t.promptEnvelope?.sourceName||t.name,instruction:e}}}function Xe(t){return[{value:"turn",label:t("connectors.kindTurn")},{value:"workflow",label:t("connectors.kindWorkflowRetiring"),disabled:!0}]}function be(t){return`${location.origin}/webhook/${encodeURIComponent(t)}`}function pe(t){return(0,o.jsx)(de,{id:t.id,className:"connector-form-menu",ariaLabel:t.label,value:t.value,label:le(t.options,t.value),options:t.options,onChange:t.onChange})}function De(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(),E=(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,E.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)}),E.length?null:(0,o.jsx)("p",{className:"connector-group-empty",children:t.emptyLabel})]})]}):null]})}function he(t,e){return t.filter(s=>s.bots.includes(e))}function Ke(t,e){let s=t.target.chatId||"",g=s&&he(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 je(t){let e=_(),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 Ee(t){let e=_(),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)([]),[E,N]=(0,i.useState)([]),[O,d]=(0,i.useState)(!0),[r,R]=(0,i.useState)(Re),[U,v]=(0,i.useState)(null),[J,$]=(0,i.useState)(null),[X,Y]=(0,i.useState)(!1),[Z,q]=(0,i.useState)(!1),[P,K]=(0,i.useState)(null),[ee,T]=(0,i.useState)(null),[u,oe]=(0,i.useState)(null),B=(0,i.useMemo)(()=>he(I,r.botId),[I,r.botId]),fe=(0,i.useMemo)(()=>L.length?L.map(a=>({value:a.larkAppId,label:a.botName})):[{value:"",label:e("connectors.noOnlineBots")}],[L,e]),H=(0,i.useMemo)(()=>Xe(e),[e]),ye=(0,i.useMemo)(()=>[{value:"dynamic",label:e("connectors.modeDynamic")},{value:"fixed",label:e("connectors.modeFixed")},{value:"new-group",label:e("connectors.modeNewGroup")}],[e]),ke=(0,i.useMemo)(()=>[{value:"token",label:e("connectors.verifyToken")},{value:"hmac-sha256",label:e("connectors.verifyHmac")}],[e]),z=(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(D=>D.larkAppId===p.botId)?p.botId:a[0]?.larkAppId??"",b=he(l,C),x=p.chatId&&b.some(D=>D.chatId===p.chatId)?p.chatId:b[0]?.chatId??"",G=new Set(b.map(D=>D.chatId));return{...p,botId:C,chatId:x,allowChats:p.allowChats.filter(D=>G.has(D))}})},[]),k=(0,i.useCallback)(async()=>{d(!0);try{let[a,l,p]=await Promise.all([A("/api/bots"),A("/api/connectors"),A("/api/groups")]);if(!s.current)return;let C=(a.body?.bots||[]).map(x=>({larkAppId:x.larkAppId,botName:x.botName||x.larkAppId})),b=(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(b),N(Array.isArray(l.body?.connectors)?l.body.connectors:[]),c(C,b)}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(Z){if(!a.open)try{a.showModal()}catch{}let l=a.querySelector(".connector-modal-body");l&&(l.scrollTop=0)}else a.open&&a.close()},[Z]),(0,i.useEffect)(()=>()=>{let a=w.current;a?.open&&a.close()},[]);function Q(a){return e(a==="fixed"?"connectors.modeLabelFixed":a==="new-group"?"connectors.modeLabelNewGroup":"connectors.modeLabelDynamic")}function te(a){return e(a==="workflow"?"connectors.kindLabelWorkflow":"connectors.kindLabelTurn")}function h(a){R(l=>({...l,...a}))}function F(){v(null),$(null),K(null),R(a=>{let l=a.botId||L[0]?.larkAppId||"";return{...Re,botId:l,chatId:he(I,l)[0]?.chatId||""}}),q(!0)}function ne(a){v(null),$(null),T(null),K(a),R(Ke(a,I)),q(!0)}function S(){X||(q(!1),v(null),$(null),K(null))}async function ae(){v(null),$(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 b=r.manualChat?r.manualChatId.trim():r.chatId;if(!b){v({text:e("connectors.errChat"),error:!0});return}C.target.chatId=b}else r.mode==="dynamic"&&(C.target.allowChats=r.allowChats);if(r.mode==="new-group"){let b=r.dedup.trim();if(r.deduplicate&&!b){v({text:e("connectors.errDedup"),error:!0});return}C.lifecycleExtractors=r.deduplicate?{dedupKey:b}:null}else C.lifecycleExtractors=null;r.secret.trim()&&(C.secret=r.secret.trim()),Y(!0),v({text:e(P?"connectors.saving":"connectors.creating")});try{let b=await V(P?"PUT":"POST",P?`/api/connectors/${encodeURIComponent(P.id)}`:"/api/connectors",C);if(!s.current)return;if((b.status===201||b.status===200)&&b.body?.ok){if(P){let ve=P.id,W=b.body.connector;N(Ce=>Je(Ce,W));let Te=b.body.secret??C.secret;if(Te){let Ce=b.body.webhookUrl||be(W.id),Ae=(W.verify?.type??"token")==="token",Me=W.target.mode==="dynamic",qe=Me?W.target.allowChats?.[0]||"<chatId>":"";v(null),$({name:a,mode:W.target.mode,chatId:W.target.chatId,url:Ce,secret:Te,isToken:Ae,isDynamic:Me,exampleChat:qe,rotated:!0}),await k();return}T({id:ve,text:e("connectors.updated")}),q(!1),K(null);return}let x=b.body.webhookUrl||be(b.body.connector.id),G=(b.body.connector?.verify?.type??"token")==="token",D=r.mode==="dynamic",He=D?C.target.allowChats?.[0]||"<chatId>":"";v(null),$({name:a,mode:r.mode,chatId:C.target.chatId,url:x,secret:b.body.secret,isToken:G,isDynamic:D,exampleChat:He}),R(ve=>({...ve,name:"",workflowId:"",manualChatId:"",dedup:"",secret:"",instruction:"",topicMessageMode:"default",topicMessageText:"",suppressFinalOutput:!1,allowChats:[],storePayload:!0})),await k()}else{let x=b.body?.error||b.status;v({text:e("connectors.createFailed",{error:String(x)}),error:!0})}}finally{s.current&&Y(!1)}}async function se(a){T({id:a.id,text:e(a.enabled?"connectors.disabling":"connectors.enabling")});let l=await V("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 we(a){let l=a.loggingPolicy?.storePayload!==!1;T({id:a.id,text:e("connectors.saving")});let p=await V("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 Oe(a){if(!confirm(e("connectors.delConfirm")))return;T({id:a.id,text:e("connectors.deleting")});let l=await V("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 $e(a){ue(be(a.id),e("connectors.copy")).then(l=>{!l||!s.current||(oe(a.id),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{s.current&&oe(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)(xe,{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)(je,{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:X,onClick:S,children:(0,o.jsx)("span",{"aria-hidden":"true",children:"\xD7"})})]}),(0,o.jsx)("div",{className:"connector-modal-body",children:J?(0,o.jsx)(ze,{created:J,groupName:z}):(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=>h({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)(pe,{id:"cn-bot",label:e("connectors.fBot"),value:r.botId,options:fe,onChange:a=>h({botId:a})})]}),(0,o.jsxs)("div",{className:"cn-field",children:[(0,o.jsx)(M,{children:e("connectors.fKind")}),(0,o.jsx)(pe,{id:"cn-kind",label:e("connectors.fKind"),value:r.kind,options:H,onChange:a=>h({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=>h({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)(pe,{id:"cn-mode",label:e("connectors.fMode"),value:r.mode,options:ye,onChange:a=>h({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=>h({manualChatId:a.currentTarget.value}),placeholder:e("connectors.fChatManualPh")}):(0,o.jsx)(De,{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=>h({chatId:a})}),(0,o.jsx)("button",{type:"button",className:"ghost connector-inline-link",onClick:()=>h({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)(De,{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=>h({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:()=>h({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:()=>h({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=>h({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=>h({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:()=>h({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=>h({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=>h({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=>h({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)(pe,{id:"cn-verify",label:e("connectors.fVerify"),value:r.verify,options:ke,onChange:a=>h({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=>h({secret:a.currentTarget.value}),placeholder:e(P?"connectors.fSecretEditPh":"connectors.fSecretPh")})]})]}),U?(0,o.jsx)("p",{className:`connector-create-message${U.error?" err":""}`,children:U.text}):null]})}),(0,o.jsx)("footer",{className:"connector-modal-actions",children:J?(0,o.jsx)("button",{type:"button",className:"primary",onClick:S,children:e("connectors.close")}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("button",{type:"button",disabled:X,onClick:S,children:e("connectors.cancel")}),(0,o.jsx)("button",{id:"cn-create",type:"button",className:"primary",disabled:X,onClick:()=>{ae()},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)(ie,{className:"connector-list-loading",label:e("connectors.loading"),compact:!0}):(0,o.jsx)(Qe,{connectors:E,bots:L,copiedId:u,editMsg:ee,groupName:z,modeLabel:Q,kindLabel:te,onCopy:$e,onEdit:ne,onToggle:a=>{se(a)},onTogglePayloadLogging:a=>{we(a)},onDelete:a=>{Oe(a)}})})})]}):(0,o.jsx)(Fe,{embedded:!0})]})}function ze(t){let e=_(),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(s.rotated?"connectors.rotatedPrefix":"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 Qe(t){let e=_();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=be(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,E=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${E?" copied":""}`,type:"button",onClick:()=>t.onCopy(s),children:e(E?"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 uo(t){return re(t,(0,o.jsx)(Ee,{tab:"webhooks"}))}function go(t){return re(t,(0,o.jsx)(Ee,{tab:"logs"}))}export{io as buildConnectorInstructionUpdateBody,Xe as buildConnectorKindOptions,go as renderConnectorsLogsPage,uo as renderConnectorsPage,Je as replaceConnectorById};
|
|
@@ -0,0 +1,8 @@
|
|
|
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-HK7NIBJG.js";import{c as X,g as Y,h as ce,m as ue,n as de,o as pe,p as ge,q as Q}from"./chunk-5CJMHTT4.js";import{A as se,c as J,d as z,u as V,x as ne}from"./chunk-6J5LS5AU.js";import{a as ie}from"./chunk-SYC6D5XU.js";import{a as Le,d as le}from"./chunk-5THX4DI2.js";import{c as Z}from"./chunk-7SZRL6FY.js";var i=Z(Le(),1);var Me=/^[A-Za-z0-9._-]{1,64}$/,ke=6,we=30;function ee(o,t){return be(o,t)}function Ie(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)),b=(d-1)*n,G=Math.min(a,b+n);return{rows:o.slice(b,G),page:d,totalPages:c,from:a===0?0:b+1,to:G,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 te(o){return Me.test(o)&&o!=="."&&o!==".."}function oe(o){let t=String(o??"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return te(t)?t:"profile"}async function K(){let t=await(await fetch("/api/role-profiles")).json().catch(()=>({}));return Array.isArray(t.profiles)?t.profiles:[]}async function Pe(o){let t=await K(),r=await Ce(t,ke,async s=>{try{let b=await(await fetch(`/api/role-profiles/${encodeURIComponent(s.profileId)}`)).json().catch(()=>({}));return[s.profileId,Array.isArray(b.entries)?b.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 b=ee(d.larkAppId,s.chatId);n.has(b)||(n.add(b),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():"",b=a?.effectiveSource==="chat"||a?.effectiveSource==="team"?a.effectiveSource:null;return{larkAppId:r.larkAppId,botName:r.botName,content:d,status:d?b??"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 Ge(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 Re(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 xe(o,t,r){let n=String(o??"").trim();if(!n)return null;if(r)return{kind:"warn",text:V("groups.roleProfileBootstrapFailed",{name:n,reason:String(r)})};let a=typeof t=="string"&&t.trim()?t.trim():"";return a?{kind:"ok",text:V("groups.roleProfileBootstrapSent",{name:n,messageId:a})}:{kind:"ok",text:V("groups.roleProfileBootstrapDone",{name:n})}}function Te(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=Z(le(),1);function Be(){return{profiles:[],entriesById:new Map,groupRoleContentByBot:new Map,loaded:!1}}function Oe(o){let t={};for(let r of ne(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??se(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 re(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 Ue(o){let{chat:t,context:r,tr:n}=o;if(!r.profiles.length||!r.loaded)return null;let a=new Map;for(let b of t.memberBots??[])b?.inChat&&a.set(b.larkAppId,r.groupRoleContentByBot.get(ee(b.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 je(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=je(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)(de,{kind:"group",className:"groups-list-row","data-chat":r.chatId,children:[(0,e.jsx)(De,{chat:r}),(0,e.jsxs)(pe,{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)(Ue,{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)(ge,{children:[(0,e.jsx)(Y,{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),[b,G]=(0,i.useState)(!1),[g,y]=(0,i.useState)(""),[P,m]=(0,i.useState)([]),[I,v]=(0,i.useState)(""),[C,B]=(0,i.useState)(""),[O,A]=(0,i.useState)(""),[M,j]=(0,i.useState)(!0),[E,H]=(0,i.useState)(""),[x,$]=(0,i.useState)(!1),[D,_]=(0,i.useState)(""),[F,S]=(0,i.useState)("");(0,i.useEffect)(()=>{let u=!0;return fetch("/api/feed-groups").then(async h=>{let k=await h.json().catch(()=>({}));if(!h.ok||!k.ok)throw new Error(k.message??k.error??`HTTP ${h.status}`);u&&(m(Array.isArray(k.groups)?k.groups:[]),v(typeof k.larkAppId=="string"?k.larkAppId:""))}).catch(h=>{u&&H(h instanceof Error?h.message:String(h))}).finally(()=>{u&&j(!1)}),()=>{u=!1}},[]),(0,i.useEffect)(()=>{if(!D)return;let u=!0,h=window.setInterval(()=>{fetch("/api/feed-groups").then(async k=>{let R=await k.json().catch(()=>({}));!k.ok||!R.ok||!u||(m(Array.isArray(R.groups)?R.groups:[]),v(typeof R.larkAppId=="string"?R.larkAppId:""),H(""),_(""),S(""))}).catch(()=>{})},1e3);return()=>{u=!1,window.clearInterval(h)}},[D]);async function p(){let u=I?`?larkAppId=${encodeURIComponent(I)}`:"",h=await fetch(`/api/feed-groups/auth-url${u}`),k=await h.json().catch(()=>({}));if(!h.ok||!k.authUrl){c({title:"\u65E0\u6CD5\u53D1\u8D77\u6807\u7B7E\u6388\u6743",reason:k.error??`HTTP ${h.status}`});return}_(String(k.authUrl)),S("")}async function L(u){$(!0);try{let h=await fetch("/api/feed-groups/oauth-callback",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({callbackUrl:u.trim()})}),k=await h.json().catch(()=>({}));if(!h.ok||!k.ok)throw new Error(k.message??k.error??`HTTP ${h.status}`);let R=await fetch("/api/feed-groups"),l=await R.json().catch(()=>({}));if(!R.ok||!l.ok)throw new Error(l.message??l.error??`HTTP ${R.status}`);m(Array.isArray(l.groups)?l.groups:[]),v(typeof l.larkAppId=="string"?l.larkAppId:""),H(""),_(""),S("")}catch(h){c({title:"\u6807\u7B7E\u6388\u6743\u5931\u8D25",reason:h instanceof Error?h.message:String(h)})}finally{$(!1)}}async function U(u){u.preventDefault();let h=new FormData(u.currentTarget),k=String(h.get("name")??"").trim(),R=String(h.get("bindWorkingDir")??"").trim(),l=String(h.get("roleProfileId")??"").trim(),f=h.getAll("bot");if(f.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 w=await fetch("/api/groups/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:k||void 0,larkAppIds:f,bindWorkingDir:R||void 0,roleProfileId:l||void 0,feedGroupId:C||void 0,newFeedGroupName:O||void 0,feedGroupAppId:C||O?I:void 0})}),N=await w.json().catch(()=>({ok:!1,error:`HTTP ${w.status}`}));N.ok&&N.chatId?(d(N),o.onCreated(N,f,k)):(c({title:"\u521B\u5EFA\u5931\u8D25",reason:N.error??`HTTP ${w.status}`}),n(!1))}catch(w){c({title:"\u7F51\u7EDC\u9519\u8BEF",reason:w}),n(!1)}}if(s){let u=String(s.chatId),h=typeof s.shareLink=="string"&&s.shareLink?s.shareLink:`https://applink.feishu.cn/client/chat/open?openChatId=${encodeURIComponent(u)}`,k=s.invalidBotIds??[],R=s.invalidUserIds??[],l=Array.isArray(s.oncallBindings)?s.oncallBindings:[],f=l.filter(T=>T?.ok).length,w=l.filter(T=>!T?.ok),N=xe(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(T=>{T&&(G(!0),o.setTimer(()=>G(!1),800))})},children:t(b?"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??"?")})]}),s.feedGroupId?(0,e.jsxs)("p",{className:"hint-ok",children:["\u5DF2\u52A0\u5165\u98DE\u4E66\u6807\u7B7E",s.feedGroupName?`\u300C${String(s.feedGroupName)}\u300D`:"","\u3002"]}):null,s.feedGroupError?(0,e.jsxs)("p",{className:"hint-warn",children:["\u7FA4\u804A\u5DF2\u521B\u5EFA\uFF0C\u4F46\u6807\u7B7E\u8BBE\u7F6E\u5931\u8D25\uFF1A",String(s.feedGroupError)]}):null,(0,e.jsx)(qe,{resp:s}),l.length>0?w.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",f,"/",l.length," bots\uFF09"]}):(0,e.jsxs)("p",{className:"hint-warn",children:["\u76EE\u5F55\u7ED1\u5B9A\u90E8\u5206\u5931\u8D25\uFF1A\u6210\u529F ",f,"/",l.length,"\u3002",w.map((T,W)=>(0,e.jsxs)("span",{children:[(0,e.jsx)("br",{}),(0,e.jsx)("code",{children:String(T?.larkAppId??"?")}),": ",String(T?.error??"unknown")]},`${T?.larkAppId??"?"}-${W}`))]}):null,N?(0,e.jsx)("p",{className:N.kind==="ok"?"hint-ok":"hint-warn",children:N.text}):null,k.length||R.length?(0,e.jsxs)("ul",{children:[k.length?(0,e.jsxs)("li",{children:["\u65E0\u6548 bot id: ",(0,e.jsx)("code",{children:k.join(", ")})]}):null,R.length?(0,e.jsxs)("li",{children:["\u65E0\u6548\u7528\u6237 open_id: ",(0,e.jsx)("code",{children:R.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:h,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=>{U(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:g}),(0,e.jsx)(Q,{className:"g-profile-menu",ariaLabel:t("groups.roleProfile"),label:g||t("groups.roleProfileNone"),value:g,options:[{value:"",label:t("groups.roleProfileNone")},...o.roleProfiles.map(u=>({value:u.profileId,label:u.profileId}))],onChange:y}),(0,e.jsx)("small",{children:t("groups.roleProfileHelp")})]}),(0,e.jsxs)("fieldset",{className:"g-modal-field g-feed-group-field",children:[(0,e.jsx)("legend",{children:"\u98DE\u4E66\u6807\u7B7E\uFF08\u53EF\u9009\uFF09"}),(0,e.jsx)("input",{type:"hidden",name:"feedGroupId",value:C}),(0,e.jsx)(Q,{className:"g-profile-menu",ariaLabel:"\u98DE\u4E66\u6807\u7B7E",label:C?P.find(u=>u.groupId===C)?.name??C:"\u70B9\u51FB\u9009\u62E9\u5DF2\u6709\u6807\u7B7E\uFF08\u53EF\u9009\uFF09",value:C,options:[{value:"",label:"\u6682\u4E0D\u4F7F\u7528\u6807\u7B7E"},...P.map(u=>({value:u.groupId,label:u.name}))],onChange:u=>{B(u),u&&A("")}}),(0,e.jsxs)("div",{className:"g-feed-group-new",children:[(0,e.jsx)("span",{children:"\u6216\u65B0\u5EFA\u6807\u7B7E"}),(0,e.jsx)("input",{type:"text",name:"newFeedGroupName",value:O,maxLength:60,placeholder:"\u8F93\u5165\u65B0\u6807\u7B7E\u540D\u79F0",disabled:!!C||M||!!E,onChange:u=>A(u.currentTarget.value.trimStart())})]}),(0,e.jsx)("small",{children:"\u70B9\u51FB\u4E0A\u65B9\u4E0B\u62C9\u6846\u53EF\u9009\u62E9\u5DF2\u6709\u6807\u7B7E\uFF1B\u4E0D\u9009\u62E9\u5219\u4E0D\u4F7F\u7528\u6807\u7B7E\u3002"}),M?(0,e.jsx)("small",{children:"\u6B63\u5728\u8BFB\u53D6\u98DE\u4E66\u6807\u7B7E\u2026"}):null,E?(0,e.jsxs)("div",{className:"hint-warn-inline",children:[(0,e.jsx)("small",{children:E})," ",(0,e.jsx)("button",{type:"button",disabled:x,onClick:()=>{p()},children:x?"\u6B63\u5728\u5B8C\u6210\u6388\u6743\u2026":"\u7ACB\u5373\u6388\u6743"}),(0,e.jsx)("small",{children:" \u6388\u6743\u540E\u4F1A\u5F39\u7A97\u63D0\u793A\u4F60\u7C98\u8D34\u56DE\u8C03\u5730\u5740\u3002"})]}):null,!M&&!E&&P.length===0?(0,e.jsx)("small",{children:"\u5F53\u524D\u6CA1\u6709\u6807\u7B7E\uFF0C\u53EF\u76F4\u63A5\u521B\u5EFA\u4E00\u4E2A\u3002"}):null]})]}),D?(0,e.jsx)("div",{className:"feed-group-auth-overlay",children:(0,e.jsxs)("section",{className:"feed-group-auth-card",role:"dialog","aria-modal":"true","aria-labelledby":"feed-group-auth-title",children:[(0,e.jsx)("h3",{id:"feed-group-auth-title",children:"\u6388\u6743\u98DE\u4E66\u6807\u7B7E"}),(0,e.jsxs)("p",{children:["\u70B9\u51FB\u4E0B\u9762\u7684\u6309\u94AE\uFF0C\u5728\u98DE\u4E66\u9875\u9762\u786E\u8BA4\u6388\u6743\u3002\u5982\u679C BotMux \u4E0E\u6D4F\u89C8\u5668\u5728\u540C\u4E00\u53F0\u7535\u8111\uFF0C\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u5B8C\u6210\u6388\u6743\u3002\u5982\u679C BotMux \u8FD0\u884C\u5728\u8FDC\u7A0B\u865A\u62DF\u673A\u4E0A\uFF0C\u6D4F\u89C8\u5668\u4F1A\u56E0\u65E0\u6CD5\u8BBF\u95EE\u672C\u673A\u5730\u5740 ",(0,e.jsx)("code",{children:"127.0.0.1:9768"})," \u800C\u663E\u793A\u201C\u65E0\u6CD5\u8BBF\u95EE\u201D\uFF1B\u6B64\u65F6\u8BF7\u590D\u5236\u5730\u5740\u680F\u4E2D\u7684\u5B8C\u6574\u94FE\u63A5\u5E76\u7C98\u8D34\u5230\u4E0B\u65B9\u3002"]}),(0,e.jsx)("button",{type:"button",className:"primary feed-group-auth-open",onClick:()=>window.open(D,"_blank","noopener"),children:"\u8DF3\u8F6C\u98DE\u4E66\u6388\u6743"}),(0,e.jsxs)("label",{children:[(0,e.jsx)("span",{children:"\u8BF7\u628A\u70B9\u51FB\u6388\u6743\u540E\u7684\u5B8C\u6574\u94FE\u63A5\u7C98\u8D34\u5728\u8FD9\u91CC"}),(0,e.jsx)("input",{type:"url",value:F,placeholder:"http://127.0.0.1:9768/callback?code=\u2026&state=\u2026",onChange:u=>S(u.currentTarget.value)})]}),(0,e.jsxs)("div",{className:"actions",children:[(0,e.jsx)("button",{type:"button",onClick:()=>{_(""),S("")},children:"\u53D6\u6D88"}),(0,e.jsx)("button",{type:"button",className:"primary",disabled:!F.trim()||x,onClick:()=>{L(F)},children:x?"\u6B63\u5728\u5B8C\u6210\u6388\u6743\u2026":"\u5B8C\u6210\u6388\u6743"})]})]})}):null,(0,e.jsx)("div",{className:"g-create-status","data-create-status":!0,"aria-live":"polite",children:a?(0,e.jsx)(re,{...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 qe(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 ze(o){let{chat:t,tr:r}=o,[n,a]=(0,i.useState)(!1),[c,s]=(0,i.useState)(null),[d,b]=(0,i.useState)(null),G=(0,i.useMemo)(()=>new Set((t.memberBots??[]).filter(y=>y.inChat).map(y=>y.larkAppId)),[t]);async function g(y){y.preventDefault();let m=new FormData(y.currentTarget).getAll("bot");if(m.length===0){s({title:"\u8BF7\u9009\u62E9 bot",reason:"\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A bot \u540E\u518D\u6DFB\u52A0\u3002"}),b(null);return}a(!0),s(null),b(null);try{let v=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/add-bots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:m})})).json();if(v.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(v.result){let C=Ae(v.result);try{await o.onReloadGroups({force:!0}),b({result:C})}catch(B){b({result:C,refreshError:`\u6DFB\u52A0\u7ED3\u679C\u5DF2\u8FD4\u56DE\uFF0C\u4F46\u5237\u65B0\u7FA4\u7EC4\u5217\u8868\u5931\u8D25\uFF1A${B}`})}}else s({title:"\u54CD\u5E94\u5F02\u5E38",reason:JSON.stringify(v)})}catch(I){s({title:"\u7F51\u7EDC\u9519\u8BEF",reason:I})}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:y=>{g(y)},children:[(0,e.jsx)(Ee,{bots:o.bots,excludeIds:G}),(0,e.jsxs)("div",{"data-add-status":!0,"aria-live":"polite",children:[c?(0,e.jsx)(re,{...c}):null,d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(Fe,{summary:d.result}),d.refreshError?(0,e.jsx)(re,{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 Ve(o){let{tr:t}=o,[r,n]=(0,i.useState)([]),[a,c]=(0,i.useState)([]),[s,d]=(0,i.useState)(!0),[b,G]=(0,i.useState)(null),g=(0,i.useMemo)(()=>[...a].sort((p,L)=>p.profileId.localeCompare(L.profileId)),[a]),y=g.length>0,P=r.filter(p=>p.status==="empty").length,m=r.filter(p=>p.status==="error").length,I=!s&&!b&&r.length>0&&m===0,[v,C]=(0,i.useState)("new"),[B,O]=(0,i.useState)(o.suggestedProfileId),[A,M]=(0,i.useState)(""),[j,E]=(0,i.useState)(!1),[H,x]=(0,i.useState)(null),$=v==="overwrite"?A:B.trim(),D=t(v==="overwrite"?"groups.saveProfileOverwriteSubmit":"groups.saveProfileSubmit"),_=b||(s?t("groups.saveProfilePreparing"):m?t("groups.saveProfileFailedLoadSummary",{count:m}):r.length?P?t("groups.saveProfileEntrySummaryWithEmpty",{count:r.length,emptyCount:P}):t("groups.saveProfileEntrySummary",{count:r.length}):t("groups.saveProfileNoRoles"));(0,i.useEffect)(()=>{let p=!0;return d(!0),G(null),x(null),(async()=>{try{let[L,U]=await Promise.all([Se(o.chat),K().catch(()=>[])]);if(!p)return;let u=[...U].sort((h,k)=>h.profileId.localeCompare(k.profileId));n(L),c(U),M(h=>u.some(k=>k.profileId===h)?h:u[0]?.profileId??"")}catch(L){if(!p)return;n([]),c([]),M(""),G(L instanceof Error?L.message:String(L))}finally{p&&d(!1)}})(),()=>{p=!1}},[o.chat]);async function F(p){if(p.preventDefault(),!!I){if(!te($)){x({text:t("groups.saveProfileInvalid"),className:"error"});return}E(!0),x({text:t("groups.saveProfileSaving")});try{let U=(await Promise.all(r.map(async u=>(await fetch(`/api/role-profiles/${encodeURIComponent($)}/${encodeURIComponent(u.larkAppId)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:u.content,allowEmpty:!0})})).ok))).filter(Boolean).length;if(U!==r.length){x({text:t("groups.saveProfileFailed",{saved:U,total:r.length}),className:"error"}),E(!1);return}x({text:t("groups.saveProfileDone",{name:$,count:U}),className:"ok"}),await o.onRefreshRoleContext(),o.setTimer(o.onClose,700)}catch(L){x({text:String(L),className:"error"}),E(!1)}}}function S(p){p==="overwrite"&&!y||(C(p),x(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:p=>{F(p)},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})]}),m?(0,e.jsxs)("span",{className:"warn",children:[t("groups.saveProfileLoadFailed")," ",(0,e.jsx)("strong",{children:m})]}):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)(X,{label:t("common.loading")})}):b?(0,e.jsx)("div",{className:"g-save-profile-empty",children:b}):r.length?r.map(p=>(0,e.jsxs)("div",{className:`g-save-profile-entry ${p.status==="error"?"error":""}`,children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("strong",{children:p.botName??p.larkAppId}),(0,e.jsx)("code",{children:p.larkAppId})]}),(0,e.jsx)("span",{className:`g-save-profile-entry-status ${p.status==="error"?"error":"ok"}`,children:t(p.status==="error"?"groups.saveProfileStatus.error":"groups.saveProfileStatus.entry")})]},p.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:v==="new"?"active":"","data-save-profile-mode":"new","aria-pressed":v==="new",onClick:()=>S("new"),children:t("groups.saveProfileNew")}),(0,e.jsx)("button",{type:"button",className:v==="overwrite"?"active":"","data-save-profile-mode":"overwrite","aria-pressed":v==="overwrite",disabled:!y,onClick:()=>S("overwrite"),children:t("groups.saveProfileOverwrite")})]})]}),(0,e.jsxs)("label",{className:"form-row","data-profile-mode-row":"new",hidden:v!=="new",children:[(0,e.jsx)("span",{children:t("groups.saveProfileIdLabel")}),(0,e.jsx)("input",{type:"text",name:"profileId",value:B,maxLength:64,autoComplete:"off",onChange:p=>{O(p.currentTarget.value),x(null)}}),(0,e.jsx)("small",{children:t("groups.saveProfileInvalid")})]}),(0,e.jsxs)("div",{className:"form-row","data-profile-mode-row":"overwrite",hidden:v!=="overwrite",children:[(0,e.jsx)("span",{children:t("groups.saveProfileExistingLabel")}),y?(0,e.jsx)("div",{className:"g-save-profile-picker",children:g.map(p=>(0,e.jsxs)("button",{type:"button",className:`g-save-profile-pick ${p.profileId===A?"selected":""}`,"data-profile-id":p.profileId,"aria-pressed":p.profileId===A,onClick:()=>{M(p.profileId),C("overwrite"),x(null)},children:[(0,e.jsx)("span",{children:p.profileId}),(0,e.jsx)("small",{children:t("groups.saveProfileExistingMeta",{count:p.entryCount??0})})]},p.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:$||"-"}),(0,e.jsx)("small",{"data-save-profile-target-mode":!0,children:t(v==="overwrite"?"groups.saveProfileTargetOverwrite":"groups.saveProfileTargetNew")})]}),(0,e.jsx)("div",{className:`g-save-profile-summary ${I?"":"warn"}`,children:_}),(0,e.jsx)("div",{className:`g-save-profile-status ${H?.className??""}`,"data-save-profile-status":!0,children:H?.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:!I||j||v==="overwrite"&&!A,children:j?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??""),[b,G]=(0,i.useState)(!1),[g,y]=(0,i.useState)(null);async function P(){y(null);let m=s.trim();if(a&&!m){y({text:r("groups.needWorkingDir"),className:"hint-warn-inline"});return}G(!0);try{let I=`/api/groups/${encodeURIComponent(o.chat.chatId)}/oncall/${encodeURIComponent(t.larkAppId)}`,v=a?await fetch(I,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({workingDir:m})}):await fetch(I,{method:"DELETE"}),C=await v.json().catch(()=>({}));if(v.ok&&C.ok){y({text:a?`\u2713 \u5DF2\u7ED1\u5B9A \u2192 ${C.resolvedPath??m}`:"\u2713 \u5DF2\u89E3\u7ED1",className:"hint-ok"});try{await o.onSaved()}catch{}}else y({text:`\u2717 ${C.error??v.status}`,className:"hint-warn-inline"})}catch(I){y({text:`\u2717 ${I?.message??I}`,className:"hint-warn-inline"})}finally{G(!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:m=>{c(m.currentTarget.checked),m.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:m=>d(m.currentTarget.value)}),(0,e.jsx)("button",{type:"button","data-action":"save",disabled:b,onClick:()=>{P()},children:r("groups.save")}),(0,e.jsx)("span",{className:`oncall-status ${g?.className??""}`,"data-status":!0,children:g?.text??""})]})]})}function Ze(o){let{chat:t,tr:r}=o,n=(t.memberBots??[]).filter(g=>g.inChat),a=typeof t.ownerId=="string"?t.ownerId:"",[c,s]=(0,i.useState)(()=>new Set);function d(g,y){s(P=>{let m=new Set(P);return y?m.add(g):m.delete(g),m})}async function b(){let g=[...c];if(g.length===0){alert("\u81F3\u5C11\u9009\u4E00\u4E2A\u673A\u5668\u4EBA");return}if(confirm(`\u786E\u5B9A\u8BA9 ${g.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 P=await(await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/leave`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppIds:g})})).json(),m=(P.result??[]).map(I=>{if(!I.ok)return`${I.larkAppId}: \u5931\u8D25 (${I.error??"unknown"})`;let v=I.closedSessions??[],C=v.filter(A=>!A.ok).length,B=v.length-C,O=v.length===0?"":C===0?`\uFF08\u5173\u95ED ${B} \u4E2A\u4F1A\u8BDD\uFF09`:`\uFF08\u5173\u95ED ${B} \u4E2A\uFF0C${C} \u4E2A\u5931\u8D25\uFF09`;return`${I.larkAppId}: OK${O}`}).join(`
|
|
2
|
+
`);alert(m||`Unexpected: ${JSON.stringify(P)}`),await o.onReloadGroups({force:!0})}catch(y){alert("Network error: "+y)}finally{o.onClose()}}async function G(){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 g=[...n].sort((P,m)=>(m.larkAppId===a?1:0)-(P.larkAppId===a?1:0)),y=[];for(let P of g)try{let m=await fetch(`/api/groups/${encodeURIComponent(t.chatId)}/disband`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({larkAppId:P.larkAppId})}),I=await m.json();if(I.ok){let v=I.closedSessions??[],C=v.filter(A=>!A.ok).length,B=v.length-C,O=v.length===0?"":C===0?`
|
|
3
|
+
\u5173\u95ED\u4E86 ${B} \u4E2A\u4F1A\u8BDD\u3002`:`
|
|
4
|
+
\u5173\u95ED\u4E86 ${B} \u4E2A\u4F1A\u8BDD\uFF0C${C} \u4E2A\u4F1A\u8BDD\u5173\u95ED\u5931\u8D25\u3002`;alert(`\u5DF2\u89E3\u6563\uFF08\u7531 ${P.botName??P.larkAppId} \u6267\u884C\uFF09${O}`),await o.onReloadGroups({force:!0}),o.onClose();return}y.push(`${P.botName??P.larkAppId}: ${I.error??m.status}`)}catch(m){y.push(`${P.botName??P.larkAppId}: ${m}`)}alert(`\u6240\u6709\u5728\u7FA4\u673A\u5668\u4EBA\u5747\u65E0\u6CD5\u89E3\u6563\uFF1A
|
|
5
|
+
${y.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(g=>(0,e.jsx)(Ke,{chat:t,member:g,tr:r,onSaved:async()=>{await o.onReloadGroups({force:!0})}},g.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(g=>(0,e.jsxs)("label",{className:"checkbox-row",children:[(0,e.jsx)("input",{type:"checkbox",name:"leave-bot",value:g.larkAppId,checked:c.has(g.larkAppId),onChange:y=>d(g.larkAppId,y.currentTarget.checked)}),(0,e.jsxs)("span",{className:"checkbox-row-main",children:[(0,e.jsx)("strong",{children:g.botName??g.larkAppId}),g.larkAppId===a?(0,e.jsx)("small",{children:"\xB7 \u7FA4\u4E3B"}):null]})]},g.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:()=>{b()},children:r("groups.leaveSelected")}),(0,e.jsx)("button",{id:"g-disband-btn",type:"button",className:"contrast",disabled:n.length===0,onClick:()=>{G()},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)(ze,{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)(Ve,{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),[b,G]=(0,i.useState)(()=>Be()),[g,y]=(0,i.useState)({q:"",missingOnly:!1}),[P,m]=(0,i.useState)(!0),[I,v]=(0,i.useState)(null),[C,B]=(0,i.useState)(!1),[O,A]=(0,i.useState)(null),[M,j]=(0,i.useState)(1),E=(0,i.useCallback)(l=>{d(f=>{let w=typeof l=="function"?l(f):l;return r.current=w,w})},[]),H=(0,i.useCallback)((l,f)=>{let w=window.setTimeout(()=>{n.current.delete(w),t.current&&l()},f);return n.current.add(w),w},[]),x=(0,i.useCallback)(l=>new Promise(f=>{let w=window.setTimeout(()=>{n.current.delete(w),a.current.delete(w),f()},l);n.current.add(w),a.current.set(w,f)}),[]),$=(0,i.useCallback)(async l=>{let f=++c.current;try{let w=await Pe(l??r.current);t.current&&f===c.current&&G(w)}catch{t.current&&f===c.current&&G({...Be(),loaded:!0})}},[]),D=(0,i.useCallback)(async l=>{let f=await z({force:l?.force});return t.current&&(E(f),v(null),$(f)),f},[$,E]),_=(0,i.useCallback)(async(l,f)=>{let w=[600,1200,1200,1200,1200,1200];for(let N of w){if(await x(N),!t.current)return;let T;try{T=await z({force:!0})}catch{continue}if(!t.current)return;let W=(T.chats??[]).find(q=>q.chatId===l);if(W&&Re(W,f)){E(T),$(T);return}}},[x,$,E]);(0,i.useEffect)(()=>(t.current=!0,(async()=>{m(!0);try{await D()}catch(l){t.current&&(E(J),v(l instanceof Error?l.message:String(l)),$(J))}finally{t.current&&m(!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 F=(0,i.useMemo)(()=>Ge(s.chats,g),[s.chats,g]),S=(0,i.useMemo)(()=>Ie(F,M),[F,M]);(0,i.useEffect)(()=>{M!==S.page&&j(S.page)},[M,S.page]);async function p(){B(!0);try{await D({force:!0})}catch(l){v(l instanceof Error?l.message:String(l))}finally{t.current&&B(!1)}}async function L(){if(r.current.bots.length===0){alert(o("groups.noBotsOnline"));return}let l=[];try{l=await K()}catch{}t.current&&A({type:"create",roleProfiles:l})}function U(l,f,w){let N=String(l.chatId),T=Array.isArray(l.invalidBotIds)?l.invalidBotIds:[],W=f.filter($e=>!T.includes($e)),q=new Set(W);typeof l.creator=="string"&&l.creator&&q.add(l.creator);let ae=Te(r.current,N,w||N,W,l.creator);E(ae),$(ae),_(N,q).catch(()=>{})}let u=(0,i.useCallback)(l=>{let f=new Set((l.memberBots??[]).filter(N=>N.inChat).map(N=>N.larkAppId));if(!r.current.bots.filter(N=>!f.has(N.larkAppId)).length){alert("All configured bots are already in this chat.");return}A({type:"add-bots",chat:l})},[]),h=(0,i.useCallback)(l=>{let f=oe(l.name??""),w=f==="profile"?oe(l.chatId):f;A({type:"save-profile",chat:l,suggestedProfileId:w})},[]),k=(0,i.useCallback)(l=>{A({type:"manage",chat:l})},[]);function R(l){let f=document.getElementById("g-body");f&&(f.scrollTop=0),j(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)(Y,{id:"g-create",className:"page-primary-action",onClick:()=>{L()},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:g.q,onChange:l=>{let f=l.currentTarget.value;j(1),y(w=>({...w,q:f}))}}),(0,e.jsxs)("label",{className:"filter-toggle",children:[(0,e.jsx)("input",{type:"checkbox",name:"missing",checked:g.missingOnly,onChange:l=>{let f=l.currentTarget.checked;j(1),y(w=>({...w,missingOnly:f}))}}),(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")," ",P?"-/-":`${F.length}/${s.chats.length}`]}),(0,e.jsx)(ce,{id:"g-refresh",label:o("groups.refresh"),busy:C,disabled:C,onClick:()=>{p()}})]}),I?(0,e.jsxs)("p",{className:"hint-warn",children:["\u52A0\u8F7D\u7FA4\u7EC4\u5931\u8D25\uFF1A",I]}):null,(0,e.jsx)("section",{className:"overview-block groups-matrix-section",children:P?(0,e.jsx)("div",{id:"g-loading",children:(0,e.jsx)(X,{label:o("common.loading")})}):(0,e.jsxs)("div",{className:"groups-list-wrap",id:"g-table-wrap",children:[F.length===0?(0,e.jsx)("div",{className:"empty groups-list-empty",id:"g-body",children:o("groups.empty")}):(0,e.jsx)(ue,{id:"g-body",className:"groups-list",children:S.rows.map(l=>(0,e.jsx)(We,{chat:l,bots:s.bots,roleContext:b,tr:o,onAddBots:u,onSaveProfile:h,onManage:k},l.chatId))}),F.length>0&&S.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:S.page,pages:S.totalPages,from:S.from,to:S.to,total:S.total})}),(0,e.jsxs)("div",{className:"groups-pagination-actions",children:[(0,e.jsx)("button",{type:"button",disabled:S.page<=1,onClick:()=>R(S.page-1),children:o("groups.prevPage")}),(0,e.jsx)("button",{type:"button",disabled:S.page>=S.totalPages,onClick:()=>R(S.page+1),children:o("groups.nextPage")})]})]}):null]})}),(0,e.jsx)(Xe,{dialog:O,snapshot:s,tr:o,onClose:()=>A(null),onCreated:U,onReloadGroups:D,onRefreshRoleContext:()=>$(),setTimer:H})]})}function ut(o){return ie(o,(0,e.jsx)(Ye,{}))}export{ut as renderGroupsPage};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as Me}from"./chunk-FDZ7WOBW.js";import{c as Re}from"./chunk-
|
|
1
|
+
import{a as Me}from"./chunk-FDZ7WOBW.js";import{c as Re}from"./chunk-HK7NIBJG.js";import{c as Ct,h as $e,q as rt}from"./chunk-5CJMHTT4.js";import{D as ke,F as V,u as o,v as Vt,w as Mt}from"./chunk-6J5LS5AU.js";import{a as Ie}from"./chunk-SYC6D5XU.js";import{a as Ds,b as Fs,d as Te}from"./chunk-5THX4DI2.js";import{c as Rt}from"./chunk-7SZRL6FY.js";var b=Rt(Ds(),1),gs=Rt(Fs(),1);var tt={bad:0,warn:1,info:2},Ae=["research","edit","run","delegate","discuss"],G=["research","edit","run","delegate","discuss"],Gt=[{key:"overview",label:"insights.tabOverview"},{key:"sessions",label:"insights.tabSessions"},{key:"flow",label:"insights.tabFlow"},{key:"dist",label:"insights.tabDist"},{key:"hot",label:"insights.tabHot"}],Ut=[{key:"all",label:"insights.timeAll",days:0},{key:"1d",label:"insights.time1d",days:1},{key:"7d",label:"insights.time7d",days:7},{key:"30d",label:"insights.time30d",days:30}],Yt=["all","review","failed","slow"],Es=["overview","sessions","flow","dist","hot"],Le=[{key:"recent",label:"insights.sortRecent"},{key:"review",label:"insights.sortReview"},{key:"spans",label:"insights.sortSpans"},{key:"fails",label:"insights.sortFails"},{key:"slow",label:"insights.sortSlow"},{key:"agent",label:"insights.sortAgent"}],De=["recent","review","spans","fails","slow","agent"],Jt=["failure","slow","retry","read_write_imbalance"],Fe=[{key:"all",label:"spanAll"},{key:"user",label:"senderHuman"},{key:"a2a_agent",label:"senderA2A"},{key:"system",label:"senderSystem"}],Ee=[{key:"all",label:"spanAll"},{key:"failure",label:"tag.failure"},{key:"slow",label:"tag.slow"}],lt=new Set(["tool_error","test_failed","typecheck_failed","lint_failed","command_failed","timeout","no_output"]);function Qt(){return{messages:[],total:0,hasMore:!1,nextOffset:0,loading:!1,q:"",role:"all",tag:"all",openOps:new Set}}function T(e){return Number.isFinite(e)?Math.round(e).toLocaleString("en-US"):"-"}function O(e){return e==null||!Number.isFinite(e)?"-":e<1e3?`${Math.round(e)}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.round(e/6e4)}m`}function _e(e){return e==="error"?"!":e==="running"?"~":"OK"}function Pt(e,s){return s||(e?e.status==="unsupported_cli"?o("insights.unsupported"):e.status==="transcript_missing"?o("insights.noTranscript"):e.status==="parse_error"?o("insights.parseError"):e.status:"-")}function q(e){return String(e.title??"").replace(/^(?:@\S+\s*)+/,"").trim()||String(e.sessionId??"")}function Xt(e){return e==="bad"?o("insights.sevBad"):e==="warn"?o("insights.sevWarn"):o("insights.sevInfo")}function je(e,s){let n=o(e);return n===e?s:n}function He(e){return je(`insights.suggestion.${e.id}.title`,e.title)}function U(e){let s=`insights.phase.${e}`,n=o(s);return n===s?e:n}function ct(e){return String(e||"unknown").replace(/[^a-z0-9_-]/gi,"-")}function W(e){return`phase-${ct(e)}`}function Ot(e){return!e||e.status!=="ok"?!1:e.agg.failedSpans>0||e.agg.slowSpans>0||e.suggestions.some(s=>s.severity!=="info")}function Be(e){return{session:{sessionId:e.sessionId,cliId:e.cliId,cliSessionId:e.cliSessionId,title:e.title,botName:e.botName,larkAppId:e.larkAppId,workingDir:e.workingDir,status:e.status,lastMessageAt:e.lastMessageAt},report:e.report}}function At(e){return String(e.session.cliId??"unknown")}var Ce=["claude-code","seed","relay","aiden","codex","traex","antigravity"];function qe(e){let s=new Map;for(let n of e){let i=At(n);s.set(i,(s.get(i)??0)+1)}return[...s.entries()].map(([n,i])=>({id:n,count:i})).sort((n,i)=>{let r=Ce.indexOf(n.id),l=Ce.indexOf(i.id);return(r<0?99:r)-(l<0?99:l)||n.id.localeCompare(i.id)})}function dt(e){let s=String(e.session.workingDir??"").replace(/\/+$/,"");return s?s.split("/").pop()||s:""}function We(e){let s=new Map;for(let n of e){let i=dt(n);i&&s.set(i,(s.get(i)??0)+1)}return[...s.entries()].map(([n,i])=>({id:n,count:i})).sort((n,i)=>i.count-n.count||n.id.localeCompare(i.id))}function Lt(e,s,n,i=new Set,r={}){let l=n.trim().toLowerCase();return e.filter(g=>{let c=g.session,d=g.report;return r.analyzableOnly&&d?.status!=="ok"||r.project&&dt(g)!==r.project||r.sinceMs&&Number(c.lastMessageAt??c.spawnedAt??0)<r.sinceMs||i.size&&!i.has(At(g))||s==="review"&&!Ot(d)||s==="failed"&&!(d?.status==="ok"&&d.agg.failedSpans>0)||s==="slow"&&!(d?.status==="ok"&&d.agg.slowSpans>0)?!1:l?`${q(c)} ${V(c)} ${c.cliId??""} ${c.workingDir??""} ${c.sessionId??""}`.toLowerCase().includes(l):!0})}function Ke(e){let s={totalSpans:0,failedSpans:0,slowSpans:0,failByTool:{},phase:{research:{count:0,ms:0},edit:{count:0,ms:0},run:{count:0,ms:0},delegate:{count:0,ms:0},discuss:{count:0,ms:0}},readWriteRatio:null,compactions:0,subagentCostShare:null},n=0,i=new Map;for(let l of e){let g=l.report;if(!g||g.status!=="ok")continue;n+=1;let c=g.agg;s.totalSpans+=c.totalSpans,s.failedSpans+=c.failedSpans,s.slowSpans+=c.slowSpans,s.compactions+=c.compactions;for(let[d,a]of Object.entries(c.failByTool??{}))s.failByTool[d]=(s.failByTool[d]??0)+a;for(let d of Ae){let a=c.phase?.[d];a&&(s.phase[d].count+=a.count,s.phase[d].ms+=a.ms)}for(let d of g.suggestions??[]){let a=i.get(d.id);a?a.count+=1:i.set(d.id,{id:d.id,title:d.title,severity:d.severity,count:1,evidence:d.evidence??[],action:d.action})}}s.readWriteRatio=s.phase.edit.count>0?Number((s.phase.research.count/s.phase.edit.count).toFixed(2)):null;let r=Object.entries(s.failByTool).map(([l,g])=>({tool:l,count:g})).sort((l,g)=>g.count-l.count).slice(0,5);return{totalCount:e.length,analyzedCount:n,agg:s,topFailedTools:r,suggestions:[...i.values()]}}function Z(e){return Ae.reduce((s,n)=>s+(e.agg.phase?.[n]?.ms??0),0)}function ze(e){return e.map(s=>s.report).filter(s=>!!s&&s.status==="ok")}function Ve(e){if(!e.length)return 0;let s=[...e].sort((i,r)=>i-r),n=Math.floor(s.length/2);return s.length%2?s[n]:(s[n-1]+s[n])/2}function _s(e){return e?.status==="ok"?e.agg.failedSpans*6+e.agg.slowSpans*3+e.suggestions.filter(s=>s.severity==="bad").length*5:0}function Ge(e,s){let n=r=>Number(r.session.lastMessageAt??0),i=r=>{let l=r.report,g=l?.status==="ok"?l.agg:null;switch(s){case"spans":return g?.totalSpans??-1;case"fails":return g?.failedSpans??-1;case"slow":return g?.slowSpans??-1;case"agent":return l?.status==="ok"?Z(l):-1;case"review":return _s(l);default:return 0}};return[...e].sort((r,l)=>s==="recent"?n(l)-n(r):i(l)-i(r)||n(l)-n(r))}function Ue(e){let s=`insights.intent.${e}`,n=o(s);return n===s?e:n}function et(e){let s=`insights.result.${e}`,n=o(s);return n===s?e:n}function st(e){let s=`insights.tag.${e}`,n=o(s);return n===s?e:n}function K(e,s){let n=`insights.${e}.${s.id}`,i=o(n,s.params);return i===n?s.id:i}function Ye(e){return K("turnHeadline",e)}var Pe={"shell command":"insights.struct.shell","file edit":"insights.struct.fileEdit","read/search":"insights.struct.readSearch","agent task":"insights.struct.agentTask","tool input":"insights.struct.toolInput","tool result":"insights.struct.toolResult","tool error":"insights.struct.toolError","patch failed":"insights.struct.patchFailed","patch applied":"insights.struct.patchApplied"};function Zt(e){if(!e)return"";let s=e.match(/^exit (-?\d+)$/);return s?o("insights.struct.exit",{code:s[1]}):Pe[e]?je(Pe[e],e):e}function Je(e){return e.status==="error"||!!e.result&<.has(e.result.category)}function Dt(e,s){return e&&e.kind!=="unknown"?Ue(e.kind):s}function te(e){return Dt(e.intent,e.tool)}function Ft(e){return e?[e.kind!=="unknown"?Ue(e.kind):"",e.subject,e.detail].filter(Boolean).join(" \xB7 "):""}var js=["failure","retry","read_write_imbalance","slow"];function Qe(e){for(let s of js)if(e.includes(s)){let n=o(`insights.advice.${s}`);if(n!==`insights.advice.${s}`)return n}return""}function Xe(e,s){let n=e.spans??[],i=s?(e.recommendations??[]).find(l=>l.id===s)??null:null;if(!i)return{rec:null,spanIdx:new Set,turnIdx:new Set};let r=(i.evidence?.spanIndexes??[]).filter(l=>Number.isInteger(l)&&l>=0&&l<n.length);return{rec:i,spanIdx:new Set(r),turnIdx:new Set(i.evidence?.turnIndexes??[])}}function Et(e){return e.replace(/<(mentions|attachments|available_bots|system-reminder|quoted_messages|sender)\b[\s\S]*?<\/\1>/g," ").replace(/<botmux_reminder>[\s\S]*?<\/botmux_reminder>/g," ").replace(/<\/?(user_message|local-command-[a-z]+)>/g," ").replace(/<sender\b[^>]*\/?>/g," ").replace(/<mention\b[^>]*\/?>/g," ").replace(/\[用户引用了消息[\s\S]*?\]/g," ").replace(/\[来自[^\]]*@mention\]/g," ").replace(/\[(图片|文件)\s*\d+[^\]\n]*\][^\n]*/g," ").replace(/[ \t]+/g," ").replace(/ *\n */g,`
|
|
2
2
|
`).replace(/\n{3,}/g,`
|
|
3
3
|
|
|
4
4
|
`).trim()}var _t=new Me({html:!1,linkify:!0,breaks:!0});_t.validateLink=e=>/^(https?:|mailto:)/i.test(e.trim());var Oe=_t.renderer.rules.link_open;_t.renderer.rules.link_open=(e,s,n,i,r)=>(e[s].attrSet("target","_blank"),e[s].attrSet("rel","noopener noreferrer nofollow"),Oe?Oe(e,s,n,i,r):r.renderToken(e,s,n));function Ze(e){try{return _t.render(e).trim()||`<p>${Vt(e)}</p>`}catch{return`<p>${Vt(e)}</p>`}}function wt(e){return e.prompt?.source?.kind??"user"}function ts(e){let s=[];for(let n of e)if(n.role==="agent"){let i=s[s.length-1];i&&i.kind==="ops"&&i.turnIndex===n.turnIndex?i.msgs.push(n):s.push({kind:"ops",turnIndex:n.turnIndex,msgs:[n]})}else s.push({kind:"prompt",msg:n});return s}function es(e){let s=new Map;for(let r of e.events??[])r.phase&&s.set(r.phase,(s.get(r.phase)??0)+(r.durationMs??0)+1);let n="discuss",i=-1;for(let[r,l]of s)l>i&&(i=l,n=r);return n}function ss(e,s,n){let i=Ut.find(l=>l.key===e),r=i&&i.days>0?Date.now()-i.days*864e5:void 0;return{project:s||void 0,sinceMs:r,analyzableOnly:!n}}function ee(){let e=typeof location<"u"&&location.hash||"",s=e.indexOf("?");if(s<0)return{};let n={};for(let[i,r]of new URLSearchParams(e.slice(s+1)))n[i]=r;return n}function ns(e){let s=new URLSearchParams;for(let[i,r]of Object.entries(e))r&&s.set(i,r);let n=s.toString();return"#/insights"+(n?`?${n}`:"")}function as(){let e=ee();return Es.includes(e.tab)?e.tab:"overview"}async function is(){let e=await fetch("/api/insights/summary?limit=200",{cache:"no-store"}),s=await e.json().catch(()=>({}));if(!e.ok||s?.ok===!1||!s.overview)throw new Error(String(s?.error??e.status));return s.overview}async function os(e){let s=await fetch(`/api/sessions/${encodeURIComponent(e)}/insight?detail=spans`,{cache:"no-store"}),n=await s.json().catch(()=>({}));if(!s.ok||n?.ok===!1)throw new Error(String(n?.error??s.status));return n.report}async function rs(e,s){let n=new URLSearchParams({detail:"conversation",offset:String(s.offset),limit:String(s.limit)});s.q&&n.set("q",s.q),s.role&&s.role!=="all"&&n.set("role",s.role),s.tag&&s.tag!=="all"&&n.set("tag",s.tag);let i=await fetch(`/api/sessions/${encodeURIComponent(e)}/insight?${n.toString()}`,{cache:"no-store"}),r=await i.json().catch(()=>({}));if(!i.ok||r?.ok===!1)throw new Error(String(r?.error??i.status));let l=r?.conversation;return{messages:l?.messages??[],total:l?.total??0,hasMore:!!l?.hasMore,nextOffset:l?.nextOffset??s.offset+(l?.messages?.length??0)}}async function ls(e,s){let n=await fetch(`/api/sessions/${encodeURIComponent(e)}/insight/turn/${s}?offset=0&limit=40000`,{cache:"no-store"}),i=await n.json().catch(()=>({}));if(!n.ok||i?.ok===!1)throw new Error(String(i?.error??n.status));return i?.turn?.prompt??{text:"",truncated:!1}}function cs(e){let s=e.session;return`${V(s)} \xB7 ${String(s.cliId??"-")}${s.workingDir?` \xB7 ${dt(e)}`:""} \xB7 ${Mt(s.lastMessageAt??s.spawnedAt??0)}`}var t=Rt(Te(),1),se="__all__";function ds(e,s,n){return Math.min(Math.max(e,s),n)}function Hs(e){let s=e.getBoundingClientRect(),n=12,i=Math.min(420,Math.max(280,window.innerWidth-n*2)),r=ds(Math.round(s.left+s.width/2-i/2),n,Math.max(n,window.innerWidth-i-n)),l=Math.round(s.bottom+8),g=ds(l,n,Math.max(n,window.innerHeight-132)),c=Math.max(140,Math.floor(window.innerHeight-g-n));return{top:g,left:r,width:i,maxHeight:c}}function pt(e,s){let n=new Set(e);return n.has(s)?n.delete(s):n.add(s),n}function us(e,s){let n=new Set(e);return n.add(s),n}function Ht({text:e,className:s="md-body"}){return(0,t.jsx)("div",{className:s,dangerouslySetInnerHTML:{__html:Ze(e)}})}function Bs({tip:e}){return(0,t.jsx)("div",{id:"insight-tip",className:"ins-tip",role:"tooltip",hidden:!e.visible,style:{left:e.x,top:e.y},children:e.text})}function Y({label:e,value:s,sub:n}){return(0,t.jsxs)("div",{className:"card",children:[(0,t.jsx)("div",{className:"cv",children:s}),(0,t.jsx)("div",{className:"cl",children:e}),n?(0,t.jsx)("div",{className:"cs",children:n}):null]})}function ae(){return(0,t.jsxs)("p",{className:"insight-disclosure",children:["\u2696\uFE0E ",o("insights.disclosure")]})}function ie({phase:e}){let s=Object.entries(e??{}).filter(([,n])=>n.count>0||n.ms>0);return s.length?(0,t.jsx)("div",{className:"mph",children:s.map(([n,i])=>{let r=Math.max(1,i.ms||i.count);return(0,t.jsx)("i",{className:W(n),style:{flex:r},title:`${U(n)} \xB7 ${i.count} \xB7 ${O(i.ms)}`},n)})}):null}function qs({active:e,onChange:s}){return(0,t.jsx)("div",{className:"insight-tabs",role:"tablist",children:Gt.map(n=>(0,t.jsx)("button",{type:"button",className:`itab${n.key===e?" on":""}`,role:"tab","aria-selected":n.key===e,onClick:()=>s(n.key),children:o(n.label)},n.key))})}function Ws({data:e}){let s=e.agg,n=s.readWriteRatio===null?"-":s.readWriteRatio.toFixed(1),i=e.topFailedTools.slice(0,5),r=[...e.suggestions].sort((l,g)=>tt[l.severity]-tt[g.severity]||g.count-l.count).slice(0,6);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"cards insights-metrics",children:[(0,t.jsx)(Y,{label:o("insights.metricSessions"),value:T(e.totalCount),sub:o("insights.metricAnalyzed",{count:e.analyzedCount})}),(0,t.jsx)(Y,{label:o("insights.metricSpans"),value:T(s.totalSpans),sub:o("insights.metricSafe")}),(0,t.jsx)(Y,{label:o("insights.metricFailed"),value:T(s.failedSpans),sub:i[0]?`${i[0].tool} \xD7${i[0].count}`:""}),(0,t.jsx)(Y,{label:o("insights.metricSlow"),value:T(s.slowSpans)}),(0,t.jsx)(Y,{label:o("insights.metricRw"),value:n,sub:o("insights.metricCompactions",{count:s.compactions})})]}),(0,t.jsxs)("div",{className:"insights-overview-grid",children:[(0,t.jsxs)("section",{className:"block recblock",children:[(0,t.jsx)("h3",{children:o("insights.recommendations")}),(0,t.jsx)("div",{className:"reclist",children:r.length?r.map(l=>(0,t.jsxs)("div",{className:`rec ${l.severity}`,children:[(0,t.jsxs)("div",{className:"rectop",children:[(0,t.jsx)("b",{children:He(l)}),(0,t.jsx)("span",{children:Xt(l.severity)})]}),(0,t.jsx)("div",{className:"recev",children:o("insights.seenInSessions",{count:l.count})})]},l.id)):(0,t.jsx)("p",{className:"mut",children:o("insights.noRecommendations")})})]}),(0,t.jsxs)("section",{className:"block",children:[(0,t.jsx)("h3",{children:o("insights.toolFailures")}),(0,t.jsx)(ms,{rows:i.map(l=>({key:l.tool,label:l.tool,count:l.count})),empty:o("insights.noFailures")})]})]}),(0,t.jsx)(ae,{})]})}function ms({rows:e,empty:s,renderValue:n,onRowClick:i}){if(!e.length)return(0,t.jsx)("div",{className:"hbars",children:(0,t.jsx)("p",{className:"mut",children:s})});let r=Math.max(1,...e.map(l=>l.count));return(0,t.jsx)("div",{className:"hbars",children:e.map(l=>{let g=Math.max(l.count?4:0,Math.round(l.count/r*100)),c=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"hblabel",title:l.label,children:l.label}),(0,t.jsx)("div",{className:"hbtrack",children:(0,t.jsx)("div",{className:"hbfill",style:{width:`${g}%`}})}),(0,t.jsxs)("div",{className:"hbval",children:[n?n(l):T(l.count),l.sub]})]});return i?(0,t.jsx)("button",{type:"button",className:"hbrow hbrow-click",onClick:()=>i(l),children:c},l.key):(0,t.jsx)("div",{className:"hbrow",children:c},l.key)})})}function Ks({records:e}){let i=Date.now(),r=new Array(28).fill(0);for(let c of e){let d=Number(c.session.lastMessageAt??0);if(!d)continue;let a=Math.floor((i-d)/864e5);a>=0&&a<28&&(r[27-a]+=1)}let l=r.reduce((c,d)=>c+d,0);if(!l)return null;let g=Math.max(1,...r);return(0,t.jsxs)("section",{className:"block trend-block",children:[(0,t.jsxs)("div",{className:"ihist-head",children:[(0,t.jsx)("h3",{children:o("insights.distTrend")}),(0,t.jsxs)("span",{className:"mut",children:[o("insights.distTrendSub")," \xB7 ",l]})]}),(0,t.jsx)("div",{className:"trend",children:r.map((c,d)=>{let a=new Date(i-(27-d)*864e5),v=`${a.getMonth()+1}-${a.getDate()} \xB7 ${c}`;return(0,t.jsx)("i",{className:"trendbar",style:{height:`${c?Math.max(8,Math.round(c/g*100)):2}%`},title:v},d)})})]})}function ut({title:e,values:s,bins:n,fmtMedian:i=T,sortKey:r,onSort:l}){let g=n.map(a=>({label:a.label,count:s.filter(a.test).length})),c=Math.max(1,...g.map(a=>a.count)),d=Math.max(1,s.length);return(0,t.jsxs)("section",{className:"block ihist",children:[(0,t.jsxs)("div",{className:"ihist-head",children:[(0,t.jsx)("h3",{children:e}),(0,t.jsx)("span",{className:"mut",children:o("insights.distMedian",{v:i(Ve(s))})}),r?(0,t.jsxs)("button",{type:"button",className:"ihist-jump",onClick:()=>l?.(r),children:[o("insights.viewSessions")," \u203A"]}):null]}),(0,t.jsx)("div",{className:"hbars",children:g.map(a=>{let v=Math.max(a.count?4:0,Math.round(a.count/c*100)),p=Math.round(a.count/d*100);return(0,t.jsxs)("div",{className:"hbrow",children:[(0,t.jsx)("div",{className:"hblabel",children:a.label}),(0,t.jsx)("div",{className:"hbtrack",children:(0,t.jsx)("div",{className:"hbfill",style:{width:`${v}%`}})}),(0,t.jsxs)("div",{className:"hbval",children:[T(a.count),(0,t.jsxs)("small",{children:[p,"%"]})]})]},a.label)})})]})}function zs({records:e,onSort:s}){let n=ze(e);if(!n.length)return(0,t.jsx)("div",{className:"insight-empty",children:o("insights.distEmpty")});let i=n.map(a=>(a.hot?.files??[]).reduce((v,p)=>v+(p.added??0)+(p.removed??0),0)),r=n.map(a=>a.agg.totalSpans),l=n.map(a=>a.agg.failedSpans),g=n.map(a=>a.agg.slowSpans),c=n.map(a=>Z(a)/6e4),d=n.map(a=>a.agg.readWriteRatio).filter(a=>a!==null&&Number.isFinite(a));return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("p",{className:"mut ins-hint",children:o("insights.distHint")}),(0,t.jsxs)("div",{className:"ihist-grid",children:[(0,t.jsx)(Ks,{records:e}),(0,t.jsx)(ut,{title:o("insights.distSpans"),values:r,onSort:s,sortKey:"spans",bins:[{label:"0-10",test:a=>a<=10},{label:"11-50",test:a=>a>10&&a<=50},{label:"51-200",test:a=>a>50&&a<=200},{label:"201-500",test:a=>a>200&&a<=500},{label:"500+",test:a=>a>500}]}),(0,t.jsx)(ut,{title:o("insights.distFailed"),values:l,onSort:s,sortKey:"fails",bins:[{label:"0",test:a=>a===0},{label:"1-2",test:a=>a>=1&&a<=2},{label:"3-5",test:a=>a>=3&&a<=5},{label:"6-10",test:a=>a>=6&&a<=10},{label:"10+",test:a=>a>10}]}),(0,t.jsx)(ut,{title:o("insights.distSlow"),values:g,onSort:s,sortKey:"slow",bins:[{label:"0",test:a=>a===0},{label:"1-2",test:a=>a>=1&&a<=2},{label:"3-5",test:a=>a>=3&&a<=5},{label:"5+",test:a=>a>5}]}),(0,t.jsx)(ut,{title:o("insights.distAgentTime"),values:c,onSort:s,sortKey:"agent",fmtMedian:a=>`${Math.round(a)}m`,bins:[{label:"<1m",test:a=>a<1},{label:"1-5m",test:a=>a>=1&&a<5},{label:"5-30m",test:a=>a>=5&&a<30},{label:"30m-2h",test:a=>a>=30&&a<120},{label:"2h+",test:a=>a>=120}]}),d.length?(0,t.jsx)(ut,{title:o("insights.distRw"),values:d,fmtMedian:a=>a.toFixed(1),bins:[{label:"0",test:a=>a===0},{label:"0-1",test:a=>a>0&&a<1},{label:"1-3",test:a=>a>=1&&a<3},{label:"3+",test:a=>a>=3}]}):null,(0,t.jsx)(ut,{title:o("insights.distChurn"),values:i,bins:[{label:"0",test:a=>a===0},{label:"1-100",test:a=>a>0&&a<=100},{label:"100-1k",test:a=>a>100&&a<=1e3},{label:"1k-10k",test:a=>a>1e3&&a<=1e4},{label:"10k+",test:a=>a>1e4}]})]}),(0,t.jsx)(ae,{})]})}function Vs({records:e,onSession:s}){let n=e.filter(c=>c.report&&c.report.status==="ok"&&c.report.agg);if(!n.length)return(0,t.jsx)("div",{className:"insight-empty",children:o("insights.distEmpty")});let i={};for(let c of G)i[c]={count:0,ms:0};for(let c of n)for(let d of G){let a=c.report.agg.phase?.[d];a&&(i[d].count+=a.count,i[d].ms+=a.ms)}let r=G.reduce((c,d)=>c+i[d].count,0)||1,l=G.reduce((c,d)=>c+i[d].ms,0)||1,g=[...n].sort((c,d)=>Z(d.report)-Z(c.report)).slice(0,40);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("p",{className:"mut ins-hint",children:o("insights.flowHint")}),(0,t.jsxs)("section",{className:"block flow-pipe-block",children:[(0,t.jsx)("h3",{children:o("insights.flowPipeline")}),(0,t.jsx)("p",{className:"mut flow-sub",children:o("insights.flowPipeSub")}),(0,t.jsx)("div",{className:"flow-pipe",children:G.map((c,d)=>{let a=i[c],v=Math.round(a.count/r*100),p=Math.round(a.ms/l*100);return(0,t.jsxs)("span",{style:{display:"contents"},children:[(0,t.jsxs)("div",{className:"flow-node",children:[(0,t.jsx)("i",{className:`flow-dot ${W(c)}`}),(0,t.jsx)("strong",{children:U(c)}),(0,t.jsxs)("span",{className:"flow-n",children:[T(a.count),(0,t.jsxs)("em",{children:[" \xB7 ",v,"%"]})]}),(0,t.jsxs)("span",{className:"flow-t",children:[O(a.ms),(0,t.jsxs)("em",{children:[" \xB7 ",p,"%"]})]})]}),d<G.length-1?(0,t.jsx)("span",{className:"flow-arrow",children:"\u2192"}):null]},c)})})]}),(0,t.jsxs)("div",{className:"insights-overview-grid",children:[(0,t.jsxs)("section",{className:"block",children:[(0,t.jsx)("h3",{children:o("insights.flowShares")}),(0,t.jsxs)("div",{className:"flow-bhead",children:[(0,t.jsx)("span",{}),(0,t.jsx)("span",{children:o("insights.flowActShare")}),(0,t.jsx)("span",{children:o("insights.flowTimeShare")})]}),(0,t.jsx)("div",{className:"flow-bars",children:G.map(c=>{let d=i[c],a=d.count/r*100,v=d.ms/l*100;return(0,t.jsxs)("div",{className:"flow-brow",children:[(0,t.jsxs)("span",{className:"flow-blabel",children:[(0,t.jsx)("i",{className:W(c)}),U(c)]}),(0,t.jsxs)("span",{className:"flow-btrack",children:[(0,t.jsx)("span",{className:`flow-bfill ${W(c)}`,style:{width:`${Math.max(2,a).toFixed(1)}%`}}),(0,t.jsxs)("em",{children:[Math.round(a),"%"]})]}),(0,t.jsxs)("span",{className:"flow-btrack",children:[(0,t.jsx)("span",{className:`flow-bfill ${W(c)}`,style:{width:`${Math.max(2,v).toFixed(1)}%`}}),(0,t.jsxs)("em",{children:[Math.round(v),"%"]})]})]},c)})})]}),(0,t.jsxs)("section",{className:"block",children:[(0,t.jsx)("h3",{children:o("insights.flowRhythm")}),(0,t.jsx)("div",{className:"flow-rhythm",children:g.map(c=>(0,t.jsxs)("button",{type:"button",className:"flow-sess",onClick:()=>s(String(c.session.sessionId)),children:[(0,t.jsx)("span",{className:"flow-stitle",children:q(c.session)}),(0,t.jsx)(ie,{phase:c.report.agg.phase}),(0,t.jsx)("span",{className:"flow-stime",children:O(Z(c.report))})]},String(c.session.sessionId)))}),(0,t.jsx)("div",{className:"rl-legend",children:G.map(c=>(0,t.jsxs)("span",{className:"rl-item",children:[(0,t.jsx)("i",{className:W(c)}),U(c)]},c))})]})]}),(0,t.jsx)(ae,{})]})}function Gs({records:e,openHot:s,onToggleHot:n,onProject:i,onSession:r}){let l=e.filter(m=>!!m.report&&m.report.status==="ok");if(!l.length)return(0,t.jsx)("div",{className:"insight-empty",children:o("insights.distEmpty")});let g=new Map,c=new Map,d=new Map,a=(m,f,P,C,h)=>{let N=m.get(f);return N||(N={key:f,label:P,sessions:[],reads:0,edits:0,runs:0,fails:0,count:0},m.set(f,N)),N.sessions.some(D=>D.id===C)||N.sessions.push({id:C,title:h}),N};for(let m of l){let f=String(m.session.sessionId),P=q(m.session),C=m.report.hot;for(let h of C?.files??[]){let N=a(g,`file:${h.path}`,h.path,f,P);N.reads+=h.reads,N.edits+=h.edits}for(let h of C?.cmds??[]){let N=a(c,`cmd:${h.cmd}`,h.cmd,f,P);N.runs+=h.runs,N.fails+=h.fails}for(let h of C?.errs??[]){let N=a(d,`err:${h.tool} ${h.result}`,`${h.tool} \xB7 ${et(h.result)}`,f,P);N.count+=h.count}}let v=(m,f)=>f.sessions.length-m.sessions.length,p=[...g.values()].sort((m,f)=>v(m,f)||f.edits+f.reads-(m.edits+m.reads)).slice(0,12),w=[...c.values()].sort((m,f)=>v(m,f)||f.fails-m.fails||f.runs-m.runs).slice(0,12),y=[...d.values()].sort((m,f)=>v(m,f)||f.count-m.count).slice(0,10),x=new Map;for(let m of l){let f=dt(m);if(!f)continue;let P=x.get(f)??{sessions:0,fails:0};P.sessions+=1,P.fails+=m.report.agg.failedSpans,x.set(f,P)}let M=[...x.entries()].map(([m,f])=>({id:m,...f})).sort((m,f)=>f.fails-m.fails||f.sessions-m.sessions).slice(0,10).map(m=>({key:m.id,label:m.id,count:m.sessions,sub:(0,t.jsxs)("small",{children:[m.fails," ",o("insights.hotFailsCol")]})})),k=[...l].filter(m=>m.report.agg.slowSpans>0).sort((m,f)=>f.report.agg.slowSpans-m.report.agg.slowSpans).slice(0,8);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("p",{className:"mut ins-hint",children:o("insights.hotHint")}),(0,t.jsxs)("div",{className:"hot-grid",children:[(0,t.jsx)(ne,{title:o("insights.hotFiles"),rows:p,openHot:s,onToggle:n,onSession:r,meta:m=>`${o("insights.readsShort")}${m.reads} \xB7 ${o("insights.editsShort")}${m.edits}`}),(0,t.jsx)(ne,{title:o("insights.hotCommands"),rows:w,openHot:s,onToggle:n,onSession:r,meta:m=>(0,t.jsxs)(t.Fragment,{children:[m.runs,"\xD7",m.fails?(0,t.jsxs)(t.Fragment,{children:[" \xB7 ",(0,t.jsxs)("span",{className:"bad",children:[m.fails," ",o("insights.hotFailsCol")]})]}):null]})}),(0,t.jsx)(ne,{title:o("insights.hotErrors"),rows:y,openHot:s,onToggle:n,onSession:r,meta:m=>`${m.count}\xD7`}),(0,t.jsxs)("section",{className:"block",children:[(0,t.jsx)("h3",{children:o("insights.hotProjects")}),(0,t.jsx)(ms,{rows:M,empty:"-",onRowClick:m=>i(m.key),renderValue:m=>T(m.count)})]}),(0,t.jsxs)("section",{className:"block hot-sessions",children:[(0,t.jsx)("h3",{children:o("insights.hotSlowSessions")}),(0,t.jsx)("div",{className:"slist",children:k.length?k.map(m=>{let f=m.report.agg;return(0,t.jsxs)("button",{type:"button",className:"srow",onClick:()=>r(String(m.session.sessionId)),children:[(0,t.jsxs)("div",{className:"srmain",children:[(0,t.jsx)("strong",{children:q(m.session)}),(0,t.jsxs)("small",{children:[V(m.session)," \xB7 ",String(m.session.cliId??"-")]})]}),(0,t.jsxs)("div",{className:"srstats",children:[(0,t.jsxs)("b",{children:[o("insights.hotSlowCol"),(0,t.jsx)("em",{children:T(f.slowSpans)})]}),(0,t.jsxs)("b",{children:["span",(0,t.jsx)("em",{children:T(f.totalSpans)})]})]})]},String(m.session.sessionId))}):(0,t.jsx)("p",{className:"mut",children:"-"})})]})]})]})}function ne({title:e,rows:s,openHot:n,onToggle:i,onSession:r,meta:l}){return(0,t.jsxs)("section",{className:"block",children:[(0,t.jsx)("h3",{children:e}),(0,t.jsx)("div",{className:"hotlist",children:s.length?s.map(g=>{let c=n.has(g.key);return(0,t.jsxs)("div",{className:`hotitem${c?" open":""}`,children:[(0,t.jsxs)("button",{type:"button",className:"hotrow","aria-expanded":c,onClick:()=>i(g.key),children:[(0,t.jsx)("span",{className:"hotlabel",title:g.label,children:g.label}),(0,t.jsx)("span",{className:"hotmeta",children:l(g)}),(0,t.jsxs)("span",{className:"hotses",children:[g.sessions.length," ",o("insights.hotSessionsCol")]})]}),c?(0,t.jsx)("div",{className:"hot-sess",children:g.sessions.map(d=>(0,t.jsx)("button",{type:"button",className:"hot-sesslink",onClick:()=>r(d.id),children:d.title||d.id},d.id))}):null]},g.key)}):(0,t.jsx)("p",{className:"mut",children:"-"})})]})}function Us({sort:e,layout:s,onSort:n,onLayout:i}){let r=Le.map(g=>({value:g.key,label:o(g.label)})),l=r.find(g=>g.value===e)?.label??o("insights.sortLabel");return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(rt,{id:"insight-session-sort",className:"insight-sort-menu",ariaLabel:o("insights.sortLabel"),label:l,value:e,options:r,onChange:n}),(0,t.jsx)("div",{className:"insight-layout-switch",role:"group","aria-label":`${o("insights.layoutCard")} / ${o("insights.layoutTable")}`,children:[["card","insights.layoutCard"],["table","insights.layoutTable"]].map(([g,c])=>(0,t.jsx)("button",{type:"button",className:s===g?"active":"","aria-pressed":s===g,onClick:()=>i(g),children:o(c)},g))})]})}function Ys({records:e,selectedId:s,wide:n,onSelect:i,emptyHint:r}){if(!e.length)return(0,t.jsxs)("div",{className:"insight-empty",children:[o("insights.empty"),r?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("br",{}),(0,t.jsx)("span",{className:"mut",children:r})]}):null]});let l=(g,c,d=!1)=>(0,t.jsxs)("b",{className:d?"bad":void 0,children:[g,(0,t.jsx)("em",{children:c})]});return(0,t.jsx)("div",{className:`slist${n?" wide":""}`,children:e.map(g=>{let c=g.session,d=g.report,a=d?.status==="ok",v=d?.agg,p=v?.phase?.research?.count??0,w=v?.phase?.edit?.count??0;return(0,t.jsxs)("button",{type:"button",className:`srow${c.sessionId===s?" on":""}${Ot(d)?" review":""}`,onClick:()=>i(String(c.sessionId)),children:[(0,t.jsxs)("div",{className:"srmain",children:[(0,t.jsx)("strong",{children:q(c)}),(0,t.jsx)("small",{children:cs(g)}),a?(0,t.jsx)(ie,{phase:d.agg.phase}):null]}),a?(0,t.jsxs)("div",{className:"srstats",children:[l(o("insights.spansShort"),T(v.totalSpans)),l(o("insights.failedShort"),T(v.failedSpans),v.failedSpans>0),l(o("insights.slowShort"),T(v.slowSpans)),n?(0,t.jsxs)(t.Fragment,{children:[l(o("insights.readsShort"),T(p)),l(o("insights.editsShort"),T(w)),l(o("insights.durShort"),O(Z(d)))]}):null,l(o("insights.rwShort"),v.readWriteRatio!==null?v.readWriteRatio.toFixed(1):"-")]}):(0,t.jsx)("div",{className:"srmsg",children:Pt(d,g.error)})]},String(c.sessionId))})})}function Js({records:e,selectedId:s,onSelect:n,emptyHint:i}){return e.length?(0,t.jsxs)("div",{className:"stable",children:[(0,t.jsxs)("div",{className:"strow sthead",children:[(0,t.jsx)("span",{className:"stc-title",children:o("insights.colTitle")}),(0,t.jsx)("span",{className:"stc-proj",children:o("insights.colProject")}),(0,t.jsx)("span",{className:"stc-num",children:o("insights.spansShort")}),(0,t.jsx)("span",{className:"stc-num",children:o("insights.failedShort")}),(0,t.jsx)("span",{className:"stc-num",children:o("insights.slowShort")}),(0,t.jsx)("span",{className:"stc-num",children:o("insights.rwShort")}),(0,t.jsx)("span",{className:"stc-num",children:o("insights.durShort")}),(0,t.jsx)("span",{className:"stc-num",children:o("insights.colTime")})]}),e.map(r=>{let l=r.session,g=r.report,c=g?.status==="ok",d=g?.agg;return(0,t.jsxs)("button",{type:"button",className:`strow${l.sessionId===s?" on":""}${Ot(g)?" review":""}${c?"":" nostat"}`,onClick:()=>n(String(l.sessionId)),children:[(0,t.jsxs)("span",{className:"stc-title",children:[(0,t.jsx)("strong",{children:q(l)}),(0,t.jsxs)("small",{children:[V(l)," \xB7 ",String(l.cliId??"-")]})]}),(0,t.jsx)("span",{className:"stc-proj",children:l.workingDir?dt(r):"-"}),c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"stc-num",children:T(d.totalSpans)}),(0,t.jsx)("span",{className:`stc-num${d.failedSpans?" bad":""}`,children:T(d.failedSpans)}),(0,t.jsx)("span",{className:"stc-num",children:T(d.slowSpans)}),(0,t.jsx)("span",{className:"stc-num",children:d.readWriteRatio!==null?d.readWriteRatio.toFixed(1):"-"}),(0,t.jsx)("span",{className:"stc-num",children:O(Z(g))})]}):(0,t.jsx)("span",{className:"stc-msg",children:Pt(g,r.error)}),(0,t.jsx)("span",{className:"stc-num stc-time",children:Mt(l.lastMessageAt??l.spawnedAt??0)})]},String(l.sessionId))})]}):(0,t.jsxs)("div",{className:"insight-empty",children:[o("insights.empty"),i?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("br",{}),(0,t.jsx)("span",{className:"mut",children:i})]}):null]})}function jt({label:e,preview:s}){return s?.text?(0,t.jsxs)("div",{className:"span-io",children:[(0,t.jsx)("span",{className:"span-io-label",children:e}),(0,t.jsxs)("pre",{className:"span-io-text",children:[s.text,s.truncated?`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as T,b as B,d as I,e as N,f as P,g as _}from"./chunk-XJ7BGPJH.js";import{
|
|
1
|
+
import{a as T,b as B,d as I,e as N,f as P,g as _}from"./chunk-XJ7BGPJH.js";import{D as O,F as S,H as W,a as E,u as r,v as n,w as C,z as x}from"./chunk-6J5LS5AU.js";import"./chunk-7SZRL6FY.js";function z(t){let o=String(t??"unknown"),e=`sessions.status.${o}`,i=r(e);return i===e?o:i}function F(t){return String(t??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function D(t){let o=String(t??"unknown");return`<span class="status status-${n(F(o))}">${n(z(o))}</span>`}function q(t){return W(t?.title)||String(t?.sessionId??"")}var A=14,G=49,K=18;function U(){let t=[...E.sessions.values()].filter(o=>typeof o?.sessionId=="string"&&o.sessionId&&o.status!=="closed").sort((o,e)=>Number(e.lastMessageAt??0)-Number(o.lastMessageAt??0));return[...new Set(t.map(o=>String(o.sessionId)))]}function j(t,o,e){let i=Math.max(0,Math.floor(e)),s=Math.max(1,t.width),m=Math.max(1,t.height),a=s/m,l=Math.max(1,o.width),p=Math.max(180,m-Math.max(0,o.top)-K);if(i<=0)return{columns:1,rows:0,frameWidth:Math.floor(l),frameHeight:Math.floor(l/a),ratio:a};let d=null;for(let u=1;u<=i;u+=1){let b=Math.ceil(i/u),f=(l-A*(u-1))/u,L=(p-A*(b-1)-G*b)/b;if(f<=0||L<=0)continue;let h=Math.max(1,Math.min(f,L*a)),M=h/a,c=h*M;(!d||c>d.score)&&(d={columns:u,rows:b,frameWidth:h,frameHeight:M,score:c})}if(!d){let u=Math.min(i,Math.max(1,Math.floor(l/220))),b=Math.ceil(i/u),f=Math.max(1,(l-A*(u-1))/u);return{columns:u,rows:b,frameWidth:Math.floor(f),frameHeight:Math.floor(f/a),ratio:a}}return{columns:d.columns,rows:d.rows,frameWidth:Math.floor(d.frameWidth),frameHeight:Math.floor(d.frameHeight),ratio:a}}function J(t,o){let e=Math.max(1,Math.floor(t.width)),i=Math.max(1,Math.floor(t.height)),s=Math.max(1,o.width),m=Math.max(1,o.height),a=Math.min(1,s/e,m/i);return{width:e,height:i,scale:a}}function Q(t,o){return t?`frame:${T(t,o)??"none"}`:"missing"}function V(t,o){let e=E.sessions.get(t),i=o?et(t):"";if(!e)return`<div class="monitor-room-card-title">
|
|
2
2
|
<strong>${n(t)}</strong>
|
|
3
3
|
<span>${n(r("monitorRoom.missing"))}</span>
|
|
4
4
|
</div>${i}`;let s=q(e),m=T(e),a=S(e),l=m?nt(t):"";return`<div class="monitor-room-card-title">
|