@diegonogueiradev_/mcp-graph 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/context/compact-context.d.ts +51 -0
- package/dist/core/context/compact-context.d.ts.map +1 -0
- package/dist/core/context/compact-context.js +115 -0
- package/dist/core/context/compact-context.js.map +1 -0
- package/dist/core/context/rag-context.d.ts +36 -0
- package/dist/core/context/rag-context.d.ts.map +1 -0
- package/dist/core/context/rag-context.js +69 -0
- package/dist/core/context/rag-context.js.map +1 -0
- package/dist/core/context/token-estimator.d.ts +7 -0
- package/dist/core/context/token-estimator.d.ts.map +1 -0
- package/dist/core/context/token-estimator.js +9 -0
- package/dist/core/context/token-estimator.js.map +1 -0
- package/dist/core/graph/graph-indexes.d.ts +3 -0
- package/dist/core/graph/graph-indexes.d.ts.map +1 -0
- package/dist/core/graph/graph-indexes.js +28 -0
- package/dist/core/graph/graph-indexes.js.map +1 -0
- package/dist/core/graph/graph-types.d.ts +72 -0
- package/dist/core/graph/graph-types.d.ts.map +1 -0
- package/dist/core/graph/graph-types.js +2 -0
- package/dist/core/graph/graph-types.js.map +1 -0
- package/dist/core/importer/import-prd.d.ts +7 -0
- package/dist/core/importer/import-prd.d.ts.map +1 -0
- package/dist/core/importer/import-prd.js +7 -0
- package/dist/core/importer/import-prd.js.map +1 -0
- package/dist/core/importer/prd-to-graph.d.ts +18 -0
- package/dist/core/importer/prd-to-graph.d.ts.map +1 -0
- package/dist/core/importer/prd-to-graph.js +188 -0
- package/dist/core/importer/prd-to-graph.js.map +1 -0
- package/dist/core/parser/classify.d.ts +31 -0
- package/dist/core/parser/classify.d.ts.map +1 -0
- package/dist/core/parser/classify.js +128 -0
- package/dist/core/parser/classify.js.map +1 -0
- package/dist/core/parser/extract.d.ts +21 -0
- package/dist/core/parser/extract.d.ts.map +1 -0
- package/dist/core/parser/extract.js +66 -0
- package/dist/core/parser/extract.js.map +1 -0
- package/dist/core/parser/normalize.d.ts +9 -0
- package/dist/core/parser/normalize.d.ts.map +1 -0
- package/dist/core/parser/normalize.js +22 -0
- package/dist/core/parser/normalize.js.map +1 -0
- package/dist/core/parser/read-file.d.ts +7 -0
- package/dist/core/parser/read-file.d.ts.map +1 -0
- package/dist/core/parser/read-file.js +17 -0
- package/dist/core/parser/read-file.js.map +1 -0
- package/dist/core/parser/segment.d.ts +13 -0
- package/dist/core/parser/segment.d.ts.map +1 -0
- package/dist/core/parser/segment.js +53 -0
- package/dist/core/parser/segment.js.map +1 -0
- package/dist/core/planner/decompose.d.ts +25 -0
- package/dist/core/planner/decompose.d.ts.map +1 -0
- package/dist/core/planner/decompose.js +100 -0
- package/dist/core/planner/decompose.js.map +1 -0
- package/dist/core/planner/dependency-chain.d.ts +20 -0
- package/dist/core/planner/dependency-chain.d.ts.map +1 -0
- package/dist/core/planner/dependency-chain.js +163 -0
- package/dist/core/planner/dependency-chain.js.map +1 -0
- package/dist/core/planner/next-task.d.ts +16 -0
- package/dist/core/planner/next-task.d.ts.map +1 -0
- package/dist/core/planner/next-task.js +76 -0
- package/dist/core/planner/next-task.js.map +1 -0
- package/dist/core/planner/velocity.d.ts +38 -0
- package/dist/core/planner/velocity.d.ts.map +1 -0
- package/dist/core/planner/velocity.js +92 -0
- package/dist/core/planner/velocity.js.map +1 -0
- package/dist/core/search/fts-search.d.ts +16 -0
- package/dist/core/search/fts-search.d.ts.map +1 -0
- package/dist/core/search/fts-search.js +57 -0
- package/dist/core/search/fts-search.js.map +1 -0
- package/dist/core/search/tfidf.d.ts +32 -0
- package/dist/core/search/tfidf.d.ts.map +1 -0
- package/dist/core/search/tfidf.js +67 -0
- package/dist/core/search/tfidf.js.map +1 -0
- package/dist/core/search/tokenizer.d.ts +9 -0
- package/dist/core/search/tokenizer.d.ts.map +1 -0
- package/dist/core/search/tokenizer.js +37 -0
- package/dist/core/search/tokenizer.js.map +1 -0
- package/dist/core/store/migrations.d.ts +4 -0
- package/dist/core/store/migrations.d.ts.map +1 -0
- package/dist/core/store/migrations.js +137 -0
- package/dist/core/store/migrations.js.map +1 -0
- package/dist/core/store/sqlite-store.d.ts +68 -0
- package/dist/core/store/sqlite-store.d.ts.map +1 -0
- package/dist/core/store/sqlite-store.js +608 -0
- package/dist/core/store/sqlite-store.js.map +1 -0
- package/dist/core/utils/errors.d.ts +20 -0
- package/dist/core/utils/errors.d.ts.map +1 -0
- package/dist/core/utils/errors.js +39 -0
- package/dist/core/utils/errors.js.map +1 -0
- package/dist/core/utils/fs.d.ts +2 -0
- package/dist/core/utils/fs.d.ts.map +1 -0
- package/dist/core/utils/fs.js +11 -0
- package/dist/core/utils/fs.js.map +1 -0
- package/dist/core/utils/id.d.ts +2 -0
- package/dist/core/utils/id.d.ts.map +1 -0
- package/dist/core/utils/id.js +6 -0
- package/dist/core/utils/id.js.map +1 -0
- package/dist/core/utils/logger.d.ts +7 -0
- package/dist/core/utils/logger.d.ts.map +1 -0
- package/dist/core/utils/logger.js +23 -0
- package/dist/core/utils/logger.js.map +1 -0
- package/dist/core/utils/time.d.ts +2 -0
- package/dist/core/utils/time.d.ts.map +1 -0
- package/dist/core/utils/time.js +4 -0
- package/dist/core/utils/time.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/init-project.d.ts +2 -0
- package/dist/mcp/init-project.d.ts.map +1 -0
- package/dist/mcp/init-project.js +104 -0
- package/dist/mcp/init-project.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +30 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +3 -0
- package/dist/mcp/stdio.d.ts.map +1 -0
- package/dist/mcp/stdio.js +20 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/mcp/tools/add-edge.d.ts +4 -0
- package/dist/mcp/tools/add-edge.d.ts.map +1 -0
- package/dist/mcp/tools/add-edge.js +62 -0
- package/dist/mcp/tools/add-edge.js.map +1 -0
- package/dist/mcp/tools/add-node.d.ts +4 -0
- package/dist/mcp/tools/add-node.d.ts.map +1 -0
- package/dist/mcp/tools/add-node.js +80 -0
- package/dist/mcp/tools/add-node.js.map +1 -0
- package/dist/mcp/tools/bulk-update-status.d.ts +4 -0
- package/dist/mcp/tools/bulk-update-status.d.ts.map +1 -0
- package/dist/mcp/tools/bulk-update-status.js +19 -0
- package/dist/mcp/tools/bulk-update-status.js.map +1 -0
- package/dist/mcp/tools/clone-node.d.ts +4 -0
- package/dist/mcp/tools/clone-node.d.ts.map +1 -0
- package/dist/mcp/tools/clone-node.js +107 -0
- package/dist/mcp/tools/clone-node.js.map +1 -0
- package/dist/mcp/tools/context.d.ts +4 -0
- package/dist/mcp/tools/context.d.ts.map +1 -0
- package/dist/mcp/tools/context.js +26 -0
- package/dist/mcp/tools/context.js.map +1 -0
- package/dist/mcp/tools/decompose.d.ts +4 -0
- package/dist/mcp/tools/decompose.d.ts.map +1 -0
- package/dist/mcp/tools/decompose.js +22 -0
- package/dist/mcp/tools/decompose.js.map +1 -0
- package/dist/mcp/tools/delete-edge.d.ts +4 -0
- package/dist/mcp/tools/delete-edge.d.ts.map +1 -0
- package/dist/mcp/tools/delete-edge.js +25 -0
- package/dist/mcp/tools/delete-edge.js.map +1 -0
- package/dist/mcp/tools/delete-node.d.ts +4 -0
- package/dist/mcp/tools/delete-node.d.ts.map +1 -0
- package/dist/mcp/tools/delete-node.js +25 -0
- package/dist/mcp/tools/delete-node.js.map +1 -0
- package/dist/mcp/tools/dependencies.d.ts +4 -0
- package/dist/mcp/tools/dependencies.d.ts.map +1 -0
- package/dist/mcp/tools/dependencies.js +42 -0
- package/dist/mcp/tools/dependencies.js.map +1 -0
- package/dist/mcp/tools/export-graph.d.ts +4 -0
- package/dist/mcp/tools/export-graph.d.ts.map +1 -0
- package/dist/mcp/tools/export-graph.js +14 -0
- package/dist/mcp/tools/export-graph.js.map +1 -0
- package/dist/mcp/tools/import-prd.d.ts +4 -0
- package/dist/mcp/tools/import-prd.d.ts.map +1 -0
- package/dist/mcp/tools/import-prd.js +72 -0
- package/dist/mcp/tools/import-prd.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +4 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +53 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/init.d.ts +4 -0
- package/dist/mcp/tools/init.d.ts.map +1 -0
- package/dist/mcp/tools/init.js +15 -0
- package/dist/mcp/tools/init.js.map +1 -0
- package/dist/mcp/tools/list-edges.d.ts +4 -0
- package/dist/mcp/tools/list-edges.d.ts.map +1 -0
- package/dist/mcp/tools/list-edges.js +49 -0
- package/dist/mcp/tools/list-edges.js.map +1 -0
- package/dist/mcp/tools/list.d.ts +4 -0
- package/dist/mcp/tools/list.d.ts.map +1 -0
- package/dist/mcp/tools/list.js +53 -0
- package/dist/mcp/tools/list.js.map +1 -0
- package/dist/mcp/tools/move-node.d.ts +4 -0
- package/dist/mcp/tools/move-node.d.ts.map +1 -0
- package/dist/mcp/tools/move-node.js +107 -0
- package/dist/mcp/tools/move-node.js.map +1 -0
- package/dist/mcp/tools/next.d.ts +4 -0
- package/dist/mcp/tools/next.d.ts.map +1 -0
- package/dist/mcp/tools/next.js +28 -0
- package/dist/mcp/tools/next.js.map +1 -0
- package/dist/mcp/tools/rag-context.d.ts +4 -0
- package/dist/mcp/tools/rag-context.d.ts.map +1 -0
- package/dist/mcp/tools/rag-context.js +25 -0
- package/dist/mcp/tools/rag-context.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +4 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +38 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/show.d.ts +4 -0
- package/dist/mcp/tools/show.d.ts.map +1 -0
- package/dist/mcp/tools/show.js +38 -0
- package/dist/mcp/tools/show.js.map +1 -0
- package/dist/mcp/tools/snapshot.d.ts +6 -0
- package/dist/mcp/tools/snapshot.d.ts.map +1 -0
- package/dist/mcp/tools/snapshot.js +43 -0
- package/dist/mcp/tools/snapshot.js.map +1 -0
- package/dist/mcp/tools/stats.d.ts +4 -0
- package/dist/mcp/tools/stats.d.ts.map +1 -0
- package/dist/mcp/tools/stats.js +43 -0
- package/dist/mcp/tools/stats.js.map +1 -0
- package/dist/mcp/tools/update-node.d.ts +4 -0
- package/dist/mcp/tools/update-node.d.ts.map +1 -0
- package/dist/mcp/tools/update-node.js +41 -0
- package/dist/mcp/tools/update-node.js.map +1 -0
- package/dist/mcp/tools/update-status.d.ts +4 -0
- package/dist/mcp/tools/update-status.d.ts.map +1 -0
- package/dist/mcp/tools/update-status.js +29 -0
- package/dist/mcp/tools/update-status.js.map +1 -0
- package/dist/mcp/tools/velocity.d.ts +4 -0
- package/dist/mcp/tools/velocity.d.ts.map +1 -0
- package/dist/mcp/tools/velocity.js +22 -0
- package/dist/mcp/tools/velocity.js.map +1 -0
- package/dist/schemas/edge.schema.d.ts +31 -0
- package/dist/schemas/edge.schema.d.ts.map +1 -0
- package/dist/schemas/edge.schema.js +16 -0
- package/dist/schemas/edge.schema.js.map +1 -0
- package/dist/schemas/graph.schema.d.ts +102 -0
- package/dist/schemas/graph.schema.d.ts.map +1 -0
- package/dist/schemas/graph.schema.js +28 -0
- package/dist/schemas/graph.schema.js.map +1 -0
- package/dist/schemas/node.schema.d.ts +80 -0
- package/dist/schemas/node.schema.d.ts.map +1 -0
- package/dist/schemas/node.schema.js +38 -0
- package/dist/schemas/node.schema.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { NodeNotFoundError } from "../../core/utils/errors.js";
|
|
3
|
+
import { generateId } from "../../core/utils/id.js";
|
|
4
|
+
import { now } from "../../core/utils/time.js";
|
|
5
|
+
function cloneSingle(store, source, parentId, timestamp) {
|
|
6
|
+
const clone = {
|
|
7
|
+
id: generateId("node"),
|
|
8
|
+
type: source.type,
|
|
9
|
+
title: source.title,
|
|
10
|
+
description: source.description,
|
|
11
|
+
status: "backlog",
|
|
12
|
+
priority: source.priority,
|
|
13
|
+
xpSize: source.xpSize,
|
|
14
|
+
estimateMinutes: source.estimateMinutes,
|
|
15
|
+
tags: source.tags ? [...source.tags] : undefined,
|
|
16
|
+
parentId: parentId,
|
|
17
|
+
sprint: source.sprint,
|
|
18
|
+
acceptanceCriteria: source.acceptanceCriteria ? [...source.acceptanceCriteria] : undefined,
|
|
19
|
+
blocked: false,
|
|
20
|
+
metadata: source.metadata ? { ...source.metadata } : undefined,
|
|
21
|
+
createdAt: timestamp,
|
|
22
|
+
updatedAt: timestamp,
|
|
23
|
+
};
|
|
24
|
+
store.insertNode(clone);
|
|
25
|
+
if (parentId) {
|
|
26
|
+
store.insertEdge({
|
|
27
|
+
id: generateId("edge"),
|
|
28
|
+
from: parentId,
|
|
29
|
+
to: clone.id,
|
|
30
|
+
relationType: "parent_of",
|
|
31
|
+
createdAt: timestamp,
|
|
32
|
+
});
|
|
33
|
+
store.insertEdge({
|
|
34
|
+
id: generateId("edge"),
|
|
35
|
+
from: clone.id,
|
|
36
|
+
to: parentId,
|
|
37
|
+
relationType: "child_of",
|
|
38
|
+
createdAt: timestamp,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return clone;
|
|
42
|
+
}
|
|
43
|
+
function cloneDeep(store, sourceId, parentId, timestamp, cloned) {
|
|
44
|
+
const source = store.getNodeById(sourceId);
|
|
45
|
+
if (!source)
|
|
46
|
+
return;
|
|
47
|
+
const clone = cloneSingle(store, source, parentId, timestamp);
|
|
48
|
+
cloned.push(clone);
|
|
49
|
+
const children = store.getChildNodes(sourceId);
|
|
50
|
+
for (const child of children) {
|
|
51
|
+
cloneDeep(store, child.id, clone.id, timestamp, cloned);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function registerCloneNode(server, store) {
|
|
55
|
+
server.tool("clone_node", "Clone a node (optionally with all children)", {
|
|
56
|
+
id: z.string().describe("The node ID to clone"),
|
|
57
|
+
deep: z.boolean().optional().describe("Clone children recursively (default: false)"),
|
|
58
|
+
newParentId: z.string().optional().describe("Parent ID for the cloned node"),
|
|
59
|
+
}, async ({ id, deep, newParentId }) => {
|
|
60
|
+
const source = store.getNodeById(id);
|
|
61
|
+
if (!source) {
|
|
62
|
+
const err = new NodeNotFoundError(id);
|
|
63
|
+
return {
|
|
64
|
+
content: [
|
|
65
|
+
{ type: "text", text: JSON.stringify({ error: err.message }) },
|
|
66
|
+
],
|
|
67
|
+
isError: true,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (newParentId) {
|
|
71
|
+
const parent = store.getNodeById(newParentId);
|
|
72
|
+
if (!parent) {
|
|
73
|
+
const err = new NodeNotFoundError(newParentId);
|
|
74
|
+
return {
|
|
75
|
+
content: [
|
|
76
|
+
{ type: "text", text: JSON.stringify({ error: `Parent not found: ${err.message}` }) },
|
|
77
|
+
],
|
|
78
|
+
isError: true,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const timestamp = now();
|
|
83
|
+
const parentForClone = newParentId ?? source.parentId;
|
|
84
|
+
if (deep) {
|
|
85
|
+
const cloned = [];
|
|
86
|
+
cloneDeep(store, id, parentForClone, timestamp, cloned);
|
|
87
|
+
return {
|
|
88
|
+
content: [
|
|
89
|
+
{
|
|
90
|
+
type: "text",
|
|
91
|
+
text: JSON.stringify({ ok: true, clonedCount: cloned.length, nodes: cloned }, null, 2),
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const clone = cloneSingle(store, source, parentForClone, timestamp);
|
|
97
|
+
return {
|
|
98
|
+
content: [
|
|
99
|
+
{
|
|
100
|
+
type: "text",
|
|
101
|
+
text: JSON.stringify({ ok: true, node: clone }, null, 2),
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=clone-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-node.js","sourceRoot":"","sources":["../../../src/mcp/tools/clone-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAIpE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA4B3E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { buildTaskContext } from "../../core/context/compact-context.js";
|
|
3
|
+
import { NodeNotFoundError } from "../../core/utils/errors.js";
|
|
4
|
+
export function registerContext(server, store) {
|
|
5
|
+
server.tool("context", "Get a compact, AI-optimized context payload for a specific task (includes parent, children, blockers, dependencies, acceptance criteria, source references, and token reduction metrics)", { id: z.string().describe("The node ID to build context for") }, async ({ id }) => {
|
|
6
|
+
const ctx = buildTaskContext(store, id);
|
|
7
|
+
if (!ctx) {
|
|
8
|
+
const err = new NodeNotFoundError(id);
|
|
9
|
+
return {
|
|
10
|
+
content: [
|
|
11
|
+
{ type: "text", text: JSON.stringify({ error: err.message }) },
|
|
12
|
+
],
|
|
13
|
+
isError: true,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
content: [
|
|
18
|
+
{
|
|
19
|
+
type: "text",
|
|
20
|
+
text: JSON.stringify(ctx, null, 2),
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/mcp/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,KAAkB;IACnE,MAAM,CAAC,IAAI,CACT,SAAS,EACT,0LAA0L,EAC1L,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,EAC/D,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE;iBACxE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
|
+
export declare function registerDecompose(server: McpServer, store: SqliteStore): void;
|
|
4
|
+
//# sourceMappingURL=decompose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompose.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/decompose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAyB7E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { detectLargeTasks } from "../../core/planner/decompose.js";
|
|
3
|
+
export function registerDecompose(server, store) {
|
|
4
|
+
server.tool("decompose", "Detect large tasks that should be decomposed into subtasks", {
|
|
5
|
+
nodeId: z.string().optional().describe("Filter results to a specific node ID"),
|
|
6
|
+
}, async ({ nodeId }) => {
|
|
7
|
+
const doc = store.toGraphDocument();
|
|
8
|
+
let results = detectLargeTasks(doc);
|
|
9
|
+
if (nodeId) {
|
|
10
|
+
results = results.filter((r) => r.node.id === nodeId);
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
content: [
|
|
14
|
+
{
|
|
15
|
+
type: "text",
|
|
16
|
+
text: JSON.stringify({ ok: true, results }, null, 2),
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=decompose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompose.js","sourceRoot":"","sources":["../../../src/mcp/tools/decompose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAAkB;IACrE,MAAM,CAAC,IAAI,CACT,WAAW,EACX,4DAA4D,EAC5D;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KAC/E,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACxD,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACrD;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
|
+
export declare function registerDeleteEdge(server: McpServer, store: SqliteStore): void;
|
|
4
|
+
//# sourceMappingURL=delete-edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-edge.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/delete-edge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA6B9E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
export function registerDeleteEdge(server, store) {
|
|
3
|
+
server.tool("delete_edge", "Delete an edge (relationship) from the graph", {
|
|
4
|
+
id: z.string().describe("The edge ID to delete"),
|
|
5
|
+
}, async ({ id }) => {
|
|
6
|
+
const deleted = store.deleteEdge(id);
|
|
7
|
+
if (!deleted) {
|
|
8
|
+
return {
|
|
9
|
+
content: [
|
|
10
|
+
{ type: "text", text: JSON.stringify({ error: `Edge not found: ${id}` }) },
|
|
11
|
+
],
|
|
12
|
+
isError: true,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: "text",
|
|
19
|
+
text: JSON.stringify({ ok: true, deletedId: id }, null, 2),
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=delete-edge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-edge.js","sourceRoot":"","sources":["../../../src/mcp/tools/delete-edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,KAAkB;IACtE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,8CAA8C,EAC9C;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,EAAE;iBACpF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC3D;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
|
+
export declare function registerDeleteNode(server: McpServer, store: SqliteStore): void;
|
|
4
|
+
//# sourceMappingURL=delete-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-node.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/delete-node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA4B9E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { NodeNotFoundError } from "../../core/utils/errors.js";
|
|
3
|
+
export function registerDeleteNode(server, store) {
|
|
4
|
+
server.tool("delete_node", "Delete a node and all its associated edges from the graph", { id: z.string().describe("The node ID to delete") }, async ({ id }) => {
|
|
5
|
+
const deleted = store.deleteNode(id);
|
|
6
|
+
if (!deleted) {
|
|
7
|
+
const err = new NodeNotFoundError(id);
|
|
8
|
+
return {
|
|
9
|
+
content: [
|
|
10
|
+
{ type: "text", text: JSON.stringify({ error: err.message }) },
|
|
11
|
+
],
|
|
12
|
+
isError: true,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: "text",
|
|
19
|
+
text: JSON.stringify({ ok: true, deletedId: id }, null, 2),
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=delete-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-node.js","sourceRoot":"","sources":["../../../src/mcp/tools/delete-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,KAAkB;IACtE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2DAA2D,EAC3D,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EACpD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE;iBACxE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC3D;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
|
+
export declare function registerDependencies(server: McpServer, store: SqliteStore): void;
|
|
4
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA8ChF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { findTransitiveBlockers, detectCycles, findCriticalPath, } from "../../core/planner/dependency-chain.js";
|
|
3
|
+
export function registerDependencies(server, store) {
|
|
4
|
+
server.tool("dependencies", "Analyze dependency chains: find blockers for a node, detect cycles, or compute critical path", {
|
|
5
|
+
mode: z.enum(["blockers", "cycles", "critical_path"]).describe("Analysis mode"),
|
|
6
|
+
nodeId: z.string().optional().describe("Node ID (required for 'blockers' mode)"),
|
|
7
|
+
}, async ({ mode, nodeId }) => {
|
|
8
|
+
const doc = store.toGraphDocument();
|
|
9
|
+
if (mode === "blockers") {
|
|
10
|
+
if (!nodeId) {
|
|
11
|
+
return {
|
|
12
|
+
content: [
|
|
13
|
+
{ type: "text", text: JSON.stringify({ error: "nodeId is required for 'blockers' mode" }) },
|
|
14
|
+
],
|
|
15
|
+
isError: true,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const blockers = findTransitiveBlockers(doc, nodeId);
|
|
19
|
+
return {
|
|
20
|
+
content: [
|
|
21
|
+
{ type: "text", text: JSON.stringify({ ok: true, nodeId, blockers }, null, 2) },
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (mode === "cycles") {
|
|
26
|
+
const cycles = detectCycles(doc);
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{ type: "text", text: JSON.stringify({ ok: true, cycles }, null, 2) },
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// critical_path
|
|
34
|
+
const path = findCriticalPath(doc);
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{ type: "text", text: JSON.stringify({ ok: true, criticalPath: path }, null, 2) },
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/mcp/tools/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,GACjB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAAkB;IACxE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,8FAA8F,EAC9F;QACE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC/E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QAEpC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,EAAE;qBACrG;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBACzF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBAC/E;aACF,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC3F;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
|
+
export declare function registerExportGraph(server: McpServer, store: SqliteStore): void;
|
|
4
|
+
//# sourceMappingURL=export-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-graph.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/export-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAkB/E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function registerExportGraph(server, store) {
|
|
2
|
+
server.tool("export_graph", "Export the complete graph as a JSON document", {}, async () => {
|
|
3
|
+
const doc = store.toGraphDocument();
|
|
4
|
+
return {
|
|
5
|
+
content: [
|
|
6
|
+
{
|
|
7
|
+
type: "text",
|
|
8
|
+
text: JSON.stringify(doc, null, 2),
|
|
9
|
+
},
|
|
10
|
+
],
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=export-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-graph.js","sourceRoot":"","sources":["../../../src/mcp/tools/export-graph.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,KAAkB;IACvE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,8CAA8C,EAC9C,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QAEpC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
|
+
export declare function registerImportPrd(server: McpServer, store: SqliteStore): void;
|
|
4
|
+
//# sourceMappingURL=import-prd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-prd.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/import-prd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAsF7E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { z } from "zod/v4";
|
|
3
|
+
import { readPrdFile } from "../../core/parser/read-file.js";
|
|
4
|
+
import { extractEntities } from "../../core/parser/extract.js";
|
|
5
|
+
import { convertToGraph } from "../../core/importer/prd-to-graph.js";
|
|
6
|
+
export function registerImportPrd(server, store) {
|
|
7
|
+
server.tool("import_prd", "Import a PRD file and convert it into graph nodes and edges. Use force=true to re-import a previously imported file (replaces old nodes).", {
|
|
8
|
+
filePath: z.string().describe("Path to the PRD text file"),
|
|
9
|
+
force: z
|
|
10
|
+
.boolean()
|
|
11
|
+
.optional()
|
|
12
|
+
.default(false)
|
|
13
|
+
.describe("Force re-import: delete nodes from previous import of this file before importing"),
|
|
14
|
+
}, async ({ filePath, force }) => {
|
|
15
|
+
// 1. Read and parse
|
|
16
|
+
const { content, absolutePath, sizeBytes } = await readPrdFile(filePath);
|
|
17
|
+
const sourceFileName = path.basename(absolutePath);
|
|
18
|
+
// 2. Check for previous import
|
|
19
|
+
const alreadyImported = store.hasImport(sourceFileName);
|
|
20
|
+
if (alreadyImported && !force) {
|
|
21
|
+
return {
|
|
22
|
+
content: [
|
|
23
|
+
{
|
|
24
|
+
type: "text",
|
|
25
|
+
text: JSON.stringify({
|
|
26
|
+
ok: false,
|
|
27
|
+
error: `File "${sourceFileName}" was already imported. Use force=true to re-import (this will replace all nodes from the previous import).`,
|
|
28
|
+
sourceFile: sourceFileName,
|
|
29
|
+
}, null, 2),
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
isError: true,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// 3. If force re-import, clear previous nodes
|
|
36
|
+
let cleared = null;
|
|
37
|
+
if (alreadyImported && force) {
|
|
38
|
+
cleared = store.clearImportedNodes(sourceFileName);
|
|
39
|
+
}
|
|
40
|
+
// 4. Extract entities
|
|
41
|
+
const extraction = extractEntities(content);
|
|
42
|
+
// 5. Convert to graph
|
|
43
|
+
const { nodes, edges, stats } = convertToGraph(extraction, sourceFileName);
|
|
44
|
+
// 6. Bulk insert into SQLite (atomic)
|
|
45
|
+
store.bulkInsert(nodes, edges);
|
|
46
|
+
// 7. Record import
|
|
47
|
+
store.recordImport(sourceFileName, stats.nodesCreated, stats.edgesCreated);
|
|
48
|
+
// 8. Snapshot after import
|
|
49
|
+
store.createSnapshot();
|
|
50
|
+
return {
|
|
51
|
+
content: [
|
|
52
|
+
{
|
|
53
|
+
type: "text",
|
|
54
|
+
text: JSON.stringify({
|
|
55
|
+
ok: true,
|
|
56
|
+
sourceFile: sourceFileName,
|
|
57
|
+
originalSizeChars: sizeBytes,
|
|
58
|
+
...stats,
|
|
59
|
+
...(cleared
|
|
60
|
+
? {
|
|
61
|
+
reimported: true,
|
|
62
|
+
previousNodesDeleted: cleared.nodesDeleted,
|
|
63
|
+
previousEdgesDeleted: cleared.edgesDeleted,
|
|
64
|
+
}
|
|
65
|
+
: {}),
|
|
66
|
+
}, null, 2),
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=import-prd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-prd.js","sourceRoot":"","sources":["../../../src/mcp/tools/import-prd.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAAkB;IACrE,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,2IAA2I,EAC3I;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC1D,KAAK,EAAE,CAAC;aACL,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,kFAAkF,CAAC;KAChG,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5B,oBAAoB;QACpB,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEnD,+BAA+B;QAC/B,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,EAAE,EAAE,KAAK;4BACT,KAAK,EAAE,SAAS,cAAc,6GAA6G;4BAC3I,UAAU,EAAE,cAAc;yBAC3B,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,GAA0D,IAAI,CAAC;QAC1E,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;YAC7B,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACrD,CAAC;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAE5C,sBAAsB;QACtB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAE3E,sCAAsC;QACtC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE/B,mBAAmB;QACnB,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAE3E,2BAA2B;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,EAAE,EAAE,IAAI;wBACR,UAAU,EAAE,cAAc;wBAC1B,iBAAiB,EAAE,SAAS;wBAC5B,GAAG,KAAK;wBACR,GAAG,CAAC,OAAO;4BACT,CAAC,CAAC;gCACE,UAAU,EAAE,IAAI;gCAChB,oBAAoB,EAAE,OAAO,CAAC,YAAY;gCAC1C,oBAAoB,EAAE,OAAO,CAAC,YAAY;6BAC3C;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AA0BpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA2B5E"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { registerInit } from "./init.js";
|
|
2
|
+
import { registerImportPrd } from "./import-prd.js";
|
|
3
|
+
import { registerList } from "./list.js";
|
|
4
|
+
import { registerShow } from "./show.js";
|
|
5
|
+
import { registerNext } from "./next.js";
|
|
6
|
+
import { registerUpdateStatus } from "./update-status.js";
|
|
7
|
+
import { registerStats } from "./stats.js";
|
|
8
|
+
import { registerContext } from "./context.js";
|
|
9
|
+
import { registerUpdateNode } from "./update-node.js";
|
|
10
|
+
import { registerDeleteNode } from "./delete-node.js";
|
|
11
|
+
import { registerSearch } from "./search.js";
|
|
12
|
+
import { registerRagContext } from "./rag-context.js";
|
|
13
|
+
import { registerDecompose } from "./decompose.js";
|
|
14
|
+
import { registerVelocity } from "./velocity.js";
|
|
15
|
+
import { registerAddEdge } from "./add-edge.js";
|
|
16
|
+
import { registerDependencies } from "./dependencies.js";
|
|
17
|
+
import { registerBulkUpdateStatus } from "./bulk-update-status.js";
|
|
18
|
+
import { registerCreateSnapshot, registerRestoreSnapshot, registerListSnapshots } from "./snapshot.js";
|
|
19
|
+
import { registerAddNode } from "./add-node.js";
|
|
20
|
+
import { registerDeleteEdge } from "./delete-edge.js";
|
|
21
|
+
import { registerListEdges } from "./list-edges.js";
|
|
22
|
+
import { registerExportGraph } from "./export-graph.js";
|
|
23
|
+
import { registerMoveNode } from "./move-node.js";
|
|
24
|
+
import { registerCloneNode } from "./clone-node.js";
|
|
25
|
+
export function registerAllTools(server, store) {
|
|
26
|
+
registerInit(server, store);
|
|
27
|
+
registerImportPrd(server, store);
|
|
28
|
+
registerList(server, store);
|
|
29
|
+
registerShow(server, store);
|
|
30
|
+
registerNext(server, store);
|
|
31
|
+
registerUpdateStatus(server, store);
|
|
32
|
+
registerStats(server, store);
|
|
33
|
+
registerContext(server, store);
|
|
34
|
+
registerUpdateNode(server, store);
|
|
35
|
+
registerDeleteNode(server, store);
|
|
36
|
+
registerSearch(server, store);
|
|
37
|
+
registerRagContext(server, store);
|
|
38
|
+
registerDecompose(server, store);
|
|
39
|
+
registerVelocity(server, store);
|
|
40
|
+
registerAddEdge(server, store);
|
|
41
|
+
registerDependencies(server, store);
|
|
42
|
+
registerBulkUpdateStatus(server, store);
|
|
43
|
+
registerCreateSnapshot(server, store);
|
|
44
|
+
registerRestoreSnapshot(server, store);
|
|
45
|
+
registerListSnapshots(server, store);
|
|
46
|
+
registerAddNode(server, store);
|
|
47
|
+
registerDeleteEdge(server, store);
|
|
48
|
+
registerListEdges(server, store);
|
|
49
|
+
registerExportGraph(server, store);
|
|
50
|
+
registerMoveNode(server, store);
|
|
51
|
+
registerCloneNode(server, store);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAqBxE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
export function registerInit(server, store) {
|
|
3
|
+
server.tool("init", "Initialize a new project graph", { projectName: z.string().optional().describe("Name for the project") }, async ({ projectName }) => {
|
|
4
|
+
const project = store.initProject(projectName || undefined);
|
|
5
|
+
return {
|
|
6
|
+
content: [
|
|
7
|
+
{
|
|
8
|
+
type: "text",
|
|
9
|
+
text: JSON.stringify({ ok: true, project }, null, 2),
|
|
10
|
+
},
|
|
11
|
+
],
|
|
12
|
+
};
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/mcp/tools/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,UAAU,YAAY,CAAC,MAAiB,EAAE,KAAkB;IAChE,MAAM,CAAC,IAAI,CACT,MAAM,EACN,gCAAgC,EAChC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EACvE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EACrB,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
|
+
export declare function registerListEdges(server: McpServer, store: SqliteStore): void;
|
|
4
|
+
//# sourceMappingURL=list-edges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-edges.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-edges.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAkD7E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { RelationTypeSchema } from "../../schemas/edge.schema.js";
|
|
3
|
+
import { NodeNotFoundError } from "../../core/utils/errors.js";
|
|
4
|
+
export function registerListEdges(server, store) {
|
|
5
|
+
server.tool("list_edges", "List and filter edges in the graph", {
|
|
6
|
+
nodeId: z.string().optional().describe("Filter edges by node ID"),
|
|
7
|
+
direction: z.enum(["from", "to", "both"]).optional().describe("Edge direction relative to nodeId (default: both)"),
|
|
8
|
+
relationType: RelationTypeSchema.optional().describe("Filter by relationship type"),
|
|
9
|
+
}, async ({ nodeId, direction, relationType }) => {
|
|
10
|
+
let edges;
|
|
11
|
+
if (nodeId) {
|
|
12
|
+
const node = store.getNodeById(nodeId);
|
|
13
|
+
if (!node) {
|
|
14
|
+
const err = new NodeNotFoundError(nodeId);
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{ type: "text", text: JSON.stringify({ error: err.message }) },
|
|
18
|
+
],
|
|
19
|
+
isError: true,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const dir = direction ?? "both";
|
|
23
|
+
if (dir === "from") {
|
|
24
|
+
edges = store.getEdgesFrom(nodeId);
|
|
25
|
+
}
|
|
26
|
+
else if (dir === "to") {
|
|
27
|
+
edges = store.getEdgesTo(nodeId);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
edges = [...store.getEdgesFrom(nodeId), ...store.getEdgesTo(nodeId)];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
edges = store.getAllEdges();
|
|
35
|
+
}
|
|
36
|
+
if (relationType) {
|
|
37
|
+
edges = edges.filter((e) => e.relationType === relationType);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: "text",
|
|
43
|
+
text: JSON.stringify({ total: edges.length, edges }, null, 2),
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=list-edges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-edges.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-edges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAAkB;IACrE,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,oCAAoC,EACpC;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACjE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAClH,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACpF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE;QAC5C,IAAI,KAAkB,CAAC;QAEvB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC1C,OAAO;oBACL,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE;qBACxE;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,IAAI,MAAM,CAAC;YAChC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACnB,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACxB,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAM,YAA6B,CAAC,CAAC;QACjF,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC9D;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|