humanish 0.96.1 → 0.98.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 (193) hide show
  1. package/AGENTS.md +86 -79
  2. package/CONTRIBUTING.md +7 -2
  3. package/README.md +11 -2
  4. package/dist/actor-contract.d.ts +35 -1
  5. package/dist/actor-contract.js +38 -0
  6. package/dist/actor-contract.js.map +1 -1
  7. package/dist/adapter-extension.js +1 -0
  8. package/dist/adapter-extension.js.map +1 -1
  9. package/dist/automatic-analysis-config.d.ts +15 -5
  10. package/dist/automatic-analysis-config.js +25 -4
  11. package/dist/automatic-analysis-config.js.map +1 -1
  12. package/dist/automatic-study-analysis.js +4 -2
  13. package/dist/automatic-study-analysis.js.map +1 -1
  14. package/dist/browser-control-client.d.ts +14 -0
  15. package/dist/browser-control-client.js +134 -0
  16. package/dist/browser-control-client.js.map +1 -0
  17. package/dist/browser-control-dispatcher.d.ts +14 -0
  18. package/dist/browser-control-dispatcher.js +109 -0
  19. package/dist/browser-control-dispatcher.js.map +1 -0
  20. package/dist/browser-control-protocol.d.ts +371 -0
  21. package/dist/browser-control-protocol.js +155 -0
  22. package/dist/browser-control-protocol.js.map +1 -0
  23. package/dist/browser-control-transport.d.ts +24 -0
  24. package/dist/browser-control-transport.js +156 -0
  25. package/dist/browser-control-transport.js.map +1 -0
  26. package/dist/comms-lease-store.d.ts +1 -0
  27. package/dist/comms-lease-store.js +9 -3
  28. package/dist/comms-lease-store.js.map +1 -1
  29. package/dist/computer-use-actor.d.ts +2 -2
  30. package/dist/computer-use-actor.js +6 -1
  31. package/dist/computer-use-actor.js.map +1 -1
  32. package/dist/computer-use.d.ts +23 -1
  33. package/dist/computer-use.js +253 -70
  34. package/dist/computer-use.js.map +1 -1
  35. package/dist/cua-actor-lab.d.ts +24 -289
  36. package/dist/cua-actor-lab.js +203 -1983
  37. package/dist/cua-actor-lab.js.map +1 -1
  38. package/dist/cua-desktop-lane.d.ts +35 -0
  39. package/dist/cua-desktop-lane.js +13 -0
  40. package/dist/cua-desktop-lane.js.map +1 -0
  41. package/dist/cua-executor-error.d.ts +31 -0
  42. package/dist/cua-executor-error.js +48 -0
  43. package/dist/cua-executor-error.js.map +1 -0
  44. package/dist/cua-provider-error.d.ts +12 -0
  45. package/dist/cua-provider-error.js +28 -0
  46. package/dist/cua-provider-error.js.map +1 -0
  47. package/dist/desktop-session.d.ts +41 -0
  48. package/dist/desktop-session.js +46 -0
  49. package/dist/desktop-session.js.map +1 -0
  50. package/dist/doctor-lab.d.ts +8 -1
  51. package/dist/doctor-lab.js +40 -8
  52. package/dist/doctor-lab.js.map +1 -1
  53. package/dist/e2b-cua-desktop.d.ts +3 -0
  54. package/dist/e2b-cua-desktop.js +675 -0
  55. package/dist/e2b-cua-desktop.js.map +1 -0
  56. package/dist/e2b-cua-provisioning.d.ts +311 -0
  57. package/dist/e2b-cua-provisioning.js +1213 -0
  58. package/dist/e2b-cua-provisioning.js.map +1 -0
  59. package/dist/e2b-desktop-executor.d.ts +1 -24
  60. package/dist/e2b-desktop-executor.js +2 -127
  61. package/dist/e2b-desktop-executor.js.map +1 -1
  62. package/dist/e2b-desktop-session.d.ts +7 -0
  63. package/dist/e2b-desktop-session.js +29 -0
  64. package/dist/e2b-desktop-session.js.map +1 -0
  65. package/dist/e2b-terminal-lab.js +1 -0
  66. package/dist/e2b-terminal-lab.js.map +1 -1
  67. package/dist/frame-signature.d.ts +24 -0
  68. package/dist/frame-signature.js +128 -0
  69. package/dist/frame-signature.js.map +1 -0
  70. package/dist/guest-bootstrap.d.ts +43 -0
  71. package/dist/guest-bootstrap.js +240 -0
  72. package/dist/guest-bootstrap.js.map +1 -0
  73. package/dist/guest-browser-tools.d.ts +8 -0
  74. package/dist/guest-browser-tools.js +66 -0
  75. package/dist/guest-browser-tools.js.map +1 -0
  76. package/dist/guest-chromium-text.d.ts +27 -0
  77. package/dist/guest-chromium-text.js +281 -0
  78. package/dist/guest-chromium-text.js.map +1 -0
  79. package/dist/guest-desktop-executor.d.ts +22 -0
  80. package/dist/guest-desktop-executor.js +177 -0
  81. package/dist/guest-desktop-executor.js.map +1 -0
  82. package/dist/guest-desktop-native.d.ts +14 -0
  83. package/dist/guest-desktop-native.js +131 -0
  84. package/dist/guest-desktop-native.js.map +1 -0
  85. package/dist/guest-runtime-desktop.d.ts +35 -0
  86. package/dist/guest-runtime-desktop.js +231 -0
  87. package/dist/guest-runtime-desktop.js.map +1 -0
  88. package/dist/guest-runtime-main.d.ts +1 -0
  89. package/dist/guest-runtime-main.js +31 -0
  90. package/dist/guest-runtime-main.js.map +1 -0
  91. package/dist/guest-runtime-revision.d.ts +1 -0
  92. package/dist/guest-runtime-revision.js +3 -0
  93. package/dist/guest-runtime-revision.js.map +1 -0
  94. package/dist/guest-runtime.d.ts +25 -0
  95. package/dist/guest-runtime.js +96 -0
  96. package/dist/guest-runtime.js.map +1 -0
  97. package/dist/index.d.ts +1 -1
  98. package/dist/lab-config.js +10 -3
  99. package/dist/lab-config.js.map +1 -1
  100. package/dist/lab-engine.js +6 -0
  101. package/dist/lab-engine.js.map +1 -1
  102. package/dist/lab-summary.d.ts +5 -1
  103. package/dist/lab-summary.js +5 -0
  104. package/dist/lab-summary.js.map +1 -1
  105. package/dist/local-agent-cli.js +1 -1
  106. package/dist/local-agent-cli.js.map +1 -1
  107. package/dist/local-firecracker-desktop.d.ts +13 -0
  108. package/dist/local-firecracker-desktop.js +150 -0
  109. package/dist/local-firecracker-desktop.js.map +1 -0
  110. package/dist/local-firecracker-study.d.ts +9 -0
  111. package/dist/local-firecracker-study.js +93 -0
  112. package/dist/local-firecracker-study.js.map +1 -0
  113. package/dist/local-runtime-config.d.ts +6 -0
  114. package/dist/local-runtime-config.js +56 -0
  115. package/dist/local-runtime-config.js.map +1 -0
  116. package/dist/local-runtime-release.d.ts +3 -0
  117. package/dist/local-runtime-release.js +8 -0
  118. package/dist/local-runtime-release.js.map +1 -0
  119. package/dist/local-runtime.d.ts +25 -0
  120. package/dist/local-runtime.js +113 -0
  121. package/dist/local-runtime.js.map +1 -0
  122. package/dist/observer-app.html +4 -4
  123. package/dist/pricing.d.ts +22 -1
  124. package/dist/pricing.js +22 -0
  125. package/dist/pricing.js.map +1 -1
  126. package/dist/program.js +50 -9
  127. package/dist/program.js.map +1 -1
  128. package/dist/restricted-codex-analysis.d.ts +15 -0
  129. package/dist/restricted-codex-analysis.js +13 -0
  130. package/dist/restricted-codex-analysis.js.map +1 -0
  131. package/dist/restricted-codex-participant-policy.d.ts +39 -0
  132. package/dist/restricted-codex-participant-policy.js +69 -0
  133. package/dist/restricted-codex-participant-policy.js.map +1 -0
  134. package/dist/restricted-codex-participant-run.d.ts +20 -0
  135. package/dist/restricted-codex-participant-run.js +78 -0
  136. package/dist/restricted-codex-participant-run.js.map +1 -0
  137. package/dist/restricted-codex-participant.d.ts +14 -0
  138. package/dist/restricted-codex-participant.js +178 -0
  139. package/dist/restricted-codex-participant.js.map +1 -0
  140. package/dist/restricted-codex-policy.d.ts +56 -0
  141. package/dist/restricted-codex-policy.js +151 -0
  142. package/dist/restricted-codex-policy.js.map +1 -0
  143. package/dist/restricted-codex-session.d.ts +19 -0
  144. package/dist/restricted-codex-session.js +413 -0
  145. package/dist/restricted-codex-session.js.map +1 -0
  146. package/dist/restricted-codex-transport.d.ts +58 -0
  147. package/dist/restricted-codex-transport.js +233 -0
  148. package/dist/restricted-codex-transport.js.map +1 -0
  149. package/dist/run-detail.js +4 -2
  150. package/dist/run-detail.js.map +1 -1
  151. package/dist/run.d.ts +12 -5
  152. package/dist/run.js +17 -1
  153. package/dist/run.js.map +1 -1
  154. package/dist/shared-world-lab.js +2 -2
  155. package/dist/shared-world-lab.js.map +1 -1
  156. package/dist/study-analysis-codex-config.d.ts +11 -0
  157. package/dist/study-analysis-codex-config.js +34 -0
  158. package/dist/study-analysis-codex-config.js.map +1 -0
  159. package/dist/study-analysis-engine.d.ts +6 -3
  160. package/dist/study-analysis-engine.js +19 -10
  161. package/dist/study-analysis-engine.js.map +1 -1
  162. package/dist/study-analysis-job.d.ts +3 -2
  163. package/dist/study-analysis-job.js +1 -1
  164. package/dist/study-analysis-job.js.map +1 -1
  165. package/dist/study-analysis-provider.d.ts +4 -2
  166. package/dist/study-analysis-provider.js +1 -1
  167. package/dist/study-analysis-provider.js.map +1 -1
  168. package/dist/study-analysis-service.d.ts +3 -0
  169. package/dist/study-analysis-service.js +24 -6
  170. package/dist/study-analysis-service.js.map +1 -1
  171. package/dist/study-analysis-validation.d.ts +43 -19
  172. package/dist/study-analysis-validation.js +23 -10
  173. package/dist/study-analysis-validation.js.map +1 -1
  174. package/dist/study-analysis.d.ts +27 -2
  175. package/dist/study-costs.js +6 -0
  176. package/dist/study-costs.js.map +1 -1
  177. package/dist/tui-app.js +102 -102
  178. package/docs/architecture/browser-control.md +117 -0
  179. package/docs/architecture/desktop-sessions.md +80 -0
  180. package/docs/architecture/guest-desktop.md +87 -0
  181. package/docs/architecture/local-browser-runtime.md +100 -0
  182. package/docs/architecture/restricted-codex-analysis.md +91 -0
  183. package/docs/architecture/runtime-broker-core.md +30 -0
  184. package/docs/contracts/schemas.md +1 -1
  185. package/docs/contracts/study-analysis.md +44 -2
  186. package/docs/goals/current.md +25 -9
  187. package/docs/product/automatic-analysis.md +24 -3
  188. package/docs/product/open-source-install-experience.md +7 -0
  189. package/docs/ramp/README.md +30 -13
  190. package/docs/release/0.97.0-codex-account-analysis.md +45 -0
  191. package/docs/release/0.98.0-local-browser-studies.md +31 -0
  192. package/package.json +4 -2
  193. package/skills/humanish/SKILL.md +39 -0
@@ -0,0 +1,35 @@
1
+ import type { CuaExecutor } from './computer-use.js';
2
+ import type { LaneRunOutcome } from './cua-actor-lab.js';
3
+ import type { LabCommsEmail, LabCommsRecipient } from './lab-config.js';
4
+ /** A prepared desktop supplies only participant input/observation and its inbox location. */
5
+ export interface ReadyCuaDesktop {
6
+ executor: CuaExecutor;
7
+ inbox?: {
8
+ url: string;
9
+ address?: string;
10
+ receiving?: boolean;
11
+ };
12
+ }
13
+ /** Existing bundle fields. Provider-specific facts remain optional and must be measured. */
14
+ export type DesktopLaneEvidence = Pick<LaneRunOutcome, 'sandboxId' | 'desktopDurationMs' | 'desktopResources' | 'killed' | 'streamUrlPresent' | 'subjectCommit' | 'desktopBrowser' | 'desktopGeometry' | 'stateStepRecords' | 'phaseRecords' | 'failureCode' | 'commsArtifactPath'>;
15
+ /** One lane owns its desktop through preparation failure and final evidence collection.
16
+ * Call methods sequentially: prepare, openSession, then finalize in a finally block.
17
+ * finalize must be idempotent, record unavailable evidence/cleanup as warnings, and not throw.
18
+ * A constructor must not acquire resources. Participant/model behavior stays in the runner.
19
+ */
20
+ export interface CuaDesktopLane {
21
+ prepare(): Promise<void>;
22
+ openSession(): Promise<ReadyCuaDesktop>;
23
+ finalize(options: {
24
+ failed: boolean;
25
+ }): Promise<void>;
26
+ snapshot(): DesktopLaneEvidence;
27
+ }
28
+ /** The lane's addressed comms recipient, when one exists — the gate AND the address source for the
29
+ * inbox instruction (#351). A lane told to check an inbox it can never receive into would stall,
30
+ * so no addressed recipient means no instruction. */
31
+ export declare function inboxRecipientFor(commsEmail: LabCommsEmail, laneId: string): LabCommsRecipient | undefined;
32
+ /** True when a lane has a declared comms recipient WITH an address, so the drain can actually match the
33
+ * mail the persona will be told to read. Gates the inbox instruction to lanes that can receive mail —
34
+ * a lane told to check an inbox it can never receive into would just stall. */
35
+ export declare function laneHasInboxRecipient(commsEmail: LabCommsEmail, laneId: string): boolean;
@@ -0,0 +1,13 @@
1
+ /** The lane's addressed comms recipient, when one exists — the gate AND the address source for the
2
+ * inbox instruction (#351). A lane told to check an inbox it can never receive into would stall,
3
+ * so no addressed recipient means no instruction. */
4
+ export function inboxRecipientFor(commsEmail, laneId) {
5
+ return (commsEmail.recipients ?? []).find((recipient) => recipient.lane === laneId && recipient.address !== undefined);
6
+ }
7
+ /** True when a lane has a declared comms recipient WITH an address, so the drain can actually match the
8
+ * mail the persona will be told to read. Gates the inbox instruction to lanes that can receive mail —
9
+ * a lane told to check an inbox it can never receive into would just stall. */
10
+ export function laneHasInboxRecipient(commsEmail, laneId) {
11
+ return inboxRecipientFor(commsEmail, laneId) !== undefined;
12
+ }
13
+ //# sourceMappingURL=cua-desktop-lane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cua-desktop-lane.js","sourceRoot":"","sources":["../src/cua-desktop-lane.ts"],"names":[],"mappings":"AA4BA;;sDAEsD;AACtD,MAAM,UAAU,iBAAiB,CAAC,UAAyB,EAAE,MAAc;IACzE,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;AACzH,CAAC;AAED;;gFAEgF;AAChF,MAAM,UAAU,qBAAqB,CAAC,UAAyB,EAAE,MAAc;IAC7E,OAAO,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,31 @@
1
+ declare const messages: Readonly<{
2
+ executor_closed: "Desktop session is closed.";
3
+ executor_not_ready: "Desktop executor is not ready.";
4
+ executor_busy: "Desktop executor is handling another request.";
5
+ invalid_request: "Desktop executor rejected an invalid request.";
6
+ invalid_response: "Desktop executor returned an invalid response.";
7
+ protocol_mismatch: "Desktop executor protocol does not match.";
8
+ session_revoked: "Desktop executor session was revoked.";
9
+ transport_failed: "Desktop executor transport failed.";
10
+ deadline_exceeded: "Desktop executor request exceeded its deadline.";
11
+ action_rejected: "Desktop executor rejected the action.";
12
+ execution_failed: "Desktop executor could not complete the request.";
13
+ cancelled: "Desktop executor request was cancelled.";
14
+ }>;
15
+ export type CuaExecutorErrorCode = keyof typeof messages;
16
+ export type CuaExecutorDisposition = "not_dispatched" | "outcome_uncertain";
17
+ export declare function isCuaExecutorErrorCode(value: unknown): value is CuaExecutorErrorCode;
18
+ /**
19
+ * An executor's bounded failure declaration. No backend message, cause, action payload or
20
+ * transport details belong here. `not_dispatched` requires evidence that dispatch never
21
+ * began; a lost acknowledgement or partial action is `outcome_uncertain`, never a retry.
22
+ * Import from the same installation as the loop: names and lookalike objects do not qualify.
23
+ */
24
+ export declare class CuaExecutorError extends Error {
25
+ readonly code: CuaExecutorErrorCode;
26
+ readonly disposition: CuaExecutorDisposition;
27
+ constructor(code: CuaExecutorErrorCode, disposition: CuaExecutorDisposition);
28
+ }
29
+ /** A forged prototype is not an executor declaration. */
30
+ export declare function isCuaExecutorError(error: unknown): error is CuaExecutorError;
31
+ export {};
@@ -0,0 +1,48 @@
1
+ const messages = Object.freeze({
2
+ executor_closed: "Desktop session is closed.",
3
+ executor_not_ready: "Desktop executor is not ready.",
4
+ executor_busy: "Desktop executor is handling another request.",
5
+ invalid_request: "Desktop executor rejected an invalid request.",
6
+ invalid_response: "Desktop executor returned an invalid response.",
7
+ protocol_mismatch: "Desktop executor protocol does not match.",
8
+ session_revoked: "Desktop executor session was revoked.",
9
+ transport_failed: "Desktop executor transport failed.",
10
+ deadline_exceeded: "Desktop executor request exceeded its deadline.",
11
+ action_rejected: "Desktop executor rejected the action.",
12
+ execution_failed: "Desktop executor could not complete the request.",
13
+ cancelled: "Desktop executor request was cancelled."
14
+ });
15
+ export function isCuaExecutorErrorCode(value) {
16
+ return typeof value === "string" && Object.hasOwn(messages, value);
17
+ }
18
+ const executorErrors = new WeakSet();
19
+ /**
20
+ * An executor's bounded failure declaration. No backend message, cause, action payload or
21
+ * transport details belong here. `not_dispatched` requires evidence that dispatch never
22
+ * began; a lost acknowledgement or partial action is `outcome_uncertain`, never a retry.
23
+ * Import from the same installation as the loop: names and lookalike objects do not qualify.
24
+ */
25
+ export class CuaExecutorError extends Error {
26
+ code;
27
+ disposition;
28
+ constructor(code, disposition) {
29
+ if (!isCuaExecutorErrorCode(code) || (disposition !== "not_dispatched" && disposition !== "outcome_uncertain")) {
30
+ throw new TypeError("Invalid desktop executor error declaration.");
31
+ }
32
+ super(messages[code]);
33
+ this.name = "CuaExecutorError";
34
+ this.code = code;
35
+ this.disposition = disposition;
36
+ // Keep the values used in durable diagnostics finite even for JavaScript callers.
37
+ Object.defineProperties(this, {
38
+ code: { writable: false, configurable: false },
39
+ disposition: { writable: false, configurable: false }
40
+ });
41
+ executorErrors.add(this);
42
+ }
43
+ }
44
+ /** A forged prototype is not an executor declaration. */
45
+ export function isCuaExecutorError(error) {
46
+ return typeof error === "object" && error !== null && executorErrors.has(error);
47
+ }
48
+ //# sourceMappingURL=cua-executor-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cua-executor-error.js","sourceRoot":"","sources":["../src/cua-executor-error.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,eAAe,EAAE,4BAA4B;IAC7C,kBAAkB,EAAE,gCAAgC;IACpD,aAAa,EAAE,+CAA+C;IAC9D,eAAe,EAAE,+CAA+C;IAChE,gBAAgB,EAAE,gDAAgD;IAClE,iBAAiB,EAAE,2CAA2C;IAC9D,eAAe,EAAE,uCAAuC;IACxD,gBAAgB,EAAE,oCAAoC;IACtD,iBAAiB,EAAE,iDAAiD;IACpE,eAAe,EAAE,uCAAuC;IACxD,gBAAgB,EAAE,kDAAkD;IACpE,SAAS,EAAE,yCAAyC;CACrD,CAAC,CAAC;AAKH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,OAAO,EAAU,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAuB;IAC3B,WAAW,CAAyB;IAE7C,YAAY,IAA0B,EAAE,WAAmC;QACzE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,gBAAgB,IAAI,WAAW,KAAK,mBAAmB,CAAC,EAAE,CAAC;YAC/G,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,kFAAkF;QAClF,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC5B,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;YAC9C,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;SACtD,CAAC,CAAC;QACH,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AAED,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ActorTokenUsage, ProviderRequestReceipt } from "./actor-contract.js";
2
+ declare const codes: readonly ["request_rejected", "unavailable", "busy", "refused", "invalid_response", "protocol_error", "timeout", "cancelled", "process_failed", "cleanup_unconfirmed"];
3
+ export type CuaProviderErrorCode = typeof codes[number];
4
+ /** Safe local classification. Never attach provider prose, stderr, paths or a raw cause. */
5
+ export declare class CuaProviderError extends Error {
6
+ readonly code: CuaProviderErrorCode;
7
+ readonly receipt: ProviderRequestReceipt;
8
+ readonly usage?: ActorTokenUsage;
9
+ constructor(code: CuaProviderErrorCode, receipt: ProviderRequestReceipt, usage?: ActorTokenUsage);
10
+ }
11
+ export declare const isCuaProviderError: (value: unknown) => value is CuaProviderError;
12
+ export {};
@@ -0,0 +1,28 @@
1
+ const codes = Object.freeze(["request_rejected", "unavailable", "busy", "refused", "invalid_response",
2
+ "protocol_error", "timeout", "cancelled", "process_failed", "cleanup_unconfirmed"]);
3
+ const errors = new WeakSet();
4
+ /** Safe local classification. Never attach provider prose, stderr, paths or a raw cause. */
5
+ export class CuaProviderError extends Error {
6
+ code;
7
+ receipt;
8
+ usage;
9
+ constructor(code, receipt, usage) {
10
+ if (typeof code !== "string" || !codes.includes(code) || !receipt || typeof receipt !== "object" ||
11
+ Object.keys(receipt).length !== 3 || !(typeof receipt.dispatched === "boolean" || receipt.dispatched === "unknown") ||
12
+ typeof receipt.usageComplete !== "boolean" || (receipt.cleanup !== "confirmed" && receipt.cleanup !== "unconfirmed") ||
13
+ (usage !== undefined && (!usage || typeof usage !== "object" || Array.isArray(usage) || Object.entries(usage).some(([key, count]) => !["input", "output", "cachedInput", "cacheWriteInput", "total"].includes(key) || typeof count !== "number" || !Number.isSafeInteger(count) || count < 0)))) {
14
+ throw new TypeError("Invalid participant provider error declaration.");
15
+ }
16
+ super(`Participant provider: ${code}`);
17
+ this.name = "CuaProviderError";
18
+ this.code = code;
19
+ this.receipt = Object.freeze({ dispatched: receipt.dispatched, usageComplete: receipt.usageComplete, cleanup: receipt.cleanup });
20
+ if (usage !== undefined)
21
+ this.usage = Object.freeze({ ...usage });
22
+ for (const key of ["code", "receipt", "usage"])
23
+ Object.defineProperty(this, key, { writable: false, configurable: false });
24
+ errors.add(this);
25
+ }
26
+ }
27
+ export const isCuaProviderError = (value) => typeof value === "object" && value !== null && errors.has(value);
28
+ //# sourceMappingURL=cua-provider-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cua-provider-error.js","sourceRoot":"","sources":["../src/cua-provider-error.ts"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB;IACnG,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,CAAU,CAAC,CAAC;AAE/F,MAAM,MAAM,GAAG,IAAI,OAAO,EAAU,CAAC;AACrC,4FAA4F;AAC5F,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAuB;IAC3B,OAAO,CAAyB;IAChC,KAAK,CAAmB;IACjC,YAAY,IAA0B,EAAE,OAA+B,EAAE,KAAuB;QAC9F,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAC9F,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;YACnH,OAAO,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,KAAK,aAAa,CAAC;YACpH,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAClI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/J,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACjI,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;YAAE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3H,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CACF;AACD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC9E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { CuaExecutor } from "./computer-use.js";
2
+ /** Internal lifecycle contract. Provider IDs are evidence, not permission to acquire a handle. */
3
+ export type DesktopReleaseResult = {
4
+ status: "released";
5
+ reason: "terminated" | "already_gone";
6
+ } | {
7
+ status: "retained";
8
+ reason: "debug";
9
+ } | {
10
+ status: "unconfirmed";
11
+ reason: "release_unavailable" | "invalid_result" | "release_failed";
12
+ error?: unknown;
13
+ };
14
+ export interface DesktopSession {
15
+ readonly resourceId: string;
16
+ readonly executor: CuaExecutor;
17
+ close(options?: {
18
+ retainForDebug?: boolean;
19
+ }): Promise<DesktopReleaseResult>;
20
+ }
21
+ export interface OwnedDesktopAllocation {
22
+ readonly resourceId: string;
23
+ /** Bind after adapter-specific provisioning, once per allocation. */
24
+ open(executor: CuaExecutor): DesktopSession;
25
+ /** Also available before open, so a provisioning failure cannot lose its cleanup handle. */
26
+ close(options?: {
27
+ retainForDebug?: boolean;
28
+ }): Promise<DesktopReleaseResult>;
29
+ }
30
+ /**
31
+ * Wrap an already-acquired resource. The adapter supplies release authority as a closure;
32
+ * this layer never reconstructs it from a saved ID or enumerates provider resources.
33
+ * Closing immediately rejects new actions, including when release is unconfirmed. An
34
+ * in-flight backend operation may reject as the resource stops; close does not wait for it.
35
+ */
36
+ export declare function ownDesktopAllocation(options: {
37
+ resourceId: string;
38
+ release: () => Promise<Exclude<DesktopReleaseResult, {
39
+ status: "retained";
40
+ }>>;
41
+ }): OwnedDesktopAllocation;
@@ -0,0 +1,46 @@
1
+ import { CuaExecutorError } from "./cua-executor-error.js";
2
+ /**
3
+ * Wrap an already-acquired resource. The adapter supplies release authority as a closure;
4
+ * this layer never reconstructs it from a saved ID or enumerates provider resources.
5
+ * Closing immediately rejects new actions, including when release is unconfirmed. An
6
+ * in-flight backend operation may reject as the resource stops; close does not wait for it.
7
+ */
8
+ export function ownDesktopAllocation(options) {
9
+ const resourceId = options.resourceId;
10
+ const release = options.release;
11
+ let opened = false;
12
+ let closing;
13
+ const assertOpen = () => {
14
+ if (closing !== undefined)
15
+ throw new CuaExecutorError("executor_closed", "not_dispatched");
16
+ };
17
+ const close = (policy = {}) => {
18
+ // Install the promise before invoking release: concurrent/reentrant callers share it.
19
+ closing ??= policy.retainForDebug === true
20
+ ? Promise.resolve({ status: "retained", reason: "debug" })
21
+ : Promise.resolve().then(release).catch((error) => ({
22
+ status: "unconfirmed", reason: "release_failed", error
23
+ }));
24
+ return closing;
25
+ };
26
+ return Object.freeze({
27
+ resourceId,
28
+ close,
29
+ open(executor) {
30
+ assertOpen();
31
+ if (opened)
32
+ throw new Error("Desktop allocation already has a participant session.");
33
+ opened = true;
34
+ return Object.freeze({
35
+ resourceId,
36
+ close,
37
+ executor: {
38
+ ...(executor.stallRecovery === "fail_closed" ? { stallRecovery: "fail_closed" } : {}),
39
+ observe: async () => { assertOpen(); return executor.observe(); },
40
+ execute: async (action, signal) => { assertOpen(); return executor.execute(action, signal); }
41
+ }
42
+ });
43
+ }
44
+ });
45
+ }
46
+ //# sourceMappingURL=desktop-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-session.js","sourceRoot":"","sources":["../src/desktop-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAsB3D;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAGpC;IACC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,OAAkD,CAAC;IACvD,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IAC7F,CAAC,CAAC;IACF,MAAM,KAAK,GAAoC,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE;QAC7D,sFAAsF;QACtF,OAAO,KAAK,MAAM,CAAC,cAAc,KAAK,IAAI;YACxC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC1D,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAwB,EAAE,CAAC,CAAC;gBAC/E,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK;aACvD,CAAC,CAAC,CAAC;QACR,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU;QACV,KAAK;QACL,IAAI,CAAC,QAAqB;YACxB,UAAU,EAAE,CAAC;YACb,IAAI,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACrF,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,UAAU;gBACV,KAAK;gBACL,QAAQ,EAAE;oBACR,GAAG,CAAC,QAAQ,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,aAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9F,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACjE,OAAO,EAAE,KAAK,EAAE,MAAiB,EAAE,MAAoB,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;iBACvH;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,15 +1,22 @@
1
+ import { type LocalRuntimeStatus } from "./local-runtime.js";
1
2
  import type { LabConfig } from "./lab-config.js";
2
3
  import type { LabBackend } from "./lab-engine.js";
3
4
  import type { DetectedLocalAgent } from "./local-agent-cli.js";
4
5
  import type { DoctorResult } from "./run.js";
5
6
  type Check = DoctorResult["checks"][number];
6
- /** Setup checks only: no network, provider dispatch, browser or desktop creation. */
7
+ /** Setup checks only: no model turn, browser or desktop creation. CLI startup may use the network. */
7
8
  export declare function labSetupChecks(args: {
8
9
  cwd: string;
9
10
  lab: string;
10
11
  env: NodeJS.ProcessEnv;
11
12
  agents: DetectedLocalAgent[];
12
13
  keyPresent: (name: string) => boolean;
14
+ /** Internal read-only qualification seam; never a participant/model request. */
15
+ localRuntimeReadiness?: () => Promise<LocalRuntimeStatus>;
16
+ codexAnalysisReadiness?: (env: NodeJS.ProcessEnv) => Promise<{
17
+ ready: boolean;
18
+ errorCode: string | null;
19
+ }>;
13
20
  }): Promise<{
14
21
  desktop: boolean;
15
22
  keys: string[];
@@ -1,6 +1,8 @@
1
+ import { isLocalBrowserLab } from "./local-runtime-config.js";
2
+ import { localRuntimeStatus } from "./local-runtime.js";
1
3
  import { automaticAnalysisBudget } from "./automatic-analysis-config.js";
2
4
  import { receivingRequiredKey } from "./comms-setup.js";
3
- /** Setup checks only: no network, provider dispatch, browser or desktop creation. */
5
+ /** Setup checks only: no model turn, browser or desktop creation. CLI startup may use the network. */
4
6
  export async function labSetupChecks(args) {
5
7
  const { resolveLabManifest } = await import("./labs.js");
6
8
  const { selectLabBackend, resolveLabDryRun } = await import("./lab-engine.js");
@@ -17,6 +19,14 @@ export async function labSetupChecks(args) {
17
19
  if (unsupported)
18
20
  return { desktop: false, keys: [], checks: [...checks, { name: "live route", ok: false, message: unsupported }] };
19
21
  const { desktop, keys } = labKeyRequirements(config, backend, false, args.keyPresent);
22
+ const local = isLocalBrowserLab(config);
23
+ let accountReadiness;
24
+ const checkAccount = () => accountReadiness ??= (args.codexAnalysisReadiness ?? (async (env) => (await import("./restricted-codex-analysis.js")).checkRestrictedCodexAnalysisReadiness({ timeoutMs: 5000 }, { env })))(args.env)
25
+ .catch(() => ({ ready: false, errorCode: "codex_unavailable" }));
26
+ if (local) {
27
+ const runtime = await (args.localRuntimeReadiness ?? (() => localRuntimeStatus({ env: args.env })))();
28
+ checks.push({ name: "local browser runtime", ok: runtime.ok, message: runtime.message });
29
+ }
20
30
  if (config.comms?.email?.kind === "real") {
21
31
  const name = await receivingRequiredKey(args.cwd, config.comms.email.connection);
22
32
  if (name)
@@ -34,9 +44,17 @@ export async function labSetupChecks(args) {
34
44
  else if (backend === "cua" && config.actors[0]?.type === "local-agent") {
35
45
  const choice = config.actors[0]?.localAgent ?? "codex";
36
46
  const agent = args.agents.find(entry => entry.id === choice);
37
- checks.push({ name: "local participant authentication", ok: agent?.authStatus === "authenticated", message: agent?.authStatus === "authenticated" ? `${agent.label} reports authenticated on the host. E2B supplies the desktop; no OpenAI API key is required for this participant.`
38
- : agent ? `${agent.label} ${agent.authStatus === "unauthenticated" ? "reports not signed in" : "authentication could not be checked"}. Run \`${choice === "codex" ? "codex login status" : "claude auth status"}\`; sign in or update the CLI before running.`
39
- : `${choice} is not on this process's PATH. Install and sign in to that CLI, or choose openai-computer-use with OPENAI_API_KEY.` });
47
+ if (local) {
48
+ const readiness = await checkAccount();
49
+ checks.push({ name: "local participant authentication", ok: readiness.ready, message: readiness.ready
50
+ ? "Qualified Codex CLI and ChatGPT login are ready for restricted local browser participants. No E2B or model API key is required; remote model access and quota remain untested."
51
+ : `Local Codex participant setup is unavailable (${readiness.errorCode}). Run humanish doctor --lab <lab>; install the qualified CLI and sign in with a ChatGPT account. No API fallback is used.` });
52
+ }
53
+ else {
54
+ checks.push({ name: "local participant authentication", ok: agent?.authStatus === "authenticated", message: agent?.authStatus === "authenticated" ? `${agent.label} reports authenticated on the host. E2B supplies the desktop; no OpenAI API key is required for this participant.`
55
+ : agent ? `${agent.label} ${agent.authStatus === "unauthenticated" ? "reports not signed in" : "authentication could not be checked"}. Run \`${choice === "codex" ? "codex login status" : "claude auth status"}\`; sign in or update the CLI before running.`
56
+ : `${choice} is not on this process's PATH. Install and sign in to that CLI, or choose openai-computer-use with OPENAI_API_KEY.` });
57
+ }
40
58
  }
41
59
  if (backend === "scripted") {
42
60
  const { resolveBrowserCommand } = await import("./scripted-browser-actor.js");
@@ -46,20 +64,34 @@ export async function labSetupChecks(args) {
46
64
  checks.push({ name: `subject env ${name}`, ok: !!args.env[name]?.trim() || args.keyPresent(name), message: args.env[name]?.trim() || args.keyPresent(name) ? "present; value not shown" : "missing declared subject environment variable; provide it with --env-file" });
47
65
  }
48
66
  const analysis = automaticAnalysisBudget(config.review?.analysis, backend);
49
- if (analysis) {
67
+ if (analysis?.provider === "codex") {
68
+ const readiness = await checkAccount();
69
+ const recovery = readiness.errorCode === "codex_unsupported_platform"
70
+ ? "Use a Linux x64 host for this qualified account route, or explicitly select provider: openai with an API key."
71
+ : readiness.errorCode === "codex_busy"
72
+ ? "Another restricted Codex analyst or setup check is active in this process. Wait for it to finish, then retry."
73
+ : "Install the qualified CLI and sign in with a ChatGPT account.";
74
+ checks.push({ name: "post-run analysis", ok: readiness.ready, message: readiness.ready
75
+ ? "Qualified Codex CLI and ChatGPT account login are ready for a separate restricted analyst. Analysis sends selected evidence to remote inference; model access and account allowance remain untested. Dollar cost and output-token ceilings are unavailable."
76
+ : `Codex account analysis is unavailable (${readiness.errorCode ?? "codex_unavailable"}). ${recovery} No API fallback is used; participant readiness is independent.` });
77
+ }
78
+ else if (analysis) {
50
79
  checks.push({ name: "post-run analysis", ok: true, message: args.keyPresent("OPENAI_API_KEY")
51
80
  ? `OPENAI_API_KEY is present for the separate automatic analysis request; model access and quota are not tested. Its $${analysis.maxCostUsd} admission estimate limit may decline larger studies before dispatch; it is not a provider billing cap. Participant readiness is independent.`
52
81
  : "Will be skipped: OPENAI_API_KEY is missing. The participant may run, but there will be no automatic findings report. Add an OpenAI API key or set review.analysis: false deliberately." });
53
82
  }
54
- checks.push({ name: "check scope", ok: true, message: "Local setup only. Provider credentials are not validated, model access/quota and target reachability are untested, and no paid resources were created." });
83
+ checks.push({ name: "check scope", ok: true, message: analysis?.provider === "codex"
84
+ ? "The Codex setup check inspects local login and configuration without a model turn or participant resources. Remote account validity, model access, quota and target reachability remain untested; CLI startup may use the network."
85
+ : "Local setup only. Provider credentials are not validated, model access/quota and target reachability are untested, and no paid resources were created." });
55
86
  return { desktop, keys, checks };
56
87
  }
57
88
  /** Required participant provider keys, shared by doctor and the TUI. Optional analysis is separate. */
58
89
  export function labKeyRequirements(config, backend, dryRun, keyPresent) {
59
90
  if (dryRun || unsupportedCliRoute(config, backend))
60
91
  return { desktop: false, keys: [] };
61
- const desktop = backend === "cua" || backend === "terminal" || backend.includes("shared-world")
62
- || backend === "scripted" && config.subject.source === "clone";
92
+ // This flag controls the hosted desktop SDK check as well as its API key.
93
+ const desktop = !isLocalBrowserLab(config) && (backend === "cua" || backend === "terminal" || backend.includes("shared-world")
94
+ || backend === "scripted" && config.subject.source === "clone");
63
95
  const keys = desktop ? ["E2B_API_KEY"] : [];
64
96
  if (backend === "terminal")
65
97
  keys.push(keyPresent("CODEX_API_KEY") ? "CODEX_API_KEY" : "OPENAI_API_KEY");
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-lab.js","sourceRoot":"","sources":["../src/doctor-lab.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-lab.js","sourceRoot":"","sources":["../src/doctor-lab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CuaLaneDeps, CuaLaneSpec } from "./cua-actor-lab.js";
2
+ import type { CuaDesktopLane } from "./cua-desktop-lane.js";
3
+ export declare function createE2BCuaDesktopLane(spec: CuaLaneSpec, deps: CuaLaneDeps, warnings: string[]): CuaDesktopLane;