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,13 +1,8 @@
1
1
  # Observer Architecture
2
2
 
3
- Date: 2026-06-01 (current-state note updated 2026-07-14)
4
-
5
- Status: implemented for synthetic streams and persisted live browser,
6
- terminal-product, fan-out, and shared-world evidence.
7
- Plain computer-use and shared-world runs can publish an in-progress bundle to
8
- an attached loopback Observer without persisting runtime stream-auth URLs. The
9
- version-pinned README image is a synthetic technical sample, not real-application
10
- proof.
3
+ The Observer renders synthetic streams and saved live browser, terminal-product, fan-out and
4
+ shared-world evidence. A computer-use or shared-world run can publish its in-progress bundle to an
5
+ attached loopback Observer without saving runtime stream-auth URLs.
11
6
 
12
7
  ## Decision
13
8
 
@@ -80,7 +75,7 @@ forwarding, and only contained run paths in the TUI's project are accepted.
80
75
  | `watch` during a study | Saved evidence and available in-memory desktop streams | Until the attached command exits |
81
76
  | `observe --run <id>` | Saved evidence from the selected run | Until the command exits |
82
77
  | TUI Open in Observer | Saved evidence in the selected run; shares the project's evidence library | Until the TUI exits |
83
- | `serve` | Saved evidence across the project's library | Until the server command exits |
78
+ | `observe --all` | Saved evidence across the project's library | Until the server command exits |
84
79
  | Static HTML or `file://` | The exported snapshot | Independent of a server |
85
80
 
86
81
  `observe` uses the same current-data projection as the attached viewer, scoped
@@ -103,7 +98,7 @@ mismatched records omit the observation. A stale heartbeat alone does not prove
103
98
  interruption, and stored PIDs are neither probed nor returned. Static rendering
104
99
  and export do not create this served-only observation.
105
100
 
106
- Watch is deliberately distinct from `humanish serve`. Watch serves ONE
101
+ Watch is deliberately distinct from `humanish observe --all`. Watch serves one
107
102
  attached run, and the process that created it may inject runtime stream URLs
108
103
  (live hosted-desktop viewers) into the observer data it serves. Serve is the
109
104
  library surface (every run under `.humanish/runs/`) and never serves runtime
@@ -123,23 +118,23 @@ Misdirected Request` otherwise) and the shared `buildServeSecurityHeaders()` on
123
118
  every response (both live in `src/observer/http.ts`, shared without a module cycle).
124
119
  The Host allowlist applies in exposed mode; frame-denial headers apply in both modes.
125
120
 
126
- Exposed mode also SCOPES the surface to the attached live run (`result.run`): the
121
+ Exposed mode also scopes the surface to the attached live run (`result.run`): the
127
122
  `/_humanish/history.json` index is filtered to that one run, and `/_humanish/runs/<id>/…`
128
123
  404s byte-identically to a nonexistent run for any other id. A remote viewer who
129
124
  clears the edge auth can therefore see only the run being watched. They can never
130
125
  enumerate or fetch a prior run's raw, unverified evidence. Loopback keeps the full cross-run
131
126
  library (history + any run by id) exactly as before.
132
127
 
133
- `watch --expose` is the ONE surface that DELIBERATELY streams the live E2B
128
+ `watch --expose` is the one surface that deliberately streams the live E2B
134
129
  desktop to a remote viewer: the attached watch process genuinely holds the
135
130
  runtime stream URLs (in the in-memory `WeakMap`, never persisted), and watching
136
131
  from a phone needs them. It is safe only because the
137
132
  ngrok edge (Google OAuth + allow rules) or an operator `--public-url` edge
138
133
  authenticates the viewer first, so `watch --expose` always requires edge
139
134
  auth (a live run is never `share_ready`, so `--safe` alone cannot gate it). The
140
- attached server comes up DURING the run and survives a `timed_out`/`failed` run
135
+ attached server comes up during the run and survives a `timed_out`/`failed` run
141
136
  (serving is not gated on pass/fail), so a failed run's evidence stays inspectable
142
- to Ctrl-C. `serve` still never injects stream URLs. See
137
+ to Ctrl-C. `observe --all` still never injects stream URLs. See
143
138
  [Serve: the run library surface](serve.md).
144
139
 
145
140
  ### Live desktop iframe authority
@@ -178,8 +173,9 @@ between an active study and its provisional evidence outcome.
178
173
 
179
174
  ## UI Shape
180
175
 
181
- See [Watching and reviewing evidence](observer-review.md) for current controls,
182
- entry-point capabilities, timing limits and browser acceptance commands.
176
+ [Watch and review in the Observer](https://humanish.dev/docs/review-surfaces#watch-and-review-in-the-observer)
177
+ describes the current controls, entry points and timing limits for users;
178
+ [Browser checks](#browser-checks) below covers the proofs that pin them.
183
179
 
184
180
  The Observer shell has:
185
181
 
@@ -198,7 +194,7 @@ the frozen Observer data schema or start provider requests. Analysis polling has
198
194
  an independent lifecycle, so a delayed companion does not stall recording updates.
199
195
  Invalid or stale interpretation never overwrites original participant outcomes.
200
196
  Recording navigation retains its originating view, and nonvisual citations open
201
- the source event rather than inventing a playback frame.
197
+ the source event with no invented playback frame.
202
198
 
203
199
  The participant grid uses equal-height previews whose widths follow each screen's
204
200
  aspect ratio. A 44px identity/source/outcome caption sits below the captured pixels;
@@ -230,29 +226,16 @@ A host adapter may provide:
230
226
  If no embed URL exists, the Observer still renders the Codex-style timeline and
231
227
  session contract instead of failing the stream.
232
228
 
233
- ## Historical slice and remaining gaps
234
-
235
- The original 2026-06-01 slice implemented the Observer substrate and synthetic
236
- stream contracts; local `codex-exec` active-run snapshots followed.
237
-
238
- Subsequent additions through 2026-06-11 included:
229
+ ## Remaining gaps
239
230
 
240
- - Playwright-backed browser proof with scripted, app-specific
241
- `browser.steps` authored in `humanish/scenarios/*.yaml` (`src/actors/scripted-browser/`);
242
- - native Codex app-server session adapter (`src/actors/codex/app-server.ts`,
243
- registered in `src/actors/registry.ts`);
244
- - E2B desktop participants on the computer-use and shared-world routes;
245
- - computer-use bundles persist a `screenshots/` directory and the Observer
246
- renders the frames (`src/routes/computer-use/participant-execution.ts` writes them).
247
-
248
- Intentionally still adapter work:
231
+ These remain adapter work:
249
232
 
250
233
  - local PTY capture;
251
234
  - Codex TUI live follow after workspace trust bootstrap;
252
235
  - richer screenshot/trace galleries across multi-step product journeys;
253
236
  - reviewer acceptance gates over real product behavior.
254
237
 
255
- ## The rendering layer (#426, cut over 2026-08-16)
238
+ ## The rendering layer
256
239
 
257
240
  The renderer is the `observer/` workspace: a Vite single-file build on the
258
241
  `@humanish` registry tokens, frozen against `humanish.observer-data.v1`
@@ -260,10 +243,27 @@ The renderer is the `observer/` workspace: a Vite single-file build on the
260
243
  artifact to `dist/observer-app.html`; in a repo checkout a missing or stale
261
244
  artifact auto-builds, and an unconditional preflight at CLI startup makes a
262
245
  broken artifact cost seconds, never a completed session. `renderObserverHtml`,
263
- the one function every surface (observe, watch, serve, labs) renders through,
246
+ the one function every surface (observe, observe --all, watch, studies) renders through,
264
247
  injects the run's snapshot into the artifact
265
248
  (`tests/observer/artifact.test.ts` pins the path, cold, so CI exercises the
266
249
  auto-build every run). The legacy string-concat renderer was deleted at
267
250
  cutover; there is no flag and no fallback. Rollback is a version pin. The
268
251
  workspace's own tests pin the durability constraints (self-contained single
269
252
  file, fonts inlined, no network references).
253
+
254
+ ## Browser checks
255
+
256
+ `pnpm observer:browser:proof` exercises generated synthetic evidence in the
257
+ production artifact. `pnpm observer:iframe:proof`, after `pnpm build`, checks the
258
+ actual serving boundary against direct, redirected and scripted iframe attacks.
259
+ CI retains their screenshots and JSON receipts. These Chromium checks do not
260
+ claim physical-device or non-Chromium coverage. Actual provider checks and their
261
+ resource-cleanup receipts are separate acceptance evidence.
262
+
263
+ Interaction references rechecked September 8, 2026:
264
+ [Base UI popover](https://base-ui.com/react/components/popover),
265
+ [React state structure](https://react.dev/learn/choosing-the-state-structure),
266
+ [WAI-ARIA tabs](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/),
267
+ [iframe sandboxing](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe),
268
+ [Playwright Trace Viewer](https://playwright.dev/docs/trace-viewer), and
269
+ [PostHog recording controls](https://posthog.com/docs/session-replay/how-to-watch-recordings).
@@ -5,24 +5,28 @@ execution, with a separate conversation, process and tool authority. It can use
5
5
  the same host Codex login as a local-agent participant. Existing API analysis
6
6
  remains a separate provider.
7
7
 
8
- The qualified launcher profile is **a qualified Codex CLI release for the host, Linux x64
9
- or Apple Silicon macOS, file-backed ChatGPT login, `gpt-6-astra`, low reasoning effort**.
10
- Qualified releases are listed per host in
11
- [`src/actors/codex/qualified-versions.ts`](https://github.com/danielgwilson/humanish/blob/main/src/actors/codex/qualified-versions.ts).
12
- Linux x64 accepts 0.154.0, 0.157.1
13
- ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/computer-use-actor/receipts/codex-cli-0.157.1-requalification-2026-09-30.md))
8
+ The launcher profile is **a stable Codex CLI release from 0.154.0 on, Linux x64 or Apple
9
+ Silicon macOS, file-backed ChatGPT login, `gpt-6-astra`, low reasoning effort**.
10
+ [`src/actors/codex/codex-admission.ts`](https://github.com/danielgwilson/humanish/blob/main/src/actors/codex/codex-admission.ts)
11
+ admits every stable `MAJOR.MINOR.PATCH` release from 0.154.0, the oldest known to work, except
12
+ those in `REFUSED_CODEX_CLI_VERSIONS` (none yet). There is no ceiling: a new release runs the
13
+ day it ships, and one that breaks humanish is refused there until humanish handles it.
14
+ Prereleases and older releases are refused, and the refusal names the release and why. Hosted
15
+ participants (operator mode) run the same releases on Linux x64 and arm64 and macOS x64 and
16
+ arm64; a hosted run on a release outside `TESTED_CODEX_CLI_VERSIONS` records a warning that its
17
+ evidence rests on the checks each launch makes. `TESTED_CODEX_CLI_VERSIONS` gates nothing. It
18
+ lists the releases the qualifier passed on Linux x64, and its newest is the default and the
19
+ install target: 0.154.0, 0.157.1
20
+ ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/computer-use/codex-cli-0.157.1-requalification-2026-09-30.md))
14
21
  0.159.2
15
- ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/computer-use-actor/receipts/codex-cli-0.159.2-qualification-2026-09-30.md))
22
+ ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/computer-use/codex-cli-0.159.2-qualification-2026-09-30.md))
16
23
  0.159.3
17
- ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/computer-use-actor/receipts/codex-cli-0.159.3-qualification-2026-10-01.md))
24
+ ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/computer-use/codex-cli-0.159.3-qualification-2026-10-01.md))
18
25
  and 0.160.0
19
- ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/computer-use-actor/receipts/codex-cli-0.160.0-qualification-2026-10-01.md)).
20
- Apple Silicon accepts 0.154.0, which passed installed participant/analysis studies and the
21
- native dispatch restriction check on an M5 Max; later releases need the same check on a Mac.
22
- Hosted participants on Linux arm64 and Intel macOS keep 0.154.0 as a pre-existing admission,
23
- listed separately in `PREEXISTING_CODEX_CLI_ADMISSIONS`: it is what they ran before per-host
24
- lists existed, not a qualification, and no later release is admitted there. Other releases and
25
- platforms, keychain-only logins and API-key Codex logins are refused before a model turn.
26
+ ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/computer-use/codex-cli-0.160.0-qualification-2026-10-01.md)).
27
+ On Apple Silicon, 0.154.0 passed installed participant/analysis studies and the native dispatch
28
+ restriction check on an M5 Max; no later release has run on a Mac. Other platforms,
29
+ keychain-only logins and API-key Codex logins are refused before a model turn.
26
30
 
27
31
  A release string is a compatibility check, not binary attestation. The launcher compares the
28
32
  release that `codex --version`, initialize and thread start report, then executes the same
@@ -30,8 +34,8 @@ path; it does not pin the executable's contents, and a modified binary can repor
30
34
  The launcher records the detected release in the participant execution profile and in the
31
35
  analysis identity. A recorded release alone is not execution proof: prelaunch and failed
32
36
  attempts can carry the declared default, and a request's `dispatched` and `profileVerified`
33
- receipt shows that the launched release passed its checks. Saved bundles naming any recorded
34
- release stay readable.
37
+ receipt shows that the launched release passed its checks. Saved bundles naming any stable
38
+ release from 0.154.0 on stay readable, whether or not a launch list names it.
35
39
  Readiness validates the installation and effective profile without submitting a
36
40
  model turn; it does not guarantee current quota or model access.
37
41
 
@@ -159,10 +163,11 @@ not established by that proof. Recovery deliberately fails closed if storage
159
163
  behaves differently. Keychain/other-platform support and whole-process-tree
160
164
  leases require their own qualification.
161
165
 
162
- ## Admitting a Codex CLI release
166
+ ## Testing a Codex CLI release
163
167
 
164
- A release enters a host's list only with a dated receipt under
165
- `docs/goals/computer-use-actor/receipts/` showing all of the following, on that host:
168
+ Admission does not wait for a test. A release enters `TESTED_CODEX_CLI_VERSIONS`, which gates
169
+ nothing, with a dated receipt under `docs/evidence/computer-use/` showing all of
170
+ the following, on Linux x64:
166
171
 
167
172
  1. The release notes since the baseline were read for changes near the tool boundary.
168
173
  2. A drift check against a release already qualified on the host found no exec, connection or
@@ -170,27 +175,28 @@ A release enters a host's list only with a dated receipt under
170
175
  launches, and the same tool inventory, denials and isolate behavior. `pnpm codex:qualify`
171
176
  runs this check; see "The qualifier" below.
172
177
  3. One hosted participant study with the candidate first on `PATH` (for example
173
- `PATH=<evidence>/npm-<version>/node_modules/.bin:$PATH pnpm humanish lab run <lab>
178
+ `PATH=<evidence>/npm-<version>/node_modules/.bin:$PATH pnpm humanish run <study>
174
179
  --env-file <file with E2B_API_KEY only>`) reached its goal in the final capture, with a
175
180
  verified request receipt, `humanish verify --run <id>` passing and the automatic Codex
176
181
  analysis recording the release. Keep `OPENAI_API_KEY` out of that environment so the
177
182
  participant stays on ChatGPT-account billing.
178
183
 
179
184
  The drift check compares a candidate with a vendor release that has already been qualified. It
180
- can show that an honest new release does nothing new in those scenarios; it cannot show that a
185
+ can show that a benign new release does nothing new in those scenarios; it cannot show that a
181
186
  binary built to evade it is safe. Pair that with the attestation limit above: the launcher
182
187
  admits by release string and does not pin the executable.
183
188
 
184
- Then commit the release in `QUALIFIED_CODEX_CLI_VERSIONS`
185
- (`src/actors/codex/qualified-versions.ts`) for that host, in `RECORDED_CODEX_CLI_VERSIONS`
186
- (`src/actors/contract.ts`) and in the Observer's copy
187
- (`observer/lib/actor-execution-profile.ts`). If any check fails, change no code and record
188
- what differs.
189
+ Then commit the release in `TESTED_CODEX_CLI_VERSIONS` (`src/actors/codex/codex-admission.ts`);
190
+ launch admission does not change. Readers need no change: saved
191
+ profiles may name any stable release from `RECORDED_CODEX_CLI_FLOOR` (0.154.0) on, in
192
+ `src/actors/contract.ts` and the Observer's copy (`observer/lib/actor-execution-profile.ts`).
193
+ If any check fails, record what differs; a release that breaks humanish goes in
194
+ `REFUSED_CODEX_CLI_VERSIONS` with its issue.
189
195
 
190
196
  ### The qualifier
191
197
 
192
198
  `pnpm codex:qualify` produces the drift evidence step 2 above requires. Its threat model:
193
- it detects an honest new vendor release that, in these scenarios, executes a program, connects
199
+ it detects a benign new vendor release that, in these scenarios, executes a program, connects
194
200
  to a destination or writes a file the baseline release did not, and it fails closed when the
195
201
  harness cannot see (a failed trace, sampler read or parse). A binary built to evade it is out of
196
202
  scope. Named limits, none of which it inspects:
@@ -1,33 +1,28 @@
1
1
  # Serve: the run library surface
2
2
 
3
- Date: 2026-08-02
4
-
5
- Status: shipped. The `loopback`, `exposed` (edge-authed) and `share-safe-open`
6
- modes live in `src/observer/serve.ts`, `src/observer/library.ts`,
7
- `src/observer/http.ts`, `src/observer/exposure.ts` and `src/observer/tunnel.ts`,
8
- with per-run routes and the history index in `src/observer/run-routes.ts` and the
9
- loopback bind in `src/observer/listen.ts`. The CLI wiring is in
3
+ The `loopback`, `exposed` (edge-authed) and `share-safe-open` modes live in
4
+ `src/observer/serve.ts`, `src/observer/library.ts`, `src/observer/http.ts`,
5
+ `src/observer/exposure.ts` and `src/observer/tunnel.ts`, with per-run routes and the history
6
+ index in `src/observer/run-routes.ts` and the loopback bind in `src/observer/listen.ts`. The CLI wiring is in
10
7
  `src/cli/commands/observe.ts`. The `/_humanish/api/*` control-plane namespace is
11
8
  reserved and answers `501`; no mutating route ships.
12
9
 
13
- Exposure auth is **tunnel-edge only**. As of 0.18.0 humanish carries NO
14
- in-process auth: the hand-rolled capability-link (cookie/token/TTL, its auth
15
- module and the `serve --auth link|none` flags) was removed as
16
- a pre-1.0 breaking change. The gate now lives entirely at the edge: ngrok
17
- `--oauth google` (with `--allow-email`/`--allow-domain` allow rules), or an
18
- operator-secured `--public-url` (Cloudflare Access, Tailscale, a reverse proxy
19
- you own).
10
+ Exposure auth happens only at the tunnel edge. humanish has had no in-process auth since 0.18.0,
11
+ which removed the capability link (cookie, token and TTL), its auth module and the
12
+ `serve --auth link|none` flags. The gate is ngrok `--oauth google` with `--allow-email` or
13
+ `--allow-domain` rules, or an operator-secured `--public-url` (Cloudflare Access, Tailscale or a
14
+ reverse proxy you own).
20
15
 
21
16
  ## What serve is
22
17
 
23
- `humanish serve` is the third observer surface, and the first whose subject is
24
- the LIBRARY rather than a run:
18
+ `humanish observe --all` is the third observer surface, and the first whose subject is
19
+ the library rather than a run:
25
20
 
26
21
  - `humanish watch` serves one attached run: the process that created the run
27
22
  serves it and may inject runtime stream URLs for live following (see the
28
23
  stream-URL rules below and `watch --expose`);
29
24
  - `humanish observe` re-serves one finished run read-only;
30
- - `humanish serve` serves the whole local library under `.humanish/runs/`: a
25
+ - `humanish observe --all` serves the whole local library under `.humanish/runs/`: a
31
26
  library index, per-run Observer pages, `/_humanish/history.json` polling, and
32
27
  optional edge-authenticated exposure beyond the machine.
33
28
 
@@ -39,11 +34,11 @@ authenticated edge (or `--safe`, see the fail-closed matrix).
39
34
  ## Fail-closed exposure matrix
40
35
 
41
36
  One shared validator (`validateExposure` in `src/observer/exposure.ts`) governs
42
- both `serve` and `watch`. `--expose` must always resolve to a reachable public
37
+ both `observe --all` and `watch`. `--expose` must always resolve to a reachable public
43
38
  origin (a `--tunnel` or a `--public-url`), even under `--safe`, since an
44
39
  origin-less exposed server is an unreachable loopback no-op. With an origin
45
- present, exposure requires EITHER edge auth (`--oauth` on the ngrok edge, or a
46
- `--public-url` you secure) OR `--safe` (share_ready runs only). A tunnel with
40
+ present, exposure requires either edge auth (`--oauth` on the ngrok edge, or a
41
+ `--public-url` you secure) or `--safe` (share_ready runs only). A tunnel with
47
42
  neither is a wide-open public URL to local bundles and is refused.
48
43
 
49
44
  | `--expose` | `--tunnel` | `--oauth` | `--public-url` | `--safe` | Outcome |
@@ -51,11 +46,11 @@ neither is a wide-open public URL to local bundles and is refused.
51
46
  | no | no | no | no | any | `loopback` (no exposure) |
52
47
  | yes | yes | yes | no | any | OK → `exposed` (edge-authed; all runs unless `--safe`) |
53
48
  | yes | yes | no | no | yes | OK → `share-safe-open` (public, share_ready only) |
54
- | yes | yes | no | no | no | **REFUSED** `HUMANISH_SERVE_EXPOSE_REQUIRES_EDGE_AUTH_OR_SAFE` |
49
+ | yes | yes | no | no | no | **refused** `HUMANISH_SERVE_EXPOSE_REQUIRES_EDGE_AUTH_OR_SAFE` |
55
50
  | yes | no | no | yes | any | OK → `exposed` (operator-secured edge) |
56
- | yes | no | no | no | any | **REFUSED** `HUMANISH_SERVE_EXPOSE_REQUIRES_ORIGIN` (no reachable origin, even with `--safe`) |
57
- | yes | no | yes | no | any | **REFUSED** `HUMANISH_SERVE_OAUTH_REQUIRES_TUNNEL` |
58
- | yes | yes | yes | yes | any | **REFUSED** `HUMANISH_SERVE_OPTION_CONFLICT` (tunnel + public-url) |
51
+ | yes | no | no | no | any | **refused** `HUMANISH_SERVE_EXPOSE_REQUIRES_ORIGIN` (no reachable origin, even with `--safe`) |
52
+ | yes | no | yes | no | any | **refused** `HUMANISH_SERVE_OAUTH_REQUIRES_TUNNEL` |
53
+ | yes | yes | yes | yes | any | **refused** `HUMANISH_SERVE_OPTION_CONFLICT` (tunnel + public-url) |
59
54
 
60
55
  Guard order (all before any bind/spawn): `--allow-email`/`--allow-domain` without
61
56
  `--oauth` → `HUMANISH_SERVE_ALLOW_REQUIRES_OAUTH`; `--oauth` without `--tunnel` →
@@ -66,8 +61,8 @@ http(s) origin → conflict; a tunnel/public-url without `--expose` →
66
61
  no `--public-url` (even under `--safe`) →
67
62
  `HUMANISH_SERVE_EXPOSE_REQUIRES_ORIGIN`; `--expose` with an origin but without
68
63
  edge auth and without `--safe` →
69
- `HUMANISH_SERVE_EXPOSE_REQUIRES_EDGE_AUTH_OR_SAFE`. `--oauth google` with NO
70
- allow rule is ALLOWED (any Google account authenticates) but pushes a prominent
64
+ `HUMANISH_SERVE_EXPOSE_REQUIRES_EDGE_AUTH_OR_SAFE`. `--oauth google` with no
65
+ allow rule is allowed (any Google account authenticates) but pushes a prominent
71
66
  warning recommending at least one `--allow-email`/`--allow-domain`.
72
67
 
73
68
  The `watch` surface reuses the same validator but is stricter: a live,
@@ -77,7 +72,7 @@ therefore refused outright with `HUMANISH_WATCH_SAFE_NOT_APPLICABLE` (exit 2), s
77
72
  never silently ignored.
78
73
  `watch --expose` always requires edge auth (`--tunnel --oauth` or `--public-url`),
79
74
  and is also refused with `--dry-run`/`--detach`/`--json` (no live desktop / no
80
- attached follow). An exposed watch serves ONLY the attached live run: its
75
+ attached follow). An exposed watch serves only the attached live run: its
81
76
  `/_humanish/history.json` lists just that run and every other run id 404s
82
77
  byte-identically to a nonexistent one, so a remote viewer can never enumerate or
83
78
  reach any prior run's raw evidence (loopback watch still serves the full library).
@@ -122,14 +117,14 @@ which adds `sandbox allow-scripts` to that policy.
122
117
 
123
118
  | Mode | Invocation | Boundary class |
124
119
  | ----------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
125
- | `loopback` | `humanish serve` | Capture-side trust: readable only by whoever can already read gitignored `.humanish/` on this machine; no new boundary is crossed. |
120
+ | `loopback` | `humanish observe --all` | Capture-side trust: readable only by whoever can already read gitignored `.humanish/` on this machine; no new boundary is crossed. |
126
121
  | `exposed` | `--expose --tunnel ngrok --oauth google …`, or `--expose --public-url <origin>` | Edge-authed exposure: only viewers who clear the edge OAuth (or the operator's own edge) reach the loopback server, which then serves everything it grants unless `--safe` composes in. The gate is the edge, not humanish. |
127
122
  | `share-safe-open` | `--expose --safe --tunnel ngrok` (no `--oauth`) | Genuine publishing behind the feedback-grade `share_ready` gate: only runs that pass verify are served. Each request walks the run, and any added, removed or changed file re-verifies it first; a file is read only while its inode, size, mtime and ctime match the walk verify covered, and its bytes are served only when their sha256 matches the hash taken at admission. Everything else is absent, 404ing byte-identically to a nonexistent run (no existence oracle). |
128
123
 
129
124
  ## Keep stream URLs off the library surface
130
125
 
131
126
  Live desktop stream URLs (auth-bearing hosted-VNC links) are never served by the
132
- LIBRARY surface, in any mode, and the guarantee is layered:
127
+ library surface, in any mode, and the guarantee is layered:
133
128
 
134
129
  - **Structural:** runtime stream URLs live in a `WeakMap` keyed by the watch
135
130
  process's in-memory `ObserverResult` (`src/observer/render.ts`) and are never
@@ -149,12 +144,14 @@ disk). See observer.md.
149
144
 
150
145
  ## Know what `share_ready` checks
151
146
 
152
- `share_ready` was designed as the bar for FEEDBACK payloads: evidence eligible
147
+ `share_ready` was designed as the bar for feedback payloads: evidence eligible
153
148
  to leave the machine inside a public issue draft. Serve's `share-safe-open` mode
154
- extends that same gate to arbitrary-audience BROWSING, which is a broader
155
- exposure of the same artifacts. The honest caveat carries over unchanged:
149
+ extends that same gate to arbitrary-audience browsing, which is a broader
150
+ exposure of the same artifacts. The same caveat carries over:
156
151
  `humanish verify` does not yet detect free-form PII/PHI (names, emails, medical
157
- identifiers; see the README's public-safety boundary and issue #108), so
152
+ identifiers; see
153
+ [Share evidence safely](../../README.md#share-evidence-safely) and the
154
+ [open detector issue](https://github.com/danielgwilson/humanish/issues/108)), so
158
155
  `share_ready` means the automated secret/path scan passed, not that a human would
159
156
  publish every pixel. Maintainers should treat open mode accordingly: synthetic
160
157
  data upstream, review before exposing, and treat `--safe` without edge auth as
@@ -173,13 +170,13 @@ any mutating route ships, the contract is:
173
170
  - an operator identity distinct from a viewer, sourced from the edge/control
174
171
  plane, not from a humanish-minted cookie;
175
172
  - mutating routes require CSRF defenses appropriate to the chosen edge session;
176
- - the spend rule is invariant 3 applied to remote hands: a phone-initiated LIVE
173
+ - the live-spend rule applies to remote hands too: a phone-initiated live
177
174
  run needs its own affirmative declaration at serve startup (an explicit opt-in
178
- naming the lab and budget), never a default the viewer UI can reach.
175
+ naming the study and budget), never a default the viewer UI can reach.
179
176
 
180
177
  ## Why not Better Auth here
181
178
 
182
- Better Auth is a strong TypeScript auth framework, but it is deliberately NOT
179
+ Better Auth is a strong TypeScript auth framework, but it is deliberately not
183
180
  used for this CLI serve surface: serve is an ephemeral, no-database,
184
181
  per-invocation loopback server whose only job is to hand persisted evidence to an
185
182
  already-authenticated edge. A password/session/social-login framework with a
@@ -193,6 +190,6 @@ where accounts, org membership, and durable sessions actually exist.
193
190
  - **Traffic Policy for ngrok.** Migrate off the deprecated `--oauth*` flags to a
194
191
  generated Traffic Policy YAML once ngrok requires it (the `yaml` dep is already
195
192
  available); pin the behavior in `tests/observer/tunnel.test.ts` first.
196
- - **Shipped in 0.18.0: `watch --expose`.** Remote LIVE following of a run,
193
+ - **Shipped in 0.18.0: `watch --expose`.** Remote live following of a run,
197
194
  including its live E2B desktop stream, behind the same edge auth. It is the one
198
195
  surface that deliberately serves runtime stream URLs. See observer.md.