humanish 0.108.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 (455) hide show
  1. package/ARCHITECTURE.md +58 -59
  2. package/CHANGELOG.md +13 -0
  3. package/CONTEXT.md +44 -44
  4. package/README.md +3 -3
  5. package/TELEMETRY.md +2 -2
  6. package/dist/actors/codex/app-server-trace.js +2 -1
  7. package/dist/actors/codex/restricted-participant.js +12 -12
  8. package/dist/actors/codex/restricted-session.d.ts +2 -2
  9. package/dist/actors/computer-use/actor.d.ts +6 -6
  10. package/dist/actors/computer-use/actor.js +2 -2
  11. package/dist/actors/computer-use/admission-limit.d.ts +2 -2
  12. package/dist/actors/computer-use/admission-limit.js +3 -3
  13. package/dist/actors/computer-use/executor-error.d.ts +2 -2
  14. package/dist/actors/computer-use/executor-error.js +3 -3
  15. package/dist/actors/computer-use/loop/actions.js +5 -5
  16. package/dist/actors/computer-use/loop/debrief.js +2 -2
  17. package/dist/actors/computer-use/loop/ending.d.ts +1 -1
  18. package/dist/actors/computer-use/loop/ending.js +12 -11
  19. package/dist/actors/computer-use/loop/observation.js +6 -5
  20. package/dist/actors/computer-use/loop/provider-call.js +11 -11
  21. package/dist/actors/computer-use/loop/session.d.ts +4 -4
  22. package/dist/actors/computer-use/loop/session.js +2 -2
  23. package/dist/actors/computer-use/loop/trace.js +3 -2
  24. package/dist/actors/computer-use/loop/types.d.ts +24 -24
  25. package/dist/actors/computer-use/loop/usage.d.ts +2 -2
  26. package/dist/actors/computer-use/loop.d.ts +6 -1
  27. package/dist/actors/computer-use/loop.js +26 -4
  28. package/dist/actors/computer-use/openai-provider.d.ts +2 -2
  29. package/dist/actors/computer-use/openai-provider.js +8 -8
  30. package/dist/actors/computer-use/provider-error.d.ts +4 -4
  31. package/dist/actors/computer-use/provider-error.js +6 -6
  32. package/dist/actors/contract.d.ts +4 -4
  33. package/dist/actors/contract.js +1 -1
  34. package/dist/actors/local-agent/claude-session.js +3 -3
  35. package/dist/actors/local-agent/cli.d.ts +1 -1
  36. package/dist/actors/local-agent/cli.js +1 -1
  37. package/dist/actors/reasoning-effort.js +3 -3
  38. package/dist/actors/registry.d.ts +2 -2
  39. package/dist/actors/registry.js +3 -3
  40. package/dist/actors/scripted-browser/actor.d.ts +2 -2
  41. package/dist/actors/scripted-browser/actor.js +1 -1
  42. package/dist/analysis/automatic-completion.d.ts +7 -7
  43. package/dist/analysis/automatic-completion.js +1 -1
  44. package/dist/analysis/automatic-config.d.ts +6 -6
  45. package/dist/analysis/automatic-config.js +1 -1
  46. package/dist/analysis/execute.d.ts +1 -1
  47. package/dist/analysis/execute.js +1 -1
  48. package/dist/analysis/types.d.ts +6 -0
  49. package/dist/browser-control/client.js +16 -16
  50. package/dist/browser-control/dispatcher.js +4 -4
  51. package/dist/browser-control/protocol.js +14 -14
  52. package/dist/browser-control/recording-transfer.js +4 -4
  53. package/dist/browser-control/transport.js +7 -7
  54. package/dist/cli/commands/analysis-signals.d.ts +2 -2
  55. package/dist/cli/commands/comms.js +14 -22
  56. package/dist/cli/commands/observe.d.ts +0 -1
  57. package/dist/cli/commands/observe.js +0 -15
  58. package/dist/cli/commands/run-command.d.ts +2 -2
  59. package/dist/cli/commands/run-command.js +3 -3
  60. package/dist/cli/commands/runs.js +3 -5
  61. package/dist/cli/commands/setup.js +5 -7
  62. package/dist/cli/commands/study-format.d.ts +9 -0
  63. package/dist/cli/commands/{lab-format.js → study-format.js} +5 -5
  64. package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
  65. package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +12 -12
  66. package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
  67. package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
  68. package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
  69. package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +3 -3
  70. package/dist/cli/commands/study-route-run.d.ts +19 -0
  71. package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
  72. package/dist/cli/commands/study-route-scripted.d.ts +17 -0
  73. package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
  74. package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
  75. package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +7 -7
  76. package/dist/cli/commands/study-route-terminal.d.ts +17 -0
  77. package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
  78. package/dist/cli/commands/study-run.d.ts +9 -0
  79. package/dist/cli/commands/{lab-run.js → study-run.js} +34 -34
  80. package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +5 -5
  81. package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +1 -1
  82. package/dist/cli/commands/study.js +13 -49
  83. package/dist/cli/commands/tui.js +12 -12
  84. package/dist/cli/commands/watch.js +30 -65
  85. package/dist/cli/deprecations.d.ts +1 -13
  86. package/dist/cli/deprecations.js +0 -30
  87. package/dist/cli/doctor.d.ts +3 -3
  88. package/dist/cli/doctor.js +16 -16
  89. package/dist/cli/first-run-path.d.ts +4 -4
  90. package/dist/cli/first-run-path.js +7 -7
  91. package/dist/cli/io.d.ts +3 -3
  92. package/dist/cli/io.js +2 -2
  93. package/dist/cli/observer-follow.d.ts +2 -2
  94. package/dist/cli/observer-follow.js +2 -2
  95. package/dist/cli/orientation.d.ts +4 -4
  96. package/dist/cli/orientation.js +58 -20
  97. package/dist/cli/program.js +3 -4
  98. package/dist/cli/telemetry.d.ts +1 -1
  99. package/dist/cli/telemetry.js +14 -20
  100. package/dist/comms/catch-host.d.ts +1 -1
  101. package/dist/comms/catch-host.js +3 -3
  102. package/dist/comms/connections.d.ts +1 -1
  103. package/dist/comms/connections.js +2 -2
  104. package/dist/comms/external-evidence.d.ts +5 -5
  105. package/dist/comms/external-evidence.js +4 -3
  106. package/dist/comms/fake-inbox.d.ts +2 -2
  107. package/dist/comms/fake-inbox.js +2 -2
  108. package/dist/comms/receiving-runtime.d.ts +4 -4
  109. package/dist/comms/sandbox-catch.d.ts +2 -2
  110. package/dist/comms/sandbox-catch.js +2 -2
  111. package/dist/comms/setup.d.ts +2 -2
  112. package/dist/comms/setup.js +29 -32
  113. package/dist/feedback/draft.js +2 -2
  114. package/dist/feedback/export.js +3 -2
  115. package/dist/feedback/proof.d.ts +1 -1
  116. package/dist/feedback/proof.js +2 -2
  117. package/dist/guest/bootstrap.js +6 -6
  118. package/dist/guest/browser-tools.js +8 -8
  119. package/dist/guest/chromium-text.js +17 -17
  120. package/dist/guest/desktop-executor.d.ts +2 -2
  121. package/dist/guest/desktop-executor.js +20 -20
  122. package/dist/guest/desktop-keys.js +4 -4
  123. package/dist/guest/desktop-media.d.ts +2 -2
  124. package/dist/guest/desktop-media.js +16 -16
  125. package/dist/guest/desktop-native.js +10 -10
  126. package/dist/guest/runtime-desktop.js +2 -2
  127. package/dist/guest/runtime-processes.d.ts +2 -2
  128. package/dist/guest/runtime-processes.js +2 -2
  129. package/dist/guest/runtime.js +5 -5
  130. package/dist/index.d.ts +13 -15
  131. package/dist/index.js +6 -8
  132. package/dist/observer/artifact.d.ts +1 -1
  133. package/dist/observer/artifact.js +1 -1
  134. package/dist/observer/data.d.ts +1 -1
  135. package/dist/observer/library.d.ts +2 -0
  136. package/dist/observer/library.js +4 -1
  137. package/dist/observer/render.js +7 -1
  138. package/dist/observer/run-routes.d.ts +1 -0
  139. package/dist/observer/run-routes.js +37 -12
  140. package/dist/observer/serve.d.ts +1 -1
  141. package/dist/observer-app.html +1 -1
  142. package/dist/routes/computer-use/bundle-parts.js +3 -2
  143. package/dist/routes/computer-use/bundle.d.ts +2 -2
  144. package/dist/routes/computer-use/bundle.js +7 -6
  145. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +5 -5
  146. package/dist/routes/computer-use/e2b-desktop/comms.js +5 -4
  147. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +1 -1
  148. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
  149. package/dist/routes/computer-use/e2b-desktop/prepare.js +3 -3
  150. package/dist/routes/computer-use/e2b-desktop/start.js +3 -4
  151. package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
  152. package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -3
  153. package/dist/routes/computer-use/external-comms.d.ts +3 -3
  154. package/dist/routes/computer-use/fanout-bundle.js +11 -10
  155. package/dist/routes/computer-use/fanout-records.js +2 -2
  156. package/dist/routes/computer-use/live-flush.d.ts +3 -3
  157. package/dist/routes/computer-use/live-phase.d.ts +2 -3
  158. package/dist/routes/computer-use/live-phase.js +3 -3
  159. package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
  160. package/dist/routes/computer-use/local-tree-pack.js +1 -1
  161. package/dist/routes/computer-use/local-vm.d.ts +8 -8
  162. package/dist/routes/computer-use/local-vm.js +2 -2
  163. package/dist/routes/computer-use/participant-desktop.d.ts +3 -3
  164. package/dist/routes/computer-use/participant-desktop.js +1 -1
  165. package/dist/routes/computer-use/participant-execution.js +1 -1
  166. package/dist/routes/computer-use/participant-model.js +3 -3
  167. package/dist/routes/computer-use/participant-prompt.d.ts +5 -5
  168. package/dist/routes/computer-use/participant-prompt.js +3 -3
  169. package/dist/routes/computer-use/participant-runs.d.ts +10 -10
  170. package/dist/routes/computer-use/participant-runs.js +14 -13
  171. package/dist/routes/computer-use/plan.d.ts +12 -12
  172. package/dist/routes/computer-use/plan.js +24 -24
  173. package/dist/routes/computer-use/preflight.d.ts +5 -5
  174. package/dist/routes/computer-use/preflight.js +5 -5
  175. package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
  176. package/dist/routes/computer-use/rerun-selection.js +3 -2
  177. package/dist/routes/computer-use/result.d.ts +4 -4
  178. package/dist/routes/computer-use/result.js +13 -12
  179. package/dist/routes/computer-use/route.d.ts +12 -12
  180. package/dist/routes/computer-use/route.js +19 -19
  181. package/dist/routes/computer-use/self-report.js +1 -1
  182. package/dist/routes/computer-use/setup.d.ts +22 -22
  183. package/dist/routes/computer-use/setup.js +15 -15
  184. package/dist/routes/computer-use/single-bundle.d.ts +4 -4
  185. package/dist/routes/computer-use/single-bundle.js +14 -13
  186. package/dist/routes/computer-use/subject-projection.d.ts +3 -3
  187. package/dist/routes/computer-use/types.d.ts +34 -34
  188. package/dist/routes/computer-use/types.js +3 -3
  189. package/dist/routes/preview.d.ts +6 -6
  190. package/dist/routes/preview.js +5 -5
  191. package/dist/routes/scripted/bundle.d.ts +6 -6
  192. package/dist/routes/scripted/bundle.js +10 -9
  193. package/dist/routes/scripted/plan.d.ts +7 -7
  194. package/dist/routes/scripted/plan.js +6 -6
  195. package/dist/routes/scripted/result.d.ts +3 -3
  196. package/dist/routes/scripted/result.js +9 -9
  197. package/dist/routes/scripted/route.d.ts +9 -9
  198. package/dist/routes/scripted/route.js +11 -11
  199. package/dist/routes/scripted/scenario.d.ts +1 -1
  200. package/dist/routes/scripted/scenario.js +3 -3
  201. package/dist/routes/scripted/setup.d.ts +6 -6
  202. package/dist/routes/scripted/setup.js +4 -4
  203. package/dist/routes/scripted/subject.d.ts +5 -5
  204. package/dist/routes/scripted/subject.js +3 -3
  205. package/dist/routes/scripted/surface-records.d.ts +1 -1
  206. package/dist/routes/scripted/surface-records.js +2 -2
  207. package/dist/routes/scripted/surface-sessions.d.ts +3 -3
  208. package/dist/routes/scripted/types.d.ts +17 -17
  209. package/dist/routes/scripted/types.js +1 -1
  210. package/dist/routes/shared-world/bundle-records.js +3 -3
  211. package/dist/routes/shared-world/bundle.js +15 -14
  212. package/dist/routes/shared-world/checkpoints.d.ts +3 -3
  213. package/dist/routes/shared-world/checkpoints.js +1 -1
  214. package/dist/routes/shared-world/comms.d.ts +9 -9
  215. package/dist/routes/shared-world/comms.js +6 -5
  216. package/dist/routes/shared-world/participant-specs.d.ts +3 -3
  217. package/dist/routes/shared-world/participant-specs.js +7 -7
  218. package/dist/routes/shared-world/plan.d.ts +9 -9
  219. package/dist/routes/shared-world/plan.js +9 -9
  220. package/dist/routes/shared-world/provisioned.d.ts +8 -8
  221. package/dist/routes/shared-world/provisioned.js +4 -4
  222. package/dist/routes/shared-world/result.d.ts +6 -6
  223. package/dist/routes/shared-world/result.js +11 -10
  224. package/dist/routes/shared-world/route.d.ts +11 -11
  225. package/dist/routes/shared-world/route.js +19 -19
  226. package/dist/routes/shared-world/setup.d.ts +13 -13
  227. package/dist/routes/shared-world/setup.js +19 -19
  228. package/dist/routes/shared-world/types.d.ts +27 -27
  229. package/dist/routes/terminal/adapter.d.ts +2 -2
  230. package/dist/routes/terminal/adapter.js +4 -4
  231. package/dist/routes/terminal/bundle.d.ts +11 -11
  232. package/dist/routes/terminal/bundle.js +12 -12
  233. package/dist/routes/terminal/credentials.d.ts +4 -4
  234. package/dist/routes/terminal/credentials.js +5 -5
  235. package/dist/routes/terminal/dry-run.d.ts +4 -4
  236. package/dist/routes/terminal/dry-run.js +9 -9
  237. package/dist/routes/terminal/ledger.d.ts +2 -2
  238. package/dist/routes/terminal/lifetime.d.ts +1 -1
  239. package/dist/routes/terminal/lifetime.js +1 -1
  240. package/dist/routes/terminal/live-finish.d.ts +2 -2
  241. package/dist/routes/terminal/live-finish.js +7 -7
  242. package/dist/routes/terminal/live-sandbox.d.ts +2 -2
  243. package/dist/routes/terminal/live-sandbox.js +3 -2
  244. package/dist/routes/terminal/participant-text.js +2 -1
  245. package/dist/routes/terminal/persona.d.ts +2 -2
  246. package/dist/routes/terminal/persona.js +2 -2
  247. package/dist/routes/terminal/plan.d.ts +7 -7
  248. package/dist/routes/terminal/plan.js +5 -5
  249. package/dist/routes/terminal/result.d.ts +5 -5
  250. package/dist/routes/terminal/result.js +7 -7
  251. package/dist/routes/terminal/route.d.ts +9 -9
  252. package/dist/routes/terminal/route.js +14 -14
  253. package/dist/routes/terminal/session.d.ts +5 -5
  254. package/dist/routes/terminal/session.js +7 -7
  255. package/dist/routes/terminal/trace.d.ts +2 -2
  256. package/dist/routes/terminal/types.d.ts +24 -24
  257. package/dist/routes/terminal/types.js +2 -2
  258. package/dist/run/bundle.d.ts +7 -7
  259. package/dist/run/bundle.js +2 -2
  260. package/dist/run/costs.d.ts +23 -0
  261. package/dist/run/costs.js +72 -43
  262. package/dist/run/dry-run-inputs.d.ts +1 -1
  263. package/dist/run/dry-run-inputs.js +1 -1
  264. package/dist/run/dry-run.js +2 -2
  265. package/dist/run/outcomes.d.ts +1 -1
  266. package/dist/run/participant.d.ts +1 -1
  267. package/dist/run/preflight-receipts.js +1 -1
  268. package/dist/run/pricing.js +2 -2
  269. package/dist/run/projection.d.ts +32 -32
  270. package/dist/run/projection.js +44 -44
  271. package/dist/run/reclaim.d.ts +1 -1
  272. package/dist/run/reclaim.js +1 -1
  273. package/dist/run/results.d.ts +2 -2
  274. package/dist/run/run-cost.d.ts +53 -0
  275. package/dist/run/run-cost.js +105 -0
  276. package/dist/run/run-index-analysis.d.ts +15 -0
  277. package/dist/run/run-index-analysis.js +77 -0
  278. package/dist/run/run-index.d.ts +11 -1
  279. package/dist/run/run-index.js +63 -49
  280. package/dist/run/run.d.ts +3 -3
  281. package/dist/run/run.js +2 -2
  282. package/dist/run/shared-world-evidence.d.ts +1 -1
  283. package/dist/run/shared-world-shape.js +1 -1
  284. package/dist/run/stats.d.ts +3 -3
  285. package/dist/run/stats.js +14 -14
  286. package/dist/run/status.d.ts +10 -2
  287. package/dist/run/status.js +6 -3
  288. package/dist/run/streams.d.ts +2 -2
  289. package/dist/run/study-provenance.d.ts +4 -2
  290. package/dist/run/study-provenance.js +7 -4
  291. package/dist/run/study-result.d.ts +0 -5
  292. package/dist/run/study-result.js +1 -1
  293. package/dist/run-study.d.ts +112 -0
  294. package/dist/{run-lab.js → run-study.js} +52 -45
  295. package/dist/{lab → study}/adapter-extension.d.ts +8 -20
  296. package/dist/{lab → study}/adapter-extension.js +2 -14
  297. package/dist/{lab → study}/adapter-scorer-loader.d.ts +10 -10
  298. package/dist/{lab → study}/adapter-scorer-loader.js +3 -3
  299. package/dist/study/composition-rules.d.ts +7 -0
  300. package/dist/{lab → study}/composition-rules.js +12 -12
  301. package/dist/study/config.d.ts +15 -0
  302. package/dist/{lab → study}/config.js +37 -20
  303. package/dist/study/convert.d.ts +1 -1
  304. package/dist/study/convert.js +15 -15
  305. package/dist/{lab → study}/device-presets.d.ts +2 -2
  306. package/dist/{lab → study}/discover.d.ts +29 -23
  307. package/dist/{lab → study}/discover.js +97 -118
  308. package/dist/{lab → study}/doctor.d.ts +11 -11
  309. package/dist/{lab → study}/doctor.js +18 -18
  310. package/dist/study/files.d.ts +2 -2
  311. package/dist/study/files.js +6 -5
  312. package/dist/{lab → study}/init-templates.d.ts +2 -2
  313. package/dist/{lab → study}/init-templates.js +16 -11
  314. package/dist/{lab → study}/init.d.ts +1 -1
  315. package/dist/{lab → study}/init.js +7 -4
  316. package/dist/{lab → study}/keys.d.ts +2 -2
  317. package/dist/{lab → study}/keys.js +10 -10
  318. package/dist/study/migrate.d.ts +1 -1
  319. package/dist/{lab → study}/parse/actors.d.ts +5 -5
  320. package/dist/{lab → study}/parse/actors.js +5 -5
  321. package/dist/study/parse/comms.d.ts +12 -0
  322. package/dist/study/parse/execution.d.ts +19 -0
  323. package/dist/{lab → study}/parse/study-v3.d.ts +3 -5
  324. package/dist/{lab → study}/parse/study-v3.js +3 -3
  325. package/dist/{lab → study}/parse/subject-state.d.ts +8 -8
  326. package/dist/{lab → study}/parse/subject-state.js +4 -4
  327. package/dist/{lab → study}/parse/subject.d.ts +3 -3
  328. package/dist/{lab → study}/parse/subject.js +8 -8
  329. package/dist/{lab → study}/parse/values.d.ts +2 -2
  330. package/dist/{lab → study}/persona-resolve.d.ts +4 -4
  331. package/dist/{lab → study}/persona-resolve.js +2 -2
  332. package/dist/{lab → study}/plan-base.d.ts +7 -7
  333. package/dist/{lab → study}/plan-base.js +1 -1
  334. package/dist/{lab → study}/plan-participants.d.ts +10 -10
  335. package/dist/{lab → study}/plan-participants.js +4 -4
  336. package/dist/{lab → study}/plan-types.d.ts +28 -28
  337. package/dist/{lab → study}/plan-types.js +2 -2
  338. package/dist/study/plan.d.ts +13 -0
  339. package/dist/{lab → study}/plan.js +20 -20
  340. package/dist/study/preflight-probes.d.ts +3 -0
  341. package/dist/{lab → study}/preflight-probes.js +9 -8
  342. package/dist/study/preflight-result.d.ts +8 -0
  343. package/dist/{lab → study}/preflight-result.js +3 -3
  344. package/dist/{lab → study}/preflight.d.ts +31 -31
  345. package/dist/{lab → study}/preflight.js +8 -8
  346. package/dist/{lab → study}/requirements.d.ts +3 -3
  347. package/dist/{lab → study}/requirements.js +1 -1
  348. package/dist/study/route-inputs.d.ts +28 -0
  349. package/dist/{lab → study}/route-inputs.js +1 -1
  350. package/dist/{lab → study}/routing.d.ts +12 -12
  351. package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -10
  352. package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -3
  353. package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +8 -17
  354. package/dist/study/run-study-homes.js +3 -0
  355. package/dist/study/run-study-options.d.ts +28 -0
  356. package/dist/{lab/run-lab-options.js → study/run-study-options.js} +13 -12
  357. package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +2 -2
  358. package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
  359. package/dist/{lab → study}/summary.d.ts +10 -10
  360. package/dist/{lab → study}/summary.js +15 -15
  361. package/dist/{lab → study}/tasks.d.ts +3 -3
  362. package/dist/{lab → study}/tasks.js +1 -1
  363. package/dist/{lab → study}/types.d.ts +104 -104
  364. package/dist/{lab → study}/types.js +1 -1
  365. package/dist/{lab → study}/validation.d.ts +19 -19
  366. package/dist/{lab → study}/validation.js +13 -13
  367. package/dist/{lab → study}/warnings.d.ts +4 -4
  368. package/dist/{lab → study}/warnings.js +1 -1
  369. package/dist/subject/clone.d.ts +6 -6
  370. package/dist/subject/clone.js +2 -2
  371. package/dist/subject/local-tree-archive.d.ts +2 -2
  372. package/dist/subject/local-tree-archive.js +3 -3
  373. package/dist/subject/local-tree.d.ts +3 -3
  374. package/dist/subject/runtime.js +2 -2
  375. package/dist/subject/serve.d.ts +4 -4
  376. package/dist/subject/state.d.ts +3 -3
  377. package/dist/subject/state.js +1 -1
  378. package/dist/subject/steps.d.ts +1 -1
  379. package/dist/subject/steps.js +1 -1
  380. package/dist/substrates/desktop-session.js +2 -2
  381. package/dist/substrates/detached.d.ts +1 -1
  382. package/dist/substrates/e2b/desktop-browser.d.ts +4 -4
  383. package/dist/substrates/e2b/desktop-browser.js +1 -1
  384. package/dist/substrates/e2b/desktop-cdp.d.ts +1 -1
  385. package/dist/substrates/e2b/desktop-cdp.js +1 -1
  386. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  387. package/dist/substrates/e2b/desktop-executor.js +12 -12
  388. package/dist/substrates/e2b/desktop-geometry.d.ts +1 -1
  389. package/dist/substrates/e2b/desktop-geometry.js +1 -1
  390. package/dist/substrates/e2b/desktop-media.d.ts +3 -3
  391. package/dist/substrates/e2b/lifetime.js +1 -1
  392. package/dist/substrates/e2b/sandbox.d.ts +3 -3
  393. package/dist/substrates/e2b/sandbox.js +1 -1
  394. package/dist/substrates/e2b/sdk.d.ts +1 -1
  395. package/dist/substrates/e2b/sdk.js +1 -1
  396. package/dist/substrates/local/runtime-config.d.ts +4 -4
  397. package/dist/substrates/local/runtime-config.js +4 -4
  398. package/dist/tui/contract.d.ts +8 -8
  399. package/dist/tui/contract.js +2 -2
  400. package/dist/tui/launch.d.ts +3 -3
  401. package/dist/tui/launch.js +22 -16
  402. package/dist/tui-app.js +139 -139
  403. package/dist/verify/subject.d.ts +1 -1
  404. package/dist/verify/subject.js +1 -1
  405. package/dist/verify/verify.js +2 -1
  406. package/docs/architecture/actor-contract.md +5 -5
  407. package/docs/architecture/browser-control.md +1 -1
  408. package/docs/architecture/external-public-shared-world.md +8 -7
  409. package/docs/architecture/github-feedback-loop.md +1 -1
  410. package/docs/architecture/task-protocol-support.md +1 -1
  411. package/docs/architecture/terminal-product-route.md +18 -18
  412. package/docs/contracts/adapter-fixtures.md +2 -2
  413. package/docs/contracts/errors.md +8 -8
  414. package/docs/contracts/run-bundle.md +1 -4
  415. package/docs/contracts/schemas.md +61 -42
  416. package/docs/contracts/study-analysis.md +4 -1
  417. package/docs/contracts/study-costs.md +17 -2
  418. package/examples/README.md +1 -1
  419. package/examples/scorer/scorer.mjs +3 -3
  420. package/package.json +1 -1
  421. package/skills/humanish/SKILL.md +8 -6
  422. package/skills/humanish/agents/openai.yaml +1 -1
  423. package/dist/cli/commands/lab-format.d.ts +0 -9
  424. package/dist/cli/commands/lab-route-run.d.ts +0 -19
  425. package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
  426. package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
  427. package/dist/cli/commands/lab-run.d.ts +0 -9
  428. package/dist/lab/composition-rules.d.ts +0 -7
  429. package/dist/lab/config.d.ts +0 -7
  430. package/dist/lab/deprecated-fields.d.ts +0 -10
  431. package/dist/lab/deprecated-fields.js +0 -24
  432. package/dist/lab/parse/comms.d.ts +0 -12
  433. package/dist/lab/parse/execution.d.ts +0 -19
  434. package/dist/lab/plan.d.ts +0 -13
  435. package/dist/lab/preflight-probes.d.ts +0 -3
  436. package/dist/lab/preflight-result.d.ts +0 -8
  437. package/dist/lab/route-inputs.d.ts +0 -28
  438. package/dist/lab/run-lab-homes.js +0 -7
  439. package/dist/lab/run-lab-options.d.ts +0 -28
  440. package/dist/library-aliases.d.ts +0 -56
  441. package/dist/library-aliases.js +0 -22
  442. package/dist/run-lab.d.ts +0 -112
  443. /package/dist/{lab → study}/device-presets.js +0 -0
  444. /package/dist/{lab → study}/init-paths.d.ts +0 -0
  445. /package/dist/{lab → study}/init-paths.js +0 -0
  446. /package/dist/{lab → study}/init-plan.d.ts +0 -0
  447. /package/dist/{lab → study}/init-plan.js +0 -0
  448. /package/dist/{lab → study}/parse/comms.js +0 -0
  449. /package/dist/{lab → study}/parse/execution.js +0 -0
  450. /package/dist/{lab → study}/parse/values.js +0 -0
  451. /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
  452. /package/dist/{lab → study}/participant-assignment.js +0 -0
  453. /package/dist/{lab → study}/persona.d.ts +0 -0
  454. /package/dist/{lab → study}/persona.js +0 -0
  455. /package/dist/{lab → study}/routing.js +0 -0
@@ -1,5 +1,5 @@
1
- import type { SharedWorldPlan } from "../../lab/plan-types.js";
2
- import type { Participant, SharedWorldParticipant } from "../../lab/plan-participants.js";
1
+ import type { SharedWorldPlan } from "../../study/plan-types.js";
2
+ import type { Participant, SharedWorldParticipant } from "../../study/plan-participants.js";
3
3
  import type { RunBundle } from "../../run/bundle.js";
4
4
  import type { CuaParticipantDeps, DesktopParticipantRun, ParticipantRunOutcome } from "../computer-use/types.js";
5
5
  import type { LiveParticipants, PlaneContext } from "./types.js";
@@ -10,7 +10,7 @@ export declare function resolveActorEntryUrl(baseUrl: string, entry: string | un
10
10
  export declare function participantTaxonomyLabel(labels: Participant["labels"]): string;
11
11
  /** Thread the host-yielded lobby code into a follower's mission at runtime (external-public route).
12
12
  * The code flows into the follower's join instruction; it is persisted only as the composed prompt
13
- * the model reads (never a raw bundle field), and the lab scrubs the code from all narration. The
13
+ * the model reads (never a raw bundle field), and humanish scrubs the code from all narration. The
14
14
  * follower joins through the real UI (a direct /lobby/CODE visit does not auto-join a non-member). */
15
15
  export declare function withLobbyCodeMission(spec: DesktopParticipantRun, code: string): DesktopParticipantRun;
16
16
  /** A follower blocked by an expired deadline or an ended host. It never opened a browser;
@@ -1,14 +1,14 @@
1
1
  // Builds each participant's actor spec and mission, resolves its entry URL, derives the session
2
2
  // and sandbox time budgets, and records a follower that never received the host's lobby code.
3
3
  import { defaultSubjectPhaseSink } from "../../subject/steps.js";
4
- import { pricedModel } from "../../lab/plan-base.js";
5
- import { scrubPersonaBrief } from "../../lab/persona.js";
4
+ import { pricedModel } from "../../study/plan-base.js";
5
+ import { scrubPersonaBrief } from "../../study/persona.js";
6
6
  import { resolveParticipant } from "../../run/participant.js";
7
7
  import { attachObserverRuntimeStreamUrls } from "../../observer/render.js";
8
8
  import { composeParticipantInstructions } from "../computer-use/participant-prompt.js";
9
9
  import { startLiveTraceFlush } from "../computer-use/live-flush.js";
10
- import { resolveCommittedPersonasForCwd } from "../../lab/persona-resolve.js";
11
- import { participantAssignment } from "../../lab/participant-assignment.js";
10
+ import { resolveCommittedPersonasForCwd } from "../../study/persona-resolve.js";
11
+ import { participantAssignment } from "../../study/participant-assignment.js";
12
12
  import { redactText } from "../../evidence/redaction.js";
13
13
  import { MAX_SANDBOX_MS, SANDBOX_TIMEOUT_BUFFER_MS, SUBJECT_PROVISION_BUDGET_MS, } from "../../substrates/e2b/lifetime.js";
14
14
  import { DEFAULT_STATE_STEP_TIMEOUT_MS } from "../../subject/state.js";
@@ -79,7 +79,7 @@ function buildActorSpec(participant, personas) {
79
79
  }
80
80
  /** Thread the host-yielded lobby code into a follower's mission at runtime (external-public route).
81
81
  * The code flows into the follower's join instruction; it is persisted only as the composed prompt
82
- * the model reads (never a raw bundle field), and the lab scrubs the code from all narration. The
82
+ * the model reads (never a raw bundle field), and humanish scrubs the code from all narration. The
83
83
  * follower joins through the real UI (a direct /lobby/CODE visit does not auto-join a non-member). */
84
84
  export function withLobbyCodeMission(spec, code) {
85
85
  // prose-check: model prompt (the participant model reads this, not a person)
@@ -150,7 +150,7 @@ export function participantRunDeps(ctx, live, scrubKnownValues) {
150
150
  return {
151
151
  onTrace: (participantId, items, usage, metadata) => live.flush?.flush(participantId, items, usage, metadata),
152
152
  residual: ctx.plan.residual,
153
- labId: ctx.plan.labId,
153
+ studyId: ctx.plan.studyId,
154
154
  caps: ctx.plan.caps,
155
155
  subject: {
156
156
  kind: "shared-app",
@@ -164,7 +164,7 @@ export function participantRunDeps(ctx, live, scrubKnownValues) {
164
164
  timeoutMs: ctx.timeoutMs,
165
165
  participantCount: ctx.plan.plane.participants.length,
166
166
  artifactRoot: ctx.runPaths,
167
- labCwd: ctx.cwd,
167
+ studyCwd: ctx.cwd,
168
168
  redactScreenshots: ctx.redactScreenshots,
169
169
  scrubKnownValues,
170
170
  runSession: ctx.runSession,
@@ -1,23 +1,23 @@
1
1
  import { type CuaActorDescriptor } from "../../actors/registry.js";
2
- import type { RoutePlanResult, RouteRefusal, SharedWorldPlan } from "../../lab/plan-types.js";
3
- import type { LabConfig, LabSubjectState } from "../../lab/types.js";
4
- import type { ConcurrentSharedWorldLabErrorCode } from "./types.js";
5
- /** The error a shared-world lab returns before a run starts. */
6
- export interface SharedWorldRefusal extends RouteRefusal<"shared-world", ConcurrentSharedWorldLabErrorCode> {
2
+ import type { RoutePlanResult, RouteRefusal, SharedWorldPlan } from "../../study/plan-types.js";
3
+ import type { StudyConfig, StudySubjectState } from "../../study/types.js";
4
+ import type { ConcurrentSharedWorldStudyErrorCode } from "./types.js";
5
+ /** The error a shared-world study returns before a run starts. */
6
+ export interface SharedWorldRefusal extends RouteRefusal<"shared-world", ConcurrentSharedWorldStudyErrorCode> {
7
7
  /** The registered actor id, once the registry check has passed. */
8
8
  readonly actor?: string;
9
9
  }
10
10
  export type SharedWorldPlanResult = RoutePlanResult<SharedWorldPlan, SharedWorldRefusal>;
11
- /** The registered descriptor for a planned actor; planSharedWorldLab checked the registry. */
11
+ /** The registered descriptor for a planned actor; planSharedWorldStudy checked the registry. */
12
12
  export declare function sharedWorldDescriptorOf(actorType: string): CuaActorDescriptor;
13
13
  /**
14
- * Plan a shared-world lab. It is called for any config handed to the shared-world runner, not only
14
+ * Plan a shared-world study. It is called for any config handed to the shared-world runner, not only
15
15
  * one routeOf sends here, so a config for another route gets this route's refusal.
16
16
  */
17
- export declare function planSharedWorldLab(config: LabConfig, input: {
17
+ export declare function planSharedWorldStudy(config: StudyConfig, input: {
18
18
  readonly dryRun: boolean;
19
19
  /** Whether deps.runSession is set: a caller's session runner cannot enforce maxOutputTokens. */
20
20
  readonly hasRunSession?: boolean;
21
21
  }): SharedWorldPlanResult;
22
22
  /** The provisioned plane's declared subject state. The external-public plane declares none. */
23
- export declare function planeStateOf(plan: SharedWorldPlan): LabSubjectState | undefined;
23
+ export declare function planeStateOf(plan: SharedWorldPlan): StudySubjectState | undefined;
@@ -5,13 +5,13 @@
5
5
  import { DEFAULT_OPENAI_CU_MODEL } from "../../actors/computer-use/openai-provider.js";
6
6
  import { actorRegistry, isCuaActorDescriptor, } from "../../actors/registry.js";
7
7
  import { resolveAutomaticAnalysis } from "../../analysis/automatic-config.js";
8
- import { brainOf, capsOf, desktopRequirements, isNonEmpty, planBase } from "../../lab/plan-base.js";
9
- import { sharedWorldParticipants } from "../../lab/plan-participants.js";
10
- import { PUBLIC_TARGET_OWNER_PATTERN } from "../../lab/parse/subject.js";
11
- import { REPO_SLUG_PATTERN } from "../../lab/parse/values.js";
12
- import { concurrentSharedWorldValidationReason, desktopMediaValidationReason, externalPublicSharedWorldValidationReason, outputTokenLimitValidationReason, receivingEmailValidationReason, scenarioCapsValidationReason, taskProtocolValidationReason, } from "../../lab/validation.js";
8
+ import { brainOf, capsOf, desktopRequirements, isNonEmpty, planBase, } from "../../study/plan-base.js";
9
+ import { sharedWorldParticipants } from "../../study/plan-participants.js";
10
+ import { PUBLIC_TARGET_OWNER_PATTERN } from "../../study/parse/subject.js";
11
+ import { REPO_SLUG_PATTERN } from "../../study/parse/values.js";
12
+ import { concurrentSharedWorldValidationReason, desktopMediaValidationReason, externalPublicSharedWorldValidationReason, outputTokenLimitValidationReason, receivingEmailValidationReason, scenarioCapsValidationReason, taskProtocolValidationReason, } from "../../study/validation.js";
13
13
  import { MODEL_RATES, unpricedCapMessage } from "../../run/pricing.js";
14
- /** The registered descriptor for a planned actor; planSharedWorldLab checked the registry. */
14
+ /** The registered descriptor for a planned actor; planSharedWorldStudy checked the registry. */
15
15
  export function sharedWorldDescriptorOf(actorType) {
16
16
  const descriptor = actorRegistry[actorType];
17
17
  if (!descriptor || !isCuaActorDescriptor(descriptor))
@@ -19,10 +19,10 @@ export function sharedWorldDescriptorOf(actorType) {
19
19
  return descriptor;
20
20
  }
21
21
  /**
22
- * Plan a shared-world lab. It is called for any config handed to the shared-world runner, not only
22
+ * Plan a shared-world study. It is called for any config handed to the shared-world runner, not only
23
23
  * one routeOf sends here, so a config for another route gets this route's refusal.
24
24
  */
25
- export function planSharedWorldLab(config, input) {
25
+ export function planSharedWorldStudy(config, input) {
26
26
  const refuse = (code, message, actor) => ({
27
27
  ok: false,
28
28
  refusal: { route: "shared-world", code, message, ...(actor === undefined ? {} : { actor }) },
@@ -162,7 +162,7 @@ function planeOf(config) {
162
162
  ? { kind: "local-tree", serve, env, state: checkpointed }
163
163
  : {
164
164
  kind: "clone",
165
- // planSharedWorldLab refused a clone without an owner/repo slug.
165
+ // planSharedWorldStudy refused a clone without an owner/repo slug.
166
166
  repo: config.subject.repos?.[0] ?? "",
167
167
  serve,
168
168
  env,
@@ -1,13 +1,13 @@
1
- import type { LabCommsEmail, LabConfig, LabSubjectServe, LabSubjectStateCheckpoint } from "../../lab/types.js";
1
+ import type { StudyCommsEmail, StudyConfig, StudySubjectServe, StudySubjectStateCheckpoint } from "../../study/types.js";
2
2
  import type { RunSubjectStateStepRecord } from "../../run/bundle.js";
3
3
  import type { SharedWorldStateSnapshot } from "../../run/shared-world-evidence.js";
4
4
  import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
5
5
  import type { DetachedTimers } from "../../substrates/detached.js";
6
- import type { LabDeps } from "../../lab/lab-deps.js";
6
+ import type { StudyDeps } from "../../study/study-deps.js";
7
7
  import { type ActorRunResult, type SubjectDesktopUsage, type LiveParticipants, type PlaneContext } from "./types.js";
8
8
  /** What the provisioned plane needs besides the shared plane context. */
9
9
  export interface ProvisionedPlaneSetup {
10
- serve: LabSubjectServe;
10
+ serve: StudySubjectServe;
11
11
  localTreeRoute: boolean;
12
12
  localTreeArchive: LocalTreeArchive | undefined;
13
13
  localTreeArchiveBuffer: ArrayBuffer | undefined;
@@ -15,9 +15,9 @@ export interface ProvisionedPlaneSetup {
15
15
  publicRepo: string;
16
16
  subjectEnvNames: string[];
17
17
  hasGithubToken: boolean;
18
- checkpoints: LabSubjectStateCheckpoint[];
19
- /** The in-sandbox email catch, when a comms lab declared one. */
20
- commsEmail: LabCommsEmail | undefined;
18
+ checkpoints: StudySubjectStateCheckpoint[];
19
+ /** The in-sandbox email catch, when a comms study declared one. */
20
+ commsEmail: StudyCommsEmail | undefined;
21
21
  commsPort: number | undefined;
22
22
  /** The catch's base URL, injected into the subject's env at create. */
23
23
  commsEnv: Record<string, string>;
@@ -47,8 +47,8 @@ export declare function runProvisionedPlane(ctx: PlaneContext, live: LivePartici
47
47
  * or the message the run fails with.
48
48
  */
49
49
  export declare function packSubjectTree(cwd: string, config: {
50
- readonly subject: Pick<LabConfig["subject"], "localTree">;
51
- }, deps: LabDeps, scrubKnownValues: (text: string) => string): Promise<{
50
+ readonly subject: Pick<StudyConfig["subject"], "localTree">;
51
+ }, deps: StudyDeps, scrubKnownValues: (text: string) => string): Promise<{
52
52
  ok: true;
53
53
  archive: LocalTreeArchive;
54
54
  buffer: ArrayBuffer;
@@ -10,7 +10,7 @@ import { mapWithConcurrency } from "../../run/concurrency.js";
10
10
  import { provisionCloneSubject } from "../../subject/clone.js";
11
11
  import { provisionLocalTreeSubject } from "../../subject/local-tree.js";
12
12
  import { defaultSharedWorldPhaseSink } from "../../subject/steps.js";
13
- import { phaseEvent } from "../../lab/run-lab-events.js";
13
+ import { phaseEvent } from "../../study/run-study-events.js";
14
14
  import { loadE2BDesktopModule } from "../../substrates/e2b/sdk.js";
15
15
  import { observeDesktopResources, } from "../../substrates/e2b/desktop-resources.js";
16
16
  import { acquireE2BDesktopSandbox, readE2BRelease } from "../../substrates/e2b/sandbox.js";
@@ -29,7 +29,7 @@ import { SANDBOX_TIMEOUT_BUFFER_MS, SUBJECT_PROVISION_BUDGET_MS, } from "../../s
29
29
  import { DEFAULT_STATE_STEP_TIMEOUT_MS } from "../../subject/state.js";
30
30
  import { resolveActorEntryUrl, participantRunDeps, startParticipantFlush, } from "./participant-specs.js";
31
31
  import { CONCURRENT_SHARED_WORLD_PROVIDER_METADATA, } from "./types.js";
32
- import { addressedRecipients } from "../../lab/parse/comms.js";
32
+ import { addressedRecipients } from "../../study/parse/comms.js";
33
33
  /**
34
34
  * A failure of the caller's `onObserverReady` gate on the provisioned plane. The gate runs inside
35
35
  * the try that records participant failures, so it is wrapped to be told apart and rethrown: a gate
@@ -60,7 +60,7 @@ class SubjectPlane {
60
60
  subjectDesktop;
61
61
  subjectShell;
62
62
  // The in-sandbox email catch on the one subject sandbox; drained at teardown. Undefined
63
- // unless a comms lab declared it.
63
+ // unless a comms study declared it.
64
64
  deployedComms;
65
65
  // Background prober dispose signal, cleared in teardown.
66
66
  proberDisposed = false;
@@ -119,7 +119,7 @@ class SubjectPlane {
119
119
  SANDBOX_TIMEOUT_BUFFER_MS,
120
120
  metadata: {
121
121
  ...CONCURRENT_SHARED_WORLD_PROVIDER_METADATA,
122
- labId: plan.labId,
122
+ labId: plan.studyId,
123
123
  topology: "shared-world",
124
124
  topologyMode: "concurrent",
125
125
  kind: "subject",
@@ -1,18 +1,18 @@
1
- import { type ConcurrentSharedWorldLabErrorCode, type ConcurrentSharedWorldLabResult, type FinishFacts, type LiveParticipants, type PlaneContext, type PlaneResults } from "./types.js";
1
+ import { type ConcurrentSharedWorldStudyErrorCode, type ConcurrentSharedWorldStudyResult, type FinishFacts, type LiveParticipants, type PlaneContext, type PlaneResults } from "./types.js";
2
2
  /** The results of a run whose plane did not run (a dry run) or has not reported yet. */
3
3
  export declare function emptyPlaneResults(): PlaneResults;
4
4
  /**
5
5
  * The refusal envelope for a run that stops before it has results: the requested cwd, no roles,
6
6
  * and the run id the caller asked for, if any. `actor` is the label when a refusal names none.
7
7
  */
8
- export declare function concurrentLabFailure(envelope: {
8
+ export declare function concurrentStudyFailure(envelope: {
9
9
  cwd: string;
10
- labId: string;
10
+ studyId: string;
11
11
  actor: string;
12
12
  participantCount: number;
13
13
  concurrency: number;
14
14
  dryRun: boolean;
15
15
  runId: string | undefined;
16
- }): (code: ConcurrentSharedWorldLabErrorCode, message: string, actorLabel?: string) => ConcurrentSharedWorldLabResult;
17
- /** Builds and publishes the bundle, renders the Observer and returns the lab result. */
18
- export declare function finishConcurrentRun(ctx: PlaneContext, live: LiveParticipants, results: PlaneResults, plane: FinishFacts): Promise<ConcurrentSharedWorldLabResult>;
16
+ }): (code: ConcurrentSharedWorldStudyErrorCode, message: string, actorLabel?: string) => ConcurrentSharedWorldStudyResult;
17
+ /** Builds and publishes the bundle, renders the Observer and returns the study result. */
18
+ export declare function finishConcurrentRun(ctx: PlaneContext, live: LiveParticipants, results: PlaneResults, plane: FinishFacts): Promise<ConcurrentSharedWorldStudyResult>;
@@ -1,7 +1,7 @@
1
1
  // Finishing a concurrent shared-world run: publishing its bundle, rendering the Observer, and the
2
- // lab result with each role's outcome and the one error a run that did not pass reports.
2
+ // study result with each role's outcome and the one error a run that did not pass reports.
3
3
  import { redactText } from "../../evidence/redaction.js";
4
- import { adapterScoreFailureMessage, applyBrowserScorer } from "../../lab/adapter-extension.js";
4
+ import { adapterScoreFailureMessage, applyBrowserScorer } from "../../study/adapter-extension.js";
5
5
  import { attachObserverRuntimeStreamUrls } from "../../observer/render.js";
6
6
  import { foldScorerFailures, judgeExecution, sandboxCleanupFailure, OUTCOME_POLICIES, participantHarnessFailed, resultOk, sharedWorldShortfall, } from "../../run/judge.js";
7
7
  import { participantFactsOf, unreleasedSandboxFailures, } from "../computer-use/participant-facts.js";
@@ -11,6 +11,7 @@ import { planeStateOf } from "./plan.js";
11
11
  import { buildSubjectProvenance, hostOriginDigest } from "./provenance.js";
12
12
  import {} from "./types.js";
13
13
  import { studyResultIdentity } from "../../run/study-result.js";
14
+ import { plural } from "../../run/text.js";
14
15
  /** The results of a run whose plane did not run (a dry run) or has not reported yet. */
15
16
  export function emptyPlaneResults() {
16
17
  return {
@@ -81,7 +82,7 @@ function concurrentParticipantResults(actorSpecs, actorResults, dryRun) {
81
82
  });
82
83
  }
83
84
  /** The error a run that did not pass reports, most specific cause first. */
84
- function concurrentLabError(args) {
85
+ function concurrentStudyError(args) {
85
86
  const { ok, handoffTimedOut, hostHandoffFailure, observer, runError, adapterFailure } = args;
86
87
  const { participantResults, participantCount } = args;
87
88
  if (ok)
@@ -134,16 +135,16 @@ function concurrentLabError(args) {
134
135
  }
135
136
  return {
136
137
  code: "HUMANISH_SHARED_WORLD_FAILED",
137
- message: `Concurrent shared-world run did not run coherently: ${passed}/${participantCount} actor(s) reached a terminal, engaged passed session.`,
138
+ message: `Concurrent shared-world run did not run coherently: ${passed}/${plural(participantCount, "actor")} reached a terminal, engaged passed session.`,
138
139
  };
139
140
  }
140
141
  /**
141
142
  * The refusal envelope for a run that stops before it has results: the requested cwd, no roles,
142
143
  * and the run id the caller asked for, if any. `actor` is the label when a refusal names none.
143
144
  */
144
- export function concurrentLabFailure(envelope) {
145
+ export function concurrentStudyFailure(envelope) {
145
146
  return (code, message, actorLabel) => ({
146
- ...studyResultIdentity("shared-world", envelope.labId),
147
+ ...studyResultIdentity("shared-world", envelope.studyId),
147
148
  ok: false,
148
149
  cwd: envelope.cwd,
149
150
  actor: actorLabel ?? envelope.actor,
@@ -204,7 +205,7 @@ function sharedWorldExecutionFailures(args) {
204
205
  ]),
205
206
  ];
206
207
  }
207
- /** Builds and publishes the bundle, renders the Observer and returns the lab result. */
208
+ /** Builds and publishes the bundle, renders the Observer and returns the study result. */
208
209
  export async function finishConcurrentRun(ctx, live, results, plane) {
209
210
  const { plan, input, descriptor, actorSpecs, run, runId } = ctx;
210
211
  const participantCount = plan.plane.participants.length;
@@ -268,7 +269,7 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
268
269
  context: {
269
270
  bundle,
270
271
  runDir: physicalArtifactRoot,
271
- labId: plan.labId,
272
+ studyId: plan.studyId,
272
273
  runId,
273
274
  actor: descriptor.id,
274
275
  route: "shared-world",
@@ -298,7 +299,7 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
298
299
  const ok = resultOk({ judgment, execution, scorerFailures: scorerResult.failures, policy });
299
300
  const overlapProven = !dryRun && judgment.world.overlap;
300
301
  const participantResults = concurrentParticipantResults(actorSpecs, actorResults, dryRun);
301
- const errorResult = concurrentLabError({
302
+ const errorResult = concurrentStudyError({
302
303
  ok,
303
304
  handoffTimedOut,
304
305
  hostHandoffFailure,
@@ -311,7 +312,7 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
311
312
  executionFailure: execution.failures[0]?.message,
312
313
  });
313
314
  const result = {
314
- ...studyResultIdentity("shared-world", plan.labId),
315
+ ...studyResultIdentity("shared-world", plan.studyId),
315
316
  ok,
316
317
  cwd,
317
318
  actor: descriptor.id,
@@ -1,21 +1,21 @@
1
1
  import { type SharedWorldRefusal } from "./plan.js";
2
- import type { SharedWorldPlan } from "../../lab/plan-types.js";
3
- import type { AdmittedPlan } from "../../run-lab.js";
4
- import type { LabConfig } from "../../lab/types.js";
5
- import { type ConcurrentSharedWorldLabResult, type SharedWorldRunInput, type RunConcurrentSharedWorldLabOptions } from "./types.js";
2
+ import type { SharedWorldPlan } from "../../study/plan-types.js";
3
+ import type { AdmittedPlan } from "../../run-study.js";
4
+ import type { StudyConfig } from "../../study/types.js";
5
+ import { type ConcurrentSharedWorldStudyResult, type SharedWorldRunInput, type RunConcurrentSharedWorldStudyOptions } from "./types.js";
6
6
  /**
7
- * The library entry for a shared-world lab. It plans the config with planSharedWorldLab and runs
7
+ * The library entry for a shared-world study. It plans the config with planSharedWorldStudy and runs
8
8
  * the plan with runSharedWorldPlan, whose run scope and withTransientCommsSecrets wrapper cover the
9
9
  * run and its analysis.
10
10
  */
11
- export declare function runConcurrentSharedWorld(options: RunConcurrentSharedWorldLabOptions): Promise<ConcurrentSharedWorldLabResult>;
12
- /** A refused shared-world lab's result: the route's envelope, and a refusal's analysis record. */
13
- export declare function sharedWorldLabRefusal(options: RunConcurrentSharedWorldLabOptions, refusal: SharedWorldRefusal): Promise<ConcurrentSharedWorldLabResult>;
11
+ export declare function runConcurrentSharedWorld(options: RunConcurrentSharedWorldStudyOptions): Promise<ConcurrentSharedWorldStudyResult>;
12
+ /** A refused shared-world study's result: the route's envelope, and a refusal's analysis record. */
13
+ export declare function sharedWorldStudyRefusal(options: RunConcurrentSharedWorldStudyOptions, refusal: SharedWorldRefusal): Promise<ConcurrentSharedWorldStudyResult>;
14
14
  /**
15
- * runLab's step for a shared-world plan. It runs a live plan's local checks (the keys, a local
15
+ * runStudyWith's step for a shared-world plan. It runs a live plan's local checks (the keys, a local
16
16
  * agent's sign-in and the subject env) before any run scope opens, so the CLI can present their refusal before it loads a
17
17
  * declared scorer, and returns the run that continues from them with that scorer.
18
18
  */
19
- export declare function admitSharedWorldPlan(plan: SharedWorldPlan, input: SharedWorldRunInput, config: LabConfig): Promise<AdmittedPlan<"shared-world">>;
19
+ export declare function admitSharedWorldPlan(plan: SharedWorldPlan, input: SharedWorldRunInput, config: StudyConfig): Promise<AdmittedPlan<"shared-world">>;
20
20
  /** Run a shared-world plan: its local checks, then the run. */
21
- export declare function runSharedWorldPlan(plan: SharedWorldPlan, input: SharedWorldRunInput, config: LabConfig): Promise<ConcurrentSharedWorldLabResult>;
21
+ export declare function runSharedWorldPlan(plan: SharedWorldPlan, input: SharedWorldRunInput, config: StudyConfig): Promise<ConcurrentSharedWorldStudyResult>;
@@ -1,4 +1,4 @@
1
- // The concurrent shared-world lab route: N persona participants drive one shared,
1
+ // The concurrent shared-world route: N persona participants drive one shared,
2
2
  // mutable service plane at the same time. A recomposition of shipped
3
3
  // pieces + the getHost wrapper:
4
4
  //
@@ -33,7 +33,7 @@
33
33
  // requires the author attestation subject.exposure: synthetic. This is author-trust + a provenance
34
34
  // gate; humanish cannot tell synthetic from real data, so it makes no claim about real data.
35
35
  import path from "node:path";
36
- import { missingKeys, missingSubjectEnv } from "../../lab/requirements.js";
36
+ import { missingKeys, missingSubjectEnv } from "../../study/requirements.js";
37
37
  import { completeAutomaticAnalysis } from "../../analysis/automatic-completion.js";
38
38
  import { resolveAutomaticAnalysis } from "../../analysis/automatic-config.js";
39
39
  import { scrubLiterals } from "../../evidence/redaction.js";
@@ -42,15 +42,15 @@ import { withTransientCommsSecrets } from "../../run/transient-comms-secrets.js"
42
42
  import { runScope } from "../../run/run.js";
43
43
  import { makeCuaRunBudget } from "../computer-use/participant-model.js";
44
44
  import { runExternalPublicPlane } from "./external-public.js";
45
- import { planSharedWorldLab, sharedWorldDescriptorOf } from "./plan.js";
45
+ import { planSharedWorldStudy, sharedWorldDescriptorOf } from "./plan.js";
46
46
  import { localAgentRefusal } from "../../actors/local-agent/readiness.js";
47
47
  import { runProvisionedPlane } from "./provisioned.js";
48
- import { concurrentLabFailure, finishConcurrentRun } from "./result.js";
48
+ import { concurrentStudyFailure, finishConcurrentRun } from "./result.js";
49
49
  import { prepareConcurrentRun } from "./setup.js";
50
- import { browserRouteScorer } from "../../lab/adapter-scorer-loader.js";
51
- import { withLateScorer } from "../../lab/route-inputs.js";
50
+ import { browserRouteScorer } from "../../study/adapter-scorer-loader.js";
51
+ import { withLateScorer } from "../../study/route-inputs.js";
52
52
  import {} from "./types.js";
53
- import { rosterOf } from "../../lab/parse/actors.js";
53
+ import { rosterOf } from "../../study/parse/actors.js";
54
54
  /** The shared-world code for each local-agent refusal, kind for kind with computer-use. */
55
55
  const LOCAL_AGENT_REFUSAL_CODES = {
56
56
  "agent-missing": "HUMANISH_SHARED_WORLD_AGENT_MISSING",
@@ -59,28 +59,28 @@ const LOCAL_AGENT_REFUSAL_CODES = {
59
59
  "unpriced-cap": "HUMANISH_SHARED_WORLD_UNPRICED_CAP",
60
60
  };
61
61
  /**
62
- * The library entry for a shared-world lab. It plans the config with planSharedWorldLab and runs
62
+ * The library entry for a shared-world study. It plans the config with planSharedWorldStudy and runs
63
63
  * the plan with runSharedWorldPlan, whose run scope and withTransientCommsSecrets wrapper cover the
64
64
  * run and its analysis.
65
65
  */
66
66
  export async function runConcurrentSharedWorld(options) {
67
67
  const { config, dryRun, ...input } = options;
68
- // planSharedWorldLab makes every configuration refusal, in the order this route always has.
69
- const planned = planSharedWorldLab(config, {
68
+ // planSharedWorldStudy makes every configuration refusal, in the order this route always has.
69
+ const planned = planSharedWorldStudy(config, {
70
70
  dryRun,
71
71
  hasRunSession: input.deps?.runSession !== undefined,
72
72
  });
73
73
  if (planned.ok)
74
74
  return runSharedWorldPlan(planned.plan, input, config);
75
- return sharedWorldLabRefusal(options, planned.refusal);
75
+ return sharedWorldStudyRefusal(options, planned.refusal);
76
76
  }
77
- /** A refused shared-world lab's result: the route's envelope, and a refusal's analysis record. */
78
- export function sharedWorldLabRefusal(options, refusal) {
77
+ /** A refused shared-world study's result: the route's envelope, and a refusal's analysis record. */
78
+ export function sharedWorldStudyRefusal(options, refusal) {
79
79
  const { config, dryRun } = options;
80
80
  const declared = rosterOf(config.actors[0]) ?? [];
81
- const fail = concurrentLabFailure({
81
+ const fail = concurrentStudyFailure({
82
82
  cwd: path.resolve(options.cwd),
83
- labId: config.id,
83
+ studyId: config.id,
84
84
  actor: config.actors[0]?.type ?? "",
85
85
  participantCount: declared.length,
86
86
  // The parser fills concurrency for multi-participant studies, so this fallback serves only
@@ -94,7 +94,7 @@ export function sharedWorldLabRefusal(options, refusal) {
94
94
  return completeAutomaticAnalysis(fail(refusal.code, refusal.message, refusal.actor), undefined, analysis.ok ? analysis.config : undefined, options, { trigger: config.review?.analysis === undefined ? "default" : "explicit" });
95
95
  }
96
96
  /**
97
- * runLab's step for a shared-world plan. It runs a live plan's local checks (the keys, a local
97
+ * runStudyWith's step for a shared-world plan. It runs a live plan's local checks (the keys, a local
98
98
  * agent's sign-in and the subject env) before any run scope opens, so the CLI can present their refusal before it loads a
99
99
  * declared scorer, and returns the run that continues from them with that scorer.
100
100
  */
@@ -130,7 +130,7 @@ async function admitSharedWorldRun(plan, input) {
130
130
  // agent instead.
131
131
  const missing = missingKeys(plan.requirements, env);
132
132
  if (missing.length > 0) {
133
- return fail("HUMANISH_SHARED_WORLD_KEYS_MISSING", `Live concurrent shared-world labs need ${missing.join(" and ")} in the environment (values are never persisted). ${describeMissingKeys(missing, env)}`);
133
+ return fail("HUMANISH_SHARED_WORLD_KEYS_MISSING", `Live concurrent shared-world studies need ${missing.join(" and ")} in the environment (values are never persisted). ${describeMissingKeys(missing, env)}`);
134
134
  }
135
135
  if (plan.brain.kind === "local-agent") {
136
136
  // A missing or signed-out agent found after the participants' desktops are paid for is the same
@@ -164,9 +164,9 @@ function completeSharedWorldAnalysis(plan, input, result, finished) {
164
164
  }
165
165
  /** The route's envelope for a run that stops before its bundle. */
166
166
  function sharedWorldFailure(plan, input) {
167
- return concurrentLabFailure({
167
+ return concurrentStudyFailure({
168
168
  cwd: path.resolve(input.cwd),
169
- labId: plan.labId,
169
+ studyId: plan.studyId,
170
170
  actor: plan.actor,
171
171
  participantCount: plan.plane.participants.length,
172
172
  concurrency: plan.concurrency,
@@ -1,43 +1,43 @@
1
1
  import type { CuaActorDescriptor } from "../../actors/registry.js";
2
- import type { LabConfig, LabSubjectServe, LabSubjectStateCheckpoint } from "../../lab/types.js";
2
+ import type { StudyConfig, StudySubjectServe, StudySubjectStateCheckpoint } from "../../study/types.js";
3
3
  import type { RunScope } from "../../run/run.js";
4
- import type { ConcurrentSharedWorldLabErrorCode, ConcurrentSharedWorldLabResult, ConcurrentSharedWorldPlaneClass, FinishFacts, LiveParticipants, PlaneContext, PlaneResults, PlaneSelection, SharedWorldRunInput } from "./types.js";
5
- import type { LabDeps } from "../../lab/lab-deps.js";
6
- import type { SharedWorldPlan } from "../../lab/plan-types.js";
7
- /** What validation derived from the lab, which setup reads. */
8
- interface AdmittedLab {
4
+ import type { ConcurrentSharedWorldStudyErrorCode, ConcurrentSharedWorldStudyResult, ConcurrentSharedWorldPlaneClass, FinishFacts, LiveParticipants, PlaneContext, PlaneResults, PlaneSelection, SharedWorldRunInput } from "./types.js";
5
+ import type { StudyDeps } from "../../study/study-deps.js";
6
+ import type { SharedWorldPlan } from "../../study/plan-types.js";
7
+ /** What validation derived from the study, which setup reads. */
8
+ interface AdmittedStudy {
9
9
  plan: SharedWorldPlan;
10
10
  input: SharedWorldRunInput;
11
11
  /** Read for the subject's serve URL, which each participant's subject names. Participants, their
12
12
  * count and their host and entry come from the plan's participants. */
13
- config: LabConfig;
13
+ config: StudyConfig;
14
14
  requestedCwd: string;
15
- deps: LabDeps;
15
+ deps: StudyDeps;
16
16
  env: Record<string, string | undefined>;
17
17
  descriptor: CuaActorDescriptor;
18
18
  planeClass: ConcurrentSharedWorldPlaneClass;
19
19
  runBudget: PlaneContext["runBudget"];
20
20
  runSession: PlaneContext["runSession"];
21
- serve: LabSubjectServe | undefined;
21
+ serve: StudySubjectServe | undefined;
22
22
  localTreeRoute: boolean;
23
23
  subjectRepo: string;
24
24
  subjectEnvNames: string[];
25
- checkpoints: LabSubjectStateCheckpoint[];
25
+ checkpoints: StudySubjectStateCheckpoint[];
26
26
  openaiApiKey: string;
27
27
  e2bApiKey: string;
28
28
  knownSecretValues: string[];
29
29
  scrubKnownValues: (text: string) => string;
30
30
  publicRepo: string;
31
31
  hasGithubToken: boolean;
32
- fail: (code: ConcurrentSharedWorldLabErrorCode, message: string, actorLabel?: string) => ConcurrentSharedWorldLabResult;
32
+ fail: (code: ConcurrentSharedWorldStudyErrorCode, message: string, actorLabel?: string) => ConcurrentSharedWorldStudyResult;
33
33
  }
34
34
  /**
35
35
  * Starts the run and prepares what the planes read: the physical project, the run, the participant
36
36
  * specs, comms, the packed tree and email receiving. Returns the refusal when one of them fails.
37
37
  */
38
- export declare function prepareConcurrentRun(lab: AdmittedLab, scope: RunScope): Promise<{
38
+ export declare function prepareConcurrentRun(study: AdmittedStudy, scope: RunScope): Promise<{
39
39
  ok: false;
40
- result: ConcurrentSharedWorldLabResult;
40
+ result: ConcurrentSharedWorldStudyResult;
41
41
  } | {
42
42
  ok: true;
43
43
  ctx: PlaneContext;
@@ -19,19 +19,19 @@ function makeRunId() {
19
19
  const stamp = new Date().toISOString().replace(/[:.]/g, "-");
20
20
  return `concurrent-shared-world-${stamp}-${randomBytes(4).toString("hex")}`;
21
21
  }
22
- /** The provisioned plane's setup, or undefined when the lab declares no `subject.serve`. */
23
- function provisionedSetup(lab, prepared) {
24
- if (!lab.serve)
22
+ /** The provisioned plane's setup, or undefined when the study declares no `subject.serve`. */
23
+ function provisionedSetup(study, prepared) {
24
+ if (!study.serve)
25
25
  return undefined;
26
26
  const { subjectComms, ...rest } = prepared;
27
27
  return {
28
- serve: lab.serve,
29
- localTreeRoute: lab.localTreeRoute,
30
- subjectRepo: lab.subjectRepo,
31
- publicRepo: lab.publicRepo,
32
- subjectEnvNames: lab.subjectEnvNames,
33
- hasGithubToken: lab.hasGithubToken,
34
- checkpoints: lab.checkpoints,
28
+ serve: study.serve,
29
+ localTreeRoute: study.localTreeRoute,
30
+ subjectRepo: study.subjectRepo,
31
+ publicRepo: study.publicRepo,
32
+ subjectEnvNames: study.subjectEnvNames,
33
+ hasGithubToken: study.hasGithubToken,
34
+ checkpoints: study.checkpoints,
35
35
  commsEmail: subjectComms.email,
36
36
  commsPort: subjectComms.port,
37
37
  commsEnv: subjectComms.env,
@@ -48,14 +48,14 @@ async function bindPhysicalProject(requestedCwd) {
48
48
  return (await prepareSelectedOutputDirectory(path.dirname(physicalCwd), physicalCwd))
49
49
  .physicalPath;
50
50
  }
51
- function startConcurrentRun(lab, cwd, scope) {
52
- const { plan, input, deps } = lab;
51
+ function startConcurrentRun(study, cwd, scope) {
52
+ const { plan, input, deps } = study;
53
53
  return scope.startRun({
54
54
  cwd,
55
55
  runId: input.runId,
56
56
  mintRunId: makeRunId,
57
57
  mode: plan.dryRun ? "dry-run" : "live",
58
- lab: plan.lab,
58
+ study: plan.study,
59
59
  renderReview: renderConcurrentReviewMarkdown,
60
60
  observer: { open: input.open === true, render: deps.renderObserver },
61
61
  });
@@ -64,10 +64,10 @@ function startConcurrentRun(lab, cwd, scope) {
64
64
  * Starts the run and prepares what the planes read: the physical project, the run, the participant
65
65
  * specs, comms, the packed tree and email receiving. Returns the refusal when one of them fails.
66
66
  */
67
- export async function prepareConcurrentRun(lab, scope) {
68
- const { plan, input, config, requestedCwd, deps, env, descriptor, planeClass, fail } = lab;
69
- const { runBudget, runSession, localTreeRoute, subjectEnvNames, publicRepo } = lab;
70
- const { openaiApiKey, e2bApiKey, knownSecretValues, scrubKnownValues } = lab;
67
+ export async function prepareConcurrentRun(study, scope) {
68
+ const { plan, input, config, requestedCwd, deps, env, descriptor, planeClass, fail } = study;
69
+ const { runBudget, runSession, localTreeRoute, subjectEnvNames, publicRepo } = study;
70
+ const { openaiApiKey, e2bApiKey, knownSecretValues, scrubKnownValues } = study;
71
71
  const { dryRun, concurrency } = plan;
72
72
  const cwd = await bindPhysicalProject(requestedCwd);
73
73
  const warnings = [];
@@ -90,7 +90,7 @@ export async function prepareConcurrentRun(lab, scope) {
90
90
  }
91
91
  const localTreeArchive = packed.archive;
92
92
  const localTreeArchiveBuffer = packed.buffer;
93
- const started = await startConcurrentRun(lab, cwd, scope);
93
+ const started = await startConcurrentRun(study, cwd, scope);
94
94
  if (!started.ok)
95
95
  return { ok: false, result: fail(started.code, started.message, descriptor.id) };
96
96
  const { run } = started;
@@ -169,7 +169,7 @@ export async function prepareConcurrentRun(lab, scope) {
169
169
  receiving,
170
170
  warnings,
171
171
  };
172
- const provisioned = provisionedSetup(lab, {
172
+ const provisioned = provisionedSetup(study, {
173
173
  localTreeArchive,
174
174
  localTreeArchiveBuffer,
175
175
  subjectComms,