humanish 0.108.0 → 0.109.1

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 (461) hide show
  1. package/ARCHITECTURE.md +58 -59
  2. package/CHANGELOG.md +22 -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/migrate.js +15 -4
  57. package/dist/cli/commands/observe.d.ts +0 -1
  58. package/dist/cli/commands/observe.js +0 -15
  59. package/dist/cli/commands/run-command.d.ts +2 -2
  60. package/dist/cli/commands/run-command.js +3 -3
  61. package/dist/cli/commands/runs.js +9 -7
  62. package/dist/cli/commands/setup.js +5 -7
  63. package/dist/cli/commands/study-format.d.ts +9 -0
  64. package/dist/cli/commands/{lab-format.js → study-format.js} +5 -5
  65. package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
  66. package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +12 -12
  67. package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
  68. package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
  69. package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
  70. package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +3 -3
  71. package/dist/cli/commands/study-route-run.d.ts +19 -0
  72. package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
  73. package/dist/cli/commands/study-route-scripted.d.ts +17 -0
  74. package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
  75. package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
  76. package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +7 -7
  77. package/dist/cli/commands/study-route-terminal.d.ts +17 -0
  78. package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
  79. package/dist/cli/commands/study-run.d.ts +9 -0
  80. package/dist/cli/commands/{lab-run.js → study-run.js} +34 -34
  81. package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +5 -5
  82. package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +1 -1
  83. package/dist/cli/commands/study.js +13 -49
  84. package/dist/cli/commands/tui.js +12 -12
  85. package/dist/cli/commands/watch.js +30 -65
  86. package/dist/cli/deprecations.d.ts +1 -13
  87. package/dist/cli/deprecations.js +0 -30
  88. package/dist/cli/doctor.d.ts +3 -3
  89. package/dist/cli/doctor.js +16 -16
  90. package/dist/cli/first-run-path.d.ts +4 -4
  91. package/dist/cli/first-run-path.js +7 -7
  92. package/dist/cli/io.d.ts +3 -3
  93. package/dist/cli/io.js +2 -2
  94. package/dist/cli/observer-follow.d.ts +2 -2
  95. package/dist/cli/observer-follow.js +2 -2
  96. package/dist/cli/orientation.d.ts +4 -4
  97. package/dist/cli/orientation.js +58 -20
  98. package/dist/cli/program.js +3 -4
  99. package/dist/cli/telemetry.d.ts +1 -1
  100. package/dist/cli/telemetry.js +14 -20
  101. package/dist/comms/catch-host.d.ts +1 -1
  102. package/dist/comms/catch-host.js +3 -3
  103. package/dist/comms/connections.d.ts +1 -1
  104. package/dist/comms/connections.js +2 -2
  105. package/dist/comms/external-evidence.d.ts +5 -5
  106. package/dist/comms/external-evidence.js +4 -3
  107. package/dist/comms/fake-inbox.d.ts +2 -2
  108. package/dist/comms/fake-inbox.js +2 -2
  109. package/dist/comms/receiving-runtime.d.ts +4 -4
  110. package/dist/comms/sandbox-catch.d.ts +2 -2
  111. package/dist/comms/sandbox-catch.js +2 -2
  112. package/dist/comms/setup.d.ts +2 -2
  113. package/dist/comms/setup.js +29 -32
  114. package/dist/evidence/redaction.d.ts +11 -0
  115. package/dist/evidence/redaction.js +43 -0
  116. package/dist/feedback/draft.js +2 -2
  117. package/dist/feedback/export-bundle.js +5 -4
  118. package/dist/feedback/export.js +3 -2
  119. package/dist/feedback/proof.d.ts +1 -1
  120. package/dist/feedback/proof.js +2 -2
  121. package/dist/guest/bootstrap.js +6 -6
  122. package/dist/guest/browser-tools.js +8 -8
  123. package/dist/guest/chromium-text.js +17 -17
  124. package/dist/guest/desktop-executor.d.ts +2 -2
  125. package/dist/guest/desktop-executor.js +20 -20
  126. package/dist/guest/desktop-keys.js +4 -4
  127. package/dist/guest/desktop-media.d.ts +2 -2
  128. package/dist/guest/desktop-media.js +16 -16
  129. package/dist/guest/desktop-native.js +10 -10
  130. package/dist/guest/runtime-desktop.js +2 -2
  131. package/dist/guest/runtime-processes.d.ts +2 -2
  132. package/dist/guest/runtime-processes.js +2 -2
  133. package/dist/guest/runtime.js +5 -5
  134. package/dist/index.d.ts +13 -15
  135. package/dist/index.js +6 -8
  136. package/dist/observer/artifact.d.ts +1 -1
  137. package/dist/observer/artifact.js +1 -1
  138. package/dist/observer/data.d.ts +1 -1
  139. package/dist/observer/library.d.ts +2 -0
  140. package/dist/observer/library.js +4 -1
  141. package/dist/observer/render.js +7 -1
  142. package/dist/observer/run-routes.d.ts +1 -0
  143. package/dist/observer/run-routes.js +37 -12
  144. package/dist/observer/serve.d.ts +1 -1
  145. package/dist/observer-app.html +1 -1
  146. package/dist/routes/computer-use/bundle-parts.js +3 -2
  147. package/dist/routes/computer-use/bundle.d.ts +2 -2
  148. package/dist/routes/computer-use/bundle.js +7 -6
  149. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +5 -5
  150. package/dist/routes/computer-use/e2b-desktop/comms.js +5 -4
  151. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +1 -1
  152. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
  153. package/dist/routes/computer-use/e2b-desktop/prepare.js +3 -3
  154. package/dist/routes/computer-use/e2b-desktop/start.js +3 -4
  155. package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
  156. package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -3
  157. package/dist/routes/computer-use/external-comms.d.ts +3 -3
  158. package/dist/routes/computer-use/fanout-bundle.js +11 -10
  159. package/dist/routes/computer-use/fanout-records.js +2 -2
  160. package/dist/routes/computer-use/in-process-desktop.js +1 -1
  161. package/dist/routes/computer-use/live-flush.d.ts +3 -3
  162. package/dist/routes/computer-use/live-phase.d.ts +2 -3
  163. package/dist/routes/computer-use/live-phase.js +3 -3
  164. package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
  165. package/dist/routes/computer-use/local-tree-pack.js +1 -1
  166. package/dist/routes/computer-use/local-vm.d.ts +8 -8
  167. package/dist/routes/computer-use/local-vm.js +2 -2
  168. package/dist/routes/computer-use/participant-desktop.d.ts +3 -3
  169. package/dist/routes/computer-use/participant-desktop.js +1 -1
  170. package/dist/routes/computer-use/participant-execution.js +1 -1
  171. package/dist/routes/computer-use/participant-model.js +3 -3
  172. package/dist/routes/computer-use/participant-prompt.d.ts +5 -5
  173. package/dist/routes/computer-use/participant-prompt.js +3 -3
  174. package/dist/routes/computer-use/participant-runs.d.ts +10 -10
  175. package/dist/routes/computer-use/participant-runs.js +14 -13
  176. package/dist/routes/computer-use/plan.d.ts +12 -12
  177. package/dist/routes/computer-use/plan.js +27 -27
  178. package/dist/routes/computer-use/preflight.d.ts +5 -5
  179. package/dist/routes/computer-use/preflight.js +5 -5
  180. package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
  181. package/dist/routes/computer-use/rerun-selection.js +3 -2
  182. package/dist/routes/computer-use/result.d.ts +4 -4
  183. package/dist/routes/computer-use/result.js +13 -12
  184. package/dist/routes/computer-use/route.d.ts +12 -12
  185. package/dist/routes/computer-use/route.js +19 -19
  186. package/dist/routes/computer-use/self-report.js +1 -1
  187. package/dist/routes/computer-use/setup.d.ts +22 -22
  188. package/dist/routes/computer-use/setup.js +15 -15
  189. package/dist/routes/computer-use/single-bundle.d.ts +4 -4
  190. package/dist/routes/computer-use/single-bundle.js +14 -13
  191. package/dist/routes/computer-use/subject-projection.d.ts +3 -3
  192. package/dist/routes/computer-use/types.d.ts +34 -34
  193. package/dist/routes/computer-use/types.js +3 -3
  194. package/dist/routes/preview.d.ts +6 -6
  195. package/dist/routes/preview.js +5 -5
  196. package/dist/routes/scripted/bundle.d.ts +6 -6
  197. package/dist/routes/scripted/bundle.js +10 -9
  198. package/dist/routes/scripted/plan.d.ts +7 -7
  199. package/dist/routes/scripted/plan.js +6 -6
  200. package/dist/routes/scripted/result.d.ts +3 -3
  201. package/dist/routes/scripted/result.js +9 -9
  202. package/dist/routes/scripted/route.d.ts +9 -9
  203. package/dist/routes/scripted/route.js +11 -11
  204. package/dist/routes/scripted/scenario.d.ts +1 -1
  205. package/dist/routes/scripted/scenario.js +3 -3
  206. package/dist/routes/scripted/setup.d.ts +6 -6
  207. package/dist/routes/scripted/setup.js +4 -4
  208. package/dist/routes/scripted/subject.d.ts +5 -5
  209. package/dist/routes/scripted/subject.js +3 -3
  210. package/dist/routes/scripted/surface-records.d.ts +1 -1
  211. package/dist/routes/scripted/surface-records.js +2 -2
  212. package/dist/routes/scripted/surface-sessions.d.ts +3 -3
  213. package/dist/routes/scripted/types.d.ts +17 -17
  214. package/dist/routes/scripted/types.js +1 -1
  215. package/dist/routes/shared-world/bundle-records.js +3 -3
  216. package/dist/routes/shared-world/bundle.js +15 -14
  217. package/dist/routes/shared-world/checkpoints.d.ts +3 -3
  218. package/dist/routes/shared-world/checkpoints.js +1 -1
  219. package/dist/routes/shared-world/comms.d.ts +9 -9
  220. package/dist/routes/shared-world/comms.js +6 -5
  221. package/dist/routes/shared-world/participant-specs.d.ts +3 -3
  222. package/dist/routes/shared-world/participant-specs.js +7 -7
  223. package/dist/routes/shared-world/plan.d.ts +9 -9
  224. package/dist/routes/shared-world/plan.js +9 -9
  225. package/dist/routes/shared-world/provisioned.d.ts +8 -8
  226. package/dist/routes/shared-world/provisioned.js +4 -4
  227. package/dist/routes/shared-world/result.d.ts +6 -6
  228. package/dist/routes/shared-world/result.js +11 -10
  229. package/dist/routes/shared-world/route.d.ts +11 -11
  230. package/dist/routes/shared-world/route.js +19 -19
  231. package/dist/routes/shared-world/setup.d.ts +13 -13
  232. package/dist/routes/shared-world/setup.js +19 -19
  233. package/dist/routes/shared-world/types.d.ts +27 -27
  234. package/dist/routes/terminal/adapter.d.ts +2 -2
  235. package/dist/routes/terminal/adapter.js +4 -4
  236. package/dist/routes/terminal/bundle.d.ts +11 -11
  237. package/dist/routes/terminal/bundle.js +12 -12
  238. package/dist/routes/terminal/credentials.d.ts +4 -4
  239. package/dist/routes/terminal/credentials.js +5 -5
  240. package/dist/routes/terminal/dry-run.d.ts +4 -4
  241. package/dist/routes/terminal/dry-run.js +9 -9
  242. package/dist/routes/terminal/ledger.d.ts +2 -2
  243. package/dist/routes/terminal/lifetime.d.ts +1 -1
  244. package/dist/routes/terminal/lifetime.js +1 -1
  245. package/dist/routes/terminal/live-finish.d.ts +2 -2
  246. package/dist/routes/terminal/live-finish.js +7 -7
  247. package/dist/routes/terminal/live-sandbox.d.ts +2 -2
  248. package/dist/routes/terminal/live-sandbox.js +3 -2
  249. package/dist/routes/terminal/participant-text.js +2 -1
  250. package/dist/routes/terminal/persona.d.ts +2 -2
  251. package/dist/routes/terminal/persona.js +2 -2
  252. package/dist/routes/terminal/plan.d.ts +7 -7
  253. package/dist/routes/terminal/plan.js +5 -5
  254. package/dist/routes/terminal/result.d.ts +5 -5
  255. package/dist/routes/terminal/result.js +7 -7
  256. package/dist/routes/terminal/route.d.ts +9 -9
  257. package/dist/routes/terminal/route.js +14 -14
  258. package/dist/routes/terminal/session.d.ts +5 -5
  259. package/dist/routes/terminal/session.js +7 -7
  260. package/dist/routes/terminal/trace.d.ts +2 -2
  261. package/dist/routes/terminal/types.d.ts +24 -24
  262. package/dist/routes/terminal/types.js +2 -2
  263. package/dist/run/bundle.d.ts +7 -7
  264. package/dist/run/bundle.js +2 -2
  265. package/dist/run/costs.d.ts +23 -0
  266. package/dist/run/costs.js +72 -43
  267. package/dist/run/dry-run-inputs.d.ts +1 -1
  268. package/dist/run/dry-run-inputs.js +1 -1
  269. package/dist/run/dry-run.js +2 -2
  270. package/dist/run/outcomes.d.ts +1 -1
  271. package/dist/run/participant.d.ts +1 -1
  272. package/dist/run/preflight-receipts.js +1 -1
  273. package/dist/run/pricing.js +2 -2
  274. package/dist/run/projection.d.ts +32 -32
  275. package/dist/run/projection.js +44 -44
  276. package/dist/run/reclaim.d.ts +1 -1
  277. package/dist/run/reclaim.js +1 -1
  278. package/dist/run/results.d.ts +2 -2
  279. package/dist/run/run-cost.d.ts +53 -0
  280. package/dist/run/run-cost.js +105 -0
  281. package/dist/run/run-index-analysis.d.ts +15 -0
  282. package/dist/run/run-index-analysis.js +77 -0
  283. package/dist/run/run-index.d.ts +11 -1
  284. package/dist/run/run-index.js +63 -49
  285. package/dist/run/run.d.ts +3 -3
  286. package/dist/run/run.js +2 -2
  287. package/dist/run/shared-world-evidence.d.ts +1 -1
  288. package/dist/run/shared-world-shape.js +1 -1
  289. package/dist/run/stats.d.ts +3 -3
  290. package/dist/run/stats.js +14 -14
  291. package/dist/run/status.d.ts +10 -2
  292. package/dist/run/status.js +6 -3
  293. package/dist/run/streams.d.ts +2 -2
  294. package/dist/run/study-provenance.d.ts +4 -2
  295. package/dist/run/study-provenance.js +7 -4
  296. package/dist/run/study-result.d.ts +0 -5
  297. package/dist/run/study-result.js +1 -1
  298. package/dist/run-study.d.ts +112 -0
  299. package/dist/{run-lab.js → run-study.js} +52 -45
  300. package/dist/{lab → study}/adapter-extension.d.ts +8 -20
  301. package/dist/{lab → study}/adapter-extension.js +2 -14
  302. package/dist/{lab → study}/adapter-scorer-loader.d.ts +10 -10
  303. package/dist/{lab → study}/adapter-scorer-loader.js +3 -3
  304. package/dist/study/composition-rules.d.ts +7 -0
  305. package/dist/{lab → study}/composition-rules.js +12 -12
  306. package/dist/study/config.d.ts +15 -0
  307. package/dist/{lab → study}/config.js +37 -20
  308. package/dist/study/convert.d.ts +1 -1
  309. package/dist/study/convert.js +15 -15
  310. package/dist/{lab → study}/device-presets.d.ts +2 -2
  311. package/dist/{lab → study}/discover.d.ts +29 -23
  312. package/dist/{lab → study}/discover.js +97 -118
  313. package/dist/{lab → study}/doctor.d.ts +11 -11
  314. package/dist/{lab → study}/doctor.js +18 -18
  315. package/dist/study/files.d.ts +2 -2
  316. package/dist/study/files.js +6 -5
  317. package/dist/{lab → study}/init-templates.d.ts +2 -2
  318. package/dist/{lab → study}/init-templates.js +16 -11
  319. package/dist/{lab → study}/init.d.ts +1 -1
  320. package/dist/{lab → study}/init.js +7 -4
  321. package/dist/{lab → study}/keys.d.ts +2 -2
  322. package/dist/{lab → study}/keys.js +10 -10
  323. package/dist/study/migrate.d.ts +8 -3
  324. package/dist/study/migrate.js +60 -4
  325. package/dist/{lab → study}/parse/actors.d.ts +5 -5
  326. package/dist/{lab → study}/parse/actors.js +5 -5
  327. package/dist/study/parse/comms.d.ts +12 -0
  328. package/dist/study/parse/execution.d.ts +19 -0
  329. package/dist/{lab → study}/parse/study-v3.d.ts +3 -5
  330. package/dist/{lab → study}/parse/study-v3.js +3 -3
  331. package/dist/{lab → study}/parse/subject-state.d.ts +8 -8
  332. package/dist/{lab → study}/parse/subject-state.js +4 -4
  333. package/dist/{lab → study}/parse/subject.d.ts +3 -3
  334. package/dist/{lab → study}/parse/subject.js +8 -8
  335. package/dist/{lab → study}/parse/values.d.ts +2 -2
  336. package/dist/{lab → study}/persona-resolve.d.ts +4 -4
  337. package/dist/{lab → study}/persona-resolve.js +2 -2
  338. package/dist/{lab → study}/plan-base.d.ts +7 -7
  339. package/dist/{lab → study}/plan-base.js +1 -1
  340. package/dist/{lab → study}/plan-participants.d.ts +10 -10
  341. package/dist/{lab → study}/plan-participants.js +4 -4
  342. package/dist/{lab → study}/plan-types.d.ts +28 -28
  343. package/dist/{lab → study}/plan-types.js +2 -2
  344. package/dist/study/plan.d.ts +13 -0
  345. package/dist/{lab → study}/plan.js +20 -20
  346. package/dist/study/preflight-probes.d.ts +3 -0
  347. package/dist/{lab → study}/preflight-probes.js +9 -8
  348. package/dist/study/preflight-result.d.ts +8 -0
  349. package/dist/{lab → study}/preflight-result.js +3 -3
  350. package/dist/{lab → study}/preflight.d.ts +31 -31
  351. package/dist/{lab → study}/preflight.js +8 -8
  352. package/dist/{lab → study}/requirements.d.ts +3 -3
  353. package/dist/{lab → study}/requirements.js +1 -1
  354. package/dist/study/route-inputs.d.ts +28 -0
  355. package/dist/{lab → study}/route-inputs.js +1 -1
  356. package/dist/{lab → study}/routing.d.ts +12 -12
  357. package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -10
  358. package/dist/{lab/run-lab-events.js → study/run-study-events.js} +4 -4
  359. package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +8 -17
  360. package/dist/study/run-study-homes.js +3 -0
  361. package/dist/study/run-study-options.d.ts +28 -0
  362. package/dist/{lab/run-lab-options.js → study/run-study-options.js} +16 -15
  363. package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +2 -2
  364. package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
  365. package/dist/{lab → study}/summary.d.ts +10 -10
  366. package/dist/{lab → study}/summary.js +15 -15
  367. package/dist/{lab → study}/tasks.d.ts +3 -3
  368. package/dist/{lab → study}/tasks.js +1 -1
  369. package/dist/{lab → study}/types.d.ts +104 -104
  370. package/dist/{lab → study}/types.js +1 -1
  371. package/dist/{lab → study}/validation.d.ts +19 -19
  372. package/dist/{lab → study}/validation.js +13 -13
  373. package/dist/{lab → study}/warnings.d.ts +4 -4
  374. package/dist/{lab → study}/warnings.js +1 -1
  375. package/dist/subject/clone.d.ts +6 -6
  376. package/dist/subject/clone.js +2 -2
  377. package/dist/subject/local-tree-archive.d.ts +2 -2
  378. package/dist/subject/local-tree-archive.js +3 -3
  379. package/dist/subject/local-tree.d.ts +3 -3
  380. package/dist/subject/runtime.js +2 -2
  381. package/dist/subject/serve.d.ts +4 -4
  382. package/dist/subject/state.d.ts +3 -3
  383. package/dist/subject/state.js +1 -1
  384. package/dist/subject/steps.d.ts +1 -1
  385. package/dist/subject/steps.js +1 -1
  386. package/dist/substrates/desktop-session.js +2 -2
  387. package/dist/substrates/detached.d.ts +1 -1
  388. package/dist/substrates/e2b/desktop-browser.d.ts +4 -4
  389. package/dist/substrates/e2b/desktop-browser.js +1 -1
  390. package/dist/substrates/e2b/desktop-cdp.d.ts +1 -1
  391. package/dist/substrates/e2b/desktop-cdp.js +1 -1
  392. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  393. package/dist/substrates/e2b/desktop-executor.js +12 -12
  394. package/dist/substrates/e2b/desktop-geometry.d.ts +1 -1
  395. package/dist/substrates/e2b/desktop-geometry.js +1 -1
  396. package/dist/substrates/e2b/desktop-media.d.ts +3 -3
  397. package/dist/substrates/e2b/lifetime.js +1 -1
  398. package/dist/substrates/e2b/sandbox.d.ts +3 -3
  399. package/dist/substrates/e2b/sandbox.js +1 -1
  400. package/dist/substrates/e2b/sdk.d.ts +1 -1
  401. package/dist/substrates/e2b/sdk.js +1 -1
  402. package/dist/substrates/local/runtime-config.d.ts +4 -4
  403. package/dist/substrates/local/runtime-config.js +4 -4
  404. package/dist/tui/contract.d.ts +8 -8
  405. package/dist/tui/contract.js +2 -2
  406. package/dist/tui/launch.d.ts +3 -3
  407. package/dist/tui/launch.js +22 -16
  408. package/dist/tui-app.js +139 -139
  409. package/dist/verify/subject.d.ts +1 -1
  410. package/dist/verify/subject.js +1 -1
  411. package/dist/verify/verify.js +2 -1
  412. package/docs/architecture/actor-contract.md +5 -5
  413. package/docs/architecture/browser-control.md +1 -1
  414. package/docs/architecture/external-public-shared-world.md +8 -7
  415. package/docs/architecture/github-feedback-loop.md +1 -1
  416. package/docs/architecture/task-protocol-support.md +1 -1
  417. package/docs/architecture/terminal-product-route.md +18 -18
  418. package/docs/contracts/adapter-fixtures.md +2 -2
  419. package/docs/contracts/errors.md +8 -8
  420. package/docs/contracts/run-bundle.md +6 -4
  421. package/docs/contracts/schemas.md +61 -42
  422. package/docs/contracts/study-analysis.md +4 -1
  423. package/docs/contracts/study-costs.md +17 -2
  424. package/examples/README.md +1 -1
  425. package/examples/scorer/scorer.mjs +3 -3
  426. package/package.json +2 -1
  427. package/skills/humanish/SKILL.md +8 -6
  428. package/skills/humanish/agents/openai.yaml +1 -1
  429. package/dist/cli/commands/lab-format.d.ts +0 -9
  430. package/dist/cli/commands/lab-route-run.d.ts +0 -19
  431. package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
  432. package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
  433. package/dist/cli/commands/lab-run.d.ts +0 -9
  434. package/dist/lab/composition-rules.d.ts +0 -7
  435. package/dist/lab/config.d.ts +0 -7
  436. package/dist/lab/deprecated-fields.d.ts +0 -10
  437. package/dist/lab/deprecated-fields.js +0 -24
  438. package/dist/lab/parse/comms.d.ts +0 -12
  439. package/dist/lab/parse/execution.d.ts +0 -19
  440. package/dist/lab/plan.d.ts +0 -13
  441. package/dist/lab/preflight-probes.d.ts +0 -3
  442. package/dist/lab/preflight-result.d.ts +0 -8
  443. package/dist/lab/route-inputs.d.ts +0 -28
  444. package/dist/lab/run-lab-homes.js +0 -7
  445. package/dist/lab/run-lab-options.d.ts +0 -28
  446. package/dist/library-aliases.d.ts +0 -56
  447. package/dist/library-aliases.js +0 -22
  448. package/dist/run-lab.d.ts +0 -112
  449. /package/dist/{lab → study}/device-presets.js +0 -0
  450. /package/dist/{lab → study}/init-paths.d.ts +0 -0
  451. /package/dist/{lab → study}/init-paths.js +0 -0
  452. /package/dist/{lab → study}/init-plan.d.ts +0 -0
  453. /package/dist/{lab → study}/init-plan.js +0 -0
  454. /package/dist/{lab → study}/parse/comms.js +0 -0
  455. /package/dist/{lab → study}/parse/execution.js +0 -0
  456. /package/dist/{lab → study}/parse/values.js +0 -0
  457. /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
  458. /package/dist/{lab → study}/participant-assignment.js +0 -0
  459. /package/dist/{lab → study}/persona.d.ts +0 -0
  460. /package/dist/{lab → study}/persona.js +0 -0
  461. /package/dist/{lab → study}/routing.js +0 -0
@@ -1,12 +1,12 @@
1
- import type { LabDeps } from "../../lab/lab-deps.js";
2
- import type { LabEvent } from "../../lab/run-lab-events.js";
3
- import type { RunLabHomes } from "../../lab/run-lab-homes.js";
1
+ import type { StudyDeps } from "../../study/study-deps.js";
2
+ import type { StudyEvent } from "../../study/run-study-events.js";
3
+ import type { RunStudyHomes } from "../../study/run-study-homes.js";
4
4
  import type { SharedWorldJudgment } from "../../run/judge.js";
5
- import type { BrowserScorer } from "../../lab/adapter-extension.js";
5
+ import type { BrowserScorer } from "../../study/adapter-extension.js";
6
6
  import type { AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
7
7
  import type { CuaActorDescriptor } from "../../actors/registry.js";
8
8
  import type { CommsReceivingRun } from "../../comms/receiving.js";
9
- import type { LabCommsEmail, LabCommsExternal, LabConfig } from "../../lab/types.js";
9
+ import type { StudyCommsEmail, StudyCommsExternal, StudyConfig } from "../../study/types.js";
10
10
  import type { DesktopResourceObservation } from "../../substrates/e2b/desktop-resources.js";
11
11
  import type { ObserverResult } from "../../observer/render.js";
12
12
  import type { ObserverRuntimeStreamUrl } from "../../observer/run-routes.js";
@@ -17,18 +17,18 @@ import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
17
17
  import type { LiveTraceFlush } from "../computer-use/live-flush.js";
18
18
  import type { CuaParticipantDeps, DesktopParticipantRun, CuaRunBudget, ParticipantRunOutcome } from "../computer-use/types.js";
19
19
  import type { ProvisionedPlaneSetup } from "./provisioned.js";
20
- import type { SharedWorldPlan } from "../../lab/plan-types.js";
20
+ import type { SharedWorldPlan } from "../../study/plan-types.js";
21
21
  import { type StudyResultIdentity } from "../../run/study-result.js";
22
22
  export declare const CONCURRENT_SHARED_WORLD_PROVIDER_METADATA: {
23
23
  readonly mode: "concurrent-shared-world-lab";
24
24
  readonly tool: "humanish";
25
25
  };
26
26
  export declare const CONCURRENT_ATTRIBUTION_LIMITS: readonly ["concurrent", "best-effort-causal-attribution", "non-deterministic-shared-state", "window-and-snapshot-granularity", "contention-observed-not-proven-safe", "state-change-not-isolated-to-actors"];
27
- export interface RunConcurrentSharedWorldLabOptions {
27
+ export interface RunConcurrentSharedWorldStudyOptions {
28
28
  /** Cancels post-run analysis only. */
29
29
  analysisSignal?: AbortSignal;
30
30
  cwd: string;
31
- config: LabConfig;
31
+ config: StudyConfig;
32
32
  /** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
33
33
  dryRun: boolean;
34
34
  open?: boolean;
@@ -43,22 +43,22 @@ export interface RunConcurrentSharedWorldLabOptions {
43
43
  * subject sandbox, then each participant's desktop. The external-public plane has participants
44
44
  * only.
45
45
  */
46
- prepareDesktop?: NonNullable<RunLabHomes["prepareDesktop"]>;
46
+ prepareDesktop?: NonNullable<RunStudyHomes["prepareDesktop"]>;
47
47
  /** Awaited after a participant's live stream starts, and again after its sandbox is gone. */
48
- onStream?: NonNullable<RunLabHomes["onStream"]>;
49
- /** Reports subject phases to onEvent; built by normalizeRunLabOptions. */
50
- emit?: (event: LabEvent) => void;
48
+ onStream?: NonNullable<RunStudyHomes["onStream"]>;
49
+ /** Reports subject phases to onEvent; built by normalizeRunStudyOptions. */
50
+ emit?: (event: StudyEvent) => void;
51
51
  /** Test seams. */
52
- deps?: LabDeps;
53
- /** Scores the assembled evidence: `RunLabOptions.scorer`, or the scorer the CLI loads. */
52
+ deps?: StudyDeps;
53
+ /** Scores the assembled evidence: `RunStudyOptions.scorer`, or the scorer the CLI loads. */
54
54
  scorer?: BrowserScorer;
55
55
  /** Present only when the scorer was config-declared and loaded by the CLI;
56
56
  * core-stamped onto the bundle as evidence. Absent for library callers. */
57
57
  scorerProvenance?: RunScorerProvenance;
58
58
  }
59
- /** What a shared-world run takes besides its plan. The plan carries the config, dry run and lab. */
60
- export type SharedWorldRunInput = Omit<RunConcurrentSharedWorldLabOptions, "config" | "dryRun" | "lab">;
61
- export type ConcurrentSharedWorldLabErrorCode = "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_SHARED_WORLD_FAILED" | "HUMANISH_SHARED_WORLD_ACTOR_UNSUPPORTED" | "HUMANISH_SHARED_WORLD_INVALID" | "HUMANISH_SHARED_WORLD_KEYS_MISSING"
59
+ /** What a shared-world run takes besides its plan. The plan carries the config, dry run and study. */
60
+ export type SharedWorldRunInput = Omit<RunConcurrentSharedWorldStudyOptions, "config" | "dryRun">;
61
+ export type ConcurrentSharedWorldStudyErrorCode = "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_STUDY_V2_UNSUPPORTED" | "HUMANISH_SHARED_WORLD_FAILED" | "HUMANISH_SHARED_WORLD_ACTOR_UNSUPPORTED" | "HUMANISH_SHARED_WORLD_INVALID" | "HUMANISH_SHARED_WORLD_KEYS_MISSING"
62
62
  /** A local-agent brain's CLI is not on `PATH`. */
63
63
  | "HUMANISH_SHARED_WORLD_AGENT_MISSING"
64
64
  /** A local-agent brain's CLI is signed out, or could not report its sign-in status. */
@@ -98,11 +98,11 @@ export interface ConcurrentSharedWorldParticipantResult {
98
98
  killed: boolean;
99
99
  };
100
100
  error?: {
101
- code: ConcurrentSharedWorldLabErrorCode;
101
+ code: ConcurrentSharedWorldStudyErrorCode;
102
102
  message: string;
103
103
  };
104
104
  }
105
- export interface ConcurrentSharedWorldLabResult extends AutomaticAnalysisResult, StudyResultIdentity<"shared-world"> {
105
+ export interface ConcurrentSharedWorldStudyResult extends AutomaticAnalysisResult, StudyResultIdentity<"shared-world"> {
106
106
  ok: boolean;
107
107
  cwd: string;
108
108
  actor: string;
@@ -132,7 +132,7 @@ export interface ConcurrentSharedWorldLabResult extends AutomaticAnalysisResult,
132
132
  observer?: ObserverResult;
133
133
  warnings: string[];
134
134
  error?: {
135
- code: ConcurrentSharedWorldLabErrorCode;
135
+ code: ConcurrentSharedWorldStudyErrorCode;
136
136
  message: string;
137
137
  };
138
138
  }
@@ -159,10 +159,10 @@ export interface PlaneContext {
159
159
  input: SharedWorldRunInput;
160
160
  /** Read for the subject's serve URL, which each participant's subject names. Participants, their
161
161
  * count and their host and entry come from the plan's participants. */
162
- config: LabConfig;
162
+ config: StudyConfig;
163
163
  descriptor: CuaActorDescriptor;
164
164
  /** The run's test seams; empty outside tests. */
165
- deps: LabDeps;
165
+ deps: StudyDeps;
166
166
  env: Record<string, string | undefined>;
167
167
  concurrency: number;
168
168
  runBudget: CuaRunBudget | undefined;
@@ -204,15 +204,15 @@ export interface LiveParticipants {
204
204
  }
205
205
  /** An adopter-hosted comms catch and the inbox its personas open. */
206
206
  export interface ExternalCommsWiring {
207
- external: LabCommsExternal;
208
- email: LabCommsEmail;
207
+ external: StudyCommsExternal;
208
+ email: StudyCommsEmail;
209
209
  inboxUrl: string;
210
210
  }
211
211
  /** What buildConcurrentSharedWorldBundle projects into a run bundle. */
212
212
  export interface ConcurrentBundleArgs {
213
213
  /** The run's judgment (judgeSharedWorldRun over the other fields). */
214
214
  judgment: SharedWorldJudgment;
215
- /** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
215
+ /** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
216
216
  run: BundleRun;
217
217
  plan: SharedWorldPlan;
218
218
  descriptor: CuaActorDescriptor;
@@ -226,7 +226,7 @@ export interface ConcurrentBundleArgs {
226
226
  seedDigest: string;
227
227
  subjectCommit?: string;
228
228
  hostDigest?: string;
229
- /** Run-level digest-only comms-thread evidence path (humanish.comms-thread.v1), when a comms lab
229
+ /** Run-level digest-only comms-thread evidence path (humanish.comms-thread.v1), when a comms study
230
230
  * captured mail into the subject sandbox's catch. Registered on the first persona stream (it is a
231
231
  * property of the one shared app, and belongs to no single persona). */
232
232
  commsArtifactPath?: string;
@@ -265,7 +265,7 @@ export interface PlaneResults {
265
265
  /** Which plane runs, and the setup it needs beyond the plane context. */
266
266
  export interface PlaneSelection {
267
267
  planeClass: ConcurrentSharedWorldPlaneClass;
268
- /** Undefined when the lab declares no `subject.serve`. */
268
+ /** Undefined when the study declares no `subject.serve`. */
269
269
  provisioned: ProvisionedPlaneSetup | undefined;
270
270
  externalWiring: ExternalCommsWiring | undefined;
271
271
  }
@@ -1,6 +1,6 @@
1
1
  import type { ActorTrace } from "../../actors/contract.js";
2
2
  import { type RunBundle, type RunScorerProvenance } from "../../run/bundle.js";
3
- import { type ScorerOutcome } from "../../lab/adapter-extension.js";
3
+ import { type ScorerOutcome } from "../../study/adapter-extension.js";
4
4
  import type { TerminalLedgers, TerminalScorer } from "./types.js";
5
5
  /**
6
6
  * Run the product-adapter extension seam over the assembled
@@ -27,7 +27,7 @@ export declare function applyAdapterExtensionSeam(args: {
27
27
  ledgers: TerminalLedgers;
28
28
  transcript: string;
29
29
  product: string;
30
- labId: string;
30
+ studyId: string;
31
31
  runId: string;
32
32
  sanitize: (text: string) => string;
33
33
  warnings: string[];
@@ -1,6 +1,6 @@
1
1
  import {} from "../../run/bundle.js";
2
2
  import { isRunAdapterScore } from "../../run/bundle-shape.js";
3
- import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFORMED, frozenBundleView, isAdapterFeedbackCandidate, } from "../../lab/adapter-extension.js";
3
+ import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFORMED, frozenBundleView, isAdapterFeedbackCandidate, } from "../../study/adapter-extension.js";
4
4
  /**
5
5
  * Run the product-adapter extension seam over the assembled
6
6
  * evidence and attach its results to the bundle in place, without core knowing any product noun.
@@ -20,7 +20,7 @@ import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFOR
20
20
  * re-checks the surviving shapes downstream, so the seam stays fail-closed end to end.
21
21
  */
22
22
  export async function applyAdapterExtensionSeam(args) {
23
- const { scorer, bundle, trace, ledgers, transcript, product, labId, runId, sanitize, warnings, scorerProvenance, } = args;
23
+ const { scorer, bundle, trace, ledgers, transcript, product, studyId, runId, sanitize, warnings, scorerProvenance, } = args;
24
24
  if (!scorer?.score && !scorer?.deriveFeedback)
25
25
  return { failures: [] };
26
26
  const declared = scorerProvenance !== undefined;
@@ -38,7 +38,7 @@ export async function applyAdapterExtensionSeam(args) {
38
38
  ledgers,
39
39
  transcript,
40
40
  product,
41
- labId,
41
+ studyId,
42
42
  runId,
43
43
  };
44
44
  // Best-effort re-scrub of the adapter payload: round-trip the whole JSON through the run's denylist
@@ -46,7 +46,7 @@ export async function applyAdapterExtensionSeam(args) {
46
46
  // local paths, and misses encoded/split/custom secrets, DB passwords, PII, or abs paths outside
47
47
  // the denylist. A
48
48
  // payload from config-declared code is acceptable only because the trust boundary (the party who
49
- // declares the scorer runs the lab) already permits direct exfiltration; the re-scrub is
49
+ // declares the scorer runs the study) already permits direct exfiltration; the re-scrub is
50
50
  // defense-in-depth, not a wall.
51
51
  const scrubValue = (value) => JSON.parse(sanitize(JSON.stringify(value)));
52
52
  // Set for a declared scorer that fails to render a pass verdict (status:"fail", malformed, or throw).
@@ -1,27 +1,27 @@
1
1
  import type { ActorPersonaRef, ActorTrace } from "../../actors/contract.js";
2
- import type { LabScenarioCaps, LabRuntimeAuth } from "../../lab/types.js";
2
+ import type { StudyScenarioCaps, StudyRuntimeAuth } from "../../study/types.js";
3
3
  import { type RunBundle, type RunCostSummary, type BundleRun } from "../../run/bundle.js";
4
4
  import { type Verdict } from "../../run/judge.js";
5
5
  import type { TerminalLedgers } from "./types.js";
6
6
  /**
7
- * Project the terminal-product lab run into a humanish.run-bundle.v1 (no schema change: a new
7
+ * Project the terminal-product run into a humanish.run-bundle.v1 (no schema change: a new
8
8
  * producer only). Dry run: a contract bundle. The terminal stream is a contract placeholder
9
9
  * (stdin disabled, no captured tail, because nothing ran), the subject is declared unpinned, and
10
10
  * the caps/policies/runtime-auth declarations are recorded without pretending that live ledgers
11
11
  * exist. The shipped live builder fills the same evidence contract. Exported for tests.
12
12
  */
13
13
  export declare function buildTerminalProductBundle(args: {
14
- /** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
14
+ /** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
15
15
  run: BundleRun;
16
16
  actorId: string;
17
17
  dryRun: boolean;
18
- labId: string;
19
- labTitle?: string;
18
+ studyId: string;
19
+ studyTitle?: string;
20
20
  mission: string;
21
21
  persona: ActorPersonaRef;
22
22
  productName: string;
23
23
  publicSurfaces: string[];
24
- caps?: LabScenarioCaps;
24
+ caps?: StudyScenarioCaps;
25
25
  runtimeAuth?: string;
26
26
  stdin: "disabled" | "planned" | "sent";
27
27
  policies: {
@@ -42,18 +42,18 @@ export declare function buildTerminalProductBundle(args: {
42
42
  * mode==="live") enforces the ledgers + proven cleanup + interventions-present over this bundle.
43
43
  */
44
44
  export declare function buildLiveTerminalProductBundle(args: {
45
- /** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
45
+ /** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
46
46
  run: BundleRun;
47
47
  actorId: string;
48
- labId: string;
49
- labTitle?: string;
48
+ studyId: string;
49
+ studyTitle?: string;
50
50
  mission: string;
51
51
  persona: ActorPersonaRef;
52
52
  productName: string;
53
53
  publicSurfaces: string[];
54
- caps?: LabScenarioCaps;
54
+ caps?: StudyScenarioCaps;
55
55
  runtimeAuthKeyName: string;
56
- runtimeAuth?: LabRuntimeAuth;
56
+ runtimeAuth?: StudyRuntimeAuth;
57
57
  policies: {
58
58
  allowPrivateRepoAccess: boolean;
59
59
  allowProviderCredentials: boolean;
@@ -1,5 +1,5 @@
1
1
  import { redactText } from "../../evidence/redaction.js";
2
- import { participantAssignment } from "../../lab/participant-assignment.js";
2
+ import { participantAssignment } from "../../study/participant-assignment.js";
3
3
  import { REVIEW_SCHEMA, bundleArtifacts, bundleHead, } from "../../run/bundle.js";
4
4
  import { verdictText } from "../../run/judge.js";
5
5
  import {} from "../../run/streams.js";
@@ -7,7 +7,7 @@ import { participantEvent, participantIds, participantRecord, participantStream,
7
7
  import { TERMINAL_EVENTS_ARTIFACT, TERMINAL_LEDGERS_ARTIFACT, TERMINAL_TRANSCRIPT_ARTIFACT, } from "../../run/terminal-contract.js";
8
8
  import { describeMeasuredSpend, noSpendLineMeasured, noSpendNotEstablished } from "./ledger.js";
9
9
  /**
10
- * Project the terminal-product lab run into a humanish.run-bundle.v1 (no schema change: a new
10
+ * Project the terminal-product run into a humanish.run-bundle.v1 (no schema change: a new
11
11
  * producer only). Dry run: a contract bundle. The terminal stream is a contract placeholder
12
12
  * (stdin disabled, no captured tail, because nothing ran), the subject is declared unpinned, and
13
13
  * the caps/policies/runtime-auth declarations are recorded without pretending that live ledgers
@@ -39,7 +39,7 @@ export function buildTerminalProductBundle(args) {
39
39
  at: args.run.createdAt,
40
40
  level: "info",
41
41
  type: "terminal-lab.run.created",
42
- message: `Created terminal-product lab run for ${args.labId} (actor ${args.actorId}, product ${args.productName}).`,
42
+ message: `Created a terminal-product run for ${args.studyId} (actor ${args.actorId}, product ${args.productName}).`,
43
43
  },
44
44
  participantEvent(TERMINAL_IDS, {
45
45
  id: "event-001-subject",
@@ -89,13 +89,13 @@ export function buildTerminalProductBundle(args) {
89
89
  {
90
90
  at: args.run.createdAt,
91
91
  event: "terminal-lab.run.created",
92
- message: `Created terminal-product lab run with one in-sandbox agent participant (actor ${args.actorId}, product ${args.productName}).`,
92
+ message: `Created a terminal-product run with one in-sandbox agent participant (actor ${args.actorId}, product ${args.productName}).`,
93
93
  },
94
94
  ],
95
95
  simulation,
96
96
  stream,
97
97
  events,
98
- redactionNotes: "Dry-run bundle: no sandbox ran, no key was injected, no exec output was captured. The author mission is public-safe committed lab text (redacted defensively); the composed prompt is bound by digest. The shipped live path applies scrubKnownValues then redactText at the capture source before persistence.",
98
+ redactionNotes: "Dry-run bundle: no sandbox ran, no key was injected, no exec output was captured. The author mission is public-safe committed study text (redacted defensively); the composed prompt is bound by digest. The shipped live path applies scrubKnownValues then redactText at the capture source before persistence.",
99
99
  review,
100
100
  });
101
101
  }
@@ -197,7 +197,7 @@ const TERMINAL_IDS = participantIds(0);
197
197
  function terminalParticipant(args, session) {
198
198
  const simulation = participantRecord(TERMINAL_IDS, 1, {
199
199
  personaId: args.persona.id,
200
- scenarioId: `terminal-${args.labId}`,
200
+ scenarioId: `terminal-${args.studyId}`,
201
201
  status: session.status,
202
202
  streamKind: "terminal",
203
203
  mode: "cli-sim",
@@ -210,7 +210,7 @@ function terminalParticipant(args, session) {
210
210
  const stream = participantStream(TERMINAL_IDS, {
211
211
  assignment: participantAssignment({ mission: args.mission }),
212
212
  kind: "terminal",
213
- label: `Terminal agent · ${args.labId}`,
213
+ label: `Terminal agent · ${args.studyId}`,
214
214
  status: session.status,
215
215
  transport: "snapshot",
216
216
  updatedAt: session.updatedAt,
@@ -237,17 +237,17 @@ function terminalRunBundle(args, parts) {
237
237
  persona: {
238
238
  id: args.persona.id,
239
239
  name: `Autonomous terminal agent (${args.persona.id})`,
240
- source: `study:${args.labId}`,
240
+ source: `study:${args.studyId}`,
241
241
  sourceDigest: args.persona.promptDigest,
242
242
  },
243
243
  scenario: {
244
- id: `terminal-${args.labId}`,
245
- title: args.labTitle ?? `Terminal-product lab: ${args.labId}`,
246
- // The author mission is public-safe committed lab text. It is recorded plaintext as the goal,
244
+ id: `terminal-${args.studyId}`,
245
+ title: args.studyTitle ?? `Terminal-product run: ${args.studyId}`,
246
+ // The author mission is public-safe committed study text. It is recorded plaintext as the goal,
247
247
  // redacted defensively before persisting (it never carries a secret, but the harness never
248
248
  // trusts that). The full composed prompt is bound by digest, not text.
249
249
  goal: redactText(args.mission),
250
- source: `study:${args.labId}`,
250
+ source: `study:${args.studyId}`,
251
251
  sourceDigest: args.persona.promptDigest,
252
252
  },
253
253
  lifecycle: parts.lifecycle,
@@ -1,4 +1,4 @@
1
- import type { LabRuntimeAuth } from "../../lab/types.js";
1
+ import type { StudyRuntimeAuth } from "../../study/types.js";
2
2
  /**
3
3
  * Resolve the runtime key on the host. Legacy openai-env passes it command-scoped; openai-egress
4
4
  * returns an inert command env while retaining the actual value for the external transform and
@@ -7,12 +7,12 @@ import type { LabRuntimeAuth } from "../../lab/types.js";
7
7
  */
8
8
  export declare function buildRuntimeAuth(args: {
9
9
  /** Undefined retains the historical openai-env default. */
10
- runtimeAuth: LabRuntimeAuth | undefined;
10
+ runtimeAuth: StudyRuntimeAuth | undefined;
11
11
  /** The operator environment the key value is read from (process.env or a test fake). */
12
12
  env: Record<string, string | undefined>;
13
13
  }): {
14
14
  ok: true;
15
- mode: LabRuntimeAuth;
15
+ mode: StudyRuntimeAuth;
16
16
  envs: Record<string, string>;
17
17
  keyName: string;
18
18
  keyValue: string;
@@ -28,7 +28,7 @@ export declare function buildRuntimeAuth(args: {
28
28
  * prompt/token/secret shapes; this builder makes that true by construction.
29
29
  */
30
30
  export declare function buildSandboxMetadata(allowlist: {
31
- labId: string;
31
+ studyId: string;
32
32
  recordId: string;
33
33
  runId: string;
34
34
  }): Record<string, string>;
@@ -1,5 +1,5 @@
1
1
  import { E2B_SYSTEM_CA_BUNDLE, OPENAI_EGRESS_PLACEHOLDER } from "./runtime-auth.js";
2
- import { TERMINAL_PRODUCT_LAB_PROVIDER_METADATA } from "./types.js";
2
+ import { TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA } from "./types.js";
3
3
  /**
4
4
  * Resolve the runtime key on the host. Legacy openai-env passes it command-scoped; openai-egress
5
5
  * returns an inert command env while retaining the actual value for the external transform and
@@ -38,7 +38,7 @@ export function buildRuntimeAuth(args) {
38
38
  return {
39
39
  ok: false,
40
40
  code: "HUMANISH_TERMINAL_RUNTIME_AUTH_MISSING",
41
- message: `Live terminal-product labs declare runtimeAuth "${String(args.runtimeAuth)}" and need ${ALLOWED_RUNTIME_KEY_NAMES.join(" or ")} in the environment (pass via --env-file; the selected auth mode places the value in command-scoped env or an external E2B header transform; the value is never persisted).`,
41
+ message: `Live terminal-product studies declare runtimeAuth "${String(args.runtimeAuth)}" and need ${ALLOWED_RUNTIME_KEY_NAMES.join(" or ")} in the environment (pass via --env-file; the selected auth mode places the value in command-scoped env or an external E2B header transform; the value is never persisted).`,
42
42
  };
43
43
  }
44
44
  const keyValue = args.env[keyName];
@@ -91,10 +91,10 @@ function isNonRuntimeCredentialName(name) {
91
91
  */
92
92
  export function buildSandboxMetadata(allowlist) {
93
93
  return {
94
- mode: TERMINAL_PRODUCT_LAB_PROVIDER_METADATA.mode,
95
- tool: TERMINAL_PRODUCT_LAB_PROVIDER_METADATA.tool,
94
+ mode: TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA.mode,
95
+ tool: TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA.tool,
96
96
  provider: "codex",
97
- labId: allowlist.labId,
97
+ labId: allowlist.studyId,
98
98
  recordId: allowlist.recordId,
99
99
  // The run id is a harness-minted token (terminal-<ts>-<hex>), not user data.
100
100
  runId: allowlist.runId,
@@ -1,11 +1,11 @@
1
- import type { TerminalPlan } from "../../lab/plan-types.js";
1
+ import type { TerminalPlan } from "../../study/plan-types.js";
2
2
  import type { RunScope } from "../../run/run.js";
3
- import { type RunLiveTerminalSessionArgs, type TerminalProductLabResult, type TerminalRunInput } from "./types.js";
3
+ import { type RunLiveTerminalSessionArgs, type TerminalProductStudyResult, type TerminalRunInput } from "./types.js";
4
4
  /**
5
5
  * The dry-run path: a contract bundle with the persona and prompt digest bound, published through
6
6
  * the run scope with no sandbox, key or spend.
7
7
  */
8
- export declare function runDryTerminalLab(args: {
8
+ export declare function runDryTerminalStudy(args: {
9
9
  plan: Extract<TerminalPlan, {
10
10
  readonly dryRun: true;
11
11
  }>;
@@ -14,7 +14,7 @@ export declare function runDryTerminalLab(args: {
14
14
  warnings: string[];
15
15
  failed: RunLiveTerminalSessionArgs["failed"];
16
16
  scope: RunScope;
17
- }): Promise<TerminalProductLabResult>;
17
+ }): Promise<TerminalProductStudyResult>;
18
18
  /** Compose the full prompt the agent would run. Bound to evidence by digest only. */
19
19
  export declare function composePrompt(args: {
20
20
  mission: string;
@@ -1,7 +1,7 @@
1
1
  // The terminal route's dry run: a contract-only bundle with the persona and prompt digest bound,
2
2
  // published through the run scope with no sandbox, key or spend. session.ts holds the live path.
3
3
  import { digestText, redactText, scrubLiterals } from "../../evidence/redaction.js";
4
- import { participantAssignment } from "../../lab/participant-assignment.js";
4
+ import { participantAssignment } from "../../study/participant-assignment.js";
5
5
  import { buildRunSource } from "../../run/bundle.js";
6
6
  import { judgeExecution, judgeTerminal, OUTCOME_POLICIES, resultOk } from "../../run/judge.js";
7
7
  import { validatePreparedRunArtifactPaths } from "../../run/paths.js";
@@ -15,7 +15,7 @@ import { studyResultIdentity } from "../../run/study-result.js";
15
15
  * The dry-run path: a contract bundle with the persona and prompt digest bound, published through
16
16
  * the run scope with no sandbox, key or spend.
17
17
  */
18
- export async function runDryTerminalLab(args) {
18
+ export async function runDryTerminalStudy(args) {
19
19
  const { plan, input, cwd, warnings, failed, scope } = args;
20
20
  const { product } = plan;
21
21
  const { evidenceMission, physicalCwd, persona } = await prepareDryPersona({
@@ -29,7 +29,7 @@ export async function runDryTerminalLab(args) {
29
29
  runId: input.runId,
30
30
  mintRunId: makeTerminalRunId,
31
31
  mode: "dry-run",
32
- lab: plan.lab,
32
+ study: plan.study,
33
33
  renderReview: renderTerminalReviewMarkdown,
34
34
  observer: { open: input.open === true, render: input.deps?.renderObserver },
35
35
  });
@@ -49,8 +49,8 @@ export async function runDryTerminalLab(args) {
49
49
  run,
50
50
  actorId: plan.actor,
51
51
  dryRun: true,
52
- labId: plan.labId,
53
- ...(plan.title ? { labTitle: plan.title } : {}),
52
+ studyId: plan.studyId,
53
+ ...(plan.title ? { studyTitle: plan.title } : {}),
54
54
  mission: evidenceMission,
55
55
  persona,
56
56
  productName: product.name,
@@ -77,13 +77,13 @@ export async function runDryTerminalLab(args) {
77
77
  : [
78
78
  {
79
79
  kind: "evidence",
80
- message: observer.error?.message ?? "Observer failed for the terminal-product lab run.",
80
+ message: observer.error?.message ?? "Observer failed for the terminal-product run.",
81
81
  },
82
82
  ], policy);
83
83
  const ok = resultOk({ judgment, execution, scorerFailures: [], policy });
84
84
  await finished.recordOutcome({ ok, execution });
85
85
  return {
86
- ...studyResultIdentity("terminal", plan.labId),
86
+ ...studyResultIdentity("terminal", plan.studyId),
87
87
  ok,
88
88
  cwd,
89
89
  actor: plan.actor,
@@ -97,7 +97,7 @@ export async function runDryTerminalLab(args) {
97
97
  : {
98
98
  error: {
99
99
  code: "HUMANISH_TERMINAL_FAILED",
100
- message: observer.error?.message ?? "Observer failed for the terminal-product lab run.",
100
+ message: observer.error?.message ?? "Observer failed for the terminal-product run.",
101
101
  },
102
102
  }),
103
103
  };
@@ -116,7 +116,7 @@ async function prepareDryPersona(args) {
116
116
  const evidenceMission = participantAssignment({ mission }, scrubLiterals(knownSecretValues)).mission;
117
117
  const terminalPersona = await resolveTerminalPersona({ plan, cwd, warnings });
118
118
  // The composed prompt = mission + persona + public-surface manifest. Only the author mission
119
- // goes plaintext into evidence (it is public-safe committed lab text); the full composed prompt
119
+ // goes plaintext into evidence (it is public-safe committed study text); the full composed prompt
120
120
  // is recorded as a digest (the safety contract's mission ruling).
121
121
  const composedPrompt = composePrompt({
122
122
  mission,
@@ -1,5 +1,5 @@
1
1
  import type { ActorTokenUsage } from "../../actors/contract.js";
2
- import type { LabScenarioCaps } from "../../lab/types.js";
2
+ import type { StudyScenarioCaps } from "../../study/types.js";
3
3
  import { type CostCategory } from "../../run/terminal-contract.js";
4
4
  import type { CostLine, NoSpendProof, TerminalCostLedger } from "./types.js";
5
5
  /**
@@ -41,7 +41,7 @@ export declare function buildNoSpendProof(ledger: TerminalCostLedger, maxUsd: nu
41
41
  * grant a green pass: the no-spend proof reports them as unmeasured. maxMinutes is wall-clock and is
42
42
  * enforced separately (runWithWallClock); it is not a ledger-derived cap.
43
43
  */
44
- export declare function evaluateCapsAgainstLedger(ledger: TerminalCostLedger, caps: LabScenarioCaps): {
44
+ export declare function evaluateCapsAgainstLedger(ledger: TerminalCostLedger, caps: StudyScenarioCaps): {
45
45
  ok: true;
46
46
  } | {
47
47
  ok: false;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The most the sandbox runs before the codex command starts: the Node bootstrap, the runtime
3
- * version check and, when the lab declares `subject.product.install`, the product setup.
3
+ * version check and, when the study declares `subject.product.install`, the product setup.
4
4
  */
5
5
  export declare function terminalPreExecBudgetMs(productInstall: boolean): number;
6
6
  /** The terminal sandbox's server-side timeout for a codex command bounded at `maxMinutes`. */
@@ -7,7 +7,7 @@ import { TERMINAL_RUNTIME_VERSION_TIMEOUT_MS } from "./runtime.js";
7
7
  import { PRODUCT_SETUP_TIMEOUT_MS, TERMINAL_SANDBOX_TIMEOUT_BUFFER_MS } from "./types.js";
8
8
  /**
9
9
  * The most the sandbox runs before the codex command starts: the Node bootstrap, the runtime
10
- * version check and, when the lab declares `subject.product.install`, the product setup.
10
+ * version check and, when the study declares `subject.product.install`, the product setup.
11
11
  */
12
12
  export function terminalPreExecBudgetMs(productInstall) {
13
13
  return (NODE_BOOTSTRAP_TIMEOUT_MS +
@@ -2,7 +2,7 @@ import type { ActorPersonaRef } from "../../actors/contract.js";
2
2
  import type { RunBundle } from "../../run/bundle.js";
3
3
  import type { RunScope } from "../../run/run.js";
4
4
  import type { LiveSandboxInputs, LiveTerminalSandbox } from "./live-sandbox.js";
5
- import type { RunLiveTerminalSessionArgs, TerminalProductLabResult } from "./types.js";
5
+ import type { RunLiveTerminalSessionArgs, TerminalProductStudyResult } from "./types.js";
6
6
  type StartedRun = Extract<Awaited<ReturnType<RunScope["startRun"]>>, {
7
7
  ok: true;
8
8
  }>["run"];
@@ -26,5 +26,5 @@ export interface LiveFinishInputs {
26
26
  /** The session's outcome; a blown cap overrides it. */
27
27
  session: LiveTerminalSandbox;
28
28
  }
29
- export declare function finishLiveTerminalSession(inputs: LiveFinishInputs): Promise<TerminalProductLabResult>;
29
+ export declare function finishLiveTerminalSession(inputs: LiveFinishInputs): Promise<TerminalProductStudyResult>;
30
30
  export {};
@@ -1,5 +1,5 @@
1
1
  // Finishing a live terminal session: the actor trace from the captured stream, the spend ledger
2
- // and its caps check, the evidence files, the bundle, and the lab result.
2
+ // and its caps check, the evidence files, the bundle, and the study result.
3
3
  import { buildRunCostSummary } from "../../run/cost-summary.js";
4
4
  import { writeContainedOutputFile } from "../../run/contained-output.js";
5
5
  import { validatePreparedRunArtifactPaths, } from "../../run/paths.js";
@@ -9,7 +9,7 @@ import { applyAdapterExtensionSeam } from "./adapter.js";
9
9
  import { buildLiveTerminalProductBundle } from "./bundle.js";
10
10
  import { buildCostLedger, buildNoSpendProof, describeMeasuredSpend, evaluateCapsAgainstLedger, noSpendLineMeasured, noSpendNotEstablished, } from "./ledger.js";
11
11
  import { foldScorerFailures, judgeExecution, judgeTerminal, OUTCOME_POLICIES, } from "../../run/judge.js";
12
- import { terminalExecutionFailures, terminalLabResult, terminalParticipantFacts, } from "./result.js";
12
+ import { terminalExecutionFailures, terminalStudyResult, terminalParticipantFacts, } from "./result.js";
13
13
  import { parseTerminalTokenUsage } from "./token-usage.js";
14
14
  import { buildTerminalActorTrace, scrubSplitKnownValues, tailOf } from "./trace.js";
15
15
  function buildLiveTrace(inputs) {
@@ -125,8 +125,8 @@ export async function finishLiveTerminalSession(inputs) {
125
125
  const bundle = buildLiveTerminalProductBundle({
126
126
  run,
127
127
  actorId: plan.actor,
128
- labId: plan.labId,
129
- ...(plan.title ? { labTitle: plan.title } : {}),
128
+ studyId: plan.studyId,
129
+ ...(plan.title ? { studyTitle: plan.title } : {}),
130
130
  mission: sanitize(mission),
131
131
  persona,
132
132
  productName: product.name,
@@ -161,7 +161,7 @@ export async function finishLiveTerminalSession(inputs) {
161
161
  ledgers,
162
162
  transcript: normalizedTranscript,
163
163
  product: product.name,
164
- labId: plan.labId,
164
+ studyId: plan.studyId,
165
165
  runId,
166
166
  sanitize,
167
167
  warnings,
@@ -182,9 +182,9 @@ export async function finishLiveTerminalSession(inputs) {
182
182
  cleanup: session.cleanup,
183
183
  observer,
184
184
  }), OUTCOME_POLICIES.terminal);
185
- const result = terminalLabResult({
185
+ const result = terminalStudyResult({
186
186
  cwd,
187
- labId: plan.labId,
187
+ studyId: plan.studyId,
188
188
  actorId: plan.actor,
189
189
  productName: product.name,
190
190
  runId,
@@ -5,7 +5,7 @@ import type { buildRuntimeAuth, buildSandboxMetadata } from "./credentials.js";
5
5
  import type { createTerminalRecorder } from "./recorder.js";
6
6
  import { type declaredRuntimeProvenance } from "./runtime.js";
7
7
  import { type LiveTerminalPlan, type TerminalLedgers } from "./types.js";
8
- import type { LabDeps } from "../../lab/lab-deps.js";
8
+ import type { StudyDeps } from "../../study/study-deps.js";
9
9
  type StartedRun = Extract<Awaited<ReturnType<RunScope["startRun"]>>, {
10
10
  ok: true;
11
11
  }>["run"];
@@ -13,7 +13,7 @@ type StartedRun = Extract<Awaited<ReturnType<RunScope["startRun"]>>, {
13
13
  export interface LiveSandboxInputs {
14
14
  plan: LiveTerminalPlan;
15
15
  cwd: string;
16
- deps: LabDeps;
16
+ deps: StudyDeps;
17
17
  now: () => number;
18
18
  nowIso: () => string;
19
19
  sanitize: (text: string) => string;