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
@@ -10,23 +10,23 @@ import type { AutomaticAnalysisRefusal } from "../../analysis/job.js";
10
10
  import { type CuaDiagnostics } from "./diagnostics.js";
11
11
  import type { ActorCompletionReason, ActorStatus, ActorStopCause, ActorTokenUsage, ActorTraceItem } from "../../actors/contract.js";
12
12
  import { type CuaActorDescriptor } from "../../actors/registry.js";
13
- import type { LabDeps, PhaseParticipant } from "../../lab/lab-deps.js";
14
- import type { LabEvent, ParticipantRef } from "../../lab/run-lab-events.js";
15
- import type { InProcessDriver, ProviderFactory, RunLabHomes } from "../../lab/run-lab-homes.js";
16
- import { type BrowserScorer } from "../../lab/adapter-extension.js";
13
+ import type { StudyDeps } from "../../study/study-deps.js";
14
+ import type { StudyEvent, ParticipantRef } from "../../study/run-study-events.js";
15
+ import type { InProcessDriver, ProviderFactory, RunStudyHomes } from "../../study/run-study-homes.js";
16
+ import { type BrowserScorer } from "../../study/adapter-extension.js";
17
17
  import type { CuaActorSessionOptions } from "../../actors/computer-use/actor.js";
18
18
  import { type E2BDesktopModule } from "../../substrates/e2b/sdk.js";
19
19
  import { type DesktopResourceObservation } from "../../substrates/e2b/desktop-resources.js";
20
20
  import { type DetachedTimers } from "../../substrates/detached.js";
21
- import type { Brain, ComputerUsePlan, ComputerUseRunner, ResidualConfig } from "../../lab/plan-types.js";
22
- import { type LabCommsEmail, type LabConfig } from "../../lab/types.js";
21
+ import type { Brain, ComputerUsePlan, ComputerUseRunner, ResidualConfig } from "../../study/plan-types.js";
22
+ import { type StudyCommsEmail, type StudyConfig } from "../../study/types.js";
23
23
  import { type ObserverResult } from "../../observer/render.js";
24
24
  import { type BundleRun, type RunBundle, type RunRerunLineage, type RunScorerProvenance, type RunSubjectProvenance, type RunSubjectStateStepRecord } from "../../run/bundle.js";
25
25
  import { type RunDesktopGeometry } from "../../run/streams.js";
26
26
  import { type PreparedOutputRoot } from "../../run/contained-output.js";
27
- import type { ComputerUseParticipant, SharedWorldParticipant } from "../../lab/plan-participants.js";
27
+ import type { ComputerUseParticipant, SharedWorldParticipant } from "../../study/plan-participants.js";
28
28
  import type { ResolvedParticipant } from "../../run/participant.js";
29
- export declare const CUA_ACTOR_LAB_SCHEMA = "humanish.cua-lab-result.v2";
29
+ import { type StudyResultIdentity } from "../../run/study-result.js";
30
30
  export declare const CUA_FANOUT_STRATEGY: "per-lane-worlds";
31
31
  export declare const CUA_MAX_CONCURRENCY_ENV = "HUMANISH_CUA_MAX_CONCURRENCY";
32
32
  export declare const DEFAULT_APP_URL_SESSION_TIMEOUT_MS: number;
@@ -35,9 +35,9 @@ export declare const MIN_DERIVED_SESSION_TIMEOUT_MS: number;
35
35
  * What a computer-use run takes besides its plan and config. The count override and rerun go to
36
36
  * participant building with the config.
37
37
  */
38
- export type ComputerUseRunInput = Omit<RunCuaActorLabOptions, "config" | "dryRun" | "lab">;
38
+ export type ComputerUseRunInput = Omit<RunCuaActorStudyOptions, "config" | "dryRun">;
39
39
  /**
40
- * What runLab's local VM study gives a computer-use run: the desktop each participant runs on, the
40
+ * What runStudyWith's local VM study gives a computer-use run: the desktop each participant runs on, the
41
41
  * reason automatic analysis must not run (the study's cleanup is unconfirmed), and the signal its
42
42
  * sessions abort on.
43
43
  */
@@ -47,17 +47,17 @@ export interface LocalVmInput {
47
47
  readonly analysisRefusal: () => AutomaticAnalysisRefusal | undefined;
48
48
  readonly signal?: AbortSignal;
49
49
  }
50
- export interface RunCuaActorLabOptions {
50
+ export interface RunCuaActorStudyOptions {
51
51
  /** Cancels post-run analysis only. */
52
52
  analysisSignal?: AbortSignal;
53
53
  cwd: string;
54
- config: LabConfig;
54
+ config: StudyConfig;
55
55
  /** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
56
56
  dryRun: boolean;
57
57
  open?: boolean;
58
58
  runId?: string;
59
59
  /** CLI `--count` override for the homogeneous fan-out participant count (ignored when a `lanes`
60
- * roster is declared — a roster's length is authoritative). */
60
+ * roster is declared; a roster's length is authoritative). */
61
61
  countOverride?: number;
62
62
  /** Explicitly create a new run containing failed or selected participants from a prior fan-out run. */
63
63
  rerun?: {
@@ -67,30 +67,30 @@ export interface RunCuaActorLabOptions {
67
67
  /** Keys and subject env for the run. Defaults to process.env. */
68
68
  env?: Readonly<Record<string, string | undefined>>;
69
69
  /** E2B only. Runs on each participant's desktop after it exists and before provisioning. */
70
- prepareDesktop?: NonNullable<RunLabHomes["prepareDesktop"]>;
71
- /** runLab's local VM study, for an app-url lab on the local target. */
70
+ prepareDesktop?: NonNullable<RunStudyHomes["prepareDesktop"]>;
71
+ /** runStudyWith's local VM study, for an app-url study on the local target. */
72
72
  localVm?: LocalVmInput;
73
73
  onObserverReady?: (observer: ObserverResult & {
74
74
  ok: true;
75
75
  }) => Promise<void> | void;
76
76
  /** Awaited after a participant's live stream starts, and again after its sandbox is gone. */
77
- onStream?: NonNullable<RunLabHomes["onStream"]>;
78
- /** The caller's brain for each participant, in place of the lab's own. */
77
+ onStream?: NonNullable<RunStudyHomes["onStream"]>;
78
+ /** The caller's brain for each participant, in place of the study's own. */
79
79
  createProvider?: ProviderFactory;
80
80
  /** Drives an app-url or local-app subject in this process, with no desktop. Needs createProvider. */
81
81
  inProcess?: InProcessDriver;
82
- /** Reports the plan and subject phases to onEvent; built by normalizeRunLabOptions. */
83
- emit?: (event: LabEvent) => void;
82
+ /** Reports the plan and subject phases to onEvent; built by normalizeRunStudyOptions. */
83
+ emit?: (event: StudyEvent) => void;
84
84
  /** Test seams. */
85
- deps?: LabDeps;
86
- /** Scores the assembled evidence: `RunLabOptions.scorer`, or the scorer the CLI loads. */
85
+ deps?: StudyDeps;
86
+ /** Scores the assembled evidence: `RunStudyOptions.scorer`, or the scorer the CLI loads. */
87
87
  scorer?: BrowserScorer;
88
- /** Present only when the scorer was CONFIG-DECLARED and loaded by the CLI (#316);
88
+ /** Present only when the scorer was config-declared and loaded by the CLI;
89
89
  * core-stamped onto the bundle as evidence. Absent for library callers. */
90
90
  scorerProvenance?: RunScorerProvenance;
91
91
  }
92
92
  /** A participant's row in the pre-flight plan: identity + the device/persona it will drive. The prompt
93
- * text never leaks — only a sha256-16 digest of the composed instructions. */
93
+ * text never leaks: only a sha256-16 digest of the composed instructions. */
94
94
  export interface CuaParticipantPlanEntry {
95
95
  id: string;
96
96
  actorType?: string;
@@ -103,8 +103,8 @@ export interface CuaParticipantPlanEntry {
103
103
  /** Requested E2B/X screen resolution. This is not the measured browser CSS viewport. */
104
104
  resolution: [number, number];
105
105
  instructionDigest: string;
106
- /** The declared reasoning effort for this participant, when the lab declared one. The plan line is what
107
- * you read BEFORE spending money, so a declared per-participant difference has to be visible there. */
106
+ /** The declared reasoning effort for this participant, when the study declared one. The plan line is what
107
+ * you read before spending money, so a declared per-participant difference has to be visible there. */
108
108
  reasoningEffort?: string;
109
109
  maxOutputTokens?: number;
110
110
  /** Present only when a participant overrides subject.appUrl; digest avoids leaking preview hosts in plan logs. */
@@ -115,23 +115,23 @@ export interface CuaParticipantPlanEntry {
115
115
  export interface CuaParticipantPlan {
116
116
  strategy: typeof CUA_FANOUT_STRATEGY;
117
117
  laneCount: number;
118
- /** Effective in-flight bound (defaults to laneCount — all seats live; a declared
119
- * execution.concurrency is a cap; the env override may only LOWER it). */
118
+ /** Effective in-flight bound (defaults to laneCount, all participants live; a declared
119
+ * execution.concurrency is a cap; the env override may only lower it). */
120
120
  concurrency: number;
121
- /** Present when the env override lowered the bound below the config's value — recorded so the
121
+ /** Present when the env override lowered the bound below the config's value, recorded so the
122
122
  * plan never silently disagrees with the manifest. */
123
123
  envLoweredConcurrencyFrom?: number;
124
124
  /** ceil(laneCount / concurrency). */
125
125
  waves: number;
126
126
  /** Per-participant session wall-clock budget (execution.timeoutMs); there is no run-level wall clock. */
127
127
  perLaneSessionBudgetMs: number;
128
- /** Worst-case TOTAL sandbox-minutes across all participants (each one's full sandbox deadline). */
128
+ /** Worst-case total sandbox-minutes across all participants (each one's full sandbox deadline). */
129
129
  worstCaseSandboxMinutes: number;
130
130
  /** True for a dry-run plan (no spend); the same table appears live. */
131
131
  dryRun: boolean;
132
132
  lanes: CuaParticipantPlanEntry[];
133
133
  }
134
- /** One participant's outcome in the result projection. ALWAYS present in `result.lanes` (length
134
+ /** One participant's outcome in the result projection. Always present in `result.lanes` (length
135
135
  * 1 at N=1). A `blocked` participant is one the pipeline-gate / fail-fast skipped before it ran. */
136
136
  export interface CuaParticipantResult {
137
137
  id: string;
@@ -164,7 +164,7 @@ export interface CuaParticipantResult {
164
164
  /** Set when the participant was skipped (pinned reason string). */
165
165
  skippedReason?: string;
166
166
  error?: {
167
- code: CuaActorLabErrorCode;
167
+ code: CuaActorStudyErrorCode;
168
168
  message: string;
169
169
  };
170
170
  }
@@ -183,8 +183,8 @@ export interface CuaParticipantSummary {
183
183
  concurrency: number;
184
184
  waves: number;
185
185
  }
186
- export type CuaActorLabErrorCode = "HUMANISH_LAB_ANALYSIS_INVALID" | "HUMANISH_LAB_TASKS_UNSUPPORTED" | "HUMANISH_LAB_OPTION_UNSUPPORTED" | "HUMANISH_CUA_LAB_FAILED" | "HUMANISH_CUA_LAB_KEYS_MISSING" | "HUMANISH_CUA_LAB_AGENT_MISSING" | "HUMANISH_CUA_LAB_AGENT_SIGNIN_REQUIRED" | "HUMANISH_CUA_LAB_SUBJECT_ENV_MISSING" | "HUMANISH_CUA_LAB_ACTOR_UNSUPPORTED" | "HUMANISH_CUA_LAB_SUBJECT_INVALID" | "HUMANISH_CUA_LAB_SUBJECT_UNSAFE" | "HUMANISH_CUA_LAB_EXECUTOR_NO_PROVIDER" | "HUMANISH_CUA_LAB_LOCAL_APP_NO_EXECUTOR" | "HUMANISH_CUA_LAB_LOCAL_DESKTOP_MISSING" | "HUMANISH_CUA_LAB_FANOUT_INVALID" | "HUMANISH_CUA_LAB_RERUN_INVALID" | "HUMANISH_CUA_LAB_DEVICE_GEOMETRY" | "HUMANISH_RUN_ID_IN_USE" | "HUMANISH_CUA_LAB_UNPRICED_CAP" | "HUMANISH_CUA_LAB_COMMS_CATCH_UNREACHABLE" | "HUMANISH_CUA_LAB_COMMS_TOKEN_INVALID" | "HUMANISH_WATCH_ALLOW_REQUIRES_OAUTH" | "HUMANISH_WATCH_OAUTH_REQUIRES_TUNNEL" | "HUMANISH_WATCH_OPTION_CONFLICT" | "HUMANISH_WATCH_TUNNEL_REQUIRES_EXPOSE" | "HUMANISH_WATCH_EXPOSE_REQUIRES_EDGE_AUTH" | "HUMANISH_WATCH_EXPOSE_REQUIRES_LIVE_FOLLOW" | "HUMANISH_WATCH_SAFE_NOT_APPLICABLE" | "HUMANISH_SERVE_TUNNEL_NOT_FOUND" | "HUMANISH_SERVE_TUNNEL_START_FAILED";
187
- /** Subject provenance projection (invariant 5): what the actor actually drove. */
186
+ export type CuaActorStudyErrorCode = "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_STUDY_V2_UNSUPPORTED" | "HUMANISH_COMPUTER_USE_FAILED" | "HUMANISH_COMPUTER_USE_KEYS_MISSING" | "HUMANISH_COMPUTER_USE_AGENT_MISSING" | "HUMANISH_COMPUTER_USE_AGENT_SIGNIN_REQUIRED" | "HUMANISH_COMPUTER_USE_SUBJECT_ENV_MISSING" | "HUMANISH_COMPUTER_USE_ACTOR_UNSUPPORTED" | "HUMANISH_COMPUTER_USE_SUBJECT_INVALID" | "HUMANISH_COMPUTER_USE_SUBJECT_UNSAFE" | "HUMANISH_COMPUTER_USE_EXECUTOR_NO_PROVIDER" | "HUMANISH_COMPUTER_USE_LOCAL_APP_NO_EXECUTOR" | "HUMANISH_COMPUTER_USE_LOCAL_DESKTOP_MISSING" | "HUMANISH_COMPUTER_USE_FANOUT_INVALID" | "HUMANISH_COMPUTER_USE_RERUN_INVALID" | "HUMANISH_COMPUTER_USE_DEVICE_GEOMETRY" | "HUMANISH_RUN_ID_IN_USE" | "HUMANISH_COMPUTER_USE_UNPRICED_CAP" | "HUMANISH_COMPUTER_USE_COMMS_CATCH_UNREACHABLE" | "HUMANISH_COMPUTER_USE_COMMS_TOKEN_INVALID" | "HUMANISH_WATCH_ALLOW_REQUIRES_OAUTH" | "HUMANISH_WATCH_OAUTH_REQUIRES_TUNNEL" | "HUMANISH_WATCH_OPTION_CONFLICT" | "HUMANISH_WATCH_TUNNEL_REQUIRES_EXPOSE" | "HUMANISH_WATCH_EXPOSE_REQUIRES_EDGE_AUTH" | "HUMANISH_WATCH_EXPOSE_REQUIRES_LIVE_FOLLOW" | "HUMANISH_WATCH_SAFE_NOT_APPLICABLE" | "HUMANISH_SERVE_TUNNEL_NOT_FOUND" | "HUMANISH_SERVE_TUNNEL_START_FAILED";
187
+ /** Subject provenance projection: what the actor actually drove. */
188
188
  export interface CuaSubjectProjection {
189
189
  source: "app-url" | "clone" | "local-tree";
190
190
  /** Clone-route only: the (possibly redacted) owner/repo slug. */
@@ -198,9 +198,9 @@ export interface CuaSubjectProjection {
198
198
  /** Local-tree-route only: host-side porcelain status at pack time (true when the working
199
199
  * tree had uncommitted changes). Absent when the packed root was not a git work tree. */
200
200
  dirty?: boolean;
201
- /** Declared env NAMES provisioned for the subject (values never surface anywhere). */
201
+ /** Declared env names provisioned for the subject (values never surface anywhere). */
202
202
  envNames?: string[];
203
- /** The subject's state story (seeded digests / UNPINNED external / declared-not-run /
203
+ /** The subject's state story (seeded digests / unpinned external / declared-not-run /
204
204
  * undeclared): the same block the run bundle records. */
205
205
  state: RunSubjectProvenance["state"];
206
206
  }
@@ -221,13 +221,11 @@ export type CuaSubjectProvenanceArg = {
221
221
  envNames: string[];
222
222
  state: RunSubjectProvenance["state"];
223
223
  };
224
- export interface CuaActorLabResult extends AutomaticAnalysisResult {
225
- schema: typeof CUA_ACTOR_LAB_SCHEMA;
224
+ export interface CuaActorStudyResult extends AutomaticAnalysisResult, StudyResultIdentity<"computer-use"> {
226
225
  /** True when the Observer verified the bundle, all live participants passed credibility checks
227
226
  * (or this is a dry-run), and no declared adapter/scorer verdict failed. */
228
227
  ok: boolean;
229
228
  cwd: string;
230
- labId: string;
231
229
  /** The registry-resolved actor id that ran (or would run) the session. */
232
230
  actor: string;
233
231
  appUrl: string;
@@ -244,16 +242,16 @@ export interface CuaActorLabResult extends AutomaticAnalysisResult {
244
242
  sandbox?: {
245
243
  sandboxId: string;
246
244
  killed: boolean;
247
- /** The stream URL itself (carries an auth key) is runtime-only and is deliberately NOT
248
- * surfaced on the result — the sandbox is already dead by the time the result exists. */
245
+ /** The stream URL itself (carries an auth key) is runtime-only and is deliberately not
246
+ * surfaced on the result; the sandbox is already dead by the time the result exists. */
249
247
  streamUrlPresent: boolean;
250
248
  };
251
- /** Subject provenance (invariant 5): what the actor actually drove. At N>1 this is the
249
+ /** Subject provenance: what the actor actually drove. At N>1 this is the
252
250
  * unanimity-gated aggregate (top-level `commit` only when every participant resolved the same one). */
253
251
  subject?: CuaSubjectProjection;
254
252
  /** The pre-flight participant plan (present once participants resolve; absent on early validation errors). */
255
253
  plan?: CuaParticipantPlan;
256
- /** Per-participant results — ALWAYS present once participants resolve (length 1 at N=1). */
254
+ /** Per-participant results, always present once participants resolve (length 1 at N=1). */
257
255
  lanes?: CuaParticipantResult[];
258
256
  /** Aggregate participant counts. */
259
257
  laneSummary?: CuaParticipantSummary;
@@ -263,7 +261,7 @@ export interface CuaActorLabResult extends AutomaticAnalysisResult {
263
261
  diagnostics?: CuaDiagnostics;
264
262
  warnings: string[];
265
263
  error?: {
266
- code: CuaActorLabErrorCode;
264
+ code: CuaActorStudyErrorCode;
267
265
  message: string;
268
266
  };
269
267
  }
@@ -293,8 +291,8 @@ export interface ParticipantRunsAndPlan {
293
291
  participantPlan: CuaParticipantPlan;
294
292
  }
295
293
  /**
296
- * The STUDY's shared spend ledger (#299): one counter across every participant. Each one notes its
297
- * own latest running MODEL-spend estimate (monotone per participant — an estimate can only grow)
294
+ * The study's shared spend ledger: one counter across every participant. Each one notes its
295
+ * own latest running model-spend estimate (monotone per participant: an estimate can only grow)
298
296
  * and reads back the run total; the loop stops the participant the moment the total crosses the study budget.
299
297
  * Estimated model spend only: desktop-minutes ride the cost summary, not this ledger.
300
298
  */
@@ -308,8 +306,8 @@ export interface CuaRunBudget {
308
306
  * The subject as a participant's desktop meets it. A computer-use participant gets the plan's
309
307
  * subject: a clone or local tree is provisioned in its own sandbox with the declared env, a
310
308
  * desktop-cli product is set up there, and an app-url or local-app subject is only opened. A
311
- * shared-world seat gets `shared-app`: it opens the one app the plane serves, with no subject env
312
- * names forwarded, no GitHub token and no provisioning in its sandbox.
309
+ * shared-world participant gets `shared-app`: it opens the one app the plane serves, with no
310
+ * subject env names forwarded, no GitHub token and no provisioning in its sandbox.
313
311
  */
314
312
  export type ParticipantSubject = ComputerUseRunner["subject"] | {
315
313
  readonly kind: "shared-app";
@@ -324,7 +322,7 @@ export declare function participantServeUrl(subject: ParticipantSubject): string
324
322
  export interface E2BDesktopDeps {
325
323
  /** The plan's residual config: comms, policies, the desktop and target, and subject leftovers. */
326
324
  residual: Readonly<ResidualConfig>;
327
- labId: string;
325
+ studyId: string;
328
326
  appUrl: string;
329
327
  /** What the participant's desktop does with the subject before the participant starts. */
330
328
  subject: ParticipantSubject;
@@ -337,32 +335,32 @@ export interface E2BDesktopDeps {
337
335
  sandboxMs: number;
338
336
  participantCount: number;
339
337
  artifactRoot: PreparedOutputRoot;
340
- /** The lab's resolution directory: relative paths in the config (a camera .y4m) resolve here. */
341
- labCwd: string;
338
+ /** The study's resolution directory: relative paths in the config (a camera .y4m) resolve here. */
339
+ studyCwd: string;
342
340
  scrubKnownValues: (text: string) => string;
343
341
  receiving?: CommsReceivingRun;
344
- /** Adopter-hosted comms plane (#380): present on the app-url route when comms.email.external is
342
+ /** Adopter-hosted comms plane: present on the app-url route when comms.email.external is
345
343
  * declared. Carries the parsed comms block (recipients drive the per-participant inbox instruction)
346
344
  * and the inbox URL the persona opens. The drain runs once at run level, not per participant. */
347
345
  externalComms?: {
348
- email: LabCommsEmail;
346
+ email: StudyCommsEmail;
349
347
  inboxUrl: string;
350
348
  };
351
- /** Injected clock (ms). Used to measure the host-side E2B desktop create->teardown span so the
349
+ /** Injected clock (ms). It measures the host-side E2B desktop create->teardown span so the
352
350
  * desktop-minute cost estimate is deterministic in tests. Defaults to Date.now. */
353
351
  now: () => number;
354
352
  /** Loads the E2B SDK for the participant's desktop. Defaults to loadE2BDesktopModule. */
355
353
  desktopModule?: () => Promise<E2BDesktopModule>;
356
354
  /** The caller's prepareDesktop, called with the participant as its target. */
357
- prepareDesktop?: NonNullable<RunLabHomes["prepareDesktop"]>;
355
+ prepareDesktop?: NonNullable<RunStudyHomes["prepareDesktop"]>;
358
356
  /** Clock and sleep for detached provisioning steps. */
359
357
  detachedTimers?: DetachedTimers;
360
358
  /** Receives each live stream's ready and ended: the Observer's tracker, then the caller's onStream. */
361
- onStream: NonNullable<RunLabHomes["onStream"]>;
359
+ onStream: NonNullable<RunStudyHomes["onStream"]>;
362
360
  /** Reports a subject phase to the phase sink (stderr by default) and to onEvent. */
363
- reportSubjectPhase: (event: SubjectPhaseEvent, participant: PhaseParticipant) => void;
361
+ reportSubjectPhase: (event: SubjectPhaseEvent, participant: ParticipantRef) => void;
364
362
  /**
365
- * How a PARSEABLE requested-vs-verified screen mismatch is treated. Default ("fail-closed"):
363
+ * How a parseable requested-vs-verified screen mismatch is treated. Default ("fail-closed"):
366
364
  * the participant's device claim is falsified, so it fails with DEVICE_GEOMETRY (the
367
365
  * single-participant/fan-out contract). "record-evidence" (the concurrent shared-world route):
368
366
  * requested and verified stay recorded as separate facts plus an explicit warning, and the
@@ -386,22 +384,22 @@ export interface ParticipantModelDeps {
386
384
  redactScreenshots: boolean;
387
385
  scrubKnownValues: (text: string) => string;
388
386
  /** The study's shared spend ledger, present exactly when execution.caps.maxTotalUsd is set on a
389
- * live run (#299). Preflight already refused the cap on an unpriced model. */
387
+ * live run. Preflight already refused the cap on an unpriced model. */
390
388
  runBudget?: CuaRunBudget;
391
389
  /**
392
- * RUNTIME-ONLY observed-URL callback (#164 handoff crux): threaded into the participant's session so the
393
- * orchestrator watches this seat's live location.href mid-run. Never persisted (see
394
- * CuaLoopOptions.onObservedUrl). The concurrent shared-world barrier passes a host-seat latch here
390
+ * runtime-only observed-URL callback (the shared-world handoff): threaded into the participant's session so the
391
+ * orchestrator watches this participant's live location.href mid-run. Never persisted (see
392
+ * CuaLoopOptions.onObservedUrl). The concurrent shared-world barrier passes a host latch here
395
393
  * to extract a /lobby/CODE; on ordinary routes it is undefined (no-op).
396
394
  */
397
395
  onObservedUrl?: (url: string | undefined) => void;
398
- /** RUNTIME-ONLY per-turn narration callback; see CuaLoopOptions.onMessage. The concurrent
399
- * shared-world barrier passes a host-seat message scanner here to latch the lobby code. */
396
+ /** runtime-only per-turn narration callback; see CuaLoopOptions.onMessage. The concurrent
397
+ * shared-world barrier passes a host message scanner here to latch the lobby code. */
400
398
  onMessage?: (text: string) => void;
401
- /** RUNTIME-ONLY per-turn raw-frame callback; see CuaLoopOptions.onScreenshot. The concurrent
402
- * shared-world barrier passes a host-seat vision reader here to latch the lobby code off-screen. */
399
+ /** runtime-only per-turn raw-frame callback; see CuaLoopOptions.onScreenshot. The concurrent
400
+ * shared-world barrier passes a host vision reader here to latch the lobby code off-screen. */
403
401
  onScreenshot?: (frame: Buffer) => void;
404
- /** Per-turn trace snapshot from a participant's loop (#441), keyed by participant. The live path
402
+ /** Per-turn trace snapshot from a participant's loop, keyed by participant. The live path
405
403
  * wires the incremental in-progress flush here so the attached Observer's timeline grows mid-run. */
406
404
  onTrace?: (participantId: string, items: readonly ActorTraceItem[], usage?: ActorTokenUsage, metadata?: CuaLiveMetadata) => void;
407
405
  }
@@ -438,8 +436,8 @@ export interface ParticipantRunOutcome {
438
436
  * the session's evidence does not show. An execution failure, scrubbed, like the cleanup one. */
439
437
  providerPolicyError?: string;
440
438
  sandboxId?: string;
441
- /** Host-side E2B desktop create->teardown span (ms). An APPROXIMATION of E2B's server-side
442
- * billed lifetime (server-side kill-on-timeout can extend it) — so the derived dollar figure is
439
+ /** Host-side E2B desktop create->teardown span (ms). An approximation of E2B's server-side
440
+ * billed lifetime (server-side kill-on-timeout can extend it), so the derived dollar figure is
443
441
  * doubly an estimate. Absent on the in-process route (no sandbox) and on dry-run. */
444
442
  desktopDurationMs?: number;
445
443
  desktopResources?: DesktopResourceObservation;
@@ -463,22 +461,22 @@ export interface ParticipantRunOutcome {
463
461
  skippedReason?: string;
464
462
  noEngagement: boolean;
465
463
  selfReportedBlocker: boolean;
466
- /** The inclusive friction read (#453): blocker-shaped narration incl. self-resolved arcs.
464
+ /** The inclusive friction read: blocker-shaped narration incl. self-resolved arcs.
467
465
  * Feeds the participants tally and feedback candidates; never the participant verdict. Optional so
468
466
  * external outcome constructors (shared-world, test fakes) stay valid; absent counts as false. */
469
467
  reportedFriction?: boolean;
470
468
  harnessError: boolean;
471
- failureCode?: CuaActorLabErrorCode;
469
+ failureCode?: CuaActorStudyErrorCode;
472
470
  /** Relative run-dir path of the digest-only comms-thread evidence artifact this participant wrote
473
- * (humanish.comms-thread.v1), when a comms lab captured mail into its in-sandbox catch. Registered
474
- * in the participant's stream artifacts. Absent when no comms lab ran or nothing was captured. */
471
+ * (humanish.comms-thread.v1), when a comms study captured mail into its in-sandbox catch. Registered
472
+ * in the participant's stream artifacts. Absent when no comms study ran or nothing was captured. */
475
473
  commsArtifactPath?: string;
476
474
  }
477
475
  /** What buildCuaFanoutBundle projects into a fan-out run bundle. */
478
476
  export interface CuaFanoutBundleArgs {
479
477
  /** The run's verdict, from the judge. */
480
478
  verdict: Verdict;
481
- /** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
479
+ /** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
482
480
  run: BundleRun;
483
481
  specs: DesktopParticipantRun[];
484
482
  outcomes?: ParticipantRunOutcome[];
@@ -2,33 +2,33 @@ import {} from "./participant-desktop.js";
2
2
  import {} from "../../analysis/automatic-completion.js";
3
3
  import {} from "./diagnostics.js";
4
4
  import {} from "../../actors/registry.js";
5
- import {} from "../../lab/adapter-extension.js";
5
+ import {} from "../../study/adapter-extension.js";
6
6
  import {} from "../../substrates/e2b/sdk.js";
7
7
  import {} from "../../substrates/e2b/desktop-resources.js";
8
8
  import {} from "../../substrates/detached.js";
9
- import {} from "../../lab/types.js";
9
+ import {} from "../../study/types.js";
10
10
  import {} from "../../observer/render.js";
11
11
  import {} from "../../run/bundle.js";
12
12
  import {} from "../../run/streams.js";
13
13
  import {} from "../../run/contained-output.js";
14
- export const CUA_ACTOR_LAB_SCHEMA = "humanish.cua-lab-result.v2";
15
- // The only fan-out topology this slice ships: N participants = N independent E2B desktop
16
- // sandboxes, each its own world (clone/serve + subject.state per participant). Shared-world is layer 7 (#164).
14
+ import {} from "../../run/study-result.js";
15
+ // The fan-out topology of this route: N participants = N independent E2B desktop sandboxes,
16
+ // each its own world (clone/serve + subject.state per participant). Shared-world has its own route.
17
17
  export const CUA_FANOUT_STRATEGY = "per-lane-worlds";
18
- // Env override that may only LOWER the effective concurrency (never raise concurrent paid
19
- // desktops — invariant 3). Read names-only into a local; the value never persists.
18
+ // Env override that may only lower the effective concurrency (never raise concurrent paid
19
+ // desktops). Read names-only into a local; the value never persists.
20
20
  export const CUA_MAX_CONCURRENCY_ENV = "HUMANISH_CUA_MAX_CONCURRENCY";
21
- // The DEFAULT session budget, sized so a study can FINISH (docs/principles/three-roles.md: a
22
- // session ends because the participant is done, not because a timer fired — the time-box is a
21
+ // The default session budget, sized so a study can finish (docs/principles/three-roles.md: a
22
+ // session ends because the participant is done, not because a timer fired; the time-box is a
23
23
  // session-level cap a researcher sets generously; spend protection is the dollar caps' job).
24
24
  // The old 300s default ended real signup studies mid-flow: observed studies run 16-40 turns at
25
- // ~5-6s per turn BEFORE any email wait, so five minutes was the biggest single source of
25
+ // ~5-6s per turn before any email wait, so five minutes was the biggest single source of
26
26
  // budget_reached endings that read as participant failures.
27
27
  //
28
28
  // App-url and in-process routes default to 30 minutes. Provisioned routes (clone/local-tree)
29
29
  // default to whatever the 1-hour sandbox cap leaves after provisioning, declared state seeding,
30
- // and the teardown buffer — 20 minutes on a stateless clone — floored at the old five minutes so
31
- // a state-heavy lab still gets a session at all. An EXPLICIT execution.timeoutMs is never
30
+ // and the teardown buffer (20 minutes on a stateless clone), floored at the old five minutes so
31
+ // a state-heavy study still gets a session at all. An explicit execution.timeoutMs is never
32
32
  // adjusted: when it cannot be provisioned, the plan-time cap refusal shows the arithmetic.
33
33
  export const DEFAULT_APP_URL_SESSION_TIMEOUT_MS = 30 * 60_000;
34
34
  export const MIN_DERIVED_SESSION_TIMEOUT_MS = 5 * 60_000;
@@ -1,13 +1,19 @@
1
- import type { AdmittedPlan, RunLabOptions } from "../run-lab.js";
2
- import type { LabPlan, PlanRefusal } from "../lab/plan-types.js";
1
+ import type { AdmittedPlan, RunStudyOptions } from "../run-study.js";
2
+ import type { StudyPlan, PlanRefusal } from "../study/plan-types.js";
3
3
  import type { RunResult } from "../run/results.js";
4
- type PreviewPlan = Extract<LabPlan, {
4
+ import { type StudyResultIdentity } from "../run/study-result.js";
5
+ type PreviewPlan = Extract<StudyPlan, {
5
6
  readonly route: "preview";
6
7
  }>;
8
+ /**
9
+ * The preview route's result when a study runs: the synthetic run's result, named as a study
10
+ * result. `humanish run` with no study returns the plain `RunResult`.
11
+ */
12
+ export type PreviewStudyResult = Omit<RunResult, "schema"> & StudyResultIdentity<"preview">;
7
13
  /** A refused preview's result. */
8
- export declare function previewLabRefusal(cwd: string, refusal: Extract<PlanRefusal, {
14
+ export declare function previewStudyRefusal(cwd: string, studyId: string, refusal: Extract<PlanRefusal, {
9
15
  readonly route: "preview";
10
- }>): RunResult;
11
- /** runLab's step for a preview plan: it has no local checks and takes no scorer, so it returns its run. */
12
- export declare function admitPreviewPlan(plan: PreviewPlan, input: Pick<RunLabOptions, "cwd" | "runId" | "open">): AdmittedPlan<"preview">;
16
+ }>): PreviewStudyResult;
17
+ /** runStudyWith's step for a preview plan: it has no local checks and takes no scorer, so it returns its run. */
18
+ export declare function admitPreviewPlan(plan: PreviewPlan, input: Pick<RunStudyOptions, "cwd" | "runId" | "open">): AdmittedPlan<"preview">;
13
19
  export {};
@@ -1,34 +1,38 @@
1
- // The preview route: a lab whose subject is this repo runs the synthetic dry run. planLab decides
1
+ // The preview route: a study whose subject is this repo runs the synthetic dry run. planStudy decides
2
2
  // the sim count and refuses what a synthetic run would ignore; runPreviewPlan does the rest.
3
+ import { studyResultIdentity } from "../run/study-result.js";
3
4
  import { runDryRun } from "../run/dry-run.js";
4
5
  import path from "node:path";
5
6
  /** A refused preview's result. */
6
- export function previewLabRefusal(cwd, refusal) {
7
+ export function previewStudyRefusal(cwd, studyId, refusal) {
7
8
  return {
8
- schema: "humanish.run-result.v1",
9
+ ...studyResultIdentity("preview", studyId),
9
10
  ok: false,
10
11
  cwd: path.resolve(cwd),
11
12
  warnings: [],
12
13
  error: { code: refusal.code, message: refusal.message },
13
14
  };
14
15
  }
15
- /** runLab's step for a preview plan: it has no local checks and takes no scorer, so it returns its run. */
16
+ /** runStudyWith's step for a preview plan: it has no local checks and takes no scorer, so it returns its run. */
16
17
  export function admitPreviewPlan(plan, input) {
17
18
  return {
18
19
  ok: true,
19
20
  run: async () => ({
20
21
  route: "preview",
21
- result: await runPreviewPlan(plan, input),
22
+ result: {
23
+ ...(await runPreviewPlan(plan, input)),
24
+ ...studyResultIdentity("preview", plan.studyId),
25
+ },
22
26
  }),
23
27
  };
24
28
  }
25
29
  /** Run a preview plan: the synthetic dry run with the planned sim count. */
26
30
  function runPreviewPlan(plan, input) {
27
31
  return runDryRun({
28
- ...(plan.lab === undefined ? {} : { lab: plan.lab }),
32
+ ...(plan.study === undefined ? {} : { study: plan.study }),
29
33
  cwd: input.cwd,
30
34
  dryRun: true,
31
- simCount: plan.participantCount,
35
+ participantCount: plan.participantCount,
32
36
  ...(input.runId === undefined ? {} : { runId: input.runId }),
33
37
  ...(input.open === undefined ? {} : { observer: { open: input.open } }),
34
38
  });
@@ -3,9 +3,9 @@ import type { ScriptedBrowserSessionResult } from "../../actors/scripted-browser
3
3
  import type { BrowserPersonaJourney, BrowserSurface } from "../../actors/scripted-browser/types.js";
4
4
  import type { DesktopResourceObservation } from "../../substrates/e2b/desktop-resources.js";
5
5
  import { type ReviewSummary, type RunBundle, type RunSubjectProvenance, type BundleRun } from "../../run/bundle.js";
6
- /** What the scripted lab's bundle is built from. */
6
+ /** What the scripted study's bundle is built from. */
7
7
  interface ScriptedBundleArgs {
8
- /** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
8
+ /** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
9
9
  run: BundleRun;
10
10
  actorId: string;
11
11
  appUrl: string;
@@ -13,8 +13,8 @@ interface ScriptedBundleArgs {
13
13
  dryRun: boolean;
14
14
  hostDigest?: string;
15
15
  journey: BrowserPersonaJourney;
16
- labId: string;
17
- labTitle?: string;
16
+ studyId: string;
17
+ studyTitle?: string;
18
18
  persona: ActorPersonaRef;
19
19
  scenarioSource: string;
20
20
  scenarioSourceDigest: string;
@@ -34,11 +34,11 @@ interface ScriptedBundleArgs {
34
34
  verdict: ReviewSummary["verdict"];
35
35
  }
36
36
  /**
37
- * Project the scripted lab run into a humanish.run-bundle.v1 (no schema change — a new
38
- * producer only). The load-bearing line is `stream.actor = result.trace`: the provider-neutral
37
+ * Project the scripted run into a humanish.run-bundle.v1 (no schema change: a new
38
+ * producer only). The key line is `stream.actor = result.trace`: the provider-neutral
39
39
  * ActorTrace seam the Observer renders and verifyRun's engagement check reads. Exported for
40
40
  * the bundle-builder tests.
41
41
  */
42
- export declare function buildScriptedLabBundle(args: ScriptedBundleArgs): RunBundle;
42
+ export declare function buildScriptedStudyBundle(args: ScriptedBundleArgs): RunBundle;
43
43
  export declare function renderScriptedReviewMarkdown(bundle: RunBundle): string;
44
44
  export {};