@roarpeng/graphflow 1.3.0 → 1.3.2

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 (52) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1 -1
  3. package/dist/config/discover-workspace.d.ts +2 -0
  4. package/dist/config/discover-workspace.d.ts.map +1 -1
  5. package/dist/config/discover-workspace.js +46 -1
  6. package/dist/config/discover-workspace.js.map +1 -1
  7. package/dist/config/scaffold.d.ts +2 -1
  8. package/dist/config/scaffold.d.ts.map +1 -1
  9. package/dist/config/scaffold.js +36 -12
  10. package/dist/config/scaffold.js.map +1 -1
  11. package/dist/graph/file-indexer.d.ts.map +1 -1
  12. package/dist/graph/file-indexer.js +12 -5
  13. package/dist/graph/file-indexer.js.map +1 -1
  14. package/dist/graph/file-watcher.d.ts +29 -0
  15. package/dist/graph/file-watcher.d.ts.map +1 -0
  16. package/dist/graph/file-watcher.js +204 -0
  17. package/dist/graph/file-watcher.js.map +1 -0
  18. package/dist/graph/framework-routes.d.ts +15 -0
  19. package/dist/graph/framework-routes.d.ts.map +1 -0
  20. package/dist/graph/framework-routes.js +187 -0
  21. package/dist/graph/framework-routes.js.map +1 -0
  22. package/dist/graph/graph-analysis.d.ts +99 -0
  23. package/dist/graph/graph-analysis.d.ts.map +1 -0
  24. package/dist/graph/graph-analysis.js +286 -0
  25. package/dist/graph/graph-analysis.js.map +1 -0
  26. package/dist/graph/graph-search.d.ts +52 -0
  27. package/dist/graph/graph-search.d.ts.map +1 -0
  28. package/dist/graph/graph-search.js +132 -0
  29. package/dist/graph/graph-search.js.map +1 -0
  30. package/dist/graph/graphify-file-client.js +1 -1
  31. package/dist/graph/graphify-file-client.js.map +1 -1
  32. package/dist/graph/language-indexers/tree-sitter-loader.js +4 -4
  33. package/dist/graph/language-indexers/tree-sitter-loader.js.map +1 -1
  34. package/dist/integrations/agent-mcp-installer.d.ts +18 -0
  35. package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
  36. package/dist/integrations/agent-mcp-installer.js +238 -9
  37. package/dist/integrations/agent-mcp-installer.js.map +1 -1
  38. package/dist/integrations/skill-installer.d.ts +43 -3
  39. package/dist/integrations/skill-installer.d.ts.map +1 -1
  40. package/dist/integrations/skill-installer.js +294 -23
  41. package/dist/integrations/skill-installer.js.map +1 -1
  42. package/dist/surfaces/cli/init.d.ts.map +1 -1
  43. package/dist/surfaces/cli/init.js +58 -32
  44. package/dist/surfaces/cli/init.js.map +1 -1
  45. package/dist/surfaces/mcp/tool-definitions.d.ts.map +1 -1
  46. package/dist/surfaces/mcp/tool-definitions.js +18 -7
  47. package/dist/surfaces/mcp/tool-definitions.js.map +1 -1
  48. package/dist/surfaces/mcp/tool-handlers.d.ts.map +1 -1
  49. package/dist/surfaces/mcp/tool-handlers.js +102 -0
  50. package/dist/surfaces/mcp/tool-handlers.js.map +1 -1
  51. package/package.json +1 -1
  52. package/scripts/safe-postinstall.cjs +62 -49
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-routes.d.ts","sourceRoot":"","sources":["../../src/graph/framework-routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAiLD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmB/E"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * framework-routes.ts — Framework-aware route detection
4
+ *
5
+ * Detects web framework routes using lightweight regex matching.
6
+ * Supports Express, NestJS, FastAPI, Flask, Django.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.detectRoutes = detectRoutes;
10
+ function lineOf(content, index) {
11
+ return content.slice(0, index).split(/\r?\n/).length;
12
+ }
13
+ // ── Express -----------------------------------------------------------
14
+ function detectExpress(content) {
15
+ const routes = [];
16
+ const re = /(?:app|router)\.(get|post|put|patch|delete|head|options|all|use)\s*\(\s*['"`]([^'"`]+)['"`]\s*,\s*(?:async\s+)?(?:function\s+)?(\w+)/gi;
17
+ let m;
18
+ while ((m = re.exec(content)) !== null) {
19
+ const [, method, path, handler] = m;
20
+ if (!method || !path || !handler)
21
+ continue;
22
+ routes.push({
23
+ method: method.toUpperCase(),
24
+ path,
25
+ handler,
26
+ line: lineOf(content, m.index),
27
+ framework: "express",
28
+ });
29
+ }
30
+ return routes;
31
+ }
32
+ // ── NestJS ------------------------------------------------------------
33
+ function extractNestJSClassBody(content, startIndex) {
34
+ const sliced = content.slice(startIndex);
35
+ const classMatch = sliced.match(/\bclass\s+\w+\s*\{/);
36
+ if (!classMatch || classMatch.index === undefined)
37
+ return undefined;
38
+ const bodyStart = startIndex + classMatch.index + classMatch[0].length;
39
+ let depth = 1;
40
+ let i = bodyStart;
41
+ while (i < content.length && depth > 0) {
42
+ const ch = content.charAt(i);
43
+ if (ch === "{") {
44
+ depth++;
45
+ }
46
+ else if (ch === "}") {
47
+ depth--;
48
+ }
49
+ i++;
50
+ }
51
+ return { body: content.slice(bodyStart, i - 1), bodyStart };
52
+ }
53
+ function detectNestJS(content) {
54
+ const routes = [];
55
+ const ctrlRe = /@Controller\s*(?:\(\s*['"`]([^'"`]*)['"`]\s*\))?/g;
56
+ let cm;
57
+ while ((cm = ctrlRe.exec(content)) !== null) {
58
+ const [, ctrlPath = ""] = cm;
59
+ const base = ctrlPath ? `/${ctrlPath.replace(/^\/+/, "")}` : "";
60
+ const classInfo = extractNestJSClassBody(content, cm.index);
61
+ if (!classInfo)
62
+ continue;
63
+ const { body, bodyStart } = classInfo;
64
+ const methodRe = /@(Get|Post|Put|Patch|Delete|Head|Options)\s*(?:\(\s*['"`]([^'"`]*)['"`]\s*\))?\s*(?:\r?\n\s*)*(?:async\s+)?(\w+)\s*\(/gi;
65
+ let mm;
66
+ while ((mm = methodRe.exec(body)) !== null) {
67
+ const [, mtd, rawPath = "", handler] = mm;
68
+ if (!mtd || !handler)
69
+ continue;
70
+ const sub = rawPath ? `/${rawPath.replace(/^\/+/, "")}` : "";
71
+ const fullPath = (base + sub).replace(/\/+/g, "/") || "/";
72
+ routes.push({
73
+ method: mtd.toUpperCase(),
74
+ path: fullPath,
75
+ handler,
76
+ line: lineOf(content, bodyStart + mm.index),
77
+ framework: "nestjs",
78
+ });
79
+ }
80
+ }
81
+ return routes;
82
+ }
83
+ // ── FastAPI -----------------------------------------------------------
84
+ function detectFastAPI(content) {
85
+ const routes = [];
86
+ const re = /@(?:app|router)\.(get|post|put|patch|delete|head|options)\s*\(\s*['"`]([^'"`]+)['"`]\s*\)(?:\s*(?:\r?\n|\r)\s*(?:async\s+)?def\s+(\w+))?/gi;
87
+ let m;
88
+ while ((m = re.exec(content)) !== null) {
89
+ const [, method, path, handler] = m;
90
+ if (!method || !path)
91
+ continue;
92
+ routes.push({
93
+ method: method.toUpperCase(),
94
+ path,
95
+ handler: handler ?? "unknown",
96
+ line: lineOf(content, m.index),
97
+ framework: "fastapi",
98
+ });
99
+ }
100
+ return routes;
101
+ }
102
+ // ── Flask -------------------------------------------------------------
103
+ function detectFlask(content) {
104
+ const routes = [];
105
+ // With explicit methods=[...]
106
+ const reMethods = /@app\.route\s*\(\s*['"`]([^'"`]+)['"`][^)]*methods\s*=\s*\[([^\]]+)\][^)]*\)(?:\s*(?:\r?\n|\r)\s*(?:async\s+)?def\s+(\w+))?/gi;
107
+ let m;
108
+ while ((m = reMethods.exec(content)) !== null) {
109
+ const [, path, methodsStr, handler] = m;
110
+ if (!path)
111
+ continue;
112
+ const methods = methodsStr
113
+ ? methodsStr
114
+ .split(",")
115
+ .map((s) => s.trim().replace(/['"`]/g, "").toUpperCase())
116
+ .filter(Boolean)
117
+ : ["GET"];
118
+ const line = lineOf(content, m.index);
119
+ for (const method of methods) {
120
+ routes.push({
121
+ method,
122
+ path,
123
+ handler: handler ?? "unknown",
124
+ line,
125
+ framework: "flask",
126
+ });
127
+ }
128
+ }
129
+ // Without methods (defaults to GET)
130
+ const reNoMethods = /@app\.route\s*\(\s*['"`]([^'"`]+)['"`]\s*\)(?:\s*(?:\r?\n|\r)\s*(?:async\s+)?def\s+(\w+))?/gi;
131
+ while ((m = reNoMethods.exec(content)) !== null) {
132
+ const [, path, handler] = m;
133
+ if (!path)
134
+ continue;
135
+ const line = lineOf(content, m.index);
136
+ // Skip duplicates produced by the methods regex at the same line
137
+ if (routes.some((r) => r.line === line && r.path === path))
138
+ continue;
139
+ routes.push({
140
+ method: "GET",
141
+ path,
142
+ handler: handler ?? "unknown",
143
+ line,
144
+ framework: "flask",
145
+ });
146
+ }
147
+ return routes;
148
+ }
149
+ // ── Django ------------------------------------------------------------
150
+ function detectDjango(content) {
151
+ const routes = [];
152
+ const re = /\b(?:path|re_path)\s*\(\s*['"`]([^'"`]+)['"`]\s*,\s*([\w.]+)\s*\)/g;
153
+ let m;
154
+ while ((m = re.exec(content)) !== null) {
155
+ const [, path, handlerRef] = m;
156
+ if (!path || !handlerRef)
157
+ continue;
158
+ const handler = handlerRef.split(".").pop() ?? handlerRef;
159
+ routes.push({
160
+ method: "ANY",
161
+ path,
162
+ handler,
163
+ line: lineOf(content, m.index),
164
+ framework: "django",
165
+ });
166
+ }
167
+ return routes;
168
+ }
169
+ // ── Public API --------------------------------------------------------
170
+ function detectRoutes(filePath, content) {
171
+ const lower = filePath.toLowerCase();
172
+ const routes = [];
173
+ if (lower.endsWith(".ts") ||
174
+ lower.endsWith(".tsx") ||
175
+ lower.endsWith(".js") ||
176
+ lower.endsWith(".jsx")) {
177
+ routes.push(...detectExpress(content));
178
+ routes.push(...detectNestJS(content));
179
+ }
180
+ else if (lower.endsWith(".py")) {
181
+ routes.push(...detectFastAPI(content));
182
+ routes.push(...detectFlask(content));
183
+ routes.push(...detectDjango(content));
184
+ }
185
+ return routes;
186
+ }
187
+ //# sourceMappingURL=framework-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-routes.js","sourceRoot":"","sources":["../../src/graph/framework-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { GraphNode } from "../core/types";
2
+ import type { GraphClient } from "./client-factory";
3
+ export interface ImpactResult {
4
+ seed: string;
5
+ impacted: Array<{
6
+ node: {
7
+ id: string;
8
+ type: GraphNode["type"];
9
+ content: string;
10
+ };
11
+ depth: number;
12
+ path: string[];
13
+ }>;
14
+ totalCount: number;
15
+ maxDepthReached: number;
16
+ }
17
+ export interface AffectedResult {
18
+ changedFiles: string[];
19
+ affected: Array<{
20
+ node: {
21
+ id: string;
22
+ type: GraphNode["type"];
23
+ content: string;
24
+ };
25
+ depth: number;
26
+ isTest: boolean;
27
+ path: string[];
28
+ }>;
29
+ testFiles: string[];
30
+ totalCount: number;
31
+ }
32
+ /**
33
+ * 正向影响追踪:从指定符号出发,沿 calls / references / imports 边做多跳正向 BFS 传播。
34
+ *
35
+ * @param client GraphClient 实例
36
+ * @param symbolName 种子节点 id
37
+ * @param options maxDepth 默认 5
38
+ */
39
+ export declare function impactAnalysis(client: GraphClient, symbolName: string, options?: {
40
+ maxDepth?: number;
41
+ }): Promise<ImpactResult>;
42
+ /**
43
+ * 反向影响追踪:从变更文件出发,沿所有边的反方向(direction: "in")传播,
44
+ * 找出受影响的测试文件、调用方、下游模块。
45
+ *
46
+ * @param client GraphClient 实例
47
+ * @param changedFiles 种子节点 id 列表
48
+ * @param options maxDepth 默认 5
49
+ */
50
+ export declare function affectedAnalysis(client: GraphClient, changedFiles: string[], options?: {
51
+ maxDepth?: number;
52
+ }): Promise<AffectedResult>;
53
+ export interface CallChainResult {
54
+ from: string;
55
+ to: string;
56
+ found: boolean;
57
+ path: Array<{
58
+ symbol: string;
59
+ file: string;
60
+ line?: number | undefined;
61
+ }>;
62
+ depth: number;
63
+ }
64
+ export interface InheritanceNode {
65
+ symbol: string;
66
+ file: string;
67
+ line?: number | undefined;
68
+ parents: InheritanceNode[];
69
+ children: InheritanceNode[];
70
+ }
71
+ export interface InheritanceChainResult {
72
+ symbol: string;
73
+ parents: InheritanceNode[];
74
+ children: InheritanceNode[];
75
+ depth: number;
76
+ }
77
+ /**
78
+ * 调用链追踪:从 fromSymbol 出发,沿 calls 边做 BFS,搜索到 toSymbol 的最短路径。
79
+ *
80
+ * @param client GraphClient 实例
81
+ * @param fromSymbol 起始符号 id
82
+ * @param toSymbol 目标符号 id
83
+ * @param options maxDepth 默认 10
84
+ */
85
+ export declare function callChain(client: GraphClient, fromSymbol: string, toSymbol: string, options?: {
86
+ maxDepth?: number;
87
+ }): Promise<CallChainResult>;
88
+ /**
89
+ * 继承层次追踪:沿 inherits 边追踪继承树。
90
+ *
91
+ * @param client GraphClient 实例
92
+ * @param symbolName 起始符号 id
93
+ * @param options maxDepth 默认 5;direction 默认 both
94
+ */
95
+ export declare function inheritanceChain(client: GraphClient, symbolName: string, options?: {
96
+ maxDepth?: number;
97
+ direction?: "up" | "down" | "both";
98
+ }): Promise<InheritanceChainResult>;
99
+ //# sourceMappingURL=graph-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-analysis.d.ts","sourceRoot":"","sources":["../../src/graph/graph-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.impactAnalysis = impactAnalysis;
4
+ exports.affectedAnalysis = affectedAnalysis;
5
+ exports.callChain = callChain;
6
+ exports.inheritanceChain = inheritanceChain;
7
+ const graph_utils_1 = require("./graph-utils");
8
+ const IMPACT_RELATIONS = ["calls", "references", "imports"];
9
+ function isTestFile(nodeId) {
10
+ const lower = nodeId.toLowerCase();
11
+ return (lower.includes("test") ||
12
+ lower.includes("spec") ||
13
+ lower.includes("__tests__") ||
14
+ lower.includes(".test.") ||
15
+ lower.includes(".spec."));
16
+ }
17
+ /**
18
+ * 正向影响追踪:从指定符号出发,沿 calls / references / imports 边做多跳正向 BFS 传播。
19
+ *
20
+ * @param client GraphClient 实例
21
+ * @param symbolName 种子节点 id
22
+ * @param options maxDepth 默认 5
23
+ */
24
+ async function impactAnalysis(client, symbolName, options) {
25
+ if (typeof client.getNeighbors !== "function") {
26
+ return { seed: symbolName, impacted: [], totalCount: 0, maxDepthReached: 0 };
27
+ }
28
+ const maxDepth = Math.max(1, options?.maxDepth ?? 5);
29
+ const visited = new Map();
30
+ visited.set(symbolName, {
31
+ depth: 0,
32
+ path: [symbolName],
33
+ node: { id: symbolName, type: "Symbol", content: symbolName },
34
+ });
35
+ let maxDepthReached = 0;
36
+ for (let depth = 1; depth <= maxDepth; depth += 1) {
37
+ const frontier = Array.from(visited.entries())
38
+ .filter(([, v]) => v.depth === depth - 1)
39
+ .map(([id]) => id);
40
+ if (frontier.length === 0) {
41
+ break;
42
+ }
43
+ for (const nodeId of frontier) {
44
+ const parent = visited.get(nodeId);
45
+ if (!parent) {
46
+ continue;
47
+ }
48
+ const neighbors = await client.getNeighbors([nodeId], IMPACT_RELATIONS, "out");
49
+ for (const { node } of neighbors) {
50
+ if (visited.has(node.id)) {
51
+ continue;
52
+ }
53
+ const path = [...parent.path, node.id];
54
+ visited.set(node.id, { depth, path, node });
55
+ maxDepthReached = Math.max(maxDepthReached, depth);
56
+ }
57
+ }
58
+ }
59
+ const impacted = [];
60
+ for (const [id, info] of visited) {
61
+ if (id === symbolName) {
62
+ continue;
63
+ }
64
+ impacted.push({
65
+ node: { id: info.node.id, type: info.node.type, content: info.node.content },
66
+ depth: info.depth,
67
+ path: info.path,
68
+ });
69
+ }
70
+ impacted.sort((a, b) => a.depth - b.depth || a.node.id.localeCompare(b.node.id));
71
+ return {
72
+ seed: symbolName,
73
+ impacted,
74
+ totalCount: impacted.length,
75
+ maxDepthReached,
76
+ };
77
+ }
78
+ /**
79
+ * 反向影响追踪:从变更文件出发,沿所有边的反方向(direction: "in")传播,
80
+ * 找出受影响的测试文件、调用方、下游模块。
81
+ *
82
+ * @param client GraphClient 实例
83
+ * @param changedFiles 种子节点 id 列表
84
+ * @param options maxDepth 默认 5
85
+ */
86
+ async function affectedAnalysis(client, changedFiles, options) {
87
+ if (typeof client.getNeighbors !== "function") {
88
+ return { changedFiles, affected: [], testFiles: [], totalCount: 0 };
89
+ }
90
+ const maxDepth = Math.max(1, options?.maxDepth ?? 5);
91
+ const visited = new Map();
92
+ for (const file of changedFiles) {
93
+ if (!visited.has(file)) {
94
+ visited.set(file, {
95
+ depth: 0,
96
+ path: [file],
97
+ node: { id: file, type: "File", content: file },
98
+ });
99
+ }
100
+ }
101
+ for (let depth = 1; depth <= maxDepth; depth += 1) {
102
+ const frontier = Array.from(visited.entries())
103
+ .filter(([, v]) => v.depth === depth - 1)
104
+ .map(([id]) => id);
105
+ if (frontier.length === 0) {
106
+ break;
107
+ }
108
+ for (const nodeId of frontier) {
109
+ const parent = visited.get(nodeId);
110
+ if (!parent) {
111
+ continue;
112
+ }
113
+ const neighbors = await client.getNeighbors([nodeId], undefined, "in");
114
+ for (const { node } of neighbors) {
115
+ if (visited.has(node.id)) {
116
+ continue;
117
+ }
118
+ const path = [...parent.path, node.id];
119
+ visited.set(node.id, { depth, path, node });
120
+ }
121
+ }
122
+ }
123
+ const affected = [];
124
+ const testFilesSet = new Set();
125
+ for (const [id, info] of visited) {
126
+ if (changedFiles.includes(id)) {
127
+ continue;
128
+ }
129
+ const test = isTestFile(id);
130
+ if (test) {
131
+ testFilesSet.add(id);
132
+ }
133
+ affected.push({
134
+ node: { id: info.node.id, type: info.node.type, content: info.node.content },
135
+ depth: info.depth,
136
+ isTest: test,
137
+ path: info.path,
138
+ });
139
+ }
140
+ affected.sort((a, b) => a.depth - b.depth || a.node.id.localeCompare(b.node.id));
141
+ return {
142
+ changedFiles,
143
+ affected,
144
+ testFiles: Array.from(testFilesSet).sort((a, b) => a.localeCompare(b)),
145
+ totalCount: affected.length,
146
+ };
147
+ }
148
+ /**
149
+ * 调用链追踪:从 fromSymbol 出发,沿 calls 边做 BFS,搜索到 toSymbol 的最短路径。
150
+ *
151
+ * @param client GraphClient 实例
152
+ * @param fromSymbol 起始符号 id
153
+ * @param toSymbol 目标符号 id
154
+ * @param options maxDepth 默认 10
155
+ */
156
+ async function callChain(client, fromSymbol, toSymbol, options) {
157
+ if (typeof client.getNeighbors !== "function") {
158
+ return { from: fromSymbol, to: toSymbol, found: false, path: [], depth: 0 };
159
+ }
160
+ const maxDepth = Math.max(1, options?.maxDepth ?? 10);
161
+ const visited = new Set();
162
+ const queue = [];
163
+ const startNodes = await client.getNodesByIds?.([fromSymbol]) ?? [];
164
+ const startNode = startNodes.find((n) => n.id === fromSymbol) ?? {
165
+ id: fromSymbol,
166
+ type: "Symbol",
167
+ content: fromSymbol,
168
+ };
169
+ queue.push({ id: fromSymbol, path: [startNode] });
170
+ visited.add(fromSymbol);
171
+ while (queue.length > 0) {
172
+ const current = queue.shift();
173
+ const currentDepth = current.path.length - 1;
174
+ if (current.id === toSymbol) {
175
+ const path = current.path.map((node) => {
176
+ const entry = {
177
+ symbol: node.id,
178
+ file: (0, graph_utils_1.extractNodeSourcePath)(node),
179
+ };
180
+ if (typeof node.metadata?.line === "number") {
181
+ entry.line = node.metadata.line;
182
+ }
183
+ return entry;
184
+ });
185
+ return {
186
+ from: fromSymbol,
187
+ to: toSymbol,
188
+ found: true,
189
+ path,
190
+ depth: currentDepth,
191
+ };
192
+ }
193
+ if (currentDepth >= maxDepth) {
194
+ continue;
195
+ }
196
+ const neighbors = await client.getNeighbors?.([current.id], ["calls"], "out") ?? [];
197
+ for (const { node } of neighbors) {
198
+ if (visited.has(node.id)) {
199
+ continue;
200
+ }
201
+ visited.add(node.id);
202
+ queue.push({
203
+ id: node.id,
204
+ path: [...current.path, node],
205
+ });
206
+ }
207
+ }
208
+ return { from: fromSymbol, to: toSymbol, found: false, path: [], depth: 0 };
209
+ }
210
+ async function buildInheritanceTree(client, rootSymbol, allowUp, allowDown, maxDepth, visited) {
211
+ if (typeof client.getNeighbors !== "function") {
212
+ return null;
213
+ }
214
+ if (visited.has(rootSymbol)) {
215
+ return null;
216
+ }
217
+ visited.add(rootSymbol);
218
+ const nodes = await client.getNodesByIds?.([rootSymbol]) ?? [];
219
+ const rootNode = nodes.find((n) => n.id === rootSymbol) ?? {
220
+ id: rootSymbol,
221
+ type: "Symbol",
222
+ content: rootSymbol,
223
+ };
224
+ const result = {
225
+ symbol: rootSymbol,
226
+ file: (0, graph_utils_1.extractNodeSourcePath)(rootNode),
227
+ parents: [],
228
+ children: [],
229
+ };
230
+ if (typeof rootNode.metadata?.line === "number") {
231
+ result.line = rootNode.metadata.line;
232
+ }
233
+ if (maxDepth <= 0) {
234
+ return { node: result, maxDepthReached: 0 };
235
+ }
236
+ let maxSubDepth = 0;
237
+ if (allowUp) {
238
+ const parentNeighbors = await client.getNeighbors?.([rootSymbol], ["inherits"], "out") ?? [];
239
+ for (const { node } of parentNeighbors) {
240
+ const subTree = await buildInheritanceTree(client, node.id, true, false, maxDepth - 1, visited);
241
+ if (subTree) {
242
+ result.parents.push(subTree.node);
243
+ maxSubDepth = Math.max(maxSubDepth, subTree.maxDepthReached + 1);
244
+ }
245
+ }
246
+ }
247
+ if (allowDown) {
248
+ const childNeighbors = await client.getNeighbors?.([rootSymbol], ["inherits"], "in") ?? [];
249
+ for (const { node } of childNeighbors) {
250
+ const subTree = await buildInheritanceTree(client, node.id, false, true, maxDepth - 1, visited);
251
+ if (subTree) {
252
+ result.children.push(subTree.node);
253
+ maxSubDepth = Math.max(maxSubDepth, subTree.maxDepthReached + 1);
254
+ }
255
+ }
256
+ }
257
+ return { node: result, maxDepthReached: maxSubDepth };
258
+ }
259
+ /**
260
+ * 继承层次追踪:沿 inherits 边追踪继承树。
261
+ *
262
+ * @param client GraphClient 实例
263
+ * @param symbolName 起始符号 id
264
+ * @param options maxDepth 默认 5;direction 默认 both
265
+ */
266
+ async function inheritanceChain(client, symbolName, options) {
267
+ if (typeof client.getNeighbors !== "function") {
268
+ return { symbol: symbolName, parents: [], children: [], depth: 0 };
269
+ }
270
+ const maxDepth = Math.max(1, options?.maxDepth ?? 5);
271
+ const direction = options?.direction ?? "both";
272
+ const allowUp = direction === "up" || direction === "both";
273
+ const allowDown = direction === "down" || direction === "both";
274
+ const visited = new Set();
275
+ const tree = await buildInheritanceTree(client, symbolName, allowUp, allowDown, maxDepth, visited);
276
+ if (!tree) {
277
+ return { symbol: symbolName, parents: [], children: [], depth: 0 };
278
+ }
279
+ return {
280
+ symbol: symbolName,
281
+ parents: tree.node.parents,
282
+ children: tree.node.children,
283
+ depth: tree.maxDepthReached,
284
+ };
285
+ }
286
+ //# sourceMappingURL=graph-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-analysis.js","sourceRoot":"","sources":["../../src/graph/graph-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { GraphClient } from "./client-factory";
2
+ export interface SymbolMatch {
3
+ symbol: {
4
+ id: string;
5
+ name: string;
6
+ kind: string;
7
+ file: string;
8
+ line: number;
9
+ signature: string;
10
+ };
11
+ definedIn: string;
12
+ callers: Array<{
13
+ name: string;
14
+ file: string;
15
+ line: number;
16
+ }>;
17
+ referencers: Array<{
18
+ name: string;
19
+ file: string;
20
+ line: number;
21
+ }>;
22
+ }
23
+ export interface QuerySymbolResult {
24
+ query: string;
25
+ matches: SymbolMatch[];
26
+ totalCount: number;
27
+ }
28
+ export interface SearchGraphResult {
29
+ query: string;
30
+ results: Array<{
31
+ id: string;
32
+ type: string;
33
+ content: string;
34
+ sourcePath: string;
35
+ relevance: number;
36
+ }>;
37
+ totalCount: number;
38
+ }
39
+ /**
40
+ * Query symbols by name with optional exact matching.
41
+ * For each matched Symbol, resolves:
42
+ * - defining File node (reverse of "defines")
43
+ * - caller nodes (reverse of "calls")
44
+ * - referencer nodes (reverse of "references")
45
+ */
46
+ export declare function querySymbolGraph(client: GraphClient, name: string, exact?: boolean): Promise<QuerySymbolResult>;
47
+ /**
48
+ * Full-text search over the graph using the client's keyword query.
49
+ * Results are ranked by node type priority: Symbol > File > Module.
50
+ */
51
+ export declare function searchGraphNodes(client: GraphClient, query: string, limit?: number): Promise<SearchGraphResult>;
52
+ //# sourceMappingURL=graph-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-search.d.ts","sourceRoot":"","sources":["../../src/graph/graph-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,UAAQ,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAoE5B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}