ai-props 2.3.0 → 2.4.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 (75) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +9 -0
  3. package/dist/ai.d.ts +125 -0
  4. package/dist/ai.d.ts.map +1 -0
  5. package/dist/ai.js +199 -0
  6. package/dist/ai.js.map +1 -0
  7. package/dist/cache.d.ts +66 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +183 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/cascade.d.ts +329 -0
  12. package/dist/cascade.d.ts.map +1 -0
  13. package/dist/cascade.js +522 -0
  14. package/dist/cascade.js.map +1 -0
  15. package/dist/client.d.ts +233 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +191 -0
  18. package/dist/client.js.map +1 -0
  19. package/dist/durable-cascade.d.ts +280 -0
  20. package/dist/durable-cascade.d.ts.map +1 -0
  21. package/dist/durable-cascade.js +469 -0
  22. package/dist/durable-cascade.js.map +1 -0
  23. package/dist/event-bridge.d.ts +257 -0
  24. package/dist/event-bridge.d.ts.map +1 -0
  25. package/dist/event-bridge.js +317 -0
  26. package/dist/event-bridge.js.map +1 -0
  27. package/dist/generate.d.ts +69 -0
  28. package/dist/generate.d.ts.map +1 -0
  29. package/dist/generate.js +227 -0
  30. package/dist/generate.js.map +1 -0
  31. package/dist/hoc.d.ts +164 -0
  32. package/dist/hoc.d.ts.map +1 -0
  33. package/dist/hoc.js +236 -0
  34. package/dist/hoc.js.map +1 -0
  35. package/dist/hono-jsx.d.ts +208 -0
  36. package/dist/hono-jsx.d.ts.map +1 -0
  37. package/dist/hono-jsx.js +459 -0
  38. package/dist/hono-jsx.js.map +1 -0
  39. package/dist/index.d.ts +16 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +23 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mdx-types.d.ts +152 -0
  44. package/dist/mdx-types.d.ts.map +1 -0
  45. package/dist/mdx-types.js +9 -0
  46. package/dist/mdx-types.js.map +1 -0
  47. package/dist/mdx-utils.d.ts +106 -0
  48. package/dist/mdx-utils.d.ts.map +1 -0
  49. package/dist/mdx-utils.js +384 -0
  50. package/dist/mdx-utils.js.map +1 -0
  51. package/dist/mdx.d.ts +230 -0
  52. package/dist/mdx.d.ts.map +1 -0
  53. package/dist/mdx.js +820 -0
  54. package/dist/mdx.js.map +1 -0
  55. package/dist/rpc.d.ts +313 -0
  56. package/dist/rpc.d.ts.map +1 -0
  57. package/dist/rpc.js +359 -0
  58. package/dist/rpc.js.map +1 -0
  59. package/dist/streaming.d.ts +199 -0
  60. package/dist/streaming.d.ts.map +1 -0
  61. package/dist/streaming.js +402 -0
  62. package/dist/streaming.js.map +1 -0
  63. package/dist/types.d.ts +152 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +7 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/validate.d.ts +58 -0
  68. package/dist/validate.d.ts.map +1 -0
  69. package/dist/validate.js +251 -0
  70. package/dist/validate.js.map +1 -0
  71. package/dist/worker.d.ts +270 -0
  72. package/dist/worker.d.ts.map +1 -0
  73. package/dist/worker.js +405 -0
  74. package/dist/worker.js.map +1 -0
  75. package/package.json +4 -4
@@ -0,0 +1,469 @@
1
+ /**
2
+ * DurableCascadeExecutor - Durable tiered execution with cascade pattern for Workers
3
+ *
4
+ * Combines the cascade pattern (code -> generative -> agentic -> human)
5
+ * with Cloudflare Workflows durability guarantees for use in worker contexts.
6
+ *
7
+ * ## Features
8
+ *
9
+ * - **Durable Execution**: Steps are persisted and can resume after failures
10
+ * - **AI Gateway Integration**: Helpers for Cloudflare AI Gateway configuration
11
+ * - **Automatic Checkpointing**: Each tier creates a durable checkpoint
12
+ * - **Tier Escalation**: Automatic escalation on failure
13
+ * - **5W+H Audit Events**: Full audit trail support
14
+ *
15
+ * ## Basic Usage
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { DurableCascadeExecutor, createAIGatewayConfig } from 'ai-props/worker'
20
+ *
21
+ * const cascade = new DurableCascadeExecutor('generate-content', {
22
+ * code: async (input) => {
23
+ * if (input.template) return { content: input.template }
24
+ * throw new Error('No template')
25
+ * },
26
+ * generative: async (input, ctx) => {
27
+ * const result = await ctx.ai.run('@cf/meta/llama-3-8b-instruct', {
28
+ * messages: [{ role: 'user', content: 'Generate content' }]
29
+ * })
30
+ * return { content: result.response }
31
+ * }
32
+ * })
33
+ *
34
+ * // In workflow
35
+ * const result = await cascade.run(step, { topic: 'AI' })
36
+ * ```
37
+ *
38
+ * @packageDocumentation
39
+ */
40
+ import { CascadeExecutor, TIER_ORDER, DEFAULT_TIER_TIMEOUTS, createCascadeContext, recordStep, AllTiersFailedError, CascadeTimeoutError, } from './cascade.js';
41
+ // Re-export base types
42
+ export { CascadeExecutor, TIER_ORDER, DEFAULT_TIER_TIMEOUTS, createCascadeContext, recordStep, AllTiersFailedError, CascadeTimeoutError, };
43
+ /**
44
+ * Create AI Gateway configuration for use with cascades
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const gatewayConfig = createAIGatewayConfig({
49
+ * gatewayId: 'my-gateway',
50
+ * accountId: env.CF_ACCOUNT_ID,
51
+ * cacheTtl: 3600, // 1 hour
52
+ * })
53
+ *
54
+ * // Use with AI binding
55
+ * const result = await env.AI.run('@cf/meta/llama-3-8b-instruct', {
56
+ * messages: [...],
57
+ * ...gatewayConfig.toRequestOptions()
58
+ * })
59
+ * ```
60
+ */
61
+ export function createAIGatewayConfig(config) {
62
+ return {
63
+ config,
64
+ toRequestOptions: () => ({
65
+ gateway: {
66
+ id: config.gatewayId,
67
+ skipCache: config.skipCache ?? false,
68
+ cacheTtl: config.cacheTtl ?? 0,
69
+ metadata: config.metadata,
70
+ },
71
+ }),
72
+ getCacheKey: (input) => {
73
+ const inputStr = JSON.stringify(input);
74
+ return `${config.gatewayId}:${inputStr.slice(0, 100)}`;
75
+ },
76
+ };
77
+ }
78
+ // ============================================================================
79
+ // DurableCascadeExecutor
80
+ // ============================================================================
81
+ /**
82
+ * DurableCascadeExecutor - Durable tiered execution with cascade pattern
83
+ *
84
+ * Combines the cascade pattern (code -> generative -> agentic -> human)
85
+ * with Cloudflare Workflows durability guarantees. Each tier execution
86
+ * creates a durable checkpoint that survives process restarts.
87
+ */
88
+ export class DurableCascadeExecutor {
89
+ /** Cascade name */
90
+ name;
91
+ /** Cascade configuration */
92
+ config;
93
+ /** AI binding (injected at runtime) */
94
+ ai;
95
+ /** Human review handler */
96
+ humanReviewHandler;
97
+ constructor(name, config) {
98
+ this.name = name;
99
+ this.config = config;
100
+ }
101
+ /**
102
+ * Set the AI binding for generative/agentic tiers
103
+ */
104
+ setAi(ai) {
105
+ this.ai = ai;
106
+ return this;
107
+ }
108
+ /**
109
+ * Set the human review handler
110
+ */
111
+ setHumanReviewHandler(handler) {
112
+ this.humanReviewHandler = handler;
113
+ return this;
114
+ }
115
+ /**
116
+ * Run the cascade with durable execution
117
+ */
118
+ async run(workflowStep, input, options) {
119
+ const ai = options?.ai ?? this.ai;
120
+ const humanReviewHandler = options?.humanReviewHandler ?? this.humanReviewHandler;
121
+ // Create cascade context for tracing
122
+ const cascadeContext = createCascadeContext({ name: this.name });
123
+ const startTime = Date.now();
124
+ const history = [];
125
+ const skippedTiers = [];
126
+ const tierDurations = {};
127
+ const previousErrors = [];
128
+ // Emit cascade start event
129
+ this.emitEvent({
130
+ who: this.config.actor ?? 'system',
131
+ what: 'cascade-start',
132
+ when: startTime,
133
+ where: this.name,
134
+ how: {
135
+ status: 'running',
136
+ metadata: { input },
137
+ },
138
+ });
139
+ // Execute tiers in order
140
+ for (const tier of TIER_ORDER) {
141
+ const handler = this.getTierHandler(tier);
142
+ // Skip unconfigured tiers
143
+ if (!handler) {
144
+ skippedTiers.push(tier);
145
+ continue;
146
+ }
147
+ // Check total timeout
148
+ if (this.config.totalTimeout) {
149
+ const elapsed = Date.now() - startTime;
150
+ if (elapsed >= this.config.totalTimeout) {
151
+ throw new CascadeTimeoutError(this.config.totalTimeout, elapsed);
152
+ }
153
+ }
154
+ // Create tier context
155
+ const tierContext = {
156
+ correlationId: cascadeContext.correlationId,
157
+ tier,
158
+ input,
159
+ cascadeContext,
160
+ previousErrors: [...previousErrors],
161
+ ai: ai ?? this.createMockAi(),
162
+ requestHumanReview: async (request) => {
163
+ if (humanReviewHandler) {
164
+ return humanReviewHandler(request);
165
+ }
166
+ const reviewId = `review-${Date.now()}-${Math.random().toString(36).slice(2)}`;
167
+ return { reviewId, status: 'pending-human' };
168
+ },
169
+ workflowStep,
170
+ };
171
+ // Execute tier with durability
172
+ const tierResult = await this.executeTier(workflowStep, tier, handler, input, tierContext, cascadeContext);
173
+ history.push(tierResult);
174
+ tierDurations[tier] = tierResult.duration;
175
+ // If tier succeeded, we're done
176
+ if (tierResult.success && tierResult.value !== undefined) {
177
+ // Check custom success condition
178
+ const tierConfig = this.config.tierConfig?.[tier];
179
+ if (tierConfig?.successCondition && !tierConfig.successCondition(tierResult.value)) {
180
+ // Success condition not met, treat as failure and continue
181
+ previousErrors.push({
182
+ tier,
183
+ error: 'Success condition not met',
184
+ });
185
+ continue;
186
+ }
187
+ const endTime = Date.now();
188
+ this.emitEvent({
189
+ who: this.config.actor ?? 'system',
190
+ what: 'cascade-complete',
191
+ when: endTime,
192
+ where: this.name,
193
+ how: {
194
+ status: 'completed',
195
+ duration: endTime - startTime,
196
+ metadata: { tier, value: tierResult.value },
197
+ },
198
+ });
199
+ return {
200
+ value: tierResult.value,
201
+ tier,
202
+ history,
203
+ skippedTiers,
204
+ context: cascadeContext,
205
+ metrics: {
206
+ totalDuration: endTime - startTime,
207
+ tierDurations,
208
+ },
209
+ };
210
+ }
211
+ // Record error for next tier
212
+ if (tierResult.error) {
213
+ previousErrors.push({
214
+ tier,
215
+ error: tierResult.error.message,
216
+ });
217
+ // Emit escalation event
218
+ const nextTier = this.getNextConfiguredTier(tier);
219
+ if (nextTier) {
220
+ this.emitEvent({
221
+ who: this.config.actor ?? 'system',
222
+ what: `escalate-to-${nextTier}`,
223
+ when: Date.now(),
224
+ where: this.name,
225
+ why: tierResult.error.message,
226
+ how: {
227
+ status: 'running',
228
+ metadata: { fromTier: tier, toTier: nextTier },
229
+ },
230
+ });
231
+ }
232
+ }
233
+ }
234
+ // All tiers failed
235
+ const endTime = Date.now();
236
+ this.emitEvent({
237
+ who: this.config.actor ?? 'system',
238
+ what: 'cascade-failed',
239
+ when: endTime,
240
+ where: this.name,
241
+ why: 'All tiers failed',
242
+ how: {
243
+ status: 'failed',
244
+ duration: endTime - startTime,
245
+ },
246
+ });
247
+ throw new AllTiersFailedError(history);
248
+ }
249
+ /**
250
+ * Execute a single tier with durability
251
+ */
252
+ async executeTier(workflowStep, tier, handler, input, tierContext, cascadeContext) {
253
+ const tierStartTime = Date.now();
254
+ const tierConfig = this.config.tierConfig?.[tier];
255
+ const timeout = this.config.timeouts?.[tier] ?? DEFAULT_TIER_TIMEOUTS[tier];
256
+ const maxRetries = tierConfig?.retries?.limit ?? 0;
257
+ // Record step in cascade context
258
+ const step = recordStep(cascadeContext, tier, {
259
+ actor: this.config.actor ?? 'system',
260
+ action: `execute-${tier}`,
261
+ });
262
+ // Emit tier start event
263
+ this.emitEvent({
264
+ who: this.config.actor ?? 'system',
265
+ what: `tier-${tier}-execute`,
266
+ when: tierStartTime,
267
+ where: this.name,
268
+ how: {
269
+ status: 'running',
270
+ metadata: { tier },
271
+ },
272
+ });
273
+ let lastError;
274
+ let attempts = 0;
275
+ while (attempts <= maxRetries) {
276
+ attempts++;
277
+ try {
278
+ // Execute with timeout using workflow step (durable)
279
+ const result = await workflowStep.do(`${this.name}-${tier}-attempt-${attempts}`, timeout !== undefined ? { timeout: `${timeout} milliseconds` } : {}, async () => {
280
+ if (tier === 'code') {
281
+ return handler(input);
282
+ }
283
+ else {
284
+ return handler(input, tierContext);
285
+ }
286
+ });
287
+ const duration = Date.now() - tierStartTime;
288
+ // Mark step complete
289
+ step.complete();
290
+ // Emit tier success event
291
+ this.emitEvent({
292
+ who: this.config.actor ?? 'system',
293
+ what: `tier-${tier}-execute`,
294
+ when: Date.now(),
295
+ where: this.name,
296
+ how: {
297
+ status: 'completed',
298
+ duration,
299
+ metadata: { tier, result, attempts },
300
+ },
301
+ });
302
+ return {
303
+ tier,
304
+ success: true,
305
+ value: result,
306
+ duration,
307
+ attempts,
308
+ };
309
+ }
310
+ catch (error) {
311
+ lastError = error instanceof Error ? error : new Error(String(error));
312
+ // Check if it's a timeout error
313
+ const isTimeout = lastError.message.includes('timed out') ||
314
+ lastError.message.includes('timeout') ||
315
+ lastError.name === 'TimeoutError';
316
+ // Call custom error handler if provided
317
+ if (tierConfig?.onError) {
318
+ tierConfig.onError(lastError, tier);
319
+ }
320
+ // If we've exhausted retries, stop
321
+ if (attempts > maxRetries) {
322
+ break;
323
+ }
324
+ // Wait before retry with backoff (using durable sleep)
325
+ if (tierConfig?.retries?.delay) {
326
+ const backoff = tierConfig.retries.backoff ?? 'constant';
327
+ let delay = tierConfig.retries.delay;
328
+ if (backoff === 'exponential') {
329
+ delay = tierConfig.retries.delay * Math.pow(2, attempts - 1);
330
+ }
331
+ else if (backoff === 'linear') {
332
+ delay = tierConfig.retries.delay * attempts;
333
+ }
334
+ await workflowStep.sleep(`${this.name}-${tier}-retry-wait-${attempts}`, delay);
335
+ }
336
+ }
337
+ }
338
+ const duration = Date.now() - tierStartTime;
339
+ const isTimeout = lastError?.message.includes('timed out') ||
340
+ lastError?.message.includes('timeout') ||
341
+ lastError?.name === 'TimeoutError';
342
+ // Mark step failed
343
+ if (lastError) {
344
+ step.fail(lastError);
345
+ }
346
+ // Emit tier failure event
347
+ this.emitEvent({
348
+ who: this.config.actor ?? 'system',
349
+ what: `tier-${tier}-execute`,
350
+ when: Date.now(),
351
+ where: this.name,
352
+ ...(lastError?.message !== undefined && { why: lastError.message }),
353
+ how: {
354
+ status: 'failed',
355
+ duration,
356
+ metadata: { tier, error: lastError?.message, attempts },
357
+ },
358
+ });
359
+ return {
360
+ tier,
361
+ success: false,
362
+ ...(lastError !== undefined && { error: lastError }),
363
+ timedOut: isTimeout,
364
+ duration,
365
+ attempts,
366
+ };
367
+ }
368
+ /**
369
+ * Get the handler for a tier
370
+ */
371
+ getTierHandler(tier) {
372
+ switch (tier) {
373
+ case 'code':
374
+ return this.config.code;
375
+ case 'generative':
376
+ return this.config.generative;
377
+ case 'agentic':
378
+ return this.config.agentic;
379
+ case 'human':
380
+ return this.config.human;
381
+ default:
382
+ return undefined;
383
+ }
384
+ }
385
+ /**
386
+ * Get the next configured tier
387
+ */
388
+ getNextConfiguredTier(currentTier) {
389
+ const currentIndex = TIER_ORDER.indexOf(currentTier);
390
+ for (let i = currentIndex + 1; i < TIER_ORDER.length; i++) {
391
+ const tier = TIER_ORDER[i];
392
+ if (tier && this.getTierHandler(tier)) {
393
+ return tier;
394
+ }
395
+ }
396
+ return undefined;
397
+ }
398
+ /**
399
+ * Emit a 5W+H event
400
+ */
401
+ emitEvent(event) {
402
+ if (this.config.onEvent) {
403
+ this.config.onEvent(event);
404
+ }
405
+ }
406
+ /**
407
+ * Create a mock AI binding for testing
408
+ */
409
+ createMockAi() {
410
+ return {
411
+ run: async () => ({ response: 'mock response' }),
412
+ };
413
+ }
414
+ }
415
+ // ============================================================================
416
+ // Helper Functions
417
+ // ============================================================================
418
+ /**
419
+ * Create a durable cascade step for common AI props patterns
420
+ *
421
+ * @example
422
+ * ```typescript
423
+ * const titleCascade = createDurableCascadeStep({
424
+ * name: 'generate-title',
425
+ * code: async (input) => {
426
+ * if (input.template) return { title: input.template }
427
+ * throw new Error('No template')
428
+ * },
429
+ * generative: async (input, ctx) => {
430
+ * const result = await ctx.ai.run('@cf/meta/llama-3-8b-instruct', {
431
+ * messages: [{ role: 'user', content: `Generate a title for: ${input.topic}` }]
432
+ * })
433
+ * return { title: result.response }
434
+ * }
435
+ * })
436
+ *
437
+ * // In workflow
438
+ * const result = await titleCascade.run(step, { topic: 'AI' })
439
+ * ```
440
+ */
441
+ export function createDurableCascadeStep(config) {
442
+ const durableConfig = {};
443
+ if (config.code) {
444
+ durableConfig.code = config.code;
445
+ }
446
+ if (config.generative) {
447
+ durableConfig.generative = config.generative;
448
+ }
449
+ if (config.agentic) {
450
+ durableConfig.agentic = config.agentic;
451
+ }
452
+ if (config.human) {
453
+ durableConfig.human = config.human;
454
+ }
455
+ if (config.timeouts) {
456
+ durableConfig.timeouts = config.timeouts;
457
+ }
458
+ if (config.tierConfig) {
459
+ durableConfig.tierConfig = config.tierConfig;
460
+ }
461
+ if (config.onEvent) {
462
+ durableConfig.onEvent = config.onEvent;
463
+ }
464
+ if (config.actor) {
465
+ durableConfig.actor = config.actor;
466
+ }
467
+ return new DurableCascadeExecutor(config.name, durableConfig);
468
+ }
469
+ //# sourceMappingURL=durable-cascade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durable-cascade.js","sourceRoot":"","sources":["../src/durable-cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EACL,eAAe,EASf,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,EACV,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AAErB,uBAAuB;AACvB,OAAO,EACL,eAAe,EASf,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,EACV,mBAAmB,EACnB,mBAAmB,GACpB,CAAA;AA+ID;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAK3D,OAAO;QACL,MAAM;QACN,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;YACvB,OAAO,EAAE;gBACP,EAAE,EAAE,MAAM,CAAC,SAAS;gBACpB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;gBACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B;SACF,CAAC;QACF,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACtC,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;QACxD,CAAC;KACF,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,OAAO,sBAAsB;IACjC,mBAAmB;IACV,IAAI,CAAQ;IAErB,4BAA4B;IACnB,MAAM,CAAuC;IAEtD,uCAAuC;IAC/B,EAAE,CAAY;IAEtB,2BAA2B;IACnB,kBAAkB,CAEwB;IAElD,YAAY,IAAY,EAAE,MAA6C;QACrE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,EAAa;QACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,qBAAqB,CACnB,OAAuF;QAEvF,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAA;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,YAA0B,EAC1B,KAAa,EACb,OAKC;QAED,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;QACjC,MAAM,kBAAkB,GAAG,OAAO,EAAE,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAA;QAEjF,qCAAqC;QACrC,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAEhE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,OAAO,GAA0B,EAAE,CAAA;QACzC,MAAM,YAAY,GAAqB,EAAE,CAAA;QACzC,MAAM,aAAa,GAA2B,EAAE,CAAA;QAChD,MAAM,cAAc,GAAmD,EAAE,CAAA;QAEzE,2BAA2B;QAC3B,IAAI,CAAC,SAAS,CAAC;YACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;YAClC,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,GAAG,EAAE;gBACH,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,EAAE,KAAK,EAAE;aACpB;SACF,CAAC,CAAA;QAEF,yBAAyB;QACzB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAEzC,0BAA0B;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACvB,SAAQ;YACV,CAAC;YAED,sBAAsB;YACtB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;gBACtC,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxC,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;gBAClE,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,MAAM,WAAW,GAAsC;gBACrD,aAAa,EAAE,cAAc,CAAC,aAAa;gBAC3C,IAAI;gBACJ,KAAK;gBACL,cAAc;gBACd,cAAc,EAAE,CAAC,GAAG,cAAc,CAAC;gBACnC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC7B,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBACpC,IAAI,kBAAkB,EAAE,CAAC;wBACvB,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAA;oBACpC,CAAC;oBACD,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;oBAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,CAAA;gBAC9C,CAAC;gBACD,YAAY;aACb,CAAA;YAED,+BAA+B;YAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CACvC,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,EACX,cAAc,CACf,CAAA;YAED,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACxB,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAA;YAEzC,gCAAgC;YAChC,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzD,iCAAiC;gBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAA;gBACjD,IAAI,UAAU,EAAE,gBAAgB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnF,2DAA2D;oBAC3D,cAAc,CAAC,IAAI,CAAC;wBAClB,IAAI;wBACJ,KAAK,EAAE,2BAA2B;qBACnC,CAAC,CAAA;oBACF,SAAQ;gBACV,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAC1B,IAAI,CAAC,SAAS,CAAC;oBACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;oBAClC,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,IAAI,CAAC,IAAI;oBAChB,GAAG,EAAE;wBACH,MAAM,EAAE,WAAW;wBACnB,QAAQ,EAAE,OAAO,GAAG,SAAS;wBAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE;qBAC5C;iBACF,CAAC,CAAA;gBAEF,OAAO;oBACL,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,IAAI;oBACJ,OAAO;oBACP,YAAY;oBACZ,OAAO,EAAE,cAAc;oBACvB,OAAO,EAAE;wBACP,aAAa,EAAE,OAAO,GAAG,SAAS;wBAClC,aAAa;qBACd;iBACF,CAAA;YACH,CAAC;YAED,6BAA6B;YAC7B,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,cAAc,CAAC,IAAI,CAAC;oBAClB,IAAI;oBACJ,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO;iBAChC,CAAC,CAAA;gBAEF,wBAAwB;gBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;gBACjD,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,SAAS,CAAC;wBACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;wBAClC,IAAI,EAAE,eAAe,QAAQ,EAAE;wBAC/B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;wBAChB,KAAK,EAAE,IAAI,CAAC,IAAI;wBAChB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO;wBAC7B,GAAG,EAAE;4BACH,MAAM,EAAE,SAAS;4BACjB,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;yBAC/C;qBACF,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC,SAAS,CAAC;YACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;YAClC,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,GAAG,EAAE,kBAAkB;YACvB,GAAG,EAAE;gBACH,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,OAAO,GAAG,SAAS;aAC9B;SACF,CAAC,CAAA;QAEF,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CACvB,YAA0B,EAC1B,IAAoB,EACpB,OAA0E,EAC1E,KAAa,EACb,WAA8C,EAC9C,cAA8B;QAE9B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC3E,MAAM,UAAU,GAAG,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAA;QAElD,iCAAiC;QACjC,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,EAAE,IAAI,EAAE;YAC5C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;YACpC,MAAM,EAAE,WAAW,IAAI,EAAE;SAC1B,CAAC,CAAA;QAEF,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC;YACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;YAClC,IAAI,EAAE,QAAQ,IAAI,UAAU;YAC5B,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,GAAG,EAAE;gBACH,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,EAAE,IAAI,EAAE;aACnB;SACF,CAAC,CAAA;QAEF,IAAI,SAA4B,CAAA;QAChC,IAAI,QAAQ,GAAG,CAAC,CAAA;QAEhB,OAAO,QAAQ,IAAI,UAAU,EAAE,CAAC;YAC9B,QAAQ,EAAE,CAAA;YAEV,IAAI,CAAC;gBACH,qDAAqD;gBACrD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,CAClC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,YAAY,QAAQ,EAAE,EAC1C,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,EACnE,KAAK,IAAI,EAAE;oBACT,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;wBACpB,OAAQ,OAA4C,CAAC,KAAK,CAAC,CAAA;oBAC7D,CAAC;yBAAM,CAAC;wBACN,OAAQ,OAA0C,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;oBACxE,CAAC;gBACH,CAAC,CACF,CAAA;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAA;gBAE3C,qBAAqB;gBACrB,IAAI,CAAC,QAAQ,EAAE,CAAA;gBAEf,0BAA0B;gBAC1B,IAAI,CAAC,SAAS,CAAC;oBACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;oBAClC,IAAI,EAAE,QAAQ,IAAI,UAAU;oBAC5B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;oBAChB,KAAK,EAAE,IAAI,CAAC,IAAI;oBAChB,GAAG,EAAE;wBACH,MAAM,EAAE,WAAW;wBACnB,QAAQ;wBACR,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;qBACrC;iBACF,CAAC,CAAA;gBAEF,OAAO;oBACL,IAAI;oBACJ,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,MAAiB;oBACxB,QAAQ;oBACR,QAAQ;iBACT,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBAErE,gCAAgC;gBAChC,MAAM,SAAS,GACb,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACvC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;oBACrC,SAAS,CAAC,IAAI,KAAK,cAAc,CAAA;gBAEnC,wCAAwC;gBACxC,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;oBACxB,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBACrC,CAAC;gBAED,mCAAmC;gBACnC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;oBAC1B,MAAK;gBACP,CAAC;gBAED,uDAAuD;gBACvD,IAAI,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,IAAI,UAAU,CAAA;oBACxD,IAAI,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAA;oBAEpC,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;wBAC9B,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;oBAC9D,CAAC;yBAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAA;oBAC7C,CAAC;oBAED,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,eAAe,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAA;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAA;QAC3C,MAAM,SAAS,GACb,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YACxC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAI,KAAK,cAAc,CAAA;QAEpC,mBAAmB;QACnB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACtB,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,SAAS,CAAC;YACb,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;YAClC,IAAI,EAAE,QAAQ,IAAI,UAAU;YAC5B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,GAAG,CAAC,SAAS,EAAE,OAAO,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;YACnE,GAAG,EAAE;gBACH,MAAM,EAAE,QAAQ;gBAChB,QAAQ;gBACR,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;aACxD;SACF,CAAC,CAAA;QAEF,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,KAAK;YACd,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YACpD,QAAQ,EAAE,SAAS;YACnB,QAAQ;YACR,QAAQ;SACT,CAAA;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,IAAoB;QAEpB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;YACzB,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;YAC/B,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;YAC5B,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;YAC1B;gBACE,OAAO,SAAS,CAAA;QACpB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,WAA2B;QACvD,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpD,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAAkB;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,OAAO;YACL,GAAG,EAAE,KAAK,IAAmB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAmB,CAAA;SAChF,CAAA;IACH,CAAC;CACF;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,wBAAwB,CAAsC,MAU7E;IACC,MAAM,aAAa,GAA0C,EAAE,CAAA;IAE/D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAClC,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IAC9C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IACxC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IACpC,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;IAC1C,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IAC9C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IACxC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IACpC,CAAC;IAED,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;AAC/D,CAAC"}