@farmslot/recipe-runner 0.28.5 → 0.30.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/CHANGELOG.md +13 -0
- package/dist/adapters/core.d.ts +32 -1
- package/dist/adapters/core.d.ts.map +1 -1
- package/dist/adapters/core.js +152 -38
- package/dist/adapters/core.js.map +1 -1
- package/dist/adapters/ui.d.ts +2 -0
- package/dist/adapters/ui.d.ts.map +1 -1
- package/dist/adapters/ui.js +79 -37
- package/dist/adapters/ui.js.map +1 -1
- package/dist/cli/support.d.ts.map +1 -1
- package/dist/cli/support.js +5 -1
- package/dist/cli/support.js.map +1 -1
- package/dist/core/execution-signal.d.ts +4 -0
- package/dist/core/execution-signal.d.ts.map +1 -0
- package/dist/core/execution-signal.js +13 -0
- package/dist/core/execution-signal.js.map +1 -0
- package/dist/core/execution.d.ts +4 -0
- package/dist/core/execution.d.ts.map +1 -1
- package/dist/core/execution.js +86 -12
- package/dist/core/execution.js.map +1 -1
- package/dist/core/failure.d.ts +2 -0
- package/dist/core/failure.d.ts.map +1 -1
- package/dist/core/failure.js +10 -0
- package/dist/core/failure.js.map +1 -1
- package/dist/core/graph.d.ts +1 -0
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +2 -2
- package/dist/core/graph.js.map +1 -1
- package/dist/core/hud.d.ts.map +1 -1
- package/dist/core/hud.js +3 -3
- package/dist/core/hud.js.map +1 -1
- package/dist/core/invocation.d.ts +4 -1
- package/dist/core/invocation.d.ts.map +1 -1
- package/dist/core/invocation.js +3 -1
- package/dist/core/invocation.js.map +1 -1
- package/dist/core/recording-limits.d.ts +4 -0
- package/dist/core/recording-limits.d.ts.map +1 -0
- package/dist/core/recording-limits.js +74 -0
- package/dist/core/recording-limits.js.map +1 -0
- package/dist/core/recording-segments.d.ts +4 -0
- package/dist/core/recording-segments.d.ts.map +1 -0
- package/dist/core/recording-segments.js +101 -0
- package/dist/core/recording-segments.js.map +1 -0
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +336 -108
- package/dist/core/runner.js.map +1 -1
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js +2 -0
- package/dist/core/trace.js.map +1 -1
- package/dist/core/types.d.ts +40 -22
- package/dist/core/types.d.ts.map +1 -1
- package/dist/evidence/assertions.d.ts +50 -0
- package/dist/evidence/assertions.d.ts.map +1 -0
- package/dist/evidence/assertions.js +156 -0
- package/dist/evidence/assertions.js.map +1 -0
- package/dist/evidence/claims.d.ts +15 -0
- package/dist/evidence/claims.d.ts.map +1 -0
- package/dist/evidence/claims.js +201 -0
- package/dist/evidence/claims.js.map +1 -0
- package/dist/evidence/index.d.ts +4 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +3 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/moments.d.ts +8 -0
- package/dist/evidence/moments.d.ts.map +1 -0
- package/dist/evidence/moments.js +26 -0
- package/dist/evidence/moments.js.map +1 -0
- package/dist/evidence/package.d.ts +4 -0
- package/dist/evidence/package.d.ts.map +1 -0
- package/dist/evidence/package.js +140 -0
- package/dist/evidence/package.js.map +1 -0
- package/dist/evidence/plan.d.ts +9 -0
- package/dist/evidence/plan.d.ts.map +1 -0
- package/dist/evidence/plan.js +87 -0
- package/dist/evidence/plan.js.map +1 -0
- package/dist/evidence/read-package.d.ts +14 -0
- package/dist/evidence/read-package.d.ts.map +1 -0
- package/dist/evidence/read-package.js +153 -0
- package/dist/evidence/read-package.js.map +1 -0
- package/dist/evidence/stills.d.ts +5 -0
- package/dist/evidence/stills.d.ts.map +1 -0
- package/dist/evidence/stills.js +58 -0
- package/dist/evidence/stills.js.map +1 -0
- package/dist/file-digest.d.ts +3 -0
- package/dist/file-digest.d.ts.map +1 -0
- package/dist/file-digest.js +4 -0
- package/dist/file-digest.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/recording/android-mirror.d.ts.map +1 -1
- package/dist/recording/android-mirror.js +17 -8
- package/dist/recording/android-mirror.js.map +1 -1
- package/dist/recording/capture-helper-timing.d.ts +2 -2
- package/dist/recording/capture-helper-timing.d.ts.map +1 -1
- package/dist/recording/capture-helper.d.ts.map +1 -1
- package/dist/recording/capture-helper.js +24 -12
- package/dist/recording/capture-helper.js.map +1 -1
- package/dist/recording/cdp-video-recorder.d.ts +2 -0
- package/dist/recording/cdp-video-recorder.d.ts.map +1 -1
- package/dist/recording/cdp-video-recorder.js +160 -50
- package/dist/recording/cdp-video-recorder.js.map +1 -1
- package/dist/recording/timeline.d.ts +2 -2
- package/dist/recording/timeline.d.ts.map +1 -1
- package/dist/runtime/cdp.d.ts +1 -0
- package/dist/runtime/cdp.d.ts.map +1 -1
- package/dist/runtime/cdp.js +71 -16
- package/dist/runtime/cdp.js.map +1 -1
- package/package.json +8 -3
|
@@ -13,13 +13,20 @@ class CdpVideoRecorder {
|
|
|
13
13
|
#cdpHost;
|
|
14
14
|
#urlIncludes;
|
|
15
15
|
#ffmpegPath;
|
|
16
|
+
#spoolBytes;
|
|
16
17
|
constructor(options) {
|
|
17
18
|
this.name = 'cdp-screencast';
|
|
19
|
+
this.continuousSegments = true;
|
|
18
20
|
this.platform = 'web';
|
|
19
21
|
this.#cdpPort = options.cdpPort;
|
|
20
22
|
this.#cdpHost = options.cdpHost ?? '127.0.0.1';
|
|
21
23
|
this.#urlIncludes = options.urlIncludes;
|
|
22
24
|
this.#ffmpegPath = options.ffmpegPath ?? process.env.FFMPEG_PATH ?? 'ffmpeg';
|
|
25
|
+
this.#spoolBytes = options.spoolBytes ?? 16 * 1024 * 1024;
|
|
26
|
+
if (!Number.isInteger(this.#spoolBytes) ||
|
|
27
|
+
this.#spoolBytes < 1 ||
|
|
28
|
+
this.#spoolBytes > 16 * 1024 * 1024)
|
|
29
|
+
throw new Error('CDP spoolBytes must be between 1 and 16 MiB.');
|
|
23
30
|
}
|
|
24
31
|
async doctor() {
|
|
25
32
|
try {
|
|
@@ -48,15 +55,23 @@ class CdpVideoRecorder {
|
|
|
48
55
|
}
|
|
49
56
|
}
|
|
50
57
|
async start(request) {
|
|
51
|
-
const maxFps = request.maxFps ??
|
|
58
|
+
const maxFps = request.maxFps ?? 15;
|
|
52
59
|
if (!Number.isFinite(maxFps) || maxFps <= 0)
|
|
53
60
|
throw new Error('Recording maxFps must be positive.');
|
|
61
|
+
const spoolLimit = this.#spoolBytes;
|
|
62
|
+
const recordingTarget = request.target;
|
|
54
63
|
const target = await selectCdpTarget({
|
|
55
64
|
host: this.#cdpHost,
|
|
56
65
|
port: this.#cdpPort,
|
|
57
66
|
type: 'page',
|
|
58
67
|
urlIncludes: this.#urlIncludes,
|
|
68
|
+
...(recordingTarget.kind === 'cdp-page'
|
|
69
|
+
? { predicate: (target) => target.id === recordingTarget.targetId }
|
|
70
|
+
: {}),
|
|
59
71
|
});
|
|
72
|
+
if (request.target.kind === 'cdp-page' &&
|
|
73
|
+
(request.target.host !== this.#cdpHost || request.target.port !== this.#cdpPort))
|
|
74
|
+
throw new Error('CDP recording target belongs to a different endpoint.');
|
|
60
75
|
if (!target.webSocketDebuggerUrl)
|
|
61
76
|
throw new Error('Selected CDP target has no debugger URL.');
|
|
62
77
|
const session = await CdpSession.connect(target.webSocketDebuggerUrl);
|
|
@@ -68,11 +83,15 @@ class CdpVideoRecorder {
|
|
|
68
83
|
session.close();
|
|
69
84
|
throw error;
|
|
70
85
|
}
|
|
71
|
-
|
|
86
|
+
let timestamps = [];
|
|
87
|
+
let spoolBytes = 0;
|
|
88
|
+
let pendingBytes = 0;
|
|
72
89
|
let lastReceivedAt = 0;
|
|
90
|
+
const segments = [];
|
|
73
91
|
const pendingAcks = new Set();
|
|
74
92
|
let captureError;
|
|
75
93
|
let receivedFrames = 0;
|
|
94
|
+
let latestFrame;
|
|
76
95
|
const sampler = new RecordingFrameSampler(maxFps);
|
|
77
96
|
let writeChain = Promise.resolve();
|
|
78
97
|
let clock;
|
|
@@ -83,11 +102,60 @@ class CdpVideoRecorder {
|
|
|
83
102
|
catch (error) {
|
|
84
103
|
clockError = `Recording clock unavailable: ${errorMessage(error)}`;
|
|
85
104
|
}
|
|
105
|
+
const ffmpegPath = this.#ffmpegPath;
|
|
106
|
+
const flush = async (endSourceMs) => {
|
|
107
|
+
if (!timestamps.length)
|
|
108
|
+
return;
|
|
109
|
+
const output = segments.length === 0
|
|
110
|
+
? request.outputPath
|
|
111
|
+
: request.outputPath.replace(/\.mp4$/u, `-${segments.length}.mp4`);
|
|
112
|
+
await encodePngSequenceToMp4({
|
|
113
|
+
ffmpegPath,
|
|
114
|
+
framesDir,
|
|
115
|
+
outputPath: output,
|
|
116
|
+
timestamps,
|
|
117
|
+
lastFrameDurationMs: Math.max(1, endSourceMs - timestamps.at(-1)),
|
|
118
|
+
});
|
|
119
|
+
const stats = await stat(output);
|
|
120
|
+
if (!stats.size)
|
|
121
|
+
throw new Error(`Recording output is empty: ${output}`);
|
|
122
|
+
const timing = clock
|
|
123
|
+
? await optionalVideoTiming(output, {
|
|
124
|
+
clock: {
|
|
125
|
+
source: 'cdp-source-clock',
|
|
126
|
+
earliestZeroUnixMs: timestamps[0] - clock.maxOffsetMs,
|
|
127
|
+
latestZeroUnixMs: timestamps[0] - clock.minOffsetMs,
|
|
128
|
+
},
|
|
129
|
+
})
|
|
130
|
+
: { timingUnavailableReason: clockError };
|
|
131
|
+
segments.push({
|
|
132
|
+
path: path.basename(output),
|
|
133
|
+
...timing,
|
|
134
|
+
recorder: {
|
|
135
|
+
name: 'cdp-screencast',
|
|
136
|
+
platform: 'web',
|
|
137
|
+
target: { selector: 'cdp-page', value: target.id },
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
await rm(framesDir, { recursive: true, force: true });
|
|
141
|
+
await mkdir(framesDir);
|
|
142
|
+
timestamps = [];
|
|
143
|
+
spoolBytes = 0;
|
|
144
|
+
};
|
|
86
145
|
const retain = async (frame) => {
|
|
146
|
+
const bytes = Buffer.from(frame.data, 'base64');
|
|
147
|
+
if (bytes.length > 16 * 1024 * 1024)
|
|
148
|
+
throw new Error('A CDP frame exceeds the 16 MiB spool limit.');
|
|
149
|
+
if (timestamps.length &&
|
|
150
|
+
(spoolBytes + bytes.length > spoolLimit ||
|
|
151
|
+
frame.timestampMs - timestamps[0] >= 10 * 60 * 1000))
|
|
152
|
+
await flush(frame.timestampMs);
|
|
87
153
|
const index = timestamps.length;
|
|
154
|
+
await writeFile(path.join(framesDir, `frame_${String(index).padStart(6, '0')}.png`), bytes);
|
|
88
155
|
timestamps.push(frame.timestampMs);
|
|
156
|
+
spoolBytes += bytes.length;
|
|
89
157
|
lastReceivedAt = frame.receivedAtUnixMs;
|
|
90
|
-
|
|
158
|
+
latestFrame = { ...frame, segmentIndex: segments.length };
|
|
91
159
|
};
|
|
92
160
|
const unsubscribe = session.on('Page.screencastFrame', (params) => {
|
|
93
161
|
const timestamp = params.metadata?.timestamp;
|
|
@@ -100,19 +168,31 @@ class CdpVideoRecorder {
|
|
|
100
168
|
})
|
|
101
169
|
.finally(() => pendingAcks.delete(ack));
|
|
102
170
|
pendingAcks.add(ack);
|
|
171
|
+
const queuedBytes = typeof data === 'string' ? Math.ceil((data.length * 3) / 4) : 0;
|
|
172
|
+
if (pendingBytes + queuedBytes > 16 * 1024 * 1024) {
|
|
173
|
+
captureError = new Error('CDP encoding backlog exceeds the 16 MiB queue limit.');
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
pendingBytes += queuedBytes;
|
|
103
177
|
writeChain = writeChain
|
|
104
178
|
.then(async () => {
|
|
179
|
+
if (captureError)
|
|
180
|
+
return;
|
|
105
181
|
if (typeof timestamp !== 'number' ||
|
|
106
182
|
!Number.isFinite(timestamp) ||
|
|
107
183
|
typeof data !== 'string')
|
|
108
184
|
throw new Error('CDP frame is missing its source timestamp or image.');
|
|
109
|
-
const
|
|
185
|
+
const frame = { timestampMs: timestamp * 1000, receivedAtUnixMs, data };
|
|
186
|
+
const ready = sampler.accept(frame);
|
|
110
187
|
if (ready)
|
|
111
188
|
await retain(ready);
|
|
112
189
|
receivedFrames++;
|
|
113
190
|
})
|
|
114
191
|
.catch((error) => {
|
|
115
192
|
captureError = error;
|
|
193
|
+
})
|
|
194
|
+
.finally(() => {
|
|
195
|
+
pendingBytes -= queuedBytes;
|
|
116
196
|
});
|
|
117
197
|
});
|
|
118
198
|
try {
|
|
@@ -137,9 +217,33 @@ class CdpVideoRecorder {
|
|
|
137
217
|
await rm(framesDir, { recursive: true, force: true });
|
|
138
218
|
throw error;
|
|
139
219
|
}
|
|
140
|
-
const ffmpegPath = this.#ffmpegPath;
|
|
141
220
|
let stopped = false;
|
|
142
221
|
return {
|
|
222
|
+
async snapshot(outputPath) {
|
|
223
|
+
const snapshot = writeChain.then(async () => {
|
|
224
|
+
if (stopped || captureError)
|
|
225
|
+
throw new Error('CDP recording has no active source frame.');
|
|
226
|
+
// A proof still pins this source frame before another repaint can replace it.
|
|
227
|
+
const pending = sampler.finish();
|
|
228
|
+
if (pending)
|
|
229
|
+
await retain(pending);
|
|
230
|
+
if (!latestFrame)
|
|
231
|
+
throw new Error('CDP recording has no retained source frame.');
|
|
232
|
+
const frame = latestFrame;
|
|
233
|
+
await writeFile(outputPath, Buffer.from(frame.data, 'base64'));
|
|
234
|
+
return {
|
|
235
|
+
output: outputPath,
|
|
236
|
+
provider: 'cdp-screencast',
|
|
237
|
+
sourceTimestampMs: frame.timestampMs,
|
|
238
|
+
segmentIndex: frame.segmentIndex,
|
|
239
|
+
};
|
|
240
|
+
});
|
|
241
|
+
writeChain = snapshot.then(() => undefined, (error) => {
|
|
242
|
+
// The caller receives this failure; stop retains usable originals as partial capture.
|
|
243
|
+
captureError = error;
|
|
244
|
+
});
|
|
245
|
+
return snapshot;
|
|
246
|
+
},
|
|
143
247
|
async stop() {
|
|
144
248
|
if (stopped)
|
|
145
249
|
throw new Error('CDP recording was already stopped.');
|
|
@@ -148,54 +252,49 @@ class CdpVideoRecorder {
|
|
|
148
252
|
unsubscribe();
|
|
149
253
|
try {
|
|
150
254
|
await Promise.all(pendingAcks);
|
|
151
|
-
|
|
255
|
+
try {
|
|
256
|
+
await session.call('Page.stopScreencast');
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
captureError ??= error;
|
|
260
|
+
}
|
|
152
261
|
await writeChain;
|
|
153
|
-
if (captureError)
|
|
154
|
-
throw captureError;
|
|
155
262
|
const finalFrame = sampler.finish();
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
263
|
+
try {
|
|
264
|
+
if (finalFrame)
|
|
265
|
+
await retain(finalFrame);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
if (!segments.length)
|
|
269
|
+
throw error;
|
|
270
|
+
captureError ??= error;
|
|
271
|
+
}
|
|
272
|
+
const endSourceMs = captureError
|
|
273
|
+
? timestamps.at(-1) + 1
|
|
274
|
+
: clock
|
|
275
|
+
? stoppedAtUnixMs + (clock.minOffsetMs + clock.maxOffsetMs) / 2
|
|
276
|
+
: timestamps.at(-1) + Math.max(1, stoppedAtUnixMs - lastReceivedAt);
|
|
277
|
+
try {
|
|
278
|
+
await flush(endSourceMs);
|
|
168
279
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
: stoppedAtUnixMs - lastReceivedAt),
|
|
177
|
-
});
|
|
178
|
-
const stats = await stat(request.outputPath);
|
|
179
|
-
if (stats.size <= 0)
|
|
180
|
-
throw new Error(`Recording output is empty: ${request.outputPath}`);
|
|
181
|
-
// A CDP first frame can predate startScreencast. Use its source clock,
|
|
182
|
-
// calibrated through an isolated world, rather than process lifetime.
|
|
183
|
-
const timing = clock
|
|
184
|
-
? await optionalVideoTiming(request.outputPath, {
|
|
185
|
-
clock: {
|
|
186
|
-
source: 'cdp-source-clock',
|
|
187
|
-
earliestZeroUnixMs: timestamps[0] - clock.maxOffsetMs,
|
|
188
|
-
latestZeroUnixMs: timestamps[0] - clock.minOffsetMs,
|
|
189
|
-
},
|
|
190
|
-
})
|
|
191
|
-
: { timingUnavailableReason: clockError };
|
|
280
|
+
catch (error) {
|
|
281
|
+
if (!segments.length)
|
|
282
|
+
throw error;
|
|
283
|
+
captureError ??= error;
|
|
284
|
+
}
|
|
285
|
+
if (!segments.length)
|
|
286
|
+
throw captureError ?? new Error('CDP recording has no finalized source segment.');
|
|
192
287
|
return {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
288
|
+
segments,
|
|
289
|
+
...(captureError
|
|
290
|
+
? {
|
|
291
|
+
interruption: {
|
|
292
|
+
frames: segments.reduce((count, segment) => count + (segment.timing?.framesMs.length ?? 0), 0),
|
|
293
|
+
mediaTimeMs: segments.at(-1)?.timing?.framesMs.at(-1) ?? 0,
|
|
294
|
+
cause: errorMessage(captureError),
|
|
295
|
+
},
|
|
296
|
+
}
|
|
297
|
+
: {}),
|
|
199
298
|
};
|
|
200
299
|
}
|
|
201
300
|
finally {
|
|
@@ -281,7 +380,18 @@ async function encodePngSequenceToMp4({ ffmpegPath, framesDir, outputPath, times
|
|
|
281
380
|
'-fps_mode',
|
|
282
381
|
'vfr',
|
|
283
382
|
'-c:v',
|
|
284
|
-
'libx264',
|
|
383
|
+
process.platform === 'darwin' ? 'h264_videotoolbox' : 'libx264',
|
|
384
|
+
...(process.platform === 'darwin' ? ['-allow_sw', '0'] : ['-preset', 'ultrafast']),
|
|
385
|
+
'-b:v',
|
|
386
|
+
'1000000',
|
|
387
|
+
'-maxrate',
|
|
388
|
+
'1000000',
|
|
389
|
+
'-bufsize',
|
|
390
|
+
'2000000',
|
|
391
|
+
'-fs',
|
|
392
|
+
String(100 * 1024 * 1024),
|
|
393
|
+
'-bf',
|
|
394
|
+
'0',
|
|
285
395
|
'-pix_fmt',
|
|
286
396
|
'yuv420p',
|
|
287
397
|
'-vf',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-video-recorder.js","sourceRoot":"","sources":["../../src/recording/cdp-video-recorder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdp-video-recorder.js","sourceRoot":"","sources":["../../src/recording/cdp-video-recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type RecipeRecordingTimelineDocument, type RecipeVideoTiming } from '@farmslot/protocol';
|
|
2
|
-
import type { TraceEntry,
|
|
2
|
+
import type { TraceEntry, VideoRecordingSegment } from '../core/types.js';
|
|
3
3
|
/** For continuous, real-time recordings: capture happened within these host
|
|
4
4
|
* lifecycle bounds. This is deliberately a range, never a process-start guess. */
|
|
5
5
|
export declare function probeVideoTiming(file: string, bounds: {
|
|
@@ -9,7 +9,7 @@ export declare function probeVideoTiming(file: string, bounds: {
|
|
|
9
9
|
clock: RecipeVideoTiming['clock'];
|
|
10
10
|
}, ffprobePath?: string): Promise<RecipeVideoTiming>;
|
|
11
11
|
/** Optional observability failure stays explicit without discarding a valid video. */
|
|
12
|
-
export declare function optionalVideoTiming(...args: Parameters<typeof probeVideoTiming>): Promise<Pick<
|
|
12
|
+
export declare function optionalVideoTiming(...args: Parameters<typeof probeVideoTiming>): Promise<Pick<VideoRecordingSegment, 'timing' | 'timingUnavailableReason'>>;
|
|
13
13
|
export declare function createRecordingTimeline(videoPath: string, videoDigest: string, timing: RecipeVideoTiming, trace: TraceEntry[]): RecipeRecordingTimelineDocument;
|
|
14
14
|
export declare function writeRecordingTimeline(artifactsDir: string, videoPath: string, timing: RecipeVideoTiming, trace: TraceEntry[]): Promise<string>;
|
|
15
15
|
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/recording/timeline.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/recording/timeline.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAI1E;kFACkF;AAClF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EACF;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAA;CAAE,EACzC,WAAW,SAAwC,GAClD,OAAO,CAAC,iBAAiB,CAAC,CAwD5B;AAED,sFAAsF;AACtF,wBAAsB,mBAAmB,CACvC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,yBAAyB,CAAC,CAAC,CAM5E;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,UAAU,EAAE,GAClB,+BAA+B,CAuBjC;AAED,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,UAAU,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
package/dist/runtime/cdp.d.ts
CHANGED
|
@@ -65,6 +65,7 @@ interface CdpCallSession {
|
|
|
65
65
|
*/
|
|
66
66
|
export declare function probeCdpCompositorInteractivity(session: CdpCallSession, timeoutMs?: number): Promise<CdpCompositorProbe>;
|
|
67
67
|
export declare class CdpWebPage {
|
|
68
|
+
#private;
|
|
68
69
|
readonly session: CdpSession;
|
|
69
70
|
constructor(session: CdpSession);
|
|
70
71
|
static connectToTarget(target: CdpTargetInfo): Promise<CdpWebPage>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/runtime/cdp.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/runtime/cdp.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/cdp.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import WebSocket from 'ws';
|
|
3
|
+
import { HUD_PANEL_BOUNDS, hudIntentDisplay, hudSecondaryText } from '@farmslot/protocol/recipe';
|
|
3
4
|
import { gestureDurationMs, gesturePhase, gesturePoints, gestureSegmentDuration, gestureTarget, } from '../adapters/gesture.js';
|
|
4
5
|
import { RecipeExecutionError, RUNTIME_CONNECTION_CLOSED } from '../core/failure.js';
|
|
5
6
|
import { asNumber, asOptionalString, asString, isRecord } from '../core/json.js';
|
|
@@ -724,6 +725,59 @@ export class CdpWebPage {
|
|
|
724
725
|
mimeType: 'image/png',
|
|
725
726
|
};
|
|
726
727
|
}
|
|
728
|
+
async #observeHud() {
|
|
729
|
+
const { root } = await this.session.call('DOM.getDocument', {
|
|
730
|
+
depth: 0,
|
|
731
|
+
});
|
|
732
|
+
const { nodeId } = await this.session.call('DOM.querySelector', {
|
|
733
|
+
nodeId: root.nodeId,
|
|
734
|
+
selector: '[data-farmslot-hud-node]',
|
|
735
|
+
});
|
|
736
|
+
if (!nodeId)
|
|
737
|
+
return { visible: false };
|
|
738
|
+
const { node } = await this.session.call('DOM.describeNode', {
|
|
739
|
+
nodeId,
|
|
740
|
+
depth: -1,
|
|
741
|
+
pierce: true,
|
|
742
|
+
});
|
|
743
|
+
const findIntent = (entry) => {
|
|
744
|
+
const attributes = entry.attributes ?? [];
|
|
745
|
+
for (let i = 0; i < attributes.length; i += 2)
|
|
746
|
+
if (attributes[i] === 'data-farmslot-hud-intent')
|
|
747
|
+
return entry;
|
|
748
|
+
for (const child of [...(entry.children ?? []), ...(entry.shadowRoots ?? [])]) {
|
|
749
|
+
const found = findIntent(child);
|
|
750
|
+
if (found)
|
|
751
|
+
return found;
|
|
752
|
+
}
|
|
753
|
+
return undefined;
|
|
754
|
+
};
|
|
755
|
+
const intent = findIntent(node);
|
|
756
|
+
if (!intent)
|
|
757
|
+
return { visible: false };
|
|
758
|
+
const { object } = await this.session.call('DOM.resolveNode', { backendNodeId: intent.backendNodeId });
|
|
759
|
+
if (!object.objectId)
|
|
760
|
+
throw new Error('CDP could not resolve the rendered HUD intent.');
|
|
761
|
+
try {
|
|
762
|
+
const observed = await this.session.call('Runtime.callFunctionOn', {
|
|
763
|
+
objectId: object.objectId,
|
|
764
|
+
returnByValue: true,
|
|
765
|
+
functionDeclaration: `function() {
|
|
766
|
+
${deepQueryHelpersExpression()}
|
|
767
|
+
const bounds = this.getBoundingClientRect();
|
|
768
|
+
const visible = isRenderedDeep(this) && bounds.width > 0 && bounds.height > 0 &&
|
|
769
|
+
bounds.top >= 0 && bounds.left >= 0 && bounds.right <= innerWidth && bounds.bottom <= innerHeight;
|
|
770
|
+
return { visible, intent: this.textContent || '', provider: 'cdp-rendered-hud' };
|
|
771
|
+
}`,
|
|
772
|
+
});
|
|
773
|
+
if (observed.exceptionDetails)
|
|
774
|
+
throw new Error('CDP rendered HUD observation failed.');
|
|
775
|
+
return observed.result.value;
|
|
776
|
+
}
|
|
777
|
+
finally {
|
|
778
|
+
await this.session.call('Runtime.releaseObject', { objectId: object.objectId });
|
|
779
|
+
}
|
|
780
|
+
}
|
|
727
781
|
async observe(refs) {
|
|
728
782
|
const observations = {};
|
|
729
783
|
const warnings = [];
|
|
@@ -732,6 +786,9 @@ export class CdpWebPage {
|
|
|
732
786
|
if (ref === 'ui.screen') {
|
|
733
787
|
observations[ref] = await this.evaluate(`(() => { const hashPath = location.hash.split('?')[0]; const hashRoute = hashPath && !hashPath.includes('=') ? hashPath : undefined; return { provider: 'cdp-web', name: document.title || location.pathname || hashRoute || 'Browser', title: document.title || undefined, route: hashRoute || location.pathname || undefined, url: location.origin + location.pathname }; })()`);
|
|
734
788
|
}
|
|
789
|
+
else if (ref === 'ui.hud') {
|
|
790
|
+
observations[ref] = await this.#observeHud();
|
|
791
|
+
}
|
|
735
792
|
else if (ref === 'ui.visible') {
|
|
736
793
|
observations[ref] = await this.evaluate(visibleTargetsExpression());
|
|
737
794
|
}
|
|
@@ -1158,31 +1215,23 @@ async function runCdpLifecycle(page, node) {
|
|
|
1158
1215
|
}
|
|
1159
1216
|
throw new Error(`Unsupported CDP lifecycle command: ${command}.`);
|
|
1160
1217
|
}
|
|
1161
|
-
// Recipe text reaches the page: cap each HUD line like the web HUD (180 characters,
|
|
1162
|
-
// whitespace flattened, an ellipsis on the cut), counting code points so the cut
|
|
1163
|
-
// never splits a surrogate pair.
|
|
1164
|
-
const MAX_HUD_TEXT = 180;
|
|
1165
|
-
function hudLine(value) {
|
|
1166
|
-
const flat = value.replace(/\s+/gu, ' ').trim();
|
|
1167
|
-
const chars = Array.from(flat);
|
|
1168
|
-
return chars.length > MAX_HUD_TEXT ? `${chars.slice(0, MAX_HUD_TEXT - 1).join('')}…` : flat;
|
|
1169
|
-
}
|
|
1170
1218
|
async function renderCdpHud(page, node, context) {
|
|
1171
1219
|
if (node.clear === true) {
|
|
1172
1220
|
return page.evaluate("(() => { document.getElementById('farmslot-recipe-hud')?.remove(); document.getElementById('farmslot-recipe-hud-reserved-space')?.remove(); document.documentElement.style.removeProperty('--farmslot-recipe-hud-height'); document.body?.style.removeProperty('padding-bottom'); return { hud: false, cleared: true }; })()");
|
|
1173
1221
|
}
|
|
1174
|
-
const title =
|
|
1222
|
+
const title = hudSecondaryText(asOptionalString(node.title, 'app.hud.title') ?? 'Recipe run');
|
|
1175
1223
|
const status = asOptionalString(node.status, 'app.hud.status') ?? 'running';
|
|
1176
1224
|
const nodeId = asOptionalString(node.node_id ?? node.nodeId, 'app.hud.node_id') ?? context.nodeId;
|
|
1177
1225
|
const phase = asOptionalString(node.phase, 'app.hud.phase') ?? '';
|
|
1178
1226
|
const flow = asOptionalString(node.flow, 'app.hud.flow') ?? '';
|
|
1179
1227
|
const action = asOptionalString(node.action_name ?? node.recipe_action, 'app.hud.action_name') ?? '';
|
|
1180
1228
|
const rawText = asOptionalString(node.intent ?? node.text, 'app.hud.text') ?? context.nodeId;
|
|
1181
|
-
const
|
|
1229
|
+
const intent = hudIntentDisplay(rawText);
|
|
1230
|
+
const text = intent.text;
|
|
1182
1231
|
const rawDetail = asOptionalString(node.detail, 'app.hud.detail') ?? '';
|
|
1183
|
-
const detail = rawDetail && rawDetail !== rawText && rawDetail !== flow ?
|
|
1232
|
+
const detail = rawDetail && rawDetail !== rawText && rawDetail !== flow ? hudSecondaryText(rawDetail) : '';
|
|
1184
1233
|
const rawError = asOptionalString(node.error, 'app.hud.error');
|
|
1185
|
-
const error = rawError === undefined ? undefined :
|
|
1234
|
+
const error = rawError === undefined ? undefined : hudSecondaryText(rawError);
|
|
1186
1235
|
const display = isRecord(node.display) ? node.display : {};
|
|
1187
1236
|
const layout = asOptionalString(display.layout, 'app.hud.display.layout') ?? 'bottom-bar';
|
|
1188
1237
|
const position = asOptionalString(display.position, 'app.hud.display.position') ?? 'bottom';
|
|
@@ -1195,7 +1244,7 @@ async function renderCdpHud(page, node, context) {
|
|
|
1195
1244
|
const current = typeof progress.current === 'number' ? progress.current : undefined;
|
|
1196
1245
|
const total = typeof progress.total === 'number' ? progress.total : undefined;
|
|
1197
1246
|
return page.evaluate(`(() => {
|
|
1198
|
-
const payload = ${JSON.stringify({ title, status, nodeId, phase, flow, action, text, detail, error, current, total, layout, position, showTitle, showDebug, showDetail, width, maxDetailLines })};
|
|
1247
|
+
const payload = ${JSON.stringify({ title, status, nodeId, phase, flow, action, text, detail, error, current, total, layout, position, showTitle, showDebug, showDetail, width, maxDetailLines, intentStyle: intent.webStyle, bounds: HUD_PANEL_BOUNDS })};
|
|
1199
1248
|
const id = 'farmslot-recipe-hud';
|
|
1200
1249
|
// The recipe text lives in a closed shadow root, so the page's text and
|
|
1201
1250
|
// selector queries (ui.wait_for, text-target presses) never see it and a
|
|
@@ -1205,6 +1254,7 @@ async function renderCdpHud(page, node, context) {
|
|
|
1205
1254
|
document.getElementById(id)?.remove();
|
|
1206
1255
|
const el = document.createElement('div');
|
|
1207
1256
|
el.id = id;
|
|
1257
|
+
el.setAttribute('data-farmslot-hud-node', payload.nodeId);
|
|
1208
1258
|
el.setAttribute('aria-hidden', 'true');
|
|
1209
1259
|
Object.assign(el.style, {
|
|
1210
1260
|
position: 'fixed',
|
|
@@ -1234,11 +1284,14 @@ async function renderCdpHud(page, node, context) {
|
|
|
1234
1284
|
bottom: '',
|
|
1235
1285
|
width: '',
|
|
1236
1286
|
maxWidth: '',
|
|
1287
|
+
maxHeight: payload.bounds.card.maxHeight + 'px',
|
|
1288
|
+
overflow: 'hidden',
|
|
1289
|
+
boxSizing: 'border-box',
|
|
1237
1290
|
borderRadius: isDocked ? '0' : '9px',
|
|
1238
1291
|
});
|
|
1239
1292
|
if (isCard) {
|
|
1240
1293
|
el.style.width = payload.width || '360px';
|
|
1241
|
-
el.style.maxWidth = 'calc(100vw - 16px)';
|
|
1294
|
+
el.style.maxWidth = 'min(' + payload.bounds.card.maxWidth + 'px, calc(100vw - 16px))';
|
|
1242
1295
|
if (payload.position.includes('top')) el.style.top = '8px';
|
|
1243
1296
|
else el.style.bottom = '8px';
|
|
1244
1297
|
if (payload.position.includes('left')) el.style.left = '8px';
|
|
@@ -1248,6 +1301,7 @@ async function renderCdpHud(page, node, context) {
|
|
|
1248
1301
|
else el.style.bottom = isDocked ? '0' : '8px';
|
|
1249
1302
|
el.style.left = isDocked ? '0' : '8px';
|
|
1250
1303
|
el.style.right = isDocked ? '0' : '8px';
|
|
1304
|
+
el.style.maxWidth = payload.bounds.bar.maxWidth + 'px';
|
|
1251
1305
|
}
|
|
1252
1306
|
const accent = payload.status === 'fail' ? '#ff5c5c' : payload.status === 'pass' ? '#48d17a' : '#8ab4ff';
|
|
1253
1307
|
const progressText = Number.isFinite(payload.current) && Number.isFinite(payload.total)
|
|
@@ -1271,7 +1325,8 @@ async function renderCdpHud(page, node, context) {
|
|
|
1271
1325
|
const body = document.createElement('div');
|
|
1272
1326
|
Object.assign(body.style, { minWidth: '0', flex: '1' });
|
|
1273
1327
|
const line1 = document.createElement('div');
|
|
1274
|
-
Object.assign(line1.style, { color: '#fff', fontWeight: '750'
|
|
1328
|
+
Object.assign(line1.style, payload.intentStyle, { color: '#fff', fontWeight: '750' });
|
|
1329
|
+
line1.setAttribute('data-farmslot-hud-intent', '');
|
|
1275
1330
|
line1.textContent = payload.text || payload.nodeId;
|
|
1276
1331
|
const line2 = document.createElement('div');
|
|
1277
1332
|
Object.assign(line2.style, {
|