@roarpeng/graphflow 1.1.0 → 1.2.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.
Files changed (142) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/insight.js +1 -1
  3. package/dist/agents/insight.js.map +1 -1
  4. package/dist/config/defaults.d.ts.map +1 -1
  5. package/dist/config/defaults.js +1 -0
  6. package/dist/config/defaults.js.map +1 -1
  7. package/dist/config/embedding-factory.d.ts.map +1 -1
  8. package/dist/config/embedding-factory.js +23 -12
  9. package/dist/config/embedding-factory.js.map +1 -1
  10. package/dist/config/loader.d.ts +11 -0
  11. package/dist/config/loader.d.ts.map +1 -1
  12. package/dist/config/loader.js +103 -0
  13. package/dist/config/loader.js.map +1 -1
  14. package/dist/core/agent-assignment.d.ts +39 -0
  15. package/dist/core/agent-assignment.d.ts.map +1 -0
  16. package/dist/core/agent-assignment.js +73 -0
  17. package/dist/core/agent-assignment.js.map +1 -0
  18. package/dist/core/dag-checkpoint.d.ts +83 -0
  19. package/dist/core/dag-checkpoint.d.ts.map +1 -0
  20. package/dist/core/dag-checkpoint.js +164 -0
  21. package/dist/core/dag-checkpoint.js.map +1 -0
  22. package/dist/core/dag-engine.d.ts +9 -0
  23. package/dist/core/dag-engine.d.ts.map +1 -1
  24. package/dist/core/dag-engine.js +42 -0
  25. package/dist/core/dag-engine.js.map +1 -1
  26. package/dist/core/orchestrator-context.d.ts +10 -0
  27. package/dist/core/orchestrator-context.d.ts.map +1 -0
  28. package/dist/core/orchestrator-context.js +112 -0
  29. package/dist/core/orchestrator-context.js.map +1 -0
  30. package/dist/core/orchestrator-episode.d.ts +13 -0
  31. package/dist/core/orchestrator-episode.d.ts.map +1 -0
  32. package/dist/core/orchestrator-episode.js +128 -0
  33. package/dist/core/orchestrator-episode.js.map +1 -0
  34. package/dist/core/orchestrator-route.d.ts +20 -0
  35. package/dist/core/orchestrator-route.d.ts.map +1 -0
  36. package/dist/core/orchestrator-route.js +51 -0
  37. package/dist/core/orchestrator-route.js.map +1 -0
  38. package/dist/core/orchestrator.d.ts +2 -38
  39. package/dist/core/orchestrator.d.ts.map +1 -1
  40. package/dist/core/orchestrator.js +97 -286
  41. package/dist/core/orchestrator.js.map +1 -1
  42. package/dist/core/triage.d.ts +21 -0
  43. package/dist/core/triage.d.ts.map +1 -1
  44. package/dist/core/triage.js +25 -6
  45. package/dist/core/triage.js.map +1 -1
  46. package/dist/core/types.d.ts +53 -0
  47. package/dist/core/types.d.ts.map +1 -1
  48. package/dist/graph/context-slicer-types.d.ts +62 -0
  49. package/dist/graph/context-slicer-types.d.ts.map +1 -0
  50. package/dist/graph/context-slicer-types.js +13 -0
  51. package/dist/graph/context-slicer-types.js.map +1 -0
  52. package/dist/graph/context-slicer-utils.d.ts +24 -0
  53. package/dist/graph/context-slicer-utils.d.ts.map +1 -0
  54. package/dist/graph/context-slicer-utils.js +118 -0
  55. package/dist/graph/context-slicer-utils.js.map +1 -0
  56. package/dist/graph/context-slicer.d.ts +6 -61
  57. package/dist/graph/context-slicer.d.ts.map +1 -1
  58. package/dist/graph/context-slicer.js +73 -170
  59. package/dist/graph/context-slicer.js.map +1 -1
  60. package/dist/graph/file-indexer-cache.d.ts +34 -0
  61. package/dist/graph/file-indexer-cache.d.ts.map +1 -0
  62. package/dist/graph/file-indexer-cache.js +105 -0
  63. package/dist/graph/file-indexer-cache.js.map +1 -0
  64. package/dist/graph/file-indexer-edges.d.ts +55 -0
  65. package/dist/graph/file-indexer-edges.d.ts.map +1 -0
  66. package/dist/graph/file-indexer-edges.js +258 -0
  67. package/dist/graph/file-indexer-edges.js.map +1 -0
  68. package/dist/graph/file-indexer-nodes.d.ts +43 -0
  69. package/dist/graph/file-indexer-nodes.d.ts.map +1 -0
  70. package/dist/graph/file-indexer-nodes.js +137 -0
  71. package/dist/graph/file-indexer-nodes.js.map +1 -0
  72. package/dist/graph/file-indexer-walker.d.ts +35 -0
  73. package/dist/graph/file-indexer-walker.d.ts.map +1 -0
  74. package/dist/graph/file-indexer-walker.js +80 -0
  75. package/dist/graph/file-indexer-walker.js.map +1 -0
  76. package/dist/graph/file-indexer.d.ts +13 -39
  77. package/dist/graph/file-indexer.d.ts.map +1 -1
  78. package/dist/graph/file-indexer.js +167 -600
  79. package/dist/graph/file-indexer.js.map +1 -1
  80. package/dist/index.d.ts +1 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +2 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/integrations/agent-mcp-installer.d.ts +25 -1
  85. package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
  86. package/dist/integrations/agent-mcp-installer.js +160 -4
  87. package/dist/integrations/agent-mcp-installer.js.map +1 -1
  88. package/dist/integrations/skill-installer.d.ts +50 -0
  89. package/dist/integrations/skill-installer.d.ts.map +1 -0
  90. package/dist/integrations/skill-installer.js +373 -0
  91. package/dist/integrations/skill-installer.js.map +1 -0
  92. package/dist/learning/embeddings.d.ts +11 -0
  93. package/dist/learning/embeddings.d.ts.map +1 -1
  94. package/dist/learning/embeddings.js +24 -0
  95. package/dist/learning/embeddings.js.map +1 -1
  96. package/dist/learning/episodic-memory.d.ts +3 -2
  97. package/dist/learning/episodic-memory.d.ts.map +1 -1
  98. package/dist/learning/episodic-memory.js +105 -10
  99. package/dist/learning/episodic-memory.js.map +1 -1
  100. package/dist/learning/local-embedding.d.ts.map +1 -1
  101. package/dist/learning/local-embedding.js +16 -0
  102. package/dist/learning/local-embedding.js.map +1 -1
  103. package/dist/learning/seed-skills.d.ts +21 -0
  104. package/dist/learning/seed-skills.d.ts.map +1 -0
  105. package/dist/learning/seed-skills.js +113 -0
  106. package/dist/learning/seed-skills.js.map +1 -0
  107. package/dist/learning/skill-evolution.d.ts +1 -1
  108. package/dist/learning/skill-evolution.d.ts.map +1 -1
  109. package/dist/learning/skill-evolution.js +1 -1
  110. package/dist/learning/skill-evolution.js.map +1 -1
  111. package/dist/learning/skill-package.d.ts +55 -0
  112. package/dist/learning/skill-package.d.ts.map +1 -0
  113. package/dist/learning/skill-package.js +115 -0
  114. package/dist/learning/skill-package.js.map +1 -0
  115. package/dist/learning/triage-telemetry.d.ts +43 -0
  116. package/dist/learning/triage-telemetry.d.ts.map +1 -0
  117. package/dist/learning/triage-telemetry.js +114 -0
  118. package/dist/learning/triage-telemetry.js.map +1 -0
  119. package/dist/surfaces/cli/index.js +65 -0
  120. package/dist/surfaces/cli/index.js.map +1 -1
  121. package/dist/surfaces/cli/init.d.ts +12 -2
  122. package/dist/surfaces/cli/init.d.ts.map +1 -1
  123. package/dist/surfaces/cli/init.js +109 -30
  124. package/dist/surfaces/cli/init.js.map +1 -1
  125. package/dist/surfaces/cli/output.d.ts.map +1 -1
  126. package/dist/surfaces/cli/output.js +5 -0
  127. package/dist/surfaces/cli/output.js.map +1 -1
  128. package/dist/surfaces/cli/runtime/graph.d.ts +23 -0
  129. package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
  130. package/dist/surfaces/cli/runtime/graph.js +40 -0
  131. package/dist/surfaces/cli/runtime/graph.js.map +1 -1
  132. package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
  133. package/dist/surfaces/cli/runtime/routing.js +8 -1
  134. package/dist/surfaces/cli/runtime/routing.js.map +1 -1
  135. package/dist/surfaces/cli/runtime.d.ts +1 -1
  136. package/dist/surfaces/cli/runtime.d.ts.map +1 -1
  137. package/dist/surfaces/cli/runtime.js +4 -1
  138. package/dist/surfaces/cli/runtime.js.map +1 -1
  139. package/dist/surfaces/mcp/tool-definitions.js +20 -20
  140. package/dist/surfaces/mcp/tool-definitions.js.map +1 -1
  141. package/package.json +3 -3
  142. package/scripts/safe-postinstall.cjs +323 -5
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * file-indexer-cache.ts — Cache management
4
+ *
5
+ * Handles reading, writing, and querying the index-state cache
6
+ * used for incremental indexing decisions.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CACHE_FILE = exports.CACHE_DIR = void 0;
10
+ exports.loadCacheState = loadCacheState;
11
+ exports.saveCacheState = saveCacheState;
12
+ exports.clearGraphIndexArtifacts = clearGraphIndexArtifacts;
13
+ exports.hasPendingGraphIndexWork = hasPendingGraphIndexWork;
14
+ exports.hasIndexCache = hasIndexCache;
15
+ const node_fs_1 = require("node:fs");
16
+ const node_path_1 = require("node:path");
17
+ const logger_js_1 = require("../utils/logger.js");
18
+ const file_indexer_walker_js_1 = require("./file-indexer-walker.js");
19
+ exports.CACHE_DIR = ".graphflow-cache";
20
+ exports.CACHE_FILE = "index-state.json";
21
+ /**
22
+ * Load cache state from disk. Returns empty object on missing or invalid cache.
23
+ */
24
+ function loadCacheState(cachePath, forceReindex) {
25
+ if (forceReindex) {
26
+ return {};
27
+ }
28
+ try {
29
+ const raw = (0, node_fs_1.readFileSync)(cachePath, "utf8");
30
+ const parsedCache = JSON.parse(raw);
31
+ if (parsedCache.version === 2 && parsedCache.state) {
32
+ return parsedCache.state;
33
+ }
34
+ }
35
+ catch (error) {
36
+ const err = error;
37
+ if (err.code !== "ENOENT") {
38
+ logger_js_1.logger.warn({ error: err.message }, "Failed to read index cache");
39
+ }
40
+ }
41
+ return {};
42
+ }
43
+ /**
44
+ * Persist cache state to disk.
45
+ */
46
+ function saveCacheState(cachePath, cacheState) {
47
+ try {
48
+ const dir = (0, node_path_1.dirname)(cachePath);
49
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
50
+ (0, node_fs_1.writeFileSync)(cachePath, JSON.stringify({ version: 2, state: cacheState }, null, 2), "utf8");
51
+ }
52
+ catch (error) {
53
+ logger_js_1.logger.warn({ error }, "Failed to write index cache");
54
+ }
55
+ }
56
+ /** Remove graph store, index cache, and vector DB for a full rebuild. */
57
+ function clearGraphIndexArtifacts(rootDir, graphStorePath) {
58
+ const cachePath = (0, node_path_1.join)(rootDir, exports.CACHE_DIR, exports.CACHE_FILE);
59
+ const vectorsPath = (0, node_path_1.join)(rootDir, exports.CACHE_DIR, "vectors.db");
60
+ (0, node_fs_1.rmSync)(graphStorePath, { force: true });
61
+ (0, node_fs_1.rmSync)(cachePath, { force: true });
62
+ (0, node_fs_1.rmSync)(vectorsPath, { force: true });
63
+ }
64
+ /** Returns true when workspace files changed since last index (or cache is empty). */
65
+ function hasPendingGraphIndexWork(rootDir, options) {
66
+ const includeExtensions = options?.includeExtensions ?? file_indexer_walker_js_1.DEFAULT_EXTENSIONS;
67
+ const maxFileSizeBytes = options?.maxFileSizeBytes ?? file_indexer_walker_js_1.DEFAULT_MAX_FILE_SIZE;
68
+ const forceReindex = options?.forceReindex ?? false;
69
+ if (forceReindex) {
70
+ return true;
71
+ }
72
+ const cachePath = (0, node_path_1.join)(rootDir, exports.CACHE_DIR, exports.CACHE_FILE);
73
+ const cacheState = loadCacheState(cachePath, false);
74
+ const scanned = (0, file_indexer_walker_js_1.walkScannableFiles)(rootDir, includeExtensions, maxFileSizeBytes);
75
+ const currentRelPaths = new Set(scanned.map((file) => file.relPath));
76
+ for (const relPath of Object.keys(cacheState)) {
77
+ if (!currentRelPaths.has(relPath)) {
78
+ return true;
79
+ }
80
+ }
81
+ for (const file of scanned) {
82
+ const prev = cacheState[file.relPath];
83
+ if (!prev || prev.mtimeMs !== file.mtimeMs) {
84
+ return true;
85
+ }
86
+ }
87
+ return false;
88
+ }
89
+ /**
90
+ * Quick check whether the index cache exists and is non-empty.
91
+ * Cheaper than hasPendingGraphIndexWork (no full workspace walk).
92
+ */
93
+ function hasIndexCache(rootDir) {
94
+ const cachePath = (0, node_path_1.join)(rootDir, exports.CACHE_DIR, exports.CACHE_FILE);
95
+ if (!(0, node_fs_1.existsSync)(cachePath))
96
+ return false;
97
+ try {
98
+ const cacheState = loadCacheState(cachePath, false);
99
+ return Object.keys(cacheState).length > 0;
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ //# sourceMappingURL=file-indexer-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-indexer-cache.js","sourceRoot":"","sources":["../../src/graph/file-indexer-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * file-indexer-edges.ts — Edge building
3
+ *
4
+ * Builds reference, call, and inheritance edges from parsed files
5
+ * and deduplicates them.
6
+ */
7
+ import type { GraphEdge, GraphNode } from "../core/types.js";
8
+ import type { IndexedSymbol, ParsedFile } from "./file-indexer-nodes.js";
9
+ import type { CallRelation, InheritRelation } from "./language-indexers/index.js";
10
+ /**
11
+ * Deduplicate edges by (from, relation, to) key.
12
+ */
13
+ export declare function dedupEdges(edges: GraphEdge[]): GraphEdge[];
14
+ /**
15
+ * Build cross-file reference edges from parsed files using the global symbol index.
16
+ * Used by batch (full workspace) indexing.
17
+ */
18
+ export declare function buildBatchReferenceEdges(parsed: ParsedFile[], symbolIndex: Map<string, IndexedSymbol[]>): {
19
+ edges: GraphEdge[];
20
+ referenceCount: number;
21
+ };
22
+ /**
23
+ * Build call graph edges (caller → callee) from parsed files.
24
+ * Used by batch (full workspace) indexing.
25
+ */
26
+ export declare function buildBatchCallEdges(parsed: ParsedFile[], symbolIndex: Map<string, IndexedSymbol[]>): {
27
+ edges: GraphEdge[];
28
+ callEdgeCount: number;
29
+ };
30
+ /**
31
+ * Build inheritance edges (child → parent) from parsed files.
32
+ * Used by batch (full workspace) indexing.
33
+ */
34
+ export declare function buildBatchInheritEdges(parsed: ParsedFile[], symbolIndex: Map<string, IndexedSymbol[]>): {
35
+ edges: GraphEdge[];
36
+ inheritEdgeCount: number;
37
+ };
38
+ /**
39
+ * Build reference edges for a single file using the graph snapshot.
40
+ * Used by incremental (single-file) indexing.
41
+ */
42
+ export declare function buildSingleFileReferenceEdges(fileNodeId: string, relPath: string, content: string, declared: IndexedSymbol[], snapshotNodes: GraphNode[]): {
43
+ edges: GraphEdge[];
44
+ referenceCount: number;
45
+ };
46
+ /**
47
+ * Build call and inheritance edges for a single file using local symbols + snapshot.
48
+ * Used by incremental (single-file) indexing.
49
+ */
50
+ export declare function buildSingleFileCallAndInheritEdges(relPath: string, declared: IndexedSymbol[], fileCalls: CallRelation[], fileInherits: InheritRelation[], snapshotNodes: GraphNode[]): {
51
+ edges: GraphEdge[];
52
+ callCount: number;
53
+ inheritCount: number;
54
+ };
55
+ //# sourceMappingURL=file-indexer-edges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-indexer-edges.d.ts","sourceRoot":"","sources":["../../src/graph/file-indexer-edges.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGlF;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAW1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,EAAE,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,GACxC;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAwChD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAAE,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,GACxC;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAuC/C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAAE,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,GACxC;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CA8BlD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,EAAE,EACzB,aAAa,EAAE,SAAS,EAAE,GACzB;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAgChD;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,YAAY,EAAE,EACzB,YAAY,EAAE,eAAe,EAAE,EAC/B,aAAa,EAAE,SAAS,EAAE,GACzB;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAyDjE"}
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ /**
3
+ * file-indexer-edges.ts — Edge building
4
+ *
5
+ * Builds reference, call, and inheritance edges from parsed files
6
+ * and deduplicates them.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.dedupEdges = dedupEdges;
10
+ exports.buildBatchReferenceEdges = buildBatchReferenceEdges;
11
+ exports.buildBatchCallEdges = buildBatchCallEdges;
12
+ exports.buildBatchInheritEdges = buildBatchInheritEdges;
13
+ exports.buildSingleFileReferenceEdges = buildSingleFileReferenceEdges;
14
+ exports.buildSingleFileCallAndInheritEdges = buildSingleFileCallAndInheritEdges;
15
+ const file_indexer_nodes_js_1 = require("./file-indexer-nodes.js");
16
+ /**
17
+ * Deduplicate edges by (from, relation, to) key.
18
+ */
19
+ function dedupEdges(edges) {
20
+ const seen = new Set();
21
+ const result = [];
22
+ for (const edge of edges) {
23
+ const key = `${edge.from}|${edge.relation}|${edge.to}`;
24
+ if (!seen.has(key)) {
25
+ seen.add(key);
26
+ result.push(edge);
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ /**
32
+ * Build cross-file reference edges from parsed files using the global symbol index.
33
+ * Used by batch (full workspace) indexing.
34
+ */
35
+ function buildBatchReferenceEdges(parsed, symbolIndex) {
36
+ const edges = [];
37
+ let referenceCount = 0;
38
+ const identifierRe = /\b\w{3,}\b/g;
39
+ for (const file of parsed) {
40
+ if (!file.scannable) {
41
+ continue;
42
+ }
43
+ const ownNames = new Set(file.declared.map((s) => s.name));
44
+ const seenThisFile = new Set();
45
+ const matches = file.content.match(identifierRe);
46
+ if (!matches)
47
+ continue;
48
+ const seenIdent = new Set();
49
+ for (const name of matches) {
50
+ if (seenIdent.has(name))
51
+ continue;
52
+ seenIdent.add(name);
53
+ if (name.length < 3 || file_indexer_nodes_js_1.REFERENCE_SKIPLIST.has(name)) {
54
+ continue;
55
+ }
56
+ const defs = symbolIndex.get(name);
57
+ if (!defs || defs.length === 0) {
58
+ continue;
59
+ }
60
+ for (const def of defs) {
61
+ if (ownNames.has(name) && def.nodeId.startsWith(`symbol:${file.relPath}:`)) {
62
+ continue;
63
+ }
64
+ const key = `${file.fileNodeId}|${def.nodeId}`;
65
+ if (seenThisFile.has(key)) {
66
+ continue;
67
+ }
68
+ seenThisFile.add(key);
69
+ edges.push({ from: file.fileNodeId, to: def.nodeId, relation: "references" });
70
+ referenceCount += 1;
71
+ }
72
+ }
73
+ }
74
+ return { edges, referenceCount };
75
+ }
76
+ /**
77
+ * Build call graph edges (caller → callee) from parsed files.
78
+ * Used by batch (full workspace) indexing.
79
+ */
80
+ function buildBatchCallEdges(parsed, symbolIndex) {
81
+ const edges = [];
82
+ let callEdgeCount = 0;
83
+ for (const file of parsed) {
84
+ if (file.calls.length === 0)
85
+ continue;
86
+ const localByName = new Map();
87
+ for (const sym of file.declared) {
88
+ localByName.set(sym.name, sym.nodeId);
89
+ }
90
+ const seenCalls = new Set();
91
+ for (const call of file.calls) {
92
+ const calleeDefs = symbolIndex.get(call.callee);
93
+ if (!calleeDefs || calleeDefs.length === 0)
94
+ continue;
95
+ const calleeDef = calleeDefs.find((d) => d.nodeId.startsWith(`symbol:${file.relPath}:`)) ?? calleeDefs[0];
96
+ if (!calleeDef)
97
+ continue;
98
+ let callerNodeId;
99
+ if (call.caller) {
100
+ callerNodeId = localByName.get(call.caller);
101
+ }
102
+ if (!callerNodeId) {
103
+ callerNodeId = (0, file_indexer_nodes_js_1.resolveCallerAtLine)(file.declared, call.line);
104
+ }
105
+ if (!callerNodeId) {
106
+ continue;
107
+ }
108
+ const edgeKey = `${callerNodeId}|${calleeDef.nodeId}|calls`;
109
+ if (seenCalls.has(edgeKey))
110
+ continue;
111
+ seenCalls.add(edgeKey);
112
+ edges.push({ from: callerNodeId, to: calleeDef.nodeId, relation: "calls" });
113
+ callEdgeCount += 1;
114
+ }
115
+ }
116
+ return { edges, callEdgeCount };
117
+ }
118
+ /**
119
+ * Build inheritance edges (child → parent) from parsed files.
120
+ * Used by batch (full workspace) indexing.
121
+ */
122
+ function buildBatchInheritEdges(parsed, symbolIndex) {
123
+ const edges = [];
124
+ let inheritEdgeCount = 0;
125
+ for (const file of parsed) {
126
+ if (file.inherits.length === 0)
127
+ continue;
128
+ const localByName = new Map();
129
+ for (const sym of file.declared) {
130
+ localByName.set(sym.name, sym.nodeId);
131
+ }
132
+ const seenInherits = new Set();
133
+ for (const rel of file.inherits) {
134
+ const childNodeId = localByName.get(rel.child);
135
+ if (!childNodeId)
136
+ continue;
137
+ const parentDefs = symbolIndex.get(rel.parent);
138
+ if (!parentDefs || parentDefs.length === 0)
139
+ continue;
140
+ const parentDef = parentDefs.find((d) => d.nodeId.startsWith(`symbol:${file.relPath}:`)) ?? parentDefs[0];
141
+ if (!parentDef)
142
+ continue;
143
+ const edgeKey = `${childNodeId}|${parentDef.nodeId}|inherits`;
144
+ if (seenInherits.has(edgeKey))
145
+ continue;
146
+ seenInherits.add(edgeKey);
147
+ edges.push({ from: childNodeId, to: parentDef.nodeId, relation: "inherits" });
148
+ inheritEdgeCount += 1;
149
+ }
150
+ }
151
+ return { edges, inheritEdgeCount };
152
+ }
153
+ /**
154
+ * Build reference edges for a single file using the graph snapshot.
155
+ * Used by incremental (single-file) indexing.
156
+ */
157
+ function buildSingleFileReferenceEdges(fileNodeId, relPath, content, declared, snapshotNodes) {
158
+ const edges = [];
159
+ let referenceCount = 0;
160
+ const ownNames = new Set(declared.map((s) => s.name));
161
+ const identifierRe = /\b\w{3,}\b/g;
162
+ const matches = content.match(identifierRe);
163
+ if (!matches)
164
+ return { edges, referenceCount };
165
+ const seenIdent = new Set();
166
+ const symbolIndex = new Map();
167
+ for (const node of snapshotNodes) {
168
+ if (node.type !== "Symbol" || !node.metadata?.name)
169
+ continue;
170
+ if (typeof node.metadata.file === "string" && node.metadata.file === relPath)
171
+ continue;
172
+ const list = symbolIndex.get(node.metadata.name) ?? [];
173
+ list.push({ nodeId: node.id, file: node.metadata.file });
174
+ symbolIndex.set(node.metadata.name, list);
175
+ }
176
+ for (const name of matches) {
177
+ if (seenIdent.has(name))
178
+ continue;
179
+ seenIdent.add(name);
180
+ if (name.length < 3 || file_indexer_nodes_js_1.REFERENCE_SKIPLIST.has(name))
181
+ continue;
182
+ if (ownNames.has(name))
183
+ continue;
184
+ const defs = symbolIndex.get(name);
185
+ if (!defs || defs.length === 0)
186
+ continue;
187
+ for (const def of defs) {
188
+ edges.push({ from: fileNodeId, to: def.nodeId, relation: "references" });
189
+ referenceCount += 1;
190
+ }
191
+ }
192
+ return { edges, referenceCount };
193
+ }
194
+ /**
195
+ * Build call and inheritance edges for a single file using local symbols + snapshot.
196
+ * Used by incremental (single-file) indexing.
197
+ */
198
+ function buildSingleFileCallAndInheritEdges(relPath, declared, fileCalls, fileInherits, snapshotNodes) {
199
+ const edges = [];
200
+ let callCount = 0;
201
+ let inheritCount = 0;
202
+ // Build combined symbol index: local symbols + snapshot symbols
203
+ const combinedSymbolIndex = new Map();
204
+ for (const sym of declared) {
205
+ const list = combinedSymbolIndex.get(sym.name) ?? [];
206
+ list.push({ nodeId: sym.nodeId, file: relPath });
207
+ combinedSymbolIndex.set(sym.name, list);
208
+ }
209
+ for (const node of snapshotNodes) {
210
+ if (node.type !== "Symbol" || !node.metadata?.name)
211
+ continue;
212
+ const name = node.metadata.name;
213
+ const file = typeof node.metadata.file === "string" ? node.metadata.file : "";
214
+ const list = combinedSymbolIndex.get(name) ?? [];
215
+ list.push({ nodeId: node.id, file });
216
+ combinedSymbolIndex.set(name, list);
217
+ }
218
+ const localByName = new Map();
219
+ for (const sym of declared) {
220
+ localByName.set(sym.name, sym.nodeId);
221
+ }
222
+ // Call edges
223
+ for (const call of fileCalls) {
224
+ const calleeDefs = combinedSymbolIndex.get(call.callee);
225
+ if (!calleeDefs || calleeDefs.length === 0)
226
+ continue;
227
+ const calleeDef = calleeDefs.find((d) => d.file === relPath) ?? calleeDefs[0];
228
+ if (!calleeDef)
229
+ continue;
230
+ let callerNodeId;
231
+ if (call.caller) {
232
+ callerNodeId = localByName.get(call.caller);
233
+ }
234
+ if (!callerNodeId) {
235
+ callerNodeId = (0, file_indexer_nodes_js_1.resolveCallerAtLine)(declared, call.line);
236
+ }
237
+ if (!callerNodeId)
238
+ continue;
239
+ edges.push({ from: callerNodeId, to: calleeDef.nodeId, relation: "calls" });
240
+ callCount += 1;
241
+ }
242
+ // Inheritance edges
243
+ for (const rel of fileInherits) {
244
+ const childNodeId = localByName.get(rel.child);
245
+ if (!childNodeId)
246
+ continue;
247
+ const parentDefs = combinedSymbolIndex.get(rel.parent);
248
+ if (!parentDefs || parentDefs.length === 0)
249
+ continue;
250
+ const parentDef = parentDefs.find((d) => d.file === relPath) ?? parentDefs[0];
251
+ if (!parentDef)
252
+ continue;
253
+ edges.push({ from: childNodeId, to: parentDef.nodeId, relation: "inherits" });
254
+ inheritCount += 1;
255
+ }
256
+ return { edges, callCount, inheritCount };
257
+ }
258
+ //# sourceMappingURL=file-indexer-edges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-indexer-edges.js","sourceRoot":"","sources":["../../src/graph/file-indexer-edges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * file-indexer-nodes.ts — Node building
3
+ *
4
+ * Converts AST-extracted symbols into GraphNode objects,
5
+ * builds File/Module/Symbol nodes, and defines/depends_on/imports edges.
6
+ */
7
+ import type { GraphEdge, GraphNode } from "../core/types.js";
8
+ import type { CallRelation, DeclaredSymbol as ExtractedSymbol, InheritRelation } from "./language-indexers/index.js";
9
+ export interface IndexedSymbol extends ExtractedSymbol {
10
+ nodeId: string;
11
+ }
12
+ export interface ParsedFile {
13
+ relPath: string;
14
+ fileNodeId: string;
15
+ moduleNodeId: string;
16
+ declared: IndexedSymbol[];
17
+ content: string;
18
+ scannable: boolean;
19
+ calls: CallRelation[];
20
+ inherits: InheritRelation[];
21
+ }
22
+ export declare const REFERENCE_SKIPLIST: Set<string>;
23
+ /**
24
+ * Derive a module key from a relative path by stripping the file extension.
25
+ */
26
+ export declare function moduleKey(relPath: string): string;
27
+ /**
28
+ * Normalize an import target path: strip extensions, resolve relative paths.
29
+ */
30
+ export declare function normalizeImportTarget(target: string, importerRelPath: string): string | undefined;
31
+ /**
32
+ * Innermost declared symbol at or before `line` (for call attribution when caller name is missing).
33
+ */
34
+ export declare function resolveCallerAtLine(declared: Array<Pick<IndexedSymbol, "line" | "nodeId">>, line: number): string | undefined;
35
+ /**
36
+ * Build GraphNode and GraphEdge arrays for a single file.
37
+ * Returns the nodes, edges, declared symbols, imports, calls, and inherits.
38
+ */
39
+ export declare function buildFileNodesAndEdges(relPath: string, fileSize: number, language: string, declared: IndexedSymbol[], imports: string[]): {
40
+ nodes: GraphNode[];
41
+ edges: GraphEdge[];
42
+ };
43
+ //# sourceMappingURL=file-indexer-nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-indexer-nodes.d.ts","sourceRoot":"","sources":["../../src/graph/file-indexer-nodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,IAAI,eAAe,EACjC,eAAe,EAChB,MAAM,8BAA8B,CAAC;AACtC,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,aAiB7B,CAAC;AAEH;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBjG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EACvD,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAQpB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,CAmE5C"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * file-indexer-nodes.ts — Node building
4
+ *
5
+ * Converts AST-extracted symbols into GraphNode objects,
6
+ * builds File/Module/Symbol nodes, and defines/depends_on/imports edges.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.REFERENCE_SKIPLIST = void 0;
10
+ exports.moduleKey = moduleKey;
11
+ exports.normalizeImportTarget = normalizeImportTarget;
12
+ exports.resolveCallerAtLine = resolveCallerAtLine;
13
+ exports.buildFileNodesAndEdges = buildFileNodesAndEdges;
14
+ const node_path_1 = require("node:path");
15
+ const hash_js_1 = require("../utils/hash.js");
16
+ exports.REFERENCE_SKIPLIST = new Set([
17
+ "if", "for", "let", "const", "var", "this", "new", "return", "true", "false",
18
+ "null", "undefined", "console", "process", "require", "module", "exports",
19
+ "import", "export", "default", "async", "await", "function", "class",
20
+ "interface", "type", "enum", "from", "as", "of", "in", "do", "while",
21
+ "switch", "case", "break", "continue", "throw", "try", "catch", "finally",
22
+ "void", "yield", "number", "string", "boolean", "object", "any", "unknown",
23
+ "never", "Array", "Promise", "Map", "Set", "Date", "Error", "JSON", "Math",
24
+ "Object", "String", "Number", "Boolean", "Symbol", "Function", "RegExp",
25
+ "def", "fn", "pub", "struct", "trait", "impl", "use", "mod", "func",
26
+ "package", "include", "namespace", "typedef", "define", "static", "inline",
27
+ "extern", "virtual", "nil", "None", "True", "False", "int", "char", "long",
28
+ "short", "float", "double", "bool", "auto", "sizeof", "self", "cls",
29
+ "and", "or", "not", "is", "lambda", "global", "nonlocal", "pass", "raise",
30
+ "with", "yield", "make", "len", "cap", "append", "range", "chan", "select",
31
+ "defer", "goto", "fallthrough", "size_t", "uint", "int8", "int16", "int32",
32
+ "int64", "uint8", "uint16", "uint32", "uint64", "byte", "rune", "string",
33
+ ]);
34
+ /**
35
+ * Derive a module key from a relative path by stripping the file extension.
36
+ */
37
+ function moduleKey(relPath) {
38
+ return relPath.replace(/\.(ts|tsx|js|jsx|md|json|py|rs|go|hpp|hxx|cpp|cxx|cc|h|c|java|rb|rake|gemspec)$/i, "");
39
+ }
40
+ /**
41
+ * Normalize an import target path: strip extensions, resolve relative paths.
42
+ */
43
+ function normalizeImportTarget(target, importerRelPath) {
44
+ let cleaned = target
45
+ .replace(/\\/g, "/")
46
+ .replace(/\.(ts|tsx|js|jsx|py|rs|go|hpp|hxx|cpp|cxx|cc|h|c|java|rb|rake|gemspec)$/i, "");
47
+ if (!cleaned) {
48
+ return undefined;
49
+ }
50
+ if (cleaned.startsWith(".")) {
51
+ const dir = node_path_1.posix.dirname(importerRelPath.replace(/\\/g, "/"));
52
+ cleaned = node_path_1.posix.join(dir, cleaned);
53
+ if (cleaned.startsWith("./")) {
54
+ cleaned = cleaned.slice(2);
55
+ }
56
+ }
57
+ return cleaned;
58
+ }
59
+ /**
60
+ * Innermost declared symbol at or before `line` (for call attribution when caller name is missing).
61
+ */
62
+ function resolveCallerAtLine(declared, line) {
63
+ const sorted = [...declared].sort((a, b) => b.line - a.line);
64
+ for (const sym of sorted) {
65
+ if (sym.line <= line) {
66
+ return sym.nodeId;
67
+ }
68
+ }
69
+ return undefined;
70
+ }
71
+ /**
72
+ * Build GraphNode and GraphEdge arrays for a single file.
73
+ * Returns the nodes, edges, declared symbols, imports, calls, and inherits.
74
+ */
75
+ function buildFileNodesAndEdges(relPath, fileSize, language, declared, imports) {
76
+ const nodes = [];
77
+ const edges = [];
78
+ const fileNodeId = `file:${relPath}`;
79
+ const moduleNodeId = `module:${moduleKey(relPath)}`;
80
+ const exportNames = declared
81
+ .filter((s) => s.exported && /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(s.name))
82
+ .map((s) => s.name);
83
+ const uniqueExports = Array.from(new Set(exportNames));
84
+ const exportsSuffix = uniqueExports.length > 0
85
+ ? ` # exports: ${uniqueExports.slice(0, 8).join(", ")}`
86
+ : "";
87
+ nodes.push({
88
+ id: fileNodeId,
89
+ type: "File",
90
+ content: `${relPath}${exportsSuffix}`,
91
+ metadata: {
92
+ path: relPath,
93
+ language,
94
+ exports: uniqueExports,
95
+ symbolCount: declared.length,
96
+ sizeBytes: fileSize,
97
+ },
98
+ });
99
+ nodes.push({ id: moduleNodeId, type: "Module", content: moduleKey(relPath) });
100
+ edges.push({ from: fileNodeId, to: moduleNodeId, relation: "depends_on" });
101
+ for (const symbol of declared) {
102
+ const compactSig = `${symbol.kind} ${symbol.name}${symbol.exported ? " (exported)" : ""} @${relPath}:${symbol.line}`;
103
+ const signature = symbol.signature ?? compactSig;
104
+ const signatureHash = (0, hash_js_1.hashTextHex)(`${signature}\n${symbol.jsdoc ?? ""}\n${symbol.returnType ?? ""}`);
105
+ nodes.push({
106
+ id: symbol.nodeId,
107
+ type: "Symbol",
108
+ content: compactSig,
109
+ metadata: {
110
+ name: symbol.name,
111
+ kind: symbol.kind,
112
+ exported: symbol.exported,
113
+ line: symbol.line,
114
+ file: relPath,
115
+ signature,
116
+ signatureHash,
117
+ ...(symbol.jsdoc ? { jsdoc: symbol.jsdoc } : {}),
118
+ ...(symbol.visibility ? { visibility: symbol.visibility } : {}),
119
+ ...(symbol.paramsCount !== undefined ? { paramsCount: symbol.paramsCount } : {}),
120
+ ...(symbol.returnType ? { returnType: symbol.returnType } : {}),
121
+ ...(symbol.complexity !== undefined ? { complexity: symbol.complexity } : {}),
122
+ },
123
+ });
124
+ edges.push({ from: fileNodeId, to: symbol.nodeId, relation: "defines" });
125
+ }
126
+ for (const target of imports) {
127
+ const targetModule = normalizeImportTarget(target, relPath);
128
+ if (!targetModule) {
129
+ continue;
130
+ }
131
+ const importNodeId = `module:${targetModule}`;
132
+ nodes.push({ id: importNodeId, type: "Module", content: targetModule });
133
+ edges.push({ from: moduleNodeId, to: importNodeId, relation: "imports" });
134
+ }
135
+ return { nodes, edges };
136
+ }
137
+ //# sourceMappingURL=file-indexer-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-indexer-nodes.js","sourceRoot":"","sources":["../../src/graph/file-indexer-nodes.ts"],"names":[],"mappings":"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"}