@mcp-graph-workflow/mcp-graph 5.2.0 → 5.3.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/dist/api/router.d.ts +0 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +3 -4
- package/dist/api/router.js.map +1 -1
- package/dist/api/routes/benchmark.d.ts.map +1 -1
- package/dist/api/routes/benchmark.js +47 -2
- package/dist/api/routes/benchmark.js.map +1 -1
- package/dist/api/routes/code-graph.d.ts +12 -0
- package/dist/api/routes/code-graph.d.ts.map +1 -0
- package/dist/api/routes/code-graph.js +154 -0
- package/dist/api/routes/code-graph.js.map +1 -0
- package/dist/api/routes/folder.d.ts +1 -4
- package/dist/api/routes/folder.d.ts.map +1 -1
- package/dist/api/routes/folder.js +19 -17
- package/dist/api/routes/folder.js.map +1 -1
- package/dist/api/routes/integrations.d.ts.map +1 -1
- package/dist/api/routes/integrations.js +60 -16
- package/dist/api/routes/integrations.js.map +1 -1
- package/dist/api/routes/knowledge.js +1 -1
- package/dist/api/routes/knowledge.js.map +1 -1
- package/dist/api/routes/skills.d.ts.map +1 -1
- package/dist/api/routes/skills.js +57 -3
- package/dist/api/routes/skills.js.map +1 -1
- package/dist/cli/commands/index-cmd.js +5 -5
- package/dist/cli/commands/index-cmd.js.map +1 -1
- package/dist/core/code/code-indexer.d.ts +20 -0
- package/dist/core/code/code-indexer.d.ts.map +1 -0
- package/dist/core/code/code-indexer.js +161 -0
- package/dist/core/code/code-indexer.js.map +1 -0
- package/dist/core/code/code-search.d.ts +16 -0
- package/dist/core/code/code-search.d.ts.map +1 -0
- package/dist/core/code/code-search.js +77 -0
- package/dist/core/code/code-search.js.map +1 -0
- package/dist/core/code/code-store.d.ts +35 -0
- package/dist/core/code/code-store.d.ts.map +1 -0
- package/dist/core/code/code-store.js +228 -0
- package/dist/core/code/code-store.js.map +1 -0
- package/dist/core/code/code-types.d.ts +209 -0
- package/dist/core/code/code-types.d.ts.map +1 -0
- package/dist/core/code/code-types.js +94 -0
- package/dist/core/code/code-types.js.map +1 -0
- package/dist/core/code/graph-traversal.d.ts +27 -0
- package/dist/core/code/graph-traversal.d.ts.map +1 -0
- package/dist/core/code/graph-traversal.js +122 -0
- package/dist/core/code/graph-traversal.js.map +1 -0
- package/dist/core/code/process-detector.d.ts +11 -0
- package/dist/core/code/process-detector.d.ts.map +1 -0
- package/dist/core/code/process-detector.js +65 -0
- package/dist/core/code/process-detector.js.map +1 -0
- package/dist/core/code/ts-analyzer.d.ts +12 -0
- package/dist/core/code/ts-analyzer.d.ts.map +1 -0
- package/dist/core/code/ts-analyzer.js +331 -0
- package/dist/core/code/ts-analyzer.js.map +1 -0
- package/dist/core/config/ai-memory-generator.d.ts.map +1 -1
- package/dist/core/config/ai-memory-generator.js +149 -61
- package/dist/core/config/ai-memory-generator.js.map +1 -1
- package/dist/core/config/config-loader.d.ts.map +1 -1
- package/dist/core/config/config-loader.js +2 -10
- package/dist/core/config/config-loader.js.map +1 -1
- package/dist/core/config/config-schema.d.ts +1 -2
- package/dist/core/config/config-schema.d.ts.map +1 -1
- package/dist/core/config/config-schema.js +2 -3
- package/dist/core/config/config-schema.js.map +1 -1
- package/dist/core/context/compact-context.d.ts +51 -0
- package/dist/core/context/compact-context.d.ts.map +1 -1
- package/dist/core/context/compact-context.js +292 -0
- package/dist/core/context/compact-context.js.map +1 -1
- package/dist/core/context/context-assembler.d.ts +1 -1
- package/dist/core/context/context-assembler.js +1 -1
- package/dist/core/doctor/doctor-checks.d.ts +1 -1
- package/dist/core/doctor/doctor-checks.js +21 -21
- package/dist/core/doctor/doctor-checks.js.map +1 -1
- package/dist/core/insights/bottleneck-detector.js +1 -1
- package/dist/core/insights/bottleneck-detector.js.map +1 -1
- package/dist/core/integrations/enriched-context.d.ts +10 -6
- package/dist/core/integrations/enriched-context.d.ts.map +1 -1
- package/dist/core/integrations/enriched-context.js +35 -35
- package/dist/core/integrations/enriched-context.js.map +1 -1
- package/dist/core/integrations/integration-orchestrator.js +2 -2
- package/dist/core/integrations/integration-orchestrator.js.map +1 -1
- package/dist/core/integrations/mcp-deps-installer.d.ts +1 -1
- package/dist/core/integrations/mcp-deps-installer.d.ts.map +1 -1
- package/dist/core/integrations/mcp-deps-installer.js +1 -60
- package/dist/core/integrations/mcp-deps-installer.js.map +1 -1
- package/dist/core/integrations/mcp-servers-config.d.ts +1 -1
- package/dist/core/integrations/mcp-servers-config.d.ts.map +1 -1
- package/dist/core/integrations/mcp-servers-config.js +0 -17
- package/dist/core/integrations/mcp-servers-config.js.map +1 -1
- package/dist/core/integrations/tool-status.d.ts +8 -3
- package/dist/core/integrations/tool-status.d.ts.map +1 -1
- package/dist/core/integrations/tool-status.js +38 -48
- package/dist/core/integrations/tool-status.js.map +1 -1
- package/dist/core/memory/memory-migrator.d.ts +15 -0
- package/dist/core/memory/memory-migrator.d.ts.map +1 -0
- package/dist/core/memory/memory-migrator.js +64 -0
- package/dist/core/memory/memory-migrator.js.map +1 -0
- package/dist/core/memory/memory-reader.d.ts +30 -0
- package/dist/core/memory/memory-reader.d.ts.map +1 -0
- package/dist/core/memory/memory-reader.js +106 -0
- package/dist/core/memory/memory-reader.js.map +1 -0
- package/dist/core/planner/lifecycle-phase.d.ts +1 -0
- package/dist/core/planner/lifecycle-phase.d.ts.map +1 -1
- package/dist/core/planner/lifecycle-phase.js +11 -8
- package/dist/core/planner/lifecycle-phase.js.map +1 -1
- package/dist/core/rag/memory-indexer.d.ts +16 -0
- package/dist/core/rag/memory-indexer.d.ts.map +1 -0
- package/dist/core/rag/{serena-indexer.js → memory-indexer.js} +12 -12
- package/dist/core/rag/memory-indexer.js.map +1 -0
- package/dist/core/rag/{serena-rag-query.d.ts → memory-rag-query.d.ts} +11 -9
- package/dist/core/rag/memory-rag-query.d.ts.map +1 -0
- package/dist/core/rag/{serena-rag-query.js → memory-rag-query.js} +18 -15
- package/dist/core/rag/memory-rag-query.js.map +1 -0
- package/dist/core/rag/skill-indexer.d.ts +16 -0
- package/dist/core/rag/skill-indexer.d.ts.map +1 -0
- package/dist/core/rag/skill-indexer.js +98 -0
- package/dist/core/rag/skill-indexer.js.map +1 -0
- package/dist/core/skills/built-in-skills.d.ts +26 -0
- package/dist/core/skills/built-in-skills.d.ts.map +1 -0
- package/dist/core/skills/built-in-skills.js +203 -0
- package/dist/core/skills/built-in-skills.js.map +1 -0
- package/dist/core/store/knowledge-store.d.ts +1 -1
- package/dist/core/store/knowledge-store.js +1 -1
- package/dist/core/store/migrations.d.ts.map +1 -1
- package/dist/core/store/migrations.js +89 -0
- package/dist/core/store/migrations.js.map +1 -1
- package/dist/core/store/tool-token-store.d.ts +39 -0
- package/dist/core/store/tool-token-store.d.ts.map +1 -0
- package/dist/core/store/tool-token-store.js +79 -0
- package/dist/core/store/tool-token-store.js.map +1 -0
- package/dist/mcp/app-factory.d.ts +0 -1
- package/dist/mcp/app-factory.d.ts.map +1 -1
- package/dist/mcp/app-factory.js +2 -2
- package/dist/mcp/app-factory.js.map +1 -1
- package/dist/mcp/lifecycle-wrapper.d.ts +1 -0
- package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -1
- package/dist/mcp/lifecycle-wrapper.js +21 -0
- package/dist/mcp/lifecycle-wrapper.js.map +1 -1
- package/dist/mcp/server.js +19 -14
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +4 -0
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/list-skills.d.ts +7 -0
- package/dist/mcp/tools/list-skills.d.ts.map +1 -0
- package/dist/mcp/tools/list-skills.js +68 -0
- package/dist/mcp/tools/list-skills.js.map +1 -0
- package/dist/mcp/tools/memory.d.ts +8 -0
- package/dist/mcp/tools/memory.d.ts.map +1 -0
- package/dist/mcp/tools/memory.js +106 -0
- package/dist/mcp/tools/memory.js.map +1 -0
- package/dist/mcp/tools/reindex-knowledge.d.ts.map +1 -1
- package/dist/mcp/tools/reindex-knowledge.js +11 -7
- package/dist/mcp/tools/reindex-knowledge.js.map +1 -1
- package/dist/schemas/knowledge.schema.d.ts +4 -0
- package/dist/schemas/knowledge.schema.d.ts.map +1 -1
- package/dist/schemas/knowledge.schema.js +1 -1
- package/dist/schemas/knowledge.schema.js.map +1 -1
- package/dist/web/dashboard/dist/assets/benchmark-tab-B5Sr8Cah.js +1 -0
- package/dist/web/dashboard/dist/assets/constants-kpH_c6vY.js +1 -0
- package/dist/web/dashboard/dist/assets/gitnexus-tab-DqmbSdzV.js +430 -0
- package/dist/web/dashboard/dist/assets/graph-tab-BKns5HdW.js +1 -0
- package/dist/web/dashboard/dist/assets/graph-utils-BxUWNvsI.js +7 -0
- package/dist/web/dashboard/dist/assets/index-CZOiKbTP.js +53 -0
- package/dist/web/dashboard/dist/assets/index-Dd4vKyDX.js +17 -0
- package/dist/web/dashboard/dist/assets/index-xyMN-_UV.css +1 -0
- package/dist/web/dashboard/dist/assets/insights-tab-B1kPckBM.js +52 -0
- package/dist/web/dashboard/dist/assets/{logs-tab-Cxpcv_ni.js → logs-tab-BWfsrRlB.js} +1 -1
- package/dist/web/dashboard/dist/assets/memories-tab-D3zm-1Sq.js +1 -0
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-DXP4dFP-.js +1 -0
- package/dist/web/dashboard/dist/assets/skills-tab-CAlVL80S.js +1 -0
- package/dist/web/dashboard/dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/api/routes/gitnexus.d.ts +0 -12
- package/dist/api/routes/gitnexus.d.ts.map +0 -1
- package/dist/api/routes/gitnexus.js +0 -164
- package/dist/api/routes/gitnexus.js.map +0 -1
- package/dist/core/integrations/gitnexus-launcher.d.ts +0 -67
- package/dist/core/integrations/gitnexus-launcher.d.ts.map +0 -1
- package/dist/core/integrations/gitnexus-launcher.js +0 -268
- package/dist/core/integrations/gitnexus-launcher.js.map +0 -1
- package/dist/core/integrations/gitnexus-queries.d.ts +0 -55
- package/dist/core/integrations/gitnexus-queries.d.ts.map +0 -1
- package/dist/core/integrations/gitnexus-queries.js +0 -168
- package/dist/core/integrations/gitnexus-queries.js.map +0 -1
- package/dist/core/integrations/serena-reader.d.ts +0 -18
- package/dist/core/integrations/serena-reader.d.ts.map +0 -1
- package/dist/core/integrations/serena-reader.js +0 -68
- package/dist/core/integrations/serena-reader.js.map +0 -1
- package/dist/core/rag/serena-indexer.d.ts +0 -16
- package/dist/core/rag/serena-indexer.d.ts.map +0 -1
- package/dist/core/rag/serena-indexer.js.map +0 -1
- package/dist/core/rag/serena-rag-query.d.ts.map +0 -1
- package/dist/core/rag/serena-rag-query.js.map +0 -1
- package/dist/web/dashboard/dist/assets/benchmark-tab-DE6hAHVG.js +0 -1
- package/dist/web/dashboard/dist/assets/constants-BIEJOBya.js +0 -1
- package/dist/web/dashboard/dist/assets/gitnexus-tab-DsBjJHx8.js +0 -312
- package/dist/web/dashboard/dist/assets/graph-tab-C09DzeZ_.js +0 -1
- package/dist/web/dashboard/dist/assets/graph-utils-D4LFspTf.js +0 -23
- package/dist/web/dashboard/dist/assets/index-B2fTJ4AS.js +0 -53
- package/dist/web/dashboard/dist/assets/index-CkqEqKiH.css +0 -1
- package/dist/web/dashboard/dist/assets/insights-tab-Bm7CDckb.js +0 -1
- package/dist/web/dashboard/dist/assets/prd-backlog-tab-X84Rj-IB.js +0 -1
- package/dist/web/dashboard/dist/assets/serena-tab-BunULNvw.js +0 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Enriched Context Builder — combines
|
|
2
|
+
* Enriched Context Builder — combines project memories with native Code Intelligence
|
|
3
3
|
* for a unified symbol context. All data sourced locally.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { readAllMemories } from "../memory/memory-reader.js";
|
|
6
|
+
import { migrateSerenaMemories } from "../memory/memory-migrator.js";
|
|
7
7
|
import { logger } from "../utils/logger.js";
|
|
8
|
+
import { CodeStore } from "../code/code-store.js";
|
|
9
|
+
import { getSymbolContext } from "../code/graph-traversal.js";
|
|
8
10
|
/**
|
|
9
11
|
* Filter memories that mention the given symbol (case-insensitive).
|
|
10
12
|
*/
|
|
@@ -13,7 +15,6 @@ function filterRelevantMemories(memories, symbol) {
|
|
|
13
15
|
return memories
|
|
14
16
|
.filter((m) => m.content.toLowerCase().includes(lower))
|
|
15
17
|
.map((m) => {
|
|
16
|
-
// Extract relevant excerpt — lines containing the symbol
|
|
17
18
|
const lines = m.content.split("\n");
|
|
18
19
|
const relevant = lines.filter((l) => l.toLowerCase().includes(lower));
|
|
19
20
|
const excerpt = relevant.slice(0, 5).join("\n") || m.content.slice(0, 200);
|
|
@@ -21,68 +22,67 @@ function filterRelevantMemories(memories, symbol) {
|
|
|
21
22
|
});
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
|
-
*
|
|
25
|
+
* Query native Code Intelligence engine for symbol context.
|
|
25
26
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!running) {
|
|
27
|
+
function fetchCodeContext(symbol, db, projectId) {
|
|
28
|
+
if (!db)
|
|
29
29
|
return { available: false };
|
|
30
|
-
}
|
|
31
30
|
try {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return { available: true, data };
|
|
31
|
+
const codeStore = new CodeStore(db);
|
|
32
|
+
const meta = codeStore.getIndexMeta(projectId);
|
|
33
|
+
if (!meta)
|
|
34
|
+
return { available: false };
|
|
35
|
+
const context = getSymbolContext(codeStore, symbol, projectId);
|
|
36
|
+
return {
|
|
37
|
+
available: true,
|
|
38
|
+
data: context.symbols.length > 0 ? context : undefined,
|
|
39
|
+
};
|
|
42
40
|
}
|
|
43
41
|
catch {
|
|
44
42
|
return { available: false };
|
|
45
43
|
}
|
|
46
44
|
}
|
|
47
45
|
/**
|
|
48
|
-
* Build enriched context for a symbol by combining
|
|
46
|
+
* Build enriched context for a symbol by combining project memories + native Code Intelligence.
|
|
49
47
|
*/
|
|
50
|
-
export async function buildEnrichedContext(symbol, basePath,
|
|
48
|
+
export async function buildEnrichedContext(symbol, basePath, _unused, options) {
|
|
51
49
|
logger.info("Building enriched context", { symbol, basePath });
|
|
50
|
+
// Lazy migration: copy .serena/memories → workflow-graph/memories if needed
|
|
51
|
+
await migrateSerenaMemories(basePath);
|
|
52
52
|
// Fetch data from both sources in parallel
|
|
53
|
-
const [memories,
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
const [memories, codeGraph] = await Promise.all([
|
|
54
|
+
readAllMemories(basePath),
|
|
55
|
+
Promise.resolve(fetchCodeContext(symbol, options?.db ?? null, options?.projectId ?? "default")),
|
|
56
56
|
]);
|
|
57
|
-
const
|
|
57
|
+
const memoriesAvailable = memories.length > 0;
|
|
58
58
|
const relevantMemories = filterRelevantMemories(memories, symbol);
|
|
59
59
|
// Build combined summary
|
|
60
60
|
const parts = [`Symbol: ${symbol}`];
|
|
61
61
|
if (relevantMemories.length > 0) {
|
|
62
|
-
parts.push(`\
|
|
62
|
+
parts.push(`\nMemories (${relevantMemories.length} relevant):`);
|
|
63
63
|
for (const mem of relevantMemories) {
|
|
64
64
|
parts.push(` [${mem.name}] ${mem.excerpt.split("\n")[0]}`);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
if (
|
|
68
|
-
parts.push(
|
|
67
|
+
if (codeGraph.available && codeGraph.data) {
|
|
68
|
+
parts.push(`\nCode Graph: ${codeGraph.data.symbols.length} symbols, ${codeGraph.data.relations.length} relations`);
|
|
69
69
|
}
|
|
70
|
-
else if (!
|
|
71
|
-
parts.push("\
|
|
70
|
+
else if (!codeGraph.available) {
|
|
71
|
+
parts.push("\nCode Intelligence: Not indexed. Run reindex first.");
|
|
72
72
|
}
|
|
73
73
|
const combined = parts.join("\n");
|
|
74
74
|
logger.info("Enriched context built", {
|
|
75
75
|
symbol,
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
memories: relevantMemories.length,
|
|
77
|
+
codeGraphAvailable: codeGraph.available,
|
|
78
78
|
});
|
|
79
79
|
return {
|
|
80
80
|
symbol,
|
|
81
|
-
|
|
82
|
-
available:
|
|
81
|
+
memories: {
|
|
82
|
+
available: memoriesAvailable,
|
|
83
83
|
relevantMemories,
|
|
84
84
|
},
|
|
85
|
-
|
|
85
|
+
codeGraph,
|
|
86
86
|
combined,
|
|
87
87
|
};
|
|
88
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enriched-context.js","sourceRoot":"","sources":["../../../src/core/integrations/enriched-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"enriched-context.js","sourceRoot":"","sources":["../../../src/core/integrations/enriched-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,7 +46,7 @@ export class IntegrationOrchestrator {
|
|
|
46
46
|
getStatuses() {
|
|
47
47
|
// Refresh document counts
|
|
48
48
|
const knowledgeStore = new KnowledgeStore(this.store.getDb());
|
|
49
|
-
const sourceTypes = ["upload", "serena", "code_context", "docs", "web_capture"];
|
|
49
|
+
const sourceTypes = ["upload", "memory", "serena", "code_context", "docs", "web_capture"];
|
|
50
50
|
for (const st of sourceTypes) {
|
|
51
51
|
const existing = this.statuses.get(st);
|
|
52
52
|
if (existing) {
|
|
@@ -95,7 +95,7 @@ export class IntegrationOrchestrator {
|
|
|
95
95
|
logger.info("Orchestrator: knowledge indexed", { source, count: event.payload.documentsIndexed });
|
|
96
96
|
}
|
|
97
97
|
initStatuses() {
|
|
98
|
-
const sourceTypes = ["upload", "serena", "code_context", "docs", "web_capture"];
|
|
98
|
+
const sourceTypes = ["upload", "memory", "serena", "code_context", "docs", "web_capture"];
|
|
99
99
|
const knowledgeStore = new KnowledgeStore(this.store.getDb());
|
|
100
100
|
for (const st of sourceTypes) {
|
|
101
101
|
this.statuses.set(st, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-orchestrator.js","sourceRoot":"","sources":["../../../src/core/integrations/integration-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiB5C,MAAM,OAAO,uBAAuB;IAC1B,KAAK,CAAc;IACnB,QAAQ,CAAgB;IACxB,QAAQ,CAAS;IACjB,WAAW,CAAU;IACrB,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAExD,YACE,KAAkB,EAClB,QAAuB,EACvB,OAA6B;QAE7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;QAEhD,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7C,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,WAAW;QACT,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"integration-orchestrator.js","sourceRoot":"","sources":["../../../src/core/integrations/integration-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiB5C,MAAM,OAAO,uBAAuB;IAC1B,KAAK,CAAc;IACnB,QAAQ,CAAgB;IACxB,QAAQ,CAAS;IACjB,WAAW,CAAU;IACrB,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAExD,YACE,KAAkB,EAClB,QAAuB,EACvB,OAA6B;QAE7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;QAEhD,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7C,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,WAAW;QACT,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,CAAU,CAAC;QAEnG,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,KAAiB;QAC/C,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEzE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAE9D,sBAAsB;YACtB,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YAEnE,qBAAqB;YACrB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAEvE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAElC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,mBAAmB,EAAE;gBAC3C,MAAM,EAAE,gBAAgB;gBACxB,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS;aACtF,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;gBAC5C,WAAW,EAAE,UAAU,CAAC,gBAAgB;gBACxC,cAAc,EAAE,SAAS,CAAC,KAAK;gBAC/B,kBAAkB,EAAE,SAAS,CAAC,SAAS;aACxC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAiB;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpG,CAAC;IAEO,YAAY;QAClB,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,CAAU,CAAC;QACnG,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9D,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE;gBACpB,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,MAAmC,EAAE,KAAc;QACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACrF,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP dependencies installer.
|
|
3
|
-
* Detects
|
|
3
|
+
* Detects ecosystem tools (Context7, Playwright).
|
|
4
4
|
* Never throws — returns InstallResult[] with status for each dependency.
|
|
5
5
|
*/
|
|
6
6
|
export type InstallStatus = "installed" | "already_available" | "skipped" | "failed";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-deps-installer.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/mcp-deps-installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,mBAAmB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO1E;
|
|
1
|
+
{"version":3,"file":"mcp-deps-installer.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/mcp-deps-installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,mBAAmB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO1E;AA0BD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAYnF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP dependencies installer.
|
|
3
|
-
* Detects
|
|
3
|
+
* Detects ecosystem tools (Context7, Playwright).
|
|
4
4
|
* Never throws — returns InstallResult[] with status for each dependency.
|
|
5
5
|
*/
|
|
6
6
|
import { execFile } from "node:child_process";
|
|
@@ -20,63 +20,6 @@ export async function isCommandAvailable(command) {
|
|
|
20
20
|
return false;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Run a shell command and return success/failure.
|
|
25
|
-
*/
|
|
26
|
-
async function runCommand(cmd, args, timeoutMs = 60000) {
|
|
27
|
-
try {
|
|
28
|
-
const { stdout, stderr } = await execAsync(cmd, args, { timeout: timeoutMs });
|
|
29
|
-
return { ok: true, output: stdout || stderr };
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
33
|
-
return { ok: false, output: message };
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
async function checkGitNexus() {
|
|
37
|
-
const name = "gitnexus";
|
|
38
|
-
const available = await isCommandAvailable("gitnexus");
|
|
39
|
-
if (available) {
|
|
40
|
-
logger.info("GitNexus already available", { name });
|
|
41
|
-
return { name, status: "already_available", message: "gitnexus command found in PATH" };
|
|
42
|
-
}
|
|
43
|
-
// Try to verify via npx
|
|
44
|
-
const npxCheck = await runCommand("npx", ["-y", "gitnexus", "--version"], 30000);
|
|
45
|
-
if (npxCheck.ok) {
|
|
46
|
-
logger.success("GitNexus available via npx", { name });
|
|
47
|
-
return { name, status: "already_available", message: "gitnexus available via npx" };
|
|
48
|
-
}
|
|
49
|
-
logger.warn("GitNexus not available", { name, error: npxCheck.output });
|
|
50
|
-
return { name, status: "failed", message: `gitnexus not available: ${npxCheck.output}` };
|
|
51
|
-
}
|
|
52
|
-
async function checkSerena() {
|
|
53
|
-
const name = "serena";
|
|
54
|
-
// Check if uvx is available
|
|
55
|
-
const uvxAvailable = await isCommandAvailable("uvx");
|
|
56
|
-
if (uvxAvailable) {
|
|
57
|
-
logger.info("uvx already available, Serena can be used", { name });
|
|
58
|
-
return { name, status: "already_available", message: "uvx available — serena can run via uvx" };
|
|
59
|
-
}
|
|
60
|
-
// Check if pip/pip3 is available to install uvx
|
|
61
|
-
const pipCmd = (await isCommandAvailable("pip3")) ? "pip3" : (await isCommandAvailable("pip")) ? "pip" : null;
|
|
62
|
-
if (!pipCmd) {
|
|
63
|
-
logger.warn("Python/pip not available, skipping Serena install", { name });
|
|
64
|
-
return {
|
|
65
|
-
name,
|
|
66
|
-
status: "skipped",
|
|
67
|
-
message: "Python/pip not available. Install Python 3 and run: pip install uvx",
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
// Try to install uvx via pip
|
|
71
|
-
logger.info("Installing uvx via pip", { name, pip: pipCmd });
|
|
72
|
-
const uvxInstall = await runCommand(pipCmd, ["install", "uvx"], 120000);
|
|
73
|
-
if (!uvxInstall.ok) {
|
|
74
|
-
logger.warn("Failed to install uvx", { name, error: uvxInstall.output });
|
|
75
|
-
return { name, status: "failed", message: `Failed to install uvx: ${uvxInstall.output}` };
|
|
76
|
-
}
|
|
77
|
-
logger.success("uvx installed, Serena ready", { name });
|
|
78
|
-
return { name, status: "installed", message: "uvx installed via pip — serena ready" };
|
|
79
|
-
}
|
|
80
23
|
async function checkContext7() {
|
|
81
24
|
const name = "context7";
|
|
82
25
|
const npxAvailable = await isCommandAvailable("npx");
|
|
@@ -102,8 +45,6 @@ async function checkPlaywright() {
|
|
|
102
45
|
export async function installAllMcpDeps(_basePath) {
|
|
103
46
|
logger.info("Checking MCP ecosystem dependencies");
|
|
104
47
|
const results = await Promise.all([
|
|
105
|
-
checkGitNexus(),
|
|
106
|
-
checkSerena(),
|
|
107
48
|
checkContext7(),
|
|
108
49
|
checkPlaywright(),
|
|
109
50
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-deps-installer.js","sourceRoot":"","sources":["../../../src/core/integrations/mcp-deps-installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAUtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"mcp-deps-installer.js","sourceRoot":"","sources":["../../../src/core/integrations/mcp-deps-installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAUtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,IAAI,GAAG,UAAU,CAAC;IAExB,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,gEAAgE,EAAE,CAAC;IAC1H,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,MAAM,IAAI,GAAG,YAAY,CAAC;IAE1B,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,gEAAgE,EAAE,CAAC;IAC1H,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChC,aAAa,EAAE;QACf,eAAe,EAAE;KAClB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5D,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Centralized MCP server configuration for all ecosystem tools.
|
|
3
3
|
* Generates the complete .mcp.json config with all integrated servers.
|
|
4
4
|
*/
|
|
5
|
-
export declare const MCP_SERVER_NAMES: readonly ["mcp-graph", "
|
|
5
|
+
export declare const MCP_SERVER_NAMES: readonly ["mcp-graph", "context7", "playwright"];
|
|
6
6
|
export type McpServerName = (typeof MCP_SERVER_NAMES)[number];
|
|
7
7
|
export interface McpServerEntry {
|
|
8
8
|
command: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers-config.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/mcp-servers-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"mcp-servers-config.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/mcp-servers-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,gBAAgB,kDAInB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAmBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACnC,gBAAgB,CAUlB"}
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export const MCP_SERVER_NAMES = [
|
|
6
6
|
"mcp-graph",
|
|
7
|
-
"gitnexus",
|
|
8
|
-
"serena",
|
|
9
7
|
"context7",
|
|
10
8
|
"playwright",
|
|
11
9
|
];
|
|
@@ -15,21 +13,6 @@ function getDefaultServers() {
|
|
|
15
13
|
command: "npx",
|
|
16
14
|
args: ["-y", "@mcp-graph-workflow/mcp-graph"],
|
|
17
15
|
},
|
|
18
|
-
gitnexus: {
|
|
19
|
-
command: "npx",
|
|
20
|
-
args: ["-y", "gitnexus", "mcp"],
|
|
21
|
-
},
|
|
22
|
-
serena: {
|
|
23
|
-
command: "uvx",
|
|
24
|
-
args: [
|
|
25
|
-
"--from",
|
|
26
|
-
"git+https://github.com/oraios/serena",
|
|
27
|
-
"serena",
|
|
28
|
-
"start-mcp-server",
|
|
29
|
-
"--project",
|
|
30
|
-
".",
|
|
31
|
-
],
|
|
32
|
-
},
|
|
33
16
|
context7: {
|
|
34
17
|
command: "npx",
|
|
35
18
|
args: ["-y", "@upstash/context7-mcp"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers-config.js","sourceRoot":"","sources":["../../../src/core/integrations/mcp-servers-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,UAAU;IACV,
|
|
1
|
+
{"version":3,"file":"mcp-servers-config.js","sourceRoot":"","sources":["../../../src/core/integrations/mcp-servers-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,UAAU;IACV,YAAY;CACJ,CAAC;AAcX,SAAS,iBAAiB;IACxB,OAAO;QACL,WAAW,EAAE;YACX,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,+BAA+B,CAAC;SAC9C;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,uBAAuB,CAAC;SACtC;QACD,UAAU,EAAE;YACV,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,wBAAwB,CAAC;SACjC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAoC;IAEpC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAmC,CAAC;IACvF,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,OAAO;QACL,UAAU,EAAE;YACV,GAAG,eAAe;YAClB,GAAG,cAAc;SAClB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -5,9 +5,14 @@ export interface ToolInfo {
|
|
|
5
5
|
details?: Record<string, unknown>;
|
|
6
6
|
}
|
|
7
7
|
export interface IntegrationsStatus {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
codeGraph: ToolInfo & {
|
|
9
|
+
symbolCount: number;
|
|
10
|
+
};
|
|
11
|
+
memories: {
|
|
12
|
+
available: boolean;
|
|
13
|
+
count: number;
|
|
14
|
+
directory: string;
|
|
15
|
+
names: string[];
|
|
11
16
|
};
|
|
12
17
|
playwright: ToolInfo;
|
|
13
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-status.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/tool-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-status.d.ts","sourceRoot":"","sources":["../../../src/core/integrations/tool-status.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,QAAQ,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACpF,UAAU,EAAE,QAAQ,CAAC;CACtB;AAqDD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4BzF"}
|
|
@@ -1,21 +1,8 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import Database from "better-sqlite3";
|
|
1
4
|
import { logger } from "../utils/logger.js";
|
|
2
5
|
import { whichCommand } from "../utils/platform.js";
|
|
3
|
-
/**
|
|
4
|
-
* Detect whether a local HTTP service is running by attempting a fetch.
|
|
5
|
-
*/
|
|
6
|
-
async function probeHttp(url, timeoutMs = 2000) {
|
|
7
|
-
try {
|
|
8
|
-
const controller = new AbortController();
|
|
9
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
10
|
-
const res = await fetch(url, { signal: controller.signal });
|
|
11
|
-
clearTimeout(timer);
|
|
12
|
-
return res.ok || res.status < 500;
|
|
13
|
-
}
|
|
14
|
-
catch (err) {
|
|
15
|
-
logger.debug("probe:http:fail", { url, error: err instanceof Error ? err.message : String(err) });
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
6
|
/**
|
|
20
7
|
* Check if a command-line tool is installed by looking for it in PATH.
|
|
21
8
|
*/
|
|
@@ -33,34 +20,40 @@ async function isCommandInstalled(command) {
|
|
|
33
20
|
}
|
|
34
21
|
}
|
|
35
22
|
/**
|
|
36
|
-
* Read
|
|
23
|
+
* Read memory file names from workflow-graph/memories/ directory.
|
|
37
24
|
*/
|
|
38
|
-
async function
|
|
25
|
+
async function readMemoryNames(basePath) {
|
|
39
26
|
try {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
const memoriesDir = path.join(basePath, ".serena", "memories");
|
|
43
|
-
const files = await readdir(memoriesDir);
|
|
44
|
-
return files.filter((f) => f.endsWith(".md")).map((f) => f.replace(/\.md$/, ""));
|
|
27
|
+
const { listMemories } = await import("../memory/memory-reader.js");
|
|
28
|
+
return await listMemories(basePath);
|
|
45
29
|
}
|
|
46
30
|
catch (err) {
|
|
47
|
-
logger.debug("
|
|
31
|
+
logger.debug("memories:list:fail", { error: err instanceof Error ? err.message : String(err) });
|
|
48
32
|
return [];
|
|
49
33
|
}
|
|
50
34
|
}
|
|
51
35
|
/**
|
|
52
|
-
* Check
|
|
36
|
+
* Check code graph index status from SQLite.
|
|
53
37
|
*/
|
|
54
|
-
|
|
38
|
+
function getCodeGraphStatus(basePath) {
|
|
55
39
|
try {
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
40
|
+
const dbPath = path.join(basePath, "workflow-graph", "graph.db");
|
|
41
|
+
if (!existsSync(dbPath))
|
|
42
|
+
return { indexed: false, symbolCount: 0 };
|
|
43
|
+
const db = new Database(dbPath, { readonly: true });
|
|
44
|
+
try {
|
|
45
|
+
const row = db.prepare("SELECT symbol_count FROM code_index_meta LIMIT 1").get();
|
|
46
|
+
return { indexed: !!row, symbolCount: row?.symbol_count ?? 0 };
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return { indexed: false, symbolCount: 0 };
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
db.close();
|
|
53
|
+
}
|
|
60
54
|
}
|
|
61
|
-
catch
|
|
62
|
-
|
|
63
|
-
return false;
|
|
55
|
+
catch {
|
|
56
|
+
return { indexed: false, symbolCount: 0 };
|
|
64
57
|
}
|
|
65
58
|
}
|
|
66
59
|
/**
|
|
@@ -68,25 +61,22 @@ async function isSerenaConfigured(basePath) {
|
|
|
68
61
|
*/
|
|
69
62
|
export async function getIntegrationsStatus(basePath) {
|
|
70
63
|
logger.info("Checking integrations status", { basePath });
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
const [gitnexusInstalled, gitnexusRunning, serenaConfigured, serenaMemories, playwrightInstalled] = await Promise.all([
|
|
74
|
-
isCommandInstalled("gitnexus"),
|
|
75
|
-
probeHttp(gitnexusUrl),
|
|
76
|
-
isSerenaConfigured(basePath),
|
|
77
|
-
readSerenaMemories(basePath),
|
|
64
|
+
const [memoryNames, playwrightInstalled] = await Promise.all([
|
|
65
|
+
readMemoryNames(basePath),
|
|
78
66
|
isCommandInstalled("npx").then(() => true).catch(() => false),
|
|
79
67
|
]);
|
|
68
|
+
const codeGraphInfo = getCodeGraphStatus(basePath);
|
|
80
69
|
return {
|
|
81
|
-
|
|
82
|
-
installed:
|
|
83
|
-
running:
|
|
84
|
-
|
|
70
|
+
codeGraph: {
|
|
71
|
+
installed: true, // Native — always available
|
|
72
|
+
running: codeGraphInfo.indexed,
|
|
73
|
+
symbolCount: codeGraphInfo.symbolCount,
|
|
85
74
|
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
75
|
+
memories: {
|
|
76
|
+
available: memoryNames.length > 0,
|
|
77
|
+
count: memoryNames.length,
|
|
78
|
+
directory: "workflow-graph/memories",
|
|
79
|
+
names: memoryNames,
|
|
90
80
|
},
|
|
91
81
|
playwright: {
|
|
92
82
|
installed: playwrightInstalled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-status.js","sourceRoot":"","sources":["../../../src/core/integrations/tool-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tool-status.js","sourceRoot":"","sources":["../../../src/core/integrations/tool-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Migrator — copies .serena/memories/ → workflow-graph/memories/.
|
|
3
|
+
* Skips files that already exist in target. Used for seamless transition
|
|
4
|
+
* from Serena MCP to native memory system.
|
|
5
|
+
*/
|
|
6
|
+
export interface MigrationResult {
|
|
7
|
+
migrated: number;
|
|
8
|
+
skipped: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Migrate Serena memories from .serena/memories/ to workflow-graph/memories/.
|
|
12
|
+
* Files that already exist in the target are skipped (not overwritten).
|
|
13
|
+
*/
|
|
14
|
+
export declare function migrateSerenaMemories(basePath: string): Promise<MigrationResult>;
|
|
15
|
+
//# sourceMappingURL=memory-migrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-migrator.d.ts","sourceRoot":"","sources":["../../../src/core/memory/memory-migrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAyBD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAqCtF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Migrator — copies .serena/memories/ → workflow-graph/memories/.
|
|
3
|
+
* Skips files that already exist in target. Used for seamless transition
|
|
4
|
+
* from Serena MCP to native memory system.
|
|
5
|
+
*/
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { readdir, readFile, writeFile, mkdir } from "node:fs/promises";
|
|
8
|
+
import { existsSync } from "node:fs";
|
|
9
|
+
import { logger } from "../utils/logger.js";
|
|
10
|
+
import { STORE_DIR } from "../utils/constants.js";
|
|
11
|
+
const SERENA_MEMORIES_DIR = ".serena/memories";
|
|
12
|
+
const TARGET_MEMORIES_DIR = "memories";
|
|
13
|
+
/**
|
|
14
|
+
* Recursively collect all .md file paths relative to root.
|
|
15
|
+
*/
|
|
16
|
+
async function collectFiles(dir, root) {
|
|
17
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
18
|
+
const results = [];
|
|
19
|
+
for (const entry of entries) {
|
|
20
|
+
const fullPath = path.join(dir, entry.name);
|
|
21
|
+
if (entry.isDirectory()) {
|
|
22
|
+
const nested = await collectFiles(fullPath, root);
|
|
23
|
+
results.push(...nested);
|
|
24
|
+
}
|
|
25
|
+
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
26
|
+
results.push(path.relative(root, fullPath));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Migrate Serena memories from .serena/memories/ to workflow-graph/memories/.
|
|
33
|
+
* Files that already exist in the target are skipped (not overwritten).
|
|
34
|
+
*/
|
|
35
|
+
export async function migrateSerenaMemories(basePath) {
|
|
36
|
+
const sourceDir = path.join(basePath, SERENA_MEMORIES_DIR);
|
|
37
|
+
const targetDir = path.join(basePath, STORE_DIR, TARGET_MEMORIES_DIR);
|
|
38
|
+
if (!existsSync(sourceDir)) {
|
|
39
|
+
return { migrated: 0, skipped: 0 };
|
|
40
|
+
}
|
|
41
|
+
let migrated = 0;
|
|
42
|
+
let skipped = 0;
|
|
43
|
+
const files = await collectFiles(sourceDir, sourceDir);
|
|
44
|
+
for (const relativePath of files) {
|
|
45
|
+
const sourcePath = path.join(sourceDir, relativePath);
|
|
46
|
+
const targetPath = path.join(targetDir, relativePath);
|
|
47
|
+
if (existsSync(targetPath)) {
|
|
48
|
+
skipped++;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const targetFileDir = path.dirname(targetPath);
|
|
52
|
+
if (!existsSync(targetFileDir)) {
|
|
53
|
+
await mkdir(targetFileDir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
const content = await readFile(sourcePath, "utf-8");
|
|
56
|
+
await writeFile(targetPath, content, "utf-8");
|
|
57
|
+
migrated++;
|
|
58
|
+
}
|
|
59
|
+
if (migrated > 0) {
|
|
60
|
+
logger.info("Serena memories migrated", { migrated, skipped, from: sourceDir, to: targetDir });
|
|
61
|
+
}
|
|
62
|
+
return { migrated, skipped };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=memory-migrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-migrator.js","sourceRoot":"","sources":["../../../src/core/memory/memory-migrator.ts"],"names":[],"mappings":"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"}
|