@noyrax/5d-database-plugin 0.1.14-beta.1 → 0.1.14-beta.11
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/README.md +25 -0
- package/out/api/adr-api.d.ts +0 -6
- package/out/api/adr-api.d.ts.map +1 -1
- package/out/api/adr-api.js +14 -49
- package/out/api/adr-api.js.map +1 -1
- package/out/api/bootstrap-api.d.ts +32 -1
- package/out/api/bootstrap-api.d.ts.map +1 -1
- package/out/api/bootstrap-api.js +207 -14
- package/out/api/bootstrap-api.js.map +1 -1
- package/out/api/context-builder.d.ts.map +1 -1
- package/out/api/context-builder.js +21 -5
- package/out/api/context-builder.js.map +1 -1
- package/out/api/evidence-grader.d.ts +83 -0
- package/out/api/evidence-grader.d.ts.map +1 -0
- package/out/api/evidence-grader.js +161 -0
- package/out/api/evidence-grader.js.map +1 -0
- package/out/api/index.d.ts +5 -0
- package/out/api/index.d.ts.map +1 -1
- package/out/api/index.js +11 -1
- package/out/api/index.js.map +1 -1
- package/out/api/learning-path-api.d.ts +3 -0
- package/out/api/learning-path-api.d.ts.map +1 -1
- package/out/api/learning-path-api.js +15 -2
- package/out/api/learning-path-api.js.map +1 -1
- package/out/api/module-api.d.ts +0 -1
- package/out/api/module-api.d.ts.map +1 -1
- package/out/api/module-api.js +4 -38
- package/out/api/module-api.js.map +1 -1
- package/out/api/self-explanation-api.d.ts +11 -1
- package/out/api/self-explanation-api.d.ts.map +1 -1
- package/out/api/self-explanation-api.js +285 -19
- package/out/api/self-explanation-api.js.map +1 -1
- package/out/api/semantic-search-api.d.ts +3 -0
- package/out/api/semantic-search-api.d.ts.map +1 -1
- package/out/api/semantic-search-api.js +41 -4
- package/out/api/semantic-search-api.js.map +1 -1
- package/out/api/source-access-contract-api.d.ts +60 -0
- package/out/api/source-access-contract-api.d.ts.map +1 -0
- package/out/api/source-access-contract-api.js +231 -0
- package/out/api/source-access-contract-api.js.map +1 -0
- package/out/api/source-snippet-api.d.ts +58 -0
- package/out/api/source-snippet-api.d.ts.map +1 -0
- package/out/api/source-snippet-api.js +187 -0
- package/out/api/source-snippet-api.js.map +1 -0
- package/out/api/vector-backend-status-api.d.ts +68 -0
- package/out/api/vector-backend-status-api.d.ts.map +1 -0
- package/out/api/vector-backend-status-api.js +241 -0
- package/out/api/vector-backend-status-api.js.map +1 -0
- package/out/cli/debug-embedding-strategies.d.ts +3 -0
- package/out/cli/debug-embedding-strategies.d.ts.map +1 -0
- package/out/cli/debug-embedding-strategies.js +255 -0
- package/out/cli/debug-embedding-strategies.js.map +1 -0
- package/out/cli/debug-plugin-id.d.ts +9 -0
- package/out/cli/debug-plugin-id.d.ts.map +1 -0
- package/out/cli/debug-plugin-id.js +188 -0
- package/out/cli/debug-plugin-id.js.map +1 -0
- package/out/cli/ingest-cli.js +44 -5
- package/out/cli/ingest-cli.js.map +1 -1
- package/out/cli/tool-cli.js +1 -1
- package/out/cli/tool-cli.js.map +1 -1
- package/out/core/chromadb-vector-database.d.ts.map +1 -1
- package/out/core/chromadb-vector-database.js +10 -12
- package/out/core/chromadb-vector-database.js.map +1 -1
- package/out/core/migration-manager.d.ts.map +1 -1
- package/out/core/migration-manager.js +61 -32
- package/out/core/migration-manager.js.map +1 -1
- package/out/core/multi-db-manager.d.ts +26 -0
- package/out/core/multi-db-manager.d.ts.map +1 -1
- package/out/core/multi-db-manager.js +143 -2
- package/out/core/multi-db-manager.js.map +1 -1
- package/out/core/path-normalizer.d.ts +46 -0
- package/out/core/path-normalizer.d.ts.map +1 -0
- package/out/core/path-normalizer.js +152 -0
- package/out/core/path-normalizer.js.map +1 -0
- package/out/core/vector-database-factory.js +5 -5
- package/out/core/vector-database-factory.js.map +1 -1
- package/out/core/vss-vector-database.js +8 -8
- package/out/core/vss-vector-database.js.map +1 -1
- package/out/embedding/embedding-pipeline.d.ts +29 -0
- package/out/embedding/embedding-pipeline.d.ts.map +1 -1
- package/out/embedding/embedding-pipeline.js +288 -3
- package/out/embedding/embedding-pipeline.js.map +1 -1
- package/out/embedding/module-summarizer.d.ts +25 -0
- package/out/embedding/module-summarizer.d.ts.map +1 -0
- package/out/embedding/module-summarizer.js +104 -0
- package/out/embedding/module-summarizer.js.map +1 -0
- package/out/ingestors/adr-ingestor.d.ts.map +1 -1
- package/out/ingestors/adr-ingestor.js +7 -8
- package/out/ingestors/adr-ingestor.js.map +1 -1
- package/out/ingestors/module-ingestor.d.ts.map +1 -1
- package/out/ingestors/module-ingestor.js +17 -0
- package/out/ingestors/module-ingestor.js.map +1 -1
- package/out/ingestors/symbol-ingestor.d.ts.map +1 -1
- package/out/ingestors/symbol-ingestor.js +24 -2
- package/out/ingestors/symbol-ingestor.js.map +1 -1
- package/out/mcp/tools/gap-analysis.d.ts +21 -2
- package/out/mcp/tools/gap-analysis.d.ts.map +1 -1
- package/out/mcp/tools/gap-analysis.js +326 -27
- package/out/mcp/tools/gap-analysis.js.map +1 -1
- package/out/mcp/tools/learning-path.d.ts.map +1 -1
- package/out/mcp/tools/learning-path.js +19 -5
- package/out/mcp/tools/learning-path.js.map +1 -1
- package/out/mcp/tools/semantic-discovery.d.ts.map +1 -1
- package/out/mcp/tools/semantic-discovery.js +110 -22
- package/out/mcp/tools/semantic-discovery.js.map +1 -1
- package/out/mcp/tools/source-access-contract.d.ts +26 -0
- package/out/mcp/tools/source-access-contract.d.ts.map +1 -0
- package/out/mcp/tools/source-access-contract.js +45 -0
- package/out/mcp/tools/source-access-contract.js.map +1 -0
- package/out/mcp/tools/source-snippet.d.ts +71 -0
- package/out/mcp/tools/source-snippet.d.ts.map +1 -0
- package/out/mcp/tools/source-snippet.js +82 -0
- package/out/mcp/tools/source-snippet.js.map +1 -0
- package/out/models/action-hint.d.ts +36 -0
- package/out/models/action-hint.d.ts.map +1 -0
- package/out/models/action-hint.js +38 -0
- package/out/models/action-hint.js.map +1 -0
- package/out/models/evidence.d.ts +68 -0
- package/out/models/evidence.d.ts.map +1 -0
- package/out/models/evidence.js +91 -0
- package/out/models/evidence.js.map +1 -0
- package/out/models/module.d.ts +2 -0
- package/out/models/module.d.ts.map +1 -1
- package/out/models/reason-codes.d.ts +52 -0
- package/out/models/reason-codes.d.ts.map +1 -0
- package/out/models/reason-codes.js +83 -0
- package/out/models/reason-codes.js.map +1 -0
- package/out/models/symbol.d.ts +6 -0
- package/out/models/symbol.d.ts.map +1 -1
- package/out/repositories/module-repository.d.ts.map +1 -1
- package/out/repositories/module-repository.js +9 -3
- package/out/repositories/module-repository.js.map +1 -1
- package/out/repositories/symbol-repository.d.ts.map +1 -1
- package/out/repositories/symbol-repository.js +22 -4
- package/out/repositories/symbol-repository.js.map +1 -1
- package/out/services/cross-dimension-linker.d.ts +0 -5
- package/out/services/cross-dimension-linker.d.ts.map +1 -1
- package/out/services/cross-dimension-linker.js +2 -35
- package/out/services/cross-dimension-linker.js.map +1 -1
- package/package.json +196 -195
- package/schemas/sqlite/001_add_source_code_spans_modules.sql +7 -0
- package/schemas/sqlite/001_z_add_source_code_spans_modules.sql +13 -0
- package/schemas/sqlite/002_add_source_code_spans_symbols.sql +15 -0
- package/schemas/sqlite/002_z_add_source_code_spans_symbols.sql +21 -0
- package/schemas/sqlite/006_add_source_access_config.sql +33 -0
|
@@ -1,8 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.GapAnalysisTool = void 0;
|
|
4
37
|
const cross_dimension_api_1 = require("../../api/cross-dimension-api");
|
|
38
|
+
const dependency_api_1 = require("../../api/dependency-api");
|
|
39
|
+
const adr_api_1 = require("../../api/adr-api");
|
|
40
|
+
const module_api_1 = require("../../api/module-api");
|
|
5
41
|
const adr_generator_1 = require("./adr-generator");
|
|
42
|
+
const path = __importStar(require("path"));
|
|
6
43
|
/**
|
|
7
44
|
* MCP Tool: gap_analysis
|
|
8
45
|
* Finds documentation gaps by analyzing modules with many dependencies but few/no ADRs.
|
|
@@ -10,6 +47,9 @@ const adr_generator_1 = require("./adr-generator");
|
|
|
10
47
|
class GapAnalysisTool {
|
|
11
48
|
constructor(dbManager, idMapper, workspaceRoot) {
|
|
12
49
|
this.crossDimensionApi = new cross_dimension_api_1.CrossDimensionApi(dbManager, idMapper);
|
|
50
|
+
this.dependencyApi = new dependency_api_1.DependencyApi(dbManager);
|
|
51
|
+
this.adrApi = new adr_api_1.AdrApi(dbManager);
|
|
52
|
+
this.moduleApi = new module_api_1.ModuleApi(dbManager);
|
|
13
53
|
this.dbManager = dbManager;
|
|
14
54
|
this.idMapper = idMapper;
|
|
15
55
|
this.workspaceRoot = workspaceRoot || process.cwd();
|
|
@@ -18,45 +58,108 @@ class GapAnalysisTool {
|
|
|
18
58
|
* Executes the gap_analysis tool.
|
|
19
59
|
*
|
|
20
60
|
* @param args Arguments: minDependencies (default: 5), pluginId, limit (default: 50), autoGenerateAdrs (default: false)
|
|
21
|
-
* @returns JSON string with gap analysis results
|
|
61
|
+
* @returns JSON string with gap analysis results including context information for ADR generation by KI-Agent
|
|
62
|
+
*
|
|
63
|
+
* Note: autoGenerateAdrs is false by default. When false, the tool provides context information
|
|
64
|
+
* (similar modules with ADRs, dependency details, cross-dimension context) to help the KI-Agent
|
|
65
|
+
* create ADRs according to the schema defined in .cursor/rules/022-adr-workflow.mdc
|
|
22
66
|
*/
|
|
23
67
|
async execute(args) {
|
|
24
68
|
const minDeps = args.minDependencies || 5;
|
|
25
69
|
const limit = args.limit || 50;
|
|
26
70
|
// Build architectural view (combines X, W, Z dimensions)
|
|
27
|
-
|
|
71
|
+
let architecturalView;
|
|
72
|
+
try {
|
|
73
|
+
architecturalView = await this.crossDimensionApi.buildArchitecturalView(args.pluginId);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(`[GapAnalysisTool] Failed to build architectural view: ${error?.message || String(error)}`);
|
|
77
|
+
// Return empty result with error info
|
|
78
|
+
return JSON.stringify({
|
|
79
|
+
summary: {
|
|
80
|
+
min_dependencies_threshold: minDeps,
|
|
81
|
+
analysis_date: new Date().toISOString(),
|
|
82
|
+
statistics: {
|
|
83
|
+
total_modules_analyzed: 0,
|
|
84
|
+
modules_with_many_deps: 0,
|
|
85
|
+
modules_without_adrs: 0,
|
|
86
|
+
modules_with_few_adrs: 0,
|
|
87
|
+
well_documented_modules: 0,
|
|
88
|
+
avg_dependencies: 0,
|
|
89
|
+
avg_adrs: 0
|
|
90
|
+
},
|
|
91
|
+
auto_generated_adrs: 0,
|
|
92
|
+
error: `Failed to build architectural view: ${error?.message || String(error)}`
|
|
93
|
+
},
|
|
94
|
+
gaps: {
|
|
95
|
+
without_adrs: [],
|
|
96
|
+
with_few_adrs: [],
|
|
97
|
+
well_documented: []
|
|
98
|
+
},
|
|
99
|
+
generated_adrs: [],
|
|
100
|
+
recommendations: [
|
|
101
|
+
`❌ Gap-Analyse fehlgeschlagen: ${error?.message || String(error)}`,
|
|
102
|
+
'Prüfe ob Datenbanken existieren und Ingestion ausgeführt wurde.',
|
|
103
|
+
'Führe `workflow/generate_and_ingest` aus, um Datenbanken zu aktualisieren.'
|
|
104
|
+
]
|
|
105
|
+
}, null, 2);
|
|
106
|
+
}
|
|
107
|
+
// Fallback: If architectural view is empty, try direct database queries
|
|
108
|
+
if (architecturalView.length === 0) {
|
|
109
|
+
return await this.fallbackDirectQuery(args.pluginId, minDeps, limit);
|
|
110
|
+
}
|
|
28
111
|
// Analyze gaps
|
|
29
|
-
const gaps = architecturalView
|
|
112
|
+
const gaps = await Promise.all(architecturalView
|
|
30
113
|
.filter(view => view.dependencies.length >= minDeps)
|
|
31
|
-
.map(view =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
114
|
+
.map(async (view) => {
|
|
115
|
+
// WICHTIG: buildArchitecturalView gibt nur Module aus X-Dimension zurück
|
|
116
|
+
// X-Dimension = docs/modules/ = alle Module haben bereits API-Docs
|
|
117
|
+
const hasApiDocs = true; // buildArchitecturalView gibt nur Module aus X-Dimension zurück
|
|
118
|
+
const baseGap = {
|
|
119
|
+
module: {
|
|
120
|
+
file_path: view.module.file_path,
|
|
121
|
+
content_hash: view.module.content_hash
|
|
122
|
+
},
|
|
123
|
+
dependency_count: view.dependencies.length,
|
|
124
|
+
adr_count: view.adrs.length,
|
|
125
|
+
adr_numbers: view.adrs.map(adr => adr.adr_number),
|
|
126
|
+
has_api_docs: hasApiDocs, // Immer true für Module in buildArchitecturalView
|
|
127
|
+
gap_score: this.calculateGapScore(view.dependencies.length, view.adrs.length, hasApiDocs),
|
|
128
|
+
has_adrs: view.adrs.length > 0,
|
|
129
|
+
// Modul ist dokumentiert wenn es API-Docs ODER ADRs hat
|
|
130
|
+
// Da alle Module API-Docs haben, sind alle dokumentiert
|
|
131
|
+
// ADRs sind nur für architektonische Entscheidungen nötig
|
|
132
|
+
is_documented: hasApiDocs || view.adrs.length > 0
|
|
133
|
+
};
|
|
134
|
+
// Add context information for modules without ADRs (for KI-Agent ADR generation)
|
|
135
|
+
if (!baseGap.has_adrs) {
|
|
136
|
+
const context = await this.buildAdrGenerationContext(view.module, view.dependencies, args.pluginId);
|
|
137
|
+
return {
|
|
138
|
+
...baseGap,
|
|
139
|
+
context_for_adr_generation: context
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return baseGap;
|
|
143
|
+
}));
|
|
144
|
+
// Sort by gap score (highest first) and limit
|
|
145
|
+
gaps.sort((a, b) => b.gap_score - a.gap_score);
|
|
146
|
+
const limitedGaps = gaps.slice(0, limit);
|
|
44
147
|
// Separate into categories
|
|
45
|
-
const withoutAdrs =
|
|
46
|
-
const withFewAdrs =
|
|
47
|
-
const wellDocumented =
|
|
148
|
+
const withoutAdrs = limitedGaps.filter(g => !g.has_adrs);
|
|
149
|
+
const withFewAdrs = limitedGaps.filter(g => g.has_adrs && g.adr_count < 2);
|
|
150
|
+
const wellDocumented = limitedGaps.filter(g => g.has_adrs && g.adr_count >= 2);
|
|
48
151
|
// Calculate statistics
|
|
49
152
|
const stats = {
|
|
50
153
|
total_modules_analyzed: architecturalView.length,
|
|
51
|
-
modules_with_many_deps:
|
|
154
|
+
modules_with_many_deps: limitedGaps.length,
|
|
52
155
|
modules_without_adrs: withoutAdrs.length,
|
|
53
156
|
modules_with_few_adrs: withFewAdrs.length,
|
|
54
157
|
well_documented_modules: wellDocumented.length,
|
|
55
|
-
avg_dependencies:
|
|
56
|
-
? Math.round(
|
|
158
|
+
avg_dependencies: limitedGaps.length > 0
|
|
159
|
+
? Math.round(limitedGaps.reduce((sum, g) => sum + g.dependency_count, 0) / limitedGaps.length)
|
|
57
160
|
: 0,
|
|
58
|
-
avg_adrs:
|
|
59
|
-
? Math.round(
|
|
161
|
+
avg_adrs: limitedGaps.length > 0 && limitedGaps.filter(g => g.has_adrs).length > 0
|
|
162
|
+
? Math.round(limitedGaps.filter(g => g.has_adrs).reduce((sum, g) => sum + g.adr_count, 0) / limitedGaps.filter(g => g.has_adrs).length)
|
|
60
163
|
: 0
|
|
61
164
|
};
|
|
62
165
|
// Auto-generate ADRs if requested
|
|
@@ -93,15 +196,109 @@ class GapAnalysisTool {
|
|
|
93
196
|
recommendations: this.generateRecommendations(withoutAdrs, withFewAdrs, generatedAdrs.length)
|
|
94
197
|
}, null, 2);
|
|
95
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Builds context information for ADR generation by KI-Agent.
|
|
201
|
+
* Includes similar modules with ADRs, existing patterns, and cross-dimension context.
|
|
202
|
+
*/
|
|
203
|
+
async buildAdrGenerationContext(module, dependencies, pluginId) {
|
|
204
|
+
const context = {
|
|
205
|
+
similar_modules_with_adrs: [],
|
|
206
|
+
existing_adr_patterns: [],
|
|
207
|
+
dependencies_details: [],
|
|
208
|
+
cross_dimension_context: {
|
|
209
|
+
symbols: [],
|
|
210
|
+
incoming_dependencies: 0,
|
|
211
|
+
outgoing_dependencies: dependencies.length
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
try {
|
|
215
|
+
// 1. Find similar modules with ADRs (same directory or similar path structure)
|
|
216
|
+
const moduleDir = path.dirname(module.file_path);
|
|
217
|
+
const allModules = await this.moduleApi.getAllModules(pluginId);
|
|
218
|
+
// Get all ADRs and their file mappings
|
|
219
|
+
const adrDb = await this.dbManager.getDatabase('W');
|
|
220
|
+
const { AdrRepository } = await Promise.resolve().then(() => __importStar(require('../../repositories/adr-repository')));
|
|
221
|
+
const adrRepo = new AdrRepository(adrDb);
|
|
222
|
+
const allAdrs = await adrRepo.getAll(pluginId);
|
|
223
|
+
// Build map of file_path -> ADR numbers using file mappings
|
|
224
|
+
const adrsByPath = new Map();
|
|
225
|
+
for (const adr of allAdrs) {
|
|
226
|
+
const fileMappings = await adrRepo.getAdrFileMappings(adr.id);
|
|
227
|
+
for (const mapping of fileMappings) {
|
|
228
|
+
if (!adrsByPath.has(mapping.file_path)) {
|
|
229
|
+
adrsByPath.set(mapping.file_path, []);
|
|
230
|
+
}
|
|
231
|
+
adrsByPath.get(mapping.file_path).push(adr.adr_number);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Find modules in same directory or similar path structure with ADRs
|
|
235
|
+
for (const otherModule of allModules) {
|
|
236
|
+
if (otherModule.file_path === module.file_path)
|
|
237
|
+
continue;
|
|
238
|
+
const otherModuleDir = path.dirname(otherModule.file_path);
|
|
239
|
+
const hasAdrs = adrsByPath.has(otherModule.file_path);
|
|
240
|
+
// Similar if same directory or similar path depth
|
|
241
|
+
if (hasAdrs && (otherModuleDir === moduleDir ||
|
|
242
|
+
otherModuleDir.split(path.sep).length === moduleDir.split(path.sep).length)) {
|
|
243
|
+
context.similar_modules_with_adrs.push({
|
|
244
|
+
file_path: otherModule.file_path,
|
|
245
|
+
adr_numbers: adrsByPath.get(otherModule.file_path) || []
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Limit to top 5 similar modules
|
|
250
|
+
context.similar_modules_with_adrs = context.similar_modules_with_adrs.slice(0, 5);
|
|
251
|
+
// 2. Extract ADR patterns from similar modules
|
|
252
|
+
for (const similar of context.similar_modules_with_adrs) {
|
|
253
|
+
for (const adrNumber of similar.adr_numbers) {
|
|
254
|
+
const adr = await this.adrApi.getAdrByNumber(adrNumber, pluginId);
|
|
255
|
+
if (adr) {
|
|
256
|
+
// Extract pattern: first line of decision or context
|
|
257
|
+
const pattern = adr.content_markdown?.split('\n').find((line) => line.trim().startsWith('## Entscheidung') ||
|
|
258
|
+
line.trim().startsWith('## Kontext')) || 'ADR pattern';
|
|
259
|
+
context.existing_adr_patterns.push({
|
|
260
|
+
adr_number: adrNumber,
|
|
261
|
+
pattern: pattern.substring(0, 100) // Limit length
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Limit to top 10 patterns
|
|
267
|
+
context.existing_adr_patterns = context.existing_adr_patterns.slice(0, 10);
|
|
268
|
+
// 3. Get detailed dependencies information
|
|
269
|
+
context.dependencies_details = dependencies.map(dep => ({
|
|
270
|
+
to_module: dep.to_module || dep.toModule || '',
|
|
271
|
+
dependency_type: dep.dependency_type || dep.dependencyType || 'import'
|
|
272
|
+
}));
|
|
273
|
+
// 4. Get incoming dependencies count
|
|
274
|
+
const incomingDeps = await this.dependencyApi.getDependenciesByToModule(module.file_path, pluginId);
|
|
275
|
+
context.cross_dimension_context.incoming_dependencies = incomingDeps.length;
|
|
276
|
+
// 5. Get symbols for cross-dimension context
|
|
277
|
+
const symbols = await this.crossDimensionApi.getSymbolsForModule(module.file_path, pluginId);
|
|
278
|
+
context.cross_dimension_context.symbols = symbols.slice(0, 20).map((sym) => ({
|
|
279
|
+
name: sym.name || sym.symbol_name || '',
|
|
280
|
+
type: sym.type || sym.symbol_type || ''
|
|
281
|
+
}));
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
console.warn(`[GapAnalysisTool] Failed to build ADR generation context for ${module.file_path}: ${error?.message || String(error)}`);
|
|
285
|
+
}
|
|
286
|
+
return context;
|
|
287
|
+
}
|
|
96
288
|
/**
|
|
97
289
|
* Calculates a gap score for prioritization.
|
|
98
290
|
* Higher score = more urgent to document.
|
|
99
291
|
*
|
|
100
|
-
* Formula: (dependency_count * 2) - (adr_count * 10)
|
|
292
|
+
* Formula: (dependency_count * 2) - (adr_count * 10) - (hasApiDocs ? 50 : 0)
|
|
101
293
|
* This prioritizes modules with many dependencies but few ADRs.
|
|
294
|
+
* Module mit API-Docs sind bereits dokumentiert, daher großer Penalty (-50).
|
|
295
|
+
* Da buildArchitecturalView nur Module aus X-Dimension zurückgibt, haben alle Module API-Docs.
|
|
102
296
|
*/
|
|
103
|
-
calculateGapScore(dependencyCount, adrCount) {
|
|
104
|
-
|
|
297
|
+
calculateGapScore(dependencyCount, adrCount, hasApiDocs = false) {
|
|
298
|
+
const baseScore = (dependencyCount * 2) - (adrCount * 10);
|
|
299
|
+
// Module mit API-Docs sind dokumentiert, großer Penalty
|
|
300
|
+
// Da alle Module in buildArchitecturalView API-Docs haben, wird dieser Penalty immer angewendet
|
|
301
|
+
return hasApiDocs ? baseScore - 50 : baseScore;
|
|
105
302
|
}
|
|
106
303
|
/**
|
|
107
304
|
* Generates recommendations based on gaps.
|
|
@@ -123,11 +320,113 @@ class GapAnalysisTool {
|
|
|
123
320
|
if (generatedCount > 0) {
|
|
124
321
|
recommendations.push(`\n✅ ${generatedCount} ADR(s) wurden automatisch generiert.`);
|
|
125
322
|
}
|
|
323
|
+
else if (withoutAdrs.length > 0) {
|
|
324
|
+
recommendations.push(`\n💡 Nutze die Kontext-Informationen (context_for_adr_generation) für jedes Modul, um ADRs nach Schema zu erstellen (siehe .cursor/rules/022-adr-workflow.mdc).`);
|
|
325
|
+
}
|
|
126
326
|
if (recommendations.length === 0) {
|
|
127
327
|
recommendations.push('✅ Alle Module mit vielen Dependencies sind gut dokumentiert!');
|
|
128
328
|
}
|
|
129
329
|
return recommendations;
|
|
130
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Fallback: Direct database queries when buildArchitecturalView returns empty.
|
|
333
|
+
* This handles cases where pluginId might not match or data structure differs.
|
|
334
|
+
*/
|
|
335
|
+
async fallbackDirectQuery(pluginId, minDeps, limit) {
|
|
336
|
+
const moduleDb = await this.dbManager.getDatabase('X');
|
|
337
|
+
const depDb = await this.dbManager.getDatabase('Z');
|
|
338
|
+
const adrDb = await this.dbManager.getDatabase('W');
|
|
339
|
+
const { ModuleRepository } = await Promise.resolve().then(() => __importStar(require('../../repositories/module-repository')));
|
|
340
|
+
const { DependencyRepository } = await Promise.resolve().then(() => __importStar(require('../../repositories/dependency-repository')));
|
|
341
|
+
const { AdrRepository } = await Promise.resolve().then(() => __importStar(require('../../repositories/adr-repository')));
|
|
342
|
+
const moduleRepo = new ModuleRepository(moduleDb);
|
|
343
|
+
const depRepo = new DependencyRepository(depDb);
|
|
344
|
+
const adrRepo = new AdrRepository(adrDb);
|
|
345
|
+
// Get all modules
|
|
346
|
+
const modules = await moduleRepo.getAll(pluginId);
|
|
347
|
+
// Get dependency counts per module
|
|
348
|
+
const depCounts = new Map();
|
|
349
|
+
const allDeps = await depRepo.getAll(pluginId);
|
|
350
|
+
for (const dep of allDeps) {
|
|
351
|
+
const count = depCounts.get(dep.from_module) || 0;
|
|
352
|
+
depCounts.set(dep.from_module, count + 1);
|
|
353
|
+
}
|
|
354
|
+
// Build gaps with context information
|
|
355
|
+
const gaps = [];
|
|
356
|
+
for (const module of modules) {
|
|
357
|
+
const depCount = depCounts.get(module.file_path) || 0;
|
|
358
|
+
if (depCount >= minDeps) {
|
|
359
|
+
const adrs = await adrRepo.findByFilePath(module.file_path, pluginId);
|
|
360
|
+
const dependencies = await depRepo.findByFromModule(module.file_path, pluginId);
|
|
361
|
+
// WICHTIG: Module aus X-Dimension haben bereits API-Docs
|
|
362
|
+
// X-Dimension = docs/modules/ = alle Module haben bereits API-Docs
|
|
363
|
+
const hasApiDocs = true; // Module aus X-Dimension haben immer API-Docs
|
|
364
|
+
const baseGap = {
|
|
365
|
+
module: {
|
|
366
|
+
file_path: module.file_path,
|
|
367
|
+
content_hash: module.content_hash
|
|
368
|
+
},
|
|
369
|
+
dependency_count: depCount,
|
|
370
|
+
adr_count: adrs.length,
|
|
371
|
+
adr_numbers: adrs.map(adr => adr.adr_number),
|
|
372
|
+
has_api_docs: hasApiDocs, // Immer true für Module aus X-Dimension
|
|
373
|
+
gap_score: this.calculateGapScore(depCount, adrs.length, hasApiDocs),
|
|
374
|
+
has_adrs: adrs.length > 0,
|
|
375
|
+
// Modul ist dokumentiert wenn es API-Docs ODER ADRs hat
|
|
376
|
+
is_documented: hasApiDocs || adrs.length > 0
|
|
377
|
+
};
|
|
378
|
+
// Add context information for modules without ADRs
|
|
379
|
+
if (!baseGap.has_adrs) {
|
|
380
|
+
const context = await this.buildAdrGenerationContext(module, dependencies, pluginId);
|
|
381
|
+
gaps.push({
|
|
382
|
+
...baseGap,
|
|
383
|
+
context_for_adr_generation: context
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
gaps.push(baseGap);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
// Sort by gap score
|
|
392
|
+
gaps.sort((a, b) => b.gap_score - a.gap_score);
|
|
393
|
+
const limitedGaps = gaps.slice(0, limit);
|
|
394
|
+
// Separate into categories
|
|
395
|
+
const withoutAdrs = limitedGaps.filter(g => !g.has_adrs);
|
|
396
|
+
const withFewAdrs = limitedGaps.filter(g => g.has_adrs && g.adr_count < 2);
|
|
397
|
+
const wellDocumented = limitedGaps.filter(g => g.has_adrs && g.adr_count >= 2);
|
|
398
|
+
// Calculate statistics
|
|
399
|
+
const stats = {
|
|
400
|
+
total_modules_analyzed: modules.length,
|
|
401
|
+
modules_with_many_deps: limitedGaps.length,
|
|
402
|
+
modules_without_adrs: withoutAdrs.length,
|
|
403
|
+
modules_with_few_adrs: withFewAdrs.length,
|
|
404
|
+
well_documented_modules: wellDocumented.length,
|
|
405
|
+
avg_dependencies: limitedGaps.length > 0
|
|
406
|
+
? Math.round(limitedGaps.reduce((sum, g) => sum + g.dependency_count, 0) / limitedGaps.length)
|
|
407
|
+
: 0,
|
|
408
|
+
avg_adrs: limitedGaps.length > 0 && limitedGaps.filter(g => g.has_adrs).length > 0
|
|
409
|
+
? Math.round(limitedGaps.filter(g => g.has_adrs).reduce((sum, g) => sum + g.adr_count, 0) / limitedGaps.filter(g => g.has_adrs).length)
|
|
410
|
+
: 0
|
|
411
|
+
};
|
|
412
|
+
return JSON.stringify({
|
|
413
|
+
summary: {
|
|
414
|
+
min_dependencies_threshold: minDeps,
|
|
415
|
+
analysis_date: new Date().toISOString(),
|
|
416
|
+
statistics: stats,
|
|
417
|
+
auto_generated_adrs: 0,
|
|
418
|
+
fallback_used: true,
|
|
419
|
+
note: 'Fallback direct database queries used (buildArchitecturalView returned empty)'
|
|
420
|
+
},
|
|
421
|
+
gaps: {
|
|
422
|
+
without_adrs: withoutAdrs,
|
|
423
|
+
with_few_adrs: withFewAdrs,
|
|
424
|
+
well_documented: wellDocumented
|
|
425
|
+
},
|
|
426
|
+
generated_adrs: [],
|
|
427
|
+
recommendations: this.generateRecommendations(withoutAdrs, withFewAdrs, 0)
|
|
428
|
+
}, null, 2);
|
|
429
|
+
}
|
|
131
430
|
}
|
|
132
431
|
exports.GapAnalysisTool = GapAnalysisTool;
|
|
133
432
|
//# sourceMappingURL=gap-analysis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gap-analysis.js","sourceRoot":"","sources":["../../../src/mcp/tools/gap-analysis.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gap-analysis.js","sourceRoot":"","sources":["../../../src/mcp/tools/gap-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning-path.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/learning-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7D;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACzC,SAAS,EAAE,cAAc,GAC1B,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"learning-path.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/learning-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7D;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACzC,SAAS,EAAE,cAAc,GAC1B,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
|
|
@@ -9,10 +9,24 @@ const embedding_generator_1 = require("../../embedding/embedding-generator");
|
|
|
9
9
|
* Generates guided learning path for understanding a topic.
|
|
10
10
|
*/
|
|
11
11
|
async function executeLearningPath(args, dbManager) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
try {
|
|
13
|
+
const embeddingGenerator = new embedding_generator_1.EmbeddingGenerator();
|
|
14
|
+
const semanticSearchApi = new semantic_search_api_1.SemanticSearchApi(dbManager, embeddingGenerator);
|
|
15
|
+
const learningPathApi = new learning_path_api_1.LearningPathApi(dbManager, semanticSearchApi);
|
|
16
|
+
const path = await learningPathApi.generateLearningPath(args.topic, args.pluginId);
|
|
17
|
+
return JSON.stringify(path, null, 2);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
// Catch-all error handler - ensure we always return valid JSON
|
|
21
|
+
const errorMsg = error?.message || String(error);
|
|
22
|
+
const errorStack = error?.stack ? String(error.stack).substring(0, 500) : undefined;
|
|
23
|
+
return JSON.stringify({
|
|
24
|
+
topic: args.topic,
|
|
25
|
+
path: [],
|
|
26
|
+
estimated_time: '0 minutes',
|
|
27
|
+
error: `Learning path generation failed: ${errorMsg}`,
|
|
28
|
+
stack: errorStack
|
|
29
|
+
}, null, 2);
|
|
30
|
+
}
|
|
17
31
|
}
|
|
18
32
|
//# sourceMappingURL=learning-path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning-path.js","sourceRoot":"","sources":["../../../src/mcp/tools/learning-path.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"learning-path.js","sourceRoot":"","sources":["../../../src/mcp/tools/learning-path.ts"],"names":[],"mappings":";;AASA,kDAuBC;AA/BD,uEAAkE;AAClE,mEAA8D;AAC9D,6EAAyE;AAEzE;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CACrC,IAAyC,EACzC,SAAyB;IAEzB,IAAI,CAAC;QACD,MAAM,kBAAkB,GAAG,IAAI,wCAAkB,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,IAAI,uCAAiB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAC/E,MAAM,eAAe,GAAG,IAAI,mCAAe,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAE1E,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,IAAI,CAAC,SAAS,CAAC;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,EAAE;YACR,cAAc,EAAE,WAAW;YAC3B,KAAK,EAAE,oCAAoC,QAAQ,EAAE;YACrD,KAAK,EAAE,UAAU;SACpB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-discovery.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/semantic-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic-discovery.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/semantic-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAOhD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC1C,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACzD,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,QAAQ,GACnB,OAAO,CAAC,MAAM,CAAC,CAkHjB"}
|