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.
Files changed (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +349 -0
  3. package/dist/ConversationMemory.d.ts +231 -0
  4. package/dist/ConversationMemory.d.ts.map +1 -0
  5. package/dist/ConversationMemory.js +357 -0
  6. package/dist/ConversationMemory.js.map +1 -0
  7. package/dist/cache/QueryCache.d.ts +215 -0
  8. package/dist/cache/QueryCache.d.ts.map +1 -0
  9. package/dist/cache/QueryCache.js +294 -0
  10. package/dist/cache/QueryCache.js.map +1 -0
  11. package/dist/cli/commands.d.ts +9 -0
  12. package/dist/cli/commands.d.ts.map +1 -0
  13. package/dist/cli/commands.js +954 -0
  14. package/dist/cli/commands.js.map +1 -0
  15. package/dist/cli/help.d.ts +16 -0
  16. package/dist/cli/help.d.ts.map +1 -0
  17. package/dist/cli/help.js +361 -0
  18. package/dist/cli/help.js.map +1 -0
  19. package/dist/cli/index.d.ts +30 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +111 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/context/ContextInjector.d.ts +38 -0
  24. package/dist/context/ContextInjector.d.ts.map +1 -0
  25. package/dist/context/ContextInjector.js +235 -0
  26. package/dist/context/ContextInjector.js.map +1 -0
  27. package/dist/documentation/CodeAnalyzer.d.ts +29 -0
  28. package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
  29. package/dist/documentation/CodeAnalyzer.js +122 -0
  30. package/dist/documentation/CodeAnalyzer.js.map +1 -0
  31. package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
  32. package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
  33. package/dist/documentation/ConversationAnalyzer.js +157 -0
  34. package/dist/documentation/ConversationAnalyzer.js.map +1 -0
  35. package/dist/documentation/CrossReferencer.d.ts +67 -0
  36. package/dist/documentation/CrossReferencer.d.ts.map +1 -0
  37. package/dist/documentation/CrossReferencer.js +247 -0
  38. package/dist/documentation/CrossReferencer.js.map +1 -0
  39. package/dist/documentation/DocumentationGenerator.d.ts +22 -0
  40. package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
  41. package/dist/documentation/DocumentationGenerator.js +57 -0
  42. package/dist/documentation/DocumentationGenerator.js.map +1 -0
  43. package/dist/documentation/MarkdownFormatter.d.ts +26 -0
  44. package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
  45. package/dist/documentation/MarkdownFormatter.js +301 -0
  46. package/dist/documentation/MarkdownFormatter.js.map +1 -0
  47. package/dist/documentation/types.d.ts +176 -0
  48. package/dist/documentation/types.d.ts.map +1 -0
  49. package/dist/documentation/types.js +5 -0
  50. package/dist/documentation/types.js.map +1 -0
  51. package/dist/embeddings/ConfigManager.d.ts +46 -0
  52. package/dist/embeddings/ConfigManager.d.ts.map +1 -0
  53. package/dist/embeddings/ConfigManager.js +177 -0
  54. package/dist/embeddings/ConfigManager.js.map +1 -0
  55. package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
  56. package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
  57. package/dist/embeddings/EmbeddingConfig.js +132 -0
  58. package/dist/embeddings/EmbeddingConfig.js.map +1 -0
  59. package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
  60. package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  61. package/dist/embeddings/EmbeddingGenerator.js +157 -0
  62. package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
  63. package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
  64. package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
  65. package/dist/embeddings/EmbeddingProvider.js +6 -0
  66. package/dist/embeddings/EmbeddingProvider.js.map +1 -0
  67. package/dist/embeddings/ModelRegistry.d.ts +48 -0
  68. package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
  69. package/dist/embeddings/ModelRegistry.js +170 -0
  70. package/dist/embeddings/ModelRegistry.js.map +1 -0
  71. package/dist/embeddings/VectorStore.d.ts +114 -0
  72. package/dist/embeddings/VectorStore.d.ts.map +1 -0
  73. package/dist/embeddings/VectorStore.js +393 -0
  74. package/dist/embeddings/VectorStore.js.map +1 -0
  75. package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
  76. package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
  77. package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
  78. package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
  79. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
  80. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
  81. package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
  82. package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
  83. package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
  84. package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
  85. package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
  86. package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
  87. package/dist/handoff/SessionHandoffStore.d.ts +80 -0
  88. package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
  89. package/dist/handoff/SessionHandoffStore.js +314 -0
  90. package/dist/handoff/SessionHandoffStore.js.map +1 -0
  91. package/dist/index.d.ts +7 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +115 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/mcp-server.d.ts +27 -0
  96. package/dist/mcp-server.d.ts.map +1 -0
  97. package/dist/mcp-server.js +157 -0
  98. package/dist/mcp-server.js.map +1 -0
  99. package/dist/memory/WorkingMemoryStore.d.ts +83 -0
  100. package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
  101. package/dist/memory/WorkingMemoryStore.js +318 -0
  102. package/dist/memory/WorkingMemoryStore.js.map +1 -0
  103. package/dist/memory/types.d.ts +192 -0
  104. package/dist/memory/types.d.ts.map +1 -0
  105. package/dist/memory/types.js +8 -0
  106. package/dist/memory/types.js.map +1 -0
  107. package/dist/parsers/CodexConversationParser.d.ts +51 -0
  108. package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
  109. package/dist/parsers/CodexConversationParser.js +301 -0
  110. package/dist/parsers/CodexConversationParser.js.map +1 -0
  111. package/dist/parsers/ConversationParser.d.ts +286 -0
  112. package/dist/parsers/ConversationParser.d.ts.map +1 -0
  113. package/dist/parsers/ConversationParser.js +795 -0
  114. package/dist/parsers/ConversationParser.js.map +1 -0
  115. package/dist/parsers/DecisionExtractor.d.ts +144 -0
  116. package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
  117. package/dist/parsers/DecisionExtractor.js +434 -0
  118. package/dist/parsers/DecisionExtractor.js.map +1 -0
  119. package/dist/parsers/GitIntegrator.d.ts +156 -0
  120. package/dist/parsers/GitIntegrator.d.ts.map +1 -0
  121. package/dist/parsers/GitIntegrator.js +348 -0
  122. package/dist/parsers/GitIntegrator.js.map +1 -0
  123. package/dist/parsers/MistakeExtractor.d.ts +151 -0
  124. package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
  125. package/dist/parsers/MistakeExtractor.js +460 -0
  126. package/dist/parsers/MistakeExtractor.js.map +1 -0
  127. package/dist/parsers/RequirementsExtractor.d.ts +166 -0
  128. package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
  129. package/dist/parsers/RequirementsExtractor.js +338 -0
  130. package/dist/parsers/RequirementsExtractor.js.map +1 -0
  131. package/dist/realtime/ConversationWatcher.d.ts +87 -0
  132. package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
  133. package/dist/realtime/ConversationWatcher.js +204 -0
  134. package/dist/realtime/ConversationWatcher.js.map +1 -0
  135. package/dist/realtime/IncrementalParser.d.ts +83 -0
  136. package/dist/realtime/IncrementalParser.d.ts.map +1 -0
  137. package/dist/realtime/IncrementalParser.js +232 -0
  138. package/dist/realtime/IncrementalParser.js.map +1 -0
  139. package/dist/realtime/LiveExtractor.d.ts +72 -0
  140. package/dist/realtime/LiveExtractor.d.ts.map +1 -0
  141. package/dist/realtime/LiveExtractor.js +288 -0
  142. package/dist/realtime/LiveExtractor.js.map +1 -0
  143. package/dist/search/SemanticSearch.d.ts +121 -0
  144. package/dist/search/SemanticSearch.d.ts.map +1 -0
  145. package/dist/search/SemanticSearch.js +823 -0
  146. package/dist/search/SemanticSearch.js.map +1 -0
  147. package/dist/storage/BackupManager.d.ts +58 -0
  148. package/dist/storage/BackupManager.d.ts.map +1 -0
  149. package/dist/storage/BackupManager.js +223 -0
  150. package/dist/storage/BackupManager.js.map +1 -0
  151. package/dist/storage/ConversationStorage.d.ts +341 -0
  152. package/dist/storage/ConversationStorage.d.ts.map +1 -0
  153. package/dist/storage/ConversationStorage.js +792 -0
  154. package/dist/storage/ConversationStorage.js.map +1 -0
  155. package/dist/storage/DeletionService.d.ts +70 -0
  156. package/dist/storage/DeletionService.d.ts.map +1 -0
  157. package/dist/storage/DeletionService.js +253 -0
  158. package/dist/storage/DeletionService.js.map +1 -0
  159. package/dist/storage/GlobalIndex.d.ts +133 -0
  160. package/dist/storage/GlobalIndex.d.ts.map +1 -0
  161. package/dist/storage/GlobalIndex.js +310 -0
  162. package/dist/storage/GlobalIndex.js.map +1 -0
  163. package/dist/storage/SQLiteManager.d.ts +114 -0
  164. package/dist/storage/SQLiteManager.d.ts.map +1 -0
  165. package/dist/storage/SQLiteManager.js +636 -0
  166. package/dist/storage/SQLiteManager.js.map +1 -0
  167. package/dist/storage/migrations.d.ts +54 -0
  168. package/dist/storage/migrations.d.ts.map +1 -0
  169. package/dist/storage/migrations.js +285 -0
  170. package/dist/storage/migrations.js.map +1 -0
  171. package/dist/storage/schema.sql +436 -0
  172. package/dist/tools/ToolDefinitions.d.ts +946 -0
  173. package/dist/tools/ToolDefinitions.d.ts.map +1 -0
  174. package/dist/tools/ToolDefinitions.js +937 -0
  175. package/dist/tools/ToolDefinitions.js.map +1 -0
  176. package/dist/tools/ToolHandlers.d.ts +791 -0
  177. package/dist/tools/ToolHandlers.d.ts.map +1 -0
  178. package/dist/tools/ToolHandlers.js +3262 -0
  179. package/dist/tools/ToolHandlers.js.map +1 -0
  180. package/dist/types/ToolTypes.d.ts +824 -0
  181. package/dist/types/ToolTypes.d.ts.map +1 -0
  182. package/dist/types/ToolTypes.js +6 -0
  183. package/dist/types/ToolTypes.js.map +1 -0
  184. package/dist/utils/Logger.d.ts +70 -0
  185. package/dist/utils/Logger.d.ts.map +1 -0
  186. package/dist/utils/Logger.js +131 -0
  187. package/dist/utils/Logger.js.map +1 -0
  188. package/dist/utils/McpConfig.d.ts +54 -0
  189. package/dist/utils/McpConfig.d.ts.map +1 -0
  190. package/dist/utils/McpConfig.js +136 -0
  191. package/dist/utils/McpConfig.js.map +1 -0
  192. package/dist/utils/ProjectMigration.d.ts +82 -0
  193. package/dist/utils/ProjectMigration.d.ts.map +1 -0
  194. package/dist/utils/ProjectMigration.js +416 -0
  195. package/dist/utils/ProjectMigration.js.map +1 -0
  196. package/dist/utils/constants.d.ts +75 -0
  197. package/dist/utils/constants.d.ts.map +1 -0
  198. package/dist/utils/constants.js +105 -0
  199. package/dist/utils/constants.js.map +1 -0
  200. package/dist/utils/safeJson.d.ts +37 -0
  201. package/dist/utils/safeJson.d.ts.map +1 -0
  202. package/dist/utils/safeJson.js +48 -0
  203. package/dist/utils/safeJson.js.map +1 -0
  204. package/dist/utils/sanitization.d.ts +45 -0
  205. package/dist/utils/sanitization.d.ts.map +1 -0
  206. package/dist/utils/sanitization.js +153 -0
  207. package/dist/utils/sanitization.js.map +1 -0
  208. package/dist/utils/worktree.d.ts +15 -0
  209. package/dist/utils/worktree.d.ts.map +1 -0
  210. package/dist/utils/worktree.js +86 -0
  211. package/dist/utils/worktree.js.map +1 -0
  212. package/package.json +98 -0
  213. package/scripts/changelog-check.sh +62 -0
  214. package/scripts/check-node.js +17 -0
  215. package/scripts/dev-config.js +56 -0
  216. 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