agent-insight 0.5.1 → 0.5.2

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 (464) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/routes-manifest.json +6 -0
  6. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/accessconfig/channels.html +1 -1
  22. package/.next/standalone/.next/server/app/accessconfig/channels.rsc +1 -1
  23. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels/__PAGE__.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig/channels.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/accessconfig/channels.segments/!KG1haW4p.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_full.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_head.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_index.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/accessconfig/channels.segments/_tree.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/accessconfig/health.html +1 -1
  32. package/.next/standalone/.next/server/app/accessconfig/health.rsc +1 -1
  33. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health/__PAGE__.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig/health.segment.rsc +1 -1
  35. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/accessconfig/health.segments/!KG1haW4p.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/accessconfig/health.segments/_full.segment.rsc +1 -1
  38. package/.next/standalone/.next/server/app/accessconfig/health.segments/_head.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/accessconfig/health.segments/_index.segment.rsc +1 -1
  40. package/.next/standalone/.next/server/app/accessconfig/health.segments/_tree.segment.rsc +1 -1
  41. package/.next/standalone/.next/server/app/accessconfig/install.html +2 -2
  42. package/.next/standalone/.next/server/app/accessconfig/install.rsc +1 -1
  43. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install/__PAGE__.segment.rsc +1 -1
  44. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig/install.segment.rsc +1 -1
  45. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  46. package/.next/standalone/.next/server/app/accessconfig/install.segments/!KG1haW4p.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/accessconfig/install.segments/_full.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/accessconfig/install.segments/_head.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/accessconfig/install.segments/_index.segment.rsc +1 -1
  50. package/.next/standalone/.next/server/app/accessconfig/install.segments/_tree.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/accessconfig/webhooks.html +1 -1
  52. package/.next/standalone/.next/server/app/accessconfig/webhooks.rsc +1 -1
  53. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks/__PAGE__.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig/webhooks.segment.rsc +1 -1
  55. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/!KG1haW4p.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_full.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_head.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_index.segment.rsc +1 -1
  60. package/.next/standalone/.next/server/app/accessconfig/webhooks.segments/_tree.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/accessconfig.html +1 -1
  62. package/.next/standalone/.next/server/app/accessconfig.rsc +1 -1
  63. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig/__PAGE__.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p/accessconfig.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/accessconfig.segments/!KG1haW4p.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/accessconfig.segments/_full.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/accessconfig.segments/_head.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/accessconfig.segments/_index.segment.rsc +1 -1
  69. package/.next/standalone/.next/server/app/accessconfig.segments/_tree.segment.rsc +1 -1
  70. package/.next/standalone/.next/server/app/agents.html +1 -1
  71. package/.next/standalone/.next/server/app/agents.rsc +1 -1
  72. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
  73. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
  74. package/.next/standalone/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +1 -1
  75. package/.next/standalone/.next/server/app/agents.segments/_full.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  77. package/.next/standalone/.next/server/app/agents.segments/_index.segment.rsc +1 -1
  78. package/.next/standalone/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
  79. package/.next/standalone/.next/server/app/api/agent/run/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/agent/stream/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/agent-datasets/[id]/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/agent-datasets/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/agents/[id]/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/agents/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/auth/apikey/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/auth/organization/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/dashboard/stats/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/debug/batch-tasks/[taskId]/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/debug/batch-tasks/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/debug/execute/[jobId]/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/debug/execute/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/[taskId]/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/debug/grayscale-tasks/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/debug/history/[id]/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/debug/history/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/eval/config/backfill-routing/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/eval/config/create/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/eval/config/reparse/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/eval/config/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/eval/config/status/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/eval/evaluation/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/eval/rejudge/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/eval/settings/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/eval/settings/test/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/eval/terminate-all/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/eval/trajectory/results/[id]/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/eval/trajectory/results/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/eval/trajectory/run/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/eval/trajectory/runs/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/evaluation/[id]/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/evaluation/cancel/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/fault/diagnosis/session/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/fault/diagnosis/stream/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/fleet/breakdowns/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/fleet/trends/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/guide/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/ingest/opencode/session-complete/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/ingest/otel/v1/logs/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/ingest/otel/v1/metrics/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/ingest/otel/v1/traces/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/[...path]/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/end/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/ingest/proxy/[taskId]/start/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route/app-paths-manifest.json +3 -0
  125. package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route/build-manifest.json +11 -0
  126. package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route/server-reference-manifest.json +4 -0
  127. package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route.js +7 -0
  128. package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route.js.map +5 -0
  129. package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route.js.nft.json +1 -0
  130. package/.next/standalone/.next/server/app/api/ingest/setup/opencode-offline-fix/route_client-reference-manifest.js +2 -0
  131. package/.next/standalone/.next/server/app/api/ingest/sync/manifest/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/ingest/sync/opencode/route.js.nft.json +1 -1
  133. package/.next/standalone/.next/server/app/api/ingest/upload/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/observe/data/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/agent-debug/skills-analysis/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/analyze-match/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/observe/executions/[executionId]/infra/route.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/api/observe/infra/history/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/observe/infra/poll/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/observe/infra/sources/derive/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/observe/infra/sources/overview/route.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/api/observe/infra/sources/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/observe/infra/sources/sessions/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/observe/infra/sources/test/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/observe/session/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/observe/task-stats/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/public/otel/v1/traces/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/quality/agents/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/quality/backfill/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/quality/executions/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/quality/report/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/draft/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/route.js.nft.json +1 -1
  155. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/[runId]/cancel/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/run/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/runs/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/skill-eval/trigger/[skillName]/upload/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/skill-generator/attachments/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/skill-generator/chat/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/api/skill-generator/download/[sessionId]/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/skill-generator/files/content/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/skill-generator/files/download/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/skill-generator/files/info/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/skill-generator/files/list/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/skill-generator/sessions/[id]/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/skill-generator/sessions/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/skill-opt/chat/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/skill-opt/plan/items/[id]/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/skill-opt/plan/route.js.nft.json +1 -1
  171. package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/iterations/[draftNumber]/apply/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/iterations/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/skill-opt/sessions/[id]/route.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/app/api/skill-opt/sessions/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/skills/[id]/activate/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/skills/[id]/benchmark-generate/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/skills/[id]/runs/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/skills/[id]/toggle/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/download/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/evaluate/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/evaluation-summary/route.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/files/[...path]/route.js.nft.json +1 -1
  183. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/parse-flow/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/skills/[id]/versions/[version]/route.js.nft.json +1 -1
  185. package/.next/standalone/.next/server/app/api/skills/[id]/versions/route.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/app/api/skills/automation/import/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/skills/automation/push/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/skills/by-name/[name]/analysis-diagnosis/route.js.nft.json +1 -1
  189. package/.next/standalone/.next/server/app/api/skills/by-name/[name]/optimization-points/resolve/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/skills/by-name/[name]/optimization-points/route.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/app/api/skills/by-name/route.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/app/api/skills/logs/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/skills/publish/route.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  195. package/.next/standalone/.next/server/app/api/skills/sync-enterprise/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/skills/upload/route.js.nft.json +1 -1
  197. package/.next/standalone/.next/server/app/api/user-evaluators/route.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/dashboard.html +1 -1
  199. package/.next/standalone/.next/server/app/dashboard.rsc +1 -1
  200. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard/__PAGE__.segment.rsc +1 -1
  201. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p/dashboard.segment.rsc +1 -1
  202. package/.next/standalone/.next/server/app/dashboard.segments/!KG1haW4p.segment.rsc +1 -1
  203. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +1 -1
  204. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  205. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +1 -1
  206. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  207. package/.next/standalone/.next/server/app/dataset.html +1 -1
  208. package/.next/standalone/.next/server/app/dataset.rsc +1 -1
  209. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset/__PAGE__.segment.rsc +1 -1
  210. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p/dataset.segment.rsc +1 -1
  211. package/.next/standalone/.next/server/app/dataset.segments/!KG1haW4p.segment.rsc +1 -1
  212. package/.next/standalone/.next/server/app/dataset.segments/_full.segment.rsc +1 -1
  213. package/.next/standalone/.next/server/app/dataset.segments/_head.segment.rsc +1 -1
  214. package/.next/standalone/.next/server/app/dataset.segments/_index.segment.rsc +1 -1
  215. package/.next/standalone/.next/server/app/dataset.segments/_tree.segment.rsc +1 -1
  216. package/.next/standalone/.next/server/app/eval/trajectory.html +1 -1
  217. package/.next/standalone/.next/server/app/eval/trajectory.rsc +1 -1
  218. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory/__PAGE__.segment.rsc +1 -1
  219. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval/trajectory.segment.rsc +1 -1
  220. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p/eval.segment.rsc +1 -1
  221. package/.next/standalone/.next/server/app/eval/trajectory.segments/!KG1haW4p.segment.rsc +1 -1
  222. package/.next/standalone/.next/server/app/eval/trajectory.segments/_full.segment.rsc +1 -1
  223. package/.next/standalone/.next/server/app/eval/trajectory.segments/_head.segment.rsc +1 -1
  224. package/.next/standalone/.next/server/app/eval/trajectory.segments/_index.segment.rsc +1 -1
  225. package/.next/standalone/.next/server/app/eval/trajectory.segments/_tree.segment.rsc +1 -1
  226. package/.next/standalone/.next/server/app/eval.html +1 -1
  227. package/.next/standalone/.next/server/app/eval.rsc +1 -1
  228. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval/__PAGE__.segment.rsc +1 -1
  229. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p/eval.segment.rsc +1 -1
  230. package/.next/standalone/.next/server/app/eval.segments/!KG1haW4p.segment.rsc +1 -1
  231. package/.next/standalone/.next/server/app/eval.segments/_full.segment.rsc +1 -1
  232. package/.next/standalone/.next/server/app/eval.segments/_head.segment.rsc +1 -1
  233. package/.next/standalone/.next/server/app/eval.segments/_index.segment.rsc +1 -1
  234. package/.next/standalone/.next/server/app/eval.segments/_tree.segment.rsc +1 -1
  235. package/.next/standalone/.next/server/app/fault.html +1 -1
  236. package/.next/standalone/.next/server/app/fault.rsc +1 -1
  237. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault/__PAGE__.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p/fault.segment.rsc +1 -1
  239. package/.next/standalone/.next/server/app/fault.segments/!KG1haW4p.segment.rsc +1 -1
  240. package/.next/standalone/.next/server/app/fault.segments/_full.segment.rsc +1 -1
  241. package/.next/standalone/.next/server/app/fault.segments/_head.segment.rsc +1 -1
  242. package/.next/standalone/.next/server/app/fault.segments/_index.segment.rsc +1 -1
  243. package/.next/standalone/.next/server/app/fault.segments/_tree.segment.rsc +1 -1
  244. package/.next/standalone/.next/server/app/index.html +1 -1
  245. package/.next/standalone/.next/server/app/index.rsc +1 -1
  246. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  247. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  248. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  249. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  250. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/infra/sources.html +1 -1
  252. package/.next/standalone/.next/server/app/infra/sources.rsc +1 -1
  253. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra/sources/__PAGE__.segment.rsc +1 -1
  254. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra/sources.segment.rsc +1 -1
  255. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p/infra.segment.rsc +1 -1
  256. package/.next/standalone/.next/server/app/infra/sources.segments/!KG1haW4p.segment.rsc +1 -1
  257. package/.next/standalone/.next/server/app/infra/sources.segments/_full.segment.rsc +1 -1
  258. package/.next/standalone/.next/server/app/infra/sources.segments/_head.segment.rsc +1 -1
  259. package/.next/standalone/.next/server/app/infra/sources.segments/_index.segment.rsc +1 -1
  260. package/.next/standalone/.next/server/app/infra/sources.segments/_tree.segment.rsc +1 -1
  261. package/.next/standalone/.next/server/app/infra.html +1 -1
  262. package/.next/standalone/.next/server/app/infra.rsc +1 -1
  263. package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p/infra/__PAGE__.segment.rsc +1 -1
  264. package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p/infra.segment.rsc +1 -1
  265. package/.next/standalone/.next/server/app/infra.segments/!KG1haW4p.segment.rsc +1 -1
  266. package/.next/standalone/.next/server/app/infra.segments/_full.segment.rsc +1 -1
  267. package/.next/standalone/.next/server/app/infra.segments/_head.segment.rsc +1 -1
  268. package/.next/standalone/.next/server/app/infra.segments/_index.segment.rsc +1 -1
  269. package/.next/standalone/.next/server/app/infra.segments/_tree.segment.rsc +1 -1
  270. package/.next/standalone/.next/server/app/login.html +1 -1
  271. package/.next/standalone/.next/server/app/login.rsc +1 -1
  272. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +1 -1
  275. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  276. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  277. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  278. package/.next/standalone/.next/server/app/memory.html +1 -1
  279. package/.next/standalone/.next/server/app/memory.rsc +1 -1
  280. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory/__PAGE__.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p/memory.segment.rsc +1 -1
  282. package/.next/standalone/.next/server/app/memory.segments/!KG1haW4p.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/memory.segments/_full.segment.rsc +1 -1
  284. package/.next/standalone/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  285. package/.next/standalone/.next/server/app/memory.segments/_index.segment.rsc +1 -1
  286. package/.next/standalone/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
  287. package/.next/standalone/.next/server/app/metrics.html +1 -1
  288. package/.next/standalone/.next/server/app/metrics.rsc +1 -1
  289. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics/__PAGE__.segment.rsc +1 -1
  290. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p/metrics.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/metrics.segments/!KG1haW4p.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/metrics.segments/_full.segment.rsc +1 -1
  293. package/.next/standalone/.next/server/app/metrics.segments/_head.segment.rsc +1 -1
  294. package/.next/standalone/.next/server/app/metrics.segments/_index.segment.rsc +1 -1
  295. package/.next/standalone/.next/server/app/metrics.segments/_tree.segment.rsc +1 -1
  296. package/.next/standalone/.next/server/app/modelconfig/registry.html +1 -1
  297. package/.next/standalone/.next/server/app/modelconfig/registry.rsc +1 -1
  298. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry/__PAGE__.segment.rsc +1 -1
  299. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig/registry.segment.rsc +1 -1
  300. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  301. package/.next/standalone/.next/server/app/modelconfig/registry.segments/!KG1haW4p.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_full.segment.rsc +1 -1
  303. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_head.segment.rsc +1 -1
  304. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_index.segment.rsc +1 -1
  305. package/.next/standalone/.next/server/app/modelconfig/registry.segments/_tree.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/modelconfig/web-search.html +1 -1
  307. package/.next/standalone/.next/server/app/modelconfig/web-search.rsc +1 -1
  308. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search/__PAGE__.segment.rsc +1 -1
  309. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig/web-search.segment.rsc +1 -1
  310. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  311. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/!KG1haW4p.segment.rsc +1 -1
  312. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_full.segment.rsc +1 -1
  313. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_head.segment.rsc +1 -1
  314. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_index.segment.rsc +1 -1
  315. package/.next/standalone/.next/server/app/modelconfig/web-search.segments/_tree.segment.rsc +1 -1
  316. package/.next/standalone/.next/server/app/modelconfig.html +1 -1
  317. package/.next/standalone/.next/server/app/modelconfig.rsc +1 -1
  318. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig/__PAGE__.segment.rsc +1 -1
  319. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p/modelconfig.segment.rsc +1 -1
  320. package/.next/standalone/.next/server/app/modelconfig.segments/!KG1haW4p.segment.rsc +1 -1
  321. package/.next/standalone/.next/server/app/modelconfig.segments/_full.segment.rsc +1 -1
  322. package/.next/standalone/.next/server/app/modelconfig.segments/_head.segment.rsc +1 -1
  323. package/.next/standalone/.next/server/app/modelconfig.segments/_index.segment.rsc +1 -1
  324. package/.next/standalone/.next/server/app/modelconfig.segments/_tree.segment.rsc +1 -1
  325. package/.next/standalone/.next/server/app/optapi.html +1 -1
  326. package/.next/standalone/.next/server/app/optapi.rsc +1 -1
  327. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi/__PAGE__.segment.rsc +1 -1
  328. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p/optapi.segment.rsc +1 -1
  329. package/.next/standalone/.next/server/app/optapi.segments/!KG1haW4p.segment.rsc +1 -1
  330. package/.next/standalone/.next/server/app/optapi.segments/_full.segment.rsc +1 -1
  331. package/.next/standalone/.next/server/app/optapi.segments/_head.segment.rsc +1 -1
  332. package/.next/standalone/.next/server/app/optapi.segments/_index.segment.rsc +1 -1
  333. package/.next/standalone/.next/server/app/optapi.segments/_tree.segment.rsc +1 -1
  334. package/.next/standalone/.next/server/app/quality.html +1 -1
  335. package/.next/standalone/.next/server/app/quality.rsc +1 -1
  336. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality/__PAGE__.segment.rsc +1 -1
  337. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p/quality.segment.rsc +1 -1
  338. package/.next/standalone/.next/server/app/quality.segments/!KG1haW4p.segment.rsc +1 -1
  339. package/.next/standalone/.next/server/app/quality.segments/_full.segment.rsc +1 -1
  340. package/.next/standalone/.next/server/app/quality.segments/_head.segment.rsc +1 -1
  341. package/.next/standalone/.next/server/app/quality.segments/_index.segment.rsc +1 -1
  342. package/.next/standalone/.next/server/app/quality.segments/_tree.segment.rsc +1 -1
  343. package/.next/standalone/.next/server/app/security.html +1 -1
  344. package/.next/standalone/.next/server/app/security.rsc +1 -1
  345. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security/__PAGE__.segment.rsc +1 -1
  346. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p/security.segment.rsc +1 -1
  347. package/.next/standalone/.next/server/app/security.segments/!KG1haW4p.segment.rsc +1 -1
  348. package/.next/standalone/.next/server/app/security.segments/_full.segment.rsc +1 -1
  349. package/.next/standalone/.next/server/app/security.segments/_head.segment.rsc +1 -1
  350. package/.next/standalone/.next/server/app/security.segments/_index.segment.rsc +1 -1
  351. package/.next/standalone/.next/server/app/security.segments/_tree.segment.rsc +1 -1
  352. package/.next/standalone/.next/server/app/skill-detail.html +1 -1
  353. package/.next/standalone/.next/server/app/skill-detail.rsc +1 -1
  354. package/.next/standalone/.next/server/app/skill-detail.segments/_full.segment.rsc +1 -1
  355. package/.next/standalone/.next/server/app/skill-detail.segments/_head.segment.rsc +1 -1
  356. package/.next/standalone/.next/server/app/skill-detail.segments/_index.segment.rsc +1 -1
  357. package/.next/standalone/.next/server/app/skill-detail.segments/_tree.segment.rsc +1 -1
  358. package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail/__PAGE__.segment.rsc +1 -1
  359. package/.next/standalone/.next/server/app/skill-detail.segments/skill-detail.segment.rsc +1 -1
  360. package/.next/standalone/.next/server/app/skill-eval/grayscale.html +2 -2
  361. package/.next/standalone/.next/server/app/skill-eval/grayscale.rsc +1 -1
  362. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale/__PAGE__.segment.rsc +1 -1
  363. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval/grayscale.segment.rsc +1 -1
  364. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
  365. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/!KG1haW4p.segment.rsc +1 -1
  366. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_full.segment.rsc +1 -1
  367. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_head.segment.rsc +1 -1
  368. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_index.segment.rsc +1 -1
  369. package/.next/standalone/.next/server/app/skill-eval/grayscale.segments/_tree.segment.rsc +1 -1
  370. package/.next/standalone/.next/server/app/skill-eval.html +1 -1
  371. package/.next/standalone/.next/server/app/skill-eval.rsc +1 -1
  372. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval/__PAGE__.segment.rsc +1 -1
  373. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p/skill-eval.segment.rsc +1 -1
  374. package/.next/standalone/.next/server/app/skill-eval.segments/!KG1haW4p.segment.rsc +1 -1
  375. package/.next/standalone/.next/server/app/skill-eval.segments/_full.segment.rsc +1 -1
  376. package/.next/standalone/.next/server/app/skill-eval.segments/_head.segment.rsc +1 -1
  377. package/.next/standalone/.next/server/app/skill-eval.segments/_index.segment.rsc +1 -1
  378. package/.next/standalone/.next/server/app/skill-eval.segments/_tree.segment.rsc +1 -1
  379. package/.next/standalone/.next/server/app/skill-generator.html +1 -1
  380. package/.next/standalone/.next/server/app/skill-generator.rsc +1 -1
  381. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator/__PAGE__.segment.rsc +1 -1
  382. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p/skill-generator.segment.rsc +1 -1
  383. package/.next/standalone/.next/server/app/skill-generator.segments/!KG1haW4p.segment.rsc +1 -1
  384. package/.next/standalone/.next/server/app/skill-generator.segments/_full.segment.rsc +1 -1
  385. package/.next/standalone/.next/server/app/skill-generator.segments/_head.segment.rsc +1 -1
  386. package/.next/standalone/.next/server/app/skill-generator.segments/_index.segment.rsc +1 -1
  387. package/.next/standalone/.next/server/app/skill-generator.segments/_tree.segment.rsc +1 -1
  388. package/.next/standalone/.next/server/app/skill-history.html +1 -1
  389. package/.next/standalone/.next/server/app/skill-history.rsc +1 -1
  390. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history/__PAGE__.segment.rsc +1 -1
  391. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p/skill-history.segment.rsc +1 -1
  392. package/.next/standalone/.next/server/app/skill-history.segments/!KG1haW4p.segment.rsc +1 -1
  393. package/.next/standalone/.next/server/app/skill-history.segments/_full.segment.rsc +1 -1
  394. package/.next/standalone/.next/server/app/skill-history.segments/_head.segment.rsc +1 -1
  395. package/.next/standalone/.next/server/app/skill-history.segments/_index.segment.rsc +1 -1
  396. package/.next/standalone/.next/server/app/skill-history.segments/_tree.segment.rsc +1 -1
  397. package/.next/standalone/.next/server/app/skill-opt.html +1 -1
  398. package/.next/standalone/.next/server/app/skill-opt.rsc +1 -1
  399. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt/__PAGE__.segment.rsc +1 -1
  400. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p/skill-opt.segment.rsc +1 -1
  401. package/.next/standalone/.next/server/app/skill-opt.segments/!KG1haW4p.segment.rsc +1 -1
  402. package/.next/standalone/.next/server/app/skill-opt.segments/_full.segment.rsc +1 -1
  403. package/.next/standalone/.next/server/app/skill-opt.segments/_head.segment.rsc +1 -1
  404. package/.next/standalone/.next/server/app/skill-opt.segments/_index.segment.rsc +1 -1
  405. package/.next/standalone/.next/server/app/skill-opt.segments/_tree.segment.rsc +1 -1
  406. package/.next/standalone/.next/server/app/skill-release.html +1 -1
  407. package/.next/standalone/.next/server/app/skill-release.rsc +1 -1
  408. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release/__PAGE__.segment.rsc +1 -1
  409. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p/skill-release.segment.rsc +1 -1
  410. package/.next/standalone/.next/server/app/skill-release.segments/!KG1haW4p.segment.rsc +1 -1
  411. package/.next/standalone/.next/server/app/skill-release.segments/_full.segment.rsc +1 -1
  412. package/.next/standalone/.next/server/app/skill-release.segments/_head.segment.rsc +1 -1
  413. package/.next/standalone/.next/server/app/skill-release.segments/_index.segment.rsc +1 -1
  414. package/.next/standalone/.next/server/app/skill-release.segments/_tree.segment.rsc +1 -1
  415. package/.next/standalone/.next/server/app/skills.html +1 -1
  416. package/.next/standalone/.next/server/app/skills.rsc +1 -1
  417. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills/__PAGE__.segment.rsc +1 -1
  418. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p/skills.segment.rsc +1 -1
  419. package/.next/standalone/.next/server/app/skills.segments/!KG1haW4p.segment.rsc +1 -1
  420. package/.next/standalone/.next/server/app/skills.segments/_full.segment.rsc +1 -1
  421. package/.next/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  422. package/.next/standalone/.next/server/app/skills.segments/_index.segment.rsc +1 -1
  423. package/.next/standalone/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
  424. package/.next/standalone/.next/server/app/trace.html +1 -1
  425. package/.next/standalone/.next/server/app/trace.rsc +1 -1
  426. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace/__PAGE__.segment.rsc +1 -1
  427. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p/trace.segment.rsc +1 -1
  428. package/.next/standalone/.next/server/app/trace.segments/!KG1haW4p.segment.rsc +1 -1
  429. package/.next/standalone/.next/server/app/trace.segments/_full.segment.rsc +1 -1
  430. package/.next/standalone/.next/server/app/trace.segments/_head.segment.rsc +1 -1
  431. package/.next/standalone/.next/server/app/trace.segments/_index.segment.rsc +1 -1
  432. package/.next/standalone/.next/server/app/trace.segments/_tree.segment.rsc +1 -1
  433. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  434. package/.next/standalone/.next/server/chunks/[root-of-the-server]__edc6a75f._.js +3 -0
  435. package/.next/standalone/.next/server/chunks/ce889_server_app_api_ingest_setup_opencode-offline-fix_route_actions_13b9e7e1.js +3 -0
  436. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_c4a195e5.js +1 -1
  437. package/.next/standalone/.next/server/pages/404.html +1 -1
  438. package/.next/standalone/.next/server/pages/500.html +2 -2
  439. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  440. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  441. package/.next/standalone/Evaluation_and_Research/agent_evaluator_research_qna_2.md +1312 -0
  442. package/.next/standalone/Evaluation_and_Research/agent_evaluator_research_qna_3.md +712 -0
  443. package/.next/standalone/Evaluation_and_Research/agent_evaluator_research_qna_4.md +1228 -0
  444. package/.next/standalone/docker-compose.amd64.yml +1 -1
  445. package/.next/standalone/package.json +1 -1
  446. package/.next/standalone/scripts/opencode-offline-fix.ps1 +93 -0
  447. package/.next/standalone/scripts/opencode_tui_plugin.tsx +23 -1
  448. package/package.json +1 -1
  449. package/scripts/opencode-offline-fix.ps1 +93 -0
  450. package/scripts/opencode_tui_plugin.tsx +23 -1
  451. package/.next/standalone/scripts/activate_telemetry.sh +0 -202
  452. package/.next/standalone/scripts/insight-paths.js +0 -33
  453. package/.next/standalone/scripts/opencode_otel_schema.ts +0 -73
  454. package/.next/standalone/scripts/opencode_plugin.ts +0 -1063
  455. package/scripts/activate_telemetry.sh +0 -202
  456. package/scripts/insight-paths.js +0 -33
  457. package/scripts/opencode_otel_schema.ts +0 -73
  458. package/scripts/opencode_plugin.ts +0 -1063
  459. /package/.next/standalone/.next/static/{xzZesDmllz08gJIxUNkXr → iE8084jR9Kgb7Bhs3Xokh}/_buildManifest.js +0 -0
  460. /package/.next/standalone/.next/static/{xzZesDmllz08gJIxUNkXr → iE8084jR9Kgb7Bhs3Xokh}/_clientMiddlewareManifest.json +0 -0
  461. /package/.next/standalone/.next/static/{xzZesDmllz08gJIxUNkXr → iE8084jR9Kgb7Bhs3Xokh}/_ssgManifest.js +0 -0
  462. /package/.next/static/{xzZesDmllz08gJIxUNkXr → iE8084jR9Kgb7Bhs3Xokh}/_buildManifest.js +0 -0
  463. /package/.next/static/{xzZesDmllz08gJIxUNkXr → iE8084jR9Kgb7Bhs3Xokh}/_clientMiddlewareManifest.json +0 -0
  464. /package/.next/static/{xzZesDmllz08gJIxUNkXr → iE8084jR9Kgb7Bhs3Xokh}/_ssgManifest.js +0 -0
@@ -0,0 +1,1228 @@
1
+ # Agent 评估器调研问答 4
2
+
3
+ 调研日期:2026-07-07
4
+
5
+ 这份文档用于继续记录 `agent_evaluator_industry_research.md` 里的细节问题。上一份问答见 `agent_evaluator_research_qna_3.md`。
6
+
7
+ ## Q9:失败定位 / 根因归因的评估逻辑是什么?它和我们项目里的 AgentDebug 有什么区别?
8
+
9
+ ### 简短结论
10
+
11
+ 失败定位 / 根因归因作为一个“预置评估器”时,核心不是做一次完整诊断,而是把一条失败或低质量 trace 结构化地回答成:
12
+
13
+ ```text
14
+ 这次失败主要发生在哪一步?
15
+ 真正的上游原因是什么?
16
+ 它属于哪类 agent 能力问题?
17
+ 证据是什么?
18
+ 这个结论有多可信?
19
+ ```
20
+
21
+ 它的价值在于让大批量评测结果可以被聚合、统计和回归比较。例如:
22
+
23
+ ```text
24
+ 本周 42% 的失败来自工具参数错误
25
+ 18% 来自检索上下文不足
26
+ 12% 来自父 agent 没有整合子 agent 结果
27
+ 某次 prompt 改动后 planning 类根因下降了 30%
28
+ ```
29
+
30
+ 而 AgentDebug 更像是“单条 trace 的深度诊断系统”。它读取一条具体执行记录,基于 Trace / Span / 调用链 / 上下文证据,输出比较完整的诊断报告、问题卡片、模块级归因、证据链和修复建议。
31
+
32
+ 所以两者不是替代关系:
33
+
34
+ ```text
35
+ 失败定位 / 根因归因评估器:
36
+ 面向批量评测、可计分、可聚合、可比较。
37
+
38
+ AgentDebug:
39
+ 面向单条异常执行的深度解释、复盘和修复指导。
40
+ ```
41
+
42
+ 更推荐的产品关系是:
43
+
44
+ ```text
45
+ 预置评估器先做轻量根因归因;
46
+ 高严重度、低置信度或需要人工复盘的样本,再跳转到 AgentDebug 深入诊断。
47
+ ```
48
+
49
+ ### 这个评估器到底评什么?
50
+
51
+ 它评的不是“最终答案好不好”,而是:
52
+
53
+ ```text
54
+ 当一次 agent 执行失败、低分或异常时,系统能不能把失败归因到正确的步骤、模块和根因类别。
55
+ ```
56
+
57
+ 可以把它理解成任务完成度之后的二级评估:
58
+
59
+ | 一层问题 | 回答 |
60
+ | --- | --- |
61
+ | Task Completion | 任务有没有完成? |
62
+ | Failure Localization / Root Cause Attribution | 如果没完成,主要为什么没完成?失败源头在哪里? |
63
+
64
+ 例如:
65
+
66
+ ```text
67
+ 最终失败:用户要求修改代码并跑测试,但最后没有修复 bug。
68
+
69
+ 普通任务完成度:
70
+ failed
71
+
72
+ 根因归因:
73
+ root_cause_category = tool_invocation_error
74
+ critical_step = 7
75
+ evidence = 测试命令参数错误,导致 agent 误以为目标测试已通过
76
+ downstream_effect = 后续总结基于错误测试结果,产生 false success
77
+ ```
78
+
79
+ 这个指标的意义不是替代任务完成度,而是让失败样本“可解释、可分桶、可优化”。
80
+
81
+ ### 输入是什么?
82
+
83
+ 一个根因归因评估器通常需要这些输入:
84
+
85
+ ```text
86
+ task:
87
+ 用户原始任务、约束、期望输出
88
+
89
+ trace:
90
+ 完整执行轨迹,包括 LLM 思考/回复、工具调用、工具结果、子 agent 调用、错误、重试
91
+
92
+ final_output:
93
+ 最终回答或最终状态
94
+
95
+ outcome_signal:
96
+ 任务完成度、人工标签、自动 evaluator 分数、报错状态等
97
+
98
+ optional_reference:
99
+ 参考答案、期望工具调用、期望步骤、标准 trace、人工根因标签
100
+ ```
101
+
102
+ 其中 `outcome_signal` 很关键。因为根因归因通常是在“已经知道这条 trace 有问题”之后发生的。如果完全没有失败信号,评估器会很难判断要归因什么。
103
+
104
+ 在 Agent Insight 里,输入可以来自:
105
+
106
+ - Execution 基本信息。
107
+ - Trace / Span / 节点列表。
108
+ - 工具调用与返回结果。
109
+ - 子 agent execution tree。
110
+ - 现有轨迹评估结果。
111
+ - AgentDebug 已生成的诊断报告。
112
+ - 人工标注或评测集里的 expected root cause。
113
+
114
+ ### 中间评估逻辑
115
+
116
+ #### 1. 先判断是否真的失败
117
+
118
+ 第一步不是直接找根因,而是判断这条 trace 是否需要归因:
119
+
120
+ ```text
121
+ success:
122
+ 任务成功,无需根因归因,可输出 n_a。
123
+
124
+ soft_failure:
125
+ 没有显式报错,但结果不完整、偏题、未满足约束。
126
+
127
+ hard_failure:
128
+ 工具报错、执行中断、超时、权限失败、链路异常。
129
+
130
+ ambiguous:
131
+ 结果是否失败不明确,需要依赖人工标签或更强 evaluator。
132
+ ```
133
+
134
+ 如果没有先判断失败类型,根因归因容易变成“每条 trace 都硬找问题”,导致误报。
135
+
136
+ #### 2. 把 trace 切成可归因节点
137
+
138
+ 根因归因要有定位对象。常见粒度包括:
139
+
140
+ ```text
141
+ span:
142
+ 一次模型调用、一次工具调用、一次子 agent 调用、一个系统节点。
143
+
144
+ step:
145
+ 对用户可解释的一步行为,例如“读取文件”“调用搜索工具”“执行测试”。
146
+
147
+ turn:
148
+ 一轮 assistant / tool / user 交互。
149
+
150
+ phase:
151
+ 计划、检索、工具调用、结果整合、最终回答等阶段。
152
+ ```
153
+
154
+ 在产品里建议同时保留两层:
155
+
156
+ ```text
157
+ machine_location:
158
+ spanId / traceStepIndex / executionId,用于跳转和聚合。
159
+
160
+ human_location:
161
+ 第几步、节点名称、简短行为摘要,用于用户理解。
162
+ ```
163
+
164
+ #### 3. 区分“症状节点”和“根因节点”
165
+
166
+ 这是根因归因最重要的一步。
167
+
168
+ 很多失败暴露在下游,但原因在上游:
169
+
170
+ ```text
171
+ 症状:
172
+ 最终答案错误。
173
+
174
+ 可能根因:
175
+ 第 3 步检索结果不相关。
176
+ 第 5 步工具参数错了。
177
+ 第 7 步把工具返回结果读反了。
178
+ 第 9 步子 agent 给出正确结论,但父 agent 没有采用。
179
+ ```
180
+
181
+ 所以 evaluator 不能只定位最后一个失败 span。它应该沿 trace 回看:
182
+
183
+ ```text
184
+ 哪个最早的关键偏差足以解释后续失败?
185
+ 哪个错误如果被修复,最终结果大概率会变好?
186
+ 哪个节点是上游原因,而不是下游表现?
187
+ ```
188
+
189
+ 这也是为什么 AgentEval 这类方法会强调把 agent execution 建成 DAG:根因往往要通过依赖传播来判断,而不是只看线性最后一步。
190
+
191
+ #### 4. 对根因类别做标准化分类
192
+
193
+ 为了让结果可统计,根因类别必须稳定。建议不要只输出自然语言,而要输出枚举标签。
194
+
195
+ 适合 Agent Insight 的第一版 taxonomy 可以是:
196
+
197
+ | 根因类别 | 含义 |
198
+ | --- | --- |
199
+ | `planning_error` | 任务拆解、步骤顺序、执行策略错误 |
200
+ | `memory_context_error` | 忘记用户约束、上下文继承错误、状态记忆错误 |
201
+ | `retrieval_error` | 检索不到、检索不相关、上下文召回不足 |
202
+ | `tool_selection_error` | 选错工具、漏用工具、不该用工具却用了 |
203
+ | `tool_invocation_error` | 工具参数、格式、调用时机错误 |
204
+ | `tool_response_handling_error` | 工具结果读取、解释、整合错误 |
205
+ | `verification_error` | 没有验证、误读测试结果、false success |
206
+ | `safety_policy_error` | 违反安全、合规、权限、用户约束 |
207
+ | `multi_agent_routing_error` | 子 agent 路由、交接、整合错误 |
208
+ | `loop_no_progress` | 重复尝试、无进展、非终止 |
209
+ | `system_infra_error` | 环境、权限、网络、依赖、外部服务异常 |
210
+ | `instruction_following_error` | 没有遵循显式指令或输出格式 |
211
+ | `unknown` | 证据不足,无法可靠归因 |
212
+
213
+ 这个 taxonomy 可以和现有 AgentDebug 的五模块对齐:
214
+
215
+ | AgentDebug 维度 | 评估器根因类别示例 |
216
+ | --- | --- |
217
+ | Memory | `memory_context_error` |
218
+ | Reflection | `verification_error`, `loop_no_progress` |
219
+ | Planning | `planning_error`, `multi_agent_routing_error` |
220
+ | Action | `tool_selection_error`, `tool_invocation_error`, `tool_response_handling_error` |
221
+ | System | `system_infra_error`, `safety_policy_error` |
222
+
223
+ 区别在于:AgentDebug 的维度更像诊断坐标系,适合解释单条 trace;预置评估器的类别更像统计标签,适合批量聚合和回归分析。
224
+
225
+ #### 5. 标注 root / contributing / downstream
226
+
227
+ 真实失败经常不是单点问题,而是一条链:
228
+
229
+ ```text
230
+ 第 2 步检索不相关
231
+ -> 第 4 步基于错误上下文制定计划
232
+ -> 第 6 步调用了错误工具
233
+ -> 最终答案错误
234
+ ```
235
+
236
+ 所以输出不应该只有一个 `root_cause`。更合理的是给每个问题一个角色:
237
+
238
+ ```text
239
+ root:
240
+ 最主要上游原因。
241
+
242
+ contributing:
243
+ 加重失败的问题,但不是第一根因。
244
+
245
+ downstream:
246
+ 下游症状或传播结果。
247
+ ```
248
+
249
+ 这和 AgentDebug 现有的 `AgentDebugFindingIssueRole` 设计是相通的。差别是,预置评估器可以输出更轻量的 issue list,AgentDebug 输出更完整的诊断报告。
250
+
251
+ #### 6. 生成证据和置信度
252
+
253
+ 每个归因都必须带证据,否则无法被用户信任,也无法复核。
254
+
255
+ 建议输出:
256
+
257
+ ```text
258
+ evidence:
259
+ 对应 span / step 的事实摘要
260
+
261
+ evidence_span_ids:
262
+ 可跳转的 spanId / traceStepIndex
263
+
264
+ reasoning:
265
+ 为什么这个证据支持该根因
266
+
267
+ confidence:
268
+ 0-1 置信度
269
+ ```
270
+
271
+ 置信度可以根据这些因素调整:
272
+
273
+ - 是否有显式工具错误。
274
+ - 是否有人工 expected label。
275
+ - trace 是否完整。
276
+ - evaluator 之间是否一致。
277
+ - 根因是否能解释后续失败链。
278
+ - 是否存在多个同样合理的原因。
279
+
280
+ ### 输出应该是什么?
281
+
282
+ 建议输出一个紧凑、可聚合的 JSON,而不是长篇诊断报告:
283
+
284
+ ```json
285
+ {
286
+ "score": 0.78,
287
+ "label": "failed_with_attribution",
288
+ "failure_type": "soft_failure",
289
+ "root_cause_category": "tool_response_handling_error",
290
+ "critical_steps": [
291
+ {
292
+ "step_index": 6,
293
+ "span_id": "span_abc",
294
+ "role": "root",
295
+ "category": "tool_response_handling_error",
296
+ "summary": "agent ignored the tool result indicating the file was unchanged",
297
+ "evidence": "tool output reported no matching file, but the next step claimed the edit succeeded",
298
+ "confidence": 0.82
299
+ }
300
+ ],
301
+ "downstream_effects": [
302
+ "final response reported success without verification"
303
+ ],
304
+ "suggested_fix": "Add verification after file-edit tool calls and treat no-op tool responses as blocking.",
305
+ "is_skill_attributable": true,
306
+ "confidence": 0.78
307
+ }
308
+ ```
309
+
310
+ 字段建议:
311
+
312
+ | 字段 | 含义 |
313
+ | --- | --- |
314
+ | `score` | 归因质量或根因明确度,0-1 |
315
+ | `label` | success / failed_with_attribution / failed_unknown / n_a |
316
+ | `failure_type` | soft_failure / hard_failure / ambiguous |
317
+ | `root_cause_category` | 标准化根因类别 |
318
+ | `critical_steps` | 根因、贡献因素、下游症状对应的步骤 |
319
+ | `evidence` | 可复核证据 |
320
+ | `confidence` | 归因置信度 |
321
+ | `suggested_fix` | 面向优化的建议 |
322
+ | `is_skill_attributable` | 是否更可能通过 skill / prompt / evaluator 改进解决 |
323
+
324
+ ### 怎么证明这个评估器是好的?
325
+
326
+ 根因归因评估器本身也需要被验证。推荐三类证明方式。
327
+
328
+ #### 1. 和人工标注对齐
329
+
330
+ 构造一批失败 trace,由专家标注:
331
+
332
+ ```text
333
+ 是否失败
334
+ 根因类别
335
+ 关键步骤 / span
336
+ root / contributing / downstream
337
+ 证据是否充分
338
+ ```
339
+
340
+ 然后衡量 evaluator:
341
+
342
+ | 验证指标 | 含义 |
343
+ | --- | --- |
344
+ | failure detection precision / recall | 是否能发现真失败,少误报 |
345
+ | root cause category accuracy / F1 | 根因类别是否和人工一致 |
346
+ | localization accuracy / span-F1 | 定位步骤是否接近人工标注 |
347
+ | evidence precision | 引用证据是否真的支持结论 |
348
+ | inter-rater agreement | evaluator 与人类、多名人类之间一致性 |
349
+
350
+ #### 2. 看归因是否能指导修复
351
+
352
+ 更强的证明方式是:
353
+
354
+ ```text
355
+ 按 evaluator 归因修复 prompt / skill / tool schema / routing 逻辑后,
356
+ 同类失败率是否下降。
357
+ ```
358
+
359
+ 例如 evaluator 发现大量失败来自 `tool_response_handling_error`,团队增加工具结果校验后,同一评测集上的 false success 下降。这比单纯“判断看起来合理”更有说服力。
360
+
361
+ #### 3. 看批量统计是否稳定
362
+
363
+ 如果 evaluator 有意义,那么在同一批样本上重复运行,根因分布应该相对稳定;在不同版本 agent 上运行,变化应该能解释产品改动。
364
+
365
+ 例如:
366
+
367
+ ```text
368
+ 版本 A:
369
+ planning_error 35%
370
+ tool_invocation_error 22%
371
+
372
+ 版本 B 引入 planner prompt 后:
373
+ planning_error 18%
374
+ verification_error 26%
375
+ ```
376
+
377
+ 这种变化如果能和实际改动对应,说明 evaluator 具备监控和回归分析价值。
378
+
379
+ ### 它和 AgentDebug 的区别
380
+
381
+ 可以从定位、粒度、输出、成本、使用场景五个方面理解。
382
+
383
+ | 维度 | 失败定位 / 根因归因评估器 | AgentDebug |
384
+ | --- | --- | --- |
385
+ | 产品定位 | 预置 evaluator,服务评测中心、批量回归、质量统计 | 智能诊断能力,服务单条 trace 的深入排查 |
386
+ | 主要问题 | “这一批失败主要因为什么?”“这条样本可归到哪个根因桶?” | “这条执行到底哪里出了问题?证据链是什么?怎么修?” |
387
+ | 输入 | trace + outcome signal + 可选参考标签 | 单条 execution trace / interactions / trace bundle |
388
+ | 输出 | 短 JSON、分数、类别、关键步骤、证据、置信度 | 完整诊断报告、issue、finding、rootCause、phase1Grid、trajectoryFindings |
389
+ | 粒度 | 更标准化、可聚合 | 更细、更解释性、更适合阅读和复盘 |
390
+ | 成本 | 应尽量轻量,可规则 + LLM 混合 | 可以更重,当前会调用 agent-debug-diagnosis skill 和 LLM |
391
+ | 适用场景 | 离线评测、版本对比、失败分桶、仪表盘统计 | 单条异常深挖、研发排障、问题复盘、生成修复建议 |
392
+ | 稳定性要求 | 高,需要 schema 固定、标签稳定 | 可保留更丰富的自然语言解释 |
393
+ | 与用户交互 | 通常不需要交互,自动跑 | 适合用户点击进入详情页查看 |
394
+
395
+ 一句话:
396
+
397
+ ```text
398
+ 根因归因评估器是“可统计的轻量归因标签”;
399
+ AgentDebug 是“可阅读的深度诊断报告”。
400
+ ```
401
+
402
+ ### AgentDebug 现在已经覆盖了什么?
403
+
404
+ 从当前项目实现看,AgentDebug 已经具备很强的诊断能力:
405
+
406
+ - `runAgentDebugDiagnosis()` 会把 interactions 转成 debug turns。
407
+ - 使用 `agent-debug-diagnosis` skill 生成结构化认知根因报告。
408
+ - 输出 `issues`、`findings`、`rootCause`、`phase1Grid`、`stepRecords`。
409
+ - 用 Memory / Reflection / Planning / Action / System 做模块级归因。
410
+ - 支持 `root` / `contributing` / `downstream` 角色。
411
+ - 已经有确定性的 `trajectory-detector` 用于识别循环、无进展、振荡、重复等轨迹级问题。
412
+ - 诊断结果面向单条 trace 的证据链、修复建议和用户可读解释。
413
+
414
+ 所以,如果只是问“Agent Insight 有没有根因诊断能力”,答案是:
415
+
416
+ ```text
417
+ 有,而且 AgentDebug 已经是比较完整的深度诊断实现。
418
+ ```
419
+
420
+ 但如果问“是否已经有一个适合放进预置评估器列表里的根因归因 evaluator”,答案更接近:
421
+
422
+ ```text
423
+ 还没有完全产品化成 evaluator。
424
+ ```
425
+
426
+ 因为 evaluator 还需要更强调:
427
+
428
+ - 输出短、稳定、可入库。
429
+ - 标签枚举固定。
430
+ - 分数可比较。
431
+ - 大批量运行成本可控。
432
+ - 能出现在评测报表里。
433
+ - 能和其他 evaluator 一起排序、筛选、聚合。
434
+
435
+ ### 推荐怎么在 Agent Insight 里落地
436
+
437
+ 建议不要另起一套和 AgentDebug 完全平行的复杂诊断系统,而是做成“三层结构”。
438
+
439
+ #### 第一层:规则预筛
440
+
441
+ 先用低成本规则提取明显信号:
442
+
443
+ ```text
444
+ tool error
445
+ timeout
446
+ permission denied
447
+ empty retrieval
448
+ repeated same tool call
449
+ no progress loop
450
+ subagent result ignored
451
+ final answer without verification
452
+ ```
453
+
454
+ 这一层可以复用当前 AgentDebug 的 `trajectory-detector` 思路,也可以复用 Trace / Span 的结构化字段。
455
+
456
+ #### 第二层:轻量 LLM 归因
457
+
458
+ 把规则预筛结果、关键 span 摘要、任务目标和最终结果喂给 judge,让它只输出固定 schema:
459
+
460
+ ```text
461
+ failure_type
462
+ root_cause_category
463
+ critical_steps
464
+ evidence
465
+ confidence
466
+ suggested_fix
467
+ ```
468
+
469
+ 注意这里不需要生成完整诊断长文,目标是“评估器输出”,不是“诊断报告”。
470
+
471
+ #### 第三层:AgentDebug 深挖
472
+
473
+ 当满足以下条件时,再触发或推荐 AgentDebug:
474
+
475
+ ```text
476
+ root_cause_category = unknown
477
+ confidence < 0.6
478
+ severity = high
479
+ 用户点击查看详情
480
+ 同类失败突然增多
481
+ 需要生成 skill 改进建议
482
+ ```
483
+
484
+ 这样可以兼顾成本和深度:
485
+
486
+ ```text
487
+ 大多数样本用 evaluator 快速归因;
488
+ 少数重要样本用 AgentDebug 深度诊断。
489
+ ```
490
+
491
+ ### 和现有轨迹评估、SkillIssue 的关系
492
+
493
+ 当前轨迹评估更像对执行过程质量打分,例如完整性、工具选择、冗余等。根因归因评估器可以作为它的下游解释层:
494
+
495
+ ```text
496
+ 轨迹评估:
497
+ 这条 trace 分数低。
498
+
499
+ 根因归因:
500
+ 分数低主要因为 tool_response_handling_error,关键步骤是第 6 步。
501
+ ```
502
+
503
+ `SkillIssue` 则可以承接归因结果,沉淀成可优化的问题:
504
+
505
+ ```text
506
+ root_cause_category:
507
+ planning_error
508
+
509
+ is_skill_attributable:
510
+ true
511
+
512
+ SkillIssue:
513
+ 当前 skill 缺少测试验证步骤,导致 agent 修改后没有确认结果。
514
+ ```
515
+
516
+ 所以根因归因 evaluator 可以把“评测分低”转成“可以进入建议模块的问题候选”。
517
+
518
+ ### 推荐优先级
519
+
520
+ 这个指标值得加入预置评估器,但不建议第一版做得太重。
521
+
522
+ 推荐 MVP:
523
+
524
+ ```text
525
+ RootCauseAttributionEvaluator
526
+ ```
527
+
528
+ 第一版只做:
529
+
530
+ - 输入:task、trace、final_output、已有 evaluator 分数。
531
+ - 输出:`root_cause_category`、`critical_steps`、`evidence`、`confidence`、`suggested_fix`。
532
+ - 支持固定 taxonomy。
533
+ - 对成功样本输出 `n_a`。
534
+ - 对低置信度样本输出 `unknown`,并提示可进入 AgentDebug。
535
+
536
+ 暂时不要第一版就做:
537
+
538
+ - 完整 DAG 因果传播。
539
+ - 多根因概率图。
540
+ - 长篇自然语言诊断。
541
+ - 自动改 skill。
542
+ - 替代 AgentDebug。
543
+
544
+ ### 参考链接
545
+
546
+ - [OpenAI Agent evals](https://developers.openai.com/api/docs/guides/agent-evals):提供 agent workflow / trace 评估思路和 grader 基础设施,适合实现自定义根因归因 grader。
547
+ - [OpenAI graders](https://developers.openai.com/api/docs/guides/graders):说明如何用结构化 grader 对模型或 agent 输出进行自动评估。
548
+ - [LangSmith evaluation concepts](https://docs.langchain.com/langsmith/evaluation-concepts):提供 dataset、experiment、custom evaluator、trace/run tree 等评估基础设施。
549
+ - [AgentEval: Towards Holistic Evaluation of LLM Agents](https://arxiv.org/abs/2604.23581):提出将 agent execution 建成带依赖关系的 DAG,并用 typed metrics / failure taxonomy 支持更细粒度的失败分析。
550
+ - [TRACE: A Comprehensive Benchmark for Continual Learning in Large Language Model Agents](https://arxiv.org/abs/2510.02837):体现了从任务轨迹和持续任务表现分析 agent 行为退化与失败的 benchmark 思路。
551
+ - [AgentDebug 诊断原理与循环检测补强](../docs/agentdebug-diagnosis-principle-and-loop-detection-gap.md):项目内对 AgentDebug “逐 step 认知错误检测 + 单点根因定位”以及轨迹级循环检测的说明。
552
+ - [Agent Insight 智能诊断用户指南](../docs/user-guide/observability/diagnosis.md):项目内对智能诊断页面、Trace/Span 证据、模块级归因和 AgentDebug 定位的说明。
553
+
554
+ ## Q10:如果想参考 Phoenix Tool Selection 的工具选择正确性,但需要对整条 trace 一次性评测,落地建议是什么?
555
+
556
+ ### 简短结论
557
+
558
+ 不要把整条 trace 原样塞进一个 Phoenix Tool Selection prompt 里,让 judge 一次性给一个“工具选择正确 / 不正确”的结论。
559
+
560
+ 更推荐的落地方式是:
561
+
562
+ ```text
563
+ 把 Phoenix Tool Selection 当成“单个工具决策点”的判断逻辑;
564
+ 在 Agent Insight 里额外做一个 trace-level orchestrator,
565
+ 先从整条 trace 里抽取所有工具选择决策点,
566
+ 再把多个决策点打包给一次 judge 批量评估,
567
+ 最后聚合成整条 trace 的工具选择正确性分数。
568
+ ```
569
+
570
+ 也就是:
571
+
572
+ ```text
573
+ Phoenix 原始思路:
574
+ input + available_tools + tool_selection -> correct / incorrect
575
+
576
+ Agent Insight trace 级实现:
577
+ trace -> tool decision points[]
578
+ -> batched Tool Selection judge
579
+ -> trace-level aggregate score + findings
580
+ ```
581
+
582
+ 这样既保留 Phoenix Tool Selection 的核心逻辑,又避免“一个工具决策点一次 LLM 调用”的成本问题。
583
+
584
+ ### Phoenix Tool Selection 原始边界
585
+
586
+ Phoenix Tool Selection 的目标是判断:
587
+
588
+ ```text
589
+ LLM 是否为当前任务选择了最合适的工具。
590
+ ```
591
+
592
+ 它关注的是工具选择的 “what”,不是工具参数是否正确。参数正确性应该交给 Tool Invocation。
593
+
594
+ Phoenix 文档里要求的核心输入是:
595
+
596
+ | 输入 | 含义 |
597
+ | --- | --- |
598
+ | `input` | 当前对话上下文或用户问题 |
599
+ | `available_tools` / `availableTools` | 可用工具列表及描述 |
600
+ | `tool_selection` / `toolSelection` | LLM 实际选择的工具 |
601
+
602
+ 输出通常是:
603
+
604
+ ```text
605
+ label: correct / incorrect
606
+ score: 1.0 / 0.0
607
+ explanation: 判断理由
608
+ ```
609
+
610
+ 它支持的评估层级主要是 span 级,尤其适合包含 tool calls 的 LLM span。参考:[Phoenix Tool Selection](https://arize.com/docs/phoenix/evaluation/pre-built-metrics/tool-selection)。
611
+
612
+ 所以如果要评整条 trace,需要你们在 Phoenix 思路外面加一层“trace 级抽取和聚合”。
613
+
614
+ ### 为什么不能只评实际发生的 tool call?
615
+
616
+ 一个常见误区是:
617
+
618
+ ```text
619
+ 只找出 trace 里所有 tool call,
620
+ 逐个判断“这个工具选得对不对”。
621
+ ```
622
+
623
+ 这样能发现:
624
+
625
+ - 选错工具。
626
+ - 选了不存在的工具。
627
+ - 多工具任务只选了部分工具。
628
+ - 选了不相关工具。
629
+
630
+ 但它发现不了一个很重要的问题:
631
+
632
+ ```text
633
+ 本来应该调用工具,但 agent 没有调用。
634
+ ```
635
+
636
+ 例如:
637
+
638
+ ```text
639
+ 用户要求“读取这个文件并总结”
640
+ agent 没有读文件,直接凭空回答。
641
+ ```
642
+
643
+ trace 里没有 tool call,如果只评实际 tool call,这条 trace 反而没有任何可评点。
644
+
645
+ 所以 trace 级 Tool Selection 必须同时评两类决策:
646
+
647
+ ```text
648
+ 1. actual tool decision:
649
+ agent 实际选择了某个工具,判断选得对不对。
650
+
651
+ 2. missing tool decision:
652
+ agent 没有选择工具,但当时其实应该选择工具。
653
+ ```
654
+
655
+ 这也是整条 trace 级评估比 Phoenix 原始 span 级评估多出来的关键复杂度。
656
+
657
+ ### 推荐整体架构
658
+
659
+ 建议做成一个新的预置评估器:
660
+
661
+ ```text
662
+ TraceToolSelectionEvaluator
663
+ ```
664
+
665
+ 内部由四步组成:
666
+
667
+ ```text
668
+ 1. Trace 解析
669
+ 2. 工具决策点抽取
670
+ 3. 批量 Tool Selection 评估
671
+ 4. Trace 级聚合
672
+ ```
673
+
674
+ 流程图:
675
+
676
+ ```text
677
+ Trace
678
+ -> normalize spans / turns
679
+ -> extract decision points
680
+ -> build one batched Phoenix-style eval input
681
+ -> judge all decision points in one call
682
+ -> aggregate score
683
+ -> output trace-level result + findings
684
+ ```
685
+
686
+ ### 第一步:Trace 解析
687
+
688
+ 先把原始 trace 规范化成统一结构:
689
+
690
+ ```json
691
+ {
692
+ "trace_id": "trace_123",
693
+ "task": "用户原始任务",
694
+ "steps": [
695
+ {
696
+ "step_index": 1,
697
+ "span_id": "span_1",
698
+ "kind": "llm",
699
+ "input_messages": [],
700
+ "output_text": "...",
701
+ "tool_calls": [],
702
+ "available_tools": []
703
+ },
704
+ {
705
+ "step_index": 2,
706
+ "span_id": "span_2",
707
+ "kind": "tool",
708
+ "tool_name": "read_file",
709
+ "tool_args": {},
710
+ "tool_result": "..."
711
+ }
712
+ ]
713
+ }
714
+ ```
715
+
716
+ 这里要注意:`available_tools` 应该尽量取“当时这个 agent 实际可用的工具”,而不是系统全局所有工具。
717
+
718
+ 因为在多 agent / 多 skill 场景里,不同节点可用工具可能不同:
719
+
720
+ ```text
721
+ root agent 可用工具 != subagent 可用工具
722
+ 某个 skill 加载后可用工具 != 加载前可用工具
723
+ 沙箱权限变化前后可用工具也可能不同
724
+ ```
725
+
726
+ 如果只能拿到全局工具列表,评估仍可运行,但置信度应该降低。
727
+
728
+ ### 第二步:抽取工具决策点
729
+
730
+ 工具决策点不是所有 span,而是 agent 在某一刻“选择是否使用工具、使用哪个工具”的位置。
731
+
732
+ 建议抽取四类:
733
+
734
+ #### 1. 有 tool calls 的 LLM span
735
+
736
+ 这是最直接的情况:
737
+
738
+ ```text
739
+ LLM span output 里包含 tool_calls
740
+ ```
741
+
742
+ 每个工具调用都可以形成一个决策点,多个工具调用也可以合并成一个 multi-tool decision。
743
+
744
+ ```json
745
+ {
746
+ "decision_id": "d1",
747
+ "type": "actual_tool_selection",
748
+ "step_index": 3,
749
+ "selected_tools": ["read_file"],
750
+ "decision_context": "用户要求读取 README 并总结,agent 当前准备读取文件"
751
+ }
752
+ ```
753
+
754
+ #### 2. 该用工具但没有用的 LLM span
755
+
756
+ 这是 trace 级评估必须补上的能力。
757
+
758
+ 候选场景:
759
+
760
+ - 用户请求读取、搜索、运行、修改、查询外部状态。
761
+ - agent 直接最终回答,但没有任何对应工具调用。
762
+ - agent 声称已经完成某个外部动作,但 trace 里没有工具证据。
763
+ - 当前上下文缺少必要信息,但 agent 没有检索或读取。
764
+
765
+ 例如:
766
+
767
+ ```json
768
+ {
769
+ "decision_id": "d2",
770
+ "type": "no_tool_selected",
771
+ "step_index": 5,
772
+ "selected_tools": [],
773
+ "decision_context": "用户要求检查测试是否通过,但 agent 直接回答测试通过,没有运行测试工具"
774
+ }
775
+ ```
776
+
777
+ 这类点需要 LLM judge 或规则 + LLM 混合判断。不要用太激进的规则,否则会把正常的纯推理回答误判成漏用工具。
778
+
779
+ #### 3. 多工具任务中的不完整选择
780
+
781
+ 有些任务天然需要多个工具或多个阶段:
782
+
783
+ ```text
784
+ 读取文件 -> 修改文件 -> 运行测试
785
+ 搜索资料 -> 打开来源 -> 汇总引用
786
+ 查询订单 -> 修改订单 -> 确认结果
787
+ ```
788
+
789
+ 如果 agent 只做了其中一步,单个 tool call 可能看起来是正确的,但整条 trace 仍然工具选择不完整。
790
+
791
+ 所以需要在 trace 级识别:
792
+
793
+ ```text
794
+ selected_tools 是不是覆盖了完成任务所需的关键工具集合?
795
+ ```
796
+
797
+ 这可以作为一个单独的 finding:
798
+
799
+ ```text
800
+ missing_required_tool_sequence
801
+ ```
802
+
803
+ #### 4. 不该用工具却用了工具
804
+
805
+ 有些任务只需要直接回答,调用工具反而是错误:
806
+
807
+ ```text
808
+ 用户问一个概念解释,agent 却调用文件写入工具。
809
+ 用户只要求总结已给文本,agent 却外部搜索。
810
+ ```
811
+
812
+ Phoenix Tool Selection 原本也覆盖 “selected a tool when none was needed”。trace 级实现需要把这种情况保留下来。
813
+
814
+ 标签可以是:
815
+
816
+ ```text
817
+ unnecessary_tool_use
818
+ ```
819
+
820
+ ### 第三步:构造批量 Phoenix-style 输入
821
+
822
+ 不要对每个决策点单独调用 judge,而是把多个工具决策点压缩成一个数组,一次性评估。
823
+
824
+ 批量输入可以长这样:
825
+
826
+ ```json
827
+ {
828
+ "task": "用户原始任务",
829
+ "available_tools": "read_file: Read a file...\nrun_tests: Run test command...",
830
+ "decisions": [
831
+ {
832
+ "decision_id": "d1",
833
+ "step_index": 3,
834
+ "span_id": "span_3",
835
+ "type": "actual_tool_selection",
836
+ "context_before_decision": "用户要求总结 README,agent 当前需要获取 README 内容。",
837
+ "selected_tools": ["read_file"]
838
+ },
839
+ {
840
+ "decision_id": "d2",
841
+ "step_index": 8,
842
+ "span_id": "span_8",
843
+ "type": "no_tool_selected",
844
+ "context_before_decision": "agent 修改代码后准备最终回复,但 trace 中没有测试验证工具调用。",
845
+ "selected_tools": []
846
+ }
847
+ ]
848
+ }
849
+ ```
850
+
851
+ 这个结构仍然继承 Phoenix Tool Selection 的三件事:
852
+
853
+ ```text
854
+ input:
855
+ 用户任务 + 当前决策点上下文
856
+
857
+ available_tools:
858
+ 当时可用工具列表
859
+
860
+ tool_selection:
861
+ 当前决策点实际选择的工具
862
+ ```
863
+
864
+ 区别只是:原来一次 judge 评一个 `tool_selection`,现在一次 judge 评一个 `decisions[]`。
865
+
866
+ 关键是不要把完整 trace 原文直接塞进去,而是为每个 decision 生成短上下文。
867
+
868
+ 更好的格式是:
869
+
870
+ ```text
871
+ User task:
872
+ ...
873
+
874
+ Available tools:
875
+ ...
876
+
877
+ Tool decisions to evaluate:
878
+ d1:
879
+ context before decision: ...
880
+ selected tools: ...
881
+
882
+ d2:
883
+ context before decision: ...
884
+ selected tools: No tools called
885
+ ```
886
+
887
+ 这样 judge 看到的是“多个压缩后的工具选择决策”,而不是一大坨原始日志。
888
+
889
+ 如果决策点是“没有工具调用”,`tool_selection` 可以写:
890
+
891
+ ```text
892
+ No tools called
893
+ ```
894
+
895
+ 这和 Phoenix 文档里的建议一致。
896
+
897
+ ### 第四步:批量评估逻辑
898
+
899
+ 批量 judge 可以沿用 Phoenix 的判断标准,但要求它返回数组化结果。
900
+
901
+ Phoenix 原始是:
902
+
903
+ ```text
904
+ correct / incorrect
905
+ ```
906
+
907
+ trace 级实现建议用:
908
+
909
+ ```text
910
+ correct
911
+ partial
912
+ incorrect
913
+ n_a
914
+ ```
915
+
916
+ 原因是整条 trace 里经常出现“工具方向对,但不完整”的情况。
917
+
918
+ 例如:
919
+
920
+ ```text
921
+ 用户要求修改代码并跑测试。
922
+ agent 选择 edit_file。
923
+ ```
924
+
925
+ 单看“修改代码”阶段,`edit_file` 是对的;但从完整任务看,还缺少测试验证。这里用 `partial` 比直接 `incorrect` 更有解释力。
926
+
927
+ 批量 judge 的输出可以是:
928
+
929
+ ```json
930
+ {
931
+ "decision_results": [
932
+ {
933
+ "decision_id": "d1",
934
+ "step_index": 3,
935
+ "span_id": "span_3",
936
+ "label": "correct",
937
+ "score": 1.0,
938
+ "selected_tools": ["read_file"],
939
+ "expected_tools": ["read_file"],
940
+ "error_type": null,
941
+ "severity": "none",
942
+ "explanation": "read_file is the appropriate tool because the task requires reading README content.",
943
+ "confidence": 0.86
944
+ },
945
+ {
946
+ "decision_id": "d2",
947
+ "step_index": 8,
948
+ "span_id": "span_8",
949
+ "label": "incorrect",
950
+ "score": 0.0,
951
+ "selected_tools": [],
952
+ "expected_tools": ["run_tests"],
953
+ "error_type": "missing_required_tool",
954
+ "severity": "medium",
955
+ "explanation": "The agent claimed completion after code changes without selecting a test or verification tool.",
956
+ "confidence": 0.78
957
+ }
958
+ ]
959
+ }
960
+ ```
961
+
962
+ 这种方式的好处是:
963
+
964
+ - LLM 调用次数从 N 次变成 1 次。
965
+ - judge 可以在同一个任务上下文里比较多个工具选择,减少局部误判。
966
+ - 输出仍然保留 `decision_id`,所以可以回写到具体 span / step。
967
+ - trace 级聚合可以直接消费 `decision_results[]`。
968
+
969
+ 需要控制的是输入长度。如果一条 trace 有非常多工具决策点,可以限制只送关键决策点,或者按固定窗口分批,例如每批 10-20 个 decision。即便分批,也比逐点调用便宜很多。
970
+
971
+ ### 第五步:Trace 级聚合
972
+
973
+ 不要只简单平均。工具选择错误对最终结果的影响不一样。
974
+
975
+ 建议同时提供三个分数:
976
+
977
+ | 分数 | 含义 |
978
+ | --- | --- |
979
+ | `tool_selection_average_score` | 所有有效决策点的平均分 |
980
+ | `critical_tool_selection_score` | 关键决策点是否正确,错一个关键点会明显降分 |
981
+ | `trace_tool_selection_pass` | 严格通过:关键工具选择都正确,且没有高严重度错误 |
982
+
983
+ 推荐聚合规则:
984
+
985
+ ```text
986
+ decision_score:
987
+ correct = 1.0
988
+ partial = 0.5
989
+ incorrect = 0.0
990
+ n_a = excluded
991
+
992
+ weight:
993
+ critical decision = 2.0
994
+ normal decision = 1.0
995
+ low-impact decision = 0.5
996
+
997
+ trace_score:
998
+ weighted average over valid decisions
999
+
1000
+ hard fail:
1001
+ hallucinated tool
1002
+ missing required tool that blocks task completion
1003
+ unsafe / forbidden tool
1004
+ wrong tool causing irreversible action
1005
+ ```
1006
+
1007
+ 示例:
1008
+
1009
+ ```json
1010
+ {
1011
+ "trace_score": 0.72,
1012
+ "trace_label": "partial",
1013
+ "decision_count": 5,
1014
+ "incorrect_decision_count": 1,
1015
+ "partial_decision_count": 2,
1016
+ "critical_failure": false,
1017
+ "findings": [
1018
+ {
1019
+ "type": "missing_required_tool",
1020
+ "severity": "medium",
1021
+ "step_index": 8,
1022
+ "expected_tools": ["run_tests"],
1023
+ "selected_tools": [],
1024
+ "evidence": "agent claimed the fix was complete without running tests"
1025
+ }
1026
+ ]
1027
+ }
1028
+ ```
1029
+
1030
+ ### 推荐输出 schema
1031
+
1032
+ 建议 trace 级 evaluator 输出:
1033
+
1034
+ ```json
1035
+ {
1036
+ "evaluator": "TraceToolSelectionEvaluator",
1037
+ "score": 0.72,
1038
+ "label": "partial",
1039
+ "direction": "maximize",
1040
+ "summary": "Most tool choices were appropriate, but the agent skipped test verification before finalizing.",
1041
+ "decision_count": 5,
1042
+ "valid_decision_count": 4,
1043
+ "decision_results": [
1044
+ {
1045
+ "decision_id": "d1",
1046
+ "step_index": 3,
1047
+ "span_id": "span_3",
1048
+ "label": "correct",
1049
+ "score": 1.0,
1050
+ "selected_tools": ["read_file"],
1051
+ "expected_tools": ["read_file"],
1052
+ "error_type": null,
1053
+ "severity": "none",
1054
+ "confidence": 0.86
1055
+ }
1056
+ ],
1057
+ "findings": [
1058
+ {
1059
+ "type": "missing_required_tool",
1060
+ "severity": "medium",
1061
+ "step_index": 8,
1062
+ "span_id": "span_8",
1063
+ "selected_tools": [],
1064
+ "expected_tools": ["run_tests"],
1065
+ "evidence": "The final answer claimed success, but no test tool was called.",
1066
+ "suggested_fix": "Require test verification before reporting code changes as complete."
1067
+ }
1068
+ ],
1069
+ "metadata": {
1070
+ "aggregation": "weighted_average_with_critical_failure_penalty",
1071
+ "available_tools_source": "span",
1072
+ "judge_model": "..."
1073
+ }
1074
+ }
1075
+ ```
1076
+
1077
+ ### 错误类型建议
1078
+
1079
+ 为了后续统计,建议固定错误类型:
1080
+
1081
+ | 错误类型 | 含义 |
1082
+ | --- | --- |
1083
+ | `wrong_tool` | 选择了不适合当前任务的工具 |
1084
+ | `hallucinated_tool` | 选择了不存在或不可用工具 |
1085
+ | `missing_required_tool` | 需要工具但没有调用 |
1086
+ | `unnecessary_tool_use` | 不需要工具却调用 |
1087
+ | `incomplete_tool_set` | 多工具任务只选了部分工具 |
1088
+ | `wrong_tool_order` | 工具选择顺序错误 |
1089
+ | `unsafe_tool_choice` | 选择了危险或违反约束的工具 |
1090
+ | `redundant_tool_choice` | 选择了重复、无收益的工具 |
1091
+ | `n_a` | 当前点不适合评工具选择 |
1092
+
1093
+ 注意:`wrong_tool_order` 介于工具选择和过程评估之间。第一版可以先只标记,不强行纳入分数,避免评估器过重。
1094
+
1095
+ ### 实现上建议分两种模式
1096
+
1097
+ #### 模式 A:Annotation 模式
1098
+
1099
+ 把每个工具决策点的评分写回对应 span:
1100
+
1101
+ ```text
1102
+ span annotation:
1103
+ tool_selection_score
1104
+ tool_selection_label
1105
+ tool_selection_error_type
1106
+ ```
1107
+
1108
+ 优点:
1109
+
1110
+ - 方便在 trace 页面定位问题。
1111
+ - 和 Phoenix span-level 思路一致。
1112
+ - 用户能看到每个节点为什么被扣分。
1113
+
1114
+ #### 模式 B:Trace Aggregate 模式
1115
+
1116
+ 把整条 trace 的聚合结果写成一个 trace-level evaluation:
1117
+
1118
+ ```text
1119
+ trace evaluation:
1120
+ trace_tool_selection_score
1121
+ trace_tool_selection_label
1122
+ summary
1123
+ findings
1124
+ ```
1125
+
1126
+ 优点:
1127
+
1128
+ - 适合评测中心排序、筛选、对比。
1129
+ - 能和任务完成度、轨迹效率、计划质量等指标一起看。
1130
+
1131
+ 推荐两个模式都做:
1132
+
1133
+ ```text
1134
+ span annotation 用于解释;
1135
+ trace aggregate 用于报表。
1136
+ ```
1137
+
1138
+ ### 第一版 MVP 怎么做
1139
+
1140
+ 第一版不需要做得太复杂。建议范围:
1141
+
1142
+ ```text
1143
+ MVP:
1144
+ 1. 只抽取 LLM span 的 tool_calls 和 final-answer no-tool decision。
1145
+ 2. 把所有 decision 打包成一次 Phoenix-style batched prompt。
1146
+ 3. judge 返回 decision_results[],每个 decision 给 correct / partial / incorrect。
1147
+ 4. 聚合成 trace_score。
1148
+ 5. 输出 findings。
1149
+ ```
1150
+
1151
+ 先不做:
1152
+
1153
+ - 完整 workflow DAG。
1154
+ - 自动推导所有“应该调用但没调用”的隐藏决策点。
1155
+ - 复杂工具顺序评分。
1156
+ - 跨 agent 工具权限变化的完美建模。
1157
+ - 和 Tool Invocation / Tool Response Handling 的联合归因。
1158
+
1159
+ 第一版可接受的限制是:
1160
+
1161
+ ```text
1162
+ 能发现大部分 wrong tool、hallucinated tool、unnecessary tool、明显 missing tool;
1163
+ 对隐含的漏调用工具保持保守,低置信度时不强判。
1164
+ ```
1165
+
1166
+ ### 和其他工具指标怎么配合?
1167
+
1168
+ trace 级 Tool Selection 只回答:
1169
+
1170
+ ```text
1171
+ 工具选得对不对?
1172
+ ```
1173
+
1174
+ 它不回答:
1175
+
1176
+ ```text
1177
+ 工具参数对不对?
1178
+ 工具结果有没有读懂?
1179
+ 工具调用顺序是否最高效?
1180
+ 最终任务有没有完成?
1181
+ ```
1182
+
1183
+ 建议组合:
1184
+
1185
+ | 指标 | 回答 |
1186
+ | --- | --- |
1187
+ | Trace Tool Selection | 是否选了正确工具 |
1188
+ | Tool Invocation | 参数、格式、调用是否正确 |
1189
+ | Tool Response Handling | 是否正确理解和使用工具结果 |
1190
+ | Step Efficiency | 是否有冗余、绕路、无效重复 |
1191
+ | Task Completion | 最终任务是否完成 |
1192
+ | Root Cause Attribution | 如果失败,主要失败源在哪里 |
1193
+
1194
+ 一个典型诊断链是:
1195
+
1196
+ ```text
1197
+ Task Completion 低
1198
+ -> Trace Tool Selection 低
1199
+ -> wrong_tool / missing_required_tool
1200
+ -> Root Cause Attribution 归因为 action/tool_selection_error
1201
+ ```
1202
+
1203
+ ### 最推荐的落地形态
1204
+
1205
+ 最终建议:
1206
+
1207
+ ```text
1208
+ 不要直接复刻 Phoenix Tool Selection 为 trace 级大 prompt。
1209
+ 要实现一个 Agent Insight 自己的 TraceToolSelectionEvaluator。
1210
+ ```
1211
+
1212
+ 它的核心设计是:
1213
+
1214
+ ```text
1215
+ 1. Phoenix-style 工具选择判断逻辑
1216
+ 2. Agent Insight trace 决策点抽取
1217
+ 3. batched judge 一次评多个 decision
1218
+ 4. weighted aggregation
1219
+ 5. span annotation + trace evaluation 双输出
1220
+ ```
1221
+
1222
+ 这样能同时满足:
1223
+
1224
+ - 和业界 Phoenix 指标对齐。
1225
+ - 适配你们自己的 trace 数据结构。
1226
+ - 能捕获“该用工具但没用”的整条 trace 问题。
1227
+ - 能在评测中心形成可比较分数。
1228
+ - 能在 trace 页面定位具体失败步骤。