cmp-standards 3.7.0 → 3.8.1
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/dist/hooks/auto-learning-hook.d.ts +48 -0
- package/dist/hooks/auto-learning-hook.d.ts.map +1 -0
- package/dist/hooks/auto-learning-hook.js +258 -0
- package/dist/hooks/auto-learning-hook.js.map +1 -0
- package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-post-tool-use.js +20 -3
- package/dist/hooks/cloud-post-tool-use.js.map +1 -1
- package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-pre-tool-use.js +27 -16
- package/dist/hooks/cloud-pre-tool-use.js.map +1 -1
- package/dist/hooks/fast-session-start.d.ts +24 -0
- package/dist/hooks/fast-session-start.d.ts.map +1 -0
- package/dist/hooks/fast-session-start.js +363 -0
- package/dist/hooks/fast-session-start.js.map +1 -0
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +24 -1
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/services/ProjectScaffold.d.ts.map +1 -1
- package/dist/services/ProjectScaffold.js +31 -0
- package/dist/services/ProjectScaffold.js.map +1 -1
- package/dist/services/auto-evolution-trigger.d.ts +101 -0
- package/dist/services/auto-evolution-trigger.d.ts.map +1 -0
- package/dist/services/auto-evolution-trigger.js +359 -0
- package/dist/services/auto-evolution-trigger.js.map +1 -0
- package/dist/services/cloud-memory-service.d.ts +101 -0
- package/dist/services/cloud-memory-service.d.ts.map +1 -0
- package/dist/services/cloud-memory-service.js +363 -0
- package/dist/services/cloud-memory-service.js.map +1 -0
- package/dist/services/memory-keeper-client.d.ts +106 -0
- package/dist/services/memory-keeper-client.d.ts.map +1 -0
- package/dist/services/memory-keeper-client.js +319 -0
- package/dist/services/memory-keeper-client.js.map +1 -0
- package/dist/services/skill-learning-bridge.d.ts +100 -0
- package/dist/services/skill-learning-bridge.d.ts.map +1 -0
- package/dist/services/skill-learning-bridge.js +331 -0
- package/dist/services/skill-learning-bridge.js.map +1 -0
- package/dist/services/unified-memory-router.d.ts +123 -0
- package/dist/services/unified-memory-router.d.ts.map +1 -0
- package/dist/services/unified-memory-router.js +555 -0
- package/dist/services/unified-memory-router.js.map +1 -0
- package/dist/utils/env-loader.js +1 -1
- package/dist/utils/env-loader.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/_reasoning-framework.md +250 -0
- package/templates/agents/architecture-expert.md +294 -31
- package/templates/agents/database-expert.md +297 -34
- package/templates/agents/documentation-expert.md +232 -31
- package/templates/agents/memory-expert.md +264 -46
- package/templates/agents/performance-expert.md +319 -32
- package/templates/agents/security-expert.md +258 -30
- package/templates/agents/ux-expert.md +293 -35
- package/templates/commands/experts.md +322 -85
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Memory-Keeper MCP Client
|
|
3
|
+
* @description Client for interacting with memory-keeper MCP server
|
|
4
|
+
*
|
|
5
|
+
* Uses stdio transport to communicate with the memory-keeper MCP process.
|
|
6
|
+
* Provides typed methods for all memory operations.
|
|
7
|
+
*
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
import { spawn } from 'child_process';
|
|
11
|
+
import { homedir } from 'os';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { existsSync } from 'fs';
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Memory-Keeper Client
|
|
16
|
+
// =============================================================================
|
|
17
|
+
export class MemoryKeeperClient {
|
|
18
|
+
process = null;
|
|
19
|
+
requestId = 0;
|
|
20
|
+
pendingRequests = new Map();
|
|
21
|
+
buffer = '';
|
|
22
|
+
initialized = false;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize connection to memory-keeper MCP server
|
|
25
|
+
*/
|
|
26
|
+
async connect() {
|
|
27
|
+
if (this.initialized)
|
|
28
|
+
return true;
|
|
29
|
+
const mcpPath = this.findMCPServer();
|
|
30
|
+
if (!mcpPath) {
|
|
31
|
+
console.error('[memory-keeper-client] MCP server not found');
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
this.process = spawn('node', [mcpPath], {
|
|
36
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
37
|
+
env: { ...process.env, NODE_ENV: 'production' }
|
|
38
|
+
});
|
|
39
|
+
if (!this.process.stdout || !this.process.stdin) {
|
|
40
|
+
throw new Error('Failed to get stdio streams');
|
|
41
|
+
}
|
|
42
|
+
this.process.stdout.on('data', (data) => {
|
|
43
|
+
this.handleData(data.toString());
|
|
44
|
+
});
|
|
45
|
+
this.process.stderr?.on('data', (data) => {
|
|
46
|
+
console.error('[memory-keeper-client] stderr:', data.toString());
|
|
47
|
+
});
|
|
48
|
+
this.process.on('error', (error) => {
|
|
49
|
+
console.error('[memory-keeper-client] process error:', error);
|
|
50
|
+
this.initialized = false;
|
|
51
|
+
});
|
|
52
|
+
this.process.on('exit', (code) => {
|
|
53
|
+
console.log('[memory-keeper-client] process exited with code:', code);
|
|
54
|
+
this.initialized = false;
|
|
55
|
+
});
|
|
56
|
+
// Initialize MCP connection
|
|
57
|
+
await this.sendRequest('initialize', {
|
|
58
|
+
protocolVersion: '2024-11-05',
|
|
59
|
+
capabilities: {},
|
|
60
|
+
clientInfo: { name: 'cmp-standards', version: '3.7.0' }
|
|
61
|
+
});
|
|
62
|
+
this.initialized = true;
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('[memory-keeper-client] Connection failed:', error);
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Find the memory-keeper MCP server path
|
|
72
|
+
*/
|
|
73
|
+
findMCPServer() {
|
|
74
|
+
const possiblePaths = [
|
|
75
|
+
join(homedir(), '.claude', 'plugins', 'cache', 'thedotmack', 'claude-mem', 'server.js'),
|
|
76
|
+
join(homedir(), '.claude', 'plugins', 'thedotmack', 'claude-mem', 'server.js'),
|
|
77
|
+
];
|
|
78
|
+
for (const p of possiblePaths) {
|
|
79
|
+
if (existsSync(p))
|
|
80
|
+
return p;
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Handle incoming data from MCP server
|
|
86
|
+
*/
|
|
87
|
+
handleData(data) {
|
|
88
|
+
this.buffer += data;
|
|
89
|
+
// Try to parse complete JSON-RPC messages
|
|
90
|
+
const lines = this.buffer.split('\n');
|
|
91
|
+
this.buffer = lines.pop() || '';
|
|
92
|
+
for (const line of lines) {
|
|
93
|
+
if (!line.trim())
|
|
94
|
+
continue;
|
|
95
|
+
try {
|
|
96
|
+
const response = JSON.parse(line);
|
|
97
|
+
const pending = this.pendingRequests.get(response.id);
|
|
98
|
+
if (pending) {
|
|
99
|
+
this.pendingRequests.delete(response.id);
|
|
100
|
+
if (response.error) {
|
|
101
|
+
pending.reject(new Error(response.error.message));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
pending.resolve(response.result);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Ignore parse errors for partial messages
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Send a request to the MCP server
|
|
115
|
+
*/
|
|
116
|
+
sendRequest(method, params) {
|
|
117
|
+
return new Promise((resolve, reject) => {
|
|
118
|
+
if (!this.process?.stdin) {
|
|
119
|
+
reject(new Error('Not connected to MCP server'));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const id = ++this.requestId;
|
|
123
|
+
const request = {
|
|
124
|
+
jsonrpc: '2.0',
|
|
125
|
+
id,
|
|
126
|
+
method,
|
|
127
|
+
params
|
|
128
|
+
};
|
|
129
|
+
this.pendingRequests.set(id, { resolve, reject });
|
|
130
|
+
// Set timeout for request
|
|
131
|
+
setTimeout(() => {
|
|
132
|
+
if (this.pendingRequests.has(id)) {
|
|
133
|
+
this.pendingRequests.delete(id);
|
|
134
|
+
reject(new Error(`Request timeout for ${method}`));
|
|
135
|
+
}
|
|
136
|
+
}, 10000);
|
|
137
|
+
this.process.stdin.write(JSON.stringify(request) + '\n');
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Call a tool on the MCP server
|
|
142
|
+
*/
|
|
143
|
+
async callTool(name, args) {
|
|
144
|
+
if (!this.initialized) {
|
|
145
|
+
const connected = await this.connect();
|
|
146
|
+
if (!connected)
|
|
147
|
+
throw new Error('Failed to connect to memory-keeper');
|
|
148
|
+
}
|
|
149
|
+
const result = await this.sendRequest('tools/call', {
|
|
150
|
+
name,
|
|
151
|
+
arguments: args
|
|
152
|
+
});
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
// ===========================================================================
|
|
156
|
+
// Public API
|
|
157
|
+
// ===========================================================================
|
|
158
|
+
/**
|
|
159
|
+
* Save a context item
|
|
160
|
+
*/
|
|
161
|
+
async save(item) {
|
|
162
|
+
try {
|
|
163
|
+
await this.callTool('context_save', {
|
|
164
|
+
key: item.key,
|
|
165
|
+
value: item.value,
|
|
166
|
+
category: item.category,
|
|
167
|
+
channel: item.channel,
|
|
168
|
+
priority: item.priority,
|
|
169
|
+
private: item.private
|
|
170
|
+
});
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error('[memory-keeper-client] Save failed:', error);
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get a context item by key
|
|
180
|
+
*/
|
|
181
|
+
async get(key) {
|
|
182
|
+
try {
|
|
183
|
+
const result = await this.callTool('context_get', { key });
|
|
184
|
+
return result?.items?.[0] || null;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error('[memory-keeper-client] Get failed:', error);
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Search context items
|
|
193
|
+
*/
|
|
194
|
+
async search(options) {
|
|
195
|
+
try {
|
|
196
|
+
const result = await this.callTool('context_search', {
|
|
197
|
+
query: options.query,
|
|
198
|
+
category: options.category,
|
|
199
|
+
channel: options.channel,
|
|
200
|
+
limit: options.limit || 20,
|
|
201
|
+
includeMetadata: options.includeMetadata
|
|
202
|
+
});
|
|
203
|
+
return result || { items: [], total: 0 };
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.error('[memory-keeper-client] Search failed:', error);
|
|
207
|
+
return { items: [], total: 0 };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Search across all sessions
|
|
212
|
+
*/
|
|
213
|
+
async searchAll(query, limit = 20) {
|
|
214
|
+
try {
|
|
215
|
+
const result = await this.callTool('context_search_all', {
|
|
216
|
+
query,
|
|
217
|
+
limit,
|
|
218
|
+
includeMetadata: true
|
|
219
|
+
});
|
|
220
|
+
return result || { items: [], total: 0 };
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
console.error('[memory-keeper-client] SearchAll failed:', error);
|
|
224
|
+
return { items: [], total: 0 };
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get current session status
|
|
229
|
+
*/
|
|
230
|
+
async getStatus() {
|
|
231
|
+
try {
|
|
232
|
+
const result = await this.callTool('context_status', {});
|
|
233
|
+
return result;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
console.error('[memory-keeper-client] Status failed:', error);
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Create a checkpoint
|
|
242
|
+
*/
|
|
243
|
+
async checkpoint(name, description) {
|
|
244
|
+
try {
|
|
245
|
+
const result = await this.callTool('context_checkpoint', {
|
|
246
|
+
name,
|
|
247
|
+
description,
|
|
248
|
+
includeGitStatus: true
|
|
249
|
+
});
|
|
250
|
+
return result?.checkpointId || null;
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
console.error('[memory-keeper-client] Checkpoint failed:', error);
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get items by channel
|
|
259
|
+
*/
|
|
260
|
+
async getByChannel(channel, limit = 50) {
|
|
261
|
+
try {
|
|
262
|
+
const result = await this.callTool('context_get', {
|
|
263
|
+
channel,
|
|
264
|
+
limit,
|
|
265
|
+
includeMetadata: true
|
|
266
|
+
});
|
|
267
|
+
return result?.items || [];
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
console.error('[memory-keeper-client] GetByChannel failed:', error);
|
|
271
|
+
return [];
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Get recent items
|
|
276
|
+
*/
|
|
277
|
+
async getRecent(limit = 20) {
|
|
278
|
+
try {
|
|
279
|
+
const result = await this.callTool('context_get', {
|
|
280
|
+
limit,
|
|
281
|
+
sort: 'created_desc',
|
|
282
|
+
includeMetadata: true
|
|
283
|
+
});
|
|
284
|
+
return result?.items || [];
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
console.error('[memory-keeper-client] GetRecent failed:', error);
|
|
288
|
+
return [];
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Disconnect from MCP server
|
|
293
|
+
*/
|
|
294
|
+
disconnect() {
|
|
295
|
+
if (this.process) {
|
|
296
|
+
this.process.kill();
|
|
297
|
+
this.process = null;
|
|
298
|
+
this.initialized = false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// =============================================================================
|
|
303
|
+
// Singleton & Factory
|
|
304
|
+
// =============================================================================
|
|
305
|
+
let clientInstance = null;
|
|
306
|
+
export function getMemoryKeeperClient() {
|
|
307
|
+
if (!clientInstance) {
|
|
308
|
+
clientInstance = new MemoryKeeperClient();
|
|
309
|
+
}
|
|
310
|
+
return clientInstance;
|
|
311
|
+
}
|
|
312
|
+
export function resetMemoryKeeperClient() {
|
|
313
|
+
if (clientInstance) {
|
|
314
|
+
clientInstance.disconnect();
|
|
315
|
+
clientInstance = null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
export default MemoryKeeperClient;
|
|
319
|
+
//# sourceMappingURL=memory-keeper-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-keeper-client.js","sourceRoot":"","sources":["../../src/services/memory-keeper-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Skill-Learning Bridge Service
|
|
3
|
+
* @description Connects memory systems with the skills learning framework
|
|
4
|
+
*
|
|
5
|
+
* ## Purpose
|
|
6
|
+
*
|
|
7
|
+
* This bridge service synchronizes learnings across:
|
|
8
|
+
* 1. memory-keeper MCP (local SQLite)
|
|
9
|
+
* 2. cmp-standards cloud (Turso/Upstash)
|
|
10
|
+
* 3. Skills markdown files (.claude/skills/SKILL/learnings.md)
|
|
11
|
+
*
|
|
12
|
+
* ## Flow
|
|
13
|
+
*
|
|
14
|
+
* Learning Detected -> SkillLearningBridge
|
|
15
|
+
* - memory-keeper (immediate, local)
|
|
16
|
+
* - skills/learnings.md (immediate, local)
|
|
17
|
+
* - cmp-standards cloud (async, persistent)
|
|
18
|
+
*
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
export interface Learning {
|
|
22
|
+
id?: string;
|
|
23
|
+
type: 'type-safety' | 'pattern' | 'bugfix' | 'architecture' | 'performance' | 'general';
|
|
24
|
+
skill: string;
|
|
25
|
+
context: string;
|
|
26
|
+
problem: string;
|
|
27
|
+
solution: string;
|
|
28
|
+
file?: string;
|
|
29
|
+
confidence: number;
|
|
30
|
+
timestamp: string;
|
|
31
|
+
source: 'auto' | 'manual' | 'sync';
|
|
32
|
+
}
|
|
33
|
+
export interface SkillStats {
|
|
34
|
+
name: string;
|
|
35
|
+
path: string;
|
|
36
|
+
totalLearnings: number;
|
|
37
|
+
pendingLearnings: number;
|
|
38
|
+
lastEvolution: string | null;
|
|
39
|
+
readyForEvolution: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface BridgeConfig {
|
|
42
|
+
skillsDir: string;
|
|
43
|
+
evolutionThreshold: number;
|
|
44
|
+
syncToCloud: boolean;
|
|
45
|
+
}
|
|
46
|
+
export declare class SkillLearningBridge {
|
|
47
|
+
private config;
|
|
48
|
+
constructor(config?: Partial<BridgeConfig>);
|
|
49
|
+
/**
|
|
50
|
+
* Record a learning to all systems
|
|
51
|
+
*/
|
|
52
|
+
recordLearning(learning: Learning): Promise<{
|
|
53
|
+
skillsWritten: boolean;
|
|
54
|
+
memoryKeeperWritten: boolean;
|
|
55
|
+
cloudSynced: boolean;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Write learning to skill's learnings.md file
|
|
59
|
+
*/
|
|
60
|
+
private writeToSkillFile;
|
|
61
|
+
/**
|
|
62
|
+
* Format a learning entry as markdown
|
|
63
|
+
*/
|
|
64
|
+
private formatLearningEntry;
|
|
65
|
+
/**
|
|
66
|
+
* Get statistics for all skills
|
|
67
|
+
*/
|
|
68
|
+
getSkillStats(): Promise<SkillStats[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Check if any skills are ready for evolution
|
|
71
|
+
*/
|
|
72
|
+
getSkillsReadyForEvolution(): Promise<SkillStats[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Trigger skill evolution for ready skills
|
|
75
|
+
*/
|
|
76
|
+
triggerEvolution(skillName?: string): Promise<string[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Evolve a single skill
|
|
79
|
+
*/
|
|
80
|
+
private evolveSkill;
|
|
81
|
+
/**
|
|
82
|
+
* Analyze learnings to find common patterns
|
|
83
|
+
*/
|
|
84
|
+
private analyzeLearningPatterns;
|
|
85
|
+
/**
|
|
86
|
+
* Migrate memories from memory-keeper to skills
|
|
87
|
+
*/
|
|
88
|
+
migrateFromMemoryKeeper(memories: Array<{
|
|
89
|
+
key: string;
|
|
90
|
+
value: string;
|
|
91
|
+
category?: string;
|
|
92
|
+
}>): Promise<number>;
|
|
93
|
+
/**
|
|
94
|
+
* Detect which skill a memory content relates to
|
|
95
|
+
*/
|
|
96
|
+
private detectSkillFromContent;
|
|
97
|
+
}
|
|
98
|
+
export declare function getSkillLearningBridge(config?: Partial<BridgeConfig>): SkillLearningBridge;
|
|
99
|
+
export default SkillLearningBridge;
|
|
100
|
+
//# sourceMappingURL=skill-learning-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-learning-bridge.d.ts","sourceRoot":"","sources":["../../src/services/skill-learning-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAA;IACvF,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;CACrB;AA4BD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAI9C;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;QAChD,aAAa,EAAE,OAAO,CAAA;QACtB,mBAAmB,EAAE,OAAO,CAAA;QAC5B,WAAW,EAAE,OAAO,CAAA;KACrB,CAAC;IA2BF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuDxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAiC5C;;OAEG;IACG,0BAA0B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKzD;;OAEG;IACG,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqB7D;;OAEG;YACW,WAAW;IA4EzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC5C,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAqB/B;AAQD,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,mBAAmB,CAK1F;AAED,eAAe,mBAAmB,CAAA"}
|