@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
@@ -81,11 +81,11 @@ const executableNames = (
81
81
  return [command, ...extensions.map((extension) => `${command}${extension.toLowerCase()}`)];
82
82
  };
83
83
 
84
- const resolveExecutable = (
84
+ export const resolveExecutable = (
85
85
  command: string,
86
- environment: NodeJS.ProcessEnv,
87
- platform: SupportedPlatform,
88
- cwd: string,
86
+ environment: NodeJS.ProcessEnv = process.env,
87
+ platform: SupportedPlatform = currentPlatform(),
88
+ cwd: string = process.cwd(),
89
89
  ): string | undefined => {
90
90
  if (isAbsolute(command) || command.includes("/") || command.includes("\\")) {
91
91
  const candidate = resolvePath(cwd, command);
@@ -175,10 +175,29 @@ const signalPosixGroup = (child: ChildProcess, signal: NodeJS.Signals): void =>
175
175
  }
176
176
  };
177
177
 
178
+ const windowsAncestorPids = (
179
+ processes: readonly IProcessInfo[],
180
+ owner: { pid: number; ppid: number },
181
+ ): Set<number> => {
182
+ // Windows retains historical parent PIDs; reuse can make unrelated live
183
+ // processes appear beneath a new child. Never reap the caller's own ancestry.
184
+ const protectedPids = new Set([owner.pid]);
185
+ const byPid = new Map(processes.map((entry) => [entry.pid, entry]));
186
+ let ancestorPid = owner.ppid;
187
+ while (ancestorPid > 0 && !protectedPids.has(ancestorPid)) {
188
+ protectedPids.add(ancestorPid);
189
+ ancestorPid = byPid.get(ancestorPid)?.ppid ?? 0;
190
+ }
191
+ return protectedPids;
192
+ };
193
+
178
194
  export const windowsDescendants = (
179
195
  rootPid: number,
180
196
  processes: readonly IProcessInfo[],
197
+ owner: { pid: number; ppid: number } = process,
181
198
  ): IProcessInfo[] => {
199
+ const protectedPids = windowsAncestorPids(processes, owner);
200
+ if (!validWindowsPid(rootPid) || protectedPids.has(rootPid)) return [];
182
201
  const descendants: IProcessInfo[] = [];
183
202
  const parentPids = new Set([rootPid]);
184
203
  let found = true;
@@ -186,6 +205,8 @@ export const windowsDescendants = (
186
205
  found = false;
187
206
  for (const candidate of processes) {
188
207
  if (
208
+ validWindowsPid(candidate.pid) &&
209
+ !protectedPids.has(candidate.pid) &&
189
210
  !parentPids.has(candidate.pid) &&
190
211
  parentPids.has(candidate.ppid) &&
191
212
  !descendants.some((descendant) => descendant.pid === candidate.pid)
@@ -200,17 +221,33 @@ export const windowsDescendants = (
200
221
  return root ? [root, ...descendants] : descendants;
201
222
  };
202
223
 
203
- const windowsProcessList = async (pid: number): Promise<IProcessInfo[]> => {
224
+ const windowsProcessList = async (): Promise<IProcessInfo[]> => {
204
225
  const { getAllProcesses } = await import("@vscode/windows-process-tree");
205
226
  return new Promise((resolve) => {
206
- getAllProcesses((processes) => resolve(windowsDescendants(pid, processes)));
227
+ getAllProcesses(resolve);
207
228
  });
208
229
  };
209
230
 
210
- const forceWindowsTree = async (pid: number): Promise<void> => {
231
+ export const forceWindowsTree = async (
232
+ pid: number,
233
+ discover: (pid: number) => Promise<IProcessInfo[]> = windowsProcessList,
234
+ signal: (pid: number) => void = signalWindowsProcess,
235
+ discoveryTimeoutMs = 2_000,
236
+ stillOwned: () => boolean = () => true,
237
+ ): Promise<void> => {
238
+ if (!stillOwned() || !safeWindowsSignalTarget(pid)) return;
211
239
  let processes: IProcessInfo[] = [];
240
+ let timer: NodeJS.Timeout | undefined;
212
241
  try {
213
- processes = await windowsProcessList(pid);
242
+ processes = await Promise.race([
243
+ Promise.resolve().then(() => discover(pid)),
244
+ new Promise<never>((_, reject) => {
245
+ timer = setTimeout(
246
+ () => reject(new Error(`process discovery timed out after ${discoveryTimeoutMs}ms`)),
247
+ discoveryTimeoutMs,
248
+ );
249
+ }),
250
+ ]);
214
251
  } catch (error) {
215
252
  process.emitWarning(
216
253
  `Windows descendant discovery failed; only the direct child can be terminated: ${
@@ -218,12 +255,25 @@ const forceWindowsTree = async (pid: number): Promise<void> => {
218
255
  }`,
219
256
  { code: "LUX_WINDOWS_PROCESS_DISCOVERY" },
220
257
  );
258
+ } finally {
259
+ if (timer) clearTimeout(timer);
260
+ }
261
+ // Discovery is asynchronous; an exited leader can already have a recycled PID.
262
+ if (!stillOwned() || windowsAncestorPids(processes, process).has(pid)) return;
263
+ const descendants = windowsDescendants(pid, processes);
264
+ for (const process of descendants.toReversed()) {
265
+ if (safeWindowsSignalTarget(process.pid)) signal(process.pid);
221
266
  }
222
- for (const process of processes.toReversed()) signalWindowsProcess(process.pid);
223
- if (!processes.some((process) => process.pid === pid)) signalWindowsProcess(pid);
267
+ if (!descendants.some((process) => process.pid === pid)) signal(pid);
224
268
  };
225
269
 
270
+ const validWindowsPid = (pid: number): boolean => Number.isSafeInteger(pid) && pid > 0;
271
+
272
+ const safeWindowsSignalTarget = (pid: number): boolean =>
273
+ validWindowsPid(pid) && pid !== process.pid && pid !== process.ppid;
274
+
226
275
  const signalWindowsProcess = (pid: number): void => {
276
+ if (!safeWindowsSignalTarget(pid)) return;
227
277
  try {
228
278
  process.kill(pid, "SIGKILL");
229
279
  } catch {
@@ -252,19 +302,18 @@ export const posixProcessPlatform = (
252
302
  });
253
303
 
254
304
  export const windowsProcessPlatform = (
255
- forceTree: (pid: number) => Promise<void> = forceWindowsTree,
305
+ forceTree: (pid: number, stillOwned: () => boolean) => Promise<void> = (pid, stillOwned) =>
306
+ forceWindowsTree(pid, undefined, undefined, undefined, stillOwned),
256
307
  ): ProcessPlatform => ({
257
308
  detached: false,
258
309
  processTreeFor: (child) => {
259
310
  const pid = child.pid;
260
311
  let forced: Promise<void> | undefined;
312
+ const stillOwned = (): boolean => child.exitCode == null && child.signalCode == null;
261
313
  const forceOnce = (): Promise<void> => {
262
314
  if (forced) return forced;
263
- const leaderHasExited =
264
- (child.exitCode !== null && child.exitCode !== undefined) ||
265
- (child.signalCode !== null && child.signalCode !== undefined);
266
- if (pid === undefined || leaderHasExited) forced = Promise.resolve();
267
- else forced = forceTree(pid);
315
+ if (pid === undefined || !stillOwned()) forced = Promise.resolve();
316
+ else forced = forceTree(pid, stillOwned);
268
317
  return forced;
269
318
  };
270
319
  return {
@@ -0,0 +1,47 @@
1
+ import type { AnswererRef, DriverRef } from "./case.js";
2
+ import { mergePluginConfig } from "./harness-matrix.js";
3
+
4
+ export const withDriverDefaults = (
5
+ reference: DriverRef | undefined,
6
+ defaults: Record<string, unknown> | undefined,
7
+ ): DriverRef | undefined => {
8
+ if (!reference || !defaults) return reference;
9
+ const selected = typeof reference === "string" ? { name: reference } : reference;
10
+ return { ...selected, config: mergePluginConfig(defaults, selected.config) };
11
+ };
12
+
13
+ export const mergeDriverReference = (
14
+ base: DriverRef | undefined,
15
+ local: DriverRef | undefined,
16
+ ): DriverRef | undefined => {
17
+ if (local === undefined) return base;
18
+ if (base === undefined) return local;
19
+ const first = typeof base === "string" ? { name: base } : base;
20
+ const second = typeof local === "string" ? { name: local } : local;
21
+ if (first.name !== second.name) return local;
22
+ return {
23
+ name: second.name,
24
+ config: mergePluginConfig(first.config, second.config),
25
+ ...((second.execution ?? first.execution)
26
+ ? { execution: second.execution ?? first.execution }
27
+ : {}),
28
+ };
29
+ };
30
+
31
+ export const mergeAnswererReference = (
32
+ base: AnswererRef | undefined,
33
+ local: AnswererRef | undefined,
34
+ ): AnswererRef | undefined => {
35
+ const merged = mergeDriverReference(base, local);
36
+ if (typeof merged !== "object" || merged.name !== "persona") return merged;
37
+ const first = typeof base === "object" ? base.config : undefined;
38
+ const second = typeof local === "object" ? local.config : undefined;
39
+ if (!first || !second || typeof first !== "object" || typeof second !== "object") return merged;
40
+ if (!("provider" in second) || ("provider" in first && second.provider === first.provider))
41
+ return merged;
42
+ const config = { ...(merged.config as Record<string, unknown>) };
43
+ for (const key of ["model", "command", "reasoningEffort"]) {
44
+ if (!(key in second)) delete config[key];
45
+ }
46
+ return { name: merged.name, config };
47
+ };
package/src/core/run.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  import { z } from "zod";
2
+ import { ActionTimingSchema } from "./action-events.js";
3
+ import { AgentActivitySchema } from "./agent-activity.js";
2
4
  import { EvalCaseSchema } from "./case.js";
3
5
  import { ArtifactSchema } from "./driver.js";
6
+ import { DriverMetricsSchema } from "./driver-metrics.js";
7
+ import { EnvironmentDeclarationSchema } from "./environment.js";
4
8
  import { ErrorEventReasonSchema, ReadyStateSchema, RunEventSchema } from "./events.js";
5
9
  import { ToolOutcomeSummarySchema } from "./tool-events.js";
6
10
  import { RunUsageSchema } from "./usage.js";
@@ -24,7 +28,24 @@ export const RunProvenanceSchema = z.object({
24
28
  arch: z.string(),
25
29
  node: z.string(),
26
30
  bun: z.exactOptional(z.string()),
31
+ host: z.exactOptional(
32
+ z.object({
33
+ osRelease: z.string(),
34
+ cpuModels: z.array(z.string()),
35
+ logicalCpuCount: z.number().int().nonnegative(),
36
+ availableParallelism: z.number().int().positive(),
37
+ totalMemoryBytes: z.number().int().nonnegative(),
38
+ }),
39
+ ),
27
40
  }),
41
+ environment: z.exactOptional(
42
+ z.object({
43
+ /** Declared by the author, not independently verified or enforced by Lux. */
44
+ declared: z.exactOptional(EnvironmentDeclarationSchema),
45
+ /** Effective Lux worker limit for this run's suite; direct runs use one. */
46
+ concurrency: z.number().int().positive(),
47
+ }),
48
+ ),
28
49
  source: z.exactOptional(
29
50
  z.object({
30
51
  /** Case path relative to its repository root, when one was found. */
@@ -49,6 +70,8 @@ export const RunProvenanceSchema = z.object({
49
70
  fixturesHash: z.exactOptional(z.string()),
50
71
  subjectHash: z.exactOptional(z.string()),
51
72
  profileId: z.exactOptional(z.string()),
73
+ /** Harness matrix permutation (`driver:model:effort`) this run was filed under. */
74
+ permutationId: z.exactOptional(z.string()),
52
75
  experimentId: z.exactOptional(z.string()),
53
76
  variantId: z.exactOptional(z.string()),
54
77
  candidateId: z.exactOptional(z.string()),
@@ -103,6 +126,8 @@ export const RunMetadataSchema = z.object({
103
126
  * eval overhead.
104
127
  */
105
128
  usage: RunUsageSchema,
129
+ /** Absent in older records; zero alone did not establish availability. */
130
+ agentUsageAvailability: z.exactOptional(z.enum(["reported", "unavailable"])),
106
131
  modelAccounting: z.exactOptional(
107
132
  z.object({
108
133
  agentCalls: z.number().int().nonnegative(),
@@ -112,6 +137,8 @@ export const RunMetadataSchema = z.object({
112
137
  }),
113
138
  ),
114
139
  cost: z.exactOptional(z.object({ usd: z.exactOptional(z.number()) })),
140
+ /** Driver-defined scalar measurements with display and optimization semantics. */
141
+ driverMetrics: z.exactOptional(DriverMetricsSchema),
115
142
  interruptCounts: z.object({ ask: z.number(), approve: z.number(), custom: z.number() }),
116
143
  /** Legacy raw count of progress events whose kind is `tool-call`. */
117
144
  toolCallCount: z.exactOptional(z.number()),
@@ -124,6 +151,10 @@ export const RunMetadataSchema = z.object({
124
151
  ),
125
152
  /** Wall-clock per phase, derived from the lifecycle event stream. */
126
153
  phaseDurationMs: z.exactOptional(PhaseDurationsSchema),
154
+ /** Driver-reported semantic action latency, measured from `start-driver`. */
155
+ actionTiming: z.exactOptional(ActionTimingSchema),
156
+ /** Per-agent lifecycle and activity derived from the attributed event stream. */
157
+ agentActivity: z.exactOptional(z.array(AgentActivitySchema)),
127
158
  /**
128
159
  * Harness/infrastructure failure that invalidates this run as candidate
129
160
  * evidence. A driver-reported subject failure intentionally leaves this
package/src/core/usage.ts CHANGED
@@ -121,3 +121,11 @@ export const parseAgentUsage = (raw: unknown): TokenUsage | null => {
121
121
  if (!AGENT_USAGE_KEYS.some((key) => key in raw)) return null;
122
122
  return AgentUsageSchema.safeParse(raw).data ?? null;
123
123
  };
124
+
125
+ /** Legacy nonzero counts remain usable; legacy zero counts are unknown. */
126
+ export const hasAgentUsage = (metadata: {
127
+ usage: RunUsage;
128
+ agentUsageAvailability?: "reported" | "unavailable";
129
+ }): boolean =>
130
+ metadata.agentUsageAvailability === "reported" ||
131
+ (metadata.agentUsageAvailability === undefined && !isUsageEmpty(metadata.usage.agent));
@@ -0,0 +1,171 @@
1
+ # Antigravity driver
2
+
3
+ The `antigravity` driver runs Google Antigravity CLI (`agy`) in its headless
4
+ streaming mode: `agy --input-format stream-json --output-format stream-json`.
5
+ Install the CLI and sign in before Lux starts it; headless runs fail with
6
+ `authentication required` when no cached credential exists.
7
+
8
+ ```ts
9
+ {
10
+ name: "antigravity",
11
+ config: {
12
+ model: "YOUR_ANTIGRAVITY_MODEL",
13
+ reasoningEffort: "low",
14
+ },
15
+ }
16
+ ```
17
+
18
+ `model` is required and Lux never inherits the CLI default. Use a base slug
19
+ such as `gemini-3.8-flash`; `reasoningEffort` takes Antigravity's own `low`,
20
+ `medium`, or `high` and selects that variant through `--effort`. The harness
21
+ catalog in `core/harness-catalogs/antigravity.ts` lists which levels each model
22
+ offers (Gemini Flash has three, Gemini 3.1 Pro has `low` and `high`, Claude and
23
+ GPT-OSS have none), and an effort outside that list is rejected before the CLI
24
+ starts. When no effort is set, a model with levels runs at `low`.
25
+
26
+ Lux writes one `user` event with the case prompt, closes stdin, and reads
27
+ `init`, `step_update`, and `result` events. Tool steps become paired
28
+ `tool-call` and `tool-result` events keyed by step index, response deltas become
29
+ `agent-message` progress, other steps stay visible as `antigravity-step`
30
+ progress, and the final `result` usage is recorded as agent usage. The terminal
31
+ response is also retained as message evidence when it was not already streamed.
32
+ Both `DONE` and `ERROR` tool steps close the corresponding tool call; failed
33
+ steps retain their error message. A result with `denied_actions` is an error even
34
+ when Antigravity reports `SUCCESS`. `WAITING` and other non-success statuses are
35
+ also errors. Configure the required scoped permissions for the
36
+ headless evaluation; Lux does not retry a denial with broader permissions.
37
+
38
+ Lux explicitly selects `mode: "accept-edits"` for coding tasks. Set `mode: "plan"`
39
+ for planning runs. On Antigravity 1.2.10, omitting `--mode` can leave terminal
40
+ workspaces read-only even when native file tools can edit them and scoped write
41
+ grants exist. `accept-edits` permits workspace writes within the terminal sandbox;
42
+ it does not disable that sandbox or authorize outside-sandbox execution.
43
+
44
+ ## Run-scoped configuration
45
+
46
+ Lux can own the CLI settings for a run:
47
+
48
+ ```ts
49
+ {
50
+ name: "antigravity",
51
+ config: {
52
+ model: "gemini-3.1-pro",
53
+ reasoningEffort: "low",
54
+ sandbox: true,
55
+ permissionMode: "proceed-in-sandbox",
56
+ permissions: { allow: ["read_url(registry.npmjs.org)"] },
57
+ },
58
+ }
59
+ ```
60
+
61
+ This mode gives only the child process a private home directory. Lux writes
62
+ `enableTerminalSandbox: true`, `toolPermission: "proceed-in-sandbox"`, and the
63
+ configured `permissions` there. It does not edit the user's settings, copy their
64
+ history/plugins, or reuse their project records. Concurrent runs get distinct
65
+ homes. `permissionMode: "inherit"` is the default and preserves the previous
66
+ behavior. Scoped mode requires `sandbox: true`, rejects `skipPermissions: true`
67
+ and a host `project`, and supports scoped `allow`, `deny`, and `ask` lists.
68
+
69
+ Authentication must work in that private home. An inherited `GEMINI_API_KEY` is
70
+ passed to the CLI. For file-based OAuth, Lux copies only the CLI's
71
+ `antigravity-oauth-token` into the private runtime, using the normal CLI token
72
+ path by default or an explicit `authTokenFile`. The copy has mode 0600 inside
73
+ a mode-0700 runtime directory; token refresh cannot modify the source file.
74
+ On macOS, `reuseKeychain: true` explicitly opts into reading Antigravity’s own
75
+ Keychain entry (service `gemini`, account `antigravity`) when the default token
76
+ file is absent. Lux writes that credential only to the private runtime and
77
+ removes it on close. This option defaults to false. Do not put secret values in
78
+ committed Lux configuration.
79
+
80
+ Before deleting a private runtime, Lux snapshots native deliverables from its
81
+ `brain` directory under `antigravity-artifacts/` in the task artifacts. This keeps
82
+ handoff documents available to graders even when the final response only links
83
+ to them. Hidden CLI logs, revision copies, metadata, and symlinks are excluded;
84
+ collection fails explicitly above 500 files or 32 MiB. Existing user-home brain
85
+ history is never scanned in inherited mode.
86
+
87
+ The runtime is outside task artifacts and removed on driver close, collection,
88
+ and startup failure. A force-killed Lux process cannot run cleanup; private
89
+ runtime directories have the `lux-antigravity-home-` prefix in the OS temp root.
90
+ This is configuration separation, not a complete OS security boundary; the
91
+ driver continues declaring `isolation: false`.
92
+
93
+ Grant scoped file and documentation access as needed, including read access to
94
+ language runtimes installed outside system directories. `command(...)` allow
95
+ rules can authorize outside-sandbox execution too. Keep them absent when that
96
+ execution must remain unapproved; `unsandboxed(...)` rules were ignored in the
97
+ observed macOS CLI. The terminal sandbox and native file-tool permissions are
98
+ separate. Extra CLI arguments remain caller-controlled.
99
+
100
+ Each run creates a fresh Antigravity project and passes its canonical working
101
+ directory through `--add-dir` and an explicit task-workspace prompt preamble.
102
+ Set `project` to reuse an explicitly configured
103
+ project, and `addDirs` for additional reference directories. Process cwd alone
104
+ does not select an Antigravity project. Project selection does not grant tool
105
+ permissions: Antigravity 1.2.10 can still deny workspace writes in headless mode.
106
+ `skipPermissions` remains false by default and must be explicitly enabled to
107
+ bypass tool permission checks.
108
+
109
+ The headless protocol carries no user questions or permission prompts, so the
110
+ driver is not interactive. In inherited mode, Antigravity still reads user
111
+ settings and conversation history. Controlled experiments are not
112
+ declared.
113
+
114
+ Regression tests cover the `ERROR` tool step followed by `SUCCESS` with denied
115
+ actions observed in an authenticated Antigravity 1.2.10 session.
116
+
117
+ ## Live readiness checks
118
+
119
+ From a Lux checkout, after installing locked dependencies and authenticating `agy`:
120
+
121
+ ```sh
122
+ LUX_ANTIGRAVITY_MODEL=gemini-3.1-pro mise run smoke:antigravity
123
+ ```
124
+
125
+ This opt-in smoke test consumes model usage. It runs four bounded checks in
126
+ fresh artifact workspaces: a tool-free protocol response, a Node write/read
127
+ check, native handoff-document capture, and a local HTTP server/client check. It stops on the first failure and
128
+ retains events, fixtures, and results under `.lux-runs/antigravity-smoke/`.
129
+ After building, select one stage with
130
+ `LUX_ANTIGRAVITY_MODEL=gemini-3.1-pro node scripts/smoke-antigravity.mjs protocol`
131
+ (or `workspace` / `artifact` / `loopback`); `--list` makes no model calls.
132
+
133
+ The script uses `permissionMode: "proceed-in-sandbox"` with scoped read access to
134
+ the running Node installation, plus localhost grants for the loopback stage.
135
+ It never changes global settings. Authenticate
136
+ with an inherited `GEMINI_API_KEY`, a normal CLI OAuth token file, or
137
+ `LUX_ANTIGRAVITY_AUTH_TOKEN_FILE` pointing to such a file. To opt into macOS
138
+ Keychain reuse, set `LUX_ANTIGRAVITY_REUSE_KEYCHAIN=1`. On macOS with CLI 1.2.12,
139
+ private-runtime authentication and sandboxed file writes passed on 2026-09-29.
140
+ The loopback check failed with `connect EPERM 127.0.0.1`; its missing fixture
141
+ evidence correctly failed the smoke test despite normal agent completion.
142
+
143
+ `--sandbox` alone does not select an execution policy: a native 1.2.12 probe on
144
+ macOS with only `enableTerminalSandbox: true` denied the command, then returned
145
+ `SUCCESS` with empty text and `denied_actions`. Lux correctly classifies that
146
+ result as an error. A separate tool-free live probe passed in inherited mode;
147
+ it does not establish private-runtime authentication.
148
+
149
+ A passing protocol check establishes authentication and streaming only.
150
+ Workspace and loopback checks require fixture-produced evidence; a completed
151
+ agent response alone cannot pass them. These checks do not establish skill
152
+ quality, package-install access, or complete sandbox isolation. Scoped access
153
+ to a runtime outside system directories may also be necessary.
154
+
155
+ On macOS, native 1.2.11 probes could write/build in editing mode but could
156
+ not connect to their own loopback HTTP server: direct connections returned
157
+ `EPERM`, and proxy requests rejected literal IPs or nonstandard HTTP ports.
158
+ That failure occurred without Lux. Recheck the installed CLI with `loopback`
159
+ before running suites that depend on local HTTP fixtures. Domain grants alone
160
+ have not been shown to resolve this restriction. Keep a native reproduction
161
+ separate from driver traces when diagnosing it; do not treat it as skill failure
162
+ or bypass the sandbox to obtain a passing score.
163
+
164
+ Protocol references:
165
+
166
+ - [Antigravity CLI headless mode](https://antigravity.google/docs/cli/headless/)
167
+ - [Antigravity CLI](https://github.com/google-antigravity/antigravity-cli)
168
+
169
+ - [Antigravity terminal sandbox](https://antigravity.google/docs/sandbox?tab=cli)
170
+ - [CLI settings reference](https://antigravity.google/docs/cli/reference/)
171
+ - [Native artifacts](https://antigravity.google/docs/cli/artifacts/)
@@ -0,0 +1,37 @@
1
+ import { readFile, realpath } from "node:fs/promises";
2
+ import { join, sep } from "node:path";
3
+ import { writeArtifactSnapshot } from "../../core/artifact-snapshot.js";
4
+ import { walkArtifacts } from "../shared/artifacts.js";
5
+
6
+ export const captureAntigravityArtifacts = async (
7
+ home: string,
8
+ destination: string,
9
+ ): Promise<void> => {
10
+ const brain = join(home, ".gemini/antigravity-cli/brain");
11
+ let root: string;
12
+ try {
13
+ root = await realpath(brain);
14
+ } catch (error) {
15
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return;
16
+ throw error;
17
+ }
18
+ if (!root.startsWith(`${await realpath(home)}${sep}`))
19
+ throw new Error("Antigravity artifact directory escaped its private runtime");
20
+ // Native revisions and CLI bookkeeping are not authored deliverables.
21
+ const artifacts = (await walkArtifacts(brain)).filter(
22
+ ({ path }) => !/\.(?:metadata\.json|resolved(?:\.\d+)?)$/.test(path),
23
+ );
24
+ if (!artifacts.length) return;
25
+ const maxBytes = 32 * 1024 * 1024;
26
+ if (artifacts.reduce((total, artifact) => total + (artifact.size ?? 0), 0) > maxBytes)
27
+ throw new Error("Antigravity native artifacts exceed the 32 MiB collection limit");
28
+ const files = Object.fromEntries(
29
+ await Promise.all(artifacts.map(async ({ path }) => [path, await readFile(join(brain, path))])),
30
+ );
31
+ await writeArtifactSnapshot({
32
+ artifactsDir: destination,
33
+ name: "antigravity-artifacts",
34
+ files,
35
+ maxBytes,
36
+ });
37
+ };
@@ -0,0 +1,92 @@
1
+ import { z } from "zod";
2
+ import { InheritEnvironmentSchema } from "../../core/agent-environment.js";
3
+ import { DurationSchema } from "../../core/duration.js";
4
+ import { antigravityCatalog, applyCatalogEffort } from "../../core/index.js";
5
+
6
+ export const AntigravityDriverConfigSchema = z
7
+ .object({
8
+ command: z.string().min(1).default("agy"),
9
+ /** Antigravity model slugs often bake in an effort; never inherit the CLI default. */
10
+ model: z.string().min(1),
11
+ /** Pin coding mode: an inherited plan mode makes sandboxed workspaces read-only. */
12
+ mode: z.enum(["accept-edits", "plan"]).default("accept-edits"),
13
+ reasoningEffort: z.enum(antigravityCatalog.efforts).optional(),
14
+ agent: z.string().min(1).optional(),
15
+ /** Use an existing project; otherwise each run creates a fresh project. */
16
+ project: z.string().min(1).optional(),
17
+ addDirs: z.array(z.string().min(1)).default([]),
18
+ /**
19
+ * Auto-approve every tool permission. Off by default: a headless turn that
20
+ * needs approval can report WAITING or SUCCESS with denied_actions; both fail.
21
+ */
22
+ skipPermissions: z.boolean().default(false),
23
+ /** Enable Antigravity's terminal sandbox restrictions. */
24
+ sandbox: z.boolean().default(false),
25
+ /** Own the CLI settings in a private runtime home instead of changing user settings. */
26
+ permissionMode: z.enum(["inherit", "proceed-in-sandbox"]).default("inherit"),
27
+ permissions: z
28
+ .object({
29
+ allow: z.array(z.string().min(1)).default([]),
30
+ deny: z.array(z.string().min(1)).default([]),
31
+ ask: z.array(z.string().min(1)).default([]),
32
+ })
33
+ .strict()
34
+ .optional(),
35
+ /** Optional CLI-format OAuth token file for the private runtime; never logged. */
36
+ authTokenFile: z.string().min(1).optional(),
37
+ /** Explicitly authorize copying this application's macOS Keychain credential. */
38
+ reuseKeychain: z.boolean().default(false),
39
+ cwd: z.string().optional(),
40
+ env: z.record(z.string(), z.string()).optional(),
41
+ inheritEnv: InheritEnvironmentSchema.optional(),
42
+ extraArgs: z.array(z.string()).optional(),
43
+ idleTimeout: DurationSchema.default("10 minutes"),
44
+ maxLineBytes: z.number().positive().default(10_000_000),
45
+ })
46
+ .strict()
47
+ .superRefine((config, ctx) => {
48
+ if (config.permissionMode === "proceed-in-sandbox") {
49
+ if (!config.sandbox || config.skipPermissions)
50
+ ctx.addIssue({
51
+ code: "custom",
52
+ message: "proceed-in-sandbox requires sandbox: true and skipPermissions: false",
53
+ });
54
+ if (config.project)
55
+ ctx.addIssue({
56
+ code: "custom",
57
+ path: ["project"],
58
+ message: "A private Antigravity runtime cannot reuse a host project",
59
+ });
60
+ } else if (config.permissions || config.authTokenFile || config.reuseKeychain) {
61
+ ctx.addIssue({
62
+ code: "custom",
63
+ message:
64
+ "permissions, authTokenFile, and reuseKeychain require permissionMode: proceed-in-sandbox",
65
+ });
66
+ }
67
+ })
68
+ .transform(applyCatalogEffort(antigravityCatalog));
69
+
70
+ export type AntigravityDriverConfig = z.infer<typeof AntigravityDriverConfigSchema>;
71
+
72
+ export const buildAntigravityArgs = (config: AntigravityDriverConfig, cwd?: string): string[] => [
73
+ "--input-format",
74
+ "stream-json",
75
+ "--output-format",
76
+ "stream-json",
77
+ "--model",
78
+ config.model,
79
+ "--mode",
80
+ config.mode,
81
+ ...(config.project ? ["--project", config.project] : ["--new-project"]),
82
+ ...(cwd ? ["--add-dir", cwd] : []),
83
+ ...config.addDirs.flatMap((directory) => ["--add-dir", directory]),
84
+ ...(config.reasoningEffort ? ["--effort", config.reasoningEffort] : []),
85
+ ...(config.agent ? ["--agent", config.agent] : []),
86
+ ...(config.skipPermissions ? ["--dangerously-skip-permissions"] : []),
87
+ ...(config.sandbox ? ["--sandbox"] : []),
88
+ ...(config.extraArgs ?? []),
89
+ ];
90
+
91
+ export const formatAntigravityPrompt = (prompt: string): string =>
92
+ JSON.stringify({ event: "user", message: { content: prompt } });