humanish 0.104.3 → 0.106.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 (1407) hide show
  1. package/AGENTS.md +89 -94
  2. package/ARCHITECTURE.md +146 -0
  3. package/CHANGELOG.md +502 -0
  4. package/CONTEXT.md +51 -0
  5. package/CONTRIBUTING.md +111 -9
  6. package/README.md +213 -124
  7. package/SECURITY.md +1 -1
  8. package/TELEMETRY.md +112 -0
  9. package/dist/actors/affordance.d.ts +56 -0
  10. package/dist/actors/affordance.js +155 -0
  11. package/dist/actors/agent-session.js +42 -0
  12. package/dist/actors/codex/app-server-actor-trace.d.ts +11 -0
  13. package/dist/actors/codex/app-server-actor-trace.js +211 -0
  14. package/dist/actors/codex/app-server-client.d.ts +39 -0
  15. package/dist/actors/codex/app-server-client.js +116 -0
  16. package/dist/actors/codex/app-server-trace.d.ts +154 -0
  17. package/dist/actors/codex/app-server-trace.js +424 -0
  18. package/dist/actors/codex/app-server-ui.d.ts +40 -0
  19. package/dist/actors/codex/app-server-ui.js +328 -0
  20. package/dist/actors/codex/app-server.d.ts +44 -0
  21. package/dist/actors/codex/app-server.js +268 -0
  22. package/dist/actors/codex/qualified-versions.d.ts +45 -0
  23. package/dist/actors/codex/qualified-versions.js +87 -0
  24. package/dist/actors/codex/restricted-executable.d.ts +17 -0
  25. package/dist/actors/codex/restricted-executable.js +147 -0
  26. package/dist/actors/codex/restricted-launch.d.ts +116 -0
  27. package/dist/actors/codex/restricted-launch.js +222 -0
  28. package/dist/actors/codex/restricted-participant-policy.d.ts +46 -0
  29. package/dist/actors/codex/restricted-participant-policy.js +82 -0
  30. package/dist/actors/codex/restricted-participant.d.ts +20 -0
  31. package/dist/actors/codex/restricted-participant.js +432 -0
  32. package/dist/actors/codex/restricted-policy.d.ts +70 -0
  33. package/dist/actors/codex/restricted-policy.js +326 -0
  34. package/dist/actors/codex/restricted-session.d.ts +65 -0
  35. package/dist/actors/codex/restricted-session.js +432 -0
  36. package/dist/actors/codex/restricted-transport.d.ts +73 -0
  37. package/dist/actors/codex/restricted-transport.js +335 -0
  38. package/dist/actors/codex/restricted-turn.d.ts +62 -0
  39. package/dist/actors/codex/restricted-turn.js +284 -0
  40. package/dist/actors/computer-use/actor.d.ts +77 -0
  41. package/dist/actors/computer-use/actor.js +78 -0
  42. package/dist/actors/computer-use/admission-limit.d.ts +12 -0
  43. package/dist/actors/computer-use/admission-limit.js +19 -0
  44. package/dist/actors/computer-use/executor-error.js +48 -0
  45. package/dist/actors/computer-use/loop/actions.d.ts +26 -0
  46. package/dist/actors/computer-use/loop/actions.js +245 -0
  47. package/dist/actors/computer-use/loop/backstop.d.ts +42 -0
  48. package/dist/actors/computer-use/loop/backstop.js +202 -0
  49. package/dist/actors/computer-use/loop/debrief.d.ts +19 -0
  50. package/dist/actors/computer-use/loop/debrief.js +164 -0
  51. package/dist/actors/computer-use/loop/ending.d.ts +86 -0
  52. package/dist/actors/computer-use/loop/ending.js +316 -0
  53. package/dist/actors/computer-use/loop/observation.d.ts +55 -0
  54. package/dist/actors/computer-use/loop/observation.js +246 -0
  55. package/dist/actors/computer-use/loop/output-limit.d.ts +11 -0
  56. package/dist/actors/computer-use/loop/output-limit.js +21 -0
  57. package/dist/actors/computer-use/loop/provider-call.d.ts +19 -0
  58. package/dist/actors/computer-use/loop/provider-call.js +208 -0
  59. package/dist/actors/computer-use/loop/race.d.ts +34 -0
  60. package/dist/actors/computer-use/loop/race.js +79 -0
  61. package/dist/actors/computer-use/loop/session.d.ts +77 -0
  62. package/dist/actors/computer-use/loop/session.js +135 -0
  63. package/dist/actors/computer-use/loop/spend.d.ts +30 -0
  64. package/dist/actors/computer-use/loop/spend.js +85 -0
  65. package/dist/actors/computer-use/loop/trace.d.ts +35 -0
  66. package/dist/actors/computer-use/loop/trace.js +140 -0
  67. package/dist/actors/computer-use/loop/types.d.ts +404 -0
  68. package/dist/actors/computer-use/loop/types.js +1 -0
  69. package/dist/actors/computer-use/loop/usage.d.ts +102 -0
  70. package/dist/actors/computer-use/loop/usage.js +355 -0
  71. package/dist/actors/computer-use/loop.d.ts +11 -0
  72. package/dist/actors/computer-use/loop.js +248 -0
  73. package/dist/actors/computer-use/openai-provider.d.ts +107 -0
  74. package/dist/actors/computer-use/openai-provider.js +472 -0
  75. package/dist/actors/computer-use/openai-requests.d.ts +35 -0
  76. package/dist/actors/computer-use/openai-requests.js +74 -0
  77. package/dist/actors/computer-use/openai-wire.d.ts +67 -0
  78. package/dist/actors/computer-use/openai-wire.js +365 -0
  79. package/dist/actors/computer-use/provider-error.d.ts +27 -0
  80. package/dist/actors/computer-use/provider-error.js +86 -0
  81. package/dist/actors/computer-use/speech.js +6 -0
  82. package/dist/actors/contract.d.ts +315 -0
  83. package/dist/actors/contract.js +201 -0
  84. package/dist/actors/goal-source.js +38 -0
  85. package/dist/actors/local-agent/claude-session.d.ts +43 -0
  86. package/dist/actors/local-agent/claude-session.js +370 -0
  87. package/dist/actors/local-agent/cli.d.ts +115 -0
  88. package/dist/actors/local-agent/cli.js +413 -0
  89. package/dist/actors/local-agent/readiness.d.ts +31 -0
  90. package/dist/actors/local-agent/readiness.js +45 -0
  91. package/dist/actors/openai-endpoint.d.ts +2 -0
  92. package/dist/actors/openai-endpoint.js +2 -0
  93. package/dist/actors/output-token-limit.js +4 -0
  94. package/dist/actors/reasoning-effort.js +33 -0
  95. package/dist/actors/registry.d.ts +59 -0
  96. package/dist/actors/registry.js +89 -0
  97. package/dist/actors/scripted-browser/actor.d.ts +49 -0
  98. package/dist/actors/scripted-browser/actor.js +428 -0
  99. package/dist/actors/scripted-browser/browser-command.d.ts +1 -0
  100. package/dist/actors/scripted-browser/browser-command.js +48 -0
  101. package/dist/actors/scripted-browser/journey.d.ts +9 -0
  102. package/dist/actors/scripted-browser/journey.js +171 -0
  103. package/dist/actors/scripted-browser/steps.d.ts +60 -0
  104. package/dist/actors/scripted-browser/steps.js +384 -0
  105. package/dist/actors/scripted-browser/types.d.ts +135 -0
  106. package/dist/actors/scripted-browser/types.js +26 -0
  107. package/dist/actors/stop-cause.d.ts +9 -0
  108. package/dist/actors/stop-cause.js +42 -0
  109. package/dist/actors/stop-conditions.d.ts +40 -0
  110. package/dist/actors/stop-conditions.js +65 -0
  111. package/dist/analysis/automatic-completion.d.ts +38 -0
  112. package/dist/analysis/automatic-completion.js +90 -0
  113. package/dist/analysis/automatic-config.d.ts +41 -0
  114. package/dist/analysis/automatic-config.js +135 -0
  115. package/dist/analysis/automatic.d.ts +17 -0
  116. package/dist/analysis/automatic.js +279 -0
  117. package/dist/analysis/codex-config.d.ts +8 -0
  118. package/dist/analysis/codex-config.js +69 -0
  119. package/dist/analysis/evidence-sources.d.ts +23 -0
  120. package/dist/analysis/evidence-sources.js +251 -0
  121. package/dist/analysis/evidence.d.ts +18 -0
  122. package/dist/analysis/evidence.js +482 -0
  123. package/dist/analysis/execute.d.ts +52 -0
  124. package/dist/analysis/execute.js +504 -0
  125. package/dist/analysis/image-tokens.d.ts +1 -0
  126. package/dist/analysis/image-tokens.js +41 -0
  127. package/dist/analysis/job.d.ts +97 -0
  128. package/dist/analysis/job.js +311 -0
  129. package/dist/analysis/load.d.ts +3 -0
  130. package/dist/analysis/load.js +11 -0
  131. package/dist/analysis/provider.d.ts +57 -0
  132. package/dist/analysis/provider.js +227 -0
  133. package/dist/analysis/restricted-codex.d.ts +19 -0
  134. package/dist/analysis/restricted-codex.js +23 -0
  135. package/dist/analysis/service.d.ts +72 -0
  136. package/dist/analysis/service.js +399 -0
  137. package/dist/analysis/sharing.d.ts +11 -0
  138. package/dist/analysis/sharing.js +44 -0
  139. package/dist/analysis/store-executions.d.ts +27 -0
  140. package/dist/analysis/store-executions.js +224 -0
  141. package/dist/analysis/store.d.ts +31 -0
  142. package/dist/analysis/store.js +315 -0
  143. package/dist/analysis/types.d.ts +217 -0
  144. package/dist/analysis/types.js +12 -0
  145. package/dist/analysis/validation.d.ts +225 -0
  146. package/dist/analysis/validation.js +562 -0
  147. package/dist/browser-control/client.d.ts +18 -0
  148. package/dist/browser-control/client.js +239 -0
  149. package/dist/browser-control/dispatcher.d.ts +19 -0
  150. package/dist/browser-control/dispatcher.js +221 -0
  151. package/dist/browser-control/protocol.d.ts +492 -0
  152. package/dist/browser-control/protocol.js +360 -0
  153. package/dist/browser-control/recording-transfer.d.ts +3 -0
  154. package/dist/browser-control/recording-transfer.js +48 -0
  155. package/dist/browser-control/transport.d.ts +27 -0
  156. package/dist/browser-control/transport.js +189 -0
  157. package/dist/cli/commands/analysis-signals.d.ts +7 -0
  158. package/dist/cli/commands/analysis-signals.js +25 -0
  159. package/dist/cli/commands/analyze.d.ts +3 -0
  160. package/dist/cli/commands/analyze.js +212 -0
  161. package/dist/cli/commands/codex.d.ts +3 -0
  162. package/dist/cli/commands/codex.js +145 -0
  163. package/dist/cli/commands/comms.d.ts +3 -0
  164. package/dist/cli/commands/comms.js +225 -0
  165. package/dist/cli/commands/feedback.d.ts +3 -0
  166. package/dist/cli/commands/feedback.js +138 -0
  167. package/dist/cli/commands/lab-format.d.ts +8 -0
  168. package/dist/cli/commands/lab-format.js +105 -0
  169. package/dist/cli/commands/lab-route-computer-use.d.ts +20 -0
  170. package/dist/cli/commands/lab-route-computer-use.js +251 -0
  171. package/dist/cli/commands/lab-route-open.d.ts +27 -0
  172. package/dist/cli/commands/lab-route-open.js +37 -0
  173. package/dist/cli/commands/lab-route-preview.d.ts +20 -0
  174. package/dist/cli/commands/lab-route-preview.js +74 -0
  175. package/dist/cli/commands/lab-route-run.d.ts +17 -0
  176. package/dist/cli/commands/lab-route-run.js +31 -0
  177. package/dist/cli/commands/lab-route-scripted.d.ts +19 -0
  178. package/dist/cli/commands/lab-route-scripted.js +50 -0
  179. package/dist/cli/commands/lab-route-shared-world.d.ts +20 -0
  180. package/dist/cli/commands/lab-route-shared-world.js +135 -0
  181. package/dist/cli/commands/lab-route-terminal.d.ts +19 -0
  182. package/dist/cli/commands/lab-route-terminal.js +49 -0
  183. package/dist/cli/commands/lab-run.d.ts +9 -0
  184. package/dist/cli/commands/lab-run.js +166 -0
  185. package/dist/cli/commands/lab-scorer.d.ts +30 -0
  186. package/dist/cli/commands/lab-scorer.js +17 -0
  187. package/dist/cli/commands/lab.d.ts +3 -0
  188. package/dist/cli/commands/lab.js +193 -0
  189. package/dist/cli/commands/observe.d.ts +4 -0
  190. package/dist/cli/commands/observe.js +345 -0
  191. package/dist/cli/commands/runs.d.ts +11 -0
  192. package/dist/cli/commands/runs.js +314 -0
  193. package/dist/cli/commands/setup.d.ts +11 -0
  194. package/dist/cli/commands/setup.js +325 -0
  195. package/dist/cli/commands/tui.d.ts +32 -0
  196. package/dist/cli/commands/tui.js +305 -0
  197. package/dist/cli/commands/watch.d.ts +3 -0
  198. package/dist/cli/commands/watch.js +245 -0
  199. package/dist/cli/doctor.d.ts +39 -0
  200. package/dist/cli/doctor.js +263 -0
  201. package/dist/cli/first-run-path.d.ts +67 -0
  202. package/dist/cli/first-run-path.js +150 -0
  203. package/dist/cli/io.d.ts +85 -0
  204. package/dist/cli/io.js +232 -0
  205. package/dist/cli/observer-follow.d.ts +56 -0
  206. package/dist/cli/observer-follow.js +160 -0
  207. package/dist/cli/orientation.d.ts +30 -0
  208. package/dist/cli/orientation.js +114 -0
  209. package/dist/cli/program.d.ts +15 -0
  210. package/dist/cli/program.js +338 -0
  211. package/dist/cli/secret-prompt.js +39 -0
  212. package/dist/cli/telemetry.js +351 -0
  213. package/dist/cli.js +2 -4
  214. package/dist/comms/agentmail.d.ts +29 -0
  215. package/dist/comms/agentmail.js +568 -0
  216. package/dist/comms/capture-surface.d.ts +54 -0
  217. package/dist/comms/capture-surface.js +468 -0
  218. package/dist/comms/catch-host.d.ts +52 -0
  219. package/dist/comms/catch-host.js +192 -0
  220. package/dist/comms/connections.d.ts +20 -0
  221. package/dist/comms/connections.js +116 -0
  222. package/dist/comms/email-catch.d.ts +49 -0
  223. package/dist/comms/email-catch.js +236 -0
  224. package/dist/comms/extract.d.ts +7 -0
  225. package/dist/comms/extract.js +65 -0
  226. package/dist/comms/fake-inbox.d.ts +39 -0
  227. package/dist/comms/fake-inbox.js +136 -0
  228. package/dist/comms/images.d.ts +7 -0
  229. package/dist/comms/images.js +53 -0
  230. package/dist/comms/lease-store.d.ts +91 -0
  231. package/dist/comms/lease-store.js +600 -0
  232. package/dist/comms/providers.d.ts +30 -0
  233. package/dist/comms/providers.js +24 -0
  234. package/dist/comms/receiving-common.d.ts +17 -0
  235. package/dist/comms/receiving-common.js +82 -0
  236. package/dist/comms/receiving-evidence.d.ts +4 -0
  237. package/dist/comms/receiving-evidence.js +59 -0
  238. package/dist/comms/receiving-recovery.d.ts +22 -0
  239. package/dist/comms/receiving-recovery.js +100 -0
  240. package/dist/comms/receiving-render.d.ts +16 -0
  241. package/dist/comms/receiving-render.js +409 -0
  242. package/dist/comms/receiving-runtime.d.ts +41 -0
  243. package/dist/comms/receiving-runtime.js +66 -0
  244. package/dist/comms/receiving-surface.d.ts +8 -0
  245. package/dist/comms/receiving-surface.js +156 -0
  246. package/dist/comms/receiving-types.d.ts +122 -0
  247. package/dist/comms/receiving-types.js +3 -0
  248. package/dist/comms/receiving.d.ts +33 -0
  249. package/dist/comms/receiving.js +508 -0
  250. package/dist/comms/sandbox-catch-script.d.ts +16 -0
  251. package/dist/comms/sandbox-catch-script.js +331 -0
  252. package/dist/comms/sandbox-catch.d.ts +214 -0
  253. package/dist/comms/sandbox-catch.js +451 -0
  254. package/dist/comms/setup.d.ts +65 -0
  255. package/dist/comms/setup.js +259 -0
  256. package/dist/comms/thread-evidence.d.ts +28 -0
  257. package/dist/comms/thread-evidence.js +30 -0
  258. package/dist/comms/types.d.ts +76 -0
  259. package/dist/comms/types.js +8 -0
  260. package/dist/deprecated.d.ts +90 -0
  261. package/dist/deprecated.js +106 -0
  262. package/dist/evidence/browser-hygiene.js +42 -0
  263. package/dist/evidence/desktop-recorder.d.ts +39 -0
  264. package/dist/evidence/desktop-recorder.js +340 -0
  265. package/dist/evidence/desktop-recording-artifact.d.ts +5 -0
  266. package/dist/evidence/desktop-recording-artifact.js +53 -0
  267. package/dist/evidence/desktop-recording-types.d.ts +27 -0
  268. package/dist/evidence/desktop-recording-types.js +16 -0
  269. package/dist/evidence/encoded-text.d.ts +27 -0
  270. package/dist/evidence/encoded-text.js +243 -0
  271. package/dist/evidence/frame-signature.d.ts +17 -0
  272. package/dist/evidence/frame-signature.js +111 -0
  273. package/dist/evidence/image.d.ts +24 -0
  274. package/dist/evidence/image.js +170 -0
  275. package/dist/evidence/plain-text.d.ts +8 -0
  276. package/dist/evidence/plain-text.js +16 -0
  277. package/dist/evidence/redaction.d.ts +110 -0
  278. package/dist/evidence/redaction.js +329 -0
  279. package/dist/feedback/draft.d.ts +58 -0
  280. package/dist/feedback/draft.js +309 -0
  281. package/dist/feedback/export-bundle.d.ts +6 -0
  282. package/dist/feedback/export-bundle.js +585 -0
  283. package/dist/feedback/export.d.ts +50 -0
  284. package/dist/feedback/export.js +392 -0
  285. package/dist/feedback/feedback.d.ts +37 -0
  286. package/dist/feedback/feedback.js +282 -0
  287. package/dist/feedback/proof.d.ts +8 -0
  288. package/dist/feedback/proof.js +56 -0
  289. package/dist/guest/bootstrap.d.ts +55 -0
  290. package/dist/guest/bootstrap.js +348 -0
  291. package/dist/guest/browser-tools.d.ts +8 -0
  292. package/dist/guest/browser-tools.js +72 -0
  293. package/dist/guest/chromium-text.d.ts +62 -0
  294. package/dist/guest/chromium-text.js +386 -0
  295. package/dist/guest/desktop-executor.d.ts +57 -0
  296. package/dist/guest/desktop-executor.js +256 -0
  297. package/dist/guest/desktop-keys.d.ts +8 -0
  298. package/dist/guest/desktop-keys.js +89 -0
  299. package/dist/guest/desktop-media.d.ts +70 -0
  300. package/dist/guest/desktop-media.js +385 -0
  301. package/dist/guest/desktop-native.d.ts +14 -0
  302. package/dist/guest/desktop-native.js +156 -0
  303. package/dist/guest/media-config.d.ts +15 -0
  304. package/dist/guest/media-config.js +16 -0
  305. package/dist/guest/runtime-desktop.d.ts +45 -0
  306. package/dist/guest/runtime-desktop.js +420 -0
  307. package/dist/guest/runtime-processes.d.ts +28 -0
  308. package/dist/guest/runtime-processes.js +94 -0
  309. package/dist/guest/runtime.d.ts +31 -0
  310. package/dist/guest/runtime.js +124 -0
  311. package/dist/guest-media-worker.js +184 -48
  312. package/dist/guest-runtime-main.js +23 -10
  313. package/dist/guest-runtime-revision.js +1 -1
  314. package/dist/index.d.ts +32 -83
  315. package/dist/index.js +21 -42
  316. package/dist/keys/env-file.d.ts +15 -0
  317. package/dist/keys/env-file.js +109 -0
  318. package/dist/keys/key-resolution.d.ts +58 -0
  319. package/dist/keys/key-resolution.js +389 -0
  320. package/dist/lab/adapter-extension.d.ts +75 -0
  321. package/dist/lab/adapter-extension.js +253 -0
  322. package/dist/lab/adapter-scorer-loader.d.ts +43 -0
  323. package/dist/lab/adapter-scorer-loader.js +130 -0
  324. package/dist/lab/bag-overrides.d.ts +18 -0
  325. package/dist/lab/bag-overrides.js +121 -0
  326. package/dist/lab/composition-rules.d.ts +5 -0
  327. package/dist/lab/composition-rules.js +283 -0
  328. package/dist/lab/config.d.ts +7 -0
  329. package/dist/lab/config.js +208 -0
  330. package/dist/lab/device-presets.d.ts +97 -0
  331. package/dist/lab/device-presets.js +87 -0
  332. package/dist/lab/discover.d.ts +65 -0
  333. package/dist/lab/discover.js +422 -0
  334. package/dist/lab/doctor.d.ts +39 -0
  335. package/dist/lab/doctor.js +233 -0
  336. package/dist/lab/init-paths.d.ts +5 -0
  337. package/dist/lab/init-paths.js +89 -0
  338. package/dist/lab/init-plan.d.ts +20 -0
  339. package/dist/lab/init-plan.js +163 -0
  340. package/dist/lab/init-templates.d.ts +28 -0
  341. package/dist/lab/init-templates.js +416 -0
  342. package/dist/lab/init.d.ts +39 -0
  343. package/dist/lab/init.js +287 -0
  344. package/dist/lab/keys.d.ts +2 -0
  345. package/dist/lab/keys.js +264 -0
  346. package/dist/lab/parse/actors.d.ts +14 -0
  347. package/dist/lab/parse/actors.js +453 -0
  348. package/dist/lab/parse/comms.d.ts +12 -0
  349. package/dist/lab/parse/comms.js +246 -0
  350. package/dist/lab/parse/execution.d.ts +19 -0
  351. package/dist/lab/parse/execution.js +356 -0
  352. package/dist/lab/parse/subject-state.d.ts +30 -0
  353. package/dist/lab/parse/subject-state.js +179 -0
  354. package/dist/lab/parse/subject.d.ts +9 -0
  355. package/dist/lab/parse/subject.js +420 -0
  356. package/dist/lab/parse/values.d.ts +17 -0
  357. package/dist/lab/parse/values.js +65 -0
  358. package/dist/lab/participant-assignment.d.ts +12 -0
  359. package/dist/lab/participant-assignment.js +19 -0
  360. package/dist/lab/persona-resolve.d.ts +39 -0
  361. package/dist/lab/persona-resolve.js +118 -0
  362. package/dist/lab/persona.d.ts +39 -0
  363. package/dist/lab/persona.js +192 -0
  364. package/dist/lab/plan-base.d.ts +24 -0
  365. package/dist/lab/plan-base.js +113 -0
  366. package/dist/lab/plan-participants.d.ts +81 -0
  367. package/dist/lab/plan-participants.js +92 -0
  368. package/dist/lab/plan-types.d.ts +269 -0
  369. package/dist/lab/plan-types.js +5 -0
  370. package/dist/lab/plan.d.ts +27 -0
  371. package/dist/lab/plan.js +156 -0
  372. package/dist/lab/preflight-probes.d.ts +3 -0
  373. package/dist/lab/preflight-probes.js +312 -0
  374. package/dist/lab/preflight-result.d.ts +7 -0
  375. package/dist/lab/preflight-result.js +43 -0
  376. package/dist/lab/preflight.d.ts +95 -0
  377. package/dist/lab/preflight.js +117 -0
  378. package/dist/lab/route-inputs.d.ts +17 -0
  379. package/dist/lab/route-inputs.js +95 -0
  380. package/dist/lab/routing.d.ts +81 -0
  381. package/dist/lab/routing.js +214 -0
  382. package/dist/lab/run-lab-events.d.ts +69 -0
  383. package/dist/lab/run-lab-events.js +95 -0
  384. package/dist/lab/run-lab-options.d.ts +82 -0
  385. package/dist/lab/run-lab-options.js +399 -0
  386. package/dist/lab/summary.d.ts +60 -0
  387. package/dist/lab/summary.js +168 -0
  388. package/dist/lab/tasks.d.ts +91 -0
  389. package/dist/lab/tasks.js +139 -0
  390. package/dist/lab/types.d.ts +813 -0
  391. package/dist/lab/types.js +6 -0
  392. package/dist/lab/validation.d.ts +67 -0
  393. package/dist/lab/validation.js +387 -0
  394. package/dist/lab/warnings.d.ts +2 -0
  395. package/dist/lab/warnings.js +338 -0
  396. package/dist/observer/artifact.d.ts +23 -0
  397. package/dist/observer/artifact.js +235 -0
  398. package/dist/observer/data.d.ts +115 -0
  399. package/dist/observer/data.js +258 -0
  400. package/dist/observer/exposure.d.ts +64 -0
  401. package/dist/observer/exposure.js +143 -0
  402. package/dist/observer/http.js +50 -0
  403. package/dist/observer/library.js +190 -0
  404. package/dist/observer/listen.js +85 -0
  405. package/dist/observer/live.d.ts +9 -0
  406. package/dist/observer/live.js +25 -0
  407. package/dist/observer/pinned-files.d.ts +30 -0
  408. package/dist/observer/pinned-files.js +160 -0
  409. package/dist/observer/render.d.ts +69 -0
  410. package/dist/observer/render.js +350 -0
  411. package/dist/observer/run-inventory.d.ts +35 -0
  412. package/dist/observer/run-inventory.js +95 -0
  413. package/dist/observer/run-routes.d.ts +37 -0
  414. package/dist/observer/run-routes.js +373 -0
  415. package/dist/observer/serve.d.ts +97 -0
  416. package/dist/observer/serve.js +305 -0
  417. package/dist/observer/static.js +369 -0
  418. package/dist/observer/tunnel.js +112 -0
  419. package/dist/observer-app.html +9 -20
  420. package/dist/routes/computer-use/bundle-parts.d.ts +50 -0
  421. package/dist/routes/computer-use/bundle-parts.js +177 -0
  422. package/dist/routes/computer-use/bundle.d.ts +56 -0
  423. package/dist/routes/computer-use/bundle.js +184 -0
  424. package/dist/routes/computer-use/diagnostics.d.ts +38 -0
  425. package/dist/routes/computer-use/diagnostics.js +94 -0
  426. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +65 -0
  427. package/dist/routes/computer-use/e2b-desktop/comms.js +225 -0
  428. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +3 -0
  429. package/dist/routes/computer-use/e2b-desktop/desktop.js +91 -0
  430. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +65 -0
  431. package/dist/routes/computer-use/e2b-desktop/fidelity.js +156 -0
  432. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +18 -0
  433. package/dist/routes/computer-use/e2b-desktop/prepare.js +198 -0
  434. package/dist/routes/computer-use/e2b-desktop/start.d.ts +14 -0
  435. package/dist/routes/computer-use/e2b-desktop/start.js +193 -0
  436. package/dist/routes/computer-use/e2b-desktop/state.d.ts +65 -0
  437. package/dist/routes/computer-use/e2b-desktop/state.js +69 -0
  438. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +6 -0
  439. package/dist/routes/computer-use/e2b-desktop/teardown.js +152 -0
  440. package/dist/routes/computer-use/external-comms.d.ts +20 -0
  441. package/dist/routes/computer-use/external-comms.js +55 -0
  442. package/dist/routes/computer-use/fanout-bundle.d.ts +11 -0
  443. package/dist/routes/computer-use/fanout-bundle.js +274 -0
  444. package/dist/routes/computer-use/fanout-lanes.d.ts +15 -0
  445. package/dist/routes/computer-use/fanout-lanes.js +302 -0
  446. package/dist/routes/computer-use/in-process-desktop.d.ts +17 -0
  447. package/dist/routes/computer-use/in-process-desktop.js +40 -0
  448. package/dist/routes/computer-use/lanes.d.ts +35 -0
  449. package/dist/routes/computer-use/lanes.js +321 -0
  450. package/dist/routes/computer-use/legacy-lane-spec.d.ts +62 -0
  451. package/dist/routes/computer-use/legacy-lane-spec.js +39 -0
  452. package/dist/routes/computer-use/live-flush.d.ts +42 -0
  453. package/dist/routes/computer-use/live-flush.js +154 -0
  454. package/dist/routes/computer-use/local-tree-pack.d.ts +27 -0
  455. package/dist/routes/computer-use/local-tree-pack.js +47 -0
  456. package/dist/routes/computer-use/local-vm.d.ts +20 -0
  457. package/dist/routes/computer-use/local-vm.js +218 -0
  458. package/dist/routes/computer-use/participant-desktop.d.ts +63 -0
  459. package/dist/routes/computer-use/participant-desktop.js +33 -0
  460. package/dist/routes/computer-use/participant-facts.d.ts +6 -0
  461. package/dist/routes/computer-use/participant-facts.js +22 -0
  462. package/dist/routes/computer-use/participant-model.d.ts +30 -0
  463. package/dist/routes/computer-use/participant-model.js +222 -0
  464. package/dist/routes/computer-use/participant-prompt.d.ts +53 -0
  465. package/dist/routes/computer-use/participant-prompt.js +87 -0
  466. package/dist/routes/computer-use/participant-runs.d.ts +67 -0
  467. package/dist/routes/computer-use/participant-runs.js +255 -0
  468. package/dist/routes/computer-use/plan.d.ts +56 -0
  469. package/dist/routes/computer-use/plan.js +308 -0
  470. package/dist/routes/computer-use/preflight.d.ts +26 -0
  471. package/dist/routes/computer-use/preflight.js +85 -0
  472. package/dist/routes/computer-use/rerun-selection.d.ts +19 -0
  473. package/dist/routes/computer-use/rerun-selection.js +121 -0
  474. package/dist/routes/computer-use/result.d.ts +7 -0
  475. package/dist/routes/computer-use/result.js +292 -0
  476. package/dist/routes/computer-use/route.d.ts +33 -0
  477. package/dist/routes/computer-use/route.js +145 -0
  478. package/dist/routes/computer-use/run-lanes.d.ts +59 -0
  479. package/dist/routes/computer-use/run-lanes.js +135 -0
  480. package/dist/routes/computer-use/self-report.d.ts +21 -0
  481. package/dist/routes/computer-use/self-report.js +231 -0
  482. package/dist/routes/computer-use/setup.d.ts +136 -0
  483. package/dist/routes/computer-use/setup.js +371 -0
  484. package/dist/routes/computer-use/single-bundle.d.ts +97 -0
  485. package/dist/routes/computer-use/single-bundle.js +393 -0
  486. package/dist/routes/computer-use/subject-projection.d.ts +51 -0
  487. package/dist/routes/computer-use/subject-projection.js +159 -0
  488. package/dist/routes/computer-use/types.d.ts +539 -0
  489. package/dist/routes/computer-use/types.js +37 -0
  490. package/dist/routes/preview.d.ts +13 -0
  491. package/dist/routes/preview.js +36 -0
  492. package/dist/routes/scripted/bundle.d.ts +47 -0
  493. package/dist/routes/scripted/bundle.js +195 -0
  494. package/dist/routes/scripted/plan.d.ts +30 -0
  495. package/dist/routes/scripted/plan.js +95 -0
  496. package/dist/routes/scripted/result.d.ts +48 -0
  497. package/dist/routes/scripted/result.js +176 -0
  498. package/dist/routes/scripted/route.d.ts +28 -0
  499. package/dist/routes/scripted/route.js +218 -0
  500. package/dist/routes/scripted/scenario.d.ts +21 -0
  501. package/dist/routes/scripted/scenario.js +102 -0
  502. package/dist/routes/scripted/session-result.d.ts +8 -0
  503. package/dist/routes/scripted/session-result.js +60 -0
  504. package/dist/routes/scripted/setup.d.ts +45 -0
  505. package/dist/routes/scripted/setup.js +126 -0
  506. package/dist/routes/scripted/subject.d.ts +49 -0
  507. package/dist/routes/scripted/subject.js +156 -0
  508. package/dist/routes/scripted/surface-records.d.ts +26 -0
  509. package/dist/routes/scripted/surface-records.js +88 -0
  510. package/dist/routes/scripted/surface-sessions.d.ts +13 -0
  511. package/dist/routes/scripted/surface-sessions.js +40 -0
  512. package/dist/routes/scripted/types.d.ts +88 -0
  513. package/dist/routes/scripted/types.js +3 -0
  514. package/dist/routes/shared-world/bundle.d.ts +20 -0
  515. package/dist/routes/shared-world/bundle.js +446 -0
  516. package/dist/routes/shared-world/checkpoints.d.ts +25 -0
  517. package/dist/routes/shared-world/checkpoints.js +46 -0
  518. package/dist/routes/shared-world/comms.d.ts +68 -0
  519. package/dist/routes/shared-world/comms.js +176 -0
  520. package/dist/routes/shared-world/external-public.d.ts +21 -0
  521. package/dist/routes/shared-world/external-public.js +130 -0
  522. package/dist/routes/shared-world/handoff.d.ts +62 -0
  523. package/dist/routes/shared-world/handoff.js +348 -0
  524. package/dist/routes/shared-world/lobby-code.d.ts +25 -0
  525. package/dist/routes/shared-world/lobby-code.js +152 -0
  526. package/dist/routes/shared-world/plan.d.ts +27 -0
  527. package/dist/routes/shared-world/plan.js +174 -0
  528. package/dist/routes/shared-world/provenance.d.ts +27 -0
  529. package/dist/routes/shared-world/provenance.js +65 -0
  530. package/dist/routes/shared-world/provisioned.d.ts +57 -0
  531. package/dist/routes/shared-world/provisioned.js +505 -0
  532. package/dist/routes/shared-world/result.d.ts +18 -0
  533. package/dist/routes/shared-world/result.js +327 -0
  534. package/dist/routes/shared-world/route.d.ts +21 -0
  535. package/dist/routes/shared-world/route.js +277 -0
  536. package/dist/routes/shared-world/seat-records.d.ts +20 -0
  537. package/dist/routes/shared-world/seat-records.js +213 -0
  538. package/dist/routes/shared-world/seats.d.ts +38 -0
  539. package/dist/routes/shared-world/seats.js +208 -0
  540. package/dist/routes/shared-world/setup.d.ts +48 -0
  541. package/dist/routes/shared-world/setup.js +200 -0
  542. package/dist/routes/shared-world/types.d.ts +354 -0
  543. package/dist/routes/shared-world/types.js +29 -0
  544. package/dist/routes/terminal/adapter.d.ts +37 -0
  545. package/dist/routes/terminal/adapter.js +201 -0
  546. package/dist/routes/terminal/bundle.d.ts +79 -0
  547. package/dist/routes/terminal/bundle.js +305 -0
  548. package/dist/routes/terminal/credentials.d.ts +34 -0
  549. package/dist/routes/terminal/credentials.js +102 -0
  550. package/dist/routes/terminal/dry-run.d.ts +24 -0
  551. package/dist/routes/terminal/dry-run.js +157 -0
  552. package/dist/routes/terminal/encoding.js +79 -0
  553. package/dist/routes/terminal/ledger.d.ts +49 -0
  554. package/dist/routes/terminal/ledger.js +170 -0
  555. package/dist/routes/terminal/lifetime.d.ts +10 -0
  556. package/dist/routes/terminal/lifetime.js +22 -0
  557. package/dist/routes/terminal/live-finish.d.ts +31 -0
  558. package/dist/routes/terminal/live-finish.js +215 -0
  559. package/dist/routes/terminal/live-sandbox.d.ts +69 -0
  560. package/dist/routes/terminal/live-sandbox.js +452 -0
  561. package/dist/routes/terminal/persona.d.ts +20 -0
  562. package/dist/routes/terminal/persona.js +34 -0
  563. package/dist/routes/terminal/plan.d.ts +21 -0
  564. package/dist/routes/terminal/plan.js +115 -0
  565. package/dist/routes/terminal/recorder.d.ts +23 -0
  566. package/dist/routes/terminal/recorder.js +77 -0
  567. package/dist/routes/terminal/result.d.ts +47 -0
  568. package/dist/routes/terminal/result.js +114 -0
  569. package/dist/routes/terminal/route.d.ts +23 -0
  570. package/dist/routes/terminal/route.js +170 -0
  571. package/dist/routes/terminal/runtime-auth.d.ts +12 -0
  572. package/dist/routes/terminal/runtime-auth.js +23 -0
  573. package/dist/routes/terminal/runtime.d.ts +14 -0
  574. package/dist/routes/terminal/runtime.js +47 -0
  575. package/dist/routes/terminal/sandbox.d.ts +35 -0
  576. package/dist/routes/terminal/sandbox.js +126 -0
  577. package/dist/routes/terminal/session.d.ts +25 -0
  578. package/dist/routes/terminal/session.js +199 -0
  579. package/dist/routes/terminal/token-usage.d.ts +15 -0
  580. package/dist/routes/terminal/token-usage.js +93 -0
  581. package/dist/routes/terminal/trace.d.ts +40 -0
  582. package/dist/routes/terminal/trace.js +172 -0
  583. package/dist/routes/terminal/types.d.ts +342 -0
  584. package/dist/routes/terminal/types.js +31 -0
  585. package/dist/run/bundle-shape.d.ts +7 -0
  586. package/dist/run/bundle-shape.js +369 -0
  587. package/dist/run/bundle.d.ts +547 -0
  588. package/dist/run/bundle.js +44 -0
  589. package/dist/run/concurrency.js +24 -0
  590. package/dist/run/contained-output.d.ts +50 -0
  591. package/dist/run/contained-output.js +351 -0
  592. package/dist/run/cost-summary.d.ts +28 -0
  593. package/dist/run/cost-summary.js +213 -0
  594. package/dist/run/costs.js +140 -0
  595. package/dist/run/detail.d.ts +62 -0
  596. package/dist/run/detail.js +139 -0
  597. package/dist/run/dry-run-inputs.d.ts +9 -0
  598. package/dist/run/dry-run-inputs.js +90 -0
  599. package/dist/run/dry-run.d.ts +6 -0
  600. package/dist/run/dry-run.js +362 -0
  601. package/dist/run/feedback-shape.d.ts +7 -0
  602. package/dist/run/feedback-shape.js +89 -0
  603. package/dist/run/git-state.d.ts +35 -0
  604. package/dist/run/git-state.js +316 -0
  605. package/dist/run/git-workspace.d.ts +32 -0
  606. package/dist/run/git-workspace.js +450 -0
  607. package/dist/run/judge.d.ts +210 -0
  608. package/dist/run/judge.js +240 -0
  609. package/dist/run/locate.d.ts +22 -0
  610. package/dist/run/locate.js +122 -0
  611. package/dist/run/outcomes.d.ts +31 -0
  612. package/dist/run/outcomes.js +210 -0
  613. package/dist/run/participant-records.d.ts +28 -0
  614. package/dist/run/participant-records.js +63 -0
  615. package/dist/run/participant.d.ts +29 -0
  616. package/dist/run/participant.js +12 -0
  617. package/dist/run/paths.d.ts +79 -0
  618. package/dist/run/paths.js +356 -0
  619. package/dist/run/preflight-receipts.d.ts +46 -0
  620. package/dist/run/preflight-receipts.js +173 -0
  621. package/dist/run/pricing.d.ts +124 -0
  622. package/dist/run/pricing.js +298 -0
  623. package/dist/run/project.d.ts +8 -0
  624. package/dist/run/project.js +103 -0
  625. package/dist/run/projection.d.ts +184 -0
  626. package/dist/run/projection.js +356 -0
  627. package/dist/run/reclaim.d.ts +41 -0
  628. package/dist/run/reclaim.js +183 -0
  629. package/dist/run/results.d.ts +88 -0
  630. package/dist/run/results.js +3 -0
  631. package/dist/run/run-index.d.ts +107 -0
  632. package/dist/run/run-index.js +243 -0
  633. package/dist/run/run.d.ts +103 -0
  634. package/dist/run/run.js +199 -0
  635. package/dist/run/sandbox-receipts.d.ts +31 -0
  636. package/dist/run/sandbox-receipts.js +49 -0
  637. package/dist/run/shared-world-evidence.d.ts +220 -0
  638. package/dist/run/shared-world-evidence.js +49 -0
  639. package/dist/run/shared-world-shape.d.ts +26 -0
  640. package/dist/run/shared-world-shape.js +181 -0
  641. package/dist/run/stats.d.ts +82 -0
  642. package/dist/run/stats.js +258 -0
  643. package/dist/run/status.d.ts +111 -0
  644. package/dist/run/status.js +176 -0
  645. package/dist/run/stored-runs.d.ts +38 -0
  646. package/dist/run/stored-runs.js +273 -0
  647. package/dist/run/stream-shape.d.ts +4 -0
  648. package/dist/run/stream-shape.js +160 -0
  649. package/dist/run/streams.d.ts +257 -0
  650. package/dist/run/streams.js +12 -0
  651. package/dist/run/study-files.d.ts +35 -0
  652. package/dist/run/study-files.js +164 -0
  653. package/dist/run/terminal-contract.d.ts +25 -0
  654. package/dist/run/terminal-contract.js +47 -0
  655. package/dist/run/text.d.ts +2 -0
  656. package/dist/run/text.js +4 -0
  657. package/dist/run/transient-comms-secrets.js +72 -0
  658. package/dist/run/type-guards.d.ts +6 -0
  659. package/dist/run/type-guards.js +18 -0
  660. package/dist/run-lab.d.ts +110 -0
  661. package/dist/run-lab.js +148 -0
  662. package/dist/subject/clone.d.ts +37 -0
  663. package/dist/subject/clone.js +62 -0
  664. package/dist/subject/desktop-cli.d.ts +17 -0
  665. package/dist/subject/desktop-cli.js +51 -0
  666. package/dist/subject/local-tree-archive.d.ts +82 -0
  667. package/dist/subject/local-tree-archive.js +431 -0
  668. package/dist/subject/local-tree.d.ts +28 -0
  669. package/dist/subject/local-tree.js +58 -0
  670. package/dist/subject/node-bootstrap.d.ts +12 -0
  671. package/dist/subject/node-bootstrap.js +66 -0
  672. package/dist/subject/runtime.d.ts +13 -0
  673. package/dist/subject/runtime.js +50 -0
  674. package/dist/subject/serve.d.ts +39 -0
  675. package/dist/subject/serve.js +249 -0
  676. package/dist/subject/state.d.ts +23 -0
  677. package/dist/subject/state.js +58 -0
  678. package/dist/subject/steps.d.ts +37 -0
  679. package/dist/subject/steps.js +39 -0
  680. package/dist/substrates/command-failure.d.ts +23 -0
  681. package/dist/substrates/command-failure.js +45 -0
  682. package/dist/substrates/desktop-session.d.ts +41 -0
  683. package/dist/substrates/desktop-session.js +59 -0
  684. package/dist/substrates/detached.d.ts +55 -0
  685. package/dist/substrates/detached.js +139 -0
  686. package/dist/substrates/e2b/cdp-probe.d.ts +99 -0
  687. package/dist/substrates/e2b/cdp-probe.js +556 -0
  688. package/dist/substrates/e2b/desktop-browser.d.ts +81 -0
  689. package/dist/substrates/e2b/desktop-browser.js +410 -0
  690. package/dist/substrates/e2b/desktop-cdp.d.ts +77 -0
  691. package/dist/substrates/e2b/desktop-cdp.js +211 -0
  692. package/dist/substrates/e2b/desktop-executor.d.ts +92 -0
  693. package/dist/substrates/e2b/desktop-executor.js +302 -0
  694. package/dist/substrates/e2b/desktop-geometry.d.ts +83 -0
  695. package/dist/substrates/e2b/desktop-geometry.js +331 -0
  696. package/dist/substrates/e2b/desktop-media.d.ts +29 -0
  697. package/dist/substrates/e2b/desktop-media.js +151 -0
  698. package/dist/substrates/e2b/desktop-recording.d.ts +18 -0
  699. package/dist/substrates/e2b/desktop-recording.js +238 -0
  700. package/dist/substrates/e2b/desktop-resources.d.ts +11 -0
  701. package/dist/substrates/e2b/desktop-resources.js +35 -0
  702. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +15 -0
  703. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +66 -0
  704. package/dist/substrates/e2b/lifetime.d.ts +12 -0
  705. package/dist/substrates/e2b/lifetime.js +18 -0
  706. package/dist/substrates/e2b/sandbox.d.ts +102 -0
  707. package/dist/substrates/e2b/sandbox.js +202 -0
  708. package/dist/substrates/e2b/sdk.d.ts +194 -0
  709. package/dist/substrates/e2b/sdk.js +168 -0
  710. package/dist/substrates/e2b/shell.d.ts +10 -0
  711. package/dist/substrates/e2b/shell.js +61 -0
  712. package/dist/substrates/local/captured-inbox.d.ts +6 -0
  713. package/dist/substrates/local/captured-inbox.js +87 -0
  714. package/dist/substrates/local/firecracker-desktop.d.ts +25 -0
  715. package/dist/substrates/local/firecracker-desktop.js +315 -0
  716. package/dist/substrates/local/runtime-config.d.ts +6 -0
  717. package/dist/substrates/local/runtime-config.js +91 -0
  718. package/dist/substrates/local/runtime-host.d.ts +30 -0
  719. package/dist/substrates/local/runtime-host.js +143 -0
  720. package/dist/substrates/local/runtime-release.d.ts +5 -0
  721. package/dist/substrates/local/runtime-release.js +32 -0
  722. package/dist/substrates/local/runtime-ssh.d.ts +9 -0
  723. package/dist/substrates/local/runtime-ssh.js +129 -0
  724. package/dist/substrates/local/runtime.d.ts +25 -0
  725. package/dist/substrates/local/runtime.js +190 -0
  726. package/dist/substrates/shell.d.ts +44 -0
  727. package/dist/substrates/shell.js +22 -0
  728. package/dist/tui/actions.d.ts +39 -0
  729. package/dist/tui/actions.js +203 -0
  730. package/dist/tui/contract.d.ts +144 -0
  731. package/dist/tui/contract.js +52 -0
  732. package/dist/tui/launch.js +172 -0
  733. package/dist/tui/project.d.ts +10 -0
  734. package/dist/tui/project.js +17 -0
  735. package/dist/tui-app.js +125 -125
  736. package/dist/verify/actor.d.ts +27 -0
  737. package/dist/verify/actor.js +292 -0
  738. package/dist/verify/artifacts.d.ts +47 -0
  739. package/dist/verify/artifacts.js +373 -0
  740. package/dist/verify/costs.d.ts +30 -0
  741. package/dist/verify/costs.js +129 -0
  742. package/dist/verify/liveness.d.ts +7 -0
  743. package/dist/verify/liveness.js +72 -0
  744. package/dist/verify/rerun.d.ts +3 -0
  745. package/dist/verify/rerun.js +46 -0
  746. package/dist/verify/shared-world-concurrent.d.ts +11 -0
  747. package/dist/verify/shared-world-concurrent.js +346 -0
  748. package/dist/verify/shared-world.d.ts +8 -0
  749. package/dist/verify/shared-world.js +295 -0
  750. package/dist/verify/subject.d.ts +17 -0
  751. package/dist/verify/subject.js +123 -0
  752. package/dist/verify/verify.d.ts +34 -0
  753. package/dist/verify/verify.js +333 -0
  754. package/docs/README.md +67 -0
  755. package/docs/architecture/actor-contract.md +215 -174
  756. package/docs/architecture/browser-control.md +51 -37
  757. package/docs/architecture/comms-inbox.md +8 -8
  758. package/docs/architecture/desktop-recording.md +2 -2
  759. package/docs/architecture/desktop-sessions.md +33 -21
  760. package/docs/architecture/external-public-shared-world.md +80 -64
  761. package/docs/architecture/github-feedback-loop.md +40 -27
  762. package/docs/architecture/guest-desktop.md +22 -10
  763. package/docs/architecture/local-browser-runtime.md +30 -21
  764. package/docs/architecture/observer-review.md +9 -9
  765. package/docs/architecture/observer.md +53 -57
  766. package/docs/architecture/participant-media.md +3 -3
  767. package/docs/architecture/project-layout.md +33 -137
  768. package/docs/architecture/real-email-receiving.md +7 -6
  769. package/docs/architecture/restricted-codex-analysis.md +211 -25
  770. package/docs/architecture/serve.md +89 -87
  771. package/docs/architecture/state-driven-executor.md +79 -64
  772. package/docs/architecture/task-protocol-support.md +18 -18
  773. package/docs/architecture/terminal-product-lane.md +92 -86
  774. package/docs/contracts/adapter-admission.md +8 -4
  775. package/docs/contracts/adapter-fixtures.md +6 -6
  776. package/docs/contracts/core.md +22 -24
  777. package/docs/contracts/feedback.md +33 -23
  778. package/docs/contracts/policy.md +28 -31
  779. package/docs/contracts/run-bundle.md +168 -82
  780. package/docs/contracts/schemas.md +594 -379
  781. package/docs/contracts/study-analysis.md +2 -2
  782. package/docs/contracts/study-costs.md +12 -12
  783. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +36 -0
  784. package/docs/decisions/0002-observer-is-one-self-contained-file.md +30 -0
  785. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +35 -0
  786. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +31 -0
  787. package/docs/decisions/README.md +16 -0
  788. package/docs/goals/current.md +22 -46
  789. package/docs/principles/actor-fidelity.md +51 -63
  790. package/docs/principles/engineering.md +81 -0
  791. package/docs/principles/invariants-and-defaults.md +48 -45
  792. package/docs/principles/self-driving-harness.md +11 -10
  793. package/docs/principles/three-roles.md +12 -13
  794. package/docs/product/automatic-analysis.md +39 -9
  795. package/docs/product/lobby-trivia-3player-external-public.md +14 -13
  796. package/docs/product/open-source-install-experience.md +34 -38
  797. package/docs/ramp/README.md +91 -213
  798. package/docs/release/open-source-readiness.md +5 -2
  799. package/docs/release/public-readiness-standard.md +1 -1
  800. package/examples/README.md +11 -0
  801. package/examples/participant/README.md +80 -0
  802. package/examples/participant/app.mjs +55 -0
  803. package/examples/participant/run.mjs +116 -0
  804. package/examples/scorer/README.md +29 -0
  805. package/examples/scorer/run.mjs +63 -0
  806. package/examples/scorer/scorer.mjs +20 -0
  807. package/package.json +61 -57
  808. package/skills/humanish/SKILL.md +112 -83
  809. package/skills/humanish/agents/openai.yaml +2 -2
  810. package/dist/actor-contract.d.ts +0 -288
  811. package/dist/actor-contract.js +0 -340
  812. package/dist/actor-contract.js.map +0 -1
  813. package/dist/actor-goal-source.js +0 -32
  814. package/dist/actor-goal-source.js.map +0 -1
  815. package/dist/actor-registry.d.ts +0 -77
  816. package/dist/actor-registry.js +0 -106
  817. package/dist/actor-registry.js.map +0 -1
  818. package/dist/actor-stop-cause.d.ts +0 -9
  819. package/dist/actor-stop-cause.js +0 -42
  820. package/dist/actor-stop-cause.js.map +0 -1
  821. package/dist/adapter-extension.d.ts +0 -76
  822. package/dist/adapter-extension.js +0 -273
  823. package/dist/adapter-extension.js.map +0 -1
  824. package/dist/adapter-scorer-loader.d.ts +0 -42
  825. package/dist/adapter-scorer-loader.js +0 -129
  826. package/dist/adapter-scorer-loader.js.map +0 -1
  827. package/dist/affordance.d.ts +0 -53
  828. package/dist/affordance.js +0 -145
  829. package/dist/affordance.js.map +0 -1
  830. package/dist/agent-session.js +0 -43
  831. package/dist/agent-session.js.map +0 -1
  832. package/dist/argv.d.ts +0 -1
  833. package/dist/argv.js +0 -8
  834. package/dist/argv.js.map +0 -1
  835. package/dist/artifact-reference.d.ts +0 -22
  836. package/dist/artifact-reference.js +0 -47
  837. package/dist/artifact-reference.js.map +0 -1
  838. package/dist/automatic-analysis-completion.d.ts +0 -25
  839. package/dist/automatic-analysis-completion.js +0 -56
  840. package/dist/automatic-analysis-completion.js.map +0 -1
  841. package/dist/automatic-analysis-config.d.ts +0 -38
  842. package/dist/automatic-analysis-config.js +0 -68
  843. package/dist/automatic-analysis-config.js.map +0 -1
  844. package/dist/automatic-study-analysis.d.ts +0 -17
  845. package/dist/automatic-study-analysis.js +0 -195
  846. package/dist/automatic-study-analysis.js.map +0 -1
  847. package/dist/browser-control-client.d.ts +0 -18
  848. package/dist/browser-control-client.js +0 -176
  849. package/dist/browser-control-client.js.map +0 -1
  850. package/dist/browser-control-dispatcher.d.ts +0 -19
  851. package/dist/browser-control-dispatcher.js +0 -147
  852. package/dist/browser-control-dispatcher.js.map +0 -1
  853. package/dist/browser-control-protocol.d.ts +0 -472
  854. package/dist/browser-control-protocol.js +0 -185
  855. package/dist/browser-control-protocol.js.map +0 -1
  856. package/dist/browser-control-recording-transfer.d.ts +0 -4
  857. package/dist/browser-control-recording-transfer.js +0 -42
  858. package/dist/browser-control-recording-transfer.js.map +0 -1
  859. package/dist/browser-control-transport.d.ts +0 -27
  860. package/dist/browser-control-transport.js +0 -177
  861. package/dist/browser-control-transport.js.map +0 -1
  862. package/dist/browser-evidence-hygiene.js +0 -43
  863. package/dist/browser-evidence-hygiene.js.map +0 -1
  864. package/dist/chrome-cdp-probe.d.ts +0 -97
  865. package/dist/chrome-cdp-probe.js +0 -536
  866. package/dist/chrome-cdp-probe.js.map +0 -1
  867. package/dist/claude-agent-sdk.d.ts +0 -94
  868. package/dist/claude-agent-sdk.js +0 -367
  869. package/dist/claude-agent-sdk.js.map +0 -1
  870. package/dist/cli.js.map +0 -1
  871. package/dist/codex-app-server-ui.d.ts +0 -39
  872. package/dist/codex-app-server-ui.js +0 -357
  873. package/dist/codex-app-server-ui.js.map +0 -1
  874. package/dist/codex-app-server.d.ts +0 -144
  875. package/dist/codex-app-server.js +0 -754
  876. package/dist/codex-app-server.js.map +0 -1
  877. package/dist/command-failure.d.ts +0 -43
  878. package/dist/command-failure.js +0 -73
  879. package/dist/command-failure.js.map +0 -1
  880. package/dist/comms-agentmail.d.ts +0 -25
  881. package/dist/comms-agentmail.js +0 -418
  882. package/dist/comms-agentmail.js.map +0 -1
  883. package/dist/comms-catch-host.d.ts +0 -52
  884. package/dist/comms-catch-host.js +0 -178
  885. package/dist/comms-catch-host.js.map +0 -1
  886. package/dist/comms-connections.d.ts +0 -52
  887. package/dist/comms-connections.js +0 -123
  888. package/dist/comms-connections.js.map +0 -1
  889. package/dist/comms-email-catch.d.ts +0 -54
  890. package/dist/comms-email-catch.js +0 -212
  891. package/dist/comms-email-catch.js.map +0 -1
  892. package/dist/comms-evidence.d.ts +0 -27
  893. package/dist/comms-evidence.js +0 -31
  894. package/dist/comms-evidence.js.map +0 -1
  895. package/dist/comms-fake-inbox.d.ts +0 -45
  896. package/dist/comms-fake-inbox.js +0 -184
  897. package/dist/comms-fake-inbox.js.map +0 -1
  898. package/dist/comms-images.d.ts +0 -7
  899. package/dist/comms-images.js +0 -39
  900. package/dist/comms-images.js.map +0 -1
  901. package/dist/comms-inbox.d.ts +0 -66
  902. package/dist/comms-inbox.js +0 -389
  903. package/dist/comms-inbox.js.map +0 -1
  904. package/dist/comms-lease-store.d.ts +0 -91
  905. package/dist/comms-lease-store.js +0 -495
  906. package/dist/comms-lease-store.js.map +0 -1
  907. package/dist/comms-receiving-evidence.d.ts +0 -46
  908. package/dist/comms-receiving-evidence.js +0 -35
  909. package/dist/comms-receiving-evidence.js.map +0 -1
  910. package/dist/comms-receiving-inbox.d.ts +0 -16
  911. package/dist/comms-receiving-inbox.js +0 -410
  912. package/dist/comms-receiving-inbox.js.map +0 -1
  913. package/dist/comms-receiving-runtime.d.ts +0 -25
  914. package/dist/comms-receiving-runtime.js +0 -45
  915. package/dist/comms-receiving-runtime.js.map +0 -1
  916. package/dist/comms-receiving-types.d.ts +0 -98
  917. package/dist/comms-receiving-types.js +0 -2
  918. package/dist/comms-receiving-types.js.map +0 -1
  919. package/dist/comms-receiving.d.ts +0 -58
  920. package/dist/comms-receiving.js +0 -554
  921. package/dist/comms-receiving.js.map +0 -1
  922. package/dist/comms-sandbox-catch.d.ts +0 -229
  923. package/dist/comms-sandbox-catch.js +0 -737
  924. package/dist/comms-sandbox-catch.js.map +0 -1
  925. package/dist/comms-setup.d.ts +0 -40
  926. package/dist/comms-setup.js +0 -121
  927. package/dist/comms-setup.js.map +0 -1
  928. package/dist/comms-types.d.ts +0 -72
  929. package/dist/comms-types.js +0 -10
  930. package/dist/comms-types.js.map +0 -1
  931. package/dist/computer-use-actor.d.ts +0 -76
  932. package/dist/computer-use-actor.js +0 -68
  933. package/dist/computer-use-actor.js.map +0 -1
  934. package/dist/computer-use.d.ts +0 -429
  935. package/dist/computer-use.js +0 -1749
  936. package/dist/computer-use.js.map +0 -1
  937. package/dist/concurrency.js +0 -27
  938. package/dist/concurrency.js.map +0 -1
  939. package/dist/concurrent-shared-world-lab.d.ts +0 -186
  940. package/dist/concurrent-shared-world-lab.js +0 -2179
  941. package/dist/concurrent-shared-world-lab.js.map +0 -1
  942. package/dist/core/git-state.d.ts +0 -33
  943. package/dist/core/git-state.js +0 -277
  944. package/dist/core/git-state.js.map +0 -1
  945. package/dist/core/git-workspace.d.ts +0 -31
  946. package/dist/core/git-workspace.js +0 -447
  947. package/dist/core/git-workspace.js.map +0 -1
  948. package/dist/core/index.d.ts +0 -4
  949. package/dist/core/index.js +0 -3
  950. package/dist/core/index.js.map +0 -1
  951. package/dist/core/run-primitives.d.ts +0 -66
  952. package/dist/core/run-primitives.js +0 -120
  953. package/dist/core/run-primitives.js.map +0 -1
  954. package/dist/cua-actor-lab.d.ts +0 -855
  955. package/dist/cua-actor-lab.js +0 -3545
  956. package/dist/cua-actor-lab.js.map +0 -1
  957. package/dist/cua-admission-limit.d.ts +0 -12
  958. package/dist/cua-admission-limit.js +0 -20
  959. package/dist/cua-admission-limit.js.map +0 -1
  960. package/dist/cua-desktop-lane.d.ts +0 -35
  961. package/dist/cua-desktop-lane.js +0 -13
  962. package/dist/cua-desktop-lane.js.map +0 -1
  963. package/dist/cua-diagnostics.d.ts +0 -38
  964. package/dist/cua-diagnostics.js +0 -68
  965. package/dist/cua-diagnostics.js.map +0 -1
  966. package/dist/cua-executor-error.js +0 -48
  967. package/dist/cua-executor-error.js.map +0 -1
  968. package/dist/cua-provider-error.d.ts +0 -16
  969. package/dist/cua-provider-error.js +0 -35
  970. package/dist/cua-provider-error.js.map +0 -1
  971. package/dist/cua-speech.js +0 -2
  972. package/dist/cua-speech.js.map +0 -1
  973. package/dist/desktop-recorder.d.ts +0 -39
  974. package/dist/desktop-recorder.js +0 -226
  975. package/dist/desktop-recorder.js.map +0 -1
  976. package/dist/desktop-recording-artifact.d.ts +0 -5
  977. package/dist/desktop-recording-artifact.js +0 -54
  978. package/dist/desktop-recording-artifact.js.map +0 -1
  979. package/dist/desktop-recording-types.d.ts +0 -24
  980. package/dist/desktop-recording-types.js +0 -14
  981. package/dist/desktop-recording-types.js.map +0 -1
  982. package/dist/desktop-session.d.ts +0 -41
  983. package/dist/desktop-session.js +0 -47
  984. package/dist/desktop-session.js.map +0 -1
  985. package/dist/device-presets.d.ts +0 -67
  986. package/dist/device-presets.js +0 -55
  987. package/dist/device-presets.js.map +0 -1
  988. package/dist/doctor-lab.d.ts +0 -38
  989. package/dist/doctor-lab.js +0 -126
  990. package/dist/doctor-lab.js.map +0 -1
  991. package/dist/e2b-cua-desktop.d.ts +0 -3
  992. package/dist/e2b-cua-desktop.js +0 -708
  993. package/dist/e2b-cua-desktop.js.map +0 -1
  994. package/dist/e2b-cua-provisioning.d.ts +0 -314
  995. package/dist/e2b-cua-provisioning.js +0 -1219
  996. package/dist/e2b-cua-provisioning.js.map +0 -1
  997. package/dist/e2b-desktop-executor.d.ts +0 -101
  998. package/dist/e2b-desktop-executor.js +0 -297
  999. package/dist/e2b-desktop-executor.js.map +0 -1
  1000. package/dist/e2b-desktop-launch.d.ts +0 -243
  1001. package/dist/e2b-desktop-launch.js +0 -234
  1002. package/dist/e2b-desktop-launch.js.map +0 -1
  1003. package/dist/e2b-desktop-media.d.ts +0 -14
  1004. package/dist/e2b-desktop-media.js +0 -58
  1005. package/dist/e2b-desktop-media.js.map +0 -1
  1006. package/dist/e2b-desktop-recording.d.ts +0 -16
  1007. package/dist/e2b-desktop-recording.js +0 -162
  1008. package/dist/e2b-desktop-recording.js.map +0 -1
  1009. package/dist/e2b-desktop-resources.d.ts +0 -11
  1010. package/dist/e2b-desktop-resources.js +0 -33
  1011. package/dist/e2b-desktop-resources.js.map +0 -1
  1012. package/dist/e2b-desktop-screenshot-cleanup.d.ts +0 -15
  1013. package/dist/e2b-desktop-screenshot-cleanup.js +0 -67
  1014. package/dist/e2b-desktop-screenshot-cleanup.js.map +0 -1
  1015. package/dist/e2b-desktop-session.d.ts +0 -7
  1016. package/dist/e2b-desktop-session.js +0 -29
  1017. package/dist/e2b-desktop-session.js.map +0 -1
  1018. package/dist/e2b-detached.d.ts +0 -53
  1019. package/dist/e2b-detached.js +0 -130
  1020. package/dist/e2b-detached.js.map +0 -1
  1021. package/dist/e2b-terminal-lab.d.ts +0 -395
  1022. package/dist/e2b-terminal-lab.js +0 -2041
  1023. package/dist/e2b-terminal-lab.js.map +0 -1
  1024. package/dist/env-file.d.ts +0 -14
  1025. package/dist/env-file.js +0 -108
  1026. package/dist/env-file.js.map +0 -1
  1027. package/dist/export-bundle.d.ts +0 -7
  1028. package/dist/export-bundle.js +0 -441
  1029. package/dist/export-bundle.js.map +0 -1
  1030. package/dist/export.d.ts +0 -49
  1031. package/dist/export.js +0 -308
  1032. package/dist/export.js.map +0 -1
  1033. package/dist/feedback-proof.d.ts +0 -8
  1034. package/dist/feedback-proof.js +0 -44
  1035. package/dist/feedback-proof.js.map +0 -1
  1036. package/dist/feedback.d.ts +0 -76
  1037. package/dist/feedback.js +0 -496
  1038. package/dist/feedback.js.map +0 -1
  1039. package/dist/first-run-path.d.ts +0 -55
  1040. package/dist/first-run-path.js +0 -136
  1041. package/dist/first-run-path.js.map +0 -1
  1042. package/dist/frame-signature.d.ts +0 -24
  1043. package/dist/frame-signature.js +0 -128
  1044. package/dist/frame-signature.js.map +0 -1
  1045. package/dist/guest-bootstrap.d.ts +0 -55
  1046. package/dist/guest-bootstrap.js +0 -285
  1047. package/dist/guest-bootstrap.js.map +0 -1
  1048. package/dist/guest-browser-tools.d.ts +0 -8
  1049. package/dist/guest-browser-tools.js +0 -66
  1050. package/dist/guest-browser-tools.js.map +0 -1
  1051. package/dist/guest-chromium-text.d.ts +0 -27
  1052. package/dist/guest-chromium-text.js +0 -281
  1053. package/dist/guest-chromium-text.js.map +0 -1
  1054. package/dist/guest-desktop-executor.d.ts +0 -22
  1055. package/dist/guest-desktop-executor.js +0 -178
  1056. package/dist/guest-desktop-executor.js.map +0 -1
  1057. package/dist/guest-desktop-media.d.ts +0 -33
  1058. package/dist/guest-desktop-media.js +0 -281
  1059. package/dist/guest-desktop-media.js.map +0 -1
  1060. package/dist/guest-desktop-native.d.ts +0 -14
  1061. package/dist/guest-desktop-native.js +0 -131
  1062. package/dist/guest-desktop-native.js.map +0 -1
  1063. package/dist/guest-media-config.d.ts +0 -15
  1064. package/dist/guest-media-config.js +0 -8
  1065. package/dist/guest-media-config.js.map +0 -1
  1066. package/dist/guest-media-worker.js.map +0 -1
  1067. package/dist/guest-runtime-desktop.d.ts +0 -42
  1068. package/dist/guest-runtime-desktop.js +0 -314
  1069. package/dist/guest-runtime-desktop.js.map +0 -1
  1070. package/dist/guest-runtime-main.js.map +0 -1
  1071. package/dist/guest-runtime-revision.js.map +0 -1
  1072. package/dist/guest-runtime.d.ts +0 -31
  1073. package/dist/guest-runtime.js +0 -99
  1074. package/dist/guest-runtime.js.map +0 -1
  1075. package/dist/image-evidence.d.ts +0 -2
  1076. package/dist/image-evidence.js +0 -47
  1077. package/dist/image-evidence.js.map +0 -1
  1078. package/dist/index.js.map +0 -1
  1079. package/dist/init-templates.d.ts +0 -25
  1080. package/dist/init-templates.js +0 -542
  1081. package/dist/init-templates.js.map +0 -1
  1082. package/dist/init.d.ts +0 -38
  1083. package/dist/init.js +0 -532
  1084. package/dist/init.js.map +0 -1
  1085. package/dist/key-resolution.d.ts +0 -67
  1086. package/dist/key-resolution.js +0 -375
  1087. package/dist/key-resolution.js.map +0 -1
  1088. package/dist/lab-app-runner.d.ts +0 -78
  1089. package/dist/lab-app-runner.js +0 -403
  1090. package/dist/lab-app-runner.js.map +0 -1
  1091. package/dist/lab-config.d.ts +0 -968
  1092. package/dist/lab-config.js +0 -2714
  1093. package/dist/lab-config.js.map +0 -1
  1094. package/dist/lab-engine.d.ts +0 -97
  1095. package/dist/lab-engine.js +0 -285
  1096. package/dist/lab-engine.js.map +0 -1
  1097. package/dist/lab-preflight.d.ts +0 -70
  1098. package/dist/lab-preflight.js +0 -388
  1099. package/dist/lab-preflight.js.map +0 -1
  1100. package/dist/lab-summary.d.ts +0 -57
  1101. package/dist/lab-summary.js +0 -126
  1102. package/dist/lab-summary.js.map +0 -1
  1103. package/dist/labs.d.ts +0 -59
  1104. package/dist/labs.js +0 -385
  1105. package/dist/labs.js.map +0 -1
  1106. package/dist/listen.js +0 -84
  1107. package/dist/listen.js.map +0 -1
  1108. package/dist/local-agent-claude-session.d.ts +0 -45
  1109. package/dist/local-agent-claude-session.js +0 -203
  1110. package/dist/local-agent-claude-session.js.map +0 -1
  1111. package/dist/local-agent-cli.d.ts +0 -121
  1112. package/dist/local-agent-cli.js +0 -427
  1113. package/dist/local-agent-cli.js.map +0 -1
  1114. package/dist/local-captured-inbox.d.ts +0 -6
  1115. package/dist/local-captured-inbox.js +0 -65
  1116. package/dist/local-captured-inbox.js.map +0 -1
  1117. package/dist/local-firecracker-desktop.d.ts +0 -23
  1118. package/dist/local-firecracker-desktop.js +0 -191
  1119. package/dist/local-firecracker-desktop.js.map +0 -1
  1120. package/dist/local-firecracker-study.d.ts +0 -9
  1121. package/dist/local-firecracker-study.js +0 -135
  1122. package/dist/local-firecracker-study.js.map +0 -1
  1123. package/dist/local-runtime-config.d.ts +0 -6
  1124. package/dist/local-runtime-config.js +0 -60
  1125. package/dist/local-runtime-config.js.map +0 -1
  1126. package/dist/local-runtime-host.d.ts +0 -31
  1127. package/dist/local-runtime-host.js +0 -128
  1128. package/dist/local-runtime-host.js.map +0 -1
  1129. package/dist/local-runtime-release.d.ts +0 -7
  1130. package/dist/local-runtime-release.js +0 -33
  1131. package/dist/local-runtime-release.js.map +0 -1
  1132. package/dist/local-runtime-ssh.d.ts +0 -27
  1133. package/dist/local-runtime-ssh.js +0 -91
  1134. package/dist/local-runtime-ssh.js.map +0 -1
  1135. package/dist/local-runtime.d.ts +0 -25
  1136. package/dist/local-runtime.js +0 -133
  1137. package/dist/local-runtime.js.map +0 -1
  1138. package/dist/observer-data.d.ts +0 -114
  1139. package/dist/observer-data.js +0 -224
  1140. package/dist/observer-data.js.map +0 -1
  1141. package/dist/observer-library.js +0 -191
  1142. package/dist/observer-library.js.map +0 -1
  1143. package/dist/observer-serve.d.ts +0 -99
  1144. package/dist/observer-serve.js +0 -284
  1145. package/dist/observer-serve.js.map +0 -1
  1146. package/dist/observer-static.js +0 -357
  1147. package/dist/observer-static.js.map +0 -1
  1148. package/dist/observer.d.ts +0 -118
  1149. package/dist/observer.js +0 -947
  1150. package/dist/observer.js.map +0 -1
  1151. package/dist/openai-responses-cu.d.ts +0 -158
  1152. package/dist/openai-responses-cu.js +0 -714
  1153. package/dist/openai-responses-cu.js.map +0 -1
  1154. package/dist/orientation.d.ts +0 -29
  1155. package/dist/orientation.js +0 -95
  1156. package/dist/orientation.js.map +0 -1
  1157. package/dist/oss-lab.d.ts +0 -55
  1158. package/dist/oss-lab.js +0 -344
  1159. package/dist/oss-lab.js.map +0 -1
  1160. package/dist/oss-meta-lab-scoring.d.ts +0 -15
  1161. package/dist/oss-meta-lab-scoring.js +0 -145
  1162. package/dist/oss-meta-lab-scoring.js.map +0 -1
  1163. package/dist/oss-meta-lab.d.ts +0 -287
  1164. package/dist/oss-meta-lab.js +0 -4551
  1165. package/dist/oss-meta-lab.js.map +0 -1
  1166. package/dist/oss-remote-telemetry.d.ts +0 -77
  1167. package/dist/oss-remote-telemetry.js +0 -403
  1168. package/dist/oss-remote-telemetry.js.map +0 -1
  1169. package/dist/output-token-limit.js +0 -5
  1170. package/dist/output-token-limit.js.map +0 -1
  1171. package/dist/participant-assignment.d.ts +0 -12
  1172. package/dist/participant-assignment.js +0 -15
  1173. package/dist/participant-assignment.js.map +0 -1
  1174. package/dist/persona-resolve.d.ts +0 -44
  1175. package/dist/persona-resolve.js +0 -109
  1176. package/dist/persona-resolve.js.map +0 -1
  1177. package/dist/persona.d.ts +0 -35
  1178. package/dist/persona.js +0 -141
  1179. package/dist/persona.js.map +0 -1
  1180. package/dist/pi-agent-core.d.ts +0 -77
  1181. package/dist/pi-agent-core.js +0 -207
  1182. package/dist/pi-agent-core.js.map +0 -1
  1183. package/dist/pricing.d.ts +0 -145
  1184. package/dist/pricing.js +0 -277
  1185. package/dist/pricing.js.map +0 -1
  1186. package/dist/program.d.ts +0 -96
  1187. package/dist/program.js +0 -4029
  1188. package/dist/program.js.map +0 -1
  1189. package/dist/reasoning-effort.js +0 -26
  1190. package/dist/reasoning-effort.js.map +0 -1
  1191. package/dist/reclaim.d.ts +0 -31
  1192. package/dist/reclaim.js +0 -90
  1193. package/dist/reclaim.js.map +0 -1
  1194. package/dist/redaction.d.ts +0 -90
  1195. package/dist/redaction.js +0 -294
  1196. package/dist/redaction.js.map +0 -1
  1197. package/dist/restricted-codex-analysis.d.ts +0 -15
  1198. package/dist/restricted-codex-analysis.js +0 -13
  1199. package/dist/restricted-codex-analysis.js.map +0 -1
  1200. package/dist/restricted-codex-participant-policy.d.ts +0 -44
  1201. package/dist/restricted-codex-participant-policy.js +0 -43
  1202. package/dist/restricted-codex-participant-policy.js.map +0 -1
  1203. package/dist/restricted-codex-participant-run.d.ts +0 -20
  1204. package/dist/restricted-codex-participant-run.js +0 -79
  1205. package/dist/restricted-codex-participant-run.js.map +0 -1
  1206. package/dist/restricted-codex-participant.d.ts +0 -20
  1207. package/dist/restricted-codex-participant.js +0 -250
  1208. package/dist/restricted-codex-participant.js.map +0 -1
  1209. package/dist/restricted-codex-policy.d.ts +0 -64
  1210. package/dist/restricted-codex-policy.js +0 -176
  1211. package/dist/restricted-codex-policy.js.map +0 -1
  1212. package/dist/restricted-codex-session.d.ts +0 -44
  1213. package/dist/restricted-codex-session.js +0 -657
  1214. package/dist/restricted-codex-session.js.map +0 -1
  1215. package/dist/restricted-codex-transport.d.ts +0 -69
  1216. package/dist/restricted-codex-transport.js +0 -296
  1217. package/dist/restricted-codex-transport.js.map +0 -1
  1218. package/dist/run-detail.d.ts +0 -61
  1219. package/dist/run-detail.js +0 -137
  1220. package/dist/run-detail.js.map +0 -1
  1221. package/dist/run-index.d.ts +0 -71
  1222. package/dist/run-index.js +0 -206
  1223. package/dist/run-index.js.map +0 -1
  1224. package/dist/run-narration-secrets.js +0 -68
  1225. package/dist/run-narration-secrets.js.map +0 -1
  1226. package/dist/run-paths.d.ts +0 -56
  1227. package/dist/run-paths.js +0 -355
  1228. package/dist/run-paths.js.map +0 -1
  1229. package/dist/run-projection.d.ts +0 -186
  1230. package/dist/run-projection.js +0 -350
  1231. package/dist/run-projection.js.map +0 -1
  1232. package/dist/run-status.d.ts +0 -139
  1233. package/dist/run-status.js +0 -218
  1234. package/dist/run-status.js.map +0 -1
  1235. package/dist/run.d.ts +0 -1255
  1236. package/dist/run.js +0 -5947
  1237. package/dist/run.js.map +0 -1
  1238. package/dist/sandbox-receipts.d.ts +0 -19
  1239. package/dist/sandbox-receipts.js +0 -51
  1240. package/dist/sandbox-receipts.js.map +0 -1
  1241. package/dist/screenshot-image.d.ts +0 -11
  1242. package/dist/screenshot-image.js +0 -26
  1243. package/dist/screenshot-image.js.map +0 -1
  1244. package/dist/scripted-browser-actor.d.ts +0 -297
  1245. package/dist/scripted-browser-actor.js +0 -1399
  1246. package/dist/scripted-browser-actor.js.map +0 -1
  1247. package/dist/scripted-browser-lab.d.ts +0 -121
  1248. package/dist/scripted-browser-lab.js +0 -852
  1249. package/dist/scripted-browser-lab.js.map +0 -1
  1250. package/dist/secret-prompt.js +0 -36
  1251. package/dist/secret-prompt.js.map +0 -1
  1252. package/dist/selected-output-paths.d.ts +0 -52
  1253. package/dist/selected-output-paths.js +0 -366
  1254. package/dist/selected-output-paths.js.map +0 -1
  1255. package/dist/serve-exposure.d.ts +0 -62
  1256. package/dist/serve-exposure.js +0 -129
  1257. package/dist/serve-exposure.js.map +0 -1
  1258. package/dist/serve-http.js +0 -45
  1259. package/dist/serve-http.js.map +0 -1
  1260. package/dist/serve-tunnel.js +0 -113
  1261. package/dist/serve-tunnel.js.map +0 -1
  1262. package/dist/shared-world-lab.d.ts +0 -269
  1263. package/dist/shared-world-lab.js +0 -1422
  1264. package/dist/shared-world-lab.js.map +0 -1
  1265. package/dist/source-archive.d.ts +0 -82
  1266. package/dist/source-archive.js +0 -408
  1267. package/dist/source-archive.js.map +0 -1
  1268. package/dist/stats.d.ts +0 -82
  1269. package/dist/stats.js +0 -219
  1270. package/dist/stats.js.map +0 -1
  1271. package/dist/stop-conditions.d.ts +0 -39
  1272. package/dist/stop-conditions.js +0 -66
  1273. package/dist/stop-conditions.js.map +0 -1
  1274. package/dist/study-analysis-codex-config.d.ts +0 -11
  1275. package/dist/study-analysis-codex-config.js +0 -34
  1276. package/dist/study-analysis-codex-config.js.map +0 -1
  1277. package/dist/study-analysis-engine.d.ts +0 -47
  1278. package/dist/study-analysis-engine.js +0 -327
  1279. package/dist/study-analysis-engine.js.map +0 -1
  1280. package/dist/study-analysis-evidence.d.ts +0 -27
  1281. package/dist/study-analysis-evidence.js +0 -660
  1282. package/dist/study-analysis-evidence.js.map +0 -1
  1283. package/dist/study-analysis-job.d.ts +0 -97
  1284. package/dist/study-analysis-job.js +0 -214
  1285. package/dist/study-analysis-job.js.map +0 -1
  1286. package/dist/study-analysis-provider.d.ts +0 -40
  1287. package/dist/study-analysis-provider.js +0 -170
  1288. package/dist/study-analysis-provider.js.map +0 -1
  1289. package/dist/study-analysis-service.d.ts +0 -59
  1290. package/dist/study-analysis-service.js +0 -257
  1291. package/dist/study-analysis-service.js.map +0 -1
  1292. package/dist/study-analysis-sharing.d.ts +0 -11
  1293. package/dist/study-analysis-sharing.js +0 -35
  1294. package/dist/study-analysis-sharing.js.map +0 -1
  1295. package/dist/study-analysis-store.d.ts +0 -47
  1296. package/dist/study-analysis-store.js +0 -493
  1297. package/dist/study-analysis-store.js.map +0 -1
  1298. package/dist/study-analysis-validation.d.ts +0 -618
  1299. package/dist/study-analysis-validation.js +0 -384
  1300. package/dist/study-analysis-validation.js.map +0 -1
  1301. package/dist/study-analysis.d.ts +0 -206
  1302. package/dist/study-analysis.js +0 -4
  1303. package/dist/study-analysis.js.map +0 -1
  1304. package/dist/study-costs.js +0 -114
  1305. package/dist/study-costs.js.map +0 -1
  1306. package/dist/subject-runtime.d.ts +0 -23
  1307. package/dist/subject-runtime.js +0 -70
  1308. package/dist/subject-runtime.js.map +0 -1
  1309. package/dist/tasks.d.ts +0 -90
  1310. package/dist/tasks.js +0 -144
  1311. package/dist/tasks.js.map +0 -1
  1312. package/dist/telemetry.js +0 -324
  1313. package/dist/telemetry.js.map +0 -1
  1314. package/dist/terminal-agent-actor.d.ts +0 -41
  1315. package/dist/terminal-agent-actor.js +0 -25
  1316. package/dist/terminal-agent-actor.js.map +0 -1
  1317. package/dist/terminal-encoding.js +0 -80
  1318. package/dist/terminal-encoding.js.map +0 -1
  1319. package/dist/terminal-node-bootstrap.d.ts +0 -4
  1320. package/dist/terminal-node-bootstrap.js +0 -58
  1321. package/dist/terminal-node-bootstrap.js.map +0 -1
  1322. package/dist/terminal-participant-activity.d.ts +0 -6
  1323. package/dist/terminal-participant-activity.js +0 -34
  1324. package/dist/terminal-participant-activity.js.map +0 -1
  1325. package/dist/terminal-runtime-auth.d.ts +0 -13
  1326. package/dist/terminal-runtime-auth.js +0 -24
  1327. package/dist/terminal-runtime-auth.js.map +0 -1
  1328. package/dist/terminal-runtime.d.ts +0 -16
  1329. package/dist/terminal-runtime.js +0 -42
  1330. package/dist/terminal-runtime.js.map +0 -1
  1331. package/dist/terminal-token-usage.d.ts +0 -15
  1332. package/dist/terminal-token-usage.js +0 -94
  1333. package/dist/terminal-token-usage.js.map +0 -1
  1334. package/dist/tui-actions.d.ts +0 -39
  1335. package/dist/tui-actions.js +0 -178
  1336. package/dist/tui-actions.js.map +0 -1
  1337. package/dist/tui-contract.d.ts +0 -141
  1338. package/dist/tui-contract.js +0 -54
  1339. package/dist/tui-contract.js.map +0 -1
  1340. package/dist/tui-launch.js +0 -167
  1341. package/dist/tui-launch.js.map +0 -1
  1342. package/dist/tui-project.d.ts +0 -9
  1343. package/dist/tui-project.js +0 -18
  1344. package/dist/tui-project.js.map +0 -1
  1345. package/docs/architecture/examples/state-driven-local-app/README.md +0 -80
  1346. package/docs/architecture/examples/state-driven-local-app/app.mjs +0 -48
  1347. package/docs/architecture/examples/state-driven-local-app/runner.mjs +0 -105
  1348. package/docs/architecture/local-codex-tui-actor.md +0 -213
  1349. package/docs/architecture/oss-lab-poc.md +0 -250
  1350. package/docs/architecture/runtime-broker-core.md +0 -30
  1351. package/docs/release/0.100.0-local-setup.md +0 -31
  1352. package/docs/release/0.100.1-participant-continuity.md +0 -20
  1353. package/docs/release/0.101.0-codex-ui-tools.md +0 -28
  1354. package/docs/release/0.102.0-participant-media.md +0 -43
  1355. package/docs/release/0.103.0-desktop-recording.md +0 -29
  1356. package/docs/release/0.103.1-analysis-capture-allocation.md +0 -18
  1357. package/docs/release/0.103.2-analysis-ending-context.md +0 -21
  1358. package/docs/release/0.104.0-local-captured-inboxes.md +0 -29
  1359. package/docs/release/0.104.1-recording-startup.md +0 -24
  1360. package/docs/release/0.104.2-recording-timestamps.md +0 -32
  1361. package/docs/release/0.104.3-local-smtp-catch.md +0 -15
  1362. package/docs/release/0.20.0-external-public-shared-world.md +0 -43
  1363. package/docs/release/0.84.0-redacted-evidence.md +0 -42
  1364. package/docs/release/0.84.1-portable-feedback.md +0 -20
  1365. package/docs/release/0.85.0-observer-review.md +0 -56
  1366. package/docs/release/0.85.1-observer-continuity.md +0 -20
  1367. package/docs/release/0.86.0-participant-evidence.md +0 -50
  1368. package/docs/release/0.86.1-task-preflight-saved-recordings.md +0 -40
  1369. package/docs/release/0.87.0-participant-endings-and-phone-review.md +0 -64
  1370. package/docs/release/0.88.0-study-diagnostics.md +0 -43
  1371. package/docs/release/0.88.1-completion-evidence-and-local-app.md +0 -79
  1372. package/docs/release/0.88.2-sequential-study-budgets.md +0 -57
  1373. package/docs/release/0.89.0-study-findings.md +0 -79
  1374. package/docs/release/0.89.1-analysis-finished-notice.md +0 -24
  1375. package/docs/release/0.90.0-automatic-analysis.md +0 -21
  1376. package/docs/release/0.91.0-analysis-quality-and-defaults.md +0 -33
  1377. package/docs/release/0.91.1-study-review-polish.md +0 -28
  1378. package/docs/release/0.92.0-grid-playback.md +0 -22
  1379. package/docs/release/0.93.0-global-playback.md +0 -26
  1380. package/docs/release/0.93.1-observer-review-controls.md +0 -24
  1381. package/docs/release/0.94.0-reliability.md +0 -48
  1382. package/docs/release/0.95.0-connections-setup.md +0 -38
  1383. package/docs/release/0.96.0-real-email-receiving.md +0 -47
  1384. package/docs/release/0.96.1-browser-navigation.md +0 -22
  1385. package/docs/release/0.97.0-codex-account-analysis.md +0 -45
  1386. package/docs/release/0.98.0-local-browser-studies.md +0 -31
  1387. package/docs/release/0.99.0-local-browser-mac.md +0 -34
  1388. package/docs/release/0.99.1-action-recovery.md +0 -19
  1389. /package/dist/{agent-session.d.ts → actors/agent-session.d.ts} +0 -0
  1390. /package/dist/{cua-executor-error.d.ts → actors/computer-use/executor-error.d.ts} +0 -0
  1391. /package/dist/{cua-speech.d.ts → actors/computer-use/speech.d.ts} +0 -0
  1392. /package/dist/{actor-goal-source.d.ts → actors/goal-source.d.ts} +0 -0
  1393. /package/dist/{output-token-limit.d.ts → actors/output-token-limit.d.ts} +0 -0
  1394. /package/dist/{reasoning-effort.d.ts → actors/reasoning-effort.d.ts} +0 -0
  1395. /package/dist/{secret-prompt.d.ts → cli/secret-prompt.d.ts} +0 -0
  1396. /package/dist/{telemetry.d.ts → cli/telemetry.d.ts} +0 -0
  1397. /package/dist/{browser-evidence-hygiene.d.ts → evidence/browser-hygiene.d.ts} +0 -0
  1398. /package/dist/{serve-http.d.ts → observer/http.d.ts} +0 -0
  1399. /package/dist/{observer-library.d.ts → observer/library.d.ts} +0 -0
  1400. /package/dist/{listen.d.ts → observer/listen.d.ts} +0 -0
  1401. /package/dist/{observer-static.d.ts → observer/static.d.ts} +0 -0
  1402. /package/dist/{serve-tunnel.d.ts → observer/tunnel.d.ts} +0 -0
  1403. /package/dist/{terminal-encoding.d.ts → routes/terminal/encoding.d.ts} +0 -0
  1404. /package/dist/{concurrency.d.ts → run/concurrency.d.ts} +0 -0
  1405. /package/dist/{study-costs.d.ts → run/costs.d.ts} +0 -0
  1406. /package/dist/{run-narration-secrets.d.ts → run/transient-comms-secrets.d.ts} +0 -0
  1407. /package/dist/{tui-launch.d.ts → tui/launch.d.ts} +0 -0
@@ -1,968 +0,0 @@
1
- import { type LabAnalysis } from "./automatic-analysis-config.js";
2
- import type { LabTask } from "./tasks.js";
3
- import type { DwellWindow, StopWhen } from "./stop-conditions.js";
4
- import { type ReasoningEffort } from "./reasoning-effort.js";
5
- export declare const LAB_CONFIG_SCHEMA = "humanish.lab.v2";
6
- /**
7
- * Where the run acts: the host repo, a fresh clone, a running app a browser actor drives
8
- * (`app-url`), an already-running LOCAL dev server driven IN-PROCESS via a custom
9
- * CuaExecutor with NO clone and NO E2B desktop (`local-app`), or the operator's own local
10
- * working tree packed and provisioned in-sandbox in place of a clone (`local-tree`).
11
- * `local-app` routes to the cua backend and is library-assisted: a caller supplies
12
- * `cuaHooks.buildExecutor` + `buildProvider` (no built-in driver exists yet), and the engine
13
- * fails closed (HUMANISH_CUA_LAB_LOCAL_APP_NO_EXECUTOR) when run without them: a structured
14
- * error, never a desktop attempt. See docs/architecture/state-driven-executor.md.
15
- */
16
- export type LabSubjectSource = "this-repo" | "clone" | "app-url" | "local-app" | "terminal-product" | "desktop-cli" | "local-tree";
17
- /**
18
- * How a subject's WORLD relates across actor lanes. `per-lane-worlds` (the default; absent ==
19
- * this) is the only fan-out topology the computer-use route ships — N lanes, N independent
20
- * worlds, isolation + per-lane attribution. `shared-world` (#164) is the DECLARED override: ONE
21
- * provisioned, mutable service plane that N role SEATS take turns against IN DECLARED ORDER, so
22
- * their actions interact through shared state. Consumed ONLY on the shared-world route (clone ×
23
- * e2b-desktop × a computer-use actor); inert/warned everywhere else (invariant 6).
24
- */
25
- export type LabSubjectTopology = "per-lane-worlds" | "shared-world";
26
- export interface LabSubjectClone {
27
- /** git clone depth; 1 (shallow) by default. Consumed on the computer-use clone route. */
28
- depth?: number;
29
- /** how many independent clone lanes to fan out (one sandbox/desktop each). */
30
- fanout?: number;
31
- /** keep the disposable clone for debugging instead of discarding. */
32
- keep?: boolean;
33
- }
34
- /**
35
- * `local-tree`: how the operator's own working tree is packed and provisioned in-sandbox in
36
- * place of a clone. Internal shape (not re-exported from src/index.ts, same as LabSubjectClone).
37
- */
38
- export interface LabSubjectLocalTree {
39
- /** extra archive excludes (path prefixes/basenames) added on top of the always-on denylist. */
40
- exclude?: string[];
41
- /** keep the disposable sandbox on failure for debugging (mirrors subject.clone.keep). */
42
- keep?: boolean;
43
- /** upload size cap override in bytes; default 256 MiB. */
44
- maxArchiveBytes?: number;
45
- }
46
- /** How a cloned subject is installed/built/started inside the sandbox (computer-use route). */
47
- export interface LabSubjectServe {
48
- /** Optional bounded install step (e.g. "pnpm install --frozen-lockfile"). */
49
- install?: string;
50
- /** Optional bounded build step. */
51
- build?: string;
52
- /** Required long-lived start command — launched detached; the sandbox lifecycle owns it. */
53
- start: string;
54
- /** Loopback entry URL: the readiness-probe target and the URL the actor drives. The lab
55
- * serves the clone INSIDE the sandbox, so this is always loopback (not subject to
56
- * allowPublicTargets — that governs app-url subjects, i.e. external deployments). */
57
- url: string;
58
- /** Budget for the served app to answer the readiness probe. Default 180000. */
59
- readyTimeoutMs?: number;
60
- /** Override the install-step timeout (default 600000). Monorepos can exceed it. */
61
- installTimeoutMs?: number;
62
- /** Override the build-step timeout (default 600000). Large builds can exceed it. */
63
- buildTimeoutMs?: number;
64
- }
65
- /** When a state step runs, relative to the serve sequence (clone subjects, computer-use route). */
66
- export type LabStateStepWhen = "before-build" | "before-start" | "after-ready";
67
- export interface LabSubjectStateStep {
68
- /**
69
- * [a-z0-9-] step label (must start alphanumeric), <=40 chars, unique across steps; becomes
70
- * the detached-step name `subject-state-<name>` (interpolates into in-sandbox file paths —
71
- * the shape is load-bearing, validated at parse AND re-enforced in the engine).
72
- */
73
- name: string;
74
- /**
75
- * Author-trusted shell command (same trust class as serve.install/build/start — the
76
- * "serve commands are author-trusted" corollary). Runs detached in the subject directory
77
- * with an atomic status file, kill-on-timeout, and a capped log tail. Persisted in
78
- * evidence as a sha256-16 DIGEST only, never as text.
79
- */
80
- command: string;
81
- /**
82
- * Phase: before-build (after install — for builds that read the DB, e.g. SSG),
83
- * before-start (after build, before the server launches — migrations, SQL/file fixtures,
84
- * an in-sandbox `service postgresql start`), after-ready (after the readiness probe —
85
- * fixtures loaded through the RUNNING app's API). Default: before-start.
86
- */
87
- when?: LabStateStepWhen;
88
- /** Wall-clock budget per step. Default 300000. */
89
- timeoutMs?: number;
90
- }
91
- /**
92
- * A shared-world state CHECKPOINT: an author-trusted, READ-ONLY, AGGREGATE/DIGEST probe command
93
- * (counts, max-timestamps, hashes) run at baseline and after each role's turn. Reuses the
94
- * seed-step validation shape (name [a-z0-9-] ≤40, unique; command required). Persisted DIGEST-ONLY
95
- * (only sha256-16(scrub+redact(stdout)) ever lands — never the raw value), same lockdown as the
96
- * seed surface. Consumed ONLY on the shared-world route (#164); inert/warned elsewhere.
97
- */
98
- export interface LabSubjectStateCheckpoint {
99
- /**
100
- * [a-z0-9-] probe label (must start alphanumeric), <=40 chars, unique across checkpoints;
101
- * names the detached step (`checkpoint-<snapshot>-<name>`) — load-bearing shape, validated at
102
- * parse AND re-enforced in the engine.
103
- */
104
- name: string;
105
- /**
106
- * Author-trusted READ-ONLY shell command (same trust class as serve/seed — the "serve commands
107
- * are author-trusted" corollary). Its stdout is scrubbed + pattern-redacted, then digested
108
- * (sha256-16); the raw value never persists.
109
- */
110
- command: string;
111
- /**
112
- * Optional extra literal values to scrub from this probe's stdout before digesting (author-known
113
- * values that may appear in the probe output, beyond the harness-provisioned env values which are
114
- * always scrubbed). Names/values are NEVER persisted — only the digest is.
115
- */
116
- redact?: string[];
117
- }
118
- /** The subject's STATE story (clone subjects): seeded in-sandbox, or declared external. */
119
- export interface LabSubjectState {
120
- /** Ordered seed/migration/fixture steps. Order within a phase is declaration order. */
121
- seed?: LabSubjectStateStep[];
122
- /**
123
- * Env var NAMES whose values point at state the lab does NOT control (e.g. a shared dev
124
- * DB). Must be a subset of subject.env (so the declaration is mechanically backed by a
125
- * provisioned name, not a vibe). Flips state provenance to "unpinned".
126
- */
127
- external?: string[];
128
- /**
129
- * Shared-world state checkpoints (#164): read-only digest probes run at baseline + after each
130
- * role's turn to produce the harness-clocked interaction timeline. Consumed ONLY on the
131
- * shared-world route; inert/warned elsewhere (invariant 6). Shape-validated everywhere.
132
- */
133
- checkpoint?: LabSubjectStateCheckpoint[];
134
- }
135
- /**
136
- * `terminal-product`: the product-under-study a terminal agent must discover and use from PUBLIC
137
- * SURFACES ONLY (the terminal-product route's subject). The subject is NOT provisioned/cloned —
138
- * the agent drives the declared public surfaces, so provenance is UNPINNED (invariant 5). The
139
- * concrete product name + surfaces are operator data; committed fixtures use a NEUTRAL mock name.
140
- */
141
- export interface LabSubjectProduct {
142
- /** Public-safe product label (shape-validated like a lab id; interpolates into evidence). */
143
- name: string;
144
- /**
145
- * How the product gets onto the machine, run UNKEYED before the participant starts, in the
146
- * lane's working directory. Consumed on BOTH product routes: `desktop-cli` (a person at a
147
- * desktop) and `terminal-product` (an agent in a shell).
148
- *
149
- * Absent means the participant installs it themselves from the public surfaces, which is a
150
- * different study — one about the install, not about the tool. Present means the study starts
151
- * where you want it to start: asking a participant what studies a project contains, in an empty
152
- * directory, measures the lab rather than the product.
153
- * Both routes prepare Node/npm when install is absent; product installation remains the
154
- * participant's task. A missing template runtime must not become a product finding.
155
- */
156
- install?: string;
157
- /**
158
- * `desktop-cli` ONLY: the directory the participant's terminal opens in. Absent means the home
159
- * directory. (The terminal-product lane has its own fixed study workdir.)
160
- *
161
- * This exists because the first live study failed on it: the participant was asked what studies
162
- * the project contained, landed in an empty home directory, correctly reported that there was no
163
- * project, and stopped. The finding was about the lab, not the product. A study of a
164
- * project-scoped tool has to put the participant IN a project, the same way an app study opens
165
- * the app rather than a blank tab.
166
- */
167
- workdir?: string;
168
- /**
169
- * The product's PUBLIC surfaces — the only world the agent sees. Each must be an http(s) URL
170
- * (e.g. a docs page, an llms.txt, a skill manifest). Validated at parse; recorded in evidence.
171
- */
172
- publicSurfaces: string[];
173
- /**
174
- * `terminal-product` ONLY: a local file uploaded into the sandbox before `install` runs, and
175
- * exposed to it as `$HUMANISH_PRODUCT_UPLOAD`. A project-relative path; `..` and absolute paths
176
- * are refused, because this reads a file off the operator's disk and puts it on a machine an
177
- * autonomous agent is about to drive.
178
- *
179
- * It exists so a study can test a build that is NOT PUBLISHED YET. Installing `@latest` measures
180
- * the last release, which is exactly the wrong artifact for a pre-release gate — the point is to
181
- * meet the candidate before anyone else does. Any adopter shipping a CLI wants the same thing.
182
- */
183
- upload?: string;
184
- }
185
- export interface LabSubject {
186
- source: LabSubjectSource;
187
- /**
188
- * WORLD topology across actor lanes. Absent == `per-lane-worlds` (the isolation default; every
189
- * existing lab is byte-stable). `shared-world` is the declared override (#164): one mutable
190
- * service plane, N role seats taking turns. Consumed ONLY on the shared-world route (clone ×
191
- * e2b-desktop × a computer-use actor + a roster of ≥2 lanes); inert/warned elsewhere.
192
- */
193
- topology?: LabSubjectTopology;
194
- /**
195
- * CONCURRENT shared-world route ONLY (#164 phase 2): the author's REQUIRED attestation that the
196
- * subject behind the internet-reachable `getHost` URL is SYNTHETIC seeded data. The concurrent
197
- * route exposes the subject on a tokenless public URL for the run's duration, so real/external
198
- * data must never sit behind it. This is author-trust + a provenance gate (verify also requires
199
- * `subject.state.provenance == "seeded"`), NOT a no-real-data guarantee. Required when
200
- * `topology: shared-world` + `execution.concurrency > 1`; inert/warned elsewhere.
201
- */
202
- exposure?: "synthetic";
203
- /**
204
- * EXTERNAL-PUBLIC shared-world route ONLY (#164 phase 2): the author's REQUIRED ownership
205
- * attestation when a real PUBLIC deployment (`source: app-url` + `topology: shared-world` +
206
- * `concurrency > 1` + `policies.allowPublicTargets: true`) is used directly as the shared plane.
207
- * The harness neither provisions nor exposes this target (no getHost, no clone, no seed), so it
208
- * cannot attest the data is synthetic; instead the operator MUST attest they own/operate it.
209
- * `owner` is a public-safe operator/repo label; `authorized` must be true. This is author-trust —
210
- * the harness cannot verify ownership — surfaced honestly in the evidence class. Required on the
211
- * external-public branch. On a non-`app-url` subject it is REJECTED (parse error); on any OTHER
212
- * `app-url` config that does not route to external-public shared-world it is IGNORED-WITH-A-WARNING
213
- * (forwardDeclaredWarnings), never silently consumed — it is meaningless without that plane.
214
- */
215
- publicTarget?: {
216
- owner: string;
217
- authorized: boolean;
218
- };
219
- /** `clone`: one or more owner/repo slugs (public or authorized-private). */
220
- repos?: string[];
221
- clone?: LabSubjectClone;
222
- /**
223
- * `app-url`: a loopback http(s) URL the computer-use actor drives (127.0.0.1/localhost
224
- * only — driving arbitrary public sites is not allowed). The URL must be reachable from
225
- * INSIDE the desktop sandbox; library callers provision it via the prepareDesktop hook.
226
- * For a config-only path use `clone` + `serve` — the lab serves the app itself.
227
- *
228
- * `local-app`: the loopback http(s) URL of an already-running LOCAL dev server the caller's
229
- * custom CuaExecutor drives in-process (no sandbox, no public-target option — always
230
- * loopback). Passed to `buildExecutor` so the bridge knows where the app lives.
231
- */
232
- appUrl?: string;
233
- /** `clone` (computer-use route): how the cloned app is served in-sandbox. */
234
- serve?: LabSubjectServe;
235
- /**
236
- * Env var NAMES the subject app needs, provisioned into the sandbox from the caller's
237
- * environment (--env-file). Names are recorded in evidence; values never are. Consumed
238
- * on the computer-use clone route.
239
- */
240
- env?: string[];
241
- /**
242
- * LITERAL, NON-SECRET env values committed alongside the lab — the configuration every real app
243
- * needs before it will boot: a public base URL, a transport selector, a feature flag. None of that
244
- * is secret, and routing it through `subject.env` would force an adopter to carry a private env
245
- * file just to reproduce a public study, which is the opposite of a reproducible lab.
246
- *
247
- * These values ARE recorded in evidence, because they are part of how the subject was configured,
248
- * so a value that looks like a secret or a local path is refused at parse rather than committed to
249
- * a public repo. Anything genuinely secret belongs in `subject.env`.
250
- */
251
- envValues?: Record<string, string>;
252
- /**
253
- * `clone` (computer-use route): the subject's state story — seed/migration/fixture steps
254
- * executed in-sandbox around the serve sequence, and/or declared external state. Recorded
255
- * in the run bundle as structured provenance (invariant 5): seeded with command digests,
256
- * UNPINNED for external state, declared-not-run for dry-run/failed provisioning.
257
- */
258
- state?: LabSubjectState;
259
- /**
260
- * `terminal-product` (terminal route): the product the terminal agent discovers + uses from
261
- * PUBLIC surfaces only. Consumed on the terminal route; rejected on every other source.
262
- */
263
- product?: LabSubjectProduct;
264
- /**
265
- * `local-tree` (computer-use route): local-tree packs the lab resolution cwd (the project
266
- * directory humanish runs from) instead of cloning a repo. `exclude` adds extra archive excludes
267
- * on top of the always-on denylist; `keep` preserves the sandbox on failure for debugging;
268
- * `maxArchiveBytes` caps the upload. Consumed on the local-tree route; rejected on every other
269
- * source.
270
- */
271
- localTree?: LabSubjectLocalTree;
272
- }
273
- export interface LabActorLaneFocus {
274
- id?: string;
275
- label?: string;
276
- /** Per-lane steer appended to the actor's mission. Consumed on the app-url route. */
277
- instruction?: string;
278
- }
279
- /**
280
- * One differentiated fan-out lane on the computer-use E2B route (per-lane worlds). Each lane
281
- * becomes an independent E2B desktop sandbox with its own persona/device/starting-steer. All
282
- * fields optional: an omitted persona/device/instruction inherits the actor-level default. `id`
283
- * defaults to `lane-01`..`lane-NN` and must be a public-safe token (it names per-lane evidence
284
- * paths). Consumed ONLY on the computer-use E2B route (inert/warned elsewhere).
285
- */
286
- export interface LabActorLane {
287
- /** Public-safe lane label (interpolates into per-lane evidence paths). Default lane-NN. */
288
- id?: string;
289
- /**
290
- * App-defined actor type label for grouping simulated users ("operator", "viewer",
291
- * "maintainer", etc.). This is NOT the execution actor dispatch key (`actors[0].type`);
292
- * it is adapter-owned taxonomy for roster/readback.
293
- */
294
- actorType?: string;
295
- /** App-defined surface label for grouping lanes that start from different product areas. */
296
- surface?: string;
297
- /** App-defined correlation id tying lanes to one shared case/account/work item. */
298
- caseGroup?: string;
299
- /** Persona id/label threaded into this lane's actor prompt. Default: actors[0].persona. */
300
- persona?: string;
301
- /** Named hosted-screen preset for this lane. XOR raw execution.desktop.resolution. */
302
- device?: string;
303
- /** Per-lane steer appended to this lane's mission (the roster's per-lane focus). */
304
- instruction?: string;
305
- /**
306
- * Deterministic lane completion guard. When set, this lane stops as soon as the runtime
307
- * observation matches any declared rule; actor-level stopWhen is used as the default.
308
- */
309
- stopWhen?: StopWhen;
310
- /** A declared observation window for THIS lane (#510); actor-level dwell is the default. */
311
- dwell?: DwellWindow;
312
- /**
313
- * How hard the model is asked to think in THIS lane; actor-level reasoningEffort is the default.
314
- *
315
- * The single-run control: same persona, same mission, two efforts, one set of conditions.
316
- */
317
- reasoningEffort?: ReasoningEffort;
318
- /**
319
- * App-url computer-use ONLY: absolute browser URL this lane opens instead of `subject.appUrl`.
320
- * This is the generic setup-produced-target handoff for crawler/swarm labs: product adapters may
321
- * start any topology they need, then hand Humanish explicit lane targets. Public/non-loopback
322
- * targets still require `policies.allowPublicTargets: true`. Inert/rejected on clone, local-app,
323
- * shared-world, scripted-browser, and terminal routes.
324
- */
325
- target?: string;
326
- /**
327
- * Shared-world ONLY (#164): this role's per-seat loopback entry route, resolved against
328
- * `subject.serve.url` and REQUIRED to be same-origin (loopback) with it — the seat opens
329
- * `serve.url + entry`. Validated at parse AND re-enforced in the engine. Inert/warned on every
330
- * non-shared-world route (the per-lane-worlds fan-out roster has no per-lane entry).
331
- */
332
- entry?: string;
333
- /**
334
- * EXTERNAL-PUBLIC shared-world ONLY (#164 phase 2): marks this lane the DESIGNATED HOST seat — it
335
- * creates the shared session (e.g. a multiplayer lobby) that the follower seats then join. Exactly
336
- * ONE lane in the roster may carry `host: true` (validated in externalPublicSharedWorldValidationReason).
337
- * The orchestrator watches the host seat's observed URL for the shared-session code and threads it
338
- * into the follower missions at a host-first barrier. Inert/warned on every other route.
339
- */
340
- host?: boolean;
341
- }
342
- /**
343
- * Compact authoring sugar for repeated lane groups. The parser expands each group into concrete
344
- * `lanes[]` with deterministic ids (`<group.id>-01`, `<group.id>-02`, ...). The runtime never
345
- * consumes this shape directly; it always sees ordinary `LabActorLane` entries.
346
- */
347
- export interface LabActorRosterGroup extends Omit<LabActorLane, "id"> {
348
- /** Public-safe group id; prefixes generated lane ids. */
349
- id: string;
350
- /** Number of lanes to generate for this group. */
351
- count: number;
352
- }
353
- export interface LabActor {
354
- /**
355
- * The actor label. On computer-use (including shared-world), scripted-browser, and
356
- * terminal-product routes this is a REAL dispatch key resolved against the closed first-party
357
- * actor registry. On synthetic and meta routes it remains a free-form descriptive label (e.g.
358
- * synthetic-persona or humanish-setup). The terminal route owns its live lifecycle after using
359
- * the descriptor for dispatch and capability enforcement.
360
- */
361
- type: string;
362
- /** Lane count — route-specific (see HONEST SCOPE header): synthetic simCount; scripted
363
- * surface roster {1 = desktop, 2 = desktop + mobile, default 1}; computer-use E2B route the
364
- * HOMOGENEOUS fan-out lane count (cap 16). XOR `lanes`. */
365
- count?: number;
366
- /** Computer-use E2B route: a DIFFERENTIATED fan-out roster (per-lane worlds). XOR `count`,
367
- * `roster`, and `laneFocus`. Cap 16 lanes. Consumed only on the cua E2B route
368
- * (inert/warned elsewhere). */
369
- lanes?: LabActorLane[];
370
- /** Persona id/label threaded into the actor prompt. Consumed on the app-url route. */
371
- persona?: string;
372
- /** Consumed on the app-url route (laneFocus.instruction appended to the mission). XOR `lanes`. */
373
- laneFocus?: LabActorLaneFocus;
374
- /** Free-form mission threaded into the actor prompt. Consumed on the app-url route. A mission on
375
- * its own is a complete, valid lab — `tasks` is additive, never required. */
376
- mission?: string;
377
- /**
378
- * The researcher's protocol: discrete tasks, each with what the participant is asked to do and
379
- * (optionally) how the researcher measures it. Additive to `mission`, which stays the brief.
380
- *
381
- * The two halves belong to different people. `goal` reaches the participant's prompt; `success`
382
- * never does — a moderator does not read the success criterion aloud, because telling someone how
383
- * they will be judged changes what they do. See src/tasks.ts.
384
- * Supported only on the first actor of per-lane CUA routes; other routes fail preflight.
385
- */
386
- tasks?: LabTask[];
387
- /** Provider model override. Consumed on the app-url route. */
388
- model?: string;
389
- /** First-party OpenAI CUA only: per-response output limit including reasoning, not a dollar cap. */
390
- maxOutputTokens?: number;
391
- /**
392
- * `local-agent` ONLY: which locally signed-in coding agent is the brain. Absent = codex.
393
- *
394
- * A separate field from `model` on purpose. The first cut of this route overloaded `model` to
395
- * mean BOTH which CLI and which model, which left no way to say "Claude Code, running Opus" —
396
- * two different choices wearing one name.
397
- */
398
- localAgent?: "codex" | "claude";
399
- /**
400
- * How hard the model is asked to think, per turn. Lane-level `reasoningEffort` overrides this.
401
- *
402
- * Absent means the PROVIDER's default, and absence is recorded as absence: a run that did not
403
- * declare an effort does not claim one. Support is model-dependent (see src/reasoning-effort.ts),
404
- * so a level a model does not accept fails on the first turn rather than being downgraded.
405
- *
406
- * This is a recruiting decision, not a tuning knob: it changes who the participant IS, the same
407
- * way a persona prompt does. Two lanes running the same persona and mission at different efforts
408
- * is therefore a CONTRAST between two participants, not a control for an instrument — a lane that
409
- * abandons at one level and completes at another has reported on both of them. The obligation it
410
- * creates is to declare and record, never to hold it constant. See
411
- * docs/principles/actor-fidelity.md.
412
- */
413
- reasoningEffort?: ReasoningEffort;
414
- /**
415
- * Deterministic completion guard used as the default for CUA lanes. Lane-level stopWhen
416
- * overrides this value.
417
- */
418
- stopWhen?: StopWhen;
419
- /**
420
- * A declared observation window (#510), the default for every lane; lane-level dwell overrides
421
- * it. `when` is a stopWhen-shaped condition (absent: the window opens after the first
422
- * observation); `ms` is the hold, `everyMs` the frame cadence (default 10 s), `then` whether
423
- * the participant continues afterwards (default) or the session ends. The harness takes no
424
- * action and requests no model turn during the window.
425
- */
426
- dwell?: DwellWindow;
427
- }
428
- export type LabExecutionTarget = "local" | "e2b-desktop" | "e2b-terminal";
429
- /** Terminal transport: the captured non-interactive exec stream (stdin disabled). NOT an
430
- * interactive duplex PTY — labeling captured exec output "pty" would be a claim/mechanism
431
- * mismatch (invariant 6 + the goal packet's PTY ruling), so this lane uses "exec-stream". */
432
- export type LabTerminalTransport = "exec-stream";
433
- /** Whether operator stdin reaches the in-sandbox agent. Disabled by default (the run is
434
- * autonomous + comparable to an unassisted baseline). "planned" records intent but sends no
435
- * input; "sent" is rejected because assisted-input capture and a non-comparable marker do not
436
- * ship (the safety contract forbids an assisted run masquerading as green). */
437
- export type LabTerminalStdin = "disabled" | "planned" | "sent";
438
- export interface LabExecutionTerminal {
439
- /** Transport label. Default and only shipped value is "exec-stream". */
440
- transport?: LabTerminalTransport;
441
- /** Operator stdin posture. Default "disabled". */
442
- stdin?: LabTerminalStdin;
443
- }
444
- /**
445
- * The terminal agent's runtime-auth channel. "openai-env" (the default) passes the raw runtime
446
- * key command-scoped. "openai-egress" keeps it in an E2B outbound header transform for the default
447
- * OpenAI endpoint and passes an inert placeholder to Codex. The latter still gives every sandbox
448
- * process a spendable OpenAI proxy capability; it is not a spend cap or an egress restriction.
449
- */
450
- export type LabRuntimeAuth = "openai-env" | "openai-egress";
451
- export type LabDesktopBrowser = "default" | "chrome" | "chromium" | "firefox";
452
- export interface LabExecutionDesktop {
453
- /**
454
- * Named device preset (mobile / small-mobile / narrow-mobile / tablet / desktop / wide) the
455
- * run renders at. Consumed on the computer-use route; default `desktop` (1440x950). On that
456
- * route only width/height physically render (the X screen is sized to the preset, so
457
- * width-based responsive CSS fires) — touch/DPR/UA are sim-parity prompt signals, not rendered.
458
- */
459
- device?: string;
460
- /** Raw hosted screen resolution [width, height] — an escape hatch that overrides `device`. */
461
- resolution?: [number, number];
462
- /**
463
- * Browser family to launch for hosted desktop actor lanes. Absent/default preserves the
464
- * historical desktop opener behavior. A concrete value means "launch this browser or fail"
465
- * instead of silently accepting the template's default URL opener.
466
- */
467
- browser?: LabDesktopBrowser;
468
- /** Sandbox server-side timeout. Consumed on the app-url route. */
469
- sandboxTimeoutMs?: number;
470
- /**
471
- * Custom E2B desktop TEMPLATE (image) the run launches on — a non-empty template NAME or ID —
472
- * instead of the stock `desktop` template. Lets a subject that needs runtimes the stock image
473
- * lacks (e.g. node/bun/a local Postgres baked into an adopter-maintained image) run as-is. Any
474
- * string is a valid template name/id (there is no allowlist). Consumed ONLY on the
475
- * `execution.target: e2b-desktop` computer-use routes (the cua/shared-world/concurrent backends
476
- * that call `Sandbox.create`); inert/warned on every route that creates no desktop. Threaded to
477
- * `Sandbox.create(template, opts)`; absent leaves the byte-stable `Sandbox.create(opts)` default.
478
- * A template name is public-safe (not a secret) and is recorded in the run bundle.
479
- */
480
- template?: string;
481
- /** Use the Codex app-server client mode for headed desktop actor surfaces. Consumed (meta). */
482
- codexAppServer?: boolean;
483
- /**
484
- * Mobile fidelity beyond viewport size (#221). With `mobileEmulation: true`, every hosted
485
- * Chromium computer-use lane ON A MOBILE PRESET (mobile / small-mobile / narrow-mobile) gets
486
- * CDP device emulation applied to its launch page before the participant arrives; desktop,
487
- * tablet and wide lanes in the same run are untouched and carry no fidelity block. Applied: the lane's device preset width/height as the CSS viewport, the preset's
488
- * device pixel ratio (or `deviceScaleFactor`), touch events (`touch`, default true) and a mobile
489
- * user agent (`userAgent`, default an iPhone Safari string). The bundle records what the page
490
- * then reported about itself under `desktopGeometry.fidelity`; a browser that cannot be
491
- * emulated (Firefox) fails the lane closed instead of shipping a desktop run labelled mobile.
492
- * A held CDP session also applies the overrides to later page targets. Their first observed
493
- * viewport and touch read-back is recorded separately; missing or different values warn.
494
- */
495
- fidelity?: LabDesktopFidelity;
496
- /** Synthetic media devices behind the browser's own permission prompt (#509). */
497
- media?: LabDesktopMedia;
498
- /** Optional retained screen video. Capture is independent of participant media input. */
499
- recording?: {
500
- audio: boolean;
501
- };
502
- }
503
- /**
504
- * A participant with a camera (#509): a property of the ENVIRONMENT, like the screen preset and
505
- * the browser, never support for any conferencing product. `camera.source: synthetic` generates
506
- * a test pattern in the sandbox with the image's own ffmpeg; a `.y4m` path on the host is
507
- * uploaded instead on hosted desktops. `microphone.source: speech` enables the participant's
508
- * own spoken replies and listening through native audio devices. File microphones are unsupported.
509
- */
510
- export interface LabDesktopMedia {
511
- camera?: {
512
- source: string;
513
- };
514
- microphone?: {
515
- source: string;
516
- };
517
- }
518
- export interface LabDesktopFidelity {
519
- mobileEmulation: boolean;
520
- /** Emulated devicePixelRatio; default: the device preset's. */
521
- deviceScaleFactor?: number;
522
- /** Emulate touch (coarse pointer, touch events); default true. */
523
- touch?: boolean;
524
- /** Full user-agent string to present; default: a mobile Safari string. */
525
- userAgent?: string;
526
- }
527
- export interface LabExecution {
528
- target?: LabExecutionTarget;
529
- /** Actor session wall-clock budget. Consumed on the app-url route. */
530
- timeoutMs?: number;
531
- /** FORWARD-DECLARED. */
532
- completionTimeoutMs?: number;
533
- /** FORWARD-DECLARED. */
534
- concurrency?: number;
535
- desktop?: LabExecutionDesktop;
536
- /**
537
- * Blast-radius budget for the computer-use lane. CONSUMED on the CUA route: `caps.maxUsd`, when
538
- * set, is a FAIL-CLOSED abort — the session stops the moment its running ESTIMATED spend crosses
539
- * it (the runaway-retry guard), and a cap on a model src/pricing.ts cannot price is REFUSED at
540
- * preflight rather than run uncapped. It is a PER-LANE cap: enforced inside each lane's loop, so
541
- * an N-lane fan-out can spend up to N × maxUsd before any lane aborts (the run warns with the
542
- * true ~N × cap ceiling). `caps.maxTotalUsd` is the shared STUDY budget (#299): one ledger
543
- * across every lane, the knob a researcher actually reasons with. Absent = UNCAPPED (the
544
- * historical CUA behavior); maxUsd: 0 still permits a request before reported usage trips it. Inert
545
- * (warned) on non-CUA routes. Reuses the same LabScenarioCaps shape as the terminal lane's
546
- * `scenario.caps` (not a fork).
547
- */
548
- caps?: LabScenarioCaps;
549
- /** `terminal-product` route: the terminal transport + stdin posture. Consumed on that route. */
550
- terminal?: LabExecutionTerminal;
551
- /** `terminal-product` route: runtime key placement, defaulting to openai-env. openai-egress
552
- * uses an external header transform; dry-runs record declarations only. Inert on other routes. */
553
- runtimeAuth?: LabRuntimeAuth;
554
- /** Terminal Codex package pin. Omit to resolve latest once, observe it, then execute that version. */
555
- runtime?: {
556
- version: string;
557
- };
558
- /**
559
- * `terminal-product` route: outbound routing allowlist passed to E2B with a deny-all fallback.
560
- * Domain filtering is a routing control, not strict destination isolation on shared hosting.
561
- * It does not constrain spending through an allowed runtime provider (#538), including when
562
- * openai-egress keeps the raw runtime key outside the sandbox.
563
- *
564
- * Absent means unrestricted, which is the historical behavior and stays the default, because a
565
- * wrong host list fails studies in ways that look like product bugs. Opt in per lab.
566
- *
567
- * Domain filtering covers HTTP on :80 (Host header) and TLS on :443 (SNI); anything else needs
568
- * an IP or CIDR. `*.example.com` matches subdomains at any depth and NOT the apex, which needs
569
- * its own entry.
570
- */
571
- egressAllow?: string[];
572
- }
573
- export type LabScenarioMode = "dry-run" | "live";
574
- /**
575
- * The blast-radius budget for a route that passes a live key to an in-sandbox command.
576
- * Per the safety contract, the live key is never exercised without a fail-closed cap in force.
577
- * All values are non-negative numbers (0 is the no-spend default). Live runs require maxUsd and a
578
- * positive maxMinutes; maxUsd/maxJobs are enforced against known ledger signals and maxMinutes is
579
- * enforced as the command wall clock.
580
- */
581
- export interface LabScenarioCaps {
582
- /** Max USD the run may spend (provider + product). 0 = no-spend. */
583
- maxUsd?: number;
584
- /**
585
- * STUDY-LEVEL model-spend budget (#299), the number a researcher actually reasons with: "this
586
- * study is N participants, roughly $X" — decided once, up front, where recruiting decisions are
587
- * made. Consumed on the CUA route: every lane's running ESTIMATED model spend feeds one shared
588
- * ledger, and the moment the run total crosses this, each lane stops at its next turn with an
589
- * honest `budget_reached` (status `incomplete` — the participant ran out of budget; never
590
- * `gave_up`, because a study-level stop is not the participant's doing). Estimated MODEL spend
591
- * only — desktop-minutes ride the cost summary but not this ledger. Independent of the per-lane
592
- * `maxUsd` backstop; either, both, or neither may be set. Inert (warned) on the terminal route,
593
- * where the single agent's maxUsd already caps the whole run.
594
- */
595
- maxTotalUsd?: number;
596
- /** Max billable product jobs the agent may trigger. 0 = none. */
597
- maxJobs?: number;
598
- /** Max wall-clock minutes for the agent session. */
599
- maxMinutes?: number;
600
- }
601
- export interface LabScenario {
602
- /** Reference a committed scenario by id (humanish/scenarios/<ref>.yaml) or path. CONSUMED
603
- * (and REQUIRED) on the scripted-browser route; FORWARD-DECLARED elsewhere. */
604
- ref?: string;
605
- /** Or inline the scenario body. FORWARD-DECLARED (PR #2). */
606
- inline?: Record<string, unknown>;
607
- /** dry-run = contract evidence (no provider spend); live = real run. Consumed. */
608
- mode?: LabScenarioMode;
609
- /** Spend/job/time caps. Consumed (recorded in the bundle) on the terminal-product route;
610
- * inert (warned) elsewhere. */
611
- caps?: LabScenarioCaps;
612
- }
613
- export interface LabPolicies {
614
- /**
615
- * Redact target repo labels in durable artifacts. Consumed on the meta route and on the
616
- * computer-use clone route (provenance), where it DEFAULTS to true when the clone
617
- * authenticates via GITHUB_TOKEN (a token-bearing clone is treated as private until
618
- * declared otherwise).
619
- */
620
- redactRepos?: boolean;
621
- /**
622
- * Blur+downscale persisted screenshots on the computer-use route. Default FALSE — the common
623
- * case is watching a sim of your OWN app locally (gitignored .humanish), where full fidelity is
624
- * the deliverable. Set true for unowned subjects or bundles meant to be shared as-is. The
625
- * provider always sees raw frames; this only governs what is persisted. Raw bundles stay
626
- * local (gitignored, commit-scan-guarded); a redact-on-export step for them is planned.
627
- */
628
- redactScreenshots?: boolean;
629
- /**
630
- * Allow an app-url subject to point at a non-loopback (public/preview/staging) URL the lab
631
- * owner declares. Default FALSE (loopback-only). The invariant is "the actor drives a target
632
- * the owner declared" — setting this IS that declaration (e.g. a Vercel preview of your app).
633
- */
634
- allowPublicTargets?: boolean;
635
- /**
636
- * How the browser's camera/microphone permission is answered (#509). `prompt` (default): the
637
- * participant meets Chrome's real dialog and answers it, which is where a real person hesitates
638
- * or refuses. `granted`: the dialog is bypassed (`--use-fake-ui-for-media-stream`, which Chrome
639
- * marks with an "unsupported command-line flag" banner), for studies about what happens after
640
- * the gate.
641
- */
642
- mediaPermission?: "prompt" | "granted";
643
- /**
644
- * Terminal-product credential-boundary declarations — all DEFAULT FALSE (deny-by-default). The
645
- * shipped live engine always passes only the runtime LLM key, command-scoped, and records these
646
- * booleans as evidence. Setting one true records intent but does not create an injection channel
647
- * or authorize any additional credential in the current route.
648
- */
649
- /** Recorded private-repo-access intent. No private-repo provisioning channel ships. */
650
- allowPrivateRepoAccess?: boolean;
651
- /** Recorded provider-credential intent. No provider-credential injection channel ships. */
652
- allowProviderCredentials?: boolean;
653
- /** Recorded payment-credential intent. No payment-credential injection channel ships. */
654
- allowPaymentCredentials?: boolean;
655
- /** Recorded GitHub-mutation intent. No GitHub-token injection channel ships. */
656
- allowGitHubMutation?: boolean;
657
- }
658
- export interface LabReview {
659
- /** Analysis defaults on for eligible live recordings; false disables the separate request. */
660
- analysis?: LabAnalysis | false;
661
- /** FORWARD-DECLARED (PR #2). */
662
- scoring?: string;
663
- /** FORWARD-DECLARED (PR #2). */
664
- milestones?: string;
665
- /** FORWARD-DECLARED (PR #2). */
666
- vocabulary?: string;
667
- /**
668
- * #316 code escape hatch: a repo-relative path to an adopter scorer module (.mjs recommended) that
669
- * exports any of `{score, deriveFeedback, deriveArtifacts}`. CONSUMED on the scorer-capable routes
670
- * (terminal / computer-use / shared-world); loaded fail-closed (typed error, pre-spend). The entry
671
- * is executable code — review a PR that adds one as code, not config.
672
- */
673
- scorer?: {
674
- ref: string;
675
- };
676
- }
677
- export interface LabDefaults {
678
- open?: boolean;
679
- }
680
- /** Off-app comms (email/SMS the persona lives in) the harness provides for the run (#297). */
681
- export interface LabComms {
682
- email?: LabCommsEmail;
683
- }
684
- export interface LabCommsSmtp {
685
- /** Fixed in-sandbox loopback SMTP port (default 2525). Known before sandbox create, like `port`. */
686
- port?: number;
687
- /** The subject-env var carrying the SMTP host. The harness sets it to 127.0.0.1. */
688
- hostEnv: string;
689
- /** The subject-env var carrying the SMTP port. The harness sets it to the port above. */
690
- portEnv: string;
691
- /** Optional subject-env vars for a username/password the app insists on sending. The catch accepts
692
- * any credentials (it is loopback-only), but many apps refuse to start without the vars set. */
693
- userEnv?: string;
694
- passwordEnv?: string;
695
- /** The value written to `userEnv`/`passwordEnv` when those are declared. Never a real secret. */
696
- user?: string;
697
- password?: string;
698
- }
699
- export type LabCommsEmail = LabCommsCaptureEmail | LabCommsReceivingEmail;
700
- export interface LabCommsReceivingEmail {
701
- kind: "real";
702
- connection: string;
703
- /** Additional exact first-hop destinations; automatic remote email assets remain blocked. */
704
- allowedOrigins?: string[];
705
- linkOrigin?: string;
706
- port?: never;
707
- injectEnv?: never;
708
- smtp?: never;
709
- recipients?: never;
710
- external?: never;
711
- }
712
- export interface LabCommsCaptureEmail {
713
- connection?: never;
714
- allowedOrigins?: never;
715
- /** Which implementation backs the inbox (a backend discriminator, distinct from `scenario.mode`):
716
- * `fake` (default) is an in-harness in-memory inbox in the Fowler test-double sense — an in-sandbox
717
- * catch captures the app's sends. Provider-backed receiving uses the separate
718
- * LabCommsReceivingEmail configuration selected by a saved connection. */
719
- kind: "fake";
720
- /**
721
- * The subject-env var the harness sets to the in-sandbox catch's base URL — ADOPTER-NAMED (an app
722
- * calling Resend's API directly reads `RESEND_API_URL`; an app using the SDK reads `RESEND_BASE_URL`).
723
- * The value is computed by the harness (a loopback URL), so it is NOT declared in `subject.env`.
724
- * REQUIRED on the provisioned routes; absent (and meaningless) when `external` is declared,
725
- * because there the adopter runs the catch and points their own app at it.
726
- */
727
- injectEnv?: string;
728
- /** Fixed in-sandbox loopback port the catch listens on (default 8025). Known before sandbox create. */
729
- port?: number;
730
- /**
731
- * SMTP transport, for the many self-hostable apps that send mail through SMTP rather than a
732
- * provider's HTTP API. The catch opens a loopback SMTP listener and normalizes what it receives
733
- * into the same captured-send shape the HTTP path produces, so the inbox surface, the drain, and
734
- * the evidence artifact are identical either way.
735
- *
736
- * `hostEnv` and `portEnv` are ADOPTER-NAMED, exactly like `injectEnv`: the harness sets them to
737
- * its own loopback and the chosen port. Declare the pair your app actually reads.
738
- */
739
- smtp?: LabCommsSmtp;
740
- /** Optional escape hatch: the exact absolute origin the app-under-test bakes into its email verify
741
- * links, when that differs from the serve origin (e.g. an app configured with an absolute
742
- * APP_URL/NEXT_PUBLIC_BASE_URL). The harness cannot infer it, so the operator declares it; it is
743
- * prepended to the inbox link-origin rewrite so the persona's clicked link resolves to a reachable
744
- * host. Omit when the app emits loopback links (the default derivation covers those). */
745
- linkOrigin?: string;
746
- /** Each lane's inbox address: the actor is TOLD to sign up with it (the injected inbox
747
- * instruction carries it) and the teardown drain matches captured mail against it. Omit the
748
- * whole list and the parser fills one deterministic address per lane (`<laneId>@example.test`)
749
- * so every seat can do email out of the box (#351). When declared: a `lane` naming a lane that
750
- * does not exist is a hard parse error (a mismatch silently disables the funnel for that seat),
751
- * zero covered lanes is a hard error, and partial coverage warns with the uncovered lanes. An
752
- * entry without `address` is legal but inert for the funnel — it is NOT matched by the drain
753
- * and its lane gets no inbox instruction; captured mail to an undeclared address is warned,
754
- * never silently dropped. */
755
- recipients?: LabCommsRecipient[];
756
- /**
757
- * ADOPTER-HOSTED ingress (#328). Declaring this says: the operator runs the catch and the inbox
758
- * themselves, so humanish neither provisions the subject nor injects `injectEnv` — it points the
759
- * persona at the declared inbox, drains the declared catch over HTTP at teardown, and writes the
760
- * same digest-only evidence. This is what makes comms work on the app-url / operator-provisioned
761
- * plane, where humanish holds no sandbox handle to host a catch in and the block was previously
762
- * warned inert. Run the same implementation with `humanish comms catch`.
763
- */
764
- external?: LabCommsExternal;
765
- }
766
- export interface LabCommsExternal {
767
- /** Where the adopter's app POSTs its email sends, and where humanish reads GET /deliveries. */
768
- catchBaseUrl: string;
769
- /** Where the persona opens its inbox. Defaults to catchBaseUrl (one server serves both). */
770
- inboxBaseUrl?: string;
771
- /** Env var NAME holding the bearer token for the drain read. The NAME is recorded as evidence;
772
- * the value is read at runtime and never persisted (the credential-boundary discipline). */
773
- authTokenEnv?: string;
774
- }
775
- export interface LabCommsRecipient {
776
- lane: string;
777
- /** The literal address the app sends to — what the evidence drain matches. Omit to reserve the lane
778
- * for the persona surface's default address (not drain-matched). */
779
- address?: string;
780
- }
781
- export interface LabConfig {
782
- schema: typeof LAB_CONFIG_SCHEMA;
783
- id: string;
784
- title?: string;
785
- description?: string;
786
- subject: LabSubject;
787
- actors: LabActor[];
788
- execution?: LabExecution;
789
- /** FORWARD-DECLARED (PR #2). */
790
- personas?: Record<string, unknown>[];
791
- scenario?: LabScenario;
792
- policies?: LabPolicies;
793
- review?: LabReview;
794
- defaults?: LabDefaults;
795
- comms?: LabComms;
796
- }
797
- export interface LabConfigParseSuccess {
798
- ok: true;
799
- config: LabConfig;
800
- warnings: string[];
801
- }
802
- export interface LabConfigParseFailure {
803
- ok: false;
804
- error: {
805
- code: "HUMANISH_LAB_INVALID";
806
- message: string;
807
- };
808
- }
809
- export type LabConfigParseResult = LabConfigParseSuccess | LabConfigParseFailure;
810
- /**
811
- * Validate a parsed YAML object into a LabConfig. Pure: the caller owns file IO. Structural
812
- * validation only. Fields the engine does not yet consume are accepted but reported in
813
- * `warnings` so `lab inspect` never silently swallows a setting that does nothing.
814
- */
815
- export declare function parseLabConfig(raw: unknown): LabConfigParseResult;
816
- export declare const MAX_CUA_LANES = 16;
817
- /** True when `type` resolves to a registered terminal actor (the "terminal" lane). Exported so
818
- * the engine + tests can resolve the dispatch the same way the parser does. */
819
- export declare function actorResolvesToTerminal(type: string | undefined): boolean;
820
- /**
821
- * True when this config routes to the computer-use backend: an app-url subject whose first
822
- * actor resolves to a registered computer-use actor, or a clone subject on a hosted desktop
823
- * whose first actor does. Single source of truth — selectLabBackend and the warning logic
824
- * both use it. (The app-url branch used to be unconditionally true; it narrowed when the
825
- * scripted-browser lane arrived. Behavior-preserving for every parse-valid config —
826
- * selectLabBackend keeps a bare app-url fallback to the cua backend so library-API configs
827
- * with unknown actors still hit its fail-closed ACTOR_UNSUPPORTED.)
828
- */
829
- /**
830
- * The declared fan-out lane count on the computer-use route: a `lanes[]` roster's length, else
831
- * a homogeneous `count`, else 1. The single source of truth shared by the parser, the engine,
832
- * and the pre-flight plan so the lane count is computed ONE way everywhere.
833
- */
834
- export declare function cuaLaneCount(config: LabConfig): number;
835
- /**
836
- * Cross-validate the computer-use fan-out declaration (per-lane worlds). Returns the failure
837
- * message, or null when valid. Enforced at parse AND re-enforced in the engine (runCuaActorLab
838
- * is itself exported npm surface). Structural lane shape (id/device validity, id uniqueness) is
839
- * already checked in parseLanes; this is the route-scoped XOR/cap/policy layer.
840
- */
841
- export declare function cuaLaneValidationReason(config: LabConfig): string | null;
842
- /**
843
- * Engine-level path-token validation for configs supplied directly through the
844
- * public TypeScript/JavaScript API instead of parseLabConfig.
845
- */
846
- export declare function laneRosterStructuralValidationReason(config: LabConfig): string | null;
847
- /**
848
- * Cross-validate a `topology: shared-world` declaration (#164). Returns the failure message, or
849
- * null when valid. Enforced at parse AND re-enforced in the engine (runSharedWorldLab is exported
850
- * npm surface). The shared-world override REQUIRES: a clone or local-tree source + e2b-desktop
851
- * target + a computer-use actor + a `subject.serve` block + an `actors[0].lanes` roster of ≥2 roles (the
852
- * roster IS the role roster — no parallel roles[] field), and every role `entry` must resolve
853
- * same-origin (loopback) with serve.url. Fail-closed: a half-declared shared-world is rejected,
854
- * never silently downgraded.
855
- */
856
- export declare function sharedWorldValidationReason(config: LabConfig): string | null;
857
- /**
858
- * The lane ids the computer-use engine will actually run: declared roster ids, else the generated
859
- * `lane-01..lane-NN` names. Mirrors the naming in cua-actor-lab.ts's laneSpecsAndPlan — a test
860
- * pins the two together — so comms recipient validation can never drift from the engine (#351).
861
- */
862
- export declare function effectiveComputerUseLaneIds(config: LabConfig): string[];
863
- /**
864
- * Declared capture devices must be implemented by the selected execution route.
865
- * Unsupported backends pass false when called directly, where the declared
866
- * topology may not identify the backend that is actually executing.
867
- */
868
- export declare function desktopMediaValidationReason(config: LabConfig, supportsMedia?: boolean): string | undefined;
869
- export declare function routesToComputerUse(config: LabConfig): boolean;
870
- /** Reused by direct library runners so unsupported receiving never becomes inert configuration. */
871
- export declare function receivingEmailValidationReason(config: LabConfig): string | undefined;
872
- /** Refuse task declarations that the selected execution path would discard (#737).
873
- * Direct runners pass their actual support rather than trusting the config's dispatch shape. */
874
- export declare function taskProtocolValidationReason(config: LabConfig, supportsTasks?: boolean): string | null;
875
- /** Refuse a claimed output bound when the route cannot pass it to the first-party provider. */
876
- export declare function outputTokenLimitValidationReason(config: LabConfig): string | null;
877
- /**
878
- * True when this config routes to the SHARED-WORLD backend (#164): a clone or local-tree subject
879
- * on a hosted desktop whose first actor resolves to a computer-use actor AND that declares the
880
- * `shared-world` topology. Mirror of routesToComputerUse; the single source of truth shared by
881
- * selectLabBackend (which checks it BEFORE the cua route) and the warning logic. The same
882
- * clone/local-tree × e2b-desktop × computer-use composition WITHOUT `topology: shared-world` stays per-lane-worlds
883
- * (the cua route) — the topology declaration is the override switch.
884
- */
885
- export declare function routesToSharedWorld(config: LabConfig): boolean;
886
- /** The getHost provisioned-subject shared-world shape (clone/local-tree served + exposed in-sandbox). */
887
- export declare function routesToProvisionedSharedWorld(config: LabConfig): boolean;
888
- /**
889
- * The EXTERNAL-PUBLIC shared-world shape (#164 phase 2): a real PUBLIC deployment used DIRECTLY as
890
- * the shared plane — `source: app-url` + `topology: shared-world` + a computer-use actor on
891
- * e2b-desktop + `policies.allowPublicTargets: true`. NO getHost, NO clone, NO subject sandbox, NO
892
- * seed. The operator-ownership attestation `subject.publicTarget` is required (validated in
893
- * externalPublicSharedWorldValidationReason, not here — this predicate is the router only, so a
894
- * half-declared external-public config still routes here to get its precise fail-closed reason
895
- * rather than silently downgrading to the per-lane cua route). Always concurrent (concurrency > 1 is
896
- * enforced by the validation reason).
897
- */
898
- export declare function routesToExternalPublicSharedWorld(config: LabConfig): boolean;
899
- /**
900
- * True when this config routes to the CONCURRENT shared-world backend (#164 phase 2): a shared-world
901
- * config with `execution.concurrency > 1` (N actor seats driving ONE plane AT ONCE). Two plane
902
- * classes: the getHost provisioned-subject shape (clone/local-tree) AND the external-public shape (a
903
- * real public deployment used directly as the plane — `source: app-url` + `allowPublicTargets`, no
904
- * getHost/clone/seed). An omitted `concurrency` is filled at parse with the seat count (all seats
905
- * live — the all-parallel default, #350), so multi-seat shared-world labs route here unless the
906
- * author explicitly declares `concurrency: 1`, which is the sequential PoC (getHost only).
907
- * selectLabBackend checks this BEFORE routesToSharedWorld.
908
- */
909
- export declare function routesToConcurrentSharedWorld(config: LabConfig): boolean;
910
- /**
911
- * Cross-validate a CONCURRENT shared-world declaration (#164 phase 2). Returns the failure message,
912
- * or null when valid. Includes the base shared-world checks PLUS the concurrent extras: a synthetic
913
- * subject attestation (FIX-3), a 0.0.0.0 serve bind (FIX-4 — getHost only routes to a port bound on
914
- * all interfaces), and no `subject.clone.keep`/`subject.localTree.keep` (FIX-9 - either would
915
- * orphan actor sandboxes). Enforced at parse AND re-enforced in the engine (runConcurrentSharedWorld
916
- * is exported npm surface).
917
- */
918
- export declare function concurrentSharedWorldValidationReason(config: LabConfig): string | null;
919
- /**
920
- * Cross-validate the EXTERNAL-PUBLIC shared-world declaration (#164 phase 2): a real PUBLIC
921
- * deployment used DIRECTLY as the shared plane (no getHost, no clone, no subject sandbox, no seed).
922
- * The honest analog of concurrentSharedWorldValidationReason for a plane the harness does NOT own:
923
- * it FORBIDS every provisioned-subject field (serve/state.seed/state.checkpoint/exposure/clone/repos
924
- * are inert with no sandbox — fail closed, never silently ignored, per invariant 6), and REQUIRES a
925
- * non-loopback appUrl + allowPublicTargets + the operator-ownership attestation subject.publicTarget +
926
- * concurrency > 1 + an actors[0].lanes roster of ≥2 with EXACTLY ONE host lane. The getHost synthetic
927
- * gate is deliberately unreachable here (there is no internet-reachable harness-owned URL to attest).
928
- * Enforced at parse AND re-enforced in the engine (runConcurrentSharedWorld is exported npm surface).
929
- */
930
- export declare function externalPublicSharedWorldValidationReason(config: LabConfig): string | null;
931
- /**
932
- * Resolve a shared-world seat's entry URL from `serve.url` + a role's `entry` (relative path or
933
- * same-origin absolute URL). Returns null when the combination is not a same-origin loopback URL
934
- * (the load-bearing public-safety boundary — a seat only ever drives the in-sandbox app).
935
- */
936
- export declare function resolveSeatUrl(serveUrl: string, entry: string | undefined): string | null;
937
- /**
938
- * True when this config routes to the scripted-browser backend: an app-url subject whose
939
- * first actor resolves to a registered scripted-browser actor (execution.target local or
940
- * absent — the parse layer enforces that pairing). Mirror of routesToComputerUse; the single
941
- * source of truth for selectLabBackend and the warning logic.
942
- */
943
- export declare function routesToScriptedBrowser(config: LabConfig): boolean;
944
- export declare function routesToLocalScriptedBrowser(config: LabConfig): boolean;
945
- export declare function routesToProvisionedScriptedBrowser(config: LabConfig): boolean;
946
- /**
947
- * True when this config routes to the terminal-product backend: a terminal-product subject whose
948
- * first actor resolves to a registered terminal actor (execution.target e2b-terminal or absent —
949
- * the parse layer enforces that pairing). Mirror of routesToComputerUse/routesToScriptedBrowser;
950
- * the single source of truth for selectLabBackend and the warning logic.
951
- */
952
- export declare function routesToTerminalProduct(config: LabConfig): boolean;
953
- export declare function isLoopbackUrl(value: string): boolean;
954
- /** A well-formed http(s) URL (any host). Shape gate before the loopback/public-target policy. */
955
- export declare function isHttpUrl(value: string): boolean;
956
- /**
957
- * Semantic validation for `subject.state`, shared by parseLabConfig and the engine
958
- * (runCuaActorLab re-enforces it on configs that arrive through the library API). Returns
959
- * the failure message, or null when the declaration is valid. Reads the candidate
960
- * defensively — library callers can hand the engine arbitrarily-shaped objects.
961
- */
962
- export declare function subjectStateInvalidReason(state: LabSubjectState, env: readonly string[] | undefined): string | null;
963
- /** The bounds a dwell window (#510) must sit inside: at least one frame, at most an hour. */
964
- export declare const DWELL_MIN_MS = 1000;
965
- export declare const DWELL_MAX_MS = 3600000;
966
- export declare const DWELL_DEFAULT_EVERY_MS = 10000;
967
- /** Analysis requires a live recording producer, including supported dry-run previews. */
968
- export declare function automaticAnalysisRouteReason(config: LabConfig): string | undefined;