humanish 0.107.0 → 0.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/ARCHITECTURE.md +22 -17
  2. package/CHANGELOG.md +14 -0
  3. package/CONTEXT.md +51 -44
  4. package/README.md +145 -172
  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-ui.js +1 -1
  14. package/dist/actors/codex/codex-admission.d.ts +91 -0
  15. package/dist/actors/codex/codex-admission.js +150 -0
  16. package/dist/actors/codex/restricted-executable.d.ts +4 -4
  17. package/dist/actors/codex/restricted-executable.js +8 -8
  18. package/dist/actors/codex/restricted-launch.d.ts +2 -1
  19. package/dist/actors/codex/restricted-launch.js +1 -1
  20. package/dist/actors/codex/restricted-participant.js +8 -6
  21. package/dist/actors/codex/restricted-policy.d.ts +2 -2
  22. package/dist/actors/codex/restricted-policy.js +2 -2
  23. package/dist/actors/codex/restricted-session.d.ts +2 -2
  24. package/dist/actors/codex/restricted-session.js +10 -5
  25. package/dist/actors/computer-use/actor.d.ts +16 -16
  26. package/dist/actors/computer-use/actor.js +2 -2
  27. package/dist/actors/computer-use/admission-limit.d.ts +1 -1
  28. package/dist/actors/computer-use/admission-limit.js +1 -1
  29. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  30. package/dist/actors/computer-use/loop/actions.js +10 -10
  31. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  32. package/dist/actors/computer-use/loop/backstop.js +14 -12
  33. package/dist/actors/computer-use/loop/ending.d.ts +5 -5
  34. package/dist/actors/computer-use/loop/ending.js +7 -7
  35. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  36. package/dist/actors/computer-use/loop/observation.js +9 -9
  37. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  38. package/dist/actors/computer-use/loop/provider-call.js +1 -1
  39. package/dist/actors/computer-use/loop/session.js +3 -3
  40. package/dist/actors/computer-use/loop/spend.d.ts +1 -1
  41. package/dist/actors/computer-use/loop/spend.js +1 -1
  42. package/dist/actors/computer-use/loop/trace.js +9 -8
  43. package/dist/actors/computer-use/loop/types.d.ts +25 -23
  44. package/dist/actors/computer-use/loop/usage.js +2 -2
  45. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  46. package/dist/actors/computer-use/openai-context.js +214 -0
  47. package/dist/actors/computer-use/openai-provider.d.ts +11 -8
  48. package/dist/actors/computer-use/openai-provider.js +45 -34
  49. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  50. package/dist/actors/computer-use/openai-requests.js +82 -15
  51. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  52. package/dist/actors/computer-use/openai-wire.js +36 -34
  53. package/dist/actors/contract.d.ts +78 -43
  54. package/dist/actors/contract.js +29 -23
  55. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  56. package/dist/actors/local-agent/claude-session.js +10 -9
  57. package/dist/actors/local-agent/cli.d.ts +8 -6
  58. package/dist/actors/local-agent/cli.js +24 -28
  59. package/dist/actors/local-agent/readiness.d.ts +2 -2
  60. package/dist/actors/local-agent/readiness.js +4 -4
  61. package/dist/actors/reasoning-effort.js +6 -6
  62. package/dist/actors/registry.d.ts +10 -10
  63. package/dist/actors/registry.js +18 -17
  64. package/dist/actors/scripted-browser/actor.d.ts +8 -8
  65. package/dist/actors/scripted-browser/actor.js +16 -16
  66. package/dist/actors/scripted-browser/browser-command.js +1 -1
  67. package/dist/actors/scripted-browser/steps.js +1 -1
  68. package/dist/actors/scripted-browser/types.d.ts +1 -1
  69. package/dist/actors/stop-conditions.d.ts +1 -1
  70. package/dist/analysis/codex-config.d.ts +6 -2
  71. package/dist/analysis/codex-config.js +22 -14
  72. package/dist/analysis/service.js +5 -5
  73. package/dist/cli/commands/analyze.js +19 -16
  74. package/dist/cli/commands/codex.js +9 -9
  75. package/dist/cli/commands/comms.js +54 -33
  76. package/dist/cli/commands/feedback.js +20 -21
  77. package/dist/cli/commands/lab-format.d.ts +5 -4
  78. package/dist/cli/commands/lab-format.js +35 -23
  79. package/dist/cli/commands/lab-route-computer-use.js +6 -7
  80. package/dist/cli/commands/lab-route-preview.js +4 -3
  81. package/dist/cli/commands/lab-route-shared-world.js +3 -3
  82. package/dist/cli/commands/lab-run.js +10 -11
  83. package/dist/cli/commands/lab-scorer.d.ts +2 -2
  84. package/dist/cli/commands/lab-scorer.js +1 -1
  85. package/dist/cli/commands/migrate.d.ts +4 -0
  86. package/dist/cli/commands/migrate.js +65 -0
  87. package/dist/cli/commands/observe.js +147 -108
  88. package/dist/cli/commands/run-command.d.ts +10 -0
  89. package/dist/cli/commands/run-command.js +85 -0
  90. package/dist/cli/commands/runs.js +137 -138
  91. package/dist/cli/commands/setup.d.ts +2 -2
  92. package/dist/cli/commands/setup.js +26 -21
  93. package/dist/cli/commands/study.d.ts +3 -0
  94. package/dist/cli/commands/study.js +182 -0
  95. package/dist/cli/commands/tui.d.ts +4 -4
  96. package/dist/cli/commands/tui.js +21 -21
  97. package/dist/cli/commands/watch.js +60 -75
  98. package/dist/cli/deprecations.d.ts +18 -0
  99. package/dist/cli/deprecations.js +48 -0
  100. package/dist/cli/doctor.d.ts +15 -5
  101. package/dist/cli/doctor.js +103 -48
  102. package/dist/cli/first-run-path.d.ts +12 -10
  103. package/dist/cli/first-run-path.js +30 -28
  104. package/dist/cli/io.d.ts +41 -6
  105. package/dist/cli/io.js +97 -22
  106. package/dist/cli/observer-follow.d.ts +2 -2
  107. package/dist/cli/observer-follow.js +5 -6
  108. package/dist/cli/orientation.d.ts +6 -3
  109. package/dist/cli/orientation.js +43 -39
  110. package/dist/cli/product-sentence.d.ts +6 -0
  111. package/dist/cli/product-sentence.js +6 -0
  112. package/dist/cli/program.d.ts +6 -1
  113. package/dist/cli/program.js +109 -40
  114. package/dist/cli/telemetry.d.ts +15 -15
  115. package/dist/cli/telemetry.js +48 -40
  116. package/dist/cli.js +1 -1
  117. package/dist/comms/capture-surface.d.ts +13 -12
  118. package/dist/comms/capture-surface.js +23 -22
  119. package/dist/comms/catch-host.d.ts +7 -7
  120. package/dist/comms/catch-host.js +14 -14
  121. package/dist/comms/email-catch.d.ts +3 -3
  122. package/dist/comms/email-catch.js +8 -8
  123. package/dist/comms/external-evidence.js +2 -2
  124. package/dist/comms/extract.js +2 -2
  125. package/dist/comms/fake-inbox.d.ts +2 -2
  126. package/dist/comms/fake-inbox.js +2 -2
  127. package/dist/comms/receiving-render.d.ts +1 -1
  128. package/dist/comms/receiving-render.js +2 -2
  129. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  130. package/dist/comms/sandbox-catch-script.js +6 -6
  131. package/dist/comms/sandbox-catch.d.ts +36 -37
  132. package/dist/comms/sandbox-catch.js +34 -35
  133. package/dist/comms/setup.js +42 -8
  134. package/dist/comms/thread-evidence.d.ts +1 -1
  135. package/dist/comms/thread-evidence.js +6 -6
  136. package/dist/comms/types.d.ts +6 -6
  137. package/dist/comms/types.js +3 -3
  138. package/dist/evidence/frame-signature.d.ts +1 -1
  139. package/dist/evidence/frame-signature.js +4 -4
  140. package/dist/evidence/redaction.d.ts +3 -3
  141. package/dist/evidence/redaction.js +4 -4
  142. package/dist/feedback/draft.js +36 -78
  143. package/dist/feedback/export-bundle.js +1 -1
  144. package/dist/feedback/export.d.ts +5 -1
  145. package/dist/feedback/export.js +7 -8
  146. package/dist/feedback/feedback.d.ts +2 -2
  147. package/dist/feedback/feedback.js +21 -3
  148. package/dist/guest/chromium-text.js +2 -2
  149. package/dist/guest/desktop-native.d.ts +1 -1
  150. package/dist/guest/runtime.js +1 -1
  151. package/dist/index.d.ts +12 -10
  152. package/dist/index.js +8 -6
  153. package/dist/keys/key-resolution.d.ts +5 -5
  154. package/dist/keys/key-resolution.js +23 -23
  155. package/dist/lab/adapter-extension.d.ts +7 -7
  156. package/dist/lab/adapter-extension.js +13 -36
  157. package/dist/lab/adapter-scorer-loader.d.ts +7 -7
  158. package/dist/lab/adapter-scorer-loader.js +32 -32
  159. package/dist/lab/composition-rules.js +42 -42
  160. package/dist/lab/config.js +65 -25
  161. package/dist/lab/deprecated-fields.d.ts +10 -0
  162. package/dist/lab/deprecated-fields.js +24 -0
  163. package/dist/lab/device-presets.d.ts +8 -8
  164. package/dist/lab/device-presets.js +11 -11
  165. package/dist/lab/discover.d.ts +13 -9
  166. package/dist/lab/discover.js +117 -57
  167. package/dist/lab/doctor.d.ts +10 -3
  168. package/dist/lab/doctor.js +47 -9
  169. package/dist/lab/init-templates.js +147 -147
  170. package/dist/lab/init.d.ts +1 -1
  171. package/dist/lab/init.js +41 -9
  172. package/dist/lab/keys.d.ts +2 -0
  173. package/dist/lab/keys.js +42 -8
  174. package/dist/lab/lab-deps.d.ts +7 -12
  175. package/dist/lab/parse/actors.js +9 -9
  176. package/dist/lab/parse/comms.js +5 -5
  177. package/dist/lab/parse/execution.js +13 -13
  178. package/dist/lab/parse/study-v3.d.ts +23 -0
  179. package/dist/lab/parse/study-v3.js +259 -0
  180. package/dist/lab/parse/subject-state.d.ts +7 -7
  181. package/dist/lab/parse/subject-state.js +16 -16
  182. package/dist/lab/parse/subject.js +28 -28
  183. package/dist/lab/parse/values.d.ts +1 -1
  184. package/dist/lab/parse/values.js +3 -3
  185. package/dist/lab/persona-resolve.d.ts +4 -4
  186. package/dist/lab/persona-resolve.js +4 -4
  187. package/dist/lab/plan-participants.d.ts +2 -2
  188. package/dist/lab/plan-types.d.ts +4 -4
  189. package/dist/lab/plan.d.ts +1 -7
  190. package/dist/lab/plan.js +10 -41
  191. package/dist/lab/preflight-probes.js +11 -11
  192. package/dist/lab/preflight-result.d.ts +2 -1
  193. package/dist/lab/preflight-result.js +5 -4
  194. package/dist/lab/preflight.d.ts +7 -5
  195. package/dist/lab/preflight.js +5 -5
  196. package/dist/lab/routing.d.ts +31 -25
  197. package/dist/lab/routing.js +60 -29
  198. package/dist/lab/run-lab-events.d.ts +0 -3
  199. package/dist/lab/run-lab-events.js +0 -6
  200. package/dist/lab/run-lab-homes.d.ts +22 -10
  201. package/dist/lab/run-lab-homes.js +5 -1
  202. package/dist/lab/run-lab-options.d.ts +1 -1
  203. package/dist/lab/run-lab-options.js +16 -13
  204. package/dist/lab/summary.d.ts +7 -6
  205. package/dist/lab/summary.js +10 -10
  206. package/dist/lab/tasks.d.ts +15 -15
  207. package/dist/lab/tasks.js +14 -14
  208. package/dist/lab/types.d.ts +101 -95
  209. package/dist/lab/types.js +2 -0
  210. package/dist/lab/validation.d.ts +13 -13
  211. package/dist/lab/validation.js +44 -42
  212. package/dist/lab/warnings.d.ts +10 -0
  213. package/dist/lab/warnings.js +61 -33
  214. package/dist/library-aliases.d.ts +56 -0
  215. package/dist/library-aliases.js +22 -0
  216. package/dist/observer/artifact.d.ts +1 -1
  217. package/dist/observer/artifact.js +6 -6
  218. package/dist/observer/data.d.ts +6 -6
  219. package/dist/observer/data.js +5 -4
  220. package/dist/observer/exposure.d.ts +1 -1
  221. package/dist/observer/exposure.js +11 -11
  222. package/dist/observer/http.js +1 -1
  223. package/dist/observer/library.d.ts +1 -1
  224. package/dist/observer/library.js +4 -2
  225. package/dist/observer/listen.js +5 -4
  226. package/dist/observer/render.d.ts +1 -1
  227. package/dist/observer/render.js +10 -5
  228. package/dist/observer/run-routes.d.ts +3 -3
  229. package/dist/observer/run-routes.js +1 -1
  230. package/dist/observer/serve.js +7 -3
  231. package/dist/observer/tunnel.js +1 -1
  232. package/dist/observer-app.html +4 -4
  233. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  234. package/dist/routes/computer-use/bundle-parts.js +15 -15
  235. package/dist/routes/computer-use/bundle.js +3 -3
  236. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +1 -1
  237. package/dist/routes/computer-use/e2b-desktop/comms.js +14 -14
  238. package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
  239. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +4 -3
  240. package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
  241. package/dist/routes/computer-use/e2b-desktop/prepare.js +7 -7
  242. package/dist/routes/computer-use/e2b-desktop/start.js +9 -8
  243. package/dist/routes/computer-use/e2b-desktop/teardown.js +5 -4
  244. package/dist/routes/computer-use/external-comms.d.ts +1 -1
  245. package/dist/routes/computer-use/external-comms.js +1 -1
  246. package/dist/routes/computer-use/fanout-bundle.js +18 -18
  247. package/dist/routes/computer-use/fanout-records.js +10 -11
  248. package/dist/routes/computer-use/live-flush.d.ts +1 -1
  249. package/dist/routes/computer-use/live-flush.js +6 -6
  250. package/dist/routes/computer-use/live-phase.d.ts +4 -2
  251. package/dist/routes/computer-use/live-phase.js +6 -6
  252. package/dist/routes/computer-use/local-vm.js +1 -1
  253. package/dist/routes/computer-use/participant-desktop.d.ts +4 -4
  254. package/dist/routes/computer-use/participant-desktop.js +4 -4
  255. package/dist/routes/computer-use/participant-execution.d.ts +4 -4
  256. package/dist/routes/computer-use/participant-execution.js +9 -9
  257. package/dist/routes/computer-use/participant-model.d.ts +6 -0
  258. package/dist/routes/computer-use/participant-model.js +31 -13
  259. package/dist/routes/computer-use/participant-prompt.d.ts +11 -11
  260. package/dist/routes/computer-use/participant-prompt.js +6 -6
  261. package/dist/routes/computer-use/participant-runs.d.ts +7 -7
  262. package/dist/routes/computer-use/participant-runs.js +13 -13
  263. package/dist/routes/computer-use/plan.js +22 -22
  264. package/dist/routes/computer-use/preflight.js +21 -21
  265. package/dist/routes/computer-use/rerun-selection.js +1 -1
  266. package/dist/routes/computer-use/result.js +11 -11
  267. package/dist/routes/computer-use/route.d.ts +2 -1
  268. package/dist/routes/computer-use/route.js +15 -14
  269. package/dist/routes/computer-use/self-report.d.ts +7 -7
  270. package/dist/routes/computer-use/self-report.js +31 -31
  271. package/dist/routes/computer-use/setup.d.ts +1 -1
  272. package/dist/routes/computer-use/setup.js +17 -18
  273. package/dist/routes/computer-use/single-bundle.d.ts +7 -7
  274. package/dist/routes/computer-use/single-bundle.js +28 -30
  275. package/dist/routes/computer-use/subject-projection.d.ts +1 -1
  276. package/dist/routes/computer-use/subject-projection.js +6 -6
  277. package/dist/routes/computer-use/types.d.ts +40 -42
  278. package/dist/routes/computer-use/types.js +10 -10
  279. package/dist/routes/preview.d.ts +8 -2
  280. package/dist/routes/preview.js +8 -4
  281. package/dist/routes/scripted/bundle.d.ts +2 -2
  282. package/dist/routes/scripted/bundle.js +13 -12
  283. package/dist/routes/scripted/plan.d.ts +1 -1
  284. package/dist/routes/scripted/plan.js +9 -9
  285. package/dist/routes/scripted/result.js +5 -5
  286. package/dist/routes/scripted/route.js +5 -6
  287. package/dist/routes/scripted/scenario.js +2 -2
  288. package/dist/routes/scripted/setup.js +7 -7
  289. package/dist/routes/scripted/subject.js +1 -1
  290. package/dist/routes/scripted/surface-records.js +3 -3
  291. package/dist/routes/scripted/types.d.ts +3 -5
  292. package/dist/routes/scripted/types.js +1 -1
  293. package/dist/routes/shared-world/bundle-records.js +9 -8
  294. package/dist/routes/shared-world/bundle.d.ts +5 -5
  295. package/dist/routes/shared-world/bundle.js +40 -38
  296. package/dist/routes/shared-world/checkpoints.d.ts +1 -1
  297. package/dist/routes/shared-world/checkpoints.js +1 -1
  298. package/dist/routes/shared-world/comms.d.ts +5 -5
  299. package/dist/routes/shared-world/comms.js +14 -14
  300. package/dist/routes/shared-world/external-public.d.ts +4 -3
  301. package/dist/routes/shared-world/external-public.js +16 -12
  302. package/dist/routes/shared-world/handoff.d.ts +7 -6
  303. package/dist/routes/shared-world/handoff.js +65 -57
  304. package/dist/routes/shared-world/lobby-code.d.ts +2 -2
  305. package/dist/routes/shared-world/lobby-code.js +9 -9
  306. package/dist/routes/shared-world/participant-specs.d.ts +7 -6
  307. package/dist/routes/shared-world/participant-specs.js +31 -24
  308. package/dist/routes/shared-world/plan.js +7 -7
  309. package/dist/routes/shared-world/provenance.d.ts +2 -2
  310. package/dist/routes/shared-world/provenance.js +2 -2
  311. package/dist/routes/shared-world/provisioned.js +14 -13
  312. package/dist/routes/shared-world/result.js +20 -21
  313. package/dist/routes/shared-world/route.js +23 -22
  314. package/dist/routes/shared-world/setup.d.ts +3 -3
  315. package/dist/routes/shared-world/setup.js +4 -4
  316. package/dist/routes/shared-world/types.d.ts +30 -28
  317. package/dist/routes/shared-world/types.js +4 -4
  318. package/dist/routes/terminal/adapter.d.ts +3 -3
  319. package/dist/routes/terminal/adapter.js +5 -5
  320. package/dist/routes/terminal/bundle.d.ts +3 -3
  321. package/dist/routes/terminal/bundle.js +22 -21
  322. package/dist/routes/terminal/credentials.d.ts +4 -4
  323. package/dist/routes/terminal/credentials.js +7 -7
  324. package/dist/routes/terminal/dry-run.js +4 -4
  325. package/dist/routes/terminal/encoding.js +2 -2
  326. package/dist/routes/terminal/ledger.d.ts +3 -3
  327. package/dist/routes/terminal/ledger.js +14 -14
  328. package/dist/routes/terminal/live-finish.js +3 -3
  329. package/dist/routes/terminal/live-sandbox.js +12 -13
  330. package/dist/routes/terminal/persona.js +1 -1
  331. package/dist/routes/terminal/plan.js +11 -11
  332. package/dist/routes/terminal/recorder.js +2 -2
  333. package/dist/routes/terminal/result.js +8 -8
  334. package/dist/routes/terminal/route.js +6 -7
  335. package/dist/routes/terminal/sandbox.d.ts +1 -1
  336. package/dist/routes/terminal/sandbox.js +1 -1
  337. package/dist/routes/terminal/session.js +8 -7
  338. package/dist/routes/terminal/token-usage.d.ts +1 -1
  339. package/dist/routes/terminal/token-usage.js +7 -8
  340. package/dist/routes/terminal/trace.d.ts +2 -2
  341. package/dist/routes/terminal/trace.js +2 -2
  342. package/dist/routes/terminal/types.d.ts +26 -28
  343. package/dist/routes/terminal/types.js +3 -3
  344. package/dist/run/bundle-shape.js +3 -3
  345. package/dist/run/bundle.d.ts +46 -46
  346. package/dist/run/bundle.js +2 -1
  347. package/dist/run/cost-summary.js +3 -3
  348. package/dist/run/costs.js +7 -1
  349. package/dist/run/detail.d.ts +6 -6
  350. package/dist/run/detail.js +4 -4
  351. package/dist/run/dry-run-inputs.js +1 -1
  352. package/dist/run/dry-run.js +18 -18
  353. package/dist/run/judge.d.ts +19 -13
  354. package/dist/run/judge.js +18 -8
  355. package/dist/run/paths.d.ts +1 -1
  356. package/dist/run/paths.js +1 -1
  357. package/dist/run/pricing.d.ts +11 -6
  358. package/dist/run/pricing.js +20 -13
  359. package/dist/run/projection.d.ts +14 -14
  360. package/dist/run/projection.js +15 -15
  361. package/dist/run/reclaim.js +2 -2
  362. package/dist/run/results.d.ts +5 -5
  363. package/dist/run/run-index.d.ts +8 -6
  364. package/dist/run/run-index.js +15 -16
  365. package/dist/run/run-not-found.d.ts +5 -0
  366. package/dist/run/run-not-found.js +15 -0
  367. package/dist/run/run.d.ts +5 -4
  368. package/dist/run/run.js +1 -1
  369. package/dist/run/sandbox-receipts.d.ts +2 -2
  370. package/dist/run/sandbox-receipts.js +3 -3
  371. package/dist/run/shared-world-evidence.d.ts +36 -35
  372. package/dist/run/shared-world-evidence.js +4 -4
  373. package/dist/run/shared-world-shape.d.ts +1 -1
  374. package/dist/run/shared-world-shape.js +6 -6
  375. package/dist/run/stats.d.ts +12 -6
  376. package/dist/run/stats.js +116 -58
  377. package/dist/run/status.d.ts +8 -29
  378. package/dist/run/status.js +5 -27
  379. package/dist/run/stored-runs.js +2 -1
  380. package/dist/run/stream-shape.js +1 -1
  381. package/dist/run/streams.d.ts +6 -6
  382. package/dist/run/study-provenance.d.ts +47 -0
  383. package/dist/run/study-provenance.js +63 -0
  384. package/dist/run/study-result.d.ts +16 -0
  385. package/dist/run/study-result.js +9 -0
  386. package/dist/run/text.d.ts +2 -0
  387. package/dist/run/text.js +4 -0
  388. package/dist/run-lab.d.ts +7 -7
  389. package/dist/run-lab.js +1 -3
  390. package/dist/study/convert.d.ts +33 -0
  391. package/dist/study/convert.js +432 -0
  392. package/dist/study/field-paths.d.ts +12 -0
  393. package/dist/study/field-paths.js +126 -0
  394. package/dist/study/files.d.ts +26 -0
  395. package/dist/study/files.js +43 -0
  396. package/dist/study/migrate.d.ts +48 -0
  397. package/dist/study/migrate.js +408 -0
  398. package/dist/study/owned-files.d.ts +38 -0
  399. package/dist/study/owned-files.js +182 -0
  400. package/dist/subject/clone.d.ts +1 -1
  401. package/dist/subject/desktop-cli.d.ts +1 -1
  402. package/dist/subject/desktop-cli.js +2 -2
  403. package/dist/subject/local-tree-archive.js +1 -1
  404. package/dist/subject/local-tree.d.ts +1 -1
  405. package/dist/subject/node-bootstrap.js +1 -1
  406. package/dist/subject/runtime.js +8 -9
  407. package/dist/subject/serve.d.ts +1 -1
  408. package/dist/subject/serve.js +3 -3
  409. package/dist/subject/state.d.ts +1 -1
  410. package/dist/subject/steps.d.ts +5 -5
  411. package/dist/subject/steps.js +4 -4
  412. package/dist/substrates/command-failure.d.ts +3 -3
  413. package/dist/substrates/command-failure.js +3 -3
  414. package/dist/substrates/detached.d.ts +6 -6
  415. package/dist/substrates/detached.js +7 -7
  416. package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
  417. package/dist/substrates/e2b/cdp-probe.js +14 -17
  418. package/dist/substrates/e2b/desktop-browser.d.ts +2 -2
  419. package/dist/substrates/e2b/desktop-browser.js +8 -8
  420. package/dist/substrates/e2b/desktop-cdp.d.ts +9 -9
  421. package/dist/substrates/e2b/desktop-cdp.js +8 -8
  422. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  423. package/dist/substrates/e2b/desktop-executor.js +1 -1
  424. package/dist/substrates/e2b/desktop-geometry.d.ts +3 -3
  425. package/dist/substrates/e2b/desktop-geometry.js +7 -7
  426. package/dist/substrates/e2b/desktop-media.d.ts +1 -1
  427. package/dist/substrates/e2b/desktop-media.js +1 -1
  428. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  429. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  430. package/dist/substrates/e2b/sandbox.d.ts +1 -1
  431. package/dist/substrates/e2b/sandbox.js +1 -1
  432. package/dist/substrates/e2b/sdk.d.ts +11 -11
  433. package/dist/substrates/e2b/sdk.js +6 -6
  434. package/dist/tui/actions.d.ts +1 -1
  435. package/dist/tui/actions.js +13 -13
  436. package/dist/tui/contract.d.ts +16 -16
  437. package/dist/tui/contract.js +10 -10
  438. package/dist/tui/launch.d.ts +4 -4
  439. package/dist/tui/launch.js +18 -19
  440. package/dist/tui/project.js +5 -5
  441. package/dist/tui-app.js +82 -82
  442. package/dist/verify/actor.d.ts +8 -8
  443. package/dist/verify/actor.js +36 -36
  444. package/dist/verify/artifacts.d.ts +2 -2
  445. package/dist/verify/artifacts.js +3 -3
  446. package/dist/verify/context-growth.d.ts +9 -0
  447. package/dist/verify/context-growth.js +62 -0
  448. package/dist/verify/costs.d.ts +6 -6
  449. package/dist/verify/costs.js +8 -8
  450. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  451. package/dist/verify/shared-world-concurrent.js +79 -76
  452. package/dist/verify/shared-world.d.ts +2 -2
  453. package/dist/verify/shared-world.js +16 -16
  454. package/dist/verify/subject.d.ts +4 -4
  455. package/dist/verify/subject.js +18 -18
  456. package/dist/verify/verify.js +92 -43
  457. package/docs/README.md +25 -32
  458. package/docs/architecture/actor-contract.md +56 -87
  459. package/docs/architecture/desktop-sessions.md +7 -7
  460. package/docs/architecture/external-public-shared-world.md +61 -59
  461. package/docs/architecture/github-feedback-loop.md +1 -4
  462. package/docs/architecture/guest-desktop.md +2 -2
  463. package/docs/architecture/observer.md +34 -34
  464. package/docs/architecture/restricted-codex-analysis.md +34 -28
  465. package/docs/architecture/serve.md +34 -37
  466. package/docs/architecture/state-driven-executor.md +55 -58
  467. package/docs/architecture/task-protocol-support.md +5 -5
  468. package/docs/architecture/terminal-product-route.md +67 -107
  469. package/docs/contracts/README.md +24 -0
  470. package/docs/contracts/adapter-admission.md +3 -3
  471. package/docs/contracts/adapter-fixtures.md +2 -5
  472. package/docs/contracts/core.md +1 -3
  473. package/docs/contracts/errors.md +62 -0
  474. package/docs/contracts/feedback.md +8 -9
  475. package/docs/contracts/policy.md +7 -12
  476. package/docs/contracts/run-bundle.md +45 -44
  477. package/docs/contracts/schemas.md +421 -362
  478. package/docs/contracts/study-analysis.md +3 -3
  479. package/docs/contracts/study-costs.md +11 -7
  480. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  481. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  482. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  483. package/docs/principles/actor-fidelity.md +4 -4
  484. package/docs/principles/engineering.md +3 -3
  485. package/docs/principles/invariants-and-defaults.md +38 -38
  486. package/docs/principles/self-driving-harness.md +1 -5
  487. package/docs/principles/three-roles.md +1 -1
  488. package/docs/product/automatic-analysis.md +7 -7
  489. package/examples/participant/README.md +5 -5
  490. package/examples/participant/run.mjs +11 -10
  491. package/examples/scorer/README.md +3 -3
  492. package/examples/scorer/run.mjs +11 -12
  493. package/package.json +16 -17
  494. package/skills/humanish/SKILL.md +60 -58
  495. package/skills/humanish/agents/openai.yaml +1 -1
  496. package/AGENTS.md +0 -99
  497. package/CONTRIBUTING.md +0 -148
  498. package/dist/actors/codex/qualified-versions.d.ts +0 -72
  499. package/dist/actors/codex/qualified-versions.js +0 -132
  500. package/dist/cli/commands/lab.d.ts +0 -3
  501. package/dist/cli/commands/lab.js +0 -199
  502. package/dist/cli/renamed-options.d.ts +0 -11
  503. package/dist/cli/renamed-options.js +0 -18
  504. package/dist/observer/static.d.ts +0 -39
  505. package/dist/observer/static.js +0 -369
  506. package/docs/architecture/comms-inbox.md +0 -122
  507. package/docs/architecture/desktop-recording.md +0 -80
  508. package/docs/architecture/local-browser-runtime.md +0 -178
  509. package/docs/architecture/observer-review.md +0 -144
  510. package/docs/architecture/participant-media.md +0 -90
  511. package/docs/architecture/project-layout.md +0 -62
  512. package/docs/architecture/real-email-receiving.md +0 -136
  513. package/docs/assets/humanish-drawdb-hero.png +0 -0
  514. package/docs/assets/humanish-observer-hero.png +0 -0
  515. package/docs/goals/current.md +0 -207
  516. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  517. package/docs/product/open-source-install-experience.md +0 -240
  518. package/docs/ramp/README.md +0 -295
  519. package/docs/release/open-source-readiness.md +0 -222
  520. package/docs/release/public-readiness-standard.md +0 -210
  521. package/docs/roadmap/world-class-open-source-v0.md +0 -311
@@ -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.
@@ -1,18 +1,15 @@
1
- # State-driven executor (the `CuaExecutor` port)
1
+ # State-driven executor (the `ComputerUseExecutor` port)
2
2
 
3
- Date: 2026-06-15
4
-
5
- Status: shipped (PR1 of issue #148). The library path (a custom executor + a
6
- non-vision provider, driven through the lab with NO E2B and NO vision) is
7
- implemented and proven. A config-only deterministic route and a
8
- `subject.contract.ref` JS-module loader are deferred (see "Deferred", below).
3
+ The library path ships: a custom executor and a non-vision provider, driven through a study with
4
+ no E2B desktop and no vision model. A config-only deterministic route and a `subject.contract.ref`
5
+ module loader are not built (see Not built, below).
9
6
 
10
7
  ## What this is
11
8
 
12
9
  The computer-use (CUA) loop in
13
10
  [`src/actors/computer-use/loop.ts`](https://github.com/danielgwilson/humanish/blob/main/src/actors/computer-use/loop.ts) is provider- and
14
- substrate-agnostic by design: the model lives behind a `CuaProvider` port and the thing
15
- being driven lives behind a `CuaExecutor` port. Both ports are declared in
11
+ substrate-agnostic by design: the model lives behind a `ComputerUseProvider` port and the thing
12
+ being driven lives behind a `ComputerUseExecutor` port. Both ports are declared in
16
13
  `src/actors/computer-use/loop/types.ts`. You do not have to drive a screen with a vision
17
14
  model. You can point the loop at **an already-running local app** and drive it through that
18
15
  app's **in-process JavaScript automation contract** (e.g. `window.app.getState()`,
@@ -27,12 +24,12 @@ This is the "plural harnesses / transport-agnostic" intent of
27
24
  ## The port
28
25
 
29
26
  ```ts
30
- interface CuaExecutor {
31
- observe(): Promise<CuaObservation>; // capture current state
32
- execute(action: CuaAction, signal?: AbortSignal): Promise<void>; // perform one action
27
+ interface ComputerUseExecutor {
28
+ observe(): Promise<ComputerUseObservation>; // capture current state
29
+ execute(action: ComputerUseAction, signal?: AbortSignal): Promise<void>; // perform one action
33
30
  }
34
31
 
35
- interface CuaObservation {
32
+ interface ComputerUseObservation {
36
33
  screenshot?: Buffer; // OPTIONAL — a state executor omits it
37
34
  stateSignature: string; // REQUIRED — the fallback progress key
38
35
  appState?: Record<string, unknown>; // structured state; preferred for progress
@@ -71,9 +68,9 @@ graphically dense (pixel-art) UI. `stableProgressKey(appState)`:
71
68
  - sorts object keys, so key order never counts as progress;
72
69
  - caps depth, key count, array length, string length, and total output;
73
70
  - never throws on a cyclic or huge `appState`; it degrades to a bounded value
74
- (cycles become `"[Circular]"`, over-cap nodes become markers). This is
75
- correctness-load-bearing: a hostile or merely large state blob cannot crash the
76
- loop.
71
+ (cycles become `"[Circular]"`, over-cap nodes become markers). The loop's
72
+ correctness depends on this: a hostile or merely large state blob cannot crash
73
+ it.
77
74
 
78
75
  ## A single desktop command failure is a recoverable skipped action
79
76
 
@@ -102,7 +99,7 @@ skipped: desktop command failed`, text = the public-safe action label + exit cod
102
99
  and any genuine non-`CommandExitError` adapter fault as `actor_error`.
103
100
  - **No infinite loop.** A skipped action changes nothing on screen, so it is not
104
101
  progress. A run that keeps failing every action makes no progress and still
105
- terminates honestly through the existing idle / no-progress backstop
102
+ terminates through the existing idle / no-progress backstop
106
103
  (`gave_up`). The resilience only converts a _single flaky command_ from fatal
107
104
  to survivable; it never masks a genuinely stuck run.
108
105
 
@@ -112,7 +109,7 @@ whitespace-collapsed) and a numeric exit code, and is still run through the loop
112
109
  values, and machine paths never appear. The action label comes from
113
110
  `describeCuaAction`, which never includes typed text.
114
111
 
115
- ## You need a NON-vision provider too
112
+ ## You need a non-vision provider too
116
113
 
117
114
  Swapping the executor is not enough. The default OpenAI computer-use provider is
118
115
  **vision-based**: it sends the screenshot as the `computer_call_output`, so a
@@ -122,7 +119,7 @@ reasons over app state).
122
119
 
123
120
  **Provider-authoring contract:**
124
121
 
125
- - A **vision** provider MUST set `requiresFrame: true` (the OpenAI provider does). When a
122
+ - A **vision** provider must set `requiresFrame: true` (the OpenAI provider does). When a
126
123
  `requiresFrame: true` provider is handed a screenshot-less observation, the loop ends the
127
124
  session with a structured `harness_error` (`missingFrame` in
128
125
  `src/actors/computer-use/loop/ending.ts`). It neither crashes silently nor passes falsely.
@@ -131,10 +128,10 @@ reasons over app state).
131
128
 
132
129
  `requiresFrame` defaulting to falsey is a known third-party-author footgun (a vision
133
130
  provider that forgets to set it would get a blank-frame crash instead of a clean verdict).
134
- This slice accepts it because every in-tree vision provider sets it: OpenAI computer use,
131
+ The loop accepts it because every in-tree vision provider sets it: OpenAI computer use,
135
132
  the local-agent Codex and Claude sessions, and the restricted Codex participant.
136
133
 
137
- ## `appState` is RUNTIME-ONLY (not evidence, in this slice)
134
+ ## `appState` is runtime-only
138
135
 
139
136
  `appState` is an in-memory progress-comparison input, exactly like
140
137
  `stateSignature` (which is itself never written as text). It is **never** copied
@@ -144,35 +141,35 @@ trace. Only the derived progress key is computed in-memory and discarded.
144
141
  Why: the published-evidence scan catches only secret-_shaped_ patterns. A
145
142
  structured app blob (ids, free-form state, possibly user chat or shapeless
146
143
  tokens) is exactly the "value has no shape" gap that pattern redaction cannot
147
- close. So this slice does not treat `appState` as an evidence surface at all.
144
+ close. So `appState` is not an evidence surface at all.
148
145
 
149
- The bundle is self-describing about it (invariant 6): when a state executor
146
+ The bundle says so: when a state executor
150
147
  surfaces `appState`, the trace's `redaction.notes` declares that app state was
151
- observed each turn to drive progress detection and was NOT written to the trace.
148
+ observed each turn to drive progress detection and was not written to the trace.
152
149
 
153
- A future "appState in evidence" slice MUST route a stringified projection through
154
- `redaction.redactText` (and the lab's `scrubText`) AND cap / whitelist fields
150
+ A future change that puts `appState` in evidence must route a stringified projection through
151
+ `redaction.redactText` (and the study's `scrubText`) and cap / whitelist fields
155
152
  before persisting. Pattern + literal redaction alone cannot sanitize an
156
153
  arbitrary blob.
157
154
 
158
- ## Provenance is honestly UNPINNED (invariant 5)
155
+ ## Provenance is declared unpinned
159
156
 
160
157
  An already-running local dev server cannot be commit-pinned. The bundle does not
161
158
  silently omit a subject block. It declares the absence: `subject.source:
162
159
  app-url` with `state.provenance: "undeclared"` (the app-url "absence declared"
163
160
  marker), and a `cua-lab.subject.declared` event that states the entry is a local
164
- dev server driven in-process, caller-provisioned and UNPINNED, with no E2B
161
+ dev server driven in-process, caller-provisioned and unpinned, with no E2B
165
162
  desktop created.
166
163
 
167
164
  ## Two entry points
168
165
 
169
166
  ### 1. Bare `runComputerUseLoop` (lowest level)
170
167
 
171
- Implement `CuaExecutor.observe()/execute()`, derive `stateSignature`/`appState`
172
- from your own state, pair it with a non-vision `CuaProvider`, and call
168
+ Implement `ComputerUseExecutor.observe()/execute()`, derive `stateSignature`/`appState`
169
+ from your own state, pair it with a non-vision `ComputerUseProvider`, and call
173
170
  `runComputerUseLoop`. You own the bundle/redaction wiring.
174
171
 
175
- ### 2. `runLab` + `inProcess` / `createProvider` (keeps the composition)
172
+ ### 2. `runStudy` + `inProcess` / `createProvider` (keeps the composition)
176
173
 
177
174
  The supported library path keeps personas, the Observer, the evidence bundle,
178
175
  redaction, and the friction loop, while skipping E2B entirely. Start with the
@@ -185,47 +182,47 @@ node node_modules/humanish/examples/participant/run.mjs
185
182
  ```
186
183
 
187
184
  The example includes a real loopback app, HTTP state/action bridge, full config
188
- object (`schema: LAB_CONFIG_SCHEMA`), deterministic non-vision provider,
189
- `stableProgressKey`, `runLab`, verification, a printed report and `finally`
185
+ object (`schema: STUDY_SCHEMA`), deterministic non-vision provider,
186
+ `stableProgressKey`, `runStudy`, verification, a printed report and `finally`
190
187
  cleanup. It makes no model calls and does not demonstrate persona efficacy.
191
- `parseLabConfig` accepts a decoded object, not a YAML string; narrow its result
192
- on `.ok`, then narrow `runLab`'s result on `backend === "cua"` before accessing
193
- the CUA result. The example defines all helpers rather than requiring a consumer
194
- to reconstruct them.
188
+ `parseStudy` accepts a decoded object, not a YAML string; narrow its result
189
+ on `.ok`, then narrow `runStudy`'s result on `route === "computer-use"` before
190
+ reading the computer-use result. The example defines all helpers, so a consumer does not
191
+ reconstruct them.
195
192
 
196
- Pass `inProcess: { executor }` and `createProvider` in `RunLabOptions`. The type requires
193
+ Pass `inProcess: { executor }` and `createProvider` in `RunStudyOptions`. The type requires
197
194
  `createProvider` beside `inProcess`: a state executor returns no frame, so it needs a non-vision
198
- provider. With `inProcess` set, the computer-use route takes a branch that NEVER
195
+ provider. With `inProcess` set, the computer-use route takes a branch that never
199
196
  loads the E2B module, creates a sandbox, runs `prepareDesktop`, provisions a
200
197
  clone, opens a browser, or starts a stream. `sandboxId`/`streamUrl` stay
201
198
  undefined, so `result.sandbox` is omitted. That omission is the verifiable
202
199
  "no E2B SDK call" proof.
203
200
 
204
- Fail-closed guards, all BEFORE any key check, so a CLI invocation never sees a misleading
205
- `HUMANISH_CUA_LAB_KEYS_MISSING` first:
201
+ Fail-closed guards, all before any key check, so a CLI invocation never sees a misleading
202
+ `HUMANISH_COMPUTER_USE_KEYS_MISSING` first:
206
203
 
207
- - `HUMANISH_LAB_OPTION_UNSUPPORTED`: `inProcess` without `createProvider` (from JavaScript,
204
+ - `HUMANISH_STUDY_OPTION_UNSUPPORTED`: `inProcess` without `createProvider` (from JavaScript,
208
205
  where the type does not stop it), or on a subject other than `app-url` or `local-app`.
209
206
  `createProvider` alone is allowed; that is a model swap on the normal E2B route.
210
- - `HUMANISH_CUA_LAB_FANOUT_INVALID`: `inProcess` with more than one participant. The planner refuses it, because fan-out gives each participant
207
+ - `HUMANISH_COMPUTER_USE_FANOUT_INVALID`: `inProcess` with more than one participant. The planner refuses it, because fan-out gives each participant
211
208
  its own E2B desktop and the in-process route has none.
212
- - `HUMANISH_CUA_LAB_LOCAL_APP_NO_EXECUTOR`: a `subject.source: local-app` config run
209
+ - `HUMANISH_COMPUTER_USE_LOCAL_APP_NO_EXECUTOR`: a `subject.source: local-app` config run
213
210
  without `inProcess` (there is no built-in in-process driver yet). A structured error,
214
211
  never a desktop attempt.
215
- - `HUMANISH_CUA_LAB_LOCAL_DESKTOP_MISSING`: an `app-url` lab with `execution.target: local`
216
- and no local desktop. `runLab` gives a local browser study its desktop; a direct route
217
- call or an in-process executor on the same lab has none.
218
- - `HUMANISH_CUA_LAB_EXECUTOR_NO_PROVIDER`: the route's internal executor hook without its
219
- provider hook. A package caller gets `HUMANISH_LAB_OPTION_UNSUPPORTED` above instead.
212
+ - `HUMANISH_COMPUTER_USE_LOCAL_DESKTOP_MISSING`: an `app-url` study with `execution.target: local`
213
+ and no local desktop. `runStudy` gives a local browser study its desktop; a direct route
214
+ call or an in-process executor on the same study has none.
215
+ - `HUMANISH_COMPUTER_USE_EXECUTOR_NO_PROVIDER`: the route's internal executor hook without its
216
+ provider hook. A package caller gets `HUMANISH_STUDY_OPTION_UNSUPPORTED` above instead.
220
217
 
221
- Key gating is route-aware: the in-process route uses the caller's OWN model and
218
+ Key gating is route-aware: the in-process route uses the caller's own model and
222
219
  executor, so no `OPENAI_API_KEY`/`E2B_API_KEY` is required.
223
220
 
224
221
  ## A note on `appState` typing
225
222
 
226
- `CuaObservation.appState` is `Record<string, unknown> | undefined` under the
223
+ `ComputerUseObservation.appState` is `Record<string, unknown> | undefined` under the
227
224
  repo's strict flags (`exactOptionalPropertyTypes`, `noUncheckedIndexedAccess`).
228
- A value typed as an `interface` does NOT satisfy `Record<string, unknown>`
225
+ A value typed as an `interface` does not satisfy `Record<string, unknown>`
229
226
  (interfaces have no implicit index signature), and a direct `as Record<...>` cast
230
227
  on an interface-typed value is rejected. Use one of:
231
228
 
@@ -236,15 +233,15 @@ on an interface-typed value is rejected. Use one of:
236
233
  Read every optional field defensively, and spread-omit optional fields
237
234
  (`...(x === undefined ? {} : { x })`) rather than assigning `undefined`.
238
235
 
239
- ## Deferred (tracked, not shipped here)
236
+ ## Not built
240
237
 
241
- - **PR2: a config-only deterministic `state-contract` route.** A registered,
238
+ - **A config-only deterministic `state-contract` route.** A registered,
242
239
  model-free route driving a built-in `window.app.*` bridge over the existing
243
- `ScriptedPageLike.evaluate` primitive + a YAML step program, `scenario.mode:
244
- live` gating actuation. It would be deterministic step replay, NOT
240
+ `ScriptedPageLike.evaluate` primitive + a YAML step program, `mode: live`
241
+ gating actuation. It would be deterministic step replay, not
245
242
  `runComputerUseLoop`, and must not overclaim friction-loop reuse.
246
- - **PR3: a `subject.contract.ref` JS-module loader.** A config-referenced module
247
- loaded and run in-process with full harness privileges is a genuinely NEW trust
243
+ - **A `subject.contract.ref` JS-module loader.** A config-referenced module
244
+ loaded and run in-process with full harness privileges is a genuinely new trust
248
245
  surface with no precedent in this repo (the scripted route loads only declarative
249
246
  YAML; serve commands run isolated inside the disposable E2B sandbox). It earns
250
247
  its place only behind its own clamping / trust / digest-pinning design.
@@ -1,6 +1,6 @@
1
1
  # Task protocol support
2
2
 
3
- `actors[0].tasks` adds a participant protocol to the mission. Goals reach the
3
+ `actor.tasks` adds a participant protocol to the mission. Goals reach the
4
4
  participant; hidden success criteria go only to the observation tracker. A route
5
5
  that cannot carry both halves refuses the declaration before execution. Removing
6
6
  `tasks` is an explicit choice to run a mission-only study, not an automatic fallback.
@@ -14,7 +14,7 @@ that cannot carry both halves refuses the declaration before execution. Removing
14
14
  | Shared-world, provisioned or external-public | Rejected | Actor specs omit the protocol before CUA session dispatch |
15
15
  | Terminal-product | Rejected | Terminal prompt and result contract do not implement tasks |
16
16
  | Scripted-browser, local or provisioned | Rejected | Scenario steps drive the participant; no task protocol is consumed |
17
- | Synthetic (`this-repo`) | Rejected | Lab dispatch does not pass task declarations to the dry-run engine |
17
+ | Synthetic (`this-repo`) | Rejected | Study dispatch does not pass task declarations to the dry-run engine |
18
18
  | Any second or later `actors[]` entry | Rejected | Current runners consume only the first actor; declare every participant under the first actor |
19
19
 
20
20
  Both registered CUA actors (`openai-computer-use` and `local-agent`) share the CUA
@@ -22,12 +22,12 @@ session loop. Their task support does not depend on which provider chooses actio
22
22
  Custom session hooks remain caller-owned implementations of that same contract;
23
23
  this preflight does not certify arbitrary hook behavior.
24
24
 
25
- The parser reports `HUMANISH_LAB_INVALID` with the unsupported field path. `runLab`
26
- reports `HUMANISH_LAB_TASKS_UNSUPPORTED` in the route's failure envelope, from
25
+ The parser reports `HUMANISH_STUDY_INVALID` with the unsupported field path. `runStudy`
26
+ reports `HUMANISH_STUDY_TASKS_UNSUPPORTED` in the route's failure envelope, from
27
27
  `planLab` (`src/lab/plan.ts`) and each route's plan.
28
28
  Refusal precedes run storage, source preparation, user hooks, local processes,
29
29
  sandbox allocation, and model calls. No task content appears in the error.
30
30
 
31
31
  A future route gains support only after proving participant goals, hidden criteria,
32
- observation-backed completion, honest missing-input treatment, and per-participant
32
+ observation-backed completion, explicit missing-input handling, and per-participant
33
33
  bundle evidence together. Appending goals to a prompt alone is insufficient.