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
@@ -11,7 +11,7 @@
11
11
  export function asRecord(value) {
12
12
  return typeof value === "object" && value !== null ? value : {};
13
13
  }
14
- function asArray(value) {
14
+ export function asArray(value) {
15
15
  return Array.isArray(value) ? value : [];
16
16
  }
17
17
  function asNumber(value) {
@@ -165,9 +165,9 @@ export function parseOpenAiResponse(raw) {
165
165
  const callId = optionalString(item.call_id);
166
166
  if (callId !== undefined)
167
167
  callIds.push(callId);
168
- // The live Responses API returns the actions as an ARRAY (`item.actions`); a single
169
- // computer_call can carry several. (An older/alt shape used a singular `item.action` —
170
- // supported as a fallback.) Reading only `item.action` silently dropped EVERY action,
168
+ // The live Responses API returns the actions as an array (`item.actions`); a single
169
+ // computer_call can carry several. (An older/alt shape used a singular `item.action`,
170
+ // supported as a fallback.) Reading only `item.action` silently dropped every action,
171
171
  // which made the loop see zero actions and stop on a false `goal_satisfied`.
172
172
  const rawActions = Array.isArray(item.actions)
173
173
  ? item.actions
@@ -209,9 +209,9 @@ export function parseOpenAiResponse(raw) {
209
209
  // Of the input tokens, how many the provider served from its prompt cache. This loop threads
210
210
  // state with previous_response_id and re-sends a growing warm prefix every turn, so most input on
211
211
  // a long session is a cache hit billed at a fraction of the full rate. Not reading it made every
212
- // cost line materially overstate the bill (#391).
212
+ // cost line materially overstate the bill.
213
213
  const usageCachedInput = optionalNumber(asRecord(usageRecord.input_tokens_details).cached_tokens);
214
- // GPT-5.6+ bills cache WRITES (1.25x input) and reports them here; older models omit the field.
214
+ // GPT-5.6+ bills cache writes (1.25x input) and reports them here; older models omit the field.
215
215
  const usageCacheWriteInput = optionalNumber(asRecord(usageRecord.input_tokens_details).cache_write_tokens);
216
216
  const usage = usageInput === undefined && usageOutput === undefined
217
217
  ? undefined
@@ -253,12 +253,12 @@ function sharedRequestFields(ctx) {
253
253
  // instructions, a provider that does not fully retain prior state can drift
254
254
  // into asking the operator what to do.
255
255
  instructions: ctx.instructions,
256
- // The Responses API `computer` tool takes no display/environment fields — the model infers
256
+ // The Responses API `computer` tool takes no display/environment fields; the model infers
257
257
  // resolution from the screenshots it is sent. (Sending display_* returns a 400
258
258
  // "Unknown parameter tools[0].display_width", confirmed against the live API 2026-06.)
259
259
  tools: [{ type: "computer" }],
260
260
  truncation: "auto",
261
- // `summary` asks for the provider-SANCTIONED reasoning summary items (#427) — the
261
+ // `summary` asks for the provider-sanctioned reasoning summary items; the
262
262
  // capture side never scrapes or reconstructs raw chain-of-thought. Parsed by
263
263
  // parseOpenAiResponse into turn.reasoning; the loop records them as redacted
264
264
  // `kind: "reasoning"` trace items.
@@ -267,6 +267,7 @@ function sharedRequestFields(ctx) {
267
267
  ...(ctx.reasoningSummary === undefined ? {} : { summary: ctx.reasoningSummary }),
268
268
  },
269
269
  ...(ctx.safetyIdentifier === undefined ? {} : { safety_identifier: ctx.safetyIdentifier }),
270
+ ...(ctx.stateless === true ? { store: false, include: ["reasoning.encrypted_content"] } : {}),
270
271
  };
271
272
  }
272
273
  /**
@@ -284,32 +285,35 @@ export function buildInitialRequest(ctx, screenshot) {
284
285
  const maxOutputTokens = Math.min(ctx.maxOutputTokens ?? FIRST_TURN_OUTPUT_LIMIT, FIRST_TURN_OUTPUT_LIMIT);
285
286
  return {
286
287
  ...sharedRequestFields({ ...ctx, maxOutputTokens }),
287
- input: [
288
- {
289
- role: "user",
290
- content: [
291
- { type: "input_text", text: ctx.instructions },
292
- ...(screenshot === undefined
293
- ? []
294
- : [
295
- {
296
- type: "input_image",
297
- image_url: `data:image/png;base64,${screenshot.toString("base64")}`,
298
- },
299
- ]),
300
- ],
301
- },
302
- ],
288
+ input: [openingMessage(ctx.instructions, screenshot)],
303
289
  };
304
290
  }
291
+ /** One input message, read as the words of `sender`: the user, the developer, or the model itself. */
292
+ export function inputMessage(sender, content) {
293
+ return { role: sender, content: [...content] };
294
+ }
295
+ /** The first request's only input item: the instructions and, when there is one, the first screen. */
296
+ export function openingMessage(instructions, screenshot) {
297
+ return inputMessage("user", [
298
+ { type: "input_text", text: instructions },
299
+ ...(screenshot === undefined
300
+ ? []
301
+ : [
302
+ {
303
+ type: "input_image",
304
+ image_url: `data:image/png;base64,${screenshot.toString("base64")}`,
305
+ },
306
+ ]),
307
+ ]);
308
+ }
305
309
  /**
306
310
  * Build one computer_call_output for a pending call id, carrying the latest
307
311
  * screenshot as an inline data URL. Acknowledged safety checks (if any) are
308
312
  * echoed back so the model can proceed past a check the harness approved.
309
313
  *
310
314
  * The screenshot param is `Buffer | undefined` because CuaObservation.screenshot is now
311
- * optional (a non-vision executor omits it). This provider is a VISION model (it sets
312
- * requiresFrame), so a missing frame is a hard error here — defense-in-depth: the loop's
315
+ * optional (a non-vision executor omits it). This provider is a vision model (it sets
316
+ * requiresFrame), so a missing frame is a hard error here as defense-in-depth: the loop's
313
317
  * per-turn requiresFrame guard already fails closed before this is reached, but throwing keeps
314
318
  * the mapper self-validating and isolable.
315
319
  */
@@ -335,19 +339,17 @@ export function buildCallOutput(callId, screenshot, acknowledged) {
335
339
  : {}),
336
340
  };
337
341
  }
338
- // Turn an optional context-hint string into an input item array (or empty).
339
- function hintItems(contextHint) {
340
- return contextHint
341
- ? [{ role: "user", content: [{ type: "input_text", text: contextHint }] }]
342
- : [];
342
+ /** An optional context hint as input items (none when there is no hint). */
343
+ export function hintItems(contextHint) {
344
+ return contextHint ? [inputMessage("user", [{ type: "input_text", text: contextHint }])] : [];
343
345
  }
344
346
  /**
345
347
  * Build a continuation request body. Two modes:
346
348
  * - default: thread server-side state via previous_response_id and send only the
347
349
  * new call outputs (plus an optional hint).
348
- * - explicit-context (ZDR): no previous_response_id; the prior output items are
349
- * re-sent inline ahead of the new call outputs so the model has full context
350
- * without the server retaining any.
350
+ * - explicit-context (ZDR): no previous_response_id; the carried conversation
351
+ * (openai-context.ts) is sent inline ahead of the new call outputs, so the model
352
+ * has the session without the server retaining any.
351
353
  */
352
354
  export function buildContinuationRequest(args) {
353
355
  const { ctx, previousResponseId, callOutputs, contextHint, explicitContextItems } = args;
@@ -5,23 +5,23 @@ export declare const isCuaProviderFailurePhase: (value: unknown) => value is Cua
5
5
  declare const codes: readonly ["request_rejected", "unavailable", "busy", "refused", "invalid_response", "protocol_error", "timeout", "cancelled", "process_failed", "cleanup_unconfirmed"];
6
6
  export type CuaProviderErrorCode = (typeof codes)[number];
7
7
  /** Safe local classification. Never attach provider prose, stderr, paths or a raw cause. */
8
- export declare class CuaProviderError extends Error {
8
+ export declare class ComputerUseProviderError extends Error {
9
9
  readonly code: CuaProviderErrorCode;
10
10
  readonly receipt: ProviderRequestReceipt;
11
11
  readonly usage?: ActorTokenUsage;
12
12
  readonly failurePhase?: CuaProviderFailurePhase;
13
13
  constructor(code: CuaProviderErrorCode, receipt: ProviderRequestReceipt, usage?: ActorTokenUsage, failurePhase?: CuaProviderFailurePhase);
14
14
  }
15
- export declare const isCuaProviderError: (value: unknown) => value is CuaProviderError;
15
+ export declare const isComputerUseProviderError: (value: unknown) => value is ComputerUseProviderError;
16
16
  /**
17
17
  * The model provider refused the request under its usage policy (OpenAI `invalid_prompt`). A
18
18
  * refusal is the provider's decision about this prompt, so it is not a harness fault, and sending
19
19
  * the same prompt again is not a recovery path. `providerCode` is the provider's identifier only;
20
20
  * the provider's message can echo the prompt and is never attached.
21
21
  */
22
- export declare class CuaPromptRefusedError extends Error {
22
+ export declare class ComputerUsePromptRefusedError extends Error {
23
23
  readonly providerCode: string;
24
24
  constructor(provider: string, providerCode: string);
25
25
  }
26
- export declare const isCuaPromptRefusedError: (value: unknown) => value is CuaPromptRefusedError;
26
+ export declare const isComputerUsePromptRefusedError: (value: unknown) => value is ComputerUsePromptRefusedError;
27
27
  export {};
@@ -24,7 +24,7 @@ const codes = Object.freeze([
24
24
  ]);
25
25
  const errors = new WeakSet();
26
26
  /** Safe local classification. Never attach provider prose, stderr, paths or a raw cause. */
27
- export class CuaProviderError extends Error {
27
+ export class ComputerUseProviderError extends Error {
28
28
  code;
29
29
  receipt;
30
30
  usage;
@@ -50,7 +50,7 @@ export class CuaProviderError extends Error {
50
50
  throw new TypeError("Invalid participant provider error declaration.");
51
51
  }
52
52
  super(`Participant provider: ${code}`);
53
- this.name = "CuaProviderError";
53
+ this.name = "ComputerUseProviderError";
54
54
  this.code = code;
55
55
  this.receipt = Object.freeze({
56
56
  dispatched: receipt.dispatched,
@@ -66,7 +66,7 @@ export class CuaProviderError extends Error {
66
66
  errors.add(this);
67
67
  }
68
68
  }
69
- export const isCuaProviderError = (value) => typeof value === "object" && value !== null && errors.has(value);
69
+ export const isComputerUseProviderError = (value) => typeof value === "object" && value !== null && errors.has(value);
70
70
  const refusals = new WeakSet();
71
71
  /**
72
72
  * The model provider refused the request under its usage policy (OpenAI `invalid_prompt`). A
@@ -74,13 +74,13 @@ const refusals = new WeakSet();
74
74
  * the same prompt again is not a recovery path. `providerCode` is the provider's identifier only;
75
75
  * the provider's message can echo the prompt and is never attached.
76
76
  */
77
- export class CuaPromptRefusedError extends Error {
77
+ export class ComputerUsePromptRefusedError extends Error {
78
78
  providerCode;
79
79
  constructor(provider, providerCode) {
80
80
  super(`${provider} refused the prompt under its usage policy (${providerCode})`);
81
- this.name = "CuaPromptRefusedError";
81
+ this.name = "ComputerUsePromptRefusedError";
82
82
  this.providerCode = providerCode;
83
83
  refusals.add(this);
84
84
  }
85
85
  }
86
- export const isCuaPromptRefusedError = (value) => typeof value === "object" && value !== null && refusals.has(value);
86
+ export const isComputerUsePromptRefusedError = (value) => typeof value === "object" && value !== null && refusals.has(value);
@@ -1,35 +1,35 @@
1
1
  import type { AffordanceUse } from "./affordance.js";
2
2
  import type { ActorEstimatedCost } from "../run/pricing.js";
3
- import type { TaskFunnel } from "../lab/tasks.js";
3
+ import type { TaskFunnel } from "../study/tasks.js";
4
4
  import { type CuaProviderFailurePhase } from "./computer-use/provider-error.js";
5
5
  export declare const ACTOR_TRACE_SCHEMA = "humanish.actor-trace.v1";
6
6
  /**
7
- * How a session ended, from the point of view of the STUDY rather than the harness.
7
+ * How a session ended, from the point of view of the study rather than the harness.
8
8
  *
9
9
  * The distinction matters because two of these are participant outcomes and the rest are not. A
10
10
  * participant who abandons a task is the single most valuable thing a usability study produces, and
11
- * recording that as `failed` — as this type used to force — reads as the instrument breaking. See
11
+ * recording that as `failed` reads as the instrument breaking. See
12
12
  * docs/principles/three-roles.md.
13
13
  *
14
14
  * - `passed` the participant reached the goal
15
- * - `abandoned` the participant stopped trying. A FINDING, not a malfunction
15
+ * - `abandoned` the participant stopped trying. A finding, not a malfunction
16
16
  * - `incomplete` the session ended (time or budget) before the goal was reached
17
17
  * - `blocked` the participant could not proceed: an approval the run could not give, or a
18
- * blocker they described in their own final words (#476)
18
+ * blocker they described in their own final words
19
19
  * - `timed_out` the session hit its deadline with no productive activity at all
20
- * - `failed` the HARNESS failed: a dead sandbox, a provider error, a broken artifact
20
+ * - `failed` the harness failed: a dead sandbox, a provider error, a broken artifact
21
21
  */
22
22
  export declare const ACTOR_STATUSES: readonly ["passed", "abandoned", "incomplete", "blocked", "timed_out", "failed"];
23
23
  export type ActorStatus = (typeof ACTOR_STATUSES)[number];
24
24
  /**
25
- * What the PARTICIPANT said happened, in a field rather than a paragraph (#570). Providers whose
25
+ * What the participant said happened, in a field rather than a paragraph. Providers whose
26
26
  * reply is schema-constrained (the local-agent routes) fill it on their final turn; a free-text
27
27
  * provider leaves it absent and the route falls back to reading the closing message. `reached`:
28
28
  * the task is finished. `blocked`: something in the app stopped the participant. `not_reached`:
29
29
  * the participant stopped for another reason (gave up, ran out of ideas).
30
30
  */
31
31
  export type ParticipantDeclaredOutcome = "reached" | "not_reached" | "blocked";
32
- /** Statuses that describe what happened to a PARTICIPANT rather than a harness malfunction. Verify
32
+ /** Statuses that describe what happened to a participant rather than a harness malfunction. Verify
33
33
  * treats these as study results, so a run whose evidence is sound is not called untrustworthy just
34
34
  * because a persona gave up. */
35
35
  export declare const PARTICIPANT_OUTCOME_STATUSES: readonly ActorStatus[];
@@ -62,11 +62,11 @@ export interface ActorTraceItem {
62
62
  redaction: "blurred" | "ocr_scrubbed" | "none";
63
63
  };
64
64
  text?: string;
65
- /** When the item was recorded (ISO-8601), from the loop's injected clock. Additive
66
- * (#441): items from older bundles and non-stamping producers lack it, so every
65
+ /** When the item was recorded (ISO-8601), from the loop's injected clock. Additive:
66
+ * items from older bundles and non-stamping producers lack it, so every
67
67
  * consumer must treat absence as "timing unknown", never as t=0. */
68
68
  at?: string;
69
- /** Structured pointer coordinates for click-like `ui_action` items (#441) — the
69
+ /** Structured pointer coordinates for click-like `ui_action` items: the
70
70
  * recorded fact the Observer's pins previously re-parsed out of the title text. */
71
71
  coord?: {
72
72
  x: number;
@@ -83,13 +83,13 @@ export interface ActorCapabilities {
83
83
  inProcessTools: boolean;
84
84
  license: "open" | "source-available" | "proprietary";
85
85
  /**
86
- * WHERE this actor's runtime key lives, per the placement rule (invariants-and-defaults.md):
87
- * "keys live where the keyed process runs — and nowhere else." Registry metadata the engine
88
- * enforces, NOT a code convention.
86
+ * Where this actor's runtime key lives, per the placement rule (invariants-and-defaults.md):
87
+ * "keys live where the keyed process runs, and nowhere else." Registry metadata the engine
88
+ * enforces, not a code convention.
89
89
  * - "external" (the implicit default for every existing actor): the keyed process (e.g. a
90
- * computer-use provider loop) runs OUTSIDE any sandbox, so its key never enters one.
90
+ * computer-use provider loop) runs outside any sandbox, so its key never enters one.
91
91
  * - "in-sandbox-command-scoped": the keyed process is an agent-harness-under-test that runs
92
- * INSIDE the sandbox; its runtime key is injected ONLY into the per-command `envs` of that
92
+ * inside the sandbox; its runtime key is injected only into the per-command `envs` of that
93
93
  * invocation (never `Sandbox.create({envs})`, which is sandbox-global), the key is presumed
94
94
  * exfiltratable, and the blast radius is bounded by key scoping + a spend budget.
95
95
  * Absent === "external". On the shipped terminal-product live route, the engine enforces this
@@ -115,18 +115,18 @@ export interface ActorPersonaRef {
115
115
  export interface ActorTokenUsage {
116
116
  input?: number;
117
117
  output?: number;
118
- /** Of `input`, how many tokens were served from the provider's prompt cache. Optional and
119
- * HONESTLY ABSENT: a provider that does not report it leaves this undefined rather than
120
- * reporting 0, because 0 and "unknown" price very differently (#391). */
118
+ /** Of `input`, how many tokens were served from the provider's prompt cache. Optional. A
119
+ * provider that does not report it leaves this undefined rather than
120
+ * reporting 0, because 0 and "unknown" price very differently. */
121
121
  cachedInput?: number;
122
- /** Of `input`, how many tokens were newly WRITTEN to the provider's prompt cache
122
+ /** Of `input`, how many tokens were newly written to the provider's prompt cache
123
123
  * (OpenAI 5.6+ bills these at a surcharge and reports `cache_write_tokens`). Same
124
- * honestly-absent discipline as `cachedInput` (#334). */
124
+ * absent-when-unreported rule as `cachedInput`. */
125
125
  cacheWriteInput?: number;
126
126
  /** Per model-inference request usage, in request order. One provider interaction can contain
127
127
  * several inferences around native tool calls. A provider that re-prices whole requests past
128
128
  * an input-size threshold can only be priced exactly from these sizes; totals cannot say which
129
- * requests crossed. Additive and honestly absent on producers that do not record it (#334). */
129
+ * requests crossed. Additive, and absent on producers that do not record it. */
130
130
  turns?: Array<{
131
131
  input?: number;
132
132
  cachedInput?: number;
@@ -137,12 +137,13 @@ export interface ActorTokenUsage {
137
137
  costUsd?: number;
138
138
  }
139
139
  /**
140
- * Codex CLI releases a recorded account profile may name. Append-only: a release can leave the
141
- * launch lists in codex/qualified-versions.ts, but saved bundles naming it stay readable.
140
+ * The oldest Codex CLI release a recorded account profile may name. Readers accept every stable
141
+ * `MAJOR.MINOR.PATCH` release from it on, so a saved bundle stays readable whichever release
142
+ * recorded it; launch admission (codex/codex-admission.ts) alone decides what runs.
142
143
  */
143
- export declare const RECORDED_CODEX_CLI_VERSIONS: readonly ["0.154.0", "0.157.1", "0.159.2", "0.159.3", "0.160.0"];
144
- export type RecordedCodexCliVersion = (typeof RECORDED_CODEX_CLI_VERSIONS)[number];
145
- export declare function isRecordedCodexCliVersion(value: unknown): value is RecordedCodexCliVersion;
144
+ export declare const RECORDED_CODEX_CLI_FLOOR = "0.154.0";
145
+ /** A stable release at or above the floor. Parts compare as digit strings, exact at any length. */
146
+ export declare function isRecordedCodexCliVersion(value: unknown): value is string;
146
147
  /** Requested execution profile; per-request verification is recorded separately. */
147
148
  export interface ActorExecutionProfile {
148
149
  schema: "humanish.actor-execution-profile.v1";
@@ -151,7 +152,8 @@ export interface ActorExecutionProfile {
151
152
  billing: "account-unknown";
152
153
  requestedModel: string;
153
154
  reasoningEffort: import("./reasoning-effort.js").ReasoningEffort;
154
- cliVersion: RecordedCodexCliVersion;
155
+ /** A stable release at or above RECORDED_CODEX_CLI_FLOOR. */
156
+ cliVersion: string;
155
157
  toolPolicy: "restricted-codex-v1" | "codex-ui-tools-v1";
156
158
  participantSchema: "humanish.restricted-participant-turn.v1" | "humanish.codex-ui-tool.v1";
157
159
  memoryPolicy: "recent-eight-16k-v1" | "continuing-thread-v1";
@@ -200,6 +202,37 @@ export interface ActorRuntimeProvenance {
200
202
  /** Codex turn.completed aggregates requests; it cannot establish per-request pricing tiers. */
201
203
  usageGranularity: "runtime_turn";
202
204
  }
205
+ /**
206
+ * How a provider carried the conversation between its requests. `threaded`: the provider's server
207
+ * kept it (OpenAI previous_response_id). `explicit_context`: the server kept none (a
208
+ * zero-data-retention org, or zeroDataRetention set), so each request carried it from the client
209
+ * within a token budget, with the oldest turns summarized as text once it passed the budget.
210
+ */
211
+ export interface ActorConversation {
212
+ /** The mode of the session's last request. */
213
+ mode: "threaded" | "explicit_context";
214
+ /** Why the session used explicit_context: configured, or the org rejected server-side state. */
215
+ explicitReason?: "configured" | "zdr_rejection";
216
+ /** When a threaded session switched to explicit_context (ISO-8601), and on which request. */
217
+ switchedAt?: string;
218
+ switchedAtRequest?: number;
219
+ /**
220
+ * Earlier turns the latest explicit_context request no longer carried whole, to stay within the
221
+ * budget: written as lines of a text note, or only counted once the note reached its cap. Their
222
+ * screenshots were dropped. 0 when no explicit_context request summarized any.
223
+ */
224
+ summarizedTurns: number;
225
+ /**
226
+ * Per participant request, in order: its mode and, in explicit_context, what it carried and its
227
+ * estimated input. `tokenUsage.turns` has each request's billed input.
228
+ */
229
+ requests: Array<{
230
+ mode: "threaded" | "explicit_context";
231
+ carriedExchanges?: number;
232
+ carriedScreenshots?: number;
233
+ estimatedInputTokens?: number;
234
+ }>;
235
+ }
203
236
  export interface ActorTrace {
204
237
  schema: typeof ACTOR_TRACE_SCHEMA;
205
238
  provider: string;
@@ -207,6 +240,8 @@ export interface ActorTrace {
207
240
  executionProfile?: ActorExecutionProfile;
208
241
  providerRequests?: ActorProviderRequest[];
209
242
  historyTurnsOmitted?: number;
243
+ /** How the provider carried the conversation; present for the OpenAI computer-use provider. */
244
+ conversation?: ActorConversation;
210
245
  runtime?: ActorRuntimeProvenance;
211
246
  protocol: ActorProtocol;
212
247
  lane: ActorRunKind;
@@ -231,15 +266,15 @@ export interface ActorTrace {
231
266
  model?: string;
232
267
  };
233
268
  /**
234
- * ADDITIVE + OPTIONAL record of HOW the model was asked to run (humanish.model-settings.v1,
235
- * #497). `ids.model` says which model; this says the reasoning effort the request actually
269
+ * Additive + optional record of how the model was asked to run (humanish.model-settings.v1).
270
+ * `ids.model` says which model; this says the reasoning effort the request actually
236
271
  * carried. Present on traces whose provider declares settings; absent everywhere else and on
237
272
  * every pre-existing bundle, and its absence is tolerated by verify.
238
273
  *
239
- * It exists because effort was a silent constant: unreachable from a lab, so every run took the
240
- * provider default. Effort is part of WHO the participant was, not of how the instrument was
274
+ * It exists because effort was a silent constant: unreachable from a study, so every run took the
275
+ * provider default. Effort is part of who the participant was, not of how the instrument was
241
276
  * tuned (docs/principles/actor-fidelity.md), so a trace that does not carry it is a result with
242
- * half its sample description missing — and two such traces cannot honestly be compared.
277
+ * half its sample description missing, and two such traces cannot be compared.
243
278
  */
244
279
  modelSettings?: {
245
280
  reasoningEffort: string;
@@ -247,29 +282,29 @@ export interface ActorTrace {
247
282
  };
248
283
  counts: Record<string, number>;
249
284
  /**
250
- * ADDITIVE + OPTIONAL affordance record (humanish.affordance-use.v1, #369): which KIND of route
251
- * this actor took — pointer, keyboard, url-navigation, script-execution, devtools,
252
- * browser-internal, observation — as per-class counts over the run's dispatched actions.
285
+ * Additive + optional affordance record (humanish.affordance-use.v1): which kind of route
286
+ * this actor took (pointer, keyboard, url-navigation, script-execution, devtools,
287
+ * browser-internal, observation), as per-class counts over the run's dispatched actions.
253
288
  * Present on computer-use traces that dispatched at least one action; absent elsewhere and on
254
289
  * every pre-existing bundle (its absence is tolerated by verify). The harness records the class
255
- * and states NO verdict: whether a class is faithful depends on the population the study
290
+ * and states no verdict: whether a class is faithful depends on the population the study
256
291
  * declares, which is product semantics and belongs to the adopter's scorer. See
257
292
  * docs/principles/actor-fidelity.md.
258
293
  */
259
294
  affordanceUse?: AffordanceUse;
260
295
  /**
261
- * ADDITIVE + OPTIONAL task funnel (humanish.task-funnel.v1, #414): how far this participant got
262
- * through the lab's declared protocol, corroborated per task by observations rather than by the
263
- * actor's own narration. Present only when the lab declared `tasks` and the session ran; absent
264
- * on every pre-existing bundle and on dry-run contract bundles (honest absence — a funnel that
296
+ * Additive + optional task funnel (humanish.task-funnel.v1): how far this participant got
297
+ * through the study's declared protocol, corroborated per task by observations rather than by the
298
+ * actor's own narration. Present only when the study declared `tasks` and the session ran; absent
299
+ * on every pre-existing bundle and on dry-run contract bundles (a funnel that
265
300
  * was never measured is not an empty funnel). Its absence is tolerated by verify.
266
301
  */
267
302
  taskFunnel?: TaskFunnel;
268
303
  /**
269
- * ADDITIVE + OPTIONAL (#570): the outcome the participant declared on its final turn, when its
304
+ * Additive + optional: the outcome the participant declared on its final turn, when its
270
305
  * provider's reply carries the field. Absent on free-text providers and on every older bundle.
271
306
  * The route reads this before it reads the closing paragraph; three regex patches in one month
272
- * (#453, #549, #565) each fixed a false refusal and each left the next shape unhandled.
307
+ * each fixed a false refusal and each left the next shape unhandled.
273
308
  */
274
309
  declaredOutcome?: ParticipantDeclaredOutcome;
275
310
  /** Closing report after a harness-owned stop. Does not change task outcomes or permit actions. */
@@ -289,13 +324,13 @@ export interface ActorTrace {
289
324
  * Known tokenUsage remains usable as a partial total. Absence is not proof of completeness. */
290
325
  interactionUsageIncomplete?: true;
291
326
  /**
292
- * ADDITIVE + OPTIONAL token-derived cost ESTIMATE for this trace (humanish.actor-estimated-cost.v1).
293
- * Distinct from `tokenUsage.costUsd`, which is RESERVED for a real provider-returned charge: a
327
+ * Additive + optional token-derived cost estimate for this trace (humanish.actor-estimated-cost.v1).
328
+ * Distinct from `tokenUsage.costUsd`, which is reserved for a real provider-returned charge: a
294
329
  * bare `costUsd` always means "the provider billed this", while `estimatedCost.estimatedCostUsd`
295
- * is a rate-table multiply named honestly as an estimate (invariant 6). Absent on the Codex
330
+ * is a rate-table multiply named as an estimate, so the claim matches the mechanism. Absent on the Codex
296
331
  * app-server and scripted traces and on every pre-existing bundle; the terminal trace records a
297
332
  * null estimate. Its absence is tolerated by verify (fail-open on display). A `null`
298
- * estimatedCostUsd is DECLARED ABSENT (unknown rate / no usage), never 0.
333
+ * estimatedCostUsd is declared absent (unknown rate / no usage), never 0.
299
334
  */
300
335
  estimatedCost?: ActorEstimatedCost;
301
336
  capabilities: ActorCapabilities;
@@ -6,24 +6,24 @@ import { isCuaProviderFailurePhase, } from "./computer-use/provider-error.js";
6
6
  // The schema maps the providers and routes implemented by the closed first-party
7
7
  // registry. The broader Actor.run(input) and ApprovalPolicy contract remains
8
8
  // design-only and is intentionally absent from these runtime types. RedactionHooks
9
- // (src/evidence/redaction.ts) and ResolvedPersona (src/lab/persona.ts) ship in
9
+ // (src/evidence/redaction.ts) and ResolvedPersona (src/study/persona.ts) ship in
10
10
  // their own modules.
11
11
  export const ACTOR_TRACE_SCHEMA = "humanish.actor-trace.v1";
12
12
  /**
13
- * How a session ended, from the point of view of the STUDY rather than the harness.
13
+ * How a session ended, from the point of view of the study rather than the harness.
14
14
  *
15
15
  * The distinction matters because two of these are participant outcomes and the rest are not. A
16
16
  * participant who abandons a task is the single most valuable thing a usability study produces, and
17
- * recording that as `failed` — as this type used to force — reads as the instrument breaking. See
17
+ * recording that as `failed` reads as the instrument breaking. See
18
18
  * docs/principles/three-roles.md.
19
19
  *
20
20
  * - `passed` the participant reached the goal
21
- * - `abandoned` the participant stopped trying. A FINDING, not a malfunction
21
+ * - `abandoned` the participant stopped trying. A finding, not a malfunction
22
22
  * - `incomplete` the session ended (time or budget) before the goal was reached
23
23
  * - `blocked` the participant could not proceed: an approval the run could not give, or a
24
- * blocker they described in their own final words (#476)
24
+ * blocker they described in their own final words
25
25
  * - `timed_out` the session hit its deadline with no productive activity at all
26
- * - `failed` the HARNESS failed: a dead sandbox, a provider error, a broken artifact
26
+ * - `failed` the harness failed: a dead sandbox, a provider error, a broken artifact
27
27
  */
28
28
  export const ACTOR_STATUSES = [
29
29
  "passed",
@@ -33,7 +33,7 @@ export const ACTOR_STATUSES = [
33
33
  "timed_out",
34
34
  "failed",
35
35
  ];
36
- /** Statuses that describe what happened to a PARTICIPANT rather than a harness malfunction. Verify
36
+ /** Statuses that describe what happened to a participant rather than a harness malfunction. Verify
37
37
  * treats these as study results, so a run whose evidence is sound is not called untrustworthy just
38
38
  * because a persona gave up. */
39
39
  export const PARTICIPANT_OUTCOME_STATUSES = ["abandoned", "incomplete"];
@@ -55,18 +55,23 @@ export const ACTOR_STOP_CAUSES = [
55
55
  "usage_unreported",
56
56
  ];
57
57
  /**
58
- * Codex CLI releases a recorded account profile may name. Append-only: a release can leave the
59
- * launch lists in codex/qualified-versions.ts, but saved bundles naming it stay readable.
58
+ * The oldest Codex CLI release a recorded account profile may name. Readers accept every stable
59
+ * `MAJOR.MINOR.PATCH` release from it on, so a saved bundle stays readable whichever release
60
+ * recorded it; launch admission (codex/codex-admission.ts) alone decides what runs.
60
61
  */
61
- export const RECORDED_CODEX_CLI_VERSIONS = [
62
- "0.154.0",
63
- "0.157.1",
64
- "0.159.2",
65
- "0.159.3",
66
- "0.160.0",
67
- ];
62
+ export const RECORDED_CODEX_CLI_FLOOR = "0.154.0";
63
+ /** A stable release at or above the floor. Parts compare as digit strings, exact at any length. */
68
64
  export function isRecordedCodexCliVersion(value) {
69
- return RECORDED_CODEX_CLI_VERSIONS.some((version) => version === value);
65
+ if (typeof value !== "string" || !/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(value))
66
+ return false;
67
+ const release = value.split("."), floor = RECORDED_CODEX_CLI_FLOOR.split(".");
68
+ for (const [index, part] of release.entries()) {
69
+ const order = part.length - floor[index].length ||
70
+ (part === floor[index] ? 0 : part > floor[index] ? 1 : -1);
71
+ if (order !== 0)
72
+ return order > 0;
73
+ }
74
+ return true;
70
75
  }
71
76
  /** Durable reader profile. Append new qualified profiles; never rewrite old evidence. */
72
77
  export function validActorExecutionProfile(value) {
@@ -174,7 +179,7 @@ export const CODEX_APP_SERVER_CAPABILITIES = {
174
179
  license: "open",
175
180
  };
176
181
  // Scripted browser driver (src/actors/scripted-browser/): deterministic Playwright step
177
- // replay against a loopback app. byoModel is false because there is NO model — the committed
182
+ // replay against a loopback app. byoModel is false because there is no model: the committed
178
183
  // scenario steps are the whole behavior; tokenUsage on its traces records zeros by mechanism.
179
184
  export const SCRIPTED_BROWSER_CAPABILITIES = {
180
185
  headless: true,
@@ -188,12 +193,13 @@ export const SCRIPTED_BROWSER_CAPABILITIES = {
188
193
  };
189
194
  // Terminal agent (src/routes/terminal/route.ts): a real autonomous coding agent (Codex) discovering
190
195
  // and using a CLI/product from inside an E2B shell, capturing its non-interactive exec output as
191
- // a redacted event stream + normalized transcript. The "terminal" lane is the autonomous-agent
192
- // study lane (distinct from "code", the operator-machine Codex lanes). byoModel is false: the
193
- // agent runs its own model via the command-scoped runtime auth, not a humanish-supplied provider.
194
- // keyPlacement is "in-sandbox-command-scoped" — the load-bearing inversion of every existing
195
- // E2B route's external-key default (the agent is the keyed process and it runs INSIDE). The
196
- // terminal-product live route enforces the boundary before sandbox creation.
196
+ // a redacted event stream + normalized transcript. The "terminal" run kind is the
197
+ // autonomous-agent study run kind (distinct from "code", the operator-machine Codex
198
+ // actors). byoModel is false: the agent runs its own model via the command-scoped runtime
199
+ // auth, not a humanish-supplied provider. keyPlacement is "in-sandbox-command-scoped": the
200
+ // inversion of every other E2B route's external-key default (the agent is the keyed process and it
201
+ // runs inside the sandbox). The terminal-product live route enforces the boundary before sandbox
202
+ // creation.
197
203
  export const TERMINAL_AGENT_CAPABILITIES = {
198
204
  headless: true,
199
205
  structuredTrace: true,
@@ -34,7 +34,7 @@ export interface ClaudeSession {
34
34
  export declare function userMessage(text: string): JsonObject;
35
35
  /**
36
36
  * Start one Claude Code session and return a provider that spends it, one user message per
37
- * computer-use turn. Started EAGERLY (before the first screenshot) so the CLI's own boot is paid
37
+ * computer-use turn. Started eagerly (before the first screenshot) so the CLI's own boot is paid
38
38
  * while the sandbox is still settling rather than inside turn one.
39
39
  */
40
40
  export declare function startClaudeSession(options?: ClaudeSessionOptions): Promise<ClaudeSession>;