humanish 0.107.0 → 0.109.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (671) hide show
  1. package/ARCHITECTURE.md +73 -69
  2. package/CHANGELOG.md +27 -0
  3. package/CONTEXT.md +51 -44
  4. package/README.md +148 -175
  5. package/SECURITY.md +16 -26
  6. package/TELEMETRY.md +8 -6
  7. package/dist/actors/affordance.d.ts +4 -4
  8. package/dist/actors/affordance.js +12 -12
  9. package/dist/actors/agent-session.d.ts +2 -2
  10. package/dist/actors/agent-session.js +7 -7
  11. package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
  12. package/dist/actors/codex/app-server-actor-trace.js +1 -1
  13. package/dist/actors/codex/app-server-trace.js +2 -1
  14. package/dist/actors/codex/app-server-ui.js +1 -1
  15. package/dist/actors/codex/codex-admission.d.ts +91 -0
  16. package/dist/actors/codex/codex-admission.js +150 -0
  17. package/dist/actors/codex/restricted-executable.d.ts +4 -4
  18. package/dist/actors/codex/restricted-executable.js +8 -8
  19. package/dist/actors/codex/restricted-launch.d.ts +2 -1
  20. package/dist/actors/codex/restricted-launch.js +1 -1
  21. package/dist/actors/codex/restricted-participant.js +20 -18
  22. package/dist/actors/codex/restricted-policy.d.ts +2 -2
  23. package/dist/actors/codex/restricted-policy.js +2 -2
  24. package/dist/actors/codex/restricted-session.d.ts +3 -3
  25. package/dist/actors/codex/restricted-session.js +10 -5
  26. package/dist/actors/computer-use/actor.d.ts +18 -18
  27. package/dist/actors/computer-use/actor.js +4 -4
  28. package/dist/actors/computer-use/admission-limit.d.ts +3 -3
  29. package/dist/actors/computer-use/admission-limit.js +4 -4
  30. package/dist/actors/computer-use/executor-error.d.ts +2 -2
  31. package/dist/actors/computer-use/executor-error.js +3 -3
  32. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  33. package/dist/actors/computer-use/loop/actions.js +15 -15
  34. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  35. package/dist/actors/computer-use/loop/backstop.js +14 -12
  36. package/dist/actors/computer-use/loop/debrief.js +2 -2
  37. package/dist/actors/computer-use/loop/ending.d.ts +6 -6
  38. package/dist/actors/computer-use/loop/ending.js +18 -17
  39. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  40. package/dist/actors/computer-use/loop/observation.js +15 -14
  41. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  42. package/dist/actors/computer-use/loop/provider-call.js +12 -12
  43. package/dist/actors/computer-use/loop/session.d.ts +4 -4
  44. package/dist/actors/computer-use/loop/session.js +4 -4
  45. package/dist/actors/computer-use/loop/spend.d.ts +1 -1
  46. package/dist/actors/computer-use/loop/spend.js +1 -1
  47. package/dist/actors/computer-use/loop/trace.js +11 -9
  48. package/dist/actors/computer-use/loop/types.d.ts +47 -45
  49. package/dist/actors/computer-use/loop/usage.d.ts +2 -2
  50. package/dist/actors/computer-use/loop/usage.js +2 -2
  51. package/dist/actors/computer-use/loop.d.ts +6 -1
  52. package/dist/actors/computer-use/loop.js +26 -4
  53. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  54. package/dist/actors/computer-use/openai-context.js +214 -0
  55. package/dist/actors/computer-use/openai-provider.d.ts +13 -10
  56. package/dist/actors/computer-use/openai-provider.js +52 -41
  57. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  58. package/dist/actors/computer-use/openai-requests.js +82 -15
  59. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  60. package/dist/actors/computer-use/openai-wire.js +36 -34
  61. package/dist/actors/computer-use/provider-error.d.ts +4 -4
  62. package/dist/actors/computer-use/provider-error.js +6 -6
  63. package/dist/actors/contract.d.ts +82 -47
  64. package/dist/actors/contract.js +30 -24
  65. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  66. package/dist/actors/local-agent/claude-session.js +13 -12
  67. package/dist/actors/local-agent/cli.d.ts +9 -7
  68. package/dist/actors/local-agent/cli.js +24 -28
  69. package/dist/actors/local-agent/readiness.d.ts +2 -2
  70. package/dist/actors/local-agent/readiness.js +4 -4
  71. package/dist/actors/reasoning-effort.js +8 -8
  72. package/dist/actors/registry.d.ts +12 -12
  73. package/dist/actors/registry.js +21 -20
  74. package/dist/actors/scripted-browser/actor.d.ts +10 -10
  75. package/dist/actors/scripted-browser/actor.js +17 -17
  76. package/dist/actors/scripted-browser/browser-command.js +1 -1
  77. package/dist/actors/scripted-browser/steps.js +1 -1
  78. package/dist/actors/scripted-browser/types.d.ts +1 -1
  79. package/dist/actors/stop-conditions.d.ts +1 -1
  80. package/dist/analysis/automatic-completion.d.ts +7 -7
  81. package/dist/analysis/automatic-completion.js +1 -1
  82. package/dist/analysis/automatic-config.d.ts +6 -6
  83. package/dist/analysis/automatic-config.js +1 -1
  84. package/dist/analysis/codex-config.d.ts +6 -2
  85. package/dist/analysis/codex-config.js +22 -14
  86. package/dist/analysis/execute.d.ts +1 -1
  87. package/dist/analysis/execute.js +1 -1
  88. package/dist/analysis/service.js +5 -5
  89. package/dist/analysis/types.d.ts +6 -0
  90. package/dist/browser-control/client.js +16 -16
  91. package/dist/browser-control/dispatcher.js +4 -4
  92. package/dist/browser-control/protocol.js +14 -14
  93. package/dist/browser-control/recording-transfer.js +4 -4
  94. package/dist/browser-control/transport.js +7 -7
  95. package/dist/cli/commands/analysis-signals.d.ts +2 -2
  96. package/dist/cli/commands/analyze.js +19 -16
  97. package/dist/cli/commands/codex.js +9 -9
  98. package/dist/cli/commands/comms.js +48 -35
  99. package/dist/cli/commands/feedback.js +20 -21
  100. package/dist/cli/commands/migrate.d.ts +4 -0
  101. package/dist/cli/commands/migrate.js +65 -0
  102. package/dist/cli/commands/observe.d.ts +0 -1
  103. package/dist/cli/commands/observe.js +136 -112
  104. package/dist/cli/commands/run-command.d.ts +10 -0
  105. package/dist/cli/commands/run-command.js +85 -0
  106. package/dist/cli/commands/runs.js +136 -139
  107. package/dist/cli/commands/setup.d.ts +2 -2
  108. package/dist/cli/commands/setup.js +27 -24
  109. package/dist/cli/commands/study-format.d.ts +9 -0
  110. package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
  111. package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
  112. package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
  113. package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
  114. package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
  115. package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
  116. package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
  117. package/dist/cli/commands/study-route-run.d.ts +19 -0
  118. package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
  119. package/dist/cli/commands/study-route-scripted.d.ts +17 -0
  120. package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
  121. package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
  122. package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
  123. package/dist/cli/commands/study-route-terminal.d.ts +17 -0
  124. package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
  125. package/dist/cli/commands/study-run.d.ts +9 -0
  126. package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
  127. package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
  128. package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
  129. package/dist/cli/commands/study.d.ts +3 -0
  130. package/dist/cli/commands/study.js +146 -0
  131. package/dist/cli/commands/tui.d.ts +4 -4
  132. package/dist/cli/commands/tui.js +31 -31
  133. package/dist/cli/commands/watch.js +71 -121
  134. package/dist/cli/deprecations.d.ts +6 -0
  135. package/dist/cli/deprecations.js +18 -0
  136. package/dist/cli/doctor.d.ts +18 -8
  137. package/dist/cli/doctor.js +114 -59
  138. package/dist/cli/first-run-path.d.ts +15 -13
  139. package/dist/cli/first-run-path.js +35 -33
  140. package/dist/cli/io.d.ts +44 -9
  141. package/dist/cli/io.js +98 -23
  142. package/dist/cli/observer-follow.d.ts +3 -3
  143. package/dist/cli/observer-follow.js +6 -7
  144. package/dist/cli/orientation.d.ts +10 -7
  145. package/dist/cli/orientation.js +89 -47
  146. package/dist/cli/product-sentence.d.ts +6 -0
  147. package/dist/cli/product-sentence.js +6 -0
  148. package/dist/cli/program.d.ts +6 -1
  149. package/dist/cli/program.js +111 -43
  150. package/dist/cli/telemetry.d.ts +16 -16
  151. package/dist/cli/telemetry.js +46 -44
  152. package/dist/cli.js +1 -1
  153. package/dist/comms/capture-surface.d.ts +13 -12
  154. package/dist/comms/capture-surface.js +23 -22
  155. package/dist/comms/catch-host.d.ts +7 -7
  156. package/dist/comms/catch-host.js +17 -17
  157. package/dist/comms/connections.d.ts +1 -1
  158. package/dist/comms/connections.js +2 -2
  159. package/dist/comms/email-catch.d.ts +3 -3
  160. package/dist/comms/email-catch.js +8 -8
  161. package/dist/comms/external-evidence.d.ts +5 -5
  162. package/dist/comms/external-evidence.js +5 -4
  163. package/dist/comms/extract.js +2 -2
  164. package/dist/comms/fake-inbox.d.ts +3 -3
  165. package/dist/comms/fake-inbox.js +3 -3
  166. package/dist/comms/receiving-render.d.ts +1 -1
  167. package/dist/comms/receiving-render.js +2 -2
  168. package/dist/comms/receiving-runtime.d.ts +4 -4
  169. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  170. package/dist/comms/sandbox-catch-script.js +6 -6
  171. package/dist/comms/sandbox-catch.d.ts +38 -39
  172. package/dist/comms/sandbox-catch.js +36 -37
  173. package/dist/comms/setup.d.ts +2 -2
  174. package/dist/comms/setup.js +56 -25
  175. package/dist/comms/thread-evidence.d.ts +1 -1
  176. package/dist/comms/thread-evidence.js +6 -6
  177. package/dist/comms/types.d.ts +6 -6
  178. package/dist/comms/types.js +3 -3
  179. package/dist/evidence/frame-signature.d.ts +1 -1
  180. package/dist/evidence/frame-signature.js +4 -4
  181. package/dist/evidence/redaction.d.ts +3 -3
  182. package/dist/evidence/redaction.js +4 -4
  183. package/dist/feedback/draft.js +38 -80
  184. package/dist/feedback/export-bundle.js +1 -1
  185. package/dist/feedback/export.d.ts +5 -1
  186. package/dist/feedback/export.js +10 -10
  187. package/dist/feedback/feedback.d.ts +2 -2
  188. package/dist/feedback/feedback.js +21 -3
  189. package/dist/feedback/proof.d.ts +1 -1
  190. package/dist/feedback/proof.js +2 -2
  191. package/dist/guest/bootstrap.js +6 -6
  192. package/dist/guest/browser-tools.js +8 -8
  193. package/dist/guest/chromium-text.js +19 -19
  194. package/dist/guest/desktop-executor.d.ts +2 -2
  195. package/dist/guest/desktop-executor.js +20 -20
  196. package/dist/guest/desktop-keys.js +4 -4
  197. package/dist/guest/desktop-media.d.ts +2 -2
  198. package/dist/guest/desktop-media.js +16 -16
  199. package/dist/guest/desktop-native.d.ts +1 -1
  200. package/dist/guest/desktop-native.js +10 -10
  201. package/dist/guest/runtime-desktop.js +2 -2
  202. package/dist/guest/runtime-processes.d.ts +2 -2
  203. package/dist/guest/runtime-processes.js +2 -2
  204. package/dist/guest/runtime.js +6 -6
  205. package/dist/index.d.ts +14 -14
  206. package/dist/index.js +8 -8
  207. package/dist/keys/key-resolution.d.ts +5 -5
  208. package/dist/keys/key-resolution.js +23 -23
  209. package/dist/observer/artifact.d.ts +2 -2
  210. package/dist/observer/artifact.js +7 -7
  211. package/dist/observer/data.d.ts +6 -6
  212. package/dist/observer/data.js +5 -4
  213. package/dist/observer/exposure.d.ts +1 -1
  214. package/dist/observer/exposure.js +11 -11
  215. package/dist/observer/http.js +1 -1
  216. package/dist/observer/library.d.ts +3 -1
  217. package/dist/observer/library.js +8 -3
  218. package/dist/observer/listen.js +5 -4
  219. package/dist/observer/render.d.ts +1 -1
  220. package/dist/observer/render.js +17 -6
  221. package/dist/observer/run-routes.d.ts +4 -3
  222. package/dist/observer/run-routes.js +38 -13
  223. package/dist/observer/serve.d.ts +1 -1
  224. package/dist/observer/serve.js +7 -3
  225. package/dist/observer/tunnel.js +1 -1
  226. package/dist/observer-app.html +4 -4
  227. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  228. package/dist/routes/computer-use/bundle-parts.js +18 -17
  229. package/dist/routes/computer-use/bundle.d.ts +2 -2
  230. package/dist/routes/computer-use/bundle.js +10 -9
  231. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
  232. package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
  233. package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
  234. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
  235. package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
  236. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
  237. package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
  238. package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
  239. package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
  240. package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
  241. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  242. package/dist/routes/computer-use/external-comms.js +1 -1
  243. package/dist/routes/computer-use/fanout-bundle.js +27 -26
  244. package/dist/routes/computer-use/fanout-records.js +12 -13
  245. package/dist/routes/computer-use/live-flush.d.ts +4 -4
  246. package/dist/routes/computer-use/live-flush.js +6 -6
  247. package/dist/routes/computer-use/live-phase.d.ts +5 -4
  248. package/dist/routes/computer-use/live-phase.js +8 -8
  249. package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
  250. package/dist/routes/computer-use/local-tree-pack.js +1 -1
  251. package/dist/routes/computer-use/local-vm.d.ts +8 -8
  252. package/dist/routes/computer-use/local-vm.js +3 -3
  253. package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
  254. package/dist/routes/computer-use/participant-desktop.js +5 -5
  255. package/dist/routes/computer-use/participant-execution.d.ts +4 -4
  256. package/dist/routes/computer-use/participant-execution.js +10 -10
  257. package/dist/routes/computer-use/participant-model.d.ts +6 -0
  258. package/dist/routes/computer-use/participant-model.js +33 -15
  259. package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
  260. package/dist/routes/computer-use/participant-prompt.js +9 -9
  261. package/dist/routes/computer-use/participant-runs.d.ts +16 -16
  262. package/dist/routes/computer-use/participant-runs.js +26 -25
  263. package/dist/routes/computer-use/plan.d.ts +12 -12
  264. package/dist/routes/computer-use/plan.js +42 -42
  265. package/dist/routes/computer-use/preflight.d.ts +5 -5
  266. package/dist/routes/computer-use/preflight.js +25 -25
  267. package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
  268. package/dist/routes/computer-use/rerun-selection.js +4 -3
  269. package/dist/routes/computer-use/result.d.ts +4 -4
  270. package/dist/routes/computer-use/result.js +22 -21
  271. package/dist/routes/computer-use/route.d.ts +12 -11
  272. package/dist/routes/computer-use/route.js +31 -30
  273. package/dist/routes/computer-use/self-report.d.ts +7 -7
  274. package/dist/routes/computer-use/self-report.js +32 -32
  275. package/dist/routes/computer-use/setup.d.ts +23 -23
  276. package/dist/routes/computer-use/setup.js +28 -29
  277. package/dist/routes/computer-use/single-bundle.d.ts +11 -11
  278. package/dist/routes/computer-use/single-bundle.js +40 -41
  279. package/dist/routes/computer-use/subject-projection.d.ts +4 -4
  280. package/dist/routes/computer-use/subject-projection.js +6 -6
  281. package/dist/routes/computer-use/types.d.ts +71 -73
  282. package/dist/routes/computer-use/types.js +12 -12
  283. package/dist/routes/preview.d.ts +13 -7
  284. package/dist/routes/preview.js +11 -7
  285. package/dist/routes/scripted/bundle.d.ts +7 -7
  286. package/dist/routes/scripted/bundle.js +20 -18
  287. package/dist/routes/scripted/plan.d.ts +8 -8
  288. package/dist/routes/scripted/plan.js +13 -13
  289. package/dist/routes/scripted/result.d.ts +3 -3
  290. package/dist/routes/scripted/result.js +13 -13
  291. package/dist/routes/scripted/route.d.ts +9 -9
  292. package/dist/routes/scripted/route.js +15 -16
  293. package/dist/routes/scripted/scenario.d.ts +1 -1
  294. package/dist/routes/scripted/scenario.js +5 -5
  295. package/dist/routes/scripted/setup.d.ts +6 -6
  296. package/dist/routes/scripted/setup.js +8 -8
  297. package/dist/routes/scripted/subject.d.ts +5 -5
  298. package/dist/routes/scripted/subject.js +4 -4
  299. package/dist/routes/scripted/surface-records.d.ts +1 -1
  300. package/dist/routes/scripted/surface-records.js +4 -4
  301. package/dist/routes/scripted/surface-sessions.d.ts +3 -3
  302. package/dist/routes/scripted/types.d.ts +18 -20
  303. package/dist/routes/scripted/types.js +2 -2
  304. package/dist/routes/shared-world/bundle-records.js +11 -10
  305. package/dist/routes/shared-world/bundle.d.ts +5 -5
  306. package/dist/routes/shared-world/bundle.js +46 -43
  307. package/dist/routes/shared-world/checkpoints.d.ts +4 -4
  308. package/dist/routes/shared-world/checkpoints.js +2 -2
  309. package/dist/routes/shared-world/comms.d.ts +14 -14
  310. package/dist/routes/shared-world/comms.js +19 -18
  311. package/dist/routes/shared-world/external-public.d.ts +4 -3
  312. package/dist/routes/shared-world/external-public.js +16 -12
  313. package/dist/routes/shared-world/handoff.d.ts +7 -6
  314. package/dist/routes/shared-world/handoff.js +65 -57
  315. package/dist/routes/shared-world/lobby-code.d.ts +2 -2
  316. package/dist/routes/shared-world/lobby-code.js +9 -9
  317. package/dist/routes/shared-world/participant-specs.d.ts +10 -9
  318. package/dist/routes/shared-world/participant-specs.js +38 -31
  319. package/dist/routes/shared-world/plan.d.ts +9 -9
  320. package/dist/routes/shared-world/plan.js +16 -16
  321. package/dist/routes/shared-world/provenance.d.ts +2 -2
  322. package/dist/routes/shared-world/provenance.js +2 -2
  323. package/dist/routes/shared-world/provisioned.d.ts +8 -8
  324. package/dist/routes/shared-world/provisioned.js +18 -17
  325. package/dist/routes/shared-world/result.d.ts +6 -6
  326. package/dist/routes/shared-world/result.js +29 -29
  327. package/dist/routes/shared-world/route.d.ts +11 -11
  328. package/dist/routes/shared-world/route.js +40 -39
  329. package/dist/routes/shared-world/setup.d.ts +16 -16
  330. package/dist/routes/shared-world/setup.js +23 -23
  331. package/dist/routes/shared-world/types.d.ts +55 -53
  332. package/dist/routes/shared-world/types.js +4 -4
  333. package/dist/routes/terminal/adapter.d.ts +5 -5
  334. package/dist/routes/terminal/adapter.js +9 -9
  335. package/dist/routes/terminal/bundle.d.ts +13 -13
  336. package/dist/routes/terminal/bundle.js +28 -27
  337. package/dist/routes/terminal/credentials.d.ts +8 -8
  338. package/dist/routes/terminal/credentials.js +12 -12
  339. package/dist/routes/terminal/dry-run.d.ts +4 -4
  340. package/dist/routes/terminal/dry-run.js +12 -12
  341. package/dist/routes/terminal/encoding.js +2 -2
  342. package/dist/routes/terminal/ledger.d.ts +5 -5
  343. package/dist/routes/terminal/ledger.js +14 -14
  344. package/dist/routes/terminal/lifetime.d.ts +1 -1
  345. package/dist/routes/terminal/lifetime.js +1 -1
  346. package/dist/routes/terminal/live-finish.d.ts +2 -2
  347. package/dist/routes/terminal/live-finish.js +10 -10
  348. package/dist/routes/terminal/live-sandbox.d.ts +2 -2
  349. package/dist/routes/terminal/live-sandbox.js +15 -15
  350. package/dist/routes/terminal/participant-text.js +2 -1
  351. package/dist/routes/terminal/persona.d.ts +2 -2
  352. package/dist/routes/terminal/persona.js +3 -3
  353. package/dist/routes/terminal/plan.d.ts +7 -7
  354. package/dist/routes/terminal/plan.js +15 -15
  355. package/dist/routes/terminal/recorder.js +2 -2
  356. package/dist/routes/terminal/result.d.ts +5 -5
  357. package/dist/routes/terminal/result.js +14 -14
  358. package/dist/routes/terminal/route.d.ts +9 -9
  359. package/dist/routes/terminal/route.js +19 -20
  360. package/dist/routes/terminal/sandbox.d.ts +1 -1
  361. package/dist/routes/terminal/sandbox.js +1 -1
  362. package/dist/routes/terminal/session.d.ts +5 -5
  363. package/dist/routes/terminal/session.js +14 -13
  364. package/dist/routes/terminal/token-usage.d.ts +1 -1
  365. package/dist/routes/terminal/token-usage.js +7 -8
  366. package/dist/routes/terminal/trace.d.ts +4 -4
  367. package/dist/routes/terminal/trace.js +2 -2
  368. package/dist/routes/terminal/types.d.ts +48 -50
  369. package/dist/routes/terminal/types.js +5 -5
  370. package/dist/run/bundle-shape.js +3 -3
  371. package/dist/run/bundle.d.ts +49 -49
  372. package/dist/run/bundle.js +3 -2
  373. package/dist/run/cost-summary.js +3 -3
  374. package/dist/run/costs.d.ts +23 -0
  375. package/dist/run/costs.js +79 -44
  376. package/dist/run/detail.d.ts +6 -6
  377. package/dist/run/detail.js +4 -4
  378. package/dist/run/dry-run-inputs.d.ts +1 -1
  379. package/dist/run/dry-run-inputs.js +2 -2
  380. package/dist/run/dry-run.js +20 -20
  381. package/dist/run/judge.d.ts +19 -13
  382. package/dist/run/judge.js +18 -8
  383. package/dist/run/outcomes.d.ts +1 -1
  384. package/dist/run/participant.d.ts +1 -1
  385. package/dist/run/paths.d.ts +1 -1
  386. package/dist/run/paths.js +1 -1
  387. package/dist/run/preflight-receipts.js +1 -1
  388. package/dist/run/pricing.d.ts +11 -6
  389. package/dist/run/pricing.js +22 -15
  390. package/dist/run/projection.d.ts +46 -46
  391. package/dist/run/projection.js +57 -57
  392. package/dist/run/reclaim.d.ts +1 -1
  393. package/dist/run/reclaim.js +3 -3
  394. package/dist/run/results.d.ts +5 -5
  395. package/dist/run/run-cost.d.ts +53 -0
  396. package/dist/run/run-cost.js +105 -0
  397. package/dist/run/run-index-analysis.d.ts +15 -0
  398. package/dist/run/run-index-analysis.js +77 -0
  399. package/dist/run/run-index.d.ts +19 -7
  400. package/dist/run/run-index.js +77 -64
  401. package/dist/run/run-not-found.d.ts +5 -0
  402. package/dist/run/run-not-found.js +15 -0
  403. package/dist/run/run.d.ts +6 -5
  404. package/dist/run/run.js +3 -3
  405. package/dist/run/sandbox-receipts.d.ts +2 -2
  406. package/dist/run/sandbox-receipts.js +3 -3
  407. package/dist/run/shared-world-evidence.d.ts +37 -36
  408. package/dist/run/shared-world-evidence.js +4 -4
  409. package/dist/run/shared-world-shape.d.ts +1 -1
  410. package/dist/run/shared-world-shape.js +7 -7
  411. package/dist/run/stats.d.ts +14 -8
  412. package/dist/run/stats.js +121 -63
  413. package/dist/run/status.d.ts +16 -29
  414. package/dist/run/status.js +10 -29
  415. package/dist/run/stored-runs.js +2 -1
  416. package/dist/run/stream-shape.js +1 -1
  417. package/dist/run/streams.d.ts +7 -7
  418. package/dist/run/study-provenance.d.ts +49 -0
  419. package/dist/run/study-provenance.js +66 -0
  420. package/dist/run/study-result.d.ts +11 -0
  421. package/dist/run/study-result.js +9 -0
  422. package/dist/run/text.d.ts +2 -0
  423. package/dist/run/text.js +4 -0
  424. package/dist/run-study.d.ts +112 -0
  425. package/dist/{run-lab.js → run-study.js} +52 -47
  426. package/dist/{lab → study}/adapter-extension.d.ts +15 -27
  427. package/dist/{lab → study}/adapter-extension.js +10 -45
  428. package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
  429. package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
  430. package/dist/study/composition-rules.d.ts +7 -0
  431. package/dist/{lab → study}/composition-rules.js +53 -53
  432. package/dist/study/config.d.ts +15 -0
  433. package/dist/{lab → study}/config.js +98 -41
  434. package/dist/study/convert.d.ts +33 -0
  435. package/dist/study/convert.js +432 -0
  436. package/dist/{lab → study}/device-presets.d.ts +10 -10
  437. package/dist/{lab → study}/device-presets.js +11 -11
  438. package/dist/study/discover.d.ts +75 -0
  439. package/dist/{lab → study}/discover.js +134 -95
  440. package/dist/{lab → study}/doctor.d.ts +19 -12
  441. package/dist/{lab → study}/doctor.js +58 -20
  442. package/dist/study/field-paths.d.ts +12 -0
  443. package/dist/study/field-paths.js +126 -0
  444. package/dist/study/files.d.ts +26 -0
  445. package/dist/study/files.js +44 -0
  446. package/dist/{lab → study}/init-templates.d.ts +2 -2
  447. package/dist/study/init-templates.js +421 -0
  448. package/dist/{lab → study}/init.d.ts +2 -2
  449. package/dist/{lab → study}/init.js +46 -11
  450. package/dist/study/keys.d.ts +4 -0
  451. package/dist/{lab → study}/keys.js +46 -12
  452. package/dist/study/migrate.d.ts +48 -0
  453. package/dist/study/migrate.js +408 -0
  454. package/dist/study/owned-files.d.ts +38 -0
  455. package/dist/study/owned-files.js +182 -0
  456. package/dist/{lab → study}/parse/actors.d.ts +5 -5
  457. package/dist/{lab → study}/parse/actors.js +14 -14
  458. package/dist/study/parse/comms.d.ts +12 -0
  459. package/dist/{lab → study}/parse/comms.js +5 -5
  460. package/dist/study/parse/execution.d.ts +19 -0
  461. package/dist/{lab → study}/parse/execution.js +13 -13
  462. package/dist/study/parse/study-v3.d.ts +21 -0
  463. package/dist/study/parse/study-v3.js +259 -0
  464. package/dist/study/parse/subject-state.d.ts +30 -0
  465. package/dist/{lab → study}/parse/subject-state.js +19 -19
  466. package/dist/{lab → study}/parse/subject.d.ts +3 -3
  467. package/dist/{lab → study}/parse/subject.js +34 -34
  468. package/dist/{lab → study}/parse/values.d.ts +3 -3
  469. package/dist/{lab → study}/parse/values.js +3 -3
  470. package/dist/{lab → study}/persona-resolve.d.ts +8 -8
  471. package/dist/{lab → study}/persona-resolve.js +6 -6
  472. package/dist/{lab → study}/plan-base.d.ts +7 -7
  473. package/dist/{lab → study}/plan-base.js +1 -1
  474. package/dist/{lab → study}/plan-participants.d.ts +12 -12
  475. package/dist/{lab → study}/plan-participants.js +4 -4
  476. package/dist/{lab → study}/plan-types.d.ts +31 -31
  477. package/dist/{lab → study}/plan-types.js +2 -2
  478. package/dist/study/plan.d.ts +13 -0
  479. package/dist/study/plan.js +101 -0
  480. package/dist/study/preflight-probes.d.ts +3 -0
  481. package/dist/{lab → study}/preflight-probes.js +20 -19
  482. package/dist/study/preflight-result.d.ts +8 -0
  483. package/dist/{lab → study}/preflight-result.js +5 -4
  484. package/dist/study/preflight.d.ts +94 -0
  485. package/dist/{lab → study}/preflight.js +12 -12
  486. package/dist/{lab → study}/requirements.d.ts +3 -3
  487. package/dist/{lab → study}/requirements.js +1 -1
  488. package/dist/study/route-inputs.d.ts +28 -0
  489. package/dist/{lab → study}/route-inputs.js +1 -1
  490. package/dist/{lab → study}/routing.d.ts +39 -33
  491. package/dist/{lab → study}/routing.js +60 -29
  492. package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
  493. package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
  494. package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
  495. package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
  496. package/dist/study/run-study-options.d.ts +28 -0
  497. package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
  498. package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
  499. package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
  500. package/dist/{lab → study}/summary.d.ts +16 -15
  501. package/dist/{lab → study}/summary.js +21 -21
  502. package/dist/{lab → study}/tasks.d.ts +18 -18
  503. package/dist/{lab → study}/tasks.js +14 -14
  504. package/dist/{lab → study}/types.d.ts +202 -196
  505. package/dist/{lab → study}/types.js +3 -1
  506. package/dist/{lab → study}/validation.d.ts +27 -27
  507. package/dist/{lab → study}/validation.js +53 -51
  508. package/dist/study/warnings.d.ts +12 -0
  509. package/dist/{lab → study}/warnings.js +62 -34
  510. package/dist/subject/clone.d.ts +7 -7
  511. package/dist/subject/clone.js +2 -2
  512. package/dist/subject/desktop-cli.d.ts +1 -1
  513. package/dist/subject/desktop-cli.js +2 -2
  514. package/dist/subject/local-tree-archive.d.ts +2 -2
  515. package/dist/subject/local-tree-archive.js +4 -4
  516. package/dist/subject/local-tree.d.ts +4 -4
  517. package/dist/subject/node-bootstrap.js +1 -1
  518. package/dist/subject/runtime.js +9 -10
  519. package/dist/subject/serve.d.ts +5 -5
  520. package/dist/subject/serve.js +3 -3
  521. package/dist/subject/state.d.ts +4 -4
  522. package/dist/subject/state.js +1 -1
  523. package/dist/subject/steps.d.ts +6 -6
  524. package/dist/subject/steps.js +5 -5
  525. package/dist/substrates/command-failure.d.ts +3 -3
  526. package/dist/substrates/command-failure.js +3 -3
  527. package/dist/substrates/desktop-session.js +2 -2
  528. package/dist/substrates/detached.d.ts +6 -6
  529. package/dist/substrates/detached.js +7 -7
  530. package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
  531. package/dist/substrates/e2b/cdp-probe.js +14 -17
  532. package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
  533. package/dist/substrates/e2b/desktop-browser.js +9 -9
  534. package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
  535. package/dist/substrates/e2b/desktop-cdp.js +9 -9
  536. package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
  537. package/dist/substrates/e2b/desktop-executor.js +13 -13
  538. package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
  539. package/dist/substrates/e2b/desktop-geometry.js +8 -8
  540. package/dist/substrates/e2b/desktop-media.d.ts +4 -4
  541. package/dist/substrates/e2b/desktop-media.js +1 -1
  542. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  543. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  544. package/dist/substrates/e2b/lifetime.js +1 -1
  545. package/dist/substrates/e2b/sandbox.d.ts +4 -4
  546. package/dist/substrates/e2b/sandbox.js +2 -2
  547. package/dist/substrates/e2b/sdk.d.ts +12 -12
  548. package/dist/substrates/e2b/sdk.js +7 -7
  549. package/dist/substrates/local/runtime-config.d.ts +4 -4
  550. package/dist/substrates/local/runtime-config.js +4 -4
  551. package/dist/tui/actions.d.ts +1 -1
  552. package/dist/tui/actions.js +13 -13
  553. package/dist/tui/contract.d.ts +23 -23
  554. package/dist/tui/contract.js +11 -11
  555. package/dist/tui/launch.d.ts +7 -7
  556. package/dist/tui/launch.js +36 -31
  557. package/dist/tui/project.js +5 -5
  558. package/dist/tui-app.js +139 -139
  559. package/dist/verify/actor.d.ts +8 -8
  560. package/dist/verify/actor.js +36 -36
  561. package/dist/verify/artifacts.d.ts +2 -2
  562. package/dist/verify/artifacts.js +3 -3
  563. package/dist/verify/context-growth.d.ts +9 -0
  564. package/dist/verify/context-growth.js +62 -0
  565. package/dist/verify/costs.d.ts +6 -6
  566. package/dist/verify/costs.js +8 -8
  567. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  568. package/dist/verify/shared-world-concurrent.js +79 -76
  569. package/dist/verify/shared-world.d.ts +2 -2
  570. package/dist/verify/shared-world.js +16 -16
  571. package/dist/verify/subject.d.ts +5 -5
  572. package/dist/verify/subject.js +19 -19
  573. package/dist/verify/verify.js +94 -44
  574. package/docs/README.md +25 -32
  575. package/docs/architecture/actor-contract.md +60 -91
  576. package/docs/architecture/browser-control.md +1 -1
  577. package/docs/architecture/desktop-sessions.md +7 -7
  578. package/docs/architecture/external-public-shared-world.md +68 -65
  579. package/docs/architecture/github-feedback-loop.md +2 -5
  580. package/docs/architecture/guest-desktop.md +2 -2
  581. package/docs/architecture/observer.md +34 -34
  582. package/docs/architecture/restricted-codex-analysis.md +34 -28
  583. package/docs/architecture/serve.md +34 -37
  584. package/docs/architecture/state-driven-executor.md +55 -58
  585. package/docs/architecture/task-protocol-support.md +6 -6
  586. package/docs/architecture/terminal-product-route.md +70 -110
  587. package/docs/contracts/README.md +24 -0
  588. package/docs/contracts/adapter-admission.md +3 -3
  589. package/docs/contracts/adapter-fixtures.md +4 -7
  590. package/docs/contracts/core.md +1 -3
  591. package/docs/contracts/errors.md +62 -0
  592. package/docs/contracts/feedback.md +8 -9
  593. package/docs/contracts/policy.md +7 -12
  594. package/docs/contracts/run-bundle.md +42 -44
  595. package/docs/contracts/schemas.md +446 -368
  596. package/docs/contracts/study-analysis.md +7 -4
  597. package/docs/contracts/study-costs.md +28 -9
  598. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  599. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  600. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  601. package/docs/principles/actor-fidelity.md +4 -4
  602. package/docs/principles/engineering.md +3 -3
  603. package/docs/principles/invariants-and-defaults.md +38 -38
  604. package/docs/principles/self-driving-harness.md +1 -5
  605. package/docs/principles/three-roles.md +1 -1
  606. package/docs/product/automatic-analysis.md +7 -7
  607. package/examples/README.md +1 -1
  608. package/examples/participant/README.md +5 -5
  609. package/examples/participant/run.mjs +11 -10
  610. package/examples/scorer/README.md +3 -3
  611. package/examples/scorer/run.mjs +11 -12
  612. package/examples/scorer/scorer.mjs +3 -3
  613. package/package.json +16 -17
  614. package/skills/humanish/SKILL.md +64 -60
  615. package/skills/humanish/agents/openai.yaml +1 -1
  616. package/AGENTS.md +0 -99
  617. package/CONTRIBUTING.md +0 -148
  618. package/dist/actors/codex/qualified-versions.d.ts +0 -72
  619. package/dist/actors/codex/qualified-versions.js +0 -132
  620. package/dist/cli/commands/lab-format.d.ts +0 -8
  621. package/dist/cli/commands/lab-route-run.d.ts +0 -19
  622. package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
  623. package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
  624. package/dist/cli/commands/lab-run.d.ts +0 -9
  625. package/dist/cli/commands/lab.d.ts +0 -3
  626. package/dist/cli/commands/lab.js +0 -199
  627. package/dist/cli/renamed-options.d.ts +0 -11
  628. package/dist/cli/renamed-options.js +0 -18
  629. package/dist/lab/composition-rules.d.ts +0 -7
  630. package/dist/lab/config.d.ts +0 -7
  631. package/dist/lab/discover.d.ts +0 -65
  632. package/dist/lab/init-templates.js +0 -416
  633. package/dist/lab/keys.d.ts +0 -2
  634. package/dist/lab/parse/comms.d.ts +0 -12
  635. package/dist/lab/parse/execution.d.ts +0 -19
  636. package/dist/lab/parse/subject-state.d.ts +0 -30
  637. package/dist/lab/plan.d.ts +0 -19
  638. package/dist/lab/plan.js +0 -132
  639. package/dist/lab/preflight-probes.d.ts +0 -3
  640. package/dist/lab/preflight-result.d.ts +0 -7
  641. package/dist/lab/preflight.d.ts +0 -92
  642. package/dist/lab/route-inputs.d.ts +0 -28
  643. package/dist/lab/run-lab-options.d.ts +0 -28
  644. package/dist/lab/warnings.d.ts +0 -2
  645. package/dist/observer/static.d.ts +0 -39
  646. package/dist/observer/static.js +0 -369
  647. package/dist/run-lab.d.ts +0 -112
  648. package/docs/architecture/comms-inbox.md +0 -122
  649. package/docs/architecture/desktop-recording.md +0 -80
  650. package/docs/architecture/local-browser-runtime.md +0 -178
  651. package/docs/architecture/observer-review.md +0 -144
  652. package/docs/architecture/participant-media.md +0 -90
  653. package/docs/architecture/project-layout.md +0 -62
  654. package/docs/architecture/real-email-receiving.md +0 -136
  655. package/docs/assets/humanish-drawdb-hero.png +0 -0
  656. package/docs/assets/humanish-observer-hero.png +0 -0
  657. package/docs/goals/current.md +0 -207
  658. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  659. package/docs/product/open-source-install-experience.md +0 -240
  660. package/docs/ramp/README.md +0 -295
  661. package/docs/release/open-source-readiness.md +0 -222
  662. package/docs/release/public-readiness-standard.md +0 -210
  663. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  664. /package/dist/{lab → study}/init-paths.d.ts +0 -0
  665. /package/dist/{lab → study}/init-paths.js +0 -0
  666. /package/dist/{lab → study}/init-plan.d.ts +0 -0
  667. /package/dist/{lab → study}/init-plan.js +0 -0
  668. /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
  669. /package/dist/{lab → study}/participant-assignment.js +0 -0
  670. /package/dist/{lab → study}/persona.d.ts +0 -0
  671. /package/dist/{lab → study}/persona.js +0 -0
@@ -1,10 +1,28 @@
1
1
  import { formatCuaDiagnostics, formatCuaStopCause } from "../../routes/computer-use/diagnostics.js";
2
- export function formatConcurrentSharedWorldLabHuman(result) {
3
- return ([
4
- `humanish lab concurrent-shared-world ${result.ok ? (result.dryRun ? "dry-run" : "live") : "failed"}`,
5
- ...(result.error ? [`${result.error.code}: ${result.error.message}`] : []),
2
+ /** A run's first lines: the command that ran, whether it was a dry run, how it ended, and its route. */
3
+ function runHeader(result, route) {
4
+ const kind = result.dryRun === true ? "dry run" : result.dryRun === false ? "live run" : "run";
5
+ return [
6
+ `humanish run ${result.studyId}: ${kind} ${result.ok ? "finished" : "failed"}`,
7
+ `route: ${route}`,
8
+ ];
9
+ }
10
+ /**
11
+ * A run's human output: its lines on stdout and, when it failed with an error, that error on
12
+ * stderr through formatCliError.
13
+ */
14
+ function withError(error, lines) {
15
+ const stdout = `${lines.join("\n")}\n`;
16
+ return error === undefined ? stdout : { stdout, error };
17
+ }
18
+ /** A participant's status in words: a dry run's placeholder status says that nothing ran live. */
19
+ function participantStatus(status) {
20
+ return status === "contract_proof_only" ? "dry run, nothing ran live" : status;
21
+ }
22
+ export function formatConcurrentSharedWorldStudyHuman(result) {
23
+ return withError(result.error, [
24
+ ...runHeader(result, "shared-world"),
6
25
  `run: ${result.runId}`,
7
- `lab: ${result.labId}`,
8
26
  `actor: ${result.actor}`,
9
27
  `topology: ${result.topology}/${result.topologyMode} (${result.roleCount} persona${result.roleCount === 1 ? "" : "s"}, concurrency ${result.concurrency})`,
10
28
  ...(result.host ? [`host: ${result.host}`] : []),
@@ -16,7 +34,7 @@ export function formatConcurrentSharedWorldLabHuman(result) {
16
34
  : [
17
35
  `overlap: ${result.overlapProven ? "proven" : "not observed"} (this run only; no scale or adoption claim)`,
18
36
  ]),
19
- ...result.roles.map((participant) => `persona ${participant.id} (${participant.persona}): ${participant.status}${participant.session ? ` (${participant.session.completionReason})` : ""} ${participant.ok ? "ok" : "not-ok"}`),
37
+ ...result.roles.map((participant) => `persona ${participant.id} (${participant.persona}): ${participantStatus(participant.status)}${participant.session ? ` (${participant.session.completionReason})` : ""}${participant.ok ? "" : ", not ok"}`),
20
38
  ...(result.subjectSandbox
21
39
  ? [
22
40
  `subject sandbox: ${result.subjectSandbox.sandboxId} killed=${result.subjectSandbox.killed ? "yes" : "no"}`,
@@ -27,14 +45,12 @@ export function formatConcurrentSharedWorldLabHuman(result) {
27
45
  ? []
28
46
  : [`opened: ${result.observer.opened ? "yes" : "no"}`]),
29
47
  ...result.warnings.map((warning) => `warning: ${warning}`),
30
- ].join("\n") + "\n");
48
+ ]);
31
49
  }
32
- export function formatTerminalLabHuman(result) {
33
- return ([
34
- `humanish lab terminal ${result.ok ? (result.dryRun ? "dry-run" : "live") : "failed"}`,
35
- ...(result.error ? [`${result.error.code}: ${result.error.message}`] : []),
50
+ export function formatTerminalStudyHuman(result) {
51
+ return withError(result.error, [
52
+ ...runHeader(result, "terminal"),
36
53
  `run: ${result.runId}`,
37
- `lab: ${result.labId}`,
38
54
  `actor: ${result.actor}`,
39
55
  `product: ${result.product}`,
40
56
  ...(result.observer?.observerPath ? [`observer: ${result.observer.observerPath}`] : []),
@@ -42,14 +58,12 @@ export function formatTerminalLabHuman(result) {
42
58
  ? []
43
59
  : [`opened: ${result.observer.opened ? "yes" : "no"}`]),
44
60
  ...result.warnings.map((warning) => `warning: ${warning}`),
45
- ].join("\n") + "\n");
61
+ ]);
46
62
  }
47
- export function formatScriptedLabHuman(result) {
48
- return ([
49
- `humanish lab scripted ${result.ok ? (result.dryRun ? "dry-run" : "live") : "failed"}`,
50
- ...(result.error ? [`${result.error.code}: ${result.error.message}`] : []),
63
+ export function formatScriptedStudyHuman(result) {
64
+ return withError(result.error, [
65
+ ...runHeader(result, "scripted"),
51
66
  `run: ${result.runId}`,
52
- `lab: ${result.labId}`,
53
67
  `actor: ${result.actor}`,
54
68
  `subject: ${result.appUrl}`,
55
69
  ...(result.scenario
@@ -63,14 +77,12 @@ export function formatScriptedLabHuman(result) {
63
77
  ? []
64
78
  : [`opened: ${result.observer.opened ? "yes" : "no"}`]),
65
79
  ...result.warnings.map((warning) => `warning: ${warning}`),
66
- ].join("\n") + "\n");
80
+ ]);
67
81
  }
68
- export function formatCuaLabHuman(result) {
69
- return ([
70
- `humanish lab cua ${result.ok ? (result.dryRun ? "dry-run" : "live") : "failed"}`,
71
- ...(result.error ? [`${result.error.code}: ${result.error.message}`] : []),
82
+ export function formatCuaStudyHuman(result) {
83
+ return withError(result.error, [
84
+ ...runHeader(result, "computer-use"),
72
85
  `run: ${result.runId}`,
73
- `lab: ${result.labId}`,
74
86
  `actor: ${result.actor}`,
75
87
  `subject: ${result.appUrl}`,
76
88
  ...(result.subject?.source === "clone"
@@ -83,11 +95,11 @@ export function formatCuaLabHuman(result) {
83
95
  : []),
84
96
  ...(result.diagnostics ? [`diagnostic: ${formatCuaDiagnostics(result.diagnostics)}`] : []),
85
97
  ...((result.lanes?.length ?? 0) > 1
86
- ? result.lanes.map((participant) => `participant ${participant.id}: ${participant.status}${participant.session ? ` (${participant.session.completionReason})` : ""}${participant.diagnostics ? ` · ${formatCuaDiagnostics(participant.diagnostics)}` : ""}${participant.session ? ` · ${participant.session.reason}` : ""}`)
98
+ ? result.lanes.map((participant) => `participant ${participant.id}: ${participantStatus(participant.status)}${participant.session ? ` (${participant.session.completionReason})` : ""}${participant.diagnostics ? ` · ${formatCuaDiagnostics(participant.diagnostics)}` : ""}${participant.session ? ` · ${participant.session.reason}` : ""}`)
87
99
  : []),
88
100
  ...(result.session && (result.lanes?.length ?? 0) <= 1
89
101
  ? [
90
- `session: ${result.session.status} (${result.session.completionReason})${result.session.stopCause ? ` · ${formatCuaStopCause(result.session.stopCause)}` : ""} · ${result.session.reason}`,
102
+ `session: ${participantStatus(result.session.status)} (${result.session.completionReason})${result.session.stopCause ? ` · ${formatCuaStopCause(result.session.stopCause)}` : ""} · ${result.session.reason}`,
91
103
  `screenshots: ${result.session.screenshots}`,
92
104
  ]
93
105
  : []),
@@ -101,5 +113,5 @@ export function formatCuaLabHuman(result) {
101
113
  ? []
102
114
  : [`opened: ${result.observer.opened ? "yes" : "no"}`]),
103
115
  ...result.warnings.map((warning) => `warning: ${warning}`),
104
- ].join("\n") + "\n");
116
+ ]);
105
117
  }
@@ -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";
5
- import { CUA_ACTOR_LAB_SCHEMA } from "../../routes/computer-use/types.js";
3
+ import {} from "../../run-study.js";
4
+ import { resolveStudyDryRun } from "../../study/plan.js";
6
5
  import { serveObserver } from "../../observer/render.js";
7
6
  import { startExposedObserver, validateExposure } from "../../observer/exposure.js";
8
7
  import { ServeTunnelError } from "../../observer/tunnel.js";
9
8
  import { cliAnalysisOptions } from "./analysis-signals.js";
10
9
  import { onRunShutdown } from "./run-signals.js";
11
- import { parseLabCount, parseParticipantIds, parseObserverPort, wantsJson, writeResult, } from "../io.js";
10
+ import { parseStudyCount, parseParticipantIds, parseObserverPort, wantsJson, writeResult, } from "../io.js";
12
11
  import { exposureRequestFromOptions, followObserver, planObserver, showObserver, staticObserverOpen, withObserverServer, } from "../observer-follow.js";
13
- import { formatCuaLabHuman } from "./lab-format.js";
14
- import { resolveRouteShouldOpen } from "./lab-route-open.js";
12
+ import { formatCuaStudyHuman } from "./study-format.js";
13
+ import { resolveRouteShouldOpen } from "./study-route-open.js";
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
  */
@@ -50,10 +50,9 @@ export function computerUseRouteRun(args) {
50
50
  }
51
51
  function refuseCua(args, dryRun, code, message) {
52
52
  const result = {
53
- schema: CUA_ACTOR_LAB_SCHEMA,
53
+ ...studyResultIdentity("computer-use", args.config.id),
54
54
  ok: false,
55
55
  cwd: args.options.cwd,
56
- labId: args.config.id,
57
56
  actor: args.config.actors[0]?.type ?? "",
58
57
  appUrl: "",
59
58
  dryRun,
@@ -61,7 +60,7 @@ function refuseCua(args, dryRun, code, message) {
61
60
  warnings: [],
62
61
  error: { code, message },
63
62
  };
64
- writeResult(args.command, args.io, result, formatCuaLabHuman);
63
+ writeResult(args.command, args.io, result, formatCuaStudyHuman);
65
64
  args.io.setExitCode(2);
66
65
  }
67
66
  /** Parses the options, or writes the refusal and returns undefined. */
@@ -79,13 +78,13 @@ function resolveCuaSettings(args) {
79
78
  args.io.setExitCode(2);
80
79
  return undefined;
81
80
  }
82
- 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);
83
82
  if (count === null) {
84
83
  args.io.writeErr("error: --count must be a positive integer.\n");
85
84
  args.io.setExitCode(2);
86
85
  return undefined;
87
86
  }
88
- const dryRun = resolveLabDryRun(args.config, args.options.dryRun, true) ?? true;
87
+ const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
89
88
  const port = parseObserverPort(args.options.port ?? "0");
90
89
  const wantsFollow = args.mode === "watch" && !wantsMachine && args.options.detach !== true && dryRun !== true;
91
90
  if (port === null) {
@@ -97,7 +96,7 @@ function resolveCuaSettings(args) {
97
96
  /** Validates exposure and plans the finished-run Observer, or returns undefined after refusing. */
98
97
  function prepareCuaWatch(args, settings) {
99
98
  // Validate exposure up front (fail-closed matrix), before any run/spend. A live CUA watch is the
100
- // one surface that serves runtime E2B stream URLs, so it MUST sit behind edge auth.
99
+ // one surface that serves runtime E2B stream URLs, so it must sit behind edge auth.
101
100
  const exposeValidation = validateExposure("watch", exposureRequestFromOptions(args.options), {
102
101
  dryRun: settings.dryRun,
103
102
  detach: args.options.detach === true,
@@ -123,7 +122,7 @@ function prepareCuaWatch(args, settings) {
123
122
  return undefined;
124
123
  return { exposure: exposeValidation.plan, finishedPlan };
125
124
  }
126
- /** 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. */
127
126
  function cuaRunOptions(args, settings, prepared, live) {
128
127
  const { finishedPlan } = prepared;
129
128
  return {
@@ -141,7 +140,7 @@ function cuaRunOptions(args, settings, prepared, live) {
141
140
  dryRun: settings.dryRun,
142
141
  ...(settings.wantsFollow
143
142
  ? {
144
- // 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
145
144
  // tunnel-auth failure aborts before any spend and leaves no orphaned sandbox.
146
145
  onObserverReady: (observer) => attachLiveObserver(args.io, settings, prepared.exposure, live, observer),
147
146
  }
@@ -214,7 +213,7 @@ async function attachLiveObserver(io, settings, exposure, live, observer) {
214
213
  async function reportCuaRun(args, prepared, result, live) {
215
214
  const { server, observer: attachedObserver } = live;
216
215
  const exposeRequested = prepared.exposure.exposed;
217
- // Serving is NOT gated on result.ok: a timed_out, incomplete or failed run still comes up so the
216
+ // Serving is not gated on result.ok: a timed_out, incomplete or failed run still comes up so the
218
217
  // operator can inspect its evidence live (and, under --expose, from a phone).
219
218
  let output = result;
220
219
  if (server && attachedObserver) {
@@ -224,7 +223,7 @@ async function reportCuaRun(args, prepared, result, live) {
224
223
  observer: withObserverServer(attachedResult, server),
225
224
  warnings: [
226
225
  ...result.warnings,
227
- "Live CUA server is polling observer-data.json with no-store caching.",
226
+ "The live computer-use server polls observer-data.json with no-store caching.",
228
227
  ...(exposeRequested
229
228
  ? [
230
229
  `Exposed live desktop stream URLs to an edge-authenticated remote viewer${live.tunnel ? ` via ${live.tunnel.url.replace(/\/$/, "")}` : ""}.`,
@@ -236,7 +235,7 @@ async function reportCuaRun(args, prepared, result, live) {
236
235
  ],
237
236
  };
238
237
  }
239
- writeResult(args.command, args.io, output, formatCuaLabHuman);
238
+ writeResult(args.command, args.io, output, formatCuaStudyHuman);
240
239
  args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
241
240
  if (server && (result.observer?.ok || attachedObserver)) {
242
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,20 +1,21 @@
1
1
  import { Command } from "commander";
2
- import { formatRunHuman, parseLabCount, writeResult, } from "../io.js";
2
+ import { studyResultIdentity } from "../../run/study-result.js";
3
+ import { formatRunHuman, parseStudyCount, writeResult, } from "../io.js";
3
4
  import { planObserver, showObserver, staticObserverOpen } from "../observer-follow.js";
4
5
  /**
5
- * 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
6
7
  * presents the outcome. Undefined when setup has already written its own result.
7
8
  */
8
9
  export function previewRouteRun(args) {
9
- 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);
10
11
  if (participantCount === null) {
11
12
  const result = {
12
- schema: "humanish.run-result.v1",
13
+ ...studyResultIdentity("preview", args.config.id),
13
14
  ok: false,
14
15
  cwd: args.options.cwd,
15
16
  warnings: [],
16
17
  error: {
17
- code: "HUMANISH_INVALID_SIM_COUNT",
18
+ code: "HUMANISH_INVALID_PARTICIPANT_COUNT",
18
19
  message: "--count must be a positive integer.",
19
20
  },
20
21
  };
@@ -23,7 +24,7 @@ export function previewRouteRun(args) {
23
24
  return undefined;
24
25
  }
25
26
  // `run` renders the Observer too, so `run` and `watch` write the same bundle and the first
26
- // `export` of a run bundle finds observer/index.html (#597). A render failure is a warning on the
27
+ // `export` of a run bundle finds observer/index.html. A render failure is a warning on the
27
28
  // result, never a failed run. The preview renders through its finished run, so the page shown is
28
29
  // the run just written, never a directory swapped in under its id.
29
30
  const openOverride = args.options.open ?? args.config.defaults?.open;
@@ -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,15 @@
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
+ import { studyResultIdentity } from "../../run/study-result.js";
12
13
  /**
13
14
  * The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
14
15
  * the run attaches, and how it presents the outcome. Undefined when setup has already written its
@@ -16,7 +17,7 @@ import { rosterOf } from "../../lab/parse/actors.js";
16
17
  */
17
18
  export function sharedWorldRouteRun(args) {
18
19
  const wantsMachine = wantsJson(args.command);
19
- const dryRun = resolveLabDryRun(args.config, args.options.dryRun, true) ?? true;
20
+ const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
20
21
  const shouldOpen = resolveRouteShouldOpen({
21
22
  optionOpen: args.options.open,
22
23
  defaultsOpen: args.config.defaults?.open,
@@ -27,10 +28,9 @@ export function sharedWorldRouteRun(args) {
27
28
  const port = parseObserverPort(args.options.port ?? "0");
28
29
  const failConcurrent = (message, runId) => {
29
30
  const result = {
30
- schema: "humanish.concurrent-shared-world-lab-result.v1",
31
+ ...studyResultIdentity("shared-world", args.config.id),
31
32
  ok: false,
32
33
  cwd: args.options.cwd,
33
- labId: args.config.id,
34
34
  actor: args.config.actors[0]?.type ?? "",
35
35
  topology: "shared-world",
36
36
  topologyMode: "concurrent",
@@ -40,9 +40,9 @@ export function sharedWorldRouteRun(args) {
40
40
  runId: runId ?? args.options.runId ?? "not-created",
41
41
  roles: [],
42
42
  warnings: [],
43
- error: { code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED", message },
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>;