statecli-mcp-server 0.1.2 → 0.3.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 (45) hide show
  1. package/README.md +334 -153
  2. package/dist/cross-file-impact.d.ts +85 -0
  3. package/dist/cross-file-impact.d.ts.map +1 -0
  4. package/dist/cross-file-impact.js +338 -0
  5. package/dist/cross-file-impact.js.map +1 -0
  6. package/dist/dependency-tracker.d.ts +78 -0
  7. package/dist/dependency-tracker.d.ts.map +1 -0
  8. package/dist/dependency-tracker.js +334 -0
  9. package/dist/dependency-tracker.js.map +1 -0
  10. package/dist/enhanced-mcp-server.d.ts +50 -0
  11. package/dist/enhanced-mcp-server.d.ts.map +1 -0
  12. package/dist/enhanced-mcp-server.js +664 -0
  13. package/dist/enhanced-mcp-server.js.map +1 -0
  14. package/dist/error-recovery.d.ts +66 -0
  15. package/dist/error-recovery.d.ts.map +1 -0
  16. package/dist/error-recovery.js +210 -0
  17. package/dist/error-recovery.js.map +1 -0
  18. package/dist/file-tracker.d.ts +81 -0
  19. package/dist/file-tracker.d.ts.map +1 -0
  20. package/dist/file-tracker.js +252 -0
  21. package/dist/file-tracker.js.map +1 -0
  22. package/dist/git-integration.d.ts +95 -0
  23. package/dist/git-integration.d.ts.map +1 -0
  24. package/dist/git-integration.js +219 -0
  25. package/dist/git-integration.js.map +1 -0
  26. package/dist/index-enhanced.d.ts +12 -0
  27. package/dist/index-enhanced.d.ts.map +1 -0
  28. package/dist/index-enhanced.js +27 -0
  29. package/dist/index-enhanced.js.map +1 -0
  30. package/dist/rollback-preview.d.ts +77 -0
  31. package/dist/rollback-preview.d.ts.map +1 -0
  32. package/dist/rollback-preview.js +244 -0
  33. package/dist/rollback-preview.js.map +1 -0
  34. package/dist/session-memory.d.ts +85 -0
  35. package/dist/session-memory.d.ts.map +1 -0
  36. package/dist/session-memory.js +325 -0
  37. package/dist/session-memory.js.map +1 -0
  38. package/dist/test-awareness.d.ts +85 -0
  39. package/dist/test-awareness.d.ts.map +1 -0
  40. package/dist/test-awareness.js +329 -0
  41. package/dist/test-awareness.js.map +1 -0
  42. package/dist/types.d.ts +11 -8
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js.map +1 -1
  45. package/package.json +3 -2
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Rollback Preview - Preview state before undoing
3
+ *
4
+ * Shows what the state would look like after a rollback before executing it.
5
+ */
6
+ import { StateCLI } from './statecli';
7
+ export interface RollbackStep {
8
+ step: number;
9
+ timestamp: string;
10
+ entity: string;
11
+ action: string;
12
+ stateBefore: Record<string, unknown> | null;
13
+ stateAfter: Record<string, unknown>;
14
+ willBeUndone: boolean;
15
+ }
16
+ export interface RollbackPreviewResult {
17
+ entity: string;
18
+ currentState: Record<string, unknown> | null;
19
+ targetState: Record<string, unknown> | null;
20
+ stepsToUndo: number;
21
+ changes: RollbackStep[];
22
+ diff: StateDiff[];
23
+ warnings: string[];
24
+ estimatedImpact: 'minimal' | 'moderate' | 'significant';
25
+ }
26
+ export interface StateDiff {
27
+ path: string;
28
+ currentValue: unknown;
29
+ targetValue: unknown;
30
+ action: 'add' | 'remove' | 'modify';
31
+ }
32
+ export interface CheckpointPreview {
33
+ checkpointName: string;
34
+ checkpointTimestamp: string;
35
+ currentState: Record<string, unknown> | null;
36
+ checkpointState: Record<string, unknown>;
37
+ changesSinceCheckpoint: number;
38
+ diff: StateDiff[];
39
+ }
40
+ export declare class RollbackPreview {
41
+ private statecli;
42
+ constructor(statecli: StateCLI);
43
+ /**
44
+ * Preview what will happen if we undo N steps
45
+ */
46
+ previewUndo(entity: string, steps?: number): RollbackPreviewResult;
47
+ /**
48
+ * Preview restoring to a specific checkpoint
49
+ */
50
+ previewCheckpointRestore(entity: string, checkpointName: string): CheckpointPreview | null;
51
+ /**
52
+ * Compare two states and show differences
53
+ */
54
+ compareStates(state1: Record<string, unknown> | null, state2: Record<string, unknown> | null, label1?: string, label2?: string): {
55
+ diff: StateDiff[];
56
+ summary: string;
57
+ };
58
+ /**
59
+ * Get a visual diff as a string
60
+ */
61
+ formatDiff(diff: StateDiff[]): string;
62
+ /**
63
+ * Simulate undo without actually doing it
64
+ */
65
+ simulateUndo(entity: string, steps?: number): {
66
+ preview: RollbackPreviewResult;
67
+ wouldSucceed: boolean;
68
+ resultingState: Record<string, unknown> | null;
69
+ sideEffects: string[];
70
+ };
71
+ private calculateDiff;
72
+ private flattenObject;
73
+ private describeChange;
74
+ private generateWarnings;
75
+ private estimateImpact;
76
+ }
77
+ //# sourceMappingURL=rollback-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback-preview.d.ts","sourceRoot":"","sources":["../src/rollback-preview.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;CACzD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAI9B;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,qBAAqB;IA8DrE;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IA2B1F;;OAEG;IACH,aAAa,CACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACtC,MAAM,GAAE,MAAkB,EAC1B,MAAM,GAAE,MAAkB,GACzB;QACD,IAAI,EAAE,SAAS,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB;IAYD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM;IAsBrC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG;QAC/C,OAAO,EAAE,qBAAqB,CAAC;QAC/B,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QAC/C,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;IAwBD,OAAO,CAAC,aAAa;IAgDrB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,cAAc;CAOvB"}
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ /**
3
+ * Rollback Preview - Preview state before undoing
4
+ *
5
+ * Shows what the state would look like after a rollback before executing it.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RollbackPreview = void 0;
9
+ class RollbackPreview {
10
+ statecli;
11
+ constructor(statecli) {
12
+ this.statecli = statecli;
13
+ }
14
+ /**
15
+ * Preview what will happen if we undo N steps
16
+ */
17
+ previewUndo(entity, steps = 1) {
18
+ const replay = this.statecli.replay(entity);
19
+ const currentState = this.statecli.getCurrentState(entity);
20
+ const changes = replay.changes;
21
+ if (changes.length === 0) {
22
+ return {
23
+ entity,
24
+ currentState,
25
+ targetState: null,
26
+ stepsToUndo: 0,
27
+ changes: [],
28
+ diff: [],
29
+ warnings: ['No changes to undo for this entity.'],
30
+ estimatedImpact: 'minimal'
31
+ };
32
+ }
33
+ const actualSteps = Math.min(steps, changes.length);
34
+ const targetIndex = changes.length - actualSteps - 1;
35
+ const targetState = targetIndex >= 0 ? changes[targetIndex].after : null;
36
+ // Build rollback steps
37
+ const rollbackSteps = changes.map((change, index) => ({
38
+ step: change.step,
39
+ timestamp: change.timestamp,
40
+ entity: change.entity || entity,
41
+ action: this.describeChange(change.before, change.after),
42
+ stateBefore: change.before,
43
+ stateAfter: change.after,
44
+ willBeUndone: index >= changes.length - actualSteps
45
+ }));
46
+ // Calculate diff
47
+ const diff = this.calculateDiff(currentState, targetState);
48
+ // Generate warnings
49
+ const warnings = this.generateWarnings(currentState, targetState, actualSteps, changes);
50
+ // Estimate impact
51
+ const estimatedImpact = this.estimateImpact(diff, actualSteps);
52
+ // Track preview
53
+ this.statecli.track('rollback', 'preview', {
54
+ entity,
55
+ stepsToUndo: actualSteps,
56
+ diffCount: diff.length,
57
+ estimatedImpact
58
+ }, 'rollback-preview');
59
+ return {
60
+ entity,
61
+ currentState,
62
+ targetState,
63
+ stepsToUndo: actualSteps,
64
+ changes: rollbackSteps,
65
+ diff,
66
+ warnings,
67
+ estimatedImpact
68
+ };
69
+ }
70
+ /**
71
+ * Preview restoring to a specific checkpoint
72
+ */
73
+ previewCheckpointRestore(entity, checkpointName) {
74
+ const checkpoint = this.statecli.getCheckpoint?.(entity, checkpointName) || null;
75
+ if (!checkpoint) {
76
+ return null;
77
+ }
78
+ const currentState = this.statecli.getCurrentState(entity);
79
+ const replay = this.statecli.replay(entity);
80
+ // Count changes since checkpoint
81
+ const changesSince = replay.changes.filter(c => new Date(c.timestamp) > new Date(checkpoint.timestamp)).length;
82
+ const diff = this.calculateDiff(currentState, checkpoint.state);
83
+ return {
84
+ checkpointName: checkpoint.name,
85
+ checkpointTimestamp: checkpoint.timestamp,
86
+ currentState,
87
+ checkpointState: checkpoint.state,
88
+ changesSinceCheckpoint: changesSince,
89
+ diff
90
+ };
91
+ }
92
+ /**
93
+ * Compare two states and show differences
94
+ */
95
+ compareStates(state1, state2, label1 = 'State 1', label2 = 'State 2') {
96
+ const diff = this.calculateDiff(state1, state2);
97
+ const adds = diff.filter(d => d.action === 'add').length;
98
+ const removes = diff.filter(d => d.action === 'remove').length;
99
+ const mods = diff.filter(d => d.action === 'modify').length;
100
+ const summary = `Comparing ${label1} to ${label2}: ${adds} additions, ${removes} removals, ${mods} modifications`;
101
+ return { diff, summary };
102
+ }
103
+ /**
104
+ * Get a visual diff as a string
105
+ */
106
+ formatDiff(diff) {
107
+ const lines = [];
108
+ for (const d of diff) {
109
+ switch (d.action) {
110
+ case 'add':
111
+ lines.push(`+ ${d.path}: ${JSON.stringify(d.targetValue)}`);
112
+ break;
113
+ case 'remove':
114
+ lines.push(`- ${d.path}: ${JSON.stringify(d.currentValue)}`);
115
+ break;
116
+ case 'modify':
117
+ lines.push(`~ ${d.path}:`);
118
+ lines.push(` - ${JSON.stringify(d.currentValue)}`);
119
+ lines.push(` + ${JSON.stringify(d.targetValue)}`);
120
+ break;
121
+ }
122
+ }
123
+ return lines.join('\n');
124
+ }
125
+ /**
126
+ * Simulate undo without actually doing it
127
+ */
128
+ simulateUndo(entity, steps = 1) {
129
+ const preview = this.previewUndo(entity, steps);
130
+ const wouldSucceed = preview.warnings.length === 0 ||
131
+ !preview.warnings.some((w) => w.includes('Cannot') || w.includes('Error'));
132
+ const sideEffects = [];
133
+ if (preview.stepsToUndo > 5) {
134
+ sideEffects.push('Large rollback - may take longer to process');
135
+ }
136
+ if (preview.diff.some(d => d.path.includes('id') || d.path.includes('Id'))) {
137
+ sideEffects.push('IDs will change - may affect relationships');
138
+ }
139
+ return {
140
+ preview,
141
+ wouldSucceed,
142
+ resultingState: preview.targetState,
143
+ sideEffects
144
+ };
145
+ }
146
+ calculateDiff(current, target) {
147
+ const diff = [];
148
+ if (!current && !target)
149
+ return diff;
150
+ if (!current && target) {
151
+ // All target properties are additions
152
+ this.flattenObject(target, '').forEach(([path, value]) => {
153
+ diff.push({ path, currentValue: undefined, targetValue: value, action: 'add' });
154
+ });
155
+ return diff;
156
+ }
157
+ if (current && !target) {
158
+ // All current properties are removals
159
+ this.flattenObject(current, '').forEach(([path, value]) => {
160
+ diff.push({ path, currentValue: value, targetValue: undefined, action: 'remove' });
161
+ });
162
+ return diff;
163
+ }
164
+ // Both exist - compare
165
+ const currentFlat = new Map(this.flattenObject(current, ''));
166
+ const targetFlat = new Map(this.flattenObject(target, ''));
167
+ // Check for modifications and removals
168
+ for (const [path, currentValue] of currentFlat) {
169
+ if (targetFlat.has(path)) {
170
+ const targetValue = targetFlat.get(path);
171
+ if (JSON.stringify(currentValue) !== JSON.stringify(targetValue)) {
172
+ diff.push({ path, currentValue, targetValue, action: 'modify' });
173
+ }
174
+ }
175
+ else {
176
+ diff.push({ path, currentValue, targetValue: undefined, action: 'remove' });
177
+ }
178
+ }
179
+ // Check for additions
180
+ for (const [path, targetValue] of targetFlat) {
181
+ if (!currentFlat.has(path)) {
182
+ diff.push({ path, currentValue: undefined, targetValue, action: 'add' });
183
+ }
184
+ }
185
+ return diff;
186
+ }
187
+ flattenObject(obj, prefix) {
188
+ const result = [];
189
+ for (const [key, value] of Object.entries(obj)) {
190
+ const path = prefix ? `${prefix}.${key}` : key;
191
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
192
+ result.push(...this.flattenObject(value, path));
193
+ }
194
+ else {
195
+ result.push([path, value]);
196
+ }
197
+ }
198
+ return result;
199
+ }
200
+ describeChange(before, after) {
201
+ if (!before)
202
+ return 'Created';
203
+ const beforeKeys = Object.keys(before);
204
+ const afterKeys = Object.keys(after);
205
+ const added = afterKeys.filter(k => !beforeKeys.includes(k));
206
+ const removed = beforeKeys.filter(k => !afterKeys.includes(k));
207
+ const modified = afterKeys.filter(k => beforeKeys.includes(k) && JSON.stringify(before[k]) !== JSON.stringify(after[k]));
208
+ const parts = [];
209
+ if (added.length)
210
+ parts.push(`Added: ${added.join(', ')}`);
211
+ if (removed.length)
212
+ parts.push(`Removed: ${removed.join(', ')}`);
213
+ if (modified.length)
214
+ parts.push(`Modified: ${modified.join(', ')}`);
215
+ return parts.join('; ') || 'No visible changes';
216
+ }
217
+ generateWarnings(currentState, targetState, steps, changes) {
218
+ const warnings = [];
219
+ if (steps > 10) {
220
+ warnings.push(`Rolling back ${steps} steps is a large change. Consider restoring to a checkpoint instead.`);
221
+ }
222
+ if (!targetState) {
223
+ warnings.push('Target state is null - entity will be effectively reset.');
224
+ }
225
+ // Check for checkpoint in undo range
226
+ const checkpointsInRange = changes
227
+ .slice(-steps)
228
+ .filter(c => c.checkpointName);
229
+ if (checkpointsInRange.length > 0) {
230
+ warnings.push(`This will undo past checkpoint(s): ${checkpointsInRange.map(c => c.checkpointName).join(', ')}`);
231
+ }
232
+ return warnings;
233
+ }
234
+ estimateImpact(diff, steps) {
235
+ const changeCount = diff.length;
236
+ if (changeCount === 0 || steps === 1)
237
+ return 'minimal';
238
+ if (changeCount <= 5 && steps <= 3)
239
+ return 'moderate';
240
+ return 'significant';
241
+ }
242
+ }
243
+ exports.RollbackPreview = RollbackPreview;
244
+ //# sourceMappingURL=rollback-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback-preview.js","sourceRoot":"","sources":["../src/rollback-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Session Memory - Cross-session persistence and memory
3
+ *
4
+ * Remembers what happened across sessions and provides memory queries
5
+ */
6
+ import { StateCLI } from './statecli';
7
+ import { StateChange } from './types';
8
+ export interface SessionInfo {
9
+ id: string;
10
+ startTime: string;
11
+ endTime?: string;
12
+ summary: string;
13
+ changesCount: number;
14
+ entities: string[];
15
+ }
16
+ export interface MemoryQuery {
17
+ entity?: string;
18
+ entityPattern?: string;
19
+ timeRange?: {
20
+ start: string;
21
+ end: string;
22
+ };
23
+ actor?: string;
24
+ keyword?: string;
25
+ }
26
+ export interface MemoryResult {
27
+ query: MemoryQuery;
28
+ sessions: SessionInfo[];
29
+ changes: StateChange[];
30
+ summary: string;
31
+ }
32
+ export declare class SessionMemory {
33
+ private statecli;
34
+ private sessionId;
35
+ private sessionStartTime;
36
+ private memoryDir;
37
+ constructor(statecli: StateCLI, memoryDir?: string);
38
+ /**
39
+ * Get current session ID
40
+ */
41
+ getSessionId(): string;
42
+ /**
43
+ * Query memory across sessions
44
+ */
45
+ queryMemory(query: MemoryQuery): MemoryResult;
46
+ /**
47
+ * Ask a natural language question about past actions
48
+ */
49
+ ask(question: string): MemoryResult;
50
+ /**
51
+ * Get all recorded sessions
52
+ */
53
+ getSessions(): SessionInfo[];
54
+ /**
55
+ * Get session data by ID
56
+ */
57
+ getSession(sessionId: string): {
58
+ info: SessionInfo;
59
+ changes: StateChange[];
60
+ } | null;
61
+ /**
62
+ * Save current session data
63
+ */
64
+ saveSession(): void;
65
+ /**
66
+ * End current session
67
+ */
68
+ endSession(): SessionInfo;
69
+ /**
70
+ * Get recent activity summary
71
+ */
72
+ getRecentActivity(hours?: number): MemoryResult;
73
+ /**
74
+ * Get activity for a specific entity across all sessions
75
+ */
76
+ getEntityHistory(entityPattern: string): MemoryResult;
77
+ private generateSessionId;
78
+ private ensureMemoryDir;
79
+ private recordSessionStart;
80
+ private loadSessionData;
81
+ private changeMatchesQuery;
82
+ private parseQuestion;
83
+ private createQuerySummary;
84
+ }
85
+ //# sourceMappingURL=session-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-memory.d.ts","sourceRoot":"","sources":["../src/session-memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAgB,MAAM,SAAS,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAS;gBAEd,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM;IAUlD;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY;IAkC7C;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IAMnC;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAqB5B;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI;IAInF;;OAEG;IACH,WAAW,IAAI,IAAI;IA0CnB;;OAEG;IACH,UAAU,IAAI,WAAW;IAczB;;OAEG;IACH,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,YAAY;IAWnD;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY;IAIrD,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,aAAa;IA0CrB,OAAO,CAAC,kBAAkB;CA6B3B"}