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
@@ -3,23 +3,23 @@ import { type RunBundle } from "../run/bundle.js";
3
3
  export declare function isZeroEventTerminalTrace(value: unknown): boolean;
4
4
  /**
5
5
  * Verifier for the terminal-product real-agent route (the in-sandbox command-scoped key route). A
6
- * LIVE terminal stream must carry the durable proof the safety contract requires, and must FAIL
7
- * CLOSED when any of it is missing — a blocked/failed agent run stays structurally verifiable (the
8
- * failure is the evidence) ONLY when the substrate/cleanup/interventions ledgers are present; it
6
+ * live terminal stream must carry the durable proof the safety contract requires, and must fail
7
+ * closed when any of it is missing. A blocked/failed agent run stays structurally verifiable (the
8
+ * failure is the evidence) only when the substrate/cleanup/interventions ledgers are present; it
9
9
  * must never become a hollow pass. Credential-shape leakage across every artifact file is already
10
- * caught by scanRunPublicSafetyArtifacts; this check enforces the STRUCTURAL evidence + the
10
+ * caught by scanRunPublicSafetyArtifacts; this check enforces the structural evidence + the
11
11
  * proven-teardown invariant. Dry-run/contract bundles are exempt (mode !== live).
12
12
  */
13
13
  export declare function validateTerminalProductEvidence(runPaths: PreparedRunArtifactPaths, bundle: RunBundle): Promise<string[]>;
14
14
  export declare function validateCodexAppServerEvidence(runPaths: PreparedRunArtifactPaths, bundle: RunBundle): Promise<string[]>;
15
15
  /**
16
16
  * Independent mirror of the producer-side no-engagement guard
17
- * (routes/computer-use/participant-execution.ts): a LIVE actor trace claiming goal_satisfied while
18
- * carrying zero action-bearing items AND zero message items is a hollow run — the actor neither did
19
- * nor said anything — and must not verify as evidence (invariant 4: evidence verifies fail-closed).
17
+ * (routes/computer-use/participant-execution.ts): a live actor trace claiming goal_satisfied while
18
+ * carrying zero action-bearing items and zero message items is a hollow run (the actor neither did
19
+ * nor said anything) and must not verify as evidence: evidence verifies fail-closed.
20
20
  * Live-vs-dry-run is judged exactly as the producer judges it, from bundle.mode alone;
21
21
  * dry-run/contract bundles legitimately carry no actions and stay exempt. Engagement is accepted
22
- * from EITHER surface — itemized trace items or the producer's counts — because providers differ in
22
+ * from either surface (itemized trace items or the producer's counts), because providers differ in
23
23
  * what they itemize; a hollow run reports zero on both. The trace is read defensively: isRunStream
24
24
  * does not validate the actor seam, and verify must not throw on a malformed one.
25
25
  */
@@ -15,11 +15,11 @@ export function isZeroEventTerminalTrace(value) {
15
15
  }
16
16
  /**
17
17
  * Verifier for the terminal-product real-agent route (the in-sandbox command-scoped key route). A
18
- * LIVE terminal stream must carry the durable proof the safety contract requires, and must FAIL
19
- * CLOSED when any of it is missing — a blocked/failed agent run stays structurally verifiable (the
20
- * failure is the evidence) ONLY when the substrate/cleanup/interventions ledgers are present; it
18
+ * live terminal stream must carry the durable proof the safety contract requires, and must fail
19
+ * closed when any of it is missing. A blocked/failed agent run stays structurally verifiable (the
20
+ * failure is the evidence) only when the substrate/cleanup/interventions ledgers are present; it
21
21
  * must never become a hollow pass. Credential-shape leakage across every artifact file is already
22
- * caught by scanRunPublicSafetyArtifacts; this check enforces the STRUCTURAL evidence + the
22
+ * caught by scanRunPublicSafetyArtifacts; this check enforces the structural evidence + the
23
23
  * proven-teardown invariant. Dry-run/contract bundles are exempt (mode !== live).
24
24
  */
25
25
  export async function validateTerminalProductEvidence(runPaths, bundle) {
@@ -27,8 +27,8 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
27
27
  return [];
28
28
  }
29
29
  const findings = [];
30
- // Detect the terminal-PRODUCT route by its unique actor-trace protocol ("terminal-exec"), NOT by
31
- // the broad stream.kind "terminal" — the existing local codex-exec/TUI routes also use terminal
30
+ // Detect the terminal-product route by its unique actor-trace protocol ("terminal-exec") instead of
31
+ // the broad stream.kind "terminal": the existing local codex-exec/TUI routes also use terminal
32
32
  // streams (with a different protocol) and must not be held to this route's ledger contract.
33
33
  const terminalStreams = bundle.streams.filter((stream) => stream.actor?.protocol === "terminal-exec" && stream.status !== "contract_proof_only");
34
34
  if (terminalStreams.length === 0) {
@@ -40,7 +40,7 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
40
40
  findings.push(`missing or malformed ${TERMINAL_LEDGERS_ARTIFACT} (humanish.terminal-ledgers.v1)`);
41
41
  return findings;
42
42
  }
43
- // Substrate lifecycle ledger: must record at least sandbox creation AND teardown.
43
+ // Substrate lifecycle ledger: must record at least sandbox creation and teardown.
44
44
  const lifecycle = Array.isArray(ledgers.lifecycle) ? ledgers.lifecycle : [];
45
45
  if (lifecycle.length === 0) {
46
46
  findings.push("substrate lifecycle ledger is empty (expected create -> ready -> exec -> cleanup events)");
@@ -50,25 +50,25 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
50
50
  if (!Array.isArray(ledgers.commandLog)) {
51
51
  findings.push("command log ledger is missing or not an array");
52
52
  }
53
- // Interventions ledger: must be PRESENT (an array). Empty is valid and expected (stdin disabled,
54
- // no assisted-input path) — but absent fails, so an assisted run can never masquerade as one
53
+ // Interventions ledger: must be present (an array). Empty is valid and expected (stdin disabled,
54
+ // no assisted-input path), but absent fails, so an assisted run can never masquerade as one
55
55
  // without an interventions record.
56
56
  if (!Array.isArray(ledgers.interventions)) {
57
57
  findings.push("interventions ledger is missing (an empty array is required-present, not optional)");
58
58
  }
59
- // Cleanup proof: the sandbox must be killed and proven reclaimed BY EXACT ID (remaining===0).
59
+ // Cleanup proof: the sandbox must be killed and proven reclaimed by exact ID (remaining===0).
60
60
  // humanish never calls Sandbox.list to derive this field; a live run that cannot prove teardown
61
61
  // fails closed (remaining===1 still-present-unconfirmed, remaining===-1 kill(id) itself
62
- // failed -- the server-side kill-on-timeout is the backstop for both).
62
+ // failed; the server-side kill-on-timeout is the backstop for both).
63
63
  const cleanup = isRecord(ledgers.cleanup) ? ledgers.cleanup : undefined;
64
64
  if (!cleanup) {
65
65
  findings.push("cleanup proof is missing");
66
66
  }
67
67
  else if (cleanup.killed !== true || cleanup.remaining !== 0) {
68
- findings.push(`cleanup not proven by id (killed=${String(cleanup.killed)}, remaining=${String(cleanup.remaining)}); a run that cannot prove sandbox teardown fails closed`);
68
+ findings.push(`sandbox cleanup is not proven by id (killed=${String(cleanup.killed)}, remaining=${String(cleanup.remaining)}), so the run cannot pass`);
69
69
  }
70
- // The redacted exec-stream + normalized transcript artifacts must be WRITTEN (the producer
71
- // always writes them on the live path, even empty for a no-output blocked run — so absence is a
70
+ // The redacted exec-stream + normalized transcript artifacts must be written (the producer
71
+ // always writes them on the live path, even empty for a no-output blocked run, so absence is a
72
72
  // real evidence gap, while emptiness is legitimate and keeps blocked runs verifiable).
73
73
  if (!(await readSafeRunArtifactBytes(runPaths, TERMINAL_EVENTS_ARTIFACT))) {
74
74
  findings.push(`missing terminal event stream artifact (${TERMINAL_EVENTS_ARTIFACT})`);
@@ -94,19 +94,19 @@ export async function validateTerminalProductEvidence(runPaths, bundle) {
94
94
  return findings;
95
95
  }
96
96
  /**
97
- * Verifier for the terminal cost ledger and no-spend proof. A LIVE terminal-product bundle MUST
98
- * carry both (fail closed if absent on a live run). The load-bearing honesty check: the no-spend
99
- * proof may NOT claim zero on a line the ledger marks `null`
100
- * (UNMEASURED) — a proof can never claim more than the ledger measured. And the observed KNOWN
101
- * spend may not exceed the declared cap (the proof's own maxUsd) — fail-closed, not advisory.
102
- * The null discipline is enforced here too: a present line's `usd` must be a number OR literally
97
+ * Verifier for the terminal cost ledger and no-spend proof. A live terminal-product bundle must
98
+ * carry both (fail closed if absent on a live run). The main check: the no-spend
99
+ * proof may not claim zero on a line the ledger marks `null`
100
+ * (unmeasured): a proof can never claim more than the ledger measured. And the observed known
101
+ * spend may not exceed the declared cap (the proof's own maxUsd): fail-closed, not advisory.
102
+ * The null discipline is enforced here too: a present line's `usd` must be a number or literally
103
103
  * null (never undefined/omitted), so "not measured" can never be silently dropped.
104
104
  */
105
105
  function validateTerminalCostEvidence(ledgers) {
106
106
  const findings = [];
107
107
  const cost = isRecord(ledgers.cost) ? ledgers.cost : undefined;
108
108
  if (!cost || cost.schema !== "humanish.terminal-cost-ledger.v1") {
109
- findings.push("missing or malformed cost ledger (humanish.terminal-cost-ledger.v1) — a live terminal-product run must derive a cost ledger");
109
+ findings.push("missing or malformed cost ledger (humanish.terminal-cost-ledger.v1): a live terminal-product run must record one");
110
110
  return findings;
111
111
  }
112
112
  const lines = isRecord(cost.lines) ? cost.lines : undefined;
@@ -114,8 +114,8 @@ function validateTerminalCostEvidence(ledgers) {
114
114
  findings.push("cost ledger has no lines block");
115
115
  return findings;
116
116
  }
117
- // The null discipline: every applicable category line must be PRESENT with `usd` as a number or
118
- // literally null. `undefined`/omitted is forbidden — that would silently lose the "not measured"
117
+ // The null discipline: every applicable category line must be present with `usd` as a number or
118
+ // literally null. `undefined`/omitted is forbidden because it would silently lose the "not measured"
119
119
  // distinction. Track which categories the ledger marks null so the no-spend proof cannot lie about them.
120
120
  const nullCategories = new Set();
121
121
  for (const category of COST_CATEGORIES) {
@@ -136,28 +136,28 @@ function validateTerminalCostEvidence(ledgers) {
136
136
  }
137
137
  const proof = isRecord(ledgers.noSpendProof) ? ledgers.noSpendProof : undefined;
138
138
  if (!proof || proof.schema !== "humanish.terminal-no-spend-proof.v1") {
139
- findings.push("missing or malformed no-spend proof (humanish.terminal-no-spend-proof.v1) — the no-spend proof must be derived from the ledger");
139
+ findings.push("missing or malformed no-spend proof (humanish.terminal-no-spend-proof.v1): a live terminal-product run must derive one from its cost ledger");
140
140
  return findings;
141
141
  }
142
- // HONESTY CHECK: the no-spend proof must NOT claim zero on a line the ledger marks `null`. A
142
+ // Claim check: the no-spend proof must not claim zero on a line the ledger marks `null`. A
143
143
  // knownZeroLines entry that is actually unmeasured in the ledger means the proof claimed more than
144
- // it measured — fail closed.
144
+ // it measured, so it fails closed.
145
145
  const knownZeroLines = Array.isArray(proof.knownZeroLines) ? proof.knownZeroLines : [];
146
146
  for (const category of knownZeroLines) {
147
147
  if (nullCategories.has(String(category))) {
148
- findings.push(`no-spend proof claims zero on line "${String(category)}" but the cost ledger marks it null (UNMEASURED); a proof may not claim zero on a line it did not measure`);
148
+ findings.push(`the no-spend proof claims zero on line "${String(category)}", but the cost ledger marks that line unmeasured (null), and a proof may not claim zero for a line it did not measure`);
149
149
  }
150
150
  }
151
- // FAIL-CLOSED CAP: observed KNOWN spend may not exceed the declared cap (the proof's maxUsd). The
151
+ // Fail-closed cap: observed known spend may not exceed the declared cap (the proof's maxUsd). The
152
152
  // ledger's knownTotalUsd is the measured spend; null lines do not count toward it (and the proof
153
153
  // reports them as unmeasured). A satisfied proof whose known total exceeds its cap is contradictory.
154
154
  const knownTotalUsd = typeof cost.knownTotalUsd === "number" ? cost.knownTotalUsd : Number.NaN;
155
155
  const maxUsd = typeof proof.maxUsd === "number" ? proof.maxUsd : null;
156
156
  if (maxUsd !== null && Number.isFinite(knownTotalUsd) && knownTotalUsd > maxUsd) {
157
- findings.push(`observed KNOWN spend ${knownTotalUsd} USD exceeds the declared cap maxUsd=${maxUsd}; the run must fail closed, not verify green`);
157
+ findings.push(`measured spend ${knownTotalUsd} USD is over the declared cap maxUsd=${maxUsd}, so the run cannot pass verification`);
158
158
  }
159
159
  // A proof that asserts `satisfied:true` while a known line is non-zero (knownNonZeroLines) is
160
- // self-contradictory — reject it (the proof's own derived state must be internally consistent).
160
+ // self-contradictory; reject it (the proof's own derived state must be internally consistent).
161
161
  const knownNonZeroLines = Array.isArray(proof.knownNonZeroLines) ? proof.knownNonZeroLines : [];
162
162
  if (proof.satisfied === true && knownNonZeroLines.length > 0) {
163
163
  findings.push(`no-spend proof claims satisfied:true but reports known non-zero spend lines (${knownNonZeroLines.map(String).join(", ")})`);
@@ -205,7 +205,7 @@ export async function validateCodexAppServerEvidence(runPaths, bundle) {
205
205
  }
206
206
  return findings;
207
207
  }
208
- // Trace item kinds that show the actor DID something (drove UI, ran a command, called a tool,
208
+ // Trace item kinds that show the actor did something (drove UI, ran a command, called a tool,
209
209
  // changed a file). reasoning/screenshot/plan/notice items are observation, not engagement.
210
210
  const ACTION_BEARING_ACTOR_ITEM_KINDS = new Set([
211
211
  "ui_action",
@@ -215,12 +215,12 @@ const ACTION_BEARING_ACTOR_ITEM_KINDS = new Set([
215
215
  ]);
216
216
  /**
217
217
  * Independent mirror of the producer-side no-engagement guard
218
- * (routes/computer-use/participant-execution.ts): a LIVE actor trace claiming goal_satisfied while
219
- * carrying zero action-bearing items AND zero message items is a hollow run — the actor neither did
220
- * nor said anything — and must not verify as evidence (invariant 4: evidence verifies fail-closed).
218
+ * (routes/computer-use/participant-execution.ts): a live actor trace claiming goal_satisfied while
219
+ * carrying zero action-bearing items and zero message items is a hollow run (the actor neither did
220
+ * nor said anything) and must not verify as evidence: evidence verifies fail-closed.
221
221
  * Live-vs-dry-run is judged exactly as the producer judges it, from bundle.mode alone;
222
222
  * dry-run/contract bundles legitimately carry no actions and stay exempt. Engagement is accepted
223
- * from EITHER surface — itemized trace items or the producer's counts — because providers differ in
223
+ * from either surface (itemized trace items or the producer's counts), because providers differ in
224
224
  * what they itemize; a hollow run reports zero on both. The trace is read defensively: isRunStream
225
225
  * does not validate the actor seam, and verify must not throw on a malformed one.
226
226
  */
@@ -264,7 +264,7 @@ function hasStopWhenObservationEvidence(items, screenshotCount) {
264
264
  item.screenshotRef.path.length > 0);
265
265
  if (!hasScreenshot)
266
266
  return false;
267
- // A matched stopWhen, or a declared dwell window that ended the session (#510): both are
267
+ // A matched stopWhen, or a declared dwell window that ended the session: both are
268
268
  // structured, harness-owned completion, with frames behind them.
269
269
  return items.some((item) => isRecord(item) &&
270
270
  item.kind === "notice" &&
@@ -13,8 +13,8 @@ export declare function missingLocalEvidenceArtifacts(runPaths: PreparedRunArtif
13
13
  export declare function streamScreenshotPaths(bundle: RunBundle): Set<string>;
14
14
  export declare function invalidRunEvidenceReferences(bundle: RunBundle): string[];
15
15
  /**
16
- * redaction.screenshots: "raw" is the SUPPORTED local default (full-fidelity frames in
17
- * gitignored .humanish), not a verify failure — but ok: true must never read as "share-ready",
16
+ * redaction.screenshots: "raw" is the supported local default (full-fidelity frames in
17
+ * gitignored .humanish), not a verify failure, but ok: true must never read as "share-ready",
18
18
  * so verify surfaces the posture as a warning in both human and JSON output. Read defensively
19
19
  * for the same reason as noEngagementActorFindings.
20
20
  */
@@ -213,8 +213,8 @@ export function invalidRunEvidenceReferences(bundle) {
213
213
  return findings.slice(0, MAX_REPORTED_FINDINGS);
214
214
  }
215
215
  /**
216
- * redaction.screenshots: "raw" is the SUPPORTED local default (full-fidelity frames in
217
- * gitignored .humanish), not a verify failure — but ok: true must never read as "share-ready",
216
+ * redaction.screenshots: "raw" is the supported local default (full-fidelity frames in
217
+ * gitignored .humanish), not a verify failure, but ok: true must never read as "share-ready",
218
218
  * so verify surfaces the posture as a warning in both human and JSON output. Read defensively
219
219
  * for the same reason as noEngagementActorFindings.
220
220
  */
@@ -224,7 +224,7 @@ export function rawScreenshotPostureWarnings(bundle, redactedShapeFrames) {
224
224
  return [];
225
225
  }
226
226
  return [
227
- `Screenshots are FULL-FIDELITY (raw) or carry no redaction claim on ${rawStreamIds.join(", ")} — supported for local use, NOT publish-safe as-is. Verify ok does not mean share-ready; set policies.redactScreenshots: true to blur a share-as-is bundle.`,
227
+ `Screenshots on ${rawStreamIds.join(", ")} are unblurred, or do not say whether they were blurred. That is fine for local use, but the bundle is not safe to publish as it is: verify ok does not mean share-ready. Set policies.redactScreenshots: true to blur screenshots in a bundle you plan to share.`,
228
228
  ];
229
229
  }
230
230
  /**
@@ -0,0 +1,9 @@
1
+ import type { RunBundle } from "../run/bundle.js";
2
+ /**
3
+ * The median prompt of the last three turns over that of turns 2 to 4, from a trace's
4
+ * `tokenUsage.turns`. Turn 1 is left out: it carries the instructions alone. Undefined when fewer
5
+ * than six turns report their input.
6
+ */
7
+ export declare function contextGrowth(turns: readonly unknown[]): number | undefined;
8
+ /** One warning per live participant whose prompt stayed the same size from turn 2 on. */
9
+ export declare function flatContextWarnings(bundle: RunBundle): string[];
@@ -0,0 +1,62 @@
1
+ import { ACTOR_TRACE_SCHEMA } from "../actors/contract.js";
2
+ import { isRecord } from "../run/type-guards.js";
3
+ /** Fewer turns with usage than this say nothing about whether the prompt grew. */
4
+ const MIN_TURNS = 6;
5
+ /**
6
+ * A participant that remembers sends a longer prompt each turn: every turn adds a screenshot and a
7
+ * reply. Over 113 participant traces from live runs (OpenAI computer-use, the Codex participant and
8
+ * the Claude session), the median prompt of the last three turns was at least 1.21 times that of
9
+ * turns 2 to 4. A participant that carries only its last turn stays flat: about 3,100 tokens from
10
+ * turn 2 to turn 527 in one zero-data-retention run, a ratio near 1.0.
11
+ */
12
+ const MIN_GROWTH = 1.1;
13
+ /**
14
+ * The whole prompt one turn sent. `input` includes the cached parts, except in Claude session
15
+ * traces written before that was fixed, which recorded the uncached part alone; there the cached
16
+ * parts are larger than `input`, and the three are added.
17
+ */
18
+ function promptTokens(turn) {
19
+ if (!isRecord(turn) || typeof turn.input !== "number")
20
+ return undefined;
21
+ const cached = typeof turn.cachedInput === "number" ? turn.cachedInput : 0;
22
+ const written = typeof turn.cacheWriteInput === "number" ? turn.cacheWriteInput : 0;
23
+ return cached + written > turn.input ? turn.input + cached + written : turn.input;
24
+ }
25
+ function median(values) {
26
+ const sorted = [...values].sort((a, b) => a - b);
27
+ const middle = Math.floor(sorted.length / 2);
28
+ return sorted.length % 2 === 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
29
+ }
30
+ /**
31
+ * The median prompt of the last three turns over that of turns 2 to 4, from a trace's
32
+ * `tokenUsage.turns`. Turn 1 is left out: it carries the instructions alone. Undefined when fewer
33
+ * than six turns report their input.
34
+ */
35
+ export function contextGrowth(turns) {
36
+ const sizes = turns.map(promptTokens);
37
+ if (sizes.length < MIN_TURNS || sizes.some((size) => size === undefined))
38
+ return undefined;
39
+ const later = sizes.slice(1);
40
+ const early = median(later.slice(0, 3));
41
+ return early > 0 ? median(later.slice(-3)) / early : undefined;
42
+ }
43
+ /** One warning per live participant whose prompt stayed the same size from turn 2 on. */
44
+ export function flatContextWarnings(bundle) {
45
+ if (bundle.mode !== "live")
46
+ return [];
47
+ const warnings = [];
48
+ for (const stream of bundle.streams) {
49
+ const trace = stream.actor;
50
+ if (!isRecord(trace) || trace.schema !== ACTOR_TRACE_SCHEMA)
51
+ continue;
52
+ const turns = isRecord(trace.tokenUsage) ? trace.tokenUsage.turns : undefined;
53
+ if (!Array.isArray(turns))
54
+ continue;
55
+ const growth = contextGrowth(turns);
56
+ if (growth === undefined || growth >= MIN_GROWTH)
57
+ continue;
58
+ const near = Math.round(median(turns.slice(1).map((turn) => promptTokens(turn))));
59
+ warnings.push(`${stream.id}: its context did not grow. Its prompt stayed near ${near} tokens from turn 2 to turn ${turns.length}, so it likely answered each turn without the earlier ones.`);
60
+ }
61
+ return warnings;
62
+ }
@@ -18,12 +18,12 @@ export declare function contradictsAccountBilling(streams: readonly {
18
18
  breakdown?: unknown;
19
19
  } | undefined): boolean;
20
20
  /**
21
- * Verify the LABELING/provenance of any cost figure a bundle CLAIMS — never its magnitude. Returns
22
- * [] (pass) unless a dollar claim lacks its provenance (invariant 6) or a total misreports its
23
- * known lines. ABSENCE always passes (fail-open on display, discipline #3): a bundle with no cost,
24
- * a null estimate, or a participant without estimatedCost is fine. A NON-NULL figure must carry its
25
- * ratesAsOf date + source; a NUMBER total must equal round6(sum of ONLY the non-null lines) and a
26
- * null line may never be coerced to 0. A null estimate must be declared honestly (a reason + null
21
+ * Verify the labeling/provenance of any cost figure a bundle claims, and never its magnitude. Returns
22
+ * [] (pass) unless a dollar claim lacks its provenance or a total misreports its
23
+ * known lines. Absence always passes (fail-open on display): a bundle with no cost,
24
+ * a null estimate, or a participant without estimatedCost is fine. A non-null figure must carry its
25
+ * ratesAsOf date + source; a number total must equal round6(sum of only the non-null lines) and a
26
+ * null line may never be coerced to 0. A null estimate must be declared (a reason + null
27
27
  * ratesAsOf), mirroring the terminal no-spend proof's null-discipline. Account-billed participants
28
28
  * also have their execution profile and provider request receipts checked here.
29
29
  */
@@ -22,12 +22,12 @@ export function contradictsAccountBilling(streams, cost) {
22
22
  });
23
23
  }
24
24
  /**
25
- * Verify the LABELING/provenance of any cost figure a bundle CLAIMS — never its magnitude. Returns
26
- * [] (pass) unless a dollar claim lacks its provenance (invariant 6) or a total misreports its
27
- * known lines. ABSENCE always passes (fail-open on display, discipline #3): a bundle with no cost,
28
- * a null estimate, or a participant without estimatedCost is fine. A NON-NULL figure must carry its
29
- * ratesAsOf date + source; a NUMBER total must equal round6(sum of ONLY the non-null lines) and a
30
- * null line may never be coerced to 0. A null estimate must be declared honestly (a reason + null
25
+ * Verify the labeling/provenance of any cost figure a bundle claims, and never its magnitude. Returns
26
+ * [] (pass) unless a dollar claim lacks its provenance or a total misreports its
27
+ * known lines. Absence always passes (fail-open on display): a bundle with no cost,
28
+ * a null estimate, or a participant without estimatedCost is fine. A non-null figure must carry its
29
+ * ratesAsOf date + source; a number total must equal round6(sum of only the non-null lines) and a
30
+ * null line may never be coerced to 0. A null estimate must be declared (a reason + null
31
31
  * ratesAsOf), mirroring the terminal no-spend proof's null-discipline. Account-billed participants
32
32
  * also have their execution profile and provider request receipts checked here.
33
33
  */
@@ -76,7 +76,7 @@ function costSummaryFindings(cost) {
76
76
  }
77
77
  }
78
78
  else if (anyKnown) {
79
- // Every-line-null is the only honest null total; a null total beside a known line hides spend.
79
+ // Every-line-null is the only valid null total; a null total beside a known line hides spend.
80
80
  findings.push("run cost estimatedTotalUsd is null but a breakdown line carries a known (non-null) cost");
81
81
  }
82
82
  return findings;
@@ -117,7 +117,7 @@ function participantEstimateFindings(stream) {
117
117
  }
118
118
  }
119
119
  else {
120
- // Declared-absent honesty (invariant 5): a null estimate must say WHY and carry null ratesAsOf.
120
+ // Declared absence: a null estimate must say why and carry null ratesAsOf.
121
121
  if (estimate.reason === undefined) {
122
122
  findings.push(`participant ${participantLabel} records a null cost estimate without a reason`);
123
123
  }
@@ -1,8 +1,8 @@
1
1
  import type { RunBundle } from "../run/bundle.js";
2
2
  import { type SharedWorldEvidence } from "../run/shared-world-evidence.js";
3
3
  /**
4
- * CONCURRENT branch: N personas drove ONE getHost-exposed plane at once. Verify fail-closed: the
5
- * shape (laneWindows + stateSeries + outcomes, NO timeline); the required and forbidden
4
+ * Concurrent branch: N personas drove one getHost-exposed plane at once. Verify fail-closed: the
5
+ * shape (laneWindows + stateSeries + outcomes, no timeline); the required and forbidden
6
6
  * attributionLimits; the harness-minted getHost target every actor drove; the synthetic-subject
7
7
  * provenance gate; digest-only state series with the allowed-keys tripwire; single-plane
8
8
  * provenance; and the concurrency-on-pass gate (genuine overlap and a state delta at or after an