erosolar-cli 2.1.231 → 2.1.234

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/agents/erosolar-security.rules.json +84 -0
  2. package/config/security-deployment.json +10 -9
  3. package/dist/bin/cliMode.d.ts +12 -0
  4. package/dist/bin/cliMode.d.ts.map +1 -0
  5. package/dist/bin/cliMode.js +27 -0
  6. package/dist/bin/cliMode.js.map +1 -0
  7. package/dist/bin/erosolar.js +47 -46
  8. package/dist/bin/erosolar.js.map +1 -1
  9. package/dist/capabilities/index.d.ts +1 -0
  10. package/dist/capabilities/index.d.ts.map +1 -1
  11. package/dist/capabilities/index.js +1 -0
  12. package/dist/capabilities/index.js.map +1 -1
  13. package/dist/capabilities/taoCapability.d.ts +13 -0
  14. package/dist/capabilities/taoCapability.d.ts.map +1 -0
  15. package/dist/capabilities/taoCapability.js +20 -0
  16. package/dist/capabilities/taoCapability.js.map +1 -0
  17. package/dist/contracts/agent-profiles.schema.json +16 -0
  18. package/dist/contracts/tools.schema.json +12 -0
  19. package/dist/core/agent.d.ts +6 -0
  20. package/dist/core/agent.d.ts.map +1 -1
  21. package/dist/core/agent.js +22 -0
  22. package/dist/core/agent.js.map +1 -1
  23. package/dist/core/agentOrchestrator.d.ts +3 -12
  24. package/dist/core/agentOrchestrator.d.ts.map +1 -1
  25. package/dist/core/agentOrchestrator.js +199 -107
  26. package/dist/core/agentOrchestrator.js.map +1 -1
  27. package/dist/core/baseToolFactory.d.ts +187 -0
  28. package/dist/core/baseToolFactory.d.ts.map +1 -0
  29. package/dist/core/baseToolFactory.js +352 -0
  30. package/dist/core/baseToolFactory.js.map +1 -0
  31. package/dist/core/constants.d.ts +5 -0
  32. package/dist/core/constants.d.ts.map +1 -0
  33. package/dist/core/constants.js +5 -0
  34. package/dist/core/constants.js.map +1 -0
  35. package/dist/core/errors/index.d.ts +50 -0
  36. package/dist/core/errors/index.d.ts.map +1 -0
  37. package/dist/core/errors/index.js +156 -0
  38. package/dist/core/errors/index.js.map +1 -0
  39. package/dist/core/errors/safetyValidator.d.ts.map +1 -1
  40. package/dist/core/errors/safetyValidator.js +6 -137
  41. package/dist/core/errors/safetyValidator.js.map +1 -1
  42. package/dist/headless/headlessApp.d.ts.map +1 -1
  43. package/dist/headless/headlessApp.js +2 -15
  44. package/dist/headless/headlessApp.js.map +1 -1
  45. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
  46. package/dist/plugins/tools/nodeDefaults.js +2 -0
  47. package/dist/plugins/tools/nodeDefaults.js.map +1 -1
  48. package/dist/plugins/tools/tao/taoPlugin.d.ts +3 -0
  49. package/dist/plugins/tools/tao/taoPlugin.d.ts.map +1 -0
  50. package/dist/plugins/tools/tao/taoPlugin.js +14 -0
  51. package/dist/plugins/tools/tao/taoPlugin.js.map +1 -0
  52. package/dist/providers/baseProvider.d.ts +148 -0
  53. package/dist/providers/baseProvider.d.ts.map +1 -0
  54. package/dist/providers/baseProvider.js +284 -0
  55. package/dist/providers/baseProvider.js.map +1 -0
  56. package/dist/shell/commandRegistry.d.ts +122 -0
  57. package/dist/shell/commandRegistry.d.ts.map +1 -0
  58. package/dist/shell/commandRegistry.js +371 -0
  59. package/dist/shell/commandRegistry.js.map +1 -0
  60. package/dist/shell/shellApp.d.ts.map +1 -1
  61. package/dist/shell/shellApp.js +2 -15
  62. package/dist/shell/shellApp.js.map +1 -1
  63. package/dist/tools/bashTools.d.ts.map +1 -1
  64. package/dist/tools/bashTools.js +1 -5
  65. package/dist/tools/bashTools.js.map +1 -1
  66. package/dist/tools/tao/index.d.ts +28 -0
  67. package/dist/tools/tao/index.d.ts.map +1 -0
  68. package/dist/tools/tao/index.js +33 -0
  69. package/dist/tools/tao/index.js.map +1 -0
  70. package/dist/tools/tao/intentParser.d.ts +9 -0
  71. package/dist/tools/tao/intentParser.d.ts.map +1 -0
  72. package/dist/tools/tao/intentParser.js +163 -0
  73. package/dist/tools/tao/intentParser.js.map +1 -0
  74. package/dist/tools/tao/rlEngine.d.ts +40 -0
  75. package/dist/tools/tao/rlEngine.d.ts.map +1 -0
  76. package/dist/tools/tao/rlEngine.js +237 -0
  77. package/dist/tools/tao/rlEngine.js.map +1 -0
  78. package/dist/tools/tao/sessionState.d.ts +9 -0
  79. package/dist/tools/tao/sessionState.d.ts.map +1 -0
  80. package/dist/tools/tao/sessionState.js +18 -0
  81. package/dist/tools/tao/sessionState.js.map +1 -0
  82. package/dist/tools/tao/types.d.ts +109 -0
  83. package/dist/tools/tao/types.d.ts.map +1 -0
  84. package/dist/tools/tao/types.js +5 -0
  85. package/dist/tools/tao/types.js.map +1 -0
  86. package/dist/tools/tao/verification.d.ts +23 -0
  87. package/dist/tools/tao/verification.d.ts.map +1 -0
  88. package/dist/tools/tao/verification.js +211 -0
  89. package/dist/tools/tao/verification.js.map +1 -0
  90. package/dist/tools/taoTools.d.ts +23 -0
  91. package/dist/tools/taoTools.d.ts.map +1 -0
  92. package/dist/tools/taoTools.js +14499 -0
  93. package/dist/tools/taoTools.js.map +1 -0
  94. package/dist/ui/UnifiedUIRenderer.d.ts +5 -0
  95. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  96. package/dist/ui/UnifiedUIRenderer.js +49 -20
  97. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  98. package/dist/ui/index.d.ts +102 -0
  99. package/dist/ui/index.d.ts.map +1 -0
  100. package/dist/ui/index.js +120 -0
  101. package/dist/ui/index.js.map +1 -0
  102. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts.map +1 -1
  103. package/dist/ui/orchestration/UIUpdateCoordinator.js +7 -0
  104. package/dist/ui/orchestration/UIUpdateCoordinator.js.map +1 -1
  105. package/dist/utils/packageInfo.d.ts +14 -0
  106. package/dist/utils/packageInfo.d.ts.map +1 -0
  107. package/dist/utils/packageInfo.js +45 -0
  108. package/dist/utils/packageInfo.js.map +1 -0
  109. package/package.json +3 -3
  110. package/scripts/deploy-security-capabilities.js +157 -0
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Base Provider - Abstract LLM Provider Implementation
3
+ *
4
+ * Provides common functionality for LLM providers:
5
+ * - Retry logic with exponential backoff
6
+ * - Rate limit handling
7
+ * - Transient error recovery
8
+ * - Message conversion utilities
9
+ * - Usage tracking
10
+ *
11
+ * Usage:
12
+ * ```typescript
13
+ * class MyProvider extends BaseProvider {
14
+ * readonly id = 'my-provider';
15
+ *
16
+ * protected async doGenerate(messages, tools): Promise<ProviderResponse> {
17
+ * // Provider-specific implementation
18
+ * }
19
+ *
20
+ * protected async doGenerateStream(messages, tools): AsyncIterable<StreamChunk> {
21
+ * // Provider-specific implementation
22
+ * }
23
+ * }
24
+ * ```
25
+ */
26
+ // ═══════════════════════════════════════════════════════════════════════════════
27
+ // Constants
28
+ // ═══════════════════════════════════════════════════════════════════════════════
29
+ /** Patterns that indicate transient/retryable errors */
30
+ export const TRANSIENT_ERROR_PATTERNS = [
31
+ 'premature close',
32
+ 'premature end',
33
+ 'unexpected end',
34
+ 'aborted',
35
+ 'fetcherror',
36
+ 'invalid response body',
37
+ 'gunzip',
38
+ 'decompress',
39
+ 'econnreset',
40
+ 'econnrefused',
41
+ 'epipe',
42
+ 'socket hang up',
43
+ 'network',
44
+ 'timeout',
45
+ '500',
46
+ '502',
47
+ '503',
48
+ '504',
49
+ 'overloaded',
50
+ ];
51
+ /** Default retry configuration */
52
+ export const DEFAULT_RETRY_CONFIG = {
53
+ maxRetries: 3,
54
+ initialDelayMs: 1000,
55
+ maxDelayMs: 30000,
56
+ backoffMultiplier: 2,
57
+ };
58
+ /** Default rate limit configuration */
59
+ export const DEFAULT_RATE_LIMIT_CONFIG = {
60
+ maxRetries: 4,
61
+ initialDelayMs: 1500,
62
+ minDelayMs: 750,
63
+ maxDelayMs: 40000,
64
+ };
65
+ // ═══════════════════════════════════════════════════════════════════════════════
66
+ // Error Detection Utilities
67
+ // ═══════════════════════════════════════════════════════════════════════════════
68
+ /**
69
+ * Check if an error is transient and can be retried
70
+ */
71
+ export function isTransientError(error) {
72
+ if (!(error instanceof Error))
73
+ return false;
74
+ const message = error.message.toLowerCase();
75
+ const errorName = error.name?.toLowerCase() ?? '';
76
+ const errorCode = error.code?.toLowerCase() ?? '';
77
+ const allText = `${message} ${errorName} ${errorCode}`;
78
+ return TRANSIENT_ERROR_PATTERNS.some((pattern) => allText.includes(pattern));
79
+ }
80
+ /**
81
+ * Check if an error is a rate limit error
82
+ */
83
+ export function isRateLimitError(error) {
84
+ if (!(error instanceof Error))
85
+ return false;
86
+ const message = error.message.toLowerCase();
87
+ // Check for common rate limit indicators
88
+ if (message.includes('rate limit') ||
89
+ message.includes('rate_limit') ||
90
+ message.includes('too many requests') ||
91
+ message.includes('429')) {
92
+ return true;
93
+ }
94
+ // Check for status code
95
+ const status = error.status;
96
+ return status === 429;
97
+ }
98
+ /**
99
+ * Check if an error is an authentication error
100
+ */
101
+ export function isAuthError(error) {
102
+ if (!(error instanceof Error))
103
+ return false;
104
+ const message = error.message.toLowerCase();
105
+ const status = error.status;
106
+ return (status === 401 ||
107
+ status === 403 ||
108
+ message.includes('unauthorized') ||
109
+ message.includes('invalid api key') ||
110
+ message.includes('authentication'));
111
+ }
112
+ // ═══════════════════════════════════════════════════════════════════════════════
113
+ // Retry Utilities
114
+ // ═══════════════════════════════════════════════════════════════════════════════
115
+ /**
116
+ * Sleep for a given duration
117
+ */
118
+ export function sleep(ms) {
119
+ return new Promise((resolve) => setTimeout(resolve, ms));
120
+ }
121
+ /**
122
+ * Calculate exponential backoff delay
123
+ */
124
+ export function calculateBackoffDelay(attempt, config) {
125
+ const delay = config.initialDelayMs * Math.pow(config.backoffMultiplier, attempt);
126
+ // Add jitter (±10%)
127
+ const jitter = delay * 0.1 * (Math.random() * 2 - 1);
128
+ return Math.min(delay + jitter, config.maxDelayMs);
129
+ }
130
+ /**
131
+ * Execute an operation with retry logic
132
+ */
133
+ export async function withRetry(operation, options = {}) {
134
+ const config = {
135
+ ...DEFAULT_RETRY_CONFIG,
136
+ ...options.config,
137
+ };
138
+ const shouldRetry = options.shouldRetry ?? isTransientError;
139
+ let lastError;
140
+ for (let attempt = 0; attempt <= config.maxRetries; attempt++) {
141
+ try {
142
+ return await operation();
143
+ }
144
+ catch (error) {
145
+ lastError = error;
146
+ // Don't retry auth errors
147
+ if (isAuthError(error)) {
148
+ throw error;
149
+ }
150
+ // Check if we should retry
151
+ if (attempt === config.maxRetries || !shouldRetry(error)) {
152
+ throw error;
153
+ }
154
+ // Calculate delay and wait
155
+ const delay = calculateBackoffDelay(attempt, config);
156
+ options.onRetry?.(error, attempt, delay);
157
+ await sleep(delay);
158
+ }
159
+ }
160
+ throw lastError;
161
+ }
162
+ // ═══════════════════════════════════════════════════════════════════════════════
163
+ // Message Utilities
164
+ // ═══════════════════════════════════════════════════════════════════════════════
165
+ /**
166
+ * Extract system message from conversation
167
+ */
168
+ export function extractSystemMessage(messages) {
169
+ const systemMessages = messages.filter((m) => m.role === 'system');
170
+ const rest = messages.filter((m) => m.role !== 'system');
171
+ if (systemMessages.length === 0) {
172
+ return { system: null, rest };
173
+ }
174
+ // Combine all system messages
175
+ const system = systemMessages
176
+ .map((m) => (typeof m.content === 'string' ? m.content : JSON.stringify(m.content)))
177
+ .join('\n\n');
178
+ return { system, rest };
179
+ }
180
+ /**
181
+ * Merge consecutive messages from the same role
182
+ */
183
+ export function mergeConsecutiveMessages(messages) {
184
+ if (messages.length === 0)
185
+ return [];
186
+ const merged = [];
187
+ let current = null;
188
+ for (const message of messages) {
189
+ if (!current) {
190
+ current = { ...message };
191
+ continue;
192
+ }
193
+ if (current.role === message.role && typeof current.content === 'string' && typeof message.content === 'string') {
194
+ // Merge text content
195
+ current.content = `${current.content}\n\n${message.content}`;
196
+ }
197
+ else {
198
+ merged.push(current);
199
+ current = { ...message };
200
+ }
201
+ }
202
+ if (current) {
203
+ merged.push(current);
204
+ }
205
+ return merged;
206
+ }
207
+ // ═══════════════════════════════════════════════════════════════════════════════
208
+ // Usage Tracking
209
+ // ═══════════════════════════════════════════════════════════════════════════════
210
+ /**
211
+ * Create an empty usage object
212
+ */
213
+ export function emptyUsage() {
214
+ return {
215
+ inputTokens: 0,
216
+ outputTokens: 0,
217
+ totalTokens: 0,
218
+ };
219
+ }
220
+ /**
221
+ * Merge usage objects
222
+ */
223
+ export function mergeUsage(a, b) {
224
+ return {
225
+ inputTokens: (a.inputTokens ?? 0) + (b.inputTokens ?? 0),
226
+ outputTokens: (a.outputTokens ?? 0) + (b.outputTokens ?? 0),
227
+ totalTokens: (a.totalTokens ?? 0) + (b.totalTokens ?? 0),
228
+ };
229
+ }
230
+ // ═══════════════════════════════════════════════════════════════════════════════
231
+ // Abstract Base Provider
232
+ // ═══════════════════════════════════════════════════════════════════════════════
233
+ /**
234
+ * Abstract base class for LLM providers
235
+ *
236
+ * Implements common functionality like retry logic and error handling.
237
+ * Subclasses must implement the abstract methods for provider-specific behavior.
238
+ */
239
+ export class BaseProvider {
240
+ model;
241
+ maxTokens;
242
+ temperature;
243
+ retryConfig;
244
+ rateLimitConfig;
245
+ constructor(options) {
246
+ this.model = options.model;
247
+ this.maxTokens = options.maxTokens ?? 4096;
248
+ this.temperature = options.temperature ?? 0;
249
+ this.retryConfig = { ...DEFAULT_RETRY_CONFIG, ...options.retryConfig };
250
+ this.rateLimitConfig = { ...DEFAULT_RATE_LIMIT_CONFIG, ...options.rateLimitConfig };
251
+ }
252
+ /**
253
+ * Generate a response (implemented by subclass)
254
+ */
255
+ async generate(messages, tools) {
256
+ return withRetry(() => this.doGenerate(messages, tools), {
257
+ config: this.retryConfig,
258
+ shouldRetry: (error) => isTransientError(error) || isRateLimitError(error),
259
+ onRetry: (error, attempt, delay) => {
260
+ this.onRetry(error, attempt, delay);
261
+ },
262
+ });
263
+ }
264
+ /**
265
+ * Generate a streaming response (implemented by subclass)
266
+ */
267
+ async *generateStream(messages, tools) {
268
+ // Stream operations are harder to retry, so we do best-effort
269
+ yield* this.doGenerateStream(messages, tools);
270
+ }
271
+ /**
272
+ * Get available models (optional, implemented by subclass)
273
+ */
274
+ async getModels() {
275
+ return [];
276
+ }
277
+ /**
278
+ * Called when a retry is about to happen
279
+ */
280
+ onRetry(error, attempt, delay) {
281
+ // Subclasses can override for logging
282
+ }
283
+ }
284
+ //# sourceMappingURL=baseProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseProvider.js","sourceRoot":"","sources":["../../src/providers/baseProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Command Registry - Slash Command Management
3
+ *
4
+ * Provides a registry for slash commands with:
5
+ * - Command registration and discovery
6
+ * - Help text generation
7
+ * - Category organization
8
+ * - Command execution delegation
9
+ *
10
+ * Usage:
11
+ * ```typescript
12
+ * const registry = new CommandRegistry();
13
+ *
14
+ * registry.register({
15
+ * name: '/help',
16
+ * aliases: ['/?'],
17
+ * description: 'Show help information',
18
+ * category: 'navigation',
19
+ * handler: async (context) => {
20
+ * context.showHelp();
21
+ * },
22
+ * });
23
+ *
24
+ * await registry.execute('/help', '', context);
25
+ * ```
26
+ */
27
+ export type CommandCategory = 'navigation' | 'model' | 'context' | 'session' | 'tools' | 'development' | 'security' | 'advanced' | 'learning' | 'ui';
28
+ export interface CommandContext {
29
+ /** The shell instance for accessing shell methods */
30
+ shell: unknown;
31
+ /** Current input/arguments */
32
+ input: string;
33
+ /** Raw command string */
34
+ rawCommand: string;
35
+ }
36
+ export interface CommandDefinition {
37
+ /** Primary command name (e.g., '/help') */
38
+ name: string;
39
+ /** Alternative names for the command */
40
+ aliases?: string[];
41
+ /** Short description for help text */
42
+ description: string;
43
+ /** Category for organization */
44
+ category: CommandCategory;
45
+ /** Whether command is async */
46
+ async?: boolean;
47
+ /** Whether command is hidden from help */
48
+ hidden?: boolean;
49
+ /** Usage example */
50
+ usage?: string;
51
+ /** Handler function */
52
+ handler: (context: CommandContext) => void | Promise<void>;
53
+ }
54
+ export interface CommandMatch {
55
+ command: CommandDefinition;
56
+ matchedName: string;
57
+ }
58
+ export declare class CommandRegistry {
59
+ private commands;
60
+ private aliasMap;
61
+ /**
62
+ * Register a command
63
+ */
64
+ register(command: CommandDefinition): this;
65
+ /**
66
+ * Register multiple commands
67
+ */
68
+ registerAll(commands: CommandDefinition[]): this;
69
+ /**
70
+ * Find a command by name or alias
71
+ */
72
+ find(commandName: string): CommandMatch | null;
73
+ /**
74
+ * Check if a command exists
75
+ */
76
+ has(commandName: string): boolean;
77
+ /**
78
+ * Execute a command
79
+ */
80
+ execute(commandName: string, input: string, shell: unknown): Promise<boolean>;
81
+ /**
82
+ * Get all commands in a category
83
+ */
84
+ getByCategory(category: CommandCategory): CommandDefinition[];
85
+ /**
86
+ * Get all categories with their commands
87
+ */
88
+ getAllCategories(): Map<CommandCategory, CommandDefinition[]>;
89
+ /**
90
+ * Get all registered commands
91
+ */
92
+ getAll(): CommandDefinition[];
93
+ /**
94
+ * Get all visible commands (excluding hidden)
95
+ */
96
+ getVisible(): CommandDefinition[];
97
+ /**
98
+ * Generate help text for all commands
99
+ */
100
+ generateHelpText(): string;
101
+ /**
102
+ * Generate compact help text (just command names)
103
+ */
104
+ generateCompactHelp(): string;
105
+ /**
106
+ * Normalize command name
107
+ */
108
+ private normalizeName;
109
+ /**
110
+ * Format category name for display
111
+ */
112
+ private formatCategoryName;
113
+ }
114
+ /**
115
+ * Create a standard set of commands for the shell
116
+ *
117
+ * This is meant to be extended/customized by the shell implementation
118
+ */
119
+ export declare function createBaseCommands(): CommandDefinition[];
120
+ export declare function getCommandRegistry(): CommandRegistry;
121
+ export declare function resetCommandRegistry(): void;
122
+ //# sourceMappingURL=commandRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandRegistry.d.ts","sourceRoot":"","sources":["../../src/shell/commandRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,OAAO,GACP,SAAS,GACT,SAAS,GACT,OAAO,GACP,aAAa,GACb,UAAU,GACV,UAAU,GACV,UAAU,GACV,IAAI,CAAC;AAET,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,KAAK,EAAE,OAAO,CAAC;IACf,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,QAAQ,EAAE,eAAe,CAAC;IAC1B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,QAAQ,CAA6B;IAE7C;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAgB1C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAOhD;;OAEG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAqB9C;;OAEG;IACH,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBnF;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,EAAE;IAM7D;;OAEG;IACH,gBAAgB,IAAI,GAAG,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IAc7D;;OAEG;IACH,MAAM,IAAI,iBAAiB,EAAE;IAI7B;;OAEG;IACH,UAAU,IAAI,iBAAiB,EAAE;IAIjC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAkC1B;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAO7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAe3B;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CAyJxD;AAQD,wBAAgB,kBAAkB,IAAI,eAAe,CAMpD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}