humanish 0.106.1 → 0.108.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 (668) hide show
  1. package/ARCHITECTURE.md +38 -32
  2. package/CHANGELOG.md +28 -0
  3. package/CONTEXT.md +51 -41
  4. package/README.md +152 -174
  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-client.js +2 -1
  14. package/dist/actors/codex/app-server-trace.d.ts +0 -1
  15. package/dist/actors/codex/app-server-trace.js +1 -3
  16. package/dist/actors/codex/app-server-ui.js +1 -1
  17. package/dist/actors/codex/app-server.js +2 -1
  18. package/dist/actors/codex/codex-admission.d.ts +91 -0
  19. package/dist/actors/codex/codex-admission.js +150 -0
  20. package/dist/actors/codex/protocol-compat.d.ts +27 -0
  21. package/dist/actors/codex/protocol-compat.js +357 -0
  22. package/dist/actors/codex/protocol-contract.d.ts +61 -0
  23. package/dist/actors/codex/protocol-contract.js +471 -0
  24. package/dist/actors/codex/restricted-executable.d.ts +28 -4
  25. package/dist/actors/codex/restricted-executable.js +104 -29
  26. package/dist/actors/codex/restricted-launch.d.ts +9 -2
  27. package/dist/actors/codex/restricted-launch.js +43 -4
  28. package/dist/actors/codex/restricted-notifications.d.ts +101 -0
  29. package/dist/actors/codex/restricted-notifications.js +277 -0
  30. package/dist/actors/codex/restricted-participant.d.ts +30 -0
  31. package/dist/actors/codex/restricted-participant.js +66 -6
  32. package/dist/actors/codex/restricted-policy.d.ts +11 -3
  33. package/dist/actors/codex/restricted-policy.js +2 -2
  34. package/dist/actors/codex/restricted-session.d.ts +16 -3
  35. package/dist/actors/codex/restricted-session.js +60 -22
  36. package/dist/actors/codex/restricted-transport.d.ts +29 -0
  37. package/dist/actors/codex/restricted-transport.js +139 -27
  38. package/dist/actors/codex/restricted-turn.d.ts +19 -4
  39. package/dist/actors/codex/restricted-turn.js +43 -30
  40. package/dist/actors/computer-use/actor.d.ts +17 -17
  41. package/dist/actors/computer-use/actor.js +6 -6
  42. package/dist/actors/computer-use/admission-limit.d.ts +1 -1
  43. package/dist/actors/computer-use/admission-limit.js +1 -1
  44. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  45. package/dist/actors/computer-use/loop/actions.js +10 -10
  46. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  47. package/dist/actors/computer-use/loop/backstop.js +15 -13
  48. package/dist/actors/computer-use/loop/ending.d.ts +7 -7
  49. package/dist/actors/computer-use/loop/ending.js +9 -9
  50. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  51. package/dist/actors/computer-use/loop/observation.js +9 -9
  52. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  53. package/dist/actors/computer-use/loop/provider-call.js +1 -1
  54. package/dist/actors/computer-use/loop/session.js +3 -3
  55. package/dist/actors/computer-use/loop/spend.d.ts +2 -2
  56. package/dist/actors/computer-use/loop/spend.js +4 -4
  57. package/dist/actors/computer-use/loop/trace.js +11 -10
  58. package/dist/actors/computer-use/loop/types.d.ts +37 -26
  59. package/dist/actors/computer-use/loop/usage.js +2 -2
  60. package/dist/actors/computer-use/loop.js +4 -4
  61. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  62. package/dist/actors/computer-use/openai-context.js +214 -0
  63. package/dist/actors/computer-use/openai-provider.d.ts +12 -9
  64. package/dist/actors/computer-use/openai-provider.js +47 -36
  65. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  66. package/dist/actors/computer-use/openai-requests.js +82 -15
  67. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  68. package/dist/actors/computer-use/openai-wire.js +36 -34
  69. package/dist/actors/contract.d.ts +86 -49
  70. package/dist/actors/contract.js +29 -23
  71. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  72. package/dist/actors/local-agent/claude-session.js +10 -9
  73. package/dist/actors/local-agent/cli.d.ts +8 -6
  74. package/dist/actors/local-agent/cli.js +24 -28
  75. package/dist/actors/local-agent/readiness.d.ts +2 -2
  76. package/dist/actors/local-agent/readiness.js +4 -4
  77. package/dist/actors/reasoning-effort.js +6 -6
  78. package/dist/actors/registry.d.ts +10 -10
  79. package/dist/actors/registry.js +18 -17
  80. package/dist/actors/scripted-browser/actor.d.ts +8 -8
  81. package/dist/actors/scripted-browser/actor.js +16 -16
  82. package/dist/actors/scripted-browser/browser-command.js +1 -1
  83. package/dist/actors/scripted-browser/journey.js +15 -4
  84. package/dist/actors/scripted-browser/steps.js +19 -1
  85. package/dist/actors/scripted-browser/types.d.ts +12 -2
  86. package/dist/actors/stop-conditions.d.ts +1 -1
  87. package/dist/actors/stop-conditions.js +1 -3
  88. package/dist/analysis/automatic-completion.d.ts +13 -8
  89. package/dist/analysis/automatic-completion.js +14 -8
  90. package/dist/analysis/automatic-config.d.ts +1 -1
  91. package/dist/analysis/automatic-config.js +2 -2
  92. package/dist/analysis/automatic.d.ts +10 -4
  93. package/dist/analysis/automatic.js +17 -13
  94. package/dist/analysis/codex-config.d.ts +6 -2
  95. package/dist/analysis/codex-config.js +22 -14
  96. package/dist/analysis/diagnostics.d.ts +23 -0
  97. package/dist/analysis/diagnostics.js +112 -0
  98. package/dist/analysis/evidence-sources.js +2 -2
  99. package/dist/analysis/evidence.js +6 -6
  100. package/dist/analysis/execute.d.ts +7 -1
  101. package/dist/analysis/execute.js +39 -12
  102. package/dist/analysis/job.d.ts +8 -5
  103. package/dist/analysis/job.js +15 -14
  104. package/dist/analysis/load.d.ts +1 -1
  105. package/dist/analysis/load.js +5 -5
  106. package/dist/analysis/provider.d.ts +9 -1
  107. package/dist/analysis/restricted-codex.d.ts +2 -0
  108. package/dist/analysis/restricted-codex.js +10 -1
  109. package/dist/analysis/service.d.ts +2 -0
  110. package/dist/analysis/service.js +35 -16
  111. package/dist/analysis/sharing.d.ts +2 -2
  112. package/dist/analysis/sharing.js +5 -5
  113. package/dist/analysis/store-executions.d.ts +5 -5
  114. package/dist/analysis/store-executions.js +12 -12
  115. package/dist/analysis/store.d.ts +4 -4
  116. package/dist/analysis/store.js +13 -13
  117. package/dist/cli/commands/analysis-signals.d.ts +2 -1
  118. package/dist/cli/commands/analysis-signals.js +4 -1
  119. package/dist/cli/commands/analyze.js +23 -18
  120. package/dist/cli/commands/codex.js +9 -9
  121. package/dist/cli/commands/comms.js +62 -34
  122. package/dist/cli/commands/feedback.js +20 -21
  123. package/dist/cli/commands/lab-format.d.ts +5 -4
  124. package/dist/cli/commands/lab-format.js +35 -23
  125. package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
  126. package/dist/cli/commands/lab-route-computer-use.js +32 -21
  127. package/dist/cli/commands/lab-route-preview.d.ts +1 -3
  128. package/dist/cli/commands/lab-route-preview.js +7 -7
  129. package/dist/cli/commands/lab-route-run.d.ts +6 -4
  130. package/dist/cli/commands/lab-route-run.js +6 -2
  131. package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
  132. package/dist/cli/commands/lab-route-scripted.js +0 -1
  133. package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
  134. package/dist/cli/commands/lab-route-shared-world.js +3 -4
  135. package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
  136. package/dist/cli/commands/lab-route-terminal.js +0 -1
  137. package/dist/cli/commands/lab-run.js +84 -54
  138. package/dist/cli/commands/lab-scorer.d.ts +2 -4
  139. package/dist/cli/commands/lab-scorer.js +1 -1
  140. package/dist/cli/commands/migrate.d.ts +4 -0
  141. package/dist/cli/commands/migrate.js +65 -0
  142. package/dist/cli/commands/observe.js +168 -107
  143. package/dist/cli/commands/run-command.d.ts +10 -0
  144. package/dist/cli/commands/run-command.js +85 -0
  145. package/dist/cli/commands/run-signals.d.ts +30 -0
  146. package/dist/cli/commands/run-signals.js +146 -0
  147. package/dist/cli/commands/runs.js +137 -136
  148. package/dist/cli/commands/setup.d.ts +2 -2
  149. package/dist/cli/commands/setup.js +26 -21
  150. package/dist/cli/commands/study.d.ts +3 -0
  151. package/dist/cli/commands/study.js +182 -0
  152. package/dist/cli/commands/tui.d.ts +4 -4
  153. package/dist/cli/commands/tui.js +21 -21
  154. package/dist/cli/commands/watch.js +64 -77
  155. package/dist/cli/deprecations.d.ts +18 -0
  156. package/dist/cli/deprecations.js +48 -0
  157. package/dist/cli/doctor.d.ts +18 -5
  158. package/dist/cli/doctor.js +111 -48
  159. package/dist/cli/first-run-path.d.ts +12 -10
  160. package/dist/cli/first-run-path.js +30 -28
  161. package/dist/cli/io.d.ts +46 -10
  162. package/dist/cli/io.js +109 -30
  163. package/dist/cli/observer-follow.d.ts +2 -2
  164. package/dist/cli/observer-follow.js +5 -6
  165. package/dist/cli/orientation.d.ts +6 -3
  166. package/dist/cli/orientation.js +43 -39
  167. package/dist/cli/product-sentence.d.ts +6 -0
  168. package/dist/cli/product-sentence.js +6 -0
  169. package/dist/cli/program.d.ts +6 -1
  170. package/dist/cli/program.js +112 -43
  171. package/dist/cli/telemetry.d.ts +17 -17
  172. package/dist/cli/telemetry.js +49 -41
  173. package/dist/cli.js +1 -1
  174. package/dist/comms/capture-surface.d.ts +14 -13
  175. package/dist/comms/capture-surface.js +23 -22
  176. package/dist/comms/catch-host.d.ts +8 -8
  177. package/dist/comms/catch-host.js +14 -14
  178. package/dist/comms/connections.js +4 -4
  179. package/dist/comms/email-catch.d.ts +3 -3
  180. package/dist/comms/email-catch.js +8 -8
  181. package/dist/comms/external-evidence.d.ts +27 -0
  182. package/dist/comms/external-evidence.js +93 -0
  183. package/dist/comms/extract.js +2 -2
  184. package/dist/comms/fake-inbox.d.ts +2 -2
  185. package/dist/comms/fake-inbox.js +2 -2
  186. package/dist/comms/lease-store.js +7 -7
  187. package/dist/comms/receiving-render.d.ts +1 -1
  188. package/dist/comms/receiving-render.js +2 -2
  189. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  190. package/dist/comms/sandbox-catch-script.js +6 -6
  191. package/dist/comms/sandbox-catch.d.ts +36 -37
  192. package/dist/comms/sandbox-catch.js +34 -35
  193. package/dist/comms/setup.js +42 -8
  194. package/dist/comms/thread-evidence.d.ts +1 -1
  195. package/dist/comms/thread-evidence.js +6 -6
  196. package/dist/comms/types.d.ts +6 -6
  197. package/dist/comms/types.js +4 -4
  198. package/dist/evidence/browser-hygiene.d.ts +1 -1
  199. package/dist/evidence/browser-hygiene.js +1 -1
  200. package/dist/evidence/frame-signature.d.ts +1 -1
  201. package/dist/evidence/frame-signature.js +4 -4
  202. package/dist/evidence/redaction.d.ts +3 -3
  203. package/dist/evidence/redaction.js +5 -5
  204. package/dist/evidence/secret-scrub.d.ts +9 -0
  205. package/dist/evidence/secret-scrub.js +96 -0
  206. package/dist/feedback/draft.js +41 -85
  207. package/dist/feedback/export-bundle.js +5 -5
  208. package/dist/feedback/export.d.ts +5 -1
  209. package/dist/feedback/export.js +16 -17
  210. package/dist/feedback/feedback.d.ts +3 -3
  211. package/dist/feedback/feedback.js +21 -3
  212. package/dist/guest/chromium-text.js +2 -2
  213. package/dist/guest/desktop-native.d.ts +1 -1
  214. package/dist/guest/runtime.js +1 -1
  215. package/dist/index.d.ts +14 -15
  216. package/dist/index.js +10 -11
  217. package/dist/keys/key-resolution.d.ts +7 -5
  218. package/dist/keys/key-resolution.js +40 -38
  219. package/dist/lab/adapter-extension.d.ts +35 -13
  220. package/dist/lab/adapter-extension.js +50 -134
  221. package/dist/lab/adapter-scorer-loader.d.ts +32 -12
  222. package/dist/lab/adapter-scorer-loader.js +56 -32
  223. package/dist/lab/composition-rules.js +58 -58
  224. package/dist/lab/config.js +85 -43
  225. package/dist/lab/deprecated-fields.d.ts +10 -0
  226. package/dist/lab/deprecated-fields.js +24 -0
  227. package/dist/lab/device-presets.d.ts +10 -10
  228. package/dist/lab/device-presets.js +11 -11
  229. package/dist/lab/discover.d.ts +13 -9
  230. package/dist/lab/discover.js +118 -60
  231. package/dist/lab/doctor.d.ts +53 -11
  232. package/dist/lab/doctor.js +193 -47
  233. package/dist/lab/init-plan.js +1 -3
  234. package/dist/lab/init-templates.js +147 -147
  235. package/dist/lab/init.d.ts +1 -1
  236. package/dist/lab/init.js +41 -9
  237. package/dist/lab/keys.d.ts +2 -0
  238. package/dist/lab/keys.js +43 -9
  239. package/dist/lab/lab-deps.d.ts +80 -0
  240. package/dist/lab/lab-deps.js +4 -0
  241. package/dist/lab/parse/actors.js +17 -16
  242. package/dist/lab/parse/comms.js +8 -7
  243. package/dist/lab/parse/execution.js +15 -14
  244. package/dist/lab/parse/study-v3.d.ts +23 -0
  245. package/dist/lab/parse/study-v3.js +259 -0
  246. package/dist/lab/parse/subject-state.d.ts +7 -7
  247. package/dist/lab/parse/subject-state.js +18 -17
  248. package/dist/lab/parse/subject.js +30 -29
  249. package/dist/lab/parse/values.d.ts +1 -2
  250. package/dist/lab/parse/values.js +3 -6
  251. package/dist/lab/persona-resolve.d.ts +7 -7
  252. package/dist/lab/persona-resolve.js +8 -8
  253. package/dist/lab/persona.js +1 -3
  254. package/dist/lab/plan-base.d.ts +0 -2
  255. package/dist/lab/plan-base.js +6 -4
  256. package/dist/lab/plan-participants.d.ts +7 -7
  257. package/dist/lab/plan-participants.js +2 -2
  258. package/dist/lab/plan-types.d.ts +26 -8
  259. package/dist/lab/plan.d.ts +4 -18
  260. package/dist/lab/plan.js +24 -79
  261. package/dist/lab/preflight-probes.js +11 -11
  262. package/dist/lab/preflight-result.d.ts +2 -1
  263. package/dist/lab/preflight-result.js +5 -6
  264. package/dist/lab/preflight.d.ts +7 -8
  265. package/dist/lab/preflight.js +6 -6
  266. package/dist/lab/requirements.d.ts +20 -0
  267. package/dist/lab/requirements.js +54 -0
  268. package/dist/lab/route-inputs.d.ts +23 -12
  269. package/dist/lab/route-inputs.js +48 -51
  270. package/dist/lab/routing.d.ts +42 -41
  271. package/dist/lab/routing.js +66 -68
  272. package/dist/lab/run-lab-events.d.ts +3 -11
  273. package/dist/lab/run-lab-events.js +2 -16
  274. package/dist/lab/run-lab-homes.d.ts +76 -0
  275. package/dist/lab/run-lab-homes.js +7 -0
  276. package/dist/lab/run-lab-options.d.ts +12 -66
  277. package/dist/lab/run-lab-options.js +58 -285
  278. package/dist/lab/summary.d.ts +15 -9
  279. package/dist/lab/summary.js +24 -17
  280. package/dist/lab/tasks.d.ts +15 -15
  281. package/dist/lab/tasks.js +14 -14
  282. package/dist/lab/types.d.ts +201 -195
  283. package/dist/lab/types.js +2 -0
  284. package/dist/lab/validation.d.ts +21 -21
  285. package/dist/lab/validation.js +61 -59
  286. package/dist/lab/warnings.d.ts +10 -0
  287. package/dist/lab/warnings.js +70 -41
  288. package/dist/library-aliases.d.ts +56 -0
  289. package/dist/library-aliases.js +22 -0
  290. package/dist/observer/artifact.d.ts +2 -2
  291. package/dist/observer/artifact.js +9 -9
  292. package/dist/observer/data.d.ts +6 -6
  293. package/dist/observer/data.js +7 -6
  294. package/dist/observer/exposure.d.ts +1 -1
  295. package/dist/observer/exposure.js +11 -11
  296. package/dist/observer/http.js +1 -1
  297. package/dist/observer/library.d.ts +1 -1
  298. package/dist/observer/library.js +4 -2
  299. package/dist/observer/listen.js +5 -4
  300. package/dist/observer/render.d.ts +1 -1
  301. package/dist/observer/render.js +12 -7
  302. package/dist/observer/run-routes.d.ts +4 -4
  303. package/dist/observer/run-routes.js +6 -6
  304. package/dist/observer/serve.d.ts +17 -0
  305. package/dist/observer/serve.js +41 -6
  306. package/dist/observer/tunnel.js +1 -1
  307. package/dist/observer-app.html +4 -4
  308. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  309. package/dist/routes/computer-use/bundle-parts.js +24 -17
  310. package/dist/routes/computer-use/bundle.d.ts +4 -11
  311. package/dist/routes/computer-use/bundle.js +12 -18
  312. package/dist/routes/computer-use/diagnostics.d.ts +1 -1
  313. package/dist/routes/computer-use/diagnostics.js +1 -1
  314. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
  315. package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
  316. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
  317. package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
  318. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
  319. package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
  320. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
  321. package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
  322. package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
  323. package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
  324. package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
  325. package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
  326. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
  327. package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
  328. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  329. package/dist/routes/computer-use/external-comms.js +19 -43
  330. package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
  331. package/dist/routes/computer-use/fanout-bundle.js +38 -42
  332. package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
  333. package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
  334. package/dist/routes/computer-use/in-process-desktop.js +3 -9
  335. package/dist/routes/computer-use/live-flush.d.ts +7 -5
  336. package/dist/routes/computer-use/live-flush.js +20 -28
  337. package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
  338. package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
  339. package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
  340. package/dist/routes/computer-use/local-tree-pack.js +4 -5
  341. package/dist/routes/computer-use/local-vm.d.ts +11 -8
  342. package/dist/routes/computer-use/local-vm.js +40 -67
  343. package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
  344. package/dist/routes/computer-use/participant-desktop.js +5 -25
  345. package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
  346. package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
  347. package/dist/routes/computer-use/participant-facts.d.ts +7 -1
  348. package/dist/routes/computer-use/participant-facts.js +12 -1
  349. package/dist/routes/computer-use/participant-model.d.ts +25 -11
  350. package/dist/routes/computer-use/participant-model.js +76 -34
  351. package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
  352. package/dist/routes/computer-use/participant-prompt.js +8 -8
  353. package/dist/routes/computer-use/participant-runs.d.ts +11 -11
  354. package/dist/routes/computer-use/participant-runs.js +18 -18
  355. package/dist/routes/computer-use/plan.d.ts +21 -29
  356. package/dist/routes/computer-use/plan.js +70 -78
  357. package/dist/routes/computer-use/preflight.d.ts +3 -5
  358. package/dist/routes/computer-use/preflight.js +40 -36
  359. package/dist/routes/computer-use/rerun-selection.js +11 -7
  360. package/dist/routes/computer-use/result.d.ts +1 -1
  361. package/dist/routes/computer-use/result.js +48 -38
  362. package/dist/routes/computer-use/route.d.ts +5 -5
  363. package/dist/routes/computer-use/route.js +36 -33
  364. package/dist/routes/computer-use/self-report.d.ts +8 -8
  365. package/dist/routes/computer-use/self-report.js +33 -33
  366. package/dist/routes/computer-use/setup.d.ts +9 -15
  367. package/dist/routes/computer-use/setup.js +106 -83
  368. package/dist/routes/computer-use/single-bundle.d.ts +13 -16
  369. package/dist/routes/computer-use/single-bundle.js +46 -53
  370. package/dist/routes/computer-use/subject-projection.d.ts +6 -8
  371. package/dist/routes/computer-use/subject-projection.js +24 -23
  372. package/dist/routes/computer-use/types.d.ts +195 -238
  373. package/dist/routes/computer-use/types.js +21 -13
  374. package/dist/routes/preview.d.ts +8 -2
  375. package/dist/routes/preview.js +8 -5
  376. package/dist/routes/scripted/bundle.d.ts +5 -8
  377. package/dist/routes/scripted/bundle.js +23 -27
  378. package/dist/routes/scripted/plan.d.ts +6 -8
  379. package/dist/routes/scripted/plan.js +15 -13
  380. package/dist/routes/scripted/result.d.ts +4 -1
  381. package/dist/routes/scripted/result.js +15 -11
  382. package/dist/routes/scripted/route.js +15 -17
  383. package/dist/routes/scripted/scenario.d.ts +1 -1
  384. package/dist/routes/scripted/scenario.js +3 -3
  385. package/dist/routes/scripted/setup.d.ts +3 -2
  386. package/dist/routes/scripted/setup.js +27 -26
  387. package/dist/routes/scripted/subject.d.ts +8 -3
  388. package/dist/routes/scripted/subject.js +10 -6
  389. package/dist/routes/scripted/surface-records.js +4 -4
  390. package/dist/routes/scripted/surface-sessions.d.ts +2 -2
  391. package/dist/routes/scripted/surface-sessions.js +4 -4
  392. package/dist/routes/scripted/types.d.ts +21 -40
  393. package/dist/routes/scripted/types.js +2 -3
  394. package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
  395. package/dist/routes/shared-world/bundle.d.ts +7 -7
  396. package/dist/routes/shared-world/bundle.js +60 -62
  397. package/dist/routes/shared-world/checkpoints.d.ts +5 -5
  398. package/dist/routes/shared-world/checkpoints.js +5 -5
  399. package/dist/routes/shared-world/comms.d.ts +8 -7
  400. package/dist/routes/shared-world/comms.js +38 -51
  401. package/dist/routes/shared-world/external-public.d.ts +6 -5
  402. package/dist/routes/shared-world/external-public.js +28 -25
  403. package/dist/routes/shared-world/handoff.d.ts +10 -9
  404. package/dist/routes/shared-world/handoff.js +89 -81
  405. package/dist/routes/shared-world/lobby-code.d.ts +7 -7
  406. package/dist/routes/shared-world/lobby-code.js +22 -22
  407. package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
  408. package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
  409. package/dist/routes/shared-world/plan.d.ts +2 -6
  410. package/dist/routes/shared-world/plan.js +8 -9
  411. package/dist/routes/shared-world/provenance.d.ts +4 -4
  412. package/dist/routes/shared-world/provenance.js +4 -4
  413. package/dist/routes/shared-world/provisioned.d.ts +3 -2
  414. package/dist/routes/shared-world/provisioned.js +55 -48
  415. package/dist/routes/shared-world/result.js +47 -36
  416. package/dist/routes/shared-world/route.js +54 -57
  417. package/dist/routes/shared-world/setup.d.ts +6 -5
  418. package/dist/routes/shared-world/setup.js +16 -18
  419. package/dist/routes/shared-world/types.d.ts +70 -141
  420. package/dist/routes/shared-world/types.js +5 -5
  421. package/dist/routes/terminal/adapter.d.ts +10 -10
  422. package/dist/routes/terminal/adapter.js +32 -129
  423. package/dist/routes/terminal/bundle.d.ts +10 -15
  424. package/dist/routes/terminal/bundle.js +43 -52
  425. package/dist/routes/terminal/credentials.d.ts +4 -4
  426. package/dist/routes/terminal/credentials.js +20 -20
  427. package/dist/routes/terminal/dry-run.d.ts +1 -1
  428. package/dist/routes/terminal/dry-run.js +13 -15
  429. package/dist/routes/terminal/encoding.d.ts +1 -1
  430. package/dist/routes/terminal/encoding.js +4 -4
  431. package/dist/routes/terminal/ledger.d.ts +8 -8
  432. package/dist/routes/terminal/ledger.js +22 -22
  433. package/dist/routes/terminal/live-finish.d.ts +1 -2
  434. package/dist/routes/terminal/live-finish.js +24 -23
  435. package/dist/routes/terminal/live-sandbox.d.ts +3 -2
  436. package/dist/routes/terminal/live-sandbox.js +31 -32
  437. package/dist/routes/terminal/participant-text.d.ts +23 -0
  438. package/dist/routes/terminal/participant-text.js +165 -0
  439. package/dist/routes/terminal/persona.js +1 -1
  440. package/dist/routes/terminal/plan.d.ts +2 -6
  441. package/dist/routes/terminal/plan.js +23 -19
  442. package/dist/routes/terminal/recorder.d.ts +6 -1
  443. package/dist/routes/terminal/recorder.js +12 -4
  444. package/dist/routes/terminal/result.js +12 -12
  445. package/dist/routes/terminal/route.js +30 -31
  446. package/dist/routes/terminal/runtime.d.ts +3 -2
  447. package/dist/routes/terminal/runtime.js +3 -3
  448. package/dist/routes/terminal/sandbox.d.ts +4 -4
  449. package/dist/routes/terminal/sandbox.js +10 -10
  450. package/dist/routes/terminal/session.js +22 -19
  451. package/dist/routes/terminal/token-usage.d.ts +1 -1
  452. package/dist/routes/terminal/token-usage.js +10 -11
  453. package/dist/routes/terminal/trace.d.ts +7 -10
  454. package/dist/routes/terminal/trace.js +11 -66
  455. package/dist/routes/terminal/types.d.ts +104 -114
  456. package/dist/routes/terminal/types.js +12 -7
  457. package/dist/run/active-runs.d.ts +13 -0
  458. package/dist/run/active-runs.js +12 -0
  459. package/dist/run/bundle-shape.d.ts +2 -1
  460. package/dist/run/bundle-shape.js +7 -7
  461. package/dist/run/bundle.d.ts +99 -92
  462. package/dist/run/bundle.js +10 -8
  463. package/dist/run/cost-summary.js +6 -5
  464. package/dist/run/costs.d.ts +6 -6
  465. package/dist/run/costs.js +17 -11
  466. package/dist/run/detail.d.ts +9 -9
  467. package/dist/run/detail.js +10 -10
  468. package/dist/run/dry-run-inputs.js +1 -1
  469. package/dist/run/dry-run.js +23 -30
  470. package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
  471. package/dist/run/{study-files.js → evidence-files.js} +5 -5
  472. package/dist/run/feedback-shape.js +1 -1
  473. package/dist/run/judge.d.ts +34 -16
  474. package/dist/run/judge.js +41 -14
  475. package/dist/run/locate.d.ts +2 -0
  476. package/dist/run/locate.js +3 -1
  477. package/dist/run/outcomes.d.ts +3 -3
  478. package/dist/run/outcomes.js +3 -3
  479. package/dist/run/participant-records.d.ts +2 -2
  480. package/dist/run/participant-records.js +2 -2
  481. package/dist/run/paths.d.ts +1 -1
  482. package/dist/run/paths.js +2 -2
  483. package/dist/run/pricing.d.ts +30 -15
  484. package/dist/run/pricing.js +49 -30
  485. package/dist/run/projection.d.ts +27 -27
  486. package/dist/run/projection.js +23 -23
  487. package/dist/run/reclaim.d.ts +6 -0
  488. package/dist/run/reclaim.js +15 -5
  489. package/dist/run/results.d.ts +5 -5
  490. package/dist/run/run-index.d.ts +9 -7
  491. package/dist/run/run-index.js +24 -25
  492. package/dist/run/run-not-found.d.ts +5 -0
  493. package/dist/run/run-not-found.js +15 -0
  494. package/dist/run/run.d.ts +7 -4
  495. package/dist/run/run.js +10 -6
  496. package/dist/run/sandbox-receipts.d.ts +5 -5
  497. package/dist/run/sandbox-receipts.js +6 -6
  498. package/dist/run/shared-world-evidence.d.ts +67 -66
  499. package/dist/run/shared-world-evidence.js +4 -4
  500. package/dist/run/shared-world-shape.d.ts +3 -3
  501. package/dist/run/shared-world-shape.js +16 -16
  502. package/dist/run/stats.d.ts +17 -11
  503. package/dist/run/stats.js +124 -66
  504. package/dist/run/status.d.ts +21 -32
  505. package/dist/run/status.js +34 -33
  506. package/dist/run/stored-runs.js +2 -1
  507. package/dist/run/stream-shape.js +1 -1
  508. package/dist/run/streams.d.ts +29 -22
  509. package/dist/run/study-provenance.d.ts +47 -0
  510. package/dist/run/study-provenance.js +63 -0
  511. package/dist/run/study-result.d.ts +16 -0
  512. package/dist/run/study-result.js +9 -0
  513. package/dist/run/terminal-contract.d.ts +5 -5
  514. package/dist/run/terminal-contract.js +4 -4
  515. package/dist/run/text.d.ts +2 -0
  516. package/dist/run/text.js +4 -0
  517. package/dist/run/transient-comms-secrets.d.ts +5 -0
  518. package/dist/run/transient-comms-secrets.js +12 -0
  519. package/dist/run-lab.d.ts +40 -38
  520. package/dist/run-lab.js +42 -40
  521. package/dist/study/convert.d.ts +33 -0
  522. package/dist/study/convert.js +432 -0
  523. package/dist/study/field-paths.d.ts +12 -0
  524. package/dist/study/field-paths.js +126 -0
  525. package/dist/study/files.d.ts +26 -0
  526. package/dist/study/files.js +43 -0
  527. package/dist/study/migrate.d.ts +48 -0
  528. package/dist/study/migrate.js +408 -0
  529. package/dist/study/owned-files.d.ts +38 -0
  530. package/dist/study/owned-files.js +182 -0
  531. package/dist/subject/clone.d.ts +1 -1
  532. package/dist/subject/desktop-cli.d.ts +2 -2
  533. package/dist/subject/desktop-cli.js +3 -3
  534. package/dist/subject/local-tree-archive.d.ts +1 -1
  535. package/dist/subject/local-tree-archive.js +5 -5
  536. package/dist/subject/local-tree.d.ts +3 -3
  537. package/dist/subject/local-tree.js +1 -1
  538. package/dist/subject/node-bootstrap.d.ts +1 -1
  539. package/dist/subject/node-bootstrap.js +4 -4
  540. package/dist/subject/runtime.js +10 -11
  541. package/dist/subject/serve.d.ts +1 -1
  542. package/dist/subject/serve.js +4 -4
  543. package/dist/subject/state.d.ts +1 -1
  544. package/dist/subject/steps.d.ts +8 -8
  545. package/dist/subject/steps.js +7 -7
  546. package/dist/substrates/command-failure.d.ts +3 -3
  547. package/dist/substrates/command-failure.js +3 -3
  548. package/dist/substrates/detached.d.ts +6 -6
  549. package/dist/substrates/detached.js +7 -7
  550. package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
  551. package/dist/substrates/e2b/cdp-probe.js +15 -18
  552. package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
  553. package/dist/substrates/e2b/desktop-browser.js +12 -12
  554. package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
  555. package/dist/substrates/e2b/desktop-cdp.js +11 -11
  556. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  557. package/dist/substrates/e2b/desktop-executor.js +1 -1
  558. package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
  559. package/dist/substrates/e2b/desktop-geometry.js +9 -9
  560. package/dist/substrates/e2b/desktop-media.d.ts +1 -1
  561. package/dist/substrates/e2b/desktop-media.js +3 -3
  562. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  563. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  564. package/dist/substrates/e2b/sandbox.d.ts +1 -1
  565. package/dist/substrates/e2b/sandbox.js +2 -2
  566. package/dist/substrates/e2b/sdk.d.ts +11 -11
  567. package/dist/substrates/e2b/sdk.js +8 -8
  568. package/dist/substrates/local/runtime-host.d.ts +2 -0
  569. package/dist/substrates/local/runtime-host.js +6 -0
  570. package/dist/tui/actions.d.ts +8 -6
  571. package/dist/tui/actions.js +31 -22
  572. package/dist/tui/contract.d.ts +16 -16
  573. package/dist/tui/contract.js +10 -10
  574. package/dist/tui/launch.d.ts +4 -4
  575. package/dist/tui/launch.js +18 -19
  576. package/dist/tui/project.js +5 -5
  577. package/dist/tui-app.js +83 -83
  578. package/dist/verify/actor.d.ts +14 -14
  579. package/dist/verify/actor.js +45 -45
  580. package/dist/verify/artifacts.d.ts +3 -3
  581. package/dist/verify/artifacts.js +6 -6
  582. package/dist/verify/context-growth.d.ts +9 -0
  583. package/dist/verify/context-growth.js +62 -0
  584. package/dist/verify/costs.d.ts +7 -7
  585. package/dist/verify/costs.js +9 -9
  586. package/dist/verify/liveness.d.ts +1 -1
  587. package/dist/verify/liveness.js +4 -1
  588. package/dist/verify/rerun.d.ts +1 -1
  589. package/dist/verify/rerun.js +1 -1
  590. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  591. package/dist/verify/shared-world-concurrent.js +79 -76
  592. package/dist/verify/shared-world.d.ts +2 -2
  593. package/dist/verify/shared-world.js +18 -18
  594. package/dist/verify/subject.d.ts +4 -4
  595. package/dist/verify/subject.js +18 -18
  596. package/dist/verify/verify.js +98 -49
  597. package/docs/README.md +26 -33
  598. package/docs/architecture/actor-contract.md +105 -98
  599. package/docs/architecture/desktop-sessions.md +14 -14
  600. package/docs/architecture/external-public-shared-world.md +66 -59
  601. package/docs/architecture/github-feedback-loop.md +1 -4
  602. package/docs/architecture/guest-desktop.md +2 -2
  603. package/docs/architecture/observer.md +37 -37
  604. package/docs/architecture/restricted-codex-analysis.md +70 -30
  605. package/docs/architecture/serve.md +34 -37
  606. package/docs/architecture/state-driven-executor.md +55 -59
  607. package/docs/architecture/task-protocol-support.md +7 -9
  608. package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
  609. package/docs/contracts/README.md +24 -0
  610. package/docs/contracts/adapter-admission.md +3 -3
  611. package/docs/contracts/adapter-fixtures.md +2 -5
  612. package/docs/contracts/core.md +1 -3
  613. package/docs/contracts/errors.md +62 -0
  614. package/docs/contracts/feedback.md +8 -9
  615. package/docs/contracts/policy.md +7 -12
  616. package/docs/contracts/run-bundle.md +54 -51
  617. package/docs/contracts/schemas.md +505 -390
  618. package/docs/contracts/study-analysis.md +26 -2
  619. package/docs/contracts/study-costs.md +11 -7
  620. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  621. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  622. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  623. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
  624. package/docs/principles/actor-fidelity.md +4 -4
  625. package/docs/principles/engineering.md +3 -3
  626. package/docs/principles/invariants-and-defaults.md +38 -38
  627. package/docs/principles/self-driving-harness.md +1 -5
  628. package/docs/principles/three-roles.md +1 -1
  629. package/docs/product/automatic-analysis.md +8 -7
  630. package/examples/participant/README.md +5 -5
  631. package/examples/participant/run.mjs +11 -10
  632. package/examples/scorer/README.md +3 -3
  633. package/examples/scorer/run.mjs +11 -12
  634. package/package.json +16 -17
  635. package/skills/humanish/SKILL.md +63 -60
  636. package/skills/humanish/agents/openai.yaml +1 -1
  637. package/AGENTS.md +0 -99
  638. package/CONTRIBUTING.md +0 -148
  639. package/dist/actors/codex/qualified-versions.d.ts +0 -45
  640. package/dist/actors/codex/qualified-versions.js +0 -87
  641. package/dist/cli/commands/lab.d.ts +0 -3
  642. package/dist/cli/commands/lab.js +0 -193
  643. package/dist/deprecated.d.ts +0 -90
  644. package/dist/deprecated.js +0 -106
  645. package/dist/lab/bag-overrides.d.ts +0 -18
  646. package/dist/lab/bag-overrides.js +0 -121
  647. package/dist/observer/static.d.ts +0 -39
  648. package/dist/observer/static.js +0 -369
  649. package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
  650. package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
  651. package/docs/architecture/comms-inbox.md +0 -122
  652. package/docs/architecture/desktop-recording.md +0 -80
  653. package/docs/architecture/local-browser-runtime.md +0 -178
  654. package/docs/architecture/observer-review.md +0 -144
  655. package/docs/architecture/participant-media.md +0 -90
  656. package/docs/architecture/project-layout.md +0 -62
  657. package/docs/architecture/real-email-receiving.md +0 -136
  658. package/docs/assets/humanish-drawdb-hero.png +0 -0
  659. package/docs/assets/humanish-observer-hero.png +0 -0
  660. package/docs/goals/current.md +0 -207
  661. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  662. package/docs/product/open-source-install-experience.md +0 -240
  663. package/docs/ramp/README.md +0 -294
  664. package/docs/release/open-source-readiness.md +0 -222
  665. package/docs/release/public-readiness-standard.md +0 -210
  666. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  667. /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
  668. /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
@@ -1,8 +1,7 @@
1
1
  import type { AutomaticAnalysisBudget } from "../analysis/automatic-config.js";
2
2
  import type { E2BDesktopModule } from "../substrates/e2b/sdk.js";
3
3
  import { type LabConfig } from "./types.js";
4
- import { LAB_PREFLIGHT_SCHEMA } from "./preflight-result.js";
5
- import type { LabBackend } from "./plan.js";
4
+ import { STUDY_CHECK_SCHEMA } from "./preflight-result.js";
6
5
  import { type LabRoute } from "./plan.js";
7
6
  import { type LabResolveFailure } from "./discover.js";
8
7
  export type LabPreflightReachabilityMode = "metadata" | "public-preview" | "sandbox-loopback" | "prepared-host";
@@ -39,15 +38,15 @@ interface LabPreflightSpend {
39
38
  export interface LabPreflightResult {
40
39
  /** The separate budget for a future live run, never spend by preflight itself. */
41
40
  analysis?: AutomaticAnalysisBudget;
42
- schema: typeof LAB_PREFLIGHT_SCHEMA;
41
+ schema: typeof STUDY_CHECK_SCHEMA;
43
42
  ok: boolean;
44
43
  cwd: string;
45
- lab: string;
46
- labId?: string;
44
+ /** The study the caller asked for, as given. */
45
+ study: string;
46
+ /** The resolved study's `id`, once the file parses. */
47
+ studyId?: string;
47
48
  origin?: string;
48
49
  path?: string;
49
- /** The route's older name; `route` is the current one. */
50
- backend?: LabBackend;
51
50
  route?: LabRoute;
52
51
  reachability: LabPreflightReachabilityMode;
53
52
  checks: LabPreflightCheck[];
@@ -56,7 +55,7 @@ export interface LabPreflightResult {
56
55
  spend: LabPreflightSpend;
57
56
  warnings: string[];
58
57
  error?: {
59
- code: LabResolveFailure["error"]["code"] | "HUMANISH_LAB_PREFLIGHT_INVALID_OPTION" | "HUMANISH_LAB_PREFLIGHT_UNSUPPORTED_ROUTE" | "HUMANISH_LAB_PREFLIGHT_TARGET_POLICY" | "HUMANISH_LAB_PREFLIGHT_ENV_MISSING" | "HUMANISH_LAB_PREFLIGHT_E2B_REQUIRED" | "HUMANISH_LAB_PREFLIGHT_TARGET_UNREACHABLE" | "HUMANISH_LAB_PREFLIGHT_PROVISION_FAILED" | "HUMANISH_LAB_PREFLIGHT_TEARDOWN_FAILED";
58
+ code: LabResolveFailure["error"]["code"] | "HUMANISH_STUDY_PREFLIGHT_INVALID_OPTION" | "HUMANISH_STUDY_PREFLIGHT_UNSUPPORTED_ROUTE" | "HUMANISH_STUDY_PREFLIGHT_TARGET_POLICY" | "HUMANISH_STUDY_PREFLIGHT_ENV_MISSING" | "HUMANISH_STUDY_PREFLIGHT_E2B_REQUIRED" | "HUMANISH_STUDY_PREFLIGHT_TARGET_UNREACHABLE" | "HUMANISH_STUDY_PREFLIGHT_PROVISION_FAILED" | "HUMANISH_STUDY_PREFLIGHT_TEARDOWN_FAILED";
60
59
  message: string;
61
60
  };
62
61
  }
@@ -2,7 +2,7 @@ import path from "node:path";
2
2
  import { isLoopbackUrl } from "./parse/subject.js";
3
3
  import {} from "./types.js";
4
4
  import { runPublicPreviewPreflight, runSandboxLoopbackPreflight } from "./preflight-probes.js";
5
- import { digest, fail, finalize, LAB_PREFLIGHT_SCHEMA } from "./preflight-result.js";
5
+ import { digest, fail, finalize, STUDY_CHECK_SCHEMA } from "./preflight-result.js";
6
6
  import { routeOf } from "./plan.js";
7
7
  import { resolveLabManifest } from "./discover.js";
8
8
  import { rosterOf } from "./parse/actors.js";
@@ -14,10 +14,10 @@ export async function runLabPreflight(options) {
14
14
  const resolved = await resolveLabManifest(cwd, options.lab);
15
15
  if (!resolved.ok) {
16
16
  return {
17
- schema: LAB_PREFLIGHT_SCHEMA,
17
+ schema: STUDY_CHECK_SCHEMA,
18
18
  ok: false,
19
19
  cwd,
20
- lab: options.lab,
20
+ study: options.lab,
21
21
  reachability,
22
22
  checks: [
23
23
  {
@@ -48,7 +48,7 @@ export async function runLabPreflight(options) {
48
48
  hooks: options.hooks ?? {},
49
49
  checks: [
50
50
  { name: "lab manifest", ok: true, message: `resolved ${resolved.origin} lab manifest` },
51
- { name: "backend", ok: true, message: `selected the ${route} route` },
51
+ { name: "route", ok: true, message: `selected the ${route} route` },
52
52
  ],
53
53
  targets: collectTargets(resolved.config),
54
54
  sandbox: { created: false },
@@ -60,7 +60,7 @@ export async function runLabPreflight(options) {
60
60
  check: {
61
61
  name: "reachability",
62
62
  ok: true,
63
- message: "metadata-only; no network, sandbox, or model calls. Credentials, local login, dependencies and target reachability were not checked; use humanish doctor --lab <lab> for setup checks.",
63
+ message: "metadata-only; no network, sandbox, or model calls. Credentials, local login, dependencies and target reachability were not checked; use humanish doctor --study <study> for setup checks.",
64
64
  },
65
65
  });
66
66
  case "public-preview":
@@ -68,7 +68,7 @@ export async function runLabPreflight(options) {
68
68
  case "sandbox-loopback":
69
69
  return await runSandboxLoopbackPreflight(ctx);
70
70
  case "prepared-host":
71
- return fail(ctx, "HUMANISH_LAB_PREFLIGHT_UNSUPPORTED_ROUTE", "prepared-host preflight requires a library adapter hook; the plain CLI can validate metadata only for this mode.", [
71
+ return fail(ctx, "HUMANISH_STUDY_PREFLIGHT_UNSUPPORTED_ROUTE", "prepared-host preflight requires a library adapter hook; the plain CLI can validate metadata only for this mode.", [
72
72
  {
73
73
  name: "prepared-host",
74
74
  ok: false,
@@ -0,0 +1,20 @@
1
+ import type { LabPlan, Requirement } from "./plan-types.js";
2
+ /** The `key` requirements whose value `env` lacks, OPENAI_API_KEY before E2B_API_KEY. */
3
+ export declare function missingKeys(requirements: readonly Requirement[], env: Record<string, string | undefined>): string[];
4
+ /** The subject env names the requirements list and `env` lacks, in declaration order. */
5
+ export declare function missingSubjectEnv(requirements: readonly Requirement[], env: Record<string, string | undefined>): string[];
6
+ /**
7
+ * The provider keys the requirements name, in plan order. A `key-one-of` names the first of its
8
+ * keys that `isPresent` reports, else OPENAI_API_KEY.
9
+ */
10
+ export declare function requiredKeys(requirements: readonly Requirement[], isPresent: (name: string) => boolean): string[];
11
+ /** The subject env names the requirements list, in declaration order. */
12
+ export declare function requiredSubjectEnv(requirements: readonly Requirement[]): string[];
13
+ /**
14
+ * The provider keys a live run of `plan` is known to read: its `key` and `key-one-of` names, its
15
+ * subject env, the external catch's token variable, ANTHROPIC_API_KEY for a Claude Code
16
+ * participant, and OPENAI_API_KEY when automatic analysis runs on OpenAI. `lab run` prints a
17
+ * key-source line for these only. Discovery still fills every key it finds: other readers, such as
18
+ * a declared scorer's host code, are not in the plan.
19
+ */
20
+ export declare function keyNamesOf(plan: LabPlan): ReadonlySet<string>;
@@ -0,0 +1,54 @@
1
+ /** Provider keys in the order the routes name them in a refusal. */
2
+ const KEY_ORDER = ["OPENAI_API_KEY", "E2B_API_KEY"];
3
+ const present = (env, name) => (env[name]?.trim() ?? "") !== "";
4
+ /** The `key` requirements whose value `env` lacks, OPENAI_API_KEY before E2B_API_KEY. */
5
+ export function missingKeys(requirements, env) {
6
+ const required = new Set(requirements.flatMap((requirement) => (requirement.kind === "key" ? [requirement.name] : [])));
7
+ return KEY_ORDER.filter((name) => required.has(name) && !present(env, name));
8
+ }
9
+ /** The subject env names the requirements list and `env` lacks, in declaration order. */
10
+ export function missingSubjectEnv(requirements, env) {
11
+ return requiredSubjectEnv(requirements).filter((name) => !present(env, name));
12
+ }
13
+ /**
14
+ * The provider keys the requirements name, in plan order. A `key-one-of` names the first of its
15
+ * keys that `isPresent` reports, else OPENAI_API_KEY.
16
+ */
17
+ export function requiredKeys(requirements, isPresent) {
18
+ return requirements.flatMap((requirement) => {
19
+ if (requirement.kind === "key")
20
+ return [requirement.name];
21
+ if (requirement.kind === "key-one-of")
22
+ return [requirement.names.find(isPresent) ?? requirement.names[1]];
23
+ return [];
24
+ });
25
+ }
26
+ /** The subject env names the requirements list, in declaration order. */
27
+ export function requiredSubjectEnv(requirements) {
28
+ return requirements.flatMap((requirement) => requirement.kind === "subject-env" ? requirement.names : []);
29
+ }
30
+ /**
31
+ * The provider keys a live run of `plan` is known to read: its `key` and `key-one-of` names, its
32
+ * subject env, the external catch's token variable, ANTHROPIC_API_KEY for a Claude Code
33
+ * participant, and OPENAI_API_KEY when automatic analysis runs on OpenAI. `lab run` prints a
34
+ * key-source line for these only. Discovery still fills every key it finds: other readers, such as
35
+ * a declared scorer's host code, are not in the plan.
36
+ */
37
+ export function keyNamesOf(plan) {
38
+ const names = new Set();
39
+ for (const requirement of plan.requirements) {
40
+ if (requirement.kind === "key")
41
+ names.add(requirement.name);
42
+ if (requirement.kind === "key-one-of" || requirement.kind === "subject-env")
43
+ for (const name of requirement.names)
44
+ names.add(name);
45
+ if (requirement.kind === "local-agent" && requirement.agent === "claude")
46
+ names.add("ANTHROPIC_API_KEY");
47
+ }
48
+ const catchToken = plan.residual.comms?.email?.external?.authTokenEnv;
49
+ if (catchToken !== undefined)
50
+ names.add(catchToken);
51
+ if (plan.analysis !== undefined && plan.analysis.config.provider !== "codex")
52
+ names.add("OPENAI_API_KEY");
53
+ return names;
54
+ }
@@ -1,17 +1,28 @@
1
- import type { RunLabOptions } from "../run-lab.js";
1
+ import type { InternalRunLabOptions } from "../run-lab.js";
2
+ import type { RunScorerProvenance } from "../run/bundle.js";
3
+ import { type AdapterScorerModule } from "./adapter-scorer-loader.js";
4
+ import type { LabDeps } from "./lab-deps.js";
5
+ import type { LabEvent } from "./run-lab-events.js";
2
6
  import type { ComputerUseRunInput } from "../routes/computer-use/types.js";
3
7
  import type { ScriptedRunInput } from "../routes/scripted/types.js";
4
8
  import type { SharedWorldRunInput } from "../routes/shared-world/types.js";
5
9
  import type { TerminalRunInput } from "../routes/terminal/types.js";
6
- export declare function computerUseInput(options: RunLabOptions): ComputerUseRunInput;
7
- export declare function scriptedInput(options: RunLabOptions): ScriptedRunInput;
8
- export declare function terminalInput(options: RunLabOptions): TerminalRunInput;
9
- export declare function sharedWorldInput(options: RunLabOptions): SharedWorldRunInput;
10
+ export declare function computerUseInput(options: InternalRunLabOptions, deps: LabDeps, emit: LabEmit | undefined): ComputerUseRunInput;
11
+ export declare function scriptedInput(options: InternalRunLabOptions, deps: LabDeps, emit: LabEmit | undefined): ScriptedRunInput;
12
+ export declare function terminalInput(options: InternalRunLabOptions, deps: LabDeps, emit: LabEmit | undefined): TerminalRunInput;
13
+ export declare function sharedWorldInput(options: InternalRunLabOptions, deps: LabDeps, emit: LabEmit | undefined): SharedWorldRunInput;
10
14
  /** A scorer the CLI loads after the route's local checks, and the provenance it stamps on the run. */
11
- export type LateScorer = Pick<RunLabOptions, "scorer" | "scorerProvenance">;
12
- /** The computer-use input with a scorer loaded after admission (see withLateScorer). */
13
- export declare function computerUseInputWithScorer(input: ComputerUseRunInput, late: LateScorer | undefined): ComputerUseRunInput;
14
- /** The shared-world input with a scorer loaded after admission (see withLateScorer). */
15
- export declare function sharedWorldInputWithScorer(input: SharedWorldRunInput, late: LateScorer | undefined): SharedWorldRunInput;
16
- /** The terminal input with a scorer loaded after admission. Terminal runs take no deriveArtifacts. */
17
- export declare function terminalInputWithScorer(input: TerminalRunInput, late: LateScorer | undefined): TerminalRunInput;
15
+ export type LateScorer = Pick<InternalRunLabOptions, "scorer" | "scorerProvenance">;
16
+ /** Narrows RunLabOptions.scorer to the context the route passes (adapter-scorer-loader.ts). */
17
+ type NarrowScorer<S> = (scorer: AdapterScorerModule) => S;
18
+ /**
19
+ * A route's input with a scorer loaded after admission, and the scorer's provenance, as if the
20
+ * caller had passed them up front. The rest of the input is the one the route's checks admitted.
21
+ */
22
+ export declare function withLateScorer<S, I extends {
23
+ scorer?: S;
24
+ scorerProvenance?: RunScorerProvenance;
25
+ }>(input: I, late: LateScorer | undefined, narrow: NarrowScorer<S>): I;
26
+ /** Reports a LabEvent to onEvent without waiting (normalizeRunLabOptions builds it). */
27
+ type LabEmit = (event: LabEvent) => void;
28
+ export {};
@@ -1,95 +1,92 @@
1
- // What each route's run takes from runLab's options: the shared run settings, the route's own
2
- // hook bag, the automatic-analysis hooks and the declared scorer's provenance.
3
- import { HOOK_MEMBERS, withHookOverrides } from "./bag-overrides.js";
4
- import { scorerHooks } from "./run-lab-options.js";
5
- export function computerUseInput(options) {
1
+ // What each route's run takes from runLab's options: the shared run settings, the typed options
2
+ // the route reads, the event emitter, the test seams and the declared scorer's provenance.
3
+ import { browserRouteScorer, terminalRouteScorer, } from "./adapter-scorer-loader.js";
4
+ export function computerUseInput(options, deps, emit) {
6
5
  return {
7
6
  ...analysisOf(options),
8
7
  cwd: options.cwd,
9
- // CLI --count overrides the homogeneous fan-out lane count (a declared roster's length wins).
8
+ // CLI --count overrides the homogeneous fan-out participant count (a declared roster's length wins).
10
9
  ...(options.count === undefined ? {} : { countOverride: options.count }),
11
10
  ...(options.open === undefined ? {} : { open: options.open }),
12
11
  ...(options.onObserverReady === undefined ? {} : { onObserverReady: options.onObserverReady }),
13
12
  ...(options.runId === undefined ? {} : { runId: options.runId }),
14
13
  ...(options.rerun === undefined ? {} : { rerun: options.rerun }),
15
- ...(options.cuaHooks === undefined ? {} : { hooks: options.cuaHooks }),
16
- ...scorerOf(options),
14
+ ...(options.env === undefined ? {} : { env: options.env }),
15
+ ...(options.prepareDesktop === undefined ? {} : { prepareDesktop: options.prepareDesktop }),
16
+ ...(options.createProvider === undefined ? {} : { createProvider: options.createProvider }),
17
+ ...(options.inProcess === undefined ? {} : { inProcess: options.inProcess }),
18
+ ...(options.localVm === undefined ? {} : { localVm: options.localVm }),
19
+ ...observersOf(options, emit),
20
+ deps,
21
+ ...scorerOf(options, browserRouteScorer),
17
22
  };
18
23
  }
19
- export function scriptedInput(options) {
24
+ export function scriptedInput(options, deps, emit) {
20
25
  return {
21
26
  ...analysisOf(options),
27
+ ...(emit === undefined ? {} : { emit }),
22
28
  cwd: options.cwd,
23
29
  ...(options.open === undefined ? {} : { open: options.open }),
24
30
  ...(options.runId === undefined ? {} : { runId: options.runId }),
25
- ...(options.scriptedHooks === undefined ? {} : { hooks: options.scriptedHooks }),
31
+ ...(options.env === undefined ? {} : { env: options.env }),
32
+ ...(options.prepareDesktop === undefined ? {} : { prepareDesktop: options.prepareDesktop }),
33
+ deps,
26
34
  };
27
35
  }
28
- export function terminalInput(options) {
36
+ export function terminalInput(options, deps, emit) {
29
37
  return {
30
38
  ...analysisOf(options),
39
+ ...(emit === undefined ? {} : { emit }),
31
40
  cwd: options.cwd,
32
41
  ...(options.open === undefined ? {} : { open: options.open }),
33
42
  ...(options.runId === undefined ? {} : { runId: options.runId }),
34
- ...(options.terminalHooks === undefined ? {} : { hooks: options.terminalHooks }),
35
- ...scorerOf(options),
43
+ ...(options.env === undefined ? {} : { env: options.env }),
44
+ deps,
45
+ ...scorerOf(options, terminalRouteScorer),
36
46
  };
37
47
  }
38
- export function sharedWorldInput(options) {
48
+ export function sharedWorldInput(options, deps, emit) {
39
49
  return {
40
50
  ...analysisOf(options),
41
51
  cwd: options.cwd,
42
52
  ...(options.open === undefined ? {} : { open: options.open }),
43
53
  ...(options.onObserverReady === undefined ? {} : { onObserverReady: options.onObserverReady }),
44
54
  ...(options.runId === undefined ? {} : { runId: options.runId }),
45
- ...(options.sharedWorldHooks === undefined ? {} : { hooks: options.sharedWorldHooks }),
46
- ...scorerOf(options),
55
+ ...(options.env === undefined ? {} : { env: options.env }),
56
+ ...(options.prepareDesktop === undefined ? {} : { prepareDesktop: options.prepareDesktop }),
57
+ ...observersOf(options, emit),
58
+ deps,
59
+ ...scorerOf(options, browserRouteScorer),
47
60
  };
48
61
  }
49
- /** The computer-use input with a scorer loaded after admission (see withLateScorer). */
50
- export function computerUseInputWithScorer(input, late) {
51
- const hooks = late?.scorer === undefined ? undefined : scorerHooks(late.scorer);
52
- return withLateScorer(input, HOOK_MEMBERS.cua, hooks, late);
53
- }
54
- /** The shared-world input with a scorer loaded after admission (see withLateScorer). */
55
- export function sharedWorldInputWithScorer(input, late) {
56
- const hooks = late?.scorer === undefined ? undefined : scorerHooks(late.scorer);
57
- return withLateScorer(input, HOOK_MEMBERS.sharedWorld, hooks, late);
58
- }
59
- /** The terminal input with a scorer loaded after admission. Terminal runs take no deriveArtifacts. */
60
- export function terminalInputWithScorer(input, late) {
61
- const scorer = late?.scorer;
62
- const hooks = scorer === undefined
63
- ? undefined
64
- : {
65
- ...(scorer.score === undefined ? {} : { score: scorer.score }),
66
- ...(scorer.deriveFeedback === undefined ? {} : { deriveFeedback: scorer.deriveFeedback }),
67
- };
68
- return withLateScorer(input, HOOK_MEMBERS.terminal, hooks, late);
69
- }
70
62
  /**
71
- * `input` with the scorer's hooks over its hook bag, as normalizeRunLabOptions maps a scorer the
72
- * caller passes up front, and the scorer's provenance. The bag is wrapped, never rebuilt, so the
73
- * members the route's checks already read stay the same objects.
63
+ * A route's input with a scorer loaded after admission, and the scorer's provenance, as if the
64
+ * caller had passed them up front. The rest of the input is the one the route's checks admitted.
74
65
  */
75
- function withLateScorer(input, declared, hooks, late) {
66
+ export function withLateScorer(input, late, narrow) {
76
67
  if (late === undefined)
77
68
  return input;
78
69
  return {
79
70
  ...input,
80
- ...(hooks === undefined
81
- ? {}
82
- : { hooks: withHookOverrides(input.hooks, declared, hooks) }),
71
+ ...(late.scorer === undefined ? {} : { scorer: narrow(late.scorer) }),
83
72
  ...(late.scorerProvenance === undefined ? {} : { scorerProvenance: late.scorerProvenance }),
84
73
  };
85
74
  }
75
+ /** The caller's stream callback and the run's event emitter, for the routes that report them. */
76
+ function observersOf(options, emit) {
77
+ return {
78
+ ...(options.onStream === undefined ? {} : { onStream: options.onStream }),
79
+ ...(emit === undefined ? {} : { emit }),
80
+ };
81
+ }
86
82
  function analysisOf(options) {
87
- return options.automaticAnalysis === undefined
88
- ? {}
89
- : { automaticAnalysis: options.automaticAnalysis };
83
+ return options.analysisSignal === undefined ? {} : { analysisSignal: options.analysisSignal };
90
84
  }
91
- function scorerOf(options) {
92
- return options.scorerProvenance === undefined
93
- ? {}
94
- : { scorerProvenance: options.scorerProvenance };
85
+ function scorerOf(options, narrow) {
86
+ return {
87
+ ...(options.scorer === undefined ? {} : { scorer: narrow(options.scorer) }),
88
+ ...(options.scorerProvenance === undefined
89
+ ? {}
90
+ : { scorerProvenance: options.scorerProvenance }),
91
+ };
95
92
  }
@@ -1,81 +1,82 @@
1
1
  import type { LabConfig } from "./types.js";
2
- export declare const MAX_CUA_LANES = 16;
2
+ export declare const MAX_COMPUTER_USE_PARTICIPANTS = 16;
3
3
  export declare function actorResolvesToComputerUse(type: string | undefined): boolean;
4
4
  export declare function registeredComputerUseActors(): string[];
5
5
  export declare function actorResolvesToScriptedBrowser(type: string | undefined): boolean;
6
6
  export declare function registeredScriptedBrowserActors(): string[];
7
- /** True when `type` resolves to a registered terminal actor (the "terminal" lane). Exported so
7
+ /** True when `type` resolves to a registered terminal actor (the "terminal" run kind). Exported so
8
8
  * the engine + tests can resolve the dispatch the same way the parser does. */
9
9
  export declare function actorResolvesToTerminal(type: string | undefined): boolean;
10
10
  export declare function registeredTerminalActors(): string[];
11
11
  /**
12
- * The declared fan-out lane count on the computer-use route: a `lanes[]` roster's length, else
12
+ * The declared fan-out participant count on the computer-use route: a `lanes[]` roster's length, else
13
13
  * a homogeneous `count`, else 1. The single source of truth shared by the parser, the engine,
14
- * and the pre-flight plan so the lane count is computed ONE way everywhere.
14
+ * and the pre-flight plan so the participant count is computed the same way everywhere.
15
15
  */
16
- export declare function cuaLaneCount(config: LabConfig): number;
16
+ export declare function computerUseParticipantCount(config: LabConfig): number;
17
17
  /**
18
- * A participant's id: its declared roster id, else `lane-NN` (independent lanes) or `role-NN`
19
- * (shared-world seats) from its 0-based position. The parser's filled email recipients and the
20
- * routes that name participants both call this, so a filled recipient names a participant that
18
+ * A participant's id: its declared roster id, else `lane-NN` (independent participants) or `role-NN`
19
+ * (shared-world participants) from its 0-based position. The parser's filled email recipients and
20
+ * the routes that name participants both call this, so a filled recipient names a participant that
21
21
  * runs.
22
22
  */
23
23
  export declare function participantIdAt(index: number, declared: string | undefined, kind: "lane" | "seat"): string;
24
24
  /**
25
- * True when this config routes to the computer-use backend: an app-url subject whose first
26
- * actor resolves to a registered computer-use actor, or a clone subject on a hosted desktop
27
- * whose first actor does. Single source of truth — routeOf and the warning logic
28
- * both use it. (The app-url branch used to be unconditionally true; it narrowed when the
29
- * scripted-browser lane arrived. Behavior-preserving for every parse-valid config —
30
- * routeOf keeps a bare app-url fallback to the cua backend so library-API configs
31
- * with unknown actors still hit its fail-closed ACTOR_UNSUPPORTED.)
25
+ * True when this config routes to the computer-use backend: an app-url subject whose first actor
26
+ * resolves to a registered computer-use actor, or a clone subject on a hosted desktop whose first
27
+ * actor does. Single source of truth: routeOf and the warning logic both use it. (The app-url
28
+ * branch also checks the first actor, so a scripted-browser actor routes elsewhere. routeOf keeps a
29
+ * bare app-url fallback to the computer-use route so library-API configs with unknown actors still
30
+ * hit its fail-closed ACTOR_UNSUPPORTED.)
32
31
  */
33
32
  export declare function isComputerUseComposition(config: LabConfig): boolean;
34
33
  /**
35
- * True when this config routes to the SHARED-WORLD backend (#164): a clone or local-tree subject
36
- * on a hosted desktop whose first actor resolves to a computer-use actor AND that declares the
34
+ * True when this config routes to the shared-world route: a clone or local-tree subject
35
+ * on a hosted desktop whose first actor resolves to a computer-use actor and that declares the
37
36
  * `shared-world` topology. Mirror of isComputerUseComposition; the single source of truth shared by
38
- * routeOf (which checks it BEFORE the cua route) and the warning logic. Every
37
+ * routeOf (which checks it before the computer-use route) and the warning logic. Every
39
38
  * shared-world study runs its participants at once (`execution.concurrency` >= 2). The same
40
- * clone/local-tree × e2b-desktop × computer-use composition WITHOUT `topology: shared-world` stays per-lane-worlds
41
- * (the cua route) — the topology declaration is the override switch.
39
+ * clone/local-tree × e2b-desktop × computer-use composition without `topology: shared-world` stays per-lane-worlds
40
+ * (the computer-use route); the topology declaration is the override switch.
42
41
  */
43
42
  export declare function isSharedWorldComposition(config: LabConfig): boolean;
43
+ /** The getHost provisioned-subject shared-world shape (clone/local-tree served + exposed in-sandbox). */
44
+ export declare function isProvisionedSharedWorldComposition(config: LabConfig): boolean;
44
45
  /**
45
- * Resolve a shared-world seat's entry URL from `serve.url` + a role's `entry` (relative path or
46
- * same-origin absolute URL). Returns null when the combination is not a same-origin loopback URL
47
- * (the load-bearing public-safety boundary — a seat only ever drives the in-sandbox app).
46
+ * The external-public shared-world shape: a real public deployment used directly as
47
+ * the shared plane: `source: app-url` + `topology: shared-world` + a computer-use actor on
48
+ * e2b-desktop + `policies.allowPublicTargets: true`. No getHost, no clone, no subject sandbox, no
49
+ * seed. The operator-ownership attestation `subject.publicTarget` is required (validated in
50
+ * externalPublicSharedWorldValidationReason, not here; this predicate is the router only, so a
51
+ * half-declared external-public config still routes here to get its precise fail-closed reason
52
+ * rather than silently downgrading to the per-participant computer-use route).
48
53
  */
49
- export declare function resolveSeatUrl(serveUrl: string, entry: string | undefined): string | null;
54
+ export declare function isExternalPublicSharedWorldComposition(config: LabConfig): boolean;
55
+ /**
56
+ * Resolve a shared-world participant's entry URL from `serve.url` and its roster entry's `entry`
57
+ * (a relative path or a same-origin absolute URL). Returns null when the result is not a
58
+ * same-origin loopback URL, so a participant only ever drives the in-sandbox app.
59
+ */
60
+ export declare function resolveEntryUrl(serveUrl: string, entry: string | undefined): string | null;
50
61
  /**
51
62
  * True when this config routes to the scripted-browser backend: an app-url subject whose
52
63
  * first actor resolves to a registered scripted-browser actor (execution.target local or
53
- * absent — the parse layer enforces that pairing). Mirror of isComputerUseComposition; the single
64
+ * absent; the parse layer enforces that pairing). Mirror of isComputerUseComposition; the single
54
65
  * source of truth for routeOf and the warning logic.
55
66
  */
56
67
  export declare function isScriptedBrowserComposition(config: LabConfig): boolean;
57
68
  export declare function isProvisionedScriptedBrowserComposition(config: LabConfig): boolean;
58
69
  /**
59
70
  * True when this config routes to the terminal-product backend: a terminal-product subject whose
60
- * first actor resolves to a registered terminal actor (execution.target e2b-terminal or absent —
71
+ * first actor resolves to a registered terminal actor (execution.target e2b-terminal or absent;
61
72
  * the parse layer enforces that pairing). Mirror of isComputerUseComposition/isScriptedBrowserComposition;
62
73
  * the single source of truth for routeOf and the warning logic.
63
74
  */
64
75
  export declare function isTerminalProductComposition(config: LabConfig): boolean;
65
- /** @deprecated Use `routeOf`. This goes in the next minor. */
66
- export declare function routesToComputerUse(config: LabConfig): boolean;
67
- /** @deprecated Use `routeOf`. This goes in the next minor. */
68
- export declare function routesToSharedWorld(config: LabConfig): boolean;
69
- /** @deprecated Use `routeOf`. This goes in the next minor. */
70
- export declare function routesToProvisionedSharedWorld(config: LabConfig): boolean;
71
- /** @deprecated Use `routeOf`. This goes in the next minor. */
72
- export declare function routesToExternalPublicSharedWorld(config: LabConfig): boolean;
76
+ /** The five execution paths a lab can take. */
77
+ export type LabRoute = "preview" | "computer-use" | "shared-world" | "terminal" | "scripted";
73
78
  /**
74
- * @deprecated Every shared-world study runs its participants at once since the sequential
75
- * shared-world route was removed. Use `routeOf`; this alias goes in the next minor.
79
+ * The route a config takes. It never refuses: a config no route can run still gets the route
80
+ * whose own checks refuse it with the most precise reason.
76
81
  */
77
- export declare function routesToConcurrentSharedWorld(config: LabConfig): boolean;
78
- /** @deprecated Use `routeOf`. This goes in the next minor. */
79
- export declare function routesToScriptedBrowser(config: LabConfig): boolean;
80
- /** @deprecated Use `routeOf`. This goes in the next minor. */
81
- export declare function routesToTerminalProduct(config: LabConfig): boolean;
82
+ export declare function routeOf(config: LabConfig): LabRoute;