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
@@ -4,7 +4,7 @@ import { CUA_SPEECH_LIMITS } from "../speech.js";
4
4
  import { dwellCompleted, missingFrame, stopWhenMatched } from "./ending.js";
5
5
  import { CuaAbortError, CuaStallError, raceCallBound } from "./race.js";
6
6
  import { notice } from "./trace.js";
7
- // One projection feeds BOTH the stop guard and the task tracker, so a criterion that would stop
7
+ // One projection feeds both the stop guard and the task tracker, so a criterion that would stop
8
8
  // the run and a criterion that completes a task can never see different evidence for one turn.
9
9
  function stopObservationOf(observation) {
10
10
  return {
@@ -72,8 +72,8 @@ export class DesktopObserver {
72
72
  }
73
73
  /**
74
74
  * Hand an observation the next turn may react to to the runtime hooks, and note whether it
75
- * carried app state. Runtime-only: the seat's live location.href goes back to the orchestrator
76
- * and is never persisted.
75
+ * carried app state. Runtime-only: the participant's live location.href goes back to the
76
+ * orchestrator and is never persisted.
77
77
  */
78
78
  handToHooks(observation) {
79
79
  const { onObservedUrl, onScreenshot } = this.session.settings;
@@ -118,7 +118,7 @@ export class DesktopObserver {
118
118
  throw error;
119
119
  }
120
120
  }
121
- // An executor without stallRecovery "fail_closed" gets one retry of a stalled observe (#480).
121
+ // An executor without stallRecovery "fail_closed" gets one retry of a stalled observe.
122
122
  // One that cannot safely replay a pending request opts out, so even a shorter outer bound stops
123
123
  // without retrying.
124
124
  async observeBounded(label) {
@@ -185,19 +185,19 @@ export class DesktopObserver {
185
185
  }));
186
186
  session.trace.bump("screenshots");
187
187
  }
188
- // Evaluated BEFORE the stopWhen check each turn so a final task whose criterion coincides with
188
+ // Evaluated before the stopWhen check each turn so a final task whose criterion coincides with
189
189
  // the stop condition still lands in the funnel of the very turn that ends the session.
190
190
  observeTasks(observation, turnNumber) {
191
191
  const { taskTracker } = this.session;
192
192
  if (taskTracker === undefined)
193
193
  return;
194
194
  for (const completion of taskTracker.observe(stopObservationOf(observation), turnNumber)) {
195
- // The id is researcher-authored config and the kinds are rule-type names; the matched VALUES
196
- // (a URL, page text) never appear here — the same discipline as the stopWhen notice.
195
+ // The id is researcher-authored config and the kinds are rule-type names; the matched values
196
+ // (a URL, page text) never appear here: the same discipline as the stopWhen notice.
197
197
  this.session.trace.record("notice", () => notice("matched", `task completed: ${this.session.redactNarration(completion.id)}`, this.session.redactNarration(`turn ${turnNumber}; matched rule ${completion.matchedRuleIndex} (${completion.matchedKinds.join("+")})`)));
198
198
  }
199
199
  }
200
- // The declared observation window (#510). The harness holds, looks, and takes nothing back to
200
+ // The declared observation window. The harness holds, looks, and takes nothing back to
201
201
  // the model: no action, no turn, no tokens. It runs once, cut to whatever session budget is
202
202
  // left, and says in the trace that the time was deliberate.
203
203
  async dwellIfDue(observation, turnNumber) {
@@ -238,7 +238,7 @@ export class DesktopObserver {
238
238
  }
239
239
  const heldMs = session.now() - dwellStartedAtMs;
240
240
  session.trace.record("notice", () => notice(
241
- // A window that ENDS the session is structured, harness-owned completion evidence, the
241
+ // A window that ends the session is structured, harness-owned completion evidence, the
242
242
  // same class as a matched stopWhen, and the verdict resolver reads it that way.
243
243
  dwell.then === "stop" ? "matched" : "ok", "dwell window complete", `${frames} frame(s) over ${heldMs}ms; no model turn was requested during the window`));
244
244
  return { next: dwell.then, heldMs };
@@ -8,7 +8,7 @@ export type TurnReply = {
8
8
  };
9
9
  /**
10
10
  * Ask the provider for one turn. A fail_closed provider gets one single dispatch; any other is
11
- * raced against turnTimeoutMs (#469) and retried once when it stalls.
11
+ * raced against turnTimeoutMs and retried once when it stalls.
12
12
  */
13
13
  export declare function requestTurn(session: LoopSession, request: CuaTurnRequest, turnNumber: number): Promise<TurnReply>;
14
14
  /**
@@ -12,7 +12,7 @@ import { reportedCounts, settledReceipt } from "./usage.js";
12
12
  const CUA_PROVIDER_CLEANUP_GRACE_MS = 5000;
13
13
  /**
14
14
  * Ask the provider for one turn. A fail_closed provider gets one single dispatch; any other is
15
- * raced against turnTimeoutMs (#469) and retried once when it stalls.
15
+ * raced against turnTimeoutMs and retried once when it stalls.
16
16
  */
17
17
  export async function requestTurn(session, request, turnNumber) {
18
18
  const { provider } = session;
@@ -7,7 +7,7 @@ import { UsageLedger } from "./usage.js";
7
7
  // (screenshot, wait, screenshot, wait), and a short idle limit ends that session as gave_up before
8
8
  // the mail can arrive.
9
9
  const DEFAULT_IDLE_STEPS = 24;
10
- // A no-progress turn also needs a repeated action (#383), so this needs less headroom than the
10
+ // A no-progress turn also needs a repeated action, so this needs less headroom than the
11
11
  // idle limit.
12
12
  const DEFAULT_NO_PROGRESS_STEPS = 20;
13
13
  const DEFAULT_TURN_TIMEOUT_MS = 180_000;
@@ -105,9 +105,9 @@ export class LoopSession {
105
105
  remaining() {
106
106
  return this.timeoutMs - (this.now() - this.startedAtMs);
107
107
  }
108
- // Model-authored narration: literal-scrub known provisioned values, THEN pattern-redact.
108
+ // Model-authored narration: literal-scrub known provisioned values, then pattern-redact.
109
109
  // A value the model transcribes (a DB password it read on screen) has no shape, so redactText
110
- // alone cannot catch it — the lab's scrubKnownValues, injected as scrubText, closes that.
110
+ // alone cannot catch it; the lab's scrubKnownValues, injected as scrubText, closes that.
111
111
  redactNarration(text) {
112
112
  return this.settings.redaction.redactText(this.scrubText(text));
113
113
  }
@@ -8,8 +8,8 @@ export declare class LostRequestRefused extends Error {
8
8
  }
9
9
  /**
10
10
  * The spend caps, checked before the next provider request so a model stuck retrying cannot keep
11
- * spending. The lane cap stops the session once the running estimate crosses maxUsd; a null
12
- * estimate cannot trip it, because preflight guaranteed a rate. The study budget (#299) is checked
11
+ * spending. The per-participant cap stops the session once the running estimate crosses maxUsd; a null
12
+ * estimate cannot trip it, because preflight guaranteed a rate. The study budget is checked
13
13
  * next.
14
14
  */
15
15
  export declare function spendStop(session: LoopSession): Stop | undefined;
@@ -1,6 +1,6 @@
1
1
  import * as stops from "./ending.js";
2
2
  import { notice } from "./trace.js";
3
- // The spend guards. The lane cap (maxUsd) and the study budget (overRunBudget) are priced from
3
+ // The spend guards. The per-participant cap (maxUsd) and the study budget (overRunBudget) are priced from
4
4
  // the usage each reply reports, plus a worst-case charge booked for each request lost without a
5
5
  // reply. A request whose cost is unknown and unbounded stops a capped session before the next one.
6
6
  /** Thrown through the provider when a lost attempt may not be sent again; carries the stop. */
@@ -13,8 +13,8 @@ export class LostRequestRefused extends Error {
13
13
  }
14
14
  /**
15
15
  * The spend caps, checked before the next provider request so a model stuck retrying cannot keep
16
- * spending. The lane cap stops the session once the running estimate crosses maxUsd; a null
17
- * estimate cannot trip it, because preflight guaranteed a rate. The study budget (#299) is checked
16
+ * spending. The per-participant cap stops the session once the running estimate crosses maxUsd; a null
17
+ * estimate cannot trip it, because preflight guaranteed a rate. The study budget is checked
18
18
  * next.
19
19
  */
20
20
  export function spendStop(session) {
@@ -29,7 +29,7 @@ export function spendStop(session) {
29
29
  if (overRunBudget) {
30
30
  const runStop = overRunBudget(session.usage.forCap());
31
31
  if (runStop !== null)
32
- return stops.studySpendLimit(runStop);
32
+ return stops.runSpendLimit(runStop);
33
33
  }
34
34
  return undefined;
35
35
  }
@@ -20,7 +20,7 @@ export class TraceRecorder {
20
20
  constructor(now) {
21
21
  this.now = now;
22
22
  }
23
- // The ONE recording choke point (#441): every trace item is stamped `at` from the
23
+ // The single recording choke point: every trace item is stamped `at` from the
24
24
  // loop's injected clock as it is recorded, so timed playback reads recorded facts
25
25
  // (deterministic in tests via the injected `now`). The id is allocated before the body is
26
26
  // built, so a body that fails to build (a redaction error) still consumes its id.
@@ -37,10 +37,10 @@ export class TraceRecorder {
37
37
  export function statusForCompletionReason(reason) {
38
38
  switch (reason) {
39
39
  case "goal_satisfied":
40
- case "turn_completed": // turn_completed is a Codex-lane reason; this loop emits goal_satisfied
40
+ case "turn_completed": // turn_completed is a Codex reason; this loop emits goal_satisfied
41
41
  return "passed";
42
42
  // A session that ran out of time or budget did not reach its goal, whatever it achieved along
43
- // the way. Calling that `passed` is how a truncated study came to be reported as a green one —
43
+ // the way. Calling that `passed` is how a truncated study came to be reported as a green one,
44
44
  // and why "raise the timeout" kept landing on the operator instead of on the tool. This switch
45
45
  // is exhaustive with no default, so a new completion reason forces a compile error here.
46
46
  case "budget_reached":
@@ -51,12 +51,12 @@ export function statusForCompletionReason(reason) {
51
51
  return "blocked";
52
52
  // A participant who stopped trying is the single most valuable thing a usability study
53
53
  // produces. Recording it as `failed` said the instrument broke, which is a different claim and
54
- // a false one — see docs/principles/three-roles.md.
54
+ // a false one; see docs/principles/three-roles.md.
55
55
  case "gave_up":
56
56
  return "abandoned";
57
57
  // Only the harness failing is a harness failure.
58
58
  case "actor_error":
59
- case "step_failed": // step_failed is the scripted-browser lane's reason; this loop never emits it
59
+ case "step_failed": // step_failed is the scripted-browser route's reason; this loop never emits it
60
60
  case "harness_error":
61
61
  return "failed";
62
62
  }
@@ -77,12 +77,12 @@ export function loopResult(session, stop, debrief) {
77
77
  ? "no screenshots captured"
78
78
  : session.redactScreenshots
79
79
  ? `${counts.screenshots} screenshot(s) redacted to blurred thumbnails via RedactionHooks`
80
- : `${counts.screenshots} full-fidelity screenshot(s) retained for local use — NOT redacted for publishing; set redactScreenshots to blur a share-as-is bundle`;
81
- // Self-describing artifact (invariant 6): when any observation carried structured app state,
80
+ : `${counts.screenshots} unblurred screenshot(s) kept for local use and not redacted for publishing; set redactScreenshots to blur screenshots in a bundle you plan to share`;
81
+ // Self-describing artifact: when any observation carried structured app state,
82
82
  // the trace says how the loop handled it: it fed progress and task checks and was not written to
83
83
  // the trace. The appState itself never appears in this bundle.
84
84
  const notes = session.observedAppState
85
- ? `${screenshotNote}. App state was observed each turn to drive progress detection (a state-driven executor) and was NOT written to the trace — it is a runtime-only progress input, never persisted as evidence in this slice.`
85
+ ? `${screenshotNote}. App state was read each turn to detect progress (an in-process executor) and was not written to the trace: it is used only while the run is live and is never stored as evidence.`
86
86
  : screenshotNote;
87
87
  const tokenUsage = usage.tokenUsage();
88
88
  const trace = {
@@ -90,6 +90,7 @@ export function loopResult(session, stop, debrief) {
90
90
  provider: provider.id,
91
91
  ...usage.liveMetadata(),
92
92
  ...(provider.version === undefined ? {} : { providerVersion: provider.version }),
93
+ ...(provider.conversation === undefined ? {} : { conversation: provider.conversation }),
93
94
  protocol: "cua-loop",
94
95
  lane: "computer-use",
95
96
  persona: settings.persona,
@@ -130,8 +131,8 @@ export function loopResult(session, stop, debrief) {
130
131
  ...(usage.interactionUsageIncomplete(session.capDeclared)
131
132
  ? { interactionUsageIncomplete: true }
132
133
  : {}),
133
- // The funnel is present exactly when a protocol was declared — including a session that ended
134
- // on turn 0, whose funnel honestly reads 0/N. No tasks declared means no funnel, not an empty one.
134
+ // The funnel is present exactly when a protocol was declared, including a session that ended
135
+ // on turn 0, whose funnel reads 0/N. No tasks declared means no funnel, not an empty one.
135
136
  ...(session.taskTracker === undefined ? {} : { taskFunnel: session.taskTracker.funnel() }),
136
137
  ...(tokenUsage === undefined ? {} : { tokenUsage }),
137
138
  capabilities: provider.capabilities,
@@ -1,5 +1,5 @@
1
1
  import type { HeardSpeech } from "../speech.js";
2
- import type { ActorCapabilities, ActorExecutionProfile, ActorPersonaRef, ActorSessionResult, ActorTokenUsage, ActorTrace, ActorTraceItem, ParticipantClosingReport, ParticipantDeclaredOutcome, ProviderRequestReceipt } from "../../contract.js";
2
+ import type { ActorCapabilities, ActorConversation, ActorExecutionProfile, ActorPersonaRef, ActorSessionResult, ActorTokenUsage, ActorTrace, ActorTraceItem, ParticipantClosingReport, ParticipantDeclaredOutcome, ProviderRequestReceipt } from "../../contract.js";
3
3
  import type { RedactionHooks } from "../../../evidence/redaction.js";
4
4
  import type { DwellWindow, StopWhen } from "../../stop-conditions.js";
5
5
  import type { LabTask } from "../../../lab/tasks.js";
@@ -93,7 +93,7 @@ export interface CuaObservation {
93
93
  url?: string;
94
94
  /**
95
95
  * The page's vertical scroll offset (window.scrollY), when the executor can read it. Scroll
96
- * position is state (#393): inside a scroll-pinned section the viewport stays visually fixed
96
+ * position is state: inside a scroll-pinned section the viewport stays visually fixed
97
97
  * while the participant advances, so the frame hash alone reads "no change". Runtime-only like
98
98
  * url and text: it feeds the progress key, bucketed, and is never persisted.
99
99
  */
@@ -182,7 +182,7 @@ export interface CuaTurn {
182
182
  done: boolean;
183
183
  /** Explicit provider interruption, independent of actions or participant intent. */
184
184
  interruption?: "output_limit" | "token_limit" | "incomplete" | "unexpected_status";
185
- /** The participant's own word for how it ended, when its reply format carries one (#570). */
185
+ /** The participant's own word for how it ended, when its reply format carries one. */
186
186
  outcome?: ParticipantDeclaredOutcome;
187
187
  /** Present only for an accepted structured closing account. */
188
188
  closingReport?: ParticipantClosingReport;
@@ -193,11 +193,13 @@ export interface CuaProvider {
193
193
  readonly requestPolicy?: "fail_closed";
194
194
  readonly executionProfile?: ActorExecutionProfile | undefined;
195
195
  readonly historyTurnsOmitted?: number;
196
+ /** How the conversation was carried between requests, for the trace. */
197
+ readonly conversation?: ActorConversation;
196
198
  readonly id: string;
197
199
  readonly version?: string | undefined;
198
200
  /**
199
201
  * The request settings this provider will actually send, for the trace to record. `version` says
200
- * WHICH model; this says how it was asked to run. Optional: a provider with no such settings
202
+ * which model; this says how it was asked to run. Optional: a provider with no such settings
201
203
  * records none, and absence stays absence rather than becoming a default nobody chose.
202
204
  */
203
205
  readonly modelSettings?: {
@@ -229,7 +231,7 @@ export interface CuaProvider {
229
231
  nextTurn(req: CuaTurnRequest, signal: AbortSignal, spend?: CuaSpendGate): Promise<CuaTurn>;
230
232
  /** Optional read-only closing report. Implementations must disable tools and make no retries. */
231
233
  debrief?: ((req: CuaTurnRequest, signal: AbortSignal) => Promise<CuaTurn>) | undefined;
232
- /** Release lane-owned model resources. Idempotent; reject if cleanup is unconfirmed. */
234
+ /** Release the participant's model resources. Idempotent; reject if cleanup is unconfirmed. */
233
235
  close?(): Promise<void>;
234
236
  }
235
237
  /** The desktop side of the loop. */
@@ -259,13 +261,13 @@ export interface CuaLoopOptions {
259
261
  /** Hard wall-clock runaway guard. The only count-free hard stop. */
260
262
  timeoutMs: number;
261
263
  /**
262
- * Per-attempt bound on the provider call (#469), so a hung request is told apart from a
264
+ * Per-attempt bound on the provider call, so a hung request is told apart from a
263
265
  * participant still thinking. A stalled turn is retried once with a notice; a second stall ends
264
- * the lane as harness_error.
266
+ * the participant as harness_error.
265
267
  */
266
268
  turnTimeoutMs?: number;
267
269
  /**
268
- * Per-call bound on observation work (#480): executor.observe() and the idle actions (`wait`,
270
+ * Per-call bound on observation work: executor.observe() and the idle actions (`wait`,
269
271
  * `screenshot`), whose only job is to look. A `wait` adds its own ms to the bound. A stalled
270
272
  * observe is retried once; a stalled idle action is skipped with a notice.
271
273
  */
@@ -288,19 +290,19 @@ export interface CuaLoopOptions {
288
290
  */
289
291
  acknowledgeSafetyChecks?: (checks: CuaSafetyCheck[]) => CuaSafetyCheck[] | null;
290
292
  /**
291
- * Redact (blur+downscale) persisted screenshots. Default FALSE — full-fidelity frames are
292
- * retained, because the common case is a developer watching a sim of their OWN app locally
293
+ * Redact (blur+downscale) persisted screenshots. Default `false`: full-fidelity frames are
294
+ * retained, because the common case is a developer watching a sim of their own app locally
293
295
  * (gitignored .humanish), where blur destroys the core deliverable. Set true for unowned
294
- * subjects or when the bundle is meant to be shared as-is. The frame sent to the PROVIDER is
296
+ * subjects or when the bundle is meant to be shared as-is. The frame sent to the provider is
295
297
  * always full-resolution regardless (the model must see the screen to act); this flag only
296
- * governs what is PERSISTED. Publish-safety belongs at the publish boundary (commit scan / redactScreenshots), not capture.
298
+ * governs what is persisted. Publish-safety belongs at the publish boundary (commit scan / redactScreenshots), not capture.
297
299
  */
298
300
  redactScreenshots?: boolean;
299
301
  /**
300
- * Extra literal scrub for KNOWN provisioned values (which have no detectable "shape", so
301
- * pattern redaction cannot catch them), composed BEFORE redactText on every model-authored
302
+ * Extra literal scrub for known provisioned values (which have no detectable "shape", so
303
+ * pattern redaction cannot catch them), composed before redactText on every model-authored
302
304
  * text item (reasoning, message, completion summary) and the loop error. The lab passes the
303
- * env-value scrubber here so a value the MODEL narrates can never land raw in the trace.
305
+ * env-value scrubber here so a value the model narrates can never land raw in the trace.
304
306
  * Default: identity (the loop is shape-only on its own).
305
307
  */
306
308
  scrubText?: (text: string) => string;
@@ -308,12 +310,12 @@ export interface CuaLoopOptions {
308
310
  writeScreenshot?: (name: string, bytes: Buffer) => Promise<string>;
309
311
  /**
310
312
  * Deterministic harness-owned success guards. Evaluated after the initial observation and after
311
- * every post-action observation, before another model turn is requested. This keeps a lane from
313
+ * every post-action observation, before another model turn is requested. This keeps a participant from
312
314
  * wandering after the product already reached an app-visible endpoint.
313
315
  */
314
316
  stopWhen?: StopWhen;
315
317
  /**
316
- * A declared observation window (#510): once its condition matches (or after the first
318
+ * A declared observation window: once its condition matches (or after the first
317
319
  * observation when it has none) the loop holds the page for the window, captures a frame on the
318
320
  * cadence, takes no action and requests no model turn, then hands control back or ends. Runs at
319
321
  * most once per session and never past the session budget.
@@ -322,11 +324,11 @@ export interface CuaLoopOptions {
322
324
  /** Injected pause for the dwell window's cadence; tests advance their clock through it. */
323
325
  sleep?: (ms: number) => Promise<void>;
324
326
  /**
325
- * The lab's declared protocol (#414): discrete tasks whose completion is corroborated by the
327
+ * The lab's declared protocol: discrete tasks whose completion is corroborated by the
326
328
  * same observations stopWhen reads, on the same cadence. The tracker never influences the loop's
327
- * control flow — a completed task list does not stop a session (that is stopWhen's job); it only
329
+ * control flow: a completed task list does not stop a session (that is stopWhen's job); it only
328
330
  * records the funnel that lands on the trace. The participant-facing halves of these tasks are
329
- * already IN `instructions` (composed upstream); the loop reads only the `success` criteria,
331
+ * already in `instructions` (composed upstream); the loop reads only the `success` criteria,
330
332
  * which never reach the prompt.
331
333
  */
332
334
  tasks?: readonly LabTask[];
@@ -338,18 +340,18 @@ export interface CuaLoopOptions {
338
340
  */
339
341
  maxUsd?: number;
340
342
  /**
341
- * Injected PURE per-turn cost estimator (keeps the loop free of the operator rate table and
343
+ * Injected pure per-turn cost estimator (keeps the loop free of the operator rate table and
342
344
  * makes the cap deterministic in tests). Given running (input, output) token totals, returns the
343
345
  * estimated USD, or null when unpriceable. Only consulted when `maxUsd` is set. A null estimate
344
- * mid-run cannot trip the cap — preflight already guaranteed a rate exists, so a null here is a
346
+ * mid-run cannot trip the cap; preflight already guaranteed a rate exists, so a null here is a
345
347
  * vanished-rate harness condition, not a silent uncapped pass.
346
348
  */
347
349
  estimateTurnCostUsd?: (usage: ActorTokenUsage) => number | null;
348
350
  /**
349
- * RUN-LEVEL spend guard (#299): called with this lane's running usage each turn, at the same
350
- * point the per-lane cap is checked. Returns a human-readable reason when the STUDY's shared
351
+ * Run-level spend guard: called with this participant's running usage each turn, at the same
352
+ * point the per-participant cap is checked. Returns a human-readable reason when the study's shared
351
353
  * budget is exhausted, else null. On a non-null return the loop stops with `budget_reached`
352
- * regardless of material progress — a study-level stop is a recruiting decision hitting its
354
+ * regardless of material progress: a study-level stop is a recruiting decision hitting its
353
355
  * limit, not this participant's runaway, so it never reads as `gave_up`.
354
356
  */
355
357
  overRunBudget?: (usage: ActorTokenUsage) => string | null;
@@ -368,6 +370,9 @@ export interface CuaLoopOptions {
368
370
  *
369
371
  * Built-in caller: the external-public shared-world handoff (src/routes/shared-world/handoff.ts)
370
372
  * latches the host participant's lobby URL and checks that each follower reached the same lobby.
373
+ *
374
+ * @deprecated Wrap the executor's `observe` and read `url` from each observation it returns. The
375
+ * next minor removes this option.
371
376
  */
372
377
  onObservedUrl?: (url: string | undefined) => void;
373
378
  /**
@@ -378,6 +383,9 @@ export interface CuaLoopOptions {
378
383
  *
379
384
  * Built-in caller: the external-public handoff scans the host's narration for the lobby code,
380
385
  * because the E2B desktop's CDP URL read behind onObservedUrl is unreliable.
386
+ *
387
+ * @deprecated Wrap the provider's `nextTurn` and read `reasoning` and `message` from each turn it
388
+ * returns. The next minor removes this option.
381
389
  */
382
390
  onMessage?: (text: string) => void;
383
391
  /**
@@ -387,10 +395,13 @@ export interface CuaLoopOptions {
387
395
  *
388
396
  * Built-in caller: the external-public handoff reads the lobby code off each participant's own
389
397
  * frame until that participant has one: the host's latch, or a follower's convergence observation.
398
+ *
399
+ * @deprecated Wrap the executor's `observe` and read `screenshot` from each observation it
400
+ * returns. The next minor removes this option.
390
401
  */
391
402
  onScreenshot?: (frame: Buffer) => void;
392
403
  /**
393
- * Trace snapshot for a watcher (#441): the redacted items recorded so far, with the running
404
+ * Trace snapshot for a watcher: the redacted items recorded so far, with the running
394
405
  * usage so a run can be priced in flight. Called after each checkpoint's screenshot (the initial
395
406
  * observation and every acted turn, so a flush never shows an action without the frame before
396
407
  * it), after each dwell frame, and after a closing request. The array is a fresh copy; its items
@@ -80,7 +80,7 @@ export class UsageLedger {
80
80
  cachedInput = 0;
81
81
  cacheWriteInput = 0;
82
82
  output = 0;
83
- // Per model-inference usage, in order (#334): the recorded fact long-context pricing tiers
83
+ // Per model-inference usage, in order: the recorded fact long-context pricing tiers
84
84
  // need. A continuing native tool interaction may contain several inference requests.
85
85
  turns = [];
86
86
  /** An interaction turn arrived without complete usage, or its receipt said usage is incomplete. */
@@ -245,7 +245,7 @@ export class UsageLedger {
245
245
  input: this.input,
246
246
  output: this.output,
247
247
  // Recorded only when the provider actually reported it, so a reader can tell "no cache
248
- // hits" from "this provider does not say" (#391); same for cache writes (#334).
248
+ // hits" from "this provider does not say"; same for cache writes.
249
249
  ...(this.cachedInput > 0 ? { cachedInput: this.cachedInput } : {}),
250
250
  ...(this.cacheWriteInput > 0 ? { cacheWriteInput: this.cacheWriteInput } : {}),
251
251
  ...(this.turns.length > 0 ? { turns: this.turns.map((turn) => ({ ...turn })) } : {}),
@@ -187,11 +187,11 @@ function stopBeforeActing(session, turn, turnNumber) {
187
187
  return stops.accountBilledCaps;
188
188
  if (turn.interruption !== undefined) {
189
189
  // Preserve usage and partial narration of an interrupted response. Its usage still counts
190
- // toward the study budget; when that exhausts it, sibling lanes stop, so this trace says why.
191
- const studyStop = overRunBudget?.(session.usage.forCap());
190
+ // toward the study budget; when that exhausts it, sibling participants stop, so this trace says why.
191
+ const runBudgetStop = overRunBudget?.(session.usage.forCap());
192
192
  recordNarration(session, turn, turnNumber, "interrupted");
193
- if (studyStop != null) {
194
- session.trace.record("notice", () => notice("warn", "study budget reached during an interrupted response", studyStop));
193
+ if (runBudgetStop != null) {
194
+ session.trace.record("notice", () => notice("warn", "study budget reached during an interrupted response", runBudgetStop));
195
195
  }
196
196
  return stops.providerInterrupted(turn.interruption);
197
197
  }
@@ -0,0 +1,37 @@
1
+ /** The estimated input a carried conversation may reach before its oldest turns are summarized. */
2
+ export declare const CONTEXT_TOKEN_BUDGET = 64000;
3
+ /** What the next request would carry, for the trace. */
4
+ export interface CarriedContextSize {
5
+ readonly exchanges: number;
6
+ readonly screenshots: number;
7
+ readonly notedTurns: number;
8
+ readonly estimatedTokens: number;
9
+ }
10
+ export declare class CarriedConversation {
11
+ private readonly budget;
12
+ private opening;
13
+ private readonly exchanges;
14
+ /** The latest accepted reply's output items, which the next request answers. */
15
+ private pending;
16
+ private readonly notes;
17
+ private notesDropped;
18
+ private collapsedTurns;
19
+ constructor(budget?: number);
20
+ /**
21
+ * Record an accepted reply. `sent` is what that request added after the carried items: the
22
+ * opening message on the first request, then the call outputs and any hint.
23
+ */
24
+ accept(turn: number, sent: readonly unknown[], output: readonly unknown[]): void;
25
+ /** The items to send ahead of a request's own new items. */
26
+ carried(): unknown[];
27
+ /** The carried context's size, for the trace. */
28
+ size(): CarriedContextSize;
29
+ private trim;
30
+ private noteItem;
31
+ }
32
+ /**
33
+ * A rough input-token estimate: images by their size in 32-pixel patches, everything else at four
34
+ * characters a token. It decides when to trim, not what is billed; the trace records the billed
35
+ * input per request beside it.
36
+ */
37
+ export declare function estimateTokens(items: readonly unknown[]): number;