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.
- package/AGENTS.md +77 -0
- package/CONTRIBUTING.md +39 -0
- package/LICENSE +21 -0
- package/README.md +435 -8
- package/SECURITY.md +34 -0
- package/dist/actor-contract.d.ts +107 -0
- package/dist/actor-contract.js +286 -0
- package/dist/actor-contract.js.map +1 -0
- package/dist/actor-registry.d.ts +73 -0
- package/dist/actor-registry.js +93 -0
- package/dist/actor-registry.js.map +1 -0
- package/dist/adapter-extension.d.ts +54 -0
- package/dist/adapter-extension.js +214 -0
- package/dist/adapter-extension.js.map +1 -0
- package/dist/argv.d.ts +1 -0
- package/dist/argv.js +8 -0
- package/dist/argv.js.map +1 -0
- package/dist/artifact-reference.d.ts +22 -0
- package/dist/artifact-reference.js +47 -0
- package/dist/artifact-reference.js.map +1 -0
- package/dist/browser-evidence-hygiene.d.ts +7 -0
- package/dist/browser-evidence-hygiene.js +40 -0
- package/dist/browser-evidence-hygiene.js.map +1 -0
- package/dist/claude-agent-sdk.d.ts +94 -0
- package/dist/claude-agent-sdk.js +356 -0
- package/dist/claude-agent-sdk.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex-app-server-ui.d.ts +39 -0
- package/dist/codex-app-server-ui.js +327 -0
- package/dist/codex-app-server-ui.js.map +1 -0
- package/dist/codex-app-server.d.ts +141 -0
- package/dist/codex-app-server.js +747 -0
- package/dist/codex-app-server.js.map +1 -0
- package/dist/command-failure.d.ts +29 -0
- package/dist/command-failure.js +54 -0
- package/dist/command-failure.js.map +1 -0
- package/dist/computer-use-actor.d.ts +52 -0
- package/dist/computer-use-actor.js +48 -0
- package/dist/computer-use-actor.js.map +1 -0
- package/dist/computer-use.d.ts +232 -0
- package/dist/computer-use.js +615 -0
- package/dist/computer-use.js.map +1 -0
- package/dist/concurrency.d.ts +1 -0
- package/dist/concurrency.js +27 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/concurrent-shared-world-lab.d.ts +115 -0
- package/dist/concurrent-shared-world-lab.js +1092 -0
- package/dist/concurrent-shared-world-lab.js.map +1 -0
- package/dist/core/git-state.d.ts +31 -0
- package/dist/core/git-state.js +142 -0
- package/dist/core/git-state.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/run-primitives.d.ts +66 -0
- package/dist/core/run-primitives.js +120 -0
- package/dist/core/run-primitives.js.map +1 -0
- package/dist/cua-actor-lab.d.ts +620 -0
- package/dist/cua-actor-lab.js +2834 -0
- package/dist/cua-actor-lab.js.map +1 -0
- package/dist/device-presets.d.ts +67 -0
- package/dist/device-presets.js +50 -0
- package/dist/device-presets.js.map +1 -0
- package/dist/e2b-desktop-executor.d.ts +101 -0
- package/dist/e2b-desktop-executor.js +309 -0
- package/dist/e2b-desktop-executor.js.map +1 -0
- package/dist/e2b-desktop-launch.d.ts +144 -0
- package/dist/e2b-desktop-launch.js +59 -0
- package/dist/e2b-desktop-launch.js.map +1 -0
- package/dist/e2b-detached.d.ts +53 -0
- package/dist/e2b-detached.js +130 -0
- package/dist/e2b-detached.js.map +1 -0
- package/dist/e2b-terminal-lab.d.ts +345 -0
- package/dist/e2b-terminal-lab.js +1467 -0
- package/dist/e2b-terminal-lab.js.map +1 -0
- package/dist/env-file.d.ts +14 -0
- package/dist/env-file.js +108 -0
- package/dist/env-file.js.map +1 -0
- package/dist/feedback.d.ts +51 -0
- package/dist/feedback.js +313 -0
- package/dist/feedback.js.map +1 -0
- package/dist/image-evidence.d.ts +2 -0
- package/dist/image-evidence.js +33 -0
- package/dist/image-evidence.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/init-templates.d.ts +12 -0
- package/dist/init-templates.js +369 -0
- package/dist/init-templates.js.map +1 -0
- package/dist/init.d.ts +26 -0
- package/dist/init.js +343 -0
- package/dist/init.js.map +1 -0
- package/dist/lab-app-runner.d.ts +78 -0
- package/dist/lab-app-runner.js +403 -0
- package/dist/lab-app-runner.js.map +1 -0
- package/dist/lab-config.d.ts +578 -0
- package/dist/lab-config.js +1751 -0
- package/dist/lab-config.js.map +1 -0
- package/dist/lab-engine.d.ts +77 -0
- package/dist/lab-engine.js +216 -0
- package/dist/lab-engine.js.map +1 -0
- package/dist/lab-preflight.d.ts +67 -0
- package/dist/lab-preflight.js +385 -0
- package/dist/lab-preflight.js.map +1 -0
- package/dist/labs.d.ts +53 -0
- package/dist/labs.js +176 -0
- package/dist/labs.js.map +1 -0
- package/dist/observer-assets.d.ts +2 -0
- package/dist/observer-assets.js +2630 -0
- package/dist/observer-assets.js.map +1 -0
- package/dist/observer-data.d.ts +63 -0
- package/dist/observer-data.js +145 -0
- package/dist/observer-data.js.map +1 -0
- package/dist/observer-static.d.ts +39 -0
- package/dist/observer-static.js +192 -0
- package/dist/observer-static.js.map +1 -0
- package/dist/observer.d.ts +46 -0
- package/dist/observer.js +353 -0
- package/dist/observer.js.map +1 -0
- package/dist/openai-responses-cu.d.ts +113 -0
- package/dist/openai-responses-cu.js +531 -0
- package/dist/openai-responses-cu.js.map +1 -0
- package/dist/oss-lab.d.ts +52 -0
- package/dist/oss-lab.js +299 -0
- package/dist/oss-lab.js.map +1 -0
- package/dist/oss-meta-lab-scoring.d.ts +15 -0
- package/dist/oss-meta-lab-scoring.js +145 -0
- package/dist/oss-meta-lab-scoring.js.map +1 -0
- package/dist/oss-meta-lab.d.ts +279 -0
- package/dist/oss-meta-lab.js +4889 -0
- package/dist/oss-meta-lab.js.map +1 -0
- package/dist/oss-remote-telemetry.d.ts +77 -0
- package/dist/oss-remote-telemetry.js +403 -0
- package/dist/oss-remote-telemetry.js.map +1 -0
- package/dist/persona.d.ts +35 -0
- package/dist/persona.js +133 -0
- package/dist/persona.js.map +1 -0
- package/dist/pi-agent-core.d.ts +77 -0
- package/dist/pi-agent-core.js +203 -0
- package/dist/pi-agent-core.js.map +1 -0
- package/dist/program.d.ts +54 -0
- package/dist/program.js +2347 -0
- package/dist/program.js.map +1 -0
- package/dist/redaction.d.ts +90 -0
- package/dist/redaction.js +292 -0
- package/dist/redaction.js.map +1 -0
- package/dist/run.d.ts +784 -0
- package/dist/run.js +4555 -0
- package/dist/run.js.map +1 -0
- package/dist/scripted-browser-actor.d.ts +294 -0
- package/dist/scripted-browser-actor.js +1286 -0
- package/dist/scripted-browser-actor.js.map +1 -0
- package/dist/scripted-browser-lab.d.ts +107 -0
- package/dist/scripted-browser-lab.js +738 -0
- package/dist/scripted-browser-lab.js.map +1 -0
- package/dist/shared-world-lab.d.ts +208 -0
- package/dist/shared-world-lab.js +1048 -0
- package/dist/shared-world-lab.js.map +1 -0
- package/dist/source-archive.d.ts +82 -0
- package/dist/source-archive.js +365 -0
- package/dist/source-archive.js.map +1 -0
- package/dist/stop-conditions.d.ts +26 -0
- package/dist/stop-conditions.js +66 -0
- package/dist/stop-conditions.js.map +1 -0
- package/dist/terminal-agent-actor.d.ts +36 -0
- package/dist/terminal-agent-actor.js +23 -0
- package/dist/terminal-agent-actor.js.map +1 -0
- package/docs/architecture/actor-contract.md +431 -0
- package/docs/architecture/github-feedback-loop.md +189 -0
- package/docs/architecture/local-codex-tui-actor.md +213 -0
- package/docs/architecture/observer.md +118 -0
- package/docs/architecture/oss-lab-poc.md +242 -0
- package/docs/architecture/project-layout.md +166 -0
- package/docs/architecture/state-driven-executor.md +203 -0
- package/docs/architecture/terminal-product-lane.md +148 -0
- package/docs/contracts/adapter-fixtures.md +80 -0
- package/docs/contracts/core.md +71 -0
- package/docs/contracts/feedback.md +145 -0
- package/docs/contracts/policy.md +305 -0
- package/docs/contracts/run-bundle.md +358 -0
- package/docs/contracts/schemas.md +984 -0
- package/docs/goals/current.md +409 -0
- package/docs/principles/invariants-and-defaults.md +135 -0
- package/docs/principles/self-driving-harness.md +129 -0
- package/docs/product/open-source-install-experience.md +229 -0
- package/docs/ramp/README.md +200 -0
- package/docs/release/open-source-readiness.md +208 -0
- package/docs/release/public-readiness-standard.md +205 -0
- package/docs/roadmap/world-class-open-source-v0.md +311 -0
- package/package.json +102 -8
- package/skills/humanish/SKILL.md +244 -0
- package/skills/humanish/agents/openai.yaml +7 -0
- 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[]>;
|