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
@@ -16,7 +16,7 @@ export declare function buildSingleParticipantBundle(args: {
16
16
  /** The run's verdict, from the judge. */
17
17
  verdict: Verdict;
18
18
  realEmail?: boolean;
19
- /** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
19
+ /** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
20
20
  run: BundleRun;
21
21
  actorId: string;
22
22
  appUrl: string;
@@ -26,8 +26,8 @@ export declare function buildSingleParticipantBundle(args: {
26
26
  surface?: string;
27
27
  caseGroup?: string;
28
28
  dryRun: boolean;
29
- labId: string;
30
- labTitle?: string;
29
+ studyId: string;
30
+ studyTitle?: string;
31
31
  mission: string;
32
32
  assignment?: RunStream["assignment"];
33
33
  persona: ActorPersonaRef;
@@ -44,20 +44,20 @@ export declare function buildSingleParticipantBundle(args: {
44
44
  isMobile?: boolean;
45
45
  screenshots: string[];
46
46
  /** Relative run-dir path of the digest-only comms-thread evidence artifact (humanish.comms-thread.v1),
47
- * when a comms lab captured mail; registered as a "log" stream artifact. */
47
+ * when a comms study captured mail; registered as a "log" stream artifact. */
48
48
  commsArtifactPath?: string;
49
49
  /**
50
50
  * Capture-time screenshot policy ("blurred" when policies.redactScreenshots, else "raw").
51
51
  * When a session ran, its trace's `redaction.screenshots` is the evidence-of-record and
52
- * wins; this fallback keeps labels honest for frames written before a mid-session failure
53
- * (no trace exists to testify then). Defaults to "raw" — the engine default.
52
+ * wins; this fallback labels the frames written before a mid-session failure
53
+ * (no trace exists to testify then). Defaults to "raw", the engine default.
54
54
  */
55
55
  captureRedaction?: "raw" | "blurred";
56
56
  session?: CuaLoopResult;
57
57
  sessionError?: string;
58
58
  /**
59
- * The route's own credibility read of a goal_satisfied session (#476). The actor's status is
60
- * evidence of what it CLAIMED; whether the harness counts the claim is decided by the route
59
+ * The route's own credibility read of a goal_satisfied session. The actor's status is
60
+ * evidence of what it claimed; whether the harness counts the claim is decided by the route
61
61
  * (zero engagement, a final message that describes a blocker). The review has to say the same
62
62
  * thing the participant's exit code says, or the durable bundle reports a participant reaching the
63
63
  * goal on a run the harness refused to count.
@@ -72,9 +72,9 @@ export declare function buildSingleParticipantBundle(args: {
72
72
  * + digests only, never values or command text), including the subject's state story. */
73
73
  subjectProvenance?: CuaSubjectProvenanceArg;
74
74
  /**
75
- * Entry kind for the non-clone subject.declared event (invariant 5 — declare what the subject
76
- * WAS). "local-app": an already-running LOCAL dev server driven in-process, un-pinnable —
77
- * declared honestly as caller-provisioned/unpinned with no E2B. Absent: a plain app-url entry.
75
+ * Entry kind for the non-clone subject.declared event, which declares what the subject
76
+ * was. "local-app": an already-running local dev server driven in-process, un-pinnable, and
77
+ * declared as caller-provisioned/unpinned with no E2B. Absent: a plain app-url entry.
78
78
  */
79
79
  entryKind?: "local-app";
80
80
  /** The custom E2B desktop template (image) this participant launched on, when configured (provenance). */
@@ -1,4 +1,4 @@
1
- import { participantAssignment } from "../../lab/participant-assignment.js";
1
+ import { participantAssignment } from "../../study/participant-assignment.js";
2
2
  import { redactText } from "../../evidence/redaction.js";
3
3
  import { REVIEW_SCHEMA, bundleArtifacts, bundleHead, } from "../../run/bundle.js";
4
4
  import {} from "../../run/streams.js";
@@ -7,6 +7,7 @@ import { describeSubjectState, participantFeedbackCandidates, phaseEventIdSuffix
7
7
  import { participantStatus as participantStatusFor } from "../../run/judge.js";
8
8
  import { buildRunCostSummary } from "../../run/cost-summary.js";
9
9
  import { participantEvent, participantIds, participantRecord, participantStream, } from "../../run/participant-records.js";
10
+ import { plural } from "../../run/text.js";
10
11
  /** The one participant's record and stream ids: sim-001 and stream-001. */
11
12
  const SINGLE = participantIds(0);
12
13
  /** The participant's runner: a hosted E2B desktop, a local VM desktop, or the in-process route. */
@@ -24,7 +25,7 @@ function browserPlace(args) {
24
25
  return "in a hosted desktop browser";
25
26
  }
26
27
  }
27
- /** Run-level cost ESTIMATE (advisory; omitted when nothing was priced and no sandbox ran). */
28
+ /** Run-level cost estimate (advisory; omitted when nothing was priced and no sandbox ran). */
28
29
  function runCost(args) {
29
30
  return buildRunCostSummary({
30
31
  participants: args.session
@@ -52,15 +53,15 @@ function participantView(args, publicAppUrl) {
52
53
  ? "Live computer-use session is running; stream auth URL is available only through the attached Observer server."
53
54
  : (args.session?.reason ??
54
55
  args.sessionError ??
55
- "Contract bundle only: dry-run produced the evidence shape without launching a desktop or spending provider tokens.");
56
+ "Dry run: the evidence shape was written without launching a desktop or spending provider tokens.");
56
57
  const lastScreenshot = args.screenshots[args.screenshots.length - 1];
57
58
  const desktopGeometry = args.desktopRoute === false
58
59
  ? undefined
59
60
  : (args.desktopGeometry ?? {
60
61
  screen: { requested: { width: args.resolution[0], height: args.resolution[1] } },
61
62
  });
62
- // Honest labels (invariant 6: claims match mechanism): every screenshot label names the
63
- // run's ACTUAL mode. The session trace is the evidence-of-record; the capture policy covers
63
+ // Claims match mechanism: every screenshot label names the
64
+ // run's actual mode. The session trace is the evidence-of-record; the capture policy covers
64
65
  // frames written before a mid-session failure produced a trace.
65
66
  const traceScreenshotMode = args.session?.trace.redaction.screenshots;
66
67
  const screenshotMode = traceScreenshotMode === "raw" || traceScreenshotMode === "blurred"
@@ -80,7 +81,7 @@ function singleSimulation(args, view) {
80
81
  const { publicAppUrl, status, reason } = view;
81
82
  return participantRecord(SINGLE, 1, {
82
83
  personaId: args.persona.id,
83
- scenarioId: `cua-${args.labId}`,
84
+ scenarioId: `cua-${args.studyId}`,
84
85
  status,
85
86
  streamKind: "browser",
86
87
  mode: "browser-sim",
@@ -91,8 +92,8 @@ function singleSimulation(args, view) {
91
92
  : args.inProgress === true
92
93
  ? `Computer-use actor (${args.actorId}) is driving the subject app ${browserPlace(args)}.`
93
94
  : args.sessionError !== undefined
94
- ? `Computer-use lab failed before a terminal session verdict: ${args.sessionError}`
95
- : `Contract participant for the computer-use actor (${args.actorId}) against ${publicAppUrl}.`,
95
+ ? `The computer-use run failed before a terminal session verdict: ${args.sessionError}`
96
+ : `Computer-use actor (${args.actorId}) against ${publicAppUrl}; no session ran.`,
96
97
  startedAt: args.run.createdAt,
97
98
  updatedAt: args.run.createdAt,
98
99
  });
@@ -107,13 +108,13 @@ function singleStream(args, view) {
107
108
  ...(args.surface === undefined ? {} : { surface: args.surface }),
108
109
  ...(args.caseGroup === undefined ? {} : { caseGroup: args.caseGroup }),
109
110
  kind: "browser",
110
- label: `CUA browser — ${args.labId}`,
111
+ label: `${args.participantId ?? "lane-01"} · browser`,
111
112
  status,
112
113
  transport: "snapshot",
113
114
  updatedAt: args.run.createdAt,
114
115
  embed: lastScreenshot
115
- ? { kind: "screenshot", url: lastScreenshot, title: `CUA desktop (${screenshotMode})` }
116
- : { kind: "placeholder", title: "CUA desktop" },
116
+ ? { kind: "screenshot", url: lastScreenshot, title: `Desktop (${screenshotMode})` }
117
+ : { kind: "placeholder", title: "Desktop" },
117
118
  ...(desktopGeometry?.viewport === undefined
118
119
  ? {}
119
120
  : {
@@ -133,7 +134,7 @@ function singleStream(args, view) {
133
134
  ...(args.session ? { actorStatus: args.session.status } : {}),
134
135
  ...(lastScreenshot ? { screenshotUrl: lastScreenshot } : {}),
135
136
  },
136
- // The seam this lab exists to fill: the provider-neutral actor evidence projection.
137
+ // The seam this route exists to fill: the provider-neutral actor evidence projection.
137
138
  ...(args.session ? { actor: args.session.trace } : {}),
138
139
  artifacts: [
139
140
  { label: "run bundle", path: "run.json", kind: "bundle" },
@@ -164,7 +165,7 @@ function singleEvents(args, view) {
164
165
  at: args.run.createdAt,
165
166
  level: "info",
166
167
  type: "cua-lab.run.created",
167
- message: `Created computer-use lab run for ${args.labId} (actor ${args.actorId}).`,
168
+ message: `Created a computer-use run for ${args.studyId} (actor ${args.actorId}).`,
168
169
  },
169
170
  args.subjectProvenance
170
171
  ? participantEvent(SINGLE, {
@@ -172,7 +173,7 @@ function singleEvents(args, view) {
172
173
  at: args.run.createdAt,
173
174
  level: "info",
174
175
  type: "cua-lab.subject.provenance",
175
- // HONEST WORDING: claim "cloned/packed and served" only when it actually happened.
176
+ // Claim "cloned/packed and served" only when it actually happened.
176
177
  message: `${subjectProvenanceMessage(args.subjectProvenance, publicAppUrl, args.dryRun, args.session !== undefined)} (subject env names: ${args.subjectProvenance.envNames.length > 0 ? args.subjectProvenance.envNames.join(", ") : "none"}; values never persisted); state: ${describeSubjectState(args.subjectProvenance.state, args.dryRun)}.`,
177
178
  })
178
179
  : participantEvent(SINGLE, {
@@ -180,13 +181,13 @@ function singleEvents(args, view) {
180
181
  at: args.run.createdAt,
181
182
  level: "info",
182
183
  type: "cua-lab.subject.declared",
183
- // Invariant 5: declare what the subject WAS, including the ABSENCE of a pin. A
184
- // local-app / in-process subject is an already-running LOCAL dev server the caller
185
- // provisioned; it cannot be commit-pinned, so its provenance is honestly UNPINNED and
184
+ // Declare what the subject was, including the absence of a pin. A
185
+ // local-app / in-process subject is an already-running local dev server the caller
186
+ // provisioned; it cannot be commit-pinned, so its provenance is unpinned and
186
187
  // no E2B desktop was created. A plain app-url entry runs inside the desktop sandbox, or,
187
188
  // on the local VM, reaches the host's loopback from the VM's browser.
188
189
  message: args.entryKind === "local-app"
189
- ? `Subject app declared at ${publicAppUrl} (already-running LOCAL dev server driven in-process; NO clone, NO E2B desktop). Provenance: caller-provisioned and UNPINNED — a running dev server cannot be commit-pinned.`
190
+ ? `Subject app declared at ${publicAppUrl}: a running local dev server driven in this process, with no clone and no E2B desktop. Provenance: provided by the caller and unpinned, because a running dev server has no commit to pin.`
190
191
  : runnerSubstrate(args) === "local-desktop"
191
192
  ? `Subject app declared at ${publicAppUrl} (the host's loopback, opened from a browser on a local VM).`
192
193
  : `Subject app declared at ${publicAppUrl} (loopback inside the desktop sandbox).`,
@@ -220,12 +221,12 @@ function singleEvents(args, view) {
220
221
  at: args.run.createdAt,
221
222
  level: "info",
222
223
  type: "cua-lab.contract.ready",
223
- message: "Dry-run contract bundle ready; switch scenario.mode to live for a real desktop session.",
224
+ message: "Dry-run bundle ready; switch scenario.mode to live for a real desktop session.",
224
225
  }),
225
226
  ];
226
227
  const record = (event) => events.push(participantEvent(SINGLE, event));
227
228
  // Persisted phase trail (real boot timing, not just a coarse provenance sentence): one
228
- // RunEvent per COMPLETED phase boundary (started events never persist here; they carry no
229
+ // RunEvent per completed phase boundary (started events never persist here; they carry no
229
230
  // durationMs). ok:false phases warn rather than error, since the failing phase's own thrown
230
231
  // error already becomes the terminal cua-lab.session.error event above.
231
232
  let phaseEventSeq = 3;
@@ -251,17 +252,15 @@ function singleEvents(args, view) {
251
252
  }
252
253
  function singleReview(args, view, stream) {
253
254
  const { reason } = view;
254
- // A funnel with a denominator of one is still the funnel — and its absence stays honest: no
255
+ // A funnel with a denominator of one is still the funnel, and its absence stays recorded: no
255
256
  // declared protocol (or a dry run) means no `tasks` field, never an empty one.
256
257
  const singleRunTasks = args.inProgress !== true && args.session?.trace.taskFunnel !== undefined
257
258
  ? aggregateTaskFunnels([args.session.trace.taskFunnel])
258
259
  : undefined;
259
- // What happened to the participant, as the route judged it — the same rule the fan-out roll-up
260
- // applies (participantStatusForOutcome). Before #476 this read the actor's own status, so a
261
- // run the route refused as "not a credible pass" was written up as verdict pass, 1/1 reached
262
- // the goal, and every projection of the bundle (Observer tally, `runs`, the status index)
263
- // repeated it. Found on a real drawDB run whose participant wrote "Blocked after partial
264
- // completion".
260
+ // What happened to the participant, as the route judged it: the same rule the fan-out roll-up
261
+ // applies (participantStatus in src/run/judge.ts). Reading the actor's own status instead would write up
262
+ // a run the route refused as "not a credible pass" as verdict pass, 1/1 reached the goal, and
263
+ // every projection of the bundle (Observer tally, `runs`, the status index) would repeat it.
265
264
  const participantStatus = args.session === undefined
266
265
  ? undefined
267
266
  : participantStatusFor(args.session.status, args.credibility);
@@ -286,7 +285,7 @@ function singleReview(args, view, stream) {
286
285
  ? []
287
286
  : args.inProgress === true
288
287
  ? ["Live desktop session is still running."]
289
- : ["Live desktop session not yet run (dry-run contract only)."],
288
+ : ["Live desktop session not yet run (dry run only)."],
290
289
  }, [stream]);
291
290
  return review;
292
291
  }
@@ -314,21 +313,21 @@ export function buildSingleParticipantBundle(args) {
314
313
  persona: {
315
314
  id: args.persona.id,
316
315
  name: `Computer-use operator (${args.persona.id})`,
317
- source: `lab:${args.labId}`,
316
+ source: `study:${args.studyId}`,
318
317
  sourceDigest: args.persona.promptDigest,
319
318
  },
320
319
  scenario: {
321
- id: `cua-${args.labId}`,
322
- title: args.labTitle ?? `Computer-use lab: ${args.labId}`,
320
+ id: `cua-${args.studyId}`,
321
+ title: args.studyTitle ?? `Computer-use run: ${args.studyId}`,
323
322
  goal: redactText(args.mission),
324
- source: `lab:${args.labId}`,
323
+ source: `study:${args.studyId}`,
325
324
  sourceDigest: args.persona.promptDigest,
326
325
  },
327
326
  lifecycle: [
328
327
  {
329
328
  at: args.run.createdAt,
330
329
  event: "cua-lab.run.created",
331
- message: `Created computer-use lab run with one participant in a desktop browser (actor ${args.actorId}).`,
330
+ message: `Created a computer-use run with one participant in a desktop browser (actor ${args.actorId}).`,
332
331
  },
333
332
  ],
334
333
  simulations: [simulation],
@@ -337,23 +336,23 @@ export function buildSingleParticipantBundle(args) {
337
336
  redaction: {
338
337
  status: "passed",
339
338
  notes: traceScreenshotMode === "raw"
340
- ? "Typed text recorded as length only and reasoning/messages pass through text redaction. Screenshots are FULL-FIDELITY (raw), retained for local use — NOT redacted for publishing; set policies.redactScreenshots: true to blur a share-as-is bundle."
339
+ ? "Typed text is recorded as its length only, and reasoning and messages pass through text redaction. Screenshots are unblurred and kept for local use; they are not redacted for publishing. Set policies.redactScreenshots: true to blur screenshots in a bundle you plan to share."
341
340
  : traceScreenshotMode === "blurred"
342
341
  ? "Typed text recorded as length only and reasoning/messages pass through text redaction. Screenshots are blurred at capture (policies.redactScreenshots: true) for a share-as-is bundle."
343
342
  : args.screenshots.length > 0
344
- ? `Session ended before a trace was recorded; ${args.screenshots.length} already-written frame(s) follow the capture policy (${screenshotMode}). Typed text is recorded as length only and reasoning/messages pass through text redaction.`
343
+ ? `Session ended before a trace was recorded; ${plural(args.screenshots.length, "already-written frame")} ${args.screenshots.length === 1 ? "follows" : "follow"} the capture policy (${screenshotMode}). Typed text is recorded as length only and reasoning/messages pass through text redaction.`
345
344
  : "No screenshots captured. Typed text is recorded as length only and reasoning/messages pass through text redaction whenever a session runs.",
346
345
  },
347
346
  artifacts: bundleArtifacts(),
348
347
  review,
349
- // What the participant reported, when it reported anything (#392). Dry-run and in-progress
350
- // bundles carry none — there is no participant yet to quote.
348
+ // What the participant reported, when it reported anything. Dry-run and in-progress
349
+ // bundles carry none: there is no participant yet to quote.
351
350
  feedbackCandidates: args.dryRun || args.inProgress === true
352
351
  ? []
353
352
  : participantFeedbackCandidates({
354
353
  runId: args.run.runId,
355
- scenarioId: `cua-${args.labId}`,
356
- adapterId: args.labId,
354
+ scenarioId: `cua-${args.studyId}`,
355
+ adapterId: args.studyId,
357
356
  goal: redactText(args.mission),
358
357
  substrate: runnerSubstrate(args),
359
358
  participants: [
@@ -378,8 +377,8 @@ export function buildSingleParticipantBundle(args) {
378
377
  ...(args.providerResources === undefined || args.providerResources.length === 0
379
378
  ? {}
380
379
  : { providerResources: args.providerResources }),
381
- // Structured subject provenance (invariant 5): code pin + state story. Uniform and
382
- // honest on app-url bundles too — the caller minted the URL, its state is the caller's.
380
+ // Structured subject provenance: code pin + state story. Uniform, and
381
+ // stated on app-url bundles too: the caller minted the URL, its state is the caller's.
383
382
  // CuaSubjectProvenanceArg's two variants (clone, local-tree) are already RunSubjectProvenance-
384
383
  // shaped, so no reconstruction is needed beyond the app-url fallback.
385
384
  subject: args.subjectProvenance ?? { source: "app-url", state: { provenance: "undeclared" } },
@@ -1,5 +1,5 @@
1
- import type { ComputerUsePlan } from "../../lab/plan-types.js";
2
- import type { LabSubjectState } from "../../lab/types.js";
1
+ import type { ComputerUsePlan } from "../../study/plan-types.js";
2
+ import type { StudySubjectState } from "../../study/types.js";
3
3
  import { type RunSubjectProvenance, type RunSubjectStateStepRecord } from "../../run/bundle.js";
4
4
  import { type LocalTreeArchive } from "../../subject/local-tree-archive.js";
5
5
  import { type DesktopParticipantRun, type CuaSubjectProjection, type CuaSubjectProvenanceArg, type ParticipantRunOutcome } from "./types.js";
@@ -18,13 +18,13 @@ export declare function projectParticipantSubjects(args: {
18
18
  }): CuaSubjectProjection[];
19
19
  /**
20
20
  * Resolve the bundle's state marker from the declaration and what actually ran.
21
- * Precedence: external declared → "unpinned" (seed records, if any, stay attached — a
21
+ * Precedence: external declared → "unpinned" (seed records, if any, stay attached; a
22
22
  * migrated external DB is still unpinned overall); else seed declared → "seeded" only when
23
23
  * every declared step executed ok on a live run, otherwise "declared-not-run" (dry-run
24
24
  * contract bundles and failed live provisioning); no declaration → "undeclared".
25
25
  */
26
26
  export declare function resolveSubjectState(args: {
27
- declared: LabSubjectState | undefined;
27
+ declared: StudySubjectState | undefined;
28
28
  dryRun: boolean;
29
29
  executed: RunSubjectStateStepRecord[];
30
30
  }): RunSubjectProvenance["state"];
@@ -36,7 +36,7 @@ export function projectParticipantSubjects(args) {
36
36
  }
37
37
  /**
38
38
  * Resolve the bundle's state marker from the declaration and what actually ran.
39
- * Precedence: external declared → "unpinned" (seed records, if any, stay attached — a
39
+ * Precedence: external declared → "unpinned" (seed records, if any, stay attached; a
40
40
  * migrated external DB is still unpinned overall); else seed declared → "seeded" only when
41
41
  * every declared step executed ok on a live run, otherwise "declared-not-run" (dry-run
42
42
  * contract bundles and failed live provisioning); no declaration → "undeclared".
@@ -48,8 +48,8 @@ export function resolveSubjectState(args) {
48
48
  }
49
49
  const declaredSeed = declared.seed ?? [];
50
50
  const external = declared.external ?? [];
51
- // Dry-run: nothing executes (no sandbox) — record the DECLARED recipe: name, phase, and
52
- // command digest only, with NO execution fields.
51
+ // Dry-run: nothing executes (no sandbox), so record the declared recipe: name, phase, and
52
+ // command digest only, with no execution fields.
53
53
  const seed = args.dryRun
54
54
  ? declaredSeed.map((step) => ({
55
55
  name: step.name,
@@ -74,8 +74,8 @@ export function resolveSubjectState(args) {
74
74
  ...(external.length > 0 ? { externalEnvNames: external } : {}),
75
75
  };
76
76
  }
77
- /** Build the per-participant subject projection (invariant 5). Local-tree participants all share
78
- * ONE host-packed archive, so every participant's projection carries the identical archiveSha256/
77
+ /** Build the per-participant subject projection. Local-tree participants all share
78
+ * one host-packed archive, so every participant's projection carries the identical archiveSha256/
79
79
  * commit/dirty (no divergence is possible, unlike the clone route's per-participant
80
80
  * in-sandbox commit). */
81
81
  function participantSubjectProjection(args) {
@@ -144,7 +144,7 @@ export function aggregateCuaSubject(args) {
144
144
  const unanimous = !dryRun && commits.length === participantCount && new Set(commits).size === 1;
145
145
  const warnings = !dryRun && participantCount > 1 && new Set(commits).size > 1
146
146
  ? [
147
- "Fan-out participants resolved DIVERGENT subject commits, so the top-level subject.commit is omitted; see each participant's provenance in result.lanes for its pinned commit.",
147
+ "Participants resolved different subject commits, so the top-level subject.commit is omitted; each participant's provenance in result.lanes has its pinned commit.",
148
148
  ]
149
149
  : [];
150
150
  return {