@prismatic-io/lux 0.0.2-preview.3 → 0.0.2-preview.32

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 (727) hide show
  1. package/lib/answerers/claude-code/index.d.ts +15 -3
  2. package/lib/answerers/claude-code/index.d.ts.map +1 -1
  3. package/lib/answerers/claude-code/index.js +6 -5
  4. package/lib/answerers/claude-code/index.js.map +1 -1
  5. package/lib/answerers/persona/index.d.ts +44 -5
  6. package/lib/answerers/persona/index.d.ts.map +1 -1
  7. package/lib/answerers/persona/index.js +60 -34
  8. package/lib/answerers/persona/index.js.map +1 -1
  9. package/lib/answerers/terminal/index.d.ts +9 -3
  10. package/lib/answerers/terminal/index.d.ts.map +1 -1
  11. package/lib/answerers/terminal/index.js +7 -5
  12. package/lib/answerers/terminal/index.js.map +1 -1
  13. package/lib/assertions/authoring.d.ts +2 -2
  14. package/lib/assertions/authoring.d.ts.map +1 -1
  15. package/lib/assertions/authoring.js.map +1 -1
  16. package/lib/assertions/core/command-exits-zero.d.ts +4 -1
  17. package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
  18. package/lib/assertions/core/command-exits-zero.js +50 -7
  19. package/lib/assertions/core/command-exits-zero.js.map +1 -1
  20. package/lib/assertions/core/event-checks.d.ts +3 -0
  21. package/lib/assertions/core/event-checks.d.ts.map +1 -1
  22. package/lib/assertions/core/event-checks.js +49 -3
  23. package/lib/assertions/core/event-checks.js.map +1 -1
  24. package/lib/assertions/core/file-checks.d.ts +6 -0
  25. package/lib/assertions/core/file-checks.d.ts.map +1 -1
  26. package/lib/assertions/core/helpers.d.ts +2 -7
  27. package/lib/assertions/core/helpers.d.ts.map +1 -1
  28. package/lib/assertions/core/helpers.js +2 -6
  29. package/lib/assertions/core/helpers.js.map +1 -1
  30. package/lib/assertions/core/index.d.ts.map +1 -1
  31. package/lib/assertions/core/index.js +2 -1
  32. package/lib/assertions/core/index.js.map +1 -1
  33. package/lib/assertions/core/json-pointer-equals.d.ts +1 -0
  34. package/lib/assertions/core/json-pointer-equals.d.ts.map +1 -1
  35. package/lib/assertions/core/output-checks.d.ts +3 -0
  36. package/lib/assertions/core/output-checks.d.ts.map +1 -1
  37. package/lib/assertions/core/predicate.d.ts +1 -0
  38. package/lib/assertions/core/predicate.d.ts.map +1 -1
  39. package/lib/assertions/core/resource-checks.d.ts +25 -0
  40. package/lib/assertions/core/resource-checks.d.ts.map +1 -1
  41. package/lib/assertions/core/resource-checks.js +35 -5
  42. package/lib/assertions/core/resource-checks.js.map +1 -1
  43. package/lib/assertions/rubric/index.d.ts +28 -3
  44. package/lib/assertions/rubric/index.d.ts.map +1 -1
  45. package/lib/assertions/rubric/index.js +59 -13
  46. package/lib/assertions/rubric/index.js.map +1 -1
  47. package/lib/assertions/rubric/internal.d.ts +30 -5
  48. package/lib/assertions/rubric/internal.d.ts.map +1 -1
  49. package/lib/assertions/rubric/internal.js +181 -28
  50. package/lib/assertions/rubric/internal.js.map +1 -1
  51. package/lib/authoring.d.ts +36 -2
  52. package/lib/authoring.d.ts.map +1 -1
  53. package/lib/authoring.js +36 -1
  54. package/lib/authoring.js.map +1 -1
  55. package/lib/cli/bin.js +2 -13
  56. package/lib/cli/bin.js.map +1 -1
  57. package/lib/cli/command-runtime.d.ts +3 -3
  58. package/lib/cli/command-runtime.d.ts.map +1 -1
  59. package/lib/cli/command-runtime.js +17 -6
  60. package/lib/cli/command-runtime.js.map +1 -1
  61. package/lib/cli/doctor.d.ts +55 -0
  62. package/lib/cli/doctor.d.ts.map +1 -0
  63. package/lib/cli/doctor.js +14 -0
  64. package/lib/cli/doctor.js.map +1 -0
  65. package/lib/cli/harness-plan.d.ts +26 -0
  66. package/lib/cli/harness-plan.d.ts.map +1 -0
  67. package/lib/cli/harness-plan.js +75 -0
  68. package/lib/cli/harness-plan.js.map +1 -0
  69. package/lib/cli/init-templates.d.ts +11 -0
  70. package/lib/cli/init-templates.d.ts.map +1 -0
  71. package/lib/cli/init-templates.js +215 -0
  72. package/lib/cli/init-templates.js.map +1 -0
  73. package/lib/cli/init.d.ts +10 -0
  74. package/lib/cli/init.d.ts.map +1 -1
  75. package/lib/cli/init.js +34 -173
  76. package/lib/cli/init.js.map +1 -1
  77. package/lib/cli/output-schemas.d.ts +1408 -0
  78. package/lib/cli/output-schemas.d.ts.map +1 -0
  79. package/lib/cli/output-schemas.js +91 -0
  80. package/lib/cli/output-schemas.js.map +1 -0
  81. package/lib/cli/program.d.ts +140 -12
  82. package/lib/cli/program.d.ts.map +1 -1
  83. package/lib/cli/program.js +779 -646
  84. package/lib/cli/program.js.map +1 -1
  85. package/lib/cli/render/reporter.d.ts.map +1 -1
  86. package/lib/cli/render/reporter.js +48 -8
  87. package/lib/cli/render/reporter.js.map +1 -1
  88. package/lib/cli/run-options.d.ts +20 -4
  89. package/lib/cli/run-options.d.ts.map +1 -1
  90. package/lib/cli/run-options.js +100 -19
  91. package/lib/cli/run-options.js.map +1 -1
  92. package/lib/cli/view.d.ts +15 -0
  93. package/lib/cli/view.d.ts.map +1 -0
  94. package/lib/cli/view.js +168 -0
  95. package/lib/cli/view.js.map +1 -0
  96. package/lib/container/driver.d.ts +27 -0
  97. package/lib/container/driver.d.ts.map +1 -0
  98. package/lib/container/driver.js +197 -0
  99. package/lib/container/driver.js.map +1 -0
  100. package/lib/container/protocol.d.ts +12 -0
  101. package/lib/container/protocol.d.ts.map +1 -0
  102. package/lib/container/protocol.js +38 -0
  103. package/lib/container/protocol.js.map +1 -0
  104. package/lib/container/resources.d.ts +12 -0
  105. package/lib/container/resources.d.ts.map +1 -0
  106. package/lib/container/resources.js +133 -0
  107. package/lib/container/resources.js.map +1 -0
  108. package/lib/container/worker.d.ts +2 -0
  109. package/lib/container/worker.d.ts.map +1 -0
  110. package/lib/container/worker.js +85 -0
  111. package/lib/container/worker.js.map +1 -0
  112. package/lib/core/action-events.d.ts +29 -0
  113. package/lib/core/action-events.d.ts.map +1 -0
  114. package/lib/core/action-events.js +51 -0
  115. package/lib/core/action-events.js.map +1 -0
  116. package/lib/core/agent-activity.d.ts +49 -0
  117. package/lib/core/agent-activity.d.ts.map +1 -0
  118. package/lib/core/agent-activity.js +206 -0
  119. package/lib/core/agent-activity.js.map +1 -0
  120. package/lib/core/agent-environment.d.ts +5 -0
  121. package/lib/core/agent-environment.d.ts.map +1 -0
  122. package/lib/core/agent-environment.js +47 -0
  123. package/lib/core/agent-environment.js.map +1 -0
  124. package/lib/core/agent-events.d.ts +26 -0
  125. package/lib/core/agent-events.d.ts.map +1 -0
  126. package/lib/core/agent-events.js +13 -0
  127. package/lib/core/agent-events.js.map +1 -0
  128. package/lib/core/annotation.d.ts +6 -2
  129. package/lib/core/annotation.d.ts.map +1 -1
  130. package/lib/core/annotation.js +2 -1
  131. package/lib/core/annotation.js.map +1 -1
  132. package/lib/core/answerer.d.ts +12 -0
  133. package/lib/core/answerer.d.ts.map +1 -1
  134. package/lib/core/answerer.js +2 -0
  135. package/lib/core/answerer.js.map +1 -1
  136. package/lib/core/artifact-evidence.d.ts +8 -0
  137. package/lib/core/artifact-evidence.d.ts.map +1 -1
  138. package/lib/core/artifact-evidence.js +36 -4
  139. package/lib/core/artifact-evidence.js.map +1 -1
  140. package/lib/core/assertion.d.ts +20 -2
  141. package/lib/core/assertion.d.ts.map +1 -1
  142. package/lib/core/assertion.js +19 -1
  143. package/lib/core/assertion.js.map +1 -1
  144. package/lib/core/case.d.ts +111 -3
  145. package/lib/core/case.d.ts.map +1 -1
  146. package/lib/core/case.js +17 -2
  147. package/lib/core/case.js.map +1 -1
  148. package/lib/core/command-verification.d.ts +10 -0
  149. package/lib/core/command-verification.d.ts.map +1 -0
  150. package/lib/core/command-verification.js +66 -0
  151. package/lib/core/command-verification.js.map +1 -0
  152. package/lib/core/driver-execution.d.ts +83 -0
  153. package/lib/core/driver-execution.d.ts.map +1 -0
  154. package/lib/core/driver-execution.js +72 -0
  155. package/lib/core/driver-execution.js.map +1 -0
  156. package/lib/core/driver-metrics.d.ts +98 -0
  157. package/lib/core/driver-metrics.d.ts.map +1 -0
  158. package/lib/core/driver-metrics.js +36 -0
  159. package/lib/core/driver-metrics.js.map +1 -0
  160. package/lib/core/driver.d.ts +64 -0
  161. package/lib/core/driver.d.ts.map +1 -1
  162. package/lib/core/driver.js +28 -0
  163. package/lib/core/driver.js.map +1 -1
  164. package/lib/core/duration.d.ts +5 -0
  165. package/lib/core/duration.d.ts.map +1 -0
  166. package/lib/core/duration.js +49 -0
  167. package/lib/core/duration.js.map +1 -0
  168. package/lib/core/environment.d.ts +18 -0
  169. package/lib/core/environment.d.ts.map +1 -0
  170. package/lib/core/environment.js +21 -0
  171. package/lib/core/environment.js.map +1 -0
  172. package/lib/core/evaluation-clusters.d.ts +17 -0
  173. package/lib/core/evaluation-clusters.d.ts.map +1 -0
  174. package/lib/core/evaluation-clusters.js +23 -0
  175. package/lib/core/evaluation-clusters.js.map +1 -0
  176. package/lib/core/events.d.ts +36 -0
  177. package/lib/core/events.d.ts.map +1 -1
  178. package/lib/core/events.js +12 -2
  179. package/lib/core/events.js.map +1 -1
  180. package/lib/core/experiment.d.ts +32 -2
  181. package/lib/core/experiment.d.ts.map +1 -1
  182. package/lib/core/experiment.js +35 -18
  183. package/lib/core/experiment.js.map +1 -1
  184. package/lib/core/file-tree.d.ts +7 -0
  185. package/lib/core/file-tree.d.ts.map +1 -0
  186. package/lib/core/file-tree.js +35 -0
  187. package/lib/core/file-tree.js.map +1 -0
  188. package/lib/core/global-id.d.ts +6 -0
  189. package/lib/core/global-id.d.ts.map +1 -0
  190. package/lib/core/global-id.js +17 -0
  191. package/lib/core/global-id.js.map +1 -0
  192. package/lib/core/harness-catalog.d.ts +35 -0
  193. package/lib/core/harness-catalog.d.ts.map +1 -0
  194. package/lib/core/harness-catalog.js +45 -0
  195. package/lib/core/harness-catalog.js.map +1 -0
  196. package/lib/core/harness-catalogs/antigravity.d.ts +11 -0
  197. package/lib/core/harness-catalogs/antigravity.d.ts.map +1 -0
  198. package/lib/core/harness-catalogs/antigravity.js +23 -0
  199. package/lib/core/harness-catalogs/antigravity.js.map +1 -0
  200. package/lib/core/harness-catalogs/claude-code.d.ts +12 -0
  201. package/lib/core/harness-catalogs/claude-code.d.ts.map +1 -0
  202. package/lib/core/harness-catalogs/claude-code.js +24 -0
  203. package/lib/core/harness-catalogs/claude-code.js.map +1 -0
  204. package/lib/core/harness-catalogs/codex.d.ts +11 -0
  205. package/lib/core/harness-catalogs/codex.d.ts.map +1 -0
  206. package/lib/core/harness-catalogs/codex.js +26 -0
  207. package/lib/core/harness-catalogs/codex.js.map +1 -0
  208. package/lib/core/harness-catalogs/copilot.d.ts +29 -0
  209. package/lib/core/harness-catalogs/copilot.d.ts.map +1 -0
  210. package/lib/core/harness-catalogs/copilot.js +45 -0
  211. package/lib/core/harness-catalogs/copilot.js.map +1 -0
  212. package/lib/core/harness-catalogs/cursor.d.ts +2 -0
  213. package/lib/core/harness-catalogs/cursor.d.ts.map +1 -0
  214. package/lib/core/harness-catalogs/cursor.js +13 -0
  215. package/lib/core/harness-catalogs/cursor.js.map +1 -0
  216. package/lib/core/harness-catalogs/grok-build.d.ts +7 -0
  217. package/lib/core/harness-catalogs/grok-build.d.ts.map +1 -0
  218. package/lib/core/harness-catalogs/grok-build.js +18 -0
  219. package/lib/core/harness-catalogs/grok-build.js.map +1 -0
  220. package/lib/core/harness-catalogs/index.d.ts +73 -0
  221. package/lib/core/harness-catalogs/index.d.ts.map +1 -0
  222. package/lib/core/harness-catalogs/index.js +17 -0
  223. package/lib/core/harness-catalogs/index.js.map +1 -0
  224. package/lib/core/harness-matrix.d.ts +154 -0
  225. package/lib/core/harness-matrix.d.ts.map +1 -0
  226. package/lib/core/harness-matrix.js +204 -0
  227. package/lib/core/harness-matrix.js.map +1 -0
  228. package/lib/core/index.d.ts +12 -0
  229. package/lib/core/index.d.ts.map +1 -1
  230. package/lib/core/index.js +12 -0
  231. package/lib/core/index.js.map +1 -1
  232. package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
  233. package/lib/core/lifecycle-fixtures.js +4 -2
  234. package/lib/core/lifecycle-fixtures.js.map +1 -1
  235. package/lib/core/model-cli.d.ts +9 -11
  236. package/lib/core/model-cli.d.ts.map +1 -1
  237. package/lib/core/model-cli.js +31 -19
  238. package/lib/core/model-cli.js.map +1 -1
  239. package/lib/core/platform-process.d.ts +6 -1
  240. package/lib/core/platform-process.d.ts.map +1 -1
  241. package/lib/core/platform-process.js +49 -11
  242. package/lib/core/platform-process.js.map +1 -1
  243. package/lib/core/rubric.d.ts +1 -0
  244. package/lib/core/rubric.d.ts.map +1 -1
  245. package/lib/core/run.d.ts +293 -1
  246. package/lib/core/run.d.ts.map +1 -1
  247. package/lib/core/run.js +27 -0
  248. package/lib/core/run.js.map +1 -1
  249. package/lib/core/secure-copy.d.ts.map +1 -0
  250. package/lib/core/secure-copy.js.map +1 -0
  251. package/lib/core/usage.d.ts +5 -0
  252. package/lib/core/usage.d.ts.map +1 -1
  253. package/lib/core/usage.js +3 -0
  254. package/lib/core/usage.js.map +1 -1
  255. package/lib/core/wire.d.ts +12 -0
  256. package/lib/core/wire.d.ts.map +1 -1
  257. package/lib/core/wire.js +5 -1
  258. package/lib/core/wire.js.map +1 -1
  259. package/lib/drivers/antigravity/artifacts.d.ts +2 -0
  260. package/lib/drivers/antigravity/artifacts.d.ts.map +1 -0
  261. package/lib/drivers/antigravity/artifacts.js +33 -0
  262. package/lib/drivers/antigravity/artifacts.js.map +1 -0
  263. package/lib/drivers/antigravity/config.d.ts +88 -0
  264. package/lib/drivers/antigravity/config.d.ts.map +1 -0
  265. package/lib/drivers/antigravity/config.js +87 -0
  266. package/lib/drivers/antigravity/config.js.map +1 -0
  267. package/lib/drivers/antigravity/events.d.ts +4 -0
  268. package/lib/drivers/antigravity/events.d.ts.map +1 -0
  269. package/lib/drivers/antigravity/events.js +241 -0
  270. package/lib/drivers/antigravity/events.js.map +1 -0
  271. package/lib/drivers/antigravity/index.d.ts +114 -0
  272. package/lib/drivers/antigravity/index.d.ts.map +1 -0
  273. package/lib/drivers/antigravity/index.js +113 -0
  274. package/lib/drivers/antigravity/index.js.map +1 -0
  275. package/lib/drivers/antigravity/runtime.d.ts +7 -0
  276. package/lib/drivers/antigravity/runtime.d.ts.map +1 -0
  277. package/lib/drivers/antigravity/runtime.js +83 -0
  278. package/lib/drivers/antigravity/runtime.js.map +1 -0
  279. package/lib/drivers/claude-code/deferred-process.d.ts +17 -0
  280. package/lib/drivers/claude-code/deferred-process.d.ts.map +1 -0
  281. package/lib/drivers/claude-code/deferred-process.js +108 -0
  282. package/lib/drivers/claude-code/deferred-process.js.map +1 -0
  283. package/lib/drivers/claude-code/index.d.ts +180 -10
  284. package/lib/drivers/claude-code/index.d.ts.map +1 -1
  285. package/lib/drivers/claude-code/index.js +186 -252
  286. package/lib/drivers/claude-code/index.js.map +1 -1
  287. package/lib/drivers/claude-code/isolation.d.ts +8 -0
  288. package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
  289. package/lib/drivers/claude-code/isolation.js +199 -0
  290. package/lib/drivers/claude-code/isolation.js.map +1 -0
  291. package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
  292. package/lib/drivers/claude-code/parse-events.js +73 -8
  293. package/lib/drivers/claude-code/parse-events.js.map +1 -1
  294. package/lib/drivers/codex/app-events.d.ts +9 -2
  295. package/lib/drivers/codex/app-events.d.ts.map +1 -1
  296. package/lib/drivers/codex/app-events.js +104 -12
  297. package/lib/drivers/codex/app-events.js.map +1 -1
  298. package/lib/drivers/codex/config.d.ts +66 -5
  299. package/lib/drivers/codex/config.d.ts.map +1 -1
  300. package/lib/drivers/codex/config.js +39 -8
  301. package/lib/drivers/codex/config.js.map +1 -1
  302. package/lib/drivers/codex/exec-events.d.ts +4 -0
  303. package/lib/drivers/codex/exec-events.d.ts.map +1 -0
  304. package/lib/drivers/codex/exec-events.js +230 -0
  305. package/lib/drivers/codex/exec-events.js.map +1 -0
  306. package/lib/drivers/codex/index.d.ts +138 -4
  307. package/lib/drivers/codex/index.d.ts.map +1 -1
  308. package/lib/drivers/codex/index.js +112 -276
  309. package/lib/drivers/codex/index.js.map +1 -1
  310. package/lib/drivers/copilot/config.d.ts +84 -0
  311. package/lib/drivers/copilot/config.d.ts.map +1 -0
  312. package/lib/drivers/copilot/config.js +57 -0
  313. package/lib/drivers/copilot/config.js.map +1 -0
  314. package/lib/drivers/copilot/index.d.ts +107 -0
  315. package/lib/drivers/copilot/index.d.ts.map +1 -0
  316. package/lib/drivers/copilot/index.js +268 -0
  317. package/lib/drivers/copilot/index.js.map +1 -0
  318. package/lib/drivers/cursor/config.d.ts +28 -0
  319. package/lib/drivers/cursor/config.d.ts.map +1 -0
  320. package/lib/drivers/cursor/config.js +28 -0
  321. package/lib/drivers/cursor/config.js.map +1 -0
  322. package/lib/drivers/cursor/index.d.ts +44 -0
  323. package/lib/drivers/cursor/index.d.ts.map +1 -0
  324. package/lib/drivers/cursor/index.js +286 -0
  325. package/lib/drivers/cursor/index.js.map +1 -0
  326. package/lib/drivers/cursor/interaction.d.ts +6 -0
  327. package/lib/drivers/cursor/interaction.d.ts.map +1 -0
  328. package/lib/drivers/cursor/interaction.js +55 -0
  329. package/lib/drivers/cursor/interaction.js.map +1 -0
  330. package/lib/drivers/grok-build/config.d.ts +68 -0
  331. package/lib/drivers/grok-build/config.d.ts.map +1 -0
  332. package/lib/drivers/grok-build/config.js +40 -0
  333. package/lib/drivers/grok-build/config.js.map +1 -0
  334. package/lib/drivers/grok-build/index.d.ts +87 -0
  335. package/lib/drivers/grok-build/index.d.ts.map +1 -0
  336. package/lib/drivers/grok-build/index.js +293 -0
  337. package/lib/drivers/grok-build/index.js.map +1 -0
  338. package/lib/drivers/mcp/index.d.ts +37 -4
  339. package/lib/drivers/mcp/index.d.ts.map +1 -1
  340. package/lib/drivers/mcp/index.js +25 -11
  341. package/lib/drivers/mcp/index.js.map +1 -1
  342. package/lib/drivers/shared/acp-events.d.ts +15 -0
  343. package/lib/drivers/shared/acp-events.d.ts.map +1 -0
  344. package/lib/drivers/shared/acp-events.js +83 -0
  345. package/lib/drivers/shared/acp-events.js.map +1 -0
  346. package/lib/drivers/shared/acp-interaction.d.ts +7 -0
  347. package/lib/drivers/shared/acp-interaction.d.ts.map +1 -0
  348. package/lib/drivers/shared/acp-interaction.js +20 -0
  349. package/lib/drivers/shared/acp-interaction.js.map +1 -0
  350. package/lib/drivers/shared/acp-session.d.ts +4 -0
  351. package/lib/drivers/shared/acp-session.d.ts.map +1 -0
  352. package/lib/drivers/shared/acp-session.js +23 -0
  353. package/lib/drivers/shared/acp-session.js.map +1 -0
  354. package/lib/drivers/shared/acp-transport.d.ts +40 -0
  355. package/lib/drivers/shared/acp-transport.d.ts.map +1 -0
  356. package/lib/drivers/shared/acp-transport.js +152 -0
  357. package/lib/drivers/shared/acp-transport.js.map +1 -0
  358. package/lib/drivers/shared/artifacts.d.ts.map +1 -1
  359. package/lib/drivers/shared/artifacts.js +3 -2
  360. package/lib/drivers/shared/artifacts.js.map +1 -1
  361. package/lib/drivers/shared/experiment-behavior.d.ts +13 -0
  362. package/lib/drivers/shared/experiment-behavior.d.ts.map +1 -0
  363. package/lib/drivers/shared/experiment-behavior.js +197 -0
  364. package/lib/drivers/shared/experiment-behavior.js.map +1 -0
  365. package/lib/drivers/shared/experiment-policy.d.ts +4 -0
  366. package/lib/drivers/shared/experiment-policy.d.ts.map +1 -0
  367. package/lib/drivers/shared/experiment-policy.js +143 -0
  368. package/lib/drivers/shared/experiment-policy.js.map +1 -0
  369. package/lib/drivers/subprocess/index.d.ts +39 -4
  370. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  371. package/lib/drivers/subprocess/index.js +56 -12
  372. package/lib/drivers/subprocess/index.js.map +1 -1
  373. package/lib/index.d.ts +22 -8
  374. package/lib/index.d.ts.map +1 -1
  375. package/lib/index.js +20 -6
  376. package/lib/index.js.map +1 -1
  377. package/lib/optimization/reflective.d.ts +3 -1
  378. package/lib/optimization/reflective.d.ts.map +1 -1
  379. package/lib/optimization/reflective.js +3 -2
  380. package/lib/optimization/reflective.js.map +1 -1
  381. package/lib/orchestrator/annotation-loader.d.ts +6 -2
  382. package/lib/orchestrator/annotation-loader.d.ts.map +1 -1
  383. package/lib/orchestrator/annotation-loader.js +8 -0
  384. package/lib/orchestrator/annotation-loader.js.map +1 -1
  385. package/lib/orchestrator/annotation-store.d.ts.map +1 -1
  386. package/lib/orchestrator/annotation-store.js +16 -2
  387. package/lib/orchestrator/annotation-store.js.map +1 -1
  388. package/lib/orchestrator/artifact-origin.d.ts +3 -0
  389. package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
  390. package/lib/orchestrator/artifact-origin.js +40 -0
  391. package/lib/orchestrator/artifact-origin.js.map +1 -0
  392. package/lib/orchestrator/campaign-lifecycle.d.ts +1 -0
  393. package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -1
  394. package/lib/orchestrator/campaign-lifecycle.js +4 -1
  395. package/lib/orchestrator/campaign-lifecycle.js.map +1 -1
  396. package/lib/orchestrator/candidates.d.ts.map +1 -1
  397. package/lib/orchestrator/candidates.js +3 -2
  398. package/lib/orchestrator/candidates.js.map +1 -1
  399. package/lib/orchestrator/compare.d.ts +19 -3
  400. package/lib/orchestrator/compare.d.ts.map +1 -1
  401. package/lib/orchestrator/compare.js +32 -6
  402. package/lib/orchestrator/compare.js.map +1 -1
  403. package/lib/orchestrator/comparison-identity.d.ts.map +1 -1
  404. package/lib/orchestrator/comparison-identity.js +2 -0
  405. package/lib/orchestrator/comparison-identity.js.map +1 -1
  406. package/lib/orchestrator/config.d.ts +179 -1
  407. package/lib/orchestrator/config.d.ts.map +1 -1
  408. package/lib/orchestrator/config.js +18 -4
  409. package/lib/orchestrator/config.js.map +1 -1
  410. package/lib/orchestrator/discover.d.ts +1 -0
  411. package/lib/orchestrator/discover.d.ts.map +1 -1
  412. package/lib/orchestrator/discover.js +7 -1
  413. package/lib/orchestrator/discover.js.map +1 -1
  414. package/lib/orchestrator/doctor.d.ts +1 -0
  415. package/lib/orchestrator/doctor.d.ts.map +1 -1
  416. package/lib/orchestrator/doctor.js +121 -33
  417. package/lib/orchestrator/doctor.js.map +1 -1
  418. package/lib/orchestrator/driver-capabilities.d.ts +4 -0
  419. package/lib/orchestrator/driver-capabilities.d.ts.map +1 -0
  420. package/lib/orchestrator/driver-capabilities.js +13 -0
  421. package/lib/orchestrator/driver-capabilities.js.map +1 -0
  422. package/lib/orchestrator/driver-identity.d.ts +5 -0
  423. package/lib/orchestrator/driver-identity.d.ts.map +1 -0
  424. package/lib/orchestrator/driver-identity.js +51 -0
  425. package/lib/orchestrator/driver-identity.js.map +1 -0
  426. package/lib/orchestrator/experiment-context.d.ts +51 -3
  427. package/lib/orchestrator/experiment-context.d.ts.map +1 -1
  428. package/lib/orchestrator/experiment-context.js.map +1 -1
  429. package/lib/orchestrator/experiment-contracts.d.ts +30 -1
  430. package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
  431. package/lib/orchestrator/experiment-corpus.d.ts +2 -1
  432. package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
  433. package/lib/orchestrator/experiment-corpus.js +28 -22
  434. package/lib/orchestrator/experiment-corpus.js.map +1 -1
  435. package/lib/orchestrator/experiment-effects.d.ts +33 -0
  436. package/lib/orchestrator/experiment-effects.d.ts.map +1 -0
  437. package/lib/orchestrator/experiment-effects.js +44 -0
  438. package/lib/orchestrator/experiment-effects.js.map +1 -0
  439. package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
  440. package/lib/orchestrator/experiment-evaluation.js +56 -5
  441. package/lib/orchestrator/experiment-evaluation.js.map +1 -1
  442. package/lib/orchestrator/experiment-identity.d.ts +3 -0
  443. package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
  444. package/lib/orchestrator/experiment-identity.js +22 -33
  445. package/lib/orchestrator/experiment-identity.js.map +1 -1
  446. package/lib/orchestrator/experiment-loader.d.ts +8 -3
  447. package/lib/orchestrator/experiment-loader.d.ts.map +1 -1
  448. package/lib/orchestrator/experiment-preflight.d.ts +3 -0
  449. package/lib/orchestrator/experiment-preflight.d.ts.map +1 -0
  450. package/lib/orchestrator/experiment-preflight.js +21 -0
  451. package/lib/orchestrator/experiment-preflight.js.map +1 -0
  452. package/lib/orchestrator/experiment-report.d.ts +90 -1
  453. package/lib/orchestrator/experiment-report.d.ts.map +1 -1
  454. package/lib/orchestrator/experiment-report.js +9 -1
  455. package/lib/orchestrator/experiment-report.js.map +1 -1
  456. package/lib/orchestrator/experiment-runs.d.ts +61 -2
  457. package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
  458. package/lib/orchestrator/experiment-runs.js +13 -5
  459. package/lib/orchestrator/experiment-runs.js.map +1 -1
  460. package/lib/orchestrator/experiment-runtime-identity.d.ts +0 -16
  461. package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -1
  462. package/lib/orchestrator/experiment-runtime-identity.js +5 -220
  463. package/lib/orchestrator/experiment-runtime-identity.js.map +1 -1
  464. package/lib/orchestrator/experiment-selection.d.ts.map +1 -1
  465. package/lib/orchestrator/experiment-selection.js +52 -0
  466. package/lib/orchestrator/experiment-selection.js.map +1 -1
  467. package/lib/orchestrator/experiment.d.ts +3 -3
  468. package/lib/orchestrator/experiment.d.ts.map +1 -1
  469. package/lib/orchestrator/experiment.js +26 -21
  470. package/lib/orchestrator/experiment.js.map +1 -1
  471. package/lib/orchestrator/fixture-identity.d.ts +1 -0
  472. package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
  473. package/lib/orchestrator/fixture-identity.js +6 -1
  474. package/lib/orchestrator/fixture-identity.js.map +1 -1
  475. package/lib/orchestrator/fs-read.d.ts +1 -6
  476. package/lib/orchestrator/fs-read.d.ts.map +1 -1
  477. package/lib/orchestrator/fs-read.js +2 -32
  478. package/lib/orchestrator/fs-read.js.map +1 -1
  479. package/lib/orchestrator/grader-experiment.d.ts +33 -3
  480. package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
  481. package/lib/orchestrator/grader-experiment.js +54 -9
  482. package/lib/orchestrator/grader-experiment.js.map +1 -1
  483. package/lib/orchestrator/grading.d.ts +2 -1
  484. package/lib/orchestrator/grading.d.ts.map +1 -1
  485. package/lib/orchestrator/grading.js +46 -31
  486. package/lib/orchestrator/grading.js.map +1 -1
  487. package/lib/orchestrator/harness-catalog-drift.d.ts +22 -0
  488. package/lib/orchestrator/harness-catalog-drift.d.ts.map +1 -0
  489. package/lib/orchestrator/harness-catalog-drift.js +90 -0
  490. package/lib/orchestrator/harness-catalog-drift.js.map +1 -0
  491. package/lib/orchestrator/harness-registry.d.ts +4 -0
  492. package/lib/orchestrator/harness-registry.d.ts.map +1 -0
  493. package/lib/orchestrator/harness-registry.js +5 -0
  494. package/lib/orchestrator/harness-registry.js.map +1 -0
  495. package/lib/orchestrator/index.d.ts +1 -1
  496. package/lib/orchestrator/index.d.ts.map +1 -1
  497. package/lib/orchestrator/index.js +1 -1
  498. package/lib/orchestrator/index.js.map +1 -1
  499. package/lib/orchestrator/list-runs.d.ts +8 -1
  500. package/lib/orchestrator/list-runs.d.ts.map +1 -1
  501. package/lib/orchestrator/list-runs.js +81 -14
  502. package/lib/orchestrator/list-runs.js.map +1 -1
  503. package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -1
  504. package/lib/orchestrator/optimization-lifecycle.js +3 -1
  505. package/lib/orchestrator/optimization-lifecycle.js.map +1 -1
  506. package/lib/orchestrator/orchestrator.d.ts +18 -2
  507. package/lib/orchestrator/orchestrator.d.ts.map +1 -1
  508. package/lib/orchestrator/orchestrator.js +50 -168
  509. package/lib/orchestrator/orchestrator.js.map +1 -1
  510. package/lib/orchestrator/paired-effects.d.ts +34 -0
  511. package/lib/orchestrator/paired-effects.d.ts.map +1 -0
  512. package/lib/orchestrator/paired-effects.js +158 -0
  513. package/lib/orchestrator/paired-effects.js.map +1 -0
  514. package/lib/orchestrator/provenance.d.ts +5 -1
  515. package/lib/orchestrator/provenance.d.ts.map +1 -1
  516. package/lib/orchestrator/provenance.js +16 -3
  517. package/lib/orchestrator/provenance.js.map +1 -1
  518. package/lib/orchestrator/regrade.d.ts +9 -1
  519. package/lib/orchestrator/regrade.d.ts.map +1 -1
  520. package/lib/orchestrator/rubric-loader.js +1 -1
  521. package/lib/orchestrator/rubric-loader.js.map +1 -1
  522. package/lib/orchestrator/run-dir.d.ts +2 -0
  523. package/lib/orchestrator/run-dir.d.ts.map +1 -1
  524. package/lib/orchestrator/run-dir.js +1 -1
  525. package/lib/orchestrator/run-dir.js.map +1 -1
  526. package/lib/orchestrator/run-execution.d.ts +3 -0
  527. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  528. package/lib/orchestrator/run-execution.js +66 -12
  529. package/lib/orchestrator/run-execution.js.map +1 -1
  530. package/lib/orchestrator/run-lifecycle.d.ts +1 -0
  531. package/lib/orchestrator/run-lifecycle.d.ts.map +1 -1
  532. package/lib/orchestrator/run-lifecycle.js +3 -2
  533. package/lib/orchestrator/run-lifecycle.js.map +1 -1
  534. package/lib/orchestrator/run-workspace.d.ts +10 -0
  535. package/lib/orchestrator/run-workspace.d.ts.map +1 -0
  536. package/lib/orchestrator/run-workspace.js +58 -0
  537. package/lib/orchestrator/run-workspace.js.map +1 -0
  538. package/lib/orchestrator/suite-compare.d.ts +37 -0
  539. package/lib/orchestrator/suite-compare.d.ts.map +1 -1
  540. package/lib/orchestrator/suite-compare.js +27 -17
  541. package/lib/orchestrator/suite-compare.js.map +1 -1
  542. package/lib/orchestrator/suite-runs.d.ts +6 -1
  543. package/lib/orchestrator/suite-runs.d.ts.map +1 -1
  544. package/lib/orchestrator/suite-runs.js +14 -2
  545. package/lib/orchestrator/suite-runs.js.map +1 -1
  546. package/lib/orchestrator/suite-summary.d.ts +77 -0
  547. package/lib/orchestrator/suite-summary.d.ts.map +1 -1
  548. package/lib/orchestrator/suite-summary.js +61 -12
  549. package/lib/orchestrator/suite-summary.js.map +1 -1
  550. package/lib/previewer/artifacts.d.ts +25 -0
  551. package/lib/previewer/artifacts.d.ts.map +1 -0
  552. package/lib/previewer/artifacts.js +180 -0
  553. package/lib/previewer/artifacts.js.map +1 -0
  554. package/lib/previewer/server.d.ts +111 -0
  555. package/lib/previewer/server.d.ts.map +1 -0
  556. package/lib/previewer/server.js +558 -0
  557. package/lib/previewer/server.js.map +1 -0
  558. package/package.json +3 -3
  559. package/skills/lux-answerer/SKILL.md +2 -2
  560. package/src/answerers/claude-code/index.ts +6 -5
  561. package/src/answerers/persona/index.ts +75 -34
  562. package/src/answerers/terminal/index.ts +8 -12
  563. package/src/assertions/authoring.ts +2 -0
  564. package/src/assertions/core/command-exits-zero.ts +61 -7
  565. package/src/assertions/core/event-checks.ts +64 -3
  566. package/src/assertions/core/helpers.ts +3 -6
  567. package/src/assertions/core/index.ts +2 -0
  568. package/src/assertions/core/resource-checks.ts +38 -5
  569. package/src/assertions/rubric/index.ts +68 -13
  570. package/src/assertions/rubric/internal.ts +227 -27
  571. package/src/authoring.ts +345 -2
  572. package/src/cli/bin.ts +2 -12
  573. package/src/cli/command-runtime.ts +20 -9
  574. package/src/cli/doctor.ts +17 -0
  575. package/src/cli/harness-plan.ts +117 -0
  576. package/src/cli/init-templates.ts +238 -0
  577. package/src/cli/init.ts +53 -184
  578. package/src/cli/output-schemas.ts +106 -0
  579. package/src/cli/program.ts +691 -721
  580. package/src/cli/render/reporter.ts +50 -8
  581. package/src/cli/run-options.ts +132 -25
  582. package/src/cli/view.ts +129 -0
  583. package/src/container/driver.ts +211 -0
  584. package/src/container/protocol.ts +48 -0
  585. package/src/container/resources.ts +153 -0
  586. package/src/container/worker.ts +107 -0
  587. package/src/core/action-events.ts +59 -0
  588. package/src/core/agent-activity.ts +236 -0
  589. package/src/core/agent-environment.ts +64 -0
  590. package/src/core/agent-events.ts +17 -0
  591. package/src/core/annotation.ts +2 -1
  592. package/src/core/answerer.ts +9 -0
  593. package/src/core/artifact-evidence.ts +47 -4
  594. package/src/core/assertion.ts +21 -1
  595. package/src/core/case.ts +21 -3
  596. package/src/core/command-verification.ts +74 -0
  597. package/src/core/driver-execution.ts +84 -0
  598. package/src/core/driver-metrics.ts +51 -0
  599. package/src/core/driver.ts +76 -0
  600. package/src/core/duration.ts +52 -0
  601. package/src/core/environment.ts +22 -0
  602. package/src/core/evaluation-clusters.ts +35 -0
  603. package/src/core/events.ts +14 -2
  604. package/src/core/experiment.ts +64 -24
  605. package/src/core/file-tree.ts +35 -0
  606. package/src/core/global-id.ts +26 -0
  607. package/src/core/harness-catalog.ts +100 -0
  608. package/src/core/harness-catalogs/antigravity.ts +24 -0
  609. package/src/core/harness-catalogs/claude-code.ts +25 -0
  610. package/src/core/harness-catalogs/codex.ts +27 -0
  611. package/src/core/harness-catalogs/copilot.ts +46 -0
  612. package/src/core/harness-catalogs/cursor.ts +13 -0
  613. package/src/core/harness-catalogs/grok-build.ts +19 -0
  614. package/src/core/harness-catalogs/index.ts +31 -0
  615. package/src/core/harness-matrix.ts +316 -0
  616. package/src/core/index.ts +12 -0
  617. package/src/core/lifecycle-fixtures.ts +4 -2
  618. package/src/core/model-cli.ts +52 -23
  619. package/src/core/platform-process.ts +58 -10
  620. package/src/core/run.ts +31 -0
  621. package/src/core/usage.ts +8 -0
  622. package/src/core/wire.ts +5 -1
  623. package/src/drivers/antigravity/README.md +171 -0
  624. package/src/drivers/antigravity/artifacts.ts +37 -0
  625. package/src/drivers/antigravity/config.ts +92 -0
  626. package/src/drivers/antigravity/events.ts +290 -0
  627. package/src/drivers/antigravity/index.ts +132 -0
  628. package/src/drivers/antigravity/runtime.ts +94 -0
  629. package/src/drivers/claude-code/deferred-process.ts +118 -0
  630. package/src/drivers/claude-code/index.ts +216 -281
  631. package/src/drivers/claude-code/isolation.ts +228 -0
  632. package/src/drivers/claude-code/parse-events.ts +98 -12
  633. package/src/drivers/codex/app-events.ts +126 -16
  634. package/src/drivers/codex/config.ts +50 -8
  635. package/src/drivers/codex/exec-events.ts +258 -0
  636. package/src/drivers/codex/index.ts +144 -312
  637. package/src/drivers/copilot/README.md +60 -0
  638. package/src/drivers/copilot/config.ts +61 -0
  639. package/src/drivers/copilot/index.ts +310 -0
  640. package/src/drivers/cursor/README.md +66 -0
  641. package/src/drivers/cursor/config.ts +31 -0
  642. package/src/drivers/cursor/index.ts +326 -0
  643. package/src/drivers/cursor/interaction.ts +74 -0
  644. package/src/drivers/grok-build/README.md +112 -0
  645. package/src/drivers/grok-build/config.ts +43 -0
  646. package/src/drivers/grok-build/index.ts +331 -0
  647. package/src/drivers/mcp/index.ts +25 -11
  648. package/src/drivers/shared/acp-events.ts +94 -0
  649. package/src/drivers/shared/acp-interaction.ts +27 -0
  650. package/src/drivers/shared/acp-session.ts +40 -0
  651. package/src/drivers/shared/acp-transport.ts +187 -0
  652. package/src/drivers/shared/artifacts.ts +6 -2
  653. package/src/drivers/shared/experiment-behavior.ts +214 -0
  654. package/src/drivers/shared/experiment-policy.ts +195 -0
  655. package/src/drivers/subprocess/index.ts +55 -12
  656. package/src/index.ts +115 -10
  657. package/src/optimization/reflective.ts +3 -2
  658. package/src/orchestrator/annotation-loader.ts +10 -0
  659. package/src/orchestrator/annotation-store.ts +24 -3
  660. package/src/orchestrator/artifact-origin.ts +50 -0
  661. package/src/orchestrator/campaign-lifecycle.ts +5 -1
  662. package/src/orchestrator/candidates.ts +3 -2
  663. package/src/orchestrator/compare.ts +41 -6
  664. package/src/orchestrator/comparison-identity.ts +2 -0
  665. package/src/orchestrator/config.ts +20 -3
  666. package/src/orchestrator/discover.ts +8 -1
  667. package/src/orchestrator/doctor.ts +189 -28
  668. package/src/orchestrator/driver-capabilities.ts +21 -0
  669. package/src/orchestrator/driver-identity.ts +69 -0
  670. package/src/orchestrator/experiment-context.ts +3 -2
  671. package/src/orchestrator/experiment-corpus.ts +53 -37
  672. package/src/orchestrator/experiment-effects.ts +61 -0
  673. package/src/orchestrator/experiment-evaluation.ts +71 -10
  674. package/src/orchestrator/experiment-identity.ts +42 -48
  675. package/src/orchestrator/experiment-preflight.ts +27 -0
  676. package/src/orchestrator/experiment-report.ts +21 -1
  677. package/src/orchestrator/experiment-runs.ts +11 -4
  678. package/src/orchestrator/experiment-runtime-identity.ts +5 -243
  679. package/src/orchestrator/experiment-selection.ts +77 -0
  680. package/src/orchestrator/experiment.ts +29 -29
  681. package/src/orchestrator/fixture-identity.ts +9 -1
  682. package/src/orchestrator/fs-read.ts +2 -32
  683. package/src/orchestrator/grader-experiment.ts +74 -13
  684. package/src/orchestrator/grading.ts +67 -28
  685. package/src/orchestrator/harness-catalog-drift.ts +132 -0
  686. package/src/orchestrator/harness-registry.ts +12 -0
  687. package/src/orchestrator/index.ts +1 -0
  688. package/src/orchestrator/list-runs.ts +98 -13
  689. package/src/orchestrator/optimization-lifecycle.ts +4 -1
  690. package/src/orchestrator/orchestrator.ts +92 -216
  691. package/src/orchestrator/paired-effects.ts +209 -0
  692. package/src/orchestrator/provenance.ts +23 -3
  693. package/src/orchestrator/rubric-loader.ts +1 -1
  694. package/src/orchestrator/run-dir.ts +8 -1
  695. package/src/orchestrator/run-execution.ts +77 -11
  696. package/src/orchestrator/run-lifecycle.ts +4 -2
  697. package/src/orchestrator/run-workspace.ts +62 -0
  698. package/src/orchestrator/suite-compare.ts +29 -19
  699. package/src/orchestrator/suite-runs.ts +13 -2
  700. package/src/orchestrator/suite-summary.ts +122 -13
  701. package/src/previewer/artifacts.ts +221 -0
  702. package/src/previewer/server.ts +787 -0
  703. package/viewer/app.css +2079 -0
  704. package/viewer/app.js +627 -0
  705. package/viewer/artifact-view.js +48 -0
  706. package/viewer/charts.js +86 -0
  707. package/viewer/detail.js +1237 -0
  708. package/viewer/format.js +129 -0
  709. package/viewer/index.html +151 -0
  710. package/lib/answerers/scripted/index.d.ts +0 -8
  711. package/lib/answerers/scripted/index.d.ts.map +0 -1
  712. package/lib/answerers/scripted/index.js +0 -163
  713. package/lib/answerers/scripted/index.js.map +0 -1
  714. package/lib/cli/skills.d.ts +0 -38
  715. package/lib/cli/skills.d.ts.map +0 -1
  716. package/lib/cli/skills.js +0 -84
  717. package/lib/cli/skills.js.map +0 -1
  718. package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
  719. package/lib/drivers/shared/secure-copy.js.map +0 -1
  720. package/skills/lux/SKILL.md +0 -85
  721. package/skills/lux/references/cli.md +0 -102
  722. package/skills/lux/references/eval-authoring.md +0 -105
  723. package/src/answerers/scripted/index.ts +0 -186
  724. package/src/cli/skills.ts +0 -129
  725. /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
  726. /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
  727. /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
@@ -1,10 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { join, relative, resolve, sep } from "node:path";
3
3
  import { z } from "zod";
4
- import {
5
- createRubricAssertion,
6
- RubricModelAccountingDetailSchema,
7
- } from "../assertions/rubric/index.js";
4
+ import { RubricModelAccountingDetailSchema } from "../assertions/rubric/index.js";
8
5
  import {
9
6
  type Candidate,
10
7
  type CandidateEvaluation,
@@ -28,6 +25,7 @@ import {
28
25
  import type { CampaignExecutionOptions } from "./experiment.js";
29
26
  import type { OpenedExperimentRun } from "./experiment-runs.js";
30
27
  import { gradeRun } from "./grading.js";
28
+ import { clusterCaseSamples, groupedCaseMetricSamples } from "./paired-effects.js";
31
29
  import { loadFrozenRegradableRun, releaseFrozenRegradableRun } from "./regrade.js";
32
30
  import { loadRubricDefinition } from "./rubric-loader.js";
33
31
 
@@ -38,10 +36,12 @@ const GraderJudgmentSchema = z.object({
38
36
  actual: z.union([z.boolean(), z.number()]).nullable(),
39
37
  matched: z.boolean(),
40
38
  absoluteError: z.exactOptional(z.number()),
39
+ unavailableReason: z.exactOptional(z.enum(["insufficient-evidence", "operational-error"])),
41
40
  });
42
41
  export type GraderJudgment = z.infer<typeof GraderJudgmentSchema>;
43
42
 
44
43
  const GraderEvidenceItemSchema = z.object({
44
+ clusterId: z.exactOptional(z.string().min(1)),
45
45
  annotationId: z.string(),
46
46
  repetition: z.number().int().positive(),
47
47
  runDir: z.string(),
@@ -95,6 +95,11 @@ const assertionOperationalError = (
95
95
  return detail.success && detail.data.graderError !== undefined;
96
96
  };
97
97
 
98
+ const assertionUnavailableReason = (
99
+ entry: GradingReport["assertions"][number] | undefined,
100
+ ): GraderJudgment["unavailableReason"] =>
101
+ assertionOperationalError(entry) ? "operational-error" : entry?.abstention;
102
+
98
103
  const assertionModelAccounting = (
99
104
  assertion: GradingReport["assertions"][number],
100
105
  ): { attempts: number; costUsd: number; unpricedModelCalls: number } => {
@@ -115,19 +120,22 @@ export const compareGraderAnnotation = (
115
120
  scoreTolerance: number,
116
121
  ): GraderJudgment[] => {
117
122
  const judgments: GraderJudgment[] = [];
118
- const reportFailed = report.assertions.some(assertionOperationalError);
123
+ const reportUnavailableReason = report.assertions.some(assertionOperationalError)
124
+ ? "operational-error"
125
+ : report.assertions.find((entry) => entry.abstention)?.abstention;
119
126
  if (annotation.expected.casePassed !== undefined) {
120
- const actual = reportFailed ? null : report.casePassed;
127
+ const actual = reportUnavailableReason ? null : report.casePassed;
121
128
  judgments.push({
122
129
  key: "case",
123
130
  kind: "case-pass",
124
131
  expected: annotation.expected.casePassed,
125
132
  actual,
126
133
  matched: actual === annotation.expected.casePassed,
134
+ ...(reportUnavailableReason ? { unavailableReason: reportUnavailableReason } : {}),
127
135
  });
128
136
  }
129
137
  if (annotation.expected.caseScore !== undefined) {
130
- const actual = reportFailed ? null : report.caseScore;
138
+ const actual = reportUnavailableReason ? null : report.caseScore;
131
139
  const absoluteError = actual === null ? 1 : Math.abs(actual - annotation.expected.caseScore);
132
140
  judgments.push({
133
141
  key: "case",
@@ -136,6 +144,7 @@ export const compareGraderAnnotation = (
136
144
  actual,
137
145
  matched: actual !== null && absoluteError <= scoreTolerance,
138
146
  absoluteError,
147
+ ...(reportUnavailableReason ? { unavailableReason: reportUnavailableReason } : {}),
139
148
  });
140
149
  }
141
150
  const entries = new Map(
@@ -143,13 +152,15 @@ export const compareGraderAnnotation = (
143
152
  );
144
153
  for (const [assertionId, expected] of Object.entries(annotation.expected.assertions)) {
145
154
  const entry = entries.get(assertionId);
146
- const actual = assertionOperationalError(entry) ? undefined : entry;
155
+ const unavailableReason = assertionUnavailableReason(entry);
156
+ const actual = unavailableReason ? undefined : entry;
147
157
  judgments.push({
148
158
  key: assertionId,
149
159
  kind: "assertion-pass",
150
160
  expected: expected.passed,
151
161
  actual: actual?.passed ?? null,
152
162
  matched: actual?.passed === expected.passed,
163
+ ...(unavailableReason ? { unavailableReason } : {}),
153
164
  });
154
165
  if (expected.score !== undefined) {
155
166
  const absoluteError = actual ? Math.abs(actual.score - expected.score) : 1;
@@ -160,6 +171,7 @@ export const compareGraderAnnotation = (
160
171
  actual: actual?.score ?? null,
161
172
  matched: actual !== undefined && absoluteError <= scoreTolerance,
162
173
  absoluteError,
174
+ ...(unavailableReason ? { unavailableReason } : {}),
163
175
  });
164
176
  }
165
177
  }
@@ -233,7 +245,7 @@ const collectGraderEvidence = (
233
245
 
234
246
  export const summarizeGraderEvidence = (
235
247
  items: readonly z.infer<typeof GraderEvidenceItemSchema>[],
236
- candidate: Candidate,
248
+ candidate: Pick<Candidate, "sourceBytes">,
237
249
  ): { metrics: Record<string, number>; samples: Record<string, number[]> } => {
238
250
  const samples: Record<string, number[]> = {};
239
251
  const { byAnnotation, itemsByAnnotation, counts } = collectGraderEvidence(items);
@@ -323,6 +335,18 @@ export const summarizeGraderEvidence = (
323
335
  "grader.abstentionRate",
324
336
  passes.filter((judgment) => judgment.actual === null).length / passes.length,
325
337
  );
338
+ addSample(
339
+ samples,
340
+ "grader.insufficientEvidenceRate",
341
+ passes.filter((judgment) => judgment.unavailableReason === "insufficient-evidence").length /
342
+ passes.length,
343
+ );
344
+ addSample(
345
+ samples,
346
+ "grader.operationalErrorRate",
347
+ passes.filter((judgment) => judgment.unavailableReason === "operational-error").length /
348
+ passes.length,
349
+ );
326
350
  }
327
351
  }
328
352
  const precision = ratio(
@@ -440,7 +464,42 @@ const evaluationFromEvidence = (
440
464
  evidencePath: string,
441
465
  evidence: GraderEvaluationEvidence,
442
466
  ): CandidateEvaluation & { evidencePath: string } => {
467
+ const caseSamples = clusterCaseSamples(
468
+ evidence.items.map((item) => {
469
+ const summary = summarizeGraderEvidence([item], {
470
+ sourceBytes: evidence.metrics["subject.bytes"] ?? 0,
471
+ });
472
+ return {
473
+ [item.annotationId]: {
474
+ ...(item.clusterId ? { clusterId: item.clusterId } : {}),
475
+ identityHash: experiment.manifest.evaluationHash
476
+ ? valueHash({
477
+ evaluationHash: experiment.manifest.evaluationHash,
478
+ annotationId: item.annotationId,
479
+ profileId: evidence.profileId,
480
+ split: evidence.split,
481
+ })
482
+ : null,
483
+ metrics: Object.fromEntries(
484
+ Object.entries(summary.samples).flatMap(([metric, values]) =>
485
+ values.length === 1 ? [[metric, { mean: values[0] ?? 0, n: 1 }]] : [],
486
+ ),
487
+ ),
488
+ },
489
+ };
490
+ }),
491
+ );
443
492
  const byAnnotation = new Map<string, number[]>();
493
+ const grouped = groupedCaseMetricSamples(caseSamples, evidence.repetitions);
494
+ const metrics = grouped
495
+ ? Object.fromEntries(
496
+ Object.entries(evidence.metrics).flatMap(([name, value]) => {
497
+ if (!Object.hasOwn(evidence.samples, name)) return [[name, value]];
498
+ const values = grouped[name];
499
+ return values ? [[name, mean(values)]] : [];
500
+ }),
501
+ )
502
+ : evidence.metrics;
444
503
  for (const item of evidence.items) {
445
504
  const values = byAnnotation.get(item.annotationId) ?? [];
446
505
  values.push(...item.judgments.map((judgment) => (judgment.matched ? 1 : 0)));
@@ -471,10 +530,11 @@ const evaluationFromEvidence = (
471
530
  profileId: evidence.profileId,
472
531
  split: evidence.split,
473
532
  evidencePath: relative(experiment.path, evidencePath),
474
- passRate: evidence.metrics["quality.passRate"] ?? 0,
533
+ passRate: metrics["quality.passRate"] ?? 0,
475
534
  casePassRates: Object.fromEntries([...byAnnotation].map(([id, values]) => [id, mean(values)])),
476
- metrics: evidence.metrics,
477
- samples: evidence.samples,
535
+ metrics,
536
+ samples: grouped ?? evidence.samples,
537
+ ...(caseSamples ? { caseSamples } : {}),
478
538
  metricCalls: evidence.items.length,
479
539
  judgeCalls: evidence.items.reduce(
480
540
  (total, item) =>
@@ -648,7 +708,7 @@ export const evaluateGraderCandidate = async (options: {
648
708
  const registry = buildRegistryFromConfig({
649
709
  ...execution.config,
650
710
  ...(harness ? { harness } : {}),
651
- }).withAssertion(createRubricAssertion(harness));
711
+ });
652
712
  const items: GraderEvidenceItem[] = [];
653
713
  for (const annotation of selected) {
654
714
  const rubric = await loadRubricDefinition(
@@ -779,6 +839,7 @@ export const evaluateGraderCandidate = async (options: {
779
839
  );
780
840
  const item: GraderEvidenceItem = {
781
841
  annotationId: annotation.id,
842
+ ...(annotation.meta?.cluster ? { clusterId: annotation.meta.cluster } : {}),
782
843
  repetition,
783
844
  runDir: annotation.runDir,
784
845
  rubricPath: annotation.rubricPath,
@@ -3,6 +3,7 @@ import {
3
3
  type Assertion,
4
4
  type AssertionImpl,
5
5
  type AssertionProgress,
6
+ type AssertionResult,
6
7
  AssertionResultSchema,
7
8
  type GradingAssertionEntry,
8
9
  type GradingReport,
@@ -14,7 +15,7 @@ import {
14
15
  } from "../core/index.js";
15
16
  import { validatePluginConfigAsync } from "./validate-plugin-config.js";
16
17
 
17
- const FRAMEWORK_KEYS = new Set(["id", "type", "name", "weight", "threshold"]);
18
+ const FRAMEWORK_KEYS = new Set(["id", "type", "name", "weight", "threshold", "informational"]);
18
19
 
19
20
  const shapeOf = (schema: z.ZodTypeAny): Record<string, unknown> | null => {
20
21
  const shape = (schema as { shape?: unknown }).shape;
@@ -76,6 +77,7 @@ export const graderConfigHash = (input: {
76
77
  assertions: readonly AssertionEvaluatorIdentity[];
77
78
  validatedAssertionsHash: string;
78
79
  graderContext?: unknown;
80
+ skipJudge?: boolean;
79
81
  }): string =>
80
82
  valueHash({
81
83
  luxVersion: input.luxVersion,
@@ -83,6 +85,7 @@ export const graderConfigHash = (input: {
83
85
  assertions: input.assertions,
84
86
  validatedAssertionsHash: input.validatedAssertionsHash,
85
87
  graderContext: input.graderContext ?? null,
88
+ skipJudge: input.skipJudge ?? false,
86
89
  });
87
90
 
88
91
  export const validateAssertionPlan = async (
@@ -122,6 +125,45 @@ const describeAssertion = (a: Assertion): string => {
122
125
  return fields ? `${a.type} ${fields}` : a.type;
123
126
  };
124
127
 
128
+ const assertionPassed = (result: AssertionResult, threshold: number): boolean =>
129
+ result.errorMessage === undefined &&
130
+ result.abstention === undefined &&
131
+ result.passed &&
132
+ result.score >= threshold;
133
+
134
+ const aggregateGrading = (
135
+ entries: GradingAssertionEntry[],
136
+ skippedAssertions: NonNullable<GradingReport["skippedAssertions"]>,
137
+ gradingIncomplete: boolean,
138
+ ): GradingReport => {
139
+ const requiredEntries = entries.filter((entry) => entry.passed !== null);
140
+ const incomplete =
141
+ gradingIncomplete || requiredEntries.some((entry) => entry.errorMessage !== undefined);
142
+ const gradingAbstained = requiredEntries.some((entry) => entry.abstention !== undefined);
143
+ const scoredEntries = entries.filter(
144
+ (entry) => entry.errorMessage === undefined && entry.abstention === undefined,
145
+ );
146
+ const weightSum = scoredEntries.reduce((sum, entry) => sum + entry.weight, 0);
147
+ const weightedScoreSum = scoredEntries.reduce(
148
+ (sum, entry) => sum + entry.weight * entry.score,
149
+ 0,
150
+ );
151
+ const hasVerdict = !incomplete && !gradingAbstained && weightSum > 0;
152
+ return {
153
+ schemaVersion: 1,
154
+ casePassed:
155
+ hasVerdict && requiredEntries.length > 0
156
+ ? requiredEntries.every((entry) => entry.passed)
157
+ : null,
158
+ caseScore: hasVerdict ? weightedScoreSum / weightSum : null,
159
+ assertions: entries,
160
+ ...(skippedAssertions.length > 0 ? { skippedAssertions } : {}),
161
+ ...(incomplete
162
+ ? { incomplete: { exitReason: "error" as const, phase: "grading" as const } }
163
+ : {}),
164
+ };
165
+ };
166
+
125
167
  export const gradeRun = async (
126
168
  run: Run,
127
169
  registry: Registry,
@@ -133,6 +175,7 @@ export const gradeRun = async (
133
175
  complete: (attemptIds: readonly string[]) => void | Promise<void>;
134
176
  },
135
177
  validatedConfigs?: readonly unknown[],
178
+ skipJudge = false,
136
179
  ): Promise<GradingReport> => {
137
180
  const guardedObserver = guardRunObserver(observer);
138
181
  const assertions = run.case.assertions ?? [];
@@ -141,12 +184,24 @@ export const gradeRun = async (
141
184
  }
142
185
 
143
186
  const entries: GradingAssertionEntry[] = [];
144
- let weightedScoreSum = 0;
145
- let weightSum = 0;
146
- let allPassed = true;
187
+ const skippedAssertions: Array<{
188
+ id: string;
189
+ type: string;
190
+ name: string;
191
+ reason: "judge-disabled";
192
+ }> = [];
147
193
  let gradingIncomplete = false;
148
194
 
149
195
  for (const [index, a] of assertions.entries()) {
196
+ if (skipJudge && a.type === "rubric") {
197
+ skippedAssertions.push({
198
+ id: a.id ?? `${a.type}:${index + 1}`,
199
+ type: a.type,
200
+ name: describeAssertion(a),
201
+ reason: "judge-disabled",
202
+ });
203
+ continue;
204
+ }
150
205
  // Grading is the last cancellation point — an LLM judge can run for
151
206
  // minutes per assertion. An aborted grade can't claim everything passed.
152
207
  if (abortSignal?.aborted) {
@@ -187,7 +242,7 @@ export const gradeRun = async (
187
242
  if (validatedConfigs && index >= validatedConfigs.length) {
188
243
  throw new Error(`validated assertion plan is missing assertions[${index}]`);
189
244
  }
190
- // Pass the validated config so schema defaults (e.g. timeoutMs)
245
+ // Pass the validated config so schema defaults (e.g. timeout)
191
246
  // reach evaluate(); the raw assertion object has none applied.
192
247
  const result = AssertionResultSchema.parse(
193
248
  await impl.evaluate(validated as typeof a, run, {
@@ -201,43 +256,37 @@ export const gradeRun = async (
201
256
  : {}),
202
257
  }),
203
258
  );
204
- const passed =
205
- result.errorMessage === undefined && result.passed && result.score >= threshold;
259
+ const passed = assertionPassed(result, threshold);
206
260
  entry = {
207
261
  id,
208
262
  type: a.type,
209
263
  name,
210
- passed,
264
+ passed: a.informational ? null : passed,
265
+ ...(a.informational ? { informational: true } : {}),
211
266
  score: result.score,
212
267
  weight,
213
268
  threshold,
214
269
  durationMs: Date.now() - startedAt,
215
270
  ...(result.comment !== undefined ? { comment: result.comment } : {}),
216
271
  detail: result.detail,
272
+ ...(result.abstention !== undefined ? { abstention: result.abstention } : {}),
217
273
  ...(result.errorMessage !== undefined ? { errorMessage: result.errorMessage } : {}),
218
274
  ...(result.usage ? { usage: result.usage } : {}),
219
275
  };
220
- if (result.errorMessage !== undefined) {
221
- gradingIncomplete = true;
222
- } else {
223
- if (!passed) allPassed = false;
224
- weightedScoreSum += weight * result.score;
225
- weightSum += weight;
226
- }
227
276
  } catch (err) {
228
277
  const message = err instanceof Error ? err.message : String(err);
229
278
  entry = {
230
279
  id,
231
280
  type: a.type,
232
281
  name,
233
- passed: false,
282
+ passed: a.informational ? null : false,
283
+ ...(a.informational ? { informational: true } : {}),
234
284
  score: 0,
235
285
  weight,
236
286
  threshold,
237
287
  durationMs: Date.now() - startedAt,
238
288
  errorMessage: message,
239
289
  };
240
- gradingIncomplete = true;
241
290
  }
242
291
 
243
292
  entries.push(entry);
@@ -246,15 +295,5 @@ export const gradeRun = async (
246
295
  await modelAttempts?.complete(assertionAttemptIds);
247
296
  }
248
297
 
249
- let caseScore: number | null = null;
250
- if (!gradingIncomplete) caseScore = weightSum > 0 ? weightedScoreSum / weightSum : 0;
251
- return {
252
- schemaVersion: 1,
253
- casePassed: gradingIncomplete ? null : allPassed,
254
- caseScore,
255
- assertions: entries,
256
- ...(gradingIncomplete
257
- ? { incomplete: { exitReason: "error" as const, phase: "grading" as const } }
258
- : {}),
259
- };
298
+ return aggregateGrading(entries, skippedAssertions, gradingIncomplete);
260
299
  };
@@ -0,0 +1,132 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { z } from "zod";
5
+ import {
6
+ type ClosedHarnessCatalog,
7
+ codexCatalog,
8
+ copilotCatalog,
9
+ exec,
10
+ type ReasoningEffort,
11
+ tryParseJson,
12
+ } from "../core/index.js";
13
+
14
+ export type LiveHarnessModel = {
15
+ id: string;
16
+ efforts?: readonly ReasoningEffort[] | undefined;
17
+ };
18
+
19
+ export type HarnessCatalogDrift = {
20
+ unlisted: string[];
21
+ mismatched: string[];
22
+ unavailable: string[];
23
+ };
24
+
25
+ export const harnessCatalogDrift = (
26
+ catalog: ClosedHarnessCatalog,
27
+ live: readonly LiveHarnessModel[],
28
+ ): HarnessCatalogDrift => {
29
+ const liveIds = new Set(live.map((model) => model.id));
30
+ return {
31
+ unlisted: live.filter((model) => !(model.id in catalog.models)).map((model) => model.id),
32
+ mismatched: live
33
+ .filter(
34
+ (model) =>
35
+ model.efforts !== undefined &&
36
+ model.id in catalog.models &&
37
+ model.efforts.join(",") !== catalog.models[model.id]?.join(","),
38
+ )
39
+ .map((model) => `${model.id} (${model.efforts?.join(", ") || "no effort"})`),
40
+ unavailable: Object.keys(catalog.models).filter((id) => !liveIds.has(id)),
41
+ };
42
+ };
43
+
44
+ export const hasHarnessCatalogDrift = (drift: HarnessCatalogDrift): boolean =>
45
+ drift.unlisted.length > 0 || drift.mismatched.length > 0;
46
+
47
+ export const describeHarnessCatalogDrift = (drift: HarnessCatalogDrift): string =>
48
+ [
49
+ drift.unlisted.length > 0 ? `not in catalog: ${drift.unlisted.join(", ")}` : undefined,
50
+ drift.mismatched.length > 0 ? `efforts differ: ${drift.mismatched.join("; ")}` : undefined,
51
+ drift.unavailable.length > 0 ? `not offered here: ${drift.unavailable.join(", ")}` : undefined,
52
+ ]
53
+ .filter((part) => part !== undefined)
54
+ .join(". ");
55
+
56
+ const CodexModelsCacheSchema = z.object({
57
+ models: z.array(
58
+ z.looseObject({
59
+ slug: z.string(),
60
+ visibility: z.string().optional(),
61
+ supported_reasoning_levels: z.array(z.looseObject({ effort: z.string() })).default([]),
62
+ }),
63
+ ),
64
+ });
65
+
66
+ const codexModelsCachePath = (env: NodeJS.ProcessEnv = process.env): string =>
67
+ join(env.CODEX_HOME ?? join(homedir(), ".codex"), "models_cache.json");
68
+
69
+ export const parseCodexModelsCache = (text: string): LiveHarnessModel[] | undefined => {
70
+ const parsed = CodexModelsCacheSchema.safeParse(tryParseJson(text));
71
+ if (!parsed.success) return undefined;
72
+ return parsed.data.models
73
+ .filter((model) => model.visibility !== "hide")
74
+ .map((model) => ({
75
+ id: model.slug,
76
+ efforts: model.supported_reasoning_levels.map((level) => level.effort as ReasoningEffort),
77
+ }));
78
+ };
79
+
80
+ const readCodexLiveModels = async (
81
+ path = codexModelsCachePath(),
82
+ ): Promise<LiveHarnessModel[] | undefined> => {
83
+ try {
84
+ return parseCodexModelsCache(await readFile(path, "utf8"));
85
+ } catch {
86
+ return undefined;
87
+ }
88
+ };
89
+
90
+ export const parseCopilotModelValues = (helpText: string): LiveHarnessModel[] | undefined => {
91
+ const lines = helpText.split("\n");
92
+ const start = lines.findIndex((line) => /^\s*`model`:/.test(line));
93
+ if (start < 0) return undefined;
94
+ const models: LiveHarnessModel[] = [];
95
+ for (const line of lines.slice(start + 1)) {
96
+ const match = /^\s*-\s*"([^"]+)"\s*$/.exec(line);
97
+ if (!match?.[1]) break;
98
+ models.push({ id: match[1] });
99
+ }
100
+ return models.length > 0 ? models : undefined;
101
+ };
102
+
103
+ const readCopilotLiveModels = async (
104
+ command = "copilot",
105
+ ): Promise<LiveHarnessModel[] | undefined> => {
106
+ try {
107
+ const result = await exec(command, ["help", "config"], { timeoutMs: 15_000 });
108
+ if (result.exitCode !== 0 || result.timedOut) return undefined;
109
+ return parseCopilotModelValues(result.stdout);
110
+ } catch {
111
+ return undefined;
112
+ }
113
+ };
114
+
115
+ export type HarnessCatalogProbe = {
116
+ catalog: ClosedHarnessCatalog;
117
+ source: string;
118
+ read: (command: string | undefined) => Promise<LiveHarnessModel[] | undefined>;
119
+ };
120
+
121
+ export const harnessCatalogProbes: readonly HarnessCatalogProbe[] = [
122
+ {
123
+ catalog: codexCatalog,
124
+ source: "models_cache.json",
125
+ read: () => readCodexLiveModels(),
126
+ },
127
+ {
128
+ catalog: copilotCatalog,
129
+ source: "help config",
130
+ read: (command) => readCopilotLiveModels(command),
131
+ },
132
+ ];
@@ -0,0 +1,12 @@
1
+ import { createRubricAssertion } from "../assertions/rubric/index.js";
2
+ import type { HarnessModelConfig, Registry } from "../core/index.js";
3
+ import type { ResolvedLuxConfig } from "./config.js";
4
+
5
+ export const registryWithHarness = (
6
+ registry: Registry,
7
+ config: Pick<ResolvedLuxConfig, "assertions">,
8
+ harness: HarnessModelConfig | undefined,
9
+ ): Registry =>
10
+ config.assertions?.some((assertion) => assertion.type === "rubric")
11
+ ? registry
12
+ : registry.withAssertion(createRubricAssertion(harness));
@@ -122,6 +122,7 @@ export {
122
122
  formatRunsTable,
123
123
  type ListedRun,
124
124
  listRuns,
125
+ loadRunArtifacts,
125
126
  loadRunDetail,
126
127
  type RunDetail,
127
128
  } from "./list-runs.js";