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

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 (717) hide show
  1. package/lib/answerers/claude-code/index.d.ts +15 -3
  2. package/lib/answerers/claude-code/index.d.ts.map +1 -1
  3. package/lib/answerers/claude-code/index.js +6 -5
  4. package/lib/answerers/claude-code/index.js.map +1 -1
  5. package/lib/answerers/persona/index.d.ts +44 -5
  6. package/lib/answerers/persona/index.d.ts.map +1 -1
  7. package/lib/answerers/persona/index.js +60 -34
  8. package/lib/answerers/persona/index.js.map +1 -1
  9. package/lib/answerers/terminal/index.d.ts +9 -3
  10. package/lib/answerers/terminal/index.d.ts.map +1 -1
  11. package/lib/answerers/terminal/index.js +7 -5
  12. package/lib/answerers/terminal/index.js.map +1 -1
  13. package/lib/assertions/authoring.d.ts +2 -2
  14. package/lib/assertions/authoring.d.ts.map +1 -1
  15. package/lib/assertions/authoring.js.map +1 -1
  16. package/lib/assertions/core/command-exits-zero.d.ts +3 -1
  17. package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
  18. package/lib/assertions/core/command-exits-zero.js +50 -7
  19. package/lib/assertions/core/command-exits-zero.js.map +1 -1
  20. package/lib/assertions/core/event-checks.d.ts +3 -0
  21. package/lib/assertions/core/event-checks.d.ts.map +1 -1
  22. package/lib/assertions/core/event-checks.js +49 -3
  23. package/lib/assertions/core/event-checks.js.map +1 -1
  24. package/lib/assertions/core/helpers.d.ts +2 -7
  25. package/lib/assertions/core/helpers.d.ts.map +1 -1
  26. package/lib/assertions/core/helpers.js +2 -6
  27. package/lib/assertions/core/helpers.js.map +1 -1
  28. package/lib/assertions/core/index.d.ts.map +1 -1
  29. package/lib/assertions/core/index.js +2 -1
  30. package/lib/assertions/core/index.js.map +1 -1
  31. package/lib/assertions/core/resource-checks.d.ts +19 -0
  32. package/lib/assertions/core/resource-checks.d.ts.map +1 -1
  33. package/lib/assertions/core/resource-checks.js +35 -5
  34. package/lib/assertions/core/resource-checks.js.map +1 -1
  35. package/lib/assertions/rubric/index.d.ts +26 -3
  36. package/lib/assertions/rubric/index.d.ts.map +1 -1
  37. package/lib/assertions/rubric/index.js +59 -13
  38. package/lib/assertions/rubric/index.js.map +1 -1
  39. package/lib/assertions/rubric/internal.d.ts +30 -5
  40. package/lib/assertions/rubric/internal.d.ts.map +1 -1
  41. package/lib/assertions/rubric/internal.js +181 -28
  42. package/lib/assertions/rubric/internal.js.map +1 -1
  43. package/lib/authoring.d.ts +36 -2
  44. package/lib/authoring.d.ts.map +1 -1
  45. package/lib/authoring.js +36 -1
  46. package/lib/authoring.js.map +1 -1
  47. package/lib/cli/bin.js +2 -13
  48. package/lib/cli/bin.js.map +1 -1
  49. package/lib/cli/command-runtime.d.ts +3 -3
  50. package/lib/cli/command-runtime.d.ts.map +1 -1
  51. package/lib/cli/command-runtime.js +17 -6
  52. package/lib/cli/command-runtime.js.map +1 -1
  53. package/lib/cli/doctor.d.ts +55 -0
  54. package/lib/cli/doctor.d.ts.map +1 -0
  55. package/lib/cli/doctor.js +14 -0
  56. package/lib/cli/doctor.js.map +1 -0
  57. package/lib/cli/harness-plan.d.ts +26 -0
  58. package/lib/cli/harness-plan.d.ts.map +1 -0
  59. package/lib/cli/harness-plan.js +75 -0
  60. package/lib/cli/harness-plan.js.map +1 -0
  61. package/lib/cli/init-templates.d.ts +11 -0
  62. package/lib/cli/init-templates.d.ts.map +1 -0
  63. package/lib/cli/init-templates.js +215 -0
  64. package/lib/cli/init-templates.js.map +1 -0
  65. package/lib/cli/init.d.ts +10 -0
  66. package/lib/cli/init.d.ts.map +1 -1
  67. package/lib/cli/init.js +34 -173
  68. package/lib/cli/init.js.map +1 -1
  69. package/lib/cli/output-schemas.d.ts +1406 -0
  70. package/lib/cli/output-schemas.d.ts.map +1 -0
  71. package/lib/cli/output-schemas.js +91 -0
  72. package/lib/cli/output-schemas.js.map +1 -0
  73. package/lib/cli/program.d.ts +140 -12
  74. package/lib/cli/program.d.ts.map +1 -1
  75. package/lib/cli/program.js +778 -646
  76. package/lib/cli/program.js.map +1 -1
  77. package/lib/cli/render/reporter.d.ts.map +1 -1
  78. package/lib/cli/render/reporter.js +40 -7
  79. package/lib/cli/render/reporter.js.map +1 -1
  80. package/lib/cli/run-options.d.ts +20 -4
  81. package/lib/cli/run-options.d.ts.map +1 -1
  82. package/lib/cli/run-options.js +100 -19
  83. package/lib/cli/run-options.js.map +1 -1
  84. package/lib/cli/view.d.ts +15 -0
  85. package/lib/cli/view.d.ts.map +1 -0
  86. package/lib/cli/view.js +168 -0
  87. package/lib/cli/view.js.map +1 -0
  88. package/lib/container/driver.d.ts +27 -0
  89. package/lib/container/driver.d.ts.map +1 -0
  90. package/lib/container/driver.js +197 -0
  91. package/lib/container/driver.js.map +1 -0
  92. package/lib/container/protocol.d.ts +12 -0
  93. package/lib/container/protocol.d.ts.map +1 -0
  94. package/lib/container/protocol.js +38 -0
  95. package/lib/container/protocol.js.map +1 -0
  96. package/lib/container/resources.d.ts +12 -0
  97. package/lib/container/resources.d.ts.map +1 -0
  98. package/lib/container/resources.js +133 -0
  99. package/lib/container/resources.js.map +1 -0
  100. package/lib/container/worker.d.ts +2 -0
  101. package/lib/container/worker.d.ts.map +1 -0
  102. package/lib/container/worker.js +85 -0
  103. package/lib/container/worker.js.map +1 -0
  104. package/lib/core/action-events.d.ts +29 -0
  105. package/lib/core/action-events.d.ts.map +1 -0
  106. package/lib/core/action-events.js +51 -0
  107. package/lib/core/action-events.js.map +1 -0
  108. package/lib/core/agent-activity.d.ts +49 -0
  109. package/lib/core/agent-activity.d.ts.map +1 -0
  110. package/lib/core/agent-activity.js +206 -0
  111. package/lib/core/agent-activity.js.map +1 -0
  112. package/lib/core/agent-environment.d.ts +5 -0
  113. package/lib/core/agent-environment.d.ts.map +1 -0
  114. package/lib/core/agent-environment.js +47 -0
  115. package/lib/core/agent-environment.js.map +1 -0
  116. package/lib/core/agent-events.d.ts +26 -0
  117. package/lib/core/agent-events.d.ts.map +1 -0
  118. package/lib/core/agent-events.js +13 -0
  119. package/lib/core/agent-events.js.map +1 -0
  120. package/lib/core/annotation.d.ts +6 -2
  121. package/lib/core/annotation.d.ts.map +1 -1
  122. package/lib/core/annotation.js +2 -1
  123. package/lib/core/annotation.js.map +1 -1
  124. package/lib/core/answerer.d.ts +12 -0
  125. package/lib/core/answerer.d.ts.map +1 -1
  126. package/lib/core/answerer.js +2 -0
  127. package/lib/core/answerer.js.map +1 -1
  128. package/lib/core/artifact-evidence.d.ts +8 -0
  129. package/lib/core/artifact-evidence.d.ts.map +1 -1
  130. package/lib/core/artifact-evidence.js +36 -4
  131. package/lib/core/artifact-evidence.js.map +1 -1
  132. package/lib/core/assertion.d.ts +15 -0
  133. package/lib/core/assertion.d.ts.map +1 -1
  134. package/lib/core/assertion.js +16 -0
  135. package/lib/core/assertion.js.map +1 -1
  136. package/lib/core/case.d.ts +106 -2
  137. package/lib/core/case.d.ts.map +1 -1
  138. package/lib/core/case.js +16 -2
  139. package/lib/core/case.js.map +1 -1
  140. package/lib/core/command-verification.d.ts +10 -0
  141. package/lib/core/command-verification.d.ts.map +1 -0
  142. package/lib/core/command-verification.js +66 -0
  143. package/lib/core/command-verification.js.map +1 -0
  144. package/lib/core/driver-execution.d.ts +83 -0
  145. package/lib/core/driver-execution.d.ts.map +1 -0
  146. package/lib/core/driver-execution.js +72 -0
  147. package/lib/core/driver-execution.js.map +1 -0
  148. package/lib/core/driver-metrics.d.ts +98 -0
  149. package/lib/core/driver-metrics.d.ts.map +1 -0
  150. package/lib/core/driver-metrics.js +36 -0
  151. package/lib/core/driver-metrics.js.map +1 -0
  152. package/lib/core/driver.d.ts +64 -0
  153. package/lib/core/driver.d.ts.map +1 -1
  154. package/lib/core/driver.js +28 -0
  155. package/lib/core/driver.js.map +1 -1
  156. package/lib/core/duration.d.ts +5 -0
  157. package/lib/core/duration.d.ts.map +1 -0
  158. package/lib/core/duration.js +49 -0
  159. package/lib/core/duration.js.map +1 -0
  160. package/lib/core/environment.d.ts +18 -0
  161. package/lib/core/environment.d.ts.map +1 -0
  162. package/lib/core/environment.js +21 -0
  163. package/lib/core/environment.js.map +1 -0
  164. package/lib/core/evaluation-clusters.d.ts +17 -0
  165. package/lib/core/evaluation-clusters.d.ts.map +1 -0
  166. package/lib/core/evaluation-clusters.js +23 -0
  167. package/lib/core/evaluation-clusters.js.map +1 -0
  168. package/lib/core/events.d.ts +36 -0
  169. package/lib/core/events.d.ts.map +1 -1
  170. package/lib/core/events.js +12 -2
  171. package/lib/core/events.js.map +1 -1
  172. package/lib/core/experiment.d.ts +32 -2
  173. package/lib/core/experiment.d.ts.map +1 -1
  174. package/lib/core/experiment.js +35 -18
  175. package/lib/core/experiment.js.map +1 -1
  176. package/lib/core/file-tree.d.ts +7 -0
  177. package/lib/core/file-tree.d.ts.map +1 -0
  178. package/lib/core/file-tree.js +35 -0
  179. package/lib/core/file-tree.js.map +1 -0
  180. package/lib/core/global-id.d.ts +6 -0
  181. package/lib/core/global-id.d.ts.map +1 -0
  182. package/lib/core/global-id.js +17 -0
  183. package/lib/core/global-id.js.map +1 -0
  184. package/lib/core/harness-catalog.d.ts +35 -0
  185. package/lib/core/harness-catalog.d.ts.map +1 -0
  186. package/lib/core/harness-catalog.js +45 -0
  187. package/lib/core/harness-catalog.js.map +1 -0
  188. package/lib/core/harness-catalogs/antigravity.d.ts +11 -0
  189. package/lib/core/harness-catalogs/antigravity.d.ts.map +1 -0
  190. package/lib/core/harness-catalogs/antigravity.js +23 -0
  191. package/lib/core/harness-catalogs/antigravity.js.map +1 -0
  192. package/lib/core/harness-catalogs/claude-code.d.ts +12 -0
  193. package/lib/core/harness-catalogs/claude-code.d.ts.map +1 -0
  194. package/lib/core/harness-catalogs/claude-code.js +24 -0
  195. package/lib/core/harness-catalogs/claude-code.js.map +1 -0
  196. package/lib/core/harness-catalogs/codex.d.ts +11 -0
  197. package/lib/core/harness-catalogs/codex.d.ts.map +1 -0
  198. package/lib/core/harness-catalogs/codex.js +26 -0
  199. package/lib/core/harness-catalogs/codex.js.map +1 -0
  200. package/lib/core/harness-catalogs/copilot.d.ts +29 -0
  201. package/lib/core/harness-catalogs/copilot.d.ts.map +1 -0
  202. package/lib/core/harness-catalogs/copilot.js +45 -0
  203. package/lib/core/harness-catalogs/copilot.js.map +1 -0
  204. package/lib/core/harness-catalogs/cursor.d.ts +2 -0
  205. package/lib/core/harness-catalogs/cursor.d.ts.map +1 -0
  206. package/lib/core/harness-catalogs/cursor.js +13 -0
  207. package/lib/core/harness-catalogs/cursor.js.map +1 -0
  208. package/lib/core/harness-catalogs/grok-build.d.ts +7 -0
  209. package/lib/core/harness-catalogs/grok-build.d.ts.map +1 -0
  210. package/lib/core/harness-catalogs/grok-build.js +18 -0
  211. package/lib/core/harness-catalogs/grok-build.js.map +1 -0
  212. package/lib/core/harness-catalogs/index.d.ts +73 -0
  213. package/lib/core/harness-catalogs/index.d.ts.map +1 -0
  214. package/lib/core/harness-catalogs/index.js +17 -0
  215. package/lib/core/harness-catalogs/index.js.map +1 -0
  216. package/lib/core/harness-matrix.d.ts +154 -0
  217. package/lib/core/harness-matrix.d.ts.map +1 -0
  218. package/lib/core/harness-matrix.js +204 -0
  219. package/lib/core/harness-matrix.js.map +1 -0
  220. package/lib/core/index.d.ts +12 -0
  221. package/lib/core/index.d.ts.map +1 -1
  222. package/lib/core/index.js +12 -0
  223. package/lib/core/index.js.map +1 -1
  224. package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
  225. package/lib/core/lifecycle-fixtures.js +4 -2
  226. package/lib/core/lifecycle-fixtures.js.map +1 -1
  227. package/lib/core/model-cli.d.ts +9 -11
  228. package/lib/core/model-cli.d.ts.map +1 -1
  229. package/lib/core/model-cli.js +31 -19
  230. package/lib/core/model-cli.js.map +1 -1
  231. package/lib/core/platform-process.d.ts +6 -1
  232. package/lib/core/platform-process.d.ts.map +1 -1
  233. package/lib/core/platform-process.js +49 -11
  234. package/lib/core/platform-process.js.map +1 -1
  235. package/lib/core/run.d.ts +292 -1
  236. package/lib/core/run.d.ts.map +1 -1
  237. package/lib/core/run.js +27 -0
  238. package/lib/core/run.js.map +1 -1
  239. package/lib/core/secure-copy.d.ts.map +1 -0
  240. package/lib/core/secure-copy.js.map +1 -0
  241. package/lib/core/usage.d.ts +5 -0
  242. package/lib/core/usage.d.ts.map +1 -1
  243. package/lib/core/usage.js +3 -0
  244. package/lib/core/usage.js.map +1 -1
  245. package/lib/core/wire.d.ts +12 -0
  246. package/lib/core/wire.d.ts.map +1 -1
  247. package/lib/core/wire.js +5 -1
  248. package/lib/core/wire.js.map +1 -1
  249. package/lib/drivers/antigravity/artifacts.d.ts +2 -0
  250. package/lib/drivers/antigravity/artifacts.d.ts.map +1 -0
  251. package/lib/drivers/antigravity/artifacts.js +33 -0
  252. package/lib/drivers/antigravity/artifacts.js.map +1 -0
  253. package/lib/drivers/antigravity/config.d.ts +88 -0
  254. package/lib/drivers/antigravity/config.d.ts.map +1 -0
  255. package/lib/drivers/antigravity/config.js +87 -0
  256. package/lib/drivers/antigravity/config.js.map +1 -0
  257. package/lib/drivers/antigravity/events.d.ts +4 -0
  258. package/lib/drivers/antigravity/events.d.ts.map +1 -0
  259. package/lib/drivers/antigravity/events.js +241 -0
  260. package/lib/drivers/antigravity/events.js.map +1 -0
  261. package/lib/drivers/antigravity/index.d.ts +114 -0
  262. package/lib/drivers/antigravity/index.d.ts.map +1 -0
  263. package/lib/drivers/antigravity/index.js +113 -0
  264. package/lib/drivers/antigravity/index.js.map +1 -0
  265. package/lib/drivers/antigravity/runtime.d.ts +7 -0
  266. package/lib/drivers/antigravity/runtime.d.ts.map +1 -0
  267. package/lib/drivers/antigravity/runtime.js +83 -0
  268. package/lib/drivers/antigravity/runtime.js.map +1 -0
  269. package/lib/drivers/claude-code/deferred-process.d.ts +17 -0
  270. package/lib/drivers/claude-code/deferred-process.d.ts.map +1 -0
  271. package/lib/drivers/claude-code/deferred-process.js +108 -0
  272. package/lib/drivers/claude-code/deferred-process.js.map +1 -0
  273. package/lib/drivers/claude-code/index.d.ts +180 -10
  274. package/lib/drivers/claude-code/index.d.ts.map +1 -1
  275. package/lib/drivers/claude-code/index.js +186 -252
  276. package/lib/drivers/claude-code/index.js.map +1 -1
  277. package/lib/drivers/claude-code/isolation.d.ts +8 -0
  278. package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
  279. package/lib/drivers/claude-code/isolation.js +199 -0
  280. package/lib/drivers/claude-code/isolation.js.map +1 -0
  281. package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
  282. package/lib/drivers/claude-code/parse-events.js +73 -8
  283. package/lib/drivers/claude-code/parse-events.js.map +1 -1
  284. package/lib/drivers/codex/app-events.d.ts +9 -2
  285. package/lib/drivers/codex/app-events.d.ts.map +1 -1
  286. package/lib/drivers/codex/app-events.js +104 -12
  287. package/lib/drivers/codex/app-events.js.map +1 -1
  288. package/lib/drivers/codex/config.d.ts +66 -5
  289. package/lib/drivers/codex/config.d.ts.map +1 -1
  290. package/lib/drivers/codex/config.js +39 -8
  291. package/lib/drivers/codex/config.js.map +1 -1
  292. package/lib/drivers/codex/exec-events.d.ts +4 -0
  293. package/lib/drivers/codex/exec-events.d.ts.map +1 -0
  294. package/lib/drivers/codex/exec-events.js +230 -0
  295. package/lib/drivers/codex/exec-events.js.map +1 -0
  296. package/lib/drivers/codex/index.d.ts +138 -4
  297. package/lib/drivers/codex/index.d.ts.map +1 -1
  298. package/lib/drivers/codex/index.js +112 -276
  299. package/lib/drivers/codex/index.js.map +1 -1
  300. package/lib/drivers/copilot/config.d.ts +84 -0
  301. package/lib/drivers/copilot/config.d.ts.map +1 -0
  302. package/lib/drivers/copilot/config.js +57 -0
  303. package/lib/drivers/copilot/config.js.map +1 -0
  304. package/lib/drivers/copilot/index.d.ts +107 -0
  305. package/lib/drivers/copilot/index.d.ts.map +1 -0
  306. package/lib/drivers/copilot/index.js +268 -0
  307. package/lib/drivers/copilot/index.js.map +1 -0
  308. package/lib/drivers/cursor/config.d.ts +28 -0
  309. package/lib/drivers/cursor/config.d.ts.map +1 -0
  310. package/lib/drivers/cursor/config.js +28 -0
  311. package/lib/drivers/cursor/config.js.map +1 -0
  312. package/lib/drivers/cursor/index.d.ts +44 -0
  313. package/lib/drivers/cursor/index.d.ts.map +1 -0
  314. package/lib/drivers/cursor/index.js +286 -0
  315. package/lib/drivers/cursor/index.js.map +1 -0
  316. package/lib/drivers/cursor/interaction.d.ts +6 -0
  317. package/lib/drivers/cursor/interaction.d.ts.map +1 -0
  318. package/lib/drivers/cursor/interaction.js +55 -0
  319. package/lib/drivers/cursor/interaction.js.map +1 -0
  320. package/lib/drivers/grok-build/config.d.ts +68 -0
  321. package/lib/drivers/grok-build/config.d.ts.map +1 -0
  322. package/lib/drivers/grok-build/config.js +40 -0
  323. package/lib/drivers/grok-build/config.js.map +1 -0
  324. package/lib/drivers/grok-build/index.d.ts +87 -0
  325. package/lib/drivers/grok-build/index.d.ts.map +1 -0
  326. package/lib/drivers/grok-build/index.js +293 -0
  327. package/lib/drivers/grok-build/index.js.map +1 -0
  328. package/lib/drivers/mcp/index.d.ts +37 -4
  329. package/lib/drivers/mcp/index.d.ts.map +1 -1
  330. package/lib/drivers/mcp/index.js +25 -11
  331. package/lib/drivers/mcp/index.js.map +1 -1
  332. package/lib/drivers/shared/acp-events.d.ts +15 -0
  333. package/lib/drivers/shared/acp-events.d.ts.map +1 -0
  334. package/lib/drivers/shared/acp-events.js +83 -0
  335. package/lib/drivers/shared/acp-events.js.map +1 -0
  336. package/lib/drivers/shared/acp-interaction.d.ts +7 -0
  337. package/lib/drivers/shared/acp-interaction.d.ts.map +1 -0
  338. package/lib/drivers/shared/acp-interaction.js +20 -0
  339. package/lib/drivers/shared/acp-interaction.js.map +1 -0
  340. package/lib/drivers/shared/acp-session.d.ts +4 -0
  341. package/lib/drivers/shared/acp-session.d.ts.map +1 -0
  342. package/lib/drivers/shared/acp-session.js +23 -0
  343. package/lib/drivers/shared/acp-session.js.map +1 -0
  344. package/lib/drivers/shared/acp-transport.d.ts +40 -0
  345. package/lib/drivers/shared/acp-transport.d.ts.map +1 -0
  346. package/lib/drivers/shared/acp-transport.js +152 -0
  347. package/lib/drivers/shared/acp-transport.js.map +1 -0
  348. package/lib/drivers/shared/artifacts.d.ts.map +1 -1
  349. package/lib/drivers/shared/artifacts.js +3 -2
  350. package/lib/drivers/shared/artifacts.js.map +1 -1
  351. package/lib/drivers/shared/experiment-behavior.d.ts +13 -0
  352. package/lib/drivers/shared/experiment-behavior.d.ts.map +1 -0
  353. package/lib/drivers/shared/experiment-behavior.js +197 -0
  354. package/lib/drivers/shared/experiment-behavior.js.map +1 -0
  355. package/lib/drivers/shared/experiment-policy.d.ts +4 -0
  356. package/lib/drivers/shared/experiment-policy.d.ts.map +1 -0
  357. package/lib/drivers/shared/experiment-policy.js +143 -0
  358. package/lib/drivers/shared/experiment-policy.js.map +1 -0
  359. package/lib/drivers/subprocess/index.d.ts +39 -4
  360. package/lib/drivers/subprocess/index.d.ts.map +1 -1
  361. package/lib/drivers/subprocess/index.js +56 -12
  362. package/lib/drivers/subprocess/index.js.map +1 -1
  363. package/lib/index.d.ts +22 -8
  364. package/lib/index.d.ts.map +1 -1
  365. package/lib/index.js +20 -6
  366. package/lib/index.js.map +1 -1
  367. package/lib/optimization/reflective.d.ts +3 -1
  368. package/lib/optimization/reflective.d.ts.map +1 -1
  369. package/lib/optimization/reflective.js +3 -2
  370. package/lib/optimization/reflective.js.map +1 -1
  371. package/lib/orchestrator/annotation-loader.d.ts +6 -2
  372. package/lib/orchestrator/annotation-loader.d.ts.map +1 -1
  373. package/lib/orchestrator/annotation-loader.js +8 -0
  374. package/lib/orchestrator/annotation-loader.js.map +1 -1
  375. package/lib/orchestrator/annotation-store.d.ts.map +1 -1
  376. package/lib/orchestrator/annotation-store.js +16 -2
  377. package/lib/orchestrator/annotation-store.js.map +1 -1
  378. package/lib/orchestrator/artifact-origin.d.ts +3 -0
  379. package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
  380. package/lib/orchestrator/artifact-origin.js +40 -0
  381. package/lib/orchestrator/artifact-origin.js.map +1 -0
  382. package/lib/orchestrator/campaign-lifecycle.d.ts +1 -0
  383. package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -1
  384. package/lib/orchestrator/campaign-lifecycle.js +4 -1
  385. package/lib/orchestrator/campaign-lifecycle.js.map +1 -1
  386. package/lib/orchestrator/candidates.d.ts.map +1 -1
  387. package/lib/orchestrator/candidates.js +3 -2
  388. package/lib/orchestrator/candidates.js.map +1 -1
  389. package/lib/orchestrator/compare.d.ts +17 -1
  390. package/lib/orchestrator/compare.d.ts.map +1 -1
  391. package/lib/orchestrator/compare.js +25 -1
  392. package/lib/orchestrator/compare.js.map +1 -1
  393. package/lib/orchestrator/comparison-identity.d.ts.map +1 -1
  394. package/lib/orchestrator/comparison-identity.js +2 -0
  395. package/lib/orchestrator/comparison-identity.js.map +1 -1
  396. package/lib/orchestrator/config.d.ts +177 -1
  397. package/lib/orchestrator/config.d.ts.map +1 -1
  398. package/lib/orchestrator/config.js +18 -4
  399. package/lib/orchestrator/config.js.map +1 -1
  400. package/lib/orchestrator/discover.d.ts +1 -0
  401. package/lib/orchestrator/discover.d.ts.map +1 -1
  402. package/lib/orchestrator/discover.js +7 -1
  403. package/lib/orchestrator/discover.js.map +1 -1
  404. package/lib/orchestrator/doctor.d.ts +1 -0
  405. package/lib/orchestrator/doctor.d.ts.map +1 -1
  406. package/lib/orchestrator/doctor.js +121 -33
  407. package/lib/orchestrator/doctor.js.map +1 -1
  408. package/lib/orchestrator/driver-capabilities.d.ts +4 -0
  409. package/lib/orchestrator/driver-capabilities.d.ts.map +1 -0
  410. package/lib/orchestrator/driver-capabilities.js +13 -0
  411. package/lib/orchestrator/driver-capabilities.js.map +1 -0
  412. package/lib/orchestrator/driver-identity.d.ts +5 -0
  413. package/lib/orchestrator/driver-identity.d.ts.map +1 -0
  414. package/lib/orchestrator/driver-identity.js +51 -0
  415. package/lib/orchestrator/driver-identity.js.map +1 -0
  416. package/lib/orchestrator/experiment-context.d.ts +51 -3
  417. package/lib/orchestrator/experiment-context.d.ts.map +1 -1
  418. package/lib/orchestrator/experiment-context.js.map +1 -1
  419. package/lib/orchestrator/experiment-contracts.d.ts +30 -1
  420. package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
  421. package/lib/orchestrator/experiment-corpus.d.ts +2 -1
  422. package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
  423. package/lib/orchestrator/experiment-corpus.js +28 -22
  424. package/lib/orchestrator/experiment-corpus.js.map +1 -1
  425. package/lib/orchestrator/experiment-effects.d.ts +33 -0
  426. package/lib/orchestrator/experiment-effects.d.ts.map +1 -0
  427. package/lib/orchestrator/experiment-effects.js +44 -0
  428. package/lib/orchestrator/experiment-effects.js.map +1 -0
  429. package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
  430. package/lib/orchestrator/experiment-evaluation.js +56 -5
  431. package/lib/orchestrator/experiment-evaluation.js.map +1 -1
  432. package/lib/orchestrator/experiment-identity.d.ts +3 -0
  433. package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
  434. package/lib/orchestrator/experiment-identity.js +22 -33
  435. package/lib/orchestrator/experiment-identity.js.map +1 -1
  436. package/lib/orchestrator/experiment-loader.d.ts +8 -3
  437. package/lib/orchestrator/experiment-loader.d.ts.map +1 -1
  438. package/lib/orchestrator/experiment-preflight.d.ts +3 -0
  439. package/lib/orchestrator/experiment-preflight.d.ts.map +1 -0
  440. package/lib/orchestrator/experiment-preflight.js +21 -0
  441. package/lib/orchestrator/experiment-preflight.js.map +1 -0
  442. package/lib/orchestrator/experiment-report.d.ts +90 -1
  443. package/lib/orchestrator/experiment-report.d.ts.map +1 -1
  444. package/lib/orchestrator/experiment-report.js +9 -1
  445. package/lib/orchestrator/experiment-report.js.map +1 -1
  446. package/lib/orchestrator/experiment-runs.d.ts +61 -2
  447. package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
  448. package/lib/orchestrator/experiment-runs.js +13 -5
  449. package/lib/orchestrator/experiment-runs.js.map +1 -1
  450. package/lib/orchestrator/experiment-runtime-identity.d.ts +0 -16
  451. package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -1
  452. package/lib/orchestrator/experiment-runtime-identity.js +5 -220
  453. package/lib/orchestrator/experiment-runtime-identity.js.map +1 -1
  454. package/lib/orchestrator/experiment-selection.d.ts.map +1 -1
  455. package/lib/orchestrator/experiment-selection.js +52 -0
  456. package/lib/orchestrator/experiment-selection.js.map +1 -1
  457. package/lib/orchestrator/experiment.d.ts +3 -3
  458. package/lib/orchestrator/experiment.d.ts.map +1 -1
  459. package/lib/orchestrator/experiment.js +26 -21
  460. package/lib/orchestrator/experiment.js.map +1 -1
  461. package/lib/orchestrator/fixture-identity.d.ts +1 -0
  462. package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
  463. package/lib/orchestrator/fixture-identity.js +6 -1
  464. package/lib/orchestrator/fixture-identity.js.map +1 -1
  465. package/lib/orchestrator/fs-read.d.ts +1 -6
  466. package/lib/orchestrator/fs-read.d.ts.map +1 -1
  467. package/lib/orchestrator/fs-read.js +2 -32
  468. package/lib/orchestrator/fs-read.js.map +1 -1
  469. package/lib/orchestrator/grader-experiment.d.ts +29 -1
  470. package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
  471. package/lib/orchestrator/grader-experiment.js +54 -9
  472. package/lib/orchestrator/grader-experiment.js.map +1 -1
  473. package/lib/orchestrator/grading.d.ts +2 -1
  474. package/lib/orchestrator/grading.d.ts.map +1 -1
  475. package/lib/orchestrator/grading.js +27 -8
  476. package/lib/orchestrator/grading.js.map +1 -1
  477. package/lib/orchestrator/harness-catalog-drift.d.ts +22 -0
  478. package/lib/orchestrator/harness-catalog-drift.d.ts.map +1 -0
  479. package/lib/orchestrator/harness-catalog-drift.js +90 -0
  480. package/lib/orchestrator/harness-catalog-drift.js.map +1 -0
  481. package/lib/orchestrator/harness-registry.d.ts +4 -0
  482. package/lib/orchestrator/harness-registry.d.ts.map +1 -0
  483. package/lib/orchestrator/harness-registry.js +5 -0
  484. package/lib/orchestrator/harness-registry.js.map +1 -0
  485. package/lib/orchestrator/index.d.ts +1 -1
  486. package/lib/orchestrator/index.d.ts.map +1 -1
  487. package/lib/orchestrator/index.js +1 -1
  488. package/lib/orchestrator/index.js.map +1 -1
  489. package/lib/orchestrator/list-runs.d.ts +8 -1
  490. package/lib/orchestrator/list-runs.d.ts.map +1 -1
  491. package/lib/orchestrator/list-runs.js +77 -12
  492. package/lib/orchestrator/list-runs.js.map +1 -1
  493. package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -1
  494. package/lib/orchestrator/optimization-lifecycle.js +3 -1
  495. package/lib/orchestrator/optimization-lifecycle.js.map +1 -1
  496. package/lib/orchestrator/orchestrator.d.ts +18 -2
  497. package/lib/orchestrator/orchestrator.d.ts.map +1 -1
  498. package/lib/orchestrator/orchestrator.js +50 -168
  499. package/lib/orchestrator/orchestrator.js.map +1 -1
  500. package/lib/orchestrator/paired-effects.d.ts +34 -0
  501. package/lib/orchestrator/paired-effects.d.ts.map +1 -0
  502. package/lib/orchestrator/paired-effects.js +158 -0
  503. package/lib/orchestrator/paired-effects.js.map +1 -0
  504. package/lib/orchestrator/provenance.d.ts +5 -1
  505. package/lib/orchestrator/provenance.d.ts.map +1 -1
  506. package/lib/orchestrator/provenance.js +16 -3
  507. package/lib/orchestrator/provenance.js.map +1 -1
  508. package/lib/orchestrator/regrade.d.ts +7 -0
  509. package/lib/orchestrator/regrade.d.ts.map +1 -1
  510. package/lib/orchestrator/rubric-loader.js +1 -1
  511. package/lib/orchestrator/rubric-loader.js.map +1 -1
  512. package/lib/orchestrator/run-dir.d.ts +2 -0
  513. package/lib/orchestrator/run-dir.d.ts.map +1 -1
  514. package/lib/orchestrator/run-dir.js +1 -1
  515. package/lib/orchestrator/run-dir.js.map +1 -1
  516. package/lib/orchestrator/run-execution.d.ts +3 -0
  517. package/lib/orchestrator/run-execution.d.ts.map +1 -1
  518. package/lib/orchestrator/run-execution.js +66 -12
  519. package/lib/orchestrator/run-execution.js.map +1 -1
  520. package/lib/orchestrator/run-lifecycle.d.ts +1 -0
  521. package/lib/orchestrator/run-lifecycle.d.ts.map +1 -1
  522. package/lib/orchestrator/run-lifecycle.js +3 -2
  523. package/lib/orchestrator/run-lifecycle.js.map +1 -1
  524. package/lib/orchestrator/run-workspace.d.ts +10 -0
  525. package/lib/orchestrator/run-workspace.d.ts.map +1 -0
  526. package/lib/orchestrator/run-workspace.js +58 -0
  527. package/lib/orchestrator/run-workspace.js.map +1 -0
  528. package/lib/orchestrator/suite-compare.d.ts +37 -0
  529. package/lib/orchestrator/suite-compare.d.ts.map +1 -1
  530. package/lib/orchestrator/suite-compare.js +27 -17
  531. package/lib/orchestrator/suite-compare.js.map +1 -1
  532. package/lib/orchestrator/suite-runs.d.ts +6 -1
  533. package/lib/orchestrator/suite-runs.d.ts.map +1 -1
  534. package/lib/orchestrator/suite-runs.js +14 -2
  535. package/lib/orchestrator/suite-runs.js.map +1 -1
  536. package/lib/orchestrator/suite-summary.d.ts +77 -0
  537. package/lib/orchestrator/suite-summary.d.ts.map +1 -1
  538. package/lib/orchestrator/suite-summary.js +61 -12
  539. package/lib/orchestrator/suite-summary.js.map +1 -1
  540. package/lib/previewer/artifacts.d.ts +25 -0
  541. package/lib/previewer/artifacts.d.ts.map +1 -0
  542. package/lib/previewer/artifacts.js +180 -0
  543. package/lib/previewer/artifacts.js.map +1 -0
  544. package/lib/previewer/server.d.ts +111 -0
  545. package/lib/previewer/server.d.ts.map +1 -0
  546. package/lib/previewer/server.js +558 -0
  547. package/lib/previewer/server.js.map +1 -0
  548. package/package.json +3 -3
  549. package/skills/lux-answerer/SKILL.md +2 -2
  550. package/src/answerers/claude-code/index.ts +6 -5
  551. package/src/answerers/persona/index.ts +75 -34
  552. package/src/answerers/terminal/index.ts +8 -12
  553. package/src/assertions/authoring.ts +2 -0
  554. package/src/assertions/core/command-exits-zero.ts +61 -7
  555. package/src/assertions/core/event-checks.ts +64 -3
  556. package/src/assertions/core/helpers.ts +3 -6
  557. package/src/assertions/core/index.ts +2 -0
  558. package/src/assertions/core/resource-checks.ts +38 -5
  559. package/src/assertions/rubric/index.ts +68 -13
  560. package/src/assertions/rubric/internal.ts +227 -27
  561. package/src/authoring.ts +345 -2
  562. package/src/cli/bin.ts +2 -12
  563. package/src/cli/command-runtime.ts +20 -9
  564. package/src/cli/doctor.ts +17 -0
  565. package/src/cli/harness-plan.ts +117 -0
  566. package/src/cli/init-templates.ts +238 -0
  567. package/src/cli/init.ts +53 -184
  568. package/src/cli/output-schemas.ts +106 -0
  569. package/src/cli/program.ts +689 -721
  570. package/src/cli/render/reporter.ts +43 -7
  571. package/src/cli/run-options.ts +132 -25
  572. package/src/cli/view.ts +129 -0
  573. package/src/container/driver.ts +211 -0
  574. package/src/container/protocol.ts +48 -0
  575. package/src/container/resources.ts +153 -0
  576. package/src/container/worker.ts +107 -0
  577. package/src/core/action-events.ts +59 -0
  578. package/src/core/agent-activity.ts +236 -0
  579. package/src/core/agent-environment.ts +64 -0
  580. package/src/core/agent-events.ts +17 -0
  581. package/src/core/annotation.ts +2 -1
  582. package/src/core/answerer.ts +9 -0
  583. package/src/core/artifact-evidence.ts +47 -4
  584. package/src/core/assertion.ts +18 -0
  585. package/src/core/case.ts +16 -2
  586. package/src/core/command-verification.ts +74 -0
  587. package/src/core/driver-execution.ts +84 -0
  588. package/src/core/driver-metrics.ts +51 -0
  589. package/src/core/driver.ts +76 -0
  590. package/src/core/duration.ts +52 -0
  591. package/src/core/environment.ts +22 -0
  592. package/src/core/evaluation-clusters.ts +35 -0
  593. package/src/core/events.ts +14 -2
  594. package/src/core/experiment.ts +64 -24
  595. package/src/core/file-tree.ts +35 -0
  596. package/src/core/global-id.ts +26 -0
  597. package/src/core/harness-catalog.ts +100 -0
  598. package/src/core/harness-catalogs/antigravity.ts +24 -0
  599. package/src/core/harness-catalogs/claude-code.ts +25 -0
  600. package/src/core/harness-catalogs/codex.ts +27 -0
  601. package/src/core/harness-catalogs/copilot.ts +46 -0
  602. package/src/core/harness-catalogs/cursor.ts +13 -0
  603. package/src/core/harness-catalogs/grok-build.ts +19 -0
  604. package/src/core/harness-catalogs/index.ts +31 -0
  605. package/src/core/harness-matrix.ts +316 -0
  606. package/src/core/index.ts +12 -0
  607. package/src/core/lifecycle-fixtures.ts +4 -2
  608. package/src/core/model-cli.ts +52 -23
  609. package/src/core/platform-process.ts +58 -10
  610. package/src/core/run.ts +31 -0
  611. package/src/core/usage.ts +8 -0
  612. package/src/core/wire.ts +5 -1
  613. package/src/drivers/antigravity/README.md +171 -0
  614. package/src/drivers/antigravity/artifacts.ts +37 -0
  615. package/src/drivers/antigravity/config.ts +92 -0
  616. package/src/drivers/antigravity/events.ts +290 -0
  617. package/src/drivers/antigravity/index.ts +132 -0
  618. package/src/drivers/antigravity/runtime.ts +94 -0
  619. package/src/drivers/claude-code/deferred-process.ts +118 -0
  620. package/src/drivers/claude-code/index.ts +216 -281
  621. package/src/drivers/claude-code/isolation.ts +228 -0
  622. package/src/drivers/claude-code/parse-events.ts +98 -12
  623. package/src/drivers/codex/app-events.ts +126 -16
  624. package/src/drivers/codex/config.ts +50 -8
  625. package/src/drivers/codex/exec-events.ts +258 -0
  626. package/src/drivers/codex/index.ts +144 -312
  627. package/src/drivers/copilot/README.md +60 -0
  628. package/src/drivers/copilot/config.ts +61 -0
  629. package/src/drivers/copilot/index.ts +310 -0
  630. package/src/drivers/cursor/README.md +66 -0
  631. package/src/drivers/cursor/config.ts +31 -0
  632. package/src/drivers/cursor/index.ts +326 -0
  633. package/src/drivers/cursor/interaction.ts +74 -0
  634. package/src/drivers/grok-build/README.md +112 -0
  635. package/src/drivers/grok-build/config.ts +43 -0
  636. package/src/drivers/grok-build/index.ts +331 -0
  637. package/src/drivers/mcp/index.ts +25 -11
  638. package/src/drivers/shared/acp-events.ts +94 -0
  639. package/src/drivers/shared/acp-interaction.ts +27 -0
  640. package/src/drivers/shared/acp-session.ts +40 -0
  641. package/src/drivers/shared/acp-transport.ts +187 -0
  642. package/src/drivers/shared/artifacts.ts +6 -2
  643. package/src/drivers/shared/experiment-behavior.ts +214 -0
  644. package/src/drivers/shared/experiment-policy.ts +195 -0
  645. package/src/drivers/subprocess/index.ts +55 -12
  646. package/src/index.ts +115 -10
  647. package/src/optimization/reflective.ts +3 -2
  648. package/src/orchestrator/annotation-loader.ts +10 -0
  649. package/src/orchestrator/annotation-store.ts +24 -3
  650. package/src/orchestrator/artifact-origin.ts +50 -0
  651. package/src/orchestrator/campaign-lifecycle.ts +5 -1
  652. package/src/orchestrator/candidates.ts +3 -2
  653. package/src/orchestrator/compare.ts +34 -1
  654. package/src/orchestrator/comparison-identity.ts +2 -0
  655. package/src/orchestrator/config.ts +20 -3
  656. package/src/orchestrator/discover.ts +8 -1
  657. package/src/orchestrator/doctor.ts +189 -28
  658. package/src/orchestrator/driver-capabilities.ts +21 -0
  659. package/src/orchestrator/driver-identity.ts +69 -0
  660. package/src/orchestrator/experiment-context.ts +3 -2
  661. package/src/orchestrator/experiment-corpus.ts +53 -37
  662. package/src/orchestrator/experiment-effects.ts +61 -0
  663. package/src/orchestrator/experiment-evaluation.ts +71 -10
  664. package/src/orchestrator/experiment-identity.ts +42 -48
  665. package/src/orchestrator/experiment-preflight.ts +27 -0
  666. package/src/orchestrator/experiment-report.ts +21 -1
  667. package/src/orchestrator/experiment-runs.ts +11 -4
  668. package/src/orchestrator/experiment-runtime-identity.ts +5 -243
  669. package/src/orchestrator/experiment-selection.ts +77 -0
  670. package/src/orchestrator/experiment.ts +29 -29
  671. package/src/orchestrator/fixture-identity.ts +9 -1
  672. package/src/orchestrator/fs-read.ts +2 -32
  673. package/src/orchestrator/grader-experiment.ts +74 -13
  674. package/src/orchestrator/grading.ts +35 -7
  675. package/src/orchestrator/harness-catalog-drift.ts +132 -0
  676. package/src/orchestrator/harness-registry.ts +12 -0
  677. package/src/orchestrator/index.ts +1 -0
  678. package/src/orchestrator/list-runs.ts +95 -11
  679. package/src/orchestrator/optimization-lifecycle.ts +4 -1
  680. package/src/orchestrator/orchestrator.ts +92 -216
  681. package/src/orchestrator/paired-effects.ts +209 -0
  682. package/src/orchestrator/provenance.ts +23 -3
  683. package/src/orchestrator/rubric-loader.ts +1 -1
  684. package/src/orchestrator/run-dir.ts +8 -1
  685. package/src/orchestrator/run-execution.ts +77 -11
  686. package/src/orchestrator/run-lifecycle.ts +4 -2
  687. package/src/orchestrator/run-workspace.ts +62 -0
  688. package/src/orchestrator/suite-compare.ts +29 -19
  689. package/src/orchestrator/suite-runs.ts +13 -2
  690. package/src/orchestrator/suite-summary.ts +122 -13
  691. package/src/previewer/artifacts.ts +221 -0
  692. package/src/previewer/server.ts +787 -0
  693. package/viewer/app.css +2075 -0
  694. package/viewer/app.js +627 -0
  695. package/viewer/artifact-view.js +48 -0
  696. package/viewer/charts.js +86 -0
  697. package/viewer/detail.js +1231 -0
  698. package/viewer/format.js +129 -0
  699. package/viewer/index.html +151 -0
  700. package/lib/answerers/scripted/index.d.ts +0 -8
  701. package/lib/answerers/scripted/index.d.ts.map +0 -1
  702. package/lib/answerers/scripted/index.js +0 -163
  703. package/lib/answerers/scripted/index.js.map +0 -1
  704. package/lib/cli/skills.d.ts +0 -38
  705. package/lib/cli/skills.d.ts.map +0 -1
  706. package/lib/cli/skills.js +0 -84
  707. package/lib/cli/skills.js.map +0 -1
  708. package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
  709. package/lib/drivers/shared/secure-copy.js.map +0 -1
  710. package/skills/lux/SKILL.md +0 -85
  711. package/skills/lux/references/cli.md +0 -102
  712. package/skills/lux/references/eval-authoring.md +0 -105
  713. package/src/answerers/scripted/index.ts +0 -186
  714. package/src/cli/skills.ts +0 -129
  715. /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
  716. /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
  717. /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
@@ -3,32 +3,37 @@ import { homedir } from "node:os";
3
3
  import { dirname, join } from "node:path";
4
4
  import { createInterface } from "node:readline";
5
5
  import { temporaryDirectory } from "tempy";
6
- import { z } from "zod";
6
+ import { agentEnvironment } from "../../core/agent-environment.js";
7
+ import { durationMs } from "../../core/duration.js";
7
8
  import {
8
9
  type AgentDriver,
9
10
  type Answer,
10
11
  type Artifact,
11
12
  type DriverEventMap,
12
- type DriverPlugin,
13
+ defineDriver,
13
14
  discoverCliVersion,
14
- type ParsedDriverEvent,
15
15
  type ReadyState,
16
16
  type StartContext,
17
+ selectModelAndReasoningEffort,
17
18
  spawnManagedProcess,
18
19
  type TokenUsage,
19
20
  TypedEmitter,
20
- toolResultProgress,
21
21
  } from "../../core/index.js";
22
+ import { resolveExecutable } from "../../core/platform-process.js";
23
+ import { copyRegularFileNoFollow } from "../../core/secure-copy.js";
22
24
  import { walkArtifacts } from "../shared/artifacts.js";
23
- import { copyRegularFileNoFollow } from "../shared/secure-copy.js";
25
+ import { configuredClaudeSourceHashes } from "../shared/experiment-behavior.js";
26
+ import { prepareCodexExperimentConfig } from "../shared/experiment-policy.js";
24
27
  import { subprocessDriver } from "../subprocess/index.js";
25
28
  import {
26
29
  type AppTurnFacets,
30
+ appAgentLifecycleProgress,
27
31
  appItemProgress,
28
32
  appItemToolName,
29
33
  appTurnLabel,
30
34
  appUsage,
31
35
  asRecord,
36
+ CodexSubagentTracker,
32
37
  messageOf,
33
38
  type RpcId,
34
39
  type RpcRecord,
@@ -39,266 +44,14 @@ import {
39
44
  type CodexConfigValue,
40
45
  type CodexDriverConfig,
41
46
  CodexDriverConfigSchema,
47
+ codexConfigOverrides,
42
48
  } from "./config.js";
43
49
 
50
+ import { makeParseEvent } from "./exec-events.js";
51
+
44
52
  const LUX_BOOKKEEPING_FILES = new Set(["events.jsonl", "case.json", "run.json", "grading.json"]);
45
53
  const commandName = (command: string): string => command.split(/[\\/]/).at(-1) ?? command;
46
54
 
47
- const CodexUsageSchema = z.object({
48
- input_tokens: z.number().nonnegative().catch(0),
49
- cached_input_tokens: z.number().nonnegative().catch(0),
50
- output_tokens: z.number().nonnegative().catch(0),
51
- });
52
-
53
- const parseUsage = (raw: unknown): TokenUsage | null => {
54
- const usage = CodexUsageSchema.safeParse(raw).data;
55
- if (!usage) return null;
56
- return {
57
- input: Math.max(0, usage.input_tokens - usage.cached_input_tokens),
58
- output: usage.output_tokens,
59
- cacheRead: usage.cached_input_tokens,
60
- cacheCreation: 0,
61
- };
62
- };
63
-
64
- const resultText = (content: unknown): string => {
65
- if (typeof content === "string") return content;
66
- if (!Array.isArray(content)) return "";
67
- return content
68
- .filter(
69
- (block): block is { type: "text"; text: string } =>
70
- typeof block === "object" &&
71
- block !== null &&
72
- (block as { type?: unknown }).type === "text" &&
73
- typeof (block as { text?: unknown }).text === "string",
74
- )
75
- .map((block) => block.text)
76
- .join("\n");
77
- };
78
-
79
- const startedItemProgress = (
80
- item: Record<string, unknown>,
81
- id: string,
82
- ): ParsedDriverEvent | null => {
83
- if (item.type === "command_execution") {
84
- return {
85
- tag: "progress",
86
- progress: {
87
- id: `tc-${id}`,
88
- kind: "tool-call",
89
- payload: { name: "command_execution", input: { command: item.command }, toolUseId: id },
90
- ts: Date.now(),
91
- },
92
- };
93
- }
94
- if (item.type === "mcp_tool_call") {
95
- const tool = typeof item.tool === "string" ? item.tool : String(item.name ?? "mcp_tool_call");
96
- const server = typeof item.server === "string" ? item.server : undefined;
97
- return {
98
- tag: "progress",
99
- progress: {
100
- id: `tc-${id}`,
101
- kind: "tool-call",
102
- payload: {
103
- name: tool,
104
- input: item.arguments ?? item.input,
105
- toolUseId: id,
106
- ...(server ? { server } : {}),
107
- },
108
- ts: Date.now(),
109
- },
110
- };
111
- }
112
- if (item.type === "web_search") {
113
- return {
114
- tag: "progress",
115
- progress: {
116
- id: `tc-${id}`,
117
- kind: "tool-call",
118
- payload: { name: "web_search", input: { query: item.query }, toolUseId: id },
119
- ts: Date.now(),
120
- },
121
- };
122
- }
123
- if (item.type === "file_change") {
124
- return {
125
- tag: "progress",
126
- progress: {
127
- id: `tc-${id}`,
128
- kind: "tool-call",
129
- payload: { name: "file_change", input: { changes: item.changes }, toolUseId: id },
130
- ts: Date.now(),
131
- },
132
- };
133
- }
134
- return null;
135
- };
136
-
137
- const completedItemProgress = (
138
- item: Record<string, unknown>,
139
- id: string,
140
- ): ParsedDriverEvent | null => {
141
- if (item.type === "agent_message" && typeof item.text === "string") {
142
- return {
143
- tag: "progress",
144
- progress: {
145
- id: `am-${id}`,
146
- kind: "agent-message",
147
- payload: { text: item.text },
148
- ts: Date.now(),
149
- },
150
- };
151
- }
152
- if (item.type === "reasoning") {
153
- const text = typeof item.text === "string" ? item.text : item.summary;
154
- return {
155
- tag: "progress",
156
- progress: { id: `reasoning-${id}`, kind: "reasoning", payload: { text }, ts: Date.now() },
157
- };
158
- }
159
- if (item.type === "mcp_tool_call") {
160
- const tool = typeof item.tool === "string" ? item.tool : String(item.name ?? "mcp_tool_call");
161
- const raw =
162
- item.result && typeof item.result === "object"
163
- ? (item.result as Record<string, unknown>)
164
- : item;
165
- const content = raw.content ?? item.result ?? [];
166
- const structuredContent = raw.structuredContent ?? raw.structured_content;
167
- return {
168
- tag: "progress",
169
- progress: toolResultProgress(
170
- 0,
171
- {
172
- name: tool,
173
- toolUseId: id,
174
- content,
175
- ...(structuredContent && typeof structuredContent === "object"
176
- ? { structuredContent: structuredContent as Record<string, unknown> }
177
- : {}),
178
- isError:
179
- raw.isError === true ||
180
- raw.is_error === true ||
181
- item.status === "failed" ||
182
- (item.error !== undefined && item.error !== null),
183
- text: resultText(content) || (typeof item.error === "string" ? item.error : ""),
184
- },
185
- Date.now(),
186
- ),
187
- };
188
- }
189
- if (item.type === "command_execution") {
190
- const output = item.aggregated_output ?? item.output ?? "";
191
- const exitCode = typeof item.exit_code === "number" ? item.exit_code : undefined;
192
- return {
193
- tag: "progress",
194
- progress: toolResultProgress(
195
- 0,
196
- {
197
- name: "command_execution",
198
- toolUseId: id,
199
- content: { output, ...(exitCode !== undefined ? { exitCode } : {}) },
200
- isError: item.status === "failed" || (exitCode !== undefined && exitCode !== 0),
201
- text: typeof output === "string" ? output : JSON.stringify(output),
202
- },
203
- Date.now(),
204
- ),
205
- };
206
- }
207
- if (item.type === "web_search" || item.type === "file_change") {
208
- const isWebSearch = item.type === "web_search";
209
- const content = isWebSearch
210
- ? { query: item.query }
211
- : { changes: item.changes, status: item.status };
212
- let text = JSON.stringify(item.changes ?? []);
213
- if (isWebSearch) text = typeof item.query === "string" ? item.query : "";
214
- return {
215
- tag: "progress",
216
- progress: toolResultProgress(
217
- 0,
218
- {
219
- name: item.type,
220
- toolUseId: id,
221
- content,
222
- isError: item.status === "failed",
223
- text,
224
- },
225
- Date.now(),
226
- ),
227
- };
228
- }
229
- return null;
230
- };
231
-
232
- const itemProgress = (
233
- item: Record<string, unknown>,
234
- phase: "started" | "completed",
235
- ): ParsedDriverEvent | null => {
236
- const id = typeof item.id === "string" ? item.id : `${String(item.type)}-${Date.now()}`;
237
- return phase === "started" ? startedItemProgress(item, id) : completedItemProgress(item, id);
238
- };
239
-
240
- const makeParseEvent = (config: CodexDriverConfig, cliVersion?: string) => {
241
- let threadId: string | undefined;
242
- return (line: string): ParsedDriverEvent | ParsedDriverEvent[] | null => {
243
- let event: Record<string, unknown>;
244
- try {
245
- event = JSON.parse(line) as Record<string, unknown>;
246
- } catch {
247
- return null;
248
- }
249
- if (event.type === "thread.started") {
250
- threadId = typeof event.thread_id === "string" ? event.thread_id : undefined;
251
- return {
252
- tag: "ready",
253
- ready: {
254
- agentId: "codex",
255
- model: config.model,
256
- detail: { ...(threadId ? { threadId } : {}), ...(cliVersion ? { cliVersion } : {}) },
257
- },
258
- };
259
- }
260
- if (event.type === "item.started" || event.type === "item.completed") {
261
- if (!event.item || typeof event.item !== "object") return null;
262
- return itemProgress(
263
- event.item as Record<string, unknown>,
264
- event.type === "item.started" ? "started" : "completed",
265
- );
266
- }
267
- if (event.type === "turn.completed") {
268
- const usage = parseUsage(event.usage);
269
- const events: ParsedDriverEvent[] = [];
270
- if (usage) {
271
- events.push({
272
- tag: "progress",
273
- progress: {
274
- id: `usage-${threadId ?? Date.now()}`,
275
- kind: "usage",
276
- payload: usage,
277
- ts: Date.now(),
278
- },
279
- });
280
- }
281
- events.push({
282
- tag: "done",
283
- done: { exitReason: "done", summary: { threadId, ...(usage ? { usage } : {}) } },
284
- });
285
- return events;
286
- }
287
- if (event.type === "turn.failed" || event.type === "error") {
288
- const nestedMessage =
289
- event.error && typeof event.error === "object"
290
- ? (event.error as Record<string, unknown>).message
291
- : undefined;
292
- let message = "codex reported an error";
293
- if (typeof event.message === "string") message = event.message;
294
- else if (typeof event.error === "string") message = event.error;
295
- else if (typeof nestedMessage === "string") message = nestedMessage;
296
- return { tag: "error", error: { exitReason: "error", reason: message } };
297
- }
298
- return null;
299
- };
300
- };
301
-
302
55
  class CodexAppServerDriverImpl implements AgentDriver {
303
56
  private readonly emitter = new TypedEmitter<DriverEventMap>();
304
57
  private readonly config: CodexDriverConfig;
@@ -308,6 +61,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
308
61
  private runDir: string | null = null;
309
62
  private isolatedWorkspace: string | null = null;
310
63
  private isolatedStateDir: string | null = null;
64
+ private isolationConfig: Record<string, CodexConfigValue> = {};
311
65
  private threadId: string | null = null;
312
66
  private cliVersion: string | undefined;
313
67
  private nextRequestId = 1;
@@ -316,7 +70,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
316
70
  { resolve: (result: RpcRecord) => void; reject: (error: Error) => void }
317
71
  >();
318
72
  private readonly interrupts = new Map<string, { id: RpcId; method: string; params: RpcRecord }>();
319
- private readonly subagentParents = new Map<string, string>();
73
+ private readonly subagents = new CodexSubagentTracker();
320
74
  private readonly turnFacets = new Map<string, AppTurnFacets>();
321
75
  private interruptCount = 0;
322
76
  private idleTimer: NodeJS.Timeout | null = null;
@@ -345,6 +99,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
345
99
  let cwd =
346
100
  this.config.cwd ?? (this.config.cwdMode === "artifacts" ? ctx.artifactsDir : ctx.runDir);
347
101
  let env = this.config.env;
102
+ let launchCommand = this.config.command;
348
103
  if (this.config.isolation) {
349
104
  const workspace = await realpath(temporaryDirectory({ prefix: "lux-codex-workspace-" }));
350
105
  await cp(ctx.artifactsDir, workspace, { recursive: true });
@@ -372,6 +127,45 @@ class CodexAppServerDriverImpl implements AgentDriver {
372
127
  CODEX_CONFIG_HOME: stateDir,
373
128
  };
374
129
  }
130
+ if (this.config.isolation) {
131
+ const reads = await Promise.all(
132
+ this.config.isolation.allowRead.map((path) => realpath(path)),
133
+ );
134
+ const executable = resolveExecutable(
135
+ this.config.command,
136
+ { ...agentEnvironment(process.env, this.config.inheritEnv), ...env },
137
+ undefined,
138
+ cwd,
139
+ );
140
+ if (executable) {
141
+ launchCommand = await realpath(executable);
142
+ reads.push(executable, launchCommand);
143
+ }
144
+ // Native filesystem tools relaunch the CLI inside the subject sandbox.
145
+ // Workspace requirements reload process configuration during a turn.
146
+ // A thread-only profile is accepted at startup but fails that reload.
147
+ this.isolationConfig = {
148
+ allow_login_shell: false,
149
+ project_doc_max_bytes: 0,
150
+ projects: { [cwd]: { trust_level: "untrusted" } },
151
+ default_permissions: "lux-isolated",
152
+ permissions: {
153
+ "lux-isolated": {
154
+ filesystem: {
155
+ ":minimal": "read",
156
+ [cwd]: "write",
157
+ ...Object.fromEntries(reads.map((path) => [path, "read"])),
158
+ },
159
+ network: { enabled: true },
160
+ },
161
+ },
162
+ features: {
163
+ ...((this.config.config?.features as Record<string, CodexConfigValue>) ?? {}),
164
+ shell_snapshot: false,
165
+ shell_snapshot_v2: false,
166
+ },
167
+ };
168
+ }
375
169
  this.collectDir = cwd;
376
170
  this.artifactsDir = ctx.artifactsDir;
377
171
  this.runDir = ctx.runDir;
@@ -382,16 +176,23 @@ class CodexAppServerDriverImpl implements AgentDriver {
382
176
  commandName(this.config.command) === "codex"
383
177
  ? await discoverCliVersion(this.config.command)
384
178
  : undefined;
385
- const managed = spawnManagedProcess(this.config.command, buildAppServerArgs(this.config), {
386
- cwd,
387
- env: {
388
- ...process.env,
389
- LUX_RUN_DIR: ctx.runDir,
390
- LUX_ARTIFACTS_DIR: ctx.artifactsDir,
391
- ...env,
179
+ const managed = spawnManagedProcess(
180
+ launchCommand,
181
+ buildAppServerArgs({
182
+ ...this.config,
183
+ config: { ...this.config.config, ...this.isolationConfig },
184
+ }),
185
+ {
186
+ cwd,
187
+ env: {
188
+ ...agentEnvironment(process.env, this.config.inheritEnv),
189
+ LUX_RUN_DIR: ctx.runDir,
190
+ LUX_ARTIFACTS_DIR: ctx.artifactsDir,
191
+ ...env,
192
+ },
193
+ signal: ctx.abortSignal,
392
194
  },
393
- signal: ctx.abortSignal,
394
- });
195
+ );
395
196
  this.process = managed;
396
197
  managed.child.stderr.setEncoding("utf8");
397
198
  let stderrTail = "";
@@ -436,41 +237,35 @@ class CodexAppServerDriverImpl implements AgentDriver {
436
237
  capabilities: { experimentalApi: true, requestAttestation: false },
437
238
  });
438
239
  this.notify("initialized");
439
- const isolationReads = this.config.isolation
440
- ? await Promise.all(this.config.isolation.allowRead.map((path) => realpath(path)))
441
- : [];
442
240
  const threadConfig: Record<string, CodexConfigValue> = {
443
- ...(this.config.config ?? {}),
444
- model_reasoning_effort: this.config.reasoningEffort,
445
- ...(this.config.isolation
446
- ? {
447
- project_doc_max_bytes: 0,
448
- projects: { [cwd]: { trust_level: "untrusted" } },
449
- permissions: {
450
- "lux-isolated": {
451
- filesystem: {
452
- ":minimal": "read",
453
- ":workspace_roots": { ".": "write" },
454
- ...Object.fromEntries(isolationReads.map((path) => [path, "read"])),
455
- },
456
- network: { enabled: true },
457
- },
458
- },
459
- }
241
+ ...codexConfigOverrides(this.config),
242
+ ...(this.config.reasoningEffort
243
+ ? { model_reasoning_effort: this.config.reasoningEffort }
460
244
  : {}),
245
+ ...this.isolationConfig,
461
246
  };
462
247
  const started = await this.request("thread/start", {
463
248
  model: this.config.model,
464
249
  cwd,
465
- runtimeWorkspaceRoots: this.config.addDirs ?? [],
250
+ runtimeWorkspaceRoots: this.config.isolation
251
+ ? [cwd, ...(this.config.addDirs ?? [])]
252
+ : (this.config.addDirs ?? []),
466
253
  approvalPolicy: this.config.approvalPolicy,
467
- approvalsReviewer: "user",
254
+ approvalsReviewer: this.config.approvalsReviewer,
468
255
  ...(this.config.isolation
469
256
  ? { permissions: "lux-isolated" }
470
257
  : { sandbox: this.config.sandbox }),
471
258
  config: threadConfig,
472
259
  ephemeral: this.config.ephemeral,
473
260
  });
261
+ if (
262
+ this.config.approvalsReviewer === "auto_review" &&
263
+ started.approvalsReviewer !== "auto_review"
264
+ ) {
265
+ throw new Error(
266
+ "codex app-server did not enable the requested auto_review approvals reviewer",
267
+ );
268
+ }
474
269
  const thread = asRecord(started.thread);
475
270
  if (!thread || typeof thread.id !== "string") {
476
271
  throw new Error("codex app-server returned an invalid thread/start response");
@@ -481,6 +276,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
481
276
  model: typeof started.model === "string" ? started.model : this.config.model,
482
277
  detail: {
483
278
  threadId: thread.id,
279
+ approvalsReviewer: this.config.approvalsReviewer,
484
280
  ...(typeof thread.sessionId === "string" ? { sessionId: thread.sessionId } : {}),
485
281
  ...(this.cliVersion ? { cliVersion: this.cliVersion } : {}),
486
282
  },
@@ -586,6 +382,11 @@ class CodexAppServerDriverImpl implements AgentDriver {
586
382
  : withRoot;
587
383
  }
588
384
 
385
+ async verificationWorkspace(): Promise<string | undefined> {
386
+ await this.quiesce();
387
+ return this.isolatedWorkspace ?? undefined;
388
+ }
389
+
589
390
  async quiesce(): Promise<void> {
590
391
  this.clearIdleTimer();
591
392
  await this.process?.terminate();
@@ -659,6 +460,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
659
460
  }
660
461
 
661
462
  private async dispatch(message: RpcRecord): Promise<void> {
463
+ if (this.terminal) return;
662
464
  const method = typeof message.method === "string" ? message.method : "";
663
465
  const params = asRecord(message.params) ?? {};
664
466
  if (message.id !== undefined && method) {
@@ -669,6 +471,14 @@ class CodexAppServerDriverImpl implements AgentDriver {
669
471
  await this.handleItemNotification(method, params);
670
472
  return;
671
473
  }
474
+ if (
475
+ (method === "thread/tokenUsage/updated" ||
476
+ method === "turn/completed" ||
477
+ method === "error") &&
478
+ typeof params.threadId === "string" &&
479
+ params.threadId !== this.threadId
480
+ )
481
+ return;
672
482
  if (method === "thread/tokenUsage/updated") {
673
483
  this.handleTokenUsageNotification(params);
674
484
  return;
@@ -702,28 +512,28 @@ class CodexAppServerDriverImpl implements AgentDriver {
702
512
  const toolName = item ? appItemToolName(item) : null;
703
513
  if (toolName && !facets.tools.includes(toolName)) facets.tools.push(toolName);
704
514
  if (turnId) this.turnFacets.set(turnId, facets);
705
- this.recordSubagentParents(item);
706
- const parentToolUseId =
707
- typeof params.threadId === "string" ? this.subagentParents.get(params.threadId) : undefined;
515
+ const threadId = typeof params.threadId === "string" ? params.threadId : undefined;
516
+ this.subagents.record(item, threadId, this.threadId);
517
+ const agent = this.subagents.attribution(threadId, this.threadId);
708
518
  const event = item
709
- ? appItemProgress(item, method === "item/started" ? "started" : "completed", parentToolUseId)
519
+ ? appItemProgress(item, method === "item/started" ? "started" : "completed", agent)
710
520
  : null;
711
521
  if (event?.tag === "progress") await this.emitter.emit("progress", event.progress);
712
- }
713
-
714
- private recordSubagentParents(item: RpcRecord | null): void {
715
- if (item?.type !== "collabAgentToolCall" || typeof item.id !== "string") return;
716
- const receiverThreadIds = Array.isArray(item.receiverThreadIds)
717
- ? item.receiverThreadIds.filter((value): value is string => typeof value === "string")
718
- : [];
719
- for (const receiverThreadId of receiverThreadIds) {
720
- this.subagentParents.set(receiverThreadId, item.id);
522
+ if (item) {
523
+ for (const lifecycle of appAgentLifecycleProgress(
524
+ item,
525
+ method === "item/started" ? "started" : "completed",
526
+ agent,
527
+ event?.tag === "progress" ? event.progress.ts : Date.now(),
528
+ )) {
529
+ await this.emitter.emit("progress", lifecycle);
530
+ }
721
531
  }
722
532
  }
723
533
 
724
534
  private handleTokenUsageNotification(params: RpcRecord): void {
725
535
  const tokenUsage = asRecord(params.tokenUsage);
726
- const usage = appUsage(tokenUsage?.last);
536
+ const usage = appUsage(tokenUsage?.total) ?? appUsage(tokenUsage?.last);
727
537
  if (usage) this.latestUsage = usage;
728
538
  }
729
539
 
@@ -775,6 +585,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
775
585
  }
776
586
 
777
587
  private handleErrorNotification(params: RpcRecord): void {
588
+ if (params.willRetry === true) return;
778
589
  const error = asRecord(params.error);
779
590
  let errorMessage = "codex app-server reported an error";
780
591
  if (typeof params.message === "string") errorMessage = params.message;
@@ -883,8 +694,8 @@ class CodexAppServerDriverImpl implements AgentDriver {
883
694
  this.idleTimer = setTimeout(() => {
884
695
  this.idleTimer = null;
885
696
  if (this.interrupts.size > 0) return;
886
- this.fail(`no event for ${this.config.idleTimeoutMs}ms`, "idle-timeout");
887
- }, this.config.idleTimeoutMs);
697
+ this.fail(`no event for ${durationMs(this.config.idleTimeout)}ms`, "idle-timeout");
698
+ }, durationMs(this.config.idleTimeout));
888
699
  }
889
700
 
890
701
  private clearIdleTimer(): void {
@@ -942,12 +753,13 @@ class CodexExecDriverImpl implements AgentDriver {
942
753
  command: this.config.command,
943
754
  args: buildArgs(this.config),
944
755
  cwd,
945
- env: this.config.env,
756
+ env: agentEnvironment(process.env, this.config.inheritEnv, this.config.env),
757
+ inheritEnv: false,
946
758
  protocol: "custom",
947
759
  parseEvent: makeParseEvent(this.config, cliVersion),
948
760
  formatPrompt: (prompt) => prompt,
949
761
  closeStdinAfterPrompt: true,
950
- idleTimeoutMs: this.config.idleTimeoutMs,
762
+ idleTimeout: this.config.idleTimeout,
951
763
  maxLineBytes: this.config.maxLineBytes,
952
764
  maxInterrupts: 1,
953
765
  });
@@ -982,14 +794,34 @@ class CodexExecDriverImpl implements AgentDriver {
982
794
  }
983
795
  }
984
796
 
985
- export const codexDriver: DriverPlugin<CodexDriverConfig> = {
797
+ export const codexDriver = defineDriver({
986
798
  name: "codex",
987
799
  configSchema: CodexDriverConfigSchema,
800
+ runtime: (config) => ({
801
+ commands: [config.command],
802
+ capabilities: {
803
+ interactive: config.interactionMode === "app-server",
804
+ "tool-calls": true,
805
+ "tool-results": true,
806
+ artifacts: true,
807
+ subagents: config.interactionMode === "app-server",
808
+ usage: true,
809
+ cost: false,
810
+ isolation: Boolean(config.isolation),
811
+ },
812
+ }),
813
+ experiment: {
814
+ version: "1",
815
+ prepare: prepareCodexExperimentConfig,
816
+ identity: (config, { rootDir }) =>
817
+ configuredClaudeSourceHashes({ name: "codex", config }, rootDir),
818
+ },
819
+ selectHarness: selectModelAndReasoningEffort,
988
820
  create: (config) =>
989
821
  config.interactionMode === "app-server"
990
822
  ? new CodexAppServerDriverImpl(config)
991
823
  : new CodexExecDriverImpl(config),
992
- };
824
+ });
993
825
 
994
826
  export type { CodexDriverConfig };
995
827
  export { appItemProgress, buildAppServerArgs, buildArgs, CodexDriverConfigSchema, makeParseEvent };
@@ -0,0 +1,60 @@
1
+ # Copilot driver
2
+
3
+ The `copilot` driver runs GitHub Copilot CLI as an Agent Client Protocol (ACP)
4
+ server (`copilot --acp`). Install the CLI and run `copilot login` before Lux
5
+ starts it. Your GitHub plan must allow Copilot CLI model access.
6
+
7
+ ```ts
8
+ {
9
+ name: "copilot",
10
+ config: {
11
+ model: "YOUR_COPILOT_MODEL",
12
+ reasoningEffort: "low",
13
+ allowTools: ["shell(git:*)"],
14
+ },
15
+ }
16
+ ```
17
+
18
+ `model` is required because Copilot's `auto` selection can pick any model in
19
+ the plan. Lux passes `--model` and `--effort` on the command line. Copilot's
20
+ `--effort` accepts `none` through `max`, but each model honors only a subset
21
+ and silently falls back on the rest, so the harness catalog in
22
+ `core/harness-catalogs/copilot.ts` records the levels per model id and Lux
23
+ rejects a level the model does not honor. Models whose levels are not published
24
+ (Gemini, Grok, Kimi, MAI) are listed with no effort. When no effort is set, a
25
+ model with levels runs at `low`. When ACP advertises a model selector, Lux
26
+ selects and verifies the requested model; otherwise it records the model as
27
+ requested rather than confirmed. `lux doctor` compares the catalog's model ids with
28
+ `copilot help config` and warns when they differ.
29
+
30
+ Tool permission requests arrive as ACP `session/request_permission` calls and
31
+ become `approve` interrupts. Lux answers with the one-operation option only and
32
+ never selects a remembered grant. `allowTools` and `denyTools` pass Copilot
33
+ permission patterns; `allowAllTools` approves everything, which turns the
34
+ interactive capability off. The `ask_user` tool is disabled because Copilot has
35
+ no ACP wire for it. `askUser: true` is rejected before launching the CLI;
36
+ permission interrupts remain supported through the normal Lux answerer.
37
+
38
+ Copilot loads its native workspace instructions and bundled GitHub MCP server
39
+ by default, matching ordinary harness execution. Set `customInstructions: false`
40
+ or `builtinMcps: false` to disable them for a specific evaluation. Auto-update is
41
+ always off. The driver provides no ambient-configuration isolation: Copilot still
42
+ reads `~/.copilot` settings, MCP configuration, and credentials. Usage and
43
+ cost are recorded as unknown; `--usage-output-file` cannot be combined with
44
+ `--acp`.
45
+
46
+ The adapter has synthetic protocol and lifecycle tests plus an opt-in live
47
+ smoke task: `mise run smoke:harnesses -- copilot` from the repository root.
48
+ The live task uses your installed CLI, existing login, and model quota. CLI
49
+ `1.0.83` passed the authenticated file-copy smoke on 2026-09-30 after the account
50
+ received a Copilot seat and CLI access. A seat alone does not enable the CLI:
51
+ check the organization's Copilot CLI policy when GitHub returns a feature-access
52
+ 403. Lux also recognizes the CLI's native authorization diagnostic as an error
53
+ even when Copilot ends the turn normally.
54
+
55
+ Protocol references:
56
+
57
+ - [Copilot CLI command-line reference](https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-programmatic-reference)
58
+ - [Copilot CLI permissions](https://docs.github.com/en/copilot/concepts/agents/copilot-cli/about-copilot-cli)
59
+ - [ACP session modes](https://agentclientprotocol.com/protocol/session-modes)
60
+ - [ACP tool calls and permissions](https://agentclientprotocol.com/protocol/tool-calls)