agent-insight 0.2.0-beta → 0.2.2-beta
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/(main)/accessconfig/install/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/dataset/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/run/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/trace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/eval/trajectory/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/fault/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/metrics/evaluators/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/metrics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/modelconfig/registry/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/modelconfig/web-search/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/quality/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-eval/grayscale/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-eval/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-generator/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-opt/[name]/[version]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/skill-opt/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(main)/trace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/channels.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/health.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/install.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.html +1 -1
- package/.next/standalone/.next/server/app/accessconfig.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/accessconfig.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.html +1 -1
- package/.next/standalone/.next/server/app/agents.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/agent/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agent/stream/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/batch-tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/execute/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/terminate-all/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/results/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js +6 -6
- package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/eval/trajectory/runs/route.js +1 -1
- package/.next/standalone/.next/server/app/api/fault/diagnosis/stream/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/attachments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-generator/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/skill-opt/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/user-evaluators/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/dashboard.html +1 -1
- package/.next/standalone/.next/server/app/dashboard.rsc +2 -2
- package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.html +1 -1
- package/.next/standalone/.next/server/app/dataset.rsc +2 -2
- package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/dataset.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/dataset.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.html +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.rsc +2 -2
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval/trajectory.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.html +1 -1
- package/.next/standalone/.next/server/app/eval.rsc +2 -2
- package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/eval.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/eval.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.html +1 -1
- package/.next/standalone/.next/server/app/fault.rsc +2 -2
- package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/fault.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/fault.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.html +1 -1
- package/.next/standalone/.next/server/app/memory.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.html +1 -1
- package/.next/standalone/.next/server/app/metrics.rsc +2 -2
- package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/metrics.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/metrics.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/registry.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.html +1 -1
- package/.next/standalone/.next/server/app/modelconfig.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/modelconfig.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.html +1 -1
- package/.next/standalone/.next/server/app/optapi.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/optapi.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.html +1 -1
- package/.next/standalone/.next/server/app/quality.rsc +2 -2
- package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/quality.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/quality.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.html +1 -1
- package/.next/standalone/.next/server/app/security.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/security.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.html +1 -1
- package/.next/standalone/.next/server/app/skill-detail.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.html +2 -2
- package/.next/standalone/.next/server/app/skill-eval/grayscale.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.html +1 -1
- package/.next/standalone/.next/server/app/skill-eval.rsc +4 -4
- package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/_full.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/skill-eval.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-eval.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.html +1 -1
- package/.next/standalone/.next/server/app/skill-generator.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-generator.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-generator.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.html +1 -1
- package/.next/standalone/.next/server/app/skill-history.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-history.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.html +1 -1
- package/.next/standalone/.next/server/app/skill-opt.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/skill-opt.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-opt.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.html +1 -1
- package/.next/standalone/.next/server/app/skill-release.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skill-release.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.html +1 -1
- package/.next/standalone/.next/server/app/skills.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.html +1 -1
- package/.next/standalone/.next/server/app/trace.rsc +2 -2
- package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/trace.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/trace.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__29b88539._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__571e2dc5._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__aeca73e7._.js +1 -1
- package/.next/standalone/.next/server/chunks/_5041b697._.js +1 -1
- package/.next/standalone/.next/server/chunks/_73cb0d03._.js +7 -7
- package/.next/standalone/.next/server/chunks/_7ecc72d5._.js +1 -1
- package/.next/standalone/.next/server/chunks/_b2cfd29b._.js +1 -1
- package/.next/standalone/.next/server/chunks/_d36858e9._.js +3 -3
- package/.next/standalone/.next/server/chunks/src_lib_69eb724e._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_2e8ebb20._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_8e76c6f5._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_da30fab4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_ddf088e7._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_243b92c2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_eval_trajectory_page_tsx_052751f5._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_skill-eval_page_tsx_d6828614._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_f0e17888._.js +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +2 -2
- package/.next/standalone/.next/static/chunks/046dc786e7e13cc4.js +1 -0
- package/.next/standalone/.next/static/chunks/4812c235bebb18ff.js +1 -0
- package/.next/standalone/.next/static/chunks/49bb7f20fbab9dac.js +1 -0
- package/.next/standalone/.next/static/chunks/{150c66f334898c1b.js → 6f9e84819ba4f450.js} +1 -1
- package/.next/{static/chunks/9ce93159d07d77fc.js → standalone/.next/static/chunks/781813e2aa38a20f.js} +1 -1
- package/.next/{static/chunks/d12348f4045911d6.js → standalone/.next/static/chunks/84b0f0dc8be9bc7e.js} +1 -1
- package/.next/standalone/.next/static/chunks/8871e04c4e1fd6c4.js +1 -0
- package/.next/standalone/.next/static/chunks/e33bd5306b9b9d64.js +1 -0
- package/.next/standalone/package.json +1 -3
- package/.next/standalone/scripts/install.js +11 -0
- package/.next/standalone/scripts/postinstall.js +20 -6
- package/.next/standalone/scripts/start.js +8 -0
- package/.next/static/chunks/046dc786e7e13cc4.js +1 -0
- package/.next/static/chunks/4812c235bebb18ff.js +1 -0
- package/.next/static/chunks/49bb7f20fbab9dac.js +1 -0
- package/.next/static/chunks/{150c66f334898c1b.js → 6f9e84819ba4f450.js} +1 -1
- package/.next/{standalone/.next/static/chunks/9ce93159d07d77fc.js → static/chunks/781813e2aa38a20f.js} +1 -1
- package/.next/{standalone/.next/static/chunks/d12348f4045911d6.js → static/chunks/84b0f0dc8be9bc7e.js} +1 -1
- package/.next/static/chunks/8871e04c4e1fd6c4.js +1 -0
- package/.next/static/chunks/e33bd5306b9b9d64.js +1 -0
- package/package.json +1 -3
- package/scripts/install.js +11 -0
- package/scripts/postinstall.js +20 -6
- package/scripts/start.js +8 -0
- package/.next/standalone/.next/static/chunks/63fd190c8d8ebf18.js +0 -1
- package/.next/standalone/.next/static/chunks/7100361dbae12246.js +0 -1
- package/.next/standalone/.next/static/chunks/a9d1c1054358afe7.js +0 -1
- package/.next/standalone/.next/static/chunks/bc8ee6907cb73517.js +0 -1
- package/.next/standalone/.next/static/chunks/d2f0f5c92132648a.js +0 -1
- package/.next/static/chunks/63fd190c8d8ebf18.js +0 -1
- package/.next/static/chunks/7100361dbae12246.js +0 -1
- package/.next/static/chunks/a9d1c1054358afe7.js +0 -1
- package/.next/static/chunks/bc8ee6907cb73517.js +0 -1
- package/.next/static/chunks/d2f0f5c92132648a.js +0 -1
- /package/.next/standalone/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_ssgManifest.js +0 -0
- /package/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_buildManifest.js +0 -0
- /package/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,244681,e=>{"use strict";var t=e.i(843476),a=e.i(271645),s=e.i(618566),r=e.i(540568),l=e.i(927643),n=e.i(183752);let i=new Set(["skill-generator-agent","fault-diagnosis-agent","skill-optimizer-chat","trace-quality-evaluator","task-completion-evaluator","skill-trigger-analyzer","grayscale-skill-agent","grayscale-baseline-agent"]),o={ab:"A/B 测试",trace:"用例分析",recall:"召回分析",static:"静态合规"};function c(e){let t;if((e.ab.delta??0)<0&&(e.ab.pValue??1)<.05){let t=null==e.ab.delta?"":`(${e.ab.delta>0?"+":""}${e.ab.delta} 分)`;return{problem:`A/B 测试显示启用 Skill 后结果显著回退${t},当前版本不建议上线。`,suggestion:"建议优先排查 A/B 回退原因,再结合低分维度做针对性修正。",mode:"fallback"}}if(e.overall.coveredCount<e.overall.totalCount){let t=e.overall.missingDimensions.map(e=>o[e]).filter(Boolean),a=t.length>0?`,缺少 ${t.join("、")} 结果`:"";return{problem:`当前仅有 ${e.overall.coveredCount}/${e.overall.totalCount} 个维度完成评测${a},数据覆盖仍不完整。`,suggestion:"建议先补齐可运行维度,再判断是否需要进入 Skill 优化。",mode:"fallback"}}let a=(t=[],e.ab.hasResult&&null!=e.ab.scoreB&&t.push({key:"ab",label:o.ab,score:e.ab.scoreB}),e.trace.hasResult&&null!=e.trace.score&&t.push({key:"trace",label:o.trace,score:e.trace.score}),e.recall.hasResult&&null!=e.recall.score&&t.push({key:"recall",label:o.recall,score:e.recall.score}),e.static.hasResult&&null!=e.static.score&&t.push({key:"static",label:o.static,score:e.static.score}),t.sort((e,t)=>e.score-t.score),t[0]||null);return a?"trace"===a.key?{problem:`当前主要短板集中在${a.label},已评测 Trace 中有 ${e.trace.highDeviationCount} 条高偏离。`,suggestion:"建议优先进入用例分析详情,先处理高偏离 Trace 和低分场景。",mode:"fallback"}:"recall"===a.key?{problem:`当前主要短板集中在${a.label},触发集通过率仅 ${Math.round(e.recall.passRate??0)}%。`,suggestion:"建议优先补强召回触发集与路由边界,再重新验证命中率表现。",mode:"fallback"}:"static"===a.key?{problem:`当前主要短板集中在${a.label},仍有 ${e.static.issueCount} 项待处理问题。`,suggestion:"建议优先修复静态合规问题,再复测整体健康分变化。",mode:"fallback"}:{problem:`当前主要短板集中在${a.label},已成为综合分的主要拖累。`,suggestion:"建议优先进入对应详情页,先处理最影响分数的问题。",mode:"fallback"}:{problem:"当前还没有足够的评测结果,暂时无法形成稳定诊断。",suggestion:"建议先运行至少一个可用维度,再查看诊断与后续优化建议。",mode:"fallback"}}var d=e.i(180627),u=e.i(366460);let h=[676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,15056327351493116e-23];function p(e){return e.reduce((e,t)=>e+t,0)/e.length}function m(e,t){return e.length<2?0:e.reduce((e,a)=>e+(a-t)**2,0)/(e.length-1)}function g(e){if(e<.5)return Math.log(Math.PI)-Math.log(Math.sin(Math.PI*e))-g(1-e);let t=.9999999999998099,a=e-1;for(let e=0;e<h.length;e+=1)t+=h[e]/(a+e+1);let s=a+h.length-.5;return .5*Math.log(2*Math.PI)+(a+.5)*Math.log(s)-s+Math.log(t)}function v(e,t,a){let s=e+t,r=e+1,l=e-1,n=1,i=1-s*a/r;1e-30>Math.abs(i)&&(i=1e-30);let o=i=1/i;for(let c=1;c<=200;c+=1){let d=2*c,u=c*(t-c)*a/((l+d)*(e+d));1e-30>Math.abs(i=1+u*i)&&(i=1e-30),1e-30>Math.abs(n=1+u/n)&&(n=1e-30),o*=(i=1/i)*n,1e-30>Math.abs(i=1+(u=-(e+c)*(s+c)*a/((e+d)*(r+d)))*i)&&(i=1e-30),1e-30>Math.abs(n=1+u/n)&&(n=1e-30);let h=(i=1/i)*n;if(o*=h,3e-7>Math.abs(h-1))break}return o}var f=e.i(726526);e.i(160514);var x=e.i(717809),j=e.i(787767);function y({label:e,placeholder:s,options:r,selectedIds:l,onChange:n,accent:i="#2563eb",emptyHint:o,disabled:c}){let[d,u]=(0,a.useState)(!1),h=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!d)return;let e=e=>{h.current&&!h.current.contains(e.target)&&u(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[d]);let p=r.filter(e=>l.includes(e.id)).map(e=>e.name),m=0===p.length?s||"请选择":p.length<=2?p.join("、"):`${p.slice(0,2).join("、")} 等 ${p.length} 项`,g=e=>{n(l.includes(e)?l.filter(t=>t!==e):[...l,e])};return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,t.jsx)("span",{style:{fontSize:11,fontWeight:700,color:"#52525b",textTransform:"uppercase",letterSpacing:"0.04em",minWidth:52},children:e}),(0,t.jsxs)("div",{ref:h,style:{position:"relative",flex:1,minWidth:0},children:[(0,t.jsxs)("button",{type:"button",disabled:c,onClick:()=>!c&&u(e=>!e),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,padding:"6px 10px",borderRadius:6,fontSize:12.5,cursor:c?"not-allowed":"pointer",border:"1px solid "+(l.length?i:"#d4d4d8"),background:c?"#f4f4f5":"#fff",color:l.length?"#27272a":"#a1a1aa",textAlign:"left"},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:m}),(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:6,flexShrink:0},children:[l.length>0&&(0,t.jsx)("span",{style:{fontSize:10.5,fontWeight:700,color:i,background:i+"14",borderRadius:99,padding:"0 7px"},children:l.length}),(0,t.jsx)("span",{style:{color:"#a1a1aa",fontSize:10},children:d?"▲":"▼"})]})]}),d&&(0,t.jsxs)("div",{style:{position:"absolute",top:"calc(100% + 4px)",left:0,right:0,zIndex:50,background:"#fff",border:"1px solid #e4e4e7",borderRadius:8,boxShadow:"0 8px 24px rgba(0,0,0,.12)",maxHeight:260,overflowY:"auto",padding:4},children:[0===r.length&&(0,t.jsx)("div",{style:{padding:"10px 12px",fontSize:12,color:"#a1a1aa"},children:o||"暂无选项"}),r.map(e=>{let a=l.includes(e.id);return(0,t.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>g(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),g(e.id))},style:{display:"flex",alignItems:"center",gap:8,padding:"7px 9px",borderRadius:5,cursor:"pointer",fontSize:12.5,background:a?i+"0f":"transparent",color:"#27272a"},children:[(0,t.jsx)("span",{style:{width:15,height:15,borderRadius:4,flexShrink:0,border:"1.5px solid "+(a?i:"#c4c4cc"),background:a?i:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:10,fontWeight:700},children:a?"✓":""}),(0,t.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),e.meta&&(0,t.jsx)("span",{style:{fontSize:10.5,color:"#a1a1aa",flexShrink:0},children:e.meta})]},e.id)})]})]})]})}function b({tasks:e,selectedRunId:s,selectedTitle:r,onSelect:l,onCreateNew:n,locale:i="zh"}){let o="zh"===i,[c,d]=(0,a.useState)(!1),u=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!c)return;let e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[c]);let h=e.find(e=>e.runId===s),p=s?h?.taskTitle||r||s.slice(0,8):o?"选择 / 新建评测任务":"Select / new eval task";return(0,t.jsxs)("div",{ref:u,style:{position:"relative",display:"inline-flex",alignItems:"center",gap:8},children:[(0,t.jsxs)("button",{type:"button",onClick:n,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"7px 14px",borderRadius:7,border:"1px dashed #C4B5FD",background:"#FAF5FF",color:"#7E22CE",fontSize:13.5,fontWeight:700,cursor:"pointer",whiteSpace:"nowrap"},children:["+ ",o?"新建评测任务":"New eval task"]}),(0,t.jsxs)("button",{type:"button",onClick:()=>d(e=>!e),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"7px 14px",borderRadius:7,fontSize:13.5,fontWeight:700,cursor:"pointer",border:"1px solid "+(s?"rgba(126,34,206,.3)":"#D4D4D8"),background:s?"#F5E8FF":"#fff",color:s?"#7E22CE":"#52525B",maxWidth:340,overflow:"hidden"},title:s?`评测任务 ${s}`:void 0,children:[(0,t.jsxs)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["📋 ",p]}),(0,t.jsx)("span",{style:{color:"#A1A1AA",fontSize:11},children:c?"▲":"▼"})]}),s&&(0,t.jsx)("button",{type:"button",onClick:()=>window.open(`/eval/run/${encodeURIComponent(s)}`,"_blank"),style:{padding:"7px 14px",background:"#EEF2FF",border:"1px solid rgba(79,70,229,.25)",borderRadius:7,fontSize:13.5,fontWeight:700,color:"#4F46E5",cursor:"pointer",whiteSpace:"nowrap"},title:o?"打开评测任务详情":"Open eval task",children:o?"查看评测详情":"View details"}),c&&(0,t.jsx)("div",{style:{position:"absolute",top:"calc(100% + 6px)",right:0,zIndex:60,minWidth:360,background:"#fff",border:"1px solid #E4E4E7",borderRadius:8,boxShadow:"0 8px 24px rgba(0,0,0,.12)",maxHeight:340,overflowY:"auto",padding:6},children:0===e.length?(0,t.jsx)("div",{style:{padding:"10px 12px",fontSize:13,color:"#A1A1AA"},children:o?"暂无历史评测任务":"No eval tasks yet"}):e.map(e=>{let a=e.runId===s;return(0,t.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>{d(!1),l({runId:e.runId,taskTitle:e.taskTitle})},onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),d(!1),l({runId:e.runId,taskTitle:e.taskTitle}))},style:{padding:"10px 12px",borderRadius:6,cursor:"pointer",background:a?"rgba(126,34,206,.08)":"transparent"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:7,fontSize:13.5,fontWeight:700,color:"#27272A"},children:[a&&(0,t.jsx)("span",{style:{color:"#7E22CE"},children:"✓"}),(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.taskTitle||e.runId.slice(0,8)})]}),(0,t.jsxs)("div",{style:{fontSize:12,color:"#A1A1AA",marginTop:3},children:[o?"共":""," ",e.traceCount??0," ",o?"条":"records","number"==typeof e.doneCount?` \xb7 ${o?"已完成":"done"} ${e.doneCount}`:"",e.runningCount?` \xb7 ${o?"进行中":"running"} ${e.runningCount}`:"",e.createdAt?` \xb7 ${new Date(e.createdAt).toLocaleDateString()}`:""]})]},e.runId)})})]})}function k(e){return"number"!=typeof e?"#B8B6AE":e>=80?"#16A34A":e>=60?"#D97706":"#DC2626"}let S={pending:{color:"#888780",bg:"#F4F4F2"},running:{color:"#2563EB",bg:"rgba(37,99,235,.10)"},partial:{color:"#D97706",bg:"rgba(217,119,6,.10)"},done:{color:"#16A34A",bg:"rgba(22,163,74,.10)"},fail:{color:"#DC2626",bg:"rgba(220,38,38,.10)"}};function N({tone:e,label:a,title:s}){let r=S[e];return(0,t.jsxs)("span",{title:s,style:{display:"inline-flex",alignItems:"center",gap:5,padding:"2px 9px",borderRadius:99,fontSize:11.5,fontWeight:600,color:r.color,background:r.bg,cursor:s?"help":"default"},children:["running"===e&&(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:99,border:"1.5px solid "+r.color,borderTopColor:"transparent",display:"inline-block",animation:"erspin 0.7s linear infinite"}}),a]})}function w({records:e,locale:s="zh",title:r,emptyHint:l,onRetry:n,onDelete:i,onRowClick:o}){let c="zh"===s,d=!!n||!!i,u=n&&i?92:50*!!d,h="eval-exec-table-cols-v2",p={caseW:"1.1fr",execW:"1.4fr",evalW:"1.6fr"},m={caseW:120,execW:150,evalW:160},[g,v]=a.default.useState({caseW:null,execW:null,evalW:null});a.default.useEffect(()=>{try{let e=localStorage.getItem(h);if(e){let t=JSON.parse(e);if(t&&"object"==typeof t){let e=e=>"number"==typeof e&&Number.isFinite(e)&&e>0?e:null;v({caseW:e(t.caseW),execW:e(t.execW),evalW:e(t.evalW)})}}}catch{}},[]);let f=e=>null!=g[e]?`${g[e]}px`:p[e],x=[78,62,52,52,...u?[u]:[]],j=[f("caseW"),f("execW"),f("evalW"),...x.map(e=>`${e}px`)].join(" "),y=3+x.length,b=(g.caseW??m.caseW)+(g.execW??m.execW)+(g.evalW??m.evalW)+x.reduce((e,t)=>e+t,0)+(y-1)*12+24,S=e=>(0,t.jsx)("span",{onMouseDown:t=>{t.preventDefault(),t.stopPropagation();let a=t.currentTarget.parentElement,s=a?.offsetWidth??g[e]??m[e],r=t.clientX,l=t=>{let a=Math.max(80,s+(t.clientX-r));v(t=>({...t,[e]:a}))},n=()=>{document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",n),document.body.style.cursor="",v(e=>{try{localStorage.setItem(h,JSON.stringify(e))}catch{}return e})};document.addEventListener("mousemove",l),document.addEventListener("mouseup",n),document.body.style.cursor="col-resize"},onClick:e=>e.stopPropagation(),title:c?"拖拽调整列宽":"Drag to resize",style:{position:"absolute",top:0,right:-6,width:12,height:"100%",cursor:"col-resize",zIndex:3,display:"flex",justifyContent:"center"},children:(0,t.jsx)("span",{style:{width:2,height:"60%",alignSelf:"center",background:"#D4D4D8",borderRadius:1}})}),w={position:"relative",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};return(0,t.jsxs)("div",{style:{border:"1px solid #E7E5E4",borderRadius:8,overflow:"hidden",background:"#fff"},children:[(0,t.jsx)("style",{children:"@keyframes erspin{to{transform:rotate(360deg)}}"}),r&&(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"10px 12px",background:"#FAFAF7",borderBottom:"1px solid #E7E5E4"},children:[(0,t.jsx)("div",{style:{fontWeight:700,color:"#2C2C2A",fontSize:13},children:r}),(0,t.jsxs)("span",{style:{fontSize:12,color:"#888780"},children:[e.length," ",c?"条":"records"]})]}),0===e.length?(0,t.jsx)("div",{style:{padding:14,color:"#888780",fontSize:13},children:l||(c?"暂无评测记录":"No evaluation records yet")}):(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",maxHeight:460,overflowY:"auto",overflowX:"auto"},children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:j,gap:12,padding:"8px 12px",background:"#FAFAF7",borderBottom:"1px solid #E7E5E4",fontSize:11,fontWeight:700,color:"#5F5E5A",position:"sticky",top:0,zIndex:1,minWidth:b},children:[(0,t.jsxs)("div",{style:w,children:[c?"用例":"Case",S("caseW")]}),(0,t.jsxs)("div",{style:w,children:[c?"执行 Trace":"Execution trace",S("execW")]}),(0,t.jsxs)("div",{style:w,children:[c?"评估 Trace":"Eval trace",S("evalW")]}),(0,t.jsx)("div",{children:c?"状态":"Status"}),(0,t.jsx)("div",{children:c?"评测结果":"Result"}),(0,t.jsx)("div",{style:{textAlign:"right"},children:c?"结果分":"Result"}),(0,t.jsx)("div",{style:{textAlign:"right"},children:c?"轨迹分":"Traj"}),d&&(0,t.jsx)("div",{style:{textAlign:"center"},children:c?"操作":"Action"})]}),e.map(e=>{let a,r,{tone:l,label:u}=function(e,t){let a="zh"===t;switch(e){case"pending":case"queued":return{tone:"pending",label:a?"排队中":"Queued"};case"executing":return{tone:"running",label:a?"执行中":"Executing"};case"executed":return{tone:"pending",label:a?"待评测":"Awaiting evaluation"};case"running":case"evaluating":return{tone:"running",label:a?"评测中":"Evaluating"};case"partial":return{tone:"partial",label:a?"部分评测":"Partial"};case"done":case"pass":return{tone:"done",label:a?"已评测":"Evaluated"};case"fail":case"failed":return{tone:"fail",label:a?"失败":"Failed"};default:return{tone:"pending",label:e}}}(e.status,s);return(0,t.jsxs)("div",{onClick:o?()=>o(e):void 0,style:{display:"grid",gridTemplateColumns:j,gap:12,alignItems:"center",padding:"10px 12px",borderTop:"1px solid #F1EFE8",fontSize:12,cursor:o?"pointer":"default",minWidth:b},children:[(0,t.jsx)("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},title:e.caseTitle||e.caseLabel,children:(0,t.jsx)("span",{style:{fontSize:12,color:"#2C2C2A"},children:e.caseLabel||"—"})}),(0,t.jsx)("div",{style:{minWidth:0},children:e.executionTraceId?(0,t.jsxs)("button",{className:"v2-action-btn",style:{maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:"ui-monospace, monospace",fontSize:11,color:"#185FA5",background:"transparent",border:"none",cursor:"pointer",padding:0,textAlign:"left"},title:c?"查看链路追踪":"View trace",onClick:t=>{t.stopPropagation(),window.open(`/trace?taskId=${encodeURIComponent(e.executionTraceId)}`,"_blank")},onMouseEnter:e=>e.currentTarget.style.textDecoration="underline",onMouseLeave:e=>e.currentTarget.style.textDecoration="none",children:["🔗 ",e.executionTraceId]}):(0,t.jsx)("span",{style:{color:"#B8B6AE"},children:"—"})}),(0,t.jsx)("div",{style:{minWidth:0,display:"flex",flexDirection:"column",gap:3},children:(a=[],(e.trajEvalTraceId&&a.push({label:c?"轨迹":"Traj",id:e.trajEvalTraceId,color:"#7E22CE"}),e.resultEvalTraceId&&a.push({label:c?"结果":"Result",id:e.resultEvalTraceId,color:"#185FA5"}),0===a.length&&e.evaluationTraceId&&a.push({label:c?"评估":"Eval",id:e.evaluationTraceId,color:"#7E22CE"}),0===a.length)?(0,t.jsx)("span",{style:{color:"#B8B6AE"},children:"—"}):a.map(e=>(0,t.jsxs)("button",{className:"v2-action-btn",style:{display:"flex",alignItems:"center",gap:4,maxWidth:"100%",overflow:"hidden",background:"transparent",border:"none",cursor:"pointer",padding:0,textAlign:"left"},title:c?`查看${e.label}评估器轨迹(评测怎么判的)`:`View ${e.label} evaluator trace`,onClick:t=>{t.stopPropagation(),window.open(`/trace?taskId=${encodeURIComponent(e.id)}`,"_blank")},onMouseEnter:e=>e.currentTarget.style.textDecoration="underline",onMouseLeave:e=>e.currentTarget.style.textDecoration="none",children:[(0,t.jsx)("span",{style:{flexShrink:0,fontSize:9.5,fontWeight:700,color:e.color,background:e.color+"14",borderRadius:3,padding:"0 4px",lineHeight:"15px"},children:e.label}),(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:"ui-monospace, monospace",fontSize:11,color:e.color},children:e.id})]},e.label)))}),(0,t.jsx)("div",{children:(0,t.jsx)(N,{tone:l,label:u,title:"fail"===l?e.errorMsg:void 0})}),(0,t.jsx)("div",{children:(()=>{if(!e.evaluatorRunId||!e.executionTraceId||!e.resultId)return(0,t.jsx)("span",{style:{color:"#B8B6AE",fontSize:11},children:"—"});let a=`/eval/trajectory/${encodeURIComponent(e.executionTraceId)}?runId=${encodeURIComponent(e.evaluatorRunId)}${e.datasetId?`&datasetId=${encodeURIComponent(e.datasetId)}`:""}&resultId=${encodeURIComponent(e.resultId)}`;return(0,t.jsxs)("button",{className:"v2-action-btn",style:{fontSize:11,padding:"3px 8px",background:"#EEF2FF",color:"#4F46E5",border:"1px solid rgba(79,70,229,.25)",borderRadius:4,cursor:"pointer",fontWeight:600,whiteSpace:"nowrap"},title:c?"查看该 trace 的评测结果详情":"View this trace's evaluation result",onClick:e=>{e.stopPropagation(),window.open(a,"_blank")},children:["📋 ",c?"查看":"View"]})})()}),(0,t.jsx)("div",{style:{textAlign:"right",fontWeight:700,fontFamily:"ui-monospace, monospace",color:k(e.resultScore)},children:"number"==typeof e.resultScore?Math.round(e.resultScore):"—"}),(0,t.jsx)("div",{style:{textAlign:"right",fontWeight:700,fontFamily:"ui-monospace, monospace",color:k(e.trajScore)},children:"number"==typeof e.trajScore?Math.round(e.trajScore):"—"}),d&&(r="running"===l||"pending"===l||e.actionsDisabled,(0,t.jsxs)("div",{style:{display:"flex",gap:4,justifyContent:"center"},children:[n&&(0,t.jsx)("button",{className:"v2-action-btn",style:{fontSize:11,padding:"3px 8px",border:"1px solid #D4D4D8",background:"#fff",borderRadius:4,cursor:r?"not-allowed":"pointer",color:r?"#B8B6AE":"#52525B",opacity:r?.6:1},disabled:r,title:r?c?"当前记录暂不可重试":"Retry is unavailable":c?"重新评测这条":"Re-evaluate",onClick:t=>{t.stopPropagation(),r||n(e)},children:c?"重试":"Retry"}),i&&(0,t.jsx)("button",{className:"v2-action-btn",style:{fontSize:11,padding:"3px 8px",border:"1px solid "+(r?"#E7E5E4":"#F0C5C5"),background:"#fff",borderRadius:4,cursor:r?"not-allowed":"pointer",color:r?"#B8B6AE":"#DC2626",opacity:r?.6:1},disabled:r,title:r?c?"当前记录暂不可删除":"Delete is unavailable":c?"从评测执行列表删除这条":"Delete this record",onClick:t=>{t.stopPropagation(),r||i(e)},children:c?"删除":"Delete"})]}))]},e.id)})]})]})}let I=new Map;function C(e,t,s=0,r){let l=r?.latestByCase!==!1,i=e&&t?`${e}\u0000${t}\u0000${l?"latest":"all"}`:"",[o,c]=(0,a.useState)({scopeKey:"",map:new Map});return(0,a.useEffect)(()=>{if(!e||!t)return;let a=!1,r=0,o=async()=>{let s=++r;try{let o=l?"&latestByCase=1":"",d=await (0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(e)}&runId=${encodeURIComponent(t)}${o}&limit=500`),u=await d.json(),h=Array.isArray(u?.results)?u.results:[],p=new Map;for(let e of h){let t=e&&"object"==typeof e?e:{},a=t.taskId||t.executionId;if(!a||t.watchPlaceholder||t.placeholderOnly||p.has(String(a)))continue;let s=t.rawAnalysis&&"object"==typeof t.rawAnalysis?t.rawAnalysis:{},r=s.resultEvaluation&&"object"==typeof s.resultEvaluation?s.resultEvaluation:{},l="string"==typeof s.evaluatorSessionId&&s.evaluatorSessionId.trim()?s.evaluatorSessionId.trim():"",n="string"==typeof r.evaluatorSessionId&&r.evaluatorSessionId.trim()?r.evaluatorSessionId.trim():"",i=l||n||"";p.set(String(a),{resultId:"string"==typeof t.id?t.id:void 0,caseId:"string"==typeof t.caseId?t.caseId:void 0,taskId:String(a),evaluationTraceId:i||void 0,resultEvalTraceId:n||void 0,trajEvalTraceId:l||void 0,datasetId:"string"==typeof t.datasetId?t.datasetId:void 0,status:"string"==typeof t.status?t.status:void 0,resultScore:"number"==typeof t.resultEvaluationScore?Math.round(100*t.resultEvaluationScore):null,trajScore:"number"==typeof t.trajectoryScore?Math.round(100*t.trajectoryScore):null,errorMessage:"string"==typeof t.errorMessage?t.errorMessage:void 0})}a||s!==r||c({scopeKey:i,map:p})}catch{}};if(o(),s>0){let e=setInterval(o,s);return()=>{a=!0,clearInterval(e)}}return()=>{a=!0}},[e,t,s,i,l]),o.scopeKey===i?o.map:I}var T=e.i(615408);function R({text:e}){let[s,r]=(0,a.useState)(null);return e.length>80?(0,t.jsxs)("span",{style:{cursor:"default"},onMouseEnter:e=>r({x:e.clientX,y:e.clientY}),onMouseMove:e=>r({x:e.clientX,y:e.clientY}),onMouseLeave:()=>r(null),children:[e.slice(0,80),"…",s&&(0,t.jsx)("div",{className:"cell-tooltip-bubble",style:{left:Math.min(s.x+14,window.innerWidth-360),top:s.y+18},children:e})]}):(0,t.jsx)(t.Fragment,{children:e})}let E=[...T.presetEvaluators.filter(e=>"ready"===e.status).map(e=>({id:e.id,name:e.name}))];function $({newTaskTrigger:e,historyPanelTrigger:r,topConfigSlot:i,headerActions:o,controlled:c,controlledDatasetIds:d,controlledEvaluatorIds:h,controlledEvalBatchId:p,controlledEvalBatchTitle:m,controlledSkillId:g,controlledVersionId:v,hideExecAndResult:j,onExecutionRecordsChange:k}){let S,N,I,T,$,z,{locale:M}=(0,f.useLocale)(),{user:D}=(0,l.useAuth)(),B=(0,s.useRouter)(),[F,L]=(0,a.useState)(null),[P,W]=(0,a.useState)([]),[O,J]=(0,a.useState)(!1),[_,U]=(0,a.useState)(""),[V,H]=(0,a.useState)(""),[q,K]=(0,a.useState)(!1),[Y,X]=(0,a.useState)(!1),[G,Q]=(0,a.useState)([]),[Z,ee]=(0,a.useState)([]),[et,ea]=(0,a.useState)([]),[es,er]=(0,a.useState)([]),[el,en]=(0,a.useState)(""),[ei,eo]=(0,a.useState)(""),[ec,ed]=(0,a.useState)(!1),[eu,eh]=(0,a.useState)(!1),ep=(0,a.useRef)(null),em=(0,a.useRef)([]),[eg,ev]=(0,a.useState)(""),[ef,ex]=(0,a.useState)(""),[ej,ey]=(0,a.useState)([]),[eb,ek]=(0,a.useState)([]),[eS,eN]=(0,a.useState)("preset-agent-trace-quality"),[ew,eI]=(0,a.useState)(()=>E.map(e=>e.id)),[eC,eT]=(0,a.useState)(!1),[eR,eE]=(0,a.useState)([]),e$=(0,a.useCallback)(async()=>{if(!D)return void eE([]);try{let e=await (0,n.apiFetch)(`/api/eval/trajectory/runs?user=${encodeURIComponent(D)}&limit=50&latestByCase=1&excludeGrayscale=1`),t=await e.json();Array.isArray(t?.runs)&&eE(t.runs.map(e=>({runId:e.runId,taskTitle:e.taskTitle,traceCount:e.traceCount,doneCount:e.doneCount,runningCount:e.runningCount,createdAt:e.createdAt})))}catch{}},[D]);(0,a.useEffect)(()=>{e$()},[e$]),(0,a.useEffect)(()=>{c&&void 0!==d&&er(d)},[c,d]),(0,a.useEffect)(()=>{c&&void 0!==h&&eI(h)},[c,h]),(0,a.useEffect)(()=>{c&&(void 0!==p&&ev(p),void 0!==m&&ex(m))},[c,p,m]),(0,a.useEffect)(()=>{c&&(void 0!==g&&en(g),void 0!==v&&eo(v))},[c,g,v]),(0,a.useEffect)(()=>{c&&(void 0!==g&&eL(g),eX([]))},[c,g,v]);let eA=C(D,eg||void 0,5e3),[ez,eM]=(0,a.useState)("dataset"),[eD,eB]=(0,a.useState)(!1),[eF,eL]=(0,a.useState)(""),[eP,eW]=(0,a.useState)("7d"),[eO,eJ]=(0,a.useState)(""),[e_,eU]=(0,a.useState)([]),[eV,eH]=(0,a.useState)(!1),[eq,eK]=(0,a.useState)({}),[eY,eX]=(0,a.useState)([]),[eG,eQ]=(0,a.useState)(!1),[eZ,e0]=(0,a.useState)(!1),[e1,e5]=(0,a.useState)(!1),[e2,e6]=(0,a.useState)(!1),[e4,e3]=(0,a.useState)(!1),[e8,e7]=(0,a.useState)(!1),[e9,te]=(0,a.useState)(!0),[tt,ta]=(0,a.useState)(!1),[ts,tr]=(0,a.useState)(!0);(0,a.useRef)(null),(0,a.useRef)(null);let[tl,tn]=(0,a.useState)({top:0,left:0}),[ti,to]=(0,a.useState)({top:0,left:0}),[tc,td]=(0,a.useState)("all"),[tu,th]=(0,a.useState)(""),[tp,tm]=(0,a.useState)([]);(0,a.useEffect)(()=>{em.current=tp},[tp]),(0,a.useEffect)(()=>()=>{ep.current&&clearInterval(ep.current)},[]);let[tg,tv]=(0,a.useState)({}),tf=(0,a.useRef)({}),tx=(0,a.useRef)({}),tj=(0,a.useRef)(null),ty=(0,a.useRef)(!1),tb=(0,a.useRef)(null),tk=()=>{let e=new Date;return`评测任务 ${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`};(0,a.useEffect)(()=>{D&&(0,n.apiFetch)(`/api/debug/batch-tasks?user=${encodeURIComponent(D)}`).then(e=>e.json()).then(e=>{if(Array.isArray(e)&&e.length>0){let t=e[0],a=t.configJson||{},s=c&&((a.skillId||"")!==(g||"")||(a.versionId||"")!==(v||"")),r=s?{...t,configJson:{...a,skillId:g||"",versionId:v||""},caseStatesJson:{},traceEvalStatesJson:{}}:t;W([r,...e.slice(1)]),L(r),c||(er(a.datasetIds||[]),a.versionId&&(tb.current=a.versionId),en(a.skillId||""),eo(a.versionId||""),a.sourceMode&&eM(a.sourceMode),a.evaluatorId&&eN(a.evaluatorId),Array.isArray(a.evaluators)&&a.evaluators.length>0&&eI(a.evaluators),a.traceSkillId&&eL(a.traceSkillId),a.traceTimeRange&&eW(a.traceTimeRange),a.traceDatasetId&&eJ(a.traceDatasetId),ev(a.evaluationBatchId||""),ex(a.evaluationBatchTitle||""),ey(Array.isArray(a.evaluationBatchEvaluators)?a.evaluationBatchEvaluators:[])),H(a.taskDescription||""),tv(r.caseStatesJson||{}),eK(r.traceEvalStatesJson||{}),s&&(0,n.apiFetch)(`/api/debug/batch-tasks/${t.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D,configJson:r.configJson,caseStatesJson:{},traceEvalStatesJson:{}})}).catch(()=>{})}else c?(0,n.apiFetch)("/api/debug/batch-tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D,taskName:tk()})}).then(e=>e.ok?e.json():null).then(e=>{e?.id&&(L(e),W([e]),J(!1))}).catch(()=>{}):(U(tk()),J(!0))}).catch(()=>{c||(U(tk()),J(!0))})},[D,c,g,v]);let tS=(0,a.useCallback)(async(e,t,a,s)=>{if(!D||!e)return;let r={user:D};void 0!==t&&(r.configJson=t),void 0!==a&&(r.caseStatesJson=a),void 0!==s&&(r.traceEvalStatesJson=s);try{await (0,n.apiFetch)(`/api/debug/batch-tasks/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}catch{}},[D]),tN=(0,a.useCallback)(e=>{ed(!1);let t=t_.current;if(!t)return;ev(e.evaluatorRunId),ex(e.taskTitle),ey(e.selectedEvaluators);let a=t.configJson||{},s={datasetIds:a.datasetIds||[],skillId:a.skillId||"",versionId:a.versionId||"",taskDescription:a.taskDescription,sourceMode:a.sourceMode,evaluatorId:a.evaluatorId,traceSkillId:a.traceSkillId,traceTimeRange:a.traceTimeRange,traceDatasetId:a.traceDatasetId,evaluators:a.evaluators??ew,evaluationBatchId:e.evaluatorRunId,evaluationBatchTitle:e.taskTitle,evaluationBatchEvaluators:e.selectedEvaluators};tS(t.id,s),L(e=>e?{...e,configJson:{...e.configJson||{},...s}}:e),e$()},[tS,ew,e$]),tw=(0,a.useCallback)(e=>{let t=t_.current;if(!t)return;ev(e.runId),ex(e.taskTitle||"");let a=t.configJson||{},s={datasetIds:a.datasetIds||[],skillId:a.skillId||"",versionId:a.versionId||"",taskDescription:a.taskDescription,sourceMode:a.sourceMode,evaluatorId:a.evaluatorId,evaluators:a.evaluators??ew,traceSkillId:a.traceSkillId,traceTimeRange:a.traceTimeRange,traceDatasetId:a.traceDatasetId,evaluationBatchId:e.runId,evaluationBatchTitle:e.taskTitle||"",evaluationBatchEvaluators:a.evaluationBatchEvaluators};tS(t.id,s),L(e=>e?{...e,configJson:{...e.configJson||{},...s}}:e)},[tS,ew]),tI=async()=>{if(_.trim()&&D){X(!0);try{let e=await (0,n.apiFetch)("/api/debug/batch-tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D,taskName:_.trim()})});if(e.ok){let t=await e.json();V.trim()&&(await (0,n.apiFetch)(`/api/debug/batch-tasks/${t.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D,configJson:{taskDescription:V.trim()}})}).catch(()=>{}),t.configJson={...t.configJson||{},taskDescription:V.trim()}),L(t),W(e=>[t,...e]),J(!1),U(""),er([]),en(""),eo(""),tv({})}}catch{}finally{X(!1)}}},tC=()=>{U(tk()),H(""),J(!0),e5(!1),ev(""),ex(""),ey([])},tT=(0,a.useRef)(e);(0,a.useEffect)(()=>{e!==tT.current&&(tT.current=e,tC())},[e]);let tR=(0,a.useRef)(r);(0,a.useEffect)(()=>{r!==tR.current&&(tR.current=r,e6(!0))},[r]),(0,a.useEffect)(()=>{D&&Promise.all([(0,n.apiFetch)(`/api/agent-datasets?user=${encodeURIComponent(D)}`).then(e=>e.json()),(0,n.apiFetch)(`/api/skills?user=${encodeURIComponent(D)}`).then(e=>e.json()),(0,n.apiFetch)(`/api/user-evaluators?user=${encodeURIComponent(D)}`).then(e=>e.json()).catch(()=>[])]).then(([e,t,a])=>{Array.isArray(e)&&Q(e),Array.isArray(t)&&ee(t.map(e=>({id:e.id,name:e.name}))),Array.isArray(a)&&ek(a.map(e=>({id:e.id,name:e.name})))}).catch(()=>{})},[D]),(0,a.useEffect)(()=>{if(!D||!el){ea([]),eo("");return}(0,n.apiFetch)(`/api/skills/${el}/versions?user=${encodeURIComponent(D)}`).then(e=>e.json()).then(e=>{if(Array.isArray(e)){if(ea(e),c)return void eo(v||"");let t=tb.current;if(t&&e.find(e=>e.id===t))tb.current=null,eo(t);else{tb.current=null;let t=e.find(e=>e.isCurrent);eo(t?t.id:e[0]?.id||"")}}}).catch(()=>{})},[D,el,c,v]),(0,a.useEffect)(()=>{if("trace"!==ez||!D||!eF)return void eU([]);eH(!0);let e=Z.find(e=>e.id===eF),t=new URLSearchParams({user:D});e&&t.set("skill",e.name);let a="1d"===eP?1:"3d"===eP?3:7;t.set("since",String(Date.now()-864e5*a)),t.set("fields","light"),(0,n.apiFetch)(`/api/observe/data?${t.toString()}`).then(e=>e.json()).then(e=>{Array.isArray(e)&&eU(e.slice(0,100))}).catch(()=>{}).finally(()=>eH(!1))},[ez,D,eF,eP,Z]),(0,a.useEffect)(()=>{if(D)for(let[e,t]of Object.entries(eq)){if("evaluating"!==t.status||!t.evaluatorRunId||!t.taskId||tx.current[`tr_${e}`])continue;let{evaluatorRunId:a,taskId:s}=t,r=async()=>{try{let t=await (0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(D)}&runId=${encodeURIComponent(a)}`),r=((await t.json()).results||[]).find(e=>e.taskId===s);if(!r)return;if("done"===r.status){clearInterval(tx.current[`tr_${e}`]),delete tx.current[`tr_${e}`];let t=Math.round((r.trajectoryScore??0)*100);eK(r=>{let l={...r,[e]:{status:"done",score:t,evaluatorRunId:a,taskId:s}};return tY(l),l})}else"failed"===r.status&&(clearInterval(tx.current[`tr_${e}`]),delete tx.current[`tr_${e}`],eK(t=>{let a={...t,[e]:{status:"fail",taskId:s}};return tY(a),a}))}catch{}};r(),tx.current[`tr_${e}`]=setInterval(r,5e3)}},[F?.id,D]),(0,a.useEffect)(()=>{if(D)for(let[e,t]of Object.entries(tg)){if("evaluating"!==t.status||!t.evaluatorRunId||tx.current[e])continue;let{evaluatorRunId:a}=t,s=async()=>{try{let t=await (0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(D)}&runId=${encodeURIComponent(a)}`),s=((await t.json()).results||[]).find(t=>t.caseId===e);if(!s)return;if("done"===s.status){clearInterval(tx.current[e]),delete tx.current[e];let t=Math.round((s.trajectoryScore??0)*100),a=t>=60;tv(s=>{let r={...s,[e]:{...s[e]||{},status:a?"pass":"fail",score:t}};return tK(r),r})}else"failed"===s.status&&(clearInterval(tx.current[e]),delete tx.current[e],tv(t=>{let a={...t,[e]:{...t[e]||{},status:"fail",output:s.errorMessage||"轨迹评测失败"}};return tK(a),a}))}catch{}};s(),tx.current[e]=setInterval(s,5e3)}},[F?.id,D]);let tE=G.filter(e=>es.includes(e.id)).flatMap(e=>{let t=e.cases||[];return 0===t.length?[{id:`mock_${e.id}`,input:`[${"zh"===M?"示例":"Sample"}] ${e.name}`,datasetName:e.name,datasetId:e.id,isMock:!0}]:t.map(t=>({...t,datasetName:e.name,datasetId:e.id}))}),t$=a.default.useMemo(()=>{let e=new Map;for(let t of G)for(let a of t.cases||[])e.set(String(a.id),{...a,datasetId:t.id});return e},[G]),tA=a.default.useMemo(()=>Object.entries(tg).filter(([,e])=>!!eg&&(e.evaluatorRunId===eg||!!e.sessionId&&eA.has(e.sessionId))).map(([e,t])=>{let a=t$.get(e),s=t.sessionId?eA.get(t.sessionId):void 0,r=s?.taskId===t.sessionId?s:void 0,l=r?.status==="done"?"done":r?.status==="failed"?"failed":r?.status==="pending"||r?.status==="running"?"evaluating":"running"===t.status?"executing":"executed"===t.status?"executed":"evaluating"===t.status?"evaluating":"pass"===t.status?"done":"fail"===t.status?"failed":"pending";return{id:`case:${e}`,caseId:e,caseLabel:t.input||a?.input||e,caseTitle:t.input||a?.input||e,executionTraceId:t.sessionId||void 0,evaluationTraceId:r?.evaluationTraceId,resultEvalTraceId:r?.resultEvalTraceId,trajEvalTraceId:r?.trajEvalTraceId,evaluatorRunId:t.evaluatorRunId||eg||void 0,resultId:r?.resultId,datasetId:a?.datasetId||r?.datasetId,status:l,resultScore:r?.resultScore??null,trajScore:r?.trajScore??null,errorMsg:t.error||t.output||r?.errorMessage,actionsDisabled:!t.sessionId}}),[tg,eg,eA,t$]);(0,a.useEffect)(()=>{c&&k?.(tA)},[c,tA,k]);let tz=tE.filter(e=>{let t=tg[e.id],a=t?.status||"pending",s=c||"all"===tc||"pending"===tc&&"pending"===a||"executed"===tc&&("executed"===a||"evaluating"===a)||"evaluated"===tc&&("pass"===a||"fail"===a)||"failed"===tc&&"fail"===a,r=!tu||e.input?.toLowerCase().includes(tu.toLowerCase());return s&&r}),tM=tE.filter(e=>!tg[e.id]||"pending"===tg[e.id].status).length,tD=tE.filter(e=>tg[e.id]?.status==="executed").length,tB=tE.filter(e=>tg[e.id]?.status==="pass"||tg[e.id]?.status==="fail").length,tF=tE.filter(e=>tg[e.id]?.status==="fail").length,tL=tE.filter(e=>tg[e.id]?.status==="pass").length,tP=tE.filter(e=>tg[e.id]?.status==="evaluating").length,tW=tE.length>0?Math.round(tB/tE.length*100):0,tO=Z.find(e=>e.id===el),tJ=et.find(e=>e.id===ei),t_=(0,a.useRef)(null);(0,a.useEffect)(()=>{t_.current=F},[F]);let tU=(0,a.useRef)({});(0,a.useEffect)(()=>{tU.current=tg},[tg]);let tV=(0,a.useRef)({});(0,a.useEffect)(()=>{tV.current=eq},[eq]);let tH=(0,a.useRef)({datasetIds:es,skillId:el,versionId:ei,taskDescription:V,sourceMode:ez,evaluatorId:eS,evaluators:ew,traceSkillId:eF,traceTimeRange:eP,traceDatasetId:eO,evaluationBatchId:eg,evaluationBatchTitle:ef,evaluationBatchEvaluators:ej});(0,a.useEffect)(()=>{tH.current={datasetIds:es,skillId:el,versionId:ei,taskDescription:V,sourceMode:ez,evaluatorId:eS,evaluators:ew,traceSkillId:eF,traceTimeRange:eP,traceDatasetId:eO,evaluationBatchId:eg,evaluationBatchTitle:ef,evaluationBatchEvaluators:ej}},[es,el,ei,V,ez,eS,ew,eF,eP,eO,eg,ef,ej]);let tq=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(F&&D)return tq.current&&clearTimeout(tq.current),tq.current=setTimeout(()=>{tS(F.id,tH.current,void 0)},800),()=>{tq.current&&clearTimeout(tq.current)}},[ez,eS,ew,eF,eP,eO,es,el,ei,F?.id,D]);let tK=(0,a.useCallback)(e=>{t_.current&&tS(t_.current.id,tH.current,e)},[tS]),tY=(0,a.useCallback)(e=>{t_.current&&tS(t_.current.id,void 0,void 0,e)},[tS]),tX=Object.values(tg).some(e=>"running"===e.status||"evaluating"===e.status);(0,a.useEffect)(()=>{ty.current=tX},[tX]),(0,a.useEffect)(()=>{if(F&&D)return tj.current=setInterval(async()=>{if(!ty.current)return;let e=t_.current;if(e)try{let t=await (0,n.apiFetch)(`/api/debug/batch-tasks/${e.id}?user=${encodeURIComponent(D)}`);if(!t.ok)return;let a=await t.json();a.caseStatesJson&&tv(e=>{let t={...e};for(let[e,s]of Object.entries(a.caseStatesJson))tf.current[e]||tx.current[e]||(t[e]=s);return t})}catch{}},15e3),()=>{tj.current&&(clearInterval(tj.current),tj.current=null)}},[F?.id,D]),(0,a.useEffect)(()=>()=>{let e=t_.current,t=tU.current,a=tV.current;e&&(Object.keys(t).length>0||Object.keys(a).length>0)&&tS(e.id,tH.current,t,a),Object.values(tx.current).forEach(clearInterval),tx.current={},tj.current&&(clearInterval(tj.current),tj.current=null)},[tS]);let tG=async e=>{let t;tf.current[e]&&(clearInterval(tf.current[e]),delete tf.current[e]);let a=tE.find(t=>t.id===e),s=a?.input||e;t_.current&&tS(t_.current.id,tH.current,void 0),tv(t=>({...t,[e]:{...t[e]||{},status:"running"}}));try{let a=await (0,n.apiFetch)("/api/debug/execute",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D||"debug-user",query:s,skill:tO?.name,skillVersion:tJ?Number(tJ.version):void 0})}),r=await a.json();if(!a.ok||!r.jobId)return void tv(t=>{let a={...t,[e]:{status:"fail",output:r.error||"dispatch failed"}};return tK(a),a});t=r.jobId}catch(t){tv(a=>{let s={...a,[e]:{status:"fail",output:String(t)}};return tK(s),s});return}tv(a=>{let s={...a,[e]:{...a[e]||{},status:"running",jobId:t}};return tK(s),s});let r=async()=>{try{let a=await (0,n.apiFetch)(`/api/debug/execute/${t}`),s=await a.json();"completed"===s.status?(clearInterval(tf.current[e]),delete tf.current[e],tv(a=>{let r={...a,[e]:{status:"executed",jobId:t,output:s.output??"",timeCost:s.timeCost,tokenUsage:s.tokenUsage??0,sessionId:s.sessionId}};return tK(r),r})):("failed"===s.status||!s.status||s.error)&&(clearInterval(tf.current[e]),delete tf.current[e],tv(a=>{let r={...a,[e]:{status:"fail",jobId:t,output:s.error||"agent failed"}};return tK(r),r}))}catch{}};await r(),tf.current[e]=setInterval(r,1e4)},tQ=async e=>{let t;t_.current&&tS(t_.current.id,tH.current,void 0);let a=tU.current[e],s=a?.sessionId,r=tE.find(t=>t.id===e),l=r?.datasetId;if(!s||!l)return void tv(t=>{let a={...t,[e]:{...t[e]||{},status:"fail",output:"缺少执行记录或数据集,无法评测(需先执行)"}};return tK(a),a});tx.current[e]&&(clearInterval(tx.current[e]),delete tx.current[e]),tv(t=>{let a={...t,[e]:{...t[e]||{},status:"evaluating"}};return tK(a),a});try{let a={user:D||"debug-user",datasetId:l,pairs:[{caseId:e,taskId:s}]};eg?a.evaluatorRunId=eg:a.evaluator=eS;let r=await (0,n.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),i=await r.json();if(!r.ok||!i.evaluatorRunId)return void tv(t=>{let a={...t,[e]:{...t[e]||{},status:"fail",output:i.error||"评测提交失败"}};return tK(a),a});t=i.evaluatorRunId}catch(t){tv(a=>{let s={...a,[e]:{...a[e]||{},status:"fail",output:String(t)}};return tK(s),s});return}tv(a=>{let s={...a,[e]:{...a[e]||{},status:"evaluating",evaluatorRunId:t}};return tK(s),s});let i=async()=>{try{let a=await (0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(D||"")}&runId=${encodeURIComponent(t)}`),r=((await a.json()).results||[]).find(t=>t.caseId===e);if(!r)return;if("done"===r.status){clearInterval(tx.current[e]),delete tx.current[e];let t=r.trajectoryScore??0,a=Math.round(100*t),l=a>=60;tv(t=>{let s={...t,[e]:{...t[e]||{},status:l?"pass":"fail",score:a}};return tK(s),s}),B.push(`/eval/trajectory/${encodeURIComponent(s)}`)}else"failed"===r.status&&(clearInterval(tx.current[e]),delete tx.current[e],tv(t=>{let a={...t,[e]:{...t[e]||{},status:"fail",output:r.errorMessage||"轨迹评测失败"}};return tK(a),a}))}catch{}};await i(),tx.current[e]=setInterval(i,5e3)},tZ=async()=>{let e=tp.filter(e=>{let t=tg[e]?.status;return!t||"pending"===t});await Promise.all(e.map(tG))},t0=async()=>{let e=tp.filter(e=>tg[e]?.status==="executed");await Promise.all(e.map(tQ))},t1=async()=>{if(!F||eu)return;if(!eg)return void alert("zh"===M?"请先在上方「评测任务」新建或选择一个评测任务":"Create/select an eval task first");if(c&&el&&!ei)return void alert("zh"===M?"当前 Skill 版本无效,无法开始评测":"The selected Skill version is invalid");let e=tp.filter(e=>{var t;return t=tg[e],!t||!!t.evaluatorRunId&&t.evaluatorRunId!==eg||"pending"===t.status||"pass"===t.status||"fail"===t.status});if(0===e.length)return void alert("zh"===M?"没有待启动的 case(已勾选的都在执行或评测中)":"No cases to start");eh(!0);try{await tS(F.id,tH.current);let t=await (0,n.apiFetch)(`/api/debug/batch-tasks/${F.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D||"debug-user",action:"start",caseIds:e})}),a=await t.json().catch(()=>({}));if(!t.ok||!a.ok){eh(!1),alert(("zh"===M?"启动失败: ":"Start failed: ")+(a.error||t.status));return}t3()}catch(e){eh(!1),alert(String(e))}},t5=async()=>{if(F&&!eu){if(0===eY.length)return void alert("zh"===M?"请先勾选要评测的 trace":"Select traces first");eh(!0);try{let e=await (0,n.apiFetch)(`/api/debug/batch-tasks/${F.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D||"debug-user",action:"evaluate",caseIds:eY})}),t=await e.json().catch(()=>({}));if(!e.ok||!t.ok){eh(!1),alert(("zh"===M?"启动失败: ":"Start failed: ")+(t.error||e.status));return}t3()}catch(e){eh(!1),alert(String(e))}}},t2=Object.values(tg).some(e=>e?.status==="running"||e?.status==="evaluating"||e?.status==="executed"),t6=async()=>{if(!F||!eu&&!t2||!window.confirm("zh"===M?"确定终止? 将停止你当前所有在跑的执行与评测, 已 in-flight 的会标记为「用户终止」失败。":"Terminate all your running executions and evaluations?"))return;let e=D||"debug-user";try{let t=await (0,n.apiFetch)(`/api/debug/batch-tasks/${F.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e,action:"abort"})}),a=await t.json().catch(()=>({}));if(!t.ok)return void alert(("zh"===M?"终止失败: ":"Abort failed: ")+(a.error||t.status));await (0,n.apiFetch)("/api/eval/terminate-all",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e})}).catch(()=>{})}catch(e){alert(String(e))}},t4=async(e,t)=>{if(F){tv(a=>({...a,[e]:{...a[e]||{status:"pending"},status:t?"evaluating":"running",output:void 0}}));try{let a=await (0,n.apiFetch)(`/api/debug/batch-tasks/${F.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D||"debug-user",action:t?"retry-evaluate":"retry-execute",caseIds:[e]})}),s=await a.json().catch(()=>({}));if(!a.ok){let t=String(s.error||a.status);tv(a=>({...a,[e]:{...a[e]||{status:"pending"},status:"fail",output:t}})),alert(("zh"===M?"重试失败: ":"Retry failed: ")+t);return}eh(!0),t3()}catch(a){let t=String(a);tv(a=>({...a,[e]:{...a[e]||{status:"pending"},status:"fail",output:t}})),alert(t)}}},t3=()=>{if(!F)return;ep.current&&clearInterval(ep.current);let e=0,t=async()=>{e++;try{let e=await (0,n.apiFetch)(`/api/debug/batch-tasks/${F.id}?user=${encodeURIComponent(D||"")}`),t=await e.json().catch(()=>({}));if(t?.caseStatesJson&&"object"==typeof t.caseStatesJson){let e=t.caseStatesJson;if(tv(e),(em.current.length>0?em.current:Object.keys(e)).every(t=>{let a=e[t]?.status;return"pass"===a||"fail"===a})){ep.current&&clearInterval(ep.current),ep.current=null,eh(!1);return}}}catch{}e>=600&&(ep.current&&clearInterval(ep.current),ep.current=null,eh(!1))};t(),ep.current=setInterval(t,3e3)},t8=async e=>{let t,a=e.task_id;if(!a)return;t_.current&&tS(t_.current.id,tH.current,void 0);let s=e.upload_id||a;eK(e=>{let t={...e,[s]:{status:"evaluating",taskId:a}};return tY(t),t});try{let e={user:D||"debug-user",datasetId:eO,taskIds:[a]};eg?e.evaluatorRunId=eg:e.evaluator=eS;let r=await (0,n.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),l=await r.json();if(!r.ok||!l.evaluatorRunId)return void eK(e=>{let t={...e,[s]:{status:"fail",taskId:a}};return tY(t),t});t=l.evaluatorRunId}catch{eK(e=>{let t={...e,[s]:{status:"fail",taskId:a}};return tY(t),t});return}eK(e=>{let r={...e,[s]:{status:"evaluating",evaluatorRunId:t,taskId:a}};return tY(r),r});let r=async()=>{try{let e=await (0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(D||"")}&runId=${encodeURIComponent(t)}`),r=((await e.json()).results||[]).find(e=>e.taskId===a);if(!r)return;if("done"===r.status){clearInterval(tx.current[`tr_${s}`]),delete tx.current[`tr_${s}`];let e=Math.round((r.trajectoryScore??0)*100);eK(r=>{let l={...r,[s]:{status:"done",score:e,evaluatorRunId:t,taskId:a}};return tY(l),l}),B.push(`/eval/trajectory/${encodeURIComponent(a)}`)}else"failed"===r.status&&(clearInterval(tx.current[`tr_${s}`]),delete tx.current[`tr_${s}`],eK(e=>{let t={...e,[s]:{status:"fail",taskId:a}};return tY(t),t}))}catch{}};await r(),tx.current[`tr_${s}`]=setInterval(r,5e3)},t7=async()=>{let e=eY.map(e=>e_.find(t=>(t.upload_id||t.task_id)===e)).filter(e=>!!e&&!eq[e.upload_id||e.task_id]?.status.match(/evaluating|done/));await Promise.all(e.map(t8))},t9=tz.length>0&&tz.every(e=>tp.includes(e.id)),ae=!!F&&!O,at="trace"===ez?Z.find(e=>e.id===eF)?.name||"未选 Skill":0===es.length?"未选数据集":1===es.length?G.find(e=>e.id===es[0])?.name||"未选数据集":`${es.length} 个数据集`;[...E,...eb].find(e=>e.id===eS)?.name;let aa="trace"===ez?e_.length:tE.length,as=tB>0?Math.round(tL/tB*100):0,ar=tE.map(e=>tg[e.id]).filter(e=>null!=e&&("pass"===e.status||"fail"===e.status)).filter(e=>"number"==typeof e.score),al=eg?Array.from(eA.values()).map(e=>({r:e.resultScore,t:e.trajScore})).filter(e=>"number"==typeof e.r&&"number"==typeof e.t):null,an=al?al.length>0?Math.round(al.reduce((e,t)=>e+(t.r+t.t)/2,0)/al.length):null:ar.length>0?Math.round(ar.reduce((e,t)=>e+(t.score||0),0)/ar.length):null,ai=null==an?"warn":an>=80?"good":an>=60?"warn":"bad";return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(x.SectionShell,{num:1,variant:"config",title:"配置",desc:"任务管理 + 数据集 / Skill / 评测器 + 全部用例列表(含未执行 / 已评测)",open:e9,onToggle:()=>te(e=>!e),summary:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"当前任务"}),(0,t.jsx)("code",{children:F?.taskName||"未保存"}),(0,t.jsxs)("span",{children:["· ",(0,t.jsx)("code",{children:at})]}),(0,t.jsxs)("span",{children:["· skill ",(0,t.jsxs)("code",{children:[tO?.name||"未选",tJ?` ${tJ.semanticVersion||`v${tJ.version}`}`:""]})]}),(0,t.jsxs)("span",{children:["· 共 ",(0,t.jsx)("b",{children:aa})," 用例"]})]}),actions:c?o:F&&!O?(0,t.jsx)(b,{locale:M,tasks:eR,selectedRunId:eg,selectedTitle:ef,onSelect:tw,onCreateNew:()=>ed(!0)}):(0,t.jsxs)("span",{title:"zh"===M?"请先保存评测任务名称":"Save task name first",style:{padding:"5px 12px",background:"#F4F4F5",border:"1px solid #E4E4E7",color:"#A1A1AA",borderRadius:5,fontSize:11.5,fontWeight:600},children:["📋 ","zh"===M?"请先保存任务":"Save task first"]}),children:[i,!c&&(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"4px 0 10px",fontSize:12.5,flexWrap:"wrap"},children:O?(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,flex:1},children:[(0,t.jsx)("input",{className:"task-inline-input",value:_,onChange:e=>U(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.nativeEvent.isComposing||tI(),"Escape"===e.key&&F&&(J(!1),U(""))},placeholder:"zh"===M?"请输入调试任务名称…":"Enter task name…",autoFocus:!0,style:{maxWidth:280}}),(0,t.jsx)("button",{className:"d-btn sm primary",onClick:tI,disabled:!_.trim()||Y,children:Y?"zh"===M?"保存中…":"Saving…":"zh"===M?"保存":"Save"}),F&&(0,t.jsx)("button",{className:"d-btn sm",onClick:()=>{J(!1),U("")},children:"zh"===M?"取消":"Cancel"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{style:{color:"var(--ink-3)"},children:"zh"===M?"调试任务:":"Debug task:"}),(0,t.jsx)("b",{style:{color:"var(--ink-1, #18181B)",maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:F?.taskName||"—"}),(0,t.jsxs)("button",{className:"d-btn sm",onClick:()=>e6(!0),title:"zh"===M?"切换历史调试任务":"Switch task",style:{padding:"2px 8px"},children:[(0,t.jsxs)("svg",{width:"10",height:"10",viewBox:"0 0 11 11",fill:"none",style:{marginRight:3},children:[(0,t.jsx)("circle",{cx:"5.5",cy:"5.5",r:"4.5",stroke:"currentColor",strokeWidth:"1.4"}),(0,t.jsx)("path",{d:"M5.5 3v2.5l1.8 1.8",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})]}),"zh"===M?"历史":"History"]}),(0,t.jsxs)("button",{className:"d-btn sm",onClick:tC,style:{padding:"2px 8px"},children:["+ ","zh"===M?"新建":"New"]})]})}),!c&&(0,t.jsxs)("div",{className:`config-bar ${!ae?"config-bar-locked":""}`,children:[!ae&&(0,t.jsxs)("div",{className:"config-bar-lock-tip",style:{cursor:"default"},children:[(0,t.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:[(0,t.jsx)("rect",{x:"2",y:"5",width:"8",height:"6",rx:"1.2",stroke:"currentColor",strokeWidth:"1.2"}),(0,t.jsx)("path",{d:"M4 5V3.5a2 2 0 114 0V5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]}),"zh"===M?O?"请先保存评测名称":"请先新建评测任务":O?"Save task name first":"Create a task first"]}),(0,t.jsx)("div",{className:"config-bar-filters",children:!c&&"dataset"===ez&&(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10,flex:1,minWidth:0},children:[(0,t.jsx)(y,{label:"zh"===M?"数据集":"Dataset",placeholder:"zh"===M?"选择数据集(可多选)":"Select datasets",emptyHint:"zh"===M?"暂无数据集(可在数据集中心创建)":"No datasets",accent:"#2563eb",disabled:!ae,options:G.map(e=>({id:e.id,name:e.name,meta:`${e.cases?.length||0} ${"zh"===M?"例":"cases"}`})),selectedIds:es,onChange:e=>er(e)}),(0,t.jsx)(y,{label:"zh"===M?"评估器":"Evaluators",placeholder:"zh"===M?"选择评估器(可多选)":"Select evaluators",emptyHint:"zh"===M?"暂无评估器":"No evaluators",accent:"#7E22CE",disabled:!ae,options:[...E,...eb].map(e=>({id:e.id,name:e.name})),selectedIds:ew,onChange:e=>eI(e)})]})})]}),(0,t.jsxs)("div",{className:"work-table-card",children:[(0,t.jsxs)("div",{className:"table-toolbar",children:[(0,t.jsxs)("div",{className:"table-toolbar-left",children:["dataset"===ez?(0,t.jsxs)("label",{className:"select-all-checkbox",children:[(0,t.jsx)("input",{type:"checkbox",checked:t9,onChange:()=>{t9?tm(e=>e.filter(e=>!tz.find(t=>t.id===e))):tm(e=>[...new Set([...e,...tz.map(e=>e.id)])])}}),(0,t.jsx)("span",{className:"checkbox-mark"})]}):(0,t.jsxs)("label",{className:"select-all-checkbox",children:[(0,t.jsx)("input",{type:"checkbox",checked:eY.length===e_.length&&e_.length>0,onChange:()=>{let e=e_.map(e=>e.upload_id||e.task_id||"").filter(Boolean);eX(t=>t.length===e.length?[]:e)}}),(0,t.jsx)("span",{className:"checkbox-mark"})]}),(0,t.jsx)("span",{className:"toolbar-status",children:"dataset"===ez?tp.length>0?"zh"===M?`已选 ${tp.length} 条`:`${tp.length} selected`:"zh"===M?`共 ${tE.length} 条用例`:`${tE.length} cases`:eY.length>0?"zh"===M?`已选 ${eY.length} 条`:`${eY.length} selected`:"zh"===M?`共 ${e_.length} 条执行链路`:`${e_.length} traces`}),!c&&"dataset"===ez&&tp.length>0&&(0,t.jsxs)("div",{className:"bulk-actions",children:[(0,t.jsx)("div",{className:"bulk-divider"}),F?.configJson?.evaluationBatchId&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{type:"button",onClick:t1,disabled:eu,title:"zh"===M?"一键启动: 执行 + 自动评测, append 到当前评测任务":"One-click: execute + auto-eval, append to linked task",style:{padding:"4px 10px",background:eu?"#A5A0E4":"#4F46E5",border:"1px solid "+(eu?"#A5A0E4":"#4F46E5"),borderRadius:5,fontSize:12,fontWeight:600,color:"#fff",cursor:eu?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"currentColor",children:(0,t.jsx)("path",{d:"M2.5 1.5l5.5 3.5-5.5 3.5V1.5z"})}),eu?"zh"===M?"启动中...":"Starting...":"zh"===M?"▶ 启动":"▶ Start"]}),eu&&(0,t.jsxs)("button",{type:"button",onClick:t6,title:"zh"===M?"终止当前批量执行":"Abort current run",style:{padding:"4px 10px",background:"#fff",border:"1px solid #DC2626",borderRadius:5,fontSize:12,fontWeight:600,color:"#DC2626",cursor:"pointer"},children:["⏹ ","zh"===M?"终止":"Abort"]}),eu&&(N=(S=Object.keys(tg)).filter(e=>tg[e]?.status==="pass").length,I=S.filter(e=>tg[e]?.status==="fail").length,T=S.filter(e=>{let t=tg[e]?.status;return"running"===t||"evaluating"===t||"executed"===t}).length,(0,t.jsxs)("span",{style:{fontSize:11.5,color:"var(--ink-2)",display:"inline-flex",alignItems:"center",gap:8,marginLeft:4},children:[(0,t.jsxs)("span",{children:["共 ",(0,t.jsx)("b",{children:S.length})]}),(0,t.jsxs)("span",{style:{color:"var(--success)"},children:["✓ ",N]}),I>0&&(0,t.jsxs)("span",{style:{color:"var(--danger)"},children:["✗ ",I]}),T>0&&(0,t.jsxs)("span",{style:{color:"#2563EB"},children:["⏳ ",T]})]}))]}),(0,t.jsxs)("button",{className:"d-btn sm dark",onClick:tZ,children:[(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,t.jsx)("path",{d:"M2.5 1.5l5.5 3.5-5.5 3.5V1.5z",fill:"currentColor"})}),"zh"===M?"批量执行 (旧)":"Batch Execute (legacy)"]}),(0,t.jsxs)("button",{className:"d-btn sm",onClick:t0,children:[(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,t.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),"zh"===M?"批量评测 (旧)":"Batch Evaluate (legacy)"]})]}),"trace"===ez&&eY.length>0&&(0,t.jsxs)("div",{className:"bulk-actions",children:[(0,t.jsx)("div",{className:"bulk-divider"}),F?.configJson?.evaluationBatchId&&(0,t.jsxs)("button",{type:"button",onClick:t5,disabled:eu,title:"zh"===M?"一键启动: 评测已选 trace, append 到当前评测任务":"One-click: evaluate selected traces",style:{padding:"4px 10px",background:eu?"#A5A0E4":"#4F46E5",border:"1px solid "+(eu?"#A5A0E4":"#4F46E5"),borderRadius:5,fontSize:12,fontWeight:600,color:"#fff",cursor:eu?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,t.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),eu?"zh"===M?"启动中...":"Starting...":"zh"===M?"▶ 启动评测":"▶ Start Eval"]}),eu&&(0,t.jsxs)("button",{type:"button",onClick:t6,style:{padding:"4px 10px",background:"#fff",border:"1px solid #DC2626",borderRadius:5,fontSize:12,fontWeight:600,color:"#DC2626",cursor:"pointer"},children:["⏹ ","zh"===M?"终止":"Abort"]}),(0,t.jsxs)("button",{className:"d-btn sm",onClick:t7,children:[(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,t.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),"zh"===M?"批量评测 (旧)":"Batch Evaluate (legacy)"]})]})]}),(0,t.jsxs)("div",{className:"table-toolbar-right",children:["dataset"===ez&&(eu||t2)&&(0,t.jsxs)("button",{type:"button",onClick:t6,title:"zh"===M?"终止当前批量执行,并清除卡住的运行状态/锁":"Abort current run and clear stuck running lock",style:{padding:"4px 10px",background:"#fff",border:"1px solid #DC2626",borderRadius:5,fontSize:12,fontWeight:600,color:"#DC2626",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:["⏹ ","zh"===M?"终止":"Abort"]}),!c&&"dataset"===ez&&(0,t.jsxs)("div",{className:"filter-group",children:[(0,t.jsxs)("button",{className:`filter-btn ${"all"===tc?"active":""}`,onClick:()=>td("all"),children:["zh"===M?"全部":"All"," ",(0,t.jsx)("span",{className:"filter-count",children:tE.length})]}),(0,t.jsxs)("button",{className:`filter-btn ${"pending"===tc?"active":""}`,onClick:()=>td("pending"),children:["zh"===M?"未执行":"Pending"," ",(0,t.jsx)("span",{className:"filter-count",children:tM})]}),(0,t.jsxs)("button",{className:`filter-btn ${"executed"===tc?"active":""}`,onClick:()=>td("executed"),children:["zh"===M?"待评测":"Executed"," ",(0,t.jsx)("span",{className:"filter-count",children:tD})]}),(0,t.jsxs)("button",{className:`filter-btn ${"evaluated"===tc?"active":""}`,onClick:()=>td("evaluated"),children:["zh"===M?"已评测":"Evaluated"," ",(0,t.jsx)("span",{className:"filter-count",children:tB})]}),tF>0&&(0,t.jsxs)("button",{className:`filter-btn ${"failed"===tc?"active":""}`,onClick:()=>td("failed"),children:["zh"===M?"失败":"Failed",(0,t.jsx)("span",{className:"filter-count",style:{color:"failed"===tc?void 0:"var(--danger)"},children:tF})]})]}),(0,t.jsx)("input",{className:"table-search",placeholder:"zh"===M?"搜索用例…":"Search cases…",value:tu,onChange:e=>th(e.target.value)})]})]}),(0,t.jsx)("div",{className:"work-table-wrapper",children:(0,t.jsxs)("table",{className:"work-table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{style:{width:36,paddingRight:0}}),(0,t.jsx)("th",{style:{width:44},children:"#"}),(0,t.jsx)("th",{children:"zh"===M?"trace"===ez?"用户输入 / Trace":"测试用例":"trace"===ez?"Input / Trace":"Test Case"}),(0,t.jsx)("th",{style:{width:110},children:"zh"===M?"trace"===ez?"来源 Skill":"数据集":"trace"===ez?"Skill":"Dataset"}),!c&&"dataset"===ez&&(0,t.jsx)("th",{style:{width:100},children:"zh"===M?"状态":"Status"}),!c&&(0,t.jsx)("th",{style:{width:70},children:"zh"===M?"分数":"Score"}),"trace"===ez&&(0,t.jsx)("th",{style:{width:70},children:"zh"===M?"耗时":"Time"}),!c&&(0,t.jsx)("th",{style:{width:80},children:"Trace"})]})}),(0,t.jsxs)("tbody",{children:["trace"===ez&&(eV?(0,t.jsx)("tr",{children:(0,t.jsx)("td",{colSpan:6,children:(0,t.jsxs)("div",{className:"d-empty",children:[(0,t.jsx)("span",{className:"spinner",style:{width:16,height:16,borderWidth:2}}),"zh"===M?" 加载中…":" Loading…"]})})}):0===e_.length?(0,t.jsx)("tr",{children:(0,t.jsx)("td",{colSpan:6,children:(0,t.jsxs)("div",{className:"d-empty",children:[(0,t.jsx)("div",{className:"d-empty-icon",children:(0,t.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,t.jsx)("polyline",{points:"17 9 13 9 10.5 15 7 3 4.5 9 1 9",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})})}),"zh"===M?eF?"该 Skill 在所选时间内暂无执行链路":"请在上方选择 Skill 以加载执行链路":eF?"No traces found for this Skill in the selected time range":"Select a Skill above to load its execution traces"]})})}):e_.filter(e=>!tu||e.query?.toLowerCase().includes(tu.toLowerCase())).map((e,a)=>{let s,r=e.upload_id||e.task_id||`trace_${a}`,l=eq[r];l?.status,l?.status,l?.status;let n=(()=>{try{let t="string"==typeof e.skills?JSON.parse(e.skills):e.skills;return Array.isArray(t)?t.map(e=>"string"==typeof e?e:e?.name||"").filter(Boolean):[]}catch{return[]}})();return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{style:{paddingRight:0},children:(0,t.jsxs)("label",{className:"row-checkbox",children:[(0,t.jsx)("input",{type:"checkbox",checked:eY.includes(r),onChange:()=>eX(e=>e.includes(r)?e.filter(e=>e!==r):[...e,r])}),(0,t.jsx)("span",{className:"checkbox-mark"})]})}),(0,t.jsx)("td",{className:"num-col",children:String(a+1).padStart(3,"0")}),(0,t.jsxs)("td",{style:{overflow:"hidden"},children:[(0,t.jsx)("div",{className:"case-cell-title",children:(0,t.jsx)(R,{text:e.query||e.task_id||"-"})}),(0,t.jsxs)("div",{className:"case-cell-meta",children:[e.task_id&&(0,t.jsxs)("span",{style:{fontFamily:"var(--font-mono)",fontSize:10.5},children:[e.task_id.slice(0,16),"…"]}),e.timestamp&&(0,t.jsxs)(t.Fragment,{children:[" · ",new Date(Number(e.timestamp)||e.timestamp).toLocaleString("zh"===M?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})]})]})]}),(0,t.jsx)("td",{children:n.length>0?n.map(e=>(0,t.jsx)("span",{className:"tag tag-blue",style:{fontSize:10,marginRight:2},children:e.slice(0,12)},e)):(0,t.jsx)("span",{style:{color:"var(--ink-4)",fontSize:11},children:"—"})}),(0,t.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:12,fontWeight:600},children:"number"==typeof(s="number"==typeof l?.score?l.score:"number"==typeof tg[e.task_id||""]?.score?tg[e.task_id||""].score:null)?(0,t.jsx)("span",{style:{color:s>=80?"var(--success)":s>=60?"var(--warn, #D97706)":"var(--danger)"},children:s}):(0,t.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)"},children:"—"})}),(0,t.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--ink-2)"},children:e.timeCost||"—"}),(0,t.jsx)("td",{children:(0,t.jsx)("button",{className:"row-more",title:"zh"===M?"查看 Trace":"View trace",onClick:()=>e.task_id&&B.push(`/trace?taskId=${encodeURIComponent(e.task_id)}`),children:"→"})})]},r)})),"dataset"===ez&&(0===tz.length?(0,t.jsx)("tr",{children:(0,t.jsx)("td",{colSpan:c?4:7,children:(0,t.jsxs)("div",{className:"d-empty",children:[(0,t.jsx)("div",{className:"d-empty-icon",children:(0,t.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,t.jsx)("path",{d:"M9 3v12M3 9h12",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})}),0===tE.length?"zh"===M?"请在上方配置栏选择数据集":"Select datasets in the config bar above":"zh"===M?"无匹配用例":"No matching cases"]})})}):tz.map((e,a)=>{let s=tg[e.id],r=s?.status||"pending";return(0,t.jsxs)("tr",{className:c||"fail"!==r?"":"row-fail",children:[(0,t.jsx)("td",{style:{paddingRight:0},children:(0,t.jsxs)("label",{className:"row-checkbox",children:[(0,t.jsx)("input",{type:"checkbox",checked:tp.includes(e.id),onChange:()=>{var t;return t=e.id,void tm(e=>e.includes(t)?e.filter(e=>e!==t):[...e,t])}}),(0,t.jsx)("span",{className:"checkbox-mark"})]})}),(0,t.jsx)("td",{className:"num-col",children:String(a+1).padStart(3,"0")}),(0,t.jsxs)("td",{style:{overflow:"hidden"},children:[(0,t.jsx)("div",{className:"case-cell-title",children:(0,t.jsx)(R,{text:e.input||e.id})}),(0,t.jsxs)("div",{className:"case-cell-meta",children:[e.isMock?"zh"===M?"模拟用例":"Mock case":`${e.datasetName}`,!c&&s?.timeCost&&` \xb7 ${s.timeCost}`,!c&&s?.tokenUsage&&` \xb7 ${s.tokenUsage} tok`]})]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"tag tag-blue",style:{fontSize:10},children:e.datasetName?.slice(0,8)||"-"})}),!c&&(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:`row-status ${r}`,children:{pending:"zh"===M?"○ 未执行":"○ Pending",running:"zh"===M?"⌛ 执行中":"⌛ Running",executed:"zh"===M?"● 待评测":"● Executed",evaluating:"zh"===M?"◷ 评测中":"◷ Evaluating",pass:"zh"===M?"✓ 已评测":"✓ Evaluated",fail:"zh"===M?"✗ 失败":"✗ Failed"}["running"===r?"running":r]})}),!c&&(0,t.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:12,fontWeight:600},children:"number"==typeof s?.score?(0,t.jsx)("span",{style:{color:s.score>=80?"var(--success)":s.score>=60?"var(--warn, #D97706)":"var(--danger)"},children:s.score}):(0,t.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)"},children:"—"})}),!c&&(0,t.jsx)("td",{children:s?.sessionId?(0,t.jsx)("button",{className:"row-more",title:"zh"===M?"查看 Trace":"View trace",onClick:()=>B.push(`/trace?taskId=${encodeURIComponent(s.sessionId)}`),children:"→"}):(0,t.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)",fontSize:11},children:"—"})})]},e.id)}))]})]})}),(0,t.jsxs)("div",{className:"table-footer",children:[(0,t.jsx)("div",{className:"table-footer-summary",children:"trace"===ez?(0,t.jsxs)(t.Fragment,{children:["zh"===M?"共":"Total"," ",(0,t.jsx)("b",{children:e_.length})," ","zh"===M?"条执行链路":"traces"]}):(0,t.jsxs)(t.Fragment,{children:["zh"===M?"共":"Total"," ",(0,t.jsx)("b",{children:tE.length})," ","zh"===M?"条用例":"cases",!c&&tL>0&&(0,t.jsx)("span",{style:{marginLeft:10,color:"var(--success)",fontWeight:600},children:"zh"===M?`通过 ${tL}`:`Passed ${tL}`}),!c&&tF>0&&(0,t.jsx)("span",{style:{marginLeft:8,color:"var(--danger)",fontWeight:600},children:"zh"===M?`失败 ${tF}`:`Failed ${tF}`})]})}),!c&&"dataset"===ez&&(0,t.jsxs)("div",{className:"table-footer-progress",children:[(0,t.jsx)("span",{className:"progress-mini-label",children:"zh"===M?`已评测 ${tB} / ${tE.length}`:`Evaluated ${tB} / ${tE.length}`}),(0,t.jsx)("div",{className:"progress-mini-bar",children:(0,t.jsx)("div",{className:"progress-mini-fill",style:{width:`${tW}%`}})}),(0,t.jsxs)("span",{className:"progress-mini-pct",children:[tW,"%"]})]}),"trace"===ez&&($=Object.values(eq).filter(e=>"done"===e.status).length,z=e_.length>0?Math.round($/e_.length*100):0,(0,t.jsxs)("div",{className:"table-footer-progress",children:[(0,t.jsx)("span",{className:"progress-mini-label",children:"zh"===M?`已评测 ${$} / ${e_.length}`:`Evaluated ${$} / ${e_.length}`}),(0,t.jsx)("div",{className:"progress-mini-bar",children:(0,t.jsx)("div",{className:"progress-mini-fill",style:{width:`${z}%`}})}),(0,t.jsxs)("span",{className:"progress-mini-pct",children:[z,"%"]})]}))]})]}),c&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:14,paddingTop:14,borderTop:"1px solid var(--ev-line, #e5e7eb)",flexWrap:"wrap"},children:[(0,t.jsx)("button",{type:"button",onClick:t1,disabled:eu||0===tp.length||!F||!eg,style:{padding:"9px 22px",background:!eu&&0!==tp.length&&F&&eg?"#4F46E5":"#A5A0E4",color:"#fff",border:"none",borderRadius:6,fontSize:14,fontWeight:700,cursor:!eu&&0!==tp.length&&F&&eg?"pointer":"not-allowed"},title:eg?0===tp.length?"请先在上方勾选 case":"先执行选中 case 生成 Trace, 再开始评测":'请先在上方"评测任务"里新建或选择一个评测任务',children:eu?"zh"===M?"评测中…":"Evaluating…":tp.length>0?`▶ ${"zh"===M?"开始评测":"Start eval"}(${tp.length})`:`▶ ${"zh"===M?"开始评测":"Start eval"}`}),eu&&(0,t.jsxs)("button",{type:"button",onClick:t6,style:{padding:"7px 14px",background:"#fff",border:"1px solid #DC2626",borderRadius:6,fontSize:12.5,fontWeight:600,color:"#DC2626",cursor:"pointer"},children:["⏹ ","zh"===M?"终止":"Abort"]}),(0,t.jsx)("span",{style:{fontSize:15,fontWeight:700,color:eg?"#2563EB":"#EA580C"},children:eg?"zh"===M?"勾选 case 后开始评测:先执行生成 Trace 再评测;进度见 ② 评测执行":"Select cases → execute to generate traces → evaluate; progress in ②":"zh"===M?"请先在上方「评测任务」新建或选择一个任务,再开始评测":"Create/select an eval task above first"})]})]}),!j&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(x.SectionShell,{num:2,variant:"exec",title:"评测执行",desc:"已启动的 case:执行 session id 跳链路追踪、评测结果跳评测任务详情;实时进度,点行钻取 ③",open:tt,onToggle:()=>ta(e=>!e),summary:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"已评测"}),(0,t.jsxs)("code",{children:[tB," / ",tE.length]}),tB>0&&(0,t.jsxs)("span",{children:["· 通过率 ",(0,t.jsxs)("b",{style:{color:as>=80?"var(--ev-success)":as>=60?"var(--ev-warning)":"var(--ev-error)"},children:[as,"%"]})]})]}),children:(0,t.jsx)(w,{locale:M,emptyHint:"还没启动评测。在 ① 配置块勾选 case → 点「▶ 启动」。",onRetry:e=>t4(e.id,!1),onDelete:async e=>{let t=tg[e.id]?.status;if("running"===t||"executed"===t||"evaluating"===t)return void alert("zh"===M?"评测/执行进行中,无法删除":"In progress, cannot delete");if(!window.confirm("zh"===M?"确定从「评测执行」列表删除这条 case 记录吗?(仅移除本次执行记录,数据集 case 本身保留)":"Delete this case record from the execution list?"))return;let a={...tg};if(delete a[e.id],tv(a),F)try{await (0,n.apiFetch)(`/api/debug/batch-tasks/${F.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:D||"debug-user",caseStatesJson:a})})}catch{}},onRowClick:()=>{tr(!0),requestAnimationFrame(()=>{document.querySelector("[data-result-section]")?.scrollIntoView({behavior:"smooth",block:"start"})})},records:tE.filter(e=>{let t=tg[e.id]?.status;return t&&"pending"!==t}).map(e=>{let t=tg[e.id],a=t?.status,s="running"===a?"executing":"executed"===a?"executed":"evaluating"===a?"evaluating":"pass"===a?"done":"fail"===a?"failed":"pending",r=("pass"===a||"fail"===a)&&t?.sessionId?eA.get(t.sessionId):void 0;return{id:e.id,caseLabel:String(e.input||e.id),caseTitle:e.input||e.id,executionTraceId:t?.sessionId||void 0,evaluationTraceId:r?.evaluationTraceId,resultEvalTraceId:r?.resultEvalTraceId,trajEvalTraceId:r?.trajEvalTraceId,evaluatorRunId:t?.evaluatorRunId||eg||void 0,resultId:r?.resultId,datasetId:e.datasetId||r?.datasetId||void 0,status:s,resultScore:r?.resultScore??null,trajScore:r?.trajScore??null,errorMsg:t?.output||void 0}})})}),(0,t.jsx)(x.SectionShell,{num:3,variant:"result",title:"分析结果",desc:tB>0?`已评测 ${tB} / ${tE.length} 用例 \xb7 当前任务 ${F?.taskName||""}`:"尚未评测",open:ts,onToggle:()=>tr(e=>!e),summary:tB>0&&null!=an?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"总评分"}),(0,t.jsxs)("code",{className:`score-${ai}`,children:[an," 分"]}),(0,t.jsxs)("span",{children:["· 通过 ",(0,t.jsx)("b",{children:tL})," / ",(0,t.jsx)("b",{children:tB})]})]}):(0,t.jsx)("span",{style:{color:"var(--ev-muted)"},children:"未评测"}),children:(0,t.jsx)(A,{allCases:tE,caseStates:tg,avgScore:an,scoreColorKlass:ai,evaluatedCount:tB,passCount:tL,failedCount:tF,pendingCount:tM,evaluatingCount:tP,onDrillTrace:e=>B.push(`/eval/trajectory/${e}`)})})]}),eG&&(0,t.jsx)("div",{className:"d-modal-mask",onClick:()=>eQ(!1),children:(0,t.jsxs)("div",{className:"d-modal",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"d-modal-head",children:[(0,t.jsx)("div",{className:"d-modal-title",children:"zh"===M?"选择评测数据集":"Select Datasets"}),(0,t.jsx)("button",{className:"d-modal-close",onClick:()=>eQ(!1),children:"×"})]}),(0,t.jsx)("div",{className:"d-modal-body",children:0===G.length?(0,t.jsx)("div",{className:"d-empty",children:"zh"===M?"暂无数据集,请先创建":"No datasets found. Create one first."}):(0,t.jsx)("div",{className:"dataset-grid",children:G.map(e=>(0,t.jsxs)("div",{className:`dataset-card ${es.includes(e.id)?"selected":""}`,onClick:()=>er(t=>t.includes(e.id)?t.filter(t=>t!==e.id):[...t,e.id]),children:[(0,t.jsx)("input",{type:"checkbox",readOnly:!0,checked:es.includes(e.id)}),(0,t.jsxs)("div",{className:"dataset-card-body",children:[(0,t.jsx)("div",{className:"dataset-name",children:e.name}),(0,t.jsxs)("div",{className:"dataset-stats",children:[(0,t.jsx)("b",{children:e.cases?.length||0})," ","zh"===M?"条用例":"cases"]})]})]},e.id))})}),(0,t.jsxs)("div",{className:"d-modal-foot",children:[(0,t.jsxs)("button",{className:"d-btn sm",onClick:()=>{eQ(!1),B.push("/dataset")},children:["+ ","zh"===M?"新建数据集":"New Dataset"]}),(0,t.jsxs)("button",{className:"d-btn sm primary",onClick:()=>eQ(!1),children:["zh"===M?"确定":"Confirm"," (",es.length,")"]})]})]})}),eZ&&(0,t.jsx)("div",{className:"d-modal-mask",onClick:()=>e0(!1),children:(0,t.jsxs)("div",{className:"d-modal",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"d-modal-head",children:[(0,t.jsx)("div",{className:"d-modal-title",children:"zh"===M?"选择 Skill 和版本":"Select Skill & Version"}),(0,t.jsx)("button",{className:"d-modal-close",onClick:()=>e0(!1),children:"×"})]}),(0,t.jsxs)("div",{className:"d-modal-body",children:[(0,t.jsxs)("div",{className:"gray-field",style:{marginBottom:16},children:[(0,t.jsx)("div",{className:"gray-field-label",children:"Skill"}),(0,t.jsxs)("select",{className:"gray-select",value:el,onChange:e=>en(e.target.value),children:[(0,t.jsx)("option",{value:"",children:"zh"===M?"-- 请选择 Skill --":"-- Select Skill --"}),Z.map(e=>(0,t.jsx)("option",{value:e.id,children:e.name},e.id))]})]}),el&&(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"gray-field-label",style:{marginBottom:10},children:"zh"===M?"版本":"Version"}),et.map(e=>(0,t.jsxs)("div",{className:`skill-version-row ${ei===e.id?"selected":""}`,onClick:()=>eo(e.id),children:[(0,t.jsx)("div",{className:"skill-version-radio"}),(0,t.jsxs)("div",{className:"skill-version-info",children:[(0,t.jsxs)("div",{className:"skill-version-name",children:[e.semanticVersion||`v${e.version}`,e.isCurrent&&(0,t.jsx)("span",{className:"tag tag-green",style:{fontSize:9},children:"Current"})]}),(0,t.jsxs)("div",{className:"skill-version-meta",children:["version ",e.version]})]})]},e.id)),0===et.length&&(0,t.jsx)("div",{className:"d-empty",style:{padding:"20px 0"},children:"zh"===M?"暂无版本":"No versions found"})]})]}),(0,t.jsxs)("div",{className:"d-modal-foot",children:[(0,t.jsx)("button",{className:"d-btn sm",onClick:()=>e0(!1),children:"zh"===M?"取消":"Cancel"}),(0,t.jsx)("button",{className:"d-btn sm primary",onClick:()=>e0(!1),children:"zh"===M?"确定":"Confirm"})]})]})}),e8&&(0,t.jsx)("div",{className:"d-modal-mask",onClick:()=>e7(!1),children:(0,t.jsxs)("div",{className:"d-modal",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"d-modal-head",children:[(0,t.jsx)("div",{className:"d-modal-title",children:"zh"===M?"选择 Skill":"Select Skill"}),(0,t.jsx)("button",{className:"d-modal-close",onClick:()=>e7(!1),children:"×"})]}),(0,t.jsx)("div",{className:"d-modal-body",children:0===Z.length?(0,t.jsx)("div",{className:"d-empty",children:"zh"===M?"暂无 Skill,请先创建":"No skills found. Create one first."}):(0,t.jsx)("div",{className:"dataset-grid",children:Z.map(e=>(0,t.jsxs)("div",{className:`dataset-card ${eF===e.id?"selected":""}`,onClick:()=>eL(e.id),children:[(0,t.jsx)("input",{type:"radio",readOnly:!0,checked:eF===e.id}),(0,t.jsxs)("div",{className:"dataset-card-body",children:[(0,t.jsx)("div",{className:"dataset-name",children:e.name}),(0,t.jsx)("div",{className:"dataset-stats",children:"zh"===M?"点击选择后查看关联执行链路":"Select to view associated traces"})]})]},e.id))})}),(0,t.jsxs)("div",{className:"d-modal-foot",children:[(0,t.jsx)("button",{className:"d-btn sm",onClick:()=>e7(!1),children:"zh"===M?"取消":"Cancel"}),(0,t.jsx)("button",{className:"d-btn sm primary",onClick:()=>e7(!1),disabled:!eF,children:"zh"===M?"确定":"Confirm"})]})]})}),e4&&(0,t.jsx)("div",{className:"d-modal-mask",onClick:()=>e3(!1),children:(0,t.jsxs)("div",{className:"d-modal",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"d-modal-head",children:[(0,t.jsx)("div",{className:"d-modal-title",children:"zh"===M?"选择评测集(轨迹数据集)":"Select Eval Dataset (Trajectory)"}),(0,t.jsx)("button",{className:"d-modal-close",onClick:()=>e3(!1),children:"×"})]}),(0,t.jsxs)("div",{className:"d-modal-body",children:[(0,t.jsx)("div",{style:{fontSize:12,color:"var(--ink-3)",marginBottom:12,padding:"8px 10px",background:"var(--bg-soft)",borderRadius:6},children:"zh"===M?"评测集用于提供参考答案和评测标准。评测时系统会将 trace 输入与数据集 case 自动匹配。":"The eval dataset provides reference answers. The system auto-matches trace inputs to dataset cases during evaluation."}),0===G.length?(0,t.jsx)("div",{className:"d-empty",children:"zh"===M?"暂无数据集":"No datasets found"}):(0,t.jsx)("div",{className:"dataset-grid",children:G.map(e=>(0,t.jsxs)("div",{className:`dataset-card ${eO===e.id?"selected":""}`,onClick:()=>eJ(e.id),children:[(0,t.jsx)("input",{type:"radio",readOnly:!0,checked:eO===e.id}),(0,t.jsxs)("div",{className:"dataset-card-body",children:[(0,t.jsx)("div",{className:"dataset-name",children:e.name}),(0,t.jsxs)("div",{className:"dataset-stats",children:[(0,t.jsx)("b",{children:e.cases?.length||0})," ","zh"===M?"条用例":"cases"]})]})]},e.id))})]}),(0,t.jsxs)("div",{className:"d-modal-foot",children:[(0,t.jsx)("button",{className:"d-btn sm",onClick:()=>e3(!1),children:"zh"===M?"取消":"Cancel"}),(0,t.jsx)("button",{className:"d-btn sm primary",onClick:()=>e3(!1),disabled:!eO,children:"zh"===M?"确定":"Confirm"})]})]})}),e2&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"d-drawer-mask",onClick:()=>e6(!1)}),(0,t.jsx)("div",{className:"d-history-drawer",children:(0,t.jsxs)("div",{className:"d-history-panel",children:[(0,t.jsxs)("div",{className:"d-history-head",children:[(0,t.jsxs)("div",{className:"d-history-head-title",children:[(0,t.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none",children:[(0,t.jsx)("circle",{cx:"6.5",cy:"6.5",r:"5.5",stroke:"currentColor",strokeWidth:"1.4"}),(0,t.jsx)("path",{d:"M6.5 3.5v3l2 2",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})]}),"zh"===M?"历史任务":"Task History",(0,t.jsxs)("span",{style:{fontWeight:400,color:"var(--ink-4)",fontSize:11},children:[P.length,"zh"===M?" 条":""]})]}),(0,t.jsx)("button",{className:"d-drawer-close",onClick:()=>e6(!1),children:(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,t.jsx)("path",{d:"M1 1l8 8M9 1l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]}),(0,t.jsx)("div",{className:"d-history-body",children:0===P.length?(0,t.jsx)("div",{style:{padding:"32px 16px",textAlign:"center",color:"var(--ink-4)",fontSize:12},children:"zh"===M?"暂无历史任务":"No task history"}):P.slice().reverse().map(e=>(0,t.jsxs)("div",{className:"d-history-item",style:F?.id===e.id?{borderColor:"var(--accent)",background:"var(--accent-soft)"}:{},onClick:()=>{let t;L(e),J(!1),e5(!1),U(""),er((t=e.configJson||{}).datasetIds||[]),t.versionId&&(tb.current=t.versionId),en(t.skillId||""),eo(t.versionId||""),H(t.taskDescription||""),eM(t.sourceMode||"dataset"),eN(t.evaluatorId||"preset-agent-trace-quality"),eI(Array.isArray(t.evaluators)&&t.evaluators.length>0?t.evaluators:E.map(e=>e.id)),eL(t.traceSkillId||""),eW(t.traceTimeRange||"7d"),eJ(t.traceDatasetId||""),ev(t.evaluationBatchId||""),ex(t.evaluationBatchTitle||""),ey(Array.isArray(t.evaluationBatchEvaluators)?t.evaluationBatchEvaluators:[]),tv(e.caseStatesJson||{}),eK(e.traceEvalStatesJson||{}),e6(!1)},children:[(0,t.jsxs)("div",{className:"d-history-item-top",children:[(0,t.jsx)("div",{className:"d-history-item-title",style:F?.id===e.id?{color:"var(--accent)"}:{},children:e.taskName}),(0,t.jsx)("span",{className:"d-history-item-id",children:new Date(e.createdAt).toLocaleString("zh"===M?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),e.configJson?.taskDescription&&(0,t.jsx)("div",{className:"d-history-item-query",children:e.configJson.taskDescription})]},e.id))})]})})]}),(0,t.jsx)(u.NewEvaluationBatchDialog,{open:ec,user:D||"",defaultTitle:F?.taskName,evaluators:ew,onClose:()=>ed(!1),onCreated:tN})]})}function A({allCases:e,caseStates:a,avgScore:s,scoreColorKlass:r,evaluatedCount:l,passCount:n,failedCount:i,pendingCount:o,evaluatingCount:c,onDrillTrace:d}){let u=e.length,h=l>0?Math.round(n/l*100):0,p=0===l?null:h>=80?"good":h<50?"bad":null;if(0===u)return(0,t.jsxs)("div",{className:"recall-empty",children:[(0,t.jsx)("b",{children:"还没选数据集或 trace。"}),(0,t.jsxs)("div",{style:{marginTop:6},children:["先去 ",(0,t.jsx)("b",{children:"① 配置"})," 选数据源 / Skill / 评测器。"]})]});if(0===l)return(0,t.jsxs)("div",{className:"recall-empty",children:[(0,t.jsx)("b",{children:"用例已就绪,但还未跑评测。"}),(0,t.jsxs)("div",{style:{marginTop:6},children:["到 ",(0,t.jsx)("b",{children:"② 执行"})," 块点「批量执行」或「批量评测」开始;评测完成后这里显示聚合结果。"]})]});let m=e=>{let t=a[e.id];if(!t)return null;let s=t.sessionId,r=e.input||e.id,l=[];"number"==typeof t.score&&l.push(`评分 ${t.score} 分`),t.timeCost&&l.push(`耗时 ${t.timeCost}`),"number"==typeof t.tokenUsage&&t.tokenUsage>0&&l.push(`tokens ${t.tokenUsage}`);let n=l.length>0?l.join(" · "):null,i=t.output?t.output.length>240?t.output.slice(0,240)+"…":t.output:null,o="pass"===t.status,c="fail"===t.status;return o||c?{id:e.id,summary:r,severity:o?"low":null!=t.score&&t.score<50?"high":"medium",evidence:n,reasoning:i,suggestedFix:c?"点击「查看完整 trace」看 evaluator 详细反馈与 trajectory 错点":null,passed:o,dimension:s?`trace ${s.slice(0,8)}`:void 0}:{id:e.id,summary:r,severity:"low",evidence:"evaluating"===t.status?"评测中…":"executed"===t.status?"已执行,待评测":"running"===t.status?"执行中…":"待执行",reasoning:null,passed:!1,dimension:s?`trace ${s.slice(0,8)}`:void 0}},g=e.filter(e=>a[e.id]?.status==="pass").map(m).filter(e=>null!=e),v=e.filter(e=>a[e.id]?.status==="fail").map(m).filter(e=>null!=e),f=e.filter(e=>{let t=a[e.id]?.status;return!t||"pending"===t||"running"===t||"executed"===t||"evaluating"===t}).map(m).filter(e=>null!=e),x=[{key:"failed",title:"未通过",desc:"评测结果不达标。点击「查看完整 trace」可看 evaluator 详细反馈。",status:0===v.length?"passed":"failed",scoreLabel:`${v.length} 个问题`,items:v},{key:"passed",title:"通过",desc:"评测达标的 case。",status:"passed",scoreLabel:`${g.length} 通过`,items:g},{key:"pending",title:"待评测",desc:"还没执行或还没经过 evaluator 打分的 case;在 ② 执行块批量推进。",status:"notEvaluated",scoreLabel:`${f.length} 待评测`,items:f}];return(0,t.jsxs)("div",{className:"ev-content",children:[(0,t.jsxs)("div",{className:"ev-hero",children:[(0,t.jsxs)("div",{className:"ev-hero-main",children:[(0,t.jsxs)("div",{className:`ev-hero-num ${r}`,children:[s??"--",(0,t.jsx)("span",{className:"ev-hero-unit",children:"分"})]}),(0,t.jsxs)("div",{className:"ev-hero-label",children:["总评分 · 已评测 ",l," / ",u," 用例"]})]}),(0,t.jsxs)("div",{className:"ev-hero-sub",children:[(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsxs)("div",{className:`ev-hero-sub-num ${p??""}`,children:[h,"%"]}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"通过率"}),(0,t.jsx)("div",{className:"ev-hero-sub-hint",children:"已评测中达标比例"})]}),(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsx)("div",{className:`ev-hero-sub-num ${i>0?"bad":""}`,children:i}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"未通过"}),(0,t.jsx)("div",{className:"ev-hero-sub-hint",children:"需要重点关注"})]}),(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsx)("div",{className:`ev-hero-sub-num ${n>0?"good":""}`,children:n}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"通过"}),(0,t.jsx)("div",{className:"ev-hero-sub-hint",children:"评测达标 case"})]}),(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsx)("div",{className:"ev-hero-sub-num",children:o+c}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"待 / 评测中"}),(0,t.jsx)("div",{className:"ev-hero-sub-hint",children:"尚未给分 case"})]})]})]}),(0,t.jsx)("div",{onClickCapture:e=>{if(!e.target.closest(".ev-issue"))return},children:(0,t.jsx)(j.FindingsGrouped,{groups:x,title:"分场景结果",hint:"未通过排在最上 · 通过 / 待评测 默认折叠",emptyMessage:"本任务没有用例"})})]})}var z=e.i(937183),M=e.i(805479),D=e.i(824381),B=e.i(846696),F=e.i(460435);function L(e){return!!e&&Object.values(e).some(e=>["a","b"].some(t=>{let a=e?.[t];return a?.status==="running"||a?.status==="evaluating"}))}function P(e){let t=e.configJson?.latestResultAt,a="string"==typeof t?Date.parse(t):0;if(Number.isFinite(a)&&a>0)return a;let s=Object.values(e.caseStatesJson||{}).flatMap(e=>["a","b"].flatMap(t=>(e?.[t]?.runs||[]).map(e=>"string"==typeof e.completedAt?Date.parse(e.completedAt):0))).filter(e=>Number.isFinite(e)&&e>0);return s.length>0?Math.max(...s):Date.parse(e.createdAt||"")||0}function W(e){return Object.values(e.caseStatesJson||{}).some(e=>["a","b"].some(t=>{let a=e?.[t];return!!(a&&("pending"!==a.status||(a.runs?.length||0)>0))}))}function O(e){return e?"number"==typeof e.score?e.score:"number"==typeof e.pass?e.pass:null:null}function J(e){let t={total:0,avgScore:null,avgTime:null,avgTokens:null,passRate:0,triggered:0,toolCalls:0};if(!e)return t;let a=e=>{if(!e)return null;let t=/(\d+(?:\.\d+)?)\s*s/.exec(e);return t?Number(t[1]):null},s=Array.isArray(e.runs)?e.runs:[];if(s.length>0){let e=s.map(O).filter(e=>null!=e),t=s.filter(e=>{let t=O(e);return null!=t?t>=60:"pass"===e.status}).length,r=e.length?Math.round(e.reduce((e,t)=>e+t,0)/e.length):null,l=s.map(e=>a(e.timeCost)).filter(e=>null!=e),n=l.length?Number((l.reduce((e,t)=>e+t,0)/l.length).toFixed(2)):null,i=s.filter(e=>"number"==typeof e.tokenUsage&&(e.tokenUsage||0)>0),o=i.length?Math.round(i.reduce((e,t)=>e+(t.tokenUsage||0),0)/i.length):null,c=s.filter(e=>e.skillTriggered).length,d=s.reduce((e,t)=>e+(t.toolCallCount||0),0);return{total:s.length,avgScore:r,avgTime:n,avgTokens:o,passRate:Math.round(t/s.length*100),triggered:c,toolCalls:d}}let r=O(e);if(!("pass"===e.status||"fail"===e.status||null!=r||e.sessionId))return t;let l=null!=r?+(r>=60):+("pass"===e.status);return{total:1,avgScore:r,avgTime:a(e.timeCost),avgTokens:"number"==typeof e.tokenUsage&&e.tokenUsage>0?e.tokenUsage:null,passRate:100*l,triggered:+!!e.skillTriggered,toolCalls:e.toolCallCount||0}}function _(e){return J({runs:e.flatMap(e=>Array.isArray(e.runs)&&e.runs.length>0?e.runs:"pass"===e.status||"fail"===e.status||null!=O(e)||e.sessionId?[e]:[])})}function U(e){if(!e)return[];let t=Array.isArray(e.runs)?e.runs:[];if(t.length>0)return t.map(O).filter(e=>null!=e);let a=O(e);return null==a?[]:[a]}function V(e,t){return`${e||"Skill"}:v${t??"?"}`}function H(e){if(!e)return{avgPct:null,scoredCount:0};let t=e.l2Scores?.scores;if(!t)return{avgPct:null,scoredCount:0};let a=0,s=0;for(let e of D.STATIC_EVAL_STANDARDS){let r=e.dimensionAliases.map(e=>t[e]).find(e=>"number"==typeof e&&Number.isFinite(e));"number"==typeof r&&(s++,a+=r)}return{avgPct:s>0?Math.round(a/s*20):null,scoredCount:s}}let q="skill-case-analysis";function K(){return(0,t.jsx)(a.Suspense,{fallback:null,children:(0,t.jsx)(Y,{})})}function Y(){var e;let o,c,h=(0,s.useRouter)(),f=(0,s.useSearchParams)(),{user:x}=(0,l.useAuth)(),[j]=(0,a.useState)(()=>f.get("skill")||""),[y]=(0,a.useState)(()=>f.get("version")||""),b=f.get("caseRunId")||"",[k,S]=(0,a.useState)(()=>{let e=f.get("view");return"trace"===e||"static"===e||"gray"===e||"overview"===e?e:"overview"});(0,a.useEffect)(()=>{if((f.get("view")||"overview")===k)return;let e=new URLSearchParams(Array.from(f.entries()));"overview"===k?e.delete("view"):e.set("view",k);let t=e.toString();h.replace(t?`?${t}`:"?",{scroll:!1})},[k]);let[N,w]=(0,a.useState)([]),[I,R]=(0,a.useState)(!1),[E,$]=(0,a.useState)(""),[A,M]=(0,a.useState)(null),[D,B]=(0,a.useState)([]),[F,O]=(0,a.useState)(!1),K=(0,a.useRef)([]);(0,a.useEffect)(()=>{K.current=D},[D]);let[Y,X]=(0,a.useState)(null),[G,Q]=(0,a.useState)(null),[ea,es]=(0,a.useState)(!1),[el,en]=(0,a.useState)(0),[eu,eh]=(0,a.useState)(0),[ep,ev]=(0,a.useState)(0),[ef,ex]=(0,a.useState)(f.get("taskId")||""),[ej,ey]=(0,a.useState)(f.get("taskId")||""),[eb,ek]=(0,a.useState)(!1),[eS,eN]=(0,a.useState)(!1),[ew,eI]=(0,a.useState)(()=>f.get("caseRunId")||""),[eC,eT]=(0,a.useState)(""),[eR,eE]=(0,a.useState)([]),e$=(0,a.useRef)(""),[eA,ez]=(0,a.useState)([]),[eM,eD]=(0,a.useState)([]),[eB,eF]=(0,a.useState)([]),[eL,eP]=(0,a.useState)(()=>T.presetEvaluators.filter(e=>"ready"===e.status).map(e=>e.id)),eW=(0,a.useMemo)(()=>N.find(e=>e.id===E)||null,[N,E]),eO=eW?.name||"";(0,a.useEffect)(()=>{if(!x){ez([]),eD([]);return}Promise.all([(0,n.apiFetch)(`/api/agent-datasets?user=${encodeURIComponent(x)}`).then(e=>e.json()).catch(()=>[]),(0,n.apiFetch)(`/api/user-evaluators?user=${encodeURIComponent(x)}`).then(e=>e.json()).catch(()=>[])]).then(([e,t])=>{Array.isArray(e)&&ez(e.map(e=>({id:String(e.id||""),name:String(e.name||""),cases:e.cases}))),Array.isArray(t)&&eD(t.map(e=>({id:String(e.id||""),name:String(e.name||"")})))}).catch(()=>{})},[x]);let[eJ,e_]=(0,a.useState)([]),eU=(0,a.useCallback)(async e=>{if(!x||!eO||null==A)return void e_([]);try{let t=new URLSearchParams({user:x,limit:"50",latestByCase:"1",scope:q,skillName:eO,skillVersion:String(A)}),a=e?.includeRunId||ew;a&&t.set("includeRunId",a);let s=await (0,n.apiFetch)(`/api/eval/trajectory/runs?${t.toString()}`),r=await s.json();Array.isArray(r?.runs)&&e_(r.runs.map(e=>({runId:String(e.runId||""),taskTitle:"string"==typeof e.taskTitle?e.taskTitle:void 0,traceCount:"number"==typeof e.traceCount?e.traceCount:void 0,doneCount:"number"==typeof e.doneCount?e.doneCount:void 0,runningCount:"number"==typeof e.runningCount?e.runningCount:void 0,createdAt:"string"==typeof e.createdAt?e.createdAt:void 0,skillName:"string"==typeof e.skillName?e.skillName:void 0,skillVersion:"number"==typeof e.skillVersion?e.skillVersion:null})))}catch{}},[x,eO,A,ew]);(0,a.useEffect)(()=>{eU()},[eU]);let eV=(0,a.useMemo)(()=>x&&E?`skill-eval:case-config:${x}:${E}:v${A??"all"}`:"",[x,E,A]);(0,a.useEffect)(()=>{if(eV)try{let e=localStorage.getItem(eV);if(!e)return;let t=JSON.parse(e);Array.isArray(t?.datasetIds)&&eF(t.datasetIds),Array.isArray(t?.evaluatorIds)&&t.evaluatorIds.length>0&&eP(t.evaluatorIds)}catch{}},[eV]);let eH=(0,a.useCallback)(e=>{if(eF(e),eV)try{localStorage.setItem(eV,JSON.stringify({datasetIds:e,evaluatorIds:eL}))}catch{}},[eV,eL]),eq=(0,a.useCallback)(e=>{if(eP(e),eV)try{localStorage.setItem(eV,JSON.stringify({datasetIds:eB,evaluatorIds:e}))}catch{}},[eV,eB]);(0,a.useEffect)(()=>{if(0===eA.length)return;let e=new Set(eA.map(e=>e.id)),t=eB.filter(t=>e.has(t));if(t.length!==eB.length&&(eF(t),eV))try{localStorage.setItem(eV,JSON.stringify({datasetIds:t,evaluatorIds:eL}))}catch{}},[eA,eB,eV,eL]);let eK=(0,a.useMemo)(()=>x&&E?`skill-eval:trace-eval-batch:${x}:${E}:v${A??"all"}`:"",[x,E,A]);(0,a.useEffect)(()=>{if(!eK){eI(""),eT(""),eE([]);return}try{if(b){eI(b),eT(""),eE([]);return}let e=localStorage.getItem(eK);if(!e){eI(""),eT(""),eE([]);return}let t=JSON.parse(e);eI(t?.id||""),eT(t?.title||""),eE(Array.isArray(t?.evaluators)?t.evaluators:[])}catch{eI(""),eT(""),eE([])}},[b,eK]),(0,a.useEffect)(()=>{let e=new URLSearchParams(Array.from(f.entries()));if((e.get("caseRunId")||"")===ew)return;ew?e.set("caseRunId",ew):e.delete("caseRunId");let t=e.toString();h.replace(t?`?${t}`:"?",{scroll:!1})},[ew]);let eY=(0,a.useMemo)(()=>{if(!ew||null==A)return ew;let e=eJ.find(e=>e.runId===ew);return e&&(e.traceCount||0)>0&&(e.skillName!==eW?.name||e.skillVersion!==A)?"":ew},[ew,eJ,eW?.name,A]),eX=(0,a.useMemo)(()=>{let e=eW?.name;return e?eJ.filter(t=>t.runId===eY||t.skillName===e&&(null==A||0===(t.traceCount||0)||t.skillVersion===A)):eJ},[eJ,eW?.name,A,eY]),eG=(0,a.useMemo)(()=>{if(!eY)return eC;let e=eX.find(e=>e.runId===eY);return e?.taskTitle||eC},[eX,eY,eC]),eQ=C(x,eY,5e3),eZ=(0,a.useMemo)(()=>[...eW?.versions||[]].sort((e,t)=>t.version-e.version),[eW]);(0,a.useEffect)(()=>{x&&(R(!0),(0,n.apiFetch)(`/api/skills?user=${encodeURIComponent(x)}`).then(e=>e.json()).then(e=>{Array.isArray(e)&&w(e)}).catch(()=>{}).finally(()=>R(!1)))},[x]),(0,a.useEffect)(()=>{if(0===N.length){E&&$(""),M(null);return}if(E&&N.some(e=>e.id===E))return;let e=function(e){try{let t=window.localStorage.getItem(ei(e));if(!t)return null;let a=JSON.parse(t);return a&&"object"==typeof a?a:null}catch{return null}}(x),t=function(e,t,a){if(t){let a=e.find(e=>e.name===t||e.id===t);if(a)return a}if(a?.skillId){let t=e.find(e=>e.id===a.skillId);if(t)return t}if(a?.skillName){let t=e.find(e=>e.name===a.skillName);if(t)return t}return null}(N,j,e)||N[0];$(t.id),M(eo(t,function(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}(y)??e?.version??null)),!ef&&e?.taskId&&e.skillName===t.name&&ex(e.taskId)},[j,y,ef,E,N,x]),(0,a.useEffect)(()=>{eW&&function(e,t){try{window.localStorage.setItem(ei(e),JSON.stringify(t))}catch{return}}(x,{skillId:eW.id,skillName:eW.name,version:A??null,taskId:ej||null})},[eW,A,ej,x]),(0,a.useEffect)(()=>{if(!eW)return void M(null);let e=eW.versions||[];null==A||e.some(e=>e.version===A)||M(eo(eW,A))},[eW,A]),(0,a.useEffect)(()=>{let e=new URLSearchParams(Array.from(f.entries())),t=eW?.name||"",a=null!=A?String(A):"",s=(e.get("skill")||"")===t,r=(e.get("version")||"")===a;if(s&&r)return;t?e.set("skill",t):e.delete("skill"),a?e.set("version",a):e.delete("version");let l=e.toString();h.replace(l?`?${l}`:"?",{scroll:!1})},[eW,A]);let e0=(0,a.useCallback)(async e=>{if(!x||!eW)return B([]),X(null),[];0===K.current.length&&O(!0);let t=new URLSearchParams({user:x,includeEvaluations:"0",skipAutoEvalReady:"1"}),a=e?.retries??0,s=e?.retryDelayMs??800,r=async e=>{let a=new URLSearchParams(t);a.set("_ts",String(e??Date.now()));let s=await (0,n.apiFetch)(`/api/observe/data?${a.toString()}`,{cache:"no-store"});if(!s.ok)throw Error(`Trace 列表加载失败: HTTP ${s.status}`);let r=await s.json();return Array.isArray(r)?r.filter(e=>(function(e,t,a){let s=t.trim();if(!s)return!1;let r=ec(e);return!!r?.name&&r.name===s&&(null==a||r.version===a)})(e,eW.name,A)).filter(e=>{var t;return!((t=e.agentName||e.agent)&&i.has(t.trim()))}).slice(0,200):[]};try{let e=[];for(let t=0;t<=a;t++)e=await r(Date.now()+t),B(e),X(e.length>0?new Date().toISOString():null),0===t&&O(!1),t<a&&await new Promise(e=>setTimeout(e,s));return e}catch{return B([]),X(null),[]}finally{O(!1)}},[eW,A,x]);(0,a.useEffect)(()=>{e0()},[e0,ep]),(0,a.useEffect)(()=>{if(0===D.length){ej&&ey("");return}if(ef&&D.some(e=>em(e)===ef)){ej!==ef&&ey(ef);return}ej&&D.some(e=>em(e)===ej)||ey(em(D[0]))},[ef,ej,D]);let e1=(0,a.useCallback)(async e=>{if(!x||!eW||null==A)return Q(null),null;es(!0);let t=e?.retries??5,a=e?.retryDelayMs??600,s=e?.expectedEvaluationId,r=async e=>{let t=new URLSearchParams({user:x,_ts:String(e??Date.now())}),a=await (0,n.apiFetch)(`/api/skills/${eW.id}/versions/${A}/evaluation-summary?${t.toString()}`,{cache:"no-store"});if(!a.ok)throw Error(`静态摘要加载失败: HTTP ${a.status}`);return a.json()};try{let e=null;for(let l=0;l<=t&&(e=await r(Date.now()+l),Q(e),s&&e.latest?.evaluationId!==s);l++)l<t&&await new Promise(e=>setTimeout(e,a));return e}catch{return Q(null),null}finally{es(!1)}},[eW,A,x]);(0,a.useEffect)(()=>{e1()},[e1,ep]);let[e5,e2]=(0,a.useState)(null),[e6,e4]=(0,a.useState)(!1),e3=(0,a.useCallback)(async e=>{if(!x||!eW)return e2(null),null;let t=eW.name;e4(!0);let a=e?.retries??5,s=e?.retryDelayMs??600,r=e?.expectedRunId,l=async e=>{let a=new URLSearchParams({user:x,_ts:String(e??Date.now())}),s=new URLSearchParams({user:x,latestOnly:"true",_ts:String(e??Date.now())});null!=A&&s.set("skillVersion",String(A));let[r,l]=await Promise.all([(0,n.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(t)}?${a.toString()}`,{cache:"no-store"}).then(e=>e.ok?e.json():{set:null}).catch(()=>({set:null})),(0,n.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(t)}/runs?${s.toString()}`,{cache:"no-store"}).then(e=>e.ok?e.json():{run:null}).catch(()=>({run:null}))]),i=Array.isArray(r?.set?.items)?r.set.items:[],o=i.filter(e=>e?.shouldTrigger===!0).length,c=l?.run??null;return{hasSet:!!r?.set,itemCount:i.length,positiveCount:o,latestRun:c&&"done"===c.status?{id:"string"==typeof c.id?c.id:void 0,passRate:Number(c.passRate??0),truePositiveRate:Number(c.truePositiveRate??0),falsePositiveRate:Number(c.falsePositiveRate??0),skillVersion:Number(c.skillVersion??0),ranAt:String(c.createdAt??"")}:null}};try{let e=null;for(let t=0;t<=a&&(e=await l(Date.now()+t),e2(e),r&&e.latestRun?.id!==r);t++)t<a&&await new Promise(e=>setTimeout(e,s));return e}catch{return e2(null),null}finally{e4(!1)}},[eW,A,x]);(0,a.useEffect)(()=>{e3()},[e3,ep]);let e8=(0,a.useCallback)(()=>{if(!eW)return;let e=null!=A?`?version=${A}`:"";h.push(`/skill-eval/trigger/${encodeURIComponent(eW.name)}${e}`)},[h,eW,A]),e7=(0,a.useCallback)(e=>{if(eN(!1),e$.current=e.evaluatorRunId,eI(e.evaluatorRunId),eT(e.taskTitle),eE(e.selectedEvaluators),eK)try{localStorage.setItem(eK,JSON.stringify({id:e.evaluatorRunId,title:e.taskTitle,evaluators:e.selectedEvaluators}))}catch{}eU({includeRunId:e.evaluatorRunId})},[eK,eU]),e9=(0,a.useCallback)(e=>{if(eI(e.runId),eT(e.taskTitle||""),eE([]),eK)try{localStorage.setItem(eK,JSON.stringify({id:e.runId,title:e.taskTitle||"",evaluators:[]}))}catch{}},[eK]);(0,a.useEffect)(()=>{if(e$.current){if(eX.some(e=>e.runId===e$.current))e$.current="";else if(ew===e$.current)return}if(!(ew&&eX.some(e=>e.runId===ew)))if(eX.length>0){let e=eX[0];e9({runId:e.runId,taskTitle:e.taskTitle})}else ew&&eI("")},[eX,e9,ew]);let te=(0,a.useCallback)(async e=>{let t={resultErrors:[],trajectoryErrors:new Map};if(!x||0===e.length)return t;let a=[];try{let t={user:x,taskIds:e};eB.length>0&&(t.datasetIds=eB),ew?t.evaluatorRunId=ew:t.evaluators=eL.length>0?eL:["preset-agent-task-completion"];let a=await (0,n.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e?.error||`结果评估入队失败 (HTTP ${a.status})`)}}catch(e){a.push(String(e instanceof Error?e.message:e))}let s=new Map,r=e.map(e=>(async()=>{try{let t=await (0,n.apiFetch)(`/api/observe/executions/${encodeURIComponent(e)}/analyze-match`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:x,mode:"compare"})});if(!t.ok){let a=await t.json().catch(()=>({})),r=a?.error||`analyze-match 失败 (HTTP ${t.status})`;s.set(e,String(r))}}catch(t){s.set(e,t instanceof Error?t.message:"网络/解析错误")}})());return await Promise.all(r),(a.length>0||s.size>0)&&console.warn("[skill-eval] batch analyze partial failures:",{resultErrors:a,trajectoryErrors:s}),await e0({retries:30,retryDelayMs:3e3}),{resultErrors:a,trajectoryErrors:s}},[x,e0,ew,eL,eB]),[tt,ta]=(0,a.useState)(null),[ts,tr]=(0,a.useState)(null),tl=(0,a.useCallback)(async()=>{if(!x)return ta(null),tr(null),{summary:null,meta:null,busy:!1};try{let e=await (0,n.apiFetch)(`/api/debug/grayscale-tasks?user=${encodeURIComponent(x)}&_ts=${Date.now()}`,{cache:"no-store"}),t=e.ok?await e.json():[],a=eW?.versions?.find(e=>e.version===A)?.id,s=Array.isArray(t)?eW?t.filter(e=>e?.configJson?.skillId===eW.id&&(!a||e?.configJson?.versionBId===a)):t:[],r=new URLSearchParams(window.location.search).get("task"),l=(r?s.find(e=>e.id===r):null)||[...s].sort((e,t)=>{let a=Number(!!t.activeRun)-Number(!!e.activeRun);if(0!==a)return a;let s=Number(W(t))-Number(W(e));return 0!==s?s:P(t)-P(e)})[0]||null,i={};(eW?.versions||[]).forEach(e=>{e.id&&(i[e.id]={version:e.version,skillName:eW?.name||"Skill"})});let o=l?function(e,t,a){let s,r,l,n=e.caseStatesJson||{},i="a"in n||"b"in n,o=i?[]:Object.values(n).filter(e=>!!e&&"object"==typeof e),c=i?J(n.a):_(o.map(e=>e.a).filter(e=>!!e)),u=i?J(n.b):_(o.map(e=>e.b).filter(e=>!!e)),h=i?U(n.a):o.flatMap(e=>U(e.a)),f=i?U(n.b):o.flatMap(e=>U(e.b));if(0===c.total&&0===u.total)return null;let x=i?Math.max(c.total,u.total):o.length,j=i?Math.min(c.total,u.total):o.filter(e=>J(e.a).total>0&&J(e.b).total>0).length,y=null!=c.avgScore&&null!=u.avgScore?u.avgScore-c.avgScore:null,b=null!=c.avgScore&&null!=u.avgScore&&c.avgScore>0?Number(((u.avgScore-c.avgScore)/c.avgScore*100).toFixed(1)):null,k=function(e,t){if(0===e.length||0===t.length)return null;let a=p(e),s=p(t);if(e.length<2||t.length<2)return+(a===s);let r=m(e,a),l=m(t,s),n=r/e.length,i=l/t.length,o=Math.sqrt(n+i);if(!Number.isFinite(o)||0===o)return+(a===s);let c=(s-a)/o,d=n**2/(e.length-1)+i**2/(t.length-1),u=function(e,t){if(!Number.isFinite(e)||!Number.isFinite(t)||t<=0)return NaN;if(0===e)return .5;let a=function(e,t,a){if(e<=0)return 0;if(e>=1)return 1;let s=Math.exp(g(t+.5)-g(t)-g(.5)+t*Math.log(e)+.5*Math.log(1-e));return e<(t+1)/(t+.5+2)?s*v(t,.5,e)/t:1-s*v(.5,t,1-e)/.5}(t/(t+e*e),t/2,0);return e>0?1-a/2:a/2}(Math.abs(c),d>0?(n+i)**2/d:e.length+t.length-2);return Number.isFinite(u)?Math.max(0,Math.min(1,Number((2*(1-u)).toFixed(6)))):null}(h,f),S=(e,s)=>{if("__NONE__"===e)return{label:"无 Skill",hasSkill:!1};if(e){let s=t?.[e];return{label:V(s?.skillName||a?.skillName,s?.version??a?.version),hasSkill:!0}}return"none"===s?{label:"无 Skill",hasSkill:!1}:{label:V(a?.skillName,a?.version),hasSkill:!0}},N=S(e.configJson?.versionAId,"none"),w=S(e.configJson?.versionBId,"has"),I=i?{"legacy-case":{a:n.a,b:n.b}}:n,C=(0,d.calculateAbScoring)(I,{repeatRounds:e.configJson?.repeatRounds}),T=e.configJson?.repeatRounds??C.repeatRounds??1,R=(s=new Set(["pass","fail","executed"]),r=0,l=e=>{if(!e||(Array.isArray(e.runs)&&e.runs.forEach(l),!e.completedAt||!s.has(e.status||"")))return;let t=new Date(e.completedAt).getTime();Number.isFinite(t)&&(r=Math.max(r,t))},"a"in I||"b"in I?(l(I.a),l(I.b)):Object.values(I).forEach(e=>{l(e.a),l(e.b)}),r>0?new Date(r).toISOString():void 0);return{taskId:e.id,taskName:e.taskName||"AB测评",createdAt:e.createdAt,latestResultAt:e.configJson?.latestResultAt,latestCompletedAt:R,runCount:e.configJson?.runCount||Math.max(c.total,u.total)||1,repeatRounds:T,sampleCount:x,completedPairs:j,a:c,b:u,aLabel:N.label,bLabel:w.label,aHasSkill:N.hasSkill,bHasSkill:w.hasSkill,aVersionId:e.configJson?.versionAId,bVersionId:e.configJson?.versionBId,delta:y,deltaPct:b,pValue:k,recommendation:null==y?"insufficient":y>=5?"up":y<=-5?"down":"flat",scoring:C}}(l,i,{skillName:eW?.name,version:A}):null;return tr(l),ta(o),{summary:o,meta:l,busy:!!l?.activeRun||L(l?.caseStatesJson)}}catch{return ta(null),tr(null),{summary:null,meta:null,busy:!1}}},[x,eW,A]);(0,a.useEffect)(()=>{let e=null,t=!1;return tl().then(a=>{!t&&a.busy&&(e=setInterval(()=>{tl()},2500))}),()=>{t=!0,e&&clearInterval(e)}},[tl,ep]);let tn=ed(D),ti=D.find(e=>em(e)===ej)||null,to=ed(ti?[ti]:[]),tc=tn.analyzed,td=H(G?.latest??null),tu=!!G?.latest,th=!!e5?.latestRun;tt&&tt.b.avgScore;let tp=ts?.caseStatesJson||{},tm=(Object.keys(tp).length>0&&Object.values(tp).every(e=>{let t=e=>e?.status==="executed"||e?.status==="pass";return t(e?.a)&&t(e?.b)})?tt?.scoring.totalScore:null)??null,tg=(eY?Array.from(eQ.values()):[]).filter(e=>"number"==typeof e.resultScore&&"number"==typeof e.trajScore),tv=tg.length>0,tf=[tv?{passed:Math.round(tg.reduce((e,t)=>e+(t.resultScore+t.trajScore)/2,0)/tg.length),total:100}:null,null!=td.avgPct?{passed:td.avgPct,total:100}:null,th&&e5&&e5.itemCount>0?{passed:Math.round(e5.latestRun.passRate*e5.itemCount),total:e5.itemCount}:null,null!=tm?{passed:tm,total:100}:null].filter(e=>!!e&&e.total>0),tx=tu||tv||th||null!=tm,tj={total:tf.reduce((e,t)=>e+t.total,0),passed:tf.reduce((e,t)=>e+t.passed,0)},ty=tx&&tj.total>0?Math.round(tj.passed/tj.total*100):null,tb=eW&&null!=A?`/skill-opt/${encodeURIComponent(eW.name)}/${A}`:"/skill-opt",tk=(0,a.useCallback)(e=>{ey(e),ex("")},[]),tS=(0,t.jsxs)("span",{className:"sa-top-title",children:["overview"===k?(0,t.jsx)("span",{children:"Skills 评测"}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>S("overview"),children:"Skills 评测"}),(0,t.jsx)("span",{children:"/"}),(0,t.jsx)("b",{children:"trace"===(e=k)?"用例分析":"static"===e?"静态合规分析":"gray"===e?"A/B测试":"综合分析"})]}),(0,t.jsx)("span",{className:"sa-top-dot",children:"·"}),(0,t.jsxs)("select",{className:"sa-top-select",value:E,onChange:e=>{let t=N.find(t=>t.id===e.target.value);$(e.target.value),M(t?eo(t):null),S("overview")},disabled:I,"aria-label":"切换 Skill",children:[0===N.length&&(0,t.jsx)("option",{value:"",children:"暂无 Skill"}),N.map(e=>(0,t.jsx)("option",{value:e.id,children:e.name},e.id))]}),(0,t.jsxs)("select",{className:"sa-top-select sa-top-select-version",value:A??"",onChange:e=>{M(Number(e.target.value))},disabled:!eW,"aria-label":"切换版本",children:[0===eZ.length&&eW&&(0,t.jsxs)("option",{value:eW.activeVersion??eW.version??0,children:["v",eW.activeVersion??eW.version??0]}),eZ.map(e=>(0,t.jsxs)("option",{value:e.version,children:["v",e.version,e.version===eW?.activeVersion?"(当前)":""]},e.version))]})]});return(0,t.jsxs)("div",{className:"sa-root",children:[(0,t.jsx)(r.AppTopBar,{title:tS,showDefaultActions:!1}),(0,t.jsxs)("main",{className:"sa-main",children:["overview"===k&&(0,t.jsx)(t.Fragment,{children:(0,t.jsx)(Z,{user:x,selectedSkill:eW,selectedVersion:A,traceEvaluationBatchId:eY,traceEvaluationBatchTitle:eG,health:ty,standards:tj,traces:D,traceAnalyzed:tc,traceCardUpdatedAt:Y,selectedTrace:ti,selectedTraceStats:to,staticSummary:G,staticLoading:ea,tracesLoading:F,hasAnyAnalysisResult:tx,graySummary:tt,grayTaskMeta:ts,triggerSummary:e5,triggerLoading:e6,onReloadTraces:e0,onReloadStatic:e1,onReloadTrigger:e3,onReloadGray:tl,onOpenTriggerEditor:e8,onOpen:S,smartRunBusy:eb,onSmartRunBusyChange:ek})}),"trace"===k&&(0,t.jsx)(ee,{skill:eW,version:A,user:x,traces:D,loading:F,prefillTraceId:ef,selectedTraceId:ej,onSelectedTraceChange:tk,onBack:()=>S("overview"),onReload:e0,onOptimize:()=>h.push(tb),onBatchAnalyze:te,traceEvaluationBatchId:eY,traceEvaluationBatchTitle:eG,onOpenEvalBatchDialog:()=>eN(!0),evalTaskOptions:eX,onSelectEvalBatch:e9,datasets:eA,selectedDatasetIds:eB,onSelectedDatasetIdsChange:eH,evaluatorOptions:[...T.presetEvaluators.filter(e=>"ready"===e.status).map(e=>({id:e.id,name:e.name})),...eM],selectedEvaluatorIds:eL,onSelectedEvaluatorIdsChange:eq},`tracepanel_${eW?.id||"noskill"}_${A??"all"}`),"static"===k&&(0,t.jsx)(et,{skill:eW,version:A,user:x,summary:G,loading:ea,onBack:()=>S("overview"),onReload:e1,onOptimize:()=>h.push(tb)}),"gray"===k&&(0,t.jsx)(er,{title:"A/B测试",description:"对照两个 Skill 版本或基础 Agent 的执行质量,定位新版本是否真正修复了关键失败类型。",primaryAction:"新建任务",secondaryAction:"历史任务",onBack:()=>S("overview"),onPrimary:()=>en(e=>e+1),onSecondary:()=>eh(e=>e+1),onOptimize:()=>h.push(tb),renderHeader:"none",children:(0,t.jsx)(z.GrayscaleEvaluation,{hifi:!0,newTaskTrigger:el,historyPanelTrigger:eu,pageTitle:"A/B测试",pageDescription:"对照两个 Skill 版本或基础 Agent 的执行质量,定位新版本是否真正修复了关键失败类型。",pageBadge:"调测分析",onBack:()=>S("overview"),onOptimize:()=>h.push(tb),parentSkillId:E,parentSkillVersion:A,skillSelectorSlot:(o=null!=A&&A===(eW?.activeVersion??eW?.version),c=(eW?.name||"SKL").replace(/[^a-zA-Z0-9]/g,"").slice(0,3).toUpperCase()||"SKL",(0,t.jsxs)("section",{className:"sa-selector sa-selector-hifi","aria-label":"选择skill",children:[(0,t.jsx)("div",{className:"sa-skill-icon",children:c}),(0,t.jsxs)("div",{className:"sa-skill-info",children:[(0,t.jsxs)("div",{className:"sa-skill-name-row",children:[(0,t.jsx)("span",{className:"sa-skill-name",children:eW?.name||"请选择 Skill"}),null!=A&&(0,t.jsxs)("span",{className:`sa-skill-version-chip ${o?"":"muted"}`,children:["v",A,o?" · 当前":""]}),null!=ty&&ty<60&&(0,t.jsxs)("span",{className:"sa-skill-warn-badge",children:[(0,t.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:(0,t.jsx)("path",{d:"M12 2L1 21h22L12 2z"})}),null!=ty&&ty<60&&ty>=40?"需关注":"急需优化"]})]}),(0,t.jsxs)("div",{className:"sa-skill-stats",children:[(0,t.jsxs)("span",{className:"stat",children:[(0,t.jsx)("strong",{children:D.length})," 条执行"]}),(0,t.jsxs)("span",{className:"stat",children:["最近 ",(0,t.jsx)("strong",{children:30})," 天"]}),(0,t.jsxs)("span",{className:"stat",children:[(0,t.jsx)("strong",{children:"4"})," 个评估器"]}),(0,t.jsxs)("span",{className:"stat",children:[(0,t.jsx)("strong",{children:"19"})," 项标准"]}),eW?.updatedAt&&(0,t.jsxs)("span",{className:"stat",children:["发布于 ",(0,t.jsx)("strong",{children:eg(eW.updatedAt)})]})]})]}),(0,t.jsxs)("div",{className:"sa-skill-switchers",children:[(0,t.jsxs)("select",{value:E,onChange:e=>{let t=N.find(t=>t.id===e.target.value);$(e.target.value),M(t?eo(t):null)},disabled:I,"aria-label":"切换 Skill",children:[0===N.length&&(0,t.jsx)("option",{value:"",children:"暂无 Skill"}),N.map(e=>(0,t.jsx)("option",{value:e.id,children:e.name},e.id))]}),(0,t.jsxs)("select",{value:A??"",onChange:e=>M(Number(e.target.value)),disabled:!eW,"aria-label":"切换版本",children:[0===eZ.length&&eW&&(0,t.jsxs)("option",{value:eW.activeVersion??eW.version??0,children:["v",eW.activeVersion??eW.version??0]}),eZ.map(e=>(0,t.jsxs)("option",{value:e.version,children:["v",e.version]},e.version))]})]})]}))})})]}),(0,t.jsx)(u.NewEvaluationBatchDialog,{open:eS,user:x||"",defaultTitle:eC||(eW?`${eW.name} trace 评测`:void 0),evaluators:eL,taskScope:q,taskSkillName:eW?.name,taskSkillVersion:A,onClose:()=>eN(!1),onCreated:e7})]})}let X={queued:0,running:0,done:0,failed:0};function G(e){let{user:t,skillName:s,skillVersion:r,taskType:l,enabled:i=!0}=e,[o,c]=(0,a.useState)(X);return(0,a.useEffect)(()=>{if(!i||!t)return void c(X);let e=!1,a=new URLSearchParams({user:t});s&&a.set("skill",s),null!=r&&a.set("version",String(r)),l&&a.set("taskType",l);let o=`/api/background-tasks?${a.toString()}`,d=async()=>{try{let t=await (0,n.apiFetch)(o,{cache:"no-store"});if(!t.ok)return;let a=await t.json();e||c(a?.counts??X)}catch{}};d();let u=setInterval(d,2500);return()=>{e=!0,clearInterval(u)}},[t,s,r,l,i]),o}function Q({counts:e,hint:a}){let{queued:s,running:r,done:l,failed:n}=e;return s+r+l+n===0?null:(0,t.jsxs)("div",{style:{display:"flex",gap:10,padding:"6px 10px",margin:"8px 0 0",background:"var(--background-secondary)",border:"1px solid var(--border)",borderRadius:6,fontSize:11,color:"var(--foreground-secondary)",alignItems:"center",flexWrap:"wrap"},title:a||"后台 opencode 任务状态(2.5s 刷新一次;近 5 分钟内完成的会短暂保留显示)",children:[s>0&&(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,t.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#ca8a04"}}),"排队 ",(0,t.jsx)("b",{style:{color:"var(--foreground)"},children:s})]}),r>0&&(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,t.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#2563eb"}}),"执行中 ",(0,t.jsx)("b",{style:{color:"var(--foreground)"},children:r})]}),l>0&&(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,t.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#16a34a"}}),"已完成 ",(0,t.jsx)("b",{style:{color:"var(--foreground)"},children:l})]}),n>0&&(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,t.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#dc2626"}}),"失败 ",(0,t.jsx)("b",{style:{color:"var(--foreground)"},children:n})]})]})}function Z({user:e,selectedSkill:s,selectedVersion:r,traceEvaluationBatchId:l,traceEvaluationBatchTitle:i,health:o,standards:d,traces:u,traceAnalyzed:h,traceCardUpdatedAt:p,selectedTrace:m,selectedTraceStats:g,staticSummary:v,staticLoading:f,tracesLoading:x,hasAnyAnalysisResult:j,graySummary:y,grayTaskMeta:b,triggerSummary:k,triggerLoading:S,onReloadTraces:N,onReloadStatic:w,onReloadTrigger:I,onReloadGray:T,onOpenTriggerEditor:R,onOpen:E,smartRunBusy:$,onSmartRunBusyChange:A}){var z;let M=G({user:e,skillName:s?.name,skillVersion:r,enabled:!!s}),P=G({user:e,skillName:s?.name,skillVersion:r,taskType:"trigger-eval",enabled:!!s}),W=H(v?.latest??null),O=!!v?.latest,J=ed(u).highDeviation,[_,U]=(0,a.useState)(null),q=m?em(m):"";g.totalSteps>0&&(g.matchedSteps,g.totalSteps);let K=!!l,Y=C(e,l,5e3),X=K?Array.from(Y.values()):[],Z=X.filter(e=>"number"==typeof e.resultScore&&"number"==typeof e.trajScore),ee=Z.length,et=X.length,ea=0===ee?null:Math.round(Z.reduce((e,t)=>e+(t.resultScore+t.trajScore)/2,0)/ee),es=K?null==ea?"待评测":ea>=60?"正常":"需关注":"未关联",er=ee>0,el=u.reduce((e,t)=>{var a;let s="number"==typeof t.answer_score?t.answer_score:"number"==typeof t.answerScore?t.answerScore:null,r="number"==typeof(a=t).trajectory_score?a.trajectory_score:"number"==typeof a.trajectoryScore?a.trajectoryScore:ep(a);if(null==s||null==r)return e;let l=t.execution_match?.matchedAt||t.timestamp||null;return l?e?new Date(l).getTime()>new Date(e).getTime()?l:e:l:e},null);(0,a.useEffect)(()=>{if(!e||!q)return void U(null);let t=!1;return(0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(e)}&taskId=${encodeURIComponent(q)}&limit=1`,{cache:"no-store"}).then(e=>e.ok?e.json():null).then(e=>{if(t)return;let a=(Array.isArray(e?.results)?e.results:[])[0];U(a?.updatedAt||null)}).catch(()=>{t||U(null)}),()=>{t=!0}},[q,p,e]);let en=er?_||p||el:null,ei=m?ec(m):null,eo=!!q&&!!ei?.name,eu=!!k?.hasSet,eg=!!k?.latestRun,ef=eu&&(k?.itemCount??0)>0,ex=!!y&&null!=y.b.avgScore,ej=b?.caseStatesJson||{},ey=(Object.keys(ej).length>0&&Object.values(ej).every(e=>{let t=e=>e?.status==="executed"||e?.status==="pass";return t(e?.a)&&t(e?.b)})?y?.scoring.totalScore:null)??null,eb=(b?.configJson?.checkedCaseIds??b?.configJson?.selectedCaseIds??[]).length,ek=!!b?.activeRun||L(b?.caseStatesJson),eS=eb>0&&!ek,eN=!!b?.id&&eS,ew=!!s&&null!=r,eI=[{key:"trace",name:"用例分析",hasResult:er,canRun:eo,runHint:eo?"当前 Trace 可分析":0===u.length?"暂无 Trace 可分析":m?ei?.name?"待分析 · 需先进入详情页完成评测":"当前 Trace 未加载主 Skill,无法分析":"需先选择 Trace"},{key:"static",name:"静态合规",hasResult:O,canRun:ew,runHint:ew?"可启动静态扫描":"待分析 · 需先选择 Skill 与版本"},{key:"trigger",name:"触发分析",hasResult:eg,canRun:ef,runHint:eu?ef?"触发集已准备 · 可立即评测":"触发集为空 · 需先补充数据":"未配置 · 需先准备触发集"},{key:"gray",name:"A/B测试",hasResult:null!=ey,canRun:eN,runHint:eN?"开始执行可点击":ek?"执行中 · 当前 A/B 任务不可重复启动":0===eb?"未配置 · 需先在详情页选择样本":"未配置 · 需先保存 A/B 任务"}],eC=eI.filter(e=>e.hasResult).length,eT=eI.length,eR=s&&null!=r?`/skill-opt/${encodeURIComponent(s.name)}/${r}`:"/skill-opt",eE=j&&null!=o?eC<eT?"warn":o>=80?"ok":o>=60?"warn":"err":"idle",e$=j?eC<eT?`数据不足 \xb7 仅 ${eC}/${eT} 评估器有结果`:o>=80?"健康":o>=60?"需关注":"急需优化":"尚未运行任何评估",[eA,ez]=(0,a.useState)(null),[eM,eD]=(0,a.useState)("idle"),[eB,eF]=(0,a.useState)("idle"),eL=eI.filter(e=>e.canRun).map(e=>e.key),[eP,eW]=(0,a.useState)(eL);(0,a.useEffect)(()=>{eW(eL)},[eL.join("|")]);let eO=(0,a.useCallback)(e=>{if(!s)return null;let t=e?.traces??u,a=e?.staticSummary??v,l=e?.triggerSummary??k,n=e?.graySummary??y,i=e?.grayTaskMeta??b,c=e?.traceBusy??t.some(e=>e.is_evaluating),d=e?.grayBusy??(!!i?.activeRun||L(i?.caseStatesJson)),h=ed(t),p=H(a?.latest??null),g=!!l?.hasSet,f=!!l?.latestRun,x=t.find(e=>em(e)===q)||m,j=(i?.configJson?.checkedCaseIds??i?.configJson?.selectedCaseIds??[]).length,S=K||!!q&&!!(x?ec(x)?.name:null),N=[];n&&null!=n.scoring.totalScore||N.push("ab"),null==ea&&N.push("trace"),f||N.push("recall"),null==p.avgPct&&N.push("static");let w=(e,t,a,s=!1)=>a?"running":s?"failed":e?t?"done":"pending":"unconfigured";return{skillName:s.name,version:r,overall:{weightedScore:o,coveredCount:eT-N.length,totalCount:eT,missingDimensions:N,selectedDimensionsThisRun:(e?.selectedDimensionsThisRun??[]).map(e=>"gray"===e?"ab":"trigger"===e?"recall":e)},ab:{configured:!!i?.id&&j>0,hasResult:!!n&&null!=n.scoring.totalScore,status:w(!!i?.id&&j>0,!!n&&null!=n.scoring.totalScore,d),scoreA:n?.a.avgScore??null,scoreB:n?.scoring.totalScore??null,finalScore:n?.scoring.totalScore??null,decisionLabel:n?.scoring.decisionLabel??null,capabilityDeltaPp:n?.scoring.capability.deltaPp??null,tokenDeltaPct:n?.scoring.cost.deltaTokenPct??null,invokeRate:n?.scoring.stability.invokeRate??null,variance:n?.scoring.stability.variance??null,delta:n?.delta??null,pValue:n?.pValue??null,sampleCount:n?.sampleCount??null,recommendation:n?.recommendation??null},trace:{configured:S,hasResult:null!=ea,status:w(S,null!=ea,c),score:ea,fullyEvaluatedCount:ee,totalTraceCount:K?et:t.length,highDeviationCount:h.highDeviation},recall:{configured:g,hasResult:f,status:w(g,f,!1),score:f?Math.round((l?.latestRun?.passRate??0)*100):null,passRate:l?.latestRun?.passRate??null,truePositiveRate:l?.latestRun?.truePositiveRate??null,falsePositiveRate:l?.latestRun?.falsePositiveRate??null,itemCount:l?.itemCount??0,positiveCount:l?.positiveCount??0},static:{configured:!!s&&null!=r,hasResult:null!=p.avgPct,status:w(!!s&&null!=r,null!=p.avgPct,!1),score:p.avgPct??null,passedCount:p.scoredCount,totalCount:D.STATIC_EVAL_STANDARDS.length,issueCount:a?.latest?.issuesCount??0}}},[y,b,o,ee,ea,et,K,s,m,q,r,d.passed,d.total,v,eT,u,k]),eJ=(0,a.useMemo)(()=>eO(),[eO]),e_=(0,a.useMemo)(()=>eJ?JSON.stringify(eJ):"",[eJ]),eU=(0,a.useRef)(""),eV=(0,a.useRef)(0),eH=(0,a.useCallback)(async(t,a)=>{if(!t||!e||!s?.name)return ez(null),eD("idle"),null;let r=++eV.current;eD("loading");try{let l=await (0,n.apiFetch)(`/api/skills/by-name/${encodeURIComponent(s.name)}/analysis-diagnosis`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e,snapshot:t})}),i=await l.json().catch(()=>({}));if(!l.ok||!i?.diagnosis)throw Error(i?.error||"诊断生成失败");let o=i.diagnosis;return r===eV.current&&(ez(o),eD("ready")),"smart-run"===a&&"fallback"===o.mode&&B.toast.warning("AI 诊断暂时不可用,已回退为基础诊断"),o}catch{let e=c(t);return r===eV.current&&(ez(e),eD("ready")),"smart-run"===a&&B.toast.warning("AI 诊断暂时不可用,已回退为基础诊断"),e}},[s?.name,e]);(0,a.useEffect)(()=>{!eJ||$||"idle"!==eB||e_!==eU.current&&(eU.current=e_,eV.current+=1,ez(c(eJ)),eD("ready"))},[e_,eJ,$,eB]);let eq=eA??(eJ?c(eJ):{problem:"还没有任何分析结果,当前页面先展示基础信息和可执行入口。",suggestion:"优先补齐可运行维度,再查看更稳定的诊断结论。",mode:"fallback"}),eK=async()=>{let t=b?.configJson?.checkedCaseIds??b?.configJson?.selectedCaseIds??[];if(!e||!b?.id||0===t.length)throw Error("A/B 测试当前缺少可执行样本或任务信息。");let a=await (0,n.apiFetch)(`/api/debug/grayscale-tasks/${encodeURIComponent(b.id)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e,action:"start",caseIds:t,evaluatorId:b.configJson?.evaluatorId,agentMaxConcurrency:b.configJson?.agentMaxConcurrency})}),s=await a.json().catch(()=>({}));if(!a.ok)throw Error(s.error||"A/B 测试启动失败")},eY=async()=>{if(!e||!q||!ei?.name)throw Error("用例分析当前缺少可执行 Trace 或主 Skill 信息。");let t=(async()=>{let t=await (0,n.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e,taskIds:[q],evaluators:["preset-agent-task-completion"]})}),a=await t.json().catch(()=>({}));if(!t.ok||!a.success)throw Error(a.error||"启动结果评估失败")})(),a=(async()=>{let t=await (0,n.apiFetch)(`/api/observe/executions/${encodeURIComponent(q)}/analyze-match`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e,mode:"compare"})}),a=await t.json().catch(()=>({}));if(!t.ok||!a.success)throw Error(a.error||"流程图比对分析失败")})(),s=await Promise.allSettled([t,a]),r=s.filter(e=>"rejected"===e.status);if(r.length===s.length)throw Error(r[0]?.reason instanceof Error?r[0].reason.message:"用例分析启动失败");if(r.length>0)throw Error(r.map(e=>e.reason instanceof Error?e.reason.message:"部分流程启动失败").join(";"));await N({retries:5,retryDelayMs:900})},eX=async()=>{if(!e||!s?.name)throw Error("触发分析当前缺少 Skill 信息。");let t=await (0,n.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(s.name)}/run`,{method:"POST",body:JSON.stringify({user:e,runsPerQuery:1,triggerThreshold:.5,timeoutMs:3e4,concurrency:5})}),a=await t.json().catch(()=>({}));if(!t.ok)throw Error(a.error||"触发分析启动失败");await I({expectedRunId:"string"==typeof a?.run?.id?a.run.id:void 0})},eG=async()=>{if(!e||!s?.id||null==r)throw Error("静态合规当前缺少 Skill 或版本信息。");let t=await (0,n.apiFetch)(`/api/skills/${encodeURIComponent(s.id)}/versions/${r}/evaluate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e})}),a=await t.json().catch(()=>({}));if(!t.ok)throw Error(a.error||"静态合规启动失败");await w({expectedEvaluationId:"string"==typeof a.evaluationId?a.evaluationId:void 0})},eQ=async e=>{let t=u,a=v,s=k,r=y,l=b,n=ek,i=u.some(e=>e.is_evaluating);e.includes("static")&&(a=await w({retries:1,retryDelayMs:800})??a),e.includes("trigger")&&(s=await I({retries:1,retryDelayMs:800})??s);let o=e.includes("gray")||e.includes("trace"),c=Date.now()+9e4,d=!1;for(;o&&Date.now()<c;){let a=!1;if(e.includes("gray")){let e=await T();r=e.summary,l=e.meta,n=e.busy,a=a||n}if(e.includes("trace")){let e=(t=await N({retries:1,retryDelayMs:800})).find(e=>em(e)===q),s=e?"number"==typeof e.answer_score?e.answer_score:e.answerScore:null,r=!!e&&!e.is_evaluating&&eh(e);r&&null!=s&&ep(e),i=!r,a=a||i}if(!a)break;await new Promise(e=>setTimeout(e,1500))}return o&&(n||i)&&(d=!0),{traces:t,staticSummary:a,triggerSummary:s,graySummary:r,grayTaskMeta:l,grayBusy:n,traceBusy:i,timedOut:d}},eZ=async()=>{let e=eI.filter(e=>e.canRun&&eP.includes(e.key));if(0===e.length)return void B.toast.error("当前没有可一键测试的维度。");A(!0),eF("starting");try{let t=await Promise.allSettled(e.map(async e=>"gray"===e.key?eK():"trace"===e.key?eY():"trigger"===e.key?eX():"static"===e.key?eG():void 0)),a=t.flatMap((t,a)=>"rejected"===t.status?[`${e[a].name}:${t.reason instanceof Error?t.reason.message:"启动失败"}`]:[]),s=t.flatMap((t,a)=>"fulfilled"===t.status?[e[a].key]:[]);a.length>0&&B.toast.error(a.join(";")),s.length>0&&B.toast.success(`已启动 ${s.length} 个测试任务`),eF(s.some(e=>"gray"===e||"trace"===e)?"running":"refreshing");let r=await eQ(s);r.timedOut&&B.toast.warning("部分后台测试仍在运行,已先刷新当前诊断。"),eF("diagnosing");let l=eO({traces:r.traces,staticSummary:r.staticSummary,triggerSummary:r.triggerSummary,graySummary:r.graySummary,grayTaskMeta:r.grayTaskMeta,grayBusy:r.grayBusy,traceBusy:r.traceBusy,selectedDimensionsThisRun:s});l&&(eU.current=JSON.stringify(l),await eH(l,"smart-run"))}finally{eF("idle"),A(!1)}},e0=e=>{eW(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},e1=eP.length,e5=!!q&&u.some(e=>em(e)===q&&e.is_evaluating),e2=$||"idle"!==eB||ek||e5,e6="starting"===eB?"启动中...":"running"===eB?"测试进行中...":"refreshing"===eB?"刷新结果中...":"diagnosing"===eB?"更新诊断中...":e2?"测试进行中...":`一键测试 ${e1} 项`,e4=O&&null!=W.avgPct?W.avgPct>=80?"正常":"需关注":"待分析",e3=O&&v?.latest?ev(v.latest.ranAt):"待扫描",e8=y?"insufficient"===y.scoring.decision?"样本不足":y.scoring.decisionLabel:"未配置",e7=y?.delta!=null?`${y.delta>0?"+":""}${y.delta}`:"--",e9=y?.scoring.totalScore!=null?`总分 ${y.scoring.totalScore}`:y?.b.avgScore!=null?`B 均分 ${y.b.avgScore}`:"待运行",te=y?`${y.completedPairs||Math.min(y.a.total,y.b.total)}/${y.sampleCount||Math.max(y.a.total,y.b.total)} 样本`:"暂无样本",tt=y?`${y.repeatRounds} 轮`:"未运行",ta=y?.latestCompletedAt||y?.latestResultAt?ev(y.latestCompletedAt||y.latestResultAt):"未运行",ts=s&&null!=r?V(s.name,r):"B 版本",tr=y?`${y.aLabel} vs ${y.bLabel}`:`无 Skill vs ${ts}`,tl=y?null==(z=y.pValue)?"待计算":z<.01?"p < 0.01 ✓✓":z<.05?"p < 0.05 ✓":`p = ${z.toFixed(3)}`:"待计算",tn="loading"===eM?"正在更新诊断":"llm"===eq.mode?`由 ${eq.modelLabel||"当前评测模型"} 生成`:"基础诊断";return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("section",{className:"sa-hero",children:[(0,t.jsxs)("div",{className:`sa-hero-score ${eE}`,children:[(0,t.jsxs)("div",{className:"sa-hero-score-eyebrow",children:[(0,t.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M7 1L13 12H1z"}),(0,t.jsx)("path",{d:"M7 5.5v3"}),(0,t.jsx)("circle",{cx:"7",cy:"10.5",r:".5",fill:"currentColor"})]}),(0,t.jsx)(F.Term,{id:"health-score",label:"综合健康分 · 置信加权"})]}),(0,t.jsxs)("div",{className:"sa-hero-score-body",children:[(0,t.jsx)("div",{className:"sa-hero-score-num",children:null==o?"--":o}),(0,t.jsx)("div",{className:"sa-hero-score-unit",children:"/ 100"}),(0,t.jsx)("div",{className:"sa-hero-score-tier",children:e$})]}),(0,t.jsxs)("div",{className:"sa-hero-coverage",style:{marginTop:14},children:[(0,t.jsxs)("div",{className:"sa-hero-coverage-label",children:[(0,t.jsx)("span",{children:(0,t.jsx)(F.Term,{id:"eval-coverage",label:"评估覆盖度"})}),(0,t.jsxs)("b",{children:[eC," / ",eT," 维 · ",Math.round(eC/eT*100),"%"]})]}),(0,t.jsxs)("div",{className:"sa-hero-coverage-bar",children:[(0,t.jsx)("div",{className:`sa-hero-coverage-seg${ex?" on":""}`,style:{background:"var(--sa-warning)"},title:"A/B 测试(权重 40%)"}),(0,t.jsx)("div",{className:`sa-hero-coverage-seg${"待分析"!=(er?J>0?"需关注":"正常":"待分析")?" on":""}`,style:{background:"var(--sa-success)"},title:"用例分析(权重 30%)"}),(0,t.jsx)("div",{className:`sa-hero-coverage-seg${eg?" on":""}`,style:{background:"var(--sa-info, #6366f1)"},title:eg?`触发分析 \xb7 已评测(权重 20%)`:eu?"触发分析 · 待评测(权重 20%)":"触发分析 · 未配置(权重 20%)"}),(0,t.jsx)("div",{className:`sa-hero-coverage-seg${"待分析"!==e4?" on":""}`,style:{background:"var(--sa-purple)"},title:"静态合规(权重 10%)"})]})]})]}),(0,t.jsxs)("div",{className:"sa-hero-narr",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"sa-hero-narr-eyebrow",children:[(0,t.jsx)(F.Term,{id:"one-line-diagnosis",label:"一句话诊断"}),(0,t.jsx)("span",{className:"sa-hero-narr-ai",children:"loading"===eM||"llm"===eq.mode?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 14 14",fill:"currentColor",children:(0,t.jsx)("path",{d:"M8 1L1 8h5l-1 5 7-7h-5z"})}),"AI"]}):(0,t.jsx)(t.Fragment,{children:"基础"})}),"· ",tn]}),(0,t.jsxs)("div",{className:"sa-hero-narr-headline sa-hero-narr-split",children:[(0,t.jsxs)("span",{className:"sa-hero-narr-line sa-hero-narr-problem",children:[(0,t.jsx)("span",{className:"lbl",children:"问题"}),(0,t.jsx)("span",{children:eq.problem})]}),(0,t.jsxs)("span",{className:"sa-hero-narr-line sa-hero-narr-suggest",children:[(0,t.jsx)("span",{className:"lbl",children:"建议"}),(0,t.jsx)("span",{children:eq.suggestion})]})]})]}),(0,t.jsxs)("div",{className:"sa-hero-formula",children:[(0,t.jsx)("div",{className:"sa-hero-formula-label",children:"置信加权 · 权重 A/B 40% · 用例 30% · 触发 20% · 静态 10%(未跑维度不进分母)"}),"score = Σ(分 × 权重) ÷ Σ(已跑权重)",(0,t.jsx)("br",{})," = ",(0,t.jsx)("strong",{children:null==o?"—":o})]})]}),(0,t.jsxs)("div",{className:"sa-hero-cta",children:[(0,t.jsxs)("div",{className:"sa-hero-cta-eyebrow",children:[(0,t.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"currentColor",children:(0,t.jsx)("path",{d:"M8 1L1 8h5l-1 5 7-7h-5z"})}),(0,t.jsx)(F.Term,{id:"smart-run",label:"Smart Run"})]}),(0,t.jsxs)("div",{className:"sa-hero-cta-title",children:[(0,t.jsx)("span",{children:"选择要一键测试的维度"}),(0,t.jsx)("a",{className:"sa-cta-toggleall",onClick:()=>{eW(e=>e.length===eL.length?[]:eL)},children:e1===eL.length&&eL.length>0?"全不选":"全选 / 反选"})]}),(0,t.jsxs)("div",{className:"sa-cta-list",children:[(0,t.jsxs)("label",{className:`sa-cta-row${!ew?" disabled":""}`,title:ew?"可触发详情页“重新分析”":"需先选择 Skill 与版本",children:[(0,t.jsx)("input",{type:"checkbox",checked:eP.includes("static"),onChange:()=>e0("static"),disabled:!ew}),(0,t.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-purple)"}}),(0,t.jsxs)("span",{className:"nm",children:[(0,t.jsx)(F.Term,{id:"static-compliance",label:"静态合规"})," ",(0,t.jsx)("span",{className:"wpct",children:"10%"}),!ew&&(0,t.jsx)("span",{className:"cfg-tag",children:"待扫描"})]}),ew?(0,t.jsx)("span",{className:"ago",children:e3}):(0,t.jsx)("a",{className:"cfg-link",href:"#",onClick:e=>{e.preventDefault(),E("static")},children:"前往评测 →"})]}),(0,t.jsxs)("label",{className:`sa-cta-row${!ef?" disabled":""}`,title:eu?(k?.itemCount??0)===0?"触发集为空,需先补充触发分析数据":"触发集已准备,可触发详情页“立即评测/立即复测”":"尚未配置触发集,需先到编辑器里起草或手填",children:[(0,t.jsx)("input",{type:"checkbox",checked:eP.includes("trigger"),onChange:()=>e0("trigger"),disabled:!ef}),(0,t.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-info, #6366f1)"}}),(0,t.jsxs)("span",{className:"nm",children:[(0,t.jsx)(F.Term,{id:"trigger-analysis",label:"触发分析"})," ",(0,t.jsx)("span",{className:"wpct",children:"20%"}),!eu&&(0,t.jsx)("span",{className:"cfg-tag",children:"未配置"}),eu&&!eg&&(0,t.jsx)("span",{className:"cfg-tag",children:"待评测"}),eg&&k?.latestRun&&(0,t.jsxs)("span",{className:"ago",children:[Math.round(100*k.latestRun.passRate),"% 通过"]})]}),(0,t.jsx)("a",{className:"cfg-link",href:"#",onClick:e=>{e.preventDefault(),R()},children:eu?"打开编辑器 →":"前往配置 →"})]}),(0,t.jsxs)("label",{className:`sa-cta-row${!eo?" disabled":""}`,title:eo?"当前 Trace 可触发详情页“分析当前 Trace”":0===u.length?"暂无 Trace 可分析":"当前 Trace 缺少主 Skill 信息,详情页按钮不可点击",children:[(0,t.jsx)("input",{type:"checkbox",checked:eP.includes("trace"),onChange:()=>e0("trace"),disabled:!eo}),(0,t.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-success)"}}),(0,t.jsxs)("span",{className:"nm",children:[(0,t.jsx)(F.Term,{id:"case-analysis",label:"用例分析"})," ",(0,t.jsx)("span",{className:"wpct",children:"30%"}),!eo&&(0,t.jsx)("span",{className:"cfg-tag",children:"待分析"})]}),eo?(0,t.jsx)("span",{className:"ago",children:"测试当前 Trace"}):(0,t.jsx)("a",{className:"cfg-link",href:"#",onClick:e=>{e.preventDefault(),E("trace")},children:"前往评测 →"})]}),(0,t.jsxs)("label",{className:`sa-cta-row sa-cta-row-ab${!eN?" disabled":""}`,title:eN?`A/B 版本:${tr},可触发详情页“开始执行”`:ek?"当前 A/B 任务执行中,详情页“开始执行”按钮不可点击":0===eb?"当前 A/B 任务缺少选中样本,需先进入详情页选择样本":"当前 A/B 任务尚未保存,需先进入详情页完成配置",children:[(0,t.jsx)("input",{type:"checkbox",checked:eP.includes("gray"),onChange:()=>e0("gray"),disabled:!eN}),(0,t.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-warning)"}}),(0,t.jsxs)("span",{className:"nm",children:[(0,t.jsxs)("span",{className:"sa-cta-mainline",children:[(0,t.jsx)(F.Term,{id:"ab-test",label:"A/B 测试"})," ",(0,t.jsx)("span",{className:"wpct",children:"40%"}),!eN&&(0,t.jsx)("span",{className:"cfg-tag",children:"未配置"})]}),(0,t.jsxs)("span",{className:"sa-cta-subline",children:[(0,t.jsx)("b",{children:tr}),ex&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:e8}),(0,t.jsx)("span",{children:e9}),(0,t.jsx)("span",{children:e7}),(0,t.jsx)("span",{children:tl}),(0,t.jsx)("span",{children:te}),(0,t.jsx)("span",{children:tt})]})]})]}),eN?(0,t.jsx)("span",{className:"ago",children:ta}):(0,t.jsx)("a",{className:"cfg-link",href:"#",onClick:e=>{e.preventDefault(),E("gray")},children:"前往配置 →"})]})]}),(0,t.jsxs)("div",{className:"sa-hero-cta-meta",children:[(0,t.jsxs)("span",{children:[(0,t.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:[(0,t.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,t.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),"预计 ",e1>0?`${5*e1} 分钟`:"—"]}),(0,t.jsxs)("span",{children:["已选 ",e1," / ",eL.length||0," 可运行项"]})]}),(0,t.jsxs)("div",{className:"sa-cta-actions",children:[(0,t.jsxs)("button",{className:"sa-hero-cta-btn",onClick:()=>{eZ()},disabled:0===e1||e2,children:[(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"currentColor",children:(0,t.jsx)("path",{d:"M3 1.5v11l9-5.5z"})}),e6]}),(0,t.jsxs)("a",{href:eR,className:"sa-hero-cta-btn-ghost",children:["前往 Skill 优化器",(0,t.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})})]})]})]})]}),(0,t.jsxs)("div",{className:"sa-section-head",children:[(0,t.jsxs)("h2",{children:[(0,t.jsx)(F.Term,{id:"four-dim-eval",label:"4 维评估能力"})," ",(0,t.jsxs)("span",{className:"count",children:[eC," / ",eT," 已配置 · 按前序关系排序"]})]}),(0,t.jsx)("span",{className:"head-meta",children:"点击卡片进入详情 · 百分制分数"})]}),(0,t.jsxs)("section",{className:"sa-cards",children:[(0,t.jsxs)("div",{className:"sa-card k-static",onClick:()=>E("static"),children:[(0,t.jsxs)("div",{className:"sa-card-head",children:[(0,t.jsx)("span",{className:"sa-card-icon",children:(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M3 2.5h7l3 3v8a.5.5 0 0 1-.5.5h-9.5a.5.5 0 0 1-.5-.5v-10.5a.5.5 0 0 1 .5-.5z"}),(0,t.jsx)("path",{d:"M9.5 2.5v3h3"}),(0,t.jsx)("path",{d:"M5.5 9l1.5 1.5 3-3"})]})}),(0,t.jsxs)("div",{className:"sa-card-title",children:[(0,t.jsx)("span",{className:"t-row",children:"静态合规"}),(0,t.jsx)("small",{children:"写得规范吗?能被正确加载吗?"})]}),(0,t.jsx)("span",{className:`sa-card-status ${"正常"===e4?"ok":"需关注"===e4?"warn":"neutral"}`,children:e4})]}),(0,t.jsxs)("div",{className:"sa-card-score",children:[(0,t.jsx)("span",{className:O&&null!=W.avgPct?"sa-card-score-num":"sa-card-score-empty",children:O&&null!=W.avgPct?W.avgPct:"--"}),(0,t.jsx)("span",{className:"sa-card-score-unit",children:O&&null!=W.avgPct?"/ 100":"待分析"})]}),(0,t.jsxs)("div",{className:"sa-card-stats",children:[(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"已评估维度"}),(0,t.jsx)("div",{className:"sa-card-stat-val",children:O?`${W.scoredCount} / ${D.STATIC_EVAL_STANDARDS.length} 项`:"尚未评估"})]}),(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"未评估"}),(0,t.jsx)("div",{className:"sa-card-stat-val",children:O?D.STATIC_EVAL_STANDARDS.length-W.scoredCount>0?`${D.STATIC_EVAL_STANDARDS.length-W.scoredCount} 项`:"无":"—"})]})]}),ew?(0,t.jsxs)("div",{className:"sa-card-foot",children:[(0,t.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,t.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,t.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,t.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),O&&v?.latest?ev(v.latest.ranAt):"点击进入静态评估详情"]}),(0,t.jsx)("a",{className:"sa-card-foot-link",onClick:e=>{e.preventDefault(),E("static")},children:"查看详情 →"})]}):(0,t.jsxs)("button",{className:"sa-card-empty-cta",onClick:e=>{e.stopPropagation(),E("static")},children:[(0,t.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,t.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"打开评测页扫描"]})]}),(0,t.jsxs)("div",{className:"sa-card k-trigger",onClick:e=>{e.target.closest("a,button")||R()},children:[(0,t.jsxs)("div",{className:"sa-card-head",children:[(0,t.jsx)("span",{className:"sa-card-icon",children:(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("circle",{cx:"7",cy:"7",r:"4.5"}),(0,t.jsx)("path",{d:"M10.5 10.5 13.5 13.5"}),(0,t.jsx)("path",{d:"M5 7l1.5 1.5L9 6"})]})}),(0,t.jsxs)("div",{className:"sa-card-title",children:[(0,t.jsx)("span",{className:"t-row",children:"触发分析"}),(0,t.jsx)("small",{children:"该触发的时候,触发了吗?"})]}),eg&&k?.latestRun?(0,t.jsx)("span",{className:`sa-card-status ${k.latestRun.passRate>=.8?"ok":k.latestRun.passRate>=.6?"warn":"err"}`,children:k.latestRun.passRate>=.8?"正常":k.latestRun.passRate>=.6?"需关注":"急需优化"}):eu?(0,t.jsx)("span",{className:"sa-card-status warn",children:"待评测"}):(0,t.jsx)("span",{className:"sa-card-status warn",children:"未配置"})]}),(0,t.jsx)(Q,{counts:P,hint:"触发分析评测的实时调度状态 (taskType=trigger-eval)"}),eg&&k?.latestRun?(0,t.jsxs)("div",{className:"sa-card-score",children:[(0,t.jsx)("span",{className:"sa-card-score-num",children:Math.round(100*k.latestRun.passRate)}),(0,t.jsx)("span",{className:"sa-card-score-unit",children:"/ 100"})]}):(0,t.jsx)("div",{className:"sa-card-score sa-card-score-placeholder",children:(0,t.jsx)("span",{className:"sa-card-score-placeholder-text",children:eu?"待评测":"尚未配置"})}),(0,t.jsxs)("div",{className:"sa-card-stats",children:[(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"触发集"}),(0,t.jsx)("div",{className:`sa-card-stat-val${eu?"":" muted"}`,children:eu?`${k?.itemCount??0} 条 \xb7 正例 ${k?.positiveCount??0}`:"未创建"})]}),(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:eg?"TPR / FPR":"影响"}),(0,t.jsx)("div",{className:`sa-card-stat-val${eg?"":" muted"}`,children:eg&&k?.latestRun?`${Math.round(100*k.latestRun.truePositiveRate)}% / ${Math.round(100*k.latestRun.falsePositiveRate)}%`:"不计入总分 (-20%)"})]})]}),eg&&k?.latestRun?(0,t.jsxs)("div",{className:"sa-card-foot",children:[(0,t.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,t.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,t.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,t.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),ev(k.latestRun.ranAt)," · v",k.latestRun.skillVersion]}),(0,t.jsx)("a",{className:"sa-card-foot-link",onClick:e=>{e.preventDefault(),R()},href:"#",children:"查看详情 →"})]}):(0,t.jsxs)("button",{className:"sa-card-empty-cta",onClick:e=>{e.stopPropagation(),R()},disabled:S,children:[(0,t.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,t.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),eu?"打开编辑器评测":"前往配置触发集"]})]}),(0,t.jsxs)("div",{className:"sa-card k-batch",onClick:e=>{e.target.closest("a,button")||E("trace")},children:[(0,t.jsxs)("div",{className:"sa-card-head",children:[(0,t.jsx)("span",{className:"sa-card-icon",children:(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("rect",{x:"2",y:"2.5",width:"5",height:"5",rx:"1"}),(0,t.jsx)("rect",{x:"9",y:"2.5",width:"5",height:"5",rx:"1"}),(0,t.jsx)("rect",{x:"2",y:"9",width:"5",height:"5",rx:"1"}),(0,t.jsx)("rect",{x:"9",y:"9",width:"5",height:"5",rx:"1"}),(0,t.jsx)("path",{d:"M3.6 5l1 1L5.8 4.8"}),(0,t.jsx)("path",{d:"M10.6 5l1 1 1.2-1.2"}),(0,t.jsx)("path",{d:"M3.6 11.5l1 1L5.8 11.3"}),(0,t.jsx)("path",{d:"M10.6 11.5l1 1 1.2-1.2"})]})}),(0,t.jsxs)("div",{className:"sa-card-title",children:[(0,t.jsx)("span",{className:"t-row",children:"用例分析"}),(0,t.jsx)("small",{title:K?i||"未命名评测任务":void 0,children:K?`评测任务:${i||"未命名任务"}`:"做的怎么样?结果 & 轨迹分析"})]}),(0,t.jsx)("span",{className:`sa-card-status ${"正常"===es?"ok":"需关注"===es?"warn":"neutral"}`,children:es})]}),(0,t.jsxs)("div",{className:"sa-card-score",children:[(0,t.jsx)("span",{className:"sa-card-score-num",children:K?ea??"--":"--"}),(0,t.jsx)("span",{className:"sa-card-score-unit",children:K?null==ea?"待评测":"/ 100":"未选择评测任务"})]}),(0,t.jsx)("div",{className:"sa-card-stats",children:(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",title:"当前评测任务下结果分 + 轨迹分双双就绪的记录数;只跑一边的不计入",children:"已评测用例"}),(0,t.jsx)("div",{className:"sa-card-stat-val",children:K?`${ee} / ${et}`:"未选择评测任务"})]})}),eo?(0,t.jsxs)("div",{className:"sa-card-foot",children:[(0,t.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,t.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,t.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,t.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),en?ev(en):"点击进入用例分析详情"]}),(0,t.jsx)("a",{className:"sa-card-foot-link",onClick:e=>{e.preventDefault(),E("trace")},children:"查看详情 →"})]}):(0,t.jsxs)("button",{className:"sa-card-empty-cta",onClick:e=>{e.stopPropagation(),E("trace")},children:[(0,t.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,t.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"打开评测页扫描"]})]}),(0,t.jsxs)("div",{className:"sa-card k-gray",onClick:e=>{e.target.closest("a,button")||E("gray")},children:[(0,t.jsxs)("div",{className:"sa-card-head",children:[(0,t.jsx)("span",{className:"sa-card-icon",children:(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("circle",{cx:"5",cy:"8",r:"3"}),(0,t.jsx)("circle",{cx:"11",cy:"8",r:"3"}),(0,t.jsx)("path",{d:"M5 5v6M11 5v6",opacity:".4"})]})}),(0,t.jsxs)("div",{className:"sa-card-title",children:[(0,t.jsx)("span",{className:"t-row",children:"A/B 测试"}),(0,t.jsx)("small",{children:"这个 skill 真的带来增益了吗?"})]}),(0,t.jsx)("span",{className:`sa-card-status ${y?"reject"===y.scoring.decision?"err":"direct-release"===y.scoring.decision||"monitor-release"===y.scoring.decision?"ok":"neutral":"warn"}`,children:e8})]}),(0,t.jsx)(Q,{counts:M,hint:"本 skill 当前所有 opencode 后台任务的实时调度状态 (A/B 跑评测时涉及 trajectory / task-completion / custom-llm 多类型)"}),ex?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"sa-card-score",children:[(0,t.jsx)("span",{className:"sa-card-score-num",children:y?.scoring.totalScore??"--"}),(0,t.jsx)("span",{className:"sa-card-score-unit",children:"/ 100"})]}),(0,t.jsxs)("div",{className:"sa-card-stats",children:[(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"能力"}),(0,t.jsx)("div",{className:"sa-card-stat-val",children:y?.scoring.capability.deltaPp==null?"—":`${y.scoring.capability.deltaPp>0?"+":""}${y.scoring.capability.deltaPp}pp`})]}),(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"成本"}),(0,t.jsx)("div",{className:"sa-card-stat-val",children:y?.scoring.cost.deltaTokenPct==null?"—":`${y.scoring.cost.deltaTokenPct>0?"+":""}${y.scoring.cost.deltaTokenPct}% Token`})]}),(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"稳定性"}),(0,t.jsx)("div",{className:"sa-card-stat-val",children:y?.scoring.stability.invokeRate==null?"—":`${y.scoring.stability.invokeRate}% 触发`})]})]}),(0,t.jsxs)("div",{className:"sa-card-foot",children:[(0,t.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,t.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,t.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,t.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),ta," · 入总分 = v2.2 最终评分 ",y?.scoring.totalScore??"--"]}),(0,t.jsx)("a",{className:"sa-card-foot-link",onClick:e=>{e.preventDefault(),E("gray")},children:"查看详情 →"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"sa-card-score sa-card-score-placeholder",children:(0,t.jsx)("span",{className:"sa-card-score-placeholder-text",children:"尚未配置"})}),(0,t.jsxs)("div",{className:"sa-card-stats",children:[(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"实验版本"}),(0,t.jsx)("div",{className:"sa-card-stat-val muted",children:ts})]}),(0,t.jsxs)("div",{className:"sa-card-stat",children:[(0,t.jsx)("div",{className:"sa-card-stat-label",children:"影响"}),(0,t.jsx)("div",{className:"sa-card-stat-val muted",children:"不计入总分 (-40%)"})]})]}),(0,t.jsxs)("button",{className:"sa-card-empty-cta",onClick:e=>{e.stopPropagation(),E("gray")},children:[(0,t.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,t.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"前往配置 A/B 测试"]})]})]})]})]})}function ee({skill:e,version:s,user:r,traces:l,loading:o,prefillTraceId:c,selectedTraceId:d,onSelectedTraceChange:u,onBack:h,onReload:p,onOptimize:m,onBatchAnalyze:g,traceEvaluationBatchId:v,traceEvaluationBatchTitle:f,onOpenEvalBatchDialog:j,evalTaskOptions:k,onSelectEvalBatch:S,datasets:N,selectedDatasetIds:I,onSelectedDatasetIdsChange:T,evaluatorOptions:R,selectedEvaluatorIds:E,onSelectedEvaluatorIdsChange:A}){let z,M,D,B,[F,L]=(0,a.useState)(""),[P,W]=(0,a.useState)("all"),[O,J]=(0,a.useState)(!0),[_,U]=(0,a.useState)(!1),[V,H]=(0,a.useState)(!0),q=C(r,v,5e3),K=C(r,v,5e3,{latestByCase:!1}),[Y,X]=(0,a.useState)([]),[G,Q]=(0,a.useState)(new Map),Z=(0,a.useMemo)(()=>r&&e?.name?`eval-deleted-traces:${r}:${e.name}:${s??"all"}`:"",[r,e?.name,s]),[ee,et]=(0,a.useState)(new Set);(0,a.useEffect)(()=>{if(!Z)return void et(new Set);try{let e=localStorage.getItem(Z),t=e?JSON.parse(e):[];et(new Set(Array.isArray(t)?t.map(String):[]))}catch{et(new Set)}},[Z]);let ea=(0,a.useCallback)(e=>{if(et(e),Z)try{localStorage.setItem(Z,JSON.stringify(Array.from(e)))}catch{}},[Z]);(0,a.useEffect)(()=>{0!==G.size&&Q(e=>{let t=!1,a=new Map(e);for(let e of l){let s=e.task_id||e.taskId;s&&a.has(s)&&!1===e.is_evaluating&&(a.delete(s),t=!0)}return t?a:e})},[l]);let[es,er]=(0,a.useState)(new Map),[en,ei]=(0,a.useState)(new Set),[eo,ed]=(0,a.useState)(v||"");(0,a.useEffect)(()=>{X([]),Q(new Map),er(new Map),ei(new Set),ed(v||"")},[v]);let eu=eo===(v||""),[ev,ef]=(0,a.useState)("trace"),[ex,ej]=(0,a.useState)(!1),[ey,eb]=(0,a.useState)(null),ek=(0,a.useRef)(null),[eS,eN]=(0,a.useState)(new Set),[ew,eI]=(0,a.useState)(!1),eC=(0,a.useMemo)(()=>{let e=F.trim().toLowerCase();return l.filter(t=>{let a=em(t),s=eh(t),r=ep(t),l=null!=("number"==typeof t.answer_score?t.answer_score:"number"==typeof t.answerScore?t.answerScore:null)&&null!=r;return("analyzed"!==P||!!l)&&("pending"!==P||!l)&&("deviation"!==P||!!s&&null!=r&&!(r>=.7))&&(!e||a.toLowerCase().includes(e)||(t.query||"").toLowerCase().includes(e))})},[F,P,l]),[eT,eR]=(0,a.useState)(0),eE=Math.max(1,Math.ceil(eC.length/30));(0,a.useEffect)(()=>{eR(0)},[F,P,eC.length]);let e$=(0,a.useMemo)(()=>eC.slice(30*eT,(eT+1)*30),[eC,eT]);(0,a.useEffect)(()=>{c&&l.some(e=>em(e)===c)?u(c):d&&l.some(e=>em(e)===d)||!eC[0]||u(em(eC[0]))},[eC,u,c,d,l]);let eA=(0,a.useMemo)(()=>l.find(e=>em(e)===d)||null,[d,l]),ez=eA?ec(eA):null;e?.name&&ez?.name&&(ez.name,e.name);let eM=(0,a.useCallback)(async()=>{if(!d||!r)return eb(null),null;try{let e=await (0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(r)}&taskId=${encodeURIComponent(d)}&limit=1`),t=await e.json(),a=(Array.isArray(t?.results)?t.results:[])[0];return eb(a||null),a||null}catch{return null}},[d,r]);(0,a.useEffect)(()=>(eM(),()=>{ek.current&&(clearTimeout(ek.current),ek.current=null)}),[eM]),(0,a.useEffect)(()=>{if(!r||0===l.length)return;let e=!1;return(async()=>{try{let t=v?`&runId=${encodeURIComponent(v)}&latestByCase=1`:"",a=await (0,n.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(r)}${t}&limit=500`);if(!a.ok)return;let s=await a.json(),i=Array.isArray(s?.results)?s.results:[];if(e)return;let o=new Set(l.map(em)),c=new Set,u=[];for(let e of i)e.taskId&&o.has(e.taskId)&&(c.has(e.taskId)||(c.add(e.taskId),u.push(e)));let h=u.filter(e=>"pending"===e.status||"running"===e.status),m=u.filter(e=>("done"===e.status||"failed"===e.status)&&null==e.trajectoryScore&&null==e.resultEvaluationScore&&(!!(e.errorMessage||e.rawAnalysis?.resultEvaluationError||e.rawAnalysis?.trajectoryError)||"failed"===e.status));if(0===h.length&&0===m.length||(h.length>0&&Q(e=>{let t=new Map(e);for(let e of h){if(!e.taskId||t.has(e.taskId))continue;let a=e.createdAt?new Date(e.createdAt).getTime():Date.now();t.set(e.taskId,a)}return t}),m.length>0&&er(e=>{let t=new Map(e);for(let e of m){if(!e.taskId)continue;let a=String(e.errorMessage||e.rawAnalysis?.resultEvaluationError||e.rawAnalysis?.trajectoryError||"评测异常").trim();t.set(e.taskId,a)}return t}),U(!0),0===h.length))return;let g=0,f=setInterval(()=>{p(),(++g>=30||e)&&clearInterval(f)},3e3);d&&h.some(e=>e.taskId===d)&&eD()}catch{}})(),()=>{e=!0}},[r,l.length,v]);let eD=(0,a.useCallback)(function e(){ek.current&&clearTimeout(ek.current),ek.current=setTimeout(async()=>{let t=await eM();t&&("pending"===t.status||"running"===t.status)&&e()},5e3)},[eM]);(0,a.useEffect)(()=>(ey&&("pending"===ey.status||"running"===ey.status)&&eD(),()=>{ek.current&&(clearTimeout(ek.current),ek.current=null)}),[ey,eD]);let eB=ew||ey?.status==="pending"||ey?.status==="running",eF=eS.size>0?Array.from(eS):d?[d]:[],eL=async()=>{if(eB||0===eF.length||!v)return;let e=Date.now();Q(t=>{let a=new Map(t);for(let t of eF)a.set(t,e);return a}),ei(e=>{let t=new Set(e);for(let e of eF)t.add(e);return t}),er(e=>{if(0===e.size)return e;let t=new Map(e);for(let e of eF)t.delete(e);return t}),eI(!0);try{if(g){let e=await g(eF);if(e){let t=e.trajectoryErrors||new Map,a=(e.resultErrors||[]).join("\n");(t.size>0||a)&&er(e=>{let s=new Map(e);for(let e of eF){let r=[];a&&r.push(`结果评测:${a}`);let l=t.get(e);l&&r.push(`轨迹评测:${l}`),r.length>0&&s.set(e,r.join("\n"))}return s})}}await eM(),eD(),p()}finally{eI(!1)}};eB||eS.size>0&&eS.size;let eP=eB||0===eF.length||0===eS.size&&!ez?.name||!v,eW=(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 12px",background:"#fafafa",border:"1px solid #e5e7eb",borderRadius:6,marginBottom:14,flexWrap:"wrap"},children:[(0,t.jsx)("span",{style:{fontSize:11,fontWeight:700,color:"#52525b"},children:"添加评测对象(Trace)"}),(0,t.jsxs)("div",{style:{display:"inline-flex",background:"#fff",borderRadius:5,padding:3,gap:2,border:"1px solid #e5e7eb"},children:[(0,t.jsx)("button",{type:"button",onClick:()=>ef("trace"),title:"直接挑选现成的执行记录(Trace)来评测",style:{border:0,padding:"4px 12px",background:"trace"===ev?"#2563eb":"transparent",color:"trace"===ev?"#fff":"#52525b",borderRadius:4,fontSize:12,fontWeight:600,cursor:"pointer"},children:"📊 选已有 Trace"}),(0,t.jsx)("button",{type:"button",onClick:()=>ef("dataset"),title:"用数据集 case 执行 skill 生成新 Trace,再评测(比「选已有」多一步生成)",style:{border:0,padding:"4px 12px",background:"dataset"===ev?"#2563eb":"transparent",color:"dataset"===ev?"#fff":"#52525b",borderRadius:4,fontSize:12,fontWeight:600,cursor:"pointer"},children:"🗄 用数据集生成"})]}),(0,t.jsx)("span",{style:{flex:1}}),(0,t.jsx)("span",{style:{fontSize:11,color:"#71717a"},children:"两种方式都把 Trace 评测加入当前评测任务,统一在下方「② 评测执行」展示"})]}),eO=(0,t.jsxs)("div",{style:{border:"1px solid #e5e7eb",borderRadius:6,padding:"10px 12px",marginBottom:12,background:"#fff",display:"flex",flexDirection:"column",gap:10},children:[(0,t.jsx)(y,{label:"数据集",placeholder:"选择参考数据集(可多选)",emptyHint:"暂无数据集(可在数据集中心创建)",accent:"#2563eb",options:(N||[]).map(e=>({id:e.id,name:e.name,meta:`${Array.isArray(e.cases)?e.cases.length:0} 例`})),selectedIds:I||[],onChange:e=>T?.(e)}),(0,t.jsx)(y,{label:"评估器",placeholder:"选择评估器(可多选)",emptyHint:"暂无评估器",accent:"#7E22CE",options:(R||[]).map(e=>({id:e.id,name:e.name})),selectedIds:E||[],onChange:e=>A?.(e)}),(0,t.jsx)("div",{style:{fontSize:11,color:"#a1a1aa"},children:"数据集作为评测参考集(按 query 匹配 case 取预期结果);评估器多选决定「开始分析」时调用哪些评估器。"})]}),eJ=(0,t.jsx)(b,{tasks:k||[],selectedRunId:v,selectedTitle:f,onSelect:e=>S?.(e),onCreateNew:()=>j?.()}),e_=l.map(e=>{let t="number"==typeof e.answer_score?e.answer_score:"number"==typeof e.answerScore?e.answerScore:null,a=null==t?null:t<=1?Math.round(100*t):Math.round(t),s="number"==typeof e.trajectory_score?e.trajectory_score:"number"==typeof e.trajectoryScore?e.trajectoryScore:null,r=null!=s?s:ep(e);return{trace:e,id:em(e),query:e.query||"(无 query)",resultScore:a,trajScore:null==r?null:Math.round(100*r),isEvaluating:!0===e.is_evaluating,lastEvalStatus:e.last_eval_status??null,lastEvalError:e.last_eval_error??null}}),eU=e=>e.isEvaluating||eu&&G.has(e.id)?"pending":"failed"===e.lastEvalStatus||eu&&es.has(e.id)?"failed":null!=e.resultScore&&null!=e.trajScore?"done":null!=e.resultScore||null!=e.trajScore?"partial":"idle",eV=e_.filter(e=>!ee.has(e.id)&&!!v&&(q.has(e.id)||eu&&(G.has(e.id)||es.has(e.id)||en.has(e.id)))),eH=eV.map(e=>{let t=q.get(e.id);return{resultScore:t?.resultScore??null,trajScore:t?.trajScore??null}}).filter(e=>"number"==typeof e.resultScore&&"number"==typeof e.trajScore),eq=eV.length,eK=eH.length,eY=0===eH.length?null:Math.round(eH.reduce((e,t)=>e+t.resultScore,0)/eH.length),eX=0===eH.length?null:Math.round(eH.reduce((e,t)=>e+t.trajScore,0)/eH.length),eG=null==eY||null==eX?null:Math.round((eY+eX)/2),eQ=null==eG?"warn":eG>=80?"good":eG>=60?"warn":"bad",eZ=v?Array.from(q.entries()).filter(([e])=>!ee.has(e)).map(([,e])=>({resultScore:e.resultScore??null,trajScore:e.trajScore??null})):[],e0=eZ.filter(e=>"number"==typeof e.resultScore&&"number"==typeof e.trajScore),e1=e0.length,e5=eZ.length,e2=0===e1?null:Math.round(e0.reduce((e,t)=>e+t.resultScore,0)/e1),e6=0===e1?null:Math.round(e0.reduce((e,t)=>e+t.trajScore,0)/e1),e4=null==e2||null==e6?null:Math.round((e2+e6)/2),e3=null==e4?"warn":e4>=80?"good":e4>=60?"warn":"bad",e8=e0.filter(e=>(e.resultScore+e.trajScore)/2>=60).length,e7=0===e1?0:Math.round(e8/e1*100),e9=Y.filter(e=>e.evaluatorRunId===v&&(!e.executionTraceId||!ee.has(e.executionTraceId))).map(e=>e.executionTraceId&&!e.resultId&&eu&&G.has(e.executionTraceId)?{...e,status:"evaluating",resultId:void 0,evaluationTraceId:void 0,resultEvalTraceId:void 0,trajEvalTraceId:void 0,resultScore:null,trajScore:null}:e),te=new Set(e9.map(e=>e.caseId).filter(Boolean)),tt=new Set(e9.map(e=>e.executionTraceId).filter(Boolean)),ta=eV.filter(e=>{let t=q.get(e.id)||K.get(e.id);return!tt.has(e.id)&&(!t?.caseId||!te.has(t.caseId))}).map(e=>{let t=q.get(e.id),a=!!v,s=a?t?.resultScore??null:e.resultScore,r=a?t?.trajScore??null:e.trajScore,l=(e=>{if(!v)return eU(e);let t=q.get(e.id);return t?"failed"===t.status?"failed":"pending"===t.status||"running"===t.status?"pending":"done"===t.status?null!=t.resultScore&&null!=t.trajScore?"done":null!=t.resultScore||null!=t.trajScore?"partial":"failed":eU({...e,resultScore:t.resultScore??null,trajScore:t.trajScore??null}):eU(e)})(e),n="done"===l?"done":"failed"===l?"failed":"partial"===l?"partial":"evaluating",i=(eu?es.get(e.id):void 0)||t?.errorMessage||void 0;return t?.status==="failed"&&"done"!==n&&(n="failed"),"idle"===l&&!t&&eu&&en.has(e.id)&&!G.has(e.id)&&(n="failed",i=i||"未在本次评测任务产出评测结果(可能该 trace 未匹配到 case 或未引用当前 skill)"),{id:e.id,caseId:t?.caseId,caseLabel:e.query||e.id.slice(0,12),caseTitle:e.query||e.id,executionTraceId:e.id,evaluationTraceId:t?.evaluationTraceId,resultEvalTraceId:t?.resultEvalTraceId,trajEvalTraceId:t?.trajEvalTraceId,datasetId:t?.datasetId,evaluatorRunId:v||void 0,resultId:t?.resultId,status:n,resultScore:s,trajScore:r,errorMsg:i}}),ts=new Set([...e9.map(e=>e.executionTraceId).filter(Boolean),...ta.map(e=>e.executionTraceId).filter(Boolean)]),tr=[...e9,...ta,...Array.from(q.values()).filter(e=>e.taskId&&!ee.has(e.taskId)&&!ts.has(e.taskId)&&(!e.caseId||!te.has(e.caseId))).map(e=>({id:e.taskId,caseId:e.caseId,caseLabel:e.caseId||e.taskId,caseTitle:e.caseId||e.taskId,executionTraceId:e.taskId,evaluationTraceId:e.evaluationTraceId,resultEvalTraceId:e.resultEvalTraceId,trajEvalTraceId:e.trajEvalTraceId,evaluatorRunId:v||void 0,resultId:e.resultId,datasetId:e.datasetId,status:"done"===e.status?"done":"failed"===e.status?"failed":"evaluating",resultScore:e.resultScore??null,trajScore:e.trajScore??null,errorMsg:e.errorMessage}))];return(0,t.jsxs)("section",{className:"sa-detail",children:[(0,t.jsx)(el,{title:"用例分析",subtitle:`${e?.name||"未选择 Skill"}${null!=s?` \xb7 v${s}`:""}`,badge:"LLM Judge",onBack:h,onOptimize:m}),"trace"===ev&&(0,t.jsxs)(x.SectionShell,{num:1,variant:"config",title:"配置",desc:"该 skill 版本关联的全部 trace(含已评测和未评测);勾选 → 到 ② 触发分析",open:O,onToggle:()=>J(e=>!e),summary:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"用例来源"}),(0,t.jsx)("code",{children:"从 Trace"}),(0,t.jsxs)("span",{children:["· 关联 ",(0,t.jsx)("code",{children:l.length})," 条"]}),(0,t.jsxs)("span",{children:["· 已评测 ",(0,t.jsx)("code",{children:e1})]})]}),actions:eJ,children:[eO,eW,(0,t.jsx)("div",{className:"sa-trace-picker",style:{display:"block"},children:(0,t.jsxs)("aside",{className:"sa-trace-list","aria-label":"该 Skill 的 Trace",style:{width:"100%",maxWidth:"none"},children:[(0,t.jsxs)("div",{className:"sa-trace-list-head",children:[(0,t.jsx)("div",{className:"sa-trace-list-title",children:(0,t.jsxs)("h3",{children:["该 Skill 的 Trace ",(0,t.jsxs)("small",{children:["(",l.length,")"]})]})}),(0,t.jsx)("input",{value:F,onChange:e=>L(e.target.value),placeholder:"搜索 query 或 taskId..."}),(0,t.jsxs)("div",{className:"sa-tabs",children:[(0,t.jsxs)("button",{className:"all"===P?"active":"",onClick:()=>W("all"),children:["全部 ",l.length]}),(0,t.jsx)("button",{className:"analyzed"===P?"active":"",onClick:()=>W("analyzed"),children:"已评估"}),(0,t.jsx)("button",{className:"pending"===P?"active":"",onClick:()=>W("pending"),children:"未评估"}),(0,t.jsx)("button",{className:"deviation"===P?"active":"",onClick:()=>W("deviation"),children:"高偏离"})]}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:11,color:"var(--sa-muted)",marginTop:6,flexWrap:"wrap"},children:[(0,t.jsxs)("span",{children:["已勾选 ",(0,t.jsx)("b",{style:{color:"var(--sa-text)"},children:eS.size})]}),(0,t.jsx)("button",{type:"button",onClick:()=>eN(new Set([...eS,...e$.map(em)])),style:{background:"transparent",border:"none",color:"var(--sa-primary)",cursor:"pointer",fontSize:11,padding:0},title:`勾选当前页 ${e$.length} 条 (跨页不影响)`,children:"全选本页"}),eC.length>e$.length&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"·"}),(0,t.jsxs)("button",{type:"button",onClick:()=>eN(new Set(eC.map(em))),style:{background:"transparent",border:"none",color:"var(--sa-primary)",cursor:"pointer",fontSize:11,padding:0},title:`勾选所有 ${eC.length} 条 (跨所有页)`,children:["全选所有 (",eC.length,")"]})]}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("button",{type:"button",onClick:()=>eN(new Set),disabled:0===eS.size,style:{background:"transparent",border:"none",color:0===eS.size?"var(--sa-muted)":"var(--sa-primary)",cursor:0===eS.size?"not-allowed":"pointer",fontSize:11,padding:0},children:"清空"})]}),eE>1&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,fontSize:11,color:"var(--sa-muted)",marginTop:8,padding:"6px 8px",background:"#fafafa",borderRadius:4},children:[(0,t.jsxs)("span",{children:["第 ",(0,t.jsx)("b",{style:{color:"var(--sa-text)"},children:eT+1})," / ",eE," 页 · 显示 ",(0,t.jsxs)("b",{children:[30*eT+1,"-",Math.min((eT+1)*30,eC.length)]})," / 共 ",(0,t.jsx)("b",{children:eC.length})," 条"]}),(0,t.jsxs)("div",{style:{display:"flex",gap:4},children:[(0,t.jsx)("button",{type:"button",onClick:()=>eR(0),disabled:0===eT,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:0===eT?"not-allowed":"pointer",color:0===eT?"var(--sa-muted)":"var(--sa-text)"},title:"首页",children:"«"}),(0,t.jsx)("button",{type:"button",onClick:()=>eR(Math.max(0,eT-1)),disabled:0===eT,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:0===eT?"not-allowed":"pointer",color:0===eT?"var(--sa-muted)":"var(--sa-text)"},title:"上一页",children:"‹"}),(0,t.jsx)("button",{type:"button",onClick:()=>eR(Math.min(eE-1,eT+1)),disabled:eT>=eE-1,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:eT>=eE-1?"not-allowed":"pointer",color:eT>=eE-1?"var(--sa-muted)":"var(--sa-text)"},title:"下一页",children:"›"}),(0,t.jsx)("button",{type:"button",onClick:()=>eR(eE-1),disabled:eT>=eE-1,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:eT>=eE-1?"not-allowed":"pointer",color:eT>=eE-1?"var(--sa-muted)":"var(--sa-text)"},title:"末页",children:"»"})]})]}),0===(z=l.filter(e=>ec(e)?.version==null).length)?null:(0,t.jsxs)("div",{style:{marginTop:6,padding:"4px 8px",background:"rgba(251,191,36,0.08)",border:"1px solid rgba(251,191,36,0.3)",borderRadius:4,fontSize:11,color:"var(--sa-warning, #d97706)"},title:"未绑定版本的 trace 上传时没捕获到 skill 版本号——常见原因:agent 没显式用 skill 工具加载、skill 名跟 DB 对不上、或 skill 注册晚于 trace 上传。这些 trace 只能在版本筛选「全部」下看到。",children:["⚠ 当前列表共 ",l.length," 条,其中 ",(0,t.jsx)("b",{children:z})," 条未绑定版本,只在「全部」下可见"]})]}),(0,t.jsxs)("div",{className:"sa-trace-list-body",children:[o&&(0,t.jsxs)("div",{className:"sa-empty-small",children:["正在加载 ",(0,t.jsx)("b",{children:e?.name||""})," 的执行链路…"]}),!o&&0===eC.length&&(0,t.jsx)("div",{className:"sa-empty-small",children:"暂无匹配 Trace"}),e$.map(e=>{let a,s=em(e),r="number"==typeof e.answer_score?e.answer_score:"number"==typeof e.answerScore?e.answerScore:null,l=ep(e),n=null!=r&&null!=l,o=eS.has(s),c=ec(e)?.version??null;return(0,t.jsxs)("div",{role:"button",tabIndex:0,className:`sa-trace-row ${d===s?"active":""}`,onClick:()=>u(s),onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),u(s))},children:[(0,t.jsx)("label",{onClick:e=>e.stopPropagation(),style:{display:"inline-flex",alignItems:"center",marginRight:4,cursor:"pointer"},title:"勾选后顶部「分析」按钮会批量启动选中的所有 Trace",children:(0,t.jsx)("input",{type:"checkbox",checked:o,onChange:()=>{eN(e=>{let t=new Set(e);return t.has(s)?t.delete(s):t.add(s),t})},onClick:e=>e.stopPropagation(),style:{margin:0,cursor:"pointer"}})}),(0,t.jsx)("span",{className:`sa-score-dot ${n?"ok":"pending"}`,title:n?"已评估(结果分 + 轨迹分均就绪)":"未评估(结果分 / 轨迹分至少缺一个)",children:n?"✓":"○"}),(0,t.jsxs)("span",{className:"sa-trace-text",children:[(0,t.jsxs)("span",{className:"sa-trace-id",children:[s,"ab"===(a=function(e){if(!e)return"real";let t=e.trim();return"grayscale-skill-agent"===t||"grayscale-baseline-agent"===t?"ab":"skill-debug-executor"===t||"batch-eval-agent"===t?"batch":i.has(t)?"system":"real"}(e.agentName||e.agent))?(0,t.jsx)("span",{title:"来自 A/B 测试 (grayscale-skill-agent / grayscale-baseline-agent)",style:{marginLeft:6,padding:"1px 6px",background:"rgba(29,158,117,.1)",color:"#1D9E75",border:"1px solid rgba(29,158,117,.3)",borderRadius:99,fontSize:10,fontWeight:600},children:"🔀 A/B"}):"batch"===a?(0,t.jsx)("span",{title:"来自用例分析「从数据集」(skill-debug-executor / batch-eval-agent)",style:{marginLeft:6,padding:"1px 6px",background:"rgba(24,95,165,.1)",color:"#185FA5",border:"1px solid rgba(24,95,165,.3)",borderRadius:99,fontSize:10,fontWeight:600},children:"📊 用例分析"}):null,(0,t.jsx)("small",{children:eg(e.timestamp)})]}),(0,t.jsx)("span",{className:"sa-trace-query",children:e.query||"无输入内容"}),(0,t.jsxs)("span",{className:"sa-trace-sub",children:[e.framework||"Unknown",e.timeCost?` \xb7 ${e.timeCost}`:"",n?" · 已评估":" · 未评估",null!=c?(0,t.jsxs)("span",{title:`已绑定 v${c}——在版本筛选选 v${c} 才会看到这条`,style:{marginLeft:6,padding:"1px 6px",background:"var(--sa-success-soft, rgba(34,197,94,.1))",color:"var(--sa-success, #16a34a)",border:"1px solid var(--sa-success-line, rgba(34,197,94,.3))",borderRadius:99,fontSize:10,fontWeight:600},children:["v",c]}):(0,t.jsx)("span",{title:"未捕获到 skill 版本——上传时 interactions 里没有 skill 工具调用、payload 没带 skill_version、且 skill 名查 DB 也没拿到 activeVersion。这条 trace 只能在「全部」版本过滤下显示",style:{marginLeft:6,padding:"1px 6px",background:"var(--sa-warning-soft, rgba(251,191,36,.12))",color:"var(--sa-warning, #d97706)",border:"1px solid var(--sa-warning-line, rgba(251,191,36,.32))",borderRadius:99,fontSize:10,fontWeight:600},children:"未绑定版本"})]})]})]},s)})]})]})}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:14,paddingTop:14,borderTop:"1px solid var(--ev-line)"},children:[(0,t.jsx)("button",{type:"button",onClick:eL,disabled:eP,style:{padding:"9px 22px",background:eP?"var(--ev-line-strong)":"var(--ev-info)",color:"#fff",border:"none",borderRadius:6,fontSize:14,fontWeight:700,cursor:eP?"not-allowed":"pointer",opacity:eP?.6:1},title:v?eP?"请先在上方勾选 trace(且 trace 有主 skill)":"对勾选的 trace 直接开始评测":'请先在上方"评测任务"里新建或选择一个评测任务',children:eB?"评测中…":eS.size>0?`▶ 开始评测(${eS.size} 条)`:"▶ 开始评测"}),(0,t.jsx)("span",{style:{fontSize:15,fontWeight:700,color:v?"var(--ev-info)":"#EA580C"},children:v?"勾选 trace 后开始评测;进度见 ② 评测执行":"请先在上方「评测任务」新建或选择一个任务,再开始评测"})]})]}),"dataset"===ev&&(0,t.jsx)("div",{className:"debug-root",style:{background:"transparent"},children:(0,t.jsx)($,{newTaskTrigger:0,historyPanelTrigger:0,controlled:!0,hideExecAndResult:!0,topConfigSlot:(0,t.jsxs)(t.Fragment,{children:[eO,eW]}),headerActions:eJ,controlledDatasetIds:I,controlledEvaluatorIds:E,controlledEvalBatchId:v,controlledEvalBatchTitle:f,controlledSkillId:e?.id,controlledVersionId:e?.versions?.find(e=>e.version===s)?.id||"",onExecutionRecordsChange:X})}),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(x.SectionShell,{num:2,variant:"exec",title:"评测执行",desc:"对勾选的 trace 触发结果 + 轨迹双分析;实时展示评测进度,下方表列已评测 trace,点「评测结果」列查看逐条评测详情",open:_,onToggle:()=>U(e=>!e),summary:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"已评测"}),(0,t.jsxs)("code",{children:[eK," / ",eq]}),null!=eG&&(0,t.jsxs)("span",{children:["· 平均评分 ",(0,t.jsxs)("b",{style:{color:"good"===eQ?"var(--ev-success)":"bad"===eQ?"var(--ev-error)":"var(--ev-warning)"},children:[eG," 分"]})]}),(M=tr.filter(e=>"pending"===e.status||"executing"===e.status||"executed"===e.status||"evaluating"===e.status).length)>0?(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-info)",fontWeight:600},children:["· ",(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:"currentColor",animation:"pulse 1.5s ease-in-out infinite"}}),"进行中 ",(0,t.jsx)("b",{children:M})," 条"]}):null,(D=tr.filter(e=>"partial"===e.status).length)>0?(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-warning)",fontWeight:600},title:"只跑成功了一边(result 或 trajectory)。展开 ② 点行查看已有分析。",children:["· ◐ 部分评测 ",(0,t.jsx)("b",{children:D})," 条"]}):null,(B=tr.filter(e=>"failed"===e.status).length)>0?(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-error)",fontWeight:600},title:"后端 LLM 评测调用挂了——常见原因:API key 失效 / 模型配额不足 / 网络。展开 ② 看每条具体错误。",children:["· ⚠ 评测失败 ",(0,t.jsx)("b",{children:B})," 条"]}):null,eS.size>0&&(0,t.jsxs)("span",{children:["· 勾选 ",(0,t.jsx)("b",{children:eS.size})," 条待分析"]})]}),children:(0,t.jsx)(w,{emptyHint:"还没触发过评测。在 ① 配置块勾选 trace → 点末尾「开始评测」。",onRowClick:e=>{let t=eV.find(t=>t.id===e.executionTraceId);if(!t)return;let a=eU(t);("done"===a||"partial"===a)&&(u(e.executionTraceId),H(!0))},onRetry:async e=>{let t=e.executionTraceId;if(!t)return;if("done"===e.status&&null!=e.resultScore&&null!=e.trajScore)return void window.alert("这条用例已完成评测,当前评测任务下无需重试。若需要重新执行用例,请重新生成 trace 后再发起评测。");if(Q(e=>{let a=new Map(e);return a.set(t,Date.now()),a}),er(e=>{if(!e.has(t))return e;let a=new Map(e);return a.delete(t),a}),!g)return;let a=await g([t]);if(a){let e=a.trajectoryErrors?.get(t),s=(a.resultErrors||[]).join("\n");(e||s)&&er(a=>{let r=new Map(a),l=[];return s&&l.push(`结果评测:${s}`),e&&l.push(`轨迹评测:${e}`),l.length>0&&r.set(t,l.join("\n")),r})}},onDelete:async e=>{let t=e.executionTraceId;if(t&&window.confirm("确定从「评测执行」列表删除这条记录吗?\n该 trace 在当前评测任务下的评测结果会被删除(trace 本身保留,可重新评测)。"))try{if(r){let e=await (0,n.apiFetch)("/api/eval/trajectory/results",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:r,taskId:t,runId:v||void 0})});if(!e.ok){let t=await e.json().catch(()=>({}));alert("删除失败:"+(t?.error||`HTTP ${e.status}`));return}}let e=new Set(ee);e.add(t),ea(e),Q(e=>{if(!e.has(t))return e;let a=new Map(e);return a.delete(t),a}),er(e=>{if(!e.has(t))return e;let a=new Map(e);return a.delete(t),a})}catch(e){alert("删除失败:"+(e instanceof Error?e.message:String(e)))}},records:tr})}),(0,t.jsx)(x.SectionShell,{num:3,variant:"result",title:"分析结果",desc:e1>0?`已评测 ${e1} / ${e5} \xb7 结果 + 轨迹 双维度`:"尚未评测",open:V,onToggle:()=>H(e=>!e),summary:null!=e4?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"总评分"}),(0,t.jsxs)("code",{className:`score-${e3}`,children:[e4," 分"]}),(0,t.jsxs)("span",{children:["· 通过 ",(0,t.jsx)("b",{children:e8})," / ",(0,t.jsx)("b",{children:e1})]})]}):(0,t.jsx)("span",{style:{color:"var(--ev-muted)"},children:"未评测"}),children:(0,t.jsxs)("div",{className:"ev-hero",children:[(0,t.jsxs)("div",{className:"ev-hero-main",children:[(0,t.jsxs)("div",{className:`ev-hero-num ${e3}`,children:[e4??"--",(0,t.jsx)("span",{className:"ev-hero-unit",children:"分"})]}),(0,t.jsxs)("div",{className:"ev-hero-label",children:["总评分 · 结果 + 轨迹 平均 · 已评测 ",e1," / ",e5,(0,t.jsx)("span",{style:{display:"block",fontSize:11,color:"var(--ev-muted)",fontWeight:400,marginTop:2},children:"跨当前评测任务的有效评测聚合 · 不随 source(从Trace/从数据集) 切换变化"})]})]}),(0,t.jsxs)("div",{className:"ev-hero-sub",children:[(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsx)("div",{className:`ev-hero-sub-num ${null==e2?"":e2>=80?"good":e2<60?"bad":""}`,children:e2??"--"}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"结果分析 均分"}),(0,t.jsx)("div",{className:"ev-hero-sub-hint",children:"输出是否符合预期"})]}),(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsx)("div",{className:`ev-hero-sub-num ${null==e6?"":e6>=80?"good":e6<60?"bad":""}`,children:e6??"--"}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"轨迹分析 均分"}),(0,t.jsx)("div",{className:"ev-hero-sub-hint",children:"执行路径是否合理"})]}),(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsx)("div",{className:`ev-hero-sub-num ${0===e1?"":e7>=80?"good":e7<50?"bad":""}`,children:0===e1?"--":`${e7}%`}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"通过率"}),(0,t.jsx)("div",{className:"ev-hero-sub-hint",children:"已评测中达标"})]}),(0,t.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,t.jsxs)("div",{className:"ev-hero-sub-num",children:[e1," / ",e5]}),(0,t.jsx)("div",{className:"ev-hero-sub-label",children:"评测进度"}),(0,t.jsxs)("div",{className:"ev-hero-sub-hint",children:[Math.max(0,e5-e1)," 条待评测"]})]})]})]})})]})]})}function et({skill:e,version:s,user:r,summary:l,loading:i,onBack:o,onReload:c,onOptimize:d}){let[u,h]=(0,a.useState)(null),[p,m]=(0,a.useState)(!1),[g,v]=(0,a.useState)(!1),f=l?.latest?.evaluationId;(0,a.useEffect)(()=>{f?(m(!0),(0,n.apiFetch)(`/api/evaluation/${encodeURIComponent(f)}`).then(e=>e.json()).then(e=>h(e)).catch(()=>h(null)).finally(()=>m(!1))):h(null)},[f]);let x=async()=>{if(e&&null!=s){v(!0);try{let t=await (0,n.apiFetch)(`/api/skills/${e.id}/versions/${s}/evaluate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:r})}),a=await t.json().catch(()=>({}));if(!t.ok)throw Error(a.error||"静态合规启动失败");await c({expectedEvaluationId:"string"==typeof a.evaluationId?a.evaluationId:void 0})}catch(e){B.toast.error(e instanceof Error?e.message:"静态合规启动失败")}finally{v(!1)}}},j=u?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("span",{children:["评估时间:",new Date(u.evaluation.ranAt).toLocaleString()]}),(0,t.jsx)(es,{status:u.evaluation.status}),null!=u.evaluation.durationMs&&(0,t.jsxs)("span",{children:["耗时:",(u.evaluation.durationMs/1e3).toFixed(2),"s"]}),u.evaluation.generator&&(0,t.jsxs)("span",{children:["评估器:",u.evaluation.generator]}),u.evaluation.contentHash&&(0,t.jsxs)("span",{children:["contentHash:",(0,t.jsxs)("code",{children:[u.evaluation.contentHash.slice(0,12),"…"]})]}),u.evaluation.errorMessage&&(0,t.jsxs)("span",{style:{color:"#b91c1c"},children:["错误:",u.evaluation.errorMessage]})]}):null;return(0,t.jsxs)("section",{className:"sa-detail",children:[(0,t.jsx)(el,{title:"静态合规分析",subtitle:`${e?.name||"未选择 Skill"}${null!=s?` \xb7 v${s}`:""} \xb7 SKILL.md 文本扫描`,badge:"Rule-based",metaSlot:j,onBack:o,onPrimary:x,primaryLabel:g?"分析中...":"重新分析",onOptimize:d}),(i||p)&&(0,t.jsx)(en,{title:"正在读取静态评估",text:"读取最近一次静态评估与问题列表。",compact:!0}),!i&&!l?.latest&&(0,t.jsx)(ea,{onScan:x,running:g}),l?.latest&&u&&(0,t.jsx)(M.EvaluationContent,{detail:u})]})}function ea({onScan:e,running:a}){return(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,padding:"12px 16px",background:"var(--ev-card, #fff)",border:"1px solid var(--ev-line, #e5e7eb)",borderRadius:8},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,minWidth:0},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"🔍"}),(0,t.jsx)("span",{style:{fontSize:13,color:"var(--ev-text, #18181b)",fontWeight:600},children:"当前 Skill 版本尚未扫描"}),(0,t.jsxs)("span",{style:{fontSize:12,color:"var(--ev-muted)"},children:["· 扫描会按下方 ",D.STATIC_EVAL_STANDARDS.length," 个标准维度评分"]})]}),(0,t.jsx)("button",{onClick:e,disabled:a,style:{padding:"6px 14px",background:a?"var(--ev-line-strong, #d4d4d8)":"var(--ev-info, #2563eb)",color:"#fff",border:"none",borderRadius:5,fontSize:12,fontWeight:600,cursor:a?"not-allowed":"pointer",flexShrink:0},children:a?"扫描中…":"开始扫描"})]}),(0,t.jsxs)("div",{style:{background:"var(--ev-card, #fff)",border:"1px solid var(--ev-line, #e5e7eb)",borderRadius:12,padding:"16px 18px"},children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:14,fontWeight:700,color:"var(--ev-text, #18181b)"},children:"分析标准"}),(0,t.jsx)("div",{style:{fontSize:11,color:"var(--ev-muted)",marginTop:2},children:"扫描完成后这里会出现每个标准的命中问题,点击展开查看证据 + 修复建议"})]})}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:D.STATIC_EVAL_STANDARDS.map(e=>(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"160px 1fr 80px",alignItems:"center",gap:12,padding:"10px 12px",background:"#fafafa",border:"1px solid #f4f4f5",borderRadius:8,opacity:.55,cursor:"not-allowed",pointerEvents:"none"},"aria-disabled":"true",children:[(0,t.jsx)("div",{style:{fontSize:13,fontWeight:600,color:"var(--ev-text, #52525b)"},children:e.title}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"var(--ev-muted)",lineHeight:1.5},children:e.desc}),(0,t.jsx)("div",{style:{textAlign:"right"},children:(0,t.jsx)("span",{style:{display:"inline-block",padding:"2px 8px",fontSize:10,fontWeight:600,color:"#a1a1aa",background:"#f4f4f5",border:"1px solid #e5e7eb",borderRadius:99},children:"待扫描"})})]},e.key))})]})]})}function es({status:e}){let a=["ok","pending","partial","failed"].includes(e)?e:"ok";return(0,t.jsx)("span",{className:`sa-meta-status ${a}`,children:{ok:"成功",pending:"执行中",partial:"部分成功",failed:"失败"}[e]||e})}function er({title:e,description:a,primaryAction:s,secondaryAction:r,children:l,onBack:n,onPrimary:i,onSecondary:o,onOptimize:c,renderHeader:d}){return(0,t.jsxs)("section",{className:"sa-detail",children:["inline"===(d??"inline")&&(0,t.jsx)(el,{title:e,subtitle:a,badge:"调测分析",onBack:n,onPrimary:i,primaryLabel:s,secondaryLabel:r,onSecondary:o,onOptimize:c}),(0,t.jsx)("div",{className:"sa-embedded-debug","aria-label":e,children:(0,t.jsx)("div",{className:"sa-embedded-shell-body",children:l})})]})}function el({title:e,subtitle:a,badge:s,metaSlot:r,onBack:l,onPrimary:n,primaryDisabled:i,primaryLabel:o,secondaryLabel:c,onSecondary:d,onOptimize:u}){return(0,t.jsx)("header",{className:"sa-detail-head",children:(0,t.jsxs)("div",{className:"sa-detail-hero",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("h1",{children:[e," ",(0,t.jsx)("span",{className:"sa-pill primary",children:s})]}),(0,t.jsx)("p",{children:a}),r&&(0,t.jsx)("div",{className:"sa-detail-meta",children:r})]}),(0,t.jsxs)("div",{className:"sa-detail-actions",children:[c&&(0,t.jsx)("button",{className:"sa-btn",onClick:d,children:c}),o&&(0,t.jsx)("button",{className:"sa-btn",onClick:n,disabled:i,children:o}),(0,t.jsx)("button",{className:"sa-btn sa-btn-primary",onClick:u,children:"开始优化"})]})]})})}function en({title:e,text:a,actionLabel:s,onAction:r,compact:l}){return(0,t.jsxs)("div",{className:`sa-empty ${l?"compact":""}`,children:[(0,t.jsx)("div",{className:"sa-empty-icon",children:"⌁"}),(0,t.jsx)("h3",{children:e}),(0,t.jsx)("p",{children:a}),s&&(0,t.jsx)("button",{className:"sa-btn sa-btn-primary",onClick:r,children:s})]})}function ei(e){return`skill-analysis-selection:${e||"anonymous"}`}function eo(e,t){let a=e.versions||[],s=e=>"number"==typeof e&&Number.isFinite(e)&&(0===a.length||a.some(t=>t.version===e));return s(t)?t:s(e.activeVersion)?e.activeVersion:s(e.version)?e.version:a[0]?.version??0}function ec(e){let t=e.root_skill||e.rootSkill||null;return t?.name?{name:t.name,version:t.version??null}:null}function ed(e){let t=0,a=0,s=0,r=0;for(let l of e){let e=eu(l);if(e&&(Array.isArray(e.matches)||Array.isArray(e.skippedExpectedSteps))){t+=1;let l=Array.isArray(e.matches)?e.matches:[],n=Array.isArray(e.skippedExpectedSteps)?e.skippedExpectedSteps:[],i=l.filter(e=>"matched"===e.matchStatus).length,o=l.filter(e=>"non_business"!==e.matchStatus).length+n.length;s+=i,r+=o,("number"==typeof e.summary?.overallScore?e.summary.overallScore:o>0?i/o:1)<.7&&(a+=1)}}return{analyzed:t,highDeviation:a,matchedSteps:s,totalSteps:r}}function eu(e){var t=e.execution_match?.matchJson||void 0;if(!t)return null;try{return JSON.parse(t)}catch{return null}}function eh(e){let t=eu(e);return!!t&&(Array.isArray(t.matches)||Array.isArray(t.skippedExpectedSteps))}function ep(e){let t=eu(e);if(!t)return null;if("number"==typeof t.summary?.overallScore)return t.summary.overallScore;let a=Array.isArray(t.matches)?t.matches:[],s=Array.isArray(t.skippedExpectedSteps)?t.skippedExpectedSteps:[],r=a.filter(e=>"non_business"!==e.matchStatus),l=r.length+s.length;return 0===l?null:r.filter(e=>"matched"===e.matchStatus).length/l}function em(e){return e.task_id||e.upload_id||""}function eg(e){if(!e)return"";let t=new Date(e);return Number.isNaN(t.getTime())?"":`${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}function ev(e){if(!e)return"未知时间";let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let a=Date.now()-t.getTime();return a<6e4?"刚刚":a<36e5?`${Math.floor(a/6e4)} 分钟前`:a<864e5?`${Math.floor(a/36e5)} 小时前`:`${Math.floor(a/864e5)} 天前`}e.s(["default",()=>K],244681)}]);
|