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,5 +1,6 @@
1
1
  // Builds each participant's actor spec and mission, resolves its entry URL, derives the session
2
2
  // and sandbox time budgets, and records a follower that never received the host's lobby code.
3
+ import { defaultSubjectPhaseSink } from "../../subject/steps.js";
3
4
  import { pricedModel } from "../../lab/plan-base.js";
4
5
  import { scrubPersonaBrief } from "../../lab/persona.js";
5
6
  import { resolveParticipant } from "../../run/participant.js";
@@ -11,13 +12,14 @@ import { participantAssignment } from "../../lab/participant-assignment.js";
11
12
  import { redactText } from "../../evidence/redaction.js";
12
13
  import { MAX_SANDBOX_MS, SANDBOX_TIMEOUT_BUFFER_MS, SUBJECT_PROVISION_BUDGET_MS, } from "../../substrates/e2b/lifetime.js";
13
14
  import { DEFAULT_STATE_STEP_TIMEOUT_MS } from "../../subject/state.js";
14
- // The DEFAULT per-seat session budget is DERIVED, not flat. On a provisioned route the binding
15
- // constraint is the SUBJECT sandbox (it must outlive every seat: timeoutMs + provisioning +
16
- // seeding + teardown buffer, and E2B refuses a sandbox over one hour), so the derivation hands
17
- // each seat the most that cap allows — capped at 15 minutes, floored at the historical 300s so a
18
- // seed-heavy lab never gets LESS room than it always had. App-url seats have no subject sandbox
19
- // and default to 30 minutes (seat sandbox: 30m + 10m buffer stays well under the hour). An
20
- // explicit execution.timeoutMs is never adjusted. The handoff latch scales off this (40%).
15
+ // The default per-participant session budget is derived from the route. On a provisioned route the
16
+ // binding constraint is the subject sandbox (it must outlive every participant: timeoutMs +
17
+ // provisioning + seeding + teardown buffer, and E2B refuses a sandbox over one hour), so the
18
+ // derivation hands each participant the most that cap allows, capped at 15 minutes, floored at the
19
+ // historical 300s so a seed-heavy study never gets less room than it always had. App-url
20
+ // participants have no subject sandbox and default to 30 minutes (participant sandbox: 30m + 10m
21
+ // buffer stays well under the hour). An explicit execution.timeoutMs is never adjusted. The handoff
22
+ // latch scales off this (40%).
21
23
  const MAX_DERIVED_SESSION_MS = 15 * 60_000;
22
24
  const MIN_DERIVED_SESSION_MS = 300_000;
23
25
  const DEFAULT_APP_URL_SESSION_MS = 30 * 60_000;
@@ -28,9 +30,10 @@ export function defaultSessionTimeoutMs(plan) {
28
30
  const room = MAX_SANDBOX_MS - SUBJECT_PROVISION_BUDGET_MS - stateBudgetMs - SANDBOX_TIMEOUT_BUFFER_MS;
29
31
  return Math.max(MIN_DERIVED_SESSION_MS, Math.min(MAX_DERIVED_SESSION_MS, room));
30
32
  }
33
+ // prose-check: model prompt (the participant model reads this, not a person)
31
34
  const DEFAULT_MISSION = "You are one of MANY users hitting a shared web application at the same time. The browser is already open at the app. Accomplish your role's task, then stop.";
32
- /** Resolve an actor's seat URL against the harness-minted getHost base (entry is a same-origin
33
- * relative path, validated at parse against serve.url). */
35
+ /** Resolve an actor's participant URL against the harness-minted getHost base (entry is a
36
+ * same-origin relative path, validated at parse against serve.url). */
34
37
  export function resolveActorEntryUrl(baseUrl, entry) {
35
38
  if (!entry)
36
39
  return baseUrl;
@@ -74,11 +77,12 @@ function buildActorSpec(participant, personas) {
74
77
  traceArtifactPath: `actors/${run.streamId}.json`,
75
78
  };
76
79
  }
77
- /** Thread the host-yielded lobby CODE into a follower's mission at runtime (external-public route).
78
- * The CODE flows into the follower's join instruction; it is persisted only as the composed prompt
79
- * the model reads (never a raw bundle field), and the lab scrubs the CODE from all narration. The
80
+ /** Thread the host-yielded lobby code into a follower's mission at runtime (external-public route).
81
+ * The code flows into the follower's join instruction; it is persisted only as the composed prompt
82
+ * the model reads (never a raw bundle field), and the lab scrubs the code from all narration. The
80
83
  * follower joins through the real UI (a direct /lobby/CODE visit does not auto-join a non-member). */
81
84
  export function withLobbyCodeMission(spec, code) {
85
+ // prose-check: model prompt (the participant model reads this, not a person)
82
86
  return {
83
87
  ...spec,
84
88
  instructions: `${spec.instructions}\n\nThe multiplayer lobby code is ${code}. On the home screen choose Join, enter this lobby code, enter your name, and submit to join the shared game (do not open a lobby URL directly — go through the Join flow).`,
@@ -89,7 +93,7 @@ export function withLobbyCodeMission(spec, code) {
89
93
  export function makeBlockedFollowerOutcome(spec, reason, timedOut) {
90
94
  return {
91
95
  spec,
92
- sessionError: `handoff barrier: ${reason}; this follower failed closed WITHOUT opening (no wasted turns).`,
96
+ sessionError: `handoff barrier: ${reason}; this follower stopped before opening the app, so no turns were spent.`,
93
97
  killed: false,
94
98
  streamUrlPresent: false,
95
99
  screenshots: [],
@@ -103,9 +107,10 @@ export function makeBlockedFollowerOutcome(spec, reason, timedOut) {
103
107
  };
104
108
  }
105
109
  /**
106
- * A live run publishes an in-progress bundle before its seats start, whether or not an Observer
107
- * is attached, and the seats' live traces rewrite it as they go, as on the computer-use route. A
108
- * run killed mid-way leaves that evidence on disk. The flush starts with the first snapshot.
110
+ * A live run publishes an in-progress bundle before its participants start, whether or not an
111
+ * Observer is attached, and the participants' live traces rewrite it as they go, as on the
112
+ * computer-use route. A run killed mid-way leaves that evidence on disk. The flush starts with the
113
+ * first snapshot.
109
114
  */
110
115
  export function startParticipantFlush(ctx, live, bundle) {
111
116
  live.flush = startLiveTraceFlush({
@@ -116,53 +121,41 @@ export function startParticipantFlush(ctx, live, bundle) {
116
121
  });
117
122
  }
118
123
  /**
119
- * The caller's desktop hooks, plus the runtime stream URLs each seat reports to the live Observer.
120
- * The Observer learns of a stream before the caller's stream hook runs.
124
+ * The runtime stream URLs each participant reports to the live Observer. The Observer learns of a
125
+ * stream before the caller's onStream runs.
121
126
  */
122
- function runtimeStreamHooks(hooks, live) {
123
- return {
124
- ...(hooks.loadDesktopModule ? { loadDesktopModule: hooks.loadDesktopModule } : {}),
125
- ...(hooks.detachedTimers ? { detachedTimers: hooks.detachedTimers } : {}),
126
- ...(hooks.env ? { env: hooks.env } : {}),
127
- ...(hooks.prepareDesktop
128
- ? {
129
- prepareDesktop: (desktop, participant) => hooks.prepareDesktop(desktop, participant),
130
- }
131
- : {}),
132
- onRuntimeStreamReady: (stream) => {
133
- live.streamUrls.push({ streamId: stream.streamId, url: stream.url });
134
- if (live.observer) {
135
- attachObserverRuntimeStreamUrls(live.observer, live.streamUrls);
136
- }
137
- return hooks.onRuntimeStreamReady?.(stream);
138
- },
139
- onRuntimeStreamEnded: (stream) => {
140
- // Mark, never remove (#357): the tile falls back to recorded evidence and says why.
141
- for (const entry of live.streamUrls) {
142
- if (entry.streamId === stream.streamId)
127
+ function participantStreams(onStream, live) {
128
+ return (event) => {
129
+ if (event.type === "ready")
130
+ live.streamUrls.push({ streamId: event.streamId, url: event.url });
131
+ // Mark, never remove: the tile falls back to recorded evidence and says why.
132
+ else
133
+ for (const entry of live.streamUrls)
134
+ if (entry.streamId === event.streamId)
143
135
  entry.ended = true;
144
- }
145
- if (live.observer) {
146
- attachObserverRuntimeStreamUrls(live.observer, live.streamUrls);
147
- }
148
- return hooks.onRuntimeStreamEnded?.(stream);
149
- },
136
+ if (live.observer)
137
+ attachObserverRuntimeStreamUrls(live.observer, live.streamUrls);
138
+ return onStream?.(event);
150
139
  };
151
140
  }
152
141
  /**
153
- * The runner deps both planes give every participant. cloneRoute=false + subjectEnvNames=[] keep subject
154
- * creds out of every actor sandbox (FIX-10). `scrubKnownValues` is the plane's scrub: the
155
- * external-public plane also scrubs the latched lobby code.
142
+ * The runner deps both planes give every participant. The `shared-app` subject keeps three things
143
+ * out of every actor sandbox: the subject env names' values, the GitHub token, and clone
144
+ * or local-tree provisioning. The committed subject.envValues still reach it, non-secret by parse.
145
+ * `scrubKnownValues` is the plane's scrub: the external-public plane also scrubs the latched lobby
146
+ * code.
156
147
  */
157
148
  export function participantRunDeps(ctx, live, scrubKnownValues) {
158
- const { config, descriptor, env, receiving, runBudget } = ctx;
149
+ const { config, env, receiving, runBudget } = ctx;
159
150
  return {
160
151
  onTrace: (participantId, items, usage, metadata) => live.flush?.flush(participantId, items, usage, metadata),
161
- config,
162
- descriptor,
163
- cloneRoute: false,
164
- subjectEnvNames: [],
165
- hasGithubToken: false,
152
+ residual: ctx.plan.residual,
153
+ labId: ctx.plan.labId,
154
+ caps: ctx.plan.caps,
155
+ subject: {
156
+ kind: "shared-app",
157
+ ...(config.subject.serve?.url === undefined ? {} : { serveUrl: config.subject.serve.url }),
158
+ },
166
159
  env,
167
160
  openaiApiKey: ctx.openaiApiKey,
168
161
  e2bApiKey: ctx.e2bApiKey,
@@ -175,27 +168,36 @@ export function participantRunDeps(ctx, live, scrubKnownValues) {
175
168
  redactScreenshots: ctx.redactScreenshots,
176
169
  scrubKnownValues,
177
170
  runSession: ctx.runSession,
178
- // A local-agent brain runs each seat on the operator's signed-in agent, as on computer use.
171
+ // A local-agent brain runs each participant on the operator's signed-in agent, as on computer
172
+ // use.
179
173
  brain: ctx.plan.brain,
180
174
  ...(receiving ? { receiving } : {}),
181
175
  now: ctx.now,
182
- hooks: runtimeStreamHooks(ctx.hooks, live),
176
+ // The participant's desktop seams, and the caller's prepareDesktop with the participant as its
177
+ // target.
178
+ ...(ctx.deps.desktopModule === undefined ? {} : { desktopModule: ctx.deps.desktopModule }),
179
+ ...(ctx.deps.detachedTimers === undefined ? {} : { detachedTimers: ctx.deps.detachedTimers }),
180
+ ...(ctx.input.prepareDesktop === undefined ? {} : { prepareDesktop: ctx.input.prepareDesktop }),
181
+ onStream: participantStreams(ctx.input.onStream, live),
182
+ // A participant visits the shared app and provisions no subject, so it reports no phase of its
183
+ // own.
184
+ reportSubjectPhase: defaultSubjectPhaseSink,
183
185
  ...(runBudget === undefined ? {} : { runBudget }),
184
- // Concurrent lanes are independent evidence seats: a requested-vs-verified screen
185
- // mismatch is recorded as separate facts + a warning instead of failing the lane's
186
- // device claim closed, so one seat's window-manager drift cannot abort the whole
187
- // live multi-actor world (the single-lane/fan-out routes keep fail-closed).
186
+ // Concurrent participants are independent evidence: a requested-vs-verified screen
187
+ // mismatch is recorded as separate facts + a warning instead of failing the participant's
188
+ // device claim closed, so one participant's window-manager drift cannot abort the whole
189
+ // live multi-actor world (the single-participant/fan-out routes keep fail-closed).
188
190
  screenMismatchPolicy: "record-evidence",
189
191
  };
190
192
  }
191
193
  /**
192
194
  * Each participant's actor spec, with committed personas compiled in so each prompt carries real
193
- * behavioral directives (#381). Evidence copies of the assignment, instructions and persona are
195
+ * behavioral directives. Evidence copies of the assignment, instructions and persona are
194
196
  * scrubbed of the run's known secret values.
195
197
  */
196
198
  export async function buildParticipantSpecs(participants, cwd, scrubKnownValues) {
197
- // Only the personas the participants use: an actors[0].persona that every seat overrides is
198
- // never applied, so it is not read.
199
+ // Only the personas the participants use: an actors[0].persona that every participant overrides
200
+ // is never applied, so it is not read.
199
201
  const personaResolution = await resolveCommittedPersonasForCwd(cwd, participants.map((participant) => participant.personaId));
200
202
  const actorSpecs = participants.map((participant) => buildActorSpec(participant, personaResolution.personas));
201
203
  for (const spec of actorSpecs) {
@@ -1,7 +1,6 @@
1
1
  import { type CuaActorDescriptor } from "../../actors/registry.js";
2
2
  import type { RoutePlanResult, RouteRefusal, SharedWorldPlan } from "../../lab/plan-types.js";
3
3
  import type { LabConfig, LabSubjectState } from "../../lab/types.js";
4
- import type { RunLabProvenance } from "../../run/status.js";
5
4
  import type { ConcurrentSharedWorldLabErrorCode } from "./types.js";
6
5
  /** The error a shared-world lab returns before a run starts. */
7
6
  export interface SharedWorldRefusal extends RouteRefusal<"shared-world", ConcurrentSharedWorldLabErrorCode> {
@@ -17,11 +16,8 @@ export declare function sharedWorldDescriptorOf(actorType: string): CuaActorDesc
17
16
  */
18
17
  export declare function planSharedWorldLab(config: LabConfig, input: {
19
18
  readonly dryRun: boolean;
20
- readonly lab?: RunLabProvenance;
21
- /** A caller's session runner cannot enforce maxOutputTokens. */
22
- readonly hooks?: {
23
- readonly runSession?: unknown;
24
- };
19
+ /** Whether deps.runSession is set: a caller's session runner cannot enforce maxOutputTokens. */
20
+ readonly hasRunSession?: boolean;
25
21
  }): SharedWorldPlanResult;
26
22
  /** The provisioned plane's declared subject state. The external-public plane declares none. */
27
23
  export declare function planeStateOf(plan: SharedWorldPlan): LabSubjectState | undefined;
@@ -10,7 +10,7 @@ import { sharedWorldParticipants } from "../../lab/plan-participants.js";
10
10
  import { PUBLIC_TARGET_OWNER_PATTERN } from "../../lab/parse/subject.js";
11
11
  import { REPO_SLUG_PATTERN } from "../../lab/parse/values.js";
12
12
  import { concurrentSharedWorldValidationReason, desktopMediaValidationReason, externalPublicSharedWorldValidationReason, outputTokenLimitValidationReason, receivingEmailValidationReason, scenarioCapsValidationReason, taskProtocolValidationReason, } from "../../lab/validation.js";
13
- import { MODEL_RATES } from "../../run/pricing.js";
13
+ import { MODEL_RATES, unpricedCapMessage } from "../../run/pricing.js";
14
14
  /** The registered descriptor for a planned actor; planSharedWorldLab checked the registry. */
15
15
  export function sharedWorldDescriptorOf(actorType) {
16
16
  const descriptor = actorRegistry[actorType];
@@ -27,20 +27,20 @@ export function planSharedWorldLab(config, input) {
27
27
  ok: false,
28
28
  refusal: { route: "shared-world", code, message, ...(actor === undefined ? {} : { actor }) },
29
29
  });
30
- const invalid = "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_INVALID";
30
+ const invalid = "HUMANISH_SHARED_WORLD_INVALID";
31
31
  const mediaReason = desktopMediaValidationReason(config, false);
32
32
  if (mediaReason)
33
33
  return refuse(invalid, mediaReason);
34
34
  const analysis = resolveAutomaticAnalysis(config.review?.analysis);
35
35
  if (!analysis.ok)
36
- return refuse("HUMANISH_LAB_ANALYSIS_INVALID", analysis.message);
36
+ return refuse("HUMANISH_STUDY_ANALYSIS_INVALID", analysis.message);
37
37
  const tasksReason = taskProtocolValidationReason(config, false);
38
38
  if (tasksReason)
39
- return refuse("HUMANISH_LAB_TASKS_UNSUPPORTED", tasksReason);
39
+ return refuse("HUMANISH_STUDY_TASKS_UNSUPPORTED", tasksReason);
40
40
  const actorType = config.actors[0]?.type ?? "";
41
41
  const descriptor = actorRegistry[actorType];
42
42
  if (!descriptor || !isCuaActorDescriptor(descriptor))
43
- return refuse("HUMANISH_CONCURRENT_SHARED_WORLD_LAB_ACTOR_UNSUPPORTED", `actors[0].type "${actorType}" is not a registered computer-use actor.`);
43
+ return refuse("HUMANISH_SHARED_WORLD_ACTOR_UNSUPPORTED", `actors[0].type "${actorType}" is not a registered computer-use actor.`);
44
44
  const actor = descriptor.id;
45
45
  // An app-url subject is the external-public plane (a real operator-owned deployment used
46
46
  // directly, with no getHost, clone, subject sandbox or seed); every other subject is the
@@ -55,13 +55,13 @@ export function planSharedWorldLab(config, input) {
55
55
  : concurrentSharedWorldValidationReason(config));
56
56
  if (invalidReason)
57
57
  return refuse(invalid, invalidReason, actor);
58
- if (config.actors[0]?.maxOutputTokens !== undefined && input.hooks?.runSession)
58
+ if (config.actors[0]?.maxOutputTokens !== undefined && input.hasRunSession === true)
59
59
  return refuse(invalid, "maxOutputTokens cannot be enforced by a custom runSession.", actor);
60
60
  const caps = config.execution?.caps;
61
61
  if (!input.dryRun && (caps?.maxUsd !== undefined || caps?.maxTotalUsd !== undefined)) {
62
62
  const model = (config.actors[0]?.model ?? DEFAULT_OPENAI_CU_MODEL).trim().toLowerCase();
63
63
  if (!MODEL_RATES[model])
64
- return refuse("HUMANISH_CONCURRENT_SHARED_WORLD_LAB_UNPRICED_CAP", `The declared spend cap cannot be enforced for unpriced model "${model}".`, actor);
64
+ return refuse("HUMANISH_SHARED_WORLD_UNPRICED_CAP", unpricedCapMessage(model), actor);
65
65
  }
66
66
  const receivingReason = receivingEmailValidationReason(config);
67
67
  if (receivingReason)
@@ -88,7 +88,6 @@ export function planSharedWorldLab(config, input) {
88
88
  throw new Error("a shared-world participant has no caller brain");
89
89
  const base = planBase(config, {
90
90
  dryRun: input.dryRun,
91
- ...(input.lab === undefined ? {} : { lab: input.lab }),
92
91
  analysis,
93
92
  });
94
93
  return {
@@ -114,7 +113,7 @@ export function planSharedWorldLab(config, input) {
114
113
  externalCatch: plane.kind === "external-public",
115
114
  }),
116
115
  // The external-public plane reads the host's lobby code with the OpenAI API, whatever
117
- // brain drives the seats.
116
+ // brain drives the participants.
118
117
  ...(plane.kind === "external-public" && brain.kind !== "openai"
119
118
  ? [{ kind: "key", name: "OPENAI_API_KEY" }]
120
119
  : []),
@@ -2,18 +2,18 @@ import type { RunSubjectProvenance } from "../../run/bundle.js";
2
2
  import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
3
3
  /** Extract the in-sandbox port from the (loopback) serve.url so getHost can expose it. */
4
4
  export declare function servePort(serveUrl: string): number;
5
- /** A getHost URL must be TOKENLESS (no userinfo, no query — no authKey; invariant 1). */
5
+ /** A getHost URL must be tokenless (no userinfo and no query, so no authKey reaches evidence). */
6
6
  export declare function isTokenlessHost(value: string): boolean;
7
- /** sha256-16 of a URL's ORIGIN — the publish-safe host identity persisted in the bundle (the raw
7
+ /** sha256-16 of a URL's origin: the publish-safe host identity persisted in the bundle (the raw
8
8
  * getHost URL embeds the live sandbox id + matches the e2b-URL redaction, so it never lands raw). */
9
9
  export declare function hostOriginDigest(url: string): string;
10
10
  /** A public-safe, human-readable route label for the bundle (host redacted to a placeholder; the
11
11
  * entry path kept). Never contains the raw getHost URL. */
12
12
  export declare function publicSafeRouteLabel(entry: string | undefined): string;
13
13
  /**
14
- * Build the ONE subject sandbox's provenance (invariant 5): clone (repo + optional commit) or
14
+ * Build the one subject sandbox's provenance: clone (repo + optional commit) or
15
15
  * local-tree (archiveSha256 + optional commit/dirty from the once-per-run host-packed archive -
16
- * archiveSha256 IS the pin; there is only ONE archive, so no per-lane unanimity math applies,
16
+ * archiveSha256 is the pin; there is only one archive, so no per-participant unanimity math applies,
17
17
  * unlike the cua fan-out route). Used for both the in-progress and final bundle: the archive
18
18
  * never changes mid-run (packed before any sandbox exists).
19
19
  */
@@ -8,7 +8,7 @@ export function servePort(serveUrl) {
8
8
  return Number(url.port);
9
9
  return url.protocol === "https:" ? 443 : 80;
10
10
  }
11
- /** A getHost URL must be TOKENLESS (no userinfo, no query — no authKey; invariant 1). */
11
+ /** A getHost URL must be tokenless (no userinfo and no query, so no authKey reaches evidence). */
12
12
  export function isTokenlessHost(value) {
13
13
  try {
14
14
  const url = new URL(value);
@@ -18,7 +18,7 @@ export function isTokenlessHost(value) {
18
18
  return false;
19
19
  }
20
20
  }
21
- /** sha256-16 of a URL's ORIGIN — the publish-safe host identity persisted in the bundle (the raw
21
+ /** sha256-16 of a URL's origin: the publish-safe host identity persisted in the bundle (the raw
22
22
  * getHost URL embeds the live sandbox id + matches the e2b-URL redaction, so it never lands raw). */
23
23
  export function hostOriginDigest(url) {
24
24
  try {
@@ -34,9 +34,9 @@ export function publicSafeRouteLabel(entry) {
34
34
  return `[provisioned-subject]${entry ?? "/"}`;
35
35
  }
36
36
  /**
37
- * Build the ONE subject sandbox's provenance (invariant 5): clone (repo + optional commit) or
37
+ * Build the one subject sandbox's provenance: clone (repo + optional commit) or
38
38
  * local-tree (archiveSha256 + optional commit/dirty from the once-per-run host-packed archive -
39
- * archiveSha256 IS the pin; there is only ONE archive, so no per-lane unanimity math applies,
39
+ * archiveSha256 is the pin; there is only one archive, so no per-participant unanimity math applies,
40
40
  * unlike the cua fan-out route). Used for both the in-progress and final bundle: the archive
41
41
  * never changes mid-run (packed before any sandbox exists).
42
42
  */
@@ -3,7 +3,7 @@ import type { RunSubjectStateStepRecord } from "../../run/bundle.js";
3
3
  import type { SharedWorldStateSnapshot } from "../../run/shared-world-evidence.js";
4
4
  import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
5
5
  import type { DetachedTimers } from "../../substrates/detached.js";
6
- import type { SharedWorldLabHooks } from "./types.js";
6
+ import type { LabDeps } from "../../lab/lab-deps.js";
7
7
  import { type ActorRunResult, type SubjectDesktopUsage, type LiveParticipants, type PlaneContext } from "./types.js";
8
8
  /** What the provisioned plane needs besides the shared plane context. */
9
9
  export interface ProvisionedPlaneSetup {
@@ -35,6 +35,7 @@ export interface ProvisionedPlaneOutcome {
35
35
  subjectCommit: string | undefined;
36
36
  subjectSandboxId: string | undefined;
37
37
  subjectKilled: boolean;
38
+ subjectReleaseWarning: string | undefined;
38
39
  subjectDesktop: SubjectDesktopUsage | undefined;
39
40
  getHostUrl: string | undefined;
40
41
  /** Set when the teardown drain wrote a comms thread. */
@@ -47,7 +48,7 @@ export declare function runProvisionedPlane(ctx: PlaneContext, live: LivePartici
47
48
  */
48
49
  export declare function packSubjectTree(cwd: string, config: {
49
50
  readonly subject: Pick<LabConfig["subject"], "localTree">;
50
- }, hooks: SharedWorldLabHooks, scrubKnownValues: (text: string) => string): Promise<{
51
+ }, deps: LabDeps, scrubKnownValues: (text: string) => string): Promise<{
51
52
  ok: true;
52
53
  archive: LocalTreeArchive;
53
54
  buffer: ArrayBuffer;