niceeval 0.13.2 → 0.13.3

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 (494) hide show
  1. package/dist/agents/bub.cjs +4 -4
  2. package/dist/agents/bub.cjs.map +1 -1
  3. package/dist/agents/bub.d.cts +2 -2
  4. package/dist/agents/bub.d.mts +2 -2
  5. package/dist/agents/bub.d.ts +2 -2
  6. package/dist/agents/claude-code-native.cjs +213 -0
  7. package/dist/agents/claude-code-native.cjs.map +1 -0
  8. package/dist/agents/claude-code-native.d.cts +5 -0
  9. package/dist/agents/claude-code-native.d.mts +5 -0
  10. package/dist/agents/claude-code-native.d.ts +5 -0
  11. package/dist/agents/claude-code-native.js +6 -0
  12. package/dist/agents/claude-code-native.js.map +1 -0
  13. package/dist/agents/claude-code.cjs +26 -80
  14. package/dist/agents/claude-code.cjs.map +1 -1
  15. package/dist/agents/codex-app-server.cjs +314 -0
  16. package/dist/agents/codex-app-server.cjs.map +1 -0
  17. package/dist/agents/codex-app-server.d.cts +9 -0
  18. package/dist/agents/codex-app-server.d.mts +9 -0
  19. package/dist/agents/codex-app-server.d.ts +9 -0
  20. package/dist/agents/codex-app-server.js +6 -0
  21. package/dist/agents/codex-app-server.js.map +1 -0
  22. package/dist/agents/codex.cjs +19 -68
  23. package/dist/agents/codex.cjs.map +1 -1
  24. package/dist/agents/codex.d.cts +3 -3
  25. package/dist/agents/codex.d.mts +3 -3
  26. package/dist/agents/codex.d.ts +3 -3
  27. package/dist/agents/index.cjs +3 -1
  28. package/dist/agents/index.cjs.map +1 -1
  29. package/dist/agents/index.d.cts +1 -0
  30. package/dist/agents/index.d.mts +1 -0
  31. package/dist/agents/index.d.ts +1 -0
  32. package/dist/agents/index.js +84 -82
  33. package/dist/agents/index.mjs +84 -82
  34. package/dist/agents/managed-jsonl.cjs +207 -0
  35. package/dist/agents/managed-jsonl.cjs.map +1 -0
  36. package/dist/agents/managed-jsonl.d.cts +39 -0
  37. package/dist/agents/managed-jsonl.d.mts +39 -0
  38. package/dist/agents/managed-jsonl.d.ts +39 -0
  39. package/dist/agents/managed-jsonl.js +6 -0
  40. package/dist/agents/managed-jsonl.js.map +1 -0
  41. package/dist/agents/managed-process.cjs +31 -0
  42. package/dist/agents/managed-process.cjs.map +1 -0
  43. package/dist/agents/managed-process.d.cts +3 -0
  44. package/dist/agents/managed-process.d.mts +3 -0
  45. package/dist/agents/managed-process.d.ts +3 -0
  46. package/dist/agents/managed-process.js +6 -0
  47. package/dist/agents/managed-process.js.map +1 -0
  48. package/dist/agents/omp.cjs +18 -1
  49. package/dist/agents/omp.cjs.map +1 -1
  50. package/dist/agents/sdk-streams.cjs +11 -4
  51. package/dist/agents/sdk-streams.cjs.map +1 -1
  52. package/dist/agents/types.cjs.map +1 -1
  53. package/dist/agents/types.d.cts +8 -0
  54. package/dist/agents/types.d.mts +8 -0
  55. package/dist/agents/types.d.ts +8 -0
  56. package/dist/analysis/bindings.cjs +74 -19
  57. package/dist/analysis/bindings.cjs.map +1 -1
  58. package/dist/analysis/bindings.d.cts +534 -156
  59. package/dist/analysis/bindings.d.mts +534 -156
  60. package/dist/analysis/bindings.d.ts +534 -156
  61. package/dist/analysis/domain-view.cjs.map +1 -1
  62. package/dist/analysis/domain-view.d.cts +137 -8
  63. package/dist/analysis/domain-view.d.mts +137 -8
  64. package/dist/analysis/domain-view.d.ts +137 -8
  65. package/dist/analysis/index.cjs.map +1 -1
  66. package/dist/analysis/index.d.cts +1 -1
  67. package/dist/analysis/index.d.mts +1 -1
  68. package/dist/analysis/index.d.ts +1 -1
  69. package/dist/assertions/api.cjs.map +1 -1
  70. package/dist/assertions/api.d.cts +62 -0
  71. package/dist/assertions/api.d.mts +62 -0
  72. package/dist/assertions/api.d.ts +62 -0
  73. package/dist/assertions/judge.cjs +56 -5
  74. package/dist/assertions/judge.cjs.map +1 -1
  75. package/dist/assertions/match.cjs +66 -42
  76. package/dist/assertions/match.cjs.map +1 -1
  77. package/dist/assertions/match.d.cts +13 -0
  78. package/dist/assertions/match.d.mts +13 -0
  79. package/dist/assertions/match.d.ts +13 -0
  80. package/dist/assertions/record/attachment.cjs +104 -33
  81. package/dist/assertions/record/attachment.cjs.map +1 -1
  82. package/dist/assertions/record/attachment.d.cts +294 -57
  83. package/dist/assertions/record/attachment.d.mts +294 -57
  84. package/dist/assertions/record/attachment.d.ts +294 -57
  85. package/dist/assertions/record/codec.cjs +91 -17
  86. package/dist/assertions/record/codec.cjs.map +1 -1
  87. package/dist/assertions/record/codec.d.cts +280 -52
  88. package/dist/assertions/record/codec.d.mts +280 -52
  89. package/dist/assertions/record/codec.d.ts +280 -52
  90. package/dist/assertions/record/index.js +2 -0
  91. package/dist/assertions/record/model.cjs +16 -0
  92. package/dist/assertions/record/model.cjs.map +1 -1
  93. package/dist/assertions/record/model.d.cts +120 -13
  94. package/dist/assertions/record/model.d.mts +120 -13
  95. package/dist/assertions/record/model.d.ts +120 -13
  96. package/dist/assertions/record/model.js +2 -0
  97. package/dist/assertions/record/producer.cjs +70 -50
  98. package/dist/assertions/record/producer.cjs.map +1 -1
  99. package/dist/assertions/record/producer.d.cts +8 -7
  100. package/dist/assertions/record/producer.d.mts +8 -7
  101. package/dist/assertions/record/producer.d.ts +8 -7
  102. package/dist/assertions/runtime.cjs +49 -7
  103. package/dist/assertions/runtime.cjs.map +1 -1
  104. package/dist/cli/application.cjs +40 -0
  105. package/dist/cli/application.cjs.map +1 -0
  106. package/dist/cli/application.d.cts +129 -0
  107. package/dist/cli/application.d.mts +129 -0
  108. package/dist/cli/application.d.ts +129 -0
  109. package/dist/cli/application.js +24 -0
  110. package/dist/cli/application.js.map +1 -0
  111. package/dist/cli/bootstrap.cjs +10 -4
  112. package/dist/cli/bootstrap.cjs.map +1 -1
  113. package/dist/cli/node-application.cjs +123 -0
  114. package/dist/cli/node-application.cjs.map +1 -0
  115. package/dist/cli/node-application.d.cts +14 -0
  116. package/dist/cli/node-application.d.mts +14 -0
  117. package/dist/cli/node-application.d.ts +14 -0
  118. package/dist/cli/node-application.js +26 -0
  119. package/dist/cli/node-application.js.map +1 -0
  120. package/dist/cli/program.cjs +2807 -0
  121. package/dist/cli/program.cjs.map +1 -0
  122. package/dist/cli/program.d.cts +352 -0
  123. package/dist/cli/program.d.mts +352 -0
  124. package/dist/cli/program.d.ts +352 -0
  125. package/dist/cli/program.js +36 -0
  126. package/dist/cli/program.js.map +1 -0
  127. package/dist/cli/project-configuration.cjs +134 -0
  128. package/dist/cli/project-configuration.cjs.map +1 -0
  129. package/dist/cli/project-configuration.d.cts +64 -0
  130. package/dist/cli/project-configuration.d.mts +64 -0
  131. package/dist/cli/project-configuration.d.ts +64 -0
  132. package/dist/cli/project-configuration.js +22 -0
  133. package/dist/cli/project-configuration.js.map +1 -0
  134. package/dist/cli/record.cjs +20 -4
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +3 -3
  137. package/dist/cli/record.d.mts +3 -3
  138. package/dist/cli/record.d.ts +3 -3
  139. package/dist/cli.cjs +19 -3130
  140. package/dist/cli.cjs.map +1 -1
  141. package/dist/cli.d.cts +2 -148
  142. package/dist/cli.d.mts +2 -148
  143. package/dist/cli.d.ts +2 -148
  144. package/dist/cli.js +22 -30
  145. package/dist/context/assert-first.cjs +21 -15
  146. package/dist/context/assert-first.cjs.map +1 -1
  147. package/dist/context/assert-first.d.cts +1 -0
  148. package/dist/context/assert-first.d.mts +1 -0
  149. package/dist/context/assert-first.d.ts +1 -0
  150. package/dist/context/attempt-resources.cjs +13 -0
  151. package/dist/context/attempt-resources.cjs.map +1 -0
  152. package/dist/context/attempt-resources.d.cts +3 -0
  153. package/dist/context/attempt-resources.d.mts +3 -0
  154. package/dist/context/attempt-resources.d.ts +3 -0
  155. package/dist/context/attempt-resources.js +8 -0
  156. package/dist/context/attempt-resources.js.map +1 -0
  157. package/dist/context/session.cjs +4 -3
  158. package/dist/context/session.cjs.map +1 -1
  159. package/dist/context/session.d.cts +1 -0
  160. package/dist/context/session.d.mts +1 -0
  161. package/dist/context/session.d.ts +1 -0
  162. package/dist/eval/record/verdict.cjs +3 -2
  163. package/dist/eval/record/verdict.cjs.map +1 -1
  164. package/dist/experiment/host/index.cjs +1 -6
  165. package/dist/experiment/host/index.cjs.map +1 -1
  166. package/dist/experiment/host/index.d.cts +1 -0
  167. package/dist/experiment/host/index.d.mts +1 -0
  168. package/dist/experiment/host/index.d.ts +1 -0
  169. package/dist/load-config.cjs +13 -4
  170. package/dist/load-config.cjs.map +1 -1
  171. package/dist/load-config.d.cts +4 -3
  172. package/dist/load-config.d.mts +4 -3
  173. package/dist/load-config.d.ts +4 -3
  174. package/dist/load-config.js +4 -2
  175. package/dist/o11y/parsers/codex.cjs +29 -7
  176. package/dist/o11y/parsers/codex.cjs.map +1 -1
  177. package/dist/record/codec/core.d.cts +0 -2
  178. package/dist/record/codec/core.d.mts +0 -2
  179. package/dist/record/codec/core.d.ts +0 -2
  180. package/dist/record/codec/identifiers.cjs +2 -3
  181. package/dist/record/codec/identifiers.cjs.map +1 -1
  182. package/dist/record/codec/identifiers.d.cts +1 -2
  183. package/dist/record/codec/identifiers.d.mts +1 -2
  184. package/dist/record/codec/identifiers.d.ts +1 -2
  185. package/dist/record/codec/identifiers.js +10 -12
  186. package/dist/record/codec/index.js +42 -44
  187. package/dist/record/definition/attachment.cjs +1 -0
  188. package/dist/record/definition/attachment.cjs.map +1 -1
  189. package/dist/record/definition/attachment.d.cts +14 -0
  190. package/dist/record/definition/attachment.d.mts +14 -0
  191. package/dist/record/definition/attachment.d.ts +14 -0
  192. package/dist/record/family/assertions-v1.cjs +104 -0
  193. package/dist/record/family/assertions-v1.cjs.map +1 -0
  194. package/dist/record/family/assertions-v1.d.cts +2 -0
  195. package/dist/record/family/assertions-v1.d.mts +2 -0
  196. package/dist/record/family/assertions-v1.d.ts +2 -0
  197. package/dist/record/family/assertions-v1.js +6 -0
  198. package/dist/record/family/assertions-v1.js.map +1 -0
  199. package/dist/record/family/assertions.cjs +16 -5
  200. package/dist/record/family/assertions.cjs.map +1 -1
  201. package/dist/record/family/assertions.d.cts +510 -56
  202. package/dist/record/family/assertions.d.mts +510 -56
  203. package/dist/record/family/assertions.d.ts +510 -56
  204. package/dist/record/family/assertions.js +14 -10
  205. package/dist/record/family/catalog.cjs +17 -1
  206. package/dist/record/family/catalog.cjs.map +1 -1
  207. package/dist/record/family/catalog.d.cts +1292 -104
  208. package/dist/record/family/catalog.d.mts +1292 -104
  209. package/dist/record/family/catalog.d.ts +1292 -104
  210. package/dist/record/family/catalog.js +22 -20
  211. package/dist/record/family/index.js +144 -138
  212. package/dist/record/family/observability-v1.cjs +5 -0
  213. package/dist/record/family/observability-v1.cjs.map +1 -1
  214. package/dist/record/family/observability.cjs +1 -1
  215. package/dist/record/family/observability.cjs.map +1 -1
  216. package/dist/record/host/runtime.cjs +323 -173
  217. package/dist/record/host/runtime.cjs.map +1 -1
  218. package/dist/record/host/types.cjs.map +1 -1
  219. package/dist/record/host/types.d.cts +9 -7
  220. package/dist/record/host/types.d.mts +9 -7
  221. package/dist/record/host/types.d.ts +9 -7
  222. package/dist/record/model/core.cjs.map +1 -1
  223. package/dist/record/model/core.d.cts +1 -2
  224. package/dist/record/model/core.d.mts +1 -2
  225. package/dist/record/model/core.d.ts +1 -2
  226. package/dist/record/model/definition.cjs +1 -2
  227. package/dist/record/model/definition.cjs.map +1 -1
  228. package/dist/record/model/definition.d.cts +1 -7
  229. package/dist/record/model/definition.d.mts +1 -7
  230. package/dist/record/model/definition.d.ts +1 -7
  231. package/dist/record/model/identifiers.cjs +2 -3
  232. package/dist/record/model/identifiers.cjs.map +1 -1
  233. package/dist/record/model/identifiers.d.cts +1 -3
  234. package/dist/record/model/identifiers.d.mts +1 -3
  235. package/dist/record/model/identifiers.d.ts +1 -3
  236. package/dist/record/model/identifiers.js +36 -38
  237. package/dist/record/model/index.js +60 -62
  238. package/dist/record/platform/node.cjs +17 -7
  239. package/dist/record/platform/node.cjs.map +1 -1
  240. package/dist/record/platform/services.cjs.map +1 -1
  241. package/dist/record/platform/services.d.cts +8 -3
  242. package/dist/record/platform/services.d.mts +8 -3
  243. package/dist/record/platform/services.d.ts +8 -3
  244. package/dist/record/reader/format.cjs +16 -65
  245. package/dist/record/reader/format.cjs.map +1 -1
  246. package/dist/record/reader/format.d.cts +5 -9
  247. package/dist/record/reader/format.d.mts +5 -9
  248. package/dist/record/reader/format.d.ts +5 -9
  249. package/dist/record/reader/index.js +10 -8
  250. package/dist/record/reader/runtime.cjs +63 -32
  251. package/dist/record/reader/runtime.cjs.map +1 -1
  252. package/dist/record/reader/runtime.d.cts +40 -4
  253. package/dist/record/reader/runtime.d.mts +40 -4
  254. package/dist/record/reader/runtime.d.ts +40 -4
  255. package/dist/record/reader/runtime.js +6 -4
  256. package/dist/report/assets/enhance.js +5 -5
  257. package/dist/report/assets/styles.css +190 -24
  258. package/dist/report/built-in/result-components.cjs +8 -5
  259. package/dist/report/built-in/result-components.cjs.map +1 -1
  260. package/dist/report/built-in/standard.cjs +3 -0
  261. package/dist/report/built-in/standard.cjs.map +1 -1
  262. package/dist/report/built-in/standard.d.cts +2 -0
  263. package/dist/report/built-in/standard.d.mts +2 -0
  264. package/dist/report/built-in/standard.d.ts +2 -0
  265. package/dist/report/client-dist/app.js +53 -0
  266. package/dist/report/components/attempt-detail/compute.cjs +108 -231
  267. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  268. package/dist/report/components/attempt-detail/compute.d.cts +11 -45
  269. package/dist/report/components/attempt-detail/compute.d.mts +11 -45
  270. package/dist/report/components/attempt-detail/compute.d.ts +11 -45
  271. package/dist/report/components/attempt-detail/compute.js +2 -4
  272. package/dist/report/components/attempt-detail/content.cjs +4 -4
  273. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  274. package/dist/report/components/attempt-detail/validate.cjs +47 -4
  275. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  276. package/dist/report/components/entity-lists/compute.cjs +9 -15
  277. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  278. package/dist/report/components/entity-lists/content.cjs +53 -40
  279. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  280. package/dist/report/components/entity-lists/index.cjs +1 -3
  281. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  282. package/dist/report/components/experiment-detail/compute.cjs +4 -6
  283. package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
  284. package/dist/report/components/summaries/index.cjs +5 -1
  285. package/dist/report/components/summaries/index.cjs.map +1 -1
  286. package/dist/report/definition/cell.cjs +14 -7
  287. package/dist/report/definition/cell.cjs.map +1 -1
  288. package/dist/report/definition/cell.d.cts +4 -0
  289. package/dist/report/definition/cell.d.mts +4 -0
  290. package/dist/report/definition/cell.d.ts +4 -0
  291. package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
  292. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
  293. package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
  294. package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
  295. package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
  296. package/dist/report/definition/primitives/assertion-evidence.js +6 -0
  297. package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
  298. package/dist/report/definition/primitives/conversation.cjs +7 -0
  299. package/dist/report/definition/primitives/conversation.cjs.map +1 -1
  300. package/dist/report/definition/primitives/conversation.d.cts +2 -0
  301. package/dist/report/definition/primitives/conversation.d.mts +2 -0
  302. package/dist/report/definition/primitives/conversation.d.ts +2 -0
  303. package/dist/report/definition/primitives/turn-trace.cjs +53 -3
  304. package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
  305. package/dist/report/definition/primitives.cjs +14 -1
  306. package/dist/report/definition/primitives.cjs.map +1 -1
  307. package/dist/report/definition/report.cjs +16 -8
  308. package/dist/report/definition/report.cjs.map +1 -1
  309. package/dist/report/definition/report.d.cts +6 -0
  310. package/dist/report/definition/report.d.mts +6 -0
  311. package/dist/report/definition/report.d.ts +6 -0
  312. package/dist/report/definition/table-text.cjs +12 -3
  313. package/dist/report/definition/table-text.cjs.map +1 -1
  314. package/dist/report/definition/table-text.d.cts +6 -1
  315. package/dist/report/definition/table-text.d.mts +6 -1
  316. package/dist/report/definition/table-text.d.ts +6 -1
  317. package/dist/report/execution/model.cjs +6 -14
  318. package/dist/report/execution/model.cjs.map +1 -1
  319. package/dist/report/execution/model.d.cts +5 -10
  320. package/dist/report/execution/model.d.mts +5 -10
  321. package/dist/report/execution/model.d.ts +5 -10
  322. package/dist/report/execution/model.js +6 -6
  323. package/dist/report/execution/paths.cjs +0 -11
  324. package/dist/report/execution/paths.cjs.map +1 -1
  325. package/dist/report/execution/paths.d.cts +0 -1
  326. package/dist/report/execution/paths.d.mts +0 -1
  327. package/dist/report/execution/paths.d.ts +0 -1
  328. package/dist/report/execution/paths.js +6 -8
  329. package/dist/report/host/execute.cjs +13 -22
  330. package/dist/report/host/execute.cjs.map +1 -1
  331. package/dist/report/host/execute.d.cts +1 -4
  332. package/dist/report/host/execute.d.mts +1 -4
  333. package/dist/report/host/execute.d.ts +1 -4
  334. package/dist/report/host/from-record.cjs +3 -0
  335. package/dist/report/host/from-record.cjs.map +1 -1
  336. package/dist/report/host/from-record.d.cts +4 -1
  337. package/dist/report/host/from-record.d.mts +4 -1
  338. package/dist/report/host/from-record.d.ts +4 -1
  339. package/dist/report/host/site-assets.cjs +1 -2
  340. package/dist/report/host/site-assets.cjs.map +1 -1
  341. package/dist/report/host/site-assets.d.cts +0 -1
  342. package/dist/report/host/site-assets.d.mts +0 -1
  343. package/dist/report/host/site-assets.d.ts +0 -1
  344. package/dist/report/host/site-assets.js +2 -4
  345. package/dist/report/host/static.cjs +71 -346
  346. package/dist/report/host/static.cjs.map +1 -1
  347. package/dist/report/host/static.d.cts +1 -3
  348. package/dist/report/host/static.d.mts +1 -3
  349. package/dist/report/host/static.d.ts +1 -3
  350. package/dist/report/host/static.js +2 -2
  351. package/dist/report/host/view-session.cjs.map +1 -1
  352. package/dist/report/host/view-session.d.cts +1 -1
  353. package/dist/report/host/view-session.d.mts +1 -1
  354. package/dist/report/host/view-session.d.ts +1 -1
  355. package/dist/report/model/locale.cjs +1 -1
  356. package/dist/report/model/locale.cjs.map +1 -1
  357. package/dist/report/model/locale.d.cts +1 -1
  358. package/dist/report/model/locale.d.mts +1 -1
  359. package/dist/report/model/locale.d.ts +1 -1
  360. package/dist/report/model/pricing.cjs +2 -2
  361. package/dist/report/model/pricing.cjs.map +1 -1
  362. package/dist/report/react/enhance.js +5 -5
  363. package/dist/report/react/styles.css +190 -24
  364. package/dist/runner/adoption.cjs +4 -7
  365. package/dist/runner/adoption.cjs.map +1 -1
  366. package/dist/runner/attempt-resources.cjs +60 -0
  367. package/dist/runner/attempt-resources.cjs.map +1 -0
  368. package/dist/runner/attempt-resources.d.cts +13 -0
  369. package/dist/runner/attempt-resources.d.mts +13 -0
  370. package/dist/runner/attempt-resources.d.ts +13 -0
  371. package/dist/runner/attempt-resources.js +6 -0
  372. package/dist/runner/attempt-resources.js.map +1 -0
  373. package/dist/runner/attempt.cjs +37 -3
  374. package/dist/runner/attempt.cjs.map +1 -1
  375. package/dist/runner/feedback/failure.cjs +77 -2
  376. package/dist/runner/feedback/failure.cjs.map +1 -1
  377. package/dist/runner/feedback/failure.d.cts +2 -1
  378. package/dist/runner/feedback/failure.d.mts +2 -1
  379. package/dist/runner/feedback/failure.d.ts +2 -1
  380. package/dist/runner/project-current.cjs +2 -13
  381. package/dist/runner/project-current.cjs.map +1 -1
  382. package/dist/runner/project-current.d.cts +4 -2
  383. package/dist/runner/project-current.d.mts +4 -2
  384. package/dist/runner/project-current.d.ts +4 -2
  385. package/dist/runner/reporters/braintrust.cjs +7 -7
  386. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  387. package/dist/runner/reuse-readback.cjs +3 -4
  388. package/dist/runner/reuse-readback.cjs.map +1 -1
  389. package/dist/runner/run.cjs +5 -2
  390. package/dist/runner/run.cjs.map +1 -1
  391. package/dist/sandbox/backend.cjs +32 -2
  392. package/dist/sandbox/backend.cjs.map +1 -1
  393. package/dist/sandbox/backend.d.cts +12 -1
  394. package/dist/sandbox/backend.d.mts +12 -1
  395. package/dist/sandbox/backend.d.ts +12 -1
  396. package/dist/sandbox/backend.js +28 -22
  397. package/dist/sandbox/docker.cjs +140 -0
  398. package/dist/sandbox/docker.cjs.map +1 -1
  399. package/dist/sandbox/docker.d.cts +3 -1
  400. package/dist/sandbox/docker.d.mts +3 -1
  401. package/dist/sandbox/docker.d.ts +3 -1
  402. package/dist/sandbox/e2b.cjs +42 -0
  403. package/dist/sandbox/e2b.cjs.map +1 -1
  404. package/dist/sandbox/e2b.d.cts +2 -0
  405. package/dist/sandbox/e2b.d.mts +2 -0
  406. package/dist/sandbox/e2b.d.ts +2 -0
  407. package/dist/sandbox/local.cjs +64 -0
  408. package/dist/sandbox/local.cjs.map +1 -1
  409. package/dist/sandbox/local.d.cts +3 -1
  410. package/dist/sandbox/local.d.mts +3 -1
  411. package/dist/sandbox/local.d.ts +3 -1
  412. package/dist/sandbox/managed-process.cjs +49 -0
  413. package/dist/sandbox/managed-process.cjs.map +1 -0
  414. package/dist/sandbox/managed-process.d.cts +11 -0
  415. package/dist/sandbox/managed-process.d.mts +11 -0
  416. package/dist/sandbox/managed-process.d.ts +11 -0
  417. package/dist/sandbox/managed-process.js +6 -0
  418. package/dist/sandbox/managed-process.js.map +1 -0
  419. package/dist/sandbox/types.cjs.map +1 -1
  420. package/dist/sandbox/types.d.cts +24 -0
  421. package/dist/sandbox/types.d.mts +24 -0
  422. package/dist/sandbox/types.d.ts +24 -0
  423. package/dist/sandbox/vercel.cjs +1 -0
  424. package/dist/sandbox/vercel.cjs.map +1 -1
  425. package/dist/sandbox/vercel.d.cts +1 -0
  426. package/dist/sandbox/vercel.d.mts +1 -0
  427. package/dist/sandbox/vercel.d.ts +1 -0
  428. package/dist/view/server.cjs +2 -37
  429. package/dist/view/server.cjs.map +1 -1
  430. package/dist/view/server.d.cts +0 -3
  431. package/dist/view/server.d.mts +0 -3
  432. package/dist/view/server.d.ts +0 -3
  433. package/docs-site/zh/reference/builtin-agents.mdx +7 -7
  434. package/docs-site/zh/reference/official-adapters.mdx +4 -4
  435. package/docs-site/zh/reference/report-components.mdx +2 -2
  436. package/docs-site/zh/tutorials/configuration.mdx +2 -2
  437. package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
  438. package/docs-site/zh/tutorials/publish-report.mdx +4 -4
  439. package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
  440. package/docs-site/zh/tutorials/theming.mdx +2 -2
  441. package/package.json +4 -6
  442. package/dist/record/migration/index.cjs +0 -5
  443. package/dist/record/migration/index.cjs.map +0 -1
  444. package/dist/record/migration/index.d.cts +0 -11
  445. package/dist/record/migration/index.d.mts +0 -11
  446. package/dist/record/migration/index.d.ts +0 -11
  447. package/dist/record/migration/index.js +0 -6
  448. package/dist/record/migration/index.js.map +0 -1
  449. package/dist/report/host/site-runtime.cjs +0 -92
  450. package/dist/report/host/site-runtime.cjs.map +0 -1
  451. package/dist/report/host/site-runtime.d.cts +0 -9
  452. package/dist/report/host/site-runtime.d.mts +0 -9
  453. package/dist/report/host/site-runtime.d.ts +0 -9
  454. package/dist/report/host/site-runtime.js +0 -10
  455. package/dist/report/host/site-runtime.js.map +0 -1
  456. package/dist/view/client-dist/app.css +0 -2
  457. package/dist/view/client-dist/app.js +0 -49
  458. package/dist/view/data.cjs +0 -3
  459. package/dist/view/data.cjs.map +0 -1
  460. package/dist/view/data.d.cts +0 -9
  461. package/dist/view/data.d.mts +0 -9
  462. package/dist/view/data.d.ts +0 -9
  463. package/dist/view/data.js +0 -4
  464. package/dist/view/data.js.map +0 -1
  465. package/dist/view/index.cjs +0 -24
  466. package/dist/view/index.cjs.map +0 -1
  467. package/dist/view/index.d.cts +0 -9
  468. package/dist/view/index.d.mts +0 -9
  469. package/dist/view/index.d.ts +0 -9
  470. package/dist/view/index.js +0 -28
  471. package/dist/view/index.js.map +0 -1
  472. package/dist/view/report-view-cache.cjs +0 -200
  473. package/dist/view/report-view-cache.cjs.map +0 -1
  474. package/dist/view/report-view-cache.d.cts +0 -67
  475. package/dist/view/report-view-cache.d.mts +0 -67
  476. package/dist/view/report-view-cache.d.ts +0 -67
  477. package/dist/view/report-view-cache.js +0 -8
  478. package/dist/view/report-view-cache.js.map +0 -1
  479. package/dist/view/shared/types.cjs +0 -3
  480. package/dist/view/shared/types.cjs.map +0 -1
  481. package/dist/view/shared/types.d.cts +0 -51
  482. package/dist/view/shared/types.d.mts +0 -51
  483. package/dist/view/shared/types.d.ts +0 -51
  484. package/dist/view/shared/types.js +0 -4
  485. package/dist/view/shared/types.js.map +0 -1
  486. package/dist/view/site.cjs +0 -32
  487. package/dist/view/site.cjs.map +0 -1
  488. package/dist/view/site.d.cts +0 -24
  489. package/dist/view/site.d.mts +0 -24
  490. package/dist/view/site.d.ts +0 -24
  491. package/dist/view/site.js +0 -8
  492. package/dist/view/site.js.map +0 -1
  493. package/dist/view/styles.css +0 -170
  494. package/dist/view/template.html +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.js","sourceRoot":"","sources":["conversation.tsx"],"names":[],"mappings":"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","sourcesContent":["// Conversation:分轮事件流(docs/feature/reports/library.md)。\n// SourceView 展开区与兜底区复用 ConversationEntries。\nimport { createElement, Fragment, type ReactElement, type ReactNode } from \"react\";\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport { attemptPageTarget } from \"./shared.ts\";\nimport { stripControl } from \"../../../assertions/display.ts\";\nimport { dataShapeError, isLocalizedText, isObject, type ValueProps, } from \"./shared.ts\";\nimport { resolveLocalizedText, type LocalizedText, type ReportLocale } from \"../../model/locale.ts\";\nimport { defineComponent, type ReportNode, type ResolveContext, type TextContext } from \"../tree.ts\";\nconst REACT_FRAGMENT = Symbol.for(\"react.fragment\");\nexport interface ConversationEntry {\n kind: string;\n preview: LocalizedText;\n detail?: ReportNode;\n /** Exact retained evidence behind the compact preview. */\n raw?: string;\n failed?: boolean;\n /** Tool lifecycle hint used by the session summary; omitted for non-call rows. */\n callPhase?: \"started\" | \"finished\";\n /** Stable provider call identity when this row belongs to a tool lifecycle. */\n callId?: string;\n}\nexport interface ConversationTurn {\n key: string;\n label: LocalizedText;\n durationMs?: number;\n verdict?: \"passed\" | \"failed\" | \"errored\" | \"skipped\";\n entries: readonly ConversationEntry[];\n}\n/** 独立生命周期命令证据卡;不属于 Conversation 的轮次或消息。 */\nexport interface CommandEvidenceItem {\n key: string;\n timingNodeId: string;\n phase: string;\n display: string;\n exitCode: number;\n classification: \"succeeded\" | \"observed\" | \"failed\";\n durationMs?: number;\n stdout?: string;\n stderr?: string;\n}\nexport interface ConversationContent {\n turns: readonly ConversationTurn[];\n /** text 面 `--execution` 下钻;数据源投影时填入。 */\n locator?: AttemptLocator;\n}\nexport interface CommandEvidenceContent {\n commands: readonly CommandEvidenceItem[];\n locator?: AttemptLocator;\n}\nexport type ConversationProps = ValueProps<ConversationContent | null, {\n locale?: ReportLocale;\n className?: string;\n title?: LocalizedText;\n}>;\ntype ResolvedConversationProps = {\n data: ConversationContent | null;\n drillDown?: string;\n locale?: ReportLocale;\n className?: string;\n title?: LocalizedText;\n};\nfunction cx(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n/**\n * Render an already-closed entry detail inside another report primitive.\n *\n * Conversation and TurnTrace deliberately share this small bridge instead of\n * asking the browser to recover evidence from an existing DOM row. The\n * caller still emits every evidence surface during SSR.\n */\nexport function renderConversationDetail(node: ReportNode): ReactNode {\n if (node === null || node === undefined || typeof node === \"boolean\")\n return null;\n if (Array.isArray(node)) {\n return node.map((child, i) => <Fragment key={i}>{renderConversationDetail(child)}</Fragment>);\n }\n if (typeof node === \"string\" || typeof node === \"number\")\n return null;\n const el = node as {\n type: unknown;\n props: globalThis.Record<string, unknown>;\n };\n if (el.type === REACT_FRAGMENT) {\n return createElement(Fragment, null, renderConversationDetail(el.props.children as ReportNode));\n }\n return createElement(el.type as never, el.props);\n}\nexport function sanitizeConversationPreview(text: LocalizedText, locale: ReportLocale, max = 140): string {\n const raw = resolveLocalizedText(text, locale);\n const oneLine = stripControl(raw).replace(/\\s+/g, \" \").trim();\n return oneLine.length > max ? `${oneLine.slice(0, max)}…` : oneLine;\n}\nfunction validateEntry(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object`;\n if (typeof value.kind !== \"string\")\n return `\"${path}.kind\" must be a string`;\n if (!isLocalizedText(value.preview))\n return `\"${path}.preview\" must be a LocalizedText`;\n if (value.failed !== undefined && typeof value.failed !== \"boolean\") {\n return `\"${path}.failed\" must be a boolean`;\n }\n if (value.raw !== undefined && typeof value.raw !== \"string\")\n return `\"${path}.raw\" must be a string`;\n if (value.callId !== undefined && typeof value.callId !== \"string\")\n return `\"${path}.callId\" must be a string`;\n if (value.callPhase !== undefined && value.callPhase !== \"started\" && value.callPhase !== \"finished\") {\n return `\"${path}.callPhase\" must be started | finished`;\n }\n return null;\n}\nfunction validateTurn(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object`;\n if (typeof value.key !== \"string\")\n return `\"${path}.key\" must be a string`;\n if (!isLocalizedText(value.label))\n return `\"${path}.label\" must be a LocalizedText`;\n if (value.durationMs !== undefined\n && (typeof value.durationMs !== \"number\" || !Number.isFinite(value.durationMs) || value.durationMs < 0)) {\n return `\"${path}.durationMs\" must be a non-negative number`;\n }\n if (value.verdict !== undefined &&\n value.verdict !== \"passed\" &&\n value.verdict !== \"failed\" &&\n value.verdict !== \"errored\" &&\n value.verdict !== \"skipped\") {\n return `\"${path}.verdict\" must be passed | failed | errored | skipped`;\n }\n if (!Array.isArray(value.entries))\n return `\"${path}.entries\" must be an array`;\n for (let i = 0; i < value.entries.length; i++) {\n const problem = validateEntry(value.entries[i], `${path}.entries[${i}]`);\n if (problem !== null)\n return problem;\n }\n return null;\n}\nfunction assertConversationContent(data: unknown): ConversationContent | null {\n if (data === null || data === undefined)\n return null;\n if (!isObject(data)) {\n throw dataShapeError(\"Conversation\", \"conversationData\", \"ConversationContent\", '\"data\" must be an object or null');\n }\n if (!Array.isArray(data.turns)) {\n throw dataShapeError(\"Conversation\", \"conversationData\", \"ConversationContent\", '\"data.turns\" must be an array');\n }\n for (let i = 0; i < data.turns.length; i++) {\n const problem = validateTurn(data.turns[i], `data.turns[${i}]`);\n if (problem !== null)\n throw dataShapeError(\"Conversation\", \"conversationData\", \"ConversationContent\", problem);\n }\n return data as unknown as ConversationContent;\n}\nfunction isEmptyConversation(data: ConversationContent | null): boolean {\n if (data === null)\n return true;\n return data.turns.length === 0;\n}\n// PageContext 不携带 input;下钻只来自 data.locator 的 attempt 目标命令\n// (conversationText 的 baseCommand 分支)。\nfunction EntryRow({ entry, locale }: {\n entry: ConversationEntry;\n locale: ReportLocale;\n}): ReactElement {\n const preview = sanitizeConversationPreview(entry.preview, locale);\n const head = (<>\n <span className=\"niceeval-conversation-entry-kind\" data-kind={entry.kind}>\n {entry.kind}\n </span>\n <span className=\"niceeval-conversation-entry-preview\">{preview}</span>\n </>);\n const detail = entry.detail !== undefined ? renderConversationDetail(entry.detail) : null;\n if (detail === null || detail === undefined || detail === false) {\n return (<div className={cx(\"niceeval-conversation-entry\", entry.failed && \"niceeval-conversation-entry--failed\")} data-niceeval-turn-entry role=\"button\" tabIndex={0}>{head}</div>);\n }\n return (<details className={cx(\"niceeval-conversation-entry\", \"niceeval-conversation-entry--expandable\", entry.failed && \"niceeval-conversation-entry--failed\")} data-niceeval-turn-entry>\n <summary className=\"niceeval-conversation-entry-summary\">{head}</summary>\n <div className=\"niceeval-conversation-entry-detail\">{detail}</div>\n </details>);\n}\n/** SourceView 等复用:渲染一轮内的条目列表。 */\nexport function ConversationEntries({ entries, locale, }: {\n entries: readonly ConversationEntry[];\n locale: ReportLocale;\n}): ReactElement {\n return (<div className=\"niceeval-conversation-entries\">\n {entries.map((entry, i) => (<EntryRow key={i} entry={entry} locale={locale}/>))}\n </div>);\n}\nfunction TurnCard({ turn, locale }: {\n turn: ConversationTurn;\n locale: ReportLocale;\n}): ReactElement {\n return (<article className={cx(\"niceeval-conversation-turn\", turn.verdict && `niceeval-conversation-turn--${turn.verdict}`)}>\n <header className=\"niceeval-conversation-turn-head\">\n <span className=\"niceeval-conversation-turn-label\">{resolveLocalizedText(turn.label, locale)}</span>\n {turn.durationMs !== undefined ? (<span className=\"niceeval-conversation-turn-duration\">{formatSessionDuration(turn.durationMs)}</span>) : null}\n {turn.verdict ? <span className=\"niceeval-conversation-turn-verdict\">{turn.verdict}</span> : null}\n </header>\n <ConversationEntries entries={turn.entries} locale={locale}/>\n </article>);\n}\nfunction formatSessionDuration(durationMs: number): string {\n if (durationMs < 1000)\n return `${Math.round(durationMs)}ms`;\n const seconds = Math.round(durationMs / 1000);\n if (seconds < 60)\n return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n return `${minutes}m ${seconds % 60}s`;\n}\nfunction SessionSummary({ content, title, locale, }: {\n content: ConversationContent;\n title?: LocalizedText;\n locale: ReportLocale;\n}): ReactElement {\n const durations = content.turns.flatMap((turn) => turn.durationMs === undefined ? [] : [turn.durationMs]);\n const calls = content.turns.reduce((count, turn) => count + turn.entries.filter((entry) => entry.callPhase === \"started\").length, 0);\n const duration = durations.length === 0\n ? \"—\"\n : formatSessionDuration(durations.reduce((total, value) => total + value, 0));\n return (<header className=\"niceeval-conversation-session-head\">\n <span className=\"niceeval-conversation-session-title\">\n {title === undefined ? \"Session log\" : resolveLocalizedText(title, locale)}\n </span>\n <dl className=\"niceeval-conversation-session-stats\">\n <div><dt>Duration</dt><dd>{duration}</dd></div>\n <div><dt>Turns</dt><dd>{content.turns.length}</dd></div>\n <div><dt>Calls</dt><dd>{calls}</dd></div>\n </dl>\n </header>);\n}\nfunction commandEvidenceTitle(command: CommandEvidenceItem): string {\n const title = command.classification === \"succeeded\" ? \"COMMAND\"\n : command.classification === \"failed\" ? \"FAILED COMMAND\"\n : \"NON-ZERO COMMAND · observed\";\n return `${title} · ${command.phase} · exit ${command.exitCode}${command.durationMs === undefined ? \"\" : ` · ${command.durationMs}ms`}`;\n}\nfunction CommandEvidenceCard({ command }: {\n command: CommandEvidenceItem;\n}): ReactElement {\n return (<article className={cx(\"niceeval-command-evidence-card\", `niceeval-command-evidence--${command.classification}`)}>\n <header className=\"niceeval-conversation-turn-head\">\n <span className=\"niceeval-conversation-turn-label\">\n {commandEvidenceTitle(command)}\n </span>\n </header>\n <div className=\"niceeval-command-evidence-display\">{command.display}</div>\n {command.stdout ? (<details className=\"niceeval-conversation-entry niceeval-conversation-entry--expandable\">\n <summary className=\"niceeval-conversation-entry-summary\">stdout</summary>\n <pre className=\"niceeval-conversation-io\">{command.stdout}</pre>\n </details>) : null}\n {command.stderr ? (<details className=\"niceeval-conversation-entry niceeval-conversation-entry--expandable\" open>\n <summary className=\"niceeval-conversation-entry-summary\">stderr</summary>\n <pre className=\"niceeval-conversation-io\">{command.stderr}</pre>\n </details>) : null}\n </article>);\n}\nexport function conversationText(data: ConversationContent, ctx: TextContext, locale: ReportLocale, drillDown?: string): string {\n const head = [`conversation: ${data.turns.length} round${data.turns.length === 1 ? \"\" : \"s\"}`];\n const baseCommand = data.locator !== undefined ? ctx.command(attemptPageTarget(data.locator)) : undefined;\n const command = drillDown ?? (baseCommand !== undefined ? `${baseCommand} --execution` : undefined);\n if (command)\n head.push(command);\n const lines = [head.join(\" · \")];\n for (const turn of data.turns) {\n const label = sanitizeConversationPreview(turn.label, locale);\n const verdict = turn.verdict ? ` (${turn.verdict})` : \"\";\n lines.push(` ${label}${verdict}`);\n }\n return lines.join(\"\\n\");\n}\nfunction assertCommandEvidenceContent(data: unknown): CommandEvidenceContent | null {\n if (data === null || data === undefined)\n return null;\n if (!isObject(data) || !Array.isArray(data.commands)) {\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", '\"data.commands\" must be an array');\n }\n for (const [index, command] of data.commands.entries()) {\n if (!isObject(command))\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}]\" must be an object`);\n if (typeof command.key !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].key\" must be a string`);\n if (typeof command.phase !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].phase\" must be a string`);\n if (typeof command.display !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].display\" must be a string`);\n if (typeof command.exitCode !== \"number\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].exitCode\" must be a number`);\n if (command.classification !== \"succeeded\" && command.classification !== \"observed\" && command.classification !== \"failed\") {\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].classification\" must be succeeded | observed | failed`);\n }\n if (command.durationMs !== undefined && typeof command.durationMs !== \"number\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].durationMs\" must be a number`);\n if (command.stdout !== undefined && typeof command.stdout !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].stdout\" must be a string`);\n if (command.stderr !== undefined && typeof command.stderr !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].stderr\" must be a string`);\n }\n return data as unknown as CommandEvidenceContent;\n}\nexport type CommandEvidenceProps = ValueProps<CommandEvidenceContent | null, {\n locale?: ReportLocale;\n className?: string;\n}>;\nexport const CommandEvidence = defineComponent<CommandEvidenceProps, {\n data: CommandEvidenceContent | null;\n className?: string;\n}>({\n dimensions: () => ({}),\n resolve(props) {\n return { data: props.data ?? null, className: props.className };\n },\n web({ data, className }, ctx) {\n const content = assertCommandEvidenceContent(data);\n if (content === null || content.commands.length === 0)\n return null;\n return (<section className={cx(\"niceeval-report\", \"niceeval-command-evidence\", className)}>\n <details className=\"niceeval-command-evidence-region\">\n <summary className=\"niceeval-command-evidence-summary\">\n {resolveLocalizedText({ en: `Commands · ${content.commands.length}`, \"zh-CN\": `命令证据 · ${content.commands.length}` }, ctx.locale)}\n </summary>\n <div className=\"niceeval-command-evidence-cards\">\n {content.commands.map((command) => <CommandEvidenceCard key={command.key} command={command}/>)}\n </div>\n </details>\n </section>);\n },\n text({ data }) {\n const content = assertCommandEvidenceContent(data);\n if (content === null || content.commands.length === 0)\n return \"\";\n const lines = [`commands: ${content.commands.length}`];\n for (const command of content.commands) {\n lines.push(` ${commandEvidenceTitle(command)}`);\n lines.push(` ${command.display}`);\n if (command.stdout)\n lines.push(` stdout\\n ${command.stdout.replace(/\\n/g, \"\\n \")}`);\n if (command.stderr)\n lines.push(` stderr\\n ${command.stderr.replace(/\\n/g, \"\\n \")}`);\n }\n return lines.join(\"\\n\");\n },\n});\nCommandEvidence.displayName = \"CommandEvidence\";\nexport const Conversation = defineComponent<ConversationProps, ResolvedConversationProps>({\n dimensions: () => ({}),\n resolve(props) {\n return {\n data: props.data ?? null,\n drillDown: undefined,\n locale: props.locale,\n className: props.className,\n title: props.title,\n };\n },\n web({ data, className, locale, title }, ctx) {\n const content = assertConversationContent(data);\n if (isEmptyConversation(content))\n return null;\n const loc = locale ?? ctx.locale;\n return (<div className={cx(\"niceeval-report\", \"niceeval-conversation\", className)}>\n <SessionSummary content={content!} title={title} locale={loc}/>\n {content!.turns.map((turn) => (<TurnCard key={turn.key} turn={turn} locale={loc}/>))}\n </div>);\n },\n text({ data, drillDown, locale }, ctx) {\n const content = assertConversationContent(data);\n if (isEmptyConversation(content))\n return \"\";\n return conversationText(content!, ctx, locale ?? ctx.locale, drillDown);\n },\n});\nConversation.displayName = \"Conversation\";\n"]}
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["conversation.tsx"],"names":[],"mappings":"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","sourcesContent":["// Conversation:分轮事件流(docs/feature/reports/library.md)。\n// SourceView 展开区与兜底区复用 ConversationEntries。\nimport { createElement, Fragment, type ReactElement, type ReactNode } from \"react\";\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport { attemptPageTarget } from \"./shared.ts\";\nimport { stripControl } from \"../../../assertions/display.ts\";\nimport { dataShapeError, isLocalizedText, isObject, type ValueProps, } from \"./shared.ts\";\nimport { resolveLocalizedText, type LocalizedText, type ReportLocale } from \"../../model/locale.ts\";\nimport { defineComponent, type ReportNode, type ResolveContext, type TextContext } from \"../tree.ts\";\nconst REACT_FRAGMENT = Symbol.for(\"react.fragment\");\nexport interface ConversationEntry {\n kind: string;\n preview: LocalizedText;\n detail?: ReportNode;\n /** Exact retained evidence behind the compact preview. */\n raw?: string;\n failed?: boolean;\n /** Tool lifecycle hint used by the session summary; omitted for non-call rows. */\n callPhase?: \"started\" | \"finished\";\n /** Stable provider call identity when this row belongs to a tool lifecycle. */\n callId?: string;\n /** Provider-neutral terminal outcome; omitted while the call is still open. */\n callOutcome?: \"completed\" | \"failed\" | \"rejected\" | \"cancelled\";\n}\nexport interface ConversationTurn {\n key: string;\n label: LocalizedText;\n durationMs?: number;\n verdict?: \"passed\" | \"failed\" | \"errored\" | \"skipped\";\n entries: readonly ConversationEntry[];\n}\n/** 独立生命周期命令证据卡;不属于 Conversation 的轮次或消息。 */\nexport interface CommandEvidenceItem {\n key: string;\n timingNodeId: string;\n phase: string;\n display: string;\n exitCode: number;\n classification: \"succeeded\" | \"observed\" | \"failed\";\n durationMs?: number;\n stdout?: string;\n stderr?: string;\n}\nexport interface ConversationContent {\n turns: readonly ConversationTurn[];\n /** text 面 `--execution` 下钻;数据源投影时填入。 */\n locator?: AttemptLocator;\n}\nexport interface CommandEvidenceContent {\n commands: readonly CommandEvidenceItem[];\n locator?: AttemptLocator;\n}\nexport type ConversationProps = ValueProps<ConversationContent | null, {\n locale?: ReportLocale;\n className?: string;\n title?: LocalizedText;\n}>;\ntype ResolvedConversationProps = {\n data: ConversationContent | null;\n drillDown?: string;\n locale?: ReportLocale;\n className?: string;\n title?: LocalizedText;\n};\nfunction cx(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n/**\n * Render an already-closed entry detail inside another report primitive.\n *\n * Conversation and TurnTrace deliberately share this small bridge instead of\n * asking the browser to recover evidence from an existing DOM row. The\n * caller still emits every evidence surface during SSR.\n */\nexport function renderConversationDetail(node: ReportNode): ReactNode {\n if (node === null || node === undefined || typeof node === \"boolean\")\n return null;\n if (Array.isArray(node)) {\n return node.map((child, i) => <Fragment key={i}>{renderConversationDetail(child)}</Fragment>);\n }\n if (typeof node === \"string\" || typeof node === \"number\")\n return null;\n const el = node as {\n type: unknown;\n props: globalThis.Record<string, unknown>;\n };\n if (el.type === REACT_FRAGMENT) {\n return createElement(Fragment, null, renderConversationDetail(el.props.children as ReportNode));\n }\n return createElement(el.type as never, el.props);\n}\nexport function sanitizeConversationPreview(text: LocalizedText, locale: ReportLocale, max = 140): string {\n const raw = resolveLocalizedText(text, locale);\n const oneLine = stripControl(raw).replace(/\\s+/g, \" \").trim();\n return oneLine.length > max ? `${oneLine.slice(0, max)}…` : oneLine;\n}\nfunction validateEntry(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object`;\n if (typeof value.kind !== \"string\")\n return `\"${path}.kind\" must be a string`;\n if (!isLocalizedText(value.preview))\n return `\"${path}.preview\" must be a LocalizedText`;\n if (value.failed !== undefined && typeof value.failed !== \"boolean\") {\n return `\"${path}.failed\" must be a boolean`;\n }\n if (value.raw !== undefined && typeof value.raw !== \"string\")\n return `\"${path}.raw\" must be a string`;\n if (value.callId !== undefined && typeof value.callId !== \"string\")\n return `\"${path}.callId\" must be a string`;\n if (value.callPhase !== undefined && value.callPhase !== \"started\" && value.callPhase !== \"finished\") {\n return `\"${path}.callPhase\" must be started | finished`;\n }\n if (value.callOutcome !== undefined &&\n value.callOutcome !== \"completed\" &&\n value.callOutcome !== \"failed\" &&\n value.callOutcome !== \"rejected\" &&\n value.callOutcome !== \"cancelled\") {\n return `\"${path}.callOutcome\" must be completed | failed | rejected | cancelled`;\n }\n return null;\n}\nfunction validateTurn(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object`;\n if (typeof value.key !== \"string\")\n return `\"${path}.key\" must be a string`;\n if (!isLocalizedText(value.label))\n return `\"${path}.label\" must be a LocalizedText`;\n if (value.durationMs !== undefined\n && (typeof value.durationMs !== \"number\" || !Number.isFinite(value.durationMs) || value.durationMs < 0)) {\n return `\"${path}.durationMs\" must be a non-negative number`;\n }\n if (value.verdict !== undefined &&\n value.verdict !== \"passed\" &&\n value.verdict !== \"failed\" &&\n value.verdict !== \"errored\" &&\n value.verdict !== \"skipped\") {\n return `\"${path}.verdict\" must be passed | failed | errored | skipped`;\n }\n if (!Array.isArray(value.entries))\n return `\"${path}.entries\" must be an array`;\n for (let i = 0; i < value.entries.length; i++) {\n const problem = validateEntry(value.entries[i], `${path}.entries[${i}]`);\n if (problem !== null)\n return problem;\n }\n return null;\n}\nfunction assertConversationContent(data: unknown): ConversationContent | null {\n if (data === null || data === undefined)\n return null;\n if (!isObject(data)) {\n throw dataShapeError(\"Conversation\", \"conversationData\", \"ConversationContent\", '\"data\" must be an object or null');\n }\n if (!Array.isArray(data.turns)) {\n throw dataShapeError(\"Conversation\", \"conversationData\", \"ConversationContent\", '\"data.turns\" must be an array');\n }\n for (let i = 0; i < data.turns.length; i++) {\n const problem = validateTurn(data.turns[i], `data.turns[${i}]`);\n if (problem !== null)\n throw dataShapeError(\"Conversation\", \"conversationData\", \"ConversationContent\", problem);\n }\n return data as unknown as ConversationContent;\n}\nfunction isEmptyConversation(data: ConversationContent | null): boolean {\n if (data === null)\n return true;\n return data.turns.length === 0;\n}\n// PageContext 不携带 input;下钻只来自 data.locator 的 attempt 目标命令\n// (conversationText 的 baseCommand 分支)。\nfunction EntryRow({ entry, locale }: {\n entry: ConversationEntry;\n locale: ReportLocale;\n}): ReactElement {\n const preview = sanitizeConversationPreview(entry.preview, locale);\n const head = (<>\n <span className=\"niceeval-conversation-entry-kind\" data-kind={entry.kind}>\n {entry.kind}\n </span>\n <span className=\"niceeval-conversation-entry-preview\">{preview}</span>\n </>);\n const detail = entry.detail !== undefined ? renderConversationDetail(entry.detail) : null;\n if (detail === null || detail === undefined || detail === false) {\n return (<div className={cx(\"niceeval-conversation-entry\", entry.failed && \"niceeval-conversation-entry--failed\")} data-niceeval-turn-entry role=\"button\" tabIndex={0}>{head}</div>);\n }\n return (<details className={cx(\"niceeval-conversation-entry\", \"niceeval-conversation-entry--expandable\", entry.failed && \"niceeval-conversation-entry--failed\")} data-niceeval-turn-entry>\n <summary className=\"niceeval-conversation-entry-summary\">{head}</summary>\n <div className=\"niceeval-conversation-entry-detail\">{detail}</div>\n </details>);\n}\n/** SourceView 等复用:渲染一轮内的条目列表。 */\nexport function ConversationEntries({ entries, locale, }: {\n entries: readonly ConversationEntry[];\n locale: ReportLocale;\n}): ReactElement {\n return (<div className=\"niceeval-conversation-entries\">\n {entries.map((entry, i) => (<EntryRow key={i} entry={entry} locale={locale}/>))}\n </div>);\n}\nfunction TurnCard({ turn, locale }: {\n turn: ConversationTurn;\n locale: ReportLocale;\n}): ReactElement {\n return (<article className={cx(\"niceeval-conversation-turn\", turn.verdict && `niceeval-conversation-turn--${turn.verdict}`)}>\n <header className=\"niceeval-conversation-turn-head\">\n <span className=\"niceeval-conversation-turn-label\">{resolveLocalizedText(turn.label, locale)}</span>\n {turn.durationMs !== undefined ? (<span className=\"niceeval-conversation-turn-duration\">{formatSessionDuration(turn.durationMs)}</span>) : null}\n {turn.verdict ? <span className=\"niceeval-conversation-turn-verdict\">{turn.verdict}</span> : null}\n </header>\n <ConversationEntries entries={turn.entries} locale={locale}/>\n </article>);\n}\nfunction formatSessionDuration(durationMs: number): string {\n if (durationMs < 1000)\n return `${Math.round(durationMs)}ms`;\n const seconds = Math.round(durationMs / 1000);\n if (seconds < 60)\n return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n return `${minutes}m ${seconds % 60}s`;\n}\nfunction SessionSummary({ content, title, locale, }: {\n content: ConversationContent;\n title?: LocalizedText;\n locale: ReportLocale;\n}): ReactElement {\n const durations = content.turns.flatMap((turn) => turn.durationMs === undefined ? [] : [turn.durationMs]);\n const calls = content.turns.reduce((count, turn) => count + turn.entries.filter((entry) => entry.callPhase === \"started\").length, 0);\n const duration = durations.length === 0\n ? \"—\"\n : formatSessionDuration(durations.reduce((total, value) => total + value, 0));\n return (<header className=\"niceeval-conversation-session-head\">\n <span className=\"niceeval-conversation-session-title\">\n {title === undefined ? \"Session log\" : resolveLocalizedText(title, locale)}\n </span>\n <dl className=\"niceeval-conversation-session-stats\">\n <div><dt>Duration</dt><dd>{duration}</dd></div>\n <div><dt>Turns</dt><dd>{content.turns.length}</dd></div>\n <div><dt>Calls</dt><dd>{calls}</dd></div>\n </dl>\n </header>);\n}\nfunction commandEvidenceTitle(command: CommandEvidenceItem): string {\n const title = command.classification === \"succeeded\" ? \"COMMAND\"\n : command.classification === \"failed\" ? \"FAILED COMMAND\"\n : \"NON-ZERO COMMAND · observed\";\n return `${title} · ${command.phase} · exit ${command.exitCode}${command.durationMs === undefined ? \"\" : ` · ${command.durationMs}ms`}`;\n}\nfunction CommandEvidenceCard({ command }: {\n command: CommandEvidenceItem;\n}): ReactElement {\n return (<article className={cx(\"niceeval-command-evidence-card\", `niceeval-command-evidence--${command.classification}`)}>\n <header className=\"niceeval-conversation-turn-head\">\n <span className=\"niceeval-conversation-turn-label\">\n {commandEvidenceTitle(command)}\n </span>\n </header>\n <div className=\"niceeval-command-evidence-display\">{command.display}</div>\n {command.stdout ? (<details className=\"niceeval-conversation-entry niceeval-conversation-entry--expandable\">\n <summary className=\"niceeval-conversation-entry-summary\">stdout</summary>\n <pre className=\"niceeval-conversation-io\">{command.stdout}</pre>\n </details>) : null}\n {command.stderr ? (<details className=\"niceeval-conversation-entry niceeval-conversation-entry--expandable\" open>\n <summary className=\"niceeval-conversation-entry-summary\">stderr</summary>\n <pre className=\"niceeval-conversation-io\">{command.stderr}</pre>\n </details>) : null}\n </article>);\n}\nexport function conversationText(data: ConversationContent, ctx: TextContext, locale: ReportLocale, drillDown?: string): string {\n const head = [`conversation: ${data.turns.length} round${data.turns.length === 1 ? \"\" : \"s\"}`];\n const baseCommand = data.locator !== undefined ? ctx.command(attemptPageTarget(data.locator)) : undefined;\n const command = drillDown ?? (baseCommand !== undefined ? `${baseCommand} --execution` : undefined);\n if (command)\n head.push(command);\n const lines = [head.join(\" · \")];\n for (const turn of data.turns) {\n const label = sanitizeConversationPreview(turn.label, locale);\n const verdict = turn.verdict ? ` (${turn.verdict})` : \"\";\n lines.push(` ${label}${verdict}`);\n }\n return lines.join(\"\\n\");\n}\nfunction assertCommandEvidenceContent(data: unknown): CommandEvidenceContent | null {\n if (data === null || data === undefined)\n return null;\n if (!isObject(data) || !Array.isArray(data.commands)) {\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", '\"data.commands\" must be an array');\n }\n for (const [index, command] of data.commands.entries()) {\n if (!isObject(command))\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}]\" must be an object`);\n if (typeof command.key !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].key\" must be a string`);\n if (typeof command.phase !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].phase\" must be a string`);\n if (typeof command.display !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].display\" must be a string`);\n if (typeof command.exitCode !== \"number\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].exitCode\" must be a number`);\n if (command.classification !== \"succeeded\" && command.classification !== \"observed\" && command.classification !== \"failed\") {\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].classification\" must be succeeded | observed | failed`);\n }\n if (command.durationMs !== undefined && typeof command.durationMs !== \"number\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].durationMs\" must be a number`);\n if (command.stdout !== undefined && typeof command.stdout !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].stdout\" must be a string`);\n if (command.stderr !== undefined && typeof command.stderr !== \"string\")\n throw dataShapeError(\"CommandEvidence\", \"commandEvidenceData\", \"CommandEvidenceContent\", `\"data.commands[${index}].stderr\" must be a string`);\n }\n return data as unknown as CommandEvidenceContent;\n}\nexport type CommandEvidenceProps = ValueProps<CommandEvidenceContent | null, {\n locale?: ReportLocale;\n className?: string;\n}>;\nexport const CommandEvidence = defineComponent<CommandEvidenceProps, {\n data: CommandEvidenceContent | null;\n className?: string;\n}>({\n dimensions: () => ({}),\n resolve(props) {\n return { data: props.data ?? null, className: props.className };\n },\n web({ data, className }, ctx) {\n const content = assertCommandEvidenceContent(data);\n if (content === null || content.commands.length === 0)\n return null;\n return (<section className={cx(\"niceeval-report\", \"niceeval-command-evidence\", className)}>\n <details className=\"niceeval-command-evidence-region\">\n <summary className=\"niceeval-command-evidence-summary\">\n {resolveLocalizedText({ en: `Commands · ${content.commands.length}`, \"zh-CN\": `命令证据 · ${content.commands.length}` }, ctx.locale)}\n </summary>\n <div className=\"niceeval-command-evidence-cards\">\n {content.commands.map((command) => <CommandEvidenceCard key={command.key} command={command}/>)}\n </div>\n </details>\n </section>);\n },\n text({ data }) {\n const content = assertCommandEvidenceContent(data);\n if (content === null || content.commands.length === 0)\n return \"\";\n const lines = [`commands: ${content.commands.length}`];\n for (const command of content.commands) {\n lines.push(` ${commandEvidenceTitle(command)}`);\n lines.push(` ${command.display}`);\n if (command.stdout)\n lines.push(` stdout\\n ${command.stdout.replace(/\\n/g, \"\\n \")}`);\n if (command.stderr)\n lines.push(` stderr\\n ${command.stderr.replace(/\\n/g, \"\\n \")}`);\n }\n return lines.join(\"\\n\");\n },\n});\nCommandEvidence.displayName = \"CommandEvidence\";\nexport const Conversation = defineComponent<ConversationProps, ResolvedConversationProps>({\n dimensions: () => ({}),\n resolve(props) {\n return {\n data: props.data ?? null,\n drillDown: undefined,\n locale: props.locale,\n className: props.className,\n title: props.title,\n };\n },\n web({ data, className, locale, title }, ctx) {\n const content = assertConversationContent(data);\n if (isEmptyConversation(content))\n return null;\n const loc = locale ?? ctx.locale;\n return (<div className={cx(\"niceeval-report\", \"niceeval-conversation\", className)}>\n <SessionSummary content={content!} title={title} locale={loc}/>\n {content!.turns.map((turn) => (<TurnCard key={turn.key} turn={turn} locale={loc}/>))}\n </div>);\n },\n text({ data, drillDown, locale }, ctx) {\n const content = assertConversationContent(data);\n if (isEmptyConversation(content))\n return \"\";\n return conversationText(content!, ctx, locale ?? ctx.locale, drillDown);\n },\n});\nConversation.displayName = \"Conversation\";\n"]}
@@ -14,6 +14,8 @@ export interface ConversationEntry {
14
14
  callPhase?: "started" | "finished";
15
15
  /** Stable provider call identity when this row belongs to a tool lifecycle. */
16
16
  callId?: string;
17
+ /** Provider-neutral terminal outcome; omitted while the call is still open. */
18
+ callOutcome?: "completed" | "failed" | "rejected" | "cancelled";
17
19
  }
18
20
  export interface ConversationTurn {
19
21
  key: string;
@@ -14,6 +14,8 @@ export interface ConversationEntry {
14
14
  callPhase?: "started" | "finished";
15
15
  /** Stable provider call identity when this row belongs to a tool lifecycle. */
16
16
  callId?: string;
17
+ /** Provider-neutral terminal outcome; omitted while the call is still open. */
18
+ callOutcome?: "completed" | "failed" | "rejected" | "cancelled";
17
19
  }
18
20
  export interface ConversationTurn {
19
21
  key: string;
@@ -14,6 +14,8 @@ export interface ConversationEntry {
14
14
  callPhase?: "started" | "finished";
15
15
  /** Stable provider call identity when this row belongs to a tool lifecycle. */
16
16
  callId?: string;
17
+ /** Provider-neutral terminal outcome; omitted while the call is still open. */
18
+ callOutcome?: "completed" | "failed" | "rejected" | "cancelled";
17
19
  }
18
20
  export interface ConversationTurn {
19
21
  key: string;
@@ -47,6 +47,14 @@ function callCount(events) {
47
47
  return started === 0 ? events.filter((event) => event.toolLike).length : started;
48
48
  }
49
49
  function statusFor(entry, locale) {
50
+ if (entry.callOutcome === "completed")
51
+ return text(locale, "Completed", "已完成");
52
+ if (entry.callOutcome === "failed")
53
+ return text(locale, "Failed", "失败");
54
+ if (entry.callOutcome === "rejected")
55
+ return text(locale, "Rejected", "已拒绝");
56
+ if (entry.callOutcome === "cancelled")
57
+ return text(locale, "Cancelled", "已取消");
50
58
  if (entry.failed === true)
51
59
  return text(locale, "Failed", "失败");
52
60
  if (entry.callPhase === "started")
@@ -55,8 +63,50 @@ function statusFor(entry, locale) {
55
63
  return text(locale, "Completed", "已完成");
56
64
  return text(locale, "Captured", "已捕获");
57
65
  }
66
+ function lifecycleEntriesOf(turn) {
67
+ const phasesByCallId = new Map();
68
+ for (const [entryIndex, entry] of turn.entries.entries()) {
69
+ if (entry.callId === undefined || entry.callPhase === undefined)
70
+ continue;
71
+ const phases = phasesByCallId.get(entry.callId) ?? { started: [], finished: [] };
72
+ phases[entry.callPhase].push(entryIndex);
73
+ phasesByCallId.set(entry.callId, phases);
74
+ }
75
+ const lifecycleByStartedIndex = new Map();
76
+ const pairedFinishedIndexes = new Set();
77
+ for (const phases of phasesByCallId.values()) {
78
+ // Public author data is validated structurally, not as a durable ledger. Only
79
+ // coalesce an unambiguous 1:1 lifecycle; duplicate phases remain visible.
80
+ if (phases.started.length !== 1 || phases.finished.length !== 1)
81
+ continue;
82
+ const startedIndex = phases.started[0];
83
+ const finishedIndex = phases.finished[0];
84
+ if (finishedIndex <= startedIndex)
85
+ continue;
86
+ const started = turn.entries[startedIndex];
87
+ const finished = turn.entries[finishedIndex];
88
+ const raw = [started.raw, finished.raw].filter((value) => value !== undefined).join("\n");
89
+ const details = [started.detail, finished.detail].filter((value) => value !== undefined);
90
+ lifecycleByStartedIndex.set(startedIndex, {
91
+ kind: started.kind,
92
+ preview: started.preview,
93
+ callId: started.callId,
94
+ callPhase: "finished",
95
+ ...(finished.callOutcome === undefined ? {} : { callOutcome: finished.callOutcome }),
96
+ ...(started.failed === true || finished.failed === true ? { failed: true } : {}),
97
+ ...(raw === "" ? {} : { raw }),
98
+ ...(details.length === 0 ? {} : { detail: details.length === 1 ? details[0] : details }),
99
+ });
100
+ pairedFinishedIndexes.add(finishedIndex);
101
+ }
102
+ return turn.entries.flatMap((entry, entryIndex) => {
103
+ if (pairedFinishedIndexes.has(entryIndex))
104
+ return [];
105
+ return [{ entry: lifecycleByStartedIndex.get(entryIndex) ?? entry, entryIndex }];
106
+ });
107
+ }
58
108
  function traceEventsOf(content, locale) {
59
- return content.turns.flatMap((turn, turnIndex) => turn.entries.map((entry, entryIndex) => {
109
+ return content.turns.flatMap((turn, turnIndex) => lifecycleEntriesOf(turn).map(({ entry, entryIndex }) => {
60
110
  const raw = entry.raw ?? (0, locale_ts_1.resolveLocalizedText)(entry.preview, locale);
61
111
  return {
62
112
  // Keep IDs safe for HTML data attributes without relying on selector
@@ -168,9 +218,9 @@ function TraceEventRow({ event, locale }) {
168
218
  const turnLabel = (0, locale_ts_1.resolveLocalizedText)(event.turn.label, locale);
169
219
  const duration = turnDuration(event.turn);
170
220
  const status = statusFor(event.entry, locale);
171
- return ((0, jsx_runtime_1.jsxs)("article", { className: cx("niceeval-trace-event-row", event.toolLike && "niceeval-trace-event-row--tool", event.entry.failed && "niceeval-trace-event-row--failed"), "data-niceeval-trace-event": event.id, "data-tool-row": event.toolLike ? "true" : undefined, children: [(0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-turn-rail", "aria-hidden": "true" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "niceeval-trace-event-select", "data-niceeval-trace-select": event.id, "aria-pressed": "false", "aria-expanded": "false", "aria-label": `${event.entry.kind}: ${event.summary || text(locale, "captured event", "已捕获事件")}`, children: [(0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-kind", "data-lane": event.lane, children: event.entry.kind }), (0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-summary", children: event.summary || "—" }), (0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-meta", title: duration === undefined
221
+ return ((0, jsx_runtime_1.jsxs)("article", { className: cx("niceeval-trace-event-row", event.toolLike && "niceeval-trace-event-row--tool", event.entry.failed && "niceeval-trace-event-row--failed"), "data-niceeval-trace-event": event.id, "data-tool-row": event.toolLike ? "true" : undefined, "data-call-outcome": event.entry.callOutcome, children: [(0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-turn-rail", "aria-hidden": "true" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "niceeval-trace-event-select", "data-niceeval-trace-select": event.id, "aria-pressed": "false", "aria-expanded": "false", "aria-label": `${event.entry.kind}: ${event.summary || text(locale, "captured event", "已捕获事件")}`, children: [(0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-kind", "data-lane": event.lane, children: event.entry.kind }), (0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-summary", children: event.summary || "—" }), (0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-meta", title: duration === undefined
172
222
  ? text(locale, "Turn timing not recorded", "未记录轮次时长")
173
- : `${turnLabel} · ${durationLabel(duration)}`, children: duration === undefined ? "—" : durationLabel(duration) }), (0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-status", children: status })] }), (0, jsx_runtime_1.jsx)(TraceEvidence, { event: event, locale: locale })] }));
223
+ : `${turnLabel} · ${durationLabel(duration)}`, children: duration === undefined ? "—" : durationLabel(duration) }), (0, jsx_runtime_1.jsx)("span", { className: "niceeval-trace-event-status", "data-call-outcome": event.entry.callOutcome, children: status })] }), (0, jsx_runtime_1.jsx)(TraceEvidence, { event: event, locale: locale })] }));
174
224
  }
175
225
  function TraceTurn({ turn, events, locale, }) {
176
226
  const duration = turnDuration(turn);
@@ -1 +1 @@
1
- {"version":3,"file":"turn-trace.js","sourceRoot":"","sources":["turn-trace.tsx"],"names":[],"mappings":";;;;AAIA,wCAA6C;AAC7C,wDAAuL;AACvL,qDAAgF;AA8BhF,SAAS,EAAE,CAAC,GAAG,KAAqC;IAChD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AACD,SAAS,IAAI,CAAC,MAAoB,EAAE,OAAe,EAAE,OAAe;IAChE,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAClD,CAAC;AACD,SAAS,aAAa,CAAC,UAA8B;IACjD,IAAI,UAAU,KAAK,SAAS;QACxB,OAAO,cAAc,CAAC;IAC1B,IAAI,UAAU,GAAG,IAAI;QACjB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC;AAC7F,CAAC;AACD,SAAS,YAAY,CAAC,IAAsB;IACxC,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QACpE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AACD,SAAS,OAAO,CAAC,IAAY;IACzB,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACV,OAAO,OAAO,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO;YACR,OAAO,OAAO,CAAC;QACnB;YACI,OAAO,OAAO,CAAC;IACvB,CAAC;AACL,CAAC;AACD,SAAS,UAAU,CAAC,IAAY;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,IAAI,KAAK,OAAO,CAAC;AAC5B,CAAC;AACD,SAAS,SAAS,CAAC,MAA6B;IAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACrF,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACrF,CAAC;AACD,SAAS,SAAS,CAAC,KAAwB,EAAE,MAAoB;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QACrB,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU;QAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AACD,SAAS,aAAa,CAAC,OAA4B,EAAE,MAAoB;IACrE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACrF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAA,gCAAoB,EAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO;YACH,qEAAqE;YACrE,uEAAuE;YACvE,gEAAgE;YAChE,EAAE,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE;YACnD,IAAI;YACJ,SAAS;YACT,KAAK;YACL,UAAU;YACV,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,OAAO,EAAE,IAAA,8CAA2B,EAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;YAChE,GAAG;YACH,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;SACnC,CAAC;IACN,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAkC;IAC1D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;AAChG,CAAC;AACD,SAAS,iBAAiB,CAAC,KAAkC,EAAE,MAA6B;IACxF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YACpB,SAAS;QACb,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,cAAc,IAAI,QAAQ,KAAK,SAAS;YACjD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM;YACxC,CAAC,CAAC,YAAY,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,OAAO;YACvB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;IACnD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAChH,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC;QACjE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;YACpB,YAAY,EAAE,cAAc,GAAG,aAAa,GAAG,GAAG;YAClD,aAAa,EAAE,YAAY,GAAG,aAAa,GAAG,GAAG;YACjD,YAAY,EAAE,cAAc,GAAG,aAAa,GAAG,GAAG;YAClD,aAAa,EAAE,YAAY,GAAG,aAAa,GAAG,GAAG;SACpD,CAAC,CAAC;QACH,cAAc,IAAI,YAAY,CAAC;QAC/B,cAAc,IAAI,YAAY,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,aAAa,CAAC,QAA0B,EAAE,IAAe;IAC9D,OAAO;QACH,gCAAgC,EAAE,GAAG,QAAQ,CAAC,YAAY,GAAG;QAC7D,iCAAiC,EAAE,GAAG,QAAQ,CAAC,aAAa,GAAG;QAC/D,gCAAgC,EAAE,GAAG,QAAQ,CAAC,YAAY,GAAG;QAC7D,iCAAiC,EAAE,GAAG,QAAQ,CAAC,aAAa,GAAG;QAC/D,uBAAuB,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;KACjF,CAAC;AACN,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAiB,EAAE,MAAoB;IAC/D,MAAM,SAAS,GAAG,IAAA,gCAAoB,EAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS;QACjC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,CAAC;QAC9C,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5E,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,SAAS,MAAM,MAAM,EAAE,CAAC;AAC5D,CAAC;AACD,SAAS,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAI9C;IACG,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;QACxB,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/E,OAAO,CAAC,oCAAQ,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAC,SAAS,gBAAa,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,aACvH,iCAAK,SAAS,EAAC,6BAA6B,aAC1C,iCAAM,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,GAAQ,EAC3F,iCAAK,SAAS,EAAC,gCAAgC,aAC7C,oCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,uEAAuE,wDAA2C,OAAO,EAAC,QAAQ,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,eAAe;oCAC1M,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,CAAC;oCACzD,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,uDAAuD,EAAE,gBAAgB,CAAC,aACzF,iCAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,aAAC,mCAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,MAAM,GAAE,EAAA,iCAAM,CAAC,EAAC,oBAAoB,GAAE,IAAM,EAChH,2CAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,GAAQ,EAC7C,wCAAI,aAAa,GAAK,IACf,EACT,oCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,qDAAwC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,aAC1J,iCAAM,SAAS,EAAC,8BAA8B,iBAAa,MAAM,uBAAS,EAC1E,2CAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAQ,EAC1C,wCAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAK,IACtB,EACT,oCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,qDAAwC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,KAAK,CAAC,aACxL,iCAAM,SAAS,EAAC,8BAA8B,iBAAa,MAAM,uBAAS,EAC1E,2CAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAQ,EAC1C,wCAAI,KAAK,GAAK,IACP,IACL,IACF,EACN,mCAAO,SAAS,EAAC,uBAAuB,aACtC,iCAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,aAAC,mCAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,MAAM,GAAE,EAAA,iCAAM,CAAC,EAAC,kBAAkB,GAAE,IAAM,EAC9G,iCAAM,SAAS,EAAC,gCAAgC,YAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,GAAQ,EACnG,kCAAO,IAAI,EAAC,QAAQ,sCAA4B,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAc,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,GAAG,IAC7I,IACD,CAAC,CAAC;AACf,CAAC;AACD,SAAS,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAI/C;IACG,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClH,OAAO,CAAC,qCAAS,SAAS,EAAC,yBAAyB,gBAAa,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,CAAC,gEAAqD,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,aACnM,iCAAK,SAAS,EAAC,8BAA8B,aAC3C,iCAAK,SAAS,EAAC,gCAAgC,iBAAa,MAAM,aAChE,2CAAO,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,GAAQ,EACtD,2CAAO,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC,GAAQ,EAC3D,2CAAO,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,GAAQ,IAClD,EACN,iCAAK,SAAS,EAAC,+BAA+B,aAC3C,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAM,SAAS,EAAC,+BAA+B,YAAE,IAAI,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,CAAC,GAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EACrI,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gCACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCACzC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iCAAmC,SAAS,EAAC,kCAAkC,iBAAa,MAAM,EAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAlI,YAAY,KAAK,CAAC,EAAE,EAAE,CAA+G,CAAC,CAAC;4BAC9L,CAAC,CAAC,EACC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gCACpB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCACzC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mCAAuB,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,8BAA8B,wCAAqC,KAAK,CAAC,EAAE,eAAa,KAAK,CAAC,IAAI,iBAAe,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,gBAAc,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAA/T,KAAK,CAAC,EAAE,CAA0T,CAAC,CAAC;4BAC7X,CAAC,CAAC,IACI,IACF,EACN,8BAAG,SAAS,EAAC,8BAA8B,YACxC,cAAc;oBACX,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,2HAA2H,EAAE,wCAAwC,CAAC;oBACrL,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,qFAAqF,EAAE,yBAAyB,CAAC,GAClI,IACI,CAAC,CAAC;AAChB,CAAC;AACD,SAAS,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAGrC;IACG,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,2CAAwB,EAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtG,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,CAAC,qCAAS,SAAS,EAAC,yBAAyB,kCAA+B,KAAK,CAAC,EAAE,aACzF,8CAAU,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,GAAW,EACnD,iCAAK,SAAS,EAAC,8BAA8B,aAC3C,gCAAI,SAAS,EAAC,8BAA8B,aAC1C,4CAAK,yCAAK,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAM,EAAA,yCAAK,IAAA,gCAAoB,EAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAM,IAAM,EAC3G,4CAAK,yCAAK,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAM,EAAA,yCAAK,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,GAAM,IAAM,EAC3F,4CAAK,yCAAK,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,GAAM,EAAA,yCAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAM,IAAM,EAC3J,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,4CAAK,yCAAK,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,GAAM,EAAA,yCAAK,KAAK,CAAC,KAAK,CAAC,SAAS,GAAM,IAAM,CAAC,EACvI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,4CAAK,yCAAK,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GAAM,EAAA,yCAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAM,IAAM,CAAC,IAC7H,EACL,iCAAK,SAAS,EAAC,8BAA8B,EAAC,IAAI,EAAC,SAAS,gBAAa,IAAI,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aACnH,mCAAQ,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,sCAAkC,SAAS,mBAAe,MAAM,YAC7F,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GACvB,EACT,mCAAQ,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,sCAAkC,KAAK,mBAAe,OAAO,YAC1F,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GACnB,IACL,EACN,qCAAS,SAAS,EAAC,+BAA+B,wCAAoC,SAAS,EAAC,IAAI,EAAC,UAAU,gBAAa,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAc,MAAM,aAC3K,yCAAK,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAM,EACvC,MAAM,KAAK,IAAI;gCACd,CAAC,CAAC,gCAAK,SAAS,EAAC,6BAA6B,YAAE,KAAK,CAAC,GAAG,GAAO;gCAChE,CAAC,CAAC,gCAAK,SAAS,EAAC,gCAAgC,YAAE,MAAM,GAAO,IAC1D,EACV,qCAAS,SAAS,EAAC,+BAA+B,wCAAoC,KAAK,EAAC,IAAI,EAAC,UAAU,gBAAa,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAc,OAAO,aACpK,yCAAK,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAM,EACpC,gCAAK,SAAS,EAAC,6BAA6B,YAAE,KAAK,CAAC,GAAG,GAAO,IACtD,IACN,IACE,CAAC,CAAC;AAChB,CAAC;AACD,SAAS,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAGrC;IACG,MAAM,SAAS,GAAG,IAAA,gCAAoB,EAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,qCAAS,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,KAAK,CAAC,QAAQ,IAAI,gCAAgC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,kCAAkC,CAAC,+BAA6B,KAAK,CAAC,EAAE,mBAAiB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,aAC/P,iCAAM,SAAS,EAAC,gCAAgC,iBAAa,MAAM,GAAE,EACrE,oCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,6BAA6B,gCAA6B,KAAK,CAAC,EAAE,kBAAe,OAAO,mBAAe,OAAO,gBAAa,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,aAC3O,iCAAM,SAAS,EAAC,2BAA2B,eAAY,KAAK,CAAC,IAAI,YAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAQ,EAC5F,iCAAM,SAAS,EAAC,8BAA8B,YAAE,KAAK,CAAC,OAAO,IAAI,GAAG,GAAQ,EAC5E,iCAAM,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,QAAQ,KAAK,SAAS;4BACrE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,0BAA0B,EAAE,SAAS,CAAC;4BACrD,CAAC,CAAC,GAAG,SAAS,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE,YAC9C,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAClD,EACP,iCAAM,SAAS,EAAC,6BAA6B,YAAE,MAAM,GAAQ,IACtD,EACT,uBAAC,aAAa,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,IACtC,CAAC,CAAC;AAChB,CAAC;AACD,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAIxC;IACG,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,CAAC,qCAAS,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,IAAI,wBAAwB,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,IAAI,oCAAoC,CAAC,8BAA4B,MAAM,aAC7L,mCAAQ,SAAS,EAAC,0DAA0D,YAC1E,oCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,4BAA4B,qCAAkC,MAAM,mBAAgB,MAAM,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,aACrK,iCAAM,SAAS,EAAC,6BAA6B,iBAAa,MAAM,uBAAS,EACzE,iCAAM,SAAS,EAAC,2BAA2B,YAAE,IAAA,gCAAoB,EAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAQ,EAC7F,kCAAM,SAAS,EAAC,2BAA2B,aACxC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC/F,6CAAO,MAAM,CAAC,MAAM,OAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAQ,EAC1D,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,6CAAO,KAAK,OAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAQ,CAAC,CAAC,CAAC,IAAI,IACjE,EACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAM,SAAS,EAAC,6BAA6B,YAAE,IAAI,CAAC,OAAO,GAAQ,CAAC,CAAC,CAAC,IAAI,IACnF,GACF,EACT,gCAAK,SAAS,EAAC,4BAA4B,YACxC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,8BAAG,SAAS,EAAC,2BAA2B,YAAE,IAAI,CAAC,MAAM,EAAE,mCAAmC,EAAE,YAAY,CAAC,GAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAC,aAAa,IAAgB,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAtC,KAAK,CAAC,EAAE,CAAiC,CAAC,GAC1N,IACE,CAAC,CAAC;AAChB,CAAC;AACY,QAAA,SAAS,GAAG,IAAA,yBAAe,EAAyC;IAC7E,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK;QACT,OAAO;YACH,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC7B,CAAC;IACN,CAAC;IACD,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG;QAChC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACxC,OAAO,IAAI,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,OAAO,CAAC,qCAAS,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,SAAS,CAAC,mEAAuD,UAAU,aACpJ,uBAAC,YAAY,IAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,EAC3D,uBAAC,aAAa,IAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,EAC5D,gCAAK,SAAS,EAAC,uBAAuB,gDACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,uBAAC,SAAS,IAAgB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAlG,IAAI,CAAC,GAAG,CAA6F,CAAC,CAAC,GACzJ,IACE,CAAC,CAAC;IACd,CAAC;IACD,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG;QACtB,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAC3C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;CACJ,CAAC,CAAC;AACH,iBAAS,CAAC,WAAW,GAAG,WAAW,CAAC","sourcesContent":["// TurnTrace: compact, server-rendered trajectory ledger. The browser only\n// filters, folds, selects, and switches pre-rendered inline evidence tabs; every\n// event and its captured evidence is present in the static report body.\nimport type { CSSProperties, ReactElement } from \"react\";\nimport { defineComponent } from \"../tree.ts\";\nimport { conversationText, renderConversationDetail, sanitizeConversationPreview, type ConversationContent, type ConversationEntry, type ConversationTurn, } from \"./conversation.tsx\";\nimport { resolveLocalizedText, type ReportLocale } from \"../../model/locale.ts\";\nimport type { ValueProps } from \"./shared.ts\";\nexport type TurnTraceProps = ValueProps<ConversationContent | null, {\n locale?: ReportLocale;\n className?: string;\n}>;\ntype ResolvedTurnTraceProps = {\n data: ConversationContent | null;\n locale?: ReportLocale;\n className?: string;\n};\ntype TraceLane = \"input\" | \"model\" | \"tools\";\ntype TraceEvent = {\n readonly id: string;\n readonly turn: ConversationTurn;\n readonly turnIndex: number;\n readonly entry: ConversationEntry;\n readonly entryIndex: number;\n readonly lane: TraceLane;\n readonly summary: string;\n readonly raw: string;\n readonly toolLike: boolean;\n};\ntype TimelinePosition = {\n readonly sequenceLeft: number;\n readonly sequenceWidth: number;\n readonly durationLeft: number;\n readonly durationWidth: number;\n};\ntype TraceStyle = CSSProperties & Record<`--niceeval-trace-${string}`, string>;\nfunction cx(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\nfunction text(locale: ReportLocale, english: string, chinese: string): string {\n return locale === \"zh-CN\" ? chinese : english;\n}\nfunction durationLabel(durationMs: number | undefined): string {\n if (durationMs === undefined)\n return \"Not recorded\";\n if (durationMs < 1000)\n return `${Math.round(durationMs)} ms`;\n const seconds = Math.round(durationMs / 1000);\n return seconds < 60 ? `${seconds} s` : `${Math.floor(seconds / 60)} m ${seconds % 60} s`;\n}\nfunction turnDuration(turn: ConversationTurn): number | undefined {\n return turn.durationMs !== undefined && Number.isFinite(turn.durationMs)\n ? Math.max(0, turn.durationMs)\n : undefined;\n}\nfunction laneFor(kind: string): TraceLane {\n switch (kind.toLowerCase()) {\n case \"user\":\n case \"input\":\n case \"context\":\n return \"input\";\n case \"tool\":\n case \"subagent\":\n case \"skill\":\n return \"tools\";\n default:\n return \"model\";\n }\n}\nfunction isToolLike(kind: string): boolean {\n const lane = laneFor(kind);\n return lane === \"tools\";\n}\nfunction callCount(events: readonly TraceEvent[]): number {\n const started = events.filter((event) => event.entry.callPhase === \"started\").length;\n return started === 0 ? events.filter((event) => event.toolLike).length : started;\n}\nfunction statusFor(entry: ConversationEntry, locale: ReportLocale): string {\n if (entry.failed === true)\n return text(locale, \"Failed\", \"失败\");\n if (entry.callPhase === \"started\")\n return text(locale, \"Started\", \"已开始\");\n if (entry.callPhase === \"finished\")\n return text(locale, \"Completed\", \"已完成\");\n return text(locale, \"Captured\", \"已捕获\");\n}\nfunction traceEventsOf(content: ConversationContent, locale: ReportLocale): readonly TraceEvent[] {\n return content.turns.flatMap((turn, turnIndex) => turn.entries.map((entry, entryIndex) => {\n const raw = entry.raw ?? resolveLocalizedText(entry.preview, locale);\n return {\n // Keep IDs safe for HTML data attributes without relying on selector\n // escaping in the enhancement runtime. `:` separates the encoded turn\n // identity from the local ordinal and remains unambiguous here.\n id: `${encodeURIComponent(turn.key)}:${entryIndex}`,\n turn,\n turnIndex,\n entry,\n entryIndex,\n lane: laneFor(entry.kind),\n summary: sanitizeConversationPreview(entry.preview, locale, 180),\n raw,\n toolLike: isToolLike(entry.kind),\n };\n }));\n}\nfunction completeTurnTiming(turns: readonly ConversationTurn[]): boolean {\n return turns.every((turn) => turn.entries.length === 0 || turnDuration(turn) !== undefined);\n}\nfunction timelinePositions(turns: readonly ConversationTurn[], events: readonly TraceEvent[]): ReadonlyMap<string, TimelinePosition> {\n const positions = new Map<string, TimelinePosition>();\n if (events.length === 0)\n return positions;\n const completeTiming = completeTurnTiming(turns);\n const sequenceUnit = 1;\n const durationUnits = new Map<string, number>();\n for (const turn of turns) {\n const entries = events.filter((event) => event.turn.key === turn.key);\n if (entries.length === 0)\n continue;\n const duration = turnDuration(turn);\n const unit = completeTiming && duration !== undefined\n ? Math.max(1, duration) / entries.length\n : sequenceUnit;\n for (const event of entries)\n durationUnits.set(event.id, unit);\n }\n const sequenceTotal = events.length * sequenceUnit;\n const durationTotal = events.reduce((total, event) => total + (durationUnits.get(event.id) ?? sequenceUnit), 0);\n let sequenceOffset = 0;\n let durationOffset = 0;\n for (const event of events) {\n const durationUnit = durationUnits.get(event.id) ?? sequenceUnit;\n positions.set(event.id, {\n sequenceLeft: sequenceOffset / sequenceTotal * 100,\n sequenceWidth: sequenceUnit / sequenceTotal * 100,\n durationLeft: durationOffset / durationTotal * 100,\n durationWidth: durationUnit / durationTotal * 100,\n });\n sequenceOffset += sequenceUnit;\n durationOffset += durationUnit;\n }\n return positions;\n}\nfunction timelineStyle(position: TimelinePosition, lane: TraceLane): TraceStyle {\n return {\n \"--niceeval-trace-sequence-left\": `${position.sequenceLeft}%`,\n \"--niceeval-trace-sequence-width\": `${position.sequenceWidth}%`,\n \"--niceeval-trace-duration-left\": `${position.durationLeft}%`,\n \"--niceeval-trace-duration-width\": `${position.durationWidth}%`,\n \"--niceeval-trace-lane\": lane === \"input\" ? \"0\" : lane === \"model\" ? \"1\" : \"2\",\n };\n}\nfunction timelineEventLabel(event: TraceEvent, locale: ReportLocale): string {\n const turnLabel = resolveLocalizedText(event.turn.label, locale);\n const duration = turnDuration(event.turn);\n const timing = duration === undefined\n ? text(locale, \"timing not recorded\", \"未记录时长\")\n : `${durationLabel(duration)} ${text(locale, \"turn duration\", \"轮次时长\")}`;\n return `${event.entry.kind} · ${turnLabel} · ${timing}`;\n}\nfunction TraceToolbar({ content, events, locale, }: {\n content: ConversationContent;\n events: readonly TraceEvent[];\n locale: ReportLocale;\n}): ReactElement {\n const durations = content.turns.flatMap((turn) => {\n const duration = turnDuration(turn);\n return duration === undefined ? [] : [duration];\n });\n const totalDuration = durations.length === 0\n ? text(locale, \"—\", \"—\")\n : durationLabel(durations.reduce((total, duration) => total + duration, 0));\n const calls = callCount(events);\n const timingAvailable = completeTurnTiming(content.turns) && events.length > 0;\n return (<header className=\"niceeval-trace-toolbar\" role=\"toolbar\" aria-label={text(locale, \"Trajectory controls\", \"轨迹控制\")}>\n <div className=\"niceeval-trace-toolbar-main\">\n <span className=\"niceeval-trace-toolbar-title\">{text(locale, \"Session log\", \"会话日志\")}</span>\n <div className=\"niceeval-trace-toolbar-actions\">\n <button type=\"button\" className=\"niceeval-trace-toolbar-button niceeval-trace-toolbar-button--duration\" data-niceeval-trace-duration aria-pressed=\"false\" disabled={!timingAvailable} title={timingAvailable\n ? text(locale, \"Use turn-duration projection\", \"按轮次时长投影\")\n : text(locale, \"Turn timing is incomplete; sequence stays equal-width\", \"轮次时长不完整;保持等宽顺序\")}>\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"5.25\"/><path d=\"M8 4.75V8l2.25 1.5\"/></svg>\n <span>{text(locale, \"Duration\", \"时长\")}</span>\n <b>{totalDuration}</b>\n </button>\n <button type=\"button\" className=\"niceeval-trace-toolbar-button\" data-niceeval-trace-turns aria-pressed=\"false\" title={text(locale, \"Collapse turns\", \"折叠轮次\")}>\n <span className=\"niceeval-trace-toolbar-glyph\" aria-hidden=\"true\">⊟</span>\n <span>{text(locale, \"Turns\", \"轮次\")}</span>\n <b>{content.turns.length}</b>\n </button>\n <button type=\"button\" className=\"niceeval-trace-toolbar-button\" data-niceeval-trace-calls aria-pressed=\"false\" title={text(locale, \"Collapse tool calls\", \"折叠工具调用\")} disabled={calls === 0}>\n <span className=\"niceeval-trace-toolbar-glyph\" aria-hidden=\"true\">⊟</span>\n <span>{text(locale, \"Calls\", \"调用\")}</span>\n <b>{calls}</b>\n </button>\n </div>\n </div>\n <label className=\"niceeval-trace-search\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><circle cx=\"7\" cy=\"7\" r=\"4.25\"/><path d=\"m10.25 10.25 3 3\"/></svg>\n <span className=\"niceeval-trace-visually-hidden\">{text(locale, \"Search trajectory\", \"搜索轨迹\")}</span>\n <input type=\"search\" data-niceeval-trace-search placeholder={text(locale, \"Search\", \"搜索\")} aria-label={text(locale, \"Search trajectory\", \"搜索轨迹\")}/>\n </label>\n </header>);\n}\nfunction TraceTimeline({ content, events, locale, }: {\n content: ConversationContent;\n events: readonly TraceEvent[];\n locale: ReportLocale;\n}): ReactElement {\n const positions = timelinePositions(content.turns, events);\n const completeTiming = completeTurnTiming(content.turns);\n const boundaries = events.filter((event, index) => index === 0 || events[index - 1]?.turn.key !== event.turn.key);\n return (<section className=\"niceeval-trace-timeline\" aria-label={text(locale, \"Trajectory timeline\", \"轨迹时间线\")} data-niceeval-trace-timeline data-timing-complete={completeTiming ? \"true\" : undefined}>\n <div className=\"niceeval-trace-timeline-plot\">\n <div className=\"niceeval-trace-timeline-labels\" aria-hidden=\"true\">\n <span>{text(locale, \"Input / User\", \"输入 / 用户\")}</span>\n <span>{text(locale, \"Model / Assistant\", \"模型 / 助手\")}</span>\n <span>{text(locale, \"Tools / Tool\", \"工具 / 工具\")}</span>\n </div>\n <div className=\"niceeval-trace-timeline-track\">\n {events.length === 0 ? (<span className=\"niceeval-trace-timeline-empty\">{text(locale, \"No captured events\", \"没有已捕获事件\")}</span>) : null}\n {boundaries.map((event) => {\n const position = positions.get(event.id);\n return position === undefined ? null : (<span key={`boundary-${event.id}`} className=\"niceeval-trace-timeline-boundary\" aria-hidden=\"true\" style={timelineStyle(position, event.lane)}/>);\n })}\n {events.map((event) => {\n const position = positions.get(event.id);\n return position === undefined ? null : (<button key={event.id} type=\"button\" className=\"niceeval-trace-timeline-span\" data-niceeval-trace-timeline-event={event.id} data-lane={event.lane} data-failed={event.entry.failed ? \"true\" : undefined} aria-label={timelineEventLabel(event, locale)} title={timelineEventLabel(event, locale)} style={timelineStyle(position, event.lane)}/>);\n })}\n </div>\n </div>\n <p className=\"niceeval-trace-timeline-note\">\n {completeTiming\n ? text(locale, \"Duration projects captured turn durations; without per-event timestamps, events remain evenly sequenced within each turn.\", \"时长模式投影已捕获的轮次时长;没有逐事件时间戳时,事件在轮次内保持等宽顺序。\")\n : text(locale, \"Per-event timing was not captured, so the timeline uses equal-width sequence spans.\", \"未捕获逐事件时长,因此时间线使用等宽顺序跨度。\")}\n </p>\n </section>);\n}\nfunction TraceEvidence({ event, locale }: {\n event: TraceEvent;\n locale: ReportLocale;\n}): ReactElement {\n const detail = event.entry.detail === undefined ? null : renderConversationDetail(event.entry.detail);\n const duration = turnDuration(event.turn);\n return (<details className=\"niceeval-trace-evidence\" data-niceeval-trace-evidence={event.id}>\n <summary>{text(locale, \"Evidence\", \"证据\")}</summary>\n <div className=\"niceeval-trace-evidence-body\">\n <dl className=\"niceeval-trace-evidence-meta\">\n <div><dt>{text(locale, \"Source\", \"来源\")}</dt><dd>{resolveLocalizedText(event.turn.label, locale)}</dd></div>\n <div><dt>{text(locale, \"Status\", \"状态\")}</dt><dd>{statusFor(event.entry, locale)}</dd></div>\n <div><dt>{text(locale, \"Total duration\", \"总时长\")}</dt><dd>{duration === undefined ? text(locale, \"Not recorded\", \"未记录\") : durationLabel(duration)}</dd></div>\n {event.entry.callPhase === undefined ? null : (<div><dt>{text(locale, \"Call phase\", \"调用阶段\")}</dt><dd>{event.entry.callPhase}</dd></div>)}\n {event.entry.callId === undefined ? null : (<div><dt>{text(locale, \"Call ID\", \"调用 ID\")}</dt><dd>{event.entry.callId}</dd></div>)}\n </dl>\n <div className=\"niceeval-trace-evidence-tabs\" role=\"tablist\" aria-label={text(locale, \"Record detail tabs\", \"记录详情标签\")}>\n <button type=\"button\" role=\"tab\" data-niceeval-trace-evidence-tab=\"preview\" aria-selected=\"true\">\n {text(locale, \"Preview\", \"预览\")}\n </button>\n <button type=\"button\" role=\"tab\" data-niceeval-trace-evidence-tab=\"raw\" aria-selected=\"false\">\n {text(locale, \"Raw\", \"原始\")}\n </button>\n </div>\n <section className=\"niceeval-trace-evidence-panel\" data-niceeval-trace-evidence-panel=\"preview\" role=\"tabpanel\" aria-label={text(locale, \"Preview\", \"预览\")} data-active=\"true\">\n <h4>{text(locale, \"Preview\", \"预览\")}</h4>\n {detail === null\n ? <pre className=\"niceeval-trace-evidence-raw\">{event.raw}</pre>\n : <div className=\"niceeval-trace-evidence-detail\">{detail}</div>}\n </section>\n <section className=\"niceeval-trace-evidence-panel\" data-niceeval-trace-evidence-panel=\"raw\" role=\"tabpanel\" aria-label={text(locale, \"Raw\", \"原始\")} data-active=\"false\">\n <h4>{text(locale, \"Raw\", \"原始\")}</h4>\n <pre className=\"niceeval-trace-evidence-raw\">{event.raw}</pre>\n </section>\n </div>\n </details>);\n}\nfunction TraceEventRow({ event, locale }: {\n event: TraceEvent;\n locale: ReportLocale;\n}): ReactElement {\n const turnLabel = resolveLocalizedText(event.turn.label, locale);\n const duration = turnDuration(event.turn);\n const status = statusFor(event.entry, locale);\n return (<article className={cx(\"niceeval-trace-event-row\", event.toolLike && \"niceeval-trace-event-row--tool\", event.entry.failed && \"niceeval-trace-event-row--failed\")} data-niceeval-trace-event={event.id} data-tool-row={event.toolLike ? \"true\" : undefined}>\n <span className=\"niceeval-trace-event-turn-rail\" aria-hidden=\"true\"/>\n <button type=\"button\" className=\"niceeval-trace-event-select\" data-niceeval-trace-select={event.id} aria-pressed=\"false\" aria-expanded=\"false\" aria-label={`${event.entry.kind}: ${event.summary || text(locale, \"captured event\", \"已捕获事件\")}`}>\n <span className=\"niceeval-trace-event-kind\" data-lane={event.lane}>{event.entry.kind}</span>\n <span className=\"niceeval-trace-event-summary\">{event.summary || \"—\"}</span>\n <span className=\"niceeval-trace-event-meta\" title={duration === undefined\n ? text(locale, \"Turn timing not recorded\", \"未记录轮次时长\")\n : `${turnLabel} · ${durationLabel(duration)}`}>\n {duration === undefined ? \"—\" : durationLabel(duration)}\n </span>\n <span className=\"niceeval-trace-event-status\">{status}</span>\n </button>\n <TraceEvidence event={event} locale={locale}/>\n </article>);\n}\nfunction TraceTurn({ turn, events, locale, }: {\n turn: ConversationTurn;\n events: readonly TraceEvent[];\n locale: ReportLocale;\n}): ReactElement {\n const duration = turnDuration(turn);\n const calls = callCount(events);\n const failed = events.some((event) => event.entry.failed === true);\n const turnId = encodeURIComponent(turn.key);\n return (<section className={cx(\"niceeval-trace-turn\", turn.verdict && `niceeval-trace-turn--${turn.verdict}`, failed && \"niceeval-trace-turn--failed-events\")} data-niceeval-trace-turn={turnId}>\n <header className=\"niceeval-trace-turn-head niceeval-conversation-turn-head\">\n <button type=\"button\" className=\"niceeval-trace-turn-toggle\" data-niceeval-trace-turn-toggle={turnId} aria-expanded=\"true\" title={text(locale, \"Collapse turn\", \"折叠轮次\")}>\n <span className=\"niceeval-trace-turn-chevron\" aria-hidden=\"true\">⌄</span>\n <span className=\"niceeval-trace-turn-label\">{resolveLocalizedText(turn.label, locale)}</span>\n <span className=\"niceeval-trace-turn-facts\">\n {duration === undefined ? text(locale, \"timing unavailable\", \"时长不可用\") : durationLabel(duration)}\n <span>{events.length} {text(locale, \"events\", \"事件\")}</span>\n {calls > 0 ? <span>{calls} {text(locale, \"calls\", \"调用\")}</span> : null}\n </span>\n {turn.verdict ? <span className=\"niceeval-trace-turn-verdict\">{turn.verdict}</span> : null}\n </button>\n </header>\n <div className=\"niceeval-trace-turn-events\">\n {events.length === 0 ? (<p className=\"niceeval-trace-empty-turn\">{text(locale, \"No events captured for this turn.\", \"此轮没有已捕获事件。\")}</p>) : events.map((event) => <TraceEventRow key={event.id} event={event} locale={locale}/>)}\n </div>\n </section>);\n}\nexport const TurnTrace = defineComponent<TurnTraceProps, ResolvedTurnTraceProps>({\n dimensions: () => ({}),\n resolve(props) {\n return {\n data: props.data ?? null,\n locale: props.locale,\n className: props.className,\n };\n },\n web({ data, locale, className }, ctx) {\n if (data === null || data.turns.length === 0)\n return null;\n const loc = locale ?? ctx.locale;\n const events = traceEventsOf(data, loc);\n return (<section className={cx(\"niceeval-report\", \"niceeval-turn-trace\", className)} data-niceeval-turn-trace data-niceeval-duration-mode=\"sequence\">\n <TraceToolbar content={data} events={events} locale={loc}/>\n <TraceTimeline content={data} events={events} locale={loc}/>\n <div className=\"niceeval-trace-ledger\" data-niceeval-trace-ledger>\n {data.turns.map((turn, turnIndex) => (<TraceTurn key={turn.key} turn={turn} events={events.filter((event) => event.turnIndex === turnIndex)} locale={loc}/>))}\n </div>\n </section>);\n },\n text({ data, locale }, ctx) {\n return data === null || data.turns.length === 0\n ? \"\"\n : conversationText(data, ctx, locale ?? ctx.locale);\n },\n});\nTurnTrace.displayName = \"TurnTrace\";\n"]}
1
+ {"version":3,"file":"turn-trace.js","sourceRoot":"","sources":["turn-trace.tsx"],"names":[],"mappings":"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","sourcesContent":["// TurnTrace: compact, server-rendered trajectory ledger. The browser only\n// filters, folds, selects, and switches pre-rendered inline evidence tabs. Tool\n// start/result events remain separate in Conversation but render as one lifecycle\n// row here, with both phases' evidence present in the static report body.\nimport type { CSSProperties, ReactElement } from \"react\";\nimport { defineComponent } from \"../tree.ts\";\nimport { conversationText, renderConversationDetail, sanitizeConversationPreview, type ConversationContent, type ConversationEntry, type ConversationTurn, } from \"./conversation.tsx\";\nimport { resolveLocalizedText, type ReportLocale } from \"../../model/locale.ts\";\nimport type { ValueProps } from \"./shared.ts\";\nexport type TurnTraceProps = ValueProps<ConversationContent | null, {\n locale?: ReportLocale;\n className?: string;\n}>;\ntype ResolvedTurnTraceProps = {\n data: ConversationContent | null;\n locale?: ReportLocale;\n className?: string;\n};\ntype TraceLane = \"input\" | \"model\" | \"tools\";\ntype TraceEvent = {\n readonly id: string;\n readonly turn: ConversationTurn;\n readonly turnIndex: number;\n readonly entry: ConversationEntry;\n readonly entryIndex: number;\n readonly lane: TraceLane;\n readonly summary: string;\n readonly raw: string;\n readonly toolLike: boolean;\n};\ntype TimelinePosition = {\n readonly sequenceLeft: number;\n readonly sequenceWidth: number;\n readonly durationLeft: number;\n readonly durationWidth: number;\n};\ntype TraceStyle = CSSProperties & Record<`--niceeval-trace-${string}`, string>;\nfunction cx(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\nfunction text(locale: ReportLocale, english: string, chinese: string): string {\n return locale === \"zh-CN\" ? chinese : english;\n}\nfunction durationLabel(durationMs: number | undefined): string {\n if (durationMs === undefined)\n return \"Not recorded\";\n if (durationMs < 1000)\n return `${Math.round(durationMs)} ms`;\n const seconds = Math.round(durationMs / 1000);\n return seconds < 60 ? `${seconds} s` : `${Math.floor(seconds / 60)} m ${seconds % 60} s`;\n}\nfunction turnDuration(turn: ConversationTurn): number | undefined {\n return turn.durationMs !== undefined && Number.isFinite(turn.durationMs)\n ? Math.max(0, turn.durationMs)\n : undefined;\n}\nfunction laneFor(kind: string): TraceLane {\n switch (kind.toLowerCase()) {\n case \"user\":\n case \"input\":\n case \"context\":\n return \"input\";\n case \"tool\":\n case \"subagent\":\n case \"skill\":\n return \"tools\";\n default:\n return \"model\";\n }\n}\nfunction isToolLike(kind: string): boolean {\n const lane = laneFor(kind);\n return lane === \"tools\";\n}\nfunction callCount(events: readonly TraceEvent[]): number {\n const started = events.filter((event) => event.entry.callPhase === \"started\").length;\n return started === 0 ? events.filter((event) => event.toolLike).length : started;\n}\nfunction statusFor(entry: ConversationEntry, locale: ReportLocale): string {\n if (entry.callOutcome === \"completed\")\n return text(locale, \"Completed\", \"已完成\");\n if (entry.callOutcome === \"failed\")\n return text(locale, \"Failed\", \"失败\");\n if (entry.callOutcome === \"rejected\")\n return text(locale, \"Rejected\", \"已拒绝\");\n if (entry.callOutcome === \"cancelled\")\n return text(locale, \"Cancelled\", \"已取消\");\n if (entry.failed === true)\n return text(locale, \"Failed\", \"失败\");\n if (entry.callPhase === \"started\")\n return text(locale, \"Started\", \"已开始\");\n if (entry.callPhase === \"finished\")\n return text(locale, \"Completed\", \"已完成\");\n return text(locale, \"Captured\", \"已捕获\");\n}\nfunction lifecycleEntriesOf(turn: ConversationTurn): readonly {\n readonly entry: ConversationEntry;\n readonly entryIndex: number;\n}[] {\n const phasesByCallId = new Map<string, {\n started: number[];\n finished: number[];\n }>();\n for (const [entryIndex, entry] of turn.entries.entries()) {\n if (entry.callId === undefined || entry.callPhase === undefined)\n continue;\n const phases = phasesByCallId.get(entry.callId) ?? { started: [], finished: [] };\n phases[entry.callPhase].push(entryIndex);\n phasesByCallId.set(entry.callId, phases);\n }\n const lifecycleByStartedIndex = new Map<number, ConversationEntry>();\n const pairedFinishedIndexes = new Set<number>();\n for (const phases of phasesByCallId.values()) {\n // Public author data is validated structurally, not as a durable ledger. Only\n // coalesce an unambiguous 1:1 lifecycle; duplicate phases remain visible.\n if (phases.started.length !== 1 || phases.finished.length !== 1)\n continue;\n const startedIndex = phases.started[0]!;\n const finishedIndex = phases.finished[0]!;\n if (finishedIndex <= startedIndex)\n continue;\n const started = turn.entries[startedIndex]!;\n const finished = turn.entries[finishedIndex]!;\n const raw = [started.raw, finished.raw].filter((value): value is string => value !== undefined).join(\"\\n\");\n const details = [started.detail, finished.detail].filter((value) => value !== undefined);\n lifecycleByStartedIndex.set(startedIndex, {\n kind: started.kind,\n preview: started.preview,\n callId: started.callId,\n callPhase: \"finished\",\n ...(finished.callOutcome === undefined ? {} : { callOutcome: finished.callOutcome }),\n ...(started.failed === true || finished.failed === true ? { failed: true } : {}),\n ...(raw === \"\" ? {} : { raw }),\n ...(details.length === 0 ? {} : { detail: details.length === 1 ? details[0] : details }),\n });\n pairedFinishedIndexes.add(finishedIndex);\n }\n return turn.entries.flatMap((entry, entryIndex) => {\n if (pairedFinishedIndexes.has(entryIndex))\n return [];\n return [{ entry: lifecycleByStartedIndex.get(entryIndex) ?? entry, entryIndex }];\n });\n}\nfunction traceEventsOf(content: ConversationContent, locale: ReportLocale): readonly TraceEvent[] {\n return content.turns.flatMap((turn, turnIndex) => lifecycleEntriesOf(turn).map(({ entry, entryIndex }) => {\n const raw = entry.raw ?? resolveLocalizedText(entry.preview, locale);\n return {\n // Keep IDs safe for HTML data attributes without relying on selector\n // escaping in the enhancement runtime. `:` separates the encoded turn\n // identity from the local ordinal and remains unambiguous here.\n id: `${encodeURIComponent(turn.key)}:${entryIndex}`,\n turn,\n turnIndex,\n entry,\n entryIndex,\n lane: laneFor(entry.kind),\n summary: sanitizeConversationPreview(entry.preview, locale, 180),\n raw,\n toolLike: isToolLike(entry.kind),\n };\n }));\n}\nfunction completeTurnTiming(turns: readonly ConversationTurn[]): boolean {\n return turns.every((turn) => turn.entries.length === 0 || turnDuration(turn) !== undefined);\n}\nfunction timelinePositions(turns: readonly ConversationTurn[], events: readonly TraceEvent[]): ReadonlyMap<string, TimelinePosition> {\n const positions = new Map<string, TimelinePosition>();\n if (events.length === 0)\n return positions;\n const completeTiming = completeTurnTiming(turns);\n const sequenceUnit = 1;\n const durationUnits = new Map<string, number>();\n for (const turn of turns) {\n const entries = events.filter((event) => event.turn.key === turn.key);\n if (entries.length === 0)\n continue;\n const duration = turnDuration(turn);\n const unit = completeTiming && duration !== undefined\n ? Math.max(1, duration) / entries.length\n : sequenceUnit;\n for (const event of entries)\n durationUnits.set(event.id, unit);\n }\n const sequenceTotal = events.length * sequenceUnit;\n const durationTotal = events.reduce((total, event) => total + (durationUnits.get(event.id) ?? sequenceUnit), 0);\n let sequenceOffset = 0;\n let durationOffset = 0;\n for (const event of events) {\n const durationUnit = durationUnits.get(event.id) ?? sequenceUnit;\n positions.set(event.id, {\n sequenceLeft: sequenceOffset / sequenceTotal * 100,\n sequenceWidth: sequenceUnit / sequenceTotal * 100,\n durationLeft: durationOffset / durationTotal * 100,\n durationWidth: durationUnit / durationTotal * 100,\n });\n sequenceOffset += sequenceUnit;\n durationOffset += durationUnit;\n }\n return positions;\n}\nfunction timelineStyle(position: TimelinePosition, lane: TraceLane): TraceStyle {\n return {\n \"--niceeval-trace-sequence-left\": `${position.sequenceLeft}%`,\n \"--niceeval-trace-sequence-width\": `${position.sequenceWidth}%`,\n \"--niceeval-trace-duration-left\": `${position.durationLeft}%`,\n \"--niceeval-trace-duration-width\": `${position.durationWidth}%`,\n \"--niceeval-trace-lane\": lane === \"input\" ? \"0\" : lane === \"model\" ? \"1\" : \"2\",\n };\n}\nfunction timelineEventLabel(event: TraceEvent, locale: ReportLocale): string {\n const turnLabel = resolveLocalizedText(event.turn.label, locale);\n const duration = turnDuration(event.turn);\n const timing = duration === undefined\n ? text(locale, \"timing not recorded\", \"未记录时长\")\n : `${durationLabel(duration)} ${text(locale, \"turn duration\", \"轮次时长\")}`;\n return `${event.entry.kind} · ${turnLabel} · ${timing}`;\n}\nfunction TraceToolbar({ content, events, locale, }: {\n content: ConversationContent;\n events: readonly TraceEvent[];\n locale: ReportLocale;\n}): ReactElement {\n const durations = content.turns.flatMap((turn) => {\n const duration = turnDuration(turn);\n return duration === undefined ? [] : [duration];\n });\n const totalDuration = durations.length === 0\n ? text(locale, \"—\", \"—\")\n : durationLabel(durations.reduce((total, duration) => total + duration, 0));\n const calls = callCount(events);\n const timingAvailable = completeTurnTiming(content.turns) && events.length > 0;\n return (<header className=\"niceeval-trace-toolbar\" role=\"toolbar\" aria-label={text(locale, \"Trajectory controls\", \"轨迹控制\")}>\n <div className=\"niceeval-trace-toolbar-main\">\n <span className=\"niceeval-trace-toolbar-title\">{text(locale, \"Session log\", \"会话日志\")}</span>\n <div className=\"niceeval-trace-toolbar-actions\">\n <button type=\"button\" className=\"niceeval-trace-toolbar-button niceeval-trace-toolbar-button--duration\" data-niceeval-trace-duration aria-pressed=\"false\" disabled={!timingAvailable} title={timingAvailable\n ? text(locale, \"Use turn-duration projection\", \"按轮次时长投影\")\n : text(locale, \"Turn timing is incomplete; sequence stays equal-width\", \"轮次时长不完整;保持等宽顺序\")}>\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"5.25\"/><path d=\"M8 4.75V8l2.25 1.5\"/></svg>\n <span>{text(locale, \"Duration\", \"时长\")}</span>\n <b>{totalDuration}</b>\n </button>\n <button type=\"button\" className=\"niceeval-trace-toolbar-button\" data-niceeval-trace-turns aria-pressed=\"false\" title={text(locale, \"Collapse turns\", \"折叠轮次\")}>\n <span className=\"niceeval-trace-toolbar-glyph\" aria-hidden=\"true\">⊟</span>\n <span>{text(locale, \"Turns\", \"轮次\")}</span>\n <b>{content.turns.length}</b>\n </button>\n <button type=\"button\" className=\"niceeval-trace-toolbar-button\" data-niceeval-trace-calls aria-pressed=\"false\" title={text(locale, \"Collapse tool calls\", \"折叠工具调用\")} disabled={calls === 0}>\n <span className=\"niceeval-trace-toolbar-glyph\" aria-hidden=\"true\">⊟</span>\n <span>{text(locale, \"Calls\", \"调用\")}</span>\n <b>{calls}</b>\n </button>\n </div>\n </div>\n <label className=\"niceeval-trace-search\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><circle cx=\"7\" cy=\"7\" r=\"4.25\"/><path d=\"m10.25 10.25 3 3\"/></svg>\n <span className=\"niceeval-trace-visually-hidden\">{text(locale, \"Search trajectory\", \"搜索轨迹\")}</span>\n <input type=\"search\" data-niceeval-trace-search placeholder={text(locale, \"Search\", \"搜索\")} aria-label={text(locale, \"Search trajectory\", \"搜索轨迹\")}/>\n </label>\n </header>);\n}\nfunction TraceTimeline({ content, events, locale, }: {\n content: ConversationContent;\n events: readonly TraceEvent[];\n locale: ReportLocale;\n}): ReactElement {\n const positions = timelinePositions(content.turns, events);\n const completeTiming = completeTurnTiming(content.turns);\n const boundaries = events.filter((event, index) => index === 0 || events[index - 1]?.turn.key !== event.turn.key);\n return (<section className=\"niceeval-trace-timeline\" aria-label={text(locale, \"Trajectory timeline\", \"轨迹时间线\")} data-niceeval-trace-timeline data-timing-complete={completeTiming ? \"true\" : undefined}>\n <div className=\"niceeval-trace-timeline-plot\">\n <div className=\"niceeval-trace-timeline-labels\" aria-hidden=\"true\">\n <span>{text(locale, \"Input / User\", \"输入 / 用户\")}</span>\n <span>{text(locale, \"Model / Assistant\", \"模型 / 助手\")}</span>\n <span>{text(locale, \"Tools / Tool\", \"工具 / 工具\")}</span>\n </div>\n <div className=\"niceeval-trace-timeline-track\">\n {events.length === 0 ? (<span className=\"niceeval-trace-timeline-empty\">{text(locale, \"No captured events\", \"没有已捕获事件\")}</span>) : null}\n {boundaries.map((event) => {\n const position = positions.get(event.id);\n return position === undefined ? null : (<span key={`boundary-${event.id}`} className=\"niceeval-trace-timeline-boundary\" aria-hidden=\"true\" style={timelineStyle(position, event.lane)}/>);\n })}\n {events.map((event) => {\n const position = positions.get(event.id);\n return position === undefined ? null : (<button key={event.id} type=\"button\" className=\"niceeval-trace-timeline-span\" data-niceeval-trace-timeline-event={event.id} data-lane={event.lane} data-failed={event.entry.failed ? \"true\" : undefined} aria-label={timelineEventLabel(event, locale)} title={timelineEventLabel(event, locale)} style={timelineStyle(position, event.lane)}/>);\n })}\n </div>\n </div>\n <p className=\"niceeval-trace-timeline-note\">\n {completeTiming\n ? text(locale, \"Duration projects captured turn durations; without per-event timestamps, events remain evenly sequenced within each turn.\", \"时长模式投影已捕获的轮次时长;没有逐事件时间戳时,事件在轮次内保持等宽顺序。\")\n : text(locale, \"Per-event timing was not captured, so the timeline uses equal-width sequence spans.\", \"未捕获逐事件时长,因此时间线使用等宽顺序跨度。\")}\n </p>\n </section>);\n}\nfunction TraceEvidence({ event, locale }: {\n event: TraceEvent;\n locale: ReportLocale;\n}): ReactElement {\n const detail = event.entry.detail === undefined ? null : renderConversationDetail(event.entry.detail);\n const duration = turnDuration(event.turn);\n return (<details className=\"niceeval-trace-evidence\" data-niceeval-trace-evidence={event.id}>\n <summary>{text(locale, \"Evidence\", \"证据\")}</summary>\n <div className=\"niceeval-trace-evidence-body\">\n <dl className=\"niceeval-trace-evidence-meta\">\n <div><dt>{text(locale, \"Source\", \"来源\")}</dt><dd>{resolveLocalizedText(event.turn.label, locale)}</dd></div>\n <div><dt>{text(locale, \"Status\", \"状态\")}</dt><dd>{statusFor(event.entry, locale)}</dd></div>\n <div><dt>{text(locale, \"Total duration\", \"总时长\")}</dt><dd>{duration === undefined ? text(locale, \"Not recorded\", \"未记录\") : durationLabel(duration)}</dd></div>\n {event.entry.callPhase === undefined ? null : (<div><dt>{text(locale, \"Call phase\", \"调用阶段\")}</dt><dd>{event.entry.callPhase}</dd></div>)}\n {event.entry.callId === undefined ? null : (<div><dt>{text(locale, \"Call ID\", \"调用 ID\")}</dt><dd>{event.entry.callId}</dd></div>)}\n </dl>\n <div className=\"niceeval-trace-evidence-tabs\" role=\"tablist\" aria-label={text(locale, \"Record detail tabs\", \"记录详情标签\")}>\n <button type=\"button\" role=\"tab\" data-niceeval-trace-evidence-tab=\"preview\" aria-selected=\"true\">\n {text(locale, \"Preview\", \"预览\")}\n </button>\n <button type=\"button\" role=\"tab\" data-niceeval-trace-evidence-tab=\"raw\" aria-selected=\"false\">\n {text(locale, \"Raw\", \"原始\")}\n </button>\n </div>\n <section className=\"niceeval-trace-evidence-panel\" data-niceeval-trace-evidence-panel=\"preview\" role=\"tabpanel\" aria-label={text(locale, \"Preview\", \"预览\")} data-active=\"true\">\n <h4>{text(locale, \"Preview\", \"预览\")}</h4>\n {detail === null\n ? <pre className=\"niceeval-trace-evidence-raw\">{event.raw}</pre>\n : <div className=\"niceeval-trace-evidence-detail\">{detail}</div>}\n </section>\n <section className=\"niceeval-trace-evidence-panel\" data-niceeval-trace-evidence-panel=\"raw\" role=\"tabpanel\" aria-label={text(locale, \"Raw\", \"原始\")} data-active=\"false\">\n <h4>{text(locale, \"Raw\", \"原始\")}</h4>\n <pre className=\"niceeval-trace-evidence-raw\">{event.raw}</pre>\n </section>\n </div>\n </details>);\n}\nfunction TraceEventRow({ event, locale }: {\n event: TraceEvent;\n locale: ReportLocale;\n}): ReactElement {\n const turnLabel = resolveLocalizedText(event.turn.label, locale);\n const duration = turnDuration(event.turn);\n const status = statusFor(event.entry, locale);\n return (<article className={cx(\"niceeval-trace-event-row\", event.toolLike && \"niceeval-trace-event-row--tool\", event.entry.failed && \"niceeval-trace-event-row--failed\")} data-niceeval-trace-event={event.id} data-tool-row={event.toolLike ? \"true\" : undefined} data-call-outcome={event.entry.callOutcome}>\n <span className=\"niceeval-trace-event-turn-rail\" aria-hidden=\"true\"/>\n <button type=\"button\" className=\"niceeval-trace-event-select\" data-niceeval-trace-select={event.id} aria-pressed=\"false\" aria-expanded=\"false\" aria-label={`${event.entry.kind}: ${event.summary || text(locale, \"captured event\", \"已捕获事件\")}`}>\n <span className=\"niceeval-trace-event-kind\" data-lane={event.lane}>{event.entry.kind}</span>\n <span className=\"niceeval-trace-event-summary\">{event.summary || \"—\"}</span>\n <span className=\"niceeval-trace-event-meta\" title={duration === undefined\n ? text(locale, \"Turn timing not recorded\", \"未记录轮次时长\")\n : `${turnLabel} · ${durationLabel(duration)}`}>\n {duration === undefined ? \"—\" : durationLabel(duration)}\n </span>\n <span className=\"niceeval-trace-event-status\" data-call-outcome={event.entry.callOutcome}>{status}</span>\n </button>\n <TraceEvidence event={event} locale={locale}/>\n </article>);\n}\nfunction TraceTurn({ turn, events, locale, }: {\n turn: ConversationTurn;\n events: readonly TraceEvent[];\n locale: ReportLocale;\n}): ReactElement {\n const duration = turnDuration(turn);\n const calls = callCount(events);\n const failed = events.some((event) => event.entry.failed === true);\n const turnId = encodeURIComponent(turn.key);\n return (<section className={cx(\"niceeval-trace-turn\", turn.verdict && `niceeval-trace-turn--${turn.verdict}`, failed && \"niceeval-trace-turn--failed-events\")} data-niceeval-trace-turn={turnId}>\n <header className=\"niceeval-trace-turn-head niceeval-conversation-turn-head\">\n <button type=\"button\" className=\"niceeval-trace-turn-toggle\" data-niceeval-trace-turn-toggle={turnId} aria-expanded=\"true\" title={text(locale, \"Collapse turn\", \"折叠轮次\")}>\n <span className=\"niceeval-trace-turn-chevron\" aria-hidden=\"true\">⌄</span>\n <span className=\"niceeval-trace-turn-label\">{resolveLocalizedText(turn.label, locale)}</span>\n <span className=\"niceeval-trace-turn-facts\">\n {duration === undefined ? text(locale, \"timing unavailable\", \"时长不可用\") : durationLabel(duration)}\n <span>{events.length} {text(locale, \"events\", \"事件\")}</span>\n {calls > 0 ? <span>{calls} {text(locale, \"calls\", \"调用\")}</span> : null}\n </span>\n {turn.verdict ? <span className=\"niceeval-trace-turn-verdict\">{turn.verdict}</span> : null}\n </button>\n </header>\n <div className=\"niceeval-trace-turn-events\">\n {events.length === 0 ? (<p className=\"niceeval-trace-empty-turn\">{text(locale, \"No events captured for this turn.\", \"此轮没有已捕获事件。\")}</p>) : events.map((event) => <TraceEventRow key={event.id} event={event} locale={locale}/>)}\n </div>\n </section>);\n}\nexport const TurnTrace = defineComponent<TurnTraceProps, ResolvedTurnTraceProps>({\n dimensions: () => ({}),\n resolve(props) {\n return {\n data: props.data ?? null,\n locale: props.locale,\n className: props.className,\n };\n },\n web({ data, locale, className }, ctx) {\n if (data === null || data.turns.length === 0)\n return null;\n const loc = locale ?? ctx.locale;\n const events = traceEventsOf(data, loc);\n return (<section className={cx(\"niceeval-report\", \"niceeval-turn-trace\", className)} data-niceeval-turn-trace data-niceeval-duration-mode=\"sequence\">\n <TraceToolbar content={data} events={events} locale={loc}/>\n <TraceTimeline content={data} events={events} locale={loc}/>\n <div className=\"niceeval-trace-ledger\" data-niceeval-trace-ledger>\n {data.turns.map((turn, turnIndex) => (<TraceTurn key={turn.key} turn={turn} events={events.filter((event) => event.turnIndex === turnIndex)} locale={loc}/>))}\n </div>\n </section>);\n },\n text({ data, locale }, ctx) {\n return data === null || data.turns.length === 0\n ? \"\"\n : conversationText(data, ctx, locale ?? ctx.locale);\n },\n});\nTurnTrace.displayName = \"TurnTrace\";\n"]}
@@ -618,6 +618,8 @@ function renderCellWeb(cell, ctx) {
618
618
  if (!cell)
619
619
  return (0, jsx_runtime_1.jsx)("span", { className: "niceeval-missing", children: MISSING_MARK });
620
620
  switch (cell.kind) {
621
+ case "stack":
622
+ return ((0, jsx_runtime_1.jsx)("span", { className: "niceeval-cell-stack", children: cell.cells.map((entry, index) => ((0, jsx_runtime_1.jsx)("span", { className: "niceeval-cell-stack-item", children: renderCellWeb(entry, ctx) }, index))) }));
621
623
  case "notApplicable":
622
624
  return (0, jsx_runtime_1.jsx)("span", { className: "niceeval-missing", children: MISSING_MARK });
623
625
  case "missing": {
@@ -657,6 +659,8 @@ function renderCellWeb(cell, ctx) {
657
659
  function cellSortValue(cell) {
658
660
  if (!cell)
659
661
  return "";
662
+ if (cell.kind === "stack")
663
+ return cellSortValue(cell.cells[0]);
660
664
  if (cell.kind === "metric")
661
665
  return cell.metric.value ?? "";
662
666
  if (cell.kind === "score")
@@ -721,7 +725,16 @@ const TableImplementation = (0, tree_ts_1.defineComponent)({
721
725
  const locale = props.locale ?? ctx.locale;
722
726
  const { columns, content } = tableContentOf(props, locale);
723
727
  const flat = (0, cell_tsx_1.flattenTableContentForText)(content, locale);
724
- return (0, table_text_ts_1.renderTableText)({ columns, rows: flat.rows.map((row) => ({ key: row.key, cells: row.cells, depth: row.depth })), locale }, ctx);
728
+ return (0, table_text_ts_1.renderTableText)({
729
+ columns,
730
+ rows: flat.rows.map((row) => ({
731
+ key: row.key,
732
+ cells: row.cells,
733
+ depth: row.depth,
734
+ ruleBefore: row.variant === "group",
735
+ })),
736
+ locale,
737
+ }, ctx);
725
738
  },
726
739
  });
727
740
  exports.Table = TableImplementation;