@prismatic-io/lux 0.0.2-preview.4 → 0.0.2-preview.40

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 (753) 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 +6 -4
  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 +5 -2
  17. package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
  18. package/lib/assertions/core/command-exits-zero.js +59 -14
  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/index.d.ts.map +1 -1
  27. package/lib/assertions/core/index.js +2 -1
  28. package/lib/assertions/core/index.js.map +1 -1
  29. package/lib/assertions/core/json-pointer-equals.d.ts +1 -0
  30. package/lib/assertions/core/json-pointer-equals.d.ts.map +1 -1
  31. package/lib/assertions/core/output-checks.d.ts +3 -0
  32. package/lib/assertions/core/output-checks.d.ts.map +1 -1
  33. package/lib/assertions/core/predicate.d.ts +1 -0
  34. package/lib/assertions/core/predicate.d.ts.map +1 -1
  35. package/lib/assertions/core/resource-checks.d.ts +25 -0
  36. package/lib/assertions/core/resource-checks.d.ts.map +1 -1
  37. package/lib/assertions/core/resource-checks.js +35 -5
  38. package/lib/assertions/core/resource-checks.js.map +1 -1
  39. package/lib/assertions/core/safe-regex.d.ts.map +1 -1
  40. package/lib/assertions/core/safe-regex.js +7 -1
  41. package/lib/assertions/core/safe-regex.js.map +1 -1
  42. package/lib/assertions/rubric/evidence.d.ts +88 -0
  43. package/lib/assertions/rubric/evidence.d.ts.map +1 -0
  44. package/lib/assertions/rubric/evidence.js +75 -0
  45. package/lib/assertions/rubric/evidence.js.map +1 -0
  46. package/lib/assertions/rubric/index.d.ts +88 -34
  47. package/lib/assertions/rubric/index.d.ts.map +1 -1
  48. package/lib/assertions/rubric/index.js +59 -43
  49. package/lib/assertions/rubric/index.js.map +1 -1
  50. package/lib/assertions/rubric/internal.d.ts +30 -5
  51. package/lib/assertions/rubric/internal.d.ts.map +1 -1
  52. package/lib/assertions/rubric/internal.js +203 -41
  53. package/lib/assertions/rubric/internal.js.map +1 -1
  54. package/lib/authoring.d.ts +37 -2
  55. package/lib/authoring.d.ts.map +1 -1
  56. package/lib/authoring.js +36 -1
  57. package/lib/authoring.js.map +1 -1
  58. package/lib/cli/bin.js +2 -13
  59. package/lib/cli/bin.js.map +1 -1
  60. package/lib/cli/command-runtime.d.ts +3 -3
  61. package/lib/cli/command-runtime.d.ts.map +1 -1
  62. package/lib/cli/command-runtime.js +17 -6
  63. package/lib/cli/command-runtime.js.map +1 -1
  64. package/lib/cli/doctor.d.ts +55 -0
  65. package/lib/cli/doctor.d.ts.map +1 -0
  66. package/lib/cli/doctor.js +14 -0
  67. package/lib/cli/doctor.js.map +1 -0
  68. package/lib/cli/harness-plan.d.ts +27 -0
  69. package/lib/cli/harness-plan.d.ts.map +1 -0
  70. package/lib/cli/harness-plan.js +75 -0
  71. package/lib/cli/harness-plan.js.map +1 -0
  72. package/lib/cli/init-templates.d.ts +11 -0
  73. package/lib/cli/init-templates.d.ts.map +1 -0
  74. package/lib/cli/init-templates.js +215 -0
  75. package/lib/cli/init-templates.js.map +1 -0
  76. package/lib/cli/init.d.ts +10 -0
  77. package/lib/cli/init.d.ts.map +1 -1
  78. package/lib/cli/init.js +34 -173
  79. package/lib/cli/init.js.map +1 -1
  80. package/lib/cli/output-schemas.d.ts +1412 -0
  81. package/lib/cli/output-schemas.d.ts.map +1 -0
  82. package/lib/cli/output-schemas.js +94 -0
  83. package/lib/cli/output-schemas.js.map +1 -0
  84. package/lib/cli/program.d.ts +140 -12
  85. package/lib/cli/program.d.ts.map +1 -1
  86. package/lib/cli/program.js +783 -650
  87. package/lib/cli/program.js.map +1 -1
  88. package/lib/cli/render/format.d.ts.map +1 -1
  89. package/lib/cli/render/format.js +1 -1
  90. package/lib/cli/render/format.js.map +1 -1
  91. package/lib/cli/render/reporter.d.ts.map +1 -1
  92. package/lib/cli/render/reporter.js +35 -8
  93. package/lib/cli/render/reporter.js.map +1 -1
  94. package/lib/cli/run-options.d.ts +19 -4
  95. package/lib/cli/run-options.d.ts.map +1 -1
  96. package/lib/cli/run-options.js +100 -19
  97. package/lib/cli/run-options.js.map +1 -1
  98. package/lib/cli/view.d.ts +15 -0
  99. package/lib/cli/view.d.ts.map +1 -0
  100. package/lib/cli/view.js +168 -0
  101. package/lib/cli/view.js.map +1 -0
  102. package/lib/container/driver.d.ts +27 -0
  103. package/lib/container/driver.d.ts.map +1 -0
  104. package/lib/container/driver.js +199 -0
  105. package/lib/container/driver.js.map +1 -0
  106. package/lib/container/paths.d.ts +3 -0
  107. package/lib/container/paths.d.ts.map +1 -0
  108. package/lib/container/paths.js +27 -0
  109. package/lib/container/paths.js.map +1 -0
  110. package/lib/container/protocol.d.ts +12 -0
  111. package/lib/container/protocol.d.ts.map +1 -0
  112. package/lib/container/protocol.js +38 -0
  113. package/lib/container/protocol.js.map +1 -0
  114. package/lib/container/resources.d.ts +14 -0
  115. package/lib/container/resources.d.ts.map +1 -0
  116. package/lib/container/resources.js +141 -0
  117. package/lib/container/resources.js.map +1 -0
  118. package/lib/container/worker.d.ts +2 -0
  119. package/lib/container/worker.d.ts.map +1 -0
  120. package/lib/container/worker.js +85 -0
  121. package/lib/container/worker.js.map +1 -0
  122. package/lib/core/action-events.d.ts +29 -0
  123. package/lib/core/action-events.d.ts.map +1 -0
  124. package/lib/core/action-events.js +51 -0
  125. package/lib/core/action-events.js.map +1 -0
  126. package/lib/core/agent-activity.d.ts +49 -0
  127. package/lib/core/agent-activity.d.ts.map +1 -0
  128. package/lib/core/agent-activity.js +206 -0
  129. package/lib/core/agent-activity.js.map +1 -0
  130. package/lib/core/agent-environment.d.ts +5 -0
  131. package/lib/core/agent-environment.d.ts.map +1 -0
  132. package/lib/core/agent-environment.js +47 -0
  133. package/lib/core/agent-environment.js.map +1 -0
  134. package/lib/core/agent-events.d.ts +26 -0
  135. package/lib/core/agent-events.d.ts.map +1 -0
  136. package/lib/core/agent-events.js +13 -0
  137. package/lib/core/agent-events.js.map +1 -0
  138. package/lib/core/annotation.d.ts +6 -2
  139. package/lib/core/annotation.d.ts.map +1 -1
  140. package/lib/core/annotation.js +2 -1
  141. package/lib/core/annotation.js.map +1 -1
  142. package/lib/core/answerer.d.ts +12 -0
  143. package/lib/core/answerer.d.ts.map +1 -1
  144. package/lib/core/answerer.js +2 -0
  145. package/lib/core/answerer.js.map +1 -1
  146. package/lib/core/artifact-evidence.d.ts +6 -1
  147. package/lib/core/artifact-evidence.d.ts.map +1 -1
  148. package/lib/core/artifact-evidence.js +27 -6
  149. package/lib/core/artifact-evidence.js.map +1 -1
  150. package/lib/core/assertion.d.ts +10 -4
  151. package/lib/core/assertion.d.ts.map +1 -1
  152. package/lib/core/assertion.js +8 -2
  153. package/lib/core/assertion.js.map +1 -1
  154. package/lib/core/case-defaults.d.ts +16 -0
  155. package/lib/core/case-defaults.d.ts.map +1 -0
  156. package/lib/core/case-defaults.js +42 -0
  157. package/lib/core/case-defaults.js.map +1 -0
  158. package/lib/core/case.d.ts +120 -6
  159. package/lib/core/case.d.ts.map +1 -1
  160. package/lib/core/case.js +51 -5
  161. package/lib/core/case.js.map +1 -1
  162. package/lib/core/command-verification.d.ts +10 -0
  163. package/lib/core/command-verification.d.ts.map +1 -0
  164. package/lib/core/command-verification.js +66 -0
  165. package/lib/core/command-verification.js.map +1 -0
  166. package/lib/core/driver-execution.d.ts +83 -0
  167. package/lib/core/driver-execution.d.ts.map +1 -0
  168. package/lib/core/driver-execution.js +72 -0
  169. package/lib/core/driver-execution.js.map +1 -0
  170. package/lib/core/driver-metrics.d.ts +98 -0
  171. package/lib/core/driver-metrics.d.ts.map +1 -0
  172. package/lib/core/driver-metrics.js +36 -0
  173. package/lib/core/driver-metrics.js.map +1 -0
  174. package/lib/core/driver.d.ts +64 -0
  175. package/lib/core/driver.d.ts.map +1 -1
  176. package/lib/core/driver.js +28 -0
  177. package/lib/core/driver.js.map +1 -1
  178. package/lib/core/duration.d.ts +5 -0
  179. package/lib/core/duration.d.ts.map +1 -0
  180. package/lib/core/duration.js +49 -0
  181. package/lib/core/duration.js.map +1 -0
  182. package/lib/core/environment.d.ts +18 -0
  183. package/lib/core/environment.d.ts.map +1 -0
  184. package/lib/core/environment.js +21 -0
  185. package/lib/core/environment.js.map +1 -0
  186. package/lib/core/evaluation-clusters.d.ts +17 -0
  187. package/lib/core/evaluation-clusters.d.ts.map +1 -0
  188. package/lib/core/evaluation-clusters.js +23 -0
  189. package/lib/core/evaluation-clusters.js.map +1 -0
  190. package/lib/core/events.d.ts +34 -0
  191. package/lib/core/events.d.ts.map +1 -1
  192. package/lib/core/events.js +11 -2
  193. package/lib/core/events.js.map +1 -1
  194. package/lib/core/experiment.d.ts +33 -2
  195. package/lib/core/experiment.d.ts.map +1 -1
  196. package/lib/core/experiment.js +40 -19
  197. package/lib/core/experiment.js.map +1 -1
  198. package/lib/core/file-tree.d.ts +7 -0
  199. package/lib/core/file-tree.d.ts.map +1 -0
  200. package/lib/core/file-tree.js +35 -0
  201. package/lib/core/file-tree.js.map +1 -0
  202. package/lib/core/global-id.d.ts +6 -0
  203. package/lib/core/global-id.d.ts.map +1 -0
  204. package/lib/core/global-id.js +17 -0
  205. package/lib/core/global-id.js.map +1 -0
  206. package/lib/core/harness-catalog.d.ts +35 -0
  207. package/lib/core/harness-catalog.d.ts.map +1 -0
  208. package/lib/core/harness-catalog.js +45 -0
  209. package/lib/core/harness-catalog.js.map +1 -0
  210. package/lib/core/harness-catalogs/antigravity.d.ts +11 -0
  211. package/lib/core/harness-catalogs/antigravity.d.ts.map +1 -0
  212. package/lib/core/harness-catalogs/antigravity.js +23 -0
  213. package/lib/core/harness-catalogs/antigravity.js.map +1 -0
  214. package/lib/core/harness-catalogs/claude-code.d.ts +12 -0
  215. package/lib/core/harness-catalogs/claude-code.d.ts.map +1 -0
  216. package/lib/core/harness-catalogs/claude-code.js +24 -0
  217. package/lib/core/harness-catalogs/claude-code.js.map +1 -0
  218. package/lib/core/harness-catalogs/codex.d.ts +11 -0
  219. package/lib/core/harness-catalogs/codex.d.ts.map +1 -0
  220. package/lib/core/harness-catalogs/codex.js +26 -0
  221. package/lib/core/harness-catalogs/codex.js.map +1 -0
  222. package/lib/core/harness-catalogs/copilot.d.ts +29 -0
  223. package/lib/core/harness-catalogs/copilot.d.ts.map +1 -0
  224. package/lib/core/harness-catalogs/copilot.js +45 -0
  225. package/lib/core/harness-catalogs/copilot.js.map +1 -0
  226. package/lib/core/harness-catalogs/cursor.d.ts +2 -0
  227. package/lib/core/harness-catalogs/cursor.d.ts.map +1 -0
  228. package/lib/core/harness-catalogs/cursor.js +13 -0
  229. package/lib/core/harness-catalogs/cursor.js.map +1 -0
  230. package/lib/core/harness-catalogs/grok-build.d.ts +7 -0
  231. package/lib/core/harness-catalogs/grok-build.d.ts.map +1 -0
  232. package/lib/core/harness-catalogs/grok-build.js +18 -0
  233. package/lib/core/harness-catalogs/grok-build.js.map +1 -0
  234. package/lib/core/harness-catalogs/index.d.ts +73 -0
  235. package/lib/core/harness-catalogs/index.d.ts.map +1 -0
  236. package/lib/core/harness-catalogs/index.js +17 -0
  237. package/lib/core/harness-catalogs/index.js.map +1 -0
  238. package/lib/core/harness-matrix.d.ts +154 -0
  239. package/lib/core/harness-matrix.d.ts.map +1 -0
  240. package/lib/core/harness-matrix.js +204 -0
  241. package/lib/core/harness-matrix.js.map +1 -0
  242. package/lib/core/index.d.ts +12 -0
  243. package/lib/core/index.d.ts.map +1 -1
  244. package/lib/core/index.js +12 -0
  245. package/lib/core/index.js.map +1 -1
  246. package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
  247. package/lib/core/lifecycle-fixtures.js +4 -2
  248. package/lib/core/lifecycle-fixtures.js.map +1 -1
  249. package/lib/core/model-cli.d.ts +9 -11
  250. package/lib/core/model-cli.d.ts.map +1 -1
  251. package/lib/core/model-cli.js +39 -22
  252. package/lib/core/model-cli.js.map +1 -1
  253. package/lib/core/platform-process.d.ts +7 -2
  254. package/lib/core/platform-process.d.ts.map +1 -1
  255. package/lib/core/platform-process.js +54 -16
  256. package/lib/core/platform-process.js.map +1 -1
  257. package/lib/core/reference-defaults.d.ts +5 -0
  258. package/lib/core/reference-defaults.d.ts.map +1 -0
  259. package/lib/core/reference-defaults.js +42 -0
  260. package/lib/core/reference-defaults.js.map +1 -0
  261. package/lib/core/rubric.d.ts +1 -0
  262. package/lib/core/rubric.d.ts.map +1 -1
  263. package/lib/core/run.d.ts +292 -1
  264. package/lib/core/run.d.ts.map +1 -1
  265. package/lib/core/run.js +27 -0
  266. package/lib/core/run.js.map +1 -1
  267. package/lib/core/secure-copy.d.ts.map +1 -0
  268. package/lib/core/secure-copy.js.map +1 -0
  269. package/lib/core/usage.d.ts +5 -0
  270. package/lib/core/usage.d.ts.map +1 -1
  271. package/lib/core/usage.js +3 -0
  272. package/lib/core/usage.js.map +1 -1
  273. package/lib/core/wire.d.ts +11 -0
  274. package/lib/core/wire.d.ts.map +1 -1
  275. package/lib/drivers/antigravity/artifacts.d.ts +2 -0
  276. package/lib/drivers/antigravity/artifacts.d.ts.map +1 -0
  277. package/lib/drivers/antigravity/artifacts.js +33 -0
  278. package/lib/drivers/antigravity/artifacts.js.map +1 -0
  279. package/lib/drivers/antigravity/config.d.ts +88 -0
  280. package/lib/drivers/antigravity/config.d.ts.map +1 -0
  281. package/lib/drivers/antigravity/config.js +87 -0
  282. package/lib/drivers/antigravity/config.js.map +1 -0
  283. package/lib/drivers/antigravity/events.d.ts +4 -0
  284. package/lib/drivers/antigravity/events.d.ts.map +1 -0
  285. package/lib/drivers/antigravity/events.js +241 -0
  286. package/lib/drivers/antigravity/events.js.map +1 -0
  287. package/lib/drivers/antigravity/index.d.ts +114 -0
  288. package/lib/drivers/antigravity/index.d.ts.map +1 -0
  289. package/lib/drivers/antigravity/index.js +113 -0
  290. package/lib/drivers/antigravity/index.js.map +1 -0
  291. package/lib/drivers/antigravity/runtime.d.ts +7 -0
  292. package/lib/drivers/antigravity/runtime.d.ts.map +1 -0
  293. package/lib/drivers/antigravity/runtime.js +83 -0
  294. package/lib/drivers/antigravity/runtime.js.map +1 -0
  295. package/lib/drivers/claude-code/deferred-process.d.ts +17 -0
  296. package/lib/drivers/claude-code/deferred-process.d.ts.map +1 -0
  297. package/lib/drivers/claude-code/deferred-process.js +108 -0
  298. package/lib/drivers/claude-code/deferred-process.js.map +1 -0
  299. package/lib/drivers/claude-code/index.d.ts +187 -10
  300. package/lib/drivers/claude-code/index.d.ts.map +1 -1
  301. package/lib/drivers/claude-code/index.js +197 -252
  302. package/lib/drivers/claude-code/index.js.map +1 -1
  303. package/lib/drivers/claude-code/isolation.d.ts +8 -0
  304. package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
  305. package/lib/drivers/claude-code/isolation.js +199 -0
  306. package/lib/drivers/claude-code/isolation.js.map +1 -0
  307. package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
  308. package/lib/drivers/claude-code/parse-events.js +73 -8
  309. package/lib/drivers/claude-code/parse-events.js.map +1 -1
  310. package/lib/drivers/codex/app-events.d.ts +9 -2
  311. package/lib/drivers/codex/app-events.d.ts.map +1 -1
  312. package/lib/drivers/codex/app-events.js +104 -12
  313. package/lib/drivers/codex/app-events.js.map +1 -1
  314. package/lib/drivers/codex/config.d.ts +69 -5
  315. package/lib/drivers/codex/config.d.ts.map +1 -1
  316. package/lib/drivers/codex/config.js +48 -8
  317. package/lib/drivers/codex/config.js.map +1 -1
  318. package/lib/drivers/codex/exec-events.d.ts +4 -0
  319. package/lib/drivers/codex/exec-events.d.ts.map +1 -0
  320. package/lib/drivers/codex/exec-events.js +230 -0
  321. package/lib/drivers/codex/exec-events.js.map +1 -0
  322. package/lib/drivers/codex/index.d.ts +142 -4
  323. package/lib/drivers/codex/index.d.ts.map +1 -1
  324. package/lib/drivers/codex/index.js +114 -276
  325. package/lib/drivers/codex/index.js.map +1 -1
  326. package/lib/drivers/copilot/config.d.ts +84 -0
  327. package/lib/drivers/copilot/config.d.ts.map +1 -0
  328. package/lib/drivers/copilot/config.js +57 -0
  329. package/lib/drivers/copilot/config.js.map +1 -0
  330. package/lib/drivers/copilot/index.d.ts +107 -0
  331. package/lib/drivers/copilot/index.d.ts.map +1 -0
  332. package/lib/drivers/copilot/index.js +268 -0
  333. package/lib/drivers/copilot/index.js.map +1 -0
  334. package/lib/drivers/cursor/config.d.ts +28 -0
  335. package/lib/drivers/cursor/config.d.ts.map +1 -0
  336. package/lib/drivers/cursor/config.js +28 -0
  337. package/lib/drivers/cursor/config.js.map +1 -0
  338. package/lib/drivers/cursor/index.d.ts +44 -0
  339. package/lib/drivers/cursor/index.d.ts.map +1 -0
  340. package/lib/drivers/cursor/index.js +286 -0
  341. package/lib/drivers/cursor/index.js.map +1 -0
  342. package/lib/drivers/cursor/interaction.d.ts +6 -0
  343. package/lib/drivers/cursor/interaction.d.ts.map +1 -0
  344. package/lib/drivers/cursor/interaction.js +55 -0
  345. package/lib/drivers/cursor/interaction.js.map +1 -0
  346. package/lib/drivers/grok-build/config.d.ts +68 -0
  347. package/lib/drivers/grok-build/config.d.ts.map +1 -0
  348. package/lib/drivers/grok-build/config.js +40 -0
  349. package/lib/drivers/grok-build/config.js.map +1 -0
  350. package/lib/drivers/grok-build/index.d.ts +87 -0
  351. package/lib/drivers/grok-build/index.d.ts.map +1 -0
  352. package/lib/drivers/grok-build/index.js +293 -0
  353. package/lib/drivers/grok-build/index.js.map +1 -0
  354. package/lib/drivers/mcp/index.d.ts +37 -4
  355. package/lib/drivers/mcp/index.d.ts.map +1 -1
  356. package/lib/drivers/mcp/index.js +25 -11
  357. package/lib/drivers/mcp/index.js.map +1 -1
  358. package/lib/drivers/shared/acp-events.d.ts +15 -0
  359. package/lib/drivers/shared/acp-events.d.ts.map +1 -0
  360. package/lib/drivers/shared/acp-events.js +83 -0
  361. package/lib/drivers/shared/acp-events.js.map +1 -0
  362. package/lib/drivers/shared/acp-interaction.d.ts +7 -0
  363. package/lib/drivers/shared/acp-interaction.d.ts.map +1 -0
  364. package/lib/drivers/shared/acp-interaction.js +20 -0
  365. package/lib/drivers/shared/acp-interaction.js.map +1 -0
  366. package/lib/drivers/shared/acp-session.d.ts +4 -0
  367. package/lib/drivers/shared/acp-session.d.ts.map +1 -0
  368. package/lib/drivers/shared/acp-session.js +23 -0
  369. package/lib/drivers/shared/acp-session.js.map +1 -0
  370. package/lib/drivers/shared/acp-transport.d.ts +40 -0
  371. package/lib/drivers/shared/acp-transport.d.ts.map +1 -0
  372. package/lib/drivers/shared/acp-transport.js +152 -0
  373. package/lib/drivers/shared/acp-transport.js.map +1 -0
  374. package/lib/drivers/shared/artifacts.d.ts.map +1 -1
  375. package/lib/drivers/shared/artifacts.js +3 -2
  376. package/lib/drivers/shared/artifacts.js.map +1 -1
  377. package/lib/drivers/shared/experiment-behavior.d.ts +13 -0
  378. package/lib/drivers/shared/experiment-behavior.d.ts.map +1 -0
  379. package/lib/drivers/shared/experiment-behavior.js +200 -0
  380. package/lib/drivers/shared/experiment-behavior.js.map +1 -0
  381. package/lib/drivers/shared/experiment-policy.d.ts +4 -0
  382. package/lib/drivers/shared/experiment-policy.d.ts.map +1 -0
  383. package/lib/drivers/shared/experiment-policy.js +144 -0
  384. package/lib/drivers/shared/experiment-policy.js.map +1 -0
  385. package/lib/drivers/shared/skills.d.ts +3 -0
  386. package/lib/drivers/shared/skills.d.ts.map +1 -0
  387. package/lib/drivers/shared/skills.js +73 -0
  388. package/lib/drivers/shared/skills.js.map +1 -0
  389. package/lib/drivers/subprocess/index.d.ts +39 -4
  390. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  391. package/lib/drivers/subprocess/index.js +56 -12
  392. package/lib/drivers/subprocess/index.js.map +1 -1
  393. package/lib/index.d.ts +24 -8
  394. package/lib/index.d.ts.map +1 -1
  395. package/lib/index.js +20 -5
  396. package/lib/index.js.map +1 -1
  397. package/lib/optimization/reflective.d.ts +3 -1
  398. package/lib/optimization/reflective.d.ts.map +1 -1
  399. package/lib/optimization/reflective.js +3 -2
  400. package/lib/optimization/reflective.js.map +1 -1
  401. package/lib/orchestrator/annotation-loader.d.ts +6 -2
  402. package/lib/orchestrator/annotation-loader.d.ts.map +1 -1
  403. package/lib/orchestrator/annotation-loader.js +8 -0
  404. package/lib/orchestrator/annotation-loader.js.map +1 -1
  405. package/lib/orchestrator/annotation-store.d.ts.map +1 -1
  406. package/lib/orchestrator/annotation-store.js +16 -2
  407. package/lib/orchestrator/annotation-store.js.map +1 -1
  408. package/lib/orchestrator/artifact-origin.d.ts +3 -0
  409. package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
  410. package/lib/orchestrator/artifact-origin.js +40 -0
  411. package/lib/orchestrator/artifact-origin.js.map +1 -0
  412. package/lib/orchestrator/campaign-lifecycle.d.ts +1 -0
  413. package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -1
  414. package/lib/orchestrator/campaign-lifecycle.js +4 -1
  415. package/lib/orchestrator/campaign-lifecycle.js.map +1 -1
  416. package/lib/orchestrator/candidates.d.ts.map +1 -1
  417. package/lib/orchestrator/candidates.js +3 -2
  418. package/lib/orchestrator/candidates.js.map +1 -1
  419. package/lib/orchestrator/compare.d.ts +23 -6
  420. package/lib/orchestrator/compare.d.ts.map +1 -1
  421. package/lib/orchestrator/compare.js +45 -12
  422. package/lib/orchestrator/compare.js.map +1 -1
  423. package/lib/orchestrator/comparison-identity.d.ts.map +1 -1
  424. package/lib/orchestrator/comparison-identity.js +2 -0
  425. package/lib/orchestrator/comparison-identity.js.map +1 -1
  426. package/lib/orchestrator/config.d.ts +180 -1
  427. package/lib/orchestrator/config.d.ts.map +1 -1
  428. package/lib/orchestrator/config.js +21 -2
  429. package/lib/orchestrator/config.js.map +1 -1
  430. package/lib/orchestrator/discover.d.ts +1 -0
  431. package/lib/orchestrator/discover.d.ts.map +1 -1
  432. package/lib/orchestrator/discover.js +7 -1
  433. package/lib/orchestrator/discover.js.map +1 -1
  434. package/lib/orchestrator/doctor.d.ts +1 -0
  435. package/lib/orchestrator/doctor.d.ts.map +1 -1
  436. package/lib/orchestrator/doctor.js +134 -69
  437. package/lib/orchestrator/doctor.js.map +1 -1
  438. package/lib/orchestrator/driver-capabilities.d.ts +4 -0
  439. package/lib/orchestrator/driver-capabilities.d.ts.map +1 -0
  440. package/lib/orchestrator/driver-capabilities.js +13 -0
  441. package/lib/orchestrator/driver-capabilities.js.map +1 -0
  442. package/lib/orchestrator/driver-identity.d.ts +5 -0
  443. package/lib/orchestrator/driver-identity.d.ts.map +1 -0
  444. package/lib/orchestrator/driver-identity.js +51 -0
  445. package/lib/orchestrator/driver-identity.js.map +1 -0
  446. package/lib/orchestrator/experiment-context.d.ts +51 -3
  447. package/lib/orchestrator/experiment-context.d.ts.map +1 -1
  448. package/lib/orchestrator/experiment-context.js +2 -1
  449. package/lib/orchestrator/experiment-context.js.map +1 -1
  450. package/lib/orchestrator/experiment-contracts.d.ts +31 -1
  451. package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
  452. package/lib/orchestrator/experiment-corpus.d.ts +2 -1
  453. package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
  454. package/lib/orchestrator/experiment-corpus.js +28 -22
  455. package/lib/orchestrator/experiment-corpus.js.map +1 -1
  456. package/lib/orchestrator/experiment-effects.d.ts +33 -0
  457. package/lib/orchestrator/experiment-effects.d.ts.map +1 -0
  458. package/lib/orchestrator/experiment-effects.js +46 -0
  459. package/lib/orchestrator/experiment-effects.js.map +1 -0
  460. package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
  461. package/lib/orchestrator/experiment-evaluation.js +70 -5
  462. package/lib/orchestrator/experiment-evaluation.js.map +1 -1
  463. package/lib/orchestrator/experiment-identity.d.ts +3 -0
  464. package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
  465. package/lib/orchestrator/experiment-identity.js +22 -33
  466. package/lib/orchestrator/experiment-identity.js.map +1 -1
  467. package/lib/orchestrator/experiment-loader.d.ts +8 -3
  468. package/lib/orchestrator/experiment-loader.d.ts.map +1 -1
  469. package/lib/orchestrator/experiment-preflight.d.ts +3 -0
  470. package/lib/orchestrator/experiment-preflight.d.ts.map +1 -0
  471. package/lib/orchestrator/experiment-preflight.js +21 -0
  472. package/lib/orchestrator/experiment-preflight.js.map +1 -0
  473. package/lib/orchestrator/experiment-report.d.ts +91 -1
  474. package/lib/orchestrator/experiment-report.d.ts.map +1 -1
  475. package/lib/orchestrator/experiment-report.js +9 -1
  476. package/lib/orchestrator/experiment-report.js.map +1 -1
  477. package/lib/orchestrator/experiment-runs.d.ts +63 -2
  478. package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
  479. package/lib/orchestrator/experiment-runs.js +13 -5
  480. package/lib/orchestrator/experiment-runs.js.map +1 -1
  481. package/lib/orchestrator/experiment-runtime-identity.d.ts +0 -16
  482. package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -1
  483. package/lib/orchestrator/experiment-runtime-identity.js +5 -220
  484. package/lib/orchestrator/experiment-runtime-identity.js.map +1 -1
  485. package/lib/orchestrator/experiment-selection.d.ts.map +1 -1
  486. package/lib/orchestrator/experiment-selection.js +151 -43
  487. package/lib/orchestrator/experiment-selection.js.map +1 -1
  488. package/lib/orchestrator/experiment.d.ts +3 -3
  489. package/lib/orchestrator/experiment.d.ts.map +1 -1
  490. package/lib/orchestrator/experiment.js +26 -21
  491. package/lib/orchestrator/experiment.js.map +1 -1
  492. package/lib/orchestrator/fixture-identity.d.ts +1 -0
  493. package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
  494. package/lib/orchestrator/fixture-identity.js +6 -1
  495. package/lib/orchestrator/fixture-identity.js.map +1 -1
  496. package/lib/orchestrator/fs-read.d.ts +1 -6
  497. package/lib/orchestrator/fs-read.d.ts.map +1 -1
  498. package/lib/orchestrator/fs-read.js +2 -32
  499. package/lib/orchestrator/fs-read.js.map +1 -1
  500. package/lib/orchestrator/grader-experiment.d.ts +23 -5
  501. package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
  502. package/lib/orchestrator/grader-experiment.js +54 -9
  503. package/lib/orchestrator/grader-experiment.js.map +1 -1
  504. package/lib/orchestrator/grading.d.ts +1 -0
  505. package/lib/orchestrator/grading.d.ts.map +1 -1
  506. package/lib/orchestrator/grading.js +41 -33
  507. package/lib/orchestrator/grading.js.map +1 -1
  508. package/lib/orchestrator/harness-catalog-drift.d.ts +22 -0
  509. package/lib/orchestrator/harness-catalog-drift.d.ts.map +1 -0
  510. package/lib/orchestrator/harness-catalog-drift.js +90 -0
  511. package/lib/orchestrator/harness-catalog-drift.js.map +1 -0
  512. package/lib/orchestrator/harness-registry.d.ts +4 -0
  513. package/lib/orchestrator/harness-registry.d.ts.map +1 -0
  514. package/lib/orchestrator/harness-registry.js +5 -0
  515. package/lib/orchestrator/harness-registry.js.map +1 -0
  516. package/lib/orchestrator/index.d.ts +1 -1
  517. package/lib/orchestrator/index.d.ts.map +1 -1
  518. package/lib/orchestrator/index.js +1 -1
  519. package/lib/orchestrator/index.js.map +1 -1
  520. package/lib/orchestrator/list-runs.d.ts +8 -1
  521. package/lib/orchestrator/list-runs.d.ts.map +1 -1
  522. package/lib/orchestrator/list-runs.js +83 -18
  523. package/lib/orchestrator/list-runs.js.map +1 -1
  524. package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -1
  525. package/lib/orchestrator/optimization-lifecycle.js +3 -1
  526. package/lib/orchestrator/optimization-lifecycle.js.map +1 -1
  527. package/lib/orchestrator/orchestrator.d.ts +17 -2
  528. package/lib/orchestrator/orchestrator.d.ts.map +1 -1
  529. package/lib/orchestrator/orchestrator.js +55 -177
  530. package/lib/orchestrator/orchestrator.js.map +1 -1
  531. package/lib/orchestrator/paired-effects.d.ts +34 -0
  532. package/lib/orchestrator/paired-effects.d.ts.map +1 -0
  533. package/lib/orchestrator/paired-effects.js +164 -0
  534. package/lib/orchestrator/paired-effects.js.map +1 -0
  535. package/lib/orchestrator/profile.d.ts +4 -0
  536. package/lib/orchestrator/profile.d.ts.map +1 -0
  537. package/lib/orchestrator/profile.js +10 -0
  538. package/lib/orchestrator/profile.js.map +1 -0
  539. package/lib/orchestrator/provenance.d.ts +5 -1
  540. package/lib/orchestrator/provenance.d.ts.map +1 -1
  541. package/lib/orchestrator/provenance.js +16 -3
  542. package/lib/orchestrator/provenance.js.map +1 -1
  543. package/lib/orchestrator/regrade.d.ts +4 -2
  544. package/lib/orchestrator/regrade.d.ts.map +1 -1
  545. package/lib/orchestrator/rubric-loader.js +1 -1
  546. package/lib/orchestrator/rubric-loader.js.map +1 -1
  547. package/lib/orchestrator/run-dir.d.ts +2 -0
  548. package/lib/orchestrator/run-dir.d.ts.map +1 -1
  549. package/lib/orchestrator/run-dir.js +1 -1
  550. package/lib/orchestrator/run-dir.js.map +1 -1
  551. package/lib/orchestrator/run-execution.d.ts +3 -0
  552. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  553. package/lib/orchestrator/run-execution.js +64 -10
  554. package/lib/orchestrator/run-execution.js.map +1 -1
  555. package/lib/orchestrator/run-lifecycle.d.ts +1 -0
  556. package/lib/orchestrator/run-lifecycle.d.ts.map +1 -1
  557. package/lib/orchestrator/run-lifecycle.js +3 -2
  558. package/lib/orchestrator/run-lifecycle.js.map +1 -1
  559. package/lib/orchestrator/run-workspace.d.ts +10 -0
  560. package/lib/orchestrator/run-workspace.d.ts.map +1 -0
  561. package/lib/orchestrator/run-workspace.js +58 -0
  562. package/lib/orchestrator/run-workspace.js.map +1 -0
  563. package/lib/orchestrator/suite-compare.d.ts +37 -0
  564. package/lib/orchestrator/suite-compare.d.ts.map +1 -1
  565. package/lib/orchestrator/suite-compare.js +44 -22
  566. package/lib/orchestrator/suite-compare.js.map +1 -1
  567. package/lib/orchestrator/suite-runs.d.ts +6 -1
  568. package/lib/orchestrator/suite-runs.d.ts.map +1 -1
  569. package/lib/orchestrator/suite-runs.js +14 -2
  570. package/lib/orchestrator/suite-runs.js.map +1 -1
  571. package/lib/orchestrator/suite-summary.d.ts +79 -0
  572. package/lib/orchestrator/suite-summary.d.ts.map +1 -1
  573. package/lib/orchestrator/suite-summary.js +67 -14
  574. package/lib/orchestrator/suite-summary.js.map +1 -1
  575. package/lib/previewer/artifacts.d.ts +25 -0
  576. package/lib/previewer/artifacts.d.ts.map +1 -0
  577. package/lib/previewer/artifacts.js +180 -0
  578. package/lib/previewer/artifacts.js.map +1 -0
  579. package/lib/previewer/server.d.ts +111 -0
  580. package/lib/previewer/server.d.ts.map +1 -0
  581. package/lib/previewer/server.js +559 -0
  582. package/lib/previewer/server.js.map +1 -0
  583. package/package.json +4 -2
  584. package/skills/lux-answerer/SKILL.md +2 -2
  585. package/src/answerers/claude-code/index.ts +6 -5
  586. package/src/answerers/persona/index.ts +75 -34
  587. package/src/answerers/terminal/index.ts +7 -11
  588. package/src/assertions/authoring.ts +2 -0
  589. package/src/assertions/core/command-exits-zero.ts +82 -17
  590. package/src/assertions/core/event-checks.ts +64 -3
  591. package/src/assertions/core/index.ts +2 -0
  592. package/src/assertions/core/resource-checks.ts +38 -5
  593. package/src/assertions/core/safe-regex.ts +16 -6
  594. package/src/assertions/rubric/evidence.ts +85 -0
  595. package/src/assertions/rubric/index.ts +63 -46
  596. package/src/assertions/rubric/internal.ts +256 -41
  597. package/src/authoring.ts +346 -2
  598. package/src/cli/bin.ts +2 -12
  599. package/src/cli/command-runtime.ts +20 -9
  600. package/src/cli/doctor.ts +17 -0
  601. package/src/cli/harness-plan.ts +123 -0
  602. package/src/cli/init-templates.ts +238 -0
  603. package/src/cli/init.ts +53 -184
  604. package/src/cli/output-schemas.ts +109 -0
  605. package/src/cli/program.ts +697 -730
  606. package/src/cli/render/format.ts +1 -1
  607. package/src/cli/render/reporter.ts +36 -8
  608. package/src/cli/run-options.ts +131 -25
  609. package/src/cli/view.ts +129 -0
  610. package/src/container/driver.ts +213 -0
  611. package/src/container/paths.ts +29 -0
  612. package/src/container/protocol.ts +48 -0
  613. package/src/container/resources.ts +165 -0
  614. package/src/container/worker.ts +107 -0
  615. package/src/core/action-events.ts +59 -0
  616. package/src/core/agent-activity.ts +236 -0
  617. package/src/core/agent-environment.ts +64 -0
  618. package/src/core/agent-events.ts +17 -0
  619. package/src/core/annotation.ts +2 -1
  620. package/src/core/answerer.ts +9 -0
  621. package/src/core/artifact-evidence.ts +40 -5
  622. package/src/core/assertion.ts +8 -2
  623. package/src/core/case-defaults.ts +65 -0
  624. package/src/core/case.ts +79 -8
  625. package/src/core/command-verification.ts +74 -0
  626. package/src/core/driver-execution.ts +84 -0
  627. package/src/core/driver-metrics.ts +51 -0
  628. package/src/core/driver.ts +76 -0
  629. package/src/core/duration.ts +52 -0
  630. package/src/core/environment.ts +22 -0
  631. package/src/core/evaluation-clusters.ts +35 -0
  632. package/src/core/events.ts +13 -2
  633. package/src/core/experiment.ts +71 -25
  634. package/src/core/file-tree.ts +35 -0
  635. package/src/core/global-id.ts +26 -0
  636. package/src/core/harness-catalog.ts +100 -0
  637. package/src/core/harness-catalogs/antigravity.ts +24 -0
  638. package/src/core/harness-catalogs/claude-code.ts +25 -0
  639. package/src/core/harness-catalogs/codex.ts +27 -0
  640. package/src/core/harness-catalogs/copilot.ts +46 -0
  641. package/src/core/harness-catalogs/cursor.ts +13 -0
  642. package/src/core/harness-catalogs/grok-build.ts +19 -0
  643. package/src/core/harness-catalogs/index.ts +31 -0
  644. package/src/core/harness-matrix.ts +316 -0
  645. package/src/core/index.ts +12 -0
  646. package/src/core/lifecycle-fixtures.ts +4 -2
  647. package/src/core/model-cli.ts +60 -26
  648. package/src/core/platform-process.ts +65 -16
  649. package/src/core/reference-defaults.ts +47 -0
  650. package/src/core/run.ts +31 -0
  651. package/src/core/usage.ts +8 -0
  652. package/src/drivers/antigravity/README.md +171 -0
  653. package/src/drivers/antigravity/artifacts.ts +37 -0
  654. package/src/drivers/antigravity/config.ts +92 -0
  655. package/src/drivers/antigravity/events.ts +290 -0
  656. package/src/drivers/antigravity/index.ts +132 -0
  657. package/src/drivers/antigravity/runtime.ts +94 -0
  658. package/src/drivers/claude-code/deferred-process.ts +118 -0
  659. package/src/drivers/claude-code/index.ts +227 -281
  660. package/src/drivers/claude-code/isolation.ts +228 -0
  661. package/src/drivers/claude-code/parse-events.ts +98 -12
  662. package/src/drivers/codex/app-events.ts +126 -16
  663. package/src/drivers/codex/config.ts +59 -8
  664. package/src/drivers/codex/exec-events.ts +258 -0
  665. package/src/drivers/codex/index.ts +146 -312
  666. package/src/drivers/copilot/README.md +60 -0
  667. package/src/drivers/copilot/config.ts +61 -0
  668. package/src/drivers/copilot/index.ts +310 -0
  669. package/src/drivers/cursor/README.md +66 -0
  670. package/src/drivers/cursor/config.ts +31 -0
  671. package/src/drivers/cursor/index.ts +326 -0
  672. package/src/drivers/cursor/interaction.ts +74 -0
  673. package/src/drivers/grok-build/README.md +112 -0
  674. package/src/drivers/grok-build/config.ts +43 -0
  675. package/src/drivers/grok-build/index.ts +331 -0
  676. package/src/drivers/mcp/index.ts +25 -11
  677. package/src/drivers/shared/acp-events.ts +94 -0
  678. package/src/drivers/shared/acp-interaction.ts +27 -0
  679. package/src/drivers/shared/acp-session.ts +40 -0
  680. package/src/drivers/shared/acp-transport.ts +187 -0
  681. package/src/drivers/shared/artifacts.ts +6 -2
  682. package/src/drivers/shared/experiment-behavior.ts +217 -0
  683. package/src/drivers/shared/experiment-policy.ts +196 -0
  684. package/src/drivers/shared/skills.ts +74 -0
  685. package/src/drivers/subprocess/index.ts +55 -12
  686. package/src/index.ts +117 -6
  687. package/src/optimization/reflective.ts +3 -2
  688. package/src/orchestrator/annotation-loader.ts +10 -0
  689. package/src/orchestrator/annotation-store.ts +24 -3
  690. package/src/orchestrator/artifact-origin.ts +50 -0
  691. package/src/orchestrator/campaign-lifecycle.ts +5 -1
  692. package/src/orchestrator/candidates.ts +3 -2
  693. package/src/orchestrator/compare.ts +62 -13
  694. package/src/orchestrator/comparison-identity.ts +2 -0
  695. package/src/orchestrator/config.ts +23 -1
  696. package/src/orchestrator/discover.ts +8 -1
  697. package/src/orchestrator/doctor.ts +211 -65
  698. package/src/orchestrator/driver-capabilities.ts +21 -0
  699. package/src/orchestrator/driver-identity.ts +69 -0
  700. package/src/orchestrator/experiment-context.ts +5 -3
  701. package/src/orchestrator/experiment-corpus.ts +58 -37
  702. package/src/orchestrator/experiment-effects.ts +63 -0
  703. package/src/orchestrator/experiment-evaluation.ts +88 -10
  704. package/src/orchestrator/experiment-identity.ts +57 -48
  705. package/src/orchestrator/experiment-preflight.ts +27 -0
  706. package/src/orchestrator/experiment-report.ts +21 -1
  707. package/src/orchestrator/experiment-runs.ts +11 -4
  708. package/src/orchestrator/experiment-runtime-identity.ts +5 -243
  709. package/src/orchestrator/experiment-selection.ts +178 -18
  710. package/src/orchestrator/experiment.ts +29 -29
  711. package/src/orchestrator/fixture-identity.ts +9 -1
  712. package/src/orchestrator/fs-read.ts +2 -32
  713. package/src/orchestrator/grader-experiment.ts +74 -13
  714. package/src/orchestrator/grading.ts +60 -31
  715. package/src/orchestrator/harness-catalog-drift.ts +132 -0
  716. package/src/orchestrator/harness-registry.ts +12 -0
  717. package/src/orchestrator/index.ts +1 -0
  718. package/src/orchestrator/list-runs.ts +102 -18
  719. package/src/orchestrator/optimization-lifecycle.ts +4 -1
  720. package/src/orchestrator/orchestrator.ts +105 -224
  721. package/src/orchestrator/paired-effects.ts +214 -0
  722. package/src/orchestrator/profile.ts +24 -0
  723. package/src/orchestrator/provenance.ts +23 -3
  724. package/src/orchestrator/rubric-loader.ts +1 -1
  725. package/src/orchestrator/run-dir.ts +8 -1
  726. package/src/orchestrator/run-execution.ts +75 -10
  727. package/src/orchestrator/run-lifecycle.ts +4 -2
  728. package/src/orchestrator/run-workspace.ts +62 -0
  729. package/src/orchestrator/suite-compare.ts +47 -23
  730. package/src/orchestrator/suite-runs.ts +13 -2
  731. package/src/orchestrator/suite-summary.ts +129 -15
  732. package/src/previewer/artifacts.ts +221 -0
  733. package/src/previewer/server.ts +789 -0
  734. package/viewer/app.css +2111 -0
  735. package/viewer/app.js +627 -0
  736. package/viewer/artifact-view.js +48 -0
  737. package/viewer/charts.js +98 -0
  738. package/viewer/detail.js +1266 -0
  739. package/viewer/format.js +129 -0
  740. package/viewer/index.html +151 -0
  741. package/lib/cli/skills.d.ts +0 -38
  742. package/lib/cli/skills.d.ts.map +0 -1
  743. package/lib/cli/skills.js +0 -84
  744. package/lib/cli/skills.js.map +0 -1
  745. package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
  746. package/lib/drivers/shared/secure-copy.js.map +0 -1
  747. package/skills/lux/SKILL.md +0 -89
  748. package/skills/lux/references/cli.md +0 -125
  749. package/skills/lux/references/eval-authoring.md +0 -257
  750. package/src/cli/skills.ts +0 -129
  751. /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
  752. /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
  753. /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
@@ -2,13 +2,15 @@ import type { ChildProcessWithoutNullStreams } from "node:child_process";
2
2
  import { createInterface } from "node:readline";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { z } from "zod";
5
+ import { agentEnvironment, InheritEnvironmentSchema } from "../../core/agent-environment.js";
6
+ import { DurationSchema, durationMs } from "../../core/duration.js";
5
7
  import {
6
8
  type AgentDriver,
7
9
  type Answer,
8
10
  type Artifact,
9
11
  DoneSchema,
10
12
  type DriverEventMap,
11
- type DriverPlugin,
13
+ defineDriver,
12
14
  ErrorEventSchema,
13
15
  type FormatAnswerFn,
14
16
  formatWireAnswer,
@@ -25,6 +27,7 @@ import {
25
27
  TypedEmitter,
26
28
  } from "../../core/index.js";
27
29
  import { walkArtifacts } from "../shared/artifacts.js";
30
+ import { prepareSubprocessExperimentConfig } from "../shared/experiment-policy.js";
28
31
 
29
32
  export const SubprocessDriverConfigSchema = z
30
33
  .object({
@@ -33,9 +36,9 @@ export const SubprocessDriverConfigSchema = z
33
36
  cwd: z.string().optional(),
34
37
  env: z.record(z.string(), z.string()).optional(),
35
38
  /** Inherit the host environment. Experiment mode always forces this off. */
36
- inheritEnv: z.boolean().optional(),
39
+ inheritEnv: z.union([InheritEnvironmentSchema, z.literal(false)]).optional(),
37
40
  protocol: z.enum(["lux-jsonl", "custom"]).default("lux-jsonl"),
38
- idleTimeoutMs: z.number().positive().default(120_000),
41
+ idleTimeout: DurationSchema.default("2 minutes"),
39
42
  maxInterrupts: z.number().positive().default(20),
40
43
  /**
41
44
  * Maximum files inventoried from LUX_ARTIFACTS_DIR. Keep the conservative
@@ -81,6 +84,8 @@ export type SubprocessDriverConfig = z.infer<typeof SubprocessDriverConfigSchema
81
84
  const KILL_GRACE_MS = 5_000;
82
85
  const DEFAULT_MAX_LINE_BYTES = 10_000_000;
83
86
  const MAX_STDERR_TAIL_CHARS = 8_192;
87
+ const MAX_STDERR_CHARS = 65_536;
88
+ const MAX_STDERR_EVENTS = 128;
84
89
  const DEFAULT_MAX_ARTIFACT_FILES = 500;
85
90
  const MAX_FIXTURE_VALUES_BYTES = 64 * 1024;
86
91
  const ARTIFACT_SNAPSHOT_MODULE = fileURLToPath(
@@ -145,9 +150,11 @@ class SubprocessDriverImpl implements AgentDriver {
145
150
  throw new Error(`subprocess fixture values exceed ${MAX_FIXTURE_VALUES_BYTES} bytes`);
146
151
  }
147
152
  const managed = spawnManagedProcess(this.config.command, this.config.args ?? [], {
148
- cwd: this.config.cwd ?? ctx.runDir,
153
+ cwd: this.config.cwd ?? ctx.artifactsDir,
149
154
  env: {
150
- ...(this.config.inheritEnv === false ? {} : process.env),
155
+ ...(this.config.inheritEnv === false
156
+ ? {}
157
+ : agentEnvironment(process.env, this.config.inheritEnv)),
151
158
  ...this.config.env,
152
159
  ...(ctx.caseId ? { LUX_CASE_ID: ctx.caseId } : {}),
153
160
  LUX_RUN_DIR: ctx.runDir,
@@ -174,15 +181,38 @@ class SubprocessDriverImpl implements AgentDriver {
174
181
  // boundary from being mangled.
175
182
  child.stderr.setEncoding("utf8");
176
183
  let stderrTail = "";
184
+ let stderrChars = 0;
185
+ let stderrEvents = 0;
186
+ let stderrTruncated = false;
187
+ const recordStderr = (line: string): void => {
188
+ if (stderrTruncated || this.terminalSent) return;
189
+ const text = line.slice(0, Math.min(MAX_STDERR_TAIL_CHARS, MAX_STDERR_CHARS - stderrChars));
190
+ stderrChars += text.length;
191
+ stderrEvents++;
192
+ stderrTruncated =
193
+ text.length < line.length ||
194
+ stderrChars >= MAX_STDERR_CHARS ||
195
+ stderrEvents >= MAX_STDERR_EVENTS;
196
+ this.emitInOrder("progress", {
197
+ id: `subprocess-stderr-${stderrEvents}`,
198
+ kind: "driver-stderr",
199
+ payload: { text, truncated: stderrTruncated },
200
+ ts: Date.now(),
201
+ });
202
+ };
177
203
  child.stderr.on("data", (chunk: string) => {
178
204
  const lines = (stderrTail + chunk).split("\n");
179
205
  // Cap the retained partial line so unterminated stderr can't grow
180
206
  // without bound.
181
- stderrTail = (lines.pop() ?? "").slice(0, MAX_STDERR_TAIL_CHARS);
182
- for (const line of lines) process.stderr.write(`[subprocess] ${line}\n`);
207
+ stderrTail = lines.pop() ?? "";
208
+ for (const line of lines) recordStderr(line);
209
+ if (stderrTail.length > MAX_STDERR_TAIL_CHARS) {
210
+ recordStderr(stderrTail);
211
+ stderrTail = "";
212
+ }
183
213
  });
184
214
  child.stderr.on("close", () => {
185
- if (stderrTail) process.stderr.write(`[subprocess] ${stderrTail}\n`);
215
+ if (stderrTail) recordStderr(stderrTail);
186
216
  stderrTail = "";
187
217
  });
188
218
 
@@ -459,7 +489,7 @@ class SubprocessDriverImpl implements AgentDriver {
459
489
  private bumpIdleTimer(): void {
460
490
  this.clearIdleTimer();
461
491
  this.idleTimer = setTimeout(() => {
462
- const reason = `no event for ${this.config.idleTimeoutMs}ms`;
492
+ const reason = `no event for ${durationMs(this.config.idleTimeout)}ms`;
463
493
  // Idle before ready means start() is still pending; reject it (and kill
464
494
  // the child) or the orchestrator waits forever.
465
495
  const preReady = this.readyRejected !== null;
@@ -471,7 +501,7 @@ class SubprocessDriverImpl implements AgentDriver {
471
501
  // Kill immediately: the run is lost and the child would keep doing
472
502
  // billable work until close().
473
503
  this.terminate();
474
- }, this.config.idleTimeoutMs);
504
+ }, durationMs(this.config.idleTimeout));
475
505
  }
476
506
 
477
507
  private clearIdleTimer(): void {
@@ -489,8 +519,21 @@ class SubprocessDriverImpl implements AgentDriver {
489
519
  }
490
520
  }
491
521
 
492
- export const subprocessDriver: DriverPlugin<SubprocessDriverConfig> = {
522
+ export const subprocessDriver = defineDriver({
493
523
  name: "subprocess",
494
524
  configSchema: SubprocessDriverConfigSchema,
525
+ runtime: (config) => ({
526
+ commands: [config.command],
527
+ capabilities: {
528
+ interactive: true,
529
+ artifacts: true,
530
+ isolation: false,
531
+ },
532
+ }),
533
+ experiment: {
534
+ version: "1",
535
+ prepare: prepareSubprocessExperimentConfig,
536
+ identity: () => null,
537
+ },
495
538
  create: (config) => new SubprocessDriverImpl(config),
496
- };
539
+ });
package/src/index.ts CHANGED
@@ -1,9 +1,9 @@
1
+ export { DurationSchema, durationMs } from "./core/duration.js";
1
2
  // Public surface of @prismatic-io/lux. The package root exposes authoring
2
3
  // contracts, extension points, built-ins, and supported programmatic
3
4
  // lifecycles. Explicit exports keep implementation and test helpers private.
4
5
 
5
6
  export { z } from "zod";
6
-
7
7
  // Bundled answerers and drivers. Test injection and protocol-normalization
8
8
  // helpers stay in their implementation modules.
9
9
  export {
@@ -87,6 +87,8 @@ export {
87
87
  registerCoreAssertions,
88
88
  runSucceededAssertion,
89
89
  subagentToolCalls,
90
+ type TimeToFirstActionUnderConfig,
91
+ TimeToFirstActionUnderConfigSchema,
90
92
  type TokensUnderConfig,
91
93
  TokensUnderConfigSchema,
92
94
  type ToolCall,
@@ -104,6 +106,7 @@ export {
104
106
  ToolResultIsErrorConfigSchema,
105
107
  type ToolResultJsonPointerEqualsConfig,
106
108
  ToolResultJsonPointerEqualsConfigSchema,
109
+ timeToFirstActionUnderAssertion,
107
110
  tokensUnderAssertion,
108
111
  toolCallCountAssertion,
109
112
  toolCalledAssertion,
@@ -136,11 +139,34 @@ export {
136
139
  type RubricConfig,
137
140
  RubricConfigSchema,
138
141
  type RubricEvidence,
142
+ type RubricEvidenceInput,
139
143
  RubricEvidenceSchema,
140
144
  RubricModelAccountingDetailSchema,
141
145
  rubricAssertion,
142
146
  } from "./assertions/rubric/index.js";
143
147
  // Authoring and extension contracts.
148
+ export {
149
+ type ActionCategory,
150
+ ActionCategorySchema,
151
+ type ActionProgressPayload,
152
+ ActionProgressPayloadSchema,
153
+ type ActionTiming,
154
+ ActionTimingSchema,
155
+ actionTiming,
156
+ } from "./core/action-events.js";
157
+ export {
158
+ type AgentActivity,
159
+ AgentActivitySchema,
160
+ summarizeAgentActivity,
161
+ } from "./core/agent-activity.js";
162
+ export {
163
+ AGENT_COMPLETED_KIND,
164
+ AGENT_SPAWN_KIND,
165
+ type AgentCompletedPayload,
166
+ AgentCompletedPayloadSchema,
167
+ type AgentSpawnPayload,
168
+ AgentSpawnPayloadSchema,
169
+ } from "./core/agent-events.js";
144
170
  export {
145
171
  defineGraderAnnotations,
146
172
  type GraderAnnotation,
@@ -158,11 +184,14 @@ export {
158
184
  AnswererModelCallAccountingSchema,
159
185
  type AnswererPlugin,
160
186
  type AnswerHistoryEntry,
187
+ answererRef,
188
+ defineAnswerer,
161
189
  } from "./core/answerer.js";
162
190
  export {
163
191
  inspectRunArtifact,
164
192
  type ReadRunArtifactTextOptions,
165
193
  type RunArtifactInspection,
194
+ type RunArtifactIssueReason,
166
195
  readRunArtifactText,
167
196
  } from "./core/artifact-evidence.js";
168
197
  export {
@@ -201,12 +230,14 @@ export {
201
230
  type EvalCase,
202
231
  type EvalCaseAuthoringOptions,
203
232
  type EvalCaseDefinition,
233
+ type EvalCaseInput,
204
234
  EvalCaseSchema,
205
235
  type FixturesRef,
206
236
  FixturesRefSchema,
207
237
  type PersistedCase,
208
238
  PersistedCaseSchema,
209
239
  } from "./core/case.js";
240
+ export type { AssertionDefaults, EvalCaseDefaults } from "./core/case-defaults.js";
210
241
  export {
211
242
  CONVERSATION_TURN_REQUEST,
212
243
  type ConversationTurnRequest,
@@ -221,14 +252,44 @@ export {
221
252
  type AgentDriver,
222
253
  type Artifact,
223
254
  ArtifactSchema,
255
+ type DriverCapability,
256
+ DriverCapabilitySchema,
224
257
  type DriverEventMap,
258
+ type DriverExperiment,
225
259
  type DriverPlugin,
260
+ type DriverRuntime,
261
+ defineDriver,
262
+ driverRef,
263
+ type HarnessSelection,
226
264
  type ResolvedFixtures,
227
265
  ResolvedFixturesSchema,
228
266
  type StartContext,
267
+ selectModelAndReasoningEffort,
229
268
  } from "./core/driver.js";
269
+ export {
270
+ type ContainerExecution,
271
+ ContainerExecutionSchema,
272
+ type DriverExecution,
273
+ DriverExecutionSchema,
274
+ } from "./core/driver-execution.js";
275
+ export {
276
+ type DriverMetric,
277
+ type DriverMetricDescriptor,
278
+ DriverMetricDescriptorSchema,
279
+ DriverMetricSchema,
280
+ type DriverMetrics,
281
+ DriverMetricsSchema,
282
+ type DriverMetricUnit,
283
+ DriverMetricUnitSchema,
284
+ normalizeDriverMetrics,
285
+ type ReportedDriverMetrics,
286
+ ReportedDriverMetricsSchema,
287
+ } from "./core/driver-metrics.js";
230
288
  export { type EventHandler, TypedEmitter } from "./core/emitter.js";
289
+ export { type EnvironmentDeclaration, EnvironmentDeclarationSchema } from "./core/environment.js";
231
290
  export {
291
+ type AgentAttribution,
292
+ AgentAttributionSchema,
232
293
  type Answer,
233
294
  AnswerSchema,
234
295
  ApproveAnswerSchema,
@@ -292,6 +353,40 @@ export {
292
353
  type Optimizer,
293
354
  type OptimizerInput,
294
355
  } from "./core/experiment.js";
356
+ export { type GlobalIdParts, tryParseGlobalId } from "./core/global-id.js";
357
+ export {
358
+ type CatalogModels,
359
+ catalogEfforts,
360
+ defaultCatalogEffort,
361
+ defineHarnessCatalog,
362
+ HARNESS_EFFORTS,
363
+ type HarnessCatalog,
364
+ type ReasoningEffort,
365
+ ReasoningEffortSchema,
366
+ } from "./core/harness-catalog.js";
367
+ export {
368
+ antigravityCatalog,
369
+ type BuiltInHarnessDriver,
370
+ builtInHarnessCatalogs,
371
+ claudeCodeCatalog,
372
+ codexCatalog,
373
+ copilotCatalog,
374
+ cursorCatalog,
375
+ grokBuildCatalog,
376
+ harnessCatalogFor,
377
+ } from "./core/harness-catalogs/index.js";
378
+ export {
379
+ type BuiltInHarnessMatrixEntry,
380
+ BuiltInHarnessMatrixEntrySchema,
381
+ type CustomHarnessMatrixEntry,
382
+ expandHarnessMatrix,
383
+ type HarnessMatrix,
384
+ type HarnessMatrixEntry,
385
+ HarnessMatrixEntrySchema,
386
+ HarnessMatrixSchema,
387
+ type HarnessPermutation,
388
+ permutationId,
389
+ } from "./core/harness-matrix.js";
295
390
  export {
296
391
  defineFixtures,
297
392
  type LifecycleFixture,
@@ -327,14 +422,11 @@ export {
327
422
  export {
328
423
  DEFAULT_CLAUDE_MODEL,
329
424
  DEFAULT_CODEX_MODEL,
330
- DEFAULT_CODEX_REASONING_EFFORT,
331
425
  defaultHarnessModel,
332
426
  type HarnessModelConfig,
333
427
  HarnessModelConfigSchema,
334
428
  type ModelCliProvider,
335
429
  ModelCliProviderSchema,
336
- type ReasoningEffort,
337
- ReasoningEffortSchema,
338
430
  } from "./core/model-cli.js";
339
431
  export {
340
432
  type AssertionProgress,
@@ -420,6 +512,11 @@ export {
420
512
  type WireEvent,
421
513
  WireEventSchema,
422
514
  } from "./core/wire.js";
515
+ export {
516
+ type AntigravityDriverConfig,
517
+ AntigravityDriverConfigSchema,
518
+ antigravityDriver,
519
+ } from "./drivers/antigravity/index.js";
423
520
  export {
424
521
  type ClaudeCodeDriverConfig,
425
522
  ClaudeCodeDriverConfigSchema,
@@ -430,6 +527,22 @@ export {
430
527
  CodexDriverConfigSchema,
431
528
  codexDriver,
432
529
  } from "./drivers/codex/index.js";
530
+ export {
531
+ type CopilotDriverConfig,
532
+ CopilotDriverConfigSchema,
533
+ copilotDriver,
534
+ } from "./drivers/copilot/index.js";
535
+ export {
536
+ type CursorDriverConfig,
537
+ CursorDriverConfigSchema,
538
+ cursorDriver,
539
+ } from "./drivers/cursor/index.js";
540
+ export {
541
+ buildGrokBuildArgs,
542
+ type GrokBuildDriverConfig,
543
+ GrokBuildDriverConfigSchema,
544
+ grokBuildDriver,
545
+ } from "./drivers/grok-build/index.js";
433
546
  export {
434
547
  type McpProbeDriverConfig,
435
548
  McpProbeDriverConfigSchema,
@@ -441,13 +554,11 @@ export {
441
554
  SubprocessDriverConfigSchema,
442
555
  subprocessDriver,
443
556
  } from "./drivers/subprocess/index.js";
444
-
445
557
  export {
446
558
  createReflectiveOptimizer,
447
559
  type ReflectiveOptimizerConfig,
448
560
  ReflectiveOptimizerConfigSchema,
449
561
  } from "./optimization/reflective.js";
450
-
451
562
  // Supported programmatic orchestration.
452
563
  export {
453
564
  applyCandidate,
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { DurationSchema, durationMs } from "../core/duration.js";
2
3
  import {
3
4
  type CandidateEvaluation,
4
5
  type CandidateProposal,
@@ -16,7 +17,7 @@ export const ReflectiveOptimizerConfigSchema = z
16
17
  model: z.string().optional(),
17
18
  command: z.string().optional(),
18
19
  reasoningEffort: ReasoningEffortSchema.optional(),
19
- timeoutMs: z.number().int().positive().default(180_000),
20
+ timeout: DurationSchema.default("3 minutes"),
20
21
  maxComponentChars: z.number().int().positive().default(80_000),
21
22
  maxAlternativeChars: z.number().int().positive().default(40_000),
22
23
  maxFeedbackChars: z.number().int().positive().default(50_000),
@@ -273,7 +274,7 @@ const reflectiveOptimizer = (config: ReflectiveOptimizerConfig): Optimizer => ({
273
274
  model,
274
275
  command: config.command,
275
276
  reasoningEffort: config.reasoningEffort,
276
- timeoutMs: config.timeoutMs,
277
+ timeoutMs: durationMs(config.timeout),
277
278
  system: systemPrompt(input.campaign.evaluation.kind),
278
279
  signal: input.abortSignal,
279
280
  prompt: builtPrompt.prompt,
@@ -2,6 +2,7 @@ import { readFile } from "node:fs/promises";
2
2
  import { dirname, extname, resolve, sep } from "node:path";
3
3
  import { pathToFileURL } from "node:url";
4
4
  import { z } from "zod";
5
+ import { assertDisjointClusters } from "../core/evaluation-clusters.js";
5
6
  import {
6
7
  type ExperimentSelector,
7
8
  formatZodIssues,
@@ -73,6 +74,15 @@ export const selectGraderAnnotations = (
73
74
  export const assertDisjointAnnotationSplits = (
74
75
  splits: Array<{ name: string; annotations: readonly GraderAnnotation[] }>,
75
76
  ): void => {
77
+ assertDisjointClusters(
78
+ splits.map((split) => ({
79
+ name: split.name,
80
+ items: split.annotations.map((annotation) => ({
81
+ id: annotation.id,
82
+ cluster: annotation.meta?.cluster,
83
+ })),
84
+ })),
85
+ );
76
86
  const idOwners = new Map<string, string>();
77
87
  const runOwners = new Map<string, string>();
78
88
  for (const split of splits) {
@@ -82,11 +82,10 @@ const acquireAnnotationLock = async (path: string): Promise<() => Promise<void>>
82
82
  }
83
83
  };
84
84
 
85
- export const upsertGraderAnnotation = async (
86
- filePath: string,
85
+ const updateAnnotation = async (
86
+ path: string,
87
87
  annotation: GraderAnnotation,
88
88
  ): Promise<GraderAnnotationDataset> => {
89
- const path = resolve(filePath);
90
89
  await mkdir(dirname(path), { recursive: true });
91
90
  const release = await acquireAnnotationLock(path);
92
91
  const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;
@@ -114,3 +113,25 @@ export const upsertGraderAnnotation = async (
114
113
  await release();
115
114
  }
116
115
  };
116
+
117
+ // Serialize local writers before acquiring the cross-process lock. Otherwise
118
+ // a burst of updates spends its lock deadline contending with its own process.
119
+ const pendingUpdates = new Map<string, Promise<void>>();
120
+
121
+ export const upsertGraderAnnotation = (
122
+ filePath: string,
123
+ annotation: GraderAnnotation,
124
+ ): Promise<GraderAnnotationDataset> => {
125
+ const path = resolve(filePath);
126
+ const previous = pendingUpdates.get(path) ?? Promise.resolve();
127
+ const update = previous.then(() => updateAnnotation(path, annotation));
128
+ const settled = update.then(
129
+ () => undefined,
130
+ () => undefined,
131
+ );
132
+ pendingUpdates.set(path, settled);
133
+ void settled.then(() => {
134
+ if (pendingUpdates.get(path) === settled) pendingUpdates.delete(path);
135
+ });
136
+ return update;
137
+ };
@@ -0,0 +1,50 @@
1
+ import { isAbsolute, relative, resolve, sep } from "node:path";
2
+ import {
3
+ type Artifact,
4
+ contentHash,
5
+ inspectRunArtifact,
6
+ readRunArtifactBytes,
7
+ } from "../core/index.js";
8
+
9
+ const MAX_ORIGIN_BYTES = 10 * 1024 * 1024;
10
+
11
+ export const identifyArtifactOrigins = async (
12
+ runDir: string,
13
+ artifacts: readonly Artifact[],
14
+ fixtureHashes: ReadonlyMap<string, string>,
15
+ ): Promise<Artifact[]> => {
16
+ const run = { runDir, artifacts };
17
+ const result: Artifact[] = [];
18
+ for (const artifact of artifacts) {
19
+ const { origin: _claimedOrigin, ...captured } = artifact;
20
+ const inspected = await inspectRunArtifact(run, artifact.path);
21
+ if (!inspected.stats?.isFile()) {
22
+ result.push(captured);
23
+ continue;
24
+ }
25
+ const path = relative(resolve(runDir, "artifacts"), inspected.target);
26
+ const expected =
27
+ !isAbsolute(path) && path !== ".." && !path.startsWith(`..${sep}`)
28
+ ? fixtureHashes.get(path)
29
+ : undefined;
30
+ if (expected === undefined) {
31
+ result.push({ ...captured, origin: "generated" });
32
+ continue;
33
+ }
34
+ if (inspected.stats.size > MAX_ORIGIN_BYTES) {
35
+ result.push(captured);
36
+ continue;
37
+ }
38
+ try {
39
+ const bytes = await readRunArtifactBytes(run, artifact.path, { maxBytes: MAX_ORIGIN_BYTES });
40
+ result.push({
41
+ ...captured,
42
+ origin: contentHash(bytes) === expected ? "fixture" : "modified",
43
+ });
44
+ } catch {
45
+ // Advisory provenance must not discard the rest of a safely archived index.
46
+ result.push(captured);
47
+ }
48
+ }
49
+ return result;
50
+ };
@@ -16,6 +16,7 @@ type CampaignLifecycleContext = {
16
16
  work: unknown;
17
17
  result: unknown;
18
18
  error: unknown;
19
+ failed: boolean;
19
20
  terminalStatus: "passed" | "failed" | "aborted" | undefined;
20
21
  };
21
22
  type CampaignLifecycleOutcome =
@@ -57,6 +58,7 @@ const campaignLifecycleMachine = setup({
57
58
  "output" in event ? context.effects.resultStatus(event.output) : "failed",
58
59
  }),
59
60
  captureError: assign({
61
+ failed: true,
60
62
  error: ({ event }) =>
61
63
  "error" in event ? event.error : new Error("campaign lifecycle failed"),
62
64
  terminalStatus: ({ context, event }) =>
@@ -65,6 +67,7 @@ const campaignLifecycleMachine = setup({
65
67
  ),
66
68
  }),
67
69
  captureReleaseError: assign({
70
+ failed: true,
68
71
  error: ({ event }) => ("error" in event ? event.error : new Error("campaign release failed")),
69
72
  terminalStatus: "failed",
70
73
  }),
@@ -76,6 +79,7 @@ const campaignLifecycleMachine = setup({
76
79
  work: undefined,
77
80
  result: undefined,
78
81
  error: undefined,
82
+ failed: false,
79
83
  terminalStatus: undefined,
80
84
  }),
81
85
  initial: "preparing",
@@ -145,7 +149,7 @@ const campaignLifecycleMachine = setup({
145
149
  failed: { type: "final" },
146
150
  },
147
151
  output: ({ context }) => {
148
- if (context.error !== undefined) {
152
+ if (context.failed) {
149
153
  return {
150
154
  status: context.terminalStatus === "aborted" ? "aborted" : "failed",
151
155
  error: context.error,
@@ -5,6 +5,7 @@ import { basename, dirname, isAbsolute, join, normalize, relative, resolve, sep
5
5
  import { temporaryDirectory } from "tempy";
6
6
  import { glob } from "tinyglobby";
7
7
  import { z } from "zod";
8
+ import { durationMs } from "../core/duration.js";
8
9
  import { exec } from "../core/exec.js";
9
10
  import {
10
11
  type Candidate,
@@ -226,7 +227,7 @@ export const validateCandidate = async (
226
227
  try {
227
228
  return await exec(validation.command, validation.args, {
228
229
  cwd: materializedRoot,
229
- timeoutMs: validation.timeoutMs,
230
+ timeoutMs: durationMs(validation.timeout),
230
231
  env,
231
232
  ...(signal ? { signal } : {}),
232
233
  });
@@ -236,7 +237,7 @@ export const validateCandidate = async (
236
237
  })().finally(() => rm(validationHome, { recursive: true, force: true }));
237
238
  if (result.timedOut || result.exitCode !== 0) {
238
239
  const reason = result.timedOut
239
- ? `timed out after ${validation.timeoutMs}ms`
240
+ ? `timed out after ${durationMs(validation.timeout)}ms`
240
241
  : `exited ${result.exitCode}`;
241
242
  throw new Error(
242
243
  `candidate validation '${validation.command}' ${reason}: ${result.stderr.slice(0, 500)}`,