paracosm 0.8.515 → 0.8.536
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/dist/cli/quickstart-routes.d.ts +30 -0
- package/dist/cli/quickstart-routes.d.ts.map +1 -1
- package/dist/cli/quickstart-routes.js +156 -0
- package/dist/cli/quickstart-routes.js.map +1 -1
- package/dist/cli/server/deep-research.d.ts +49 -9
- package/dist/cli/server/deep-research.d.ts.map +1 -1
- package/dist/cli/server/deep-research.js +157 -38
- package/dist/cli/server/deep-research.js.map +1 -1
- package/dist/cli/server-app.d.ts.map +1 -1
- package/dist/cli/server-app.js +137 -20
- package/dist/cli/server-app.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* @module paracosm/cli/quickstart-routes
|
|
14
14
|
*/
|
|
15
15
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
16
|
+
import { WorldModel } from '../runtime/world-model/index.js';
|
|
16
17
|
import type { ScenarioPackage } from '../engine/types.js';
|
|
17
18
|
export interface QuickstartDeps {
|
|
18
19
|
/** Installs a compiled scenario as the active scenario. */
|
|
@@ -40,6 +41,16 @@ export interface QuickstartDeps {
|
|
|
40
41
|
domain: string;
|
|
41
42
|
}>;
|
|
42
43
|
}>) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Lazily compile + cache the corporate-quarterly scenario and return a
|
|
46
|
+
* WorldModel ready for `simulateIntervention`. Used by the
|
|
47
|
+
* /simulate-intervention route so the digital-twin tab does not need
|
|
48
|
+
* the user to compile a scenario first.
|
|
49
|
+
*
|
|
50
|
+
* Returns undefined when the underlying scenario file is missing or
|
|
51
|
+
* compile fails (caller writes a 502 in that case).
|
|
52
|
+
*/
|
|
53
|
+
getDigitalTwinWorld?: () => Promise<WorldModel | null>;
|
|
43
54
|
}
|
|
44
55
|
export declare function handleFetchSeed(_req: IncomingMessage, res: ServerResponse, body: unknown, deps: QuickstartDeps): Promise<void>;
|
|
45
56
|
export declare function handleCompileFromSeed(_req: IncomingMessage, res: ServerResponse, body: unknown, deps: QuickstartDeps): Promise<void>;
|
|
@@ -57,4 +68,23 @@ export declare function handleGenerateActors(_req: IncomingMessage, res: ServerR
|
|
|
57
68
|
* rather than failing the whole run.
|
|
58
69
|
*/
|
|
59
70
|
export declare function handleGroundScenario(_req: IncomingMessage, res: ServerResponse, body: unknown, deps: QuickstartDeps): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* POST /api/quickstart/simulate-intervention
|
|
73
|
+
*
|
|
74
|
+
* Synchronous digital-twin run: applies a SubjectConfig + InterventionConfig
|
|
75
|
+
* to a leader against the corporate-quarterly scenario and returns the
|
|
76
|
+
* full RunArtifact JSON. Drives the dashboard's Digital Twin tab.
|
|
77
|
+
*
|
|
78
|
+
* Behaviour:
|
|
79
|
+
* - If `scenarioId` is provided, resolves it via deps.getScenarioById.
|
|
80
|
+
* - Otherwise calls deps.getDigitalTwinWorld() which lazily compiles
|
|
81
|
+
* corporate-quarterly.json and caches the WorldModel.
|
|
82
|
+
* - Leader defaults to a Cautious Methodical Evaluator HEXACO profile
|
|
83
|
+
* if the body does not supply one.
|
|
84
|
+
* - Options default to maxTurns=2, seed=11, costPreset='economy' so a
|
|
85
|
+
* single intervention run completes in ~30-90s on prod.
|
|
86
|
+
*
|
|
87
|
+
* Response shape: `{ artifact, durationMs }` on success.
|
|
88
|
+
*/
|
|
89
|
+
export declare function handleSimulateIntervention(_req: IncomingMessage, res: ServerResponse, body: unknown, deps: QuickstartDeps): Promise<void>;
|
|
60
90
|
//# sourceMappingURL=quickstart-routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart-routes.d.ts","sourceRoot":"","sources":["../../src/cli/quickstart-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIjE,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"quickstart-routes.d.ts","sourceRoot":"","sources":["../../src/cli/quickstart-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIjE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,oBAAoB,CAAC;AA0GvE,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,iBAAiB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,oEAAoE;IACpE,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,GAAG,SAAS,CAAC;IAC7D,6EAA6E;IAC7E,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/F,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB;;;kEAG8D;IAC9D,wBAAwB,CAAC,EAAE,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,KACjG,IAAI,CAAC;IACV;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CACxD;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAuEf"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { compileFromSeed } from '../engine/compiler/compile-from-seed.js';
|
|
3
3
|
import { generateQuickstartActors } from '../runtime/world-model/index.js';
|
|
4
|
+
import { WorldModel } from '../runtime/world-model/index.js';
|
|
4
5
|
import { groundScenario } from './server/deep-research.js';
|
|
5
6
|
const FetchSeedSchema = z.object({
|
|
6
7
|
url: z.string().url().max(2048),
|
|
@@ -23,6 +24,76 @@ const GenerateActorsSchema = z.object({
|
|
|
23
24
|
const GroundScenarioSchema = z.object({
|
|
24
25
|
scenarioId: z.string().min(3).max(64),
|
|
25
26
|
});
|
|
27
|
+
const SubjectSignalSchema = z.object({
|
|
28
|
+
label: z.string().min(1).max(80),
|
|
29
|
+
value: z.union([z.number(), z.string()]),
|
|
30
|
+
unit: z.string().max(40).optional(),
|
|
31
|
+
recordedAt: z.string().max(64).optional(),
|
|
32
|
+
});
|
|
33
|
+
const SubjectMarkerSchema = z.object({
|
|
34
|
+
id: z.string().min(1).max(64),
|
|
35
|
+
category: z.string().max(40).optional(),
|
|
36
|
+
value: z.union([z.string(), z.number(), z.boolean()]),
|
|
37
|
+
});
|
|
38
|
+
const SubjectSchema = z.object({
|
|
39
|
+
id: z.string().min(1).max(80),
|
|
40
|
+
name: z.string().min(1).max(120),
|
|
41
|
+
profile: z.record(z.string(), z.unknown()).optional(),
|
|
42
|
+
signals: z.array(SubjectSignalSchema).max(40).optional(),
|
|
43
|
+
markers: z.array(SubjectMarkerSchema).max(40).optional(),
|
|
44
|
+
});
|
|
45
|
+
const InterventionSchema = z.object({
|
|
46
|
+
id: z.string().min(1).max(80),
|
|
47
|
+
name: z.string().min(1).max(120),
|
|
48
|
+
description: z.string().min(1).max(600),
|
|
49
|
+
duration: z.object({
|
|
50
|
+
value: z.number(),
|
|
51
|
+
unit: z.string().min(1).max(40),
|
|
52
|
+
}).optional(),
|
|
53
|
+
adherenceProfile: z.object({
|
|
54
|
+
expected: z.number().min(0).max(1),
|
|
55
|
+
risks: z.array(z.string()).optional(),
|
|
56
|
+
}).optional(),
|
|
57
|
+
});
|
|
58
|
+
const LeaderSchema = z.object({
|
|
59
|
+
name: z.string().min(1).max(80),
|
|
60
|
+
archetype: z.string().min(1).max(60),
|
|
61
|
+
unit: z.string().min(1).max(80).optional(),
|
|
62
|
+
hexaco: z.object({
|
|
63
|
+
openness: z.number().min(0).max(1),
|
|
64
|
+
conscientiousness: z.number().min(0).max(1),
|
|
65
|
+
extraversion: z.number().min(0).max(1),
|
|
66
|
+
agreeableness: z.number().min(0).max(1),
|
|
67
|
+
emotionality: z.number().min(0).max(1),
|
|
68
|
+
honestyHumility: z.number().min(0).max(1),
|
|
69
|
+
}),
|
|
70
|
+
instructions: z.string().default(''),
|
|
71
|
+
});
|
|
72
|
+
const SimulateInterventionSchema = z.object({
|
|
73
|
+
subject: SubjectSchema,
|
|
74
|
+
intervention: InterventionSchema,
|
|
75
|
+
leader: LeaderSchema.optional(),
|
|
76
|
+
scenarioId: z.string().min(3).max(80).optional(),
|
|
77
|
+
options: z.object({
|
|
78
|
+
maxTurns: z.number().int().min(1).max(6).optional(),
|
|
79
|
+
seed: z.number().int().optional(),
|
|
80
|
+
costPreset: z.enum(['quality', 'economy']).optional(),
|
|
81
|
+
}).optional(),
|
|
82
|
+
});
|
|
83
|
+
const DEFAULT_DIGITAL_TWIN_LEADER = {
|
|
84
|
+
name: 'Cautious Methodical Evaluator',
|
|
85
|
+
archetype: 'The Methodical Evaluator',
|
|
86
|
+
unit: 'Lab leadership',
|
|
87
|
+
hexaco: {
|
|
88
|
+
openness: 0.55,
|
|
89
|
+
conscientiousness: 0.92,
|
|
90
|
+
extraversion: 0.4,
|
|
91
|
+
agreeableness: 0.65,
|
|
92
|
+
emotionality: 0.55,
|
|
93
|
+
honestyHumility: 0.88,
|
|
94
|
+
},
|
|
95
|
+
instructions: '',
|
|
96
|
+
};
|
|
26
97
|
export async function handleFetchSeed(_req, res, body, deps) {
|
|
27
98
|
const parsed = FetchSeedSchema.safeParse(body);
|
|
28
99
|
if (!parsed.success) {
|
|
@@ -154,6 +225,8 @@ export async function handleGroundScenario(_req, res, body, deps) {
|
|
|
154
225
|
totalSources: result.totalSources,
|
|
155
226
|
durationMs: result.durationMs,
|
|
156
227
|
emptyQueries: result.emptyQueries,
|
|
228
|
+
providersUsed: result.providersUsed,
|
|
229
|
+
providersFailed: result.providersFailed,
|
|
157
230
|
}));
|
|
158
231
|
}
|
|
159
232
|
catch (err) {
|
|
@@ -161,4 +234,87 @@ export async function handleGroundScenario(_req, res, body, deps) {
|
|
|
161
234
|
res.end(JSON.stringify({ error: `Grounding failed: ${String(err)}` }));
|
|
162
235
|
}
|
|
163
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* POST /api/quickstart/simulate-intervention
|
|
239
|
+
*
|
|
240
|
+
* Synchronous digital-twin run: applies a SubjectConfig + InterventionConfig
|
|
241
|
+
* to a leader against the corporate-quarterly scenario and returns the
|
|
242
|
+
* full RunArtifact JSON. Drives the dashboard's Digital Twin tab.
|
|
243
|
+
*
|
|
244
|
+
* Behaviour:
|
|
245
|
+
* - If `scenarioId` is provided, resolves it via deps.getScenarioById.
|
|
246
|
+
* - Otherwise calls deps.getDigitalTwinWorld() which lazily compiles
|
|
247
|
+
* corporate-quarterly.json and caches the WorldModel.
|
|
248
|
+
* - Leader defaults to a Cautious Methodical Evaluator HEXACO profile
|
|
249
|
+
* if the body does not supply one.
|
|
250
|
+
* - Options default to maxTurns=2, seed=11, costPreset='economy' so a
|
|
251
|
+
* single intervention run completes in ~30-90s on prod.
|
|
252
|
+
*
|
|
253
|
+
* Response shape: `{ artifact, durationMs }` on success.
|
|
254
|
+
*/
|
|
255
|
+
export async function handleSimulateIntervention(_req, res, body, deps) {
|
|
256
|
+
const parsed = SimulateInterventionSchema.safeParse(body);
|
|
257
|
+
if (!parsed.success) {
|
|
258
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
259
|
+
res.end(JSON.stringify({
|
|
260
|
+
error: 'Invalid simulate-intervention payload',
|
|
261
|
+
issues: parsed.error.issues.slice(0, 5).map(i => `${i.path.join('.')}: ${i.message}`),
|
|
262
|
+
}));
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const { subject, intervention, leader, scenarioId, options = {} } = parsed.data;
|
|
266
|
+
let world = null;
|
|
267
|
+
if (scenarioId) {
|
|
268
|
+
const sc = deps.getScenarioById(scenarioId);
|
|
269
|
+
if (!sc) {
|
|
270
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
271
|
+
res.end(JSON.stringify({ error: `Scenario '${scenarioId}' not found.` }));
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
world = WorldModel.fromScenario(sc);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
if (!deps.getDigitalTwinWorld) {
|
|
278
|
+
res.writeHead(503, { 'Content-Type': 'application/json' });
|
|
279
|
+
res.end(JSON.stringify({ error: 'Digital-twin scenario provider not configured on server.' }));
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
world = await deps.getDigitalTwinWorld();
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
console.error('[simulate-intervention] getDigitalTwinWorld failed:', err);
|
|
287
|
+
res.writeHead(502, { 'Content-Type': 'application/json' });
|
|
288
|
+
res.end(JSON.stringify({ error: 'Failed to prepare digital-twin scenario.' }));
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (!world) {
|
|
292
|
+
res.writeHead(503, { 'Content-Type': 'application/json' });
|
|
293
|
+
res.end(JSON.stringify({ error: 'Digital-twin scenario unavailable. Provide scenarioId or check server config.' }));
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const effectiveLeader = leader
|
|
298
|
+
? { ...leader, unit: leader.unit ?? 'Lab leadership', instructions: leader.instructions ?? '' }
|
|
299
|
+
: DEFAULT_DIGITAL_TWIN_LEADER;
|
|
300
|
+
const startedAt = Date.now();
|
|
301
|
+
let artifact;
|
|
302
|
+
try {
|
|
303
|
+
artifact = await world.simulateIntervention(subject, intervention, effectiveLeader, {
|
|
304
|
+
maxTurns: options.maxTurns ?? 2,
|
|
305
|
+
seed: options.seed ?? 11,
|
|
306
|
+
costPreset: options.costPreset ?? 'economy',
|
|
307
|
+
captureSnapshots: false,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
console.error('[simulate-intervention] simulateIntervention failed:', err);
|
|
312
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
313
|
+
res.end(JSON.stringify({ error: `Intervention run failed: ${err instanceof Error ? err.message : String(err)}` }));
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const durationMs = Date.now() - startedAt;
|
|
317
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
318
|
+
res.end(JSON.stringify({ artifact, durationMs }));
|
|
319
|
+
}
|
|
164
320
|
//# sourceMappingURL=quickstart-routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart-routes.js","sourceRoot":"","sources":["../../src/cli/quickstart-routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"quickstart-routes.js","sourceRoot":"","sources":["../../src/cli/quickstart-routes.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAwB,MAAM,2BAA2B,CAAC;AAEjF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;CAChC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAChD,kEAAkE;IAClE,oEAAoE;IACpE,6DAA6D;IAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC,gEAAgE;IAChE,oEAAoE;IACpE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;KAChC,CAAC,CAAC,QAAQ,EAAE;IACb,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1C,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,aAAa;IACtB,YAAY,EAAE,kBAAkB;IAChC,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;KACtD,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAgB;IAC/C,IAAI,EAAE,+BAA+B;IACrC,SAAS,EAAE,0BAA0B;IACrC,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,GAAG;QACjB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,IAAI;KACtB;IACD,YAAY,EAAE,EAAE;CACjB,CAAC;AAgCF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAqB,EACrB,GAAmB,EACnB,IAAa,EACb,IAAoB;IAEpB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/G,OAAO;IACT,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5B,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,2BAA2B,MAAM,sBAAsB,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,wBAAwB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAqB,EACrB,GAAmB,EACnB,IAAa,EACb,IAAoB;IAEpB,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,KAAK,EAAE,mCAAmC;YAC1C,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SAC5D,CAAC,CAAC,CAAC;QACJ,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE;YAClD,aAAa,EAAE,IAAI,CAAC,eAAe;YACnC,UAAU,EAAE,IAAI,CAAC,YAAY;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAqB,EACrB,GAAmB,EACnB,IAAa,EACb,IAAoB;IAEpB,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACnH,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,MAAM,CAAC,IAAI,CAAC,UAAU,sEAAsE,EAAE,CAAC,CAAC,CAAC;QAC9I,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;YACzE,QAAQ,EAAE,IAAI,CAAC,eAAe;YAC9B,KAAK,EAAE,IAAI,CAAC,YAAY;SACzB,CAAC,CAAC;QACH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,4BAA4B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAqB,EACrB,GAAmB,EACnB,IAAa,EACb,IAAoB;IAEpB,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACnH,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,MAAM,CAAC,IAAI,CAAC,UAAU,sEAAsE,EAAE,CAAC,CAAC,CAAC;QAC9I,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAA2B,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gEAAgE;YAChE,mEAAmE;YACnE,WAAW;YACX,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QACD,mEAAmE;QACnE,oEAAoE;QACpE,kEAAkE;QAClE,gEAAgE;QAChE,4CAA4C;QAC5C,IAAI,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,eAAe,EAAE,MAAM,CAAC,eAAe;SACxC,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qBAAqB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAqB,EACrB,GAAmB,EACnB,IAAa,EACb,IAAoB;IAEpB,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,KAAK,EAAE,uCAAuC;YAC9C,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SACtF,CAAC,CAAC,CAAC;QACJ,OAAO;IACT,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEhF,IAAI,KAAK,GAAsB,IAAI,CAAC;IACpC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,UAAU,cAAc,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0DAA0D,EAAE,CAAC,CAAC,CAAC;YAC/F,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,GAAG,CAAC,CAAC;YAC1E,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,+EAA+E,EAAE,CAAC,CAAC,CAAC;YACpH,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAgB,MAAM;QACzC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,gBAAgB,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE;QAC/F,CAAC,CAAC,2BAA2B,CAAC;IAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,QAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,CACzC,OAAwB,EACxB,YAAkC,EAClC,eAAe,EACf;YACE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;YAC/B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;YAC3C,gBAAgB,EAAE,KAAK;SACxB,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAC;QAC3E,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnH,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -18,17 +18,24 @@
|
|
|
18
18
|
* @module paracosm/cli/server/deep-research
|
|
19
19
|
*/
|
|
20
20
|
import type { ScenarioPackage } from '../../engine/types.js';
|
|
21
|
+
/** Identifier for the search provider that surfaced a given result.
|
|
22
|
+
* Lets the UI render a per-source provider chip and lets the
|
|
23
|
+
* grounding pass dedupe across providers. */
|
|
24
|
+
export type SearchProvider = 'serper' | 'tavily' | 'firecrawl';
|
|
21
25
|
export interface SerperResult {
|
|
22
|
-
/** Result title from
|
|
26
|
+
/** Result title from the search provider. */
|
|
23
27
|
title: string;
|
|
24
28
|
/** Canonical URL of the source. */
|
|
25
29
|
link: string;
|
|
26
|
-
/** Free-text snippet
|
|
30
|
+
/** Free-text snippet, usually 100-200 chars. */
|
|
27
31
|
snippet: string;
|
|
28
32
|
/** Optional date string, present for news-style results. */
|
|
29
33
|
date?: string;
|
|
30
34
|
/** Origin domain (e.g. "wikipedia.org"); derived from `link`. */
|
|
31
35
|
domain: string;
|
|
36
|
+
/** Which provider surfaced this result. Surfaced in the citation
|
|
37
|
+
* log so the demo viewer sees parallel-provider grounding. */
|
|
38
|
+
provider: SearchProvider;
|
|
32
39
|
}
|
|
33
40
|
export interface GroundingCitation {
|
|
34
41
|
/** Query that surfaced this result. Useful for showing the user
|
|
@@ -60,6 +67,17 @@ export interface GroundingResult {
|
|
|
60
67
|
durationMs: number;
|
|
61
68
|
/** Queries that returned 0 results or failed. Used to surface gaps. */
|
|
62
69
|
emptyQueries: string[];
|
|
70
|
+
/** Providers that successfully returned at least one result on at
|
|
71
|
+
* least one query. Surfaced as a chip row in the Quickstart card so
|
|
72
|
+
* the demo viewer sees which sources backed the run. */
|
|
73
|
+
providersUsed: SearchProvider[];
|
|
74
|
+
/** Providers that errored out for every query (e.g. Firecrawl when
|
|
75
|
+
* the account is out of credits). Logged as warn lines so the user
|
|
76
|
+
* knows why a provider didn't contribute. */
|
|
77
|
+
providersFailed: Array<{
|
|
78
|
+
provider: SearchProvider;
|
|
79
|
+
reason: string;
|
|
80
|
+
}>;
|
|
63
81
|
}
|
|
64
82
|
/**
|
|
65
83
|
* Derive 3 search queries from the ScenarioPackage. We pick the
|
|
@@ -71,21 +89,43 @@ export interface GroundingResult {
|
|
|
71
89
|
*/
|
|
72
90
|
export declare function deriveGroundingQueries(scenario: ScenarioPackage): string[];
|
|
73
91
|
/**
|
|
74
|
-
* One Serper search. Returns up to `maxResults`
|
|
75
|
-
*
|
|
92
|
+
* One Serper search. Returns up to `maxResults` results. Throws on
|
|
93
|
+
* network/parse errors so the caller can mark the query as failed
|
|
76
94
|
* in its progress log; never returns null/undefined.
|
|
77
95
|
*/
|
|
78
96
|
export declare function searchSerper(query: string, apiKey: string, maxResults?: number, fetchImpl?: typeof fetch): Promise<SerperResult[]>;
|
|
79
97
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
98
|
+
* One Tavily search. Tavily ships its own AI-summarized results so
|
|
99
|
+
* the snippets are denser than Serper's. Auth is body-based
|
|
100
|
+
* (api_key field) rather than header — we use the modern body shape.
|
|
101
|
+
*/
|
|
102
|
+
export declare function searchTavily(query: string, apiKey: string, maxResults?: number, fetchImpl?: typeof fetch): Promise<SerperResult[]>;
|
|
103
|
+
/**
|
|
104
|
+
* One Firecrawl search. Currently disabled in the grounding pass
|
|
105
|
+
* because the production account is out of credits (HTTP 402). Kept
|
|
106
|
+
* for completeness so the grounding helper can light up Firecrawl
|
|
107
|
+
* automatically once credits are topped up — no code change required.
|
|
108
|
+
*/
|
|
109
|
+
export declare function searchFirecrawl(query: string, apiKey: string, maxResults?: number, fetchImpl?: typeof fetch): Promise<SerperResult[]>;
|
|
110
|
+
/**
|
|
111
|
+
* Run the grounding pass for a scenario. For each derived query, fans
|
|
112
|
+
* out to every configured search provider (Serper, Tavily, Firecrawl)
|
|
113
|
+
* in parallel, dedupes by URL across providers + queries, and emits
|
|
114
|
+
* progress callbacks for the Quickstart UI.
|
|
115
|
+
*
|
|
116
|
+
* Provider selection: every provider whose API key is non-empty is
|
|
117
|
+
* tried. A provider that fails on every query (e.g. Firecrawl HTTP 402
|
|
118
|
+
* when out of credits) is reported in `providersFailed` rather than
|
|
119
|
+
* crashing the whole pass — the run continues with whatever providers
|
|
120
|
+
* are healthy.
|
|
83
121
|
*
|
|
84
|
-
* Returns null when
|
|
85
|
-
*
|
|
122
|
+
* Returns null only when ALL providers are missing API keys; otherwise
|
|
123
|
+
* returns a result that may be partially-populated.
|
|
86
124
|
*/
|
|
87
125
|
export declare function groundScenario(scenario: ScenarioPackage, options?: {
|
|
88
126
|
serperApiKey?: string;
|
|
127
|
+
tavilyApiKey?: string;
|
|
128
|
+
firecrawlApiKey?: string;
|
|
89
129
|
maxResultsPerQuery?: number;
|
|
90
130
|
onProgress?: (event: GroundingProgressEvent) => void;
|
|
91
131
|
fetchImpl?: typeof fetch;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-research.d.ts","sourceRoot":"","sources":["../../../src/cli/server/deep-research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"deep-research.d.ts","sourceRoot":"","sources":["../../../src/cli/server/deep-research.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const SERPER_ENDPOINT = 'https://google.serper.dev/search';
|
|
2
|
+
const TAVILY_ENDPOINT = 'https://api.tavily.com/search';
|
|
3
|
+
const FIRECRAWL_ENDPOINT = 'https://api.firecrawl.dev/v1/search';
|
|
2
4
|
/**
|
|
3
5
|
* Derive 3 search queries from the ScenarioPackage. We pick the
|
|
4
6
|
* scenario's primary subject (compiled from the seed text), one
|
|
@@ -50,8 +52,8 @@ function urlDomain(url) {
|
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
53
|
-
* One Serper search. Returns up to `maxResults`
|
|
54
|
-
*
|
|
55
|
+
* One Serper search. Returns up to `maxResults` results. Throws on
|
|
56
|
+
* network/parse errors so the caller can mark the query as failed
|
|
55
57
|
* in its progress log; never returns null/undefined.
|
|
56
58
|
*/
|
|
57
59
|
export async function searchSerper(query, apiKey, maxResults = 5, fetchImpl = fetch) {
|
|
@@ -77,70 +79,187 @@ export async function searchSerper(query, apiKey, maxResults = 5, fetchImpl = fe
|
|
|
77
79
|
snippet: typeof r.snippet === 'string' ? r.snippet : '',
|
|
78
80
|
date: typeof r.date === 'string' ? r.date : undefined,
|
|
79
81
|
domain: urlDomain(r.link),
|
|
82
|
+
provider: 'serper',
|
|
80
83
|
}));
|
|
81
84
|
}
|
|
82
85
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
+
* One Tavily search. Tavily ships its own AI-summarized results so
|
|
87
|
+
* the snippets are denser than Serper's. Auth is body-based
|
|
88
|
+
* (api_key field) rather than header — we use the modern body shape.
|
|
89
|
+
*/
|
|
90
|
+
export async function searchTavily(query, apiKey, maxResults = 5, fetchImpl = fetch) {
|
|
91
|
+
const res = await fetchImpl(TAVILY_ENDPOINT, {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers: { 'Content-Type': 'application/json' },
|
|
94
|
+
body: JSON.stringify({ api_key: apiKey, query, max_results: maxResults }),
|
|
95
|
+
});
|
|
96
|
+
if (!res.ok) {
|
|
97
|
+
throw new Error(`Tavily HTTP ${res.status}: ${await res.text().catch(() => '<no body>')}`);
|
|
98
|
+
}
|
|
99
|
+
const body = (await res.json());
|
|
100
|
+
const results = body.results ?? [];
|
|
101
|
+
return results
|
|
102
|
+
.filter((r) => typeof r.title === 'string' && typeof r.url === 'string')
|
|
103
|
+
.slice(0, maxResults)
|
|
104
|
+
.map((r) => ({
|
|
105
|
+
title: r.title,
|
|
106
|
+
link: r.url,
|
|
107
|
+
snippet: typeof r.content === 'string' ? r.content : '',
|
|
108
|
+
date: typeof r.published_date === 'string' ? r.published_date : undefined,
|
|
109
|
+
domain: urlDomain(r.url),
|
|
110
|
+
provider: 'tavily',
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* One Firecrawl search. Currently disabled in the grounding pass
|
|
115
|
+
* because the production account is out of credits (HTTP 402). Kept
|
|
116
|
+
* for completeness so the grounding helper can light up Firecrawl
|
|
117
|
+
* automatically once credits are topped up — no code change required.
|
|
118
|
+
*/
|
|
119
|
+
export async function searchFirecrawl(query, apiKey, maxResults = 5, fetchImpl = fetch) {
|
|
120
|
+
const res = await fetchImpl(FIRECRAWL_ENDPOINT, {
|
|
121
|
+
method: 'POST',
|
|
122
|
+
headers: {
|
|
123
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
124
|
+
'Content-Type': 'application/json',
|
|
125
|
+
},
|
|
126
|
+
body: JSON.stringify({ query, limit: maxResults }),
|
|
127
|
+
});
|
|
128
|
+
if (!res.ok) {
|
|
129
|
+
throw new Error(`Firecrawl HTTP ${res.status}: ${await res.text().catch(() => '<no body>')}`);
|
|
130
|
+
}
|
|
131
|
+
const body = (await res.json());
|
|
132
|
+
const data = body.data ?? [];
|
|
133
|
+
return data
|
|
134
|
+
.filter((r) => typeof r.title === 'string' && typeof r.url === 'string')
|
|
135
|
+
.slice(0, maxResults)
|
|
136
|
+
.map((r) => ({
|
|
137
|
+
title: r.title,
|
|
138
|
+
link: r.url,
|
|
139
|
+
snippet: typeof r.description === 'string' ? r.description : '',
|
|
140
|
+
domain: urlDomain(r.url),
|
|
141
|
+
provider: 'firecrawl',
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Run the grounding pass for a scenario. For each derived query, fans
|
|
146
|
+
* out to every configured search provider (Serper, Tavily, Firecrawl)
|
|
147
|
+
* in parallel, dedupes by URL across providers + queries, and emits
|
|
148
|
+
* progress callbacks for the Quickstart UI.
|
|
86
149
|
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
150
|
+
* Provider selection: every provider whose API key is non-empty is
|
|
151
|
+
* tried. A provider that fails on every query (e.g. Firecrawl HTTP 402
|
|
152
|
+
* when out of credits) is reported in `providersFailed` rather than
|
|
153
|
+
* crashing the whole pass — the run continues with whatever providers
|
|
154
|
+
* are healthy.
|
|
155
|
+
*
|
|
156
|
+
* Returns null only when ALL providers are missing API keys; otherwise
|
|
157
|
+
* returns a result that may be partially-populated.
|
|
89
158
|
*/
|
|
90
159
|
export async function groundScenario(scenario, options = {}) {
|
|
91
|
-
const
|
|
92
|
-
|
|
160
|
+
const serperKey = options.serperApiKey ?? process.env.SERPER_API_KEY ?? '';
|
|
161
|
+
const tavilyKey = options.tavilyApiKey ?? process.env.TAVILY_API_KEY ?? '';
|
|
162
|
+
const firecrawlKey = options.firecrawlApiKey ?? process.env.FIRECRAWL_API_KEY ?? '';
|
|
163
|
+
if (!serperKey && !tavilyKey && !firecrawlKey)
|
|
93
164
|
return null;
|
|
94
|
-
const maxPerQuery = options.maxResultsPerQuery ??
|
|
165
|
+
const maxPerQuery = options.maxResultsPerQuery ?? 4;
|
|
95
166
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
96
167
|
const t0 = Date.now();
|
|
97
168
|
const queries = deriveGroundingQueries(scenario);
|
|
98
169
|
const seenUrls = new Set();
|
|
99
170
|
const citations = [];
|
|
100
171
|
const emptyQueries = [];
|
|
101
|
-
//
|
|
102
|
-
//
|
|
172
|
+
// Track per-provider success/failure across all queries so we can
|
|
173
|
+
// surface providersUsed / providersFailed at the end. We treat a
|
|
174
|
+
// provider as "used" when it returned at least one result for any
|
|
175
|
+
// query, "failed" when it errored on every query that asked it.
|
|
176
|
+
const providerSucceededAtLeastOnce = new Set();
|
|
177
|
+
const providerFailureMessages = new Map();
|
|
178
|
+
const providerCallCount = new Map();
|
|
179
|
+
const providerFailureCount = new Map();
|
|
180
|
+
const providersForQuery = (q) => {
|
|
181
|
+
const calls = [];
|
|
182
|
+
if (serperKey) {
|
|
183
|
+
calls.push({ provider: 'serper', fn: () => searchSerper(q, serperKey, maxPerQuery, fetchImpl) });
|
|
184
|
+
}
|
|
185
|
+
if (tavilyKey) {
|
|
186
|
+
calls.push({ provider: 'tavily', fn: () => searchTavily(q, tavilyKey, maxPerQuery, fetchImpl) });
|
|
187
|
+
}
|
|
188
|
+
if (firecrawlKey) {
|
|
189
|
+
calls.push({ provider: 'firecrawl', fn: () => searchFirecrawl(q, firecrawlKey, maxPerQuery, fetchImpl) });
|
|
190
|
+
}
|
|
191
|
+
return calls;
|
|
192
|
+
};
|
|
103
193
|
await Promise.all(queries.map(async (q) => {
|
|
104
194
|
options.onProgress?.({
|
|
105
195
|
kind: 'query_started',
|
|
106
196
|
query: q,
|
|
107
197
|
elapsedMs: Date.now() - t0,
|
|
108
198
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
});
|
|
199
|
+
const calls = providersForQuery(q);
|
|
200
|
+
const settled = await Promise.allSettled(calls.map((c) => c.fn()));
|
|
201
|
+
const merged = [];
|
|
202
|
+
for (let i = 0; i < calls.length; i += 1) {
|
|
203
|
+
const { provider } = calls[i];
|
|
204
|
+
const result = settled[i];
|
|
205
|
+
providerCallCount.set(provider, (providerCallCount.get(provider) ?? 0) + 1);
|
|
206
|
+
if (result.status === 'fulfilled') {
|
|
207
|
+
if (result.value.length > 0)
|
|
208
|
+
providerSucceededAtLeastOnce.add(provider);
|
|
209
|
+
merged.push(...result.value);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
providerFailureCount.set(provider, (providerFailureCount.get(provider) ?? 0) + 1);
|
|
213
|
+
const msg = result.reason instanceof Error ? result.reason.message : String(result.reason);
|
|
214
|
+
providerFailureMessages.set(provider, msg);
|
|
215
|
+
}
|
|
127
216
|
}
|
|
128
|
-
|
|
217
|
+
// Dedup by URL across providers and prior queries so a Wikipedia
|
|
218
|
+
// hit that appears on both Serper + Tavily is shown once. The
|
|
219
|
+
// surviving copy is the first one we saw; later copies could
|
|
220
|
+
// theoretically merge metadata but the simple-first-wins rule
|
|
221
|
+
// is what the UI expects.
|
|
222
|
+
const deduped = merged.filter((r) => {
|
|
223
|
+
if (seenUrls.has(r.link))
|
|
224
|
+
return false;
|
|
225
|
+
seenUrls.add(r.link);
|
|
226
|
+
return true;
|
|
227
|
+
});
|
|
228
|
+
if (deduped.length === 0)
|
|
129
229
|
emptyQueries.push(q);
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
230
|
+
citations.push({ query: q, sources: deduped });
|
|
231
|
+
options.onProgress?.({
|
|
232
|
+
kind: 'query_done',
|
|
233
|
+
query: q,
|
|
234
|
+
resultCount: deduped.length,
|
|
235
|
+
totalCitations: seenUrls.size,
|
|
236
|
+
elapsedMs: Date.now() - t0,
|
|
237
|
+
});
|
|
238
|
+
}));
|
|
239
|
+
// A provider is "failed" iff it was called for every query and
|
|
240
|
+
// failed every call. A provider that hit credits-exhausted on the
|
|
241
|
+
// first query and was therefore tried again on the second / third
|
|
242
|
+
// (and failed there too) gets reported. A provider that succeeded
|
|
243
|
+
// even once goes into providersUsed instead.
|
|
244
|
+
const providersFailed = [];
|
|
245
|
+
for (const [provider, fails] of providerFailureCount.entries()) {
|
|
246
|
+
if (providerSucceededAtLeastOnce.has(provider))
|
|
247
|
+
continue;
|
|
248
|
+
const calls = providerCallCount.get(provider) ?? 0;
|
|
249
|
+
if (calls > 0 && fails === calls) {
|
|
250
|
+
providersFailed.push({
|
|
251
|
+
provider,
|
|
252
|
+
reason: providerFailureMessages.get(provider) ?? 'unknown',
|
|
136
253
|
});
|
|
137
254
|
}
|
|
138
|
-
}
|
|
255
|
+
}
|
|
139
256
|
const result = {
|
|
140
257
|
citations,
|
|
141
258
|
totalSources: seenUrls.size,
|
|
142
259
|
durationMs: Date.now() - t0,
|
|
143
260
|
emptyQueries,
|
|
261
|
+
providersUsed: [...providerSucceededAtLeastOnce],
|
|
262
|
+
providersFailed,
|
|
144
263
|
};
|
|
145
264
|
options.onProgress?.({
|
|
146
265
|
kind: 'complete',
|