@gotza02/smartagent 1.2.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.
- package/LICENSE +21 -0
- package/README.md +422 -0
- package/dist/config/index.d.ts +72 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +329 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/agent-manager.d.ts +116 -0
- package/dist/core/agent-manager.d.ts.map +1 -0
- package/dist/core/agent-manager.js +460 -0
- package/dist/core/agent-manager.js.map +1 -0
- package/dist/core/context-manager.d.ts +107 -0
- package/dist/core/context-manager.d.ts.map +1 -0
- package/dist/core/context-manager.js +467 -0
- package/dist/core/context-manager.js.map +1 -0
- package/dist/core/database.d.ts +82 -0
- package/dist/core/database.d.ts.map +1 -0
- package/dist/core/database.js +751 -0
- package/dist/core/database.js.map +1 -0
- package/dist/core/event-emitter.d.ts +110 -0
- package/dist/core/event-emitter.d.ts.map +1 -0
- package/dist/core/event-emitter.js +240 -0
- package/dist/core/event-emitter.js.map +1 -0
- package/dist/core/metrics.d.ts +108 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +281 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/middleware.d.ts +63 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/middleware.js +194 -0
- package/dist/core/middleware.js.map +1 -0
- package/dist/core/plugin-system.d.ts +86 -0
- package/dist/core/plugin-system.d.ts.map +1 -0
- package/dist/core/plugin-system.js +251 -0
- package/dist/core/plugin-system.js.map +1 -0
- package/dist/core/task-scheduler.d.ts +130 -0
- package/dist/core/task-scheduler.d.ts.map +1 -0
- package/dist/core/task-scheduler.js +401 -0
- package/dist/core/task-scheduler.js.map +1 -0
- package/dist/engines/auto-router.d.ts +76 -0
- package/dist/engines/auto-router.d.ts.map +1 -0
- package/dist/engines/auto-router.js +445 -0
- package/dist/engines/auto-router.js.map +1 -0
- package/dist/engines/parallel-execution.d.ts +104 -0
- package/dist/engines/parallel-execution.d.ts.map +1 -0
- package/dist/engines/parallel-execution.js +591 -0
- package/dist/engines/parallel-execution.js.map +1 -0
- package/dist/engines/sequential-thinking.d.ts +88 -0
- package/dist/engines/sequential-thinking.d.ts.map +1 -0
- package/dist/engines/sequential-thinking.js +406 -0
- package/dist/engines/sequential-thinking.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1101 -0
- package/dist/index.js.map +1 -0
- package/dist/security/validation.d.ts +87 -0
- package/dist/security/validation.d.ts.map +1 -0
- package/dist/security/validation.js +465 -0
- package/dist/security/validation.js.map +1 -0
- package/dist/tools/filesystem.d.ts +90 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +292 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/terminal.d.ts +99 -0
- package/dist/tools/terminal.d.ts.map +1 -0
- package/dist/tools/terminal.js +363 -0
- package/dist/tools/terminal.js.map +1 -0
- package/dist/types/index.d.ts +306 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +54 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +189 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin System
|
|
3
|
+
* Extensible plugin architecture for custom tools and agents
|
|
4
|
+
*/
|
|
5
|
+
import { logger } from "../utils/logger.js";
|
|
6
|
+
import { eventEmitter } from "./event-emitter.js";
|
|
7
|
+
/**
|
|
8
|
+
* Plugin Manager
|
|
9
|
+
* Manages plugin lifecycle and hooks
|
|
10
|
+
*/
|
|
11
|
+
export class PluginManager {
|
|
12
|
+
registry = {
|
|
13
|
+
plugins: new Map(),
|
|
14
|
+
hooks: new Map(),
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Register a plugin
|
|
18
|
+
*/
|
|
19
|
+
async registerPlugin(plugin) {
|
|
20
|
+
const { manifest } = plugin;
|
|
21
|
+
// Check if already registered
|
|
22
|
+
if (this.registry.plugins.has(manifest.id)) {
|
|
23
|
+
logger.warn(`Plugin already registered: ${manifest.id}`);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
// Check dependencies
|
|
27
|
+
if (manifest.dependencies) {
|
|
28
|
+
for (const depId of manifest.dependencies) {
|
|
29
|
+
if (!this.registry.plugins.has(depId)) {
|
|
30
|
+
logger.error(`Plugin dependency not found: ${depId}`, {
|
|
31
|
+
plugin: manifest.id,
|
|
32
|
+
});
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Initialize plugin
|
|
38
|
+
try {
|
|
39
|
+
await plugin.initialize();
|
|
40
|
+
// Register hooks
|
|
41
|
+
if (plugin.hooks) {
|
|
42
|
+
for (const [hookName, hook] of Object.entries(plugin.hooks)) {
|
|
43
|
+
this.registerHook(hookName, hook);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Add to registry
|
|
47
|
+
this.registry.plugins.set(manifest.id, plugin);
|
|
48
|
+
// logger.info(`Plugin registered: ${manifest.name} v${manifest.version}`, {
|
|
49
|
+
// pluginId: manifest.id,
|
|
50
|
+
// });
|
|
51
|
+
eventEmitter.emit("plugin:registered", {
|
|
52
|
+
pluginId: manifest.id,
|
|
53
|
+
name: manifest.name,
|
|
54
|
+
version: manifest.version,
|
|
55
|
+
});
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
logger.error(`Failed to initialize plugin: ${manifest.id}`, {
|
|
60
|
+
error: error instanceof Error ? error.message : String(error),
|
|
61
|
+
});
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Unregister a plugin
|
|
67
|
+
*/
|
|
68
|
+
async unregisterPlugin(pluginId) {
|
|
69
|
+
const plugin = this.registry.plugins.get(pluginId);
|
|
70
|
+
if (!plugin) {
|
|
71
|
+
logger.warn(`Plugin not found: ${pluginId}`);
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
// Check for dependent plugins
|
|
75
|
+
for (const [id, p] of this.registry.plugins.entries()) {
|
|
76
|
+
if (p.manifest.dependencies?.includes(pluginId)) {
|
|
77
|
+
logger.error(`Cannot unregister plugin with dependents: ${pluginId}`, {
|
|
78
|
+
dependent: id,
|
|
79
|
+
});
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Destroy plugin
|
|
84
|
+
try {
|
|
85
|
+
if (plugin.destroy) {
|
|
86
|
+
await plugin.destroy();
|
|
87
|
+
}
|
|
88
|
+
// Unregister hooks
|
|
89
|
+
if (plugin.hooks) {
|
|
90
|
+
for (const hookName of Object.keys(plugin.hooks)) {
|
|
91
|
+
const hook = plugin.hooks[hookName];
|
|
92
|
+
if (hook) {
|
|
93
|
+
this.unregisterHook(hookName, hook);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Remove from registry
|
|
98
|
+
this.registry.plugins.delete(pluginId);
|
|
99
|
+
logger.info(`Plugin unregistered: ${plugin.manifest.name}`);
|
|
100
|
+
eventEmitter.emit("plugin:unregistered", {
|
|
101
|
+
pluginId,
|
|
102
|
+
name: plugin.manifest.name,
|
|
103
|
+
});
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
logger.error(`Failed to destroy plugin: ${pluginId}`, {
|
|
108
|
+
error: error instanceof Error ? error.message : String(error),
|
|
109
|
+
});
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Register a hook
|
|
115
|
+
*/
|
|
116
|
+
registerHook(name, hook) {
|
|
117
|
+
const hooks = this.registry.hooks.get(name) || [];
|
|
118
|
+
hooks.push(hook);
|
|
119
|
+
this.registry.hooks.set(name, hooks);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Unregister a hook
|
|
123
|
+
*/
|
|
124
|
+
unregisterHook(name, hook) {
|
|
125
|
+
const hooks = this.registry.hooks.get(name);
|
|
126
|
+
if (!hooks)
|
|
127
|
+
return;
|
|
128
|
+
const index = hooks.indexOf(hook);
|
|
129
|
+
if (index > -1) {
|
|
130
|
+
hooks.splice(index, 1);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Execute hooks
|
|
135
|
+
*/
|
|
136
|
+
async executeHooks(name, data) {
|
|
137
|
+
const hooks = this.registry.hooks.get(name);
|
|
138
|
+
if (!hooks || hooks.length === 0)
|
|
139
|
+
return [];
|
|
140
|
+
const results = [];
|
|
141
|
+
for (const hook of hooks) {
|
|
142
|
+
try {
|
|
143
|
+
const result = await hook(data);
|
|
144
|
+
results.push(result);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
logger.error(`Hook execution error: ${name}`, {
|
|
148
|
+
error: error instanceof Error ? error.message : String(error),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return results;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get plugin by ID
|
|
156
|
+
*/
|
|
157
|
+
getPlugin(pluginId) {
|
|
158
|
+
return this.registry.plugins.get(pluginId) || null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get all plugins
|
|
162
|
+
*/
|
|
163
|
+
getAllPlugins() {
|
|
164
|
+
return Array.from(this.registry.plugins.values());
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if plugin is registered
|
|
168
|
+
*/
|
|
169
|
+
hasPlugin(pluginId) {
|
|
170
|
+
return this.registry.plugins.has(pluginId);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get plugin count
|
|
174
|
+
*/
|
|
175
|
+
getPluginCount() {
|
|
176
|
+
return this.registry.plugins.size;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get hook count
|
|
180
|
+
*/
|
|
181
|
+
getHookCount(name) {
|
|
182
|
+
if (name) {
|
|
183
|
+
return this.registry.hooks.get(name)?.length || 0;
|
|
184
|
+
}
|
|
185
|
+
let count = 0;
|
|
186
|
+
for (const hooks of this.registry.hooks.values()) {
|
|
187
|
+
count += hooks.length;
|
|
188
|
+
}
|
|
189
|
+
return count;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get available hooks
|
|
193
|
+
*/
|
|
194
|
+
getAvailableHooks() {
|
|
195
|
+
return Array.from(this.registry.hooks.keys());
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Load plugin from file
|
|
199
|
+
*/
|
|
200
|
+
async loadPluginFromFile(filePath) {
|
|
201
|
+
try {
|
|
202
|
+
// Dynamic import
|
|
203
|
+
const module = await import(filePath);
|
|
204
|
+
const plugin = module.default || module;
|
|
205
|
+
if (!plugin.manifest || !plugin.initialize) {
|
|
206
|
+
logger.error(`Invalid plugin format: ${filePath}`);
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
return this.registerPlugin(plugin);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
logger.error(`Failed to load plugin from file: ${filePath}`, {
|
|
213
|
+
error: error instanceof Error ? error.message : String(error),
|
|
214
|
+
});
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Create built-in plugin
|
|
220
|
+
*/
|
|
221
|
+
createBuiltinPlugin(id, name, hooks) {
|
|
222
|
+
return {
|
|
223
|
+
manifest: {
|
|
224
|
+
id,
|
|
225
|
+
name,
|
|
226
|
+
version: "1.0.0",
|
|
227
|
+
description: `Built-in ${name} plugin`,
|
|
228
|
+
author: "Swarm MCP Enterprise",
|
|
229
|
+
},
|
|
230
|
+
initialize: () => {
|
|
231
|
+
logger.info(`Built-in plugin initialized: ${name}`);
|
|
232
|
+
},
|
|
233
|
+
hooks,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Reset plugin manager
|
|
238
|
+
*/
|
|
239
|
+
async reset() {
|
|
240
|
+
// Unregister all plugins
|
|
241
|
+
for (const pluginId of this.registry.plugins.keys()) {
|
|
242
|
+
await this.unregisterPlugin(pluginId);
|
|
243
|
+
}
|
|
244
|
+
this.registry.plugins.clear();
|
|
245
|
+
this.registry.hooks.clear();
|
|
246
|
+
logger.info("Plugin manager reset");
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Export singleton instance
|
|
250
|
+
export const pluginManager = new PluginManager();
|
|
251
|
+
//# sourceMappingURL=plugin-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-system.js","sourceRoot":"","sources":["../../src/core/plugin-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Scheduler & Dependencies
|
|
3
|
+
* Advanced task scheduling with dependency management
|
|
4
|
+
*/
|
|
5
|
+
import type { Task, TaskStatus } from "../types/index.js";
|
|
6
|
+
interface TaskDependency {
|
|
7
|
+
taskId: string;
|
|
8
|
+
dependsOn: string[];
|
|
9
|
+
dependentTasks: string[];
|
|
10
|
+
}
|
|
11
|
+
interface ScheduledTask extends Task {
|
|
12
|
+
dependencies: string[];
|
|
13
|
+
dependents: string[];
|
|
14
|
+
scheduledAt?: string;
|
|
15
|
+
retryCount: number;
|
|
16
|
+
maxRetries: number;
|
|
17
|
+
retryDelay: number;
|
|
18
|
+
}
|
|
19
|
+
interface ScheduleOptions {
|
|
20
|
+
priority?: number;
|
|
21
|
+
dependencies?: string[];
|
|
22
|
+
maxRetries?: number;
|
|
23
|
+
retryDelay?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Task Scheduler
|
|
27
|
+
* Manages task dependencies and execution order
|
|
28
|
+
*/
|
|
29
|
+
export declare class TaskScheduler {
|
|
30
|
+
private graph;
|
|
31
|
+
private executionQueue;
|
|
32
|
+
private runningTasks;
|
|
33
|
+
private maxConcurrentTasks;
|
|
34
|
+
/**
|
|
35
|
+
* Schedule a new task with dependencies
|
|
36
|
+
*/
|
|
37
|
+
scheduleTask(agentId: string, type: string, description: string, options?: ScheduleOptions): ScheduledTask;
|
|
38
|
+
/**
|
|
39
|
+
* Check if task is ready to execute (all dependencies completed)
|
|
40
|
+
*/
|
|
41
|
+
isTaskReady(taskId: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Add task to execution queue
|
|
44
|
+
*/
|
|
45
|
+
private addToQueue;
|
|
46
|
+
/**
|
|
47
|
+
* Get next task from queue
|
|
48
|
+
*/
|
|
49
|
+
getNextTask(): ScheduledTask | null;
|
|
50
|
+
/**
|
|
51
|
+
* Mark task as started
|
|
52
|
+
*/
|
|
53
|
+
startTask(taskId: string): ScheduledTask | null;
|
|
54
|
+
/**
|
|
55
|
+
* Mark task as completed
|
|
56
|
+
*/
|
|
57
|
+
completeTask(taskId: string, result?: unknown): ScheduledTask | null;
|
|
58
|
+
/**
|
|
59
|
+
* Mark task as failed
|
|
60
|
+
*/
|
|
61
|
+
failTask(taskId: string, error: string): ScheduledTask | null;
|
|
62
|
+
/**
|
|
63
|
+
* Schedule task retry with exponential backoff and jitter
|
|
64
|
+
*/
|
|
65
|
+
private scheduleRetry;
|
|
66
|
+
/**
|
|
67
|
+
* Check and queue dependent tasks
|
|
68
|
+
*/
|
|
69
|
+
private checkDependentTasks;
|
|
70
|
+
/**
|
|
71
|
+
* Fail all dependent tasks
|
|
72
|
+
*/
|
|
73
|
+
private failDependentTasks;
|
|
74
|
+
/**
|
|
75
|
+
* Get task by ID
|
|
76
|
+
*/
|
|
77
|
+
getTask(taskId: string): ScheduledTask | null;
|
|
78
|
+
/**
|
|
79
|
+
* Get all tasks
|
|
80
|
+
*/
|
|
81
|
+
getAllTasks(): ScheduledTask[];
|
|
82
|
+
/**
|
|
83
|
+
* Get tasks by status
|
|
84
|
+
*/
|
|
85
|
+
getTasksByStatus(status: TaskStatus): ScheduledTask[];
|
|
86
|
+
/**
|
|
87
|
+
* Get tasks by agent
|
|
88
|
+
*/
|
|
89
|
+
getTasksByAgent(agentId: string): ScheduledTask[];
|
|
90
|
+
/**
|
|
91
|
+
* Get execution order (topological sort)
|
|
92
|
+
*/
|
|
93
|
+
getExecutionOrder(): string[];
|
|
94
|
+
/**
|
|
95
|
+
* Detect circular dependencies
|
|
96
|
+
*/
|
|
97
|
+
detectCircularDependencies(): string[][];
|
|
98
|
+
/**
|
|
99
|
+
* Cancel a task
|
|
100
|
+
*/
|
|
101
|
+
cancelTask(taskId: string): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Get task statistics
|
|
104
|
+
*/
|
|
105
|
+
getStats(): {
|
|
106
|
+
total: number;
|
|
107
|
+
pending: number;
|
|
108
|
+
inProgress: number;
|
|
109
|
+
completed: number;
|
|
110
|
+
failed: number;
|
|
111
|
+
cancelled: number;
|
|
112
|
+
queued: number;
|
|
113
|
+
running: number;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Set max concurrent tasks
|
|
117
|
+
*/
|
|
118
|
+
setMaxConcurrentTasks(max: number): void;
|
|
119
|
+
/**
|
|
120
|
+
* Clear completed tasks
|
|
121
|
+
*/
|
|
122
|
+
cleanup(maxAgeHours?: number): number;
|
|
123
|
+
/**
|
|
124
|
+
* Reset scheduler
|
|
125
|
+
*/
|
|
126
|
+
reset(): void;
|
|
127
|
+
}
|
|
128
|
+
export declare const taskScheduler: TaskScheduler;
|
|
129
|
+
export type { ScheduledTask, TaskDependency, ScheduleOptions };
|
|
130
|
+
//# sourceMappingURL=task-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-scheduler.d.ts","sourceRoot":"","sources":["../../src/core/task-scheduler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE1D,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,aAAc,SAAQ,IAAI;IAClC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAOD,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAGX;IACF,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,kBAAkB,CAAK;IAE/B;;OAEG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,eAAoB,GAC5B,aAAa;IA6DhB;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAiBpC;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,WAAW,IAAI,aAAa,GAAG,IAAI;IAkBnC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAc/C;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI;IAkBpE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAuB7D;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAI7C;;OAEG;IACH,WAAW,IAAI,aAAa,EAAE;IAI9B;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,EAAE;IAIrD;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAIjD;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAyB7B;;OAEG;IACH,0BAA0B,IAAI,MAAM,EAAE,EAAE;IAqCxC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IA8BnC;;OAEG;IACH,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB;IAeD;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,WAAW,GAAE,MAAW,GAAG,MAAM;IAoBzC;;OAEG;IACH,KAAK,IAAI,IAAI;CAOd;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC;AAGjD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|