humanish 0.101.0 → 0.103.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 (138) hide show
  1. package/README.md +4 -2
  2. package/dist/affordance.d.ts +2 -0
  3. package/dist/affordance.js +3 -0
  4. package/dist/affordance.js.map +1 -1
  5. package/dist/browser-control-client.d.ts +5 -1
  6. package/dist/browser-control-client.js +45 -5
  7. package/dist/browser-control-client.js.map +1 -1
  8. package/dist/browser-control-dispatcher.d.ts +6 -1
  9. package/dist/browser-control-dispatcher.js +41 -3
  10. package/dist/browser-control-dispatcher.js.map +1 -1
  11. package/dist/browser-control-protocol.d.ts +101 -0
  12. package/dist/browser-control-protocol.js +38 -8
  13. package/dist/browser-control-protocol.js.map +1 -1
  14. package/dist/browser-control-recording-transfer.d.ts +4 -0
  15. package/dist/browser-control-recording-transfer.js +42 -0
  16. package/dist/browser-control-recording-transfer.js.map +1 -0
  17. package/dist/browser-control-transport.d.ts +3 -0
  18. package/dist/browser-control-transport.js +23 -2
  19. package/dist/browser-control-transport.js.map +1 -1
  20. package/dist/computer-use.d.ts +9 -0
  21. package/dist/computer-use.js +36 -8
  22. package/dist/computer-use.js.map +1 -1
  23. package/dist/cua-actor-lab.d.ts +6 -2
  24. package/dist/cua-actor-lab.js +19 -7
  25. package/dist/cua-actor-lab.js.map +1 -1
  26. package/dist/cua-desktop-lane.d.ts +1 -1
  27. package/dist/cua-speech.d.ts +13 -0
  28. package/dist/cua-speech.js +2 -0
  29. package/dist/cua-speech.js.map +1 -0
  30. package/dist/desktop-recorder.d.ts +39 -0
  31. package/dist/desktop-recorder.js +220 -0
  32. package/dist/desktop-recorder.js.map +1 -0
  33. package/dist/desktop-recording-artifact.d.ts +5 -0
  34. package/dist/desktop-recording-artifact.js +54 -0
  35. package/dist/desktop-recording-artifact.js.map +1 -0
  36. package/dist/desktop-recording-types.d.ts +24 -0
  37. package/dist/desktop-recording-types.js +14 -0
  38. package/dist/desktop-recording-types.js.map +1 -0
  39. package/dist/desktop-session.js +1 -0
  40. package/dist/desktop-session.js.map +1 -1
  41. package/dist/doctor-lab.js +1 -1
  42. package/dist/doctor-lab.js.map +1 -1
  43. package/dist/e2b-cua-desktop.js +77 -44
  44. package/dist/e2b-cua-desktop.js.map +1 -1
  45. package/dist/e2b-cua-provisioning.d.ts +4 -1
  46. package/dist/e2b-cua-provisioning.js +8 -2
  47. package/dist/e2b-cua-provisioning.js.map +1 -1
  48. package/dist/e2b-desktop-executor.js +3 -0
  49. package/dist/e2b-desktop-executor.js.map +1 -1
  50. package/dist/e2b-desktop-launch.d.ts +19 -1
  51. package/dist/e2b-desktop-launch.js.map +1 -1
  52. package/dist/e2b-desktop-media.d.ts +14 -0
  53. package/dist/e2b-desktop-media.js +58 -0
  54. package/dist/e2b-desktop-media.js.map +1 -0
  55. package/dist/e2b-desktop-recording.d.ts +16 -0
  56. package/dist/e2b-desktop-recording.js +162 -0
  57. package/dist/e2b-desktop-recording.js.map +1 -0
  58. package/dist/export-bundle.js +2 -0
  59. package/dist/export-bundle.js.map +1 -1
  60. package/dist/export.js +19 -3
  61. package/dist/export.js.map +1 -1
  62. package/dist/guest-bootstrap.d.ts +6 -2
  63. package/dist/guest-bootstrap.js +22 -9
  64. package/dist/guest-bootstrap.js.map +1 -1
  65. package/dist/guest-desktop-executor.js +1 -0
  66. package/dist/guest-desktop-executor.js.map +1 -1
  67. package/dist/guest-desktop-media.d.ts +33 -0
  68. package/dist/guest-desktop-media.js +281 -0
  69. package/dist/guest-desktop-media.js.map +1 -0
  70. package/dist/guest-media-config.d.ts +15 -0
  71. package/dist/guest-media-config.js +8 -0
  72. package/dist/guest-media-config.js.map +1 -0
  73. package/dist/guest-media-worker.d.ts +1 -0
  74. package/dist/guest-media-worker.js +319 -0
  75. package/dist/guest-media-worker.js.map +1 -0
  76. package/dist/guest-runtime-desktop.d.ts +5 -1
  77. package/dist/guest-runtime-desktop.js +62 -3
  78. package/dist/guest-runtime-desktop.js.map +1 -1
  79. package/dist/guest-runtime-main.js +3 -2
  80. package/dist/guest-runtime-main.js.map +1 -1
  81. package/dist/guest-runtime.d.ts +8 -2
  82. package/dist/guest-runtime.js +3 -2
  83. package/dist/guest-runtime.js.map +1 -1
  84. package/dist/lab-config.d.ts +6 -2
  85. package/dist/lab-config.js +26 -4
  86. package/dist/lab-config.js.map +1 -1
  87. package/dist/lab-summary.js +1 -1
  88. package/dist/lab-summary.js.map +1 -1
  89. package/dist/local-firecracker-desktop.d.ts +10 -1
  90. package/dist/local-firecracker-desktop.js +16 -2
  91. package/dist/local-firecracker-desktop.js.map +1 -1
  92. package/dist/local-firecracker-study.js +29 -3
  93. package/dist/local-firecracker-study.js.map +1 -1
  94. package/dist/local-runtime-config.js +5 -2
  95. package/dist/local-runtime-config.js.map +1 -1
  96. package/dist/local-runtime-release.d.ts +2 -0
  97. package/dist/local-runtime-release.js +15 -0
  98. package/dist/local-runtime-release.js.map +1 -1
  99. package/dist/local-runtime.d.ts +1 -0
  100. package/dist/local-runtime.js +11 -9
  101. package/dist/local-runtime.js.map +1 -1
  102. package/dist/observer-app.html +9 -9
  103. package/dist/observer-serve.js +1 -1
  104. package/dist/observer-serve.js.map +1 -1
  105. package/dist/observer.d.ts +2 -2
  106. package/dist/observer.js +106 -27
  107. package/dist/observer.js.map +1 -1
  108. package/dist/program.js +3 -2
  109. package/dist/program.js.map +1 -1
  110. package/dist/restricted-codex-participant-policy.d.ts +2 -1
  111. package/dist/restricted-codex-participant-policy.js +9 -6
  112. package/dist/restricted-codex-participant-policy.js.map +1 -1
  113. package/dist/restricted-codex-participant-run.js +2 -1
  114. package/dist/restricted-codex-participant-run.js.map +1 -1
  115. package/dist/restricted-codex-participant.d.ts +2 -0
  116. package/dist/restricted-codex-participant.js +20 -7
  117. package/dist/restricted-codex-participant.js.map +1 -1
  118. package/dist/run.d.ts +12 -7
  119. package/dist/run.js +55 -15
  120. package/dist/run.js.map +1 -1
  121. package/dist/selected-output-paths.d.ts +3 -0
  122. package/dist/selected-output-paths.js +29 -17
  123. package/dist/selected-output-paths.js.map +1 -1
  124. package/dist/study-analysis-engine.d.ts +1 -1
  125. package/dist/study-analysis-engine.js +53 -10
  126. package/dist/study-analysis-engine.js.map +1 -1
  127. package/docs/architecture/desktop-recording.md +65 -0
  128. package/docs/architecture/local-browser-runtime.md +3 -2
  129. package/docs/architecture/participant-media.md +90 -0
  130. package/docs/contracts/run-bundle.md +27 -0
  131. package/docs/contracts/schemas.md +1 -1
  132. package/docs/contracts/study-analysis.md +14 -0
  133. package/docs/goals/current.md +13 -9
  134. package/docs/ramp/README.md +11 -1
  135. package/docs/release/0.102.0-participant-media.md +43 -0
  136. package/docs/release/0.103.0-desktop-recording.md +29 -0
  137. package/package.json +5 -4
  138. package/skills/humanish/SKILL.md +14 -5
package/README.md CHANGED
@@ -52,8 +52,10 @@ your lab; installing Codex does not change an `openai-computer-use` lab.
52
52
  For local browsers, install only `humanish` and follow the
53
53
  [local study setup](docs/architecture/local-browser-runtime.md). The first live
54
54
  run downloads a verified runtime image; `npx humanish runtime setup` prepares it
55
- ahead of time. Supported Macs use Lima instead of Docker Desktop. Local inboxes
56
- and local camera/microphone support remain follow-ups.
55
+ ahead of time. Supported Macs use Lima instead of Docker Desktop.
56
+ [Optional camera and spoken conversation](docs/architecture/participant-media.md)
57
+ use a separate media runtime. [Optional desktop video/audio](docs/architecture/desktop-recording.md)
58
+ adds continuous Observer playback; screenshots remain the default. Local inboxes remain a follow-up.
57
59
 
58
60
  For a new local study, initialize with your app URL and task:
59
61
 
@@ -10,6 +10,8 @@ export type AffordanceClass =
10
10
  "pointer"
11
11
  /** Keyboard input into the page: typed text that is not a URL and not script. */
12
12
  | "keyboard"
13
+ /** Spoken input sent through the participant's admitted microphone path. */
14
+ | "speech"
13
15
  /** Direct navigation by URL (the `nav` subset). A human affordance; see the note above. */
14
16
  | "url-navigation"
15
17
  /** Script execution via the address bar (a `javascript:` URL). Not a human affordance. */
@@ -28,6 +28,7 @@ export const AFFORDANCE_CLASS_SCHEMA = "humanish.affordance-use.v1";
28
28
  export const NATURALISTIC_AFFORDANCE_CLASSES = [
29
29
  "pointer",
30
30
  "keyboard",
31
+ "speech",
31
32
  "url-navigation",
32
33
  "observation"
33
34
  ];
@@ -98,6 +99,8 @@ export function classifyCuaAction(action) {
98
99
  }
99
100
  return { affordance: "keyboard" };
100
101
  }
102
+ case "speak":
103
+ return { affordance: "speech" };
101
104
  default:
102
105
  // The wire->CuaAction mapper drops unrecognized action types before they reach here, so
103
106
  // this is unreachable today; classify defensively rather than throwing inside a run.
@@ -1 +1 @@
1
- {"version":3,"file":"affordance.js","sourceRoot":"","sources":["../src/affordance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"affordance.js","sourceRoot":"","sources":["../src/affordance.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,18 @@
1
- import type { Duplex } from "node:stream";
1
+ import type { Duplex, Writable } from "node:stream";
2
2
  import type { CuaExecutor } from "./computer-use.js";
3
3
  import { type BrowserControlIdentity } from "./browser-control-protocol.js";
4
+ import type { DesktopRecordingMetadata } from "./desktop-recording-types.js";
4
5
  export interface BrowserControlClientOptions {
5
6
  transport: Duplex;
6
7
  identity: BrowserControlIdentity;
7
8
  requestTimeoutMs?: number;
9
+ /** Set only after the optional media runtime was admitted for this desktop. */
10
+ speechEnabled?: boolean;
8
11
  }
9
12
  export interface BrowserControlClient {
10
13
  executor: CuaExecutor;
11
14
  ready(): Promise<void>;
15
+ finishRecording(destination: Writable): Promise<DesktopRecordingMetadata>;
12
16
  close(): void;
13
17
  }
14
18
  export declare function createBrowserControlClient(options: BrowserControlClientOptions): BrowserControlClient;
@@ -1,12 +1,13 @@
1
1
  import { CuaExecutorError } from "./cua-executor-error.js";
2
2
  import { BROWSER_CONTROL_LIMITS, BROWSER_CONTROL_VERSION, decodeBrowserControlObservation, parseBrowserControlReply, sameBrowserControlIdentity, validateBrowserControlAction, validateBrowserControlIdentity } from "./browser-control-protocol.js";
3
3
  import { BrowserControlTransport } from "./browser-control-transport.js";
4
+ import { receiveBrowserControlRecording } from "./browser-control-recording-transfer.js";
4
5
  export function createBrowserControlClient(options) {
5
6
  const identity = validateBrowserControlIdentity(options.identity);
6
7
  const timeoutMs = options.requestTimeoutMs ?? BROWSER_CONTROL_LIMITS.requestTimeoutMs;
7
8
  if (!Number.isFinite(timeoutMs) || timeoutMs < 1 || timeoutMs > BROWSER_CONTROL_LIMITS.maxRequestTimeoutMs)
8
9
  throw new CuaExecutorError("invalid_request", "not_dispatched");
9
- let seq = 0, busy = false, ready = false, closed = false;
10
+ let seq = 0, busy = false, ready = false, closed = false, rawStream;
10
11
  let pending;
11
12
  const finish = () => {
12
13
  if (!pending?.reply || !pending.writeComplete)
@@ -14,7 +15,10 @@ export function createBrowserControlClient(options) {
14
15
  const operation = pending;
15
16
  pending = undefined;
16
17
  operation.dispose();
17
- if (operation.reply.ok)
18
+ if (operation.reply.ok && operation.raw) {
19
+ void operation.raw.then(() => operation.resolve(operation.reply), operation.reject);
20
+ }
21
+ else if (operation.reply.ok)
18
22
  operation.resolve(operation.reply);
19
23
  else {
20
24
  const { code, disposition } = operation.reply.error;
@@ -42,6 +46,22 @@ export function createBrowserControlClient(options) {
42
46
  transport.close("protocol_mismatch");
43
47
  return;
44
48
  }
49
+ if (request.operation === "FINISH_RECORDING" && reply.ok) {
50
+ if (!reply.recording || !pending.destination) {
51
+ transport.close("invalid_response");
52
+ return;
53
+ }
54
+ try {
55
+ rawStream = transport.handoff();
56
+ closed = true;
57
+ pending.raw = receiveBrowserControlRecording(rawStream, pending.destination, reply.recording.bytes);
58
+ void pending.raw.catch(() => { });
59
+ }
60
+ catch {
61
+ transport.close("transport_failed");
62
+ return;
63
+ }
64
+ }
45
65
  pending.reply = reply;
46
66
  finish();
47
67
  }, code => {
@@ -53,7 +73,7 @@ export function createBrowserControlClient(options) {
53
73
  operation.reject(new CuaExecutorError(code, operation.written ? "outcome_uncertain" : "not_dispatched"));
54
74
  }
55
75
  });
56
- const exchange = (operation, action, signal) => {
76
+ const exchange = (operation, action, signal, destination) => {
57
77
  if (closed)
58
78
  return Promise.reject(new CuaExecutorError("executor_closed", "not_dispatched"));
59
79
  if (signal?.aborted)
@@ -69,7 +89,7 @@ export function createBrowserControlClient(options) {
69
89
  return new Promise((resolve, reject) => {
70
90
  const abort = () => transport.close("cancelled");
71
91
  const timer = setTimeout(() => transport.close("deadline_exceeded"), timeoutMs);
72
- const slot = { request, written: false, writeComplete: false, resolve, reject,
92
+ const slot = { request, written: false, writeComplete: false, resolve, reject, ...(destination ? { destination } : {}),
73
93
  dispose: () => { clearTimeout(timer); signal?.removeEventListener("abort", abort); } };
74
94
  pending = slot;
75
95
  signal?.addEventListener("abort", abort, { once: true });
@@ -103,6 +123,7 @@ export function createBrowserControlClient(options) {
103
123
  };
104
124
  const executor = {
105
125
  stallRecovery: "fail_closed",
126
+ ...(options.speechEnabled === true ? { speechEnabled: true } : {}),
106
127
  observe: () => withOperation(async () => {
107
128
  await ensureReady();
108
129
  const reply = await exchange("OBSERVE");
@@ -118,6 +139,9 @@ export function createBrowserControlClient(options) {
118
139
  }),
119
140
  execute: (action, signal) => withOperation(async () => {
120
141
  const validAction = validateBrowserControlAction(action);
142
+ if (validAction.kind === "speak" && options.speechEnabled !== true) {
143
+ throw new CuaExecutorError("action_rejected", "not_dispatched");
144
+ }
121
145
  if (signal?.aborted)
122
146
  throw new CuaExecutorError("cancelled", "not_dispatched");
123
147
  try {
@@ -131,6 +155,22 @@ export function createBrowserControlClient(options) {
131
155
  await exchange("EXECUTE", validAction, signal);
132
156
  })
133
157
  };
134
- return { executor, ready: () => withOperation(ensureReady), close: () => transport.close() };
158
+ return { executor, ready: () => withOperation(ensureReady),
159
+ finishRecording: destination => withOperation(async () => {
160
+ if (!destination || destination.destroyed)
161
+ throw new CuaExecutorError("invalid_request", "not_dispatched");
162
+ try {
163
+ await ensureReady();
164
+ const reply = await exchange("FINISH_RECORDING", undefined, undefined, destination);
165
+ if (!reply.ok || !reply.recording)
166
+ throw new CuaExecutorError("invalid_response", "outcome_uncertain");
167
+ return reply.recording;
168
+ }
169
+ catch (error) {
170
+ destination.destroy();
171
+ throw error;
172
+ }
173
+ }),
174
+ close: () => { rawStream?.destroy(); transport.close(); } };
135
175
  }
136
176
  //# sourceMappingURL=browser-control-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-control-client.js","sourceRoot":"","sources":["../src/browser-control-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-control-client.js","sourceRoot":"","sources":["../src/browser-control-client.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,17 @@
1
- import type { Duplex } from "node:stream";
1
+ import type { Duplex, Readable } from "node:stream";
2
2
  import type { CuaExecutor } from "./computer-use.js";
3
3
  import { type BrowserControlIdentity } from "./browser-control-protocol.js";
4
+ import { type DesktopRecordingMetadata } from "./desktop-recording-types.js";
4
5
  export interface BrowserControlDispatcherOptions {
5
6
  transport: Duplex;
6
7
  identity: BrowserControlIdentity;
7
8
  executor: CuaExecutor;
8
9
  isAuthorized: () => boolean;
9
10
  authoritySignal: AbortSignal;
11
+ finishRecording?: () => Promise<{
12
+ metadata: DesktopRecordingMetadata;
13
+ stream: Readable;
14
+ }>;
10
15
  }
11
16
  /** Caller retains physical runtime ownership. Closing this channel does not claim the browser stopped. */
12
17
  export declare function attachBrowserControlDispatcher(options: BrowserControlDispatcherOptions): {
@@ -1,10 +1,12 @@
1
1
  import { CuaExecutorError } from "./cua-executor-error.js";
2
2
  import { BROWSER_CONTROL_LIMITS, BROWSER_CONTROL_VERSION, encodeBrowserControlObservation, parseBrowserControlRequest, safeBrowserControlFailure, sameBrowserControlIdentity, validateBrowserControlIdentity } from "./browser-control-protocol.js";
3
3
  import { BrowserControlTransport } from "./browser-control-transport.js";
4
+ import { sendBrowserControlRecording } from "./browser-control-recording-transfer.js";
5
+ import { desktopRecordingMetadataSchema } from "./desktop-recording-types.js";
4
6
  /** Caller retains physical runtime ownership. Closing this channel does not claim the browser stopped. */
5
7
  export function attachBrowserControlDispatcher(options) {
6
8
  const identity = validateBrowserControlIdentity(options.identity);
7
- let lastSeq = 0, busy = false, ready = false, closed = false;
9
+ let lastSeq = 0, busy = false, ready = false, closed = false, rawStream;
8
10
  let active;
9
11
  let timer;
10
12
  const dispose = () => { clearTimeout(timer); timer = undefined; active?.abort(); active = undefined; };
@@ -69,7 +71,10 @@ export function attachBrowserControlDispatcher(options) {
69
71
  }
70
72
  reply = { ...common, ok: true, observation: encodeBrowserControlObservation(observation) };
71
73
  }
72
- else {
74
+ else if (request.operation === "EXECUTE") {
75
+ if (request.action.kind === "speak" && options.executor.speechEnabled !== true) {
76
+ throw new CuaExecutorError("action_rejected", "not_dispatched");
77
+ }
73
78
  // No await between the owner gate above and invocation. The physical driver must
74
79
  // check this signal again immediately before each actual input after preparation.
75
80
  invoked = true;
@@ -80,6 +85,39 @@ export function attachBrowserControlDispatcher(options) {
80
85
  }
81
86
  reply = { ...common, ok: true };
82
87
  }
88
+ else {
89
+ invoked = true;
90
+ if (!options.finishRecording)
91
+ throw new CuaExecutorError("action_rejected", "not_dispatched");
92
+ const recording = await options.finishRecording();
93
+ let metadata;
94
+ try {
95
+ metadata = desktopRecordingMetadataSchema.parse(recording.metadata);
96
+ }
97
+ catch (error) {
98
+ recording.stream.destroy();
99
+ throw error;
100
+ }
101
+ if (closed || signal.aborted || !authorized()) {
102
+ recording.stream.destroy();
103
+ transport.close("session_revoked");
104
+ return;
105
+ }
106
+ reply = { ...common, ok: true, recording: metadata };
107
+ try {
108
+ await transport.send(reply);
109
+ rawStream = transport.handoff();
110
+ }
111
+ catch (error) {
112
+ recording.stream.destroy();
113
+ throw error;
114
+ }
115
+ closed = true;
116
+ dispose();
117
+ options.authoritySignal.removeEventListener("abort", revoke);
118
+ await sendBrowserControlRecording(recording.stream, rawStream, metadata.bytes).catch(() => { });
119
+ return;
120
+ }
83
121
  }
84
122
  catch (error) {
85
123
  reply = { ...common, ok: false, error: safeBrowserControlFailure(error, invoked) };
@@ -104,6 +142,6 @@ export function attachBrowserControlDispatcher(options) {
104
142
  options.authoritySignal.addEventListener("abort", revoke, { once: true });
105
143
  if (!authorized())
106
144
  transport.close("session_revoked");
107
- return { close: () => transport.close() };
145
+ return { close: () => { rawStream?.destroy(); transport.close(); } };
108
146
  }
109
147
  //# sourceMappingURL=browser-control-dispatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-control-dispatcher.js","sourceRoot":"","sources":["../src/browser-control-dispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-control-dispatcher.js","sourceRoot":"","sources":["../src/browser-control-dispatcher.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import type { CuaAction, CuaObservation } from "./computer-use.js";
3
+ import { type HeardSpeech } from "./cua-speech.js";
3
4
  import { type CuaExecutorErrorCode } from "./cua-executor-error.js";
4
5
  export declare const BROWSER_CONTROL_VERSION = 1;
5
6
  export declare const BROWSER_CONTROL_LIMITS: Readonly<{
@@ -8,6 +9,10 @@ export declare const BROWSER_CONTROL_LIMITS: Readonly<{
8
9
  dimension: 4096;
9
10
  pixels: 16000000;
10
11
  textBytes: number;
12
+ speechCharacters: 400;
13
+ speechBytes: 1600;
14
+ heardSpeech: 4;
15
+ speechDurationMs: 120000;
11
16
  chordKeys: 16;
12
17
  keyCharacters: 64;
13
18
  dragPoints: 1024;
@@ -20,6 +25,47 @@ export interface BrowserControlIdentity {
20
25
  challenge: string;
21
26
  runtimeRevision: string;
22
27
  }
28
+ export declare const browserOnlyControlActionSchema: z.ZodDiscriminatedUnion<readonly [z.ZodObject<{
29
+ button: z.ZodOptional<z.ZodEnum<{
30
+ left: "left";
31
+ right: "right";
32
+ middle: "middle";
33
+ }>>;
34
+ x: z.ZodNumber;
35
+ y: z.ZodNumber;
36
+ kind: z.ZodLiteral<"click">;
37
+ }, z.core.$strict>, z.ZodObject<{
38
+ x: z.ZodNumber;
39
+ y: z.ZodNumber;
40
+ kind: z.ZodLiteral<"double_click">;
41
+ }, z.core.$strict>, z.ZodObject<{
42
+ x: z.ZodNumber;
43
+ y: z.ZodNumber;
44
+ kind: z.ZodLiteral<"move">;
45
+ }, z.core.$strict>, z.ZodObject<{
46
+ dx: z.ZodNumber;
47
+ dy: z.ZodNumber;
48
+ x: z.ZodNumber;
49
+ y: z.ZodNumber;
50
+ kind: z.ZodLiteral<"scroll">;
51
+ }, z.core.$strict>, z.ZodObject<{
52
+ kind: z.ZodLiteral<"type">;
53
+ text: z.ZodString;
54
+ }, z.core.$strict>, z.ZodObject<{
55
+ kind: z.ZodLiteral<"keypress">;
56
+ keys: z.ZodArray<z.ZodString>;
57
+ }, z.core.$strict>, z.ZodObject<{
58
+ kind: z.ZodLiteral<"drag">;
59
+ path: z.ZodArray<z.ZodObject<{
60
+ x: z.ZodNumber;
61
+ y: z.ZodNumber;
62
+ }, z.core.$strict>>;
63
+ }, z.core.$strict>, z.ZodObject<{
64
+ kind: z.ZodLiteral<"wait">;
65
+ ms: z.ZodOptional<z.ZodNumber>;
66
+ }, z.core.$strict>, z.ZodObject<{
67
+ kind: z.ZodLiteral<"screenshot">;
68
+ }, z.core.$strict>], "kind">;
23
69
  export declare const browserControlActionSchema: z.ZodPipe<z.ZodDiscriminatedUnion<[z.ZodObject<{
24
70
  button: z.ZodOptional<z.ZodEnum<{
25
71
  left: "left";
@@ -60,6 +106,9 @@ export declare const browserControlActionSchema: z.ZodPipe<z.ZodDiscriminatedUni
60
106
  ms: z.ZodOptional<z.ZodNumber>;
61
107
  }, z.core.$strict>, z.ZodObject<{
62
108
  kind: z.ZodLiteral<"screenshot">;
109
+ }, z.core.$strict>, z.ZodObject<{
110
+ kind: z.ZodLiteral<"speak">;
111
+ text: z.ZodString;
63
112
  }, z.core.$strict>], "kind">, z.ZodTransform<{
64
113
  kind: "click";
65
114
  x: number;
@@ -94,6 +143,9 @@ export declare const browserControlActionSchema: z.ZodPipe<z.ZodDiscriminatedUni
94
143
  } | {
95
144
  kind: "wait";
96
145
  ms?: number;
146
+ } | {
147
+ kind: "speak";
148
+ text: string;
97
149
  } | {
98
150
  kind: "screenshot";
99
151
  }, {
@@ -132,6 +184,9 @@ export declare const browserControlActionSchema: z.ZodPipe<z.ZodDiscriminatedUni
132
184
  ms?: number | undefined;
133
185
  } | {
134
186
  kind: "screenshot";
187
+ } | {
188
+ kind: "speak";
189
+ text: string;
135
190
  }>>;
136
191
  declare const observationSchema: z.ZodObject<{
137
192
  png: z.ZodString;
@@ -140,6 +195,12 @@ declare const observationSchema: z.ZodObject<{
140
195
  title: z.ZodOptional<z.ZodString>;
141
196
  text: z.ZodOptional<z.ZodString>;
142
197
  scrollY: z.ZodOptional<z.ZodNumber>;
198
+ heardSpeech: z.ZodOptional<z.ZodArray<z.ZodObject<{
199
+ id: z.ZodString;
200
+ source: z.ZodLiteral<"speaker_audio">;
201
+ text: z.ZodString;
202
+ durationMs: z.ZodNumber;
203
+ }, z.core.$strict>>>;
143
204
  }, z.core.$strict>;
144
205
  type WireObservation = z.infer<typeof observationSchema>;
145
206
  declare const requestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -208,6 +269,9 @@ declare const requestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
208
269
  ms: z.ZodOptional<z.ZodNumber>;
209
270
  }, z.core.$strict>, z.ZodObject<{
210
271
  kind: z.ZodLiteral<"screenshot">;
272
+ }, z.core.$strict>, z.ZodObject<{
273
+ kind: z.ZodLiteral<"speak">;
274
+ text: z.ZodString;
211
275
  }, z.core.$strict>], "kind">, z.ZodTransform<{
212
276
  kind: "click";
213
277
  x: number;
@@ -242,6 +306,9 @@ declare const requestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
242
306
  } | {
243
307
  kind: "wait";
244
308
  ms?: number;
309
+ } | {
310
+ kind: "speak";
311
+ text: string;
245
312
  } | {
246
313
  kind: "screenshot";
247
314
  }, {
@@ -280,6 +347,9 @@ declare const requestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
280
347
  ms?: number | undefined;
281
348
  } | {
282
349
  kind: "screenshot";
350
+ } | {
351
+ kind: "speak";
352
+ text: string;
283
353
  }>>;
284
354
  version: z.ZodLiteral<1>;
285
355
  identity: z.ZodObject<{
@@ -289,6 +359,17 @@ declare const requestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
289
359
  }, z.core.$strict>;
290
360
  seq: z.ZodNumber;
291
361
  requestId: z.ZodString;
362
+ }, z.core.$strict>, z.ZodObject<{
363
+ type: z.ZodLiteral<"request">;
364
+ operation: z.ZodLiteral<"FINISH_RECORDING">;
365
+ version: z.ZodLiteral<1>;
366
+ identity: z.ZodObject<{
367
+ generation: z.ZodString;
368
+ challenge: z.ZodString;
369
+ runtimeRevision: z.ZodString;
370
+ }, z.core.$strict>;
371
+ seq: z.ZodNumber;
372
+ requestId: z.ZodString;
292
373
  }, z.core.$strict>], "operation">;
293
374
  declare const replySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
294
375
  ok: z.ZodLiteral<true>;
@@ -299,12 +380,30 @@ declare const replySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
299
380
  title: z.ZodOptional<z.ZodString>;
300
381
  text: z.ZodOptional<z.ZodString>;
301
382
  scrollY: z.ZodOptional<z.ZodNumber>;
383
+ heardSpeech: z.ZodOptional<z.ZodArray<z.ZodObject<{
384
+ id: z.ZodString;
385
+ source: z.ZodLiteral<"speaker_audio">;
386
+ text: z.ZodString;
387
+ durationMs: z.ZodNumber;
388
+ }, z.core.$strict>>>;
389
+ }, z.core.$strict>>;
390
+ recording: z.ZodOptional<z.ZodObject<{
391
+ mimeType: z.ZodLiteral<"video/mp4">;
392
+ startedAt: z.ZodISODateTime;
393
+ durationMs: z.ZodNumber;
394
+ bytes: z.ZodNumber;
395
+ audioSources: z.ZodArray<z.ZodEnum<{
396
+ "microphone-input": "microphone-input";
397
+ "speaker-output": "speaker-output";
398
+ }>>;
399
+ complete: z.ZodBoolean;
302
400
  }, z.core.$strict>>;
303
401
  type: z.ZodLiteral<"reply">;
304
402
  operation: z.ZodEnum<{
305
403
  HELLO: "HELLO";
306
404
  OBSERVE: "OBSERVE";
307
405
  EXECUTE: "EXECUTE";
406
+ FINISH_RECORDING: "FINISH_RECORDING";
308
407
  }>;
309
408
  actionId: z.ZodOptional<z.ZodString>;
310
409
  version: z.ZodLiteral<1>;
@@ -342,6 +441,7 @@ declare const replySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
342
441
  HELLO: "HELLO";
343
442
  OBSERVE: "OBSERVE";
344
443
  EXECUTE: "EXECUTE";
444
+ FINISH_RECORDING: "FINISH_RECORDING";
345
445
  }>;
346
446
  actionId: z.ZodOptional<z.ZodString>;
347
447
  version: z.ZodLiteral<1>;
@@ -360,6 +460,7 @@ export declare function sameBrowserControlIdentity(a: BrowserControlIdentity, b:
360
460
  export declare function parseBrowserControlRequest(value: unknown): BrowserControlRequest;
361
461
  export declare function parseBrowserControlReply(value: unknown): BrowserControlReply;
362
462
  export declare function validateBrowserControlAction(value: unknown): CuaAction;
463
+ export declare function validateHeardSpeech(value: unknown): HeardSpeech[];
363
464
  /** Check dimensions before allocating decoder output; v1 accepts browser-style 8-bit, noninterlaced PNG. */
364
465
  export declare function validateBrowserControlPng(bytes: Buffer): void;
365
466
  export declare function encodeBrowserControlObservation(observation: CuaObservation): WireObservation;