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
@@ -2,7 +2,7 @@ import type { RunSubjectProvenance } from "../../run/bundle.js";
2
2
  import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
3
3
  /** Extract the in-sandbox port from the (loopback) serve.url so getHost can expose it. */
4
4
  export declare function servePort(serveUrl: string): number;
5
- /** A getHost URL must be tokenless (no userinfo and no query, so no authKey; invariant 1). */
5
+ /** A getHost URL must be tokenless (no userinfo and no query, so no authKey reaches evidence). */
6
6
  export declare function isTokenlessHost(value: string): boolean;
7
7
  /** sha256-16 of a URL's origin: the publish-safe host identity persisted in the bundle (the raw
8
8
  * getHost URL embeds the live sandbox id + matches the e2b-URL redaction, so it never lands raw). */
@@ -11,7 +11,7 @@ export declare function hostOriginDigest(url: string): string;
11
11
  * entry path kept). Never contains the raw getHost URL. */
12
12
  export declare function publicSafeRouteLabel(entry: string | undefined): string;
13
13
  /**
14
- * Build the one subject sandbox's provenance (invariant 5): clone (repo + optional commit) or
14
+ * Build the one subject sandbox's provenance: clone (repo + optional commit) or
15
15
  * local-tree (archiveSha256 + optional commit/dirty from the once-per-run host-packed archive -
16
16
  * archiveSha256 is the pin; there is only one archive, so no per-participant unanimity math applies,
17
17
  * unlike the cua fan-out route). Used for both the in-progress and final bundle: the archive
@@ -8,7 +8,7 @@ export function servePort(serveUrl) {
8
8
  return Number(url.port);
9
9
  return url.protocol === "https:" ? 443 : 80;
10
10
  }
11
- /** A getHost URL must be tokenless (no userinfo and no query, so no authKey; invariant 1). */
11
+ /** A getHost URL must be tokenless (no userinfo and no query, so no authKey reaches evidence). */
12
12
  export function isTokenlessHost(value) {
13
13
  try {
14
14
  const url = new URL(value);
@@ -34,7 +34,7 @@ export function publicSafeRouteLabel(entry) {
34
34
  return `[provisioned-subject]${entry ?? "/"}`;
35
35
  }
36
36
  /**
37
- * Build the one subject sandbox's provenance (invariant 5): clone (repo + optional commit) or
37
+ * Build the one subject sandbox's provenance: clone (repo + optional commit) or
38
38
  * local-tree (archiveSha256 + optional commit/dirty from the once-per-run host-packed archive -
39
39
  * archiveSha256 is the pin; there is only one archive, so no per-participant unanimity math applies,
40
40
  * unlike the cua fan-out route). Used for both the in-progress and final bundle: the archive
@@ -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;
@@ -1,7 +1,7 @@
1
1
  // The provisioned-getHost plane: the harness provisions one subject sandbox (clone or local-tree,
2
2
  // install/build, seed, serve on 0.0.0.0), exposes it through getHost, probes its state on a
3
- // cadence, and runs every seat against that one shared plane. All sandboxes are torn down by exact
4
- // id in the plane's finally, never through Sandbox.list.
3
+ // cadence, and runs every participant against that one shared plane. All sandboxes are torn down by
4
+ // exact id in the plane's finally, never through Sandbox.list.
5
5
  import { buildOriginMap } from "../../comms/capture-surface.js";
6
6
  import { deployCommsCatch, refreshInboxSurface, writeInboxSurface, } from "../../comms/sandbox-catch.js";
7
7
  import { redactText, toErrorMessage } from "../../evidence/redaction.js";
@@ -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
@@ -59,8 +59,8 @@ class SubjectPlane {
59
59
  subjectAllocation;
60
60
  subjectDesktop;
61
61
  subjectShell;
62
- // The in-sandbox email catch on the one subject sandbox (#297); drained at teardown. Undefined
63
- // unless a comms lab declared it.
62
+ // The in-sandbox email catch on the one subject sandbox; drained at teardown. Undefined
63
+ // unless a comms study declared it.
64
64
  deployedComms;
65
65
  // Background prober dispose signal, cleared in teardown.
66
66
  proberDisposed = false;
@@ -68,7 +68,7 @@ class SubjectPlane {
68
68
  disposeSignal;
69
69
  proberLoop;
70
70
  snapshotIndex = 0;
71
- // Persona inbox surface (#297 slice B, shared-world): the serve->getHost origin-rewrite map
71
+ // Persona inbox surface: the serve->getHost origin-rewrite map
72
72
  // (required here so the app's loopback verify links resolve to a reachable host), and the
73
73
  // dedicated surface render loop.
74
74
  commsOriginMap = [];
@@ -103,8 +103,8 @@ class SubjectPlane {
103
103
  const { plan, deps, env, requestTimeoutMs, timeoutMs } = this.ctx;
104
104
  const { subjectEnvNames, commsEnv } = this.setup;
105
105
  const subjectModule = await (deps.desktopModule ?? loadE2BDesktopModule)();
106
- // The one subject sandbox: headless service host (no GUI seat). The subject env is provisioned
107
- // here; the actor sandboxes get none of it. A custom desktop template (image) is
106
+ // The one subject sandbox: headless service host (no GUI participant). The subject env is
107
+ // provisioned here; the actor sandboxes get none of it. A custom desktop template (image) is
108
108
  // honored on both the subject sandbox (here) and every actor sandbox (via runCuaParticipant, which
109
109
  // reads the same config); absent keeps the byte-stable Sandbox.create(opts) default. The
110
110
  // receipt is on disk before any work, so `humanish reclaim` can kill it by exact id.
@@ -119,11 +119,11 @@ 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
- role: "subject",
126
- roleCount: String(plan.plane.participants.length),
125
+ kind: "subject",
126
+ participantCount: String(plan.plane.participants.length),
127
127
  },
128
128
  ...(subjectEnvNames.length > 0 || Object.keys(commsEnv).length > 0
129
129
  ? {
@@ -228,7 +228,7 @@ class SubjectPlane {
228
228
  }
229
229
  this.getHostUrl = hostUrl;
230
230
  }
231
- // Persona inbox surface (#297 slice B, shared-world): getHost-expose the read-only inbox listener so
231
+ // Persona inbox surface: getHost-expose the read-only inbox listener so
232
232
  // a persona in another sandbox can open it; build the serve->getHost origin map (required here:
233
233
  // the app's loopback verify links must be rewritten to a reachable host); provision the surface
234
234
  // channel; write the empty inbox up front (so /inbox never 404s); and start a render loop that drains
@@ -263,7 +263,7 @@ class SubjectPlane {
263
263
  const surfaceCadenceMs = 2500;
264
264
  this.surfaceLoop = (async () => {
265
265
  // Full, idempotent rebuild each tick; surfaceRenderedCount advances only on a successful render,
266
- // so a transient failure retries cleanly. Real timer (dispose-interruptible + cleared) — an
266
+ // so a transient failure retries cleanly. Real timer (dispose-interruptible + cleared): an
267
267
  // unbounded loop must not busy-spin on the injected instant clock.
268
268
  for (;;) {
269
269
  try {
@@ -327,7 +327,7 @@ class SubjectPlane {
327
327
  await this.proberLoop.catch(() => undefined);
328
328
  }
329
329
  // Stop the inbox-surface render loop too (shares the prober's dispose signal), before the teardown
330
- // evidence drain below — so the two in-sandbox reads never overlap and the surface state is final.
330
+ // evidence drain below, so the two in-sandbox reads never overlap and the surface state is final.
331
331
  if (this.surfaceLoop) {
332
332
  await this.surfaceLoop.catch(() => undefined);
333
333
  }
@@ -370,7 +370,8 @@ class SubjectPlane {
370
370
  };
371
371
  }
372
372
  }
373
- /** Writes the in-progress bundle, runs the caller's Observer gate and starts the seat flush. */
373
+ /** Writes the in-progress bundle, runs the caller's Observer gate and starts the participants'
374
+ * flush. */
374
375
  async function publishInProgress(plane, ctx, live, setup) {
375
376
  const { plan, input } = ctx;
376
377
  const { localTreeRoute, localTreeArchive } = setup;
@@ -435,7 +436,7 @@ function runParticipants(plane, ctx, live, setup) {
435
436
  // Tell this persona its (getHost-reachable) inbox URL, but only when comms is live and this participant
436
437
  // has a declared recipient it can actually receive mail into (else it would stall on an empty
437
438
  // inbox). Only the in-sandbox catch exists on this plane; the adopter-hosted catch is the
438
- // external-public plane's (#387).
439
+ // external-public plane's.
439
440
  const actorSpec = commsEmail && plane.commsInboxUrl && participantHasInboxRecipient(commsEmail, spec.planned.id)
440
441
  ? withInboxMission(spec, plane.commsInboxUrl, inboxRecipientFor(commsEmail, spec.planned.id)?.address)
441
442
  : spec;
@@ -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";
@@ -9,7 +9,9 @@ import { resolveSubjectState } from "../computer-use/subject-projection.js";
9
9
  import { actorRunPassed, buildConcurrentSharedWorldBundle, judgeSharedWorldRun, maxSimultaneousWindows, } from "./bundle.js";
10
10
  import { planeStateOf } from "./plan.js";
11
11
  import { buildSubjectProvenance, hostOriginDigest } from "./provenance.js";
12
- import { CONCURRENT_SHARED_WORLD_LAB_SCHEMA, } from "./types.js";
12
+ import {} from "./types.js";
13
+ import { studyResultIdentity } from "../../run/study-result.js";
14
+ import { plural } from "../../run/text.js";
13
15
  /** The results of a run whose plane did not run (a dry run) or has not reported yet. */
14
16
  export function emptyPlaneResults() {
15
17
  return {
@@ -65,7 +67,7 @@ function concurrentParticipantResults(actorSpecs, actorResults, dryRun) {
65
67
  ? {}
66
68
  : {
67
69
  error: {
68
- code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED",
70
+ code: "HUMANISH_SHARED_WORLD_FAILED",
69
71
  message: result.outcome.sessionError ??
70
72
  (result.outcome.noEngagement
71
73
  ? "Actor took no actions and produced no message (likely a blank/still-loading screen); not a credible goal_satisfied."
@@ -80,7 +82,7 @@ function concurrentParticipantResults(actorSpecs, actorResults, dryRun) {
80
82
  });
81
83
  }
82
84
  /** The error a run that did not pass reports, most specific cause first. */
83
- function concurrentLabError(args) {
85
+ function concurrentStudyError(args) {
84
86
  const { ok, handoffTimedOut, hostHandoffFailure, observer, runError, adapterFailure } = args;
85
87
  const { participantResults, participantCount } = args;
86
88
  if (ok)
@@ -88,16 +90,16 @@ function concurrentLabError(args) {
88
90
  if (handoffTimedOut) {
89
91
  // Checked before the observer failure: the host never yielded a /lobby/CODE within the
90
92
  // deadline (followers failed closed without opening), which is the root cause, and it can
91
- // itself make the Observer unable to render a coherent run. Report the distinct, honest
93
+ // itself make the Observer unable to render a coherent run. Report the distinct
92
94
  // handoff-timeout code rather than a generic observer/run failure.
93
95
  return {
94
- code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_HANDOFF_TIMEOUT",
96
+ code: "HUMANISH_SHARED_WORLD_HANDOFF_TIMEOUT",
95
97
  message: runError ??
96
98
  "The host participant never produced a /lobby/CODE URL within the handoff deadline.",
97
99
  };
98
100
  }
99
101
  if (hostHandoffFailure !== undefined) {
100
- return { code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED", message: hostHandoffFailure };
102
+ return { code: "HUMANISH_SHARED_WORLD_FAILED", message: hostHandoffFailure };
101
103
  }
102
104
  // The run's own failure before the Observer's: a run that stopped early (a desktop module that
103
105
  // failed to load, a plane that failed to start) leaves a bundle verify then refuses, and naming
@@ -105,47 +107,46 @@ function concurrentLabError(args) {
105
107
  // evidence).
106
108
  if (runError) {
107
109
  return {
108
- code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED",
110
+ code: "HUMANISH_SHARED_WORLD_FAILED",
109
111
  message: observer.ok ? runError : `${runError} The run bundle it left failed verification.`,
110
112
  };
111
113
  }
112
114
  if (!observer.ok) {
113
115
  return {
114
- code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED",
116
+ code: "HUMANISH_SHARED_WORLD_FAILED",
115
117
  message: observer.error?.message ?? "Observer failed for the concurrent shared-world run.",
116
118
  };
117
119
  }
118
120
  if (adapterFailure !== undefined) {
119
- return { code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED", message: adapterFailure };
121
+ return { code: "HUMANISH_SHARED_WORLD_FAILED", message: adapterFailure };
120
122
  }
121
123
  const passed = participantResults.filter((result) => result.ok).length;
122
124
  if (passed === participantCount && args.shortfall !== undefined) {
123
125
  return {
124
- code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED",
126
+ code: "HUMANISH_SHARED_WORLD_FAILED",
125
127
  message: `Concurrent shared-world run did not run coherently. ${args.shortfall}`,
126
128
  };
127
129
  }
128
130
  if (passed === participantCount && args.executionFailure !== undefined) {
129
131
  return {
130
- code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED",
132
+ code: "HUMANISH_SHARED_WORLD_FAILED",
131
133
  message: `Concurrent shared-world run failed as an execution. ${args.executionFailure}`,
132
134
  };
133
135
  }
134
136
  return {
135
- code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED",
136
- message: `Concurrent shared-world run did not run coherently: ${passed}/${participantCount} actor(s) reached a terminal, engaged passed session.`,
137
+ code: "HUMANISH_SHARED_WORLD_FAILED",
138
+ message: `Concurrent shared-world run did not run coherently: ${passed}/${plural(participantCount, "actor")} reached a terminal, engaged passed session.`,
137
139
  };
138
140
  }
139
141
  /**
140
142
  * The refusal envelope for a run that stops before it has results: the requested cwd, no roles,
141
143
  * and the run id the caller asked for, if any. `actor` is the label when a refusal names none.
142
144
  */
143
- export function concurrentLabFailure(envelope) {
145
+ export function concurrentStudyFailure(envelope) {
144
146
  return (code, message, actorLabel) => ({
145
- schema: CONCURRENT_SHARED_WORLD_LAB_SCHEMA,
147
+ ...studyResultIdentity("shared-world", envelope.studyId),
146
148
  ok: false,
147
149
  cwd: envelope.cwd,
148
- labId: envelope.labId,
149
150
  actor: actorLabel ?? envelope.actor,
150
151
  topology: "shared-world",
151
152
  topologyMode: "concurrent",
@@ -159,10 +160,10 @@ export function concurrentLabFailure(envelope) {
159
160
  });
160
161
  }
161
162
  /**
162
- * The run's execution failures: a run error (the handoff, the plane), each seat whose session
163
- * failed in the harness, each provider whose cleanup is unconfirmed or that reported a disallowed
164
- * item after its last request, each sandbox whose release is unconfirmed, and an Observer that
165
- * failed.
163
+ * The run's execution failures: a run error (the handoff, the plane), each participant whose
164
+ * session failed in the harness, each provider whose cleanup is unconfirmed or that reported a
165
+ * disallowed item after its last request, each sandbox whose release is unconfirmed, and an
166
+ * Observer that failed.
166
167
  */
167
168
  function sharedWorldExecutionFailures(args) {
168
169
  const { runId, runError, actorResults, subject, observer } = args;
@@ -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",
@@ -288,8 +289,8 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
288
289
  if (observer.ok && live.observer) {
289
290
  attachObserverRuntimeStreamUrls(observer, live.streamUrls);
290
291
  }
291
- // Concurrent "ok": every actor must produce a terminal, engaged, passed session, and the seats
292
- // must show the concurrency verify requires of a pass (judgeSharedWorld). This is a
292
+ // Concurrent "ok": every actor must produce a terminal, engaged, passed session, and the
293
+ // participants must show the concurrency verify requires of a pass (judgeSharedWorld). This is a
293
294
  // harness/session-credibility gate, not mission-completion proof; a failed actor trace cannot
294
295
  // make the route green just because the harness got a terminal.
295
296
  const adapterFailure = adapterScoreFailureMessage(bundle);
@@ -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,10 +312,9 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
311
312
  executionFailure: execution.failures[0]?.message,
312
313
  });
313
314
  const result = {
314
- schema: CONCURRENT_SHARED_WORLD_LAB_SCHEMA,
315
+ ...studyResultIdentity("shared-world", plan.studyId),
315
316
  ok,
316
317
  cwd,
317
- labId: plan.labId,
318
318
  actor: descriptor.id,
319
319
  topology: "shared-world",
320
320
  topologyMode: "concurrent",
@@ -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,14 +1,14 @@
1
- // The concurrent shared-world lab backend (#164 phase 2): 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
  //
5
5
  // - One subject sandbox: provisionCloneSubject once (clone+install+build+seed) + serve on
6
6
  // 0.0.0.0, exposed via getHost(port) → a tokenless reachable URL (the headless service host;
7
- // no GUI seat).
7
+ // no GUI participant).
8
8
  // - N actor desktop sandboxes: fan-out's runCuaParticipant machinery (per-participant device/persona, by-id
9
- // teardown) bounded by execution.concurrency, each browser pointed at the getHost URL —
9
+ // teardown) bounded by execution.concurrency, each browser pointed at the getHost URL and
10
10
  // driving the shared service at the same time. Independent: no pipeline gate, no
11
- // fail-fast — one actor's failure must not block the swarm or corrupt the "M of N" outcomes.
11
+ // fail-fast: one actor's failure must not block the swarm or corrupt the "M of N" outcomes.
12
12
  // - A background prober snapshots the subject DB checkpoint digests on a cadence → a stateSeries
13
13
  // of the shared world evolving under load.
14
14
  // - All N+1 sandboxes torn down by exact id in a finally, never through Sandbox.list.
@@ -20,10 +20,10 @@
20
20
  // `best-effort-causal-attribution`, `non-deterministic-shared-state`,
21
21
  // `window-and-snapshot-granularity`, `contention-observed-not-proven-safe`,
22
22
  // `state-change-not-isolated-to-actors`. laneWindows + stateSeries are independent series with no
23
- // per-delta→actor field — causation under concurrency is structurally inexpressible.
23
+ // per-delta→actor field, so causation under concurrency is structurally inexpressible.
24
24
  //
25
- // Capability and proof: the deterministic $0 gate proves the plumbing + the honesty
26
- // contract — the real mapWithConcurrency produces genuinely overlapping laneWindows (a rendezvous
25
+ // Capability and proof: the deterministic $0 gate proves the plumbing + the claims-match-mechanism
26
+ // contract: the real mapWithConcurrency produces genuinely overlapping laneWindows (a rendezvous
27
27
  // latch in the fake session forces two participant fns in-flight while the real orchestrator clock
28
28
  // measures the windows). Every generated bundle describes only its own observations; no one run
29
29
  // establishes scale, repeatability, or adopter-harness replacement.
@@ -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,49 +42,49 @@ 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
- "agent-missing": "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_AGENT_MISSING",
57
- "signin-required": "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_AGENT_SIGNIN_REQUIRED",
58
- unsupported: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_ACTOR_UNSUPPORTED",
59
- "unpriced-cap": "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_UNPRICED_CAP",
56
+ "agent-missing": "HUMANISH_SHARED_WORLD_AGENT_MISSING",
57
+ "signin-required": "HUMANISH_SHARED_WORLD_AGENT_SIGNIN_REQUIRED",
58
+ unsupported: "HUMANISH_SHARED_WORLD_ACTOR_UNSUPPORTED",
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
- // The parser fills concurrency for multi-seat labs, so this fallback serves only library
87
- // callers: every declared seat runs at once unless the author declared a cap (#350).
86
+ // The parser fills concurrency for multi-participant studies, so this fallback serves only
87
+ // library callers: every declared participant runs at once unless the author declared a cap.
88
88
  concurrency: config.execution?.concurrency ?? Math.max(1, declared.length),
89
89
  dryRun,
90
90
  runId: options.runId,
@@ -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
  */
@@ -125,14 +125,15 @@ async function admitSharedWorldRun(plan, input) {
125
125
  return undefined;
126
126
  const env = input.env ?? process.env;
127
127
  const fail = (code, message) => completeSharedWorldAnalysis(plan, input, sharedWorldFailure(plan, input)(code, message, sharedWorldDescriptorOf(plan.actor).id), undefined);
128
- // The plan lists OPENAI_API_KEY for an openai brain's seats and the external-public plane's
129
- // lobby-code reader; a local-agent brain's seats run on the operator's signed-in agent instead.
128
+ // The plan lists OPENAI_API_KEY for an openai brain's participants and the external-public
129
+ // plane's lobby-code reader; a local-agent brain's participants run on the operator's signed-in
130
+ // agent instead.
130
131
  const missing = missingKeys(plan.requirements, env);
131
132
  if (missing.length > 0) {
132
- return fail("HUMANISH_CONCURRENT_SHARED_WORLD_LAB_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)}`);
133
134
  }
134
135
  if (plan.brain.kind === "local-agent") {
135
- // A missing or signed-out agent found after the seats' desktops are paid for is the same
136
+ // A missing or signed-out agent found after the participants' desktops are paid for is the same
136
137
  // news at the worst moment.
137
138
  const refusal = await localAgentRefusal({ agent: plan.brain.agent, env, caps: plan.caps });
138
139
  if (refusal)
@@ -140,7 +141,7 @@ async function admitSharedWorldRun(plan, input) {
140
141
  }
141
142
  const unsetSubjectEnv = missingSubjectEnv(plan.requirements, env);
142
143
  if (unsetSubjectEnv.length > 0) {
143
- return fail("HUMANISH_CONCURRENT_SHARED_WORLD_LAB_SUBJECT_ENV_MISSING", `subject.env declares ${unsetSubjectEnv.join(", ")} but the environment does not provide ${unsetSubjectEnv.length === 1 ? "it" : "them"} (pass via --env-file; values are never persisted).`);
144
+ return fail("HUMANISH_SHARED_WORLD_SUBJECT_ENV_MISSING", `subject.env declares ${unsetSubjectEnv.join(", ")} but the environment does not provide ${unsetSubjectEnv.length === 1 ? "it" : "them"} (pass via --env-file; values are never persisted).`);
144
145
  }
145
146
  return undefined;
146
147
  }
@@ -163,9 +164,9 @@ function completeSharedWorldAnalysis(plan, input, result, finished) {
163
164
  }
164
165
  /** The route's envelope for a run that stops before its bundle. */
165
166
  function sharedWorldFailure(plan, input) {
166
- return concurrentLabFailure({
167
+ return concurrentStudyFailure({
167
168
  cwd: path.resolve(input.cwd),
168
- labId: plan.labId,
169
+ studyId: plan.studyId,
169
170
  actor: plan.actor,
170
171
  participantCount: plan.plane.participants.length,
171
172
  concurrency: plan.concurrency,
@@ -232,13 +233,13 @@ async function runPlanInScope(plan, input, config, scope) {
232
233
  const { ctx, live, results } = prepared;
233
234
  const planeRan = await runPlane(ctx, live, results, prepared.plane);
234
235
  if (!planeRan) {
235
- return fail("HUMANISH_CONCURRENT_SHARED_WORLD_LAB_INVALID", "the provisioned-getHost concurrent shared-world route requires `subject.serve`.", descriptor.id);
236
+ return fail("HUMANISH_SHARED_WORLD_INVALID", "the provisioned-getHost concurrent shared-world route requires `subject.serve`.", descriptor.id);
236
237
  }
237
238
  return finishConcurrentRun(ctx, live, results, prepared.finish);
238
239
  }
239
240
  /**
240
- * Runs the plane the lab declares, then finalizes email receiving and stops the seats' flush on
241
- * every exit. Returns false when a provisioned lab reaches it without `subject.serve`.
241
+ * Runs the plane the study declares, then finalizes email receiving and stops the participants'
242
+ * flush on every exit. Returns false when a provisioned study reaches it without `subject.serve`.
242
243
  */
243
244
  async function runPlane(ctx, live, results, plane) {
244
245
  const { dryRun } = ctx.plan;
@@ -266,7 +267,7 @@ async function runPlane(ctx, live, results, plane) {
266
267
  catch {
267
268
  ctx.warnings.push("Email finalization could not complete. Inspect humanish comms recover; provider cleanup remains unresolved.");
268
269
  }
269
- // Stop the seats' flush timer on every exit, before the final write.
270
+ // Stop the participants' flush timer on every exit, before the final write.
270
271
  await live.flush?.stop();
271
272
  }
272
273
  return true;