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,18 +0,0 @@
1
- // Options renamed in this minor keep their older name for one more minor, so a skill installed
2
- // before the rename still runs. The older name is hidden from --help, sets the same value and
3
- // prints one stderr line naming the new name. Each command reads its options through these
4
- // functions once, at the top of its action, so one invocation prints the line once.
5
- function renamedOption(io, name, value, olderName, olderValue) {
6
- if (olderValue !== undefined) {
7
- io.writeErr(`warning: --${olderName} is deprecated and is removed in the next minor. Use --${name}.\n`);
8
- }
9
- return value ?? olderValue;
10
- }
11
- /** `--participants`, or `--lanes` when only the older spelling is set. */
12
- export function participantsOption(io, options) {
13
- return renamedOption(io, "participants", options.participants, "lanes", options.lanes);
14
- }
15
- /** `--count`, or `--sims` when only the older spelling is set. */
16
- export function countOption(io, options) {
17
- return renamedOption(io, "count", options.count, "sims", options.sims);
18
- }
@@ -1,7 +0,0 @@
1
- import type { LabConfig } from "./types.js";
2
- /** The first composition rule a config breaks, in the parser's order, or null. */
3
- export declare function compositionReason(config: LabConfig): string | null;
4
- /** Why a this-repo lab cannot run live. The parser and the preview planner both refuse with it. */
5
- export declare const THIS_REPO_DRY_RUN_ONLY = "this-repo labs are dry-run only; use a clone or app-url subject for a live run.";
6
- /** A desktop-cli subject with no product to study. The computer-use planner checks this too. */
7
- export declare function desktopCliProductReason(config: LabConfig): string | null;
@@ -1,7 +0,0 @@
1
- import { type LabConfigParseResult } from "./types.js";
2
- /**
3
- * Validate a parsed YAML object into a LabConfig. Pure: the caller owns file IO. Structural
4
- * validation only. Fields the engine does not yet consume are accepted but reported in
5
- * `warnings` so `lab inspect` never silently swallows a setting that does nothing.
6
- */
7
- export declare function parseLabConfig(raw: unknown): LabConfigParseResult;
@@ -1,65 +0,0 @@
1
- import type { ActorPersonaRef } from "../actors/contract.js";
2
- import { type LabConfig } from "./types.js";
3
- declare const LAB_LIST_SCHEMA = "humanish.lab-list.v1";
4
- declare const LAB_INSPECT_SCHEMA = "humanish.lab-inspect.v1";
5
- type LabOrigin = "committed" | "ignored" | "explicit";
6
- interface ResolvedLabConfig {
7
- config: LabConfig;
8
- origin: LabOrigin;
9
- path: string;
10
- warnings: string[];
11
- }
12
- export interface LabResolveFailure {
13
- ok: false;
14
- cwd: string;
15
- lab: string;
16
- error: {
17
- code: "HUMANISH_LAB_NOT_FOUND" | "HUMANISH_LAB_INVALID";
18
- message: string;
19
- };
20
- warnings: string[];
21
- }
22
- export type LabResolveResult = ({
23
- ok: true;
24
- } & ResolvedLabConfig) | LabResolveFailure;
25
- export interface LabListEntry {
26
- id: string;
27
- source: LabConfig["subject"]["source"];
28
- origin: LabOrigin;
29
- path: string;
30
- title?: string;
31
- /**
32
- * The manifest's own first sentence. The list is where someone decides which study to open, and a
33
- * list of names cannot answer "what is this one" for a project with twenty labs in it — the
34
- * stakeholder feedback that added this was, verbatim, "so i know wtf they are".
35
- */
36
- description?: string;
37
- }
38
- export interface LabListResult {
39
- schema: typeof LAB_LIST_SCHEMA;
40
- ok: true;
41
- cwd: string;
42
- labs: LabListEntry[];
43
- warnings: string[];
44
- }
45
- export interface LabInspectResult {
46
- /** Persona context only, before route instructions and runtime grants. */
47
- personas?: Array<{
48
- id: string;
49
- resolved: boolean;
50
- brief?: ActorPersonaRef["brief"];
51
- }>;
52
- schema: typeof LAB_INSPECT_SCHEMA;
53
- ok: boolean;
54
- cwd: string;
55
- lab: string;
56
- config?: LabConfig;
57
- origin?: LabOrigin;
58
- path?: string;
59
- error?: LabResolveFailure["error"];
60
- warnings: string[];
61
- }
62
- export declare function resolveLabManifest(cwd: string, lab: string): Promise<LabResolveResult>;
63
- export declare function listLabManifests(cwd: string): Promise<LabListResult>;
64
- export declare function inspectLabManifest(cwd: string, lab: string): Promise<LabInspectResult>;
65
- export {};
@@ -1,416 +0,0 @@
1
- export const DEFAULT_LOCAL_BROWSER_STARTER = {
2
- appUrl: "http://127.0.0.1:3000",
3
- mission: "Use the app's primary flow. Explain anything confusing and stop when the task is complete or you are stuck.",
4
- };
5
- function localBrowserLab(starter = DEFAULT_LOCAL_BROWSER_STARTER) {
6
- return {
7
- path: "humanish/labs/local-browser.yaml",
8
- plane: "source",
9
- contents: `schema: humanish.lab.v2
10
- id: local-browser
11
- title: Local browser · your app · Codex account
12
- description: >-
13
- Run a Codex-account participant in an isolated local browser against your loopback app—no E2B
14
- or OpenAI API key. Inference is remote and uses account quota. Before the first live run, use
15
- humanish doctor --lab local-browser to check the supported Codex login and local runtime.
16
- subject:
17
- source: app-url
18
- appUrl: ${JSON.stringify(starter.appUrl)}
19
- actors:
20
- - type: local-agent
21
- localAgent: codex
22
- persona: synthetic-new-user
23
- mission: ${JSON.stringify(starter.mission)}
24
- execution:
25
- target: local
26
- concurrency: 1
27
- timeoutMs: 120000
28
- scenario:
29
- mode: live
30
- defaults:
31
- open: true
32
- `,
33
- };
34
- }
35
- /**
36
- * The flagship live lab. A ChatGPT-account Codex participant has no API-dollar price, so preflight
37
- * refuses a dollar cap on it (HUMANISH_CUA_LAB_UNPRICED_CAP); that variant is bounded by the
38
- * session timeout instead of a cap it could never enforce.
39
- */
40
- function tryLiveLab(actor, localAgent = "codex") {
41
- const account = actor === "local-agent";
42
- const cost = account
43
- ? ` WHAT IT COSTS: one participant, one small task, a few E2B desktop minutes and your Codex
44
- account's usage. Account usage has no dollar price humanish can enforce, so the ten-minute
45
- session limit below bounds the run.`
46
- : ` WHAT IT COSTS: one participant, one small task, and a $2 cap on estimated model spend. The
47
- run stops before its next model request once the estimate passes $2, so the last request can take
48
- it slightly over. Hosted desktop time is billed separately.`;
49
- const participant = account
50
- ? ` # Your machine has a coding agent signed in, so this lab uses it: no provider API key,
51
- # only E2B. To use a provider key instead, swap to \`type: openai-computer-use\` and add
52
- # execution.caps.maxUsd.
53
- - type: local-agent
54
- localAgent: ${localAgent}`
55
- : ` - type: openai-computer-use
56
- # Bounds each model reply. Under the cap below it also bounds what a stalled or lost request
57
- # can cost, so the run can retry it instead of stopping.
58
- maxOutputTokens: 8192`;
59
- const bound = account
60
- ? " timeoutMs: 600000 # bounds the run; a dollar cap cannot be enforced on account usage"
61
- : ` timeoutMs: 600000
62
- caps:
63
- maxUsd: 2 # estimated model spend; the run stops before its next request once it passes this`;
64
- return {
65
- path: "humanish/labs/try-live.yaml",
66
- plane: "source",
67
- contents: `schema: humanish.lab.v2
68
- id: try-live
69
- title: Your first REAL study — one participant, a real app, a hosted desktop
70
- description: >-
71
- This lab runs live out of the box, on purpose. Every other starter file here is a template you
72
- have to fill in first, and a first live run that cannot succeed is where most people stop.
73
- THE SUBJECT IS A DEMO, NOT YOUR APP: it clones drawDB, a real public open-source diagram editor,
74
- and serves it inside the sandbox. That is what makes this runnable with nothing to configure.
75
- Once you have watched it work, point subject at your own app (see humanish/labs/cua-browser.yaml
76
- for the shape) — that is the study you actually want.
77
- ${cost}
78
- WHAT A GOOD RESULT LOOKS LIKE: not necessarily a pass. A participant who gets stuck and says so
79
- is the most useful thing this tool produces — humanish will refuse to call that a credible pass,
80
- on purpose, and the friction they describe is the finding. A first run that ends in "I could not
81
- do it, and here is where I got lost" worked exactly as intended.
82
- subject:
83
- source: clone
84
- repos:
85
- - drawdb-io/drawdb
86
- clone:
87
- depth: 1
88
- serve:
89
- # Plain npm — humanish provides the Node runtime the stock desktop image does not ship.
90
- install: npm install --no-audit --no-fund
91
- build: npm run build
92
- start: npx vite preview --host 127.0.0.1 --port 3000
93
- url: http://127.0.0.1:3000/
94
- actors:
95
- ${participant}
96
- persona: synthetic-new-user
97
- mission: >-
98
- You have never seen this diagram tool before. Add two tables and give them meaningful names,
99
- then stop and say what you did, what confused you, and where you hesitated.
100
- execution:
101
- target: e2b-desktop
102
- ${bound}
103
- scenario:
104
- mode: live # the point of this lab — the others start as dry-run
105
- defaults:
106
- open: true
107
- `,
108
- };
109
- }
110
- export const starterFiles = [
111
- {
112
- path: "humanish/README.md",
113
- plane: "source",
114
- contents: `# humanish
115
-
116
- This directory is the committed source of persona simulation intent for this app.
117
-
118
- Keep this directory public-safe:
119
-
120
- - synthetic personas only;
121
- - synthetic fixtures only;
122
- - env var names only, never values;
123
- - no PII, PHI, secrets, raw private transcripts, private screenshots, customer data, or patient data.
124
-
125
- Generated run bundles, screenshots, traces, logs, and local overrides belong in ignored \`.humanish/\`.
126
-
127
- Labs:
128
-
129
- - committed reusable labs live in humanish/labs/*.yaml;
130
- - private or machine-local labs live in ignored .humanish/labs/*.yaml or .humanish/local/labs/*.yaml;
131
- - run a lab with \`humanish watch <lab>\` or \`humanish lab run <lab>\`.
132
-
133
- Format standard:
134
-
135
- - human-authored humanish source uses .yaml;
136
- - generated artifacts, synthetic fixtures, and event streams use .json or .ndjson;
137
- - .yml is reserved for outside ecosystem files such as GitHub Actions, not humanish source.
138
- `,
139
- },
140
- {
141
- path: "humanish/personas/synthetic-new-user.yaml",
142
- plane: "source",
143
- contents: `schema: humanish.persona.v1
144
- id: synthetic-new-user
145
- name: Synthetic New User
146
- summary: A privacy-safe first-time user evaluating the app with realistic but synthetic needs.
147
- traits:
148
- patience: medium
149
- technical_confidence: medium
150
- constraints:
151
- - Do not use real personal data.
152
- - Do not use production accounts.
153
- - Treat all credentials as env var names only.
154
- `,
155
- },
156
- {
157
- path: "humanish/personas/skeptical-power-user.yaml",
158
- plane: "source",
159
- contents: `schema: humanish.persona.v1
160
- id: skeptical-power-user
161
- name: Skeptical Power User
162
- summary: A privacy-safe experienced user looking for speed, reversibility, and clear proof.
163
- traits:
164
- patience: low
165
- technical_confidence: high
166
- accessibility_needs: keyboard_first
167
- constraints:
168
- - Do not use real personal data.
169
- - Prefer synthetic fixture inputs.
170
- - Flag unclear recovery paths.
171
- `,
172
- },
173
- {
174
- path: "humanish/scenarios/first-run-smoke.yaml",
175
- plane: "source",
176
- contents: `schema: humanish.scenario.v1
177
- id: first-run-smoke
178
- title: First-run smoke
179
- persona: synthetic-new-user
180
- goal: Reach the first meaningful product state without using private data.
181
- mode: dry-run
182
- steps:
183
- - name: Open the app
184
- expectation: The app shell is reachable.
185
- - name: Complete the first synthetic action
186
- expectation: The user sees a clear next state.
187
- - name: Capture review notes
188
- expectation: Notes are public-safe and evidence-backed.
189
- `,
190
- },
191
- {
192
- path: "humanish/scenarios/onboarding-regression.yaml",
193
- plane: "source",
194
- contents: `schema: humanish.scenario.v1
195
- id: onboarding-regression
196
- title: Onboarding regression
197
- persona: skeptical-power-user
198
- goal: Exercise onboarding friction using synthetic inputs and explicit recovery checks.
199
- mode: dry-run
200
- steps:
201
- - name: Start onboarding
202
- expectation: Required information is clear.
203
- - name: Use synthetic fixture data
204
- expectation: No real user data is entered.
205
- - name: Check recovery path
206
- expectation: The user can back out or retry safely.
207
- `,
208
- },
209
- {
210
- path: "humanish/labs/first-run.yaml",
211
- plane: "source",
212
- contents: `schema: humanish.lab.v2
213
- id: first-run
214
- title: First-run synthetic Observer
215
- description: Public-safe starter lab that generates a synthetic run bundle and Observer without provider spend.
216
- subject:
217
- source: this-repo
218
- actors:
219
- - type: synthetic-persona
220
- count: 4
221
- scenario:
222
- mode: dry-run
223
- defaults:
224
- open: true
225
- `,
226
- },
227
- tryLiveLab("openai-computer-use"),
228
- localBrowserLab(),
229
- {
230
- path: "humanish/labs/cua-browser.yaml",
231
- plane: "source",
232
- contents: `schema: humanish.lab.v2
233
- id: cua-browser
234
- title: Computer-use browser lab
235
- description: >-
236
- A registered computer-use actor drives your app in a hosted desktop browser and emits an
237
- evidence bundle into gitignored .humanish/. Screenshots are full-fidelity (raw) by default;
238
- set policies.redactScreenshots: true to blur at capture for a share-as-is bundle. Typed
239
- text is recorded as length only. Dry-run by default; switch scenario.mode to live (with
240
- OPENAI_API_KEY + E2B_API_KEY via --env-file) for a real session. The clone subject below
241
- serves your repo INSIDE the sandbox; declared subject env NAMES are provisioned from
242
- --env-file (values are never persisted).
243
- subject:
244
- source: clone
245
- repos: [your-org/your-app]
246
- serve:
247
- install: pnpm install --frozen-lockfile
248
- build: pnpm build
249
- start: pnpm start
250
- url: http://127.0.0.1:3000/
251
- # installTimeoutMs: 1200000 # bump for monorepo-scale installs/builds (default 600000)
252
- # buildTimeoutMs: 1800000
253
- # env: [DATABASE_URL]
254
- # state: # the subject's STATE story (recorded as provenance):
255
- # seed: # ordered, bounded seed/migration/fixture steps (commands are
256
- # - name: db-up # author-trusted; evidence records sha256 digests, never text)
257
- # command: sudo service postgresql start && pg_isready -t 30
258
- # when: before-start # before-build | before-start (default) | after-ready
259
- # - name: db-migrate
260
- # command: pnpm prisma migrate deploy
261
- # timeoutMs: 300000 # per-step budget (default 300000)
262
- # - name: admin-user # after-ready steps run against the RUNNING app
263
- # command: curl -sf -X POST http://127.0.0.1:3000/api/test/bootstrap-admin
264
- # when: after-ready
265
- # # Or point at a shared DB you do NOT control — recorded as UNPINNED in provenance;
266
- # # each name must also be declared in subject.env:
267
- # # external: [DATABASE_URL]
268
- # clone:
269
- # keep: true # leave the sandbox up on FAILURE so you can debug install/boot
270
- # Alternative: drive a deployment you own (Vercel preview, staging) instead of a clone:
271
- # source: app-url
272
- # appUrl: https://your-preview.vercel.app/
273
- actors:
274
- - type: openai-computer-use
275
- persona: first-time-visitor
276
- mission: >-
277
- Explore the app as a brand-new user trying to complete its primary flow. Note anything
278
- confusing. Stop when the flow completes or you are stuck.
279
- execution:
280
- target: e2b-desktop
281
- # 20 minutes: a session should end because the participant finished, not because a timer fired,
282
- # so this is as long as the substrate allows rather than as long as seems reasonable. This route
283
- # clones, installs, builds and serves the subject before the actor starts, so the sandbox deadline
284
- # is this budget PLUS 40 minutes of provisioning and teardown headroom — and a sandbox may not
285
- # live longer than 60. Raising this above 20 minutes fails the run closed before it starts; raise
286
- # execution.desktop.sandboxTimeoutMs deliberately if you need more.
287
- # Spend protection belongs to the dollar caps, not the clock.
288
- timeoutMs: 1200000
289
- desktop:
290
- device: desktop # mobile | small-mobile | narrow-mobile | tablet | desktop | wide
291
- # browser: chrome # default | chrome | chromium | firefox; concrete values fail closed
292
- # Presets size the physical screen; Chrome's window width has a ~500px minimum.
293
- # For mobile presets, opt into CSS viewport, touch, DPR and mobile user-agent emulation:
294
- # fidelity: { mobileEmulation: true } # Chrome/Chromium only; desktop/tablet lanes unchanged
295
- # The bundle records measured screen, page viewport and emulation fidelity separately.
296
- scenario:
297
- mode: dry-run
298
- # policies:
299
- # redactScreenshots: true # blur persisted frames (default off — full fidelity for local use)
300
- # allowPublicTargets: true # required to drive a non-loopback app-url (a deployment you own)
301
- defaults:
302
- open: true
303
- `,
304
- },
305
- {
306
- path: "humanish/labs/lobby-trivia-3player.yaml",
307
- plane: "source",
308
- contents: `schema: humanish.lab.v2
309
- id: lobby-trivia-3player
310
- title: External-public shared world (N mobile personas share ONE public app at once)
311
- description: >-
312
- A worked example of the EXTERNAL-PUBLIC shared-world route (#164 phase 2): N mobile-LAYOUT
313
- personas play the SAME multiplayer lobby on a REAL public deployment AT ONCE. The public site is
314
- the shared plane DIRECTLY — NO clone, NO getHost, NO subject sandbox, NO seed. A host-first barrier
315
- extracts the shared-session code from the host seat's CDP-observed URL and threads it into the
316
- follower join missions (followers go through the real Join flow). Dry-run (the default) emits ONE
317
- external-public evidence bundle at $0. A live run needs OPENAI_API_KEY + E2B_API_KEY and
318
- scenario.mode: live. Point appUrl + publicTarget at a public deployment YOU own/operate.
319
- MOBILE FIDELITY: by default Chrome's physical window has a 500px minimum width, no touch
320
- emulation and desktop DPR/user-agent behavior. Set execution.desktop.fidelity.mobileEmulation to true
321
- to request the mobile preset's CSS viewport, touch, DPR and mobile user agent on Chrome/Chromium.
322
- The bundle records measured geometry and emulation fidelity. HONESTY: attribution stays
323
- shared-world, but every strength claim degrades honestly — provenance external-public (not seeded),
324
- NO synthetic attestation (you cannot claim synthetic on a real site), NO authoritative shared-state
325
- proof, concurrency by temporal co-occupancy + observed lobby convergence.
326
- subject:
327
- source: app-url # the real public deployment IS the shared plane (no clone, no getHost)
328
- topology: shared-world # the declared override of the per-lane-worlds default
329
- appUrl: https://your-public-app.example/ # a deployment YOU own/operate
330
- publicTarget: # REQUIRED ownership attestation (the honest analog of exposure: synthetic)
331
- owner: your-org/your-app
332
- authorized: true
333
- policies:
334
- allowPublicTargets: true # REQUIRED: the shared plane is a real non-loopback public deployment
335
- actors:
336
- - type: openai-computer-use
337
- mission: You are one of several users on the same shared session at once. Play your role, then stop.
338
- lanes: # the roster (>=2) with EXACTLY ONE host: true seat
339
- - id: host
340
- host: true # the designated host seat that creates the shared session
341
- device: mobile # 414x896 preset; physical window width floors to 500 (see emulation above)
342
- instruction: Create a shared lobby, wait for the others to join, then start and play.
343
- - id: player-2
344
- device: mobile
345
- instruction: Join the lobby you're told the code for, then play.
346
- - id: player-3
347
- device: small-mobile
348
- instruction: Join the lobby you're told the code for, then play.
349
- execution:
350
- target: e2b-desktop
351
- # PER-SEAT session budget; also caps the host-first handoff deadline. Budget for the WHOLE arc:
352
- # seat provisioning + shared-session assembly + actual play. A first live run of the worked
353
- # example died at 120000 with every seat expiring mid game and zero mission actions taken.
354
- timeoutMs: 420000
355
- concurrency: 3 # all 3 seats live at once (the default when omitted); lower only to cap paid desktops
356
- # desktop:
357
- # fidelity: { mobileEmulation: true } # opt into mobile CSS viewport, touch, DPR and user agent
358
- scenario:
359
- mode: dry-run # default; the live path opens N real mobile-layout seats against the public app
360
- defaults:
361
- open: true
362
- `,
363
- },
364
- {
365
- path: "humanish/coverage-map.md",
366
- plane: "source",
367
- contents: `# Coverage Map
368
-
369
- This file should enumerate screens, roles, states, and paths before scenarios are treated as complete.
370
-
371
- Current starter coverage is intentionally minimal and synthetic.
372
- `,
373
- },
374
- {
375
- path: "humanish/coverage-matrix.md",
376
- plane: "source",
377
- contents: `# Coverage Matrix
378
-
379
- | Area | Persona | Happy Path | Sad Path | Status |
380
- | --- | --- | --- | --- | --- |
381
- | First run | synthetic-new-user | planned | planned | starter |
382
- | Onboarding | skeptical-power-user | planned | planned | starter |
383
- `,
384
- },
385
- ];
386
- export const runtimeDirectories = [
387
- { path: ".humanish/runs", plane: "runtime" },
388
- { path: ".humanish/cache", plane: "runtime" },
389
- { path: ".humanish/tmp", plane: "runtime" },
390
- { path: ".humanish/logs", plane: "runtime" },
391
- { path: ".humanish/labs", plane: "runtime" },
392
- { path: ".humanish/local/labs", plane: "runtime" },
393
- { path: ".humanish/local/personas", plane: "runtime" },
394
- ];
395
- export const humanishScripts = {
396
- humanish: "humanish",
397
- "humanish:doctor": "humanish doctor",
398
- "humanish:run": "humanish run --dry-run",
399
- "humanish:watch": "humanish watch",
400
- "humanish:watch:ci": "humanish watch --json --no-open",
401
- "humanish:verify": "humanish verify",
402
- };
403
- /**
404
- * The starter files, with the live lab written for the brain this machine can use.
405
- *
406
- * `local-agent` is not a variant of the lab so much as a different participant: on a machine with
407
- * a signed-in Codex and no provider key, the study runs with the operator's own agent and needs
408
- * only E2B. Writing the other one there would hand someone homework instead of a first run.
409
- */
410
- export function starterFilesFor(actor, localBrowser = DEFAULT_LOCAL_BROWSER_STARTER, localAgent) {
411
- return starterFiles.map((file) => file.path === "humanish/labs/local-browser.yaml"
412
- ? localBrowserLab(localBrowser)
413
- : file.path === "humanish/labs/try-live.yaml"
414
- ? tryLiveLab(actor, localAgent)
415
- : file);
416
- }
@@ -1,2 +0,0 @@
1
- /** The first key in `raw` that LAB_KEYS does not list, as an error message; undefined if none. */
2
- export declare function findUnknownLabKey(raw: unknown): string | undefined;
@@ -1,12 +0,0 @@
1
- import type { LabComms, LabCommsEmail, LabCommsRecipient, LabConfigParseFailure } from "../types.js";
2
- export declare function parseComms(raw: unknown): {
3
- ok: true;
4
- value: LabComms | undefined;
5
- } | LabConfigParseFailure;
6
- /** The participant a declared inbox recipient belongs to. The manifest spells it `lane`. */
7
- export declare function recipientParticipantId(recipient: LabCommsRecipient): string;
8
- /** The declared recipients that name an address, in declaration order, by participant id. */
9
- export declare function addressedRecipients(email: Pick<LabCommsEmail, "recipients">): {
10
- participantId: string;
11
- address: string;
12
- }[];
@@ -1,19 +0,0 @@
1
- import type { LabConfigParseFailure, LabDefaults, LabExecution, LabPolicies, LabReview, LabScenario } from "../types.js";
2
- export declare function parseExecution(raw: unknown): {
3
- ok: true;
4
- value: LabExecution | undefined;
5
- } | LabConfigParseFailure;
6
- export declare function parsePersonas(raw: unknown): Record<string, unknown>[] | undefined;
7
- export declare function parseScenario(raw: unknown): {
8
- ok: true;
9
- value: LabScenario | undefined;
10
- } | LabConfigParseFailure;
11
- export declare function parsePolicies(raw: unknown): {
12
- ok: true;
13
- value: LabPolicies | undefined;
14
- } | LabConfigParseFailure;
15
- export declare function parseReview(raw: unknown): {
16
- ok: true;
17
- value: LabReview | undefined;
18
- } | LabConfigParseFailure;
19
- export declare function parseDefaults(raw: unknown): LabDefaults | undefined;
@@ -1,30 +0,0 @@
1
- import type { LabConfigParseFailure, LabSubjectState } from "../types.js";
2
- /**
3
- * LITERAL non-secret subject env. Real apps need configuration before they will boot — a public base
4
- * URL, a transport selector, a feature flag — and none of that is secret. Routing it through
5
- * `subject.env` would force an adopter to carry a private env file just to reproduce a public study.
6
- *
7
- * These values ARE recorded in evidence (they are part of how the subject was configured), so a
8
- * value that looks like a credential is refused here rather than committed to a public repo.
9
- */
10
- export declare function parseEnvValues(raw: unknown): {
11
- ok: true;
12
- value?: Record<string, string>;
13
- } | LabConfigParseFailure;
14
- /**
15
- * Structural parse of `subject.state` into a candidate LabSubjectState. Deliberately keeps
16
- * unrecognized `when`/`timeoutMs` values in the candidate (instead of silently dropping
17
- * them) so subjectStateInvalidReason rejects them — a state declaration that silently does
18
- * less than it says would violate invariant 6.
19
- */
20
- export declare function parseState(raw: unknown): {
21
- ok: true;
22
- value: LabSubjectState | undefined;
23
- } | LabConfigParseFailure;
24
- /**
25
- * Semantic validation for `subject.state`, shared by parseLabConfig and the engine
26
- * (runCuaActorLab re-enforces it on configs that arrive through the library API). Returns
27
- * the failure message, or null when the declaration is valid. Reads the candidate
28
- * defensively — library callers can hand the engine arbitrarily-shaped objects.
29
- */
30
- export declare function subjectStateInvalidReason(state: LabSubjectState, env: readonly string[] | undefined): string | null;
@@ -1,19 +0,0 @@
1
- import type { InternalRunLabOptions } from "../run-lab.js";
2
- import type { LabDeps } from "./lab-deps.js";
3
- import type { PlanResult } from "./plan-types.js";
4
- import type { LabConfig } from "./types.js";
5
- /** The five execution paths a lab can take. */
6
- export type LabRoute = "preview" | "computer-use" | "shared-world" | "terminal" | "scripted";
7
- /**
8
- * The route a config takes. It never refuses: a config no route can run still gets the route
9
- * whose own checks refuse it with the most precise reason.
10
- */
11
- export declare function routeOf(config: LabConfig): LabRoute;
12
- /** Resolve dry-run: explicit override wins, else the scenario mode, else the given fallback. */
13
- export declare function resolveLabDryRun(config: LabConfig, override: boolean | undefined, fallback: boolean | undefined): boolean | undefined;
14
- /**
15
- * The plan a lab runs under, built without reading files, env or the network. Each route's planner
16
- * makes every refusal that route makes, in the route's order and with its codes and messages; the
17
- * route's exported runner calls the same planner.
18
- */
19
- export declare function planLab(config: LabConfig, options: InternalRunLabOptions, deps?: LabDeps): PlanResult;