niceeval 0.13.3-canary.37 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/dist/agents/bub.cjs +4 -4
  2. package/dist/agents/bub.cjs.map +1 -1
  3. package/dist/agents/bub.d.cts +2 -2
  4. package/dist/agents/bub.d.mts +2 -2
  5. package/dist/agents/bub.d.ts +2 -2
  6. package/dist/agents/codex-app-server.cjs +2 -3
  7. package/dist/agents/codex-app-server.cjs.map +1 -1
  8. package/dist/agents/codex.cjs +4 -4
  9. package/dist/agents/codex.cjs.map +1 -1
  10. package/dist/agents/codex.d.cts +3 -3
  11. package/dist/agents/codex.d.mts +3 -3
  12. package/dist/agents/codex.d.ts +3 -3
  13. package/dist/agents/sdk-streams.cjs +11 -4
  14. package/dist/agents/sdk-streams.cjs.map +1 -1
  15. package/dist/analysis/bindings.cjs +74 -19
  16. package/dist/analysis/bindings.cjs.map +1 -1
  17. package/dist/analysis/bindings.d.cts +534 -156
  18. package/dist/analysis/bindings.d.mts +534 -156
  19. package/dist/analysis/bindings.d.ts +534 -156
  20. package/dist/analysis/domain-view.cjs.map +1 -1
  21. package/dist/analysis/domain-view.d.cts +137 -8
  22. package/dist/analysis/domain-view.d.mts +137 -8
  23. package/dist/analysis/domain-view.d.ts +137 -8
  24. package/dist/analysis/index.cjs.map +1 -1
  25. package/dist/analysis/index.d.cts +1 -1
  26. package/dist/analysis/index.d.mts +1 -1
  27. package/dist/analysis/index.d.ts +1 -1
  28. package/dist/assertions/api.cjs.map +1 -1
  29. package/dist/assertions/api.d.cts +62 -0
  30. package/dist/assertions/api.d.mts +62 -0
  31. package/dist/assertions/api.d.ts +62 -0
  32. package/dist/assertions/judge.cjs +56 -5
  33. package/dist/assertions/judge.cjs.map +1 -1
  34. package/dist/assertions/match.cjs +66 -42
  35. package/dist/assertions/match.cjs.map +1 -1
  36. package/dist/assertions/match.d.cts +13 -0
  37. package/dist/assertions/match.d.mts +13 -0
  38. package/dist/assertions/match.d.ts +13 -0
  39. package/dist/assertions/record/attachment.cjs +104 -33
  40. package/dist/assertions/record/attachment.cjs.map +1 -1
  41. package/dist/assertions/record/attachment.d.cts +294 -57
  42. package/dist/assertions/record/attachment.d.mts +294 -57
  43. package/dist/assertions/record/attachment.d.ts +294 -57
  44. package/dist/assertions/record/codec.cjs +91 -17
  45. package/dist/assertions/record/codec.cjs.map +1 -1
  46. package/dist/assertions/record/codec.d.cts +280 -52
  47. package/dist/assertions/record/codec.d.mts +280 -52
  48. package/dist/assertions/record/codec.d.ts +280 -52
  49. package/dist/assertions/record/index.js +2 -0
  50. package/dist/assertions/record/model.cjs +16 -0
  51. package/dist/assertions/record/model.cjs.map +1 -1
  52. package/dist/assertions/record/model.d.cts +120 -13
  53. package/dist/assertions/record/model.d.mts +120 -13
  54. package/dist/assertions/record/model.d.ts +120 -13
  55. package/dist/assertions/record/model.js +2 -0
  56. package/dist/assertions/record/producer.cjs +70 -50
  57. package/dist/assertions/record/producer.cjs.map +1 -1
  58. package/dist/assertions/record/producer.d.cts +8 -7
  59. package/dist/assertions/record/producer.d.mts +8 -7
  60. package/dist/assertions/record/producer.d.ts +8 -7
  61. package/dist/assertions/runtime.cjs +49 -7
  62. package/dist/assertions/runtime.cjs.map +1 -1
  63. package/dist/cli/application.cjs +40 -0
  64. package/dist/cli/application.cjs.map +1 -0
  65. package/dist/cli/application.d.cts +129 -0
  66. package/dist/cli/application.d.mts +129 -0
  67. package/dist/cli/application.d.ts +129 -0
  68. package/dist/cli/application.js +24 -0
  69. package/dist/cli/application.js.map +1 -0
  70. package/dist/cli/bootstrap.cjs +10 -4
  71. package/dist/cli/bootstrap.cjs.map +1 -1
  72. package/dist/cli/node-application.cjs +123 -0
  73. package/dist/cli/node-application.cjs.map +1 -0
  74. package/dist/cli/node-application.d.cts +14 -0
  75. package/dist/cli/node-application.d.mts +14 -0
  76. package/dist/cli/node-application.d.ts +14 -0
  77. package/dist/cli/node-application.js +26 -0
  78. package/dist/cli/node-application.js.map +1 -0
  79. package/dist/cli/program.cjs +2807 -0
  80. package/dist/cli/program.cjs.map +1 -0
  81. package/dist/cli/program.d.cts +352 -0
  82. package/dist/cli/program.d.mts +352 -0
  83. package/dist/cli/program.d.ts +352 -0
  84. package/dist/cli/program.js +36 -0
  85. package/dist/cli/program.js.map +1 -0
  86. package/dist/cli/project-configuration.cjs +134 -0
  87. package/dist/cli/project-configuration.cjs.map +1 -0
  88. package/dist/cli/project-configuration.d.cts +64 -0
  89. package/dist/cli/project-configuration.d.mts +64 -0
  90. package/dist/cli/project-configuration.d.ts +64 -0
  91. package/dist/cli/project-configuration.js +22 -0
  92. package/dist/cli/project-configuration.js.map +1 -0
  93. package/dist/cli/record.cjs +20 -4
  94. package/dist/cli/record.cjs.map +1 -1
  95. package/dist/cli/record.d.cts +3 -3
  96. package/dist/cli/record.d.mts +3 -3
  97. package/dist/cli/record.d.ts +3 -3
  98. package/dist/cli.cjs +19 -3130
  99. package/dist/cli.cjs.map +1 -1
  100. package/dist/cli.d.cts +2 -148
  101. package/dist/cli.d.mts +2 -148
  102. package/dist/cli.d.ts +2 -148
  103. package/dist/cli.js +22 -30
  104. package/dist/context/assert-first.cjs +20 -15
  105. package/dist/context/assert-first.cjs.map +1 -1
  106. package/dist/eval/record/verdict.cjs +3 -2
  107. package/dist/eval/record/verdict.cjs.map +1 -1
  108. package/dist/experiment/host/index.cjs +1 -6
  109. package/dist/experiment/host/index.cjs.map +1 -1
  110. package/dist/experiment/host/index.d.cts +1 -0
  111. package/dist/experiment/host/index.d.mts +1 -0
  112. package/dist/experiment/host/index.d.ts +1 -0
  113. package/dist/load-config.cjs +13 -4
  114. package/dist/load-config.cjs.map +1 -1
  115. package/dist/load-config.d.cts +4 -3
  116. package/dist/load-config.d.mts +4 -3
  117. package/dist/load-config.d.ts +4 -3
  118. package/dist/load-config.js +4 -2
  119. package/dist/o11y/parsers/codex.cjs +29 -7
  120. package/dist/o11y/parsers/codex.cjs.map +1 -1
  121. package/dist/record/codec/core.d.cts +0 -2
  122. package/dist/record/codec/core.d.mts +0 -2
  123. package/dist/record/codec/core.d.ts +0 -2
  124. package/dist/record/codec/identifiers.cjs +2 -3
  125. package/dist/record/codec/identifiers.cjs.map +1 -1
  126. package/dist/record/codec/identifiers.d.cts +1 -2
  127. package/dist/record/codec/identifiers.d.mts +1 -2
  128. package/dist/record/codec/identifiers.d.ts +1 -2
  129. package/dist/record/codec/identifiers.js +10 -12
  130. package/dist/record/codec/index.js +42 -44
  131. package/dist/record/definition/attachment.cjs +1 -0
  132. package/dist/record/definition/attachment.cjs.map +1 -1
  133. package/dist/record/definition/attachment.d.cts +14 -0
  134. package/dist/record/definition/attachment.d.mts +14 -0
  135. package/dist/record/definition/attachment.d.ts +14 -0
  136. package/dist/record/family/assertions-v1.cjs +104 -0
  137. package/dist/record/family/assertions-v1.cjs.map +1 -0
  138. package/dist/record/family/assertions-v1.d.cts +2 -0
  139. package/dist/record/family/assertions-v1.d.mts +2 -0
  140. package/dist/record/family/assertions-v1.d.ts +2 -0
  141. package/dist/record/family/assertions-v1.js +6 -0
  142. package/dist/record/family/assertions-v1.js.map +1 -0
  143. package/dist/record/family/assertions.cjs +16 -5
  144. package/dist/record/family/assertions.cjs.map +1 -1
  145. package/dist/record/family/assertions.d.cts +510 -56
  146. package/dist/record/family/assertions.d.mts +510 -56
  147. package/dist/record/family/assertions.d.ts +510 -56
  148. package/dist/record/family/assertions.js +14 -10
  149. package/dist/record/family/catalog.cjs +17 -1
  150. package/dist/record/family/catalog.cjs.map +1 -1
  151. package/dist/record/family/catalog.d.cts +1292 -104
  152. package/dist/record/family/catalog.d.mts +1292 -104
  153. package/dist/record/family/catalog.d.ts +1292 -104
  154. package/dist/record/family/catalog.js +22 -20
  155. package/dist/record/family/index.js +144 -138
  156. package/dist/record/family/observability-v1.cjs +5 -0
  157. package/dist/record/family/observability-v1.cjs.map +1 -1
  158. package/dist/record/family/observability.cjs +1 -1
  159. package/dist/record/family/observability.cjs.map +1 -1
  160. package/dist/record/host/runtime.cjs +323 -173
  161. package/dist/record/host/runtime.cjs.map +1 -1
  162. package/dist/record/host/types.cjs.map +1 -1
  163. package/dist/record/host/types.d.cts +9 -7
  164. package/dist/record/host/types.d.mts +9 -7
  165. package/dist/record/host/types.d.ts +9 -7
  166. package/dist/record/model/core.cjs.map +1 -1
  167. package/dist/record/model/core.d.cts +1 -2
  168. package/dist/record/model/core.d.mts +1 -2
  169. package/dist/record/model/core.d.ts +1 -2
  170. package/dist/record/model/definition.cjs +1 -2
  171. package/dist/record/model/definition.cjs.map +1 -1
  172. package/dist/record/model/definition.d.cts +1 -7
  173. package/dist/record/model/definition.d.mts +1 -7
  174. package/dist/record/model/definition.d.ts +1 -7
  175. package/dist/record/model/identifiers.cjs +2 -3
  176. package/dist/record/model/identifiers.cjs.map +1 -1
  177. package/dist/record/model/identifiers.d.cts +1 -3
  178. package/dist/record/model/identifiers.d.mts +1 -3
  179. package/dist/record/model/identifiers.d.ts +1 -3
  180. package/dist/record/model/identifiers.js +36 -38
  181. package/dist/record/model/index.js +60 -62
  182. package/dist/record/platform/node.cjs +17 -7
  183. package/dist/record/platform/node.cjs.map +1 -1
  184. package/dist/record/platform/services.cjs.map +1 -1
  185. package/dist/record/platform/services.d.cts +8 -3
  186. package/dist/record/platform/services.d.mts +8 -3
  187. package/dist/record/platform/services.d.ts +8 -3
  188. package/dist/record/reader/format.cjs +16 -65
  189. package/dist/record/reader/format.cjs.map +1 -1
  190. package/dist/record/reader/format.d.cts +5 -9
  191. package/dist/record/reader/format.d.mts +5 -9
  192. package/dist/record/reader/format.d.ts +5 -9
  193. package/dist/record/reader/index.js +10 -8
  194. package/dist/record/reader/runtime.cjs +63 -32
  195. package/dist/record/reader/runtime.cjs.map +1 -1
  196. package/dist/record/reader/runtime.d.cts +40 -4
  197. package/dist/record/reader/runtime.d.mts +40 -4
  198. package/dist/record/reader/runtime.d.ts +40 -4
  199. package/dist/record/reader/runtime.js +6 -4
  200. package/dist/report/assets/enhance.js +5 -5
  201. package/dist/report/assets/styles.css +186 -24
  202. package/dist/report/built-in/result-components.cjs +8 -5
  203. package/dist/report/built-in/result-components.cjs.map +1 -1
  204. package/dist/report/built-in/standard.cjs +3 -0
  205. package/dist/report/built-in/standard.cjs.map +1 -1
  206. package/dist/report/built-in/standard.d.cts +2 -0
  207. package/dist/report/built-in/standard.d.mts +2 -0
  208. package/dist/report/built-in/standard.d.ts +2 -0
  209. package/dist/report/client-dist/app.js +53 -0
  210. package/dist/report/components/attempt-detail/compute.cjs +106 -231
  211. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  212. package/dist/report/components/attempt-detail/compute.d.cts +9 -43
  213. package/dist/report/components/attempt-detail/compute.d.mts +9 -43
  214. package/dist/report/components/attempt-detail/compute.d.ts +9 -43
  215. package/dist/report/components/attempt-detail/compute.js +2 -4
  216. package/dist/report/components/attempt-detail/content.cjs +3 -4
  217. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  218. package/dist/report/components/attempt-detail/validate.cjs +44 -2
  219. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  220. package/dist/report/components/entity-lists/compute.cjs +9 -15
  221. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  222. package/dist/report/components/entity-lists/content.cjs +53 -40
  223. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  224. package/dist/report/components/entity-lists/index.cjs +1 -3
  225. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  226. package/dist/report/components/experiment-detail/compute.cjs +4 -6
  227. package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
  228. package/dist/report/definition/cell.cjs +14 -7
  229. package/dist/report/definition/cell.cjs.map +1 -1
  230. package/dist/report/definition/cell.d.cts +4 -0
  231. package/dist/report/definition/cell.d.mts +4 -0
  232. package/dist/report/definition/cell.d.ts +4 -0
  233. package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
  234. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
  235. package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
  236. package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
  237. package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
  238. package/dist/report/definition/primitives/assertion-evidence.js +6 -0
  239. package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
  240. package/dist/report/definition/primitives.cjs +14 -1
  241. package/dist/report/definition/primitives.cjs.map +1 -1
  242. package/dist/report/definition/report.cjs +16 -8
  243. package/dist/report/definition/report.cjs.map +1 -1
  244. package/dist/report/definition/report.d.cts +6 -0
  245. package/dist/report/definition/report.d.mts +6 -0
  246. package/dist/report/definition/report.d.ts +6 -0
  247. package/dist/report/definition/table-text.cjs +12 -3
  248. package/dist/report/definition/table-text.cjs.map +1 -1
  249. package/dist/report/definition/table-text.d.cts +6 -1
  250. package/dist/report/definition/table-text.d.mts +6 -1
  251. package/dist/report/definition/table-text.d.ts +6 -1
  252. package/dist/report/execution/model.cjs +6 -14
  253. package/dist/report/execution/model.cjs.map +1 -1
  254. package/dist/report/execution/model.d.cts +5 -10
  255. package/dist/report/execution/model.d.mts +5 -10
  256. package/dist/report/execution/model.d.ts +5 -10
  257. package/dist/report/execution/model.js +6 -6
  258. package/dist/report/execution/paths.cjs +0 -11
  259. package/dist/report/execution/paths.cjs.map +1 -1
  260. package/dist/report/execution/paths.d.cts +0 -1
  261. package/dist/report/execution/paths.d.mts +0 -1
  262. package/dist/report/execution/paths.d.ts +0 -1
  263. package/dist/report/execution/paths.js +6 -8
  264. package/dist/report/host/execute.cjs +13 -22
  265. package/dist/report/host/execute.cjs.map +1 -1
  266. package/dist/report/host/execute.d.cts +1 -4
  267. package/dist/report/host/execute.d.mts +1 -4
  268. package/dist/report/host/execute.d.ts +1 -4
  269. package/dist/report/host/from-record.cjs +3 -0
  270. package/dist/report/host/from-record.cjs.map +1 -1
  271. package/dist/report/host/from-record.d.cts +4 -1
  272. package/dist/report/host/from-record.d.mts +4 -1
  273. package/dist/report/host/from-record.d.ts +4 -1
  274. package/dist/report/host/site-assets.cjs +1 -2
  275. package/dist/report/host/site-assets.cjs.map +1 -1
  276. package/dist/report/host/site-assets.d.cts +0 -1
  277. package/dist/report/host/site-assets.d.mts +0 -1
  278. package/dist/report/host/site-assets.d.ts +0 -1
  279. package/dist/report/host/site-assets.js +2 -4
  280. package/dist/report/host/static.cjs +71 -346
  281. package/dist/report/host/static.cjs.map +1 -1
  282. package/dist/report/host/static.d.cts +1 -3
  283. package/dist/report/host/static.d.mts +1 -3
  284. package/dist/report/host/static.d.ts +1 -3
  285. package/dist/report/host/static.js +2 -2
  286. package/dist/report/host/view-session.cjs.map +1 -1
  287. package/dist/report/host/view-session.d.cts +1 -1
  288. package/dist/report/host/view-session.d.mts +1 -1
  289. package/dist/report/host/view-session.d.ts +1 -1
  290. package/dist/report/model/locale.cjs +1 -1
  291. package/dist/report/model/locale.cjs.map +1 -1
  292. package/dist/report/model/locale.d.cts +1 -1
  293. package/dist/report/model/locale.d.mts +1 -1
  294. package/dist/report/model/locale.d.ts +1 -1
  295. package/dist/report/model/pricing.cjs +2 -2
  296. package/dist/report/model/pricing.cjs.map +1 -1
  297. package/dist/report/react/enhance.js +5 -5
  298. package/dist/report/react/styles.css +186 -24
  299. package/dist/runner/adoption.cjs +4 -7
  300. package/dist/runner/adoption.cjs.map +1 -1
  301. package/dist/runner/feedback/failure.cjs +77 -2
  302. package/dist/runner/feedback/failure.cjs.map +1 -1
  303. package/dist/runner/feedback/failure.d.cts +2 -1
  304. package/dist/runner/feedback/failure.d.mts +2 -1
  305. package/dist/runner/feedback/failure.d.ts +2 -1
  306. package/dist/runner/project-current.cjs +2 -13
  307. package/dist/runner/project-current.cjs.map +1 -1
  308. package/dist/runner/project-current.d.cts +4 -2
  309. package/dist/runner/project-current.d.mts +4 -2
  310. package/dist/runner/project-current.d.ts +4 -2
  311. package/dist/runner/reporters/braintrust.cjs +7 -7
  312. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  313. package/dist/runner/reuse-readback.cjs +3 -4
  314. package/dist/runner/reuse-readback.cjs.map +1 -1
  315. package/dist/runner/run.cjs +5 -2
  316. package/dist/runner/run.cjs.map +1 -1
  317. package/dist/view/server.cjs +2 -37
  318. package/dist/view/server.cjs.map +1 -1
  319. package/dist/view/server.d.cts +0 -3
  320. package/dist/view/server.d.mts +0 -3
  321. package/dist/view/server.d.ts +0 -3
  322. package/docs-site/zh/reference/builtin-agents.mdx +7 -7
  323. package/docs-site/zh/reference/official-adapters.mdx +4 -4
  324. package/docs-site/zh/reference/report-components.mdx +2 -2
  325. package/docs-site/zh/tutorials/configuration.mdx +2 -2
  326. package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
  327. package/docs-site/zh/tutorials/publish-report.mdx +4 -4
  328. package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
  329. package/docs-site/zh/tutorials/theming.mdx +2 -2
  330. package/package.json +4 -6
  331. package/dist/record/migration/index.cjs +0 -5
  332. package/dist/record/migration/index.cjs.map +0 -1
  333. package/dist/record/migration/index.d.cts +0 -11
  334. package/dist/record/migration/index.d.mts +0 -11
  335. package/dist/record/migration/index.d.ts +0 -11
  336. package/dist/record/migration/index.js +0 -6
  337. package/dist/record/migration/index.js.map +0 -1
  338. package/dist/report/host/site-runtime.cjs +0 -92
  339. package/dist/report/host/site-runtime.cjs.map +0 -1
  340. package/dist/report/host/site-runtime.d.cts +0 -9
  341. package/dist/report/host/site-runtime.d.mts +0 -9
  342. package/dist/report/host/site-runtime.d.ts +0 -9
  343. package/dist/report/host/site-runtime.js +0 -10
  344. package/dist/report/host/site-runtime.js.map +0 -1
  345. package/dist/view/client-dist/app.css +0 -2
  346. package/dist/view/client-dist/app.js +0 -49
  347. package/dist/view/data.cjs +0 -3
  348. package/dist/view/data.cjs.map +0 -1
  349. package/dist/view/data.d.cts +0 -9
  350. package/dist/view/data.d.mts +0 -9
  351. package/dist/view/data.d.ts +0 -9
  352. package/dist/view/data.js +0 -4
  353. package/dist/view/data.js.map +0 -1
  354. package/dist/view/index.cjs +0 -24
  355. package/dist/view/index.cjs.map +0 -1
  356. package/dist/view/index.d.cts +0 -9
  357. package/dist/view/index.d.mts +0 -9
  358. package/dist/view/index.d.ts +0 -9
  359. package/dist/view/index.js +0 -28
  360. package/dist/view/index.js.map +0 -1
  361. package/dist/view/report-view-cache.cjs +0 -200
  362. package/dist/view/report-view-cache.cjs.map +0 -1
  363. package/dist/view/report-view-cache.d.cts +0 -67
  364. package/dist/view/report-view-cache.d.mts +0 -67
  365. package/dist/view/report-view-cache.d.ts +0 -67
  366. package/dist/view/report-view-cache.js +0 -8
  367. package/dist/view/report-view-cache.js.map +0 -1
  368. package/dist/view/shared/types.cjs +0 -3
  369. package/dist/view/shared/types.cjs.map +0 -1
  370. package/dist/view/shared/types.d.cts +0 -51
  371. package/dist/view/shared/types.d.mts +0 -51
  372. package/dist/view/shared/types.d.ts +0 -51
  373. package/dist/view/shared/types.js +0 -4
  374. package/dist/view/shared/types.js.map +0 -1
  375. package/dist/view/site.cjs +0 -32
  376. package/dist/view/site.cjs.map +0 -1
  377. package/dist/view/site.d.cts +0 -24
  378. package/dist/view/site.d.mts +0 -24
  379. package/dist/view/site.d.ts +0 -24
  380. package/dist/view/site.js +0 -8
  381. package/dist/view/site.js.map +0 -1
  382. package/dist/view/styles.css +0 -170
  383. package/dist/view/template.html +0 -17
@@ -50,13 +50,13 @@ export const brandTheme = defineTheme({
50
50
 
51
51
  Report 可以通过结构化 `head` 声明 `meta`、`link`、`style` 和 `script`。内联内容、属性顺序和本地资源进入站点闭包,因此 view 与静态导出使用相同 bytes。
52
52
 
53
- 上例的 `head` 是结构化声明。这类样式只能服务作者自己具名的内容。不要加入全局 reset、替换 theme token、重画内建组件或修改 View shell。script 只能渐进增强;正文、导航、Evidence 和机器 JSON 不能依赖它。
53
+ 上例的 `head` 是结构化声明。这类样式只能服务作者自己具名的内容。不要加入全局 reset、替换 theme token、重画内建组件或修改 View shell。Host runtime 负责报告阅读与导航;作者 script 可以增强作者内容,但不能替代已闭合的正文、Evidence 或机器 JSON。
54
54
 
55
55
  ## 不会改变的边界
56
56
 
57
57
  主题不会改变 `MetricValue`、分母、state、Evidence 或终端文字语义。`show` 仍关闭一个目标 Page;`view` 与 `view --out` 仍构建完整站点。相同 revision 的 HTTP 页面、导出页面、CSS 与 reload client bytes 一致。
58
58
 
59
- 静态目录没有 view reload 端点时,reload client 会安静停用。断开网络或禁用 JavaScript 后,页面仍要保留正文、导航、详情、问题和下载。
59
+ 静态目录没有 view reload 端点时,实时刷新会安静停用。断开网络但启用随包交付的 JavaScript 时,页面仍保留正文、导航、详情、问题和下载;禁用 JavaScript 时只显示启用提示。
60
60
 
61
61
  ## 下一步
62
62
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "niceeval",
3
- "version": "0.13.3-canary.37",
3
+ "version": "0.13.3",
4
4
  "description": "Agent-native eval tool — eval agents, services, functions, and coding-agent fixtures",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -235,6 +235,7 @@
235
235
  "openai": "^6.49.0",
236
236
  "react": "^19.0.0",
237
237
  "react-dom": "^19.0.0",
238
+ "react-router-dom": "^7.18.2",
238
239
  "remark": "^15.0.1",
239
240
  "remark-gfm": "^4.0.1",
240
241
  "remark-parse": "^11.0.0",
@@ -247,12 +248,9 @@
247
248
  "@opentelemetry/exporter-trace-otlp-http": "^0.219.0",
248
249
  "@opentelemetry/sdk-trace-node": "^2.8.0",
249
250
  "@playwright/test": "1.61.1",
250
- "@radix-ui/react-collapsible": "^1.1.14",
251
251
  "@radix-ui/react-dialog": "^1.1.17",
252
- "@radix-ui/react-tabs": "^1.1.15",
253
252
  "@standard-schema/spec": "1.1.0",
254
253
  "@tailwindcss/postcss": "^4.3.3",
255
- "@tailwindcss/vite": "^4.3.1",
256
254
  "@types/dockerode": "^3.3.31",
257
255
  "@types/node": "^24.0.0",
258
256
  "@types/react": "^19.2.17",
@@ -262,7 +260,6 @@
262
260
  "@vercel/sandbox": "^2.2.1",
263
261
  "@vitejs/plugin-react": "^6.0.3",
264
262
  "braintrust": "^3.20.0",
265
- "class-variance-authority": "^0.7.1",
266
263
  "clsx": "^2.1.1",
267
264
  "concurrently": "^10.0.5",
268
265
  "dockerode": "^4.0.2",
@@ -330,10 +327,11 @@
330
327
  "pr:body": "tsx scripts/pr-body.ts",
331
328
  "docs:reference": "tsx scripts/generate-reference.ts",
332
329
  "tiers:sync": "node scripts/sync-tiers.mjs sync",
333
- "view:build": "vite build --config src/view/app/vite.config.ts",
330
+ "view:build": "vite build --config src/report/client/vite.config.ts",
334
331
  "build:report": "pnpm run build:package",
335
332
  "build:package": "pnpm run view:build && node scripts/package-runtime/build.mjs",
336
333
  "build:index": "tsx scripts/generate-reference.ts --bundled-index",
334
+ "dev:link": "node scripts/link-consumer.mjs",
337
335
  "site:dev": "cd site && node scripts/dev.mjs",
338
336
  "site:build": "cd site && next build && cd .. && tsx scripts/submit-indexnow.ts",
339
337
  "docs:dev": "node scripts/docs-dev.mjs",
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.currentRecordAdjacentMigrations = void 0;
4
- exports.currentRecordAdjacentMigrations = Object.freeze([]);
5
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAUa,QAAA,+BAA+B,GAAG,MAAM,CAAC,MAAM,CAAC,EAAwD,CAAC,CAAC","sourcesContent":["/**\n * The initial public Record release has no predecessor to migrate. Keep the\n * package-owned adjacent-step shape here so a later released schema can add a\n * fixed `n -> n + 1` entry without reviving registries or third-party hooks.\n * This module is intentionally outside the ordinary reader import graph.\n */\nexport interface RecordAdjacentMigration {\n readonly fromSchemaVersion: number;\n readonly toSchemaVersion: number;\n}\nexport const currentRecordAdjacentMigrations = Object.freeze([] as const satisfies readonly RecordAdjacentMigration[]);\n"]}
@@ -1,11 +0,0 @@
1
- /**
2
- * The initial public Record release has no predecessor to migrate. Keep the
3
- * package-owned adjacent-step shape here so a later released schema can add a
4
- * fixed `n -> n + 1` entry without reviving registries or third-party hooks.
5
- * This module is intentionally outside the ordinary reader import graph.
6
- */
7
- export interface RecordAdjacentMigration {
8
- readonly fromSchemaVersion: number;
9
- readonly toSchemaVersion: number;
10
- }
11
- export declare const currentRecordAdjacentMigrations: readonly [];
@@ -1,11 +0,0 @@
1
- /**
2
- * The initial public Record release has no predecessor to migrate. Keep the
3
- * package-owned adjacent-step shape here so a later released schema can add a
4
- * fixed `n -> n + 1` entry without reviving registries or third-party hooks.
5
- * This module is intentionally outside the ordinary reader import graph.
6
- */
7
- export interface RecordAdjacentMigration {
8
- readonly fromSchemaVersion: number;
9
- readonly toSchemaVersion: number;
10
- }
11
- export declare const currentRecordAdjacentMigrations: readonly [];
@@ -1,11 +0,0 @@
1
- /**
2
- * The initial public Record release has no predecessor to migrate. Keep the
3
- * package-owned adjacent-step shape here so a later released schema can add a
4
- * fixed `n -> n + 1` entry without reviving registries or third-party hooks.
5
- * This module is intentionally outside the ordinary reader import graph.
6
- */
7
- export interface RecordAdjacentMigration {
8
- readonly fromSchemaVersion: number;
9
- readonly toSchemaVersion: number;
10
- }
11
- export declare const currentRecordAdjacentMigrations: readonly [];
@@ -1,6 +0,0 @@
1
- import { createRequire as __niceevalCreateRequire } from "node:module";
2
- const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
- const __niceevalCanonical = __niceevalRequire("./index.cjs");
4
- const __niceevalExport0 = __niceevalCanonical["currentRecordAdjacentMigrations"];
5
- export { __niceevalExport0 as currentRecordAdjacentMigrations };
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"names":[],"mappings":""}
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.REPORT_RELOAD_RUNTIME = exports.REPORT_LOCALE_RUNTIME = void 0;
4
- exports.reportSiteRuntime = reportSiteRuntime;
5
- /**
6
- * Host-owned behavior shared byte-for-byte by live view and static export.
7
- * Missing refresh endpoints and locked-down storage are normal static-site
8
- * conditions, so every boundary fails quietly without altering report data.
9
- */
10
- exports.REPORT_LOCALE_RUNTIME = `(() => {
11
- "use strict";
12
- const locales = ["en", "zh-CN"];
13
- const views = Array.from(document.querySelectorAll("[data-niceeval-locale]"));
14
- const selectors = Array.from(document.querySelectorAll("[data-niceeval-locale-select]"));
15
- if (views.length === 0) return;
16
- const stored = () => {
17
- try {
18
- const value = localStorage.getItem("niceeval:view:locale");
19
- return locales.includes(value) ? value : undefined;
20
- } catch { return undefined; }
21
- };
22
- const preferred = () => {
23
- const values = typeof navigator === "undefined" ? [] : [navigator.language, ...(navigator.languages || [])];
24
- return values.some(value => String(value).toLowerCase().startsWith("zh")) ? "zh-CN" : "en";
25
- };
26
- const select = (locale, persist) => {
27
- if (!locales.includes(locale)) return;
28
- for (const view of views) view.hidden = view.dataset.niceevalLocale !== locale;
29
- for (const selector of selectors) selector.value = locale;
30
- document.documentElement.lang = locale;
31
- const title = document.documentElement.getAttribute("data-niceeval-title-" + locale.toLowerCase());
32
- if (title !== null) document.title = title;
33
- if (!persist) return;
34
- try { localStorage.setItem("niceeval:view:locale", locale); } catch {}
35
- };
36
- for (const selector of selectors) {
37
- selector.addEventListener("change", () => select(selector.value, true));
38
- }
39
- for (const experiment of document.querySelectorAll("[data-niceeval-experiment-select]")) {
40
- experiment.addEventListener("change", () => {
41
- if (experiment.value) location.href = experiment.value;
42
- });
43
- }
44
- select(stored() || preferred(), false);
45
- })();`;
46
- exports.REPORT_RELOAD_RUNTIME = `(() => {
47
- "use strict";
48
- if (location.protocol !== "http:" && location.protocol !== "https:") return;
49
- const source = document.currentScript && document.currentScript.src;
50
- if (!source) return;
51
- const endpoint = new URL("refresh", source).toString();
52
- let observed;
53
- let live;
54
- const probe = async () => {
55
- try {
56
- // The runtime file exists in both view and static output with identical
57
- // bytes. Only the live Host adds its revision header, so a generic
58
- // static server stops here without ever requesting a missing endpoint
59
- // (and therefore without producing a browser 404 console error).
60
- if (live === undefined) {
61
- const runtime = await fetch(source, {
62
- cache: "no-store",
63
- credentials: "same-origin",
64
- });
65
- live = runtime.ok && runtime.headers.has("x-niceeval-report-revision");
66
- }
67
- if (!live) return;
68
- const response = await fetch(endpoint, {
69
- cache: "no-store",
70
- credentials: "same-origin",
71
- headers: { "x-niceeval-refresh-probe": "1" },
72
- });
73
- if (response.status !== 204) return;
74
- const identity = response.headers.get("x-niceeval-report-content-hash");
75
- if (response.headers.get("x-niceeval-view-stale") === "1" ||
76
- (observed !== undefined && identity !== null && identity !== observed)) {
77
- location.reload();
78
- return;
79
- }
80
- if (identity !== null) observed = identity;
81
- setTimeout(probe, 1000);
82
- } catch {
83
- // Static, offline, and stopped view endpoints quietly disable reload.
84
- }
85
- };
86
- setTimeout(probe, 1000);
87
- })();`;
88
- /** Package enhancer first, then shell locale and optional reload behavior. */
89
- function reportSiteRuntime(enhancer) {
90
- return `${enhancer.trimEnd()}\n${exports.REPORT_LOCALE_RUNTIME}\n${exports.REPORT_RELOAD_RUNTIME}\n`;
91
- }
92
- //# sourceMappingURL=site-runtime.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"site-runtime.js","sourceRoot":"","sources":["site-runtime.ts"],"names":[],"mappings":";;;AAoFA,8CAEC;AAtFD;;;;GAIG;AACU,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmC/B,CAAC;AACM,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyC/B,CAAC;AACP,8EAA8E;AAC9E,SAAgB,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,6BAAqB,KAAK,6BAAqB,IAAI,CAAC;AACzF,CAAC","sourcesContent":["/**\n * Host-owned behavior shared byte-for-byte by live view and static export.\n * Missing refresh endpoints and locked-down storage are normal static-site\n * conditions, so every boundary fails quietly without altering report data.\n */\nexport const REPORT_LOCALE_RUNTIME = `(() => {\n \"use strict\";\n const locales = [\"en\", \"zh-CN\"];\n const views = Array.from(document.querySelectorAll(\"[data-niceeval-locale]\"));\n const selectors = Array.from(document.querySelectorAll(\"[data-niceeval-locale-select]\"));\n if (views.length === 0) return;\n const stored = () => {\n try {\n const value = localStorage.getItem(\"niceeval:view:locale\");\n return locales.includes(value) ? value : undefined;\n } catch { return undefined; }\n };\n const preferred = () => {\n const values = typeof navigator === \"undefined\" ? [] : [navigator.language, ...(navigator.languages || [])];\n return values.some(value => String(value).toLowerCase().startsWith(\"zh\")) ? \"zh-CN\" : \"en\";\n };\n const select = (locale, persist) => {\n if (!locales.includes(locale)) return;\n for (const view of views) view.hidden = view.dataset.niceevalLocale !== locale;\n for (const selector of selectors) selector.value = locale;\n document.documentElement.lang = locale;\n const title = document.documentElement.getAttribute(\"data-niceeval-title-\" + locale.toLowerCase());\n if (title !== null) document.title = title;\n if (!persist) return;\n try { localStorage.setItem(\"niceeval:view:locale\", locale); } catch {}\n };\n for (const selector of selectors) {\n selector.addEventListener(\"change\", () => select(selector.value, true));\n }\n for (const experiment of document.querySelectorAll(\"[data-niceeval-experiment-select]\")) {\n experiment.addEventListener(\"change\", () => {\n if (experiment.value) location.href = experiment.value;\n });\n }\n select(stored() || preferred(), false);\n})();`;\nexport const REPORT_RELOAD_RUNTIME = `(() => {\n \"use strict\";\n if (location.protocol !== \"http:\" && location.protocol !== \"https:\") return;\n const source = document.currentScript && document.currentScript.src;\n if (!source) return;\n const endpoint = new URL(\"refresh\", source).toString();\n let observed;\n let live;\n const probe = async () => {\n try {\n // The runtime file exists in both view and static output with identical\n // bytes. Only the live Host adds its revision header, so a generic\n // static server stops here without ever requesting a missing endpoint\n // (and therefore without producing a browser 404 console error).\n if (live === undefined) {\n const runtime = await fetch(source, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n });\n live = runtime.ok && runtime.headers.has(\"x-niceeval-report-revision\");\n }\n if (!live) return;\n const response = await fetch(endpoint, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n headers: { \"x-niceeval-refresh-probe\": \"1\" },\n });\n if (response.status !== 204) return;\n const identity = response.headers.get(\"x-niceeval-report-content-hash\");\n if (response.headers.get(\"x-niceeval-view-stale\") === \"1\" ||\n (observed !== undefined && identity !== null && identity !== observed)) {\n location.reload();\n return;\n }\n if (identity !== null) observed = identity;\n setTimeout(probe, 1000);\n } catch {\n // Static, offline, and stopped view endpoints quietly disable reload.\n }\n };\n setTimeout(probe, 1000);\n})();`;\n/** Package enhancer first, then shell locale and optional reload behavior. */\nexport function reportSiteRuntime(enhancer: string): string {\n return `${enhancer.trimEnd()}\\n${REPORT_LOCALE_RUNTIME}\\n${REPORT_RELOAD_RUNTIME}\\n`;\n}\n"]}
@@ -1,9 +0,0 @@
1
- /**
2
- * Host-owned behavior shared byte-for-byte by live view and static export.
3
- * Missing refresh endpoints and locked-down storage are normal static-site
4
- * conditions, so every boundary fails quietly without altering report data.
5
- */
6
- export declare const REPORT_LOCALE_RUNTIME = "(() => {\n \"use strict\";\n const locales = [\"en\", \"zh-CN\"];\n const views = Array.from(document.querySelectorAll(\"[data-niceeval-locale]\"));\n const selectors = Array.from(document.querySelectorAll(\"[data-niceeval-locale-select]\"));\n if (views.length === 0) return;\n const stored = () => {\n try {\n const value = localStorage.getItem(\"niceeval:view:locale\");\n return locales.includes(value) ? value : undefined;\n } catch { return undefined; }\n };\n const preferred = () => {\n const values = typeof navigator === \"undefined\" ? [] : [navigator.language, ...(navigator.languages || [])];\n return values.some(value => String(value).toLowerCase().startsWith(\"zh\")) ? \"zh-CN\" : \"en\";\n };\n const select = (locale, persist) => {\n if (!locales.includes(locale)) return;\n for (const view of views) view.hidden = view.dataset.niceevalLocale !== locale;\n for (const selector of selectors) selector.value = locale;\n document.documentElement.lang = locale;\n const title = document.documentElement.getAttribute(\"data-niceeval-title-\" + locale.toLowerCase());\n if (title !== null) document.title = title;\n if (!persist) return;\n try { localStorage.setItem(\"niceeval:view:locale\", locale); } catch {}\n };\n for (const selector of selectors) {\n selector.addEventListener(\"change\", () => select(selector.value, true));\n }\n for (const experiment of document.querySelectorAll(\"[data-niceeval-experiment-select]\")) {\n experiment.addEventListener(\"change\", () => {\n if (experiment.value) location.href = experiment.value;\n });\n }\n select(stored() || preferred(), false);\n})();";
7
- export declare const REPORT_RELOAD_RUNTIME = "(() => {\n \"use strict\";\n if (location.protocol !== \"http:\" && location.protocol !== \"https:\") return;\n const source = document.currentScript && document.currentScript.src;\n if (!source) return;\n const endpoint = new URL(\"refresh\", source).toString();\n let observed;\n let live;\n const probe = async () => {\n try {\n // The runtime file exists in both view and static output with identical\n // bytes. Only the live Host adds its revision header, so a generic\n // static server stops here without ever requesting a missing endpoint\n // (and therefore without producing a browser 404 console error).\n if (live === undefined) {\n const runtime = await fetch(source, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n });\n live = runtime.ok && runtime.headers.has(\"x-niceeval-report-revision\");\n }\n if (!live) return;\n const response = await fetch(endpoint, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n headers: { \"x-niceeval-refresh-probe\": \"1\" },\n });\n if (response.status !== 204) return;\n const identity = response.headers.get(\"x-niceeval-report-content-hash\");\n if (response.headers.get(\"x-niceeval-view-stale\") === \"1\" ||\n (observed !== undefined && identity !== null && identity !== observed)) {\n location.reload();\n return;\n }\n if (identity !== null) observed = identity;\n setTimeout(probe, 1000);\n } catch {\n // Static, offline, and stopped view endpoints quietly disable reload.\n }\n };\n setTimeout(probe, 1000);\n})();";
8
- /** Package enhancer first, then shell locale and optional reload behavior. */
9
- export declare function reportSiteRuntime(enhancer: string): string;
@@ -1,9 +0,0 @@
1
- /**
2
- * Host-owned behavior shared byte-for-byte by live view and static export.
3
- * Missing refresh endpoints and locked-down storage are normal static-site
4
- * conditions, so every boundary fails quietly without altering report data.
5
- */
6
- export declare const REPORT_LOCALE_RUNTIME = "(() => {\n \"use strict\";\n const locales = [\"en\", \"zh-CN\"];\n const views = Array.from(document.querySelectorAll(\"[data-niceeval-locale]\"));\n const selectors = Array.from(document.querySelectorAll(\"[data-niceeval-locale-select]\"));\n if (views.length === 0) return;\n const stored = () => {\n try {\n const value = localStorage.getItem(\"niceeval:view:locale\");\n return locales.includes(value) ? value : undefined;\n } catch { return undefined; }\n };\n const preferred = () => {\n const values = typeof navigator === \"undefined\" ? [] : [navigator.language, ...(navigator.languages || [])];\n return values.some(value => String(value).toLowerCase().startsWith(\"zh\")) ? \"zh-CN\" : \"en\";\n };\n const select = (locale, persist) => {\n if (!locales.includes(locale)) return;\n for (const view of views) view.hidden = view.dataset.niceevalLocale !== locale;\n for (const selector of selectors) selector.value = locale;\n document.documentElement.lang = locale;\n const title = document.documentElement.getAttribute(\"data-niceeval-title-\" + locale.toLowerCase());\n if (title !== null) document.title = title;\n if (!persist) return;\n try { localStorage.setItem(\"niceeval:view:locale\", locale); } catch {}\n };\n for (const selector of selectors) {\n selector.addEventListener(\"change\", () => select(selector.value, true));\n }\n for (const experiment of document.querySelectorAll(\"[data-niceeval-experiment-select]\")) {\n experiment.addEventListener(\"change\", () => {\n if (experiment.value) location.href = experiment.value;\n });\n }\n select(stored() || preferred(), false);\n})();";
7
- export declare const REPORT_RELOAD_RUNTIME = "(() => {\n \"use strict\";\n if (location.protocol !== \"http:\" && location.protocol !== \"https:\") return;\n const source = document.currentScript && document.currentScript.src;\n if (!source) return;\n const endpoint = new URL(\"refresh\", source).toString();\n let observed;\n let live;\n const probe = async () => {\n try {\n // The runtime file exists in both view and static output with identical\n // bytes. Only the live Host adds its revision header, so a generic\n // static server stops here without ever requesting a missing endpoint\n // (and therefore without producing a browser 404 console error).\n if (live === undefined) {\n const runtime = await fetch(source, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n });\n live = runtime.ok && runtime.headers.has(\"x-niceeval-report-revision\");\n }\n if (!live) return;\n const response = await fetch(endpoint, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n headers: { \"x-niceeval-refresh-probe\": \"1\" },\n });\n if (response.status !== 204) return;\n const identity = response.headers.get(\"x-niceeval-report-content-hash\");\n if (response.headers.get(\"x-niceeval-view-stale\") === \"1\" ||\n (observed !== undefined && identity !== null && identity !== observed)) {\n location.reload();\n return;\n }\n if (identity !== null) observed = identity;\n setTimeout(probe, 1000);\n } catch {\n // Static, offline, and stopped view endpoints quietly disable reload.\n }\n };\n setTimeout(probe, 1000);\n})();";
8
- /** Package enhancer first, then shell locale and optional reload behavior. */
9
- export declare function reportSiteRuntime(enhancer: string): string;
@@ -1,9 +0,0 @@
1
- /**
2
- * Host-owned behavior shared byte-for-byte by live view and static export.
3
- * Missing refresh endpoints and locked-down storage are normal static-site
4
- * conditions, so every boundary fails quietly without altering report data.
5
- */
6
- export declare const REPORT_LOCALE_RUNTIME = "(() => {\n \"use strict\";\n const locales = [\"en\", \"zh-CN\"];\n const views = Array.from(document.querySelectorAll(\"[data-niceeval-locale]\"));\n const selectors = Array.from(document.querySelectorAll(\"[data-niceeval-locale-select]\"));\n if (views.length === 0) return;\n const stored = () => {\n try {\n const value = localStorage.getItem(\"niceeval:view:locale\");\n return locales.includes(value) ? value : undefined;\n } catch { return undefined; }\n };\n const preferred = () => {\n const values = typeof navigator === \"undefined\" ? [] : [navigator.language, ...(navigator.languages || [])];\n return values.some(value => String(value).toLowerCase().startsWith(\"zh\")) ? \"zh-CN\" : \"en\";\n };\n const select = (locale, persist) => {\n if (!locales.includes(locale)) return;\n for (const view of views) view.hidden = view.dataset.niceevalLocale !== locale;\n for (const selector of selectors) selector.value = locale;\n document.documentElement.lang = locale;\n const title = document.documentElement.getAttribute(\"data-niceeval-title-\" + locale.toLowerCase());\n if (title !== null) document.title = title;\n if (!persist) return;\n try { localStorage.setItem(\"niceeval:view:locale\", locale); } catch {}\n };\n for (const selector of selectors) {\n selector.addEventListener(\"change\", () => select(selector.value, true));\n }\n for (const experiment of document.querySelectorAll(\"[data-niceeval-experiment-select]\")) {\n experiment.addEventListener(\"change\", () => {\n if (experiment.value) location.href = experiment.value;\n });\n }\n select(stored() || preferred(), false);\n})();";
7
- export declare const REPORT_RELOAD_RUNTIME = "(() => {\n \"use strict\";\n if (location.protocol !== \"http:\" && location.protocol !== \"https:\") return;\n const source = document.currentScript && document.currentScript.src;\n if (!source) return;\n const endpoint = new URL(\"refresh\", source).toString();\n let observed;\n let live;\n const probe = async () => {\n try {\n // The runtime file exists in both view and static output with identical\n // bytes. Only the live Host adds its revision header, so a generic\n // static server stops here without ever requesting a missing endpoint\n // (and therefore without producing a browser 404 console error).\n if (live === undefined) {\n const runtime = await fetch(source, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n });\n live = runtime.ok && runtime.headers.has(\"x-niceeval-report-revision\");\n }\n if (!live) return;\n const response = await fetch(endpoint, {\n cache: \"no-store\",\n credentials: \"same-origin\",\n headers: { \"x-niceeval-refresh-probe\": \"1\" },\n });\n if (response.status !== 204) return;\n const identity = response.headers.get(\"x-niceeval-report-content-hash\");\n if (response.headers.get(\"x-niceeval-view-stale\") === \"1\" ||\n (observed !== undefined && identity !== null && identity !== observed)) {\n location.reload();\n return;\n }\n if (identity !== null) observed = identity;\n setTimeout(probe, 1000);\n } catch {\n // Static, offline, and stopped view endpoints quietly disable reload.\n }\n };\n setTimeout(probe, 1000);\n})();";
8
- /** Package enhancer first, then shell locale and optional reload behavior. */
9
- export declare function reportSiteRuntime(enhancer: string): string;
@@ -1,10 +0,0 @@
1
- import { createRequire as __niceevalCreateRequire } from "node:module";
2
- const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
- const __niceevalCanonical = __niceevalRequire("./site-runtime.cjs");
4
- const __niceevalExport0 = __niceevalCanonical["REPORT_LOCALE_RUNTIME"];
5
- export { __niceevalExport0 as REPORT_LOCALE_RUNTIME };
6
- const __niceevalExport1 = __niceevalCanonical["REPORT_RELOAD_RUNTIME"];
7
- export { __niceevalExport1 as REPORT_RELOAD_RUNTIME };
8
- const __niceevalExport2 = __niceevalCanonical["reportSiteRuntime"];
9
- export { __niceevalExport2 as reportSiteRuntime };
10
- //# sourceMappingURL=site-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"site-runtime.js","sources":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-panel:var(--panel);--color-panel-2:var(--panel-2);--color-line:var(--line);--color-line-strong:var(--line-strong);--color-text:var(--text);--color-muted:var(--muted)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.inset-0{inset:0}.top-1\/2{top:50%}.left-1\/2{left:50%}.z-\[200\]{z-index:200}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-7{height:calc(var(--spacing) * 7)}.max-h-\[min\(86vh\,820px\)\]{max-height:min(86vh,820px)}.w-7{width:calc(var(--spacing) * 7)}.w-\[min\(1120px\,calc\(100vw-48px\)\)\]{width:min(1120px,100vw - 48px)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.place-items-center{place-items:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.gap-\[22px\]{gap:22px}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\(--radius\){border-radius:var(--radius)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-line{border-color:var(--color-line)}.border-line-strong{border-color:var(--color-line-strong)}.border-transparent{border-color:#0000}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab, red, red)){.bg-black\/90{background-color:color-mix(in oklab, var(--color-black) 90%, transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-transparent{background-color:#0000}.p-0{padding:0}.px-7{padding-inline:calc(var(--spacing) * 7)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.font-\[inherit\]{font-family:inherit}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-muted{color:var(--color-muted)}.shadow-\[0_20px_60px_rgba\(0\,0\,0\,0\.45\)\]{--tw-shadow:0 20px 60px var(--tw-shadow-color,#00000073);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:border-line:hover{border-color:var(--color-line)}.hover\:bg-panel-2:hover{background-color:var(--color-panel-2)}.hover\:text-text:hover{color:var(--color-text)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.data-\[state\=active\]\:font-\[560\][data-state=active]{--tw-font-weight:560;font-weight:560}.data-\[state\=active\]\:text-text[data-state=active]{color:var(--color-text)}@media not all and (width>=760px){.max-\[760px\]\:hidden{display:none}}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:var(--niceeval-color-page,#050505);--panel:var(--niceeval-color-surface,#0b0b0b);--panel-2:var(--niceeval-color-surface-subtle,#111);--line:var(--niceeval-color-border,#262626);--line-strong:var(--niceeval-color-border-strong,#343434);--text:var(--niceeval-color-text,#ededed);--muted:var(--niceeval-color-text-secondary,#a1a1aa);--soft:var(--niceeval-color-text-tertiary,#74747b);--good:var(--niceeval-color-positive,#3ddc97);--bad:var(--niceeval-color-negative,#ff6b6b);--warn:var(--niceeval-color-warning,#e8b84a);--blue:var(--niceeval-color-accent,#cbd6dc);--focus:var(--niceeval-color-focus,#cbd6dc);--radius:var(--niceeval-radius,0);font-family:var(--niceeval-font-sans,ui-sans-serif, system-ui, -apple-system, "Segoe UI", "Helvetica Neue", "PingFang SC", sans-serif)}*{box-sizing:border-box}html{scrollbar-gutter:stable;overflow-y:scroll}body{background:var(--bg);color:var(--text);letter-spacing:0;margin:0}a{color:inherit}.topbar{border-bottom:1px solid var(--line);background:var(--bg);z-index:10;justify-content:space-between;align-items:center;gap:28px;height:64px;padding:0 clamp(20px,5vw,80px);display:flex;position:sticky;top:0}.brand{flex:none;align-items:baseline;gap:12px;font-size:20px;font-weight:690;text-decoration:none;display:flex}.mark{border:1.25px solid var(--text);width:18px;height:18px;display:inline-block;transform:rotate(45deg)}.lang-switch{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);flex:none;align-items:center;display:inline-flex;overflow:hidden}.lang-switch button{border:0;border-right:1px solid var(--line);min-width:44px;height:30px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;font-size:12px;line-height:1}.lang-switch button:last-child{border-right:0}.lang-switch button:hover{color:var(--text)}.lang-switch button.is-active{background:var(--panel-2);color:var(--text);font-weight:620}main{width:min(1120px,100vw - 40px);margin:0 auto;padding:clamp(52px,7vw,82px) 0 72px}.report-slot{margin:0 auto 36px}@media (width<=760px){.topbar{padding:0 20px}.lang-switch button{min-width:40px}main{width:min(100vw - 28px,1120px);padding-top:42px}}.shell-links{align-items:center;gap:8px;margin-left:auto;display:flex}.shell-links a{color:var(--soft);align-items:center;gap:6px;padding:6px 4px;font-size:13px;text-decoration:none;display:inline-flex}.shell-links a:hover{color:var(--text)}.shell-link-icon{align-items:center;display:inline-flex}.shell-link-icon svg{fill:currentColor;width:14px;height:14px;display:block}.site-footer{color:var(--soft);flex-wrap:wrap;justify-content:center;align-items:baseline;gap:12px;padding:24px 24px 32px;font-size:12px;display:flex}.niceeval-page-error pre{white-space:pre-wrap}.view-rebuild-error{z-index:9999;border:1px solid var(--fail,#a33a30);background:var(--bg,#fff);max-width:50vw;color:var(--fail,#a33a30);white-space:pre-wrap;margin:0;padding:10px;position:fixed;bottom:12px;right:12px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}