humanish 0.106.1 → 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 (668) hide show
  1. package/ARCHITECTURE.md +38 -32
  2. package/CHANGELOG.md +28 -0
  3. package/CONTEXT.md +51 -41
  4. package/README.md +152 -174
  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-client.js +2 -1
  14. package/dist/actors/codex/app-server-trace.d.ts +0 -1
  15. package/dist/actors/codex/app-server-trace.js +1 -3
  16. package/dist/actors/codex/app-server-ui.js +1 -1
  17. package/dist/actors/codex/app-server.js +2 -1
  18. package/dist/actors/codex/codex-admission.d.ts +91 -0
  19. package/dist/actors/codex/codex-admission.js +150 -0
  20. package/dist/actors/codex/protocol-compat.d.ts +27 -0
  21. package/dist/actors/codex/protocol-compat.js +357 -0
  22. package/dist/actors/codex/protocol-contract.d.ts +61 -0
  23. package/dist/actors/codex/protocol-contract.js +471 -0
  24. package/dist/actors/codex/restricted-executable.d.ts +28 -4
  25. package/dist/actors/codex/restricted-executable.js +104 -29
  26. package/dist/actors/codex/restricted-launch.d.ts +9 -2
  27. package/dist/actors/codex/restricted-launch.js +43 -4
  28. package/dist/actors/codex/restricted-notifications.d.ts +101 -0
  29. package/dist/actors/codex/restricted-notifications.js +277 -0
  30. package/dist/actors/codex/restricted-participant.d.ts +30 -0
  31. package/dist/actors/codex/restricted-participant.js +66 -6
  32. package/dist/actors/codex/restricted-policy.d.ts +11 -3
  33. package/dist/actors/codex/restricted-policy.js +2 -2
  34. package/dist/actors/codex/restricted-session.d.ts +16 -3
  35. package/dist/actors/codex/restricted-session.js +60 -22
  36. package/dist/actors/codex/restricted-transport.d.ts +29 -0
  37. package/dist/actors/codex/restricted-transport.js +139 -27
  38. package/dist/actors/codex/restricted-turn.d.ts +19 -4
  39. package/dist/actors/codex/restricted-turn.js +43 -30
  40. package/dist/actors/computer-use/actor.d.ts +17 -17
  41. package/dist/actors/computer-use/actor.js +6 -6
  42. package/dist/actors/computer-use/admission-limit.d.ts +1 -1
  43. package/dist/actors/computer-use/admission-limit.js +1 -1
  44. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  45. package/dist/actors/computer-use/loop/actions.js +10 -10
  46. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  47. package/dist/actors/computer-use/loop/backstop.js +15 -13
  48. package/dist/actors/computer-use/loop/ending.d.ts +7 -7
  49. package/dist/actors/computer-use/loop/ending.js +9 -9
  50. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  51. package/dist/actors/computer-use/loop/observation.js +9 -9
  52. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  53. package/dist/actors/computer-use/loop/provider-call.js +1 -1
  54. package/dist/actors/computer-use/loop/session.js +3 -3
  55. package/dist/actors/computer-use/loop/spend.d.ts +2 -2
  56. package/dist/actors/computer-use/loop/spend.js +4 -4
  57. package/dist/actors/computer-use/loop/trace.js +11 -10
  58. package/dist/actors/computer-use/loop/types.d.ts +37 -26
  59. package/dist/actors/computer-use/loop/usage.js +2 -2
  60. package/dist/actors/computer-use/loop.js +4 -4
  61. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  62. package/dist/actors/computer-use/openai-context.js +214 -0
  63. package/dist/actors/computer-use/openai-provider.d.ts +12 -9
  64. package/dist/actors/computer-use/openai-provider.js +47 -36
  65. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  66. package/dist/actors/computer-use/openai-requests.js +82 -15
  67. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  68. package/dist/actors/computer-use/openai-wire.js +36 -34
  69. package/dist/actors/contract.d.ts +86 -49
  70. package/dist/actors/contract.js +29 -23
  71. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  72. package/dist/actors/local-agent/claude-session.js +10 -9
  73. package/dist/actors/local-agent/cli.d.ts +8 -6
  74. package/dist/actors/local-agent/cli.js +24 -28
  75. package/dist/actors/local-agent/readiness.d.ts +2 -2
  76. package/dist/actors/local-agent/readiness.js +4 -4
  77. package/dist/actors/reasoning-effort.js +6 -6
  78. package/dist/actors/registry.d.ts +10 -10
  79. package/dist/actors/registry.js +18 -17
  80. package/dist/actors/scripted-browser/actor.d.ts +8 -8
  81. package/dist/actors/scripted-browser/actor.js +16 -16
  82. package/dist/actors/scripted-browser/browser-command.js +1 -1
  83. package/dist/actors/scripted-browser/journey.js +15 -4
  84. package/dist/actors/scripted-browser/steps.js +19 -1
  85. package/dist/actors/scripted-browser/types.d.ts +12 -2
  86. package/dist/actors/stop-conditions.d.ts +1 -1
  87. package/dist/actors/stop-conditions.js +1 -3
  88. package/dist/analysis/automatic-completion.d.ts +13 -8
  89. package/dist/analysis/automatic-completion.js +14 -8
  90. package/dist/analysis/automatic-config.d.ts +1 -1
  91. package/dist/analysis/automatic-config.js +2 -2
  92. package/dist/analysis/automatic.d.ts +10 -4
  93. package/dist/analysis/automatic.js +17 -13
  94. package/dist/analysis/codex-config.d.ts +6 -2
  95. package/dist/analysis/codex-config.js +22 -14
  96. package/dist/analysis/diagnostics.d.ts +23 -0
  97. package/dist/analysis/diagnostics.js +112 -0
  98. package/dist/analysis/evidence-sources.js +2 -2
  99. package/dist/analysis/evidence.js +6 -6
  100. package/dist/analysis/execute.d.ts +7 -1
  101. package/dist/analysis/execute.js +39 -12
  102. package/dist/analysis/job.d.ts +8 -5
  103. package/dist/analysis/job.js +15 -14
  104. package/dist/analysis/load.d.ts +1 -1
  105. package/dist/analysis/load.js +5 -5
  106. package/dist/analysis/provider.d.ts +9 -1
  107. package/dist/analysis/restricted-codex.d.ts +2 -0
  108. package/dist/analysis/restricted-codex.js +10 -1
  109. package/dist/analysis/service.d.ts +2 -0
  110. package/dist/analysis/service.js +35 -16
  111. package/dist/analysis/sharing.d.ts +2 -2
  112. package/dist/analysis/sharing.js +5 -5
  113. package/dist/analysis/store-executions.d.ts +5 -5
  114. package/dist/analysis/store-executions.js +12 -12
  115. package/dist/analysis/store.d.ts +4 -4
  116. package/dist/analysis/store.js +13 -13
  117. package/dist/cli/commands/analysis-signals.d.ts +2 -1
  118. package/dist/cli/commands/analysis-signals.js +4 -1
  119. package/dist/cli/commands/analyze.js +23 -18
  120. package/dist/cli/commands/codex.js +9 -9
  121. package/dist/cli/commands/comms.js +62 -34
  122. package/dist/cli/commands/feedback.js +20 -21
  123. package/dist/cli/commands/lab-format.d.ts +5 -4
  124. package/dist/cli/commands/lab-format.js +35 -23
  125. package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
  126. package/dist/cli/commands/lab-route-computer-use.js +32 -21
  127. package/dist/cli/commands/lab-route-preview.d.ts +1 -3
  128. package/dist/cli/commands/lab-route-preview.js +7 -7
  129. package/dist/cli/commands/lab-route-run.d.ts +6 -4
  130. package/dist/cli/commands/lab-route-run.js +6 -2
  131. package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
  132. package/dist/cli/commands/lab-route-scripted.js +0 -1
  133. package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
  134. package/dist/cli/commands/lab-route-shared-world.js +3 -4
  135. package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
  136. package/dist/cli/commands/lab-route-terminal.js +0 -1
  137. package/dist/cli/commands/lab-run.js +84 -54
  138. package/dist/cli/commands/lab-scorer.d.ts +2 -4
  139. package/dist/cli/commands/lab-scorer.js +1 -1
  140. package/dist/cli/commands/migrate.d.ts +4 -0
  141. package/dist/cli/commands/migrate.js +65 -0
  142. package/dist/cli/commands/observe.js +168 -107
  143. package/dist/cli/commands/run-command.d.ts +10 -0
  144. package/dist/cli/commands/run-command.js +85 -0
  145. package/dist/cli/commands/run-signals.d.ts +30 -0
  146. package/dist/cli/commands/run-signals.js +146 -0
  147. package/dist/cli/commands/runs.js +137 -136
  148. package/dist/cli/commands/setup.d.ts +2 -2
  149. package/dist/cli/commands/setup.js +26 -21
  150. package/dist/cli/commands/study.d.ts +3 -0
  151. package/dist/cli/commands/study.js +182 -0
  152. package/dist/cli/commands/tui.d.ts +4 -4
  153. package/dist/cli/commands/tui.js +21 -21
  154. package/dist/cli/commands/watch.js +64 -77
  155. package/dist/cli/deprecations.d.ts +18 -0
  156. package/dist/cli/deprecations.js +48 -0
  157. package/dist/cli/doctor.d.ts +18 -5
  158. package/dist/cli/doctor.js +111 -48
  159. package/dist/cli/first-run-path.d.ts +12 -10
  160. package/dist/cli/first-run-path.js +30 -28
  161. package/dist/cli/io.d.ts +46 -10
  162. package/dist/cli/io.js +109 -30
  163. package/dist/cli/observer-follow.d.ts +2 -2
  164. package/dist/cli/observer-follow.js +5 -6
  165. package/dist/cli/orientation.d.ts +6 -3
  166. package/dist/cli/orientation.js +43 -39
  167. package/dist/cli/product-sentence.d.ts +6 -0
  168. package/dist/cli/product-sentence.js +6 -0
  169. package/dist/cli/program.d.ts +6 -1
  170. package/dist/cli/program.js +112 -43
  171. package/dist/cli/telemetry.d.ts +17 -17
  172. package/dist/cli/telemetry.js +49 -41
  173. package/dist/cli.js +1 -1
  174. package/dist/comms/capture-surface.d.ts +14 -13
  175. package/dist/comms/capture-surface.js +23 -22
  176. package/dist/comms/catch-host.d.ts +8 -8
  177. package/dist/comms/catch-host.js +14 -14
  178. package/dist/comms/connections.js +4 -4
  179. package/dist/comms/email-catch.d.ts +3 -3
  180. package/dist/comms/email-catch.js +8 -8
  181. package/dist/comms/external-evidence.d.ts +27 -0
  182. package/dist/comms/external-evidence.js +93 -0
  183. package/dist/comms/extract.js +2 -2
  184. package/dist/comms/fake-inbox.d.ts +2 -2
  185. package/dist/comms/fake-inbox.js +2 -2
  186. package/dist/comms/lease-store.js +7 -7
  187. package/dist/comms/receiving-render.d.ts +1 -1
  188. package/dist/comms/receiving-render.js +2 -2
  189. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  190. package/dist/comms/sandbox-catch-script.js +6 -6
  191. package/dist/comms/sandbox-catch.d.ts +36 -37
  192. package/dist/comms/sandbox-catch.js +34 -35
  193. package/dist/comms/setup.js +42 -8
  194. package/dist/comms/thread-evidence.d.ts +1 -1
  195. package/dist/comms/thread-evidence.js +6 -6
  196. package/dist/comms/types.d.ts +6 -6
  197. package/dist/comms/types.js +4 -4
  198. package/dist/evidence/browser-hygiene.d.ts +1 -1
  199. package/dist/evidence/browser-hygiene.js +1 -1
  200. package/dist/evidence/frame-signature.d.ts +1 -1
  201. package/dist/evidence/frame-signature.js +4 -4
  202. package/dist/evidence/redaction.d.ts +3 -3
  203. package/dist/evidence/redaction.js +5 -5
  204. package/dist/evidence/secret-scrub.d.ts +9 -0
  205. package/dist/evidence/secret-scrub.js +96 -0
  206. package/dist/feedback/draft.js +41 -85
  207. package/dist/feedback/export-bundle.js +5 -5
  208. package/dist/feedback/export.d.ts +5 -1
  209. package/dist/feedback/export.js +16 -17
  210. package/dist/feedback/feedback.d.ts +3 -3
  211. package/dist/feedback/feedback.js +21 -3
  212. package/dist/guest/chromium-text.js +2 -2
  213. package/dist/guest/desktop-native.d.ts +1 -1
  214. package/dist/guest/runtime.js +1 -1
  215. package/dist/index.d.ts +14 -15
  216. package/dist/index.js +10 -11
  217. package/dist/keys/key-resolution.d.ts +7 -5
  218. package/dist/keys/key-resolution.js +40 -38
  219. package/dist/lab/adapter-extension.d.ts +35 -13
  220. package/dist/lab/adapter-extension.js +50 -134
  221. package/dist/lab/adapter-scorer-loader.d.ts +32 -12
  222. package/dist/lab/adapter-scorer-loader.js +56 -32
  223. package/dist/lab/composition-rules.js +58 -58
  224. package/dist/lab/config.js +85 -43
  225. package/dist/lab/deprecated-fields.d.ts +10 -0
  226. package/dist/lab/deprecated-fields.js +24 -0
  227. package/dist/lab/device-presets.d.ts +10 -10
  228. package/dist/lab/device-presets.js +11 -11
  229. package/dist/lab/discover.d.ts +13 -9
  230. package/dist/lab/discover.js +118 -60
  231. package/dist/lab/doctor.d.ts +53 -11
  232. package/dist/lab/doctor.js +193 -47
  233. package/dist/lab/init-plan.js +1 -3
  234. package/dist/lab/init-templates.js +147 -147
  235. package/dist/lab/init.d.ts +1 -1
  236. package/dist/lab/init.js +41 -9
  237. package/dist/lab/keys.d.ts +2 -0
  238. package/dist/lab/keys.js +43 -9
  239. package/dist/lab/lab-deps.d.ts +80 -0
  240. package/dist/lab/lab-deps.js +4 -0
  241. package/dist/lab/parse/actors.js +17 -16
  242. package/dist/lab/parse/comms.js +8 -7
  243. package/dist/lab/parse/execution.js +15 -14
  244. package/dist/lab/parse/study-v3.d.ts +23 -0
  245. package/dist/lab/parse/study-v3.js +259 -0
  246. package/dist/lab/parse/subject-state.d.ts +7 -7
  247. package/dist/lab/parse/subject-state.js +18 -17
  248. package/dist/lab/parse/subject.js +30 -29
  249. package/dist/lab/parse/values.d.ts +1 -2
  250. package/dist/lab/parse/values.js +3 -6
  251. package/dist/lab/persona-resolve.d.ts +7 -7
  252. package/dist/lab/persona-resolve.js +8 -8
  253. package/dist/lab/persona.js +1 -3
  254. package/dist/lab/plan-base.d.ts +0 -2
  255. package/dist/lab/plan-base.js +6 -4
  256. package/dist/lab/plan-participants.d.ts +7 -7
  257. package/dist/lab/plan-participants.js +2 -2
  258. package/dist/lab/plan-types.d.ts +26 -8
  259. package/dist/lab/plan.d.ts +4 -18
  260. package/dist/lab/plan.js +24 -79
  261. package/dist/lab/preflight-probes.js +11 -11
  262. package/dist/lab/preflight-result.d.ts +2 -1
  263. package/dist/lab/preflight-result.js +5 -6
  264. package/dist/lab/preflight.d.ts +7 -8
  265. package/dist/lab/preflight.js +6 -6
  266. package/dist/lab/requirements.d.ts +20 -0
  267. package/dist/lab/requirements.js +54 -0
  268. package/dist/lab/route-inputs.d.ts +23 -12
  269. package/dist/lab/route-inputs.js +48 -51
  270. package/dist/lab/routing.d.ts +42 -41
  271. package/dist/lab/routing.js +66 -68
  272. package/dist/lab/run-lab-events.d.ts +3 -11
  273. package/dist/lab/run-lab-events.js +2 -16
  274. package/dist/lab/run-lab-homes.d.ts +76 -0
  275. package/dist/lab/run-lab-homes.js +7 -0
  276. package/dist/lab/run-lab-options.d.ts +12 -66
  277. package/dist/lab/run-lab-options.js +58 -285
  278. package/dist/lab/summary.d.ts +15 -9
  279. package/dist/lab/summary.js +24 -17
  280. package/dist/lab/tasks.d.ts +15 -15
  281. package/dist/lab/tasks.js +14 -14
  282. package/dist/lab/types.d.ts +201 -195
  283. package/dist/lab/types.js +2 -0
  284. package/dist/lab/validation.d.ts +21 -21
  285. package/dist/lab/validation.js +61 -59
  286. package/dist/lab/warnings.d.ts +10 -0
  287. package/dist/lab/warnings.js +70 -41
  288. package/dist/library-aliases.d.ts +56 -0
  289. package/dist/library-aliases.js +22 -0
  290. package/dist/observer/artifact.d.ts +2 -2
  291. package/dist/observer/artifact.js +9 -9
  292. package/dist/observer/data.d.ts +6 -6
  293. package/dist/observer/data.js +7 -6
  294. package/dist/observer/exposure.d.ts +1 -1
  295. package/dist/observer/exposure.js +11 -11
  296. package/dist/observer/http.js +1 -1
  297. package/dist/observer/library.d.ts +1 -1
  298. package/dist/observer/library.js +4 -2
  299. package/dist/observer/listen.js +5 -4
  300. package/dist/observer/render.d.ts +1 -1
  301. package/dist/observer/render.js +12 -7
  302. package/dist/observer/run-routes.d.ts +4 -4
  303. package/dist/observer/run-routes.js +6 -6
  304. package/dist/observer/serve.d.ts +17 -0
  305. package/dist/observer/serve.js +41 -6
  306. package/dist/observer/tunnel.js +1 -1
  307. package/dist/observer-app.html +4 -4
  308. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  309. package/dist/routes/computer-use/bundle-parts.js +24 -17
  310. package/dist/routes/computer-use/bundle.d.ts +4 -11
  311. package/dist/routes/computer-use/bundle.js +12 -18
  312. package/dist/routes/computer-use/diagnostics.d.ts +1 -1
  313. package/dist/routes/computer-use/diagnostics.js +1 -1
  314. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
  315. package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
  316. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
  317. package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
  318. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
  319. package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
  320. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
  321. package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
  322. package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
  323. package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
  324. package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
  325. package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
  326. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
  327. package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
  328. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  329. package/dist/routes/computer-use/external-comms.js +19 -43
  330. package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
  331. package/dist/routes/computer-use/fanout-bundle.js +38 -42
  332. package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
  333. package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
  334. package/dist/routes/computer-use/in-process-desktop.js +3 -9
  335. package/dist/routes/computer-use/live-flush.d.ts +7 -5
  336. package/dist/routes/computer-use/live-flush.js +20 -28
  337. package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
  338. package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
  339. package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
  340. package/dist/routes/computer-use/local-tree-pack.js +4 -5
  341. package/dist/routes/computer-use/local-vm.d.ts +11 -8
  342. package/dist/routes/computer-use/local-vm.js +40 -67
  343. package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
  344. package/dist/routes/computer-use/participant-desktop.js +5 -25
  345. package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
  346. package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
  347. package/dist/routes/computer-use/participant-facts.d.ts +7 -1
  348. package/dist/routes/computer-use/participant-facts.js +12 -1
  349. package/dist/routes/computer-use/participant-model.d.ts +25 -11
  350. package/dist/routes/computer-use/participant-model.js +76 -34
  351. package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
  352. package/dist/routes/computer-use/participant-prompt.js +8 -8
  353. package/dist/routes/computer-use/participant-runs.d.ts +11 -11
  354. package/dist/routes/computer-use/participant-runs.js +18 -18
  355. package/dist/routes/computer-use/plan.d.ts +21 -29
  356. package/dist/routes/computer-use/plan.js +70 -78
  357. package/dist/routes/computer-use/preflight.d.ts +3 -5
  358. package/dist/routes/computer-use/preflight.js +40 -36
  359. package/dist/routes/computer-use/rerun-selection.js +11 -7
  360. package/dist/routes/computer-use/result.d.ts +1 -1
  361. package/dist/routes/computer-use/result.js +48 -38
  362. package/dist/routes/computer-use/route.d.ts +5 -5
  363. package/dist/routes/computer-use/route.js +36 -33
  364. package/dist/routes/computer-use/self-report.d.ts +8 -8
  365. package/dist/routes/computer-use/self-report.js +33 -33
  366. package/dist/routes/computer-use/setup.d.ts +9 -15
  367. package/dist/routes/computer-use/setup.js +106 -83
  368. package/dist/routes/computer-use/single-bundle.d.ts +13 -16
  369. package/dist/routes/computer-use/single-bundle.js +46 -53
  370. package/dist/routes/computer-use/subject-projection.d.ts +6 -8
  371. package/dist/routes/computer-use/subject-projection.js +24 -23
  372. package/dist/routes/computer-use/types.d.ts +195 -238
  373. package/dist/routes/computer-use/types.js +21 -13
  374. package/dist/routes/preview.d.ts +8 -2
  375. package/dist/routes/preview.js +8 -5
  376. package/dist/routes/scripted/bundle.d.ts +5 -8
  377. package/dist/routes/scripted/bundle.js +23 -27
  378. package/dist/routes/scripted/plan.d.ts +6 -8
  379. package/dist/routes/scripted/plan.js +15 -13
  380. package/dist/routes/scripted/result.d.ts +4 -1
  381. package/dist/routes/scripted/result.js +15 -11
  382. package/dist/routes/scripted/route.js +15 -17
  383. package/dist/routes/scripted/scenario.d.ts +1 -1
  384. package/dist/routes/scripted/scenario.js +3 -3
  385. package/dist/routes/scripted/setup.d.ts +3 -2
  386. package/dist/routes/scripted/setup.js +27 -26
  387. package/dist/routes/scripted/subject.d.ts +8 -3
  388. package/dist/routes/scripted/subject.js +10 -6
  389. package/dist/routes/scripted/surface-records.js +4 -4
  390. package/dist/routes/scripted/surface-sessions.d.ts +2 -2
  391. package/dist/routes/scripted/surface-sessions.js +4 -4
  392. package/dist/routes/scripted/types.d.ts +21 -40
  393. package/dist/routes/scripted/types.js +2 -3
  394. package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
  395. package/dist/routes/shared-world/bundle.d.ts +7 -7
  396. package/dist/routes/shared-world/bundle.js +60 -62
  397. package/dist/routes/shared-world/checkpoints.d.ts +5 -5
  398. package/dist/routes/shared-world/checkpoints.js +5 -5
  399. package/dist/routes/shared-world/comms.d.ts +8 -7
  400. package/dist/routes/shared-world/comms.js +38 -51
  401. package/dist/routes/shared-world/external-public.d.ts +6 -5
  402. package/dist/routes/shared-world/external-public.js +28 -25
  403. package/dist/routes/shared-world/handoff.d.ts +10 -9
  404. package/dist/routes/shared-world/handoff.js +89 -81
  405. package/dist/routes/shared-world/lobby-code.d.ts +7 -7
  406. package/dist/routes/shared-world/lobby-code.js +22 -22
  407. package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
  408. package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
  409. package/dist/routes/shared-world/plan.d.ts +2 -6
  410. package/dist/routes/shared-world/plan.js +8 -9
  411. package/dist/routes/shared-world/provenance.d.ts +4 -4
  412. package/dist/routes/shared-world/provenance.js +4 -4
  413. package/dist/routes/shared-world/provisioned.d.ts +3 -2
  414. package/dist/routes/shared-world/provisioned.js +55 -48
  415. package/dist/routes/shared-world/result.js +47 -36
  416. package/dist/routes/shared-world/route.js +54 -57
  417. package/dist/routes/shared-world/setup.d.ts +6 -5
  418. package/dist/routes/shared-world/setup.js +16 -18
  419. package/dist/routes/shared-world/types.d.ts +70 -141
  420. package/dist/routes/shared-world/types.js +5 -5
  421. package/dist/routes/terminal/adapter.d.ts +10 -10
  422. package/dist/routes/terminal/adapter.js +32 -129
  423. package/dist/routes/terminal/bundle.d.ts +10 -15
  424. package/dist/routes/terminal/bundle.js +43 -52
  425. package/dist/routes/terminal/credentials.d.ts +4 -4
  426. package/dist/routes/terminal/credentials.js +20 -20
  427. package/dist/routes/terminal/dry-run.d.ts +1 -1
  428. package/dist/routes/terminal/dry-run.js +13 -15
  429. package/dist/routes/terminal/encoding.d.ts +1 -1
  430. package/dist/routes/terminal/encoding.js +4 -4
  431. package/dist/routes/terminal/ledger.d.ts +8 -8
  432. package/dist/routes/terminal/ledger.js +22 -22
  433. package/dist/routes/terminal/live-finish.d.ts +1 -2
  434. package/dist/routes/terminal/live-finish.js +24 -23
  435. package/dist/routes/terminal/live-sandbox.d.ts +3 -2
  436. package/dist/routes/terminal/live-sandbox.js +31 -32
  437. package/dist/routes/terminal/participant-text.d.ts +23 -0
  438. package/dist/routes/terminal/participant-text.js +165 -0
  439. package/dist/routes/terminal/persona.js +1 -1
  440. package/dist/routes/terminal/plan.d.ts +2 -6
  441. package/dist/routes/terminal/plan.js +23 -19
  442. package/dist/routes/terminal/recorder.d.ts +6 -1
  443. package/dist/routes/terminal/recorder.js +12 -4
  444. package/dist/routes/terminal/result.js +12 -12
  445. package/dist/routes/terminal/route.js +30 -31
  446. package/dist/routes/terminal/runtime.d.ts +3 -2
  447. package/dist/routes/terminal/runtime.js +3 -3
  448. package/dist/routes/terminal/sandbox.d.ts +4 -4
  449. package/dist/routes/terminal/sandbox.js +10 -10
  450. package/dist/routes/terminal/session.js +22 -19
  451. package/dist/routes/terminal/token-usage.d.ts +1 -1
  452. package/dist/routes/terminal/token-usage.js +10 -11
  453. package/dist/routes/terminal/trace.d.ts +7 -10
  454. package/dist/routes/terminal/trace.js +11 -66
  455. package/dist/routes/terminal/types.d.ts +104 -114
  456. package/dist/routes/terminal/types.js +12 -7
  457. package/dist/run/active-runs.d.ts +13 -0
  458. package/dist/run/active-runs.js +12 -0
  459. package/dist/run/bundle-shape.d.ts +2 -1
  460. package/dist/run/bundle-shape.js +7 -7
  461. package/dist/run/bundle.d.ts +99 -92
  462. package/dist/run/bundle.js +10 -8
  463. package/dist/run/cost-summary.js +6 -5
  464. package/dist/run/costs.d.ts +6 -6
  465. package/dist/run/costs.js +17 -11
  466. package/dist/run/detail.d.ts +9 -9
  467. package/dist/run/detail.js +10 -10
  468. package/dist/run/dry-run-inputs.js +1 -1
  469. package/dist/run/dry-run.js +23 -30
  470. package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
  471. package/dist/run/{study-files.js → evidence-files.js} +5 -5
  472. package/dist/run/feedback-shape.js +1 -1
  473. package/dist/run/judge.d.ts +34 -16
  474. package/dist/run/judge.js +41 -14
  475. package/dist/run/locate.d.ts +2 -0
  476. package/dist/run/locate.js +3 -1
  477. package/dist/run/outcomes.d.ts +3 -3
  478. package/dist/run/outcomes.js +3 -3
  479. package/dist/run/participant-records.d.ts +2 -2
  480. package/dist/run/participant-records.js +2 -2
  481. package/dist/run/paths.d.ts +1 -1
  482. package/dist/run/paths.js +2 -2
  483. package/dist/run/pricing.d.ts +30 -15
  484. package/dist/run/pricing.js +49 -30
  485. package/dist/run/projection.d.ts +27 -27
  486. package/dist/run/projection.js +23 -23
  487. package/dist/run/reclaim.d.ts +6 -0
  488. package/dist/run/reclaim.js +15 -5
  489. package/dist/run/results.d.ts +5 -5
  490. package/dist/run/run-index.d.ts +9 -7
  491. package/dist/run/run-index.js +24 -25
  492. package/dist/run/run-not-found.d.ts +5 -0
  493. package/dist/run/run-not-found.js +15 -0
  494. package/dist/run/run.d.ts +7 -4
  495. package/dist/run/run.js +10 -6
  496. package/dist/run/sandbox-receipts.d.ts +5 -5
  497. package/dist/run/sandbox-receipts.js +6 -6
  498. package/dist/run/shared-world-evidence.d.ts +67 -66
  499. package/dist/run/shared-world-evidence.js +4 -4
  500. package/dist/run/shared-world-shape.d.ts +3 -3
  501. package/dist/run/shared-world-shape.js +16 -16
  502. package/dist/run/stats.d.ts +17 -11
  503. package/dist/run/stats.js +124 -66
  504. package/dist/run/status.d.ts +21 -32
  505. package/dist/run/status.js +34 -33
  506. package/dist/run/stored-runs.js +2 -1
  507. package/dist/run/stream-shape.js +1 -1
  508. package/dist/run/streams.d.ts +29 -22
  509. package/dist/run/study-provenance.d.ts +47 -0
  510. package/dist/run/study-provenance.js +63 -0
  511. package/dist/run/study-result.d.ts +16 -0
  512. package/dist/run/study-result.js +9 -0
  513. package/dist/run/terminal-contract.d.ts +5 -5
  514. package/dist/run/terminal-contract.js +4 -4
  515. package/dist/run/text.d.ts +2 -0
  516. package/dist/run/text.js +4 -0
  517. package/dist/run/transient-comms-secrets.d.ts +5 -0
  518. package/dist/run/transient-comms-secrets.js +12 -0
  519. package/dist/run-lab.d.ts +40 -38
  520. package/dist/run-lab.js +42 -40
  521. package/dist/study/convert.d.ts +33 -0
  522. package/dist/study/convert.js +432 -0
  523. package/dist/study/field-paths.d.ts +12 -0
  524. package/dist/study/field-paths.js +126 -0
  525. package/dist/study/files.d.ts +26 -0
  526. package/dist/study/files.js +43 -0
  527. package/dist/study/migrate.d.ts +48 -0
  528. package/dist/study/migrate.js +408 -0
  529. package/dist/study/owned-files.d.ts +38 -0
  530. package/dist/study/owned-files.js +182 -0
  531. package/dist/subject/clone.d.ts +1 -1
  532. package/dist/subject/desktop-cli.d.ts +2 -2
  533. package/dist/subject/desktop-cli.js +3 -3
  534. package/dist/subject/local-tree-archive.d.ts +1 -1
  535. package/dist/subject/local-tree-archive.js +5 -5
  536. package/dist/subject/local-tree.d.ts +3 -3
  537. package/dist/subject/local-tree.js +1 -1
  538. package/dist/subject/node-bootstrap.d.ts +1 -1
  539. package/dist/subject/node-bootstrap.js +4 -4
  540. package/dist/subject/runtime.js +10 -11
  541. package/dist/subject/serve.d.ts +1 -1
  542. package/dist/subject/serve.js +4 -4
  543. package/dist/subject/state.d.ts +1 -1
  544. package/dist/subject/steps.d.ts +8 -8
  545. package/dist/subject/steps.js +7 -7
  546. package/dist/substrates/command-failure.d.ts +3 -3
  547. package/dist/substrates/command-failure.js +3 -3
  548. package/dist/substrates/detached.d.ts +6 -6
  549. package/dist/substrates/detached.js +7 -7
  550. package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
  551. package/dist/substrates/e2b/cdp-probe.js +15 -18
  552. package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
  553. package/dist/substrates/e2b/desktop-browser.js +12 -12
  554. package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
  555. package/dist/substrates/e2b/desktop-cdp.js +11 -11
  556. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  557. package/dist/substrates/e2b/desktop-executor.js +1 -1
  558. package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
  559. package/dist/substrates/e2b/desktop-geometry.js +9 -9
  560. package/dist/substrates/e2b/desktop-media.d.ts +1 -1
  561. package/dist/substrates/e2b/desktop-media.js +3 -3
  562. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  563. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  564. package/dist/substrates/e2b/sandbox.d.ts +1 -1
  565. package/dist/substrates/e2b/sandbox.js +2 -2
  566. package/dist/substrates/e2b/sdk.d.ts +11 -11
  567. package/dist/substrates/e2b/sdk.js +8 -8
  568. package/dist/substrates/local/runtime-host.d.ts +2 -0
  569. package/dist/substrates/local/runtime-host.js +6 -0
  570. package/dist/tui/actions.d.ts +8 -6
  571. package/dist/tui/actions.js +31 -22
  572. package/dist/tui/contract.d.ts +16 -16
  573. package/dist/tui/contract.js +10 -10
  574. package/dist/tui/launch.d.ts +4 -4
  575. package/dist/tui/launch.js +18 -19
  576. package/dist/tui/project.js +5 -5
  577. package/dist/tui-app.js +83 -83
  578. package/dist/verify/actor.d.ts +14 -14
  579. package/dist/verify/actor.js +45 -45
  580. package/dist/verify/artifacts.d.ts +3 -3
  581. package/dist/verify/artifacts.js +6 -6
  582. package/dist/verify/context-growth.d.ts +9 -0
  583. package/dist/verify/context-growth.js +62 -0
  584. package/dist/verify/costs.d.ts +7 -7
  585. package/dist/verify/costs.js +9 -9
  586. package/dist/verify/liveness.d.ts +1 -1
  587. package/dist/verify/liveness.js +4 -1
  588. package/dist/verify/rerun.d.ts +1 -1
  589. package/dist/verify/rerun.js +1 -1
  590. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  591. package/dist/verify/shared-world-concurrent.js +79 -76
  592. package/dist/verify/shared-world.d.ts +2 -2
  593. package/dist/verify/shared-world.js +18 -18
  594. package/dist/verify/subject.d.ts +4 -4
  595. package/dist/verify/subject.js +18 -18
  596. package/dist/verify/verify.js +98 -49
  597. package/docs/README.md +26 -33
  598. package/docs/architecture/actor-contract.md +105 -98
  599. package/docs/architecture/desktop-sessions.md +14 -14
  600. package/docs/architecture/external-public-shared-world.md +66 -59
  601. package/docs/architecture/github-feedback-loop.md +1 -4
  602. package/docs/architecture/guest-desktop.md +2 -2
  603. package/docs/architecture/observer.md +37 -37
  604. package/docs/architecture/restricted-codex-analysis.md +70 -30
  605. package/docs/architecture/serve.md +34 -37
  606. package/docs/architecture/state-driven-executor.md +55 -59
  607. package/docs/architecture/task-protocol-support.md +7 -9
  608. package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
  609. package/docs/contracts/README.md +24 -0
  610. package/docs/contracts/adapter-admission.md +3 -3
  611. package/docs/contracts/adapter-fixtures.md +2 -5
  612. package/docs/contracts/core.md +1 -3
  613. package/docs/contracts/errors.md +62 -0
  614. package/docs/contracts/feedback.md +8 -9
  615. package/docs/contracts/policy.md +7 -12
  616. package/docs/contracts/run-bundle.md +54 -51
  617. package/docs/contracts/schemas.md +505 -390
  618. package/docs/contracts/study-analysis.md +26 -2
  619. package/docs/contracts/study-costs.md +11 -7
  620. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  621. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  622. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  623. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
  624. package/docs/principles/actor-fidelity.md +4 -4
  625. package/docs/principles/engineering.md +3 -3
  626. package/docs/principles/invariants-and-defaults.md +38 -38
  627. package/docs/principles/self-driving-harness.md +1 -5
  628. package/docs/principles/three-roles.md +1 -1
  629. package/docs/product/automatic-analysis.md +8 -7
  630. package/examples/participant/README.md +5 -5
  631. package/examples/participant/run.mjs +11 -10
  632. package/examples/scorer/README.md +3 -3
  633. package/examples/scorer/run.mjs +11 -12
  634. package/package.json +16 -17
  635. package/skills/humanish/SKILL.md +63 -60
  636. package/skills/humanish/agents/openai.yaml +1 -1
  637. package/AGENTS.md +0 -99
  638. package/CONTRIBUTING.md +0 -148
  639. package/dist/actors/codex/qualified-versions.d.ts +0 -45
  640. package/dist/actors/codex/qualified-versions.js +0 -87
  641. package/dist/cli/commands/lab.d.ts +0 -3
  642. package/dist/cli/commands/lab.js +0 -193
  643. package/dist/deprecated.d.ts +0 -90
  644. package/dist/deprecated.js +0 -106
  645. package/dist/lab/bag-overrides.d.ts +0 -18
  646. package/dist/lab/bag-overrides.js +0 -121
  647. package/dist/observer/static.d.ts +0 -39
  648. package/dist/observer/static.js +0 -369
  649. package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
  650. package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
  651. package/docs/architecture/comms-inbox.md +0 -122
  652. package/docs/architecture/desktop-recording.md +0 -80
  653. package/docs/architecture/local-browser-runtime.md +0 -178
  654. package/docs/architecture/observer-review.md +0 -144
  655. package/docs/architecture/participant-media.md +0 -90
  656. package/docs/architecture/project-layout.md +0 -62
  657. package/docs/architecture/real-email-receiving.md +0 -136
  658. package/docs/assets/humanish-drawdb-hero.png +0 -0
  659. package/docs/assets/humanish-observer-hero.png +0 -0
  660. package/docs/goals/current.md +0 -207
  661. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  662. package/docs/product/open-source-install-experience.md +0 -240
  663. package/docs/ramp/README.md +0 -294
  664. package/docs/release/open-source-readiness.md +0 -222
  665. package/docs/release/public-readiness-standard.md +0 -210
  666. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  667. /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
  668. /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
@@ -1,106 +0,0 @@
1
- // The exports this minor deprecates and the next minor removes (docs/contracts/schemas.md,
2
- // "Library options"). Each function warns once per process and then runs unchanged. Each type is
3
- // an alias of the type it always was, and each constant has the value it always had. Internal code
4
- // calls the original functions, so only a package caller sees a warning.
5
- import { runCuaActorSession as cuaActorSession, } from "./actors/computer-use/actor.js";
6
- import { resolveLabDryRun as labDryRun } from "./lab/plan.js";
7
- import { actorResolvesToTerminal as resolvesToTerminal, cuaLaneCount as laneCount, MAX_CUA_LANES as laneCap, resolveSeatUrl as seatUrl, } from "./lab/routing.js";
8
- import { concurrentSharedWorldValidationReason as concurrentSharedWorldReason, cuaLaneValidationReason as laneRosterReason, externalPublicSharedWorldValidationReason as externalPublicSharedWorldReason, sharedWorldValidationReason as sharedWorldReason, } from "./lab/validation.js";
9
- import { runCuaActorLab as cuaActorLab } from "./routes/computer-use/route.js";
10
- import { runScriptedBrowserLab as scriptedBrowserLab } from "./routes/scripted/route.js";
11
- import { runConcurrentSharedWorld as concurrentSharedWorld } from "./routes/shared-world/route.js";
12
- import { runTerminalProductLab as terminalProductLab } from "./routes/terminal/route.js";
13
- import { runDryRun as dryRun } from "./run/dry-run.js";
14
- const warned = new Set();
15
- function deprecated(name, replacement) {
16
- if (warned.has(name))
17
- return;
18
- warned.add(name);
19
- process.emitWarning(`${name} is deprecated and is removed in the next minor. Use ${replacement}.`, { type: "DeprecationWarning", code: "HUMANISH_DEPRECATED_EXPORT" });
20
- }
21
- const RUN_LAB = "runLab(config, options); its result is LabResult<route>";
22
- /**
23
- * @deprecated Use `runComputerUseLoop` with `createOpenAiResponsesProvider({ singleDispatch: true })`,
24
- * the strict-spend composition in docs/contracts/schemas.md.
25
- */
26
- export function runCuaActorSession(options) {
27
- deprecated("runCuaActorSession", "runComputerUseLoop with createOpenAiResponsesProvider({ singleDispatch: true }) (the strict-spend composition in docs/contracts/schemas.md)");
28
- return cuaActorSession(options);
29
- }
30
- /** @deprecated Use `runLab(config, options)`; its result is `LabResult<"computer-use">`. */
31
- export function runCuaActorLab(options) {
32
- deprecated("runCuaActorLab", RUN_LAB);
33
- return cuaActorLab(options);
34
- }
35
- /** @deprecated Use `runLab(config, options)`; its result is `LabResult<"scripted">`. */
36
- export function runScriptedBrowserLab(options) {
37
- deprecated("runScriptedBrowserLab", RUN_LAB);
38
- return scriptedBrowserLab(options);
39
- }
40
- /** @deprecated Use `runLab(config, options)`; its result is `LabResult<"terminal">`. */
41
- export function runTerminalProductLab(options) {
42
- deprecated("runTerminalProductLab", RUN_LAB);
43
- return terminalProductLab(options);
44
- }
45
- /** @deprecated Use `runLab(config, options)`; its result is `LabResult<"shared-world">`. */
46
- export function runConcurrentSharedWorld(options) {
47
- deprecated("runConcurrentSharedWorld", RUN_LAB);
48
- return concurrentSharedWorld(options);
49
- }
50
- /** @deprecated Use `runLab(config, options)` on a `this-repo` lab; its result is `LabResult<"preview">`. */
51
- export function runDryRun(options) {
52
- deprecated("runDryRun", RUN_LAB);
53
- return dryRun(options);
54
- }
55
- const PARSE_REASON = "parseLabConfig, which returns the same reason";
56
- /** @deprecated Use `routeOf(config)` on the lab. This goes in the next minor. */
57
- export function actorResolvesToTerminal(type) {
58
- deprecated("actorResolvesToTerminal", "routeOf(config) on the lab");
59
- return resolvesToTerminal(type);
60
- }
61
- /**
62
- * @deprecated Use the `plan` `LabEvent` from `RunLabOptions.onEvent`, which lists every
63
- * participant. This goes in the next minor.
64
- */
65
- export function cuaLaneCount(config) {
66
- deprecated("cuaLaneCount", "the plan LabEvent from RunLabOptions.onEvent, which lists every participant");
67
- return laneCount(config);
68
- }
69
- /**
70
- * @deprecated Use `parseLabConfig`, which refuses a seat entry that is not same-origin loopback.
71
- * This goes in the next minor.
72
- */
73
- export function resolveSeatUrl(serveUrl, entry) {
74
- deprecated("resolveSeatUrl", "parseLabConfig, which refuses a participant entry that is not same-origin loopback");
75
- return seatUrl(serveUrl, entry);
76
- }
77
- /** @deprecated Use `parseLabConfig`, which returns the same reason. This goes in the next minor. */
78
- export function cuaLaneValidationReason(config) {
79
- deprecated("cuaLaneValidationReason", PARSE_REASON);
80
- return laneRosterReason(config);
81
- }
82
- /** @deprecated Use `parseLabConfig`, which returns the same reason. This goes in the next minor. */
83
- export function sharedWorldValidationReason(config) {
84
- deprecated("sharedWorldValidationReason", PARSE_REASON);
85
- return sharedWorldReason(config);
86
- }
87
- /** @deprecated Use `parseLabConfig`, which returns the same reason. This goes in the next minor. */
88
- export function concurrentSharedWorldValidationReason(config) {
89
- deprecated("concurrentSharedWorldValidationReason", PARSE_REASON);
90
- return concurrentSharedWorldReason(config);
91
- }
92
- /** @deprecated Use `parseLabConfig`, which returns the same reason. This goes in the next minor. */
93
- export function externalPublicSharedWorldValidationReason(config) {
94
- deprecated("externalPublicSharedWorldValidationReason", PARSE_REASON);
95
- return externalPublicSharedWorldReason(config);
96
- }
97
- /**
98
- * @deprecated Use `RunLabOptions.dryRun`; without it, `scenario.mode` decides. This goes in the
99
- * next minor.
100
- */
101
- export function resolveLabDryRun(config, override, fallback) {
102
- deprecated("resolveLabDryRun", "RunLabOptions.dryRun; without it, scenario.mode decides");
103
- return labDryRun(config, override, fallback);
104
- }
105
- /** @deprecated `parseLabConfig` refuses a roster larger than this. This goes in the next minor. */
106
- export const MAX_CUA_LANES = laneCap;
@@ -1,18 +0,0 @@
1
- /** The members each bag type declares, forwarded even when the bag does not enumerate them. */
2
- export declare const HOOK_MEMBERS: {
3
- readonly cua: string[];
4
- readonly sharedWorld: string[];
5
- readonly terminal: string[];
6
- readonly scripted: string[];
7
- readonly analysis: string[];
8
- };
9
- /**
10
- * The bag with `overrides` in place of its own members. Every other member becomes an enumerable
11
- * accessor that reads the bag when it is read, so a getter runs only then and a spread of the
12
- * result keeps every member. The members are the bag's own and inherited keys (string or symbol)
13
- * plus `declared`, the members its type declares, which a proxy-backed bag may answer without
14
- * listing. A function is bound to the bag, so its private fields still work. The overrides are
15
- * ordinary data properties. Declared members always appear as own properties (undefined when
16
- * unset), so code reading a wrapped bag tests the value, never `in`.
17
- */
18
- export declare function withHookOverrides<T extends object>(bag: T | undefined, declared: readonly string[], overrides: Partial<T>): T;
@@ -1,121 +0,0 @@
1
- // A caller's hook bag with some members replaced, without copying the bag's values. Spreading a
2
- // class instance keeps only its own properties, so a route that spreads a caller's bag loses the
3
- // class's methods; this builds a plain object that keeps them.
4
- // Every member each bag type declares. The record type makes the compiler reject a missing or
5
- // unknown name, so a member added to a bag type must be added here too.
6
- const cuaMembers = {
7
- prepareDesktop: true,
8
- onPreflight: true,
9
- onPhase: true,
10
- onRuntimeStreamReady: true,
11
- onRuntimeStreamEnded: true,
12
- loadDesktopModule: true,
13
- runSession: true,
14
- buildExecutor: true,
15
- buildProvider: true,
16
- createDesktopLane: true,
17
- env: true,
18
- renderObserverFn: true,
19
- now: true,
20
- detachedTimers: true,
21
- packLocalTree: true,
22
- score: true,
23
- deriveFeedback: true,
24
- deriveArtifacts: true,
25
- };
26
- const sharedWorldMembers = {
27
- loadDesktopModule: true,
28
- prepareDesktop: true,
29
- onRuntimeStreamReady: true,
30
- onRuntimeStreamEnded: true,
31
- runSession: true,
32
- env: true,
33
- renderObserverFn: true,
34
- detachedTimers: true,
35
- onPhase: true,
36
- now: true,
37
- proberCadenceMs: true,
38
- handoffDeadlineMs: true,
39
- readLobbyCodeFromFrame: true,
40
- packLocalTree: true,
41
- score: true,
42
- deriveFeedback: true,
43
- deriveArtifacts: true,
44
- };
45
- const terminalMembers = {
46
- loadModule: true,
47
- env: true,
48
- renderObserverFn: true,
49
- now: true,
50
- costProbe: true,
51
- score: true,
52
- deriveFeedback: true,
53
- };
54
- const scriptedMembers = {
55
- runSession: true,
56
- launchBrowser: true,
57
- env: true,
58
- loadDesktopModule: true,
59
- prepareDesktop: true,
60
- detachedTimers: true,
61
- browserCommand: true,
62
- renderObserverFn: true,
63
- now: true,
64
- };
65
- const analysisMembers = {
66
- deps: true,
67
- onStart: true,
68
- run: true,
69
- };
70
- /** The members each bag type declares, forwarded even when the bag does not enumerate them. */
71
- export const HOOK_MEMBERS = {
72
- cua: Object.keys(cuaMembers),
73
- sharedWorld: Object.keys(sharedWorldMembers),
74
- terminal: Object.keys(terminalMembers),
75
- scripted: Object.keys(scriptedMembers),
76
- analysis: Object.keys(analysisMembers),
77
- };
78
- /**
79
- * The bag with `overrides` in place of its own members. Every other member becomes an enumerable
80
- * accessor that reads the bag when it is read, so a getter runs only then and a spread of the
81
- * result keeps every member. The members are the bag's own and inherited keys (string or symbol)
82
- * plus `declared`, the members its type declares, which a proxy-backed bag may answer without
83
- * listing. A function is bound to the bag, so its private fields still work. The overrides are
84
- * ordinary data properties. Declared members always appear as own properties (undefined when
85
- * unset), so code reading a wrapped bag tests the value, never `in`.
86
- */
87
- export function withHookOverrides(bag, declared, overrides) {
88
- const forward = {};
89
- const replaced = new Set(Reflect.ownKeys(overrides));
90
- const forwardMember = (key) => {
91
- if (key === "constructor" || replaced.has(key) || Object.hasOwn(forward, key))
92
- return;
93
- Object.defineProperty(forward, key, {
94
- enumerable: true,
95
- configurable: true,
96
- get() {
97
- const value = Reflect.get(bag, key, bag);
98
- return typeof value === "function" ? value.bind(bag) : value;
99
- },
100
- set(value) {
101
- Reflect.set(bag, key, value, bag);
102
- },
103
- });
104
- };
105
- if (bag !== undefined) {
106
- for (let source = bag; source !== null && source !== Object.prototype; source = Object.getPrototypeOf(source))
107
- for (const key of Reflect.ownKeys(source))
108
- forwardMember(key);
109
- for (const key of declared)
110
- forwardMember(key);
111
- }
112
- for (const key of replaced) {
113
- Object.defineProperty(forward, key, {
114
- value: overrides[key],
115
- enumerable: true,
116
- configurable: true,
117
- writable: true,
118
- });
119
- }
120
- return forward;
121
- }
@@ -1,39 +0,0 @@
1
- import type { IncomingMessage, ServerResponse } from "node:http";
2
- export declare const OBSERVER_STATIC_HOST = "127.0.0.1";
3
- export interface ObserverStaticHandlerOptions {
4
- /** Directory served as the loopback root. Requests can never escape it. */
5
- root: string;
6
- /** File served for directory requests. Defaults to `index.html`. */
7
- indexPath?: string;
8
- /**
9
- * When set, an exact `/` request returns a 302 to `/<redirectRootTo>` instead
10
- * of serving a file. Used to land visitors on `observer/index.html` so the
11
- * Observer's relative artifact links (`../run.json`, ...) resolve.
12
- */
13
- redirectRootTo?: string;
14
- }
15
- export interface ObserverStaticServeOptions extends ObserverStaticHandlerOptions {
16
- /** TCP port to bind on 127.0.0.1. Defaults to an ephemeral port (0). */
17
- port?: number;
18
- /**
19
- * Relative entry page (e.g. `observer/index.html`). Drives the returned
20
- * `url` and the `/` -> entry redirect so callers open the page directly.
21
- */
22
- entryPath?: string;
23
- }
24
- export interface ObserverStaticServer {
25
- url: string;
26
- port: number;
27
- host: string;
28
- close(): Promise<void>;
29
- }
30
- export declare function observerStaticContentType(filePath: string): string;
31
- /**
32
- * Resolve, guard, and serve a single static request from `root`. Never throws:
33
- * any unexpected failure is reported as a 500 so the connection always closes.
34
- * Exported directly so the security guards can be unit-tested without binding a
35
- * socket.
36
- */
37
- export declare function respondToObserverStaticRequest(options: ObserverStaticHandlerOptions, request: Pick<IncomingMessage, "method" | "url">, response: ServerResponse): Promise<void>;
38
- export declare function createObserverStaticHandler(options: ObserverStaticHandlerOptions): (request: IncomingMessage, response: ServerResponse) => void;
39
- export declare function serveObserverStatic(options: ObserverStaticServeOptions): Promise<ObserverStaticServer>;
@@ -1,369 +0,0 @@
1
- import { constants as fsConstants } from "node:fs";
2
- import { createServer } from "node:http";
3
- import { lstat, open, realpath } from "node:fs/promises";
4
- import path from "node:path";
5
- import { buildArtifactSecurityHeaders } from "./http.js";
6
- // Loopback-only host for the Observer static server. We never bind 0.0.0.0:
7
- // the Observer surfaces local run evidence and must stay reachable only from
8
- // the machine that owns the run bundle.
9
- export const OBSERVER_STATIC_HOST = "127.0.0.1";
10
- // Minimal extension -> content-type map. Kept dependency-free (no `mime`
11
- // package) because the Observer ships a small, known set of asset kinds.
12
- const CONTENT_TYPES = {
13
- ".html": "text/html; charset=utf-8",
14
- ".htm": "text/html; charset=utf-8",
15
- ".js": "text/javascript; charset=utf-8",
16
- ".mjs": "text/javascript; charset=utf-8",
17
- ".css": "text/css; charset=utf-8",
18
- ".json": "application/json; charset=utf-8",
19
- ".map": "application/json; charset=utf-8",
20
- ".svg": "image/svg+xml",
21
- ".png": "image/png",
22
- ".jpg": "image/jpeg",
23
- ".jpeg": "image/jpeg",
24
- ".webp": "image/webp",
25
- ".gif": "image/gif",
26
- ".ico": "image/x-icon",
27
- ".md": "text/markdown; charset=utf-8",
28
- ".ndjson": "application/x-ndjson; charset=utf-8",
29
- ".txt": "text/plain; charset=utf-8",
30
- ".woff": "font/woff",
31
- ".woff2": "font/woff2",
32
- };
33
- export function observerStaticContentType(filePath) {
34
- return CONTENT_TYPES[path.extname(filePath).toLowerCase()] ?? "application/octet-stream";
35
- }
36
- /**
37
- * Resolve, guard, and serve a single static request from `root`. Never throws:
38
- * any unexpected failure is reported as a 500 so the connection always closes.
39
- * Exported directly so the security guards can be unit-tested without binding a
40
- * socket.
41
- */
42
- export async function respondToObserverStaticRequest(options, request, response) {
43
- applySecurityHeaders(response);
44
- try {
45
- const root = await pinStaticRoot(options.root);
46
- await respondToPinnedObserverStaticRequest(root, options, request, response);
47
- }
48
- catch {
49
- if (response.headersSent) {
50
- response.end();
51
- return;
52
- }
53
- writeText(response, 500, "Observer request failed");
54
- }
55
- }
56
- async function respondToPinnedObserverStaticRequest(root, options, request, response) {
57
- applySecurityHeaders(response);
58
- const indexRelative = options.indexPath ?? "index.html";
59
- try {
60
- await assertPinnedStaticRoot(root);
61
- const method = request.method ?? "GET";
62
- if (method !== "GET" && method !== "HEAD") {
63
- writeText(response, 405, "Method Not Allowed");
64
- return;
65
- }
66
- let pathname;
67
- try {
68
- pathname = new URL(request.url ?? "/", `http://${OBSERVER_STATIC_HOST}`).pathname;
69
- }
70
- catch {
71
- writeText(response, 400, "Bad Request");
72
- return;
73
- }
74
- if (pathname === "/" && options.redirectRootTo) {
75
- const location = `/${options.redirectRootTo.replace(/^\/+/, "")}`;
76
- response.writeHead(302, {
77
- location,
78
- "cache-control": "no-store",
79
- "content-length": "0",
80
- });
81
- response.end();
82
- return;
83
- }
84
- let decoded;
85
- try {
86
- decoded = decodeURIComponent(pathname);
87
- }
88
- catch {
89
- writeText(response, 400, "Bad Request");
90
- return;
91
- }
92
- // Reject embedded NUL bytes outright rather than letting them reach the fs.
93
- if (decoded.includes("\0")) {
94
- writeText(response, 400, "Bad Request");
95
- return;
96
- }
97
- let relative = decoded.replace(/^\/+/, "");
98
- if (relative === "" || relative.endsWith("/")) {
99
- relative = `${relative}${indexRelative}`;
100
- }
101
- const target = path.resolve(root.physicalPath, relative);
102
- if (!isPathInside(root.physicalPath, target)) {
103
- writeText(response, 403, "Forbidden");
104
- return;
105
- }
106
- let info;
107
- try {
108
- info = await lstat(target);
109
- }
110
- catch {
111
- writeText(response, 404, "Not Found");
112
- return;
113
- }
114
- if (info.isSymbolicLink()) {
115
- writeText(response, 403, "Forbidden");
116
- return;
117
- }
118
- let filePath = target;
119
- if (info.isDirectory()) {
120
- filePath = path.resolve(target, indexRelative);
121
- if (!isPathInside(root.physicalPath, filePath)) {
122
- writeText(response, 403, "Forbidden");
123
- return;
124
- }
125
- }
126
- const rawBody = await readContainedRegularFile(root, filePath);
127
- const body = rawBody ? recordedObserverStaticBody(filePath, rawBody) : null;
128
- if (!body) {
129
- writeText(response, 404, "Not Found");
130
- return;
131
- }
132
- response.writeHead(200, {
133
- "cache-control": "no-store",
134
- "content-type": observerStaticContentType(filePath),
135
- "content-length": String(body.byteLength),
136
- });
137
- if (method === "HEAD") {
138
- response.end();
139
- return;
140
- }
141
- response.end(body);
142
- }
143
- catch {
144
- if (response.headersSent) {
145
- response.end();
146
- return;
147
- }
148
- writeText(response, 500, "Observer request failed");
149
- }
150
- }
151
- function applySecurityHeaders(response) {
152
- for (const [name, value] of Object.entries(buildArtifactSecurityHeaders()))
153
- response.setHeader(name, value);
154
- }
155
- /** Static serving is recorded evidence. Neither JSON files nor inline HTML snapshots
156
- * can carry a live process observation or grant provider-origin access. */
157
- function recordedObserverStaticBody(filePath, body) {
158
- const strip = (text) => {
159
- try {
160
- const data = JSON.parse(text);
161
- if (!data ||
162
- typeof data !== "object" ||
163
- Array.isArray(data) ||
164
- data.schema !== "humanish.observer-data.v1")
165
- return null;
166
- const projection = data;
167
- delete projection.runtime;
168
- if (Array.isArray(projection.streams)) {
169
- for (const stream of projection.streams) {
170
- if (!stream || typeof stream !== "object" || Array.isArray(stream))
171
- continue;
172
- const embed = stream.embed;
173
- if (embed && typeof embed === "object" && !Array.isArray(embed))
174
- delete embed.runtimeDesktop;
175
- }
176
- }
177
- return JSON.stringify(projection)
178
- .replace(/</g, "\\u003c")
179
- .replace(/>/g, "\\u003e")
180
- .replace(/&/g, "\\u0026");
181
- }
182
- catch {
183
- return null;
184
- }
185
- };
186
- if (path.basename(filePath) === "observer-data.json") {
187
- const stripped = strip(body.toString("utf8"));
188
- return stripped === null ? body : Buffer.from(stripped);
189
- }
190
- if (/\.html?$/i.test(filePath)) {
191
- const html = body.toString("utf8");
192
- // Identify Observer JSON by its schema, not an attribute spelling: HTML permits
193
- // encoded ids and '>' inside quoted attributes. Other scripts remain byte-identical.
194
- const sanitized = html.replace(/(<script\b(?:[^>"']|"[^"]*"|'[^']*')*>)([\s\S]*?)(<\/script\s*>)/gi, (match, start, json, end) => {
195
- const stripped = strip(json);
196
- return stripped === null ? match : `${start}${stripped}${end}`;
197
- });
198
- return sanitized === html ? body : Buffer.from(sanitized);
199
- }
200
- return body;
201
- }
202
- async function readContainedRegularFile(root, filePathInput) {
203
- const filePath = path.resolve(filePathInput);
204
- if (!isPathInside(root.physicalPath, filePath))
205
- return null;
206
- try {
207
- await assertPinnedStaticRoot(root);
208
- const expectedStats = await inspectContainedStaticFile(root, filePath);
209
- if (!expectedStats) {
210
- return null;
211
- }
212
- const handle = await open(filePath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
213
- try {
214
- const openedStats = await handle.stat({ bigint: true });
215
- if (!openedStats.isFile() ||
216
- openedStats.nlink !== 1n ||
217
- openedStats.dev !== expectedStats.dev ||
218
- openedStats.ino !== expectedStats.ino) {
219
- return null;
220
- }
221
- const recheckedStats = await inspectContainedStaticFile(root, filePath);
222
- if (!recheckedStats ||
223
- recheckedStats.dev !== expectedStats.dev ||
224
- recheckedStats.ino !== expectedStats.ino) {
225
- return null;
226
- }
227
- await assertPinnedStaticRoot(root);
228
- const body = await handle.readFile();
229
- await assertPinnedStaticRoot(root);
230
- return body;
231
- }
232
- finally {
233
- await handle.close();
234
- }
235
- }
236
- catch {
237
- return null;
238
- }
239
- }
240
- export function createObserverStaticHandler(options) {
241
- let rootPromise;
242
- return (request, response) => {
243
- applySecurityHeaders(response);
244
- rootPromise ??= pinStaticRoot(options.root);
245
- void rootPromise
246
- .then((root) => respondToPinnedObserverStaticRequest(root, options, request, response))
247
- .catch(() => {
248
- if (response.headersSent) {
249
- response.end();
250
- return;
251
- }
252
- writeText(response, 500, "Observer request failed");
253
- });
254
- };
255
- }
256
- export async function serveObserverStatic(options) {
257
- const entryPath = options.entryPath?.replace(/^\/+/, "") ?? "";
258
- const handlerOptions = {
259
- root: options.root,
260
- ...(options.indexPath === undefined ? {} : { indexPath: options.indexPath }),
261
- ...(entryPath ? { redirectRootTo: entryPath } : {}),
262
- };
263
- const root = await pinStaticRoot(options.root);
264
- const handler = (request, response) => {
265
- void respondToPinnedObserverStaticRequest(root, handlerOptions, request, response);
266
- };
267
- const server = createServer(handler);
268
- const port = await listen(server, options.port ?? 0);
269
- return {
270
- url: `http://${OBSERVER_STATIC_HOST}:${port}/${entryPath}`,
271
- port,
272
- host: OBSERVER_STATIC_HOST,
273
- close: () => closeServer(server),
274
- };
275
- }
276
- function writeText(response, status, message) {
277
- const body = `${message}\n`;
278
- response.writeHead(status, {
279
- "cache-control": "no-store",
280
- "content-type": "text/plain; charset=utf-8",
281
- "content-length": String(Buffer.byteLength(body)),
282
- });
283
- response.end(body);
284
- }
285
- function isPathInside(root, candidate) {
286
- const relative = path.relative(root, candidate);
287
- return (relative === "" ||
288
- (relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative)));
289
- }
290
- async function inspectContainedStaticFile(root, filePath) {
291
- const relative = path.relative(root.physicalPath, filePath);
292
- if (!relative ||
293
- relative === ".." ||
294
- relative.startsWith(`..${path.sep}`) ||
295
- path.isAbsolute(relative)) {
296
- return null;
297
- }
298
- const segments = relative.split(path.sep).filter(Boolean);
299
- let current = root.physicalPath;
300
- let fileIdentity = null;
301
- for (const [index, segment] of segments.entries()) {
302
- current = path.join(current, segment);
303
- const stats = await lstat(current, { bigint: true });
304
- if (stats.isSymbolicLink())
305
- return null;
306
- if (index < segments.length - 1) {
307
- if (!stats.isDirectory())
308
- return null;
309
- }
310
- else {
311
- if (!stats.isFile() || stats.nlink !== 1n)
312
- return null;
313
- fileIdentity = { dev: stats.dev, ino: stats.ino };
314
- }
315
- }
316
- if ((await realpath(filePath)) !== filePath)
317
- return null;
318
- return fileIdentity;
319
- }
320
- async function pinStaticRoot(rootInput) {
321
- const physicalPath = await realpath(path.resolve(rootInput));
322
- const stats = await lstat(physicalPath, { bigint: true });
323
- if (stats.isSymbolicLink() || !stats.isDirectory()) {
324
- throw new Error("Observer static roots must be physical directories.");
325
- }
326
- return Object.freeze({
327
- birthtimeNs: stats.birthtimeNs,
328
- dev: stats.dev,
329
- ino: stats.ino,
330
- physicalPath,
331
- });
332
- }
333
- async function assertPinnedStaticRoot(root) {
334
- const stats = await lstat(root.physicalPath, { bigint: true });
335
- if (stats.isSymbolicLink() ||
336
- !stats.isDirectory() ||
337
- stats.birthtimeNs !== root.birthtimeNs ||
338
- stats.dev !== root.dev ||
339
- stats.ino !== root.ino ||
340
- (await realpath(root.physicalPath)) !== root.physicalPath) {
341
- throw new Error("Observer static root identity changed.");
342
- }
343
- }
344
- function listen(server, port) {
345
- return new Promise((resolve, reject) => {
346
- server.once("error", reject);
347
- server.listen(port, OBSERVER_STATIC_HOST, () => {
348
- server.off("error", reject);
349
- const address = server.address();
350
- if (!address || typeof address === "string") {
351
- reject(new Error("Observer static server did not bind to a TCP port."));
352
- return;
353
- }
354
- resolve(address.port);
355
- });
356
- });
357
- }
358
- function closeServer(server) {
359
- return new Promise((resolve, reject) => {
360
- server.close((error) => {
361
- if (error) {
362
- reject(error);
363
- }
364
- else {
365
- resolve();
366
- }
367
- });
368
- });
369
- }