agentdb 1.0.1 → 1.0.2

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 (53) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/mcp/learning/core/experience-buffer.d.ts +61 -0
  3. package/dist/mcp/learning/core/experience-buffer.d.ts.map +1 -0
  4. package/dist/mcp/learning/core/experience-buffer.js +175 -0
  5. package/dist/mcp/learning/core/experience-buffer.js.map +1 -0
  6. package/dist/mcp/learning/core/experience-buffer.mjs +170 -0
  7. package/dist/mcp/learning/core/experience-recorder.d.ts +40 -0
  8. package/dist/mcp/learning/core/experience-recorder.d.ts.map +1 -0
  9. package/dist/mcp/learning/core/experience-recorder.js +200 -0
  10. package/dist/mcp/learning/core/experience-recorder.js.map +1 -0
  11. package/dist/mcp/learning/core/experience-recorder.mjs +195 -0
  12. package/dist/mcp/learning/core/learning-manager.d.ts +66 -0
  13. package/dist/mcp/learning/core/learning-manager.d.ts.map +1 -0
  14. package/dist/mcp/learning/core/learning-manager.js +252 -0
  15. package/dist/mcp/learning/core/learning-manager.js.map +1 -0
  16. package/dist/mcp/learning/core/learning-manager.mjs +247 -0
  17. package/dist/mcp/learning/core/policy-optimizer.d.ts +53 -0
  18. package/dist/mcp/learning/core/policy-optimizer.d.ts.map +1 -0
  19. package/dist/mcp/learning/core/policy-optimizer.js +251 -0
  20. package/dist/mcp/learning/core/policy-optimizer.js.map +1 -0
  21. package/dist/mcp/learning/core/policy-optimizer.mjs +246 -0
  22. package/dist/mcp/learning/core/reward-estimator.d.ts +44 -0
  23. package/dist/mcp/learning/core/reward-estimator.d.ts.map +1 -0
  24. package/dist/mcp/learning/core/reward-estimator.js +158 -0
  25. package/dist/mcp/learning/core/reward-estimator.js.map +1 -0
  26. package/dist/mcp/learning/core/reward-estimator.mjs +153 -0
  27. package/dist/mcp/learning/core/session-manager.d.ts +63 -0
  28. package/dist/mcp/learning/core/session-manager.d.ts.map +1 -0
  29. package/dist/mcp/learning/core/session-manager.js +202 -0
  30. package/dist/mcp/learning/core/session-manager.js.map +1 -0
  31. package/dist/mcp/learning/core/session-manager.mjs +197 -0
  32. package/dist/mcp/learning/index.d.ts +19 -0
  33. package/dist/mcp/learning/index.d.ts.map +1 -0
  34. package/dist/mcp/learning/index.js +30 -0
  35. package/dist/mcp/learning/index.js.map +1 -0
  36. package/dist/mcp/learning/index.mjs +19 -0
  37. package/dist/mcp/learning/tools/mcp-learning-tools.d.ts +369 -0
  38. package/dist/mcp/learning/tools/mcp-learning-tools.d.ts.map +1 -0
  39. package/dist/mcp/learning/tools/mcp-learning-tools.js +361 -0
  40. package/dist/mcp/learning/tools/mcp-learning-tools.js.map +1 -0
  41. package/dist/mcp/learning/tools/mcp-learning-tools.mjs +356 -0
  42. package/dist/mcp/learning/types/index.d.ts +138 -0
  43. package/dist/mcp/learning/types/index.d.ts.map +1 -0
  44. package/dist/mcp/learning/types/index.js +6 -0
  45. package/dist/mcp/learning/types/index.js.map +1 -0
  46. package/dist/mcp/learning/types/index.mjs +4 -0
  47. package/dist/mcp-server.d.ts +2 -0
  48. package/dist/mcp-server.d.ts.map +1 -1
  49. package/dist/mcp-server.js +72 -4
  50. package/dist/mcp-server.js.map +1 -1
  51. package/dist/mcp-server.mjs +72 -4
  52. package/examples/mcp-learning-example.ts +220 -0
  53. package/package.json +1 -1
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ /**
3
+ * ExperienceRecorder - Captures and stores learning experiences
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ExperienceRecorder = void 0;
7
+ const reward_estimator_js_1 = require("./reward-estimator.js");
8
+ class ExperienceRecorder {
9
+ constructor(db) {
10
+ this.actionCounter = 0;
11
+ this.db = db;
12
+ this.rewardEstimator = new reward_estimator_js_1.RewardEstimator();
13
+ }
14
+ /**
15
+ * Record a tool execution as a learning experience
16
+ */
17
+ async recordToolExecution(toolName, args, result, context, outcome) {
18
+ const state = await this.captureState(context);
19
+ const action = {
20
+ tool: toolName,
21
+ params: args,
22
+ timestamp: Date.now(),
23
+ };
24
+ const reward = await this.rewardEstimator.calculateReward(outcome, context);
25
+ const nextState = await this.captureState({
26
+ ...context,
27
+ isTerminal: outcome.success || !!outcome.error,
28
+ });
29
+ const experience = {
30
+ state,
31
+ action,
32
+ reward: reward.combined,
33
+ nextState,
34
+ done: context.isTerminal,
35
+ timestamp: Date.now(),
36
+ metadata: {
37
+ userId: context.userId,
38
+ sessionId: context.sessionId,
39
+ taskType: context.taskType,
40
+ actionId: `action_${this.actionCounter++}`,
41
+ rewardBreakdown: reward,
42
+ outcome: {
43
+ success: outcome.success,
44
+ executionTime: outcome.executionTime,
45
+ tokensUsed: outcome.tokensUsed,
46
+ },
47
+ },
48
+ };
49
+ // Store experience in vector database
50
+ await this.storeExperience(experience);
51
+ return experience;
52
+ }
53
+ /**
54
+ * Capture current state representation
55
+ */
56
+ async captureState(context) {
57
+ const state = {
58
+ taskDescription: context.metadata?.taskDescription || '',
59
+ availableTools: context.metadata?.availableTools || [],
60
+ previousActions: context.metadata?.previousActions || [],
61
+ constraints: context.metadata?.constraints,
62
+ context: {
63
+ sessionId: context.sessionId,
64
+ taskType: context.taskType,
65
+ timestamp: context.timestamp,
66
+ },
67
+ };
68
+ // Generate state embedding for similarity search
69
+ state.embedding = await this.generateStateEmbedding(state);
70
+ return state;
71
+ }
72
+ /**
73
+ * Generate vector embedding for state
74
+ */
75
+ async generateStateEmbedding(state) {
76
+ // Simple hash-based embedding (in production, use a proper embedding model)
77
+ const text = JSON.stringify({
78
+ task: state.taskDescription,
79
+ tools: state.availableTools,
80
+ type: state.context?.taskType,
81
+ });
82
+ // Create a simple hash-based embedding (768 dimensions)
83
+ const embedding = new Float32Array(768);
84
+ for (let i = 0; i < text.length; i++) {
85
+ const index = text.charCodeAt(i) % 768;
86
+ embedding[index] += 1;
87
+ }
88
+ // Normalize
89
+ const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
90
+ if (magnitude > 0) {
91
+ for (let i = 0; i < embedding.length; i++) {
92
+ embedding[i] /= magnitude;
93
+ }
94
+ }
95
+ return embedding;
96
+ }
97
+ /**
98
+ * Store experience in vector database
99
+ */
100
+ async storeExperience(experience) {
101
+ if (!experience.state.embedding) {
102
+ throw new Error('State embedding is required');
103
+ }
104
+ await this.db.insert({
105
+ embedding: Array.from(experience.state.embedding),
106
+ metadata: {
107
+ type: 'learning_experience',
108
+ sessionId: experience.metadata.sessionId,
109
+ userId: experience.metadata.userId,
110
+ taskType: experience.metadata.taskType,
111
+ actionId: experience.metadata.actionId,
112
+ action: experience.action,
113
+ reward: experience.reward,
114
+ done: experience.done,
115
+ timestamp: experience.timestamp,
116
+ state: {
117
+ taskDescription: experience.state.taskDescription,
118
+ availableTools: experience.state.availableTools,
119
+ previousActionsCount: experience.state.previousActions.length,
120
+ },
121
+ outcome: experience.metadata.outcome,
122
+ rewardBreakdown: experience.metadata.rewardBreakdown,
123
+ },
124
+ });
125
+ }
126
+ /**
127
+ * Retrieve similar experiences
128
+ */
129
+ async retrieveSimilarExperiences(state, k = 10) {
130
+ if (!state.embedding) {
131
+ state.embedding = await this.generateStateEmbedding(state);
132
+ }
133
+ const results = await this.db.search(Array.from(state.embedding), k);
134
+ return results.map((result) => ({
135
+ state: {
136
+ taskDescription: result.metadata.state.taskDescription,
137
+ availableTools: result.metadata.state.availableTools,
138
+ previousActions: [],
139
+ embedding: result.embedding,
140
+ },
141
+ action: result.metadata.action,
142
+ reward: result.metadata.reward,
143
+ nextState: {
144
+ taskDescription: '',
145
+ availableTools: [],
146
+ previousActions: [],
147
+ },
148
+ done: result.metadata.done,
149
+ timestamp: result.metadata.timestamp,
150
+ metadata: {
151
+ userId: result.metadata.userId,
152
+ sessionId: result.metadata.sessionId,
153
+ taskType: result.metadata.taskType,
154
+ actionId: result.metadata.actionId,
155
+ },
156
+ }));
157
+ }
158
+ /**
159
+ * Get experiences by session
160
+ */
161
+ async getSessionExperiences(sessionId) {
162
+ // Query by metadata filter
163
+ const allResults = await this.db.search(Array(768).fill(0), 1000);
164
+ // Filter by session ID
165
+ const sessionResults = allResults.filter((result) => result.metadata.sessionId === sessionId);
166
+ return sessionResults.map((result) => ({
167
+ state: {
168
+ taskDescription: result.metadata.state.taskDescription,
169
+ availableTools: result.metadata.state.availableTools,
170
+ previousActions: [],
171
+ embedding: result.embedding,
172
+ },
173
+ action: result.metadata.action,
174
+ reward: result.metadata.reward,
175
+ nextState: {
176
+ taskDescription: '',
177
+ availableTools: [],
178
+ previousActions: [],
179
+ },
180
+ done: result.metadata.done,
181
+ timestamp: result.metadata.timestamp,
182
+ metadata: {
183
+ userId: result.metadata.userId,
184
+ sessionId: result.metadata.sessionId,
185
+ taskType: result.metadata.taskType,
186
+ actionId: result.metadata.actionId,
187
+ },
188
+ }));
189
+ }
190
+ /**
191
+ * Update experience with feedback
192
+ */
193
+ async updateExperienceReward(actionId, feedbackReward) {
194
+ // In a real implementation, this would update the stored experience
195
+ // For now, we log the feedback
196
+ console.log(`Updated reward for ${actionId}: ${feedbackReward}`);
197
+ }
198
+ }
199
+ exports.ExperienceRecorder = ExperienceRecorder;
200
+ //# sourceMappingURL=experience-recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experience-recorder.js","sourceRoot":"","sources":["../../../../src/mcp/learning/core/experience-recorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * ExperienceRecorder - Captures and stores learning experiences
3
+ */
4
+ import { RewardEstimator } from './reward-estimator.mjs';
5
+ export class ExperienceRecorder {
6
+ constructor(db) {
7
+ this.actionCounter = 0;
8
+ this.db = db;
9
+ this.rewardEstimator = new RewardEstimator();
10
+ }
11
+ /**
12
+ * Record a tool execution as a learning experience
13
+ */
14
+ async recordToolExecution(toolName, args, result, context, outcome) {
15
+ const state = await this.captureState(context);
16
+ const action = {
17
+ tool: toolName,
18
+ params: args,
19
+ timestamp: Date.now(),
20
+ };
21
+ const reward = await this.rewardEstimator.calculateReward(outcome, context);
22
+ const nextState = await this.captureState({
23
+ ...context,
24
+ isTerminal: outcome.success || !!outcome.error,
25
+ });
26
+ const experience = {
27
+ state,
28
+ action,
29
+ reward: reward.combined,
30
+ nextState,
31
+ done: context.isTerminal,
32
+ timestamp: Date.now(),
33
+ metadata: {
34
+ userId: context.userId,
35
+ sessionId: context.sessionId,
36
+ taskType: context.taskType,
37
+ actionId: `action_${this.actionCounter++}`,
38
+ rewardBreakdown: reward,
39
+ outcome: {
40
+ success: outcome.success,
41
+ executionTime: outcome.executionTime,
42
+ tokensUsed: outcome.tokensUsed,
43
+ },
44
+ },
45
+ };
46
+ // Store experience in vector database
47
+ await this.storeExperience(experience);
48
+ return experience;
49
+ }
50
+ /**
51
+ * Capture current state representation
52
+ */
53
+ async captureState(context) {
54
+ const state = {
55
+ taskDescription: context.metadata?.taskDescription || '',
56
+ availableTools: context.metadata?.availableTools || [],
57
+ previousActions: context.metadata?.previousActions || [],
58
+ constraints: context.metadata?.constraints,
59
+ context: {
60
+ sessionId: context.sessionId,
61
+ taskType: context.taskType,
62
+ timestamp: context.timestamp,
63
+ },
64
+ };
65
+ // Generate state embedding for similarity search
66
+ state.embedding = await this.generateStateEmbedding(state);
67
+ return state;
68
+ }
69
+ /**
70
+ * Generate vector embedding for state
71
+ */
72
+ async generateStateEmbedding(state) {
73
+ // Simple hash-based embedding (in production, use a proper embedding model)
74
+ const text = JSON.stringify({
75
+ task: state.taskDescription,
76
+ tools: state.availableTools,
77
+ type: state.context?.taskType,
78
+ });
79
+ // Create a simple hash-based embedding (768 dimensions)
80
+ const embedding = new Float32Array(768);
81
+ for (let i = 0; i < text.length; i++) {
82
+ const index = text.charCodeAt(i) % 768;
83
+ embedding[index] += 1;
84
+ }
85
+ // Normalize
86
+ const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
87
+ if (magnitude > 0) {
88
+ for (let i = 0; i < embedding.length; i++) {
89
+ embedding[i] /= magnitude;
90
+ }
91
+ }
92
+ return embedding;
93
+ }
94
+ /**
95
+ * Store experience in vector database
96
+ */
97
+ async storeExperience(experience) {
98
+ if (!experience.state.embedding) {
99
+ throw new Error('State embedding is required');
100
+ }
101
+ await this.db.insert({
102
+ embedding: Array.from(experience.state.embedding),
103
+ metadata: {
104
+ type: 'learning_experience',
105
+ sessionId: experience.metadata.sessionId,
106
+ userId: experience.metadata.userId,
107
+ taskType: experience.metadata.taskType,
108
+ actionId: experience.metadata.actionId,
109
+ action: experience.action,
110
+ reward: experience.reward,
111
+ done: experience.done,
112
+ timestamp: experience.timestamp,
113
+ state: {
114
+ taskDescription: experience.state.taskDescription,
115
+ availableTools: experience.state.availableTools,
116
+ previousActionsCount: experience.state.previousActions.length,
117
+ },
118
+ outcome: experience.metadata.outcome,
119
+ rewardBreakdown: experience.metadata.rewardBreakdown,
120
+ },
121
+ });
122
+ }
123
+ /**
124
+ * Retrieve similar experiences
125
+ */
126
+ async retrieveSimilarExperiences(state, k = 10) {
127
+ if (!state.embedding) {
128
+ state.embedding = await this.generateStateEmbedding(state);
129
+ }
130
+ const results = await this.db.search(Array.from(state.embedding), k);
131
+ return results.map((result) => ({
132
+ state: {
133
+ taskDescription: result.metadata.state.taskDescription,
134
+ availableTools: result.metadata.state.availableTools,
135
+ previousActions: [],
136
+ embedding: result.embedding,
137
+ },
138
+ action: result.metadata.action,
139
+ reward: result.metadata.reward,
140
+ nextState: {
141
+ taskDescription: '',
142
+ availableTools: [],
143
+ previousActions: [],
144
+ },
145
+ done: result.metadata.done,
146
+ timestamp: result.metadata.timestamp,
147
+ metadata: {
148
+ userId: result.metadata.userId,
149
+ sessionId: result.metadata.sessionId,
150
+ taskType: result.metadata.taskType,
151
+ actionId: result.metadata.actionId,
152
+ },
153
+ }));
154
+ }
155
+ /**
156
+ * Get experiences by session
157
+ */
158
+ async getSessionExperiences(sessionId) {
159
+ // Query by metadata filter
160
+ const allResults = await this.db.search(Array(768).fill(0), 1000);
161
+ // Filter by session ID
162
+ const sessionResults = allResults.filter((result) => result.metadata.sessionId === sessionId);
163
+ return sessionResults.map((result) => ({
164
+ state: {
165
+ taskDescription: result.metadata.state.taskDescription,
166
+ availableTools: result.metadata.state.availableTools,
167
+ previousActions: [],
168
+ embedding: result.embedding,
169
+ },
170
+ action: result.metadata.action,
171
+ reward: result.metadata.reward,
172
+ nextState: {
173
+ taskDescription: '',
174
+ availableTools: [],
175
+ previousActions: [],
176
+ },
177
+ done: result.metadata.done,
178
+ timestamp: result.metadata.timestamp,
179
+ metadata: {
180
+ userId: result.metadata.userId,
181
+ sessionId: result.metadata.sessionId,
182
+ taskType: result.metadata.taskType,
183
+ actionId: result.metadata.actionId,
184
+ },
185
+ }));
186
+ }
187
+ /**
188
+ * Update experience with feedback
189
+ */
190
+ async updateExperienceReward(actionId, feedbackReward) {
191
+ // In a real implementation, this would update the stored experience
192
+ // For now, we log the feedback
193
+ console.log(`Updated reward for ${actionId}: ${feedbackReward}`);
194
+ }
195
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * LearningManager - Main orchestration layer for MCP learning integration
3
+ */
4
+ import type { SQLiteVectorDB } from '../../../core/vector-db.js';
5
+ import type { Experience, Outcome, ActionPrediction, TrainingOptions, TrainingMetrics, LearningSession, FeedbackInput, LearningMetrics, TransferMetrics, State } from '../types/index.js';
6
+ export declare class LearningManager {
7
+ private db;
8
+ private experienceRecorder;
9
+ private rewardEstimator;
10
+ private sessionManager;
11
+ private policyOptimizers;
12
+ constructor(db: SQLiteVectorDB);
13
+ /**
14
+ * Start a new learning session
15
+ */
16
+ startSession(userId: string, sessionType: 'coding' | 'research' | 'debugging' | 'general', plugin?: string, config?: Record<string, any>): Promise<LearningSession>;
17
+ /**
18
+ * End a learning session
19
+ */
20
+ endSession(sessionId: string): Promise<LearningSession>;
21
+ /**
22
+ * Record a tool execution as learning experience
23
+ */
24
+ recordExperience(sessionId: string, toolName: string, args: any, result: any, outcome: Outcome): Promise<Experience>;
25
+ /**
26
+ * Predict next best action
27
+ */
28
+ predictAction(sessionId: string, currentState: State, availableTools: string[]): Promise<ActionPrediction>;
29
+ /**
30
+ * Provide user feedback on action
31
+ */
32
+ provideFeedback(sessionId: string, actionId: string, feedback: FeedbackInput): Promise<void>;
33
+ /**
34
+ * Train policy on collected experiences
35
+ */
36
+ train(sessionId: string, options?: TrainingOptions): Promise<TrainingMetrics>;
37
+ /**
38
+ * Get learning metrics
39
+ */
40
+ getMetrics(sessionId: string, period?: 'session' | 'day' | 'week' | 'month' | 'all'): Promise<LearningMetrics>;
41
+ /**
42
+ * Transfer learning between tasks
43
+ */
44
+ transferLearning(sourceSessionId: string, targetSessionId: string, similarity?: number): Promise<TransferMetrics>;
45
+ /**
46
+ * Explain a prediction
47
+ */
48
+ explainPrediction(sessionId: string, state: State): Promise<{
49
+ reasoning: string;
50
+ similarExperiences: Experience[];
51
+ confidenceFactors: Record<string, number>;
52
+ }>;
53
+ /**
54
+ * Calculate consistency of actions in similar experiences
55
+ */
56
+ private calculateConsistency;
57
+ /**
58
+ * Get session info
59
+ */
60
+ getSessionInfo(sessionId: string): LearningSession | undefined;
61
+ /**
62
+ * Restore sessions from database
63
+ */
64
+ restoreSessions(userId?: string): Promise<LearningSession[]>;
65
+ }
66
+ //# sourceMappingURL=learning-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-manager.d.ts","sourceRoot":"","sources":["../../../../src/mcp/learning/core/learning-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EACV,UAAU,EAEV,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,KAAK,EACN,MAAM,mBAAmB,CAAC;AAM3B,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAA2C;gBAEvD,EAAE,EAAE,cAAc;IAO9B;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,EAC5D,MAAM,GAAE,MAAqB,EAC7B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC/B,OAAO,CAAC,eAAe,CAAC;IAmB3B;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAc7D;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,UAAU,CAAC;IAkCtB;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,EACnB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAS5B;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC;IAUhB;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC;IAS3B;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAiB,GAC/D,OAAO,CAAC,eAAe,CAAC;IAkF3B;;OAEG;IACG,gBAAgB,CACpB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,UAAU,GAAE,MAAY,GACvB,OAAO,CAAC,eAAe,CAAC;IA6C3B;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,GACX,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,EAAE,UAAU,EAAE,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3C,CAAC;IAuBF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9D;;OAEG;IACG,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAGnE"}