rivet-design 0.14.17 → 0.14.19

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 (39) hide show
  1. package/dist/agent-variants/WorktreeOrchestrator.d.ts +8 -17
  2. package/dist/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
  3. package/dist/agent-variants/WorktreeOrchestrator.js +60 -92
  4. package/dist/agent-variants/WorktreeOrchestrator.js.map +1 -1
  5. package/dist/agent-variants/contracts.d.ts +11 -13
  6. package/dist/agent-variants/contracts.d.ts.map +1 -1
  7. package/dist/agent-variants/contracts.js.map +1 -1
  8. package/dist/agent-variants/diffQa.d.ts +0 -4
  9. package/dist/agent-variants/diffQa.d.ts.map +1 -1
  10. package/dist/agent-variants/diffQa.js +4 -60
  11. package/dist/agent-variants/diffQa.js.map +1 -1
  12. package/dist/agent-variants/errors.d.ts +1 -1
  13. package/dist/agent-variants/errors.d.ts.map +1 -1
  14. package/dist/agent-variants/errors.js +1 -0
  15. package/dist/agent-variants/errors.js.map +1 -1
  16. package/dist/agent-variants/previewQa.d.ts +5 -52
  17. package/dist/agent-variants/previewQa.d.ts.map +1 -1
  18. package/dist/agent-variants/previewQa.js +12 -474
  19. package/dist/agent-variants/previewQa.js.map +1 -1
  20. package/dist/agent-variants/sourceContext.d.ts +1 -1
  21. package/dist/agent-variants/sourceContext.js +1 -1
  22. package/dist/agent-variants/workItemBriefing.d.ts +8 -1
  23. package/dist/agent-variants/workItemBriefing.d.ts.map +1 -1
  24. package/dist/agent-variants/workItemBriefing.js +32 -7
  25. package/dist/agent-variants/workItemBriefing.js.map +1 -1
  26. package/dist/cli/hostWorkNextAction.d.ts +3 -0
  27. package/dist/cli/hostWorkNextAction.d.ts.map +1 -1
  28. package/dist/cli/hostWorkNextAction.js +8 -2
  29. package/dist/cli/hostWorkNextAction.js.map +1 -1
  30. package/dist/services/TelemetryService.d.ts +5 -1
  31. package/dist/services/TelemetryService.d.ts.map +1 -1
  32. package/dist/services/TelemetryService.js +12 -1
  33. package/dist/services/TelemetryService.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/ui/dist/assets/main-BJDmnLTY.js +422 -0
  36. package/src/ui/dist/assets/main-Dad5qwqj.css +1 -0
  37. package/src/ui/dist/index.html +2 -2
  38. package/src/ui/dist/assets/main-C5tdh5OX.js +0 -422
  39. package/src/ui/dist/assets/main-CrLtwwgK.css +0 -1
@@ -1,495 +1,33 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DEFAULT_ASSET_PROBER = exports.DEFAULT_RUNTIME_QA_RUNNER = void 0;
7
- exports.runPreviewQa = runPreviewQa;
8
- exports.extractExternalAssetUrls = extractExternalAssetUrls;
9
- exports.extractLocalAssetPaths = extractLocalAssetPaths;
10
- const dns_1 = __importDefault(require("dns"));
11
- const fs_1 = __importDefault(require("fs"));
12
- const http_1 = __importDefault(require("http"));
13
- const https_1 = __importDefault(require("https"));
14
- const path_1 = __importDefault(require("path"));
15
- const sourceContext_1 = require("./sourceContext");
16
- /**
17
- * Preview QA — objective post-generation health checks for static-preview
18
- * variants. The orchestrator runs this before accepting a `static_preview`
19
- * succeeded report so a variant cannot enter `ready` while its referenced
20
- * assets 404 or its runtime throws.
21
- *
22
- * The runner has two layers:
23
- *
24
- * 1. A pure static check that extracts external asset URLs from the
25
- * generated HTML and fetches each one with a small timeout. This
26
- * catches the most common failure mode (broken CDN URLs, missing
27
- * `.glb` model assets) without needing a browser.
28
- *
29
- * 2. An injectable runtime check that can be wired to Playwright later
30
- * to capture `pageerror` / `console.error` events. Tests stub this
31
- * layer; production uses `DEFAULT_RUNTIME_QA_RUNNER` which is a
32
- * no-op so the gate falls back to the static layer when no real
33
- * runner is available.
34
- */
35
- const DEFAULT_ASSET_TIMEOUT_MS = 4_000;
36
- const LOCAL_ASSET_EXTENSIONS = new Set([
37
- '.avif',
38
- '.gif',
39
- '.glb',
40
- '.gltf',
41
- '.jpg',
42
- '.jpeg',
43
- '.mp4',
44
- '.png',
45
- '.svg',
46
- '.webm',
47
- '.webp',
48
- ]);
49
- /**
50
- * No-op runtime QA runner used when no real (e.g. Playwright-based)
51
- * runner is injected. Returns an empty issue list so the gate decision
52
- * is driven entirely by the static asset layer.
53
- */
54
- const DEFAULT_RUNTIME_QA_RUNNER = async () => [];
55
- exports.DEFAULT_RUNTIME_QA_RUNNER = DEFAULT_RUNTIME_QA_RUNNER;
56
- const MAX_REDIRECTS = 5;
57
- /**
58
- * Resolves a hostname to public addresses and returns the address that the
59
- * subsequent HTTP request must use for its own lookup.
60
- *
61
- * @effect Performs a DNS lookup via dns.promises.lookup
62
- */
63
- const resolvePinnedAddress = async (hostname) => {
64
- if ((0, sourceContext_1.isLocalLiteralHostname)(hostname)) {
65
- return {
66
- kind: 'blocked',
67
- message: `Host '${hostname}' resolves to a protected target.`,
68
- };
69
- }
70
- let addresses;
71
- try {
72
- addresses = await dns_1.default.promises.lookup(hostname, { all: true });
73
- }
74
- catch {
75
- return {
76
- kind: 'blocked',
77
- message: `Host '${hostname}' could not be resolved safely.`,
78
- };
79
- }
80
- const protectedAddress = addresses.find(({ address }) => (0, sourceContext_1.isLocalLiteralHostname)(address));
81
- if (protectedAddress) {
82
- return {
83
- kind: 'blocked',
84
- message: `Host '${hostname}' resolves to a protected target.`,
85
- };
86
- }
87
- const address = addresses[0];
88
- if (!address) {
89
- return {
90
- kind: 'blocked',
91
- message: `Host '${hostname}' did not resolve to an address.`,
92
- };
93
- }
94
- return {
95
- kind: 'resolved',
96
- address: {
97
- address: address.address,
98
- family: address.family === 6 ? 6 : 4,
99
- },
100
- };
101
- };
102
- const locationHeader = (headers) => {
103
- const value = headers.location;
104
- return Array.isArray(value) ? value[0] : value;
105
- };
3
+ exports.runPreviewQa = void 0;
106
4
  /**
107
- * Issues one HTTP request while pinning Node's lookup callback to the address
108
- * produced by the SSRF guard.
109
- *
110
- * @effect Performs a network request to the validated asset URL
5
+ * Verifies that a worker produced a non-empty static preview artifact.
6
+ * Project-native checks remain the worker's responsibility; Rivet does not
7
+ * infer runtime validity by inspecting the artifact's implementation details.
111
8
  */
112
- const requestAsset = async (input) => {
113
- const parsed = new URL(input.url);
114
- const pinned = await resolvePinnedAddress(parsed.hostname);
115
- if (pinned.kind === 'blocked') {
116
- return { kind: 'blocked', status: 0, message: pinned.message };
117
- }
118
- const lookup = (_hostname, _options, callback) => {
119
- callback(null, pinned.address.address, pinned.address.family);
120
- };
121
- const transport = parsed.protocol === 'https:' ? https_1.default : http_1.default;
122
- return new Promise((resolve, reject) => {
123
- const request = transport.request({
124
- protocol: parsed.protocol,
125
- hostname: parsed.hostname,
126
- port: parsed.port || undefined,
127
- path: `${parsed.pathname}${parsed.search}`,
128
- method: input.method,
129
- headers: input.headers,
130
- lookup,
131
- signal: input.signal,
132
- }, (response) => {
133
- response.resume();
134
- resolve({
135
- kind: 'response',
136
- response: {
137
- status: response.statusCode ?? 0,
138
- headers: response.headers,
139
- },
140
- });
141
- });
142
- request.on('error', reject);
143
- request.end();
144
- });
145
- };
146
- const DEFAULT_ASSET_PROBER = async (url, timeoutMs) => {
147
- // SSRF guard: agent-supplied HTML can carry URLs pointing at localhost,
148
- // RFC1918, link-local, or cloud-metadata hosts. Validate scheme +
149
- // local-literal targets before issuing a network request, pin DNS for the
150
- // request itself, and re-check after redirects.
151
- const validation = (0, sourceContext_1.validateInspirationUrl)(url);
152
- if (!validation.ok) {
153
- return { ok: false, status: 0, message: validation.reason };
154
- }
155
- const controller = new AbortController();
156
- const timer = setTimeout(() => controller.abort(), timeoutMs);
157
- const requestWithGuardedRedirects = async (initialUrl, init) => {
158
- let currentUrl = initialUrl;
159
- for (let hop = 0; hop <= MAX_REDIRECTS; hop += 1) {
160
- const currentValidation = (0, sourceContext_1.validateInspirationUrl)(currentUrl);
161
- if (!currentValidation.ok) {
162
- return {
163
- kind: 'blocked',
164
- status: 0,
165
- message: currentValidation.reason,
166
- };
167
- }
168
- const result = await requestAsset({
169
- url: currentValidation.normalized,
170
- method: init.method,
171
- headers: init.headers,
172
- signal: controller.signal,
173
- });
174
- if (result.kind === 'blocked')
175
- return result;
176
- const response = result.response;
177
- const isRedirect = response.status >= 300 && response.status < 400;
178
- const location = locationHeader(response.headers);
179
- if (!isRedirect || !location) {
180
- return { kind: 'response', response };
181
- }
182
- if (hop === MAX_REDIRECTS) {
183
- return {
184
- kind: 'blocked',
185
- status: 0,
186
- message: `Exceeded ${MAX_REDIRECTS} redirects probing asset.`,
187
- };
188
- }
189
- // Resolve relative redirects against the URL we just hit.
190
- let nextUrl;
191
- try {
192
- nextUrl = new URL(location, currentUrl);
193
- }
194
- catch {
195
- return {
196
- kind: 'blocked',
197
- status: 0,
198
- message: `Malformed redirect Location '${location}'.`,
199
- };
200
- }
201
- currentUrl = nextUrl.toString();
202
- }
203
- return {
204
- kind: 'blocked',
205
- status: 0,
206
- message: 'Redirect handling exhausted unexpectedly.',
207
- };
208
- };
209
- try {
210
- let result = await requestWithGuardedRedirects(validation.normalized, {
211
- method: 'HEAD',
212
- });
213
- if (result.kind === 'blocked') {
214
- return { ok: false, status: result.status, message: result.message };
215
- }
216
- let response = result.response;
217
- // Some CDNs reject HEAD with 405 — fall back to a ranged GET.
218
- if (response.status === 405 || response.status === 501) {
219
- result = await requestWithGuardedRedirects(validation.normalized, {
220
- method: 'GET',
221
- headers: { Range: 'bytes=0-0' },
222
- });
223
- if (result.kind === 'blocked') {
224
- return { ok: false, status: result.status, message: result.message };
225
- }
226
- response = result.response;
227
- }
228
- return {
229
- ok: response.status >= 200 && response.status < 300,
230
- status: response.status,
231
- };
232
- }
233
- catch (err) {
234
- const message = err instanceof Error ? err.message : String(err);
235
- return { ok: false, status: 0, message };
236
- }
237
- finally {
238
- clearTimeout(timer);
239
- }
240
- };
241
- exports.DEFAULT_ASSET_PROBER = DEFAULT_ASSET_PROBER;
242
- /**
243
- * Run preview QA against a generated static-preview HTML document. The
244
- * static layer extracts external asset URLs and local asset references; the
245
- * injectable runtime layer adds console/runtime checks. Returns a single
246
- * `VariantQaResult` with the combined verdict.
247
- */
248
- async function runPreviewQa(input) {
249
- const html = input.html;
250
- if (typeof html !== 'string' || html.trim().length === 0) {
9
+ const runPreviewQa = async (input) => {
10
+ const source = input.options?.source;
11
+ if (typeof input.html !== 'string' || input.html.trim().length === 0) {
251
12
  return {
252
13
  status: 'failed',
253
14
  issues: [
254
15
  {
255
16
  kind: 'preview_unavailable',
256
- detail: input.options?.source ?? 'inline',
17
+ detail: source ?? 'inline',
257
18
  message: 'Preview HTML was empty',
258
19
  },
259
20
  ],
260
21
  summary: 'Preview unavailable: generated HTML was empty.',
261
- checkedSource: input.options?.source,
262
- };
263
- }
264
- const assetProber = input.options?.assetProber ?? exports.DEFAULT_ASSET_PROBER;
265
- const runtimeRunner = input.options?.runtimeQaRunner ?? exports.DEFAULT_RUNTIME_QA_RUNNER;
266
- const assetTimeoutMs = input.options?.assetTimeoutMs ?? DEFAULT_ASSET_TIMEOUT_MS;
267
- const source = input.options?.source;
268
- const localAssetBasePath = input.options?.localAssetBasePath;
269
- const issues = [];
270
- const blockingAssetDetails = new Set();
271
- const assetUrls = extractExternalAssetUrls(html);
272
- await Promise.all(assetUrls.map(async (url) => {
273
- const result = await assetProber(url, assetTimeoutMs);
274
- if (!result.ok) {
275
- issues.push({
276
- kind: 'asset_load_failed',
277
- detail: url,
278
- message: result.status > 0
279
- ? `HTTP ${result.status}`
280
- : result.message ?? 'Network error',
281
- });
282
- }
283
- }));
284
- const localAssetPaths = extractLocalAssetPaths(html);
285
- for (const assetPath of localAssetPaths) {
286
- const validation = validateLocalAssetReference(assetPath, localAssetBasePath);
287
- if (!validation.ok) {
288
- blockingAssetDetails.add(assetPath);
289
- issues.push({
290
- kind: 'asset_load_failed',
291
- detail: assetPath,
292
- message: validation.message,
293
- });
294
- }
295
- }
296
- try {
297
- const runtimeIssues = await runtimeRunner({ html, source: source ?? 'inline' });
298
- for (const issue of runtimeIssues) {
299
- issues.push(issue);
300
- }
301
- }
302
- catch (err) {
303
- issues.push({
304
- kind: 'console_error',
305
- detail: 'runtime_qa_runner',
306
- message: err instanceof Error ? err.message : String(err),
307
- });
308
- }
309
- // External-asset probe failures don't block — the user's browser fetches
310
- // these directly when viewing the preview, so a server-side reachability
311
- // failure (e.g. IPv6/SSRF-guard edge cases on fonts.googleapis.com) doesn't
312
- // predict whether the iframe will render. Local asset failures do block:
313
- // if the generated static preview references `./hero.png` and no sibling
314
- // file exists in the asset base, the iframe has nowhere to load it from.
315
- const blockingIssues = issues.filter((issue) => issue.kind !== 'asset_load_failed' ||
316
- (issue.detail ? blockingAssetDetails.has(issue.detail) : false));
317
- if (blockingIssues.length === 0) {
318
- const assetIssueCount = issues.length;
319
- return {
320
- status: 'passed',
321
- issues,
322
- summary: assetIssueCount === 0
323
- ? 'Preview QA passed — assets reachable, no runtime errors.'
324
- : `Preview QA passed — ${assetIssueCount} external asset${assetIssueCount === 1 ? '' : 's'} unreachable from server (browser will fetch independently).`,
325
22
  checkedSource: source,
326
23
  };
327
24
  }
328
25
  return {
329
- status: 'failed',
330
- issues,
331
- summary: buildIssueSummary(issues),
26
+ status: 'passed',
27
+ issues: [],
28
+ summary: 'Preview integrity passed.',
332
29
  checkedSource: source,
333
30
  };
334
- }
335
- const buildIssueSummary = (issues) => {
336
- const counts = {
337
- asset_load_failed: 0,
338
- console_error: 0,
339
- preview_unavailable: 0,
340
- design_quality: 0,
341
- };
342
- for (const issue of issues) {
343
- counts[issue.kind] += 1;
344
- }
345
- const fragments = [];
346
- if (counts.asset_load_failed > 0) {
347
- const first = issues.find((i) => i.kind === 'asset_load_failed');
348
- fragments.push(counts.asset_load_failed === 1
349
- ? `asset failed to load (${first?.detail ?? 'unknown'})`
350
- : `${counts.asset_load_failed} assets failed to load`);
351
- }
352
- if (counts.console_error > 0) {
353
- fragments.push(counts.console_error === 1
354
- ? '1 console/runtime error detected'
355
- : `${counts.console_error} console/runtime errors detected`);
356
- }
357
- if (counts.preview_unavailable > 0) {
358
- fragments.push('preview unavailable');
359
- }
360
- return `Preview QA failed: ${fragments.join('; ')}.`;
361
- };
362
- /**
363
- * Extract external asset URLs from a generated HTML document. Pulls from
364
- * the common attributes (`src`, `href`, `poster`, `data-*` images) and
365
- * inline CSS `url(...)` references. Keeps only http(s) URLs; local asset
366
- * references are validated separately against the static preview asset base.
367
- */
368
- function extractExternalAssetUrls(html) {
369
- const seen = new Set();
370
- const push = (raw) => {
371
- if (!raw)
372
- return;
373
- const trimmed = raw.trim();
374
- if (!trimmed)
375
- return;
376
- if (!/^https?:\/\//i.test(trimmed))
377
- return;
378
- seen.add(trimmed);
379
- };
380
- const attributeRegex = /\b(?:src|href|poster|data-src|data-href|data-image|model-src)\s*=\s*("|')([^"']+)\1/gi;
381
- let attrMatch;
382
- while ((attrMatch = attributeRegex.exec(html))) {
383
- push(attrMatch[2]);
384
- }
385
- // <link rel="stylesheet" href="..."> is already covered above; capture
386
- // <img srcset> entries here. srcset is a comma list of "url descriptor".
387
- const srcsetRegex = /\bsrcset\s*=\s*("|')([^"']+)\1/gi;
388
- let srcsetMatch;
389
- while ((srcsetMatch = srcsetRegex.exec(html))) {
390
- const list = srcsetMatch[2];
391
- for (const entry of list.split(',')) {
392
- const url = entry.trim().split(/\s+/)[0];
393
- push(url);
394
- }
395
- }
396
- // Inline CSS `url(...)` references (background-image, etc.). Strip
397
- // surrounding quotes if present.
398
- const cssUrlRegex = /url\(\s*("|'|)([^"')]+)\1\s*\)/gi;
399
- let cssMatch;
400
- while ((cssMatch = cssUrlRegex.exec(html))) {
401
- push(cssMatch[2]);
402
- }
403
- return [...seen];
404
- }
405
- function extractLocalAssetPaths(html) {
406
- const seen = new Set();
407
- const push = (raw) => {
408
- if (!raw)
409
- return;
410
- const trimmed = raw.trim();
411
- if (!trimmed || !isLocalAssetReference(trimmed))
412
- return;
413
- seen.add(trimmed);
414
- };
415
- const attributeRegex = /\b(?:src|href|poster|data-src|data-href|data-image|model-src)\s*=\s*("|')([^"']+)\1/gi;
416
- let attrMatch;
417
- while ((attrMatch = attributeRegex.exec(html))) {
418
- push(attrMatch[2]);
419
- }
420
- const srcsetRegex = /\bsrcset\s*=\s*("|')([^"']+)\1/gi;
421
- let srcsetMatch;
422
- while ((srcsetMatch = srcsetRegex.exec(html))) {
423
- const list = srcsetMatch[2];
424
- for (const entry of list.split(',')) {
425
- const url = entry.trim().split(/\s+/)[0];
426
- push(url);
427
- }
428
- }
429
- const cssUrlRegex = /url\(\s*("|'|)([^"')]+)\1\s*\)/gi;
430
- let cssMatch;
431
- while ((cssMatch = cssUrlRegex.exec(html))) {
432
- push(cssMatch[2]);
433
- }
434
- return [...seen];
435
- }
436
- const isLocalAssetReference = (raw) => {
437
- if (/^(?:https?:|data:|blob:|mailto:|tel:|javascript:)/i.test(raw)) {
438
- return false;
439
- }
440
- if (raw.startsWith('#') || raw.startsWith('//'))
441
- return false;
442
- let pathname;
443
- try {
444
- pathname = new URL(raw, 'http://rivet.local').pathname;
445
- }
446
- catch {
447
- return false;
448
- }
449
- const extension = path_1.default.extname(pathname).toLowerCase();
450
- return LOCAL_ASSET_EXTENSIONS.has(extension);
451
- };
452
- const normalizeLocalAssetPath = (raw) => {
453
- try {
454
- const pathOnly = raw.trim().split(/[?#]/)[0] ?? '';
455
- const decoded = decodeURIComponent(pathOnly);
456
- return decoded.startsWith('/') ? decoded.replace(/^\/+/, '') : decoded;
457
- }
458
- catch {
459
- return null;
460
- }
461
- };
462
- const validateLocalAssetReference = (raw, localAssetBasePath) => {
463
- if (!localAssetBasePath) {
464
- return {
465
- ok: false,
466
- message: 'Local asset reference has no static preview asset base; copy the file or inline the asset.',
467
- };
468
- }
469
- const relativePath = normalizeLocalAssetPath(raw);
470
- if (!relativePath) {
471
- return { ok: false, message: 'Local asset reference is malformed.' };
472
- }
473
- const base = path_1.default.resolve(localAssetBasePath);
474
- const target = path_1.default.resolve(base, relativePath);
475
- if (target !== base && !target.startsWith(base + path_1.default.sep)) {
476
- return {
477
- ok: false,
478
- message: 'Local asset reference escapes the static preview asset base.',
479
- };
480
- }
481
- try {
482
- const stat = fs_1.default.statSync(target);
483
- if (!stat.isFile()) {
484
- return { ok: false, message: 'Local asset reference is not a file.' };
485
- }
486
- return { ok: true };
487
- }
488
- catch {
489
- return {
490
- ok: false,
491
- message: 'Local asset reference was not found in the static preview.',
492
- };
493
- }
494
31
  };
32
+ exports.runPreviewQa = runPreviewQa;
495
33
  //# sourceMappingURL=previewQa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"previewQa.js","sourceRoot":"","sources":["../../src/agent-variants/previewQa.ts"],"names":[],"mappings":";;;;;;AA4UA,oCA0GC;AAwCD,4DAqCC;AAED,wDAiCC;AAtiBD,8CAAsB;AACtB,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;AAE1B,gDAAwB;AAMxB,mDAGyB;AAEzB;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAmBH;;;;GAIG;AACI,MAAM,yBAAyB,GAAoB,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;AAA5D,QAAA,yBAAyB,6BAAmC;AAsBzE,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,KAAK,EAChC,QAAgB,EAIhB,EAAE;IACF,IAAI,IAAA,sCAAsB,EAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS,QAAQ,mCAAmC;SAC9D,CAAC;IACJ,CAAC;IACD,IAAI,SAA8B,CAAC;IACnC,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,aAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS,QAAQ,iCAAiC;SAC5D,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACtD,IAAA,sCAAsB,EAAC,OAAO,CAAC,CAChC,CAAC;IACF,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS,QAAQ,mCAAmC;SAC9D,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS,QAAQ,kCAAkC;SAC7D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACrC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAiC,EAAsB,EAAE;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,YAAY,GAAG,KAAK,EAAE,KAK3B,EAGC,EAAE;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC;IACD,MAAM,MAAM,GAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,CAAC,CAAC,cAAI,CAAC;IAE9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAC/B;YACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;YAC9B,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE;YAC1C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM;YACN,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,EACD,CAAC,QAAQ,EAAE,EAAE;YACX,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC;gBACN,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,MAAM,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC;oBAChC,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B;aACF,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,oBAAoB,GAAgB,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;IACxE,wEAAwE;IACxE,kEAAkE;IAClE,0EAA0E;IAC1E,gDAAgD;IAChD,MAAM,UAAU,GAAG,IAAA,sCAAsB,EAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAE9D,MAAM,2BAA2B,GAAG,KAAK,EACvC,UAAkB,EAClB,IAAkE,EAIlE,EAAE;QACF,IAAI,UAAU,GAAG,UAAU,CAAC;QAC5B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,iBAAiB,GAAG,IAAA,sCAAsB,EAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;gBAC1B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,iBAAiB,CAAC,MAAM;iBAClC,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,GAAG,EAAE,iBAAiB,CAAC,UAAU;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;YACnE,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC7B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;gBAC1B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,YAAY,aAAa,2BAA2B;iBAC9D,CAAC;YACJ,CAAC;YACD,0DAA0D;YAC1D,IAAI,OAAY,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,gCAAgC,QAAQ,IAAI;iBACtD,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC;QACD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,2CAA2C;SACrD,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,MAAM,2BAA2B,CAAC,UAAU,CAAC,UAAU,EAAE;YACpE,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACvE,CAAC;QACD,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC/B,8DAA8D;QAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,MAAM,GAAG,MAAM,2BAA2B,CAAC,UAAU,CAAC,UAAU,EAAE;gBAChE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;aAChC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACvE,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,CAAC;QACD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG;YACnD,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC,CAAC;AAnGW,QAAA,oBAAoB,wBAmG/B;AAoBF;;;;;GAKG;AACI,KAAK,UAAU,YAAY,CAChC,KAAqB;IAErB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,QAAQ;oBACzC,OAAO,EAAE,wBAAwB;iBAClC;aACF;YACD,OAAO,EAAE,gDAAgD;YACzD,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM;SACrC,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,IAAI,4BAAoB,CAAC;IACvE,MAAM,aAAa,GACjB,KAAK,CAAC,OAAO,EAAE,eAAe,IAAI,iCAAyB,CAAC;IAC9D,MAAM,cAAc,GAClB,KAAK,CAAC,OAAO,EAAE,cAAc,IAAI,wBAAwB,CAAC;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;IACrC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAE7D,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/C,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,GAAG;gBACX,OAAO,EACL,MAAM,CAAC,MAAM,GAAG,CAAC;oBACf,CAAC,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE;oBACzB,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,eAAe;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,2BAA2B,CAC5C,SAAS,EACT,kBAAkB,CACnB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,UAAU,CAAC,OAAO;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;QAChF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,mBAAmB;YAC3B,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAClC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,mBAAmB;QAClC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAClE,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM;YACN,OAAO,EACL,eAAe,KAAK,CAAC;gBACnB,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,uBAAuB,eAAe,kBAAkB,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,8DAA8D;YAC5J,aAAa,EAAE,MAAM;SACtB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,MAAM;QACN,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC;QAClC,aAAa,EAAE,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAwB,EAAU,EAAE;IAC7D,MAAM,MAAM,GAAuC;QACjD,iBAAiB,EAAE,CAAC;QACpB,aAAa,EAAE,CAAC;QAChB,mBAAmB,EAAE,CAAC;QACtB,cAAc,EAAE,CAAC;KAClB,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;QACjE,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,iBAAiB,KAAK,CAAC;YAC5B,CAAC,CAAC,yBAAyB,KAAK,EAAE,MAAM,IAAI,SAAS,GAAG;YACxD,CAAC,CAAC,GAAG,MAAM,CAAC,iBAAiB,wBAAwB,CACxD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,aAAa,KAAK,CAAC;YACxB,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,GAAG,MAAM,CAAC,aAAa,kCAAkC,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;QACnC,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,sBAAsB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACvD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,IAAY;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,GAAuB,EAAE,EAAE;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO;QAC3C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,uFAAuF,CAAC;IAC/G,IAAI,SAAiC,CAAC;IACtC,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,WAAW,GAAG,kCAAkC,CAAC;IACvD,IAAI,WAAmC,CAAC;IACxC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,iCAAiC;IACjC,MAAM,WAAW,GAAG,kCAAkC,CAAC;IACvD,IAAI,QAAgC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,GAAuB,EAAE,EAAE;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;YAAE,OAAO;QACxD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,cAAc,GAClB,uFAAuF,CAAC;IAC1F,IAAI,SAAiC,CAAC;IACtC,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,kCAAkC,CAAC;IACvD,IAAI,WAAmC,CAAC;IACxC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,kCAAkC,CAAC;IACvD,IAAI,QAAgC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAW,EAAE;IACrD,IAAI,oDAAoD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAiB,EAAE;IAC7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAClC,GAAW,EACX,kBAAsC,EACS,EAAE;IACjD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,4FAA4F;SAC/F,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC;IACvE,CAAC;IACD,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,cAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,8DAA8D;SACxE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,4DAA4D;SACtE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"previewQa.js","sourceRoot":"","sources":["../../src/agent-variants/previewQa.ts"],"names":[],"mappings":";;;AAYA;;;;GAIG;AACI,MAAM,YAAY,GAAG,KAAK,EAC/B,KAAqB,EACK,EAAE;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;IACrC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,MAAM,EAAE,MAAM,IAAI,QAAQ;oBAC1B,OAAO,EAAE,wBAAwB;iBAClC;aACF;YACD,OAAO,EAAE,gDAAgD;YACzD,aAAa,EAAE,MAAM;SACtB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,2BAA2B;QACpC,aAAa,EAAE,MAAM;KACtB,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,YAAY,gBAyBvB"}
@@ -7,7 +7,7 @@ export declare const isLocalLiteralHostname: (hostname: string) => boolean;
7
7
  /**
8
8
  * Synchronous URL validator: enforces HTTP/HTTPS scheme and rejects literal
9
9
  * hostnames that match local/loopback/link-local patterns. Used as the SSRF
10
- * guard for `Brief.visualReferenceUrl` and static-preview QA.
10
+ * guard for visual reference URLs.
11
11
  */
12
12
  export declare const validateInspirationUrl: (rawUrl: string) => {
13
13
  ok: true;
@@ -66,7 +66,7 @@ exports.isLocalLiteralHostname = isLocalLiteralHostname;
66
66
  /**
67
67
  * Synchronous URL validator: enforces HTTP/HTTPS scheme and rejects literal
68
68
  * hostnames that match local/loopback/link-local patterns. Used as the SSRF
69
- * guard for `Brief.visualReferenceUrl` and static-preview QA.
69
+ * guard for visual reference URLs.
70
70
  */
71
71
  const validateInspirationUrl = (rawUrl) => {
72
72
  const trimmed = rawUrl.trim();
@@ -19,10 +19,17 @@ import type { HostVariantImplementationWorkItemSnapshot } from './contracts';
19
19
  * compose the pointer without filesystem access.
20
20
  */
21
21
  export declare const workItemBriefingPath: (sessionId: string, workId: string) => string;
22
- export declare const workItemCompleteCommand: (workId: string) => string;
22
+ type WorkItemCompleteCommandContext = {
23
+ projectPath?: string;
24
+ sessionId?: string;
25
+ };
26
+ /** Builds the command that reports one host-owned work item complete. */
27
+ export declare const workItemCompleteCommand: (workId: string, context?: WorkItemCompleteCommandContext) => string;
23
28
  /** The ~40-token prompt the coordinator passes to each worker verbatim. */
24
29
  export declare const workItemWorkerPrompt: (sessionId: string, item: HostVariantImplementationWorkItemSnapshot) => string;
25
30
  export declare const renderWorkItemBriefing: (item: HostVariantImplementationWorkItemSnapshot, options?: {
26
31
  completion?: "self" | "executor";
32
+ completionCommand?: WorkItemCompleteCommandContext;
27
33
  }) => string;
34
+ export {};
28
35
  //# sourceMappingURL=workItemBriefing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workItemBriefing.d.ts","sourceRoot":"","sources":["../../src/agent-variants/workItemBriefing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,aAAa,CAAC;AAK7E;;;;;;;;;;;;;;;;;;GAkBG;AAEH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,MACwE,CAAC;AAE5E,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,KAAG,MACD,CAAC;AAEzD,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,MAAM,yCAAyC,KAC9C,MAG4E,CAAC;AAwChF,eAAO,MAAM,sBAAsB,GACjC,MAAM,yCAAyC,EAC/C,UAAU;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,KAC7C,MAmMF,CAAC"}
1
+ {"version":3,"file":"workItemBriefing.d.ts","sourceRoot":"","sources":["../../src/agent-variants/workItemBriefing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,aAAa,CAAC;AAK7E;;;;;;;;;;;;;;;;;;GAkBG;AAEH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,MACwE,CAAC;AAE5E,KAAK,8BAA8B,GAAG;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAQF,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,EACd,UAAU,8BAA8B,KACvC,MAaW,CAAC;AAEf,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,MAAM,yCAAyC,KAC9C,MAG4E,CAAC;AAwChF,eAAO,MAAM,sBAAsB,GACjC,MAAM,yCAAyC,EAC/C,UAAU;IACR,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;CACpD,KACA,MA4NF,CAAC"}