humanish 0.106.1 → 0.107.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 (453) hide show
  1. package/AGENTS.md +4 -4
  2. package/ARCHITECTURE.md +17 -16
  3. package/CHANGELOG.md +14 -0
  4. package/CONTEXT.md +42 -39
  5. package/CONTRIBUTING.md +8 -8
  6. package/README.md +8 -3
  7. package/dist/actors/codex/app-server-client.js +2 -1
  8. package/dist/actors/codex/app-server-trace.d.ts +0 -1
  9. package/dist/actors/codex/app-server-trace.js +1 -3
  10. package/dist/actors/codex/app-server.js +2 -1
  11. package/dist/actors/codex/protocol-compat.d.ts +27 -0
  12. package/dist/actors/codex/protocol-compat.js +357 -0
  13. package/dist/actors/codex/protocol-contract.d.ts +61 -0
  14. package/dist/actors/codex/protocol-contract.js +471 -0
  15. package/dist/actors/codex/qualified-versions.d.ts +30 -3
  16. package/dist/actors/codex/qualified-versions.js +50 -5
  17. package/dist/actors/codex/restricted-executable.d.ts +24 -0
  18. package/dist/actors/codex/restricted-executable.js +97 -22
  19. package/dist/actors/codex/restricted-launch.d.ts +7 -1
  20. package/dist/actors/codex/restricted-launch.js +42 -3
  21. package/dist/actors/codex/restricted-notifications.d.ts +101 -0
  22. package/dist/actors/codex/restricted-notifications.js +277 -0
  23. package/dist/actors/codex/restricted-participant.d.ts +30 -0
  24. package/dist/actors/codex/restricted-participant.js +60 -2
  25. package/dist/actors/codex/restricted-policy.d.ts +9 -1
  26. package/dist/actors/codex/restricted-session.d.ts +14 -1
  27. package/dist/actors/codex/restricted-session.js +50 -17
  28. package/dist/actors/codex/restricted-transport.d.ts +29 -0
  29. package/dist/actors/codex/restricted-transport.js +139 -27
  30. package/dist/actors/codex/restricted-turn.d.ts +19 -4
  31. package/dist/actors/codex/restricted-turn.js +43 -30
  32. package/dist/actors/computer-use/actor.d.ts +1 -1
  33. package/dist/actors/computer-use/actor.js +4 -4
  34. package/dist/actors/computer-use/loop/backstop.js +1 -1
  35. package/dist/actors/computer-use/loop/ending.d.ts +2 -2
  36. package/dist/actors/computer-use/loop/ending.js +2 -2
  37. package/dist/actors/computer-use/loop/spend.d.ts +1 -1
  38. package/dist/actors/computer-use/loop/spend.js +3 -3
  39. package/dist/actors/computer-use/loop/trace.js +2 -2
  40. package/dist/actors/computer-use/loop/types.d.ts +14 -5
  41. package/dist/actors/computer-use/loop.js +4 -4
  42. package/dist/actors/computer-use/openai-provider.d.ts +1 -1
  43. package/dist/actors/computer-use/openai-provider.js +2 -2
  44. package/dist/actors/contract.d.ts +9 -7
  45. package/dist/actors/local-agent/cli.js +1 -1
  46. package/dist/actors/scripted-browser/actor.d.ts +2 -2
  47. package/dist/actors/scripted-browser/journey.js +15 -4
  48. package/dist/actors/scripted-browser/steps.js +18 -0
  49. package/dist/actors/scripted-browser/types.d.ts +11 -1
  50. package/dist/actors/stop-conditions.js +1 -3
  51. package/dist/analysis/automatic-completion.d.ts +13 -8
  52. package/dist/analysis/automatic-completion.js +14 -8
  53. package/dist/analysis/automatic-config.d.ts +1 -1
  54. package/dist/analysis/automatic-config.js +2 -2
  55. package/dist/analysis/automatic.d.ts +10 -4
  56. package/dist/analysis/automatic.js +17 -13
  57. package/dist/analysis/diagnostics.d.ts +23 -0
  58. package/dist/analysis/diagnostics.js +112 -0
  59. package/dist/analysis/evidence-sources.js +2 -2
  60. package/dist/analysis/evidence.js +6 -6
  61. package/dist/analysis/execute.d.ts +7 -1
  62. package/dist/analysis/execute.js +39 -12
  63. package/dist/analysis/job.d.ts +8 -5
  64. package/dist/analysis/job.js +15 -14
  65. package/dist/analysis/load.d.ts +1 -1
  66. package/dist/analysis/load.js +5 -5
  67. package/dist/analysis/provider.d.ts +9 -1
  68. package/dist/analysis/restricted-codex.d.ts +2 -0
  69. package/dist/analysis/restricted-codex.js +10 -1
  70. package/dist/analysis/service.d.ts +2 -0
  71. package/dist/analysis/service.js +31 -12
  72. package/dist/analysis/sharing.d.ts +2 -2
  73. package/dist/analysis/sharing.js +5 -5
  74. package/dist/analysis/store-executions.d.ts +5 -5
  75. package/dist/analysis/store-executions.js +12 -12
  76. package/dist/analysis/store.d.ts +4 -4
  77. package/dist/analysis/store.js +13 -13
  78. package/dist/cli/commands/analysis-signals.d.ts +2 -1
  79. package/dist/cli/commands/analysis-signals.js +4 -1
  80. package/dist/cli/commands/analyze.js +4 -2
  81. package/dist/cli/commands/comms.js +8 -1
  82. package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
  83. package/dist/cli/commands/lab-route-computer-use.js +26 -14
  84. package/dist/cli/commands/lab-route-preview.d.ts +1 -3
  85. package/dist/cli/commands/lab-route-preview.js +3 -4
  86. package/dist/cli/commands/lab-route-run.d.ts +6 -4
  87. package/dist/cli/commands/lab-route-run.js +6 -2
  88. package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
  89. package/dist/cli/commands/lab-route-scripted.js +0 -1
  90. package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
  91. package/dist/cli/commands/lab-route-shared-world.js +0 -1
  92. package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
  93. package/dist/cli/commands/lab-route-terminal.js +0 -1
  94. package/dist/cli/commands/lab-run.js +76 -45
  95. package/dist/cli/commands/lab-scorer.d.ts +0 -2
  96. package/dist/cli/commands/lab.js +12 -6
  97. package/dist/cli/commands/observe.js +22 -0
  98. package/dist/cli/commands/run-signals.d.ts +30 -0
  99. package/dist/cli/commands/run-signals.js +146 -0
  100. package/dist/cli/commands/runs.js +10 -8
  101. package/dist/cli/commands/watch.js +12 -10
  102. package/dist/cli/doctor.d.ts +3 -0
  103. package/dist/cli/doctor.js +10 -2
  104. package/dist/cli/io.d.ts +5 -4
  105. package/dist/cli/io.js +12 -8
  106. package/dist/cli/program.js +3 -3
  107. package/dist/cli/renamed-options.d.ts +11 -0
  108. package/dist/cli/renamed-options.js +18 -0
  109. package/dist/cli/telemetry.d.ts +2 -2
  110. package/dist/cli/telemetry.js +1 -1
  111. package/dist/comms/capture-surface.d.ts +1 -1
  112. package/dist/comms/catch-host.d.ts +1 -1
  113. package/dist/comms/connections.js +4 -4
  114. package/dist/comms/external-evidence.d.ts +27 -0
  115. package/dist/comms/external-evidence.js +93 -0
  116. package/dist/comms/lease-store.js +7 -7
  117. package/dist/comms/types.js +1 -1
  118. package/dist/evidence/browser-hygiene.d.ts +1 -1
  119. package/dist/evidence/browser-hygiene.js +1 -1
  120. package/dist/evidence/redaction.js +1 -1
  121. package/dist/evidence/secret-scrub.d.ts +9 -0
  122. package/dist/evidence/secret-scrub.js +96 -0
  123. package/dist/feedback/draft.js +7 -9
  124. package/dist/feedback/export-bundle.js +4 -4
  125. package/dist/feedback/export.js +9 -9
  126. package/dist/feedback/feedback.d.ts +1 -1
  127. package/dist/index.d.ts +3 -6
  128. package/dist/index.js +3 -6
  129. package/dist/keys/key-resolution.d.ts +3 -1
  130. package/dist/keys/key-resolution.js +18 -16
  131. package/dist/lab/adapter-extension.d.ts +28 -6
  132. package/dist/lab/adapter-extension.js +65 -126
  133. package/dist/lab/adapter-scorer-loader.d.ts +25 -5
  134. package/dist/lab/adapter-scorer-loader.js +24 -0
  135. package/dist/lab/composition-rules.js +20 -20
  136. package/dist/lab/config.js +28 -26
  137. package/dist/lab/device-presets.d.ts +2 -2
  138. package/dist/lab/discover.js +1 -3
  139. package/dist/lab/doctor.d.ts +44 -9
  140. package/dist/lab/doctor.js +149 -41
  141. package/dist/lab/init-plan.js +1 -3
  142. package/dist/lab/keys.js +1 -1
  143. package/dist/lab/lab-deps.d.ts +85 -0
  144. package/dist/lab/lab-deps.js +4 -0
  145. package/dist/lab/parse/actors.js +8 -7
  146. package/dist/lab/parse/comms.js +3 -2
  147. package/dist/lab/parse/execution.js +3 -2
  148. package/dist/lab/parse/subject-state.js +2 -1
  149. package/dist/lab/parse/subject.js +2 -1
  150. package/dist/lab/parse/values.d.ts +0 -1
  151. package/dist/lab/parse/values.js +0 -3
  152. package/dist/lab/persona-resolve.d.ts +3 -3
  153. package/dist/lab/persona-resolve.js +4 -4
  154. package/dist/lab/persona.js +1 -3
  155. package/dist/lab/plan-base.d.ts +0 -2
  156. package/dist/lab/plan-base.js +6 -4
  157. package/dist/lab/plan-participants.d.ts +5 -5
  158. package/dist/lab/plan-participants.js +2 -2
  159. package/dist/lab/plan-types.d.ts +22 -4
  160. package/dist/lab/plan.d.ts +3 -11
  161. package/dist/lab/plan.js +18 -42
  162. package/dist/lab/preflight-result.js +0 -2
  163. package/dist/lab/preflight.d.ts +0 -3
  164. package/dist/lab/preflight.js +1 -1
  165. package/dist/lab/requirements.d.ts +20 -0
  166. package/dist/lab/requirements.js +54 -0
  167. package/dist/lab/route-inputs.d.ts +23 -12
  168. package/dist/lab/route-inputs.js +48 -51
  169. package/dist/lab/routing.d.ts +19 -24
  170. package/dist/lab/routing.js +14 -47
  171. package/dist/lab/run-lab-events.d.ts +6 -11
  172. package/dist/lab/run-lab-events.js +3 -11
  173. package/dist/lab/run-lab-homes.d.ts +64 -0
  174. package/dist/lab/run-lab-homes.js +3 -0
  175. package/dist/lab/run-lab-options.d.ts +12 -66
  176. package/dist/lab/run-lab-options.js +45 -275
  177. package/dist/lab/summary.d.ts +9 -4
  178. package/dist/lab/summary.js +15 -8
  179. package/dist/lab/types.d.ts +132 -132
  180. package/dist/lab/validation.d.ts +15 -15
  181. package/dist/lab/validation.js +28 -28
  182. package/dist/lab/warnings.js +20 -19
  183. package/dist/observer/artifact.d.ts +1 -1
  184. package/dist/observer/artifact.js +3 -3
  185. package/dist/observer/data.js +2 -2
  186. package/dist/observer/render.js +2 -2
  187. package/dist/observer/run-routes.d.ts +1 -1
  188. package/dist/observer/run-routes.js +5 -5
  189. package/dist/observer/serve.d.ts +17 -0
  190. package/dist/observer/serve.js +34 -3
  191. package/dist/routes/computer-use/bundle-parts.d.ts +1 -1
  192. package/dist/routes/computer-use/bundle-parts.js +10 -3
  193. package/dist/routes/computer-use/bundle.d.ts +4 -11
  194. package/dist/routes/computer-use/bundle.js +9 -15
  195. package/dist/routes/computer-use/diagnostics.d.ts +1 -1
  196. package/dist/routes/computer-use/diagnostics.js +1 -1
  197. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +10 -10
  198. package/dist/routes/computer-use/e2b-desktop/comms.js +11 -14
  199. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
  200. package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -7
  201. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +13 -13
  202. package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -11
  203. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
  204. package/dist/routes/computer-use/e2b-desktop/prepare.js +33 -36
  205. package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
  206. package/dist/routes/computer-use/e2b-desktop/start.js +24 -23
  207. package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
  208. package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
  209. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
  210. package/dist/routes/computer-use/e2b-desktop/teardown.js +29 -17
  211. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  212. package/dist/routes/computer-use/external-comms.js +19 -43
  213. package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
  214. package/dist/routes/computer-use/fanout-bundle.js +25 -29
  215. package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +25 -19
  216. package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
  217. package/dist/routes/computer-use/in-process-desktop.js +3 -9
  218. package/dist/routes/computer-use/live-flush.d.ts +7 -5
  219. package/dist/routes/computer-use/live-flush.js +19 -27
  220. package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +12 -11
  221. package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
  222. package/dist/routes/computer-use/local-tree-pack.js +4 -5
  223. package/dist/routes/computer-use/local-vm.d.ts +11 -8
  224. package/dist/routes/computer-use/local-vm.js +39 -66
  225. package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
  226. package/dist/routes/computer-use/participant-desktop.js +5 -25
  227. package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +10 -10
  228. package/dist/routes/computer-use/{lanes.js → participant-execution.js} +35 -22
  229. package/dist/routes/computer-use/participant-facts.d.ts +7 -1
  230. package/dist/routes/computer-use/participant-facts.js +12 -1
  231. package/dist/routes/computer-use/participant-model.d.ts +19 -11
  232. package/dist/routes/computer-use/participant-model.js +49 -25
  233. package/dist/routes/computer-use/participant-prompt.d.ts +3 -3
  234. package/dist/routes/computer-use/participant-prompt.js +4 -4
  235. package/dist/routes/computer-use/participant-runs.d.ts +6 -6
  236. package/dist/routes/computer-use/participant-runs.js +8 -8
  237. package/dist/routes/computer-use/plan.d.ts +21 -29
  238. package/dist/routes/computer-use/plan.js +52 -60
  239. package/dist/routes/computer-use/preflight.d.ts +3 -5
  240. package/dist/routes/computer-use/preflight.js +20 -16
  241. package/dist/routes/computer-use/rerun-selection.js +10 -6
  242. package/dist/routes/computer-use/result.d.ts +1 -1
  243. package/dist/routes/computer-use/result.js +40 -30
  244. package/dist/routes/computer-use/route.d.ts +3 -4
  245. package/dist/routes/computer-use/route.js +21 -19
  246. package/dist/routes/computer-use/self-report.d.ts +2 -2
  247. package/dist/routes/computer-use/self-report.js +4 -4
  248. package/dist/routes/computer-use/setup.d.ts +8 -14
  249. package/dist/routes/computer-use/setup.js +96 -72
  250. package/dist/routes/computer-use/single-bundle.d.ts +8 -11
  251. package/dist/routes/computer-use/single-bundle.js +20 -25
  252. package/dist/routes/computer-use/subject-projection.d.ts +5 -7
  253. package/dist/routes/computer-use/subject-projection.js +20 -19
  254. package/dist/routes/computer-use/types.d.ts +169 -210
  255. package/dist/routes/computer-use/types.js +13 -5
  256. package/dist/routes/preview.js +0 -1
  257. package/dist/routes/scripted/bundle.d.ts +3 -6
  258. package/dist/routes/scripted/bundle.js +11 -16
  259. package/dist/routes/scripted/plan.d.ts +5 -7
  260. package/dist/routes/scripted/plan.js +6 -4
  261. package/dist/routes/scripted/result.d.ts +4 -1
  262. package/dist/routes/scripted/result.js +10 -6
  263. package/dist/routes/scripted/route.js +10 -11
  264. package/dist/routes/scripted/scenario.d.ts +1 -1
  265. package/dist/routes/scripted/scenario.js +1 -1
  266. package/dist/routes/scripted/setup.d.ts +3 -2
  267. package/dist/routes/scripted/setup.js +22 -21
  268. package/dist/routes/scripted/subject.d.ts +8 -3
  269. package/dist/routes/scripted/subject.js +9 -5
  270. package/dist/routes/scripted/surface-records.js +1 -1
  271. package/dist/routes/scripted/surface-sessions.d.ts +2 -2
  272. package/dist/routes/scripted/surface-sessions.js +4 -4
  273. package/dist/routes/scripted/types.d.ts +19 -36
  274. package/dist/routes/scripted/types.js +1 -2
  275. package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +8 -8
  276. package/dist/routes/shared-world/bundle.d.ts +2 -2
  277. package/dist/routes/shared-world/bundle.js +22 -26
  278. package/dist/routes/shared-world/checkpoints.d.ts +4 -4
  279. package/dist/routes/shared-world/checkpoints.js +4 -4
  280. package/dist/routes/shared-world/comms.d.ts +5 -4
  281. package/dist/routes/shared-world/comms.js +28 -41
  282. package/dist/routes/shared-world/external-public.d.ts +5 -5
  283. package/dist/routes/shared-world/external-public.js +19 -20
  284. package/dist/routes/shared-world/handoff.d.ts +4 -4
  285. package/dist/routes/shared-world/handoff.js +50 -50
  286. package/dist/routes/shared-world/lobby-code.d.ts +5 -5
  287. package/dist/routes/shared-world/lobby-code.js +13 -13
  288. package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +8 -6
  289. package/dist/routes/shared-world/{seats.js → participant-specs.js} +43 -48
  290. package/dist/routes/shared-world/plan.d.ts +2 -6
  291. package/dist/routes/shared-world/plan.js +1 -2
  292. package/dist/routes/shared-world/provenance.d.ts +4 -4
  293. package/dist/routes/shared-world/provenance.js +4 -4
  294. package/dist/routes/shared-world/provisioned.d.ts +3 -2
  295. package/dist/routes/shared-world/provisioned.js +46 -40
  296. package/dist/routes/shared-world/result.js +31 -19
  297. package/dist/routes/shared-world/route.js +37 -41
  298. package/dist/routes/shared-world/setup.d.ts +5 -4
  299. package/dist/routes/shared-world/setup.js +12 -14
  300. package/dist/routes/shared-world/types.d.ts +53 -126
  301. package/dist/routes/shared-world/types.js +2 -2
  302. package/dist/routes/terminal/adapter.d.ts +8 -8
  303. package/dist/routes/terminal/adapter.js +28 -125
  304. package/dist/routes/terminal/bundle.d.ts +7 -12
  305. package/dist/routes/terminal/bundle.js +24 -34
  306. package/dist/routes/terminal/credentials.d.ts +2 -2
  307. package/dist/routes/terminal/credentials.js +16 -16
  308. package/dist/routes/terminal/dry-run.d.ts +1 -1
  309. package/dist/routes/terminal/dry-run.js +9 -11
  310. package/dist/routes/terminal/encoding.d.ts +1 -1
  311. package/dist/routes/terminal/encoding.js +2 -2
  312. package/dist/routes/terminal/ledger.d.ts +6 -6
  313. package/dist/routes/terminal/ledger.js +9 -9
  314. package/dist/routes/terminal/live-finish.d.ts +1 -2
  315. package/dist/routes/terminal/live-finish.js +21 -20
  316. package/dist/routes/terminal/live-sandbox.d.ts +3 -2
  317. package/dist/routes/terminal/live-sandbox.js +20 -20
  318. package/dist/routes/terminal/participant-text.d.ts +23 -0
  319. package/dist/routes/terminal/participant-text.js +165 -0
  320. package/dist/routes/terminal/plan.d.ts +2 -6
  321. package/dist/routes/terminal/plan.js +13 -9
  322. package/dist/routes/terminal/recorder.d.ts +6 -1
  323. package/dist/routes/terminal/recorder.js +12 -4
  324. package/dist/routes/terminal/result.js +4 -4
  325. package/dist/routes/terminal/route.js +26 -26
  326. package/dist/routes/terminal/runtime.d.ts +3 -2
  327. package/dist/routes/terminal/runtime.js +3 -3
  328. package/dist/routes/terminal/sandbox.d.ts +3 -3
  329. package/dist/routes/terminal/sandbox.js +9 -9
  330. package/dist/routes/terminal/session.js +16 -14
  331. package/dist/routes/terminal/token-usage.js +5 -5
  332. package/dist/routes/terminal/trace.d.ts +5 -8
  333. package/dist/routes/terminal/trace.js +9 -64
  334. package/dist/routes/terminal/types.d.ts +85 -93
  335. package/dist/routes/terminal/types.js +9 -4
  336. package/dist/run/active-runs.d.ts +13 -0
  337. package/dist/run/active-runs.js +12 -0
  338. package/dist/run/bundle-shape.d.ts +2 -1
  339. package/dist/run/bundle-shape.js +4 -4
  340. package/dist/run/bundle.d.ts +63 -56
  341. package/dist/run/bundle.js +9 -8
  342. package/dist/run/cost-summary.js +3 -2
  343. package/dist/run/costs.d.ts +6 -6
  344. package/dist/run/costs.js +10 -10
  345. package/dist/run/detail.d.ts +5 -5
  346. package/dist/run/detail.js +6 -6
  347. package/dist/run/dry-run.js +5 -12
  348. package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
  349. package/dist/run/{study-files.js → evidence-files.js} +5 -5
  350. package/dist/run/feedback-shape.js +1 -1
  351. package/dist/run/judge.d.ts +16 -4
  352. package/dist/run/judge.js +24 -7
  353. package/dist/run/locate.d.ts +2 -0
  354. package/dist/run/locate.js +3 -1
  355. package/dist/run/outcomes.d.ts +3 -3
  356. package/dist/run/outcomes.js +3 -3
  357. package/dist/run/participant-records.d.ts +2 -2
  358. package/dist/run/participant-records.js +2 -2
  359. package/dist/run/paths.js +1 -1
  360. package/dist/run/pricing.d.ts +19 -9
  361. package/dist/run/pricing.js +30 -18
  362. package/dist/run/projection.d.ts +13 -13
  363. package/dist/run/projection.js +8 -8
  364. package/dist/run/reclaim.d.ts +6 -0
  365. package/dist/run/reclaim.js +13 -3
  366. package/dist/run/results.d.ts +1 -1
  367. package/dist/run/run-index.d.ts +1 -1
  368. package/dist/run/run-index.js +11 -11
  369. package/dist/run/run.d.ts +4 -2
  370. package/dist/run/run.js +9 -5
  371. package/dist/run/sandbox-receipts.d.ts +4 -4
  372. package/dist/run/sandbox-receipts.js +4 -4
  373. package/dist/run/shared-world-evidence.d.ts +47 -47
  374. package/dist/run/shared-world-shape.d.ts +3 -3
  375. package/dist/run/shared-world-shape.js +11 -11
  376. package/dist/run/stats.d.ts +5 -5
  377. package/dist/run/stats.js +8 -8
  378. package/dist/run/status.d.ts +16 -6
  379. package/dist/run/status.js +31 -8
  380. package/dist/run/streams.d.ts +26 -19
  381. package/dist/run/terminal-contract.d.ts +5 -5
  382. package/dist/run/terminal-contract.js +4 -4
  383. package/dist/run/transient-comms-secrets.d.ts +5 -0
  384. package/dist/run/transient-comms-secrets.js +12 -0
  385. package/dist/run-lab.d.ts +36 -34
  386. package/dist/run-lab.js +41 -37
  387. package/dist/subject/desktop-cli.d.ts +1 -1
  388. package/dist/subject/desktop-cli.js +1 -1
  389. package/dist/subject/local-tree-archive.d.ts +1 -1
  390. package/dist/subject/local-tree-archive.js +4 -4
  391. package/dist/subject/local-tree.d.ts +2 -2
  392. package/dist/subject/local-tree.js +1 -1
  393. package/dist/subject/node-bootstrap.d.ts +1 -1
  394. package/dist/subject/node-bootstrap.js +4 -4
  395. package/dist/subject/runtime.js +5 -5
  396. package/dist/subject/serve.js +1 -1
  397. package/dist/subject/steps.d.ts +4 -4
  398. package/dist/subject/steps.js +5 -5
  399. package/dist/substrates/e2b/cdp-probe.d.ts +2 -2
  400. package/dist/substrates/e2b/cdp-probe.js +1 -1
  401. package/dist/substrates/e2b/desktop-browser.d.ts +3 -3
  402. package/dist/substrates/e2b/desktop-browser.js +4 -4
  403. package/dist/substrates/e2b/desktop-cdp.d.ts +7 -7
  404. package/dist/substrates/e2b/desktop-cdp.js +4 -4
  405. package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
  406. package/dist/substrates/e2b/desktop-geometry.js +3 -3
  407. package/dist/substrates/e2b/desktop-media.js +2 -2
  408. package/dist/substrates/e2b/sandbox.js +1 -1
  409. package/dist/substrates/e2b/sdk.js +2 -2
  410. package/dist/substrates/local/runtime-host.d.ts +2 -0
  411. package/dist/substrates/local/runtime-host.js +6 -0
  412. package/dist/tui/actions.d.ts +7 -5
  413. package/dist/tui/actions.js +18 -9
  414. package/dist/tui-app.js +42 -42
  415. package/dist/verify/actor.d.ts +10 -10
  416. package/dist/verify/actor.js +15 -15
  417. package/dist/verify/artifacts.d.ts +1 -1
  418. package/dist/verify/artifacts.js +3 -3
  419. package/dist/verify/costs.d.ts +2 -2
  420. package/dist/verify/costs.js +2 -2
  421. package/dist/verify/liveness.d.ts +1 -1
  422. package/dist/verify/liveness.js +4 -1
  423. package/dist/verify/rerun.d.ts +1 -1
  424. package/dist/verify/rerun.js +1 -1
  425. package/dist/verify/shared-world.js +2 -2
  426. package/dist/verify/verify.js +6 -6
  427. package/docs/README.md +1 -1
  428. package/docs/architecture/actor-contract.md +60 -22
  429. package/docs/architecture/desktop-sessions.md +9 -9
  430. package/docs/architecture/external-public-shared-world.md +5 -0
  431. package/docs/architecture/observer.md +4 -4
  432. package/docs/architecture/restricted-codex-analysis.md +36 -2
  433. package/docs/architecture/state-driven-executor.md +4 -5
  434. package/docs/architecture/task-protocol-support.md +3 -5
  435. package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +24 -16
  436. package/docs/contracts/run-bundle.md +10 -8
  437. package/docs/contracts/schemas.md +109 -53
  438. package/docs/contracts/study-analysis.md +24 -0
  439. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
  440. package/docs/product/automatic-analysis.md +1 -0
  441. package/docs/ramp/README.md +2 -1
  442. package/package.json +4 -4
  443. package/skills/humanish/SKILL.md +3 -2
  444. package/skills/humanish/agents/openai.yaml +1 -1
  445. package/dist/deprecated.d.ts +0 -90
  446. package/dist/deprecated.js +0 -106
  447. package/dist/lab/bag-overrides.d.ts +0 -18
  448. package/dist/lab/bag-overrides.js +0 -121
  449. package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
  450. package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
  451. /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
  452. /package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +0 -0
  453. /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
@@ -2,17 +2,17 @@ import { type ChromeMobileEmulationRequest } from "./cdp-probe.js";
2
2
  import type { RunDesktopGeometry } from "../../run/streams.js";
3
3
  import type { E2BDesktopSandbox } from "./sdk.js";
4
4
  /**
5
- * Runtime-only CDP endpoint attribution for the exact chromium this lane launched. Port
5
+ * Runtime-only CDP endpoint attribution for the exact chromium this participant launched. Port
6
6
  * resolution at OBSERVE time: the cached launch-time `cdpPort` wins; absent that, the observer
7
7
  * probe re-reads `profileDir`'s DevToolsActivePort marker (a slow cold start can publish it
8
- * after the launch-time poll gave up); absent both it uses 9222, the port every lane launches
8
+ * after the launch-time poll gave up); absent both it uses 9222, the port every participant launches
9
9
  * Chrome with, where a dead endpoint degrades into a warning that names the cause.
10
10
  */
11
11
  export interface ChromeCdpEndpoint {
12
12
  cdpPort?: number;
13
13
  /** The launched profile dir; lets observers re-read DevToolsActivePort at observe time. */
14
14
  profileDir?: string;
15
- /** The URL this lane opened; attributes the CDP page when no target id is pinned yet. */
15
+ /** The URL this participant opened; attributes the CDP page when no target id is pinned yet. */
16
16
  targetUrl: string;
17
17
  }
18
18
  /**
@@ -20,7 +20,7 @@ export interface ChromeCdpEndpoint {
20
20
  * after the launch page, so a tab the participant opens later should lay out at the phone width
21
21
  * too. The first observation on each new target reads that page's own report; a target that
22
22
  * reports the requested width is recorded through `onCovered`, and one that does not (or cannot be
23
- * read) fires `onDrift` once, so a phone-labelled lane that spent part of its session at desktop
23
+ * read) fires `onDrift` once, so a phone-labelled participant that spent part of its session at desktop
24
24
  * layout says so with the number the page gave.
25
25
  */
26
26
  export interface ChromeEmulationDrift {
@@ -44,7 +44,7 @@ export interface ChromeEmulationDrift {
44
44
  * reading the old tab forever).
45
45
  *
46
46
  * `onUnavailable` fires ONCE, on the first probe that could not read the page, with the reason.
47
- * The observer still degrades to `{}` for the loop; the callback is how a lane says out loud that
47
+ * The observer still degrades to `{}` for the loop; the callback is how a participant says out loud that
48
48
  * url/text criteria are not being measured, instead of letting the funnel report 0/N (#514).
49
49
  */
50
50
  export declare function makeChromeBrowserStateObserver(desktop: E2BDesktopSandbox, requestTimeoutMs: number, endpoint: ChromeCdpEndpoint, options?: {
@@ -59,10 +59,10 @@ export declare function makeChromeBrowserStateObserver(desktop: E2BDesktopSandbo
59
59
  text?: string;
60
60
  scrollY?: number;
61
61
  }>;
62
- /** The user agent a mobile-emulated lane presents unless the lab sets its own. */
62
+ /** The user agent a mobile-emulated participant presents unless the lab sets its own. */
63
63
  export declare const DEFAULT_MOBILE_USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
64
64
  /**
65
- * Apply mobile emulation (#221) to the lane's launch page and read back what the page reports.
65
+ * Apply mobile emulation (#221) to the participant's launch page and read back what the page reports.
66
66
  * Fails CLOSED: a request that cannot be applied throws, because a desktop run labelled mobile is
67
67
  * the over-trust this feature exists to prevent. A read-back that cannot be taken is a warning
68
68
  * (the emulation was applied; only the proof is missing).
@@ -14,7 +14,7 @@ import { e2bShell } from "./shell.js";
14
14
  * reading the old tab forever).
15
15
  *
16
16
  * `onUnavailable` fires ONCE, on the first probe that could not read the page, with the reason.
17
- * The observer still degrades to `{}` for the loop; the callback is how a lane says out loud that
17
+ * The observer still degrades to `{}` for the loop; the callback is how a participant says out loud that
18
18
  * url/text criteria are not being measured, instead of letting the funnel report 0/N (#514).
19
19
  */
20
20
  export function makeChromeBrowserStateObserver(desktop, requestTimeoutMs, endpoint, options = {}) {
@@ -97,10 +97,10 @@ export function makeChromeBrowserStateObserver(desktop, requestTimeoutMs, endpoi
97
97
  };
98
98
  };
99
99
  }
100
- /** The user agent a mobile-emulated lane presents unless the lab sets its own. */
100
+ /** The user agent a mobile-emulated participant presents unless the lab sets its own. */
101
101
  export const DEFAULT_MOBILE_USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
102
102
  /**
103
- * Apply mobile emulation (#221) to the lane's launch page and read back what the page reports.
103
+ * Apply mobile emulation (#221) to the participant's launch page and read back what the page reports.
104
104
  * Fails CLOSED: a request that cannot be applied throws, because a desktop run labelled mobile is
105
105
  * the over-trust this feature exists to prevent. A read-back that cannot be taken is a warning
106
106
  * (the emulation was applied; only the proof is missing).
@@ -129,7 +129,7 @@ export async function applyMobileEmulation(desktop, requestTimeoutMs, endpoint,
129
129
  };
130
130
  // The UA / touch / DPR overrides are bound to the DevTools session that set them and lapse the
131
131
  // moment its socket closes (measured: only the viewport width survived a one-shot apply). So the
132
- // applier stays attached for the lane's whole life as a detached process; the sandbox teardown
132
+ // applier stays attached for the participant's whole life as a detached process; the sandbox teardown
133
133
  // ends it. Its first stdout line says what was applied.
134
134
  const holderName = `mobile-emulation-${Date.now().toString(36)}`;
135
135
  await startDetachedProcess(shell, {
@@ -19,9 +19,9 @@ export declare function declaredScreenForRender(preset: DevicePreset, presetName
19
19
  preset: string;
20
20
  } | undefined;
21
21
  /**
22
- * Verify the desktop screen geometry IN-SANDBOX (the per-lane device claim is checked, never
22
+ * Verify the desktop screen geometry IN-SANDBOX (the participant's device claim is checked, never
23
23
  * assumed). A parseable mismatch fails closed. Unavailable/unparseable evidence is returned as
24
- * an explicit warning: the lane may still run, but its bundle records only the requested screen
24
+ * an explicit warning: the participant may still run, but its bundle records only the requested screen
25
25
  * and never upgrades that request into a verified measurement.
26
26
  */
27
27
  export declare function inspectDesktopScreenGeometry(args: {
@@ -57,7 +57,7 @@ export declare function makeChromeDesktopGeometryObserver(desktop: E2BDesktopSan
57
57
  }) | undefined>;
58
58
  /** Root-relative physical client bounds from xwininfo's C-locale stats. */
59
59
  export declare function parseXwininfoGeometry(output: string): RunDesktopGeometry["browserWindow"] | undefined;
60
- /** Hosted-browser geometry capture shared by the per-lane and shared-world routes. */
60
+ /** Hosted-browser geometry capture shared by the computer-use and shared-world routes. */
61
61
  export declare function captureDesktopBrowserGeometry(args: {
62
62
  desktop: E2BDesktopSandbox;
63
63
  browserFamily: DesktopBrowserFamily;
@@ -67,7 +67,7 @@ export declare function captureDesktopBrowserGeometry(args: {
67
67
  pagePreference?: ChromeCdpPagePreference;
68
68
  browserWindowId?: string;
69
69
  participantId: string;
70
- /** Runtime-only lane target URL (attributes the CDP page); never persisted by this capture. */
70
+ /** Runtime-only participant target URL (attributes the CDP page); never persisted by this capture. */
71
71
  targetUrl: string;
72
72
  requestedScreen: readonly [number, number];
73
73
  requestTimeoutMs: number;
@@ -22,9 +22,9 @@ export function declaredScreenForRender(preset, presetName, rendered) {
22
22
  return { width: preset.width, height: preset.height, preset: presetName };
23
23
  }
24
24
  /**
25
- * Verify the desktop screen geometry IN-SANDBOX (the per-lane device claim is checked, never
25
+ * Verify the desktop screen geometry IN-SANDBOX (the participant's device claim is checked, never
26
26
  * assumed). A parseable mismatch fails closed. Unavailable/unparseable evidence is returned as
27
- * an explicit warning: the lane may still run, but its bundle records only the requested screen
27
+ * an explicit warning: the participant may still run, but its bundle records only the requested screen
28
28
  * and never upgrades that request into a verified measurement.
29
29
  */
30
30
  export async function inspectDesktopScreenGeometry(args) {
@@ -229,7 +229,7 @@ async function fitBrowserWindowWithinDesktop(desktop, windowId, resolution, requ
229
229
  }
230
230
  return resized;
231
231
  }
232
- /** Hosted-browser geometry capture shared by the per-lane and shared-world routes. */
232
+ /** Hosted-browser geometry capture shared by the computer-use and shared-world routes. */
233
233
  export async function captureDesktopBrowserGeometry(args) {
234
234
  const warnings = [];
235
235
  let browserWindowId = args.browserWindowId;
@@ -81,7 +81,7 @@ export async function startE2BDesktopMedia(options) {
81
81
  },
82
82
  });
83
83
  }
84
- /** Where a lane's synthetic camera feed lives inside the sandbox: a tmpfs the sandbox user can
84
+ /** Where a participant's synthetic camera feed lives inside the sandbox: a tmpfs the sandbox user can
85
85
  * write, and a path that contains neither /tmp/ nor /home/, which the public-safety scan reads
86
86
  * as an operator's local path (this one is the harness's own and belongs in the bundle). */
87
87
  const SANDBOX_MEDIA_DIR = "/dev/shm/humanish-media";
@@ -101,7 +101,7 @@ export async function prepareDesktopMedia(desktop, media, permission, cwd, reque
101
101
  throw new Error("Microphone source-file injection is unsupported; use source: speech.");
102
102
  if (media.camera !== undefined)
103
103
  throw new Error("Hosted synthetic cameras cannot be combined with speech.");
104
- // The lane starts and admits the speech worker before launching the browser.
104
+ // The participant's setup starts and admits the speech worker before launching the browser.
105
105
  return {
106
106
  microphone: { source: "speech" },
107
107
  permission,
@@ -27,7 +27,7 @@ async function acquire(request, template) {
27
27
  if (request.receipt !== null) {
28
28
  const { root, participantId, now = Date.now } = request.receipt;
29
29
  // Best effort by contract: a failed write leaves the TTL as the only backstop and never
30
- // fails the lane.
30
+ // fails the participant.
31
31
  await appendSandboxReceipt(root, {
32
32
  at: new Date(now()).toISOString(),
33
33
  laneId: participantId,
@@ -2,8 +2,8 @@
2
2
  // real @e2b/desktop Sandbox. Every desktop route launches through this one seam; the peer dep is
3
3
  // optional and lazily loaded, so it stays out of the published tarball and CI.
4
4
  //
5
- // E2BDesktopSandbox is the command, file, stream, launch and input subset the lanes use; `open` is
6
- // optional because older SDKs lack it (the computer-use lane then falls back to launch). It
5
+ // E2BDesktopSandbox is the command, file, stream, launch and input subset the participants use; `open` is
6
+ // optional because older SDKs lack it (the computer-use route then falls back to launch). It
7
7
  // satisfies the executor's E2BDesktopLike port (src/substrates/e2b/desktop-executor.ts) as is.
8
8
  import { sep } from "node:path";
9
9
  import { fileURLToPath } from "node:url";
@@ -16,6 +16,8 @@ export declare function runtimeExec(file: string, args: string[], options?: Runt
16
16
  stdout: string;
17
17
  stderr: string;
18
18
  }>;
19
+ /** The shell command an operator runs for `docker <args>` on this host, as runtimeDocker runs it. */
20
+ export declare function dockerCommandLine(args: string[], options?: RuntimeHostOptions): string;
19
21
  export declare function runtimeDocker(args: string[], options?: RuntimeHostOptions, timeout?: number): Promise<{
20
22
  stdout: string;
21
23
  stderr: string;
@@ -30,6 +30,12 @@ export async function runtimeExec(file, args, options = {}, timeout = 15_000) {
30
30
  ? hostExec("limactl", ["shell", "--workdir", "/", LIMA_INSTANCE, "--", file, ...args], options, timeout)
31
31
  : hostExec(file, args, options, timeout);
32
32
  }
33
+ /** The shell command an operator runs for `docker <args>` on this host, as runtimeDocker runs it. */
34
+ export function dockerCommandLine(args, options = {}) {
35
+ return usesLima(options)
36
+ ? `limactl shell ${LIMA_INSTANCE} -- sudo docker --host unix:///var/run/docker.sock ${args.join(" ")}`
37
+ : `docker ${args.join(" ")}`;
38
+ }
33
39
  export async function runtimeDocker(args, options = {}, timeout = 15_000) {
34
40
  return usesLima(options)
35
41
  ? runtimeExec("sudo", ["-n", "docker", "--host", "unix:///var/run/docker.sock", ...args], options, timeout)
@@ -29,11 +29,13 @@ export declare function createTuiObserverSession(cwdInput: string, options?: {
29
29
  * has children: the CLI, and whatever it spawned to reach the sandbox. Signalling only the parent
30
30
  * leaves those orphaned and still working.
31
31
  *
32
- * SIGTERM, never SIGKILL: the run's own handlers get the chance to finalize its record and release
33
- * what it holds. A killed run leaves a `running` record to go stale, which reads as interrupted —
34
- * true, but strictly less informative than a run that was told to stop.
32
+ * SIGTERM, never SIGKILL, so the run's handler gets to act. Outside post-run analysis the run
33
+ * command (src/cli/commands/run-signals.ts) marks the run `interrupted` in status.json, kills the
34
+ * E2B sandboxes its receipts name, writes reclaim-receipt.json and exits; run.json keeps its last
35
+ * live flush. During analysis the signal cancels analysis instead. A local VM's container exits
36
+ * when the run's process goes.
35
37
  *
36
- * This stops the PROCESS. Sandboxes it created are a separate resource with their own receipts, and
37
- * `Reclaim` is what stops those — the run screen offers it as soon as this succeeds.
38
+ * `Reclaim` stays on offer: it retries by id any kill the handler could not confirm within its
39
+ * 10 s deadline. Each sandbox's create-time timeout is the backstop.
38
40
  */
39
41
  export declare function stopRun(cwd: string, runId: string, intent?: "run" | "analysis"): Promise<TuiActionResult>;
@@ -1,4 +1,4 @@
1
- import { requestAutomaticStudyAnalysisCancellation } from "../analysis/automatic.js";
1
+ import { requestAutomaticAnalysisCancellation } from "../analysis/automatic.js";
2
2
  // The two things a run card can DO (#455 rev 8).
3
3
  //
4
4
  // The mock's run screen is an outcome CARD with actions, not a field list, and an action that does
@@ -108,18 +108,20 @@ export function createTuiObserverSession(cwdInput, options = {}) {
108
108
  * has children: the CLI, and whatever it spawned to reach the sandbox. Signalling only the parent
109
109
  * leaves those orphaned and still working.
110
110
  *
111
- * SIGTERM, never SIGKILL: the run's own handlers get the chance to finalize its record and release
112
- * what it holds. A killed run leaves a `running` record to go stale, which reads as interrupted —
113
- * true, but strictly less informative than a run that was told to stop.
111
+ * SIGTERM, never SIGKILL, so the run's handler gets to act. Outside post-run analysis the run
112
+ * command (src/cli/commands/run-signals.ts) marks the run `interrupted` in status.json, kills the
113
+ * E2B sandboxes its receipts name, writes reclaim-receipt.json and exits; run.json keeps its last
114
+ * live flush. During analysis the signal cancels analysis instead. A local VM's container exits
115
+ * when the run's process goes.
114
116
  *
115
- * This stops the PROCESS. Sandboxes it created are a separate resource with their own receipts, and
116
- * `Reclaim` is what stops those — the run screen offers it as soon as this succeeds.
117
+ * `Reclaim` stays on offer: it retries by id any kill the handler could not confirm within its
118
+ * 10 s deadline. Each sandbox's create-time timeout is the backstop.
117
119
  */
118
120
  export async function stopRun(cwd, runId, intent = "run") {
119
121
  // The selected action carries its authority. Never infer permission to signal a process from
120
122
  // mutable status metadata after the operator asked only to cancel analysis.
121
123
  if (intent === "analysis") {
122
- const analysis = await requestAutomaticStudyAnalysisCancellation(cwd, runId);
124
+ const analysis = await requestAutomaticAnalysisCancellation(cwd, runId);
123
125
  return {
124
126
  schema: TUI_ACTION_SCHEMA,
125
127
  ok: analysis.requested,
@@ -153,7 +155,7 @@ export async function stopRun(cwd, runId, intent = "run") {
153
155
  };
154
156
  }
155
157
  if (record.state === "finished") {
156
- const analysis = await requestAutomaticStudyAnalysisCancellation(cwd, runId);
158
+ const analysis = await requestAutomaticAnalysisCancellation(cwd, runId);
157
159
  if (analysis.requested)
158
160
  return {
159
161
  schema: TUI_ACTION_SCHEMA,
@@ -162,6 +164,13 @@ export async function stopRun(cwd, runId, intent = "run") {
162
164
  };
163
165
  return { schema: TUI_ACTION_SCHEMA, ok: false, message: "this run already finished" };
164
166
  }
167
+ if (record.state === "interrupted") {
168
+ return {
169
+ schema: TUI_ACTION_SCHEMA,
170
+ ok: false,
171
+ message: `this run already stopped (${record.signal ?? "interrupted"}); Reclaim releases any sandbox it left`,
172
+ };
173
+ }
165
174
  const pid = record.pid;
166
175
  if (typeof pid !== "number" || !Number.isInteger(pid) || pid <= 1) {
167
176
  // pid 1 and below are never a run of ours, and signalling them would be catastrophic.
@@ -198,6 +207,6 @@ export async function stopRun(cwd, runId, intent = "run") {
198
207
  return {
199
208
  schema: TUI_ACTION_SCHEMA,
200
209
  ok: true,
201
- message: "asked the run to stop — its sandboxes are separate, so Reclaim them once it reports interrupted",
210
+ message: "asked the run to stop; it marks itself interrupted and kills its E2B sandboxes, and Reclaim retries any kill it could not confirm",
202
211
  };
203
212
  }