botmux 3.14.0 → 3.16.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/README.en.md +2 -2
- package/README.md +2 -2
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/destroy-result.d.ts +159 -0
- package/dist/adapters/backend/destroy-result.d.ts.map +1 -0
- package/dist/adapters/backend/destroy-result.js +223 -0
- package/dist/adapters/backend/destroy-result.js.map +1 -0
- package/dist/adapters/backend/herdr-backend.d.ts +4 -0
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +23 -1
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/mojo-backend.d.ts +577 -0
- package/dist/adapters/backend/mojo-backend.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-backend.js +2471 -0
- package/dist/adapters/backend/mojo-backend.js.map +1 -0
- package/dist/adapters/backend/mojo-budgets.d.ts +21 -0
- package/dist/adapters/backend/mojo-budgets.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-budgets.js +22 -0
- package/dist/adapters/backend/mojo-budgets.js.map +1 -0
- package/dist/adapters/backend/mojo-isolated-workspace.d.ts +69 -0
- package/dist/adapters/backend/mojo-isolated-workspace.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-isolated-workspace.js +213 -0
- package/dist/adapters/backend/mojo-isolated-workspace.js.map +1 -0
- package/dist/adapters/backend/mojo-process-tree.d.ts +292 -0
- package/dist/adapters/backend/mojo-process-tree.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-process-tree.js +486 -0
- package/dist/adapters/backend/mojo-process-tree.js.map +1 -0
- package/dist/adapters/backend/mojo-types.d.ts +542 -0
- package/dist/adapters/backend/mojo-types.d.ts.map +1 -0
- package/dist/adapters/backend/mojo-types.js +682 -0
- package/dist/adapters/backend/mojo-types.js.map +1 -0
- package/dist/adapters/backend/reproduce-command.js +3 -3
- package/dist/adapters/backend/reproduce-command.js.map +1 -1
- package/dist/adapters/backend/riff-backend.js +1 -1
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +44 -7
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +30 -7
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/backend/session-backend-selector.d.ts +14 -1
- package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
- package/dist/adapters/backend/session-backend-selector.js +82 -10
- package/dist/adapters/backend/session-backend-selector.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.d.ts +30 -0
- package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +60 -0
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +108 -6
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zmx-backend.d.ts +11 -0
- package/dist/adapters/backend/zmx-backend.d.ts.map +1 -1
- package/dist/adapters/backend/zmx-backend.js +16 -1
- package/dist/adapters/backend/zmx-backend.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +2 -2
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +7 -0
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/copilot.d.ts +3 -1
- package/dist/adapters/cli/copilot.d.ts.map +1 -1
- package/dist/adapters/cli/copilot.js +23 -5
- package/dist/adapters/cli/copilot.js.map +1 -1
- package/dist/adapters/cli/cursor.d.ts.map +1 -1
- package/dist/adapters/cli/cursor.js +26 -4
- package/dist/adapters/cli/cursor.js.map +1 -1
- package/dist/adapters/cli/dsh.d.ts.map +1 -1
- package/dist/adapters/cli/dsh.js +5 -1
- package/dist/adapters/cli/dsh.js.map +1 -1
- package/dist/adapters/cli/grok.d.ts.map +1 -1
- package/dist/adapters/cli/grok.js +24 -5
- package/dist/adapters/cli/grok.js.map +1 -1
- package/dist/adapters/cli/kimi.d.ts.map +1 -1
- package/dist/adapters/cli/kimi.js +19 -1
- package/dist/adapters/cli/kimi.js.map +1 -1
- package/dist/adapters/cli/mojo.d.ts +28 -0
- package/dist/adapters/cli/mojo.d.ts.map +1 -0
- package/dist/adapters/cli/mojo.js +58 -0
- package/dist/adapters/cli/mojo.js.map +1 -0
- package/dist/adapters/cli/pi.d.ts +20 -5
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +27 -5
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +251 -1
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +254 -1
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts +13 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +19 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/runner-input.d.ts +3 -3
- package/dist/adapters/cli/runner-input.d.ts.map +1 -1
- package/dist/adapters/cli/runner-input.js +4 -3
- package/dist/adapters/cli/runner-input.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +3 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +51 -30
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +33 -4
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/bot-registry.d.ts +42 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +54 -4
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/arg-utils.d.ts +5 -0
- package/dist/cli/arg-utils.d.ts.map +1 -1
- package/dist/cli/arg-utils.js +7 -0
- package/dist/cli/arg-utils.js.map +1 -1
- package/dist/cli/bots-list-output.d.ts +130 -2
- package/dist/cli/bots-list-output.d.ts.map +1 -1
- package/dist/cli/bots-list-output.js +173 -27
- package/dist/cli/bots-list-output.js.map +1 -1
- package/dist/cli/daemon-lifecycle-env.d.ts +10 -3
- package/dist/cli/daemon-lifecycle-env.d.ts.map +1 -1
- package/dist/cli/daemon-lifecycle-env.js +38 -11
- package/dist/cli/daemon-lifecycle-env.js.map +1 -1
- package/dist/cli/dashboard-command.d.ts +15 -0
- package/dist/cli/dashboard-command.d.ts.map +1 -1
- package/dist/cli/dashboard-command.js +22 -0
- package/dist/cli/dashboard-command.js.map +1 -1
- package/dist/cli/log-tail.d.ts +54 -0
- package/dist/cli/log-tail.d.ts.map +1 -0
- package/dist/cli/log-tail.js +167 -0
- package/dist/cli/log-tail.js.map +1 -0
- package/dist/cli/pm2-env.d.ts +16 -0
- package/dist/cli/pm2-env.d.ts.map +1 -0
- package/dist/cli/pm2-env.js +63 -0
- package/dist/cli/pm2-env.js.map +1 -0
- package/dist/cli/pm2-fleet-lock.d.ts +26 -0
- package/dist/cli/pm2-fleet-lock.d.ts.map +1 -0
- package/dist/cli/pm2-fleet-lock.js +50 -0
- package/dist/cli/pm2-fleet-lock.js.map +1 -0
- package/dist/cli/pm2-god-retirement.d.ts +59 -0
- package/dist/cli/pm2-god-retirement.d.ts.map +1 -0
- package/dist/cli/pm2-god-retirement.js +95 -0
- package/dist/cli/pm2-god-retirement.js.map +1 -0
- package/dist/cli/session-list-wake.d.ts +41 -0
- package/dist/cli/session-list-wake.d.ts.map +1 -0
- package/dist/cli/session-list-wake.js +102 -0
- package/dist/cli/session-list-wake.js.map +1 -0
- package/dist/cli/workflow.d.ts.map +1 -1
- package/dist/cli/workflow.js +26 -0
- package/dist/cli/workflow.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +941 -118
- package/dist/cli.js.map +1 -1
- package/dist/codex-app-runner.js +261 -49
- package/dist/codex-app-runner.js.map +1 -1
- package/dist/core/cli-runtime-update.d.ts +8 -0
- package/dist/core/cli-runtime-update.d.ts.map +1 -1
- package/dist/core/cli-runtime-update.js +127 -8
- package/dist/core/cli-runtime-update.js.map +1 -1
- package/dist/core/close-residual.d.ts +64 -0
- package/dist/core/close-residual.d.ts.map +1 -0
- package/dist/core/close-residual.js +93 -0
- package/dist/core/close-residual.js.map +1 -0
- package/dist/core/closed-session-card.d.ts.map +1 -1
- package/dist/core/closed-session-card.js +11 -3
- package/dist/core/closed-session-card.js.map +1 -1
- package/dist/core/command-discovery.d.ts.map +1 -1
- package/dist/core/command-discovery.js +4 -1
- package/dist/core/command-discovery.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +129 -27
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +3 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +230 -1
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/daemon-background-close.d.ts +19 -0
- package/dist/core/daemon-background-close.d.ts.map +1 -0
- package/dist/core/daemon-background-close.js +39 -0
- package/dist/core/daemon-background-close.js.map +1 -0
- package/dist/core/dashboard-command/overview.d.ts +4 -0
- package/dist/core/dashboard-command/overview.d.ts.map +1 -1
- package/dist/core/dashboard-command/overview.js +8 -1
- package/dist/core/dashboard-command/overview.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +415 -42
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +4 -0
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +3 -0
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/dashboard-url.d.ts +37 -0
- package/dist/core/dashboard-url.d.ts.map +1 -1
- package/dist/core/dashboard-url.js +71 -0
- package/dist/core/dashboard-url.js.map +1 -1
- package/dist/core/deferred-schedule-settlement.d.ts +15 -1
- package/dist/core/deferred-schedule-settlement.d.ts.map +1 -1
- package/dist/core/deferred-schedule-settlement.js +4 -1
- package/dist/core/deferred-schedule-settlement.js.map +1 -1
- package/dist/core/device-isolation-daemon.d.ts +91 -1
- package/dist/core/device-isolation-daemon.d.ts.map +1 -1
- package/dist/core/device-isolation-daemon.js +346 -2
- package/dist/core/device-isolation-daemon.js.map +1 -1
- package/dist/core/local-terminal-opener.d.ts.map +1 -1
- package/dist/core/local-terminal-opener.js +5 -1
- package/dist/core/local-terminal-opener.js.map +1 -1
- package/dist/core/loopback-target.d.ts +14 -0
- package/dist/core/loopback-target.d.ts.map +1 -0
- package/dist/core/loopback-target.js +20 -0
- package/dist/core/loopback-target.js.map +1 -0
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +16 -2
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/mojo-containment-command.d.ts +20 -0
- package/dist/core/mojo-containment-command.d.ts.map +1 -0
- package/dist/core/mojo-containment-command.js +266 -0
- package/dist/core/mojo-containment-command.js.map +1 -0
- package/dist/core/mojo-containment.d.ts +575 -0
- package/dist/core/mojo-containment.d.ts.map +1 -0
- package/dist/core/mojo-containment.js +1158 -0
- package/dist/core/mojo-containment.js.map +1 -0
- package/dist/core/mojo-launcher-env-quarantine.d.ts +30 -0
- package/dist/core/mojo-launcher-env-quarantine.d.ts.map +1 -0
- package/dist/core/mojo-launcher-env-quarantine.js +175 -0
- package/dist/core/mojo-launcher-env-quarantine.js.map +1 -0
- package/dist/core/mojo-session-identity.d.ts +3 -0
- package/dist/core/mojo-session-identity.d.ts.map +1 -0
- package/dist/core/mojo-session-identity.js +126 -0
- package/dist/core/mojo-session-identity.js.map +1 -0
- package/dist/core/persistent-backend.d.ts +32 -8
- package/dist/core/persistent-backend.d.ts.map +1 -1
- package/dist/core/persistent-backend.js +55 -17
- package/dist/core/persistent-backend.js.map +1 -1
- package/dist/core/plugins/mcp/gateway.d.ts +14 -1
- package/dist/core/plugins/mcp/gateway.d.ts.map +1 -1
- package/dist/core/plugins/mcp/gateway.js +70 -3
- package/dist/core/plugins/mcp/gateway.js.map +1 -1
- package/dist/core/plugins/mcp/host.d.ts +2 -0
- package/dist/core/plugins/mcp/host.d.ts.map +1 -1
- package/dist/core/plugins/mcp/host.js +2 -0
- package/dist/core/plugins/mcp/host.js.map +1 -1
- package/dist/core/plugins/pm2.d.ts.map +1 -1
- package/dist/core/plugins/pm2.js +16 -3
- package/dist/core/plugins/pm2.js.map +1 -1
- package/dist/core/plugins/service-manager.d.ts +9 -0
- package/dist/core/plugins/service-manager.d.ts.map +1 -1
- package/dist/core/plugins/service-manager.js +33 -16
- package/dist/core/plugins/service-manager.js.map +1 -1
- package/dist/core/preview-port-owner.d.ts +109 -0
- package/dist/core/preview-port-owner.d.ts.map +1 -0
- package/dist/core/preview-port-owner.js +320 -0
- package/dist/core/preview-port-owner.js.map +1 -0
- package/dist/core/remote-cli-ids.d.ts +5 -0
- package/dist/core/remote-cli-ids.d.ts.map +1 -0
- package/dist/core/remote-cli-ids.js +24 -0
- package/dist/core/remote-cli-ids.js.map +1 -0
- package/dist/core/{riff-shutdown-detach.d.ts → remote-shutdown-detach.d.ts} +40 -39
- package/dist/core/remote-shutdown-detach.d.ts.map +1 -0
- package/dist/core/{riff-shutdown-detach.js → remote-shutdown-detach.js} +85 -83
- package/dist/core/remote-shutdown-detach.js.map +1 -0
- package/dist/core/{riff-worker-shutdown-readiness.d.ts → remote-worker-shutdown-readiness.d.ts} +5 -4
- package/dist/core/remote-worker-shutdown-readiness.d.ts.map +1 -0
- package/dist/core/{riff-worker-shutdown-readiness.js → remote-worker-shutdown-readiness.js} +4 -3
- package/dist/core/remote-worker-shutdown-readiness.js.map +1 -0
- package/dist/core/reply-target.d.ts +16 -1
- package/dist/core/reply-target.d.ts.map +1 -1
- package/dist/core/reply-target.js +61 -0
- package/dist/core/reply-target.js.map +1 -1
- package/dist/core/session-group-birth.d.ts +26 -0
- package/dist/core/session-group-birth.d.ts.map +1 -1
- package/dist/core/session-group-birth.js +81 -4
- package/dist/core/session-group-birth.js.map +1 -1
- package/dist/core/session-manager.d.ts +15 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +259 -5
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-model.d.ts +46 -0
- package/dist/core/session-model.d.ts.map +1 -0
- package/dist/core/session-model.js +42 -0
- package/dist/core/session-model.js.map +1 -0
- package/dist/core/session-owner-reminder.d.ts +63 -0
- package/dist/core/session-owner-reminder.d.ts.map +1 -0
- package/dist/core/session-owner-reminder.js +196 -0
- package/dist/core/session-owner-reminder.js.map +1 -0
- package/dist/core/session-preview-registry.d.ts +53 -0
- package/dist/core/session-preview-registry.d.ts.map +1 -0
- package/dist/core/session-preview-registry.js +82 -0
- package/dist/core/session-preview-registry.js.map +1 -0
- package/dist/core/session-preview.d.ts +114 -0
- package/dist/core/session-preview.d.ts.map +1 -0
- package/dist/core/session-preview.js +184 -0
- package/dist/core/session-preview.js.map +1 -0
- package/dist/core/session-rename.d.ts.map +1 -1
- package/dist/core/session-rename.js +5 -3
- package/dist/core/session-rename.js.map +1 -1
- package/dist/core/session-wake-deadline.d.ts +5 -0
- package/dist/core/session-wake-deadline.d.ts.map +1 -0
- package/dist/core/session-wake-deadline.js +13 -0
- package/dist/core/session-wake-deadline.js.map +1 -0
- package/dist/core/shutdown-budgets.d.ts +7 -6
- package/dist/core/shutdown-budgets.d.ts.map +1 -1
- package/dist/core/shutdown-budgets.js +11 -10
- package/dist/core/shutdown-budgets.js.map +1 -1
- package/dist/core/skills/frontmatter.d.ts.map +1 -1
- package/dist/core/skills/frontmatter.js +6 -1
- package/dist/core/skills/frontmatter.js.map +1 -1
- package/dist/core/terminal-control-grant.d.ts +74 -0
- package/dist/core/terminal-control-grant.d.ts.map +1 -0
- package/dist/core/terminal-control-grant.js +183 -0
- package/dist/core/terminal-control-grant.js.map +1 -0
- package/dist/core/terminal-proxy.d.ts.map +1 -1
- package/dist/core/terminal-proxy.js +4 -5
- package/dist/core/terminal-proxy.js.map +1 -1
- package/dist/core/terminal-write-auth.d.ts +4 -11
- package/dist/core/terminal-write-auth.d.ts.map +1 -1
- package/dist/core/terminal-write-auth.js +19 -16
- package/dist/core/terminal-write-auth.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +36 -29
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +88 -10
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +9 -7
- package/dist/core/types.js.map +1 -1
- package/dist/core/workbench-link.d.ts +81 -0
- package/dist/core/workbench-link.d.ts.map +1 -0
- package/dist/core/workbench-link.js +109 -0
- package/dist/core/workbench-link.js.map +1 -0
- package/dist/core/worker-pool.d.ts +312 -11
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +2515 -217
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +6 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +447 -116
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/aggregator.d.ts +33 -3
- package/dist/dashboard/aggregator.d.ts.map +1 -1
- package/dist/dashboard/aggregator.js +93 -17
- package/dist/dashboard/aggregator.js.map +1 -1
- package/dist/dashboard/auth-session-connections.d.ts +59 -0
- package/dist/dashboard/auth-session-connections.d.ts.map +1 -0
- package/dist/dashboard/auth-session-connections.js +109 -0
- package/dist/dashboard/auth-session-connections.js.map +1 -0
- package/dist/dashboard/auth.d.ts +99 -1
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +176 -64
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +5 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +4 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/control-audit.d.ts +112 -0
- package/dist/dashboard/control-audit.d.ts.map +1 -0
- package/dist/dashboard/control-audit.js +195 -0
- package/dist/dashboard/control-audit.js.map +1 -0
- package/dist/dashboard/control-csrf.d.ts +123 -0
- package/dist/dashboard/control-csrf.d.ts.map +1 -0
- package/dist/dashboard/control-csrf.js +392 -0
- package/dist/dashboard/control-csrf.js.map +1 -0
- package/dist/dashboard/daemon-reconcile.d.ts +26 -0
- package/dist/dashboard/daemon-reconcile.d.ts.map +1 -0
- package/dist/dashboard/daemon-reconcile.js +46 -0
- package/dist/dashboard/daemon-reconcile.js.map +1 -0
- package/dist/dashboard/debug-terminal.d.ts.map +1 -1
- package/dist/dashboard/debug-terminal.js +18 -4
- package/dist/dashboard/debug-terminal.js.map +1 -1
- package/dist/dashboard/events-sse.d.ts +60 -0
- package/dist/dashboard/events-sse.d.ts.map +1 -0
- package/dist/dashboard/events-sse.js +63 -0
- package/dist/dashboard/events-sse.js.map +1 -0
- package/dist/dashboard/h5-auth.d.ts +256 -0
- package/dist/dashboard/h5-auth.d.ts.map +1 -0
- package/dist/dashboard/h5-auth.js +825 -0
- package/dist/dashboard/h5-auth.js.map +1 -0
- package/dist/dashboard/managed-spawn.d.ts +36 -0
- package/dist/dashboard/managed-spawn.d.ts.map +1 -0
- package/dist/dashboard/managed-spawn.js +169 -0
- package/dist/dashboard/managed-spawn.js.map +1 -0
- package/dist/dashboard/preview-content-capability.d.ts +41 -0
- package/dist/dashboard/preview-content-capability.d.ts.map +1 -0
- package/dist/dashboard/preview-content-capability.js +127 -0
- package/dist/dashboard/preview-content-capability.js.map +1 -0
- package/dist/dashboard/preview-contract.d.ts +85 -0
- package/dist/dashboard/preview-contract.d.ts.map +1 -0
- package/dist/dashboard/preview-contract.js +198 -0
- package/dist/dashboard/preview-contract.js.map +1 -0
- package/dist/dashboard/preview-guard-page.d.ts +52 -0
- package/dist/dashboard/preview-guard-page.d.ts.map +1 -0
- package/dist/dashboard/preview-guard-page.js +162 -0
- package/dist/dashboard/preview-guard-page.js.map +1 -0
- package/dist/dashboard/preview-interaction.d.ts +57 -0
- package/dist/dashboard/preview-interaction.d.ts.map +1 -0
- package/dist/dashboard/preview-interaction.js +198 -0
- package/dist/dashboard/preview-interaction.js.map +1 -0
- package/dist/dashboard/preview-proxy.d.ts +113 -0
- package/dist/dashboard/preview-proxy.d.ts.map +1 -0
- package/dist/dashboard/preview-proxy.js +543 -0
- package/dist/dashboard/preview-proxy.js.map +1 -0
- package/dist/dashboard/public-redact.d.ts +23 -0
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +90 -21
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/request-identity.d.ts +77 -0
- package/dist/dashboard/request-identity.d.ts.map +1 -0
- package/dist/dashboard/request-identity.js +72 -0
- package/dist/dashboard/request-identity.js.map +1 -0
- package/dist/dashboard/session-cleanup.d.ts +5 -0
- package/dist/dashboard/session-cleanup.d.ts.map +1 -1
- package/dist/dashboard/session-cleanup.js +4 -0
- package/dist/dashboard/session-cleanup.js.map +1 -1
- package/dist/dashboard/settings-write-applier.d.ts +5 -1
- package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
- package/dist/dashboard/settings-write-applier.js +14 -0
- package/dist/dashboard/settings-write-applier.js.map +1 -1
- package/dist/dashboard/standing-link.d.ts +76 -0
- package/dist/dashboard/standing-link.d.ts.map +1 -0
- package/dist/dashboard/standing-link.js +111 -0
- package/dist/dashboard/standing-link.js.map +1 -0
- package/dist/dashboard/terminal-control.d.ts +105 -0
- package/dist/dashboard/terminal-control.d.ts.map +1 -0
- package/dist/dashboard/terminal-control.js +296 -0
- package/dist/dashboard/terminal-control.js.map +1 -0
- package/dist/dashboard/terminal-front-proxy.d.ts +55 -0
- package/dist/dashboard/terminal-front-proxy.d.ts.map +1 -0
- package/dist/dashboard/terminal-front-proxy.js +397 -0
- package/dist/dashboard/terminal-front-proxy.js.map +1 -0
- package/dist/dashboard/terminal-view-capability.d.ts +97 -0
- package/dist/dashboard/terminal-view-capability.d.ts.map +1 -0
- package/dist/dashboard/terminal-view-capability.js +145 -0
- package/dist/dashboard/terminal-view-capability.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-api.d.ts +59 -0
- package/dist/dashboard/web/agent-workbench-api.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-api.js +227 -0
- package/dist/dashboard/web/agent-workbench-api.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.d.ts +59 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.js +195 -0
- package/dist/dashboard/web/agent-workbench-appearance-menu.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance.d.ts +222 -0
- package/dist/dashboard/web/agent-workbench-appearance.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-appearance.js +499 -0
- package/dist/dashboard/web/agent-workbench-appearance.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-capabilities.d.ts +13 -0
- package/dist/dashboard/web/agent-workbench-capabilities.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-capabilities.js +24 -0
- package/dist/dashboard/web/agent-workbench-capabilities.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-chat.d.ts +90 -0
- package/dist/dashboard/web/agent-workbench-chat.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-chat.js +168 -0
- package/dist/dashboard/web/agent-workbench-chat.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-page.d.ts +3 -0
- package/dist/dashboard/web/agent-workbench-dock-page.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-page.js +23 -0
- package/dist/dashboard/web/agent-workbench-dock-page.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-view.d.ts +22 -0
- package/dist/dashboard/web/agent-workbench-dock-view.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-dock-view.js +76 -0
- package/dist/dashboard/web/agent-workbench-dock-view.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-model.d.ts +196 -0
- package/dist/dashboard/web/agent-workbench-model.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-model.js +529 -0
- package/dist/dashboard/web/agent-workbench-model.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-page.d.ts +3 -0
- package/dist/dashboard/web/agent-workbench-page.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-page.js +27 -0
- package/dist/dashboard/web/agent-workbench-page.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-panes.d.ts +49 -0
- package/dist/dashboard/web/agent-workbench-panes.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-panes.js +468 -0
- package/dist/dashboard/web/agent-workbench-panes.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-session-list.d.ts +42 -0
- package/dist/dashboard/web/agent-workbench-session-list.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-session-list.js +353 -0
- package/dist/dashboard/web/agent-workbench-session-list.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-storage.d.ts +49 -0
- package/dist/dashboard/web/agent-workbench-storage.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-storage.js +197 -0
- package/dist/dashboard/web/agent-workbench-storage.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-touch.d.ts +46 -0
- package/dist/dashboard/web/agent-workbench-touch.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-touch.js +96 -0
- package/dist/dashboard/web/agent-workbench-touch.js.map +1 -0
- package/dist/dashboard/web/agent-workbench-view.d.ts +34 -0
- package/dist/dashboard/web/agent-workbench-view.d.ts.map +1 -0
- package/dist/dashboard/web/agent-workbench-view.js +439 -0
- package/dist/dashboard/web/agent-workbench-view.js.map +1 -0
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +63 -2
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +18 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +362 -36
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +8 -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/control-csrf.d.ts +4 -0
- package/dist/dashboard/web/control-csrf.d.ts.map +1 -0
- package/dist/dashboard/web/control-csrf.js +26 -0
- package/dist/dashboard/web/control-csrf.js.map +1 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
- package/dist/dashboard/web/dashboard-routes.js +2 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -1
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +11 -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 +140 -6
- package/dist/dashboard/web/i18n.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/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +41 -1
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +5 -1
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +3 -0
- package/dist/dashboard/web/settings-page.d.ts.map +1 -1
- package/dist/dashboard/web/settings-page.js +56 -10
- package/dist/dashboard/web/settings-page.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +4 -2
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +27 -2
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +43 -4
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +3 -0
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +11 -0
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard/web/update-action.d.ts +12 -0
- package/dist/dashboard/web/update-action.d.ts.map +1 -1
- package/dist/dashboard/web/update-action.js +11 -0
- package/dist/dashboard/web/update-action.js.map +1 -1
- package/dist/dashboard/workbench-doctor.d.ts +114 -0
- package/dist/dashboard/workbench-doctor.d.ts.map +1 -0
- package/dist/dashboard/workbench-doctor.js +620 -0
- package/dist/dashboard/workbench-doctor.js.map +1 -0
- package/dist/dashboard/workbench-ticket.d.ts +165 -0
- package/dist/dashboard/workbench-ticket.d.ts.map +1 -0
- package/dist/dashboard/workbench-ticket.js +495 -0
- package/dist/dashboard/workbench-ticket.js.map +1 -0
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/agent-workbench-dock-page-IKAC5CFL.js +1 -0
- package/dist/dashboard-web/chunks/agent-workbench-page-M53UN5EB.js +1 -0
- package/dist/dashboard-web/chunks/bot-defaults-page-YKE5SDZF.js +10 -0
- package/dist/dashboard-web/chunks/chunk-22WIADUT.js +2 -0
- package/dist/dashboard-web/chunks/chunk-24ONYQMR.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-6O7KXFD2.js → chunk-2W6SCN3M.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-4XNJX6B3.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-Q2MT4VWH.js → chunk-F6KNPF4R.js} +11 -9
- package/dist/dashboard-web/chunks/chunk-FXW3V4JR.js +1 -0
- package/dist/dashboard-web/chunks/chunk-G5ZS2YUS.js +1 -0
- package/dist/dashboard-web/chunks/chunk-KTQ7B6ZR.js +1 -0
- package/dist/dashboard-web/chunks/{chunk-U3ZFSO7E.js → chunk-NACP7BMR.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-2KZO5KSJ.js → connectors-page-VOISXXII.js} +1 -1
- package/dist/dashboard-web/chunks/{feedback-page-CLVTOLLO.js → feedback-page-RN6HRZMS.js} +1 -1
- package/dist/dashboard-web/chunks/groups-page-UQT6DCB7.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-4RPU2CRU.js → insights-page-HJFDYR5N.js} +3 -3
- package/dist/dashboard-web/chunks/{monitor-room-OTKQ2CXK.js → monitor-room-V7PCP47V.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-IJPUB6JT.js → monitoring-page-NKEKVQAP.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-QSR3J44Y.js → office-page-GVJF73XW.js} +1 -1
- package/dist/dashboard-web/chunks/overview-page-KHLV6VTI.js +1 -0
- package/dist/dashboard-web/chunks/{plugin-page-VEGTCEAS.js → plugin-page-J3OF5IY4.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-6NWJMOB5.js → roles-page-WQIRSOLZ.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-6I3LNXD4.js → schedules-page-J2DEY2X6.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-7BQFEA5P.js +8 -0
- package/dist/dashboard-web/chunks/settings-page-BJEIOFJH.js +2 -0
- package/dist/dashboard-web/chunks/{skills-page-M2Q6L5CB.js → skills-page-HGIFR3IU.js} +2 -2
- package/dist/dashboard-web/chunks/{team-federation-page-7I7FDE3B.js → team-federation-page-MR5ZPL4B.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-HQXRL65L.js → v3-page-GBR5JWPE.js} +2 -2
- package/dist/dashboard-web/chunks/{whiteboards-page-LQKC4TAZ.js → whiteboards-page-QAZM4BN3.js} +1 -1
- package/dist/dashboard-web/index.html +8 -1
- package/dist/dashboard-web/style.css +2006 -10
- package/dist/dashboard.js +1017 -264
- package/dist/dashboard.js.map +1 -1
- package/dist/dsh-runner.js +8 -1
- package/dist/dsh-runner.js.map +1 -1
- package/dist/global-config.d.ts +30 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +33 -0
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +46 -27
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +43 -27
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +1 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +22 -6
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +118 -24
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +15 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +30 -0
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +48 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +138 -41
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/identity-cache.d.ts +14 -6
- package/dist/im/lark/identity-cache.d.ts.map +1 -1
- package/dist/im/lark/identity-cache.js +69 -26
- package/dist/im/lark/identity-cache.js.map +1 -1
- package/dist/im/lark/lark-hosts.d.ts +13 -0
- package/dist/im/lark/lark-hosts.d.ts.map +1 -1
- package/dist/im/lark/lark-hosts.js +16 -0
- package/dist/im/lark/lark-hosts.js.map +1 -1
- package/dist/im/lark/overview-card.d.ts +22 -0
- package/dist/im/lark/overview-card.d.ts.map +1 -1
- package/dist/im/lark/overview-card.js +53 -3
- package/dist/im/lark/overview-card.js.map +1 -1
- package/dist/im/lark/sessions-card.d.ts.map +1 -1
- package/dist/im/lark/sessions-card.js +26 -3
- package/dist/im/lark/sessions-card.js.map +1 -1
- package/dist/im/lark/workflow-slash-command.d.ts +6 -0
- package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
- package/dist/im/lark/workflow-slash-command.js +7 -0
- package/dist/im/lark/workflow-slash-command.js.map +1 -1
- package/dist/index-daemon.js +27 -4
- package/dist/index-daemon.js.map +1 -1
- package/dist/index-dashboard.d.ts +3 -0
- package/dist/index-dashboard.d.ts.map +1 -0
- package/dist/index-dashboard.js +94 -0
- package/dist/index-dashboard.js.map +1 -0
- package/dist/platform/team-agents-client.d.ts +199 -0
- package/dist/platform/team-agents-client.d.ts.map +1 -0
- package/dist/platform/team-agents-client.js +263 -0
- package/dist/platform/team-agents-client.js.map +1 -0
- package/dist/platform/tunnel-client.d.ts +6 -0
- package/dist/platform/tunnel-client.d.ts.map +1 -1
- package/dist/platform/tunnel-client.js.map +1 -1
- package/dist/services/async-trigger-state.d.ts +7 -3
- package/dist/services/async-trigger-state.d.ts.map +1 -1
- package/dist/services/async-trigger-state.js +28 -0
- package/dist/services/async-trigger-state.js.map +1 -1
- package/dist/services/async-trigger-store.d.ts +13 -4
- package/dist/services/async-trigger-store.d.ts.map +1 -1
- package/dist/services/async-trigger-store.js +55 -8
- package/dist/services/async-trigger-store.js.map +1 -1
- package/dist/services/bot-config-store.d.ts +1 -11
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +27 -3
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/bot-profile-store.d.ts +17 -2
- package/dist/services/bot-profile-store.d.ts.map +1 -1
- package/dist/services/bot-profile-store.js +93 -12
- package/dist/services/bot-profile-store.js.map +1 -1
- package/dist/services/bridge-fallback-gate.d.ts +15 -7
- package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
- package/dist/services/bridge-fallback-gate.js +43 -16
- package/dist/services/bridge-fallback-gate.js.map +1 -1
- package/dist/services/bridge-turn-queue.d.ts +10 -1
- package/dist/services/bridge-turn-queue.d.ts.map +1 -1
- package/dist/services/bridge-turn-queue.js +29 -9
- package/dist/services/bridge-turn-queue.js.map +1 -1
- package/dist/services/claude-transcript.d.ts +19 -0
- package/dist/services/claude-transcript.d.ts.map +1 -1
- package/dist/services/claude-transcript.js +57 -5
- package/dist/services/claude-transcript.js.map +1 -1
- package/dist/services/codex-app-threads.d.ts +2 -0
- package/dist/services/codex-app-threads.d.ts.map +1 -1
- package/dist/services/codex-app-threads.js +1 -1
- package/dist/services/codex-app-threads.js.map +1 -1
- package/dist/services/codex-reasoning-effort.d.ts +8 -0
- package/dist/services/codex-reasoning-effort.d.ts.map +1 -1
- package/dist/services/codex-reasoning-effort.js +24 -0
- package/dist/services/codex-reasoning-effort.js.map +1 -1
- package/dist/services/cursor-resume-policy.d.ts.map +1 -1
- package/dist/services/cursor-resume-policy.js +15 -3
- package/dist/services/cursor-resume-policy.js.map +1 -1
- package/dist/services/open-platform-rename.d.ts.map +1 -1
- package/dist/services/open-platform-rename.js +3 -2
- package/dist/services/open-platform-rename.js.map +1 -1
- package/dist/services/ordinary-turn-recovery.d.ts +76 -0
- package/dist/services/ordinary-turn-recovery.d.ts.map +1 -0
- package/dist/services/ordinary-turn-recovery.js +349 -0
- package/dist/services/ordinary-turn-recovery.js.map +1 -0
- package/dist/services/peer-cross-ref-store.d.ts +8 -0
- package/dist/services/peer-cross-ref-store.d.ts.map +1 -0
- package/dist/services/peer-cross-ref-store.js +95 -0
- package/dist/services/peer-cross-ref-store.js.map +1 -0
- package/dist/services/pi-transcript.d.ts.map +1 -1
- package/dist/services/pi-transcript.js +10 -6
- package/dist/services/pi-transcript.js.map +1 -1
- package/dist/services/resume-fresh-policy.d.ts +17 -0
- package/dist/services/resume-fresh-policy.d.ts.map +1 -0
- package/dist/services/resume-fresh-policy.js +24 -0
- package/dist/services/resume-fresh-policy.js.map +1 -0
- package/dist/services/session-group-title.d.ts +1 -0
- package/dist/services/session-group-title.d.ts.map +1 -1
- package/dist/services/session-group-title.js +16 -1
- package/dist/services/session-group-title.js.map +1 -1
- package/dist/services/session-groups-store.d.ts +30 -0
- package/dist/services/session-groups-store.d.ts.map +1 -1
- package/dist/services/session-groups-store.js +26 -4
- package/dist/services/session-groups-store.js.map +1 -1
- package/dist/services/session-owner-notification.d.ts +9 -0
- package/dist/services/session-owner-notification.d.ts.map +1 -0
- package/dist/services/session-owner-notification.js +10 -0
- package/dist/services/session-owner-notification.js.map +1 -0
- package/dist/services/session-owner-reminder-config-store.d.ts +9 -0
- package/dist/services/session-owner-reminder-config-store.d.ts.map +1 -0
- package/dist/services/session-owner-reminder-config-store.js +24 -0
- package/dist/services/session-owner-reminder-config-store.js.map +1 -0
- package/dist/services/session-owner-reminder-store.d.ts +5 -0
- package/dist/services/session-owner-reminder-store.d.ts.map +1 -0
- package/dist/services/session-owner-reminder-store.js +54 -0
- package/dist/services/session-owner-reminder-store.js.map +1 -0
- package/dist/services/session-store.d.ts +98 -21
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +406 -48
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/structured-bridge-clis.d.ts +15 -2
- package/dist/services/structured-bridge-clis.d.ts.map +1 -1
- package/dist/services/structured-bridge-clis.js +16 -1
- package/dist/services/structured-bridge-clis.js.map +1 -1
- package/dist/services/transcript-resolver.d.ts +1 -1
- package/dist/services/transcript-resolver.d.ts.map +1 -1
- package/dist/services/transcript-resolver.js +6 -1
- package/dist/services/transcript-resolver.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +7 -2
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/ensure-herdr-integrations.d.ts +13 -0
- package/dist/setup/ensure-herdr-integrations.d.ts.map +1 -1
- package/dist/setup/ensure-herdr-integrations.js +21 -3
- package/dist/setup/ensure-herdr-integrations.js.map +1 -1
- package/dist/setup/open-platform-automation.d.ts +1 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +107 -7
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/skills/definitions.d.ts +17 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +78 -8
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/injection-mode.d.ts +24 -3
- package/dist/skills/injection-mode.d.ts.map +1 -1
- package/dist/skills/injection-mode.js +64 -15
- package/dist/skills/injection-mode.js.map +1 -1
- package/dist/skills/installer.d.ts +18 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +45 -1
- package/dist/skills/installer.js.map +1 -1
- package/dist/types.d.ts +222 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +1 -1
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js.map +1 -1
- package/dist/utils/child-env.d.ts +92 -2
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +195 -1
- package/dist/utils/child-env.js.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts +25 -14
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +25 -15
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/utils/daemon-rejection-guard.d.ts +35 -0
- package/dist/utils/daemon-rejection-guard.d.ts.map +1 -0
- package/dist/utils/daemon-rejection-guard.js +101 -0
- package/dist/utils/daemon-rejection-guard.js.map +1 -0
- package/dist/utils/dashboard-env.d.ts +53 -0
- package/dist/utils/dashboard-env.d.ts.map +1 -0
- package/dist/utils/dashboard-env.js +116 -0
- package/dist/utils/dashboard-env.js.map +1 -0
- package/dist/utils/global-install.d.ts.map +1 -1
- package/dist/utils/global-install.js +61 -5
- package/dist/utils/global-install.js.map +1 -1
- package/dist/utils/install-diagnostics.d.ts +14 -7
- package/dist/utils/install-diagnostics.d.ts.map +1 -1
- package/dist/utils/install-diagnostics.js +20 -11
- package/dist/utils/install-diagnostics.js.map +1 -1
- package/dist/utils/local-dev-update.d.ts +132 -0
- package/dist/utils/local-dev-update.d.ts.map +1 -0
- package/dist/utils/local-dev-update.js +176 -0
- package/dist/utils/local-dev-update.js.map +1 -0
- package/dist/utils/pending-input-queue.d.ts +12 -1
- package/dist/utils/pending-input-queue.d.ts.map +1 -1
- package/dist/utils/pending-input-queue.js.map +1 -1
- package/dist/worker.js +1517 -236
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +68 -68
- package/dist/workflows/events/payloads.d.ts +14 -14
- package/dist/workflows/events/schema.d.ts +312 -312
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +40 -40
- package/dist/workflows/v3/cli-run.d.ts.map +1 -1
- package/dist/workflows/v3/cli-run.js +7 -0
- package/dist/workflows/v3/cli-run.js.map +1 -1
- package/dist/workflows/v3/goal-cli.d.ts +3 -0
- package/dist/workflows/v3/goal-cli.d.ts.map +1 -1
- package/dist/workflows/v3/goal-cli.js +11 -0
- package/dist/workflows/v3/goal-cli.js.map +1 -1
- package/dist/workflows/v3/run-envelope.d.ts +144 -144
- package/package.json +7 -2
- package/dist/cli/pm2-god-admission.d.ts +0 -8
- package/dist/cli/pm2-god-admission.d.ts.map +0 -1
- package/dist/cli/pm2-god-admission.js +0 -25
- package/dist/cli/pm2-god-admission.js.map +0 -1
- package/dist/core/riff-shutdown-detach.d.ts.map +0 -1
- package/dist/core/riff-shutdown-detach.js.map +0 -1
- package/dist/core/riff-worker-shutdown-readiness.d.ts.map +0 -1
- package/dist/core/riff-worker-shutdown-readiness.js.map +0 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-4RENHE7J.js +0 -10
- package/dist/dashboard-web/chunks/chunk-2WQDS65D.js +0 -1
- package/dist/dashboard-web/chunks/chunk-G5XGBCM6.js +0 -1
- package/dist/dashboard-web/chunks/chunk-WLIVBPJC.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-HLASRTSY.js +0 -8
- package/dist/dashboard-web/chunks/overview-page-6OK63V4V.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-B2TXGJDO.js +0 -8
- package/dist/dashboard-web/chunks/settings-page-6KJADSC6.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
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 Ct,h as Re,q as rt}from"./chunk-5CJMHTT4.js";import{d as Te}from"./chunk-FXW3V4JR.js";import"./chunk-24ONYQMR.js";import{G as ke,I as V,x as o,y as Vt,z as Mt}from"./chunk-F6KNPF4R.js";import{a as Ie}from"./chunk-SYC6D5XU.js";import{a as Ds,b as Fs,d as $e}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
|
-
`).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?`
|
|
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($e(),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?`
|
|
5
5
|
\u2026`:""]})]}):null}function Qs({span:e,current:s}){let n=`${te(e)}${e.intent?.subject?` ${e.intent.subject}`:""}${e.result?` \u2192 ${et(e.result.category)}`:""} \xB7 ${O(e.durationMs)}`;return(0,t.jsx)("i",{className:`op ph-${ct(e.phase)}${Je(e)?" bad":""}${s?" cur":""}`,title:n})}function Xs({spans:e,idx:s}){let n=e[s];if(!n)return null;let i=n.detail,r=i?.evidence??n.evidence,l=[[o("insights.dPhase"),U(n.phase)],[o("insights.dStart"),O(n.relStartMs)],[o("insights.dDur"),O(n.durationMs)]],g=Ft(n.intent);g&&l.push([o("insights.dIntent"),g]),n.result&&l.push([o("insights.dResult"),`${et(n.result.category)}${n.result.exitCode!==void 0?` \xB7 exit ${n.result.exitCode}`:""}`]),n.inputSummary&&l.push([o("insights.dIn"),Zt(n.inputSummary)]),n.outputSummary&&l.push([o("insights.dOut"),Zt(n.outputSummary)]);let c=(n.tags??[]).filter(p=>p!=="normal");c.length&&l.push([o("insights.dTags"),c.map(st).join("\u3001")]);let d=i?.context?.previousIntent?Ft(i.context.previousIntent):"",a=i?.context?.nextIntent?Ft(i.context.nextIntent):"",v=e.map((p,w)=>({sp:p,i:w})).filter(p=>p.sp.turnIndex===n.turnIndex).sort((p,w)=>(p.sp.relStartMs??0)-(w.sp.relStartMs??0));return(0,t.jsxs)("div",{className:"spandetail",children:[(0,t.jsx)("dl",{className:"span-kv",children:l.map(([p,w])=>(0,t.jsxs)("div",{children:[(0,t.jsx)("dt",{children:p}),(0,t.jsx)("dd",{children:w})]},p))}),(0,t.jsx)(jt,{label:o("insights.dCommand"),preview:r?.command}),(0,t.jsx)(jt,{label:o("insights.dCmdOutput"),preview:r?.output}),d||a?(0,t.jsxs)("div",{className:"span-flank",children:[d?(0,t.jsxs)("span",{className:"sf-prev",children:["\u2191 ",d]}):null,a?(0,t.jsxs)("span",{className:"sf-next",children:["\u2193 ",a]}):null]}):null,(0,t.jsxs)("div",{className:"span-ctx",children:[(0,t.jsx)("span",{className:"span-ctx-label",children:o("insights.dTurnContext",{turn:n.turnIndex})}),(0,t.jsx)("div",{className:"opstrip",children:v.map(p=>(0,t.jsx)(Qs,{span:p.sp,current:p.i===s},p.i))})]})]})}function hs({spans:e,idx:s,hot:n,open:i,detailable:r=!0,onToggle:l,scrollTarget:g,onScrolled:c}){let d=(0,b.useRef)(null),a=e[s];if((0,b.useEffect)(()=>{!d.current||g?.kind!=="span"||g.index!==s||(d.current.scrollIntoView({behavior:"smooth",block:"center"}),c?.())},[s,c,g]),!a)return null;let v=a.intent?.subject?(0,t.jsx)("code",{className:"span-subj",children:a.intent.subject}):null,p=a.result,w=(a.tags??[]).filter(x=>x!=="normal"&&x!=="diagnostic"),y=()=>r&&l?.(s);return(0,t.jsxs)("div",{ref:d,className:`spanrow ph-${ct(a.phase)}${a.status==="error"?" error":""}${n?" hot":""}${i?" open":""}`,children:[(0,t.jsxs)("div",{className:`sprow-line${r?" clickable":""}`,role:r?"button":void 0,tabIndex:r?0:void 0,"aria-expanded":r?i:void 0,onClick:y,onKeyDown:x=>{r&&(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),y())},children:[(0,t.jsxs)("span",{className:"span-turn",title:`${o("insights.dStart")} ${O(a.relStartMs)}`,children:["#",String(a.turnIndex??0)]}),(0,t.jsx)("span",{className:`spanst ${a.status}`,children:_e(a.status)}),(0,t.jsx)("b",{className:"span-what",children:te(a)}),v,p&<.has(p.category)?(0,t.jsxs)("span",{className:"span-res rc-bad",children:[et(p.category),p.exitCode!==void 0?` \xB7 exit ${p.exitCode}`:""]}):null,(0,t.jsx)("span",{className:"span-tags",children:w.map(x=>(0,t.jsx)("span",{className:`span-tag tg-${x}`,children:st(x)},x))}),(0,t.jsx)("span",{className:"span-dur",children:O(a.durationMs)}),r?(0,t.jsx)("span",{className:"span-detail-btn","aria-hidden":"true",children:i?o("insights.dCollapse"):o("insights.dDetail")}):null]}),r&&i?(0,t.jsx)(Xs,{spans:e,idx:s}):null]})}function ps({report:e}){let s=e.workSummary;if(!s||!s.fileChanges?.length&&!s.commandsRun?.length)return null;let n=s.fileChanges??[],i=s.commandsRun??[];return(0,t.jsxs)("div",{className:"worksum",children:[(0,t.jsxs)("section",{className:"ws-panel",children:[(0,t.jsx)("h4",{children:o("insights.wsFiles",{n:n.length})}),(0,t.jsx)("div",{className:"ws-list",children:n.length?n.map((r,l)=>(0,t.jsxs)("div",{className:"ws-row",children:[(0,t.jsx)("code",{className:"ws-path",title:r.path,children:r.path}),(0,t.jsx)("span",{className:"ws-meta",children:o("insights.wsReads",{n:r.reads})}),r.added||r.removed?(0,t.jsxs)("span",{className:"ws-stat",children:[(0,t.jsxs)("span",{className:"ws-add",children:["+",r.added??0]}),(0,t.jsxs)("span",{className:"ws-del",children:["-",r.removed??0]})]}):r.edits?(0,t.jsx)("span",{className:"ws-stat ws-stat-edits",children:o("insights.wsEdits",{n:r.edits})}):null]},`${r.path}:${l}`)):(0,t.jsx)("p",{className:"mut",children:o("insights.wsNoFiles")})})]}),(0,t.jsxs)("section",{className:"ws-panel",children:[(0,t.jsx)("h4",{children:o("insights.wsCmds",{n:i.length})}),(0,t.jsx)("div",{className:"ws-list",children:i.length?i.map((r,l)=>{let g=r.failures>0;return(0,t.jsxs)("div",{className:`ws-row${g?" bad":""}`,children:[(0,t.jsxs)("code",{className:"ws-cmd",title:r.command.text,children:[r.command.text,r.command.truncated?"\u2026":""]}),(0,t.jsxs)("span",{className:"ws-meta",children:[r.count>1?(0,t.jsxs)("span",{className:"ws-x",children:["\xD7",r.count]}):null,g?(0,t.jsx)("span",{className:"ws-fail",children:o("insights.wsFail",{n:r.failures})}):null]})]},`${r.command.text}:${l}`)}):(0,t.jsx)("p",{className:"mut",children:o("insights.wsNoCmds")})})]})]})}function Zs({report:e,focus:s,view:n,onSpanFilter:i,onToggleSpan:r,scrollTarget:l,onScrolled:g}){let c=e.spans??[];if(!c.length)return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(ps,{report:e}),(0,t.jsx)("p",{className:"mut",children:o("insights.noSpans")})]});let d=[...c.keys()].sort((p,w)=>(c[p].relStartMs??0)-(c[w].relStartMs??0)),a=new Map;for(let p of d)for(let w of c[p].tags??[])Jt.includes(w)&&a.set(w,(a.get(w)??0)+1);let v=n.spanFilter==="all"?d:d.filter(p=>c[p].tags?.includes(n.spanFilter));return(0,t.jsxs)("div",{className:"evidence",children:[(0,t.jsx)(ps,{report:e}),s.rec?(0,t.jsx)("div",{className:"ev-reason",children:K("why",s.rec.why)}):null,(0,t.jsxs)("div",{className:"spanfilter",children:[(0,t.jsxs)("button",{type:"button",className:`spanchip${n.spanFilter==="all"?" on":""}`,onClick:()=>i("all"),children:[o("insights.spanAll")," ",(0,t.jsx)("b",{children:d.length})]}),Jt.filter(p=>a.has(p)).map(p=>(0,t.jsxs)("button",{type:"button",className:`spanchip tg-${p}${n.spanFilter===p?" on":""}`,onClick:()=>i(p),children:[st(p)," ",(0,t.jsx)("b",{children:a.get(p)})]},p))]}),(0,t.jsx)("div",{className:"spantable",children:v.length?v.map(p=>(0,t.jsx)(hs,{spans:c,idx:p,hot:s.spanIdx.has(p),open:n.openSpans.has(p),onToggle:r,scrollTarget:l,onScrolled:g},p)):(0,t.jsx)("p",{className:"mut",children:o("insights.evNoFlags")})})]})}function oe({src:e,fallback:s}){if(!e?.kind)return(0,t.jsx)("span",{className:"tp-label",children:s??o("insights.turnPrompt")});if(e.kind==="a2a_agent"){let n=e.agentName||e.senderName;return(0,t.jsxs)("span",{className:"tp-label tp-src tp-src-a2a",children:["\u{1F91D} ",n?`${n} \xB7 a2a`:"a2a"]})}return e.kind==="system"?(0,t.jsxs)("span",{className:"tp-label tp-src tp-src-system",children:["\u2699\uFE0F ",o("insights.senderSystem")]}):(0,t.jsxs)("span",{className:"tp-label tp-src tp-src-user",children:["\u{1F464} ",e.senderName||s||o("insights.turnPrompt")]})}function re({src:e}){let s=(e?.mentionedNames??[]).filter(Boolean);return s.length?(0,t.jsxs)("span",{className:"tp-mentions",children:[o("insights.srcMentions")," ",s.map(n=>`@${n}`).join(" ")]}):null}function tn({event:e}){let s=e.status==="error"||!!e.result&<.has(e.result.category),i=`${Dt(e.intent,String(e.label.params.tool??e.kind))}${e.intent?.subject?` ${e.intent.subject}`:""}${e.result?` \u2192 ${et(e.result.category)}`:""} \xB7 ${O(e.durationMs)}`;return(0,t.jsx)("i",{className:`op ph-${ct(e.phase)}${s?" bad":""}`,title:i})}function en({report:e,turn:s,focus:n,view:i,onToggleTurn:r,onToggleSpan:l,onTogglePrompt:g,onTogglePromptRaw:c,onOpenPrompt:d,scrollTarget:a,onScrolled:v}){let p=(0,b.useRef)(null),w=e.spans??[],y=i.openTurns.has(s.turnIndex),x=n.turnIdx.has(s.turnIndex),$=s.metrics,M=s.severity!=="info"?Qe(s.tags):"",k=s.prompt?.text?Et(s.prompt.text)||s.prompt.text:"",m=i.openPrompts.has(s.turnIndex),f=i.rawPrompts.has(s.turnIndex),P=f?(0,t.jsxs)("pre",{className:"tp-raw",children:[k,s.prompt?.truncated?`
|
|
6
6
|
\u2026`:""]}):(0,t.jsx)(Ht,{text:k+(s.prompt?.truncated?" \u2026":"")}),C=`${o("insights.mEdits")}${$.edits} ${o("insights.mRuns")}${$.runs}${$.failures?` \xB7 ${o("insights.mFailures")}${$.failures}`:""} \xB7 ${O($.durationMs)}`;(0,b.useEffect)(()=>{!p.current||a?.kind!=="turn"||a.index!==s.turnIndex||(p.current.scrollIntoView({behavior:"smooth",block:"center"}),v())},[v,a,s.turnIndex]);let h=(N,D,E=!1)=>(0,t.jsxs)("span",{className:`tm${E?" bad":""}`,children:[(0,t.jsx)("i",{children:N}),(0,t.jsx)("b",{children:D})]});return(0,t.jsxs)("div",{ref:p,className:`turnrow sev-${s.severity}${x?" hot":""}${s.severity!=="info"?" flagged":""}${y?" open":""}`,children:[(0,t.jsxs)("div",{className:"turnline",children:[(0,t.jsxs)("span",{className:"turn-no",children:["#",String(s.turnIndex)]}),(0,t.jsx)("b",{className:"turn-headline",children:Ye(s.headline)}),(0,t.jsx)("div",{className:"opstrip turn-strip",children:s.events.map((N,D)=>(0,t.jsx)(tn,{event:N},`${N.spanIndex}:${D}`))}),(0,t.jsx)("span",{className:"turn-mini",children:C}),(0,t.jsx)("button",{type:"button",className:"turn-expand-btn","aria-expanded":y,onClick:()=>r(s.turnIndex),children:y?o("insights.turnCollapse"):o("insights.turnExpand",{count:s.events.length})})]}),k?(0,t.jsxs)("div",{className:"turn-prompt",children:[(0,t.jsx)(oe,{src:s.prompt?.source}),(0,t.jsxs)("div",{className:"tp-body",children:[(0,t.jsx)("div",{className:`tp-md${m?" expanded":""}`,children:P}),(0,t.jsxs)("div",{className:"tp-actions",children:[(0,t.jsx)(re,{src:s.prompt?.source}),(0,t.jsx)("button",{type:"button",className:"tp-toggle",onClick:()=>g(s.turnIndex),children:m?o("insights.turnPromptCollapse"):o("insights.turnPromptExpand")}),(0,t.jsx)("button",{type:"button",className:"tp-toggle",onClick:()=>c(s.turnIndex),children:f?o("insights.turnPromptRendered"):o("insights.turnPromptRaw")}),(0,t.jsx)("button",{type:"button",className:"tp-toggle",onClick:()=>d(s.turnIndex),children:o("insights.turnPromptFull")})]})]})]}):null,M?(0,t.jsx)("div",{className:"turn-advice",children:M}):null,y?(0,t.jsxs)("div",{className:"turn-detail",children:[(0,t.jsxs)("div",{className:"turn-metrics",children:[h(o("insights.mReads"),String($.reads)),h(o("insights.mEdits"),String($.edits)),h(o("insights.mRuns"),String($.runs)),$.failures?h(o("insights.mFailures"),String($.failures),!0):null,h(o("insights.mDur"),O($.durationMs))]}),(0,t.jsx)("div",{className:"spantable",children:s.events.map(N=>(0,t.jsx)(hs,{spans:w,idx:N.spanIndex,hot:!1,open:i.openSpans.has(N.spanIndex),onToggle:l,scrollTarget:a,onScrolled:v},N.spanIndex))})]}):null]})}function sn({report:e,focus:s,view:n,onLedgerSort:i,onLedgerSender:r,onToggleTurn:l,onToggleSpan:g,onTogglePrompt:c,onTogglePromptRaw:d,onOpenPrompt:a,scrollTarget:v,onScrolled:p}){let w=e.spans??[],y=e.turnTimeline??[];if(!y.length)return(0,t.jsx)("p",{className:"mut",children:o("insights.noSpans")});let x=e.recommendations??[],$=x.some(h=>(h.evidence?.turnIndexes?.length??0)>0),M={user:0,a2a_agent:0,system:0};for(let h of y)M[wt(h)]+=1;let k=n.ledgerSender==="all"?y.filter(h=>wt(h)!=="system"):y.filter(h=>wt(h)===n.ledgerSender),m=k.filter(h=>h.severity!=="info").length,f=h=>(0,t.jsx)(en,{report:e,turn:h,focus:s,view:n,onToggleTurn:l,onToggleSpan:g,onTogglePrompt:c,onTogglePromptRaw:d,onOpenPrompt:a,scrollTarget:v,onScrolled:p},h.turnIndex),P=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"spanfilter ledgersender",children:[(0,t.jsxs)("button",{type:"button",className:`spanchip${n.ledgerSender==="all"?" on":""}`,onClick:()=>r("all"),children:[o("insights.spanAll")," ",(0,t.jsx)("b",{children:M.user+M.a2a_agent})]}),M.user?(0,t.jsxs)("button",{type:"button",className:`spanchip${n.ledgerSender==="user"?" on":""}`,onClick:()=>r("user"),children:["\u{1F464} ",o("insights.senderHuman")," ",(0,t.jsx)("b",{children:M.user})]}):null,M.a2a_agent?(0,t.jsxs)("button",{type:"button",className:`spanchip${n.ledgerSender==="a2a_agent"?" on":""}`,onClick:()=>r("a2a_agent"),children:["\u{1F91D} ",o("insights.senderA2A")," ",(0,t.jsx)("b",{children:M.a2a_agent})]}):null,M.system?(0,t.jsxs)("button",{type:"button",className:`spanchip spanchip-sys${n.ledgerSender==="system"?" on":""}`,onClick:()=>r("system"),children:["\u2699\uFE0F ",o("insights.senderSystem")," ",(0,t.jsx)("b",{children:M.system})]}):null]}),$?(0,t.jsxs)("div",{className:"spanfilter ledgersort",children:[(0,t.jsx)("button",{type:"button",className:`spanchip${n.ledgerSort==="normal"?" on":""}`,onClick:()=>i("normal"),children:o("insights.ledgerNormal")}),(0,t.jsx)("button",{type:"button",className:`spanchip${n.ledgerSort==="grouped"?" on":""}`,onClick:()=>i("grouped"),children:o("insights.ledgerGrouped")})]}):null]}),C=e.meta?.capped?(0,t.jsx)("p",{className:"turn-hidden mut",children:o("insights.turnsCapped",{shown:String(e.meta.spansReturned??w.length),total:String(e.meta.spansTotal??w.length)})}):null;if(!k.length)return(0,t.jsxs)("div",{className:"turnlist",children:[P,(0,t.jsx)("p",{className:"mut",children:o("insights.evNoFlags")})]});if(n.ledgerSort==="grouped"&&$){let h=[...x].sort((R,_)=>tt[R.severity]-tt[_.severity]),N=new Map(k.map(R=>[R.turnIndex,R])),D=new Map;for(let R of h)for(let _ of R.evidence?.turnIndexes??[])N.has(_)&&!D.has(_)&&D.set(_,R.id);let E=[];for(let R of h){let _=k.filter(B=>D.get(B.turnIndex)===R.id).sort((B,xt)=>B.turnIndex-xt.turnIndex);_.length&&E.push((0,t.jsxs)("div",{className:"turn-group",children:[(0,t.jsxs)("div",{className:`turn-group-head sev-${R.severity}`,children:[(0,t.jsx)("b",{children:K("rec",{id:R.id,params:{}})}),(0,t.jsx)("span",{children:o("insights.ledgerGroupCount",{count:_.length})})]}),_.map(f)]},R.id))}let J=k.filter(R=>!D.has(R.turnIndex)).sort((R,_)=>R.turnIndex-_.turnIndex);return J.length&&E.push((0,t.jsxs)("div",{className:"turn-group",children:[(0,t.jsxs)("div",{className:"turn-group-head sev-info",children:[(0,t.jsx)("b",{children:o("insights.ledgerOther")}),(0,t.jsx)("span",{children:o("insights.ledgerGroupCount",{count:J.length})})]}),J.map(f)]},"other")),(0,t.jsxs)("div",{className:"turnlist",children:[(0,t.jsx)("p",{className:"turn-sum mut",children:o("insights.turnSummary",{total:k.length,flagged:m})}),P,E,C]})}return(0,t.jsxs)("div",{className:"turnlist",children:[(0,t.jsx)("p",{className:"turn-sum mut",children:o("insights.turnSummary",{total:k.length,flagged:m})}),P,[...k].sort((h,N)=>h.turnIndex-N.turnIndex).map(f),C]})}function bs({turnIndex:e,recByTurn:s}){let n=s.get(e);return n?.length?(0,t.jsx)(t.Fragment,{children:n.map(i=>(0,t.jsxs)("span",{className:"cbub-rec",title:K("rec",{id:i,params:{}}),children:["\u{1F4A1} ",K("rec",{id:i,params:{}})]},i))}):null}function nn({msg:e,recByTurn:s,onOpenPrompt:n}){let i=e.role==="user"?"right":"left",r=e.text?Et(e.text)||e.text:"",l=e.severity&&e.severity!=="info"?` sev-${e.severity}`:"";return(0,t.jsxs)("div",{className:`cbub cbub-${i} role-${e.role}${l}`,children:[(0,t.jsxs)("div",{className:"cbub-head",children:[(0,t.jsx)(oe,{src:e.source}),(0,t.jsx)(re,{src:e.source}),(0,t.jsxs)("span",{className:"cbub-turn",children:["#",String(e.turnIndex)]}),(0,t.jsx)(bs,{turnIndex:e.turnIndex,recByTurn:s})]}),(0,t.jsx)("div",{className:"cbub-body",children:r?(0,t.jsx)(Ht,{text:r+(e.truncated?" \u2026":"")}):(0,t.jsx)("p",{className:"mut",children:o("insights.replayNoText")})}),e.truncated?(0,t.jsx)("div",{className:"cbub-foot",children:(0,t.jsx)("button",{type:"button",className:"tp-toggle",onClick:()=>n(e.turnIndex),children:o("insights.turnPromptFull")})}):null]})}function an({msg:e,open:s,onToggle:n}){let i=e.event;if(!i)return null;let r=i.status==="error"||!!i.result&<.has(i.result.category),l=i.intent?.subject?(0,t.jsx)("code",{className:"span-subj",children:i.intent.subject}):null,g=Dt(i.intent,String(i.label?.params?.tool??i.kind)),c=i.evidence,d=!!(c?.command?.text||c?.output?.text),a=(e.tags??[]).filter(p=>p!=="normal"&&p!=="diagnostic"),v=()=>d&&n(e.id);return(0,t.jsxs)("div",{className:`cop${r?" bad":""}${s?" open":""}`,children:[(0,t.jsxs)("div",{className:`cop-line${d?" clickable":""}`,role:d?"button":void 0,tabIndex:d?0:void 0,onClick:v,onKeyDown:p=>{d&&(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),v())},children:[(0,t.jsx)("i",{className:`op ph-${ct(i.phase)}${r?" bad":""}`}),(0,t.jsx)("b",{className:"span-what",children:g}),l,i.result&<.has(i.result.category)?(0,t.jsxs)("span",{className:"span-res rc-bad",children:[et(i.result.category),i.result.exitCode!==void 0?` \xB7 exit ${i.result.exitCode}`:""]}):null,(0,t.jsx)("span",{className:"span-tags",children:a.map(p=>(0,t.jsx)("span",{className:`span-tag tg-${p}`,children:st(p)},p))}),(0,t.jsx)("span",{className:"span-dur",children:O(i.durationMs)}),d?(0,t.jsx)("span",{className:"span-detail-btn","aria-hidden":"true",children:s?o("insights.dCollapse"):o("insights.dDetail")}):null]}),s&&c?(0,t.jsxs)("div",{className:"spandetail",children:[(0,t.jsx)(jt,{label:o("insights.dCommand"),preview:c.command}),(0,t.jsx)(jt,{label:o("insights.dCmdOutput"),preview:c.output})]}):null]})}function on({unit:e,convo:s,recByTurn:n,onToggleOp:i}){let r=e.msgs.filter(c=>c.text&&!c.event),l=e.msgs.filter(c=>c.event),g=e.msgs.some(c=>c.severity==="bad")?" sev-bad":e.msgs.some(c=>c.severity==="warn")?" sev-warn":"";return(0,t.jsxs)("div",{className:`cbub cbub-left role-agent cbub-ops${g}`,children:[(0,t.jsxs)("div",{className:"cbub-head",children:[(0,t.jsxs)("span",{className:"tp-label tp-src tp-src-system",children:["\u{1F916} ",o("insights.replayAgent")]}),(0,t.jsxs)("span",{className:"cbub-turn",children:["#",String(e.turnIndex)]}),l.length?(0,t.jsx)("span",{className:"cbub-opcount",children:o("insights.replayOps",{count:l.length})}):null,(0,t.jsx)(bs,{turnIndex:e.turnIndex,recByTurn:n})]}),r.length?(0,t.jsx)("div",{className:"cbub-saywrap",children:r.map(c=>(0,t.jsx)("div",{className:"cbub-say",children:(0,t.jsx)(Ht,{text:c.text})},c.id))}):null,l.length?(0,t.jsx)("div",{className:"cbub-ops-list",children:l.map(c=>(0,t.jsx)(an,{msg:c,open:s.openOps.has(c.id),onToggle:i},c.id))}):null]})}function rn({convo:e,recByTurn:s,onQuery:n,onRole:i,onTag:r,onLoadMore:l,onToggleOp:g,onOpenPrompt:c}){let[d,a]=(0,b.useState)(e.q);(0,b.useEffect)(()=>a(e.q),[e.q]);let v=ts(e.messages);return(0,t.jsxs)("div",{className:"convo",children:[(0,t.jsxs)("div",{className:"convo-controls",children:[(0,t.jsx)("input",{type:"search",className:"convo-search",placeholder:o("insights.replaySearch"),value:d,onChange:p=>a(p.currentTarget.value),onKeyDown:p=>{if(p.key!=="Enter")return;p.preventDefault();let w=d.trim();w!==e.q&&n(w)}}),(0,t.jsxs)("div",{className:"convo-filters",children:[(0,t.jsxs)("div",{className:"spanfilter convo-rolefilter",children:[(0,t.jsx)("span",{className:"convo-flabel",children:o("insights.replayBy")}),Fe.map(p=>(0,t.jsx)("button",{type:"button",className:`spanchip${e.role===p.key?" on":""}`,onClick:()=>i(p.key),children:o(`insights.${p.label}`)},p.key))]}),(0,t.jsxs)("div",{className:"spanfilter convo-tagfilter",children:[(0,t.jsx)("span",{className:"convo-flabel",children:o("insights.replayState")}),Ee.map(p=>(0,t.jsx)("button",{type:"button",className:`spanchip${e.tag===p.key?" on":""}`,onClick:()=>r(p.key),children:p.label.startsWith("tag.")?st(p.label.slice(4)):o(`insights.${p.label}`)},p.key))]})]})]}),(0,t.jsx)("div",{className:"convothread",children:e.messages.length?(0,t.jsxs)(t.Fragment,{children:[v.map((p,w)=>p.kind==="prompt"?(0,t.jsx)(nn,{msg:p.msg,recByTurn:s,onOpenPrompt:c},p.msg.id):(0,t.jsx)(on,{unit:p,convo:e,recByTurn:s,onToggleOp:g},`${p.turnIndex}:${w}`)),e.hasMore?(0,t.jsx)("div",{className:"convo-more",children:(0,t.jsx)("button",{type:"button",className:"primary convo-loadmore",disabled:e.loading,onClick:l,children:e.loading?o("insights.detailLoading"):o("insights.replayLoadMore",{shown:e.messages.length,total:e.total})})}):(0,t.jsx)("p",{className:"convo-more mut",children:o("insights.replayAllLoaded",{total:e.total})})]}):e.loading?(0,t.jsx)(Ct,{label:o("insights.detailLoading"),compact:!0}):(0,t.jsx)("p",{className:"mut",children:o("insights.replayEmpty")})})]})}function ln({report:e,activeId:s,onActive:n}){let i=e.recommendations??[];return i.length?(0,t.jsx)("div",{className:"reclist",children:[...i].sort((r,l)=>tt[r.severity]-tt[l.severity]).map(r=>{let l=r.id===s,g=(r.evidence?.spanIndexes?.length??0)>0||(r.evidence?.turnIndexes?.length??0)>0,c=K("impact",r.impact),d=K("why",r.why);return(0,t.jsxs)("button",{type:"button",className:`rec ${r.severity}${g?" rec-clickable":""}${l?" active":""}`,onClick:()=>n(l?null:r.id),children:[(0,t.jsxs)("div",{className:"rectop",children:[(0,t.jsx)("b",{children:K("rec",{id:r.id,params:{}})}),(0,t.jsx)("span",{children:Xt(r.severity)})]}),c?(0,t.jsx)("div",{className:"rec-impact",children:c}):null,r.nextActions.length?(0,t.jsx)("ul",{className:"rec-actions",children:r.nextActions.map(a=>(0,t.jsx)("li",{children:K("action",a)},`${a.id}:${JSON.stringify(a.params)}`))}):null,d?(0,t.jsx)("div",{className:"rec-why",children:d}):null,g?(0,t.jsx)("span",{className:"rec-cta",children:l?o("insights.diagActive"):o("insights.diagShow")}):null]},r.id)})}):(0,t.jsx)("p",{className:"mut",children:o("insights.noRecommendations")})}function cn({report:e}){let s=e.subagents??[];if(!s.length)return null;let n=s.reduce((i,r)=>i+r.durationMs,0);return(0,t.jsxs)("section",{className:"block subagent-block",children:[(0,t.jsxs)("h3",{children:[o("insights.subagents")," ",(0,t.jsxs)("span",{className:"mut",children:["\xB7 ",s.length," \xB7 ",O(n)]})]}),(0,t.jsx)("p",{className:"mut ins-hint",children:o("insights.subagentsHint")}),(0,t.jsx)("div",{className:"sublanes",children:s.map((i,r)=>(0,t.jsxs)("div",{className:`sublane${i.failures?" bad":""}`,children:[(0,t.jsxs)("div",{className:"sublane-head",children:[(0,t.jsx)("span",{className:"sublane-type",children:i.agentType}),(0,t.jsxs)("span",{className:"sublane-task",children:[i.task?.text??"",i.task?.truncated?"\u2026":""]})]}),(0,t.jsx)(ie,{phase:i.phase}),(0,t.jsxs)("div",{className:"sublane-stats",children:[(0,t.jsxs)("span",{children:[T(i.spans)," ",o("insights.spansShort")]}),(0,t.jsx)("span",{children:O(i.durationMs)}),i.failures?(0,t.jsxs)("span",{className:"bad",children:[T(i.failures)," ",o("insights.failedShort")]}):null]})]},`${i.agentType}:${r}`))})]})}function dn({report:e,focus:s,recByTurn:n,onJumpTurn:i,onTip:r,onTipHide:l}){let g=[...e.turnTimeline??[]].sort((a,v)=>a.turnIndex-v.turnIndex);if(g.length<2)return null;let c=s.turnIdx.size>0,d=["research","edit","run","delegate","discuss"];return(0,t.jsxs)("section",{className:"block turnrail-block",children:[(0,t.jsxs)("div",{className:"turnrail-head",children:[(0,t.jsx)("h3",{children:o("insights.turnRail")}),(0,t.jsxs)("span",{className:"turnrail-legend",children:[d.map(a=>(0,t.jsxs)("span",{className:"rl-item",children:[(0,t.jsx)("i",{className:W(a)}),U(a)]},a)),(0,t.jsxs)("span",{className:"rl-item rl-sep",children:[(0,t.jsx)("i",{className:"rbr-sub"}),o("insights.railSubagent")]})]})]}),(0,t.jsx)("div",{className:"turnrail",onMouseLeave:l,children:g.map(a=>{let v=a.metrics,p=es(a),w=(a.tags??[]).includes("failure")||(a.events??[]).some(f=>f.status==="error"),y=(a.tags??[]).includes("slow"),x=n.has(a.turnIndex),$=s.turnIdx.has(a.turnIndex),M=["railnode",W(p),$?"hot":"",c&&!$?"dim":""].filter(Boolean).join(" "),k=`#${a.turnIndex} \xB7 ${U(p)} \xB7 ${o("insights.mReads")}${v.reads} ${o("insights.mEdits")}${v.edits} ${o("insights.mRuns")}${v.runs}${v.failures?` \xB7 ${o("insights.mFailures")}${v.failures}`:""} \xB7 ${O(v.durationMs)}`,m=(a.events??[]).filter(f=>f.kind==="delegate").length;return(0,t.jsxs)("span",{style:{display:"contents"},children:[(0,t.jsxs)("button",{type:"button",className:M,onMouseMove:f=>r(f,k),onBlur:l,onClick:()=>i(a),children:[(0,t.jsx)("span",{children:String(a.turnIndex)}),w?(0,t.jsx)("i",{className:"rb rb-fail"}):null,y?(0,t.jsx)("i",{className:"rb rb-slow"}):null,x?(0,t.jsx)("i",{className:"rb rb-rec"}):null]}),m?(0,t.jsx)("span",{className:"railbranch",onMouseMove:f=>r(f,`#${a.turnIndex} \xB7 ${o("insights.railSubagents",{n:m})}`),children:Array.from({length:Math.min(m,4)}).map((f,P)=>(0,t.jsx)("i",{className:"rbr-sub"},P))}):null]},a.turnIndex)})})]})}function un({report:e,onOpenSpan:s,onTip:n,onTipHide:i}){let r=(e.spans??[]).map((d,a)=>({s:d,i:a,start:d.relStartMs??0,dur:Math.max(d.durationMs??0,0)})).filter(d=>Number.isFinite(d.start)).sort((d,a)=>d.start-a.start);if(r.length<2)return null;let l=Math.max(r.reduce((d,a)=>d+a.dur,0),1),g=0,c=r[r.length-1].start+r[r.length-1].dur-r[0].start;return(0,t.jsxs)("section",{className:"block gantt-block",children:[(0,t.jsxs)("div",{className:"turnrail-head",children:[(0,t.jsx)("h3",{children:o("insights.gantt")}),(0,t.jsx)("span",{className:"gantt-cap",children:o("insights.ganttCaption",{span:r.length,dur:O(c),active:O(l)})})]}),(0,t.jsx)("div",{className:"gantt",children:(0,t.jsx)("div",{className:"gtrack",onMouseLeave:i,children:r.map(d=>{let a=g/l*100,v=Math.max(d.dur/l*100,.3);g+=d.dur;let p=d.s.status==="error"||(d.s.tags??[]).includes("failure"),w=(d.s.tags??[]).includes("slow"),y=["gbar",W(d.s.phase),p?"gbar-fail":"",w?"gbar-slow":""].filter(Boolean).join(" "),x=d.s.status==="error"?` \xB7 ${st("failure")}`:"",$=`#${d.i} \xB7 ${d.s.tool} \xB7 ${U(d.s.phase)} \xB7 ${O(d.s.durationMs)}${x}`;return(0,t.jsx)("button",{type:"button",className:y,style:{left:`${a.toFixed(3)}%`,width:`${v.toFixed(3)}%`},onMouseMove:M=>n(M,$),onClick:()=>s(d.i)},d.i)})})})]})}function pn({report:e,onTip:s,onTipHide:n}){let i=(e.turnTimeline??[]).map(y=>y.context&&Number.isFinite(y.context.contextTokens)?{turn:y.turnIndex,v:y.context.contextTokens}:null).filter(y=>y!==null).sort((y,x)=>y.turn-x.turn);if(i.length<2)return null;let r=Math.max(...i.map(y=>y.v),1),l=100,g=40,c=y=>y/(i.length-1)*l,d=y=>g-1-y/r*(g-2),a=i.map((y,x)=>`${c(x).toFixed(2)},${d(y.v).toFixed(2)}`).join(" "),v=`0,${g} ${a} ${l},${g}`,p=l/i.length,w=T(Math.round(r/2));return(0,t.jsxs)("section",{className:"block ctxcurve-block",children:[(0,t.jsxs)("div",{className:"turnrail-head",children:[(0,t.jsx)("h3",{children:o("insights.ctxCurve")}),(0,t.jsx)("span",{className:"gantt-cap",children:o("insights.ctxCaption",{peak:T(r),turns:i.length})})]}),(0,t.jsxs)("div",{className:"ctxchart",children:[(0,t.jsxs)("div",{className:"ctxyaxis",children:[(0,t.jsx)("span",{children:T(r)}),(0,t.jsx)("span",{children:w}),(0,t.jsx)("span",{children:"0 tok"})]}),(0,t.jsxs)("div",{className:"ctxplot",children:[(0,t.jsxs)("svg",{className:"ctxcurve",viewBox:`0 0 ${l} ${g}`,preserveAspectRatio:"none",role:"img","aria-label":o("insights.ctxCurve"),onMouseLeave:n,children:[(0,t.jsx)("polygon",{className:"ctxarea",points:v}),(0,t.jsx)("polyline",{className:"ctxline",points:a}),i.map((y,x)=>(0,t.jsx)("rect",{className:"ctxhit",x:Math.max(0,c(x)-p/2),y:0,width:p,height:g,onMouseMove:$=>s($,`${o("insights.ctxTurn",{n:y.turn})} \xB7 ${T(y.v)} tok`)},y.turn))]}),(0,t.jsxs)("div",{className:"ctxxaxis",children:[(0,t.jsx)("span",{children:o("insights.ctxTurn",{n:i[0].turn})}),(0,t.jsx)("span",{children:o("insights.ctxTurn",{n:i[i.length-1].turn})})]})]})]})]})}function gn({report:e,view:s,onViewChange:n,onOpenPrompt:i,onJumpTurn:r,onOpenSpan:l,scrollTarget:g,onScrolled:c,onTip:d,onTipHide:a,onLoadConvo:v}){if(e.status!=="ok")return(0,t.jsx)("p",{className:"mut",children:Pt(e)});let p=e.agg,w=Xe(e,s.activeId),y=new Map;for(let h of e.recommendations??[])for(let N of h.evidence?.turnIndexes??[]){let D=y.get(N)??[];D.includes(h.id)||D.push(h.id),y.set(N,D)}let x=[e.meta?.asOf?o("sessions.insightAsOf",{asOf:String(e.meta.asOf)}):"",e.meta?.partial?o("sessions.insightPartial"):"",e.meta?.capped?o("sessions.insightCapped",{shown:String(e.meta.spansReturned??e.spans?.length??0),total:String(e.meta.spansTotal??e.spans?.length??0)}):""].filter(Boolean).join(" \xB7 "),$=e.spans?.length??0,M=e.turnTimeline?.length??0,k=h=>{n({tab:h}),h==="convo"&&!s.convo.messages.length&&!s.convo.loading&&v(!0)},m=h=>n({openSpans:pt(s.openSpans,h)}),f=h=>n({openTurns:pt(s.openTurns,h)}),P=h=>n({openPrompts:pt(s.openPrompts,h)}),C=h=>n({rawPrompts:pt(s.rawPrompts,h)});return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"cards insight-detail-metrics",children:[(0,t.jsx)(Y,{label:o("insights.metricSpans"),value:T(p.totalSpans)}),(0,t.jsx)(Y,{label:o("insights.metricFailed"),value:T(p.failedSpans)}),(0,t.jsx)(Y,{label:o("insights.metricSlow"),value:T(p.slowSpans)}),(0,t.jsx)(Y,{label:o("insights.metricRw"),value:p.readWriteRatio===null?"-":p.readWriteRatio.toFixed(1)})]}),x?(0,t.jsx)("p",{className:"insight-meta",children:x}):null,(0,t.jsxs)("section",{className:"block recblock",children:[(0,t.jsx)("h3",{children:o("insights.recommendations")}),(0,t.jsx)(ln,{report:e,activeId:s.activeId,onActive:h=>n({activeId:h})})]}),(0,t.jsx)(dn,{report:e,focus:w,recByTurn:y,onJumpTurn:r,onTip:d,onTipHide:a}),(0,t.jsx)(un,{report:e,onOpenSpan:l,onTip:d,onTipHide:a}),(0,t.jsx)(cn,{report:e}),(0,t.jsx)(pn,{report:e,onTip:d,onTipHide:a}),(0,t.jsxs)("div",{className:"detailtabs",children:[(0,t.jsxs)("div",{className:"detailtabbar",role:"tablist","aria-label":o("insights.detailTabs"),children:[(0,t.jsxs)("button",{type:"button",role:"tab",className:s.tab==="spans"?"on":"",onClick:()=>k("spans"),children:[o("insights.trace")," ",(0,t.jsx)("b",{children:$})]}),(0,t.jsxs)("button",{type:"button",role:"tab",className:s.tab==="ledger"?"on":"",onClick:()=>k("ledger"),children:[o("insights.ledger")," ",(0,t.jsx)("b",{children:M})]}),(0,t.jsx)("button",{type:"button",role:"tab",className:s.tab==="convo"?"on":"",onClick:()=>k("convo"),children:o("insights.replay")})]}),(0,t.jsxs)("div",{className:"detailtabbody",children:[(0,t.jsx)("div",{className:"insight-tab-panel","data-panel":"spans",hidden:s.tab!=="spans",children:(0,t.jsx)(Zs,{report:e,focus:w,view:s,onSpanFilter:h=>n({spanFilter:h}),onToggleSpan:m,scrollTarget:g,onScrolled:c})}),(0,t.jsx)("div",{className:"insight-tab-panel","data-panel":"ledger",hidden:s.tab!=="ledger",children:(0,t.jsx)(sn,{report:e,focus:w,view:s,onLedgerSort:h=>n({ledgerSort:h}),onLedgerSender:h=>n({ledgerSender:h}),onToggleTurn:f,onToggleSpan:m,onTogglePrompt:P,onTogglePromptRaw:C,onOpenPrompt:i,scrollTarget:g,onScrolled:c})}),(0,t.jsx)("div",{className:"insight-tab-panel","data-panel":"convo",hidden:s.tab!=="convo",children:(0,t.jsx)(rn,{convo:s.convo,recByTurn:y,onQuery:h=>v(!0,{q:h}),onRole:h=>{h!==s.convo.role&&v(!0,{role:h})},onTag:h=>{h!==s.convo.tag&&v(!0,{tag:h})},onLoadMore:()=>v(!1),onToggleOp:h=>n({convo:{...s.convo,openOps:pt(s.convo.openOps,h)}}),onOpenPrompt:i})})]})]})]})}function mn({modal:e,onClose:s,onToggleRaw:n}){if(e.turnIndex===null)return null;let i=e.prompt,r=i?.source,l=i?.text?Et(i.text)||i.text:"",g=i?.truncated,c=i?e.raw?(0,t.jsxs)("pre",{className:"tp-raw modal-raw",children:[l,g?`
|
|
7
|
-
\u2026`:""]}):(0,t.jsx)(Ht,{className:"md-body modal-md",text:l+(g?" \u2026":"")}):(0,t.jsx)(Ct,{label:o("insights.detailLoading"),compact:!0});return(0,t.jsxs)("div",{id:"insight-modal",className:"insight-modal",children:[(0,t.jsx)("div",{className:"modal-backdrop",onClick:s}),(0,t.jsx)("div",{className:"modal-panel",role:"dialog","aria-modal":"true","aria-label":o("insights.turnPrompt"),children:i?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"modal-head",children:[(0,t.jsxs)("div",{className:"modal-who",children:[(0,t.jsx)(oe,{src:r}),(0,t.jsx)(re,{src:r}),(0,t.jsxs)("span",{className:"modal-turnno",children:["#",e.turnIndex]})]}),(0,t.jsxs)("div",{className:"modal-acts",children:[(0,t.jsx)("button",{type:"button",className:"tp-toggle",onClick:n,children:e.raw?o("insights.turnPromptRendered"):o("insights.turnPromptRaw")}),(0,t.jsx)("button",{type:"button",className:"modal-close",onClick:s,"aria-label":o("insights.modalClose"),children:"\xD7"})]})]}),(0,t.jsxs)("div",{className:"modal-body",children:[c,g?(0,t.jsx)("p",{className:"modal-trunc mut",children:o("insights.promptTruncated")}):null]})]}):(0,t.jsx)("div",{className:"modal-body",children:c})})]})}function hn({palette:e,items:s,onClose:n,onInput:i,onChoose:r}){if(!e.open)return null;let l=!!e.anchor,g=l?{top:e.anchor.top,left:e.anchor.left,width:e.anchor.width,"--palette-panel-max-height":`${e.anchor.maxHeight}px`,"--palette-list-max-height":`${Math.max(80,e.anchor.maxHeight-54)}px`}:void 0,c=(0,t.jsxs)("div",{id:"insight-palette",className:`insights-page insight-palette ${l?"palette-anchored":"palette-centered"}`,children:[(0,t.jsx)("div",{className:"modal-backdrop",onClick:n}),(0,t.jsxs)("div",{className:`palette-panel${l?" anchored":""}`,role:"dialog","aria-modal":"false",style:g,children:[(0,t.jsx)("input",{type:"search",className:"palette-input",placeholder:o("insights.palettePlaceholder"),value:e.q,autoFocus:!0,onChange:d=>i(d.currentTarget.value)}),(0,t.jsx)("div",{className:"palette-list",children:s.length?s.map((d,a)=>(0,t.jsxs)("button",{type:"button",className:`palette-item${a===e.idx?" on":""}`,onClick:()=>r(d.type,d.key),children:[(0,t.jsx)("span",{className:"pal-label",children:d.label}),(0,t.jsx)("span",{className:"pal-sub",children:d.sub})]},`${d.type}:${d.key}`)):(0,t.jsx)("p",{className:"mut palette-empty",children:o("insights.paletteEmpty")})})]})]});return(0,gs.createPortal)(c,document.body)}function bn(){let e=ee();return{tab:as(),filter:Yt.includes(e.filter)?e.filter:"all",cli:new Set((e.cli??"").split(",").filter(Boolean)),q:e.q??"",sess:e.sess??null,project:e.project??"",time:e.time??"all",showNoise:e.noise==="1",sort:De.includes(e.sort)?e.sort:"recent",layout:e.layout==="table"?"table":"card"}}function fn(){let e=Re(),s=(0,b.useRef)(bn()).current,n=(0,b.useRef)(null),i=(0,b.useRef)(s.sess),r=(0,b.useRef)(0),l=(0,b.useRef)(0),g=(0,b.useRef)(0),[c,d]=(0,b.useState)(0),[a,v]=(0,b.useState)(null),[p,w]=(0,b.useState)([]),[y,x]=(0,b.useState)(""),[$,M]=(0,b.useState)(!1),[k,m]=(0,b.useState)(s.tab),[f,P]=(0,b.useState)(s.filter),[C,h]=(0,b.useState)(s.cli.size>1?new Set([[...s.cli][0]]):s.cli),[N,D]=(0,b.useState)(s.q),[E,J]=(0,b.useState)(s.project),[R,_]=(0,b.useState)(s.time),[B,xt]=(0,b.useState)(s.showNoise),[nt,le]=(0,b.useState)(s.sort),[gt,fs]=(0,b.useState)(s.layout),[F,at]=(0,b.useState)(null),[ce,de]=(0,b.useState)(null),[vs,Bt]=(0,b.useState)(!1),[ue,pe]=(0,b.useState)(""),[A,mt]=(0,b.useState)({activeId:null,tab:"spans",spanFilter:"all",openSpans:new Set,openTurns:new Set,ledgerSort:"normal",openPrompts:new Set,rawPrompts:new Set,ledgerSender:"all",convo:Qt()}),[Ss,ys]=(0,b.useState)(new Set),[z,Q]=(0,b.useState)({open:!1,q:"",idx:0}),[ht,bt]=(0,b.useState)({turnIndex:null,raw:!1,prompt:null,loading:!1}),[Ns,kt]=(0,b.useState)(null),[ws,ge]=(0,b.useState)({text:"",x:0,y:0,visible:!1}),it=(0,b.useMemo)(()=>ss(R,E,B),[E,B,R]),ft=(0,b.useMemo)(()=>Lt(p,f,N,new Set,it),[f,N,p,it,c]),me=(0,b.useMemo)(()=>[...new Set(ft.map(At))].sort().join(","),[ft]),he=(0,b.useMemo)(()=>Lt(p,f,N,C,{...it,project:void 0}),[C,f,N,p,it,c]),It=(0,b.useMemo)(()=>We(he),[he]),be=(0,b.useMemo)(()=>[{value:"",label:e("insights.projectAll")},...It.map(u=>({value:u.id,label:`${u.id} (${u.count})`}))],[It,e]),fe=(0,b.useMemo)(()=>Ut.map(u=>({value:u.key,label:e(u.label)})),[e]),ve=(0,b.useMemo)(()=>Yt.map(u=>({value:u,label:e(u==="all"?"insights.filterAllSessions":u==="review"?"insights.filterReview":u==="failed"?"insights.filterFailed":"insights.filterSlow")})),[e]),Se=(0,b.useMemo)(()=>[{value:se,label:`${e("insights.filterAllCli")} (${ft.length})`},...qe(ft).map(u=>({value:u.id,label:`${u.id} (${u.count})`}))],[ft,e]),xs=be.find(u=>u.value===E)?.label??e("insights.projectAll"),ks=fe.find(u=>u.value===R)?.label??e("insights.timeAll"),Is=ve.find(u=>u.value===f)?.label??e("insights.filterAllSessions"),ye=C.size===1?[...C][0]:se,Ts=Se.find(u=>u.value===ye)?.label??e("insights.filterAllCli"),H=(0,b.useMemo)(()=>Ge(Lt(p,f,N,C,it),nt),[C,f,N,p,it,nt,c]),Ne=(0,b.useMemo)(()=>a?Ke(H):null,[a,H]),vt=(0,b.useMemo)(()=>F?H.find(u=>u.session.sessionId===F)??p.find(u=>u.session.sessionId===F):void 0,[p,H,F]),Tt=(0,b.useMemo)(()=>{let u=z.q.trim().toLowerCase(),S=Gt.map(L=>({type:"tab",key:L.key,label:o(L.label),sub:o("insights.paletteTabs")})).filter(L=>!u||L.label.toLowerCase().includes(u)),I=p.filter(L=>{let X=L.session;return!u||`${q(X)} ${V(X)} ${X.cliId??""}`.toLowerCase().includes(u)}).slice(0,20).map(L=>({type:"session",key:String(L.session.sessionId),label:q(L.session),sub:`${V(L.session)} \xB7 ${L.session.cliId??"-"}`}));return[...S,...I]},[z.q,p,c]),$s=(0,b.useCallback)((u,S)=>{ge({text:S,x:u.clientX+14,y:u.clientY+14,visible:!0})},[]),Rs=(0,b.useCallback)(()=>ge(u=>({...u,visible:!1})),[]),St=(0,b.useCallback)(u=>{mt(S=>({...S,...u}))},[]),yt=(0,b.useCallback)(()=>{bt({turnIndex:null,raw:!1,prompt:null,loading:!1})},[]),Nt=(0,b.useCallback)(()=>{de(null),pe(""),Bt(!1),mt({activeId:null,tab:"spans",spanFilter:"all",openSpans:new Set,openTurns:new Set,ledgerSort:"normal",openPrompts:new Set,rawPrompts:new Set,ledgerSender:"all",convo:Qt()}),kt(null),yt()},[yt]),ot=(0,b.useCallback)(u=>{n.current=u,at(u),Nt(),Bt(!0);let S=++r.current;(async()=>{try{let I=await os(u);if(S!==r.current||n.current!==u)return;de(I)}catch(I){if(S!==r.current||n.current!==u)return;pe(String(I))}finally{S===r.current&&n.current===u&&Bt(!1)}})()},[Nt]),qt=(0,b.useCallback)((u,S={})=>{let I=n.current;if(!I||A.convo.loading)return;let L=S.q??A.convo.q,X=S.role??A.convo.role,As=S.tag??A.convo.tag,Ls=u?0:A.convo.nextOffset;mt(j=>({...j,convo:{...j.convo,...S,messages:u?[]:j.convo.messages,nextOffset:u?0:j.convo.nextOffset,hasMore:u?!1:j.convo.hasMore,loading:!0}}));let xe=++l.current;(async()=>{try{let j=await rs(I,{offset:Ls,limit:40,q:L,role:X,tag:As});if(xe!==l.current||n.current!==I)return;mt(zt=>({...zt,convo:{...zt.convo,messages:u?j.messages:[...zt.convo.messages,...j.messages],total:j.total,hasMore:j.hasMore,nextOffset:j.nextOffset,loading:!1}}))}catch{if(xe!==l.current||n.current!==I)return;mt(j=>({...j,convo:{...j.convo,loading:!1}}))}})()},[A.convo]),Wt=(0,b.useCallback)(async()=>{M(!0),x(e("insights.loading"));try{let u=await is();v(u),w(u.sessions.map(Be)),x(e("insights.loaded",{count:u.meta.analyzedSessions}))}catch(u){v(null),w([]),x(`${e("insights.unavailable")}: ${String(u)}`)}finally{M(!1)}},[e]),Ms=(0,b.useCallback)(u=>{let S=n.current;if(!S)return;let I=++g.current;bt({turnIndex:u,raw:!1,prompt:null,loading:!0}),(async()=>{try{let L=await ls(S,u);if(I!==g.current||n.current!==S)return;bt({turnIndex:u,raw:!1,prompt:L,loading:!1})}catch{if(I!==g.current||n.current!==S)return;bt({turnIndex:u,raw:!1,prompt:{text:e("insights.unavailable"),truncated:!1},loading:!1})}})()},[e]),$t=(0,b.useCallback)(u=>{m("sessions"),ot(u)},[ot]),Cs=(0,b.useCallback)(u=>{St({tab:"spans",spanFilter:"all",openSpans:us(A.openSpans,u)}),kt({kind:"span",index:u})},[A.openSpans,St]),Ps=(0,b.useCallback)(u=>{St({tab:"ledger",ledgerSort:"normal",ledgerSender:wt(u)==="system"?"system":A.ledgerSender,openTurns:us(A.openTurns,u.turnIndex)}),kt({kind:"turn",index:u.turnIndex})},[A.ledgerSender,A.openTurns,St]),Kt=(0,b.useCallback)((u,S)=>{if(Q({open:!1,q:"",idx:0}),u==="tab"){m(S),n.current=null,at(null);return}$t(S)},[$t]);(0,b.useEffect)(()=>{ke().then(()=>d(u=>u+1))},[]),(0,b.useEffect)(()=>{Wt()},[Wt]),(0,b.useEffect)(()=>{n.current=F},[F]),(0,b.useEffect)(()=>{let u=new Set(me.split(",").filter(Boolean));h(S=>{let I=!1,L=new Set;for(let X of S)u.has(X)?L.add(X):I=!0;return I?L:S})},[me]),(0,b.useEffect)(()=>{E&&!It.some(u=>u.id===E)&&J("")},[E,It]),(0,b.useEffect)(()=>{F&&p.length&&!p.some(u=>u.session.sessionId===F)&&(n.current=null,at(null),Nt())},[p,Nt,F]),(0,b.useEffect)(()=>{let u=i.current;!u||F||!p.some(S=>S.session.sessionId===u)||(i.current=null,ot(u))},[p,ot,F]),(0,b.useEffect)(()=>{A.tab==="convo"&&!A.convo.messages.length&&!A.convo.loading&&qt(!0)},[A.convo.loading,A.convo.messages.length,A.tab,qt]),(0,b.useEffect)(()=>{let u={};k!=="overview"&&(u.tab=k),f!=="all"&&(u.filter=f),N.trim()&&(u.q=N.trim()),E&&(u.project=E),R!=="all"&&(u.time=R),C.size&&(u.cli=[...C].join(",")),nt!=="recent"&&(u.sort=nt),gt!=="card"&&(u.layout=gt),B&&(u.noise="1"),F&&(u.sess=F);try{history.replaceState(null,"",ns(u))}catch{}},[C,f,E,N,F,gt,nt,B,k,R]),(0,b.useEffect)(()=>{let u=z.open||ht.turnIndex!==null;return document.body.classList.toggle("insight-modal-open",u),()=>document.body.classList.remove("insight-modal-open")},[ht.turnIndex,z.open]),(0,b.useEffect)(()=>{let u=S=>{if((S.key==="k"||S.key==="K")&&(S.metaKey||S.ctrlKey)){S.preventDefault(),Q(I=>I.open?{open:!1,q:"",idx:0}:{open:!0,q:"",idx:0,anchor:void 0});return}if(z.open){if(S.isComposing||S.keyCode===229)return;if(S.key==="Escape")S.preventDefault(),Q({open:!1,q:"",idx:0});else if(S.key==="ArrowDown")S.preventDefault(),Q(I=>({...I,idx:Math.min(Math.max(0,Tt.length-1),I.idx+1)}));else if(S.key==="ArrowUp")S.preventDefault(),Q(I=>({...I,idx:Math.max(0,I.idx-1)}));else if(S.key==="Enter"){S.preventDefault();let I=Tt[z.idx];I&&Kt(I.type,I.key)}return}S.key==="Escape"&&ht.turnIndex!==null&&yt()};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[Kt,yt,ht.turnIndex,z.idx,z.open,Tt]);let Os=()=>{D(""),P("all"),h(new Set),J(""),_("all"),xt(!1)},we=!H.length&&!B?o("insights.emptyAnalyzableHint"):void 0;return(0,t.jsxs)("section",{className:"page insights-page",children:[(0,t.jsxs)("div",{className:"page-heading",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"eyebrow",children:e("nav.insights")}),(0,t.jsxs)("div",{className:"insight-title-line",children:[(0,t.jsx)("h1",{children:e("insights.title")}),(0,t.jsx)(qs,{active:k,onChange:u=>m(u)}),(0,t.jsx)("div",{id:"insight-status",className:"insight-page-status",children:y})]})]}),(0,t.jsx)("div",{className:"page-heading-actions insight-heading-actions",children:(0,t.jsx)("button",{type:"button",id:"insight-palette-open",className:"insight-palette-trigger",onClick:u=>{Q({open:!0,q:"",idx:0,anchor:Hs(u.currentTarget)})},children:e("insights.paletteOpen")})})]}),(0,t.jsxs)("form",{id:"insight-filters",className:"filters dashboard-toolbar insights-filters",onSubmit:u=>u.preventDefault(),children:[(0,t.jsx)("input",{type:"search",name:"q",placeholder:e("insights.search"),value:N,onChange:u=>D(u.currentTarget.value)}),(0,t.jsx)(rt,{id:"insight-project",className:"insight-filter-menu",ariaLabel:e("insights.projectAll"),label:xs,value:E,options:be,onChange:J}),(0,t.jsx)(rt,{id:"insight-time",className:"insight-filter-menu",ariaLabel:e("insights.timeAll"),label:ks,value:R,options:fe,onChange:_}),(0,t.jsx)(rt,{id:"insight-review-filter",className:"insight-filter-menu insight-review-menu",ariaLabel:e("insights.filter"),label:Is,value:f,options:ve,onChange:P}),(0,t.jsx)(rt,{id:"insight-cli-filter",className:"insight-filter-menu insight-cli-menu",ariaLabel:e("insights.filter"),label:Ts,value:ye,options:Se,onChange:u=>h(u===se?new Set:new Set([u]))}),(0,t.jsxs)("label",{className:"filter-toggle ins-toggle",children:[(0,t.jsx)("input",{type:"checkbox",id:"insight-noise",checked:B,onChange:u=>xt(u.currentTarget.checked)}),(0,t.jsx)("span",{className:"filter-toggle-label",children:e("insights.showAll")}),(0,t.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,t.jsx)("button",{type:"button",id:"insight-clear",className:"ins-clear",onClick:Os,children:e("insights.clear")}),(0,t.jsx)("div",{className:"insight-head-acts",children:(0,t.jsx)($e,{id:"insight-refresh",label:e("insights.refresh"),busy:$,disabled:$,onClick:()=>{Wt()}})})]}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"overview",hidden:k!=="overview",children:(0,t.jsx)("div",{id:"insight-overview",children:Ne?(0,t.jsx)(Ws,{data:Ne}):null})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"sessions",hidden:k!=="sessions",children:F?(0,t.jsxs)("div",{id:"insight-detail-view",children:[(0,t.jsxs)("button",{type:"button",id:"insight-back",className:"ins-back",onClick:()=>{n.current=null,at(null),Nt()},children:["\u2190 ",e("insights.backToList")]}),(0,t.jsx)("section",{id:"insight-detail",className:"insight-detail",children:vt?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"shead",children:[(0,t.jsx)("h2",{children:q(vt.session)}),(0,t.jsxs)("div",{className:"smeta",children:[V(vt.session)," \xB7 ",String(vt.session.cliId??"-")," \xB7 ",(0,t.jsx)("code",{children:String(vt.session.sessionId??"")})]})]}),(0,t.jsx)("div",{id:"insight-detail-body",children:vs?(0,t.jsx)(Ct,{label:e("insights.detailLoading"),compact:!0}):ue?(0,t.jsx)("p",{className:"mut",children:ue}):ce?(0,t.jsx)(gn,{report:ce,view:A,onViewChange:St,onOpenPrompt:Ms,onJumpTurn:Ps,onOpenSpan:Cs,scrollTarget:Ns,onScrolled:()=>kt(null),onTip:$s,onTipHide:Rs,onLoadConvo:qt}):(0,t.jsx)("p",{className:"mut",children:e("insights.selectSession")})})]}):(0,t.jsx)("p",{className:"mut",children:e("insights.selectSession")})})]}):(0,t.jsxs)("div",{id:"insight-list-view",children:[(0,t.jsxs)("div",{className:"insight-list-head",children:[(0,t.jsx)("span",{id:"insight-list-subtitle",children:e("insights.listCount",{shown:H.length,total:p.length})}),(0,t.jsx)("div",{className:"sesssort",id:"insight-sort",children:(0,t.jsx)(Us,{sort:nt,layout:gt,onSort:le,onLayout:fs})})]}),(0,t.jsx)("div",{id:"insight-list",children:gt==="table"?(0,t.jsx)(Js,{records:H,selectedId:F,onSelect:ot,emptyHint:we}):(0,t.jsx)(Ys,{records:H,selectedId:F,wide:!0,onSelect:ot,emptyHint:we})})]})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"flow",hidden:k!=="flow",children:(0,t.jsx)("div",{id:"insight-flow",children:a?(0,t.jsx)(Vs,{records:H,onSession:$t}):null})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"dist",hidden:k!=="dist",children:(0,t.jsx)("div",{id:"insight-dist",children:a?(0,t.jsx)(zs,{records:H,onSort:u=>{le(u),m("sessions"),n.current=null,at(null)}}):null})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"hot",hidden:k!=="hot",children:(0,t.jsx)("div",{id:"insight-hot",children:a?(0,t.jsx)(Gs,{records:H,openHot:Ss,onToggleHot:u=>ys(S=>pt(S,u)),onProject:u=>{J(u),m("sessions"),n.current=null,at(null)},onSession:$t}):null})}),(0,t.jsx)(mn,{modal:ht,onClose:yt,onToggleRaw:()=>bt(u=>({...u,raw:!u.raw}))}),(0,t.jsx)(hn,{palette:z,items:Tt,onClose:()=>Q({open:!1,q:"",idx:0}),onInput:u=>Q(S=>({...S,open:!0,q:u,idx:0})),onChoose:Kt}),(0,t.jsx)(Bs,{tip:ws})]})}function Tn(e){return Ie(e,(0,t.jsx)(fn,{}))}export{Tn as renderInsightsPage};
|
|
7
|
+
\u2026`:""]}):(0,t.jsx)(Ht,{className:"md-body modal-md",text:l+(g?" \u2026":"")}):(0,t.jsx)(Ct,{label:o("insights.detailLoading"),compact:!0});return(0,t.jsxs)("div",{id:"insight-modal",className:"insight-modal",children:[(0,t.jsx)("div",{className:"modal-backdrop",onClick:s}),(0,t.jsx)("div",{className:"modal-panel",role:"dialog","aria-modal":"true","aria-label":o("insights.turnPrompt"),children:i?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"modal-head",children:[(0,t.jsxs)("div",{className:"modal-who",children:[(0,t.jsx)(oe,{src:r}),(0,t.jsx)(re,{src:r}),(0,t.jsxs)("span",{className:"modal-turnno",children:["#",e.turnIndex]})]}),(0,t.jsxs)("div",{className:"modal-acts",children:[(0,t.jsx)("button",{type:"button",className:"tp-toggle",onClick:n,children:e.raw?o("insights.turnPromptRendered"):o("insights.turnPromptRaw")}),(0,t.jsx)("button",{type:"button",className:"modal-close",onClick:s,"aria-label":o("insights.modalClose"),children:"\xD7"})]})]}),(0,t.jsxs)("div",{className:"modal-body",children:[c,g?(0,t.jsx)("p",{className:"modal-trunc mut",children:o("insights.promptTruncated")}):null]})]}):(0,t.jsx)("div",{className:"modal-body",children:c})})]})}function hn({palette:e,items:s,onClose:n,onInput:i,onChoose:r}){if(!e.open)return null;let l=!!e.anchor,g=l?{top:e.anchor.top,left:e.anchor.left,width:e.anchor.width,"--palette-panel-max-height":`${e.anchor.maxHeight}px`,"--palette-list-max-height":`${Math.max(80,e.anchor.maxHeight-54)}px`}:void 0,c=(0,t.jsxs)("div",{id:"insight-palette",className:`insights-page insight-palette ${l?"palette-anchored":"palette-centered"}`,children:[(0,t.jsx)("div",{className:"modal-backdrop",onClick:n}),(0,t.jsxs)("div",{className:`palette-panel${l?" anchored":""}`,role:"dialog","aria-modal":"false",style:g,children:[(0,t.jsx)("input",{type:"search",className:"palette-input",placeholder:o("insights.palettePlaceholder"),value:e.q,autoFocus:!0,onChange:d=>i(d.currentTarget.value)}),(0,t.jsx)("div",{className:"palette-list",children:s.length?s.map((d,a)=>(0,t.jsxs)("button",{type:"button",className:`palette-item${a===e.idx?" on":""}`,onClick:()=>r(d.type,d.key),children:[(0,t.jsx)("span",{className:"pal-label",children:d.label}),(0,t.jsx)("span",{className:"pal-sub",children:d.sub})]},`${d.type}:${d.key}`)):(0,t.jsx)("p",{className:"mut palette-empty",children:o("insights.paletteEmpty")})})]})]});return(0,gs.createPortal)(c,document.body)}function bn(){let e=ee();return{tab:as(),filter:Yt.includes(e.filter)?e.filter:"all",cli:new Set((e.cli??"").split(",").filter(Boolean)),q:e.q??"",sess:e.sess??null,project:e.project??"",time:e.time??"all",showNoise:e.noise==="1",sort:De.includes(e.sort)?e.sort:"recent",layout:e.layout==="table"?"table":"card"}}function fn(){let e=Te(),s=(0,b.useRef)(bn()).current,n=(0,b.useRef)(null),i=(0,b.useRef)(s.sess),r=(0,b.useRef)(0),l=(0,b.useRef)(0),g=(0,b.useRef)(0),[c,d]=(0,b.useState)(0),[a,v]=(0,b.useState)(null),[p,w]=(0,b.useState)([]),[y,x]=(0,b.useState)(""),[$,M]=(0,b.useState)(!1),[k,m]=(0,b.useState)(s.tab),[f,P]=(0,b.useState)(s.filter),[C,h]=(0,b.useState)(s.cli.size>1?new Set([[...s.cli][0]]):s.cli),[N,D]=(0,b.useState)(s.q),[E,J]=(0,b.useState)(s.project),[R,_]=(0,b.useState)(s.time),[B,xt]=(0,b.useState)(s.showNoise),[nt,le]=(0,b.useState)(s.sort),[gt,fs]=(0,b.useState)(s.layout),[F,at]=(0,b.useState)(null),[ce,de]=(0,b.useState)(null),[vs,Bt]=(0,b.useState)(!1),[ue,pe]=(0,b.useState)(""),[A,mt]=(0,b.useState)({activeId:null,tab:"spans",spanFilter:"all",openSpans:new Set,openTurns:new Set,ledgerSort:"normal",openPrompts:new Set,rawPrompts:new Set,ledgerSender:"all",convo:Qt()}),[Ss,ys]=(0,b.useState)(new Set),[z,Q]=(0,b.useState)({open:!1,q:"",idx:0}),[ht,bt]=(0,b.useState)({turnIndex:null,raw:!1,prompt:null,loading:!1}),[Ns,kt]=(0,b.useState)(null),[ws,ge]=(0,b.useState)({text:"",x:0,y:0,visible:!1}),it=(0,b.useMemo)(()=>ss(R,E,B),[E,B,R]),ft=(0,b.useMemo)(()=>Lt(p,f,N,new Set,it),[f,N,p,it,c]),me=(0,b.useMemo)(()=>[...new Set(ft.map(At))].sort().join(","),[ft]),he=(0,b.useMemo)(()=>Lt(p,f,N,C,{...it,project:void 0}),[C,f,N,p,it,c]),It=(0,b.useMemo)(()=>We(he),[he]),be=(0,b.useMemo)(()=>[{value:"",label:e("insights.projectAll")},...It.map(u=>({value:u.id,label:`${u.id} (${u.count})`}))],[It,e]),fe=(0,b.useMemo)(()=>Ut.map(u=>({value:u.key,label:e(u.label)})),[e]),ve=(0,b.useMemo)(()=>Yt.map(u=>({value:u,label:e(u==="all"?"insights.filterAllSessions":u==="review"?"insights.filterReview":u==="failed"?"insights.filterFailed":"insights.filterSlow")})),[e]),Se=(0,b.useMemo)(()=>[{value:se,label:`${e("insights.filterAllCli")} (${ft.length})`},...qe(ft).map(u=>({value:u.id,label:`${u.id} (${u.count})`}))],[ft,e]),xs=be.find(u=>u.value===E)?.label??e("insights.projectAll"),ks=fe.find(u=>u.value===R)?.label??e("insights.timeAll"),Is=ve.find(u=>u.value===f)?.label??e("insights.filterAllSessions"),ye=C.size===1?[...C][0]:se,Ts=Se.find(u=>u.value===ye)?.label??e("insights.filterAllCli"),H=(0,b.useMemo)(()=>Ge(Lt(p,f,N,C,it),nt),[C,f,N,p,it,nt,c]),Ne=(0,b.useMemo)(()=>a?Ke(H):null,[a,H]),vt=(0,b.useMemo)(()=>F?H.find(u=>u.session.sessionId===F)??p.find(u=>u.session.sessionId===F):void 0,[p,H,F]),Tt=(0,b.useMemo)(()=>{let u=z.q.trim().toLowerCase(),S=Gt.map(L=>({type:"tab",key:L.key,label:o(L.label),sub:o("insights.paletteTabs")})).filter(L=>!u||L.label.toLowerCase().includes(u)),I=p.filter(L=>{let X=L.session;return!u||`${q(X)} ${V(X)} ${X.cliId??""}`.toLowerCase().includes(u)}).slice(0,20).map(L=>({type:"session",key:String(L.session.sessionId),label:q(L.session),sub:`${V(L.session)} \xB7 ${L.session.cliId??"-"}`}));return[...S,...I]},[z.q,p,c]),$s=(0,b.useCallback)((u,S)=>{ge({text:S,x:u.clientX+14,y:u.clientY+14,visible:!0})},[]),Rs=(0,b.useCallback)(()=>ge(u=>({...u,visible:!1})),[]),St=(0,b.useCallback)(u=>{mt(S=>({...S,...u}))},[]),yt=(0,b.useCallback)(()=>{bt({turnIndex:null,raw:!1,prompt:null,loading:!1})},[]),Nt=(0,b.useCallback)(()=>{de(null),pe(""),Bt(!1),mt({activeId:null,tab:"spans",spanFilter:"all",openSpans:new Set,openTurns:new Set,ledgerSort:"normal",openPrompts:new Set,rawPrompts:new Set,ledgerSender:"all",convo:Qt()}),kt(null),yt()},[yt]),ot=(0,b.useCallback)(u=>{n.current=u,at(u),Nt(),Bt(!0);let S=++r.current;(async()=>{try{let I=await os(u);if(S!==r.current||n.current!==u)return;de(I)}catch(I){if(S!==r.current||n.current!==u)return;pe(String(I))}finally{S===r.current&&n.current===u&&Bt(!1)}})()},[Nt]),qt=(0,b.useCallback)((u,S={})=>{let I=n.current;if(!I||A.convo.loading)return;let L=S.q??A.convo.q,X=S.role??A.convo.role,As=S.tag??A.convo.tag,Ls=u?0:A.convo.nextOffset;mt(j=>({...j,convo:{...j.convo,...S,messages:u?[]:j.convo.messages,nextOffset:u?0:j.convo.nextOffset,hasMore:u?!1:j.convo.hasMore,loading:!0}}));let xe=++l.current;(async()=>{try{let j=await rs(I,{offset:Ls,limit:40,q:L,role:X,tag:As});if(xe!==l.current||n.current!==I)return;mt(zt=>({...zt,convo:{...zt.convo,messages:u?j.messages:[...zt.convo.messages,...j.messages],total:j.total,hasMore:j.hasMore,nextOffset:j.nextOffset,loading:!1}}))}catch{if(xe!==l.current||n.current!==I)return;mt(j=>({...j,convo:{...j.convo,loading:!1}}))}})()},[A.convo]),Wt=(0,b.useCallback)(async()=>{M(!0),x(e("insights.loading"));try{let u=await is();v(u),w(u.sessions.map(Be)),x(e("insights.loaded",{count:u.meta.analyzedSessions}))}catch(u){v(null),w([]),x(`${e("insights.unavailable")}: ${String(u)}`)}finally{M(!1)}},[e]),Ms=(0,b.useCallback)(u=>{let S=n.current;if(!S)return;let I=++g.current;bt({turnIndex:u,raw:!1,prompt:null,loading:!0}),(async()=>{try{let L=await ls(S,u);if(I!==g.current||n.current!==S)return;bt({turnIndex:u,raw:!1,prompt:L,loading:!1})}catch{if(I!==g.current||n.current!==S)return;bt({turnIndex:u,raw:!1,prompt:{text:e("insights.unavailable"),truncated:!1},loading:!1})}})()},[e]),$t=(0,b.useCallback)(u=>{m("sessions"),ot(u)},[ot]),Cs=(0,b.useCallback)(u=>{St({tab:"spans",spanFilter:"all",openSpans:us(A.openSpans,u)}),kt({kind:"span",index:u})},[A.openSpans,St]),Ps=(0,b.useCallback)(u=>{St({tab:"ledger",ledgerSort:"normal",ledgerSender:wt(u)==="system"?"system":A.ledgerSender,openTurns:us(A.openTurns,u.turnIndex)}),kt({kind:"turn",index:u.turnIndex})},[A.ledgerSender,A.openTurns,St]),Kt=(0,b.useCallback)((u,S)=>{if(Q({open:!1,q:"",idx:0}),u==="tab"){m(S),n.current=null,at(null);return}$t(S)},[$t]);(0,b.useEffect)(()=>{ke().then(()=>d(u=>u+1))},[]),(0,b.useEffect)(()=>{Wt()},[Wt]),(0,b.useEffect)(()=>{n.current=F},[F]),(0,b.useEffect)(()=>{let u=new Set(me.split(",").filter(Boolean));h(S=>{let I=!1,L=new Set;for(let X of S)u.has(X)?L.add(X):I=!0;return I?L:S})},[me]),(0,b.useEffect)(()=>{E&&!It.some(u=>u.id===E)&&J("")},[E,It]),(0,b.useEffect)(()=>{F&&p.length&&!p.some(u=>u.session.sessionId===F)&&(n.current=null,at(null),Nt())},[p,Nt,F]),(0,b.useEffect)(()=>{let u=i.current;!u||F||!p.some(S=>S.session.sessionId===u)||(i.current=null,ot(u))},[p,ot,F]),(0,b.useEffect)(()=>{A.tab==="convo"&&!A.convo.messages.length&&!A.convo.loading&&qt(!0)},[A.convo.loading,A.convo.messages.length,A.tab,qt]),(0,b.useEffect)(()=>{let u={};k!=="overview"&&(u.tab=k),f!=="all"&&(u.filter=f),N.trim()&&(u.q=N.trim()),E&&(u.project=E),R!=="all"&&(u.time=R),C.size&&(u.cli=[...C].join(",")),nt!=="recent"&&(u.sort=nt),gt!=="card"&&(u.layout=gt),B&&(u.noise="1"),F&&(u.sess=F);try{history.replaceState(null,"",ns(u))}catch{}},[C,f,E,N,F,gt,nt,B,k,R]),(0,b.useEffect)(()=>{let u=z.open||ht.turnIndex!==null;return document.body.classList.toggle("insight-modal-open",u),()=>document.body.classList.remove("insight-modal-open")},[ht.turnIndex,z.open]),(0,b.useEffect)(()=>{let u=S=>{if((S.key==="k"||S.key==="K")&&(S.metaKey||S.ctrlKey)){S.preventDefault(),Q(I=>I.open?{open:!1,q:"",idx:0}:{open:!0,q:"",idx:0,anchor:void 0});return}if(z.open){if(S.isComposing||S.keyCode===229)return;if(S.key==="Escape")S.preventDefault(),Q({open:!1,q:"",idx:0});else if(S.key==="ArrowDown")S.preventDefault(),Q(I=>({...I,idx:Math.min(Math.max(0,Tt.length-1),I.idx+1)}));else if(S.key==="ArrowUp")S.preventDefault(),Q(I=>({...I,idx:Math.max(0,I.idx-1)}));else if(S.key==="Enter"){S.preventDefault();let I=Tt[z.idx];I&&Kt(I.type,I.key)}return}S.key==="Escape"&&ht.turnIndex!==null&&yt()};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[Kt,yt,ht.turnIndex,z.idx,z.open,Tt]);let Os=()=>{D(""),P("all"),h(new Set),J(""),_("all"),xt(!1)},we=!H.length&&!B?o("insights.emptyAnalyzableHint"):void 0;return(0,t.jsxs)("section",{className:"page insights-page",children:[(0,t.jsxs)("div",{className:"page-heading",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"eyebrow",children:e("nav.insights")}),(0,t.jsxs)("div",{className:"insight-title-line",children:[(0,t.jsx)("h1",{children:e("insights.title")}),(0,t.jsx)(qs,{active:k,onChange:u=>m(u)}),(0,t.jsx)("div",{id:"insight-status",className:"insight-page-status",children:y})]})]}),(0,t.jsx)("div",{className:"page-heading-actions insight-heading-actions",children:(0,t.jsx)("button",{type:"button",id:"insight-palette-open",className:"insight-palette-trigger",onClick:u=>{Q({open:!0,q:"",idx:0,anchor:Hs(u.currentTarget)})},children:e("insights.paletteOpen")})})]}),(0,t.jsxs)("form",{id:"insight-filters",className:"filters dashboard-toolbar insights-filters",onSubmit:u=>u.preventDefault(),children:[(0,t.jsx)("input",{type:"search",name:"q",placeholder:e("insights.search"),value:N,onChange:u=>D(u.currentTarget.value)}),(0,t.jsx)(rt,{id:"insight-project",className:"insight-filter-menu",ariaLabel:e("insights.projectAll"),label:xs,value:E,options:be,onChange:J}),(0,t.jsx)(rt,{id:"insight-time",className:"insight-filter-menu",ariaLabel:e("insights.timeAll"),label:ks,value:R,options:fe,onChange:_}),(0,t.jsx)(rt,{id:"insight-review-filter",className:"insight-filter-menu insight-review-menu",ariaLabel:e("insights.filter"),label:Is,value:f,options:ve,onChange:P}),(0,t.jsx)(rt,{id:"insight-cli-filter",className:"insight-filter-menu insight-cli-menu",ariaLabel:e("insights.filter"),label:Ts,value:ye,options:Se,onChange:u=>h(u===se?new Set:new Set([u]))}),(0,t.jsxs)("label",{className:"filter-toggle ins-toggle",children:[(0,t.jsx)("input",{type:"checkbox",id:"insight-noise",checked:B,onChange:u=>xt(u.currentTarget.checked)}),(0,t.jsx)("span",{className:"filter-toggle-label",children:e("insights.showAll")}),(0,t.jsx)("span",{className:"filter-toggle-switch","aria-hidden":"true"})]}),(0,t.jsx)("button",{type:"button",id:"insight-clear",className:"ins-clear",onClick:Os,children:e("insights.clear")}),(0,t.jsx)("div",{className:"insight-head-acts",children:(0,t.jsx)(Re,{id:"insight-refresh",label:e("insights.refresh"),busy:$,disabled:$,onClick:()=>{Wt()}})})]}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"overview",hidden:k!=="overview",children:(0,t.jsx)("div",{id:"insight-overview",children:Ne?(0,t.jsx)(Ws,{data:Ne}):null})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"sessions",hidden:k!=="sessions",children:F?(0,t.jsxs)("div",{id:"insight-detail-view",children:[(0,t.jsxs)("button",{type:"button",id:"insight-back",className:"ins-back",onClick:()=>{n.current=null,at(null),Nt()},children:["\u2190 ",e("insights.backToList")]}),(0,t.jsx)("section",{id:"insight-detail",className:"insight-detail",children:vt?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"shead",children:[(0,t.jsx)("h2",{children:q(vt.session)}),(0,t.jsxs)("div",{className:"smeta",children:[V(vt.session)," \xB7 ",String(vt.session.cliId??"-")," \xB7 ",(0,t.jsx)("code",{children:String(vt.session.sessionId??"")})]})]}),(0,t.jsx)("div",{id:"insight-detail-body",children:vs?(0,t.jsx)(Ct,{label:e("insights.detailLoading"),compact:!0}):ue?(0,t.jsx)("p",{className:"mut",children:ue}):ce?(0,t.jsx)(gn,{report:ce,view:A,onViewChange:St,onOpenPrompt:Ms,onJumpTurn:Ps,onOpenSpan:Cs,scrollTarget:Ns,onScrolled:()=>kt(null),onTip:$s,onTipHide:Rs,onLoadConvo:qt}):(0,t.jsx)("p",{className:"mut",children:e("insights.selectSession")})})]}):(0,t.jsx)("p",{className:"mut",children:e("insights.selectSession")})})]}):(0,t.jsxs)("div",{id:"insight-list-view",children:[(0,t.jsxs)("div",{className:"insight-list-head",children:[(0,t.jsx)("span",{id:"insight-list-subtitle",children:e("insights.listCount",{shown:H.length,total:p.length})}),(0,t.jsx)("div",{className:"sesssort",id:"insight-sort",children:(0,t.jsx)(Us,{sort:nt,layout:gt,onSort:le,onLayout:fs})})]}),(0,t.jsx)("div",{id:"insight-list",children:gt==="table"?(0,t.jsx)(Js,{records:H,selectedId:F,onSelect:ot,emptyHint:we}):(0,t.jsx)(Ys,{records:H,selectedId:F,wide:!0,onSelect:ot,emptyHint:we})})]})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"flow",hidden:k!=="flow",children:(0,t.jsx)("div",{id:"insight-flow",children:a?(0,t.jsx)(Vs,{records:H,onSession:$t}):null})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"dist",hidden:k!=="dist",children:(0,t.jsx)("div",{id:"insight-dist",children:a?(0,t.jsx)(zs,{records:H,onSort:u=>{le(u),m("sessions"),n.current=null,at(null)}}):null})}),(0,t.jsx)("div",{className:"insight-panel",role:"tabpanel","data-tabpanel":"hot",hidden:k!=="hot",children:(0,t.jsx)("div",{id:"insight-hot",children:a?(0,t.jsx)(Gs,{records:H,openHot:Ss,onToggleHot:u=>ys(S=>pt(S,u)),onProject:u=>{J(u),m("sessions"),n.current=null,at(null)},onSession:$t}):null})}),(0,t.jsx)(mn,{modal:ht,onClose:yt,onToggleRaw:()=>bt(u=>({...u,raw:!u.raw}))}),(0,t.jsx)(hn,{palette:z,items:Tt,onClose:()=>Q({open:!1,q:"",idx:0}),onInput:u=>Q(S=>({...S,open:!0,q:u,idx:0})),onChoose:Kt}),(0,t.jsx)(Bs,{tip:ws})]})}function Tn(e){return Ie(e,(0,t.jsx)(fn,{}))}export{Tn as renderInsightsPage};
|
|
@@ -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{a as E}from"./chunk-
|
|
1
|
+
import{a as T,b as B,d as I,e as N,f as P,g as _}from"./chunk-XJ7BGPJH.js";import{a as E}from"./chunk-24ONYQMR.js";import{C as x,G as O,I as S,K as W,x as r,y as n,z as C}from"./chunk-F6KNPF4R.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">
|
package/dist/dashboard-web/chunks/{monitoring-page-IJPUB6JT.js → monitoring-page-NKEKVQAP.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as k}from"./chunk-2WQDS65D.js";import{c as G,d as f,j as _,m as H,n as T,o as D,p as A}from"./chunk-5CJMHTT4.js";import"./chunk-G5XGBCM6.js";import"./chunk-Q2MT4VWH.js";import{a as U}from"./chunk-SYC6D5XU.js";import{a as Y,d as K}from"./chunk-5THX4DI2.js";import{c as $}from"./chunk-7SZRL6FY.js";var g=$(Y(),1);var e=$(K(),1);function b(n){let s=Number(n);return!Number.isFinite(s)||s<=0?"-":s>=1024**3?`${(s/1024**3).toFixed(1)} GiB`:s>=1024**2?`${(s/1024**2).toFixed(0)} MiB`:`${Math.max(1,Math.round(s/1024))} KiB`}function N(n){let s=Number(n);return Number.isFinite(s)?`${s.toFixed(1)}%`:"-"}function S(n,s){return s?N(n):"-"}function q(n){return n?.cpuReady!==!1}function d(n){let s=Number(n);return Number.isFinite(s)?String(s):"-"}function E(n){let s=Number(n);if(!Number.isFinite(s)||s<0)return"-";if(s===0)return"0s";if(s<6e4)return`${Math.max(1,Math.floor(s/1e3))}s`;let r=Math.floor(s/6e4);if(r<60)return`${Math.max(1,r)}m`;let t=Math.floor(r/60),o=r%60;return o?`${t}h ${o}m`:`${t}h`}function Z(n){return n==="fresh"||n==="stale"||n==="unsupported"?n:"unknown"}function j(n){return n?`${n.botName||"-"} \xB7 ${n.title||n.sessionId}`:"-"}function W(n,s){return s==="cpu"?Number(n.current?.cpu1mPct??n.current?.cpuPct??0):s==="rss"?Number(n.current?.rssBytes??0):s==="growth"?Number(n.current?.rssGrowth5mBytes??0):s==="bot"?n.botName??"":n.status??""}function ee(n,s){return[...n].sort((r,t)=>{let o=W(r,s),u=W(t,s);return typeof o=="number"&&typeof u=="number"?u-o||r.sessionId.localeCompare(t.sessionId):String(o).localeCompare(String(u))||r.sessionId.localeCompare(t.sessionId)})}function V(n,s){return s==="bytes"?b(n):N(n)}function F(n,s,r){let t=(n??[]).filter(Number.isFinite);if(t.length<2)return r("monitoring.chartNoData");let o=t[0],u=Number.isFinite(s)?Number(s):Date.now(),a=Math.max(0,u-o),m=Math.max(1,Math.round(a/6e4));if(m<60)return r("monitoring.chartMinutesAgo",{value:m});let p=Math.round(m/60);return p<48?r("monitoring.chartHoursAgo",{value:p}):r("monitoring.chartDaysAgo",{value:Math.round(p/24)})}function C(n){let s=(n??[]).filter(Number.isFinite);return s.length?s[s.length-1]:void 0}function R({values:n,timestamps:s,unit:r="pct",startLabel:t,endLabel:o,emptyLabel:u,className:a}){let m=(n??[]).filter(Number.isFinite),p=m.length?Math.min(...m):0,x=m.length?Math.max(...m):0,w=x-p,c=m.length>1?m.map((L,i)=>{let l=i/(m.length-1)*100,h=w>0?100-(L-p)/w*100:50;return`${l},${h}`}).join(" "):"",P=c?`0,100 ${c} 100,100`:"",B=c?c.split(" "):[],v=B.length?B[B.length-1].split(",").map(Number):null;return(0,e.jsxs)("div",{className:["resource-chart",a].filter(Boolean).join(" "),children:[(0,e.jsxs)("div",{className:"resource-chart-y","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length?V(x,r):"-"}),(0,e.jsx)("span",{children:m.length?V(p,r):"-"})]}),(0,e.jsxs)("div",{className:"resource-chart-plot",children:[(0,e.jsxs)("div",{className:"resource-spark-wrap",children:[(0,e.jsxs)("svg",{className:"resource-spark",viewBox:"0 0 100 100",preserveAspectRatio:"none","aria-label":m.length>1?void 0:u,children:[(0,e.jsx)("line",{x1:"0",y1:"12",x2:"100",y2:"12",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"50",x2:"100",y2:"50",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"88",x2:"100",y2:"88",className:"resource-grid-line"}),P?(0,e.jsx)("polygon",{className:"resource-spark-area",points:P}):null,c?(0,e.jsx)("polyline",{points:c}):null]}),v&&Number.isFinite(v[0])&&Number.isFinite(v[1])?(0,e.jsx)("span",{className:"resource-spark-dot","aria-hidden":"true",style:{left:`${v[0]}%`,top:`${v[1]}%`}}):null]}),(0,e.jsxs)("div",{className:"resource-chart-x","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length>1?t:u}),(0,e.jsx)("span",{children:m.length>1?o:""})]})]})]})}function I(n){let s=r=>r instanceof Element&&!!r.closest(".ui-info-tip");return(0,e.jsx)("section",{className:"metric-card","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:r=>{s(r.target)||n.onOpen()},onKeyDown:r=>{s(r.target)||r.key!=="Enter"&&r.key!==" "||(r.preventDefault(),n.onOpen())},children:n.children})}function M(n){return(0,e.jsx)("article",{className:"resource-trend-cell","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:n.onOpen,onKeyDown:s=>{s.key!=="Enter"&&s.key!==" "||(s.preventDefault(),n.onOpen())},children:n.children})}function te(n){let s=k(),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let t=r.current;if(t)if(n.detail){if(!t.open)try{t.showModal()}catch{}}else t.open&&t.close()},[n.detail]),(0,g.useEffect)(()=>()=>{let t=r.current;t?.open&&t.close()},[]),(0,e.jsx)("dialog",{ref:r,className:"resource-detail-modal",onCancel:t=>{t.preventDefault(),n.onClose()},onClose:n.onClose,onClick:t=>{t.target===t.currentTarget&&n.onClose()},children:n.detail?(0,e.jsxs)("article",{className:"resource-detail-modal-card",children:[(0,e.jsxs)("header",{className:"resource-detail-modal-head",children:[(0,e.jsx)("h3",{children:n.detail.title}),(0,e.jsx)("button",{type:"button",className:"resource-detail-modal-close","aria-label":s("monitoring.modalClose"),title:s("monitoring.modalClose"),onClick:n.onClose})]}),(0,e.jsxs)("div",{className:"resource-detail-modal-body",children:[(0,e.jsxs)("section",{className:"resource-detail-summary",children:[(0,e.jsx)("strong",{children:n.detail.value}),(0,e.jsx)("p",{children:n.detail.detail})]}),n.detail.chart?(0,e.jsx)(R,{className:"resource-detail-chart",values:n.detail.chart.values,timestamps:n.detail.chart.timestamps,unit:n.detail.chart.unit,startLabel:n.detail.chart.startLabel,endLabel:n.detail.chart.endLabel,emptyLabel:n.detail.chart.emptyLabel}):(0,e.jsx)("p",{className:"resource-detail-empty",children:n.detail.emptyText})]})]}):null})}function ne({reasons:n}){return(0,e.jsx)("span",{className:"resource-reasons",children:(n??[]).join(", ")||"-"})}function y({label:n,value:s,tone:r}){return(0,e.jsxs)("span",{className:`resource-pill${r?` ${r}`:""}`,children:[(0,e.jsx)("span",{children:n}),(0,e.jsx)("b",{children:s})]})}function se({bots:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list",children:n.length?n.map(t=>{let o=t.runtime?.sessions,u=t.runtime?.daemonStatus??t.daemonStatus??"unknown",a=u==="online"?"ok":u==="offline"?"off":"warn";return(0,e.jsxs)(T,{className:"resource-list-item resource-bot-item",children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.botName,children:t.botName}),(0,e.jsxs)("span",{children:[r("monitoring.sessionsCount")," ",d(o?.total??t.sessions?.count)]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.daemon"),value:u,tone:a}),(0,e.jsx)(y,{label:r("monitoring.working"),value:d(o?.working),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.starting"),value:d(o?.starting)}),(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.total?.cpuPct,s)}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.total?.rssBytes)})]})})]},t.larkAppId)}):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function re({sessions:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell resource-session-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list resource-session-list",children:n.length?n.map(t=>(0,e.jsxs)(T,{className:`resource-list-item resource-session-item${t.tracked?" is-tracked":""}`,children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.title||t.sessionId,children:t.title||t.sessionId}),(0,e.jsxs)("span",{title:t.sessionId,children:[t.botName," \xB7 ",t.sessionId]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.current?.cpu1mPct??t.current?.cpuPct,s),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.current?.rssBytes)}),(0,e.jsx)(y,{label:r("monitoring.growth"),value:b(t.current?.rssGrowth5mBytes)}),(0,e.jsx)(y,{label:r("monitoring.confidence"),value:t.confidence??"unknown",tone:t.tracked?"ok":void 0}),(0,e.jsxs)("span",{className:"resource-pill resource-rank-pill",children:[(0,e.jsx)("span",{children:r("monitoring.rank")}),(0,e.jsx)(ne,{reasons:t.rankReasons})]})]})})]},t.sessionId)):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function oe({current:n}){let s=k(),r=n.runtime,t=q(n),o=Z(r?.sampleHealth?.status),u=r?.daemons?.total,a=r?.daemons?.online,m=r?.daemons?.offline??(Number.isFinite(Number(u))&&Number.isFinite(Number(a))?Math.max(0,Number(u)-Number(a)):void 0),p=r?.sessions?.total,x=r?.sessions?.working,w=r?.sessions?.starting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.runtimeHealth")}),(0,e.jsx)("section",{className:"panel runtime-health-panel",children:(0,e.jsxs)("div",{className:"runtime-health-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sampleHealth")}),(0,e.jsx)("strong",{children:(0,e.jsx)("span",{className:`runtime-status-pill ${o}`,children:s(`monitoring.sample.${o}`)})}),(0,e.jsxs)("small",{children:[s("monitoring.sampleAge")," ",E(r?.sampleHealth?.ageMs)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.daemonHealth")}),(0,e.jsxs)("strong",{children:[d(a),"/",d(u)]}),(0,e.jsxs)("small",{children:[d(m)," ",s("monitoring.offline")]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sessionHealth")}),(0,e.jsx)("strong",{children:d(p)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(x)," \xB7 ",s("monitoring.starting")," ",d(w)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.resourcePressure")}),(0,e.jsx)("strong",{children:S(n.host?.cpuPct,t)}),(0,e.jsxs)("small",{children:[s("monitoring.hostMemory")," ",N(n.host?.memUsedPct)," \xB7 RSS ",b(n.botmux?.rssBytes)]})]})]})})]})}function ae({runtime:n}){let s=k(),r=n?.sessions,t=r?.longestRunning,o=r?.longestWaiting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.sessionPressure")}),(0,e.jsx)("section",{className:"panel runtime-session-pressure",children:(0,e.jsxs)("div",{className:"runtime-session-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.statusDistribution")}),(0,e.jsx)("strong",{children:d(r?.total)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(r?.working)," \xB7 ",s("monitoring.starting")," ",d(r?.starting)," \xB7 ",s("monitoring.waiting")," ",d(r?.waiting)," \xB7 ",s("monitoring.idle")," ",d(r?.idle)," \xB7 ",s("monitoring.unknown")," ",d(r?.unknown)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestRunning")}),(0,e.jsx)("strong",{children:j(t)}),(0,e.jsx)("small",{children:E(t?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestWaiting")}),(0,e.jsx)("strong",{children:j(o)}),(0,e.jsx)("small",{children:E(o?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.unattributedSessions")}),(0,e.jsx)("strong",{children:d(r?.unattributed)}),(0,e.jsx)("small",{children:s("monitoring.unattributedHint")})]})]})})]})}function ie({initialCurrent:n=null,initialHistory:s=null,poll:r=!0}={}){let t=k(),[o,u]=(0,g.useState)(n),[a,m]=(0,g.useState)(s),[p,x]=(0,g.useState)("cpu"),[w,c]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(!r)return;let l=!1;async function h(){try{let[z,J]=await Promise.all([fetch("/api/resources/current",{cache:"no-store"}),fetch("/api/resources/history?range=3h",{cache:"no-store"})]),[Q,X]=await Promise.all([z.json(),J.json()]);l||(u(Q),m(X))}catch{l||(u({supported:!1,reason:"fetch_failed",bots:[],sessions:[]}),m({supported:!1,bots:[],sessions:[]}))}}h();let O=window.setInterval(()=>{h()},1e4);return()=>{l=!0,window.clearInterval(O)}},[r]);let P=o!==null&&a!==null,B=(0,g.useMemo)(()=>ee(o?.sessions??[],p),[o?.sessions,p]),v=o?.supported!==!1,L=q(o),i={hostStartLabel:F(a?.host?.timestamps,o?.sampledAt,t),botmuxStartLabel:F(a?.botmux?.timestamps,o?.sampledAt,t),endLabel:t("monitoring.chartNow"),emptyLabel:t("monitoring.chartNoData")};return(0,e.jsxs)("section",{className:"page resource-page",children:[(0,e.jsx)("div",{className:"page-heading",children:(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:t("monitoring.eyebrow")}),(0,e.jsx)("h1",{children:t("monitoring.runtimeTitle")})]})}),P?null:(0,e.jsx)(G,{label:t("common.loading")}),P?(0,e.jsxs)(e.Fragment,{children:[o?(0,e.jsx)(oe,{current:o}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block resource-pressure-block",children:[(0,e.jsx)(f,{title:t("monitoring.resourcePressure")}),(0,e.jsx)("section",{className:"panel resource-pressure",children:(0,e.jsxs)("div",{className:"resource-metrics runtime-pressure-grid",children:[(0,e.jsxs)(I,{label:t("monitoring.hostCpu"),onOpen:()=>c({title:t("monitoring.hostCpu"),value:S(o?.host?.cpuPct,L),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostCpu")}),(0,e.jsx)("strong",{children:S(o?.host?.cpuPct,L)}),(0,e.jsxs)("small",{children:["load ",Number(o?.host?.load1??0).toFixed(2)]})]}),(0,e.jsxs)(I,{label:t("monitoring.hostMemory"),onOpen:()=>c({title:t("monitoring.hostMemory"),value:N(o?.host?.memUsedPct),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostMemory")}),(0,e.jsx)("strong",{children:N(o?.host?.memUsedPct)}),(0,e.jsx)("small",{children:t("monitoring.memoryOnly")})]}),(0,e.jsxs)(I,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(o?.botmux?.rssBytes),detail:o?.botmuxBreakdown?`${t("monitoring.botmuxSelf")} ${b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0))}
|
|
1
|
+
import{c as G,d as f,j as _,m as H,n as T,o as D,p as A}from"./chunk-5CJMHTT4.js";import{d as k}from"./chunk-FXW3V4JR.js";import"./chunk-24ONYQMR.js";import"./chunk-F6KNPF4R.js";import{a as U}from"./chunk-SYC6D5XU.js";import{a as Y,d as K}from"./chunk-5THX4DI2.js";import{c as $}from"./chunk-7SZRL6FY.js";var g=$(Y(),1);var e=$(K(),1);function b(n){let s=Number(n);return!Number.isFinite(s)||s<=0?"-":s>=1024**3?`${(s/1024**3).toFixed(1)} GiB`:s>=1024**2?`${(s/1024**2).toFixed(0)} MiB`:`${Math.max(1,Math.round(s/1024))} KiB`}function N(n){let s=Number(n);return Number.isFinite(s)?`${s.toFixed(1)}%`:"-"}function S(n,s){return s?N(n):"-"}function q(n){return n?.cpuReady!==!1}function d(n){let s=Number(n);return Number.isFinite(s)?String(s):"-"}function E(n){let s=Number(n);if(!Number.isFinite(s)||s<0)return"-";if(s===0)return"0s";if(s<6e4)return`${Math.max(1,Math.floor(s/1e3))}s`;let r=Math.floor(s/6e4);if(r<60)return`${Math.max(1,r)}m`;let t=Math.floor(r/60),o=r%60;return o?`${t}h ${o}m`:`${t}h`}function Z(n){return n==="fresh"||n==="stale"||n==="unsupported"?n:"unknown"}function j(n){return n?`${n.botName||"-"} \xB7 ${n.title||n.sessionId}`:"-"}function W(n,s){return s==="cpu"?Number(n.current?.cpu1mPct??n.current?.cpuPct??0):s==="rss"?Number(n.current?.rssBytes??0):s==="growth"?Number(n.current?.rssGrowth5mBytes??0):s==="bot"?n.botName??"":n.status??""}function ee(n,s){return[...n].sort((r,t)=>{let o=W(r,s),u=W(t,s);return typeof o=="number"&&typeof u=="number"?u-o||r.sessionId.localeCompare(t.sessionId):String(o).localeCompare(String(u))||r.sessionId.localeCompare(t.sessionId)})}function V(n,s){return s==="bytes"?b(n):N(n)}function F(n,s,r){let t=(n??[]).filter(Number.isFinite);if(t.length<2)return r("monitoring.chartNoData");let o=t[0],u=Number.isFinite(s)?Number(s):Date.now(),a=Math.max(0,u-o),m=Math.max(1,Math.round(a/6e4));if(m<60)return r("monitoring.chartMinutesAgo",{value:m});let p=Math.round(m/60);return p<48?r("monitoring.chartHoursAgo",{value:p}):r("monitoring.chartDaysAgo",{value:Math.round(p/24)})}function C(n){let s=(n??[]).filter(Number.isFinite);return s.length?s[s.length-1]:void 0}function R({values:n,timestamps:s,unit:r="pct",startLabel:t,endLabel:o,emptyLabel:u,className:a}){let m=(n??[]).filter(Number.isFinite),p=m.length?Math.min(...m):0,x=m.length?Math.max(...m):0,w=x-p,c=m.length>1?m.map((L,i)=>{let l=i/(m.length-1)*100,h=w>0?100-(L-p)/w*100:50;return`${l},${h}`}).join(" "):"",P=c?`0,100 ${c} 100,100`:"",B=c?c.split(" "):[],v=B.length?B[B.length-1].split(",").map(Number):null;return(0,e.jsxs)("div",{className:["resource-chart",a].filter(Boolean).join(" "),children:[(0,e.jsxs)("div",{className:"resource-chart-y","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length?V(x,r):"-"}),(0,e.jsx)("span",{children:m.length?V(p,r):"-"})]}),(0,e.jsxs)("div",{className:"resource-chart-plot",children:[(0,e.jsxs)("div",{className:"resource-spark-wrap",children:[(0,e.jsxs)("svg",{className:"resource-spark",viewBox:"0 0 100 100",preserveAspectRatio:"none","aria-label":m.length>1?void 0:u,children:[(0,e.jsx)("line",{x1:"0",y1:"12",x2:"100",y2:"12",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"50",x2:"100",y2:"50",className:"resource-grid-line"}),(0,e.jsx)("line",{x1:"0",y1:"88",x2:"100",y2:"88",className:"resource-grid-line"}),P?(0,e.jsx)("polygon",{className:"resource-spark-area",points:P}):null,c?(0,e.jsx)("polyline",{points:c}):null]}),v&&Number.isFinite(v[0])&&Number.isFinite(v[1])?(0,e.jsx)("span",{className:"resource-spark-dot","aria-hidden":"true",style:{left:`${v[0]}%`,top:`${v[1]}%`}}):null]}),(0,e.jsxs)("div",{className:"resource-chart-x","aria-hidden":"true",children:[(0,e.jsx)("span",{children:m.length>1?t:u}),(0,e.jsx)("span",{children:m.length>1?o:""})]})]})]})}function I(n){let s=r=>r instanceof Element&&!!r.closest(".ui-info-tip");return(0,e.jsx)("section",{className:"metric-card","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:r=>{s(r.target)||n.onOpen()},onKeyDown:r=>{s(r.target)||r.key!=="Enter"&&r.key!==" "||(r.preventDefault(),n.onOpen())},children:n.children})}function M(n){return(0,e.jsx)("article",{className:"resource-trend-cell","data-resource-expandable":"",role:"button",tabIndex:0,"aria-label":n.label,onClick:n.onOpen,onKeyDown:s=>{s.key!=="Enter"&&s.key!==" "||(s.preventDefault(),n.onOpen())},children:n.children})}function te(n){let s=k(),r=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let t=r.current;if(t)if(n.detail){if(!t.open)try{t.showModal()}catch{}}else t.open&&t.close()},[n.detail]),(0,g.useEffect)(()=>()=>{let t=r.current;t?.open&&t.close()},[]),(0,e.jsx)("dialog",{ref:r,className:"resource-detail-modal",onCancel:t=>{t.preventDefault(),n.onClose()},onClose:n.onClose,onClick:t=>{t.target===t.currentTarget&&n.onClose()},children:n.detail?(0,e.jsxs)("article",{className:"resource-detail-modal-card",children:[(0,e.jsxs)("header",{className:"resource-detail-modal-head",children:[(0,e.jsx)("h3",{children:n.detail.title}),(0,e.jsx)("button",{type:"button",className:"resource-detail-modal-close","aria-label":s("monitoring.modalClose"),title:s("monitoring.modalClose"),onClick:n.onClose})]}),(0,e.jsxs)("div",{className:"resource-detail-modal-body",children:[(0,e.jsxs)("section",{className:"resource-detail-summary",children:[(0,e.jsx)("strong",{children:n.detail.value}),(0,e.jsx)("p",{children:n.detail.detail})]}),n.detail.chart?(0,e.jsx)(R,{className:"resource-detail-chart",values:n.detail.chart.values,timestamps:n.detail.chart.timestamps,unit:n.detail.chart.unit,startLabel:n.detail.chart.startLabel,endLabel:n.detail.chart.endLabel,emptyLabel:n.detail.chart.emptyLabel}):(0,e.jsx)("p",{className:"resource-detail-empty",children:n.detail.emptyText})]})]}):null})}function ne({reasons:n}){return(0,e.jsx)("span",{className:"resource-reasons",children:(n??[]).join(", ")||"-"})}function y({label:n,value:s,tone:r}){return(0,e.jsxs)("span",{className:`resource-pill${r?` ${r}`:""}`,children:[(0,e.jsx)("span",{children:n}),(0,e.jsx)("b",{children:s})]})}function se({bots:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list",children:n.length?n.map(t=>{let o=t.runtime?.sessions,u=t.runtime?.daemonStatus??t.daemonStatus??"unknown",a=u==="online"?"ok":u==="offline"?"off":"warn";return(0,e.jsxs)(T,{className:"resource-list-item resource-bot-item",children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.botName,children:t.botName}),(0,e.jsxs)("span",{children:[r("monitoring.sessionsCount")," ",d(o?.total??t.sessions?.count)]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.daemon"),value:u,tone:a}),(0,e.jsx)(y,{label:r("monitoring.working"),value:d(o?.working),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.starting"),value:d(o?.starting)}),(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.total?.cpuPct,s)}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.total?.rssBytes)})]})})]},t.larkAppId)}):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function re({sessions:n,cpuReady:s=!0}){let r=k();return(0,e.jsx)("div",{className:"resource-list-shell resource-session-shell",children:(0,e.jsx)(H,{className:"resource-runtime-list resource-session-list",children:n.length?n.map(t=>(0,e.jsxs)(T,{className:`resource-list-item resource-session-item${t.tracked?" is-tracked":""}`,children:[(0,e.jsxs)(D,{children:[(0,e.jsx)("strong",{title:t.title||t.sessionId,children:t.title||t.sessionId}),(0,e.jsxs)("span",{title:t.sessionId,children:[t.botName," \xB7 ",t.sessionId]})]}),(0,e.jsx)(A,{children:(0,e.jsxs)("div",{className:"resource-pill-group",children:[(0,e.jsx)(y,{label:r("monitoring.cpu"),value:S(t.current?.cpu1mPct??t.current?.cpuPct,s),tone:"accent"}),(0,e.jsx)(y,{label:r("monitoring.rss"),value:b(t.current?.rssBytes)}),(0,e.jsx)(y,{label:r("monitoring.growth"),value:b(t.current?.rssGrowth5mBytes)}),(0,e.jsx)(y,{label:r("monitoring.confidence"),value:t.confidence??"unknown",tone:t.tracked?"ok":void 0}),(0,e.jsxs)("span",{className:"resource-pill resource-rank-pill",children:[(0,e.jsx)("span",{children:r("monitoring.rank")}),(0,e.jsx)(ne,{reasons:t.rankReasons})]})]})})]},t.sessionId)):(0,e.jsx)("li",{className:"empty",children:r("overview.noSessions")})})})}function oe({current:n}){let s=k(),r=n.runtime,t=q(n),o=Z(r?.sampleHealth?.status),u=r?.daemons?.total,a=r?.daemons?.online,m=r?.daemons?.offline??(Number.isFinite(Number(u))&&Number.isFinite(Number(a))?Math.max(0,Number(u)-Number(a)):void 0),p=r?.sessions?.total,x=r?.sessions?.working,w=r?.sessions?.starting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.runtimeHealth")}),(0,e.jsx)("section",{className:"panel runtime-health-panel",children:(0,e.jsxs)("div",{className:"runtime-health-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sampleHealth")}),(0,e.jsx)("strong",{children:(0,e.jsx)("span",{className:`runtime-status-pill ${o}`,children:s(`monitoring.sample.${o}`)})}),(0,e.jsxs)("small",{children:[s("monitoring.sampleAge")," ",E(r?.sampleHealth?.ageMs)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.daemonHealth")}),(0,e.jsxs)("strong",{children:[d(a),"/",d(u)]}),(0,e.jsxs)("small",{children:[d(m)," ",s("monitoring.offline")]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.sessionHealth")}),(0,e.jsx)("strong",{children:d(p)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(x)," \xB7 ",s("monitoring.starting")," ",d(w)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-health-card",children:[(0,e.jsx)("span",{children:s("monitoring.resourcePressure")}),(0,e.jsx)("strong",{children:S(n.host?.cpuPct,t)}),(0,e.jsxs)("small",{children:[s("monitoring.hostMemory")," ",N(n.host?.memUsedPct)," \xB7 RSS ",b(n.botmux?.rssBytes)]})]})]})})]})}function ae({runtime:n}){let s=k(),r=n?.sessions,t=r?.longestRunning,o=r?.longestWaiting;return(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:s("monitoring.sessionPressure")}),(0,e.jsx)("section",{className:"panel runtime-session-pressure",children:(0,e.jsxs)("div",{className:"runtime-session-grid",children:[(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.statusDistribution")}),(0,e.jsx)("strong",{children:d(r?.total)}),(0,e.jsxs)("small",{children:[s("monitoring.working")," ",d(r?.working)," \xB7 ",s("monitoring.starting")," ",d(r?.starting)," \xB7 ",s("monitoring.waiting")," ",d(r?.waiting)," \xB7 ",s("monitoring.idle")," ",d(r?.idle)," \xB7 ",s("monitoring.unknown")," ",d(r?.unknown)]})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestRunning")}),(0,e.jsx)("strong",{children:j(t)}),(0,e.jsx)("small",{children:E(t?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.longestWaiting")}),(0,e.jsx)("strong",{children:j(o)}),(0,e.jsx)("small",{children:E(o?.durationMs)})]}),(0,e.jsxs)("section",{className:"metric-card runtime-session-card",children:[(0,e.jsx)("span",{children:s("monitoring.unattributedSessions")}),(0,e.jsx)("strong",{children:d(r?.unattributed)}),(0,e.jsx)("small",{children:s("monitoring.unattributedHint")})]})]})})]})}function ie({initialCurrent:n=null,initialHistory:s=null,poll:r=!0}={}){let t=k(),[o,u]=(0,g.useState)(n),[a,m]=(0,g.useState)(s),[p,x]=(0,g.useState)("cpu"),[w,c]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(!r)return;let l=!1;async function h(){try{let[z,J]=await Promise.all([fetch("/api/resources/current",{cache:"no-store"}),fetch("/api/resources/history?range=3h",{cache:"no-store"})]),[Q,X]=await Promise.all([z.json(),J.json()]);l||(u(Q),m(X))}catch{l||(u({supported:!1,reason:"fetch_failed",bots:[],sessions:[]}),m({supported:!1,bots:[],sessions:[]}))}}h();let O=window.setInterval(()=>{h()},1e4);return()=>{l=!0,window.clearInterval(O)}},[r]);let P=o!==null&&a!==null,B=(0,g.useMemo)(()=>ee(o?.sessions??[],p),[o?.sessions,p]),v=o?.supported!==!1,L=q(o),i={hostStartLabel:F(a?.host?.timestamps,o?.sampledAt,t),botmuxStartLabel:F(a?.botmux?.timestamps,o?.sampledAt,t),endLabel:t("monitoring.chartNow"),emptyLabel:t("monitoring.chartNoData")};return(0,e.jsxs)("section",{className:"page resource-page",children:[(0,e.jsx)("div",{className:"page-heading",children:(0,e.jsxs)("div",{children:[(0,e.jsx)("p",{className:"eyebrow",children:t("monitoring.eyebrow")}),(0,e.jsx)("h1",{children:t("monitoring.runtimeTitle")})]})}),P?null:(0,e.jsx)(G,{label:t("common.loading")}),P?(0,e.jsxs)(e.Fragment,{children:[o?(0,e.jsx)(oe,{current:o}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block resource-pressure-block",children:[(0,e.jsx)(f,{title:t("monitoring.resourcePressure")}),(0,e.jsx)("section",{className:"panel resource-pressure",children:(0,e.jsxs)("div",{className:"resource-metrics runtime-pressure-grid",children:[(0,e.jsxs)(I,{label:t("monitoring.hostCpu"),onOpen:()=>c({title:t("monitoring.hostCpu"),value:S(o?.host?.cpuPct,L),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostCpu")}),(0,e.jsx)("strong",{children:S(o?.host?.cpuPct,L)}),(0,e.jsxs)("small",{children:["load ",Number(o?.host?.load1??0).toFixed(2)]})]}),(0,e.jsxs)(I,{label:t("monitoring.hostMemory"),onOpen:()=>c({title:t("monitoring.hostMemory"),value:N(o?.host?.memUsedPct),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("span",{children:t("monitoring.hostMemory")}),(0,e.jsx)("strong",{children:N(o?.host?.memUsedPct)}),(0,e.jsx)("small",{children:t("monitoring.memoryOnly")})]}),(0,e.jsxs)(I,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(o?.botmux?.rssBytes),detail:o?.botmuxBreakdown?`${t("monitoring.botmuxSelf")} ${b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0))}
|
|
2
2
|
${t("monitoring.botmuxCli")} ${b(o.botmuxBreakdown.cli.rssBytes)}`:S(o?.botmux?.cpuPct,L),chart:{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsxs)("div",{className:"metric-label-with-help",children:[(0,e.jsx)("span",{children:t("monitoring.botmuxRss")}),(0,e.jsx)(_,{label:t("monitoring.rssHelpLabel"),children:t("monitoring.rssHelp")})]}),(0,e.jsx)("strong",{children:b(o?.botmux?.rssBytes)}),o?.botmuxBreakdown&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("small",{className:"metric-breakdown",children:[t("monitoring.botmuxSelf")," ",b((o.botmuxBreakdown.daemon.rssBytes??0)+(o.botmuxBreakdown.worker.rssBytes??0)),(0,e.jsxs)("span",{className:"metric-breakdown-detail",children:[" (",t("monitoring.botmuxDaemon")," ",b(o.botmuxBreakdown.daemon.rssBytes)," \xB7 ",t("monitoring.botmuxWorker")," ",b(o.botmuxBreakdown.worker.rssBytes),")"]})]}),(0,e.jsxs)("small",{className:"metric-breakdown",children:[t("monitoring.botmuxCli")," ",b(o.botmuxBreakdown.cli.rssBytes)]})]})]}),(0,e.jsxs)(I,{label:t("monitoring.trackedSessions"),onOpen:()=>c({title:t("monitoring.trackedSessions"),value:d(o?.rankings?.tracked?.length),detail:`${t("monitoring.currentSessions")} ${(o?.sessions??[]).length}`,emptyText:t("monitoring.trackedSessionHint")}),children:[(0,e.jsx)("span",{children:t("monitoring.trackedSessions")}),(0,e.jsx)("strong",{children:o?.rankings?.tracked?.length??0}),(0,e.jsxs)("small",{children:[t("monitoring.currentSessions")," ",(o?.sessions??[]).length]})]})]})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.trends")}),(0,e.jsx)("section",{className:"panel resource-trends",children:(0,e.jsxs)("div",{className:"resource-trend-grid",children:[(0,e.jsxs)(M,{label:t("monitoring.trendHostCpu"),onOpen:()=>c({title:t("monitoring.trendHostCpu"),value:N(C(a?.host?.cpuPct)),detail:`load ${Number(o?.host?.load1??0).toFixed(2)}`,chart:{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendHostCpu")}),(0,e.jsx)(R,{values:a?.host?.cpuPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.trendHostMemory"),onOpen:()=>c({title:t("monitoring.trendHostMemory"),value:N(C(a?.host?.memUsedPct)),detail:t("monitoring.memoryOnly"),chart:{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendHostMemory")}),(0,e.jsx)(R,{values:a?.host?.memUsedPct,timestamps:a?.host?.timestamps,unit:"pct",startLabel:i.hostStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.trendBotmuxCpu"),onOpen:()=>c({title:t("monitoring.trendBotmuxCpu"),value:N(C(a?.botmux?.cpuPct)),detail:t("monitoring.botRuntime"),chart:{values:a?.botmux?.cpuPct,timestamps:a?.botmux?.timestamps,unit:"pct",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.trendBotmuxCpu")}),(0,e.jsx)(R,{values:a?.botmux?.cpuPct,timestamps:a?.botmux?.timestamps,unit:"pct",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]}),(0,e.jsxs)(M,{label:t("monitoring.botmuxRss"),onOpen:()=>c({title:t("monitoring.botmuxRss"),value:b(C(a?.botmux?.rssBytes)),detail:t("monitoring.memoryOnly"),chart:{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{children:t("monitoring.botmuxRss")}),(0,e.jsx)(R,{values:a?.botmux?.rssBytes,timestamps:a?.botmux?.timestamps,unit:"bytes",startLabel:i.botmuxStartLabel,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]})]})})]})]}):(0,e.jsx)("section",{className:"panel resource-unavailable",children:(0,e.jsxs)("div",{className:"resource-unavailable-card",children:[(0,e.jsx)("span",{className:"resource-unavailable-status","aria-hidden":"true"}),(0,e.jsxs)("div",{className:"resource-unavailable-copy",children:[(0,e.jsx)("span",{children:t("monitoring.unsupportedKicker")}),(0,e.jsx)("h2",{children:t("monitoring.unsupportedTitle")}),(0,e.jsx)("p",{children:t("monitoring.unsupportedHint")})]}),(0,e.jsxs)("div",{className:"resource-unavailable-tags","aria-label":t("monitoring.unsupported"),children:[(0,e.jsx)("span",{children:t("monitoring.unsupportedRuntimeOk")}),(0,e.jsx)("span",{children:t("monitoring.unsupportedResourceOnly")})]})]})}),o?(0,e.jsx)(ae,{runtime:o.runtime}):null,v?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.botRuntime")}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsx)(se,{bots:o?.bots??[],cpuReady:L})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.sessions"),children:(0,e.jsx)("div",{className:"resource-sortbar resource-sortbar-inline dashboard-toolbar",role:"group","aria-label":t("monitoring.sort"),children:(0,e.jsx)("div",{className:"segmented resource-sort-switch",children:["cpu","rss","growth","bot","status"].map(l=>(0,e.jsx)("button",{type:"button",className:p===l?"active":void 0,"aria-pressed":p===l,onClick:()=>x(l),children:t(`monitoring.sort.${l}`)},l))})})}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsx)(re,{sessions:B,cpuReady:L})})]}),(0,e.jsxs)("section",{className:"overview-block resource-block",children:[(0,e.jsx)(f,{title:t("monitoring.trackedSessionTrends")}),(0,e.jsx)("section",{className:"panel",children:(0,e.jsxs)("div",{className:"resource-trend-grid",children:[(a?.sessions??[]).map(l=>{let h=`${l.botName} \xB7 ${l.title||l.sessionId}`,O=F(l.series?.timestamps,o?.sampledAt,t);return(0,e.jsxs)(M,{label:h,onOpen:()=>c({title:h,value:b(C(l.series?.rssBytes)),detail:l.sessionId,chart:{values:l.series?.rssBytes,timestamps:l.series?.timestamps,unit:"bytes",startLabel:O,endLabel:i.endLabel,emptyLabel:i.emptyLabel}}),children:[(0,e.jsx)("b",{title:h,children:h}),(0,e.jsx)(R,{values:l.series?.rssBytes,timestamps:l.series?.timestamps,unit:"bytes",startLabel:O,endLabel:i.endLabel,emptyLabel:i.emptyLabel})]},l.sessionId)}),(a?.sessions??[]).length?null:(0,e.jsx)("div",{className:"empty",children:t("monitoring.noTrackedHistory")})]})})]})]}):null]}):null,(0,e.jsx)(te,{detail:w,onClose:()=>c(null)})]})}function ce(n){return U(n,(0,e.jsx)(ie,{}))}export{ie as MonitoringPage,re as SessionResourceTable,ce as renderMonitoringPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{d as x}from"./chunk-FXW3V4JR.js";import"./chunk-24ONYQMR.js";import"./chunk-F6KNPF4R.js";import{a as p}from"./chunk-SYC6D5XU.js";import{a as S,d as w}from"./chunk-5THX4DI2.js";import{c as g}from"./chunk-7SZRL6FY.js";var n=g(S(),1);var e=g(w(),1),u=78222186;function y(t){return(t/1048576).toFixed(0)}function T(){let t=x(),[i,a]=(0,n.useState)(null),[c,l]=(0,n.useState)(""),[m,h]=(0,n.useState)(!1),d=(0,n.useRef)(null),r=(0,n.useRef)(!1),v=()=>{d.current&&(clearTimeout(d.current),d.current=null)};async function f(){if(!r.current)try{let s=await fetch("/api/game/status");if(r.current)return;if(!s.ok){a({state:"absent",received:0,total:u});return}let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch{r.current||(d.current=setTimeout(()=>{f()},1500))}}(0,n.useEffect)(()=>(r.current=!1,f(),()=>{r.current=!0,v()}),[]);async function b(){v(),h(!0),a({state:"downloading",received:0,total:u});try{let s=await fetch("/api/game/download",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({proxy:c.trim()})});if(r.current)return;if(!s.ok)throw new Error(`HTTP ${s.status}`);let o=await s.json();if(r.current)return;a(o),typeof o.proxy=="string"&&l(o.proxy),o.state==="downloading"&&(d.current=setTimeout(()=>{f()},700))}catch(s){if(r.current)return;a({state:"error",received:0,total:u,error:s instanceof Error?s.message:String(s)})}finally{r.current||h(!1)}}return i?.state==="ready"?(0,e.jsx)("div",{className:"office-frame-shell",children:(0,e.jsx)("iframe",{className:"office-game-frame",src:"/game/index.html",title:"HD2D Office",allow:"autoplay"})}):(0,e.jsx)(P,{status:i??{state:"absent",received:0,total:u},title:t("nav.office"),proxy:c,starting:m,onProxyChange:l,onStart:()=>{b()}})}function P(t){let i=t.status.total||u,a=(0,n.useMemo)(()=>i?Math.min(100,Math.round(t.status.received/i*100)):0,[t.status.received,i]),c=t.status.state==="downloading",l=t.status.state==="error";return(0,e.jsxs)("div",{style:{margin:"auto",textAlign:"center",maxWidth:440,padding:32,color:"var(--fg,#e6e6e6)"},children:[(0,e.jsx)("h1",{style:{fontSize:18,fontWeight:600,lineHeight:1.2,margin:"0 0 8px"},children:t.title}),(0,e.jsxs)("div",{style:{fontSize:13,opacity:.7,lineHeight:1.7,marginBottom:20},children:["\u628A\u6BCF\u4E2A\u4F1A\u8BDD\u53D8\u6210\u529E\u516C\u5BA4\u91CC\u7684\u4E00\u4E2A\u673A\u5668\u4EBA\uFF0C\u5B9E\u65F6\u6620\u5C04\u5C4F\u5E55\u72B6\u6001\u3002",(0,e.jsx)("br",{}),"\u9996\u6B21\u8FDB\u5165\u9700\u4E0B\u8F7D\u7EA6 ",y(i)," MB \u6E38\u620F\u8D44\u6E90\uFF08\u4EC5\u4E00\u6B21\uFF0C\u4E4B\u540E\u672C\u5730\u7F13\u5B58\uFF09\u3002"]}),l?(0,e.jsxs)("div",{style:{color:"#e06c75",fontSize:12,marginBottom:14},children:["\u4E0A\u6B21\u4E0B\u8F7D\u5931\u8D25\uFF1A",t.status.error??"\u672A\u77E5\u9519\u8BEF",(0,e.jsx)("br",{}),(0,e.jsx)("span",{style:{opacity:.7},children:"\u586B\u4EE3\u7406\u540E\u70B9\u91CD\u8BD5"})]}):null,c?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{style:{background:"var(--surface-muted)",borderRadius:"var(--radius-lg)",height:10,overflow:"hidden",marginBottom:10},children:(0,e.jsx)("div",{style:{height:"100%",width:`${a}%`,background:"var(--accent)",transition:"width .3s"}})}),(0,e.jsxs)("div",{style:{fontSize:12,opacity:.7},children:["\u4E0B\u8F7D\u4E2D... ",y(t.status.received)," / ",y(i)," MB\uFF08",a,"%\uFF09"]})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("input",{id:"hd2d-proxy",className:"office-proxy-input",type:"text",value:t.proxy,onChange:m=>t.onProxyChange(m.currentTarget.value),placeholder:"HTTP \u4EE3\u7406\uFF08\u53EF\u9009\uFF0C\u5982 http://127.0.0.1:7890\uFF09"}),(0,e.jsx)("div",{style:{fontSize:11,opacity:.5,marginBottom:14,textAlign:"left"},children:"\u8FDE\u4E0D\u4E0A GitHub \u65F6\u586B\u4EE3\u7406\uFF08\u4EC5\u7528\u4E8E\u4E0B\u8F7D\u672C\u8D44\u6E90\uFF0C\u4F1A\u8BB0\u4F4F\uFF09\u3002\u7559\u7A7A\u8D70\u76F4\u8FDE/\u7CFB\u7EDF\u4EE3\u7406\u73AF\u5883\u53D8\u91CF\u3002"}),(0,e.jsxs)("button",{id:"hd2d-load",type:"button",className:"page-primary-action office-load-button",disabled:t.starting,onClick:t.onStart,children:[l?"\u91CD\u8BD5":"\u52A0\u8F7D\u529E\u516C\u5BA4","\uFF08\u7EA6 ",y(i)," MB\uFF09"]})]})]})}function B(t){let i={maxWidth:t.style.maxWidth,padding:t.style.padding,flex:t.style.flex,minHeight:t.style.minHeight,minWidth:t.style.minWidth,display:t.style.display,overflow:t.style.overflow};t.style.maxWidth="none",t.style.padding="0",t.style.flex="1 1 auto",t.style.minHeight="0",t.style.minWidth="0",t.style.display="flex",t.style.overflow="hidden";let a=p(t,(0,e.jsx)(T,{}));return()=>{a(),t.style.maxWidth=i.maxWidth,t.style.padding=i.padding,t.style.flex=i.flex,t.style.minHeight=i.minHeight,t.style.minWidth=i.minWidth,t.style.display=i.display,t.style.overflow=i.overflow}}export{B as renderOfficePage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as Q,b as ee}from"./chunk-NACP7BMR.js";import{b as x,d as T,e as k,f as I,k as G,m as O,n as P,o as _,p as J,r as j}from"./chunk-5CJMHTT4.js";import{b as K,d as N}from"./chunk-FXW3V4JR.js";import"./chunk-24ONYQMR.js";import{B as $,C,G as q,I as H,J as V,K as M,L as g,M as A,z as L}from"./chunk-F6KNPF4R.js";import{a as W}from"./chunk-SYC6D5XU.js";import{a as le,d as X}from"./chunk-5THX4DI2.js";import{c as E}from"./chunk-7SZRL6FY.js";var r=E(le(),1);var t=E(X(),1),ce=new Set(["working","analyzing","active","starting"]),ve=new Set(["idle","dormant"]),te="botmux.overview.teamExpanded",ne="botmux.overview.activeSort",z=5,B=1,de=260;function me(){try{return window.localStorage.getItem(te)==="1"}catch{return!1}}function ue(e){try{window.localStorage.setItem(te,e?"1":"0")}catch{}}function we(e){return e==="attention"?"attention":"time"}function pe(){try{return we(window.localStorage.getItem(ne))}catch{return"time"}}function fe(e){try{window.localStorage.setItem(ne,e)}catch{}}function ge(e,s){let o=(i,a)=>Number(a.lastMessageAt??0)-Number(i.lastMessageAt??0);return s==="attention"?[...e].sort((i,a)=>{let v=g(i)?0:1,c=g(a)?0:1;if(v!==c)return v-c;if(v===0){let d=A(i)-A(a);if(d!==0)return d}return o(i,a)}):[...e].sort(o)}function be(e){return String(e??"unknown").toLowerCase().replace(/[^a-z0-9_-]/g,"-")}function he(e,s){let o=String(e??"unknown"),i=`sessions.status.${o}`,a=s(i);return a===i?o:a}function Se(e){if(!e)return B*z;let s=window.getComputedStyle(e).gridTemplateColumns.split(/\s+/).filter(i=>Number.parseFloat(i)>0);return Math.max(1,s.length||z)*B}function Ae(e,s){if(!e)return;let o=document.querySelector(".sidebar");if(!o||window.matchMedia("(max-width: 980px)").matches){e.style.removeProperty(s);return}let i=o.getBoundingClientRect().bottom,a=e.getBoundingClientRect().top,c=`${Math.max(de,Math.round(i-a))}px`;e.style.getPropertyValue(s)!==c&&e.style.setProperty(s,c)}function Ne({card:e}){let s=N(),o=$(e.larkAppId,e.brand),i=!e.online&&e.active.length===0,a=e.attention.length>0,v=e.busy.length>0,c=a?"warn":v?"busy":i?"off":"ok",d;if(a){let u=[...e.attention].sort((h,f)=>A(h)-A(f))[0];d=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("b",{children:(M(u.title)||u.sessionId).slice(0,60)})," \xB7 ",g(u)??""]})}else if(v){let u=[...e.busy].sort((h,f)=>Number(f.lastMessageAt??0)-Number(h.lastMessageAt??0))[0];d=(0,t.jsx)("b",{children:(M(u.title)||u.sessionId).slice(0,60)})}else i?d=s("overview.botOffline"):d=s("overview.botIdle");let b=a?(0,t.jsx)("span",{className:"tag tag-warn",children:s("overview.botNeedsYou")}):v?(0,t.jsx)("span",{className:"tag tag-run",children:s("overview.botBusy",{count:e.busy.length})}):i?(0,t.jsx)("span",{className:"tag tag-off",children:s("overview.botOff")}):(0,t.jsx)("span",{className:"tag tag-ok",children:s("overview.botReady")});return(0,t.jsxs)("article",{className:`mate${a?" mate-attn":""}${i?" mate-off":""}`,children:[o?(0,t.jsx)("a",{className:"mate-console",href:o,target:"_blank",rel:"noopener noreferrer","data-tip":s("overview.botConsole"),"aria-label":s("overview.botConsole"),children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,t.jsx)("path",{d:"M7 17 17 7M9 7h8v8"})})}):null,(0,t.jsxs)("div",{className:"mate-top",children:[(0,t.jsx)(x,{html:C({name:e.botName,larkAppId:e.larkAppId,avatarUrl:e.botAvatarUrl,dot:c})}),(0,t.jsxs)("div",{className:"mate-id",children:[(0,t.jsx)("b",{children:e.botName}),(0,t.jsx)("span",{className:"mate-role",children:e.cliId})]})]}),(0,t.jsx)("div",{className:"mate-task",children:d}),(0,t.jsxs)("div",{className:"mate-foot",children:[b,(0,t.jsx)("span",{children:e.lastActiveAt?s("overview.lastActive",{time:L(e.lastActiveAt)}):s("common.never")})]})]})}function ye({session:e}){let s=N(),o=H(e),i=String(e.status??"unknown"),a=g(e);return(0,t.jsxs)(P,{kind:"session",children:[(0,t.jsx)(x,{html:C({name:o,larkAppId:e.larkAppId,size:"sm"})}),(0,t.jsxs)(_,{children:[(0,t.jsx)("b",{children:(M(e.title)||e.sessionId).slice(0,64)}),(0,t.jsxs)("span",{children:[o," \xB7 ",V(e)??e.cliId??"unknown"," \xB7 ",L(e.lastMessageAt)]})]}),(0,t.jsx)(J,{children:a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("a",{className:"overview-list-action",href:"#/sessions",children:s("strip.handle")}),(0,t.jsx)("span",{className:"status overview-list-status status-attention",children:a})]}):(0,t.jsx)("span",{className:`status overview-list-status status-${be(i)}`,children:he(i,s)})})]})}function Me({schedule:e,timeZone:s}){let o=e.nextRunAt?new Date(e.nextRunAt).toLocaleString(void 0,s?{timeZone:s,timeZoneName:"short"}:void 0):"-";return(0,t.jsxs)(P,{kind:"schedule",children:[(0,t.jsxs)(_,{children:[(0,t.jsx)("strong",{children:e.name??e.id}),(0,t.jsxs)("span",{children:[H(e)," \xB7 ",e.parsed?.display??""]})]}),(0,t.jsx)("span",{className:"overview-list-meta",children:(0,t.jsx)(G,{text:o,showPopover:!1,durationMs:2600})})]})}function Te({mode:e,onModeChange:s}){let o=N(),i=o(e==="attention"?"overview.sortAttentionFirst":"overview.sortByTime");return(0,t.jsx)(j,{className:"overview-active-sort-menu",label:i,value:e,options:[{value:"time",label:o("overview.sortByTime")},{value:"attention",label:o("overview.sortAttentionFirst")}],onChange:s})}function ke(){let e=N(),s=(0,r.useRef)(null),o=(0,r.useRef)(null),i=(0,r.useRef)(null),[a,v]=(0,r.useState)(me),[c,d]=(0,r.useState)(pe),[b,u]=(0,r.useState)(B*z),[h,f]=(0,r.useState)(0),{sessions:y,schedules:D,scheduleTimeZone:se,schedulesAvailable:oe}=K(n=>({sessions:[...n.sessions.values()],schedules:[...n.schedules.values()],scheduleTimeZone:n.scheduleTimeZone,schedulesAvailable:n.schedulesAvailable}));(0,r.useEffect)(()=>{let n=0,m=()=>{window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{let p=Se(s.current);u(l=>l===p?l:p)})};m();let w=typeof ResizeObserver>"u"||!s.current?null:new ResizeObserver(m);return w&&s.current&&w.observe(s.current),window.addEventListener("resize",m),()=>{window.cancelAnimationFrame(n),w?.disconnect(),window.removeEventListener("resize",m)}},[]),(0,r.useEffect)(()=>{Q().then(()=>f(n=>n+1)),q().then(()=>f(n=>n+1))},[]);let F=(0,r.useMemo)(()=>y.filter(n=>n.status!=="closed"),[y]),S=(0,r.useMemo)(()=>ee(y),[y,h]),U=a?S:S.slice(0,b),Y=(0,r.useMemo)(()=>ge(F.filter(n=>g(n)||ce.has(n.status)||ve.has(n.status)),c).slice(0,7),[F,c]),R=(0,r.useMemo)(()=>D.filter(n=>n.nextRunAt).sort((n,m)=>Date.parse(n.nextRunAt)-Date.parse(m.nextRunAt)).slice(0,5),[D]);(0,r.useEffect)(()=>{let n=[{el:o.current,propertyName:"--active-sessions-min-height"},{el:i.current,propertyName:"--schedules-panel-min-height"}].filter(l=>!!l.el);if(!n.length)return;let m=0,w=()=>{window.cancelAnimationFrame(m),m=window.requestAnimationFrame(()=>{for(let l of n)Ae(l.el,l.propertyName)})};w();let p=typeof ResizeObserver>"u"?null:new ResizeObserver(w);if(p){for(let re of n)p.observe(re.el);let l=document.querySelector(".sidebar"),Z=n[0].el.closest(".page");l&&p.observe(l),Z&&p.observe(Z)}return window.addEventListener("resize",w),()=>{window.cancelAnimationFrame(m),p?.disconnect(),window.removeEventListener("resize",w);for(let l of n)l.el.style.removeProperty(l.propertyName)}},[a,b,S.length,R.length]);let ie=()=>{v(n=>(ue(!n),!n))},ae=n=>{d(n),fe(n)};return(0,t.jsxs)("section",{className:"page hero-page",children:[(0,t.jsx)("div",{className:"page-heading",children:(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"eyebrow",children:e("app.subtitle")}),(0,t.jsx)("h1",{children:e("overview.title")})]})}),(0,t.jsxs)("div",{className:"overview-layout",children:[(0,t.jsxs)("div",{className:"overview-main",children:[(0,t.jsxs)("section",{className:"overview-block team-section",children:[(0,t.jsx)(T,{title:e("overview.team"),count:e("overview.teamCount",{count:S.length}),hint:e("overview.teamHint"),children:(0,t.jsx)(I,{children:(0,t.jsx)(k,{href:"#/bot-defaults",children:e("overview.viewAllPlain")})})}),(0,t.jsx)("div",{className:"team-grid",id:"team-grid",ref:s,children:U.length?U.map(n=>(0,t.jsx)(Ne,{card:n},n.larkAppId??n.botName)):(0,t.jsx)("div",{className:"empty",children:e("overview.noSessions")})}),S.length>b?(0,t.jsx)("button",{type:"button",className:"team-toggle",id:"team-toggle",onClick:ie,children:e(a?"overview.teamCollapse":"overview.teamExpand")}):null]}),(0,t.jsxs)("section",{className:"overview-block",children:[(0,t.jsx)(T,{title:e("overview.activeSessions"),children:(0,t.jsxs)(I,{children:[(0,t.jsx)(Te,{mode:c,onModeChange:ae}),(0,t.jsx)(k,{href:"#/sessions",children:e("overview.viewAllPlain")})]})}),(0,t.jsx)("section",{className:"panel active-sessions-panel",ref:o,children:(0,t.jsx)(O,{id:"recent-sessions",children:Y.length?Y.map(n=>(0,t.jsx)(ye,{session:n},n.sessionId)):(0,t.jsx)("li",{className:"empty",children:e("overview.noSessions")})})})]})]}),oe?(0,t.jsx)("aside",{className:"overview-side",children:(0,t.jsxs)("section",{className:"overview-block",children:[(0,t.jsx)(T,{title:e("overview.nextSchedules"),children:(0,t.jsx)(k,{href:"#/schedules",children:e("overview.viewAllPlain")})}),(0,t.jsx)("section",{className:"panel schedules-panel",ref:i,children:(0,t.jsx)(O,{id:"next-schedules",children:R.length?R.map(n=>(0,t.jsx)(Me,{schedule:n,timeZone:se},n.id)):(0,t.jsx)("li",{className:"empty",children:e("overview.noSchedules")})})})]})}):null]})]})}function xe(e){e.classList.add("overview-root");let s=W(e,(0,t.jsx)(ke,{}));return()=>{s(),e.classList.remove("overview-root")}}export{xe as renderOverviewPage};
|