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
@@ -85,7 +85,7 @@ ${t}
85
85
  - 每条关键观点都必须输出显式 score,范围 0.0~1.0。
86
86
  - covered=true 的关键观点必须给 coverage_reason。
87
87
  - covered=false / partial / wrong 的关键观点必须给 missing_reason、trace_root_cause.failure_stage、trace_root_cause.failure_reason。
88
- `}function h(e){return!!(void 0!==e.score||void 0!==e.is_correct||Array.isArray(e.key_point_findings)||Array.isArray(e.result_issues))}async function w(e,t){if("none"===e.precomputedRootCauseSource)return{rootCauses:[],source:"none"};if("dataset-cache"===e.precomputedRootCauseSource)return{rootCauses:Array.isArray(e.precomputedRootCauses)?e.precomputedRootCauses:[],source:"dataset-cache"};if(!String(e.expectedOutput||"").trim())return{rootCauses:[],source:"none"};try{return{rootCauses:await (0,p.extractRootCausesFromExpected)(e.caseInput,e.expectedOutput,t),source:"live-extract"}}catch{return{rootCauses:[],source:"none"}}}function _(e,t="skill-aware"){var a;let r,n="no-skill"===t?{...e,key_point_findings:(0,m.stripSkillAttributionFromKeyPointFindings)(e.key_point_findings)}:e,s=(0,m.deriveTaskCompletionScoreFromFindings)(n.key_point_findings),i=s.score??0,o=i>=.8,l=String(e.reason||"").trim()||"任务完成度评测已完成,但未返回理由。",u=void 0===e.score?void 0:(a=e.score,r="number"==typeof a?a:"string"==typeof a?Number(a):NaN,Number.isFinite(r)?Math.max(0,Math.min(1,r)):0),{result_issues:c,resultIssues:d,...p}=n;return{isCorrect:o,score:i,reason:l,rawAnalysis:{...p,score:i,is_correct:o,llm_reported_score:u,score_computation:{method:"equal_weight_average",item_count:s.itemCount},skillAttributionMode:t,key_point_findings:s.findings}}}async function v(e,t,a,p){return(0,s.withBackgroundOpencodeSlot)(async()=>(0,n.runWithEphemeralOpencodeServer)({user:t||void 0,verbose:!1,isolateHome:!0},async a=>{var n;let s,p,m,{rootCauses:g,source:v}=await w(e,t),S=e.skillAttributionMode||"skill-aware",E=await (0,o.getActiveConfig)(t);if(!E)return{isCorrect:!1,score:0,reason:"请先在模型配置中激活一个评测模型,才能执行结果评测。",rawAnalysis:{root_cause_source:v}};let x=t?await (0,l.loadServerModelForUser)(t):null,k=x?.providerID||(0,l.normalizeProviderID)(E.provider||(0,l.inferProviderFromBaseUrl)(E.baseUrl)),b=x?.modelID||E.model||"deepseek-chat",R={text:(p=g.length>0?g.map((e,t)=>`${t+1}. ${e.content}`).join("\n"):"(未提取到关键观点,可仅按任务完成度评判)",n=e.skillContext,s=Array.isArray(n?.invokedSkills)?n.invokedSkills:[],m=0===s.length?"(无)":s.map((e,t)=>[`### Skill ${t+1}: ${e.name}${null!=e.version?` v${e.version}`:""}`,e.content?.trim()||"(无 SKILL.md 内容)"].join("\n")).join("\n\n"),`# Agent 任务完成度评测输入
88
+ `}function h(e){return!!(void 0!==e.score||void 0!==e.is_correct||Array.isArray(e.key_point_findings)||Array.isArray(e.result_issues))}async function w(e,t){if("none"===e.precomputedRootCauseSource)return{rootCauses:[],source:"none"};if("dataset-cache"===e.precomputedRootCauseSource)return{rootCauses:Array.isArray(e.precomputedRootCauses)?e.precomputedRootCauses:[],source:"dataset-cache"};if(!String(e.expectedOutput||"").trim())return{rootCauses:[],source:"none"};try{return{rootCauses:await (0,p.extractRootCausesFromExpected)(e.caseInput,e.expectedOutput,t),source:"live-extract"}}catch{return{rootCauses:[],source:"none"}}}function _(e,t="skill-aware"){var a;let r,n="no-skill"===t?{...e,key_point_findings:(0,m.stripSkillAttributionFromKeyPointFindings)(e.key_point_findings)}:e,s=(0,m.deriveTaskCompletionScoreFromFindings)(n.key_point_findings),i=s.score??0,o=i>=.8,l=String(e.reason||"").trim()||"任务完成度评测已完成,但未返回理由。",u=void 0===e.score?void 0:(a=e.score,r="number"==typeof a?a:"string"==typeof a?Number(a):NaN,Number.isFinite(r)?Math.max(0,Math.min(1,r)):0),{result_issues:c,resultIssues:d,...p}=n;return{isCorrect:o,score:i,reason:l,rawAnalysis:{...p,score:i,is_correct:o,llm_reported_score:u,score_computation:{method:"equal_weight_average",item_count:s.itemCount},skillAttributionMode:t,key_point_findings:s.findings}}}async function v(e,t,a,p){return(0,s.withBackgroundOpencodeSlot)(async()=>(0,n.runWithEphemeralOpencodeServer)({user:t||void 0,verbose:!1,isolateHome:!0},async a=>{var n;let s,p,m,{rootCauses:g,source:v}=await w(e,t),S=e.skillAttributionMode||"skill-aware",E=await (0,o.getActiveConfig)(t);if(!E)return{isCorrect:!1,score:0,reason:"请先在模型配置中激活一个评测模型,才能执行结果评测。",rawAnalysis:{root_cause_source:v}};let k=t?await (0,l.loadServerModelForUser)(t):null,x=k?.providerID||(0,l.normalizeProviderID)(E.provider||(0,l.inferProviderFromBaseUrl)(E.baseUrl)),b=k?.modelID||E.model||"deepseek-chat",R={text:(p=g.length>0?g.map((e,t)=>`${t+1}. ${e.content}`).join("\n"):"(未提取到关键观点,可仅按任务完成度评判)",n=e.skillContext,s=Array.isArray(n?.invokedSkills)?n.invokedSkills:[],m=0===s.length?"(无)":s.map((e,t)=>[`### Skill ${t+1}: ${e.name}${null!=e.version?` v${e.version}`:""}`,e.content?.trim()||"(无 SKILL.md 内容)"].join("\n")).join("\n\n"),`# Agent 任务完成度评测输入
89
89
 
90
90
  ## Skill 归因模式
91
91
  ${"skill-aware"===e.skillAttributionMode?"skill-aware:本 trace 关联了 Skill,允许基于 Skill 上下文输出 Skill 归因和改进建议。":"no-skill:本 trace 未关联任何 Skill,禁止输出 Skill 归因和 Skill 改进建议。"}
@@ -108,7 +108,7 @@ ${e.traceSummaryText?.trim()||"(无可用轨迹)"}
108
108
  ## Skill 上下文
109
109
  ${m}
110
110
 
111
- 请你自行逐条检查关键观点覆盖情况,并在不派发任何子代理的前提下完成任务完成度评测和关键观点根因分析。`),agent:"build",model:{providerID:k,modelID:b,apiKey:x?.apiKey||E.apiKey,baseURL:x?.baseURL||E.baseUrl},modelOptions:{temperature:0,top_p:1,seed:42},system:y(S),permission:(0,i.buildEvaluatorPermissions)()},I="",C=null,N="",$=null,O=null;try{O=new r.AgentInsight({baseURL:a,logLevel:"warn"});let n=await O.createSession({title:`${A}-${Date.now()}`,directory:"/tmp"}),s=String(n?.id||n?.ID||"");if(!s)throw Error("Failed to create opencode session for task completion evaluation");N=s;let i=await (0,c.getSystemAgentId)("opencode",A),o=(0,c.findSystemAgentDefinition)("opencode",A);if((0,u.tagOpencodeSession)(s,{agentName:A,agentId:i,skill:o?.traceSkill,displayQuery:e.caseInput,user:t||void 0}),I=(await O.chat(s,R,{onText:e=>{I+=e.delta},onError:e=>{C=e},onSubagent:e=>{$=e.agent||e.sessionID||"unknown-subagent",console.warn(`[opencode-task-completion] unexpected subagent spawned: ${$}`)}},{streamTimeoutMs:6e5,idleTimeoutMs:18e4})).text||I,await (0,d.recordEvaluatorExecution)(O,{taskId:s,agentName:A,user:t,query:e.caseInput}),$)throw Error(`任务完成度评估器不允许派发子代理,但实际派发了:${$}`);let l=(0,f.parseLooseJson)(I);if(l&&h(l)){let e=_(l,S);return{...e,rawAnalysis:{...e.rawAnalysis||{},evaluatorSessionId:N,root_cause_source:v}}}}catch(e){C=e instanceof Error?e:Error(String(e))}if(N&&O)try{await (0,d.recordEvaluatorExecution)(O,{taskId:N,agentName:A,user:t,query:e.caseInput})}catch(e){console.warn("[opencode-task-completion] failed to persist evaluator execution:",e?.message||e)}if($)throw C||Error(`任务完成度评估器不允许派发子代理,但实际派发了:${$}`);let j=function(e,...t){for(let a of t){let t=(0,f.parseLooseJson)(String(a||""));if(t&&h(t))return _(t,e)}return null}(S,I,C?.message);if(j)return{...j,rawAnalysis:{...j.rawAnalysis||{},evaluatorSessionId:N||void 0,root_cause_source:v}};let M=C?.message||`Agent 输出前 800 字符:${I.slice(0,800)}`;throw Error(`任务完成度评估器未产出有效 JSON。opencode 评测失败:${M}`)}),{taskType:"task-completion-eval",user:t??void 0,skill:a??void 0,skillVersion:p??null,label:`task-completion: ${(e.caseInput||"").slice(0,40)}`,silent:!0})}new Date().toISOString(),y("skill-aware"),y("no-skill"),e.s(["evaluateTaskCompletionViaOpencode",()=>v]),a()}catch(e){a(e)}},!1),508439,e=>e.a(async(t,a)=>{try{e.i(889228);var r=e.i(88045),n=e.i(322632),s=e.i(637351);e.i(384660);var i=e.i(106411),o=t([i]);[i]=o.then?(await o)():o;let f=n.z.object({normalized_input:n.z.string().default(""),confidence:n.z.number().min(0).max(1).default(0),ignored_parts:n.z.array(n.z.string()).default([]),reason:n.z.string().default("")}),g=n.z.object({best_case_id:n.z.string().nullable().default(null),best_confidence:n.z.number().min(0).max(1).default(0),reason:n.z.string().default("")});function l(e){let t=e.trim(),a=t.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(a)t=a[1];else{let e=t.indexOf("{"),a=t.lastIndexOf("}");-1!==e&&-1!==a&&a>=e&&(t=t.substring(e,a+1))}return JSON.parse(t)}async function u(e){var t;let a,n=await (0,i.getActiveConfig)(e);if(!n)return{client:null,model:null};let o=n.apiKey||"no-api-key-required",l=(t=n.baseUrl||"https://api.deepseek.com",String(t||"").replace(/\/chat\/completions\/?$/,"")),{customFetch:u}=(0,s.getProxyConfig)();return{client:new r.OpenAI({apiKey:o,baseURL:l,fetch:u,timeout:(a=Number(process.env.SEMANTIC_MATCH_TIMEOUT_MS||process.env.JUDGMENT_TIMEOUT_MS||3e5),Number.isFinite(a)&&a>0?a:3e5)}),model:n.model||"deepseek-chat"}}async function c(e){let{client:t,model:a}=await u(e);if(!t||!a)return"No active evaluation model configured";try{let e=await t.chat.completions.create({messages:[{role:"user",content:"Hi"}],model:a,max_tokens:5});if(e?.choices)return null;return"No response from model"}catch(a){let e,t;return e=a?.message||"LLM request failed",t=a?.cause?.message?` (${a.cause.message})`:"",`${e}${t}`}}async function d(e,t){let a={normalized_input:String(e||"").trim(),confidence:0,ignored_parts:[],reason:"LLM extraction unavailable, fallback to raw input"};if(!a.normalized_input)return a;let{client:r,model:n}=await u(t);if(!r||!n)return a;try{var s;let e=await r.chat.completions.create({model:n,temperature:0,top_p:1,seed:42,messages:[{role:"user",content:(s=a.normalized_input,`你是一个 agent 评测系统中的“真实用户输入抽取器”。
111
+ 请你自行逐条检查关键观点覆盖情况,并在不派发任何子代理的前提下完成任务完成度评测和关键观点根因分析。`),agent:"build",model:{providerID:x,modelID:b,apiKey:k?.apiKey||E.apiKey,baseURL:k?.baseURL||E.baseUrl},modelOptions:{temperature:0,top_p:1,seed:42},system:y(S),permission:(0,i.buildEvaluatorPermissions)()},I="",C=null,N="",$=null,O=null;try{O=new r.AgentInsight({baseURL:a,logLevel:"warn"});let n=await O.createSession({title:`${A}-${Date.now()}`,directory:"/tmp"}),s=String(n?.id||n?.ID||"");if(!s)throw Error("Failed to create opencode session for task completion evaluation");N=s;let i=await (0,c.getSystemAgentId)("opencode",A),o=(0,c.findSystemAgentDefinition)("opencode",A);if((0,u.tagOpencodeSession)(s,{agentName:A,agentId:i,skill:o?.traceSkill,displayQuery:e.caseInput,user:t||void 0}),I=(await O.chat(s,R,{onText:e=>{I+=e.delta},onError:e=>{C=e},onSubagent:e=>{$=e.agent||e.sessionID||"unknown-subagent",console.warn(`[opencode-task-completion] unexpected subagent spawned: ${$}`)}},{streamTimeoutMs:6e5,idleTimeoutMs:18e4})).text||I,await (0,d.recordEvaluatorExecution)(O,{taskId:s,agentName:A,user:t,query:e.caseInput}),$)throw Error(`任务完成度评估器不允许派发子代理,但实际派发了:${$}`);let l=(0,f.parseLooseJson)(I);if(l&&h(l)){let e=_(l,S);return{...e,rawAnalysis:{...e.rawAnalysis||{},evaluatorSessionId:N,root_cause_source:v}}}}catch(e){C=e instanceof Error?e:Error(String(e))}if(N&&O)try{await (0,d.recordEvaluatorExecution)(O,{taskId:N,agentName:A,user:t,query:e.caseInput})}catch(e){console.warn("[opencode-task-completion] failed to persist evaluator execution:",e?.message||e)}if($)throw C||Error(`任务完成度评估器不允许派发子代理,但实际派发了:${$}`);let j=function(e,...t){for(let a of t){let t=(0,f.parseLooseJson)(String(a||""));if(t&&h(t))return _(t,e)}return null}(S,I,C?.message);if(j)return{...j,rawAnalysis:{...j.rawAnalysis||{},evaluatorSessionId:N||void 0,root_cause_source:v}};let M=C?.message||`Agent 输出前 800 字符:${I.slice(0,800)}`;throw Error(`任务完成度评估器未产出有效 JSON。opencode 评测失败:${M}`)}),{taskType:"task-completion-eval",user:t??void 0,skill:a??void 0,skillVersion:p??null,label:`task-completion: ${(e.caseInput||"").slice(0,40)}`,silent:!0})}new Date().toISOString(),y("skill-aware"),y("no-skill"),e.s(["evaluateTaskCompletionViaOpencode",()=>v]),a()}catch(e){a(e)}},!1),508439,e=>e.a(async(t,a)=>{try{e.i(889228);var r=e.i(88045),n=e.i(322632),s=e.i(637351);e.i(384660);var i=e.i(106411),o=t([i]);[i]=o.then?(await o)():o;let f=n.z.object({normalized_input:n.z.string().default(""),confidence:n.z.number().min(0).max(1).default(0),ignored_parts:n.z.array(n.z.string()).default([]),reason:n.z.string().default("")}),g=n.z.object({best_case_id:n.z.string().nullable().default(null),best_confidence:n.z.number().min(0).max(1).default(0),reason:n.z.string().default("")});function l(e){let t=e.trim(),a=t.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(a)t=a[1];else{let e=t.indexOf("{"),a=t.lastIndexOf("}");-1!==e&&-1!==a&&a>=e&&(t=t.substring(e,a+1))}return JSON.parse(t)}async function u(e){var t;let a,n=await (0,i.getActiveConfig)(e);if(!n)return{client:null,model:null};let o=n.apiKey||"no-api-key-required",l=(t=n.baseUrl||"https://api.deepseek.com",String(t||"").replace(/\/chat\/completions\/?$/,"")),{customFetch:u}=(0,s.getProxyConfig)();return{client:new r.OpenAI({apiKey:o,baseURL:l,fetch:u,timeout:(a=Number(process.env.SEMANTIC_MATCH_TIMEOUT_MS||process.env.JUDGMENT_TIMEOUT_MS||3e5),Number.isFinite(a)&&a>0?a:3e5)}),model:n.model||"deepseek-chat"}}async function c(e){let{client:t,model:a}=await u(e);if(!t||!a)return"No active evaluation model configured";try{let e=await t.chat.completions.create({messages:[{role:"user",content:"Hi"}],model:a,max_tokens:5});if(e?.choices)return null;return"No response from model"}catch(a){let e,t;return e=a?.message||"LLM request failed",t=a?.cause?.message?` (${a.cause.message})`:"",`${e}${t}`}}async function d(e,t){let a={normalized_input:String(e||"").trim(),confidence:0,ignored_parts:[],reason:"LLM extraction unavailable, fallback to raw input"};if(!a.normalized_input)return a;let{client:r,model:n}=await u(t);if(!r||!n)return a;try{var s;let e=await r.chat.completions.create({model:n,temperature:0,top_p:1,seed:42,messages:[{role:"user",content:(s=a.normalized_input,`你是一个 agent 评测系统中的“真实用户输入抽取器”。
112
112
 
113
113
  你的任务:
114
114
  从 raw_input 中抽取真正应该用于评测数据集匹配的用户输入。
@@ -170,9 +170,9 @@ normalized_input:
170
170
  ${e}
171
171
 
172
172
  candidate_cases:
173
- ${JSON.stringify(s,null,2)}`)}]}),i=a.choices?.[0]?.message?.content?.trim();if(!i)return{confidence:0,reason:"Empty LLM batch match response",error:"Empty LLM batch match response"};let o=g.parse(l(i)),u=t.find(e=>e.id===o.best_case_id);if(!u)return{confidence:0,reason:"LLM returned unknown case id",error:"LLM returned unknown case id"};return{id:u.id,confidence:o.best_confidence,reason:o.reason}}catch(t){console.warn("[SemanticMatch] Failed to compare candidate batch:",t);let e=t?.message||String(t);return{confidence:0,reason:"LLM batch match failed",error:e}}}async function m(e,t,a){let r=a?.batchSize??100,n=a?.threshold??.75,s=a?.requireModelAvailable??!1,i=e.map(e=>({id:e.id,query:e.input})).filter(e=>e.id&&e.query.trim()),o=await d(t,a?.user),l=o.normalized_input.trim()||String(t||"").trim();if(!l||0===i.length)return{normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:0,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:0===i.length?"No candidate cases available":"Normalized input is empty",matchedBy:"none"};if(s){let e=await c(a?.user);if(e)return{normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:0,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:"Semantic matcher model connection failed",matchedBy:"none",error:e}}let u=function(e,t){let a=[];for(let r=0;r<e.length;r+=t)a.push(e.slice(r,r+t));return a}(i,Math.max(1,r)),m=await Promise.all(u.map(e=>p(l,e,a?.user))),f=m.map(e=>e.error).filter(e=>!!e),g=m.reduce((e,t)=>{if(!t.id)return e;if(!e.id)return t;if(t.confidence!==e.confidence)return t.confidence>e.confidence?t:e;let a=i.find(e=>e.id===t.id)?.query.length??0,r=i.find(t=>t.id===e.id)?.query.length??0;return a>r?t:e},{confidence:0,reason:"No semantic match found"});return!g.id||g.confidence<n?{normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:g.confidence||0,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:g.reason||"Best semantic confidence below threshold",matchedBy:"none",...f.length===m.length&&f.length>0?{error:f.join("; ")}:{}}:{caseId:g.id,normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:g.confidence,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:g.reason,matchedBy:"semantic"}}e.s(["extractRealUserInput",()=>d,"findBestSemanticCaseMatch",()=>m]),a()}catch(e){a(e)}},!1),670497,e=>e.a(async(t,a)=>{try{e.i(889228);var r=e.i(88045),n=e.i(322632),s=e.i(637351),i=e.i(106411),o=t([i]);[i]=o.then?(await o)():o;let E=n.z.object({has_task_output:n.z.boolean().default(!1),confidence:n.z.number().min(0).max(1).default(0),selected_source_id:n.z.string().nullable().default(null),needs_followup_context:n.z.boolean().default(!1),followup_anchor_llm_call_id:n.z.string().nullable().default(null),reason:n.z.string().default("")}),x=n.z.object({has_task_output:n.z.boolean().default(!1),confidence:n.z.number().min(0).max(1).default(0),selected_source_id:n.z.string().nullable().default(null),artifact_paths:n.z.array(n.z.string()).default([]),reason:n.z.string().default("")});async function l(e){var t;let a,n=await (0,i.getActiveConfig)(e);if(!n)return{client:null,model:null};let{customFetch:o}=(0,s.getProxyConfig)();return{client:new r.OpenAI({apiKey:n.apiKey||"no-api-key-required",baseURL:(t=n.baseUrl||"https://api.deepseek.com",String(t||"").replace(/\/chat\/completions\/?$/,"")),fetch:o,timeout:(a=Number(process.env.RESULT_ARTIFACT_TIMEOUT_MS||process.env.JUDGMENT_TIMEOUT_MS||3e5),Number.isFinite(a)&&a>0?a:3e5)}),model:n.model||"deepseek-chat"}}function u(e){let t=e.trim();if(!t)return null;let a=t.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(a)t=a[1];else{let e=t.indexOf("{"),a=t.lastIndexOf("}");-1!==e&&-1!==a&&a>=e&&(t=t.substring(e,a+1))}try{return JSON.parse(t)}catch{return null}}function c(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function d(e){if(null==e)return"";if("string"==typeof e)return e;if("number"==typeof e||"boolean"==typeof e)return String(e);try{return JSON.stringify(e,null,2)}catch{return String(e)}}function p(e,t){let a=String(e||"").trim();if(a.length<=t)return a;let r=Math.floor(.65*t),n=Math.max(0,t-r-80);return`${a.slice(0,r)}
173
+ ${JSON.stringify(s,null,2)}`)}]}),i=a.choices?.[0]?.message?.content?.trim();if(!i)return{confidence:0,reason:"Empty LLM batch match response",error:"Empty LLM batch match response"};let o=g.parse(l(i)),u=t.find(e=>e.id===o.best_case_id);if(!u)return{confidence:0,reason:"LLM returned unknown case id",error:"LLM returned unknown case id"};return{id:u.id,confidence:o.best_confidence,reason:o.reason}}catch(t){console.warn("[SemanticMatch] Failed to compare candidate batch:",t);let e=t?.message||String(t);return{confidence:0,reason:"LLM batch match failed",error:e}}}async function m(e,t,a){let r=a?.batchSize??100,n=a?.threshold??.75,s=a?.requireModelAvailable??!1,i=e.map(e=>({id:e.id,query:e.input})).filter(e=>e.id&&e.query.trim()),o=await d(t,a?.user),l=o.normalized_input.trim()||String(t||"").trim();if(!l||0===i.length)return{normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:0,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:0===i.length?"No candidate cases available":"Normalized input is empty",matchedBy:"none"};if(s){let e=await c(a?.user);if(e)return{normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:0,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:"Semantic matcher model connection failed",matchedBy:"none",error:e}}let u=function(e,t){let a=[];for(let r=0;r<e.length;r+=t)a.push(e.slice(r,r+t));return a}(i,Math.max(1,r)),m=await Promise.all(u.map(e=>p(l,e,a?.user))),f=m.map(e=>e.error).filter(e=>!!e),g=m.reduce((e,t)=>{if(!t.id)return e;if(!e.id)return t;if(t.confidence!==e.confidence)return t.confidence>e.confidence?t:e;let a=i.find(e=>e.id===t.id)?.query.length??0,r=i.find(t=>t.id===e.id)?.query.length??0;return a>r?t:e},{confidence:0,reason:"No semantic match found"});return!g.id||g.confidence<n?{normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:g.confidence||0,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:g.reason||"Best semantic confidence below threshold",matchedBy:"none",...f.length===m.length&&f.length>0?{error:f.join("; ")}:{}}:{caseId:g.id,normalizedInput:l,extractionConfidence:o.confidence,matchConfidence:g.confidence,ignoredParts:o.ignored_parts,extractReason:o.reason,matchReason:g.reason,matchedBy:"semantic"}}e.s(["extractRealUserInput",()=>d,"findBestSemanticCaseMatch",()=>m]),a()}catch(e){a(e)}},!1),670497,e=>e.a(async(t,a)=>{try{e.i(889228);var r=e.i(88045),n=e.i(322632),s=e.i(637351),i=e.i(106411),o=t([i]);[i]=o.then?(await o)():o;let E=n.z.object({has_task_output:n.z.boolean().default(!1),confidence:n.z.number().min(0).max(1).default(0),selected_source_id:n.z.string().nullable().default(null),needs_followup_context:n.z.boolean().default(!1),followup_anchor_llm_call_id:n.z.string().nullable().default(null),reason:n.z.string().default("")}),k=n.z.object({has_task_output:n.z.boolean().default(!1),confidence:n.z.number().min(0).max(1).default(0),selected_source_id:n.z.string().nullable().default(null),artifact_paths:n.z.array(n.z.string()).default([]),reason:n.z.string().default("")});async function l(e){var t;let a,n=await (0,i.getActiveConfig)(e);if(!n)return{client:null,model:null};let{customFetch:o}=(0,s.getProxyConfig)();return{client:new r.OpenAI({apiKey:n.apiKey||"no-api-key-required",baseURL:(t=n.baseUrl||"https://api.deepseek.com",String(t||"").replace(/\/chat\/completions\/?$/,"")),fetch:o,timeout:(a=Number(process.env.RESULT_ARTIFACT_TIMEOUT_MS||process.env.JUDGMENT_TIMEOUT_MS||3e5),Number.isFinite(a)&&a>0?a:3e5)}),model:n.model||"deepseek-chat"}}function u(e){let t=e.trim();if(!t)return null;let a=t.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(a)t=a[1];else{let e=t.indexOf("{"),a=t.lastIndexOf("}");-1!==e&&-1!==a&&a>=e&&(t=t.substring(e,a+1))}try{return JSON.parse(t)}catch{return null}}function c(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function d(e){if(null==e)return"";if("string"==typeof e)return e;if("number"==typeof e||"boolean"==typeof e)return String(e);try{return JSON.stringify(e,null,2)}catch{return String(e)}}function p(e,t){let a=String(e||"").trim();if(a.length<=t)return a;let r=Math.floor(.65*t),n=Math.max(0,t-r-80);return`${a.slice(0,r)}
174
174
  ...[中间内容已截断 ${a.length-r-n} 字]...
175
- ${a.slice(-n)}`}function m(e){return"string"==typeof e?e:Array.isArray(e)?e.map(e=>{let t=c(e);return t?d(t.text??t.content??t.input??t):d(e)}).filter(Boolean).join("\n"):d(e)}function f(e){let t=e?.tool_calls??e?.toolCalls;return Array.isArray(t)?t.map(c).filter(e=>!!e):[]}function g(e){let t=c(e.function);return String(t?.name||e.name||e.type||"tool").trim()}function y(e){let t=c(e.function);return d(t?.arguments??e.arguments??e.input??"")}function h(e){return d(e.output??e.result??e.content??"")}function w(e,t){return t&&e.find(e=>e.id===t)?.text?.trim()||""}function _(e,t){return!!t&&e.some(e=>e.id===t)}function v(e,t,a,r,n){return{status:"found",outputForEvaluation:e,confidence:t,reason:a,sourceRefs:r?[r]:[],rawAnalysis:n}}async function A(e,t,a){let r=await e.chat.completions.create({model:t,temperature:0,top_p:1,seed:42,messages:[{role:"user",content:a}]});return r.choices?.[0]?.message?.content?.trim()||""}async function S(e){let t=e.threshold??.75,a=e.maxLlmCalls??10,r=String(e.fallbackOutput||"").trim(),n=(e,t={})=>r?function(e,t,a={}){return v(e,0,`未能从 trace 中定位真实任务输出,已回退使用 execution.finalResult。原始原因:${t}`,"execution.finalResult",{...a,fallback:{used:!0,source:"execution.finalResult",reason:t}})}(r,e,t):function(e,t={}){return{status:"missing",outputForEvaluation:null,confidence:0,reason:e,sourceRefs:[],rawAnalysis:t}}(e,t),{client:s,model:i}=await l(e.user);if(!s||!i)return n("未配置可用评测模型,无法提取真实输出。");let o=function(e){let t=[],a=0,r=0,n=0;for(let s=0;s<e.length;s+=1){let i=c(e[s]);if(!i)continue;let o=Array.isArray(i.requestMessages)?i.requestMessages:[];for(let e of o){let r=c(e);r&&"tool"===String(r.role||"").toLowerCase()&&(n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:String(r.name||r.tool_call_id||"tool"),input:"",output:m(r.content)}))}let l=c(i.responseMessage);if(l){let e=m(l.content);(e||f(l).length>0)&&(r+=1,t.push({id:`llm-${r}`,type:"llm",order:a++,interactionIndex:s,agent:String(i.agent||i.subagent_name||""),input:function(e,t){if(!Array.isArray(e))return"";let a=e.map((e,t)=>{let a=c(e);if(!a)return"";let r=String(a.role||"message"),n=a.name?`/${String(a.name)}`:"";return`[${t+1}] ${r}${n}: ${m(a.content)}`}).filter(Boolean).join("\n");return p(a,1800)}(o,0),inputParts:Array.isArray(o)?o.map(e=>{let t=c(e);if(!t)return null;let a=m(t.content).trim();return a?{role:String(t.role||"message"),text:a,...t.name?{name:String(t.name)}:{}}:null}).filter(e=>!!e):[],output:e}));for(let e of f(l))n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:g(e),input:y(e),output:h(e)});continue}let u=String(i.role||"").toLowerCase();for(let e of("tool"===u?(n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:String(i.name||i.tool_call_id||"tool"),input:"",output:m(i.content)})):("assistant"===u||"subagent"===u||"agent"===u||"opencode"===u)&&(r+=1,t.push({id:`llm-${r}`,type:"llm",order:a++,interactionIndex:s,agent:String(i.agent||i.subagent_name||""),input:"",output:m(i.content)})),f(i)))n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:g(e),input:y(e),output:h(e)})}return t}(e.interactions||[]),d=o.filter(e=>"llm"===e.type&&e.output?.trim()).slice(-Math.max(1,a));if(0===d.length)return n("链路中没有可用于输出提取的 LLM 调用。",{event_count:o.length});try{var S,k;let a,r,l=d.filter(e=>"llm"===e.type&&e.output?.trim()).map(e=>({id:`${e.id}.output`,eventId:e.id,kind:"llm_output",text:e.output.trim(),agent:e.agent,name:e.name,interactionIndex:e.interactionIndex})),c=await A(s,i,(S=e.userTask,a=l.map(e=>({id:e.id,event_id:e.eventId,kind:e.kind,agent:e.agent||"",name:e.name||"",interaction_index:e.interactionIndex,text_preview:p(e.text,"llm_input"===e.kind?1800:3600)})),`你是 agent 评测系统中的“真实任务输出定位器”。
175
+ ${a.slice(-n)}`}function m(e){return"string"==typeof e?e:Array.isArray(e)?e.map(e=>{let t=c(e);return t?d(t.text??t.content??t.input??t):d(e)}).filter(Boolean).join("\n"):d(e)}function f(e){let t=e?.tool_calls??e?.toolCalls;return Array.isArray(t)?t.map(c).filter(e=>!!e):[]}function g(e){let t=c(e.function);return String(t?.name||e.name||e.type||"tool").trim()}function y(e){let t=c(e.function);return d(t?.arguments??e.arguments??e.input??"")}function h(e){return d(e.output??e.result??e.content??"")}function w(e,t){return t&&e.find(e=>e.id===t)?.text?.trim()||""}function _(e,t){return!!t&&e.some(e=>e.id===t)}function v(e,t,a,r,n){return{status:"found",outputForEvaluation:e,confidence:t,reason:a,sourceRefs:r?[r]:[],rawAnalysis:n}}async function A(e,t,a){let r=await e.chat.completions.create({model:t,temperature:0,top_p:1,seed:42,messages:[{role:"user",content:a}]});return r.choices?.[0]?.message?.content?.trim()||""}async function S(e){let t=e.threshold??.75,a=e.maxLlmCalls??10,r=String(e.fallbackOutput||"").trim(),n=(e,t={})=>r?function(e,t,a={}){return v(e,0,`未能从 trace 中定位真实任务输出,已回退使用 execution.finalResult。原始原因:${t}`,"execution.finalResult",{...a,fallback:{used:!0,source:"execution.finalResult",reason:t}})}(r,e,t):function(e,t={}){return{status:"missing",outputForEvaluation:null,confidence:0,reason:e,sourceRefs:[],rawAnalysis:t}}(e,t),{client:s,model:i}=await l(e.user);if(!s||!i)return n("未配置可用评测模型,无法提取真实输出。");let o=function(e){let t=[],a=0,r=0,n=0;for(let s=0;s<e.length;s+=1){let i=c(e[s]);if(!i)continue;let o=Array.isArray(i.requestMessages)?i.requestMessages:[];for(let e of o){let r=c(e);r&&"tool"===String(r.role||"").toLowerCase()&&(n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:String(r.name||r.tool_call_id||"tool"),input:"",output:m(r.content)}))}let l=c(i.responseMessage);if(l){let e=m(l.content);(e||f(l).length>0)&&(r+=1,t.push({id:`llm-${r}`,type:"llm",order:a++,interactionIndex:s,agent:String(i.agent||i.subagent_name||""),input:function(e,t){if(!Array.isArray(e))return"";let a=e.map((e,t)=>{let a=c(e);if(!a)return"";let r=String(a.role||"message"),n=a.name?`/${String(a.name)}`:"";return`[${t+1}] ${r}${n}: ${m(a.content)}`}).filter(Boolean).join("\n");return p(a,1800)}(o,0),inputParts:Array.isArray(o)?o.map(e=>{let t=c(e);if(!t)return null;let a=m(t.content).trim();return a?{role:String(t.role||"message"),text:a,...t.name?{name:String(t.name)}:{}}:null}).filter(e=>!!e):[],output:e}));for(let e of f(l))n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:g(e),input:y(e),output:h(e)});continue}let u=String(i.role||"").toLowerCase();for(let e of("tool"===u?(n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:String(i.name||i.tool_call_id||"tool"),input:"",output:m(i.content)})):("assistant"===u||"subagent"===u||"agent"===u||"opencode"===u)&&(r+=1,t.push({id:`llm-${r}`,type:"llm",order:a++,interactionIndex:s,agent:String(i.agent||i.subagent_name||""),input:"",output:m(i.content)})),f(i)))n+=1,t.push({id:`tool-${n}`,type:"tool",order:a++,interactionIndex:s,name:g(e),input:y(e),output:h(e)})}return t}(e.interactions||[]),d=o.filter(e=>"llm"===e.type&&e.output?.trim()).slice(-Math.max(1,a));if(0===d.length)return n("链路中没有可用于输出提取的 LLM 调用。",{event_count:o.length});try{var S,x;let a,r,l=d.filter(e=>"llm"===e.type&&e.output?.trim()).map(e=>({id:`${e.id}.output`,eventId:e.id,kind:"llm_output",text:e.output.trim(),agent:e.agent,name:e.name,interactionIndex:e.interactionIndex})),c=await A(s,i,(S=e.userTask,a=l.map(e=>({id:e.id,event_id:e.eventId,kind:e.kind,agent:e.agent||"",name:e.name||"",interaction_index:e.interactionIndex,text_preview:p(e.text,"llm_input"===e.kind?1800:3600)})),`你是 agent 评测系统中的“真实任务输出定位器”。
176
176
 
177
177
  你的任务:
178
178
  基于用户真实输入和最近的 LLM 调用,从 source_candidates 中选择“一条最像用户任务真实输出的完整原始数据”。
@@ -203,7 +203,7 @@ user_task:
203
203
  ${S}
204
204
 
205
205
  source_candidates:
206
- ${JSON.stringify(a,null,2)}`)),m=u(c);if(!m)return n("第一轮输出提取模型未返回合法 JSON。",{pass:"first",raw_response:c,threshold:t});let f=E.parse(m),g=w(l,f.selected_source_id),y={pass:"first",response:f,raw_response:c,source_candidate_ids:l.map(e=>e.id),threshold:t};if(f.has_task_output&&g)return v(g,f.confidence,f.reason,f.selected_source_id,{...y,accepted_below_threshold:f.confidence<t});let h=f.followup_anchor_llm_call_id||"";if(!f.needs_followup_context||!h){let e=f.selected_source_id&&!_(l,f.selected_source_id)?`第一轮返回的 selected_source_id=${f.selected_source_id} 不在候选列表中。`:"";return n(e||f.reason||`输出定位置信度 ${f.confidence} 低于阈值 ${t},且无需二次上下文。`,y)}let b=o.find(e=>"llm"===e.type&&e.id===h);if(!b)return n(`第一轮返回的 followup_anchor_llm_call_id=${h} 不存在。`,y);let R=o.find(e=>"llm"===e.type&&e.order>b.order),I=o.filter(e=>e.order>=b.order&&(!R||e.order<R.order)),C=function(e){let t=function(e){let t=[];for(let a of e)a.input?.trim()&&("llm"===a.type&&a.inputParts?.length?a.inputParts.forEach((e,r)=>{t.push({id:`${a.id}.input.${r+1}`,eventId:a.id,kind:"llm_input",text:e.text,agent:a.agent,name:a.name,interactionIndex:a.interactionIndex})}):t.push({id:`${a.id}.input`,eventId:a.id,kind:"llm"===a.type?"llm_input":"tool_input",text:a.input,agent:a.agent,name:a.name,interactionIndex:a.interactionIndex})),a.output?.trim()&&t.push({id:`${a.id}.output`,eventId:a.id,kind:"llm"===a.type?"llm_output":"tool_output",text:a.output,agent:a.agent,name:a.name,interactionIndex:a.interactionIndex});return t}(e),a=[],r=0;for(let e of t){let t="tool_output"===e.kind?4e3:1200,n=p(e.text,t);if(r+n.length>24e3)break;a.push(e),r+=n.length}return a}(I),N=await A(s,i,(k=e.userTask,r=C.map(e=>({id:e.id,event_id:e.eventId,kind:e.kind,agent:e.agent||"",name:e.name||"",interaction_index:e.interactionIndex,text_preview:p(e.text,"tool_output"===e.kind?4e3:1200)})),`你是 agent 评测系统中的“工具上下文产物定位器”。
206
+ ${JSON.stringify(a,null,2)}`)),m=u(c);if(!m)return n("第一轮输出提取模型未返回合法 JSON。",{pass:"first",raw_response:c,threshold:t});let f=E.parse(m),g=w(l,f.selected_source_id),y={pass:"first",response:f,raw_response:c,source_candidate_ids:l.map(e=>e.id),threshold:t};if(f.has_task_output&&g)return v(g,f.confidence,f.reason,f.selected_source_id,{...y,accepted_below_threshold:f.confidence<t});let h=f.followup_anchor_llm_call_id||"";if(!f.needs_followup_context||!h){let e=f.selected_source_id&&!_(l,f.selected_source_id)?`第一轮返回的 selected_source_id=${f.selected_source_id} 不在候选列表中。`:"";return n(e||f.reason||`输出定位置信度 ${f.confidence} 低于阈值 ${t},且无需二次上下文。`,y)}let b=o.find(e=>"llm"===e.type&&e.id===h);if(!b)return n(`第一轮返回的 followup_anchor_llm_call_id=${h} 不存在。`,y);let R=o.find(e=>"llm"===e.type&&e.order>b.order),I=o.filter(e=>e.order>=b.order&&(!R||e.order<R.order)),C=function(e){let t=function(e){let t=[];for(let a of e)a.input?.trim()&&("llm"===a.type&&a.inputParts?.length?a.inputParts.forEach((e,r)=>{t.push({id:`${a.id}.input.${r+1}`,eventId:a.id,kind:"llm_input",text:e.text,agent:a.agent,name:a.name,interactionIndex:a.interactionIndex})}):t.push({id:`${a.id}.input`,eventId:a.id,kind:"llm"===a.type?"llm_input":"tool_input",text:a.input,agent:a.agent,name:a.name,interactionIndex:a.interactionIndex})),a.output?.trim()&&t.push({id:`${a.id}.output`,eventId:a.id,kind:"llm"===a.type?"llm_output":"tool_output",text:a.output,agent:a.agent,name:a.name,interactionIndex:a.interactionIndex});return t}(e),a=[],r=0;for(let e of t){let t="tool_output"===e.kind?4e3:1200,n=p(e.text,t);if(r+n.length>24e3)break;a.push(e),r+=n.length}return a}(I),N=await A(s,i,(x=e.userTask,r=C.map(e=>({id:e.id,event_id:e.eventId,kind:e.kind,agent:e.agent||"",name:e.name||"",interaction_index:e.interactionIndex,text_preview:p(e.text,"tool_output"===e.kind?4e3:1200)})),`你是 agent 评测系统中的“工具上下文产物定位器”。
207
207
 
208
208
  你的任务:
209
209
  从 source_candidates 中选择“一条最像用户任务真实输出的原始数据”。
@@ -227,9 +227,9 @@ ${JSON.stringify(a,null,2)}`)),m=u(c);if(!m)return n("第一轮输出提取模
227
227
  }
228
228
 
229
229
  user_task:
230
- ${k}
230
+ ${x}
231
231
 
232
232
  source_candidates:
233
- ${JSON.stringify(r,null,2)}`)),$=u(N);if(!$)return n("第二轮输出提取模型未返回合法 JSON。",{pass:"second",first:f,raw_first_response:c,raw_second_response:N,followup_anchor_llm_call_id:h,followup_event_ids:I.map(e=>e.id),threshold:t});let O=x.parse($),j=w(C,O.selected_source_id),M={pass:"second",first:f,second:O,raw_first_response:c,raw_second_response:N,followup_anchor_llm_call_id:h,followup_event_ids:I.map(e=>e.id),source_candidate_ids:C.map(e=>e.id),threshold:t};if(O.has_task_output&&j)return v(j,O.confidence,O.reason,O.selected_source_id,{...M,accepted_below_threshold:O.confidence<t});let T=O.selected_source_id&&!_(C,O.selected_source_id)?`第二轮返回的 selected_source_id=${O.selected_source_id} 不在候选列表中。`:"";return n(T||O.reason||`二次输出定位置信度 ${O.confidence} 低于阈值 ${t}。`,M)}catch(e){return n(`真实输出提取 LLM 调用失败:${e.message||String(e)}`,{error:e.message||String(e)})}}e.s(["extractTaskResultArtifact",()=>S]),a()}catch(e){a(e)}},!1),830484,e=>{"use strict";let t={trace_missing_input:{errorCategory:"trace",shortStatus:"Trace 缺输入",userMessage:"Trace 缺少实际输入,无法匹配评测集 case。",reason:"系统没有从本次执行记录中提取到可用于匹配 case 的任务输入。",nextAction:"检查 trace 采集是否包含用户任务输入;必要时重新采集或重新执行该任务。",retryable:!1,stage:"case-match"},trace_missing_output:{errorCategory:"trace",shortStatus:"Trace 缺输出",userMessage:"Trace 缺少实际输出,无法做任务完成度评测。",reason:"本次 trace 没有提取到 Agent 最终输出,也没有可用的 execution.finalResult fallback。",nextAction:"检查 Agent 是否产出最终回复;确认 trace 采集包含 assistant final message;必要时重新跑该 case。",retryable:!1,stage:"result-artifact"},task_output_extraction_failed:{errorCategory:"trace",shortStatus:"任务输出提取失败",userMessage:"无法从 trace 中提取任务输出。",reason:"任务输出提取流程没有定位到可用于任务完成度评测的最终输出,且没有 fallback 可用。",nextAction:"检查 trace 中是否包含最终回复或关键工具输出;必要时重试评测或重新采集 trace。",retryable:!0,stage:"result-artifact"},trace_data_empty:{errorCategory:"trace",shortStatus:"Trace 数据为空",userMessage:"Trace 数据为空,无法评测。",reason:"系统没有找到可用的 session interactions,也没有足够的 query/finalResult 生成兜底交互。",nextAction:"检查 trace 采集、上传或执行记录入库是否完整。",retryable:!1,stage:"trace-load"},trace_parse_failed:{errorCategory:"trace",shortStatus:"Trace 解析失败",userMessage:"Trace 数据解析失败,无法评测。",reason:"Session.interactions 不是合法 JSON 或结构不兼容。",nextAction:"检查 trace 采集数据格式,必要时重新上传或修复采集链路。",retryable:!1,stage:"trace-parse"},case_not_matched:{errorCategory:"case",shortStatus:"无匹配 case",userMessage:"Trace 输入没有匹配到可用于评测的 case。",reason:"本次任务输入与当前评测集中的 case.input 没有达到可用匹配。",nextAction:"补充对应 case,或确认本次 trace 的任务输入与评测集 case.input 是否一致。",retryable:!1,stage:"case-match"},case_match_failed:{errorCategory:"case",shortStatus:"匹配 case 失败",userMessage:"无法根据 trace 输入自动定位可用于评测的 case。",reason:"trace 输入没有精确匹配到评测集 case,后台自动匹配也没有得到可用结果。",nextAction:"检查本次 trace 的任务输入是否与评测集 case.input 对齐;必要时补充 case 或重新选择评测集。",retryable:!0,stage:"case-match"},dataset_missing:{errorCategory:"dataset",shortStatus:"评测集不存在",userMessage:"评测集不存在,无法匹配可评测 case。",reason:"评测结果关联的数据集已经不存在,或当前用户不可访问。",nextAction:"重新选择评测集后再发起评测。",retryable:!1,stage:"dataset-load"},dataset_empty:{errorCategory:"dataset",shortStatus:"评测集为空",userMessage:"评测集没有可评测 case。",reason:"当前匹配范围内没有可用于评测的 case。",nextAction:"补充评测集 case 后重新评测。",retryable:!1,stage:"dataset-load"},case_missing_expected_output:{errorCategory:"case",shortStatus:"Case 缺预期结果",userMessage:"Case 缺少预期结果,无法做任务完成度评测。",reason:"已匹配到 case,但 expectedOutput 为空。",nextAction:"为该 case 补充 expectedOutput 后重新评测。",retryable:!1,stage:"case-match"},custom_reference_missing:{errorCategory:"case",shortStatus:"缺 reference_output",userMessage:"自定义评估器缺少 reference_output。",reason:"自定义评估器 prompt 引用了 reference_output,但没有匹配到带预期结果的 case。",nextAction:"补充评测集 expectedOutput,或调整自定义评估器 prompt。",retryable:!1,stage:"custom-evaluator"},trace_step_analysis_failed:{errorCategory:"model",shortStatus:"步骤抽取失败",userMessage:"Trace 步骤动态分析失败。",reason:"系统尝试从 trace 中抽取实际执行步骤时失败,通常与模型配置或调用异常有关。",nextAction:"检查评测模型配置和服务状态后重试。",retryable:!0,stage:"trace-step-analysis"},trace_no_steps:{errorCategory:"trace",shortStatus:"Trace 无步骤",userMessage:"Trace 无可提取执行步骤,无法做轨迹评测。",reason:"系统没有从本次 trace 中提取到可用于轨迹评测的实际执行步骤。",nextAction:"检查 trace 质量、采集粒度或执行记录是否完整。",retryable:!1,stage:"trace-step-analysis"},evaluator_timeout:{errorCategory:"evaluator",shortStatus:"评测超时",userMessage:"评测器运行超时。",reason:"评测器在限定时间内没有返回结果。",nextAction:"重试评测;如果持续出现,请检查模型服务响应时间。",retryable:!0,stage:"evaluator"},evaluator_output_invalid:{errorCategory:"evaluator",shortStatus:"评测器输出异常",userMessage:"评测器未返回有效结构化结果。",reason:"评测器输出无法解析为系统需要的 JSON/评分结构。",nextAction:"重试评测;如果持续出现,请检查评测器模型输出。",retryable:!0,stage:"evaluator"},result_evaluator_failed:{errorCategory:"evaluator",shortStatus:"结果评测失败",userMessage:"任务完成度评测失败。",reason:"任务完成度评测器没有产出可用评分或评测 session。",nextAction:"重试评测;如果持续出现,请检查模型配置和评测器日志。",retryable:!0,stage:"result-evaluator"},persist_failed:{errorCategory:"system",shortStatus:"保存失败",userMessage:"评测结果保存失败。",reason:"评测已执行,但结果写入数据库时失败。",nextAction:"检查数据库或服务状态后重试。",retryable:!0,stage:"persist"},evaluator_recovered_failed:{errorCategory:"system",shortStatus:"评测进程异常",userMessage:"评测进程异常中断。",reason:"后台恢复逻辑发现该评测长期停留在 pending/running 状态。",nextAction:"重试评测,并查看服务日志确认是否有进程异常。",retryable:!0,stage:"recover"}};function a(e,r={}){let n=t[e]??{errorCategory:"system",shortStatus:"评测失败",userMessage:"评测执行失败。",reason:"评测执行过程中出现未分类异常。",nextAction:"重试评测;如果持续出现,请查看服务日志。",retryable:!0,stage:"unknown"};return{errorCode:e,errorCategory:n.errorCategory,shortStatus:n.shortStatus,userMessage:r.userMessage||n.userMessage,reason:r.reason||n.reason,nextAction:r.nextAction||n.nextAction,retryable:"boolean"==typeof r.retryable?r.retryable:n.retryable,stage:r.stage||n.stage,...r.details?{details:r.details}:{},...r.internal?{internal:r.internal}:{}}}e.s(["buildEvaluationDiagnostic",()=>a])},652192,e=>{"use strict";function t(e){switch(e.status){case"ok":return{state:"ok",code:"ok",message:"skill 关键步骤与 trace 实际步骤已完整对比"};case"no-skill-targets":return{state:"not-applicable",code:"no-skill-targets",message:"trace 未关联任何 skill,本次评测不做 skill 归因"};case"missing-skill":return{state:"degraded",code:"missing-skill",message:`trace 关联的 skill 在 Skills Hub 中找不到:${e.missingSkills.join("、")}`};case"missing-parsed-flow":return{state:"degraded",code:"missing-parsed-flow",message:`skill 尚未生成可用的解析流程,无法提取关键步骤:${e.missingSkills.join("、")}`};case"no-key-actions":return{state:"degraded",code:"no-key-actions",message:"skill flow 解析成功但未识别出任何关键步骤"};case"dynamic-analysis-failed":return{state:"degraded",code:"dynamic-analysis-failed",message:"trace 步骤动态分析失败(通常是 LLM 未配置或调用失败)"};case"no-extracted-steps":return{state:"degraded",code:"no-extracted-steps",message:"未能从 trace 中提取出实际执行步骤"}}}e.s(["buildSkillAttributionStatus",()=>t])},600461,e=>e.a(async(t,a)=>{try{let z;var r=e.i(89171),n=e.i(854763),s=e.i(948594),i=e.i(833821),o=e.i(511284),l=e.i(841212),u=e.i(664503),c=e.i(826917),d=e.i(418494),p=e.i(556602),m=e.i(926307),f=e.i(190014),g=e.i(508439),y=e.i(670497),h=e.i(794538),w=e.i(374995),_=e.i(830484),v=e.i(228356),A=e.i(240317),S=e.i(652192),E=e.i(450579),x=e.i(837926),k=t([n,s,i,l,u,d,f,g,y,v,E]);[n,s,i,l,u,d,f,g,y,v,E]=k.then?(await k)():k;let W=new Set(["trace-quality-evaluator","preset-agent-trace-quality","preset-agent-task-completion"]),B="preset-agent-trace-quality",K="preset-agent-task-completion",V=[1500,3e3,5e3,8e3],H={[B]:"Agent 轨迹质量",[K]:"Agent 任务完成度"},X=/\{\{\s*(input|output|reference_output|trajectory)\s*\}\}/g;function b(e){return String(e||"").trim().replace(/\s+/g," ")}function R(e){let t=(Array.isArray(e)?e:null==e?[]:[e]).map(e=>String(e||"").trim()).map(e=>"trace-quality-evaluator"===e?B:e).filter(e=>W.has(e)||(0,v.isCustomEvaluatorId)(e));return Array.from(new Set(t))}function I(e,t={}){return{selectedEvaluators:e,selectedEvaluatorNames:e.map(e=>{let a=H[e];if(a)return a;let r=t.customNameResolver?.(e);return r||e}),...t.autoWatch?{autoWatch:!0}:{},...t.watchedAgent?{watchedAgent:t.watchedAgent}:{},...t.autoWatch&&t.autoWatchEnabledAt?{autoWatchEnabledAt:t.autoWatchEnabledAt}:{}}}function C(e){let t=e?(0,h.parseLooseJson)(e):null,a=R(t?.selectedEvaluators),r=Array.isArray(t?.selectedEvaluatorNames)?t.selectedEvaluatorNames.filter(e=>"string"==typeof e&&!!e.trim()):[],n=t?.autoWatch===!0,s="string"==typeof t?.watchedAgent?t.watchedAgent.trim():"",i=(0,E.normalizeAutoWatchEnabledAt)(t?.autoWatchEnabledAt);return a.length>0?r.length===a.length?{selectedEvaluators:a,selectedEvaluatorNames:r,...n?{autoWatch:!0}:{},...s?{watchedAgent:s}:{},...n&&i?{autoWatchEnabledAt:i}:{}}:I(a,{autoWatch:n,watchedAgent:s,autoWatchEnabledAt:i}):I([B],{autoWatch:n,watchedAgent:s,autoWatchEnabledAt:i})}function N(e){let t=(0,h.parseLooseJson)(e||"");return t&&"object"==typeof t?t:{}}function $(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.source||"").trim(),a=String(e.grayscaleTaskId||"").trim(),r=String(e.caseId||"").trim(),n=String(e.side||"").trim(),s=String(e.executionTraceId||"").trim(),i=String(e.evaluationClaimId||"").trim(),o="number"==typeof e.runIndex&&Number.isFinite(e.runIndex)?Math.floor(e.runIndex):NaN,l="number"==typeof e.roundIndex&&Number.isFinite(e.roundIndex)?Math.floor(e.roundIndex):NaN,u="number"==typeof e.evaluationAttempt&&Number.isFinite(e.evaluationAttempt)?Math.floor(e.evaluationAttempt):NaN;return"grayscale-ab"===t&&a&&r&&("a"===n||"b"===n)&&s&&i&&Number.isFinite(o)&&Number.isFinite(l)&&Number.isFinite(u)?{source:"grayscale-ab",grayscaleTaskId:a,caseId:r,side:n,runIndex:o,roundIndex:l,executionTraceId:s,evaluationClaimId:i,evaluationAttempt:u}:null}async function O(e,t,a,r,n,s,i,o,l,c,d){let p=await (0,u.evaluateTaskCompletionViaOpencode)({caseInput:e,expectedOutput:t,actualOutput:a,precomputedRootCauses:r,precomputedRootCauseSource:n,traceSummaryText:s,skillContext:i,skillAttributionMode:o},l,c,d);return{isCorrect:p.isCorrect,score:p.score,reason:p.reason,rawAnalysis:p.rawAnalysis}}async function j(e,t,a){return Promise.race([e,new Promise((e,r)=>setTimeout(()=>r(a),t))])}function M(e,t){let a=t.now??new Date;return{attemptCount:e,maxAttempts:5,retrying:t.retrying,exhausted:t.exhausted,lastAttemptAt:a.toISOString(),...t.lastError?{lastError:t.lastError}:{},...t.retrying&&t.delayMs?{nextRetryAt:new Date(a.getTime()+t.delayMs).toISOString()}:{}}}async function T(e,t,a){let r=a.rawAnalysis&&"object"==typeof a.rawAnalysis?a.rawAnalysis:null,s=r?.key_point_findings;if(!("number"==typeof a.score&&Number.isFinite(a.score)&&String(a.reason||"").trim()&&Array.isArray(s)))return void console.warn("[trajectory-eval] skip persisting incomplete result-evaluation payload to execution");let i={isAnswerCorrect:a.isCorrect,answerScore:a.score,judgmentReason:a.reason};e?.id?await n.prismaRaw.execution.update({where:{id:e.id},data:i}):t&&await n.prismaRaw.execution.updateMany({where:{taskId:t},data:i})}async function L(e,t,a={}){let r=b(t);if(!r)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 没有实际输入,无法匹配评估数据集 case`);let n=!0===a.requireExpectedOutput,s=!0===a.includeAllDatasetKinds,o=Array.isArray(a.allowedDatasetIds)?a.allowedDatasetIds.map(e=>String(e).trim()).filter(Boolean):[],l=(await (0,i.readAllAgentDatasets)()).filter(t=>t.user===e).filter(e=>0===o.length||o.includes(e.id)).filter(e=>s||n||"trajectory"===e.datasetKind);if(0===l.length)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} ${s?"未找到可用于评测的数据集":n?"未找到可用于结果评测的数据集":"未找到轨迹评测数据集"}`);for(let e of l){let t=e.cases.find(e=>b(e.input)===r&&(!n||!!b(e.expectedOutput)));if(t)return{dataset:e,caseEntry:t}}let u=[],c=new Map;for(let e of l)for(let t of e.cases){if(n&&!b(t.expectedOutput))continue;let a=`${e.id}::${t.id}`;u.push({id:a,input:t.input}),c.set(a,{dataset:e,caseEntry:t})}let d=await (0,g.findBestSemanticCaseMatch)(u,t,{user:e,requireModelAvailable:!0});if(d.error)throw new Q("semantic-match-llm",`${p.NO_EVALUABLE_CASE_PREFIX} 语义匹配调用评测模型失败:${d.error}`);if(d.caseId){let e=c.get(d.caseId);if(e)return e}throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 实际输入未匹配到${s?"评测数据集中的":n?"带预期结果的":"轨迹评测数据集中的"} case 输入`)}async function J(e){try{let t=await e.json(),a=String(t.user||"").trim(),o=String(t.evaluatorRunId||t.runId||"").trim(),l=$(t.grayscaleBinding),u=Array.isArray(t.evaluators)&&t.evaluators.length>0?t.evaluators:t.evaluator,c=R(u),d=!0===t.autoWatch,p=(0,E.normalizeAutoWatchAgent)(t.watchedAgent||t.agent||""),f=p,g=new Date().toISOString(),y=!0===t.placeholderOnly;if(!a)return r.NextResponse.json({error:"user is required"},{status:400});if(d&&p&&(0,x.isEvaluatorAgentName)(p))return r.NextResponse.json({error:"autoWatch requires a non-evaluator execution agent"},{status:400});let _=c.filter(v.isCustomEvaluatorId),A=new Set,S=new Map;if(_.length>0){let e=await (0,v.listCustomEvaluatorIds)(a),t=[];for(let a of _)e.has(a)?A.add(a):t.push(a);if(t.length>0)return r.NextResponse.json({error:`unknown custom evaluators: ${t.join(", ")}`},{status:400});for(let e of A){let t=await (0,v.loadCustomEvaluator)(a,e);t&&S.set(e,t.name)}}let k=c.filter(e=>(0,v.isCustomEvaluatorId)(e)?A.has(e):W.has(e)),b=I(k.length>0?k:[B],{autoWatch:d,watchedAgent:f,customNameResolver:e=>S.get(e)});if(u&&0===k.length||0===b.selectedEvaluators.length)return r.NextResponse.json({error:"unsupported evaluators"},{status:400});let N=Array.isArray(t.taskIds)?t.taskIds.map(e=>String(e).trim()).filter(Boolean):[],O=String(t.datasetId||"").trim(),j=Array.isArray(t.datasetIds)?t.datasetIds.map(e=>String(e).trim()).filter(Boolean):[],M=Array.isArray(t.pairs)?t.pairs:[],T=(0,w.normalizeTrajectoryTaskMeta)({title:t.taskTitle,description:t.taskDescription}),L=new Set,J="",F="";if(o){let e=await n.prismaRaw.trajectoryEvalResult.findMany({where:{user:a,evaluatorRunId:o},orderBy:{createdAt:"asc"}});if(0===e.length)return r.NextResponse.json({error:"evaluatorRunId not found"},{status:404});let t=e[0],s=[...e].reverse().map(e=>(function(e){let t=e?(0,h.parseLooseJson)(e):null,a=R(t?.selectedEvaluators);if(0===a.length)return null;let r=Array.isArray(t?.selectedEvaluatorNames)?t.selectedEvaluatorNames.filter(e=>"string"==typeof e&&!!e.trim()):[],n=t?.autoWatch===!0,s="string"==typeof t?.watchedAgent?t.watchedAgent.trim():"",i=(0,E.normalizeAutoWatchEnabledAt)(t?.autoWatchEnabledAt);return r.length===a.length?{selectedEvaluators:a,selectedEvaluatorNames:r,...n?{autoWatch:!0}:{},...s?{watchedAgent:s}:{},...n&&i?{autoWatchEnabledAt:i}:{}}:I(a,{autoWatch:n,watchedAgent:s,autoWatchEnabledAt:i})})(e.rawAnalysisJson)).find(e=>!!e);b=k.length>0?I(k,{autoWatch:d,watchedAgent:f,customNameResolver:e=>S.get(e)}):s||C(t.rawAnalysisJson),T=(0,w.extractTrajectoryTaskMeta)(t.rawAnalysisJson,t.createdAt),O=O||t.datasetId||"",J=(0,E.normalizeAutoWatchAgent)(s?.watchedAgent||await (0,E.resolveWatchedAgentForRunRows)(a,e)),F=(0,E.normalizeAutoWatchEnabledAt)(s?.autoWatchEnabledAt),L=new Set(e.filter(e=>"failed"!==e.status).map(e=>e.taskId||e.executionId||"").filter(Boolean))}if(d&&N.length>0){let e=await (0,E.resolveSingleTrajectoryCandidateAgent)(a,N);if(e.missingTaskIds.length>0)return r.NextResponse.json({error:`autoWatch only accepts traces that appear in 发起新评测: ${e.missingTaskIds.join(", ")}`},{status:400});if(!e.agent)return r.NextResponse.json({error:`autoWatch requires a single execution agent, got: ${e.distinctAgents.join(", ")||"none"}`},{status:400});if(J&&!(0,E.autoWatchAgentNamesMatch)(J,e.agent))return r.NextResponse.json({error:`autoWatch agent mismatch: run watches ${J}, new traces belong to ${e.agent}`},{status:400});f=e.agent}else{if(d&&!o&&!f)return r.NextResponse.json({error:"watchedAgent is required when starting autoWatch without seed traces"},{status:400});d&&J&&(f=J)}b=I(k.length>0?k:b.selectedEvaluators,{autoWatch:d,watchedAgent:d?f:"",autoWatchEnabledAt:d?o&&F||g:"",customNameResolver:e=>S.get(e)});let P=o||`trun_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,D=[],U=[];if(N.length>0)for(let e of N){if(L.has(e)){U.push({caseId:"",reason:`taskId ${e} already exists in this run`});continue}let t=await n.prismaRaw.trajectoryEvalResult.create({data:{user:a,evaluatorRunId:P,datasetId:"",caseId:"",executionId:null,taskId:e,status:"pending",rawAnalysisJson:JSON.stringify({...b,taskMeta:T,...l?{grayscaleBinding:l}:{},...j.length>0?{allowedDatasetIds:j}:{}})}});D.push({id:t.id,caseId:"",taskId:e})}else if((d||y)&&!o){if(O){let e=await (0,i.findAgentDataset)(a,O);if(!e)return r.NextResponse.json({error:"dataset not found"},{status:404});if("trajectory"!==e.datasetKind)return r.NextResponse.json({error:`dataset kind must be 'trajectory', got '${e.datasetKind}'`},{status:400})}let e=await n.prismaRaw.trajectoryEvalResult.create({data:{user:a,evaluatorRunId:P,datasetId:O,caseId:"",executionId:null,taskId:null,status:"pending",rawAnalysisJson:JSON.stringify({...b,taskMeta:T,...l?{grayscaleBinding:l}:{},watchPlaceholder:!0,...y?{placeholderOnly:!0}:{}})}});D.push({id:e.id,caseId:""})}else{if(!O||!(M.length>0))return r.NextResponse.json({error:"provide taskIds, datasetId+pairs, or placeholderOnly:true"},{status:400});let e=await (0,i.findAgentDataset)(a,O);if(!e)return r.NextResponse.json({error:"dataset not found"},{status:404});let t=new Map(e.cases.map(e=>[e.id,e]));for(let e of M){let r=String(e.caseId||"").trim(),s=e.executionId?String(e.executionId).trim():void 0,i=e.taskId?String(e.taskId).trim():void 0,o=i||s||"";if(!l&&o&&L.has(o)){U.push({caseId:r,reason:`${o} already exists in this run`});continue}if(!t.get(r)){U.push({caseId:r,reason:"case not found in dataset"});continue}if(!s&&!i){U.push({caseId:r,reason:"executionId or taskId is required"});continue}let u=await n.prismaRaw.trajectoryEvalResult.create({data:{user:a,evaluatorRunId:P,datasetId:O,caseId:r,executionId:s||null,taskId:i||null,status:"pending",rawAnalysisJson:JSON.stringify({...b,taskMeta:T,...l?{grayscaleBinding:l}:{}})}});D.push({id:u.id,caseId:r,executionId:s,taskId:i})}}if(0===D.length)return r.NextResponse.json({error:"no valid tasks to run",skipped:U},{status:400});Promise.all(D.map(e=>(0,s.reattributeServiceTraceOwner)((e.taskId||e.executionId||"").trim(),a).catch(()=>!1)));let z=D.filter(e=>e.taskId||e.executionId).map(e=>e.id);return z.length>0&&((0,m.registerTrajectoryEvalRun)(P,a),q(a,P,z).catch(e=>{console.error("[trajectory-eval] background run crashed:",e)}).finally(()=>(0,m.unregisterTrajectoryEvalRun)(P))),r.NextResponse.json({success:!0,evaluatorRunId:P,evaluators:b.selectedEvaluators,evaluatorNames:b.selectedEvaluatorNames,datasetId:O,created:D,skipped:U})}catch(t){console.error("trajectory/run POST error:",t);let e=t instanceof Error?t.message:"failed to start trajectory evaluation";return r.NextResponse.json({error:e},{status:500})}}async function F(e){try{let t=await e.json(),a=String(t.user||"").trim(),s=String(t.evaluatorRunId||t.runId||"").trim(),i=!0===t.autoWatch;if(!a)return r.NextResponse.json({error:"user is required"},{status:400});if(!s)return r.NextResponse.json({error:"evaluatorRunId is required"},{status:400});let o=await n.prismaRaw.trajectoryEvalResult.findMany({where:{user:a,evaluatorRunId:s},orderBy:{createdAt:"asc"}});if(0===o.length)return r.NextResponse.json({error:"evaluatorRunId not found"},{status:404});let l=C(o[0].rawAnalysisJson),u=(0,E.normalizeAutoWatchAgent)(l.watchedAgent),c=u&&!(0,x.isEvaluatorAgentName)(u)?u:await (0,E.resolveWatchedAgentForRunRows)(a,o);if(i&&!c)return r.NextResponse.json({error:"autoWatch requires existing traces from a single non-evaluator execution agent"},{status:400});let d=I(l.selectedEvaluators,{autoWatch:i,watchedAgent:c,autoWatchEnabledAt:i?new Date().toISOString():""});return await n.prismaRaw.$transaction(o.map(e=>{var t;let a;return n.prismaRaw.trajectoryEvalResult.update({where:{id:e.id},data:{rawAnalysisJson:(0,E.mergeWatchedAgentIntoRawAnalysis)((t=e.rawAnalysisJson,a={...N(t),selectedEvaluators:d.selectedEvaluators,selectedEvaluatorNames:d.selectedEvaluatorNames,watchedAgent:d.watchedAgent||"",autoWatchEnabledAt:d.autoWatchEnabledAt||""},d.autoWatch?a.autoWatch=!0:(delete a.autoWatch,delete a.autoWatchEnabledAt),d.watchedAgent||delete a.watchedAgent,d.autoWatchEnabledAt||delete a.autoWatchEnabledAt,JSON.stringify(a)),d.watchedAgent||"")}})})),r.NextResponse.json({success:!0,evaluatorRunId:s,autoWatch:i,watchedAgent:d.watchedAgent||""})}catch(t){console.error("trajectory/run PATCH error:",t);let e=t instanceof Error?t.message:"failed to update auto watch state";return r.NextResponse.json({error:e},{status:500})}}let G=(z=Number(process.env.MAX_EVAL_ROW_CONCURRENCY),Number.isFinite(z)&&z>0?Math.min(20,Math.floor(z)):4),Z=Symbol.for("@witty-insight/trajectory-eval-row-limiter");class Q extends Error{stage;cause;constructor(e,t,a){super(`[${e}] ${t}`),this.stage=e,this.cause=a,this.name="StagedEvaluationError"}}async function P(e,t){let a,r=((a=globalThis)[Z]||(a[Z]=(0,p.createSimpleAsyncLimiter)(G)),a[Z]);await r.acquire();try{await D(e,t)}finally{r.release()}}async function D(e,t){let a=null,r=null;try{var s,u,d,h;let E,x,k,R;await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"running",errorMessage:null}});let I=await n.prismaRaw.trajectoryEvalResult.findUnique({where:{id:t}});if(!I)throw new Q("lookup",`result row ${t} disappeared`);if((0,m.getTrajectoryEvalRunSignal)(I.evaluatorRunId)?.aborted)return void await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"failed",errorMessage:"已终止:用户中止了该批次评测"}}).catch(()=>{});I.taskId&&(a=I.taskId,r=(0,c.startOrReplace)(e,I.taskId,"rejudge").runId);let J=null;I.executionId&&(J=await n.prismaRaw.execution.findUnique({where:{id:I.executionId},select:{skill:!0,skillVersion:!0}}).catch(()=>null)),!J&&I.taskId&&(J=await n.prismaRaw.execution.findFirst({where:{taskId:I.taskId},orderBy:{timestamp:"desc"},select:{skill:!0,skillVersion:!0}}).catch(()=>null));let F=J?.skill||null,D="number"==typeof J?.skillVersion?J.skillVersion:null,q=C(I.rawAnalysisJson),z=(0,w.extractTrajectoryTaskMeta)(I.rawAnalysisJson,I.createdAt),W=(s=I.rawAnalysisJson,x=N(s),$(x.grayscaleBinding)),H=q.selectedEvaluators.includes(B),G=q.selectedEvaluators.includes(K),Z=q.selectedEvaluators.filter(v.isCustomEvaluatorId),Y=Z.length>0,ee=null,et=null,ea=null,er=null,en=0,es=null,ei="",eo=null,el=null,eu=[],ec=Y?await Promise.all(Z.map(async t=>({evaluatorId:t,bundle:await (0,v.loadCustomEvaluator)(e,t)}))):[],ed=function(e){let t=new Set;for(let a of e){let e;for(X.lastIndex=0;null!==(e=X.exec(a||""));)t.add(e[1])}return t}(ec.flatMap(e=>[e.bundle?.config.systemPrompt||"",e.bundle?.config.userPrompt||""]).filter(Boolean)),ep=ed.has("reference_output"),em=ed.has("output"),ef=ed.has("trajectory"),eg=I.taskId,ey=I.executionId?await n.prismaRaw.execution.findUnique({where:{id:I.executionId}}):null;!eg&&I.executionId&&ey?.taskId&&(eg=ey.taskId),!ey&&eg&&(ey=await n.prismaRaw.execution.findFirst({where:{taskId:eg}}));let eh=ey?.query||"",ew=await (0,g.extractRealUserInput)(eh,e),e_=ew.normalized_input.trim()||eh,ev=String(ey?.finalResult||"").trim(),eA=(k=N(I.rawAnalysisJson),Array.isArray(k?.allowedDatasetIds)?k.allowedDatasetIds.map(e=>String(e).trim()).filter(Boolean):[]);await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...N(I.rawAnalysisJson),...q,taskMeta:z,caseSnapshot:{taskInput:e_,rawTaskInput:eh,taskInputExtraction:ew}})}});let eS=[];if(eg){let e=await n.prismaRaw.session.findUnique({where:{taskId:eg}});if(e?.interactions)try{let t=JSON.parse(e.interactions);eS=Array.isArray(t)?t:[]}catch(e){throw new Q("trace-parse",`Session.interactions JSON 解析失败: ${e.message}`,e)}}if(0===eS.length&&(e_||ev)){let e=new Date().toISOString();eS=[...e_?[{role:"user",content:e_,timestamp:e}]:[],...ev?[{role:"assistant",content:ev,timestamp:e}]:[]]}let eE=null,ex=null,ek="no-dataset";if(I.datasetId&&I.caseId){try{let t=await (0,i.findAgentDataset)(e,I.datasetId);if(!t)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 评估数据集不存在,无法匹配可评测 case`);ex={id:t.id,name:t.name};let a=b(e_);if(!a&&!I.caseId)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 没有实际输入,无法匹配评估数据集 case`);let r=(I.caseId?t.cases.find(e=>e.id===I.caseId):t.cases.find(e=>b(e.input)===a))||null;if(r&&(ek=I.caseId?"explicit-pair":"exact-input"),!r&&!I.caseId){let a=await (0,g.findBestSemanticCaseMatch)(t.cases.map(e=>({id:e.id,input:e.input})),e_,{user:e,requireModelAvailable:!0});if(a.error)throw new Q("semantic-match-llm",`${p.NO_EVALUABLE_CASE_PREFIX} 语义匹配调用评测模型失败:${a.error}`);a.caseId&&(r=t.cases.find(e=>e.id===a.caseId)??null)&&(ek="semantic")}if(!r)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 实际输入未匹配到当前数据集中的 case 输入`);eE=r}catch(e){if(e instanceof Q)throw e;throw new Q("dataset-load",`读取数据集失败: ${e.message}`,e)}if(!eE)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 未匹配到可评测 case`)}else if(G||H)try{let a=await L(e,e_,{requireExpectedOutput:G,allowedDatasetIds:eA});eE=a.caseEntry,ex={id:a.dataset.id,name:a.dataset.name},ek="auto-match",await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{datasetId:a.dataset.id,caseId:a.caseEntry.id}})}catch(e){if(e instanceof Q&&"no-evaluable-case"===e.stage&&!G)console.warn(`[trajectory/run] no matching dataset, falling back to empty case: ${e.message}`),eE={input:e_,expectedOutput:"",trajectory:"",evaluationFocus:"",rootCauses:[]},ek="fallback";else if(e instanceof Q)throw e;else throw new Q("dataset-auto-match",`自动匹配数据集失败: ${e.message}`,e)}else if(Y)if(ep)try{let a=await L(e,e_,{requireExpectedOutput:!0,includeAllDatasetKinds:!0,allowedDatasetIds:eA});eE=a.caseEntry,ex={id:a.dataset.id,name:a.dataset.name},ek="auto-match",await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{datasetId:a.dataset.id,caseId:a.caseEntry.id}})}catch(e){if(e instanceof Q)throw e;throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 自定义评估器需要 reference_output,但 trace 输入未匹配到带预期结果的数据集 case`,e)}else eE={input:e_,expectedOutput:"",trajectory:"",evaluationFocus:"",rootCauses:[]};else eE={input:e_,expectedOutput:"",trajectory:"",evaluationFocus:"",rootCauses:[]};if(G&&!b(eE.expectedOutput))throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 已匹配到 case,但该 case 缺少预期结果 expectedOutput,无法执行结果评测`);if(Y&&ep&&!b(eE.expectedOutput))throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 自定义评估器需要 reference_output,但未找到可用的预期结果 expectedOutput`);let eb=!!(eE?.rootCauseMeta&&(0,o.canReuseRootCauseCache)(eE.expectedOutput,eE.rootCauseMeta)),eR=eb&&eE?.rootCauseMeta?.status==="ready"?eE.rootCauses||[]:void 0,eI=eb?eE?.rootCauseMeta?.status==="empty"?"none":eE?.rootCauseMeta?.status==="ready"?"dataset-cache":void 0:void 0,eC=e_||eE.input||"",eN={id:eE.id||I.caseId||"",input:eE.input,taskInput:eC,rawTaskInput:eh,taskInputExtraction:ew,expectedOutput:eE.expectedOutput,trajectory:eE.trajectory,evaluationFocus:eE.evaluationFocus,rootCauseCacheStatus:eE.rootCauseMeta?.status||null,rootCauseCacheUpdatedAt:eE.rootCauseMeta?.updatedAt||null,datasetId:ex?.id||I.datasetId||"",datasetName:ex?.name||"",matchKind:ek},e$="trajectory",eO="",ej="",eM=[],eT=[],eL=eE.evaluationFocus,eJ=eE.trajectory,eF=eS.length>0?(u=eS,{summary:R=(0,A.summarizeTrace)(u,{maxSteps:80,maxTextLen:400}),text:(0,A.formatTraceForLLM)(R),steps:R.steps.map(e=>({...e,step_index:e.index,stepIndex:e.index}))}):null,eP=await (0,f.buildSkillKeyActionReference)(ey,e,eS),eD=(0,f.getPrimaryExecutionSkillTargets)(ey,eS).length>0?"skill-aware":"no-skill",eU="ok"===eP.status?{status:"ok",referenceKeyActionsText:eP.referenceKeyActionsText,actualExtractedStepsText:eF?.text||"",referenceKeyActions:eP.referenceKeyActions,actualExtractedSteps:eF?.steps||[]}:eP,eq=(0,S.buildSkillAttributionStatus)(eU);if("ok"===eP.status&&eF&&eF.steps.length>0)e$="skill_key_actions",eO=eP.referenceKeyActionsText,ej=eF.text,eM=eP.referenceKeyActions??[],eT=eF.steps,eL=[b(eE.evaluationFocus),"逐条比较 Skill 自动提取的关键动作与 trace 事件级步骤(user/llm/tool/skill/task),并直接生成每个关键动作的 Skill 改进建议。"].filter(Boolean).join(" ");else if(H){if(!eF||0===eF.steps.length)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 当前 trace 无法提取可评测事件步骤`);e$="trace_only",ej=eF.text,eT=eF.steps,eL=[b(eE.evaluationFocus),"当前 trace 未获得可用 Skill 关键动作;不评估完整性,不生成 Skill 关键动作建议,仅评估工具选择与冗余。"].filter(Boolean).join(" ")}let ez={...q,taskMeta:z,...W?{grayscaleBinding:W}:{},caseSnapshot:eN,skillAttribution:eq,resultSkillMode:eD,comparisonMode:e$,actualTraceExtraction:eF?{source:"summarizeTrace",totalSteps:eF.summary.totalSteps,shownSteps:eF.steps.length,truncated:eF.summary.truncated,totalLlmCalls:eF.summary.totalLlmCalls,totalToolCalls:eF.summary.totalToolCalls,totalSkillCalls:eF.summary.totalSkillCalls,totalTaskCalls:eF.summary.totalTaskCalls}:null,skillKeyActionComparison:"ok"===eP.status?{referenceKeyActionsText:eP.referenceKeyActionsText,actualExtractedStepsText:ej,referenceKeyActions:eP.referenceKeyActions??[],actualExtractedSteps:eT}:null};if((H||G)&&0===eS.length)throw new Q("trace-empty",`taskId=${eg||"N/A"} 对应的 Session 不存在或 interactions 为空`);if(H&&!G){let a=String(ey?.finalResult||"").trim();try{let t=await j((0,y.extractTaskResultArtifact)({userTask:eE.input,interactions:eS,fallbackOutput:a,user:e}),6e5,new Q("result-artifact-timeout",`实际输出提取超过 600s 未完成`));es=t.rawAnalysis,ei=String(t.outputForEvaluation||a||"").trim()}catch(e){console.warn("[trajectory-eval] result artifact extraction failed:",e),ei=a}await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:null,resultEvaluationError:null})}})}if(G){let a="skill-aware"===eD?await (0,f.loadTaskCompletionSkillContext)(ey,eS,e):void 0,r=eF?.text||"",s=Math.min(function(e){let t=N(e).resultEvaluationRetry;if(!t||"object"!=typeof t)return 0;let a=t.attemptCount;return"number"==typeof a&&Number.isFinite(a)&&a>0?Math.floor(a):0}(I.rawAnalysisJson)+1,5),i=new Date;try{await j((async()=>{let o=await (0,y.extractTaskResultArtifact)({userTask:eE.input,interactions:eS,fallbackOutput:ev,user:e});if(es=o.rawAnalysis,!(ei=String(o.outputForEvaluation||"").trim())){et=`结果输出提取失败:${o.reason}`,eo=(0,_.buildEvaluationDiagnostic)(String(o.reason||"").includes("没有可用于输出提取的 LLM 调用")?"trace_missing_output":"task_output_extraction_failed",{details:et,reason:et}),ea=M(s,{retrying:!1,exhausted:!0,lastError:et,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:"",resultEvaluation:null,resultEvaluationError:et,resultEvaluationRetry:ea,diagnostic:eo})}});return}ea=M(s,{retrying:!1,exhausted:!1,now:i}),eo=null,await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:null,resultEvaluationError:null,resultEvaluationRetry:ea})}});let l=await O(eE.input,eE.expectedOutput,ei,eR,eI,r,a,eD,e,F,D);ee={...l.rawAnalysis||{},score:l.score,is_correct:l.isCorrect,reason:l.reason,result_artifact_extraction:{status:o.rawAnalysis?.fallback?"fallback_final_result":o.status,confidence:o.confidence,reason:o.reason,source_refs:o.sourceRefs,fallback_source:o.rawAnalysis?.fallback?"execution.finalResult":null}},await T(ey,eg,l),ea=M(s,{retrying:!1,exhausted:!1,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:null,resultEvaluationRetry:ea})}}),et=null,eo=null})(),6e5,new Q("result-timeout",`结果评测超过 600s 未完成`))}catch(a){console.warn(`[trajectory-eval] result-based evaluation attempt ${s}/5 failed:`,a);let e=a.message||String(a);s<5&&(0,p.isRetryableResultEvaluationFailure)(a)?(er=V[Math.max(0,s-1)]??V[V.length-1]??8e3,en=s,ea=M(s,{retrying:!0,exhausted:!1,lastError:e,delayMs:er,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"running",errorMessage:null,rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:null,resultEvaluationError:null,resultEvaluationRetry:ea})}})):(et=`结果评测失败:${e}`,eo=(0,_.buildEvaluationDiagnostic)(a instanceof Q&&("result-timeout"===a.stage||"result-artifact-timeout"===a.stage)?"evaluator_timeout":"result_evaluator_failed",{details:et,reason:et}),ea=M(s,{retrying:!1,exhausted:!0,lastError:e,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:et,resultEvaluationRetry:ea,diagnostic:eo})}}))}}if(null!=er)return void(d=er,h=en,setTimeout(()=>{P(e,t).catch(e=>{console.error(`[trajectory-eval] scheduled result retry failed row=${t} attempt=${h+1}/5:`,e)})},d));if(Y){if(em&&!ei){let t=String(ey?.finalResult||"").trim();if(eS.length>0)try{let a=await j((0,y.extractTaskResultArtifact)({userTask:eC,interactions:eS,fallbackOutput:t,user:e}),6e5,new Q("result-artifact-timeout",`实际输出提取超过 600s 未完成`));es=a.rawAnalysis,ei=String(a.outputForEvaluation||t||"").trim()}catch(e){console.warn("[trajectory-eval] custom evaluator output extraction failed:",e),ei=t}else ei=t}let t=em?ei:"",a=ef&&eF?.text||"",r=await Promise.all(Z.map(r=>(0,v.runCustomLlmEvaluator)(e,r,{caseInput:eC,expectedOutput:ep?eE.expectedOutput:"",actualOutput:t,traceText:a},F,D).catch(e=>({evaluatorId:r,evaluatorName:r,score:null,reason:"",rawResponse:"",model:"",durationMs:0,error:`运行异常:${e?.message||String(e)}`})))),n={};for(let e of r)n[e.evaluatorId]={evaluatorId:e.evaluatorId,evaluatorName:e.evaluatorName,score:e.score,reason:e.reason,model:e.model,durationMs:e.durationMs,error:e.error},"number"==typeof e.score&&eu.push(e.score);el=n}if(!H){let a=eu.length>0?eu.reduce((e,t)=>e+t,0)/eu.length:null,r=ee?.evaluatorSessionId,s="string"==typeof r?r.trim():"",i=G&&(!ee||!s),o=i?"failed":"done",l=i?et||"结果评测未产出有效结果或评测 session":null;i&&!eo&&(eo=(0,_.buildEvaluationDiagnostic)("result_evaluator_failed",{details:l||void 0,reason:l||void 0})),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:o,trajectoryScore:null,dimensionScoresJson:null,deviationStepsJson:JSON.stringify([]),rootCauseStep:null,reasonText:null,rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:et,resultEvaluationRetry:ea,customEvaluations:el,customVariableNeeds:Array.from(ed),customEvaluationScore:a,...eo?{diagnostic:eo}:{}}),errorMessage:l}}),"done"===o&&await U(e,t,ey,eS);return}let eW={caseId:eE.id||I.caseId||"",caseInput:eE.input,referenceOutput:eE.expectedOutput,referenceTrajectory:eJ,referenceKeyActionsText:eO,actualExtractedStepsText:ej,referenceKeyActions:eM,actualExtractedSteps:eT,skillContext:await (0,f.loadTaskCompletionSkillContext)(ey,eS,e),comparisonMode:e$,evaluationFocus:eL,actualInteractions:eS,taskId:eg||void 0,executionId:I.executionId||ey?.id||void 0};try{E=await Promise.race([(0,l.evaluateTrajectoryViaOpencode)(eW,e,F,D),new Promise((e,t)=>setTimeout(()=>t(new Q("timeout",`单条评测超过 600s 未完成`)),6e5))])}catch(e){if(e instanceof Q)throw e;if(e instanceof l.TrajectoryEvalConfigError)throw new Q("config",e.message,e);throw new Q("llm-or-agent",e.message||String(e),e)}try{let e={...E.rawAnalysis&&"object"==typeof E.rawAnalysis?E.rawAnalysis:{},...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:et,resultEvaluationRetry:ea,customEvaluations:el,customVariableNeeds:Array.from(ed),customEvaluationScore:eu.length>0?eu.reduce((e,t)=>e+t,0)/eu.length:null,...eo?{diagnostic:eo}:{}};await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"done",trajectoryScore:E.trajectoryScore,dimensionScoresJson:JSON.stringify(E.dimensionScores),deviationStepsJson:JSON.stringify(E.deviationSteps),rootCauseStep:E.rootCauseStep||null,reasonText:E.reasonText||null,rawAnalysisJson:JSON.stringify(e),errorMessage:null}})}catch(e){throw new Q("persist",`写入评测结果失败: ${e.message}`,e)}await U(e,t,ey,eS)}finally{if(a&&r)try{(0,c.finish)(e,a,r)}catch(t){console.warn(`[trajectory-eval] finishEvalTask failed user=${e} task=${a}: ${t?.message}`)}}}async function U(e,t,a,r){try{let s=await n.prismaRaw.trajectoryEvalResult.findUnique({where:{id:t},select:{id:!0,taskId:!0,evaluatorRunId:!0,deviationStepsJson:!0,rootCauseStep:!0,reasonText:!0,rawAnalysisJson:!0}});if(!s)return;let i=(0,f.getPrimaryExecutionSkillTargets)(a,r).map(e=>({name:e.skill,version:e.version}));if(0===i.length)return;let o=await (0,d.deriveAndPersistOptPoints)({user:e,taskId:s.taskId,runId:s.evaluatorRunId,trajectoryRow:s,skills:i});o>0&&console.log(`[trajectory-eval] • derived ${o} skill optimization point(s) for row=${t}`)}catch(e){console.warn("[trajectory-eval] derive opt points failed (non-fatal):",e.message)}}async function q(e,t,a){let r=Date.now();console.log(`[trajectory-eval] run ${t} started: ${a.length} traces, concurrency=3`);let s=[...a],i=0,o=0,l=0;await new Promise(r=>{let u=()=>{for((0,m.getTrajectoryEvalRunSignal)(t)?.aborted&&(s.length=0);i<3&&s.length>0;){let c=s.shift();i++,P(e,c).then(()=>{o++,console.log(`[trajectory-eval] ✓ ${c} done (${o}+${l}/${a.length})`)}).catch(async e=>{l++;let t=e instanceof Q?e.stage:"unknown",a=e?.message||"unknown error",r=function(e){let t=e instanceof Q?e.stage:"unknown",a=(e instanceof Error?e.message:String(e||"unknown error")).replace(/^\[[^\]]+\]\s*/,"").replace(p.NO_EVALUABLE_CASE_PREFIX,"").trim();if("trace-parse"===t)return(0,_.buildEvaluationDiagnostic)("trace_parse_failed",{details:a,reason:a});if("trace-empty"===t)return(0,_.buildEvaluationDiagnostic)("trace_data_empty",{details:a,reason:a});if("semantic-match-llm"===t||"dataset-auto-match"===t)return(0,_.buildEvaluationDiagnostic)("case_match_failed",{details:a,internal:{stage:"semantic_match",reason:a}});if("result-artifact-timeout"===t||"result-timeout"===t||"timeout"===t)return(0,_.buildEvaluationDiagnostic)("evaluator_timeout",{details:a,reason:a});if("persist"===t)return(0,_.buildEvaluationDiagnostic)("persist_failed",{details:a,reason:a});if("llm-or-agent"===t||"config"===t)return(0,_.buildEvaluationDiagnostic)("evaluator_output_invalid",{details:a,reason:a});if("no-evaluable-case"===t)return a.includes("没有实际输入")?(0,_.buildEvaluationDiagnostic)("trace_missing_input",{details:a,reason:a}):a.includes("评估数据集不存在")?(0,_.buildEvaluationDiagnostic)("dataset_missing",{details:a,reason:a}):a.includes("未找到可用于评测的数据集")||a.includes("未找到可用于结果评测的数据集")||a.includes("未找到轨迹评测数据集")?(0,_.buildEvaluationDiagnostic)("dataset_empty",{details:a,reason:a}):a.includes("reference_output")?(0,_.buildEvaluationDiagnostic)("custom_reference_missing",{details:a,reason:a}):a.includes("expectedOutput")||a.includes("预期结果")?(0,_.buildEvaluationDiagnostic)("case_missing_expected_output",{details:a,reason:a}):a.includes("动态分析失败")?(0,_.buildEvaluationDiagnostic)("trace_step_analysis_failed",{details:a,reason:a}):a.includes("无法提取可评测步骤")||a.includes("提取出实际执行步骤")||a.includes("无可提取执行步骤")?(0,_.buildEvaluationDiagnostic)("trace_no_steps",{details:a,reason:a}):(0,_.buildEvaluationDiagnostic)("case_not_matched",{details:a,reason:a});return(0,_.buildEvaluationDiagnostic)("evaluator_recovered_failed",{details:a,reason:a})}(e);console.error(`[trajectory-eval] ✗ ${c} failed [${t}]: ${a}`);let s=await n.prismaRaw.trajectoryEvalResult.findUnique({where:{id:c},select:{rawAnalysisJson:!0}}).catch(()=>null);await n.prismaRaw.trajectoryEvalResult.update({where:{id:c},data:{status:"failed",errorMessage:a,rawAnalysisJson:function(e,t,a={}){return JSON.stringify({...N(e),...a,diagnostic:t})}(s?.rawAnalysisJson,r)}}).catch(e=>console.error(`[trajectory-eval] failed to mark ${c} as failed: ${e.message}`))}).finally(()=>{i--,(0,m.getTrajectoryEvalRunSignal)(t)?.aborted&&(s.length=0),0===s.length&&0===i?r():u()})}};u()});try{let e=await n.prismaRaw.trajectoryEvalResult.updateMany({where:{id:{in:a},evaluatorRunId:t,updatedAt:{lt:new Date(r)},status:{in:["pending","running"]}},data:{status:"failed",errorMessage:"[recover] 进程异常或评测器未返回,已自动标 failed"}});e.count>0&&(console.warn(`[trajectory-eval] run ${t} recovered ${e.count} stuck rows.`),l+=e.count)}catch(e){console.error(`[trajectory-eval] failed to recover stuck rows: ${e.message}`)}let u=((Date.now()-r)/1e3).toFixed(1);console.log(`[trajectory-eval] run ${t} finished: ${o} done, ${l} failed, ${u}s`)}e.s(["PATCH",()=>F,"POST",()=>J,"dynamic",0,"force-dynamic","runEvaluations",()=>q]),a()}catch(e){a(e)}},!1),656687,e=>e.a(async(t,a)=>{try{var r=e.i(747909),n=e.i(174017),s=e.i(996250),i=e.i(759756),o=e.i(561916),l=e.i(174677),u=e.i(869741),c=e.i(316795),d=e.i(487718),p=e.i(995169),m=e.i(47587),f=e.i(666012),g=e.i(570101),y=e.i(626937),h=e.i(10372),w=e.i(193695);e.i(52474);var _=e.i(600220),v=e.i(600461),A=t([v]);[v]=A.then?(await A)():A;let x=new r.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/eval/trajectory/run/route",pathname:"/api/eval/trajectory/run",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/eval/trajectory/run/route.ts",nextConfigOutput:"standalone",userland:v}),{workAsyncStorage:k,workUnitAsyncStorage:b,serverHooks:R}=x;function S(){return(0,s.patchFetch)({workAsyncStorage:k,workUnitAsyncStorage:b})}async function E(e,t,a){x.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let r="/api/eval/trajectory/run/route";r=r.replace(/\/index$/,"")||"/";let s=await x.prepare(e,t,{srcPage:r,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,params:A,nextConfig:S,parsedUrl:E,isDraftMode:k,prerenderManifest:b,routerServerContext:R,isOnDemandRevalidate:I,revalidateOnlyGenerated:C,resolvedPathname:N,clientReferenceManifest:$,serverActionsManifest:O}=s,j=(0,u.normalizeAppPath)(r),M=!!(b.dynamicRoutes[j]||b.routes[N]),T=async()=>((null==R?void 0:R.render404)?await R.render404(e,t,E,!1):t.end("This page could not be found"),null);if(M&&!k){let e=!!b.routes[N],t=b.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await T();throw new w.NoFallbackError}}let L=null;!M||x.isDev||k||(L=N,L="/index"===L?"/":L);let J=!0===x.isDev||!M,F=M&&!J;O&&$&&(0,l.setManifestsSingleton)({page:r,clientReferenceManifest:$,serverActionsManifest:O});let P=e.method||"GET",D=(0,o.getTracer)(),U=D.getActiveScopeSpan(),q={params:A,prerenderManifest:b,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:J,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>x.onRequestError(e,t,r,n,R)},sharedContext:{buildId:v}},z=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),B=d.NextRequestAdapter.fromNodeNextRequest(z,(0,d.signalFromNodeResponse)(t));try{let s=async e=>x.handle(B,q).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=D.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=a.get("next.route");if(n){let t=`${P} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${P} ${r}`)}),l=!!(0,i.getRequestMeta)(e,"minimalMode"),u=async i=>{var o,u;let c=async({previousCacheEntry:n})=>{try{if(!l&&I&&C&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await s(i);e.fetchMetrics=q.renderOpts.fetchMetrics;let o=q.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let u=q.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(z,W,r,q.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(r.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==q.renderOpts.collectedRevalidate&&!(q.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&q.renderOpts.collectedRevalidate,n=void 0===q.renderOpts.collectedExpire||q.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:q.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await x.onRequestError(e,t,{routerKind:"App Router",routePath:r,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:I})},!1,R),t}},d=await x.handleResponse({req:e,nextConfig:S,cacheKey:L,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:I,revalidateOnlyGenerated:C,responseGenerator:c,waitUntil:a.waitUntil,isMinimalMode:l});if(!M)return null;if((null==d||null==(o=d.value)?void 0:o.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(u=d.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",I?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,g.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&M||p.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(d.cacheControl)),await (0,f.sendResponse)(z,W,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};U?await u(U):await D.withPropagatedContext(e.headers,()=>D.trace(p.BaseServerSpan.handleRequest,{spanName:`${P} ${r}`,kind:o.SpanKind.SERVER,attributes:{"http.method":P,"http.target":e.url}},u))}catch(t){if(t instanceof w.NoFallbackError||await x.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:I})},!1,R),M)throw t;return await (0,f.sendResponse)(z,W,new Response(null,{status:500})),null}}e.s(["handler",()=>E,"patchFetch",()=>S,"routeModule",()=>x,"serverHooks",()=>R,"workAsyncStorage",()=>k,"workUnitAsyncStorage",()=>b]),a()}catch(e){a(e)}},!1)];
233
+ ${JSON.stringify(r,null,2)}`)),$=u(N);if(!$)return n("第二轮输出提取模型未返回合法 JSON。",{pass:"second",first:f,raw_first_response:c,raw_second_response:N,followup_anchor_llm_call_id:h,followup_event_ids:I.map(e=>e.id),threshold:t});let O=k.parse($),j=w(C,O.selected_source_id),M={pass:"second",first:f,second:O,raw_first_response:c,raw_second_response:N,followup_anchor_llm_call_id:h,followup_event_ids:I.map(e=>e.id),source_candidate_ids:C.map(e=>e.id),threshold:t};if(O.has_task_output&&j)return v(j,O.confidence,O.reason,O.selected_source_id,{...M,accepted_below_threshold:O.confidence<t});let T=O.selected_source_id&&!_(C,O.selected_source_id)?`第二轮返回的 selected_source_id=${O.selected_source_id} 不在候选列表中。`:"";return n(T||O.reason||`二次输出定位置信度 ${O.confidence} 低于阈值 ${t}。`,M)}catch(e){return n(`真实输出提取 LLM 调用失败:${e.message||String(e)}`,{error:e.message||String(e)})}}e.s(["extractTaskResultArtifact",()=>S]),a()}catch(e){a(e)}},!1),830484,e=>{"use strict";let t={trace_missing_input:{errorCategory:"trace",shortStatus:"Trace 缺输入",userMessage:"Trace 缺少实际输入,无法匹配评测集 case。",reason:"系统没有从本次执行记录中提取到可用于匹配 case 的任务输入。",nextAction:"检查 trace 采集是否包含用户任务输入;必要时重新采集或重新执行该任务。",retryable:!1,stage:"case-match"},trace_missing_output:{errorCategory:"trace",shortStatus:"Trace 缺输出",userMessage:"Trace 缺少实际输出,无法做任务完成度评测。",reason:"本次 trace 没有提取到 Agent 最终输出,也没有可用的 execution.finalResult fallback。",nextAction:"检查 Agent 是否产出最终回复;确认 trace 采集包含 assistant final message;必要时重新跑该 case。",retryable:!1,stage:"result-artifact"},task_output_extraction_failed:{errorCategory:"trace",shortStatus:"任务输出提取失败",userMessage:"无法从 trace 中提取任务输出。",reason:"任务输出提取流程没有定位到可用于任务完成度评测的最终输出,且没有 fallback 可用。",nextAction:"检查 trace 中是否包含最终回复或关键工具输出;必要时重试评测或重新采集 trace。",retryable:!0,stage:"result-artifact"},trace_data_empty:{errorCategory:"trace",shortStatus:"Trace 数据为空",userMessage:"Trace 数据为空,无法评测。",reason:"系统没有找到可用的 session interactions,也没有足够的 query/finalResult 生成兜底交互。",nextAction:"检查 trace 采集、上传或执行记录入库是否完整。",retryable:!1,stage:"trace-load"},trace_parse_failed:{errorCategory:"trace",shortStatus:"Trace 解析失败",userMessage:"Trace 数据解析失败,无法评测。",reason:"Session.interactions 不是合法 JSON 或结构不兼容。",nextAction:"检查 trace 采集数据格式,必要时重新上传或修复采集链路。",retryable:!1,stage:"trace-parse"},case_not_matched:{errorCategory:"case",shortStatus:"无匹配 case",userMessage:"Trace 输入没有匹配到可用于评测的 case。",reason:"本次任务输入与当前评测集中的 case.input 没有达到可用匹配。",nextAction:"补充对应 case,或确认本次 trace 的任务输入与评测集 case.input 是否一致。",retryable:!1,stage:"case-match"},case_match_failed:{errorCategory:"case",shortStatus:"匹配 case 失败",userMessage:"无法根据 trace 输入自动定位可用于评测的 case。",reason:"trace 输入没有精确匹配到评测集 case,后台自动匹配也没有得到可用结果。",nextAction:"检查本次 trace 的任务输入是否与评测集 case.input 对齐;必要时补充 case 或重新选择评测集。",retryable:!0,stage:"case-match"},dataset_missing:{errorCategory:"dataset",shortStatus:"评测集不存在",userMessage:"评测集不存在,无法匹配可评测 case。",reason:"评测结果关联的数据集已经不存在,或当前用户不可访问。",nextAction:"重新选择评测集后再发起评测。",retryable:!1,stage:"dataset-load"},dataset_empty:{errorCategory:"dataset",shortStatus:"评测集为空",userMessage:"评测集没有可评测 case。",reason:"当前匹配范围内没有可用于评测的 case。",nextAction:"补充评测集 case 后重新评测。",retryable:!1,stage:"dataset-load"},case_missing_expected_output:{errorCategory:"case",shortStatus:"Case 缺预期结果",userMessage:"Case 缺少预期结果,无法做任务完成度评测。",reason:"已匹配到 case,但 expectedOutput 为空。",nextAction:"为该 case 补充 expectedOutput 后重新评测。",retryable:!1,stage:"case-match"},custom_reference_missing:{errorCategory:"case",shortStatus:"缺 reference_output",userMessage:"自定义评估器缺少 reference_output。",reason:"自定义评估器 prompt 引用了 reference_output,但没有匹配到带预期结果的 case。",nextAction:"补充评测集 expectedOutput,或调整自定义评估器 prompt。",retryable:!1,stage:"custom-evaluator"},trace_step_analysis_failed:{errorCategory:"model",shortStatus:"步骤抽取失败",userMessage:"Trace 步骤动态分析失败。",reason:"系统尝试从 trace 中抽取实际执行步骤时失败,通常与模型配置或调用异常有关。",nextAction:"检查评测模型配置和服务状态后重试。",retryable:!0,stage:"trace-step-analysis"},trace_no_steps:{errorCategory:"trace",shortStatus:"Trace 无步骤",userMessage:"Trace 无可提取执行步骤,无法做轨迹评测。",reason:"系统没有从本次 trace 中提取到可用于轨迹评测的实际执行步骤。",nextAction:"检查 trace 质量、采集粒度或执行记录是否完整。",retryable:!1,stage:"trace-step-analysis"},evaluator_timeout:{errorCategory:"evaluator",shortStatus:"评测超时",userMessage:"评测器运行超时。",reason:"评测器在限定时间内没有返回结果。",nextAction:"重试评测;如果持续出现,请检查模型服务响应时间。",retryable:!0,stage:"evaluator"},evaluator_output_invalid:{errorCategory:"evaluator",shortStatus:"评测器输出异常",userMessage:"评测器未返回有效结构化结果。",reason:"评测器输出无法解析为系统需要的 JSON/评分结构。",nextAction:"重试评测;如果持续出现,请检查评测器模型输出。",retryable:!0,stage:"evaluator"},result_evaluator_failed:{errorCategory:"evaluator",shortStatus:"结果评测失败",userMessage:"任务完成度评测失败。",reason:"任务完成度评测器没有产出可用评分或评测 session。",nextAction:"重试评测;如果持续出现,请检查模型配置和评测器日志。",retryable:!0,stage:"result-evaluator"},persist_failed:{errorCategory:"system",shortStatus:"保存失败",userMessage:"评测结果保存失败。",reason:"评测已执行,但结果写入数据库时失败。",nextAction:"检查数据库或服务状态后重试。",retryable:!0,stage:"persist"},evaluator_recovered_failed:{errorCategory:"system",shortStatus:"评测进程异常",userMessage:"评测进程异常中断。",reason:"后台恢复逻辑发现该评测长期停留在 pending/running 状态。",nextAction:"重试评测,并查看服务日志确认是否有进程异常。",retryable:!0,stage:"recover"}};function a(e,r={}){let n=t[e]??{errorCategory:"system",shortStatus:"评测失败",userMessage:"评测执行失败。",reason:"评测执行过程中出现未分类异常。",nextAction:"重试评测;如果持续出现,请查看服务日志。",retryable:!0,stage:"unknown"};return{errorCode:e,errorCategory:n.errorCategory,shortStatus:n.shortStatus,userMessage:r.userMessage||n.userMessage,reason:r.reason||n.reason,nextAction:r.nextAction||n.nextAction,retryable:"boolean"==typeof r.retryable?r.retryable:n.retryable,stage:r.stage||n.stage,...r.details?{details:r.details}:{},...r.internal?{internal:r.internal}:{}}}e.s(["buildEvaluationDiagnostic",()=>a])},652192,e=>{"use strict";function t(e){switch(e.status){case"ok":return{state:"ok",code:"ok",message:"skill 关键步骤与 trace 实际步骤已完整对比"};case"no-skill-targets":return{state:"not-applicable",code:"no-skill-targets",message:"trace 未关联任何 skill,本次评测不做 skill 归因"};case"missing-skill":return{state:"degraded",code:"missing-skill",message:`trace 关联的 skill 在 Skills Hub 中找不到:${e.missingSkills.join("、")}`};case"missing-parsed-flow":return{state:"degraded",code:"missing-parsed-flow",message:`skill 尚未生成可用的解析流程,无法提取关键步骤:${e.missingSkills.join("、")}`};case"no-key-actions":return{state:"degraded",code:"no-key-actions",message:"skill flow 解析成功但未识别出任何关键步骤"};case"dynamic-analysis-failed":return{state:"degraded",code:"dynamic-analysis-failed",message:"trace 步骤动态分析失败(通常是 LLM 未配置或调用失败)"};case"no-extracted-steps":return{state:"degraded",code:"no-extracted-steps",message:"未能从 trace 中提取出实际执行步骤"}}}e.s(["buildSkillAttributionStatus",()=>t])},600461,e=>e.a(async(t,a)=>{try{let z;var r=e.i(89171),n=e.i(854763),s=e.i(948594),i=e.i(833821),o=e.i(511284),l=e.i(841212),u=e.i(664503),c=e.i(826917),d=e.i(418494),p=e.i(556602),m=e.i(926307),f=e.i(190014),g=e.i(508439),y=e.i(670497),h=e.i(794538),w=e.i(374995),_=e.i(830484),v=e.i(228356),A=e.i(240317),S=e.i(652192),E=e.i(450579),k=e.i(837926),x=t([n,s,i,l,u,d,f,g,y,v,E]);[n,s,i,l,u,d,f,g,y,v,E]=x.then?(await x)():x;let W=new Set(["trace-quality-evaluator","preset-agent-trace-quality","preset-agent-task-completion"]),B="preset-agent-trace-quality",K="preset-agent-task-completion",V=[1500,3e3,5e3,8e3],H={[B]:"Agent 轨迹质量",[K]:"Agent 任务完成度"},X=/\{\{\s*(input|output|reference_output|trajectory)\s*\}\}/g;function b(e){return String(e||"").trim().replace(/\s+/g," ")}function R(e){let t=(Array.isArray(e)?e:null==e?[]:[e]).map(e=>String(e||"").trim()).map(e=>"trace-quality-evaluator"===e?B:e).filter(e=>W.has(e)||(0,v.isCustomEvaluatorId)(e));return Array.from(new Set(t))}function I(e,t={}){return{selectedEvaluators:e,selectedEvaluatorNames:e.map(e=>{let a=H[e];if(a)return a;let r=t.customNameResolver?.(e);return r||e}),...t.autoWatch?{autoWatch:!0}:{},...t.watchedAgent?{watchedAgent:t.watchedAgent}:{},...t.autoWatch&&t.autoWatchEnabledAt?{autoWatchEnabledAt:t.autoWatchEnabledAt}:{}}}function C(e){let t=e?(0,h.parseLooseJson)(e):null,a=R(t?.selectedEvaluators),r=Array.isArray(t?.selectedEvaluatorNames)?t.selectedEvaluatorNames.filter(e=>"string"==typeof e&&!!e.trim()):[],n=t?.autoWatch===!0,s="string"==typeof t?.watchedAgent?t.watchedAgent.trim():"",i=(0,E.normalizeAutoWatchEnabledAt)(t?.autoWatchEnabledAt);return a.length>0?r.length===a.length?{selectedEvaluators:a,selectedEvaluatorNames:r,...n?{autoWatch:!0}:{},...s?{watchedAgent:s}:{},...n&&i?{autoWatchEnabledAt:i}:{}}:I(a,{autoWatch:n,watchedAgent:s,autoWatchEnabledAt:i}):I([B],{autoWatch:n,watchedAgent:s,autoWatchEnabledAt:i})}function N(e){let t=(0,h.parseLooseJson)(e||"");return t&&"object"==typeof t?t:{}}function $(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;let t=String(e.source||"").trim(),a=String(e.grayscaleTaskId||"").trim(),r=String(e.caseId||"").trim(),n=String(e.side||"").trim(),s=String(e.executionTraceId||"").trim(),i=String(e.evaluationClaimId||"").trim(),o="number"==typeof e.runIndex&&Number.isFinite(e.runIndex)?Math.floor(e.runIndex):NaN,l="number"==typeof e.roundIndex&&Number.isFinite(e.roundIndex)?Math.floor(e.roundIndex):NaN,u="number"==typeof e.evaluationAttempt&&Number.isFinite(e.evaluationAttempt)?Math.floor(e.evaluationAttempt):NaN;return"grayscale-ab"===t&&a&&r&&("a"===n||"b"===n)&&s&&i&&Number.isFinite(o)&&Number.isFinite(l)&&Number.isFinite(u)?{source:"grayscale-ab",grayscaleTaskId:a,caseId:r,side:n,runIndex:o,roundIndex:l,executionTraceId:s,evaluationClaimId:i,evaluationAttempt:u}:null}async function O(e,t,a,r,n,s,i,o,l,c,d){let p=await (0,u.evaluateTaskCompletionViaOpencode)({caseInput:e,expectedOutput:t,actualOutput:a,precomputedRootCauses:r,precomputedRootCauseSource:n,traceSummaryText:s,skillContext:i,skillAttributionMode:o},l,c,d);return{isCorrect:p.isCorrect,score:p.score,reason:p.reason,rawAnalysis:p.rawAnalysis}}async function j(e,t,a){return Promise.race([e,new Promise((e,r)=>setTimeout(()=>r(a),t))])}function M(e,t){let a=t.now??new Date;return{attemptCount:e,maxAttempts:5,retrying:t.retrying,exhausted:t.exhausted,lastAttemptAt:a.toISOString(),...t.lastError?{lastError:t.lastError}:{},...t.retrying&&t.delayMs?{nextRetryAt:new Date(a.getTime()+t.delayMs).toISOString()}:{}}}async function T(e,t,a){let r=a.rawAnalysis&&"object"==typeof a.rawAnalysis?a.rawAnalysis:null,s=r?.key_point_findings;if(!("number"==typeof a.score&&Number.isFinite(a.score)&&String(a.reason||"").trim()&&Array.isArray(s)))return void console.warn("[trajectory-eval] skip persisting incomplete result-evaluation payload to execution");let i={isAnswerCorrect:a.isCorrect,answerScore:a.score,judgmentReason:a.reason};e?.id?await n.prismaRaw.execution.update({where:{id:e.id},data:i}):t&&await n.prismaRaw.execution.updateMany({where:{taskId:t},data:i})}async function L(e,t,a={}){let r=b(t);if(!r)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 没有实际输入,无法匹配评估数据集 case`);let n=!0===a.requireExpectedOutput,s=!0===a.includeAllDatasetKinds,o=Array.isArray(a.allowedDatasetIds)?a.allowedDatasetIds.map(e=>String(e).trim()).filter(Boolean):[],l=(await (0,i.readAllAgentDatasets)()).filter(t=>t.user===e).filter(e=>0===o.length||o.includes(e.id)).filter(e=>s||n||"trajectory"===e.datasetKind);if(0===l.length)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} ${s?"未找到可用于评测的数据集":n?"未找到可用于结果评测的数据集":"未找到轨迹评测数据集"}`);for(let e of l){let t=e.cases.find(e=>b(e.input)===r&&(!n||!!b(e.expectedOutput)));if(t)return{dataset:e,caseEntry:t}}let u=[],c=new Map;for(let e of l)for(let t of e.cases){if(n&&!b(t.expectedOutput))continue;let a=`${e.id}::${t.id}`;u.push({id:a,input:t.input}),c.set(a,{dataset:e,caseEntry:t})}let d=await (0,g.findBestSemanticCaseMatch)(u,t,{user:e,requireModelAvailable:!0});if(d.error)throw new Q("semantic-match-llm",`${p.NO_EVALUABLE_CASE_PREFIX} 语义匹配调用评测模型失败:${d.error}`);if(d.caseId){let e=c.get(d.caseId);if(e)return e}throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 实际输入未匹配到${s?"评测数据集中的":n?"带预期结果的":"轨迹评测数据集中的"} case 输入`)}async function J(e){try{let t=await e.json(),a=String(t.user||"").trim(),o=String(t.evaluatorRunId||t.runId||"").trim(),l=$(t.grayscaleBinding),u=Array.isArray(t.evaluators)&&t.evaluators.length>0?t.evaluators:t.evaluator,c=R(u),d=!0===t.autoWatch,p=(0,E.normalizeAutoWatchAgent)(t.watchedAgent||t.agent||""),f=p,g=new Date().toISOString(),y=!0===t.placeholderOnly,_=String(t.taskScope||"").trim(),A=String(t.skillName||"").trim(),S=t.skillVersion,x=null==S||""===S?null:Number(S);if(!a)return r.NextResponse.json({error:"user is required"},{status:400});if(d&&p&&(0,k.isEvaluatorAgentName)(p))return r.NextResponse.json({error:"autoWatch requires a non-evaluator execution agent"},{status:400});if("skill-case-analysis"===_){if(!A)return r.NextResponse.json({error:"skillName is required for skill-case-analysis task"},{status:400});if(null==x||!Number.isFinite(x))return r.NextResponse.json({error:"skillVersion is required for skill-case-analysis task"},{status:400})}let b=c.filter(v.isCustomEvaluatorId),N=new Set,O=new Map;if(b.length>0){let e=await (0,v.listCustomEvaluatorIds)(a),t=[];for(let a of b)e.has(a)?N.add(a):t.push(a);if(t.length>0)return r.NextResponse.json({error:`unknown custom evaluators: ${t.join(", ")}`},{status:400});for(let e of N){let t=await (0,v.loadCustomEvaluator)(a,e);t&&O.set(e,t.name)}}let j=c.filter(e=>(0,v.isCustomEvaluatorId)(e)?N.has(e):W.has(e)),M=I(j.length>0?j:[B],{autoWatch:d,watchedAgent:f,customNameResolver:e=>O.get(e)});if(u&&0===j.length||0===M.selectedEvaluators.length)return r.NextResponse.json({error:"unsupported evaluators"},{status:400});let T=Array.isArray(t.taskIds)?t.taskIds.map(e=>String(e).trim()).filter(Boolean):[],L=String(t.datasetId||"").trim(),J=Array.isArray(t.datasetIds)?t.datasetIds.map(e=>String(e).trim()).filter(Boolean):[],F=Array.isArray(t.pairs)?t.pairs:[],P=(0,w.normalizeTrajectoryTaskMeta)({title:t.taskTitle,description:t.taskDescription,scope:_,skillName:"skill-case-analysis"===_?A:void 0,skillVersion:"skill-case-analysis"===_?x:void 0}),D=new Set,U="",z="";if(o){let e=await n.prismaRaw.trajectoryEvalResult.findMany({where:{user:a,evaluatorRunId:o},orderBy:{createdAt:"asc"}});if(0===e.length)return r.NextResponse.json({error:"evaluatorRunId not found"},{status:404});let t=e[0],s=[...e].reverse().map(e=>(function(e){let t=e?(0,h.parseLooseJson)(e):null,a=R(t?.selectedEvaluators);if(0===a.length)return null;let r=Array.isArray(t?.selectedEvaluatorNames)?t.selectedEvaluatorNames.filter(e=>"string"==typeof e&&!!e.trim()):[],n=t?.autoWatch===!0,s="string"==typeof t?.watchedAgent?t.watchedAgent.trim():"",i=(0,E.normalizeAutoWatchEnabledAt)(t?.autoWatchEnabledAt);return r.length===a.length?{selectedEvaluators:a,selectedEvaluatorNames:r,...n?{autoWatch:!0}:{},...s?{watchedAgent:s}:{},...n&&i?{autoWatchEnabledAt:i}:{}}:I(a,{autoWatch:n,watchedAgent:s,autoWatchEnabledAt:i})})(e.rawAnalysisJson)).find(e=>!!e);M=j.length>0?I(j,{autoWatch:d,watchedAgent:f,customNameResolver:e=>O.get(e)}):s||C(t.rawAnalysisJson),P=(0,w.extractTrajectoryTaskMeta)(t.rawAnalysisJson,t.createdAt),L=L||t.datasetId||"",U=(0,E.normalizeAutoWatchAgent)(s?.watchedAgent||await (0,E.resolveWatchedAgentForRunRows)(a,e)),z=(0,E.normalizeAutoWatchEnabledAt)(s?.autoWatchEnabledAt),D=new Set(e.filter(e=>"failed"!==e.status).map(e=>e.taskId||e.executionId||"").filter(Boolean))}if(d&&T.length>0){let e=await (0,E.resolveSingleTrajectoryCandidateAgent)(a,T);if(e.missingTaskIds.length>0)return r.NextResponse.json({error:`autoWatch only accepts traces that appear in 发起新评测: ${e.missingTaskIds.join(", ")}`},{status:400});if(!e.agent)return r.NextResponse.json({error:`autoWatch requires a single execution agent, got: ${e.distinctAgents.join(", ")||"none"}`},{status:400});if(U&&!(0,E.autoWatchAgentNamesMatch)(U,e.agent))return r.NextResponse.json({error:`autoWatch agent mismatch: run watches ${U}, new traces belong to ${e.agent}`},{status:400});f=e.agent}else{if(d&&!o&&!f)return r.NextResponse.json({error:"watchedAgent is required when starting autoWatch without seed traces"},{status:400});d&&U&&(f=U)}M=I(j.length>0?j:M.selectedEvaluators,{autoWatch:d,watchedAgent:d?f:"",autoWatchEnabledAt:d?o&&z||g:"",customNameResolver:e=>O.get(e)});let K=o||`trun_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,V=[],H=[];if(T.length>0)for(let e of T){if(D.has(e)){H.push({caseId:"",reason:`taskId ${e} already exists in this run`});continue}let t=await n.prismaRaw.trajectoryEvalResult.create({data:{user:a,evaluatorRunId:K,datasetId:"",caseId:"",executionId:null,taskId:e,status:"pending",rawAnalysisJson:JSON.stringify({...M,taskMeta:P,...l?{grayscaleBinding:l}:{},...J.length>0?{allowedDatasetIds:J}:{}})}});V.push({id:t.id,caseId:"",taskId:e})}else if((d||y)&&!o){if(L){let e=await (0,i.findAgentDataset)(a,L);if(!e)return r.NextResponse.json({error:"dataset not found"},{status:404});if("trajectory"!==e.datasetKind)return r.NextResponse.json({error:`dataset kind must be 'trajectory', got '${e.datasetKind}'`},{status:400})}let e=await n.prismaRaw.trajectoryEvalResult.create({data:{user:a,evaluatorRunId:K,datasetId:L,caseId:"",executionId:null,taskId:null,status:"pending",rawAnalysisJson:JSON.stringify({...M,taskMeta:P,...l?{grayscaleBinding:l}:{},watchPlaceholder:!0,...y?{placeholderOnly:!0}:{}})}});V.push({id:e.id,caseId:""})}else{if(!L||!(F.length>0))return r.NextResponse.json({error:"provide taskIds, datasetId+pairs, or placeholderOnly:true"},{status:400});let e=await (0,i.findAgentDataset)(a,L);if(!e)return r.NextResponse.json({error:"dataset not found"},{status:404});let t=new Map(e.cases.map(e=>[e.id,e]));for(let e of F){let r=String(e.caseId||"").trim(),s=e.executionId?String(e.executionId).trim():void 0,i=e.taskId?String(e.taskId).trim():void 0,o=i||s||"";if(!l&&o&&D.has(o)){H.push({caseId:r,reason:`${o} already exists in this run`});continue}if(!t.get(r)){H.push({caseId:r,reason:"case not found in dataset"});continue}if(!s&&!i){H.push({caseId:r,reason:"executionId or taskId is required"});continue}let u=await n.prismaRaw.trajectoryEvalResult.create({data:{user:a,evaluatorRunId:K,datasetId:L,caseId:r,executionId:s||null,taskId:i||null,status:"pending",rawAnalysisJson:JSON.stringify({...M,taskMeta:P,...l?{grayscaleBinding:l}:{}})}});V.push({id:u.id,caseId:r,executionId:s,taskId:i})}}if(0===V.length)return r.NextResponse.json({error:"no valid tasks to run",skipped:H},{status:400});Promise.all(V.map(e=>(0,s.reattributeServiceTraceOwner)((e.taskId||e.executionId||"").trim(),a).catch(()=>!1)));let X=V.filter(e=>e.taskId||e.executionId).map(e=>e.id);return X.length>0&&((0,m.registerTrajectoryEvalRun)(K,a),q(a,K,X).catch(e=>{console.error("[trajectory-eval] background run crashed:",e)}).finally(()=>(0,m.unregisterTrajectoryEvalRun)(K))),r.NextResponse.json({success:!0,evaluatorRunId:K,evaluators:M.selectedEvaluators,evaluatorNames:M.selectedEvaluatorNames,datasetId:L,created:V,skipped:H})}catch(t){console.error("trajectory/run POST error:",t);let e=t instanceof Error?t.message:"failed to start trajectory evaluation";return r.NextResponse.json({error:e},{status:500})}}async function F(e){try{let t=await e.json(),a=String(t.user||"").trim(),s=String(t.evaluatorRunId||t.runId||"").trim(),i=!0===t.autoWatch;if(!a)return r.NextResponse.json({error:"user is required"},{status:400});if(!s)return r.NextResponse.json({error:"evaluatorRunId is required"},{status:400});let o=await n.prismaRaw.trajectoryEvalResult.findMany({where:{user:a,evaluatorRunId:s},orderBy:{createdAt:"asc"}});if(0===o.length)return r.NextResponse.json({error:"evaluatorRunId not found"},{status:404});let l=C(o[0].rawAnalysisJson),u=(0,E.normalizeAutoWatchAgent)(l.watchedAgent),c=u&&!(0,k.isEvaluatorAgentName)(u)?u:await (0,E.resolveWatchedAgentForRunRows)(a,o);if(i&&!c)return r.NextResponse.json({error:"autoWatch requires existing traces from a single non-evaluator execution agent"},{status:400});let d=I(l.selectedEvaluators,{autoWatch:i,watchedAgent:c,autoWatchEnabledAt:i?new Date().toISOString():""});return await n.prismaRaw.$transaction(o.map(e=>{var t;let a;return n.prismaRaw.trajectoryEvalResult.update({where:{id:e.id},data:{rawAnalysisJson:(0,E.mergeWatchedAgentIntoRawAnalysis)((t=e.rawAnalysisJson,a={...N(t),selectedEvaluators:d.selectedEvaluators,selectedEvaluatorNames:d.selectedEvaluatorNames,watchedAgent:d.watchedAgent||"",autoWatchEnabledAt:d.autoWatchEnabledAt||""},d.autoWatch?a.autoWatch=!0:(delete a.autoWatch,delete a.autoWatchEnabledAt),d.watchedAgent||delete a.watchedAgent,d.autoWatchEnabledAt||delete a.autoWatchEnabledAt,JSON.stringify(a)),d.watchedAgent||"")}})})),r.NextResponse.json({success:!0,evaluatorRunId:s,autoWatch:i,watchedAgent:d.watchedAgent||""})}catch(t){console.error("trajectory/run PATCH error:",t);let e=t instanceof Error?t.message:"failed to update auto watch state";return r.NextResponse.json({error:e},{status:500})}}let G=(z=Number(process.env.MAX_EVAL_ROW_CONCURRENCY),Number.isFinite(z)&&z>0?Math.min(20,Math.floor(z)):4),Z=Symbol.for("@witty-insight/trajectory-eval-row-limiter");class Q extends Error{stage;cause;constructor(e,t,a){super(`[${e}] ${t}`),this.stage=e,this.cause=a,this.name="StagedEvaluationError"}}async function P(e,t){let a,r=((a=globalThis)[Z]||(a[Z]=(0,p.createSimpleAsyncLimiter)(G)),a[Z]);await r.acquire();try{await D(e,t)}finally{r.release()}}async function D(e,t){let a=null,r=null;try{var s,u,d,h;let E,k,x,R;await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"running",errorMessage:null}});let I=await n.prismaRaw.trajectoryEvalResult.findUnique({where:{id:t}});if(!I)throw new Q("lookup",`result row ${t} disappeared`);if((0,m.getTrajectoryEvalRunSignal)(I.evaluatorRunId)?.aborted)return void await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"failed",errorMessage:"已终止:用户中止了该批次评测"}}).catch(()=>{});I.taskId&&(a=I.taskId,r=(0,c.startOrReplace)(e,I.taskId,"rejudge").runId);let J=null;I.executionId&&(J=await n.prismaRaw.execution.findUnique({where:{id:I.executionId},select:{skill:!0,skillVersion:!0}}).catch(()=>null)),!J&&I.taskId&&(J=await n.prismaRaw.execution.findFirst({where:{taskId:I.taskId},orderBy:{timestamp:"desc"},select:{skill:!0,skillVersion:!0}}).catch(()=>null));let F=J?.skill||null,D="number"==typeof J?.skillVersion?J.skillVersion:null,q=C(I.rawAnalysisJson),z=(0,w.extractTrajectoryTaskMeta)(I.rawAnalysisJson,I.createdAt),W=(s=I.rawAnalysisJson,k=N(s),$(k.grayscaleBinding)),H=q.selectedEvaluators.includes(B),G=q.selectedEvaluators.includes(K),Z=q.selectedEvaluators.filter(v.isCustomEvaluatorId),Y=Z.length>0,ee=null,et=null,ea=null,er=null,en=0,es=null,ei="",eo=null,el=null,eu=[],ec=Y?await Promise.all(Z.map(async t=>({evaluatorId:t,bundle:await (0,v.loadCustomEvaluator)(e,t)}))):[],ed=function(e){let t=new Set;for(let a of e){let e;for(X.lastIndex=0;null!==(e=X.exec(a||""));)t.add(e[1])}return t}(ec.flatMap(e=>[e.bundle?.config.systemPrompt||"",e.bundle?.config.userPrompt||""]).filter(Boolean)),ep=ed.has("reference_output"),em=ed.has("output"),ef=ed.has("trajectory"),eg=I.taskId,ey=I.executionId?await n.prismaRaw.execution.findUnique({where:{id:I.executionId}}):null;!eg&&I.executionId&&ey?.taskId&&(eg=ey.taskId),!ey&&eg&&(ey=await n.prismaRaw.execution.findFirst({where:{taskId:eg}}));let eh=ey?.query||"",ew=await (0,g.extractRealUserInput)(eh,e),e_=ew.normalized_input.trim()||eh,ev=String(ey?.finalResult||"").trim(),eA=(x=N(I.rawAnalysisJson),Array.isArray(x?.allowedDatasetIds)?x.allowedDatasetIds.map(e=>String(e).trim()).filter(Boolean):[]);await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...N(I.rawAnalysisJson),...q,taskMeta:z,caseSnapshot:{taskInput:e_,rawTaskInput:eh,taskInputExtraction:ew}})}});let eS=[];if(eg){let e=await n.prismaRaw.session.findUnique({where:{taskId:eg}});if(e?.interactions)try{let t=JSON.parse(e.interactions);eS=Array.isArray(t)?t:[]}catch(e){throw new Q("trace-parse",`Session.interactions JSON 解析失败: ${e.message}`,e)}}if(0===eS.length&&(e_||ev)){let e=new Date().toISOString();eS=[...e_?[{role:"user",content:e_,timestamp:e}]:[],...ev?[{role:"assistant",content:ev,timestamp:e}]:[]]}let eE=null,ek=null,ex="no-dataset";if(I.datasetId&&I.caseId){try{let t=await (0,i.findAgentDataset)(e,I.datasetId);if(!t)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 评估数据集不存在,无法匹配可评测 case`);ek={id:t.id,name:t.name};let a=b(e_);if(!a&&!I.caseId)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 没有实际输入,无法匹配评估数据集 case`);let r=(I.caseId?t.cases.find(e=>e.id===I.caseId):t.cases.find(e=>b(e.input)===a))||null;if(r&&(ex=I.caseId?"explicit-pair":"exact-input"),!r&&!I.caseId){let a=await (0,g.findBestSemanticCaseMatch)(t.cases.map(e=>({id:e.id,input:e.input})),e_,{user:e,requireModelAvailable:!0});if(a.error)throw new Q("semantic-match-llm",`${p.NO_EVALUABLE_CASE_PREFIX} 语义匹配调用评测模型失败:${a.error}`);a.caseId&&(r=t.cases.find(e=>e.id===a.caseId)??null)&&(ex="semantic")}if(!r)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} trace 实际输入未匹配到当前数据集中的 case 输入`);eE=r}catch(e){if(e instanceof Q)throw e;throw new Q("dataset-load",`读取数据集失败: ${e.message}`,e)}if(!eE)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 未匹配到可评测 case`)}else if(G||H)try{let a=await L(e,e_,{requireExpectedOutput:G,allowedDatasetIds:eA});eE=a.caseEntry,ek={id:a.dataset.id,name:a.dataset.name},ex="auto-match",await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{datasetId:a.dataset.id,caseId:a.caseEntry.id}})}catch(e){if(e instanceof Q&&"no-evaluable-case"===e.stage&&!G)console.warn(`[trajectory/run] no matching dataset, falling back to empty case: ${e.message}`),eE={input:e_,expectedOutput:"",trajectory:"",evaluationFocus:"",rootCauses:[]},ex="fallback";else if(e instanceof Q)throw e;else throw new Q("dataset-auto-match",`自动匹配数据集失败: ${e.message}`,e)}else if(Y)if(ep)try{let a=await L(e,e_,{requireExpectedOutput:!0,includeAllDatasetKinds:!0,allowedDatasetIds:eA});eE=a.caseEntry,ek={id:a.dataset.id,name:a.dataset.name},ex="auto-match",await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{datasetId:a.dataset.id,caseId:a.caseEntry.id}})}catch(e){if(e instanceof Q)throw e;throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 自定义评估器需要 reference_output,但 trace 输入未匹配到带预期结果的数据集 case`,e)}else eE={input:e_,expectedOutput:"",trajectory:"",evaluationFocus:"",rootCauses:[]};else eE={input:e_,expectedOutput:"",trajectory:"",evaluationFocus:"",rootCauses:[]};if(G&&!b(eE.expectedOutput))throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 已匹配到 case,但该 case 缺少预期结果 expectedOutput,无法执行结果评测`);if(Y&&ep&&!b(eE.expectedOutput))throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 自定义评估器需要 reference_output,但未找到可用的预期结果 expectedOutput`);let eb=!!(eE?.rootCauseMeta&&(0,o.canReuseRootCauseCache)(eE.expectedOutput,eE.rootCauseMeta)),eR=eb&&eE?.rootCauseMeta?.status==="ready"?eE.rootCauses||[]:void 0,eI=eb?eE?.rootCauseMeta?.status==="empty"?"none":eE?.rootCauseMeta?.status==="ready"?"dataset-cache":void 0:void 0,eC=e_||eE.input||"",eN={id:eE.id||I.caseId||"",input:eE.input,taskInput:eC,rawTaskInput:eh,taskInputExtraction:ew,expectedOutput:eE.expectedOutput,trajectory:eE.trajectory,evaluationFocus:eE.evaluationFocus,rootCauseCacheStatus:eE.rootCauseMeta?.status||null,rootCauseCacheUpdatedAt:eE.rootCauseMeta?.updatedAt||null,datasetId:ek?.id||I.datasetId||"",datasetName:ek?.name||"",matchKind:ex},e$="trajectory",eO="",ej="",eM=[],eT=[],eL=eE.evaluationFocus,eJ=eE.trajectory,eF=eS.length>0?(u=eS,{summary:R=(0,A.summarizeTrace)(u,{maxSteps:80,maxTextLen:400}),text:(0,A.formatTraceForLLM)(R),steps:R.steps.map(e=>({...e,step_index:e.index,stepIndex:e.index}))}):null,eP=await (0,f.buildSkillKeyActionReference)(ey,e,eS),eD=(0,f.getPrimaryExecutionSkillTargets)(ey,eS).length>0?"skill-aware":"no-skill",eU="ok"===eP.status?{status:"ok",referenceKeyActionsText:eP.referenceKeyActionsText,actualExtractedStepsText:eF?.text||"",referenceKeyActions:eP.referenceKeyActions,actualExtractedSteps:eF?.steps||[]}:eP,eq=(0,S.buildSkillAttributionStatus)(eU);if("ok"===eP.status&&eF&&eF.steps.length>0)e$="skill_key_actions",eO=eP.referenceKeyActionsText,ej=eF.text,eM=eP.referenceKeyActions??[],eT=eF.steps,eL=[b(eE.evaluationFocus),"逐条比较 Skill 自动提取的关键动作与 trace 事件级步骤(user/llm/tool/skill/task),并直接生成每个关键动作的 Skill 改进建议。"].filter(Boolean).join(" ");else if(H){if(!eF||0===eF.steps.length)throw new Q("no-evaluable-case",`${p.NO_EVALUABLE_CASE_PREFIX} 当前 trace 无法提取可评测事件步骤`);e$="trace_only",ej=eF.text,eT=eF.steps,eL=[b(eE.evaluationFocus),"当前 trace 未获得可用 Skill 关键动作;不评估完整性,不生成 Skill 关键动作建议,仅评估工具选择与冗余。"].filter(Boolean).join(" ")}let ez={...q,taskMeta:z,...W?{grayscaleBinding:W}:{},caseSnapshot:eN,skillAttribution:eq,resultSkillMode:eD,comparisonMode:e$,actualTraceExtraction:eF?{source:"summarizeTrace",totalSteps:eF.summary.totalSteps,shownSteps:eF.steps.length,truncated:eF.summary.truncated,totalLlmCalls:eF.summary.totalLlmCalls,totalToolCalls:eF.summary.totalToolCalls,totalSkillCalls:eF.summary.totalSkillCalls,totalTaskCalls:eF.summary.totalTaskCalls}:null,skillKeyActionComparison:"ok"===eP.status?{referenceKeyActionsText:eP.referenceKeyActionsText,actualExtractedStepsText:ej,referenceKeyActions:eP.referenceKeyActions??[],actualExtractedSteps:eT}:null};if((H||G)&&0===eS.length)throw new Q("trace-empty",`taskId=${eg||"N/A"} 对应的 Session 不存在或 interactions 为空`);if(H&&!G){let a=String(ey?.finalResult||"").trim();try{let t=await j((0,y.extractTaskResultArtifact)({userTask:eE.input,interactions:eS,fallbackOutput:a,user:e}),6e5,new Q("result-artifact-timeout",`实际输出提取超过 600s 未完成`));es=t.rawAnalysis,ei=String(t.outputForEvaluation||a||"").trim()}catch(e){console.warn("[trajectory-eval] result artifact extraction failed:",e),ei=a}await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:null,resultEvaluationError:null})}})}if(G){let a="skill-aware"===eD?await (0,f.loadTaskCompletionSkillContext)(ey,eS,e):void 0,r=eF?.text||"",s=Math.min(function(e){let t=N(e).resultEvaluationRetry;if(!t||"object"!=typeof t)return 0;let a=t.attemptCount;return"number"==typeof a&&Number.isFinite(a)&&a>0?Math.floor(a):0}(I.rawAnalysisJson)+1,5),i=new Date;try{await j((async()=>{let o=await (0,y.extractTaskResultArtifact)({userTask:eE.input,interactions:eS,fallbackOutput:ev,user:e});if(es=o.rawAnalysis,!(ei=String(o.outputForEvaluation||"").trim())){et=`结果输出提取失败:${o.reason}`,eo=(0,_.buildEvaluationDiagnostic)(String(o.reason||"").includes("没有可用于输出提取的 LLM 调用")?"trace_missing_output":"task_output_extraction_failed",{details:et,reason:et}),ea=M(s,{retrying:!1,exhausted:!0,lastError:et,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:"",resultEvaluation:null,resultEvaluationError:et,resultEvaluationRetry:ea,diagnostic:eo})}});return}ea=M(s,{retrying:!1,exhausted:!1,now:i}),eo=null,await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:null,resultEvaluationError:null,resultEvaluationRetry:ea})}});let l=await O(eE.input,eE.expectedOutput,ei,eR,eI,r,a,eD,e,F,D);ee={...l.rawAnalysis||{},score:l.score,is_correct:l.isCorrect,reason:l.reason,result_artifact_extraction:{status:o.rawAnalysis?.fallback?"fallback_final_result":o.status,confidence:o.confidence,reason:o.reason,source_refs:o.sourceRefs,fallback_source:o.rawAnalysis?.fallback?"execution.finalResult":null}},await T(ey,eg,l),ea=M(s,{retrying:!1,exhausted:!1,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:null,resultEvaluationRetry:ea})}}),et=null,eo=null})(),6e5,new Q("result-timeout",`结果评测超过 600s 未完成`))}catch(a){console.warn(`[trajectory-eval] result-based evaluation attempt ${s}/5 failed:`,a);let e=a.message||String(a);s<5&&(0,p.isRetryableResultEvaluationFailure)(a)?(er=V[Math.max(0,s-1)]??V[V.length-1]??8e3,en=s,ea=M(s,{retrying:!0,exhausted:!1,lastError:e,delayMs:er,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"running",errorMessage:null,rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:null,resultEvaluationError:null,resultEvaluationRetry:ea})}})):(et=`结果评测失败:${e}`,eo=(0,_.buildEvaluationDiagnostic)(a instanceof Q&&("result-timeout"===a.stage||"result-artifact-timeout"===a.stage)?"evaluator_timeout":"result_evaluator_failed",{details:et,reason:et}),ea=M(s,{retrying:!1,exhausted:!0,lastError:e,now:i}),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:et,resultEvaluationRetry:ea,diagnostic:eo})}}))}}if(null!=er)return void(d=er,h=en,setTimeout(()=>{P(e,t).catch(e=>{console.error(`[trajectory-eval] scheduled result retry failed row=${t} attempt=${h+1}/5:`,e)})},d));if(Y){if(em&&!ei){let t=String(ey?.finalResult||"").trim();if(eS.length>0)try{let a=await j((0,y.extractTaskResultArtifact)({userTask:eC,interactions:eS,fallbackOutput:t,user:e}),6e5,new Q("result-artifact-timeout",`实际输出提取超过 600s 未完成`));es=a.rawAnalysis,ei=String(a.outputForEvaluation||t||"").trim()}catch(e){console.warn("[trajectory-eval] custom evaluator output extraction failed:",e),ei=t}else ei=t}let t=em?ei:"",a=ef&&eF?.text||"",r=await Promise.all(Z.map(r=>(0,v.runCustomLlmEvaluator)(e,r,{caseInput:eC,expectedOutput:ep?eE.expectedOutput:"",actualOutput:t,traceText:a},F,D).catch(e=>({evaluatorId:r,evaluatorName:r,score:null,reason:"",rawResponse:"",model:"",durationMs:0,error:`运行异常:${e?.message||String(e)}`})))),n={};for(let e of r)n[e.evaluatorId]={evaluatorId:e.evaluatorId,evaluatorName:e.evaluatorName,score:e.score,reason:e.reason,model:e.model,durationMs:e.durationMs,error:e.error},"number"==typeof e.score&&eu.push(e.score);el=n}if(!H){let a=eu.length>0?eu.reduce((e,t)=>e+t,0)/eu.length:null,r=ee?.evaluatorSessionId,s="string"==typeof r?r.trim():"",i=G&&(!ee||!s),o=i?"failed":"done",l=i?et||"结果评测未产出有效结果或评测 session":null;i&&!eo&&(eo=(0,_.buildEvaluationDiagnostic)("result_evaluator_failed",{details:l||void 0,reason:l||void 0})),await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:o,trajectoryScore:null,dimensionScoresJson:null,deviationStepsJson:JSON.stringify([]),rootCauseStep:null,reasonText:null,rawAnalysisJson:JSON.stringify({...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:et,resultEvaluationRetry:ea,customEvaluations:el,customVariableNeeds:Array.from(ed),customEvaluationScore:a,...eo?{diagnostic:eo}:{}}),errorMessage:l}}),"done"===o&&await U(e,t,ey,eS);return}let eW={caseId:eE.id||I.caseId||"",caseInput:eE.input,referenceOutput:eE.expectedOutput,referenceTrajectory:eJ,referenceKeyActionsText:eO,actualExtractedStepsText:ej,referenceKeyActions:eM,actualExtractedSteps:eT,skillContext:await (0,f.loadTaskCompletionSkillContext)(ey,eS,e),comparisonMode:e$,evaluationFocus:eL,actualInteractions:eS,taskId:eg||void 0,executionId:I.executionId||ey?.id||void 0};try{E=await Promise.race([(0,l.evaluateTrajectoryViaOpencode)(eW,e,F,D),new Promise((e,t)=>setTimeout(()=>t(new Q("timeout",`单条评测超过 600s 未完成`)),6e5))])}catch(e){if(e instanceof Q)throw e;if(e instanceof l.TrajectoryEvalConfigError)throw new Q("config",e.message,e);throw new Q("llm-or-agent",e.message||String(e),e)}try{let e={...E.rawAnalysis&&"object"==typeof E.rawAnalysis?E.rawAnalysis:{},...ez,resultArtifactExtraction:es,resultActualOutput:ei,resultEvaluation:ee,resultEvaluationError:et,resultEvaluationRetry:ea,customEvaluations:el,customVariableNeeds:Array.from(ed),customEvaluationScore:eu.length>0?eu.reduce((e,t)=>e+t,0)/eu.length:null,...eo?{diagnostic:eo}:{}};await n.prismaRaw.trajectoryEvalResult.update({where:{id:t},data:{status:"done",trajectoryScore:E.trajectoryScore,dimensionScoresJson:JSON.stringify(E.dimensionScores),deviationStepsJson:JSON.stringify(E.deviationSteps),rootCauseStep:E.rootCauseStep||null,reasonText:E.reasonText||null,rawAnalysisJson:JSON.stringify(e),errorMessage:null}})}catch(e){throw new Q("persist",`写入评测结果失败: ${e.message}`,e)}await U(e,t,ey,eS)}finally{if(a&&r)try{(0,c.finish)(e,a,r)}catch(t){console.warn(`[trajectory-eval] finishEvalTask failed user=${e} task=${a}: ${t?.message}`)}}}async function U(e,t,a,r){try{let s=await n.prismaRaw.trajectoryEvalResult.findUnique({where:{id:t},select:{id:!0,taskId:!0,evaluatorRunId:!0,deviationStepsJson:!0,rootCauseStep:!0,reasonText:!0,rawAnalysisJson:!0}});if(!s)return;let i=(0,f.getPrimaryExecutionSkillTargets)(a,r).map(e=>({name:e.skill,version:e.version}));if(0===i.length)return;let o=await (0,d.deriveAndPersistOptPoints)({user:e,taskId:s.taskId,runId:s.evaluatorRunId,trajectoryRow:s,skills:i});o>0&&console.log(`[trajectory-eval] • derived ${o} skill optimization point(s) for row=${t}`)}catch(e){console.warn("[trajectory-eval] derive opt points failed (non-fatal):",e.message)}}async function q(e,t,a){let r=Date.now();console.log(`[trajectory-eval] run ${t} started: ${a.length} traces, concurrency=3`);let s=[...a],i=0,o=0,l=0;await new Promise(r=>{let u=()=>{for((0,m.getTrajectoryEvalRunSignal)(t)?.aborted&&(s.length=0);i<3&&s.length>0;){let c=s.shift();i++,P(e,c).then(()=>{o++,console.log(`[trajectory-eval] ✓ ${c} done (${o}+${l}/${a.length})`)}).catch(async e=>{l++;let t=e instanceof Q?e.stage:"unknown",a=e?.message||"unknown error",r=function(e){let t=e instanceof Q?e.stage:"unknown",a=(e instanceof Error?e.message:String(e||"unknown error")).replace(/^\[[^\]]+\]\s*/,"").replace(p.NO_EVALUABLE_CASE_PREFIX,"").trim();if("trace-parse"===t)return(0,_.buildEvaluationDiagnostic)("trace_parse_failed",{details:a,reason:a});if("trace-empty"===t)return(0,_.buildEvaluationDiagnostic)("trace_data_empty",{details:a,reason:a});if("semantic-match-llm"===t||"dataset-auto-match"===t)return(0,_.buildEvaluationDiagnostic)("case_match_failed",{details:a,internal:{stage:"semantic_match",reason:a}});if("result-artifact-timeout"===t||"result-timeout"===t||"timeout"===t)return(0,_.buildEvaluationDiagnostic)("evaluator_timeout",{details:a,reason:a});if("persist"===t)return(0,_.buildEvaluationDiagnostic)("persist_failed",{details:a,reason:a});if("llm-or-agent"===t||"config"===t)return(0,_.buildEvaluationDiagnostic)("evaluator_output_invalid",{details:a,reason:a});if("no-evaluable-case"===t)return a.includes("没有实际输入")?(0,_.buildEvaluationDiagnostic)("trace_missing_input",{details:a,reason:a}):a.includes("评估数据集不存在")?(0,_.buildEvaluationDiagnostic)("dataset_missing",{details:a,reason:a}):a.includes("未找到可用于评测的数据集")||a.includes("未找到可用于结果评测的数据集")||a.includes("未找到轨迹评测数据集")?(0,_.buildEvaluationDiagnostic)("dataset_empty",{details:a,reason:a}):a.includes("reference_output")?(0,_.buildEvaluationDiagnostic)("custom_reference_missing",{details:a,reason:a}):a.includes("expectedOutput")||a.includes("预期结果")?(0,_.buildEvaluationDiagnostic)("case_missing_expected_output",{details:a,reason:a}):a.includes("动态分析失败")?(0,_.buildEvaluationDiagnostic)("trace_step_analysis_failed",{details:a,reason:a}):a.includes("无法提取可评测步骤")||a.includes("提取出实际执行步骤")||a.includes("无可提取执行步骤")?(0,_.buildEvaluationDiagnostic)("trace_no_steps",{details:a,reason:a}):(0,_.buildEvaluationDiagnostic)("case_not_matched",{details:a,reason:a});return(0,_.buildEvaluationDiagnostic)("evaluator_recovered_failed",{details:a,reason:a})}(e);console.error(`[trajectory-eval] ✗ ${c} failed [${t}]: ${a}`);let s=await n.prismaRaw.trajectoryEvalResult.findUnique({where:{id:c},select:{rawAnalysisJson:!0}}).catch(()=>null);await n.prismaRaw.trajectoryEvalResult.update({where:{id:c},data:{status:"failed",errorMessage:a,rawAnalysisJson:function(e,t,a={}){return JSON.stringify({...N(e),...a,diagnostic:t})}(s?.rawAnalysisJson,r)}}).catch(e=>console.error(`[trajectory-eval] failed to mark ${c} as failed: ${e.message}`))}).finally(()=>{i--,(0,m.getTrajectoryEvalRunSignal)(t)?.aborted&&(s.length=0),0===s.length&&0===i?r():u()})}};u()});try{let e=await n.prismaRaw.trajectoryEvalResult.updateMany({where:{id:{in:a},evaluatorRunId:t,updatedAt:{lt:new Date(r)},status:{in:["pending","running"]}},data:{status:"failed",errorMessage:"[recover] 进程异常或评测器未返回,已自动标 failed"}});e.count>0&&(console.warn(`[trajectory-eval] run ${t} recovered ${e.count} stuck rows.`),l+=e.count)}catch(e){console.error(`[trajectory-eval] failed to recover stuck rows: ${e.message}`)}let u=((Date.now()-r)/1e3).toFixed(1);console.log(`[trajectory-eval] run ${t} finished: ${o} done, ${l} failed, ${u}s`)}e.s(["PATCH",()=>F,"POST",()=>J,"dynamic",0,"force-dynamic","runEvaluations",()=>q]),a()}catch(e){a(e)}},!1),656687,e=>e.a(async(t,a)=>{try{var r=e.i(747909),n=e.i(174017),s=e.i(996250),i=e.i(759756),o=e.i(561916),l=e.i(174677),u=e.i(869741),c=e.i(316795),d=e.i(487718),p=e.i(995169),m=e.i(47587),f=e.i(666012),g=e.i(570101),y=e.i(626937),h=e.i(10372),w=e.i(193695);e.i(52474);var _=e.i(600220),v=e.i(600461),A=t([v]);[v]=A.then?(await A)():A;let k=new r.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/eval/trajectory/run/route",pathname:"/api/eval/trajectory/run",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/eval/trajectory/run/route.ts",nextConfigOutput:"standalone",userland:v}),{workAsyncStorage:x,workUnitAsyncStorage:b,serverHooks:R}=k;function S(){return(0,s.patchFetch)({workAsyncStorage:x,workUnitAsyncStorage:b})}async function E(e,t,a){k.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let r="/api/eval/trajectory/run/route";r=r.replace(/\/index$/,"")||"/";let s=await k.prepare(e,t,{srcPage:r,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,params:A,nextConfig:S,parsedUrl:E,isDraftMode:x,prerenderManifest:b,routerServerContext:R,isOnDemandRevalidate:I,revalidateOnlyGenerated:C,resolvedPathname:N,clientReferenceManifest:$,serverActionsManifest:O}=s,j=(0,u.normalizeAppPath)(r),M=!!(b.dynamicRoutes[j]||b.routes[N]),T=async()=>((null==R?void 0:R.render404)?await R.render404(e,t,E,!1):t.end("This page could not be found"),null);if(M&&!x){let e=!!b.routes[N],t=b.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(S.experimental.adapterPath)return await T();throw new w.NoFallbackError}}let L=null;!M||k.isDev||x||(L=N,L="/index"===L?"/":L);let J=!0===k.isDev||!M,F=M&&!J;O&&$&&(0,l.setManifestsSingleton)({page:r,clientReferenceManifest:$,serverActionsManifest:O});let P=e.method||"GET",D=(0,o.getTracer)(),U=D.getActiveScopeSpan(),q={params:A,prerenderManifest:b,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:J,incrementalCache:(0,i.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:S.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>k.onRequestError(e,t,r,n,R)},sharedContext:{buildId:v}},z=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),B=d.NextRequestAdapter.fromNodeNextRequest(z,(0,d.signalFromNodeResponse)(t));try{let s=async e=>k.handle(B,q).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=D.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=a.get("next.route");if(n){let t=`${P} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${P} ${r}`)}),l=!!(0,i.getRequestMeta)(e,"minimalMode"),u=async i=>{var o,u;let c=async({previousCacheEntry:n})=>{try{if(!l&&I&&C&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await s(i);e.fetchMetrics=q.renderOpts.fetchMetrics;let o=q.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let u=q.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(z,W,r,q.renderOpts.pendingWaitUntil),null;{let e=await r.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(r.headers);u&&(t[h.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==q.renderOpts.collectedRevalidate&&!(q.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&q.renderOpts.collectedRevalidate,n=void 0===q.renderOpts.collectedExpire||q.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:q.renderOpts.collectedExpire;return{value:{kind:_.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:r,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:I})},!1,R),t}},d=await k.handleResponse({req:e,nextConfig:S,cacheKey:L,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:I,revalidateOnlyGenerated:C,responseGenerator:c,waitUntil:a.waitUntil,isMinimalMode:l});if(!M)return null;if((null==d||null==(o=d.value)?void 0:o.kind)!==_.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(u=d.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",I?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,g.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&M||p.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,y.getCacheControlHeader)(d.cacheControl)),await (0,f.sendResponse)(z,W,new Response(d.value.body,{headers:p,status:d.value.status||200})),null};U?await u(U):await D.withPropagatedContext(e.headers,()=>D.trace(p.BaseServerSpan.handleRequest,{spanName:`${P} ${r}`,kind:o.SpanKind.SERVER,attributes:{"http.method":P,"http.target":e.url}},u))}catch(t){if(t instanceof w.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,m.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:I})},!1,R),M)throw t;return await (0,f.sendResponse)(z,W,new Response(null,{status:500})),null}}e.s(["handler",()=>E,"patchFetch",()=>S,"routeModule",()=>k,"serverHooks",()=>R,"workAsyncStorage",()=>x,"workUnitAsyncStorage",()=>b]),a()}catch(e){a(e)}},!1)];
234
234
 
235
235
  //# sourceMappingURL=_73cb0d03._.js.map