cccmemory 1.8.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.
- package/LICENSE +21 -0
- package/README.md +349 -0
- package/dist/ConversationMemory.d.ts +231 -0
- package/dist/ConversationMemory.d.ts.map +1 -0
- package/dist/ConversationMemory.js +357 -0
- package/dist/ConversationMemory.js.map +1 -0
- package/dist/cache/QueryCache.d.ts +215 -0
- package/dist/cache/QueryCache.d.ts.map +1 -0
- package/dist/cache/QueryCache.js +294 -0
- package/dist/cache/QueryCache.js.map +1 -0
- package/dist/cli/commands.d.ts +9 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +954 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +16 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +361 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/context/ContextInjector.d.ts +38 -0
- package/dist/context/ContextInjector.d.ts.map +1 -0
- package/dist/context/ContextInjector.js +235 -0
- package/dist/context/ContextInjector.js.map +1 -0
- package/dist/documentation/CodeAnalyzer.d.ts +29 -0
- package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
- package/dist/documentation/CodeAnalyzer.js +122 -0
- package/dist/documentation/CodeAnalyzer.js.map +1 -0
- package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
- package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
- package/dist/documentation/ConversationAnalyzer.js +157 -0
- package/dist/documentation/ConversationAnalyzer.js.map +1 -0
- package/dist/documentation/CrossReferencer.d.ts +67 -0
- package/dist/documentation/CrossReferencer.d.ts.map +1 -0
- package/dist/documentation/CrossReferencer.js +247 -0
- package/dist/documentation/CrossReferencer.js.map +1 -0
- package/dist/documentation/DocumentationGenerator.d.ts +22 -0
- package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
- package/dist/documentation/DocumentationGenerator.js +57 -0
- package/dist/documentation/DocumentationGenerator.js.map +1 -0
- package/dist/documentation/MarkdownFormatter.d.ts +26 -0
- package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
- package/dist/documentation/MarkdownFormatter.js +301 -0
- package/dist/documentation/MarkdownFormatter.js.map +1 -0
- package/dist/documentation/types.d.ts +176 -0
- package/dist/documentation/types.d.ts.map +1 -0
- package/dist/documentation/types.js +5 -0
- package/dist/documentation/types.js.map +1 -0
- package/dist/embeddings/ConfigManager.d.ts +46 -0
- package/dist/embeddings/ConfigManager.d.ts.map +1 -0
- package/dist/embeddings/ConfigManager.js +177 -0
- package/dist/embeddings/ConfigManager.js.map +1 -0
- package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
- package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingConfig.js +132 -0
- package/dist/embeddings/EmbeddingConfig.js.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
- package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingGenerator.js +157 -0
- package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
- package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
- package/dist/embeddings/EmbeddingProvider.js +6 -0
- package/dist/embeddings/EmbeddingProvider.js.map +1 -0
- package/dist/embeddings/ModelRegistry.d.ts +48 -0
- package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
- package/dist/embeddings/ModelRegistry.js +170 -0
- package/dist/embeddings/ModelRegistry.js.map +1 -0
- package/dist/embeddings/VectorStore.d.ts +114 -0
- package/dist/embeddings/VectorStore.d.ts.map +1 -0
- package/dist/embeddings/VectorStore.js +393 -0
- package/dist/embeddings/VectorStore.js.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
- package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
- package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
- package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
- package/dist/handoff/SessionHandoffStore.d.ts +80 -0
- package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
- package/dist/handoff/SessionHandoffStore.js +314 -0
- package/dist/handoff/SessionHandoffStore.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +157 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/memory/WorkingMemoryStore.d.ts +83 -0
- package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
- package/dist/memory/WorkingMemoryStore.js +318 -0
- package/dist/memory/WorkingMemoryStore.js.map +1 -0
- package/dist/memory/types.d.ts +192 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +8 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/parsers/CodexConversationParser.d.ts +51 -0
- package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
- package/dist/parsers/CodexConversationParser.js +301 -0
- package/dist/parsers/CodexConversationParser.js.map +1 -0
- package/dist/parsers/ConversationParser.d.ts +286 -0
- package/dist/parsers/ConversationParser.d.ts.map +1 -0
- package/dist/parsers/ConversationParser.js +795 -0
- package/dist/parsers/ConversationParser.js.map +1 -0
- package/dist/parsers/DecisionExtractor.d.ts +144 -0
- package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
- package/dist/parsers/DecisionExtractor.js +434 -0
- package/dist/parsers/DecisionExtractor.js.map +1 -0
- package/dist/parsers/GitIntegrator.d.ts +156 -0
- package/dist/parsers/GitIntegrator.d.ts.map +1 -0
- package/dist/parsers/GitIntegrator.js +348 -0
- package/dist/parsers/GitIntegrator.js.map +1 -0
- package/dist/parsers/MistakeExtractor.d.ts +151 -0
- package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
- package/dist/parsers/MistakeExtractor.js +460 -0
- package/dist/parsers/MistakeExtractor.js.map +1 -0
- package/dist/parsers/RequirementsExtractor.d.ts +166 -0
- package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
- package/dist/parsers/RequirementsExtractor.js +338 -0
- package/dist/parsers/RequirementsExtractor.js.map +1 -0
- package/dist/realtime/ConversationWatcher.d.ts +87 -0
- package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
- package/dist/realtime/ConversationWatcher.js +204 -0
- package/dist/realtime/ConversationWatcher.js.map +1 -0
- package/dist/realtime/IncrementalParser.d.ts +83 -0
- package/dist/realtime/IncrementalParser.d.ts.map +1 -0
- package/dist/realtime/IncrementalParser.js +232 -0
- package/dist/realtime/IncrementalParser.js.map +1 -0
- package/dist/realtime/LiveExtractor.d.ts +72 -0
- package/dist/realtime/LiveExtractor.d.ts.map +1 -0
- package/dist/realtime/LiveExtractor.js +288 -0
- package/dist/realtime/LiveExtractor.js.map +1 -0
- package/dist/search/SemanticSearch.d.ts +121 -0
- package/dist/search/SemanticSearch.d.ts.map +1 -0
- package/dist/search/SemanticSearch.js +823 -0
- package/dist/search/SemanticSearch.js.map +1 -0
- package/dist/storage/BackupManager.d.ts +58 -0
- package/dist/storage/BackupManager.d.ts.map +1 -0
- package/dist/storage/BackupManager.js +223 -0
- package/dist/storage/BackupManager.js.map +1 -0
- package/dist/storage/ConversationStorage.d.ts +341 -0
- package/dist/storage/ConversationStorage.d.ts.map +1 -0
- package/dist/storage/ConversationStorage.js +792 -0
- package/dist/storage/ConversationStorage.js.map +1 -0
- package/dist/storage/DeletionService.d.ts +70 -0
- package/dist/storage/DeletionService.d.ts.map +1 -0
- package/dist/storage/DeletionService.js +253 -0
- package/dist/storage/DeletionService.js.map +1 -0
- package/dist/storage/GlobalIndex.d.ts +133 -0
- package/dist/storage/GlobalIndex.d.ts.map +1 -0
- package/dist/storage/GlobalIndex.js +310 -0
- package/dist/storage/GlobalIndex.js.map +1 -0
- package/dist/storage/SQLiteManager.d.ts +114 -0
- package/dist/storage/SQLiteManager.d.ts.map +1 -0
- package/dist/storage/SQLiteManager.js +636 -0
- package/dist/storage/SQLiteManager.js.map +1 -0
- package/dist/storage/migrations.d.ts +54 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +285 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/schema.sql +436 -0
- package/dist/tools/ToolDefinitions.d.ts +946 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +937 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolHandlers.d.ts +791 -0
- package/dist/tools/ToolHandlers.d.ts.map +1 -0
- package/dist/tools/ToolHandlers.js +3262 -0
- package/dist/tools/ToolHandlers.js.map +1 -0
- package/dist/types/ToolTypes.d.ts +824 -0
- package/dist/types/ToolTypes.d.ts.map +1 -0
- package/dist/types/ToolTypes.js +6 -0
- package/dist/types/ToolTypes.js.map +1 -0
- package/dist/utils/Logger.d.ts +70 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +131 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/McpConfig.d.ts +54 -0
- package/dist/utils/McpConfig.d.ts.map +1 -0
- package/dist/utils/McpConfig.js +136 -0
- package/dist/utils/McpConfig.js.map +1 -0
- package/dist/utils/ProjectMigration.d.ts +82 -0
- package/dist/utils/ProjectMigration.d.ts.map +1 -0
- package/dist/utils/ProjectMigration.js +416 -0
- package/dist/utils/ProjectMigration.js.map +1 -0
- package/dist/utils/constants.d.ts +75 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +105 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/safeJson.d.ts +37 -0
- package/dist/utils/safeJson.d.ts.map +1 -0
- package/dist/utils/safeJson.js +48 -0
- package/dist/utils/safeJson.js.map +1 -0
- package/dist/utils/sanitization.d.ts +45 -0
- package/dist/utils/sanitization.d.ts.map +1 -0
- package/dist/utils/sanitization.js +153 -0
- package/dist/utils/sanitization.js.map +1 -0
- package/dist/utils/worktree.d.ts +15 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +86 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +98 -0
- package/scripts/changelog-check.sh +62 -0
- package/scripts/check-node.js +17 -0
- package/scripts/dev-config.js +56 -0
- package/scripts/postinstall.js +117 -0
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mistake Extractor - Identifies errors and how they were corrected.
|
|
3
|
+
*
|
|
4
|
+
* This extractor analyzes conversation messages and tool results to identify
|
|
5
|
+
* mistakes made during development and how they were corrected. It helps prevent
|
|
6
|
+
* repeating the same errors by documenting:
|
|
7
|
+
* - What went wrong
|
|
8
|
+
* - How it was corrected
|
|
9
|
+
* - Files affected
|
|
10
|
+
* - Type of mistake (logic error, wrong approach, etc.)
|
|
11
|
+
*
|
|
12
|
+
* Sources of mistakes:
|
|
13
|
+
* - Tool execution errors (failed commands, syntax errors)
|
|
14
|
+
* - User corrections ("that's wrong", "don't do that")
|
|
15
|
+
* - Error discussions (debugging conversations)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const extractor = new MistakeExtractor();
|
|
20
|
+
* const mistakes = extractor.extractMistakes(messages, toolResults);
|
|
21
|
+
* console.log(`Found ${mistakes.length} mistakes`);
|
|
22
|
+
* mistakes.forEach(m => {
|
|
23
|
+
* console.log(`${m.mistake_type}: ${m.what_went_wrong}`);
|
|
24
|
+
* if (m.correction) console.log(`Fixed by: ${m.correction}`);
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
import { nanoid } from "nanoid";
|
|
29
|
+
/**
|
|
30
|
+
* Extracts mistakes and corrections from conversation history.
|
|
31
|
+
*
|
|
32
|
+
* Analyzes tool errors, user corrections, and error discussions to document
|
|
33
|
+
* mistakes and prevent repetition.
|
|
34
|
+
*/
|
|
35
|
+
export class MistakeExtractor {
|
|
36
|
+
// Minimum severity score required to store a mistake
|
|
37
|
+
// Score 1 keeps any classified mistake - filtering is done by stricter patterns
|
|
38
|
+
MIN_SEVERITY_SCORE = 1;
|
|
39
|
+
// Noise patterns to filter out
|
|
40
|
+
NOISE_PATTERNS = [
|
|
41
|
+
/this session is being continued/i,
|
|
42
|
+
/conversation is summarized below/i,
|
|
43
|
+
/previous conversation that ran out of context/i,
|
|
44
|
+
/here is the summary/i,
|
|
45
|
+
/summary of the conversation/i,
|
|
46
|
+
];
|
|
47
|
+
// User correction indicators - must be explicit corrections about code/approach
|
|
48
|
+
CORRECTION_INDICATORS = [
|
|
49
|
+
// "That's wrong, you should use X"
|
|
50
|
+
/that'?s?\s+(?:wrong|incorrect|a mistake)[,\s]+(?:you should|use|the correct)/i,
|
|
51
|
+
// "You made an error in the code/implementation"
|
|
52
|
+
/(?:you|that)\s+(?:made|caused|introduced)\s+(?:a|an)\s+(?:error|bug)\s+(?:in|with|when)/i,
|
|
53
|
+
// "Don't do that because X"
|
|
54
|
+
/don't\s+do\s+that[,\s]+(?:because|it will|it causes)/i,
|
|
55
|
+
// "You shouldn't have done/used X because Y"
|
|
56
|
+
/(?:should not|shouldn't)\s+(?:have\s+)?(?:done|used)\s+(.+?)\s+(?:because|since)/i,
|
|
57
|
+
// "Fix the bug/error in X"
|
|
58
|
+
/(?:fix|correct)\s+(?:the|that)\s+(?:bug|error)\s+(?:in|with)/i,
|
|
59
|
+
];
|
|
60
|
+
// Error indicators - stricter, real errors only
|
|
61
|
+
ERROR_INDICATORS = [
|
|
62
|
+
/error:\s*\w+/i, // error: SomeError
|
|
63
|
+
/Error:\s*\w+/, // Error: SomeError
|
|
64
|
+
/failed:\s*.+/i, // failed: something
|
|
65
|
+
/exception:\s*.+/i, // exception: something
|
|
66
|
+
/TypeError:|ReferenceError:|SyntaxError:/i, // JS errors
|
|
67
|
+
/ENOENT|EACCES|EPERM/i, // Node.js file errors
|
|
68
|
+
/command\s+failed/i, // command failed
|
|
69
|
+
/exit\s+code\s+[1-9]/i, // non-zero exit code
|
|
70
|
+
];
|
|
71
|
+
// Mistake type patterns
|
|
72
|
+
MISTAKE_PATTERNS = {
|
|
73
|
+
logic_error: [/logic\s+error/i, /incorrect\s+logic/i, /wrong\s+condition/i],
|
|
74
|
+
wrong_approach: [
|
|
75
|
+
/wrong\s+approach/i,
|
|
76
|
+
/better\s+way/i,
|
|
77
|
+
/should\s+(?:have\s+)?use(?:d)?/i,
|
|
78
|
+
],
|
|
79
|
+
misunderstanding: [
|
|
80
|
+
/misunderstood/i,
|
|
81
|
+
/(?:didn't|don't)\s+understand/i,
|
|
82
|
+
/confused\s+about/i,
|
|
83
|
+
],
|
|
84
|
+
syntax_error: [/syntax\s+error/i, /parse\s+error/i, /invalid\s+syntax/i],
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Extract mistakes from messages and tool results.
|
|
88
|
+
*
|
|
89
|
+
* Analyzes three sources to identify mistakes:
|
|
90
|
+
* 1. Tool execution errors (failed commands, syntax errors)
|
|
91
|
+
* 2. User corrections (explicit corrections by the user)
|
|
92
|
+
* 3. Error discussions (conversations about bugs and fixes)
|
|
93
|
+
*
|
|
94
|
+
* @param messages - Array of conversation messages
|
|
95
|
+
* @param toolResults - Array of tool execution results
|
|
96
|
+
* @returns Array of extracted Mistake objects, deduplicated
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* const extractor = new MistakeExtractor();
|
|
101
|
+
* const mistakes = extractor.extractMistakes(messages, toolResults);
|
|
102
|
+
*
|
|
103
|
+
* // Find logic errors
|
|
104
|
+
* const logicErrors = mistakes.filter(m => m.mistake_type === 'logic_error');
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
extractMistakes(messages, toolResults) {
|
|
108
|
+
const mistakes = [];
|
|
109
|
+
// Filter messages to exclude noise
|
|
110
|
+
const cleanMessages = messages.filter((m) => !this.isNoiseContent(m.content || ""));
|
|
111
|
+
// Extract from tool errors (tool errors are real, keep them)
|
|
112
|
+
const toolErrors = this.extractToolErrors(toolResults, messages);
|
|
113
|
+
mistakes.push(...toolErrors);
|
|
114
|
+
// Extract from user corrections
|
|
115
|
+
const userCorrections = this.extractUserCorrections(cleanMessages);
|
|
116
|
+
mistakes.push(...userCorrections);
|
|
117
|
+
// Extract from error discussions
|
|
118
|
+
const errorDiscussions = this.extractErrorDiscussions(cleanMessages);
|
|
119
|
+
mistakes.push(...errorDiscussions);
|
|
120
|
+
// Deduplicate and filter by severity
|
|
121
|
+
const deduplicated = this.deduplicateMistakes(mistakes);
|
|
122
|
+
return deduplicated.filter((m) => this.scoreMistakeSeverity(m) >= this.MIN_SEVERITY_SCORE);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if content is noise that should be filtered out
|
|
126
|
+
*/
|
|
127
|
+
isNoiseContent(content) {
|
|
128
|
+
const firstChunk = content.substring(0, 500);
|
|
129
|
+
return this.NOISE_PATTERNS.some((pattern) => pattern.test(firstChunk));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Extract mistakes from tool execution errors
|
|
133
|
+
*/
|
|
134
|
+
extractToolErrors(toolResults, messages) {
|
|
135
|
+
const mistakes = [];
|
|
136
|
+
for (const result of toolResults) {
|
|
137
|
+
if (!result.is_error) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const message = messages.find((m) => m.id === result.message_id);
|
|
141
|
+
if (!message) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// Combine ALL error sources for better context
|
|
145
|
+
// stderr might just have "exit code 255" while content has the actual error
|
|
146
|
+
const errorParts = [];
|
|
147
|
+
if (result.stderr) {
|
|
148
|
+
errorParts.push(result.stderr);
|
|
149
|
+
}
|
|
150
|
+
if (result.stdout) {
|
|
151
|
+
errorParts.push(result.stdout);
|
|
152
|
+
}
|
|
153
|
+
if (result.content) {
|
|
154
|
+
errorParts.push(result.content);
|
|
155
|
+
}
|
|
156
|
+
const errorContent = errorParts.join("\n");
|
|
157
|
+
const mistakeType = this.classifyMistakeType(errorContent);
|
|
158
|
+
mistakes.push({
|
|
159
|
+
id: nanoid(),
|
|
160
|
+
conversation_id: message.conversation_id,
|
|
161
|
+
message_id: message.id,
|
|
162
|
+
mistake_type: mistakeType || "tool_error",
|
|
163
|
+
what_went_wrong: this.summarizeError(errorContent),
|
|
164
|
+
correction: this.findCorrection(message, messages),
|
|
165
|
+
files_affected: this.extractFilesFromError(errorContent),
|
|
166
|
+
timestamp: result.timestamp,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return mistakes;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Extract mistakes from user corrections
|
|
173
|
+
*/
|
|
174
|
+
extractUserCorrections(messages) {
|
|
175
|
+
const mistakes = [];
|
|
176
|
+
for (let i = 0; i < messages.length; i++) {
|
|
177
|
+
const message = messages[i];
|
|
178
|
+
if (message.role !== "user" || !message.content) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const content = message.content;
|
|
182
|
+
// Check if this is a correction
|
|
183
|
+
const isCorrection = this.CORRECTION_INDICATORS.some((pattern) => pattern.test(content));
|
|
184
|
+
if (!isCorrection) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
// Find the previous assistant message
|
|
188
|
+
const previousAssistant = this.findPreviousAssistantMessage(messages, i);
|
|
189
|
+
if (!previousAssistant) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const mistakeType = this.classifyMistakeType(message.content);
|
|
193
|
+
mistakes.push({
|
|
194
|
+
id: nanoid(),
|
|
195
|
+
conversation_id: message.conversation_id,
|
|
196
|
+
message_id: previousAssistant.id,
|
|
197
|
+
mistake_type: mistakeType || "misunderstanding",
|
|
198
|
+
what_went_wrong: this.extractWhatWentWrong(message.content),
|
|
199
|
+
correction: this.extractCorrection(message.content),
|
|
200
|
+
user_correction_message: message.content,
|
|
201
|
+
files_affected: this.extractFilesFromMessage(message),
|
|
202
|
+
timestamp: message.timestamp,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return mistakes;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Extract mistakes from error discussions in messages
|
|
209
|
+
*/
|
|
210
|
+
extractErrorDiscussions(messages) {
|
|
211
|
+
const mistakes = [];
|
|
212
|
+
for (const message of messages) {
|
|
213
|
+
if (message.role !== "assistant" || !message.content) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const content = message.content;
|
|
217
|
+
// Check if message discusses an error
|
|
218
|
+
const hasErrorDiscussion = this.ERROR_INDICATORS.some((pattern) => pattern.test(content));
|
|
219
|
+
if (!hasErrorDiscussion) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
// Extract error discussion
|
|
223
|
+
const errorText = this.extractErrorDiscussion(message.content);
|
|
224
|
+
if (!errorText) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
const mistakeType = this.classifyMistakeType(errorText);
|
|
228
|
+
mistakes.push({
|
|
229
|
+
id: nanoid(),
|
|
230
|
+
conversation_id: message.conversation_id,
|
|
231
|
+
message_id: message.id,
|
|
232
|
+
mistake_type: mistakeType || "logic_error",
|
|
233
|
+
what_went_wrong: errorText,
|
|
234
|
+
correction: this.extractSolutionFromSameMessage(message.content),
|
|
235
|
+
files_affected: this.extractFilesFromMessage(message),
|
|
236
|
+
timestamp: message.timestamp,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return mistakes;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Classify the type of mistake
|
|
243
|
+
*/
|
|
244
|
+
classifyMistakeType(text) {
|
|
245
|
+
for (const [type, patterns] of Object.entries(this.MISTAKE_PATTERNS)) {
|
|
246
|
+
for (const pattern of patterns) {
|
|
247
|
+
if (pattern.test(text)) {
|
|
248
|
+
return type;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Summarize error message - find the most descriptive error line
|
|
256
|
+
*/
|
|
257
|
+
summarizeError(errorText) {
|
|
258
|
+
const lines = errorText.split("\n").map(l => l.trim()).filter(l => l.length > 0);
|
|
259
|
+
if (lines.length === 0) {
|
|
260
|
+
return "Unknown error";
|
|
261
|
+
}
|
|
262
|
+
// Patterns that indicate a descriptive error (prioritize these)
|
|
263
|
+
const descriptivePatterns = [
|
|
264
|
+
/permission denied/i,
|
|
265
|
+
/host key verification failed/i,
|
|
266
|
+
/connection refused/i,
|
|
267
|
+
/no such file or directory/i,
|
|
268
|
+
/command not found/i,
|
|
269
|
+
/authentication failed/i,
|
|
270
|
+
/timeout/i,
|
|
271
|
+
/could not resolve/i,
|
|
272
|
+
/network is unreachable/i,
|
|
273
|
+
/operation not permitted/i,
|
|
274
|
+
/access denied/i,
|
|
275
|
+
/invalid argument/i,
|
|
276
|
+
/no space left/i,
|
|
277
|
+
/disk quota exceeded/i,
|
|
278
|
+
/broken pipe/i,
|
|
279
|
+
/connection reset/i,
|
|
280
|
+
/refused|denied|failed|error:|fatal:/i,
|
|
281
|
+
];
|
|
282
|
+
// Find the first line matching a descriptive pattern
|
|
283
|
+
for (const line of lines) {
|
|
284
|
+
for (const pattern of descriptivePatterns) {
|
|
285
|
+
if (pattern.test(line)) {
|
|
286
|
+
return line.length > 300 ? line.substring(0, 300) + "..." : line;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Skip generic "exit code" lines if there's more content
|
|
291
|
+
const nonExitCodeLines = lines.filter(l => !/^exit\s*code\s*\d+$/i.test(l));
|
|
292
|
+
const bestLine = nonExitCodeLines.length > 0 ? nonExitCodeLines[0] : lines[0];
|
|
293
|
+
return bestLine.length > 300 ? bestLine.substring(0, 300) + "..." : bestLine;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Find correction in subsequent messages
|
|
297
|
+
*/
|
|
298
|
+
findCorrection(errorMessage, allMessages) {
|
|
299
|
+
const index = allMessages.findIndex((m) => m.id === errorMessage.id);
|
|
300
|
+
if (index === -1) {
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
// Look at next few messages for a fix
|
|
304
|
+
const nextMessages = allMessages.slice(index + 1, index + 5);
|
|
305
|
+
for (const msg of nextMessages) {
|
|
306
|
+
if (msg.role === "assistant" && msg.content) {
|
|
307
|
+
// Look for fix indicators
|
|
308
|
+
if (/(?:fixed|resolved|corrected|solved)/i.test(msg.content)) {
|
|
309
|
+
return msg.content.substring(0, 500);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return undefined;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Extract files mentioned in error
|
|
317
|
+
*/
|
|
318
|
+
extractFilesFromError(errorText) {
|
|
319
|
+
const files = [];
|
|
320
|
+
// Common file path patterns
|
|
321
|
+
const filePathPattern = /(?:\/|\.\/|\.\.\/)?(?:[\w-]+\/)*[\w-]+\.[\w]+/g;
|
|
322
|
+
const matches = errorText.match(filePathPattern);
|
|
323
|
+
if (matches) {
|
|
324
|
+
files.push(...matches);
|
|
325
|
+
}
|
|
326
|
+
return [...new Set(files)];
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Extract files from message metadata
|
|
330
|
+
*/
|
|
331
|
+
extractFilesFromMessage(message) {
|
|
332
|
+
const files = [];
|
|
333
|
+
if (message.metadata) {
|
|
334
|
+
const metadataStr = JSON.stringify(message.metadata);
|
|
335
|
+
const filePathPattern = /(?:\/[\w-]+)+\.[\w]+/g;
|
|
336
|
+
const matches = metadataStr.match(filePathPattern);
|
|
337
|
+
if (matches) {
|
|
338
|
+
files.push(...matches);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return [...new Set(files)];
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Find previous assistant message
|
|
345
|
+
*/
|
|
346
|
+
findPreviousAssistantMessage(messages, currentIndex) {
|
|
347
|
+
for (let i = currentIndex - 1; i >= 0; i--) {
|
|
348
|
+
if (messages[i].role === "assistant") {
|
|
349
|
+
return messages[i];
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Extract what went wrong from correction message
|
|
356
|
+
*/
|
|
357
|
+
extractWhatWentWrong(correctionText) {
|
|
358
|
+
// Remove correction indicators
|
|
359
|
+
let cleaned = correctionText;
|
|
360
|
+
for (const pattern of this.CORRECTION_INDICATORS) {
|
|
361
|
+
cleaned = cleaned.replace(pattern, "");
|
|
362
|
+
}
|
|
363
|
+
// Take first sentence or up to 300 characters
|
|
364
|
+
const sentences = cleaned.split(/\.|!|\?/);
|
|
365
|
+
const firstSentence = sentences[0]?.trim();
|
|
366
|
+
return firstSentence && firstSentence.length > 0
|
|
367
|
+
? firstSentence.substring(0, 300)
|
|
368
|
+
: cleaned.substring(0, 300);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Extract correction from user message
|
|
372
|
+
*/
|
|
373
|
+
extractCorrection(correctionText) {
|
|
374
|
+
// Look for "instead" or "should" patterns
|
|
375
|
+
const insteadMatch = correctionText.match(/instead[,\s]+(.+?)(?:\.|$)/i);
|
|
376
|
+
if (insteadMatch) {
|
|
377
|
+
return insteadMatch[1].trim();
|
|
378
|
+
}
|
|
379
|
+
const shouldMatch = correctionText.match(/should\s+(?:have\s+)?(.+?)(?:\.|$)/i);
|
|
380
|
+
if (shouldMatch) {
|
|
381
|
+
return shouldMatch[1].trim();
|
|
382
|
+
}
|
|
383
|
+
return undefined;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Extract error discussion from message
|
|
387
|
+
*/
|
|
388
|
+
extractErrorDiscussion(content) {
|
|
389
|
+
// Find sentences containing error indicators
|
|
390
|
+
const sentences = content.split(/\.|!|\?/);
|
|
391
|
+
for (const sentence of sentences) {
|
|
392
|
+
if (this.ERROR_INDICATORS.some((pattern) => pattern.test(sentence))) {
|
|
393
|
+
return sentence.trim();
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return undefined;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Extract solution from same message that discusses error
|
|
400
|
+
*/
|
|
401
|
+
extractSolutionFromSameMessage(content) {
|
|
402
|
+
// Look for solution indicators
|
|
403
|
+
const solutionPattern = /(?:to fix|solution|resolved by|corrected by|fixed by)\s+(.+?)(?:\.|$)/i;
|
|
404
|
+
const match = content.match(solutionPattern);
|
|
405
|
+
return match?.[1]?.trim();
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Deduplicate similar mistakes
|
|
409
|
+
*/
|
|
410
|
+
deduplicateMistakes(mistakes) {
|
|
411
|
+
const unique = [];
|
|
412
|
+
const seen = new Set();
|
|
413
|
+
for (const mistake of mistakes) {
|
|
414
|
+
// Create signature including message_id to avoid collisions
|
|
415
|
+
// between different mistakes with similar text in the same conversation
|
|
416
|
+
const textPrefix = mistake.what_went_wrong.substring(0, 100);
|
|
417
|
+
const signature = `${mistake.message_id}_${textPrefix}_${mistake.timestamp}`;
|
|
418
|
+
if (!seen.has(signature)) {
|
|
419
|
+
seen.add(signature);
|
|
420
|
+
unique.push(mistake);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return unique;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Score mistake severity (for prioritization)
|
|
427
|
+
*/
|
|
428
|
+
scoreMistakeSeverity(mistake) {
|
|
429
|
+
let score = 0;
|
|
430
|
+
// Has correction
|
|
431
|
+
if (mistake.correction) {
|
|
432
|
+
score += 2;
|
|
433
|
+
}
|
|
434
|
+
// User explicitly corrected
|
|
435
|
+
if (mistake.user_correction_message) {
|
|
436
|
+
score += 3;
|
|
437
|
+
}
|
|
438
|
+
// Affects files
|
|
439
|
+
if (mistake.files_affected.length > 0) {
|
|
440
|
+
score += 2;
|
|
441
|
+
}
|
|
442
|
+
// Type-based severity
|
|
443
|
+
switch (mistake.mistake_type) {
|
|
444
|
+
case "logic_error":
|
|
445
|
+
score += 3;
|
|
446
|
+
break;
|
|
447
|
+
case "wrong_approach":
|
|
448
|
+
score += 2;
|
|
449
|
+
break;
|
|
450
|
+
case "syntax_error":
|
|
451
|
+
score += 1;
|
|
452
|
+
break;
|
|
453
|
+
case "tool_error":
|
|
454
|
+
score += 1;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
return score;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=MistakeExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MistakeExtractor.js","sourceRoot":"","sources":["../../src/parsers/MistakeExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Requirements and Validations Extractor - Tracks constraints, dependencies, and testing context.
|
|
3
|
+
*
|
|
4
|
+
* This extractor analyzes conversation messages and tool executions to identify:
|
|
5
|
+
* - Requirements (dependencies, performance, compatibility, business constraints)
|
|
6
|
+
* - Validations (test runs, results, and performance data)
|
|
7
|
+
*
|
|
8
|
+
* Helps document:
|
|
9
|
+
* - What dependencies are required and why
|
|
10
|
+
* - Performance requirements and constraints
|
|
11
|
+
* - Compatibility requirements (versions, platforms)
|
|
12
|
+
* - Business rules and limitations
|
|
13
|
+
* - Test executions and their results
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const extractor = new RequirementsExtractor();
|
|
18
|
+
* const requirements = extractor.extractRequirements(messages);
|
|
19
|
+
* const validations = extractor.extractValidations(toolUses, toolResults, messages);
|
|
20
|
+
*
|
|
21
|
+
* console.log(`Found ${requirements.length} requirements`);
|
|
22
|
+
* console.log(`Found ${validations.length} test validations`);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import type { Message, ToolUse, ToolResult } from "./ConversationParser.js";
|
|
26
|
+
/**
|
|
27
|
+
* Represents a requirement or constraint for the system.
|
|
28
|
+
*/
|
|
29
|
+
export interface Requirement {
|
|
30
|
+
/** Unique requirement identifier */
|
|
31
|
+
id: string;
|
|
32
|
+
/** Category of requirement */
|
|
33
|
+
type: "dependency" | "performance" | "compatibility" | "business";
|
|
34
|
+
/** Description of the requirement */
|
|
35
|
+
description: string;
|
|
36
|
+
/** Why this requirement exists */
|
|
37
|
+
rationale?: string;
|
|
38
|
+
/** Components affected by this requirement */
|
|
39
|
+
affects_components: string[];
|
|
40
|
+
/** Conversation where requirement was discussed */
|
|
41
|
+
conversation_id: string;
|
|
42
|
+
/** Message containing the requirement */
|
|
43
|
+
message_id: string;
|
|
44
|
+
/** When the requirement was documented */
|
|
45
|
+
timestamp: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Represents a test validation or verification.
|
|
49
|
+
*/
|
|
50
|
+
export interface Validation {
|
|
51
|
+
/** Unique validation identifier */
|
|
52
|
+
id: string;
|
|
53
|
+
/** Conversation where test was run */
|
|
54
|
+
conversation_id: string;
|
|
55
|
+
/** Description of what was tested */
|
|
56
|
+
what_was_tested: string;
|
|
57
|
+
/** Command used to run the test */
|
|
58
|
+
test_command?: string;
|
|
59
|
+
/** Test result status */
|
|
60
|
+
result: "passed" | "failed" | "error";
|
|
61
|
+
/** Performance metrics from the test */
|
|
62
|
+
performance_data?: Record<string, unknown>;
|
|
63
|
+
/** Files that were tested */
|
|
64
|
+
files_tested: string[];
|
|
65
|
+
/** When the test was run */
|
|
66
|
+
timestamp: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extracts requirements and validations from conversation history.
|
|
70
|
+
*
|
|
71
|
+
* Analyzes messages for requirement patterns and tool executions for test results.
|
|
72
|
+
*/
|
|
73
|
+
export declare class RequirementsExtractor {
|
|
74
|
+
private readonly REQUIREMENT_PATTERNS;
|
|
75
|
+
private readonly TEST_PATTERNS;
|
|
76
|
+
/**
|
|
77
|
+
* Get combined output from tool result (stdout + stderr + content)
|
|
78
|
+
* Test output may go to either stdout or stderr depending on the tool
|
|
79
|
+
*/
|
|
80
|
+
private getToolOutput;
|
|
81
|
+
/**
|
|
82
|
+
* Extract requirements from conversation messages.
|
|
83
|
+
*
|
|
84
|
+
* Analyzes messages using pattern matching to identify four types of requirements:
|
|
85
|
+
* - Dependency: Required libraries, packages, modules
|
|
86
|
+
* - Performance: Speed, latency, throughput constraints
|
|
87
|
+
* - Compatibility: Version requirements, platform support
|
|
88
|
+
* - Business: Business rules, limitations, constraints
|
|
89
|
+
*
|
|
90
|
+
* @param messages - Array of conversation messages to analyze
|
|
91
|
+
* @returns Array of extracted Requirement objects
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const extractor = new RequirementsExtractor();
|
|
96
|
+
* const requirements = extractor.extractRequirements(messages);
|
|
97
|
+
*
|
|
98
|
+
* // Find all dependency requirements
|
|
99
|
+
* const deps = requirements.filter(r => r.type === 'dependency');
|
|
100
|
+
* deps.forEach(d => console.log(`${d.description} - ${d.rationale}`));
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
extractRequirements(messages: Message[]): Requirement[];
|
|
104
|
+
/**
|
|
105
|
+
* Extract validations from tool executions.
|
|
106
|
+
*
|
|
107
|
+
* Analyzes Bash tool uses to identify test command executions and their results.
|
|
108
|
+
* Captures test runs including pass/fail status, performance data, and files tested.
|
|
109
|
+
*
|
|
110
|
+
* Recognized test commands:
|
|
111
|
+
* - npm/yarn/pnpm test
|
|
112
|
+
* - pytest
|
|
113
|
+
* - jest/mocha
|
|
114
|
+
* - cargo test (Rust)
|
|
115
|
+
* - go test (Go)
|
|
116
|
+
*
|
|
117
|
+
* @param toolUses - Array of tool invocations
|
|
118
|
+
* @param toolResults - Array of tool execution results
|
|
119
|
+
* @param messages - Array of conversation messages for context
|
|
120
|
+
* @returns Array of extracted Validation objects
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const extractor = new RequirementsExtractor();
|
|
125
|
+
* const validations = extractor.extractValidations(toolUses, toolResults, messages);
|
|
126
|
+
*
|
|
127
|
+
* // Find failed tests
|
|
128
|
+
* const failures = validations.filter(v => v.result === 'failed');
|
|
129
|
+
* console.log(`${failures.length} test failures found`);
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
extractValidations(toolUses: ToolUse[], toolResults: ToolResult[], messages: Message[]): Validation[];
|
|
133
|
+
/**
|
|
134
|
+
* Parse a requirement from pattern match
|
|
135
|
+
*/
|
|
136
|
+
private parseRequirement;
|
|
137
|
+
/**
|
|
138
|
+
* Extract rationale from requirement text
|
|
139
|
+
*/
|
|
140
|
+
private extractRationale;
|
|
141
|
+
/**
|
|
142
|
+
* Extract affected components from message metadata
|
|
143
|
+
*/
|
|
144
|
+
private extractAffectedComponents;
|
|
145
|
+
/**
|
|
146
|
+
* Extract what was tested from command and result
|
|
147
|
+
*/
|
|
148
|
+
private extractWhatWasTested;
|
|
149
|
+
/**
|
|
150
|
+
* Determine test result from tool result
|
|
151
|
+
*/
|
|
152
|
+
private determineTestResult;
|
|
153
|
+
/**
|
|
154
|
+
* Extract performance data from test results
|
|
155
|
+
*/
|
|
156
|
+
private extractPerformanceData;
|
|
157
|
+
/**
|
|
158
|
+
* Extract files that were tested
|
|
159
|
+
*/
|
|
160
|
+
private extractTestedFiles;
|
|
161
|
+
/**
|
|
162
|
+
* Deduplicate similar requirements
|
|
163
|
+
*/
|
|
164
|
+
private deduplicateRequirements;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=RequirementsExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequirementsExtractor.d.ts","sourceRoot":"","sources":["../../src/parsers/RequirementsExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;IAClE,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,6BAA6B;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAmBnC;IAGF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAQ5B;IAEF;;;OAGG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE;IA8BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,kBAAkB,CAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,OAAO,EAAE,GAClB,UAAU,EAAE;IAuCf;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0BjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAchC"}
|