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,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MarkdownFormatter - Generates comprehensive markdown documentation
|
|
3
|
+
*/
|
|
4
|
+
export class MarkdownFormatter {
|
|
5
|
+
/**
|
|
6
|
+
* Format linked data as markdown
|
|
7
|
+
*/
|
|
8
|
+
format(data, options) {
|
|
9
|
+
let doc = '';
|
|
10
|
+
doc += this.renderHeader(data, options);
|
|
11
|
+
doc += this.renderStatistics(data);
|
|
12
|
+
const { scope, moduleFilter } = options;
|
|
13
|
+
if (scope === 'full' || scope === 'architecture') {
|
|
14
|
+
doc += this.renderArchitecture(data.modules, moduleFilter);
|
|
15
|
+
}
|
|
16
|
+
if (scope === 'full' || scope === 'decisions') {
|
|
17
|
+
doc += this.renderDecisions(data);
|
|
18
|
+
}
|
|
19
|
+
if (scope === 'full' || scope === 'quality') {
|
|
20
|
+
doc += this.renderQuality(data.qualityReport);
|
|
21
|
+
}
|
|
22
|
+
if (scope === 'full') {
|
|
23
|
+
doc += this.renderTimeline(data.timeline);
|
|
24
|
+
}
|
|
25
|
+
doc += this.renderFooter();
|
|
26
|
+
return doc;
|
|
27
|
+
}
|
|
28
|
+
renderHeader(data, options) {
|
|
29
|
+
const projectName = options.projectPath.split('/').pop() || 'Project';
|
|
30
|
+
const sessionInfo = options.sessionId ? ` (Session: ${options.sessionId.substring(0, 8)}...)` : ' (All Sessions)';
|
|
31
|
+
return `# ${projectName} - Comprehensive Documentation
|
|
32
|
+
|
|
33
|
+
**Generated**: ${new Date().toLocaleString()}
|
|
34
|
+
**Scope**: ${options.scope}${sessionInfo}
|
|
35
|
+
**Modules**: ${data.modules.length}
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
`;
|
|
40
|
+
}
|
|
41
|
+
renderStatistics(data) {
|
|
42
|
+
const stats = data.statistics;
|
|
43
|
+
return `## 📊 Project Statistics
|
|
44
|
+
|
|
45
|
+
| Metric | Count |
|
|
46
|
+
|--------|-------|
|
|
47
|
+
| Files | ${stats.totalFiles} |
|
|
48
|
+
| Code Entities | ${stats.totalEntities} |
|
|
49
|
+
| Decisions | ${stats.totalDecisions} |
|
|
50
|
+
| Mistakes | ${stats.totalMistakes} |
|
|
51
|
+
| Git Commits | ${stats.totalCommits} |
|
|
52
|
+
| Avg Complexity | ${stats.averageComplexity}/10 |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
renderArchitecture(modules, moduleFilter) {
|
|
59
|
+
let filtered = modules;
|
|
60
|
+
if (moduleFilter) {
|
|
61
|
+
filtered = modules.filter(m => m.path.includes(moduleFilter));
|
|
62
|
+
}
|
|
63
|
+
if (filtered.length === 0) {
|
|
64
|
+
return `## 🏗️ Architecture Overview
|
|
65
|
+
|
|
66
|
+
No modules found${moduleFilter ? ` matching filter: ${moduleFilter}` : ''}.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
`;
|
|
71
|
+
}
|
|
72
|
+
return `## 🏗️ Architecture Overview
|
|
73
|
+
|
|
74
|
+
${filtered.map(m => this.renderModule(m)).join('\n')}
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
`;
|
|
79
|
+
}
|
|
80
|
+
renderModule(module) {
|
|
81
|
+
const hasDecisions = module.decisions.length > 0;
|
|
82
|
+
const hasMistakes = module.mistakes.length > 0;
|
|
83
|
+
const hasRequirements = module.requirements.length > 0;
|
|
84
|
+
return `### ${module.name}
|
|
85
|
+
|
|
86
|
+
**Location**: \`${module.path}\`
|
|
87
|
+
**Complexity**: ${module.complexity}/10
|
|
88
|
+
**Changes**: ${module.changeFrequency} edits
|
|
89
|
+
**Entities**: ${module.entities.length}
|
|
90
|
+
|
|
91
|
+
${module.description ? `**Purpose**: ${module.description}\n` : ''}
|
|
92
|
+
|
|
93
|
+
${hasDecisions ? this.renderModuleDecisions(module.decisions) : ''}
|
|
94
|
+
|
|
95
|
+
${hasMistakes ? this.renderModuleMistakes(module.mistakes) : ''}
|
|
96
|
+
|
|
97
|
+
${hasRequirements ? this.renderModuleRequirements(module.requirements) : ''}
|
|
98
|
+
|
|
99
|
+
${this.renderModuleEntities(module.entities)}
|
|
100
|
+
|
|
101
|
+
`;
|
|
102
|
+
}
|
|
103
|
+
renderModuleDecisions(decisions) {
|
|
104
|
+
if (decisions.length === 0) {
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
const recent = decisions.slice(0, 5); // Show top 5 decisions
|
|
108
|
+
return `**Key Decisions** (${decisions.length} total):
|
|
109
|
+
${recent.map(d => `- ${d.decision_text} (${this.formatDate(d.timestamp)})
|
|
110
|
+
- *Rationale*: ${d.rationale || 'Not specified'}${d.alternatives_considered.length > 0 ? `
|
|
111
|
+
- *Alternatives*: ${d.alternatives_considered.join(', ')}` : ''}`).join('\n')}
|
|
112
|
+
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
renderModuleMistakes(mistakes) {
|
|
116
|
+
if (mistakes.length === 0) {
|
|
117
|
+
return '';
|
|
118
|
+
}
|
|
119
|
+
return `**Past Issues** (${mistakes.length} total):
|
|
120
|
+
${mistakes.map(m => `- ⚠️ ${m.what_went_wrong} (${this.formatDate(m.timestamp)})
|
|
121
|
+
- *Fix*: ${m.how_it_was_fixed || 'Not documented'}
|
|
122
|
+
- *Lesson*: ${m.lesson_learned || 'Not documented'}`).join('\n')}
|
|
123
|
+
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
renderModuleRequirements(requirements) {
|
|
127
|
+
if (requirements.length === 0) {
|
|
128
|
+
return '';
|
|
129
|
+
}
|
|
130
|
+
return `**Requirements**:
|
|
131
|
+
${requirements.map(r => `- ${r.requirement_type}: ${r.description}`).join('\n')}
|
|
132
|
+
|
|
133
|
+
`;
|
|
134
|
+
}
|
|
135
|
+
renderModuleEntities(entities) {
|
|
136
|
+
if (entities.length === 0) {
|
|
137
|
+
return '';
|
|
138
|
+
}
|
|
139
|
+
const byType = {};
|
|
140
|
+
for (const entity of entities) {
|
|
141
|
+
byType[entity.type] = (byType[entity.type] || 0) + 1;
|
|
142
|
+
}
|
|
143
|
+
const summary = Object.entries(byType)
|
|
144
|
+
.map(([type, count]) => `${count} ${type}${count > 1 ? 's' : ''}`)
|
|
145
|
+
.join(', ');
|
|
146
|
+
return `**Code Structure**: ${summary}
|
|
147
|
+
|
|
148
|
+
`;
|
|
149
|
+
}
|
|
150
|
+
renderDecisions(data) {
|
|
151
|
+
const allDecisions = data.modules
|
|
152
|
+
.flatMap(m => m.decisions)
|
|
153
|
+
.sort((a, b) => b.timestamp - a.timestamp);
|
|
154
|
+
if (allDecisions.length === 0) {
|
|
155
|
+
return `## 💡 Decision Log
|
|
156
|
+
|
|
157
|
+
No decisions documented.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
`;
|
|
162
|
+
}
|
|
163
|
+
return `## 💡 Decision Log
|
|
164
|
+
|
|
165
|
+
${allDecisions.map((d, i) => `### ${i + 1}. ${d.decision_text}
|
|
166
|
+
|
|
167
|
+
**Date**: ${this.formatDate(d.timestamp)}
|
|
168
|
+
**Context**: ${d.context || 'Not specified'}
|
|
169
|
+
|
|
170
|
+
**Rationale**: ${d.rationale}
|
|
171
|
+
|
|
172
|
+
${d.alternatives_considered.length > 0 ? `**Alternatives Considered**:
|
|
173
|
+
${d.alternatives_considered.map(alt => `- ${alt}${d.rejected_reasons[alt] ? `: ${d.rejected_reasons[alt]}` : ''}`).join('\n')}
|
|
174
|
+
` : ''}
|
|
175
|
+
|
|
176
|
+
**Affected Files**: ${d.related_files.length > 0 ? d.related_files.map(f => `\`${f}\``).join(', ') : 'None specified'}
|
|
177
|
+
|
|
178
|
+
${d.related_commits.length > 0 ? `**Related Commits**: ${d.related_commits.join(', ')}\n` : ''}
|
|
179
|
+
`).join('\n---\n\n')}
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
`;
|
|
184
|
+
}
|
|
185
|
+
renderQuality(report) {
|
|
186
|
+
return `## 🔍 Quality Insights
|
|
187
|
+
|
|
188
|
+
### Code Hotspots
|
|
189
|
+
|
|
190
|
+
${report.hotspots.length > 0 ? report.hotspots.map((h) => `
|
|
191
|
+
**\`${h.filePath}\`**
|
|
192
|
+
Complexity: ${h.complexity}/10 | Changes: ${h.changeCount}
|
|
193
|
+
|
|
194
|
+
${h.relatedMistakes.length > 0 ? `Past Issues:
|
|
195
|
+
${h.relatedMistakes.map((m) => `- ${m.what_went_wrong}`).join('\n')}
|
|
196
|
+
` : ''}
|
|
197
|
+
${h.relatedDecisions.length > 0 ? `Related Decisions:
|
|
198
|
+
${h.relatedDecisions.map((d) => `- ${d.decision_text}`).join('\n')}
|
|
199
|
+
` : ''}
|
|
200
|
+
`).join('\n') : 'No hotspots identified.\n'}
|
|
201
|
+
|
|
202
|
+
### Code Duplication
|
|
203
|
+
|
|
204
|
+
${report.clones.length > 0 ? report.clones.map(c => `
|
|
205
|
+
- **Similarity**: ${Math.round(c.similarity * 100)}%
|
|
206
|
+
- Files: ${c.files.map((f) => `\`${f}\``).join(', ')}
|
|
207
|
+
- ${c.description}
|
|
208
|
+
`).join('\n') : 'No code duplication detected.\n'}
|
|
209
|
+
|
|
210
|
+
### Lessons Learned
|
|
211
|
+
|
|
212
|
+
${report.mistakeSummary.topLessons.length > 0 ? report.mistakeSummary.topLessons.map((lesson) => `- ${lesson}`).join('\n') : 'No lessons documented yet.\n'}
|
|
213
|
+
|
|
214
|
+
### Mistake Summary
|
|
215
|
+
|
|
216
|
+
**Total**: ${report.mistakeSummary.total} mistakes documented
|
|
217
|
+
|
|
218
|
+
${Object.keys(report.mistakeSummary.byCategory).length > 0 ? `**By Severity**:
|
|
219
|
+
${Object.entries(report.mistakeSummary.byCategory).map(([cat, count]) => `- ${cat}: ${count}`).join('\n')}
|
|
220
|
+
` : ''}
|
|
221
|
+
|
|
222
|
+
${report.mistakeSummary.criticalIssues.length > 0 ? `**Critical Issues**:
|
|
223
|
+
${report.mistakeSummary.criticalIssues.map((m) => `- ${m.what_went_wrong}`).join('\n')}
|
|
224
|
+
` : ''}
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
`;
|
|
229
|
+
}
|
|
230
|
+
renderTimeline(timeline) {
|
|
231
|
+
if (timeline.length === 0) {
|
|
232
|
+
return `## 📅 Development Timeline
|
|
233
|
+
|
|
234
|
+
No timeline events found.
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
`;
|
|
239
|
+
}
|
|
240
|
+
// Group by month
|
|
241
|
+
const byMonth = {};
|
|
242
|
+
for (const event of timeline) {
|
|
243
|
+
const monthKey = this.formatMonth(event.timestamp);
|
|
244
|
+
if (!byMonth[monthKey]) {
|
|
245
|
+
byMonth[monthKey] = [];
|
|
246
|
+
}
|
|
247
|
+
byMonth[monthKey].push(event);
|
|
248
|
+
}
|
|
249
|
+
return `## 📅 Development Timeline
|
|
250
|
+
|
|
251
|
+
${Object.entries(byMonth).map(([month, events]) => `
|
|
252
|
+
### ${month}
|
|
253
|
+
|
|
254
|
+
${events.map(e => this.renderTimelineEvent(e)).join('\n')}
|
|
255
|
+
`).join('\n')}
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
`;
|
|
260
|
+
}
|
|
261
|
+
renderTimelineEvent(event) {
|
|
262
|
+
const icon = {
|
|
263
|
+
decision: '💡',
|
|
264
|
+
mistake: '⚠️',
|
|
265
|
+
commit: '📝',
|
|
266
|
+
edit: '✏️'
|
|
267
|
+
}[event.type] || '•';
|
|
268
|
+
const date = new Date(event.timestamp).toLocaleDateString();
|
|
269
|
+
const files = event.files.length > 0 ? ` (${event.files.length} files)` : '';
|
|
270
|
+
return `- **${date}** ${icon} ${event.description}${files}`;
|
|
271
|
+
}
|
|
272
|
+
renderFooter() {
|
|
273
|
+
return `## 📚 About This Documentation
|
|
274
|
+
|
|
275
|
+
This documentation was automatically generated by combining:
|
|
276
|
+
- **Codebase analysis** from CODE-GRAPH-RAG-MCP
|
|
277
|
+
- **Development conversations** from Claude Code conversation history
|
|
278
|
+
- **Git history** and commit linkage
|
|
279
|
+
|
|
280
|
+
The documentation shows not just **what** exists in the code, but **why** it was built that way.
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
*Generated by CCCMemory MCP Server*
|
|
285
|
+
`;
|
|
286
|
+
}
|
|
287
|
+
formatDate(timestamp) {
|
|
288
|
+
return new Date(timestamp).toLocaleDateString('en-US', {
|
|
289
|
+
year: 'numeric',
|
|
290
|
+
month: 'short',
|
|
291
|
+
day: 'numeric'
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
formatMonth(timestamp) {
|
|
295
|
+
return new Date(timestamp).toLocaleDateString('en-US', {
|
|
296
|
+
year: 'numeric',
|
|
297
|
+
month: 'long'
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=MarkdownFormatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownFormatter.js","sourceRoot":"","sources":["../../src/documentation/MarkdownFormatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for documentation generation
|
|
3
|
+
*/
|
|
4
|
+
export interface CodeEntity {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
type: 'class' | 'function' | 'interface' | 'module' | 'component';
|
|
8
|
+
filePath: string;
|
|
9
|
+
lineNumber?: number;
|
|
10
|
+
complexity?: number;
|
|
11
|
+
description?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface Relationship {
|
|
14
|
+
from: string;
|
|
15
|
+
to: string;
|
|
16
|
+
type: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface FileInfo {
|
|
20
|
+
path: string;
|
|
21
|
+
size: number;
|
|
22
|
+
entities: CodeEntity[];
|
|
23
|
+
}
|
|
24
|
+
export interface Hotspot {
|
|
25
|
+
filePath: string;
|
|
26
|
+
complexity: number;
|
|
27
|
+
changeCount: number;
|
|
28
|
+
metric: string;
|
|
29
|
+
}
|
|
30
|
+
export interface CodeClone {
|
|
31
|
+
files: string[];
|
|
32
|
+
similarity: number;
|
|
33
|
+
description: string;
|
|
34
|
+
}
|
|
35
|
+
export interface CodeData {
|
|
36
|
+
entities: CodeEntity[];
|
|
37
|
+
relationships: Relationship[];
|
|
38
|
+
files: FileInfo[];
|
|
39
|
+
hotspots: Hotspot[];
|
|
40
|
+
clones: CodeClone[];
|
|
41
|
+
}
|
|
42
|
+
export interface RawEntity {
|
|
43
|
+
id?: string;
|
|
44
|
+
name?: string;
|
|
45
|
+
type?: string;
|
|
46
|
+
filePath?: string;
|
|
47
|
+
file?: string;
|
|
48
|
+
lineNumber?: number;
|
|
49
|
+
line?: number;
|
|
50
|
+
complexity?: number;
|
|
51
|
+
description?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface RawHotspot {
|
|
54
|
+
filePath?: string;
|
|
55
|
+
file?: string;
|
|
56
|
+
path?: string;
|
|
57
|
+
complexity?: number;
|
|
58
|
+
score?: number;
|
|
59
|
+
changeCount?: number;
|
|
60
|
+
changes?: number;
|
|
61
|
+
metric?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface RawClone {
|
|
64
|
+
files?: string[];
|
|
65
|
+
similarity?: number;
|
|
66
|
+
score?: number;
|
|
67
|
+
description?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface Decision {
|
|
70
|
+
id: string;
|
|
71
|
+
conversation_id: string;
|
|
72
|
+
message_id: string;
|
|
73
|
+
decision_text: string;
|
|
74
|
+
rationale: string;
|
|
75
|
+
alternatives_considered: string[];
|
|
76
|
+
rejected_reasons: Record<string, string>;
|
|
77
|
+
context?: string;
|
|
78
|
+
related_files: string[];
|
|
79
|
+
related_commits: string[];
|
|
80
|
+
timestamp: number;
|
|
81
|
+
}
|
|
82
|
+
export interface Mistake {
|
|
83
|
+
id: string;
|
|
84
|
+
conversation_id: string;
|
|
85
|
+
what_went_wrong: string;
|
|
86
|
+
why_it_happened: string;
|
|
87
|
+
how_it_was_fixed: string;
|
|
88
|
+
lesson_learned: string;
|
|
89
|
+
related_files: string[];
|
|
90
|
+
severity: string;
|
|
91
|
+
timestamp: number;
|
|
92
|
+
}
|
|
93
|
+
export interface Requirement {
|
|
94
|
+
id: string;
|
|
95
|
+
requirement_type: string;
|
|
96
|
+
description: string;
|
|
97
|
+
rationale?: string;
|
|
98
|
+
related_files: string[];
|
|
99
|
+
timestamp: number;
|
|
100
|
+
}
|
|
101
|
+
export interface FileEdit {
|
|
102
|
+
id: string;
|
|
103
|
+
conversation_id: string;
|
|
104
|
+
file_path: string;
|
|
105
|
+
edit_type: string;
|
|
106
|
+
timestamp: number;
|
|
107
|
+
}
|
|
108
|
+
export interface GitCommit {
|
|
109
|
+
hash: string;
|
|
110
|
+
conversation_id?: string;
|
|
111
|
+
message: string;
|
|
112
|
+
author: string;
|
|
113
|
+
timestamp: number;
|
|
114
|
+
files_changed: string[];
|
|
115
|
+
}
|
|
116
|
+
export interface ConversationData {
|
|
117
|
+
decisions: Decision[];
|
|
118
|
+
mistakes: Mistake[];
|
|
119
|
+
requirements: Requirement[];
|
|
120
|
+
fileEdits: FileEdit[];
|
|
121
|
+
commits: GitCommit[];
|
|
122
|
+
}
|
|
123
|
+
export interface LinkedModule {
|
|
124
|
+
path: string;
|
|
125
|
+
name: string;
|
|
126
|
+
entities: CodeEntity[];
|
|
127
|
+
decisions: Decision[];
|
|
128
|
+
mistakes: Mistake[];
|
|
129
|
+
requirements: Requirement[];
|
|
130
|
+
complexity: number;
|
|
131
|
+
changeFrequency: number;
|
|
132
|
+
description?: string;
|
|
133
|
+
}
|
|
134
|
+
export interface TimelineEvent {
|
|
135
|
+
timestamp: number;
|
|
136
|
+
type: 'decision' | 'mistake' | 'commit' | 'edit';
|
|
137
|
+
description: string;
|
|
138
|
+
files: string[];
|
|
139
|
+
details: unknown;
|
|
140
|
+
}
|
|
141
|
+
export interface QualityReport {
|
|
142
|
+
hotspots: HotspotWithContext[];
|
|
143
|
+
clones: CodeClone[];
|
|
144
|
+
mistakeSummary: MistakeSummary;
|
|
145
|
+
}
|
|
146
|
+
export interface HotspotWithContext extends Hotspot {
|
|
147
|
+
relatedMistakes: Mistake[];
|
|
148
|
+
relatedDecisions: Decision[];
|
|
149
|
+
}
|
|
150
|
+
export interface MistakeSummary {
|
|
151
|
+
total: number;
|
|
152
|
+
byCategory: Record<string, number>;
|
|
153
|
+
topLessons: string[];
|
|
154
|
+
criticalIssues: Mistake[];
|
|
155
|
+
}
|
|
156
|
+
export interface LinkedData {
|
|
157
|
+
modules: LinkedModule[];
|
|
158
|
+
timeline: TimelineEvent[];
|
|
159
|
+
qualityReport: QualityReport;
|
|
160
|
+
statistics: DocumentationStatistics;
|
|
161
|
+
}
|
|
162
|
+
export interface DocumentationStatistics {
|
|
163
|
+
totalFiles: number;
|
|
164
|
+
totalEntities: number;
|
|
165
|
+
totalDecisions: number;
|
|
166
|
+
totalMistakes: number;
|
|
167
|
+
totalCommits: number;
|
|
168
|
+
averageComplexity: number;
|
|
169
|
+
}
|
|
170
|
+
export interface DocumentationOptions {
|
|
171
|
+
projectPath: string;
|
|
172
|
+
sessionId?: string;
|
|
173
|
+
scope: 'full' | 'architecture' | 'decisions' | 'quality';
|
|
174
|
+
moduleFilter?: string;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/documentation/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/documentation/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Manager for CLI
|
|
3
|
+
* Handles reading and writing embedding configuration
|
|
4
|
+
*/
|
|
5
|
+
import { EmbeddingConfig } from "./EmbeddingConfig.js";
|
|
6
|
+
export declare class ConfigManager {
|
|
7
|
+
private static readonly CONFIG_FILENAME;
|
|
8
|
+
/**
|
|
9
|
+
* Get current effective configuration (after all precedence rules)
|
|
10
|
+
*/
|
|
11
|
+
static getCurrentConfig(): EmbeddingConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Get configuration sources breakdown
|
|
14
|
+
*/
|
|
15
|
+
static getConfigSources(): {
|
|
16
|
+
home: Partial<EmbeddingConfig> | null;
|
|
17
|
+
project: Partial<EmbeddingConfig> | null;
|
|
18
|
+
env: Partial<EmbeddingConfig>;
|
|
19
|
+
effective: EmbeddingConfig;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Get a specific config value
|
|
23
|
+
*/
|
|
24
|
+
static getConfigValue(key: string): unknown;
|
|
25
|
+
/**
|
|
26
|
+
* Set a config value (writes to home config file)
|
|
27
|
+
*/
|
|
28
|
+
static setConfigValue(key: string, value: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get config file path (home directory)
|
|
31
|
+
*/
|
|
32
|
+
static getConfigPath(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Check if config file exists
|
|
35
|
+
*/
|
|
36
|
+
static configExists(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Load config file
|
|
39
|
+
*/
|
|
40
|
+
private static loadConfigFile;
|
|
41
|
+
/**
|
|
42
|
+
* Get known model dimensions for common models
|
|
43
|
+
*/
|
|
44
|
+
static getKnownModelDimensions(model: string): number | null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ConfigManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/embeddings/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAgB,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AAE5F,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEvE;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,eAAe;IAI1C;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI;QACzB,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;QACtC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;QACzC,GAAG,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAC9B,SAAS,EAAE,eAAe,CAAC;KAC5B;IAqCD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAqB3C;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgEvD;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,OAAO;IAI9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAoB7D"}
|