humanish 0.107.0 → 0.109.0

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 (671) hide show
  1. package/ARCHITECTURE.md +73 -69
  2. package/CHANGELOG.md +27 -0
  3. package/CONTEXT.md +51 -44
  4. package/README.md +148 -175
  5. package/SECURITY.md +16 -26
  6. package/TELEMETRY.md +8 -6
  7. package/dist/actors/affordance.d.ts +4 -4
  8. package/dist/actors/affordance.js +12 -12
  9. package/dist/actors/agent-session.d.ts +2 -2
  10. package/dist/actors/agent-session.js +7 -7
  11. package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
  12. package/dist/actors/codex/app-server-actor-trace.js +1 -1
  13. package/dist/actors/codex/app-server-trace.js +2 -1
  14. package/dist/actors/codex/app-server-ui.js +1 -1
  15. package/dist/actors/codex/codex-admission.d.ts +91 -0
  16. package/dist/actors/codex/codex-admission.js +150 -0
  17. package/dist/actors/codex/restricted-executable.d.ts +4 -4
  18. package/dist/actors/codex/restricted-executable.js +8 -8
  19. package/dist/actors/codex/restricted-launch.d.ts +2 -1
  20. package/dist/actors/codex/restricted-launch.js +1 -1
  21. package/dist/actors/codex/restricted-participant.js +20 -18
  22. package/dist/actors/codex/restricted-policy.d.ts +2 -2
  23. package/dist/actors/codex/restricted-policy.js +2 -2
  24. package/dist/actors/codex/restricted-session.d.ts +3 -3
  25. package/dist/actors/codex/restricted-session.js +10 -5
  26. package/dist/actors/computer-use/actor.d.ts +18 -18
  27. package/dist/actors/computer-use/actor.js +4 -4
  28. package/dist/actors/computer-use/admission-limit.d.ts +3 -3
  29. package/dist/actors/computer-use/admission-limit.js +4 -4
  30. package/dist/actors/computer-use/executor-error.d.ts +2 -2
  31. package/dist/actors/computer-use/executor-error.js +3 -3
  32. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  33. package/dist/actors/computer-use/loop/actions.js +15 -15
  34. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  35. package/dist/actors/computer-use/loop/backstop.js +14 -12
  36. package/dist/actors/computer-use/loop/debrief.js +2 -2
  37. package/dist/actors/computer-use/loop/ending.d.ts +6 -6
  38. package/dist/actors/computer-use/loop/ending.js +18 -17
  39. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  40. package/dist/actors/computer-use/loop/observation.js +15 -14
  41. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  42. package/dist/actors/computer-use/loop/provider-call.js +12 -12
  43. package/dist/actors/computer-use/loop/session.d.ts +4 -4
  44. package/dist/actors/computer-use/loop/session.js +4 -4
  45. package/dist/actors/computer-use/loop/spend.d.ts +1 -1
  46. package/dist/actors/computer-use/loop/spend.js +1 -1
  47. package/dist/actors/computer-use/loop/trace.js +11 -9
  48. package/dist/actors/computer-use/loop/types.d.ts +47 -45
  49. package/dist/actors/computer-use/loop/usage.d.ts +2 -2
  50. package/dist/actors/computer-use/loop/usage.js +2 -2
  51. package/dist/actors/computer-use/loop.d.ts +6 -1
  52. package/dist/actors/computer-use/loop.js +26 -4
  53. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  54. package/dist/actors/computer-use/openai-context.js +214 -0
  55. package/dist/actors/computer-use/openai-provider.d.ts +13 -10
  56. package/dist/actors/computer-use/openai-provider.js +52 -41
  57. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  58. package/dist/actors/computer-use/openai-requests.js +82 -15
  59. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  60. package/dist/actors/computer-use/openai-wire.js +36 -34
  61. package/dist/actors/computer-use/provider-error.d.ts +4 -4
  62. package/dist/actors/computer-use/provider-error.js +6 -6
  63. package/dist/actors/contract.d.ts +82 -47
  64. package/dist/actors/contract.js +30 -24
  65. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  66. package/dist/actors/local-agent/claude-session.js +13 -12
  67. package/dist/actors/local-agent/cli.d.ts +9 -7
  68. package/dist/actors/local-agent/cli.js +24 -28
  69. package/dist/actors/local-agent/readiness.d.ts +2 -2
  70. package/dist/actors/local-agent/readiness.js +4 -4
  71. package/dist/actors/reasoning-effort.js +8 -8
  72. package/dist/actors/registry.d.ts +12 -12
  73. package/dist/actors/registry.js +21 -20
  74. package/dist/actors/scripted-browser/actor.d.ts +10 -10
  75. package/dist/actors/scripted-browser/actor.js +17 -17
  76. package/dist/actors/scripted-browser/browser-command.js +1 -1
  77. package/dist/actors/scripted-browser/steps.js +1 -1
  78. package/dist/actors/scripted-browser/types.d.ts +1 -1
  79. package/dist/actors/stop-conditions.d.ts +1 -1
  80. package/dist/analysis/automatic-completion.d.ts +7 -7
  81. package/dist/analysis/automatic-completion.js +1 -1
  82. package/dist/analysis/automatic-config.d.ts +6 -6
  83. package/dist/analysis/automatic-config.js +1 -1
  84. package/dist/analysis/codex-config.d.ts +6 -2
  85. package/dist/analysis/codex-config.js +22 -14
  86. package/dist/analysis/execute.d.ts +1 -1
  87. package/dist/analysis/execute.js +1 -1
  88. package/dist/analysis/service.js +5 -5
  89. package/dist/analysis/types.d.ts +6 -0
  90. package/dist/browser-control/client.js +16 -16
  91. package/dist/browser-control/dispatcher.js +4 -4
  92. package/dist/browser-control/protocol.js +14 -14
  93. package/dist/browser-control/recording-transfer.js +4 -4
  94. package/dist/browser-control/transport.js +7 -7
  95. package/dist/cli/commands/analysis-signals.d.ts +2 -2
  96. package/dist/cli/commands/analyze.js +19 -16
  97. package/dist/cli/commands/codex.js +9 -9
  98. package/dist/cli/commands/comms.js +48 -35
  99. package/dist/cli/commands/feedback.js +20 -21
  100. package/dist/cli/commands/migrate.d.ts +4 -0
  101. package/dist/cli/commands/migrate.js +65 -0
  102. package/dist/cli/commands/observe.d.ts +0 -1
  103. package/dist/cli/commands/observe.js +136 -112
  104. package/dist/cli/commands/run-command.d.ts +10 -0
  105. package/dist/cli/commands/run-command.js +85 -0
  106. package/dist/cli/commands/runs.js +136 -139
  107. package/dist/cli/commands/setup.d.ts +2 -2
  108. package/dist/cli/commands/setup.js +27 -24
  109. package/dist/cli/commands/study-format.d.ts +9 -0
  110. package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
  111. package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
  112. package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
  113. package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
  114. package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
  115. package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
  116. package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
  117. package/dist/cli/commands/study-route-run.d.ts +19 -0
  118. package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
  119. package/dist/cli/commands/study-route-scripted.d.ts +17 -0
  120. package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
  121. package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
  122. package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
  123. package/dist/cli/commands/study-route-terminal.d.ts +17 -0
  124. package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
  125. package/dist/cli/commands/study-run.d.ts +9 -0
  126. package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
  127. package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
  128. package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
  129. package/dist/cli/commands/study.d.ts +3 -0
  130. package/dist/cli/commands/study.js +146 -0
  131. package/dist/cli/commands/tui.d.ts +4 -4
  132. package/dist/cli/commands/tui.js +31 -31
  133. package/dist/cli/commands/watch.js +71 -121
  134. package/dist/cli/deprecations.d.ts +6 -0
  135. package/dist/cli/deprecations.js +18 -0
  136. package/dist/cli/doctor.d.ts +18 -8
  137. package/dist/cli/doctor.js +114 -59
  138. package/dist/cli/first-run-path.d.ts +15 -13
  139. package/dist/cli/first-run-path.js +35 -33
  140. package/dist/cli/io.d.ts +44 -9
  141. package/dist/cli/io.js +98 -23
  142. package/dist/cli/observer-follow.d.ts +3 -3
  143. package/dist/cli/observer-follow.js +6 -7
  144. package/dist/cli/orientation.d.ts +10 -7
  145. package/dist/cli/orientation.js +89 -47
  146. package/dist/cli/product-sentence.d.ts +6 -0
  147. package/dist/cli/product-sentence.js +6 -0
  148. package/dist/cli/program.d.ts +6 -1
  149. package/dist/cli/program.js +111 -43
  150. package/dist/cli/telemetry.d.ts +16 -16
  151. package/dist/cli/telemetry.js +46 -44
  152. package/dist/cli.js +1 -1
  153. package/dist/comms/capture-surface.d.ts +13 -12
  154. package/dist/comms/capture-surface.js +23 -22
  155. package/dist/comms/catch-host.d.ts +7 -7
  156. package/dist/comms/catch-host.js +17 -17
  157. package/dist/comms/connections.d.ts +1 -1
  158. package/dist/comms/connections.js +2 -2
  159. package/dist/comms/email-catch.d.ts +3 -3
  160. package/dist/comms/email-catch.js +8 -8
  161. package/dist/comms/external-evidence.d.ts +5 -5
  162. package/dist/comms/external-evidence.js +5 -4
  163. package/dist/comms/extract.js +2 -2
  164. package/dist/comms/fake-inbox.d.ts +3 -3
  165. package/dist/comms/fake-inbox.js +3 -3
  166. package/dist/comms/receiving-render.d.ts +1 -1
  167. package/dist/comms/receiving-render.js +2 -2
  168. package/dist/comms/receiving-runtime.d.ts +4 -4
  169. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  170. package/dist/comms/sandbox-catch-script.js +6 -6
  171. package/dist/comms/sandbox-catch.d.ts +38 -39
  172. package/dist/comms/sandbox-catch.js +36 -37
  173. package/dist/comms/setup.d.ts +2 -2
  174. package/dist/comms/setup.js +56 -25
  175. package/dist/comms/thread-evidence.d.ts +1 -1
  176. package/dist/comms/thread-evidence.js +6 -6
  177. package/dist/comms/types.d.ts +6 -6
  178. package/dist/comms/types.js +3 -3
  179. package/dist/evidence/frame-signature.d.ts +1 -1
  180. package/dist/evidence/frame-signature.js +4 -4
  181. package/dist/evidence/redaction.d.ts +3 -3
  182. package/dist/evidence/redaction.js +4 -4
  183. package/dist/feedback/draft.js +38 -80
  184. package/dist/feedback/export-bundle.js +1 -1
  185. package/dist/feedback/export.d.ts +5 -1
  186. package/dist/feedback/export.js +10 -10
  187. package/dist/feedback/feedback.d.ts +2 -2
  188. package/dist/feedback/feedback.js +21 -3
  189. package/dist/feedback/proof.d.ts +1 -1
  190. package/dist/feedback/proof.js +2 -2
  191. package/dist/guest/bootstrap.js +6 -6
  192. package/dist/guest/browser-tools.js +8 -8
  193. package/dist/guest/chromium-text.js +19 -19
  194. package/dist/guest/desktop-executor.d.ts +2 -2
  195. package/dist/guest/desktop-executor.js +20 -20
  196. package/dist/guest/desktop-keys.js +4 -4
  197. package/dist/guest/desktop-media.d.ts +2 -2
  198. package/dist/guest/desktop-media.js +16 -16
  199. package/dist/guest/desktop-native.d.ts +1 -1
  200. package/dist/guest/desktop-native.js +10 -10
  201. package/dist/guest/runtime-desktop.js +2 -2
  202. package/dist/guest/runtime-processes.d.ts +2 -2
  203. package/dist/guest/runtime-processes.js +2 -2
  204. package/dist/guest/runtime.js +6 -6
  205. package/dist/index.d.ts +14 -14
  206. package/dist/index.js +8 -8
  207. package/dist/keys/key-resolution.d.ts +5 -5
  208. package/dist/keys/key-resolution.js +23 -23
  209. package/dist/observer/artifact.d.ts +2 -2
  210. package/dist/observer/artifact.js +7 -7
  211. package/dist/observer/data.d.ts +6 -6
  212. package/dist/observer/data.js +5 -4
  213. package/dist/observer/exposure.d.ts +1 -1
  214. package/dist/observer/exposure.js +11 -11
  215. package/dist/observer/http.js +1 -1
  216. package/dist/observer/library.d.ts +3 -1
  217. package/dist/observer/library.js +8 -3
  218. package/dist/observer/listen.js +5 -4
  219. package/dist/observer/render.d.ts +1 -1
  220. package/dist/observer/render.js +17 -6
  221. package/dist/observer/run-routes.d.ts +4 -3
  222. package/dist/observer/run-routes.js +38 -13
  223. package/dist/observer/serve.d.ts +1 -1
  224. package/dist/observer/serve.js +7 -3
  225. package/dist/observer/tunnel.js +1 -1
  226. package/dist/observer-app.html +4 -4
  227. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  228. package/dist/routes/computer-use/bundle-parts.js +18 -17
  229. package/dist/routes/computer-use/bundle.d.ts +2 -2
  230. package/dist/routes/computer-use/bundle.js +10 -9
  231. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
  232. package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
  233. package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
  234. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
  235. package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
  236. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
  237. package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
  238. package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
  239. package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
  240. package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
  241. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  242. package/dist/routes/computer-use/external-comms.js +1 -1
  243. package/dist/routes/computer-use/fanout-bundle.js +27 -26
  244. package/dist/routes/computer-use/fanout-records.js +12 -13
  245. package/dist/routes/computer-use/live-flush.d.ts +4 -4
  246. package/dist/routes/computer-use/live-flush.js +6 -6
  247. package/dist/routes/computer-use/live-phase.d.ts +5 -4
  248. package/dist/routes/computer-use/live-phase.js +8 -8
  249. package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
  250. package/dist/routes/computer-use/local-tree-pack.js +1 -1
  251. package/dist/routes/computer-use/local-vm.d.ts +8 -8
  252. package/dist/routes/computer-use/local-vm.js +3 -3
  253. package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
  254. package/dist/routes/computer-use/participant-desktop.js +5 -5
  255. package/dist/routes/computer-use/participant-execution.d.ts +4 -4
  256. package/dist/routes/computer-use/participant-execution.js +10 -10
  257. package/dist/routes/computer-use/participant-model.d.ts +6 -0
  258. package/dist/routes/computer-use/participant-model.js +33 -15
  259. package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
  260. package/dist/routes/computer-use/participant-prompt.js +9 -9
  261. package/dist/routes/computer-use/participant-runs.d.ts +16 -16
  262. package/dist/routes/computer-use/participant-runs.js +26 -25
  263. package/dist/routes/computer-use/plan.d.ts +12 -12
  264. package/dist/routes/computer-use/plan.js +42 -42
  265. package/dist/routes/computer-use/preflight.d.ts +5 -5
  266. package/dist/routes/computer-use/preflight.js +25 -25
  267. package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
  268. package/dist/routes/computer-use/rerun-selection.js +4 -3
  269. package/dist/routes/computer-use/result.d.ts +4 -4
  270. package/dist/routes/computer-use/result.js +22 -21
  271. package/dist/routes/computer-use/route.d.ts +12 -11
  272. package/dist/routes/computer-use/route.js +31 -30
  273. package/dist/routes/computer-use/self-report.d.ts +7 -7
  274. package/dist/routes/computer-use/self-report.js +32 -32
  275. package/dist/routes/computer-use/setup.d.ts +23 -23
  276. package/dist/routes/computer-use/setup.js +28 -29
  277. package/dist/routes/computer-use/single-bundle.d.ts +11 -11
  278. package/dist/routes/computer-use/single-bundle.js +40 -41
  279. package/dist/routes/computer-use/subject-projection.d.ts +4 -4
  280. package/dist/routes/computer-use/subject-projection.js +6 -6
  281. package/dist/routes/computer-use/types.d.ts +71 -73
  282. package/dist/routes/computer-use/types.js +12 -12
  283. package/dist/routes/preview.d.ts +13 -7
  284. package/dist/routes/preview.js +11 -7
  285. package/dist/routes/scripted/bundle.d.ts +7 -7
  286. package/dist/routes/scripted/bundle.js +20 -18
  287. package/dist/routes/scripted/plan.d.ts +8 -8
  288. package/dist/routes/scripted/plan.js +13 -13
  289. package/dist/routes/scripted/result.d.ts +3 -3
  290. package/dist/routes/scripted/result.js +13 -13
  291. package/dist/routes/scripted/route.d.ts +9 -9
  292. package/dist/routes/scripted/route.js +15 -16
  293. package/dist/routes/scripted/scenario.d.ts +1 -1
  294. package/dist/routes/scripted/scenario.js +5 -5
  295. package/dist/routes/scripted/setup.d.ts +6 -6
  296. package/dist/routes/scripted/setup.js +8 -8
  297. package/dist/routes/scripted/subject.d.ts +5 -5
  298. package/dist/routes/scripted/subject.js +4 -4
  299. package/dist/routes/scripted/surface-records.d.ts +1 -1
  300. package/dist/routes/scripted/surface-records.js +4 -4
  301. package/dist/routes/scripted/surface-sessions.d.ts +3 -3
  302. package/dist/routes/scripted/types.d.ts +18 -20
  303. package/dist/routes/scripted/types.js +2 -2
  304. package/dist/routes/shared-world/bundle-records.js +11 -10
  305. package/dist/routes/shared-world/bundle.d.ts +5 -5
  306. package/dist/routes/shared-world/bundle.js +46 -43
  307. package/dist/routes/shared-world/checkpoints.d.ts +4 -4
  308. package/dist/routes/shared-world/checkpoints.js +2 -2
  309. package/dist/routes/shared-world/comms.d.ts +14 -14
  310. package/dist/routes/shared-world/comms.js +19 -18
  311. package/dist/routes/shared-world/external-public.d.ts +4 -3
  312. package/dist/routes/shared-world/external-public.js +16 -12
  313. package/dist/routes/shared-world/handoff.d.ts +7 -6
  314. package/dist/routes/shared-world/handoff.js +65 -57
  315. package/dist/routes/shared-world/lobby-code.d.ts +2 -2
  316. package/dist/routes/shared-world/lobby-code.js +9 -9
  317. package/dist/routes/shared-world/participant-specs.d.ts +10 -9
  318. package/dist/routes/shared-world/participant-specs.js +38 -31
  319. package/dist/routes/shared-world/plan.d.ts +9 -9
  320. package/dist/routes/shared-world/plan.js +16 -16
  321. package/dist/routes/shared-world/provenance.d.ts +2 -2
  322. package/dist/routes/shared-world/provenance.js +2 -2
  323. package/dist/routes/shared-world/provisioned.d.ts +8 -8
  324. package/dist/routes/shared-world/provisioned.js +18 -17
  325. package/dist/routes/shared-world/result.d.ts +6 -6
  326. package/dist/routes/shared-world/result.js +29 -29
  327. package/dist/routes/shared-world/route.d.ts +11 -11
  328. package/dist/routes/shared-world/route.js +40 -39
  329. package/dist/routes/shared-world/setup.d.ts +16 -16
  330. package/dist/routes/shared-world/setup.js +23 -23
  331. package/dist/routes/shared-world/types.d.ts +55 -53
  332. package/dist/routes/shared-world/types.js +4 -4
  333. package/dist/routes/terminal/adapter.d.ts +5 -5
  334. package/dist/routes/terminal/adapter.js +9 -9
  335. package/dist/routes/terminal/bundle.d.ts +13 -13
  336. package/dist/routes/terminal/bundle.js +28 -27
  337. package/dist/routes/terminal/credentials.d.ts +8 -8
  338. package/dist/routes/terminal/credentials.js +12 -12
  339. package/dist/routes/terminal/dry-run.d.ts +4 -4
  340. package/dist/routes/terminal/dry-run.js +12 -12
  341. package/dist/routes/terminal/encoding.js +2 -2
  342. package/dist/routes/terminal/ledger.d.ts +5 -5
  343. package/dist/routes/terminal/ledger.js +14 -14
  344. package/dist/routes/terminal/lifetime.d.ts +1 -1
  345. package/dist/routes/terminal/lifetime.js +1 -1
  346. package/dist/routes/terminal/live-finish.d.ts +2 -2
  347. package/dist/routes/terminal/live-finish.js +10 -10
  348. package/dist/routes/terminal/live-sandbox.d.ts +2 -2
  349. package/dist/routes/terminal/live-sandbox.js +15 -15
  350. package/dist/routes/terminal/participant-text.js +2 -1
  351. package/dist/routes/terminal/persona.d.ts +2 -2
  352. package/dist/routes/terminal/persona.js +3 -3
  353. package/dist/routes/terminal/plan.d.ts +7 -7
  354. package/dist/routes/terminal/plan.js +15 -15
  355. package/dist/routes/terminal/recorder.js +2 -2
  356. package/dist/routes/terminal/result.d.ts +5 -5
  357. package/dist/routes/terminal/result.js +14 -14
  358. package/dist/routes/terminal/route.d.ts +9 -9
  359. package/dist/routes/terminal/route.js +19 -20
  360. package/dist/routes/terminal/sandbox.d.ts +1 -1
  361. package/dist/routes/terminal/sandbox.js +1 -1
  362. package/dist/routes/terminal/session.d.ts +5 -5
  363. package/dist/routes/terminal/session.js +14 -13
  364. package/dist/routes/terminal/token-usage.d.ts +1 -1
  365. package/dist/routes/terminal/token-usage.js +7 -8
  366. package/dist/routes/terminal/trace.d.ts +4 -4
  367. package/dist/routes/terminal/trace.js +2 -2
  368. package/dist/routes/terminal/types.d.ts +48 -50
  369. package/dist/routes/terminal/types.js +5 -5
  370. package/dist/run/bundle-shape.js +3 -3
  371. package/dist/run/bundle.d.ts +49 -49
  372. package/dist/run/bundle.js +3 -2
  373. package/dist/run/cost-summary.js +3 -3
  374. package/dist/run/costs.d.ts +23 -0
  375. package/dist/run/costs.js +79 -44
  376. package/dist/run/detail.d.ts +6 -6
  377. package/dist/run/detail.js +4 -4
  378. package/dist/run/dry-run-inputs.d.ts +1 -1
  379. package/dist/run/dry-run-inputs.js +2 -2
  380. package/dist/run/dry-run.js +20 -20
  381. package/dist/run/judge.d.ts +19 -13
  382. package/dist/run/judge.js +18 -8
  383. package/dist/run/outcomes.d.ts +1 -1
  384. package/dist/run/participant.d.ts +1 -1
  385. package/dist/run/paths.d.ts +1 -1
  386. package/dist/run/paths.js +1 -1
  387. package/dist/run/preflight-receipts.js +1 -1
  388. package/dist/run/pricing.d.ts +11 -6
  389. package/dist/run/pricing.js +22 -15
  390. package/dist/run/projection.d.ts +46 -46
  391. package/dist/run/projection.js +57 -57
  392. package/dist/run/reclaim.d.ts +1 -1
  393. package/dist/run/reclaim.js +3 -3
  394. package/dist/run/results.d.ts +5 -5
  395. package/dist/run/run-cost.d.ts +53 -0
  396. package/dist/run/run-cost.js +105 -0
  397. package/dist/run/run-index-analysis.d.ts +15 -0
  398. package/dist/run/run-index-analysis.js +77 -0
  399. package/dist/run/run-index.d.ts +19 -7
  400. package/dist/run/run-index.js +77 -64
  401. package/dist/run/run-not-found.d.ts +5 -0
  402. package/dist/run/run-not-found.js +15 -0
  403. package/dist/run/run.d.ts +6 -5
  404. package/dist/run/run.js +3 -3
  405. package/dist/run/sandbox-receipts.d.ts +2 -2
  406. package/dist/run/sandbox-receipts.js +3 -3
  407. package/dist/run/shared-world-evidence.d.ts +37 -36
  408. package/dist/run/shared-world-evidence.js +4 -4
  409. package/dist/run/shared-world-shape.d.ts +1 -1
  410. package/dist/run/shared-world-shape.js +7 -7
  411. package/dist/run/stats.d.ts +14 -8
  412. package/dist/run/stats.js +121 -63
  413. package/dist/run/status.d.ts +16 -29
  414. package/dist/run/status.js +10 -29
  415. package/dist/run/stored-runs.js +2 -1
  416. package/dist/run/stream-shape.js +1 -1
  417. package/dist/run/streams.d.ts +7 -7
  418. package/dist/run/study-provenance.d.ts +49 -0
  419. package/dist/run/study-provenance.js +66 -0
  420. package/dist/run/study-result.d.ts +11 -0
  421. package/dist/run/study-result.js +9 -0
  422. package/dist/run/text.d.ts +2 -0
  423. package/dist/run/text.js +4 -0
  424. package/dist/run-study.d.ts +112 -0
  425. package/dist/{run-lab.js → run-study.js} +52 -47
  426. package/dist/{lab → study}/adapter-extension.d.ts +15 -27
  427. package/dist/{lab → study}/adapter-extension.js +10 -45
  428. package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
  429. package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
  430. package/dist/study/composition-rules.d.ts +7 -0
  431. package/dist/{lab → study}/composition-rules.js +53 -53
  432. package/dist/study/config.d.ts +15 -0
  433. package/dist/{lab → study}/config.js +98 -41
  434. package/dist/study/convert.d.ts +33 -0
  435. package/dist/study/convert.js +432 -0
  436. package/dist/{lab → study}/device-presets.d.ts +10 -10
  437. package/dist/{lab → study}/device-presets.js +11 -11
  438. package/dist/study/discover.d.ts +75 -0
  439. package/dist/{lab → study}/discover.js +134 -95
  440. package/dist/{lab → study}/doctor.d.ts +19 -12
  441. package/dist/{lab → study}/doctor.js +58 -20
  442. package/dist/study/field-paths.d.ts +12 -0
  443. package/dist/study/field-paths.js +126 -0
  444. package/dist/study/files.d.ts +26 -0
  445. package/dist/study/files.js +44 -0
  446. package/dist/{lab → study}/init-templates.d.ts +2 -2
  447. package/dist/study/init-templates.js +421 -0
  448. package/dist/{lab → study}/init.d.ts +2 -2
  449. package/dist/{lab → study}/init.js +46 -11
  450. package/dist/study/keys.d.ts +4 -0
  451. package/dist/{lab → study}/keys.js +46 -12
  452. package/dist/study/migrate.d.ts +48 -0
  453. package/dist/study/migrate.js +408 -0
  454. package/dist/study/owned-files.d.ts +38 -0
  455. package/dist/study/owned-files.js +182 -0
  456. package/dist/{lab → study}/parse/actors.d.ts +5 -5
  457. package/dist/{lab → study}/parse/actors.js +14 -14
  458. package/dist/study/parse/comms.d.ts +12 -0
  459. package/dist/{lab → study}/parse/comms.js +5 -5
  460. package/dist/study/parse/execution.d.ts +19 -0
  461. package/dist/{lab → study}/parse/execution.js +13 -13
  462. package/dist/study/parse/study-v3.d.ts +21 -0
  463. package/dist/study/parse/study-v3.js +259 -0
  464. package/dist/study/parse/subject-state.d.ts +30 -0
  465. package/dist/{lab → study}/parse/subject-state.js +19 -19
  466. package/dist/{lab → study}/parse/subject.d.ts +3 -3
  467. package/dist/{lab → study}/parse/subject.js +34 -34
  468. package/dist/{lab → study}/parse/values.d.ts +3 -3
  469. package/dist/{lab → study}/parse/values.js +3 -3
  470. package/dist/{lab → study}/persona-resolve.d.ts +8 -8
  471. package/dist/{lab → study}/persona-resolve.js +6 -6
  472. package/dist/{lab → study}/plan-base.d.ts +7 -7
  473. package/dist/{lab → study}/plan-base.js +1 -1
  474. package/dist/{lab → study}/plan-participants.d.ts +12 -12
  475. package/dist/{lab → study}/plan-participants.js +4 -4
  476. package/dist/{lab → study}/plan-types.d.ts +31 -31
  477. package/dist/{lab → study}/plan-types.js +2 -2
  478. package/dist/study/plan.d.ts +13 -0
  479. package/dist/study/plan.js +101 -0
  480. package/dist/study/preflight-probes.d.ts +3 -0
  481. package/dist/{lab → study}/preflight-probes.js +20 -19
  482. package/dist/study/preflight-result.d.ts +8 -0
  483. package/dist/{lab → study}/preflight-result.js +5 -4
  484. package/dist/study/preflight.d.ts +94 -0
  485. package/dist/{lab → study}/preflight.js +12 -12
  486. package/dist/{lab → study}/requirements.d.ts +3 -3
  487. package/dist/{lab → study}/requirements.js +1 -1
  488. package/dist/study/route-inputs.d.ts +28 -0
  489. package/dist/{lab → study}/route-inputs.js +1 -1
  490. package/dist/{lab → study}/routing.d.ts +39 -33
  491. package/dist/{lab → study}/routing.js +60 -29
  492. package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
  493. package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
  494. package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
  495. package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
  496. package/dist/study/run-study-options.d.ts +28 -0
  497. package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
  498. package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
  499. package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
  500. package/dist/{lab → study}/summary.d.ts +16 -15
  501. package/dist/{lab → study}/summary.js +21 -21
  502. package/dist/{lab → study}/tasks.d.ts +18 -18
  503. package/dist/{lab → study}/tasks.js +14 -14
  504. package/dist/{lab → study}/types.d.ts +202 -196
  505. package/dist/{lab → study}/types.js +3 -1
  506. package/dist/{lab → study}/validation.d.ts +27 -27
  507. package/dist/{lab → study}/validation.js +53 -51
  508. package/dist/study/warnings.d.ts +12 -0
  509. package/dist/{lab → study}/warnings.js +62 -34
  510. package/dist/subject/clone.d.ts +7 -7
  511. package/dist/subject/clone.js +2 -2
  512. package/dist/subject/desktop-cli.d.ts +1 -1
  513. package/dist/subject/desktop-cli.js +2 -2
  514. package/dist/subject/local-tree-archive.d.ts +2 -2
  515. package/dist/subject/local-tree-archive.js +4 -4
  516. package/dist/subject/local-tree.d.ts +4 -4
  517. package/dist/subject/node-bootstrap.js +1 -1
  518. package/dist/subject/runtime.js +9 -10
  519. package/dist/subject/serve.d.ts +5 -5
  520. package/dist/subject/serve.js +3 -3
  521. package/dist/subject/state.d.ts +4 -4
  522. package/dist/subject/state.js +1 -1
  523. package/dist/subject/steps.d.ts +6 -6
  524. package/dist/subject/steps.js +5 -5
  525. package/dist/substrates/command-failure.d.ts +3 -3
  526. package/dist/substrates/command-failure.js +3 -3
  527. package/dist/substrates/desktop-session.js +2 -2
  528. package/dist/substrates/detached.d.ts +6 -6
  529. package/dist/substrates/detached.js +7 -7
  530. package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
  531. package/dist/substrates/e2b/cdp-probe.js +14 -17
  532. package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
  533. package/dist/substrates/e2b/desktop-browser.js +9 -9
  534. package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
  535. package/dist/substrates/e2b/desktop-cdp.js +9 -9
  536. package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
  537. package/dist/substrates/e2b/desktop-executor.js +13 -13
  538. package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
  539. package/dist/substrates/e2b/desktop-geometry.js +8 -8
  540. package/dist/substrates/e2b/desktop-media.d.ts +4 -4
  541. package/dist/substrates/e2b/desktop-media.js +1 -1
  542. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  543. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  544. package/dist/substrates/e2b/lifetime.js +1 -1
  545. package/dist/substrates/e2b/sandbox.d.ts +4 -4
  546. package/dist/substrates/e2b/sandbox.js +2 -2
  547. package/dist/substrates/e2b/sdk.d.ts +12 -12
  548. package/dist/substrates/e2b/sdk.js +7 -7
  549. package/dist/substrates/local/runtime-config.d.ts +4 -4
  550. package/dist/substrates/local/runtime-config.js +4 -4
  551. package/dist/tui/actions.d.ts +1 -1
  552. package/dist/tui/actions.js +13 -13
  553. package/dist/tui/contract.d.ts +23 -23
  554. package/dist/tui/contract.js +11 -11
  555. package/dist/tui/launch.d.ts +7 -7
  556. package/dist/tui/launch.js +36 -31
  557. package/dist/tui/project.js +5 -5
  558. package/dist/tui-app.js +139 -139
  559. package/dist/verify/actor.d.ts +8 -8
  560. package/dist/verify/actor.js +36 -36
  561. package/dist/verify/artifacts.d.ts +2 -2
  562. package/dist/verify/artifacts.js +3 -3
  563. package/dist/verify/context-growth.d.ts +9 -0
  564. package/dist/verify/context-growth.js +62 -0
  565. package/dist/verify/costs.d.ts +6 -6
  566. package/dist/verify/costs.js +8 -8
  567. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  568. package/dist/verify/shared-world-concurrent.js +79 -76
  569. package/dist/verify/shared-world.d.ts +2 -2
  570. package/dist/verify/shared-world.js +16 -16
  571. package/dist/verify/subject.d.ts +5 -5
  572. package/dist/verify/subject.js +19 -19
  573. package/dist/verify/verify.js +94 -44
  574. package/docs/README.md +25 -32
  575. package/docs/architecture/actor-contract.md +60 -91
  576. package/docs/architecture/browser-control.md +1 -1
  577. package/docs/architecture/desktop-sessions.md +7 -7
  578. package/docs/architecture/external-public-shared-world.md +68 -65
  579. package/docs/architecture/github-feedback-loop.md +2 -5
  580. package/docs/architecture/guest-desktop.md +2 -2
  581. package/docs/architecture/observer.md +34 -34
  582. package/docs/architecture/restricted-codex-analysis.md +34 -28
  583. package/docs/architecture/serve.md +34 -37
  584. package/docs/architecture/state-driven-executor.md +55 -58
  585. package/docs/architecture/task-protocol-support.md +6 -6
  586. package/docs/architecture/terminal-product-route.md +70 -110
  587. package/docs/contracts/README.md +24 -0
  588. package/docs/contracts/adapter-admission.md +3 -3
  589. package/docs/contracts/adapter-fixtures.md +4 -7
  590. package/docs/contracts/core.md +1 -3
  591. package/docs/contracts/errors.md +62 -0
  592. package/docs/contracts/feedback.md +8 -9
  593. package/docs/contracts/policy.md +7 -12
  594. package/docs/contracts/run-bundle.md +42 -44
  595. package/docs/contracts/schemas.md +446 -368
  596. package/docs/contracts/study-analysis.md +7 -4
  597. package/docs/contracts/study-costs.md +28 -9
  598. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  599. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  600. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  601. package/docs/principles/actor-fidelity.md +4 -4
  602. package/docs/principles/engineering.md +3 -3
  603. package/docs/principles/invariants-and-defaults.md +38 -38
  604. package/docs/principles/self-driving-harness.md +1 -5
  605. package/docs/principles/three-roles.md +1 -1
  606. package/docs/product/automatic-analysis.md +7 -7
  607. package/examples/README.md +1 -1
  608. package/examples/participant/README.md +5 -5
  609. package/examples/participant/run.mjs +11 -10
  610. package/examples/scorer/README.md +3 -3
  611. package/examples/scorer/run.mjs +11 -12
  612. package/examples/scorer/scorer.mjs +3 -3
  613. package/package.json +16 -17
  614. package/skills/humanish/SKILL.md +64 -60
  615. package/skills/humanish/agents/openai.yaml +1 -1
  616. package/AGENTS.md +0 -99
  617. package/CONTRIBUTING.md +0 -148
  618. package/dist/actors/codex/qualified-versions.d.ts +0 -72
  619. package/dist/actors/codex/qualified-versions.js +0 -132
  620. package/dist/cli/commands/lab-format.d.ts +0 -8
  621. package/dist/cli/commands/lab-route-run.d.ts +0 -19
  622. package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
  623. package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
  624. package/dist/cli/commands/lab-run.d.ts +0 -9
  625. package/dist/cli/commands/lab.d.ts +0 -3
  626. package/dist/cli/commands/lab.js +0 -199
  627. package/dist/cli/renamed-options.d.ts +0 -11
  628. package/dist/cli/renamed-options.js +0 -18
  629. package/dist/lab/composition-rules.d.ts +0 -7
  630. package/dist/lab/config.d.ts +0 -7
  631. package/dist/lab/discover.d.ts +0 -65
  632. package/dist/lab/init-templates.js +0 -416
  633. package/dist/lab/keys.d.ts +0 -2
  634. package/dist/lab/parse/comms.d.ts +0 -12
  635. package/dist/lab/parse/execution.d.ts +0 -19
  636. package/dist/lab/parse/subject-state.d.ts +0 -30
  637. package/dist/lab/plan.d.ts +0 -19
  638. package/dist/lab/plan.js +0 -132
  639. package/dist/lab/preflight-probes.d.ts +0 -3
  640. package/dist/lab/preflight-result.d.ts +0 -7
  641. package/dist/lab/preflight.d.ts +0 -92
  642. package/dist/lab/route-inputs.d.ts +0 -28
  643. package/dist/lab/run-lab-options.d.ts +0 -28
  644. package/dist/lab/warnings.d.ts +0 -2
  645. package/dist/observer/static.d.ts +0 -39
  646. package/dist/observer/static.js +0 -369
  647. package/dist/run-lab.d.ts +0 -112
  648. package/docs/architecture/comms-inbox.md +0 -122
  649. package/docs/architecture/desktop-recording.md +0 -80
  650. package/docs/architecture/local-browser-runtime.md +0 -178
  651. package/docs/architecture/observer-review.md +0 -144
  652. package/docs/architecture/participant-media.md +0 -90
  653. package/docs/architecture/project-layout.md +0 -62
  654. package/docs/architecture/real-email-receiving.md +0 -136
  655. package/docs/assets/humanish-drawdb-hero.png +0 -0
  656. package/docs/assets/humanish-observer-hero.png +0 -0
  657. package/docs/goals/current.md +0 -207
  658. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  659. package/docs/product/open-source-install-experience.md +0 -240
  660. package/docs/ramp/README.md +0 -295
  661. package/docs/release/open-source-readiness.md +0 -222
  662. package/docs/release/public-readiness-standard.md +0 -210
  663. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  664. /package/dist/{lab → study}/init-paths.d.ts +0 -0
  665. /package/dist/{lab → study}/init-paths.js +0 -0
  666. /package/dist/{lab → study}/init-plan.d.ts +0 -0
  667. /package/dist/{lab → study}/init-plan.js +0 -0
  668. /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
  669. /package/dist/{lab → study}/participant-assignment.js +0 -0
  670. /package/dist/{lab → study}/persona.d.ts +0 -0
  671. /package/dist/{lab → study}/persona.js +0 -0
@@ -1,5 +1,5 @@
1
1
  // Find a Chromium binary on the host for the scripted browser: HUMANISH_BROWSER_COMMAND first, then
2
- // the macOS Chrome path, then google-chrome, chromium and chromium-browser on PATH. A candidate
2
+ // the macOS Chrome path, then google-chrome, chromium and chromium-browser on `PATH`. A candidate
3
3
  // counts only if `--version` runs.
4
4
  import { execFile } from "node:child_process";
5
5
  import path from "node:path";
@@ -176,7 +176,7 @@ async function waitForPageText(page, expectedText, timeoutMs) {
176
176
  }
177
177
  export function buildBlockedBrowserPersonaSteps(args) {
178
178
  // The journey never ran, so no screenshot was written for these steps. The
179
- // failure IS the evidence: keep the blocked status + reason, but omit the
179
+ // failure is the evidence: keep the blocked status + reason, but omit the
180
180
  // screenshot reference so the bundle never claims an artifact that does not
181
181
  // exist (otherwise verify's missingLocalEvidenceArtifacts fails closed on
182
182
  // evidence that was never meant to exist).
@@ -108,7 +108,7 @@ export interface BrowserPersonaStepCapture {
108
108
  /**
109
109
  * Path to the step screenshot the producer actually wrote. Omitted for blocked
110
110
  * steps where the failure itself is the recorded evidence and no screenshot was
111
- * written — the bundle must not reference an artifact that does not exist. A step that
111
+ * written: the bundle must not reference an artifact that does not exist. A step that
112
112
  * ran and attempted a screenshot keeps this even when its assertions failed, so a broken
113
113
  * producer still fails verify.
114
114
  */
@@ -14,7 +14,7 @@ export interface StopWhen {
14
14
  any: StopWhenRule[];
15
15
  }
16
16
  /**
17
- * A declared observation window (#510): once `when` matches (or at the start, when `when` is
17
+ * A declared observation window: once `when` matches (or at the start, when `when` is
18
18
  * absent), the harness holds the page for `ms`, captures a frame every `everyMs`, takes no action
19
19
  * and requests no model turn, then hands control back to the participant (`then: continue`) or
20
20
  * ends the session (`then: stop`). Bounded by the session budget: a window that would outlast it
@@ -1,16 +1,16 @@
1
1
  import { FinishedRun } from "../run/run.js";
2
2
  import type { AnalysisConfig } from "./types.js";
3
- import type { LabDeps } from "../lab/lab-deps.js";
4
- import type { LabEvent } from "../lab/run-lab-events.js";
3
+ import type { StudyDeps } from "../study/study-deps.js";
4
+ import type { StudyEvent } from "../study/run-study-events.js";
5
5
  import { type AutomaticAnalysisDeps } from "./automatic.js";
6
6
  import type { AutomaticAnalysisOutcome } from "./job.js";
7
7
  /** What a route's input gives its analysis: the test's runner and deps, the signal and onEvent. */
8
8
  export interface AnalysisInput {
9
- readonly deps?: Pick<LabDeps, "analysis">;
9
+ readonly deps?: Pick<StudyDeps, "analysis">;
10
10
  /** Cancels the analysis only. */
11
11
  readonly analysisSignal?: AbortSignal;
12
12
  /** Receives analysis-started and analysis-finished. */
13
- readonly emit?: (event: LabEvent) => void;
13
+ readonly emit?: (event: StudyEvent) => void;
14
14
  }
15
15
  export interface AutomaticAnalysisResult {
16
16
  automaticAnalysis?: AutomaticAnalysisOutcome;
@@ -27,15 +27,15 @@ export declare function completeAutomaticAnalysis<T extends {
27
27
  runId: string;
28
28
  dryRun: boolean;
29
29
  }>(result: T, finished: FinishedRun | undefined, config: AnalysisConfig | undefined, input: AnalysisInput | undefined, { trigger, preferLargerOutput, refusal, }?: {
30
- /** "default" when the lab declared no analysis; its missing-key skip is not a failure. */
30
+ /** "default" when the study declared no analysis; its missing-key skip is not a failure. */
31
31
  trigger?: "default" | "explicit";
32
- /** The lab omitted an output limit, so a larger one may be used within the admission budget. */
32
+ /** The study omitted an output limit, so a larger one may be used within the admission budget. */
33
33
  preferLargerOutput?: boolean;
34
34
  /** The route's reason not to analyze this run; see AutomaticAnalysisDeps.refusal. */
35
35
  refusal?: AutomaticAnalysisDeps["refusal"];
36
36
  }): Promise<T & AutomaticAnalysisResult>;
37
37
  /**
38
- * True when an analysis the lab never declared was refused because its conservative estimate is
38
+ * True when an analysis the study never declared was refused because its conservative estimate is
39
39
  * over the default cap. The author did not ask for it, so the refusal does not fail the run;
40
40
  * `humanish analyze --max-cost` can still run it.
41
41
  */
@@ -72,7 +72,7 @@ export async function completeAutomaticAnalysis(result, finished, config, input,
72
72
  }
73
73
  }
74
74
  /**
75
- * True when an analysis the lab never declared was refused because its conservative estimate is
75
+ * True when an analysis the study never declared was refused because its conservative estimate is
76
76
  * over the default cap. The author did not ask for it, so the refusal does not fail the run;
77
77
  * `humanish analyze --max-cost` can still run it.
78
78
  */
@@ -1,14 +1,14 @@
1
- import type { LabRoute } from "../lab/plan.js";
1
+ import type { StudyRoute } from "../study/plan.js";
2
2
  import type { AnalysisConfig } from "./types.js";
3
3
  export declare const DEFAULT_ANALYSIS_TIMEOUT_MS = 600000;
4
4
  export declare const DEFAULT_ANALYSIS_MODEL = "gpt-6-astra";
5
- interface LabAnalysisSettings {
5
+ interface StudyAnalysisSettings {
6
6
  model?: string;
7
7
  question?: string;
8
8
  timeoutMs?: number;
9
9
  }
10
- /** The lab's review.analysis: a provider selection for a separate review after a live study. */
11
- export type LabAnalysis = LabAnalysisSettings & ({
10
+ /** The study's review.analysis: a provider selection for a separate review after a live study. */
11
+ export type StudyAnalysis = StudyAnalysisSettings & ({
12
12
  provider?: "openai";
13
13
  maxCostUsd: number;
14
14
  maxOutputTokens?: number;
@@ -17,7 +17,7 @@ export type LabAnalysis = LabAnalysisSettings & ({
17
17
  maxCostUsd?: null;
18
18
  maxOutputTokens?: null;
19
19
  });
20
- /** The spend cap on an analysis the lab did not declare. */
20
+ /** The spend cap on an analysis the study did not declare. */
21
21
  export declare const DEFAULT_ANALYSIS_MAX_COST_USD = 3;
22
22
  /** Called for parsed manifests and direct library configs, before participant execution. */
23
23
  export declare function resolveAutomaticAnalysis(raw: unknown): {
@@ -36,6 +36,6 @@ export interface AutomaticAnalysisBudget {
36
36
  trigger: "default" | "explicit";
37
37
  }
38
38
  /** Metadata only: resolving the future live-run budget never reads keys or dispatches. */
39
- export declare function automaticAnalysisBudget(raw: unknown, route: LabRoute): AutomaticAnalysisBudget | undefined;
39
+ export declare function automaticAnalysisBudget(raw: unknown, route: StudyRoute): AutomaticAnalysisBudget | undefined;
40
40
  export declare function formatAutomaticAnalysisBudget(budget: AutomaticAnalysisBudget): string;
41
41
  export {};
@@ -22,7 +22,7 @@ const SENSITIVE_QUESTION = {
22
22
  ok: false,
23
23
  message: "review.analysis.question contains sensitive text and cannot be sent for analysis.",
24
24
  };
25
- /** The spend cap on an analysis the lab did not declare. */
25
+ /** The spend cap on an analysis the study did not declare. */
26
26
  export const DEFAULT_ANALYSIS_MAX_COST_USD = 3;
27
27
  /** Called for parsed manifests and direct library configs, before participant execution. */
28
28
  export function resolveAutomaticAnalysis(raw) {
@@ -2,7 +2,11 @@ import type { CodexAnalysisIdentity, AnalysisConfig } from "./types.js";
2
2
  export declare const CODEX_ANALYSIS_MODEL: "gpt-6-astra";
3
3
  /** Before dispatch, analysis replaces the default release with the detected one. */
4
4
  export declare function codexAnalysisIdentity(model: string, cliVersion?: string): CodexAnalysisIdentity;
5
- /** Execution admission: the identity must name a release qualified on this host. */
5
+ /** Execution admission: an isolated-mode host, and an identity naming a release the launcher starts. */
6
6
  export declare function validCodexAnalysisConfig(config: AnalysisConfig, platform?: NodeJS.Platform, arch?: string): boolean;
7
- /** Reading historical artifacts never inserts defaults or selects a launch policy. */
7
+ /**
8
+ * Reading historical artifacts never inserts defaults or selects a launch policy: the restricted
9
+ * analyst's fixed identity, from any recordable release, so a change to launch admission never
10
+ * invalidates a saved report.
11
+ */
8
12
  export declare function validStoredCodexAnalysisConfig(config: AnalysisConfig): boolean;
@@ -1,7 +1,7 @@
1
- import { RECORDED_CODEX_CLI_VERSIONS } from "../actors/contract.js";
2
- import { defaultCodexCliVersion, qualifiedCodexCliVersions, } from "../actors/codex/qualified-versions.js";
1
+ import { isRecordedCodexCliVersion } from "../actors/contract.js";
2
+ import { admitsCodexCliVersion, defaultCodexCliVersion, supportsIsolatedCodex, } from "../actors/codex/codex-admission.js";
3
3
  import { RESTRICTED_CODEX_ANALYSIS_IDENTITY, RESTRICTED_CODEX_ANALYSIS_MODELS, } from "../actors/codex/restricted-policy.js";
4
- /** This account route is qualified against per-host CLI releases, one model and one tool policy. */
4
+ /** This account route runs the releases codex-admission.ts admits, one model and one tool policy. */
5
5
  const CODEX_ANALYSIS_TOOL_POLICY = RESTRICTED_CODEX_ANALYSIS_IDENTITY.toolPolicy;
6
6
  export const CODEX_ANALYSIS_MODEL = RESTRICTED_CODEX_ANALYSIS_MODELS[0];
7
7
  const CODEX_ANALYSIS_EFFORT = RESTRICTED_CODEX_ANALYSIS_IDENTITY.reasoningEffort;
@@ -26,13 +26,6 @@ export function codexAnalysisIdentity(model, cliVersion = defaultCodexCliVersion
26
26
  cliVersion,
27
27
  });
28
28
  }
29
- /** Reader profiles are append-only. A new launch qualification must not invalidate a saved report. */
30
- const storedProfiles = RECORDED_CODEX_CLI_VERSIONS.map((cliVersion) => ({
31
- cliVersion,
32
- toolPolicy: "restricted-codex-v1",
33
- model: "gpt-6-astra",
34
- reasoningEffort: "low",
35
- }));
36
29
  function matchesProfile(config, expected) {
37
30
  if (config.provider !== "codex")
38
31
  return false;
@@ -54,16 +47,31 @@ function matchesProfile(config, expected) {
54
47
  Object.keys(config.identity).length === Object.keys(expected).length &&
55
48
  Object.entries(expected).every(([key, value]) => config.identity[key] === value));
56
49
  }
57
- /** Execution admission: the identity must name a release qualified on this host. */
50
+ /** Execution admission: an isolated-mode host, and an identity naming a release the launcher starts. */
58
51
  export function validCodexAnalysisConfig(config, platform = process.platform, arch = process.arch) {
59
52
  if (config.provider !== "codex")
60
53
  return false;
61
54
  const cliVersion = config.identity?.cliVersion;
62
55
  return (config.model === CODEX_ANALYSIS_MODEL &&
63
- qualifiedCodexCliVersions(platform, arch).some((version) => version === cliVersion) &&
56
+ supportsIsolatedCodex(platform, arch) &&
57
+ typeof cliVersion === "string" &&
58
+ admitsCodexCliVersion(cliVersion) &&
64
59
  matchesProfile(config, codexAnalysisIdentity(config.model, cliVersion)));
65
60
  }
66
- /** Reading historical artifacts never inserts defaults or selects a launch policy. */
61
+ /**
62
+ * Reading historical artifacts never inserts defaults or selects a launch policy: the restricted
63
+ * analyst's fixed identity, from any recordable release, so a change to launch admission never
64
+ * invalidates a saved report.
65
+ */
67
66
  export function validStoredCodexAnalysisConfig(config) {
68
- return storedProfiles.some((profile) => matchesProfile(config, identityFor(profile)));
67
+ if (config.provider !== "codex")
68
+ return false;
69
+ const cliVersion = config.identity?.cliVersion;
70
+ return (isRecordedCodexCliVersion(cliVersion) &&
71
+ matchesProfile(config, identityFor({
72
+ cliVersion,
73
+ toolPolicy: "restricted-codex-v1",
74
+ model: "gpt-6-astra",
75
+ reasoningEffort: "low",
76
+ })));
69
77
  }
@@ -3,7 +3,7 @@ import { type AnalysisFetch, type AnalysisProvider } from "./provider.js";
3
3
  import type { RejectedAnalysisOutput } from "./diagnostics.js";
4
4
  export declare const ANALYSIS_PROMPT_VERSION = "study-evidence-6";
5
5
  export declare const isSupportedAnalysisModel: (model: string) => boolean;
6
- /** The OpenAI output limit when a lab omits maxOutputTokens, and the most it may ask for. */
6
+ /** The OpenAI output limit when a study omits maxOutputTokens, and the most it may ask for. */
7
7
  export declare const DEFAULT_ANALYSIS_MAX_OUTPUT_TOKENS = 16384;
8
8
  export declare const MAX_ANALYSIS_OUTPUT_TOKENS = 32768;
9
9
  export interface AnalysisAdmission {
@@ -21,7 +21,7 @@ const SUPPORTED_ANALYSIS_MODELS = Object.freeze([
21
21
  ]);
22
22
  const SUPPORTED_MODELS = new Set(SUPPORTED_ANALYSIS_MODELS);
23
23
  export const isSupportedAnalysisModel = (model) => SUPPORTED_MODELS.has(model);
24
- /** The OpenAI output limit when a lab omits maxOutputTokens, and the most it may ask for. */
24
+ /** The OpenAI output limit when a study omits maxOutputTokens, and the most it may ask for. */
25
25
  export const DEFAULT_ANALYSIS_MAX_OUTPUT_TOKENS = 16_384;
26
26
  export const MAX_ANALYSIS_OUTPUT_TOKENS = 32_768;
27
27
  const MAX_EVIDENCE_BYTES = 1024 * 1024;
@@ -1,4 +1,4 @@
1
- import { describeQualifiedCodexCliVersions } from "../actors/codex/qualified-versions.js";
1
+ import { defaultCodexCliVersion, describeCodexCliAdmission, } from "../actors/codex/codex-admission.js";
2
2
  import { validCodexAnalysisConfig } from "./codex-config.js";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { lstat, mkdir, realpath, rmdir } from "node:fs/promises";
@@ -43,7 +43,7 @@ const messages = {
43
43
  ANALYSIS_VERIFY_FAILED: "The run must pass verification before analysis.",
44
44
  ANALYSIS_RUN_ACTIVE: "Analysis requires a completed recording. Wait for the study to finish.",
45
45
  ANALYSIS_NO_PARTICIPANTS: "This run contains no participant evidence to analyze.",
46
- ANALYSIS_REQUIRES_LIVE_RUN: "A dry-run proves harness contracts, not participant behavior. Select a completed live study for analysis.",
46
+ ANALYSIS_REQUIRES_LIVE_RUN: "A dry run has no participant behavior to analyze. Select a completed live run.",
47
47
  ANALYSIS_SOURCE_UNAVAILABLE: "The source recording is missing, unsafe, or exceeds the input limit.",
48
48
  ANALYSIS_SOURCE_CHANGED: "The source recording changed during analysis. The result cannot be published against different evidence.",
49
49
  ANALYSIS_BUSY: "Another analysis holds this run's .analysis-lock directory. If it was interrupted, confirm it has stopped before removing that empty directory.",
@@ -56,9 +56,9 @@ const messages = {
56
56
  };
57
57
  const codexRecovery = {
58
58
  analysis_codex_busy: "Another restricted Codex analyst or setup check is active in this process. Wait for it to finish, then explicitly retry.",
59
- analysis_codex_unavailable: `The qualified Codex CLI is unavailable. Install a qualified Codex CLI (${describeQualifiedCodexCliVersions()}) and sign in with a ChatGPT account, then retry --provider codex.`,
60
- analysis_codex_unsupported_version: `Codex account analysis requires a qualified CLI version (${describeQualifiedCodexCliVersions()}). Other versions have not passed this tool-policy contract.`,
61
- analysis_codex_incompatible_release: `This Codex CLI release changed app-server protocol fields humanish reads, so no request was sent; the warnings name each change. Install a release humanish was tested with (${describeQualifiedCodexCliVersions()}), then retry.`,
59
+ analysis_codex_unavailable: `The Codex CLI is unavailable. Install one (${describeCodexCliAdmission()}) and sign in with a ChatGPT account, then retry --provider codex.`,
60
+ analysis_codex_unsupported_version: `This Codex CLI release is refused: ${describeCodexCliAdmission()}. \`humanish doctor\` names the release it found, why, and the command that replaces it.`,
61
+ analysis_codex_incompatible_release: `This Codex CLI release changed app-server protocol fields humanish reads, so no request was sent; the warnings name each change. Install the last tested release (${defaultCodexCliVersion()}), then retry.`,
62
62
  analysis_codex_unsupported_platform: "This platform has not qualified the restricted Codex account launcher.",
63
63
  analysis_codex_login_required: "Sign in to Codex with a ChatGPT account, then retry humanish analyze --provider codex --rerun.",
64
64
  analysis_codex_unsupported_auth: "Codex analysis requires ChatGPT account authentication; API-key and custom provider authentication are not used as fallbacks.",
@@ -1,6 +1,7 @@
1
1
  import type { ActorStatus, ActorCompletionReason, ActorStopCause, ParticipantDeclaredOutcome } from "../actors/contract.js";
2
2
  import type { CuaGoalSource } from "../actors/goal-source.js";
3
3
  import type { AutomaticAnalysisView } from "./job.js";
4
+ import type { RunAnalysisCost } from "../run/run-cost.js";
4
5
  /** Independent interpretation of retained evidence; never a participant or harness verdict. */
5
6
  export declare const ANALYSIS_SCHEMA: "humanish.study-analysis.v1";
6
7
  export declare const ANALYSIS_CORRECTION_SCHEMA: "humanish.study-analysis-correction.v1";
@@ -213,5 +214,10 @@ export interface LoadedAnalysis {
213
214
  warnings: string[];
214
215
  /** Independent post-run execution metadata; never changes evidence sharing grades. */
215
216
  automatic?: AutomaticAnalysisView;
217
+ /**
218
+ * What the run's analysis requests cost, every attempt counted once (src/run/costs.ts
219
+ * readAnalysisAccounting, the reader stats uses). Absent when the run sent none.
220
+ */
221
+ spend?: RunAnalysisCost;
216
222
  }
217
223
  export {};
@@ -1,4 +1,4 @@
1
- import { CuaExecutorError, } from "../actors/computer-use/executor-error.js";
1
+ import { ComputerUseExecutorError, } from "../actors/computer-use/executor-error.js";
2
2
  import { BROWSER_CONTROL_LIMITS, BROWSER_CONTROL_VERSION, decodeBrowserControlObservation, parseBrowserControlReply, sameBrowserControlIdentity, validateBrowserControlAction, validateBrowserControlIdentity, } from "./protocol.js";
3
3
  import { BrowserControlTransport } from "./transport.js";
4
4
  import { receiveBrowserControlRecording } from "./recording-transfer.js";
@@ -8,7 +8,7 @@ export function createBrowserControlClient(options) {
8
8
  if (!Number.isFinite(timeoutMs) ||
9
9
  timeoutMs < 1 ||
10
10
  timeoutMs > BROWSER_CONTROL_LIMITS.maxRequestTimeoutMs)
11
- throw new CuaExecutorError("invalid_request", "not_dispatched");
11
+ throw new ComputerUseExecutorError("invalid_request", "not_dispatched");
12
12
  const state = {
13
13
  identity,
14
14
  timeoutMs,
@@ -47,7 +47,7 @@ function closeClient(state, code) {
47
47
  state.pending = undefined;
48
48
  if (operation) {
49
49
  operation.dispose();
50
- operation.reject(new CuaExecutorError(code, operation.written ? "outcome_uncertain" : "not_dispatched"));
50
+ operation.reject(new ComputerUseExecutorError(code, operation.written ? "outcome_uncertain" : "not_dispatched"));
51
51
  }
52
52
  }
53
53
  /** Settles the pending exchange once both its reply has arrived and its request write finished. */
@@ -68,7 +68,7 @@ function finishExchange(session) {
68
68
  code !== "action_rejected" ||
69
69
  disposition !== "not_dispatched")
70
70
  session.transport.close(code);
71
- operation.reject(new CuaExecutorError(code, disposition));
71
+ operation.reject(new ComputerUseExecutorError(code, disposition));
72
72
  }
73
73
  }
74
74
  /** Matches a reply frame to the pending request; any mismatch closes the channel. */
@@ -120,12 +120,12 @@ function acceptReply(session, value) {
120
120
  function exchange(session, operation, action, signal, destination) {
121
121
  const { transport } = session;
122
122
  if (session.closed)
123
- return Promise.reject(new CuaExecutorError("executor_closed", "not_dispatched"));
123
+ return Promise.reject(new ComputerUseExecutorError("executor_closed", "not_dispatched"));
124
124
  if (signal?.aborted)
125
- return Promise.reject(new CuaExecutorError("cancelled", "not_dispatched"));
125
+ return Promise.reject(new ComputerUseExecutorError("cancelled", "not_dispatched"));
126
126
  if (session.seq >= Number.MAX_SAFE_INTEGER) {
127
127
  transport.close("protocol_mismatch");
128
- return Promise.reject(new CuaExecutorError("protocol_mismatch", "not_dispatched"));
128
+ return Promise.reject(new ComputerUseExecutorError("protocol_mismatch", "not_dispatched"));
129
129
  }
130
130
  session.seq += 1;
131
131
  const seq = session.seq;
@@ -174,9 +174,9 @@ function exchange(session, operation, action, signal, destination) {
174
174
  /** Runs one public operation at a time on an open client. */
175
175
  async function withOperation(session, work) {
176
176
  if (session.closed)
177
- throw new CuaExecutorError("executor_closed", "not_dispatched");
177
+ throw new ComputerUseExecutorError("executor_closed", "not_dispatched");
178
178
  if (session.busy)
179
- throw new CuaExecutorError("executor_busy", "not_dispatched");
179
+ throw new ComputerUseExecutorError("executor_busy", "not_dispatched");
180
180
  session.busy = true;
181
181
  try {
182
182
  return await work();
@@ -202,34 +202,34 @@ async function observe(session) {
202
202
  }
203
203
  catch {
204
204
  session.transport.close("invalid_response");
205
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
205
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
206
206
  }
207
207
  }
208
208
  async function execute(session, action, signal) {
209
209
  const validAction = validateBrowserControlAction(action);
210
210
  if (validAction.kind === "speak" && !session.speechEnabled) {
211
- throw new CuaExecutorError("action_rejected", "not_dispatched");
211
+ throw new ComputerUseExecutorError("action_rejected", "not_dispatched");
212
212
  }
213
213
  if (signal?.aborted)
214
- throw new CuaExecutorError("cancelled", "not_dispatched");
214
+ throw new ComputerUseExecutorError("cancelled", "not_dispatched");
215
215
  try {
216
216
  await hello(session, signal);
217
217
  }
218
218
  catch (error) {
219
- if (error instanceof CuaExecutorError)
220
- throw new CuaExecutorError(error.code, "not_dispatched");
219
+ if (error instanceof ComputerUseExecutorError)
220
+ throw new ComputerUseExecutorError(error.code, "not_dispatched");
221
221
  throw error;
222
222
  }
223
223
  await exchange(session, "EXECUTE", validAction, signal);
224
224
  }
225
225
  async function finishRecording(session, destination) {
226
226
  if (!destination || destination.destroyed)
227
- throw new CuaExecutorError("invalid_request", "not_dispatched");
227
+ throw new ComputerUseExecutorError("invalid_request", "not_dispatched");
228
228
  try {
229
229
  await hello(session);
230
230
  const reply = await exchange(session, "FINISH_RECORDING", undefined, undefined, destination);
231
231
  if (!reply.ok || !reply.recording)
232
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
232
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
233
233
  return reply.recording;
234
234
  }
235
235
  catch (error) {
@@ -1,4 +1,4 @@
1
- import { CuaExecutorError } from "../actors/computer-use/executor-error.js";
1
+ import { ComputerUseExecutorError } from "../actors/computer-use/executor-error.js";
2
2
  import { BROWSER_CONTROL_LIMITS, BROWSER_CONTROL_VERSION, encodeBrowserControlObservation, parseBrowserControlRequest, safeBrowserControlFailure, sameBrowserControlIdentity, validateBrowserControlIdentity, } from "./protocol.js";
3
3
  import { BrowserControlTransport } from "./transport.js";
4
4
  import { sendBrowserControlRecording } from "./recording-transfer.js";
@@ -103,7 +103,7 @@ function failure(common, error, invoked) {
103
103
  async function dispatch(session, request, signal) {
104
104
  const common = replyCommon(session.identity, request);
105
105
  if (!authorized(session.options) || signal.aborted) {
106
- const refusal = new CuaExecutorError("session_revoked", "not_dispatched");
106
+ const refusal = new ComputerUseExecutorError("session_revoked", "not_dispatched");
107
107
  await sendReply(session, request, failure(common, refusal, false));
108
108
  return;
109
109
  }
@@ -160,7 +160,7 @@ async function execute(session, request, common, signal) {
160
160
  let invoked = false, reply;
161
161
  try {
162
162
  if (request.action.kind === "speak" && session.options.executor.speechEnabled !== true) {
163
- throw new CuaExecutorError("action_rejected", "not_dispatched");
163
+ throw new ComputerUseExecutorError("action_rejected", "not_dispatched");
164
164
  }
165
165
  // No await between the owner gate in dispatch and invocation. The physical driver must
166
166
  // check this signal again immediately before each actual input after preparation.
@@ -183,7 +183,7 @@ async function finishRecording(session, request, common, signal) {
183
183
  let reply;
184
184
  try {
185
185
  if (!options.finishRecording)
186
- throw new CuaExecutorError("action_rejected", "not_dispatched");
186
+ throw new ComputerUseExecutorError("action_rejected", "not_dispatched");
187
187
  const recording = await options.finishRecording();
188
188
  let metadata;
189
189
  try {
@@ -1,7 +1,7 @@
1
1
  import { PNG } from "pngjs";
2
2
  import { z } from "zod";
3
3
  import { CUA_SPEECH_LIMITS } from "../actors/computer-use/speech.js";
4
- import { CuaExecutorError, isCuaExecutorError, } from "../actors/computer-use/executor-error.js";
4
+ import { ComputerUseExecutorError, isComputerUseExecutorError, } from "../actors/computer-use/executor-error.js";
5
5
  import { desktopRecordingMetadataSchema } from "../evidence/desktop-recording-types.js";
6
6
  export const BROWSER_CONTROL_VERSION = 1;
7
7
  export const BROWSER_CONTROL_LIMITS = Object.freeze({
@@ -219,7 +219,7 @@ const replySchema = z.discriminatedUnion("ok", [
219
219
  export function validateBrowserControlIdentity(value) {
220
220
  const parsed = identitySchema.safeParse(value);
221
221
  if (!parsed.success)
222
- throw new CuaExecutorError("invalid_request", "not_dispatched");
222
+ throw new ComputerUseExecutorError("invalid_request", "not_dispatched");
223
223
  return parsed.data;
224
224
  }
225
225
  export function sameBrowserControlIdentity(a, b) {
@@ -230,41 +230,41 @@ export function sameBrowserControlIdentity(a, b) {
230
230
  export function parseBrowserControlRequest(value) {
231
231
  const parsed = requestSchema.safeParse(value);
232
232
  if (!parsed.success)
233
- throw new CuaExecutorError("invalid_request", "not_dispatched");
233
+ throw new ComputerUseExecutorError("invalid_request", "not_dispatched");
234
234
  const request = parsed.data;
235
235
  if (request.requestId !== `request-${request.seq}` ||
236
236
  (request.operation === "EXECUTE" && request.actionId !== `action-${request.seq}`))
237
- throw new CuaExecutorError("invalid_request", "not_dispatched");
237
+ throw new ComputerUseExecutorError("invalid_request", "not_dispatched");
238
238
  return request;
239
239
  }
240
240
  export function parseBrowserControlReply(value) {
241
241
  const parsed = replySchema.safeParse(value);
242
242
  if (!parsed.success)
243
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
243
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
244
244
  const reply = parsed.data;
245
245
  if ((reply.operation === "EXECUTE") !== (reply.actionId !== undefined) ||
246
246
  (reply.ok &&
247
247
  ((reply.operation === "OBSERVE") !== (reply.observation !== undefined) ||
248
248
  (reply.operation === "FINISH_RECORDING") !== (reply.recording !== undefined))))
249
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
249
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
250
250
  return reply;
251
251
  }
252
252
  export function validateBrowserControlAction(value) {
253
253
  const parsed = wireActionSchema.safeParse(value);
254
254
  if (!parsed.success)
255
- throw new CuaExecutorError("invalid_request", "not_dispatched");
255
+ throw new ComputerUseExecutorError("invalid_request", "not_dispatched");
256
256
  return parsed.data;
257
257
  }
258
258
  export function validateHeardSpeech(value) {
259
259
  const parsed = heardSpeechListSchema.safeParse(value);
260
260
  if (!parsed.success)
261
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
261
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
262
262
  return parsed.data;
263
263
  }
264
264
  /** Check dimensions before allocating decoder output; v1 accepts browser-style 8-bit, noninterlaced PNG. */
265
265
  export function validateBrowserControlPng(bytes) {
266
266
  const fail = () => {
267
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
267
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
268
268
  };
269
269
  if (bytes.length < 45 ||
270
270
  bytes.length > BROWSER_CONTROL_LIMITS.pngBytes ||
@@ -316,7 +316,7 @@ export function encodeBrowserControlObservation(observation) {
316
316
  if (!observation ||
317
317
  observation.appState !== undefined ||
318
318
  !Buffer.isBuffer(observation.screenshot))
319
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
319
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
320
320
  validateBrowserControlPng(observation.screenshot);
321
321
  const parsed = observationSchema.safeParse({
322
322
  png: observation.screenshot.toString("base64"),
@@ -328,17 +328,17 @@ export function encodeBrowserControlObservation(observation) {
328
328
  ...(observation.heardSpeech !== undefined ? { heardSpeech: observation.heardSpeech } : {}),
329
329
  });
330
330
  if (!parsed.success)
331
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
331
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
332
332
  return parsed.data;
333
333
  }
334
334
  export function decodeBrowserControlObservation(value) {
335
335
  const parsed = observationSchema.safeParse(value);
336
336
  if (!parsed.success)
337
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
337
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
338
338
  const { png, ...state } = parsed.data;
339
339
  const screenshot = Buffer.from(png, "base64");
340
340
  if (screenshot.toString("base64") !== png)
341
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
341
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
342
342
  validateBrowserControlPng(screenshot);
343
343
  return {
344
344
  screenshot,
@@ -351,7 +351,7 @@ export function decodeBrowserControlObservation(value) {
351
351
  };
352
352
  }
353
353
  export function safeBrowserControlFailure(error, dispatched) {
354
- if (isCuaExecutorError(error))
354
+ if (isComputerUseExecutorError(error))
355
355
  return { code: error.code, disposition: error.disposition };
356
356
  return {
357
357
  code: "action_rejected",
@@ -1,6 +1,6 @@
1
1
  import { Transform } from "node:stream";
2
2
  import { pipeline } from "node:stream/promises";
3
- import { CuaExecutorError } from "../actors/computer-use/executor-error.js";
3
+ import { ComputerUseExecutorError } from "../actors/computer-use/executor-error.js";
4
4
  import { DESKTOP_RECORDING_MAX_BYTES } from "../evidence/desktop-recording-types.js";
5
5
  const BROWSER_CONTROL_RECORDING_TRANSFER_TIMEOUT_MS = 120_000;
6
6
  function exactBytes(expected) {
@@ -17,7 +17,7 @@ function exactBytes(expected) {
17
17
  }
18
18
  function validLength(bytes) {
19
19
  if (!Number.isSafeInteger(bytes) || bytes < 1 || bytes > DESKTOP_RECORDING_MAX_BYTES) {
20
- throw new CuaExecutorError("invalid_response", "outcome_uncertain");
20
+ throw new ComputerUseExecutorError("invalid_response", "outcome_uncertain");
21
21
  }
22
22
  }
23
23
  export async function receiveBrowserControlRecording(source, destination, bytes) {
@@ -28,7 +28,7 @@ export async function receiveBrowserControlRecording(source, destination, bytes)
28
28
  });
29
29
  }
30
30
  catch {
31
- throw new CuaExecutorError("transport_failed", "outcome_uncertain");
31
+ throw new ComputerUseExecutorError("transport_failed", "outcome_uncertain");
32
32
  }
33
33
  }
34
34
  export async function sendBrowserControlRecording(source, destination, bytes) {
@@ -43,6 +43,6 @@ export async function sendBrowserControlRecording(source, destination, bytes) {
43
43
  }
44
44
  catch {
45
45
  destination.destroy();
46
- throw new CuaExecutorError("transport_failed", "outcome_uncertain");
46
+ throw new ComputerUseExecutorError("transport_failed", "outcome_uncertain");
47
47
  }
48
48
  }
@@ -1,6 +1,6 @@
1
1
  import { TextDecoder } from "node:util";
2
2
  import { BROWSER_CONTROL_LIMITS } from "./protocol.js";
3
- import { CuaExecutorError, } from "../actors/computer-use/executor-error.js";
3
+ import { ComputerUseExecutorError, } from "../actors/computer-use/executor-error.js";
4
4
  /** Owned byte channel only. This module never discovers endpoints or reconnects. */
5
5
  export class BrowserControlTransport {
6
6
  stream;
@@ -92,7 +92,7 @@ export class BrowserControlTransport {
92
92
  /** Relinquish the live byte stream synchronously after a complete frame. */
93
93
  handoff() {
94
94
  if (this.ended || this.handedOff || this.payload !== undefined || this.headerUsed !== 0) {
95
- throw new CuaExecutorError("transport_failed", "outcome_uncertain");
95
+ throw new ComputerUseExecutorError("transport_failed", "outcome_uncertain");
96
96
  }
97
97
  this.handedOff = true;
98
98
  clearTimeout(this.frameTimer);
@@ -112,9 +112,9 @@ export class BrowserControlTransport {
112
112
  };
113
113
  send(value, beforeWrite = () => { }) {
114
114
  if (this.ended || this.handedOff)
115
- return Promise.reject(new CuaExecutorError("executor_closed", "not_dispatched"));
115
+ return Promise.reject(new ComputerUseExecutorError("executor_closed", "not_dispatched"));
116
116
  if (this.sending)
117
- return Promise.reject(new CuaExecutorError("executor_busy", "not_dispatched"));
117
+ return Promise.reject(new ComputerUseExecutorError("executor_busy", "not_dispatched"));
118
118
  let payload;
119
119
  try {
120
120
  const json = JSON.stringify(value);
@@ -123,7 +123,7 @@ export class BrowserControlTransport {
123
123
  payload = Buffer.from(json);
124
124
  }
125
125
  catch {
126
- return Promise.reject(new CuaExecutorError("invalid_request", "not_dispatched"));
126
+ return Promise.reject(new ComputerUseExecutorError("invalid_request", "not_dispatched"));
127
127
  }
128
128
  const frame = Buffer.allocUnsafe(4 + payload.length);
129
129
  frame.writeUInt32BE(payload.length);
@@ -144,7 +144,7 @@ export class BrowserControlTransport {
144
144
  try {
145
145
  beforeWrite();
146
146
  if (this.ended) {
147
- done(new CuaExecutorError("executor_closed", "not_dispatched"));
147
+ done(new ComputerUseExecutorError("executor_closed", "not_dispatched"));
148
148
  return;
149
149
  }
150
150
  this.stream.write(frame, (error) => {
@@ -178,7 +178,7 @@ export class BrowserControlTransport {
178
178
  this.stream.off("close", releaseListeners);
179
179
  };
180
180
  this.stream.once("close", releaseListeners);
181
- this.pendingWrite?.(new CuaExecutorError(code, "outcome_uncertain"));
181
+ this.pendingWrite?.(new ComputerUseExecutorError(code, "outcome_uncertain"));
182
182
  this.stream.destroy();
183
183
  // A stream whose close event already happened will not emit it again. `closed`
184
184
  // can also precede queued error/close events, so defer removal past native ticks.
@@ -1,8 +1,8 @@
1
- import type { RunLabOptions } from "../../run-lab.js";
1
+ import type { RunStudyOptions } from "../../run-study.js";
2
2
  import type { CliIo } from "../io.js";
3
3
  /**
4
4
  * Post-run analysis cancellation for the CLI: while analysis runs, SIGINT, SIGTERM and SIGHUP abort
5
5
  * it. The listeners exist only during analysis; before it, the run's own handlers
6
6
  * (run-signals.ts) hold the signals and hand them over here.
7
7
  */
8
- export declare function cliAnalysisOptions(io: Pick<CliIo, "writeErr">): Pick<RunLabOptions, "onEvent" | "analysisSignal">;
8
+ export declare function cliAnalysisOptions(io: Pick<CliIo, "writeErr">): Pick<RunStudyOptions, "onEvent" | "analysisSignal">;