stelo 1.0.1

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 (141) hide show
  1. package/LICENSE +184 -0
  2. package/README.md +853 -0
  3. package/dist/accessibility.d.ts +227 -0
  4. package/dist/accessibility.d.ts.map +1 -0
  5. package/dist/accessibility.js +602 -0
  6. package/dist/accessibility.js.map +1 -0
  7. package/dist/agent.d.ts +870 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +1107 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/audio-stream.d.ts +114 -0
  12. package/dist/audio-stream.d.ts.map +1 -0
  13. package/dist/audio-stream.js +167 -0
  14. package/dist/audio-stream.js.map +1 -0
  15. package/dist/clipboard.d.ts +99 -0
  16. package/dist/clipboard.d.ts.map +1 -0
  17. package/dist/clipboard.js +352 -0
  18. package/dist/clipboard.js.map +1 -0
  19. package/dist/config.d.ts +183 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +477 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/context.d.ts +213 -0
  24. package/dist/context.d.ts.map +1 -0
  25. package/dist/context.js +387 -0
  26. package/dist/context.js.map +1 -0
  27. package/dist/cortex.d.ts +548 -0
  28. package/dist/cortex.d.ts.map +1 -0
  29. package/dist/cortex.js +1479 -0
  30. package/dist/cortex.js.map +1 -0
  31. package/dist/errors.d.ts +133 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +278 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/events.d.ts +227 -0
  36. package/dist/events.d.ts.map +1 -0
  37. package/dist/events.js +429 -0
  38. package/dist/events.js.map +1 -0
  39. package/dist/executor.d.ts +212 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +545 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/index.d.ts +69 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +167 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/integration.d.ts +159 -0
  48. package/dist/integration.d.ts.map +1 -0
  49. package/dist/integration.js +533 -0
  50. package/dist/integration.js.map +1 -0
  51. package/dist/keyboard.d.ts +276 -0
  52. package/dist/keyboard.d.ts.map +1 -0
  53. package/dist/keyboard.js +404 -0
  54. package/dist/keyboard.js.map +1 -0
  55. package/dist/logger.d.ts +198 -0
  56. package/dist/logger.d.ts.map +1 -0
  57. package/dist/logger.js +516 -0
  58. package/dist/logger.js.map +1 -0
  59. package/dist/middleware.d.ts +183 -0
  60. package/dist/middleware.d.ts.map +1 -0
  61. package/dist/middleware.js +493 -0
  62. package/dist/middleware.js.map +1 -0
  63. package/dist/monitor.d.ts +136 -0
  64. package/dist/monitor.d.ts.map +1 -0
  65. package/dist/monitor.js +341 -0
  66. package/dist/monitor.js.map +1 -0
  67. package/dist/mouse.d.ts +290 -0
  68. package/dist/mouse.d.ts.map +1 -0
  69. package/dist/mouse.js +466 -0
  70. package/dist/mouse.js.map +1 -0
  71. package/dist/plugin.d.ts +157 -0
  72. package/dist/plugin.d.ts.map +1 -0
  73. package/dist/plugin.js +409 -0
  74. package/dist/plugin.js.map +1 -0
  75. package/dist/process.d.ts +106 -0
  76. package/dist/process.d.ts.map +1 -0
  77. package/dist/process.js +326 -0
  78. package/dist/process.js.map +1 -0
  79. package/dist/recorder.d.ts +100 -0
  80. package/dist/recorder.d.ts.map +1 -0
  81. package/dist/recorder.js +258 -0
  82. package/dist/recorder.js.map +1 -0
  83. package/dist/safety.d.ts +59 -0
  84. package/dist/safety.d.ts.map +1 -0
  85. package/dist/safety.js +98 -0
  86. package/dist/safety.js.map +1 -0
  87. package/dist/scheduler.d.ts +152 -0
  88. package/dist/scheduler.d.ts.map +1 -0
  89. package/dist/scheduler.js +615 -0
  90. package/dist/scheduler.js.map +1 -0
  91. package/dist/screen.d.ts +96 -0
  92. package/dist/screen.d.ts.map +1 -0
  93. package/dist/screen.js +154 -0
  94. package/dist/screen.js.map +1 -0
  95. package/dist/session.d.ts +209 -0
  96. package/dist/session.d.ts.map +1 -0
  97. package/dist/session.js +479 -0
  98. package/dist/session.js.map +1 -0
  99. package/dist/stream.d.ts +168 -0
  100. package/dist/stream.d.ts.map +1 -0
  101. package/dist/stream.js +298 -0
  102. package/dist/stream.js.map +1 -0
  103. package/dist/telemetry.d.ts +223 -0
  104. package/dist/telemetry.d.ts.map +1 -0
  105. package/dist/telemetry.js +433 -0
  106. package/dist/telemetry.js.map +1 -0
  107. package/dist/types.d.ts +165 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +8 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/utils/bezier.d.ts +51 -0
  112. package/dist/utils/bezier.d.ts.map +1 -0
  113. package/dist/utils/bezier.js +117 -0
  114. package/dist/utils/bezier.js.map +1 -0
  115. package/dist/utils/helpers.d.ts +90 -0
  116. package/dist/utils/helpers.d.ts.map +1 -0
  117. package/dist/utils/helpers.js +143 -0
  118. package/dist/utils/helpers.js.map +1 -0
  119. package/dist/utils/index.d.ts +4 -0
  120. package/dist/utils/index.d.ts.map +1 -0
  121. package/dist/utils/index.js +18 -0
  122. package/dist/utils/index.js.map +1 -0
  123. package/dist/validation.d.ts +254 -0
  124. package/dist/validation.d.ts.map +1 -0
  125. package/dist/validation.js +478 -0
  126. package/dist/validation.js.map +1 -0
  127. package/dist/vision.d.ts +719 -0
  128. package/dist/vision.d.ts.map +1 -0
  129. package/dist/vision.js +1197 -0
  130. package/dist/vision.js.map +1 -0
  131. package/dist/window.d.ts +80 -0
  132. package/dist/window.d.ts.map +1 -0
  133. package/dist/window.js +170 -0
  134. package/dist/window.js.map +1 -0
  135. package/dist/workflow.d.ts +224 -0
  136. package/dist/workflow.d.ts.map +1 -0
  137. package/dist/workflow.js +578 -0
  138. package/dist/workflow.js.map +1 -0
  139. package/index.d.ts +840 -0
  140. package/index.js +495 -0
  141. package/package.json +91 -0
package/dist/config.js ADDED
@@ -0,0 +1,477 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // Stelo — Configuration Management
4
+ // ============================================================================
5
+ // Schema-validated configuration with environment variable overrides,
6
+ // profiles, deep merging, and runtime reloading.
7
+ // ============================================================================
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.config = void 0;
10
+ const events_1 = require("./events");
11
+ // ── Deep Merge ───────────────────────────────────────────────────────────────
12
+ function isPlainObject(value) {
13
+ return (typeof value === 'object' &&
14
+ value !== null &&
15
+ !Array.isArray(value) &&
16
+ !(value instanceof Date) &&
17
+ !(value instanceof RegExp) &&
18
+ !(value instanceof Buffer));
19
+ }
20
+ function deepMerge(target, ...sources) {
21
+ const result = { ...target };
22
+ for (const source of sources) {
23
+ if (!source)
24
+ continue;
25
+ for (const [key, value] of Object.entries(source)) {
26
+ if (isPlainObject(value) && isPlainObject(result[key])) {
27
+ result[key] = deepMerge(result[key], value);
28
+ }
29
+ else if (value !== undefined) {
30
+ result[key] = value;
31
+ }
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ // ── Default Configuration ────────────────────────────────────────────────────
37
+ const DEFAULT_CONFIG = {
38
+ mouse: {
39
+ defaultDurationMs: 500,
40
+ defaultCurve: 'easeInOut',
41
+ humanize: false,
42
+ jitter: 2.0,
43
+ overshoot: false,
44
+ stepsPerSecond: 120,
45
+ },
46
+ keyboard: {
47
+ defaultDelayMs: 0,
48
+ humanize: false,
49
+ minDelayMs: 30,
50
+ maxDelayMs: 100,
51
+ },
52
+ screen: {
53
+ captureFormat: 'rgba',
54
+ defaultRegion: undefined,
55
+ },
56
+ safety: {
57
+ failsafe: true,
58
+ failsafeThresholdPx: 5,
59
+ rateLimitPerSecond: 0,
60
+ boundaryRegion: null,
61
+ maxConcurrentActions: 1,
62
+ emergencyStopKey: 'escape',
63
+ },
64
+ vision: {
65
+ defaultTolerance: 10.0,
66
+ defaultSampleRate: 1,
67
+ gridCols: 8,
68
+ gridRows: 6,
69
+ waitTimeoutMs: 10000,
70
+ waitPollIntervalMs: 50,
71
+ },
72
+ stream: {
73
+ fps: 30,
74
+ scale: 1.0,
75
+ bufferSize: 3,
76
+ rawBgra: false,
77
+ },
78
+ audio: {
79
+ bufferSize: 30,
80
+ },
81
+ executor: {
82
+ maxConcurrency: 1,
83
+ defaultTimeoutMs: 30000,
84
+ defaultPriority: 5,
85
+ maxQueueSize: 10000,
86
+ retryAttempts: 0,
87
+ retryDelayMs: 1000,
88
+ },
89
+ logging: {
90
+ level: 'info',
91
+ json: false,
92
+ emitEvents: true,
93
+ redactSensitive: true,
94
+ },
95
+ telemetry: {
96
+ enabled: false,
97
+ metricsEnabled: false,
98
+ healthCheckIntervalMs: 60000,
99
+ },
100
+ plugins: {
101
+ autoDiscover: false,
102
+ directories: [],
103
+ enabled: [],
104
+ disabled: [],
105
+ config: {},
106
+ },
107
+ custom: {},
108
+ };
109
+ // ── Built-in Profiles ────────────────────────────────────────────────────────
110
+ const BUILTIN_PROFILES = [
111
+ {
112
+ name: 'development',
113
+ description: 'Development settings with verbose logging and relaxed safety',
114
+ config: {
115
+ logging: { level: 'debug', json: false, emitEvents: true },
116
+ safety: { failsafe: true, rateLimitPerSecond: 0 },
117
+ telemetry: { enabled: true, metricsEnabled: true },
118
+ },
119
+ },
120
+ {
121
+ name: 'production',
122
+ description: 'Production settings with structured logging and strict safety',
123
+ config: {
124
+ logging: { level: 'warn', json: true, emitEvents: true, redactSensitive: true },
125
+ safety: { failsafe: true, rateLimitPerSecond: 100, maxConcurrentActions: 1 },
126
+ telemetry: { enabled: true, metricsEnabled: true },
127
+ executor: { maxConcurrency: 1, defaultTimeoutMs: 15000, retryAttempts: 2 },
128
+ },
129
+ },
130
+ {
131
+ name: 'testing',
132
+ description: 'Testing settings with minimal logging and disabled safety',
133
+ config: {
134
+ logging: { level: 'error', json: false, emitEvents: false },
135
+ safety: { failsafe: false, rateLimitPerSecond: 0 },
136
+ telemetry: { enabled: false, metricsEnabled: false },
137
+ mouse: { humanize: false, defaultDurationMs: 0 },
138
+ keyboard: { humanize: false, defaultDelayMs: 0 },
139
+ },
140
+ },
141
+ {
142
+ name: 'agent',
143
+ description: 'AI agent settings with fast operations and verification',
144
+ config: {
145
+ mouse: { humanize: false, defaultDurationMs: 100, stepsPerSecond: 240 },
146
+ keyboard: { humanize: false, defaultDelayMs: 0 },
147
+ safety: { failsafe: true, maxConcurrentActions: 1 },
148
+ vision: { waitTimeoutMs: 5000, waitPollIntervalMs: 30 },
149
+ executor: { maxConcurrency: 1, defaultTimeoutMs: 10000, retryAttempts: 1, retryDelayMs: 500 },
150
+ logging: { level: 'info' },
151
+ telemetry: { enabled: true, metricsEnabled: true },
152
+ },
153
+ },
154
+ {
155
+ name: 'humanized',
156
+ description: 'Human-like automation with natural delays and movements',
157
+ config: {
158
+ mouse: { humanize: true, defaultDurationMs: 800, jitter: 3.0, overshoot: true },
159
+ keyboard: { humanize: true, minDelayMs: 40, maxDelayMs: 150 },
160
+ safety: { failsafe: true, rateLimitPerSecond: 30 },
161
+ },
162
+ },
163
+ ];
164
+ // ── Internal State ───────────────────────────────────────────────────────────
165
+ let _resolved = { ...DEFAULT_CONFIG };
166
+ const _sources = [{ name: 'defaults', priority: 0, config: DEFAULT_CONFIG }];
167
+ const _profiles = new Map();
168
+ let _activeProfile;
169
+ const _watchers = new Set();
170
+ let _frozen = false;
171
+ // Register built-in profiles
172
+ for (const profile of BUILTIN_PROFILES) {
173
+ _profiles.set(profile.name, profile);
174
+ }
175
+ // ── Config Resolution ────────────────────────────────────────────────────────
176
+ function resolveConfig() {
177
+ // Sort sources by priority (lower = applied first, higher = overrides)
178
+ const sorted = [..._sources].sort((a, b) => a.priority - b.priority);
179
+ let merged = {};
180
+ for (const source of sorted) {
181
+ merged = deepMerge(merged, source.config);
182
+ }
183
+ _resolved = merged;
184
+ // Notify watchers
185
+ for (const watcher of _watchers) {
186
+ try {
187
+ watcher(_resolved);
188
+ }
189
+ catch {
190
+ // Watchers should not break config resolution
191
+ }
192
+ }
193
+ events_1.events.emit('config.changed', 'system', { config: _resolved }, { source: 'config' });
194
+ }
195
+ // ── Environment Variables ────────────────────────────────────────────────────
196
+ function loadEnvironment() {
197
+ const env = typeof process !== 'undefined' ? process.env : {};
198
+ const config = {};
199
+ // STELO_LOG_LEVEL → logging.level
200
+ if (env.STELO_LOG_LEVEL) {
201
+ config.logging = { ...config.logging, level: env.STELO_LOG_LEVEL };
202
+ }
203
+ // STELO_LOG_JSON → logging.json
204
+ if (env.STELO_LOG_JSON) {
205
+ config.logging = { ...config.logging, json: env.STELO_LOG_JSON === 'true' || env.STELO_LOG_JSON === '1' };
206
+ }
207
+ // STELO_SAFETY_FAILSAFE → safety.failsafe
208
+ if (env.STELO_SAFETY_FAILSAFE) {
209
+ config.safety = { ...config.safety, failsafe: env.STELO_SAFETY_FAILSAFE !== 'false' && env.STELO_SAFETY_FAILSAFE !== '0' };
210
+ }
211
+ // STELO_SAFETY_RATE_LIMIT → safety.rateLimitPerSecond
212
+ if (env.STELO_SAFETY_RATE_LIMIT) {
213
+ const val = parseInt(env.STELO_SAFETY_RATE_LIMIT, 10);
214
+ if (!isNaN(val))
215
+ config.safety = { ...config.safety, rateLimitPerSecond: val };
216
+ }
217
+ // STELO_MOUSE_HUMANIZE → mouse.humanize
218
+ if (env.STELO_MOUSE_HUMANIZE) {
219
+ config.mouse = { ...config.mouse, humanize: env.STELO_MOUSE_HUMANIZE === 'true' || env.STELO_MOUSE_HUMANIZE === '1' };
220
+ }
221
+ // STELO_PROFILE → apply named profile
222
+ // (handled separately in init)
223
+ // STELO_TELEMETRY → telemetry.enabled
224
+ if (env.STELO_TELEMETRY) {
225
+ config.telemetry = { ...config.telemetry, enabled: env.STELO_TELEMETRY === 'true' || env.STELO_TELEMETRY === '1' };
226
+ }
227
+ // STELO_EXECUTOR_TIMEOUT → executor.defaultTimeoutMs
228
+ if (env.STELO_EXECUTOR_TIMEOUT) {
229
+ const val = parseInt(env.STELO_EXECUTOR_TIMEOUT, 10);
230
+ if (!isNaN(val))
231
+ config.executor = { ...config.executor, defaultTimeoutMs: val };
232
+ }
233
+ // STELO_STREAM_FPS → stream.fps
234
+ if (env.STELO_STREAM_FPS) {
235
+ const val = parseInt(env.STELO_STREAM_FPS, 10);
236
+ if (!isNaN(val))
237
+ config.stream = { ...config.stream, fps: val };
238
+ }
239
+ return config;
240
+ }
241
+ // ── Public API ───────────────────────────────────────────────────────────────
242
+ exports.config = {
243
+ /**
244
+ * Get the fully resolved configuration.
245
+ */
246
+ get() {
247
+ return _resolved;
248
+ },
249
+ /**
250
+ * Get a specific config section.
251
+ * @example config.section('mouse') → { defaultDurationMs: 500, ... }
252
+ */
253
+ section(key) {
254
+ return _resolved[key];
255
+ },
256
+ /**
257
+ * Get a specific config value by dot-notation path.
258
+ * @example config.value('mouse.defaultDurationMs') → 500
259
+ */
260
+ value(path) {
261
+ const parts = path.split('.');
262
+ let current = _resolved;
263
+ for (const part of parts) {
264
+ if (current && typeof current === 'object') {
265
+ current = current[part];
266
+ }
267
+ else {
268
+ return undefined;
269
+ }
270
+ }
271
+ return current;
272
+ },
273
+ /**
274
+ * Set configuration values (merged with existing).
275
+ * Triggers watchers & events.
276
+ */
277
+ set(overrides) {
278
+ if (_frozen)
279
+ throw new Error('Configuration is frozen. Call config.unfreeze() first.');
280
+ _sources.push({
281
+ name: `runtime_${Date.now()}`,
282
+ priority: 50,
283
+ config: overrides,
284
+ });
285
+ resolveConfig();
286
+ },
287
+ /**
288
+ * Add a named configuration source with a priority.
289
+ * Higher priority sources override lower ones.
290
+ */
291
+ addSource(name, config, priority = 10) {
292
+ if (_frozen)
293
+ throw new Error('Configuration is frozen.');
294
+ _sources.push({ name, priority, config });
295
+ resolveConfig();
296
+ },
297
+ /**
298
+ * Remove a configuration source by name.
299
+ */
300
+ removeSource(name) {
301
+ if (_frozen)
302
+ throw new Error('Configuration is frozen.');
303
+ const idx = _sources.findIndex((s) => s.name === name);
304
+ if (idx !== -1) {
305
+ _sources.splice(idx, 1);
306
+ resolveConfig();
307
+ }
308
+ },
309
+ /**
310
+ * List all config sources (ordered by priority).
311
+ */
312
+ getSources() {
313
+ return _sources
314
+ .map((s) => ({ name: s.name, priority: s.priority }))
315
+ .sort((a, b) => a.priority - b.priority);
316
+ },
317
+ // ── Profiles ─────────────────────────────────────────────────────────────
318
+ /**
319
+ * Apply a named profile.
320
+ * @example config.useProfile('production');
321
+ */
322
+ useProfile(name) {
323
+ if (_frozen)
324
+ throw new Error('Configuration is frozen.');
325
+ const profile = _profiles.get(name);
326
+ if (!profile)
327
+ throw new Error(`Unknown profile: ${name}. Available: ${[..._profiles.keys()].join(', ')}`);
328
+ // Remove previous profile source
329
+ const idx = _sources.findIndex((s) => s.name === 'profile');
330
+ if (idx !== -1)
331
+ _sources.splice(idx, 1);
332
+ _sources.push({ name: 'profile', priority: 5, config: profile.config });
333
+ _activeProfile = name;
334
+ resolveConfig();
335
+ events_1.events.emit('config.profile', 'system', { profile: name }, { source: 'config' });
336
+ },
337
+ /** Get the active profile name */
338
+ getActiveProfile() {
339
+ return _activeProfile;
340
+ },
341
+ /** Register a custom profile */
342
+ registerProfile(profile) {
343
+ _profiles.set(profile.name, profile);
344
+ },
345
+ /** List available profile names */
346
+ listProfiles() {
347
+ return [..._profiles.keys()];
348
+ },
349
+ /** Get a profile by name */
350
+ getProfile(name) {
351
+ return _profiles.get(name);
352
+ },
353
+ // ── Environment ──────────────────────────────────────────────────────────
354
+ /**
355
+ * Load configuration from environment variables.
356
+ * Env vars have priority 90 (override most other sources).
357
+ */
358
+ loadEnvironment() {
359
+ const envConfig = loadEnvironment();
360
+ if (Object.keys(envConfig).length > 0) {
361
+ // Remove previous env source
362
+ const idx = _sources.findIndex((s) => s.name === 'environment');
363
+ if (idx !== -1)
364
+ _sources.splice(idx, 1);
365
+ _sources.push({ name: 'environment', priority: 90, config: envConfig });
366
+ resolveConfig();
367
+ }
368
+ // Check for STELO_PROFILE
369
+ const env = typeof process !== 'undefined' ? process.env : {};
370
+ if (env.STELO_PROFILE && _profiles.has(env.STELO_PROFILE)) {
371
+ exports.config.useProfile(env.STELO_PROFILE);
372
+ }
373
+ },
374
+ // ── Watching ─────────────────────────────────────────────────────────────
375
+ /**
376
+ * Watch for configuration changes.
377
+ * @returns Unsubscribe function
378
+ */
379
+ onChange(handler) {
380
+ _watchers.add(handler);
381
+ return () => { _watchers.delete(handler); };
382
+ },
383
+ // ── Freeze / Unfreeze ────────────────────────────────────────────────────
384
+ /** Freeze configuration — prevents further changes */
385
+ freeze() {
386
+ _frozen = true;
387
+ events_1.events.emit('config.frozen', 'system', undefined, { source: 'config' });
388
+ },
389
+ /** Unfreeze configuration — allows changes again */
390
+ unfreeze() {
391
+ _frozen = false;
392
+ },
393
+ /** Check if configuration is frozen */
394
+ isFrozen() {
395
+ return _frozen;
396
+ },
397
+ // ── Validation ───────────────────────────────────────────────────────────
398
+ /**
399
+ * Validate a configuration object against known schema constraints.
400
+ * Returns an array of validation errors (empty = valid).
401
+ */
402
+ validate(cfg) {
403
+ const errors = [];
404
+ if (cfg.mouse) {
405
+ if (cfg.mouse.defaultDurationMs !== undefined && cfg.mouse.defaultDurationMs < 0)
406
+ errors.push('mouse.defaultDurationMs must be >= 0');
407
+ if (cfg.mouse.jitter !== undefined && cfg.mouse.jitter < 0)
408
+ errors.push('mouse.jitter must be >= 0');
409
+ if (cfg.mouse.stepsPerSecond !== undefined && (cfg.mouse.stepsPerSecond < 1 || cfg.mouse.stepsPerSecond > 1000))
410
+ errors.push('mouse.stepsPerSecond must be 1-1000');
411
+ }
412
+ if (cfg.keyboard) {
413
+ if (cfg.keyboard.defaultDelayMs !== undefined && cfg.keyboard.defaultDelayMs < 0)
414
+ errors.push('keyboard.defaultDelayMs must be >= 0');
415
+ if (cfg.keyboard.minDelayMs !== undefined && cfg.keyboard.maxDelayMs !== undefined) {
416
+ if (cfg.keyboard.minDelayMs > cfg.keyboard.maxDelayMs)
417
+ errors.push('keyboard.minDelayMs must be <= maxDelayMs');
418
+ }
419
+ }
420
+ if (cfg.safety) {
421
+ if (cfg.safety.rateLimitPerSecond !== undefined && cfg.safety.rateLimitPerSecond < 0)
422
+ errors.push('safety.rateLimitPerSecond must be >= 0');
423
+ if (cfg.safety.maxConcurrentActions !== undefined && cfg.safety.maxConcurrentActions < 1)
424
+ errors.push('safety.maxConcurrentActions must be >= 1');
425
+ }
426
+ if (cfg.stream) {
427
+ if (cfg.stream.fps !== undefined && (cfg.stream.fps < 1 || cfg.stream.fps > 120))
428
+ errors.push('stream.fps must be 1-120');
429
+ if (cfg.stream.scale !== undefined && (cfg.stream.scale < 0.1 || cfg.stream.scale > 1.0))
430
+ errors.push('stream.scale must be 0.1-1.0');
431
+ }
432
+ if (cfg.executor) {
433
+ if (cfg.executor.maxConcurrency !== undefined && cfg.executor.maxConcurrency < 1)
434
+ errors.push('executor.maxConcurrency must be >= 1');
435
+ if (cfg.executor.defaultTimeoutMs !== undefined && cfg.executor.defaultTimeoutMs < 100)
436
+ errors.push('executor.defaultTimeoutMs must be >= 100');
437
+ if (cfg.executor.maxQueueSize !== undefined && cfg.executor.maxQueueSize < 1)
438
+ errors.push('executor.maxQueueSize must be >= 1');
439
+ }
440
+ if (cfg.logging) {
441
+ const validLevels = ['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'silent'];
442
+ if (cfg.logging.level !== undefined && !validLevels.includes(cfg.logging.level))
443
+ errors.push(`logging.level must be one of: ${validLevels.join(', ')}`);
444
+ }
445
+ return errors;
446
+ },
447
+ // ── Serialization ────────────────────────────────────────────────────────
448
+ /** Export the resolved configuration as JSON */
449
+ toJSON() {
450
+ return JSON.stringify(_resolved, null, 2);
451
+ },
452
+ /** Import configuration from JSON */
453
+ fromJSON(json) {
454
+ try {
455
+ const parsed = JSON.parse(json);
456
+ const errors = exports.config.validate(parsed);
457
+ if (errors.length > 0)
458
+ throw new Error(`Invalid config: ${errors.join('; ')}`);
459
+ exports.config.set(parsed);
460
+ }
461
+ catch (err) {
462
+ if (err instanceof SyntaxError)
463
+ throw new Error('Invalid JSON');
464
+ throw err;
465
+ }
466
+ },
467
+ // ── Reset ────────────────────────────────────────────────────────────────
468
+ /** Reset to defaults */
469
+ reset() {
470
+ _frozen = false;
471
+ _sources.length = 0;
472
+ _sources.push({ name: 'defaults', priority: 0, config: DEFAULT_CONFIG });
473
+ _activeProfile = undefined;
474
+ resolveConfig();
475
+ },
476
+ };
477
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../ts/config.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAC/E,sEAAsE;AACtE,iDAAiD;AACjD,+EAA+E;;;AAE/E,qCAAkC;AAsGlC,gFAAgF;AAEhF,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC;QACxB,CAAC,CAAC,KAAK,YAAY,MAAM,CAAC;QAC1B,CAAC,CAAC,KAAK,YAAY,MAAM,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAoC,MAAS,EAAE,GAAG,OAAqB;IACvF,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAE,MAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAc,CAAC,GAAG,CAAC,GAAG,SAAS,CAAE,MAAc,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;iBAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAEhF,MAAM,cAAc,GAA0B;IAC5C,KAAK,EAAE;QACL,iBAAiB,EAAE,GAAG;QACtB,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,GAAG;KACpB;IACD,QAAQ,EAAE;QACR,cAAc,EAAE,CAAC;QACjB,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,GAAG;KAChB;IACD,MAAM,EAAE;QACN,aAAa,EAAE,MAAM;QACrB,aAAa,EAAE,SAAgB;KAChC;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,mBAAmB,EAAE,CAAC;QACtB,kBAAkB,EAAE,CAAC;QACrB,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,CAAC;QACvB,gBAAgB,EAAE,QAAQ;KAC3B;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,CAAC;QACpB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,KAAK;QACpB,kBAAkB,EAAE,EAAE;KACvB;IACD,MAAM,EAAE;QACN,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,GAAG;QACV,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,KAAK;KACf;IACD,KAAK,EAAE;QACL,UAAU,EAAE,EAAE;KACf;IACD,QAAQ,EAAE;QACR,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,IAAI;KACnB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,IAAI;KACtB;IACD,SAAS,EAAE;QACT,OAAO,EAAE,KAAK;QACd,cAAc,EAAE,KAAK;QACrB,qBAAqB,EAAE,KAAK;KAC7B;IACD,OAAO,EAAE;QACP,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;KACX;IACD,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,gFAAgF;AAEhF,MAAM,gBAAgB,GAAoB;IACxC;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE;YACN,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC1D,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE;YACjD,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACnD;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,+DAA+D;QAC5E,MAAM,EAAE;YACN,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;YAC/E,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,EAAE;YAC5E,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAClD,QAAQ,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;SAC3E;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,2DAA2D;QACxE,MAAM,EAAE;YACN,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC3D,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE;YAClD,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE;YACpD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE;YAChD,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;SACjD;KACF;IACD;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,yDAAyD;QACtE,MAAM,EAAE;YACN,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE;YACvE,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;YAChD,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,EAAE;YACnD,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE;YACvD,QAAQ,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE;YAC7F,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YAC1B,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACnD;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,yDAAyD;QACtE,MAAM,EAAE;YACN,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;YAC/E,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;YAC7D,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE;SACnD;KACF;CACF,CAAC;AAEF,gFAAgF;AAEhF,IAAI,SAAS,GAAgB,EAAE,GAAG,cAAc,EAAE,CAAC;AACnD,MAAM,QAAQ,GAAmB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;AAC7F,MAAM,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;AACxD,IAAI,cAAkC,CAAC;AACvC,MAAM,SAAS,GAAuC,IAAI,GAAG,EAAE,CAAC;AAChE,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,6BAA6B;AAC7B,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;IACvC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,gFAAgF;AAEhF,SAAS,aAAa;IACpB,uEAAuE;IACvE,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,MAAM,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAiC,CAAC,CAAC;IACvE,CAAC;IACD,SAAS,GAAG,MAAM,CAAC;IAEnB,kBAAkB;IAClB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,eAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,gFAAgF;AAEhF,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,kCAAkC;IAClC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC;IACrE,CAAC;IACD,gCAAgC;IAChC,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,KAAK,MAAM,IAAI,GAAG,CAAC,cAAc,KAAK,GAAG,EAAE,CAAC;IAC5G,CAAC;IACD,0CAA0C;IAC1C,IAAI,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,qBAAqB,KAAK,OAAO,IAAI,GAAG,CAAC,qBAAqB,KAAK,GAAG,EAAE,CAAC;IAC7H,CAAC;IACD,sDAAsD;IACtD,IAAI,GAAG,CAAC,uBAAuB,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC;IACjF,CAAC;IACD,wCAAwC;IACxC,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,oBAAoB,KAAK,MAAM,IAAI,GAAG,CAAC,oBAAoB,KAAK,GAAG,EAAE,CAAC;IACxH,CAAC;IACD,sCAAsC;IACtC,+BAA+B;IAC/B,sCAAsC;IACtC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,MAAM,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,eAAe,KAAK,MAAM,IAAI,GAAG,CAAC,eAAe,KAAK,GAAG,EAAE,CAAC;IACrH,CAAC;IACD,qDAAqD;IACrD,IAAI,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;IACnF,CAAC;IACD,gCAAgC;IAChC,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAEnE,QAAA,MAAM,GAAG;IACpB;;OAEG;IACH,GAAG;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,OAAO,CAA8B,GAAM;QACzC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAY;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,GAAY,SAAS,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,SAA+B;QACjC,IAAI,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAEvF,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;YAC7B,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,aAAa,EAAE,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,IAAY,EAAE,MAA4B,EAAE,WAAmB,EAAE;QACzE,IAAI,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,aAAa,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,IAAI,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,QAAQ;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;aACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,gBAAgB,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1G,iCAAiC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC5D,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAExC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,cAAc,GAAG,IAAI,CAAC;QACtB,aAAa,EAAE,CAAC;QAEhB,eAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,kCAAkC;IAClC,gBAAgB;QACd,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gCAAgC;IAChC,eAAe,CAAC,OAAsB;QACpC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,mCAAmC;IACnC,YAAY;QACV,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,4BAA4B;IAC5B,UAAU,CAAC,IAAY;QACrB,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACH,eAAe;QACb,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,6BAA6B;YAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;YAChE,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAExC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACxE,aAAa,EAAE,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,IAAI,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1D,cAAM,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACH,QAAQ,CAAC,OAAsC;QAC7C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,4EAA4E;IAE5E,sDAAsD;IACtD,MAAM;QACJ,OAAO,GAAG,IAAI,CAAC;QACf,eAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,oDAAoD;IACpD,QAAQ;QACN,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,uCAAuC;IACvC,QAAQ;QACN,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACH,QAAQ,CAAC,GAAyB;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3C,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC7G,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACnF,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU;oBACnD,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC;gBAClF,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,MAAM,CAAC,oBAAoB,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,oBAAoB,GAAG,CAAC;gBACtF,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;gBACtF,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,GAAG,GAAG;gBACpF,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC1D,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC;gBAC1E,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnF,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC7E,MAAM,CAAC,IAAI,CAAC,iCAAiC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,4EAA4E;IAE5E,gDAAgD;IAChD,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,qCAAqC;IACrC,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,cAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/E,cAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YAChE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,4EAA4E;IAE5E,wBAAwB;IACxB,KAAK;QACH,OAAO,GAAG,KAAK,CAAC;QAChB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QACzE,cAAc,GAAG,SAAS,CAAC;QAC3B,aAAa,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}