cmp-memory-system 1.0.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 (161) hide show
  1. package/README.md +541 -0
  2. package/dist/analytics/index.d.ts +5 -0
  3. package/dist/analytics/index.d.ts.map +1 -0
  4. package/dist/analytics/index.js +5 -0
  5. package/dist/analytics/index.js.map +1 -0
  6. package/dist/analytics/tracker.d.ts +107 -0
  7. package/dist/analytics/tracker.d.ts.map +1 -0
  8. package/dist/analytics/tracker.js +333 -0
  9. package/dist/analytics/tracker.js.map +1 -0
  10. package/dist/auto-improve/eslint-generator.d.ts +36 -0
  11. package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
  12. package/dist/auto-improve/eslint-generator.js +280 -0
  13. package/dist/auto-improve/eslint-generator.js.map +1 -0
  14. package/dist/auto-improve/index.d.ts +6 -0
  15. package/dist/auto-improve/index.d.ts.map +1 -0
  16. package/dist/auto-improve/index.js +6 -0
  17. package/dist/auto-improve/index.js.map +1 -0
  18. package/dist/auto-improve/pattern-detector.d.ts +92 -0
  19. package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
  20. package/dist/auto-improve/pattern-detector.js +231 -0
  21. package/dist/auto-improve/pattern-detector.js.map +1 -0
  22. package/dist/cli/index.d.ts +16 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +636 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/dashboard/index.d.ts +6 -0
  27. package/dist/dashboard/index.d.ts.map +1 -0
  28. package/dist/dashboard/index.js +6 -0
  29. package/dist/dashboard/index.js.map +1 -0
  30. package/dist/dashboard/server.d.ts +15 -0
  31. package/dist/dashboard/server.d.ts.map +1 -0
  32. package/dist/dashboard/server.js +373 -0
  33. package/dist/dashboard/server.js.map +1 -0
  34. package/dist/dashboard/ui.d.ts +9 -0
  35. package/dist/dashboard/ui.d.ts.map +1 -0
  36. package/dist/dashboard/ui.js +530 -0
  37. package/dist/dashboard/ui.js.map +1 -0
  38. package/dist/db/client.d.ts +66 -0
  39. package/dist/db/client.d.ts.map +1 -0
  40. package/dist/db/client.js +159 -0
  41. package/dist/db/client.js.map +1 -0
  42. package/dist/db/drizzle-client.d.ts +302 -0
  43. package/dist/db/drizzle-client.d.ts.map +1 -0
  44. package/dist/db/drizzle-client.js +404 -0
  45. package/dist/db/drizzle-client.js.map +1 -0
  46. package/dist/db/index.d.ts +5 -0
  47. package/dist/db/index.d.ts.map +1 -0
  48. package/dist/db/index.js +5 -0
  49. package/dist/db/index.js.map +1 -0
  50. package/dist/feedback/collector.d.ts +74 -0
  51. package/dist/feedback/collector.d.ts.map +1 -0
  52. package/dist/feedback/collector.js +231 -0
  53. package/dist/feedback/collector.js.map +1 -0
  54. package/dist/feedback/index.d.ts +5 -0
  55. package/dist/feedback/index.d.ts.map +1 -0
  56. package/dist/feedback/index.js +5 -0
  57. package/dist/feedback/index.js.map +1 -0
  58. package/dist/hooks/index.d.ts +8 -0
  59. package/dist/hooks/index.d.ts.map +1 -0
  60. package/dist/hooks/index.js +8 -0
  61. package/dist/hooks/index.js.map +1 -0
  62. package/dist/hooks/memory-checkpoint.d.ts +43 -0
  63. package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
  64. package/dist/hooks/memory-checkpoint.js +257 -0
  65. package/dist/hooks/memory-checkpoint.js.map +1 -0
  66. package/dist/hooks/post-tool-use.d.ts +61 -0
  67. package/dist/hooks/post-tool-use.d.ts.map +1 -0
  68. package/dist/hooks/post-tool-use.js +262 -0
  69. package/dist/hooks/post-tool-use.js.map +1 -0
  70. package/dist/hooks/pre-tool-use.d.ts +34 -0
  71. package/dist/hooks/pre-tool-use.d.ts.map +1 -0
  72. package/dist/hooks/pre-tool-use.js +358 -0
  73. package/dist/hooks/pre-tool-use.js.map +1 -0
  74. package/dist/hooks/session-start.d.ts +38 -0
  75. package/dist/hooks/session-start.d.ts.map +1 -0
  76. package/dist/hooks/session-start.js +274 -0
  77. package/dist/hooks/session-start.js.map +1 -0
  78. package/dist/index.d.ts +29 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +39 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/mcp/index.d.ts +5 -0
  83. package/dist/mcp/index.d.ts.map +1 -0
  84. package/dist/mcp/index.js +5 -0
  85. package/dist/mcp/index.js.map +1 -0
  86. package/dist/mcp/server.d.ts +42 -0
  87. package/dist/mcp/server.d.ts.map +1 -0
  88. package/dist/mcp/server.js +599 -0
  89. package/dist/mcp/server.js.map +1 -0
  90. package/dist/registry/embeddings.d.ts +38 -0
  91. package/dist/registry/embeddings.d.ts.map +1 -0
  92. package/dist/registry/embeddings.js +110 -0
  93. package/dist/registry/embeddings.js.map +1 -0
  94. package/dist/registry/generator.d.ts +41 -0
  95. package/dist/registry/generator.d.ts.map +1 -0
  96. package/dist/registry/generator.js +323 -0
  97. package/dist/registry/generator.js.map +1 -0
  98. package/dist/registry/index.d.ts +6 -0
  99. package/dist/registry/index.d.ts.map +1 -0
  100. package/dist/registry/index.js +6 -0
  101. package/dist/registry/index.js.map +1 -0
  102. package/dist/services/IdeaCollector.d.ts +103 -0
  103. package/dist/services/IdeaCollector.d.ts.map +1 -0
  104. package/dist/services/IdeaCollector.js +371 -0
  105. package/dist/services/IdeaCollector.js.map +1 -0
  106. package/dist/services/TaskTracker.d.ts +89 -0
  107. package/dist/services/TaskTracker.d.ts.map +1 -0
  108. package/dist/services/TaskTracker.js +324 -0
  109. package/dist/services/TaskTracker.js.map +1 -0
  110. package/dist/services/WorkPlanManager.d.ts +107 -0
  111. package/dist/services/WorkPlanManager.d.ts.map +1 -0
  112. package/dist/services/WorkPlanManager.js +440 -0
  113. package/dist/services/WorkPlanManager.js.map +1 -0
  114. package/dist/services/auto-inject.d.ts +77 -0
  115. package/dist/services/auto-inject.d.ts.map +1 -0
  116. package/dist/services/auto-inject.js +289 -0
  117. package/dist/services/auto-inject.js.map +1 -0
  118. package/dist/services/auto-tag.d.ts +61 -0
  119. package/dist/services/auto-tag.d.ts.map +1 -0
  120. package/dist/services/auto-tag.js +203 -0
  121. package/dist/services/auto-tag.js.map +1 -0
  122. package/dist/services/cross-project-sync.d.ts +76 -0
  123. package/dist/services/cross-project-sync.d.ts.map +1 -0
  124. package/dist/services/cross-project-sync.js +235 -0
  125. package/dist/services/cross-project-sync.js.map +1 -0
  126. package/dist/services/index.d.ts +15 -0
  127. package/dist/services/index.d.ts.map +1 -0
  128. package/dist/services/index.js +18 -0
  129. package/dist/services/index.js.map +1 -0
  130. package/dist/services/memory-consolidation.d.ts +77 -0
  131. package/dist/services/memory-consolidation.d.ts.map +1 -0
  132. package/dist/services/memory-consolidation.js +298 -0
  133. package/dist/services/memory-consolidation.js.map +1 -0
  134. package/dist/services/semantic-search.d.ts +93 -0
  135. package/dist/services/semantic-search.d.ts.map +1 -0
  136. package/dist/services/semantic-search.js +278 -0
  137. package/dist/services/semantic-search.js.map +1 -0
  138. package/dist/services/weekly-digest.d.ts +105 -0
  139. package/dist/services/weekly-digest.d.ts.map +1 -0
  140. package/dist/services/weekly-digest.js +292 -0
  141. package/dist/services/weekly-digest.js.map +1 -0
  142. package/dist/types/index.d.ts +274 -0
  143. package/dist/types/index.d.ts.map +1 -0
  144. package/dist/types/index.js +84 -0
  145. package/dist/types/index.js.map +1 -0
  146. package/dist/utils/config.d.ts +21 -0
  147. package/dist/utils/config.d.ts.map +1 -0
  148. package/dist/utils/config.js +89 -0
  149. package/dist/utils/config.js.map +1 -0
  150. package/dist/utils/index.d.ts +6 -0
  151. package/dist/utils/index.d.ts.map +1 -0
  152. package/dist/utils/index.js +6 -0
  153. package/dist/utils/index.js.map +1 -0
  154. package/dist/utils/paths.d.ts +28 -0
  155. package/dist/utils/paths.d.ts.map +1 -0
  156. package/dist/utils/paths.js +80 -0
  157. package/dist/utils/paths.js.map +1 -0
  158. package/package.json +89 -0
  159. package/templates/memory-config.json +82 -0
  160. package/templates/memory-config.schema.json +212 -0
  161. package/templates/settings.json +58 -0
@@ -0,0 +1,324 @@
1
+ /**
2
+ * TaskTracker Service
3
+ *
4
+ * Automatically tracks tasks in DEV_Items database.
5
+ * Creates task entries when work starts, updates progress, and records completion.
6
+ */
7
+ import { ulid } from 'ulid';
8
+ import { createDrizzleClient } from '../db/drizzle-client.js';
9
+ // =============================================================================
10
+ // TASK TRACKER SERVICE
11
+ // =============================================================================
12
+ export class TaskTracker {
13
+ client;
14
+ currentTaskId = null;
15
+ taskMetrics = {
16
+ toolCalls: 0,
17
+ filesRead: 0,
18
+ filesWritten: 0,
19
+ startTime: 0,
20
+ };
21
+ constructor(system) {
22
+ this.client = createDrizzleClient(system);
23
+ }
24
+ // ===========================================================================
25
+ // TASK LIFECYCLE
26
+ // ===========================================================================
27
+ /**
28
+ * Start tracking a new task
29
+ */
30
+ async startTask(options) {
31
+ const now = new Date().toISOString();
32
+ const content = {
33
+ title: options.title,
34
+ description: options.description,
35
+ status: 'in_progress',
36
+ startedAt: now,
37
+ filesModified: [],
38
+ branch: options.branch ?? await this.getCurrentBranch(),
39
+ context: {
40
+ userRequest: options.userRequest,
41
+ currentFile: options.currentFile,
42
+ todoItems: options.todoItems,
43
+ },
44
+ ideas: [],
45
+ improvements: [],
46
+ metrics: {
47
+ toolCalls: 0,
48
+ filesRead: 0,
49
+ filesWritten: 0,
50
+ },
51
+ };
52
+ const result = await this.client.create({
53
+ type: 'task',
54
+ status: 'in_progress',
55
+ priority: 'medium',
56
+ content: content,
57
+ tags: ['task', 'active'],
58
+ });
59
+ this.currentTaskId = result.id;
60
+ this.taskMetrics = {
61
+ toolCalls: 0,
62
+ filesRead: 0,
63
+ filesWritten: 0,
64
+ startTime: Date.now(),
65
+ };
66
+ return result.id;
67
+ }
68
+ /**
69
+ * Update current task with new information
70
+ */
71
+ async updateTask(options) {
72
+ if (!this.currentTaskId)
73
+ return;
74
+ const task = await this.client.get(this.currentTaskId);
75
+ if (!task)
76
+ return;
77
+ const content = task.content;
78
+ // Update metrics
79
+ if (options.toolCalls !== undefined) {
80
+ this.taskMetrics.toolCalls += options.toolCalls;
81
+ }
82
+ if (options.filesRead !== undefined) {
83
+ this.taskMetrics.filesRead += options.filesRead;
84
+ }
85
+ if (options.filesWritten !== undefined) {
86
+ this.taskMetrics.filesWritten += options.filesWritten;
87
+ }
88
+ // Update files modified
89
+ const filesModified = new Set(content.filesModified);
90
+ if (options.filesModified) {
91
+ options.filesModified.forEach(f => filesModified.add(f));
92
+ }
93
+ await this.client.update(this.currentTaskId, {
94
+ content: {
95
+ ...content,
96
+ filesModified: Array.from(filesModified),
97
+ metrics: {
98
+ toolCalls: this.taskMetrics.toolCalls,
99
+ filesRead: this.taskMetrics.filesRead,
100
+ filesWritten: this.taskMetrics.filesWritten,
101
+ durationMs: Date.now() - this.taskMetrics.startTime,
102
+ },
103
+ },
104
+ });
105
+ }
106
+ /**
107
+ * Complete the current task
108
+ */
109
+ async completeTask(options) {
110
+ if (!this.currentTaskId)
111
+ return;
112
+ const task = await this.client.get(this.currentTaskId);
113
+ if (!task)
114
+ return;
115
+ const content = task.content;
116
+ const now = new Date().toISOString();
117
+ // Process ideas
118
+ const ideas = [
119
+ ...content.ideas,
120
+ ...(options?.ideas ?? []).map(idea => ({
121
+ ...idea,
122
+ id: ulid(),
123
+ createdAt: now,
124
+ })),
125
+ ];
126
+ // Process improvements
127
+ const improvements = [
128
+ ...content.improvements,
129
+ ...(options?.improvements ?? []).map(imp => ({
130
+ ...imp,
131
+ id: ulid(),
132
+ createdAt: now,
133
+ })),
134
+ ];
135
+ await this.client.update(this.currentTaskId, {
136
+ status: options?.cancelled ? 'blocked' : 'done',
137
+ content: {
138
+ ...content,
139
+ status: options?.cancelled ? 'cancelled' : 'completed',
140
+ completedAt: now,
141
+ ideas,
142
+ improvements,
143
+ metrics: {
144
+ toolCalls: this.taskMetrics.toolCalls,
145
+ filesRead: this.taskMetrics.filesRead,
146
+ filesWritten: this.taskMetrics.filesWritten,
147
+ durationMs: Date.now() - this.taskMetrics.startTime,
148
+ },
149
+ },
150
+ tags: ['task', 'completed'],
151
+ });
152
+ // Reset state
153
+ this.currentTaskId = null;
154
+ this.taskMetrics = {
155
+ toolCalls: 0,
156
+ filesRead: 0,
157
+ filesWritten: 0,
158
+ startTime: 0,
159
+ };
160
+ }
161
+ /**
162
+ * Add an idea to the current task
163
+ */
164
+ async addIdea(idea) {
165
+ if (!this.currentTaskId)
166
+ return;
167
+ const task = await this.client.get(this.currentTaskId);
168
+ if (!task)
169
+ return;
170
+ const content = task.content;
171
+ const newIdea = {
172
+ ...idea,
173
+ id: ulid(),
174
+ createdAt: new Date().toISOString(),
175
+ };
176
+ await this.client.update(this.currentTaskId, {
177
+ content: {
178
+ ...content,
179
+ ideas: [...content.ideas, newIdea],
180
+ },
181
+ });
182
+ }
183
+ /**
184
+ * Add an improvement to the current task
185
+ */
186
+ async addImprovement(improvement) {
187
+ if (!this.currentTaskId)
188
+ return;
189
+ const task = await this.client.get(this.currentTaskId);
190
+ if (!task)
191
+ return;
192
+ const content = task.content;
193
+ const newImprovement = {
194
+ ...improvement,
195
+ id: ulid(),
196
+ createdAt: new Date().toISOString(),
197
+ };
198
+ await this.client.update(this.currentTaskId, {
199
+ content: {
200
+ ...content,
201
+ improvements: [...content.improvements, newImprovement],
202
+ },
203
+ });
204
+ }
205
+ // ===========================================================================
206
+ // QUERIES
207
+ // ===========================================================================
208
+ /**
209
+ * Get current active task
210
+ */
211
+ async getCurrentTask() {
212
+ if (!this.currentTaskId) {
213
+ // Try to find any active task
214
+ const tasks = await this.client.list({
215
+ type: 'task',
216
+ status: 'in_progress',
217
+ limit: 1,
218
+ });
219
+ if (tasks.length > 0) {
220
+ this.currentTaskId = tasks[0].id;
221
+ return tasks[0];
222
+ }
223
+ return null;
224
+ }
225
+ return this.client.get(this.currentTaskId);
226
+ }
227
+ /**
228
+ * Get recent tasks
229
+ */
230
+ async getRecentTasks(limit = 10) {
231
+ return this.client.list({
232
+ type: 'task',
233
+ limit,
234
+ });
235
+ }
236
+ /**
237
+ * Get all ideas from completed tasks
238
+ */
239
+ async getAllIdeas(limit = 50) {
240
+ const tasks = await this.client.list({
241
+ type: 'task',
242
+ status: 'done',
243
+ limit,
244
+ });
245
+ const ideas = [];
246
+ for (const task of tasks) {
247
+ const content = task.content;
248
+ if (content?.ideas) {
249
+ ideas.push(...content.ideas);
250
+ }
251
+ }
252
+ return ideas.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
253
+ }
254
+ /**
255
+ * Get all improvements from completed tasks
256
+ */
257
+ async getAllImprovements(limit = 50) {
258
+ const tasks = await this.client.list({
259
+ type: 'task',
260
+ status: 'done',
261
+ limit,
262
+ });
263
+ const improvements = [];
264
+ for (const task of tasks) {
265
+ const content = task.content;
266
+ if (content?.improvements) {
267
+ improvements.push(...content.improvements);
268
+ }
269
+ }
270
+ return improvements.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
271
+ }
272
+ // ===========================================================================
273
+ // HELPERS
274
+ // ===========================================================================
275
+ /**
276
+ * Get current git branch
277
+ */
278
+ async getCurrentBranch() {
279
+ try {
280
+ const { exec } = await import('child_process');
281
+ const { promisify } = await import('util');
282
+ const execAsync = promisify(exec);
283
+ const { stdout } = await execAsync('git rev-parse --abbrev-ref HEAD', {
284
+ cwd: process.cwd(),
285
+ });
286
+ return stdout.trim();
287
+ }
288
+ catch {
289
+ return undefined;
290
+ }
291
+ }
292
+ /**
293
+ * Check if there's an active task
294
+ */
295
+ hasActiveTask() {
296
+ return this.currentTaskId !== null;
297
+ }
298
+ /**
299
+ * Get current task ID
300
+ */
301
+ getCurrentTaskId() {
302
+ return this.currentTaskId;
303
+ }
304
+ }
305
+ // =============================================================================
306
+ // FACTORY
307
+ // =============================================================================
308
+ let trackerInstance = null;
309
+ /**
310
+ * Get or create TaskTracker instance
311
+ */
312
+ export function getTaskTracker(system) {
313
+ if (!trackerInstance) {
314
+ trackerInstance = new TaskTracker(system);
315
+ }
316
+ return trackerInstance;
317
+ }
318
+ /**
319
+ * Create fresh TaskTracker instance
320
+ */
321
+ export function createTaskTracker(system) {
322
+ return new TaskTracker(system);
323
+ }
324
+ //# sourceMappingURL=TaskTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskTracker.js","sourceRoot":"","sources":["../../src/services/TaskTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * WorkPlanManager Service
3
+ *
4
+ * Manages the current work plan across sessions.
5
+ * Persists the plan to database so it survives session restarts.
6
+ */
7
+ import type { DevSystem, DevItem, WorkPlanContent } from '../types/index.js';
8
+ export interface CreatePlanOptions {
9
+ title: string;
10
+ description?: string;
11
+ tasks: PlanTask[];
12
+ }
13
+ export interface PlanTask {
14
+ id?: string;
15
+ title: string;
16
+ description?: string;
17
+ status?: 'pending' | 'in_progress' | 'completed' | 'blocked' | 'cancelled';
18
+ }
19
+ export interface PlanSummary {
20
+ id: string;
21
+ title: string;
22
+ status: WorkPlanContent['status'];
23
+ progress: number;
24
+ totalTasks: number;
25
+ completedTasks: number;
26
+ currentTask?: PlanTask;
27
+ createdAt: string;
28
+ }
29
+ export declare class WorkPlanManager {
30
+ private client;
31
+ private system;
32
+ private currentPlanId;
33
+ constructor(system: DevSystem);
34
+ /**
35
+ * Create a new work plan
36
+ */
37
+ createPlan(options: CreatePlanOptions): Promise<string>;
38
+ /**
39
+ * Get the current active plan
40
+ */
41
+ getActivePlan(): Promise<{
42
+ plan: DevItem;
43
+ content: WorkPlanContent;
44
+ } | null>;
45
+ /**
46
+ * Get plan summary for display
47
+ */
48
+ getPlanSummary(): Promise<PlanSummary | null>;
49
+ /**
50
+ * Update plan progress
51
+ */
52
+ updateProgress(): Promise<void>;
53
+ /**
54
+ * Mark current task as complete and move to next
55
+ */
56
+ completeCurrentTask(): Promise<void>;
57
+ /**
58
+ * Mark current task as in progress
59
+ */
60
+ startCurrentTask(): Promise<void>;
61
+ /**
62
+ * Complete the entire plan
63
+ */
64
+ completePlan(): Promise<void>;
65
+ /**
66
+ * Pause the current plan
67
+ */
68
+ pausePlan(): Promise<void>;
69
+ /**
70
+ * Resume a paused plan
71
+ */
72
+ resumePlan(planId: string): Promise<void>;
73
+ /**
74
+ * Add a task to the current plan
75
+ */
76
+ addTask(task: PlanTask): Promise<string>;
77
+ /**
78
+ * Get all tasks for a plan
79
+ */
80
+ private getTasksForPlan;
81
+ /**
82
+ * Get tasks with details for display
83
+ */
84
+ getPlanTasks(): Promise<Array<{
85
+ id: string;
86
+ title: string;
87
+ status: string;
88
+ isCurrent: boolean;
89
+ }>>;
90
+ /**
91
+ * Get context string for session start hook
92
+ */
93
+ getSessionContext(): Promise<string>;
94
+ /**
95
+ * Get plan history
96
+ */
97
+ getPlanHistory(limit?: number): Promise<PlanSummary[]>;
98
+ }
99
+ /**
100
+ * Get or create WorkPlanManager instance
101
+ */
102
+ export declare function getWorkPlanManager(system: DevSystem): WorkPlanManager;
103
+ /**
104
+ * Create fresh WorkPlanManager instance
105
+ */
106
+ export declare function createWorkPlanManager(system: DevSystem): WorkPlanManager;
107
+ //# sourceMappingURL=WorkPlanManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkPlanManager.d.ts","sourceRoot":"","sources":["../../src/services/WorkPlanManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,eAAe,EAEhB,MAAM,mBAAmB,CAAA;AAM1B,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC3E;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,QAAQ,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,EAAE,SAAS;IAS7B;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAuD7D;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,IAAI,CAAC;IA8BlF;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAuCnD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDrC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B1C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBvC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBnC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBhC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/C;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IA6C9C;;OAEG;YACW,eAAe;IAW7B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAClC,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IAsBH;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgC1C;;OAEG;IACG,cAAc,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAsBzD;AAQD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,eAAe,CAKrE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,eAAe,CAExE"}