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.
Files changed (387) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +2 -2
  3. package/.next/standalone/.next/server/app/(main)/accessconfig/install/page_client-reference-manifest.js +1 -1
  4. package/.next/standalone/.next/server/app/(main)/dashboard/page_client-reference-manifest.js +1 -1
  5. package/.next/standalone/.next/server/app/(main)/dataset/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/(main)/eval/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(main)/eval/run/[runId]/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(main)/eval/trajectory/[taskId]/trace/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(main)/eval/trajectory/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(main)/fault/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(main)/metrics/evaluators/[id]/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(main)/metrics/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(main)/modelconfig/registry/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(main)/modelconfig/web-search/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(main)/quality/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(main)/skill-eval/grayscale/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(main)/skill-eval/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(main)/skill-generator/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(main)/skill-opt/[name]/[version]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(main)/skill-opt/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(main)/trace/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  24. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  31. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  33. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  35. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  38. package/.next/standalone/.next/server/app/accessconfig/channels.html +1 -1
  39. package/.next/standalone/.next/server/app/accessconfig/channels.rsc +1 -1
  40. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels/__PAGE__.segment.rsc +1 -1
  41. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels.segment.rsc +1 -1
  42. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  43. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p.segment.rsc +1 -1
  44. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_full.segment.rsc +1 -1
  45. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_head.segment.rsc +1 -1
  46. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_index.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_tree.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/accessconfig/health.html +1 -1
  49. package/.next/standalone/.next/server/app/accessconfig/health.rsc +1 -1
  50. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health/__PAGE__.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health.segment.rsc +1 -1
  52. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  53. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/accessconfig/health.segments/_full.segment.rsc +1 -1
  55. package/.next/standalone/.next/server/app/accessconfig/health.segments/_head.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/accessconfig/health.segments/_index.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/accessconfig/health.segments/_tree.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/accessconfig/install.html +1 -1
  59. package/.next/standalone/.next/server/app/accessconfig/install.rsc +2 -2
  60. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install/__PAGE__.segment.rsc +2 -2
  61. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install.segment.rsc +1 -1
  62. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/accessconfig/install.segments/_full.segment.rsc +2 -2
  65. package/.next/standalone/.next/server/app/accessconfig/install.segments/_head.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/accessconfig/install.segments/_index.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/accessconfig/install.segments/_tree.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/accessconfig/webhooks.html +1 -1
  69. package/.next/standalone/.next/server/app/accessconfig/webhooks.rsc +1 -1
  70. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks/__PAGE__.segment.rsc +1 -1
  71. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks.segment.rsc +1 -1
  72. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  73. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p.segment.rsc +1 -1
  74. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_full.segment.rsc +1 -1
  75. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_head.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_index.segment.rsc +1 -1
  77. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_tree.segment.rsc +1 -1
  78. package/.next/standalone/.next/server/app/accessconfig.html +1 -1
  79. package/.next/standalone/.next/server/app/accessconfig.rsc +1 -1
  80. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig/__PAGE__.segment.rsc +1 -1
  81. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  82. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p.segment.rsc +1 -1
  83. package/.next/standalone/.next/server/app/accessconfig.segments/_full.segment.rsc +1 -1
  84. package/.next/standalone/.next/server/app/accessconfig.segments/_head.segment.rsc +1 -1
  85. package/.next/standalone/.next/server/app/accessconfig.segments/_index.segment.rsc +1 -1
  86. package/.next/standalone/.next/server/app/accessconfig.segments/_tree.segment.rsc +1 -1
  87. package/.next/standalone/.next/server/app/agents.html +1 -1
  88. package/.next/standalone/.next/server/app/agents.rsc +1 -1
  89. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
  90. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
  91. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +1 -1
  92. package/.next/standalone/.next/server/app/agents.segments/_full.segment.rsc +1 -1
  93. package/.next/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  94. package/.next/standalone/.next/server/app/agents.segments/_index.segment.rsc +1 -1
  95. package/.next/standalone/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
  96. package/.next/standalone/.next/server/app/api/agent/run/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/agent/stream/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/debug/batch-tasks/[taskId]/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/debug/execute/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/[taskId]/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/eval/terminate-all/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/eval/trajectory/results/[id]/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js +6 -6
  104. package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/eval/trajectory/runs/route.js +1 -1
  106. package/.next/standalone/.next/server/app/api/fault/diagnosis/stream/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/skill-generator/attachments/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/skill-generator/chat/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/skill-opt/chat/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/user-evaluators/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/dashboard.html +1 -1
  114. package/.next/standalone/.next/server/app/dashboard.rsc +2 -2
  115. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard/__PAGE__.segment.rsc +2 -2
  116. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard.segment.rsc +1 -1
  117. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p.segment.rsc +1 -1
  118. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +2 -2
  119. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  120. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +1 -1
  121. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  122. package/.next/standalone/.next/server/app/dataset.html +1 -1
  123. package/.next/standalone/.next/server/app/dataset.rsc +2 -2
  124. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset/__PAGE__.segment.rsc +2 -2
  125. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset.segment.rsc +1 -1
  126. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app/dataset.segments/_full.segment.rsc +2 -2
  128. package/.next/standalone/.next/server/app/dataset.segments/_head.segment.rsc +1 -1
  129. package/.next/standalone/.next/server/app/dataset.segments/_index.segment.rsc +1 -1
  130. package/.next/standalone/.next/server/app/dataset.segments/_tree.segment.rsc +1 -1
  131. package/.next/standalone/.next/server/app/eval/trajectory.html +1 -1
  132. package/.next/standalone/.next/server/app/eval/trajectory.rsc +2 -2
  133. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory/__PAGE__.segment.rsc +2 -2
  134. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory.segment.rsc +1 -1
  135. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval.segment.rsc +1 -1
  136. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p.segment.rsc +1 -1
  137. package/.next/standalone/.next/server/app/eval/trajectory.segments/_full.segment.rsc +2 -2
  138. package/.next/standalone/.next/server/app/eval/trajectory.segments/_head.segment.rsc +1 -1
  139. package/.next/standalone/.next/server/app/eval/trajectory.segments/_index.segment.rsc +1 -1
  140. package/.next/standalone/.next/server/app/eval/trajectory.segments/_tree.segment.rsc +1 -1
  141. package/.next/standalone/.next/server/app/eval.html +1 -1
  142. package/.next/standalone/.next/server/app/eval.rsc +2 -2
  143. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval/__PAGE__.segment.rsc +2 -2
  144. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval.segment.rsc +1 -1
  145. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p.segment.rsc +1 -1
  146. package/.next/standalone/.next/server/app/eval.segments/_full.segment.rsc +2 -2
  147. package/.next/standalone/.next/server/app/eval.segments/_head.segment.rsc +1 -1
  148. package/.next/standalone/.next/server/app/eval.segments/_index.segment.rsc +1 -1
  149. package/.next/standalone/.next/server/app/eval.segments/_tree.segment.rsc +1 -1
  150. package/.next/standalone/.next/server/app/fault.html +1 -1
  151. package/.next/standalone/.next/server/app/fault.rsc +2 -2
  152. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault/__PAGE__.segment.rsc +2 -2
  153. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault.segment.rsc +1 -1
  154. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p.segment.rsc +1 -1
  155. package/.next/standalone/.next/server/app/fault.segments/_full.segment.rsc +2 -2
  156. package/.next/standalone/.next/server/app/fault.segments/_head.segment.rsc +1 -1
  157. package/.next/standalone/.next/server/app/fault.segments/_index.segment.rsc +1 -1
  158. package/.next/standalone/.next/server/app/fault.segments/_tree.segment.rsc +1 -1
  159. package/.next/standalone/.next/server/app/index.html +1 -1
  160. package/.next/standalone/.next/server/app/index.rsc +1 -1
  161. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  162. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  163. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  164. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  165. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  166. package/.next/standalone/.next/server/app/login.html +1 -1
  167. package/.next/standalone/.next/server/app/login.rsc +1 -1
  168. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +1 -1
  169. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  170. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +1 -1
  171. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  172. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  173. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  174. package/.next/standalone/.next/server/app/memory.html +1 -1
  175. package/.next/standalone/.next/server/app/memory.rsc +1 -1
  176. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory/__PAGE__.segment.rsc +1 -1
  177. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory.segment.rsc +1 -1
  178. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p.segment.rsc +1 -1
  179. package/.next/standalone/.next/server/app/memory.segments/_full.segment.rsc +1 -1
  180. package/.next/standalone/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  181. package/.next/standalone/.next/server/app/memory.segments/_index.segment.rsc +1 -1
  182. package/.next/standalone/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
  183. package/.next/standalone/.next/server/app/metrics.html +1 -1
  184. package/.next/standalone/.next/server/app/metrics.rsc +2 -2
  185. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics/__PAGE__.segment.rsc +2 -2
  186. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics.segment.rsc +1 -1
  187. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p.segment.rsc +1 -1
  188. package/.next/standalone/.next/server/app/metrics.segments/_full.segment.rsc +2 -2
  189. package/.next/standalone/.next/server/app/metrics.segments/_head.segment.rsc +1 -1
  190. package/.next/standalone/.next/server/app/metrics.segments/_index.segment.rsc +1 -1
  191. package/.next/standalone/.next/server/app/metrics.segments/_tree.segment.rsc +1 -1
  192. package/.next/standalone/.next/server/app/modelconfig/registry.html +1 -1
  193. package/.next/standalone/.next/server/app/modelconfig/registry.rsc +2 -2
  194. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry/__PAGE__.segment.rsc +2 -2
  195. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry.segment.rsc +1 -1
  196. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  197. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p.segment.rsc +1 -1
  198. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_full.segment.rsc +2 -2
  199. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_head.segment.rsc +1 -1
  200. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_index.segment.rsc +1 -1
  201. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_tree.segment.rsc +1 -1
  202. package/.next/standalone/.next/server/app/modelconfig/web-search.html +1 -1
  203. package/.next/standalone/.next/server/app/modelconfig/web-search.rsc +2 -2
  204. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search/__PAGE__.segment.rsc +2 -2
  205. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search.segment.rsc +1 -1
  206. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  207. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p.segment.rsc +1 -1
  208. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_full.segment.rsc +2 -2
  209. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_head.segment.rsc +1 -1
  210. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_index.segment.rsc +1 -1
  211. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_tree.segment.rsc +1 -1
  212. package/.next/standalone/.next/server/app/modelconfig.html +1 -1
  213. package/.next/standalone/.next/server/app/modelconfig.rsc +1 -1
  214. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig/__PAGE__.segment.rsc +1 -1
  215. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  216. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p.segment.rsc +1 -1
  217. package/.next/standalone/.next/server/app/modelconfig.segments/_full.segment.rsc +1 -1
  218. package/.next/standalone/.next/server/app/modelconfig.segments/_head.segment.rsc +1 -1
  219. package/.next/standalone/.next/server/app/modelconfig.segments/_index.segment.rsc +1 -1
  220. package/.next/standalone/.next/server/app/modelconfig.segments/_tree.segment.rsc +1 -1
  221. package/.next/standalone/.next/server/app/optapi.html +1 -1
  222. package/.next/standalone/.next/server/app/optapi.rsc +1 -1
  223. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi/__PAGE__.segment.rsc +1 -1
  224. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi.segment.rsc +1 -1
  225. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p.segment.rsc +1 -1
  226. package/.next/standalone/.next/server/app/optapi.segments/_full.segment.rsc +1 -1
  227. package/.next/standalone/.next/server/app/optapi.segments/_head.segment.rsc +1 -1
  228. package/.next/standalone/.next/server/app/optapi.segments/_index.segment.rsc +1 -1
  229. package/.next/standalone/.next/server/app/optapi.segments/_tree.segment.rsc +1 -1
  230. package/.next/standalone/.next/server/app/quality.html +1 -1
  231. package/.next/standalone/.next/server/app/quality.rsc +2 -2
  232. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality/__PAGE__.segment.rsc +2 -2
  233. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality.segment.rsc +1 -1
  234. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p.segment.rsc +1 -1
  235. package/.next/standalone/.next/server/app/quality.segments/_full.segment.rsc +2 -2
  236. package/.next/standalone/.next/server/app/quality.segments/_head.segment.rsc +1 -1
  237. package/.next/standalone/.next/server/app/quality.segments/_index.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/quality.segments/_tree.segment.rsc +1 -1
  239. package/.next/standalone/.next/server/app/security.html +1 -1
  240. package/.next/standalone/.next/server/app/security.rsc +1 -1
  241. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security/__PAGE__.segment.rsc +1 -1
  242. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security.segment.rsc +1 -1
  243. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p.segment.rsc +1 -1
  244. package/.next/standalone/.next/server/app/security.segments/_full.segment.rsc +1 -1
  245. package/.next/standalone/.next/server/app/security.segments/_head.segment.rsc +1 -1
  246. package/.next/standalone/.next/server/app/security.segments/_index.segment.rsc +1 -1
  247. package/.next/standalone/.next/server/app/security.segments/_tree.segment.rsc +1 -1
  248. package/.next/standalone/.next/server/app/skill-detail.html +1 -1
  249. package/.next/standalone/.next/server/app/skill-detail.rsc +1 -1
  250. package/.next/standalone/.next/server/app/skill-detail.segments/_full.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/skill-detail.segments/_head.segment.rsc +1 -1
  252. package/.next/standalone/.next/server/app/skill-detail.segments/_index.segment.rsc +1 -1
  253. package/.next/standalone/.next/server/app/skill-detail.segments/_tree.segment.rsc +1 -1
  254. package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail/__PAGE__.segment.rsc +1 -1
  255. package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail.segment.rsc +1 -1
  256. package/.next/standalone/.next/server/app/skill-eval/grayscale.html +2 -2
  257. package/.next/standalone/.next/server/app/skill-eval/grayscale.rsc +3 -3
  258. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale/__PAGE__.segment.rsc +2 -2
  259. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale.segment.rsc +1 -1
  260. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
  261. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p.segment.rsc +1 -1
  262. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_full.segment.rsc +3 -3
  263. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_head.segment.rsc +1 -1
  264. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_index.segment.rsc +1 -1
  265. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_tree.segment.rsc +1 -1
  266. package/.next/standalone/.next/server/app/skill-eval.html +1 -1
  267. package/.next/standalone/.next/server/app/skill-eval.rsc +4 -4
  268. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval/__PAGE__.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
  270. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p.segment.rsc +1 -1
  271. package/.next/standalone/.next/server/app/skill-eval.segments/_full.segment.rsc +4 -4
  272. package/.next/standalone/.next/server/app/skill-eval.segments/_head.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/skill-eval.segments/_index.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/skill-eval.segments/_tree.segment.rsc +1 -1
  275. package/.next/standalone/.next/server/app/skill-generator.html +1 -1
  276. package/.next/standalone/.next/server/app/skill-generator.rsc +2 -2
  277. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator/__PAGE__.segment.rsc +2 -2
  278. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator.segment.rsc +1 -1
  279. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p.segment.rsc +1 -1
  280. package/.next/standalone/.next/server/app/skill-generator.segments/_full.segment.rsc +2 -2
  281. package/.next/standalone/.next/server/app/skill-generator.segments/_head.segment.rsc +1 -1
  282. package/.next/standalone/.next/server/app/skill-generator.segments/_index.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/skill-generator.segments/_tree.segment.rsc +1 -1
  284. package/.next/standalone/.next/server/app/skill-history.html +1 -1
  285. package/.next/standalone/.next/server/app/skill-history.rsc +1 -1
  286. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history/__PAGE__.segment.rsc +1 -1
  287. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history.segment.rsc +1 -1
  288. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p.segment.rsc +1 -1
  289. package/.next/standalone/.next/server/app/skill-history.segments/_full.segment.rsc +1 -1
  290. package/.next/standalone/.next/server/app/skill-history.segments/_head.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/skill-history.segments/_index.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/skill-history.segments/_tree.segment.rsc +1 -1
  293. package/.next/standalone/.next/server/app/skill-opt.html +1 -1
  294. package/.next/standalone/.next/server/app/skill-opt.rsc +2 -2
  295. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt/__PAGE__.segment.rsc +2 -2
  296. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt.segment.rsc +1 -1
  297. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p.segment.rsc +1 -1
  298. package/.next/standalone/.next/server/app/skill-opt.segments/_full.segment.rsc +2 -2
  299. package/.next/standalone/.next/server/app/skill-opt.segments/_head.segment.rsc +1 -1
  300. package/.next/standalone/.next/server/app/skill-opt.segments/_index.segment.rsc +1 -1
  301. package/.next/standalone/.next/server/app/skill-opt.segments/_tree.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/skill-release.html +1 -1
  303. package/.next/standalone/.next/server/app/skill-release.rsc +1 -1
  304. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release/__PAGE__.segment.rsc +1 -1
  305. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p.segment.rsc +1 -1
  307. package/.next/standalone/.next/server/app/skill-release.segments/_full.segment.rsc +1 -1
  308. package/.next/standalone/.next/server/app/skill-release.segments/_head.segment.rsc +1 -1
  309. package/.next/standalone/.next/server/app/skill-release.segments/_index.segment.rsc +1 -1
  310. package/.next/standalone/.next/server/app/skill-release.segments/_tree.segment.rsc +1 -1
  311. package/.next/standalone/.next/server/app/skills.html +1 -1
  312. package/.next/standalone/.next/server/app/skills.rsc +1 -1
  313. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills/__PAGE__.segment.rsc +1 -1
  314. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills.segment.rsc +1 -1
  315. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p.segment.rsc +1 -1
  316. package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +1 -1
  317. package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  318. package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +1 -1
  319. package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
  320. package/.next/standalone/.next/server/app/trace.html +1 -1
  321. package/.next/standalone/.next/server/app/trace.rsc +2 -2
  322. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace/__PAGE__.segment.rsc +2 -2
  323. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace.segment.rsc +1 -1
  324. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p.segment.rsc +1 -1
  325. package/.next/standalone/.next/server/app/trace.segments/_full.segment.rsc +2 -2
  326. package/.next/standalone/.next/server/app/trace.segments/_head.segment.rsc +1 -1
  327. package/.next/standalone/.next/server/app/trace.segments/_index.segment.rsc +1 -1
  328. package/.next/standalone/.next/server/app/trace.segments/_tree.segment.rsc +1 -1
  329. package/.next/standalone/.next/server/chunks/[root-of-the-server]__29b88539._.js +1 -1
  330. package/.next/standalone/.next/server/chunks/[root-of-the-server]__571e2dc5._.js +1 -1
  331. package/.next/standalone/.next/server/chunks/[root-of-the-server]__aeca73e7._.js +1 -1
  332. package/.next/standalone/.next/server/chunks/_5041b697._.js +1 -1
  333. package/.next/standalone/.next/server/chunks/_73cb0d03._.js +7 -7
  334. package/.next/standalone/.next/server/chunks/_7ecc72d5._.js +1 -1
  335. package/.next/standalone/.next/server/chunks/_b2cfd29b._.js +1 -1
  336. package/.next/standalone/.next/server/chunks/_d36858e9._.js +3 -3
  337. package/.next/standalone/.next/server/chunks/src_lib_69eb724e._.js +1 -1
  338. package/.next/standalone/.next/server/chunks/ssr/_2e8ebb20._.js +1 -1
  339. package/.next/standalone/.next/server/chunks/ssr/_8e76c6f5._.js +1 -1
  340. package/.next/standalone/.next/server/chunks/ssr/_da30fab4._.js +1 -1
  341. package/.next/standalone/.next/server/chunks/ssr/_ddf088e7._.js +1 -1
  342. package/.next/standalone/.next/server/chunks/ssr/src_243b92c2._.js +1 -1
  343. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_eval_trajectory_page_tsx_052751f5._.js +1 -1
  344. package/.next/standalone/.next/server/chunks/ssr/src_app_(main)_skill-eval_page_tsx_d6828614._.js +1 -1
  345. package/.next/standalone/.next/server/chunks/ssr/src_f0e17888._.js +1 -1
  346. package/.next/standalone/.next/server/pages/404.html +1 -1
  347. package/.next/standalone/.next/server/pages/500.html +2 -2
  348. package/.next/standalone/.next/static/chunks/046dc786e7e13cc4.js +1 -0
  349. package/.next/standalone/.next/static/chunks/4812c235bebb18ff.js +1 -0
  350. package/.next/standalone/.next/static/chunks/49bb7f20fbab9dac.js +1 -0
  351. package/.next/standalone/.next/static/chunks/{150c66f334898c1b.js → 6f9e84819ba4f450.js} +1 -1
  352. package/.next/{static/chunks/9ce93159d07d77fc.js → standalone/.next/static/chunks/781813e2aa38a20f.js} +1 -1
  353. package/.next/{static/chunks/d12348f4045911d6.js → standalone/.next/static/chunks/84b0f0dc8be9bc7e.js} +1 -1
  354. package/.next/standalone/.next/static/chunks/8871e04c4e1fd6c4.js +1 -0
  355. package/.next/standalone/.next/static/chunks/e33bd5306b9b9d64.js +1 -0
  356. package/.next/standalone/package.json +1 -3
  357. package/.next/standalone/scripts/install.js +11 -0
  358. package/.next/standalone/scripts/postinstall.js +20 -6
  359. package/.next/standalone/scripts/start.js +8 -0
  360. package/.next/static/chunks/046dc786e7e13cc4.js +1 -0
  361. package/.next/static/chunks/4812c235bebb18ff.js +1 -0
  362. package/.next/static/chunks/49bb7f20fbab9dac.js +1 -0
  363. package/.next/static/chunks/{150c66f334898c1b.js → 6f9e84819ba4f450.js} +1 -1
  364. package/.next/{standalone/.next/static/chunks/9ce93159d07d77fc.js → static/chunks/781813e2aa38a20f.js} +1 -1
  365. package/.next/{standalone/.next/static/chunks/d12348f4045911d6.js → static/chunks/84b0f0dc8be9bc7e.js} +1 -1
  366. package/.next/static/chunks/8871e04c4e1fd6c4.js +1 -0
  367. package/.next/static/chunks/e33bd5306b9b9d64.js +1 -0
  368. package/package.json +1 -3
  369. package/scripts/install.js +11 -0
  370. package/scripts/postinstall.js +20 -6
  371. package/scripts/start.js +8 -0
  372. package/.next/standalone/.next/static/chunks/63fd190c8d8ebf18.js +0 -1
  373. package/.next/standalone/.next/static/chunks/7100361dbae12246.js +0 -1
  374. package/.next/standalone/.next/static/chunks/a9d1c1054358afe7.js +0 -1
  375. package/.next/standalone/.next/static/chunks/bc8ee6907cb73517.js +0 -1
  376. package/.next/standalone/.next/static/chunks/d2f0f5c92132648a.js +0 -1
  377. package/.next/static/chunks/63fd190c8d8ebf18.js +0 -1
  378. package/.next/static/chunks/7100361dbae12246.js +0 -1
  379. package/.next/static/chunks/a9d1c1054358afe7.js +0 -1
  380. package/.next/static/chunks/bc8ee6907cb73517.js +0 -1
  381. package/.next/static/chunks/d2f0f5c92132648a.js +0 -1
  382. /package/.next/standalone/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_buildManifest.js +0 -0
  383. /package/.next/standalone/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_clientMiddlewareManifest.json +0 -0
  384. /package/.next/standalone/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_ssgManifest.js +0 -0
  385. /package/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_buildManifest.js +0 -0
  386. /package/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_clientMiddlewareManifest.json +0 -0
  387. /package/.next/static/{xPAK0xEAbffUxaOdHM34l → _A9OyLyPRvkXox-SGvz3D}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[793016,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(50944),e=a.i(729936),f=a.i(943408),g=a.i(575110);let h=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"]),i={ab:"A/B 测试",trace:"用例分析",recall:"召回分析",static:"静态合规"};function j(a){let b;if((a.ab.delta??0)<0&&(a.ab.pValue??1)<.05){let b=null==a.ab.delta?"":`(${a.ab.delta>0?"+":""}${a.ab.delta} 分)`;return{problem:`A/B 测试显示启用 Skill 后结果显著回退${b},当前版本不建议上线。`,suggestion:"建议优先排查 A/B 回退原因,再结合低分维度做针对性修正。",mode:"fallback"}}if(a.overall.coveredCount<a.overall.totalCount){let b=a.overall.missingDimensions.map(a=>i[a]).filter(Boolean),c=b.length>0?`,缺少 ${b.join("、")} 结果`:"";return{problem:`当前仅有 ${a.overall.coveredCount}/${a.overall.totalCount} 个维度完成评测${c},数据覆盖仍不完整。`,suggestion:"建议先补齐可运行维度,再判断是否需要进入 Skill 优化。",mode:"fallback"}}let c=(b=[],a.ab.hasResult&&null!=a.ab.scoreB&&b.push({key:"ab",label:i.ab,score:a.ab.scoreB}),a.trace.hasResult&&null!=a.trace.score&&b.push({key:"trace",label:i.trace,score:a.trace.score}),a.recall.hasResult&&null!=a.recall.score&&b.push({key:"recall",label:i.recall,score:a.recall.score}),a.static.hasResult&&null!=a.static.score&&b.push({key:"static",label:i.static,score:a.static.score}),b.sort((a,b)=>a.score-b.score),b[0]||null);return c?"trace"===c.key?{problem:`当前主要短板集中在${c.label},已评测 Trace 中有 ${a.trace.highDeviationCount} 条高偏离。`,suggestion:"建议优先进入用例分析详情,先处理高偏离 Trace 和低分场景。",mode:"fallback"}:"recall"===c.key?{problem:`当前主要短板集中在${c.label},触发集通过率仅 ${Math.round(a.recall.passRate??0)}%。`,suggestion:"建议优先补强召回触发集与路由边界,再重新验证命中率表现。",mode:"fallback"}:"static"===c.key?{problem:`当前主要短板集中在${c.label},仍有 ${a.static.issueCount} 项待处理问题。`,suggestion:"建议优先修复静态合规问题,再复测整体健康分变化。",mode:"fallback"}:{problem:`当前主要短板集中在${c.label},已成为综合分的主要拖累。`,suggestion:"建议优先进入对应详情页,先处理最影响分数的问题。",mode:"fallback"}:{problem:"当前还没有足够的评测结果,暂时无法形成稳定诊断。",suggestion:"建议先运行至少一个可用维度,再查看诊断与后续优化建议。",mode:"fallback"}}var k=a.i(99468),l=a.i(467952);let m=[676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,15056327351493116e-23];function n(a){return a.reduce((a,b)=>a+b,0)/a.length}function o(a,b){return a.length<2?0:a.reduce((a,c)=>a+(c-b)**2,0)/(a.length-1)}function p(a){if(a<.5)return Math.log(Math.PI)-Math.log(Math.sin(Math.PI*a))-p(1-a);let b=.9999999999998099,c=a-1;for(let a=0;a<m.length;a+=1)b+=m[a]/(c+a+1);let d=c+m.length-.5;return .5*Math.log(2*Math.PI)+(c+.5)*Math.log(d)-d+Math.log(b)}function q(a,b,c){let d=a+b,e=a+1,f=a-1,g=1,h=1-d*c/e;1e-30>Math.abs(h)&&(h=1e-30);let i=h=1/h;for(let j=1;j<=200;j+=1){let k=2*j,l=j*(b-j)*c/((f+k)*(a+k));1e-30>Math.abs(h=1+l*h)&&(h=1e-30),1e-30>Math.abs(g=1+l/g)&&(g=1e-30),i*=(h=1/h)*g,1e-30>Math.abs(h=1+(l=-(a+j)*(d+j)*c/((a+k)*(e+k)))*h)&&(h=1e-30),1e-30>Math.abs(g=1+l/g)&&(g=1e-30);let m=(h=1/h)*g;if(i*=m,3e-7>Math.abs(m-1))break}return i}var r=a.i(106927);a.i(249869);var s=a.i(331617),t=a.i(72403);function u({label:a,placeholder:d,options:e,selectedIds:f,onChange:g,accent:h="#2563eb",emptyHint:i,disabled:j}){let[k,l]=(0,c.useState)(!1),m=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(!k)return;let a=a=>{m.current&&!m.current.contains(a.target)&&l(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[k]);let n=e.filter(a=>f.includes(a.id)).map(a=>a.name),o=0===n.length?d||"请选择":n.length<=2?n.join("、"):`${n.slice(0,2).join("、")} 等 ${n.length} 项`,p=a=>{g(f.includes(a)?f.filter(b=>b!==a):[...f,a])};return(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,b.jsx)("span",{style:{fontSize:11,fontWeight:700,color:"#52525b",textTransform:"uppercase",letterSpacing:"0.04em",minWidth:52},children:a}),(0,b.jsxs)("div",{ref:m,style:{position:"relative",flex:1,minWidth:0},children:[(0,b.jsxs)("button",{type:"button",disabled:j,onClick:()=>!j&&l(a=>!a),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,padding:"6px 10px",borderRadius:6,fontSize:12.5,cursor:j?"not-allowed":"pointer",border:"1px solid "+(f.length?h:"#d4d4d8"),background:j?"#f4f4f5":"#fff",color:f.length?"#27272a":"#a1a1aa",textAlign:"left"},children:[(0,b.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o}),(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:6,flexShrink:0},children:[f.length>0&&(0,b.jsx)("span",{style:{fontSize:10.5,fontWeight:700,color:h,background:h+"14",borderRadius:99,padding:"0 7px"},children:f.length}),(0,b.jsx)("span",{style:{color:"#a1a1aa",fontSize:10},children:k?"▲":"▼"})]})]}),k&&(0,b.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===e.length&&(0,b.jsx)("div",{style:{padding:"10px 12px",fontSize:12,color:"#a1a1aa"},children:i||"暂无选项"}),e.map(a=>{let c=f.includes(a.id);return(0,b.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>p(a.id),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),p(a.id))},style:{display:"flex",alignItems:"center",gap:8,padding:"7px 9px",borderRadius:5,cursor:"pointer",fontSize:12.5,background:c?h+"0f":"transparent",color:"#27272a"},children:[(0,b.jsx)("span",{style:{width:15,height:15,borderRadius:4,flexShrink:0,border:"1.5px solid "+(c?h:"#c4c4cc"),background:c?h:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:10,fontWeight:700},children:c?"✓":""}),(0,b.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.name}),a.meta&&(0,b.jsx)("span",{style:{fontSize:10.5,color:"#a1a1aa",flexShrink:0},children:a.meta})]},a.id)})]})]})]})}function v({tasks:a,selectedRunId:d,selectedTitle:e,onSelect:f,onCreateNew:g,locale:h="zh"}){let i="zh"===h,[j,k]=(0,c.useState)(!1),l=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(!j)return;let a=a=>{l.current&&!l.current.contains(a.target)&&k(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[j]);let m=a.find(a=>a.runId===d),n=d?m?.taskTitle||e||d.slice(0,8):i?"选择 / 新建评测任务":"Select / new eval task";return(0,b.jsxs)("div",{ref:l,style:{position:"relative",display:"inline-flex",alignItems:"center",gap:6},children:[(0,b.jsxs)("button",{type:"button",onClick:()=>k(a=>!a),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"5px 11px",borderRadius:6,fontSize:12,fontWeight:600,cursor:"pointer",border:"1px solid "+(d?"rgba(126,34,206,.3)":"#D4D4D8"),background:d?"#F5E8FF":"#fff",color:d?"#7E22CE":"#52525B",maxWidth:260,overflow:"hidden"},title:d?`评测任务 ${d}`:void 0,children:[(0,b.jsxs)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["📋 ",n]}),(0,b.jsx)("span",{style:{color:"#A1A1AA",fontSize:10},children:j?"▲":"▼"})]}),d&&(0,b.jsx)("button",{type:"button",onClick:()=>window.open(`/eval/run/${encodeURIComponent(d)}`,"_blank"),style:{padding:"4px 9px",background:"#EEF2FF",border:"1px solid rgba(79,70,229,.25)",borderRadius:5,fontSize:11.5,fontWeight:600,color:"#4F46E5",cursor:"pointer"},title:i?"打开评测任务详情":"Open eval task",children:i?"查看":"View"}),j&&(0,b.jsxs)("div",{style:{position:"absolute",top:"calc(100% + 4px)",right:0,zIndex:60,minWidth:300,background:"#fff",border:"1px solid #E4E4E7",borderRadius:8,boxShadow:"0 8px 24px rgba(0,0,0,.12)",maxHeight:340,overflowY:"auto",padding:4},children:[(0,b.jsxs)("button",{type:"button",onClick:()=>{k(!1),g()},style:{width:"100%",textAlign:"left",padding:"8px 10px",borderRadius:5,border:"1px dashed #C4B5FD",background:"#FAF5FF",color:"#7E22CE",fontSize:12.5,fontWeight:600,cursor:"pointer",marginBottom:4},children:["+ ",i?"新建评测任务":"New eval task"]}),0===a.length?(0,b.jsx)("div",{style:{padding:"8px 10px",fontSize:12,color:"#A1A1AA"},children:i?"暂无历史评测任务":"No eval tasks yet"}):a.map(a=>{let c=a.runId===d;return(0,b.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>{k(!1),f({runId:a.runId,taskTitle:a.taskTitle})},onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),k(!1),f({runId:a.runId,taskTitle:a.taskTitle}))},style:{padding:"8px 10px",borderRadius:5,cursor:"pointer",background:c?"rgba(126,34,206,.08)":"transparent"},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:12.5,fontWeight:600,color:"#27272A"},children:[c&&(0,b.jsx)("span",{style:{color:"#7E22CE"},children:"✓"}),(0,b.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.taskTitle||a.runId.slice(0,8)})]}),(0,b.jsxs)("div",{style:{fontSize:11,color:"#A1A1AA",marginTop:2},children:[i?"共":""," ",a.traceCount??0," ",i?"条":"records","number"==typeof a.doneCount?` \xb7 ${i?"已完成":"done"} ${a.doneCount}`:"",a.runningCount?` \xb7 ${i?"进行中":"running"} ${a.runningCount}`:"",a.createdAt?` \xb7 ${new Date(a.createdAt).toLocaleDateString()}`:""]})]},a.runId)})]})]})}function w(a){return"number"!=typeof a?"#B8B6AE":a>=80?"#16A34A":a>=60?"#D97706":"#DC2626"}let x={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 y({tone:a,label:c,title:d}){let e=x[a];return(0,b.jsxs)("span",{title:d,style:{display:"inline-flex",alignItems:"center",gap:5,padding:"2px 9px",borderRadius:99,fontSize:11.5,fontWeight:600,color:e.color,background:e.bg,cursor:d?"help":"default"},children:["running"===a&&(0,b.jsx)("span",{style:{width:8,height:8,borderRadius:99,border:"1.5px solid "+e.color,borderTopColor:"transparent",display:"inline-block",animation:"erspin 0.7s linear infinite"}}),c]})}function z({records:a,locale:d="zh",title:e,emptyHint:f,onRetry:g,onDelete:h,onRowClick:i}){let j="zh"===d,k=!!g||!!h,l=g&&h?92:50*!!k,m="eval-exec-table-cols-v2",n={caseW:"1.1fr",execW:"1.4fr",evalW:"1.6fr"},o={caseW:120,execW:150,evalW:160},[p,q]=c.default.useState({caseW:null,execW:null,evalW:null});c.default.useEffect(()=>{try{let a=localStorage.getItem(m);if(a){let b=JSON.parse(a);if(b&&"object"==typeof b){let a=a=>"number"==typeof a&&Number.isFinite(a)&&a>0?a:null;q({caseW:a(b.caseW),execW:a(b.execW),evalW:a(b.evalW)})}}}catch{}},[]);let r=a=>null!=p[a]?`${p[a]}px`:n[a],s=[78,62,52,52,...l?[l]:[]],t=[r("caseW"),r("execW"),r("evalW"),...s.map(a=>`${a}px`)].join(" "),u=3+s.length,v=(p.caseW??o.caseW)+(p.execW??o.execW)+(p.evalW??o.evalW)+s.reduce((a,b)=>a+b,0)+(u-1)*12+24,x=a=>(0,b.jsx)("span",{onMouseDown:b=>{b.preventDefault(),b.stopPropagation();let c=b.currentTarget.parentElement,d=c?.offsetWidth??p[a]??o[a],e=b.clientX,f=b=>{let c=Math.max(80,d+(b.clientX-e));q(b=>({...b,[a]:c}))},g=()=>{document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",g),document.body.style.cursor="",q(a=>{try{localStorage.setItem(m,JSON.stringify(a))}catch{}return a})};document.addEventListener("mousemove",f),document.addEventListener("mouseup",g),document.body.style.cursor="col-resize"},onClick:a=>a.stopPropagation(),title:j?"拖拽调整列宽":"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,b.jsx)("span",{style:{width:2,height:"60%",alignSelf:"center",background:"#D4D4D8",borderRadius:1}})}),z={position:"relative",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};return(0,b.jsxs)("div",{style:{border:"1px solid #E7E5E4",borderRadius:8,overflow:"hidden",background:"#fff"},children:[(0,b.jsx)("style",{children:"@keyframes erspin{to{transform:rotate(360deg)}}"}),e&&(0,b.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"10px 12px",background:"#FAFAF7",borderBottom:"1px solid #E7E5E4"},children:[(0,b.jsx)("div",{style:{fontWeight:700,color:"#2C2C2A",fontSize:13},children:e}),(0,b.jsxs)("span",{style:{fontSize:12,color:"#888780"},children:[a.length," ",j?"条":"records"]})]}),0===a.length?(0,b.jsx)("div",{style:{padding:14,color:"#888780",fontSize:13},children:f||(j?"暂无评测记录":"No evaluation records yet")}):(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",maxHeight:460,overflowY:"auto",overflowX:"auto"},children:[(0,b.jsxs)("div",{style:{display:"grid",gridTemplateColumns:t,gap:12,padding:"8px 12px",background:"#FAFAF7",borderBottom:"1px solid #E7E5E4",fontSize:11,fontWeight:700,color:"#5F5E5A",position:"sticky",top:0,zIndex:1,minWidth:v},children:[(0,b.jsxs)("div",{style:z,children:[j?"用例":"Case",x("caseW")]}),(0,b.jsxs)("div",{style:z,children:[j?"执行 Trace":"Execution trace",x("execW")]}),(0,b.jsxs)("div",{style:z,children:[j?"评估 Trace":"Eval trace",x("evalW")]}),(0,b.jsx)("div",{children:j?"状态":"Status"}),(0,b.jsx)("div",{children:j?"评测结果":"Result"}),(0,b.jsx)("div",{style:{textAlign:"right"},children:j?"结果分":"Result"}),(0,b.jsx)("div",{style:{textAlign:"right"},children:j?"轨迹分":"Traj"}),k&&(0,b.jsx)("div",{style:{textAlign:"center"},children:j?"操作":"Action"})]}),a.map(a=>{let c,e,{tone:f,label:l}=function(a,b){let c="zh"===b;switch(a){case"pending":case"queued":return{tone:"pending",label:c?"排队中":"Queued"};case"executing":return{tone:"running",label:c?"执行中":"Executing"};case"executed":return{tone:"pending",label:c?"待评测":"Awaiting evaluation"};case"running":case"evaluating":return{tone:"running",label:c?"评测中":"Evaluating"};case"partial":return{tone:"partial",label:c?"部分评测":"Partial"};case"done":case"pass":return{tone:"done",label:c?"已评测":"Evaluated"};case"fail":case"failed":return{tone:"fail",label:c?"失败":"Failed"};default:return{tone:"pending",label:a}}}(a.status,d);return(0,b.jsxs)("div",{onClick:i?()=>i(a):void 0,style:{display:"grid",gridTemplateColumns:t,gap:12,alignItems:"center",padding:"10px 12px",borderTop:"1px solid #F1EFE8",fontSize:12,cursor:i?"pointer":"default",minWidth:v},children:[(0,b.jsx)("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},title:a.caseTitle||a.caseLabel,children:(0,b.jsx)("span",{style:{fontSize:12,color:"#2C2C2A"},children:a.caseLabel||"—"})}),(0,b.jsx)("div",{style:{minWidth:0},children:a.executionTraceId?(0,b.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:j?"查看链路追踪":"View trace",onClick:b=>{b.stopPropagation(),window.open(`/trace?taskId=${encodeURIComponent(a.executionTraceId)}`,"_blank")},onMouseEnter:a=>a.currentTarget.style.textDecoration="underline",onMouseLeave:a=>a.currentTarget.style.textDecoration="none",children:["🔗 ",a.executionTraceId]}):(0,b.jsx)("span",{style:{color:"#B8B6AE"},children:"—"})}),(0,b.jsx)("div",{style:{minWidth:0,display:"flex",flexDirection:"column",gap:3},children:(c=[],(a.trajEvalTraceId&&c.push({label:j?"轨迹":"Traj",id:a.trajEvalTraceId,color:"#7E22CE"}),a.resultEvalTraceId&&c.push({label:j?"结果":"Result",id:a.resultEvalTraceId,color:"#185FA5"}),0===c.length&&a.evaluationTraceId&&c.push({label:j?"评估":"Eval",id:a.evaluationTraceId,color:"#7E22CE"}),0===c.length)?(0,b.jsx)("span",{style:{color:"#B8B6AE"},children:"—"}):c.map(a=>(0,b.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:j?`查看${a.label}评估器轨迹(评测怎么判的)`:`View ${a.label} evaluator trace`,onClick:b=>{b.stopPropagation(),window.open(`/trace?taskId=${encodeURIComponent(a.id)}`,"_blank")},onMouseEnter:a=>a.currentTarget.style.textDecoration="underline",onMouseLeave:a=>a.currentTarget.style.textDecoration="none",children:[(0,b.jsx)("span",{style:{flexShrink:0,fontSize:9.5,fontWeight:700,color:a.color,background:a.color+"14",borderRadius:3,padding:"0 4px",lineHeight:"15px"},children:a.label}),(0,b.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:"ui-monospace, monospace",fontSize:11,color:a.color},children:a.id})]},a.label)))}),(0,b.jsx)("div",{children:(0,b.jsx)(y,{tone:f,label:l,title:"fail"===f?a.errorMsg:void 0})}),(0,b.jsx)("div",{children:(()=>{if(!a.evaluatorRunId||!a.executionTraceId||!a.resultId)return(0,b.jsx)("span",{style:{color:"#B8B6AE",fontSize:11},children:"—"});let c=`/eval/trajectory/${encodeURIComponent(a.executionTraceId)}?runId=${encodeURIComponent(a.evaluatorRunId)}${a.datasetId?`&datasetId=${encodeURIComponent(a.datasetId)}`:""}&resultId=${encodeURIComponent(a.resultId)}`;return(0,b.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:j?"查看该 trace 的评测结果详情":"View this trace's evaluation result",onClick:a=>{a.stopPropagation(),window.open(c,"_blank")},children:["📋 ",j?"查看":"View"]})})()}),(0,b.jsx)("div",{style:{textAlign:"right",fontWeight:700,fontFamily:"ui-monospace, monospace",color:w(a.resultScore)},children:"number"==typeof a.resultScore?Math.round(a.resultScore):"—"}),(0,b.jsx)("div",{style:{textAlign:"right",fontWeight:700,fontFamily:"ui-monospace, monospace",color:w(a.trajScore)},children:"number"==typeof a.trajScore?Math.round(a.trajScore):"—"}),k&&(e="running"===f||"pending"===f||a.actionsDisabled,(0,b.jsxs)("div",{style:{display:"flex",gap:4,justifyContent:"center"},children:[g&&(0,b.jsx)("button",{className:"v2-action-btn",style:{fontSize:11,padding:"3px 8px",border:"1px solid #D4D4D8",background:"#fff",borderRadius:4,cursor:e?"not-allowed":"pointer",color:e?"#B8B6AE":"#52525B",opacity:e?.6:1},disabled:e,title:e?j?"当前记录暂不可重试":"Retry is unavailable":j?"重新评测这条":"Re-evaluate",onClick:b=>{b.stopPropagation(),e||g(a)},children:j?"重试":"Retry"}),h&&(0,b.jsx)("button",{className:"v2-action-btn",style:{fontSize:11,padding:"3px 8px",border:"1px solid "+(e?"#E7E5E4":"#F0C5C5"),background:"#fff",borderRadius:4,cursor:e?"not-allowed":"pointer",color:e?"#B8B6AE":"#DC2626",opacity:e?.6:1},disabled:e,title:e?j?"当前记录暂不可删除":"Delete is unavailable":j?"从评测执行列表删除这条":"Delete this record",onClick:b=>{b.stopPropagation(),e||h(a)},children:j?"删除":"Delete"})]}))]},a.id)})]})]})}let A=new Map;function B(a,b,d=0){let e=a&&b?`${a}\u0000${b}`:"",[f,h]=(0,c.useState)({scopeKey:"",map:new Map});return(0,c.useEffect)(()=>{if(!a||!b)return;let c=!1,f=0,i=async()=>{let d=++f;try{let i=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(a)}&runId=${encodeURIComponent(b)}&latestByCase=1&limit=500`),j=await i.json(),k=j?.results||[],l=new Map;for(let a of k){let b=a.taskId||a.executionId;if(!b||a.watchPlaceholder||a.placeholderOnly||l.has(String(b)))continue;let c=a.rawAnalysis&&"object"==typeof a.rawAnalysis?a.rawAnalysis:{},d=c.resultEvaluation&&"object"==typeof c.resultEvaluation?c.resultEvaluation:{},e="string"==typeof c.evaluatorSessionId&&c.evaluatorSessionId.trim()?c.evaluatorSessionId.trim():"",f="string"==typeof d.evaluatorSessionId&&d.evaluatorSessionId.trim()?d.evaluatorSessionId.trim():"",g=e||f||"";l.set(String(b),{resultId:a.id||void 0,caseId:a.caseId||void 0,taskId:String(b),evaluationTraceId:g||void 0,resultEvalTraceId:f||void 0,trajEvalTraceId:e||void 0,datasetId:a.datasetId||void 0,status:a.status,resultScore:"number"==typeof a.resultEvaluationScore?Math.round(100*a.resultEvaluationScore):null,trajScore:"number"==typeof a.trajectoryScore?Math.round(100*a.trajectoryScore):null,errorMessage:a.errorMessage||void 0})}c||d!==f||h({scopeKey:e,map:l})}catch{}};if(i(),d>0){let a=setInterval(i,d);return()=>{c=!0,clearInterval(a)}}return()=>{c=!0}},[a,b,d,e]),f.scopeKey===e?f.map:A}var C=a.i(478614);function D({text:a}){let[d,e]=(0,c.useState)(null);return a.length>80?(0,b.jsxs)("span",{style:{cursor:"default"},onMouseEnter:a=>e({x:a.clientX,y:a.clientY}),onMouseMove:a=>e({x:a.clientX,y:a.clientY}),onMouseLeave:()=>e(null),children:[a.slice(0,80),"…",d&&(0,b.jsx)("div",{className:"cell-tooltip-bubble",style:{left:Math.min(d.x+14,840),top:d.y+18},children:a})]}):(0,b.jsx)(b.Fragment,{children:a})}let E=[...C.presetEvaluators.filter(a=>"ready"===a.status).map(a=>({id:a.id,name:a.name}))];function F({newTaskTrigger:a,historyPanelTrigger:e,topConfigSlot:h,headerActions:i,controlled:j,controlledDatasetIds:k,controlledEvaluatorIds:m,controlledEvalBatchId:n,controlledEvalBatchTitle:o,controlledSkillId:p,controlledVersionId:q,hideExecAndResult:t,onExecutionRecordsChange:w}){let x,y,A,C,F,H,{locale:I}=(0,r.useLocale)(),{user:J}=(0,f.useAuth)(),K=(0,d.useRouter)(),[L,M]=(0,c.useState)(null),[N,O]=(0,c.useState)([]),[P,Q]=(0,c.useState)(!1),[R,S]=(0,c.useState)(""),[T,U]=(0,c.useState)(""),[V,W]=(0,c.useState)(!1),[X,Y]=(0,c.useState)(!1),[Z,$]=(0,c.useState)([]),[_,aa]=(0,c.useState)([]),[ab,ac]=(0,c.useState)([]),[ad,ae]=(0,c.useState)([]),[af,ag]=(0,c.useState)(""),[ah,ai]=(0,c.useState)(""),[aj,ak]=(0,c.useState)(!1),[al,am]=(0,c.useState)(!1),an=(0,c.useRef)(null),ao=(0,c.useRef)([]),[ap,aq]=(0,c.useState)(""),[ar,as]=(0,c.useState)(""),[at,au]=(0,c.useState)([]),[av,aw]=(0,c.useState)([]),[ax,ay]=(0,c.useState)("preset-agent-trace-quality"),[az,aA]=(0,c.useState)(()=>E.map(a=>a.id)),[aB,aC]=(0,c.useState)(!1),[aD,aE]=(0,c.useState)([]),aF=(0,c.useCallback)(async()=>{if(!J)return void aE([]);try{let a=await (0,g.apiFetch)(`/api/eval/trajectory/runs?user=${encodeURIComponent(J)}&limit=50&latestByCase=1&excludeGrayscale=1`),b=await a.json();Array.isArray(b?.runs)&&aE(b.runs.map(a=>({runId:a.runId,taskTitle:a.taskTitle,traceCount:a.traceCount,doneCount:a.doneCount,runningCount:a.runningCount,createdAt:a.createdAt})))}catch{}},[J]);(0,c.useEffect)(()=>{aF()},[aF]),(0,c.useEffect)(()=>{j&&void 0!==k&&ae(k)},[j,k]),(0,c.useEffect)(()=>{j&&void 0!==m&&aA(m)},[j,m]),(0,c.useEffect)(()=>{j&&(void 0!==n&&aq(n),void 0!==o&&as(o))},[j,n,o]),(0,c.useEffect)(()=>{j&&(void 0!==p&&ag(p),void 0!==q&&ai(q))},[j,p,q]);let aG=B(J,ap||void 0,5e3),[aH,aI]=(0,c.useState)("dataset"),[aJ,aK]=(0,c.useState)(!1),[aL,aM]=(0,c.useState)(""),[aN,aO]=(0,c.useState)("7d"),[aP,aQ]=(0,c.useState)(""),[aR,aS]=(0,c.useState)([]),[aT,aU]=(0,c.useState)(!1),[aV,aW]=(0,c.useState)({}),[aX,aY]=(0,c.useState)([]),[aZ,a$]=(0,c.useState)(!1),[a_,a0]=(0,c.useState)(!1),[a1,a2]=(0,c.useState)(!1),[a3,a4]=(0,c.useState)(!1),[a5,a6]=(0,c.useState)(!1),[a7,a8]=(0,c.useState)(!1),[a9,ba]=(0,c.useState)(!0),[bb,bc]=(0,c.useState)(!1),[bd,be]=(0,c.useState)(!0);(0,c.useRef)(null),(0,c.useRef)(null);let[bf,bg]=(0,c.useState)({top:0,left:0}),[bh,bi]=(0,c.useState)({top:0,left:0}),[bj,bk]=(0,c.useState)("all"),[bl,bm]=(0,c.useState)(""),[bn,bo]=(0,c.useState)([]);(0,c.useEffect)(()=>{ao.current=bn},[bn]),(0,c.useEffect)(()=>()=>{an.current&&clearInterval(an.current)},[]);let[bp,bq]=(0,c.useState)({}),br=(0,c.useRef)({}),bs=(0,c.useRef)({}),bt=(0,c.useRef)(null),bu=(0,c.useRef)(!1),bv=(0,c.useRef)(null),bw=()=>{let a=new Date;return`评测任务 ${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}`};(0,c.useEffect)(()=>{J&&(0,g.apiFetch)(`/api/debug/batch-tasks?user=${encodeURIComponent(J)}`).then(a=>a.json()).then(a=>{if(Array.isArray(a)&&a.length>0){let b=a[0],c=b.configJson||{},d=j&&((c.skillId||"")!==(p||"")||(c.versionId||"")!==(q||"")),e=d?{...b,configJson:{...c,skillId:p||"",versionId:q||""},caseStatesJson:{},traceEvalStatesJson:{}}:b;O([e,...a.slice(1)]),M(e),j||(ae(c.datasetIds||[]),c.versionId&&(bv.current=c.versionId),ag(c.skillId||""),ai(c.versionId||""),c.sourceMode&&aI(c.sourceMode),c.evaluatorId&&ay(c.evaluatorId),Array.isArray(c.evaluators)&&c.evaluators.length>0&&aA(c.evaluators),c.traceSkillId&&aM(c.traceSkillId),c.traceTimeRange&&aO(c.traceTimeRange),c.traceDatasetId&&aQ(c.traceDatasetId),aq(c.evaluationBatchId||""),as(c.evaluationBatchTitle||""),au(Array.isArray(c.evaluationBatchEvaluators)?c.evaluationBatchEvaluators:[])),U(c.taskDescription||""),bq(e.caseStatesJson||{}),aW(e.traceEvalStatesJson||{}),d&&(0,g.apiFetch)(`/api/debug/batch-tasks/${b.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,configJson:e.configJson,caseStatesJson:{},traceEvalStatesJson:{}})}).catch(()=>{})}else j?(0,g.apiFetch)("/api/debug/batch-tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,taskName:bw()})}).then(a=>a.ok?a.json():null).then(a=>{a?.id&&(M(a),O([a]),Q(!1))}).catch(()=>{}):(S(bw()),Q(!0))}).catch(()=>{j||(S(bw()),Q(!0))})},[J,j,p,q]);let bx=(0,c.useCallback)(async(a,b,c,d)=>{if(!J||!a)return;let e={user:J};void 0!==b&&(e.configJson=b),void 0!==c&&(e.caseStatesJson=c),void 0!==d&&(e.traceEvalStatesJson=d);try{await (0,g.apiFetch)(`/api/debug/batch-tasks/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}catch{}},[J]),by=(0,c.useCallback)(a=>{ak(!1);let b=bR.current;if(!b)return;aq(a.evaluatorRunId),as(a.taskTitle),au(a.selectedEvaluators);let c=b.configJson||{},d={datasetIds:c.datasetIds||[],skillId:c.skillId||"",versionId:c.versionId||"",taskDescription:c.taskDescription,sourceMode:c.sourceMode,evaluatorId:c.evaluatorId,traceSkillId:c.traceSkillId,traceTimeRange:c.traceTimeRange,traceDatasetId:c.traceDatasetId,evaluators:c.evaluators??az,evaluationBatchId:a.evaluatorRunId,evaluationBatchTitle:a.taskTitle,evaluationBatchEvaluators:a.selectedEvaluators};bx(b.id,d),M(a=>a?{...a,configJson:{...a.configJson||{},...d}}:a),aF()},[bx,az,aF]),bz=(0,c.useCallback)(a=>{let b=bR.current;if(!b)return;aq(a.runId),as(a.taskTitle||"");let c=b.configJson||{},d={datasetIds:c.datasetIds||[],skillId:c.skillId||"",versionId:c.versionId||"",taskDescription:c.taskDescription,sourceMode:c.sourceMode,evaluatorId:c.evaluatorId,evaluators:c.evaluators??az,traceSkillId:c.traceSkillId,traceTimeRange:c.traceTimeRange,traceDatasetId:c.traceDatasetId,evaluationBatchId:a.runId,evaluationBatchTitle:a.taskTitle||"",evaluationBatchEvaluators:c.evaluationBatchEvaluators};bx(b.id,d),M(a=>a?{...a,configJson:{...a.configJson||{},...d}}:a)},[bx,az]),bA=async()=>{if(R.trim()&&J){Y(!0);try{let a=await (0,g.apiFetch)("/api/debug/batch-tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,taskName:R.trim()})});if(a.ok){let b=await a.json();T.trim()&&(await (0,g.apiFetch)(`/api/debug/batch-tasks/${b.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,configJson:{taskDescription:T.trim()}})}).catch(()=>{}),b.configJson={...b.configJson||{},taskDescription:T.trim()}),M(b),O(a=>[b,...a]),Q(!1),S(""),ae([]),ag(""),ai(""),bq({})}}catch{}finally{Y(!1)}}},bB=()=>{S(bw()),U(""),Q(!0),a2(!1),aq(""),as(""),au([])},bC=(0,c.useRef)(a);(0,c.useEffect)(()=>{a!==bC.current&&(bC.current=a,bB())},[a]);let bD=(0,c.useRef)(e);(0,c.useEffect)(()=>{e!==bD.current&&(bD.current=e,a4(!0))},[e]),(0,c.useEffect)(()=>{J&&Promise.all([(0,g.apiFetch)(`/api/agent-datasets?user=${encodeURIComponent(J)}`).then(a=>a.json()),(0,g.apiFetch)(`/api/skills?user=${encodeURIComponent(J)}`).then(a=>a.json()),(0,g.apiFetch)(`/api/user-evaluators?user=${encodeURIComponent(J)}`).then(a=>a.json()).catch(()=>[])]).then(([a,b,c])=>{Array.isArray(a)&&$(a),Array.isArray(b)&&aa(b.map(a=>({id:a.id,name:a.name}))),Array.isArray(c)&&aw(c.map(a=>({id:a.id,name:a.name})))}).catch(()=>{})},[J]),(0,c.useEffect)(()=>{if(!J||!af){ac([]),ai("");return}(0,g.apiFetch)(`/api/skills/${af}/versions?user=${encodeURIComponent(J)}`).then(a=>a.json()).then(a=>{if(Array.isArray(a)){if(ac(a),j)return void ai(q||"");let b=bv.current;if(b&&a.find(a=>a.id===b))bv.current=null,ai(b);else{bv.current=null;let b=a.find(a=>a.isCurrent);ai(b?b.id:a[0]?.id||"")}}}).catch(()=>{})},[J,af,j,q]),(0,c.useEffect)(()=>{if("trace"!==aH||!J||!aL)return void aS([]);aU(!0);let a=_.find(a=>a.id===aL),b=new URLSearchParams({user:J});a&&b.set("skill",a.name);let c="1d"===aN?1:"3d"===aN?3:7;b.set("since",String(Date.now()-864e5*c)),b.set("fields","light"),(0,g.apiFetch)(`/api/observe/data?${b.toString()}`).then(a=>a.json()).then(a=>{Array.isArray(a)&&aS(a.slice(0,100))}).catch(()=>{}).finally(()=>aU(!1))},[aH,J,aL,aN,_]),(0,c.useEffect)(()=>{if(J)for(let[a,b]of Object.entries(aV)){if("evaluating"!==b.status||!b.evaluatorRunId||!b.taskId||bs.current[`tr_${a}`])continue;let{evaluatorRunId:c,taskId:d}=b,e=async()=>{try{let b=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J)}&runId=${encodeURIComponent(c)}`),e=((await b.json()).results||[]).find(a=>a.taskId===d);if(!e)return;if("done"===e.status){clearInterval(bs.current[`tr_${a}`]),delete bs.current[`tr_${a}`];let b=Math.round((e.trajectoryScore??0)*100);aW(e=>{let f={...e,[a]:{status:"done",score:b,evaluatorRunId:c,taskId:d}};return bX(f),f})}else"failed"===e.status&&(clearInterval(bs.current[`tr_${a}`]),delete bs.current[`tr_${a}`],aW(b=>{let c={...b,[a]:{status:"fail",taskId:d}};return bX(c),c}))}catch{}};e(),bs.current[`tr_${a}`]=setInterval(e,5e3)}},[L?.id,J]),(0,c.useEffect)(()=>{if(J)for(let[a,b]of Object.entries(bp)){if("evaluating"!==b.status||!b.evaluatorRunId||bs.current[a])continue;let{evaluatorRunId:c}=b,d=async()=>{try{let b=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J)}&runId=${encodeURIComponent(c)}`),d=((await b.json()).results||[]).find(b=>b.caseId===a);if(!d)return;if("done"===d.status){clearInterval(bs.current[a]),delete bs.current[a];let b=Math.round((d.trajectoryScore??0)*100),c=b>=60;bq(d=>{let e={...d,[a]:{...d[a]||{},status:c?"pass":"fail",score:b}};return bW(e),e})}else"failed"===d.status&&(clearInterval(bs.current[a]),delete bs.current[a],bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:d.errorMessage||"轨迹评测失败"}};return bW(c),c}))}catch{}};d(),bs.current[a]=setInterval(d,5e3)}},[L?.id,J]);let bE=Z.filter(a=>ad.includes(a.id)).flatMap(a=>{let b=a.cases||[];return 0===b.length?[{id:`mock_${a.id}`,input:`[${"zh"===I?"示例":"Sample"}] ${a.name}`,datasetName:a.name,datasetId:a.id,isMock:!0}]:b.map(b=>({...b,datasetName:a.name,datasetId:a.id}))}),bF=c.default.useMemo(()=>{let a=new Map;for(let b of Z)for(let c of b.cases||[])a.set(String(c.id),{...c,datasetId:b.id});return a},[Z]),bG=c.default.useMemo(()=>Object.entries(bp).filter(([,a])=>!!ap&&(a.evaluatorRunId===ap||!!a.sessionId&&aG.has(a.sessionId))).map(([a,b])=>{let c=bF.get(a),d=b.sessionId?aG.get(b.sessionId):void 0,e=d?.taskId===b.sessionId?d:void 0,f=e?.status==="done"?"done":e?.status==="failed"?"failed":e?.status==="pending"||e?.status==="running"?"evaluating":"running"===b.status?"executing":"executed"===b.status?"executed":"evaluating"===b.status?"evaluating":"pass"===b.status?"done":"fail"===b.status?"failed":"pending";return{id:`case:${a}`,caseId:a,caseLabel:b.input||c?.input||a,caseTitle:b.input||c?.input||a,executionTraceId:b.sessionId||void 0,evaluationTraceId:e?.evaluationTraceId,resultEvalTraceId:e?.resultEvalTraceId,trajEvalTraceId:e?.trajEvalTraceId,evaluatorRunId:b.evaluatorRunId||ap||void 0,resultId:e?.resultId,datasetId:c?.datasetId||e?.datasetId,status:f,resultScore:e?.resultScore??null,trajScore:e?.trajScore??null,errorMsg:b.error||b.output||e?.errorMessage,actionsDisabled:!b.sessionId}}),[bp,ap,aG,bF]);(0,c.useEffect)(()=>{j&&w?.(bG)},[j,bG,w]);let bH=bE.filter(a=>{let b=bp[a.id],c=b?.status||"pending",d=j||"all"===bj||"pending"===bj&&"pending"===c||"executed"===bj&&("executed"===c||"evaluating"===c)||"evaluated"===bj&&("pass"===c||"fail"===c)||"failed"===bj&&"fail"===c,e=!bl||a.input?.toLowerCase().includes(bl.toLowerCase());return d&&e}),bI=bE.filter(a=>!bp[a.id]||"pending"===bp[a.id].status).length,bJ=bE.filter(a=>bp[a.id]?.status==="executed").length,bK=bE.filter(a=>bp[a.id]?.status==="pass"||bp[a.id]?.status==="fail").length,bL=bE.filter(a=>bp[a.id]?.status==="fail").length,bM=bE.filter(a=>bp[a.id]?.status==="pass").length,bN=bE.filter(a=>bp[a.id]?.status==="evaluating").length,bO=bE.length>0?Math.round(bK/bE.length*100):0,bP=_.find(a=>a.id===af),bQ=ab.find(a=>a.id===ah),bR=(0,c.useRef)(null);(0,c.useEffect)(()=>{bR.current=L},[L]);let bS=(0,c.useRef)({});(0,c.useEffect)(()=>{bS.current=bp},[bp]);let bT=(0,c.useRef)({});(0,c.useEffect)(()=>{bT.current=aV},[aV]);let bU=(0,c.useRef)({datasetIds:ad,skillId:af,versionId:ah,taskDescription:T,sourceMode:aH,evaluatorId:ax,evaluators:az,traceSkillId:aL,traceTimeRange:aN,traceDatasetId:aP,evaluationBatchId:ap,evaluationBatchTitle:ar,evaluationBatchEvaluators:at});(0,c.useEffect)(()=>{bU.current={datasetIds:ad,skillId:af,versionId:ah,taskDescription:T,sourceMode:aH,evaluatorId:ax,evaluators:az,traceSkillId:aL,traceTimeRange:aN,traceDatasetId:aP,evaluationBatchId:ap,evaluationBatchTitle:ar,evaluationBatchEvaluators:at}},[ad,af,ah,T,aH,ax,az,aL,aN,aP,ap,ar,at]);let bV=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(L&&J)return bV.current&&clearTimeout(bV.current),bV.current=setTimeout(()=>{bx(L.id,bU.current,void 0)},800),()=>{bV.current&&clearTimeout(bV.current)}},[aH,ax,az,aL,aN,aP,ad,af,ah,L?.id,J]);let bW=(0,c.useCallback)(a=>{bR.current&&bx(bR.current.id,bU.current,a)},[bx]),bX=(0,c.useCallback)(a=>{bR.current&&bx(bR.current.id,void 0,void 0,a)},[bx]),bY=Object.values(bp).some(a=>"running"===a.status||"evaluating"===a.status);(0,c.useEffect)(()=>{bu.current=bY},[bY]),(0,c.useEffect)(()=>{if(L&&J)return bt.current=setInterval(async()=>{if(!bu.current)return;let a=bR.current;if(a)try{let b=await (0,g.apiFetch)(`/api/debug/batch-tasks/${a.id}?user=${encodeURIComponent(J)}`);if(!b.ok)return;let c=await b.json();c.caseStatesJson&&bq(a=>{let b={...a};for(let[a,d]of Object.entries(c.caseStatesJson))br.current[a]||bs.current[a]||(b[a]=d);return b})}catch{}},15e3),()=>{bt.current&&(clearInterval(bt.current),bt.current=null)}},[L?.id,J]),(0,c.useEffect)(()=>()=>{let a=bR.current,b=bS.current,c=bT.current;a&&(Object.keys(b).length>0||Object.keys(c).length>0)&&bx(a.id,bU.current,b,c),Object.values(bs.current).forEach(clearInterval),bs.current={},bt.current&&(clearInterval(bt.current),bt.current=null)},[bx]);let bZ=async a=>{let b;br.current[a]&&(clearInterval(br.current[a]),delete br.current[a]);let c=bE.find(b=>b.id===a),d=c?.input||a;bR.current&&bx(bR.current.id,bU.current,void 0),bq(b=>({...b,[a]:{...b[a]||{},status:"running"}}));try{let c=await (0,g.apiFetch)("/api/debug/execute",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",query:d,skill:bP?.name,skillVersion:bQ?Number(bQ.version):void 0})}),e=await c.json();if(!c.ok||!e.jobId)return void bq(b=>{let c={...b,[a]:{status:"fail",output:e.error||"dispatch failed"}};return bW(c),c});b=e.jobId}catch(b){bq(c=>{let d={...c,[a]:{status:"fail",output:String(b)}};return bW(d),d});return}bq(c=>{let d={...c,[a]:{...c[a]||{},status:"running",jobId:b}};return bW(d),d});let e=async()=>{try{let c=await (0,g.apiFetch)(`/api/debug/execute/${b}`),d=await c.json();"completed"===d.status?(clearInterval(br.current[a]),delete br.current[a],bq(c=>{let e={...c,[a]:{status:"executed",jobId:b,output:d.output??"",timeCost:d.timeCost,tokenUsage:d.tokenUsage??0,sessionId:d.sessionId}};return bW(e),e})):("failed"===d.status||!d.status||d.error)&&(clearInterval(br.current[a]),delete br.current[a],bq(c=>{let e={...c,[a]:{status:"fail",jobId:b,output:d.error||"agent failed"}};return bW(e),e}))}catch{}};await e(),br.current[a]=setInterval(e,1e4)},b$=async a=>{let b;bR.current&&bx(bR.current.id,bU.current,void 0);let c=bS.current[a],d=c?.sessionId,e=bE.find(b=>b.id===a),f=e?.datasetId;if(!d||!f)return void bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:"缺少执行记录或数据集,无法评测(需先执行)"}};return bW(c),c});bs.current[a]&&(clearInterval(bs.current[a]),delete bs.current[a]),bq(b=>{let c={...b,[a]:{...b[a]||{},status:"evaluating"}};return bW(c),c});try{let c={user:J||"debug-user",datasetId:f,pairs:[{caseId:a,taskId:d}]};ap?c.evaluatorRunId=ap:c.evaluator=ax;let e=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)}),h=await e.json();if(!e.ok||!h.evaluatorRunId)return void bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:h.error||"评测提交失败"}};return bW(c),c});b=h.evaluatorRunId}catch(b){bq(c=>{let d={...c,[a]:{...c[a]||{},status:"fail",output:String(b)}};return bW(d),d});return}bq(c=>{let d={...c,[a]:{...c[a]||{},status:"evaluating",evaluatorRunId:b}};return bW(d),d});let h=async()=>{try{let c=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J||"")}&runId=${encodeURIComponent(b)}`),e=((await c.json()).results||[]).find(b=>b.caseId===a);if(!e)return;if("done"===e.status){clearInterval(bs.current[a]),delete bs.current[a];let b=e.trajectoryScore??0,c=Math.round(100*b),f=c>=60;bq(b=>{let d={...b,[a]:{...b[a]||{},status:f?"pass":"fail",score:c}};return bW(d),d}),K.push(`/eval/trajectory/${encodeURIComponent(d)}`)}else"failed"===e.status&&(clearInterval(bs.current[a]),delete bs.current[a],bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:e.errorMessage||"轨迹评测失败"}};return bW(c),c}))}catch{}};await h(),bs.current[a]=setInterval(h,5e3)},b_=async()=>{let a=bn.filter(a=>{let b=bp[a]?.status;return!b||"pending"===b});await Promise.all(a.map(bZ))},b0=async()=>{let a=bn.filter(a=>bp[a]?.status==="executed");await Promise.all(a.map(b$))},b1=async()=>{if(!L||al)return;if(!ap)return void alert("zh"===I?"请先在上方「评测任务」新建或选择一个评测任务":"Create/select an eval task first");if(j&&af&&!ah)return void alert("zh"===I?"当前 Skill 版本无效,无法开始评测":"The selected Skill version is invalid");let a=bn.filter(a=>{var b;return b=bp[a],!b||!!b.evaluatorRunId&&b.evaluatorRunId!==ap||"pending"===b.status||"pass"===b.status||"fail"===b.status});if(0===a.length)return void alert("zh"===I?"没有待启动的 case(已勾选的都在执行或评测中)":"No cases to start");am(!0);try{await bx(L.id,bU.current);let b=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",action:"start",caseIds:a})}),c=await b.json().catch(()=>({}));if(!b.ok||!c.ok){am(!1),alert(("zh"===I?"启动失败: ":"Start failed: ")+(c.error||b.status));return}b6()}catch(a){am(!1),alert(String(a))}},b2=async()=>{if(L&&!al){if(0===aX.length)return void alert("zh"===I?"请先勾选要评测的 trace":"Select traces first");am(!0);try{let a=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",action:"evaluate",caseIds:aX})}),b=await a.json().catch(()=>({}));if(!a.ok||!b.ok){am(!1),alert(("zh"===I?"启动失败: ":"Start failed: ")+(b.error||a.status));return}b6()}catch(a){am(!1),alert(String(a))}}},b3=Object.values(bp).some(a=>a?.status==="running"||a?.status==="evaluating"||a?.status==="executed"),b4=async()=>{if(!L||!al&&!b3||!window.confirm("zh"===I?"确定终止? 将停止你当前所有在跑的执行与评测, 已 in-flight 的会标记为「用户终止」失败。":"Terminate all your running executions and evaluations?"))return;let a=J||"debug-user";try{let b=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,action:"abort"})}),c=await b.json().catch(()=>({}));if(!b.ok)return void alert(("zh"===I?"终止失败: ":"Abort failed: ")+(c.error||b.status));await (0,g.apiFetch)("/api/eval/terminate-all",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a})}).catch(()=>{})}catch(a){alert(String(a))}},b5=async(a,b)=>{if(L){bq(c=>({...c,[a]:{...c[a]||{status:"pending"},status:b?"evaluating":"running",output:void 0}}));try{let c=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",action:b?"retry-evaluate":"retry-execute",caseIds:[a]})}),d=await c.json().catch(()=>({}));if(!c.ok){let b=String(d.error||c.status);bq(c=>({...c,[a]:{...c[a]||{status:"pending"},status:"fail",output:b}})),alert(("zh"===I?"重试失败: ":"Retry failed: ")+b);return}am(!0),b6()}catch(c){let b=String(c);bq(c=>({...c,[a]:{...c[a]||{status:"pending"},status:"fail",output:b}})),alert(b)}}},b6=()=>{if(!L)return;an.current&&clearInterval(an.current);let a=0,b=async()=>{a++;try{let a=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}?user=${encodeURIComponent(J||"")}`),b=await a.json().catch(()=>({}));if(b?.caseStatesJson&&"object"==typeof b.caseStatesJson){let a=b.caseStatesJson;if(bq(a),(ao.current.length>0?ao.current:Object.keys(a)).every(b=>{let c=a[b]?.status;return"pass"===c||"fail"===c})){an.current&&clearInterval(an.current),an.current=null,am(!1);return}}}catch{}a>=600&&(an.current&&clearInterval(an.current),an.current=null,am(!1))};b(),an.current=setInterval(b,3e3)},b7=async a=>{let b,c=a.task_id;if(!c)return;bR.current&&bx(bR.current.id,bU.current,void 0);let d=a.upload_id||c;aW(a=>{let b={...a,[d]:{status:"evaluating",taskId:c}};return bX(b),b});try{let a={user:J||"debug-user",datasetId:aP,taskIds:[c]};ap?a.evaluatorRunId=ap:a.evaluator=ax;let e=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),f=await e.json();if(!e.ok||!f.evaluatorRunId)return void aW(a=>{let b={...a,[d]:{status:"fail",taskId:c}};return bX(b),b});b=f.evaluatorRunId}catch{aW(a=>{let b={...a,[d]:{status:"fail",taskId:c}};return bX(b),b});return}aW(a=>{let e={...a,[d]:{status:"evaluating",evaluatorRunId:b,taskId:c}};return bX(e),e});let e=async()=>{try{let a=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J||"")}&runId=${encodeURIComponent(b)}`),e=((await a.json()).results||[]).find(a=>a.taskId===c);if(!e)return;if("done"===e.status){clearInterval(bs.current[`tr_${d}`]),delete bs.current[`tr_${d}`];let a=Math.round((e.trajectoryScore??0)*100);aW(e=>{let f={...e,[d]:{status:"done",score:a,evaluatorRunId:b,taskId:c}};return bX(f),f}),K.push(`/eval/trajectory/${encodeURIComponent(c)}`)}else"failed"===e.status&&(clearInterval(bs.current[`tr_${d}`]),delete bs.current[`tr_${d}`],aW(a=>{let b={...a,[d]:{status:"fail",taskId:c}};return bX(b),b}))}catch{}};await e(),bs.current[`tr_${d}`]=setInterval(e,5e3)},b8=async()=>{let a=aX.map(a=>aR.find(b=>(b.upload_id||b.task_id)===a)).filter(a=>!!a&&!aV[a.upload_id||a.task_id]?.status.match(/evaluating|done/));await Promise.all(a.map(b7))},b9=bH.length>0&&bH.every(a=>bn.includes(a.id)),ca=!!L&&!P,cb="trace"===aH?_.find(a=>a.id===aL)?.name||"未选 Skill":0===ad.length?"未选数据集":1===ad.length?Z.find(a=>a.id===ad[0])?.name||"未选数据集":`${ad.length} 个数据集`;[...E,...av].find(a=>a.id===ax)?.name;let cc="trace"===aH?aR.length:bE.length,cd=bK>0?Math.round(bM/bK*100):0,ce=bE.map(a=>bp[a.id]).filter(a=>null!=a&&("pass"===a.status||"fail"===a.status)).filter(a=>"number"==typeof a.score),cf=ap?Array.from(aG.values()).map(a=>({r:a.resultScore,t:a.trajScore})).filter(a=>"number"==typeof a.r&&"number"==typeof a.t):null,cg=cf?cf.length>0?Math.round(cf.reduce((a,b)=>a+(b.r+b.t)/2,0)/cf.length):null:ce.length>0?Math.round(ce.reduce((a,b)=>a+(b.score||0),0)/ce.length):null,ch=null==cg?"warn":cg>=80?"good":cg>=60?"warn":"bad";return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(s.SectionShell,{num:1,variant:"config",title:"配置",desc:"任务管理 + 数据集 / Skill / 评测器 + 全部用例列表(含未执行 / 已评测)",open:a9,onToggle:()=>ba(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"当前任务"}),(0,b.jsx)("code",{children:L?.taskName||"未保存"}),(0,b.jsxs)("span",{children:["· ",(0,b.jsx)("code",{children:cb})]}),(0,b.jsxs)("span",{children:["· skill ",(0,b.jsxs)("code",{children:[bP?.name||"未选",bQ?` ${bQ.semanticVersion||`v${bQ.version}`}`:""]})]}),(0,b.jsxs)("span",{children:["· 共 ",(0,b.jsx)("b",{children:cc})," 用例"]})]}),actions:j?i:L&&!P?(0,b.jsx)(v,{locale:I,tasks:aD,selectedRunId:ap,selectedTitle:ar,onSelect:bz,onCreateNew:()=>ak(!0)}):(0,b.jsxs)("span",{title:"zh"===I?"请先保存评测任务名称":"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"===I?"请先保存任务":"Save task first"]}),children:[h,!j&&(0,b.jsx)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"4px 0 10px",fontSize:12.5,flexWrap:"wrap"},children:P?(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,flex:1},children:[(0,b.jsx)("input",{className:"task-inline-input",value:R,onChange:a=>S(a.target.value),onKeyDown:a=>{"Enter"!==a.key||a.nativeEvent.isComposing||bA(),"Escape"===a.key&&L&&(Q(!1),S(""))},placeholder:"zh"===I?"请输入调试任务名称…":"Enter task name…",autoFocus:!0,style:{maxWidth:280}}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:bA,disabled:!R.trim()||X,children:X?"zh"===I?"保存中…":"Saving…":"zh"===I?"保存":"Save"}),L&&(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>{Q(!1),S("")},children:"zh"===I?"取消":"Cancel"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{style:{color:"var(--ink-3)"},children:"zh"===I?"调试任务:":"Debug task:"}),(0,b.jsx)("b",{style:{color:"var(--ink-1, #18181B)",maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:L?.taskName||"—"}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:()=>a4(!0),title:"zh"===I?"切换历史调试任务":"Switch task",style:{padding:"2px 8px"},children:[(0,b.jsxs)("svg",{width:"10",height:"10",viewBox:"0 0 11 11",fill:"none",style:{marginRight:3},children:[(0,b.jsx)("circle",{cx:"5.5",cy:"5.5",r:"4.5",stroke:"currentColor",strokeWidth:"1.4"}),(0,b.jsx)("path",{d:"M5.5 3v2.5l1.8 1.8",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})]}),"zh"===I?"历史":"History"]}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:bB,style:{padding:"2px 8px"},children:["+ ","zh"===I?"新建":"New"]})]})}),!j&&(0,b.jsxs)("div",{className:`config-bar ${!ca?"config-bar-locked":""}`,children:[!ca&&(0,b.jsxs)("div",{className:"config-bar-lock-tip",style:{cursor:"default"},children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:[(0,b.jsx)("rect",{x:"2",y:"5",width:"8",height:"6",rx:"1.2",stroke:"currentColor",strokeWidth:"1.2"}),(0,b.jsx)("path",{d:"M4 5V3.5a2 2 0 114 0V5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]}),"zh"===I?P?"请先保存评测名称":"请先新建评测任务":P?"Save task name first":"Create a task first"]}),(0,b.jsx)("div",{className:"config-bar-filters",children:!j&&"dataset"===aH&&(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10,flex:1,minWidth:0},children:[(0,b.jsx)(u,{label:"zh"===I?"数据集":"Dataset",placeholder:"zh"===I?"选择数据集(可多选)":"Select datasets",emptyHint:"zh"===I?"暂无数据集(可在数据集中心创建)":"No datasets",accent:"#2563eb",disabled:!ca,options:Z.map(a=>({id:a.id,name:a.name,meta:`${a.cases?.length||0} ${"zh"===I?"例":"cases"}`})),selectedIds:ad,onChange:a=>ae(a)}),(0,b.jsx)(u,{label:"zh"===I?"评估器":"Evaluators",placeholder:"zh"===I?"选择评估器(可多选)":"Select evaluators",emptyHint:"zh"===I?"暂无评估器":"No evaluators",accent:"#7E22CE",disabled:!ca,options:[...E,...av].map(a=>({id:a.id,name:a.name})),selectedIds:az,onChange:a=>aA(a)})]})})]}),(0,b.jsxs)("div",{className:"work-table-card",children:[(0,b.jsxs)("div",{className:"table-toolbar",children:[(0,b.jsxs)("div",{className:"table-toolbar-left",children:["dataset"===aH?(0,b.jsxs)("label",{className:"select-all-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:b9,onChange:()=>{b9?bo(a=>a.filter(a=>!bH.find(b=>b.id===a))):bo(a=>[...new Set([...a,...bH.map(a=>a.id)])])}}),(0,b.jsx)("span",{className:"checkbox-mark"})]}):(0,b.jsxs)("label",{className:"select-all-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:aX.length===aR.length&&aR.length>0,onChange:()=>{let a=aR.map(a=>a.upload_id||a.task_id||"").filter(Boolean);aY(b=>b.length===a.length?[]:a)}}),(0,b.jsx)("span",{className:"checkbox-mark"})]}),(0,b.jsx)("span",{className:"toolbar-status",children:"dataset"===aH?bn.length>0?"zh"===I?`已选 ${bn.length} 条`:`${bn.length} selected`:"zh"===I?`共 ${bE.length} 条用例`:`${bE.length} cases`:aX.length>0?"zh"===I?`已选 ${aX.length} 条`:`${aX.length} selected`:"zh"===I?`共 ${aR.length} 条执行链路`:`${aR.length} traces`}),!j&&"dataset"===aH&&bn.length>0&&(0,b.jsxs)("div",{className:"bulk-actions",children:[(0,b.jsx)("div",{className:"bulk-divider"}),L?.configJson?.evaluationBatchId&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("button",{type:"button",onClick:b1,disabled:al,title:"zh"===I?"一键启动: 执行 + 自动评测, append 到当前评测任务":"One-click: execute + auto-eval, append to linked task",style:{padding:"4px 10px",background:al?"#A5A0E4":"#4F46E5",border:"1px solid "+(al?"#A5A0E4":"#4F46E5"),borderRadius:5,fontSize:12,fontWeight:600,color:"#fff",cursor:al?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"currentColor",children:(0,b.jsx)("path",{d:"M2.5 1.5l5.5 3.5-5.5 3.5V1.5z"})}),al?"zh"===I?"启动中...":"Starting...":"zh"===I?"▶ 启动":"▶ Start"]}),al&&(0,b.jsxs)("button",{type:"button",onClick:b4,title:"zh"===I?"终止当前批量执行":"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"===I?"终止":"Abort"]}),al&&(y=(x=Object.keys(bp)).filter(a=>bp[a]?.status==="pass").length,A=x.filter(a=>bp[a]?.status==="fail").length,C=x.filter(a=>{let b=bp[a]?.status;return"running"===b||"evaluating"===b||"executed"===b}).length,(0,b.jsxs)("span",{style:{fontSize:11.5,color:"var(--ink-2)",display:"inline-flex",alignItems:"center",gap:8,marginLeft:4},children:[(0,b.jsxs)("span",{children:["共 ",(0,b.jsx)("b",{children:x.length})]}),(0,b.jsxs)("span",{style:{color:"var(--success)"},children:["✓ ",y]}),A>0&&(0,b.jsxs)("span",{style:{color:"var(--danger)"},children:["✗ ",A]}),C>0&&(0,b.jsxs)("span",{style:{color:"#2563EB"},children:["⏳ ",C]})]}))]}),(0,b.jsxs)("button",{className:"d-btn sm dark",onClick:b_,children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M2.5 1.5l5.5 3.5-5.5 3.5V1.5z",fill:"currentColor"})}),"zh"===I?"批量执行 (旧)":"Batch Execute (legacy)"]}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:b0,children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),"zh"===I?"批量评测 (旧)":"Batch Evaluate (legacy)"]})]}),"trace"===aH&&aX.length>0&&(0,b.jsxs)("div",{className:"bulk-actions",children:[(0,b.jsx)("div",{className:"bulk-divider"}),L?.configJson?.evaluationBatchId&&(0,b.jsxs)("button",{type:"button",onClick:b2,disabled:al,title:"zh"===I?"一键启动: 评测已选 trace, append 到当前评测任务":"One-click: evaluate selected traces",style:{padding:"4px 10px",background:al?"#A5A0E4":"#4F46E5",border:"1px solid "+(al?"#A5A0E4":"#4F46E5"),borderRadius:5,fontSize:12,fontWeight:600,color:"#fff",cursor:al?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),al?"zh"===I?"启动中...":"Starting...":"zh"===I?"▶ 启动评测":"▶ Start Eval"]}),al&&(0,b.jsxs)("button",{type:"button",onClick:b4,style:{padding:"4px 10px",background:"#fff",border:"1px solid #DC2626",borderRadius:5,fontSize:12,fontWeight:600,color:"#DC2626",cursor:"pointer"},children:["⏹ ","zh"===I?"终止":"Abort"]}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:b8,children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),"zh"===I?"批量评测 (旧)":"Batch Evaluate (legacy)"]})]})]}),(0,b.jsxs)("div",{className:"table-toolbar-right",children:["dataset"===aH&&(al||b3)&&(0,b.jsxs)("button",{type:"button",onClick:b4,title:"zh"===I?"终止当前批量执行,并清除卡住的运行状态/锁":"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"===I?"终止":"Abort"]}),!j&&"dataset"===aH&&(0,b.jsxs)("div",{className:"filter-group",children:[(0,b.jsxs)("button",{className:`filter-btn ${"all"===bj?"active":""}`,onClick:()=>bk("all"),children:["zh"===I?"全部":"All"," ",(0,b.jsx)("span",{className:"filter-count",children:bE.length})]}),(0,b.jsxs)("button",{className:`filter-btn ${"pending"===bj?"active":""}`,onClick:()=>bk("pending"),children:["zh"===I?"未执行":"Pending"," ",(0,b.jsx)("span",{className:"filter-count",children:bI})]}),(0,b.jsxs)("button",{className:`filter-btn ${"executed"===bj?"active":""}`,onClick:()=>bk("executed"),children:["zh"===I?"待评测":"Executed"," ",(0,b.jsx)("span",{className:"filter-count",children:bJ})]}),(0,b.jsxs)("button",{className:`filter-btn ${"evaluated"===bj?"active":""}`,onClick:()=>bk("evaluated"),children:["zh"===I?"已评测":"Evaluated"," ",(0,b.jsx)("span",{className:"filter-count",children:bK})]}),bL>0&&(0,b.jsxs)("button",{className:`filter-btn ${"failed"===bj?"active":""}`,onClick:()=>bk("failed"),children:["zh"===I?"失败":"Failed",(0,b.jsx)("span",{className:"filter-count",style:{color:"failed"===bj?void 0:"var(--danger)"},children:bL})]})]}),(0,b.jsx)("input",{className:"table-search",placeholder:"zh"===I?"搜索用例…":"Search cases…",value:bl,onChange:a=>bm(a.target.value)})]})]}),(0,b.jsx)("div",{className:"work-table-wrapper",children:(0,b.jsxs)("table",{className:"work-table",children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{children:[(0,b.jsx)("th",{style:{width:36,paddingRight:0}}),(0,b.jsx)("th",{style:{width:44},children:"#"}),(0,b.jsx)("th",{children:"zh"===I?"trace"===aH?"用户输入 / Trace":"测试用例":"trace"===aH?"Input / Trace":"Test Case"}),(0,b.jsx)("th",{style:{width:110},children:"zh"===I?"trace"===aH?"来源 Skill":"数据集":"trace"===aH?"Skill":"Dataset"}),!j&&"dataset"===aH&&(0,b.jsx)("th",{style:{width:100},children:"zh"===I?"状态":"Status"}),!j&&(0,b.jsx)("th",{style:{width:70},children:"zh"===I?"分数":"Score"}),"trace"===aH&&(0,b.jsx)("th",{style:{width:70},children:"zh"===I?"耗时":"Time"}),!j&&(0,b.jsx)("th",{style:{width:80},children:"Trace"})]})}),(0,b.jsxs)("tbody",{children:["trace"===aH&&(aT?(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:6,children:(0,b.jsxs)("div",{className:"d-empty",children:[(0,b.jsx)("span",{className:"spinner",style:{width:16,height:16,borderWidth:2}}),"zh"===I?" 加载中…":" Loading…"]})})}):0===aR.length?(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:6,children:(0,b.jsxs)("div",{className:"d-empty",children:[(0,b.jsx)("div",{className:"d-empty-icon",children:(0,b.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,b.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"===I?aL?"该 Skill 在所选时间内暂无执行链路":"请在上方选择 Skill 以加载执行链路":aL?"No traces found for this Skill in the selected time range":"Select a Skill above to load its execution traces"]})})}):aR.filter(a=>!bl||a.query?.toLowerCase().includes(bl.toLowerCase())).map((a,c)=>{let d,e=a.upload_id||a.task_id||`trace_${c}`,f=aV[e];f?.status,f?.status,f?.status;let g=(()=>{try{let b="string"==typeof a.skills?JSON.parse(a.skills):a.skills;return Array.isArray(b)?b.map(a=>"string"==typeof a?a:a?.name||"").filter(Boolean):[]}catch{return[]}})();return(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{style:{paddingRight:0},children:(0,b.jsxs)("label",{className:"row-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:aX.includes(e),onChange:()=>aY(a=>a.includes(e)?a.filter(a=>a!==e):[...a,e])}),(0,b.jsx)("span",{className:"checkbox-mark"})]})}),(0,b.jsx)("td",{className:"num-col",children:String(c+1).padStart(3,"0")}),(0,b.jsxs)("td",{style:{overflow:"hidden"},children:[(0,b.jsx)("div",{className:"case-cell-title",children:(0,b.jsx)(D,{text:a.query||a.task_id||"-"})}),(0,b.jsxs)("div",{className:"case-cell-meta",children:[a.task_id&&(0,b.jsxs)("span",{style:{fontFamily:"var(--font-mono)",fontSize:10.5},children:[a.task_id.slice(0,16),"…"]}),a.timestamp&&(0,b.jsxs)(b.Fragment,{children:[" · ",new Date(Number(a.timestamp)||a.timestamp).toLocaleString("zh"===I?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})]})]})]}),(0,b.jsx)("td",{children:g.length>0?g.map(a=>(0,b.jsx)("span",{className:"tag tag-blue",style:{fontSize:10,marginRight:2},children:a.slice(0,12)},a)):(0,b.jsx)("span",{style:{color:"var(--ink-4)",fontSize:11},children:"—"})}),(0,b.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:12,fontWeight:600},children:"number"==typeof(d="number"==typeof f?.score?f.score:"number"==typeof bp[a.task_id||""]?.score?bp[a.task_id||""].score:null)?(0,b.jsx)("span",{style:{color:d>=80?"var(--success)":d>=60?"var(--warn, #D97706)":"var(--danger)"},children:d}):(0,b.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)"},children:"—"})}),(0,b.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--ink-2)"},children:a.timeCost||"—"}),(0,b.jsx)("td",{children:(0,b.jsx)("button",{className:"row-more",title:"zh"===I?"查看 Trace":"View trace",onClick:()=>a.task_id&&K.push(`/trace?taskId=${encodeURIComponent(a.task_id)}`),children:"→"})})]},e)})),"dataset"===aH&&(0===bH.length?(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:j?4:7,children:(0,b.jsxs)("div",{className:"d-empty",children:[(0,b.jsx)("div",{className:"d-empty-icon",children:(0,b.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,b.jsx)("path",{d:"M9 3v12M3 9h12",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})}),0===bE.length?"zh"===I?"请在上方配置栏选择数据集":"Select datasets in the config bar above":"zh"===I?"无匹配用例":"No matching cases"]})})}):bH.map((a,c)=>{let d=bp[a.id],e=d?.status||"pending";return(0,b.jsxs)("tr",{className:j||"fail"!==e?"":"row-fail",children:[(0,b.jsx)("td",{style:{paddingRight:0},children:(0,b.jsxs)("label",{className:"row-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:bn.includes(a.id),onChange:()=>{var b;return b=a.id,void bo(a=>a.includes(b)?a.filter(a=>a!==b):[...a,b])}}),(0,b.jsx)("span",{className:"checkbox-mark"})]})}),(0,b.jsx)("td",{className:"num-col",children:String(c+1).padStart(3,"0")}),(0,b.jsxs)("td",{style:{overflow:"hidden"},children:[(0,b.jsx)("div",{className:"case-cell-title",children:(0,b.jsx)(D,{text:a.input||a.id})}),(0,b.jsxs)("div",{className:"case-cell-meta",children:[a.isMock?"zh"===I?"模拟用例":"Mock case":`${a.datasetName}`,!j&&d?.timeCost&&` \xb7 ${d.timeCost}`,!j&&d?.tokenUsage&&` \xb7 ${d.tokenUsage} tok`]})]}),(0,b.jsx)("td",{children:(0,b.jsx)("span",{className:"tag tag-blue",style:{fontSize:10},children:a.datasetName?.slice(0,8)||"-"})}),!j&&(0,b.jsx)("td",{children:(0,b.jsx)("span",{className:`row-status ${e}`,children:{pending:"zh"===I?"○ 未执行":"○ Pending",running:"zh"===I?"⌛ 执行中":"⌛ Running",executed:"zh"===I?"● 待评测":"● Executed",evaluating:"zh"===I?"◷ 评测中":"◷ Evaluating",pass:"zh"===I?"✓ 已评测":"✓ Evaluated",fail:"zh"===I?"✗ 失败":"✗ Failed"}["running"===e?"running":e]})}),!j&&(0,b.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:12,fontWeight:600},children:"number"==typeof d?.score?(0,b.jsx)("span",{style:{color:d.score>=80?"var(--success)":d.score>=60?"var(--warn, #D97706)":"var(--danger)"},children:d.score}):(0,b.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)"},children:"—"})}),!j&&(0,b.jsx)("td",{children:d?.sessionId?(0,b.jsx)("button",{className:"row-more",title:"zh"===I?"查看 Trace":"View trace",onClick:()=>K.push(`/trace?taskId=${encodeURIComponent(d.sessionId)}`),children:"→"}):(0,b.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)",fontSize:11},children:"—"})})]},a.id)}))]})]})}),(0,b.jsxs)("div",{className:"table-footer",children:[(0,b.jsx)("div",{className:"table-footer-summary",children:"trace"===aH?(0,b.jsxs)(b.Fragment,{children:["zh"===I?"共":"Total"," ",(0,b.jsx)("b",{children:aR.length})," ","zh"===I?"条执行链路":"traces"]}):(0,b.jsxs)(b.Fragment,{children:["zh"===I?"共":"Total"," ",(0,b.jsx)("b",{children:bE.length})," ","zh"===I?"条用例":"cases",!j&&bM>0&&(0,b.jsx)("span",{style:{marginLeft:10,color:"var(--success)",fontWeight:600},children:"zh"===I?`通过 ${bM}`:`Passed ${bM}`}),!j&&bL>0&&(0,b.jsx)("span",{style:{marginLeft:8,color:"var(--danger)",fontWeight:600},children:"zh"===I?`失败 ${bL}`:`Failed ${bL}`})]})}),!j&&"dataset"===aH&&(0,b.jsxs)("div",{className:"table-footer-progress",children:[(0,b.jsx)("span",{className:"progress-mini-label",children:"zh"===I?`已评测 ${bK} / ${bE.length}`:`Evaluated ${bK} / ${bE.length}`}),(0,b.jsx)("div",{className:"progress-mini-bar",children:(0,b.jsx)("div",{className:"progress-mini-fill",style:{width:`${bO}%`}})}),(0,b.jsxs)("span",{className:"progress-mini-pct",children:[bO,"%"]})]}),"trace"===aH&&(F=Object.values(aV).filter(a=>"done"===a.status).length,H=aR.length>0?Math.round(F/aR.length*100):0,(0,b.jsxs)("div",{className:"table-footer-progress",children:[(0,b.jsx)("span",{className:"progress-mini-label",children:"zh"===I?`已评测 ${F} / ${aR.length}`:`Evaluated ${F} / ${aR.length}`}),(0,b.jsx)("div",{className:"progress-mini-bar",children:(0,b.jsx)("div",{className:"progress-mini-fill",style:{width:`${H}%`}})}),(0,b.jsxs)("span",{className:"progress-mini-pct",children:[H,"%"]})]}))]})]}),j&&(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:14,paddingTop:14,borderTop:"1px solid var(--ev-line, #e5e7eb)",flexWrap:"wrap"},children:[(0,b.jsx)("button",{type:"button",onClick:b1,disabled:al||0===bn.length||!L||!ap,style:{padding:"9px 22px",background:!al&&0!==bn.length&&L&&ap?"#4F46E5":"#A5A0E4",color:"#fff",border:"none",borderRadius:6,fontSize:14,fontWeight:700,cursor:!al&&0!==bn.length&&L&&ap?"pointer":"not-allowed"},title:ap?0===bn.length?"请先在上方勾选 case":"先执行选中 case 生成 Trace, 再开始评测":'请先在上方"评测任务"里新建或选择一个评测任务',children:al?"zh"===I?"评测中…":"Evaluating…":bn.length>0?`▶ ${"zh"===I?"开始评测":"Start eval"}(${bn.length})`:`▶ ${"zh"===I?"开始评测":"Start eval"}`}),al&&(0,b.jsxs)("button",{type:"button",onClick:b4,style:{padding:"7px 14px",background:"#fff",border:"1px solid #DC2626",borderRadius:6,fontSize:12.5,fontWeight:600,color:"#DC2626",cursor:"pointer"},children:["⏹ ","zh"===I?"终止":"Abort"]}),(0,b.jsx)("span",{style:{fontSize:11,color:ap?"var(--ink-3, #a1a1aa)":"#D97706"},children:ap?"zh"===I?"勾选 case 后开始评测:先执行生成 Trace 再评测;进度见 ② 评测执行":"Select cases → execute to generate traces → evaluate; progress in ②":"zh"===I?"请先在上方「评测任务」新建或选择一个任务,再开始评测":"Create/select an eval task above first"})]})]}),!t&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s.SectionShell,{num:2,variant:"exec",title:"评测执行",desc:"已启动的 case:执行 session id 跳链路追踪、评测结果跳评测任务详情;实时进度,点行钻取 ③",open:bb,onToggle:()=>bc(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"已评测"}),(0,b.jsxs)("code",{children:[bK," / ",bE.length]}),bK>0&&(0,b.jsxs)("span",{children:["· 通过率 ",(0,b.jsxs)("b",{style:{color:cd>=80?"var(--ev-success)":cd>=60?"var(--ev-warning)":"var(--ev-error)"},children:[cd,"%"]})]})]}),children:(0,b.jsx)(z,{locale:I,emptyHint:"还没启动评测。在 ① 配置块勾选 case → 点「▶ 启动」。",onRetry:a=>b5(a.id,!1),onDelete:async a=>{let b=bp[a.id]?.status;if("running"===b||"executed"===b||"evaluating"===b)return void alert("zh"===I?"评测/执行进行中,无法删除":"In progress, cannot delete");let c={...bp};if(delete c[a.id],bq(c),L)try{await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",caseStatesJson:c})})}catch{}},onRowClick:()=>{be(!0),requestAnimationFrame(()=>{document.querySelector("[data-result-section]")?.scrollIntoView({behavior:"smooth",block:"start"})})},records:bE.filter(a=>{let b=bp[a.id]?.status;return b&&"pending"!==b}).map(a=>{let b=bp[a.id],c=b?.status,d="running"===c?"executing":"executed"===c?"executed":"evaluating"===c?"evaluating":"pass"===c?"done":"fail"===c?"failed":"pending",e=("pass"===c||"fail"===c)&&b?.sessionId?aG.get(b.sessionId):void 0;return{id:a.id,caseLabel:String(a.input||a.id),caseTitle:a.input||a.id,executionTraceId:b?.sessionId||void 0,evaluationTraceId:e?.evaluationTraceId,resultEvalTraceId:e?.resultEvalTraceId,trajEvalTraceId:e?.trajEvalTraceId,evaluatorRunId:b?.evaluatorRunId||ap||void 0,resultId:e?.resultId,datasetId:a.datasetId||e?.datasetId||void 0,status:d,resultScore:e?.resultScore??null,trajScore:e?.trajScore??null,errorMsg:b?.output||void 0}})})}),(0,b.jsx)(s.SectionShell,{num:3,variant:"result",title:"分析结果",desc:bK>0?`已评测 ${bK} / ${bE.length} 用例 \xb7 当前任务 ${L?.taskName||""}`:"尚未评测",open:bd,onToggle:()=>be(a=>!a),summary:bK>0&&null!=cg?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"总评分"}),(0,b.jsxs)("code",{className:`score-${ch}`,children:[cg," 分"]}),(0,b.jsxs)("span",{children:["· 通过 ",(0,b.jsx)("b",{children:bM})," / ",(0,b.jsx)("b",{children:bK})]})]}):(0,b.jsx)("span",{style:{color:"var(--ev-muted)"},children:"未评测"}),children:(0,b.jsx)(G,{allCases:bE,caseStates:bp,avgScore:cg,scoreColorKlass:ch,evaluatedCount:bK,passCount:bM,failedCount:bL,pendingCount:bI,evaluatingCount:bN,onDrillTrace:a=>K.push(`/eval/trajectory/${a}`)})})]}),aZ&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a$(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择评测数据集":"Select Datasets"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a$(!1),children:"×"})]}),(0,b.jsx)("div",{className:"d-modal-body",children:0===Z.length?(0,b.jsx)("div",{className:"d-empty",children:"zh"===I?"暂无数据集,请先创建":"No datasets found. Create one first."}):(0,b.jsx)("div",{className:"dataset-grid",children:Z.map(a=>(0,b.jsxs)("div",{className:`dataset-card ${ad.includes(a.id)?"selected":""}`,onClick:()=>ae(b=>b.includes(a.id)?b.filter(b=>b!==a.id):[...b,a.id]),children:[(0,b.jsx)("input",{type:"checkbox",readOnly:!0,checked:ad.includes(a.id)}),(0,b.jsxs)("div",{className:"dataset-card-body",children:[(0,b.jsx)("div",{className:"dataset-name",children:a.name}),(0,b.jsxs)("div",{className:"dataset-stats",children:[(0,b.jsx)("b",{children:a.cases?.length||0})," ","zh"===I?"条用例":"cases"]})]})]},a.id))})}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsxs)("button",{className:"d-btn sm",onClick:()=>{a$(!1),K.push("/dataset")},children:["+ ","zh"===I?"新建数据集":"New Dataset"]}),(0,b.jsxs)("button",{className:"d-btn sm primary",onClick:()=>a$(!1),children:["zh"===I?"确定":"Confirm"," (",ad.length,")"]})]})]})}),a_&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a0(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择 Skill 和版本":"Select Skill & Version"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a0(!1),children:"×"})]}),(0,b.jsxs)("div",{className:"d-modal-body",children:[(0,b.jsxs)("div",{className:"gray-field",style:{marginBottom:16},children:[(0,b.jsx)("div",{className:"gray-field-label",children:"Skill"}),(0,b.jsxs)("select",{className:"gray-select",value:af,onChange:a=>ag(a.target.value),children:[(0,b.jsx)("option",{value:"",children:"zh"===I?"-- 请选择 Skill --":"-- Select Skill --"}),_.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]})]}),af&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"gray-field-label",style:{marginBottom:10},children:"zh"===I?"版本":"Version"}),ab.map(a=>(0,b.jsxs)("div",{className:`skill-version-row ${ah===a.id?"selected":""}`,onClick:()=>ai(a.id),children:[(0,b.jsx)("div",{className:"skill-version-radio"}),(0,b.jsxs)("div",{className:"skill-version-info",children:[(0,b.jsxs)("div",{className:"skill-version-name",children:[a.semanticVersion||`v${a.version}`,a.isCurrent&&(0,b.jsx)("span",{className:"tag tag-green",style:{fontSize:9},children:"Current"})]}),(0,b.jsxs)("div",{className:"skill-version-meta",children:["version ",a.version]})]})]},a.id)),0===ab.length&&(0,b.jsx)("div",{className:"d-empty",style:{padding:"20px 0"},children:"zh"===I?"暂无版本":"No versions found"})]})]}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>a0(!1),children:"zh"===I?"取消":"Cancel"}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:()=>a0(!1),children:"zh"===I?"确定":"Confirm"})]})]})}),a7&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a8(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择 Skill":"Select Skill"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a8(!1),children:"×"})]}),(0,b.jsx)("div",{className:"d-modal-body",children:0===_.length?(0,b.jsx)("div",{className:"d-empty",children:"zh"===I?"暂无 Skill,请先创建":"No skills found. Create one first."}):(0,b.jsx)("div",{className:"dataset-grid",children:_.map(a=>(0,b.jsxs)("div",{className:`dataset-card ${aL===a.id?"selected":""}`,onClick:()=>aM(a.id),children:[(0,b.jsx)("input",{type:"radio",readOnly:!0,checked:aL===a.id}),(0,b.jsxs)("div",{className:"dataset-card-body",children:[(0,b.jsx)("div",{className:"dataset-name",children:a.name}),(0,b.jsx)("div",{className:"dataset-stats",children:"zh"===I?"点击选择后查看关联执行链路":"Select to view associated traces"})]})]},a.id))})}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>a8(!1),children:"zh"===I?"取消":"Cancel"}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:()=>a8(!1),disabled:!aL,children:"zh"===I?"确定":"Confirm"})]})]})}),a5&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a6(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择评测集(轨迹数据集)":"Select Eval Dataset (Trajectory)"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a6(!1),children:"×"})]}),(0,b.jsxs)("div",{className:"d-modal-body",children:[(0,b.jsx)("div",{style:{fontSize:12,color:"var(--ink-3)",marginBottom:12,padding:"8px 10px",background:"var(--bg-soft)",borderRadius:6},children:"zh"===I?"评测集用于提供参考答案和评测标准。评测时系统会将 trace 输入与数据集 case 自动匹配。":"The eval dataset provides reference answers. The system auto-matches trace inputs to dataset cases during evaluation."}),0===Z.length?(0,b.jsx)("div",{className:"d-empty",children:"zh"===I?"暂无数据集":"No datasets found"}):(0,b.jsx)("div",{className:"dataset-grid",children:Z.map(a=>(0,b.jsxs)("div",{className:`dataset-card ${aP===a.id?"selected":""}`,onClick:()=>aQ(a.id),children:[(0,b.jsx)("input",{type:"radio",readOnly:!0,checked:aP===a.id}),(0,b.jsxs)("div",{className:"dataset-card-body",children:[(0,b.jsx)("div",{className:"dataset-name",children:a.name}),(0,b.jsxs)("div",{className:"dataset-stats",children:[(0,b.jsx)("b",{children:a.cases?.length||0})," ","zh"===I?"条用例":"cases"]})]})]},a.id))})]}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>a6(!1),children:"zh"===I?"取消":"Cancel"}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:()=>a6(!1),disabled:!aP,children:"zh"===I?"确定":"Confirm"})]})]})}),a3&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"d-drawer-mask",onClick:()=>a4(!1)}),(0,b.jsx)("div",{className:"d-history-drawer",children:(0,b.jsxs)("div",{className:"d-history-panel",children:[(0,b.jsxs)("div",{className:"d-history-head",children:[(0,b.jsxs)("div",{className:"d-history-head-title",children:[(0,b.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none",children:[(0,b.jsx)("circle",{cx:"6.5",cy:"6.5",r:"5.5",stroke:"currentColor",strokeWidth:"1.4"}),(0,b.jsx)("path",{d:"M6.5 3.5v3l2 2",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})]}),"zh"===I?"历史任务":"Task History",(0,b.jsxs)("span",{style:{fontWeight:400,color:"var(--ink-4)",fontSize:11},children:[N.length,"zh"===I?" 条":""]})]}),(0,b.jsx)("button",{className:"d-drawer-close",onClick:()=>a4(!1),children:(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1 1l8 8M9 1l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]}),(0,b.jsx)("div",{className:"d-history-body",children:0===N.length?(0,b.jsx)("div",{style:{padding:"32px 16px",textAlign:"center",color:"var(--ink-4)",fontSize:12},children:"zh"===I?"暂无历史任务":"No task history"}):N.slice().reverse().map(a=>(0,b.jsxs)("div",{className:"d-history-item",style:L?.id===a.id?{borderColor:"var(--accent)",background:"var(--accent-soft)"}:{},onClick:()=>{let b;M(a),Q(!1),a2(!1),S(""),ae((b=a.configJson||{}).datasetIds||[]),b.versionId&&(bv.current=b.versionId),ag(b.skillId||""),ai(b.versionId||""),U(b.taskDescription||""),aI(b.sourceMode||"dataset"),ay(b.evaluatorId||"preset-agent-trace-quality"),aA(Array.isArray(b.evaluators)&&b.evaluators.length>0?b.evaluators:E.map(a=>a.id)),aM(b.traceSkillId||""),aO(b.traceTimeRange||"7d"),aQ(b.traceDatasetId||""),aq(b.evaluationBatchId||""),as(b.evaluationBatchTitle||""),au(Array.isArray(b.evaluationBatchEvaluators)?b.evaluationBatchEvaluators:[]),bq(a.caseStatesJson||{}),aW(a.traceEvalStatesJson||{}),a4(!1)},children:[(0,b.jsxs)("div",{className:"d-history-item-top",children:[(0,b.jsx)("div",{className:"d-history-item-title",style:L?.id===a.id?{color:"var(--accent)"}:{},children:a.taskName}),(0,b.jsx)("span",{className:"d-history-item-id",children:new Date(a.createdAt).toLocaleString("zh"===I?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),a.configJson?.taskDescription&&(0,b.jsx)("div",{className:"d-history-item-query",children:a.configJson.taskDescription})]},a.id))})]})})]}),(0,b.jsx)(l.NewEvaluationBatchDialog,{open:aj,user:J||"",defaultTitle:L?.taskName,evaluators:az,onClose:()=>ak(!1),onCreated:by})]})}function G({allCases:a,caseStates:c,avgScore:d,scoreColorKlass:e,evaluatedCount:f,passCount:g,failedCount:h,pendingCount:i,evaluatingCount:j,onDrillTrace:k}){let l=a.length,m=f>0?Math.round(g/f*100):0,n=0===f?null:m>=80?"good":m<50?"bad":null;if(0===l)return(0,b.jsxs)("div",{className:"recall-empty",children:[(0,b.jsx)("b",{children:"还没选数据集或 trace。"}),(0,b.jsxs)("div",{style:{marginTop:6},children:["先去 ",(0,b.jsx)("b",{children:"① 配置"})," 选数据源 / Skill / 评测器。"]})]});if(0===f)return(0,b.jsxs)("div",{className:"recall-empty",children:[(0,b.jsx)("b",{children:"用例已就绪,但还未跑评测。"}),(0,b.jsxs)("div",{style:{marginTop:6},children:["到 ",(0,b.jsx)("b",{children:"② 执行"})," 块点「批量执行」或「批量评测」开始;评测完成后这里显示聚合结果。"]})]});let o=a=>{let b=c[a.id];if(!b)return null;let d=b.sessionId,e=a.input||a.id,f=[];"number"==typeof b.score&&f.push(`评分 ${b.score} 分`),b.timeCost&&f.push(`耗时 ${b.timeCost}`),"number"==typeof b.tokenUsage&&b.tokenUsage>0&&f.push(`tokens ${b.tokenUsage}`);let g=f.length>0?f.join(" · "):null,h=b.output?b.output.length>240?b.output.slice(0,240)+"…":b.output:null,i="pass"===b.status,j="fail"===b.status;return i||j?{id:a.id,summary:e,severity:i?"low":null!=b.score&&b.score<50?"high":"medium",evidence:g,reasoning:h,suggestedFix:j?"点击「查看完整 trace」看 evaluator 详细反馈与 trajectory 错点":null,passed:i,dimension:d?`trace ${d.slice(0,8)}`:void 0}:{id:a.id,summary:e,severity:"low",evidence:"evaluating"===b.status?"评测中…":"executed"===b.status?"已执行,待评测":"running"===b.status?"执行中…":"待执行",reasoning:null,passed:!1,dimension:d?`trace ${d.slice(0,8)}`:void 0}},p=a.filter(a=>c[a.id]?.status==="pass").map(o).filter(a=>null!=a),q=a.filter(a=>c[a.id]?.status==="fail").map(o).filter(a=>null!=a),r=a.filter(a=>{let b=c[a.id]?.status;return!b||"pending"===b||"running"===b||"executed"===b||"evaluating"===b}).map(o).filter(a=>null!=a),s=[{key:"failed",title:"未通过",desc:"评测结果不达标。点击「查看完整 trace」可看 evaluator 详细反馈。",status:0===q.length?"passed":"failed",scoreLabel:`${q.length} 个问题`,items:q},{key:"passed",title:"通过",desc:"评测达标的 case。",status:"passed",scoreLabel:`${p.length} 通过`,items:p},{key:"pending",title:"待评测",desc:"还没执行或还没经过 evaluator 打分的 case;在 ② 执行块批量推进。",status:"notEvaluated",scoreLabel:`${r.length} 待评测`,items:r}];return(0,b.jsxs)("div",{className:"ev-content",children:[(0,b.jsxs)("div",{className:"ev-hero",children:[(0,b.jsxs)("div",{className:"ev-hero-main",children:[(0,b.jsxs)("div",{className:`ev-hero-num ${e}`,children:[d??"--",(0,b.jsx)("span",{className:"ev-hero-unit",children:"分"})]}),(0,b.jsxs)("div",{className:"ev-hero-label",children:["总评分 · 已评测 ",f," / ",l," 用例"]})]}),(0,b.jsxs)("div",{className:"ev-hero-sub",children:[(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsxs)("div",{className:`ev-hero-sub-num ${n??""}`,children:[m,"%"]}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"通过率"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"已评测中达标比例"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${h>0?"bad":""}`,children:h}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"未通过"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"需要重点关注"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${g>0?"good":""}`,children:g}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"通过"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"评测达标 case"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:"ev-hero-sub-num",children:i+j}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"待 / 评测中"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"尚未给分 case"})]})]})]}),(0,b.jsx)("div",{onClickCapture:a=>{if(!a.target.closest(".ev-issue"))return},children:(0,b.jsx)(t.FindingsGrouped,{groups:s,title:"分场景结果",hint:"未通过排在最上 · 通过 / 待评测 默认折叠",emptyMessage:"本任务没有用例"})})]})}var H=a.i(306765),I=a.i(113462),J=a.i(841952),K=a.i(823292),L=a.i(960798);function M(a){return!!a&&Object.values(a).some(a=>["a","b"].some(b=>{let c=a?.[b];return c?.status==="running"||c?.status==="evaluating"}))}function N(a){let b=a.configJson?.latestResultAt,c="string"==typeof b?Date.parse(b):0;if(Number.isFinite(c)&&c>0)return c;let d=Object.values(a.caseStatesJson||{}).flatMap(a=>["a","b"].flatMap(b=>(a?.[b]?.runs||[]).map(a=>"string"==typeof a.completedAt?Date.parse(a.completedAt):0))).filter(a=>Number.isFinite(a)&&a>0);return d.length>0?Math.max(...d):Date.parse(a.createdAt||"")||0}function O(a){return Object.values(a.caseStatesJson||{}).some(a=>["a","b"].some(b=>{let c=a?.[b];return!!(c&&("pending"!==c.status||(c.runs?.length||0)>0))}))}function P(a){return a?"number"==typeof a.score?a.score:"number"==typeof a.pass?a.pass:null:null}function Q(a){let b={total:0,avgScore:null,avgTime:null,avgTokens:null,passRate:0,triggered:0,toolCalls:0};if(!a)return b;let c=a=>{if(!a)return null;let b=/(\d+(?:\.\d+)?)\s*s/.exec(a);return b?Number(b[1]):null},d=Array.isArray(a.runs)?a.runs:[];if(d.length>0){let a=d.map(P).filter(a=>null!=a),b=d.filter(a=>{let b=P(a);return null!=b?b>=60:"pass"===a.status}).length,e=a.length?Math.round(a.reduce((a,b)=>a+b,0)/a.length):null,f=d.map(a=>c(a.timeCost)).filter(a=>null!=a),g=f.length?Number((f.reduce((a,b)=>a+b,0)/f.length).toFixed(2)):null,h=d.filter(a=>"number"==typeof a.tokenUsage&&(a.tokenUsage||0)>0),i=h.length?Math.round(h.reduce((a,b)=>a+(b.tokenUsage||0),0)/h.length):null,j=d.filter(a=>a.skillTriggered).length,k=d.reduce((a,b)=>a+(b.toolCallCount||0),0);return{total:d.length,avgScore:e,avgTime:g,avgTokens:i,passRate:Math.round(b/d.length*100),triggered:j,toolCalls:k}}let e=P(a);if(!("pass"===a.status||"fail"===a.status||null!=e||a.sessionId))return b;let f=null!=e?+(e>=60):+("pass"===a.status);return{total:1,avgScore:e,avgTime:c(a.timeCost),avgTokens:"number"==typeof a.tokenUsage&&a.tokenUsage>0?a.tokenUsage:null,passRate:100*f,triggered:+!!a.skillTriggered,toolCalls:a.toolCallCount||0}}function R(a){return Q({runs:a.flatMap(a=>Array.isArray(a.runs)&&a.runs.length>0?a.runs:"pass"===a.status||"fail"===a.status||null!=P(a)||a.sessionId?[a]:[])})}function S(a){if(!a)return[];let b=Array.isArray(a.runs)?a.runs:[];if(b.length>0)return b.map(P).filter(a=>null!=a);let c=P(a);return null==c?[]:[c]}function T(a,b){return`${a||"Skill"}:v${b??"?"}`}function U(a){if(!a)return{avgPct:null,scoredCount:0};let b=a.l2Scores?.scores;if(!b)return{avgPct:null,scoredCount:0};let c=0,d=0;for(let a of J.STATIC_EVAL_STANDARDS){let e=a.dimensionAliases.map(a=>b[a]).find(a=>"number"==typeof a&&Number.isFinite(a));"number"==typeof e&&(d++,c+=e)}return{avgPct:d>0?Math.round(c/d*20):null,scoredCount:d}}function V(){return(0,b.jsx)(c.Suspense,{fallback:null,children:(0,b.jsx)(W,{})})}function W(){var a;let i,j,m=(0,d.useRouter)(),r=(0,d.useSearchParams)(),{user:s}=(0,f.useAuth)(),[t]=(0,c.useState)(()=>r.get("skill")||""),[u]=(0,c.useState)(()=>r.get("version")||""),[v,w]=(0,c.useState)(()=>{let a=r.get("view");return"trace"===a||"static"===a||"gray"===a||"overview"===a?a:"overview"});(0,c.useEffect)(()=>{if((r.get("view")||"overview")===v)return;let a=new URLSearchParams(Array.from(r.entries()));"overview"===v?a.delete("view"):a.set("view",v);let b=a.toString();m.replace(b?`?${b}`:"?",{scroll:!1})},[v]);let[x,y]=(0,c.useState)([]),[z,A]=(0,c.useState)(!1),[B,D]=(0,c.useState)(""),[E,F]=(0,c.useState)(null),[G,I]=(0,c.useState)([]),[J,K]=(0,c.useState)(!1),L=(0,c.useRef)([]);(0,c.useEffect)(()=>{L.current=G},[G]);let[P,V]=(0,c.useState)(null),[W,X]=(0,c.useState)(null),[Y,Z]=(0,c.useState)(!1),[ab,ac]=(0,c.useState)(0),[ae,af]=(0,c.useState)(0),[aj,ak]=(0,c.useState)(0),[al,ap]=(0,c.useState)(r.get("taskId")||""),[aq,ar]=(0,c.useState)(r.get("taskId")||""),[as,at]=(0,c.useState)(!1),[au,av]=(0,c.useState)(!1),[aw,ax]=(0,c.useState)(""),[ay,az]=(0,c.useState)(""),[aA,aB]=(0,c.useState)([]),[aC,aD]=(0,c.useState)([]),[aE,aF]=(0,c.useState)([]),[aG,aH]=(0,c.useState)([]),[aI,aJ]=(0,c.useState)(()=>C.presetEvaluators.filter(a=>"ready"===a.status).map(a=>a.id));(0,c.useEffect)(()=>{if(!s){aD([]),aF([]);return}Promise.all([(0,g.apiFetch)(`/api/agent-datasets?user=${encodeURIComponent(s)}`).then(a=>a.json()).catch(()=>[]),(0,g.apiFetch)(`/api/user-evaluators?user=${encodeURIComponent(s)}`).then(a=>a.json()).catch(()=>[])]).then(([a,b])=>{Array.isArray(a)&&aD(a.map(a=>({id:a.id,name:a.name,cases:a.cases}))),Array.isArray(b)&&aF(b.map(a=>({id:a.id,name:a.name})))}).catch(()=>{})},[s]);let[aK,aL]=(0,c.useState)([]),aM=(0,c.useCallback)(async()=>{if(!s)return void aL([]);try{let a=aw?`&includeRunId=${encodeURIComponent(aw)}`:"",b=await (0,g.apiFetch)(`/api/eval/trajectory/runs?user=${encodeURIComponent(s)}&limit=50&latestByCase=1&excludeGrayscale=1${a}`),c=await b.json();Array.isArray(c?.runs)&&aL(c.runs.map(a=>({runId:a.runId,taskTitle:a.taskTitle,traceCount:a.traceCount,doneCount:a.doneCount,runningCount:a.runningCount,createdAt:a.createdAt,skillName:a.skillName,skillVersion:a.skillVersion})))}catch{}},[s,aw]);(0,c.useEffect)(()=>{aM()},[aM]);let aN=(0,c.useMemo)(()=>s&&B?`skill-eval:case-config:${s}:${B}:v${E??"all"}`:"",[s,B,E]);(0,c.useEffect)(()=>{if(aN)try{let a=localStorage.getItem(aN);if(!a)return;let b=JSON.parse(a);Array.isArray(b?.datasetIds)&&aH(b.datasetIds),Array.isArray(b?.evaluatorIds)&&b.evaluatorIds.length>0&&aJ(b.evaluatorIds)}catch{}},[aN]);let aO=(0,c.useCallback)(a=>{if(aH(a),aN)try{localStorage.setItem(aN,JSON.stringify({datasetIds:a,evaluatorIds:aI}))}catch{}},[aN,aI]),aP=(0,c.useCallback)(a=>{if(aJ(a),aN)try{localStorage.setItem(aN,JSON.stringify({datasetIds:aG,evaluatorIds:a}))}catch{}},[aN,aG]);(0,c.useEffect)(()=>{if(0===aC.length)return;let a=new Set(aC.map(a=>a.id)),b=aG.filter(b=>a.has(b));if(b.length!==aG.length&&(aH(b),aN))try{localStorage.setItem(aN,JSON.stringify({datasetIds:b,evaluatorIds:aI}))}catch{}},[aC,aG,aN,aI]);let aQ=(0,c.useMemo)(()=>s&&B?`skill-eval:trace-eval-batch:${s}:${B}:v${E??"all"}`:"",[s,B,E]);(0,c.useEffect)(()=>{if(!aQ){ax(""),az(""),aB([]);return}try{let a=localStorage.getItem(aQ);if(!a){ax(""),az(""),aB([]);return}let b=JSON.parse(a);ax(b?.id||""),az(b?.title||""),aB(Array.isArray(b?.evaluators)?b.evaluators:[])}catch{ax(""),az(""),aB([])}},[aQ]);let aR=(0,c.useMemo)(()=>x.find(a=>a.id===B)||null,[x,B]),aS=(0,c.useMemo)(()=>{if(!aw||null==E)return aw;let a=aK.find(a=>a.runId===aw);return a&&(a.traceCount||0)>0&&(a.skillName!==aR?.name||a.skillVersion!==E)?"":aw},[aw,aK,aR?.name,E]),aT=(0,c.useMemo)(()=>{let a=aR?.name;return a?aK.filter(b=>b.runId===aS||b.skillName===a&&(null==E||0===(b.traceCount||0)||b.skillVersion===E)):aK},[aK,aR?.name,E,aS]),aU=(0,c.useMemo)(()=>[...aR?.versions||[]].sort((a,b)=>b.version-a.version),[aR]);(0,c.useEffect)(()=>{s&&(A(!0),(0,g.apiFetch)(`/api/skills?user=${encodeURIComponent(s)}`).then(a=>a.json()).then(a=>{Array.isArray(a)&&y(a)}).catch(()=>{}).finally(()=>A(!1)))},[s]),(0,c.useEffect)(()=>{if(0===x.length){B&&D(""),F(null);return}if(B&&x.some(a=>a.id===B))return;let a=null,b=function(a,b,c){if(b){let c=a.find(a=>a.name===b||a.id===b);if(c)return c}if(c?.skillId){let b=a.find(a=>a.id===c.skillId);if(b)return b}if(c?.skillName){let b=a.find(a=>a.name===c.skillName);if(b)return b}return null}(x,t,a)||x[0];D(b.id),F(ag(b,function(a){if(!a)return null;let b=Number(a);return Number.isFinite(b)?b:null}(u)??a?.version??null)),!al&&a?.taskId&&a.skillName===b.name&&ap(a.taskId)},[t,u,al,B,x,s]),(0,c.useEffect)(()=>{aR&&(aR.id,aR.name)},[aR,E,aq,s]),(0,c.useEffect)(()=>{if(!aR)return void F(null);let a=aR.versions||[];null==E||a.some(a=>a.version===E)||F(ag(aR,E))},[aR,E]),(0,c.useEffect)(()=>{let a=new URLSearchParams(Array.from(r.entries())),b=aR?.name||"",c=null!=E?String(E):"",d=(a.get("skill")||"")===b,e=(a.get("version")||"")===c;if(d&&e)return;b?a.set("skill",b):a.delete("skill"),c?a.set("version",c):a.delete("version");let f=a.toString();m.replace(f?`?${f}`:"?",{scroll:!1})},[aR,E]);let aV=(0,c.useCallback)(async a=>{if(!s||!aR)return I([]),V(null),[];0===L.current.length&&K(!0);let b=new URLSearchParams({user:s,includeEvaluations:"0",skipAutoEvalReady:"1"}),c=a?.retries??0,d=a?.retryDelayMs??800,e=async a=>{let c=new URLSearchParams(b);c.set("_ts",String(a??Date.now()));let d=await (0,g.apiFetch)(`/api/observe/data?${c.toString()}`,{cache:"no-store"});if(!d.ok)throw Error(`Trace 列表加载失败: HTTP ${d.status}`);let e=await d.json();return Array.isArray(e)?e.filter(a=>(function(a,b,c){let d=b.trim();if(!d)return!1;let e=ah(a);return!!e?.name&&e.name===d&&(null==c||e.version===c)})(a,aR.name,E)).filter(a=>{var b;return!((b=a.agentName||a.agent)&&h.has(b.trim()))}).slice(0,200):[]};try{let a=[];for(let b=0;b<=c;b++)a=await e(Date.now()+b),I(a),V(a.length>0?new Date().toISOString():null),0===b&&K(!1),b<c&&await new Promise(a=>setTimeout(a,d));return a}catch{return I([]),V(null),[]}finally{K(!1)}},[aR,E,s]);(0,c.useEffect)(()=>{aV()},[aV,aj]),(0,c.useEffect)(()=>{if(0===G.length){aq&&ar("");return}if(al&&G.some(a=>an(a)===al)){aq!==al&&ar(al);return}aq&&G.some(a=>an(a)===aq)||ar(an(G[0]))},[al,aq,G]);let aW=(0,c.useCallback)(async a=>{if(!s||!aR||null==E)return X(null),null;Z(!0);let b=a?.retries??5,c=a?.retryDelayMs??600,d=a?.expectedEvaluationId,e=async a=>{let b=new URLSearchParams({user:s,_ts:String(a??Date.now())}),c=await (0,g.apiFetch)(`/api/skills/${aR.id}/versions/${E}/evaluation-summary?${b.toString()}`,{cache:"no-store"});if(!c.ok)throw Error(`静态摘要加载失败: HTTP ${c.status}`);return c.json()};try{let a=null;for(let f=0;f<=b&&(a=await e(Date.now()+f),X(a),d&&a.latest?.evaluationId!==d);f++)f<b&&await new Promise(a=>setTimeout(a,c));return a}catch{return X(null),null}finally{Z(!1)}},[aR,E,s]);(0,c.useEffect)(()=>{aW()},[aW,aj]);let[aX,aY]=(0,c.useState)(null),[aZ,a$]=(0,c.useState)(!1),a_=(0,c.useCallback)(async a=>{if(!s||!aR)return aY(null),null;let b=aR.name;a$(!0);let c=a?.retries??5,d=a?.retryDelayMs??600,e=a?.expectedRunId,f=async a=>{let c=new URLSearchParams({user:s,_ts:String(a??Date.now())}),d=new URLSearchParams({user:s,latestOnly:"true",_ts:String(a??Date.now())});null!=E&&d.set("skillVersion",String(E));let[e,f]=await Promise.all([(0,g.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(b)}?${c.toString()}`,{cache:"no-store"}).then(a=>a.ok?a.json():{set:null}).catch(()=>({set:null})),(0,g.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(b)}/runs?${d.toString()}`,{cache:"no-store"}).then(a=>a.ok?a.json():{run:null}).catch(()=>({run:null}))]),h=Array.isArray(e?.set?.items)?e.set.items:[],i=h.filter(a=>a?.shouldTrigger===!0).length,j=f?.run??null;return{hasSet:!!e?.set,itemCount:h.length,positiveCount:i,latestRun:j&&"done"===j.status?{id:"string"==typeof j.id?j.id:void 0,passRate:Number(j.passRate??0),truePositiveRate:Number(j.truePositiveRate??0),falsePositiveRate:Number(j.falsePositiveRate??0),skillVersion:Number(j.skillVersion??0),ranAt:String(j.createdAt??"")}:null}};try{let a=null;for(let b=0;b<=c&&(a=await f(Date.now()+b),aY(a),e&&a.latestRun?.id!==e);b++)b<c&&await new Promise(a=>setTimeout(a,d));return a}catch{return aY(null),null}finally{a$(!1)}},[aR,E,s]);(0,c.useEffect)(()=>{a_()},[a_,aj]);let a0=(0,c.useCallback)(()=>{if(!aR)return;let a=null!=E?`?version=${E}`:"";m.push(`/skill-eval/trigger/${encodeURIComponent(aR.name)}${a}`)},[m,aR,E]),a1=(0,c.useCallback)(a=>{if(av(!1),ax(a.evaluatorRunId),az(a.taskTitle),aB(a.selectedEvaluators),aQ)try{localStorage.setItem(aQ,JSON.stringify({id:a.evaluatorRunId,title:a.taskTitle,evaluators:a.selectedEvaluators}))}catch{}aM()},[aQ,aM]),a2=(0,c.useCallback)(a=>{if(ax(a.runId),az(a.taskTitle||""),aB([]),aQ)try{localStorage.setItem(aQ,JSON.stringify({id:a.runId,title:a.taskTitle||"",evaluators:[]}))}catch{}},[aQ]);(0,c.useEffect)(()=>{if(!(aw&&aT.some(a=>a.runId===aw)))if(aT.length>0){let a=aT[0];a2({runId:a.runId,taskTitle:a.taskTitle})}else aw&&ax("")},[aT,a2,aw]);let a3=(0,c.useCallback)(async a=>{let b={resultErrors:[],trajectoryErrors:new Map};if(!s||0===a.length)return b;let c=[];try{let b={user:s,taskIds:a};aG.length>0&&(b.datasetIds=aG),aw?b.evaluatorRunId=aw:b.evaluators=aI.length>0?aI:["preset-agent-task-completion"];let c=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok){let a=await c.json().catch(()=>({}));throw Error(a?.error||`结果评估入队失败 (HTTP ${c.status})`)}}catch(a){c.push(String(a instanceof Error?a.message:a))}let d=new Map,e=a.map(a=>(async()=>{try{let b=await (0,g.apiFetch)(`/api/observe/executions/${encodeURIComponent(a)}/analyze-match`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:s,mode:"compare"})});if(!b.ok){let c=await b.json().catch(()=>({})),e=c?.error||`analyze-match 失败 (HTTP ${b.status})`;d.set(a,String(e))}}catch(b){d.set(a,b instanceof Error?b.message:"网络/解析错误")}})());return await Promise.all(e),(c.length>0||d.size>0)&&console.warn("[skill-eval] batch analyze partial failures:",{resultErrors:c,trajectoryErrors:d}),await aV({retries:30,retryDelayMs:3e3}),{resultErrors:c,trajectoryErrors:d}},[s,aV,aw,aI,aG]),[a4,a5]=(0,c.useState)(null),[a6,a7]=(0,c.useState)(null),a8=(0,c.useCallback)(async()=>{if(!s)return a5(null),a7(null),{summary:null,meta:null,busy:!1};try{let a=await (0,g.apiFetch)(`/api/debug/grayscale-tasks?user=${encodeURIComponent(s)}&_ts=${Date.now()}`,{cache:"no-store"}),b=a.ok?await a.json():[],c=aR?.versions?.find(a=>a.version===E)?.id,d=Array.isArray(b)?aR?b.filter(a=>a?.configJson?.skillId===aR.id&&(!c||a?.configJson?.versionBId===c)):b:[],e=[...d].sort((a,b)=>{let c=Number(!!b.activeRun)-Number(!!a.activeRun);if(0!==c)return c;let d=Number(O(b))-Number(O(a));return 0!==d?d:N(b)-N(a)})[0]||null,f={};(aR?.versions||[]).forEach(a=>{a.id&&(f[a.id]={version:a.version,skillName:aR?.name||"Skill"})});let h=e?function(a,b,c){let d,e,f,g=a.caseStatesJson||{},h="a"in g||"b"in g,i=h?[]:Object.values(g).filter(a=>!!a&&"object"==typeof a),j=h?Q(g.a):R(i.map(a=>a.a).filter(a=>!!a)),l=h?Q(g.b):R(i.map(a=>a.b).filter(a=>!!a)),m=h?S(g.a):i.flatMap(a=>S(a.a)),r=h?S(g.b):i.flatMap(a=>S(a.b));if(0===j.total&&0===l.total)return null;let s=h?Math.max(j.total,l.total):i.length,t=h?Math.min(j.total,l.total):i.filter(a=>Q(a.a).total>0&&Q(a.b).total>0).length,u=null!=j.avgScore&&null!=l.avgScore?l.avgScore-j.avgScore:null,v=null!=j.avgScore&&null!=l.avgScore&&j.avgScore>0?Number(((l.avgScore-j.avgScore)/j.avgScore*100).toFixed(1)):null,w=function(a,b){if(0===a.length||0===b.length)return null;let c=n(a),d=n(b);if(a.length<2||b.length<2)return+(c===d);let e=o(a,c),f=o(b,d),g=e/a.length,h=f/b.length,i=Math.sqrt(g+h);if(!Number.isFinite(i)||0===i)return+(c===d);let j=(d-c)/i,k=g**2/(a.length-1)+h**2/(b.length-1),l=function(a,b){if(!Number.isFinite(a)||!Number.isFinite(b)||b<=0)return NaN;if(0===a)return .5;let c=function(a,b,c){if(a<=0)return 0;if(a>=1)return 1;let d=Math.exp(p(b+.5)-p(b)-p(.5)+b*Math.log(a)+.5*Math.log(1-a));return a<(b+1)/(b+.5+2)?d*q(b,.5,a)/b:1-d*q(.5,b,1-a)/.5}(b/(b+a*a),b/2,0);return a>0?1-c/2:c/2}(Math.abs(j),k>0?(g+h)**2/k:a.length+b.length-2);return Number.isFinite(l)?Math.max(0,Math.min(1,Number((2*(1-l)).toFixed(6)))):null}(m,r),x=(a,d)=>{if("__NONE__"===a)return{label:"无 Skill",hasSkill:!1};if(a){let d=b?.[a];return{label:T(d?.skillName||c?.skillName,d?.version??c?.version),hasSkill:!0}}return"none"===d?{label:"无 Skill",hasSkill:!1}:{label:T(c?.skillName,c?.version),hasSkill:!0}},y=x(a.configJson?.versionAId,"none"),z=x(a.configJson?.versionBId,"has"),A=h?{"legacy-case":{a:g.a,b:g.b}}:g,B=(0,k.calculateAbScoring)(A,{repeatRounds:a.configJson?.repeatRounds}),C=a.configJson?.repeatRounds??B.repeatRounds??1,D=(d=new Set(["pass","fail","executed"]),e=0,f=a=>{if(!a||(Array.isArray(a.runs)&&a.runs.forEach(f),!a.completedAt||!d.has(a.status||"")))return;let b=new Date(a.completedAt).getTime();Number.isFinite(b)&&(e=Math.max(e,b))},"a"in A||"b"in A?(f(A.a),f(A.b)):Object.values(A).forEach(a=>{f(a.a),f(a.b)}),e>0?new Date(e).toISOString():void 0);return{taskId:a.id,taskName:a.taskName||"AB测评",createdAt:a.createdAt,latestResultAt:a.configJson?.latestResultAt,latestCompletedAt:D,runCount:a.configJson?.runCount||Math.max(j.total,l.total)||1,repeatRounds:C,sampleCount:s,completedPairs:t,a:j,b:l,aLabel:y.label,bLabel:z.label,aHasSkill:y.hasSkill,bHasSkill:z.hasSkill,aVersionId:a.configJson?.versionAId,bVersionId:a.configJson?.versionBId,delta:u,deltaPct:v,pValue:w,recommendation:null==u?"insufficient":u>=5?"up":u<=-5?"down":"flat",scoring:B}}(e,f,{skillName:aR?.name,version:E}):null;return a7(e),a5(h),{summary:h,meta:e,busy:!!e?.activeRun||M(e?.caseStatesJson)}}catch{return a5(null),a7(null),{summary:null,meta:null,busy:!1}}},[s,aR,E]);(0,c.useEffect)(()=>{let a=null,b=!1;return a8().then(c=>{!b&&c.busy&&(a=setInterval(()=>{a8()},2500))}),()=>{b=!0,a&&clearInterval(a)}},[a8,aj]);let a9=ai(G),ba=G.find(a=>an(a)===aq)||null,bb=ai(ba?[ba]:[]),bc=a9.analyzed,bd=U(W?.latest??null),be=!!W?.latest,bf=!!aX?.latestRun;a4&&a4.b.avgScore;let bg=a6?.caseStatesJson||{},bh=(Object.keys(bg).length>0&&Object.values(bg).every(a=>{let b=a=>a?.status==="executed"||a?.status==="pass";return b(a?.a)&&b(a?.b)})?a4?.scoring.totalScore:null)??null,bi=G.reduce((a,b)=>{let c="number"==typeof b.answer_score?b.answer_score:"number"==typeof b.answerScore?b.answerScore:null,d=am(b);return null!=c&&null!=d&&(a.sum+=(c+d)/2,a.count+=1),a},{sum:0,count:0}),bj=bi.count>0,bk=[bj?{passed:Math.round(bi.sum/bi.count*100),total:100}:null,null!=bd.avgPct?{passed:bd.avgPct,total:100}:null,bf&&aX&&aX.itemCount>0?{passed:Math.round(aX.latestRun.passRate*aX.itemCount),total:aX.itemCount}:null,null!=bh?{passed:bh,total:100}:null].filter(a=>!!a&&a.total>0),bl=be||bj||bf||null!=bh,bm={total:bk.reduce((a,b)=>a+b.total,0),passed:bk.reduce((a,b)=>a+b.passed,0)},bn=bl&&bm.total>0?Math.round(bm.passed/bm.total*100):null,bo=aR&&null!=E?`/skill-opt/${encodeURIComponent(aR.name)}/${E}`:"/skill-opt",bp=(0,c.useCallback)(a=>{ar(a),ap("")},[]),bq=(0,b.jsxs)("span",{className:"sa-top-title",children:["overview"===v?(0,b.jsx)("span",{children:"Skills 评测"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{onClick:()=>w("overview"),children:"Skills 评测"}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("b",{children:"trace"===(a=v)?"用例分析":"static"===a?"静态合规分析":"gray"===a?"A/B测试":"综合分析"})]}),(0,b.jsx)("span",{className:"sa-top-dot",children:"·"}),(0,b.jsxs)("select",{className:"sa-top-select",value:B,onChange:a=>{let b=x.find(b=>b.id===a.target.value);D(a.target.value),F(b?ag(b):null),w("overview")},disabled:z,"aria-label":"切换 Skill",children:[0===x.length&&(0,b.jsx)("option",{value:"",children:"暂无 Skill"}),x.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]}),(0,b.jsxs)("select",{className:"sa-top-select sa-top-select-version",value:E??"",onChange:a=>{F(Number(a.target.value))},disabled:!aR,"aria-label":"切换版本",children:[0===aU.length&&aR&&(0,b.jsxs)("option",{value:aR.activeVersion??aR.version??0,children:["v",aR.activeVersion??aR.version??0]}),aU.map(a=>(0,b.jsxs)("option",{value:a.version,children:["v",a.version,a.version===aR?.activeVersion?"(当前)":""]},a.version))]})]});return(0,b.jsxs)("div",{className:"sa-root",children:[(0,b.jsx)(e.AppTopBar,{title:bq,showDefaultActions:!1}),(0,b.jsxs)("main",{className:"sa-main",children:["overview"===v&&(0,b.jsx)(b.Fragment,{children:(0,b.jsx)($,{user:s,selectedSkill:aR,selectedVersion:E,traceEvaluationBatchId:aS,traceEvaluationBatchTitle:ay,health:bn,standards:bm,traces:G,traceAnalyzed:bc,traceCardUpdatedAt:P,selectedTrace:ba,selectedTraceStats:bb,staticSummary:W,staticLoading:Y,tracesLoading:J,hasAnyAnalysisResult:bl,graySummary:a4,grayTaskMeta:a6,triggerSummary:aX,triggerLoading:aZ,onReloadTraces:aV,onReloadStatic:aW,onReloadTrigger:a_,onReloadGray:a8,onOpenTriggerEditor:a0,onOpen:w,smartRunBusy:as,onSmartRunBusyChange:at})}),"trace"===v&&(0,b.jsx)(_,{skill:aR,version:E,user:s,traces:G,loading:J,prefillTraceId:al,selectedTraceId:aq,onSelectedTraceChange:bp,onBack:()=>w("overview"),onReload:aV,onOptimize:()=>m.push(bo),onBatchAnalyze:a3,traceEvaluationBatchId:aS,traceEvaluationBatchTitle:ay,onOpenEvalBatchDialog:()=>av(!0),evalTaskOptions:aT,onSelectEvalBatch:a2,datasets:aC,selectedDatasetIds:aG,onSelectedDatasetIdsChange:aO,evaluatorOptions:[...C.presetEvaluators.filter(a=>"ready"===a.status).map(a=>({id:a.id,name:a.name})),...aE],selectedEvaluatorIds:aI,onSelectedEvaluatorIdsChange:aP},`tracepanel_${aR?.id||"noskill"}_${E??"all"}`),"static"===v&&(0,b.jsx)(aa,{skill:aR,version:E,user:s,summary:W,loading:Y,onBack:()=>w("overview"),onReload:aW,onOptimize:()=>m.push(bo)}),"gray"===v&&(0,b.jsx)(ad,{title:"A/B测试",description:"对照两个 Skill 版本或基础 Agent 的执行质量,定位新版本是否真正修复了关键失败类型。",primaryAction:"新建任务",secondaryAction:"历史任务",onBack:()=>w("overview"),onPrimary:()=>ac(a=>a+1),onSecondary:()=>af(a=>a+1),onOptimize:()=>m.push(bo),renderHeader:"none",children:(0,b.jsx)(H.GrayscaleEvaluation,{hifi:!0,newTaskTrigger:ab,historyPanelTrigger:ae,pageTitle:"A/B测试",pageDescription:"对照两个 Skill 版本或基础 Agent 的执行质量,定位新版本是否真正修复了关键失败类型。",pageBadge:"调测分析",onBack:()=>w("overview"),onOptimize:()=>m.push(bo),parentSkillId:B,parentSkillVersion:E,skillSelectorSlot:(i=null!=E&&E===(aR?.activeVersion??aR?.version),j=(aR?.name||"SKL").replace(/[^a-zA-Z0-9]/g,"").slice(0,3).toUpperCase()||"SKL",(0,b.jsxs)("section",{className:"sa-selector sa-selector-hifi","aria-label":"选择skill",children:[(0,b.jsx)("div",{className:"sa-skill-icon",children:j}),(0,b.jsxs)("div",{className:"sa-skill-info",children:[(0,b.jsxs)("div",{className:"sa-skill-name-row",children:[(0,b.jsx)("span",{className:"sa-skill-name",children:aR?.name||"请选择 Skill"}),null!=E&&(0,b.jsxs)("span",{className:`sa-skill-version-chip ${i?"":"muted"}`,children:["v",E,i?" · 当前":""]}),null!=bn&&bn<60&&(0,b.jsxs)("span",{className:"sa-skill-warn-badge",children:[(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:(0,b.jsx)("path",{d:"M12 2L1 21h22L12 2z"})}),null!=bn&&bn<60&&bn>=40?"需关注":"急需优化"]})]}),(0,b.jsxs)("div",{className:"sa-skill-stats",children:[(0,b.jsxs)("span",{className:"stat",children:[(0,b.jsx)("strong",{children:G.length})," 条执行"]}),(0,b.jsxs)("span",{className:"stat",children:["最近 ",(0,b.jsx)("strong",{children:30})," 天"]}),(0,b.jsxs)("span",{className:"stat",children:[(0,b.jsx)("strong",{children:"4"})," 个评估器"]}),(0,b.jsxs)("span",{className:"stat",children:[(0,b.jsx)("strong",{children:"19"})," 项标准"]}),aR?.updatedAt&&(0,b.jsxs)("span",{className:"stat",children:["发布于 ",(0,b.jsx)("strong",{children:ao(aR.updatedAt)})]})]})]}),(0,b.jsxs)("div",{className:"sa-skill-switchers",children:[(0,b.jsxs)("select",{value:B,onChange:a=>{let b=x.find(b=>b.id===a.target.value);D(a.target.value),F(b?ag(b):null)},disabled:z,"aria-label":"切换 Skill",children:[0===x.length&&(0,b.jsx)("option",{value:"",children:"暂无 Skill"}),x.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]}),(0,b.jsxs)("select",{value:E??"",onChange:a=>F(Number(a.target.value)),disabled:!aR,"aria-label":"切换版本",children:[0===aU.length&&aR&&(0,b.jsxs)("option",{value:aR.activeVersion??aR.version??0,children:["v",aR.activeVersion??aR.version??0]}),aU.map(a=>(0,b.jsxs)("option",{value:a.version,children:["v",a.version]},a.version))]})]})]}))})})]}),(0,b.jsx)(l.NewEvaluationBatchDialog,{open:au,user:s||"",defaultTitle:ay||(aR?`${aR.name} trace 评测`:void 0),evaluators:aI,onClose:()=>av(!1),onCreated:a1})]})}let X={queued:0,running:0,done:0,failed:0};function Y(a){let{user:b,skillName:d,skillVersion:e,taskType:f,enabled:h=!0}=a,[i,j]=(0,c.useState)(X);return(0,c.useEffect)(()=>{if(!h||!b)return void j(X);let a=!1,c=new URLSearchParams({user:b});d&&c.set("skill",d),null!=e&&c.set("version",String(e)),f&&c.set("taskType",f);let i=`/api/background-tasks?${c.toString()}`,k=async()=>{try{let b=await (0,g.apiFetch)(i,{cache:"no-store"});if(!b.ok)return;let c=await b.json();a||j(c?.counts??X)}catch{}};k();let l=setInterval(k,2500);return()=>{a=!0,clearInterval(l)}},[b,d,e,f,h]),i}function Z({counts:a,hint:c}){let{queued:d,running:e,done:f,failed:g}=a;return d+e+f+g===0?null:(0,b.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:c||"后台 opencode 任务状态(2.5s 刷新一次;近 5 分钟内完成的会短暂保留显示)",children:[d>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#ca8a04"}}),"排队 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:d})]}),e>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#2563eb"}}),"执行中 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:e})]}),f>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#16a34a"}}),"已完成 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:f})]}),g>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#dc2626"}}),"失败 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:g})]})]})}function $({user:a,selectedSkill:d,selectedVersion:e,traceEvaluationBatchId:f,traceEvaluationBatchTitle:h,health:i,standards:k,traces:l,traceAnalyzed:m,traceCardUpdatedAt:n,selectedTrace:o,selectedTraceStats:p,staticSummary:q,staticLoading:r,tracesLoading:s,hasAnyAnalysisResult:t,graySummary:u,grayTaskMeta:v,triggerSummary:w,triggerLoading:x,onReloadTraces:y,onReloadStatic:z,onReloadTrigger:A,onReloadGray:C,onOpenTriggerEditor:D,onOpen:E,smartRunBusy:F,onSmartRunBusyChange:G}){var H;let I=Y({user:a,skillName:d?.name,skillVersion:e,enabled:!!d}),N=Y({user:a,skillName:d?.name,skillVersion:e,taskType:"trigger-eval",enabled:!!d}),O=U(q?.latest??null),P=!!q?.latest,Q=ai(l).highDeviation,[R,S]=(0,c.useState)(null),V=o?an(o):"";p.totalSteps>0&&(p.matchedSteps,p.totalSteps);let W=l.reduce((a,b)=>{let c="number"==typeof b.answer_score?b.answer_score:"number"==typeof b.answerScore?b.answerScore:null,d=am(b);return null!=c&&null!=d&&(a.sum+=(c+d)/2,a.count+=1),a},{sum:0,count:0}).count,X=W>0,$=!!f,_=B(a,f,5e3),aa=$?Array.from(_.values()):[],ab=aa.filter(a=>"number"==typeof a.resultScore&&"number"==typeof a.trajScore),ac=ab.length,ad=aa.length,ae=0===ac?null:Math.round(ab.reduce((a,b)=>a+(b.resultScore+b.trajScore)/2,0)/ac),af=$?null==ae?"待评测":ae>=60?"正常":"需关注":"未关联",ag=l.reduce((a,b)=>{let c="number"==typeof b.answer_score?b.answer_score:"number"==typeof b.answerScore?b.answerScore:null,d=am(b);if(null==c||null==d)return a;let e=b.execution_match?.matchedAt||b.timestamp||null;return e?a?new Date(e).getTime()>new Date(a).getTime()?e:a:e:a},null);(0,c.useEffect)(()=>{if(!a||!V)return void S(null);let b=!1;return(0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(a)}&taskId=${encodeURIComponent(V)}&limit=1`,{cache:"no-store"}).then(a=>a.ok?a.json():null).then(a=>{if(b)return;let c=(Array.isArray(a?.results)?a.results:[])[0];S(c?.updatedAt||null)}).catch(()=>{b||S(null)}),()=>{b=!0}},[V,n,a]);let aj=X?R||n||ag:null,ao=l.length>0&&W===l.length,aq=o?ah(o):null,ar=!!V&&!!aq?.name,as=!!w?.hasSet,at=!!w?.latestRun,au=as&&(w?.itemCount??0)>0,av=!!u&&null!=u.b.avgScore,aw=v?.caseStatesJson||{},ax=(Object.keys(aw).length>0&&Object.values(aw).every(a=>{let b=a=>a?.status==="executed"||a?.status==="pass";return b(a?.a)&&b(a?.b)})?u?.scoring.totalScore:null)??null,ay=(v?.configJson?.checkedCaseIds??v?.configJson?.selectedCaseIds??[]).length,az=!!v?.activeRun||M(v?.caseStatesJson),aA=ay>0&&!az,aB=!!v?.id&&aA,aC=!!d&&null!=e,aD=[{key:"trace",name:"用例分析",hasResult:X,canRun:ar,runHint:ar?"当前 Trace 可分析":0===l.length?"暂无 Trace 可分析":o?aq?.name?"待分析 · 需先进入详情页完成评测":"当前 Trace 未加载主 Skill,无法分析":"需先选择 Trace"},{key:"static",name:"静态合规",hasResult:P,canRun:aC,runHint:aC?"可启动静态扫描":"待分析 · 需先选择 Skill 与版本"},{key:"trigger",name:"触发分析",hasResult:at,canRun:au,runHint:as?au?"触发集已准备 · 可立即评测":"触发集为空 · 需先补充数据":"未配置 · 需先准备触发集"},{key:"gray",name:"A/B测试",hasResult:null!=ax,canRun:aB,runHint:aB?"开始执行可点击":az?"执行中 · 当前 A/B 任务不可重复启动":0===ay?"未配置 · 需先在详情页选择样本":"未配置 · 需先保存 A/B 任务"}],aE=aD.filter(a=>a.hasResult).length,aF=aD.length,aG=d&&null!=e?`/skill-opt/${encodeURIComponent(d.name)}/${e}`:"/skill-opt",aH=t&&null!=i?aE<aF?"warn":i>=80?"ok":i>=60?"warn":"err":"idle",aI=t?aE<aF?`数据不足 \xb7 仅 ${aE}/${aF} 评估器有结果`:i>=80?"健康":i>=60?"需关注":"急需优化":"尚未运行任何评估",[aJ,aK]=(0,c.useState)(null),[aL,aM]=(0,c.useState)("idle"),[aN,aO]=(0,c.useState)("idle"),aP=aD.filter(a=>a.canRun).map(a=>a.key),[aQ,aR]=(0,c.useState)(aP);(0,c.useEffect)(()=>{aR(aP)},[aP.join("|")]);let aS=(0,c.useCallback)(a=>{if(!d)return null;let b=a?.traces??l,c=a?.staticSummary??q,f=a?.triggerSummary??w,g=a?.graySummary??u,h=a?.grayTaskMeta??v,j=a?.traceBusy??b.some(a=>a.is_evaluating),k=a?.grayBusy??(!!h?.activeRun||M(h?.caseStatesJson)),m=b.reduce((a,b)=>{let c="number"==typeof b.answer_score?b.answer_score:"number"==typeof b.answerScore?b.answerScore:null,d=am(b);return null!=c&&null!=d&&(a.sum+=(c+d)/2,a.count+=1),a},{sum:0,count:0}),n=m.count>0?Math.round(m.sum/m.count*100):null,p=ai(b),r=U(c?.latest??null),s=!!f?.hasSet,t=!!f?.latestRun,x=b.find(a=>an(a)===V)||o,y=(h?.configJson?.checkedCaseIds??h?.configJson?.selectedCaseIds??[]).length,z=!!V&&!!(x?ah(x)?.name:null),A=[];g&&null!=g.scoring.totalScore||A.push("ab"),null==n&&A.push("trace"),t||A.push("recall"),null==r.avgPct&&A.push("static");let B=(a,b,c,d=!1)=>c?"running":d?"failed":a?b?"done":"pending":"unconfigured";return{skillName:d.name,version:e,overall:{weightedScore:i,coveredCount:aF-A.length,totalCount:aF,missingDimensions:A,selectedDimensionsThisRun:(a?.selectedDimensionsThisRun??[]).map(a=>"gray"===a?"ab":"trigger"===a?"recall":a)},ab:{configured:!!h?.id&&y>0,hasResult:!!g&&null!=g.scoring.totalScore,status:B(!!h?.id&&y>0,!!g&&null!=g.scoring.totalScore,k),scoreA:g?.a.avgScore??null,scoreB:g?.scoring.totalScore??null,finalScore:g?.scoring.totalScore??null,decisionLabel:g?.scoring.decisionLabel??null,capabilityDeltaPp:g?.scoring.capability.deltaPp??null,tokenDeltaPct:g?.scoring.cost.deltaTokenPct??null,invokeRate:g?.scoring.stability.invokeRate??null,variance:g?.scoring.stability.variance??null,delta:g?.delta??null,pValue:g?.pValue??null,sampleCount:g?.sampleCount??null,recommendation:g?.recommendation??null},trace:{configured:z,hasResult:null!=n,status:B(z,null!=n,j),score:n,fullyEvaluatedCount:m.count,totalTraceCount:b.length,highDeviationCount:p.highDeviation},recall:{configured:s,hasResult:t,status:B(s,t,!1),score:t?Math.round((f?.latestRun?.passRate??0)*100):null,passRate:f?.latestRun?.passRate??null,truePositiveRate:f?.latestRun?.truePositiveRate??null,falsePositiveRate:f?.latestRun?.falsePositiveRate??null,itemCount:f?.itemCount??0,positiveCount:f?.positiveCount??0},static:{configured:!!d&&null!=e,hasResult:null!=r.avgPct,status:B(!!d&&null!=e,null!=r.avgPct,!1),score:r.avgPct??null,passedCount:r.scoredCount,totalCount:J.STATIC_EVAL_STANDARDS.length,issueCount:c?.latest?.issuesCount??0}}},[u,v,i,d,o,V,e,k.passed,k.total,q,aF,l,w]),aT=(0,c.useMemo)(()=>aS(),[aS]),aU=(0,c.useMemo)(()=>aT?JSON.stringify(aT):"",[aT]),aV=(0,c.useRef)(""),aW=(0,c.useRef)(0),aX=(0,c.useCallback)(async(b,c)=>{if(!b||!a||!d?.name)return aK(null),aM("idle"),null;let e=++aW.current;aM("loading");try{let f=await (0,g.apiFetch)(`/api/skills/by-name/${encodeURIComponent(d.name)}/analysis-diagnosis`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,snapshot:b})}),h=await f.json().catch(()=>({}));if(!f.ok||!h?.diagnosis)throw Error(h?.error||"诊断生成失败");let i=h.diagnosis;return e===aW.current&&(aK(i),aM("ready")),"smart-run"===c&&"fallback"===i.mode&&K.toast.warning("AI 诊断暂时不可用,已回退为基础诊断"),i}catch{let a=j(b);return e===aW.current&&(aK(a),aM("ready")),"smart-run"===c&&K.toast.warning("AI 诊断暂时不可用,已回退为基础诊断"),a}},[d?.name,a]);(0,c.useEffect)(()=>{!aT||F||"idle"!==aN||aU!==aV.current&&(aV.current=aU,aW.current+=1,aK(j(aT)),aM("ready"))},[aU,aT,F,aN]);let aY=aJ??(aT?j(aT):{problem:"还没有任何分析结果,当前页面先展示基础信息和可执行入口。",suggestion:"优先补齐可运行维度,再查看更稳定的诊断结论。",mode:"fallback"}),aZ=async()=>{let b=v?.configJson?.checkedCaseIds??v?.configJson?.selectedCaseIds??[];if(!a||!v?.id||0===b.length)throw Error("A/B 测试当前缺少可执行样本或任务信息。");let c=await (0,g.apiFetch)(`/api/debug/grayscale-tasks/${encodeURIComponent(v.id)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,action:"start",caseIds:b,evaluatorId:v.configJson?.evaluatorId,agentMaxConcurrency:v.configJson?.agentMaxConcurrency})}),d=await c.json().catch(()=>({}));if(!c.ok)throw Error(d.error||"A/B 测试启动失败")},a$=async()=>{if(!a||!V||!aq?.name)throw Error("用例分析当前缺少可执行 Trace 或主 Skill 信息。");let b=(async()=>{let b=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,taskIds:[V],evaluators:["preset-agent-task-completion"]})}),c=await b.json().catch(()=>({}));if(!b.ok||!c.success)throw Error(c.error||"启动结果评估失败")})(),c=(async()=>{let b=await (0,g.apiFetch)(`/api/observe/executions/${encodeURIComponent(V)}/analyze-match`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,mode:"compare"})}),c=await b.json().catch(()=>({}));if(!b.ok||!c.success)throw Error(c.error||"流程图比对分析失败")})(),d=await Promise.allSettled([b,c]),e=d.filter(a=>"rejected"===a.status);if(e.length===d.length)throw Error(e[0]?.reason instanceof Error?e[0].reason.message:"用例分析启动失败");if(e.length>0)throw Error(e.map(a=>a.reason instanceof Error?a.reason.message:"部分流程启动失败").join(";"));await y({retries:5,retryDelayMs:900})},a_=async()=>{if(!a||!d?.name)throw Error("触发分析当前缺少 Skill 信息。");let b=await (0,g.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(d.name)}/run`,{method:"POST",body:JSON.stringify({user:a,runsPerQuery:1,triggerThreshold:.5,timeoutMs:3e4,concurrency:5})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"触发分析启动失败");await A({expectedRunId:"string"==typeof c?.run?.id?c.run.id:void 0})},a0=async()=>{if(!a||!d?.id||null==e)throw Error("静态合规当前缺少 Skill 或版本信息。");let b=await (0,g.apiFetch)(`/api/skills/${encodeURIComponent(d.id)}/versions/${e}/evaluate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"静态合规启动失败");await z({expectedEvaluationId:"string"==typeof c.evaluationId?c.evaluationId:void 0})},a1=async a=>{let b=l,c=q,d=w,e=u,f=v,g=az,h=l.some(a=>a.is_evaluating);a.includes("static")&&(c=await z({retries:1,retryDelayMs:800})??c),a.includes("trigger")&&(d=await A({retries:1,retryDelayMs:800})??d);let i=a.includes("gray")||a.includes("trace"),j=Date.now()+9e4,k=!1;for(;i&&Date.now()<j;){let c=!1;if(a.includes("gray")){let a=await C();e=a.summary,f=a.meta,g=a.busy,c=c||g}if(a.includes("trace")){let a=(b=await y({retries:1,retryDelayMs:800})).find(a=>an(a)===V),d=a?"number"==typeof a.answer_score?a.answer_score:a.answerScore:null,e=!!a&&!a.is_evaluating&&ak(a);e&&null!=d&&al(a),h=!e,c=c||h}if(!c)break;await new Promise(a=>setTimeout(a,1500))}return i&&(g||h)&&(k=!0),{traces:b,staticSummary:c,triggerSummary:d,graySummary:e,grayTaskMeta:f,grayBusy:g,traceBusy:h,timedOut:k}},a2=async()=>{let a=aD.filter(a=>a.canRun&&aQ.includes(a.key));if(0===a.length)return void K.toast.error("当前没有可一键测试的维度。");G(!0),aO("starting");try{let b=await Promise.allSettled(a.map(async a=>"gray"===a.key?aZ():"trace"===a.key?a$():"trigger"===a.key?a_():"static"===a.key?a0():void 0)),c=b.flatMap((b,c)=>"rejected"===b.status?[`${a[c].name}:${b.reason instanceof Error?b.reason.message:"启动失败"}`]:[]),d=b.flatMap((b,c)=>"fulfilled"===b.status?[a[c].key]:[]);c.length>0&&K.toast.error(c.join(";")),d.length>0&&K.toast.success(`已启动 ${d.length} 个测试任务`),aO(d.some(a=>"gray"===a||"trace"===a)?"running":"refreshing");let e=await a1(d);e.timedOut&&K.toast.warning("部分后台测试仍在运行,已先刷新当前诊断。"),aO("diagnosing");let f=aS({traces:e.traces,staticSummary:e.staticSummary,triggerSummary:e.triggerSummary,graySummary:e.graySummary,grayTaskMeta:e.grayTaskMeta,grayBusy:e.grayBusy,traceBusy:e.traceBusy,selectedDimensionsThisRun:d});f&&(aV.current=JSON.stringify(f),await aX(f,"smart-run"))}finally{aO("idle"),G(!1)}},a3=a=>{aR(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])},a4=aQ.length,a5=!!V&&l.some(a=>an(a)===V&&a.is_evaluating),a6=F||"idle"!==aN||az||a5,a7="starting"===aN?"启动中...":"running"===aN?"测试进行中...":"refreshing"===aN?"刷新结果中...":"diagnosing"===aN?"更新诊断中...":a6?"测试进行中...":`一键测试 ${a4} 项`,a8=P&&null!=O.avgPct?O.avgPct>=80?"正常":"需关注":"待分析",a9=P&&q?.latest?ap(q.latest.ranAt):"待扫描",ba=u?"insufficient"===u.scoring.decision?"样本不足":u.scoring.decisionLabel:"未配置",bb=u?.delta!=null?`${u.delta>0?"+":""}${u.delta}`:"--",bc=u?.scoring.totalScore!=null?`总分 ${u.scoring.totalScore}`:u?.b.avgScore!=null?`B 均分 ${u.b.avgScore}`:"待运行",bd=u?`${u.completedPairs||Math.min(u.a.total,u.b.total)}/${u.sampleCount||Math.max(u.a.total,u.b.total)} 样本`:"暂无样本",be=u?`${u.repeatRounds} 轮`:"未运行",bf=u?.latestCompletedAt||u?.latestResultAt?ap(u.latestCompletedAt||u.latestResultAt):"未运行",bg=d&&null!=e?T(d.name,e):"B 版本",bh=u?`${u.aLabel} vs ${u.bLabel}`:`无 Skill vs ${bg}`,bi=u?null==(H=u.pValue)?"待计算":H<.01?"p < 0.01 ✓✓":H<.05?"p < 0.05 ✓":`p = ${H.toFixed(3)}`:"待计算",bj="loading"===aL?"正在更新诊断":"llm"===aY.mode?`由 ${aY.modelLabel||"当前评测模型"} 生成`:"基础诊断";return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{className:"sa-hero",children:[(0,b.jsxs)("div",{className:`sa-hero-score ${aH}`,children:[(0,b.jsxs)("div",{className:"sa-hero-score-eyebrow",children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("path",{d:"M7 1L13 12H1z"}),(0,b.jsx)("path",{d:"M7 5.5v3"}),(0,b.jsx)("circle",{cx:"7",cy:"10.5",r:".5",fill:"currentColor"})]}),(0,b.jsx)(L.Term,{id:"health-score",label:"综合健康分 · 置信加权"})]}),(0,b.jsxs)("div",{className:"sa-hero-score-body",children:[(0,b.jsx)("div",{className:"sa-hero-score-num",children:null==i?"--":i}),(0,b.jsx)("div",{className:"sa-hero-score-unit",children:"/ 100"}),(0,b.jsx)("div",{className:"sa-hero-score-tier",children:aI})]}),(0,b.jsxs)("div",{className:"sa-hero-coverage",style:{marginTop:14},children:[(0,b.jsxs)("div",{className:"sa-hero-coverage-label",children:[(0,b.jsx)("span",{children:(0,b.jsx)(L.Term,{id:"eval-coverage",label:"评估覆盖度"})}),(0,b.jsxs)("b",{children:[aE," / ",aF," 维 · ",Math.round(aE/aF*100),"%"]})]}),(0,b.jsxs)("div",{className:"sa-hero-coverage-bar",children:[(0,b.jsx)("div",{className:`sa-hero-coverage-seg${av?" on":""}`,style:{background:"var(--sa-warning)"},title:"A/B 测试(权重 40%)"}),(0,b.jsx)("div",{className:`sa-hero-coverage-seg${"待分析"!=(ao?Q>0?"需关注":"正常":"待分析")?" on":""}`,style:{background:"var(--sa-success)"},title:"用例分析(权重 30%)"}),(0,b.jsx)("div",{className:`sa-hero-coverage-seg${at?" on":""}`,style:{background:"var(--sa-info, #6366f1)"},title:at?`触发分析 \xb7 已评测(权重 20%)`:as?"触发分析 · 待评测(权重 20%)":"触发分析 · 未配置(权重 20%)"}),(0,b.jsx)("div",{className:`sa-hero-coverage-seg${"待分析"!==a8?" on":""}`,style:{background:"var(--sa-purple)"},title:"静态合规(权重 10%)"})]})]})]}),(0,b.jsxs)("div",{className:"sa-hero-narr",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"sa-hero-narr-eyebrow",children:[(0,b.jsx)(L.Term,{id:"one-line-diagnosis",label:"一句话诊断"}),(0,b.jsx)("span",{className:"sa-hero-narr-ai",children:"loading"===aL||"llm"===aY.mode?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 14 14",fill:"currentColor",children:(0,b.jsx)("path",{d:"M8 1L1 8h5l-1 5 7-7h-5z"})}),"AI"]}):(0,b.jsx)(b.Fragment,{children:"基础"})}),"· ",bj]}),(0,b.jsxs)("div",{className:"sa-hero-narr-headline sa-hero-narr-split",children:[(0,b.jsxs)("span",{className:"sa-hero-narr-line sa-hero-narr-problem",children:[(0,b.jsx)("span",{className:"lbl",children:"问题"}),(0,b.jsx)("span",{children:aY.problem})]}),(0,b.jsxs)("span",{className:"sa-hero-narr-line sa-hero-narr-suggest",children:[(0,b.jsx)("span",{className:"lbl",children:"建议"}),(0,b.jsx)("span",{children:aY.suggestion})]})]})]}),(0,b.jsxs)("div",{className:"sa-hero-formula",children:[(0,b.jsx)("div",{className:"sa-hero-formula-label",children:"置信加权 · 权重 A/B 40% · 用例 30% · 触发 20% · 静态 10%(未跑维度不进分母)"}),"score = Σ(分 × 权重) ÷ Σ(已跑权重)",(0,b.jsx)("br",{}),"  = ",(0,b.jsx)("strong",{children:null==i?"—":i})]})]}),(0,b.jsxs)("div",{className:"sa-hero-cta",children:[(0,b.jsxs)("div",{className:"sa-hero-cta-eyebrow",children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"currentColor",children:(0,b.jsx)("path",{d:"M8 1L1 8h5l-1 5 7-7h-5z"})}),(0,b.jsx)(L.Term,{id:"smart-run",label:"Smart Run"})]}),(0,b.jsxs)("div",{className:"sa-hero-cta-title",children:[(0,b.jsx)("span",{children:"选择要一键测试的维度"}),(0,b.jsx)("a",{className:"sa-cta-toggleall",onClick:()=>{aR(a=>a.length===aP.length?[]:aP)},children:a4===aP.length&&aP.length>0?"全不选":"全选 / 反选"})]}),(0,b.jsxs)("div",{className:"sa-cta-list",children:[(0,b.jsxs)("label",{className:`sa-cta-row${!aC?" disabled":""}`,title:aC?"可触发详情页“重新分析”":"需先选择 Skill 与版本",children:[(0,b.jsx)("input",{type:"checkbox",checked:aQ.includes("static"),onChange:()=>a3("static"),disabled:!aC}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-purple)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsx)(L.Term,{id:"static-compliance",label:"静态合规"})," ",(0,b.jsx)("span",{className:"wpct",children:"10%"}),!aC&&(0,b.jsx)("span",{className:"cfg-tag",children:"待扫描"})]}),aC?(0,b.jsx)("span",{className:"ago",children:a9}):(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),E("static")},children:"前往评测 →"})]}),(0,b.jsxs)("label",{className:`sa-cta-row${!au?" disabled":""}`,title:as?(w?.itemCount??0)===0?"触发集为空,需先补充触发分析数据":"触发集已准备,可触发详情页“立即评测/立即复测”":"尚未配置触发集,需先到编辑器里起草或手填",children:[(0,b.jsx)("input",{type:"checkbox",checked:aQ.includes("trigger"),onChange:()=>a3("trigger"),disabled:!au}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-info, #6366f1)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsx)(L.Term,{id:"trigger-analysis",label:"触发分析"})," ",(0,b.jsx)("span",{className:"wpct",children:"20%"}),!as&&(0,b.jsx)("span",{className:"cfg-tag",children:"未配置"}),as&&!at&&(0,b.jsx)("span",{className:"cfg-tag",children:"待评测"}),at&&w?.latestRun&&(0,b.jsxs)("span",{className:"ago",children:[Math.round(100*w.latestRun.passRate),"% 通过"]})]}),(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),D()},children:as?"打开编辑器 →":"前往配置 →"})]}),(0,b.jsxs)("label",{className:`sa-cta-row${!ar?" disabled":""}`,title:ar?"当前 Trace 可触发详情页“分析当前 Trace”":0===l.length?"暂无 Trace 可分析":"当前 Trace 缺少主 Skill 信息,详情页按钮不可点击",children:[(0,b.jsx)("input",{type:"checkbox",checked:aQ.includes("trace"),onChange:()=>a3("trace"),disabled:!ar}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-success)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsx)(L.Term,{id:"case-analysis",label:"用例分析"})," ",(0,b.jsx)("span",{className:"wpct",children:"30%"}),!ar&&(0,b.jsx)("span",{className:"cfg-tag",children:"待分析"})]}),ar?(0,b.jsx)("span",{className:"ago",children:"测试当前 Trace"}):(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),E("trace")},children:"前往评测 →"})]}),(0,b.jsxs)("label",{className:`sa-cta-row sa-cta-row-ab${!aB?" disabled":""}`,title:aB?`A/B 版本:${bh},可触发详情页“开始执行”`:az?"当前 A/B 任务执行中,详情页“开始执行”按钮不可点击":0===ay?"当前 A/B 任务缺少选中样本,需先进入详情页选择样本":"当前 A/B 任务尚未保存,需先进入详情页完成配置",children:[(0,b.jsx)("input",{type:"checkbox",checked:aQ.includes("gray"),onChange:()=>a3("gray"),disabled:!aB}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-warning)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsxs)("span",{className:"sa-cta-mainline",children:[(0,b.jsx)(L.Term,{id:"ab-test",label:"A/B 测试"})," ",(0,b.jsx)("span",{className:"wpct",children:"40%"}),!aB&&(0,b.jsx)("span",{className:"cfg-tag",children:"未配置"})]}),(0,b.jsxs)("span",{className:"sa-cta-subline",children:[(0,b.jsx)("b",{children:bh}),av&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:ba}),(0,b.jsx)("span",{children:bc}),(0,b.jsx)("span",{children:bb}),(0,b.jsx)("span",{children:bi}),(0,b.jsx)("span",{children:bd}),(0,b.jsx)("span",{children:be})]})]})]}),aB?(0,b.jsx)("span",{className:"ago",children:bf}):(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),E("gray")},children:"前往配置 →"})]})]}),(0,b.jsxs)("div",{className:"sa-hero-cta-meta",children:[(0,b.jsxs)("span",{children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),"预计 ",a4>0?`${5*a4} 分钟`:"—"]}),(0,b.jsxs)("span",{children:["已选 ",a4," / ",aP.length||0," 可运行项"]})]}),(0,b.jsxs)("div",{className:"sa-cta-actions",children:[(0,b.jsxs)("button",{className:"sa-hero-cta-btn",onClick:()=>{a2()},disabled:0===a4||a6,children:[(0,b.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"currentColor",children:(0,b.jsx)("path",{d:"M3 1.5v11l9-5.5z"})}),a7]}),(0,b.jsxs)("a",{href:aG,className:"sa-hero-cta-btn-ghost",children:["前往 Skill 优化器",(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})})]})]})]})]}),(0,b.jsxs)("div",{className:"sa-section-head",children:[(0,b.jsxs)("h2",{children:[(0,b.jsx)(L.Term,{id:"four-dim-eval",label:"4 维评估能力"})," ",(0,b.jsxs)("span",{className:"count",children:[aE," / ",aF," 已配置 · 按前序关系排序"]})]}),(0,b.jsx)("span",{className:"head-meta",children:"点击卡片进入详情 · 百分制分数"})]}),(0,b.jsxs)("section",{className:"sa-cards",children:[(0,b.jsxs)("div",{className:"sa-card k-static",onClick:()=>E("static"),children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.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,b.jsx)("path",{d:"M9.5 2.5v3h3"}),(0,b.jsx)("path",{d:"M5.5 9l1.5 1.5 3-3"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"静态合规"}),(0,b.jsx)("small",{children:"写得规范吗?能被正确加载吗?"})]}),(0,b.jsx)("span",{className:`sa-card-status ${"正常"===a8?"ok":"需关注"===a8?"warn":"neutral"}`,children:a8})]}),(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:P&&null!=O.avgPct?"sa-card-score-num":"sa-card-score-empty",children:P&&null!=O.avgPct?O.avgPct:"--"}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:P&&null!=O.avgPct?"/ 100":"待分析"})]}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"已评估维度"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:P?`${O.scoredCount} / ${J.STATIC_EVAL_STANDARDS.length} 项`:"尚未评估"})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"未评估"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:P?J.STATIC_EVAL_STANDARDS.length-O.scoredCount>0?`${J.STATIC_EVAL_STANDARDS.length-O.scoredCount} 项`:"无":"—"})]})]}),aC?(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),P&&q?.latest?ap(q.latest.ranAt):"点击进入静态评估详情"]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),E("static")},children:"查看详情 →"})]}):(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),E("static")},children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"打开评测页扫描"]})]}),(0,b.jsxs)("div",{className:"sa-card k-trigger",onClick:a=>{a.target.closest("a,button")||D()},children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"4.5"}),(0,b.jsx)("path",{d:"M10.5 10.5 13.5 13.5"}),(0,b.jsx)("path",{d:"M5 7l1.5 1.5L9 6"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"触发分析"}),(0,b.jsx)("small",{children:"该触发的时候,触发了吗?"})]}),at&&w?.latestRun?(0,b.jsx)("span",{className:`sa-card-status ${w.latestRun.passRate>=.8?"ok":w.latestRun.passRate>=.6?"warn":"err"}`,children:w.latestRun.passRate>=.8?"正常":w.latestRun.passRate>=.6?"需关注":"急需优化"}):as?(0,b.jsx)("span",{className:"sa-card-status warn",children:"待评测"}):(0,b.jsx)("span",{className:"sa-card-status warn",children:"未配置"})]}),(0,b.jsx)(Z,{counts:N,hint:"触发分析评测的实时调度状态 (taskType=trigger-eval)"}),at&&w?.latestRun?(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:"sa-card-score-num",children:Math.round(100*w.latestRun.passRate)}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:"/ 100"})]}):(0,b.jsx)("div",{className:"sa-card-score sa-card-score-placeholder",children:(0,b.jsx)("span",{className:"sa-card-score-placeholder-text",children:as?"待评测":"尚未配置"})}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"触发集"}),(0,b.jsx)("div",{className:`sa-card-stat-val${as?"":" muted"}`,children:as?`${w?.itemCount??0} 条 \xb7 正例 ${w?.positiveCount??0}`:"未创建"})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:at?"TPR / FPR":"影响"}),(0,b.jsx)("div",{className:`sa-card-stat-val${at?"":" muted"}`,children:at&&w?.latestRun?`${Math.round(100*w.latestRun.truePositiveRate)}% / ${Math.round(100*w.latestRun.falsePositiveRate)}%`:"不计入总分 (-20%)"})]})]}),at&&w?.latestRun?(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),ap(w.latestRun.ranAt)," · v",w.latestRun.skillVersion]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),D()},href:"#",children:"查看详情 →"})]}):(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),D()},disabled:x,children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),as?"打开编辑器评测":"前往配置触发集"]})]}),(0,b.jsxs)("div",{className:"sa-card k-batch",onClick:a=>{a.target.closest("a,button")||E("trace")},children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("rect",{x:"2",y:"2.5",width:"5",height:"5",rx:"1"}),(0,b.jsx)("rect",{x:"9",y:"2.5",width:"5",height:"5",rx:"1"}),(0,b.jsx)("rect",{x:"2",y:"9",width:"5",height:"5",rx:"1"}),(0,b.jsx)("rect",{x:"9",y:"9",width:"5",height:"5",rx:"1"}),(0,b.jsx)("path",{d:"M3.6 5l1 1L5.8 4.8"}),(0,b.jsx)("path",{d:"M10.6 5l1 1 1.2-1.2"}),(0,b.jsx)("path",{d:"M3.6 11.5l1 1L5.8 11.3"}),(0,b.jsx)("path",{d:"M10.6 11.5l1 1 1.2-1.2"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"用例分析"}),(0,b.jsx)("small",{title:$?h||"未命名评测任务":void 0,children:$?`评测任务:${h||"未命名任务"}`:"做的怎么样?结果 & 轨迹分析"})]}),(0,b.jsx)("span",{className:`sa-card-status ${"正常"===af?"ok":"需关注"===af?"warn":"neutral"}`,children:af})]}),(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:"sa-card-score-num",children:$?ae??"--":"--"}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:$?null==ae?"待评测":"/ 100":"未选择评测任务"})]}),(0,b.jsx)("div",{className:"sa-card-stats",children:(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",title:"当前评测任务下结果分 + 轨迹分双双就绪的记录数;只跑一边的不计入",children:"已评测用例"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:$?`${ac} / ${ad}`:"未选择评测任务"})]})}),ar?(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),aj?ap(aj):"点击进入用例分析详情"]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),E("trace")},children:"查看详情 →"})]}):(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),E("trace")},children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"打开评测页扫描"]})]}),(0,b.jsxs)("div",{className:"sa-card k-gray",onClick:a=>{a.target.closest("a,button")||E("gray")},children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("circle",{cx:"5",cy:"8",r:"3"}),(0,b.jsx)("circle",{cx:"11",cy:"8",r:"3"}),(0,b.jsx)("path",{d:"M5 5v6M11 5v6",opacity:".4"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"A/B 测试"}),(0,b.jsx)("small",{children:"这个 skill 真的带来增益了吗?"})]}),(0,b.jsx)("span",{className:`sa-card-status ${u?"reject"===u.scoring.decision?"err":"direct-release"===u.scoring.decision||"monitor-release"===u.scoring.decision?"ok":"neutral":"warn"}`,children:ba})]}),(0,b.jsx)(Z,{counts:I,hint:"本 skill 当前所有 opencode 后台任务的实时调度状态 (A/B 跑评测时涉及 trajectory / task-completion / custom-llm 多类型)"}),av?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:"sa-card-score-num",children:u?.scoring.totalScore??"--"}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:"/ 100"})]}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"能力"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:u?.scoring.capability.deltaPp==null?"—":`${u.scoring.capability.deltaPp>0?"+":""}${u.scoring.capability.deltaPp}pp`})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"成本"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:u?.scoring.cost.deltaTokenPct==null?"—":`${u.scoring.cost.deltaTokenPct>0?"+":""}${u.scoring.cost.deltaTokenPct}% Token`})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"稳定性"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:u?.scoring.stability.invokeRate==null?"—":`${u.scoring.stability.invokeRate}% 触发`})]})]}),(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),bf," · 入总分 = v2.2 最终评分 ",u?.scoring.totalScore??"--"]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),E("gray")},children:"查看详情 →"})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"sa-card-score sa-card-score-placeholder",children:(0,b.jsx)("span",{className:"sa-card-score-placeholder-text",children:"尚未配置"})}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"实验版本"}),(0,b.jsx)("div",{className:"sa-card-stat-val muted",children:bg})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"影响"}),(0,b.jsx)("div",{className:"sa-card-stat-val muted",children:"不计入总分 (-40%)"})]})]}),(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),E("gray")},children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"前往配置 A/B 测试"]})]})]})]})]})}function _({skill:a,version:d,user:e,traces:f,loading:i,prefillTraceId:j,selectedTraceId:k,onSelectedTraceChange:l,onBack:m,onReload:n,onOptimize:o,onBatchAnalyze:p,traceEvaluationBatchId:q,traceEvaluationBatchTitle:r,onOpenEvalBatchDialog:t,evalTaskOptions:w,onSelectEvalBatch:x,datasets:y,selectedDatasetIds:A,onSelectedDatasetIdsChange:C,evaluatorOptions:D,selectedEvaluatorIds:E,onSelectedEvaluatorIdsChange:G}){let H,I,J,K,[L,M]=(0,c.useState)(""),[N,O]=(0,c.useState)("all"),[P,Q]=(0,c.useState)(!0),[R,S]=(0,c.useState)(!1),[T,U]=(0,c.useState)(!0),V=B(e,q,5e3),[W,X]=(0,c.useState)([]),[Y,Z]=(0,c.useState)(new Map),$=(0,c.useMemo)(()=>e&&a?.name?`eval-deleted-traces:${e}:${a.name}:${d??"all"}`:"",[e,a?.name,d]),[_,aa]=(0,c.useState)(new Set);(0,c.useEffect)(()=>{if(!$)return void aa(new Set);try{let a=localStorage.getItem($),b=a?JSON.parse(a):[];aa(new Set(Array.isArray(b)?b.map(String):[]))}catch{aa(new Set)}},[$]);let ab=(0,c.useCallback)(a=>{if(aa(a),$)try{localStorage.setItem($,JSON.stringify(Array.from(a)))}catch{}},[$]);(0,c.useEffect)(()=>{0!==Y.size&&Z(a=>{let b=!1,c=new Map(a);for(let a of f){let d=a.task_id||a.taskId;d&&c.has(d)&&!1===a.is_evaluating&&(c.delete(d),b=!0)}return b?c:a})},[f]);let[ac,ad]=(0,c.useState)(new Map),[af,ag]=(0,c.useState)(new Set),[ai,aj]=(0,c.useState)(new Set),[am,ap]=(0,c.useState)(q||"");(0,c.useEffect)(()=>{X([]),Z(new Map),ad(new Map),aj(new Set),ag(new Set),ap(q||"")},[q]);let aq=am===(q||""),[ar,as]=(0,c.useState)("trace"),[at,au]=(0,c.useState)(!1),[av,aw]=(0,c.useState)(null),ax=(0,c.useRef)(null),[ay,az]=(0,c.useState)(new Set),[aA,aB]=(0,c.useState)(!1),aC=(0,c.useMemo)(()=>{let a=L.trim().toLowerCase();return f.filter(b=>{let c=an(b),d=ak(b),e=al(b),f=null!=("number"==typeof b.answer_score?b.answer_score:"number"==typeof b.answerScore?b.answerScore:null)&&null!=e;return("analyzed"!==N||!!f)&&("pending"!==N||!f)&&("deviation"!==N||!!d&&null!=e&&!(e>=.7))&&(!a||c.toLowerCase().includes(a)||(b.query||"").toLowerCase().includes(a))})},[L,N,f]),[aD,aE]=(0,c.useState)(0),aF=Math.max(1,Math.ceil(aC.length/30));(0,c.useEffect)(()=>{aE(0)},[L,N,aC.length]);let aG=(0,c.useMemo)(()=>aC.slice(30*aD,(aD+1)*30),[aC,aD]);(0,c.useEffect)(()=>{j&&f.some(a=>an(a)===j)?l(j):k&&f.some(a=>an(a)===k)||!aC[0]||l(an(aC[0]))},[aC,l,j,k,f]);let aH=(0,c.useMemo)(()=>f.find(a=>an(a)===k)||null,[k,f]),aI=aH?ah(aH):null;a?.name&&aI?.name&&(aI.name,a.name);let aJ=(0,c.useCallback)(async()=>{if(!k||!e)return aw(null),null;try{let a=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(e)}&taskId=${encodeURIComponent(k)}&limit=1`),b=await a.json(),c=(Array.isArray(b?.results)?b.results:[])[0];return aw(c||null),c||null}catch{return null}},[k,e]);(0,c.useEffect)(()=>(aJ(),()=>{ax.current&&(clearTimeout(ax.current),ax.current=null)}),[aJ]),(0,c.useEffect)(()=>{if(!e||0===f.length)return;let a=!1;return(async()=>{try{let b=q?`&runId=${encodeURIComponent(q)}&latestByCase=1`:"",c=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(e)}${b}&limit=500`);if(!c.ok)return;let d=await c.json(),h=Array.isArray(d?.results)?d.results:[];if(a)return;let i=new Set(f.map(an)),j=new Set,l=[];for(let a of h)a.taskId&&i.has(a.taskId)&&(j.has(a.taskId)||(j.add(a.taskId),l.push(a)));let m=l.filter(a=>"pending"===a.status||"running"===a.status),o=l.filter(a=>("done"===a.status||"failed"===a.status)&&null==a.trajectoryScore&&null==a.resultEvaluationScore&&(!!(a.errorMessage||a.rawAnalysis?.resultEvaluationError||a.rawAnalysis?.trajectoryError)||"failed"===a.status));if(l.length>0&&ag(a=>{let b=new Set(a);for(let a of l)a.taskId&&b.add(a.taskId);return b}),0===m.length&&0===o.length||(m.length>0&&Z(a=>{let b=new Map(a);for(let a of m){if(!a.taskId||b.has(a.taskId))continue;let c=a.createdAt?new Date(a.createdAt).getTime():Date.now();b.set(a.taskId,c)}return b}),o.length>0&&ad(a=>{let b=new Map(a);for(let a of o){if(!a.taskId)continue;let c=String(a.errorMessage||a.rawAnalysis?.resultEvaluationError||a.rawAnalysis?.trajectoryError||"评测异常").trim();b.set(a.taskId,c)}return b}),S(!0),0===m.length))return;let p=0,r=setInterval(()=>{n(),(++p>=30||a)&&clearInterval(r)},3e3);k&&m.some(a=>a.taskId===k)&&aK()}catch{}})(),()=>{a=!0}},[e,f.length,q]);let aK=(0,c.useCallback)(function a(){ax.current&&clearTimeout(ax.current),ax.current=setTimeout(async()=>{let b=await aJ();b&&("pending"===b.status||"running"===b.status)&&a()},5e3)},[aJ]);(0,c.useEffect)(()=>(av&&("pending"===av.status||"running"===av.status)&&aK(),()=>{ax.current&&(clearTimeout(ax.current),ax.current=null)}),[av,aK]);let aL=aA||av?.status==="pending"||av?.status==="running",aM=ay.size>0?Array.from(ay):k?[k]:[],aN=async()=>{if(aL||0===aM.length||!q)return;let a=Date.now();Z(b=>{let c=new Map(b);for(let b of aM)c.set(b,a);return c}),aj(a=>{let b=new Set(a);for(let a of aM)b.add(a);return b}),ad(a=>{if(0===a.size)return a;let b=new Map(a);for(let a of aM)b.delete(a);return b}),aB(!0);try{if(p){let a=await p(aM);if(a){let b=a.trajectoryErrors||new Map,c=(a.resultErrors||[]).join("\n");(b.size>0||c)&&ad(a=>{let d=new Map(a);for(let a of aM){let e=[];c&&e.push(`结果评测:${c}`);let f=b.get(a);f&&e.push(`轨迹评测:${f}`),e.length>0&&d.set(a,e.join("\n"))}return d})}}await aJ(),aK(),n()}finally{aB(!1)}};aL||ay.size>0&&ay.size;let aO=aL||0===aM.length||0===ay.size&&!aI?.name||!q,aP=(0,b.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,b.jsx)("span",{style:{fontSize:11,fontWeight:700,color:"#52525b"},children:"添加评测对象(Trace)"}),(0,b.jsxs)("div",{style:{display:"inline-flex",background:"#fff",borderRadius:5,padding:3,gap:2,border:"1px solid #e5e7eb"},children:[(0,b.jsx)("button",{type:"button",onClick:()=>as("trace"),title:"直接挑选现成的执行记录(Trace)来评测",style:{border:0,padding:"4px 12px",background:"trace"===ar?"#2563eb":"transparent",color:"trace"===ar?"#fff":"#52525b",borderRadius:4,fontSize:12,fontWeight:600,cursor:"pointer"},children:"📊 选已有 Trace"}),(0,b.jsx)("button",{type:"button",onClick:()=>as("dataset"),title:"用数据集 case 执行 skill 生成新 Trace,再评测(比「选已有」多一步生成)",style:{border:0,padding:"4px 12px",background:"dataset"===ar?"#2563eb":"transparent",color:"dataset"===ar?"#fff":"#52525b",borderRadius:4,fontSize:12,fontWeight:600,cursor:"pointer"},children:"🗄 用数据集生成"})]}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("span",{style:{fontSize:11,color:"#71717a"},children:"两种方式都把 Trace 评测加入当前评测任务,统一在下方「② 评测执行」展示"})]}),aQ=(0,b.jsxs)("div",{style:{border:"1px solid #e5e7eb",borderRadius:6,padding:"10px 12px",marginBottom:12,background:"#fff",display:"flex",flexDirection:"column",gap:10},children:[(0,b.jsx)(u,{label:"数据集",placeholder:"选择参考数据集(可多选)",emptyHint:"暂无数据集(可在数据集中心创建)",accent:"#2563eb",options:(y||[]).map(a=>({id:a.id,name:a.name,meta:`${Array.isArray(a.cases)?a.cases.length:0} 例`})),selectedIds:A||[],onChange:a=>C?.(a)}),(0,b.jsx)(u,{label:"评估器",placeholder:"选择评估器(可多选)",emptyHint:"暂无评估器",accent:"#7E22CE",options:(D||[]).map(a=>({id:a.id,name:a.name})),selectedIds:E||[],onChange:a=>G?.(a)}),(0,b.jsx)("div",{style:{fontSize:11,color:"#a1a1aa"},children:"数据集作为评测参考集(按 query 匹配 case 取预期结果);评估器多选决定「开始分析」时调用哪些评估器。"})]}),aR=(0,b.jsx)(v,{tasks:w||[],selectedRunId:q,selectedTitle:r,onSelect:a=>x?.(a),onCreateNew:()=>t?.()}),aS=f.map(a=>{let b="number"==typeof a.answer_score?a.answer_score:"number"==typeof a.answerScore?a.answerScore:null,c=null==b?null:b<=1?Math.round(100*b):Math.round(b),d="number"==typeof a.trajectory_score?a.trajectory_score:"number"==typeof a.trajectoryScore?a.trajectoryScore:null,e=null!=d?d:al(a);return{trace:a,id:an(a),query:a.query||"(无 query)",resultScore:c,trajScore:null==e?null:Math.round(100*e),isEvaluating:!0===a.is_evaluating,lastEvalStatus:a.last_eval_status??null,lastEvalError:a.last_eval_error??null}}),aT=a=>a.isEvaluating||aq&&Y.has(a.id)?"pending":"failed"===a.lastEvalStatus||aq&&ac.has(a.id)?"failed":null!=a.resultScore&&null!=a.trajScore?"done":null!=a.resultScore||null!=a.trajScore?"partial":"idle",aU=aS.filter(a=>!_.has(a.id)&&(q?V.has(a.id)||aq&&(Y.has(a.id)||ac.has(a.id)||ai.has(a.id)):"idle"!==aT(a)||af.has(a.id))),aV=aU.map(a=>{if(!q)return{resultScore:a.resultScore,trajScore:a.trajScore};let b=V.get(a.id);return{resultScore:b?.resultScore??null,trajScore:b?.trajScore??null}}).filter(a=>"number"==typeof a.resultScore&&"number"==typeof a.trajScore),aW=aU.length,aX=aV.length,aY=0===aV.length?null:Math.round(aV.reduce((a,b)=>a+b.resultScore,0)/aV.length),aZ=0===aV.length?null:Math.round(aV.reduce((a,b)=>a+b.trajScore,0)/aV.length),a$=null==aY||null==aZ?null:Math.round((aY+aZ)/2),a_=null==a$?"warn":a$>=80?"good":a$>=60?"warn":"bad",a0=aS.filter(a=>!_.has(a.id)&&null!=a.resultScore&&null!=a.trajScore),a1=q?Array.from(V.entries()).filter(([a])=>!_.has(a)).map(([,a])=>({resultScore:a.resultScore??null,trajScore:a.trajScore??null})):a0.map(a=>({resultScore:a.resultScore,trajScore:a.trajScore})),a2=a1.filter(a=>"number"==typeof a.resultScore&&"number"==typeof a.trajScore),a3=a2.length,a4=q?a1.length:f.length,a5=0===a3?null:Math.round(a2.reduce((a,b)=>a+b.resultScore,0)/a3),a6=0===a3?null:Math.round(a2.reduce((a,b)=>a+b.trajScore,0)/a3),a7=null==a5||null==a6?null:Math.round((a5+a6)/2),a8=null==a7?"warn":a7>=80?"good":a7>=60?"warn":"bad",a9=a2.filter(a=>(a.resultScore+a.trajScore)/2>=60).length,ba=0===a3?0:Math.round(a9/a3*100),bb=W.filter(a=>a.evaluatorRunId===q&&(!a.executionTraceId||!_.has(a.executionTraceId))).map(a=>a.executionTraceId&&!a.resultId&&aq&&Y.has(a.executionTraceId)?{...a,status:"evaluating",resultId:void 0,evaluationTraceId:void 0,resultEvalTraceId:void 0,trajEvalTraceId:void 0,resultScore:null,trajScore:null}:a),bc=new Set(bb.map(a=>a.caseId).filter(Boolean)),bd=new Set(bb.map(a=>a.executionTraceId).filter(Boolean)),be=aU.filter(a=>{let b=V.get(a.id);return!bd.has(a.id)&&(!b?.caseId||!bc.has(b.caseId))}).map(a=>{let b=V.get(a.id),c=!!q,d=c?b?.resultScore??null:a.resultScore,e=c?b?.trajScore??null:a.trajScore,f=(a=>{if(!q)return aT(a);let b=V.get(a.id);return b?"failed"===b.status?"failed":"pending"===b.status||"running"===b.status?"pending":"done"===b.status?null!=b.resultScore&&null!=b.trajScore?"done":null!=b.resultScore||null!=b.trajScore?"partial":"failed":aT({...a,resultScore:b.resultScore??null,trajScore:b.trajScore??null}):aT(a)})(a),g="done"===f?"done":"failed"===f?"failed":"partial"===f?"partial":"evaluating",h=(aq?ac.get(a.id):void 0)||b?.errorMessage||void 0;return b?.status==="failed"&&"done"!==g&&(g="failed"),"idle"===f&&!b&&aq&&ai.has(a.id)&&!Y.has(a.id)&&(g="failed",h=h||"未在本次评测任务产出评测结果(可能该 trace 未匹配到 case 或未引用当前 skill)"),{id:a.id,caseId:b?.caseId,caseLabel:a.query||a.id.slice(0,12),caseTitle:a.query||a.id,executionTraceId:a.id,evaluationTraceId:b?.evaluationTraceId,resultEvalTraceId:b?.resultEvalTraceId,trajEvalTraceId:b?.trajEvalTraceId,datasetId:b?.datasetId,evaluatorRunId:q||void 0,resultId:b?.resultId,status:g,resultScore:d,trajScore:e,errorMsg:h}}),bf=new Set([...bb.map(a=>a.executionTraceId).filter(Boolean),...be.map(a=>a.executionTraceId).filter(Boolean)]),bg=[...bb,...be,...Array.from(V.values()).filter(a=>a.taskId&&!_.has(a.taskId)&&!bf.has(a.taskId)&&(!a.caseId||!bc.has(a.caseId))).map(a=>({id:a.taskId,caseId:a.caseId,caseLabel:a.caseId||a.taskId,caseTitle:a.caseId||a.taskId,executionTraceId:a.taskId,evaluationTraceId:a.evaluationTraceId,resultEvalTraceId:a.resultEvalTraceId,trajEvalTraceId:a.trajEvalTraceId,evaluatorRunId:q||void 0,resultId:a.resultId,datasetId:a.datasetId,status:"done"===a.status?"done":"failed"===a.status?"failed":"evaluating",resultScore:a.resultScore??null,trajScore:a.trajScore??null,errorMsg:a.errorMessage}))];return(0,b.jsxs)("section",{className:"sa-detail",children:[(0,b.jsx)(ae,{title:"用例分析",subtitle:`${a?.name||"未选择 Skill"}${null!=d?` \xb7 v${d}`:""}`,badge:"LLM Judge",onBack:m,onOptimize:o}),"trace"===ar&&(0,b.jsxs)(s.SectionShell,{num:1,variant:"config",title:"配置",desc:"该 skill 版本关联的全部 trace(含已评测和未评测);勾选 → 到 ② 触发分析",open:P,onToggle:()=>Q(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"用例来源"}),(0,b.jsx)("code",{children:"从 Trace"}),(0,b.jsxs)("span",{children:["· 关联 ",(0,b.jsx)("code",{children:f.length})," 条"]}),(0,b.jsxs)("span",{children:["· 已评测 ",(0,b.jsx)("code",{children:a3})]})]}),actions:aR,children:[aQ,aP,(0,b.jsx)("div",{className:"sa-trace-picker",style:{display:"block"},children:(0,b.jsxs)("aside",{className:"sa-trace-list","aria-label":"该 Skill 的 Trace",style:{width:"100%",maxWidth:"none"},children:[(0,b.jsxs)("div",{className:"sa-trace-list-head",children:[(0,b.jsx)("div",{className:"sa-trace-list-title",children:(0,b.jsxs)("h3",{children:["该 Skill 的 Trace ",(0,b.jsxs)("small",{children:["(",f.length,")"]})]})}),(0,b.jsx)("input",{value:L,onChange:a=>M(a.target.value),placeholder:"搜索 query 或 taskId..."}),(0,b.jsxs)("div",{className:"sa-tabs",children:[(0,b.jsxs)("button",{className:"all"===N?"active":"",onClick:()=>O("all"),children:["全部 ",f.length]}),(0,b.jsx)("button",{className:"analyzed"===N?"active":"",onClick:()=>O("analyzed"),children:"已评估"}),(0,b.jsx)("button",{className:"pending"===N?"active":"",onClick:()=>O("pending"),children:"未评估"}),(0,b.jsx)("button",{className:"deviation"===N?"active":"",onClick:()=>O("deviation"),children:"高偏离"})]}),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:11,color:"var(--sa-muted)",marginTop:6,flexWrap:"wrap"},children:[(0,b.jsxs)("span",{children:["已勾选 ",(0,b.jsx)("b",{style:{color:"var(--sa-text)"},children:ay.size})]}),(0,b.jsx)("button",{type:"button",onClick:()=>az(new Set([...ay,...aG.map(an)])),style:{background:"transparent",border:"none",color:"var(--sa-primary)",cursor:"pointer",fontSize:11,padding:0},title:`勾选当前页 ${aG.length} 条 (跨页不影响)`,children:"全选本页"}),aC.length>aG.length&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"·"}),(0,b.jsxs)("button",{type:"button",onClick:()=>az(new Set(aC.map(an))),style:{background:"transparent",border:"none",color:"var(--sa-primary)",cursor:"pointer",fontSize:11,padding:0},title:`勾选所有 ${aC.length} 条 (跨所有页)`,children:["全选所有 (",aC.length,")"]})]}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("button",{type:"button",onClick:()=>az(new Set),disabled:0===ay.size,style:{background:"transparent",border:"none",color:0===ay.size?"var(--sa-muted)":"var(--sa-primary)",cursor:0===ay.size?"not-allowed":"pointer",fontSize:11,padding:0},children:"清空"})]}),aF>1&&(0,b.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,b.jsxs)("span",{children:["第 ",(0,b.jsx)("b",{style:{color:"var(--sa-text)"},children:aD+1})," / ",aF," 页 · 显示 ",(0,b.jsxs)("b",{children:[30*aD+1,"-",Math.min((aD+1)*30,aC.length)]})," / 共 ",(0,b.jsx)("b",{children:aC.length})," 条"]}),(0,b.jsxs)("div",{style:{display:"flex",gap:4},children:[(0,b.jsx)("button",{type:"button",onClick:()=>aE(0),disabled:0===aD,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:0===aD?"not-allowed":"pointer",color:0===aD?"var(--sa-muted)":"var(--sa-text)"},title:"首页",children:"«"}),(0,b.jsx)("button",{type:"button",onClick:()=>aE(Math.max(0,aD-1)),disabled:0===aD,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:0===aD?"not-allowed":"pointer",color:0===aD?"var(--sa-muted)":"var(--sa-text)"},title:"上一页",children:"‹"}),(0,b.jsx)("button",{type:"button",onClick:()=>aE(Math.min(aF-1,aD+1)),disabled:aD>=aF-1,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:aD>=aF-1?"not-allowed":"pointer",color:aD>=aF-1?"var(--sa-muted)":"var(--sa-text)"},title:"下一页",children:"›"}),(0,b.jsx)("button",{type:"button",onClick:()=>aE(aF-1),disabled:aD>=aF-1,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:aD>=aF-1?"not-allowed":"pointer",color:aD>=aF-1?"var(--sa-muted)":"var(--sa-text)"},title:"末页",children:"»"})]})]}),0===(H=f.filter(a=>ah(a)?.version==null).length)?null:(0,b.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:["⚠ 当前列表共 ",f.length," 条,其中 ",(0,b.jsx)("b",{children:H})," 条未绑定版本,只在「全部」下可见"]})]}),(0,b.jsxs)("div",{className:"sa-trace-list-body",children:[i&&(0,b.jsxs)("div",{className:"sa-empty-small",children:["正在加载 ",(0,b.jsx)("b",{children:a?.name||""})," 的执行链路…"]}),!i&&0===aC.length&&(0,b.jsx)("div",{className:"sa-empty-small",children:"暂无匹配 Trace"}),aG.map(a=>{let c,d=an(a),e="number"==typeof a.answer_score?a.answer_score:"number"==typeof a.answerScore?a.answerScore:null,f=al(a),g=null!=e&&null!=f,i=ay.has(d),j=ah(a)?.version??null;return(0,b.jsxs)("div",{role:"button",tabIndex:0,className:`sa-trace-row ${k===d?"active":""}`,onClick:()=>l(d),onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),l(d))},children:[(0,b.jsx)("label",{onClick:a=>a.stopPropagation(),style:{display:"inline-flex",alignItems:"center",marginRight:4,cursor:"pointer"},title:"勾选后顶部「分析」按钮会批量启动选中的所有 Trace",children:(0,b.jsx)("input",{type:"checkbox",checked:i,onChange:()=>{az(a=>{let b=new Set(a);return b.has(d)?b.delete(d):b.add(d),b})},onClick:a=>a.stopPropagation(),style:{margin:0,cursor:"pointer"}})}),(0,b.jsx)("span",{className:`sa-score-dot ${g?"ok":"pending"}`,title:g?"已评估(结果分 + 轨迹分均就绪)":"未评估(结果分 / 轨迹分至少缺一个)",children:g?"✓":"○"}),(0,b.jsxs)("span",{className:"sa-trace-text",children:[(0,b.jsxs)("span",{className:"sa-trace-id",children:[d,"ab"===(c=function(a){if(!a)return"real";let b=a.trim();return"grayscale-skill-agent"===b||"grayscale-baseline-agent"===b?"ab":"skill-debug-executor"===b||"batch-eval-agent"===b?"batch":h.has(b)?"system":"real"}(a.agentName||a.agent))?(0,b.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"===c?(0,b.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,b.jsx)("small",{children:ao(a.timestamp)})]}),(0,b.jsx)("span",{className:"sa-trace-query",children:a.query||"无输入内容"}),(0,b.jsxs)("span",{className:"sa-trace-sub",children:[a.framework||"Unknown",a.timeCost?` \xb7 ${a.timeCost}`:"",g?" · 已评估":" · 未评估",null!=j?(0,b.jsxs)("span",{title:`已绑定 v${j}——在版本筛选选 v${j} 才会看到这条`,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",j]}):(0,b.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:"未绑定版本"})]})]})]},d)})]})]})}),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:14,paddingTop:14,borderTop:"1px solid var(--ev-line)"},children:[(0,b.jsx)("button",{type:"button",onClick:aN,disabled:aO,style:{padding:"9px 22px",background:aO?"var(--ev-line-strong)":"var(--ev-info)",color:"#fff",border:"none",borderRadius:6,fontSize:14,fontWeight:700,cursor:aO?"not-allowed":"pointer",opacity:aO?.6:1},title:q?aO?"请先在上方勾选 trace(且 trace 有主 skill)":"对勾选的 trace 直接开始评测":'请先在上方"评测任务"里新建或选择一个评测任务',children:aL?"评测中…":ay.size>0?`▶ 开始评测(${ay.size} 条)`:"▶ 开始评测"}),(0,b.jsx)("span",{style:{fontSize:11,color:q?"var(--ev-muted)":"var(--ev-warning)"},children:q?"勾选 trace 后开始评测;进度见 ② 评测执行":"请先在上方「评测任务」新建或选择一个任务,再开始评测"})]})]}),"dataset"===ar&&(0,b.jsx)("div",{className:"debug-root",style:{background:"transparent"},children:(0,b.jsx)(F,{newTaskTrigger:0,historyPanelTrigger:0,controlled:!0,hideExecAndResult:!0,topConfigSlot:(0,b.jsxs)(b.Fragment,{children:[aQ,aP]}),headerActions:aR,controlledDatasetIds:A,controlledEvaluatorIds:E,controlledEvalBatchId:q,controlledEvalBatchTitle:r,controlledSkillId:a?.id,controlledVersionId:a?.versions?.find(a=>a.version===d)?.id||"",onExecutionRecordsChange:X})}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s.SectionShell,{num:2,variant:"exec",title:"评测执行",desc:"对勾选的 trace 触发结果 + 轨迹双分析;实时展示评测进度,下方表列已评测 trace,点「评测结果」列查看逐条评测详情",open:R,onToggle:()=>S(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"已评测"}),(0,b.jsxs)("code",{children:[aX," / ",aW]}),null!=a$&&(0,b.jsxs)("span",{children:["· 平均评分 ",(0,b.jsxs)("b",{style:{color:"good"===a_?"var(--ev-success)":"bad"===a_?"var(--ev-error)":"var(--ev-warning)"},children:[a$," 分"]})]}),(I=bg.filter(a=>"pending"===a.status||"executing"===a.status||"executed"===a.status||"evaluating"===a.status).length)>0?(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-info)",fontWeight:600},children:["· ",(0,b.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:"currentColor",animation:"pulse 1.5s ease-in-out infinite"}}),"进行中 ",(0,b.jsx)("b",{children:I})," 条"]}):null,(J=bg.filter(a=>"partial"===a.status).length)>0?(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-warning)",fontWeight:600},title:"只跑成功了一边(result 或 trajectory)。展开 ② 点行查看已有分析。",children:["· ◐ 部分评测 ",(0,b.jsx)("b",{children:J})," 条"]}):null,(K=bg.filter(a=>"failed"===a.status).length)>0?(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-error)",fontWeight:600},title:"后端 LLM 评测调用挂了——常见原因:API key 失效 / 模型配额不足 / 网络。展开 ② 看每条具体错误。",children:["· ⚠ 评测失败 ",(0,b.jsx)("b",{children:K})," 条"]}):null,ay.size>0&&(0,b.jsxs)("span",{children:["· 勾选 ",(0,b.jsx)("b",{children:ay.size})," 条待分析"]})]}),children:(0,b.jsx)(z,{emptyHint:"还没触发过评测。在 ① 配置块勾选 trace → 点末尾「开始评测」。",onRowClick:a=>{let b=aU.find(b=>b.id===a.executionTraceId);if(!b)return;let c=aT(b);("done"===c||"partial"===c)&&(l(a.executionTraceId),U(!0))},onRetry:async a=>{let b=a.executionTraceId;if(!b||(Z(a=>{let c=new Map(a);return c.set(b,Date.now()),c}),ad(a=>{if(!a.has(b))return a;let c=new Map(a);return c.delete(b),c}),!p))return;let c=await p([b]);if(c){let a=c.trajectoryErrors?.get(b),d=(c.resultErrors||[]).join("\n");(a||d)&&ad(c=>{let e=new Map(c),f=[];return d&&f.push(`结果评测:${d}`),a&&f.push(`轨迹评测:${a}`),f.length>0&&e.set(b,f.join("\n")),e})}},onDelete:async a=>{let b=a.executionTraceId;if(b)try{if(e){let a=await (0,g.apiFetch)("/api/eval/trajectory/results",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e,taskId:b,runId:q||void 0})});if(!a.ok){let b=await a.json().catch(()=>({}));alert("删除失败:"+(b?.error||`HTTP ${a.status}`));return}}let a=new Set(_);a.add(b),ab(a),Z(a=>{if(!a.has(b))return a;let c=new Map(a);return c.delete(b),c}),ad(a=>{if(!a.has(b))return a;let c=new Map(a);return c.delete(b),c}),ag(a=>{if(!a.has(b))return a;let c=new Set(a);return c.delete(b),c})}catch(a){alert("删除失败:"+(a instanceof Error?a.message:String(a)))}},records:bg})}),(0,b.jsx)(s.SectionShell,{num:3,variant:"result",title:"分析结果",desc:a3>0?`已评测 ${a3} / ${a4} \xb7 结果 + 轨迹 双维度`:"尚未评测",open:T,onToggle:()=>U(a=>!a),summary:null!=a7?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"总评分"}),(0,b.jsxs)("code",{className:`score-${a8}`,children:[a7," 分"]}),(0,b.jsxs)("span",{children:["· 通过 ",(0,b.jsx)("b",{children:a9})," / ",(0,b.jsx)("b",{children:a3})]})]}):(0,b.jsx)("span",{style:{color:"var(--ev-muted)"},children:"未评测"}),children:(0,b.jsxs)("div",{className:"ev-hero",children:[(0,b.jsxs)("div",{className:"ev-hero-main",children:[(0,b.jsxs)("div",{className:`ev-hero-num ${a8}`,children:[a7??"--",(0,b.jsx)("span",{className:"ev-hero-unit",children:"分"})]}),(0,b.jsxs)("div",{className:"ev-hero-label",children:["总评分 · 结果 + 轨迹 平均 · 已评测 ",a3," / ",a4,(0,b.jsx)("span",{style:{display:"block",fontSize:11,color:"var(--ev-muted)",fontWeight:400,marginTop:2},children:"跨当前评测任务的有效评测聚合 · 不随 source(从Trace/从数据集) 切换变化"})]})]}),(0,b.jsxs)("div",{className:"ev-hero-sub",children:[(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${null==a5?"":a5>=80?"good":a5<60?"bad":""}`,children:a5??"--"}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"结果分析 均分"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"输出是否符合预期"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${null==a6?"":a6>=80?"good":a6<60?"bad":""}`,children:a6??"--"}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"轨迹分析 均分"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"执行路径是否合理"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${0===a3?"":ba>=80?"good":ba<50?"bad":""}`,children:0===a3?"--":`${ba}%`}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"通过率"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"已评测中达标"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsxs)("div",{className:"ev-hero-sub-num",children:[a3," / ",a4]}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"评测进度"}),(0,b.jsxs)("div",{className:"ev-hero-sub-hint",children:[Math.max(0,a4-a3)," 条待评测"]})]})]})]})})]})]})}function aa({skill:a,version:d,user:e,summary:f,loading:h,onBack:i,onReload:j,onOptimize:k}){let[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(!1),[p,q]=(0,c.useState)(!1),r=f?.latest?.evaluationId;(0,c.useEffect)(()=>{r?(o(!0),(0,g.apiFetch)(`/api/evaluation/${encodeURIComponent(r)}`).then(a=>a.json()).then(a=>m(a)).catch(()=>m(null)).finally(()=>o(!1))):m(null)},[r]);let s=async()=>{if(a&&null!=d){q(!0);try{let b=await (0,g.apiFetch)(`/api/skills/${a.id}/versions/${d}/evaluate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"静态合规启动失败");await j({expectedEvaluationId:"string"==typeof c.evaluationId?c.evaluationId:void 0})}catch(a){K.toast.error(a instanceof Error?a.message:"静态合规启动失败")}finally{q(!1)}}},t=l?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("span",{children:["评估时间:",new Date(l.evaluation.ranAt).toLocaleString()]}),(0,b.jsx)(ac,{status:l.evaluation.status}),null!=l.evaluation.durationMs&&(0,b.jsxs)("span",{children:["耗时:",(l.evaluation.durationMs/1e3).toFixed(2),"s"]}),l.evaluation.generator&&(0,b.jsxs)("span",{children:["评估器:",l.evaluation.generator]}),l.evaluation.contentHash&&(0,b.jsxs)("span",{children:["contentHash:",(0,b.jsxs)("code",{children:[l.evaluation.contentHash.slice(0,12),"…"]})]}),l.evaluation.errorMessage&&(0,b.jsxs)("span",{style:{color:"#b91c1c"},children:["错误:",l.evaluation.errorMessage]})]}):null;return(0,b.jsxs)("section",{className:"sa-detail",children:[(0,b.jsx)(ae,{title:"静态合规分析",subtitle:`${a?.name||"未选择 Skill"}${null!=d?` \xb7 v${d}`:""} \xb7 SKILL.md 文本扫描`,badge:"Rule-based",metaSlot:t,onBack:i,onPrimary:s,primaryLabel:p?"分析中...":"重新分析",onOptimize:k}),(h||n)&&(0,b.jsx)(af,{title:"正在读取静态评估",text:"读取最近一次静态评估与问题列表。",compact:!0}),!h&&!f?.latest&&(0,b.jsx)(ab,{onScan:s,running:p}),f?.latest&&l&&(0,b.jsx)(I.EvaluationContent,{detail:l})]})}function ab({onScan:a,running:c}){return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[(0,b.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,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,minWidth:0},children:[(0,b.jsx)("span",{style:{fontSize:16},children:"🔍"}),(0,b.jsx)("span",{style:{fontSize:13,color:"var(--ev-text, #18181b)",fontWeight:600},children:"当前 Skill 版本尚未扫描"}),(0,b.jsxs)("span",{style:{fontSize:12,color:"var(--ev-muted)"},children:["· 扫描会按下方 ",J.STATIC_EVAL_STANDARDS.length," 个标准维度评分"]})]}),(0,b.jsx)("button",{onClick:a,disabled:c,style:{padding:"6px 14px",background:c?"var(--ev-line-strong, #d4d4d8)":"var(--ev-info, #2563eb)",color:"#fff",border:"none",borderRadius:5,fontSize:12,fontWeight:600,cursor:c?"not-allowed":"pointer",flexShrink:0},children:c?"扫描中…":"开始扫描"})]}),(0,b.jsxs)("div",{style:{background:"var(--ev-card, #fff)",border:"1px solid var(--ev-line, #e5e7eb)",borderRadius:12,padding:"16px 18px"},children:[(0,b.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{style:{fontSize:14,fontWeight:700,color:"var(--ev-text, #18181b)"},children:"分析标准"}),(0,b.jsx)("div",{style:{fontSize:11,color:"var(--ev-muted)",marginTop:2},children:"扫描完成后这里会出现每个标准的命中问题,点击展开查看证据 + 修复建议"})]})}),(0,b.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:J.STATIC_EVAL_STANDARDS.map(a=>(0,b.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,b.jsx)("div",{style:{fontSize:13,fontWeight:600,color:"var(--ev-text, #52525b)"},children:a.title}),(0,b.jsx)("div",{style:{fontSize:11.5,color:"var(--ev-muted)",lineHeight:1.5},children:a.desc}),(0,b.jsx)("div",{style:{textAlign:"right"},children:(0,b.jsx)("span",{style:{display:"inline-block",padding:"2px 8px",fontSize:10,fontWeight:600,color:"#a1a1aa",background:"#f4f4f5",border:"1px solid #e5e7eb",borderRadius:99},children:"待扫描"})})]},a.key))})]})]})}function ac({status:a}){let c=["ok","pending","partial","failed"].includes(a)?a:"ok";return(0,b.jsx)("span",{className:`sa-meta-status ${c}`,children:{ok:"成功",pending:"执行中",partial:"部分成功",failed:"失败"}[a]||a})}function ad({title:a,description:c,primaryAction:d,secondaryAction:e,children:f,onBack:g,onPrimary:h,onSecondary:i,onOptimize:j,renderHeader:k}){return(0,b.jsxs)("section",{className:"sa-detail",children:["inline"===(k??"inline")&&(0,b.jsx)(ae,{title:a,subtitle:c,badge:"调测分析",onBack:g,onPrimary:h,primaryLabel:d,secondaryLabel:e,onSecondary:i,onOptimize:j}),(0,b.jsx)("div",{className:"sa-embedded-debug","aria-label":a,children:(0,b.jsx)("div",{className:"sa-embedded-shell-body",children:f})})]})}function ae({title:a,subtitle:c,badge:d,metaSlot:e,onBack:f,onPrimary:g,primaryDisabled:h,primaryLabel:i,secondaryLabel:j,onSecondary:k,onOptimize:l}){return(0,b.jsx)("header",{className:"sa-detail-head",children:(0,b.jsxs)("div",{className:"sa-detail-hero",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("h1",{children:[a," ",(0,b.jsx)("span",{className:"sa-pill primary",children:d})]}),(0,b.jsx)("p",{children:c}),e&&(0,b.jsx)("div",{className:"sa-detail-meta",children:e})]}),(0,b.jsxs)("div",{className:"sa-detail-actions",children:[j&&(0,b.jsx)("button",{className:"sa-btn",onClick:k,children:j}),i&&(0,b.jsx)("button",{className:"sa-btn",onClick:g,disabled:h,children:i}),(0,b.jsx)("button",{className:"sa-btn sa-btn-primary",onClick:l,children:"开始优化"})]})]})})}function af({title:a,text:c,actionLabel:d,onAction:e,compact:f}){return(0,b.jsxs)("div",{className:`sa-empty ${f?"compact":""}`,children:[(0,b.jsx)("div",{className:"sa-empty-icon",children:"⌁"}),(0,b.jsx)("h3",{children:a}),(0,b.jsx)("p",{children:c}),d&&(0,b.jsx)("button",{className:"sa-btn sa-btn-primary",onClick:e,children:d})]})}function ag(a,b){let c=a.versions||[],d=a=>"number"==typeof a&&Number.isFinite(a)&&(0===c.length||c.some(b=>b.version===a));return d(b)?b:d(a.activeVersion)?a.activeVersion:d(a.version)?a.version:c[0]?.version??0}function ah(a){let b=a.root_skill||a.rootSkill||null;return b?.name?{name:b.name,version:b.version??null}:null}function ai(a){let b=0,c=0,d=0,e=0;for(let f of a){let a=aj(f);if(a&&(Array.isArray(a.matches)||Array.isArray(a.skippedExpectedSteps))){b+=1;let f=Array.isArray(a.matches)?a.matches:[],g=Array.isArray(a.skippedExpectedSteps)?a.skippedExpectedSteps:[],h=f.filter(a=>"matched"===a.matchStatus).length,i=f.filter(a=>"non_business"!==a.matchStatus).length+g.length;d+=h,e+=i,("number"==typeof a.summary?.overallScore?a.summary.overallScore:i>0?h/i:1)<.7&&(c+=1)}}return{analyzed:b,highDeviation:c,matchedSteps:d,totalSteps:e}}function aj(a){var b=a.execution_match?.matchJson||void 0;if(!b)return null;try{return JSON.parse(b)}catch{return null}}function ak(a){let b=aj(a);return!!b&&(Array.isArray(b.matches)||Array.isArray(b.skippedExpectedSteps))}function al(a){let b=aj(a);if(!b)return null;if("number"==typeof b.summary?.overallScore)return b.summary.overallScore;let c=Array.isArray(b.matches)?b.matches:[],d=Array.isArray(b.skippedExpectedSteps)?b.skippedExpectedSteps:[],e=c.filter(a=>"non_business"!==a.matchStatus),f=e.length+d.length;return 0===f?null:e.filter(a=>"matched"===a.matchStatus).length/f}function am(a){return"number"==typeof a.trajectory_score?a.trajectory_score:"number"==typeof a.trajectoryScore?a.trajectoryScore:al(a)}function an(a){return a.task_id||a.upload_id||""}function ao(a){if(!a)return"";let b=new Date(a);return Number.isNaN(b.getTime())?"":`${String(b.getMonth()+1).padStart(2,"0")}-${String(b.getDate()).padStart(2,"0")} ${String(b.getHours()).padStart(2,"0")}:${String(b.getMinutes()).padStart(2,"0")}`}function ap(a){if(!a)return"未知时间";let b=new Date(a);if(Number.isNaN(b.getTime()))return a;let c=Date.now()-b.getTime();return c<6e4?"刚刚":c<36e5?`${Math.floor(c/6e4)} 分钟前`:c<864e5?`${Math.floor(c/36e5)} 小时前`:`${Math.floor(c/864e5)} 天前`}a.s(["default",()=>V],793016)}];
1
+ module.exports=[793016,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(50944),e=a.i(729936),f=a.i(943408),g=a.i(575110);let h=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"]),i={ab:"A/B 测试",trace:"用例分析",recall:"召回分析",static:"静态合规"};function j(a){let b;if((a.ab.delta??0)<0&&(a.ab.pValue??1)<.05){let b=null==a.ab.delta?"":`(${a.ab.delta>0?"+":""}${a.ab.delta} 分)`;return{problem:`A/B 测试显示启用 Skill 后结果显著回退${b},当前版本不建议上线。`,suggestion:"建议优先排查 A/B 回退原因,再结合低分维度做针对性修正。",mode:"fallback"}}if(a.overall.coveredCount<a.overall.totalCount){let b=a.overall.missingDimensions.map(a=>i[a]).filter(Boolean),c=b.length>0?`,缺少 ${b.join("、")} 结果`:"";return{problem:`当前仅有 ${a.overall.coveredCount}/${a.overall.totalCount} 个维度完成评测${c},数据覆盖仍不完整。`,suggestion:"建议先补齐可运行维度,再判断是否需要进入 Skill 优化。",mode:"fallback"}}let c=(b=[],a.ab.hasResult&&null!=a.ab.scoreB&&b.push({key:"ab",label:i.ab,score:a.ab.scoreB}),a.trace.hasResult&&null!=a.trace.score&&b.push({key:"trace",label:i.trace,score:a.trace.score}),a.recall.hasResult&&null!=a.recall.score&&b.push({key:"recall",label:i.recall,score:a.recall.score}),a.static.hasResult&&null!=a.static.score&&b.push({key:"static",label:i.static,score:a.static.score}),b.sort((a,b)=>a.score-b.score),b[0]||null);return c?"trace"===c.key?{problem:`当前主要短板集中在${c.label},已评测 Trace 中有 ${a.trace.highDeviationCount} 条高偏离。`,suggestion:"建议优先进入用例分析详情,先处理高偏离 Trace 和低分场景。",mode:"fallback"}:"recall"===c.key?{problem:`当前主要短板集中在${c.label},触发集通过率仅 ${Math.round(a.recall.passRate??0)}%。`,suggestion:"建议优先补强召回触发集与路由边界,再重新验证命中率表现。",mode:"fallback"}:"static"===c.key?{problem:`当前主要短板集中在${c.label},仍有 ${a.static.issueCount} 项待处理问题。`,suggestion:"建议优先修复静态合规问题,再复测整体健康分变化。",mode:"fallback"}:{problem:`当前主要短板集中在${c.label},已成为综合分的主要拖累。`,suggestion:"建议优先进入对应详情页,先处理最影响分数的问题。",mode:"fallback"}:{problem:"当前还没有足够的评测结果,暂时无法形成稳定诊断。",suggestion:"建议先运行至少一个可用维度,再查看诊断与后续优化建议。",mode:"fallback"}}var k=a.i(99468),l=a.i(467952);let m=[676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,15056327351493116e-23];function n(a){return a.reduce((a,b)=>a+b,0)/a.length}function o(a,b){return a.length<2?0:a.reduce((a,c)=>a+(c-b)**2,0)/(a.length-1)}function p(a){if(a<.5)return Math.log(Math.PI)-Math.log(Math.sin(Math.PI*a))-p(1-a);let b=.9999999999998099,c=a-1;for(let a=0;a<m.length;a+=1)b+=m[a]/(c+a+1);let d=c+m.length-.5;return .5*Math.log(2*Math.PI)+(c+.5)*Math.log(d)-d+Math.log(b)}function q(a,b,c){let d=a+b,e=a+1,f=a-1,g=1,h=1-d*c/e;1e-30>Math.abs(h)&&(h=1e-30);let i=h=1/h;for(let j=1;j<=200;j+=1){let k=2*j,l=j*(b-j)*c/((f+k)*(a+k));1e-30>Math.abs(h=1+l*h)&&(h=1e-30),1e-30>Math.abs(g=1+l/g)&&(g=1e-30),i*=(h=1/h)*g,1e-30>Math.abs(h=1+(l=-(a+j)*(d+j)*c/((a+k)*(e+k)))*h)&&(h=1e-30),1e-30>Math.abs(g=1+l/g)&&(g=1e-30);let m=(h=1/h)*g;if(i*=m,3e-7>Math.abs(m-1))break}return i}var r=a.i(106927);a.i(249869);var s=a.i(331617),t=a.i(72403);function u({label:a,placeholder:d,options:e,selectedIds:f,onChange:g,accent:h="#2563eb",emptyHint:i,disabled:j}){let[k,l]=(0,c.useState)(!1),m=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(!k)return;let a=a=>{m.current&&!m.current.contains(a.target)&&l(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[k]);let n=e.filter(a=>f.includes(a.id)).map(a=>a.name),o=0===n.length?d||"请选择":n.length<=2?n.join("、"):`${n.slice(0,2).join("、")} 等 ${n.length} 项`,p=a=>{g(f.includes(a)?f.filter(b=>b!==a):[...f,a])};return(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,b.jsx)("span",{style:{fontSize:11,fontWeight:700,color:"#52525b",textTransform:"uppercase",letterSpacing:"0.04em",minWidth:52},children:a}),(0,b.jsxs)("div",{ref:m,style:{position:"relative",flex:1,minWidth:0},children:[(0,b.jsxs)("button",{type:"button",disabled:j,onClick:()=>!j&&l(a=>!a),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,padding:"6px 10px",borderRadius:6,fontSize:12.5,cursor:j?"not-allowed":"pointer",border:"1px solid "+(f.length?h:"#d4d4d8"),background:j?"#f4f4f5":"#fff",color:f.length?"#27272a":"#a1a1aa",textAlign:"left"},children:[(0,b.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o}),(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:6,flexShrink:0},children:[f.length>0&&(0,b.jsx)("span",{style:{fontSize:10.5,fontWeight:700,color:h,background:h+"14",borderRadius:99,padding:"0 7px"},children:f.length}),(0,b.jsx)("span",{style:{color:"#a1a1aa",fontSize:10},children:k?"▲":"▼"})]})]}),k&&(0,b.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===e.length&&(0,b.jsx)("div",{style:{padding:"10px 12px",fontSize:12,color:"#a1a1aa"},children:i||"暂无选项"}),e.map(a=>{let c=f.includes(a.id);return(0,b.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>p(a.id),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),p(a.id))},style:{display:"flex",alignItems:"center",gap:8,padding:"7px 9px",borderRadius:5,cursor:"pointer",fontSize:12.5,background:c?h+"0f":"transparent",color:"#27272a"},children:[(0,b.jsx)("span",{style:{width:15,height:15,borderRadius:4,flexShrink:0,border:"1.5px solid "+(c?h:"#c4c4cc"),background:c?h:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:10,fontWeight:700},children:c?"✓":""}),(0,b.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.name}),a.meta&&(0,b.jsx)("span",{style:{fontSize:10.5,color:"#a1a1aa",flexShrink:0},children:a.meta})]},a.id)})]})]})]})}function v({tasks:a,selectedRunId:d,selectedTitle:e,onSelect:f,onCreateNew:g,locale:h="zh"}){let i="zh"===h,[j,k]=(0,c.useState)(!1),l=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(!j)return;let a=a=>{l.current&&!l.current.contains(a.target)&&k(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[j]);let m=a.find(a=>a.runId===d),n=d?m?.taskTitle||e||d.slice(0,8):i?"选择 / 新建评测任务":"Select / new eval task";return(0,b.jsxs)("div",{ref:l,style:{position:"relative",display:"inline-flex",alignItems:"center",gap:8},children:[(0,b.jsxs)("button",{type:"button",onClick:g,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:["+ ",i?"新建评测任务":"New eval task"]}),(0,b.jsxs)("button",{type:"button",onClick:()=>k(a=>!a),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"7px 14px",borderRadius:7,fontSize:13.5,fontWeight:700,cursor:"pointer",border:"1px solid "+(d?"rgba(126,34,206,.3)":"#D4D4D8"),background:d?"#F5E8FF":"#fff",color:d?"#7E22CE":"#52525B",maxWidth:340,overflow:"hidden"},title:d?`评测任务 ${d}`:void 0,children:[(0,b.jsxs)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["📋 ",n]}),(0,b.jsx)("span",{style:{color:"#A1A1AA",fontSize:11},children:j?"▲":"▼"})]}),d&&(0,b.jsx)("button",{type:"button",onClick:()=>window.open(`/eval/run/${encodeURIComponent(d)}`,"_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:i?"打开评测任务详情":"Open eval task",children:i?"查看评测详情":"View details"}),j&&(0,b.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===a.length?(0,b.jsx)("div",{style:{padding:"10px 12px",fontSize:13,color:"#A1A1AA"},children:i?"暂无历史评测任务":"No eval tasks yet"}):a.map(a=>{let c=a.runId===d;return(0,b.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>{k(!1),f({runId:a.runId,taskTitle:a.taskTitle})},onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),k(!1),f({runId:a.runId,taskTitle:a.taskTitle}))},style:{padding:"10px 12px",borderRadius:6,cursor:"pointer",background:c?"rgba(126,34,206,.08)":"transparent"},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:7,fontSize:13.5,fontWeight:700,color:"#27272A"},children:[c&&(0,b.jsx)("span",{style:{color:"#7E22CE"},children:"✓"}),(0,b.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.taskTitle||a.runId.slice(0,8)})]}),(0,b.jsxs)("div",{style:{fontSize:12,color:"#A1A1AA",marginTop:3},children:[i?"共":""," ",a.traceCount??0," ",i?"条":"records","number"==typeof a.doneCount?` \xb7 ${i?"已完成":"done"} ${a.doneCount}`:"",a.runningCount?` \xb7 ${i?"进行中":"running"} ${a.runningCount}`:"",a.createdAt?` \xb7 ${new Date(a.createdAt).toLocaleDateString()}`:""]})]},a.runId)})})]})}function w(a){return"number"!=typeof a?"#B8B6AE":a>=80?"#16A34A":a>=60?"#D97706":"#DC2626"}let x={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 y({tone:a,label:c,title:d}){let e=x[a];return(0,b.jsxs)("span",{title:d,style:{display:"inline-flex",alignItems:"center",gap:5,padding:"2px 9px",borderRadius:99,fontSize:11.5,fontWeight:600,color:e.color,background:e.bg,cursor:d?"help":"default"},children:["running"===a&&(0,b.jsx)("span",{style:{width:8,height:8,borderRadius:99,border:"1.5px solid "+e.color,borderTopColor:"transparent",display:"inline-block",animation:"erspin 0.7s linear infinite"}}),c]})}function z({records:a,locale:d="zh",title:e,emptyHint:f,onRetry:g,onDelete:h,onRowClick:i}){let j="zh"===d,k=!!g||!!h,l=g&&h?92:50*!!k,m="eval-exec-table-cols-v2",n={caseW:"1.1fr",execW:"1.4fr",evalW:"1.6fr"},o={caseW:120,execW:150,evalW:160},[p,q]=c.default.useState({caseW:null,execW:null,evalW:null});c.default.useEffect(()=>{try{let a=localStorage.getItem(m);if(a){let b=JSON.parse(a);if(b&&"object"==typeof b){let a=a=>"number"==typeof a&&Number.isFinite(a)&&a>0?a:null;q({caseW:a(b.caseW),execW:a(b.execW),evalW:a(b.evalW)})}}}catch{}},[]);let r=a=>null!=p[a]?`${p[a]}px`:n[a],s=[78,62,52,52,...l?[l]:[]],t=[r("caseW"),r("execW"),r("evalW"),...s.map(a=>`${a}px`)].join(" "),u=3+s.length,v=(p.caseW??o.caseW)+(p.execW??o.execW)+(p.evalW??o.evalW)+s.reduce((a,b)=>a+b,0)+(u-1)*12+24,x=a=>(0,b.jsx)("span",{onMouseDown:b=>{b.preventDefault(),b.stopPropagation();let c=b.currentTarget.parentElement,d=c?.offsetWidth??p[a]??o[a],e=b.clientX,f=b=>{let c=Math.max(80,d+(b.clientX-e));q(b=>({...b,[a]:c}))},g=()=>{document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",g),document.body.style.cursor="",q(a=>{try{localStorage.setItem(m,JSON.stringify(a))}catch{}return a})};document.addEventListener("mousemove",f),document.addEventListener("mouseup",g),document.body.style.cursor="col-resize"},onClick:a=>a.stopPropagation(),title:j?"拖拽调整列宽":"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,b.jsx)("span",{style:{width:2,height:"60%",alignSelf:"center",background:"#D4D4D8",borderRadius:1}})}),z={position:"relative",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};return(0,b.jsxs)("div",{style:{border:"1px solid #E7E5E4",borderRadius:8,overflow:"hidden",background:"#fff"},children:[(0,b.jsx)("style",{children:"@keyframes erspin{to{transform:rotate(360deg)}}"}),e&&(0,b.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"10px 12px",background:"#FAFAF7",borderBottom:"1px solid #E7E5E4"},children:[(0,b.jsx)("div",{style:{fontWeight:700,color:"#2C2C2A",fontSize:13},children:e}),(0,b.jsxs)("span",{style:{fontSize:12,color:"#888780"},children:[a.length," ",j?"条":"records"]})]}),0===a.length?(0,b.jsx)("div",{style:{padding:14,color:"#888780",fontSize:13},children:f||(j?"暂无评测记录":"No evaluation records yet")}):(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",maxHeight:460,overflowY:"auto",overflowX:"auto"},children:[(0,b.jsxs)("div",{style:{display:"grid",gridTemplateColumns:t,gap:12,padding:"8px 12px",background:"#FAFAF7",borderBottom:"1px solid #E7E5E4",fontSize:11,fontWeight:700,color:"#5F5E5A",position:"sticky",top:0,zIndex:1,minWidth:v},children:[(0,b.jsxs)("div",{style:z,children:[j?"用例":"Case",x("caseW")]}),(0,b.jsxs)("div",{style:z,children:[j?"执行 Trace":"Execution trace",x("execW")]}),(0,b.jsxs)("div",{style:z,children:[j?"评估 Trace":"Eval trace",x("evalW")]}),(0,b.jsx)("div",{children:j?"状态":"Status"}),(0,b.jsx)("div",{children:j?"评测结果":"Result"}),(0,b.jsx)("div",{style:{textAlign:"right"},children:j?"结果分":"Result"}),(0,b.jsx)("div",{style:{textAlign:"right"},children:j?"轨迹分":"Traj"}),k&&(0,b.jsx)("div",{style:{textAlign:"center"},children:j?"操作":"Action"})]}),a.map(a=>{let c,e,{tone:f,label:l}=function(a,b){let c="zh"===b;switch(a){case"pending":case"queued":return{tone:"pending",label:c?"排队中":"Queued"};case"executing":return{tone:"running",label:c?"执行中":"Executing"};case"executed":return{tone:"pending",label:c?"待评测":"Awaiting evaluation"};case"running":case"evaluating":return{tone:"running",label:c?"评测中":"Evaluating"};case"partial":return{tone:"partial",label:c?"部分评测":"Partial"};case"done":case"pass":return{tone:"done",label:c?"已评测":"Evaluated"};case"fail":case"failed":return{tone:"fail",label:c?"失败":"Failed"};default:return{tone:"pending",label:a}}}(a.status,d);return(0,b.jsxs)("div",{onClick:i?()=>i(a):void 0,style:{display:"grid",gridTemplateColumns:t,gap:12,alignItems:"center",padding:"10px 12px",borderTop:"1px solid #F1EFE8",fontSize:12,cursor:i?"pointer":"default",minWidth:v},children:[(0,b.jsx)("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},title:a.caseTitle||a.caseLabel,children:(0,b.jsx)("span",{style:{fontSize:12,color:"#2C2C2A"},children:a.caseLabel||"—"})}),(0,b.jsx)("div",{style:{minWidth:0},children:a.executionTraceId?(0,b.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:j?"查看链路追踪":"View trace",onClick:b=>{b.stopPropagation(),window.open(`/trace?taskId=${encodeURIComponent(a.executionTraceId)}`,"_blank")},onMouseEnter:a=>a.currentTarget.style.textDecoration="underline",onMouseLeave:a=>a.currentTarget.style.textDecoration="none",children:["🔗 ",a.executionTraceId]}):(0,b.jsx)("span",{style:{color:"#B8B6AE"},children:"—"})}),(0,b.jsx)("div",{style:{minWidth:0,display:"flex",flexDirection:"column",gap:3},children:(c=[],(a.trajEvalTraceId&&c.push({label:j?"轨迹":"Traj",id:a.trajEvalTraceId,color:"#7E22CE"}),a.resultEvalTraceId&&c.push({label:j?"结果":"Result",id:a.resultEvalTraceId,color:"#185FA5"}),0===c.length&&a.evaluationTraceId&&c.push({label:j?"评估":"Eval",id:a.evaluationTraceId,color:"#7E22CE"}),0===c.length)?(0,b.jsx)("span",{style:{color:"#B8B6AE"},children:"—"}):c.map(a=>(0,b.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:j?`查看${a.label}评估器轨迹(评测怎么判的)`:`View ${a.label} evaluator trace`,onClick:b=>{b.stopPropagation(),window.open(`/trace?taskId=${encodeURIComponent(a.id)}`,"_blank")},onMouseEnter:a=>a.currentTarget.style.textDecoration="underline",onMouseLeave:a=>a.currentTarget.style.textDecoration="none",children:[(0,b.jsx)("span",{style:{flexShrink:0,fontSize:9.5,fontWeight:700,color:a.color,background:a.color+"14",borderRadius:3,padding:"0 4px",lineHeight:"15px"},children:a.label}),(0,b.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:"ui-monospace, monospace",fontSize:11,color:a.color},children:a.id})]},a.label)))}),(0,b.jsx)("div",{children:(0,b.jsx)(y,{tone:f,label:l,title:"fail"===f?a.errorMsg:void 0})}),(0,b.jsx)("div",{children:(()=>{if(!a.evaluatorRunId||!a.executionTraceId||!a.resultId)return(0,b.jsx)("span",{style:{color:"#B8B6AE",fontSize:11},children:"—"});let c=`/eval/trajectory/${encodeURIComponent(a.executionTraceId)}?runId=${encodeURIComponent(a.evaluatorRunId)}${a.datasetId?`&datasetId=${encodeURIComponent(a.datasetId)}`:""}&resultId=${encodeURIComponent(a.resultId)}`;return(0,b.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:j?"查看该 trace 的评测结果详情":"View this trace's evaluation result",onClick:a=>{a.stopPropagation(),window.open(c,"_blank")},children:["📋 ",j?"查看":"View"]})})()}),(0,b.jsx)("div",{style:{textAlign:"right",fontWeight:700,fontFamily:"ui-monospace, monospace",color:w(a.resultScore)},children:"number"==typeof a.resultScore?Math.round(a.resultScore):"—"}),(0,b.jsx)("div",{style:{textAlign:"right",fontWeight:700,fontFamily:"ui-monospace, monospace",color:w(a.trajScore)},children:"number"==typeof a.trajScore?Math.round(a.trajScore):"—"}),k&&(e="running"===f||"pending"===f||a.actionsDisabled,(0,b.jsxs)("div",{style:{display:"flex",gap:4,justifyContent:"center"},children:[g&&(0,b.jsx)("button",{className:"v2-action-btn",style:{fontSize:11,padding:"3px 8px",border:"1px solid #D4D4D8",background:"#fff",borderRadius:4,cursor:e?"not-allowed":"pointer",color:e?"#B8B6AE":"#52525B",opacity:e?.6:1},disabled:e,title:e?j?"当前记录暂不可重试":"Retry is unavailable":j?"重新评测这条":"Re-evaluate",onClick:b=>{b.stopPropagation(),e||g(a)},children:j?"重试":"Retry"}),h&&(0,b.jsx)("button",{className:"v2-action-btn",style:{fontSize:11,padding:"3px 8px",border:"1px solid "+(e?"#E7E5E4":"#F0C5C5"),background:"#fff",borderRadius:4,cursor:e?"not-allowed":"pointer",color:e?"#B8B6AE":"#DC2626",opacity:e?.6:1},disabled:e,title:e?j?"当前记录暂不可删除":"Delete is unavailable":j?"从评测执行列表删除这条":"Delete this record",onClick:b=>{b.stopPropagation(),e||h(a)},children:j?"删除":"Delete"})]}))]},a.id)})]})]})}let A=new Map;function B(a,b,d=0,e){let f=e?.latestByCase!==!1,h=a&&b?`${a}\u0000${b}\u0000${f?"latest":"all"}`:"",[i,j]=(0,c.useState)({scopeKey:"",map:new Map});return(0,c.useEffect)(()=>{if(!a||!b)return;let c=!1,e=0,i=async()=>{let d=++e;try{let i=f?"&latestByCase=1":"",k=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(a)}&runId=${encodeURIComponent(b)}${i}&limit=500`),l=await k.json(),m=Array.isArray(l?.results)?l.results:[],n=new Map;for(let a of m){let b=a&&"object"==typeof a?a:{},c=b.taskId||b.executionId;if(!c||b.watchPlaceholder||b.placeholderOnly||n.has(String(c)))continue;let d=b.rawAnalysis&&"object"==typeof b.rawAnalysis?b.rawAnalysis:{},e=d.resultEvaluation&&"object"==typeof d.resultEvaluation?d.resultEvaluation:{},f="string"==typeof d.evaluatorSessionId&&d.evaluatorSessionId.trim()?d.evaluatorSessionId.trim():"",g="string"==typeof e.evaluatorSessionId&&e.evaluatorSessionId.trim()?e.evaluatorSessionId.trim():"",h=f||g||"";n.set(String(c),{resultId:"string"==typeof b.id?b.id:void 0,caseId:"string"==typeof b.caseId?b.caseId:void 0,taskId:String(c),evaluationTraceId:h||void 0,resultEvalTraceId:g||void 0,trajEvalTraceId:f||void 0,datasetId:"string"==typeof b.datasetId?b.datasetId:void 0,status:"string"==typeof b.status?b.status:void 0,resultScore:"number"==typeof b.resultEvaluationScore?Math.round(100*b.resultEvaluationScore):null,trajScore:"number"==typeof b.trajectoryScore?Math.round(100*b.trajectoryScore):null,errorMessage:"string"==typeof b.errorMessage?b.errorMessage:void 0})}c||d!==e||j({scopeKey:h,map:n})}catch{}};if(i(),d>0){let a=setInterval(i,d);return()=>{c=!0,clearInterval(a)}}return()=>{c=!0}},[a,b,d,h,f]),i.scopeKey===h?i.map:A}var C=a.i(478614);function D({text:a}){let[d,e]=(0,c.useState)(null);return a.length>80?(0,b.jsxs)("span",{style:{cursor:"default"},onMouseEnter:a=>e({x:a.clientX,y:a.clientY}),onMouseMove:a=>e({x:a.clientX,y:a.clientY}),onMouseLeave:()=>e(null),children:[a.slice(0,80),"…",d&&(0,b.jsx)("div",{className:"cell-tooltip-bubble",style:{left:Math.min(d.x+14,840),top:d.y+18},children:a})]}):(0,b.jsx)(b.Fragment,{children:a})}let E=[...C.presetEvaluators.filter(a=>"ready"===a.status).map(a=>({id:a.id,name:a.name}))];function F({newTaskTrigger:a,historyPanelTrigger:e,topConfigSlot:h,headerActions:i,controlled:j,controlledDatasetIds:k,controlledEvaluatorIds:m,controlledEvalBatchId:n,controlledEvalBatchTitle:o,controlledSkillId:p,controlledVersionId:q,hideExecAndResult:t,onExecutionRecordsChange:w}){let x,y,A,C,F,H,{locale:I}=(0,r.useLocale)(),{user:J}=(0,f.useAuth)(),K=(0,d.useRouter)(),[L,M]=(0,c.useState)(null),[N,O]=(0,c.useState)([]),[P,Q]=(0,c.useState)(!1),[R,S]=(0,c.useState)(""),[T,U]=(0,c.useState)(""),[V,W]=(0,c.useState)(!1),[X,Y]=(0,c.useState)(!1),[Z,$]=(0,c.useState)([]),[_,aa]=(0,c.useState)([]),[ab,ac]=(0,c.useState)([]),[ad,ae]=(0,c.useState)([]),[af,ag]=(0,c.useState)(""),[ah,ai]=(0,c.useState)(""),[aj,ak]=(0,c.useState)(!1),[al,am]=(0,c.useState)(!1),an=(0,c.useRef)(null),ao=(0,c.useRef)([]),[ap,aq]=(0,c.useState)(""),[ar,as]=(0,c.useState)(""),[at,au]=(0,c.useState)([]),[av,aw]=(0,c.useState)([]),[ax,ay]=(0,c.useState)("preset-agent-trace-quality"),[az,aA]=(0,c.useState)(()=>E.map(a=>a.id)),[aB,aC]=(0,c.useState)(!1),[aD,aE]=(0,c.useState)([]),aF=(0,c.useCallback)(async()=>{if(!J)return void aE([]);try{let a=await (0,g.apiFetch)(`/api/eval/trajectory/runs?user=${encodeURIComponent(J)}&limit=50&latestByCase=1&excludeGrayscale=1`),b=await a.json();Array.isArray(b?.runs)&&aE(b.runs.map(a=>({runId:a.runId,taskTitle:a.taskTitle,traceCount:a.traceCount,doneCount:a.doneCount,runningCount:a.runningCount,createdAt:a.createdAt})))}catch{}},[J]);(0,c.useEffect)(()=>{aF()},[aF]),(0,c.useEffect)(()=>{j&&void 0!==k&&ae(k)},[j,k]),(0,c.useEffect)(()=>{j&&void 0!==m&&aA(m)},[j,m]),(0,c.useEffect)(()=>{j&&(void 0!==n&&aq(n),void 0!==o&&as(o))},[j,n,o]),(0,c.useEffect)(()=>{j&&(void 0!==p&&ag(p),void 0!==q&&ai(q))},[j,p,q]),(0,c.useEffect)(()=>{j&&(void 0!==p&&aM(p),aY([]))},[j,p,q]);let aG=B(J,ap||void 0,5e3),[aH,aI]=(0,c.useState)("dataset"),[aJ,aK]=(0,c.useState)(!1),[aL,aM]=(0,c.useState)(""),[aN,aO]=(0,c.useState)("7d"),[aP,aQ]=(0,c.useState)(""),[aR,aS]=(0,c.useState)([]),[aT,aU]=(0,c.useState)(!1),[aV,aW]=(0,c.useState)({}),[aX,aY]=(0,c.useState)([]),[aZ,a$]=(0,c.useState)(!1),[a_,a0]=(0,c.useState)(!1),[a1,a2]=(0,c.useState)(!1),[a3,a4]=(0,c.useState)(!1),[a5,a6]=(0,c.useState)(!1),[a7,a8]=(0,c.useState)(!1),[a9,ba]=(0,c.useState)(!0),[bb,bc]=(0,c.useState)(!1),[bd,be]=(0,c.useState)(!0);(0,c.useRef)(null),(0,c.useRef)(null);let[bf,bg]=(0,c.useState)({top:0,left:0}),[bh,bi]=(0,c.useState)({top:0,left:0}),[bj,bk]=(0,c.useState)("all"),[bl,bm]=(0,c.useState)(""),[bn,bo]=(0,c.useState)([]);(0,c.useEffect)(()=>{ao.current=bn},[bn]),(0,c.useEffect)(()=>()=>{an.current&&clearInterval(an.current)},[]);let[bp,bq]=(0,c.useState)({}),br=(0,c.useRef)({}),bs=(0,c.useRef)({}),bt=(0,c.useRef)(null),bu=(0,c.useRef)(!1),bv=(0,c.useRef)(null),bw=()=>{let a=new Date;return`评测任务 ${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}`};(0,c.useEffect)(()=>{J&&(0,g.apiFetch)(`/api/debug/batch-tasks?user=${encodeURIComponent(J)}`).then(a=>a.json()).then(a=>{if(Array.isArray(a)&&a.length>0){let b=a[0],c=b.configJson||{},d=j&&((c.skillId||"")!==(p||"")||(c.versionId||"")!==(q||"")),e=d?{...b,configJson:{...c,skillId:p||"",versionId:q||""},caseStatesJson:{},traceEvalStatesJson:{}}:b;O([e,...a.slice(1)]),M(e),j||(ae(c.datasetIds||[]),c.versionId&&(bv.current=c.versionId),ag(c.skillId||""),ai(c.versionId||""),c.sourceMode&&aI(c.sourceMode),c.evaluatorId&&ay(c.evaluatorId),Array.isArray(c.evaluators)&&c.evaluators.length>0&&aA(c.evaluators),c.traceSkillId&&aM(c.traceSkillId),c.traceTimeRange&&aO(c.traceTimeRange),c.traceDatasetId&&aQ(c.traceDatasetId),aq(c.evaluationBatchId||""),as(c.evaluationBatchTitle||""),au(Array.isArray(c.evaluationBatchEvaluators)?c.evaluationBatchEvaluators:[])),U(c.taskDescription||""),bq(e.caseStatesJson||{}),aW(e.traceEvalStatesJson||{}),d&&(0,g.apiFetch)(`/api/debug/batch-tasks/${b.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,configJson:e.configJson,caseStatesJson:{},traceEvalStatesJson:{}})}).catch(()=>{})}else j?(0,g.apiFetch)("/api/debug/batch-tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,taskName:bw()})}).then(a=>a.ok?a.json():null).then(a=>{a?.id&&(M(a),O([a]),Q(!1))}).catch(()=>{}):(S(bw()),Q(!0))}).catch(()=>{j||(S(bw()),Q(!0))})},[J,j,p,q]);let bx=(0,c.useCallback)(async(a,b,c,d)=>{if(!J||!a)return;let e={user:J};void 0!==b&&(e.configJson=b),void 0!==c&&(e.caseStatesJson=c),void 0!==d&&(e.traceEvalStatesJson=d);try{await (0,g.apiFetch)(`/api/debug/batch-tasks/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}catch{}},[J]),by=(0,c.useCallback)(a=>{ak(!1);let b=bR.current;if(!b)return;aq(a.evaluatorRunId),as(a.taskTitle),au(a.selectedEvaluators);let c=b.configJson||{},d={datasetIds:c.datasetIds||[],skillId:c.skillId||"",versionId:c.versionId||"",taskDescription:c.taskDescription,sourceMode:c.sourceMode,evaluatorId:c.evaluatorId,traceSkillId:c.traceSkillId,traceTimeRange:c.traceTimeRange,traceDatasetId:c.traceDatasetId,evaluators:c.evaluators??az,evaluationBatchId:a.evaluatorRunId,evaluationBatchTitle:a.taskTitle,evaluationBatchEvaluators:a.selectedEvaluators};bx(b.id,d),M(a=>a?{...a,configJson:{...a.configJson||{},...d}}:a),aF()},[bx,az,aF]),bz=(0,c.useCallback)(a=>{let b=bR.current;if(!b)return;aq(a.runId),as(a.taskTitle||"");let c=b.configJson||{},d={datasetIds:c.datasetIds||[],skillId:c.skillId||"",versionId:c.versionId||"",taskDescription:c.taskDescription,sourceMode:c.sourceMode,evaluatorId:c.evaluatorId,evaluators:c.evaluators??az,traceSkillId:c.traceSkillId,traceTimeRange:c.traceTimeRange,traceDatasetId:c.traceDatasetId,evaluationBatchId:a.runId,evaluationBatchTitle:a.taskTitle||"",evaluationBatchEvaluators:c.evaluationBatchEvaluators};bx(b.id,d),M(a=>a?{...a,configJson:{...a.configJson||{},...d}}:a)},[bx,az]),bA=async()=>{if(R.trim()&&J){Y(!0);try{let a=await (0,g.apiFetch)("/api/debug/batch-tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,taskName:R.trim()})});if(a.ok){let b=await a.json();T.trim()&&(await (0,g.apiFetch)(`/api/debug/batch-tasks/${b.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J,configJson:{taskDescription:T.trim()}})}).catch(()=>{}),b.configJson={...b.configJson||{},taskDescription:T.trim()}),M(b),O(a=>[b,...a]),Q(!1),S(""),ae([]),ag(""),ai(""),bq({})}}catch{}finally{Y(!1)}}},bB=()=>{S(bw()),U(""),Q(!0),a2(!1),aq(""),as(""),au([])},bC=(0,c.useRef)(a);(0,c.useEffect)(()=>{a!==bC.current&&(bC.current=a,bB())},[a]);let bD=(0,c.useRef)(e);(0,c.useEffect)(()=>{e!==bD.current&&(bD.current=e,a4(!0))},[e]),(0,c.useEffect)(()=>{J&&Promise.all([(0,g.apiFetch)(`/api/agent-datasets?user=${encodeURIComponent(J)}`).then(a=>a.json()),(0,g.apiFetch)(`/api/skills?user=${encodeURIComponent(J)}`).then(a=>a.json()),(0,g.apiFetch)(`/api/user-evaluators?user=${encodeURIComponent(J)}`).then(a=>a.json()).catch(()=>[])]).then(([a,b,c])=>{Array.isArray(a)&&$(a),Array.isArray(b)&&aa(b.map(a=>({id:a.id,name:a.name}))),Array.isArray(c)&&aw(c.map(a=>({id:a.id,name:a.name})))}).catch(()=>{})},[J]),(0,c.useEffect)(()=>{if(!J||!af){ac([]),ai("");return}(0,g.apiFetch)(`/api/skills/${af}/versions?user=${encodeURIComponent(J)}`).then(a=>a.json()).then(a=>{if(Array.isArray(a)){if(ac(a),j)return void ai(q||"");let b=bv.current;if(b&&a.find(a=>a.id===b))bv.current=null,ai(b);else{bv.current=null;let b=a.find(a=>a.isCurrent);ai(b?b.id:a[0]?.id||"")}}}).catch(()=>{})},[J,af,j,q]),(0,c.useEffect)(()=>{if("trace"!==aH||!J||!aL)return void aS([]);aU(!0);let a=_.find(a=>a.id===aL),b=new URLSearchParams({user:J});a&&b.set("skill",a.name);let c="1d"===aN?1:"3d"===aN?3:7;b.set("since",String(Date.now()-864e5*c)),b.set("fields","light"),(0,g.apiFetch)(`/api/observe/data?${b.toString()}`).then(a=>a.json()).then(a=>{Array.isArray(a)&&aS(a.slice(0,100))}).catch(()=>{}).finally(()=>aU(!1))},[aH,J,aL,aN,_]),(0,c.useEffect)(()=>{if(J)for(let[a,b]of Object.entries(aV)){if("evaluating"!==b.status||!b.evaluatorRunId||!b.taskId||bs.current[`tr_${a}`])continue;let{evaluatorRunId:c,taskId:d}=b,e=async()=>{try{let b=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J)}&runId=${encodeURIComponent(c)}`),e=((await b.json()).results||[]).find(a=>a.taskId===d);if(!e)return;if("done"===e.status){clearInterval(bs.current[`tr_${a}`]),delete bs.current[`tr_${a}`];let b=Math.round((e.trajectoryScore??0)*100);aW(e=>{let f={...e,[a]:{status:"done",score:b,evaluatorRunId:c,taskId:d}};return bX(f),f})}else"failed"===e.status&&(clearInterval(bs.current[`tr_${a}`]),delete bs.current[`tr_${a}`],aW(b=>{let c={...b,[a]:{status:"fail",taskId:d}};return bX(c),c}))}catch{}};e(),bs.current[`tr_${a}`]=setInterval(e,5e3)}},[L?.id,J]),(0,c.useEffect)(()=>{if(J)for(let[a,b]of Object.entries(bp)){if("evaluating"!==b.status||!b.evaluatorRunId||bs.current[a])continue;let{evaluatorRunId:c}=b,d=async()=>{try{let b=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J)}&runId=${encodeURIComponent(c)}`),d=((await b.json()).results||[]).find(b=>b.caseId===a);if(!d)return;if("done"===d.status){clearInterval(bs.current[a]),delete bs.current[a];let b=Math.round((d.trajectoryScore??0)*100),c=b>=60;bq(d=>{let e={...d,[a]:{...d[a]||{},status:c?"pass":"fail",score:b}};return bW(e),e})}else"failed"===d.status&&(clearInterval(bs.current[a]),delete bs.current[a],bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:d.errorMessage||"轨迹评测失败"}};return bW(c),c}))}catch{}};d(),bs.current[a]=setInterval(d,5e3)}},[L?.id,J]);let bE=Z.filter(a=>ad.includes(a.id)).flatMap(a=>{let b=a.cases||[];return 0===b.length?[{id:`mock_${a.id}`,input:`[${"zh"===I?"示例":"Sample"}] ${a.name}`,datasetName:a.name,datasetId:a.id,isMock:!0}]:b.map(b=>({...b,datasetName:a.name,datasetId:a.id}))}),bF=c.default.useMemo(()=>{let a=new Map;for(let b of Z)for(let c of b.cases||[])a.set(String(c.id),{...c,datasetId:b.id});return a},[Z]),bG=c.default.useMemo(()=>Object.entries(bp).filter(([,a])=>!!ap&&(a.evaluatorRunId===ap||!!a.sessionId&&aG.has(a.sessionId))).map(([a,b])=>{let c=bF.get(a),d=b.sessionId?aG.get(b.sessionId):void 0,e=d?.taskId===b.sessionId?d:void 0,f=e?.status==="done"?"done":e?.status==="failed"?"failed":e?.status==="pending"||e?.status==="running"?"evaluating":"running"===b.status?"executing":"executed"===b.status?"executed":"evaluating"===b.status?"evaluating":"pass"===b.status?"done":"fail"===b.status?"failed":"pending";return{id:`case:${a}`,caseId:a,caseLabel:b.input||c?.input||a,caseTitle:b.input||c?.input||a,executionTraceId:b.sessionId||void 0,evaluationTraceId:e?.evaluationTraceId,resultEvalTraceId:e?.resultEvalTraceId,trajEvalTraceId:e?.trajEvalTraceId,evaluatorRunId:b.evaluatorRunId||ap||void 0,resultId:e?.resultId,datasetId:c?.datasetId||e?.datasetId,status:f,resultScore:e?.resultScore??null,trajScore:e?.trajScore??null,errorMsg:b.error||b.output||e?.errorMessage,actionsDisabled:!b.sessionId}}),[bp,ap,aG,bF]);(0,c.useEffect)(()=>{j&&w?.(bG)},[j,bG,w]);let bH=bE.filter(a=>{let b=bp[a.id],c=b?.status||"pending",d=j||"all"===bj||"pending"===bj&&"pending"===c||"executed"===bj&&("executed"===c||"evaluating"===c)||"evaluated"===bj&&("pass"===c||"fail"===c)||"failed"===bj&&"fail"===c,e=!bl||a.input?.toLowerCase().includes(bl.toLowerCase());return d&&e}),bI=bE.filter(a=>!bp[a.id]||"pending"===bp[a.id].status).length,bJ=bE.filter(a=>bp[a.id]?.status==="executed").length,bK=bE.filter(a=>bp[a.id]?.status==="pass"||bp[a.id]?.status==="fail").length,bL=bE.filter(a=>bp[a.id]?.status==="fail").length,bM=bE.filter(a=>bp[a.id]?.status==="pass").length,bN=bE.filter(a=>bp[a.id]?.status==="evaluating").length,bO=bE.length>0?Math.round(bK/bE.length*100):0,bP=_.find(a=>a.id===af),bQ=ab.find(a=>a.id===ah),bR=(0,c.useRef)(null);(0,c.useEffect)(()=>{bR.current=L},[L]);let bS=(0,c.useRef)({});(0,c.useEffect)(()=>{bS.current=bp},[bp]);let bT=(0,c.useRef)({});(0,c.useEffect)(()=>{bT.current=aV},[aV]);let bU=(0,c.useRef)({datasetIds:ad,skillId:af,versionId:ah,taskDescription:T,sourceMode:aH,evaluatorId:ax,evaluators:az,traceSkillId:aL,traceTimeRange:aN,traceDatasetId:aP,evaluationBatchId:ap,evaluationBatchTitle:ar,evaluationBatchEvaluators:at});(0,c.useEffect)(()=>{bU.current={datasetIds:ad,skillId:af,versionId:ah,taskDescription:T,sourceMode:aH,evaluatorId:ax,evaluators:az,traceSkillId:aL,traceTimeRange:aN,traceDatasetId:aP,evaluationBatchId:ap,evaluationBatchTitle:ar,evaluationBatchEvaluators:at}},[ad,af,ah,T,aH,ax,az,aL,aN,aP,ap,ar,at]);let bV=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(L&&J)return bV.current&&clearTimeout(bV.current),bV.current=setTimeout(()=>{bx(L.id,bU.current,void 0)},800),()=>{bV.current&&clearTimeout(bV.current)}},[aH,ax,az,aL,aN,aP,ad,af,ah,L?.id,J]);let bW=(0,c.useCallback)(a=>{bR.current&&bx(bR.current.id,bU.current,a)},[bx]),bX=(0,c.useCallback)(a=>{bR.current&&bx(bR.current.id,void 0,void 0,a)},[bx]),bY=Object.values(bp).some(a=>"running"===a.status||"evaluating"===a.status);(0,c.useEffect)(()=>{bu.current=bY},[bY]),(0,c.useEffect)(()=>{if(L&&J)return bt.current=setInterval(async()=>{if(!bu.current)return;let a=bR.current;if(a)try{let b=await (0,g.apiFetch)(`/api/debug/batch-tasks/${a.id}?user=${encodeURIComponent(J)}`);if(!b.ok)return;let c=await b.json();c.caseStatesJson&&bq(a=>{let b={...a};for(let[a,d]of Object.entries(c.caseStatesJson))br.current[a]||bs.current[a]||(b[a]=d);return b})}catch{}},15e3),()=>{bt.current&&(clearInterval(bt.current),bt.current=null)}},[L?.id,J]),(0,c.useEffect)(()=>()=>{let a=bR.current,b=bS.current,c=bT.current;a&&(Object.keys(b).length>0||Object.keys(c).length>0)&&bx(a.id,bU.current,b,c),Object.values(bs.current).forEach(clearInterval),bs.current={},bt.current&&(clearInterval(bt.current),bt.current=null)},[bx]);let bZ=async a=>{let b;br.current[a]&&(clearInterval(br.current[a]),delete br.current[a]);let c=bE.find(b=>b.id===a),d=c?.input||a;bR.current&&bx(bR.current.id,bU.current,void 0),bq(b=>({...b,[a]:{...b[a]||{},status:"running"}}));try{let c=await (0,g.apiFetch)("/api/debug/execute",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",query:d,skill:bP?.name,skillVersion:bQ?Number(bQ.version):void 0})}),e=await c.json();if(!c.ok||!e.jobId)return void bq(b=>{let c={...b,[a]:{status:"fail",output:e.error||"dispatch failed"}};return bW(c),c});b=e.jobId}catch(b){bq(c=>{let d={...c,[a]:{status:"fail",output:String(b)}};return bW(d),d});return}bq(c=>{let d={...c,[a]:{...c[a]||{},status:"running",jobId:b}};return bW(d),d});let e=async()=>{try{let c=await (0,g.apiFetch)(`/api/debug/execute/${b}`),d=await c.json();"completed"===d.status?(clearInterval(br.current[a]),delete br.current[a],bq(c=>{let e={...c,[a]:{status:"executed",jobId:b,output:d.output??"",timeCost:d.timeCost,tokenUsage:d.tokenUsage??0,sessionId:d.sessionId}};return bW(e),e})):("failed"===d.status||!d.status||d.error)&&(clearInterval(br.current[a]),delete br.current[a],bq(c=>{let e={...c,[a]:{status:"fail",jobId:b,output:d.error||"agent failed"}};return bW(e),e}))}catch{}};await e(),br.current[a]=setInterval(e,1e4)},b$=async a=>{let b;bR.current&&bx(bR.current.id,bU.current,void 0);let c=bS.current[a],d=c?.sessionId,e=bE.find(b=>b.id===a),f=e?.datasetId;if(!d||!f)return void bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:"缺少执行记录或数据集,无法评测(需先执行)"}};return bW(c),c});bs.current[a]&&(clearInterval(bs.current[a]),delete bs.current[a]),bq(b=>{let c={...b,[a]:{...b[a]||{},status:"evaluating"}};return bW(c),c});try{let c={user:J||"debug-user",datasetId:f,pairs:[{caseId:a,taskId:d}]};ap?c.evaluatorRunId=ap:c.evaluator=ax;let e=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)}),h=await e.json();if(!e.ok||!h.evaluatorRunId)return void bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:h.error||"评测提交失败"}};return bW(c),c});b=h.evaluatorRunId}catch(b){bq(c=>{let d={...c,[a]:{...c[a]||{},status:"fail",output:String(b)}};return bW(d),d});return}bq(c=>{let d={...c,[a]:{...c[a]||{},status:"evaluating",evaluatorRunId:b}};return bW(d),d});let h=async()=>{try{let c=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J||"")}&runId=${encodeURIComponent(b)}`),e=((await c.json()).results||[]).find(b=>b.caseId===a);if(!e)return;if("done"===e.status){clearInterval(bs.current[a]),delete bs.current[a];let b=e.trajectoryScore??0,c=Math.round(100*b),f=c>=60;bq(b=>{let d={...b,[a]:{...b[a]||{},status:f?"pass":"fail",score:c}};return bW(d),d}),K.push(`/eval/trajectory/${encodeURIComponent(d)}`)}else"failed"===e.status&&(clearInterval(bs.current[a]),delete bs.current[a],bq(b=>{let c={...b,[a]:{...b[a]||{},status:"fail",output:e.errorMessage||"轨迹评测失败"}};return bW(c),c}))}catch{}};await h(),bs.current[a]=setInterval(h,5e3)},b_=async()=>{let a=bn.filter(a=>{let b=bp[a]?.status;return!b||"pending"===b});await Promise.all(a.map(bZ))},b0=async()=>{let a=bn.filter(a=>bp[a]?.status==="executed");await Promise.all(a.map(b$))},b1=async()=>{if(!L||al)return;if(!ap)return void alert("zh"===I?"请先在上方「评测任务」新建或选择一个评测任务":"Create/select an eval task first");if(j&&af&&!ah)return void alert("zh"===I?"当前 Skill 版本无效,无法开始评测":"The selected Skill version is invalid");let a=bn.filter(a=>{var b;return b=bp[a],!b||!!b.evaluatorRunId&&b.evaluatorRunId!==ap||"pending"===b.status||"pass"===b.status||"fail"===b.status});if(0===a.length)return void alert("zh"===I?"没有待启动的 case(已勾选的都在执行或评测中)":"No cases to start");am(!0);try{await bx(L.id,bU.current);let b=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",action:"start",caseIds:a})}),c=await b.json().catch(()=>({}));if(!b.ok||!c.ok){am(!1),alert(("zh"===I?"启动失败: ":"Start failed: ")+(c.error||b.status));return}b6()}catch(a){am(!1),alert(String(a))}},b2=async()=>{if(L&&!al){if(0===aX.length)return void alert("zh"===I?"请先勾选要评测的 trace":"Select traces first");am(!0);try{let a=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",action:"evaluate",caseIds:aX})}),b=await a.json().catch(()=>({}));if(!a.ok||!b.ok){am(!1),alert(("zh"===I?"启动失败: ":"Start failed: ")+(b.error||a.status));return}b6()}catch(a){am(!1),alert(String(a))}}},b3=Object.values(bp).some(a=>a?.status==="running"||a?.status==="evaluating"||a?.status==="executed"),b4=async()=>{if(!L||!al&&!b3||!window.confirm("zh"===I?"确定终止? 将停止你当前所有在跑的执行与评测, 已 in-flight 的会标记为「用户终止」失败。":"Terminate all your running executions and evaluations?"))return;let a=J||"debug-user";try{let b=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,action:"abort"})}),c=await b.json().catch(()=>({}));if(!b.ok)return void alert(("zh"===I?"终止失败: ":"Abort failed: ")+(c.error||b.status));await (0,g.apiFetch)("/api/eval/terminate-all",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a})}).catch(()=>{})}catch(a){alert(String(a))}},b5=async(a,b)=>{if(L){bq(c=>({...c,[a]:{...c[a]||{status:"pending"},status:b?"evaluating":"running",output:void 0}}));try{let c=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",action:b?"retry-evaluate":"retry-execute",caseIds:[a]})}),d=await c.json().catch(()=>({}));if(!c.ok){let b=String(d.error||c.status);bq(c=>({...c,[a]:{...c[a]||{status:"pending"},status:"fail",output:b}})),alert(("zh"===I?"重试失败: ":"Retry failed: ")+b);return}am(!0),b6()}catch(c){let b=String(c);bq(c=>({...c,[a]:{...c[a]||{status:"pending"},status:"fail",output:b}})),alert(b)}}},b6=()=>{if(!L)return;an.current&&clearInterval(an.current);let a=0,b=async()=>{a++;try{let a=await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}?user=${encodeURIComponent(J||"")}`),b=await a.json().catch(()=>({}));if(b?.caseStatesJson&&"object"==typeof b.caseStatesJson){let a=b.caseStatesJson;if(bq(a),(ao.current.length>0?ao.current:Object.keys(a)).every(b=>{let c=a[b]?.status;return"pass"===c||"fail"===c})){an.current&&clearInterval(an.current),an.current=null,am(!1);return}}}catch{}a>=600&&(an.current&&clearInterval(an.current),an.current=null,am(!1))};b(),an.current=setInterval(b,3e3)},b7=async a=>{let b,c=a.task_id;if(!c)return;bR.current&&bx(bR.current.id,bU.current,void 0);let d=a.upload_id||c;aW(a=>{let b={...a,[d]:{status:"evaluating",taskId:c}};return bX(b),b});try{let a={user:J||"debug-user",datasetId:aP,taskIds:[c]};ap?a.evaluatorRunId=ap:a.evaluator=ax;let e=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),f=await e.json();if(!e.ok||!f.evaluatorRunId)return void aW(a=>{let b={...a,[d]:{status:"fail",taskId:c}};return bX(b),b});b=f.evaluatorRunId}catch{aW(a=>{let b={...a,[d]:{status:"fail",taskId:c}};return bX(b),b});return}aW(a=>{let e={...a,[d]:{status:"evaluating",evaluatorRunId:b,taskId:c}};return bX(e),e});let e=async()=>{try{let a=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(J||"")}&runId=${encodeURIComponent(b)}`),e=((await a.json()).results||[]).find(a=>a.taskId===c);if(!e)return;if("done"===e.status){clearInterval(bs.current[`tr_${d}`]),delete bs.current[`tr_${d}`];let a=Math.round((e.trajectoryScore??0)*100);aW(e=>{let f={...e,[d]:{status:"done",score:a,evaluatorRunId:b,taskId:c}};return bX(f),f}),K.push(`/eval/trajectory/${encodeURIComponent(c)}`)}else"failed"===e.status&&(clearInterval(bs.current[`tr_${d}`]),delete bs.current[`tr_${d}`],aW(a=>{let b={...a,[d]:{status:"fail",taskId:c}};return bX(b),b}))}catch{}};await e(),bs.current[`tr_${d}`]=setInterval(e,5e3)},b8=async()=>{let a=aX.map(a=>aR.find(b=>(b.upload_id||b.task_id)===a)).filter(a=>!!a&&!aV[a.upload_id||a.task_id]?.status.match(/evaluating|done/));await Promise.all(a.map(b7))},b9=bH.length>0&&bH.every(a=>bn.includes(a.id)),ca=!!L&&!P,cb="trace"===aH?_.find(a=>a.id===aL)?.name||"未选 Skill":0===ad.length?"未选数据集":1===ad.length?Z.find(a=>a.id===ad[0])?.name||"未选数据集":`${ad.length} 个数据集`;[...E,...av].find(a=>a.id===ax)?.name;let cc="trace"===aH?aR.length:bE.length,cd=bK>0?Math.round(bM/bK*100):0,ce=bE.map(a=>bp[a.id]).filter(a=>null!=a&&("pass"===a.status||"fail"===a.status)).filter(a=>"number"==typeof a.score),cf=ap?Array.from(aG.values()).map(a=>({r:a.resultScore,t:a.trajScore})).filter(a=>"number"==typeof a.r&&"number"==typeof a.t):null,cg=cf?cf.length>0?Math.round(cf.reduce((a,b)=>a+(b.r+b.t)/2,0)/cf.length):null:ce.length>0?Math.round(ce.reduce((a,b)=>a+(b.score||0),0)/ce.length):null,ch=null==cg?"warn":cg>=80?"good":cg>=60?"warn":"bad";return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(s.SectionShell,{num:1,variant:"config",title:"配置",desc:"任务管理 + 数据集 / Skill / 评测器 + 全部用例列表(含未执行 / 已评测)",open:a9,onToggle:()=>ba(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"当前任务"}),(0,b.jsx)("code",{children:L?.taskName||"未保存"}),(0,b.jsxs)("span",{children:["· ",(0,b.jsx)("code",{children:cb})]}),(0,b.jsxs)("span",{children:["· skill ",(0,b.jsxs)("code",{children:[bP?.name||"未选",bQ?` ${bQ.semanticVersion||`v${bQ.version}`}`:""]})]}),(0,b.jsxs)("span",{children:["· 共 ",(0,b.jsx)("b",{children:cc})," 用例"]})]}),actions:j?i:L&&!P?(0,b.jsx)(v,{locale:I,tasks:aD,selectedRunId:ap,selectedTitle:ar,onSelect:bz,onCreateNew:()=>ak(!0)}):(0,b.jsxs)("span",{title:"zh"===I?"请先保存评测任务名称":"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"===I?"请先保存任务":"Save task first"]}),children:[h,!j&&(0,b.jsx)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"4px 0 10px",fontSize:12.5,flexWrap:"wrap"},children:P?(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,flex:1},children:[(0,b.jsx)("input",{className:"task-inline-input",value:R,onChange:a=>S(a.target.value),onKeyDown:a=>{"Enter"!==a.key||a.nativeEvent.isComposing||bA(),"Escape"===a.key&&L&&(Q(!1),S(""))},placeholder:"zh"===I?"请输入调试任务名称…":"Enter task name…",autoFocus:!0,style:{maxWidth:280}}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:bA,disabled:!R.trim()||X,children:X?"zh"===I?"保存中…":"Saving…":"zh"===I?"保存":"Save"}),L&&(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>{Q(!1),S("")},children:"zh"===I?"取消":"Cancel"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{style:{color:"var(--ink-3)"},children:"zh"===I?"调试任务:":"Debug task:"}),(0,b.jsx)("b",{style:{color:"var(--ink-1, #18181B)",maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:L?.taskName||"—"}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:()=>a4(!0),title:"zh"===I?"切换历史调试任务":"Switch task",style:{padding:"2px 8px"},children:[(0,b.jsxs)("svg",{width:"10",height:"10",viewBox:"0 0 11 11",fill:"none",style:{marginRight:3},children:[(0,b.jsx)("circle",{cx:"5.5",cy:"5.5",r:"4.5",stroke:"currentColor",strokeWidth:"1.4"}),(0,b.jsx)("path",{d:"M5.5 3v2.5l1.8 1.8",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})]}),"zh"===I?"历史":"History"]}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:bB,style:{padding:"2px 8px"},children:["+ ","zh"===I?"新建":"New"]})]})}),!j&&(0,b.jsxs)("div",{className:`config-bar ${!ca?"config-bar-locked":""}`,children:[!ca&&(0,b.jsxs)("div",{className:"config-bar-lock-tip",style:{cursor:"default"},children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:[(0,b.jsx)("rect",{x:"2",y:"5",width:"8",height:"6",rx:"1.2",stroke:"currentColor",strokeWidth:"1.2"}),(0,b.jsx)("path",{d:"M4 5V3.5a2 2 0 114 0V5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]}),"zh"===I?P?"请先保存评测名称":"请先新建评测任务":P?"Save task name first":"Create a task first"]}),(0,b.jsx)("div",{className:"config-bar-filters",children:!j&&"dataset"===aH&&(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10,flex:1,minWidth:0},children:[(0,b.jsx)(u,{label:"zh"===I?"数据集":"Dataset",placeholder:"zh"===I?"选择数据集(可多选)":"Select datasets",emptyHint:"zh"===I?"暂无数据集(可在数据集中心创建)":"No datasets",accent:"#2563eb",disabled:!ca,options:Z.map(a=>({id:a.id,name:a.name,meta:`${a.cases?.length||0} ${"zh"===I?"例":"cases"}`})),selectedIds:ad,onChange:a=>ae(a)}),(0,b.jsx)(u,{label:"zh"===I?"评估器":"Evaluators",placeholder:"zh"===I?"选择评估器(可多选)":"Select evaluators",emptyHint:"zh"===I?"暂无评估器":"No evaluators",accent:"#7E22CE",disabled:!ca,options:[...E,...av].map(a=>({id:a.id,name:a.name})),selectedIds:az,onChange:a=>aA(a)})]})})]}),(0,b.jsxs)("div",{className:"work-table-card",children:[(0,b.jsxs)("div",{className:"table-toolbar",children:[(0,b.jsxs)("div",{className:"table-toolbar-left",children:["dataset"===aH?(0,b.jsxs)("label",{className:"select-all-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:b9,onChange:()=>{b9?bo(a=>a.filter(a=>!bH.find(b=>b.id===a))):bo(a=>[...new Set([...a,...bH.map(a=>a.id)])])}}),(0,b.jsx)("span",{className:"checkbox-mark"})]}):(0,b.jsxs)("label",{className:"select-all-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:aX.length===aR.length&&aR.length>0,onChange:()=>{let a=aR.map(a=>a.upload_id||a.task_id||"").filter(Boolean);aY(b=>b.length===a.length?[]:a)}}),(0,b.jsx)("span",{className:"checkbox-mark"})]}),(0,b.jsx)("span",{className:"toolbar-status",children:"dataset"===aH?bn.length>0?"zh"===I?`已选 ${bn.length} 条`:`${bn.length} selected`:"zh"===I?`共 ${bE.length} 条用例`:`${bE.length} cases`:aX.length>0?"zh"===I?`已选 ${aX.length} 条`:`${aX.length} selected`:"zh"===I?`共 ${aR.length} 条执行链路`:`${aR.length} traces`}),!j&&"dataset"===aH&&bn.length>0&&(0,b.jsxs)("div",{className:"bulk-actions",children:[(0,b.jsx)("div",{className:"bulk-divider"}),L?.configJson?.evaluationBatchId&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("button",{type:"button",onClick:b1,disabled:al,title:"zh"===I?"一键启动: 执行 + 自动评测, append 到当前评测任务":"One-click: execute + auto-eval, append to linked task",style:{padding:"4px 10px",background:al?"#A5A0E4":"#4F46E5",border:"1px solid "+(al?"#A5A0E4":"#4F46E5"),borderRadius:5,fontSize:12,fontWeight:600,color:"#fff",cursor:al?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"currentColor",children:(0,b.jsx)("path",{d:"M2.5 1.5l5.5 3.5-5.5 3.5V1.5z"})}),al?"zh"===I?"启动中...":"Starting...":"zh"===I?"▶ 启动":"▶ Start"]}),al&&(0,b.jsxs)("button",{type:"button",onClick:b4,title:"zh"===I?"终止当前批量执行":"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"===I?"终止":"Abort"]}),al&&(y=(x=Object.keys(bp)).filter(a=>bp[a]?.status==="pass").length,A=x.filter(a=>bp[a]?.status==="fail").length,C=x.filter(a=>{let b=bp[a]?.status;return"running"===b||"evaluating"===b||"executed"===b}).length,(0,b.jsxs)("span",{style:{fontSize:11.5,color:"var(--ink-2)",display:"inline-flex",alignItems:"center",gap:8,marginLeft:4},children:[(0,b.jsxs)("span",{children:["共 ",(0,b.jsx)("b",{children:x.length})]}),(0,b.jsxs)("span",{style:{color:"var(--success)"},children:["✓ ",y]}),A>0&&(0,b.jsxs)("span",{style:{color:"var(--danger)"},children:["✗ ",A]}),C>0&&(0,b.jsxs)("span",{style:{color:"#2563EB"},children:["⏳ ",C]})]}))]}),(0,b.jsxs)("button",{className:"d-btn sm dark",onClick:b_,children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M2.5 1.5l5.5 3.5-5.5 3.5V1.5z",fill:"currentColor"})}),"zh"===I?"批量执行 (旧)":"Batch Execute (legacy)"]}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:b0,children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),"zh"===I?"批量评测 (旧)":"Batch Evaluate (legacy)"]})]}),"trace"===aH&&aX.length>0&&(0,b.jsxs)("div",{className:"bulk-actions",children:[(0,b.jsx)("div",{className:"bulk-divider"}),L?.configJson?.evaluationBatchId&&(0,b.jsxs)("button",{type:"button",onClick:b2,disabled:al,title:"zh"===I?"一键启动: 评测已选 trace, append 到当前评测任务":"One-click: evaluate selected traces",style:{padding:"4px 10px",background:al?"#A5A0E4":"#4F46E5",border:"1px solid "+(al?"#A5A0E4":"#4F46E5"),borderRadius:5,fontSize:12,fontWeight:600,color:"#fff",cursor:al?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),al?"zh"===I?"启动中...":"Starting...":"zh"===I?"▶ 启动评测":"▶ Start Eval"]}),al&&(0,b.jsxs)("button",{type:"button",onClick:b4,style:{padding:"4px 10px",background:"#fff",border:"1px solid #DC2626",borderRadius:5,fontSize:12,fontWeight:600,color:"#DC2626",cursor:"pointer"},children:["⏹ ","zh"===I?"终止":"Abort"]}),(0,b.jsxs)("button",{className:"d-btn sm",onClick:b8,children:[(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1.5 5L4 7.5 8.5 2.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})}),"zh"===I?"批量评测 (旧)":"Batch Evaluate (legacy)"]})]})]}),(0,b.jsxs)("div",{className:"table-toolbar-right",children:["dataset"===aH&&(al||b3)&&(0,b.jsxs)("button",{type:"button",onClick:b4,title:"zh"===I?"终止当前批量执行,并清除卡住的运行状态/锁":"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"===I?"终止":"Abort"]}),!j&&"dataset"===aH&&(0,b.jsxs)("div",{className:"filter-group",children:[(0,b.jsxs)("button",{className:`filter-btn ${"all"===bj?"active":""}`,onClick:()=>bk("all"),children:["zh"===I?"全部":"All"," ",(0,b.jsx)("span",{className:"filter-count",children:bE.length})]}),(0,b.jsxs)("button",{className:`filter-btn ${"pending"===bj?"active":""}`,onClick:()=>bk("pending"),children:["zh"===I?"未执行":"Pending"," ",(0,b.jsx)("span",{className:"filter-count",children:bI})]}),(0,b.jsxs)("button",{className:`filter-btn ${"executed"===bj?"active":""}`,onClick:()=>bk("executed"),children:["zh"===I?"待评测":"Executed"," ",(0,b.jsx)("span",{className:"filter-count",children:bJ})]}),(0,b.jsxs)("button",{className:`filter-btn ${"evaluated"===bj?"active":""}`,onClick:()=>bk("evaluated"),children:["zh"===I?"已评测":"Evaluated"," ",(0,b.jsx)("span",{className:"filter-count",children:bK})]}),bL>0&&(0,b.jsxs)("button",{className:`filter-btn ${"failed"===bj?"active":""}`,onClick:()=>bk("failed"),children:["zh"===I?"失败":"Failed",(0,b.jsx)("span",{className:"filter-count",style:{color:"failed"===bj?void 0:"var(--danger)"},children:bL})]})]}),(0,b.jsx)("input",{className:"table-search",placeholder:"zh"===I?"搜索用例…":"Search cases…",value:bl,onChange:a=>bm(a.target.value)})]})]}),(0,b.jsx)("div",{className:"work-table-wrapper",children:(0,b.jsxs)("table",{className:"work-table",children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{children:[(0,b.jsx)("th",{style:{width:36,paddingRight:0}}),(0,b.jsx)("th",{style:{width:44},children:"#"}),(0,b.jsx)("th",{children:"zh"===I?"trace"===aH?"用户输入 / Trace":"测试用例":"trace"===aH?"Input / Trace":"Test Case"}),(0,b.jsx)("th",{style:{width:110},children:"zh"===I?"trace"===aH?"来源 Skill":"数据集":"trace"===aH?"Skill":"Dataset"}),!j&&"dataset"===aH&&(0,b.jsx)("th",{style:{width:100},children:"zh"===I?"状态":"Status"}),!j&&(0,b.jsx)("th",{style:{width:70},children:"zh"===I?"分数":"Score"}),"trace"===aH&&(0,b.jsx)("th",{style:{width:70},children:"zh"===I?"耗时":"Time"}),!j&&(0,b.jsx)("th",{style:{width:80},children:"Trace"})]})}),(0,b.jsxs)("tbody",{children:["trace"===aH&&(aT?(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:6,children:(0,b.jsxs)("div",{className:"d-empty",children:[(0,b.jsx)("span",{className:"spinner",style:{width:16,height:16,borderWidth:2}}),"zh"===I?" 加载中…":" Loading…"]})})}):0===aR.length?(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:6,children:(0,b.jsxs)("div",{className:"d-empty",children:[(0,b.jsx)("div",{className:"d-empty-icon",children:(0,b.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,b.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"===I?aL?"该 Skill 在所选时间内暂无执行链路":"请在上方选择 Skill 以加载执行链路":aL?"No traces found for this Skill in the selected time range":"Select a Skill above to load its execution traces"]})})}):aR.filter(a=>!bl||a.query?.toLowerCase().includes(bl.toLowerCase())).map((a,c)=>{let d,e=a.upload_id||a.task_id||`trace_${c}`,f=aV[e];f?.status,f?.status,f?.status;let g=(()=>{try{let b="string"==typeof a.skills?JSON.parse(a.skills):a.skills;return Array.isArray(b)?b.map(a=>"string"==typeof a?a:a?.name||"").filter(Boolean):[]}catch{return[]}})();return(0,b.jsxs)("tr",{children:[(0,b.jsx)("td",{style:{paddingRight:0},children:(0,b.jsxs)("label",{className:"row-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:aX.includes(e),onChange:()=>aY(a=>a.includes(e)?a.filter(a=>a!==e):[...a,e])}),(0,b.jsx)("span",{className:"checkbox-mark"})]})}),(0,b.jsx)("td",{className:"num-col",children:String(c+1).padStart(3,"0")}),(0,b.jsxs)("td",{style:{overflow:"hidden"},children:[(0,b.jsx)("div",{className:"case-cell-title",children:(0,b.jsx)(D,{text:a.query||a.task_id||"-"})}),(0,b.jsxs)("div",{className:"case-cell-meta",children:[a.task_id&&(0,b.jsxs)("span",{style:{fontFamily:"var(--font-mono)",fontSize:10.5},children:[a.task_id.slice(0,16),"…"]}),a.timestamp&&(0,b.jsxs)(b.Fragment,{children:[" · ",new Date(Number(a.timestamp)||a.timestamp).toLocaleString("zh"===I?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})]})]})]}),(0,b.jsx)("td",{children:g.length>0?g.map(a=>(0,b.jsx)("span",{className:"tag tag-blue",style:{fontSize:10,marginRight:2},children:a.slice(0,12)},a)):(0,b.jsx)("span",{style:{color:"var(--ink-4)",fontSize:11},children:"—"})}),(0,b.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:12,fontWeight:600},children:"number"==typeof(d="number"==typeof f?.score?f.score:"number"==typeof bp[a.task_id||""]?.score?bp[a.task_id||""].score:null)?(0,b.jsx)("span",{style:{color:d>=80?"var(--success)":d>=60?"var(--warn, #D97706)":"var(--danger)"},children:d}):(0,b.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)"},children:"—"})}),(0,b.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--ink-2)"},children:a.timeCost||"—"}),(0,b.jsx)("td",{children:(0,b.jsx)("button",{className:"row-more",title:"zh"===I?"查看 Trace":"View trace",onClick:()=>a.task_id&&K.push(`/trace?taskId=${encodeURIComponent(a.task_id)}`),children:"→"})})]},e)})),"dataset"===aH&&(0===bH.length?(0,b.jsx)("tr",{children:(0,b.jsx)("td",{colSpan:j?4:7,children:(0,b.jsxs)("div",{className:"d-empty",children:[(0,b.jsx)("div",{className:"d-empty-icon",children:(0,b.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:(0,b.jsx)("path",{d:"M9 3v12M3 9h12",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})}),0===bE.length?"zh"===I?"请在上方配置栏选择数据集":"Select datasets in the config bar above":"zh"===I?"无匹配用例":"No matching cases"]})})}):bH.map((a,c)=>{let d=bp[a.id],e=d?.status||"pending";return(0,b.jsxs)("tr",{className:j||"fail"!==e?"":"row-fail",children:[(0,b.jsx)("td",{style:{paddingRight:0},children:(0,b.jsxs)("label",{className:"row-checkbox",children:[(0,b.jsx)("input",{type:"checkbox",checked:bn.includes(a.id),onChange:()=>{var b;return b=a.id,void bo(a=>a.includes(b)?a.filter(a=>a!==b):[...a,b])}}),(0,b.jsx)("span",{className:"checkbox-mark"})]})}),(0,b.jsx)("td",{className:"num-col",children:String(c+1).padStart(3,"0")}),(0,b.jsxs)("td",{style:{overflow:"hidden"},children:[(0,b.jsx)("div",{className:"case-cell-title",children:(0,b.jsx)(D,{text:a.input||a.id})}),(0,b.jsxs)("div",{className:"case-cell-meta",children:[a.isMock?"zh"===I?"模拟用例":"Mock case":`${a.datasetName}`,!j&&d?.timeCost&&` \xb7 ${d.timeCost}`,!j&&d?.tokenUsage&&` \xb7 ${d.tokenUsage} tok`]})]}),(0,b.jsx)("td",{children:(0,b.jsx)("span",{className:"tag tag-blue",style:{fontSize:10},children:a.datasetName?.slice(0,8)||"-"})}),!j&&(0,b.jsx)("td",{children:(0,b.jsx)("span",{className:`row-status ${e}`,children:{pending:"zh"===I?"○ 未执行":"○ Pending",running:"zh"===I?"⌛ 执行中":"⌛ Running",executed:"zh"===I?"● 待评测":"● Executed",evaluating:"zh"===I?"◷ 评测中":"◷ Evaluating",pass:"zh"===I?"✓ 已评测":"✓ Evaluated",fail:"zh"===I?"✗ 失败":"✗ Failed"}["running"===e?"running":e]})}),!j&&(0,b.jsx)("td",{style:{fontFamily:"var(--font-mono)",fontSize:12,fontWeight:600},children:"number"==typeof d?.score?(0,b.jsx)("span",{style:{color:d.score>=80?"var(--success)":d.score>=60?"var(--warn, #D97706)":"var(--danger)"},children:d.score}):(0,b.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)"},children:"—"})}),!j&&(0,b.jsx)("td",{children:d?.sessionId?(0,b.jsx)("button",{className:"row-more",title:"zh"===I?"查看 Trace":"View trace",onClick:()=>K.push(`/trace?taskId=${encodeURIComponent(d.sessionId)}`),children:"→"}):(0,b.jsx)("span",{style:{color:"var(--ink-4, #B8B6AE)",fontSize:11},children:"—"})})]},a.id)}))]})]})}),(0,b.jsxs)("div",{className:"table-footer",children:[(0,b.jsx)("div",{className:"table-footer-summary",children:"trace"===aH?(0,b.jsxs)(b.Fragment,{children:["zh"===I?"共":"Total"," ",(0,b.jsx)("b",{children:aR.length})," ","zh"===I?"条执行链路":"traces"]}):(0,b.jsxs)(b.Fragment,{children:["zh"===I?"共":"Total"," ",(0,b.jsx)("b",{children:bE.length})," ","zh"===I?"条用例":"cases",!j&&bM>0&&(0,b.jsx)("span",{style:{marginLeft:10,color:"var(--success)",fontWeight:600},children:"zh"===I?`通过 ${bM}`:`Passed ${bM}`}),!j&&bL>0&&(0,b.jsx)("span",{style:{marginLeft:8,color:"var(--danger)",fontWeight:600},children:"zh"===I?`失败 ${bL}`:`Failed ${bL}`})]})}),!j&&"dataset"===aH&&(0,b.jsxs)("div",{className:"table-footer-progress",children:[(0,b.jsx)("span",{className:"progress-mini-label",children:"zh"===I?`已评测 ${bK} / ${bE.length}`:`Evaluated ${bK} / ${bE.length}`}),(0,b.jsx)("div",{className:"progress-mini-bar",children:(0,b.jsx)("div",{className:"progress-mini-fill",style:{width:`${bO}%`}})}),(0,b.jsxs)("span",{className:"progress-mini-pct",children:[bO,"%"]})]}),"trace"===aH&&(F=Object.values(aV).filter(a=>"done"===a.status).length,H=aR.length>0?Math.round(F/aR.length*100):0,(0,b.jsxs)("div",{className:"table-footer-progress",children:[(0,b.jsx)("span",{className:"progress-mini-label",children:"zh"===I?`已评测 ${F} / ${aR.length}`:`Evaluated ${F} / ${aR.length}`}),(0,b.jsx)("div",{className:"progress-mini-bar",children:(0,b.jsx)("div",{className:"progress-mini-fill",style:{width:`${H}%`}})}),(0,b.jsxs)("span",{className:"progress-mini-pct",children:[H,"%"]})]}))]})]}),j&&(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:14,paddingTop:14,borderTop:"1px solid var(--ev-line, #e5e7eb)",flexWrap:"wrap"},children:[(0,b.jsx)("button",{type:"button",onClick:b1,disabled:al||0===bn.length||!L||!ap,style:{padding:"9px 22px",background:!al&&0!==bn.length&&L&&ap?"#4F46E5":"#A5A0E4",color:"#fff",border:"none",borderRadius:6,fontSize:14,fontWeight:700,cursor:!al&&0!==bn.length&&L&&ap?"pointer":"not-allowed"},title:ap?0===bn.length?"请先在上方勾选 case":"先执行选中 case 生成 Trace, 再开始评测":'请先在上方"评测任务"里新建或选择一个评测任务',children:al?"zh"===I?"评测中…":"Evaluating…":bn.length>0?`▶ ${"zh"===I?"开始评测":"Start eval"}(${bn.length})`:`▶ ${"zh"===I?"开始评测":"Start eval"}`}),al&&(0,b.jsxs)("button",{type:"button",onClick:b4,style:{padding:"7px 14px",background:"#fff",border:"1px solid #DC2626",borderRadius:6,fontSize:12.5,fontWeight:600,color:"#DC2626",cursor:"pointer"},children:["⏹ ","zh"===I?"终止":"Abort"]}),(0,b.jsx)("span",{style:{fontSize:15,fontWeight:700,color:ap?"#2563EB":"#EA580C"},children:ap?"zh"===I?"勾选 case 后开始评测:先执行生成 Trace 再评测;进度见 ② 评测执行":"Select cases → execute to generate traces → evaluate; progress in ②":"zh"===I?"请先在上方「评测任务」新建或选择一个任务,再开始评测":"Create/select an eval task above first"})]})]}),!t&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s.SectionShell,{num:2,variant:"exec",title:"评测执行",desc:"已启动的 case:执行 session id 跳链路追踪、评测结果跳评测任务详情;实时进度,点行钻取 ③",open:bb,onToggle:()=>bc(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"已评测"}),(0,b.jsxs)("code",{children:[bK," / ",bE.length]}),bK>0&&(0,b.jsxs)("span",{children:["· 通过率 ",(0,b.jsxs)("b",{style:{color:cd>=80?"var(--ev-success)":cd>=60?"var(--ev-warning)":"var(--ev-error)"},children:[cd,"%"]})]})]}),children:(0,b.jsx)(z,{locale:I,emptyHint:"还没启动评测。在 ① 配置块勾选 case → 点「▶ 启动」。",onRetry:a=>b5(a.id,!1),onDelete:async a=>{let b=bp[a.id]?.status;if("running"===b||"executed"===b||"evaluating"===b)return void alert("zh"===I?"评测/执行进行中,无法删除":"In progress, cannot delete");let c={...bp};if(delete c[a.id],bq(c),L)try{await (0,g.apiFetch)(`/api/debug/batch-tasks/${L.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:J||"debug-user",caseStatesJson:c})})}catch{}},onRowClick:()=>{be(!0),requestAnimationFrame(()=>{document.querySelector("[data-result-section]")?.scrollIntoView({behavior:"smooth",block:"start"})})},records:bE.filter(a=>{let b=bp[a.id]?.status;return b&&"pending"!==b}).map(a=>{let b=bp[a.id],c=b?.status,d="running"===c?"executing":"executed"===c?"executed":"evaluating"===c?"evaluating":"pass"===c?"done":"fail"===c?"failed":"pending",e=("pass"===c||"fail"===c)&&b?.sessionId?aG.get(b.sessionId):void 0;return{id:a.id,caseLabel:String(a.input||a.id),caseTitle:a.input||a.id,executionTraceId:b?.sessionId||void 0,evaluationTraceId:e?.evaluationTraceId,resultEvalTraceId:e?.resultEvalTraceId,trajEvalTraceId:e?.trajEvalTraceId,evaluatorRunId:b?.evaluatorRunId||ap||void 0,resultId:e?.resultId,datasetId:a.datasetId||e?.datasetId||void 0,status:d,resultScore:e?.resultScore??null,trajScore:e?.trajScore??null,errorMsg:b?.output||void 0}})})}),(0,b.jsx)(s.SectionShell,{num:3,variant:"result",title:"分析结果",desc:bK>0?`已评测 ${bK} / ${bE.length} 用例 \xb7 当前任务 ${L?.taskName||""}`:"尚未评测",open:bd,onToggle:()=>be(a=>!a),summary:bK>0&&null!=cg?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"总评分"}),(0,b.jsxs)("code",{className:`score-${ch}`,children:[cg," 分"]}),(0,b.jsxs)("span",{children:["· 通过 ",(0,b.jsx)("b",{children:bM})," / ",(0,b.jsx)("b",{children:bK})]})]}):(0,b.jsx)("span",{style:{color:"var(--ev-muted)"},children:"未评测"}),children:(0,b.jsx)(G,{allCases:bE,caseStates:bp,avgScore:cg,scoreColorKlass:ch,evaluatedCount:bK,passCount:bM,failedCount:bL,pendingCount:bI,evaluatingCount:bN,onDrillTrace:a=>K.push(`/eval/trajectory/${a}`)})})]}),aZ&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a$(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择评测数据集":"Select Datasets"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a$(!1),children:"×"})]}),(0,b.jsx)("div",{className:"d-modal-body",children:0===Z.length?(0,b.jsx)("div",{className:"d-empty",children:"zh"===I?"暂无数据集,请先创建":"No datasets found. Create one first."}):(0,b.jsx)("div",{className:"dataset-grid",children:Z.map(a=>(0,b.jsxs)("div",{className:`dataset-card ${ad.includes(a.id)?"selected":""}`,onClick:()=>ae(b=>b.includes(a.id)?b.filter(b=>b!==a.id):[...b,a.id]),children:[(0,b.jsx)("input",{type:"checkbox",readOnly:!0,checked:ad.includes(a.id)}),(0,b.jsxs)("div",{className:"dataset-card-body",children:[(0,b.jsx)("div",{className:"dataset-name",children:a.name}),(0,b.jsxs)("div",{className:"dataset-stats",children:[(0,b.jsx)("b",{children:a.cases?.length||0})," ","zh"===I?"条用例":"cases"]})]})]},a.id))})}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsxs)("button",{className:"d-btn sm",onClick:()=>{a$(!1),K.push("/dataset")},children:["+ ","zh"===I?"新建数据集":"New Dataset"]}),(0,b.jsxs)("button",{className:"d-btn sm primary",onClick:()=>a$(!1),children:["zh"===I?"确定":"Confirm"," (",ad.length,")"]})]})]})}),a_&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a0(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择 Skill 和版本":"Select Skill & Version"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a0(!1),children:"×"})]}),(0,b.jsxs)("div",{className:"d-modal-body",children:[(0,b.jsxs)("div",{className:"gray-field",style:{marginBottom:16},children:[(0,b.jsx)("div",{className:"gray-field-label",children:"Skill"}),(0,b.jsxs)("select",{className:"gray-select",value:af,onChange:a=>ag(a.target.value),children:[(0,b.jsx)("option",{value:"",children:"zh"===I?"-- 请选择 Skill --":"-- Select Skill --"}),_.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]})]}),af&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"gray-field-label",style:{marginBottom:10},children:"zh"===I?"版本":"Version"}),ab.map(a=>(0,b.jsxs)("div",{className:`skill-version-row ${ah===a.id?"selected":""}`,onClick:()=>ai(a.id),children:[(0,b.jsx)("div",{className:"skill-version-radio"}),(0,b.jsxs)("div",{className:"skill-version-info",children:[(0,b.jsxs)("div",{className:"skill-version-name",children:[a.semanticVersion||`v${a.version}`,a.isCurrent&&(0,b.jsx)("span",{className:"tag tag-green",style:{fontSize:9},children:"Current"})]}),(0,b.jsxs)("div",{className:"skill-version-meta",children:["version ",a.version]})]})]},a.id)),0===ab.length&&(0,b.jsx)("div",{className:"d-empty",style:{padding:"20px 0"},children:"zh"===I?"暂无版本":"No versions found"})]})]}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>a0(!1),children:"zh"===I?"取消":"Cancel"}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:()=>a0(!1),children:"zh"===I?"确定":"Confirm"})]})]})}),a7&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a8(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择 Skill":"Select Skill"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a8(!1),children:"×"})]}),(0,b.jsx)("div",{className:"d-modal-body",children:0===_.length?(0,b.jsx)("div",{className:"d-empty",children:"zh"===I?"暂无 Skill,请先创建":"No skills found. Create one first."}):(0,b.jsx)("div",{className:"dataset-grid",children:_.map(a=>(0,b.jsxs)("div",{className:`dataset-card ${aL===a.id?"selected":""}`,onClick:()=>aM(a.id),children:[(0,b.jsx)("input",{type:"radio",readOnly:!0,checked:aL===a.id}),(0,b.jsxs)("div",{className:"dataset-card-body",children:[(0,b.jsx)("div",{className:"dataset-name",children:a.name}),(0,b.jsx)("div",{className:"dataset-stats",children:"zh"===I?"点击选择后查看关联执行链路":"Select to view associated traces"})]})]},a.id))})}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>a8(!1),children:"zh"===I?"取消":"Cancel"}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:()=>a8(!1),disabled:!aL,children:"zh"===I?"确定":"Confirm"})]})]})}),a5&&(0,b.jsx)("div",{className:"d-modal-mask",onClick:()=>a6(!1),children:(0,b.jsxs)("div",{className:"d-modal",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"d-modal-head",children:[(0,b.jsx)("div",{className:"d-modal-title",children:"zh"===I?"选择评测集(轨迹数据集)":"Select Eval Dataset (Trajectory)"}),(0,b.jsx)("button",{className:"d-modal-close",onClick:()=>a6(!1),children:"×"})]}),(0,b.jsxs)("div",{className:"d-modal-body",children:[(0,b.jsx)("div",{style:{fontSize:12,color:"var(--ink-3)",marginBottom:12,padding:"8px 10px",background:"var(--bg-soft)",borderRadius:6},children:"zh"===I?"评测集用于提供参考答案和评测标准。评测时系统会将 trace 输入与数据集 case 自动匹配。":"The eval dataset provides reference answers. The system auto-matches trace inputs to dataset cases during evaluation."}),0===Z.length?(0,b.jsx)("div",{className:"d-empty",children:"zh"===I?"暂无数据集":"No datasets found"}):(0,b.jsx)("div",{className:"dataset-grid",children:Z.map(a=>(0,b.jsxs)("div",{className:`dataset-card ${aP===a.id?"selected":""}`,onClick:()=>aQ(a.id),children:[(0,b.jsx)("input",{type:"radio",readOnly:!0,checked:aP===a.id}),(0,b.jsxs)("div",{className:"dataset-card-body",children:[(0,b.jsx)("div",{className:"dataset-name",children:a.name}),(0,b.jsxs)("div",{className:"dataset-stats",children:[(0,b.jsx)("b",{children:a.cases?.length||0})," ","zh"===I?"条用例":"cases"]})]})]},a.id))})]}),(0,b.jsxs)("div",{className:"d-modal-foot",children:[(0,b.jsx)("button",{className:"d-btn sm",onClick:()=>a6(!1),children:"zh"===I?"取消":"Cancel"}),(0,b.jsx)("button",{className:"d-btn sm primary",onClick:()=>a6(!1),disabled:!aP,children:"zh"===I?"确定":"Confirm"})]})]})}),a3&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"d-drawer-mask",onClick:()=>a4(!1)}),(0,b.jsx)("div",{className:"d-history-drawer",children:(0,b.jsxs)("div",{className:"d-history-panel",children:[(0,b.jsxs)("div",{className:"d-history-head",children:[(0,b.jsxs)("div",{className:"d-history-head-title",children:[(0,b.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none",children:[(0,b.jsx)("circle",{cx:"6.5",cy:"6.5",r:"5.5",stroke:"currentColor",strokeWidth:"1.4"}),(0,b.jsx)("path",{d:"M6.5 3.5v3l2 2",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})]}),"zh"===I?"历史任务":"Task History",(0,b.jsxs)("span",{style:{fontWeight:400,color:"var(--ink-4)",fontSize:11},children:[N.length,"zh"===I?" 条":""]})]}),(0,b.jsx)("button",{className:"d-drawer-close",onClick:()=>a4(!1),children:(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M1 1l8 8M9 1l-8 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]}),(0,b.jsx)("div",{className:"d-history-body",children:0===N.length?(0,b.jsx)("div",{style:{padding:"32px 16px",textAlign:"center",color:"var(--ink-4)",fontSize:12},children:"zh"===I?"暂无历史任务":"No task history"}):N.slice().reverse().map(a=>(0,b.jsxs)("div",{className:"d-history-item",style:L?.id===a.id?{borderColor:"var(--accent)",background:"var(--accent-soft)"}:{},onClick:()=>{let b;M(a),Q(!1),a2(!1),S(""),ae((b=a.configJson||{}).datasetIds||[]),b.versionId&&(bv.current=b.versionId),ag(b.skillId||""),ai(b.versionId||""),U(b.taskDescription||""),aI(b.sourceMode||"dataset"),ay(b.evaluatorId||"preset-agent-trace-quality"),aA(Array.isArray(b.evaluators)&&b.evaluators.length>0?b.evaluators:E.map(a=>a.id)),aM(b.traceSkillId||""),aO(b.traceTimeRange||"7d"),aQ(b.traceDatasetId||""),aq(b.evaluationBatchId||""),as(b.evaluationBatchTitle||""),au(Array.isArray(b.evaluationBatchEvaluators)?b.evaluationBatchEvaluators:[]),bq(a.caseStatesJson||{}),aW(a.traceEvalStatesJson||{}),a4(!1)},children:[(0,b.jsxs)("div",{className:"d-history-item-top",children:[(0,b.jsx)("div",{className:"d-history-item-title",style:L?.id===a.id?{color:"var(--accent)"}:{},children:a.taskName}),(0,b.jsx)("span",{className:"d-history-item-id",children:new Date(a.createdAt).toLocaleString("zh"===I?"zh-CN":"en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),a.configJson?.taskDescription&&(0,b.jsx)("div",{className:"d-history-item-query",children:a.configJson.taskDescription})]},a.id))})]})})]}),(0,b.jsx)(l.NewEvaluationBatchDialog,{open:aj,user:J||"",defaultTitle:L?.taskName,evaluators:az,onClose:()=>ak(!1),onCreated:by})]})}function G({allCases:a,caseStates:c,avgScore:d,scoreColorKlass:e,evaluatedCount:f,passCount:g,failedCount:h,pendingCount:i,evaluatingCount:j,onDrillTrace:k}){let l=a.length,m=f>0?Math.round(g/f*100):0,n=0===f?null:m>=80?"good":m<50?"bad":null;if(0===l)return(0,b.jsxs)("div",{className:"recall-empty",children:[(0,b.jsx)("b",{children:"还没选数据集或 trace。"}),(0,b.jsxs)("div",{style:{marginTop:6},children:["先去 ",(0,b.jsx)("b",{children:"① 配置"})," 选数据源 / Skill / 评测器。"]})]});if(0===f)return(0,b.jsxs)("div",{className:"recall-empty",children:[(0,b.jsx)("b",{children:"用例已就绪,但还未跑评测。"}),(0,b.jsxs)("div",{style:{marginTop:6},children:["到 ",(0,b.jsx)("b",{children:"② 执行"})," 块点「批量执行」或「批量评测」开始;评测完成后这里显示聚合结果。"]})]});let o=a=>{let b=c[a.id];if(!b)return null;let d=b.sessionId,e=a.input||a.id,f=[];"number"==typeof b.score&&f.push(`评分 ${b.score} 分`),b.timeCost&&f.push(`耗时 ${b.timeCost}`),"number"==typeof b.tokenUsage&&b.tokenUsage>0&&f.push(`tokens ${b.tokenUsage}`);let g=f.length>0?f.join(" · "):null,h=b.output?b.output.length>240?b.output.slice(0,240)+"…":b.output:null,i="pass"===b.status,j="fail"===b.status;return i||j?{id:a.id,summary:e,severity:i?"low":null!=b.score&&b.score<50?"high":"medium",evidence:g,reasoning:h,suggestedFix:j?"点击「查看完整 trace」看 evaluator 详细反馈与 trajectory 错点":null,passed:i,dimension:d?`trace ${d.slice(0,8)}`:void 0}:{id:a.id,summary:e,severity:"low",evidence:"evaluating"===b.status?"评测中…":"executed"===b.status?"已执行,待评测":"running"===b.status?"执行中…":"待执行",reasoning:null,passed:!1,dimension:d?`trace ${d.slice(0,8)}`:void 0}},p=a.filter(a=>c[a.id]?.status==="pass").map(o).filter(a=>null!=a),q=a.filter(a=>c[a.id]?.status==="fail").map(o).filter(a=>null!=a),r=a.filter(a=>{let b=c[a.id]?.status;return!b||"pending"===b||"running"===b||"executed"===b||"evaluating"===b}).map(o).filter(a=>null!=a),s=[{key:"failed",title:"未通过",desc:"评测结果不达标。点击「查看完整 trace」可看 evaluator 详细反馈。",status:0===q.length?"passed":"failed",scoreLabel:`${q.length} 个问题`,items:q},{key:"passed",title:"通过",desc:"评测达标的 case。",status:"passed",scoreLabel:`${p.length} 通过`,items:p},{key:"pending",title:"待评测",desc:"还没执行或还没经过 evaluator 打分的 case;在 ② 执行块批量推进。",status:"notEvaluated",scoreLabel:`${r.length} 待评测`,items:r}];return(0,b.jsxs)("div",{className:"ev-content",children:[(0,b.jsxs)("div",{className:"ev-hero",children:[(0,b.jsxs)("div",{className:"ev-hero-main",children:[(0,b.jsxs)("div",{className:`ev-hero-num ${e}`,children:[d??"--",(0,b.jsx)("span",{className:"ev-hero-unit",children:"分"})]}),(0,b.jsxs)("div",{className:"ev-hero-label",children:["总评分 · 已评测 ",f," / ",l," 用例"]})]}),(0,b.jsxs)("div",{className:"ev-hero-sub",children:[(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsxs)("div",{className:`ev-hero-sub-num ${n??""}`,children:[m,"%"]}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"通过率"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"已评测中达标比例"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${h>0?"bad":""}`,children:h}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"未通过"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"需要重点关注"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${g>0?"good":""}`,children:g}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"通过"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"评测达标 case"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:"ev-hero-sub-num",children:i+j}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"待 / 评测中"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"尚未给分 case"})]})]})]}),(0,b.jsx)("div",{onClickCapture:a=>{if(!a.target.closest(".ev-issue"))return},children:(0,b.jsx)(t.FindingsGrouped,{groups:s,title:"分场景结果",hint:"未通过排在最上 · 通过 / 待评测 默认折叠",emptyMessage:"本任务没有用例"})})]})}var H=a.i(306765),I=a.i(113462),J=a.i(841952),K=a.i(823292),L=a.i(960798);function M(a){return!!a&&Object.values(a).some(a=>["a","b"].some(b=>{let c=a?.[b];return c?.status==="running"||c?.status==="evaluating"}))}function N(a){let b=a.configJson?.latestResultAt,c="string"==typeof b?Date.parse(b):0;if(Number.isFinite(c)&&c>0)return c;let d=Object.values(a.caseStatesJson||{}).flatMap(a=>["a","b"].flatMap(b=>(a?.[b]?.runs||[]).map(a=>"string"==typeof a.completedAt?Date.parse(a.completedAt):0))).filter(a=>Number.isFinite(a)&&a>0);return d.length>0?Math.max(...d):Date.parse(a.createdAt||"")||0}function O(a){return Object.values(a.caseStatesJson||{}).some(a=>["a","b"].some(b=>{let c=a?.[b];return!!(c&&("pending"!==c.status||(c.runs?.length||0)>0))}))}function P(a){return a?"number"==typeof a.score?a.score:"number"==typeof a.pass?a.pass:null:null}function Q(a){let b={total:0,avgScore:null,avgTime:null,avgTokens:null,passRate:0,triggered:0,toolCalls:0};if(!a)return b;let c=a=>{if(!a)return null;let b=/(\d+(?:\.\d+)?)\s*s/.exec(a);return b?Number(b[1]):null},d=Array.isArray(a.runs)?a.runs:[];if(d.length>0){let a=d.map(P).filter(a=>null!=a),b=d.filter(a=>{let b=P(a);return null!=b?b>=60:"pass"===a.status}).length,e=a.length?Math.round(a.reduce((a,b)=>a+b,0)/a.length):null,f=d.map(a=>c(a.timeCost)).filter(a=>null!=a),g=f.length?Number((f.reduce((a,b)=>a+b,0)/f.length).toFixed(2)):null,h=d.filter(a=>"number"==typeof a.tokenUsage&&(a.tokenUsage||0)>0),i=h.length?Math.round(h.reduce((a,b)=>a+(b.tokenUsage||0),0)/h.length):null,j=d.filter(a=>a.skillTriggered).length,k=d.reduce((a,b)=>a+(b.toolCallCount||0),0);return{total:d.length,avgScore:e,avgTime:g,avgTokens:i,passRate:Math.round(b/d.length*100),triggered:j,toolCalls:k}}let e=P(a);if(!("pass"===a.status||"fail"===a.status||null!=e||a.sessionId))return b;let f=null!=e?+(e>=60):+("pass"===a.status);return{total:1,avgScore:e,avgTime:c(a.timeCost),avgTokens:"number"==typeof a.tokenUsage&&a.tokenUsage>0?a.tokenUsage:null,passRate:100*f,triggered:+!!a.skillTriggered,toolCalls:a.toolCallCount||0}}function R(a){return Q({runs:a.flatMap(a=>Array.isArray(a.runs)&&a.runs.length>0?a.runs:"pass"===a.status||"fail"===a.status||null!=P(a)||a.sessionId?[a]:[])})}function S(a){if(!a)return[];let b=Array.isArray(a.runs)?a.runs:[];if(b.length>0)return b.map(P).filter(a=>null!=a);let c=P(a);return null==c?[]:[c]}function T(a,b){return`${a||"Skill"}:v${b??"?"}`}function U(a){if(!a)return{avgPct:null,scoredCount:0};let b=a.l2Scores?.scores;if(!b)return{avgPct:null,scoredCount:0};let c=0,d=0;for(let a of J.STATIC_EVAL_STANDARDS){let e=a.dimensionAliases.map(a=>b[a]).find(a=>"number"==typeof a&&Number.isFinite(a));"number"==typeof e&&(d++,c+=e)}return{avgPct:d>0?Math.round(c/d*20):null,scoredCount:d}}let V="skill-case-analysis";function W(){return(0,b.jsx)(c.Suspense,{fallback:null,children:(0,b.jsx)(X,{})})}function X(){var a;let i,j,m=(0,d.useRouter)(),r=(0,d.useSearchParams)(),{user:s}=(0,f.useAuth)(),[t]=(0,c.useState)(()=>r.get("skill")||""),[u]=(0,c.useState)(()=>r.get("version")||""),v=r.get("caseRunId")||"",[w,x]=(0,c.useState)(()=>{let a=r.get("view");return"trace"===a||"static"===a||"gray"===a||"overview"===a?a:"overview"});(0,c.useEffect)(()=>{if((r.get("view")||"overview")===w)return;let a=new URLSearchParams(Array.from(r.entries()));"overview"===w?a.delete("view"):a.set("view",w);let b=a.toString();m.replace(b?`?${b}`:"?",{scroll:!1})},[w]);let[y,z]=(0,c.useState)([]),[A,D]=(0,c.useState)(!1),[E,F]=(0,c.useState)(""),[G,I]=(0,c.useState)(null),[J,K]=(0,c.useState)([]),[L,P]=(0,c.useState)(!1),W=(0,c.useRef)([]);(0,c.useEffect)(()=>{W.current=J},[J]);let[X,Y]=(0,c.useState)(null),[Z,$]=(0,c.useState)(null),[ac,ad]=(0,c.useState)(!1),[af,ag]=(0,c.useState)(0),[ak,al]=(0,c.useState)(0),[am,ap]=(0,c.useState)(0),[aq,ar]=(0,c.useState)(r.get("taskId")||""),[as,at]=(0,c.useState)(r.get("taskId")||""),[au,av]=(0,c.useState)(!1),[aw,ax]=(0,c.useState)(!1),[ay,az]=(0,c.useState)(()=>r.get("caseRunId")||""),[aA,aB]=(0,c.useState)(""),[aC,aD]=(0,c.useState)([]),aE=(0,c.useRef)(""),[aF,aG]=(0,c.useState)([]),[aH,aI]=(0,c.useState)([]),[aJ,aK]=(0,c.useState)([]),[aL,aM]=(0,c.useState)(()=>C.presetEvaluators.filter(a=>"ready"===a.status).map(a=>a.id)),aN=(0,c.useMemo)(()=>y.find(a=>a.id===E)||null,[y,E]),aO=aN?.name||"";(0,c.useEffect)(()=>{if(!s){aG([]),aI([]);return}Promise.all([(0,g.apiFetch)(`/api/agent-datasets?user=${encodeURIComponent(s)}`).then(a=>a.json()).catch(()=>[]),(0,g.apiFetch)(`/api/user-evaluators?user=${encodeURIComponent(s)}`).then(a=>a.json()).catch(()=>[])]).then(([a,b])=>{Array.isArray(a)&&aG(a.map(a=>({id:String(a.id||""),name:String(a.name||""),cases:a.cases}))),Array.isArray(b)&&aI(b.map(a=>({id:String(a.id||""),name:String(a.name||"")})))}).catch(()=>{})},[s]);let[aP,aQ]=(0,c.useState)([]),aR=(0,c.useCallback)(async a=>{if(!s||!aO||null==G)return void aQ([]);try{let b=new URLSearchParams({user:s,limit:"50",latestByCase:"1",scope:V,skillName:aO,skillVersion:String(G)}),c=a?.includeRunId||ay;c&&b.set("includeRunId",c);let d=await (0,g.apiFetch)(`/api/eval/trajectory/runs?${b.toString()}`),e=await d.json();Array.isArray(e?.runs)&&aQ(e.runs.map(a=>({runId:String(a.runId||""),taskTitle:"string"==typeof a.taskTitle?a.taskTitle:void 0,traceCount:"number"==typeof a.traceCount?a.traceCount:void 0,doneCount:"number"==typeof a.doneCount?a.doneCount:void 0,runningCount:"number"==typeof a.runningCount?a.runningCount:void 0,createdAt:"string"==typeof a.createdAt?a.createdAt:void 0,skillName:"string"==typeof a.skillName?a.skillName:void 0,skillVersion:"number"==typeof a.skillVersion?a.skillVersion:null})))}catch{}},[s,aO,G,ay]);(0,c.useEffect)(()=>{aR()},[aR]);let aS=(0,c.useMemo)(()=>s&&E?`skill-eval:case-config:${s}:${E}:v${G??"all"}`:"",[s,E,G]);(0,c.useEffect)(()=>{if(aS)try{let a=localStorage.getItem(aS);if(!a)return;let b=JSON.parse(a);Array.isArray(b?.datasetIds)&&aK(b.datasetIds),Array.isArray(b?.evaluatorIds)&&b.evaluatorIds.length>0&&aM(b.evaluatorIds)}catch{}},[aS]);let aT=(0,c.useCallback)(a=>{if(aK(a),aS)try{localStorage.setItem(aS,JSON.stringify({datasetIds:a,evaluatorIds:aL}))}catch{}},[aS,aL]),aU=(0,c.useCallback)(a=>{if(aM(a),aS)try{localStorage.setItem(aS,JSON.stringify({datasetIds:aJ,evaluatorIds:a}))}catch{}},[aS,aJ]);(0,c.useEffect)(()=>{if(0===aF.length)return;let a=new Set(aF.map(a=>a.id)),b=aJ.filter(b=>a.has(b));if(b.length!==aJ.length&&(aK(b),aS))try{localStorage.setItem(aS,JSON.stringify({datasetIds:b,evaluatorIds:aL}))}catch{}},[aF,aJ,aS,aL]);let aV=(0,c.useMemo)(()=>s&&E?`skill-eval:trace-eval-batch:${s}:${E}:v${G??"all"}`:"",[s,E,G]);(0,c.useEffect)(()=>{if(!aV){az(""),aB(""),aD([]);return}try{if(v){az(v),aB(""),aD([]);return}let a=localStorage.getItem(aV);if(!a){az(""),aB(""),aD([]);return}let b=JSON.parse(a);az(b?.id||""),aB(b?.title||""),aD(Array.isArray(b?.evaluators)?b.evaluators:[])}catch{az(""),aB(""),aD([])}},[v,aV]),(0,c.useEffect)(()=>{let a=new URLSearchParams(Array.from(r.entries()));if((a.get("caseRunId")||"")===ay)return;ay?a.set("caseRunId",ay):a.delete("caseRunId");let b=a.toString();m.replace(b?`?${b}`:"?",{scroll:!1})},[ay]);let aW=(0,c.useMemo)(()=>{if(!ay||null==G)return ay;let a=aP.find(a=>a.runId===ay);return a&&(a.traceCount||0)>0&&(a.skillName!==aN?.name||a.skillVersion!==G)?"":ay},[ay,aP,aN?.name,G]),aX=(0,c.useMemo)(()=>{let a=aN?.name;return a?aP.filter(b=>b.runId===aW||b.skillName===a&&(null==G||0===(b.traceCount||0)||b.skillVersion===G)):aP},[aP,aN?.name,G,aW]),aY=(0,c.useMemo)(()=>{if(!aW)return aA;let a=aX.find(a=>a.runId===aW);return a?.taskTitle||aA},[aX,aW,aA]),aZ=B(s,aW,5e3),a$=(0,c.useMemo)(()=>[...aN?.versions||[]].sort((a,b)=>b.version-a.version),[aN]);(0,c.useEffect)(()=>{s&&(D(!0),(0,g.apiFetch)(`/api/skills?user=${encodeURIComponent(s)}`).then(a=>a.json()).then(a=>{Array.isArray(a)&&z(a)}).catch(()=>{}).finally(()=>D(!1)))},[s]),(0,c.useEffect)(()=>{if(0===y.length){E&&F(""),I(null);return}if(E&&y.some(a=>a.id===E))return;let a=null,b=function(a,b,c){if(b){let c=a.find(a=>a.name===b||a.id===b);if(c)return c}if(c?.skillId){let b=a.find(a=>a.id===c.skillId);if(b)return b}if(c?.skillName){let b=a.find(a=>a.name===c.skillName);if(b)return b}return null}(y,t,a)||y[0];F(b.id),I(ah(b,function(a){if(!a)return null;let b=Number(a);return Number.isFinite(b)?b:null}(u)??a?.version??null)),!aq&&a?.taskId&&a.skillName===b.name&&ar(a.taskId)},[t,u,aq,E,y,s]),(0,c.useEffect)(()=>{aN&&(aN.id,aN.name)},[aN,G,as,s]),(0,c.useEffect)(()=>{if(!aN)return void I(null);let a=aN.versions||[];null==G||a.some(a=>a.version===G)||I(ah(aN,G))},[aN,G]),(0,c.useEffect)(()=>{let a=new URLSearchParams(Array.from(r.entries())),b=aN?.name||"",c=null!=G?String(G):"",d=(a.get("skill")||"")===b,e=(a.get("version")||"")===c;if(d&&e)return;b?a.set("skill",b):a.delete("skill"),c?a.set("version",c):a.delete("version");let f=a.toString();m.replace(f?`?${f}`:"?",{scroll:!1})},[aN,G]);let a_=(0,c.useCallback)(async a=>{if(!s||!aN)return K([]),Y(null),[];0===W.current.length&&P(!0);let b=new URLSearchParams({user:s,includeEvaluations:"0",skipAutoEvalReady:"1"}),c=a?.retries??0,d=a?.retryDelayMs??800,e=async a=>{let c=new URLSearchParams(b);c.set("_ts",String(a??Date.now()));let d=await (0,g.apiFetch)(`/api/observe/data?${c.toString()}`,{cache:"no-store"});if(!d.ok)throw Error(`Trace 列表加载失败: HTTP ${d.status}`);let e=await d.json();return Array.isArray(e)?e.filter(a=>(function(a,b,c){let d=b.trim();if(!d)return!1;let e=ai(a);return!!e?.name&&e.name===d&&(null==c||e.version===c)})(a,aN.name,G)).filter(a=>{var b;return!((b=a.agentName||a.agent)&&h.has(b.trim()))}).slice(0,200):[]};try{let a=[];for(let b=0;b<=c;b++)a=await e(Date.now()+b),K(a),Y(a.length>0?new Date().toISOString():null),0===b&&P(!1),b<c&&await new Promise(a=>setTimeout(a,d));return a}catch{return K([]),Y(null),[]}finally{P(!1)}},[aN,G,s]);(0,c.useEffect)(()=>{a_()},[a_,am]),(0,c.useEffect)(()=>{if(0===J.length){as&&at("");return}if(aq&&J.some(a=>an(a)===aq)){as!==aq&&at(aq);return}as&&J.some(a=>an(a)===as)||at(an(J[0]))},[aq,as,J]);let a0=(0,c.useCallback)(async a=>{if(!s||!aN||null==G)return $(null),null;ad(!0);let b=a?.retries??5,c=a?.retryDelayMs??600,d=a?.expectedEvaluationId,e=async a=>{let b=new URLSearchParams({user:s,_ts:String(a??Date.now())}),c=await (0,g.apiFetch)(`/api/skills/${aN.id}/versions/${G}/evaluation-summary?${b.toString()}`,{cache:"no-store"});if(!c.ok)throw Error(`静态摘要加载失败: HTTP ${c.status}`);return c.json()};try{let a=null;for(let f=0;f<=b&&(a=await e(Date.now()+f),$(a),d&&a.latest?.evaluationId!==d);f++)f<b&&await new Promise(a=>setTimeout(a,c));return a}catch{return $(null),null}finally{ad(!1)}},[aN,G,s]);(0,c.useEffect)(()=>{a0()},[a0,am]);let[a1,a2]=(0,c.useState)(null),[a3,a4]=(0,c.useState)(!1),a5=(0,c.useCallback)(async a=>{if(!s||!aN)return a2(null),null;let b=aN.name;a4(!0);let c=a?.retries??5,d=a?.retryDelayMs??600,e=a?.expectedRunId,f=async a=>{let c=new URLSearchParams({user:s,_ts:String(a??Date.now())}),d=new URLSearchParams({user:s,latestOnly:"true",_ts:String(a??Date.now())});null!=G&&d.set("skillVersion",String(G));let[e,f]=await Promise.all([(0,g.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(b)}?${c.toString()}`,{cache:"no-store"}).then(a=>a.ok?a.json():{set:null}).catch(()=>({set:null})),(0,g.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(b)}/runs?${d.toString()}`,{cache:"no-store"}).then(a=>a.ok?a.json():{run:null}).catch(()=>({run:null}))]),h=Array.isArray(e?.set?.items)?e.set.items:[],i=h.filter(a=>a?.shouldTrigger===!0).length,j=f?.run??null;return{hasSet:!!e?.set,itemCount:h.length,positiveCount:i,latestRun:j&&"done"===j.status?{id:"string"==typeof j.id?j.id:void 0,passRate:Number(j.passRate??0),truePositiveRate:Number(j.truePositiveRate??0),falsePositiveRate:Number(j.falsePositiveRate??0),skillVersion:Number(j.skillVersion??0),ranAt:String(j.createdAt??"")}:null}};try{let a=null;for(let b=0;b<=c&&(a=await f(Date.now()+b),a2(a),e&&a.latestRun?.id!==e);b++)b<c&&await new Promise(a=>setTimeout(a,d));return a}catch{return a2(null),null}finally{a4(!1)}},[aN,G,s]);(0,c.useEffect)(()=>{a5()},[a5,am]);let a6=(0,c.useCallback)(()=>{if(!aN)return;let a=null!=G?`?version=${G}`:"";m.push(`/skill-eval/trigger/${encodeURIComponent(aN.name)}${a}`)},[m,aN,G]),a7=(0,c.useCallback)(a=>{if(ax(!1),aE.current=a.evaluatorRunId,az(a.evaluatorRunId),aB(a.taskTitle),aD(a.selectedEvaluators),aV)try{localStorage.setItem(aV,JSON.stringify({id:a.evaluatorRunId,title:a.taskTitle,evaluators:a.selectedEvaluators}))}catch{}aR({includeRunId:a.evaluatorRunId})},[aV,aR]),a8=(0,c.useCallback)(a=>{if(az(a.runId),aB(a.taskTitle||""),aD([]),aV)try{localStorage.setItem(aV,JSON.stringify({id:a.runId,title:a.taskTitle||"",evaluators:[]}))}catch{}},[aV]);(0,c.useEffect)(()=>{if(aE.current){if(aX.some(a=>a.runId===aE.current))aE.current="";else if(ay===aE.current)return}if(!(ay&&aX.some(a=>a.runId===ay)))if(aX.length>0){let a=aX[0];a8({runId:a.runId,taskTitle:a.taskTitle})}else ay&&az("")},[aX,a8,ay]);let a9=(0,c.useCallback)(async a=>{let b={resultErrors:[],trajectoryErrors:new Map};if(!s||0===a.length)return b;let c=[];try{let b={user:s,taskIds:a};aJ.length>0&&(b.datasetIds=aJ),ay?b.evaluatorRunId=ay:b.evaluators=aL.length>0?aL:["preset-agent-task-completion"];let c=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok){let a=await c.json().catch(()=>({}));throw Error(a?.error||`结果评估入队失败 (HTTP ${c.status})`)}}catch(a){c.push(String(a instanceof Error?a.message:a))}let d=new Map,e=a.map(a=>(async()=>{try{let b=await (0,g.apiFetch)(`/api/observe/executions/${encodeURIComponent(a)}/analyze-match`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:s,mode:"compare"})});if(!b.ok){let c=await b.json().catch(()=>({})),e=c?.error||`analyze-match 失败 (HTTP ${b.status})`;d.set(a,String(e))}}catch(b){d.set(a,b instanceof Error?b.message:"网络/解析错误")}})());return await Promise.all(e),(c.length>0||d.size>0)&&console.warn("[skill-eval] batch analyze partial failures:",{resultErrors:c,trajectoryErrors:d}),await a_({retries:30,retryDelayMs:3e3}),{resultErrors:c,trajectoryErrors:d}},[s,a_,ay,aL,aJ]),[ba,bb]=(0,c.useState)(null),[bc,bd]=(0,c.useState)(null),be=(0,c.useCallback)(async()=>{if(!s)return bb(null),bd(null),{summary:null,meta:null,busy:!1};try{let a=await (0,g.apiFetch)(`/api/debug/grayscale-tasks?user=${encodeURIComponent(s)}&_ts=${Date.now()}`,{cache:"no-store"}),b=a.ok?await a.json():[],c=aN?.versions?.find(a=>a.version===G)?.id,d=Array.isArray(b)?aN?b.filter(a=>a?.configJson?.skillId===aN.id&&(!c||a?.configJson?.versionBId===c)):b:[],e=[...d].sort((a,b)=>{let c=Number(!!b.activeRun)-Number(!!a.activeRun);if(0!==c)return c;let d=Number(O(b))-Number(O(a));return 0!==d?d:N(b)-N(a)})[0]||null,f={};(aN?.versions||[]).forEach(a=>{a.id&&(f[a.id]={version:a.version,skillName:aN?.name||"Skill"})});let h=e?function(a,b,c){let d,e,f,g=a.caseStatesJson||{},h="a"in g||"b"in g,i=h?[]:Object.values(g).filter(a=>!!a&&"object"==typeof a),j=h?Q(g.a):R(i.map(a=>a.a).filter(a=>!!a)),l=h?Q(g.b):R(i.map(a=>a.b).filter(a=>!!a)),m=h?S(g.a):i.flatMap(a=>S(a.a)),r=h?S(g.b):i.flatMap(a=>S(a.b));if(0===j.total&&0===l.total)return null;let s=h?Math.max(j.total,l.total):i.length,t=h?Math.min(j.total,l.total):i.filter(a=>Q(a.a).total>0&&Q(a.b).total>0).length,u=null!=j.avgScore&&null!=l.avgScore?l.avgScore-j.avgScore:null,v=null!=j.avgScore&&null!=l.avgScore&&j.avgScore>0?Number(((l.avgScore-j.avgScore)/j.avgScore*100).toFixed(1)):null,w=function(a,b){if(0===a.length||0===b.length)return null;let c=n(a),d=n(b);if(a.length<2||b.length<2)return+(c===d);let e=o(a,c),f=o(b,d),g=e/a.length,h=f/b.length,i=Math.sqrt(g+h);if(!Number.isFinite(i)||0===i)return+(c===d);let j=(d-c)/i,k=g**2/(a.length-1)+h**2/(b.length-1),l=function(a,b){if(!Number.isFinite(a)||!Number.isFinite(b)||b<=0)return NaN;if(0===a)return .5;let c=function(a,b,c){if(a<=0)return 0;if(a>=1)return 1;let d=Math.exp(p(b+.5)-p(b)-p(.5)+b*Math.log(a)+.5*Math.log(1-a));return a<(b+1)/(b+.5+2)?d*q(b,.5,a)/b:1-d*q(.5,b,1-a)/.5}(b/(b+a*a),b/2,0);return a>0?1-c/2:c/2}(Math.abs(j),k>0?(g+h)**2/k:a.length+b.length-2);return Number.isFinite(l)?Math.max(0,Math.min(1,Number((2*(1-l)).toFixed(6)))):null}(m,r),x=(a,d)=>{if("__NONE__"===a)return{label:"无 Skill",hasSkill:!1};if(a){let d=b?.[a];return{label:T(d?.skillName||c?.skillName,d?.version??c?.version),hasSkill:!0}}return"none"===d?{label:"无 Skill",hasSkill:!1}:{label:T(c?.skillName,c?.version),hasSkill:!0}},y=x(a.configJson?.versionAId,"none"),z=x(a.configJson?.versionBId,"has"),A=h?{"legacy-case":{a:g.a,b:g.b}}:g,B=(0,k.calculateAbScoring)(A,{repeatRounds:a.configJson?.repeatRounds}),C=a.configJson?.repeatRounds??B.repeatRounds??1,D=(d=new Set(["pass","fail","executed"]),e=0,f=a=>{if(!a||(Array.isArray(a.runs)&&a.runs.forEach(f),!a.completedAt||!d.has(a.status||"")))return;let b=new Date(a.completedAt).getTime();Number.isFinite(b)&&(e=Math.max(e,b))},"a"in A||"b"in A?(f(A.a),f(A.b)):Object.values(A).forEach(a=>{f(a.a),f(a.b)}),e>0?new Date(e).toISOString():void 0);return{taskId:a.id,taskName:a.taskName||"AB测评",createdAt:a.createdAt,latestResultAt:a.configJson?.latestResultAt,latestCompletedAt:D,runCount:a.configJson?.runCount||Math.max(j.total,l.total)||1,repeatRounds:C,sampleCount:s,completedPairs:t,a:j,b:l,aLabel:y.label,bLabel:z.label,aHasSkill:y.hasSkill,bHasSkill:z.hasSkill,aVersionId:a.configJson?.versionAId,bVersionId:a.configJson?.versionBId,delta:u,deltaPct:v,pValue:w,recommendation:null==u?"insufficient":u>=5?"up":u<=-5?"down":"flat",scoring:B}}(e,f,{skillName:aN?.name,version:G}):null;return bd(e),bb(h),{summary:h,meta:e,busy:!!e?.activeRun||M(e?.caseStatesJson)}}catch{return bb(null),bd(null),{summary:null,meta:null,busy:!1}}},[s,aN,G]);(0,c.useEffect)(()=>{let a=null,b=!1;return be().then(c=>{!b&&c.busy&&(a=setInterval(()=>{be()},2500))}),()=>{b=!0,a&&clearInterval(a)}},[be,am]);let bf=aj(J),bg=J.find(a=>an(a)===as)||null,bh=aj(bg?[bg]:[]),bi=bf.analyzed,bj=U(Z?.latest??null),bk=!!Z?.latest,bl=!!a1?.latestRun;ba&&ba.b.avgScore;let bm=bc?.caseStatesJson||{},bn=(Object.keys(bm).length>0&&Object.values(bm).every(a=>{let b=a=>a?.status==="executed"||a?.status==="pass";return b(a?.a)&&b(a?.b)})?ba?.scoring.totalScore:null)??null,bo=(aW?Array.from(aZ.values()):[]).filter(a=>"number"==typeof a.resultScore&&"number"==typeof a.trajScore),bp=bo.length>0,bq=[bp?{passed:Math.round(bo.reduce((a,b)=>a+(b.resultScore+b.trajScore)/2,0)/bo.length),total:100}:null,null!=bj.avgPct?{passed:bj.avgPct,total:100}:null,bl&&a1&&a1.itemCount>0?{passed:Math.round(a1.latestRun.passRate*a1.itemCount),total:a1.itemCount}:null,null!=bn?{passed:bn,total:100}:null].filter(a=>!!a&&a.total>0),br=bk||bp||bl||null!=bn,bs={total:bq.reduce((a,b)=>a+b.total,0),passed:bq.reduce((a,b)=>a+b.passed,0)},bt=br&&bs.total>0?Math.round(bs.passed/bs.total*100):null,bu=aN&&null!=G?`/skill-opt/${encodeURIComponent(aN.name)}/${G}`:"/skill-opt",bv=(0,c.useCallback)(a=>{at(a),ar("")},[]),bw=(0,b.jsxs)("span",{className:"sa-top-title",children:["overview"===w?(0,b.jsx)("span",{children:"Skills 评测"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{onClick:()=>x("overview"),children:"Skills 评测"}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("b",{children:"trace"===(a=w)?"用例分析":"static"===a?"静态合规分析":"gray"===a?"A/B测试":"综合分析"})]}),(0,b.jsx)("span",{className:"sa-top-dot",children:"·"}),(0,b.jsxs)("select",{className:"sa-top-select",value:E,onChange:a=>{let b=y.find(b=>b.id===a.target.value);F(a.target.value),I(b?ah(b):null),x("overview")},disabled:A,"aria-label":"切换 Skill",children:[0===y.length&&(0,b.jsx)("option",{value:"",children:"暂无 Skill"}),y.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]}),(0,b.jsxs)("select",{className:"sa-top-select sa-top-select-version",value:G??"",onChange:a=>{I(Number(a.target.value))},disabled:!aN,"aria-label":"切换版本",children:[0===a$.length&&aN&&(0,b.jsxs)("option",{value:aN.activeVersion??aN.version??0,children:["v",aN.activeVersion??aN.version??0]}),a$.map(a=>(0,b.jsxs)("option",{value:a.version,children:["v",a.version,a.version===aN?.activeVersion?"(当前)":""]},a.version))]})]});return(0,b.jsxs)("div",{className:"sa-root",children:[(0,b.jsx)(e.AppTopBar,{title:bw,showDefaultActions:!1}),(0,b.jsxs)("main",{className:"sa-main",children:["overview"===w&&(0,b.jsx)(b.Fragment,{children:(0,b.jsx)(_,{user:s,selectedSkill:aN,selectedVersion:G,traceEvaluationBatchId:aW,traceEvaluationBatchTitle:aY,health:bt,standards:bs,traces:J,traceAnalyzed:bi,traceCardUpdatedAt:X,selectedTrace:bg,selectedTraceStats:bh,staticSummary:Z,staticLoading:ac,tracesLoading:L,hasAnyAnalysisResult:br,graySummary:ba,grayTaskMeta:bc,triggerSummary:a1,triggerLoading:a3,onReloadTraces:a_,onReloadStatic:a0,onReloadTrigger:a5,onReloadGray:be,onOpenTriggerEditor:a6,onOpen:x,smartRunBusy:au,onSmartRunBusyChange:av})}),"trace"===w&&(0,b.jsx)(aa,{skill:aN,version:G,user:s,traces:J,loading:L,prefillTraceId:aq,selectedTraceId:as,onSelectedTraceChange:bv,onBack:()=>x("overview"),onReload:a_,onOptimize:()=>m.push(bu),onBatchAnalyze:a9,traceEvaluationBatchId:aW,traceEvaluationBatchTitle:aY,onOpenEvalBatchDialog:()=>ax(!0),evalTaskOptions:aX,onSelectEvalBatch:a8,datasets:aF,selectedDatasetIds:aJ,onSelectedDatasetIdsChange:aT,evaluatorOptions:[...C.presetEvaluators.filter(a=>"ready"===a.status).map(a=>({id:a.id,name:a.name})),...aH],selectedEvaluatorIds:aL,onSelectedEvaluatorIdsChange:aU},`tracepanel_${aN?.id||"noskill"}_${G??"all"}`),"static"===w&&(0,b.jsx)(ab,{skill:aN,version:G,user:s,summary:Z,loading:ac,onBack:()=>x("overview"),onReload:a0,onOptimize:()=>m.push(bu)}),"gray"===w&&(0,b.jsx)(ae,{title:"A/B测试",description:"对照两个 Skill 版本或基础 Agent 的执行质量,定位新版本是否真正修复了关键失败类型。",primaryAction:"新建任务",secondaryAction:"历史任务",onBack:()=>x("overview"),onPrimary:()=>ag(a=>a+1),onSecondary:()=>al(a=>a+1),onOptimize:()=>m.push(bu),renderHeader:"none",children:(0,b.jsx)(H.GrayscaleEvaluation,{hifi:!0,newTaskTrigger:af,historyPanelTrigger:ak,pageTitle:"A/B测试",pageDescription:"对照两个 Skill 版本或基础 Agent 的执行质量,定位新版本是否真正修复了关键失败类型。",pageBadge:"调测分析",onBack:()=>x("overview"),onOptimize:()=>m.push(bu),parentSkillId:E,parentSkillVersion:G,skillSelectorSlot:(i=null!=G&&G===(aN?.activeVersion??aN?.version),j=(aN?.name||"SKL").replace(/[^a-zA-Z0-9]/g,"").slice(0,3).toUpperCase()||"SKL",(0,b.jsxs)("section",{className:"sa-selector sa-selector-hifi","aria-label":"选择skill",children:[(0,b.jsx)("div",{className:"sa-skill-icon",children:j}),(0,b.jsxs)("div",{className:"sa-skill-info",children:[(0,b.jsxs)("div",{className:"sa-skill-name-row",children:[(0,b.jsx)("span",{className:"sa-skill-name",children:aN?.name||"请选择 Skill"}),null!=G&&(0,b.jsxs)("span",{className:`sa-skill-version-chip ${i?"":"muted"}`,children:["v",G,i?" · 当前":""]}),null!=bt&&bt<60&&(0,b.jsxs)("span",{className:"sa-skill-warn-badge",children:[(0,b.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:(0,b.jsx)("path",{d:"M12 2L1 21h22L12 2z"})}),null!=bt&&bt<60&&bt>=40?"需关注":"急需优化"]})]}),(0,b.jsxs)("div",{className:"sa-skill-stats",children:[(0,b.jsxs)("span",{className:"stat",children:[(0,b.jsx)("strong",{children:J.length})," 条执行"]}),(0,b.jsxs)("span",{className:"stat",children:["最近 ",(0,b.jsx)("strong",{children:30})," 天"]}),(0,b.jsxs)("span",{className:"stat",children:[(0,b.jsx)("strong",{children:"4"})," 个评估器"]}),(0,b.jsxs)("span",{className:"stat",children:[(0,b.jsx)("strong",{children:"19"})," 项标准"]}),aN?.updatedAt&&(0,b.jsxs)("span",{className:"stat",children:["发布于 ",(0,b.jsx)("strong",{children:ao(aN.updatedAt)})]})]})]}),(0,b.jsxs)("div",{className:"sa-skill-switchers",children:[(0,b.jsxs)("select",{value:E,onChange:a=>{let b=y.find(b=>b.id===a.target.value);F(a.target.value),I(b?ah(b):null)},disabled:A,"aria-label":"切换 Skill",children:[0===y.length&&(0,b.jsx)("option",{value:"",children:"暂无 Skill"}),y.map(a=>(0,b.jsx)("option",{value:a.id,children:a.name},a.id))]}),(0,b.jsxs)("select",{value:G??"",onChange:a=>I(Number(a.target.value)),disabled:!aN,"aria-label":"切换版本",children:[0===a$.length&&aN&&(0,b.jsxs)("option",{value:aN.activeVersion??aN.version??0,children:["v",aN.activeVersion??aN.version??0]}),a$.map(a=>(0,b.jsxs)("option",{value:a.version,children:["v",a.version]},a.version))]})]})]}))})})]}),(0,b.jsx)(l.NewEvaluationBatchDialog,{open:aw,user:s||"",defaultTitle:aA||(aN?`${aN.name} trace 评测`:void 0),evaluators:aL,taskScope:V,taskSkillName:aN?.name,taskSkillVersion:G,onClose:()=>ax(!1),onCreated:a7})]})}let Y={queued:0,running:0,done:0,failed:0};function Z(a){let{user:b,skillName:d,skillVersion:e,taskType:f,enabled:h=!0}=a,[i,j]=(0,c.useState)(Y);return(0,c.useEffect)(()=>{if(!h||!b)return void j(Y);let a=!1,c=new URLSearchParams({user:b});d&&c.set("skill",d),null!=e&&c.set("version",String(e)),f&&c.set("taskType",f);let i=`/api/background-tasks?${c.toString()}`,k=async()=>{try{let b=await (0,g.apiFetch)(i,{cache:"no-store"});if(!b.ok)return;let c=await b.json();a||j(c?.counts??Y)}catch{}};k();let l=setInterval(k,2500);return()=>{a=!0,clearInterval(l)}},[b,d,e,f,h]),i}function $({counts:a,hint:c}){let{queued:d,running:e,done:f,failed:g}=a;return d+e+f+g===0?null:(0,b.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:c||"后台 opencode 任务状态(2.5s 刷新一次;近 5 分钟内完成的会短暂保留显示)",children:[d>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#ca8a04"}}),"排队 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:d})]}),e>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#2563eb"}}),"执行中 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:e})]}),f>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#16a34a"}}),"已完成 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:f})]}),g>0&&(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:"#dc2626"}}),"失败 ",(0,b.jsx)("b",{style:{color:"var(--foreground)"},children:g})]})]})}function _({user:a,selectedSkill:d,selectedVersion:e,traceEvaluationBatchId:f,traceEvaluationBatchTitle:h,health:i,standards:k,traces:l,traceAnalyzed:m,traceCardUpdatedAt:n,selectedTrace:o,selectedTraceStats:p,staticSummary:q,staticLoading:r,tracesLoading:s,hasAnyAnalysisResult:t,graySummary:u,grayTaskMeta:v,triggerSummary:w,triggerLoading:x,onReloadTraces:y,onReloadStatic:z,onReloadTrigger:A,onReloadGray:C,onOpenTriggerEditor:D,onOpen:E,smartRunBusy:F,onSmartRunBusyChange:G}){var H;let I=Z({user:a,skillName:d?.name,skillVersion:e,enabled:!!d}),N=Z({user:a,skillName:d?.name,skillVersion:e,taskType:"trigger-eval",enabled:!!d}),O=U(q?.latest??null),P=!!q?.latest,Q=aj(l).highDeviation,[R,S]=(0,c.useState)(null),V=o?an(o):"";p.totalSteps>0&&(p.matchedSteps,p.totalSteps);let W=!!f,X=B(a,f,5e3),Y=W?Array.from(X.values()):[],_=Y.filter(a=>"number"==typeof a.resultScore&&"number"==typeof a.trajScore),aa=_.length,ab=Y.length,ac=0===aa?null:Math.round(_.reduce((a,b)=>a+(b.resultScore+b.trajScore)/2,0)/aa),ad=W?null==ac?"待评测":ac>=60?"正常":"需关注":"未关联",ae=aa>0,af=l.reduce((a,b)=>{var c;let d="number"==typeof b.answer_score?b.answer_score:"number"==typeof b.answerScore?b.answerScore:null,e="number"==typeof(c=b).trajectory_score?c.trajectory_score:"number"==typeof c.trajectoryScore?c.trajectoryScore:am(c);if(null==d||null==e)return a;let f=b.execution_match?.matchedAt||b.timestamp||null;return f?a?new Date(f).getTime()>new Date(a).getTime()?f:a:f:a},null);(0,c.useEffect)(()=>{if(!a||!V)return void S(null);let b=!1;return(0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(a)}&taskId=${encodeURIComponent(V)}&limit=1`,{cache:"no-store"}).then(a=>a.ok?a.json():null).then(a=>{if(b)return;let c=(Array.isArray(a?.results)?a.results:[])[0];S(c?.updatedAt||null)}).catch(()=>{b||S(null)}),()=>{b=!0}},[V,n,a]);let ag=ae?R||n||af:null,ah=o?ai(o):null,ak=!!V&&!!ah?.name,ao=!!w?.hasSet,aq=!!w?.latestRun,ar=ao&&(w?.itemCount??0)>0,as=!!u&&null!=u.b.avgScore,at=v?.caseStatesJson||{},au=(Object.keys(at).length>0&&Object.values(at).every(a=>{let b=a=>a?.status==="executed"||a?.status==="pass";return b(a?.a)&&b(a?.b)})?u?.scoring.totalScore:null)??null,av=(v?.configJson?.checkedCaseIds??v?.configJson?.selectedCaseIds??[]).length,aw=!!v?.activeRun||M(v?.caseStatesJson),ax=av>0&&!aw,ay=!!v?.id&&ax,az=!!d&&null!=e,aA=[{key:"trace",name:"用例分析",hasResult:ae,canRun:ak,runHint:ak?"当前 Trace 可分析":0===l.length?"暂无 Trace 可分析":o?ah?.name?"待分析 · 需先进入详情页完成评测":"当前 Trace 未加载主 Skill,无法分析":"需先选择 Trace"},{key:"static",name:"静态合规",hasResult:P,canRun:az,runHint:az?"可启动静态扫描":"待分析 · 需先选择 Skill 与版本"},{key:"trigger",name:"触发分析",hasResult:aq,canRun:ar,runHint:ao?ar?"触发集已准备 · 可立即评测":"触发集为空 · 需先补充数据":"未配置 · 需先准备触发集"},{key:"gray",name:"A/B测试",hasResult:null!=au,canRun:ay,runHint:ay?"开始执行可点击":aw?"执行中 · 当前 A/B 任务不可重复启动":0===av?"未配置 · 需先在详情页选择样本":"未配置 · 需先保存 A/B 任务"}],aB=aA.filter(a=>a.hasResult).length,aC=aA.length,aD=d&&null!=e?`/skill-opt/${encodeURIComponent(d.name)}/${e}`:"/skill-opt",aE=t&&null!=i?aB<aC?"warn":i>=80?"ok":i>=60?"warn":"err":"idle",aF=t?aB<aC?`数据不足 \xb7 仅 ${aB}/${aC} 评估器有结果`:i>=80?"健康":i>=60?"需关注":"急需优化":"尚未运行任何评估",[aG,aH]=(0,c.useState)(null),[aI,aJ]=(0,c.useState)("idle"),[aK,aL]=(0,c.useState)("idle"),aM=aA.filter(a=>a.canRun).map(a=>a.key),[aN,aO]=(0,c.useState)(aM);(0,c.useEffect)(()=>{aO(aM)},[aM.join("|")]);let aP=(0,c.useCallback)(a=>{if(!d)return null;let b=a?.traces??l,c=a?.staticSummary??q,f=a?.triggerSummary??w,g=a?.graySummary??u,h=a?.grayTaskMeta??v,j=a?.traceBusy??b.some(a=>a.is_evaluating),k=a?.grayBusy??(!!h?.activeRun||M(h?.caseStatesJson)),m=aj(b),n=U(c?.latest??null),p=!!f?.hasSet,r=!!f?.latestRun,s=b.find(a=>an(a)===V)||o,t=(h?.configJson?.checkedCaseIds??h?.configJson?.selectedCaseIds??[]).length,x=W||!!V&&!!(s?ai(s)?.name:null),y=[];g&&null!=g.scoring.totalScore||y.push("ab"),null==ac&&y.push("trace"),r||y.push("recall"),null==n.avgPct&&y.push("static");let z=(a,b,c,d=!1)=>c?"running":d?"failed":a?b?"done":"pending":"unconfigured";return{skillName:d.name,version:e,overall:{weightedScore:i,coveredCount:aC-y.length,totalCount:aC,missingDimensions:y,selectedDimensionsThisRun:(a?.selectedDimensionsThisRun??[]).map(a=>"gray"===a?"ab":"trigger"===a?"recall":a)},ab:{configured:!!h?.id&&t>0,hasResult:!!g&&null!=g.scoring.totalScore,status:z(!!h?.id&&t>0,!!g&&null!=g.scoring.totalScore,k),scoreA:g?.a.avgScore??null,scoreB:g?.scoring.totalScore??null,finalScore:g?.scoring.totalScore??null,decisionLabel:g?.scoring.decisionLabel??null,capabilityDeltaPp:g?.scoring.capability.deltaPp??null,tokenDeltaPct:g?.scoring.cost.deltaTokenPct??null,invokeRate:g?.scoring.stability.invokeRate??null,variance:g?.scoring.stability.variance??null,delta:g?.delta??null,pValue:g?.pValue??null,sampleCount:g?.sampleCount??null,recommendation:g?.recommendation??null},trace:{configured:x,hasResult:null!=ac,status:z(x,null!=ac,j),score:ac,fullyEvaluatedCount:aa,totalTraceCount:W?ab:b.length,highDeviationCount:m.highDeviation},recall:{configured:p,hasResult:r,status:z(p,r,!1),score:r?Math.round((f?.latestRun?.passRate??0)*100):null,passRate:f?.latestRun?.passRate??null,truePositiveRate:f?.latestRun?.truePositiveRate??null,falsePositiveRate:f?.latestRun?.falsePositiveRate??null,itemCount:f?.itemCount??0,positiveCount:f?.positiveCount??0},static:{configured:!!d&&null!=e,hasResult:null!=n.avgPct,status:z(!!d&&null!=e,null!=n.avgPct,!1),score:n.avgPct??null,passedCount:n.scoredCount,totalCount:J.STATIC_EVAL_STANDARDS.length,issueCount:c?.latest?.issuesCount??0}}},[u,v,i,aa,ac,ab,W,d,o,V,e,k.passed,k.total,q,aC,l,w]),aQ=(0,c.useMemo)(()=>aP(),[aP]),aR=(0,c.useMemo)(()=>aQ?JSON.stringify(aQ):"",[aQ]),aS=(0,c.useRef)(""),aT=(0,c.useRef)(0),aU=(0,c.useCallback)(async(b,c)=>{if(!b||!a||!d?.name)return aH(null),aJ("idle"),null;let e=++aT.current;aJ("loading");try{let f=await (0,g.apiFetch)(`/api/skills/by-name/${encodeURIComponent(d.name)}/analysis-diagnosis`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,snapshot:b})}),h=await f.json().catch(()=>({}));if(!f.ok||!h?.diagnosis)throw Error(h?.error||"诊断生成失败");let i=h.diagnosis;return e===aT.current&&(aH(i),aJ("ready")),"smart-run"===c&&"fallback"===i.mode&&K.toast.warning("AI 诊断暂时不可用,已回退为基础诊断"),i}catch{let a=j(b);return e===aT.current&&(aH(a),aJ("ready")),"smart-run"===c&&K.toast.warning("AI 诊断暂时不可用,已回退为基础诊断"),a}},[d?.name,a]);(0,c.useEffect)(()=>{!aQ||F||"idle"!==aK||aR!==aS.current&&(aS.current=aR,aT.current+=1,aH(j(aQ)),aJ("ready"))},[aR,aQ,F,aK]);let aV=aG??(aQ?j(aQ):{problem:"还没有任何分析结果,当前页面先展示基础信息和可执行入口。",suggestion:"优先补齐可运行维度,再查看更稳定的诊断结论。",mode:"fallback"}),aW=async()=>{let b=v?.configJson?.checkedCaseIds??v?.configJson?.selectedCaseIds??[];if(!a||!v?.id||0===b.length)throw Error("A/B 测试当前缺少可执行样本或任务信息。");let c=await (0,g.apiFetch)(`/api/debug/grayscale-tasks/${encodeURIComponent(v.id)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,action:"start",caseIds:b,evaluatorId:v.configJson?.evaluatorId,agentMaxConcurrency:v.configJson?.agentMaxConcurrency})}),d=await c.json().catch(()=>({}));if(!c.ok)throw Error(d.error||"A/B 测试启动失败")},aX=async()=>{if(!a||!V||!ah?.name)throw Error("用例分析当前缺少可执行 Trace 或主 Skill 信息。");let b=(async()=>{let b=await (0,g.apiFetch)("/api/eval/trajectory/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,taskIds:[V],evaluators:["preset-agent-task-completion"]})}),c=await b.json().catch(()=>({}));if(!b.ok||!c.success)throw Error(c.error||"启动结果评估失败")})(),c=(async()=>{let b=await (0,g.apiFetch)(`/api/observe/executions/${encodeURIComponent(V)}/analyze-match`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a,mode:"compare"})}),c=await b.json().catch(()=>({}));if(!b.ok||!c.success)throw Error(c.error||"流程图比对分析失败")})(),d=await Promise.allSettled([b,c]),e=d.filter(a=>"rejected"===a.status);if(e.length===d.length)throw Error(e[0]?.reason instanceof Error?e[0].reason.message:"用例分析启动失败");if(e.length>0)throw Error(e.map(a=>a.reason instanceof Error?a.reason.message:"部分流程启动失败").join(";"));await y({retries:5,retryDelayMs:900})},aY=async()=>{if(!a||!d?.name)throw Error("触发分析当前缺少 Skill 信息。");let b=await (0,g.apiFetch)(`/api/skill-eval/trigger/${encodeURIComponent(d.name)}/run`,{method:"POST",body:JSON.stringify({user:a,runsPerQuery:1,triggerThreshold:.5,timeoutMs:3e4,concurrency:5})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"触发分析启动失败");await A({expectedRunId:"string"==typeof c?.run?.id?c.run.id:void 0})},aZ=async()=>{if(!a||!d?.id||null==e)throw Error("静态合规当前缺少 Skill 或版本信息。");let b=await (0,g.apiFetch)(`/api/skills/${encodeURIComponent(d.id)}/versions/${e}/evaluate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:a})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"静态合规启动失败");await z({expectedEvaluationId:"string"==typeof c.evaluationId?c.evaluationId:void 0})},a$=async a=>{let b=l,c=q,d=w,e=u,f=v,g=aw,h=l.some(a=>a.is_evaluating);a.includes("static")&&(c=await z({retries:1,retryDelayMs:800})??c),a.includes("trigger")&&(d=await A({retries:1,retryDelayMs:800})??d);let i=a.includes("gray")||a.includes("trace"),j=Date.now()+9e4,k=!1;for(;i&&Date.now()<j;){let c=!1;if(a.includes("gray")){let a=await C();e=a.summary,f=a.meta,g=a.busy,c=c||g}if(a.includes("trace")){let a=(b=await y({retries:1,retryDelayMs:800})).find(a=>an(a)===V),d=a?"number"==typeof a.answer_score?a.answer_score:a.answerScore:null,e=!!a&&!a.is_evaluating&&al(a);e&&null!=d&&am(a),h=!e,c=c||h}if(!c)break;await new Promise(a=>setTimeout(a,1500))}return i&&(g||h)&&(k=!0),{traces:b,staticSummary:c,triggerSummary:d,graySummary:e,grayTaskMeta:f,grayBusy:g,traceBusy:h,timedOut:k}},a_=async()=>{let a=aA.filter(a=>a.canRun&&aN.includes(a.key));if(0===a.length)return void K.toast.error("当前没有可一键测试的维度。");G(!0),aL("starting");try{let b=await Promise.allSettled(a.map(async a=>"gray"===a.key?aW():"trace"===a.key?aX():"trigger"===a.key?aY():"static"===a.key?aZ():void 0)),c=b.flatMap((b,c)=>"rejected"===b.status?[`${a[c].name}:${b.reason instanceof Error?b.reason.message:"启动失败"}`]:[]),d=b.flatMap((b,c)=>"fulfilled"===b.status?[a[c].key]:[]);c.length>0&&K.toast.error(c.join(";")),d.length>0&&K.toast.success(`已启动 ${d.length} 个测试任务`),aL(d.some(a=>"gray"===a||"trace"===a)?"running":"refreshing");let e=await a$(d);e.timedOut&&K.toast.warning("部分后台测试仍在运行,已先刷新当前诊断。"),aL("diagnosing");let f=aP({traces:e.traces,staticSummary:e.staticSummary,triggerSummary:e.triggerSummary,graySummary:e.graySummary,grayTaskMeta:e.grayTaskMeta,grayBusy:e.grayBusy,traceBusy:e.traceBusy,selectedDimensionsThisRun:d});f&&(aS.current=JSON.stringify(f),await aU(f,"smart-run"))}finally{aL("idle"),G(!1)}},a0=a=>{aO(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])},a1=aN.length,a2=!!V&&l.some(a=>an(a)===V&&a.is_evaluating),a3=F||"idle"!==aK||aw||a2,a4="starting"===aK?"启动中...":"running"===aK?"测试进行中...":"refreshing"===aK?"刷新结果中...":"diagnosing"===aK?"更新诊断中...":a3?"测试进行中...":`一键测试 ${a1} 项`,a5=P&&null!=O.avgPct?O.avgPct>=80?"正常":"需关注":"待分析",a6=P&&q?.latest?ap(q.latest.ranAt):"待扫描",a7=u?"insufficient"===u.scoring.decision?"样本不足":u.scoring.decisionLabel:"未配置",a8=u?.delta!=null?`${u.delta>0?"+":""}${u.delta}`:"--",a9=u?.scoring.totalScore!=null?`总分 ${u.scoring.totalScore}`:u?.b.avgScore!=null?`B 均分 ${u.b.avgScore}`:"待运行",ba=u?`${u.completedPairs||Math.min(u.a.total,u.b.total)}/${u.sampleCount||Math.max(u.a.total,u.b.total)} 样本`:"暂无样本",bb=u?`${u.repeatRounds} 轮`:"未运行",bc=u?.latestCompletedAt||u?.latestResultAt?ap(u.latestCompletedAt||u.latestResultAt):"未运行",bd=d&&null!=e?T(d.name,e):"B 版本",be=u?`${u.aLabel} vs ${u.bLabel}`:`无 Skill vs ${bd}`,bf=u?null==(H=u.pValue)?"待计算":H<.01?"p < 0.01 ✓✓":H<.05?"p < 0.05 ✓":`p = ${H.toFixed(3)}`:"待计算",bg="loading"===aI?"正在更新诊断":"llm"===aV.mode?`由 ${aV.modelLabel||"当前评测模型"} 生成`:"基础诊断";return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{className:"sa-hero",children:[(0,b.jsxs)("div",{className:`sa-hero-score ${aE}`,children:[(0,b.jsxs)("div",{className:"sa-hero-score-eyebrow",children:[(0,b.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("path",{d:"M7 1L13 12H1z"}),(0,b.jsx)("path",{d:"M7 5.5v3"}),(0,b.jsx)("circle",{cx:"7",cy:"10.5",r:".5",fill:"currentColor"})]}),(0,b.jsx)(L.Term,{id:"health-score",label:"综合健康分 · 置信加权"})]}),(0,b.jsxs)("div",{className:"sa-hero-score-body",children:[(0,b.jsx)("div",{className:"sa-hero-score-num",children:null==i?"--":i}),(0,b.jsx)("div",{className:"sa-hero-score-unit",children:"/ 100"}),(0,b.jsx)("div",{className:"sa-hero-score-tier",children:aF})]}),(0,b.jsxs)("div",{className:"sa-hero-coverage",style:{marginTop:14},children:[(0,b.jsxs)("div",{className:"sa-hero-coverage-label",children:[(0,b.jsx)("span",{children:(0,b.jsx)(L.Term,{id:"eval-coverage",label:"评估覆盖度"})}),(0,b.jsxs)("b",{children:[aB," / ",aC," 维 · ",Math.round(aB/aC*100),"%"]})]}),(0,b.jsxs)("div",{className:"sa-hero-coverage-bar",children:[(0,b.jsx)("div",{className:`sa-hero-coverage-seg${as?" on":""}`,style:{background:"var(--sa-warning)"},title:"A/B 测试(权重 40%)"}),(0,b.jsx)("div",{className:`sa-hero-coverage-seg${"待分析"!=(ae?Q>0?"需关注":"正常":"待分析")?" on":""}`,style:{background:"var(--sa-success)"},title:"用例分析(权重 30%)"}),(0,b.jsx)("div",{className:`sa-hero-coverage-seg${aq?" on":""}`,style:{background:"var(--sa-info, #6366f1)"},title:aq?`触发分析 \xb7 已评测(权重 20%)`:ao?"触发分析 · 待评测(权重 20%)":"触发分析 · 未配置(权重 20%)"}),(0,b.jsx)("div",{className:`sa-hero-coverage-seg${"待分析"!==a5?" on":""}`,style:{background:"var(--sa-purple)"},title:"静态合规(权重 10%)"})]})]})]}),(0,b.jsxs)("div",{className:"sa-hero-narr",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"sa-hero-narr-eyebrow",children:[(0,b.jsx)(L.Term,{id:"one-line-diagnosis",label:"一句话诊断"}),(0,b.jsx)("span",{className:"sa-hero-narr-ai",children:"loading"===aI||"llm"===aV.mode?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 14 14",fill:"currentColor",children:(0,b.jsx)("path",{d:"M8 1L1 8h5l-1 5 7-7h-5z"})}),"AI"]}):(0,b.jsx)(b.Fragment,{children:"基础"})}),"· ",bg]}),(0,b.jsxs)("div",{className:"sa-hero-narr-headline sa-hero-narr-split",children:[(0,b.jsxs)("span",{className:"sa-hero-narr-line sa-hero-narr-problem",children:[(0,b.jsx)("span",{className:"lbl",children:"问题"}),(0,b.jsx)("span",{children:aV.problem})]}),(0,b.jsxs)("span",{className:"sa-hero-narr-line sa-hero-narr-suggest",children:[(0,b.jsx)("span",{className:"lbl",children:"建议"}),(0,b.jsx)("span",{children:aV.suggestion})]})]})]}),(0,b.jsxs)("div",{className:"sa-hero-formula",children:[(0,b.jsx)("div",{className:"sa-hero-formula-label",children:"置信加权 · 权重 A/B 40% · 用例 30% · 触发 20% · 静态 10%(未跑维度不进分母)"}),"score = Σ(分 × 权重) ÷ Σ(已跑权重)",(0,b.jsx)("br",{}),"  = ",(0,b.jsx)("strong",{children:null==i?"—":i})]})]}),(0,b.jsxs)("div",{className:"sa-hero-cta",children:[(0,b.jsxs)("div",{className:"sa-hero-cta-eyebrow",children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"currentColor",children:(0,b.jsx)("path",{d:"M8 1L1 8h5l-1 5 7-7h-5z"})}),(0,b.jsx)(L.Term,{id:"smart-run",label:"Smart Run"})]}),(0,b.jsxs)("div",{className:"sa-hero-cta-title",children:[(0,b.jsx)("span",{children:"选择要一键测试的维度"}),(0,b.jsx)("a",{className:"sa-cta-toggleall",onClick:()=>{aO(a=>a.length===aM.length?[]:aM)},children:a1===aM.length&&aM.length>0?"全不选":"全选 / 反选"})]}),(0,b.jsxs)("div",{className:"sa-cta-list",children:[(0,b.jsxs)("label",{className:`sa-cta-row${!az?" disabled":""}`,title:az?"可触发详情页“重新分析”":"需先选择 Skill 与版本",children:[(0,b.jsx)("input",{type:"checkbox",checked:aN.includes("static"),onChange:()=>a0("static"),disabled:!az}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-purple)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsx)(L.Term,{id:"static-compliance",label:"静态合规"})," ",(0,b.jsx)("span",{className:"wpct",children:"10%"}),!az&&(0,b.jsx)("span",{className:"cfg-tag",children:"待扫描"})]}),az?(0,b.jsx)("span",{className:"ago",children:a6}):(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),E("static")},children:"前往评测 →"})]}),(0,b.jsxs)("label",{className:`sa-cta-row${!ar?" disabled":""}`,title:ao?(w?.itemCount??0)===0?"触发集为空,需先补充触发分析数据":"触发集已准备,可触发详情页“立即评测/立即复测”":"尚未配置触发集,需先到编辑器里起草或手填",children:[(0,b.jsx)("input",{type:"checkbox",checked:aN.includes("trigger"),onChange:()=>a0("trigger"),disabled:!ar}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-info, #6366f1)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsx)(L.Term,{id:"trigger-analysis",label:"触发分析"})," ",(0,b.jsx)("span",{className:"wpct",children:"20%"}),!ao&&(0,b.jsx)("span",{className:"cfg-tag",children:"未配置"}),ao&&!aq&&(0,b.jsx)("span",{className:"cfg-tag",children:"待评测"}),aq&&w?.latestRun&&(0,b.jsxs)("span",{className:"ago",children:[Math.round(100*w.latestRun.passRate),"% 通过"]})]}),(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),D()},children:ao?"打开编辑器 →":"前往配置 →"})]}),(0,b.jsxs)("label",{className:`sa-cta-row${!ak?" disabled":""}`,title:ak?"当前 Trace 可触发详情页“分析当前 Trace”":0===l.length?"暂无 Trace 可分析":"当前 Trace 缺少主 Skill 信息,详情页按钮不可点击",children:[(0,b.jsx)("input",{type:"checkbox",checked:aN.includes("trace"),onChange:()=>a0("trace"),disabled:!ak}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-success)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsx)(L.Term,{id:"case-analysis",label:"用例分析"})," ",(0,b.jsx)("span",{className:"wpct",children:"30%"}),!ak&&(0,b.jsx)("span",{className:"cfg-tag",children:"待分析"})]}),ak?(0,b.jsx)("span",{className:"ago",children:"测试当前 Trace"}):(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),E("trace")},children:"前往评测 →"})]}),(0,b.jsxs)("label",{className:`sa-cta-row sa-cta-row-ab${!ay?" disabled":""}`,title:ay?`A/B 版本:${be},可触发详情页“开始执行”`:aw?"当前 A/B 任务执行中,详情页“开始执行”按钮不可点击":0===av?"当前 A/B 任务缺少选中样本,需先进入详情页选择样本":"当前 A/B 任务尚未保存,需先进入详情页完成配置",children:[(0,b.jsx)("input",{type:"checkbox",checked:aN.includes("gray"),onChange:()=>a0("gray"),disabled:!ay}),(0,b.jsx)("span",{className:"dot",style:{"--cdot":"var(--sa-warning)"}}),(0,b.jsxs)("span",{className:"nm",children:[(0,b.jsxs)("span",{className:"sa-cta-mainline",children:[(0,b.jsx)(L.Term,{id:"ab-test",label:"A/B 测试"})," ",(0,b.jsx)("span",{className:"wpct",children:"40%"}),!ay&&(0,b.jsx)("span",{className:"cfg-tag",children:"未配置"})]}),(0,b.jsxs)("span",{className:"sa-cta-subline",children:[(0,b.jsx)("b",{children:be}),as&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:a7}),(0,b.jsx)("span",{children:a9}),(0,b.jsx)("span",{children:a8}),(0,b.jsx)("span",{children:bf}),(0,b.jsx)("span",{children:ba}),(0,b.jsx)("span",{children:bb})]})]})]}),ay?(0,b.jsx)("span",{className:"ago",children:bc}):(0,b.jsx)("a",{className:"cfg-link",href:"#",onClick:a=>{a.preventDefault(),E("gray")},children:"前往配置 →"})]})]}),(0,b.jsxs)("div",{className:"sa-hero-cta-meta",children:[(0,b.jsxs)("span",{children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),"预计 ",a1>0?`${5*a1} 分钟`:"—"]}),(0,b.jsxs)("span",{children:["已选 ",a1," / ",aM.length||0," 可运行项"]})]}),(0,b.jsxs)("div",{className:"sa-cta-actions",children:[(0,b.jsxs)("button",{className:"sa-hero-cta-btn",onClick:()=>{a_()},disabled:0===a1||a3,children:[(0,b.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"currentColor",children:(0,b.jsx)("path",{d:"M3 1.5v11l9-5.5z"})}),a4]}),(0,b.jsxs)("a",{href:aD,className:"sa-hero-cta-btn-ghost",children:["前往 Skill 优化器",(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})})]})]})]})]}),(0,b.jsxs)("div",{className:"sa-section-head",children:[(0,b.jsxs)("h2",{children:[(0,b.jsx)(L.Term,{id:"four-dim-eval",label:"4 维评估能力"})," ",(0,b.jsxs)("span",{className:"count",children:[aB," / ",aC," 已配置 · 按前序关系排序"]})]}),(0,b.jsx)("span",{className:"head-meta",children:"点击卡片进入详情 · 百分制分数"})]}),(0,b.jsxs)("section",{className:"sa-cards",children:[(0,b.jsxs)("div",{className:"sa-card k-static",onClick:()=>E("static"),children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.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,b.jsx)("path",{d:"M9.5 2.5v3h3"}),(0,b.jsx)("path",{d:"M5.5 9l1.5 1.5 3-3"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"静态合规"}),(0,b.jsx)("small",{children:"写得规范吗?能被正确加载吗?"})]}),(0,b.jsx)("span",{className:`sa-card-status ${"正常"===a5?"ok":"需关注"===a5?"warn":"neutral"}`,children:a5})]}),(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:P&&null!=O.avgPct?"sa-card-score-num":"sa-card-score-empty",children:P&&null!=O.avgPct?O.avgPct:"--"}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:P&&null!=O.avgPct?"/ 100":"待分析"})]}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"已评估维度"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:P?`${O.scoredCount} / ${J.STATIC_EVAL_STANDARDS.length} 项`:"尚未评估"})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"未评估"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:P?J.STATIC_EVAL_STANDARDS.length-O.scoredCount>0?`${J.STATIC_EVAL_STANDARDS.length-O.scoredCount} 项`:"无":"—"})]})]}),az?(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),P&&q?.latest?ap(q.latest.ranAt):"点击进入静态评估详情"]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),E("static")},children:"查看详情 →"})]}):(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),E("static")},children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"打开评测页扫描"]})]}),(0,b.jsxs)("div",{className:"sa-card k-trigger",onClick:a=>{a.target.closest("a,button")||D()},children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"4.5"}),(0,b.jsx)("path",{d:"M10.5 10.5 13.5 13.5"}),(0,b.jsx)("path",{d:"M5 7l1.5 1.5L9 6"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"触发分析"}),(0,b.jsx)("small",{children:"该触发的时候,触发了吗?"})]}),aq&&w?.latestRun?(0,b.jsx)("span",{className:`sa-card-status ${w.latestRun.passRate>=.8?"ok":w.latestRun.passRate>=.6?"warn":"err"}`,children:w.latestRun.passRate>=.8?"正常":w.latestRun.passRate>=.6?"需关注":"急需优化"}):ao?(0,b.jsx)("span",{className:"sa-card-status warn",children:"待评测"}):(0,b.jsx)("span",{className:"sa-card-status warn",children:"未配置"})]}),(0,b.jsx)($,{counts:N,hint:"触发分析评测的实时调度状态 (taskType=trigger-eval)"}),aq&&w?.latestRun?(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:"sa-card-score-num",children:Math.round(100*w.latestRun.passRate)}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:"/ 100"})]}):(0,b.jsx)("div",{className:"sa-card-score sa-card-score-placeholder",children:(0,b.jsx)("span",{className:"sa-card-score-placeholder-text",children:ao?"待评测":"尚未配置"})}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"触发集"}),(0,b.jsx)("div",{className:`sa-card-stat-val${ao?"":" muted"}`,children:ao?`${w?.itemCount??0} 条 \xb7 正例 ${w?.positiveCount??0}`:"未创建"})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:aq?"TPR / FPR":"影响"}),(0,b.jsx)("div",{className:`sa-card-stat-val${aq?"":" muted"}`,children:aq&&w?.latestRun?`${Math.round(100*w.latestRun.truePositiveRate)}% / ${Math.round(100*w.latestRun.falsePositiveRate)}%`:"不计入总分 (-20%)"})]})]}),aq&&w?.latestRun?(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),ap(w.latestRun.ranAt)," · v",w.latestRun.skillVersion]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),D()},href:"#",children:"查看详情 →"})]}):(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),D()},disabled:x,children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),ao?"打开编辑器评测":"前往配置触发集"]})]}),(0,b.jsxs)("div",{className:"sa-card k-batch",onClick:a=>{a.target.closest("a,button")||E("trace")},children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("rect",{x:"2",y:"2.5",width:"5",height:"5",rx:"1"}),(0,b.jsx)("rect",{x:"9",y:"2.5",width:"5",height:"5",rx:"1"}),(0,b.jsx)("rect",{x:"2",y:"9",width:"5",height:"5",rx:"1"}),(0,b.jsx)("rect",{x:"9",y:"9",width:"5",height:"5",rx:"1"}),(0,b.jsx)("path",{d:"M3.6 5l1 1L5.8 4.8"}),(0,b.jsx)("path",{d:"M10.6 5l1 1 1.2-1.2"}),(0,b.jsx)("path",{d:"M3.6 11.5l1 1L5.8 11.3"}),(0,b.jsx)("path",{d:"M10.6 11.5l1 1 1.2-1.2"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"用例分析"}),(0,b.jsx)("small",{title:W?h||"未命名评测任务":void 0,children:W?`评测任务:${h||"未命名任务"}`:"做的怎么样?结果 & 轨迹分析"})]}),(0,b.jsx)("span",{className:`sa-card-status ${"正常"===ad?"ok":"需关注"===ad?"warn":"neutral"}`,children:ad})]}),(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:"sa-card-score-num",children:W?ac??"--":"--"}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:W?null==ac?"待评测":"/ 100":"未选择评测任务"})]}),(0,b.jsx)("div",{className:"sa-card-stats",children:(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",title:"当前评测任务下结果分 + 轨迹分双双就绪的记录数;只跑一边的不计入",children:"已评测用例"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:W?`${aa} / ${ab}`:"未选择评测任务"})]})}),ak?(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),ag?ap(ag):"点击进入用例分析详情"]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),E("trace")},children:"查看详情 →"})]}):(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),E("trace")},children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"打开评测页扫描"]})]}),(0,b.jsxs)("div",{className:"sa-card k-gray",onClick:a=>{a.target.closest("a,button")||E("gray")},children:[(0,b.jsxs)("div",{className:"sa-card-head",children:[(0,b.jsx)("span",{className:"sa-card-icon",children:(0,b.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("circle",{cx:"5",cy:"8",r:"3"}),(0,b.jsx)("circle",{cx:"11",cy:"8",r:"3"}),(0,b.jsx)("path",{d:"M5 5v6M11 5v6",opacity:".4"})]})}),(0,b.jsxs)("div",{className:"sa-card-title",children:[(0,b.jsx)("span",{className:"t-row",children:"A/B 测试"}),(0,b.jsx)("small",{children:"这个 skill 真的带来增益了吗?"})]}),(0,b.jsx)("span",{className:`sa-card-status ${u?"reject"===u.scoring.decision?"err":"direct-release"===u.scoring.decision||"monitor-release"===u.scoring.decision?"ok":"neutral":"warn"}`,children:a7})]}),(0,b.jsx)($,{counts:I,hint:"本 skill 当前所有 opencode 后台任务的实时调度状态 (A/B 跑评测时涉及 trajectory / task-completion / custom-llm 多类型)"}),as?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"sa-card-score",children:[(0,b.jsx)("span",{className:"sa-card-score-num",children:u?.scoring.totalScore??"--"}),(0,b.jsx)("span",{className:"sa-card-score-unit",children:"/ 100"})]}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"能力"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:u?.scoring.capability.deltaPp==null?"—":`${u.scoring.capability.deltaPp>0?"+":""}${u.scoring.capability.deltaPp}pp`})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"成本"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:u?.scoring.cost.deltaTokenPct==null?"—":`${u.scoring.cost.deltaTokenPct>0?"+":""}${u.scoring.cost.deltaTokenPct}% Token`})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"稳定性"}),(0,b.jsx)("div",{className:"sa-card-stat-val",children:u?.scoring.stability.invokeRate==null?"—":`${u.scoring.stability.invokeRate}% 触发`})]})]}),(0,b.jsxs)("div",{className:"sa-card-foot",children:[(0,b.jsxs)("span",{className:"sa-card-foot-meta",children:[(0,b.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,b.jsx)("circle",{cx:"7",cy:"7",r:"5"}),(0,b.jsx)("path",{d:"M7 4v3l2 1",strokeLinecap:"round"})]}),bc," · 入总分 = v2.2 最终评分 ",u?.scoring.totalScore??"--"]}),(0,b.jsx)("a",{className:"sa-card-foot-link",onClick:a=>{a.preventDefault(),E("gray")},children:"查看详情 →"})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"sa-card-score sa-card-score-placeholder",children:(0,b.jsx)("span",{className:"sa-card-score-placeholder-text",children:"尚未配置"})}),(0,b.jsxs)("div",{className:"sa-card-stats",children:[(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"实验版本"}),(0,b.jsx)("div",{className:"sa-card-stat-val muted",children:bd})]}),(0,b.jsxs)("div",{className:"sa-card-stat",children:[(0,b.jsx)("div",{className:"sa-card-stat-label",children:"影响"}),(0,b.jsx)("div",{className:"sa-card-stat-val muted",children:"不计入总分 (-40%)"})]})]}),(0,b.jsxs)("button",{className:"sa-card-empty-cta",onClick:a=>{a.stopPropagation(),E("gray")},children:[(0,b.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",children:(0,b.jsx)("path",{d:"M3 7h8M8 4l3 3-3 3"})}),"前往配置 A/B 测试"]})]})]})]})]})}function aa({skill:a,version:d,user:e,traces:f,loading:i,prefillTraceId:j,selectedTraceId:k,onSelectedTraceChange:l,onBack:m,onReload:n,onOptimize:o,onBatchAnalyze:p,traceEvaluationBatchId:q,traceEvaluationBatchTitle:r,onOpenEvalBatchDialog:t,evalTaskOptions:w,onSelectEvalBatch:x,datasets:y,selectedDatasetIds:A,onSelectedDatasetIdsChange:C,evaluatorOptions:D,selectedEvaluatorIds:E,onSelectedEvaluatorIdsChange:G}){let H,I,J,K,[L,M]=(0,c.useState)(""),[N,O]=(0,c.useState)("all"),[P,Q]=(0,c.useState)(!0),[R,S]=(0,c.useState)(!1),[T,U]=(0,c.useState)(!0),V=B(e,q,5e3),W=B(e,q,5e3,{latestByCase:!1}),[X,Y]=(0,c.useState)([]),[Z,$]=(0,c.useState)(new Map),_=(0,c.useMemo)(()=>e&&a?.name?`eval-deleted-traces:${e}:${a.name}:${d??"all"}`:"",[e,a?.name,d]),[aa,ab]=(0,c.useState)(new Set);(0,c.useEffect)(()=>{if(!_)return void ab(new Set);try{let a=localStorage.getItem(_),b=a?JSON.parse(a):[];ab(new Set(Array.isArray(b)?b.map(String):[]))}catch{ab(new Set)}},[_]);let ac=(0,c.useCallback)(a=>{if(ab(a),_)try{localStorage.setItem(_,JSON.stringify(Array.from(a)))}catch{}},[_]);(0,c.useEffect)(()=>{0!==Z.size&&$(a=>{let b=!1,c=new Map(a);for(let a of f){let d=a.task_id||a.taskId;d&&c.has(d)&&!1===a.is_evaluating&&(c.delete(d),b=!0)}return b?c:a})},[f]);let[ad,ae]=(0,c.useState)(new Map),[ag,ah]=(0,c.useState)(new Set),[aj,ak]=(0,c.useState)(q||"");(0,c.useEffect)(()=>{Y([]),$(new Map),ae(new Map),ah(new Set),ak(q||"")},[q]);let ap=aj===(q||""),[aq,ar]=(0,c.useState)("trace"),[as,at]=(0,c.useState)(!1),[au,av]=(0,c.useState)(null),aw=(0,c.useRef)(null),[ax,ay]=(0,c.useState)(new Set),[az,aA]=(0,c.useState)(!1),aB=(0,c.useMemo)(()=>{let a=L.trim().toLowerCase();return f.filter(b=>{let c=an(b),d=al(b),e=am(b),f=null!=("number"==typeof b.answer_score?b.answer_score:"number"==typeof b.answerScore?b.answerScore:null)&&null!=e;return("analyzed"!==N||!!f)&&("pending"!==N||!f)&&("deviation"!==N||!!d&&null!=e&&!(e>=.7))&&(!a||c.toLowerCase().includes(a)||(b.query||"").toLowerCase().includes(a))})},[L,N,f]),[aC,aD]=(0,c.useState)(0),aE=Math.max(1,Math.ceil(aB.length/30));(0,c.useEffect)(()=>{aD(0)},[L,N,aB.length]);let aF=(0,c.useMemo)(()=>aB.slice(30*aC,(aC+1)*30),[aB,aC]);(0,c.useEffect)(()=>{j&&f.some(a=>an(a)===j)?l(j):k&&f.some(a=>an(a)===k)||!aB[0]||l(an(aB[0]))},[aB,l,j,k,f]);let aG=(0,c.useMemo)(()=>f.find(a=>an(a)===k)||null,[k,f]),aH=aG?ai(aG):null;a?.name&&aH?.name&&(aH.name,a.name);let aI=(0,c.useCallback)(async()=>{if(!k||!e)return av(null),null;try{let a=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(e)}&taskId=${encodeURIComponent(k)}&limit=1`),b=await a.json(),c=(Array.isArray(b?.results)?b.results:[])[0];return av(c||null),c||null}catch{return null}},[k,e]);(0,c.useEffect)(()=>(aI(),()=>{aw.current&&(clearTimeout(aw.current),aw.current=null)}),[aI]),(0,c.useEffect)(()=>{if(!e||0===f.length)return;let a=!1;return(async()=>{try{let b=q?`&runId=${encodeURIComponent(q)}&latestByCase=1`:"",c=await (0,g.apiFetch)(`/api/eval/trajectory/results?user=${encodeURIComponent(e)}${b}&limit=500`);if(!c.ok)return;let d=await c.json(),h=Array.isArray(d?.results)?d.results:[];if(a)return;let i=new Set(f.map(an)),j=new Set,l=[];for(let a of h)a.taskId&&i.has(a.taskId)&&(j.has(a.taskId)||(j.add(a.taskId),l.push(a)));let m=l.filter(a=>"pending"===a.status||"running"===a.status),o=l.filter(a=>("done"===a.status||"failed"===a.status)&&null==a.trajectoryScore&&null==a.resultEvaluationScore&&(!!(a.errorMessage||a.rawAnalysis?.resultEvaluationError||a.rawAnalysis?.trajectoryError)||"failed"===a.status));if(0===m.length&&0===o.length||(m.length>0&&$(a=>{let b=new Map(a);for(let a of m){if(!a.taskId||b.has(a.taskId))continue;let c=a.createdAt?new Date(a.createdAt).getTime():Date.now();b.set(a.taskId,c)}return b}),o.length>0&&ae(a=>{let b=new Map(a);for(let a of o){if(!a.taskId)continue;let c=String(a.errorMessage||a.rawAnalysis?.resultEvaluationError||a.rawAnalysis?.trajectoryError||"评测异常").trim();b.set(a.taskId,c)}return b}),S(!0),0===m.length))return;let p=0,r=setInterval(()=>{n(),(++p>=30||a)&&clearInterval(r)},3e3);k&&m.some(a=>a.taskId===k)&&aJ()}catch{}})(),()=>{a=!0}},[e,f.length,q]);let aJ=(0,c.useCallback)(function a(){aw.current&&clearTimeout(aw.current),aw.current=setTimeout(async()=>{let b=await aI();b&&("pending"===b.status||"running"===b.status)&&a()},5e3)},[aI]);(0,c.useEffect)(()=>(au&&("pending"===au.status||"running"===au.status)&&aJ(),()=>{aw.current&&(clearTimeout(aw.current),aw.current=null)}),[au,aJ]);let aK=az||au?.status==="pending"||au?.status==="running",aL=ax.size>0?Array.from(ax):k?[k]:[],aM=async()=>{if(aK||0===aL.length||!q)return;let a=Date.now();$(b=>{let c=new Map(b);for(let b of aL)c.set(b,a);return c}),ah(a=>{let b=new Set(a);for(let a of aL)b.add(a);return b}),ae(a=>{if(0===a.size)return a;let b=new Map(a);for(let a of aL)b.delete(a);return b}),aA(!0);try{if(p){let a=await p(aL);if(a){let b=a.trajectoryErrors||new Map,c=(a.resultErrors||[]).join("\n");(b.size>0||c)&&ae(a=>{let d=new Map(a);for(let a of aL){let e=[];c&&e.push(`结果评测:${c}`);let f=b.get(a);f&&e.push(`轨迹评测:${f}`),e.length>0&&d.set(a,e.join("\n"))}return d})}}await aI(),aJ(),n()}finally{aA(!1)}};aK||ax.size>0&&ax.size;let aN=aK||0===aL.length||0===ax.size&&!aH?.name||!q,aO=(0,b.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,b.jsx)("span",{style:{fontSize:11,fontWeight:700,color:"#52525b"},children:"添加评测对象(Trace)"}),(0,b.jsxs)("div",{style:{display:"inline-flex",background:"#fff",borderRadius:5,padding:3,gap:2,border:"1px solid #e5e7eb"},children:[(0,b.jsx)("button",{type:"button",onClick:()=>ar("trace"),title:"直接挑选现成的执行记录(Trace)来评测",style:{border:0,padding:"4px 12px",background:"trace"===aq?"#2563eb":"transparent",color:"trace"===aq?"#fff":"#52525b",borderRadius:4,fontSize:12,fontWeight:600,cursor:"pointer"},children:"📊 选已有 Trace"}),(0,b.jsx)("button",{type:"button",onClick:()=>ar("dataset"),title:"用数据集 case 执行 skill 生成新 Trace,再评测(比「选已有」多一步生成)",style:{border:0,padding:"4px 12px",background:"dataset"===aq?"#2563eb":"transparent",color:"dataset"===aq?"#fff":"#52525b",borderRadius:4,fontSize:12,fontWeight:600,cursor:"pointer"},children:"🗄 用数据集生成"})]}),(0,b.jsx)("span",{style:{flex:1}}),(0,b.jsx)("span",{style:{fontSize:11,color:"#71717a"},children:"两种方式都把 Trace 评测加入当前评测任务,统一在下方「② 评测执行」展示"})]}),aP=(0,b.jsxs)("div",{style:{border:"1px solid #e5e7eb",borderRadius:6,padding:"10px 12px",marginBottom:12,background:"#fff",display:"flex",flexDirection:"column",gap:10},children:[(0,b.jsx)(u,{label:"数据集",placeholder:"选择参考数据集(可多选)",emptyHint:"暂无数据集(可在数据集中心创建)",accent:"#2563eb",options:(y||[]).map(a=>({id:a.id,name:a.name,meta:`${Array.isArray(a.cases)?a.cases.length:0} 例`})),selectedIds:A||[],onChange:a=>C?.(a)}),(0,b.jsx)(u,{label:"评估器",placeholder:"选择评估器(可多选)",emptyHint:"暂无评估器",accent:"#7E22CE",options:(D||[]).map(a=>({id:a.id,name:a.name})),selectedIds:E||[],onChange:a=>G?.(a)}),(0,b.jsx)("div",{style:{fontSize:11,color:"#a1a1aa"},children:"数据集作为评测参考集(按 query 匹配 case 取预期结果);评估器多选决定「开始分析」时调用哪些评估器。"})]}),aQ=(0,b.jsx)(v,{tasks:w||[],selectedRunId:q,selectedTitle:r,onSelect:a=>x?.(a),onCreateNew:()=>t?.()}),aR=f.map(a=>{let b="number"==typeof a.answer_score?a.answer_score:"number"==typeof a.answerScore?a.answerScore:null,c=null==b?null:b<=1?Math.round(100*b):Math.round(b),d="number"==typeof a.trajectory_score?a.trajectory_score:"number"==typeof a.trajectoryScore?a.trajectoryScore:null,e=null!=d?d:am(a);return{trace:a,id:an(a),query:a.query||"(无 query)",resultScore:c,trajScore:null==e?null:Math.round(100*e),isEvaluating:!0===a.is_evaluating,lastEvalStatus:a.last_eval_status??null,lastEvalError:a.last_eval_error??null}}),aS=a=>a.isEvaluating||ap&&Z.has(a.id)?"pending":"failed"===a.lastEvalStatus||ap&&ad.has(a.id)?"failed":null!=a.resultScore&&null!=a.trajScore?"done":null!=a.resultScore||null!=a.trajScore?"partial":"idle",aT=aR.filter(a=>!aa.has(a.id)&&!!q&&(V.has(a.id)||ap&&(Z.has(a.id)||ad.has(a.id)||ag.has(a.id)))),aU=aT.map(a=>{let b=V.get(a.id);return{resultScore:b?.resultScore??null,trajScore:b?.trajScore??null}}).filter(a=>"number"==typeof a.resultScore&&"number"==typeof a.trajScore),aV=aT.length,aW=aU.length,aX=0===aU.length?null:Math.round(aU.reduce((a,b)=>a+b.resultScore,0)/aU.length),aY=0===aU.length?null:Math.round(aU.reduce((a,b)=>a+b.trajScore,0)/aU.length),aZ=null==aX||null==aY?null:Math.round((aX+aY)/2),a$=null==aZ?"warn":aZ>=80?"good":aZ>=60?"warn":"bad",a_=q?Array.from(V.entries()).filter(([a])=>!aa.has(a)).map(([,a])=>({resultScore:a.resultScore??null,trajScore:a.trajScore??null})):[],a0=a_.filter(a=>"number"==typeof a.resultScore&&"number"==typeof a.trajScore),a1=a0.length,a2=a_.length,a3=0===a1?null:Math.round(a0.reduce((a,b)=>a+b.resultScore,0)/a1),a4=0===a1?null:Math.round(a0.reduce((a,b)=>a+b.trajScore,0)/a1),a5=null==a3||null==a4?null:Math.round((a3+a4)/2),a6=null==a5?"warn":a5>=80?"good":a5>=60?"warn":"bad",a7=a0.filter(a=>(a.resultScore+a.trajScore)/2>=60).length,a8=0===a1?0:Math.round(a7/a1*100),a9=X.filter(a=>a.evaluatorRunId===q&&(!a.executionTraceId||!aa.has(a.executionTraceId))).map(a=>a.executionTraceId&&!a.resultId&&ap&&Z.has(a.executionTraceId)?{...a,status:"evaluating",resultId:void 0,evaluationTraceId:void 0,resultEvalTraceId:void 0,trajEvalTraceId:void 0,resultScore:null,trajScore:null}:a),ba=new Set(a9.map(a=>a.caseId).filter(Boolean)),bb=new Set(a9.map(a=>a.executionTraceId).filter(Boolean)),bc=aT.filter(a=>{let b=V.get(a.id)||W.get(a.id);return!bb.has(a.id)&&(!b?.caseId||!ba.has(b.caseId))}).map(a=>{let b=V.get(a.id),c=!!q,d=c?b?.resultScore??null:a.resultScore,e=c?b?.trajScore??null:a.trajScore,f=(a=>{if(!q)return aS(a);let b=V.get(a.id);return b?"failed"===b.status?"failed":"pending"===b.status||"running"===b.status?"pending":"done"===b.status?null!=b.resultScore&&null!=b.trajScore?"done":null!=b.resultScore||null!=b.trajScore?"partial":"failed":aS({...a,resultScore:b.resultScore??null,trajScore:b.trajScore??null}):aS(a)})(a),g="done"===f?"done":"failed"===f?"failed":"partial"===f?"partial":"evaluating",h=(ap?ad.get(a.id):void 0)||b?.errorMessage||void 0;return b?.status==="failed"&&"done"!==g&&(g="failed"),"idle"===f&&!b&&ap&&ag.has(a.id)&&!Z.has(a.id)&&(g="failed",h=h||"未在本次评测任务产出评测结果(可能该 trace 未匹配到 case 或未引用当前 skill)"),{id:a.id,caseId:b?.caseId,caseLabel:a.query||a.id.slice(0,12),caseTitle:a.query||a.id,executionTraceId:a.id,evaluationTraceId:b?.evaluationTraceId,resultEvalTraceId:b?.resultEvalTraceId,trajEvalTraceId:b?.trajEvalTraceId,datasetId:b?.datasetId,evaluatorRunId:q||void 0,resultId:b?.resultId,status:g,resultScore:d,trajScore:e,errorMsg:h}}),bd=new Set([...a9.map(a=>a.executionTraceId).filter(Boolean),...bc.map(a=>a.executionTraceId).filter(Boolean)]),be=[...a9,...bc,...Array.from(V.values()).filter(a=>a.taskId&&!aa.has(a.taskId)&&!bd.has(a.taskId)&&(!a.caseId||!ba.has(a.caseId))).map(a=>({id:a.taskId,caseId:a.caseId,caseLabel:a.caseId||a.taskId,caseTitle:a.caseId||a.taskId,executionTraceId:a.taskId,evaluationTraceId:a.evaluationTraceId,resultEvalTraceId:a.resultEvalTraceId,trajEvalTraceId:a.trajEvalTraceId,evaluatorRunId:q||void 0,resultId:a.resultId,datasetId:a.datasetId,status:"done"===a.status?"done":"failed"===a.status?"failed":"evaluating",resultScore:a.resultScore??null,trajScore:a.trajScore??null,errorMsg:a.errorMessage}))];return(0,b.jsxs)("section",{className:"sa-detail",children:[(0,b.jsx)(af,{title:"用例分析",subtitle:`${a?.name||"未选择 Skill"}${null!=d?` \xb7 v${d}`:""}`,badge:"LLM Judge",onBack:m,onOptimize:o}),"trace"===aq&&(0,b.jsxs)(s.SectionShell,{num:1,variant:"config",title:"配置",desc:"该 skill 版本关联的全部 trace(含已评测和未评测);勾选 → 到 ② 触发分析",open:P,onToggle:()=>Q(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"用例来源"}),(0,b.jsx)("code",{children:"从 Trace"}),(0,b.jsxs)("span",{children:["· 关联 ",(0,b.jsx)("code",{children:f.length})," 条"]}),(0,b.jsxs)("span",{children:["· 已评测 ",(0,b.jsx)("code",{children:a1})]})]}),actions:aQ,children:[aP,aO,(0,b.jsx)("div",{className:"sa-trace-picker",style:{display:"block"},children:(0,b.jsxs)("aside",{className:"sa-trace-list","aria-label":"该 Skill 的 Trace",style:{width:"100%",maxWidth:"none"},children:[(0,b.jsxs)("div",{className:"sa-trace-list-head",children:[(0,b.jsx)("div",{className:"sa-trace-list-title",children:(0,b.jsxs)("h3",{children:["该 Skill 的 Trace ",(0,b.jsxs)("small",{children:["(",f.length,")"]})]})}),(0,b.jsx)("input",{value:L,onChange:a=>M(a.target.value),placeholder:"搜索 query 或 taskId..."}),(0,b.jsxs)("div",{className:"sa-tabs",children:[(0,b.jsxs)("button",{className:"all"===N?"active":"",onClick:()=>O("all"),children:["全部 ",f.length]}),(0,b.jsx)("button",{className:"analyzed"===N?"active":"",onClick:()=>O("analyzed"),children:"已评估"}),(0,b.jsx)("button",{className:"pending"===N?"active":"",onClick:()=>O("pending"),children:"未评估"}),(0,b.jsx)("button",{className:"deviation"===N?"active":"",onClick:()=>O("deviation"),children:"高偏离"})]}),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:11,color:"var(--sa-muted)",marginTop:6,flexWrap:"wrap"},children:[(0,b.jsxs)("span",{children:["已勾选 ",(0,b.jsx)("b",{style:{color:"var(--sa-text)"},children:ax.size})]}),(0,b.jsx)("button",{type:"button",onClick:()=>ay(new Set([...ax,...aF.map(an)])),style:{background:"transparent",border:"none",color:"var(--sa-primary)",cursor:"pointer",fontSize:11,padding:0},title:`勾选当前页 ${aF.length} 条 (跨页不影响)`,children:"全选本页"}),aB.length>aF.length&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"·"}),(0,b.jsxs)("button",{type:"button",onClick:()=>ay(new Set(aB.map(an))),style:{background:"transparent",border:"none",color:"var(--sa-primary)",cursor:"pointer",fontSize:11,padding:0},title:`勾选所有 ${aB.length} 条 (跨所有页)`,children:["全选所有 (",aB.length,")"]})]}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("button",{type:"button",onClick:()=>ay(new Set),disabled:0===ax.size,style:{background:"transparent",border:"none",color:0===ax.size?"var(--sa-muted)":"var(--sa-primary)",cursor:0===ax.size?"not-allowed":"pointer",fontSize:11,padding:0},children:"清空"})]}),aE>1&&(0,b.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,b.jsxs)("span",{children:["第 ",(0,b.jsx)("b",{style:{color:"var(--sa-text)"},children:aC+1})," / ",aE," 页 · 显示 ",(0,b.jsxs)("b",{children:[30*aC+1,"-",Math.min((aC+1)*30,aB.length)]})," / 共 ",(0,b.jsx)("b",{children:aB.length})," 条"]}),(0,b.jsxs)("div",{style:{display:"flex",gap:4},children:[(0,b.jsx)("button",{type:"button",onClick:()=>aD(0),disabled:0===aC,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:0===aC?"not-allowed":"pointer",color:0===aC?"var(--sa-muted)":"var(--sa-text)"},title:"首页",children:"«"}),(0,b.jsx)("button",{type:"button",onClick:()=>aD(Math.max(0,aC-1)),disabled:0===aC,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:0===aC?"not-allowed":"pointer",color:0===aC?"var(--sa-muted)":"var(--sa-text)"},title:"上一页",children:"‹"}),(0,b.jsx)("button",{type:"button",onClick:()=>aD(Math.min(aE-1,aC+1)),disabled:aC>=aE-1,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:aC>=aE-1?"not-allowed":"pointer",color:aC>=aE-1?"var(--sa-muted)":"var(--sa-text)"},title:"下一页",children:"›"}),(0,b.jsx)("button",{type:"button",onClick:()=>aD(aE-1),disabled:aC>=aE-1,style:{border:"1px solid var(--sa-line)",background:"#fff",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:aC>=aE-1?"not-allowed":"pointer",color:aC>=aE-1?"var(--sa-muted)":"var(--sa-text)"},title:"末页",children:"»"})]})]}),0===(H=f.filter(a=>ai(a)?.version==null).length)?null:(0,b.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:["⚠ 当前列表共 ",f.length," 条,其中 ",(0,b.jsx)("b",{children:H})," 条未绑定版本,只在「全部」下可见"]})]}),(0,b.jsxs)("div",{className:"sa-trace-list-body",children:[i&&(0,b.jsxs)("div",{className:"sa-empty-small",children:["正在加载 ",(0,b.jsx)("b",{children:a?.name||""})," 的执行链路…"]}),!i&&0===aB.length&&(0,b.jsx)("div",{className:"sa-empty-small",children:"暂无匹配 Trace"}),aF.map(a=>{let c,d=an(a),e="number"==typeof a.answer_score?a.answer_score:"number"==typeof a.answerScore?a.answerScore:null,f=am(a),g=null!=e&&null!=f,i=ax.has(d),j=ai(a)?.version??null;return(0,b.jsxs)("div",{role:"button",tabIndex:0,className:`sa-trace-row ${k===d?"active":""}`,onClick:()=>l(d),onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),l(d))},children:[(0,b.jsx)("label",{onClick:a=>a.stopPropagation(),style:{display:"inline-flex",alignItems:"center",marginRight:4,cursor:"pointer"},title:"勾选后顶部「分析」按钮会批量启动选中的所有 Trace",children:(0,b.jsx)("input",{type:"checkbox",checked:i,onChange:()=>{ay(a=>{let b=new Set(a);return b.has(d)?b.delete(d):b.add(d),b})},onClick:a=>a.stopPropagation(),style:{margin:0,cursor:"pointer"}})}),(0,b.jsx)("span",{className:`sa-score-dot ${g?"ok":"pending"}`,title:g?"已评估(结果分 + 轨迹分均就绪)":"未评估(结果分 / 轨迹分至少缺一个)",children:g?"✓":"○"}),(0,b.jsxs)("span",{className:"sa-trace-text",children:[(0,b.jsxs)("span",{className:"sa-trace-id",children:[d,"ab"===(c=function(a){if(!a)return"real";let b=a.trim();return"grayscale-skill-agent"===b||"grayscale-baseline-agent"===b?"ab":"skill-debug-executor"===b||"batch-eval-agent"===b?"batch":h.has(b)?"system":"real"}(a.agentName||a.agent))?(0,b.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"===c?(0,b.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,b.jsx)("small",{children:ao(a.timestamp)})]}),(0,b.jsx)("span",{className:"sa-trace-query",children:a.query||"无输入内容"}),(0,b.jsxs)("span",{className:"sa-trace-sub",children:[a.framework||"Unknown",a.timeCost?` \xb7 ${a.timeCost}`:"",g?" · 已评估":" · 未评估",null!=j?(0,b.jsxs)("span",{title:`已绑定 v${j}——在版本筛选选 v${j} 才会看到这条`,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",j]}):(0,b.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:"未绑定版本"})]})]})]},d)})]})]})}),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:14,paddingTop:14,borderTop:"1px solid var(--ev-line)"},children:[(0,b.jsx)("button",{type:"button",onClick:aM,disabled:aN,style:{padding:"9px 22px",background:aN?"var(--ev-line-strong)":"var(--ev-info)",color:"#fff",border:"none",borderRadius:6,fontSize:14,fontWeight:700,cursor:aN?"not-allowed":"pointer",opacity:aN?.6:1},title:q?aN?"请先在上方勾选 trace(且 trace 有主 skill)":"对勾选的 trace 直接开始评测":'请先在上方"评测任务"里新建或选择一个评测任务',children:aK?"评测中…":ax.size>0?`▶ 开始评测(${ax.size} 条)`:"▶ 开始评测"}),(0,b.jsx)("span",{style:{fontSize:15,fontWeight:700,color:q?"var(--ev-info)":"#EA580C"},children:q?"勾选 trace 后开始评测;进度见 ② 评测执行":"请先在上方「评测任务」新建或选择一个任务,再开始评测"})]})]}),"dataset"===aq&&(0,b.jsx)("div",{className:"debug-root",style:{background:"transparent"},children:(0,b.jsx)(F,{newTaskTrigger:0,historyPanelTrigger:0,controlled:!0,hideExecAndResult:!0,topConfigSlot:(0,b.jsxs)(b.Fragment,{children:[aP,aO]}),headerActions:aQ,controlledDatasetIds:A,controlledEvaluatorIds:E,controlledEvalBatchId:q,controlledEvalBatchTitle:r,controlledSkillId:a?.id,controlledVersionId:a?.versions?.find(a=>a.version===d)?.id||"",onExecutionRecordsChange:Y})}),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s.SectionShell,{num:2,variant:"exec",title:"评测执行",desc:"对勾选的 trace 触发结果 + 轨迹双分析;实时展示评测进度,下方表列已评测 trace,点「评测结果」列查看逐条评测详情",open:R,onToggle:()=>S(a=>!a),summary:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"已评测"}),(0,b.jsxs)("code",{children:[aW," / ",aV]}),null!=aZ&&(0,b.jsxs)("span",{children:["· 平均评分 ",(0,b.jsxs)("b",{style:{color:"good"===a$?"var(--ev-success)":"bad"===a$?"var(--ev-error)":"var(--ev-warning)"},children:[aZ," 分"]})]}),(I=be.filter(a=>"pending"===a.status||"executing"===a.status||"executed"===a.status||"evaluating"===a.status).length)>0?(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-info)",fontWeight:600},children:["· ",(0,b.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:"currentColor",animation:"pulse 1.5s ease-in-out infinite"}}),"进行中 ",(0,b.jsx)("b",{children:I})," 条"]}):null,(J=be.filter(a=>"partial"===a.status).length)>0?(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-warning)",fontWeight:600},title:"只跑成功了一边(result 或 trajectory)。展开 ② 点行查看已有分析。",children:["· ◐ 部分评测 ",(0,b.jsx)("b",{children:J})," 条"]}):null,(K=be.filter(a=>"failed"===a.status).length)>0?(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,color:"var(--ev-error)",fontWeight:600},title:"后端 LLM 评测调用挂了——常见原因:API key 失效 / 模型配额不足 / 网络。展开 ② 看每条具体错误。",children:["· ⚠ 评测失败 ",(0,b.jsx)("b",{children:K})," 条"]}):null,ax.size>0&&(0,b.jsxs)("span",{children:["· 勾选 ",(0,b.jsx)("b",{children:ax.size})," 条待分析"]})]}),children:(0,b.jsx)(z,{emptyHint:"还没触发过评测。在 ① 配置块勾选 trace → 点末尾「开始评测」。",onRowClick:a=>{let b=aT.find(b=>b.id===a.executionTraceId);if(!b)return;let c=aS(b);("done"===c||"partial"===c)&&(l(a.executionTraceId),U(!0))},onRetry:async a=>{let b=a.executionTraceId;if(!b||"done"===a.status&&null!=a.resultScore&&null!=a.trajScore||($(a=>{let c=new Map(a);return c.set(b,Date.now()),c}),ae(a=>{if(!a.has(b))return a;let c=new Map(a);return c.delete(b),c}),!p))return;let c=await p([b]);if(c){let a=c.trajectoryErrors?.get(b),d=(c.resultErrors||[]).join("\n");(a||d)&&ae(c=>{let e=new Map(c),f=[];return d&&f.push(`结果评测:${d}`),a&&f.push(`轨迹评测:${a}`),f.length>0&&e.set(b,f.join("\n")),e})}},onDelete:async a=>{let b=a.executionTraceId;if(b)try{if(e){let a=await (0,g.apiFetch)("/api/eval/trajectory/results",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e,taskId:b,runId:q||void 0})});if(!a.ok){let b=await a.json().catch(()=>({}));alert("删除失败:"+(b?.error||`HTTP ${a.status}`));return}}let a=new Set(aa);a.add(b),ac(a),$(a=>{if(!a.has(b))return a;let c=new Map(a);return c.delete(b),c}),ae(a=>{if(!a.has(b))return a;let c=new Map(a);return c.delete(b),c})}catch(a){alert("删除失败:"+(a instanceof Error?a.message:String(a)))}},records:be})}),(0,b.jsx)(s.SectionShell,{num:3,variant:"result",title:"分析结果",desc:a1>0?`已评测 ${a1} / ${a2} \xb7 结果 + 轨迹 双维度`:"尚未评测",open:T,onToggle:()=>U(a=>!a),summary:null!=a5?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"总评分"}),(0,b.jsxs)("code",{className:`score-${a6}`,children:[a5," 分"]}),(0,b.jsxs)("span",{children:["· 通过 ",(0,b.jsx)("b",{children:a7})," / ",(0,b.jsx)("b",{children:a1})]})]}):(0,b.jsx)("span",{style:{color:"var(--ev-muted)"},children:"未评测"}),children:(0,b.jsxs)("div",{className:"ev-hero",children:[(0,b.jsxs)("div",{className:"ev-hero-main",children:[(0,b.jsxs)("div",{className:`ev-hero-num ${a6}`,children:[a5??"--",(0,b.jsx)("span",{className:"ev-hero-unit",children:"分"})]}),(0,b.jsxs)("div",{className:"ev-hero-label",children:["总评分 · 结果 + 轨迹 平均 · 已评测 ",a1," / ",a2,(0,b.jsx)("span",{style:{display:"block",fontSize:11,color:"var(--ev-muted)",fontWeight:400,marginTop:2},children:"跨当前评测任务的有效评测聚合 · 不随 source(从Trace/从数据集) 切换变化"})]})]}),(0,b.jsxs)("div",{className:"ev-hero-sub",children:[(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${null==a3?"":a3>=80?"good":a3<60?"bad":""}`,children:a3??"--"}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"结果分析 均分"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"输出是否符合预期"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${null==a4?"":a4>=80?"good":a4<60?"bad":""}`,children:a4??"--"}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"轨迹分析 均分"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"执行路径是否合理"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsx)("div",{className:`ev-hero-sub-num ${0===a1?"":a8>=80?"good":a8<50?"bad":""}`,children:0===a1?"--":`${a8}%`}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"通过率"}),(0,b.jsx)("div",{className:"ev-hero-sub-hint",children:"已评测中达标"})]}),(0,b.jsxs)("div",{className:"ev-hero-sub-item",children:[(0,b.jsxs)("div",{className:"ev-hero-sub-num",children:[a1," / ",a2]}),(0,b.jsx)("div",{className:"ev-hero-sub-label",children:"评测进度"}),(0,b.jsxs)("div",{className:"ev-hero-sub-hint",children:[Math.max(0,a2-a1)," 条待评测"]})]})]})]})})]})]})}function ab({skill:a,version:d,user:e,summary:f,loading:h,onBack:i,onReload:j,onOptimize:k}){let[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(!1),[p,q]=(0,c.useState)(!1),r=f?.latest?.evaluationId;(0,c.useEffect)(()=>{r?(o(!0),(0,g.apiFetch)(`/api/evaluation/${encodeURIComponent(r)}`).then(a=>a.json()).then(a=>m(a)).catch(()=>m(null)).finally(()=>o(!1))):m(null)},[r]);let s=async()=>{if(a&&null!=d){q(!0);try{let b=await (0,g.apiFetch)(`/api/skills/${a.id}/versions/${d}/evaluate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:e})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"静态合规启动失败");await j({expectedEvaluationId:"string"==typeof c.evaluationId?c.evaluationId:void 0})}catch(a){K.toast.error(a instanceof Error?a.message:"静态合规启动失败")}finally{q(!1)}}},t=l?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("span",{children:["评估时间:",new Date(l.evaluation.ranAt).toLocaleString()]}),(0,b.jsx)(ad,{status:l.evaluation.status}),null!=l.evaluation.durationMs&&(0,b.jsxs)("span",{children:["耗时:",(l.evaluation.durationMs/1e3).toFixed(2),"s"]}),l.evaluation.generator&&(0,b.jsxs)("span",{children:["评估器:",l.evaluation.generator]}),l.evaluation.contentHash&&(0,b.jsxs)("span",{children:["contentHash:",(0,b.jsxs)("code",{children:[l.evaluation.contentHash.slice(0,12),"…"]})]}),l.evaluation.errorMessage&&(0,b.jsxs)("span",{style:{color:"#b91c1c"},children:["错误:",l.evaluation.errorMessage]})]}):null;return(0,b.jsxs)("section",{className:"sa-detail",children:[(0,b.jsx)(af,{title:"静态合规分析",subtitle:`${a?.name||"未选择 Skill"}${null!=d?` \xb7 v${d}`:""} \xb7 SKILL.md 文本扫描`,badge:"Rule-based",metaSlot:t,onBack:i,onPrimary:s,primaryLabel:p?"分析中...":"重新分析",onOptimize:k}),(h||n)&&(0,b.jsx)(ag,{title:"正在读取静态评估",text:"读取最近一次静态评估与问题列表。",compact:!0}),!h&&!f?.latest&&(0,b.jsx)(ac,{onScan:s,running:p}),f?.latest&&l&&(0,b.jsx)(I.EvaluationContent,{detail:l})]})}function ac({onScan:a,running:c}){return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[(0,b.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,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,minWidth:0},children:[(0,b.jsx)("span",{style:{fontSize:16},children:"🔍"}),(0,b.jsx)("span",{style:{fontSize:13,color:"var(--ev-text, #18181b)",fontWeight:600},children:"当前 Skill 版本尚未扫描"}),(0,b.jsxs)("span",{style:{fontSize:12,color:"var(--ev-muted)"},children:["· 扫描会按下方 ",J.STATIC_EVAL_STANDARDS.length," 个标准维度评分"]})]}),(0,b.jsx)("button",{onClick:a,disabled:c,style:{padding:"6px 14px",background:c?"var(--ev-line-strong, #d4d4d8)":"var(--ev-info, #2563eb)",color:"#fff",border:"none",borderRadius:5,fontSize:12,fontWeight:600,cursor:c?"not-allowed":"pointer",flexShrink:0},children:c?"扫描中…":"开始扫描"})]}),(0,b.jsxs)("div",{style:{background:"var(--ev-card, #fff)",border:"1px solid var(--ev-line, #e5e7eb)",borderRadius:12,padding:"16px 18px"},children:[(0,b.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{style:{fontSize:14,fontWeight:700,color:"var(--ev-text, #18181b)"},children:"分析标准"}),(0,b.jsx)("div",{style:{fontSize:11,color:"var(--ev-muted)",marginTop:2},children:"扫描完成后这里会出现每个标准的命中问题,点击展开查看证据 + 修复建议"})]})}),(0,b.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:J.STATIC_EVAL_STANDARDS.map(a=>(0,b.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,b.jsx)("div",{style:{fontSize:13,fontWeight:600,color:"var(--ev-text, #52525b)"},children:a.title}),(0,b.jsx)("div",{style:{fontSize:11.5,color:"var(--ev-muted)",lineHeight:1.5},children:a.desc}),(0,b.jsx)("div",{style:{textAlign:"right"},children:(0,b.jsx)("span",{style:{display:"inline-block",padding:"2px 8px",fontSize:10,fontWeight:600,color:"#a1a1aa",background:"#f4f4f5",border:"1px solid #e5e7eb",borderRadius:99},children:"待扫描"})})]},a.key))})]})]})}function ad({status:a}){let c=["ok","pending","partial","failed"].includes(a)?a:"ok";return(0,b.jsx)("span",{className:`sa-meta-status ${c}`,children:{ok:"成功",pending:"执行中",partial:"部分成功",failed:"失败"}[a]||a})}function ae({title:a,description:c,primaryAction:d,secondaryAction:e,children:f,onBack:g,onPrimary:h,onSecondary:i,onOptimize:j,renderHeader:k}){return(0,b.jsxs)("section",{className:"sa-detail",children:["inline"===(k??"inline")&&(0,b.jsx)(af,{title:a,subtitle:c,badge:"调测分析",onBack:g,onPrimary:h,primaryLabel:d,secondaryLabel:e,onSecondary:i,onOptimize:j}),(0,b.jsx)("div",{className:"sa-embedded-debug","aria-label":a,children:(0,b.jsx)("div",{className:"sa-embedded-shell-body",children:f})})]})}function af({title:a,subtitle:c,badge:d,metaSlot:e,onBack:f,onPrimary:g,primaryDisabled:h,primaryLabel:i,secondaryLabel:j,onSecondary:k,onOptimize:l}){return(0,b.jsx)("header",{className:"sa-detail-head",children:(0,b.jsxs)("div",{className:"sa-detail-hero",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("h1",{children:[a," ",(0,b.jsx)("span",{className:"sa-pill primary",children:d})]}),(0,b.jsx)("p",{children:c}),e&&(0,b.jsx)("div",{className:"sa-detail-meta",children:e})]}),(0,b.jsxs)("div",{className:"sa-detail-actions",children:[j&&(0,b.jsx)("button",{className:"sa-btn",onClick:k,children:j}),i&&(0,b.jsx)("button",{className:"sa-btn",onClick:g,disabled:h,children:i}),(0,b.jsx)("button",{className:"sa-btn sa-btn-primary",onClick:l,children:"开始优化"})]})]})})}function ag({title:a,text:c,actionLabel:d,onAction:e,compact:f}){return(0,b.jsxs)("div",{className:`sa-empty ${f?"compact":""}`,children:[(0,b.jsx)("div",{className:"sa-empty-icon",children:"⌁"}),(0,b.jsx)("h3",{children:a}),(0,b.jsx)("p",{children:c}),d&&(0,b.jsx)("button",{className:"sa-btn sa-btn-primary",onClick:e,children:d})]})}function ah(a,b){let c=a.versions||[],d=a=>"number"==typeof a&&Number.isFinite(a)&&(0===c.length||c.some(b=>b.version===a));return d(b)?b:d(a.activeVersion)?a.activeVersion:d(a.version)?a.version:c[0]?.version??0}function ai(a){let b=a.root_skill||a.rootSkill||null;return b?.name?{name:b.name,version:b.version??null}:null}function aj(a){let b=0,c=0,d=0,e=0;for(let f of a){let a=ak(f);if(a&&(Array.isArray(a.matches)||Array.isArray(a.skippedExpectedSteps))){b+=1;let f=Array.isArray(a.matches)?a.matches:[],g=Array.isArray(a.skippedExpectedSteps)?a.skippedExpectedSteps:[],h=f.filter(a=>"matched"===a.matchStatus).length,i=f.filter(a=>"non_business"!==a.matchStatus).length+g.length;d+=h,e+=i,("number"==typeof a.summary?.overallScore?a.summary.overallScore:i>0?h/i:1)<.7&&(c+=1)}}return{analyzed:b,highDeviation:c,matchedSteps:d,totalSteps:e}}function ak(a){var b=a.execution_match?.matchJson||void 0;if(!b)return null;try{return JSON.parse(b)}catch{return null}}function al(a){let b=ak(a);return!!b&&(Array.isArray(b.matches)||Array.isArray(b.skippedExpectedSteps))}function am(a){let b=ak(a);if(!b)return null;if("number"==typeof b.summary?.overallScore)return b.summary.overallScore;let c=Array.isArray(b.matches)?b.matches:[],d=Array.isArray(b.skippedExpectedSteps)?b.skippedExpectedSteps:[],e=c.filter(a=>"non_business"!==a.matchStatus),f=e.length+d.length;return 0===f?null:e.filter(a=>"matched"===a.matchStatus).length/f}function an(a){return a.task_id||a.upload_id||""}function ao(a){if(!a)return"";let b=new Date(a);return Number.isNaN(b.getTime())?"":`${String(b.getMonth()+1).padStart(2,"0")}-${String(b.getDate()).padStart(2,"0")} ${String(b.getHours()).padStart(2,"0")}:${String(b.getMinutes()).padStart(2,"0")}`}function ap(a){if(!a)return"未知时间";let b=new Date(a);if(Number.isNaN(b.getTime()))return a;let c=Date.now()-b.getTime();return c<6e4?"刚刚":c<36e5?`${Math.floor(c/6e4)} 分钟前`:c<864e5?`${Math.floor(c/36e5)} 小时前`:`${Math.floor(c/864e5)} 天前`}a.s(["default",()=>W],793016)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28main%29_skill-eval_page_tsx_d6828614._.js.map