@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.
Files changed (110) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/adapters/core.d.ts +32 -1
  3. package/dist/adapters/core.d.ts.map +1 -1
  4. package/dist/adapters/core.js +152 -38
  5. package/dist/adapters/core.js.map +1 -1
  6. package/dist/adapters/ui.d.ts +2 -0
  7. package/dist/adapters/ui.d.ts.map +1 -1
  8. package/dist/adapters/ui.js +79 -37
  9. package/dist/adapters/ui.js.map +1 -1
  10. package/dist/cli/support.d.ts.map +1 -1
  11. package/dist/cli/support.js +5 -1
  12. package/dist/cli/support.js.map +1 -1
  13. package/dist/core/execution-signal.d.ts +4 -0
  14. package/dist/core/execution-signal.d.ts.map +1 -0
  15. package/dist/core/execution-signal.js +13 -0
  16. package/dist/core/execution-signal.js.map +1 -0
  17. package/dist/core/execution.d.ts +4 -0
  18. package/dist/core/execution.d.ts.map +1 -1
  19. package/dist/core/execution.js +86 -12
  20. package/dist/core/execution.js.map +1 -1
  21. package/dist/core/failure.d.ts +2 -0
  22. package/dist/core/failure.d.ts.map +1 -1
  23. package/dist/core/failure.js +10 -0
  24. package/dist/core/failure.js.map +1 -1
  25. package/dist/core/graph.d.ts +1 -0
  26. package/dist/core/graph.d.ts.map +1 -1
  27. package/dist/core/graph.js +2 -2
  28. package/dist/core/graph.js.map +1 -1
  29. package/dist/core/hud.d.ts.map +1 -1
  30. package/dist/core/hud.js +3 -3
  31. package/dist/core/hud.js.map +1 -1
  32. package/dist/core/invocation.d.ts +4 -1
  33. package/dist/core/invocation.d.ts.map +1 -1
  34. package/dist/core/invocation.js +3 -1
  35. package/dist/core/invocation.js.map +1 -1
  36. package/dist/core/recording-limits.d.ts +4 -0
  37. package/dist/core/recording-limits.d.ts.map +1 -0
  38. package/dist/core/recording-limits.js +74 -0
  39. package/dist/core/recording-limits.js.map +1 -0
  40. package/dist/core/recording-segments.d.ts +4 -0
  41. package/dist/core/recording-segments.d.ts.map +1 -0
  42. package/dist/core/recording-segments.js +101 -0
  43. package/dist/core/recording-segments.js.map +1 -0
  44. package/dist/core/runner.d.ts.map +1 -1
  45. package/dist/core/runner.js +336 -108
  46. package/dist/core/runner.js.map +1 -1
  47. package/dist/core/trace.d.ts.map +1 -1
  48. package/dist/core/trace.js +2 -0
  49. package/dist/core/trace.js.map +1 -1
  50. package/dist/core/types.d.ts +40 -22
  51. package/dist/core/types.d.ts.map +1 -1
  52. package/dist/evidence/assertions.d.ts +50 -0
  53. package/dist/evidence/assertions.d.ts.map +1 -0
  54. package/dist/evidence/assertions.js +156 -0
  55. package/dist/evidence/assertions.js.map +1 -0
  56. package/dist/evidence/claims.d.ts +15 -0
  57. package/dist/evidence/claims.d.ts.map +1 -0
  58. package/dist/evidence/claims.js +201 -0
  59. package/dist/evidence/claims.js.map +1 -0
  60. package/dist/evidence/index.d.ts +4 -0
  61. package/dist/evidence/index.d.ts.map +1 -0
  62. package/dist/evidence/index.js +3 -0
  63. package/dist/evidence/index.js.map +1 -0
  64. package/dist/evidence/moments.d.ts +8 -0
  65. package/dist/evidence/moments.d.ts.map +1 -0
  66. package/dist/evidence/moments.js +26 -0
  67. package/dist/evidence/moments.js.map +1 -0
  68. package/dist/evidence/package.d.ts +4 -0
  69. package/dist/evidence/package.d.ts.map +1 -0
  70. package/dist/evidence/package.js +140 -0
  71. package/dist/evidence/package.js.map +1 -0
  72. package/dist/evidence/plan.d.ts +9 -0
  73. package/dist/evidence/plan.d.ts.map +1 -0
  74. package/dist/evidence/plan.js +87 -0
  75. package/dist/evidence/plan.js.map +1 -0
  76. package/dist/evidence/read-package.d.ts +14 -0
  77. package/dist/evidence/read-package.d.ts.map +1 -0
  78. package/dist/evidence/read-package.js +153 -0
  79. package/dist/evidence/read-package.js.map +1 -0
  80. package/dist/evidence/stills.d.ts +5 -0
  81. package/dist/evidence/stills.d.ts.map +1 -0
  82. package/dist/evidence/stills.js +58 -0
  83. package/dist/evidence/stills.js.map +1 -0
  84. package/dist/file-digest.d.ts +3 -0
  85. package/dist/file-digest.d.ts.map +1 -0
  86. package/dist/file-digest.js +4 -0
  87. package/dist/file-digest.js.map +1 -0
  88. package/dist/index.d.ts +5 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +5 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/recording/android-mirror.d.ts.map +1 -1
  93. package/dist/recording/android-mirror.js +17 -8
  94. package/dist/recording/android-mirror.js.map +1 -1
  95. package/dist/recording/capture-helper-timing.d.ts +2 -2
  96. package/dist/recording/capture-helper-timing.d.ts.map +1 -1
  97. package/dist/recording/capture-helper.d.ts.map +1 -1
  98. package/dist/recording/capture-helper.js +24 -12
  99. package/dist/recording/capture-helper.js.map +1 -1
  100. package/dist/recording/cdp-video-recorder.d.ts +2 -0
  101. package/dist/recording/cdp-video-recorder.d.ts.map +1 -1
  102. package/dist/recording/cdp-video-recorder.js +160 -50
  103. package/dist/recording/cdp-video-recorder.js.map +1 -1
  104. package/dist/recording/timeline.d.ts +2 -2
  105. package/dist/recording/timeline.d.ts.map +1 -1
  106. package/dist/runtime/cdp.d.ts +1 -0
  107. package/dist/runtime/cdp.d.ts.map +1 -1
  108. package/dist/runtime/cdp.js +71 -16
  109. package/dist/runtime/cdp.js.map +1 -1
  110. 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 ?? 30;
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
- const timestamps = [];
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
- await writeFile(path.join(framesDir, `frame_${String(index).padStart(6, '0')}.png`), Buffer.from(frame.data, 'base64'));
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 ready = sampler.accept({ timestampMs: timestamp * 1000, receivedAtUnixMs, data });
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
- await session.call('Page.stopScreencast');
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
- if (finalFrame)
157
- await retain(finalFrame);
158
- if (clock) {
159
- try {
160
- const endClock = await measureBrowserClock(session);
161
- clock.minOffsetMs = Math.min(clock.minOffsetMs, endClock.minOffsetMs);
162
- clock.maxOffsetMs = Math.max(clock.maxOffsetMs, endClock.maxOffsetMs);
163
- }
164
- catch (error) {
165
- clockError = `Recording end clock unavailable: ${errorMessage(error)}`;
166
- clock = undefined;
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
- await encodePngSequenceToMp4({
170
- ffmpegPath,
171
- framesDir,
172
- outputPath: request.outputPath,
173
- timestamps,
174
- lastFrameDurationMs: Math.max(1, clock
175
- ? stoppedAtUnixMs + (clock.minOffsetMs + clock.maxOffsetMs) / 2 - timestamps.at(-1)
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
- ...timing,
194
- recorder: {
195
- name: 'cdp-screencast',
196
- platform: 'web',
197
- target: { selector: 'cdp-page', value: target.url ?? `cdp:${request.nodeId}` },
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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAsB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAWpD,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,gBAAgB;IAIX,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,YAAY,CAAqB;IACjC,WAAW,CAAS;IACpB,WAAW,CAAS;IAE7B,YAAY,OAAgC;QATnC,SAAI,GAAG,gBAAgB,CAAC;QACxB,uBAAkB,GAAG,IAAI,CAAC;QAC1B,aAAQ,GAAG,KAAK,CAAC;QAQxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,QAAQ,CAAC;QAC7E,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1D,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YAEnC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACxF,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;gBACf,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,oDAAoD;oBAC7D,YAAY,EAAE,mDAAmD;iBAClE,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,qCAAqC,KAAK,iCAAiC;aACrF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,gCAAgC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC9D,YAAY,EAAE,gEAAgE;aAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAkC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,GAAG,CAAC,eAAe,CAAC,IAAI,KAAK,UAAU;gBACrC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,eAAe,CAAC,QAAQ,EAAE;gBACnE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,IACE,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;YAClC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;YAEhF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACtE,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;QAChD,IAAI,YAAqB,CAAC;QAC1B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,WAAmE,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,KAA+D,CAAC;QACpE,IAAI,UAA8B,CAAC;QACnC,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,GAAG,gCAAgC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACrE,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO;YAC/B,MAAM,MAAM,GACV,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACnB,CAAC,CAAC,OAAO,CAAC,UAAU;gBACpB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,QAAQ,CAAC,MAAM,MAAM,CAAC,CAAC;YACvE,MAAM,sBAAsB,CAAC;gBAC3B,UAAU;gBACV,SAAS;gBACT,UAAU,EAAE,MAAM;gBAClB,UAAU;gBACV,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;aACnE,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,KAAK;gBAClB,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,EAAE;oBAChC,KAAK,EAAE;wBACL,MAAM,EAAE,kBAAkB;wBAC1B,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,WAAW;wBACtD,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,WAAW;qBACrD;iBACF,CAAC;gBACJ,CAAC,CAAC,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3B,GAAG,MAAM;gBACT,QAAQ,EAAE;oBACR,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;iBACnD;aACF,CAAC,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YACvB,UAAU,GAAG,EAAE,CAAC;YAChB,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,EAAE,KAAoB,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;gBACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,IACE,UAAU,CAAC,MAAM;gBACjB,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU;oBACrC,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,CAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAEvD,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;YAChC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5F,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;YAC3B,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACxC,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5D,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,EAAE;YAChE,MAAM,SAAS,GAAI,MAAM,CAAC,QAA+C,EAAE,SAAS,CAAC;YACrF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,OAAO;iBAChB,IAAI,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;iBAChE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM,WAAW,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,IAAI,YAAY,GAAG,WAAW,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBAClD,YAAY,GAAG,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YACD,YAAY,IAAI,WAAW,CAAC;YAC5B,UAAU,GAAG,UAAU;iBACpB,IAAI,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,YAAY;oBAAE,OAAO;gBACzB,IACE,OAAO,SAAS,KAAK,QAAQ;oBAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAC3B,OAAO,IAAI,KAAK,QAAQ;oBAExB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACzE,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,SAAS,GAAG,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;gBACxE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,KAAK;oBAAE,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,YAAY,IAAI,WAAW,CAAC;YAC9B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,MAAM,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBACzC,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,CAAC;gBAChB,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;aAChD,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;YACrC,OAAO,CAAC,cAAc,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;gBAAE,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAClF,IAAI,YAAY;gBAAE,MAAM,YAAY,CAAC;YACrC,IAAI,CAAC,cAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,UAAU,CAAC;YACjB,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,OAAO;YACL,KAAK,CAAC,QAAQ,CAAC,UAAU;gBACvB,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;oBAC1C,IAAI,OAAO,IAAI,YAAY;wBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;oBAC1F,8EAA8E;oBAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjC,IAAI,OAAO;wBAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;oBACnC,IAAI,CAAC,WAAW;wBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACjF,MAAM,KAAK,GAAG,WAAW,CAAC;oBAC1B,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC/D,OAAO;wBACL,MAAM,EAAE,UAAU;wBAClB,QAAQ,EAAE,gBAAgB;wBAC1B,iBAAiB,EAAE,KAAK,CAAC,WAAW;wBACpC,YAAY,EAAE,KAAK,CAAC,YAAY;qBACjC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,UAAU,GAAG,QAAQ,CAAC,IAAI,CACxB,GAAG,EAAE,CAAC,SAAS,EACf,CAAC,KAAK,EAAE,EAAE;oBACR,sFAAsF;oBACtF,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC,CACF,CAAC;gBACF,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,KAAK,CAAC,IAAI;gBACR,IAAI,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACnE,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,WAAW,EAAE,CAAC;gBACd,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBAC/B,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;oBAC5C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,YAAY,KAAK,KAAK,CAAC;oBACzB,CAAC;oBACD,MAAM,UAAU,CAAC;oBACjB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpC,IAAI,CAAC;wBACH,IAAI,UAAU;4BAAE,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC3C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,QAAQ,CAAC,MAAM;4BAAE,MAAM,KAAK,CAAC;wBAClC,YAAY,KAAK,KAAK,CAAC;oBACzB,CAAC;oBACD,MAAM,WAAW,GAAG,YAAY;wBAC9B,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC;wBACxB,CAAC,CAAC,KAAK;4BACL,CAAC,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;4BAC/D,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,CAAC;oBACzE,IAAI,CAAC;wBACH,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC3B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,QAAQ,CAAC,MAAM;4BAAE,MAAM,KAAK,CAAC;wBAClC,YAAY,KAAK,KAAK,CAAC;oBACzB,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,MAAM;wBAClB,MAAM,YAAY,IAAI,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;oBACpF,OAAO;wBACL,QAAQ;wBACR,GAAG,CAAC,YAAY;4BACd,CAAC,CAAC;gCACE,YAAY,EAAE;oCACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,CACrB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,EAClE,CAAC,CACF;oCACD,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oCAC1D,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC;iCAClC;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC;gBACJ,CAAC;wBAAS,CAAC;oBACT,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAmB;IAEnB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAA2C,mBAAmB,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAiC,0BAA0B,EAAE;QAC3F,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QAChC,SAAS,EAAE,wBAAwB;KACpC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAiC,kBAAkB,EAAE;QACpF,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,KAAK,CAAC,kBAAkB;QACnC,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,4EAA4E;IAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAA2B;IAE3B,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACnF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAAY,EACZ,IAAY,EACZ,WAA+B;IAE/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,IAAI;QACJ,IAAI;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW;KACZ,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAoB,wBAAwB,EAAE;YAC3E,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,EACpC,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,mBAAmB,GAOpB;IACC,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,yEAAyE;IACzE,8EAA8E;IAC9E,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAC9E,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,UAAU,GACd,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAE,GAAG,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC3F,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACpG,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,QAAQ,EAAE,yBAAyB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,UAAU,CACd,UAAU,EACV;QACE,IAAI;QACJ,cAAc;QACd,WAAW;QACX,OAAO;QACP,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,GAAG;QACH,IAAI;QACJ,QAAQ;QACR,WAAW;QACX,KAAK;QACL,MAAM;QACN,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;QAC/D,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM;QACN,SAAS;QACT,UAAU;QACV,SAAS;QACT,UAAU;QACV,SAAS;QACT,KAAK;QACL,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;QACzB,KAAK;QACL,GAAG;QACH,UAAU;QACV,SAAS;QACT,KAAK;QACL,+BAA+B;QAC/B,wBAAwB;QACxB,SAAS;QACT,WAAW;QACX,YAAY;QACZ,UAAU;KACX,EACD,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,OAAe,EACf,IAAc,EACd,OAA8B;IAE9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,oBAAoB,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,iBAAiB,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type RecipeRecordingTimelineDocument, type RecipeVideoTiming } from '@farmslot/protocol';
2
- import type { TraceEntry, VideoRecordingResult } from '../core/types.js';
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<VideoRecordingResult, 'timing' | 'timingUnavailableReason'>>;
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,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIzE;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,oBAAoB,EAAE,QAAQ,GAAG,yBAAyB,CAAC,CAAC,CAM3E;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"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../src/runtime/cdp.ts"],"names":[],"mappings":"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"}
@@ -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 = hudLine(asOptionalString(node.title, 'app.hud.title') ?? 'Recipe run');
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 text = hudLine(rawText);
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 ? hudLine(rawDetail) : '';
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 : hudLine(rawError);
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', lineHeight: '1.25', whiteSpace: 'normal' });
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, {