humanish 0.106.1 → 0.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (668) hide show
  1. package/ARCHITECTURE.md +38 -32
  2. package/CHANGELOG.md +28 -0
  3. package/CONTEXT.md +51 -41
  4. package/README.md +152 -174
  5. package/SECURITY.md +16 -26
  6. package/TELEMETRY.md +8 -6
  7. package/dist/actors/affordance.d.ts +4 -4
  8. package/dist/actors/affordance.js +12 -12
  9. package/dist/actors/agent-session.d.ts +2 -2
  10. package/dist/actors/agent-session.js +7 -7
  11. package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
  12. package/dist/actors/codex/app-server-actor-trace.js +1 -1
  13. package/dist/actors/codex/app-server-client.js +2 -1
  14. package/dist/actors/codex/app-server-trace.d.ts +0 -1
  15. package/dist/actors/codex/app-server-trace.js +1 -3
  16. package/dist/actors/codex/app-server-ui.js +1 -1
  17. package/dist/actors/codex/app-server.js +2 -1
  18. package/dist/actors/codex/codex-admission.d.ts +91 -0
  19. package/dist/actors/codex/codex-admission.js +150 -0
  20. package/dist/actors/codex/protocol-compat.d.ts +27 -0
  21. package/dist/actors/codex/protocol-compat.js +357 -0
  22. package/dist/actors/codex/protocol-contract.d.ts +61 -0
  23. package/dist/actors/codex/protocol-contract.js +471 -0
  24. package/dist/actors/codex/restricted-executable.d.ts +28 -4
  25. package/dist/actors/codex/restricted-executable.js +104 -29
  26. package/dist/actors/codex/restricted-launch.d.ts +9 -2
  27. package/dist/actors/codex/restricted-launch.js +43 -4
  28. package/dist/actors/codex/restricted-notifications.d.ts +101 -0
  29. package/dist/actors/codex/restricted-notifications.js +277 -0
  30. package/dist/actors/codex/restricted-participant.d.ts +30 -0
  31. package/dist/actors/codex/restricted-participant.js +66 -6
  32. package/dist/actors/codex/restricted-policy.d.ts +11 -3
  33. package/dist/actors/codex/restricted-policy.js +2 -2
  34. package/dist/actors/codex/restricted-session.d.ts +16 -3
  35. package/dist/actors/codex/restricted-session.js +60 -22
  36. package/dist/actors/codex/restricted-transport.d.ts +29 -0
  37. package/dist/actors/codex/restricted-transport.js +139 -27
  38. package/dist/actors/codex/restricted-turn.d.ts +19 -4
  39. package/dist/actors/codex/restricted-turn.js +43 -30
  40. package/dist/actors/computer-use/actor.d.ts +17 -17
  41. package/dist/actors/computer-use/actor.js +6 -6
  42. package/dist/actors/computer-use/admission-limit.d.ts +1 -1
  43. package/dist/actors/computer-use/admission-limit.js +1 -1
  44. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  45. package/dist/actors/computer-use/loop/actions.js +10 -10
  46. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  47. package/dist/actors/computer-use/loop/backstop.js +15 -13
  48. package/dist/actors/computer-use/loop/ending.d.ts +7 -7
  49. package/dist/actors/computer-use/loop/ending.js +9 -9
  50. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  51. package/dist/actors/computer-use/loop/observation.js +9 -9
  52. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  53. package/dist/actors/computer-use/loop/provider-call.js +1 -1
  54. package/dist/actors/computer-use/loop/session.js +3 -3
  55. package/dist/actors/computer-use/loop/spend.d.ts +2 -2
  56. package/dist/actors/computer-use/loop/spend.js +4 -4
  57. package/dist/actors/computer-use/loop/trace.js +11 -10
  58. package/dist/actors/computer-use/loop/types.d.ts +37 -26
  59. package/dist/actors/computer-use/loop/usage.js +2 -2
  60. package/dist/actors/computer-use/loop.js +4 -4
  61. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  62. package/dist/actors/computer-use/openai-context.js +214 -0
  63. package/dist/actors/computer-use/openai-provider.d.ts +12 -9
  64. package/dist/actors/computer-use/openai-provider.js +47 -36
  65. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  66. package/dist/actors/computer-use/openai-requests.js +82 -15
  67. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  68. package/dist/actors/computer-use/openai-wire.js +36 -34
  69. package/dist/actors/contract.d.ts +86 -49
  70. package/dist/actors/contract.js +29 -23
  71. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  72. package/dist/actors/local-agent/claude-session.js +10 -9
  73. package/dist/actors/local-agent/cli.d.ts +8 -6
  74. package/dist/actors/local-agent/cli.js +24 -28
  75. package/dist/actors/local-agent/readiness.d.ts +2 -2
  76. package/dist/actors/local-agent/readiness.js +4 -4
  77. package/dist/actors/reasoning-effort.js +6 -6
  78. package/dist/actors/registry.d.ts +10 -10
  79. package/dist/actors/registry.js +18 -17
  80. package/dist/actors/scripted-browser/actor.d.ts +8 -8
  81. package/dist/actors/scripted-browser/actor.js +16 -16
  82. package/dist/actors/scripted-browser/browser-command.js +1 -1
  83. package/dist/actors/scripted-browser/journey.js +15 -4
  84. package/dist/actors/scripted-browser/steps.js +19 -1
  85. package/dist/actors/scripted-browser/types.d.ts +12 -2
  86. package/dist/actors/stop-conditions.d.ts +1 -1
  87. package/dist/actors/stop-conditions.js +1 -3
  88. package/dist/analysis/automatic-completion.d.ts +13 -8
  89. package/dist/analysis/automatic-completion.js +14 -8
  90. package/dist/analysis/automatic-config.d.ts +1 -1
  91. package/dist/analysis/automatic-config.js +2 -2
  92. package/dist/analysis/automatic.d.ts +10 -4
  93. package/dist/analysis/automatic.js +17 -13
  94. package/dist/analysis/codex-config.d.ts +6 -2
  95. package/dist/analysis/codex-config.js +22 -14
  96. package/dist/analysis/diagnostics.d.ts +23 -0
  97. package/dist/analysis/diagnostics.js +112 -0
  98. package/dist/analysis/evidence-sources.js +2 -2
  99. package/dist/analysis/evidence.js +6 -6
  100. package/dist/analysis/execute.d.ts +7 -1
  101. package/dist/analysis/execute.js +39 -12
  102. package/dist/analysis/job.d.ts +8 -5
  103. package/dist/analysis/job.js +15 -14
  104. package/dist/analysis/load.d.ts +1 -1
  105. package/dist/analysis/load.js +5 -5
  106. package/dist/analysis/provider.d.ts +9 -1
  107. package/dist/analysis/restricted-codex.d.ts +2 -0
  108. package/dist/analysis/restricted-codex.js +10 -1
  109. package/dist/analysis/service.d.ts +2 -0
  110. package/dist/analysis/service.js +35 -16
  111. package/dist/analysis/sharing.d.ts +2 -2
  112. package/dist/analysis/sharing.js +5 -5
  113. package/dist/analysis/store-executions.d.ts +5 -5
  114. package/dist/analysis/store-executions.js +12 -12
  115. package/dist/analysis/store.d.ts +4 -4
  116. package/dist/analysis/store.js +13 -13
  117. package/dist/cli/commands/analysis-signals.d.ts +2 -1
  118. package/dist/cli/commands/analysis-signals.js +4 -1
  119. package/dist/cli/commands/analyze.js +23 -18
  120. package/dist/cli/commands/codex.js +9 -9
  121. package/dist/cli/commands/comms.js +62 -34
  122. package/dist/cli/commands/feedback.js +20 -21
  123. package/dist/cli/commands/lab-format.d.ts +5 -4
  124. package/dist/cli/commands/lab-format.js +35 -23
  125. package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
  126. package/dist/cli/commands/lab-route-computer-use.js +32 -21
  127. package/dist/cli/commands/lab-route-preview.d.ts +1 -3
  128. package/dist/cli/commands/lab-route-preview.js +7 -7
  129. package/dist/cli/commands/lab-route-run.d.ts +6 -4
  130. package/dist/cli/commands/lab-route-run.js +6 -2
  131. package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
  132. package/dist/cli/commands/lab-route-scripted.js +0 -1
  133. package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
  134. package/dist/cli/commands/lab-route-shared-world.js +3 -4
  135. package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
  136. package/dist/cli/commands/lab-route-terminal.js +0 -1
  137. package/dist/cli/commands/lab-run.js +84 -54
  138. package/dist/cli/commands/lab-scorer.d.ts +2 -4
  139. package/dist/cli/commands/lab-scorer.js +1 -1
  140. package/dist/cli/commands/migrate.d.ts +4 -0
  141. package/dist/cli/commands/migrate.js +65 -0
  142. package/dist/cli/commands/observe.js +168 -107
  143. package/dist/cli/commands/run-command.d.ts +10 -0
  144. package/dist/cli/commands/run-command.js +85 -0
  145. package/dist/cli/commands/run-signals.d.ts +30 -0
  146. package/dist/cli/commands/run-signals.js +146 -0
  147. package/dist/cli/commands/runs.js +137 -136
  148. package/dist/cli/commands/setup.d.ts +2 -2
  149. package/dist/cli/commands/setup.js +26 -21
  150. package/dist/cli/commands/study.d.ts +3 -0
  151. package/dist/cli/commands/study.js +182 -0
  152. package/dist/cli/commands/tui.d.ts +4 -4
  153. package/dist/cli/commands/tui.js +21 -21
  154. package/dist/cli/commands/watch.js +64 -77
  155. package/dist/cli/deprecations.d.ts +18 -0
  156. package/dist/cli/deprecations.js +48 -0
  157. package/dist/cli/doctor.d.ts +18 -5
  158. package/dist/cli/doctor.js +111 -48
  159. package/dist/cli/first-run-path.d.ts +12 -10
  160. package/dist/cli/first-run-path.js +30 -28
  161. package/dist/cli/io.d.ts +46 -10
  162. package/dist/cli/io.js +109 -30
  163. package/dist/cli/observer-follow.d.ts +2 -2
  164. package/dist/cli/observer-follow.js +5 -6
  165. package/dist/cli/orientation.d.ts +6 -3
  166. package/dist/cli/orientation.js +43 -39
  167. package/dist/cli/product-sentence.d.ts +6 -0
  168. package/dist/cli/product-sentence.js +6 -0
  169. package/dist/cli/program.d.ts +6 -1
  170. package/dist/cli/program.js +112 -43
  171. package/dist/cli/telemetry.d.ts +17 -17
  172. package/dist/cli/telemetry.js +49 -41
  173. package/dist/cli.js +1 -1
  174. package/dist/comms/capture-surface.d.ts +14 -13
  175. package/dist/comms/capture-surface.js +23 -22
  176. package/dist/comms/catch-host.d.ts +8 -8
  177. package/dist/comms/catch-host.js +14 -14
  178. package/dist/comms/connections.js +4 -4
  179. package/dist/comms/email-catch.d.ts +3 -3
  180. package/dist/comms/email-catch.js +8 -8
  181. package/dist/comms/external-evidence.d.ts +27 -0
  182. package/dist/comms/external-evidence.js +93 -0
  183. package/dist/comms/extract.js +2 -2
  184. package/dist/comms/fake-inbox.d.ts +2 -2
  185. package/dist/comms/fake-inbox.js +2 -2
  186. package/dist/comms/lease-store.js +7 -7
  187. package/dist/comms/receiving-render.d.ts +1 -1
  188. package/dist/comms/receiving-render.js +2 -2
  189. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  190. package/dist/comms/sandbox-catch-script.js +6 -6
  191. package/dist/comms/sandbox-catch.d.ts +36 -37
  192. package/dist/comms/sandbox-catch.js +34 -35
  193. package/dist/comms/setup.js +42 -8
  194. package/dist/comms/thread-evidence.d.ts +1 -1
  195. package/dist/comms/thread-evidence.js +6 -6
  196. package/dist/comms/types.d.ts +6 -6
  197. package/dist/comms/types.js +4 -4
  198. package/dist/evidence/browser-hygiene.d.ts +1 -1
  199. package/dist/evidence/browser-hygiene.js +1 -1
  200. package/dist/evidence/frame-signature.d.ts +1 -1
  201. package/dist/evidence/frame-signature.js +4 -4
  202. package/dist/evidence/redaction.d.ts +3 -3
  203. package/dist/evidence/redaction.js +5 -5
  204. package/dist/evidence/secret-scrub.d.ts +9 -0
  205. package/dist/evidence/secret-scrub.js +96 -0
  206. package/dist/feedback/draft.js +41 -85
  207. package/dist/feedback/export-bundle.js +5 -5
  208. package/dist/feedback/export.d.ts +5 -1
  209. package/dist/feedback/export.js +16 -17
  210. package/dist/feedback/feedback.d.ts +3 -3
  211. package/dist/feedback/feedback.js +21 -3
  212. package/dist/guest/chromium-text.js +2 -2
  213. package/dist/guest/desktop-native.d.ts +1 -1
  214. package/dist/guest/runtime.js +1 -1
  215. package/dist/index.d.ts +14 -15
  216. package/dist/index.js +10 -11
  217. package/dist/keys/key-resolution.d.ts +7 -5
  218. package/dist/keys/key-resolution.js +40 -38
  219. package/dist/lab/adapter-extension.d.ts +35 -13
  220. package/dist/lab/adapter-extension.js +50 -134
  221. package/dist/lab/adapter-scorer-loader.d.ts +32 -12
  222. package/dist/lab/adapter-scorer-loader.js +56 -32
  223. package/dist/lab/composition-rules.js +58 -58
  224. package/dist/lab/config.js +85 -43
  225. package/dist/lab/deprecated-fields.d.ts +10 -0
  226. package/dist/lab/deprecated-fields.js +24 -0
  227. package/dist/lab/device-presets.d.ts +10 -10
  228. package/dist/lab/device-presets.js +11 -11
  229. package/dist/lab/discover.d.ts +13 -9
  230. package/dist/lab/discover.js +118 -60
  231. package/dist/lab/doctor.d.ts +53 -11
  232. package/dist/lab/doctor.js +193 -47
  233. package/dist/lab/init-plan.js +1 -3
  234. package/dist/lab/init-templates.js +147 -147
  235. package/dist/lab/init.d.ts +1 -1
  236. package/dist/lab/init.js +41 -9
  237. package/dist/lab/keys.d.ts +2 -0
  238. package/dist/lab/keys.js +43 -9
  239. package/dist/lab/lab-deps.d.ts +80 -0
  240. package/dist/lab/lab-deps.js +4 -0
  241. package/dist/lab/parse/actors.js +17 -16
  242. package/dist/lab/parse/comms.js +8 -7
  243. package/dist/lab/parse/execution.js +15 -14
  244. package/dist/lab/parse/study-v3.d.ts +23 -0
  245. package/dist/lab/parse/study-v3.js +259 -0
  246. package/dist/lab/parse/subject-state.d.ts +7 -7
  247. package/dist/lab/parse/subject-state.js +18 -17
  248. package/dist/lab/parse/subject.js +30 -29
  249. package/dist/lab/parse/values.d.ts +1 -2
  250. package/dist/lab/parse/values.js +3 -6
  251. package/dist/lab/persona-resolve.d.ts +7 -7
  252. package/dist/lab/persona-resolve.js +8 -8
  253. package/dist/lab/persona.js +1 -3
  254. package/dist/lab/plan-base.d.ts +0 -2
  255. package/dist/lab/plan-base.js +6 -4
  256. package/dist/lab/plan-participants.d.ts +7 -7
  257. package/dist/lab/plan-participants.js +2 -2
  258. package/dist/lab/plan-types.d.ts +26 -8
  259. package/dist/lab/plan.d.ts +4 -18
  260. package/dist/lab/plan.js +24 -79
  261. package/dist/lab/preflight-probes.js +11 -11
  262. package/dist/lab/preflight-result.d.ts +2 -1
  263. package/dist/lab/preflight-result.js +5 -6
  264. package/dist/lab/preflight.d.ts +7 -8
  265. package/dist/lab/preflight.js +6 -6
  266. package/dist/lab/requirements.d.ts +20 -0
  267. package/dist/lab/requirements.js +54 -0
  268. package/dist/lab/route-inputs.d.ts +23 -12
  269. package/dist/lab/route-inputs.js +48 -51
  270. package/dist/lab/routing.d.ts +42 -41
  271. package/dist/lab/routing.js +66 -68
  272. package/dist/lab/run-lab-events.d.ts +3 -11
  273. package/dist/lab/run-lab-events.js +2 -16
  274. package/dist/lab/run-lab-homes.d.ts +76 -0
  275. package/dist/lab/run-lab-homes.js +7 -0
  276. package/dist/lab/run-lab-options.d.ts +12 -66
  277. package/dist/lab/run-lab-options.js +58 -285
  278. package/dist/lab/summary.d.ts +15 -9
  279. package/dist/lab/summary.js +24 -17
  280. package/dist/lab/tasks.d.ts +15 -15
  281. package/dist/lab/tasks.js +14 -14
  282. package/dist/lab/types.d.ts +201 -195
  283. package/dist/lab/types.js +2 -0
  284. package/dist/lab/validation.d.ts +21 -21
  285. package/dist/lab/validation.js +61 -59
  286. package/dist/lab/warnings.d.ts +10 -0
  287. package/dist/lab/warnings.js +70 -41
  288. package/dist/library-aliases.d.ts +56 -0
  289. package/dist/library-aliases.js +22 -0
  290. package/dist/observer/artifact.d.ts +2 -2
  291. package/dist/observer/artifact.js +9 -9
  292. package/dist/observer/data.d.ts +6 -6
  293. package/dist/observer/data.js +7 -6
  294. package/dist/observer/exposure.d.ts +1 -1
  295. package/dist/observer/exposure.js +11 -11
  296. package/dist/observer/http.js +1 -1
  297. package/dist/observer/library.d.ts +1 -1
  298. package/dist/observer/library.js +4 -2
  299. package/dist/observer/listen.js +5 -4
  300. package/dist/observer/render.d.ts +1 -1
  301. package/dist/observer/render.js +12 -7
  302. package/dist/observer/run-routes.d.ts +4 -4
  303. package/dist/observer/run-routes.js +6 -6
  304. package/dist/observer/serve.d.ts +17 -0
  305. package/dist/observer/serve.js +41 -6
  306. package/dist/observer/tunnel.js +1 -1
  307. package/dist/observer-app.html +4 -4
  308. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  309. package/dist/routes/computer-use/bundle-parts.js +24 -17
  310. package/dist/routes/computer-use/bundle.d.ts +4 -11
  311. package/dist/routes/computer-use/bundle.js +12 -18
  312. package/dist/routes/computer-use/diagnostics.d.ts +1 -1
  313. package/dist/routes/computer-use/diagnostics.js +1 -1
  314. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
  315. package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
  316. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
  317. package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
  318. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
  319. package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
  320. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
  321. package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
  322. package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
  323. package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
  324. package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
  325. package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
  326. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
  327. package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
  328. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  329. package/dist/routes/computer-use/external-comms.js +19 -43
  330. package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
  331. package/dist/routes/computer-use/fanout-bundle.js +38 -42
  332. package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
  333. package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
  334. package/dist/routes/computer-use/in-process-desktop.js +3 -9
  335. package/dist/routes/computer-use/live-flush.d.ts +7 -5
  336. package/dist/routes/computer-use/live-flush.js +20 -28
  337. package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
  338. package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
  339. package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
  340. package/dist/routes/computer-use/local-tree-pack.js +4 -5
  341. package/dist/routes/computer-use/local-vm.d.ts +11 -8
  342. package/dist/routes/computer-use/local-vm.js +40 -67
  343. package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
  344. package/dist/routes/computer-use/participant-desktop.js +5 -25
  345. package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
  346. package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
  347. package/dist/routes/computer-use/participant-facts.d.ts +7 -1
  348. package/dist/routes/computer-use/participant-facts.js +12 -1
  349. package/dist/routes/computer-use/participant-model.d.ts +25 -11
  350. package/dist/routes/computer-use/participant-model.js +76 -34
  351. package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
  352. package/dist/routes/computer-use/participant-prompt.js +8 -8
  353. package/dist/routes/computer-use/participant-runs.d.ts +11 -11
  354. package/dist/routes/computer-use/participant-runs.js +18 -18
  355. package/dist/routes/computer-use/plan.d.ts +21 -29
  356. package/dist/routes/computer-use/plan.js +70 -78
  357. package/dist/routes/computer-use/preflight.d.ts +3 -5
  358. package/dist/routes/computer-use/preflight.js +40 -36
  359. package/dist/routes/computer-use/rerun-selection.js +11 -7
  360. package/dist/routes/computer-use/result.d.ts +1 -1
  361. package/dist/routes/computer-use/result.js +48 -38
  362. package/dist/routes/computer-use/route.d.ts +5 -5
  363. package/dist/routes/computer-use/route.js +36 -33
  364. package/dist/routes/computer-use/self-report.d.ts +8 -8
  365. package/dist/routes/computer-use/self-report.js +33 -33
  366. package/dist/routes/computer-use/setup.d.ts +9 -15
  367. package/dist/routes/computer-use/setup.js +106 -83
  368. package/dist/routes/computer-use/single-bundle.d.ts +13 -16
  369. package/dist/routes/computer-use/single-bundle.js +46 -53
  370. package/dist/routes/computer-use/subject-projection.d.ts +6 -8
  371. package/dist/routes/computer-use/subject-projection.js +24 -23
  372. package/dist/routes/computer-use/types.d.ts +195 -238
  373. package/dist/routes/computer-use/types.js +21 -13
  374. package/dist/routes/preview.d.ts +8 -2
  375. package/dist/routes/preview.js +8 -5
  376. package/dist/routes/scripted/bundle.d.ts +5 -8
  377. package/dist/routes/scripted/bundle.js +23 -27
  378. package/dist/routes/scripted/plan.d.ts +6 -8
  379. package/dist/routes/scripted/plan.js +15 -13
  380. package/dist/routes/scripted/result.d.ts +4 -1
  381. package/dist/routes/scripted/result.js +15 -11
  382. package/dist/routes/scripted/route.js +15 -17
  383. package/dist/routes/scripted/scenario.d.ts +1 -1
  384. package/dist/routes/scripted/scenario.js +3 -3
  385. package/dist/routes/scripted/setup.d.ts +3 -2
  386. package/dist/routes/scripted/setup.js +27 -26
  387. package/dist/routes/scripted/subject.d.ts +8 -3
  388. package/dist/routes/scripted/subject.js +10 -6
  389. package/dist/routes/scripted/surface-records.js +4 -4
  390. package/dist/routes/scripted/surface-sessions.d.ts +2 -2
  391. package/dist/routes/scripted/surface-sessions.js +4 -4
  392. package/dist/routes/scripted/types.d.ts +21 -40
  393. package/dist/routes/scripted/types.js +2 -3
  394. package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
  395. package/dist/routes/shared-world/bundle.d.ts +7 -7
  396. package/dist/routes/shared-world/bundle.js +60 -62
  397. package/dist/routes/shared-world/checkpoints.d.ts +5 -5
  398. package/dist/routes/shared-world/checkpoints.js +5 -5
  399. package/dist/routes/shared-world/comms.d.ts +8 -7
  400. package/dist/routes/shared-world/comms.js +38 -51
  401. package/dist/routes/shared-world/external-public.d.ts +6 -5
  402. package/dist/routes/shared-world/external-public.js +28 -25
  403. package/dist/routes/shared-world/handoff.d.ts +10 -9
  404. package/dist/routes/shared-world/handoff.js +89 -81
  405. package/dist/routes/shared-world/lobby-code.d.ts +7 -7
  406. package/dist/routes/shared-world/lobby-code.js +22 -22
  407. package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
  408. package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
  409. package/dist/routes/shared-world/plan.d.ts +2 -6
  410. package/dist/routes/shared-world/plan.js +8 -9
  411. package/dist/routes/shared-world/provenance.d.ts +4 -4
  412. package/dist/routes/shared-world/provenance.js +4 -4
  413. package/dist/routes/shared-world/provisioned.d.ts +3 -2
  414. package/dist/routes/shared-world/provisioned.js +55 -48
  415. package/dist/routes/shared-world/result.js +47 -36
  416. package/dist/routes/shared-world/route.js +54 -57
  417. package/dist/routes/shared-world/setup.d.ts +6 -5
  418. package/dist/routes/shared-world/setup.js +16 -18
  419. package/dist/routes/shared-world/types.d.ts +70 -141
  420. package/dist/routes/shared-world/types.js +5 -5
  421. package/dist/routes/terminal/adapter.d.ts +10 -10
  422. package/dist/routes/terminal/adapter.js +32 -129
  423. package/dist/routes/terminal/bundle.d.ts +10 -15
  424. package/dist/routes/terminal/bundle.js +43 -52
  425. package/dist/routes/terminal/credentials.d.ts +4 -4
  426. package/dist/routes/terminal/credentials.js +20 -20
  427. package/dist/routes/terminal/dry-run.d.ts +1 -1
  428. package/dist/routes/terminal/dry-run.js +13 -15
  429. package/dist/routes/terminal/encoding.d.ts +1 -1
  430. package/dist/routes/terminal/encoding.js +4 -4
  431. package/dist/routes/terminal/ledger.d.ts +8 -8
  432. package/dist/routes/terminal/ledger.js +22 -22
  433. package/dist/routes/terminal/live-finish.d.ts +1 -2
  434. package/dist/routes/terminal/live-finish.js +24 -23
  435. package/dist/routes/terminal/live-sandbox.d.ts +3 -2
  436. package/dist/routes/terminal/live-sandbox.js +31 -32
  437. package/dist/routes/terminal/participant-text.d.ts +23 -0
  438. package/dist/routes/terminal/participant-text.js +165 -0
  439. package/dist/routes/terminal/persona.js +1 -1
  440. package/dist/routes/terminal/plan.d.ts +2 -6
  441. package/dist/routes/terminal/plan.js +23 -19
  442. package/dist/routes/terminal/recorder.d.ts +6 -1
  443. package/dist/routes/terminal/recorder.js +12 -4
  444. package/dist/routes/terminal/result.js +12 -12
  445. package/dist/routes/terminal/route.js +30 -31
  446. package/dist/routes/terminal/runtime.d.ts +3 -2
  447. package/dist/routes/terminal/runtime.js +3 -3
  448. package/dist/routes/terminal/sandbox.d.ts +4 -4
  449. package/dist/routes/terminal/sandbox.js +10 -10
  450. package/dist/routes/terminal/session.js +22 -19
  451. package/dist/routes/terminal/token-usage.d.ts +1 -1
  452. package/dist/routes/terminal/token-usage.js +10 -11
  453. package/dist/routes/terminal/trace.d.ts +7 -10
  454. package/dist/routes/terminal/trace.js +11 -66
  455. package/dist/routes/terminal/types.d.ts +104 -114
  456. package/dist/routes/terminal/types.js +12 -7
  457. package/dist/run/active-runs.d.ts +13 -0
  458. package/dist/run/active-runs.js +12 -0
  459. package/dist/run/bundle-shape.d.ts +2 -1
  460. package/dist/run/bundle-shape.js +7 -7
  461. package/dist/run/bundle.d.ts +99 -92
  462. package/dist/run/bundle.js +10 -8
  463. package/dist/run/cost-summary.js +6 -5
  464. package/dist/run/costs.d.ts +6 -6
  465. package/dist/run/costs.js +17 -11
  466. package/dist/run/detail.d.ts +9 -9
  467. package/dist/run/detail.js +10 -10
  468. package/dist/run/dry-run-inputs.js +1 -1
  469. package/dist/run/dry-run.js +23 -30
  470. package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
  471. package/dist/run/{study-files.js → evidence-files.js} +5 -5
  472. package/dist/run/feedback-shape.js +1 -1
  473. package/dist/run/judge.d.ts +34 -16
  474. package/dist/run/judge.js +41 -14
  475. package/dist/run/locate.d.ts +2 -0
  476. package/dist/run/locate.js +3 -1
  477. package/dist/run/outcomes.d.ts +3 -3
  478. package/dist/run/outcomes.js +3 -3
  479. package/dist/run/participant-records.d.ts +2 -2
  480. package/dist/run/participant-records.js +2 -2
  481. package/dist/run/paths.d.ts +1 -1
  482. package/dist/run/paths.js +2 -2
  483. package/dist/run/pricing.d.ts +30 -15
  484. package/dist/run/pricing.js +49 -30
  485. package/dist/run/projection.d.ts +27 -27
  486. package/dist/run/projection.js +23 -23
  487. package/dist/run/reclaim.d.ts +6 -0
  488. package/dist/run/reclaim.js +15 -5
  489. package/dist/run/results.d.ts +5 -5
  490. package/dist/run/run-index.d.ts +9 -7
  491. package/dist/run/run-index.js +24 -25
  492. package/dist/run/run-not-found.d.ts +5 -0
  493. package/dist/run/run-not-found.js +15 -0
  494. package/dist/run/run.d.ts +7 -4
  495. package/dist/run/run.js +10 -6
  496. package/dist/run/sandbox-receipts.d.ts +5 -5
  497. package/dist/run/sandbox-receipts.js +6 -6
  498. package/dist/run/shared-world-evidence.d.ts +67 -66
  499. package/dist/run/shared-world-evidence.js +4 -4
  500. package/dist/run/shared-world-shape.d.ts +3 -3
  501. package/dist/run/shared-world-shape.js +16 -16
  502. package/dist/run/stats.d.ts +17 -11
  503. package/dist/run/stats.js +124 -66
  504. package/dist/run/status.d.ts +21 -32
  505. package/dist/run/status.js +34 -33
  506. package/dist/run/stored-runs.js +2 -1
  507. package/dist/run/stream-shape.js +1 -1
  508. package/dist/run/streams.d.ts +29 -22
  509. package/dist/run/study-provenance.d.ts +47 -0
  510. package/dist/run/study-provenance.js +63 -0
  511. package/dist/run/study-result.d.ts +16 -0
  512. package/dist/run/study-result.js +9 -0
  513. package/dist/run/terminal-contract.d.ts +5 -5
  514. package/dist/run/terminal-contract.js +4 -4
  515. package/dist/run/text.d.ts +2 -0
  516. package/dist/run/text.js +4 -0
  517. package/dist/run/transient-comms-secrets.d.ts +5 -0
  518. package/dist/run/transient-comms-secrets.js +12 -0
  519. package/dist/run-lab.d.ts +40 -38
  520. package/dist/run-lab.js +42 -40
  521. package/dist/study/convert.d.ts +33 -0
  522. package/dist/study/convert.js +432 -0
  523. package/dist/study/field-paths.d.ts +12 -0
  524. package/dist/study/field-paths.js +126 -0
  525. package/dist/study/files.d.ts +26 -0
  526. package/dist/study/files.js +43 -0
  527. package/dist/study/migrate.d.ts +48 -0
  528. package/dist/study/migrate.js +408 -0
  529. package/dist/study/owned-files.d.ts +38 -0
  530. package/dist/study/owned-files.js +182 -0
  531. package/dist/subject/clone.d.ts +1 -1
  532. package/dist/subject/desktop-cli.d.ts +2 -2
  533. package/dist/subject/desktop-cli.js +3 -3
  534. package/dist/subject/local-tree-archive.d.ts +1 -1
  535. package/dist/subject/local-tree-archive.js +5 -5
  536. package/dist/subject/local-tree.d.ts +3 -3
  537. package/dist/subject/local-tree.js +1 -1
  538. package/dist/subject/node-bootstrap.d.ts +1 -1
  539. package/dist/subject/node-bootstrap.js +4 -4
  540. package/dist/subject/runtime.js +10 -11
  541. package/dist/subject/serve.d.ts +1 -1
  542. package/dist/subject/serve.js +4 -4
  543. package/dist/subject/state.d.ts +1 -1
  544. package/dist/subject/steps.d.ts +8 -8
  545. package/dist/subject/steps.js +7 -7
  546. package/dist/substrates/command-failure.d.ts +3 -3
  547. package/dist/substrates/command-failure.js +3 -3
  548. package/dist/substrates/detached.d.ts +6 -6
  549. package/dist/substrates/detached.js +7 -7
  550. package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
  551. package/dist/substrates/e2b/cdp-probe.js +15 -18
  552. package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
  553. package/dist/substrates/e2b/desktop-browser.js +12 -12
  554. package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
  555. package/dist/substrates/e2b/desktop-cdp.js +11 -11
  556. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  557. package/dist/substrates/e2b/desktop-executor.js +1 -1
  558. package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
  559. package/dist/substrates/e2b/desktop-geometry.js +9 -9
  560. package/dist/substrates/e2b/desktop-media.d.ts +1 -1
  561. package/dist/substrates/e2b/desktop-media.js +3 -3
  562. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  563. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  564. package/dist/substrates/e2b/sandbox.d.ts +1 -1
  565. package/dist/substrates/e2b/sandbox.js +2 -2
  566. package/dist/substrates/e2b/sdk.d.ts +11 -11
  567. package/dist/substrates/e2b/sdk.js +8 -8
  568. package/dist/substrates/local/runtime-host.d.ts +2 -0
  569. package/dist/substrates/local/runtime-host.js +6 -0
  570. package/dist/tui/actions.d.ts +8 -6
  571. package/dist/tui/actions.js +31 -22
  572. package/dist/tui/contract.d.ts +16 -16
  573. package/dist/tui/contract.js +10 -10
  574. package/dist/tui/launch.d.ts +4 -4
  575. package/dist/tui/launch.js +18 -19
  576. package/dist/tui/project.js +5 -5
  577. package/dist/tui-app.js +83 -83
  578. package/dist/verify/actor.d.ts +14 -14
  579. package/dist/verify/actor.js +45 -45
  580. package/dist/verify/artifacts.d.ts +3 -3
  581. package/dist/verify/artifacts.js +6 -6
  582. package/dist/verify/context-growth.d.ts +9 -0
  583. package/dist/verify/context-growth.js +62 -0
  584. package/dist/verify/costs.d.ts +7 -7
  585. package/dist/verify/costs.js +9 -9
  586. package/dist/verify/liveness.d.ts +1 -1
  587. package/dist/verify/liveness.js +4 -1
  588. package/dist/verify/rerun.d.ts +1 -1
  589. package/dist/verify/rerun.js +1 -1
  590. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  591. package/dist/verify/shared-world-concurrent.js +79 -76
  592. package/dist/verify/shared-world.d.ts +2 -2
  593. package/dist/verify/shared-world.js +18 -18
  594. package/dist/verify/subject.d.ts +4 -4
  595. package/dist/verify/subject.js +18 -18
  596. package/dist/verify/verify.js +98 -49
  597. package/docs/README.md +26 -33
  598. package/docs/architecture/actor-contract.md +105 -98
  599. package/docs/architecture/desktop-sessions.md +14 -14
  600. package/docs/architecture/external-public-shared-world.md +66 -59
  601. package/docs/architecture/github-feedback-loop.md +1 -4
  602. package/docs/architecture/guest-desktop.md +2 -2
  603. package/docs/architecture/observer.md +37 -37
  604. package/docs/architecture/restricted-codex-analysis.md +70 -30
  605. package/docs/architecture/serve.md +34 -37
  606. package/docs/architecture/state-driven-executor.md +55 -59
  607. package/docs/architecture/task-protocol-support.md +7 -9
  608. package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
  609. package/docs/contracts/README.md +24 -0
  610. package/docs/contracts/adapter-admission.md +3 -3
  611. package/docs/contracts/adapter-fixtures.md +2 -5
  612. package/docs/contracts/core.md +1 -3
  613. package/docs/contracts/errors.md +62 -0
  614. package/docs/contracts/feedback.md +8 -9
  615. package/docs/contracts/policy.md +7 -12
  616. package/docs/contracts/run-bundle.md +54 -51
  617. package/docs/contracts/schemas.md +505 -390
  618. package/docs/contracts/study-analysis.md +26 -2
  619. package/docs/contracts/study-costs.md +11 -7
  620. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  621. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  622. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  623. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
  624. package/docs/principles/actor-fidelity.md +4 -4
  625. package/docs/principles/engineering.md +3 -3
  626. package/docs/principles/invariants-and-defaults.md +38 -38
  627. package/docs/principles/self-driving-harness.md +1 -5
  628. package/docs/principles/three-roles.md +1 -1
  629. package/docs/product/automatic-analysis.md +8 -7
  630. package/examples/participant/README.md +5 -5
  631. package/examples/participant/run.mjs +11 -10
  632. package/examples/scorer/README.md +3 -3
  633. package/examples/scorer/run.mjs +11 -12
  634. package/package.json +16 -17
  635. package/skills/humanish/SKILL.md +63 -60
  636. package/skills/humanish/agents/openai.yaml +1 -1
  637. package/AGENTS.md +0 -99
  638. package/CONTRIBUTING.md +0 -148
  639. package/dist/actors/codex/qualified-versions.d.ts +0 -45
  640. package/dist/actors/codex/qualified-versions.js +0 -87
  641. package/dist/cli/commands/lab.d.ts +0 -3
  642. package/dist/cli/commands/lab.js +0 -193
  643. package/dist/deprecated.d.ts +0 -90
  644. package/dist/deprecated.js +0 -106
  645. package/dist/lab/bag-overrides.d.ts +0 -18
  646. package/dist/lab/bag-overrides.js +0 -121
  647. package/dist/observer/static.d.ts +0 -39
  648. package/dist/observer/static.js +0 -369
  649. package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
  650. package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
  651. package/docs/architecture/comms-inbox.md +0 -122
  652. package/docs/architecture/desktop-recording.md +0 -80
  653. package/docs/architecture/local-browser-runtime.md +0 -178
  654. package/docs/architecture/observer-review.md +0 -144
  655. package/docs/architecture/participant-media.md +0 -90
  656. package/docs/architecture/project-layout.md +0 -62
  657. package/docs/architecture/real-email-receiving.md +0 -136
  658. package/docs/assets/humanish-drawdb-hero.png +0 -0
  659. package/docs/assets/humanish-observer-hero.png +0 -0
  660. package/docs/goals/current.md +0 -207
  661. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  662. package/docs/product/open-source-install-experience.md +0 -240
  663. package/docs/ramp/README.md +0 -294
  664. package/docs/release/open-source-readiness.md +0 -222
  665. package/docs/release/public-readiness-standard.md +0 -210
  666. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  667. /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
  668. /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { CodexAppServerTrace } from "../actors/codex/app-server-trace.js";
2
- import type { ActorTrace, ActorTraceItem } from "../actors/contract.js";
2
+ import type { ActorStatus, ActorTrace, ActorTraceItem } from "../actors/contract.js";
3
3
  import type { RunDesktopRecording } from "../evidence/desktop-recording-types.js";
4
4
  export type RunStreamKind = "ui" | "browser" | "terminal" | "tui" | "codex-ui" | "artifact" | "summary";
5
5
  export type RunSimulationStatus = "queued" | "preparing" | "running" | "passed" | "abandoned" | "incomplete" | "complete" | "blocked" | "timed_out" | "failed" | "contract_proof_only";
@@ -29,10 +29,10 @@ interface RunStreamCompletion {
29
29
  meaningfulUse?: RunMeaningfulUseScore;
30
30
  }
31
31
  /**
32
- * The CLOSED set of core meaningful-use scoring components. Closed by design: these are the generic
32
+ * The closed set of core meaningful-use scoring components. Closed by design: these are the generic
33
33
  * dimensions core itself meters (setup/filesystem/nested/actor/product/feedback). A
34
- * product-specific scorecard does NOT extend this enum, so adopters' nouns stay out of core. It
35
- * ships as a thin in-repo extension that emits a namespaced `RunAdapterScore` via the lane's
34
+ * product-specific scorecard does not extend this enum, so adopters' nouns stay out of core. It
35
+ * ships as a thin in-repo extension that emits a namespaced `RunAdapterScore` via the route's
36
36
  * `score` hook, leaving its own component breakdown in that score's `data`. Exported so a thin
37
37
  * adapter can type against core's score shape without forking.
38
38
  */
@@ -64,14 +64,14 @@ export interface RunDesktopGeometry {
64
64
  source: "xdpyinfo";
65
65
  };
66
66
  /**
67
- * The device preset as DECLARED by the lab, present only when it differs from `requested`
67
+ * The device preset as declared by the lab, present only when it differs from `requested`
68
68
  * because the rendered width was floored to MIN_DESKTOP_RENDER_WIDTH.
69
69
  *
70
70
  * Without this, a floored run is indistinguishable from a faithful one: `verified` compares
71
71
  * the floored number with itself and reports a match, so a reader of the bundle sees
72
72
  * requested 500 / verified 500 and reasonably concludes a 500-wide preset was asked for. A
73
- * `mobile` (414) and a `small-mobile` (360) seat both render at 500 and look identical here.
74
- * When this field is set, the preset width did NOT render; see #221.
73
+ * `mobile` (414) and a `small-mobile` (360) participant both render at 500 and look identical
74
+ * here. When this field is set, the preset width did not render.
75
75
  */
76
76
  declared?: {
77
77
  width: number;
@@ -96,7 +96,7 @@ export interface RunDesktopGeometry {
96
96
  source: "cdp";
97
97
  };
98
98
  /**
99
- * Mobile fidelity beyond viewport size (#221), present only when the lab asked for it. `requested`
99
+ * Mobile fidelity beyond viewport size, present only when the lab asked for it. `requested`
100
100
  * is what was applied through CDP; `resolved` is what the page reported about itself afterwards
101
101
  * and is the proof, never copied from the request. A run without this block is a
102
102
  * responsive-viewport study, whatever its preset is named.
@@ -121,10 +121,10 @@ export interface RunDesktopGeometry {
121
121
  source: "cdp";
122
122
  };
123
123
  /**
124
- * Page targets the participant drove AFTER the launch page (a link that opened in a new tab)
125
- * whose own read-back reported the requested viewport width (#623). Absent when the
126
- * participant never left the launch tab; a later tab that did NOT report the width is a lane
127
- * warning instead.
124
+ * Page targets the participant drove after the launch page (a link that opened in a new tab)
125
+ * whose own read-back reported the requested viewport width. Absent when the
126
+ * participant never left the launch tab; a later tab that did not report the width is a
127
+ * participant warning instead.
128
128
  */
129
129
  laterTargets?: {
130
130
  targetId: string;
@@ -154,20 +154,27 @@ export interface RunParticipantAssignment {
154
154
  export interface RunStream {
155
155
  id: string;
156
156
  simId: string;
157
- /** Adapter-owned lane id for fan-out / target-swarm runs. Safe categorical metadata only. */
157
+ /** Adapter-owned participant id for fan-out / target-swarm runs. Safe categorical metadata only. */
158
158
  laneId?: string;
159
- /** Adapter-owned actor class for grouping lanes, e.g. viewer/reviewer/admin. */
159
+ /** Adapter-owned actor class for grouping participants, e.g. viewer/reviewer/admin. */
160
160
  actorType?: string;
161
- /** Adapter-owned product surface label for grouping lanes without parsing URLs. */
161
+ /** Adapter-owned product surface label for grouping participants without parsing URLs. */
162
162
  surface?: string;
163
163
  /** Adapter-owned scenario/case grouping label. */
164
164
  caseGroup?: string;
165
- /** Authored/default mission and lane focus, redacted before persistence. Missing on older
165
+ /** Authored/default mission and participant focus, redacted before persistence. Missing on older
166
166
  * bundles and uninstrumented routes; never reconstructed from study context or narration. */
167
167
  assignment?: RunParticipantAssignment;
168
168
  kind: RunStreamKind;
169
169
  label: string;
170
170
  status: RunSimulationStatus;
171
+ /**
172
+ * The judge's status for this participant (`judgedStatus` in src/run/judge.ts). It differs from
173
+ * the trace status when a goal_satisfied session reported a blocker or never engaged. Computer-use
174
+ * fan-out writes it for a finished live participant; rerun selection reads it. Absent elsewhere,
175
+ * and in bundles written before it existed.
176
+ */
177
+ judgedStatus?: ActorStatus;
171
178
  transport: "snapshot" | "polling" | "sse" | "pty" | "app-server";
172
179
  updatedAt: string;
173
180
  url?: string;
@@ -176,7 +183,7 @@ export interface RunStream {
176
183
  url?: string;
177
184
  title?: string;
178
185
  };
179
- /** Set by the attached watch server when the lane's sandbox is gone: the injected live URL
186
+ /** Set by the attached watch server when the participant's sandbox is gone: the injected live URL
180
187
  * would render a provider error page, so viewers fall back to recorded evidence. Runtime-only
181
188
  * and never persisted into bundles; declared here because the served observer-data carries it
182
189
  * and the client is typed against this contract. */
@@ -192,7 +199,7 @@ export interface RunStream {
192
199
  deviceScaleFactor?: number;
193
200
  isMobile?: boolean;
194
201
  };
195
- /** Truthful screen/window/viewport evidence for hosted desktop browser lanes. */
202
+ /** Truthful screen/window/viewport evidence for hosted desktop browser participants. */
196
203
  desktopGeometry?: RunDesktopGeometry;
197
204
  terminal?: {
198
205
  title: string;
@@ -227,10 +234,10 @@ export interface RunStream {
227
234
  };
228
235
  actor?: ActorTrace;
229
236
  /**
230
- * Mid-run partial actor evidence (#441): the redacted trace items recorded SO FAR,
231
- * flushed while a live lane is still running so the attached Observer's timeline can
232
- * grow. Deliberately NOT an ActorTrace — a running lane has no honest status,
233
- * completionReason, or completedAt, and this shape cannot claim them. Present ONLY on
237
+ * Mid-run partial actor evidence: the redacted trace items recorded so far,
238
+ * flushed while a live participant is still running so the attached Observer's timeline can
239
+ * grow. It is deliberately not an ActorTrace: a running participant has no final status,
240
+ * completionReason, or completedAt, and this shape cannot claim them. Present only on
234
241
  * `inProgress` bundles; the final write replaces it with the real `actor` and never
235
242
  * carries it.
236
243
  */
@@ -0,0 +1,47 @@
1
+ /** Which study a run came from, when it came from one. */
2
+ export interface RunStudyProvenance {
3
+ /** The study id its file declares (`config.id`). */
4
+ id: string;
5
+ /** Project-relative path of the study file, when the run came from a file on disk. */
6
+ path?: string;
7
+ /**
8
+ * `committed` = humanish/studies or humanish/labs, `ignored` = a local overlay, `explicit` = a
9
+ * path the operator passed.
10
+ */
11
+ origin?: "committed" | "ignored" | "explicit";
12
+ }
13
+ /** Whether a saved record's `study` or `lab` field is absent or shaped like a provenance. */
14
+ export declare function isProvenanceField(value: unknown): boolean;
15
+ /**
16
+ * A saved record's study: a valid `study`, else a valid `lab`, else the id its persona or scenario
17
+ * source names by convention.
18
+ */
19
+ export declare function studyProvenanceOf(record: {
20
+ study?: unknown;
21
+ lab?: unknown;
22
+ persona?: {
23
+ source?: unknown;
24
+ };
25
+ scenario?: {
26
+ source?: unknown;
27
+ };
28
+ }): RunStudyProvenance | undefined;
29
+ /** `study` and `lab` with the same value, as run.json and status.json write them until 0.109. */
30
+ export declare function studyFields(study: RunStudyProvenance | undefined): {
31
+ study?: RunStudyProvenance;
32
+ lab?: RunStudyProvenance;
33
+ };
34
+ /**
35
+ * The study id a run names by the `study:<id>` or `lab:<id>` convention on its persona or scenario
36
+ * source, the only attribution a run written before `lab` and `study` has. A prefix with an empty
37
+ * remainder is not an id. Ids may contain colons (`lab:oss:meta`), so only the prefix is stripped.
38
+ * Readers keep both prefixes for good: saved runs say `lab:`.
39
+ */
40
+ export declare function inferLegacyStudyId(bundle: {
41
+ persona?: {
42
+ source?: unknown;
43
+ };
44
+ scenario?: {
45
+ source?: unknown;
46
+ };
47
+ }): string | undefined;
@@ -0,0 +1,63 @@
1
+ // Which study a saved run came from. run.json and status.json write it as `study`, and as `lab`
2
+ // with the same value until 0.109 drops `lab`. Every reader goes through
3
+ // studyProvenanceOf, which also reads a run older than both fields by the `study:<id>` or
4
+ // `lab:<id>` convention on its persona and scenario sources.
5
+ const ORIGINS = ["committed", "ignored", "explicit"];
6
+ /** `value` as a provenance when it has an id, keeping only its fields that are valid. */
7
+ function provenance(value) {
8
+ if (value === null || typeof value !== "object")
9
+ return undefined;
10
+ const record = value;
11
+ if (typeof record.id !== "string" || record.id === "")
12
+ return undefined;
13
+ const origin = record.origin;
14
+ return {
15
+ id: record.id,
16
+ ...(typeof record.path === "string" ? { path: record.path } : {}),
17
+ ...(typeof origin === "string" && ORIGINS.includes(origin)
18
+ ? { origin: origin }
19
+ : {}),
20
+ };
21
+ }
22
+ /** Whether a saved record's `study` or `lab` field is absent or shaped like a provenance. */
23
+ export function isProvenanceField(value) {
24
+ if (value === undefined)
25
+ return true;
26
+ if (value === null || typeof value !== "object")
27
+ return false;
28
+ return typeof value.id === "string";
29
+ }
30
+ /**
31
+ * A saved record's study: a valid `study`, else a valid `lab`, else the id its persona or scenario
32
+ * source names by convention.
33
+ */
34
+ export function studyProvenanceOf(record) {
35
+ const declared = provenance(record.study) ?? provenance(record.lab);
36
+ if (declared !== undefined)
37
+ return declared;
38
+ const id = inferLegacyStudyId(record);
39
+ return id === undefined ? undefined : { id };
40
+ }
41
+ /** `study` and `lab` with the same value, as run.json and status.json write them until 0.109. */
42
+ export function studyFields(study) {
43
+ return study === undefined ? {} : { study, lab: study };
44
+ }
45
+ /**
46
+ * The study id a run names by the `study:<id>` or `lab:<id>` convention on its persona or scenario
47
+ * source, the only attribution a run written before `lab` and `study` has. A prefix with an empty
48
+ * remainder is not an id. Ids may contain colons (`lab:oss:meta`), so only the prefix is stripped.
49
+ * Readers keep both prefixes for good: saved runs say `lab:`.
50
+ */
51
+ export function inferLegacyStudyId(bundle) {
52
+ for (const source of [bundle.persona?.source, bundle.scenario?.source]) {
53
+ if (typeof source !== "string")
54
+ continue;
55
+ const prefix = ["study:", "lab:"].find((candidate) => source.startsWith(candidate));
56
+ if (prefix === undefined)
57
+ continue;
58
+ const id = source.slice(prefix.length).trim();
59
+ if (id !== "")
60
+ return id;
61
+ }
62
+ return undefined;
63
+ }
@@ -0,0 +1,16 @@
1
+ /** The schema of a study's result on every route. */
2
+ export declare const STUDY_RESULT_SCHEMA = "humanish.study-result.v1";
3
+ /** The fields every route's result carries to name its route and its study. */
4
+ export interface StudyResultIdentity<R extends string> {
5
+ schema: typeof STUDY_RESULT_SCHEMA;
6
+ route: R;
7
+ /** The study's `id`. */
8
+ studyId: string;
9
+ /**
10
+ * The study's `id`, the same value as `studyId`.
11
+ * @deprecated Read `studyId`. The next minor removes it.
12
+ */
13
+ labId: string;
14
+ }
15
+ /** The identity fields for a result of route `route` from the study `studyId`. */
16
+ export declare function studyResultIdentity<R extends string>(route: R, studyId: string): StudyResultIdentity<R>;
@@ -0,0 +1,9 @@
1
+ // The schema every route's result carries when a study runs: preview, computer use, scripted,
2
+ // terminal and shared world. `route` says which, and route-specific fields stay on their route's
3
+ // result type.
4
+ /** The schema of a study's result on every route. */
5
+ export const STUDY_RESULT_SCHEMA = "humanish.study-result.v1";
6
+ /** The identity fields for a result of route `route` from the study `studyId`. */
7
+ export function studyResultIdentity(route, studyId) {
8
+ return { schema: STUDY_RESULT_SCHEMA, route, studyId, labId: studyId };
9
+ }
@@ -1,15 +1,15 @@
1
1
  export declare const TERMINAL_EVENTS_ARTIFACT = "terminal-events.ndjson";
2
2
  export declare const TERMINAL_TRANSCRIPT_ARTIFACT = "terminal-transcript.txt";
3
3
  export declare const TERMINAL_LEDGERS_ARTIFACT = "terminal-ledgers.json";
4
- /** The cost categories the lane meters. product/media/payment are adapter signals; core can
4
+ /** The cost categories the terminal route meters. product/media/payment are adapter signals; core can
5
5
  * populate the provider line from the actor trace's tokenUsage.costUsd when present. */
6
6
  export type CostCategory = "product" | "media" | "payment" | "provider";
7
7
  /** The four cost categories, in a fixed order so the ledger shape is stable across runs. */
8
8
  export declare const COST_CATEGORIES: readonly CostCategory[];
9
9
  /**
10
10
  * Strip ANSI/control noise from a captured terminal transcript into stable, scannable text. Pure
11
- * (no IO). Exported so the terminal-product lane (src/routes/terminal/live-sandbox.ts) normalizes
12
- * its captured exec stream EXACTLY as the local-actor lanes do — the verdict-nonce scorer is only
11
+ * (no IO). Exported so the terminal-product route (src/routes/terminal/live-sandbox.ts) normalizes
12
+ * its captured exec stream exactly as the local-actor routes do: the verdict-nonce scorer is only
13
13
  * sound against the same normalization the marker is matched on, so the logic must not diverge.
14
14
  */
15
15
  export declare function normalizeLocalActorTranscript(transcript: string): string;
@@ -18,8 +18,8 @@ type ActorVerdict = "passed" | "blocked" | "failed";
18
18
  * Extract the per-run verdict from a normalized transcript: the agent must print exactly
19
19
  * `HUMANISH_ACTOR_VERDICT=<status> HUMANISH_ACTOR_NONCE=<nonce>`, and the nonce is mandatory so a
20
20
  * bare marker (echoed or replayed from untrusted text) can never forge a verdict. Pure (no IO).
21
- * Exported so the terminal-product lane scores its in-sandbox `codex exec` run by the same marker;
22
- * divergent verdict logic would let the two lanes disagree about what "passed" means.
21
+ * Exported so the terminal-product route scores its in-sandbox `codex exec` run by the same marker;
22
+ * divergent verdict logic would let the two routes disagree about what "passed" means.
23
23
  */
24
24
  export declare function extractLocalActorVerdict(transcript: string, verdictNonce: string): ActorVerdict | null;
25
25
  export {};
@@ -14,8 +14,8 @@ export const COST_CATEGORIES = [
14
14
  ];
15
15
  /**
16
16
  * Strip ANSI/control noise from a captured terminal transcript into stable, scannable text. Pure
17
- * (no IO). Exported so the terminal-product lane (src/routes/terminal/live-sandbox.ts) normalizes
18
- * its captured exec stream EXACTLY as the local-actor lanes do — the verdict-nonce scorer is only
17
+ * (no IO). Exported so the terminal-product route (src/routes/terminal/live-sandbox.ts) normalizes
18
+ * its captured exec stream exactly as the local-actor routes do: the verdict-nonce scorer is only
19
19
  * sound against the same normalization the marker is matched on, so the logic must not diverge.
20
20
  */
21
21
  export function normalizeLocalActorTranscript(transcript) {
@@ -31,8 +31,8 @@ export function normalizeLocalActorTranscript(transcript) {
31
31
  * Extract the per-run verdict from a normalized transcript: the agent must print exactly
32
32
  * `HUMANISH_ACTOR_VERDICT=<status> HUMANISH_ACTOR_NONCE=<nonce>`, and the nonce is mandatory so a
33
33
  * bare marker (echoed or replayed from untrusted text) can never forge a verdict. Pure (no IO).
34
- * Exported so the terminal-product lane scores its in-sandbox `codex exec` run by the same marker;
35
- * divergent verdict logic would let the two lanes disagree about what "passed" means.
34
+ * Exported so the terminal-product route scores its in-sandbox `codex exec` run by the same marker;
35
+ * divergent verdict logic would let the two routes disagree about what "passed" means.
36
36
  */
37
37
  export function extractLocalActorVerdict(transcript, verdictNonce) {
38
38
  const compactTranscript = transcript.replace(/\s+/g, "");
@@ -1,2 +1,4 @@
1
1
  /** Escape a literal string for use inside a RegExp source. */
2
2
  export declare function escapeRegExp(value: string): string;
3
+ /** "1 run", "2 runs"; `plural` names the irregular form, as in plural(n, "analysis", "analyses"). */
4
+ export declare function plural(count: number, singular: string, pluralForm?: string): string;
package/dist/run/text.js CHANGED
@@ -2,3 +2,7 @@
2
2
  export function escapeRegExp(value) {
3
3
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
4
  }
5
+ /** "1 run", "2 runs"; `plural` names the irregular form, as in plural(n, "analysis", "analyses"). */
6
+ export function plural(count, singular, pluralForm = `${singular}s`) {
7
+ return `${count} ${count === 1 ? singular : pluralForm}`;
8
+ }
@@ -3,3 +3,8 @@ export declare function withTransientCommsSecrets<T>(work: () => Promise<T>): Pr
3
3
  export declare function registerTransientCommsSecrets(values: string[]): void;
4
4
  /** Literal, longest-first replacement in one pass; replacement text is never matched recursively. */
5
5
  export declare function scrubTransientCommsText(text: string): string;
6
+ /**
7
+ * The scope's values as a scrubSecretValues scrub, which also finds them percent-encoded, escaped or
8
+ * base64-encoded and returns decoded text. Outside a scope it changes nothing.
9
+ */
10
+ export declare function transientCommsEncodedScrub(): (text: string) => string;
@@ -1,4 +1,5 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { scrubSecretValues } from "../evidence/secret-scrub.js";
2
3
  import { escapeRegExp } from "./text.js";
3
4
  const scopes = new AsyncLocalStorage();
4
5
  const MAX_VALUES = 8192;
@@ -70,3 +71,14 @@ export function scrubTransientCommsText(text) {
70
71
  return fail(scope);
71
72
  }
72
73
  }
74
+ /**
75
+ * The scope's values as a scrubSecretValues scrub, which also finds them percent-encoded, escaped or
76
+ * base64-encoded and returns decoded text. Outside a scope it changes nothing.
77
+ */
78
+ export function transientCommsEncodedScrub() {
79
+ const scope = scopes.getStore();
80
+ if (!scope)
81
+ return (text) => text;
82
+ usable(scope);
83
+ return scrubSecretValues([...scope.values]);
84
+ }
package/dist/run-lab.d.ts CHANGED
@@ -1,22 +1,29 @@
1
- import type { AutomaticAnalysisHooks } from "./analysis/automatic-completion.js";
1
+ import type { LocalVmInput } from "./routes/computer-use/types.js";
2
2
  import { type LateScorer } from "./lab/route-inputs.js";
3
- import { type LabBackend, type LabRoute } from "./lab/plan.js";
4
- import { type RunLabDriving, type RunLabHomes } from "./lab/run-lab-options.js";
3
+ import { type LabRoute } from "./lab/plan.js";
4
+ import type { LabDeps } from "./lab/lab-deps.js";
5
+ import type { RunLabDriving, RunLabHomes } from "./lab/run-lab-homes.js";
5
6
  import { type LabConfig } from "./lab/types.js";
6
7
  import type { ObserverResult } from "./observer/render.js";
7
- import { type CuaActorLabHooks, type CuaActorLabResult } from "./routes/computer-use/types.js";
8
- import { type ScriptedBrowserLabHooks, type ScriptedBrowserLabResult } from "./routes/scripted/types.js";
9
- import { type ConcurrentSharedWorldLabResult, type SharedWorldLabHooks } from "./routes/shared-world/types.js";
10
- import { type TerminalProductLabHooks, type TerminalProductLabResult } from "./routes/terminal/types.js";
8
+ import { type CuaActorLabResult } from "./routes/computer-use/types.js";
9
+ import { type PreviewStudyResult } from "./routes/preview.js";
10
+ import { type ScriptedBrowserLabResult } from "./routes/scripted/types.js";
11
+ import { type ConcurrentSharedWorldLabResult } from "./routes/shared-world/types.js";
12
+ import { type TerminalProductLabResult } from "./routes/terminal/types.js";
11
13
  import { type RunScorerProvenance } from "./run/bundle.js";
12
- import { type RunResult } from "./run/results.js";
13
- import { type RunLabProvenance } from "./run/status.js";
14
+ import type { RunStudyProvenance } from "./run/study-provenance.js";
14
15
  /**
15
16
  * Runs a lab on its route. The options are checked against the route and mapped into the route's
16
17
  * hook bags before anything runs. Each route closes the run it started on every exit through its
17
18
  * own run scope (`src/run/run.ts`).
18
19
  */
19
- export declare function runLab(config: LabConfig, options: RunLabOptions): Promise<LabOutcome>;
20
+ export declare function runLab(config: LabConfig, options: InternalRunLabOptions, deps?: LabDeps): Promise<LabOutcome>;
21
+ /**
22
+ * runLab as the package exports it (`src/index.ts`): the public options only. A JavaScript caller
23
+ * that passes a field RunLabOptions no longer has is refused in the route's own result envelope
24
+ * before anything runs.
25
+ */
26
+ export declare function runPackageLab(config: LabConfig, options: RunLabOptions): Promise<LabOutcome>;
20
27
  /** A lab planned once: the route's refusal, or the run of its plan. */
21
28
  export type PreparedLab = {
22
29
  readonly ok: false;
@@ -28,62 +35,57 @@ export type PreparedLab = {
28
35
  };
29
36
  /**
30
37
  * Normalizes the options and plans the lab once, so a caller can present a refusal before it loads
31
- * anything the run needs. A local browser study's desktop lane and provider are bound first, so the
32
- * plan is made with them; with createDesktopLane the caller provides the desktop, and with
33
- * buildExecutor it drives the app in process and needs none.
38
+ * anything the run needs. A local browser study's provider is bound first, so the plan is made with
39
+ * it, and its desktop goes to the computer-use run as `localVm`; with inProcess the caller drives
40
+ * the app in process and needs no desktop.
34
41
  */
35
- export declare function prepareLab(config: LabConfig, options: RunLabOptions): Promise<PreparedLab>;
42
+ export declare function prepareLab(config: LabConfig, options: InternalRunLabOptions, deps?: LabDeps): Promise<PreparedLab>;
36
43
  /**
37
- * Runtime overrides from CLI flags, the typed homes (`RunLabHomes`, `RunLabDriving`) and the older
38
- * route hook bags they replace. Each wins over the config when provided.
44
+ * What a package caller passes to runLab: the run's settings and the typed homes (`RunLabHomes`,
45
+ * `RunLabDriving`). Each wins over the config when provided.
39
46
  */
40
47
  export type RunLabOptions = RunLabBase & RunLabHomes & RunLabDriving;
41
48
  interface RunLabBase {
42
- automaticAnalysis?: AutomaticAnalysisHooks;
43
49
  cwd: string;
44
50
  runId?: string;
45
- /** Which manifest this run came from (#455): threaded to the route so the run's own
46
- * status record and bundle can say which lab produced it. Absent for library callers who
47
- * hand a LabConfig directly — the run is then honestly lab-less rather than guessed. */
48
- lab?: RunLabProvenance;
49
51
  dryRun?: boolean;
50
52
  open?: boolean;
51
53
  /** Participant count override: preview participants or computer-use desktops. */
52
54
  count?: number;
53
- /** CUA fan-out only: create a new run for failed/selected lanes from a prior run. */
55
+ /** CUA fan-out only: create a new run for failed/selected participants from a prior run. */
54
56
  rerun?: {
55
57
  sourceRunId: string;
56
58
  participantIds?: string[];
57
- /** @deprecated The older name of `participantIds`. */
58
- laneIds?: string[];
59
59
  };
60
60
  onObserverReady?: (observer: ObserverResult & {
61
61
  ok: true;
62
62
  }) => Promise<void> | void;
63
- /** Computer-use route hooks: subject provisioning (library callers) + test DI seams. */
64
- cuaHooks?: CuaActorLabHooks;
65
- /** Scripted-browser route hooks: browser injection + test DI seams (mirror of cuaHooks). */
66
- scriptedHooks?: ScriptedBrowserLabHooks;
67
- /** Terminal-product route hooks: sandbox/runtime-auth DI seams (mirror of cuaHooks). */
68
- terminalHooks?: TerminalProductLabHooks;
69
- /** Shared-world route hooks: sandbox / runSession / checkpoint DI seams (mirror of cuaHooks). */
70
- sharedWorldHooks?: SharedWorldLabHooks;
63
+ }
64
+ /** runLab's options inside the package: the public ones plus what only the CLI and tests set. */
65
+ export type InternalRunLabOptions = RunLabOptions & RunLabInternals;
66
+ interface RunLabInternals {
67
+ /**
68
+ * Which manifest this run came from. planLab puts it on the plan, and the route reads
69
+ * plan.lab for the run's status record and bundle. Absent for a library caller that passes a
70
+ * LabConfig directly; that run records no lab.
71
+ */
72
+ lab?: RunStudyProvenance;
71
73
  /**
72
- * CONFIG-DECLARED scorer provenance (#316), forwarded alongside whichever hooks bag carries the
74
+ * Config-declared scorer provenance, forwarded alongside the
73
75
  * loaded scorer. Its presence is the "declared" marker the terminal route reads to flip a
74
76
  * status:"fail" verdict; the browser routes stamp it as evidence (they already flip). Core-computed
75
77
  * (path + digest), never adopter-supplied; absent for library callers.
76
78
  */
77
79
  scorerProvenance?: RunScorerProvenance;
80
+ /** The local VM study's desktop, analysis gate and signal, for a local browser lab. */
81
+ localVm?: LocalVmInput;
78
82
  }
79
83
  /** A run's result and the route it ran on. */
80
- interface RouteOutcome<R extends LabRoute, B extends LabBackend, T> {
84
+ interface RouteOutcome<R extends LabRoute, T> {
81
85
  route: R;
82
- /** @deprecated The route's older name. Use `route`; this field goes in the next minor. */
83
- backend: B;
84
86
  result: T;
85
87
  }
86
- export type LabOutcome = RouteOutcome<"preview", "synthetic", RunResult> | RouteOutcome<"computer-use", "cua", CuaActorLabResult> | RouteOutcome<"scripted", "scripted", ScriptedBrowserLabResult> | RouteOutcome<"terminal", "terminal", TerminalProductLabResult> | RouteOutcome<"shared-world", "concurrent-shared-world", ConcurrentSharedWorldLabResult>;
88
+ export type LabOutcome = RouteOutcome<"preview", PreviewStudyResult> | RouteOutcome<"computer-use", CuaActorLabResult> | RouteOutcome<"scripted", ScriptedBrowserLabResult> | RouteOutcome<"terminal", TerminalProductLabResult> | RouteOutcome<"shared-world", ConcurrentSharedWorldLabResult>;
87
89
  /**
88
90
  * A plan past its route's local checks that need no scorer: the refusal they returned, or the
89
91
  * route's run, which takes a scorer loaded after them.
@@ -101,7 +103,7 @@ export type AdmittedPlan<R extends LabRoute = LabRoute> = {
101
103
  };
102
104
  /** The result of a run on route `R`, the `result` of that route's `LabOutcome`. */
103
105
  export type LabResult<R extends LabRoute = LabRoute> = {
104
- preview: RunResult;
106
+ preview: PreviewStudyResult;
105
107
  "computer-use": CuaActorLabResult;
106
108
  scripted: ScriptedBrowserLabResult;
107
109
  terminal: TerminalProductLabResult;