@mcp-graph-workflow/mcp-graph 5.0.3 → 5.0.4
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 +4 -0
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +28 -16
- package/dist/api/router.js.map +1 -1
- package/dist/api/routes/benchmark.d.ts +2 -2
- package/dist/api/routes/benchmark.d.ts.map +1 -1
- package/dist/api/routes/benchmark.js +2 -1
- package/dist/api/routes/benchmark.js.map +1 -1
- package/dist/api/routes/context.d.ts +2 -2
- package/dist/api/routes/context.d.ts.map +1 -1
- package/dist/api/routes/context.js +2 -2
- package/dist/api/routes/context.js.map +1 -1
- package/dist/api/routes/docs-cache.d.ts +2 -2
- package/dist/api/routes/docs-cache.d.ts.map +1 -1
- package/dist/api/routes/docs-cache.js +15 -5
- package/dist/api/routes/docs-cache.js.map +1 -1
- package/dist/api/routes/edges.d.ts +2 -2
- package/dist/api/routes/edges.d.ts.map +1 -1
- package/dist/api/routes/edges.js +4 -4
- package/dist/api/routes/edges.js.map +1 -1
- package/dist/api/routes/folder.d.ts +4 -0
- package/dist/api/routes/folder.d.ts.map +1 -0
- package/dist/api/routes/folder.js +83 -0
- package/dist/api/routes/folder.js.map +1 -0
- package/dist/api/routes/gitnexus.d.ts +1 -1
- package/dist/api/routes/gitnexus.d.ts.map +1 -1
- package/dist/api/routes/gitnexus.js +4 -4
- package/dist/api/routes/gitnexus.js.map +1 -1
- package/dist/api/routes/graph.d.ts +2 -2
- package/dist/api/routes/graph.d.ts.map +1 -1
- package/dist/api/routes/graph.js +3 -3
- package/dist/api/routes/graph.js.map +1 -1
- package/dist/api/routes/import.d.ts +2 -2
- package/dist/api/routes/import.d.ts.map +1 -1
- package/dist/api/routes/import.js +2 -1
- package/dist/api/routes/import.js.map +1 -1
- package/dist/api/routes/insights.d.ts +2 -2
- package/dist/api/routes/insights.d.ts.map +1 -1
- package/dist/api/routes/insights.js +5 -5
- package/dist/api/routes/insights.js.map +1 -1
- package/dist/api/routes/integrations.d.ts +2 -2
- package/dist/api/routes/integrations.d.ts.map +1 -1
- package/dist/api/routes/integrations.js +7 -7
- package/dist/api/routes/integrations.js.map +1 -1
- package/dist/api/routes/knowledge.d.ts +2 -2
- package/dist/api/routes/knowledge.d.ts.map +1 -1
- package/dist/api/routes/knowledge.js +18 -2
- package/dist/api/routes/knowledge.js.map +1 -1
- package/dist/api/routes/nodes.d.ts +2 -2
- package/dist/api/routes/nodes.d.ts.map +1 -1
- package/dist/api/routes/nodes.js +10 -10
- package/dist/api/routes/nodes.js.map +1 -1
- package/dist/api/routes/project.d.ts +2 -2
- package/dist/api/routes/project.d.ts.map +1 -1
- package/dist/api/routes/project.js +7 -7
- package/dist/api/routes/project.js.map +1 -1
- package/dist/api/routes/rag.d.ts +2 -2
- package/dist/api/routes/rag.d.ts.map +1 -1
- package/dist/api/routes/rag.js +17 -4
- package/dist/api/routes/rag.js.map +1 -1
- package/dist/api/routes/search.d.ts +2 -2
- package/dist/api/routes/search.d.ts.map +1 -1
- package/dist/api/routes/search.js +2 -2
- package/dist/api/routes/search.js.map +1 -1
- package/dist/api/routes/skills.d.ts +1 -1
- package/dist/api/routes/skills.d.ts.map +1 -1
- package/dist/api/routes/skills.js +2 -2
- package/dist/api/routes/skills.js.map +1 -1
- package/dist/api/routes/stats.d.ts +2 -2
- package/dist/api/routes/stats.d.ts.map +1 -1
- package/dist/api/routes/stats.js +2 -2
- package/dist/api/routes/stats.js.map +1 -1
- package/dist/core/store/store-manager.d.ts +34 -0
- package/dist/core/store/store-manager.d.ts.map +1 -0
- package/dist/core/store/store-manager.js +130 -0
- package/dist/core/store/store-manager.js.map +1 -0
- package/dist/mcp/app-factory.d.ts +2 -0
- 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/server.js +13 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/schemas/folder.schema.d.ts +6 -0
- package/dist/schemas/folder.schema.d.ts.map +1 -0
- package/dist/schemas/folder.schema.js +5 -0
- package/dist/schemas/folder.schema.js.map +1 -0
- package/dist/web/dashboard/dist/assets/{benchmark-tab-Dyov30Lh.js → benchmark-tab-5r5wZQij.js} +1 -1
- package/dist/web/dashboard/dist/assets/{gitnexus-tab-CTIGfybw.js → gitnexus-tab-DMCU41Nr.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-tab-C3xXSP0r.js → graph-tab-BK8wjCuY.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-utils-Bc6FScMr.js → graph-utils-qelY_PVT.js} +1 -1
- package/dist/web/dashboard/dist/assets/index-BBlpGofr.js +53 -0
- package/dist/web/dashboard/dist/assets/index-BUl7yWBP.css +1 -0
- package/dist/web/dashboard/dist/assets/{insights-tab-jsrsclKr.js → insights-tab-OQnPT7h1.js} +1 -1
- package/dist/web/dashboard/dist/assets/{logs-tab-BSg8FWPq.js → logs-tab-BCwPTvn9.js} +1 -1
- package/dist/web/dashboard/dist/assets/{prd-backlog-tab-Jlr1o589.js → prd-backlog-tab-DkTq385t.js} +1 -1
- package/dist/web/dashboard/dist/assets/{serena-tab-tAFEE_wr.js → serena-tab-CZ8Lp8yJ.js} +1 -1
- package/dist/web/dashboard/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/dashboard/dist/assets/index-CF40hZ69.css +0 -1
- package/dist/web/dashboard/dist/assets/index-DU2tm539.js +0 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/api/routes/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,wBAAgB,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/api/routes/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,MAAM,GAAG,MAAM,CAapE"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Router } from "express";
|
|
2
2
|
import { scanSkills } from "../../core/insights/skill-recommender.js";
|
|
3
|
-
export function createSkillsRouter(
|
|
3
|
+
export function createSkillsRouter(getBasePath) {
|
|
4
4
|
const router = Router();
|
|
5
5
|
router.get("/", async (_req, res, next) => {
|
|
6
6
|
try {
|
|
7
|
-
const skills = await scanSkills(
|
|
7
|
+
const skills = await scanSkills(getBasePath());
|
|
8
8
|
res.json(skills);
|
|
9
9
|
}
|
|
10
10
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/api/routes/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/api/routes/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAC,WAAyB;IAC1D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Router } from "express";
|
|
2
|
-
import type {
|
|
3
|
-
export declare function createStatsRouter(
|
|
2
|
+
import type { StoreRef } from "../../core/store/store-manager.js";
|
|
3
|
+
export declare function createStatsRouter(storeRef: StoreRef): Router;
|
|
4
4
|
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/api/routes/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/api/routes/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAY5D"}
|
package/dist/api/routes/stats.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Router } from "express";
|
|
2
|
-
export function createStatsRouter(
|
|
2
|
+
export function createStatsRouter(storeRef) {
|
|
3
3
|
const router = Router();
|
|
4
4
|
router.get("/", (_req, res, next) => {
|
|
5
5
|
try {
|
|
6
|
-
res.json(
|
|
6
|
+
res.json(storeRef.current.getStats());
|
|
7
7
|
}
|
|
8
8
|
catch (err) {
|
|
9
9
|
next(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/api/routes/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,MAAM,UAAU,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/api/routes/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SqliteStore } from "./sqlite-store.js";
|
|
2
|
+
/** Mutable reference to the current SqliteStore — shared across route closures. */
|
|
3
|
+
export interface StoreRef {
|
|
4
|
+
current: SqliteStore;
|
|
5
|
+
}
|
|
6
|
+
export declare class StoreManager {
|
|
7
|
+
private _ref;
|
|
8
|
+
private _basePath;
|
|
9
|
+
private _recentFolders;
|
|
10
|
+
private constructor();
|
|
11
|
+
static create(basePath: string): StoreManager;
|
|
12
|
+
get store(): SqliteStore;
|
|
13
|
+
get storeRef(): StoreRef;
|
|
14
|
+
get basePath(): string;
|
|
15
|
+
get recentFolders(): string[];
|
|
16
|
+
get recentFilePath(): string;
|
|
17
|
+
/** Returns a stable getter function for basePath — captures `this` by reference. */
|
|
18
|
+
get getBasePathFn(): () => string;
|
|
19
|
+
/**
|
|
20
|
+
* Swap the active store to a new project directory.
|
|
21
|
+
* If the swap fails, the old store remains active.
|
|
22
|
+
*/
|
|
23
|
+
swap(newBasePath: string): {
|
|
24
|
+
ok: true;
|
|
25
|
+
basePath: string;
|
|
26
|
+
} | {
|
|
27
|
+
ok: false;
|
|
28
|
+
error: string;
|
|
29
|
+
};
|
|
30
|
+
close(): void;
|
|
31
|
+
private _addRecent;
|
|
32
|
+
private _persistRecent;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=store-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-manager.d.ts","sourceRoot":"","sources":["../../../src/core/store/store-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,mFAAmF;AACnF,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAKD,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAW;IAEjC,OAAO;IAMP,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IAM7C,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,oFAAoF;IACpF,IAAI,aAAa,IAAI,MAAM,MAAM,CAEhC;IAED;;;OAGG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAsDxF,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;CASvB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { SqliteStore } from "./sqlite-store.js";
|
|
5
|
+
import { STORE_DIR, LEGACY_STORE_DIR, DB_FILE } from "../utils/constants.js";
|
|
6
|
+
import { logger } from "../utils/logger.js";
|
|
7
|
+
const MAX_RECENT = 10;
|
|
8
|
+
const RECENT_FILE = path.join(os.homedir(), ".mcp-graph-recent-folders.json");
|
|
9
|
+
export class StoreManager {
|
|
10
|
+
_ref;
|
|
11
|
+
_basePath;
|
|
12
|
+
_recentFolders;
|
|
13
|
+
constructor(store, basePath, recentFolders) {
|
|
14
|
+
this._ref = { current: store };
|
|
15
|
+
this._basePath = basePath;
|
|
16
|
+
this._recentFolders = recentFolders;
|
|
17
|
+
}
|
|
18
|
+
static create(basePath) {
|
|
19
|
+
const store = SqliteStore.open(basePath);
|
|
20
|
+
const recent = loadRecentFolders();
|
|
21
|
+
return new StoreManager(store, basePath, recent);
|
|
22
|
+
}
|
|
23
|
+
get store() {
|
|
24
|
+
return this._ref.current;
|
|
25
|
+
}
|
|
26
|
+
get storeRef() {
|
|
27
|
+
return this._ref;
|
|
28
|
+
}
|
|
29
|
+
get basePath() {
|
|
30
|
+
return this._basePath;
|
|
31
|
+
}
|
|
32
|
+
get recentFolders() {
|
|
33
|
+
return [...this._recentFolders];
|
|
34
|
+
}
|
|
35
|
+
get recentFilePath() {
|
|
36
|
+
return RECENT_FILE;
|
|
37
|
+
}
|
|
38
|
+
/** Returns a stable getter function for basePath — captures `this` by reference. */
|
|
39
|
+
get getBasePathFn() {
|
|
40
|
+
return () => this._basePath;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Swap the active store to a new project directory.
|
|
44
|
+
* If the swap fails, the old store remains active.
|
|
45
|
+
*/
|
|
46
|
+
swap(newBasePath) {
|
|
47
|
+
// Validate directory exists
|
|
48
|
+
if (!existsSync(newBasePath)) {
|
|
49
|
+
return { ok: false, error: `Directory does not exist: ${newBasePath}` };
|
|
50
|
+
}
|
|
51
|
+
// Check for graph.db in either workflow-graph/ or legacy .mcp-graph/
|
|
52
|
+
const newStoreDir = path.join(newBasePath, STORE_DIR);
|
|
53
|
+
const legacyStoreDir = path.join(newBasePath, LEGACY_STORE_DIR);
|
|
54
|
+
const hasNew = existsSync(path.join(newStoreDir, DB_FILE));
|
|
55
|
+
const hasLegacy = existsSync(path.join(legacyStoreDir, DB_FILE));
|
|
56
|
+
if (!hasNew && !hasLegacy) {
|
|
57
|
+
return { ok: false, error: `No graph database found at ${newBasePath}. Expected ${STORE_DIR}/${DB_FILE}` };
|
|
58
|
+
}
|
|
59
|
+
// Preserve eventBus from current store
|
|
60
|
+
const eventBus = this._ref.current.eventBus;
|
|
61
|
+
const oldStore = this._ref.current;
|
|
62
|
+
const oldBasePath = this._basePath;
|
|
63
|
+
try {
|
|
64
|
+
const newStore = SqliteStore.open(newBasePath);
|
|
65
|
+
if (eventBus) {
|
|
66
|
+
newStore.eventBus = eventBus;
|
|
67
|
+
}
|
|
68
|
+
// Close old store
|
|
69
|
+
oldStore.close();
|
|
70
|
+
// Update refs
|
|
71
|
+
this._ref.current = newStore;
|
|
72
|
+
this._basePath = newBasePath;
|
|
73
|
+
// Update recent folders
|
|
74
|
+
this._addRecent(oldBasePath);
|
|
75
|
+
this._addRecent(newBasePath);
|
|
76
|
+
this._persistRecent();
|
|
77
|
+
logger.info("store-manager:swap:ok", { from: oldBasePath, to: newBasePath });
|
|
78
|
+
return { ok: true, basePath: newBasePath };
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
// Swap failed — old store remains active
|
|
82
|
+
logger.error("store-manager:swap:fail", {
|
|
83
|
+
error: err instanceof Error ? err.message : String(err),
|
|
84
|
+
targetPath: newBasePath,
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
error: `Failed to open store at ${newBasePath}: ${err instanceof Error ? err.message : String(err)}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
close() {
|
|
93
|
+
this._ref.current.close();
|
|
94
|
+
}
|
|
95
|
+
_addRecent(folder) {
|
|
96
|
+
// Remove if already present (dedup)
|
|
97
|
+
this._recentFolders = this._recentFolders.filter((f) => f !== folder);
|
|
98
|
+
// Add to front
|
|
99
|
+
this._recentFolders.unshift(folder);
|
|
100
|
+
// Trim to max
|
|
101
|
+
if (this._recentFolders.length > MAX_RECENT) {
|
|
102
|
+
this._recentFolders = this._recentFolders.slice(0, MAX_RECENT);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
_persistRecent() {
|
|
106
|
+
try {
|
|
107
|
+
writeFileSync(RECENT_FILE, JSON.stringify(this._recentFolders, null, 2), "utf-8");
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
logger.warn("store-manager:persist-recent:fail", {
|
|
111
|
+
error: err instanceof Error ? err.message : String(err),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function loadRecentFolders() {
|
|
117
|
+
try {
|
|
118
|
+
if (existsSync(RECENT_FILE)) {
|
|
119
|
+
const data = JSON.parse(readFileSync(RECENT_FILE, "utf-8"));
|
|
120
|
+
if (Array.isArray(data)) {
|
|
121
|
+
return data.filter((item) => typeof item === "string").slice(0, MAX_RECENT);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Ignore corrupt file
|
|
127
|
+
}
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=store-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-manager.js","sourceRoot":"","sources":["../../../src/core/store/store-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { Express } from "express";
|
|
2
2
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import type { SqliteStore } from "../core/store/sqlite-store.js";
|
|
4
|
+
import type { StoreManager } from "../core/store/store-manager.js";
|
|
4
5
|
import type { GraphEventBus } from "../core/events/event-bus.js";
|
|
5
6
|
export interface AppFactoryOptions {
|
|
6
7
|
store: SqliteStore;
|
|
7
8
|
basePath: string;
|
|
8
9
|
eventBus: GraphEventBus;
|
|
9
10
|
mcp?: McpServer;
|
|
11
|
+
storeManager?: StoreManager;
|
|
10
12
|
}
|
|
11
13
|
export declare function createApp(options: AppFactoryOptions): Express;
|
|
12
14
|
//# sourceMappingURL=app-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-factory.d.ts","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"app-factory.d.ts","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CA6B7D"}
|
package/dist/mcp/app-factory.js
CHANGED
|
@@ -6,7 +6,7 @@ import { createApiRouter } from "../api/router.js";
|
|
|
6
6
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
7
|
const publicDir = path.join(__dirname, "..", "web", "dashboard", "dist");
|
|
8
8
|
export function createApp(options) {
|
|
9
|
-
const { store, basePath, eventBus, mcp } = options;
|
|
9
|
+
const { store, basePath, eventBus, mcp, storeManager } = options;
|
|
10
10
|
const app = express();
|
|
11
11
|
app.use(express.json());
|
|
12
12
|
// MCP HTTP transport (optional — only when MCP server is provided)
|
|
@@ -20,7 +20,7 @@ export function createApp(options) {
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
// REST API
|
|
23
|
-
app.use("/api/v1", createApiRouter({ store, basePath, eventBus }));
|
|
23
|
+
app.use("/api/v1", createApiRouter({ store, basePath, eventBus, storeManager }));
|
|
24
24
|
// Static files (dashboard)
|
|
25
25
|
app.use(express.static(publicDir));
|
|
26
26
|
// Health check
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-factory.js","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"app-factory.js","sourceRoot":"","sources":["../../src/mcp/app-factory.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAInG,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAUzE,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEjE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,mEAAmE;IACnE,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;gBAClD,kBAAkB,EAAE,SAAS;aAC9B,CAAC,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;IACX,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAEjF,2BAA2B;IAC3B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnC,eAAe;IACf,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
-
import { SqliteStore } from "../core/store/sqlite-store.js";
|
|
4
3
|
import { registerAllTools } from "./tools/index.js";
|
|
5
4
|
import { GraphEventBus } from "../core/events/event-bus.js";
|
|
6
5
|
import { logger } from "../core/utils/logger.js";
|
|
7
6
|
import { loadConfig } from "../core/config/config-loader.js";
|
|
8
7
|
import { ensureGitNexusAnalyzed, startGitNexusServe, stopGitNexus } from "../core/integrations/gitnexus-launcher.js";
|
|
9
8
|
import { createApp } from "./app-factory.js";
|
|
9
|
+
import { StoreManager } from "../core/store/store-manager.js";
|
|
10
10
|
const config = loadConfig();
|
|
11
11
|
const PORT = config.port;
|
|
12
|
-
// ── Store + Event Bus
|
|
13
|
-
const
|
|
12
|
+
// ── Store Manager + Event Bus ────────────────────────────
|
|
13
|
+
const storeManager = StoreManager.create(process.cwd());
|
|
14
14
|
const eventBus = new GraphEventBus();
|
|
15
|
-
store.eventBus = eventBus;
|
|
15
|
+
storeManager.store.eventBus = eventBus;
|
|
16
16
|
// ── MCP Server ───────────────────────────────────────────
|
|
17
17
|
const mcp = new McpServer({ name: "mcp-graph", version: "1.0.0" }, { capabilities: { tools: {} } });
|
|
18
|
-
registerAllTools(mcp, store);
|
|
18
|
+
registerAllTools(mcp, storeManager.store);
|
|
19
19
|
// ── Express app ──────────────────────────────────────────
|
|
20
|
-
const app = createApp({
|
|
20
|
+
const app = createApp({
|
|
21
|
+
store: storeManager.store,
|
|
22
|
+
basePath: process.cwd(),
|
|
23
|
+
eventBus,
|
|
24
|
+
mcp,
|
|
25
|
+
storeManager,
|
|
26
|
+
});
|
|
21
27
|
// ── GitNexus auto-start ──────────────────────────────────
|
|
22
28
|
if (config.integrations.gitnexusAutoStart) {
|
|
23
29
|
const basePath = process.cwd();
|
|
@@ -38,7 +44,7 @@ if (config.integrations.gitnexusAutoStart) {
|
|
|
38
44
|
function cleanup(signal) {
|
|
39
45
|
logger.info("server:shutdown", { signal });
|
|
40
46
|
stopGitNexus().catch(() => { });
|
|
41
|
-
|
|
47
|
+
storeManager.close();
|
|
42
48
|
logger.info("server:shutdown:ok", { signal });
|
|
43
49
|
process.exit(0);
|
|
44
50
|
}
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/folder.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,oBAAoB;;iBAE/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder.schema.js","sourceRoot":"","sources":["../../src/schemas/folder.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;CAC5C,CAAC,CAAC"}
|
package/dist/web/dashboard/dist/assets/{benchmark-tab-Dyov30Lh.js → benchmark-tab-5r5wZQij.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,a as x,j as e}from"./index-
|
|
1
|
+
import{r as i,a as x,j as e}from"./index-BBlpGofr.js";function m(){const[r,n]=i.useState(null),[c,s]=i.useState(!0),[o,d]=i.useState(null);return i.useEffect(()=>{async function t(){try{const l=await x.request("/benchmark");n(l)}catch(l){d(l instanceof Error?l.message:"Failed to load benchmark data")}finally{s(!1)}}t()},[]),{data:r,loading:c,error:o}}function h(){const{data:r,loading:n,error:c}=m();if(n)return e.jsx("div",{className:"flex items-center justify-center h-full text-[var(--color-text-muted)]",children:"Loading benchmark data..."});if(c)return e.jsxs("div",{className:"flex items-center justify-center h-full text-[var(--color-danger)]",children:["Failed to load: ",c]});if(!r)return e.jsx("div",{});const{tokenEconomy:s,dependencyIntelligence:o,formulas:d}=r;return e.jsxs("div",{className:"p-6 max-w-5xl mx-auto space-y-6 overflow-y-auto h-full",children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Token Economy"}),e.jsxs("div",{className:"grid grid-cols-4 gap-3 mb-4",children:[e.jsx(a,{value:`${s.avgCompressionPercent}%`,label:"Avg Compress"}),e.jsx(a,{value:s.avgTokensPerTask.toLocaleString(),label:"Tokens Saved/Task"}),e.jsx(a,{value:s.totalNodes,label:"Nodes"}),e.jsx(a,{value:s.totalEdges,label:"Edges"})]}),s.perTaskMetrics.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-medium text-[var(--color-text-muted)] mb-2",children:"Context Compression per Task"}),e.jsx("div",{className:"space-y-1.5","data-testid":"compression-bars",children:s.perTaskMetrics.slice(0,15).map(t=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate",title:t.title,children:t.title}),e.jsx("div",{className:"flex-1 h-3 bg-[var(--color-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-[var(--color-accent)]",style:{width:`${Math.min(t.compressionPercent,100)}%`}})}),e.jsxs("span",{className:"text-[var(--color-text-muted)] w-24 text-right",children:[t.compressionPercent,"% (",t.estimatedTokens," tok)"]})]},t.id))})]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Dependency Intelligence"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsx(a,{value:o.inferredDeps,label:"Auto Inferred"}),e.jsx(a,{value:`${o.blockedTasks}/${s.totalNodes}`,label:"Blocked Detected"}),e.jsx(a,{value:o.cycles,label:"Cycles Detected"})]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Formulas & Justification"}),e.jsx("div",{className:"px-3 py-2 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-xs space-y-1","data-testid":"formulas-section",children:Object.entries(d).map(([t,l])=>e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("span",{className:"text-[var(--color-text-muted)] font-mono w-40 shrink-0",children:[t,":"]}),e.jsx("span",{children:l})]},t))})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Cost Savings per Task"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(a,{value:`$${s.costSavings.opusPerTask.toFixed(3)}`,label:"Opus Input"}),e.jsx(a,{value:`$${s.costSavings.sonnetPerTask.toFixed(3)}`,label:"Sonnet Input"})]})]})]})}function a({value:r,label:n}){return e.jsxs("div",{className:"p-3 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-center","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xl font-bold",children:r}),e.jsx("div",{className:"text-[10px] text-[var(--color-text-muted)] uppercase",children:n})]})}export{h as BenchmarkTab};
|