claude-code-smart-fork 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 (45) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +21 -0
  3. package/README.md +317 -0
  4. package/README.zh-CN.md +45 -0
  5. package/dist/cli/index.d.ts +8 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +351 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/core/__tests__/embedding.test.d.ts +2 -0
  10. package/dist/core/__tests__/embedding.test.d.ts.map +1 -0
  11. package/dist/core/__tests__/embedding.test.js +90 -0
  12. package/dist/core/__tests__/embedding.test.js.map +1 -0
  13. package/dist/core/config.d.ts +19 -0
  14. package/dist/core/config.d.ts.map +1 -0
  15. package/dist/core/config.js +105 -0
  16. package/dist/core/config.js.map +1 -0
  17. package/dist/core/embedding.d.ts +28 -0
  18. package/dist/core/embedding.d.ts.map +1 -0
  19. package/dist/core/embedding.js +137 -0
  20. package/dist/core/embedding.js.map +1 -0
  21. package/dist/core/fork-detector.d.ts +38 -0
  22. package/dist/core/fork-detector.d.ts.map +1 -0
  23. package/dist/core/fork-detector.js +234 -0
  24. package/dist/core/fork-detector.js.map +1 -0
  25. package/dist/core/session-manager.d.ts +77 -0
  26. package/dist/core/session-manager.d.ts.map +1 -0
  27. package/dist/core/session-manager.js +525 -0
  28. package/dist/core/session-manager.js.map +1 -0
  29. package/dist/core/vector-store.d.ts +47 -0
  30. package/dist/core/vector-store.d.ts.map +1 -0
  31. package/dist/core/vector-store.js +204 -0
  32. package/dist/core/vector-store.js.map +1 -0
  33. package/dist/index.d.ts +6 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +10 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/integrations/claude-code.d.ts +53 -0
  38. package/dist/integrations/claude-code.d.ts.map +1 -0
  39. package/dist/integrations/claude-code.js +277 -0
  40. package/dist/integrations/claude-code.js.map +1 -0
  41. package/dist/types/index.d.ts +106 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/index.js +6 -0
  44. package/dist/types/index.js.map +1 -0
  45. package/package.json +79 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * Embedding Service - Generates vector embeddings for text
4
+ * Supports multiple providers: OpenAI, Ollama, and simple keyword-based fallback
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.EmbeddingService = void 0;
8
+ class EmbeddingService {
9
+ config;
10
+ initialized = false;
11
+ async initialize(config) {
12
+ this.config = config;
13
+ this.initialized = true;
14
+ }
15
+ /**
16
+ * Generate embedding for text
17
+ */
18
+ async embed(text) {
19
+ if (!this.initialized)
20
+ await this.initialize(this.config);
21
+ // Truncate long text
22
+ const truncated = text.slice(0, 8000);
23
+ switch (this.config.provider) {
24
+ case 'openai':
25
+ return this.embedOpenAI(truncated);
26
+ case 'ollama':
27
+ return this.embedOllama(truncated);
28
+ case 'local':
29
+ default:
30
+ return this.embedLocal(truncated);
31
+ }
32
+ }
33
+ /**
34
+ * Generate embeddings for multiple texts (batch processing)
35
+ */
36
+ async embedBatch(texts) {
37
+ return Promise.all(texts.map(t => this.embed(t)));
38
+ }
39
+ async embedOpenAI(text) {
40
+ const apiKey = process.env.OPENAI_API_KEY;
41
+ if (!apiKey) {
42
+ throw new Error('OPENAI_API_KEY environment variable not set');
43
+ }
44
+ const response = await fetch('https://api.openai.com/v1/embeddings', {
45
+ method: 'POST',
46
+ headers: {
47
+ 'Authorization': `Bearer ${apiKey}`,
48
+ 'Content-Type': 'application/json'
49
+ },
50
+ body: JSON.stringify({
51
+ model: this.config.model || 'text-embedding-3-small',
52
+ input: text
53
+ })
54
+ });
55
+ if (!response.ok) {
56
+ throw new Error(`OpenAI API error: ${response.statusText}`);
57
+ }
58
+ const data = await response.json();
59
+ return data.data[0].embedding;
60
+ }
61
+ async embedOllama(text) {
62
+ const ollamaUrl = process.env.OLLAMA_URL || 'http://localhost:11434';
63
+ const response = await fetch(`${ollamaUrl}/api/embeddings`, {
64
+ method: 'POST',
65
+ headers: {
66
+ 'Content-Type': 'application/json'
67
+ },
68
+ body: JSON.stringify({
69
+ model: this.config.model || 'nomic-embed-text',
70
+ prompt: text
71
+ })
72
+ });
73
+ if (!response.ok) {
74
+ throw new Error(`Ollama API error: ${response.statusText}`);
75
+ }
76
+ const data = await response.json();
77
+ return data.embedding;
78
+ }
79
+ async embedLocal(text) {
80
+ // Simple keyword-based embedding (no external dependencies)
81
+ return this.keywordEmbedding(text);
82
+ }
83
+ /**
84
+ * Simple keyword-based embedding
85
+ * Used when no embedding service is available
86
+ * Creates a bag-of-words style vector
87
+ */
88
+ keywordEmbedding(text) {
89
+ const dimension = this.config.dimension || 384;
90
+ const embedding = new Array(dimension).fill(0);
91
+ // Common stop words to filter out
92
+ const stopWords = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been',
93
+ 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
94
+ 'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'dare', 'ought',
95
+ 'used', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'as',
96
+ 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'between',
97
+ 'and', 'but', 'or', 'yet', 'so', 'if', 'because', 'although', 'though',
98
+ 'unless', 'while', 'where', 'when', 'that', 'which', 'who', 'whom', 'whose',
99
+ 'what', 'this', 'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they',
100
+ 'my', 'your', 'his', 'her', 'its', 'our', 'their']);
101
+ // Extract words and build frequency vector
102
+ const words = text.toLowerCase()
103
+ .replace(/[^\w\s]/g, ' ')
104
+ .split(/\s+/)
105
+ .filter(w => w.length > 2 && !stopWords.has(w) && !/^\d+$/.test(w));
106
+ // Use multiple hash functions for better distribution
107
+ words.forEach((word) => {
108
+ // Hash 1: Simple rolling hash
109
+ let hash1 = 0;
110
+ for (let i = 0; i < word.length; i++) {
111
+ hash1 = ((hash1 << 5) - hash1) + word.charCodeAt(i);
112
+ hash1 = hash1 & hash1;
113
+ }
114
+ // Hash 2: FNV-like hash
115
+ let hash2 = 0x811c9dc5;
116
+ for (let i = 0; i < word.length; i++) {
117
+ hash2 ^= word.charCodeAt(i);
118
+ hash2 += (hash2 << 1) + (hash2 << 4) + (hash2 << 7) + (hash2 << 8) + (hash2 << 24);
119
+ }
120
+ // Distribute across vector
121
+ const pos1 = Math.abs(hash1) % dimension;
122
+ const pos2 = Math.abs(hash2) % dimension;
123
+ embedding[pos1] += 1;
124
+ embedding[pos2] += 0.5;
125
+ });
126
+ // Normalize to unit length
127
+ const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));
128
+ if (norm > 0) {
129
+ for (let i = 0; i < dimension; i++) {
130
+ embedding[i] /= norm;
131
+ }
132
+ }
133
+ return embedding;
134
+ }
135
+ }
136
+ exports.EmbeddingService = EmbeddingService;
137
+ //# sourceMappingURL=embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/core/embedding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Fork Detector - Core matching engine
3
+ * Finds relevant historical sessions based on current context
4
+ */
5
+ import type { SearchQuery, SearchResult } from '../types';
6
+ export declare class ForkDetector {
7
+ private embeddingService;
8
+ private vectorStore;
9
+ private initialized;
10
+ constructor();
11
+ initialize(): Promise<void>;
12
+ /**
13
+ * Extract context from current Claude Code session
14
+ * Reads from environment variables and recent conversation history
15
+ */
16
+ extractCurrentContext(): Promise<string>;
17
+ /**
18
+ * Find sessions relevant to the given query
19
+ */
20
+ findRelevantSessions(query: SearchQuery): Promise<SearchResult[]>;
21
+ /**
22
+ * Analyze current session and suggest relevant past sessions proactively
23
+ */
24
+ suggestRelevantSessions(): Promise<SearchResult[]>;
25
+ /**
26
+ * Extract key topics from text using simple TF-IDF-like approach
27
+ */
28
+ private extractKeyTopics;
29
+ /**
30
+ * Find the best matching message in a session
31
+ */
32
+ private findBestMatchingMessage;
33
+ /**
34
+ * Get recently modified files in a directory
35
+ */
36
+ private getRecentFiles;
37
+ }
38
+ //# sourceMappingURL=fork-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-detector.d.ts","sourceRoot":"","sources":["../../src/core/fork-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AAIxE,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAS;;IAOtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IA4D9C;;OAEG;IACG,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA0BvE;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAmBxD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;OAEG;YACW,cAAc;CAmC7B"}
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ /**
3
+ * Fork Detector - Core matching engine
4
+ * Finds relevant historical sessions based on current context
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.ForkDetector = void 0;
41
+ const config_1 = require("./config");
42
+ const embedding_1 = require("./embedding");
43
+ const vector_store_1 = require("./vector-store");
44
+ const fs = __importStar(require("fs/promises"));
45
+ const path = __importStar(require("path"));
46
+ class ForkDetector {
47
+ embeddingService;
48
+ vectorStore;
49
+ initialized = false;
50
+ constructor() {
51
+ this.embeddingService = new embedding_1.EmbeddingService();
52
+ this.vectorStore = new vector_store_1.VectorStore();
53
+ }
54
+ async initialize() {
55
+ if (this.initialized)
56
+ return;
57
+ const config = config_1.configManager.get();
58
+ await this.embeddingService.initialize(config.embedding);
59
+ await this.vectorStore.initialize(config.vectorStore);
60
+ this.initialized = true;
61
+ }
62
+ /**
63
+ * Extract context from current Claude Code session
64
+ * Reads from environment variables and recent conversation history
65
+ */
66
+ async extractCurrentContext() {
67
+ const contexts = [];
68
+ // 1. Try to get from Claude Code's context file (if available)
69
+ const claudeContextPath = process.env.CLAUDE_CONTEXT_PATH ||
70
+ path.join(process.cwd(), '.claude', 'context.json');
71
+ try {
72
+ const contextContent = await fs.readFile(claudeContextPath, 'utf-8');
73
+ const context = JSON.parse(contextContent);
74
+ if (context.recentMessages) {
75
+ contexts.push(...context.recentMessages.map((m) => m.content));
76
+ }
77
+ if (context.currentTask) {
78
+ contexts.push(context.currentTask);
79
+ }
80
+ }
81
+ catch {
82
+ // Context file not available, use alternative methods
83
+ }
84
+ // 2. Extract from current working directory
85
+ contexts.push(`Current project: ${process.cwd()}`);
86
+ // 3. Try to infer from git status
87
+ try {
88
+ const { execSync } = require('child_process');
89
+ const gitBranch = execSync('git branch --show-current', {
90
+ cwd: process.cwd(),
91
+ encoding: 'utf-8'
92
+ }).trim();
93
+ contexts.push(`Git branch: ${gitBranch}`);
94
+ }
95
+ catch {
96
+ // Not a git repository
97
+ }
98
+ // 4. Look for recent files
99
+ try {
100
+ const recentFiles = await this.getRecentFiles(process.cwd(), 5);
101
+ if (recentFiles.length > 0) {
102
+ contexts.push(`Recent files: ${recentFiles.join(', ')}`);
103
+ }
104
+ }
105
+ catch {
106
+ // Ignore errors
107
+ }
108
+ // 5. Use recent command history if available
109
+ const historyPath = path.join(process.env.HOME || process.env.USERPROFILE || '', '.claude_history');
110
+ try {
111
+ const history = await fs.readFile(historyPath, 'utf-8');
112
+ const recentCommands = history.split('\n').slice(-10).join(' ');
113
+ contexts.push(`Recent activity: ${recentCommands}`);
114
+ }
115
+ catch {
116
+ // History not available
117
+ }
118
+ return contexts.join('\n');
119
+ }
120
+ /**
121
+ * Find sessions relevant to the given query
122
+ */
123
+ async findRelevantSessions(query) {
124
+ await this.initialize();
125
+ // Generate embedding for the query
126
+ const queryEmbedding = await this.embeddingService.embed(query.text);
127
+ // Search vector store
128
+ const results = await this.vectorStore.search({
129
+ vector: queryEmbedding,
130
+ limit: query.limit || 5,
131
+ filter: query.projectPath ? { projectPath: query.projectPath } : undefined
132
+ });
133
+ // Filter by threshold and format results
134
+ const threshold = query.threshold ?? 0.6;
135
+ const filteredResults = results
136
+ .filter(r => r.score >= threshold)
137
+ .map(r => ({
138
+ session: r.session,
139
+ score: r.score,
140
+ matchedMessage: this.findBestMatchingMessage(r.session, query.text)
141
+ }));
142
+ return filteredResults;
143
+ }
144
+ /**
145
+ * Analyze current session and suggest relevant past sessions proactively
146
+ */
147
+ async suggestRelevantSessions() {
148
+ const context = await this.extractCurrentContext();
149
+ // Extract key topics from context
150
+ const keyTopics = this.extractKeyTopics(context);
151
+ // Search with expanded query
152
+ const expandedQuery = [
153
+ context,
154
+ ...keyTopics
155
+ ].join(' ');
156
+ return this.findRelevantSessions({
157
+ text: expandedQuery,
158
+ limit: 3,
159
+ threshold: 0.5 // Lower threshold for proactive suggestions
160
+ });
161
+ }
162
+ /**
163
+ * Extract key topics from text using simple TF-IDF-like approach
164
+ */
165
+ extractKeyTopics(text) {
166
+ // Remove common stop words
167
+ const stopWords = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been',
168
+ 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
169
+ 'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'dare', 'ought',
170
+ 'used', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'as',
171
+ 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'between',
172
+ 'and', 'but', 'or', 'yet', 'so', 'if', 'because', 'although', 'though',
173
+ 'unless', 'while', 'where', 'when', 'that', 'which', 'who', 'whom', 'whose',
174
+ 'what', 'this', 'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they']);
175
+ // Extract words and count frequency
176
+ const words = text.toLowerCase()
177
+ .replace(/[^\w\s]/g, ' ')
178
+ .split(/\s+/)
179
+ .filter(w => w.length > 2 && !stopWords.has(w));
180
+ const frequency = {};
181
+ words.forEach(word => {
182
+ frequency[word] = (frequency[word] || 0) + 1;
183
+ });
184
+ // Get top keywords
185
+ return Object.entries(frequency)
186
+ .sort((a, b) => b[1] - a[1])
187
+ .slice(0, 10)
188
+ .map(([word]) => word);
189
+ }
190
+ /**
191
+ * Find the best matching message in a session
192
+ */
193
+ findBestMatchingMessage(session, query) {
194
+ // This would require loading the full session
195
+ // For now, return the summary
196
+ return session.summary;
197
+ }
198
+ /**
199
+ * Get recently modified files in a directory
200
+ */
201
+ async getRecentFiles(dir, limit) {
202
+ const files = [];
203
+ async function scan(directory) {
204
+ try {
205
+ const entries = await fs.readdir(directory, { withFileTypes: true });
206
+ for (const entry of entries) {
207
+ const fullPath = path.join(directory, entry.name);
208
+ // Skip hidden files and common non-code directories
209
+ if (entry.name.startsWith('.') ||
210
+ ['node_modules', 'dist', 'build', '.git'].includes(entry.name)) {
211
+ continue;
212
+ }
213
+ if (entry.isDirectory()) {
214
+ await scan(fullPath);
215
+ }
216
+ else {
217
+ const stat = await fs.stat(fullPath);
218
+ files.push({ path: fullPath, mtime: stat.mtime.getTime() });
219
+ }
220
+ }
221
+ }
222
+ catch {
223
+ // Ignore permission errors
224
+ }
225
+ }
226
+ await scan(dir);
227
+ return files
228
+ .sort((a, b) => b.mtime - a.mtime)
229
+ .slice(0, limit)
230
+ .map(f => path.relative(dir, f.path));
231
+ }
232
+ }
233
+ exports.ForkDetector = ForkDetector;
234
+ //# sourceMappingURL=fork-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-detector.js","sourceRoot":"","sources":["../../src/core/fork-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Session Manager - Handles session indexing, storage, and forking
3
+ */
4
+ import type { Session, SessionIndex, ConversationTurn } from '../types';
5
+ export declare class SessionManager {
6
+ private embeddingService;
7
+ private vectorStore;
8
+ private initialized;
9
+ constructor();
10
+ initialize(): Promise<void>;
11
+ /**
12
+ * Index the current Claude Code session with full conversation history
13
+ */
14
+ indexCurrentSession(options?: {
15
+ summary?: string;
16
+ tags?: string[];
17
+ /**
18
+ * Complete conversation history including both user messages and assistant responses
19
+ */
20
+ conversationHistory?: ConversationTurn[];
21
+ }): Promise<Session>;
22
+ /**
23
+ * Fork to a historical session
24
+ */
25
+ forkToSession(sessionId: string): Promise<void>;
26
+ /**
27
+ * List all indexed sessions
28
+ */
29
+ listSessions(projectPath?: string): Promise<SessionIndex[]>;
30
+ /**
31
+ * Export session to a file
32
+ */
33
+ exportSession(sessionId: string, outputPath?: string): Promise<string>;
34
+ /**
35
+ * Import session from a file
36
+ */
37
+ importSession(filePath: string): Promise<Session>;
38
+ /**
39
+ * Extract conversation history from various sources
40
+ */
41
+ private extractConversationHistory;
42
+ /**
43
+ * Convert conversation turns to legacy message format
44
+ */
45
+ private conversationToMessages;
46
+ /**
47
+ * Convert legacy messages to conversation turns
48
+ */
49
+ private messagesToConversation;
50
+ /**
51
+ * Convert conversation to text for embedding
52
+ */
53
+ private conversationToText;
54
+ /**
55
+ * Generate summary from conversation
56
+ */
57
+ private generateSummaryFromConversation;
58
+ /**
59
+ * Extract key topics from conversation
60
+ */
61
+ private extractKeyTopicsFromConversation;
62
+ /**
63
+ * Sanitize path for use in file names
64
+ */
65
+ private sanitizePath;
66
+ private extractMessages;
67
+ private generateSummary;
68
+ private extractKeyTopics;
69
+ private sessionToText;
70
+ private saveSession;
71
+ private loadSession;
72
+ private saveForkContext;
73
+ private getCurrentSessionId;
74
+ private getOpenFiles;
75
+ private extractFilesFromSession;
76
+ }
77
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAkB,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMxF,qBAAa,cAAc;IACzB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAS;;IAOtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,mBAAmB,CAAC,OAAO,GAAE;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB;;WAEG;QACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;KACrC,GAAG,OAAO,CAAC,OAAO,CAAC;IA0DzB;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2FrD;;OAEG;IACG,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAYjE;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe5E;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BvD;;OAEG;YACW,0BAA0B;IAmDxC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmC9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;YACW,+BAA+B;IAc7C;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAsBxC;;OAEG;IACH,OAAO,CAAC,YAAY;YAMN,eAAe;YAwCf,eAAe;IAc7B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,aAAa;YAYP,WAAW;YAMX,WAAW;YAYX,eAAe;IAQ7B,OAAO,CAAC,mBAAmB;YAIb,YAAY;IAwB1B,OAAO,CAAC,uBAAuB;CAkBhC"}