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,6 +1,6 @@
1
- import { isRecordedCodexCliVersion, } from "../contract.js";
2
- import { defaultCodexCliVersion } from "./qualified-versions.js";
3
- import { CuaProviderError, isCuaProviderError, } from "../computer-use/provider-error.js";
1
+ import {} from "../contract.js";
2
+ import { defaultCodexCliVersion, untestedOperatorReleaseWarning } from "./codex-admission.js";
3
+ import { ComputerUseProviderError, isComputerUseProviderError, } from "../computer-use/provider-error.js";
4
4
  import { validateBrowserControlPng, validateHeardSpeech } from "../../browser-control/protocol.js";
5
5
  import { createRestrictedCodexSession, } from "./restricted-session.js";
6
6
  import { PARTICIPANT_PROFILE, PARTICIPANT_LIMITS as L, PARTICIPANT_FINAL_SCHEMA, participantToolSchema, parseParticipantTool, parseParticipantFinal, } from "./restricted-participant-policy.js";
@@ -38,6 +38,7 @@ function deferred() {
38
38
  void promise.catch(() => undefined);
39
39
  return { promise, resolve, reject };
40
40
  }
41
+ // prose-check: model prompt (Codex reads this tool description, not a person)
41
42
  const toolDescription = (speechEnabled) => `Act on the participant's browser through humanish. Submit one to four UI actions${speechEnabled ? ", including speak when you need to reply aloud," : ""} and a short public comment; never private reasoning. humanish returns a JSON STRING with execution acknowledgments${speechEnabled ? ", speech heard from the actual participant speaker sink," : ""} and a fresh screenshot. In Code Mode use: const r = JSON.parse(await tools.humanish_ui({narration: "...", actions: [...]})); text({acknowledgments: r.acknowledgments${speechEnabled ? ", heardSpeech: r.heardSpeech" : ""}, contextHint: r.contextHint, closing: r.closing}); image(r.imageUrl). Call serially and inspect each returned screenshot${speechEnabled ? " and heardSpeech array" : ""} before deciding what to do next.${speechEnabled ? " Use speak only after the visible UI shows that you joined the call and your microphone is unmuted; it sends audio into that call." : ""} Acknowledged input does not prove an application outcome. If closing is true, stop calling tools and give your final account.`;
42
43
  const participantInstructions = (prompt, speechEnabled) => `${prompt}\n\nYou are the study participant throughout this conversation, including its closing account. Use only the supplied screenshots and humanish_ui tool to interact. The tool returns a JSON string: parse it, inspect acknowledgments${speechEnabled ? " and heardSpeech captured from the actual participant speaker sink" : ""}, and display imageUrl with Code Mode image(). Do not print the image data URL as text. Keep your persona and earlier observations throughout the session.${speechEnabled ? " A speak action plays into the participant microphone; use it only after the visible UI shows that you joined the call and the microphone is unmuted." : ""} Speak publicly about your experience, never reveal private reasoning. Completed inputs do not prove application outcomes; verify on the next screenshot. When the task ends, return only the required final JSON with outcome, summary and frictionReports. Report observed confusion and recovered mistakes as well as blockers. Do not invent observations.`;
43
44
  /** Turns and failures from the native run, handed in order to the next provider request. */
@@ -149,15 +150,15 @@ const runReceipt = (result) => ({
149
150
  */
150
151
  function finalTurn(result, receipt, usage, stopped) {
151
152
  if (stopped.stopped)
152
- throw new CuaProviderError(stopped.failedCleanup ? "cleanup_unconfirmed" : "cancelled", receipt, usage, result.failurePhase);
153
+ throw new ComputerUseProviderError(stopped.failedCleanup ? "cleanup_unconfirmed" : "cancelled", receipt, usage, result.failurePhase);
153
154
  if (result.status !== "completed" || result.errorCode !== null)
154
- throw new CuaProviderError(codeOf(result.errorCode), receipt, usage, result.failurePhase);
155
+ throw new ComputerUseProviderError(codeOf(result.errorCode), receipt, usage, result.failurePhase);
155
156
  let turn;
156
157
  try {
157
158
  turn = parseParticipantFinal(result.output);
158
159
  }
159
160
  catch {
160
- throw new CuaProviderError("invalid_response", receipt, usage, "response");
161
+ throw new ComputerUseProviderError("invalid_response", receipt, usage, "response");
161
162
  }
162
163
  return {
163
164
  ...turn,
@@ -238,8 +239,7 @@ export async function checkRestrictedCodexParticipantReadiness(options) {
238
239
  * An operator-auth session has one only once it resolved a model on a ChatGPT account.
239
240
  */
240
241
  function participantExecutionProfile(session, operator, effort) {
241
- const detected = session.cliVersion;
242
- const cliVersion = isRecordedCodexCliVersion(detected) ? detected : defaultCodexCliVersion();
242
+ const cliVersion = session.cliVersion ?? defaultCodexCliVersion();
243
243
  if (!operator)
244
244
  return { ...PARTICIPANT_PROFILE, cliVersion };
245
245
  return session.authentication === "chatgpt-account" && session.resolvedModel
@@ -284,8 +284,10 @@ function closeParticipantSession(state) {
284
284
  }));
285
285
  }
286
286
  /** What the closed native session reports beside cleanup: its run warnings and a late refusal. */
287
- function sessionReport(session) {
287
+ function sessionReport(session, operator) {
288
288
  const warnings = [
289
+ // A resolved model means thread/start was admitted: the release actually launched.
290
+ untestedOperatorReleaseWarning(session.resolvedModel === undefined ? undefined : session.cliVersion, operator),
289
291
  session.protocolIncompatibilities === undefined
290
292
  ? undefined
291
293
  : protocolIncompatibilityMessage(session.cliVersion, session.protocolIncompatibilities),
@@ -338,9 +340,9 @@ function launchNativeRun(settings, state, req, imageUrl) {
338
340
  catch (error) {
339
341
  revokeParticipant(state);
340
342
  state.events.emit({
341
- error: isCuaProviderError(error)
343
+ error: isComputerUseProviderError(error)
342
344
  ? error
343
- : new CuaProviderError("process_failed", { dispatched: "unknown", usageComplete: false, cleanup: "unconfirmed" }, usage),
345
+ : new ComputerUseProviderError("process_failed", { dispatched: "unknown", usageComplete: false, cleanup: "unconfirmed" }, usage),
344
346
  });
345
347
  }
346
348
  finally {
@@ -354,7 +356,7 @@ async function runParticipantTurn(settings, state, req, signal, debrief) {
354
356
  return state.events.next();
355
357
  if (signal.aborted) {
356
358
  revokeParticipant(state);
357
- throw new CuaProviderError("cancelled", noDispatch());
359
+ throw new ComputerUseProviderError("cancelled", noDispatch());
358
360
  }
359
361
  const conversation = {
360
362
  instructions: state.instructions,
@@ -363,7 +365,7 @@ async function runParticipantTurn(settings, state, req, signal, debrief) {
363
365
  lastActionCount: state.lastActionCount,
364
366
  };
365
367
  if (rejectsParticipantRequest(req, conversation))
366
- throw new CuaProviderError("request_rejected", noDispatch());
368
+ throw new ComputerUseProviderError("request_rejected", noDispatch());
367
369
  const onAbort = () => {
368
370
  revokeParticipant(state);
369
371
  };
@@ -380,7 +382,7 @@ async function runParticipantTurn(settings, state, req, signal, debrief) {
380
382
  else if (!state.active)
381
383
  launchNativeRun(settings, state, req, imageUrl);
382
384
  else
383
- throw new CuaProviderError("busy", noDispatch());
385
+ throw new ComputerUseProviderError("busy", noDispatch());
384
386
  return await state.events.next();
385
387
  }
386
388
  finally {
@@ -424,7 +426,7 @@ function participantProvider(settings, state, start) {
424
426
  export function createRestrictedCodexParticipant(options = {}) {
425
427
  const timeoutMs = options.requestTimeoutMs ?? L.requestMs;
426
428
  if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > L.requestMs)
427
- throw new CuaProviderError("request_rejected", noDispatch());
429
+ throw new ComputerUseProviderError("request_rejected", noDispatch());
428
430
  const operator = options.authMode === "operator";
429
431
  const speechEnabled = options.speechEnabled === true;
430
432
  const settings = {
@@ -456,9 +458,9 @@ export function createRestrictedCodexParticipant(options = {}) {
456
458
  let pending, closing;
457
459
  const start = (req, signal, debrief) => {
458
460
  if (state.closed && !state.events.waiting)
459
- return Promise.reject(new CuaProviderError("request_rejected", noDispatch()));
461
+ return Promise.reject(new ComputerUseProviderError("request_rejected", noDispatch()));
460
462
  if (pending)
461
- return Promise.reject(new CuaProviderError("busy", noDispatch()));
463
+ return Promise.reject(new ComputerUseProviderError("busy", noDispatch()));
462
464
  const task = runParticipantTurn(settings, state, req, signal, debrief);
463
465
  pending = task;
464
466
  void task
@@ -481,7 +483,7 @@ export function createRestrictedCodexParticipant(options = {}) {
481
483
  state.failedCleanup = true;
482
484
  return {
483
485
  status: state.failedCleanup ? "unconfirmed" : "confirmed",
484
- ...sessionReport(state.session),
486
+ ...sessionReport(state.session, settings.operator),
485
487
  };
486
488
  })();
487
489
  return closing;
@@ -1,8 +1,8 @@
1
1
  import type { ReasoningEffort } from "../reasoning-effort.js";
2
2
  /** Versioned, deliberately narrow profile qualified with an account-backed vision turn.
3
3
  * The CLI still advertises code-mode tools: disabling their host is the enforcement
4
- * boundary. Feature names alone are not proof that a tool has been removed. The admitted
5
- * CLI releases are per host, in qualified-versions.ts. */
4
+ * boundary. Feature names alone are not proof that a tool has been removed. Which CLI
5
+ * releases launch is decided in codex-admission.ts. */
6
6
  export declare const RESTRICTED_CODEX_ANALYSIS_IDENTITY: {
7
7
  readonly provider: "codex";
8
8
  readonly authMode: "chatgpt";
@@ -1,7 +1,7 @@
1
1
  /** Versioned, deliberately narrow profile qualified with an account-backed vision turn.
2
2
  * The CLI still advertises code-mode tools: disabling their host is the enforcement
3
- * boundary. Feature names alone are not proof that a tool has been removed. The admitted
4
- * CLI releases are per host, in qualified-versions.ts. */
3
+ * boundary. Feature names alone are not proof that a tool has been removed. Which CLI
4
+ * releases launch is decided in codex-admission.ts. */
5
5
  export const RESTRICTED_CODEX_ANALYSIS_IDENTITY = {
6
6
  provider: "codex",
7
7
  authMode: "chatgpt",
@@ -12,9 +12,9 @@ export interface RestrictedCodexSessionOptions {
12
12
  /** The release a caller already recorded (an analysis identity); any other release is refused. */
13
13
  cliVersion?: string;
14
14
  /**
15
- * Bypasses qualification: replaces this host's admitted releases with any list. It exists only
16
- * so scripts/codex-qualify.mjs can launch an unqualified candidate. No library export, lab
17
- * manifest, CLI flag, RunLabOptions field or LabDeps seam reaches it
15
+ * Bypasses launch admission: admits exactly this list. It exists only so
16
+ * scripts/codex-qualify.mjs can launch a candidate admission would refuse. No library export, study
17
+ * manifest, CLI flag, RunStudyOptions field or StudyDeps seam reaches it
18
18
  * (tests/actors/codex/cli-versions-seam.test.ts).
19
19
  */
20
20
  cliVersions?: readonly string[];
@@ -2,7 +2,7 @@ import { spawn } from "node:child_process";
2
2
  import { chmod, lstat, mkdir, mkdtemp, readdir, realpath, rm, unlink, writeFile, } from "node:fs/promises";
3
3
  import { homedir, tmpdir } from "node:os";
4
4
  import path from "node:path";
5
- import { admittedCodexCliVersions } from "./qualified-versions.js";
5
+ import { admitsCodexCliVersion, supportsIsolatedCodex } from "./codex-admission.js";
6
6
  import { launchAdmittedAppServer, } from "./restricted-launch.js";
7
7
  import { CODEX_IMAGE, CODEX_MAX_OUTPUT_BYTES, CODEX_MAX_REQUEST_BYTES, RESTRICTED_CODEX_ANALYSIS_MODELS, codexRecord, restrictedCodexFailure, restrictedCodexRequestError, } from "./restricted-policy.js";
8
8
  import { RestrictedCodexDeadline, RestrictedCodexStop, hasUnclosedChildren, retainUnclosedChild, } from "./restricted-transport.js";
@@ -312,11 +312,16 @@ function refusedRun(settings, state, request, busy) {
312
312
  return restrictedCodexFailure("codex_busy");
313
313
  const supportedPlatform = operatorAuth
314
314
  ? restrictedCodexNpmTarget(platform, arch) !== undefined
315
- : (platform === "linux" && arch === "x64") || (platform === "darwin" && arch === "arm64");
315
+ : supportsIsolatedCodex(platform, arch);
316
316
  if (!supportedPlatform)
317
317
  return restrictedCodexFailure("codex_unsupported_platform");
318
318
  return undefined;
319
319
  }
320
+ /** Which releases a session starts: launch admission, or the qualifier's exact list. */
321
+ function launchAdmission(options) {
322
+ const exact = options.cliVersions;
323
+ return exact === undefined ? admitsCodexCliVersion : (version) => exact.includes(version);
324
+ }
320
325
  export function createRestrictedCodexSession(options = {}) {
321
326
  // Option reads keep their old order: platform, arch, env, participant, spawnFn, cliVersions.
322
327
  const platform = options.platform ?? process.platform, arch = options.arch ?? process.arch;
@@ -331,7 +336,7 @@ export function createRestrictedCodexSession(options = {}) {
331
336
  operatorAuth: participant?.authMode === "operator",
332
337
  reasoningEffort: participant?.reasoningEffort ?? "low",
333
338
  spawnFn: options.spawnFn ?? ((file, args, spawnOptions) => spawn(file, args, spawnOptions)),
334
- admittedVersions: options.cliVersions ?? admittedCodexCliVersions(platform, arch),
339
+ admits: launchAdmission(options),
335
340
  };
336
341
  const state = {
337
342
  work: undefined,
@@ -434,7 +439,7 @@ export async function checkRestrictedCodexSessionReadiness(input = {}, options =
434
439
  * `--version` runs with a private temporary home, removed afterwards. */
435
440
  export async function detectRestrictedCodexCliVersion(input = {}, options = {}) {
436
441
  const platform = options.platform ?? process.platform, arch = options.arch ?? process.arch;
437
- if (!((platform === "linux" && arch === "x64") || (platform === "darwin" && arch === "arm64")))
442
+ if (!supportsIsolatedCodex(platform, arch))
438
443
  return { cliVersion: null, errorCode: "codex_unsupported_platform" };
439
444
  const sourceEnv = options.env ?? process.env;
440
445
  const deadline = new RestrictedCodexDeadline(input.timeoutMs ?? 15_000, input.signal);
@@ -444,7 +449,7 @@ export async function detectRestrictedCodexCliVersion(input = {}, options = {})
444
449
  work = await realpath(await mkdtemp(path.join(options.tempRoot ?? tmpdir(), "humanish-codex-version-")));
445
450
  const home = path.join(work, "home");
446
451
  await mkdir(home, { mode: 0o700 });
447
- const cliVersion = await checkVersion(file, childEnvironment(sourceEnv, home, work), work, options.spawnFn ?? ((command, args, settings) => spawn(command, args, settings)), deadline, options.cliVersions ?? admittedCodexCliVersions(platform, arch), options.cliVersion);
452
+ const cliVersion = await checkVersion(file, childEnvironment(sourceEnv, home, work), work, options.spawnFn ?? ((command, args, settings) => spawn(command, args, settings)), deadline, launchAdmission(options), options.cliVersion);
448
453
  return { cliVersion, errorCode: null };
449
454
  }
450
455
  catch (error) {
@@ -4,13 +4,13 @@ import { type E2BDesktopExecutorOptions, type E2BDesktopLike } from "../../subst
4
4
  import { type OpenAiResponsesProviderOptions } from "./openai-provider.js";
5
5
  import { type RedactionHooks } from "../../evidence/redaction.js";
6
6
  import type { DwellWindow, StopWhen } from "../stop-conditions.js";
7
- import type { LabTask } from "../../lab/tasks.js";
7
+ import type { StudyTask } from "../../study/tasks.js";
8
8
  export interface CuaActorSessionOptions {
9
9
  /** The composed mission (persona + scenario/participant instruction) handed to the model. */
10
10
  instructions: string;
11
11
  /** Provenance of the persona this actor embodies (id + applied traits + prompt digest). */
12
12
  persona: ActorPersonaRef;
13
- /** Hard wall-clock runaway guard — the only count-free hard stop the loop honors. */
13
+ /** Hard wall-clock runaway guard: the only count-free hard stop the loop honors. */
14
14
  timeoutMs: number;
15
15
  signal?: AbortSignal;
16
16
  /** Live provider construction (used when `provider` is not injected). */
@@ -19,10 +19,10 @@ export interface CuaActorSessionOptions {
19
19
  desktop?: E2BDesktopLike;
20
20
  executorOptions?: E2BDesktopExecutorOptions;
21
21
  /**
22
- * DI seams — inject to bypass live construction (CI uses these for zero-spend tests; library
23
- * callers use them to drive a state-driven, non-vision flow). NOTE: a STATE executor (one
24
- * whose observe() returns no screenshot — see CuaObservation.screenshot optional) MUST be
25
- * paired with a NON-vision provider (requiresFrame falsey). The default OpenAI provider is
22
+ * DI seams: inject to bypass live construction (CI uses these for zero-spend tests; library
23
+ * callers use them to drive a state-driven, non-vision flow). NOTE: a state executor (one
24
+ * whose observe() returns no screenshot; see CuaObservation.screenshot optional) must be
25
+ * paired with a non-vision provider (requiresFrame falsey). The default OpenAI provider is
26
26
  * vision-based and would fail closed against a screenshot-less observation. See
27
27
  * docs/architecture/state-driven-executor.md.
28
28
  */
@@ -39,7 +39,7 @@ export interface CuaActorSessionOptions {
39
39
  idleSteps?: number;
40
40
  noProgressSteps?: number;
41
41
  /**
42
- * Redact persisted screenshots (blur+downscale). Default FALSE — full fidelity for local use.
42
+ * Redact persisted screenshots (blur+downscale). Default `false`: full fidelity for local use.
43
43
  * Set true for unowned subjects or share-as-is bundles. The provider always sees raw frames.
44
44
  */
45
45
  redactScreenshots?: boolean;
@@ -49,29 +49,29 @@ export interface CuaActorSessionOptions {
49
49
  writeScreenshot?: (name: string, bytes: Buffer) => Promise<string>;
50
50
  /** Deterministic harness-owned stop guards evaluated between model turns. */
51
51
  stopWhen?: StopWhen;
52
- /** A declared observation window (#510), forwarded to the loop. */
52
+ /** A declared observation window, forwarded to the loop. */
53
53
  dwell?: DwellWindow;
54
- /** The lab's declared protocol; the loop records a corroborated task funnel on the trace (#414).
55
- * Only the `success` criteria are read here — the participant-facing goals are already composed
54
+ /** The study's declared protocol; the loop records a corroborated task funnel on the trace.
55
+ * Only the `success` criteria are read here; the participant-facing goals are already composed
56
56
  * into `instructions` upstream, and the criteria never reach the prompt. */
57
- tasks?: readonly LabTask[];
58
- /** FAIL-CLOSED spend cap (USD) threaded to the loop; absent = uncapped. See CuaLoopOptions.maxUsd. */
57
+ tasks?: readonly StudyTask[];
58
+ /** Fail-closed spend cap (USD) threaded to the loop; absent = uncapped. See CuaLoopOptions.maxUsd. */
59
59
  maxUsd?: number;
60
60
  /** Injected pure per-turn cost estimator paired with `maxUsd`. See CuaLoopOptions.estimateTurnCostUsd. */
61
61
  estimateTurnCostUsd?: (usage: ActorTokenUsage) => number | null;
62
- /** RUN-LEVEL spend guard threaded to the loop (#299). See CuaLoopOptions.overRunBudget. */
62
+ /** Run-level spend guard threaded to the loop. See CuaLoopOptions.overRunBudget. */
63
63
  overRunBudget?: (usage: ActorTokenUsage) => string | null;
64
64
  /** Stricter unknown-usage policy for capped sessions (see CuaLoopOptions); it also makes the
65
65
  * OpenAI provider send one HTTP dispatch per turn. Library-only. */
66
66
  requireReportedUsageForSpendCap?: boolean;
67
- /** RUNTIME-ONLY observed-URL callback threaded to the loop; see CuaLoopOptions.onObservedUrl. Used by
68
- * the concurrent shared-world handoff barrier to latch a host seat's live /lobby/CODE URL. */
67
+ /** Runtime-only observed-URL callback threaded to the loop; see LoopTaps.onObservedUrl. Used by
68
+ * the concurrent shared-world handoff barrier to latch a host's live /lobby/CODE URL. */
69
69
  onObservedUrl?: (url: string | undefined) => void;
70
- /** RUNTIME-ONLY per-turn narration callback threaded to the loop; see CuaLoopOptions.onMessage. */
70
+ /** Runtime-only per-turn narration callback threaded to the loop; see LoopTaps.onMessage. */
71
71
  onMessage?: (text: string) => void;
72
- /** RUNTIME-ONLY per-turn raw-frame callback threaded to the loop; see CuaLoopOptions.onScreenshot. */
72
+ /** Runtime-only per-turn raw-frame callback threaded to the loop; see LoopTaps.onScreenshot. */
73
73
  onScreenshot?: (frame: Buffer) => void;
74
- /** Per-turn trace snapshot callback threaded to the loop (#441); see CuaLoopOptions.onTrace. */
74
+ /** Per-turn trace snapshot callback threaded to the loop; see CuaLoopOptions.onTrace. */
75
75
  onTrace?: (items: readonly ActorTraceItem[], usage: ActorTokenUsage, metadata?: CuaLiveMetadata) => void;
76
76
  }
77
77
  export declare function runCuaActorSession(options: CuaActorSessionOptions): Promise<CuaLoopResult>;
@@ -1,13 +1,13 @@
1
1
  // The registry-facing wrapper for the OpenAI Computer Use (CUA) actor. runComputerUseLoop needs
2
2
  // fully-constructed provider/executor instances; exposing that raw through the actor registry
3
3
  // would leak adapter construction to every call site. So runCuaActorSession takes intent-level
4
- // fields and constructs the provider/executor internally — with DI seams (provider/executor/now)
4
+ // fields and constructs the provider/executor internally, with DI seams (provider/executor/now)
5
5
  // so CI can drive the real loop with fakes and zero network/zero spend (mirrors how the Claude
6
6
  // adapter injects its queryFn).
7
7
  //
8
8
  // The loop already returns a fully-formed ActorTrace at result.trace, so there is no separate
9
- // toActorTrace mapper — runCuaActorSession returns the CuaLoopResult unchanged.
10
- import { runComputerUseLoop, } from "./loop.js";
9
+ // toActorTrace mapper: runCuaActorSession returns the CuaLoopResult unchanged.
10
+ import { runComputerUseLoopWithTaps, } from "./loop.js";
11
11
  import { createE2BDesktopExecutor, } from "../../substrates/e2b/desktop-executor.js";
12
12
  import { createOpenAiResponsesProvider, } from "./openai-provider.js";
13
13
  import { defaultRedactionHooks } from "../../evidence/redaction.js";
@@ -55,7 +55,7 @@ export async function runCuaActorSession(options) {
55
55
  ...(options.onScreenshot === undefined ? {} : { onScreenshot: options.onScreenshot }),
56
56
  ...(options.onTrace === undefined ? {} : { onTrace: options.onTrace }),
57
57
  };
58
- const result = await runComputerUseLoop(loopOptions);
58
+ const result = await runComputerUseLoopWithTaps(loopOptions);
59
59
  if (result.trace.executionProfile?.billing === "account-unknown") {
60
60
  result.trace.estimatedCost = estimateActorCostForExecution(result.trace.tokenUsage, result.trace.ids.model, result.trace.executionProfile);
61
61
  }
@@ -1,12 +1,12 @@
1
1
  /**
2
- * A caller's adapter refused this request BEFORE provider dispatch because a configured
2
+ * A caller's adapter refused this request before provider dispatch because a configured
3
3
  * local control limit was reached. This is an adapter declaration, not a provider response
4
4
  * or independent transport/billing attestation. Never use it for a dispatched request whose
5
5
  * outcome or usage is unknown. Import this class from the same humanish installation as the
6
6
  * loop/provider; names, message text and lookalike objects are not the contract.
7
7
  */
8
- export declare class CuaAdmissionLimitError extends Error {
8
+ export declare class ComputerUseAdmissionLimitError extends Error {
9
9
  constructor();
10
10
  }
11
11
  /** Internal nominal check: neither a matching payload nor a forged prototype is a declaration. */
12
- export declare function isCuaAdmissionLimitError(error: unknown): error is CuaAdmissionLimitError;
12
+ export declare function isComputerUseAdmissionLimitError(error: unknown): error is ComputerUseAdmissionLimitError;
@@ -1,19 +1,19 @@
1
1
  const admissionLimits = new WeakSet();
2
2
  /**
3
- * A caller's adapter refused this request BEFORE provider dispatch because a configured
3
+ * A caller's adapter refused this request before provider dispatch because a configured
4
4
  * local control limit was reached. This is an adapter declaration, not a provider response
5
5
  * or independent transport/billing attestation. Never use it for a dispatched request whose
6
6
  * outcome or usage is unknown. Import this class from the same humanish installation as the
7
7
  * loop/provider; names, message text and lookalike objects are not the contract.
8
8
  */
9
- export class CuaAdmissionLimitError extends Error {
9
+ export class ComputerUseAdmissionLimitError extends Error {
10
10
  constructor() {
11
11
  super("The adapter refused the request before provider dispatch because a local admission limit was reached.");
12
- this.name = "CuaAdmissionLimitError";
12
+ this.name = "ComputerUseAdmissionLimitError";
13
13
  admissionLimits.add(this);
14
14
  }
15
15
  }
16
16
  /** Internal nominal check: neither a matching payload nor a forged prototype is a declaration. */
17
- export function isCuaAdmissionLimitError(error) {
17
+ export function isComputerUseAdmissionLimitError(error) {
18
18
  return typeof error === "object" && error !== null && admissionLimits.has(error);
19
19
  }
@@ -21,11 +21,11 @@ export declare function isCuaExecutorErrorCode(value: unknown): value is CuaExec
21
21
  * began; a lost acknowledgement or partial action is `outcome_uncertain`, never a retry.
22
22
  * Import from the same installation as the loop: names and lookalike objects do not qualify.
23
23
  */
24
- export declare class CuaExecutorError extends Error {
24
+ export declare class ComputerUseExecutorError extends Error {
25
25
  readonly code: CuaExecutorErrorCode;
26
26
  readonly disposition: CuaExecutorDisposition;
27
27
  constructor(code: CuaExecutorErrorCode, disposition: CuaExecutorDisposition);
28
28
  }
29
29
  /** A forged prototype is not an executor declaration. */
30
- export declare function isCuaExecutorError(error: unknown): error is CuaExecutorError;
30
+ export declare function isComputerUseExecutorError(error: unknown): error is ComputerUseExecutorError;
31
31
  export {};
@@ -22,7 +22,7 @@ const executorErrors = new WeakSet();
22
22
  * began; a lost acknowledgement or partial action is `outcome_uncertain`, never a retry.
23
23
  * Import from the same installation as the loop: names and lookalike objects do not qualify.
24
24
  */
25
- export class CuaExecutorError extends Error {
25
+ export class ComputerUseExecutorError extends Error {
26
26
  code;
27
27
  disposition;
28
28
  constructor(code, disposition) {
@@ -31,7 +31,7 @@ export class CuaExecutorError extends Error {
31
31
  throw new TypeError("Invalid desktop executor error declaration.");
32
32
  }
33
33
  super(messages[code]);
34
- this.name = "CuaExecutorError";
34
+ this.name = "ComputerUseExecutorError";
35
35
  this.code = code;
36
36
  this.disposition = disposition;
37
37
  // Keep the values used in durable diagnostics finite even for JavaScript callers.
@@ -43,6 +43,6 @@ export class CuaExecutorError extends Error {
43
43
  }
44
44
  }
45
45
  /** A forged prototype is not an executor declaration. */
46
- export function isCuaExecutorError(error) {
46
+ export function isComputerUseExecutorError(error) {
47
47
  return typeof error === "object" && error !== null && executorErrors.has(error);
48
48
  }
@@ -3,10 +3,10 @@ import type { CuaAction, CuaTurnRequest } from "./types.js";
3
3
  /** A public-safe one-line action label. Never includes raw typed text. */
4
4
  export declare function describeCuaAction(action: CuaAction): string;
5
5
  /**
6
- * A public-safe fingerprint of ONE turn's actions, used only in memory to tell "trying the same
7
- * thing again" from "trying something new" (#383).
6
+ * A public-safe fingerprint of one turn's actions, used only in memory to tell "trying the same
7
+ * thing again" from "trying something new".
8
8
  *
9
- * Never includes typed text or key contents — a `type` contributes its LENGTH, exactly as
9
+ * Never includes typed text or key contents: a `type` contributes its length, exactly as
10
10
  * describeCuaAction does, so this can never become a keylogger. Coordinates are bucketed so that
11
11
  * re-clicking the same control counts as a repeat while moving to a different control does not.
12
12
  */
@@ -1,6 +1,6 @@
1
1
  import { classifyCuaAction } from "../../affordance.js";
2
2
  import { commandFailureInfo, isCommandExitError } from "../../../substrates/command-failure.js";
3
- import { CuaExecutorError, isCuaExecutorError } from "../executor-error.js";
3
+ import { ComputerUseExecutorError, isComputerUseExecutorError } from "../executor-error.js";
4
4
  import { CuaAbortError, CuaDeadlineError, CuaStallError, raceCallBound, raceSessionDeadline, requestScope, } from "./race.js";
5
5
  import { notice } from "./trace.js";
6
6
  // The participant's actions: their public labels, what counts as a material action, and how one
@@ -47,10 +47,10 @@ function describeAction(action) {
47
47
  }
48
48
  }
49
49
  /**
50
- * A public-safe fingerprint of ONE turn's actions, used only in memory to tell "trying the same
51
- * thing again" from "trying something new" (#383).
50
+ * A public-safe fingerprint of one turn's actions, used only in memory to tell "trying the same
51
+ * thing again" from "trying something new".
52
52
  *
53
- * Never includes typed text or key contents — a `type` contributes its LENGTH, exactly as
53
+ * Never includes typed text or key contents: a `type` contributes its length, exactly as
54
54
  * describeCuaAction does, so this can never become a keylogger. Coordinates are bucketed so that
55
55
  * re-clicking the same control counts as a repeat while moving to a different control does not.
56
56
  */
@@ -121,8 +121,8 @@ export async function runActionBatch(session, actions) {
121
121
  if (actionHistory.recentActionTitles.length > RECENT_ACTION_TITLES)
122
122
  actionHistory.recentActionTitles.shift();
123
123
  trace.bump("actions");
124
- // Classify BEFORE execute, mirroring counts.actions: the record is of what the actor
125
- // CHOSE, so an action that then fails to actuate is still an honest record of the route
124
+ // Classify before execute, mirroring counts.actions: the record is of what the actor
125
+ // chose, so an action that then fails to actuate is still a record of the route
126
126
  // it reached for.
127
127
  actionHistory.affordances.push(classifyCuaAction(action));
128
128
  session.phase = `executing ${title}`;
@@ -131,7 +131,7 @@ export async function runActionBatch(session, actions) {
131
131
  status = await dispatchAction(session, action, title);
132
132
  }
133
133
  catch (error) {
134
- const declared = isCuaExecutorError(error)
134
+ const declared = isComputerUseExecutorError(error)
135
135
  ? error.disposition
136
136
  : isCommandExitError(error)
137
137
  ? "skipped"
@@ -139,7 +139,7 @@ export async function runActionBatch(session, actions) {
139
139
  if (declared !== undefined)
140
140
  execution.actions.push({ index, status: declared });
141
141
  countAttempt(session, action, title, declared);
142
- if (isCuaExecutorError(error) &&
142
+ if (isComputerUseExecutorError(error) &&
143
143
  error.code === "action_rejected" &&
144
144
  error.disposition === "not_dispatched") {
145
145
  // Later actions may depend on this one (type, then submit). Return
@@ -150,10 +150,10 @@ export async function runActionBatch(session, actions) {
150
150
  trace.record("notice", () => notice("warn", "action rejected before dispatch", session.redactNarration(`action: ${title}; code: action_rejected; disposition: not_dispatched; remaining batch actions not dispatched: ${actions.length - index - 1}`)));
151
151
  return { execution, hint: rejectedActionHint(title) };
152
152
  }
153
- if (isCuaExecutorError(error) || !isCommandExitError(error))
153
+ if (isComputerUseExecutorError(error) || !isCommandExitError(error))
154
154
  throw error;
155
155
  // A skipped action changes nothing on screen, so a persistently-failing run makes no
156
- // progress and still terminates honestly via the idle/no-progress backstop (gave_up),
156
+ // progress and still terminates via the idle/no-progress backstop (gave_up),
157
157
  // never a silent actor_error and never an infinite loop.
158
158
  recordCommandFailure(session, title, error);
159
159
  continue;
@@ -164,8 +164,8 @@ export async function runActionBatch(session, actions) {
164
164
  lifecycle: "completed",
165
165
  title,
166
166
  ...(action.kind === "speak" ? { text: session.redactNarration(action.text) } : {}),
167
- // Structured pin coordinates (#441), exactly the click classes the Observer
168
- // pins render — recorded fact instead of a title re-parse downstream.
167
+ // Structured pin coordinates, exactly the click classes the Observer
168
+ // pins render: recorded fact instead of a title re-parse downstream.
169
169
  ...(action.kind === "click" || action.kind === "double_click"
170
170
  ? { coord: { x: action.x, y: action.y } }
171
171
  : {}),
@@ -180,9 +180,9 @@ function countAttempt(session, action, title, status) {
180
180
  session.trace.counts.materialActions += 1;
181
181
  }
182
182
  /**
183
- * Execute one action. Idle actions only look (#480): a `wait` that hangs inside the SDK has in
183
+ * Execute one action. Idle actions only look: a `wait` that hangs inside the SDK has in
184
184
  * effect waited, so a stalled one is skipped with a notice and loses nothing the participant
185
- * chose. An action is recorded as completed only after execute() resolves (#248).
185
+ * chose. An action is recorded as completed only after execute() resolves.
186
186
  */
187
187
  async function dispatchAction(session, action, title) {
188
188
  if (!isIdleAction(action)) {
@@ -213,7 +213,7 @@ async function executeAction(session, action, title, boundMs) {
213
213
  }
214
214
  catch (error) {
215
215
  if (error instanceof CuaStallError && session.executor.stallRecovery === "fail_closed") {
216
- throw new CuaExecutorError("deadline_exceeded", "outcome_uncertain");
216
+ throw new ComputerUseExecutorError("deadline_exceeded", "outcome_uncertain");
217
217
  }
218
218
  if (error instanceof CuaDeadlineError || error instanceof CuaAbortError) {
219
219
  // The loop's deadline/abort may win before the executor can report whether its
@@ -2,10 +2,10 @@ import type { CuaAction, CuaObservation } from "./types.js";
2
2
  /**
3
3
  * A deterministic, bounded, sorted-key projection of an appState object, used as the friction
4
4
  * loop's progress key. Two structurally-equal states (regardless of key insertion order) map
5
- * to the SAME string, so key reordering can never fabricate a progress delta; two different
5
+ * to the same string, so key reordering can never fabricate a progress delta; two different
6
6
  * states map to different strings (within the caps).
7
7
  *
8
- * Correctness-load-bearing: it MUST NOT throw on a cyclic or huge input. Cycles are detected
8
+ * Correctness depends on this: it must not throw on a cyclic or huge input. Cycles are detected
9
9
  * with a seen-set (a back-edge degrades to the marker "[Circular]"); depth, key count, array
10
10
  * length, string length, and total output length are all capped so an adversarial or merely
11
11
  * large appState degrades to a bounded value rather than crashing the loop. Pure: it never
@@ -14,7 +14,7 @@ import type { CuaAction, CuaObservation } from "./types.js";
14
14
  export declare function stableProgressKey(appState: Record<string, unknown>): string;
15
15
  export interface Backstop {
16
16
  readonly progressKey: string;
17
- /** The last few turns' action fingerprints, in memory only, for the #383 corroboration rule. */
17
+ /** The last few turns' action fingerprints, in memory only, for the corroboration rule below. */
18
18
  readonly recentFingerprints: readonly string[];
19
19
  readonly consecutiveIdle: number;
20
20
  readonly consecutiveNoProgress: number;