humanish 0.0.1 → 0.15.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 (196) hide show
  1. package/AGENTS.md +77 -0
  2. package/CONTRIBUTING.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +435 -8
  5. package/SECURITY.md +34 -0
  6. package/dist/actor-contract.d.ts +107 -0
  7. package/dist/actor-contract.js +286 -0
  8. package/dist/actor-contract.js.map +1 -0
  9. package/dist/actor-registry.d.ts +73 -0
  10. package/dist/actor-registry.js +93 -0
  11. package/dist/actor-registry.js.map +1 -0
  12. package/dist/adapter-extension.d.ts +54 -0
  13. package/dist/adapter-extension.js +214 -0
  14. package/dist/adapter-extension.js.map +1 -0
  15. package/dist/argv.d.ts +1 -0
  16. package/dist/argv.js +8 -0
  17. package/dist/argv.js.map +1 -0
  18. package/dist/artifact-reference.d.ts +22 -0
  19. package/dist/artifact-reference.js +47 -0
  20. package/dist/artifact-reference.js.map +1 -0
  21. package/dist/browser-evidence-hygiene.d.ts +7 -0
  22. package/dist/browser-evidence-hygiene.js +40 -0
  23. package/dist/browser-evidence-hygiene.js.map +1 -0
  24. package/dist/claude-agent-sdk.d.ts +94 -0
  25. package/dist/claude-agent-sdk.js +356 -0
  26. package/dist/claude-agent-sdk.js.map +1 -0
  27. package/dist/cli.d.ts +2 -0
  28. package/dist/cli.js +5 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/codex-app-server-ui.d.ts +39 -0
  31. package/dist/codex-app-server-ui.js +327 -0
  32. package/dist/codex-app-server-ui.js.map +1 -0
  33. package/dist/codex-app-server.d.ts +141 -0
  34. package/dist/codex-app-server.js +747 -0
  35. package/dist/codex-app-server.js.map +1 -0
  36. package/dist/command-failure.d.ts +29 -0
  37. package/dist/command-failure.js +54 -0
  38. package/dist/command-failure.js.map +1 -0
  39. package/dist/computer-use-actor.d.ts +52 -0
  40. package/dist/computer-use-actor.js +48 -0
  41. package/dist/computer-use-actor.js.map +1 -0
  42. package/dist/computer-use.d.ts +232 -0
  43. package/dist/computer-use.js +615 -0
  44. package/dist/computer-use.js.map +1 -0
  45. package/dist/concurrency.d.ts +1 -0
  46. package/dist/concurrency.js +27 -0
  47. package/dist/concurrency.js.map +1 -0
  48. package/dist/concurrent-shared-world-lab.d.ts +115 -0
  49. package/dist/concurrent-shared-world-lab.js +1092 -0
  50. package/dist/concurrent-shared-world-lab.js.map +1 -0
  51. package/dist/core/git-state.d.ts +31 -0
  52. package/dist/core/git-state.js +142 -0
  53. package/dist/core/git-state.js.map +1 -0
  54. package/dist/core/index.d.ts +4 -0
  55. package/dist/core/index.js +3 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/run-primitives.d.ts +66 -0
  58. package/dist/core/run-primitives.js +120 -0
  59. package/dist/core/run-primitives.js.map +1 -0
  60. package/dist/cua-actor-lab.d.ts +620 -0
  61. package/dist/cua-actor-lab.js +2834 -0
  62. package/dist/cua-actor-lab.js.map +1 -0
  63. package/dist/device-presets.d.ts +67 -0
  64. package/dist/device-presets.js +50 -0
  65. package/dist/device-presets.js.map +1 -0
  66. package/dist/e2b-desktop-executor.d.ts +101 -0
  67. package/dist/e2b-desktop-executor.js +309 -0
  68. package/dist/e2b-desktop-executor.js.map +1 -0
  69. package/dist/e2b-desktop-launch.d.ts +144 -0
  70. package/dist/e2b-desktop-launch.js +59 -0
  71. package/dist/e2b-desktop-launch.js.map +1 -0
  72. package/dist/e2b-detached.d.ts +53 -0
  73. package/dist/e2b-detached.js +130 -0
  74. package/dist/e2b-detached.js.map +1 -0
  75. package/dist/e2b-terminal-lab.d.ts +345 -0
  76. package/dist/e2b-terminal-lab.js +1467 -0
  77. package/dist/e2b-terminal-lab.js.map +1 -0
  78. package/dist/env-file.d.ts +14 -0
  79. package/dist/env-file.js +108 -0
  80. package/dist/env-file.js.map +1 -0
  81. package/dist/feedback.d.ts +51 -0
  82. package/dist/feedback.js +313 -0
  83. package/dist/feedback.js.map +1 -0
  84. package/dist/image-evidence.d.ts +2 -0
  85. package/dist/image-evidence.js +33 -0
  86. package/dist/image-evidence.js.map +1 -0
  87. package/dist/index.d.ts +63 -0
  88. package/dist/index.js +33 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/init-templates.d.ts +12 -0
  91. package/dist/init-templates.js +369 -0
  92. package/dist/init-templates.js.map +1 -0
  93. package/dist/init.d.ts +26 -0
  94. package/dist/init.js +343 -0
  95. package/dist/init.js.map +1 -0
  96. package/dist/lab-app-runner.d.ts +78 -0
  97. package/dist/lab-app-runner.js +403 -0
  98. package/dist/lab-app-runner.js.map +1 -0
  99. package/dist/lab-config.d.ts +578 -0
  100. package/dist/lab-config.js +1751 -0
  101. package/dist/lab-config.js.map +1 -0
  102. package/dist/lab-engine.d.ts +77 -0
  103. package/dist/lab-engine.js +216 -0
  104. package/dist/lab-engine.js.map +1 -0
  105. package/dist/lab-preflight.d.ts +67 -0
  106. package/dist/lab-preflight.js +385 -0
  107. package/dist/lab-preflight.js.map +1 -0
  108. package/dist/labs.d.ts +53 -0
  109. package/dist/labs.js +176 -0
  110. package/dist/labs.js.map +1 -0
  111. package/dist/observer-assets.d.ts +2 -0
  112. package/dist/observer-assets.js +2630 -0
  113. package/dist/observer-assets.js.map +1 -0
  114. package/dist/observer-data.d.ts +63 -0
  115. package/dist/observer-data.js +145 -0
  116. package/dist/observer-data.js.map +1 -0
  117. package/dist/observer-static.d.ts +39 -0
  118. package/dist/observer-static.js +192 -0
  119. package/dist/observer-static.js.map +1 -0
  120. package/dist/observer.d.ts +46 -0
  121. package/dist/observer.js +353 -0
  122. package/dist/observer.js.map +1 -0
  123. package/dist/openai-responses-cu.d.ts +113 -0
  124. package/dist/openai-responses-cu.js +531 -0
  125. package/dist/openai-responses-cu.js.map +1 -0
  126. package/dist/oss-lab.d.ts +52 -0
  127. package/dist/oss-lab.js +299 -0
  128. package/dist/oss-lab.js.map +1 -0
  129. package/dist/oss-meta-lab-scoring.d.ts +15 -0
  130. package/dist/oss-meta-lab-scoring.js +145 -0
  131. package/dist/oss-meta-lab-scoring.js.map +1 -0
  132. package/dist/oss-meta-lab.d.ts +279 -0
  133. package/dist/oss-meta-lab.js +4889 -0
  134. package/dist/oss-meta-lab.js.map +1 -0
  135. package/dist/oss-remote-telemetry.d.ts +77 -0
  136. package/dist/oss-remote-telemetry.js +403 -0
  137. package/dist/oss-remote-telemetry.js.map +1 -0
  138. package/dist/persona.d.ts +35 -0
  139. package/dist/persona.js +133 -0
  140. package/dist/persona.js.map +1 -0
  141. package/dist/pi-agent-core.d.ts +77 -0
  142. package/dist/pi-agent-core.js +203 -0
  143. package/dist/pi-agent-core.js.map +1 -0
  144. package/dist/program.d.ts +54 -0
  145. package/dist/program.js +2347 -0
  146. package/dist/program.js.map +1 -0
  147. package/dist/redaction.d.ts +90 -0
  148. package/dist/redaction.js +292 -0
  149. package/dist/redaction.js.map +1 -0
  150. package/dist/run.d.ts +784 -0
  151. package/dist/run.js +4555 -0
  152. package/dist/run.js.map +1 -0
  153. package/dist/scripted-browser-actor.d.ts +294 -0
  154. package/dist/scripted-browser-actor.js +1286 -0
  155. package/dist/scripted-browser-actor.js.map +1 -0
  156. package/dist/scripted-browser-lab.d.ts +107 -0
  157. package/dist/scripted-browser-lab.js +738 -0
  158. package/dist/scripted-browser-lab.js.map +1 -0
  159. package/dist/shared-world-lab.d.ts +208 -0
  160. package/dist/shared-world-lab.js +1048 -0
  161. package/dist/shared-world-lab.js.map +1 -0
  162. package/dist/source-archive.d.ts +82 -0
  163. package/dist/source-archive.js +365 -0
  164. package/dist/source-archive.js.map +1 -0
  165. package/dist/stop-conditions.d.ts +26 -0
  166. package/dist/stop-conditions.js +66 -0
  167. package/dist/stop-conditions.js.map +1 -0
  168. package/dist/terminal-agent-actor.d.ts +36 -0
  169. package/dist/terminal-agent-actor.js +23 -0
  170. package/dist/terminal-agent-actor.js.map +1 -0
  171. package/docs/architecture/actor-contract.md +431 -0
  172. package/docs/architecture/github-feedback-loop.md +189 -0
  173. package/docs/architecture/local-codex-tui-actor.md +213 -0
  174. package/docs/architecture/observer.md +118 -0
  175. package/docs/architecture/oss-lab-poc.md +242 -0
  176. package/docs/architecture/project-layout.md +166 -0
  177. package/docs/architecture/state-driven-executor.md +203 -0
  178. package/docs/architecture/terminal-product-lane.md +148 -0
  179. package/docs/contracts/adapter-fixtures.md +80 -0
  180. package/docs/contracts/core.md +71 -0
  181. package/docs/contracts/feedback.md +145 -0
  182. package/docs/contracts/policy.md +305 -0
  183. package/docs/contracts/run-bundle.md +358 -0
  184. package/docs/contracts/schemas.md +984 -0
  185. package/docs/goals/current.md +409 -0
  186. package/docs/principles/invariants-and-defaults.md +135 -0
  187. package/docs/principles/self-driving-harness.md +129 -0
  188. package/docs/product/open-source-install-experience.md +229 -0
  189. package/docs/ramp/README.md +200 -0
  190. package/docs/release/open-source-readiness.md +208 -0
  191. package/docs/release/public-readiness-standard.md +205 -0
  192. package/docs/roadmap/world-class-open-source-v0.md +311 -0
  193. package/package.json +102 -8
  194. package/skills/humanish/SKILL.md +244 -0
  195. package/skills/humanish/agents/openai.yaml +7 -0
  196. package/index.js +0 -1
@@ -0,0 +1,615 @@
1
+ import { ACTOR_TRACE_SCHEMA } from "./actor-contract.js";
2
+ import { evaluateStopWhen } from "./stop-conditions.js";
3
+ const DEFAULT_IDLE_STEPS = 6;
4
+ const DEFAULT_NO_PROGRESS_STEPS = 8;
5
+ const IDLE_PROGRESS_FORGIVENESS_STEPS = 2;
6
+ function isIdleAction(action) {
7
+ return action.kind === "screenshot" || action.kind === "wait";
8
+ }
9
+ function isIdleTurn(actions) {
10
+ return actions.length === 0 || actions.every(isIdleAction);
11
+ }
12
+ // Caps for stableProgressKey. The progress key is a coarse turn-over-turn comparison input,
13
+ // not a faithful serialization, so it bounds depth, breadth, string length, and total output —
14
+ // a huge or deeply nested appState can never blow up the comparison or the trace logging in
15
+ // tests. The values are deliberately generous (real route/turn/modal projections are tiny) but
16
+ // finite.
17
+ const STABLE_KEY_MAX_DEPTH = 6;
18
+ const STABLE_KEY_MAX_KEYS = 64;
19
+ const STABLE_KEY_MAX_ARRAY = 64;
20
+ const STABLE_KEY_MAX_STRING = 256;
21
+ const STABLE_KEY_MAX_TOTAL = 8192;
22
+ /**
23
+ * A deterministic, bounded, sorted-key projection of an appState object, used as the friction
24
+ * loop's progress key. Two structurally-equal states (regardless of key insertion order) map
25
+ * to the SAME string, so key reordering can never fabricate a progress delta; two different
26
+ * states map to different strings (within the caps).
27
+ *
28
+ * Correctness-load-bearing: it MUST NOT throw on a cyclic or huge input. Cycles are detected
29
+ * with a seen-set (a back-edge degrades to the marker "[Circular]"); depth, key count, array
30
+ * length, string length, and total output length are all capped so an adversarial or merely
31
+ * large appState degrades to a bounded value rather than crashing the loop. Pure: it never
32
+ * mutates the input. (See docs/architecture/state-driven-executor.md.)
33
+ */
34
+ export function stableProgressKey(appState) {
35
+ const seen = new Set();
36
+ let truncated = false;
37
+ const encode = (value, depth) => {
38
+ if (truncated)
39
+ return '"…"';
40
+ if (value === null)
41
+ return "null";
42
+ const type = typeof value;
43
+ if (type === "number")
44
+ return Number.isFinite(value) ? JSON.stringify(value) : `"${String(value)}"`;
45
+ if (type === "boolean")
46
+ return value ? "true" : "false";
47
+ if (type === "bigint")
48
+ return `"${value.toString()}"`;
49
+ if (type === "string") {
50
+ const s = value;
51
+ return JSON.stringify(s.length > STABLE_KEY_MAX_STRING ? `${s.slice(0, STABLE_KEY_MAX_STRING)}…` : s);
52
+ }
53
+ if (type === "function" || type === "symbol" || type === "undefined")
54
+ return `"[${type}]"`;
55
+ // object or array
56
+ if (depth >= STABLE_KEY_MAX_DEPTH)
57
+ return '"[MaxDepth]"';
58
+ if (seen.has(value))
59
+ return '"[Circular]"';
60
+ seen.add(value);
61
+ try {
62
+ if (Array.isArray(value)) {
63
+ const cap = Math.min(value.length, STABLE_KEY_MAX_ARRAY);
64
+ const parts = [];
65
+ for (let i = 0; i < cap; i += 1) {
66
+ parts.push(encode(value[i], depth + 1));
67
+ if (truncated)
68
+ break;
69
+ }
70
+ if (value.length > STABLE_KEY_MAX_ARRAY)
71
+ parts.push('"…"');
72
+ return `[${parts.join(",")}]`;
73
+ }
74
+ const record = value;
75
+ const keys = Object.keys(record).sort();
76
+ const cap = Math.min(keys.length, STABLE_KEY_MAX_KEYS);
77
+ const parts = [];
78
+ for (let i = 0; i < cap; i += 1) {
79
+ const key = keys[i];
80
+ parts.push(`${JSON.stringify(key)}:${encode(record[key], depth + 1)}`);
81
+ if (truncated)
82
+ break;
83
+ }
84
+ if (keys.length > STABLE_KEY_MAX_KEYS)
85
+ parts.push('"…":"…"');
86
+ return `{${parts.join(",")}}`;
87
+ }
88
+ finally {
89
+ // Leave the set so sibling subtrees that legitimately repeat a shared reference still
90
+ // serialize once per occurrence-path without false "Circular" hits across siblings.
91
+ seen.delete(value);
92
+ }
93
+ };
94
+ let out = encode(appState, 0);
95
+ if (out.length > STABLE_KEY_MAX_TOTAL) {
96
+ truncated = true;
97
+ out = `${out.slice(0, STABLE_KEY_MAX_TOTAL)}…`;
98
+ }
99
+ return out;
100
+ }
101
+ /** The friction progress key: a stable projection of appState when present, else stateSignature. */
102
+ function progressKeyOf(observation) {
103
+ return observation.appState !== undefined ? stableProgressKey(observation.appState) : observation.stateSignature;
104
+ }
105
+ /** A public-safe one-line action label. Never includes raw typed text. */
106
+ export function describeCuaAction(action) {
107
+ switch (action.kind) {
108
+ case "click":
109
+ return `click (${action.x}, ${action.y})`;
110
+ case "double_click":
111
+ return `double-click (${action.x}, ${action.y})`;
112
+ case "move":
113
+ return `move (${action.x}, ${action.y})`;
114
+ case "scroll":
115
+ return `scroll (${action.dx}, ${action.dy}) at (${action.x}, ${action.y})`;
116
+ case "type":
117
+ return `type [${action.text.length} chars]`;
118
+ case "keypress":
119
+ return `keypress ${action.keys.join("+")}`;
120
+ case "drag":
121
+ return `drag ${action.path.length} points`;
122
+ case "wait":
123
+ return action.ms === undefined ? "wait" : `wait ${action.ms}ms`;
124
+ case "screenshot":
125
+ return "screenshot";
126
+ }
127
+ }
128
+ function statusForCompletion(reason) {
129
+ switch (reason) {
130
+ case "goal_satisfied":
131
+ case "turn_completed": // turn_completed is a Codex-lane reason; this loop emits goal_satisfied
132
+ return "passed";
133
+ case "timed_out":
134
+ return "timed_out";
135
+ case "blocked_approval":
136
+ return "blocked";
137
+ case "gave_up":
138
+ case "actor_error":
139
+ case "step_failed": // step_failed is the scripted-browser lane's reason; this loop never emits it
140
+ case "harness_error":
141
+ return "failed";
142
+ }
143
+ }
144
+ // Distinct error classes so the loop can tell a deadline/abort apart from a real
145
+ // adapter failure when raceSettle rejects.
146
+ class CuaDeadlineError extends Error {
147
+ }
148
+ class CuaAbortError extends Error {
149
+ }
150
+ // Internal control-flow signal: the per-turn frame guard already set completionReason/reason
151
+ // to a structured harness_error; this just unwinds the loop without being misread as an adapter
152
+ // failure in the catch block (it carries no message to persist).
153
+ class CuaFrameGuardStop extends Error {
154
+ }
155
+ // Internal control-flow signal for deterministic harness stop conditions that match before the
156
+ // model is asked for another turn. completionReason/reason are already set by the caller.
157
+ class CuaStopWhenStop extends Error {
158
+ }
159
+ const neverAbort = new AbortController().signal;
160
+ /**
161
+ * Wait on a port promise, but stop waiting if the wall-clock budget runs out or
162
+ * the caller aborts. The underlying promise may still settle later (a promise
163
+ * cannot be force-cancelled); we simply stop blocking the loop on it. An
164
+ * already-settled promise always wins, so a fast op is never spuriously failed.
165
+ */
166
+ function raceSettle(promise, remainingMs, signal) {
167
+ if (signal?.aborted) {
168
+ return Promise.reject(new CuaAbortError());
169
+ }
170
+ return new Promise((resolve, reject) => {
171
+ let settled = false;
172
+ const finish = (apply) => {
173
+ if (settled)
174
+ return;
175
+ settled = true;
176
+ clearTimeout(timer);
177
+ signal?.removeEventListener("abort", onAbort);
178
+ apply();
179
+ };
180
+ const onAbort = () => finish(() => reject(new CuaAbortError()));
181
+ const timer = setTimeout(() => finish(() => reject(new CuaDeadlineError())), Math.max(0, remainingMs));
182
+ if (typeof timer.unref === "function")
183
+ timer.unref();
184
+ signal?.addEventListener("abort", onAbort, { once: true });
185
+ promise.then((value) => finish(() => resolve(value)), (error) => finish(() => reject(error)));
186
+ });
187
+ }
188
+ /**
189
+ * Drive the computer-use loop to a single explicit completion and return an
190
+ * ActorTrace. Every screenshot is redacted through the injected RedactionHooks
191
+ * before its ref is recorded, so the trace is public-safe by construction.
192
+ */
193
+ export async function runComputerUseLoop(options) {
194
+ const { instructions, provider, executor, persona, redaction, timeoutMs, now, signal, idleSteps = DEFAULT_IDLE_STEPS, noProgressSteps = DEFAULT_NO_PROGRESS_STEPS, acknowledgeSafetyChecks = () => null, redactScreenshots = false, scrubText = (text) => text, writeScreenshot = async (name) => `screenshots/${name}`, stopWhen } = options;
195
+ const noProgressRecoverySteps = Math.min(Math.max(1, noProgressSteps - 1), 3);
196
+ const idleRecoverySteps = Math.min(Math.max(1, idleSteps - 1), 3);
197
+ // Model-authored narration: literal-scrub known provisioned values, THEN pattern-redact.
198
+ // A value the model transcribes (a DB password it read on screen) has no shape, so redactText
199
+ // alone cannot catch it — the lab's scrubKnownValues, injected as scrubText, closes that.
200
+ const redactNarration = (text) => redaction.redactText(scrubText(text));
201
+ const startedAtMs = now();
202
+ const remaining = () => timeoutMs - (now() - startedAtMs);
203
+ const items = [];
204
+ const counts = {
205
+ turns: 0,
206
+ actions: 0,
207
+ screenshots: 0,
208
+ reasonings: 0,
209
+ messages: 0,
210
+ idleTurns: 0,
211
+ noProgressTurns: 0
212
+ };
213
+ let seq = 0;
214
+ let usageInput = 0;
215
+ let usageOutput = 0;
216
+ let sawUsage = false;
217
+ let lastResponseId;
218
+ let currentPhase = "initializing computer-use loop";
219
+ let lastActionTitle;
220
+ let lastMaterialActionTitle;
221
+ let lastScreenshotRef;
222
+ const recentActionTitles = [];
223
+ const nextId = (kind) => `${kind}-${(seq += 1).toString().padStart(3, "0")}`;
224
+ const bump = (key) => {
225
+ counts[key] = (counts[key] ?? 0) + 1;
226
+ };
227
+ // Whether any observation this run surfaced structured appState (a non-vision/state executor).
228
+ // RUNTIME-ONLY signal: used solely to self-describe in redaction.notes that app state drove
229
+ // progress detection and was NOT written to the trace — the appState itself never persists.
230
+ let observedAppState = false;
231
+ // Guarded screenshot persistence: a non-vision executor returns an observation with no
232
+ // screenshot, and the loop persists none that turn (counts.screenshots stays 0 → the existing
233
+ // "n/a" branch resolves redaction.screenshots). No Buffer.alloc(0) ever reaches disk.
234
+ const maybeRecordScreenshot = async (observation, label) => {
235
+ const frame = observation.screenshot;
236
+ if (frame === undefined)
237
+ return;
238
+ currentPhase = `writing screenshot ${label}`;
239
+ // Default: persist the raw frame (full fidelity, local-only). redactScreenshots flips to the
240
+ // publish-safe blurred thumbnail. Either way the bytes the model already saw were raw.
241
+ const { bytes, method } = redactScreenshots
242
+ ? await redaction.redactScreenshot(frame, { label }).then((r) => ({ bytes: r.buffer, method: r.method }))
243
+ : { bytes: frame, method: "none" };
244
+ const path = await writeScreenshot(`${label}.png`, bytes);
245
+ const screenshotRef = { path, redaction: method };
246
+ lastScreenshotRef = screenshotRef;
247
+ items.push({
248
+ id: nextId("screenshot"),
249
+ kind: "screenshot",
250
+ lifecycle: "completed",
251
+ title: label,
252
+ screenshotRef
253
+ });
254
+ bump("screenshots");
255
+ };
256
+ const matchedStopWhen = (observation) => evaluateStopWhen(stopWhen, {
257
+ ...(observation.url === undefined ? {} : { url: observation.url }),
258
+ ...(observation.text === undefined ? {} : { text: observation.text }),
259
+ ...(observation.appState === undefined ? {} : { appState: observation.appState })
260
+ });
261
+ let completionReason = "goal_satisfied";
262
+ let reason = "computer-use loop completed";
263
+ let stopConditionMatch;
264
+ // A vision provider against a screenshot-less observation is a fail-closed harness error, not
265
+ // a silent crash: record it and break. Returns true when the run must stop. (The provider sets
266
+ // requiresFrame; a state-reasoning provider omits it.)
267
+ const frameGuardTripped = (observation) => {
268
+ if (provider.requiresFrame === true && observation.screenshot === undefined) {
269
+ completionReason = "harness_error";
270
+ reason = `provider ${provider.id} requires a screenshot frame but the executor returned an observation with no screenshot (vision provider against a state-only executor)`;
271
+ return true;
272
+ }
273
+ return false;
274
+ };
275
+ // Loop-local state. Declared here (before the try) so the initial observe + the per-turn
276
+ // frame guard can fail closed cleanly while these still scope across the loop.
277
+ let previousResponseId;
278
+ let consecutiveIdle = 0;
279
+ // One canonical "no progress" signal: turns that did not change the UI state
280
+ // signature (idle or not). The nudge, the stop threshold, and the reason all
281
+ // key off this counter, and it catches alternating idle/no-progress stalls
282
+ // that two separate counters would let slip past every backstop but the clock.
283
+ let consecutiveNoProgress = 0;
284
+ let lastSignature = "";
285
+ let contextHint;
286
+ let idleProgressForgivenessUsed = 0;
287
+ // Acks granted for the previous turn's safety checks. They must ride the
288
+ // NEXT request (the one carrying that call's computer_call_output), so they
289
+ // are staged here rather than written onto the request already sent.
290
+ let pendingAcks;
291
+ try {
292
+ currentPhase = "observing initial UI state";
293
+ let observation = await raceSettle(executor.observe(), remaining(), signal);
294
+ if (observation.appState !== undefined)
295
+ observedAppState = true;
296
+ // Fail closed BEFORE the first turn if a vision provider got a screenshot-less observation.
297
+ if (frameGuardTripped(observation))
298
+ throw new CuaFrameGuardStop();
299
+ await maybeRecordScreenshot(observation, "turn-00-start");
300
+ stopConditionMatch = matchedStopWhen(observation);
301
+ if (stopConditionMatch) {
302
+ completionReason = "goal_satisfied";
303
+ reason = stopWhenReason(stopConditionMatch);
304
+ items.push(stopWhenTraceItem(nextId("notice"), stopConditionMatch, redactNarration));
305
+ throw new CuaStopWhenStop();
306
+ }
307
+ // The progress key prefers a stable appState projection (route/turn/modal deltas drive
308
+ // progress) and falls back to the executor's stateSignature — so a state executor with a
309
+ // constant signature still registers progress, and a vision executor behaves exactly as before.
310
+ lastSignature = progressKeyOf(observation);
311
+ // Bounded by wall-clock and the friction backstops, never a turn count.
312
+ for (;;) {
313
+ if (signal?.aborted) {
314
+ completionReason = "harness_error";
315
+ reason = "run aborted by the harness";
316
+ break;
317
+ }
318
+ if (now() - startedAtMs > timeoutMs) {
319
+ completionReason = "timed_out";
320
+ reason = `wall-clock deadline reached after ${timeoutMs}ms`;
321
+ break;
322
+ }
323
+ const turnNumber = (counts.turns ?? 0) + 1;
324
+ const request = { instructions, observation };
325
+ if (previousResponseId !== undefined)
326
+ request.previousResponseId = previousResponseId;
327
+ if (contextHint !== undefined)
328
+ request.contextHint = contextHint;
329
+ if (pendingAcks !== undefined)
330
+ request.acknowledgedSafetyChecks = pendingAcks;
331
+ contextHint = undefined;
332
+ pendingAcks = undefined;
333
+ currentPhase = `requesting provider turn ${turnNumber}`;
334
+ const turn = await raceSettle(provider.nextTurn(request, signal ?? neverAbort), remaining(), signal);
335
+ bump("turns");
336
+ previousResponseId = turn.responseId ?? previousResponseId;
337
+ lastResponseId = turn.responseId ?? lastResponseId;
338
+ if (turn.usage) {
339
+ sawUsage = true;
340
+ usageInput += turn.usage.input ?? 0;
341
+ usageOutput += turn.usage.output ?? 0;
342
+ }
343
+ if (turn.reasoning) {
344
+ items.push({
345
+ id: nextId("reasoning"),
346
+ kind: "reasoning",
347
+ lifecycle: "completed",
348
+ title: `reasoning turn ${turnNumber}`,
349
+ text: redactNarration(turn.reasoning)
350
+ });
351
+ bump("reasonings");
352
+ }
353
+ if (turn.message) {
354
+ items.push({
355
+ id: nextId("message"),
356
+ kind: "message",
357
+ lifecycle: "completed",
358
+ title: `message turn ${turnNumber}`,
359
+ text: redactNarration(turn.message)
360
+ });
361
+ bump("messages");
362
+ }
363
+ if (turn.pendingSafetyChecks.length > 0) {
364
+ const acks = acknowledgeSafetyChecks(turn.pendingSafetyChecks);
365
+ if (acks === null || acks.length === 0) {
366
+ // Safety-check categories are provider-defined enums (e.g.
367
+ // "malicious_instructions"), not free text; record them (redacted for
368
+ // defense-in-depth) so the evidence shows WHY the run paused.
369
+ const checks = redaction.redactText(turn.pendingSafetyChecks.map((check) => check.code).join(", "));
370
+ items.push({
371
+ id: nextId("approval"),
372
+ kind: "approval",
373
+ lifecycle: "completed",
374
+ status: "blocked",
375
+ title: `safety check: ${checks}`
376
+ });
377
+ completionReason = "blocked_approval";
378
+ reason = `paused on model safety check(s): ${checks}; not acknowledged`;
379
+ break;
380
+ }
381
+ pendingAcks = acks;
382
+ }
383
+ if (turn.done || turn.actions.length === 0) {
384
+ completionReason = "goal_satisfied";
385
+ const summary = turn.message?.trim();
386
+ reason = summary
387
+ ? redactNarration(summary)
388
+ : "model reported a natural endpoint with no further action";
389
+ break;
390
+ }
391
+ const idleThisTurn = isIdleTurn(turn.actions);
392
+ for (const action of turn.actions) {
393
+ if (signal?.aborted)
394
+ throw new CuaAbortError();
395
+ const actionTitle = describeCuaAction(action);
396
+ lastActionTitle = actionTitle;
397
+ recentActionTitles.push(actionTitle);
398
+ if (recentActionTitles.length > 8)
399
+ recentActionTitles.shift();
400
+ if (!isIdleAction(action))
401
+ lastMaterialActionTitle = actionTitle;
402
+ bump("actions");
403
+ currentPhase = `executing ${actionTitle}`;
404
+ // Record the action as completed only AFTER execute() resolves: a failed
405
+ // action must not appear as a plainly-completed ui_action (#248). On
406
+ // failure the error notice below captures the failing action + phase.
407
+ await raceSettle(executor.execute(action), remaining(), signal);
408
+ items.push({
409
+ id: nextId("ui_action"),
410
+ kind: "ui_action",
411
+ lifecycle: "completed",
412
+ title: actionTitle
413
+ });
414
+ }
415
+ if (signal?.aborted)
416
+ throw new CuaAbortError();
417
+ currentPhase = `observing UI state after turn ${turnNumber}`;
418
+ observation = await raceSettle(executor.observe(), remaining(), signal);
419
+ if (observation.appState !== undefined)
420
+ observedAppState = true;
421
+ // Per-turn fail-closed vision guard: a vision provider can never reason over a missing frame.
422
+ if (frameGuardTripped(observation))
423
+ break;
424
+ await maybeRecordScreenshot(observation, `turn-${turnNumber.toString().padStart(2, "0")}`);
425
+ stopConditionMatch = matchedStopWhen(observation);
426
+ if (stopConditionMatch) {
427
+ completionReason = "goal_satisfied";
428
+ reason = stopWhenReason(stopConditionMatch);
429
+ items.push(stopWhenTraceItem(nextId("notice"), stopConditionMatch, redactNarration));
430
+ break;
431
+ }
432
+ // Progress prefers the stable appState projection; a state executor with a constant
433
+ // stateSignature still registers progress when its appState changed (and vice versa).
434
+ const progressKey = progressKeyOf(observation);
435
+ const progressed = progressKey !== lastSignature;
436
+ lastSignature = progressKey;
437
+ // A screenshot/wait turn while the UI visibly changes may be patience through loading or a
438
+ // transition, so grant a bounded recovery window. Do not grant infinite immunity: animated
439
+ // pixels or state-executor turn counters can otherwise keep a screenshot/wait loop alive
440
+ // until the wall-clock timeout.
441
+ if (idleThisTurn) {
442
+ if (progressed && idleProgressForgivenessUsed < IDLE_PROGRESS_FORGIVENESS_STEPS) {
443
+ idleProgressForgivenessUsed += 1;
444
+ consecutiveIdle = 0;
445
+ }
446
+ else {
447
+ consecutiveIdle += 1;
448
+ }
449
+ }
450
+ else {
451
+ idleProgressForgivenessUsed = 0;
452
+ consecutiveIdle = 0;
453
+ }
454
+ if (idleThisTurn)
455
+ bump("idleTurns");
456
+ consecutiveNoProgress = progressed ? 0 : consecutiveNoProgress + 1;
457
+ if (!progressed)
458
+ bump("noProgressTurns");
459
+ // Recovery nudge before the backstop trips: tell the model it is stuck.
460
+ const contextHints = [];
461
+ if (consecutiveNoProgress >= noProgressRecoverySteps && consecutiveNoProgress < noProgressSteps) {
462
+ contextHints.push(`No visible progress for ${consecutiveNoProgress} step(s). ` +
463
+ "Try a different visible control, scroll within a panel, or stop with a final summary.");
464
+ }
465
+ if (consecutiveIdle >= idleRecoverySteps && consecutiveIdle < idleSteps) {
466
+ contextHints.push(`You are only waiting or taking screenshots for ${consecutiveIdle} step(s). ` +
467
+ "If visible controls are actionable, choose one; otherwise stop with a blocker summary.");
468
+ }
469
+ if (contextHints.length > 0)
470
+ contextHint = contextHints.join(" ");
471
+ if (consecutiveIdle >= idleSteps) {
472
+ completionReason = "gave_up";
473
+ reason = `gave up: ${consecutiveIdle} consecutive turns with no material UI action (only screenshot/wait)`;
474
+ items.push(backstopTraceItem({
475
+ id: nextId("notice"),
476
+ reason,
477
+ lastMaterialActionTitle,
478
+ recentActionTitles,
479
+ screenshotRef: lastScreenshotRef,
480
+ redactNarration
481
+ }));
482
+ break;
483
+ }
484
+ if (consecutiveNoProgress >= noProgressSteps) {
485
+ completionReason = "gave_up";
486
+ reason = `gave up: ${consecutiveNoProgress} consecutive turns with no change to the UI state`;
487
+ items.push(backstopTraceItem({
488
+ id: nextId("notice"),
489
+ reason,
490
+ lastMaterialActionTitle,
491
+ recentActionTitles,
492
+ screenshotRef: lastScreenshotRef,
493
+ redactNarration
494
+ }));
495
+ break;
496
+ }
497
+ }
498
+ }
499
+ catch (error) {
500
+ if (error instanceof CuaFrameGuardStop || error instanceof CuaStopWhenStop) {
501
+ // completionReason/reason were already set by the frame guard or stopWhen guard.
502
+ }
503
+ else if (error instanceof CuaDeadlineError) {
504
+ completionReason = "timed_out";
505
+ reason = `wall-clock deadline reached after ${timeoutMs}ms`;
506
+ }
507
+ else if (error instanceof CuaAbortError) {
508
+ completionReason = "harness_error";
509
+ reason = "run aborted by the harness";
510
+ }
511
+ else {
512
+ completionReason = "actor_error";
513
+ const rawMessage = error instanceof Error ? error.message : String(error);
514
+ const message = redactNarration(rawMessage);
515
+ reason = redactNarration(`computer-use loop error: ${rawMessage}`);
516
+ items.push({
517
+ id: nextId("notice"),
518
+ kind: "notice",
519
+ lifecycle: "completed",
520
+ status: "error",
521
+ title: "computer-use loop error",
522
+ text: [
523
+ `phase: ${redactNarration(currentPhase)}`,
524
+ error instanceof Error && error.name ? `error: ${redactNarration(error.name)}` : undefined,
525
+ `message: ${message}`,
526
+ lastActionTitle === undefined ? undefined : `last action: ${redactNarration(lastActionTitle)}`
527
+ ].filter(Boolean).join("; "),
528
+ ...(lastScreenshotRef === undefined ? {} : { screenshotRef: lastScreenshotRef })
529
+ });
530
+ }
531
+ }
532
+ const completedAtMs = now();
533
+ const status = statusForCompletion(completionReason);
534
+ const ids = {};
535
+ if (provider.version !== undefined)
536
+ ids.model = provider.version;
537
+ // responseId is provider-authored and opaque; redact for defense-in-depth.
538
+ if (lastResponseId !== undefined)
539
+ ids.turnId = redaction.redactText(lastResponseId);
540
+ const screenshotNote = !(counts.screenshots && counts.screenshots > 0)
541
+ ? "no screenshots captured"
542
+ : redactScreenshots
543
+ ? `${counts.screenshots} screenshot(s) redacted to blurred thumbnails via RedactionHooks`
544
+ : `${counts.screenshots} full-fidelity screenshot(s) retained for local use — NOT redacted for publishing; set redactScreenshots to blur a share-as-is bundle`;
545
+ // Self-describing artifact (invariant 6): when a non-vision executor surfaced structured app
546
+ // state, the trace declares HOW it handled that surface — app state drove progress detection
547
+ // each turn and was NOT written to the trace (it is a runtime-only progress input, like
548
+ // stateSignature). The appState itself never appears anywhere in this bundle.
549
+ const notes = observedAppState
550
+ ? `${screenshotNote}. App state was observed each turn to drive progress detection (a state-driven executor) and was NOT written to the trace — it is a runtime-only progress input, never persisted as evidence in this slice.`
551
+ : screenshotNote;
552
+ const trace = {
553
+ schema: ACTOR_TRACE_SCHEMA,
554
+ provider: provider.id,
555
+ ...(provider.version === undefined ? {} : { providerVersion: provider.version }),
556
+ protocol: "cua-loop",
557
+ lane: "computer-use",
558
+ persona,
559
+ redaction: {
560
+ status: "passed",
561
+ screenshots: !(counts.screenshots && counts.screenshots > 0)
562
+ ? "n/a"
563
+ : redactScreenshots
564
+ ? "blurred"
565
+ : "raw",
566
+ notes
567
+ },
568
+ startedAt: new Date(startedAtMs).toISOString(),
569
+ completedAt: new Date(completedAtMs).toISOString(),
570
+ durationMs: completedAtMs - startedAtMs,
571
+ status,
572
+ completionReason,
573
+ reason,
574
+ ids,
575
+ counts,
576
+ items,
577
+ ...(sawUsage ? { tokenUsage: { input: usageInput, output: usageOutput, total: usageInput + usageOutput } } : {}),
578
+ capabilities: provider.capabilities
579
+ };
580
+ return { status, completionReason, reason, trace };
581
+ }
582
+ function stopWhenReason(match) {
583
+ return `stopWhen matched ${match.id} (${match.kinds.join("+")})`;
584
+ }
585
+ function stopWhenTraceItem(id, match, redactNarration) {
586
+ return {
587
+ id,
588
+ kind: "notice",
589
+ lifecycle: "completed",
590
+ status: "matched",
591
+ title: `stopWhen matched: ${match.id}`,
592
+ text: redactNarration(`Harness stop condition matched rule ${match.id} using ${match.kinds.join(", ")}. Raw observed URL/text/appState were runtime-only and were not persisted; when a screenshot was available, the immediately preceding screenshot item is the visual evidence for the matched surface.`)
593
+ };
594
+ }
595
+ function backstopTraceItem(args) {
596
+ const details = [
597
+ `reason: ${args.reason}`,
598
+ args.lastMaterialActionTitle === undefined
599
+ ? "last material action: none"
600
+ : `last material action: ${args.lastMaterialActionTitle}`,
601
+ args.recentActionTitles.length === 0
602
+ ? "recent actions: none"
603
+ : `recent actions: ${args.recentActionTitles.join(" -> ")}`
604
+ ];
605
+ return {
606
+ id: args.id,
607
+ kind: "notice",
608
+ lifecycle: "completed",
609
+ status: "blocked",
610
+ title: "computer-use backstop gave up",
611
+ text: args.redactNarration(details.join("; ")),
612
+ ...(args.screenshotRef === undefined ? {} : { screenshotRef: args.screenshotRef })
613
+ };
614
+ }
615
+ //# sourceMappingURL=computer-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computer-use.js","sourceRoot":"","sources":["../src/computer-use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function mapWithConcurrency<T, R>(items: T[], concurrency: number, mapper: (item: T, index: number) => Promise<R>): Promise<R[]>;