humanish 0.107.0 → 0.109.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 (671) hide show
  1. package/ARCHITECTURE.md +73 -69
  2. package/CHANGELOG.md +27 -0
  3. package/CONTEXT.md +51 -44
  4. package/README.md +148 -175
  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-trace.js +2 -1
  14. package/dist/actors/codex/app-server-ui.js +1 -1
  15. package/dist/actors/codex/codex-admission.d.ts +91 -0
  16. package/dist/actors/codex/codex-admission.js +150 -0
  17. package/dist/actors/codex/restricted-executable.d.ts +4 -4
  18. package/dist/actors/codex/restricted-executable.js +8 -8
  19. package/dist/actors/codex/restricted-launch.d.ts +2 -1
  20. package/dist/actors/codex/restricted-launch.js +1 -1
  21. package/dist/actors/codex/restricted-participant.js +20 -18
  22. package/dist/actors/codex/restricted-policy.d.ts +2 -2
  23. package/dist/actors/codex/restricted-policy.js +2 -2
  24. package/dist/actors/codex/restricted-session.d.ts +3 -3
  25. package/dist/actors/codex/restricted-session.js +10 -5
  26. package/dist/actors/computer-use/actor.d.ts +18 -18
  27. package/dist/actors/computer-use/actor.js +4 -4
  28. package/dist/actors/computer-use/admission-limit.d.ts +3 -3
  29. package/dist/actors/computer-use/admission-limit.js +4 -4
  30. package/dist/actors/computer-use/executor-error.d.ts +2 -2
  31. package/dist/actors/computer-use/executor-error.js +3 -3
  32. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  33. package/dist/actors/computer-use/loop/actions.js +15 -15
  34. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  35. package/dist/actors/computer-use/loop/backstop.js +14 -12
  36. package/dist/actors/computer-use/loop/debrief.js +2 -2
  37. package/dist/actors/computer-use/loop/ending.d.ts +6 -6
  38. package/dist/actors/computer-use/loop/ending.js +18 -17
  39. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  40. package/dist/actors/computer-use/loop/observation.js +15 -14
  41. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  42. package/dist/actors/computer-use/loop/provider-call.js +12 -12
  43. package/dist/actors/computer-use/loop/session.d.ts +4 -4
  44. package/dist/actors/computer-use/loop/session.js +4 -4
  45. package/dist/actors/computer-use/loop/spend.d.ts +1 -1
  46. package/dist/actors/computer-use/loop/spend.js +1 -1
  47. package/dist/actors/computer-use/loop/trace.js +11 -9
  48. package/dist/actors/computer-use/loop/types.d.ts +47 -45
  49. package/dist/actors/computer-use/loop/usage.d.ts +2 -2
  50. package/dist/actors/computer-use/loop/usage.js +2 -2
  51. package/dist/actors/computer-use/loop.d.ts +6 -1
  52. package/dist/actors/computer-use/loop.js +26 -4
  53. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  54. package/dist/actors/computer-use/openai-context.js +214 -0
  55. package/dist/actors/computer-use/openai-provider.d.ts +13 -10
  56. package/dist/actors/computer-use/openai-provider.js +52 -41
  57. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  58. package/dist/actors/computer-use/openai-requests.js +82 -15
  59. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  60. package/dist/actors/computer-use/openai-wire.js +36 -34
  61. package/dist/actors/computer-use/provider-error.d.ts +4 -4
  62. package/dist/actors/computer-use/provider-error.js +6 -6
  63. package/dist/actors/contract.d.ts +82 -47
  64. package/dist/actors/contract.js +30 -24
  65. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  66. package/dist/actors/local-agent/claude-session.js +13 -12
  67. package/dist/actors/local-agent/cli.d.ts +9 -7
  68. package/dist/actors/local-agent/cli.js +24 -28
  69. package/dist/actors/local-agent/readiness.d.ts +2 -2
  70. package/dist/actors/local-agent/readiness.js +4 -4
  71. package/dist/actors/reasoning-effort.js +8 -8
  72. package/dist/actors/registry.d.ts +12 -12
  73. package/dist/actors/registry.js +21 -20
  74. package/dist/actors/scripted-browser/actor.d.ts +10 -10
  75. package/dist/actors/scripted-browser/actor.js +17 -17
  76. package/dist/actors/scripted-browser/browser-command.js +1 -1
  77. package/dist/actors/scripted-browser/steps.js +1 -1
  78. package/dist/actors/scripted-browser/types.d.ts +1 -1
  79. package/dist/actors/stop-conditions.d.ts +1 -1
  80. package/dist/analysis/automatic-completion.d.ts +7 -7
  81. package/dist/analysis/automatic-completion.js +1 -1
  82. package/dist/analysis/automatic-config.d.ts +6 -6
  83. package/dist/analysis/automatic-config.js +1 -1
  84. package/dist/analysis/codex-config.d.ts +6 -2
  85. package/dist/analysis/codex-config.js +22 -14
  86. package/dist/analysis/execute.d.ts +1 -1
  87. package/dist/analysis/execute.js +1 -1
  88. package/dist/analysis/service.js +5 -5
  89. package/dist/analysis/types.d.ts +6 -0
  90. package/dist/browser-control/client.js +16 -16
  91. package/dist/browser-control/dispatcher.js +4 -4
  92. package/dist/browser-control/protocol.js +14 -14
  93. package/dist/browser-control/recording-transfer.js +4 -4
  94. package/dist/browser-control/transport.js +7 -7
  95. package/dist/cli/commands/analysis-signals.d.ts +2 -2
  96. package/dist/cli/commands/analyze.js +19 -16
  97. package/dist/cli/commands/codex.js +9 -9
  98. package/dist/cli/commands/comms.js +48 -35
  99. package/dist/cli/commands/feedback.js +20 -21
  100. package/dist/cli/commands/migrate.d.ts +4 -0
  101. package/dist/cli/commands/migrate.js +65 -0
  102. package/dist/cli/commands/observe.d.ts +0 -1
  103. package/dist/cli/commands/observe.js +136 -112
  104. package/dist/cli/commands/run-command.d.ts +10 -0
  105. package/dist/cli/commands/run-command.js +85 -0
  106. package/dist/cli/commands/runs.js +136 -139
  107. package/dist/cli/commands/setup.d.ts +2 -2
  108. package/dist/cli/commands/setup.js +27 -24
  109. package/dist/cli/commands/study-format.d.ts +9 -0
  110. package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
  111. package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
  112. package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
  113. package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
  114. package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
  115. package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
  116. package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
  117. package/dist/cli/commands/study-route-run.d.ts +19 -0
  118. package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
  119. package/dist/cli/commands/study-route-scripted.d.ts +17 -0
  120. package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
  121. package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
  122. package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
  123. package/dist/cli/commands/study-route-terminal.d.ts +17 -0
  124. package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
  125. package/dist/cli/commands/study-run.d.ts +9 -0
  126. package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
  127. package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
  128. package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
  129. package/dist/cli/commands/study.d.ts +3 -0
  130. package/dist/cli/commands/study.js +146 -0
  131. package/dist/cli/commands/tui.d.ts +4 -4
  132. package/dist/cli/commands/tui.js +31 -31
  133. package/dist/cli/commands/watch.js +71 -121
  134. package/dist/cli/deprecations.d.ts +6 -0
  135. package/dist/cli/deprecations.js +18 -0
  136. package/dist/cli/doctor.d.ts +18 -8
  137. package/dist/cli/doctor.js +114 -59
  138. package/dist/cli/first-run-path.d.ts +15 -13
  139. package/dist/cli/first-run-path.js +35 -33
  140. package/dist/cli/io.d.ts +44 -9
  141. package/dist/cli/io.js +98 -23
  142. package/dist/cli/observer-follow.d.ts +3 -3
  143. package/dist/cli/observer-follow.js +6 -7
  144. package/dist/cli/orientation.d.ts +10 -7
  145. package/dist/cli/orientation.js +89 -47
  146. package/dist/cli/product-sentence.d.ts +6 -0
  147. package/dist/cli/product-sentence.js +6 -0
  148. package/dist/cli/program.d.ts +6 -1
  149. package/dist/cli/program.js +111 -43
  150. package/dist/cli/telemetry.d.ts +16 -16
  151. package/dist/cli/telemetry.js +46 -44
  152. package/dist/cli.js +1 -1
  153. package/dist/comms/capture-surface.d.ts +13 -12
  154. package/dist/comms/capture-surface.js +23 -22
  155. package/dist/comms/catch-host.d.ts +7 -7
  156. package/dist/comms/catch-host.js +17 -17
  157. package/dist/comms/connections.d.ts +1 -1
  158. package/dist/comms/connections.js +2 -2
  159. package/dist/comms/email-catch.d.ts +3 -3
  160. package/dist/comms/email-catch.js +8 -8
  161. package/dist/comms/external-evidence.d.ts +5 -5
  162. package/dist/comms/external-evidence.js +5 -4
  163. package/dist/comms/extract.js +2 -2
  164. package/dist/comms/fake-inbox.d.ts +3 -3
  165. package/dist/comms/fake-inbox.js +3 -3
  166. package/dist/comms/receiving-render.d.ts +1 -1
  167. package/dist/comms/receiving-render.js +2 -2
  168. package/dist/comms/receiving-runtime.d.ts +4 -4
  169. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  170. package/dist/comms/sandbox-catch-script.js +6 -6
  171. package/dist/comms/sandbox-catch.d.ts +38 -39
  172. package/dist/comms/sandbox-catch.js +36 -37
  173. package/dist/comms/setup.d.ts +2 -2
  174. package/dist/comms/setup.js +56 -25
  175. package/dist/comms/thread-evidence.d.ts +1 -1
  176. package/dist/comms/thread-evidence.js +6 -6
  177. package/dist/comms/types.d.ts +6 -6
  178. package/dist/comms/types.js +3 -3
  179. package/dist/evidence/frame-signature.d.ts +1 -1
  180. package/dist/evidence/frame-signature.js +4 -4
  181. package/dist/evidence/redaction.d.ts +3 -3
  182. package/dist/evidence/redaction.js +4 -4
  183. package/dist/feedback/draft.js +38 -80
  184. package/dist/feedback/export-bundle.js +1 -1
  185. package/dist/feedback/export.d.ts +5 -1
  186. package/dist/feedback/export.js +10 -10
  187. package/dist/feedback/feedback.d.ts +2 -2
  188. package/dist/feedback/feedback.js +21 -3
  189. package/dist/feedback/proof.d.ts +1 -1
  190. package/dist/feedback/proof.js +2 -2
  191. package/dist/guest/bootstrap.js +6 -6
  192. package/dist/guest/browser-tools.js +8 -8
  193. package/dist/guest/chromium-text.js +19 -19
  194. package/dist/guest/desktop-executor.d.ts +2 -2
  195. package/dist/guest/desktop-executor.js +20 -20
  196. package/dist/guest/desktop-keys.js +4 -4
  197. package/dist/guest/desktop-media.d.ts +2 -2
  198. package/dist/guest/desktop-media.js +16 -16
  199. package/dist/guest/desktop-native.d.ts +1 -1
  200. package/dist/guest/desktop-native.js +10 -10
  201. package/dist/guest/runtime-desktop.js +2 -2
  202. package/dist/guest/runtime-processes.d.ts +2 -2
  203. package/dist/guest/runtime-processes.js +2 -2
  204. package/dist/guest/runtime.js +6 -6
  205. package/dist/index.d.ts +14 -14
  206. package/dist/index.js +8 -8
  207. package/dist/keys/key-resolution.d.ts +5 -5
  208. package/dist/keys/key-resolution.js +23 -23
  209. package/dist/observer/artifact.d.ts +2 -2
  210. package/dist/observer/artifact.js +7 -7
  211. package/dist/observer/data.d.ts +6 -6
  212. package/dist/observer/data.js +5 -4
  213. package/dist/observer/exposure.d.ts +1 -1
  214. package/dist/observer/exposure.js +11 -11
  215. package/dist/observer/http.js +1 -1
  216. package/dist/observer/library.d.ts +3 -1
  217. package/dist/observer/library.js +8 -3
  218. package/dist/observer/listen.js +5 -4
  219. package/dist/observer/render.d.ts +1 -1
  220. package/dist/observer/render.js +17 -6
  221. package/dist/observer/run-routes.d.ts +4 -3
  222. package/dist/observer/run-routes.js +38 -13
  223. package/dist/observer/serve.d.ts +1 -1
  224. package/dist/observer/serve.js +7 -3
  225. package/dist/observer/tunnel.js +1 -1
  226. package/dist/observer-app.html +4 -4
  227. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  228. package/dist/routes/computer-use/bundle-parts.js +18 -17
  229. package/dist/routes/computer-use/bundle.d.ts +2 -2
  230. package/dist/routes/computer-use/bundle.js +10 -9
  231. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
  232. package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
  233. package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
  234. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
  235. package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
  236. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
  237. package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
  238. package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
  239. package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
  240. package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
  241. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  242. package/dist/routes/computer-use/external-comms.js +1 -1
  243. package/dist/routes/computer-use/fanout-bundle.js +27 -26
  244. package/dist/routes/computer-use/fanout-records.js +12 -13
  245. package/dist/routes/computer-use/live-flush.d.ts +4 -4
  246. package/dist/routes/computer-use/live-flush.js +6 -6
  247. package/dist/routes/computer-use/live-phase.d.ts +5 -4
  248. package/dist/routes/computer-use/live-phase.js +8 -8
  249. package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
  250. package/dist/routes/computer-use/local-tree-pack.js +1 -1
  251. package/dist/routes/computer-use/local-vm.d.ts +8 -8
  252. package/dist/routes/computer-use/local-vm.js +3 -3
  253. package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
  254. package/dist/routes/computer-use/participant-desktop.js +5 -5
  255. package/dist/routes/computer-use/participant-execution.d.ts +4 -4
  256. package/dist/routes/computer-use/participant-execution.js +10 -10
  257. package/dist/routes/computer-use/participant-model.d.ts +6 -0
  258. package/dist/routes/computer-use/participant-model.js +33 -15
  259. package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
  260. package/dist/routes/computer-use/participant-prompt.js +9 -9
  261. package/dist/routes/computer-use/participant-runs.d.ts +16 -16
  262. package/dist/routes/computer-use/participant-runs.js +26 -25
  263. package/dist/routes/computer-use/plan.d.ts +12 -12
  264. package/dist/routes/computer-use/plan.js +42 -42
  265. package/dist/routes/computer-use/preflight.d.ts +5 -5
  266. package/dist/routes/computer-use/preflight.js +25 -25
  267. package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
  268. package/dist/routes/computer-use/rerun-selection.js +4 -3
  269. package/dist/routes/computer-use/result.d.ts +4 -4
  270. package/dist/routes/computer-use/result.js +22 -21
  271. package/dist/routes/computer-use/route.d.ts +12 -11
  272. package/dist/routes/computer-use/route.js +31 -30
  273. package/dist/routes/computer-use/self-report.d.ts +7 -7
  274. package/dist/routes/computer-use/self-report.js +32 -32
  275. package/dist/routes/computer-use/setup.d.ts +23 -23
  276. package/dist/routes/computer-use/setup.js +28 -29
  277. package/dist/routes/computer-use/single-bundle.d.ts +11 -11
  278. package/dist/routes/computer-use/single-bundle.js +40 -41
  279. package/dist/routes/computer-use/subject-projection.d.ts +4 -4
  280. package/dist/routes/computer-use/subject-projection.js +6 -6
  281. package/dist/routes/computer-use/types.d.ts +71 -73
  282. package/dist/routes/computer-use/types.js +12 -12
  283. package/dist/routes/preview.d.ts +13 -7
  284. package/dist/routes/preview.js +11 -7
  285. package/dist/routes/scripted/bundle.d.ts +7 -7
  286. package/dist/routes/scripted/bundle.js +20 -18
  287. package/dist/routes/scripted/plan.d.ts +8 -8
  288. package/dist/routes/scripted/plan.js +13 -13
  289. package/dist/routes/scripted/result.d.ts +3 -3
  290. package/dist/routes/scripted/result.js +13 -13
  291. package/dist/routes/scripted/route.d.ts +9 -9
  292. package/dist/routes/scripted/route.js +15 -16
  293. package/dist/routes/scripted/scenario.d.ts +1 -1
  294. package/dist/routes/scripted/scenario.js +5 -5
  295. package/dist/routes/scripted/setup.d.ts +6 -6
  296. package/dist/routes/scripted/setup.js +8 -8
  297. package/dist/routes/scripted/subject.d.ts +5 -5
  298. package/dist/routes/scripted/subject.js +4 -4
  299. package/dist/routes/scripted/surface-records.d.ts +1 -1
  300. package/dist/routes/scripted/surface-records.js +4 -4
  301. package/dist/routes/scripted/surface-sessions.d.ts +3 -3
  302. package/dist/routes/scripted/types.d.ts +18 -20
  303. package/dist/routes/scripted/types.js +2 -2
  304. package/dist/routes/shared-world/bundle-records.js +11 -10
  305. package/dist/routes/shared-world/bundle.d.ts +5 -5
  306. package/dist/routes/shared-world/bundle.js +46 -43
  307. package/dist/routes/shared-world/checkpoints.d.ts +4 -4
  308. package/dist/routes/shared-world/checkpoints.js +2 -2
  309. package/dist/routes/shared-world/comms.d.ts +14 -14
  310. package/dist/routes/shared-world/comms.js +19 -18
  311. package/dist/routes/shared-world/external-public.d.ts +4 -3
  312. package/dist/routes/shared-world/external-public.js +16 -12
  313. package/dist/routes/shared-world/handoff.d.ts +7 -6
  314. package/dist/routes/shared-world/handoff.js +65 -57
  315. package/dist/routes/shared-world/lobby-code.d.ts +2 -2
  316. package/dist/routes/shared-world/lobby-code.js +9 -9
  317. package/dist/routes/shared-world/participant-specs.d.ts +10 -9
  318. package/dist/routes/shared-world/participant-specs.js +38 -31
  319. package/dist/routes/shared-world/plan.d.ts +9 -9
  320. package/dist/routes/shared-world/plan.js +16 -16
  321. package/dist/routes/shared-world/provenance.d.ts +2 -2
  322. package/dist/routes/shared-world/provenance.js +2 -2
  323. package/dist/routes/shared-world/provisioned.d.ts +8 -8
  324. package/dist/routes/shared-world/provisioned.js +18 -17
  325. package/dist/routes/shared-world/result.d.ts +6 -6
  326. package/dist/routes/shared-world/result.js +29 -29
  327. package/dist/routes/shared-world/route.d.ts +11 -11
  328. package/dist/routes/shared-world/route.js +40 -39
  329. package/dist/routes/shared-world/setup.d.ts +16 -16
  330. package/dist/routes/shared-world/setup.js +23 -23
  331. package/dist/routes/shared-world/types.d.ts +55 -53
  332. package/dist/routes/shared-world/types.js +4 -4
  333. package/dist/routes/terminal/adapter.d.ts +5 -5
  334. package/dist/routes/terminal/adapter.js +9 -9
  335. package/dist/routes/terminal/bundle.d.ts +13 -13
  336. package/dist/routes/terminal/bundle.js +28 -27
  337. package/dist/routes/terminal/credentials.d.ts +8 -8
  338. package/dist/routes/terminal/credentials.js +12 -12
  339. package/dist/routes/terminal/dry-run.d.ts +4 -4
  340. package/dist/routes/terminal/dry-run.js +12 -12
  341. package/dist/routes/terminal/encoding.js +2 -2
  342. package/dist/routes/terminal/ledger.d.ts +5 -5
  343. package/dist/routes/terminal/ledger.js +14 -14
  344. package/dist/routes/terminal/lifetime.d.ts +1 -1
  345. package/dist/routes/terminal/lifetime.js +1 -1
  346. package/dist/routes/terminal/live-finish.d.ts +2 -2
  347. package/dist/routes/terminal/live-finish.js +10 -10
  348. package/dist/routes/terminal/live-sandbox.d.ts +2 -2
  349. package/dist/routes/terminal/live-sandbox.js +15 -15
  350. package/dist/routes/terminal/participant-text.js +2 -1
  351. package/dist/routes/terminal/persona.d.ts +2 -2
  352. package/dist/routes/terminal/persona.js +3 -3
  353. package/dist/routes/terminal/plan.d.ts +7 -7
  354. package/dist/routes/terminal/plan.js +15 -15
  355. package/dist/routes/terminal/recorder.js +2 -2
  356. package/dist/routes/terminal/result.d.ts +5 -5
  357. package/dist/routes/terminal/result.js +14 -14
  358. package/dist/routes/terminal/route.d.ts +9 -9
  359. package/dist/routes/terminal/route.js +19 -20
  360. package/dist/routes/terminal/sandbox.d.ts +1 -1
  361. package/dist/routes/terminal/sandbox.js +1 -1
  362. package/dist/routes/terminal/session.d.ts +5 -5
  363. package/dist/routes/terminal/session.js +14 -13
  364. package/dist/routes/terminal/token-usage.d.ts +1 -1
  365. package/dist/routes/terminal/token-usage.js +7 -8
  366. package/dist/routes/terminal/trace.d.ts +4 -4
  367. package/dist/routes/terminal/trace.js +2 -2
  368. package/dist/routes/terminal/types.d.ts +48 -50
  369. package/dist/routes/terminal/types.js +5 -5
  370. package/dist/run/bundle-shape.js +3 -3
  371. package/dist/run/bundle.d.ts +49 -49
  372. package/dist/run/bundle.js +3 -2
  373. package/dist/run/cost-summary.js +3 -3
  374. package/dist/run/costs.d.ts +23 -0
  375. package/dist/run/costs.js +79 -44
  376. package/dist/run/detail.d.ts +6 -6
  377. package/dist/run/detail.js +4 -4
  378. package/dist/run/dry-run-inputs.d.ts +1 -1
  379. package/dist/run/dry-run-inputs.js +2 -2
  380. package/dist/run/dry-run.js +20 -20
  381. package/dist/run/judge.d.ts +19 -13
  382. package/dist/run/judge.js +18 -8
  383. package/dist/run/outcomes.d.ts +1 -1
  384. package/dist/run/participant.d.ts +1 -1
  385. package/dist/run/paths.d.ts +1 -1
  386. package/dist/run/paths.js +1 -1
  387. package/dist/run/preflight-receipts.js +1 -1
  388. package/dist/run/pricing.d.ts +11 -6
  389. package/dist/run/pricing.js +22 -15
  390. package/dist/run/projection.d.ts +46 -46
  391. package/dist/run/projection.js +57 -57
  392. package/dist/run/reclaim.d.ts +1 -1
  393. package/dist/run/reclaim.js +3 -3
  394. package/dist/run/results.d.ts +5 -5
  395. package/dist/run/run-cost.d.ts +53 -0
  396. package/dist/run/run-cost.js +105 -0
  397. package/dist/run/run-index-analysis.d.ts +15 -0
  398. package/dist/run/run-index-analysis.js +77 -0
  399. package/dist/run/run-index.d.ts +19 -7
  400. package/dist/run/run-index.js +77 -64
  401. package/dist/run/run-not-found.d.ts +5 -0
  402. package/dist/run/run-not-found.js +15 -0
  403. package/dist/run/run.d.ts +6 -5
  404. package/dist/run/run.js +3 -3
  405. package/dist/run/sandbox-receipts.d.ts +2 -2
  406. package/dist/run/sandbox-receipts.js +3 -3
  407. package/dist/run/shared-world-evidence.d.ts +37 -36
  408. package/dist/run/shared-world-evidence.js +4 -4
  409. package/dist/run/shared-world-shape.d.ts +1 -1
  410. package/dist/run/shared-world-shape.js +7 -7
  411. package/dist/run/stats.d.ts +14 -8
  412. package/dist/run/stats.js +121 -63
  413. package/dist/run/status.d.ts +16 -29
  414. package/dist/run/status.js +10 -29
  415. package/dist/run/stored-runs.js +2 -1
  416. package/dist/run/stream-shape.js +1 -1
  417. package/dist/run/streams.d.ts +7 -7
  418. package/dist/run/study-provenance.d.ts +49 -0
  419. package/dist/run/study-provenance.js +66 -0
  420. package/dist/run/study-result.d.ts +11 -0
  421. package/dist/run/study-result.js +9 -0
  422. package/dist/run/text.d.ts +2 -0
  423. package/dist/run/text.js +4 -0
  424. package/dist/run-study.d.ts +112 -0
  425. package/dist/{run-lab.js → run-study.js} +52 -47
  426. package/dist/{lab → study}/adapter-extension.d.ts +15 -27
  427. package/dist/{lab → study}/adapter-extension.js +10 -45
  428. package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
  429. package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
  430. package/dist/study/composition-rules.d.ts +7 -0
  431. package/dist/{lab → study}/composition-rules.js +53 -53
  432. package/dist/study/config.d.ts +15 -0
  433. package/dist/{lab → study}/config.js +98 -41
  434. package/dist/study/convert.d.ts +33 -0
  435. package/dist/study/convert.js +432 -0
  436. package/dist/{lab → study}/device-presets.d.ts +10 -10
  437. package/dist/{lab → study}/device-presets.js +11 -11
  438. package/dist/study/discover.d.ts +75 -0
  439. package/dist/{lab → study}/discover.js +134 -95
  440. package/dist/{lab → study}/doctor.d.ts +19 -12
  441. package/dist/{lab → study}/doctor.js +58 -20
  442. package/dist/study/field-paths.d.ts +12 -0
  443. package/dist/study/field-paths.js +126 -0
  444. package/dist/study/files.d.ts +26 -0
  445. package/dist/study/files.js +44 -0
  446. package/dist/{lab → study}/init-templates.d.ts +2 -2
  447. package/dist/study/init-templates.js +421 -0
  448. package/dist/{lab → study}/init.d.ts +2 -2
  449. package/dist/{lab → study}/init.js +46 -11
  450. package/dist/study/keys.d.ts +4 -0
  451. package/dist/{lab → study}/keys.js +46 -12
  452. package/dist/study/migrate.d.ts +48 -0
  453. package/dist/study/migrate.js +408 -0
  454. package/dist/study/owned-files.d.ts +38 -0
  455. package/dist/study/owned-files.js +182 -0
  456. package/dist/{lab → study}/parse/actors.d.ts +5 -5
  457. package/dist/{lab → study}/parse/actors.js +14 -14
  458. package/dist/study/parse/comms.d.ts +12 -0
  459. package/dist/{lab → study}/parse/comms.js +5 -5
  460. package/dist/study/parse/execution.d.ts +19 -0
  461. package/dist/{lab → study}/parse/execution.js +13 -13
  462. package/dist/study/parse/study-v3.d.ts +21 -0
  463. package/dist/study/parse/study-v3.js +259 -0
  464. package/dist/study/parse/subject-state.d.ts +30 -0
  465. package/dist/{lab → study}/parse/subject-state.js +19 -19
  466. package/dist/{lab → study}/parse/subject.d.ts +3 -3
  467. package/dist/{lab → study}/parse/subject.js +34 -34
  468. package/dist/{lab → study}/parse/values.d.ts +3 -3
  469. package/dist/{lab → study}/parse/values.js +3 -3
  470. package/dist/{lab → study}/persona-resolve.d.ts +8 -8
  471. package/dist/{lab → study}/persona-resolve.js +6 -6
  472. package/dist/{lab → study}/plan-base.d.ts +7 -7
  473. package/dist/{lab → study}/plan-base.js +1 -1
  474. package/dist/{lab → study}/plan-participants.d.ts +12 -12
  475. package/dist/{lab → study}/plan-participants.js +4 -4
  476. package/dist/{lab → study}/plan-types.d.ts +31 -31
  477. package/dist/{lab → study}/plan-types.js +2 -2
  478. package/dist/study/plan.d.ts +13 -0
  479. package/dist/study/plan.js +101 -0
  480. package/dist/study/preflight-probes.d.ts +3 -0
  481. package/dist/{lab → study}/preflight-probes.js +20 -19
  482. package/dist/study/preflight-result.d.ts +8 -0
  483. package/dist/{lab → study}/preflight-result.js +5 -4
  484. package/dist/study/preflight.d.ts +94 -0
  485. package/dist/{lab → study}/preflight.js +12 -12
  486. package/dist/{lab → study}/requirements.d.ts +3 -3
  487. package/dist/{lab → study}/requirements.js +1 -1
  488. package/dist/study/route-inputs.d.ts +28 -0
  489. package/dist/{lab → study}/route-inputs.js +1 -1
  490. package/dist/{lab → study}/routing.d.ts +39 -33
  491. package/dist/{lab → study}/routing.js +60 -29
  492. package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
  493. package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
  494. package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
  495. package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
  496. package/dist/study/run-study-options.d.ts +28 -0
  497. package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
  498. package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
  499. package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
  500. package/dist/{lab → study}/summary.d.ts +16 -15
  501. package/dist/{lab → study}/summary.js +21 -21
  502. package/dist/{lab → study}/tasks.d.ts +18 -18
  503. package/dist/{lab → study}/tasks.js +14 -14
  504. package/dist/{lab → study}/types.d.ts +202 -196
  505. package/dist/{lab → study}/types.js +3 -1
  506. package/dist/{lab → study}/validation.d.ts +27 -27
  507. package/dist/{lab → study}/validation.js +53 -51
  508. package/dist/study/warnings.d.ts +12 -0
  509. package/dist/{lab → study}/warnings.js +62 -34
  510. package/dist/subject/clone.d.ts +7 -7
  511. package/dist/subject/clone.js +2 -2
  512. package/dist/subject/desktop-cli.d.ts +1 -1
  513. package/dist/subject/desktop-cli.js +2 -2
  514. package/dist/subject/local-tree-archive.d.ts +2 -2
  515. package/dist/subject/local-tree-archive.js +4 -4
  516. package/dist/subject/local-tree.d.ts +4 -4
  517. package/dist/subject/node-bootstrap.js +1 -1
  518. package/dist/subject/runtime.js +9 -10
  519. package/dist/subject/serve.d.ts +5 -5
  520. package/dist/subject/serve.js +3 -3
  521. package/dist/subject/state.d.ts +4 -4
  522. package/dist/subject/state.js +1 -1
  523. package/dist/subject/steps.d.ts +6 -6
  524. package/dist/subject/steps.js +5 -5
  525. package/dist/substrates/command-failure.d.ts +3 -3
  526. package/dist/substrates/command-failure.js +3 -3
  527. package/dist/substrates/desktop-session.js +2 -2
  528. package/dist/substrates/detached.d.ts +6 -6
  529. package/dist/substrates/detached.js +7 -7
  530. package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
  531. package/dist/substrates/e2b/cdp-probe.js +14 -17
  532. package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
  533. package/dist/substrates/e2b/desktop-browser.js +9 -9
  534. package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
  535. package/dist/substrates/e2b/desktop-cdp.js +9 -9
  536. package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
  537. package/dist/substrates/e2b/desktop-executor.js +13 -13
  538. package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
  539. package/dist/substrates/e2b/desktop-geometry.js +8 -8
  540. package/dist/substrates/e2b/desktop-media.d.ts +4 -4
  541. package/dist/substrates/e2b/desktop-media.js +1 -1
  542. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  543. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  544. package/dist/substrates/e2b/lifetime.js +1 -1
  545. package/dist/substrates/e2b/sandbox.d.ts +4 -4
  546. package/dist/substrates/e2b/sandbox.js +2 -2
  547. package/dist/substrates/e2b/sdk.d.ts +12 -12
  548. package/dist/substrates/e2b/sdk.js +7 -7
  549. package/dist/substrates/local/runtime-config.d.ts +4 -4
  550. package/dist/substrates/local/runtime-config.js +4 -4
  551. package/dist/tui/actions.d.ts +1 -1
  552. package/dist/tui/actions.js +13 -13
  553. package/dist/tui/contract.d.ts +23 -23
  554. package/dist/tui/contract.js +11 -11
  555. package/dist/tui/launch.d.ts +7 -7
  556. package/dist/tui/launch.js +36 -31
  557. package/dist/tui/project.js +5 -5
  558. package/dist/tui-app.js +139 -139
  559. package/dist/verify/actor.d.ts +8 -8
  560. package/dist/verify/actor.js +36 -36
  561. package/dist/verify/artifacts.d.ts +2 -2
  562. package/dist/verify/artifacts.js +3 -3
  563. package/dist/verify/context-growth.d.ts +9 -0
  564. package/dist/verify/context-growth.js +62 -0
  565. package/dist/verify/costs.d.ts +6 -6
  566. package/dist/verify/costs.js +8 -8
  567. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  568. package/dist/verify/shared-world-concurrent.js +79 -76
  569. package/dist/verify/shared-world.d.ts +2 -2
  570. package/dist/verify/shared-world.js +16 -16
  571. package/dist/verify/subject.d.ts +5 -5
  572. package/dist/verify/subject.js +19 -19
  573. package/dist/verify/verify.js +94 -44
  574. package/docs/README.md +25 -32
  575. package/docs/architecture/actor-contract.md +60 -91
  576. package/docs/architecture/browser-control.md +1 -1
  577. package/docs/architecture/desktop-sessions.md +7 -7
  578. package/docs/architecture/external-public-shared-world.md +68 -65
  579. package/docs/architecture/github-feedback-loop.md +2 -5
  580. package/docs/architecture/guest-desktop.md +2 -2
  581. package/docs/architecture/observer.md +34 -34
  582. package/docs/architecture/restricted-codex-analysis.md +34 -28
  583. package/docs/architecture/serve.md +34 -37
  584. package/docs/architecture/state-driven-executor.md +55 -58
  585. package/docs/architecture/task-protocol-support.md +6 -6
  586. package/docs/architecture/terminal-product-route.md +70 -110
  587. package/docs/contracts/README.md +24 -0
  588. package/docs/contracts/adapter-admission.md +3 -3
  589. package/docs/contracts/adapter-fixtures.md +4 -7
  590. package/docs/contracts/core.md +1 -3
  591. package/docs/contracts/errors.md +62 -0
  592. package/docs/contracts/feedback.md +8 -9
  593. package/docs/contracts/policy.md +7 -12
  594. package/docs/contracts/run-bundle.md +42 -44
  595. package/docs/contracts/schemas.md +446 -368
  596. package/docs/contracts/study-analysis.md +7 -4
  597. package/docs/contracts/study-costs.md +28 -9
  598. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  599. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  600. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  601. package/docs/principles/actor-fidelity.md +4 -4
  602. package/docs/principles/engineering.md +3 -3
  603. package/docs/principles/invariants-and-defaults.md +38 -38
  604. package/docs/principles/self-driving-harness.md +1 -5
  605. package/docs/principles/three-roles.md +1 -1
  606. package/docs/product/automatic-analysis.md +7 -7
  607. package/examples/README.md +1 -1
  608. package/examples/participant/README.md +5 -5
  609. package/examples/participant/run.mjs +11 -10
  610. package/examples/scorer/README.md +3 -3
  611. package/examples/scorer/run.mjs +11 -12
  612. package/examples/scorer/scorer.mjs +3 -3
  613. package/package.json +16 -17
  614. package/skills/humanish/SKILL.md +64 -60
  615. package/skills/humanish/agents/openai.yaml +1 -1
  616. package/AGENTS.md +0 -99
  617. package/CONTRIBUTING.md +0 -148
  618. package/dist/actors/codex/qualified-versions.d.ts +0 -72
  619. package/dist/actors/codex/qualified-versions.js +0 -132
  620. package/dist/cli/commands/lab-format.d.ts +0 -8
  621. package/dist/cli/commands/lab-route-run.d.ts +0 -19
  622. package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
  623. package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
  624. package/dist/cli/commands/lab-run.d.ts +0 -9
  625. package/dist/cli/commands/lab.d.ts +0 -3
  626. package/dist/cli/commands/lab.js +0 -199
  627. package/dist/cli/renamed-options.d.ts +0 -11
  628. package/dist/cli/renamed-options.js +0 -18
  629. package/dist/lab/composition-rules.d.ts +0 -7
  630. package/dist/lab/config.d.ts +0 -7
  631. package/dist/lab/discover.d.ts +0 -65
  632. package/dist/lab/init-templates.js +0 -416
  633. package/dist/lab/keys.d.ts +0 -2
  634. package/dist/lab/parse/comms.d.ts +0 -12
  635. package/dist/lab/parse/execution.d.ts +0 -19
  636. package/dist/lab/parse/subject-state.d.ts +0 -30
  637. package/dist/lab/plan.d.ts +0 -19
  638. package/dist/lab/plan.js +0 -132
  639. package/dist/lab/preflight-probes.d.ts +0 -3
  640. package/dist/lab/preflight-result.d.ts +0 -7
  641. package/dist/lab/preflight.d.ts +0 -92
  642. package/dist/lab/route-inputs.d.ts +0 -28
  643. package/dist/lab/run-lab-options.d.ts +0 -28
  644. package/dist/lab/warnings.d.ts +0 -2
  645. package/dist/observer/static.d.ts +0 -39
  646. package/dist/observer/static.js +0 -369
  647. package/dist/run-lab.d.ts +0 -112
  648. package/docs/architecture/comms-inbox.md +0 -122
  649. package/docs/architecture/desktop-recording.md +0 -80
  650. package/docs/architecture/local-browser-runtime.md +0 -178
  651. package/docs/architecture/observer-review.md +0 -144
  652. package/docs/architecture/participant-media.md +0 -90
  653. package/docs/architecture/project-layout.md +0 -62
  654. package/docs/architecture/real-email-receiving.md +0 -136
  655. package/docs/assets/humanish-drawdb-hero.png +0 -0
  656. package/docs/assets/humanish-observer-hero.png +0 -0
  657. package/docs/goals/current.md +0 -207
  658. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  659. package/docs/product/open-source-install-experience.md +0 -240
  660. package/docs/ramp/README.md +0 -295
  661. package/docs/release/open-source-readiness.md +0 -222
  662. package/docs/release/public-readiness-standard.md +0 -210
  663. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  664. /package/dist/{lab → study}/init-paths.d.ts +0 -0
  665. /package/dist/{lab → study}/init-paths.js +0 -0
  666. /package/dist/{lab → study}/init-plan.d.ts +0 -0
  667. /package/dist/{lab → study}/init-plan.js +0 -0
  668. /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
  669. /package/dist/{lab → study}/participant-assignment.js +0 -0
  670. /package/dist/{lab → study}/persona.d.ts +0 -0
  671. /package/dist/{lab → study}/persona.js +0 -0
@@ -1,32 +1,32 @@
1
1
  import type { RunIndexEntry } from "./run-index.js";
2
- /** One lab as the labs list shows it. */
3
- export interface LabRollup {
4
- labId: string;
5
- /** Total runs attributed to this lab. */
2
+ /** One study as the study list shows it. */
3
+ export interface StudyRollup {
4
+ studyId: string;
5
+ /** Total runs attributed to this study. */
6
6
  runs: number;
7
7
  /** Runs whose status record is fresh right now. */
8
8
  live: number;
9
- /** The newest run of this lab, whatever its state. */
9
+ /** The newest run of this study, whatever its state. */
10
10
  latest?: RunIndexEntry;
11
- /** Live runs, newest first — the labs list shows the first one inline. */
11
+ /** Live runs, newest first; the labs list shows the first one inline. */
12
12
  liveRuns: RunIndexEntry[];
13
13
  }
14
14
  /**
15
- * Group runs by lab, newest-first within each lab and by recency between labs. Runs with no lab
16
- * attribution are collected under `unattributed` rather than invented into a lab — the honest
15
+ * Group runs by study, newest-first within each study and by recency between studies. Runs with no study
16
+ * attribution are collected under `unattributed` rather than invented into a study. That is the
17
17
  * home for pre-contract runs and library callers.
18
18
  */
19
- export declare function groupRunsByLab(entries: readonly RunIndexEntry[]): {
20
- labs: LabRollup[];
19
+ export declare function groupRunsByStudy(entries: readonly RunIndexEntry[]): {
20
+ studies: StudyRollup[];
21
21
  unattributed: RunIndexEntry[];
22
22
  };
23
23
  /**
24
- * What the launch screen may claim about a lab, and on what evidence. Every figure carries the
24
+ * What the launch screen may claim about a study, and on what evidence. Every figure carries the
25
25
  * number of runs it came from; `sample: 0` means there is nothing to claim and the caller must
26
26
  * say so rather than showing an empty number.
27
27
  */
28
- export interface LabExpectation {
29
- /** How many completed runs of this lab the figures are drawn from. */
28
+ export interface StudyExpectation {
29
+ /** How many completed runs of this study the figures are drawn from. */
30
30
  sample: number;
31
31
  medianDurationMs?: number;
32
32
  /** Range across the sample, so the UI can show a span instead of a false point estimate. */
@@ -35,41 +35,41 @@ export interface LabExpectation {
35
35
  max: number;
36
36
  };
37
37
  medianCostUsd?: number;
38
- /** Completed runs whose cost was declared absent — excluded from the median, reported here so
38
+ /** Completed runs whose cost was declared absent: excluded from the median, reported here so
39
39
  * a partial sample can never masquerade as a full one. */
40
40
  costUnknown: number;
41
41
  }
42
42
  /**
43
- * Derive what to expect from a lab's own history. Only finished runs count: an interrupted run's
43
+ * Derive what to expect from a study's own history. Only finished runs count: an interrupted run's
44
44
  * duration is the length of an accident, not of a study, and including it would quietly bias the
45
45
  * estimate the operator uses to decide whether to press Start.
46
46
  *
47
47
  * The mode matters: mixing modes produces a false figure. A dry run spends nothing and
48
- * takes no time, so a median over nine dry runs and one live one reports that a live run is free —
48
+ * takes no time, so a median over nine dry runs and one live one reports that a live run is free,
49
49
  * next to a control that spends money. Pass the mode the figure is about; omit it only for a
50
50
  * summary that is not attached to an action.
51
51
  */
52
- export declare function expectationFor(entries: readonly RunIndexEntry[], mode?: "dry-run" | "live"): LabExpectation;
52
+ export declare function expectationFor(entries: readonly RunIndexEntry[], mode?: "dry-run" | "live"): StudyExpectation;
53
53
  /**
54
54
  * The one sentence the launch screen shows about time and money, with its denominator attached.
55
- * A lab with no history says so plainly instead of borrowing another lab's numbers or inventing
56
- * a range — "no runs yet" is information, and the operator can still press Start.
55
+ * A study with no history says so plainly instead of borrowing another study's numbers or inventing
56
+ * a range. "No runs yet" is information, and the operator can still press Start.
57
57
  */
58
- export declare function expectationLine(expectation: LabExpectation): string;
58
+ export declare function expectationLine(expectation: StudyExpectation): string;
59
59
  /**
60
- * The one line a lab may say about itself, wherever it is shown.
60
+ * The one line a study may say about itself, wherever it is shown.
61
61
  *
62
62
  * Prefers live figures: cost and duration are what someone reads before spending, and a median
63
63
  * diluted by dry runs reports a live study as cheaper and faster than it has ever been. With no
64
- * live history it reports the count and claims nothing about time or money — which is why this is
64
+ * live history it reports the count and claims nothing about time or money. That is why this is
65
65
  * shared rather than reimplemented per surface, since the two disagreeing is the whole failure.
66
66
  */
67
- export declare function labSummaryLine(row: Pick<LabRow, "runs" | "declared" | "expectation" | "liveExpectation">): string;
67
+ export declare function studySummaryLine(row: Pick<StudyRow, "runs" | "declared" | "expectation" | "liveExpectation">): string;
68
68
  /** Compact duration: seconds under a minute, then m/s, then h/m. */
69
69
  export declare function formatDuration(ms: number): string;
70
70
  export interface NormalizedThought {
71
71
  lines: string[];
72
- /** True when the source text did not fit and was cut — shown, never silent. */
72
+ /** True when the source text did not fit and was cut; shown, never silent. */
73
73
  truncated: boolean;
74
74
  }
75
75
  /**
@@ -77,7 +77,7 @@ export interface NormalizedThought {
77
77
  * arrive with markdown section leads (`**Thinking through setup**`) and hard newlines; a terminal
78
78
  * needs plain text wrapped to a line budget.
79
79
  *
80
- * The text is never paraphrased or shortened by meaning — only wrapped, and cut at a word boundary
80
+ * The text is never paraphrased or shortened by meaning. It is only wrapped, and cut at a word boundary
81
81
  * with an ellipsis when it does not fit. `truncated` is how the surface says so.
82
82
  */
83
83
  export declare function normalizeThought(text: string, options: {
@@ -101,16 +101,16 @@ export declare function listWindow(args: {
101
101
  };
102
102
  /** The label for a run's state, in the register the surfaces share. */
103
103
  export declare function livenessLabel(entry: Pick<RunIndexEntry, "liveness" | "verdict">): string;
104
- /** A lab as the labs list shows it: what is declared, joined to what actually happened. */
105
- export interface LabRow {
104
+ /** A study as the study list shows it: what is declared, joined to what actually happened. */
105
+ export interface StudyRow {
106
106
  /**
107
- * Stable identity for this row. A manifest's path when it has one, else the lab id, because two
107
+ * Stable identity for this row. A manifest's path when it has one, else the study id, because two
108
108
  * manifests can declare the same id, and keying rows by id makes them collapse into a pair of
109
109
  * indistinguishable duplicates.
110
110
  */
111
111
  key: string;
112
112
  /** The declared id. Run history attributes to this, so it is not unique across manifests. */
113
- labId: string;
113
+ studyId: string;
114
114
  /**
115
115
  * The handle an operator would actually type. Lab resolution is by filename, so the manifest
116
116
  * `\`.humanish/labs/persona-contrast-live.yaml\`` is reached as `persona-contrast-live` even when
@@ -121,25 +121,25 @@ export interface LabRow {
121
121
  title?: string;
122
122
  /**
123
123
  * The shortest label that is unique among the rows it is listed with: the title when no other
124
- * lab shares it, else the filename, else the full path. A list is only navigable if every row can
125
- * be told from every other one, and a title is not guaranteed to be distinct — two manifests in
124
+ * study shares it, else the filename, else the full path. A list is only navigable if every row can
125
+ * be told from every other one, and a title is not guaranteed to be distinct: two manifests in
126
126
  * this repo carry the same title and the same declared id, differing only by filename.
127
127
  */
128
128
  label: string;
129
129
  /** The manifest's own words, for the list to say what this study is. */
130
130
  description?: string;
131
- /** Repo-relative manifest path, absent for a lab known only from run history. */
131
+ /** Repo-relative manifest path, absent for a study known only from run history. */
132
132
  path?: string;
133
133
  origin?: "committed" | "ignored" | "explicit";
134
134
  /**
135
- * False for a lab that has runs but no manifest here: renamed, deleted, or run from a path that
135
+ * False for a study that has runs but no manifest here: renamed, deleted, or run from a path that
136
136
  * is gone. Its runs are still evidence and must stay reachable, so it is listed and marked rather
137
137
  * than dropped.
138
138
  */
139
139
  declared: boolean;
140
140
  /**
141
- * How many other manifests declare this same lab id. Above zero, the run history below is shared
142
- * between them and cannot be attributed to one file — worth saying, because it is a
141
+ * How many other manifests declare this same study id. Above zero, the run history below is shared
142
+ * between them and cannot be attributed to one file. That is worth saying, because it is a
143
143
  * misconfiguration the operator almost certainly does not know about.
144
144
  */
145
145
  sharesIdWith: number;
@@ -148,11 +148,11 @@ export interface LabRow {
148
148
  latest?: RunIndexEntry;
149
149
  liveRuns: RunIndexEntry[];
150
150
  /** Across every finished run, whatever its mode. A summary, never attached to a spend decision. */
151
- expectation: LabExpectation;
152
- /** Live runs only — the figure that belongs beside anything that spends money. */
153
- liveExpectation: LabExpectation;
151
+ expectation: StudyExpectation;
152
+ /** Live runs only: the figure that belongs beside anything that spends money. */
153
+ liveExpectation: StudyExpectation;
154
154
  }
155
- export interface DeclaredLab {
155
+ export interface DeclaredStudy {
156
156
  id: string;
157
157
  title?: string;
158
158
  /** The manifest's own description, so a list of studies can say what each one is. */
@@ -161,24 +161,24 @@ export interface DeclaredLab {
161
161
  origin?: "committed" | "ignored" | "explicit";
162
162
  }
163
163
  /**
164
- * Join declared lab manifests to run history.
164
+ * Join declared study manifests to run history.
165
165
  *
166
- * Neither side alone is the truth. A fresh project has manifests and no runs — those labs are the
166
+ * Neither side alone is the truth. A fresh project has manifests and no runs, and those labs are the
167
167
  * whole screen, and a list built only from history would be empty on exactly the first visit that
168
168
  * matters. A long-lived project accumulates runs from labs whose manifest has since been renamed or
169
- * deleted — that evidence still exists on disk, so dropping those rows would make real runs
169
+ * deleted. That evidence still exists on disk, so dropping those rows would make real runs
170
170
  * unreachable from the surface that is supposed to list them.
171
171
  *
172
172
  * One row per manifest, not per id. The two are not the same thing: a manifest is addressed by its
173
173
  * filename while its runs attribute to the id declared inside it, so several files can legitimately
174
174
  * share an id. Collapsing them hides a real file; keying by id duplicates a row with no way to tell
175
- * the copies apart. Both happen in practice — this repo has exactly that pair.
175
+ * the copies apart. Both happen in practice: this repo has exactly that pair.
176
176
  *
177
- * Order puts a lab someone is working in first, then labs by how recently they ran, then declared
177
+ * Order puts a study someone is working in first, then studies by how recently they ran, then declared
178
178
  * labs that have never run (alphabetically by the displayed label, so the order on screen is the
179
179
  * order a reader can predict), then labs known only from history.
180
180
  */
181
- export declare function labRows(declared: readonly DeclaredLab[], entries: readonly RunIndexEntry[]): {
182
- rows: LabRow[];
181
+ export declare function studyRows(declared: readonly DeclaredStudy[], entries: readonly RunIndexEntry[]): {
182
+ rows: StudyRow[];
183
183
  unattributed: RunIndexEntry[];
184
184
  };
@@ -1,49 +1,49 @@
1
- // The disk→view-model projection (#455 PR 2). Pure functions, no I/O, no rendering: this is where
2
- // lab grouping, the trust line's arithmetic, thought normalization and list-window math live, so
1
+ // The disk→view-model projection. Pure functions, no I/O, no rendering: this is where
2
+ // study grouping, the trust line's arithmetic, thought normalization and list-window math live, so
3
3
  // the parts most likely to be wrong are testable without a terminal.
4
4
  //
5
- // The honesty rules these encode, because they are the ones a UI is most tempted to break:
5
+ // The rules these encode, because they are the ones a UI is most tempted to break:
6
6
  // - a statistic always carries its denominator, and says when it has none;
7
7
  // - an unknown cost is `null` (declared absent), never 0;
8
8
  // - truncation is reported, never silent;
9
9
  // - a participant's reported thinking is quoted, never paraphrased or summarized.
10
10
  /**
11
- * Group runs by lab, newest-first within each lab and by recency between labs. Runs with no lab
12
- * attribution are collected under `unattributed` rather than invented into a lab — the honest
11
+ * Group runs by study, newest-first within each study and by recency between studies. Runs with no study
12
+ * attribution are collected under `unattributed` rather than invented into a study. That is the
13
13
  * home for pre-contract runs and library callers.
14
14
  */
15
- export function groupRunsByLab(entries) {
16
- const byLab = new Map();
15
+ export function groupRunsByStudy(entries) {
16
+ const byStudy = new Map();
17
17
  const unattributed = [];
18
18
  for (const entry of entries) {
19
- const labId = entry.lab?.id;
20
- if (labId === undefined) {
19
+ const studyId = entry.study?.id;
20
+ if (studyId === undefined) {
21
21
  unattributed.push(entry);
22
22
  continue;
23
23
  }
24
- const bucket = byLab.get(labId);
24
+ const bucket = byStudy.get(studyId);
25
25
  if (bucket === undefined)
26
- byLab.set(labId, [entry]);
26
+ byStudy.set(studyId, [entry]);
27
27
  else
28
28
  bucket.push(entry);
29
29
  }
30
- const labs = [...byLab.entries()].map(([labId, runs]) => {
30
+ const studies = [...byStudy.entries()].map(([studyId, runs]) => {
31
31
  const liveRuns = runs.filter((run) => run.liveness === "running");
32
32
  return {
33
- labId,
33
+ studyId,
34
34
  runs: runs.length,
35
35
  live: liveRuns.length,
36
36
  ...(runs[0] === undefined ? {} : { latest: runs[0] }),
37
37
  liveRuns,
38
38
  };
39
39
  });
40
- // A lab someone is working in sorts first; otherwise most recently used.
41
- labs.sort((left, right) => {
40
+ // A study someone is working in sorts first; otherwise most recently used.
41
+ studies.sort((left, right) => {
42
42
  if (left.live !== right.live)
43
43
  return right.live - left.live;
44
44
  return recencyOf(right.latest) - recencyOf(left.latest);
45
45
  });
46
- return { labs, unattributed };
46
+ return { studies, unattributed };
47
47
  }
48
48
  function recencyOf(entry) {
49
49
  if (entry === undefined)
@@ -58,12 +58,12 @@ function recencyOf(entry) {
58
58
  return 0;
59
59
  }
60
60
  /**
61
- * Derive what to expect from a lab's own history. Only finished runs count: an interrupted run's
61
+ * Derive what to expect from a study's own history. Only finished runs count: an interrupted run's
62
62
  * duration is the length of an accident, not of a study, and including it would quietly bias the
63
63
  * estimate the operator uses to decide whether to press Start.
64
64
  *
65
65
  * The mode matters: mixing modes produces a false figure. A dry run spends nothing and
66
- * takes no time, so a median over nine dry runs and one live one reports that a live run is free —
66
+ * takes no time, so a median over nine dry runs and one live one reports that a live run is free,
67
67
  * next to a control that spends money. Pass the mode the figure is about; omit it only for a
68
68
  * summary that is not attached to an action.
69
69
  */
@@ -79,7 +79,7 @@ export function expectationFor(entries, mode) {
79
79
  .filter((value) => typeof value === "number" && Number.isFinite(value))
80
80
  .sort((a, b) => a - b);
81
81
  // A cost is unknown whether it was declared absent (`null`) or never recorded at all
82
- // (`undefined` — every fail-closed exit finalized with no outcome). Counting only the first
82
+ // (`undefined`: every fail-closed exit finalized with no outcome). Counting only the first
83
83
  // reports "~$1.20 median · 3 runs" for a sample where two runs were never priced, which claims a
84
84
  // denominator the figure does not have.
85
85
  const costUnknown = finished.filter((entry) => entry.estimatedCostUsd === null || entry.estimatedCostUsd === undefined).length;
@@ -103,8 +103,8 @@ function median(sorted) {
103
103
  }
104
104
  /**
105
105
  * The one sentence the launch screen shows about time and money, with its denominator attached.
106
- * A lab with no history says so plainly instead of borrowing another lab's numbers or inventing
107
- * a range — "no runs yet" is information, and the operator can still press Start.
106
+ * A study with no history says so plainly instead of borrowing another study's numbers or inventing
107
+ * a range. "No runs yet" is information, and the operator can still press Start.
108
108
  */
109
109
  export function expectationLine(expectation) {
110
110
  if (expectation.sample === 0)
@@ -132,14 +132,14 @@ export function expectationLine(expectation) {
132
132
  return `${parts.join(" · ")} · ${sample}${unknown}`;
133
133
  }
134
134
  /**
135
- * The one line a lab may say about itself, wherever it is shown.
135
+ * The one line a study may say about itself, wherever it is shown.
136
136
  *
137
137
  * Prefers live figures: cost and duration are what someone reads before spending, and a median
138
138
  * diluted by dry runs reports a live study as cheaper and faster than it has ever been. With no
139
- * live history it reports the count and claims nothing about time or money — which is why this is
139
+ * live history it reports the count and claims nothing about time or money. That is why this is
140
140
  * shared rather than reimplemented per surface, since the two disagreeing is the whole failure.
141
141
  */
142
- export function labSummaryLine(row) {
142
+ export function studySummaryLine(row) {
143
143
  if (row.runs === 0)
144
144
  return row.declared ? "never run" : "no runs";
145
145
  if (row.liveExpectation.sample > 0)
@@ -162,7 +162,7 @@ export function formatDuration(ms) {
162
162
  * arrive with markdown section leads (`**Thinking through setup**`) and hard newlines; a terminal
163
163
  * needs plain text wrapped to a line budget.
164
164
  *
165
- * The text is never paraphrased or shortened by meaning — only wrapped, and cut at a word boundary
165
+ * The text is never paraphrased or shortened by meaning. It is only wrapped, and cut at a word boundary
166
166
  * with an ellipsis when it does not fit. `truncated` is how the surface says so.
167
167
  */
168
168
  export function normalizeThought(text, options) {
@@ -240,75 +240,75 @@ export function livenessLabel(entry) {
240
240
  }
241
241
  }
242
242
  /** The addressable handle for a manifest: its filename without directory or extension. */
243
- function labNameFromPath(manifestPath) {
243
+ function studyNameFromPath(manifestPath) {
244
244
  const base = manifestPath.split("/").pop() ?? manifestPath;
245
245
  return base.replace(/\.(ya?ml)$/i, "");
246
246
  }
247
247
  /**
248
- * Join declared lab manifests to run history.
248
+ * Join declared study manifests to run history.
249
249
  *
250
- * Neither side alone is the truth. A fresh project has manifests and no runs — those labs are the
250
+ * Neither side alone is the truth. A fresh project has manifests and no runs, and those labs are the
251
251
  * whole screen, and a list built only from history would be empty on exactly the first visit that
252
252
  * matters. A long-lived project accumulates runs from labs whose manifest has since been renamed or
253
- * deleted — that evidence still exists on disk, so dropping those rows would make real runs
253
+ * deleted. That evidence still exists on disk, so dropping those rows would make real runs
254
254
  * unreachable from the surface that is supposed to list them.
255
255
  *
256
256
  * One row per manifest, not per id. The two are not the same thing: a manifest is addressed by its
257
257
  * filename while its runs attribute to the id declared inside it, so several files can legitimately
258
258
  * share an id. Collapsing them hides a real file; keying by id duplicates a row with no way to tell
259
- * the copies apart. Both happen in practice — this repo has exactly that pair.
259
+ * the copies apart. Both happen in practice: this repo has exactly that pair.
260
260
  *
261
- * Order puts a lab someone is working in first, then labs by how recently they ran, then declared
261
+ * Order puts a study someone is working in first, then studies by how recently they ran, then declared
262
262
  * labs that have never run (alphabetically by the displayed label, so the order on screen is the
263
263
  * order a reader can predict), then labs known only from history.
264
264
  */
265
- export function labRows(declared, entries) {
266
- const { labs, unattributed } = groupRunsByLab(entries);
267
- const byId = new Map(labs.map((lab) => [lab.labId, lab]));
265
+ export function studyRows(declared, entries) {
266
+ const { studies, unattributed } = groupRunsByStudy(entries);
267
+ const byId = new Map(studies.map((study) => [study.studyId, study]));
268
268
  const runsOf = new Map();
269
269
  for (const entry of entries) {
270
- const labId = entry.lab?.id;
271
- if (labId === undefined)
270
+ const studyId = entry.study?.id;
271
+ if (studyId === undefined)
272
272
  continue;
273
- const bucket = runsOf.get(labId);
273
+ const bucket = runsOf.get(studyId);
274
274
  if (bucket === undefined)
275
- runsOf.set(labId, [entry]);
275
+ runsOf.set(studyId, [entry]);
276
276
  else
277
277
  bucket.push(entry);
278
278
  }
279
279
  const idCounts = new Map();
280
- for (const lab of declared)
281
- idCounts.set(lab.id, (idCounts.get(lab.id) ?? 0) + 1);
282
- const build = (labId, manifest, isDeclared) => {
283
- const rollup = byId.get(labId);
280
+ for (const study of declared)
281
+ idCounts.set(study.id, (idCounts.get(study.id) ?? 0) + 1);
282
+ const build = (studyId, manifest, isDeclared) => {
283
+ const rollup = byId.get(studyId);
284
284
  const manifestPath = manifest?.path;
285
285
  return {
286
- key: manifestPath ?? `id:${labId}`,
287
- labId,
288
- name: manifestPath === undefined ? labId : labNameFromPath(manifestPath),
286
+ key: manifestPath ?? `id:${studyId}`,
287
+ studyId,
288
+ name: manifestPath === undefined ? studyId : studyNameFromPath(manifestPath),
289
289
  ...(manifest?.title === undefined ? {} : { title: manifest.title }),
290
290
  ...(manifestPath === undefined ? {} : { path: manifestPath }),
291
291
  ...(manifest?.origin === undefined ? {} : { origin: manifest.origin }),
292
292
  declared: isDeclared,
293
293
  // Replaced by assignLabels once the whole set is known; a label is only meaningful relative
294
294
  // to the rows it sits beside.
295
- label: manifest?.title ?? (manifestPath === undefined ? labId : labNameFromPath(manifestPath)),
295
+ label: manifest?.title ?? (manifestPath === undefined ? studyId : studyNameFromPath(manifestPath)),
296
296
  ...(manifest?.description === undefined ? {} : { description: manifest.description }),
297
- sharesIdWith: Math.max(0, (idCounts.get(labId) ?? 0) - 1),
297
+ sharesIdWith: Math.max(0, (idCounts.get(studyId) ?? 0) - 1),
298
298
  runs: rollup?.runs ?? 0,
299
299
  live: rollup?.live ?? 0,
300
300
  ...(rollup?.latest === undefined ? {} : { latest: rollup.latest }),
301
301
  liveRuns: rollup?.liveRuns ?? [],
302
- expectation: expectationFor(runsOf.get(labId) ?? []),
303
- liveExpectation: expectationFor(runsOf.get(labId) ?? [], "live"),
302
+ expectation: expectationFor(runsOf.get(studyId) ?? []),
303
+ liveExpectation: expectationFor(runsOf.get(studyId) ?? [], "live"),
304
304
  };
305
305
  };
306
- const declaredIds = new Set(declared.map((lab) => lab.id));
306
+ const declaredIds = new Set(declared.map((study) => study.id));
307
307
  const rows = [
308
- ...declared.map((lab) => build(lab.id, lab, true)),
309
- ...labs
310
- .filter((lab) => !declaredIds.has(lab.labId))
311
- .map((lab) => build(lab.labId, undefined, false)),
308
+ ...declared.map((study) => build(study.id, study, true)),
309
+ ...studies
310
+ .filter((study) => !declaredIds.has(study.studyId))
311
+ .map((study) => build(study.studyId, undefined, false)),
312
312
  ];
313
313
  // Resolve each row's label before sorting, so the list is ordered by what a reader actually sees.
314
314
  assignLabels(rows);
@@ -332,9 +332,9 @@ export function labRows(declared, entries) {
332
332
  /**
333
333
  * Give every row the shortest label that distinguishes it: title, else filename, else path.
334
334
  *
335
- * Falling straight back to the filename whenever a title repeats — rather than decorating the
336
- * duplicate with a suffix — keeps the label something the operator can act on, because the filename
337
- * is exactly what `humanish lab run` takes.
335
+ * Falling straight back to the filename whenever a title repeats, instead of decorating the
336
+ * duplicate with a suffix, keeps the label something the operator can act on, because the filename
337
+ * is exactly what `humanish run` takes.
338
338
  */
339
339
  function assignLabels(rows) {
340
340
  const count = (values) => {
@@ -38,7 +38,7 @@ export declare function reclaimRunSandboxes(cwd: string, runInput: string, hooks
38
38
  */
39
39
  export declare function reclaimPinnedRunSandboxes(cwd: string, runPaths: PreparedRunArtifactPaths, hooks?: ReclaimHooks): Promise<ReclaimResult>;
40
40
  /**
41
- * Kill the sandboxes left by interrupted `humanish lab preflight` probes. A probe journals under
41
+ * Kill the sandboxes left by interrupted `humanish study check` probes. A probe journals under
42
42
  * .humanish/preflight/<probe-id>/ and removes the journal after a confirmed kill, so what is left
43
43
  * belongs to a probe that died or could not confirm its teardown. A journal whose probe may still
44
44
  * be running is left alone with the reason (see preflightReclaimDecision).
@@ -49,8 +49,8 @@ async function reclaimRun(cwd, runInput, locate, hooks) {
49
49
  const runId = runIdOf(runPaths);
50
50
  const journal = await reclaimJournal(runPaths, hooks);
51
51
  if (journal.kind === "empty") {
52
- // Honest empty: nothing journaled means either no sandbox was ever created (cheap interrupt —
53
- // nothing to reclaim) or the run predates receipts (0.35.x and earlier — the create-time TTL
52
+ // Empty: nothing journaled means either no sandbox was ever created (cheap interrupt:
53
+ // nothing to reclaim) or the run predates receipts (0.35.x and earlier, where the create-time TTL
54
54
  // is the only backstop for those). Either way there is no id to act on, and saying so beats
55
55
  // pretending a scan happened.
56
56
  warnings.push("No sandbox-receipts.ndjson in this run dir: either no sandbox was created before the interrupt, or the run predates create-time receipts. Nothing to reclaim by id; server-side kill-on-timeout covers anything that did exist.");
@@ -80,7 +80,7 @@ async function reclaimRun(cwd, runInput, locate, hooks) {
80
80
  return result;
81
81
  }
82
82
  /**
83
- * Kill the sandboxes left by interrupted `humanish lab preflight` probes. A probe journals under
83
+ * Kill the sandboxes left by interrupted `humanish study check` probes. A probe journals under
84
84
  * .humanish/preflight/<probe-id>/ and removes the journal after a confirmed kill, so what is left
85
85
  * belongs to a probe that died or could not confirm its teardown. A journal whose probe may still
86
86
  * be running is left alone with the reason (see preflightReclaimDecision).
@@ -1,14 +1,14 @@
1
1
  import type { ObserverResult } from "../observer/render.js";
2
2
  import type { RunProviderResource } from "./bundle.js";
3
- import type { RunLabProvenance } from "./status.js";
3
+ import type { RunStudyProvenance } from "./study-provenance.js";
4
4
  export declare const CLEANUP_SCHEMA = "humanish.cleanup-result.v1";
5
5
  export interface RunOptions {
6
- /** Which manifest produced this run (#455). */
7
- lab?: RunLabProvenance;
6
+ /** Which manifest produced this run. */
7
+ study?: RunStudyProvenance;
8
8
  cwd: string;
9
9
  dryRun?: boolean;
10
10
  runId?: string;
11
- simCount?: number;
11
+ participantCount?: number;
12
12
  /** Render the run's Observer through the finished run, opening the page when `open` is true.
13
13
  * Without it the preview writes no observer/index.html. */
14
14
  observer?: {
@@ -30,7 +30,7 @@ export interface RunResult {
30
30
  observer?: ObserverResult;
31
31
  warnings: string[];
32
32
  error?: {
33
- code: "HUMANISH_LAB_ANALYSIS_INVALID" | "HUMANISH_LAB_ANALYSIS_UNSUPPORTED" | "HUMANISH_LAB_TASKS_UNSUPPORTED" | "HUMANISH_LAB_OPTION_UNSUPPORTED" | "HUMANISH_LAB_COMMS_UNSUPPORTED" | "HUMANISH_LIVE_RUN_UNIMPLEMENTED" | "HUMANISH_INVALID_CWD" | "HUMANISH_RUN_ID_IN_USE" | "HUMANISH_INVALID_SIM_COUNT" | "HUMANISH_INVALID_PORT" | "HUMANISH_UNSUPPORTED_RERUN_FLAGS" | "HUMANISH_WATCH_OPTION_CONFLICT" | "HUMANISH_WATCH_SAFE_NOT_APPLICABLE" | "HUMANISH_APP_URL_REMOVED" | "HUMANISH_LAB_SCORER_BAD_REF" | "HUMANISH_LAB_SCORER_NOT_FOUND" | "HUMANISH_LAB_SCORER_LOAD_FAILED" | "HUMANISH_LAB_SCORER_NO_HOOKS" | "HUMANISH_LAB_SCORER_UNSUPPORTED_BACKEND";
33
+ code: "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_ANALYSIS_UNSUPPORTED" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_STUDY_V2_UNSUPPORTED" | "HUMANISH_STUDY_COMMS_UNSUPPORTED" | "HUMANISH_LIVE_RUN_UNIMPLEMENTED" | "HUMANISH_INVALID_CWD" | "HUMANISH_RUN_ID_IN_USE" | "HUMANISH_INVALID_PARTICIPANT_COUNT" | "HUMANISH_INVALID_PORT" | "HUMANISH_UNSUPPORTED_RERUN_FLAGS" | "HUMANISH_WATCH_OPTION_CONFLICT" | "HUMANISH_WATCH_SAFE_NOT_APPLICABLE" | "HUMANISH_RUN_OPTION_CONFLICT" | "HUMANISH_OBSERVE_OPTION_CONFLICT" | "HUMANISH_STUDY_SCORER_BAD_REF" | "HUMANISH_STUDY_SCORER_NOT_FOUND" | "HUMANISH_STUDY_SCORER_LOAD_FAILED" | "HUMANISH_STUDY_SCORER_NO_HOOKS" | "HUMANISH_STUDY_SCORER_UNSUPPORTED_BACKEND";
34
34
  message: string;
35
35
  };
36
36
  }
@@ -0,0 +1,53 @@
1
+ import type { RunCostSummary } from "./bundle.js";
2
+ import type { AnalysisAccounting } from "./costs.js";
3
+ import type { RunIndexEntry } from "./run-index.js";
4
+ /** The fields of run.json's `cost` that the run cost reads. Completeness is unknown when absent. */
5
+ export type RunCostSubtotal = Pick<RunCostSummary, "estimatedTotalUsd"> & Partial<Pick<RunCostSummary, "fullyEstimated" | "ratesAsOf" | "placeholder">>;
6
+ /** A run's analysis spend, every attempt counted once, as `readAnalysisAccounting` reads it. */
7
+ export interface RunAnalysisCost {
8
+ /** Requests the run's analyses sent, or may have sent. */
9
+ requests: number;
10
+ /** Their known estimated dollars; null when none has a price. */
11
+ estimatedUsd: number | null;
12
+ /** True when every request has a complete price and the history was read whole. */
13
+ complete: boolean;
14
+ /** Who billed the requests that recorded usage. */
15
+ providers: Array<"openai" | "codex">;
16
+ }
17
+ /** Complete, a lower bound, or unknown (`null`) when only the subtotal's dollars are at hand. */
18
+ type Completeness = boolean | null;
19
+ export interface RunCost {
20
+ /** Participants and desktops; null when the run has no cost summary, as in a dry run. */
21
+ run: {
22
+ usd: number | null;
23
+ complete: Completeness;
24
+ ratesAsOf: string | null;
25
+ placeholder: boolean;
26
+ } | null;
27
+ /** The run's analysis requests; null when it sent none. */
28
+ analysis: RunAnalysisCost | null;
29
+ /** The known dollars of both; null when neither has a figure. */
30
+ total: {
31
+ usd: number;
32
+ complete: Completeness;
33
+ } | null;
34
+ }
35
+ /** The accounting's analysis spend, or null when the run sent no analysis request. */
36
+ export declare function analysisCostOf(accounting: Pick<AnalysisAccounting, "dispatched" | "unresolved" | "unpriced" | "estimatedUsd" | "providers" | "warnings">): RunAnalysisCost | null;
37
+ export declare function runCost(subtotal: RunCostSubtotal | null | undefined, analysis?: RunAnalysisCost | null): RunCost;
38
+ /**
39
+ * A run index entry's cost: its participants-and-desktops figure, complete or a lower bound when
40
+ * the status record says which, plus its analyses.
41
+ */
42
+ export declare function indexedRunCost(entry: Pick<RunIndexEntry, "estimatedCostUsd" | "estimatedCostComplete" | "analysisCost">): RunCost;
43
+ /**
44
+ * The cost as separate parts: participants and desktops, then the analysis and the total when the
45
+ * run sent an analysis request. Empty when the run has no cost summary.
46
+ */
47
+ export declare function runCostParts(cost: RunCost): string[];
48
+ /**
49
+ * The cost in one short label for a list row: the total, and how many analyses it includes.
50
+ * Undefined when the run has no cost summary.
51
+ */
52
+ export declare function runCostLabel(cost: RunCost): string | undefined;
53
+ export {};