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,17 +1,17 @@
1
1
  // Detached process management over a Shell, the primitive behind serving a subject app in the
2
2
  // sandbox. A foreground command hits its deadline on long-running work, so long work runs detached:
3
3
  //
4
- // - Scripts are written via `writeFile`, never heredocs — which eliminates the
4
+ // - Scripts are written via `writeFile`, never heredocs, which eliminates the
5
5
  // sentinel-collision bug class (a command line that equals the heredoc terminator) by
6
6
  // construction.
7
- // - Bounded steps (install/build) run detached with an ATOMICALLY-written status file
7
+ // - Bounded steps (install/build) run detached with an atomically-written status file
8
8
  // (write tmp + mv), polled by short foreground commands; a timeout kills the process
9
9
  // group and surfaces a capped log tail for the caller to redact and persist.
10
10
  // - Long-lived steps (a dev/prod server) launch fully detached through `Shell.start`; the
11
11
  // sandbox lifecycle (kill-on-timeout) owns their reclamation.
12
12
  // - Readiness is an explicit curl probe against the declared URL.
13
13
  //
14
- // Log tails are returned RAW; callers must pass them through redaction before persisting
14
+ // Log tails are returned raw; callers must pass them through redaction before persisting
15
15
  // (build output can echo env values and paths).
16
16
  import { runOrThrow, shellQuote, throwOnExit } from "./shell.js";
17
17
  const WORK_ROOT = "/tmp/humanish-subject";
@@ -62,14 +62,14 @@ async function writeAndLaunch(shell, name, command, cwd, requestTimeoutMs) {
62
62
  await shell.writeFile(scriptPath, wrapperScript(name, command, cwd));
63
63
  throwOnExit(await shell.start(`bash ${shellQuote(scriptPath)}`, { requestTimeoutMs }));
64
64
  }
65
- /** Read the capped log tail for a step (raw — caller redacts). */
65
+ /** Read the capped log tail for a step (raw; caller redacts). */
66
66
  export async function readDetachedLog(shell, name, requestTimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
67
67
  assertName(name);
68
68
  const result = await runOrThrow(shell, `tail -c ${LOG_TAIL_BYTES} ${shellQuote(`${stepDir(name)}/log.txt`)} 2>/dev/null || true`, { requestTimeoutMs });
69
69
  return result.stdout;
70
70
  }
71
71
  /**
72
- * Run a BOUNDED step (install/build) detached, polling its atomic status file until it
72
+ * Run a bounded step (install/build) detached, polling its atomic status file until it
73
73
  * exits or the budget runs out. On timeout the process group is killed and the log tail is
74
74
  * still captured so failures stay diagnosable.
75
75
  */
@@ -105,7 +105,7 @@ export async function runDetachedStep(shell, options) {
105
105
  }
106
106
  }
107
107
  /**
108
- * Launch a LONG-LIVED process (the subject's server) fully detached and return immediately.
108
+ * Launch a long-lived process (the subject's server) fully detached and return immediately.
109
109
  * No status polling: liveness is the caller's readiness probe, and reclamation belongs to
110
110
  * the sandbox lifecycle (create with kill-on-timeout).
111
111
  */
@@ -113,7 +113,7 @@ export async function startDetachedProcess(shell, options) {
113
113
  await writeAndLaunch(shell, options.name, options.command, options.cwd, options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);
114
114
  }
115
115
  /**
116
- * Poll a URL from INSIDE the sandbox until it answers 2xx/3xx or the budget runs out.
116
+ * Poll a URL from inside the sandbox until it answers 2xx/3xx or the budget runs out.
117
117
  * Returns true when the subject is ready.
118
118
  */
119
119
  export async function probeUrl(shell, url, options) {
@@ -5,35 +5,35 @@ export interface ChromeCdpProbeArgs {
5
5
  cdpPort?: number;
6
6
  /** The launched profile dir; the probe re-reads DevToolsActivePort at observe time. */
7
7
  profileDir?: string;
8
- /** The URL this lane opened; attributes the page when no target id is pinned yet. */
8
+ /** The URL this participant opened; attributes the page when no target id is pinned yet. */
9
9
  targetUrl: string;
10
10
  /** The pinned page target id from the launch-time geometry capture. */
11
11
  targetId?: string;
12
12
  /**
13
13
  * "pinned" (default): the launch-time target, for launch geometry and emulation attribution.
14
- * "active": the tab the participant is driving NOW — Chrome's /json lists page
14
+ * "active": the tab the participant is driving now; Chrome's /json lists page
15
15
  * targets most-recently-focused first. The state observer must follow the participant: a
16
- * verification link that opens in a NEW tab left a pinned observer reading the old tab forever,
16
+ * verification link that opens in a new tab left a pinned observer reading the old tab forever,
17
17
  * so the observed URL never changed again and stopWhen/task criteria went blind (a live run's
18
- * funnel read reach-dashboard 0/2 under a screenshot OF the dashboard). Final geometry follows
18
+ * funnel read reach-dashboard 0/2 under a screenshot of the dashboard). Final geometry follows
19
19
  * this target too: a closed launch tab is unavailable, and a background tab may report stale
20
20
  * layout dimensions or zero outer bounds after navigation.
21
21
  */
22
22
  prefer?: ChromeCdpPagePreference;
23
23
  /**
24
24
  * "state": url/title/text/scrollY. "geometry": outer window + CSS viewport. "port": resolution
25
- * only. "emulate": apply mobile emulation (#221) to the selected page and exit (the overrides that
25
+ * only. "emulate": apply mobile emulation to the selected page and exit (the overrides that
26
26
  * are session-scoped, UA / touch / DPR, lapse when the socket closes). "hold": the same over a browser-level
27
- * socket, then stay attached until killed (how a lane keeps them for its whole life) and attach
27
+ * socket, then stay attached until killed (how a participant keeps them for its whole life) and attach
28
28
  * to every page target Chrome opens later, sending it the same overrides and a reload the moment
29
- * it exists, never pausing it (#623). "fidelity": read
29
+ * it exists, never pausing it. "fidelity": read
30
30
  * back what the page reports about itself (UA, DPR, viewport, touch), the proof for the bundle.
31
31
  */
32
32
  mode: "state" | "geometry" | "port" | "emulate" | "hold" | "fidelity";
33
33
  /** For "emulate": what to apply. */
34
34
  emulation?: ChromeMobileEmulationRequest;
35
35
  }
36
- /** Mobile emulation request (#221): the CDP Emulation domain applied to one page target. */
36
+ /** Mobile emulation request: the CDP Emulation domain applied to one page target. */
37
37
  export interface ChromeMobileEmulationRequest {
38
38
  width: number;
39
39
  height: number;
@@ -82,9 +82,9 @@ export interface ChromeCdpProbeResult {
82
82
  * headless Chrome).
83
83
  *
84
84
  * WebSocket is hand-rolled because python's stdlib has no client: one masked text frame out, frames
85
- * in until the reply with id 1 arrives, 1.5 s budget, and NO Origin header (Chrome refuses
85
+ * in until the reply with id 1 arrives, 1.5 s budget, and no Origin header (Chrome refuses
86
86
  * cross-origin DevTools sockets unless --remote-allow-origins is set; a header-less client is a
87
- * local one). urllib is opened WITHOUT proxy handlers so a sandbox-wide http_proxy cannot redirect
87
+ * local one). urllib is opened without proxy handlers so a sandbox-wide http_proxy cannot redirect
88
88
  * a loopback read.
89
89
  */
90
90
  export declare const CHROME_CDP_PROBE_PY: string;
@@ -93,7 +93,7 @@ export declare function chromeCdpProbeCommand(args: ChromeCdpProbeArgs): string;
93
93
  /**
94
94
  * Narrow one probe's stdout. A parse failure is reported as unavailable with the reason, never as
95
95
  * an empty success: the difference between "nothing to observe" and "could not observe" is the
96
- * whole point of #514.
96
+ * whole point.
97
97
  */
98
98
  export declare function parseChromeCdpProbeOutput(stdout: string | undefined): ChromeCdpProbeResult;
99
99
  export {};
@@ -1,22 +1,19 @@
1
1
  // The in-sandbox Chrome DevTools probe behind every URL / page-text / viewport observation.
2
2
  //
3
- // It runs on python3, stdlib only. It used to run on node, and that was the #514 root cause: the
4
- // stock E2B desktop template ships python3 and curl but NO Node, and Node only arrives when a
5
- // subject's serve pipeline needs it (src/subject/runtime.ts). So on the app-url route, and on any
6
- // subject served by something other than Node (the taskly benchmark is `python3 -m http.server`),
7
- // `node -e` exited 127 on every turn, the probe degraded to `{}`, and every urlIncludes /
8
- // textIncludes stop condition and task criterion went blind for the whole session. The only trace
9
- // was a geometry warning that the CSS viewport "could not be measured", which named the symptom
10
- // and not the cause. The tab-pinning fix that preceded this one (prefer "active") was diagnosed on
11
- // a Node subject, where the probe happened to work.
3
+ // It runs on python3, stdlib only. The stock E2B desktop template ships python3 and curl but no
4
+ // Node, and Node only arrives when a subject's serve pipeline needs it (src/subject/runtime.ts).
5
+ // So on the app-url route, and on any subject served by something other than Node (the taskly
6
+ // benchmark is `python3 -m http.server`), a `node -e` probe exits 127 on every turn, degrades to
7
+ // `{}`, and blinds every urlIncludes / textIncludes stop condition and task criterion for the
8
+ // whole session, with only a geometry warning that the CSS viewport "could not be measured".
12
9
  //
13
10
  // The same lesson was learned once already: the comms catch was rewritten from node to python3 in
14
11
  // 0.29.0 (comms/sandbox-catch.ts). This is the third in-sandbox runtime dependency to move.
15
12
  //
16
- // The script takes ONE JSON argument and prints ONE JSON line. Failures print
17
- // `{"unavailable": "<reason>"}` with exit 0 so the caller can say WHY the channel is dark instead
18
- // of swallowing an exit code; the TypeScript side turns that into a lane warning that names the
19
- // consequence ("url/text criteria will read as NEVER MEASURED").
13
+ // The script takes one JSON argument and prints one JSON line. Failures print
14
+ // `{"unavailable": "<reason>"}` with exit 0 so the caller can say why the channel is dark instead
15
+ // of swallowing an exit code; the TypeScript side turns that into a participant warning that names the
16
+ // consequence ("url/text criteria will read as never measured").
20
17
  import { shellQuote } from "../shell.js";
21
18
  /**
22
19
  * The probe itself. Kept as one string so the shipped command is exactly what the tests execute
@@ -24,9 +21,9 @@ import { shellQuote } from "../shell.js";
24
21
  * headless Chrome).
25
22
  *
26
23
  * WebSocket is hand-rolled because python's stdlib has no client: one masked text frame out, frames
27
- * in until the reply with id 1 arrives, 1.5 s budget, and NO Origin header (Chrome refuses
24
+ * in until the reply with id 1 arrives, 1.5 s budget, and no Origin header (Chrome refuses
28
25
  * cross-origin DevTools sockets unless --remote-allow-origins is set; a header-less client is a
29
- * local one). urllib is opened WITHOUT proxy handlers so a sandbox-wide http_proxy cannot redirect
26
+ * local one). urllib is opened without proxy handlers so a sandbox-wide http_proxy cannot redirect
30
27
  * a loopback read.
31
28
  */
32
29
  export const CHROME_CDP_PROBE_PY = String.raw `
@@ -277,7 +274,7 @@ def browser_ws_url(port):
277
274
 
278
275
  def hold(port, page, request):
279
276
  """Emulate the launch page and then every page target Chrome opens later, for as long as this
280
- process lives (#221, #623). One browser-level socket with flattened sessions: the launch page is
277
+ process lives. One browser-level socket with flattened sessions: the launch page is
281
278
  attached by id and reloaded so scripts that read the UA at load see it; a target that appears
282
279
  later is attached the moment it exists, sent the same overrides, and reloaded once after its
283
280
  first real navigation commits (touch emulation reaches a document only when it loads under it).
@@ -387,7 +384,7 @@ def main():
387
384
  page = select_page(pages, args)
388
385
  # A listing with targets but no http page is usually an instant: a reload in flight, a tab
389
386
  # between about:blank and its navigation. Ask again for up to a second before calling it
390
- # unavailable (#653): the lane's observer would otherwise lose one turn of url/text evidence,
387
+ # unavailable: the lane's observer would otherwise lose one turn of url/text evidence,
391
388
  # and a test on a loaded runner saw exactly this twice in one evening.
392
389
  for _ in range(4):
393
390
  if page is not None or not pages:
@@ -465,7 +462,7 @@ export function chromeCdpProbeCommand(args) {
465
462
  /**
466
463
  * Narrow one probe's stdout. A parse failure is reported as unavailable with the reason, never as
467
464
  * an empty success: the difference between "nothing to observe" and "could not observe" is the
468
- * whole point of #514.
465
+ * whole point.
469
466
  */
470
467
  export function parseChromeCdpProbeOutput(stdout) {
471
468
  const trimmed = (stdout ?? "").trim();
@@ -2,12 +2,12 @@ import type { LabDesktopBrowser } from "../../lab/types.js";
2
2
  import type { E2BDesktopSandbox } from "./sdk.js";
3
3
  import type { DesktopMediaEvidence } from "./desktop-media.js";
4
4
  export declare const DESKTOP_SETTLE_MS = 8000;
5
- /** The DevTools port every Chromium lane launches with; see `chrome_debug_flags` below. */
5
+ /** The DevTools port every Chromium participant launches with; see `chrome_debug_flags` below. */
6
6
  export declare const CHROME_DEVTOOLS_PORT = 9222;
7
7
  /**
8
8
  * The shell step that waits for DevTools after a Chromium launch. `pid` is a shell word (the
9
9
  * launch script passes "$launch_pid"). Without python3 it prints nothing, which reads as no
10
- * readiness evidence: the lane keeps its previous behavior.
10
+ * readiness evidence: the participant keeps its previous behavior.
11
11
  */
12
12
  export declare function chromeDevToolsReadinessCommand(args: {
13
13
  pid: string;
@@ -29,11 +29,11 @@ export declare function parseChromeDevToolsReadiness(stdout: string): ChromeDevT
29
29
  export interface DesktopBrowserEvidence {
30
30
  requested: LabDesktopBrowser;
31
31
  resolved?: string;
32
- /** Synthetic media devices the browser was launched with (#509), and how permission is answered. */
32
+ /** Synthetic media devices the browser was launched with, and how permission is answered. */
33
33
  media?: DesktopMediaEvidence;
34
34
  }
35
35
  export type DesktopBrowserFamily = "chromium" | "firefox" | "unknown";
36
- /** Runtime-only identity for the exact browser process started by this lane. */
36
+ /** Runtime-only identity for the exact browser process started for this participant. */
37
37
  export interface DesktopBrowserLaunchIdentity {
38
38
  processId: string;
39
39
  profileDir: string;
@@ -66,7 +66,7 @@ export declare function buildFillDesktopWindowCommand(windowId: string, width: n
66
66
  */
67
67
  export declare function fillDesktopBrowserWindow(desktop: E2BDesktopSandbox, windowId: string, resolution: readonly [number, number], requestTimeoutMs: number): Promise<void>;
68
68
  export declare function openDesktopBrowserTarget(desktop: E2BDesktopSandbox, targetUrl: string, requestTimeoutMs: number, browserPreference: LabDesktopBrowser | undefined,
69
- /** Launch-time flags that make mobile fidelity (#221) hold across every tab: the user agent and
69
+ /** Launch-time flags that make mobile fidelity hold across every tab: the user agent and
70
70
  * touch events are browser-wide here, where the CDP holder covers only the launch page. */
71
71
  extraChromiumFlags?: readonly string[], environment?: Readonly<Record<string, string>>): Promise<DesktopBrowserLaunchResult>;
72
72
  /**
@@ -9,11 +9,11 @@ import { e2bShell } from "./shell.js";
9
9
  // Settle after opening the browser or the terminal, before the first screenshot: long enough for
10
10
  // a cold browser and page load to paint (2 s captured a blank desktop; the render needs 6-9 s).
11
11
  export const DESKTOP_SETTLE_MS = 8_000;
12
- /** The DevTools port every Chromium lane launches with; see `chrome_debug_flags` below. */
12
+ /** The DevTools port every Chromium participant launches with; see `chrome_debug_flags` below. */
13
13
  export const CHROME_DEVTOOLS_PORT = 9222;
14
14
  /**
15
15
  * How long the launch command waits for Chrome's DevTools port to answer. Six live launches on the
16
- * stock desktop answered in 4.8-7.7 s; two device-emulated lanes failed when it had not answered
16
+ * stock desktop answered in 4.8-7.7 s; two device-emulated participants failed when it had not answered
17
17
  * about 11 s after launch, and a CI leg once waited 20 s for the port marker.
18
18
  */
19
19
  const CHROME_DEVTOOLS_READY_MS = 30_000;
@@ -85,7 +85,7 @@ while True:
85
85
  /**
86
86
  * The shell step that waits for DevTools after a Chromium launch. `pid` is a shell word (the
87
87
  * launch script passes "$launch_pid"). Without python3 it prints nothing, which reads as no
88
- * readiness evidence: the lane keeps its previous behavior.
88
+ * readiness evidence: the participant keeps its previous behavior.
89
89
  */
90
90
  export function chromeDevToolsReadinessCommand(args) {
91
91
  return [
@@ -111,9 +111,9 @@ export function parseChromeDevToolsReadiness(stdout) {
111
111
  export async function findVisibleBrowserWindowId(desktop, requestTimeoutMs, browserFamily, launchIdentity) {
112
112
  if (browserFamily === "unknown")
113
113
  return undefined;
114
- // The candidate loop keeps the LAST identity match: with a launch identity the match is
114
+ // The candidate loop keeps the last identity match: with a launch identity the match is
115
115
  // unique anyway, and without one every family candidate matches, so the newest visible
116
- // window of the launched family wins (the window this lane just opened).
116
+ // window of the launched family wins (the window this participant just opened).
117
117
  const finder = browserFamily === "firefox"
118
118
  ? [
119
119
  "find_firefox_window() {",
@@ -197,7 +197,7 @@ export async function fillDesktopBrowserWindow(desktop, windowId, resolution, re
197
197
  .catch(() => undefined);
198
198
  }
199
199
  export async function openDesktopBrowserTarget(desktop, targetUrl, requestTimeoutMs, browserPreference,
200
- /** Launch-time flags that make mobile fidelity (#221) hold across every tab: the user agent and
200
+ /** Launch-time flags that make mobile fidelity hold across every tab: the user agent and
201
201
  * touch events are browser-wide here, where the CDP holder covers only the launch page. */
202
202
  extraChromiumFlags = [], environment) {
203
203
  const requestedBrowser = browserPreference ?? "default";
@@ -242,10 +242,10 @@ extraChromiumFlags = [], environment) {
242
242
  " fi",
243
243
  " return 1",
244
244
  "}",
245
- // Fixed CDP port (not :0/random): each seat has its OWN desktop sandbox, so a known port
246
- // cannot conflict, and it makes the observer's port resolution deterministic. With :0 the
247
- // real port lives only in DevToolsActivePort; when the launch-time capture misses on a cold
248
- // start the observer falls back to 9222 and — being wrong — every CDP read fails for the
245
+ // Fixed CDP port (not :0/random): each participant has its own desktop sandbox, so a known
246
+ // port cannot conflict, and it makes the observer's port resolution deterministic. With :0
247
+ // the real port lives only in DevToolsActivePort; when the launch-time capture misses on a
248
+ // cold start the observer falls back to 9222 and, being wrong, every CDP read fails for the
249
249
  // whole run (the lobby-code handoff then never sees the host's /lobby URL). 9222 is already
250
250
  // the fallback, so making it the actual port aligns launch, capture, and fallback.
251
251
  `chrome_debug_flags=(--remote-debugging-address=127.0.0.1 --remote-debugging-port=${CHROME_DEVTOOLS_PORT} ${chromiumFlags})`,
@@ -375,9 +375,9 @@ export async function openDesktopTerminal(desktop, requestTimeoutMs, workdir) {
375
375
  command: [
376
376
  "for candidate in x-terminal-emulator xfce4-terminal gnome-terminal konsole xterm; do",
377
377
  ' if command -v "$candidate" >/dev/null 2>&1; then',
378
- // LANG is set on the terminal we open, not globally: the stock image declares no locale, and
378
+ // `LANG` is set on the terminal we open, not globally: the stock image declares no locale, and
379
379
  // a study that measures our own mojibake against an unconfigured template would be measuring
380
- // the template. The PRODUCT-side fix (an ASCII fallback when the locale is not UTF-8) is in
380
+ // the template. The product-side fix (an ASCII fallback when the locale is not UTF-8) is in
381
381
  // src/routes/terminal/encoding.ts, and it is the one that matters for real users.
382
382
  ` (cd ${shellQuote(dir)} 2>/dev/null || cd /home/user; DISPLAY=:0 LANG=C.UTF-8 LC_ALL=C.UTF-8 HUMANISH_STUDY_PARTICIPANT=1 nohup "$candidate" >/dev/null 2>&1 &)`,
383
383
  " sleep 3",
@@ -2,25 +2,25 @@ 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
6
- * resolution at OBSERVE time: the cached launch-time `cdpPort` wins; absent that, the observer
5
+ * Runtime-only CDP endpoint attribution for the exact chromium this participant launched. Port
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
  /**
19
- * Mobile emulation on later tabs (#623): the holder attaches to every page target Chrome opens
19
+ * Mobile emulation on later tabs: the holder attaches to every page target Chrome opens
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 {
@@ -37,15 +37,15 @@ export interface ChromeEmulationDrift {
37
37
  /**
38
38
  * The URL / title / page-text / scroll observer behind stopWhen and task criteria. One probe per
39
39
  * observation, run on the sandbox's python3 (see src/substrates/e2b/cdp-probe.ts for why not
40
- * node: #514).
40
+ * node).
41
41
  *
42
- * "active": follow the participant to whatever tab they are driving now — never pin the state
43
- * observer to the launch tab (a verification link that opened in a NEW tab left a pinned observer
42
+ * "active": follow the participant to whatever tab they are driving now; never pin the state
43
+ * observer to the launch tab (a verification link that opened in a new tab left a pinned observer
44
44
  * reading the old tab forever).
45
45
  *
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
48
- * url/text criteria are not being measured, instead of letting the funnel report 0/N (#514).
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 participant says out loud that
48
+ * url/text criteria are not being measured, instead of letting the funnel report 0/N.
49
49
  */
50
50
  export declare function makeChromeBrowserStateObserver(desktop: E2BDesktopSandbox, requestTimeoutMs: number, endpoint: ChromeCdpEndpoint, options?: {
51
51
  /** The page target to prefer before the participant switches tabs. */
@@ -59,11 +59,11 @@ 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.
66
- * Fails CLOSED: a request that cannot be applied throws, because a desktop run labelled mobile is
65
+ * Apply mobile emulation to the participant's launch page and read back what the page reports.
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).
69
69
  */
@@ -7,15 +7,15 @@ import { e2bShell } from "./shell.js";
7
7
  /**
8
8
  * The URL / title / page-text / scroll observer behind stopWhen and task criteria. One probe per
9
9
  * observation, run on the sandbox's python3 (see src/substrates/e2b/cdp-probe.ts for why not
10
- * node: #514).
10
+ * node).
11
11
  *
12
- * "active": follow the participant to whatever tab they are driving now — never pin the state
13
- * observer to the launch tab (a verification link that opened in a NEW tab left a pinned observer
12
+ * "active": follow the participant to whatever tab they are driving now; never pin the state
13
+ * observer to the launch tab (a verification link that opened in a new tab left a pinned observer
14
14
  * reading the old tab forever).
15
15
  *
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
18
- * url/text criteria are not being measured, instead of letting the funnel report 0/N (#514).
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 participant says out loud that
18
+ * url/text criteria are not being measured, instead of letting the funnel report 0/N.
19
19
  */
20
20
  export function makeChromeBrowserStateObserver(desktop, requestTimeoutMs, endpoint, options = {}) {
21
21
  const { targetId, onUnavailable, drift } = options;
@@ -97,11 +97,11 @@ 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.
104
- * Fails CLOSED: a request that cannot be applied throws, because a desktop run labelled mobile is
103
+ * Apply mobile emulation to the participant's launch page and read back what the page reports.
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).
107
107
  */
@@ -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, {
@@ -153,7 +153,7 @@ export async function applyMobileEmulation(desktop, requestTimeoutMs, endpoint,
153
153
  }
154
154
  const applied = announced;
155
155
  // Viewport/touch read-back proves context settings, not gesture equivalence. Two hosted
156
- // replicas and a native-X conversion-toggle control reproduced reset click counts (#676).
156
+ // replicas and a native-X conversion-toggle control reproduced reset click counts.
157
157
  const warnings = request.touch
158
158
  ? [
159
159
  "Mobile emulation uses desktop pointer-to-touch conversion, which can differ for repeated taps. Confirm gesture failures with direct or native touch input before attributing them to the app.",
@@ -17,7 +17,7 @@ export interface E2BDesktopLike {
17
17
  stdout?: string;
18
18
  }>;
19
19
  };
20
- /** Optional file surface used to transfer typed text without shell-quoting it. */
20
+ /** Optional file surface for transferring typed text without shell-quoting it. */
21
21
  files?: {
22
22
  write(path: string, data: string | ArrayBuffer, options?: {
23
23
  requestTimeoutMs?: number;
@@ -9,7 +9,7 @@ const TYPE_COMMAND_TIMEOUT_MS = 15_000;
9
9
  const HELD_KEYS_TIMEOUT_MS = 15_000;
10
10
  const CURSOR_READ_TIMEOUT_MS = 500;
11
11
  /**
12
- * The stock image's xdotool waits ~15s on a synchronized move to its current position (#681).
12
+ * The stock image's xdotool waits ~15s on a synchronized move to its current position.
13
13
  * Only an exact integer match can omit that move; fractional actions keep the SDK's own
14
14
  * coordinate conversion. Read every time: another action or sequential role may move it.
15
15
  * The SDK's getCursorPosition (2.3 through 2.4.0) takes no timeout or signal. Bound our wait, observe late
@@ -5,10 +5,10 @@ import { type DesktopBrowserFamily, type DesktopBrowserLaunchIdentity } from "./
5
5
  import type { ChromeCdpEndpoint } from "./desktop-cdp.js";
6
6
  import type { E2BDesktopSandbox } from "./sdk.js";
7
7
  /**
8
- * The DECLARED preset to record alongside the rendered screen, or undefined when the preset
8
+ * The declared preset to record alongside the rendered screen, or undefined when the preset
9
9
  * rendered faithfully.
10
10
  *
11
- * `desktopGeometry.screen.verified` compares the FLOORED number with itself, so on its own a
11
+ * `desktopGeometry.screen.verified` compares the floored number with itself, so on its own a
12
12
  * floored run is indistinguishable from a faithful one: a reader sees requested 500 / verified 500
13
13
  * and concludes a 500-wide screen was asked for. Recording the declared preset is what makes
14
14
  * "the preset width did not render" legible in the bundle.
@@ -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;
@@ -8,10 +8,10 @@ import { shellQuote } from "../shell.js";
8
8
  import { e2bShell } from "./shell.js";
9
9
  import { findVisibleBrowserWindowId, fillDesktopBrowserWindow, } from "./desktop-browser.js";
10
10
  /**
11
- * The DECLARED preset to record alongside the rendered screen, or undefined when the preset
11
+ * The declared preset to record alongside the rendered screen, or undefined when the preset
12
12
  * rendered faithfully.
13
13
  *
14
- * `desktopGeometry.screen.verified` compares the FLOORED number with itself, so on its own a
14
+ * `desktopGeometry.screen.verified` compares the floored number with itself, so on its own a
15
15
  * floored run is indistinguishable from a faithful one: a reader sees requested 500 / verified 500
16
16
  * and concludes a 500-wide screen was asked for. Recording the declared preset is what makes
17
17
  * "the preset width did not render" legible in the bundle.
@@ -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) {
@@ -52,7 +52,7 @@ export async function inspectDesktopScreenGeometry(args) {
52
52
  }
53
53
  return {
54
54
  verified: { width, height, source: "xdpyinfo" },
55
- error: `HUMANISH_CUA_LAB_DEVICE_GEOMETRY: participant ${args.participantId} requested a ${expectedWidth}x${expectedHeight} desktop but xdpyinfo reports ${width}x${height} in-sandbox; the participant's device geometry is unverified (fail-closed).`,
55
+ error: `HUMANISH_COMPUTER_USE_DEVICE_GEOMETRY: participant ${args.participantId} requested a ${expectedWidth}x${expectedHeight} desktop but xdpyinfo reports ${width}x${height} in the sandbox. The participant stops, because its screen does not match the device it declared.`,
56
56
  };
57
57
  }
58
58
  /**
@@ -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;
@@ -298,8 +298,8 @@ export async function captureDesktopBrowserGeometry(args) {
298
298
  : undefined;
299
299
  const browserWindow = physicalWindow ?? chromeGeometry?.browserWindow;
300
300
  const viewport = chromeGeometry?.viewport;
301
- // The fill check reads the X window when it was measured: under mobile emulation (#221) the
302
- // page's window.outerWidth reports the EMULATED screen (414), which is not a fill failure.
301
+ // The fill check reads the X window when it was measured: under mobile emulation the
302
+ // page's window.outerWidth reports the emulated screen (414), which is not a fill failure.
303
303
  const fillBounds = physicalWindow;
304
304
  if (!browserWindow) {
305
305
  warnings.push(`Browser outer bounds could not be measured for participant ${args.participantId}.`);
@@ -314,7 +314,7 @@ export async function captureDesktopBrowserGeometry(args) {
314
314
  }
315
315
  if (!viewport) {
316
316
  // Name the cause, not only the symptom: the same dead DevTools channel that loses the viewport
317
- // loses every url/text observation, and a reader of the bundle should learn that here (#514).
317
+ // loses every url/text observation, and a reader of the bundle should learn that here.
318
318
  const cause = cdpUnavailable === undefined ? "" : ` DevTools probe: ${redactText(cdpUnavailable)}.`;
319
319
  warnings.push(args.browserFamily === "firefox"
320
320
  ? `Browser CSS viewport measurement is unavailable in Firefox for participant ${args.participantId}; stream.viewport is omitted instead of reading a different browser's CDP endpoint.`
@@ -22,7 +22,7 @@ export interface DesktopMediaEvidence {
22
22
  }
23
23
  /**
24
24
  * Put the declared camera feed in the sandbox and return the Chromium flags that present it as a
25
- * capture device (#509). Fails CLOSED: a feed that cannot be produced (no ffmpeg on the image, an
25
+ * capture device. Fails closed: a feed that cannot be produced (no ffmpeg on the image, an
26
26
  * unreadable host file) is named before the browser launches, because a participant told it has
27
27
  * a camera and finds none reports the instrument's gap as the product's.
28
28
  */
@@ -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";
@@ -91,7 +91,7 @@ const SANDBOX_CAMERA_PATH = `${SANDBOX_MEDIA_DIR}/camera.y4m`;
91
91
  const SYNTHETIC_CAMERA_COMMAND = `mkdir -p ${SANDBOX_MEDIA_DIR} && ffmpeg -y -loglevel error -f lavfi -i testsrc=size=640x480:rate=10 -t 6 -pix_fmt yuv420p ${SANDBOX_CAMERA_PATH}`;
92
92
  /**
93
93
  * Put the declared camera feed in the sandbox and return the Chromium flags that present it as a
94
- * capture device (#509). Fails CLOSED: a feed that cannot be produced (no ffmpeg on the image, an
94
+ * capture device. Fails closed: a feed that cannot be produced (no ffmpeg on the image, an
95
95
  * unreadable host file) is named before the browser launches, because a participant told it has
96
96
  * a camera and finds none reports the instrument's gap as the product's.
97
97
  */
@@ -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,
@@ -4,12 +4,12 @@ export declare function desktopScreenshotCleanupFailures(desktop: object): numbe
4
4
  /**
5
5
  * @e2b/desktop 2.3.3 screenshot() awaits capture and files.read(path), then discards the
6
6
  * files.remove(path) promise. A removal that races sandbox teardown can therefore crash Node
7
- * AFTER valid bytes were returned. Installed-SDK conformance tests pin that behavior (#662).
7
+ * after valid bytes were returned. Installed-SDK conformance tests pin that behavior.
8
8
  *
9
- * Observe only removal of a file successfully read within THIS screenshot invocation. The
9
+ * Observe only removal of a file successfully read within this screenshot invocation. The
10
10
  * exact path comes from the SDK, not a guessed filename pattern. AsyncLocalStorage isolates
11
11
  * concurrent screenshots and unrelated file operations without changing SDK method receivers.
12
- * The ORIGINAL removal promise is returned: an SDK version (or caller) that awaits it still
12
+ * The original removal promise is returned: an SDK version (or caller) that awaits it still
13
13
  * receives the original rejection. No process-wide rejection handler or filesystem retry.
14
14
  */
15
15
  export declare function protectDesktopScreenshotCleanup<T extends E2BDesktopSandbox>(desktop: T): T;