@vercel/agent-eval-playground 0.0.1 → 0.0.5

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 (307) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +11 -0
  3. package/.next/build/chunks/[root-of-the-server]__51c3fbd4._.js +206 -0
  4. package/.next/build/chunks/[root-of-the-server]__51c3fbd4._.js.map +8 -0
  5. package/.next/build/chunks/[root-of-the-server]__a6a0d430._.js +500 -0
  6. package/.next/build/chunks/[root-of-the-server]__a6a0d430._.js.map +11 -0
  7. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_047ab41b._.js +13 -0
  8. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_047ab41b._.js.map +5 -0
  9. package/.next/build/chunks/[turbopack]_runtime.js +795 -0
  10. package/.next/build/chunks/[turbopack]_runtime.js.map +10 -0
  11. package/.next/build/chunks/node_modules_fe693df6._.js +6758 -0
  12. package/.next/build/chunks/node_modules_fe693df6._.js.map +47 -0
  13. package/.next/build/package.json +1 -0
  14. package/.next/build/postcss.js +6 -0
  15. package/.next/build/postcss.js.map +5 -0
  16. package/.next/build-manifest.json +20 -0
  17. package/.next/cache/.previewinfo +1 -0
  18. package/.next/cache/.rscinfo +1 -0
  19. package/.next/cache/.tsbuildinfo +1 -0
  20. package/.next/cache/config.json +7 -0
  21. package/.next/diagnostics/build-diagnostics.json +6 -0
  22. package/.next/diagnostics/framework.json +1 -0
  23. package/.next/export-marker.json +6 -0
  24. package/.next/fallback-build-manifest.json +12 -0
  25. package/.next/images-manifest.json +67 -0
  26. package/.next/next-minimal-server.js.nft.json +1 -0
  27. package/.next/next-server.js.nft.json +1 -0
  28. package/.next/package.json +1 -0
  29. package/.next/prerender-manifest.json +61 -0
  30. package/.next/required-server-files.js +320 -0
  31. package/.next/required-server-files.json +320 -0
  32. package/.next/routes-manifest.json +109 -0
  33. package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  34. package/.next/server/app/_global-error/page/build-manifest.json +17 -0
  35. package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  36. package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  37. package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  38. package/.next/server/app/_global-error/page.js +10 -0
  39. package/.next/server/app/_global-error/page.js.map +5 -0
  40. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  41. package/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
  42. package/.next/server/app/_global-error.html +2 -0
  43. package/.next/server/app/_global-error.meta +15 -0
  44. package/.next/server/app/_global-error.rsc +12 -0
  45. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  46. package/.next/server/app/_global-error.segments/_full.segment.rsc +12 -0
  47. package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  48. package/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
  49. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  50. package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  51. package/.next/server/app/_not-found/page/build-manifest.json +17 -0
  52. package/.next/server/app/_not-found/page/next-font-manifest.json +12 -0
  53. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  54. package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  55. package/.next/server/app/_not-found/page.js +13 -0
  56. package/.next/server/app/_not-found/page.js.map +5 -0
  57. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  58. package/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
  59. package/.next/server/app/_not-found.html +1 -0
  60. package/.next/server/app/_not-found.meta +16 -0
  61. package/.next/server/app/_not-found.rsc +18 -0
  62. package/.next/server/app/_not-found.segments/_full.segment.rsc +18 -0
  63. package/.next/server/app/_not-found.segments/_head.segment.rsc +5 -0
  64. package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -0
  65. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  66. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
  67. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  68. package/.next/server/app/compare/page/app-paths-manifest.json +3 -0
  69. package/.next/server/app/compare/page/build-manifest.json +17 -0
  70. package/.next/server/app/compare/page/next-font-manifest.json +12 -0
  71. package/.next/server/app/compare/page/react-loadable-manifest.json +1 -0
  72. package/.next/server/app/compare/page/server-reference-manifest.json +4 -0
  73. package/.next/server/app/compare/page.js +15 -0
  74. package/.next/server/app/compare/page.js.map +5 -0
  75. package/.next/server/app/compare/page.js.nft.json +1 -0
  76. package/.next/server/app/compare/page_client-reference-manifest.js +2 -0
  77. package/.next/server/app/evals/[name]/page/app-paths-manifest.json +3 -0
  78. package/.next/server/app/evals/[name]/page/build-manifest.json +17 -0
  79. package/.next/server/app/evals/[name]/page/next-font-manifest.json +12 -0
  80. package/.next/server/app/evals/[name]/page/react-loadable-manifest.json +1 -0
  81. package/.next/server/app/evals/[name]/page/server-reference-manifest.json +4 -0
  82. package/.next/server/app/evals/[name]/page.js +17 -0
  83. package/.next/server/app/evals/[name]/page.js.map +5 -0
  84. package/.next/server/app/evals/[name]/page.js.nft.json +1 -0
  85. package/.next/server/app/evals/[name]/page_client-reference-manifest.js +2 -0
  86. package/.next/server/app/evals/page/app-paths-manifest.json +3 -0
  87. package/.next/server/app/evals/page/build-manifest.json +17 -0
  88. package/.next/server/app/evals/page/next-font-manifest.json +12 -0
  89. package/.next/server/app/evals/page/react-loadable-manifest.json +1 -0
  90. package/.next/server/app/evals/page/server-reference-manifest.json +4 -0
  91. package/.next/server/app/evals/page.js +16 -0
  92. package/.next/server/app/evals/page.js.map +5 -0
  93. package/.next/server/app/evals/page.js.nft.json +1 -0
  94. package/.next/server/app/evals/page_client-reference-manifest.js +2 -0
  95. package/.next/server/app/experiments/[name]/[timestamp]/page/app-paths-manifest.json +3 -0
  96. package/.next/server/app/experiments/[name]/[timestamp]/page/build-manifest.json +17 -0
  97. package/.next/server/app/experiments/[name]/[timestamp]/page/next-font-manifest.json +12 -0
  98. package/.next/server/app/experiments/[name]/[timestamp]/page/react-loadable-manifest.json +1 -0
  99. package/.next/server/app/experiments/[name]/[timestamp]/page/server-reference-manifest.json +4 -0
  100. package/.next/server/app/experiments/[name]/[timestamp]/page.js +17 -0
  101. package/.next/server/app/experiments/[name]/[timestamp]/page.js.map +5 -0
  102. package/.next/server/app/experiments/[name]/[timestamp]/page.js.nft.json +1 -0
  103. package/.next/server/app/experiments/[name]/[timestamp]/page_client-reference-manifest.js +2 -0
  104. package/.next/server/app/experiments/page/app-paths-manifest.json +3 -0
  105. package/.next/server/app/experiments/page/build-manifest.json +17 -0
  106. package/.next/server/app/experiments/page/next-font-manifest.json +12 -0
  107. package/.next/server/app/experiments/page/react-loadable-manifest.json +1 -0
  108. package/.next/server/app/experiments/page/server-reference-manifest.json +4 -0
  109. package/.next/server/app/experiments/page.js +16 -0
  110. package/.next/server/app/experiments/page.js.map +5 -0
  111. package/.next/server/app/experiments/page.js.nft.json +1 -0
  112. package/.next/server/app/experiments/page_client-reference-manifest.js +2 -0
  113. package/.next/server/app/page/app-paths-manifest.json +3 -0
  114. package/.next/server/app/page/build-manifest.json +17 -0
  115. package/.next/server/app/page/next-font-manifest.json +12 -0
  116. package/.next/server/app/page/react-loadable-manifest.json +1 -0
  117. package/.next/server/app/page/server-reference-manifest.json +4 -0
  118. package/.next/server/app/page.js +16 -0
  119. package/.next/server/app/page.js.map +5 -0
  120. package/.next/server/app/page.js.nft.json +1 -0
  121. package/.next/server/app/page_client-reference-manifest.js +2 -0
  122. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page/app-paths-manifest.json +3 -0
  123. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page/build-manifest.json +17 -0
  124. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page/next-font-manifest.json +12 -0
  125. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page/react-loadable-manifest.json +1 -0
  126. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page/server-reference-manifest.json +4 -0
  127. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page.js +16 -0
  128. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page.js.map +5 -0
  129. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page.js.nft.json +1 -0
  130. package/.next/server/app/transcript/[experiment]/[timestamp]/[evalName]/[run]/page_client-reference-manifest.js +2 -0
  131. package/.next/server/app-paths-manifest.json +11 -0
  132. package/.next/server/chunks/ssr/337e3_app_transcript_[experiment]_[timestamp]_[evalName]_[run]_page_actions_f96c6169.js +3 -0
  133. package/.next/server/chunks/ssr/337e3_app_transcript_[experiment]_[timestamp]_[evalName]_[run]_page_actions_f96c6169.js.map +1 -0
  134. package/.next/server/chunks/ssr/730ea_playground__next-internal_server_app__global-error_page_actions_8a995587.js +3 -0
  135. package/.next/server/chunks/ssr/730ea_playground__next-internal_server_app__global-error_page_actions_8a995587.js.map +1 -0
  136. package/.next/server/chunks/ssr/[root-of-the-server]__1690ee0d._.js +10 -0
  137. package/.next/server/chunks/ssr/[root-of-the-server]__1690ee0d._.js.map +1 -0
  138. package/.next/server/chunks/ssr/[root-of-the-server]__3702960d._.js +3 -0
  139. package/.next/server/chunks/ssr/[root-of-the-server]__3702960d._.js.map +1 -0
  140. package/.next/server/chunks/ssr/[root-of-the-server]__4228b9c3._.js +3 -0
  141. package/.next/server/chunks/ssr/[root-of-the-server]__4228b9c3._.js.map +1 -0
  142. package/.next/server/chunks/ssr/[root-of-the-server]__5a63573b._.js +3 -0
  143. package/.next/server/chunks/ssr/[root-of-the-server]__5a63573b._.js.map +1 -0
  144. package/.next/server/chunks/ssr/[root-of-the-server]__5d5aaa26._.js +3 -0
  145. package/.next/server/chunks/ssr/[root-of-the-server]__5d5aaa26._.js.map +1 -0
  146. package/.next/server/chunks/ssr/[root-of-the-server]__72be1801._.js +3 -0
  147. package/.next/server/chunks/ssr/[root-of-the-server]__72be1801._.js.map +1 -0
  148. package/.next/server/chunks/ssr/[root-of-the-server]__a216b589._.js +3 -0
  149. package/.next/server/chunks/ssr/[root-of-the-server]__a216b589._.js.map +1 -0
  150. package/.next/server/chunks/ssr/[root-of-the-server]__a218194e._.js +3 -0
  151. package/.next/server/chunks/ssr/[root-of-the-server]__a218194e._.js.map +1 -0
  152. package/.next/server/chunks/ssr/[root-of-the-server]__ac2a456c._.js +3 -0
  153. package/.next/server/chunks/ssr/[root-of-the-server]__ac2a456c._.js.map +1 -0
  154. package/.next/server/chunks/ssr/[root-of-the-server]__b8fc4094._.js +3 -0
  155. package/.next/server/chunks/ssr/[root-of-the-server]__b8fc4094._.js.map +1 -0
  156. package/.next/server/chunks/ssr/[root-of-the-server]__c73d60f7._.js +3 -0
  157. package/.next/server/chunks/ssr/[root-of-the-server]__c73d60f7._.js.map +1 -0
  158. package/.next/server/chunks/ssr/[root-of-the-server]__d143f79e._.js +3 -0
  159. package/.next/server/chunks/ssr/[root-of-the-server]__d143f79e._.js.map +1 -0
  160. package/.next/server/chunks/ssr/[root-of-the-server]__ec465b95._.js +3 -0
  161. package/.next/server/chunks/ssr/[root-of-the-server]__ec465b95._.js.map +1 -0
  162. package/.next/server/chunks/ssr/[root-of-the-server]__f286e9a8._.js +3 -0
  163. package/.next/server/chunks/ssr/[root-of-the-server]__f286e9a8._.js.map +1 -0
  164. package/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
  165. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
  166. package/.next/server/chunks/ssr/_0c03cacc._.js +3 -0
  167. package/.next/server/chunks/ssr/_0c03cacc._.js.map +1 -0
  168. package/.next/server/chunks/ssr/_1e6ac48d._.js +4 -0
  169. package/.next/server/chunks/ssr/_1e6ac48d._.js.map +1 -0
  170. package/.next/server/chunks/ssr/_2c118710._.js +3 -0
  171. package/.next/server/chunks/ssr/_2c118710._.js.map +1 -0
  172. package/.next/server/chunks/ssr/_42a087a1._.js +3 -0
  173. package/.next/server/chunks/ssr/_42a087a1._.js.map +1 -0
  174. package/.next/server/chunks/ssr/_67f68456._.js +4 -0
  175. package/.next/server/chunks/ssr/_67f68456._.js.map +1 -0
  176. package/.next/server/chunks/ssr/_6d67dac0._.js +3 -0
  177. package/.next/server/chunks/ssr/_6d67dac0._.js.map +1 -0
  178. package/.next/server/chunks/ssr/_6e3d81a7._.js +8 -0
  179. package/.next/server/chunks/ssr/_6e3d81a7._.js.map +1 -0
  180. package/.next/server/chunks/ssr/_70603404._.js +3 -0
  181. package/.next/server/chunks/ssr/_70603404._.js.map +1 -0
  182. package/.next/server/chunks/ssr/_80dc7fd7._.js +3 -0
  183. package/.next/server/chunks/ssr/_80dc7fd7._.js.map +1 -0
  184. package/.next/server/chunks/ssr/_8ae4e103._.js +4 -0
  185. package/.next/server/chunks/ssr/_8ae4e103._.js.map +1 -0
  186. package/.next/server/chunks/ssr/_9b94d088._.js +4 -0
  187. package/.next/server/chunks/ssr/_9b94d088._.js.map +1 -0
  188. package/.next/server/chunks/ssr/_a69e239b._.js +3 -0
  189. package/.next/server/chunks/ssr/_a69e239b._.js.map +1 -0
  190. package/.next/server/chunks/ssr/_b9885a66._.js +3 -0
  191. package/.next/server/chunks/ssr/_b9885a66._.js.map +1 -0
  192. package/.next/server/chunks/ssr/_cb8df3c8._.js +4 -0
  193. package/.next/server/chunks/ssr/_cb8df3c8._.js.map +1 -0
  194. package/.next/server/chunks/ssr/_d36ab527._.js +3 -0
  195. package/.next/server/chunks/ssr/_d36ab527._.js.map +1 -0
  196. package/.next/server/chunks/ssr/_db530f53._.js +4 -0
  197. package/.next/server/chunks/ssr/_db530f53._.js.map +1 -0
  198. package/.next/server/chunks/ssr/_de79ce42._.js +3 -0
  199. package/.next/server/chunks/ssr/_de79ce42._.js.map +1 -0
  200. package/.next/server/chunks/ssr/_e3b4e74f._.js +3 -0
  201. package/.next/server/chunks/ssr/_e3b4e74f._.js.map +1 -0
  202. package/.next/server/chunks/ssr/_ec9a0c72._.js +4 -0
  203. package/.next/server/chunks/ssr/_ec9a0c72._.js.map +1 -0
  204. package/.next/server/chunks/ssr/d2f71__next-internal_server_app_experiments_[name]_[timestamp]_page_actions_e536d9ac.js +3 -0
  205. package/.next/server/chunks/ssr/d2f71__next-internal_server_app_experiments_[name]_[timestamp]_page_actions_e536d9ac.js.map +1 -0
  206. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js +3 -0
  207. package/.next/server/chunks/ssr/d4b1c_modules_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_6ef9314a.js.map +1 -0
  208. package/.next/server/chunks/ssr/node_modules_6e9b70d7._.js +3 -0
  209. package/.next/server/chunks/ssr/node_modules_6e9b70d7._.js.map +1 -0
  210. package/.next/server/chunks/ssr/node_modules_8bc17d92._.js +4 -0
  211. package/.next/server/chunks/ssr/node_modules_8bc17d92._.js.map +1 -0
  212. package/.next/server/chunks/ssr/node_modules_bd6fad66._.js +3 -0
  213. package/.next/server/chunks/ssr/node_modules_bd6fad66._.js.map +1 -0
  214. package/.next/server/chunks/ssr/node_modules_c56ca3ad._.js +3 -0
  215. package/.next/server/chunks/ssr/node_modules_c56ca3ad._.js.map +1 -0
  216. package/.next/server/chunks/ssr/node_modules_ea845e5f._.js +3 -0
  217. package/.next/server/chunks/ssr/node_modules_ea845e5f._.js.map +1 -0
  218. package/.next/server/chunks/ssr/node_modules_f76a24fb._.js +3 -0
  219. package/.next/server/chunks/ssr/node_modules_f76a24fb._.js.map +1 -0
  220. package/.next/server/chunks/ssr/node_modules_next_dist_023b6025._.js +6 -0
  221. package/.next/server/chunks/ssr/node_modules_next_dist_023b6025._.js.map +1 -0
  222. package/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js +4 -0
  223. package/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js.map +1 -0
  224. package/.next/server/chunks/ssr/node_modules_next_dist_7769b563._.js +6 -0
  225. package/.next/server/chunks/ssr/node_modules_next_dist_7769b563._.js.map +1 -0
  226. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_9774470f._.js +3 -0
  227. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_9774470f._.js.map +1 -0
  228. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js +3 -0
  229. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js.map +1 -0
  230. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +3 -0
  231. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js.map +1 -0
  232. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_15817684.js +3 -0
  233. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_15817684.js.map +1 -0
  234. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_b8f523c0.js +4 -0
  235. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_b8f523c0.js.map +1 -0
  236. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app__not-found_page_actions_95e6c45b.js +3 -0
  237. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app__not-found_page_actions_95e6c45b.js.map +1 -0
  238. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_compare_page_actions_b92c6fd4.js +3 -0
  239. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_compare_page_actions_b92c6fd4.js.map +1 -0
  240. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_evals_[name]_page_actions_18f5f29e.js +3 -0
  241. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_evals_[name]_page_actions_18f5f29e.js.map +1 -0
  242. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_evals_page_actions_c9f70ccf.js +3 -0
  243. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_evals_page_actions_c9f70ccf.js.map +1 -0
  244. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_experiments_page_actions_931a3a27.js +3 -0
  245. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_experiments_page_actions_931a3a27.js.map +1 -0
  246. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_page_actions_b8593c52.js +3 -0
  247. package/.next/server/chunks/ssr/packages_playground__next-internal_server_app_page_actions_b8593c52.js.map +1 -0
  248. package/.next/server/chunks/ssr/packages_playground_components_ComparePage_tsx_52e5c113._.js +3 -0
  249. package/.next/server/chunks/ssr/packages_playground_components_ComparePage_tsx_52e5c113._.js.map +1 -0
  250. package/.next/server/chunks/ssr/packages_playground_components_ShowMore_tsx_97250f43._.js +3 -0
  251. package/.next/server/chunks/ssr/packages_playground_components_ShowMore_tsx_97250f43._.js.map +1 -0
  252. package/.next/server/chunks/ssr/packages_playground_components_TranscriptViewer_tsx_ba8ff423._.js +3 -0
  253. package/.next/server/chunks/ssr/packages_playground_components_TranscriptViewer_tsx_ba8ff423._.js.map +1 -0
  254. package/.next/server/functions-config-manifest.json +4 -0
  255. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  256. package/.next/server/middleware-build-manifest.js +21 -0
  257. package/.next/server/middleware-manifest.json +6 -0
  258. package/.next/server/next-font-manifest.js +1 -0
  259. package/.next/server/next-font-manifest.json +47 -0
  260. package/.next/server/pages/404.html +1 -0
  261. package/.next/server/pages/500.html +2 -0
  262. package/.next/server/pages-manifest.json +4 -0
  263. package/.next/server/server-reference-manifest.js +1 -0
  264. package/.next/server/server-reference-manifest.json +5 -0
  265. package/.next/static/21nGmvm7L8gT0jAjdSnMa/_buildManifest.js +11 -0
  266. package/.next/static/21nGmvm7L8gT0jAjdSnMa/_clientMiddlewareManifest.json +1 -0
  267. package/.next/static/21nGmvm7L8gT0jAjdSnMa/_ssgManifest.js +1 -0
  268. package/.next/static/chunks/0337b0821bd8b77a.js +1 -0
  269. package/.next/static/chunks/0991c664dee6f315.css +4 -0
  270. package/.next/static/chunks/419a92b5c17e94a8.js +1 -0
  271. package/.next/static/chunks/4535d9cfdd3c478e.js +1 -0
  272. package/.next/static/chunks/47fcac10c45fd42a.js +1 -0
  273. package/.next/static/chunks/4ded6569b84be95f.js +1 -0
  274. package/.next/static/chunks/66ffe3fd1030c2a6.js +1 -0
  275. package/.next/static/chunks/7c92e96509cd355e.js +1 -0
  276. package/.next/static/chunks/806bdb8e4a6a9b95.js +4 -0
  277. package/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  278. package/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  279. package/.next/static/chunks/b3383f492d81c97e.js +1 -0
  280. package/.next/static/chunks/b5dc2a8c673e16ad.js +1 -0
  281. package/.next/static/chunks/bc1ad5694f41cef0.js +1 -0
  282. package/.next/static/chunks/bfa79fa98b21865a.js +1 -0
  283. package/.next/static/chunks/d2be314c3ece3fbe.js +1 -0
  284. package/.next/static/chunks/d4e7d00d58034493.js +6 -0
  285. package/.next/static/chunks/da0aeda60d1080fa.js +1 -0
  286. package/.next/static/chunks/db1f4d63ff1d1c41.js +2 -0
  287. package/.next/static/chunks/f2f58a7e93290fbb.js +1 -0
  288. package/.next/static/chunks/f7fd0fcd1e2772a2.js +1 -0
  289. package/.next/static/chunks/ff1a16fafef87110.js +1 -0
  290. package/.next/static/chunks/turbopack-a58403ee054004b8.js +4 -0
  291. package/.next/static/media/400bf8aa837fcb7e-s.b68677ba.woff2 +0 -0
  292. package/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  293. package/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  294. package/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  295. package/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  296. package/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  297. package/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  298. package/.next/static/media/f7aa21714c1c53f8-s.p.e3544bb0.woff2 +0 -0
  299. package/.next/trace +1 -0
  300. package/.next/trace-build +1 -0
  301. package/.next/turbopack +0 -0
  302. package/.next/types/routes.d.ts +63 -0
  303. package/.next/types/validator.ts +115 -0
  304. package/README.md +1 -1
  305. package/app/globals.css +0 -1
  306. package/bin.mjs +2 -2
  307. package/package.json +9 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../node_modules/%40swc/helpers/cjs/_interop_require_wildcard.cjs","../../../../../../node_modules/next/dist/client/app-dir/link.js/__nextjs-internal-proxy.cjs","../../../../../../node_modules/next/src/client/app-dir/link.tsx","../../../../../../node_modules/next/src/client/app-dir/link.react-server.tsx","turbopack:///[next]/internal/font/google/figtree_e520db2c.module.css [app-rsc] (css module)","turbopack:///[next]/internal/font/google/geist_a71539c9.module.css [app-rsc] (css module)","turbopack:///[next]/internal/font/google/geist_mono_8d43a2aa.module.css [app-rsc] (css module)","turbopack:///[next]/internal/font/google/figtree_e520db2c.js","turbopack:///[next]/internal/font/google/geist_a71539c9.js","turbopack:///[next]/internal/font/google/geist_mono_8d43a2aa.js","../../../../../../packages/playground/app/layout.tsx"],"sourcesContent":["\"use strict\";\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\nexports._ = _interop_require_wildcard;\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nconst { createClientModuleProxy } = require(\"react-server-dom-turbopack/server\");\n\n__turbopack_context__.n(createClientModuleProxy(\"[project]/node_modules/next/dist/client/app-dir/link.js\"));\n","'use client'\n\nimport React, { createContext, useContext, useOptimistic, useRef } from 'react'\nimport type { UrlObject } from 'url'\nimport { formatUrl } from '../../shared/lib/router/utils/format-url'\nimport { AppRouterContext } from '../../shared/lib/app-router-context.shared-runtime'\nimport { useMergedRef } from '../use-merged-ref'\nimport { isAbsoluteUrl } from '../../shared/lib/utils'\nimport { addBasePath } from '../add-base-path'\nimport { warnOnce } from '../../shared/lib/utils/warn-once'\nimport type { PENDING_LINK_STATUS } from '../components/links'\nimport {\n IDLE_LINK_STATUS,\n mountLinkInstance,\n onNavigationIntent,\n unmountLinkForCurrentNavigation,\n unmountPrefetchableInstance,\n type LinkInstance,\n} from '../components/links'\nimport { isLocalURL } from '../../shared/lib/router/utils/is-local-url'\nimport {\n FetchStrategy,\n type PrefetchTaskFetchStrategy,\n} from '../components/segment-cache/types'\nimport { errorOnce } from '../../shared/lib/utils/error-once'\n\ntype Url = string | UrlObject\ntype RequiredKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? never : K\n}[keyof T]\ntype OptionalKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? K : never\n}[keyof T]\n\ntype OnNavigateEventHandler = (event: { preventDefault: () => void }) => void\n\ntype InternalLinkProps = {\n /**\n * **Required**. The path or URL to navigate to. It can also be an object (similar to `URL`).\n *\n * @example\n * ```tsx\n * // Navigate to /dashboard:\n * <Link href=\"/dashboard\">Dashboard</Link>\n *\n * // Navigate to /about?name=test:\n * <Link href={{ pathname: '/about', query: { name: 'test' } }}>\n * About\n * </Link>\n * ```\n *\n * @remarks\n * - For external URLs, use a fully qualified URL such as `https://...`.\n * - In the App Router, dynamic routes must not include bracketed segments in `href`.\n */\n href: Url\n\n /**\n * @deprecated v10.0.0: `href` props pointing to a dynamic route are\n * automatically resolved and no longer require the `as` prop.\n */\n as?: Url\n\n /**\n * Replace the current `history` state instead of adding a new URL into the stack.\n *\n * @defaultValue `false`\n *\n * @example\n * ```tsx\n * <Link href=\"/about\" replace>\n * About (replaces the history state)\n * </Link>\n * ```\n */\n replace?: boolean\n\n /**\n * Whether to override the default scroll behavior. If `true`, Next.js attempts to maintain\n * the scroll position if the newly navigated page is still visible. If not, it scrolls to the top.\n *\n * If `false`, Next.js will not modify the scroll behavior at all.\n *\n * @defaultValue `true`\n *\n * @example\n * ```tsx\n * <Link href=\"/dashboard\" scroll={false}>\n * No auto scroll\n * </Link>\n * ```\n */\n scroll?: boolean\n\n /**\n * Update the path of the current page without rerunning data fetching methods\n * like `getStaticProps`, `getServerSideProps`, or `getInitialProps`.\n *\n * @remarks\n * `shallow` only applies to the Pages Router. For the App Router, see the\n * [following documentation](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#using-the-native-history-api).\n *\n * @defaultValue `false`\n *\n * @example\n * ```tsx\n * <Link href=\"/blog\" shallow>\n * Shallow navigation\n * </Link>\n * ```\n */\n shallow?: boolean\n\n /**\n * Forces `Link` to pass its `href` to the child component. Useful if the child is a custom\n * component that wraps an `<a>` tag, or if you're using certain styling libraries.\n *\n * @defaultValue `false`\n *\n * @example\n * ```tsx\n * <Link href=\"/dashboard\" passHref legacyBehavior>\n * <MyStyledAnchor>Dashboard</MyStyledAnchor>\n * </Link>\n * ```\n */\n passHref?: boolean\n\n /**\n * Prefetch the page in the background.\n * Any `<Link />` that is in the viewport (initially or through scroll) will be prefetched.\n * Prefetch can be disabled by passing `prefetch={false}`.\n *\n * @remarks\n * Prefetching is only enabled in production.\n *\n * - In the **App Router**:\n * - `\"auto\"`, `null`, `undefined` (default): Prefetch behavior depends on static vs dynamic routes:\n * - Static routes: fully prefetched\n * - Dynamic routes: partial prefetch to the nearest segment with a `loading.js`\n * - `true`: Always prefetch the full route and data.\n * - `false`: Disable prefetching on both viewport and hover.\n * - In the **Pages Router**:\n * - `true` (default): Prefetches the route and data in the background on viewport or hover.\n * - `false`: Prefetch only on hover, not on viewport.\n *\n * @defaultValue `true` (Pages Router) or `null` (App Router)\n *\n * @example\n * ```tsx\n * <Link href=\"/dashboard\" prefetch={false}>\n * Dashboard\n * </Link>\n * ```\n */\n prefetch?: boolean | 'auto' | null\n\n /**\n * (unstable) Switch to a full prefetch on hover. Effectively the same as\n * updating the prefetch prop to `true` in a mouse event.\n */\n unstable_dynamicOnHover?: boolean\n\n /**\n * The active locale is automatically prepended in the Pages Router. `locale` allows for providing\n * a different locale, or can be set to `false` to opt out of automatic locale behavior.\n *\n * @remarks\n * Note: locale only applies in the Pages Router and is ignored in the App Router.\n *\n * @example\n * ```tsx\n * // Use the 'fr' locale:\n * <Link href=\"/about\" locale=\"fr\">\n * About (French)\n * </Link>\n *\n * // Disable locale prefix:\n * <Link href=\"/about\" locale={false}>\n * About (no locale prefix)\n * </Link>\n * ```\n */\n locale?: string | false\n\n /**\n * Enable legacy link behavior.\n *\n * @deprecated This will be removed in a future version\n * @defaultValue `false`\n * @see https://github.com/vercel/next.js/commit/489e65ed98544e69b0afd7e0cfc3f9f6c2b803b7\n */\n legacyBehavior?: boolean\n\n /**\n * Optional event handler for when the mouse pointer is moved onto the `<Link>`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLAnchorElement>\n\n /**\n * Optional event handler for when the `<Link>` is touched.\n */\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n\n /**\n * Optional event handler for when the `<Link>` is clicked.\n */\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n\n /**\n * Optional event handler for when the `<Link>` is navigated.\n */\n onNavigate?: OnNavigateEventHandler\n}\n\n// TODO-APP: Include the full set of Anchor props\n// adding this to the publicly exported type currently breaks existing apps\n\n// `RouteInferType` is a stub here to avoid breaking `typedRoutes` when the type\n// isn't generated yet. It will be replaced when type generation runs.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type LinkProps<RouteInferType = any> = InternalLinkProps\ntype LinkPropsRequired = RequiredKeys<LinkProps>\ntype LinkPropsOptional = OptionalKeys<Omit<InternalLinkProps, 'locale'>>\n\nfunction isModifiedEvent(event: React.MouseEvent): boolean {\n const eventTarget = event.currentTarget as HTMLAnchorElement | SVGAElement\n const target = eventTarget.getAttribute('target')\n return (\n (target && target !== '_self') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey || // triggers resource download\n (event.nativeEvent && event.nativeEvent.which === 2)\n )\n}\n\nfunction linkClicked(\n e: React.MouseEvent,\n href: string,\n as: string,\n linkInstanceRef: React.RefObject<LinkInstance | null>,\n replace?: boolean,\n scroll?: boolean,\n onNavigate?: OnNavigateEventHandler\n): void {\n if (typeof window !== 'undefined') {\n const { nodeName } = e.currentTarget\n\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === 'A'\n if (\n (isAnchorNodeName && isModifiedEvent(e)) ||\n e.currentTarget.hasAttribute('download')\n ) {\n // ignore click for browser’s default behavior\n return\n }\n\n if (!isLocalURL(href)) {\n if (replace) {\n // browser default behavior does not replace the history state\n // so we need to do it manually\n e.preventDefault()\n location.replace(href)\n }\n\n // ignore click for browser’s default behavior\n return\n }\n\n e.preventDefault()\n\n if (onNavigate) {\n let isDefaultPrevented = false\n\n onNavigate({\n preventDefault: () => {\n isDefaultPrevented = true\n },\n })\n\n if (isDefaultPrevented) {\n return\n }\n }\n\n const { dispatchNavigateAction } =\n require('../components/app-router-instance') as typeof import('../components/app-router-instance')\n\n React.startTransition(() => {\n dispatchNavigateAction(\n as || href,\n replace ? 'replace' : 'push',\n scroll ?? true,\n linkInstanceRef.current\n )\n })\n }\n}\n\nfunction formatStringOrUrl(urlObjOrString: UrlObject | string): string {\n if (typeof urlObjOrString === 'string') {\n return urlObjOrString\n }\n\n return formatUrl(urlObjOrString)\n}\n\n/**\n * A React component that extends the HTML `<a>` element to provide\n * [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)\n * and client-side navigation. This is the primary way to navigate between routes in Next.js.\n *\n * @remarks\n * - Prefetching is only enabled in production.\n *\n * @see https://nextjs.org/docs/app/api-reference/components/link\n */\nexport default function LinkComponent(\n props: LinkProps & {\n children: React.ReactNode\n ref: React.Ref<HTMLAnchorElement>\n }\n) {\n const [linkStatus, setOptimisticLinkStatus] = useOptimistic(IDLE_LINK_STATUS)\n\n let children: React.ReactNode\n\n const linkInstanceRef = useRef<LinkInstance | null>(null)\n\n const {\n href: hrefProp,\n as: asProp,\n children: childrenProp,\n prefetch: prefetchProp = null,\n passHref,\n replace,\n shallow,\n scroll,\n onClick,\n onMouseEnter: onMouseEnterProp,\n onTouchStart: onTouchStartProp,\n legacyBehavior = false,\n onNavigate,\n ref: forwardedRef,\n unstable_dynamicOnHover,\n ...restProps\n } = props\n\n children = childrenProp\n\n if (\n legacyBehavior &&\n (typeof children === 'string' || typeof children === 'number')\n ) {\n children = <a>{children}</a>\n }\n\n const router = React.useContext(AppRouterContext)\n\n const prefetchEnabled = prefetchProp !== false\n\n const fetchStrategy =\n prefetchProp !== false\n ? getFetchStrategyFromPrefetchProp(prefetchProp)\n : // TODO: it makes no sense to assign a fetchStrategy when prefetching is disabled.\n FetchStrategy.PPR\n\n if (process.env.NODE_ENV !== 'production') {\n function createPropError(args: {\n key: string\n expected: string\n actual: string\n }) {\n return new Error(\n `Failed prop type: The prop \\`${args.key}\\` expects a ${args.expected} in \\`<Link>\\`, but got \\`${args.actual}\\` instead.` +\n (typeof window !== 'undefined'\n ? \"\\nOpen your browser's console to view the Component stack trace.\"\n : '')\n )\n }\n\n // TypeScript trick for type-guarding:\n const requiredPropsGuard: Record<LinkPropsRequired, true> = {\n href: true,\n } as const\n const requiredProps: LinkPropsRequired[] = Object.keys(\n requiredPropsGuard\n ) as LinkPropsRequired[]\n requiredProps.forEach((key: LinkPropsRequired) => {\n if (key === 'href') {\n if (\n props[key] == null ||\n (typeof props[key] !== 'string' && typeof props[key] !== 'object')\n ) {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: props[key] === null ? 'null' : typeof props[key],\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n const _: never = key\n }\n })\n\n // TypeScript trick for type-guarding:\n const optionalPropsGuard: Record<LinkPropsOptional, true> = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n unstable_dynamicOnHover: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true,\n onNavigate: true,\n } as const\n const optionalProps: LinkPropsOptional[] = Object.keys(\n optionalPropsGuard\n ) as LinkPropsOptional[]\n optionalProps.forEach((key: LinkPropsOptional) => {\n const valType = typeof props[key]\n\n if (key === 'as') {\n if (props[key] && valType !== 'string' && valType !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: valType,\n })\n }\n } else if (\n key === 'onClick' ||\n key === 'onMouseEnter' ||\n key === 'onTouchStart' ||\n key === 'onNavigate'\n ) {\n if (props[key] && valType !== 'function') {\n throw createPropError({\n key,\n expected: '`function`',\n actual: valType,\n })\n }\n } else if (\n key === 'replace' ||\n key === 'scroll' ||\n key === 'shallow' ||\n key === 'passHref' ||\n key === 'legacyBehavior' ||\n key === 'unstable_dynamicOnHover'\n ) {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType,\n })\n }\n } else if (key === 'prefetch') {\n if (\n props[key] != null &&\n valType !== 'boolean' &&\n props[key] !== 'auto'\n ) {\n throw createPropError({\n key,\n expected: '`boolean | \"auto\"`',\n actual: valType,\n })\n }\n } else {\n // TypeScript trick for type-guarding:\n const _: never = key\n }\n })\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (props.locale) {\n warnOnce(\n 'The `locale` prop is not supported in `next/link` while using the `app` router. Read more about app router internalization: https://nextjs.org/docs/app/building-your-application/routing/internationalization'\n )\n }\n if (!asProp) {\n let href: string | undefined\n if (typeof hrefProp === 'string') {\n href = hrefProp\n } else if (\n typeof hrefProp === 'object' &&\n typeof hrefProp.pathname === 'string'\n ) {\n href = hrefProp.pathname\n }\n\n if (href) {\n const hasDynamicSegment = href\n .split('/')\n .some((segment) => segment.startsWith('[') && segment.endsWith(']'))\n\n if (hasDynamicSegment) {\n throw new Error(\n `Dynamic href \\`${href}\\` found in <Link> while using the \\`/app\\` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href`\n )\n }\n }\n }\n }\n\n const { href, as } = React.useMemo(() => {\n const resolvedHref = formatStringOrUrl(hrefProp)\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref,\n }\n }, [hrefProp, asProp])\n\n // This will return the first child, if multiple are provided it will throw an error\n let child: any\n if (legacyBehavior) {\n if ((children as any)?.$$typeof === Symbol.for('react.lazy')) {\n throw new Error(\n `\\`<Link legacyBehavior>\\` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's \\`<a>\\` tag.`\n )\n }\n\n if (process.env.NODE_ENV === 'development') {\n if (onClick) {\n console.warn(\n `\"onClick\" was passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link`\n )\n }\n if (onMouseEnterProp) {\n console.warn(\n `\"onMouseEnter\" was passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link`\n )\n }\n try {\n child = React.Children.only(children)\n } catch (err) {\n if (!children) {\n throw new Error(\n `No children were passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but one child is required https://nextjs.org/docs/messages/link-no-children`\n )\n }\n throw new Error(\n `Multiple children were passed to <Link> with \\`href\\` of \\`${hrefProp}\\` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children` +\n (typeof window !== 'undefined'\n ? \" \\nOpen your browser's console to view the Component stack trace.\"\n : '')\n )\n }\n } else {\n child = React.Children.only(children)\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if ((children as any)?.type === 'a') {\n throw new Error(\n 'Invalid <Link> with <a> child. Please remove <a> or use <Link legacyBehavior>.\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor'\n )\n }\n }\n }\n\n const childRef: any = legacyBehavior\n ? child && typeof child === 'object' && child.ref\n : forwardedRef\n\n // Use a callback ref to attach an IntersectionObserver to the anchor tag on\n // mount. In the future we will also use this to keep track of all the\n // currently mounted <Link> instances, e.g. so we can re-prefetch them after\n // a revalidation or refresh.\n const observeLinkVisibilityOnMount = React.useCallback(\n (element: HTMLAnchorElement | SVGAElement) => {\n if (router !== null) {\n linkInstanceRef.current = mountLinkInstance(\n element,\n href,\n router,\n fetchStrategy,\n prefetchEnabled,\n setOptimisticLinkStatus\n )\n }\n\n return () => {\n if (linkInstanceRef.current) {\n unmountLinkForCurrentNavigation(linkInstanceRef.current)\n linkInstanceRef.current = null\n }\n unmountPrefetchableInstance(element)\n }\n },\n [prefetchEnabled, href, router, fetchStrategy, setOptimisticLinkStatus]\n )\n\n const mergedRef = useMergedRef(observeLinkVisibilityOnMount, childRef)\n\n const childProps: {\n onTouchStart?: React.TouchEventHandler<HTMLAnchorElement>\n onMouseEnter: React.MouseEventHandler<HTMLAnchorElement>\n onClick: React.MouseEventHandler<HTMLAnchorElement>\n href?: string\n ref?: any\n } = {\n ref: mergedRef,\n onClick(e) {\n if (process.env.NODE_ENV !== 'production') {\n if (!e) {\n throw new Error(\n `Component rendered inside next/link has to pass click event to \"onClick\" prop.`\n )\n }\n }\n\n if (!legacyBehavior && typeof onClick === 'function') {\n onClick(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onClick === 'function'\n ) {\n child.props.onClick(e)\n }\n\n if (!router) {\n return\n }\n if (e.defaultPrevented) {\n return\n }\n linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate)\n },\n onMouseEnter(e) {\n if (!legacyBehavior && typeof onMouseEnterProp === 'function') {\n onMouseEnterProp(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onMouseEnter === 'function'\n ) {\n child.props.onMouseEnter(e)\n }\n\n if (!router) {\n return\n }\n if (!prefetchEnabled || process.env.NODE_ENV === 'development') {\n return\n }\n\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true\n onNavigationIntent(\n e.currentTarget as HTMLAnchorElement | SVGAElement,\n upgradeToDynamicPrefetch\n )\n },\n onTouchStart: process.env.__NEXT_LINK_NO_TOUCH_START\n ? undefined\n : function onTouchStart(e) {\n if (!legacyBehavior && typeof onTouchStartProp === 'function') {\n onTouchStartProp(e)\n }\n\n if (\n legacyBehavior &&\n child.props &&\n typeof child.props.onTouchStart === 'function'\n ) {\n child.props.onTouchStart(e)\n }\n\n if (!router) {\n return\n }\n if (!prefetchEnabled) {\n return\n }\n\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true\n onNavigationIntent(\n e.currentTarget as HTMLAnchorElement | SVGAElement,\n upgradeToDynamicPrefetch\n )\n },\n }\n\n // If the url is absolute, we can bypass the logic to prepend the basePath.\n if (isAbsoluteUrl(as)) {\n childProps.href = as\n } else if (\n !legacyBehavior ||\n passHref ||\n (child.type === 'a' && !('href' in child.props))\n ) {\n childProps.href = addBasePath(as)\n }\n\n let link: React.ReactNode\n\n if (legacyBehavior) {\n if (process.env.NODE_ENV === 'development') {\n errorOnce(\n '`legacyBehavior` is deprecated and will be removed in a future ' +\n 'release. A codemod is available to upgrade your components:\\n\\n' +\n 'npx @next/codemod@latest new-link .\\n\\n' +\n 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components'\n )\n }\n link = React.cloneElement(child, childProps)\n } else {\n link = (\n <a {...restProps} {...childProps}>\n {children}\n </a>\n )\n }\n\n return (\n <LinkStatusContext.Provider value={linkStatus}>\n {link}\n </LinkStatusContext.Provider>\n )\n}\n\nconst LinkStatusContext = createContext<\n typeof PENDING_LINK_STATUS | typeof IDLE_LINK_STATUS\n>(IDLE_LINK_STATUS)\n\nexport const useLinkStatus = () => {\n return useContext(LinkStatusContext)\n}\n\nfunction getFetchStrategyFromPrefetchProp(\n prefetchProp: Exclude<LinkProps['prefetch'], undefined | false>\n): PrefetchTaskFetchStrategy {\n if (process.env.__NEXT_CACHE_COMPONENTS) {\n if (prefetchProp === true) {\n return FetchStrategy.Full\n }\n\n // `null` or `\"auto\"`: this is the default \"auto\" mode, where we will prefetch partially if the link is in the viewport.\n // This will also include invalid prop values that don't match the types specified here.\n // (although those should've been filtered out by prop validation in dev)\n prefetchProp satisfies null | 'auto'\n return FetchStrategy.PPR\n } else {\n return prefetchProp === null || prefetchProp === 'auto'\n ? // We default to PPR, and we'll discover whether or not the route supports it with the initial prefetch.\n FetchStrategy.PPR\n : // In the old implementation without runtime prefetches, `prefetch={true}` forces all dynamic data to be prefetched.\n // To preserve backwards-compatibility, anything other than `false`, `null`, or `\"auto\"` results in a full prefetch.\n // (although invalid values should've been filtered out by prop validation in dev)\n FetchStrategy.Full\n }\n}\n","import type { ComponentProps } from 'react'\nimport ClientLinkComponent, { type LinkProps, useLinkStatus } from './link'\n\nexport default function LinkComponent(\n props: ComponentProps<typeof ClientLinkComponent>\n) {\n const isLegacyBehavior = props.legacyBehavior\n const childIsHostComponent =\n typeof props.children === 'string' ||\n typeof props.children === 'number' ||\n typeof (props.children as any)?.type === 'string'\n const childIsClientComponent =\n (props.children as any)?.type?.$$typeof ===\n Symbol.for('react.client.reference')\n\n if (isLegacyBehavior && !childIsHostComponent && !childIsClientComponent) {\n if ((props.children as any)?.type?.$$typeof === Symbol.for('react.lazy')) {\n console.error(\n `Using a Lazy Component as a direct child of \\`<Link legacyBehavior>\\` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link's \\`<a>\\` tag.`\n )\n } else {\n console.error(\n `Using a Server Component as a direct child of \\`<Link legacyBehavior>\\` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link's \\`<a>\\` tag.`\n )\n }\n }\n\n return <ClientLinkComponent {...props} />\n}\n\nexport { type LinkProps, useLinkStatus }\n","__turbopack_context__.v({\n \"className\": \"figtree_e520db2c-module__K_nIxW__className\",\n \"variable\": \"figtree_e520db2c-module__K_nIxW__variable\",\n});\n","__turbopack_context__.v({\n \"className\": \"geist_a71539c9-module__T19VSG__className\",\n \"variable\": \"geist_a71539c9-module__T19VSG__variable\",\n});\n","__turbopack_context__.v({\n \"className\": \"geist_mono_8d43a2aa-module__8Li5zG__className\",\n \"variable\": \"geist_mono_8d43a2aa-module__8Li5zG__variable\",\n});\n","import cssModule from \"@vercel/turbopack-next/internal/font/google/cssmodule.module.css?{%22path%22:%22layout.tsx%22,%22import%22:%22Figtree%22,%22arguments%22:[{%22subsets%22:[%22latin%22],%22variable%22:%22--font-sans%22}],%22variableName%22:%22figtree%22}\";\nconst fontData = {\n className: cssModule.className,\n style: {\n fontFamily: \"'Figtree', 'Figtree Fallback'\",\n fontStyle: \"normal\",\n\n },\n};\n\nif (cssModule.variable != null) {\n fontData.variable = cssModule.variable;\n}\n\nexport default fontData;\n","import cssModule from \"@vercel/turbopack-next/internal/font/google/cssmodule.module.css?{%22path%22:%22layout.tsx%22,%22import%22:%22Geist%22,%22arguments%22:[{%22variable%22:%22--font-geist-sans%22,%22subsets%22:[%22latin%22]}],%22variableName%22:%22geistSans%22}\";\nconst fontData = {\n className: cssModule.className,\n style: {\n fontFamily: \"'Geist', 'Geist Fallback'\",\n fontStyle: \"normal\",\n\n },\n};\n\nif (cssModule.variable != null) {\n fontData.variable = cssModule.variable;\n}\n\nexport default fontData;\n","import cssModule from \"@vercel/turbopack-next/internal/font/google/cssmodule.module.css?{%22path%22:%22layout.tsx%22,%22import%22:%22Geist_Mono%22,%22arguments%22:[{%22variable%22:%22--font-geist-mono%22,%22subsets%22:[%22latin%22]}],%22variableName%22:%22geistMono%22}\";\nconst fontData = {\n className: cssModule.className,\n style: {\n fontFamily: \"'Geist Mono', 'Geist Mono Fallback'\",\n fontStyle: \"normal\",\n\n },\n};\n\nif (cssModule.variable != null) {\n fontData.variable = cssModule.variable;\n}\n\nexport default fontData;\n","import type { Metadata } from \"next\";\nimport { Geist, Geist_Mono, Figtree } from \"next/font/google\";\nimport Link from \"next/link\";\nimport \"./globals.css\";\n\nconst figtree = Figtree({ subsets: [\"latin\"], variable: \"--font-sans\" });\n\nconst geistSans = Geist({\n variable: \"--font-geist-sans\",\n subsets: [\"latin\"],\n});\n\nconst geistMono = Geist_Mono({\n variable: \"--font-geist-mono\",\n subsets: [\"latin\"],\n});\n\nexport const metadata: Metadata = {\n title: \"Agent Eval Playground\",\n description: \"Browse experiment results, inspect agent transcripts, and compare runs\",\n};\n\nexport default function RootLayout({\n children,\n}: Readonly<{\n children: React.ReactNode;\n}>) {\n return (\n <html lang=\"en\" className={`dark ${figtree.variable}`}>\n <body className={`${geistSans.variable} ${geistMono.variable} antialiased`}>\n <div className=\"min-h-screen bg-background\">\n <header className=\"sticky top-0 z-50 bg-background\">\n <div className=\"flex h-14 items-center justify-between px-4 gap-6\">\n <div className=\"flex items-center gap-2\">\n <Link href=\"https://vercel.com\" title=\"Made with love by Vercel\">\n <svg\n data-testid=\"geist-icon\"\n height=\"18\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 16 16\"\n width=\"18\"\n style={{ color: \"currentcolor\" }}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 1L16 15H0L8 1Z\"\n fill=\"currentColor\"\n />\n </svg>\n </Link>\n <span className=\"text-(--ds-gray-500)\">\n <svg\n data-testid=\"geist-icon\"\n height=\"16\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n style={{ color: \"currentcolor\" }}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.01526 15.3939L4.3107 14.7046L10.3107 0.704556L10.6061 0.0151978L11.9849 0.606077L11.6894 1.29544L5.68942 15.2954L5.39398 15.9848L4.01526 15.3939Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n <Link href=\"/\">\n <span className=\"font-medium tracking-tight text-lg\">agent-eval</span>\n </Link>\n </div>\n <nav className=\"flex items-baseline gap-4\">\n <Link\n href=\"/experiments\"\n className=\"text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n Experiments\n </Link>\n <Link\n href=\"/compare\"\n className=\"text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n Compare\n </Link>\n <Link\n href=\"/evals\"\n className=\"text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n Evals\n </Link>\n </nav>\n </div>\n </header>\n <main className=\"mx-auto max-w-5xl px-6 py-8 text-sm\">\n {children}\n </main>\n </div>\n </body>\n </html>\n );\n}\n"],"names":["LinkComponent","useLinkStatus","isModifiedEvent","event","eventTarget","currentTarget","target","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","linkClicked","e","href","as","linkInstanceRef","replace","scroll","onNavigate","window","nodeName","isAnchorNodeName","toUpperCase","hasAttribute","isLocalURL","preventDefault","location","isDefaultPrevented","dispatchNavigateAction","require","React","startTransition","current","formatStringOrUrl","urlObjOrString","formatUrl","props","linkStatus","setOptimisticLinkStatus","useOptimistic","IDLE_LINK_STATUS","children","useRef","hrefProp","asProp","childrenProp","prefetch","prefetchProp","passHref","shallow","onClick","onMouseEnter","onMouseEnterProp","onTouchStart","onTouchStartProp","legacyBehavior","ref","forwardedRef","unstable_dynamicOnHover","restProps","a","router","useContext","AppRouterContext","prefetchEnabled","fetchStrategy","getFetchStrategyFromPrefetchProp","FetchStrategy","PPR","process","env","NODE_ENV","createPropError","args","Error","key","expected","actual","requiredPropsGuard","requiredProps","Object","keys","forEach","_","optionalPropsGuard","optionalProps","valType","locale","warnOnce","pathname","hasDynamicSegment","split","some","segment","startsWith","endsWith","useMemo","resolvedHref","child","$$typeof","Symbol","for","console","warn","Children","only","err","type","childRef","observeLinkVisibilityOnMount","useCallback","element","mountLinkInstance","unmountLinkForCurrentNavigation","unmountPrefetchableInstance","mergedRef","useMergedRef","childProps","defaultPrevented","upgradeToDynamicPrefetch","onNavigationIntent","__NEXT_LINK_NO_TOUCH_START","undefined","isAbsoluteUrl","addBasePath","link","errorOnce","cloneElement","LinkStatusContext","Provider","value","createContext","__NEXT_CACHE_COMPONENTS","Full","isLegacyBehavior","childIsHostComponent","childIsClientComponent","error","ClientLinkComponent"],"mappings":"6CAEA,SAAS,EAAyB,CAAW,EACzC,GAAuB,YAAnB,OAAO,QAAwB,OAAO,KAE1C,IAAI,EAAoB,IAAI,QACxB,EAAmB,IAAI,QAE3B,MAAO,CAAC,EAA2B,SAAS,CAAW,EACnD,OAAO,EAAc,EAAmB,EAC5C,CAAC,CAAE,EACP,CA0BA,EAAQ,CAAC,CAzBT,EAyBY,OAzBH,AAA0B,CAAG,CAAE,CAAW,EAC/C,GAAI,CAAC,GAAe,GAAO,EAAI,UAAU,CAAE,OAAO,EAClD,GAAY,OAAR,GAA+B,UAAf,OAAO,GAAmC,YAAf,OAAO,EAAoB,MAAO,CAAE,QAAS,CAAI,EAEhG,IAAI,EAAQ,EAAyB,GAErC,GAAI,GAAS,EAAM,GAAG,CAAC,GAAM,OAAO,EAAM,GAAG,CAAC,GAE9C,IAAI,EAAS,CAAE,UAAW,IAAK,EAC3B,EAAwB,OAAO,cAAc,EAAI,OAAO,wBAAwB,CAEpF,IAAK,IAAI,KAAO,EACZ,EADiB,CACL,YAAR,GAAqB,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAK,GAAM,CACrE,IAAI,EAAO,EAAwB,OAAO,wBAAwB,CAAC,EAAK,GAAO,KAC3E,IAAS,EAAK,EAAN,CAAS,EAAI,EAAK,GAAA,AAAG,EAAG,OAAO,cAAc,CAAC,EAAQ,EAAK,GAClE,CAAM,CAAC,EAAI,CAAG,CAAG,CAAC,EAC3B,AAD+B,CAQnC,OAJA,EAAO,OAAO,CAAG,EAEb,GAAO,EAAM,GAAG,CAAC,EAAK,GAEnB,CACX,iBCnCA,GAAM,yBAAE,CAAuB,CAAE,CAAA,EAAA,CAAA,CAAA,OAEjC,EAAsB,CAAC,CAAC,EAAwB,iGAFhD,GAAM,yBAAE,CAAuB,CAAE,CAAA,EAAA,CAAA,CAAA,OAEjC,EAAsB,CAAC,CAAC,EAAwB,2MEAhD,OAyBC,CAAA,kBAzBuBA,GA2BCC,aAAa,CAAA,kBAAbA,EAAAA,aAAa,2GA7B6B,CAAA,CAAA,IAAA,IAEpD,SAASD,EACtBuC,CAAiD,EAEjD,IAAMkG,EAAmBlG,EAAMmB,cAAc,CACvCgF,EACsB,AAA1B,iBAAOnG,EAAMK,QAAQ,EACK,UAA1B,OAAOL,EAAMK,QAAQ,EACoB,UAAzC,OAAQL,EAAMK,QAAQ,EAAUkE,KAC5B6B,EACHpG,EAAMK,QAAQ,EAAUkE,MAAMR,WAC/BC,OAAOC,GAAG,CAAC,0BAcb,OAAA,AAZIiC,GAAqBC,GAAyBC,IAC3CpG,CAWP,CAXaK,QAAQ,AADG,EACOkE,KADkB,CACZR,EADqC,SACxBC,OAAOC,GAAG,CAAC,cACzDC,CADwE,OAChEmC,KAAK,CACX,CAAC,8NAGHnC,CAHkO,CAAC,MAG3NmC,KAAK,CACX,CAAC,2MAA2M,AAK3M,CAAA,AAL4M,EAK5M,EAAA,GAAA,EAACC,EAAAA,OAAmB,CAAA,CAAE,GAAGtG,CAAK,EACvC,mOC5BA,EAAA,CAAA,CAAA,CACA,UAAA,6CACA,SAAA,2CACA,cCHA,EAAA,CAAA,CAAA,CACA,UAAA,2CACA,SAAA,yCACA,cCHA,EAAA,CAAA,CAAA,CACA,UAAA,gDACA,SAAA,8CACA,2CCHA,EAAA,EAAA,CAAA,CAAA,OACA,IAAM,EAAW,CACb,UAAW,EAAA,OAAS,CAAC,SAAS,CAC9B,MAAO,CACH,WAAY,gCACZ,UAAW,QAEf,CACJ,CAE0B,MAAM,CAA5B,EAAA,OAAS,CAAC,QAAQ,GAClB,EAAS,QAAQ,CAAG,EAAA,OAAS,CAAC,QAAA,AAAQ,ECX1C,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,IAAM,EAAW,CACb,UAAW,EAAA,OAAS,CAAC,SAAS,CAC9B,MAAO,CACH,WAAY,4BACZ,UAAW,QAEf,CACJ,CAE0B,MAAM,CAA5B,EAAA,OAAS,CAAC,QAAQ,GAClB,EAAS,QAAQ,CAAG,EAAA,OAAS,CAAC,QAAA,AAAQ,ECX1C,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,IAAM,EAAW,CACb,UAAW,EAAA,OAAS,CAAC,SAAS,CAC9B,MAAO,CACH,WAAY,sCACZ,UAAW,QAEf,CACJ,CAE0B,MAAM,CAA5B,EAAA,OAAS,CAAC,QAAQ,GAClB,EAAS,QAAQ,CAAG,EAAA,OAAS,CAAC,QAAA,AAAQ,ECT1C,IAAA,EAAA,EAAA,CAAA,CAAA,OAoBe,SAAS,EAAW,UACjC,CAAQ,CAGR,EACA,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,KAAK,KAAK,UAAW,CAAC,KAAK,EAAE,AHdxB,EGcgC,QAAQ,CAAA,CAAE,UACnD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,CAAA,EAAG,AFfX,EEeqB,QAAQ,CAAC,CAAC,EAAE,ADfjC,ECe2C,QAAQ,CAAC,YAAY,CAAC,UACxE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uCACb,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,UAAU,2CAChB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8DACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,qBAAqB,MAAM,oCACpC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,cAAY,aACZ,OAAO,KACP,eAAe,QACf,QAAQ,YACR,MAAM,KACN,MAAO,CAAE,MAAO,cAAe,WAE/B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CACC,SAAS,UACT,SAAS,UACT,EAAE,oBACF,KAAK,qBAIX,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,gCACd,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,cAAY,aACZ,OAAO,KACP,eAAe,QACf,QAAQ,YACR,MAAM,KACN,MAAO,CAAE,MAAO,cAAe,WAE/B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CACC,SAAS,UACT,SAAS,UACT,EAAE,uJACF,KAAK,qBAIX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CAAC,KAAK,aACT,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,8CAAqC,oBAGzD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CACH,KAAK,eACL,UAAU,iFACX,gBAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CACH,KAAK,WACL,UAAU,iFACX,YAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAI,CAAA,CACH,KAAK,SACL,UAAU,iFACX,kBAMP,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,+CACb,UAMb,mCApFkC,CAChC,MAAO,wBACP,YAAa,wEACf","ignoreList":[0,1,3,4,5,6,7,8,9]}
@@ -0,0 +1,3 @@
1
+ module.exports=[69046,a=>{a.n(a.i(80979))},43619,a=>{a.n(a.i(79962))},13718,a=>{a.n(a.i(85523))},18198,a=>{a.n(a.i(45518))},62212,a=>{a.n(a.i(66114))},22734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},5419,a=>{"use strict";var b=a.i(22734),c=a.i(14747);function d(){return(0,c.resolve)(process.env.RESULTS_DIR||"./results")}function e(){return(0,c.resolve)(process.env.EVALS_DIR||"./evals")}function f(a){let e=d();if(!(0,b.existsSync)(e))return{items:[],total:0};let f=(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let d,f=(0,c.join)(e,a),g=(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort().reverse(),h=0,i=0;if(g.length>0){let a=(0,c.join)(f,g[0]);for(let d of(0,b.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isDirectory())){let e=(0,c.join)(a,d.name,"summary.json");if((0,b.existsSync)(e))try{let a=JSON.parse((0,b.readFileSync)(e,"utf-8"));h+=a.totalRuns??0,i+=a.passedRuns??0}catch{}}h>0&&(d=i/h*100)}return{name:a,timestamps:g,latestTimestamp:g[0]??null,latestPassRate:d,latestTotalRuns:h,latestPassedRuns:i}}),total:g}}function g(a,e){let f=(0,c.join)(d(),a,e);return(0,b.existsSync)(f)?{name:a,timestamp:e,evals:(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).map(a=>{let d=(0,c.join)(f,a),e=(0,c.join)(d,"summary.json"),g={totalRuns:0,passedRuns:0,passRate:"0%",meanDuration:0};if((0,b.existsSync)(e))try{g=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}let h=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()&&a.name.startsWith("run-")).map(a=>a.name).sort().map(a=>{let e=(0,c.join)(d,a,"result.json"),f=null;if((0,b.existsSync)(e))try{f=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}return{name:a,result:f}});return{name:a,totalRuns:g.totalRuns,passedRuns:g.passedRuns,passRate:"string"==typeof g.passRate?parseFloat(g.passRate):g.passRate,meanDuration:g.meanDuration,runs:h}})}:null}function h(a,e,f,g){let h=(0,c.join)(d(),a,e,f,g,"transcript.json");if(!(0,b.existsSync)(h))return null;try{return JSON.parse((0,b.readFileSync)(h,"utf-8"))}catch{return null}}function i(a){let d=e();if(!(0,b.existsSync)(d))return{items:[],total:0};let f=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let e=(0,c.join)(d,a),f=(0,c.join)(e,"PROMPT.md"),g="";return(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8")),{name:a,prompt:g,files:(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isFile()).map(a=>a.name)}}),total:g}}function j(a){let d=(0,c.join)(e(),a);if(!(0,b.existsSync)(d))return null;let f=(0,c.join)(d,"PROMPT.md"),g="";(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8"));let h=[];!function a(d,e){for(let f of(0,b.readdirSync)(d,{withFileTypes:!0})){if("node_modules"===f.name||".git"===f.name)continue;let b=e?`${e}/${f.name}`:f.name;f.isDirectory()?a((0,c.join)(d,f.name),b):h.push(b)}}(d,"");let i={};for(let a of["PROMPT.md","EVAL.ts","EVAL.tsx","package.json"]){let e=(0,c.join)(d,a);if((0,b.existsSync)(e))try{i[a]=(0,b.readFileSync)(e,"utf-8")}catch{}}return{name:a,prompt:g,files:h,fileContents:i}}a.s(["getEvalDetail",()=>j,"getExperimentDetail",()=>g,"getTranscript",()=>h,"listEvals",()=>i,"listExperiments",()=>f])},35613,a=>{"use strict";a.s(["Tabs",()=>c,"TabsContent",()=>d,"TabsList",()=>e,"TabsTrigger",()=>f,"tabsListVariants",()=>g]);var b=a.i(11857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call Tabs() from the server but Tabs is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx <module evaluation>","Tabs"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call TabsContent() from the server but TabsContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx <module evaluation>","TabsContent"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call TabsList() from the server but TabsList is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx <module evaluation>","TabsList"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TabsTrigger() from the server but TabsTrigger is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx <module evaluation>","TabsTrigger"),g=(0,b.registerClientReference)(function(){throw Error("Attempted to call tabsListVariants() from the server but tabsListVariants is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx <module evaluation>","tabsListVariants")},84346,a=>{"use strict";a.s(["Tabs",()=>c,"TabsContent",()=>d,"TabsList",()=>e,"TabsTrigger",()=>f,"tabsListVariants",()=>g]);var b=a.i(11857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call Tabs() from the server but Tabs is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx","Tabs"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call TabsContent() from the server but TabsContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx","TabsContent"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call TabsList() from the server but TabsList is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx","TabsList"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TabsTrigger() from the server but TabsTrigger is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx","TabsTrigger"),g=(0,b.registerClientReference)(function(){throw Error("Attempted to call tabsListVariants() from the server but tabsListVariants is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/tabs.tsx","tabsListVariants")},84336,a=>{"use strict";a.i(35613);var b=a.i(84346);a.n(b)},28372,a=>{"use strict";a.s(["ScrollArea",()=>c,"ScrollBar",()=>d]);var b=a.i(11857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call ScrollArea() from the server but ScrollArea is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/scroll-area.tsx <module evaluation>","ScrollArea"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call ScrollBar() from the server but ScrollBar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/scroll-area.tsx <module evaluation>","ScrollBar")},22448,a=>{"use strict";a.s(["ScrollArea",()=>c,"ScrollBar",()=>d]);var b=a.i(11857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call ScrollArea() from the server but ScrollArea is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/scroll-area.tsx","ScrollArea"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call ScrollBar() from the server but ScrollBar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/scroll-area.tsx","ScrollBar")},46804,a=>{"use strict";a.i(28372);var b=a.i(22448);a.n(b)},86568,a=>{"use strict";var b=a.i(7997);a.i(70396);var c=a.i(73727),d=a.i(95936),e=a.i(20954),f=a.i(84336),g=a.i(46804);function h({data:a}){let c=a.fileContents?.["EVAL.ts"]||a.fileContents?.["EVAL.tsx"],e=a.fileContents?.["EVAL.ts"]?"EVAL.ts":"EVAL.tsx",h=a.fileContents?.["package.json"];return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(d.default,{href:"/evals",className:"cursor-pointer hover:underline underline-offset-4",children:"Evals"}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("span",{children:a.name})]}),(0,b.jsx)("div",{children:(0,b.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:a.name})}),(0,b.jsxs)(f.Tabs,{defaultValue:"prompt",className:"w-full",children:[(0,b.jsxs)(f.TabsList,{children:[(0,b.jsx)(f.TabsTrigger,{value:"prompt",children:"PROMPT.md"}),c&&(0,b.jsx)(f.TabsTrigger,{value:"eval",children:e}),h&&(0,b.jsx)(f.TabsTrigger,{value:"package",children:"package.json"}),(0,b.jsx)(f.TabsTrigger,{value:"files",children:"Files"})]}),(0,b.jsx)(f.TabsContent,{value:"prompt",className:"mt-4",children:(0,b.jsx)(g.ScrollArea,{className:"h-[calc(100vh-300px)]",children:(0,b.jsx)("pre",{className:"text-sm font-mono whitespace-pre-wrap rounded-lg bg-muted p-4",children:a.prompt||"No PROMPT.md found."})})}),c&&(0,b.jsx)(f.TabsContent,{value:"eval",className:"mt-4",children:(0,b.jsx)(g.ScrollArea,{className:"h-[calc(100vh-300px)]",children:(0,b.jsx)("pre",{className:"text-sm font-mono whitespace-pre-wrap rounded-lg bg-muted p-4 overflow-x-auto",children:c})})}),h&&(0,b.jsx)(f.TabsContent,{value:"package",className:"mt-4",children:(0,b.jsx)(g.ScrollArea,{className:"h-[calc(100vh-300px)]",children:(0,b.jsx)("pre",{className:"text-sm font-mono whitespace-pre-wrap rounded-lg bg-muted p-4 overflow-x-auto",children:h})})}),(0,b.jsxs)(f.TabsContent,{value:"files",className:"mt-4",children:[(0,b.jsxs)("div",{className:"text-sm text-muted-foreground mb-3",children:[a.files.length," files"]}),(0,b.jsx)("div",{className:"space-y-1",children:a.files.map(a=>(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm font-mono bg-muted rounded-lg px-3 py-1.5",children:[(0,b.jsx)(i,{filename:a}),(0,b.jsx)("span",{children:a})]},a))})]})]})]})}function i({filename:a}){let c=a.split(".").pop()?.toLowerCase();return(0,b.jsx)(e.Badge,{variant:"outline",className:"text-[10px] font-mono px-1 py-0 h-5 w-6 flex items-center justify-center",children:{ts:"TS",tsx:"TX",js:"JS",json:"{}",md:"MD",css:"CS",html:"HT"}[c||""]||"F"})}var j=a.i(5419);async function k({params:a}){let{name:d}=await a,e=decodeURIComponent(d),f=(0,j.getEvalDetail)(e);return f||(0,c.notFound)(),(0,b.jsx)(h,{data:f})}a.s(["default",()=>k,"dynamic",0,"force-dynamic"],86568)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__a216b589._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/playground/lib/data.ts","../../../../../../packages/playground/components/ui/tabs.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/components/ui/scroll-area.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/app/evals/%5Bname%5D/page.tsx","../../../../../../packages/playground/components/EvalDetail.tsx"],"sourcesContent":["/**\n * Server-side data access for the playground.\n * Reads JSON files from the results/ and evals/ directories.\n * Directory paths are provided via RESULTS_DIR and EVALS_DIR env vars.\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"fs\";\nimport { join, resolve } from \"path\";\n\nfunction getResultsDir(): string {\n return resolve(process.env.RESULTS_DIR || \"./results\");\n}\n\nfunction getEvalsDir(): string {\n return resolve(process.env.EVALS_DIR || \"./evals\");\n}\n\n/** List experiments from the results directory. Pass limit to cap expensive per-item reads. */\nexport function listExperiments(limit?: number) {\n const resultsDir = getResultsDir();\n\n if (!existsSync(resultsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(resultsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const expDir = join(resultsDir, name);\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n let latestPassRate: number | undefined;\n let latestTotalRuns = 0;\n let latestPassedRuns = 0;\n\n if (timestamps.length > 0) {\n const latestDir = join(expDir, timestamps[0]);\n const evalDirs = readdirSync(latestDir, { withFileTypes: true }).filter(\n (e) => e.isDirectory()\n );\n\n for (const evalDir of evalDirs) {\n const summaryPath = join(latestDir, evalDir.name, \"summary.json\");\n if (existsSync(summaryPath)) {\n try {\n const summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n latestTotalRuns += summary.totalRuns ?? 0;\n latestPassedRuns += summary.passedRuns ?? 0;\n } catch {\n // Skip invalid summary files\n }\n }\n }\n\n if (latestTotalRuns > 0) {\n latestPassRate = (latestPassedRuns / latestTotalRuns) * 100;\n }\n }\n\n return {\n name,\n timestamps,\n latestTimestamp: timestamps[0] ?? null,\n latestPassRate,\n latestTotalRuns,\n latestPassedRuns,\n };\n });\n\n return { items, total };\n}\n\n/** Get timestamps for a specific experiment */\nexport function getExperiment(name: string) {\n const expDir = join(getResultsDir(), name);\n\n if (!existsSync(expDir)) {\n return null;\n }\n\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n return { name, timestamps, latestTimestamp: timestamps[0] ?? null };\n}\n\n/** Get full experiment detail for a specific timestamp */\nexport function getExperimentDetail(name: string, timestamp: string) {\n const runDir = join(getResultsDir(), name, timestamp);\n\n if (!existsSync(runDir)) {\n return null;\n }\n\n const evalDirs = readdirSync(runDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const evals = evalDirs.map((evalName) => {\n const evalDir = join(runDir, evalName);\n const summaryPath = join(evalDir, \"summary.json\");\n\n let summary = {\n totalRuns: 0,\n passedRuns: 0,\n passRate: \"0%\",\n meanDuration: 0,\n };\n if (existsSync(summaryPath)) {\n try {\n summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n } catch {\n // Use defaults\n }\n }\n\n // List run directories\n const runDirs = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name.startsWith(\"run-\"))\n .map((e) => e.name)\n .sort();\n\n // Read each run's result.json\n const runs = runDirs.map((runDirName) => {\n const resultPath = join(evalDir, runDirName, \"result.json\");\n let result = null;\n if (existsSync(resultPath)) {\n try {\n result = JSON.parse(readFileSync(resultPath, \"utf-8\"));\n } catch {\n // Skip\n }\n }\n return { name: runDirName, result };\n });\n\n return {\n name: evalName,\n totalRuns: summary.totalRuns,\n passedRuns: summary.passedRuns,\n passRate:\n typeof summary.passRate === \"string\"\n ? parseFloat(summary.passRate)\n : summary.passRate,\n meanDuration: summary.meanDuration,\n runs,\n };\n });\n\n return { name, timestamp, evals };\n}\n\n/** Get result for a specific run */\nexport function getRunResult(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const resultPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"result.json\"\n );\n\n if (!existsSync(resultPath)) {\n return null;\n }\n\n try {\n return { result: JSON.parse(readFileSync(resultPath, \"utf-8\")) };\n } catch {\n return null;\n }\n}\n\n/** Get parsed transcript for a specific run */\nexport function getTranscript(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const transcriptPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"transcript.json\"\n );\n\n if (!existsSync(transcriptPath)) {\n return null;\n }\n\n try {\n return JSON.parse(readFileSync(transcriptPath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\n/** List evals from the evals directory. Pass limit to cap per-item reads. */\nexport function listEvals(limit?: number) {\n const evalsDir = getEvalsDir();\n\n if (!existsSync(evalsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(evalsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const evalDir = join(evalsDir, name);\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n const files = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isFile())\n .map((e) => e.name);\n\n return { name, prompt, files };\n });\n\n return { items, total };\n}\n\n/** Get detail for a specific eval */\nexport function getEvalDetail(name: string) {\n const evalDir = join(getEvalsDir(), name);\n\n if (!existsSync(evalDir)) {\n return null;\n }\n\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n // Recursively list files\n const files: string[] = [];\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relativePath);\n } else {\n files.push(relativePath);\n }\n }\n }\n walk(evalDir, \"\");\n\n // Read file contents for key files\n const fileContents: Record<string, string> = {};\n const keyFiles = [\"PROMPT.md\", \"EVAL.ts\", \"EVAL.tsx\", \"package.json\"];\n for (const file of keyFiles) {\n const filePath = join(evalDir, file);\n if (existsSync(filePath)) {\n try {\n fileContents[file] = readFileSync(filePath, \"utf-8\");\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n return { name, prompt, files, fileContents };\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const Tabs = registerClientReference(\n function() { throw new Error(\"Attempted to call Tabs() from the server but Tabs is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/tabs.tsx\",\n \"Tabs\",\n);\nexport const TabsContent = registerClientReference(\n function() { throw new Error(\"Attempted to call TabsContent() from the server but TabsContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/tabs.tsx\",\n \"TabsContent\",\n);\nexport const TabsList = registerClientReference(\n function() { throw new Error(\"Attempted to call TabsList() from the server but TabsList is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/tabs.tsx\",\n \"TabsList\",\n);\nexport const TabsTrigger = registerClientReference(\n function() { throw new Error(\"Attempted to call TabsTrigger() from the server but TabsTrigger is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/tabs.tsx\",\n \"TabsTrigger\",\n);\nexport const tabsListVariants = registerClientReference(\n function() { throw new Error(\"Attempted to call tabsListVariants() from the server but tabsListVariants is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/tabs.tsx\",\n \"tabsListVariants\",\n);\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ScrollArea = registerClientReference(\n function() { throw new Error(\"Attempted to call ScrollArea() from the server but ScrollArea is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/scroll-area.tsx\",\n \"ScrollArea\",\n);\nexport const ScrollBar = registerClientReference(\n function() { throw new Error(\"Attempted to call ScrollBar() from the server but ScrollBar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/scroll-area.tsx\",\n \"ScrollBar\",\n);\n","import { notFound } from \"next/navigation\";\nimport { EvalDetail } from \"@/components/EvalDetail\";\nimport { getEvalDetail } from \"@/lib/data\";\n\nexport const dynamic = \"force-dynamic\";\n\nexport default async function EvalDetailRoute({\n params,\n}: {\n params: Promise<{ name: string }>;\n}) {\n const { name } = await params;\n const decodedName = decodeURIComponent(name);\n\n const data = getEvalDetail(decodedName);\n\n if (!data) {\n notFound();\n }\n\n return <EvalDetail data={data} />;\n}\n","import Link from \"next/link\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\n\ninterface EvalDetailData {\n name: string;\n prompt: string;\n files: string[];\n fileContents?: Record<string, string>;\n}\n\ninterface EvalDetailProps {\n data: EvalDetailData;\n}\n\nexport function EvalDetail({ data }: EvalDetailProps) {\n const evalFile = data.fileContents?.[\"EVAL.ts\"] || data.fileContents?.[\"EVAL.tsx\"];\n const evalFileName = data.fileContents?.[\"EVAL.ts\"] ? \"EVAL.ts\" : \"EVAL.tsx\";\n const packageJson = data.fileContents?.[\"package.json\"];\n\n return (\n <div className=\"space-y-6\">\n {/* Breadcrumb */}\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Link href=\"/evals\" className=\"cursor-pointer hover:underline underline-offset-4\">\n Evals\n </Link>\n <span>/</span>\n <span>{data.name}</span>\n </div>\n\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{data.name}</h1>\n </div>\n\n <Tabs defaultValue=\"prompt\" className=\"w-full\">\n <TabsList>\n <TabsTrigger value=\"prompt\">PROMPT.md</TabsTrigger>\n {evalFile && <TabsTrigger value=\"eval\">{evalFileName}</TabsTrigger>}\n {packageJson && <TabsTrigger value=\"package\">package.json</TabsTrigger>}\n <TabsTrigger value=\"files\">Files</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"prompt\" className=\"mt-4\">\n <ScrollArea className=\"h-[calc(100vh-300px)]\">\n <pre className=\"text-sm font-mono whitespace-pre-wrap rounded-lg bg-muted p-4\">\n {data.prompt || \"No PROMPT.md found.\"}\n </pre>\n </ScrollArea>\n </TabsContent>\n\n {evalFile && (\n <TabsContent value=\"eval\" className=\"mt-4\">\n <ScrollArea className=\"h-[calc(100vh-300px)]\">\n <pre className=\"text-sm font-mono whitespace-pre-wrap rounded-lg bg-muted p-4 overflow-x-auto\">\n {evalFile}\n </pre>\n </ScrollArea>\n </TabsContent>\n )}\n\n {packageJson && (\n <TabsContent value=\"package\" className=\"mt-4\">\n <ScrollArea className=\"h-[calc(100vh-300px)]\">\n <pre className=\"text-sm font-mono whitespace-pre-wrap rounded-lg bg-muted p-4 overflow-x-auto\">\n {packageJson}\n </pre>\n </ScrollArea>\n </TabsContent>\n )}\n\n <TabsContent value=\"files\" className=\"mt-4\">\n <div className=\"text-sm text-muted-foreground mb-3\">\n {data.files.length} files\n </div>\n <div className=\"space-y-1\">\n {data.files.map((file) => (\n <div\n key={file}\n className=\"flex items-center gap-2 text-sm font-mono bg-muted rounded-lg px-3 py-1.5\"\n >\n <FileIcon filename={file} />\n <span>{file}</span>\n </div>\n ))}\n </div>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nfunction FileIcon({ filename }: { filename: string }) {\n const ext = filename.split(\".\").pop()?.toLowerCase();\n\n const iconMap: Record<string, string> = {\n ts: \"TS\",\n tsx: \"TX\",\n js: \"JS\",\n json: \"{}\",\n md: \"MD\",\n css: \"CS\",\n html: \"HT\",\n };\n\n const label = iconMap[ext || \"\"] || \"F\";\n\n return (\n <Badge variant=\"outline\" className=\"text-[10px] font-mono px-1 py-0 h-5 w-6 flex items-center justify-center\">\n {label}\n </Badge>\n );\n}\n"],"names":[],"mappings":"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","ignoreList":[1,2]}
@@ -0,0 +1,3 @@
1
+ module.exports=[18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},24725,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},43285,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/dynamic-access-async-storage.external.js",()=>require("next/dist/server/app-render/dynamic-access-async-storage.external.js"))},42602,(a,b,c)=>{"use strict";b.exports=a.r(18622)},87924,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactJsxRuntime},72131,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].React},9270,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.AppRouterContext},38783,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactServerDOMTurbopackClient},35112,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactDOM},51234,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"HandleISRError",{enumerable:!0,get:function(){return e}});let d=a.r(56704).workAsyncStorage;function e({error:a}){if(d){let b=d.getStore();if(b?.isStaticGeneration)throw a&&console.error(a),a}return null}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},40622,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return h}});let d=a.r(87924),e=a.r(51234),f={fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},g={fontSize:"14px",fontWeight:400,lineHeight:"28px",margin:"0 8px"},h=function({error:a}){let b=a?.digest;return(0,d.jsxs)("html",{id:"__next_error__",children:[(0,d.jsx)("head",{}),(0,d.jsxs)("body",{children:[(0,d.jsx)(e.HandleISRError,{error:a}),(0,d.jsx)("div",{style:f,children:(0,d.jsxs)("div",{children:[(0,d.jsxs)("h2",{style:g,children:["Application error: a ",b?"server":"client","-side exception has occurred while loading ",window.location.hostname," (see the"," ",b?"server logs":"browser console"," for more information)."]}),b?(0,d.jsx)("p",{style:g,children:`Digest: ${b}`}):null]})})]})]})};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__a218194e._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../../../node_modules/next/src/client/components/handle-isr-error.tsx","../../../../../../node_modules/next/src/client/components/builtin/global-error.tsx"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","const workAsyncStorage =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/work-async-storage.external') as typeof import('../../server/app-render/work-async-storage.external')\n ).workAsyncStorage\n : undefined\n\n// if we are revalidating we want to re-throw the error so the\n// function crashes so we can maintain our previous cache\n// instead of caching the error page\nexport function HandleISRError({ error }: { error: any }) {\n if (workAsyncStorage) {\n const store = workAsyncStorage.getStore()\n if (store?.isStaticGeneration) {\n if (error) {\n console.error(error)\n }\n throw error\n }\n }\n\n return null\n}\n","'use client'\n\nimport { HandleISRError } from '../handle-isr-error'\n\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily:\n 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: '28px',\n margin: '0 8px',\n },\n} as const\n\nexport type GlobalErrorComponent = React.ComponentType<{\n error: any\n}>\nfunction DefaultGlobalError({ error }: { error: any }) {\n const digest: string | undefined = error?.digest\n return (\n <html id=\"__next_error__\">\n <head></head>\n <body>\n <HandleISRError error={error} />\n <div style={styles.error}>\n <div>\n <h2 style={styles.text}>\n Application error: a {digest ? 'server' : 'client'}-side exception\n has occurred while loading {window.location.hostname} (see the{' '}\n {digest ? 'server logs' : 'browser console'} for more\n information).\n </h2>\n {digest ? <p style={styles.text}>{`Digest: ${digest}`}</p> : null}\n </div>\n </div>\n </body>\n </html>\n )\n}\n\n// Exported so that the import signature in the loaders can be identical to user\n// supplied custom global error signatures.\nexport default DefaultGlobalError\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","vendored","ReactJsxRuntime","React","AppRouterContext","ReactServerDOMTurbopackClient","ReactDOM","HandleISRError","workAsyncStorage","window","undefined","error","store","getStore","isStaticGeneration","console","styles","fontFamily","height","textAlign","display","flexDirection","alignItems","justifyContent","text","fontSize","fontWeight","lineHeight","margin","DefaultGlobalError","digest","html","id","head","body","div","style","h2","location","hostname","p"],"mappings":"0kCA0BQG,GAAOC,OAAO,CAAGC,EAAQ,CAAA,CAAA,IAAA,iCC1BjCF,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEC,eAAe,+BCFxCP,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEE,KAAK,8BCF9BR,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,QAAW,CAACG,gBAAgB,+BCFvCT,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEI,6BAA6B,+BCFtDV,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEK,QAAQ,wGCQjBC,iBAAAA,qCAAAA,KAVhB,IAAMC,EAGEX,EAAQ,CAAA,CAAA,IAAA,GACRW,MAHN,OAAOC,GAGe,CAMjB,EALDC,KAJc,EASJH,EAAe,OAAEI,CAAK,CAAkB,EACtD,GAAIH,EAAkB,CACpB,IAAMI,EAAQJ,EAAiBK,QAAQ,GACvC,GAAID,GAAOE,mBAIT,CAJ6B,KACzBH,GACFI,IADS,IACDJ,KAAK,CAACA,GAEVA,CAEV,CAEA,OAAO,IACT,+TC8BA,OADA,AADA,GAEA,qCAAA,GAD2C,uBAjDZ,CAAA,CAAA,IAAA,KAGtB,CAELM,EA2C4E,SA1C1E,8FACFC,OAAQ,QACRC,UAAW,SACXC,QAAS,OACTC,cAAe,SACfC,WAAY,SACZC,eAAgB,QAClB,IACM,CACJE,SAAU,OACVC,WAAY,IACZC,WAAY,OACZC,OAAQ,OACV,EA+BF,EAzBA,SAA4B,AAAnBC,AAyBMA,OAzBelB,CAAK,CAAkB,EACnD,IAAMmB,EAA6BnB,GAAOmB,OAC1C,MACE,CADF,EACE,EAAA,IAAA,EAACC,CADH,MACGA,CAAKC,GAAG,2BACP,CAAA,EAAA,EAAA,GAAA,EAACC,OAAAA,CAAAA,GACD,CAAA,EAAA,EAAA,IAAA,EAACC,OAAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC3B,EAAAA,cAAc,CAAA,CAACI,MAAOA,IACvB,CAAA,EAAA,EAAA,GAAA,EAACwB,MAAAA,CAAIC,KAAAA,EAAOpB,OAAOL,GACjB,CAAA,CADsB,CACtB,EAAA,IAAA,EAACwB,CAAD,KAACA,WACC,CAAA,EAAA,EAAA,IAAA,EAACE,KAAAA,CAAGD,KAAAA,EAAOpB,OAAOQ,IAAI,AAAE,wBACAM,EAAS,SAAW,SAAS,8CACvBrB,OAAO6B,QAAQ,CAACC,QAAQ,CAAC,YAAU,IAC9DT,EAAS,cAAgB,kBAAkB,6BAG7CA,EAAS,CAAA,EAAA,EAAA,EAATA,CAAS,EAACU,IAAAA,CAAEJ,GAAZN,EAAYM,EAAOpB,OAAOQ,GAAO,CAAH,AAAI,QAAQ,EAAEM,EAAAA,CAAQ,GAAQ,eAMzE","ignoreList":[0,1,2,3,4,5,6,7]}
@@ -0,0 +1,3 @@
1
+ module.exports=[69046,a=>{a.n(a.i(80979))},43619,a=>{a.n(a.i(79962))},13718,a=>{a.n(a.i(85523))},18198,a=>{a.n(a.i(45518))},62212,a=>{a.n(a.i(66114))},22734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},5419,a=>{"use strict";var b=a.i(22734),c=a.i(14747);function d(){return(0,c.resolve)(process.env.RESULTS_DIR||"./results")}function e(){return(0,c.resolve)(process.env.EVALS_DIR||"./evals")}function f(a){let e=d();if(!(0,b.existsSync)(e))return{items:[],total:0};let f=(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let d,f=(0,c.join)(e,a),g=(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort().reverse(),h=0,i=0;if(g.length>0){let a=(0,c.join)(f,g[0]);for(let d of(0,b.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isDirectory())){let e=(0,c.join)(a,d.name,"summary.json");if((0,b.existsSync)(e))try{let a=JSON.parse((0,b.readFileSync)(e,"utf-8"));h+=a.totalRuns??0,i+=a.passedRuns??0}catch{}}h>0&&(d=i/h*100)}return{name:a,timestamps:g,latestTimestamp:g[0]??null,latestPassRate:d,latestTotalRuns:h,latestPassedRuns:i}}),total:g}}function g(a,e){let f=(0,c.join)(d(),a,e);return(0,b.existsSync)(f)?{name:a,timestamp:e,evals:(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).map(a=>{let d=(0,c.join)(f,a),e=(0,c.join)(d,"summary.json"),g={totalRuns:0,passedRuns:0,passRate:"0%",meanDuration:0};if((0,b.existsSync)(e))try{g=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}let h=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()&&a.name.startsWith("run-")).map(a=>a.name).sort().map(a=>{let e=(0,c.join)(d,a,"result.json"),f=null;if((0,b.existsSync)(e))try{f=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}return{name:a,result:f}});return{name:a,totalRuns:g.totalRuns,passedRuns:g.passedRuns,passRate:"string"==typeof g.passRate?parseFloat(g.passRate):g.passRate,meanDuration:g.meanDuration,runs:h}})}:null}function h(a,e,f,g){let h=(0,c.join)(d(),a,e,f,g,"transcript.json");if(!(0,b.existsSync)(h))return null;try{return JSON.parse((0,b.readFileSync)(h,"utf-8"))}catch{return null}}function i(a){let d=e();if(!(0,b.existsSync)(d))return{items:[],total:0};let f=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let e=(0,c.join)(d,a),f=(0,c.join)(e,"PROMPT.md"),g="";return(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8")),{name:a,prompt:g,files:(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isFile()).map(a=>a.name)}}),total:g}}function j(a){let d=(0,c.join)(e(),a);if(!(0,b.existsSync)(d))return null;let f=(0,c.join)(d,"PROMPT.md"),g="";(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8"));let h=[];!function a(d,e){for(let f of(0,b.readdirSync)(d,{withFileTypes:!0})){if("node_modules"===f.name||".git"===f.name)continue;let b=e?`${e}/${f.name}`:f.name;f.isDirectory()?a((0,c.join)(d,f.name),b):h.push(b)}}(d,"");let i={};for(let a of["PROMPT.md","EVAL.ts","EVAL.tsx","package.json"]){let e=(0,c.join)(d,a);if((0,b.existsSync)(e))try{i[a]=(0,b.readFileSync)(e,"utf-8")}catch{}}return{name:a,prompt:g,files:h,fileContents:i}}a.s(["getEvalDetail",()=>j,"getExperimentDetail",()=>g,"getTranscript",()=>h,"listEvals",()=>i,"listExperiments",()=>f])},22977,a=>{"use strict";var b=a.i(7997),c=a.i(95387);function d({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col",a),...e})}function e({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]",a),...d})}function f({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("text-sm font-medium",a),...d})}function g({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})}a.s(["Card",()=>d,"CardContent",()=>g,"CardHeader",()=>e,"CardTitle",()=>f])},31636,a=>{"use strict";a.s(["ShowMore",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ShowMore() from the server but ShowMore is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ShowMore.tsx <module evaluation>","ShowMore")},15821,a=>{"use strict";a.s(["ShowMore",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ShowMore() from the server but ShowMore is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ShowMore.tsx","ShowMore")},93835,a=>{"use strict";a.i(31636);var b=a.i(15821);a.n(b)},33383,a=>{"use strict";var b=a.i(7997),c=a.i(95936),d=a.i(20954),e=a.i(22977),f=a.i(93835);function g({experiments:a,total:g,showAll:h}){return 0===a.length?(0,b.jsx)(e.Card,{children:(0,b.jsxs)(e.CardContent,{className:"py-12 text-center",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-lg",children:"No experiments found"}),(0,b.jsxs)("p",{className:"text-muted-foreground text-sm mt-2",children:["Run an experiment with ",(0,b.jsx)("code",{className:"text-foreground bg-muted px-1.5 py-0.5 rounded text-xs",children:"agent-eval <config>"})," to see results here."]})]})}):(0,b.jsx)(e.Card,{children:(0,b.jsx)(e.CardContent,{className:"pt-0",children:(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"grid grid-cols-[1fr_auto_auto_auto] gap-4 px-3 py-2 text-xs text-muted-foreground font-medium border-b border-border",children:[(0,b.jsx)("span",{children:"Name"}),(0,b.jsx)("span",{className:"w-12 text-right",children:"Runs"}),(0,b.jsx)("span",{className:"w-24",children:"Pass Rate"}),(0,b.jsx)("span",{className:"w-44",children:"Latest Run"})]}),(0,b.jsx)(f.ShowMore,{total:g,showAllHref:h?void 0:"/experiments?all",children:a.map(a=>(0,b.jsxs)(c.default,{href:a.latestTimestamp?`/experiments/${encodeURIComponent(a.name)}/${encodeURIComponent(a.latestTimestamp)}`:"#",className:"grid grid-cols-[1fr_auto_auto_auto] gap-4 items-center px-3 py-2.5 cursor-pointer transition-colors hover:bg-muted rounded-md",children:[(0,b.jsx)("span",{className:"font-medium truncate",children:a.name}),(0,b.jsx)("span",{className:"w-12 text-right text-muted-foreground",children:a.timestamps.length}),(0,b.jsx)("span",{className:"w-24",children:void 0!==a.latestPassRate?(0,b.jsxs)("span",{className:"flex items-center gap-2",children:[(0,b.jsxs)(d.Badge,{variant:100===a.latestPassRate?"default":a.latestPassRate>=50?"secondary":"destructive",children:[a.latestPassRate.toFixed(0),"%"]}),(0,b.jsxs)("span",{className:"text-xs text-muted-foreground",children:[a.latestPassedRuns,"/",a.latestTotalRuns]})]}):(0,b.jsx)("span",{className:"text-muted-foreground",children:"--"})}),(0,b.jsx)("span",{className:"w-44 text-xs text-muted-foreground",children:a.latestTimestamp?function(a){try{let b=a.replace(/T(\d{2})-(\d{2})-(\d{2})/,"T$1:$2:$3"),c=new Date(b);if(isNaN(c.getTime()))return a;return c.toLocaleString()}catch{return a}}(a.latestTimestamp):"--"})]},a.name))})]})})})}var h=a.i(5419);async function i({searchParams:a}){let{all:c}=await a,d=void 0!==c,{items:e,total:f}=(0,h.listExperiments)(d?void 0:20);return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Experiments"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1",children:"Browse and inspect your agent evaluation results."})]}),(0,b.jsx)(g,{experiments:e,total:f,showAll:d})]})}a.s(["default",()=>i,"dynamic",0,"force-dynamic"],33383)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__ac2a456c._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/playground/lib/data.ts","../../../../../../packages/playground/components/ui/card.tsx","../../../../../../packages/playground/components/ShowMore.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/components/ExperimentList.tsx","../../../../../../packages/playground/app/experiments/page.tsx"],"sourcesContent":["/**\n * Server-side data access for the playground.\n * Reads JSON files from the results/ and evals/ directories.\n * Directory paths are provided via RESULTS_DIR and EVALS_DIR env vars.\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"fs\";\nimport { join, resolve } from \"path\";\n\nfunction getResultsDir(): string {\n return resolve(process.env.RESULTS_DIR || \"./results\");\n}\n\nfunction getEvalsDir(): string {\n return resolve(process.env.EVALS_DIR || \"./evals\");\n}\n\n/** List experiments from the results directory. Pass limit to cap expensive per-item reads. */\nexport function listExperiments(limit?: number) {\n const resultsDir = getResultsDir();\n\n if (!existsSync(resultsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(resultsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const expDir = join(resultsDir, name);\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n let latestPassRate: number | undefined;\n let latestTotalRuns = 0;\n let latestPassedRuns = 0;\n\n if (timestamps.length > 0) {\n const latestDir = join(expDir, timestamps[0]);\n const evalDirs = readdirSync(latestDir, { withFileTypes: true }).filter(\n (e) => e.isDirectory()\n );\n\n for (const evalDir of evalDirs) {\n const summaryPath = join(latestDir, evalDir.name, \"summary.json\");\n if (existsSync(summaryPath)) {\n try {\n const summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n latestTotalRuns += summary.totalRuns ?? 0;\n latestPassedRuns += summary.passedRuns ?? 0;\n } catch {\n // Skip invalid summary files\n }\n }\n }\n\n if (latestTotalRuns > 0) {\n latestPassRate = (latestPassedRuns / latestTotalRuns) * 100;\n }\n }\n\n return {\n name,\n timestamps,\n latestTimestamp: timestamps[0] ?? null,\n latestPassRate,\n latestTotalRuns,\n latestPassedRuns,\n };\n });\n\n return { items, total };\n}\n\n/** Get timestamps for a specific experiment */\nexport function getExperiment(name: string) {\n const expDir = join(getResultsDir(), name);\n\n if (!existsSync(expDir)) {\n return null;\n }\n\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n return { name, timestamps, latestTimestamp: timestamps[0] ?? null };\n}\n\n/** Get full experiment detail for a specific timestamp */\nexport function getExperimentDetail(name: string, timestamp: string) {\n const runDir = join(getResultsDir(), name, timestamp);\n\n if (!existsSync(runDir)) {\n return null;\n }\n\n const evalDirs = readdirSync(runDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const evals = evalDirs.map((evalName) => {\n const evalDir = join(runDir, evalName);\n const summaryPath = join(evalDir, \"summary.json\");\n\n let summary = {\n totalRuns: 0,\n passedRuns: 0,\n passRate: \"0%\",\n meanDuration: 0,\n };\n if (existsSync(summaryPath)) {\n try {\n summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n } catch {\n // Use defaults\n }\n }\n\n // List run directories\n const runDirs = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name.startsWith(\"run-\"))\n .map((e) => e.name)\n .sort();\n\n // Read each run's result.json\n const runs = runDirs.map((runDirName) => {\n const resultPath = join(evalDir, runDirName, \"result.json\");\n let result = null;\n if (existsSync(resultPath)) {\n try {\n result = JSON.parse(readFileSync(resultPath, \"utf-8\"));\n } catch {\n // Skip\n }\n }\n return { name: runDirName, result };\n });\n\n return {\n name: evalName,\n totalRuns: summary.totalRuns,\n passedRuns: summary.passedRuns,\n passRate:\n typeof summary.passRate === \"string\"\n ? parseFloat(summary.passRate)\n : summary.passRate,\n meanDuration: summary.meanDuration,\n runs,\n };\n });\n\n return { name, timestamp, evals };\n}\n\n/** Get result for a specific run */\nexport function getRunResult(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const resultPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"result.json\"\n );\n\n if (!existsSync(resultPath)) {\n return null;\n }\n\n try {\n return { result: JSON.parse(readFileSync(resultPath, \"utf-8\")) };\n } catch {\n return null;\n }\n}\n\n/** Get parsed transcript for a specific run */\nexport function getTranscript(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const transcriptPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"transcript.json\"\n );\n\n if (!existsSync(transcriptPath)) {\n return null;\n }\n\n try {\n return JSON.parse(readFileSync(transcriptPath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\n/** List evals from the evals directory. Pass limit to cap per-item reads. */\nexport function listEvals(limit?: number) {\n const evalsDir = getEvalsDir();\n\n if (!existsSync(evalsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(evalsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const evalDir = join(evalsDir, name);\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n const files = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isFile())\n .map((e) => e.name);\n\n return { name, prompt, files };\n });\n\n return { items, total };\n}\n\n/** Get detail for a specific eval */\nexport function getEvalDetail(name: string) {\n const evalDir = join(getEvalsDir(), name);\n\n if (!existsSync(evalDir)) {\n return null;\n }\n\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n // Recursively list files\n const files: string[] = [];\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relativePath);\n } else {\n files.push(relativePath);\n }\n }\n }\n walk(evalDir, \"\");\n\n // Read file contents for key files\n const fileContents: Record<string, string> = {};\n const keyFiles = [\"PROMPT.md\", \"EVAL.ts\", \"EVAL.tsx\", \"package.json\"];\n for (const file of keyFiles) {\n const filePath = join(evalDir, file);\n if (existsSync(filePath)) {\n try {\n fileContents[file] = readFileSync(filePath, \"utf-8\");\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n return { name, prompt, files, fileContents };\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-sm font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-xs/relaxed\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-4 group-data-[size=sm]/card:px-3\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ShowMore = registerClientReference(\n function() { throw new Error(\"Attempted to call ShowMore() from the server but ShowMore is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ShowMore.tsx\",\n \"ShowMore\",\n);\n","import Link from \"next/link\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { ShowMore } from \"@/components/ShowMore\";\n\ninterface ExperimentInfo {\n name: string;\n timestamps: string[];\n latestTimestamp: string | null;\n latestPassRate?: number;\n latestTotalRuns?: number;\n latestPassedRuns?: number;\n}\n\ninterface ExperimentListProps {\n experiments: ExperimentInfo[];\n total: number;\n showAll: boolean;\n}\n\nexport function ExperimentList({ experiments, total, showAll }: ExperimentListProps) {\n if (experiments.length === 0) {\n return (\n <Card>\n <CardContent className=\"py-12 text-center\">\n <p className=\"text-muted-foreground text-lg\">No experiments found</p>\n <p className=\"text-muted-foreground text-sm mt-2\">\n Run an experiment with <code className=\"text-foreground bg-muted px-1.5 py-0.5 rounded text-xs\">agent-eval &lt;config&gt;</code> to see results here.\n </p>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card>\n <CardContent className=\"pt-0\">\n <div>\n {/* Header */}\n <div className=\"grid grid-cols-[1fr_auto_auto_auto] gap-4 px-3 py-2 text-xs text-muted-foreground font-medium border-b border-border\">\n <span>Name</span>\n <span className=\"w-12 text-right\">Runs</span>\n <span className=\"w-24\">Pass Rate</span>\n <span className=\"w-44\">Latest Run</span>\n </div>\n {/* Rows */}\n <ShowMore total={total} showAllHref={showAll ? undefined : \"/experiments?all\"}>\n {experiments.map((exp) => (\n <Link\n key={exp.name}\n href={\n exp.latestTimestamp\n ? `/experiments/${encodeURIComponent(exp.name)}/${encodeURIComponent(exp.latestTimestamp)}`\n : \"#\"\n }\n className=\"grid grid-cols-[1fr_auto_auto_auto] gap-4 items-center px-3 py-2.5 cursor-pointer transition-colors hover:bg-muted rounded-md\"\n >\n <span className=\"font-medium truncate\">{exp.name}</span>\n <span className=\"w-12 text-right text-muted-foreground\">{exp.timestamps.length}</span>\n <span className=\"w-24\">\n {exp.latestPassRate !== undefined ? (\n <span className=\"flex items-center gap-2\">\n <Badge\n variant={\n exp.latestPassRate === 100\n ? \"default\"\n : exp.latestPassRate >= 50\n ? \"secondary\"\n : \"destructive\"\n }\n >\n {exp.latestPassRate.toFixed(0)}%\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n {exp.latestPassedRuns}/{exp.latestTotalRuns}\n </span>\n </span>\n ) : (\n <span className=\"text-muted-foreground\">--</span>\n )}\n </span>\n <span className=\"w-44 text-xs text-muted-foreground\">\n {exp.latestTimestamp ? formatTimestamp(exp.latestTimestamp) : \"--\"}\n </span>\n </Link>\n ))}\n </ShowMore>\n </div>\n </CardContent>\n </Card>\n );\n}\n\nfunction formatTimestamp(ts: string): string {\n try {\n const isoString = ts.replace(/T(\\d{2})-(\\d{2})-(\\d{2})/, \"T$1:$2:$3\");\n const date = new Date(isoString);\n if (isNaN(date.getTime())) return ts;\n return date.toLocaleString();\n } catch {\n return ts;\n }\n}\n","import { ExperimentList } from \"@/components/ExperimentList\";\nimport { listExperiments } from \"@/lib/data\";\n\nexport const dynamic = \"force-dynamic\";\n\nconst LIMIT = 20;\n\nexport default async function ExperimentsPage({\n searchParams,\n}: {\n searchParams: Promise<{ all?: string }>;\n}) {\n const { all } = await searchParams;\n const showAll = all !== undefined;\n const { items: experiments, total } = listExperiments(showAll ? undefined : LIMIT);\n\n return (\n <div className=\"space-y-6\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">Experiments</h1>\n <p className=\"text-muted-foreground mt-1\">\n Browse and inspect your agent evaluation results.\n </p>\n </div>\n <ExperimentList experiments={experiments} total={total} showAll={showAll} />\n </div>\n );\n}\n"],"names":[],"mappings":"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","ignoreList":[2]}
@@ -0,0 +1,3 @@
1
+ module.exports=[69046,a=>{a.n(a.i(80979))},43619,a=>{a.n(a.i(79962))},13718,a=>{a.n(a.i(85523))},18198,a=>{a.n(a.i(45518))},62212,a=>{a.n(a.i(66114))},22734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},5419,a=>{"use strict";var b=a.i(22734),c=a.i(14747);function d(){return(0,c.resolve)(process.env.RESULTS_DIR||"./results")}function e(){return(0,c.resolve)(process.env.EVALS_DIR||"./evals")}function f(a){let e=d();if(!(0,b.existsSync)(e))return{items:[],total:0};let f=(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let d,f=(0,c.join)(e,a),g=(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort().reverse(),h=0,i=0;if(g.length>0){let a=(0,c.join)(f,g[0]);for(let d of(0,b.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isDirectory())){let e=(0,c.join)(a,d.name,"summary.json");if((0,b.existsSync)(e))try{let a=JSON.parse((0,b.readFileSync)(e,"utf-8"));h+=a.totalRuns??0,i+=a.passedRuns??0}catch{}}h>0&&(d=i/h*100)}return{name:a,timestamps:g,latestTimestamp:g[0]??null,latestPassRate:d,latestTotalRuns:h,latestPassedRuns:i}}),total:g}}function g(a,e){let f=(0,c.join)(d(),a,e);return(0,b.existsSync)(f)?{name:a,timestamp:e,evals:(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).map(a=>{let d=(0,c.join)(f,a),e=(0,c.join)(d,"summary.json"),g={totalRuns:0,passedRuns:0,passRate:"0%",meanDuration:0};if((0,b.existsSync)(e))try{g=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}let h=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()&&a.name.startsWith("run-")).map(a=>a.name).sort().map(a=>{let e=(0,c.join)(d,a,"result.json"),f=null;if((0,b.existsSync)(e))try{f=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}return{name:a,result:f}});return{name:a,totalRuns:g.totalRuns,passedRuns:g.passedRuns,passRate:"string"==typeof g.passRate?parseFloat(g.passRate):g.passRate,meanDuration:g.meanDuration,runs:h}})}:null}function h(a,e,f,g){let h=(0,c.join)(d(),a,e,f,g,"transcript.json");if(!(0,b.existsSync)(h))return null;try{return JSON.parse((0,b.readFileSync)(h,"utf-8"))}catch{return null}}function i(a){let d=e();if(!(0,b.existsSync)(d))return{items:[],total:0};let f=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let e=(0,c.join)(d,a),f=(0,c.join)(e,"PROMPT.md"),g="";return(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8")),{name:a,prompt:g,files:(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isFile()).map(a=>a.name)}}),total:g}}function j(a){let d=(0,c.join)(e(),a);if(!(0,b.existsSync)(d))return null;let f=(0,c.join)(d,"PROMPT.md"),g="";(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8"));let h=[];!function a(d,e){for(let f of(0,b.readdirSync)(d,{withFileTypes:!0})){if("node_modules"===f.name||".git"===f.name)continue;let b=e?`${e}/${f.name}`:f.name;f.isDirectory()?a((0,c.join)(d,f.name),b):h.push(b)}}(d,"");let i={};for(let a of["PROMPT.md","EVAL.ts","EVAL.tsx","package.json"]){let e=(0,c.join)(d,a);if((0,b.existsSync)(e))try{i[a]=(0,b.readFileSync)(e,"utf-8")}catch{}}return{name:a,prompt:g,files:h,fileContents:i}}a.s(["getEvalDetail",()=>j,"getExperimentDetail",()=>g,"getTranscript",()=>h,"listEvals",()=>i,"listExperiments",()=>f])},22977,a=>{"use strict";var b=a.i(7997),c=a.i(95387);function d({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col",a),...e})}function e({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]",a),...d})}function f({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("text-sm font-medium",a),...d})}function g({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})}a.s(["Card",()=>d,"CardContent",()=>g,"CardHeader",()=>e,"CardTitle",()=>f])},98720,a=>{"use strict";a.s(["Progress",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Progress() from the server but Progress is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/progress.tsx <module evaluation>","Progress")},46442,a=>{"use strict";a.s(["Progress",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Progress() from the server but Progress is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/progress.tsx","Progress")},71804,a=>{"use strict";a.i(98720);var b=a.i(46442);a.n(b)},37345,a=>{"use strict";a.s(["Separator",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Separator() from the server but Separator is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/separator.tsx <module evaluation>","Separator")},43277,a=>{"use strict";a.s(["Separator",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Separator() from the server but Separator is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ui/separator.tsx","Separator")},83977,a=>{"use strict";a.i(37345);var b=a.i(43277);a.n(b)},87618,a=>{"use strict";var b=a.i(7997);a.i(70396);var c=a.i(73727),d=a.i(95936),e=a.i(22977),f=a.i(20954),g=a.i(71804),h=a.i(83977);function i({runName:a,result:c,experiment:g,timestamp:h,evalName:i}){return c?(0,b.jsx)(d.default,{href:`/transcript/${encodeURIComponent(g)}/${encodeURIComponent(h)}/${encodeURIComponent(i)}/${encodeURIComponent(a)}`,className:"block cursor-pointer",children:(0,b.jsx)(e.Card,{className:"transition-colors hover:bg-muted",children:(0,b.jsxs)(e.CardContent,{className:"py-3 px-4 flex items-center justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:"text-sm font-medium",children:a}),(0,b.jsx)(f.Badge,{variant:"passed"===c.status?"default":"destructive",children:c.status}),c.error&&(0,b.jsx)("span",{className:"text-xs text-destructive truncate max-w-64",children:c.error})]}),(0,b.jsxs)("div",{className:"flex items-center gap-4 text-xs text-muted-foreground",children:[c.o11y&&(0,b.jsxs)("span",{children:[c.o11y.totalToolCalls," tool calls"]}),(0,b.jsxs)("span",{children:[c.duration.toFixed(1),"s"]})]})]})})}):(0,b.jsx)(e.Card,{className:"opacity-50",children:(0,b.jsx)(e.CardContent,{className:"py-3 px-4",children:(0,b.jsxs)("span",{className:"text-sm text-muted-foreground",children:[a,": No result"]})})})}function j({data:a}){let c=a.evals.length,j=a.evals.filter(a=>a.passedRuns===a.totalRuns).length,l=a.evals.reduce((a,b)=>a+b.passRate,0)/(c||1);return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground mb-1",children:[(0,b.jsx)(d.default,{href:"/experiments",className:"cursor-pointer hover:underline underline-offset-4",children:"Experiments"}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("span",{children:a.name}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("span",{children:k(a.timestamp)})]}),(0,b.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:a.name})]}),(0,b.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[(0,b.jsx)(e.Card,{children:(0,b.jsxs)(e.CardContent,{className:"py-4 px-4",children:[(0,b.jsx)("div",{className:"text-xs text-muted-foreground",children:"Overall Pass Rate"}),(0,b.jsxs)("div",{className:"text-2xl font-bold mt-1",children:[l.toFixed(0),"%"]}),(0,b.jsx)(g.Progress,{value:l,className:"mt-2 h-1.5"})]})}),(0,b.jsx)(e.Card,{children:(0,b.jsxs)(e.CardContent,{className:"py-4 px-4",children:[(0,b.jsx)("div",{className:"text-xs text-muted-foreground",children:"Evals"}),(0,b.jsxs)("div",{className:"text-2xl font-bold mt-1",children:[j,"/",c]}),(0,b.jsx)("div",{className:"text-xs text-muted-foreground mt-1",children:"passed"})]})}),(0,b.jsx)(e.Card,{children:(0,b.jsxs)(e.CardContent,{className:"py-4 px-4",children:[(0,b.jsx)("div",{className:"text-xs text-muted-foreground",children:"Avg Duration"}),(0,b.jsxs)("div",{className:"text-2xl font-bold mt-1",children:[(a.evals.reduce((a,b)=>a+b.meanDuration,0)/(c||1)).toFixed(1),"s"]})]})}),(0,b.jsx)(e.Card,{children:(0,b.jsxs)(e.CardContent,{className:"py-4 px-4",children:[(0,b.jsx)("div",{className:"text-xs text-muted-foreground",children:"Timestamp"}),(0,b.jsx)("div",{className:"text-sm font-medium mt-1",children:k(a.timestamp)})]})})]}),(0,b.jsx)(h.Separator,{}),(0,b.jsx)("div",{className:"space-y-6",children:a.evals.map(c=>(0,b.jsxs)(e.Card,{children:[(0,b.jsxs)(e.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(e.CardTitle,{className:"text-lg",children:c.name}),(0,b.jsxs)(f.Badge,{variant:c.passedRuns===c.totalRuns?"default":"destructive",children:[c.passedRuns,"/",c.totalRuns," passed"]})]}),(0,b.jsxs)("div",{className:"text-sm text-muted-foreground",children:["avg ",c.meanDuration.toFixed(1),"s"]})]}),(0,b.jsx)(g.Progress,{value:c.passRate,className:"h-1.5 mt-2"})]}),(0,b.jsx)(e.CardContent,{children:(0,b.jsx)("div",{className:"space-y-2",children:c.runs.map(d=>(0,b.jsx)(i,{runName:d.name,result:d.result,experiment:a.name,timestamp:a.timestamp,evalName:c.name},d.name))})})]},c.name))})]})}function k(a){try{let b=a.replace(/T(\d{2})-(\d{2})-(\d{2})/,"T$1:$2:$3"),c=new Date(b);if(isNaN(c.getTime()))return a;return c.toLocaleString()}catch{return a}}var l=a.i(5419);async function m({params:a}){let{name:d,timestamp:e}=await a,f=decodeURIComponent(d),g=decodeURIComponent(e),h=(0,l.getExperimentDetail)(f,g);return h||(0,c.notFound)(),(0,b.jsx)(j,{data:h})}a.s(["default",()=>m,"dynamic",0,"force-dynamic"],87618)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__b8fc4094._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/playground/lib/data.ts","../../../../../../packages/playground/components/ui/card.tsx","../../../../../../packages/playground/components/ui/progress.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/components/ui/separator.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/app/experiments/%5Bname%5D/%5Btimestamp%5D/page.tsx","../../../../../../packages/playground/components/ExperimentDetail.tsx","../../../../../../packages/playground/components/RunResultCard.tsx"],"sourcesContent":["/**\n * Server-side data access for the playground.\n * Reads JSON files from the results/ and evals/ directories.\n * Directory paths are provided via RESULTS_DIR and EVALS_DIR env vars.\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"fs\";\nimport { join, resolve } from \"path\";\n\nfunction getResultsDir(): string {\n return resolve(process.env.RESULTS_DIR || \"./results\");\n}\n\nfunction getEvalsDir(): string {\n return resolve(process.env.EVALS_DIR || \"./evals\");\n}\n\n/** List experiments from the results directory. Pass limit to cap expensive per-item reads. */\nexport function listExperiments(limit?: number) {\n const resultsDir = getResultsDir();\n\n if (!existsSync(resultsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(resultsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const expDir = join(resultsDir, name);\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n let latestPassRate: number | undefined;\n let latestTotalRuns = 0;\n let latestPassedRuns = 0;\n\n if (timestamps.length > 0) {\n const latestDir = join(expDir, timestamps[0]);\n const evalDirs = readdirSync(latestDir, { withFileTypes: true }).filter(\n (e) => e.isDirectory()\n );\n\n for (const evalDir of evalDirs) {\n const summaryPath = join(latestDir, evalDir.name, \"summary.json\");\n if (existsSync(summaryPath)) {\n try {\n const summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n latestTotalRuns += summary.totalRuns ?? 0;\n latestPassedRuns += summary.passedRuns ?? 0;\n } catch {\n // Skip invalid summary files\n }\n }\n }\n\n if (latestTotalRuns > 0) {\n latestPassRate = (latestPassedRuns / latestTotalRuns) * 100;\n }\n }\n\n return {\n name,\n timestamps,\n latestTimestamp: timestamps[0] ?? null,\n latestPassRate,\n latestTotalRuns,\n latestPassedRuns,\n };\n });\n\n return { items, total };\n}\n\n/** Get timestamps for a specific experiment */\nexport function getExperiment(name: string) {\n const expDir = join(getResultsDir(), name);\n\n if (!existsSync(expDir)) {\n return null;\n }\n\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n return { name, timestamps, latestTimestamp: timestamps[0] ?? null };\n}\n\n/** Get full experiment detail for a specific timestamp */\nexport function getExperimentDetail(name: string, timestamp: string) {\n const runDir = join(getResultsDir(), name, timestamp);\n\n if (!existsSync(runDir)) {\n return null;\n }\n\n const evalDirs = readdirSync(runDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const evals = evalDirs.map((evalName) => {\n const evalDir = join(runDir, evalName);\n const summaryPath = join(evalDir, \"summary.json\");\n\n let summary = {\n totalRuns: 0,\n passedRuns: 0,\n passRate: \"0%\",\n meanDuration: 0,\n };\n if (existsSync(summaryPath)) {\n try {\n summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n } catch {\n // Use defaults\n }\n }\n\n // List run directories\n const runDirs = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name.startsWith(\"run-\"))\n .map((e) => e.name)\n .sort();\n\n // Read each run's result.json\n const runs = runDirs.map((runDirName) => {\n const resultPath = join(evalDir, runDirName, \"result.json\");\n let result = null;\n if (existsSync(resultPath)) {\n try {\n result = JSON.parse(readFileSync(resultPath, \"utf-8\"));\n } catch {\n // Skip\n }\n }\n return { name: runDirName, result };\n });\n\n return {\n name: evalName,\n totalRuns: summary.totalRuns,\n passedRuns: summary.passedRuns,\n passRate:\n typeof summary.passRate === \"string\"\n ? parseFloat(summary.passRate)\n : summary.passRate,\n meanDuration: summary.meanDuration,\n runs,\n };\n });\n\n return { name, timestamp, evals };\n}\n\n/** Get result for a specific run */\nexport function getRunResult(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const resultPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"result.json\"\n );\n\n if (!existsSync(resultPath)) {\n return null;\n }\n\n try {\n return { result: JSON.parse(readFileSync(resultPath, \"utf-8\")) };\n } catch {\n return null;\n }\n}\n\n/** Get parsed transcript for a specific run */\nexport function getTranscript(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const transcriptPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"transcript.json\"\n );\n\n if (!existsSync(transcriptPath)) {\n return null;\n }\n\n try {\n return JSON.parse(readFileSync(transcriptPath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\n/** List evals from the evals directory. Pass limit to cap per-item reads. */\nexport function listEvals(limit?: number) {\n const evalsDir = getEvalsDir();\n\n if (!existsSync(evalsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(evalsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const evalDir = join(evalsDir, name);\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n const files = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isFile())\n .map((e) => e.name);\n\n return { name, prompt, files };\n });\n\n return { items, total };\n}\n\n/** Get detail for a specific eval */\nexport function getEvalDetail(name: string) {\n const evalDir = join(getEvalsDir(), name);\n\n if (!existsSync(evalDir)) {\n return null;\n }\n\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n // Recursively list files\n const files: string[] = [];\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relativePath);\n } else {\n files.push(relativePath);\n }\n }\n }\n walk(evalDir, \"\");\n\n // Read file contents for key files\n const fileContents: Record<string, string> = {};\n const keyFiles = [\"PROMPT.md\", \"EVAL.ts\", \"EVAL.tsx\", \"package.json\"];\n for (const file of keyFiles) {\n const filePath = join(evalDir, file);\n if (existsSync(filePath)) {\n try {\n fileContents[file] = readFileSync(filePath, \"utf-8\");\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n return { name, prompt, files, fileContents };\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-sm font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-xs/relaxed\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-4 group-data-[size=sm]/card:px-3\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const Progress = registerClientReference(\n function() { throw new Error(\"Attempted to call Progress() from the server but Progress is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/progress.tsx\",\n \"Progress\",\n);\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const Separator = registerClientReference(\n function() { throw new Error(\"Attempted to call Separator() from the server but Separator is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ui/separator.tsx\",\n \"Separator\",\n);\n","import { notFound } from \"next/navigation\";\nimport { ExperimentDetail } from \"@/components/ExperimentDetail\";\nimport { getExperimentDetail } from \"@/lib/data\";\n\nexport const dynamic = \"force-dynamic\";\n\nexport default async function ExperimentPage({\n params,\n}: {\n params: Promise<{ name: string; timestamp: string }>;\n}) {\n const { name, timestamp } = await params;\n const decodedName = decodeURIComponent(name);\n const decodedTimestamp = decodeURIComponent(timestamp);\n\n const data = getExperimentDetail(decodedName, decodedTimestamp);\n\n if (!data) {\n notFound();\n }\n\n return <ExperimentDetail data={data} />;\n}\n","import Link from \"next/link\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { RunResultCard } from \"@/components/RunResultCard\";\n\ninterface EvalDetail {\n name: string;\n totalRuns: number;\n passedRuns: number;\n passRate: number;\n meanDuration: number;\n runs: { name: string; result: RunResult | null }[];\n}\n\ninterface RunResult {\n status: \"passed\" | \"failed\";\n error?: string;\n duration: number;\n o11y?: {\n totalToolCalls: number;\n thinkingBlocks: number;\n errors: string[];\n };\n}\n\ninterface ExperimentDetailData {\n name: string;\n timestamp: string;\n evals: EvalDetail[];\n}\n\ninterface ExperimentDetailProps {\n data: ExperimentDetailData;\n}\n\nexport function ExperimentDetail({ data }: ExperimentDetailProps) {\n const totalEvals = data.evals.length;\n const passedEvals = data.evals.filter(\n (e) => e.passedRuns === e.totalRuns\n ).length;\n const overallPassRate =\n data.evals.reduce((sum, e) => sum + e.passRate, 0) / (totalEvals || 1);\n\n return (\n <div className=\"space-y-6\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground mb-1\">\n <Link href=\"/experiments\" className=\"cursor-pointer hover:underline underline-offset-4\">\n Experiments\n </Link>\n <span>/</span>\n <span>{data.name}</span>\n <span>/</span>\n <span>{formatTimestamp(data.timestamp)}</span>\n </div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{data.name}</h1>\n </div>\n\n {/* Summary cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n <Card>\n <CardContent className=\"py-4 px-4\">\n <div className=\"text-xs text-muted-foreground\">\n Overall Pass Rate\n </div>\n <div className=\"text-2xl font-bold mt-1\">\n {overallPassRate.toFixed(0)}%\n </div>\n <Progress value={overallPassRate} className=\"mt-2 h-1.5\" />\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"py-4 px-4\">\n <div className=\"text-xs text-muted-foreground\">Evals</div>\n <div className=\"text-2xl font-bold mt-1\">\n {passedEvals}/{totalEvals}\n </div>\n <div className=\"text-xs text-muted-foreground mt-1\">passed</div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"py-4 px-4\">\n <div className=\"text-xs text-muted-foreground\">Avg Duration</div>\n <div className=\"text-2xl font-bold mt-1\">\n {(\n data.evals.reduce((s, e) => s + e.meanDuration, 0) /\n (totalEvals || 1)\n ).toFixed(1)}\n s\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"py-4 px-4\">\n <div className=\"text-xs text-muted-foreground\">Timestamp</div>\n <div className=\"text-sm font-medium mt-1\">\n {formatTimestamp(data.timestamp)}\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Separator />\n\n {/* Per-eval breakdown */}\n <div className=\"space-y-6\">\n {data.evals.map((evalDetail) => (\n <Card key={evalDetail.name}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <CardTitle className=\"text-lg\">{evalDetail.name}</CardTitle>\n <Badge\n variant={\n evalDetail.passedRuns === evalDetail.totalRuns\n ? \"default\"\n : \"destructive\"\n }\n >\n {evalDetail.passedRuns}/{evalDetail.totalRuns} passed\n </Badge>\n </div>\n <div className=\"text-sm text-muted-foreground\">\n avg {evalDetail.meanDuration.toFixed(1)}s\n </div>\n </div>\n <Progress value={evalDetail.passRate} className=\"h-1.5 mt-2\" />\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n {evalDetail.runs.map((run) => (\n <RunResultCard\n key={run.name}\n runName={run.name}\n result={run.result}\n experiment={data.name}\n timestamp={data.timestamp}\n evalName={evalDetail.name}\n />\n ))}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n\nfunction formatTimestamp(ts: string): string {\n try {\n const isoString = ts.replace(/T(\\d{2})-(\\d{2})-(\\d{2})/, \"T$1:$2:$3\");\n const date = new Date(isoString);\n if (isNaN(date.getTime())) return ts;\n return date.toLocaleString();\n } catch {\n return ts;\n }\n}\n","import Link from \"next/link\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Card, CardContent } from \"@/components/ui/card\";\n\n\ninterface RunResult {\n status: \"passed\" | \"failed\";\n error?: string;\n duration: number;\n o11y?: {\n totalToolCalls: number;\n thinkingBlocks: number;\n errors: string[];\n };\n}\n\ninterface RunResultCardProps {\n runName: string;\n result: RunResult | null;\n experiment: string;\n timestamp: string;\n evalName: string;\n}\n\nexport function RunResultCard({\n runName,\n result,\n experiment,\n timestamp,\n evalName,\n}: RunResultCardProps) {\n if (!result) {\n return (\n <Card className=\"opacity-50\">\n <CardContent className=\"py-3 px-4\">\n <span className=\"text-sm text-muted-foreground\">{runName}: No result</span>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Link\n href={`/transcript/${encodeURIComponent(experiment)}/${encodeURIComponent(timestamp)}/${encodeURIComponent(evalName)}/${encodeURIComponent(runName)}`}\n className=\"block cursor-pointer\"\n >\n <Card className=\"transition-colors hover:bg-muted\">\n <CardContent className=\"py-3 px-4 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium\">{runName}</span>\n <Badge\n variant={result.status === \"passed\" ? \"default\" : \"destructive\"}\n >\n {result.status}\n </Badge>\n {result.error && (\n <span className=\"text-xs text-destructive truncate max-w-64\">\n {result.error}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n {result.o11y && (\n <span>{result.o11y.totalToolCalls} tool calls</span>\n )}\n <span>{result.duration.toFixed(1)}s</span>\n </div>\n </CardContent>\n </Card>\n </Link>\n );\n}\n"],"names":[],"mappings":"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","ignoreList":[2,3]}
@@ -0,0 +1,3 @@
1
+ module.exports=[69046,a=>{a.n(a.i(80979))},43619,a=>{a.n(a.i(79962))},13718,a=>{a.n(a.i(85523))},18198,a=>{a.n(a.i(45518))},62212,a=>{a.n(a.i(66114))},22734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},5419,a=>{"use strict";var b=a.i(22734),c=a.i(14747);function d(){return(0,c.resolve)(process.env.RESULTS_DIR||"./results")}function e(){return(0,c.resolve)(process.env.EVALS_DIR||"./evals")}function f(a){let e=d();if(!(0,b.existsSync)(e))return{items:[],total:0};let f=(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let d,f=(0,c.join)(e,a),g=(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort().reverse(),h=0,i=0;if(g.length>0){let a=(0,c.join)(f,g[0]);for(let d of(0,b.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isDirectory())){let e=(0,c.join)(a,d.name,"summary.json");if((0,b.existsSync)(e))try{let a=JSON.parse((0,b.readFileSync)(e,"utf-8"));h+=a.totalRuns??0,i+=a.passedRuns??0}catch{}}h>0&&(d=i/h*100)}return{name:a,timestamps:g,latestTimestamp:g[0]??null,latestPassRate:d,latestTotalRuns:h,latestPassedRuns:i}}),total:g}}function g(a,e){let f=(0,c.join)(d(),a,e);return(0,b.existsSync)(f)?{name:a,timestamp:e,evals:(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).map(a=>{let d=(0,c.join)(f,a),e=(0,c.join)(d,"summary.json"),g={totalRuns:0,passedRuns:0,passRate:"0%",meanDuration:0};if((0,b.existsSync)(e))try{g=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}let h=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()&&a.name.startsWith("run-")).map(a=>a.name).sort().map(a=>{let e=(0,c.join)(d,a,"result.json"),f=null;if((0,b.existsSync)(e))try{f=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}return{name:a,result:f}});return{name:a,totalRuns:g.totalRuns,passedRuns:g.passedRuns,passRate:"string"==typeof g.passRate?parseFloat(g.passRate):g.passRate,meanDuration:g.meanDuration,runs:h}})}:null}function h(a,e,f,g){let h=(0,c.join)(d(),a,e,f,g,"transcript.json");if(!(0,b.existsSync)(h))return null;try{return JSON.parse((0,b.readFileSync)(h,"utf-8"))}catch{return null}}function i(a){let d=e();if(!(0,b.existsSync)(d))return{items:[],total:0};let f=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let e=(0,c.join)(d,a),f=(0,c.join)(e,"PROMPT.md"),g="";return(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8")),{name:a,prompt:g,files:(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isFile()).map(a=>a.name)}}),total:g}}function j(a){let d=(0,c.join)(e(),a);if(!(0,b.existsSync)(d))return null;let f=(0,c.join)(d,"PROMPT.md"),g="";(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8"));let h=[];!function a(d,e){for(let f of(0,b.readdirSync)(d,{withFileTypes:!0})){if("node_modules"===f.name||".git"===f.name)continue;let b=e?`${e}/${f.name}`:f.name;f.isDirectory()?a((0,c.join)(d,f.name),b):h.push(b)}}(d,"");let i={};for(let a of["PROMPT.md","EVAL.ts","EVAL.tsx","package.json"]){let e=(0,c.join)(d,a);if((0,b.existsSync)(e))try{i[a]=(0,b.readFileSync)(e,"utf-8")}catch{}}return{name:a,prompt:g,files:h,fileContents:i}}a.s(["getEvalDetail",()=>j,"getExperimentDetail",()=>g,"getTranscript",()=>h,"listEvals",()=>i,"listExperiments",()=>f])},22116,a=>{"use strict";a.s(["TranscriptViewer",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call TranscriptViewer() from the server but TranscriptViewer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/TranscriptViewer.tsx <module evaluation>","TranscriptViewer")},20516,a=>{"use strict";a.s(["TranscriptViewer",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call TranscriptViewer() from the server but TranscriptViewer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/TranscriptViewer.tsx","TranscriptViewer")},51835,a=>{"use strict";a.i(22116);var b=a.i(20516);a.n(b)},25535,a=>{"use strict";var b=a.i(7997);a.i(70396);var c=a.i(73727),d=a.i(95936),e=a.i(51835);function f({experiment:a,timestamp:c,evalName:f,run:g,transcript:h}){return(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(d.default,{href:"/experiments",className:"cursor-pointer hover:underline underline-offset-4",children:"Experiments"}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)(d.default,{href:`/experiments/${encodeURIComponent(a)}/${encodeURIComponent(c)}`,className:"cursor-pointer hover:underline underline-offset-4",children:a}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("span",{children:f}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("span",{children:g})]}),(0,b.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Transcript"}),(0,b.jsx)(e.TranscriptViewer,{transcript:h})]})}var g=a.i(5419);async function h({params:a}){let{experiment:d,timestamp:e,evalName:h,run:i}=await a,j=decodeURIComponent(d),k=decodeURIComponent(e),l=decodeURIComponent(h),m=decodeURIComponent(i),n=(0,g.getTranscript)(j,k,l,m);return n||(0,c.notFound)(),(0,b.jsx)(f,{experiment:j,timestamp:k,evalName:l,run:m,transcript:n})}a.s(["default",()=>h,"dynamic",0,"force-dynamic"],25535)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__c73d60f7._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/playground/lib/data.ts","../../../../../../packages/playground/components/TranscriptViewer.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/app/transcript/%5Bexperiment%5D/%5Btimestamp%5D/%5BevalName%5D/%5Brun%5D/page.tsx","../../../../../../packages/playground/components/TranscriptPage.tsx"],"sourcesContent":["/**\n * Server-side data access for the playground.\n * Reads JSON files from the results/ and evals/ directories.\n * Directory paths are provided via RESULTS_DIR and EVALS_DIR env vars.\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"fs\";\nimport { join, resolve } from \"path\";\n\nfunction getResultsDir(): string {\n return resolve(process.env.RESULTS_DIR || \"./results\");\n}\n\nfunction getEvalsDir(): string {\n return resolve(process.env.EVALS_DIR || \"./evals\");\n}\n\n/** List experiments from the results directory. Pass limit to cap expensive per-item reads. */\nexport function listExperiments(limit?: number) {\n const resultsDir = getResultsDir();\n\n if (!existsSync(resultsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(resultsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const expDir = join(resultsDir, name);\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n let latestPassRate: number | undefined;\n let latestTotalRuns = 0;\n let latestPassedRuns = 0;\n\n if (timestamps.length > 0) {\n const latestDir = join(expDir, timestamps[0]);\n const evalDirs = readdirSync(latestDir, { withFileTypes: true }).filter(\n (e) => e.isDirectory()\n );\n\n for (const evalDir of evalDirs) {\n const summaryPath = join(latestDir, evalDir.name, \"summary.json\");\n if (existsSync(summaryPath)) {\n try {\n const summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n latestTotalRuns += summary.totalRuns ?? 0;\n latestPassedRuns += summary.passedRuns ?? 0;\n } catch {\n // Skip invalid summary files\n }\n }\n }\n\n if (latestTotalRuns > 0) {\n latestPassRate = (latestPassedRuns / latestTotalRuns) * 100;\n }\n }\n\n return {\n name,\n timestamps,\n latestTimestamp: timestamps[0] ?? null,\n latestPassRate,\n latestTotalRuns,\n latestPassedRuns,\n };\n });\n\n return { items, total };\n}\n\n/** Get timestamps for a specific experiment */\nexport function getExperiment(name: string) {\n const expDir = join(getResultsDir(), name);\n\n if (!existsSync(expDir)) {\n return null;\n }\n\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n return { name, timestamps, latestTimestamp: timestamps[0] ?? null };\n}\n\n/** Get full experiment detail for a specific timestamp */\nexport function getExperimentDetail(name: string, timestamp: string) {\n const runDir = join(getResultsDir(), name, timestamp);\n\n if (!existsSync(runDir)) {\n return null;\n }\n\n const evalDirs = readdirSync(runDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const evals = evalDirs.map((evalName) => {\n const evalDir = join(runDir, evalName);\n const summaryPath = join(evalDir, \"summary.json\");\n\n let summary = {\n totalRuns: 0,\n passedRuns: 0,\n passRate: \"0%\",\n meanDuration: 0,\n };\n if (existsSync(summaryPath)) {\n try {\n summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n } catch {\n // Use defaults\n }\n }\n\n // List run directories\n const runDirs = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name.startsWith(\"run-\"))\n .map((e) => e.name)\n .sort();\n\n // Read each run's result.json\n const runs = runDirs.map((runDirName) => {\n const resultPath = join(evalDir, runDirName, \"result.json\");\n let result = null;\n if (existsSync(resultPath)) {\n try {\n result = JSON.parse(readFileSync(resultPath, \"utf-8\"));\n } catch {\n // Skip\n }\n }\n return { name: runDirName, result };\n });\n\n return {\n name: evalName,\n totalRuns: summary.totalRuns,\n passedRuns: summary.passedRuns,\n passRate:\n typeof summary.passRate === \"string\"\n ? parseFloat(summary.passRate)\n : summary.passRate,\n meanDuration: summary.meanDuration,\n runs,\n };\n });\n\n return { name, timestamp, evals };\n}\n\n/** Get result for a specific run */\nexport function getRunResult(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const resultPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"result.json\"\n );\n\n if (!existsSync(resultPath)) {\n return null;\n }\n\n try {\n return { result: JSON.parse(readFileSync(resultPath, \"utf-8\")) };\n } catch {\n return null;\n }\n}\n\n/** Get parsed transcript for a specific run */\nexport function getTranscript(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const transcriptPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"transcript.json\"\n );\n\n if (!existsSync(transcriptPath)) {\n return null;\n }\n\n try {\n return JSON.parse(readFileSync(transcriptPath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\n/** List evals from the evals directory. Pass limit to cap per-item reads. */\nexport function listEvals(limit?: number) {\n const evalsDir = getEvalsDir();\n\n if (!existsSync(evalsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(evalsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const evalDir = join(evalsDir, name);\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n const files = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isFile())\n .map((e) => e.name);\n\n return { name, prompt, files };\n });\n\n return { items, total };\n}\n\n/** Get detail for a specific eval */\nexport function getEvalDetail(name: string) {\n const evalDir = join(getEvalsDir(), name);\n\n if (!existsSync(evalDir)) {\n return null;\n }\n\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n // Recursively list files\n const files: string[] = [];\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relativePath);\n } else {\n files.push(relativePath);\n }\n }\n }\n walk(evalDir, \"\");\n\n // Read file contents for key files\n const fileContents: Record<string, string> = {};\n const keyFiles = [\"PROMPT.md\", \"EVAL.ts\", \"EVAL.tsx\", \"package.json\"];\n for (const file of keyFiles) {\n const filePath = join(evalDir, file);\n if (existsSync(filePath)) {\n try {\n fileContents[file] = readFileSync(filePath, \"utf-8\");\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n return { name, prompt, files, fileContents };\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const TranscriptViewer = registerClientReference(\n function() { throw new Error(\"Attempted to call TranscriptViewer() from the server but TranscriptViewer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/TranscriptViewer.tsx\",\n \"TranscriptViewer\",\n);\n","import { notFound } from \"next/navigation\";\nimport { TranscriptPage } from \"@/components/TranscriptPage\";\nimport { getTranscript } from \"@/lib/data\";\n\nexport const dynamic = \"force-dynamic\";\n\nexport default async function TranscriptRoute({\n params,\n}: {\n params: Promise<{\n experiment: string;\n timestamp: string;\n evalName: string;\n run: string;\n }>;\n}) {\n const { experiment, timestamp, evalName, run } = await params;\n const decodedExperiment = decodeURIComponent(experiment);\n const decodedTimestamp = decodeURIComponent(timestamp);\n const decodedEvalName = decodeURIComponent(evalName);\n const decodedRun = decodeURIComponent(run);\n\n const transcript = getTranscript(\n decodedExperiment,\n decodedTimestamp,\n decodedEvalName,\n decodedRun\n );\n\n if (!transcript) {\n notFound();\n }\n\n return (\n <TranscriptPage\n experiment={decodedExperiment}\n timestamp={decodedTimestamp}\n evalName={decodedEvalName}\n run={decodedRun}\n transcript={transcript}\n />\n );\n}\n","import Link from \"next/link\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { TranscriptViewer } from \"@/components/TranscriptViewer\";\nimport type { Transcript } from \"@/lib/types\";\n\ninterface TranscriptPageProps {\n experiment: string;\n timestamp: string;\n evalName: string;\n run: string;\n transcript: Transcript;\n}\n\nexport function TranscriptPage({\n experiment,\n timestamp,\n evalName,\n run,\n transcript,\n}: TranscriptPageProps) {\n return (\n <div className=\"space-y-4\">\n {/* Breadcrumb */}\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Link href=\"/experiments\" className=\"cursor-pointer hover:underline underline-offset-4\">\n Experiments\n </Link>\n <span>/</span>\n <Link\n href={`/experiments/${encodeURIComponent(experiment)}/${encodeURIComponent(timestamp)}`}\n className=\"cursor-pointer hover:underline underline-offset-4\"\n >\n {experiment}\n </Link>\n <span>/</span>\n <span>{evalName}</span>\n <span>/</span>\n <span>{run}</span>\n </div>\n\n <h1 className=\"text-2xl font-bold tracking-tight\">Transcript</h1>\n\n <TranscriptViewer transcript={transcript} />\n </div>\n );\n}\n"],"names":[],"mappings":"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","ignoreList":[1]}
@@ -0,0 +1,3 @@
1
+ module.exports=[18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},42602,(a,b,c)=>{"use strict";b.exports=a.r(18622)},87924,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactJsxRuntime},72131,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].React},9270,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.AppRouterContext},38783,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactServerDOMTurbopackClient}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__d143f79e._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","vendored","ReactJsxRuntime","React","AppRouterContext","ReactServerDOMTurbopackClient"],"mappings":"0NA0BQG,EAAOC,OAAO,CAAGC,EAAQ,CAAA,CAAA,IAAA,iCC1BjCF,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEC,eAAe,+BCFxCP,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEE,KAAK,8BCF9BR,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,QAAW,CAACG,gBAAgB,+BCFvCT,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEI,6BAA6B","ignoreList":[0,1,2,3,4]}
@@ -0,0 +1,3 @@
1
+ module.exports=[18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},24725,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},43285,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/dynamic-access-async-storage.external.js",()=>require("next/dist/server/app-render/dynamic-access-async-storage.external.js"))},717,(a,b,c)=>{"use strict";b.exports=a.r(24951).vendored["react-rsc"].React},24951,(a,b,c)=>{"use strict";b.exports=a.r(18622)},7997,(a,b,c)=>{"use strict";b.exports=a.r(24951).vendored["react-rsc"].ReactJsxRuntime},11857,(a,b,c)=>{"use strict";b.exports=a.r(24951).vendored["react-rsc"].ReactServerDOMTurbopackServer},14747,(a,b,c)=>{b.exports=a.x("path",()=>require("path"))}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__ec465b95._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/rsc/react.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.ts","../../../../../../node_modules/next/src/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.React\n","if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.ReactServerDOMTurbopackServer\n"],"names":["module","exports","require","vendored","React","process","env","NEXT_RUNTIME","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","ReactJsxRuntime","ReactServerDOMTurbopackServer"],"mappings":"ykCAAAA,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEC,KAAK,+BCwBtBJ,EAAOC,OAAO,CAAGC,EAAQ,CAAA,CAAA,IAAA,gCC1BjCF,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEQ,eAAe,+BCFxCX,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAES,6BAA6B","ignoreList":[0,1,2,3]}
@@ -0,0 +1,3 @@
1
+ module.exports=[69046,a=>{a.n(a.i(80979))},43619,a=>{a.n(a.i(79962))},13718,a=>{a.n(a.i(85523))},18198,a=>{a.n(a.i(45518))},62212,a=>{a.n(a.i(66114))},22734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},5419,a=>{"use strict";var b=a.i(22734),c=a.i(14747);function d(){return(0,c.resolve)(process.env.RESULTS_DIR||"./results")}function e(){return(0,c.resolve)(process.env.EVALS_DIR||"./evals")}function f(a){let e=d();if(!(0,b.existsSync)(e))return{items:[],total:0};let f=(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let d,f=(0,c.join)(e,a),g=(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort().reverse(),h=0,i=0;if(g.length>0){let a=(0,c.join)(f,g[0]);for(let d of(0,b.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isDirectory())){let e=(0,c.join)(a,d.name,"summary.json");if((0,b.existsSync)(e))try{let a=JSON.parse((0,b.readFileSync)(e,"utf-8"));h+=a.totalRuns??0,i+=a.passedRuns??0}catch{}}h>0&&(d=i/h*100)}return{name:a,timestamps:g,latestTimestamp:g[0]??null,latestPassRate:d,latestTotalRuns:h,latestPassedRuns:i}}),total:g}}function g(a,e){let f=(0,c.join)(d(),a,e);return(0,b.existsSync)(f)?{name:a,timestamp:e,evals:(0,b.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).map(a=>{let d=(0,c.join)(f,a),e=(0,c.join)(d,"summary.json"),g={totalRuns:0,passedRuns:0,passRate:"0%",meanDuration:0};if((0,b.existsSync)(e))try{g=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}let h=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()&&a.name.startsWith("run-")).map(a=>a.name).sort().map(a=>{let e=(0,c.join)(d,a,"result.json"),f=null;if((0,b.existsSync)(e))try{f=JSON.parse((0,b.readFileSync)(e,"utf-8"))}catch{}return{name:a,result:f}});return{name:a,totalRuns:g.totalRuns,passedRuns:g.passedRuns,passRate:"string"==typeof g.passRate?parseFloat(g.passRate):g.passRate,meanDuration:g.meanDuration,runs:h}})}:null}function h(a,e,f,g){let h=(0,c.join)(d(),a,e,f,g,"transcript.json");if(!(0,b.existsSync)(h))return null;try{return JSON.parse((0,b.readFileSync)(h,"utf-8"))}catch{return null}}function i(a){let d=e();if(!(0,b.existsSync)(d))return{items:[],total:0};let f=(0,b.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name),g=f.length;return{items:(a?f.slice(0,a):f).map(a=>{let e=(0,c.join)(d,a),f=(0,c.join)(e,"PROMPT.md"),g="";return(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8")),{name:a,prompt:g,files:(0,b.readdirSync)(e,{withFileTypes:!0}).filter(a=>a.isFile()).map(a=>a.name)}}),total:g}}function j(a){let d=(0,c.join)(e(),a);if(!(0,b.existsSync)(d))return null;let f=(0,c.join)(d,"PROMPT.md"),g="";(0,b.existsSync)(f)&&(g=(0,b.readFileSync)(f,"utf-8"));let h=[];!function a(d,e){for(let f of(0,b.readdirSync)(d,{withFileTypes:!0})){if("node_modules"===f.name||".git"===f.name)continue;let b=e?`${e}/${f.name}`:f.name;f.isDirectory()?a((0,c.join)(d,f.name),b):h.push(b)}}(d,"");let i={};for(let a of["PROMPT.md","EVAL.ts","EVAL.tsx","package.json"]){let e=(0,c.join)(d,a);if((0,b.existsSync)(e))try{i[a]=(0,b.readFileSync)(e,"utf-8")}catch{}}return{name:a,prompt:g,files:h,fileContents:i}}a.s(["getEvalDetail",()=>j,"getExperimentDetail",()=>g,"getTranscript",()=>h,"listEvals",()=>i,"listExperiments",()=>f])},22977,a=>{"use strict";var b=a.i(7997),c=a.i(95387);function d({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col",a),...e})}function e({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]",a),...d})}function f({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("text-sm font-medium",a),...d})}function g({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})}a.s(["Card",()=>d,"CardContent",()=>g,"CardHeader",()=>e,"CardTitle",()=>f])},31636,a=>{"use strict";a.s(["ShowMore",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ShowMore() from the server but ShowMore is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ShowMore.tsx <module evaluation>","ShowMore")},15821,a=>{"use strict";a.s(["ShowMore",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ShowMore() from the server but ShowMore is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/playground/components/ShowMore.tsx","ShowMore")},93835,a=>{"use strict";a.i(31636);var b=a.i(15821);a.n(b)},35068,a=>{"use strict";var b=a.i(7997),c=a.i(95936),d=a.i(22977),e=a.i(20954),f=a.i(93835);function g({evals:a,total:g,showAll:h}){return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:"Evals"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1",children:"Browse all eval fixtures in your project."})]}),0===a.length?(0,b.jsx)(d.Card,{children:(0,b.jsxs)(d.CardContent,{className:"py-12 text-center",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-lg",children:"No evals found"}),(0,b.jsxs)("p",{className:"text-muted-foreground text-sm mt-2",children:["Create evals in your"," ",(0,b.jsx)("code",{className:"text-foreground bg-muted px-1.5 py-0.5 rounded text-xs",children:"evals/"})," ","directory."]})]})}):(0,b.jsx)(f.ShowMore,{total:g,showAllHref:h?void 0:"/evals?all",className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:a.map(a=>(0,b.jsx)(c.default,{href:`/evals/${encodeURIComponent(a.name)}`,className:"block cursor-pointer",children:(0,b.jsxs)(d.Card,{className:"transition-colors hover:bg-muted",children:[(0,b.jsx)(d.CardHeader,{children:(0,b.jsx)(d.CardTitle,{className:"text-base",children:a.name})}),(0,b.jsxs)(d.CardContent,{children:[a.prompt&&(0,b.jsxs)("p",{className:"text-sm text-muted-foreground line-clamp-3 mb-3",children:[a.prompt.slice(0,200),a.prompt.length>200?"...":""]}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-1",children:[a.files.slice(0,5).map(a=>(0,b.jsx)(e.Badge,{variant:"secondary",className:"text-xs font-mono",children:a},a)),a.files.length>5&&(0,b.jsxs)(e.Badge,{variant:"outline",className:"text-xs",children:["+",a.files.length-5," more"]})]})]})]})},a.name))})]})}var h=a.i(5419);async function i({searchParams:a}){let{all:c}=await a,d=void 0!==c,{items:e,total:f}=(0,h.listEvals)(d?void 0:21);return(0,b.jsx)(g,{evals:e,total:f,showAll:d})}a.s(["default",()=>i,"dynamic",0,"force-dynamic"],35068)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__f286e9a8._.js.map