humanish 0.106.1 → 0.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (668) hide show
  1. package/ARCHITECTURE.md +38 -32
  2. package/CHANGELOG.md +28 -0
  3. package/CONTEXT.md +51 -41
  4. package/README.md +152 -174
  5. package/SECURITY.md +16 -26
  6. package/TELEMETRY.md +8 -6
  7. package/dist/actors/affordance.d.ts +4 -4
  8. package/dist/actors/affordance.js +12 -12
  9. package/dist/actors/agent-session.d.ts +2 -2
  10. package/dist/actors/agent-session.js +7 -7
  11. package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
  12. package/dist/actors/codex/app-server-actor-trace.js +1 -1
  13. package/dist/actors/codex/app-server-client.js +2 -1
  14. package/dist/actors/codex/app-server-trace.d.ts +0 -1
  15. package/dist/actors/codex/app-server-trace.js +1 -3
  16. package/dist/actors/codex/app-server-ui.js +1 -1
  17. package/dist/actors/codex/app-server.js +2 -1
  18. package/dist/actors/codex/codex-admission.d.ts +91 -0
  19. package/dist/actors/codex/codex-admission.js +150 -0
  20. package/dist/actors/codex/protocol-compat.d.ts +27 -0
  21. package/dist/actors/codex/protocol-compat.js +357 -0
  22. package/dist/actors/codex/protocol-contract.d.ts +61 -0
  23. package/dist/actors/codex/protocol-contract.js +471 -0
  24. package/dist/actors/codex/restricted-executable.d.ts +28 -4
  25. package/dist/actors/codex/restricted-executable.js +104 -29
  26. package/dist/actors/codex/restricted-launch.d.ts +9 -2
  27. package/dist/actors/codex/restricted-launch.js +43 -4
  28. package/dist/actors/codex/restricted-notifications.d.ts +101 -0
  29. package/dist/actors/codex/restricted-notifications.js +277 -0
  30. package/dist/actors/codex/restricted-participant.d.ts +30 -0
  31. package/dist/actors/codex/restricted-participant.js +66 -6
  32. package/dist/actors/codex/restricted-policy.d.ts +11 -3
  33. package/dist/actors/codex/restricted-policy.js +2 -2
  34. package/dist/actors/codex/restricted-session.d.ts +16 -3
  35. package/dist/actors/codex/restricted-session.js +60 -22
  36. package/dist/actors/codex/restricted-transport.d.ts +29 -0
  37. package/dist/actors/codex/restricted-transport.js +139 -27
  38. package/dist/actors/codex/restricted-turn.d.ts +19 -4
  39. package/dist/actors/codex/restricted-turn.js +43 -30
  40. package/dist/actors/computer-use/actor.d.ts +17 -17
  41. package/dist/actors/computer-use/actor.js +6 -6
  42. package/dist/actors/computer-use/admission-limit.d.ts +1 -1
  43. package/dist/actors/computer-use/admission-limit.js +1 -1
  44. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  45. package/dist/actors/computer-use/loop/actions.js +10 -10
  46. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  47. package/dist/actors/computer-use/loop/backstop.js +15 -13
  48. package/dist/actors/computer-use/loop/ending.d.ts +7 -7
  49. package/dist/actors/computer-use/loop/ending.js +9 -9
  50. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  51. package/dist/actors/computer-use/loop/observation.js +9 -9
  52. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  53. package/dist/actors/computer-use/loop/provider-call.js +1 -1
  54. package/dist/actors/computer-use/loop/session.js +3 -3
  55. package/dist/actors/computer-use/loop/spend.d.ts +2 -2
  56. package/dist/actors/computer-use/loop/spend.js +4 -4
  57. package/dist/actors/computer-use/loop/trace.js +11 -10
  58. package/dist/actors/computer-use/loop/types.d.ts +37 -26
  59. package/dist/actors/computer-use/loop/usage.js +2 -2
  60. package/dist/actors/computer-use/loop.js +4 -4
  61. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  62. package/dist/actors/computer-use/openai-context.js +214 -0
  63. package/dist/actors/computer-use/openai-provider.d.ts +12 -9
  64. package/dist/actors/computer-use/openai-provider.js +47 -36
  65. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  66. package/dist/actors/computer-use/openai-requests.js +82 -15
  67. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  68. package/dist/actors/computer-use/openai-wire.js +36 -34
  69. package/dist/actors/contract.d.ts +86 -49
  70. package/dist/actors/contract.js +29 -23
  71. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  72. package/dist/actors/local-agent/claude-session.js +10 -9
  73. package/dist/actors/local-agent/cli.d.ts +8 -6
  74. package/dist/actors/local-agent/cli.js +24 -28
  75. package/dist/actors/local-agent/readiness.d.ts +2 -2
  76. package/dist/actors/local-agent/readiness.js +4 -4
  77. package/dist/actors/reasoning-effort.js +6 -6
  78. package/dist/actors/registry.d.ts +10 -10
  79. package/dist/actors/registry.js +18 -17
  80. package/dist/actors/scripted-browser/actor.d.ts +8 -8
  81. package/dist/actors/scripted-browser/actor.js +16 -16
  82. package/dist/actors/scripted-browser/browser-command.js +1 -1
  83. package/dist/actors/scripted-browser/journey.js +15 -4
  84. package/dist/actors/scripted-browser/steps.js +19 -1
  85. package/dist/actors/scripted-browser/types.d.ts +12 -2
  86. package/dist/actors/stop-conditions.d.ts +1 -1
  87. package/dist/actors/stop-conditions.js +1 -3
  88. package/dist/analysis/automatic-completion.d.ts +13 -8
  89. package/dist/analysis/automatic-completion.js +14 -8
  90. package/dist/analysis/automatic-config.d.ts +1 -1
  91. package/dist/analysis/automatic-config.js +2 -2
  92. package/dist/analysis/automatic.d.ts +10 -4
  93. package/dist/analysis/automatic.js +17 -13
  94. package/dist/analysis/codex-config.d.ts +6 -2
  95. package/dist/analysis/codex-config.js +22 -14
  96. package/dist/analysis/diagnostics.d.ts +23 -0
  97. package/dist/analysis/diagnostics.js +112 -0
  98. package/dist/analysis/evidence-sources.js +2 -2
  99. package/dist/analysis/evidence.js +6 -6
  100. package/dist/analysis/execute.d.ts +7 -1
  101. package/dist/analysis/execute.js +39 -12
  102. package/dist/analysis/job.d.ts +8 -5
  103. package/dist/analysis/job.js +15 -14
  104. package/dist/analysis/load.d.ts +1 -1
  105. package/dist/analysis/load.js +5 -5
  106. package/dist/analysis/provider.d.ts +9 -1
  107. package/dist/analysis/restricted-codex.d.ts +2 -0
  108. package/dist/analysis/restricted-codex.js +10 -1
  109. package/dist/analysis/service.d.ts +2 -0
  110. package/dist/analysis/service.js +35 -16
  111. package/dist/analysis/sharing.d.ts +2 -2
  112. package/dist/analysis/sharing.js +5 -5
  113. package/dist/analysis/store-executions.d.ts +5 -5
  114. package/dist/analysis/store-executions.js +12 -12
  115. package/dist/analysis/store.d.ts +4 -4
  116. package/dist/analysis/store.js +13 -13
  117. package/dist/cli/commands/analysis-signals.d.ts +2 -1
  118. package/dist/cli/commands/analysis-signals.js +4 -1
  119. package/dist/cli/commands/analyze.js +23 -18
  120. package/dist/cli/commands/codex.js +9 -9
  121. package/dist/cli/commands/comms.js +62 -34
  122. package/dist/cli/commands/feedback.js +20 -21
  123. package/dist/cli/commands/lab-format.d.ts +5 -4
  124. package/dist/cli/commands/lab-format.js +35 -23
  125. package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
  126. package/dist/cli/commands/lab-route-computer-use.js +32 -21
  127. package/dist/cli/commands/lab-route-preview.d.ts +1 -3
  128. package/dist/cli/commands/lab-route-preview.js +7 -7
  129. package/dist/cli/commands/lab-route-run.d.ts +6 -4
  130. package/dist/cli/commands/lab-route-run.js +6 -2
  131. package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
  132. package/dist/cli/commands/lab-route-scripted.js +0 -1
  133. package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
  134. package/dist/cli/commands/lab-route-shared-world.js +3 -4
  135. package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
  136. package/dist/cli/commands/lab-route-terminal.js +0 -1
  137. package/dist/cli/commands/lab-run.js +84 -54
  138. package/dist/cli/commands/lab-scorer.d.ts +2 -4
  139. package/dist/cli/commands/lab-scorer.js +1 -1
  140. package/dist/cli/commands/migrate.d.ts +4 -0
  141. package/dist/cli/commands/migrate.js +65 -0
  142. package/dist/cli/commands/observe.js +168 -107
  143. package/dist/cli/commands/run-command.d.ts +10 -0
  144. package/dist/cli/commands/run-command.js +85 -0
  145. package/dist/cli/commands/run-signals.d.ts +30 -0
  146. package/dist/cli/commands/run-signals.js +146 -0
  147. package/dist/cli/commands/runs.js +137 -136
  148. package/dist/cli/commands/setup.d.ts +2 -2
  149. package/dist/cli/commands/setup.js +26 -21
  150. package/dist/cli/commands/study.d.ts +3 -0
  151. package/dist/cli/commands/study.js +182 -0
  152. package/dist/cli/commands/tui.d.ts +4 -4
  153. package/dist/cli/commands/tui.js +21 -21
  154. package/dist/cli/commands/watch.js +64 -77
  155. package/dist/cli/deprecations.d.ts +18 -0
  156. package/dist/cli/deprecations.js +48 -0
  157. package/dist/cli/doctor.d.ts +18 -5
  158. package/dist/cli/doctor.js +111 -48
  159. package/dist/cli/first-run-path.d.ts +12 -10
  160. package/dist/cli/first-run-path.js +30 -28
  161. package/dist/cli/io.d.ts +46 -10
  162. package/dist/cli/io.js +109 -30
  163. package/dist/cli/observer-follow.d.ts +2 -2
  164. package/dist/cli/observer-follow.js +5 -6
  165. package/dist/cli/orientation.d.ts +6 -3
  166. package/dist/cli/orientation.js +43 -39
  167. package/dist/cli/product-sentence.d.ts +6 -0
  168. package/dist/cli/product-sentence.js +6 -0
  169. package/dist/cli/program.d.ts +6 -1
  170. package/dist/cli/program.js +112 -43
  171. package/dist/cli/telemetry.d.ts +17 -17
  172. package/dist/cli/telemetry.js +49 -41
  173. package/dist/cli.js +1 -1
  174. package/dist/comms/capture-surface.d.ts +14 -13
  175. package/dist/comms/capture-surface.js +23 -22
  176. package/dist/comms/catch-host.d.ts +8 -8
  177. package/dist/comms/catch-host.js +14 -14
  178. package/dist/comms/connections.js +4 -4
  179. package/dist/comms/email-catch.d.ts +3 -3
  180. package/dist/comms/email-catch.js +8 -8
  181. package/dist/comms/external-evidence.d.ts +27 -0
  182. package/dist/comms/external-evidence.js +93 -0
  183. package/dist/comms/extract.js +2 -2
  184. package/dist/comms/fake-inbox.d.ts +2 -2
  185. package/dist/comms/fake-inbox.js +2 -2
  186. package/dist/comms/lease-store.js +7 -7
  187. package/dist/comms/receiving-render.d.ts +1 -1
  188. package/dist/comms/receiving-render.js +2 -2
  189. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  190. package/dist/comms/sandbox-catch-script.js +6 -6
  191. package/dist/comms/sandbox-catch.d.ts +36 -37
  192. package/dist/comms/sandbox-catch.js +34 -35
  193. package/dist/comms/setup.js +42 -8
  194. package/dist/comms/thread-evidence.d.ts +1 -1
  195. package/dist/comms/thread-evidence.js +6 -6
  196. package/dist/comms/types.d.ts +6 -6
  197. package/dist/comms/types.js +4 -4
  198. package/dist/evidence/browser-hygiene.d.ts +1 -1
  199. package/dist/evidence/browser-hygiene.js +1 -1
  200. package/dist/evidence/frame-signature.d.ts +1 -1
  201. package/dist/evidence/frame-signature.js +4 -4
  202. package/dist/evidence/redaction.d.ts +3 -3
  203. package/dist/evidence/redaction.js +5 -5
  204. package/dist/evidence/secret-scrub.d.ts +9 -0
  205. package/dist/evidence/secret-scrub.js +96 -0
  206. package/dist/feedback/draft.js +41 -85
  207. package/dist/feedback/export-bundle.js +5 -5
  208. package/dist/feedback/export.d.ts +5 -1
  209. package/dist/feedback/export.js +16 -17
  210. package/dist/feedback/feedback.d.ts +3 -3
  211. package/dist/feedback/feedback.js +21 -3
  212. package/dist/guest/chromium-text.js +2 -2
  213. package/dist/guest/desktop-native.d.ts +1 -1
  214. package/dist/guest/runtime.js +1 -1
  215. package/dist/index.d.ts +14 -15
  216. package/dist/index.js +10 -11
  217. package/dist/keys/key-resolution.d.ts +7 -5
  218. package/dist/keys/key-resolution.js +40 -38
  219. package/dist/lab/adapter-extension.d.ts +35 -13
  220. package/dist/lab/adapter-extension.js +50 -134
  221. package/dist/lab/adapter-scorer-loader.d.ts +32 -12
  222. package/dist/lab/adapter-scorer-loader.js +56 -32
  223. package/dist/lab/composition-rules.js +58 -58
  224. package/dist/lab/config.js +85 -43
  225. package/dist/lab/deprecated-fields.d.ts +10 -0
  226. package/dist/lab/deprecated-fields.js +24 -0
  227. package/dist/lab/device-presets.d.ts +10 -10
  228. package/dist/lab/device-presets.js +11 -11
  229. package/dist/lab/discover.d.ts +13 -9
  230. package/dist/lab/discover.js +118 -60
  231. package/dist/lab/doctor.d.ts +53 -11
  232. package/dist/lab/doctor.js +193 -47
  233. package/dist/lab/init-plan.js +1 -3
  234. package/dist/lab/init-templates.js +147 -147
  235. package/dist/lab/init.d.ts +1 -1
  236. package/dist/lab/init.js +41 -9
  237. package/dist/lab/keys.d.ts +2 -0
  238. package/dist/lab/keys.js +43 -9
  239. package/dist/lab/lab-deps.d.ts +80 -0
  240. package/dist/lab/lab-deps.js +4 -0
  241. package/dist/lab/parse/actors.js +17 -16
  242. package/dist/lab/parse/comms.js +8 -7
  243. package/dist/lab/parse/execution.js +15 -14
  244. package/dist/lab/parse/study-v3.d.ts +23 -0
  245. package/dist/lab/parse/study-v3.js +259 -0
  246. package/dist/lab/parse/subject-state.d.ts +7 -7
  247. package/dist/lab/parse/subject-state.js +18 -17
  248. package/dist/lab/parse/subject.js +30 -29
  249. package/dist/lab/parse/values.d.ts +1 -2
  250. package/dist/lab/parse/values.js +3 -6
  251. package/dist/lab/persona-resolve.d.ts +7 -7
  252. package/dist/lab/persona-resolve.js +8 -8
  253. package/dist/lab/persona.js +1 -3
  254. package/dist/lab/plan-base.d.ts +0 -2
  255. package/dist/lab/plan-base.js +6 -4
  256. package/dist/lab/plan-participants.d.ts +7 -7
  257. package/dist/lab/plan-participants.js +2 -2
  258. package/dist/lab/plan-types.d.ts +26 -8
  259. package/dist/lab/plan.d.ts +4 -18
  260. package/dist/lab/plan.js +24 -79
  261. package/dist/lab/preflight-probes.js +11 -11
  262. package/dist/lab/preflight-result.d.ts +2 -1
  263. package/dist/lab/preflight-result.js +5 -6
  264. package/dist/lab/preflight.d.ts +7 -8
  265. package/dist/lab/preflight.js +6 -6
  266. package/dist/lab/requirements.d.ts +20 -0
  267. package/dist/lab/requirements.js +54 -0
  268. package/dist/lab/route-inputs.d.ts +23 -12
  269. package/dist/lab/route-inputs.js +48 -51
  270. package/dist/lab/routing.d.ts +42 -41
  271. package/dist/lab/routing.js +66 -68
  272. package/dist/lab/run-lab-events.d.ts +3 -11
  273. package/dist/lab/run-lab-events.js +2 -16
  274. package/dist/lab/run-lab-homes.d.ts +76 -0
  275. package/dist/lab/run-lab-homes.js +7 -0
  276. package/dist/lab/run-lab-options.d.ts +12 -66
  277. package/dist/lab/run-lab-options.js +58 -285
  278. package/dist/lab/summary.d.ts +15 -9
  279. package/dist/lab/summary.js +24 -17
  280. package/dist/lab/tasks.d.ts +15 -15
  281. package/dist/lab/tasks.js +14 -14
  282. package/dist/lab/types.d.ts +201 -195
  283. package/dist/lab/types.js +2 -0
  284. package/dist/lab/validation.d.ts +21 -21
  285. package/dist/lab/validation.js +61 -59
  286. package/dist/lab/warnings.d.ts +10 -0
  287. package/dist/lab/warnings.js +70 -41
  288. package/dist/library-aliases.d.ts +56 -0
  289. package/dist/library-aliases.js +22 -0
  290. package/dist/observer/artifact.d.ts +2 -2
  291. package/dist/observer/artifact.js +9 -9
  292. package/dist/observer/data.d.ts +6 -6
  293. package/dist/observer/data.js +7 -6
  294. package/dist/observer/exposure.d.ts +1 -1
  295. package/dist/observer/exposure.js +11 -11
  296. package/dist/observer/http.js +1 -1
  297. package/dist/observer/library.d.ts +1 -1
  298. package/dist/observer/library.js +4 -2
  299. package/dist/observer/listen.js +5 -4
  300. package/dist/observer/render.d.ts +1 -1
  301. package/dist/observer/render.js +12 -7
  302. package/dist/observer/run-routes.d.ts +4 -4
  303. package/dist/observer/run-routes.js +6 -6
  304. package/dist/observer/serve.d.ts +17 -0
  305. package/dist/observer/serve.js +41 -6
  306. package/dist/observer/tunnel.js +1 -1
  307. package/dist/observer-app.html +4 -4
  308. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  309. package/dist/routes/computer-use/bundle-parts.js +24 -17
  310. package/dist/routes/computer-use/bundle.d.ts +4 -11
  311. package/dist/routes/computer-use/bundle.js +12 -18
  312. package/dist/routes/computer-use/diagnostics.d.ts +1 -1
  313. package/dist/routes/computer-use/diagnostics.js +1 -1
  314. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
  315. package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
  316. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
  317. package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
  318. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
  319. package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
  320. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
  321. package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
  322. package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
  323. package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
  324. package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
  325. package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
  326. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
  327. package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
  328. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  329. package/dist/routes/computer-use/external-comms.js +19 -43
  330. package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
  331. package/dist/routes/computer-use/fanout-bundle.js +38 -42
  332. package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
  333. package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
  334. package/dist/routes/computer-use/in-process-desktop.js +3 -9
  335. package/dist/routes/computer-use/live-flush.d.ts +7 -5
  336. package/dist/routes/computer-use/live-flush.js +20 -28
  337. package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
  338. package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
  339. package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
  340. package/dist/routes/computer-use/local-tree-pack.js +4 -5
  341. package/dist/routes/computer-use/local-vm.d.ts +11 -8
  342. package/dist/routes/computer-use/local-vm.js +40 -67
  343. package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
  344. package/dist/routes/computer-use/participant-desktop.js +5 -25
  345. package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
  346. package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
  347. package/dist/routes/computer-use/participant-facts.d.ts +7 -1
  348. package/dist/routes/computer-use/participant-facts.js +12 -1
  349. package/dist/routes/computer-use/participant-model.d.ts +25 -11
  350. package/dist/routes/computer-use/participant-model.js +76 -34
  351. package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
  352. package/dist/routes/computer-use/participant-prompt.js +8 -8
  353. package/dist/routes/computer-use/participant-runs.d.ts +11 -11
  354. package/dist/routes/computer-use/participant-runs.js +18 -18
  355. package/dist/routes/computer-use/plan.d.ts +21 -29
  356. package/dist/routes/computer-use/plan.js +70 -78
  357. package/dist/routes/computer-use/preflight.d.ts +3 -5
  358. package/dist/routes/computer-use/preflight.js +40 -36
  359. package/dist/routes/computer-use/rerun-selection.js +11 -7
  360. package/dist/routes/computer-use/result.d.ts +1 -1
  361. package/dist/routes/computer-use/result.js +48 -38
  362. package/dist/routes/computer-use/route.d.ts +5 -5
  363. package/dist/routes/computer-use/route.js +36 -33
  364. package/dist/routes/computer-use/self-report.d.ts +8 -8
  365. package/dist/routes/computer-use/self-report.js +33 -33
  366. package/dist/routes/computer-use/setup.d.ts +9 -15
  367. package/dist/routes/computer-use/setup.js +106 -83
  368. package/dist/routes/computer-use/single-bundle.d.ts +13 -16
  369. package/dist/routes/computer-use/single-bundle.js +46 -53
  370. package/dist/routes/computer-use/subject-projection.d.ts +6 -8
  371. package/dist/routes/computer-use/subject-projection.js +24 -23
  372. package/dist/routes/computer-use/types.d.ts +195 -238
  373. package/dist/routes/computer-use/types.js +21 -13
  374. package/dist/routes/preview.d.ts +8 -2
  375. package/dist/routes/preview.js +8 -5
  376. package/dist/routes/scripted/bundle.d.ts +5 -8
  377. package/dist/routes/scripted/bundle.js +23 -27
  378. package/dist/routes/scripted/plan.d.ts +6 -8
  379. package/dist/routes/scripted/plan.js +15 -13
  380. package/dist/routes/scripted/result.d.ts +4 -1
  381. package/dist/routes/scripted/result.js +15 -11
  382. package/dist/routes/scripted/route.js +15 -17
  383. package/dist/routes/scripted/scenario.d.ts +1 -1
  384. package/dist/routes/scripted/scenario.js +3 -3
  385. package/dist/routes/scripted/setup.d.ts +3 -2
  386. package/dist/routes/scripted/setup.js +27 -26
  387. package/dist/routes/scripted/subject.d.ts +8 -3
  388. package/dist/routes/scripted/subject.js +10 -6
  389. package/dist/routes/scripted/surface-records.js +4 -4
  390. package/dist/routes/scripted/surface-sessions.d.ts +2 -2
  391. package/dist/routes/scripted/surface-sessions.js +4 -4
  392. package/dist/routes/scripted/types.d.ts +21 -40
  393. package/dist/routes/scripted/types.js +2 -3
  394. package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
  395. package/dist/routes/shared-world/bundle.d.ts +7 -7
  396. package/dist/routes/shared-world/bundle.js +60 -62
  397. package/dist/routes/shared-world/checkpoints.d.ts +5 -5
  398. package/dist/routes/shared-world/checkpoints.js +5 -5
  399. package/dist/routes/shared-world/comms.d.ts +8 -7
  400. package/dist/routes/shared-world/comms.js +38 -51
  401. package/dist/routes/shared-world/external-public.d.ts +6 -5
  402. package/dist/routes/shared-world/external-public.js +28 -25
  403. package/dist/routes/shared-world/handoff.d.ts +10 -9
  404. package/dist/routes/shared-world/handoff.js +89 -81
  405. package/dist/routes/shared-world/lobby-code.d.ts +7 -7
  406. package/dist/routes/shared-world/lobby-code.js +22 -22
  407. package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
  408. package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
  409. package/dist/routes/shared-world/plan.d.ts +2 -6
  410. package/dist/routes/shared-world/plan.js +8 -9
  411. package/dist/routes/shared-world/provenance.d.ts +4 -4
  412. package/dist/routes/shared-world/provenance.js +4 -4
  413. package/dist/routes/shared-world/provisioned.d.ts +3 -2
  414. package/dist/routes/shared-world/provisioned.js +55 -48
  415. package/dist/routes/shared-world/result.js +47 -36
  416. package/dist/routes/shared-world/route.js +54 -57
  417. package/dist/routes/shared-world/setup.d.ts +6 -5
  418. package/dist/routes/shared-world/setup.js +16 -18
  419. package/dist/routes/shared-world/types.d.ts +70 -141
  420. package/dist/routes/shared-world/types.js +5 -5
  421. package/dist/routes/terminal/adapter.d.ts +10 -10
  422. package/dist/routes/terminal/adapter.js +32 -129
  423. package/dist/routes/terminal/bundle.d.ts +10 -15
  424. package/dist/routes/terminal/bundle.js +43 -52
  425. package/dist/routes/terminal/credentials.d.ts +4 -4
  426. package/dist/routes/terminal/credentials.js +20 -20
  427. package/dist/routes/terminal/dry-run.d.ts +1 -1
  428. package/dist/routes/terminal/dry-run.js +13 -15
  429. package/dist/routes/terminal/encoding.d.ts +1 -1
  430. package/dist/routes/terminal/encoding.js +4 -4
  431. package/dist/routes/terminal/ledger.d.ts +8 -8
  432. package/dist/routes/terminal/ledger.js +22 -22
  433. package/dist/routes/terminal/live-finish.d.ts +1 -2
  434. package/dist/routes/terminal/live-finish.js +24 -23
  435. package/dist/routes/terminal/live-sandbox.d.ts +3 -2
  436. package/dist/routes/terminal/live-sandbox.js +31 -32
  437. package/dist/routes/terminal/participant-text.d.ts +23 -0
  438. package/dist/routes/terminal/participant-text.js +165 -0
  439. package/dist/routes/terminal/persona.js +1 -1
  440. package/dist/routes/terminal/plan.d.ts +2 -6
  441. package/dist/routes/terminal/plan.js +23 -19
  442. package/dist/routes/terminal/recorder.d.ts +6 -1
  443. package/dist/routes/terminal/recorder.js +12 -4
  444. package/dist/routes/terminal/result.js +12 -12
  445. package/dist/routes/terminal/route.js +30 -31
  446. package/dist/routes/terminal/runtime.d.ts +3 -2
  447. package/dist/routes/terminal/runtime.js +3 -3
  448. package/dist/routes/terminal/sandbox.d.ts +4 -4
  449. package/dist/routes/terminal/sandbox.js +10 -10
  450. package/dist/routes/terminal/session.js +22 -19
  451. package/dist/routes/terminal/token-usage.d.ts +1 -1
  452. package/dist/routes/terminal/token-usage.js +10 -11
  453. package/dist/routes/terminal/trace.d.ts +7 -10
  454. package/dist/routes/terminal/trace.js +11 -66
  455. package/dist/routes/terminal/types.d.ts +104 -114
  456. package/dist/routes/terminal/types.js +12 -7
  457. package/dist/run/active-runs.d.ts +13 -0
  458. package/dist/run/active-runs.js +12 -0
  459. package/dist/run/bundle-shape.d.ts +2 -1
  460. package/dist/run/bundle-shape.js +7 -7
  461. package/dist/run/bundle.d.ts +99 -92
  462. package/dist/run/bundle.js +10 -8
  463. package/dist/run/cost-summary.js +6 -5
  464. package/dist/run/costs.d.ts +6 -6
  465. package/dist/run/costs.js +17 -11
  466. package/dist/run/detail.d.ts +9 -9
  467. package/dist/run/detail.js +10 -10
  468. package/dist/run/dry-run-inputs.js +1 -1
  469. package/dist/run/dry-run.js +23 -30
  470. package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
  471. package/dist/run/{study-files.js → evidence-files.js} +5 -5
  472. package/dist/run/feedback-shape.js +1 -1
  473. package/dist/run/judge.d.ts +34 -16
  474. package/dist/run/judge.js +41 -14
  475. package/dist/run/locate.d.ts +2 -0
  476. package/dist/run/locate.js +3 -1
  477. package/dist/run/outcomes.d.ts +3 -3
  478. package/dist/run/outcomes.js +3 -3
  479. package/dist/run/participant-records.d.ts +2 -2
  480. package/dist/run/participant-records.js +2 -2
  481. package/dist/run/paths.d.ts +1 -1
  482. package/dist/run/paths.js +2 -2
  483. package/dist/run/pricing.d.ts +30 -15
  484. package/dist/run/pricing.js +49 -30
  485. package/dist/run/projection.d.ts +27 -27
  486. package/dist/run/projection.js +23 -23
  487. package/dist/run/reclaim.d.ts +6 -0
  488. package/dist/run/reclaim.js +15 -5
  489. package/dist/run/results.d.ts +5 -5
  490. package/dist/run/run-index.d.ts +9 -7
  491. package/dist/run/run-index.js +24 -25
  492. package/dist/run/run-not-found.d.ts +5 -0
  493. package/dist/run/run-not-found.js +15 -0
  494. package/dist/run/run.d.ts +7 -4
  495. package/dist/run/run.js +10 -6
  496. package/dist/run/sandbox-receipts.d.ts +5 -5
  497. package/dist/run/sandbox-receipts.js +6 -6
  498. package/dist/run/shared-world-evidence.d.ts +67 -66
  499. package/dist/run/shared-world-evidence.js +4 -4
  500. package/dist/run/shared-world-shape.d.ts +3 -3
  501. package/dist/run/shared-world-shape.js +16 -16
  502. package/dist/run/stats.d.ts +17 -11
  503. package/dist/run/stats.js +124 -66
  504. package/dist/run/status.d.ts +21 -32
  505. package/dist/run/status.js +34 -33
  506. package/dist/run/stored-runs.js +2 -1
  507. package/dist/run/stream-shape.js +1 -1
  508. package/dist/run/streams.d.ts +29 -22
  509. package/dist/run/study-provenance.d.ts +47 -0
  510. package/dist/run/study-provenance.js +63 -0
  511. package/dist/run/study-result.d.ts +16 -0
  512. package/dist/run/study-result.js +9 -0
  513. package/dist/run/terminal-contract.d.ts +5 -5
  514. package/dist/run/terminal-contract.js +4 -4
  515. package/dist/run/text.d.ts +2 -0
  516. package/dist/run/text.js +4 -0
  517. package/dist/run/transient-comms-secrets.d.ts +5 -0
  518. package/dist/run/transient-comms-secrets.js +12 -0
  519. package/dist/run-lab.d.ts +40 -38
  520. package/dist/run-lab.js +42 -40
  521. package/dist/study/convert.d.ts +33 -0
  522. package/dist/study/convert.js +432 -0
  523. package/dist/study/field-paths.d.ts +12 -0
  524. package/dist/study/field-paths.js +126 -0
  525. package/dist/study/files.d.ts +26 -0
  526. package/dist/study/files.js +43 -0
  527. package/dist/study/migrate.d.ts +48 -0
  528. package/dist/study/migrate.js +408 -0
  529. package/dist/study/owned-files.d.ts +38 -0
  530. package/dist/study/owned-files.js +182 -0
  531. package/dist/subject/clone.d.ts +1 -1
  532. package/dist/subject/desktop-cli.d.ts +2 -2
  533. package/dist/subject/desktop-cli.js +3 -3
  534. package/dist/subject/local-tree-archive.d.ts +1 -1
  535. package/dist/subject/local-tree-archive.js +5 -5
  536. package/dist/subject/local-tree.d.ts +3 -3
  537. package/dist/subject/local-tree.js +1 -1
  538. package/dist/subject/node-bootstrap.d.ts +1 -1
  539. package/dist/subject/node-bootstrap.js +4 -4
  540. package/dist/subject/runtime.js +10 -11
  541. package/dist/subject/serve.d.ts +1 -1
  542. package/dist/subject/serve.js +4 -4
  543. package/dist/subject/state.d.ts +1 -1
  544. package/dist/subject/steps.d.ts +8 -8
  545. package/dist/subject/steps.js +7 -7
  546. package/dist/substrates/command-failure.d.ts +3 -3
  547. package/dist/substrates/command-failure.js +3 -3
  548. package/dist/substrates/detached.d.ts +6 -6
  549. package/dist/substrates/detached.js +7 -7
  550. package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
  551. package/dist/substrates/e2b/cdp-probe.js +15 -18
  552. package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
  553. package/dist/substrates/e2b/desktop-browser.js +12 -12
  554. package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
  555. package/dist/substrates/e2b/desktop-cdp.js +11 -11
  556. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  557. package/dist/substrates/e2b/desktop-executor.js +1 -1
  558. package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
  559. package/dist/substrates/e2b/desktop-geometry.js +9 -9
  560. package/dist/substrates/e2b/desktop-media.d.ts +1 -1
  561. package/dist/substrates/e2b/desktop-media.js +3 -3
  562. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  563. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  564. package/dist/substrates/e2b/sandbox.d.ts +1 -1
  565. package/dist/substrates/e2b/sandbox.js +2 -2
  566. package/dist/substrates/e2b/sdk.d.ts +11 -11
  567. package/dist/substrates/e2b/sdk.js +8 -8
  568. package/dist/substrates/local/runtime-host.d.ts +2 -0
  569. package/dist/substrates/local/runtime-host.js +6 -0
  570. package/dist/tui/actions.d.ts +8 -6
  571. package/dist/tui/actions.js +31 -22
  572. package/dist/tui/contract.d.ts +16 -16
  573. package/dist/tui/contract.js +10 -10
  574. package/dist/tui/launch.d.ts +4 -4
  575. package/dist/tui/launch.js +18 -19
  576. package/dist/tui/project.js +5 -5
  577. package/dist/tui-app.js +83 -83
  578. package/dist/verify/actor.d.ts +14 -14
  579. package/dist/verify/actor.js +45 -45
  580. package/dist/verify/artifacts.d.ts +3 -3
  581. package/dist/verify/artifacts.js +6 -6
  582. package/dist/verify/context-growth.d.ts +9 -0
  583. package/dist/verify/context-growth.js +62 -0
  584. package/dist/verify/costs.d.ts +7 -7
  585. package/dist/verify/costs.js +9 -9
  586. package/dist/verify/liveness.d.ts +1 -1
  587. package/dist/verify/liveness.js +4 -1
  588. package/dist/verify/rerun.d.ts +1 -1
  589. package/dist/verify/rerun.js +1 -1
  590. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  591. package/dist/verify/shared-world-concurrent.js +79 -76
  592. package/dist/verify/shared-world.d.ts +2 -2
  593. package/dist/verify/shared-world.js +18 -18
  594. package/dist/verify/subject.d.ts +4 -4
  595. package/dist/verify/subject.js +18 -18
  596. package/dist/verify/verify.js +98 -49
  597. package/docs/README.md +26 -33
  598. package/docs/architecture/actor-contract.md +105 -98
  599. package/docs/architecture/desktop-sessions.md +14 -14
  600. package/docs/architecture/external-public-shared-world.md +66 -59
  601. package/docs/architecture/github-feedback-loop.md +1 -4
  602. package/docs/architecture/guest-desktop.md +2 -2
  603. package/docs/architecture/observer.md +37 -37
  604. package/docs/architecture/restricted-codex-analysis.md +70 -30
  605. package/docs/architecture/serve.md +34 -37
  606. package/docs/architecture/state-driven-executor.md +55 -59
  607. package/docs/architecture/task-protocol-support.md +7 -9
  608. package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
  609. package/docs/contracts/README.md +24 -0
  610. package/docs/contracts/adapter-admission.md +3 -3
  611. package/docs/contracts/adapter-fixtures.md +2 -5
  612. package/docs/contracts/core.md +1 -3
  613. package/docs/contracts/errors.md +62 -0
  614. package/docs/contracts/feedback.md +8 -9
  615. package/docs/contracts/policy.md +7 -12
  616. package/docs/contracts/run-bundle.md +54 -51
  617. package/docs/contracts/schemas.md +505 -390
  618. package/docs/contracts/study-analysis.md +26 -2
  619. package/docs/contracts/study-costs.md +11 -7
  620. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  621. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  622. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  623. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
  624. package/docs/principles/actor-fidelity.md +4 -4
  625. package/docs/principles/engineering.md +3 -3
  626. package/docs/principles/invariants-and-defaults.md +38 -38
  627. package/docs/principles/self-driving-harness.md +1 -5
  628. package/docs/principles/three-roles.md +1 -1
  629. package/docs/product/automatic-analysis.md +8 -7
  630. package/examples/participant/README.md +5 -5
  631. package/examples/participant/run.mjs +11 -10
  632. package/examples/scorer/README.md +3 -3
  633. package/examples/scorer/run.mjs +11 -12
  634. package/package.json +16 -17
  635. package/skills/humanish/SKILL.md +63 -60
  636. package/skills/humanish/agents/openai.yaml +1 -1
  637. package/AGENTS.md +0 -99
  638. package/CONTRIBUTING.md +0 -148
  639. package/dist/actors/codex/qualified-versions.d.ts +0 -45
  640. package/dist/actors/codex/qualified-versions.js +0 -87
  641. package/dist/cli/commands/lab.d.ts +0 -3
  642. package/dist/cli/commands/lab.js +0 -193
  643. package/dist/deprecated.d.ts +0 -90
  644. package/dist/deprecated.js +0 -106
  645. package/dist/lab/bag-overrides.d.ts +0 -18
  646. package/dist/lab/bag-overrides.js +0 -121
  647. package/dist/observer/static.d.ts +0 -39
  648. package/dist/observer/static.js +0 -369
  649. package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
  650. package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
  651. package/docs/architecture/comms-inbox.md +0 -122
  652. package/docs/architecture/desktop-recording.md +0 -80
  653. package/docs/architecture/local-browser-runtime.md +0 -178
  654. package/docs/architecture/observer-review.md +0 -144
  655. package/docs/architecture/participant-media.md +0 -90
  656. package/docs/architecture/project-layout.md +0 -62
  657. package/docs/architecture/real-email-receiving.md +0 -136
  658. package/docs/assets/humanish-drawdb-hero.png +0 -0
  659. package/docs/assets/humanish-observer-hero.png +0 -0
  660. package/docs/goals/current.md +0 -207
  661. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  662. package/docs/product/open-source-install-experience.md +0 -240
  663. package/docs/ramp/README.md +0 -294
  664. package/docs/release/open-source-readiness.md +0 -222
  665. package/docs/release/public-readiness-standard.md +0 -210
  666. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  667. /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
  668. /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
@@ -1,21 +1,22 @@
1
1
  import { Command } from "commander";
2
+ import { studyResultIdentity } from "../../run/study-result.js";
2
3
  import { formatRunHuman, parseLabCount, writeResult, } from "../io.js";
3
4
  import { planObserver, showObserver, staticObserverOpen } from "../observer-follow.js";
4
5
  /**
5
- * The preview route's CLI setup: the sim count and Observer plan, its runLab options, and how it
6
+ * The preview route's CLI setup: the participant count and Observer plan, its runLab options, and how it
6
7
  * presents the outcome. Undefined when setup has already written its own result.
7
8
  */
8
9
  export function previewRouteRun(args) {
9
- const participantCount = parseLabCount(args.options.sims, args.config.actors[0]?.count ?? 4);
10
+ const participantCount = parseLabCount(args.options.count, args.config.actors[0]?.count ?? 4);
10
11
  if (participantCount === null) {
11
12
  const result = {
12
- schema: "humanish.run-result.v1",
13
+ ...studyResultIdentity("preview", args.config.id),
13
14
  ok: false,
14
15
  cwd: args.options.cwd,
15
16
  warnings: [],
16
17
  error: {
17
- code: "HUMANISH_INVALID_SIM_COUNT",
18
- message: "--sims must be a positive integer.",
18
+ code: "HUMANISH_INVALID_PARTICIPANT_COUNT",
19
+ message: "--count must be a positive integer.",
19
20
  },
20
21
  };
21
22
  writeResult(args.command, args.io, result, formatRunHuman);
@@ -23,7 +24,7 @@ export function previewRouteRun(args) {
23
24
  return undefined;
24
25
  }
25
26
  // `run` renders the Observer too, so `run` and `watch` write the same bundle and the first
26
- // `export` of a run bundle finds observer/index.html (#597). A render failure is a warning on the
27
+ // `export` of a run bundle finds observer/index.html. A render failure is a warning on the
27
28
  // result, never a failed run. The preview renders through its finished run, so the page shown is
28
29
  // the run just written, never a directory swapped in under its id.
29
30
  const openOverride = args.options.open ?? args.config.defaults?.open;
@@ -42,7 +43,6 @@ export function previewRouteRun(args) {
42
43
  return {
43
44
  options: {
44
45
  cwd: args.options.cwd,
45
- ...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
46
46
  count: participantCount,
47
47
  ...(args.options.dryRun === undefined ? {} : { dryRun: args.options.dryRun }),
48
48
  ...(args.options.runId === undefined ? {} : { runId: args.options.runId }),
@@ -1,8 +1,8 @@
1
- import { type LabOutcome, type RunLabOptions } from "../../run-lab.js";
1
+ import { type InternalRunLabOptions, type LabOutcome } from "../../run-lab.js";
2
2
  import type { LabConfig } from "../../lab/types.js";
3
3
  import type { LoadedAdapterScorer } from "./lab-scorer.js";
4
4
  export interface RouteRun {
5
- readonly options: RunLabOptions;
5
+ readonly options: InternalRunLabOptions;
6
6
  present(outcome: LabOutcome): Promise<void>;
7
7
  /** Handles an error runLab threw, and rethrows any it does not handle. */
8
8
  onRunError?(error: unknown): Promise<void>;
@@ -10,8 +10,10 @@ export interface RouteRun {
10
10
  /**
11
11
  * Plans the lab with a route's options, then presents the refusal or the run. `beforeRun` runs
12
12
  * only for a plan that will run: it loads the scorer, or writes its own refusal and returns
13
- * undefined, so a refused lab never imports the scorer's host code.
13
+ * undefined, so a refused lab never imports the scorer's host code. `afterRun` runs once runLab
14
+ * has returned or thrown, before presentation, which may hold its own signal handlers (watch's
15
+ * Observer and tunnel).
14
16
  */
15
17
  export declare function runRoute(config: LabConfig, run: RouteRun, beforeRun?: () => Promise<{
16
18
  scorer?: LoadedAdapterScorer;
17
- } | undefined>): Promise<void>;
19
+ } | undefined>, afterRun?: () => void): Promise<void>;
@@ -4,9 +4,11 @@ import { prepareLab } from "../../run-lab.js";
4
4
  /**
5
5
  * Plans the lab with a route's options, then presents the refusal or the run. `beforeRun` runs
6
6
  * only for a plan that will run: it loads the scorer, or writes its own refusal and returns
7
- * undefined, so a refused lab never imports the scorer's host code.
7
+ * undefined, so a refused lab never imports the scorer's host code. `afterRun` runs once runLab
8
+ * has returned or thrown, before presentation, which may hold its own signal handlers (watch's
9
+ * Observer and tunnel).
8
10
  */
9
- export async function runRoute(config, run, beforeRun = () => Promise.resolve({})) {
11
+ export async function runRoute(config, run, beforeRun = () => Promise.resolve({}), afterRun = () => undefined) {
10
12
  let outcome;
11
13
  try {
12
14
  const prepared = await prepareLab(config, run.options);
@@ -22,10 +24,12 @@ export async function runRoute(config, run, beforeRun = () => Promise.resolve({}
22
24
  }
23
25
  }
24
26
  catch (error) {
27
+ afterRun();
25
28
  if (run.onRunError === undefined)
26
29
  throw error;
27
30
  await run.onRunError(error);
28
31
  return;
29
32
  }
33
+ afterRun();
30
34
  await run.present(outcome);
31
35
  }
@@ -1,5 +1,4 @@
1
1
  import { Command } from "commander";
2
- import type { RunLabProvenance } from "../../run/status.js";
3
2
  import type { LabConfig } from "../../lab/types.js";
4
3
  import { type CliIo, type LabCommandOptions } from "../io.js";
5
4
  import type { RouteRun } from "./lab-route-run.js";
@@ -7,7 +6,6 @@ interface ScriptedRouteArgs {
7
6
  command: Command;
8
7
  io: CliIo;
9
8
  config: LabConfig;
10
- labProvenance?: RunLabProvenance;
11
9
  mode: "run" | "watch";
12
10
  options: LabCommandOptions;
13
11
  }
@@ -24,7 +24,6 @@ export function scriptedRouteRun(args) {
24
24
  options: {
25
25
  ...cliAnalysisOptions(args.io),
26
26
  cwd: args.options.cwd,
27
- ...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
28
27
  open: observerOpen(args.mode, finishedPlan, shouldOpen),
29
28
  ...(args.options.dryRun === undefined ? {} : { dryRun: args.options.dryRun }),
30
29
  ...(args.options.runId === undefined ? {} : { runId: args.options.runId }),
@@ -1,5 +1,4 @@
1
1
  import { Command } from "commander";
2
- import type { RunLabProvenance } from "../../run/status.js";
3
2
  import type { LabConfig } from "../../lab/types.js";
4
3
  import { type CliIo, type LabCommandOptions } from "../io.js";
5
4
  import type { RouteRun } from "./lab-route-run.js";
@@ -7,7 +6,6 @@ interface SharedWorldRouteArgs {
7
6
  command: Command;
8
7
  io: CliIo;
9
8
  config: LabConfig;
10
- labProvenance?: RunLabProvenance;
11
9
  mode: "run" | "watch";
12
10
  options: LabCommandOptions;
13
11
  }
@@ -9,6 +9,7 @@ import { followObserver, showObserver, staticObserverOpen, withObserverServer, }
9
9
  import { formatConcurrentSharedWorldLabHuman } from "./lab-format.js";
10
10
  import { resolveRouteShouldOpen, watchFinishedPlan } from "./lab-route-open.js";
11
11
  import { rosterOf } from "../../lab/parse/actors.js";
12
+ import { studyResultIdentity } from "../../run/study-result.js";
12
13
  /**
13
14
  * The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
14
15
  * the run attaches, and how it presents the outcome. Undefined when setup has already written its
@@ -27,10 +28,9 @@ export function sharedWorldRouteRun(args) {
27
28
  const port = parseObserverPort(args.options.port ?? "0");
28
29
  const failConcurrent = (message, runId) => {
29
30
  const result = {
30
- schema: "humanish.concurrent-shared-world-lab-result.v1",
31
+ ...studyResultIdentity("shared-world", args.config.id),
31
32
  ok: false,
32
33
  cwd: args.options.cwd,
33
- labId: args.config.id,
34
34
  actor: args.config.actors[0]?.type ?? "",
35
35
  topology: "shared-world",
36
36
  topologyMode: "concurrent",
@@ -40,7 +40,7 @@ export function sharedWorldRouteRun(args) {
40
40
  runId: runId ?? args.options.runId ?? "not-created",
41
41
  roles: [],
42
42
  warnings: [],
43
- error: { code: "HUMANISH_CONCURRENT_SHARED_WORLD_LAB_FAILED", message },
43
+ error: { code: "HUMANISH_SHARED_WORLD_FAILED", message },
44
44
  };
45
45
  writeResult(args.command, args.io, result, formatConcurrentSharedWorldLabHuman);
46
46
  args.io.setExitCode(2);
@@ -63,7 +63,6 @@ export function sharedWorldRouteRun(args) {
63
63
  options: {
64
64
  ...cliAnalysisOptions(args.io),
65
65
  cwd: args.options.cwd,
66
- ...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
67
66
  open: wantsFollow
68
67
  ? false
69
68
  : finishedPlan === undefined
@@ -1,5 +1,4 @@
1
1
  import { Command } from "commander";
2
- import type { RunLabProvenance } from "../../run/status.js";
3
2
  import type { LabConfig } from "../../lab/types.js";
4
3
  import { type CliIo, type LabCommandOptions } from "../io.js";
5
4
  import type { RouteRun } from "./lab-route-run.js";
@@ -7,7 +6,6 @@ interface TerminalRouteArgs {
7
6
  command: Command;
8
7
  io: CliIo;
9
8
  config: LabConfig;
10
- labProvenance?: RunLabProvenance;
11
9
  mode: "run" | "watch";
12
10
  options: LabCommandOptions;
13
11
  }
@@ -24,7 +24,6 @@ export function terminalRouteRun(args) {
24
24
  options: {
25
25
  ...cliAnalysisOptions(args.io),
26
26
  cwd: args.options.cwd,
27
- ...(args.labProvenance === undefined ? {} : { lab: args.labProvenance }),
28
27
  open: observerOpen(args.mode, finishedPlan, shouldOpen),
29
28
  ...(args.options.dryRun === undefined ? {} : { dryRun: args.options.dryRun }),
30
29
  ...(args.options.runId === undefined ? {} : { runId: args.options.runId }),
@@ -1,9 +1,11 @@
1
1
  import { automaticAnalysisBudget, formatAutomaticAnalysisBudget, } from "../../analysis/automatic-config.js";
2
2
  import { resolve } from "node:path";
3
3
  import { Command } from "commander";
4
- import { deriveStudyFacts } from "../telemetry.js";
4
+ import { deriveRunFacts } from "../telemetry.js";
5
5
  import { resolveLabManifest } from "../../lab/discover.js";
6
- import { resolveLabDryRun } from "../../lab/plan.js";
6
+ import { warnAndQueue } from "../deprecations.js";
7
+ import { planLab, resolveLabDryRun } from "../../lab/plan.js";
8
+ import { keyNamesOf } from "../../lab/requirements.js";
7
9
  import { routeOf } from "../../lab/plan.js";
8
10
  import { computerUseRouteRun } from "./lab-route-computer-use.js";
9
11
  import { runRoute } from "./lab-route-run.js";
@@ -12,8 +14,9 @@ import { sharedWorldRouteRun } from "./lab-route-shared-world.js";
12
14
  import { previewRouteRun } from "./lab-route-preview.js";
13
15
  import { terminalRouteRun } from "./lab-route-terminal.js";
14
16
  import { maybeLoadAdapterScorer } from "./lab-scorer.js";
15
- import { discoverCliKeys, formatRunHuman, noteStudyFacts, writeResult, } from "../io.js";
17
+ import { discoverCliKeys, formatRunHuman, noteRunFacts, writeResult, } from "../io.js";
16
18
  import { watchExposeRequested } from "../observer-follow.js";
19
+ import { beginRunSignalPhase } from "./run-signals.js";
17
20
  import { WATCH_SAFE_NOT_APPLICABLE_MESSAGE } from "../../observer/exposure.js";
18
21
  export async function runLabCommand(args) {
19
22
  const resolved = await resolveLabManifest(args.options.cwd, args.lab);
@@ -24,18 +27,18 @@ export async function runLabCommand(args) {
24
27
  }
25
28
  // Surface forward-declared-field + .yml warnings on run/watch too, not only on inspect.
26
29
  // Otherwise a setting that does nothing is silently swallowed on the path users actually run.
27
- for (const warning of resolved.warnings) {
28
- args.io.writeErr(`warning: ${warning}\n`);
29
- }
30
+ // Each also goes into the JSON result's warnings[], so a --json caller sees it.
31
+ for (const warning of resolved.warnings)
32
+ warnAndQueue(args.command, args.io, warning);
30
33
  const config = resolved.config;
31
- // The run's identity (#455): which manifest, where it lives, and whether it is committed, a
32
- // local overlay, or an explicit path. Resolved once here — the only place that knows all three —
34
+ // The run's identity: which manifest, where it lives, and whether it is committed, a
35
+ // local overlay, or an explicit path. Resolved once here (the only place that knows all three)
33
36
  // and carried into the run's status record and bundle so the filesystem can answer "which lab
34
37
  // produced this run" without the old `persona.source = "lab:<id>"` string convention.
35
38
  const lab = { id: config.id, path: resolved.path, origin: resolved.origin };
36
39
  // Named here, once, for every route: a preview or terminal result carries no labId, so the
37
40
  // starter lab `first-run` went unnamed in telemetry while the computer-use ones were named.
38
- noteStudyFacts(args.command, deriveStudyFacts({ labId: config.id }));
41
+ noteRunFacts(args.command, deriveRunFacts({ labId: config.id }));
39
42
  const route = routeOf(config);
40
43
  if (route !== "computer-use" && labRerunFlagsRequested(args.options)) {
41
44
  writeUnsupportedRerunFlagsResult(args, route);
@@ -76,52 +79,81 @@ export async function runLabCommand(args) {
76
79
  return;
77
80
  }
78
81
  // Only a live run reads provider keys, so a dry run looks none up: no `gh auth token`, no e2b
79
- // login, overlay or key store. This comes after the option refusals above, which read no key,
80
- // and before the route's CLI setup and prepareLab, which do.
82
+ // login, overlay or key store. A live run fills every key it finds and prints a line only for
83
+ // the keys its plan reads. This comes after the option refusals above, which read no key, and
84
+ // before the route's CLI setup and prepareLab, which do.
81
85
  if (resolveLabDryRun(config, args.options.dryRun, true) === false) {
82
- await discoverCliKeys({ io: args.io, cwd: args.options.cwd });
86
+ const announced = announcedKeyNames(config, args.options);
87
+ await discoverCliKeys({
88
+ io: args.io,
89
+ cwd: args.options.cwd,
90
+ ...(announced === undefined ? {} : { announced }),
91
+ });
83
92
  }
84
93
  // The route's CLI setup refuses bad options, runLab's plan refuses bad labs, and the route's local
85
94
  // checks (keys, runtime auth, subject env, the local agent, caps) refuse this machine, all before
86
95
  // the scorer loads, so none imports the scorer's host code. The scripted route's checks and the
87
96
  // run-id claim still come after it; the scripted route takes no scorer.
88
- const run = routeRunFor(route, { ...args, config, labProvenance: lab });
89
- if (run === undefined)
97
+ const routeRun = routeRunFor(route, { ...args, config });
98
+ if (routeRun === undefined)
90
99
  return;
91
- // #316: resolve + load a config-declared/CLI-flagged adopter scorer FAIL-CLOSED, before any spend,
92
- // and only for a plan that will run. A declared gate that cannot load (bad ref, not found, load
93
- // failure, no hooks, unsupported route) aborts with exit 2 rather than green-passing.
94
- await runRoute(config, run, async () => {
95
- const scorerLoad = await maybeLoadAdapterScorer({
96
- cwd: args.options.cwd,
97
- config,
98
- route,
99
- flag: args.options.scorer,
100
- });
101
- if (!scorerLoad.ok) {
102
- const result = {
103
- schema: "humanish.run-result.v1",
104
- ok: false,
105
- cwd: resolve(args.options.cwd),
106
- warnings: [],
107
- error: scorerLoad.error,
108
- };
109
- writeResult(args.command, args.io, result, formatRunHuman);
110
- args.io.setExitCode(2);
111
- return undefined;
112
- }
113
- const scorer = scorerLoad.scorer;
114
- if (scorer) {
115
- // Cross-repo guardrail: `humanish lab run` now import()s host JS named in the manifest.
116
- // Surface it so the invoker (who may not be the manifest author) knows executable code ran.
117
- args.io.writeErr(`warning: review scorer ${scorer.provenance.ref} (${scorer.provenance.source}) is executable host code loaded and run in-process — review it as code, not config.\n`);
118
- }
119
- const analysisBudget = automaticAnalysisBudget(config.review?.analysis, route);
120
- if (analysisBudget && resolveLabDryRun(config, args.options.dryRun, true) === false) {
121
- args.io.writeErr(`${formatAutomaticAnalysisBudget(analysisBudget)}\n`);
122
- }
123
- return scorer === undefined ? {} : { scorer };
124
- });
100
+ // Every route's runLab options carry the lab's provenance, from here only.
101
+ const run = { ...routeRun, options: { ...routeRun.options, lab } };
102
+ // From here a signal marks the run interrupted and reclaims its sandboxes (run-signals.ts).
103
+ const signals = beginRunSignalPhase(args.io);
104
+ try {
105
+ // Resolve + load a config-declared/CLI-flagged adopter scorer fail-closed, before any
106
+ // spend, and only for a plan that will run. A declared gate that cannot load (bad ref, not
107
+ // found, load failure, no hooks, unsupported route) aborts with exit 2 rather than green-passing.
108
+ await runRoute(config, run, async () => {
109
+ const scorerLoad = await maybeLoadAdapterScorer({
110
+ cwd: args.options.cwd,
111
+ config,
112
+ route,
113
+ flag: args.options.scorer,
114
+ });
115
+ if (!scorerLoad.ok) {
116
+ const result = {
117
+ schema: "humanish.run-result.v1",
118
+ ok: false,
119
+ cwd: resolve(args.options.cwd),
120
+ warnings: [],
121
+ error: scorerLoad.error,
122
+ };
123
+ writeResult(args.command, args.io, result, formatRunHuman);
124
+ args.io.setExitCode(2);
125
+ return undefined;
126
+ }
127
+ const scorer = scorerLoad.scorer;
128
+ if (scorer) {
129
+ // Cross-repo guardrail: `humanish lab run` now import()s host JS named in the manifest.
130
+ // Surface it so the invoker (who may not be the manifest author) knows executable code ran.
131
+ args.io.writeErr(`warning: review scorer ${scorer.provenance.ref} (${scorer.provenance.source}) is code that humanish loaded and ran in this process. Review it as you would any code you run.\n`);
132
+ }
133
+ const analysisBudget = automaticAnalysisBudget(config.review?.analysis, route);
134
+ if (analysisBudget && resolveLabDryRun(config, args.options.dryRun, true) === false) {
135
+ args.io.writeErr(`${formatAutomaticAnalysisBudget(analysisBudget)}\n`);
136
+ }
137
+ return scorer === undefined ? {} : { scorer };
138
+ },
139
+ // The run is over before presentation, which may own shutdown itself (watch's Observer).
140
+ // A shutdown already begun keeps its handlers and finishes through its cleanups.
141
+ signals.release);
142
+ }
143
+ finally {
144
+ signals.release();
145
+ }
146
+ }
147
+ /**
148
+ * The filled keys a live run prints a line for: the ones its plan reads. Count and rerun options
149
+ * change who runs, not which keys. Undefined, so every fill is printed, when a scorer is declared,
150
+ * since its host code may read any key, and when the lab does not plan.
151
+ */
152
+ function announcedKeyNames(config, options) {
153
+ if (options.scorer !== undefined || config.review?.scorer !== undefined)
154
+ return undefined;
155
+ const planned = planLab(config, { cwd: options.cwd, dryRun: false });
156
+ return planned.ok ? keyNamesOf(planned.planned.plan) : undefined;
125
157
  }
126
158
  /** The route's CLI setup. Undefined when the setup has already written its own result. */
127
159
  function routeRunFor(route, args) {
@@ -142,7 +174,7 @@ function routeRunFor(route, args) {
142
174
  }
143
175
  }
144
176
  function labRerunFlagsRequested(options) {
145
- return options.rerunFailedFrom !== undefined || options.lanes !== undefined;
177
+ return options.rerunFailedFrom !== undefined || options.participants !== undefined;
146
178
  }
147
179
  function writeUnsupportedRerunFlagsResult(args, route) {
148
180
  const result = {
@@ -152,15 +184,13 @@ function writeUnsupportedRerunFlagsResult(args, route) {
152
184
  warnings: [],
153
185
  error: {
154
186
  code: "HUMANISH_UNSUPPORTED_RERUN_FLAGS",
155
- message: `--rerun-failed-from/--lanes apply only to computer-use fan-out labs; this lab resolved to the ${route} route.`,
187
+ message: `--rerun-failed-from/--participants apply only to computer-use fan-out labs; this lab resolved to the ${route} route.`,
156
188
  },
157
189
  };
158
190
  writeResult(args.command, args.io, result, formatRunHuman);
159
191
  args.io.setExitCode(2);
160
192
  }
161
193
  function formatLabResolveFailureHuman(result) {
162
- return ([
163
- `${result.error.code}: ${result.error.message}`,
164
- ...result.warnings.map((warning) => `warning: ${warning}`),
165
- ].join("\n") + "\n");
194
+ const warnings = result.warnings.map((warning) => `warning: ${warning}\n`).join("");
195
+ return { ...(warnings ? { stdout: warnings } : {}), error: result.error };
166
196
  }
@@ -1,24 +1,22 @@
1
- import type { RunLabProvenance } from "../../run/status.js";
2
1
  import { type AdapterScorerModule } from "../../lab/adapter-scorer-loader.js";
3
2
  import type { LabRoute } from "../../lab/plan.js";
4
3
  import type { RunScorerProvenance } from "../../run/bundle.js";
5
4
  import type { LabConfig } from "../../lab/types.js";
6
5
  import type { RunResult } from "../../run/results.js";
7
- /** A CONFIG-DECLARED scorer that resolved + loaded fail-closed, ready to thread into a backend. */
6
+ /** A config-declared scorer that resolved + loaded fail-closed, ready to thread into a backend. */
8
7
  export interface LoadedAdapterScorer {
9
8
  hooks: AdapterScorerModule;
10
9
  provenance: RunScorerProvenance;
11
10
  }
12
11
  /**
13
12
  * Resolve `review.scorer.ref` (or the `--scorer` override) to a loaded adopter scorer, fail-closed
14
- * (typed error) PRE-SPEND. Precedence: CLI `--scorer` overrides the manifest; `source` records which
13
+ * (typed error) pre-spend. Precedence: CLI `--scorer` overrides the manifest; `source` records which
15
14
  * won. No scorer declared → `{ ok: true }` with no scorer. A declared scorer on an unsupported
16
15
  * backend, or a bad/unreadable/broken ref, → `{ ok: false }` so the caller aborts with exit 2.
17
16
  */
18
17
  export declare function maybeLoadAdapterScorer(args: {
19
18
  cwd: string;
20
19
  config: LabConfig;
21
- labProvenance?: RunLabProvenance;
22
20
  route: LabRoute;
23
21
  flag: string | undefined;
24
22
  }): Promise<{
@@ -1,7 +1,7 @@
1
1
  import { loadAdapterScorer } from "../../lab/adapter-scorer-loader.js";
2
2
  /**
3
3
  * Resolve `review.scorer.ref` (or the `--scorer` override) to a loaded adopter scorer, fail-closed
4
- * (typed error) PRE-SPEND. Precedence: CLI `--scorer` overrides the manifest; `source` records which
4
+ * (typed error) pre-spend. Precedence: CLI `--scorer` overrides the manifest; `source` records which
5
5
  * won. No scorer declared → `{ ok: true }` with no scorer. A declared scorer on an unsupported
6
6
  * backend, or a bad/unreadable/broken ref, → `{ ok: false }` so the caller aborts with exit 2.
7
7
  */
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import { type CliIo } from "../io.js";
3
+ /** `humanish migrate`. */
4
+ export declare function registerMigrateCommand(parent: Command, io: CliIo): void;
@@ -0,0 +1,65 @@
1
+ import { migrateStudies } from "../../study/migrate.js";
2
+ import { CWD_OPTION_DESCRIPTION, JSON_OPTION_DESCRIPTION, wantsJson, writeResult, } from "../io.js";
3
+ function formatValue(value) {
4
+ const text = JSON.stringify(value);
5
+ return text.length > 80 ? `${text.slice(0, 77)}...` : text;
6
+ }
7
+ /** Each file's source, destination, moved keys and dropped keys, printed before any write. */
8
+ function formatMigratePlan(files) {
9
+ const lines = [];
10
+ for (const file of files) {
11
+ if (file.action === "skip") {
12
+ lines.push(`${file.source}: already humanish.study.v3, skipped`);
13
+ continue;
14
+ }
15
+ const where = file.action === "move" ? `-> ${file.destination}` : "(rewritten in place)";
16
+ lines.push(`${file.source} ${where} (route: ${file.route})`);
17
+ if (file.moved.length > 0)
18
+ lines.push(` moved: ${file.moved.map((key) => `${key.from} -> ${key.to}`).join(", ")}`);
19
+ for (const key of file.dropped) {
20
+ lines.push(` dropped ${key.path}: ${formatValue(key.value)} (the ${file.route} route never reads it)`);
21
+ if (key.comments)
22
+ lines.push(` its comment: ${key.comments.replace(/\n/g, " ")}`);
23
+ }
24
+ }
25
+ return lines.length > 0 ? `${lines.join("\n")}\n` : "No study files to convert.\n";
26
+ }
27
+ function formatMigrateOutcome(result) {
28
+ if (result.error) {
29
+ const where = result.error.file ? ` ${result.error.file}` : "";
30
+ return `${result.error.code} (${result.error.phase})${where}: ${result.error.message}\n`;
31
+ }
32
+ const written = result.files.filter((file) => file.action !== "skip").length;
33
+ const files = written === 1 ? "1 study file" : `${written} study files`;
34
+ if (result.dryRun)
35
+ return `Dry run: nothing was written. ${files} would change.\n`;
36
+ return written === 0 ? "No v2 study files to convert.\n" : `Converted ${files}.\n`;
37
+ }
38
+ /** `humanish migrate`. */
39
+ export function registerMigrateCommand(parent, io) {
40
+ parent
41
+ .command("migrate")
42
+ .description("Convert humanish.lab.v2 study files to humanish.study.v3. A file under a labs/ directory moves to the matching studies/ directory; any other file is rewritten in place. An original that a failure leaves out of place is kept as <name>.v2.bak. Pass the files to convert; without any, the six study directories are scanned. Every destination, moved key and dropped key is printed before anything is written. A file that changes during the run is kept and listed.")
43
+ .summary("Convert v2 study files to v3.")
44
+ // The paths are read from the command's arguments without a declared argument, so the root
45
+ // --help row stays `migrate [options]` and fits its column; this command's own help shows them.
46
+ .usage("[options] [path...]")
47
+ .allowExcessArguments(true)
48
+ .option("--dry-run", "Print what would change and write nothing.")
49
+ .option("--cwd <path>", CWD_OPTION_DESCRIPTION, ".")
50
+ .option("--json", JSON_OPTION_DESCRIPTION)
51
+ .action(async (options, command) => {
52
+ const paths = command.args;
53
+ const json = wantsJson(command);
54
+ const result = await migrateStudies({
55
+ cwd: options.cwd,
56
+ paths,
57
+ dryRun: options.dryRun === true,
58
+ // The plan is printed before anything is written; with --json it goes to stderr, so stdout
59
+ // stays one JSON document.
60
+ onPlan: (files) => (json ? io.writeErr : io.writeOut)(formatMigratePlan(files)),
61
+ });
62
+ writeResult(command, io, result, formatMigrateOutcome);
63
+ io.setExitCode(result.ok ? 0 : 2);
64
+ });
65
+ }