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
package/TELEMETRY.md CHANGED
@@ -6,26 +6,28 @@ disclosed the first time it happens, and you can switch it off in one command.
6
6
 
7
7
  This follows the convention the Next.js and Vercel CLIs established, with one
8
8
  difference: humanish is stricter about what may be collected, because a study's
9
- subject is your product and a lab id can name something you have not announced.
9
+ subject is your product and a study id can name something you have not announced.
10
10
 
11
11
  ## Why
12
12
 
13
13
  humanish shipped sixty-one releases without being able to answer _"does anyone
14
14
  get to a working first run?"_. The answer, when it finally arrived, came from an
15
15
  adoption post-mortem: the first live run had been impossible for months, because
16
- the starter labs shipped with a placeholder URL. Nobody reported it. Without
16
+ the starter studies shipped with a placeholder URL. Nobody reported it. Without
17
17
  telemetry, humanish cannot tell whether new users reach a working first run.
18
18
 
19
19
  ## What is collected
20
20
 
21
- - which command ran (`run`, `lab run`, `init`, …)
21
+ - which command ran (`run`, `init`, …)
22
22
  - the humanish version, your OS, your Node major version, whether you are in CI
23
23
  - whether the command succeeded (its exit code), and roughly how long it took
24
24
  (a bucket such as `1-5m`, never an exact duration)
25
25
  - for a study: whether it was a dry run or live, its outcome (one of a fixed
26
26
  set of words such as `passed`, `abandoned`, `all_passed`), which brain route
27
- ran it (`provider-key`, `local-agent`, or `none` for a dry run), and which lab
28
- ran, **only if it is one of the starter labs `humanish init` writes**
27
+ ran it (`provider-key`, `local-agent`, or `none` for a dry run), and which study
28
+ ran, **only if it is one of the starter studies `humanish init` writes**. That id is sent as
29
+ `study`, and also as `lab` (the property's earlier name) with the same value until 0.109.0
30
+ removes `lab`
29
31
  - when a command fails: humanish's own error code (`HUMANISH_…`), never the
30
32
  message. Which failure ends a first run is the question this exists to answer.
31
33
  - for CUA results with diagnostics: `diagnostic_category` is exactly one of
@@ -58,7 +60,7 @@ HUMANISH_TELEMETRY_DEBUG=1 humanish run first-run
58
60
 
59
61
  ## What is never collected
60
62
 
61
- Your own lab ids and titles. Your subjects: repos, URLs, app names. Personas,
63
+ Your own study ids and titles. Your subjects: repos, URLs, app names. Personas,
62
64
  missions, or any prompt text. Paths, working directories, hostnames, usernames.
63
65
  Run ids, evidence, screenshots, traces. Credential names or values. There is no
64
66
  field in the payload that could carry any of these. `src/cli/telemetry.ts` enforces
@@ -6,7 +6,7 @@ export declare const AFFORDANCE_CLASS_SCHEMA = "humanish.affordance-use.v1";
6
6
  * direct navigation, "shortcut" (MAS-Bench) for a non-UI route to the same outcome.
7
7
  */
8
8
  export type AffordanceClass =
9
- /** Pointer or drag interaction with what is rendered on screen — the naturalistic core. */
9
+ /** Pointer or drag interaction with what is rendered on screen: the naturalistic core. */
10
10
  "pointer"
11
11
  /** Keyboard input into the page: typed text that is not a URL and not script. */
12
12
  | "keyboard"
@@ -32,7 +32,7 @@ export declare const SHORTCUT_AFFORDANCE_CLASSES: readonly AffordanceClass[];
32
32
  export interface AffordanceObservation {
33
33
  affordance: AffordanceClass;
34
34
  /**
35
- * A public-safe hint about WHY this class was assigned, when one exists — a URL scheme or the
35
+ * A public-safe hint about why this class was assigned, when one exists: a URL scheme or the
36
36
  * devtools chord. Never the typed text, never a full URL (which can carry a session token).
37
37
  */
38
38
  signal?: string;
@@ -40,7 +40,7 @@ export interface AffordanceObservation {
40
40
  /** Aggregate per-run record: how many actions fell into each class. */
41
41
  export interface AffordanceUse {
42
42
  schema: typeof AFFORDANCE_CLASS_SCHEMA;
43
- /** Counts by class; a class with zero actions is omitted so the record stays small and honest. */
43
+ /** Counts by class. A class with zero actions is omitted, so every listed class was used. */
44
44
  counts: Partial<Record<AffordanceClass, number>>;
45
45
  /** Total classified actions (the denominator for any rate an adopter computes). */
46
46
  total: number;
@@ -48,7 +48,7 @@ export interface AffordanceUse {
48
48
  shortcutTotal: number;
49
49
  }
50
50
  /**
51
- * Classify one computer-use action. PURE: same action in, same class out, no I/O, no clock. The
51
+ * Classify one computer-use action. Pure: same action in, same class out, no I/O, no clock. The
52
52
  * returned signal is public-safe (a scheme or a chord), never the action's text.
53
53
  */
54
54
  export declare function classifyCuaAction(action: CuaAction): AffordanceObservation;
@@ -1,25 +1,25 @@
1
- // Affordance classification (#369): WHICH KIND of route an actor took to accomplish a step.
1
+ // Affordance classification: which kind of route an actor took to accomplish a step.
2
2
  //
3
3
  // Why this exists. A computer-use actor in a human-persona study typed a `javascript:` URL into
4
4
  // the address bar to get past a step, and the run finished green: the actor routed around the
5
5
  // friction the study existed to measure, and nothing in the evidence said so. Whether that is a
6
- // defect depends on a question the bundle never recorded — who is this study's user? For a human
7
- // population it invalidates the run; for an agent-facing product whose users ARE agents the same
6
+ // defect depends on a question the bundle never recorded: who is this study's user? For a human
7
+ // population it invalidates the run; for an agent-facing product whose users are agents the same
8
8
  // act is faithful, and the fact the agent reached for it is itself a finding about how legible
9
- // the surface is. So the harness records the class and bakes NO verdict: the adopter's scorer
9
+ // the surface is. So the harness records the class and bakes no verdict: the adopter's scorer
10
10
  // (review.scorer.ref) decides what it means, because that judgment is product semantics.
11
11
  //
12
12
  // Two design facts drive the shape:
13
13
  //
14
- // 1. The computer-use action space is mouse + keyboard only — there is no `goto` action. Typing a
15
- // URL is a `type` action whose TEXT happens to be a URL, and typing script is a `type` action
14
+ // 1. The computer-use action space is mouse + keyboard only; there is no `goto` action. Typing a
15
+ // URL is a `type` action whose text happens to be a URL, and typing script is a `type` action
16
16
  // whose text happens to start with `javascript:`. Classification therefore has to look at the
17
17
  // typed text, which exists only at dispatch time.
18
18
  // 2. Raw typed text is never persisted (describeCuaAction deliberately renders `type [N chars]`),
19
- // so this module returns a CLASS and at most a scheme-shaped signal — never the text. The
19
+ // so this module returns a class and at most a scheme-shaped signal, never the text. The
20
20
  // class is public-safe by construction.
21
21
  //
22
- // Direct URL navigation is deliberately its own class and NOT lumped with script execution:
22
+ // Direct URL navigation is deliberately its own class, separate from script execution:
23
23
  // `load(url)` appears in 99.4% of 2,337 real human web demonstrations (WebLINX), so address-bar
24
24
  // use is ordinary human behavior. The anomalous classes are script execution and developer
25
25
  // tooling. See docs/principles/actor-fidelity.md for the evidence and the scoping of the claim.
@@ -61,7 +61,7 @@ const DEVTOOLS_CHORDS = new Set([
61
61
  "meta+alt+c",
62
62
  ]);
63
63
  /**
64
- * Classify one computer-use action. PURE: same action in, same class out, no I/O, no clock. The
64
+ * Classify one computer-use action. Pure: same action in, same class out, no I/O, no clock. The
65
65
  * returned signal is public-safe (a scheme or a chord), never the action's text.
66
66
  */
67
67
  export function classifyCuaAction(action) {
@@ -95,7 +95,7 @@ export function classifyCuaAction(action) {
95
95
  return { affordance: "browser-internal", signal: schemeOf(text) };
96
96
  }
97
97
  if (HTTP_URL.test(text)) {
98
- // Scheme only — a full URL can carry a session token or an identifying path.
98
+ // Scheme only: a full URL can carry a session token or an identifying path.
99
99
  return { affordance: "url-navigation", signal: schemeOf(text) };
100
100
  }
101
101
  if (BARE_HOST.test(text)) {
@@ -113,7 +113,7 @@ export function classifyCuaAction(action) {
113
113
  }
114
114
  /**
115
115
  * Normalize a key chord so the same physical shortcut matches however a provider spells it:
116
- * `Control`/`ctrl`, `Meta`/`Command`/`cmd`, `Option`/`alt` all collapse, and modifier ORDER is
116
+ * `Control`/`ctrl`, `Meta`/`Command`/`cmd`, `Option`/`alt` all collapse, and modifier order is
117
117
  * normalized so ["Shift","Control","J"] and ["Control","Shift","J"] are one chord.
118
118
  */
119
119
  function normalizeChord(keys) {
@@ -138,7 +138,7 @@ function normalizeChord(keys) {
138
138
  const rest = parts.filter((part) => !order.includes(part));
139
139
  return [...modifiers, ...rest].join("+");
140
140
  }
141
- /** The scheme alone, lowercased — never the rest of a URL, which can carry a session token. */
141
+ /** The scheme alone, lowercased; never the rest of a URL, which can carry a session token. */
142
142
  function schemeOf(text) {
143
143
  const trimmed = text.trim();
144
144
  const colon = trimmed.indexOf(":");
@@ -1,11 +1,11 @@
1
1
  export interface AgentSession {
2
2
  /** Human-readable runner name, for the refusal message. */
3
3
  runner: string;
4
- /** The environment variable that identified it — named so the reader can check us. */
4
+ /** The environment variable that identified it, named so the reader can check us. */
5
5
  marker: string;
6
6
  }
7
7
  /**
8
8
  * The agent runner driving this process, when one identifies itself. `undefined` means nothing
9
- * claimed to be an agent — which is NOT proof a person is there, only the absence of a claim.
9
+ * claimed to be an agent, which is not proof a person is there, only the absence of a claim.
10
10
  */
11
11
  export declare function detectAgentSession(env?: NodeJS.ProcessEnv): AgentSession | undefined;
@@ -1,19 +1,19 @@
1
- // Is the terminal on the other end of this process a PERSON's, or an agent's?
1
+ // Is the terminal on the other end of this process a person's, or an agent's?
2
2
  //
3
- // WHY THIS EXISTS: `humanish tui` refused a non-TTY, on the reasoning that an agent driving an
3
+ // Why this exists: `humanish tui` refused a non-TTY, on the reasoning that an agent driving an
4
4
  // interactive surface has asked for something that cannot exist. A study of that refusal
5
5
  // (labs/handed-a-human-surface.yaml) found it never fires: `codex exec` allocates a PTY for the
6
- // commands it runs, so both streams ARE terminals. The TUI launched, the agent navigated the labs
7
- // list, opened one, and — its own words — "accidentally triggered a zero-cost dry run while
6
+ // commands it runs, so both streams are terminals. The TUI launched, the agent navigated the labs
7
+ // list, opened one, and (in its own words) "accidentally triggered a zero-cost dry run while
8
8
  // navigating". A stray Enter on a live row is the same two keystrokes as a deliberate one.
9
9
  //
10
10
  // So a TTY is a real answer to the wrong question. It says a terminal exists; it does not say
11
11
  // anyone is reading it. Agent runners announce themselves in the environment, which is the only
12
12
  // signal available before the first keystroke, and is what `is-in-ci` has always done for CI.
13
13
  //
14
- // EVERY MARKER BELOW WAS OBSERVED, not guessed. Two runtimes are covered because two are what we
14
+ // Every marker below was observed, not guessed. Two runtimes are covered because two are what we
15
15
  // could verify: Claude Code (read off a live session) and Codex (read off the study sandbox, by a
16
- // names-only `env | cut -d= -f1` probe that never touched a value). Others certainly exist — add
16
+ // names-only `env | cut -d= -f1` probe that never touched a value). Others certainly exist; add
17
17
  // them the same way, from a real session, rather than from a plausible-looking guess. A marker
18
18
  // that is wrong refuses a person for no reason.
19
19
  const MARKERS = [
@@ -27,7 +27,7 @@ const MARKERS = [
27
27
  ];
28
28
  /**
29
29
  * The agent runner driving this process, when one identifies itself. `undefined` means nothing
30
- * claimed to be an agent — which is NOT proof a person is there, only the absence of a claim.
30
+ * claimed to be an agent, which is not proof a person is there, only the absence of a claim.
31
31
  */
32
32
  export function detectAgentSession(env = process.env) {
33
33
  for (const { marker, runner } of MARKERS) {
@@ -5,7 +5,7 @@ export declare function codexStatusToCompletionReason(status: CodexAppServerStat
5
5
  /**
6
6
  * Map a Codex app-server run result into the provider-neutral ActorTrace. Pure
7
7
  * and side-effect-free. The persona reference is supplied by the harness; until
8
- * personas are load-bearing it is a minimal stub ({ id, traitsApplied: [],
8
+ * the Codex route uses personas it is a minimal stub ({ id, traitsApplied: [],
9
9
  * promptDigest }).
10
10
  */
11
11
  export declare function codexResultToActorTrace(result: CodexAppServerRunResult, persona: ActorPersonaRef): ActorTrace;
@@ -173,7 +173,7 @@ function codexTraceToActorItems(trace) {
173
173
  /**
174
174
  * Map a Codex app-server run result into the provider-neutral ActorTrace. Pure
175
175
  * and side-effect-free. The persona reference is supplied by the harness; until
176
- * personas are load-bearing it is a minimal stub ({ id, traitsApplied: [],
176
+ * the Codex route uses personas it is a minimal stub ({ id, traitsApplied: [],
177
177
  * promptDigest }).
178
178
  */
179
179
  export function codexResultToActorTrace(result, persona) {
@@ -1,6 +1,7 @@
1
1
  import readline from "node:readline";
2
2
  import { redactText } from "../../evidence/redaction.js";
3
- import { formatJsonRpcError, isRecord, } from "./app-server-trace.js";
3
+ import { isRecord } from "../../run/type-guards.js";
4
+ import { formatJsonRpcError } from "./app-server-trace.js";
4
5
  export class CodexStdioClient {
5
6
  child;
6
7
  commandName;
@@ -150,5 +150,4 @@ export declare function renderTranscript(trace: CodexAppServerTrace): string;
150
150
  export declare function readNestedString(value: unknown, pathParts: string[]): string | undefined;
151
151
  export declare function formatJsonRpcError(error: JsonObject): string;
152
152
  export declare function redactCodexEnvelope(value: unknown, rootCwd: string): unknown;
153
- export declare function isRecord(value: unknown): value is JsonObject;
154
153
  export {};
@@ -1,6 +1,7 @@
1
1
  // The trace a codex-app-server run writes (summary.json): its schema, the recorder that builds it
2
2
  // from app-server envelopes, and the redaction applied before anything is persisted.
3
3
  import { digestText, publicPathForTrace, redactText, tailText } from "../../evidence/redaction.js";
4
+ import { isRecord } from "../../run/type-guards.js";
4
5
  export const CODEX_APP_SERVER_TRACE_SCHEMA = "humanish.codex-app-server-trace.v1";
5
6
  const authLikeKey = /(api[_-]?key|access[_-]?token|auth[_-]?url|authorization|bearer|credential|password|secret|token)$/i;
6
7
  const pathLikeKey = /^(cwd|path|writableRoots|workspaceRoot)$/i;
@@ -419,6 +420,3 @@ function limitTranscript(value) {
419
420
  }
420
421
  return `[...sanitized transcript truncated to last ${maxChars} characters...]\n${value.slice(-maxChars)}`;
421
422
  }
422
- export function isRecord(value) {
423
- return typeof value === "object" && value !== null && !Array.isArray(value);
424
- }
@@ -242,7 +242,7 @@ function renderCodexAppServerUiHtml() {
242
242
  <h1>Codex App-Server Actor</h1>
243
243
  <p id="subtitle">Connecting to humanish state...</p>
244
244
  </div>
245
- <div class="pill" id="status" data-status="starting">STARTING</div>
245
+ <div class="pill" id="status" data-status="starting">starting</div>
246
246
  </header>
247
247
  <main>
248
248
  <aside>
@@ -2,8 +2,9 @@ import { spawn } from "node:child_process";
2
2
  import path from "node:path";
3
3
  import { digestText, tailText } from "../../evidence/redaction.js";
4
4
  import { prepareContainedOutputDirectory, prepareContainedOutputFile, prepareSelectedOutputDirectory, writeContainedOutputFile, } from "../../run/contained-output.js";
5
+ import { isRecord } from "../../run/type-guards.js";
5
6
  import { CodexStdioClient } from "./app-server-client.js";
6
- import { CodexTraceRecorder, isRecord, readNestedString, redactCodexEnvelope, renderTranscript, } from "./app-server-trace.js";
7
+ import { CodexTraceRecorder, readNestedString, redactCodexEnvelope, renderTranscript, } from "./app-server-trace.js";
7
8
  export async function runCodexAppServerSession(options) {
8
9
  const preparedRunRoot = await prepareSelectedOutputDirectory(process.cwd(), options.runRoot);
9
10
  return runCodexAppServerSessionInPreparedRoot(options, preparedRunRoot);
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Which Codex CLI releases the restricted launcher starts: every stable `MAJOR.MINOR.PATCH`
3
+ * release from RECORDED_CODEX_CLI_FLOOR (0.154.0, the oldest known to work) on, except the
4
+ * refused ones. There is no ceiling, so a new release runs the day it ships; a release that breaks
5
+ * humanish is a bug, fixed by refusing it here until humanish handles it. Saved bundles read any
6
+ * stable release from the same floor, refused or not (src/actors/contract.ts).
7
+ *
8
+ * A release string is a compatibility check, not binary attestation: the launcher compares what
9
+ * `codex --version`, initialize and thread start report, and a modified binary can report any
10
+ * of them. Each launch also checks the release's app-server schema (protocol-compat.ts).
11
+ */
12
+ export declare const REFUSED_CODEX_CLI_VERSIONS: readonly {
13
+ readonly version: string;
14
+ readonly reason: string;
15
+ readonly issue: string;
16
+ }[];
17
+ /**
18
+ * Releases `pnpm codex:qualify` passed on Linux x64, oldest first. They gate nothing: the newest is
19
+ * the default a declaration names before detection, the install target and the "last tested"
20
+ * hint, and the list is the qualifier's baseline.
21
+ */
22
+ export declare const TESTED_CODEX_CLI_VERSIONS: readonly ["0.154.0", "0.157.1", "0.159.2", "0.159.3", "0.160.0"];
23
+ /**
24
+ * The run warning for a hosted (operator-mode) participant on a release not in
25
+ * TESTED_CODEX_CLI_VERSIONS, or undefined. No qualifier ran that release in operator mode, so its
26
+ * evidence rests on what each launch checks (open-admission design, answer C).
27
+ */
28
+ export declare function untestedOperatorReleaseWarning(cliVersion: string | undefined, operator: boolean): string | undefined;
29
+ /** Why the launcher refuses a release, or undefined when it starts it. */
30
+ export type CodexCliRefusal = {
31
+ readonly reason: "unrecognized";
32
+ } | {
33
+ readonly reason: "prerelease" | "below_floor";
34
+ readonly version: string;
35
+ } | {
36
+ readonly reason: "refused";
37
+ readonly version: string;
38
+ readonly detail: string;
39
+ readonly issue: string;
40
+ };
41
+ /**
42
+ * Why the launcher refuses a release: not a plain `MAJOR.MINOR.PATCH` (or longer than the 64
43
+ * characters parseCodexCliVersion reads), a prerelease (`-` after the core), older than the floor,
44
+ * or refused.
45
+ */
46
+ export declare function codexCliRefusal(version: string | undefined): CodexCliRefusal | undefined;
47
+ /** Whether the launcher starts this release. */
48
+ export declare const admitsCodexCliVersion: (version: string) => boolean;
49
+ /**
50
+ * Hosts where isolated launches run (the Codex-account analyst and local-browser participants).
51
+ * Operator launches run on every host with a native npm build (restrictedCodexNpmTarget).
52
+ */
53
+ export declare const supportsIsolatedCodex: (platform: NodeJS.Platform, arch: string) => boolean;
54
+ /** What a declaration names before the installed CLI is detected: the newest tested release. */
55
+ export declare function defaultCodexCliVersion(): string;
56
+ /** The version from `codex --version` output (`codex-cli 0.157.1`); any other shape is undefined. */
57
+ export declare function parseCodexCliVersion(stdout: string): string | undefined;
58
+ /**
59
+ * doctor's recovery for a refused CLI: the release it found and where, why it is refused, and how
60
+ * to replace that binary with the last tested release.
61
+ */
62
+ export declare function codexVersionRecovery(detected: string | undefined, installation?: CodexInstallation): string;
63
+ /**
64
+ * Where the `codex` humanish found was installed, which decides the command that replaces it.
65
+ * `path` is the file on `PATH`.
66
+ */
67
+ export type CodexInstallation = {
68
+ readonly kind: "project";
69
+ readonly path: string;
70
+ readonly project: string;
71
+ } | {
72
+ readonly kind: "global";
73
+ readonly path: string;
74
+ } | {
75
+ readonly kind: "other";
76
+ readonly path: string;
77
+ };
78
+ /**
79
+ * Classifies the `codex` on `PATH` by the file it resolves to. A project's node_modules/.bin/codex
80
+ * resolving into that project's @openai/codex is project-local, so `npx` runs it before any global
81
+ * install. One inside npm's global prefix (`npm prefix -g`) is global. Anything else, such as
82
+ * Homebrew or a standalone download, is other.
83
+ */
84
+ export declare function classifyCodexInstallation(found: {
85
+ path: string;
86
+ resolved: string;
87
+ }, npmGlobalPrefix: string | undefined): CodexInstallation;
88
+ /** One sentence: how to put the last tested Codex CLI in place of the one humanish found. */
89
+ export declare function codexInstallAdvice(installation: CodexInstallation | undefined): string;
90
+ /** For refusal messages: which releases the launcher starts, and the last tested one. */
91
+ export declare function describeCodexCliAdmission(): string;
@@ -0,0 +1,150 @@
1
+ import path from "node:path";
2
+ import { RECORDED_CODEX_CLI_FLOOR, isRecordedCodexCliVersion } from "../contract.js";
3
+ /**
4
+ * Which Codex CLI releases the restricted launcher starts: every stable `MAJOR.MINOR.PATCH`
5
+ * release from RECORDED_CODEX_CLI_FLOOR (0.154.0, the oldest known to work) on, except the
6
+ * refused ones. There is no ceiling, so a new release runs the day it ships; a release that breaks
7
+ * humanish is a bug, fixed by refusing it here until humanish handles it. Saved bundles read any
8
+ * stable release from the same floor, refused or not (src/actors/contract.ts).
9
+ *
10
+ * A release string is a compatibility check, not binary attestation: the launcher compares what
11
+ * `codex --version`, initialize and thread start report, and a modified binary can report any
12
+ * of them. Each launch also checks the release's app-server schema (protocol-compat.ts).
13
+ */
14
+ export const REFUSED_CODEX_CLI_VERSIONS = [];
15
+ /**
16
+ * Releases `pnpm codex:qualify` passed on Linux x64, oldest first. They gate nothing: the newest is
17
+ * the default a declaration names before detection, the install target and the "last tested"
18
+ * hint, and the list is the qualifier's baseline.
19
+ */
20
+ export const TESTED_CODEX_CLI_VERSIONS = [
21
+ "0.154.0",
22
+ "0.157.1",
23
+ "0.159.2",
24
+ "0.159.3",
25
+ "0.160.0",
26
+ ];
27
+ /**
28
+ * The run warning for a hosted (operator-mode) participant on a release not in
29
+ * TESTED_CODEX_CLI_VERSIONS, or undefined. No qualifier ran that release in operator mode, so its
30
+ * evidence rests on what each launch checks (open-admission design, answer C).
31
+ */
32
+ export function untestedOperatorReleaseWarning(cliVersion, operator) {
33
+ if (!operator || cliVersion === undefined)
34
+ return undefined;
35
+ if (TESTED_CODEX_CLI_VERSIONS.includes(cliVersion))
36
+ return undefined;
37
+ return `Codex CLI ${cliVersion} has not been tested with humanish; this hosted participant's evidence rests on the checks each launch makes.`;
38
+ }
39
+ const CORE = "(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)";
40
+ /**
41
+ * Why the launcher refuses a release: not a plain `MAJOR.MINOR.PATCH` (or longer than the 64
42
+ * characters parseCodexCliVersion reads), a prerelease (`-` after the core), older than the floor,
43
+ * or refused.
44
+ */
45
+ export function codexCliRefusal(version) {
46
+ if (version === undefined || version.length > 64)
47
+ return { reason: "unrecognized" };
48
+ if (new RegExp(`^${CORE}-[0-9A-Za-z.-]+(?:\\+[0-9A-Za-z.-]+)?$`).test(version))
49
+ return { reason: "prerelease", version };
50
+ if (!new RegExp(`^${CORE}$`).test(version))
51
+ return { reason: "unrecognized" };
52
+ if (!isRecordedCodexCliVersion(version))
53
+ return { reason: "below_floor", version };
54
+ const refused = REFUSED_CODEX_CLI_VERSIONS.find((entry) => entry.version === version);
55
+ return refused === undefined
56
+ ? undefined
57
+ : { reason: "refused", version, detail: refused.reason, issue: refused.issue };
58
+ }
59
+ /** Whether the launcher starts this release. */
60
+ export const admitsCodexCliVersion = (version) => codexCliRefusal(version) === undefined;
61
+ /**
62
+ * Hosts where isolated launches run (the Codex-account analyst and local-browser participants).
63
+ * Operator launches run on every host with a native npm build (restrictedCodexNpmTarget).
64
+ */
65
+ export const supportsIsolatedCodex = (platform, arch) => (platform === "linux" && arch === "x64") || (platform === "darwin" && arch === "arm64");
66
+ /** What a declaration names before the installed CLI is detected: the newest tested release. */
67
+ export function defaultCodexCliVersion() {
68
+ return TESTED_CODEX_CLI_VERSIONS.at(-1);
69
+ }
70
+ /** The version from `codex --version` output (`codex-cli 0.157.1`); any other shape is undefined. */
71
+ export function parseCodexCliVersion(stdout) {
72
+ return /^codex-cli ([0-9][0-9A-Za-z.+-]{0,63})$/.exec(stdout.trim())?.[1];
73
+ }
74
+ /** Why a release is refused, as a clause; the admission rule when it is not refused. */
75
+ function refusalClause(detected) {
76
+ const refusal = codexCliRefusal(detected);
77
+ switch (refusal?.reason) {
78
+ case "unrecognized":
79
+ return `it is not a plain MAJOR.MINOR.PATCH release; ${describeCodexCliAdmission()}`;
80
+ case "prerelease":
81
+ return "it is a prerelease, and humanish runs stable releases";
82
+ case "below_floor":
83
+ return `it is older than ${RECORDED_CODEX_CLI_FLOOR}, the oldest release humanish supports`;
84
+ case "refused":
85
+ return `humanish refuses it: ${refusal.detail} (${refusal.issue})`;
86
+ default:
87
+ return describeCodexCliAdmission();
88
+ }
89
+ }
90
+ /**
91
+ * doctor's recovery for a refused CLI: the release it found and where, why it is refused, and how
92
+ * to replace that binary with the last tested release.
93
+ */
94
+ export function codexVersionRecovery(detected, installation) {
95
+ const found = detected === undefined
96
+ ? "The installed Codex CLI did not report a recognizable version"
97
+ : `Found Codex CLI ${detected}`;
98
+ const where = installation === undefined ? "" : ` at \`${installation.path}\``;
99
+ return `${found}${where}; ${refusalClause(detected)}. ${codexInstallAdvice(installation)} Then sign in with a ChatGPT account (\`codex login\`).`;
100
+ }
101
+ const inside = (file, directory) => file.startsWith(`${directory}${path.sep}`);
102
+ /**
103
+ * Classifies the `codex` on `PATH` by the file it resolves to. A project's node_modules/.bin/codex
104
+ * resolving into that project's @openai/codex is project-local, so `npx` runs it before any global
105
+ * install. One inside npm's global prefix (`npm prefix -g`) is global. Anything else, such as
106
+ * Homebrew or a standalone download, is other.
107
+ */
108
+ export function classifyCodexInstallation(found, npmGlobalPrefix) {
109
+ const bin = path.dirname(found.path);
110
+ const modules = path.dirname(bin);
111
+ if (path.basename(bin) === ".bin" &&
112
+ path.basename(modules) === "node_modules" &&
113
+ inside(found.resolved, path.join(modules, "@openai", "codex")))
114
+ return { kind: "project", path: found.path, project: path.dirname(modules) };
115
+ if (npmGlobalPrefix !== undefined &&
116
+ (found.path === path.join(npmGlobalPrefix, "bin", "codex") ||
117
+ inside(found.resolved, path.join(npmGlobalPrefix, "lib", "node_modules", "@openai", "codex"))))
118
+ return { kind: "global", path: found.path };
119
+ return { kind: "other", path: found.path };
120
+ }
121
+ /**
122
+ * The command that installs the last tested Codex CLI where it replaces the one humanish found:
123
+ * in its project for a project-local install, otherwise npm's global install.
124
+ */
125
+ function codexInstallCommand(installation) {
126
+ const version = defaultCodexCliVersion();
127
+ return installation?.kind === "project"
128
+ ? `npm install -D @openai/codex@${version}`
129
+ : `npm install -g @openai/codex@${version}`;
130
+ }
131
+ /** One sentence: how to put the last tested Codex CLI in place of the one humanish found. */
132
+ export function codexInstallAdvice(installation) {
133
+ const command = codexInstallCommand(installation);
134
+ switch (installation?.kind) {
135
+ case undefined:
136
+ return `Install the last tested release with \`${command}\`.`;
137
+ case "global":
138
+ return `Replace it with \`${command}\`.`;
139
+ case "project":
140
+ return `It is installed in this project: run \`${command}\` in \`${installation.project}\`, or \`npm uninstall @openai/codex\` there to use the global Codex.`;
141
+ case "other":
142
+ return `Update it with the tool that installed it, or put Codex ${defaultCodexCliVersion()} first on PATH.`;
143
+ }
144
+ }
145
+ /** For refusal messages: which releases the launcher starts, and the last tested one. */
146
+ export function describeCodexCliAdmission() {
147
+ const refused = REFUSED_CODEX_CLI_VERSIONS.map((entry) => entry.version);
148
+ const except = refused.length === 0 ? "" : ` except ${refused.join(", ")}`;
149
+ return `humanish runs stable Codex CLI releases from ${RECORDED_CODEX_CLI_FLOOR}${except} (last tested: ${defaultCodexCliVersion()})`;
150
+ }
@@ -0,0 +1,27 @@
1
+ import type { ProtocolContract } from "./protocol-contract.js";
2
+ type Schema = boolean | Record<string, unknown>;
3
+ /** The definitions of one generated schema, and the params definition of each method. */
4
+ export interface ProtocolSchema {
5
+ readonly definitions: ReadonlyMap<string, Schema>;
6
+ readonly requestParams: ReadonlyMap<string, string>;
7
+ readonly notificationParams: ReadonlyMap<string, string>;
8
+ }
9
+ /** What the check found: changes that refuse the launch, and additions it only records. */
10
+ export interface ProtocolCheck {
11
+ readonly incompatibilities: string[];
12
+ readonly additions: string[];
13
+ }
14
+ /**
15
+ * Reads the files `codex app-server generate-json-schema --experimental` writes: the v2 and full
16
+ * bundles for definitions, and the ClientRequest and ServerNotification unions for params.
17
+ */
18
+ export declare function loadProtocolSchema(directory: string): Promise<ProtocolSchema>;
19
+ /** A field's alternatives at `path` under a definition, or none when the field is gone. */
20
+ export declare function resolveField(schema: ProtocolSchema, definition: string, fieldPath: string): Schema[];
21
+ /** Checks a generated schema against the contract; any incompatibility refuses the launch. */
22
+ export declare function checkProtocol(schema: ProtocolSchema, contract: ProtocolContract): ProtocolCheck;
23
+ /** The refusal detail for an incompatible release. */
24
+ export declare function protocolIncompatibilityMessage(cliVersion: string | undefined, incompatibilities: readonly string[]): string;
25
+ /** The run warning for schema values beyond the baseline, or undefined when there were none. */
26
+ export declare function protocolAdditionsWarning(cliVersion: string | undefined, additions: readonly string[] | undefined): string | undefined;
27
+ export {};