humanish 0.96.0 → 0.97.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 (81) hide show
  1. package/README.md +4 -1
  2. package/dist/automatic-analysis-config.d.ts +15 -5
  3. package/dist/automatic-analysis-config.js +25 -4
  4. package/dist/automatic-analysis-config.js.map +1 -1
  5. package/dist/automatic-study-analysis.js +4 -2
  6. package/dist/automatic-study-analysis.js.map +1 -1
  7. package/dist/cua-actor-lab.d.ts +18 -286
  8. package/dist/cua-actor-lab.js +151 -1955
  9. package/dist/cua-actor-lab.js.map +1 -1
  10. package/dist/cua-desktop-lane.d.ts +35 -0
  11. package/dist/cua-desktop-lane.js +13 -0
  12. package/dist/cua-desktop-lane.js.map +1 -0
  13. package/dist/desktop-session.d.ts +41 -0
  14. package/dist/desktop-session.js +44 -0
  15. package/dist/desktop-session.js.map +1 -0
  16. package/dist/doctor-lab.d.ts +6 -1
  17. package/dist/doctor-lab.js +17 -3
  18. package/dist/doctor-lab.js.map +1 -1
  19. package/dist/e2b-cua-desktop.d.ts +3 -0
  20. package/dist/e2b-cua-desktop.js +675 -0
  21. package/dist/e2b-cua-desktop.js.map +1 -0
  22. package/dist/e2b-cua-provisioning.d.ts +311 -0
  23. package/dist/e2b-cua-provisioning.js +1213 -0
  24. package/dist/e2b-cua-provisioning.js.map +1 -0
  25. package/dist/e2b-desktop-session.d.ts +7 -0
  26. package/dist/e2b-desktop-session.js +29 -0
  27. package/dist/e2b-desktop-session.js.map +1 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/lab-summary.d.ts +3 -1
  30. package/dist/local-agent-cli.js +1 -1
  31. package/dist/local-agent-cli.js.map +1 -1
  32. package/dist/observer-app.html +2 -2
  33. package/dist/program.js +24 -9
  34. package/dist/program.js.map +1 -1
  35. package/dist/restricted-codex-analysis.d.ts +15 -0
  36. package/dist/restricted-codex-analysis.js +13 -0
  37. package/dist/restricted-codex-analysis.js.map +1 -0
  38. package/dist/restricted-codex-policy.d.ts +56 -0
  39. package/dist/restricted-codex-policy.js +151 -0
  40. package/dist/restricted-codex-policy.js.map +1 -0
  41. package/dist/restricted-codex-session.d.ts +19 -0
  42. package/dist/restricted-codex-session.js +419 -0
  43. package/dist/restricted-codex-session.js.map +1 -0
  44. package/dist/restricted-codex-transport.d.ts +58 -0
  45. package/dist/restricted-codex-transport.js +233 -0
  46. package/dist/restricted-codex-transport.js.map +1 -0
  47. package/dist/run.d.ts +1 -1
  48. package/dist/run.js +1 -1
  49. package/dist/run.js.map +1 -1
  50. package/dist/study-analysis-codex-config.d.ts +11 -0
  51. package/dist/study-analysis-codex-config.js +34 -0
  52. package/dist/study-analysis-codex-config.js.map +1 -0
  53. package/dist/study-analysis-engine.d.ts +6 -3
  54. package/dist/study-analysis-engine.js +19 -10
  55. package/dist/study-analysis-engine.js.map +1 -1
  56. package/dist/study-analysis-job.d.ts +1 -0
  57. package/dist/study-analysis-job.js +1 -1
  58. package/dist/study-analysis-job.js.map +1 -1
  59. package/dist/study-analysis-provider.d.ts +4 -2
  60. package/dist/study-analysis-provider.js +1 -1
  61. package/dist/study-analysis-provider.js.map +1 -1
  62. package/dist/study-analysis-service.d.ts +3 -0
  63. package/dist/study-analysis-service.js +24 -6
  64. package/dist/study-analysis-service.js.map +1 -1
  65. package/dist/study-analysis-validation.d.ts +29 -5
  66. package/dist/study-analysis-validation.js +23 -10
  67. package/dist/study-analysis-validation.js.map +1 -1
  68. package/dist/study-analysis.d.ts +27 -2
  69. package/dist/tui-app.js +102 -102
  70. package/docs/architecture/desktop-sessions.md +80 -0
  71. package/docs/architecture/restricted-codex-analysis.md +89 -0
  72. package/docs/contracts/run-bundle.md +7 -4
  73. package/docs/contracts/schemas.md +1 -1
  74. package/docs/contracts/study-analysis.md +44 -2
  75. package/docs/goals/current.md +4 -4
  76. package/docs/product/automatic-analysis.md +24 -3
  77. package/docs/ramp/README.md +11 -1
  78. package/docs/release/0.96.1-browser-navigation.md +22 -0
  79. package/docs/release/0.97.0-codex-account-analysis.md +45 -0
  80. package/package.json +1 -1
  81. package/skills/humanish/SKILL.md +19 -0
package/README.md CHANGED
@@ -118,7 +118,10 @@ For a ranked review of a completed live study, run
118
118
  admission, then remove `--dry-run` to generate findings. This sends selected
119
119
  retained evidence to OpenAI and requires `OPENAI_API_KEY`. Findings appear
120
120
  beside Participants in Observer, with evidence links and separate participant
121
- feedback. See the [analysis contract](docs/contracts/study-analysis.md) for
121
+ feedback. You can explicitly select a restricted Codex account analyst with
122
+ `npx humanish analyze --run latest --provider codex`; it uses remote inference,
123
+ requires the qualified CLI and account login, and reports dollar cost as unknown.
124
+ The OpenAI API default stays unchanged. See the [analysis contract](docs/contracts/study-analysis.md) for
122
125
  coverage limits, estimated cost controls, corrections and sharing behavior.
123
126
 
124
127
  Supported live studies generate findings automatically after participants finish,
@@ -1,14 +1,21 @@
1
1
  import type { StudyAnalysisConfig } from "./study-analysis.js";
2
2
  export declare const DEFAULT_ANALYSIS_TIMEOUT_MS = 600000;
3
3
  export declare const DEFAULT_ANALYSIS_MAX_OUTPUT_TOKENS = 16384;
4
- /** A separately budgeted review after a live participant study. */
5
- export interface LabAnalysis {
6
- maxCostUsd: number;
4
+ /** An explicit provider selection for a separate review after a live participant study. */
5
+ interface LabAnalysisSettings {
7
6
  model?: string;
8
7
  question?: string;
9
8
  timeoutMs?: number;
10
- maxOutputTokens?: number;
11
9
  }
10
+ export type LabAnalysis = LabAnalysisSettings & ({
11
+ provider?: "openai";
12
+ maxCostUsd: number;
13
+ maxOutputTokens?: number;
14
+ } | {
15
+ provider: "codex";
16
+ maxCostUsd?: null;
17
+ maxOutputTokens?: null;
18
+ });
12
19
  /** Called for parsed manifests AND direct library configs, before participant execution. */
13
20
  export declare function resolveAutomaticAnalysis(raw: unknown): {
14
21
  ok: true;
@@ -19,10 +26,13 @@ export declare function resolveAutomaticAnalysis(raw: unknown): {
19
26
  message: string;
20
27
  };
21
28
  export interface AutomaticAnalysisBudget {
29
+ provider?: "openai" | "codex";
30
+ billing?: "api-estimate" | "account-unknown";
22
31
  model: string;
23
- maxCostUsd: number;
32
+ maxCostUsd: number | null;
24
33
  trigger: "default" | "explicit";
25
34
  }
26
35
  /** Metadata only: resolving the future live-run budget never reads keys or dispatches. */
27
36
  export declare function automaticAnalysisBudget(raw: unknown, backend: string): AutomaticAnalysisBudget | undefined;
28
37
  export declare function formatAutomaticAnalysisBudget(budget: AutomaticAnalysisBudget): string;
38
+ export {};
@@ -1,9 +1,10 @@
1
+ import { CODEX_ANALYSIS_MODEL, codexAnalysisIdentity } from "./study-analysis-codex-config.js";
1
2
  import { SUPPORTED_STUDY_ANALYSIS_MODELS } from "./study-analysis-engine.js";
2
3
  import { containsSensitive } from "./redaction.js";
3
4
  export const DEFAULT_ANALYSIS_TIMEOUT_MS = 600_000;
4
5
  export const DEFAULT_ANALYSIS_MAX_OUTPUT_TOKENS = 16_384;
5
6
  const MODELS = new Set(SUPPORTED_STUDY_ANALYSIS_MODELS);
6
- const FIELDS = new Set(["maxCostUsd", "model", "question", "timeoutMs", "maxOutputTokens"]);
7
+ const FIELDS = new Set(["provider", "maxCostUsd", "model", "question", "timeoutMs", "maxOutputTokens"]);
7
8
  /** Called for parsed manifests AND direct library configs, before participant execution. */
8
9
  export function resolveAutomaticAnalysis(raw) {
9
10
  if (raw === false)
@@ -12,9 +13,27 @@ export function resolveAutomaticAnalysis(raw) {
12
13
  raw = { maxCostUsd: 3 };
13
14
  if (raw === null || typeof raw !== "object" || Array.isArray(raw)
14
15
  || Object.keys(raw).some(key => !FIELDS.has(key))) {
15
- return { ok: false, message: "review.analysis must be false or a mapping containing only maxCostUsd, model, question, timeoutMs and maxOutputTokens." };
16
+ return { ok: false, message: "review.analysis must be false or a mapping containing only provider, maxCostUsd, model, question, timeoutMs and maxOutputTokens." };
16
17
  }
17
18
  const value = raw;
19
+ if (value.provider !== undefined && value.provider !== "openai" && value.provider !== "codex") {
20
+ return { ok: false, message: "review.analysis.provider must be openai or codex." };
21
+ }
22
+ if (value.provider === "codex") {
23
+ const model = value.model === undefined ? CODEX_ANALYSIS_MODEL : value.model;
24
+ const timeoutMs = value.timeoutMs === undefined ? DEFAULT_ANALYSIS_TIMEOUT_MS : value.timeoutMs;
25
+ const question = value.question === undefined ? null : value.question;
26
+ if (model !== CODEX_ANALYSIS_MODEL || (value.maxCostUsd !== undefined && value.maxCostUsd !== null)
27
+ || (value.maxOutputTokens !== undefined && value.maxOutputTokens !== null)
28
+ || typeof timeoutMs !== "number" || !Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 600_000
29
+ || (value.question !== undefined && (typeof question !== "string" || question.length > 4000))) {
30
+ return { ok: false, message: "Codex analysis requires the qualified gpt-6-astra model and timeoutMs 1–600000. Dollar and output-token caps are unavailable; omit them. The optional question is limited to 4000 characters." };
31
+ }
32
+ if (question !== null && containsSensitive(question))
33
+ return { ok: false, message: "review.analysis.question contains sensitive text and cannot be sent for analysis." };
34
+ return { ok: true, config: { provider: "codex", model, question: question, timeoutMs,
35
+ maxCostUsd: null, maxOutputTokens: null, identity: codexAnalysisIdentity(model) } };
36
+ }
18
37
  const { maxCostUsd } = value;
19
38
  const model = value.model === undefined ? "gpt-6-astra" : value.model;
20
39
  const question = value.question === undefined ? null : value.question;
@@ -30,7 +49,7 @@ export function resolveAutomaticAnalysis(raw) {
30
49
  if (question !== null && containsSensitive(question)) {
31
50
  return { ok: false, message: "review.analysis.question contains sensitive text and cannot be sent for analysis." };
32
51
  }
33
- return { ok: true, config: { model, maxCostUsd, timeoutMs, maxOutputTokens, question: question },
52
+ return { ok: true, config: { ...(value.provider === undefined ? {} : { provider: "openai" }), model, maxCostUsd, timeoutMs, maxOutputTokens, question: question },
34
53
  ...(value.maxOutputTokens === undefined ? { preferLargerOutput: true } : {}) };
35
54
  }
36
55
  /** Metadata only: resolving the future live-run budget never reads keys or dispatches. */
@@ -38,10 +57,12 @@ export function automaticAnalysisBudget(raw, backend) {
38
57
  if (!["cua", "scripted", "terminal", "shared-world", "concurrent-shared-world"].includes(backend))
39
58
  return undefined;
40
59
  const resolved = resolveAutomaticAnalysis(raw);
41
- return resolved.ok && resolved.config ? { model: resolved.config.model, maxCostUsd: resolved.config.maxCostUsd,
60
+ return resolved.ok && resolved.config ? { ...(resolved.config.provider === "codex" ? { provider: "codex", billing: "account-unknown" } : {}), model: resolved.config.model, maxCostUsd: resolved.config.maxCostUsd,
42
61
  trigger: raw === undefined ? "default" : "explicit" } : undefined;
43
62
  }
44
63
  export function formatAutomaticAnalysisBudget(budget) {
64
+ if (budget.provider === "codex")
65
+ return `After live runs: Codex account analysis · ${budget.model} · separate restricted analyst with remote inference. Account limits apply; dollar cost and output-token ceiling are unknown. Set review.analysis: false to disable.`;
45
66
  return `After live runs: ${budget.trigger} analysis · ${budget.model} · separate $${budget.maxCostUsd} admission estimate limit (not a provider billing cap). Set review.analysis: false to disable.`;
46
67
  }
47
68
  //# sourceMappingURL=automatic-analysis-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"automatic-analysis-config.js","sourceRoot":"","sources":["../src/automatic-analysis-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automatic-analysis-config.js","sourceRoot":"","sources":["../src/automatic-analysis-config.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,8 @@ export async function requestAutomaticStudyAnalysisCancellation(cwd, runId) {
36
36
  function outcomeOf(result) {
37
37
  if (result.error?.code === "ANALYSIS_PUBLICATION_FAILED")
38
38
  return { state: "failed", reason: "AUTOMATIC_ANALYSIS_PUBLICATION_FAILED", result };
39
+ if (result.error?.code?.startsWith("analysis_codex_"))
40
+ return { state: "failed", reason: "AUTOMATIC_ANALYSIS_CODEX_UNAVAILABLE", result };
39
41
  if (result.status)
40
42
  return { state: result.status, result, reason: result.reused ? "AUTOMATIC_ANALYSIS_REUSED"
41
43
  : result.status === "partial" ? (result.error?.code === "analysis_admission_estimate_exceeded"
@@ -78,7 +80,7 @@ export async function runAutomaticStudyAnalysis(cwdInput, runId, configInput, de
78
80
  participantEvidence = hasParticipantEvidence(bundle);
79
81
  // Bind the permanent job claim to the actual configuration before dispatch.
80
82
  // Missing-key/no-evidence skips don't need to read captured image bytes.
81
- if (deps.preferLargerOutput && (!deps.defaultRequest || participantEvidence) && (deps.apiKey ?? process.env.OPENAI_API_KEY)?.trim()) {
83
+ if (config.provider !== "codex" && deps.preferLargerOutput && (!deps.defaultRequest || participantEvidence) && (deps.apiKey ?? process.env.OPENAI_API_KEY)?.trim()) {
82
84
  config = preferLargerStudyAnalysisOutput(await captureStudyEvidence(prepared, bytes), config);
83
85
  }
84
86
  }
@@ -125,7 +127,7 @@ export async function runAutomaticStudyAnalysis(cwdInput, runId, configInput, de
125
127
  let outcome;
126
128
  try {
127
129
  await poll();
128
- const missingKey = !(deps.apiKey ?? process.env.OPENAI_API_KEY)?.trim();
130
+ const missingKey = config.provider !== "codex" && !(deps.apiKey ?? process.env.OPENAI_API_KEY)?.trim();
129
131
  if (deps.defaultRequest === true && (missingKey || !participantEvidence)) {
130
132
  outcome = signal.aborted ? { state: "cancelled", reason: "AUTOMATIC_ANALYSIS_CANCELLED" }
131
133
  : skipped(missingKey ? "AUTOMATIC_ANALYSIS_KEY_MISSING" : "AUTOMATIC_ANALYSIS_NO_PARTICIPANT_EVIDENCE");
@@ -1 +1 @@
1
- {"version":3,"file":"automatic-study-analysis.js","sourceRoot":"","sources":["../src/automatic-study-analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automatic-study-analysis.js","sourceRoot":"","sources":["../src/automatic-study-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,92 +1,32 @@
1
+ export { inboxRecipientFor, laneHasInboxRecipient } from "./cua-desktop-lane.js";
2
+ export { CUA_ACTOR_LAB_PROVIDER_METADATA, DEFAULT_MOBILE_USER_AGENT, SANDBOX_CAMERA_PATH, SANDBOX_MEDIA_DIR, SUBJECT_DIR, SYNTHETIC_CAMERA_COMMAND, applyMobileEmulation, buildFillDesktopWindowCommand, captureDesktopBrowserGeometry, commandDigestOf, declaredScreenForRender, desktopBrowserFamily, inspectDesktopScreenGeometry, makeChromeBrowserStateObserver, makeChromeDesktopGeometryObserver, parseXwininfoGeometry, prepareDesktopMedia, provisionCloneSubject, provisionLocalTreeSubject, type ChromeCdpEndpoint, type DesktopBrowserEvidence, type DesktopBrowserFamily, type DesktopBrowserLaunchIdentity, type DesktopBrowserLaunchResult, type DesktopMediaEvidence, type SubjectPhaseEvent } from "./e2b-cua-provisioning.js";
1
3
  import type { CommsReceivingRun } from "./comms-receiving.js";
4
+ import { type CuaDesktopLane } from "./cua-desktop-lane.js";
5
+ import { type DesktopBrowserEvidence, type SubjectPhaseEvent } from "./e2b-cua-provisioning.js";
2
6
  import { type AutomaticAnalysisHooks, type AutomaticAnalysisResult } from "./automatic-analysis-completion.js";
3
7
  import { type CuaDiagnostics } from "./cua-diagnostics.js";
4
8
  import type { ActorCompletionReason, ActorPersonaRef, ActorStatus, ActorStopCause, ActorTokenUsage, ActorTrace, ActorTraceItem } from "./actor-contract.js";
5
- import { type RunLabProvenance } from "./run-status.js";
6
- import { type BrowserLabAdapterHooks } from "./adapter-extension.js";
7
9
  import { type CuaActorDescriptor } from "./actor-registry.js";
10
+ import { type BrowserLabAdapterHooks } from "./adapter-extension.js";
8
11
  import type { CuaActorSessionOptions } from "./computer-use-actor.js";
9
12
  import type { CuaExecutor, CuaLoopResult, CuaProvider } from "./computer-use.js";
10
- import type { ReasoningEffort } from "./reasoning-effort.js";
11
- import { type LocalAgentId } from "./local-agent-cli.js";
13
+ import { type DevicePreset } from "./device-presets.js";
12
14
  import { type E2BDesktopModule, type E2BDesktopSandbox } from "./e2b-desktop-launch.js";
15
+ import { type DesktopResourceObservation } from "./e2b-desktop-resources.js";
13
16
  import { type DetachedTimers } from "./e2b-detached.js";
14
- import { type DevicePreset } from "./device-presets.js";
15
- import { type LabActorLane, type LabCommsEmail, type LabCommsRecipient, type LabConfig, type LabDesktopBrowser, type LabSubjectServe, type LabSubjectState, type LabDesktopMedia } from "./lab-config.js";
16
- import { type ChromeCdpPagePreference, type ChromeMobileEmulationRequest } from "./chrome-cdp-probe.js";
17
- import { type ResolvedPersona } from "./persona.js";
18
- import { type LabTask } from "./tasks.js";
17
+ import { type LabActorLane, type LabCommsEmail, type LabConfig, type LabSubjectServe, type LabSubjectState } from "./lab-config.js";
18
+ import { type LocalAgentId } from "./local-agent-cli.js";
19
19
  import { renderObserver, type ObserverResult } from "./observer.js";
20
+ import { type ResolvedPersona } from "./persona.js";
21
+ import type { ReasoningEffort } from "./reasoning-effort.js";
22
+ import { type RunLabProvenance } from "./run-status.js";
23
+ import { type RunBundle, type RunCostSummary, type RunDesktopGeometry, type RunFeedbackCandidate, type RunProviderResource, type RunRerunLineage, type RunScorerProvenance, type RunStream, type RunSubjectProvenance, type RunSubjectStateStepRecord } from "./run.js";
20
24
  import { type PreparedOutputDirectory } from "./selected-output-paths.js";
21
25
  import { type LocalTreeArchive } from "./source-archive.js";
22
26
  import type { DwellWindow, StopWhen } from "./stop-conditions.js";
23
- import { type RunBundle, type RunDesktopGeometry, type RunFeedbackCandidate, type RunRerunLineage, type RunStream, type RunProviderResource, type RunCostSummary, type RunScorerProvenance, type RunSubjectProvenance, type RunSubjectStateStepRecord } from "./run.js";
24
- import { type DesktopResourceObservation } from "./e2b-desktop-resources.js";
27
+ import { type LabTask } from "./tasks.js";
25
28
  export declare const CUA_ACTOR_LAB_SCHEMA = "humanish.cua-lab-result.v2";
26
29
  export declare const CUA_FANOUT_STRATEGY: "per-lane-worlds";
27
- export declare const CUA_ACTOR_LAB_PROVIDER_METADATA: {
28
- readonly mode: "cua-actor-lab";
29
- readonly tool: "humanish";
30
- };
31
- export interface DesktopBrowserEvidence {
32
- requested: LabDesktopBrowser;
33
- resolved?: string;
34
- /** Synthetic media devices the browser was launched with (#509), and how permission is answered. */
35
- media?: DesktopMediaEvidence;
36
- }
37
- export interface DesktopMediaEvidence {
38
- camera?: {
39
- source: "synthetic" | "file";
40
- file: string;
41
- };
42
- permission: "prompt" | "granted";
43
- flags: string[];
44
- }
45
- /** Where a lane's synthetic camera feed lives inside the sandbox: a tmpfs the sandbox user can
46
- * write, and a path that contains neither /tmp/ nor /home/, which the public-safety scan reads
47
- * as an operator's local path (this one is the harness's own and belongs in the bundle). */
48
- export declare const SANDBOX_MEDIA_DIR = "/dev/shm/humanish-media";
49
- export declare const SANDBOX_CAMERA_PATH = "/dev/shm/humanish-media/camera.y4m";
50
- /** The synthetic feed: ffmpeg's test pattern, 640x480 at 10 fps, six seconds (about 28 MB of
51
- * raw Y4M on the tmpfs), looped by Chrome's fake capture device. */
52
- export declare const SYNTHETIC_CAMERA_COMMAND = "mkdir -p /dev/shm/humanish-media && ffmpeg -y -loglevel error -f lavfi -i testsrc=size=640x480:rate=10 -t 6 -pix_fmt yuv420p /dev/shm/humanish-media/camera.y4m";
53
- /**
54
- * Put the declared camera feed in the sandbox and return the Chromium flags that present it as a
55
- * capture device (#509). Fails CLOSED: a feed that cannot be produced (no ffmpeg on the image, an
56
- * unreadable host file) is named before the browser launches, because a participant told it has
57
- * a camera and finds none reports the instrument's gap as the product's.
58
- */
59
- export declare function prepareDesktopMedia(desktop: E2BDesktopSandbox, media: LabDesktopMedia, permission: "prompt" | "granted", cwd: string, requestTimeoutMs: number, readHostFile?: (absolutePath: string) => Promise<Buffer>): Promise<DesktopMediaEvidence>;
60
- export type DesktopBrowserFamily = "chromium" | "firefox" | "unknown";
61
- /** Runtime-only identity for the exact browser process started by this lane. */
62
- export interface DesktopBrowserLaunchIdentity {
63
- processId: string;
64
- profileDir: string;
65
- targetUrl: string;
66
- cdpPort?: number;
67
- }
68
- /** Runtime-only launch result. `evidence` preserves the existing public persistence policy. */
69
- export interface DesktopBrowserLaunchResult {
70
- family: DesktopBrowserFamily;
71
- identity?: DesktopBrowserLaunchIdentity;
72
- evidence?: DesktopBrowserEvidence;
73
- }
74
- export declare const SUBJECT_DIR = "/home/user/subject";
75
- /**
76
- * One phase-boundary event from the shared subject provisioning pipeline (clone or local-tree
77
- * route): started/completed pairs at each named boundary, never per poll tick (the detached
78
- * primitive in e2b-detached.ts already polls every 1.5-3s internally; only the boundary itself
79
- * is surfaced here). Message text is public-safe by construction: no URLs beyond the existing
80
- * publicAppUrl convention, no paths, no command text. Completed events carry `ok` and
81
- * `durationMs`; started events (and the fire-and-forget `subject.serve.started`) carry neither.
82
- */
83
- export interface SubjectPhaseEvent {
84
- at: string;
85
- type: string;
86
- ok?: boolean;
87
- durationMs?: number;
88
- message: string;
89
- }
90
30
  /**
91
31
  * Library-level hooks. `prepareDesktop` runs after sandbox creation and before subject
92
32
  * provisioning / browser launch — library callers use it for extra in-sandbox setup beyond
@@ -488,14 +428,6 @@ export declare function composeLaneInstructions(args: {
488
428
  * augments only the instructions the model receives; the authored prompt + its digest are unchanged.
489
429
  * Returns a new spec (never mutates). Shared by the CUA + concurrent shared-world routes. */
490
430
  export declare function withInboxMission(spec: CuaLaneSpec, inboxUrl: string, address?: string, receiving?: boolean): CuaLaneSpec;
491
- /** The lane's addressed comms recipient, when one exists — the gate AND the address source for the
492
- * inbox instruction (#351). A lane told to check an inbox it can never receive into would stall,
493
- * so no addressed recipient means no instruction. */
494
- export declare function inboxRecipientFor(commsEmail: LabCommsEmail, laneId: string): LabCommsRecipient | undefined;
495
- /** True when a lane has a declared comms recipient WITH an address, so the drain can actually match the
496
- * mail the persona will be told to read. Gates the inbox instruction to lanes that can receive mail —
497
- * a lane told to check an inbox it can never receive into would just stall. */
498
- export declare function laneHasInboxRecipient(commsEmail: LabCommsEmail, laneId: string): boolean;
499
431
  /**
500
432
  * The narrowest browser WINDOW Chrome/Chromium will render on the E2B desktop. Chrome refuses to
501
433
  * make its window narrower than this (~500 CSS px observed: a 414-wide X screen produced a 500-wide
@@ -509,20 +441,6 @@ export declare function laneHasInboxRecipient(commsEmail: LabCommsEmail, laneId:
509
441
  export declare const MIN_DESKTOP_RENDER_WIDTH = 500;
510
442
  /** Floor a screen resolution's WIDTH to what Chrome can actually render (see MIN_DESKTOP_RENDER_WIDTH). */
511
443
  export declare function floorRenderResolution(resolution: readonly [number, number]): [number, number];
512
- /**
513
- * The DECLARED preset to record alongside the rendered screen, or undefined when the preset
514
- * rendered faithfully.
515
- *
516
- * `desktopGeometry.screen.verified` compares the FLOORED number with itself, so on its own a
517
- * floored run is indistinguishable from a faithful one: a reader sees requested 500 / verified 500
518
- * and concludes a 500-wide screen was asked for. Recording the declared preset is what makes
519
- * "the preset width did not render" legible in the bundle.
520
- */
521
- export declare function declaredScreenForRender(preset: DevicePreset, presetName: string, rendered: readonly [number, number]): {
522
- width: number;
523
- height: number;
524
- preset: string;
525
- } | undefined;
526
444
  /**
527
445
  * Resolve a lane's device + rendered resolution (most-specific wins, exactly as the single-lane
528
446
  * path always has): a raw execution.desktop.resolution escape hatch (only legal when no lane
@@ -564,6 +482,8 @@ export interface CuaRunBudget {
564
482
  }
565
483
  export declare function makeCuaRunBudget(maxTotalUsd: number): CuaRunBudget;
566
484
  export interface CuaLaneDeps {
485
+ /** Internal ready-desktop seam. The factory must not allocate; prepare owns that work. */
486
+ createDesktopLane?: (spec: CuaLaneSpec, warnings: string[]) => CuaDesktopLane;
567
487
  config: LabConfig;
568
488
  descriptor: CuaActorDescriptor;
569
489
  appUrl: string;
@@ -682,134 +602,6 @@ export interface LaneRunOutcome {
682
602
  export declare function makeLaneWriteScreenshot(artifactRoot: PreparedOutputDirectory, spec: {
683
603
  screenshotDir: string;
684
604
  }, screenshots: string[]): (name: string, bytes: Buffer) => Promise<string>;
685
- /**
686
- * Verify the desktop screen geometry IN-SANDBOX (the per-lane device claim is checked, never
687
- * assumed). A parseable mismatch fails closed. Unavailable/unparseable evidence is returned as
688
- * an explicit warning: the lane may still run, but its bundle records only the requested screen
689
- * and never upgrades that request into a verified measurement.
690
- */
691
- export declare function inspectDesktopScreenGeometry(args: {
692
- desktop: E2BDesktopSandbox;
693
- laneId: string;
694
- requestedScreen: readonly [number, number];
695
- requestTimeoutMs: number;
696
- }): Promise<{
697
- verified?: RunDesktopGeometry["screen"]["verified"];
698
- error?: string;
699
- warning?: string;
700
- }>;
701
- /**
702
- * Build the xdotool command that makes a browser window fill the desktop.
703
- * Exported (pure) for contract tests. A window manager can ignore Chrome's
704
- * --window-size, so xdotool is the robust path: move the window to the origin,
705
- * then size it to the exact desktop resolution so Observer screenshots carry no
706
- * dead margin around the browser.
707
- */
708
- export declare function buildFillDesktopWindowCommand(windowId: string, width: number, height: number): string;
709
- export declare function desktopBrowserFamily(value: string | undefined): DesktopBrowserFamily;
710
- /**
711
- * Runtime-only CDP endpoint attribution for the exact chromium this lane launched. Port
712
- * resolution at OBSERVE time: the cached launch-time `cdpPort` wins; absent that, the observer
713
- * probe re-reads `profileDir`'s DevToolsActivePort marker (a slow cold start can publish it
714
- * AFTER the launch-time poll gave up); absent both it falls back to the legacy fixed 9222,
715
- * where a dead endpoint degrades into an honest warning that names the cause.
716
- */
717
- export interface ChromeCdpEndpoint {
718
- cdpPort?: number;
719
- /** The launched profile dir; lets observers re-read DevToolsActivePort at observe time. */
720
- profileDir?: string;
721
- /** The URL this lane opened; attributes the CDP page when no target id is pinned yet. */
722
- targetUrl: string;
723
- }
724
- /**
725
- * The URL / title / page-text / scroll observer behind stopWhen and task criteria. One probe per
726
- * observation, run on the sandbox's python3 (see chrome-cdp-probe.ts for why not node: #514).
727
- *
728
- * "active": follow the participant to whatever tab they are driving now — never pin the state
729
- * observer to the launch tab (a verification link that opened in a NEW tab left a pinned observer
730
- * reading the old tab forever).
731
- *
732
- * `onUnavailable` fires ONCE, on the first probe that could not read the page, with the reason.
733
- * The observer still degrades to `{}` for the loop; the callback is how a lane says out loud that
734
- * url/text criteria are not being measured, instead of letting the funnel report 0/N (#514).
735
- */
736
- export declare function makeChromeBrowserStateObserver(desktop: E2BDesktopSandbox, requestTimeoutMs: number, endpoint: ChromeCdpEndpoint, targetId?: string, onUnavailable?: (reason: string) => void,
737
- /**
738
- * Mobile emulation on later tabs (#623): the holder attaches to every page target Chrome opens
739
- * after the launch page, so a tab the participant opens later should lay out at the phone width
740
- * too. The first observation on each new target reads that page's OWN report; a target that
741
- * reports the requested width is recorded through `onCovered`, and one that does not (or cannot
742
- * be read) fires `onDrift` once, so a phone-labelled lane that spent part of its session at
743
- * desktop layout says so with the number the page gave.
744
- */
745
- drift?: {
746
- emulatedTargetId: string;
747
- expectedWidth: number;
748
- expectTouch?: boolean;
749
- onDrift: (reason: string) => void;
750
- onCovered?: (targetId: string, read: {
751
- innerWidth: number;
752
- devicePixelRatio: number;
753
- maxTouchPoints: number;
754
- }) => void;
755
- }): () => Promise<{
756
- url?: string;
757
- title?: string;
758
- text?: string;
759
- scrollY?: number;
760
- }>;
761
- /**
762
- * Read the running browser's actual outer-window bounds and CSS layout viewport through the
763
- * already-enabled local Chrome DevTools endpoint. The returned values come from `window.*` in
764
- * the target page; requested E2B resolution is deliberately not an input to this function.
765
- * Missing channels report their reason via `onUnavailable`, so the geometry warning can name
766
- * the cause (a dead CDP endpoint, no python3) instead of only the symptom. Returns `undefined`
767
- * only when neither channel could be measured.
768
- * Outer bounds and CSS dimensions are independent channels: a background page can report zero
769
- * outer dimensions while still reporting a CSS viewport. Final captures follow the active tab;
770
- * launch captures and emulation attribution keep the pinned target.
771
- */
772
- export declare function makeChromeDesktopGeometryObserver(desktop: E2BDesktopSandbox, requestTimeoutMs: number, endpoint: ChromeCdpEndpoint, targetId?: string, onUnavailable?: (reason: string) => void, prefer?: ChromeCdpPagePreference): () => Promise<(Pick<RunDesktopGeometry, "browserWindow" | "viewport"> & {
773
- targetId?: string;
774
- }) | undefined>;
775
- /** The user agent a mobile-emulated lane presents unless the lab sets its own. */
776
- export declare const DEFAULT_MOBILE_USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
777
- /**
778
- * Apply mobile emulation (#221) to the lane's launch page and read back what the page reports.
779
- * Fails CLOSED: a request that cannot be applied throws, because a desktop run labelled mobile is
780
- * the over-trust this feature exists to prevent. A read-back that cannot be taken is a warning
781
- * (the emulation was applied; only the proof is missing).
782
- */
783
- export declare function applyMobileEmulation(desktop: E2BDesktopSandbox, requestTimeoutMs: number, endpoint: ChromeCdpEndpoint, targetId: string | undefined, request: ChromeMobileEmulationRequest): Promise<{
784
- fidelity: NonNullable<RunDesktopGeometry["fidelity"]>;
785
- warnings: string[];
786
- targetId?: string;
787
- holderName: string;
788
- }>;
789
- /** Shared hosted-browser geometry capture used by per-lane and sequential shared-world routes. */
790
- export declare function captureDesktopBrowserGeometry(args: {
791
- desktop: E2BDesktopSandbox;
792
- browserFamily: DesktopBrowserFamily;
793
- launchIdentity?: DesktopBrowserLaunchIdentity;
794
- browserTargetId?: string;
795
- /** Launch captures stay pinned; final captures follow the participant's current page. */
796
- pagePreference?: ChromeCdpPagePreference;
797
- browserWindowId?: string;
798
- laneId: string;
799
- /** Runtime-only lane target URL (attributes the CDP page); never persisted by this capture. */
800
- targetUrl: string;
801
- requestedScreen: readonly [number, number];
802
- requestTimeoutMs: number;
803
- resize?: boolean;
804
- }): Promise<{
805
- /** Known physical clipping (or unverified repair of it); startup must stop before actions. */
806
- unusable?: string;
807
- browserWindowId?: string;
808
- browserTargetId?: string;
809
- browserWindow?: RunDesktopGeometry["browserWindow"];
810
- viewport?: RunDesktopGeometry["viewport"];
811
- warnings: string[];
812
- }>;
813
605
  /**
814
606
  * A goal_satisfied lane counts as a self-reported blocker ONLY when its final narrative contradicts
815
607
  * the goal AND the run's own stop predicate did NOT fire. A matched stopWhen is independent,
@@ -827,13 +619,8 @@ export declare function resolveSelfReportedBlocker(session: CuaLoopResult | unde
827
619
  * never changes the verdict. Exported for testing.
828
620
  */
829
621
  export declare function resolveSelfReportedFriction(session: CuaLoopResult | undefined): string | undefined;
830
- /**
831
- * Run ONE E2B desktop lane end-to-end: create the sandbox (per-lane metadata + the lane's device
832
- * resolution), prepareDesktop, verify geometry, (clone+serve+seed the subject per lane), open the
833
- * browser, run the session, and ALWAYS tear down THIS lane's sandbox BY ID in a finally. Never
834
- * enumerates sandboxes. Extracted from the former single-lane block; at N=1 it writes the exact
835
- * same artifacts (actor.json, screenshots/<name>) the bundle has always referenced.
836
- */
622
+ /** Run one participant against a prepared desktop. The adapter owns provisioning, final
623
+ * evidence and cleanup; this runner owns the model, trace and participant outcome. */
837
624
  export declare function runCuaLane(spec: CuaLaneSpec, deps: CuaLaneDeps): Promise<LaneRunOutcome>;
838
625
  /**
839
626
  * Run N>1 E2B lanes with bounded concurrency, a pipeline gate (lane 1 provisions before the rest
@@ -856,59 +643,6 @@ export declare function runCuaLanes(laneSpecs: CuaLaneSpec[], deps: Omit<CuaLane
856
643
  * ticking into a directory something else is deleting, which surfaces as an unrelated ENOTEMPTY.
857
644
  */
858
645
  export declare function runCuaActorLab(options: RunCuaActorLabOptions): Promise<CuaActorLabResult>;
859
- /**
860
- * Provision a clone subject inside the sandbox: clone → the shared serve pipeline
861
- * (install → state(before-build) → build → state(before-start) → start → readiness
862
- * probe → state(after-ready)). Returns the latest subject HEAD after successful
863
- * provisioning. Throws (with a capped log tail for the caller to redact) on any failing step:
864
- * the lab persists that as a failed-evidence bundle.
865
- *
866
- * Auth: when GITHUB_TOKEN is among the declared subject env names, the clone authenticates
867
- * via an Authorization header computed IN-SANDBOX from the provisioned env: the token never
868
- * appears in the script text, the process argv beyond the transient git call, the clone URL,
869
- * or .git/config.
870
- */
871
- export declare function provisionCloneSubject(desktop: E2BDesktopSandbox, args: {
872
- repo: string;
873
- depth: number;
874
- serve: LabSubjectServe;
875
- /** Declared subject state (seed steps; external declaration is provenance-only). */
876
- state?: LabSubjectState;
877
- hasGithubToken: boolean;
878
- requestTimeoutMs: number;
879
- /** Literal scrubber for known provisioned values, applied to log tails PRE-truncation. */
880
- scrub: (text: string) => string;
881
- /** Called the moment the cloned commit resolves, so provenance survives later failures. */
882
- onCommit?: (commit: string) => void;
883
- /** Called the moment each state step finishes (mirrors onCommit), success or failure. */
884
- onStateStep?: (record: RunSubjectStateStepRecord) => void;
885
- /** Called at each phase boundary (started/completed): clone, install, build, serve start,
886
- * ready, and each subject.state seed-step group. */
887
- onPhase?: (event: SubjectPhaseEvent) => void;
888
- } & DetachedTimers): Promise<string | undefined>;
889
- /**
890
- * Provision a local-tree subject inside the sandbox: upload the once-per-run packed archive
891
- * (identical bytes across every fan-out lane) → extract it into SUBJECT_DIR → the
892
- * same shared serve pipeline provisionCloneSubject uses. Unlike the clone route there is no
893
- * in-sandbox git refresh: the archive excludes .git entirely (see source-archive.ts), so
894
- * subject identity is the host-side LocalTreeArchive captured at pack time, never anything
895
- * resolved in-sandbox.
896
- */
897
- export declare function provisionLocalTreeSubject(desktop: E2BDesktopSandbox, args: {
898
- /** The once-per-run packed archive bytes (shared byte-identically across every lane). */
899
- archiveBuffer: ArrayBuffer;
900
- serve: LabSubjectServe;
901
- /** Declared subject state (seed steps; external declaration is provenance-only). */
902
- state?: LabSubjectState;
903
- requestTimeoutMs: number;
904
- /** Literal scrubber for known provisioned values, applied to log tails PRE-truncation. */
905
- scrub: (text: string) => string;
906
- /** Called the moment each state step finishes, success or failure. */
907
- onStateStep?: (record: RunSubjectStateStepRecord) => void;
908
- /** Called at each phase boundary (started/completed): upload, extract, install, build,
909
- * serve start, ready, and each subject.state seed-step group. */
910
- onPhase?: (event: SubjectPhaseEvent) => void;
911
- } & DetachedTimers): Promise<void>;
912
646
  /**
913
647
  * Default local-tree packing implementation: createLocalTreeArchive(root, opts) on the host,
914
648
  * then a single read of the produced archive file into an ArrayBuffer for upload. The DI seam
@@ -923,8 +657,6 @@ export declare function defaultPackLocalTree(args: {
923
657
  archive: LocalTreeArchive;
924
658
  buffer: ArrayBuffer;
925
659
  }>;
926
- /** sha256 hex of the exact command string, first 16 chars (the promptDigest convention). */
927
- export declare function commandDigestOf(command: string): string;
928
660
  /**
929
661
  * Resolve the bundle's state marker from the declaration and what actually ran.
930
662
  * Precedence: external declared → "unpinned" (seed records, if any, stay attached — a