swarm-engine 1.3.0 → 1.38.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 (91) hide show
  1. package/README.md +45 -7
  2. package/dist/cli/commands/memory.js +117 -0
  3. package/dist/cli/commands/memory.js.map +1 -1
  4. package/dist/core/types.d.ts +30 -0
  5. package/dist/core/types.d.ts.map +1 -1
  6. package/dist/index.d.ts +46 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +32 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/memory/index.d.ts +37 -0
  11. package/dist/memory/index.d.ts.map +1 -1
  12. package/dist/memory/index.js +97 -0
  13. package/dist/memory/index.js.map +1 -1
  14. package/dist/runtime/agent-runner.d.ts +10 -0
  15. package/dist/runtime/agent-runner.d.ts.map +1 -1
  16. package/dist/runtime/agent-runner.js +71 -3
  17. package/dist/runtime/agent-runner.js.map +1 -1
  18. package/dist/runtime/engine.d.ts +18 -0
  19. package/dist/runtime/engine.d.ts.map +1 -1
  20. package/dist/runtime/engine.js +306 -2
  21. package/dist/runtime/engine.js.map +1 -1
  22. package/dist/runtime/execution-graph.d.ts +86 -0
  23. package/dist/runtime/execution-graph.d.ts.map +1 -0
  24. package/dist/runtime/execution-graph.js +441 -0
  25. package/dist/runtime/execution-graph.js.map +1 -0
  26. package/dist/runtime/graph-adversarial.d.ts +88 -0
  27. package/dist/runtime/graph-adversarial.d.ts.map +1 -0
  28. package/dist/runtime/graph-adversarial.js +378 -0
  29. package/dist/runtime/graph-adversarial.js.map +1 -0
  30. package/dist/runtime/graph-analyzer.d.ts +106 -0
  31. package/dist/runtime/graph-analyzer.d.ts.map +1 -0
  32. package/dist/runtime/graph-analyzer.js +321 -0
  33. package/dist/runtime/graph-analyzer.js.map +1 -0
  34. package/dist/runtime/graph-causal.d.ts +91 -0
  35. package/dist/runtime/graph-causal.d.ts.map +1 -0
  36. package/dist/runtime/graph-causal.js +292 -0
  37. package/dist/runtime/graph-causal.js.map +1 -0
  38. package/dist/runtime/graph-context-router.d.ts +73 -0
  39. package/dist/runtime/graph-context-router.d.ts.map +1 -0
  40. package/dist/runtime/graph-context-router.js +162 -0
  41. package/dist/runtime/graph-context-router.js.map +1 -0
  42. package/dist/runtime/graph-discovery.d.ts +71 -0
  43. package/dist/runtime/graph-discovery.d.ts.map +1 -0
  44. package/dist/runtime/graph-discovery.js +367 -0
  45. package/dist/runtime/graph-discovery.js.map +1 -0
  46. package/dist/runtime/graph-dropout.d.ts +59 -0
  47. package/dist/runtime/graph-dropout.d.ts.map +1 -0
  48. package/dist/runtime/graph-dropout.js +196 -0
  49. package/dist/runtime/graph-dropout.js.map +1 -0
  50. package/dist/runtime/graph-embeddings.d.ts +58 -0
  51. package/dist/runtime/graph-embeddings.d.ts.map +1 -0
  52. package/dist/runtime/graph-embeddings.js +301 -0
  53. package/dist/runtime/graph-embeddings.js.map +1 -0
  54. package/dist/runtime/graph-feedback.d.ts +30 -0
  55. package/dist/runtime/graph-feedback.d.ts.map +1 -0
  56. package/dist/runtime/graph-feedback.js +82 -0
  57. package/dist/runtime/graph-feedback.js.map +1 -0
  58. package/dist/runtime/graph-gnn.d.ts +120 -0
  59. package/dist/runtime/graph-gnn.d.ts.map +1 -0
  60. package/dist/runtime/graph-gnn.js +524 -0
  61. package/dist/runtime/graph-gnn.js.map +1 -0
  62. package/dist/runtime/graph-learner.d.ts +70 -0
  63. package/dist/runtime/graph-learner.d.ts.map +1 -0
  64. package/dist/runtime/graph-learner.js +265 -0
  65. package/dist/runtime/graph-learner.js.map +1 -0
  66. package/dist/runtime/graph-meta-adversarial.d.ts +113 -0
  67. package/dist/runtime/graph-meta-adversarial.d.ts.map +1 -0
  68. package/dist/runtime/graph-meta-adversarial.js +366 -0
  69. package/dist/runtime/graph-meta-adversarial.js.map +1 -0
  70. package/dist/runtime/graph-meta.d.ts +115 -0
  71. package/dist/runtime/graph-meta.d.ts.map +1 -0
  72. package/dist/runtime/graph-meta.js +437 -0
  73. package/dist/runtime/graph-meta.js.map +1 -0
  74. package/dist/runtime/graph-self-evolve.d.ts +92 -0
  75. package/dist/runtime/graph-self-evolve.d.ts.map +1 -0
  76. package/dist/runtime/graph-self-evolve.js +422 -0
  77. package/dist/runtime/graph-self-evolve.js.map +1 -0
  78. package/dist/runtime/graph-synthesis.d.ts +47 -0
  79. package/dist/runtime/graph-synthesis.d.ts.map +1 -0
  80. package/dist/runtime/graph-synthesis.js +232 -0
  81. package/dist/runtime/graph-synthesis.js.map +1 -0
  82. package/dist/runtime/graph-trajectory.d.ts +88 -0
  83. package/dist/runtime/graph-trajectory.d.ts.map +1 -0
  84. package/dist/runtime/graph-trajectory.js +339 -0
  85. package/dist/runtime/graph-trajectory.js.map +1 -0
  86. package/dist/runtime/learning-engine.d.ts +12 -0
  87. package/dist/runtime/learning-engine.d.ts.map +1 -1
  88. package/dist/runtime/learning-engine.js +64 -0
  89. package/dist/runtime/learning-engine.js.map +1 -1
  90. package/package.json +2 -2
  91. package/skills/swarm-output-style/SKILL.md +71 -33
@@ -0,0 +1,232 @@
1
+ // ─── PatternSynthesizer ──────────────────────────────────────────
2
+ /**
3
+ * Analyzes structural diffs between successful and failed orchestration
4
+ * topologies, then generates novel pattern DAGs based on the insights.
5
+ */
6
+ export class PatternSynthesizer {
7
+ graph;
8
+ constructor(graph) {
9
+ this.graph = graph;
10
+ }
11
+ /**
12
+ * Analyze what structural features correlate with success/failure.
13
+ * Splits orchestrations by status, extracts topology features via BFS,
14
+ * then computes success rate deltas per feature.
15
+ */
16
+ analyzeTopologyDiffs(minSamples = 5) {
17
+ const orchNodes = this.graph.getNodesByType('orchestration');
18
+ if (orchNodes.length === 0)
19
+ return [];
20
+ const successful = orchNodes.filter((n) => n.properties.status === 'completed');
21
+ const failed = orchNodes.filter((n) => n.properties.status === 'failed');
22
+ const total = successful.length + failed.length;
23
+ if (total === 0)
24
+ return [];
25
+ // Extract features for each orchestration
26
+ const orchFeatures = new Map();
27
+ const isSuccess = new Set(successful.map((n) => n.id));
28
+ for (const node of [...successful, ...failed]) {
29
+ orchFeatures.set(node.id, this.extractTopologyFeatures(node.id));
30
+ }
31
+ // Collect all features across all orchestrations
32
+ const allFeatures = new Set();
33
+ for (const features of orchFeatures.values()) {
34
+ for (const key of features.keys())
35
+ allFeatures.add(key);
36
+ }
37
+ // Compute correlation for each feature
38
+ const insights = [];
39
+ for (const feature of allFeatures) {
40
+ let presentSuccess = 0;
41
+ let presentTotal = 0;
42
+ let absentSuccess = 0;
43
+ let absentTotal = 0;
44
+ for (const [orchId, features] of orchFeatures) {
45
+ const hasFeature = features.get(feature) ?? false;
46
+ const succeeded = isSuccess.has(orchId);
47
+ if (hasFeature) {
48
+ presentTotal++;
49
+ if (succeeded)
50
+ presentSuccess++;
51
+ }
52
+ else {
53
+ absentTotal++;
54
+ if (succeeded)
55
+ absentSuccess++;
56
+ }
57
+ }
58
+ const sampleSize = presentTotal + absentTotal;
59
+ if (sampleSize < minSamples)
60
+ continue;
61
+ // Avoid division by zero — if all have or lack the feature, no correlation measurable
62
+ if (presentTotal === 0 || absentTotal === 0)
63
+ continue;
64
+ const successRatePresent = presentSuccess / presentTotal;
65
+ const successRateAbsent = absentSuccess / absentTotal;
66
+ const correlation = successRatePresent - successRateAbsent;
67
+ insights.push({
68
+ feature,
69
+ successCorrelation: Math.max(-1, Math.min(1, correlation)),
70
+ sampleSize,
71
+ confidence: sampleSize > 20 ? 'high' : sampleSize >= 5 ? 'medium' : 'low',
72
+ });
73
+ }
74
+ // Sort by |correlation| descending
75
+ return insights.sort((a, b) => Math.abs(b.successCorrelation) - Math.abs(a.successCorrelation));
76
+ }
77
+ /**
78
+ * Generate a novel pattern from topology insights.
79
+ * Starts with a base structure (research → implement → review), then
80
+ * applies positive insights as additions and negative insights as removals.
81
+ */
82
+ synthesizePattern(taskDescription, filePatterns) {
83
+ const insights = this.analyzeTopologyDiffs();
84
+ if (insights.length === 0)
85
+ return null;
86
+ // Collect orchestration IDs that informed the insights
87
+ const orchNodes = this.graph.getNodesByType('orchestration');
88
+ const scoredOrchs = orchNodes.filter((n) => n.properties.status === 'completed' || n.properties.status === 'failed');
89
+ const basedOn = scoredOrchs.map((n) => n.id);
90
+ // Base structure: research → implement → review
91
+ const phases = [
92
+ { name: 'research', kind: 'research', agentTypes: ['researcher'], parallel: true },
93
+ { name: 'implement', kind: 'implement', agentTypes: ['implementer'], parallel: false, dependsOn: ['research'] },
94
+ { name: 'review', kind: 'review', agentTypes: ['reviewer'], parallel: true, dependsOn: ['implement'] },
95
+ ];
96
+ const reasoning = [`Base: research → implement → review.`];
97
+ // Apply positive insights as modifications
98
+ for (const insight of insights) {
99
+ if (insight.successCorrelation <= 0)
100
+ continue;
101
+ if (insight.feature === 'has_validate' || insight.feature === 'has_validate_after_research') {
102
+ // Insert validation phase between research and implement
103
+ if (!phases.find((p) => p.kind === 'validate')) {
104
+ phases.splice(1, 0, {
105
+ name: 'validate',
106
+ kind: 'validate',
107
+ agentTypes: ['reviewer'],
108
+ parallel: false,
109
+ dependsOn: ['research'],
110
+ });
111
+ // Update implement to depend on validate instead of research
112
+ const implPhase = phases.find((p) => p.kind === 'implement');
113
+ if (implPhase)
114
+ implPhase.dependsOn = ['validate'];
115
+ reasoning.push(`Added validation phase: "${insight.feature}" has +${insight.successCorrelation.toFixed(2)} correlation.`);
116
+ }
117
+ }
118
+ if (insight.feature === 'has_parallel_reviewers' || insight.feature === 'parallel_agents') {
119
+ const reviewPhase = phases.find((p) => p.kind === 'review');
120
+ if (reviewPhase && reviewPhase.agentTypes.length < 2) {
121
+ reviewPhase.agentTypes = ['reviewer', 'reviewer'];
122
+ reasoning.push(`Parallel reviewers: "${insight.feature}" has +${insight.successCorrelation.toFixed(2)} correlation.`);
123
+ }
124
+ }
125
+ if (insight.feature === 'has_test' || insight.feature === 'has_test_phase') {
126
+ if (!phases.find((p) => p.kind === 'test')) {
127
+ const reviewIdx = phases.findIndex((p) => p.kind === 'review');
128
+ const insertIdx = reviewIdx >= 0 ? reviewIdx : phases.length;
129
+ phases.splice(insertIdx, 0, {
130
+ name: 'test',
131
+ kind: 'test',
132
+ agentTypes: ['tester'],
133
+ parallel: false,
134
+ dependsOn: ['implement'],
135
+ });
136
+ // Update review to depend on test if it existed
137
+ const reviewPhase = phases.find((p) => p.kind === 'review');
138
+ if (reviewPhase)
139
+ reviewPhase.dependsOn = ['test'];
140
+ reasoning.push(`Added test phase: "${insight.feature}" has +${insight.successCorrelation.toFixed(2)} correlation.`);
141
+ }
142
+ }
143
+ }
144
+ // Apply negative insights as removals
145
+ for (const insight of insights) {
146
+ if (insight.successCorrelation >= 0)
147
+ continue;
148
+ if (insight.feature === 'has_challenge' || insight.feature === 'has_challenge_phase') {
149
+ // Don't add challenge phase (it's not in the base, so this is a no-op,
150
+ // but records the reasoning)
151
+ reasoning.push(`Skipped challenge phase: "${insight.feature}" has ${insight.successCorrelation.toFixed(2)} correlation.`);
152
+ }
153
+ }
154
+ // Compute confidence from top insights
155
+ const topInsights = insights.filter((i) => Math.abs(i.successCorrelation) > 0.1);
156
+ const avgCorrelation = topInsights.length > 0
157
+ ? topInsights.reduce((sum, i) => sum + Math.abs(i.successCorrelation), 0) / topInsights.length
158
+ : 0;
159
+ const confidence = Math.min(1, avgCorrelation);
160
+ if (confidence < 0.3)
161
+ return null;
162
+ // Generate name from task description
163
+ const nameSlug = taskDescription
164
+ .toLowerCase()
165
+ .replace(/[^a-z0-9]+/g, '-')
166
+ .slice(0, 30)
167
+ .replace(/-+$/, '');
168
+ return {
169
+ name: `synth-${nameSlug}`,
170
+ phases,
171
+ confidence,
172
+ reasoning: reasoning.join(' '),
173
+ basedOn,
174
+ };
175
+ }
176
+ /**
177
+ * Extract topology features from a single orchestration via BFS (depth 3).
178
+ * Returns a map of boolean features describing the orchestration's structure.
179
+ */
180
+ extractTopologyFeatures(orchestrationId) {
181
+ const features = new Map();
182
+ const subgraph = this.graph.bfs(orchestrationId, 3);
183
+ const phaseNodes = subgraph.nodes.filter((n) => n.type === 'phase');
184
+ const agentNodes = subgraph.nodes.filter((n) => n.type === 'agent');
185
+ const fileNodes = subgraph.nodes.filter((n) => n.type === 'file');
186
+ // Phase kinds present
187
+ const phaseKinds = new Set();
188
+ for (const phase of phaseNodes) {
189
+ const kind = phase.properties.kind || phase.label;
190
+ phaseKinds.add(kind);
191
+ }
192
+ features.set('has_research', phaseKinds.has('research'));
193
+ features.set('has_implement', phaseKinds.has('implement'));
194
+ features.set('has_review', phaseKinds.has('review'));
195
+ features.set('has_test', phaseKinds.has('test'));
196
+ features.set('has_challenge', phaseKinds.has('challenge'));
197
+ features.set('has_validate', phaseKinds.has('validate'));
198
+ // Phase count thresholds
199
+ features.set('phase_count_gt_2', phaseNodes.length > 2);
200
+ features.set('phase_count_gt_3', phaseNodes.length > 3);
201
+ // Agent count
202
+ features.set('has_multiple_agents', agentNodes.length > 1);
203
+ // Parallel agents (check if any phase has parallel=true or agentCount > 1)
204
+ const hasParallelAgents = phaseNodes.some((p) => p.properties.parallel === true || p.properties.agentCount > 1);
205
+ features.set('parallel_agents', hasParallelAgents);
206
+ // Parallel reviewers (review phase with multiple agents)
207
+ const reviewPhases = phaseNodes.filter((p) => {
208
+ const kind = p.properties.kind || p.label;
209
+ return kind === 'review';
210
+ });
211
+ const hasParallelReviewers = reviewPhases.some((p) => p.properties.parallel === true && (p.properties.agentCount || 0) > 1);
212
+ features.set('has_parallel_reviewers', hasParallelReviewers);
213
+ // Ordering features — check if review comes after implement via edges
214
+ const phaseLabels = phaseNodes.map((p) => p.properties.kind || p.label);
215
+ features.set('has_review_after_implement', phaseKinds.has('review') && phaseKinds.has('implement'));
216
+ features.set('has_test_phase', phaseKinds.has('test'));
217
+ features.set('has_challenge_phase', phaseKinds.has('challenge'));
218
+ // Validate after research
219
+ features.set('has_validate_after_research', phaseKinds.has('validate') && phaseKinds.has('research'));
220
+ // File features
221
+ features.set('touches_files', fileNodes.length > 0);
222
+ features.set('touches_many_files', fileNodes.length > 5);
223
+ // File directory clustering
224
+ if (fileNodes.length > 0) {
225
+ const dirs = new Set(fileNodes.map((f) => f.label.split('/').slice(0, -1).join('/') || 'root'));
226
+ features.set('single_directory', dirs.size === 1);
227
+ features.set('multi_directory', dirs.size > 1);
228
+ }
229
+ return features;
230
+ }
231
+ }
232
+ //# sourceMappingURL=graph-synthesis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-synthesis.js","sourceRoot":"","sources":["../../src/runtime/graph-synthesis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { ExecutionGraph } from './execution-graph.js';
2
+ import type { OrchestrationInstance, PhaseInstance } from '../core/types.js';
3
+ export interface TrajectoryFeatures {
4
+ completionRatio: number;
5
+ avgConfidence: number;
6
+ tokenRatio: number;
7
+ hasGoodStructure: boolean;
8
+ failedPhaseRatio: number;
9
+ }
10
+ export interface TrajectoryPrediction {
11
+ successProbability: number;
12
+ confidence: 'low' | 'medium' | 'high';
13
+ trajectory: 'on-track' | 'degrading' | 'recovering' | 'unknown';
14
+ factors: string[];
15
+ }
16
+ interface TrajectoryModel {
17
+ weights: number[];
18
+ bias: number;
19
+ learnRate: number;
20
+ positiveCount: number;
21
+ negativeCount: number;
22
+ historicalAvgTokens: number;
23
+ }
24
+ export interface PhaseForecast {
25
+ name: string;
26
+ successProb: number;
27
+ estimatedTokens: number;
28
+ estimatedDurationMs: number;
29
+ risks: string[];
30
+ }
31
+ export interface TrajectoryForecast {
32
+ phases: PhaseForecast[];
33
+ overallSuccessProb: number;
34
+ budgetForecast: number;
35
+ recommendations: string[];
36
+ confidence: 'low' | 'medium' | 'high';
37
+ }
38
+ /**
39
+ * Predicts success probability for an in-progress orchestration based on
40
+ * its current phase trajectory. Uses online logistic regression trained
41
+ * from historical orchestration outcomes stored in the execution graph.
42
+ */
43
+ export declare class TrajectoryPredictor {
44
+ private graph;
45
+ private model;
46
+ constructor(graph: ExecutionGraph);
47
+ static initModel(): TrajectoryModel;
48
+ /**
49
+ * Extract trajectory features from an in-progress orchestration at the
50
+ * completion of `currentPhase`.
51
+ */
52
+ extractFeatures(orchestration: OrchestrationInstance, currentPhase: PhaseInstance): TrajectoryFeatures;
53
+ /** Convert features to numeric vector. */
54
+ private featureVector;
55
+ /**
56
+ * Predict success probability from current trajectory features.
57
+ * Adds human-readable factor explanations.
58
+ */
59
+ predict(features: TrajectoryFeatures): TrajectoryPrediction;
60
+ /**
61
+ * Record the actual outcome of a completed orchestration, updating the model
62
+ * and historical token average via online SGD.
63
+ */
64
+ recordOutcome(orchestration: OrchestrationInstance, succeeded: boolean, currentPhase?: PhaseInstance): void;
65
+ /**
66
+ * Combine GNN topology features, causal estimates, and historical pattern
67
+ * stats into a unified forecast for remaining phases after each phase completes.
68
+ */
69
+ predictTrajectory(orchestrationId: string, completedPhases: Array<{
70
+ name: string;
71
+ status: string;
72
+ tokens: number;
73
+ durationMs: number;
74
+ confidence: string;
75
+ }>, remainingPhaseNames: string[], patternName?: string): TrajectoryForecast;
76
+ /** Estimate phase success probability from historical phase data. */
77
+ private estimatePhaseSuccess;
78
+ /** Estimate token usage for a phase kind based on historical averages. */
79
+ private estimatePhaseTokens;
80
+ /** Estimate duration for a phase kind based on historical averages. */
81
+ private estimatePhaseDuration;
82
+ /** Derive cost per token from historical phase data, or use default. */
83
+ private deriveCostPerToken;
84
+ private saveToGraph;
85
+ private loadFromGraph;
86
+ }
87
+ export {};
88
+ //# sourceMappingURL=graph-trajectory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-trajectory.d.ts","sourceRoot":"","sources":["../../src/runtime/graph-trajectory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAK7E,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,UAAU,EAAE,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACvC;AA4BD;;;;GAIG;AACH,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,KAAK,CAAkB;gBAEX,KAAK,EAAE,cAAc;IAKzC,MAAM,CAAC,SAAS,IAAI,eAAe;IAWnC;;;OAGG;IACH,eAAe,CAAC,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,aAAa,GAAG,kBAAkB;IAmCtG,0CAA0C;IAC1C,OAAO,CAAC,aAAa;IAUrB;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,oBAAoB;IA4C3D;;;OAGG;IACH,aAAa,CACX,aAAa,EAAE,qBAAqB,EACpC,SAAS,EAAE,OAAO,EAClB,YAAY,CAAC,EAAE,aAAa,GAC3B,IAAI;IAsCP;;;OAGG;IACH,iBAAiB,CACf,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,EAChH,mBAAmB,EAAE,MAAM,EAAE,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IAmErB,qEAAqE;IACrE,OAAO,CAAC,oBAAoB;IAiC5B,0EAA0E;IAC1E,OAAO,CAAC,mBAAmB;IAiB3B,uEAAuE;IACvE,OAAO,CAAC,qBAAqB;IAiB7B,wEAAwE;IACxE,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,aAAa;CActB"}