@mcp-graph-workflow/mcp-graph 5.0.2 → 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.
Files changed (100) hide show
  1. package/dist/api/router.d.ts +4 -0
  2. package/dist/api/router.d.ts.map +1 -1
  3. package/dist/api/router.js +28 -16
  4. package/dist/api/router.js.map +1 -1
  5. package/dist/api/routes/benchmark.d.ts +2 -2
  6. package/dist/api/routes/benchmark.d.ts.map +1 -1
  7. package/dist/api/routes/benchmark.js +2 -1
  8. package/dist/api/routes/benchmark.js.map +1 -1
  9. package/dist/api/routes/context.d.ts +2 -2
  10. package/dist/api/routes/context.d.ts.map +1 -1
  11. package/dist/api/routes/context.js +2 -2
  12. package/dist/api/routes/context.js.map +1 -1
  13. package/dist/api/routes/docs-cache.d.ts +2 -2
  14. package/dist/api/routes/docs-cache.d.ts.map +1 -1
  15. package/dist/api/routes/docs-cache.js +15 -5
  16. package/dist/api/routes/docs-cache.js.map +1 -1
  17. package/dist/api/routes/edges.d.ts +2 -2
  18. package/dist/api/routes/edges.d.ts.map +1 -1
  19. package/dist/api/routes/edges.js +4 -4
  20. package/dist/api/routes/edges.js.map +1 -1
  21. package/dist/api/routes/folder.d.ts +4 -0
  22. package/dist/api/routes/folder.d.ts.map +1 -0
  23. package/dist/api/routes/folder.js +83 -0
  24. package/dist/api/routes/folder.js.map +1 -0
  25. package/dist/api/routes/gitnexus.d.ts +1 -1
  26. package/dist/api/routes/gitnexus.d.ts.map +1 -1
  27. package/dist/api/routes/gitnexus.js +4 -4
  28. package/dist/api/routes/gitnexus.js.map +1 -1
  29. package/dist/api/routes/graph.d.ts +2 -2
  30. package/dist/api/routes/graph.d.ts.map +1 -1
  31. package/dist/api/routes/graph.js +3 -3
  32. package/dist/api/routes/graph.js.map +1 -1
  33. package/dist/api/routes/import.d.ts +2 -2
  34. package/dist/api/routes/import.d.ts.map +1 -1
  35. package/dist/api/routes/import.js +2 -1
  36. package/dist/api/routes/import.js.map +1 -1
  37. package/dist/api/routes/insights.d.ts +2 -2
  38. package/dist/api/routes/insights.d.ts.map +1 -1
  39. package/dist/api/routes/insights.js +5 -5
  40. package/dist/api/routes/insights.js.map +1 -1
  41. package/dist/api/routes/integrations.d.ts +2 -2
  42. package/dist/api/routes/integrations.d.ts.map +1 -1
  43. package/dist/api/routes/integrations.js +7 -7
  44. package/dist/api/routes/integrations.js.map +1 -1
  45. package/dist/api/routes/knowledge.d.ts +2 -2
  46. package/dist/api/routes/knowledge.d.ts.map +1 -1
  47. package/dist/api/routes/knowledge.js +18 -2
  48. package/dist/api/routes/knowledge.js.map +1 -1
  49. package/dist/api/routes/nodes.d.ts +2 -2
  50. package/dist/api/routes/nodes.d.ts.map +1 -1
  51. package/dist/api/routes/nodes.js +10 -10
  52. package/dist/api/routes/nodes.js.map +1 -1
  53. package/dist/api/routes/project.d.ts +2 -2
  54. package/dist/api/routes/project.d.ts.map +1 -1
  55. package/dist/api/routes/project.js +7 -7
  56. package/dist/api/routes/project.js.map +1 -1
  57. package/dist/api/routes/rag.d.ts +2 -2
  58. package/dist/api/routes/rag.d.ts.map +1 -1
  59. package/dist/api/routes/rag.js +17 -4
  60. package/dist/api/routes/rag.js.map +1 -1
  61. package/dist/api/routes/search.d.ts +2 -2
  62. package/dist/api/routes/search.d.ts.map +1 -1
  63. package/dist/api/routes/search.js +2 -2
  64. package/dist/api/routes/search.js.map +1 -1
  65. package/dist/api/routes/skills.d.ts +1 -1
  66. package/dist/api/routes/skills.d.ts.map +1 -1
  67. package/dist/api/routes/skills.js +2 -2
  68. package/dist/api/routes/skills.js.map +1 -1
  69. package/dist/api/routes/stats.d.ts +2 -2
  70. package/dist/api/routes/stats.d.ts.map +1 -1
  71. package/dist/api/routes/stats.js +2 -2
  72. package/dist/api/routes/stats.js.map +1 -1
  73. package/dist/core/store/store-manager.d.ts +34 -0
  74. package/dist/core/store/store-manager.d.ts.map +1 -0
  75. package/dist/core/store/store-manager.js +130 -0
  76. package/dist/core/store/store-manager.js.map +1 -0
  77. package/dist/mcp/app-factory.d.ts +2 -0
  78. package/dist/mcp/app-factory.d.ts.map +1 -1
  79. package/dist/mcp/app-factory.js +2 -2
  80. package/dist/mcp/app-factory.js.map +1 -1
  81. package/dist/mcp/server.js +13 -7
  82. package/dist/mcp/server.js.map +1 -1
  83. package/dist/schemas/folder.schema.d.ts +6 -0
  84. package/dist/schemas/folder.schema.d.ts.map +1 -0
  85. package/dist/schemas/folder.schema.js +5 -0
  86. package/dist/schemas/folder.schema.js.map +1 -0
  87. package/dist/web/dashboard/dist/assets/{benchmark-tab-CQJofeJ4.js → benchmark-tab-5r5wZQij.js} +1 -1
  88. package/dist/web/dashboard/dist/assets/{gitnexus-tab-Bkd-APRz.js → gitnexus-tab-DMCU41Nr.js} +7 -7
  89. package/dist/web/dashboard/dist/assets/{graph-tab-Pra4HkGL.js → graph-tab-BK8wjCuY.js} +1 -1
  90. package/dist/web/dashboard/dist/assets/{graph-utils-CIQgj2HC.js → graph-utils-qelY_PVT.js} +1 -1
  91. package/dist/web/dashboard/dist/assets/index-BBlpGofr.js +53 -0
  92. package/dist/web/dashboard/dist/assets/index-BUl7yWBP.css +1 -0
  93. package/dist/web/dashboard/dist/assets/{insights-tab-D7Zubtyb.js → insights-tab-OQnPT7h1.js} +1 -1
  94. package/dist/web/dashboard/dist/assets/{logs-tab-vmvswMc3.js → logs-tab-BCwPTvn9.js} +1 -1
  95. package/dist/web/dashboard/dist/assets/{prd-backlog-tab-B8vVDCL4.js → prd-backlog-tab-DkTq385t.js} +1 -1
  96. package/dist/web/dashboard/dist/assets/{serena-tab-Bw981Xoi.js → serena-tab-CZ8Lp8yJ.js} +1 -1
  97. package/dist/web/dashboard/dist/index.html +2 -2
  98. package/package.json +2 -2
  99. package/dist/web/dashboard/dist/assets/index-BI7kQHsj.js +0 -53
  100. package/dist/web/dashboard/dist/assets/index-CF40hZ69.css +0 -1
@@ -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,QAAQ,EAAE,MAAM,GAAG,MAAM,CAa3D"}
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(basePath) {
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(basePath);
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,QAAgB;IACjD,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,QAAQ,CAAC,CAAC;YAC1C,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
+ {"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 { SqliteStore } from "../../core/store/sqlite-store.js";
3
- export declare function createStatsRouter(store: SqliteStore): Router;
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,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAY5D"}
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"}
@@ -1,9 +1,9 @@
1
1
  import { Router } from "express";
2
- export function createStatsRouter(store) {
2
+ export function createStatsRouter(storeRef) {
3
3
  const router = Router();
4
4
  router.get("/", (_req, res, next) => {
5
5
  try {
6
- res.json(store.getStats());
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,KAAkB;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,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7B,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
+ {"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;CACjB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CA6B7D"}
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"}
@@ -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;AAGnG,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;AASzE,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAEnD,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,CAAC,CAAC,CAAC;IAEnE,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"}
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"}
@@ -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 store = SqliteStore.open(process.cwd());
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({ store, basePath: process.cwd(), eventBus, mcp });
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
- store.close();
47
+ storeManager.close();
42
48
  logger.info("server:shutdown:ok", { signal });
43
49
  process.exit(0);
44
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod/v4";
2
+ export declare const OpenFolderBodySchema: z.ZodObject<{
3
+ path: z.ZodString;
4
+ }, z.core.$strip>;
5
+ export type OpenFolderBody = z.infer<typeof OpenFolderBodySchema>;
6
+ //# sourceMappingURL=folder.schema.d.ts.map
@@ -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,5 @@
1
+ import { z } from "zod/v4";
2
+ export const OpenFolderBodySchema = z.object({
3
+ path: z.string().min(1, "Path is required"),
4
+ });
5
+ //# sourceMappingURL=folder.schema.js.map
@@ -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"}
@@ -1 +1 @@
1
- import{r as i,a as x,j as e}from"./index-BI7kQHsj.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};
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};