@noyrax/5d-database-plugin 0.1.8 → 0.1.11-beta.1
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/MCP_SERVER_SETUP.md +14 -0
- package/README.md +49 -3
- package/SETUP_NEW_PROJECT.md +245 -14
- package/out/api/adr-api.d.ts +15 -2
- package/out/api/adr-api.d.ts.map +1 -1
- package/out/api/adr-api.js +98 -4
- package/out/api/adr-api.js.map +1 -1
- package/out/api/index.d.ts +1 -0
- package/out/api/index.d.ts.map +1 -1
- package/out/api/index.js +3 -1
- package/out/api/index.js.map +1 -1
- package/out/api/ingestion-api.d.ts +42 -0
- package/out/api/ingestion-api.d.ts.map +1 -0
- package/out/api/ingestion-api.js +148 -0
- package/out/api/ingestion-api.js.map +1 -0
- package/out/api/module-api.d.ts +11 -1
- package/out/api/module-api.d.ts.map +1 -1
- package/out/api/module-api.js +54 -2
- package/out/api/module-api.js.map +1 -1
- package/out/cli/ingest-cli.js +43 -19
- package/out/cli/ingest-cli.js.map +1 -1
- package/out/cli/merge-workspaces-cli.d.ts +3 -0
- package/out/cli/merge-workspaces-cli.d.ts.map +1 -0
- package/out/cli/merge-workspaces-cli.js +199 -0
- package/out/cli/merge-workspaces-cli.js.map +1 -0
- package/out/cli/tool-cli.js +59 -4
- 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 +6 -2
- package/out/core/chromadb-vector-database.js.map +1 -1
- package/out/core/migration-manager.d.ts +42 -2
- package/out/core/migration-manager.d.ts.map +1 -1
- package/out/core/migration-manager.js +218 -11
- package/out/core/migration-manager.js.map +1 -1
- package/out/core/multi-db-manager.d.ts +10 -0
- package/out/core/multi-db-manager.d.ts.map +1 -1
- package/out/core/multi-db-manager.js +51 -0
- package/out/core/multi-db-manager.js.map +1 -1
- package/out/ingestors/adr-ingestor.d.ts +7 -0
- package/out/ingestors/adr-ingestor.d.ts.map +1 -1
- package/out/ingestors/adr-ingestor.js +41 -9
- package/out/ingestors/adr-ingestor.js.map +1 -1
- package/out/mcp/server.d.ts +3 -0
- package/out/mcp/server.d.ts.map +1 -1
- package/out/mcp/server.js +106 -2
- package/out/mcp/server.js.map +1 -1
- package/out/mcp/tools/adr-generator.d.ts +123 -0
- package/out/mcp/tools/adr-generator.d.ts.map +1 -0
- package/out/mcp/tools/adr-generator.js +1113 -0
- package/out/mcp/tools/adr-generator.js.map +1 -0
- package/out/mcp/tools/gap-analysis.d.ts +6 -2
- package/out/mcp/tools/gap-analysis.d.ts.map +1 -1
- package/out/mcp/tools/gap-analysis.js +32 -5
- package/out/mcp/tools/gap-analysis.js.map +1 -1
- package/out/repositories/module-repository.d.ts +5 -0
- package/out/repositories/module-repository.d.ts.map +1 -1
- package/out/repositories/module-repository.js +24 -0
- package/out/repositories/module-repository.js.map +1 -1
- package/out/services/adr-context-builder.d.ts +70 -0
- package/out/services/adr-context-builder.d.ts.map +1 -0
- package/out/services/adr-context-builder.js +141 -0
- package/out/services/adr-context-builder.js.map +1 -0
- package/out/services/adr-pattern-analyzer.d.ts +75 -0
- package/out/services/adr-pattern-analyzer.d.ts.map +1 -0
- package/out/services/adr-pattern-analyzer.js +339 -0
- package/out/services/adr-pattern-analyzer.js.map +1 -0
- package/out/services/adr-reasoning-service.d.ts +63 -0
- package/out/services/adr-reasoning-service.d.ts.map +1 -0
- package/out/services/adr-reasoning-service.js +760 -0
- package/out/services/adr-reasoning-service.js.map +1 -0
- package/out/services/navigation-builder.d.ts.map +1 -1
- package/out/services/navigation-builder.js +70 -11
- package/out/services/navigation-builder.js.map +1 -1
- package/out/services/noyrax-integration-service.d.ts +51 -0
- package/out/services/noyrax-integration-service.d.ts.map +1 -0
- package/out/services/noyrax-integration-service.js +215 -0
- package/out/services/noyrax-integration-service.js.map +1 -0
- package/out/services/semantic-pattern-matcher.d.ts +61 -0
- package/out/services/semantic-pattern-matcher.d.ts.map +1 -0
- package/out/services/semantic-pattern-matcher.js +183 -0
- package/out/services/semantic-pattern-matcher.js.map +1 -0
- package/out/services/workflow-orchestrator.d.ts +63 -0
- package/out/services/workflow-orchestrator.d.ts.map +1 -0
- package/out/services/workflow-orchestrator.js +111 -0
- package/out/services/workflow-orchestrator.js.map +1 -0
- package/out/ui/commands.d.ts.map +1 -1
- package/out/ui/commands.js +112 -1
- package/out/ui/commands.js.map +1 -1
- package/out/ui/database-explorer.d.ts.map +1 -1
- package/out/ui/database-explorer.js +47 -1
- package/out/ui/database-explorer.js.map +1 -1
- package/package.json +22 -4
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SemanticPatternMatcher = void 0;
|
|
4
|
+
const semantic_search_api_1 = require("../api/semantic-search-api");
|
|
5
|
+
const architecture_mining_1 = require("../mcp/tools/architecture-mining");
|
|
6
|
+
const module_api_1 = require("../api/module-api");
|
|
7
|
+
const adr_api_1 = require("../api/adr-api");
|
|
8
|
+
/**
|
|
9
|
+
* Uses Semantic Search (V-Dimension) and Architecture Mining to find similar modules and their ADRs.
|
|
10
|
+
* Used for deterministic ADR reconstruction.
|
|
11
|
+
*/
|
|
12
|
+
class SemanticPatternMatcher {
|
|
13
|
+
constructor(dbManager, idMapper, embeddingGenerator) {
|
|
14
|
+
this.dbManager = dbManager;
|
|
15
|
+
this.semanticSearchApi = new semantic_search_api_1.SemanticSearchApi(dbManager, embeddingGenerator);
|
|
16
|
+
this.architectureMiningTool = new architecture_mining_1.ArchitectureMiningTool(dbManager, idMapper);
|
|
17
|
+
this.moduleApi = new module_api_1.ModuleApi(dbManager);
|
|
18
|
+
this.adrApi = new adr_api_1.AdrApi(dbManager);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Finds similar modules using Semantic Search (V-Dimension).
|
|
22
|
+
*/
|
|
23
|
+
async findSimilarModules(targetModule, pluginId, limit = 5) {
|
|
24
|
+
// Check if semantic search is available
|
|
25
|
+
if (!this.semanticSearchApi['embeddingGenerator'].isConfigured()) {
|
|
26
|
+
// Fallback: Use file path similarity
|
|
27
|
+
return this.findSimilarModulesByPath(targetModule, pluginId, limit);
|
|
28
|
+
}
|
|
29
|
+
// Build query from module content
|
|
30
|
+
const query = this.buildModuleQuery(targetModule);
|
|
31
|
+
try {
|
|
32
|
+
// Search for similar modules in X-Dimension
|
|
33
|
+
const results = await this.semanticSearchApi.search(query, pluginId, {
|
|
34
|
+
dimensions: ['X'],
|
|
35
|
+
limit: limit * 2 // Get more results to filter out the target module
|
|
36
|
+
});
|
|
37
|
+
// Filter out the target module
|
|
38
|
+
const filteredResults = results.filter(result => result.externalId !== targetModule.file_path);
|
|
39
|
+
// Fetch actual modules for the results
|
|
40
|
+
const modules = [];
|
|
41
|
+
for (const result of results.slice(0, limit * 2)) {
|
|
42
|
+
if (result.externalId === targetModule.file_path) {
|
|
43
|
+
continue; // Skip target module
|
|
44
|
+
}
|
|
45
|
+
const module = await this.moduleApi.getModuleByPath(result.externalId, pluginId);
|
|
46
|
+
if (module) {
|
|
47
|
+
modules.push({
|
|
48
|
+
module,
|
|
49
|
+
similarityScore: result.score
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (modules.length >= limit) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return modules;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.warn(`[SemanticPatternMatcher] Semantic search failed, using fallback: ${error}`);
|
|
60
|
+
return this.findSimilarModulesByPath(targetModule, pluginId, limit);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Finds ADRs for similar modules.
|
|
65
|
+
*/
|
|
66
|
+
async findAdrsForSimilarModules(targetModule, pluginId) {
|
|
67
|
+
const similarModules = await this.findSimilarModules(targetModule, pluginId, 10);
|
|
68
|
+
const adrsForSimilar = [];
|
|
69
|
+
for (const similar of similarModules) {
|
|
70
|
+
// Get ADRs for this similar module
|
|
71
|
+
const adrs = await this.adrApi.getAdrsByFilePath(similar.module.file_path, pluginId);
|
|
72
|
+
for (const adr of adrs) {
|
|
73
|
+
adrsForSimilar.push({
|
|
74
|
+
adr,
|
|
75
|
+
module: similar.module,
|
|
76
|
+
similarityScore: similar.similarityScore
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Sort by similarity score (highest first)
|
|
81
|
+
adrsForSimilar.sort((a, b) => b.similarityScore - a.similarityScore);
|
|
82
|
+
return adrsForSimilar;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Finds architectural patterns in the target module.
|
|
86
|
+
*/
|
|
87
|
+
async findPatterns(targetModule, pluginId) {
|
|
88
|
+
try {
|
|
89
|
+
const miningResult = await this.architectureMiningTool.execute({
|
|
90
|
+
pluginId,
|
|
91
|
+
filePath: targetModule.file_path
|
|
92
|
+
});
|
|
93
|
+
const parsed = JSON.parse(miningResult);
|
|
94
|
+
const decisions = parsed.decisions || [];
|
|
95
|
+
return decisions.map((d) => ({
|
|
96
|
+
pattern: d.pattern,
|
|
97
|
+
evidence: d.evidence || [],
|
|
98
|
+
confidence: d.confidence || 'medium'
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.warn(`[SemanticPatternMatcher] Architecture mining failed: ${error}`);
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Builds a semantic search query from module information.
|
|
108
|
+
*/
|
|
109
|
+
buildModuleQuery(module) {
|
|
110
|
+
const fileName = module.file_path.split('/').pop() || '';
|
|
111
|
+
const dirName = module.file_path.split('/').slice(-2, -1)[0] || '';
|
|
112
|
+
// Extract key terms from file path
|
|
113
|
+
const terms = [];
|
|
114
|
+
// Add directory name if meaningful
|
|
115
|
+
if (dirName && dirName !== 'src') {
|
|
116
|
+
terms.push(dirName);
|
|
117
|
+
}
|
|
118
|
+
// Add file name without extension
|
|
119
|
+
const baseName = fileName.replace(/\.[^/.]+$/, '');
|
|
120
|
+
terms.push(baseName);
|
|
121
|
+
// Extract words from camelCase/PascalCase
|
|
122
|
+
const words = baseName
|
|
123
|
+
.replace(/([A-Z])/g, ' $1')
|
|
124
|
+
.split(/[\s_-]+/)
|
|
125
|
+
.filter(w => w.length > 2);
|
|
126
|
+
terms.push(...words);
|
|
127
|
+
// Build query
|
|
128
|
+
return terms.join(' ');
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Fallback: Finds similar modules by file path similarity.
|
|
132
|
+
*/
|
|
133
|
+
async findSimilarModulesByPath(targetModule, pluginId, limit) {
|
|
134
|
+
const allModules = await this.moduleApi.getAllModules(pluginId);
|
|
135
|
+
const targetPath = targetModule.file_path;
|
|
136
|
+
const targetDir = targetPath.split('/').slice(0, -1).join('/');
|
|
137
|
+
const targetFileName = targetPath.split('/').pop() || '';
|
|
138
|
+
// Score modules by path similarity
|
|
139
|
+
const scored = [];
|
|
140
|
+
for (const module of allModules) {
|
|
141
|
+
if (module.file_path === targetPath) {
|
|
142
|
+
continue; // Skip target module
|
|
143
|
+
}
|
|
144
|
+
let score = 0;
|
|
145
|
+
const modulePath = module.file_path;
|
|
146
|
+
const moduleDir = modulePath.split('/').slice(0, -1).join('/');
|
|
147
|
+
const moduleFileName = modulePath.split('/').pop() || '';
|
|
148
|
+
// Same directory = high score
|
|
149
|
+
if (moduleDir === targetDir) {
|
|
150
|
+
score += 50;
|
|
151
|
+
}
|
|
152
|
+
// Similar directory structure = medium score
|
|
153
|
+
const targetDirParts = targetDir.split('/');
|
|
154
|
+
const moduleDirParts = moduleDir.split('/');
|
|
155
|
+
const commonDirParts = targetDirParts.filter(part => moduleDirParts.includes(part));
|
|
156
|
+
score += commonDirParts.length * 10;
|
|
157
|
+
// Similar file name = medium score
|
|
158
|
+
if (moduleFileName.toLowerCase().includes(targetFileName.toLowerCase().substring(0, 5)) ||
|
|
159
|
+
targetFileName.toLowerCase().includes(moduleFileName.toLowerCase().substring(0, 5))) {
|
|
160
|
+
score += 20;
|
|
161
|
+
}
|
|
162
|
+
// Same file name pattern (e.g., both end with "-api.ts")
|
|
163
|
+
if (targetFileName.match(/-[a-z]+\.ts$/) && moduleFileName.match(/-[a-z]+\.ts$/)) {
|
|
164
|
+
const targetSuffix = targetFileName.match(/-([a-z]+)\.ts$/)?.[1];
|
|
165
|
+
const moduleSuffix = moduleFileName.match(/-([a-z]+)\.ts$/)?.[1];
|
|
166
|
+
if (targetSuffix === moduleSuffix) {
|
|
167
|
+
score += 30;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (score > 0) {
|
|
171
|
+
scored.push({ module, score });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Sort by score and return top results
|
|
175
|
+
scored.sort((a, b) => b.score - a.score);
|
|
176
|
+
return scored.slice(0, limit).map(item => ({
|
|
177
|
+
module: item.module,
|
|
178
|
+
similarityScore: item.score / 100 // Normalize to 0-1 range
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.SemanticPatternMatcher = SemanticPatternMatcher;
|
|
183
|
+
//# sourceMappingURL=semantic-pattern-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-pattern-matcher.js","sourceRoot":"","sources":["../../src/services/semantic-pattern-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { IngestionOrchestrator } from './ingestion-orchestrator';
|
|
2
|
+
import { MultiDbManager } from '../core/multi-db-manager';
|
|
3
|
+
/**
|
|
4
|
+
* Options for running the full workflow.
|
|
5
|
+
*/
|
|
6
|
+
export interface WorkflowOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Whether to generate documentation first (default: true).
|
|
9
|
+
*/
|
|
10
|
+
generateDocs?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Whether to perform full ingestion (default: false, uses incremental).
|
|
13
|
+
*/
|
|
14
|
+
fullIngestion?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Whether to generate embeddings (default: true).
|
|
17
|
+
*/
|
|
18
|
+
generateEmbeddings?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to skip if docs are already up-to-date (default: false).
|
|
21
|
+
*/
|
|
22
|
+
skipIfUpToDate?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Result of running the workflow.
|
|
26
|
+
*/
|
|
27
|
+
export interface WorkflowResult {
|
|
28
|
+
success: boolean;
|
|
29
|
+
docsGenerated: boolean;
|
|
30
|
+
ingestionCompleted: boolean;
|
|
31
|
+
embeddingsGenerated: boolean;
|
|
32
|
+
errors?: string[];
|
|
33
|
+
warnings?: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Orchestrates the complete workflow:
|
|
37
|
+
* 1. Noyrax: Generate documentation (scan → validate → generate)
|
|
38
|
+
* 2. 5D Database: Ingest documentation into SQLite databases
|
|
39
|
+
* 3. V-Dimension: Generate embeddings and calculate importance scores
|
|
40
|
+
*/
|
|
41
|
+
export declare class WorkflowOrchestrator {
|
|
42
|
+
private noyraxService;
|
|
43
|
+
private ingestionOrchestrator;
|
|
44
|
+
private dbManager;
|
|
45
|
+
private workspaceRoot;
|
|
46
|
+
constructor(workspaceRoot: string, dbManager: MultiDbManager, ingestionOrchestrator: IngestionOrchestrator);
|
|
47
|
+
/**
|
|
48
|
+
* Runs the full workflow.
|
|
49
|
+
*
|
|
50
|
+
* @param options Workflow options
|
|
51
|
+
* @returns Promise that resolves with the workflow result
|
|
52
|
+
*/
|
|
53
|
+
runFullWorkflow(options?: WorkflowOptions): Promise<WorkflowResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Checks the status of the workflow prerequisites.
|
|
56
|
+
*/
|
|
57
|
+
checkStatus(): Promise<{
|
|
58
|
+
noyraxAvailable: boolean;
|
|
59
|
+
docsStatus: import('./noyrax-integration-service').DocsStatus;
|
|
60
|
+
dbManagerReady: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=workflow-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-orchestrator.d.ts","sourceRoot":"","sources":["../../src/services/workflow-orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,aAAa,CAAS;gBAG1B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,cAAc,EACzB,qBAAqB,EAAE,qBAAqB;IAQhD;;;;;OAKG;IACG,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAmF7E;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,8BAA8B,EAAE,UAAU,CAAC;QAC9D,cAAc,EAAE,OAAO,CAAC;KAC3B,CAAC;CAYL"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkflowOrchestrator = void 0;
|
|
4
|
+
const noyrax_integration_service_1 = require("./noyrax-integration-service");
|
|
5
|
+
const docs_path_resolver_1 = require("../core/docs-path-resolver");
|
|
6
|
+
/**
|
|
7
|
+
* Orchestrates the complete workflow:
|
|
8
|
+
* 1. Noyrax: Generate documentation (scan → validate → generate)
|
|
9
|
+
* 2. 5D Database: Ingest documentation into SQLite databases
|
|
10
|
+
* 3. V-Dimension: Generate embeddings and calculate importance scores
|
|
11
|
+
*/
|
|
12
|
+
class WorkflowOrchestrator {
|
|
13
|
+
constructor(workspaceRoot, dbManager, ingestionOrchestrator) {
|
|
14
|
+
this.workspaceRoot = workspaceRoot;
|
|
15
|
+
this.dbManager = dbManager;
|
|
16
|
+
this.ingestionOrchestrator = ingestionOrchestrator;
|
|
17
|
+
this.noyraxService = new noyrax_integration_service_1.NoyraxIntegrationService(workspaceRoot);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runs the full workflow.
|
|
21
|
+
*
|
|
22
|
+
* @param options Workflow options
|
|
23
|
+
* @returns Promise that resolves with the workflow result
|
|
24
|
+
*/
|
|
25
|
+
async runFullWorkflow(options = {}) {
|
|
26
|
+
const { generateDocs = true, fullIngestion = false, generateEmbeddings = true, skipIfUpToDate = false } = options;
|
|
27
|
+
const result = {
|
|
28
|
+
success: false,
|
|
29
|
+
docsGenerated: false,
|
|
30
|
+
ingestionCompleted: false,
|
|
31
|
+
embeddingsGenerated: false,
|
|
32
|
+
errors: [],
|
|
33
|
+
warnings: []
|
|
34
|
+
};
|
|
35
|
+
try {
|
|
36
|
+
// Step 1: Generate documentation (if requested)
|
|
37
|
+
if (generateDocs) {
|
|
38
|
+
// Check if docs need regeneration
|
|
39
|
+
if (skipIfUpToDate) {
|
|
40
|
+
const needsRegen = await this.noyraxService.needsRegeneration();
|
|
41
|
+
if (!needsRegen) {
|
|
42
|
+
console.log('[WorkflowOrchestrator] Documentation is up-to-date, skipping generation.');
|
|
43
|
+
result.docsGenerated = false; // Not generated, but exists
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('[WorkflowOrchestrator] Documentation needs regeneration, generating...');
|
|
47
|
+
await this.noyraxService.generateDocumentation();
|
|
48
|
+
result.docsGenerated = true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log('[WorkflowOrchestrator] Generating documentation...');
|
|
53
|
+
await this.noyraxService.generateDocumentation();
|
|
54
|
+
result.docsGenerated = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Step 2: Find docs path
|
|
58
|
+
const docsPath = docs_path_resolver_1.DocsPathResolver.findDocsDirectoryFromPath(this.workspaceRoot);
|
|
59
|
+
if (!docsPath) {
|
|
60
|
+
throw new Error('docs/ directory not found. ' +
|
|
61
|
+
'Please ensure documentation has been generated or specify the docs path.');
|
|
62
|
+
}
|
|
63
|
+
// Step 3: Get plugin ID
|
|
64
|
+
const pluginId = this.dbManager.getPluginId();
|
|
65
|
+
// Step 4: Perform ingestion
|
|
66
|
+
console.log('[WorkflowOrchestrator] Starting ingestion...');
|
|
67
|
+
if (fullIngestion) {
|
|
68
|
+
await this.ingestionOrchestrator.ingestFull(this.workspaceRoot, pluginId, docsPath);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
await this.ingestionOrchestrator.ingestIncremental(this.workspaceRoot, pluginId, docsPath);
|
|
72
|
+
}
|
|
73
|
+
result.ingestionCompleted = true;
|
|
74
|
+
// Step 5: Generate embeddings (if requested)
|
|
75
|
+
// Note: Embeddings are already generated during ingestion (V-Dimension),
|
|
76
|
+
// but we can verify they exist
|
|
77
|
+
if (generateEmbeddings) {
|
|
78
|
+
// Embeddings are handled by IngestionOrchestrator during ingestion
|
|
79
|
+
// This is just a flag to indicate they should be generated
|
|
80
|
+
result.embeddingsGenerated = true;
|
|
81
|
+
}
|
|
82
|
+
result.success = true;
|
|
83
|
+
console.log('[WorkflowOrchestrator] Full workflow completed successfully.');
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const errorMessage = error.message || String(error);
|
|
87
|
+
result.errors = result.errors || [];
|
|
88
|
+
result.errors.push(errorMessage);
|
|
89
|
+
result.success = false;
|
|
90
|
+
console.error('[WorkflowOrchestrator] Workflow failed:', errorMessage);
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Checks the status of the workflow prerequisites.
|
|
97
|
+
*/
|
|
98
|
+
async checkStatus() {
|
|
99
|
+
// Check if Noyrax is available by checking docs status
|
|
100
|
+
const docsStatus = await this.noyraxService.checkDocsStatus();
|
|
101
|
+
const noyraxAvailable = docsStatus.exists || docsStatus.hasModules;
|
|
102
|
+
const dbManagerReady = this.dbManager !== undefined;
|
|
103
|
+
return {
|
|
104
|
+
noyraxAvailable,
|
|
105
|
+
docsStatus,
|
|
106
|
+
dbManagerReady
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.WorkflowOrchestrator = WorkflowOrchestrator;
|
|
111
|
+
//# sourceMappingURL=workflow-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-orchestrator.js","sourceRoot":"","sources":["../../src/services/workflow-orchestrator.ts"],"names":[],"mappings":";;;AAAA,6EAAwE;AAGxE,mEAA8D;AAuC9D;;;;;GAKG;AACH,MAAa,oBAAoB;IAM7B,YACI,aAAqB,EACrB,SAAyB,EACzB,qBAA4C;QAE5C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,qDAAwB,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,UAA2B,EAAE;QAC/C,MAAM,EACF,YAAY,GAAG,IAAI,EACnB,aAAa,GAAG,KAAK,EACrB,kBAAkB,GAAG,IAAI,EACzB,cAAc,GAAG,KAAK,EACzB,GAAG,OAAO,CAAC;QAEZ,MAAM,MAAM,GAAmB;YAC3B,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,KAAK;YACpB,kBAAkB,EAAE,KAAK;YACzB,mBAAmB,EAAE,KAAK;YAC1B,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;SACf,CAAC;QAEF,IAAI,CAAC;YACD,gDAAgD;YAChD,IAAI,YAAY,EAAE,CAAC;gBACf,kCAAkC;gBAClC,IAAI,cAAc,EAAE,CAAC;oBACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;oBAChE,IAAI,CAAC,UAAU,EAAE,CAAC;wBACd,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;wBACxF,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,4BAA4B;oBAC9D,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;wBACtF,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;wBACjD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;oBAChC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;oBAClE,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;oBACjD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;gBAChC,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,MAAM,QAAQ,GAAG,qCAAgB,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACX,6BAA6B;oBAC7B,0EAA0E,CAC7E,CAAC;YACN,CAAC;YAED,wBAAwB;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YAE9C,4BAA4B;YAC5B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,IAAI,aAAa,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxF,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/F,CAAC;YACD,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAEjC,6CAA6C;YAC7C,yEAAyE;YACzE,+BAA+B;YAC/B,IAAI,kBAAkB,EAAE,CAAC;gBACrB,mEAAmE;gBACnE,2DAA2D;gBAC3D,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC;YACtC,CAAC;YAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAEhF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,YAAY,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QAKb,uDAAuD;QACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QAC9D,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC;QACnE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;QAEpD,OAAO;YACH,eAAe;YACf,UAAU;YACV,cAAc;SACjB,CAAC;IACN,CAAC;CACJ;AA7HD,oDA6HC"}
|
package/out/ui/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAI/D;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAChC,SAAS,EAAE,cAAc,EACzB,qBAAqB,EAAE,qBAAqB,EAC5C,gBAAgB,EAAE,wBAAwB,EAC1C,QAAQ,CAAC,EAAE,MAAM,GAClB,IAAI,CAmPN"}
|
package/out/ui/commands.js
CHANGED
|
@@ -38,6 +38,8 @@ const vscode = __importStar(require("vscode"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const docs_path_resolver_1 = require("../core/docs-path-resolver");
|
|
40
40
|
const detail_view_provider_1 = require("./detail-view-provider");
|
|
41
|
+
const noyrax_integration_service_1 = require("../services/noyrax-integration-service");
|
|
42
|
+
const workflow_orchestrator_1 = require("../services/workflow-orchestrator");
|
|
41
43
|
/**
|
|
42
44
|
* Registers all VS Code commands for the 5D Database Plugin.
|
|
43
45
|
*/
|
|
@@ -118,6 +120,115 @@ function registerCommands(context, dbManager, ingestionOrchestrator, explorerPro
|
|
|
118
120
|
vscode.window.showErrorMessage(`Failed to open file: ${filePath}. Error: ${error}`);
|
|
119
121
|
}
|
|
120
122
|
});
|
|
121
|
-
|
|
123
|
+
// New command: Generate documentation using Noyrax
|
|
124
|
+
const generateDocsCommand = vscode.commands.registerCommand('5d-database.generate-docs', async () => {
|
|
125
|
+
const workspaceFolders = vscode.workspace.workspaceFolders;
|
|
126
|
+
if (!workspaceFolders || workspaceFolders.length === 0) {
|
|
127
|
+
vscode.window.showErrorMessage('No workspace folder found');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const workspaceRoot = workspaceFolders[0].uri.fsPath;
|
|
131
|
+
const noyraxService = new noyrax_integration_service_1.NoyraxIntegrationService(workspaceRoot);
|
|
132
|
+
vscode.window.withProgress({
|
|
133
|
+
location: vscode.ProgressLocation.Notification,
|
|
134
|
+
title: 'Generating Documentation',
|
|
135
|
+
cancellable: false
|
|
136
|
+
}, async (progress) => {
|
|
137
|
+
progress.report({ increment: 0, message: 'Starting documentation generation...' });
|
|
138
|
+
try {
|
|
139
|
+
progress.report({ increment: 33, message: 'Running scan...' });
|
|
140
|
+
await noyraxService.generateDocumentation();
|
|
141
|
+
progress.report({ increment: 100, message: 'Documentation generated successfully' });
|
|
142
|
+
vscode.window.showInformationMessage('Documentation generated successfully');
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
const errorMessage = error.message || String(error);
|
|
146
|
+
vscode.window.showErrorMessage(`Documentation generation failed: ${errorMessage}`);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
// New command: Full workflow (Generate docs + Ingest)
|
|
151
|
+
const fullWorkflowCommand = vscode.commands.registerCommand('5d-database.full-workflow', async () => {
|
|
152
|
+
const workspaceFolders = vscode.workspace.workspaceFolders;
|
|
153
|
+
if (!workspaceFolders || workspaceFolders.length === 0) {
|
|
154
|
+
vscode.window.showErrorMessage('No workspace folder found');
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const workspaceRoot = workspaceFolders[0].uri.fsPath;
|
|
158
|
+
const workflowOrchestrator = new workflow_orchestrator_1.WorkflowOrchestrator(workspaceRoot, dbManager, ingestionOrchestrator);
|
|
159
|
+
vscode.window.withProgress({
|
|
160
|
+
location: vscode.ProgressLocation.Notification,
|
|
161
|
+
title: 'Running Full Workflow',
|
|
162
|
+
cancellable: false
|
|
163
|
+
}, async (progress) => {
|
|
164
|
+
progress.report({ increment: 0, message: 'Starting full workflow...' });
|
|
165
|
+
try {
|
|
166
|
+
progress.report({ increment: 20, message: 'Generating documentation...' });
|
|
167
|
+
const result = await workflowOrchestrator.runFullWorkflow({
|
|
168
|
+
generateDocs: true,
|
|
169
|
+
fullIngestion: false,
|
|
170
|
+
generateEmbeddings: true,
|
|
171
|
+
skipIfUpToDate: false
|
|
172
|
+
});
|
|
173
|
+
if (result.success) {
|
|
174
|
+
progress.report({ increment: 100, message: 'Workflow completed successfully' });
|
|
175
|
+
// Refresh the database explorer to show newly ingested data
|
|
176
|
+
explorerProvider.refresh();
|
|
177
|
+
let message = 'Full workflow completed successfully';
|
|
178
|
+
if (result.warnings && result.warnings.length > 0) {
|
|
179
|
+
message += ` (${result.warnings.length} warning(s))`;
|
|
180
|
+
}
|
|
181
|
+
vscode.window.showInformationMessage(message);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
const errorMessage = result.errors?.join(', ') || 'Unknown error';
|
|
185
|
+
vscode.window.showErrorMessage(`Workflow failed: ${errorMessage}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
const errorMessage = error.message || String(error);
|
|
190
|
+
vscode.window.showErrorMessage(`Workflow failed: ${errorMessage}`);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
// New command: Merge workspaces (combine both systems into one database)
|
|
195
|
+
const mergeWorkspacesCommand = vscode.commands.registerCommand('5d-database.merge-workspaces', async () => {
|
|
196
|
+
const workspaceFolders = vscode.workspace.workspaceFolders;
|
|
197
|
+
if (!workspaceFolders || workspaceFolders.length === 0) {
|
|
198
|
+
vscode.window.showErrorMessage('No workspace folder found');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const workspaceRoot = workspaceFolders[0].uri.fsPath;
|
|
202
|
+
const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
203
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
|
|
204
|
+
const execAsync = promisify(exec);
|
|
205
|
+
const mergeCliPath = path.join(__dirname, '..', '..', 'out', 'cli', 'merge-workspaces-cli.js');
|
|
206
|
+
vscode.window.withProgress({
|
|
207
|
+
location: vscode.ProgressLocation.Notification,
|
|
208
|
+
title: 'Merging Workspaces',
|
|
209
|
+
cancellable: false
|
|
210
|
+
}, async (progress) => {
|
|
211
|
+
progress.report({ increment: 0, message: 'Starting workspace merge...' });
|
|
212
|
+
try {
|
|
213
|
+
progress.report({ increment: 50, message: 'Merging documentation from both systems...' });
|
|
214
|
+
const { stdout, stderr } = await execAsync(`node "${mergeCliPath}" "${workspaceRoot}" --full`, {
|
|
215
|
+
cwd: workspaceRoot,
|
|
216
|
+
maxBuffer: 10 * 1024 * 1024 // 10MB buffer
|
|
217
|
+
});
|
|
218
|
+
if (stderr && !stderr.includes('WARN')) {
|
|
219
|
+
console.warn('[Merge Workspaces] Warnings:', stderr);
|
|
220
|
+
}
|
|
221
|
+
progress.report({ increment: 100, message: 'Merge completed successfully' });
|
|
222
|
+
// Refresh the database explorer to show merged data
|
|
223
|
+
explorerProvider.refresh();
|
|
224
|
+
vscode.window.showInformationMessage('Workspaces merged successfully. Both systems are now in one database.');
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
const errorMessage = error.message || String(error);
|
|
228
|
+
vscode.window.showErrorMessage(`Workspace merge failed: ${errorMessage}`);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
context.subscriptions.push(ingestCommand, searchCommand, showModuleDetailCommand, showSymbolDetailCommand, showAdrDetailCommand, showDependencyDetailCommand, showChangeDetailCommand, openSourceFileCommand, generateDocsCommand, fullWorkflowCommand, mergeWorkspacesCommand, detailViewProvider);
|
|
122
233
|
}
|
|
123
234
|
//# sourceMappingURL=commands.js.map
|
package/out/ui/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-explorer.d.ts","sourceRoot":"","sources":["../../src/ui/database-explorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D;;GAEG;AACH,cAAM,gBAAiB,SAAQ,MAAM,CAAC,QAAQ;aAEtB,KAAK,EAAE,MAAM;aACb,gBAAgB,EAAE,MAAM,CAAC,wBAAwB;aACjD,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO;gBAFxB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,CAAC,wBAAwB,EACjD,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,YAAA;CAO/C;AAED;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;IACtF,OAAO,CAAC,oBAAoB,CAA0I;IACtK,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAmC;IAEzH,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc;IAKvE,OAAO,IAAI,IAAI;IAIf,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,QAAQ;IAIjD,WAAW,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"database-explorer.d.ts","sourceRoot":"","sources":["../../src/ui/database-explorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D;;GAEG;AACH,cAAM,gBAAiB,SAAQ,MAAM,CAAC,QAAQ;aAEtB,KAAK,EAAE,MAAM;aACb,gBAAgB,EAAE,MAAM,CAAC,wBAAwB;aACjD,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO;gBAFxB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,CAAC,wBAAwB,EACjD,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,YAAA;CAO/C;AAED;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;IACtF,OAAO,CAAC,oBAAoB,CAA0I;IACtK,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAmC;IAEzH,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc;IAKvE,OAAO,IAAI,IAAI;IAIf,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,QAAQ;IAIjD,WAAW,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAuL7E"}
|
|
@@ -85,6 +85,13 @@ class DatabaseExplorerProvider {
|
|
|
85
85
|
if (element.label.startsWith('X: Modules')) {
|
|
86
86
|
const moduleApi = new module_api_1.ModuleApi(this.dbManager);
|
|
87
87
|
const modules = await moduleApi.getAllModules(this.pluginId);
|
|
88
|
+
if (modules.length === 0) {
|
|
89
|
+
return [new DatabaseTreeItem('No modules found. Run ingestion first.', vscode.TreeItemCollapsibleState.None, {
|
|
90
|
+
command: '5d-database.ingest',
|
|
91
|
+
title: 'Run Ingestion',
|
|
92
|
+
arguments: []
|
|
93
|
+
})];
|
|
94
|
+
}
|
|
88
95
|
return modules.map(m => {
|
|
89
96
|
const item = new DatabaseTreeItem(m.file_path, vscode.TreeItemCollapsibleState.None, {
|
|
90
97
|
command: '5d-database.showModuleDetail',
|
|
@@ -99,6 +106,13 @@ class DatabaseExplorerProvider {
|
|
|
99
106
|
else if (element.label.startsWith('Y: Symbols')) {
|
|
100
107
|
const symbolApi = new symbol_api_1.SymbolApi(this.dbManager);
|
|
101
108
|
const symbols = await symbolApi.getAllSymbols(this.pluginId);
|
|
109
|
+
if (symbols.length === 0) {
|
|
110
|
+
return [new DatabaseTreeItem('No symbols found. Run ingestion first.', vscode.TreeItemCollapsibleState.None, {
|
|
111
|
+
command: '5d-database.ingest',
|
|
112
|
+
title: 'Run Ingestion',
|
|
113
|
+
arguments: []
|
|
114
|
+
})];
|
|
115
|
+
}
|
|
102
116
|
return symbols.slice(0, 100).map(s => {
|
|
103
117
|
const item = new DatabaseTreeItem(`${s.name} (${s.kind})`, vscode.TreeItemCollapsibleState.None, {
|
|
104
118
|
command: '5d-database.showSymbolDetail',
|
|
@@ -115,6 +129,13 @@ class DatabaseExplorerProvider {
|
|
|
115
129
|
else if (element.label.startsWith('Z: Dependencies')) {
|
|
116
130
|
const depApi = new dependency_api_1.DependencyApi(this.dbManager);
|
|
117
131
|
const deps = await depApi.getAllDependencies(this.pluginId);
|
|
132
|
+
if (deps.length === 0) {
|
|
133
|
+
return [new DatabaseTreeItem('No dependencies found. Run ingestion first.', vscode.TreeItemCollapsibleState.None, {
|
|
134
|
+
command: '5d-database.ingest',
|
|
135
|
+
title: 'Run Ingestion',
|
|
136
|
+
arguments: []
|
|
137
|
+
})];
|
|
138
|
+
}
|
|
118
139
|
return deps.slice(0, 100).map(d => {
|
|
119
140
|
const item = new DatabaseTreeItem(`${d.from_module} → ${d.to_module}`, vscode.TreeItemCollapsibleState.None, {
|
|
120
141
|
command: '5d-database.showDependencyDetail',
|
|
@@ -132,6 +153,13 @@ class DatabaseExplorerProvider {
|
|
|
132
153
|
else if (element.label.startsWith('W: ADRs')) {
|
|
133
154
|
const adrApi = new adr_api_1.AdrApi(this.dbManager);
|
|
134
155
|
const adrs = await adrApi.getAllAdrs(this.pluginId);
|
|
156
|
+
if (adrs.length === 0) {
|
|
157
|
+
return [new DatabaseTreeItem('No ADRs found. Run ingestion first.', vscode.TreeItemCollapsibleState.None, {
|
|
158
|
+
command: '5d-database.ingest',
|
|
159
|
+
title: 'Run Ingestion',
|
|
160
|
+
arguments: []
|
|
161
|
+
})];
|
|
162
|
+
}
|
|
135
163
|
return adrs.map(a => {
|
|
136
164
|
const item = new DatabaseTreeItem(`ADR-${a.adr_number}: ${a.title}`, vscode.TreeItemCollapsibleState.None, {
|
|
137
165
|
command: '5d-database.showAdrDetail',
|
|
@@ -146,6 +174,13 @@ class DatabaseExplorerProvider {
|
|
|
146
174
|
else if (element.label.startsWith('T: Changes')) {
|
|
147
175
|
const changeApi = new change_api_1.ChangeApi(this.dbManager);
|
|
148
176
|
const reports = await changeApi.getAllChangeReports(this.pluginId);
|
|
177
|
+
if (reports.length === 0) {
|
|
178
|
+
return [new DatabaseTreeItem('No change reports found. Run ingestion first.', vscode.TreeItemCollapsibleState.None, {
|
|
179
|
+
command: '5d-database.ingest',
|
|
180
|
+
title: 'Run Ingestion',
|
|
181
|
+
arguments: []
|
|
182
|
+
})];
|
|
183
|
+
}
|
|
149
184
|
return reports.slice(0, 10).map(r => {
|
|
150
185
|
const label = `${r.run_type} - ${r.created_at.toLocaleDateString()} (${r.parsed_files} files, ${r.total_dependencies} deps)`;
|
|
151
186
|
const item = new DatabaseTreeItem(label, vscode.TreeItemCollapsibleState.None, {
|
|
@@ -160,7 +195,18 @@ class DatabaseExplorerProvider {
|
|
|
160
195
|
}
|
|
161
196
|
}
|
|
162
197
|
catch (error) {
|
|
163
|
-
|
|
198
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
199
|
+
// Check if it's a "no such table" error
|
|
200
|
+
if (errorMessage.includes('no such table') || errorMessage.includes('SQLITE_ERROR')) {
|
|
201
|
+
return [new DatabaseTreeItem(`Database not initialized. Run ingestion first. (Error: ${errorMessage})`, vscode.TreeItemCollapsibleState.None, {
|
|
202
|
+
command: '5d-database.ingest',
|
|
203
|
+
title: 'Run Ingestion',
|
|
204
|
+
arguments: []
|
|
205
|
+
})];
|
|
206
|
+
}
|
|
207
|
+
// For other errors, show error message
|
|
208
|
+
vscode.window.showErrorMessage(`Error loading ${element.label}: ${errorMessage}`);
|
|
209
|
+
return [new DatabaseTreeItem(`Error: ${errorMessage}`, vscode.TreeItemCollapsibleState.None)];
|
|
164
210
|
}
|
|
165
211
|
return [];
|
|
166
212
|
}
|