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,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Injector
|
|
3
|
+
*
|
|
4
|
+
* Intelligently selects and formats context for injection into new conversations.
|
|
5
|
+
* Combines working memory, handoffs, decisions, and file history.
|
|
6
|
+
*/
|
|
7
|
+
import { WorkingMemoryStore } from "../memory/WorkingMemoryStore.js";
|
|
8
|
+
import { SessionHandoffStore } from "../handoff/SessionHandoffStore.js";
|
|
9
|
+
export class ContextInjector {
|
|
10
|
+
memoryStore;
|
|
11
|
+
handoffStore;
|
|
12
|
+
constructor(db) {
|
|
13
|
+
this.memoryStore = new WorkingMemoryStore(db);
|
|
14
|
+
this.handoffStore = new SessionHandoffStore(db);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get relevant context for a new conversation
|
|
18
|
+
*/
|
|
19
|
+
async getRelevantContext(options) {
|
|
20
|
+
const { query, projectPath, maxTokens = 2000, sources = ["history", "decisions", "memory", "handoffs"], } = options;
|
|
21
|
+
const items = [];
|
|
22
|
+
// 1. Get most recent handoff
|
|
23
|
+
let handoff;
|
|
24
|
+
if (sources.includes("handoffs")) {
|
|
25
|
+
const handoffs = this.handoffStore.listHandoffs(projectPath, {
|
|
26
|
+
limit: 1,
|
|
27
|
+
includeResumed: false,
|
|
28
|
+
});
|
|
29
|
+
if (handoffs.length > 0) {
|
|
30
|
+
handoff = this.handoffStore.getHandoff(handoffs[0].id) || undefined;
|
|
31
|
+
if (handoff) {
|
|
32
|
+
items.push({
|
|
33
|
+
type: "handoff",
|
|
34
|
+
content: `Previous session context: ${handoff.contextSummary}`,
|
|
35
|
+
priority: "critical",
|
|
36
|
+
timestamp: handoff.createdAt,
|
|
37
|
+
tokenEstimate: this.estimateTokens(handoff.contextSummary) + 20,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// 2. Get relevant working memory items
|
|
43
|
+
const memory = [];
|
|
44
|
+
if (sources.includes("memory")) {
|
|
45
|
+
if (query) {
|
|
46
|
+
// Semantic search for relevant items
|
|
47
|
+
const relevant = this.memoryStore.recallRelevant({
|
|
48
|
+
query,
|
|
49
|
+
projectPath,
|
|
50
|
+
limit: 10,
|
|
51
|
+
});
|
|
52
|
+
memory.push(...relevant);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Get recent items
|
|
56
|
+
const recent = this.memoryStore.list(projectPath, { limit: 10 });
|
|
57
|
+
memory.push(...recent);
|
|
58
|
+
}
|
|
59
|
+
for (const item of memory) {
|
|
60
|
+
items.push({
|
|
61
|
+
type: "memory",
|
|
62
|
+
content: `${item.key}: ${item.value}`,
|
|
63
|
+
priority: this.getMemoryPriority(item),
|
|
64
|
+
timestamp: item.updatedAt,
|
|
65
|
+
tokenEstimate: this.estimateTokens(`${item.key}: ${item.value}`),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 3. Get decisions from handoff
|
|
70
|
+
const decisions = [];
|
|
71
|
+
if (sources.includes("decisions") && handoff) {
|
|
72
|
+
decisions.push(...handoff.decisions.slice(0, 10));
|
|
73
|
+
for (const decision of decisions) {
|
|
74
|
+
items.push({
|
|
75
|
+
type: "decision",
|
|
76
|
+
content: decision.text,
|
|
77
|
+
priority: "high",
|
|
78
|
+
timestamp: decision.timestamp,
|
|
79
|
+
tokenEstimate: this.estimateTokens(decision.text),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// 4. Get recent files from handoff
|
|
84
|
+
const recentFiles = [];
|
|
85
|
+
if (sources.includes("history") && handoff) {
|
|
86
|
+
recentFiles.push(...handoff.activeFiles.slice(0, 10));
|
|
87
|
+
for (const file of recentFiles) {
|
|
88
|
+
items.push({
|
|
89
|
+
type: "file",
|
|
90
|
+
content: `${file.lastAction}: ${file.path}`,
|
|
91
|
+
priority: "medium",
|
|
92
|
+
timestamp: file.timestamp,
|
|
93
|
+
tokenEstimate: this.estimateTokens(`${file.lastAction}: ${file.path}`),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// 5. Select items within token budget
|
|
98
|
+
const selectedItems = this.selectWithinBudget(items, maxTokens);
|
|
99
|
+
// 6. Generate summary
|
|
100
|
+
const summary = this.generateSummary(selectedItems, projectPath);
|
|
101
|
+
// 7. Calculate total token estimate
|
|
102
|
+
const tokenEstimate = selectedItems.reduce((sum, item) => sum + item.tokenEstimate, 0);
|
|
103
|
+
return {
|
|
104
|
+
handoff,
|
|
105
|
+
decisions,
|
|
106
|
+
memory,
|
|
107
|
+
recentFiles,
|
|
108
|
+
summary,
|
|
109
|
+
tokenEstimate,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Format context for direct injection into conversation
|
|
114
|
+
*/
|
|
115
|
+
formatForInjection(context) {
|
|
116
|
+
const parts = [];
|
|
117
|
+
// Add handoff summary if available
|
|
118
|
+
if (context.handoff) {
|
|
119
|
+
parts.push("## Previous Session Context");
|
|
120
|
+
parts.push(context.handoff.contextSummary);
|
|
121
|
+
parts.push("");
|
|
122
|
+
}
|
|
123
|
+
// Add key decisions
|
|
124
|
+
if (context.decisions.length > 0) {
|
|
125
|
+
parts.push("## Recent Decisions");
|
|
126
|
+
for (const decision of context.decisions.slice(0, 5)) {
|
|
127
|
+
parts.push(`- ${decision.text}`);
|
|
128
|
+
}
|
|
129
|
+
parts.push("");
|
|
130
|
+
}
|
|
131
|
+
// Add working memory items
|
|
132
|
+
if (context.memory.length > 0) {
|
|
133
|
+
parts.push("## Remembered Context");
|
|
134
|
+
for (const item of context.memory.slice(0, 5)) {
|
|
135
|
+
parts.push(`- **${item.key}**: ${item.value}`);
|
|
136
|
+
}
|
|
137
|
+
parts.push("");
|
|
138
|
+
}
|
|
139
|
+
// Add recent file activity
|
|
140
|
+
if (context.recentFiles.length > 0) {
|
|
141
|
+
parts.push("## Recent Files");
|
|
142
|
+
for (const file of context.recentFiles.slice(0, 5)) {
|
|
143
|
+
parts.push(`- [${file.lastAction}] ${file.path}`);
|
|
144
|
+
}
|
|
145
|
+
parts.push("");
|
|
146
|
+
}
|
|
147
|
+
return parts.join("\n");
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get priority for a memory item based on tags and recency
|
|
151
|
+
*/
|
|
152
|
+
getMemoryPriority(item) {
|
|
153
|
+
const tags = item.tags;
|
|
154
|
+
if (tags.includes("critical") || tags.includes("important")) {
|
|
155
|
+
return "critical";
|
|
156
|
+
}
|
|
157
|
+
if (tags.includes("decision") || tags.includes("error")) {
|
|
158
|
+
return "high";
|
|
159
|
+
}
|
|
160
|
+
if (tags.includes("task") || tags.includes("file")) {
|
|
161
|
+
return "medium";
|
|
162
|
+
}
|
|
163
|
+
return "low";
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Estimate token count for a string (rough approximation)
|
|
167
|
+
*/
|
|
168
|
+
estimateTokens(text) {
|
|
169
|
+
// Rough estimate: ~4 chars per token for English
|
|
170
|
+
return Math.ceil(text.length / 4);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Select items within token budget, prioritizing by importance
|
|
174
|
+
*/
|
|
175
|
+
selectWithinBudget(items, maxTokens) {
|
|
176
|
+
// Sort by priority (critical first) then by recency
|
|
177
|
+
const priorityOrder = {
|
|
178
|
+
critical: 0,
|
|
179
|
+
high: 1,
|
|
180
|
+
medium: 2,
|
|
181
|
+
low: 3,
|
|
182
|
+
};
|
|
183
|
+
const sorted = [...items].sort((a, b) => {
|
|
184
|
+
const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
185
|
+
if (priorityDiff !== 0) {
|
|
186
|
+
return priorityDiff;
|
|
187
|
+
}
|
|
188
|
+
// More recent first
|
|
189
|
+
return b.timestamp - a.timestamp;
|
|
190
|
+
});
|
|
191
|
+
// Select within budget
|
|
192
|
+
const selected = [];
|
|
193
|
+
let usedTokens = 0;
|
|
194
|
+
for (const item of sorted) {
|
|
195
|
+
if (usedTokens + item.tokenEstimate <= maxTokens) {
|
|
196
|
+
selected.push(item);
|
|
197
|
+
usedTokens += item.tokenEstimate;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
// Stop if we can't fit any more
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return selected;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Generate a summary of the injected context
|
|
208
|
+
*/
|
|
209
|
+
generateSummary(items, projectPath) {
|
|
210
|
+
const counts = {
|
|
211
|
+
handoff: 0,
|
|
212
|
+
decision: 0,
|
|
213
|
+
memory: 0,
|
|
214
|
+
file: 0,
|
|
215
|
+
};
|
|
216
|
+
for (const item of items) {
|
|
217
|
+
counts[item.type]++;
|
|
218
|
+
}
|
|
219
|
+
const parts = [`Context for ${projectPath}:`];
|
|
220
|
+
if (counts.handoff > 0) {
|
|
221
|
+
parts.push("Previous session available");
|
|
222
|
+
}
|
|
223
|
+
if (counts.decision > 0) {
|
|
224
|
+
parts.push(`${counts.decision} decision(s)`);
|
|
225
|
+
}
|
|
226
|
+
if (counts.memory > 0) {
|
|
227
|
+
parts.push(`${counts.memory} memory item(s)`);
|
|
228
|
+
}
|
|
229
|
+
if (counts.file > 0) {
|
|
230
|
+
parts.push(`${counts.file} file(s)`);
|
|
231
|
+
}
|
|
232
|
+
return parts.join(", ");
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=ContextInjector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextInjector.js","sourceRoot":"","sources":["../../src/context/ContextInjector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeAnalyzer - Processes code graph data from CODE-GRAPH-RAG-MCP
|
|
3
|
+
*
|
|
4
|
+
* Note: This class processes data that should be fetched from CODE-GRAPH-RAG-MCP
|
|
5
|
+
* The actual MCP calls should be made by the tool handler and passed to this analyzer
|
|
6
|
+
*/
|
|
7
|
+
import type { CodeData, RawEntity, RawHotspot, RawClone } from './types.js';
|
|
8
|
+
export interface CodeGraphRagData {
|
|
9
|
+
entities?: RawEntity[];
|
|
10
|
+
hotspots?: RawHotspot[];
|
|
11
|
+
clones?: RawClone[];
|
|
12
|
+
graph?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare class CodeAnalyzer {
|
|
15
|
+
/**
|
|
16
|
+
* Process code graph data from CODE-GRAPH-RAG-MCP
|
|
17
|
+
*/
|
|
18
|
+
analyze(codeGraphData: CodeGraphRagData): Promise<CodeData>;
|
|
19
|
+
private parseEntities;
|
|
20
|
+
private normalizeEntityType;
|
|
21
|
+
private groupEntitiesByFile;
|
|
22
|
+
private parseHotspots;
|
|
23
|
+
private parseClones;
|
|
24
|
+
/**
|
|
25
|
+
* Extract file paths from code data for cross-referencing
|
|
26
|
+
*/
|
|
27
|
+
extractFilePaths(codeData: CodeData): string[];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=CodeAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeAnalyzer.d.ts","sourceRoot":"","sources":["../../src/documentation/CodeAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,QAAQ,EAKR,SAAS,EACT,UAAU,EACV,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB;;OAEG;IACG,OAAO,CAAC,aAAa,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmBjE,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE;CAqB/C"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeAnalyzer - Processes code graph data from CODE-GRAPH-RAG-MCP
|
|
3
|
+
*
|
|
4
|
+
* Note: This class processes data that should be fetched from CODE-GRAPH-RAG-MCP
|
|
5
|
+
* The actual MCP calls should be made by the tool handler and passed to this analyzer
|
|
6
|
+
*/
|
|
7
|
+
export class CodeAnalyzer {
|
|
8
|
+
/**
|
|
9
|
+
* Process code graph data from CODE-GRAPH-RAG-MCP
|
|
10
|
+
*/
|
|
11
|
+
async analyze(codeGraphData) {
|
|
12
|
+
console.error('🔍 Processing codebase structure...');
|
|
13
|
+
const entities = this.parseEntities(codeGraphData.entities || []);
|
|
14
|
+
const files = this.groupEntitiesByFile(entities);
|
|
15
|
+
const hotspots = this.parseHotspots(codeGraphData.hotspots || []);
|
|
16
|
+
const clones = this.parseClones(codeGraphData.clones || []);
|
|
17
|
+
console.error(` Found ${entities.length} entities in ${files.length} files`);
|
|
18
|
+
return {
|
|
19
|
+
entities,
|
|
20
|
+
relationships: [],
|
|
21
|
+
files,
|
|
22
|
+
hotspots,
|
|
23
|
+
clones
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
parseEntities(rawEntities) {
|
|
27
|
+
if (!Array.isArray(rawEntities)) {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
return rawEntities.map(entity => ({
|
|
31
|
+
id: entity.id || entity.name || '',
|
|
32
|
+
name: entity.name || '',
|
|
33
|
+
type: this.normalizeEntityType(entity.type || ''),
|
|
34
|
+
filePath: entity.filePath || entity.file || '',
|
|
35
|
+
lineNumber: entity.lineNumber || entity.line,
|
|
36
|
+
complexity: entity.complexity,
|
|
37
|
+
description: entity.description
|
|
38
|
+
})).filter(e => e.id && e.name);
|
|
39
|
+
}
|
|
40
|
+
normalizeEntityType(type) {
|
|
41
|
+
const normalized = (type || '').toLowerCase();
|
|
42
|
+
if (normalized.includes('class')) {
|
|
43
|
+
return 'class';
|
|
44
|
+
}
|
|
45
|
+
if (normalized.includes('function') || normalized.includes('method')) {
|
|
46
|
+
return 'function';
|
|
47
|
+
}
|
|
48
|
+
if (normalized.includes('interface')) {
|
|
49
|
+
return 'interface';
|
|
50
|
+
}
|
|
51
|
+
if (normalized.includes('module')) {
|
|
52
|
+
return 'module';
|
|
53
|
+
}
|
|
54
|
+
if (normalized.includes('component')) {
|
|
55
|
+
return 'component';
|
|
56
|
+
}
|
|
57
|
+
return 'function';
|
|
58
|
+
}
|
|
59
|
+
groupEntitiesByFile(entities) {
|
|
60
|
+
const fileMap = new Map();
|
|
61
|
+
for (const entity of entities) {
|
|
62
|
+
if (!entity.filePath) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (!fileMap.has(entity.filePath)) {
|
|
66
|
+
fileMap.set(entity.filePath, []);
|
|
67
|
+
}
|
|
68
|
+
const fileEntities = fileMap.get(entity.filePath);
|
|
69
|
+
if (fileEntities) {
|
|
70
|
+
fileEntities.push(entity);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return Array.from(fileMap.entries()).map(([path, entities]) => ({
|
|
74
|
+
path,
|
|
75
|
+
size: 0, // Would need to read file to get actual size
|
|
76
|
+
entities
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
parseHotspots(rawHotspots) {
|
|
80
|
+
if (!Array.isArray(rawHotspots)) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
return rawHotspots.map(h => ({
|
|
84
|
+
filePath: h.filePath || h.file || h.path || '',
|
|
85
|
+
complexity: h.complexity || h.score || 0,
|
|
86
|
+
changeCount: h.changeCount || h.changes || 0,
|
|
87
|
+
metric: h.metric || 'complexity'
|
|
88
|
+
})).filter(h => h.filePath);
|
|
89
|
+
}
|
|
90
|
+
parseClones(rawClones) {
|
|
91
|
+
if (!Array.isArray(rawClones)) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
return rawClones.map(c => ({
|
|
95
|
+
files: Array.isArray(c.files) ? c.files : [],
|
|
96
|
+
similarity: c.similarity || c.score || 0,
|
|
97
|
+
description: c.description || 'Code duplication detected'
|
|
98
|
+
})).filter(c => c.files.length >= 2);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract file paths from code data for cross-referencing
|
|
102
|
+
*/
|
|
103
|
+
extractFilePaths(codeData) {
|
|
104
|
+
const paths = new Set();
|
|
105
|
+
for (const entity of codeData.entities) {
|
|
106
|
+
if (entity.filePath) {
|
|
107
|
+
paths.add(entity.filePath);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const file of codeData.files) {
|
|
111
|
+
paths.add(file.path);
|
|
112
|
+
}
|
|
113
|
+
for (const hotspot of codeData.hotspots) {
|
|
114
|
+
paths.add(hotspot.filePath);
|
|
115
|
+
}
|
|
116
|
+
for (const clone of codeData.clones) {
|
|
117
|
+
clone.files.forEach(f => paths.add(f));
|
|
118
|
+
}
|
|
119
|
+
return Array.from(paths);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=CodeAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeAnalyzer.js","sourceRoot":"","sources":["../../src/documentation/CodeAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationAnalyzer - Queries conversation memory database
|
|
3
|
+
*/
|
|
4
|
+
import type { SQLiteManager } from '../storage/SQLiteManager.js';
|
|
5
|
+
import type { ConversationData } from './types.js';
|
|
6
|
+
export declare class ConversationAnalyzer {
|
|
7
|
+
private db;
|
|
8
|
+
constructor(db: SQLiteManager);
|
|
9
|
+
/**
|
|
10
|
+
* Analyze conversations for a project
|
|
11
|
+
*/
|
|
12
|
+
analyze(projectPath: string, sessionId?: string): Promise<ConversationData>;
|
|
13
|
+
private getDecisions;
|
|
14
|
+
private getMistakes;
|
|
15
|
+
private getRequirements;
|
|
16
|
+
private getFileEdits;
|
|
17
|
+
private getGitCommits;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ConversationAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationAnalyzer.d.ts","sourceRoot":"","sources":["../../src/documentation/ConversationAnalyzer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAuD,MAAM,YAAY,CAAC;AAIxG,qBAAa,oBAAoB;IACnB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAErC;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoBjF,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,WAAW;IAgCnB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,aAAa;CA4BtB"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationAnalyzer - Queries conversation memory database
|
|
3
|
+
*/
|
|
4
|
+
import { safeJsonParse } from '../utils/safeJson.js';
|
|
5
|
+
export class ConversationAnalyzer {
|
|
6
|
+
db;
|
|
7
|
+
constructor(db) {
|
|
8
|
+
this.db = db;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Analyze conversations for a project
|
|
12
|
+
*/
|
|
13
|
+
async analyze(projectPath, sessionId) {
|
|
14
|
+
console.error('📊 Analyzing conversation history...');
|
|
15
|
+
const decisions = this.getDecisions(projectPath, sessionId);
|
|
16
|
+
const mistakes = this.getMistakes(projectPath, sessionId);
|
|
17
|
+
const requirements = this.getRequirements(projectPath, sessionId);
|
|
18
|
+
const fileEdits = this.getFileEdits(projectPath, sessionId);
|
|
19
|
+
const commits = this.getGitCommits(projectPath, sessionId);
|
|
20
|
+
console.error(` Found ${decisions.length} decisions, ${mistakes.length} mistakes`);
|
|
21
|
+
return {
|
|
22
|
+
decisions,
|
|
23
|
+
mistakes,
|
|
24
|
+
requirements,
|
|
25
|
+
fileEdits,
|
|
26
|
+
commits
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
getDecisions(projectPath, sessionId) {
|
|
30
|
+
let sql = `
|
|
31
|
+
SELECT d.*
|
|
32
|
+
FROM decisions d
|
|
33
|
+
JOIN conversations c ON d.conversation_id = c.id
|
|
34
|
+
WHERE c.project_path = ?
|
|
35
|
+
`;
|
|
36
|
+
if (sessionId) {
|
|
37
|
+
sql += ' AND c.id = ?';
|
|
38
|
+
}
|
|
39
|
+
sql += ' ORDER BY d.timestamp DESC';
|
|
40
|
+
const stmt = this.db.getDatabase().prepare(sql);
|
|
41
|
+
const rows = sessionId
|
|
42
|
+
? stmt.all(projectPath, sessionId)
|
|
43
|
+
: stmt.all(projectPath);
|
|
44
|
+
return rows.map((row) => ({
|
|
45
|
+
id: row.id,
|
|
46
|
+
conversation_id: row.conversation_id,
|
|
47
|
+
message_id: row.message_id,
|
|
48
|
+
decision_text: row.decision_text,
|
|
49
|
+
rationale: row.rationale || '',
|
|
50
|
+
alternatives_considered: safeJsonParse(row.alternatives_considered, []),
|
|
51
|
+
rejected_reasons: safeJsonParse(row.rejected_reasons, {}),
|
|
52
|
+
context: row.context,
|
|
53
|
+
related_files: safeJsonParse(row.related_files, []),
|
|
54
|
+
related_commits: safeJsonParse(row.related_commits, []),
|
|
55
|
+
timestamp: row.timestamp
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
getMistakes(projectPath, sessionId) {
|
|
59
|
+
let sql = `
|
|
60
|
+
SELECT m.*
|
|
61
|
+
FROM mistakes m
|
|
62
|
+
JOIN conversations c ON m.conversation_id = c.id
|
|
63
|
+
WHERE c.project_path = ?
|
|
64
|
+
`;
|
|
65
|
+
if (sessionId) {
|
|
66
|
+
sql += ' AND c.id = ?';
|
|
67
|
+
}
|
|
68
|
+
sql += ' ORDER BY m.timestamp DESC';
|
|
69
|
+
const stmt = this.db.getDatabase().prepare(sql);
|
|
70
|
+
const rows = sessionId
|
|
71
|
+
? stmt.all(projectPath, sessionId)
|
|
72
|
+
: stmt.all(projectPath);
|
|
73
|
+
return rows.map((row) => ({
|
|
74
|
+
id: row.id,
|
|
75
|
+
conversation_id: row.conversation_id,
|
|
76
|
+
what_went_wrong: row.what_went_wrong,
|
|
77
|
+
why_it_happened: '',
|
|
78
|
+
how_it_was_fixed: row.correction || '',
|
|
79
|
+
lesson_learned: row.user_correction_message || '',
|
|
80
|
+
related_files: safeJsonParse(row.files_affected, []),
|
|
81
|
+
severity: row.mistake_type || 'general',
|
|
82
|
+
timestamp: row.timestamp
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
getRequirements(projectPath, sessionId) {
|
|
86
|
+
let sql = `
|
|
87
|
+
SELECT r.*
|
|
88
|
+
FROM requirements r
|
|
89
|
+
JOIN conversations c ON r.conversation_id = c.id
|
|
90
|
+
WHERE c.project_path = ?
|
|
91
|
+
`;
|
|
92
|
+
if (sessionId) {
|
|
93
|
+
sql += ' AND c.id = ?';
|
|
94
|
+
}
|
|
95
|
+
sql += ' ORDER BY r.timestamp DESC';
|
|
96
|
+
const stmt = this.db.getDatabase().prepare(sql);
|
|
97
|
+
const rows = sessionId
|
|
98
|
+
? stmt.all(projectPath, sessionId)
|
|
99
|
+
: stmt.all(projectPath);
|
|
100
|
+
return rows.map((row) => ({
|
|
101
|
+
id: row.id,
|
|
102
|
+
requirement_type: row.type,
|
|
103
|
+
description: row.description,
|
|
104
|
+
rationale: row.rationale || '',
|
|
105
|
+
related_files: safeJsonParse(row.affects_components, []),
|
|
106
|
+
timestamp: row.timestamp
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
getFileEdits(projectPath, sessionId) {
|
|
110
|
+
let sql = `
|
|
111
|
+
SELECT fe.*
|
|
112
|
+
FROM file_edits fe
|
|
113
|
+
JOIN conversations c ON fe.conversation_id = c.id
|
|
114
|
+
WHERE c.project_path = ?
|
|
115
|
+
`;
|
|
116
|
+
if (sessionId) {
|
|
117
|
+
sql += ' AND c.id = ?';
|
|
118
|
+
}
|
|
119
|
+
sql += ' ORDER BY fe.snapshot_timestamp DESC LIMIT 1000';
|
|
120
|
+
const stmt = this.db.getDatabase().prepare(sql);
|
|
121
|
+
const rows = sessionId
|
|
122
|
+
? stmt.all(projectPath, sessionId)
|
|
123
|
+
: stmt.all(projectPath);
|
|
124
|
+
return rows.map((row) => ({
|
|
125
|
+
id: row.id,
|
|
126
|
+
conversation_id: row.conversation_id,
|
|
127
|
+
file_path: row.file_path,
|
|
128
|
+
edit_type: 'backup', // All file_edits are backups based on schema
|
|
129
|
+
timestamp: row.snapshot_timestamp
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
getGitCommits(projectPath, sessionId) {
|
|
133
|
+
let sql = `
|
|
134
|
+
SELECT gc.*
|
|
135
|
+
FROM git_commits gc
|
|
136
|
+
JOIN conversations c ON gc.conversation_id = c.id
|
|
137
|
+
WHERE c.project_path = ?
|
|
138
|
+
`;
|
|
139
|
+
if (sessionId) {
|
|
140
|
+
sql += ' AND c.id = ?';
|
|
141
|
+
}
|
|
142
|
+
sql += ' ORDER BY gc.timestamp DESC LIMIT 500';
|
|
143
|
+
const stmt = this.db.getDatabase().prepare(sql);
|
|
144
|
+
const rows = sessionId
|
|
145
|
+
? stmt.all(projectPath, sessionId)
|
|
146
|
+
: stmt.all(projectPath);
|
|
147
|
+
return rows.map((row) => ({
|
|
148
|
+
hash: row.hash,
|
|
149
|
+
conversation_id: row.conversation_id || '',
|
|
150
|
+
message: row.message,
|
|
151
|
+
author: row.author || 'Unknown',
|
|
152
|
+
timestamp: row.timestamp,
|
|
153
|
+
files_changed: safeJsonParse(row.files_changed, [])
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=ConversationAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationAnalyzer.js","sourceRoot":"","sources":["../../src/documentation/ConversationAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CrossReferencer - Links code entities with conversation data
|
|
3
|
+
*/
|
|
4
|
+
import type { CodeData, ConversationData, LinkedData } from './types.js';
|
|
5
|
+
export declare class CrossReferencer {
|
|
6
|
+
/**
|
|
7
|
+
* Link code and conversation data
|
|
8
|
+
*/
|
|
9
|
+
link(codeData: CodeData, conversationData: ConversationData): Promise<LinkedData>;
|
|
10
|
+
/**
|
|
11
|
+
* Group files into logical modules and link with conversation data
|
|
12
|
+
*/
|
|
13
|
+
private groupIntoModules;
|
|
14
|
+
/**
|
|
15
|
+
* Extract module path from file path (e.g., src/auth/token.ts → src/auth)
|
|
16
|
+
*/
|
|
17
|
+
private extractModulePath;
|
|
18
|
+
/**
|
|
19
|
+
* Convert path to human-readable module name
|
|
20
|
+
*/
|
|
21
|
+
private pathToModuleName;
|
|
22
|
+
/**
|
|
23
|
+
* Find decisions related to a module
|
|
24
|
+
*/
|
|
25
|
+
private findRelatedDecisions;
|
|
26
|
+
/**
|
|
27
|
+
* Find mistakes related to a module
|
|
28
|
+
*/
|
|
29
|
+
private findRelatedMistakes;
|
|
30
|
+
/**
|
|
31
|
+
* Find requirements related to a module
|
|
32
|
+
*/
|
|
33
|
+
private findRelatedRequirements;
|
|
34
|
+
/**
|
|
35
|
+
* Check if two paths are related (flexible matching)
|
|
36
|
+
*/
|
|
37
|
+
private isRelatedPath;
|
|
38
|
+
/**
|
|
39
|
+
* Calculate module complexity
|
|
40
|
+
*/
|
|
41
|
+
private calculateModuleComplexity;
|
|
42
|
+
/**
|
|
43
|
+
* Calculate how frequently a module changes
|
|
44
|
+
*/
|
|
45
|
+
private calculateChangeFrequency;
|
|
46
|
+
/**
|
|
47
|
+
* Extract module description from decisions and requirements
|
|
48
|
+
*/
|
|
49
|
+
private extractModuleDescription;
|
|
50
|
+
/**
|
|
51
|
+
* Build chronological timeline of events
|
|
52
|
+
*/
|
|
53
|
+
private buildTimeline;
|
|
54
|
+
/**
|
|
55
|
+
* Build quality report with context
|
|
56
|
+
*/
|
|
57
|
+
private buildQualityReport;
|
|
58
|
+
/**
|
|
59
|
+
* Summarize mistakes for learning
|
|
60
|
+
*/
|
|
61
|
+
private summarizeMistakes;
|
|
62
|
+
/**
|
|
63
|
+
* Calculate overall statistics
|
|
64
|
+
*/
|
|
65
|
+
private calculateStatistics;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=CrossReferencer.d.ts.map
|