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,11 +1,11 @@
1
1
  import { Command } from "commander";
2
2
  import { listUserKeys, resolveKeyName, setUserKey, unsetUserKey, userKeyStorePath, } from "../../keys/key-resolution.js";
3
3
  import { promptSecret } from "../secret-prompt.js";
4
- import { runInit } from "../../lab/init.js";
4
+ import { runInit } from "../../study/init.js";
5
5
  import { buildPayload, disabledByEnvironment, readTelemetryState, telemetryStatePath, writeTelemetryState, } from "../telemetry.js";
6
6
  import { doctor } from "../doctor.js";
7
- import { oldStudyOption, studyOptionValue } from "../deprecations.js";
8
7
  import { applyEnvFileOption, CLI_VERSION, CWD_OPTION_DESCRIPTION, ENV_FILE_OPTION_DESCRIPTION, JSON_OPTION_DESCRIPTION, markInvocationEnvelopeWritten, wantsJson, writeResult, formatCliError, } from "../io.js";
8
+ import { plural } from "../../run/text.js";
9
9
  export function registerInitCommand(parent, io) {
10
10
  parent
11
11
  .command("init")
@@ -51,15 +51,13 @@ export function registerDoctorCommand(parent, io) {
51
51
  .summary("Check what this project and machine need for a run.")
52
52
  .option("--cwd <path>", CWD_OPTION_DESCRIPTION, ".")
53
53
  .option("--study <study>", "Check the study's desktop, participant authentication and separate analysis requirements; no provider calls.")
54
- .addOption(oldStudyOption("study"))
55
54
  .option("--env-file <path>", ENV_FILE_OPTION_DESCRIPTION)
56
55
  .option("--json", JSON_OPTION_DESCRIPTION)
57
56
  .action(async (options, command) => {
58
- const study = studyOptionValue(command, io, options);
59
57
  if (options.envFile &&
60
58
  !(await applyEnvFileOption({ command, cwd: options.cwd, envFile: options.envFile, io })))
61
59
  return;
62
- const result = await doctor(options.cwd, study ? { lab: study } : {});
60
+ const result = await doctor(options.cwd, options.study ? { study: options.study } : {});
63
61
  writeResult(command, io, result, formatDoctorHuman);
64
62
  // Behavioral change: was exit 1, every other structured command uses 2.
65
63
  io.setExitCode(result.ok ? 0 : 2);
@@ -116,7 +114,7 @@ export function registerTelemetryCommand(parent, io) {
116
114
  "every field that is sent, with example values:",
117
115
  JSON.stringify(sample, null, 2),
118
116
  "",
119
- "never sent: labs you wrote, subjects, personas, missions, paths, run evidence, key names or values.",
117
+ "never sent: studies you wrote, subjects, personas, missions, paths, run evidence, key names or values.",
120
118
  "",
121
119
  "humanish telemetry disable turns it off",
122
120
  ].join("\n") + "\n");
@@ -272,7 +270,7 @@ export function registerKeysCommand(parent, io) {
272
270
  names,
273
271
  message: names.length === 0
274
272
  ? "The store is empty. Add a key with `humanish keys set <vendor>`."
275
- : `${names.length} key name(s) stored. Values are never printed.`,
273
+ : `${plural(names.length, "key name")} stored. Values are never printed.`,
276
274
  };
277
275
  writeResult(command, io, result, formatKeysHuman);
278
276
  io.setExitCode(0);
@@ -0,0 +1,9 @@
1
+ import type { HumanOutput } from "../io.js";
2
+ import type { CuaActorStudyResult } from "../../routes/computer-use/types.js";
3
+ import type { ScriptedBrowserStudyResult } from "../../routes/scripted/types.js";
4
+ import type { TerminalProductStudyResult } from "../../routes/terminal/types.js";
5
+ import type { ConcurrentSharedWorldStudyResult } from "../../routes/shared-world/types.js";
6
+ export declare function formatConcurrentSharedWorldStudyHuman(result: ConcurrentSharedWorldStudyResult): HumanOutput;
7
+ export declare function formatTerminalStudyHuman(result: TerminalProductStudyResult): HumanOutput;
8
+ export declare function formatScriptedStudyHuman(result: ScriptedBrowserStudyResult): HumanOutput;
9
+ export declare function formatCuaStudyHuman(result: CuaActorStudyResult): HumanOutput;
@@ -1,5 +1,5 @@
1
1
  import { formatCuaDiagnostics, formatCuaStopCause } from "../../routes/computer-use/diagnostics.js";
2
- /** A lab run's first lines: the command that ran, whether it was a dry run, how it ended, and its route. */
2
+ /** A run's first lines: the command that ran, whether it was a dry run, how it ended, and its route. */
3
3
  function runHeader(result, route) {
4
4
  const kind = result.dryRun === true ? "dry run" : result.dryRun === false ? "live run" : "run";
5
5
  return [
@@ -19,7 +19,7 @@ function withError(error, lines) {
19
19
  function participantStatus(status) {
20
20
  return status === "contract_proof_only" ? "dry run, nothing ran live" : status;
21
21
  }
22
- export function formatConcurrentSharedWorldLabHuman(result) {
22
+ export function formatConcurrentSharedWorldStudyHuman(result) {
23
23
  return withError(result.error, [
24
24
  ...runHeader(result, "shared-world"),
25
25
  `run: ${result.runId}`,
@@ -47,7 +47,7 @@ export function formatConcurrentSharedWorldLabHuman(result) {
47
47
  ...result.warnings.map((warning) => `warning: ${warning}`),
48
48
  ]);
49
49
  }
50
- export function formatTerminalLabHuman(result) {
50
+ export function formatTerminalStudyHuman(result) {
51
51
  return withError(result.error, [
52
52
  ...runHeader(result, "terminal"),
53
53
  `run: ${result.runId}`,
@@ -60,7 +60,7 @@ export function formatTerminalLabHuman(result) {
60
60
  ...result.warnings.map((warning) => `warning: ${warning}`),
61
61
  ]);
62
62
  }
63
- export function formatScriptedLabHuman(result) {
63
+ export function formatScriptedStudyHuman(result) {
64
64
  return withError(result.error, [
65
65
  ...runHeader(result, "scripted"),
66
66
  `run: ${result.runId}`,
@@ -79,7 +79,7 @@ export function formatScriptedLabHuman(result) {
79
79
  ...result.warnings.map((warning) => `warning: ${warning}`),
80
80
  ]);
81
81
  }
82
- export function formatCuaLabHuman(result) {
82
+ export function formatCuaStudyHuman(result) {
83
83
  return withError(result.error, [
84
84
  ...runHeader(result, "computer-use"),
85
85
  `run: ${result.runId}`,
@@ -1,16 +1,16 @@
1
1
  import { Command } from "commander";
2
- import type { LabConfig } from "../../lab/types.js";
3
- import { type CliIo, type LabCommandOptions } from "../io.js";
4
- import type { RouteRun } from "./lab-route-run.js";
2
+ import type { StudyConfig } from "../../study/types.js";
3
+ import { type CliIo, type StudyCommandOptions } from "../io.js";
4
+ import type { RouteRun } from "./study-route-run.js";
5
5
  interface ComputerUseRouteArgs {
6
6
  command: Command;
7
7
  io: CliIo;
8
- config: LabConfig;
8
+ config: StudyConfig;
9
9
  mode: "run" | "watch";
10
- options: LabCommandOptions;
10
+ options: StudyCommandOptions;
11
11
  }
12
12
  /**
13
- * The computer-use route's CLI setup: its settings, the watch and exposure plan, the runLab options
13
+ * The computer-use route's CLI setup: its settings, the watch and exposure plan, the runStudyWith options
14
14
  * with the live Observer hook, and how it presents the outcome or a run error. Undefined when
15
15
  * setup has already written its own result.
16
16
  */
@@ -1,19 +1,19 @@
1
1
  import { automaticAnalysisSucceeded } from "../../analysis/automatic-completion.js";
2
2
  import { Command } from "commander";
3
- import {} from "../../run-lab.js";
4
- import { resolveLabDryRun } from "../../lab/plan.js";
3
+ import {} from "../../run-study.js";
4
+ import { resolveStudyDryRun } from "../../study/plan.js";
5
5
  import { serveObserver } from "../../observer/render.js";
6
6
  import { startExposedObserver, validateExposure } from "../../observer/exposure.js";
7
7
  import { ServeTunnelError } from "../../observer/tunnel.js";
8
8
  import { cliAnalysisOptions } from "./analysis-signals.js";
9
9
  import { onRunShutdown } from "./run-signals.js";
10
- import { parseLabCount, parseParticipantIds, parseObserverPort, wantsJson, writeResult, } from "../io.js";
10
+ import { parseStudyCount, parseParticipantIds, parseObserverPort, wantsJson, writeResult, } from "../io.js";
11
11
  import { exposureRequestFromOptions, followObserver, planObserver, showObserver, staticObserverOpen, withObserverServer, } from "../observer-follow.js";
12
- import { formatCuaLabHuman } from "./lab-format.js";
13
- import { resolveRouteShouldOpen } from "./lab-route-open.js";
12
+ import { formatCuaStudyHuman } from "./study-format.js";
13
+ import { resolveRouteShouldOpen } from "./study-route-open.js";
14
14
  import { studyResultIdentity } from "../../run/study-result.js";
15
15
  /**
16
- * The computer-use route's CLI setup: its settings, the watch and exposure plan, the runLab options
16
+ * The computer-use route's CLI setup: its settings, the watch and exposure plan, the runStudyWith options
17
17
  * with the live Observer hook, and how it presents the outcome or a run error. Undefined when
18
18
  * setup has already written its own result.
19
19
  */
@@ -60,7 +60,7 @@ function refuseCua(args, dryRun, code, message) {
60
60
  warnings: [],
61
61
  error: { code, message },
62
62
  };
63
- writeResult(args.command, args.io, result, formatCuaLabHuman);
63
+ writeResult(args.command, args.io, result, formatCuaStudyHuman);
64
64
  args.io.setExitCode(2);
65
65
  }
66
66
  /** Parses the options, or writes the refusal and returns undefined. */
@@ -78,13 +78,13 @@ function resolveCuaSettings(args) {
78
78
  args.io.setExitCode(2);
79
79
  return undefined;
80
80
  }
81
- const count = parseLabCount(args.options.count, args.config.actors[0]?.count ?? 1);
81
+ const count = parseStudyCount(args.options.count, args.config.actors[0]?.count ?? 1);
82
82
  if (count === null) {
83
83
  args.io.writeErr("error: --count must be a positive integer.\n");
84
84
  args.io.setExitCode(2);
85
85
  return undefined;
86
86
  }
87
- const dryRun = resolveLabDryRun(args.config, args.options.dryRun, true) ?? true;
87
+ const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
88
88
  const port = parseObserverPort(args.options.port ?? "0");
89
89
  const wantsFollow = args.mode === "watch" && !wantsMachine && args.options.detach !== true && dryRun !== true;
90
90
  if (port === null) {
@@ -122,7 +122,7 @@ function prepareCuaWatch(args, settings) {
122
122
  return undefined;
123
123
  return { exposure: exposeValidation.plan, finishedPlan };
124
124
  }
125
- /** The runLab options for this invocation, with the live Observer hook for a followed watch. */
125
+ /** The runStudyWith options for this invocation, with the live Observer hook for a followed watch. */
126
126
  function cuaRunOptions(args, settings, prepared, live) {
127
127
  const { finishedPlan } = prepared;
128
128
  return {
@@ -140,7 +140,7 @@ function cuaRunOptions(args, settings, prepared, live) {
140
140
  dryRun: settings.dryRun,
141
141
  ...(settings.wantsFollow
142
142
  ? {
143
- // Fires inside runLab, before the actor loop and before sandbox creation, so a
143
+ // Fires inside runStudyWith, before the actor loop and before sandbox creation, so a
144
144
  // tunnel-auth failure aborts before any spend and leaves no orphaned sandbox.
145
145
  onObserverReady: (observer) => attachLiveObserver(args.io, settings, prepared.exposure, live, observer),
146
146
  }
@@ -235,7 +235,7 @@ async function reportCuaRun(args, prepared, result, live) {
235
235
  ],
236
236
  };
237
237
  }
238
- writeResult(args.command, args.io, output, formatCuaLabHuman);
238
+ writeResult(args.command, args.io, output, formatCuaStudyHuman);
239
239
  args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
240
240
  if (server && (result.observer?.ok || attachedObserver)) {
241
241
  const followResult = output.observer?.ok
@@ -1,10 +1,10 @@
1
1
  import { Command } from "commander";
2
- import type { CliIo, LabCommandOptions } from "../io.js";
2
+ import type { CliIo, StudyCommandOptions } from "../io.js";
3
3
  import { type ObserverPlan } from "../observer-follow.js";
4
4
  /**
5
- * Default browser-open policy for a lab route's run. Mirrors the observe/watch gate:
5
+ * Default browser-open policy for a study route's run. Mirrors the observe/watch gate:
6
6
  * an explicit --open/--no-open wins; --json (machine mode) never auto-opens; otherwise a
7
- * lab-config `defaults.open` wins, and the final fallback opens only for an interactive
7
+ * study-file `defaults.open` wins, and the final fallback opens only for an interactive
8
8
  * `watch` on a real TTY. Extracted so every route's CLI setup shares one gate (and one test).
9
9
  */
10
10
  export declare function resolveRouteShouldOpen(args: {
@@ -21,7 +21,7 @@ export declare function watchFinishedPlan(args: {
21
21
  command: Command;
22
22
  io: CliIo;
23
23
  mode: "run" | "watch";
24
- options: LabCommandOptions;
24
+ options: StudyCommandOptions;
25
25
  }, wantsMachine: boolean, shouldOpen: boolean): ObserverPlan | null | undefined;
26
26
  /** The route's static render opens only when nothing else will open the Observer. */
27
27
  export declare function observerOpen(mode: "run" | "watch", finishedPlan: ObserverPlan | undefined, shouldOpen: boolean): boolean;
@@ -1,9 +1,9 @@
1
1
  import { Command } from "commander";
2
2
  import { planObserver, staticObserverOpen } from "../observer-follow.js";
3
3
  /**
4
- * Default browser-open policy for a lab route's run. Mirrors the observe/watch gate:
4
+ * Default browser-open policy for a study route's run. Mirrors the observe/watch gate:
5
5
  * an explicit --open/--no-open wins; --json (machine mode) never auto-opens; otherwise a
6
- * lab-config `defaults.open` wins, and the final fallback opens only for an interactive
6
+ * study-file `defaults.open` wins, and the final fallback opens only for an interactive
7
7
  * `watch` on a real TTY. Extracted so every route's CLI setup shares one gate (and one test).
8
8
  */
9
9
  export function resolveRouteShouldOpen(args) {
@@ -1,17 +1,17 @@
1
1
  import { Command } from "commander";
2
- import type { LabConfig } from "../../lab/types.js";
3
- import { type CliIo, type LabCommandOptions } from "../io.js";
4
- import type { RouteRun } from "./lab-route-run.js";
2
+ import type { StudyConfig } from "../../study/types.js";
3
+ import { type CliIo, type StudyCommandOptions } from "../io.js";
4
+ import type { RouteRun } from "./study-route-run.js";
5
5
  interface PreviewRouteArgs {
6
6
  command: Command;
7
7
  io: CliIo;
8
- lab: string;
9
- config: LabConfig;
8
+ study: string;
9
+ config: StudyConfig;
10
10
  mode: "run" | "watch";
11
- options: LabCommandOptions;
11
+ options: StudyCommandOptions;
12
12
  }
13
13
  /**
14
- * The preview route's CLI setup: the participant count and Observer plan, its runLab options, and how it
14
+ * The preview route's CLI setup: the participant count and Observer plan, its runStudyWith options, and how it
15
15
  * presents the outcome. Undefined when setup has already written its own result.
16
16
  */
17
17
  export declare function previewRouteRun(args: PreviewRouteArgs): RouteRun | undefined;
@@ -1,13 +1,13 @@
1
1
  import { Command } from "commander";
2
2
  import { studyResultIdentity } from "../../run/study-result.js";
3
- import { formatRunHuman, parseLabCount, writeResult, } from "../io.js";
3
+ import { formatRunHuman, parseStudyCount, writeResult, } from "../io.js";
4
4
  import { planObserver, showObserver, staticObserverOpen } from "../observer-follow.js";
5
5
  /**
6
- * The preview route's CLI setup: the participant count and Observer plan, its runLab options, and how it
6
+ * The preview route's CLI setup: the participant count and Observer plan, its runStudyWith options, and how it
7
7
  * presents the outcome. Undefined when setup has already written its own result.
8
8
  */
9
9
  export function previewRouteRun(args) {
10
- const participantCount = parseLabCount(args.options.count, args.config.actors[0]?.count ?? 4);
10
+ const participantCount = parseStudyCount(args.options.count, args.config.actors[0]?.count ?? 4);
11
11
  if (participantCount === null) {
12
12
  const result = {
13
13
  ...studyResultIdentity("preview", args.config.id),
@@ -0,0 +1,19 @@
1
+ import { type InternalRunStudyOptions, type StudyOutcome } from "../../run-study.js";
2
+ import type { StudyConfig } from "../../study/types.js";
3
+ import type { LoadedAdapterScorer } from "./study-scorer.js";
4
+ export interface RouteRun {
5
+ readonly options: InternalRunStudyOptions;
6
+ present(outcome: StudyOutcome): Promise<void>;
7
+ /** Handles an error runStudyWith threw, and rethrows any it does not handle. */
8
+ onRunError?(error: unknown): Promise<void>;
9
+ }
10
+ /**
11
+ * Plans the study with a route's options, then presents the refusal or the run. `beforeRun` runs
12
+ * only for a plan that will run: it loads the scorer, or writes its own refusal and returns
13
+ * undefined, so a refused study never imports the scorer's host code. `afterRun` runs once runStudyWith
14
+ * has returned or thrown, before presentation, which may hold its own signal handlers (watch's
15
+ * Observer and tunnel).
16
+ */
17
+ export declare function runRoute(config: StudyConfig, run: RouteRun, beforeRun?: () => Promise<{
18
+ scorer?: LoadedAdapterScorer;
19
+ } | undefined>, afterRun?: () => void): Promise<void>;
@@ -1,17 +1,17 @@
1
- // What a route's CLI setup hands the lab command: the runLab options it chose and how it presents
2
- // the outcome. runRoute plans the lab once and runs it between the two.
3
- import { prepareLab } from "../../run-lab.js";
1
+ // What a route's CLI setup hands the run command: the runStudyWith options it chose and how it presents
2
+ // the outcome. runRoute plans the study once and runs it between the two.
3
+ import { prepareStudy } from "../../run-study.js";
4
4
  /**
5
- * Plans the lab with a route's options, then presents the refusal or the run. `beforeRun` runs
5
+ * Plans the study with a route's options, then presents the refusal or the run. `beforeRun` runs
6
6
  * only for a plan that will run: it loads the scorer, or writes its own refusal and returns
7
- * undefined, so a refused lab never imports the scorer's host code. `afterRun` runs once runLab
7
+ * undefined, so a refused study never imports the scorer's host code. `afterRun` runs once runStudyWith
8
8
  * has returned or thrown, before presentation, which may hold its own signal handlers (watch's
9
9
  * Observer and tunnel).
10
10
  */
11
11
  export async function runRoute(config, run, beforeRun = () => Promise.resolve({}), afterRun = () => undefined) {
12
12
  let outcome;
13
13
  try {
14
- const prepared = await prepareLab(config, run.options);
14
+ const prepared = await prepareStudy(config, run.options);
15
15
  if (prepared.ok) {
16
16
  const ready = await beforeRun();
17
17
  if (ready === undefined)
@@ -0,0 +1,17 @@
1
+ import { Command } from "commander";
2
+ import type { StudyConfig } from "../../study/types.js";
3
+ import { type CliIo, type StudyCommandOptions } from "../io.js";
4
+ import type { RouteRun } from "./study-route-run.js";
5
+ interface ScriptedRouteArgs {
6
+ command: Command;
7
+ io: CliIo;
8
+ config: StudyConfig;
9
+ mode: "run" | "watch";
10
+ options: StudyCommandOptions;
11
+ }
12
+ /**
13
+ * The scripted route's CLI setup: its open semantics and runStudyWith options, and how it presents the
14
+ * outcome. Undefined when watch-mode setup has already written its own result.
15
+ */
16
+ export declare function scriptedRouteRun(args: ScriptedRouteArgs): RouteRun | undefined;
17
+ export {};
@@ -3,10 +3,10 @@ import { Command } from "commander";
3
3
  import { cliAnalysisOptions } from "./analysis-signals.js";
4
4
  import { wantsJson, writeResult } from "../io.js";
5
5
  import { showObserver } from "../observer-follow.js";
6
- import { formatScriptedLabHuman } from "./lab-format.js";
7
- import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./lab-route-open.js";
6
+ import { formatScriptedStudyHuman } from "./study-format.js";
7
+ import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./study-route-open.js";
8
8
  /**
9
- * The scripted route's CLI setup: its open semantics and runLab options, and how it presents the
9
+ * The scripted route's CLI setup: its open semantics and runStudyWith options, and how it presents the
10
10
  * outcome. Undefined when watch-mode setup has already written its own result.
11
11
  */
12
12
  export function scriptedRouteRun(args) {
@@ -33,7 +33,7 @@ export function scriptedRouteRun(args) {
33
33
  throw new Error(`Expected the scripted route, got ${outcome.route}.`);
34
34
  }
35
35
  const result = outcome.result;
36
- writeResult(args.command, args.io, result, formatScriptedLabHuman);
36
+ writeResult(args.command, args.io, result, formatScriptedStudyHuman);
37
37
  args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
38
38
  // Watch mode serves the Observer the route rendered through its finished run.
39
39
  if (finishedPlan !== undefined && result.ok && result.observer !== undefined) {
@@ -1,13 +1,13 @@
1
1
  import { Command } from "commander";
2
- import type { LabConfig } from "../../lab/types.js";
3
- import { type CliIo, type LabCommandOptions } from "../io.js";
4
- import type { RouteRun } from "./lab-route-run.js";
2
+ import type { StudyConfig } from "../../study/types.js";
3
+ import { type CliIo, type StudyCommandOptions } from "../io.js";
4
+ import type { RouteRun } from "./study-route-run.js";
5
5
  interface SharedWorldRouteArgs {
6
6
  command: Command;
7
7
  io: CliIo;
8
- config: LabConfig;
8
+ config: StudyConfig;
9
9
  mode: "run" | "watch";
10
- options: LabCommandOptions;
10
+ options: StudyCommandOptions;
11
11
  }
12
12
  /**
13
13
  * The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
@@ -1,14 +1,14 @@
1
1
  import { automaticAnalysisSucceeded } from "../../analysis/automatic-completion.js";
2
2
  import { Command } from "commander";
3
- import { resolveLabDryRun } from "../../lab/plan.js";
3
+ import { resolveStudyDryRun } from "../../study/plan.js";
4
4
  import { serveObserver } from "../../observer/render.js";
5
5
  import { redactText } from "../../evidence/redaction.js";
6
6
  import { cliAnalysisOptions } from "./analysis-signals.js";
7
7
  import { parseObserverPort, wantsJson, writeResult, } from "../io.js";
8
8
  import { followObserver, showObserver, staticObserverOpen, withObserverServer, } from "../observer-follow.js";
9
- import { formatConcurrentSharedWorldLabHuman } from "./lab-format.js";
10
- import { resolveRouteShouldOpen, watchFinishedPlan } from "./lab-route-open.js";
11
- import { rosterOf } from "../../lab/parse/actors.js";
9
+ import { formatConcurrentSharedWorldStudyHuman } from "./study-format.js";
10
+ import { resolveRouteShouldOpen, watchFinishedPlan } from "./study-route-open.js";
11
+ import { rosterOf } from "../../study/parse/actors.js";
12
12
  import { studyResultIdentity } from "../../run/study-result.js";
13
13
  /**
14
14
  * The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
@@ -17,7 +17,7 @@ import { studyResultIdentity } from "../../run/study-result.js";
17
17
  */
18
18
  export function sharedWorldRouteRun(args) {
19
19
  const wantsMachine = wantsJson(args.command);
20
- const dryRun = resolveLabDryRun(args.config, args.options.dryRun, true) ?? true;
20
+ const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
21
21
  const shouldOpen = resolveRouteShouldOpen({
22
22
  optionOpen: args.options.open,
23
23
  defaultsOpen: args.config.defaults?.open,
@@ -42,7 +42,7 @@ export function sharedWorldRouteRun(args) {
42
42
  warnings: [],
43
43
  error: { code: "HUMANISH_SHARED_WORLD_FAILED", message },
44
44
  };
45
- writeResult(args.command, args.io, result, formatConcurrentSharedWorldLabHuman);
45
+ writeResult(args.command, args.io, result, formatConcurrentSharedWorldStudyHuman);
46
46
  args.io.setExitCode(2);
47
47
  };
48
48
  if (wantsFollow && port === null) {
@@ -116,7 +116,7 @@ export function sharedWorldRouteRun(args) {
116
116
  ],
117
117
  };
118
118
  }
119
- writeResult(args.command, args.io, output, formatConcurrentSharedWorldLabHuman);
119
+ writeResult(args.command, args.io, output, formatConcurrentSharedWorldStudyHuman);
120
120
  args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
121
121
  if (server && output.observer?.ok) {
122
122
  await followObserver(args.io, output.observer, server);
@@ -0,0 +1,17 @@
1
+ import { Command } from "commander";
2
+ import type { StudyConfig } from "../../study/types.js";
3
+ import { type CliIo, type StudyCommandOptions } from "../io.js";
4
+ import type { RouteRun } from "./study-route-run.js";
5
+ interface TerminalRouteArgs {
6
+ command: Command;
7
+ io: CliIo;
8
+ config: StudyConfig;
9
+ mode: "run" | "watch";
10
+ options: StudyCommandOptions;
11
+ }
12
+ /**
13
+ * The terminal route's CLI setup: its open semantics and runStudyWith options, and how it presents the
14
+ * outcome. Undefined when watch-mode setup has already written its own result.
15
+ */
16
+ export declare function terminalRouteRun(args: TerminalRouteArgs): RouteRun | undefined;
17
+ export {};
@@ -3,10 +3,10 @@ import { Command } from "commander";
3
3
  import { cliAnalysisOptions } from "./analysis-signals.js";
4
4
  import { wantsJson, writeResult } from "../io.js";
5
5
  import { showObserver } from "../observer-follow.js";
6
- import { formatTerminalLabHuman } from "./lab-format.js";
7
- import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./lab-route-open.js";
6
+ import { formatTerminalStudyHuman } from "./study-format.js";
7
+ import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./study-route-open.js";
8
8
  /**
9
- * The terminal route's CLI setup: its open semantics and runLab options, and how it presents the
9
+ * The terminal route's CLI setup: its open semantics and runStudyWith options, and how it presents the
10
10
  * outcome. Undefined when watch-mode setup has already written its own result.
11
11
  */
12
12
  export function terminalRouteRun(args) {
@@ -33,7 +33,7 @@ export function terminalRouteRun(args) {
33
33
  throw new Error(`Expected the terminal route, got ${outcome.route}.`);
34
34
  }
35
35
  const result = outcome.result;
36
- writeResult(args.command, args.io, result, formatTerminalLabHuman);
36
+ writeResult(args.command, args.io, result, formatTerminalStudyHuman);
37
37
  args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
38
38
  if (finishedPlan !== undefined && result.ok && result.observer !== undefined) {
39
39
  await showObserver({
@@ -0,0 +1,9 @@
1
+ import { Command } from "commander";
2
+ import { type CliIo, type StudyCommandOptions } from "../io.js";
3
+ export declare function runStudyCommand(args: {
4
+ command: Command;
5
+ io: CliIo;
6
+ study: string;
7
+ mode: "run" | "watch";
8
+ options: StudyCommandOptions;
9
+ }): Promise<void>;