@mcp-graph-workflow/mcp-graph 5.0.5 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -77,7 +77,8 @@ npm run dev # HTTP + dashboard at localhost:3000
77
77
  - **Semantic Search + RAG** — Full-text BM25 search + TF-IDF embeddings, 100% local
78
78
  - **Sprint Planning** — Velocity metrics, capacity-based planning, risk assessment
79
79
  - **Web Dashboard** — Interactive graph visualization, backlog tracking, code intelligence, insights
80
- - **Multi-Agent Mesh** — Serena + GitNexus + Context7 + Playwright coordinated via event bus
80
+ - **Multi-Agent Mesh** — Serena + GitNexus + Context7 + Playwright coordinated via event bus, with phase-aware MCP suggestions
81
+ - **Environment Doctor** — `mcp-graph doctor` validates Node.js, SQLite, permissions, integrations, and suggests fixes
81
82
  - **Local-First** — SQLite persistence, zero external dependencies, cross-platform
82
83
 
83
84
  ## Who is this for?
@@ -115,7 +116,7 @@ mcp-graph serve --port 3000 # or: npm run dev
115
116
  |---|---|---|
116
117
  | **MCP Tools** | 26 | [MCP-TOOLS-REFERENCE.md](docs/MCP-TOOLS-REFERENCE.md) |
117
118
  | **REST Endpoints** | 44 (17 routers) | [REST-API-REFERENCE.md](docs/REST-API-REFERENCE.md) |
118
- | **CLI Commands** | 5 | `init`, `import`, `index`, `stats`, `serve` |
119
+ | **CLI Commands** | 6 | `init`, `import`, `index`, `stats`, `serve`, `doctor` |
119
120
 
120
121
  ## Integrations
121
122
 
@@ -149,6 +150,7 @@ npm run test:all # Everything
149
150
  | [Knowledge Pipeline](docs/KNOWLEDGE-PIPELINE.md) | RAG, embeddings, context assembly |
150
151
  | [Integrations](docs/INTEGRATIONS-GUIDE.md) | Serena, GitNexus, Context7, Playwright |
151
152
  | [Test Guide](docs/TEST-GUIDE.md) | Test pyramid and best practices |
153
+ | [PRD Writing Guide](docs/PRD-WRITING-GUIDE.md) | How to write PRDs that import correctly |
152
154
  | [Lifecycle](docs/LIFECYCLE.md) | 8-phase dev methodology |
153
155
 
154
156
  ## Support the Project
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function doctorCommand(): Command;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,aAAa,IAAI,OAAO,CAsCvC"}
@@ -0,0 +1,55 @@
1
+ import { Command } from "commander";
2
+ import { runDoctor } from "../../core/doctor/doctor-runner.js";
3
+ import { logger } from "../../core/utils/logger.js";
4
+ function output(msg) {
5
+ process.stdout.write(msg + "\n");
6
+ }
7
+ const LEVEL_ICON = {
8
+ ok: "\u2713",
9
+ warning: "\u26A0",
10
+ error: "\u2717",
11
+ };
12
+ function formatCheck(check) {
13
+ const icon = LEVEL_ICON[check.level] ?? "?";
14
+ let line = ` ${icon} ${check.message}`;
15
+ if (check.suggestion) {
16
+ line += `\n ${check.suggestion}`;
17
+ }
18
+ return line;
19
+ }
20
+ export function doctorCommand() {
21
+ return new Command("doctor")
22
+ .description("Validate the execution environment")
23
+ .option("-d, --dir <dir>", "Project directory", process.cwd())
24
+ .option("--json", "Output as JSON")
25
+ .action(async (opts) => {
26
+ try {
27
+ const report = await runDoctor(opts.dir);
28
+ if (opts.json) {
29
+ output(JSON.stringify(report, null, 2));
30
+ }
31
+ else {
32
+ output("mcp-graph doctor\n");
33
+ for (const check of report.checks) {
34
+ output(formatCheck(check));
35
+ }
36
+ output("");
37
+ output(`Summary: ${report.summary.ok} ok, ${report.summary.warning} warnings, ${report.summary.error} errors`);
38
+ if (report.passed) {
39
+ output("\nAll critical checks passed.");
40
+ }
41
+ else {
42
+ output("\nSome critical checks failed. Fix errors above.");
43
+ }
44
+ }
45
+ if (!report.passed) {
46
+ process.exit(1);
47
+ }
48
+ }
49
+ catch (err) {
50
+ logger.error(`Doctor failed: ${err instanceof Error ? err.message : String(err)}`);
51
+ process.exit(1);
52
+ }
53
+ });
54
+ }
55
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,GAA2B;IACzC,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,SAAS,WAAW,CAAC,KAAkB;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;IAC5C,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,IAAI,IAAI,WAAW,KAAK,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC7D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAoC,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBAED,MAAM,CAAC,EAAE,CAAC,CAAC;gBACX,MAAM,CACJ,YAAY,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CACvG,CAAC;gBAEF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,MAAM,CAAC,+BAA+B,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,kDAAkD,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/cli/index.js CHANGED
@@ -20,6 +20,7 @@ else {
20
20
  const { statsCommand } = await import("./commands/stats.js");
21
21
  const { initCommand } = await import("./commands/init.js");
22
22
  const { indexCommand } = await import("./commands/index-cmd.js");
23
+ const { doctorCommand } = await import("./commands/doctor.js");
23
24
  const program = new Command();
24
25
  program
25
26
  .name("mcp-graph")
@@ -30,6 +31,7 @@ else {
30
31
  program.addCommand(statsCommand());
31
32
  program.addCommand(initCommand());
32
33
  program.addCommand(indexCommand());
34
+ program.addCommand(doctorCommand());
33
35
  program.parse();
34
36
  }
35
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAsC,CAAC;AAE/E,8EAA8E;AAC9E,qEAAqE;AACrE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AAErE,IAAI,WAAW,EAAE,CAAC;IAChB,+EAA+E;IAC/E,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAClC,CAAC;KAAM,CAAC;IACN,qDAAqD;IACrD,MAAM,cAAc,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAEjC,oCAAoC;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC7D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACnE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC7D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAEjE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CACV,2EAA2E,CAC5E;SACA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IAEnC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAsC,CAAC;AAE/E,8EAA8E;AAC9E,qEAAqE;AACrE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AAErE,IAAI,WAAW,EAAE,CAAC;IAChB,+EAA+E;IAC/E,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAClC,CAAC;KAAM,CAAC;IACN,qDAAqD;IACrD,MAAM,cAAc,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAEjC,oCAAoC;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC7D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACnE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC7D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CACV,2EAA2E,CAC5E;SACA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { SqliteStore } from "../store/sqlite-store.js";
2
+ import type { CheckResult } from "./doctor-types.js";
3
+ /**
4
+ * Check Node.js version >= 20 using the current runtime.
5
+ */
6
+ export declare function checkNodeVersion(): CheckResult;
7
+ /**
8
+ * Check Node.js version >= 20 with an explicit version string (testable).
9
+ */
10
+ export declare function checkNodeVersionWith(version: string): CheckResult;
11
+ /**
12
+ * Check write permissions on the store directory.
13
+ */
14
+ export declare function checkWritePermissions(basePath: string): Promise<CheckResult>;
15
+ /**
16
+ * Check that the SQLite database exists and can be opened.
17
+ */
18
+ export declare function checkSqliteDatabase(basePath: string): Promise<CheckResult>;
19
+ /**
20
+ * Check database integrity via PRAGMA integrity_check.
21
+ */
22
+ export declare function checkDbIntegrity(basePath: string): Promise<CheckResult>;
23
+ /**
24
+ * Check if the graph project is initialized.
25
+ */
26
+ export declare function checkGraphInitialized(store: SqliteStore): CheckResult;
27
+ /**
28
+ * Check if the config file exists and is valid.
29
+ */
30
+ export declare function checkConfigFile(basePath: string): CheckResult;
31
+ /**
32
+ * Check if the dashboard build artifacts exist.
33
+ */
34
+ export declare function checkDashboardBuild(basePath: string): Promise<CheckResult>;
35
+ /**
36
+ * Check if .mcp.json exists and is valid.
37
+ */
38
+ export declare function checkMcpJson(basePath: string): CheckResult;
39
+ /**
40
+ * Check integration tools (GitNexus, Serena, Playwright).
41
+ */
42
+ export declare function checkIntegrations(basePath: string): Promise<CheckResult[]>;
43
+ //# sourceMappingURL=doctor-checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-checks.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/doctor-checks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAejE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2BlF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BhF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC7E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAwBrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAyB7D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgBhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CA0B1D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgEhF"}
@@ -0,0 +1,313 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { access, constants } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import Database from "better-sqlite3";
5
+ import { STORE_DIR, DB_FILE } from "../utils/constants.js";
6
+ import { fileExists } from "../utils/fs.js";
7
+ import { getIntegrationsStatus } from "../integrations/tool-status.js";
8
+ import { logger } from "../utils/logger.js";
9
+ const MIN_NODE_VERSION = 20;
10
+ /**
11
+ * Check Node.js version >= 20 using the current runtime.
12
+ */
13
+ export function checkNodeVersion() {
14
+ return checkNodeVersionWith(process.versions.node);
15
+ }
16
+ /**
17
+ * Check Node.js version >= 20 with an explicit version string (testable).
18
+ */
19
+ export function checkNodeVersionWith(version) {
20
+ const major = parseInt(version.split(".")[0], 10);
21
+ if (major >= MIN_NODE_VERSION) {
22
+ return {
23
+ name: "node-version",
24
+ level: "ok",
25
+ message: `Node.js v${version} (>= ${MIN_NODE_VERSION})`,
26
+ };
27
+ }
28
+ return {
29
+ name: "node-version",
30
+ level: "error",
31
+ message: `Node.js v${version} is below minimum v${MIN_NODE_VERSION}`,
32
+ suggestion: `Upgrade Node.js to v${MIN_NODE_VERSION} or later: https://nodejs.org`,
33
+ };
34
+ }
35
+ /**
36
+ * Check write permissions on the store directory.
37
+ */
38
+ export async function checkWritePermissions(basePath) {
39
+ const storeDir = path.join(basePath, STORE_DIR);
40
+ try {
41
+ await access(storeDir, constants.W_OK);
42
+ return {
43
+ name: "write-permissions",
44
+ level: "ok",
45
+ message: `Write access to ${STORE_DIR}/`,
46
+ };
47
+ }
48
+ catch {
49
+ // If store dir doesn't exist, check parent
50
+ try {
51
+ await access(basePath, constants.W_OK);
52
+ return {
53
+ name: "write-permissions",
54
+ level: "ok",
55
+ message: `Write access to project directory (${STORE_DIR}/ will be created)`,
56
+ };
57
+ }
58
+ catch {
59
+ return {
60
+ name: "write-permissions",
61
+ level: "error",
62
+ message: `No write access to ${basePath}`,
63
+ suggestion: `Check directory permissions: chmod u+w "${basePath}"`,
64
+ };
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Check that the SQLite database exists and can be opened.
70
+ */
71
+ export async function checkSqliteDatabase(basePath) {
72
+ const dbPath = path.join(basePath, STORE_DIR, DB_FILE);
73
+ if (!existsSync(dbPath)) {
74
+ return {
75
+ name: "sqlite-database",
76
+ level: "error",
77
+ message: `Database not found at ${STORE_DIR}/${DB_FILE}`,
78
+ suggestion: "Run 'mcp-graph init' to create the database",
79
+ };
80
+ }
81
+ try {
82
+ const db = new Database(dbPath, { readonly: true });
83
+ db.close();
84
+ return {
85
+ name: "sqlite-database",
86
+ level: "ok",
87
+ message: `Database exists at ${STORE_DIR}/${DB_FILE}`,
88
+ };
89
+ }
90
+ catch (err) {
91
+ return {
92
+ name: "sqlite-database",
93
+ level: "error",
94
+ message: `Database corrupt or unreadable: ${err instanceof Error ? err.message : String(err)}`,
95
+ suggestion: "Try restoring from a snapshot or re-running 'mcp-graph init'",
96
+ };
97
+ }
98
+ }
99
+ /**
100
+ * Check database integrity via PRAGMA integrity_check.
101
+ */
102
+ export async function checkDbIntegrity(basePath) {
103
+ const dbPath = path.join(basePath, STORE_DIR, DB_FILE);
104
+ if (!existsSync(dbPath)) {
105
+ return {
106
+ name: "db-integrity",
107
+ level: "error",
108
+ message: "Cannot check integrity — database not found",
109
+ };
110
+ }
111
+ try {
112
+ const db = new Database(dbPath, { readonly: true });
113
+ const result = db.pragma("integrity_check");
114
+ db.close();
115
+ const isOk = result.length === 1 && result[0].integrity_check === "ok";
116
+ if (isOk) {
117
+ return {
118
+ name: "db-integrity",
119
+ level: "ok",
120
+ message: "Database integrity check passed",
121
+ };
122
+ }
123
+ return {
124
+ name: "db-integrity",
125
+ level: "error",
126
+ message: `Database integrity issues: ${result.map((r) => r.integrity_check).join(", ")}`,
127
+ suggestion: "Restore from a snapshot: mcp-graph snapshot --restore <id>",
128
+ };
129
+ }
130
+ catch (err) {
131
+ return {
132
+ name: "db-integrity",
133
+ level: "error",
134
+ message: `Integrity check failed: ${err instanceof Error ? err.message : String(err)}`,
135
+ };
136
+ }
137
+ }
138
+ /**
139
+ * Check if the graph project is initialized.
140
+ */
141
+ export function checkGraphInitialized(store) {
142
+ try {
143
+ const project = store.getProject();
144
+ if (project) {
145
+ return {
146
+ name: "graph-initialized",
147
+ level: "ok",
148
+ message: `Project "${project.name}" initialized`,
149
+ };
150
+ }
151
+ return {
152
+ name: "graph-initialized",
153
+ level: "warning",
154
+ message: "No project initialized",
155
+ suggestion: "Run 'mcp-graph init' to initialize a project",
156
+ };
157
+ }
158
+ catch {
159
+ return {
160
+ name: "graph-initialized",
161
+ level: "warning",
162
+ message: "Could not check project initialization",
163
+ suggestion: "Run 'mcp-graph init' to initialize a project",
164
+ };
165
+ }
166
+ }
167
+ /**
168
+ * Check if the config file exists and is valid.
169
+ */
170
+ export function checkConfigFile(basePath) {
171
+ const configPath = path.join(basePath, "mcp-graph.config.json");
172
+ if (!existsSync(configPath)) {
173
+ return {
174
+ name: "config-file",
175
+ level: "ok",
176
+ message: "No config file — using defaults",
177
+ };
178
+ }
179
+ try {
180
+ const raw = readFileSync(configPath, "utf-8");
181
+ JSON.parse(raw);
182
+ return {
183
+ name: "config-file",
184
+ level: "ok",
185
+ message: "Config file is valid JSON",
186
+ };
187
+ }
188
+ catch (err) {
189
+ return {
190
+ name: "config-file",
191
+ level: "warning",
192
+ message: `Config file has invalid JSON: ${err instanceof Error ? err.message : String(err)}`,
193
+ suggestion: "Fix the JSON syntax in mcp-graph.config.json",
194
+ };
195
+ }
196
+ }
197
+ /**
198
+ * Check if the dashboard build artifacts exist.
199
+ */
200
+ export async function checkDashboardBuild(basePath) {
201
+ const dashboardIndex = path.join(basePath, "dist", "web", "dashboard", "index.html");
202
+ const exists = await fileExists(dashboardIndex);
203
+ if (exists) {
204
+ return {
205
+ name: "dashboard-build",
206
+ level: "ok",
207
+ message: "Dashboard build found",
208
+ };
209
+ }
210
+ return {
211
+ name: "dashboard-build",
212
+ level: "warning",
213
+ message: "Dashboard build not found",
214
+ suggestion: "Run 'npm run build' to build the dashboard",
215
+ };
216
+ }
217
+ /**
218
+ * Check if .mcp.json exists and is valid.
219
+ */
220
+ export function checkMcpJson(basePath) {
221
+ const mcpPath = path.join(basePath, ".mcp.json");
222
+ if (!existsSync(mcpPath)) {
223
+ return {
224
+ name: "mcp-json",
225
+ level: "warning",
226
+ message: ".mcp.json not found",
227
+ suggestion: "Create .mcp.json with MCP server configuration",
228
+ };
229
+ }
230
+ try {
231
+ const raw = readFileSync(mcpPath, "utf-8");
232
+ JSON.parse(raw);
233
+ return {
234
+ name: "mcp-json",
235
+ level: "ok",
236
+ message: ".mcp.json is valid",
237
+ };
238
+ }
239
+ catch {
240
+ return {
241
+ name: "mcp-json",
242
+ level: "warning",
243
+ message: ".mcp.json has invalid JSON",
244
+ suggestion: "Fix the JSON syntax in .mcp.json",
245
+ };
246
+ }
247
+ }
248
+ /**
249
+ * Check integration tools (GitNexus, Serena, Playwright).
250
+ */
251
+ export async function checkIntegrations(basePath) {
252
+ try {
253
+ const status = await getIntegrationsStatus(basePath);
254
+ const results = [];
255
+ // GitNexus
256
+ results.push({
257
+ name: "integration-gitnexus",
258
+ level: status.gitnexus.installed ? "ok" : "warning",
259
+ message: status.gitnexus.installed
260
+ ? `GitNexus installed${status.gitnexus.running ? " and running" : ""}`
261
+ : "GitNexus not installed",
262
+ ...(!status.gitnexus.installed && {
263
+ suggestion: "Install GitNexus: npm install -g gitnexus",
264
+ }),
265
+ });
266
+ // Serena
267
+ results.push({
268
+ name: "integration-serena",
269
+ level: status.serena.installed ? "ok" : "warning",
270
+ message: status.serena.installed
271
+ ? `Serena configured (${status.serena.memories.length} memories)`
272
+ : "Serena not configured",
273
+ ...(!status.serena.installed && {
274
+ suggestion: "Configure Serena: create .serena/ directory with project config",
275
+ }),
276
+ });
277
+ // Playwright
278
+ results.push({
279
+ name: "integration-playwright",
280
+ level: status.playwright.installed ? "ok" : "warning",
281
+ message: status.playwright.installed
282
+ ? "Playwright available"
283
+ : "Playwright not available",
284
+ ...(!status.playwright.installed && {
285
+ suggestion: "Install Playwright: npx playwright install",
286
+ }),
287
+ });
288
+ return results;
289
+ }
290
+ catch (err) {
291
+ logger.debug("doctor:integrations:fail", {
292
+ error: err instanceof Error ? err.message : String(err),
293
+ });
294
+ return [
295
+ {
296
+ name: "integration-gitnexus",
297
+ level: "warning",
298
+ message: "Could not check GitNexus status",
299
+ },
300
+ {
301
+ name: "integration-serena",
302
+ level: "warning",
303
+ message: "Could not check Serena status",
304
+ },
305
+ {
306
+ name: "integration-playwright",
307
+ level: "warning",
308
+ message: "Could not check Playwright status",
309
+ },
310
+ ];
311
+ }
312
+ }
313
+ //# sourceMappingURL=doctor-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-checks.js","sourceRoot":"","sources":["../../../src/core/doctor/doctor-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DoctorReport } from "./doctor-types.js";
2
+ /**
3
+ * Run all doctor checks and return a structured report.
4
+ */
5
+ export declare function runDoctor(basePath: string): Promise<DoctorReport>;
6
+ //# sourceMappingURL=doctor-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-runner.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/doctor-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAyBnE;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqDvE"}
@@ -0,0 +1,72 @@
1
+ import { existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { SqliteStore } from "../store/sqlite-store.js";
4
+ import { STORE_DIR, DB_FILE } from "../utils/constants.js";
5
+ import { logger } from "../utils/logger.js";
6
+ import { checkNodeVersion, checkWritePermissions, checkSqliteDatabase, checkDbIntegrity, checkGraphInitialized, checkConfigFile, checkDashboardBuild, checkMcpJson, checkIntegrations, } from "./doctor-checks.js";
7
+ function buildSummary(checks) {
8
+ let ok = 0;
9
+ let warning = 0;
10
+ let error = 0;
11
+ for (const c of checks) {
12
+ if (c.level === "ok")
13
+ ok++;
14
+ else if (c.level === "warning")
15
+ warning++;
16
+ else
17
+ error++;
18
+ }
19
+ return { ok, warning, error };
20
+ }
21
+ /**
22
+ * Run all doctor checks and return a structured report.
23
+ */
24
+ export async function runDoctor(basePath) {
25
+ logger.info("Running doctor checks", { basePath });
26
+ const checks = [];
27
+ // 1. Sync checks
28
+ checks.push(checkNodeVersion());
29
+ checks.push(checkConfigFile(basePath));
30
+ checks.push(checkMcpJson(basePath));
31
+ // 2. Async checks (parallel where possible)
32
+ const [writeResult, sqliteResult, dbIntegrityResult, dashboardResult, integrationResults] = await Promise.all([
33
+ checkWritePermissions(basePath),
34
+ checkSqliteDatabase(basePath),
35
+ checkDbIntegrity(basePath),
36
+ checkDashboardBuild(basePath),
37
+ checkIntegrations(basePath),
38
+ ]);
39
+ checks.push(writeResult);
40
+ checks.push(sqliteResult);
41
+ checks.push(dbIntegrityResult);
42
+ checks.push(dashboardResult);
43
+ checks.push(...integrationResults);
44
+ // 3. Store-dependent checks (only if DB exists)
45
+ const dbPath = path.join(basePath, STORE_DIR, DB_FILE);
46
+ if (existsSync(dbPath)) {
47
+ try {
48
+ const store = SqliteStore.open(basePath);
49
+ try {
50
+ checks.push(checkGraphInitialized(store));
51
+ }
52
+ finally {
53
+ store.close();
54
+ }
55
+ }
56
+ catch (err) {
57
+ checks.push({
58
+ name: "graph-initialized",
59
+ level: "warning",
60
+ message: `Could not open store: ${err instanceof Error ? err.message : String(err)}`,
61
+ suggestion: "Run 'mcp-graph init' to initialize the project",
62
+ });
63
+ }
64
+ }
65
+ const summary = buildSummary(checks);
66
+ return {
67
+ checks,
68
+ summary,
69
+ passed: summary.error === 0,
70
+ };
71
+ }
72
+ //# sourceMappingURL=doctor-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-runner.js","sourceRoot":"","sources":["../../../src/core/doctor/doctor-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Types for the `mcp-graph doctor` diagnostic command.
3
+ */
4
+ export type CheckLevel = "ok" | "warning" | "error";
5
+ export interface CheckResult {
6
+ name: string;
7
+ level: CheckLevel;
8
+ message: string;
9
+ suggestion?: string;
10
+ }
11
+ export interface DoctorReport {
12
+ checks: CheckResult[];
13
+ summary: {
14
+ ok: number;
15
+ warning: number;
16
+ error: number;
17
+ };
18
+ passed: boolean;
19
+ }
20
+ //# sourceMappingURL=doctor-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-types.d.ts","sourceRoot":"","sources":["../../../src/core/doctor/doctor-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,MAAM,EAAE,OAAO,CAAC;CACjB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for the `mcp-graph doctor` diagnostic command.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=doctor-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-types.js","sourceRoot":"","sources":["../../../src/core/doctor/doctor-types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,9 +1,15 @@
1
1
  import type { GraphDocument } from "../graph/graph-types.js";
2
2
  export type LifecyclePhase = "ANALYZE" | "DESIGN" | "PLAN" | "IMPLEMENT" | "VALIDATE" | "REVIEW" | "HANDOFF" | "LISTENING";
3
+ export interface McpAgentSuggestion {
4
+ name: string;
5
+ action: string;
6
+ tools?: string[];
7
+ }
3
8
  export interface PhaseGuidance {
4
9
  reminder: string;
5
10
  suggestedTools: string[];
6
11
  principles: string[];
12
+ suggestedMcpAgents?: McpAgentSuggestion[];
7
13
  }
8
14
  export interface PhaseDetectionOptions {
9
15
  hasSnapshots?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-phase.d.ts","sourceRoot":"","sources":["../../../src/core/planner/lifecycle-phase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,WAAW,GACX,UAAU,GACV,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAuDtG;AAiED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAErE;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,GACf,gBAAgB,EAAE,CA8CpB"}
1
+ {"version":3,"file":"lifecycle-phase.d.ts","sourceRoot":"","sources":["../../../src/core/planner/lifecycle-phase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,WAAW,GACX,UAAU,GACV,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAMD,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAuDtG;AAwFD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAErE;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,GACf,gBAAgB,EAAE,CA8CpB"}
@@ -84,31 +84,54 @@ const GUIDANCE = {
84
84
  reminder: "Fase DESIGN: Defina a arquitetura e tome decisões técnicas. Use análise de impacto antes de definir a estrutura.",
85
85
  suggestedTools: ["add_node", "edge", "decompose", "export"],
86
86
  principles: ["Skeleton & Organs", "Decisões arquiteturais documentadas", "Anti-one-shot"],
87
+ suggestedMcpAgents: [
88
+ { name: "serena", action: "Análise semântica de symbols para entender arquitetura existente", tools: ["find_symbol", "get_symbols_overview"] },
89
+ { name: "gitnexus", action: "Análise de impacto e blast radius da proposta arquitetural", tools: ["impact", "context"] },
90
+ ],
87
91
  },
88
92
  PLAN: {
89
93
  reminder: "Fase PLAN: Planeje o sprint, decomponha tasks grandes e sincronize documentação das libs.",
90
94
  suggestedTools: ["plan_sprint", "decompose", "sync_stack_docs", "edge", "dependencies"],
91
95
  principles: ["Decomposição atômica", "Sprint planning baseado em velocidade", "Dependências explícitas"],
96
+ suggestedMcpAgents: [
97
+ { name: "context7", action: "Consultar docs atualizadas das libs do stack", tools: ["resolve-library-id", "query-docs"] },
98
+ ],
92
99
  },
93
100
  IMPLEMENT: {
94
101
  reminder: "Fase IMPLEMENT: TDD obrigatório — Red → Green → Refactor. Escreva o teste ANTES da implementação. Use `context` para token-efficiency.",
95
102
  suggestedTools: ["next", "context", "update_status", "rag_context", "validate_task"],
96
103
  principles: ["TDD Red→Green→Refactor", "Anti-one-shot", "Code detachment", "Decomposição atômica"],
104
+ suggestedMcpAgents: [
105
+ { name: "serena", action: "Edição semântica de symbols e navegação por referências", tools: ["find_symbol", "replace_symbol_body", "find_referencing_symbols"] },
106
+ { name: "gitnexus", action: "Impact analysis antes de editar, detect_changes antes de commit", tools: ["impact", "detect_changes", "context"] },
107
+ { name: "context7", action: "Consultar API docs das libs em uso", tools: ["query-docs"] },
108
+ ],
97
109
  },
98
110
  VALIDATE: {
99
111
  reminder: "Fase VALIDATE: Valide tasks completadas com testes E2E (Playwright). Verifique critérios de aceitação.",
100
112
  suggestedTools: ["validate_task", "velocity", "stats", "list"],
101
113
  principles: ["Validação automatizada", "Critérios de aceitação como contrato", "Zero tolerance para regressões"],
114
+ suggestedMcpAgents: [
115
+ { name: "gitnexus", action: "Verificar escopo das mudanças com detect_changes", tools: ["detect_changes"] },
116
+ { name: "playwright", action: "Testes E2E no browser, screenshots e validação visual", tools: ["browser_navigate", "browser_snapshot", "browser_click"] },
117
+ ],
102
118
  },
103
119
  REVIEW: {
104
120
  reminder: "Fase REVIEW: Revise o código, verifique blast radius e garanta que nada quebrou. Exporte o grafo para revisão.",
105
121
  suggestedTools: ["export", "stats", "velocity", "dependencies"],
106
122
  principles: ["Code review obrigatório", "Blast radius check", "Non-regression rule"],
123
+ suggestedMcpAgents: [
124
+ { name: "serena", action: "Verificar callers e referências dos symbols modificados", tools: ["find_referencing_symbols"] },
125
+ { name: "gitnexus", action: "Blast radius final e verificação de escopo", tools: ["impact", "detect_changes"] },
126
+ ],
107
127
  },
108
128
  HANDOFF: {
109
129
  reminder: "Fase HANDOFF: Crie o PR, documente decisões e exporte o grafo. Prepare para entrega.",
110
130
  suggestedTools: ["export", "snapshot", "stats", "velocity"],
111
131
  principles: ["Documentação como entrega", "Grafo exportado", "Knowledge base atualizada"],
132
+ suggestedMcpAgents: [
133
+ { name: "gitnexus", action: "Scope check final antes do PR", tools: ["detect_changes"] },
134
+ ],
112
135
  },
113
136
  LISTENING: {
114
137
  reminder: "Fase LISTENING: Colete feedback e adicione novos nodes ao grafo. Inicie novo ciclo se necessário.",
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-phase.js","sourceRoot":"","sources":["../../../src/core/planner/lifecycle-phase.ts"],"names":[],"mappings":"AAkBA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACjI,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAChD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAOtE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAkB,EAAE,OAA+B;IACpF,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,aAAa,CAAC;IAC/B,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAEtB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7E,8EAA8E;IAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,kBAAkB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAE3D,IAAI,SAAS,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,2DAA2D;QAC3D,IAAI,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YAC1C,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kEAAkE;IAClE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACnE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qDAAqD;IACrD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IACtF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAC1B,KAA6B,EAC7B,SAAiC;IAEjC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC;QACrC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAEhC,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,YAAY,CAChE,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAA0C;IACtD,OAAO,EAAE;QACP,QAAQ,EAAE,8HAA8H;QACxI,cAAc,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC;QACpD,UAAU,EAAE,CAAC,4BAA4B,EAAE,mBAAmB,EAAE,iCAAiC,CAAC;KACnG;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,kHAAkH;QAC5H,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;QAC3D,UAAU,EAAE,CAAC,mBAAmB,EAAE,qCAAqC,EAAE,eAAe,CAAC;KAC1F;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,2FAA2F;QACrG,cAAc,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,CAAC;QACvF,UAAU,EAAE,CAAC,sBAAsB,EAAE,uCAAuC,EAAE,yBAAyB,CAAC;KACzG;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,wIAAwI;QAClJ,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,CAAC;QACpF,UAAU,EAAE,CAAC,wBAAwB,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;KACnG;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,wGAAwG;QAClH,cAAc,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;QAC9D,UAAU,EAAE,CAAC,wBAAwB,EAAE,sCAAsC,EAAE,gCAAgC,CAAC;KACjH;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,gHAAgH;QAC1H,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC;QAC/D,UAAU,EAAE,CAAC,yBAAyB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;KACrF;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,sFAAsF;QAChG,cAAc,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC;QAC3D,UAAU,EAAE,CAAC,2BAA2B,EAAE,iBAAiB,EAAE,2BAA2B,CAAC;KAC1F;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,mGAAmG;QAC7G,cAAc,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC5D,UAAU,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,+BAA+B,CAAC;KAC3F;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACpD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAkB,EAClB,KAAqB,EACrB,QAAgB;IAEhB,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEjC,oDAAoD;IACpD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,SAAS,QAAQ,iCAAiC,KAAK,gBAAgB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACpH,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;IACL,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,qFAAqF;YAC9F,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,kEAAkE;gBAC3E,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,KAAK,KAAK,WAAW,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QAC1D,MAAM,qBAAqB,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;QACtF,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,qFAAqF;gBAC9F,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"lifecycle-phase.js","sourceRoot":"","sources":["../../../src/core/planner/lifecycle-phase.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { SqliteStore } from "../core/store/sqlite-store.js";
3
3
  import type { GraphDocument } from "../core/graph/graph-types.js";
4
- import { type LifecyclePhase, type LifecycleWarning } from "../core/planner/lifecycle-phase.js";
4
+ import { type LifecyclePhase, type LifecycleWarning, type McpAgentSuggestion } from "../core/planner/lifecycle-phase.js";
5
5
  export interface LifecycleBlock {
6
6
  phase: LifecyclePhase;
7
7
  reminder: string;
8
8
  suggestedNext: string[];
9
9
  principles: string[];
10
10
  warnings: LifecycleWarning[];
11
+ suggestedMcpAgents?: McpAgentSuggestion[];
11
12
  }
12
13
  export interface LifecycleBlockOptions {
13
14
  toolName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-wrapper.d.ts","sourceRoot":"","sources":["../../src/mcp/lifecycle-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAwD,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtJ,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAiBvG;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAU1F;AAaD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA0ClF"}
1
+ {"version":3,"file":"lifecycle-wrapper.d.ts","sourceRoot":"","sources":["../../src/mcp/lifecycle-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAwD,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG/K,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAoBvG;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAU1F;AAaD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA0ClF"}
@@ -18,6 +18,9 @@ export function buildLifecycleBlock(doc, options) {
18
18
  suggestedNext: guidance.suggestedTools,
19
19
  principles: guidance.principles,
20
20
  warnings,
21
+ ...(guidance.suggestedMcpAgents && guidance.suggestedMcpAgents.length > 0
22
+ ? { suggestedMcpAgents: guidance.suggestedMcpAgents }
23
+ : {}),
21
24
  };
22
25
  }
23
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-wrapper.js","sourceRoot":"","sources":["../../src/mcp/lifecycle-wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle-wrapper.js","sourceRoot":"","sources":["../../src/mcp/lifecycle-wrapper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-graph-workflow/mcp-graph",
3
- "version": "5.0.5",
3
+ "version": "5.1.1",
4
4
  "description": "MCP local-first PRD to task graph — transforms text into executable structure",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",