@jafreck/lore 0.3.6 → 0.3.8

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 (206) hide show
  1. package/README.md +38 -150
  2. package/dist/cli.d.ts +2 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +80 -32
  5. package/dist/cli.js.map +1 -1
  6. package/dist/db/read-only.d.ts +22 -43
  7. package/dist/db/read-only.d.ts.map +1 -1
  8. package/dist/db/read-only.js +80 -156
  9. package/dist/db/read-only.js.map +1 -1
  10. package/dist/db/schema.d.ts +9 -0
  11. package/dist/db/schema.d.ts.map +1 -1
  12. package/dist/db/schema.js +171 -85
  13. package/dist/db/schema.js.map +1 -1
  14. package/dist/discovery/poller.d.ts +6 -16
  15. package/dist/discovery/poller.d.ts.map +1 -1
  16. package/dist/discovery/poller.js +21 -52
  17. package/dist/discovery/poller.js.map +1 -1
  18. package/dist/discovery/scip-flush.d.ts +44 -0
  19. package/dist/discovery/scip-flush.d.ts.map +1 -0
  20. package/dist/discovery/scip-flush.js +67 -0
  21. package/dist/discovery/scip-flush.js.map +1 -0
  22. package/dist/discovery/watcher.d.ts +6 -16
  23. package/dist/discovery/watcher.d.ts.map +1 -1
  24. package/dist/discovery/watcher.js +22 -54
  25. package/dist/discovery/watcher.js.map +1 -1
  26. package/dist/docs/docs.d.ts +0 -2
  27. package/dist/docs/docs.d.ts.map +1 -1
  28. package/dist/docs/docs.js +0 -27
  29. package/dist/docs/docs.js.map +1 -1
  30. package/dist/embeddings/embedder.d.ts +12 -8
  31. package/dist/embeddings/embedder.d.ts.map +1 -1
  32. package/dist/embeddings/embedder.js +35 -19
  33. package/dist/embeddings/embedder.js.map +1 -1
  34. package/dist/index.d.ts +5 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -2
  37. package/dist/index.js.map +1 -1
  38. package/dist/indexer/index.d.ts +19 -10
  39. package/dist/indexer/index.d.ts.map +1 -1
  40. package/dist/indexer/index.js +135 -28
  41. package/dist/indexer/index.js.map +1 -1
  42. package/dist/indexer/pipeline.d.ts +44 -21
  43. package/dist/indexer/pipeline.d.ts.map +1 -1
  44. package/dist/indexer/pipeline.js +48 -26
  45. package/dist/indexer/pipeline.js.map +1 -1
  46. package/dist/indexer/stages/docs-index.d.ts +1 -3
  47. package/dist/indexer/stages/docs-index.d.ts.map +1 -1
  48. package/dist/indexer/stages/docs-index.js +1 -25
  49. package/dist/indexer/stages/docs-index.js.map +1 -1
  50. package/dist/indexer/stages/index.d.ts +4 -2
  51. package/dist/indexer/stages/index.d.ts.map +1 -1
  52. package/dist/indexer/stages/index.js +3 -2
  53. package/dist/indexer/stages/index.js.map +1 -1
  54. package/dist/indexer/stages/lsp-enrichment.d.ts +1 -1
  55. package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -1
  56. package/dist/indexer/stages/lsp-enrichment.js +44 -21
  57. package/dist/indexer/stages/lsp-enrichment.js.map +1 -1
  58. package/dist/indexer/stages/overlay-cleanup.d.ts +31 -0
  59. package/dist/indexer/stages/overlay-cleanup.d.ts.map +1 -0
  60. package/dist/indexer/stages/overlay-cleanup.js +64 -0
  61. package/dist/indexer/stages/overlay-cleanup.js.map +1 -0
  62. package/dist/indexer/stages/reverse-deps.d.ts +13 -0
  63. package/dist/indexer/stages/reverse-deps.d.ts.map +1 -0
  64. package/dist/indexer/stages/reverse-deps.js +81 -0
  65. package/dist/indexer/stages/reverse-deps.js.map +1 -0
  66. package/dist/indexer/stages/{scip-source.d.ts → scip-indexer.d.ts} +38 -9
  67. package/dist/indexer/stages/scip-indexer.d.ts.map +1 -0
  68. package/dist/indexer/stages/{scip-source.js → scip-indexer.js} +359 -98
  69. package/dist/indexer/stages/scip-indexer.js.map +1 -0
  70. package/dist/indexer/stages/source-index.d.ts +3 -3
  71. package/dist/indexer/stages/source-index.d.ts.map +1 -1
  72. package/dist/indexer/stages/source-index.js +188 -70
  73. package/dist/indexer/stages/source-index.js.map +1 -1
  74. package/dist/lsp/enrichment.d.ts.map +1 -1
  75. package/dist/lsp/enrichment.js +1 -18
  76. package/dist/lsp/enrichment.js.map +1 -1
  77. package/dist/parsing/extractors/go.d.ts.map +1 -1
  78. package/dist/parsing/extractors/go.js +0 -38
  79. package/dist/parsing/extractors/go.js.map +1 -1
  80. package/dist/parsing/extractors/javascript.d.ts.map +1 -1
  81. package/dist/parsing/extractors/javascript.js +0 -47
  82. package/dist/parsing/extractors/javascript.js.map +1 -1
  83. package/dist/parsing/extractors/python.d.ts.map +1 -1
  84. package/dist/parsing/extractors/python.js +0 -22
  85. package/dist/parsing/extractors/python.js.map +1 -1
  86. package/dist/parsing/extractors/types.d.ts +0 -16
  87. package/dist/parsing/extractors/types.d.ts.map +1 -1
  88. package/dist/parsing/extractors/types.js +1 -1
  89. package/dist/parsing/extractors/types.js.map +1 -1
  90. package/dist/parsing/extractors/typescript.d.ts.map +1 -1
  91. package/dist/parsing/extractors/typescript.js +18 -2
  92. package/dist/parsing/extractors/typescript.js.map +1 -1
  93. package/dist/resolution/call-graph.d.ts +3 -1
  94. package/dist/resolution/call-graph.d.ts.map +1 -1
  95. package/dist/resolution/call-graph.js +15 -13
  96. package/dist/resolution/call-graph.js.map +1 -1
  97. package/dist/resolution/resolution-method.d.ts +1 -1
  98. package/dist/resolution/resolution-method.d.ts.map +1 -1
  99. package/dist/resolution/resolution-method.js +2 -0
  100. package/dist/resolution/resolution-method.js.map +1 -1
  101. package/dist/resolution/resolver.d.ts +6 -0
  102. package/dist/resolution/resolver.d.ts.map +1 -1
  103. package/dist/resolution/resolver.js +21 -0
  104. package/dist/resolution/resolver.js.map +1 -1
  105. package/dist/runtime.d.ts +0 -2
  106. package/dist/runtime.d.ts.map +1 -1
  107. package/dist/runtime.js.map +1 -1
  108. package/dist/scip/compdb.d.ts +38 -0
  109. package/dist/scip/compdb.d.ts.map +1 -0
  110. package/dist/scip/compdb.js +138 -0
  111. package/dist/scip/compdb.js.map +1 -0
  112. package/dist/scip/enrichment.d.ts +6 -1
  113. package/dist/scip/enrichment.d.ts.map +1 -1
  114. package/dist/scip/enrichment.js +62 -5
  115. package/dist/scip/enrichment.js.map +1 -1
  116. package/dist/scip/installer.d.ts +59 -0
  117. package/dist/scip/installer.d.ts.map +1 -0
  118. package/dist/scip/installer.js +302 -0
  119. package/dist/scip/installer.js.map +1 -0
  120. package/dist/scip/registry.d.ts +1 -1
  121. package/dist/scip/registry.d.ts.map +1 -1
  122. package/dist/scip/registry.js +33 -5
  123. package/dist/scip/registry.js.map +1 -1
  124. package/dist/server/server.d.ts +3 -8
  125. package/dist/server/server.d.ts.map +1 -1
  126. package/dist/server/server.js +7 -66
  127. package/dist/server/server.js.map +1 -1
  128. package/dist/server/tool-registry.d.ts +2 -2
  129. package/dist/server/tool-registry.d.ts.map +1 -1
  130. package/dist/server/tool-registry.js +37 -41
  131. package/dist/server/tool-registry.js.map +1 -1
  132. package/dist/server/tools/cohesion.d.ts +46 -0
  133. package/dist/server/tools/cohesion.d.ts.map +1 -0
  134. package/dist/server/tools/cohesion.js +100 -0
  135. package/dist/server/tools/cohesion.js.map +1 -0
  136. package/dist/server/tools/dependents.d.ts +139 -0
  137. package/dist/server/tools/dependents.d.ts.map +1 -0
  138. package/dist/server/tools/dependents.js +354 -0
  139. package/dist/server/tools/dependents.js.map +1 -0
  140. package/dist/server/tools/diff.d.ts +73 -0
  141. package/dist/server/tools/diff.d.ts.map +1 -0
  142. package/dist/server/tools/diff.js +157 -0
  143. package/dist/server/tools/diff.js.map +1 -0
  144. package/dist/server/tools/graph.d.ts +7 -3
  145. package/dist/server/tools/graph.d.ts.map +1 -1
  146. package/dist/server/tools/graph.js +15 -85
  147. package/dist/server/tools/graph.js.map +1 -1
  148. package/dist/server/tools/metrics.d.ts +5 -30
  149. package/dist/server/tools/metrics.d.ts.map +1 -1
  150. package/dist/server/tools/metrics.js +21 -57
  151. package/dist/server/tools/metrics.js.map +1 -1
  152. package/dist/server/tools/structure.d.ts +77 -0
  153. package/dist/server/tools/structure.d.ts.map +1 -0
  154. package/dist/server/tools/structure.js +309 -0
  155. package/dist/server/tools/structure.js.map +1 -0
  156. package/dist/server/tools/test-map.d.ts +7 -0
  157. package/dist/server/tools/test-map.d.ts.map +1 -1
  158. package/dist/server/tools/test-map.js +18 -1
  159. package/dist/server/tools/test-map.js.map +1 -1
  160. package/dist/server/tools/trace.d.ts +84 -0
  161. package/dist/server/tools/trace.d.ts.map +1 -0
  162. package/dist/server/tools/trace.js +317 -0
  163. package/dist/server/tools/trace.js.map +1 -0
  164. package/dist/testing/coverage.d.ts +11 -0
  165. package/dist/testing/coverage.d.ts.map +1 -1
  166. package/dist/testing/coverage.js +34 -2
  167. package/dist/testing/coverage.js.map +1 -1
  168. package/dist/testing/test-mapper.d.ts +1 -1
  169. package/dist/testing/test-mapper.d.ts.map +1 -1
  170. package/dist/testing/test-mapper.js +1 -0
  171. package/dist/testing/test-mapper.js.map +1 -1
  172. package/package.json +3 -1
  173. package/dist/indexer/stages/scip-enrichment.d.ts +0 -43
  174. package/dist/indexer/stages/scip-enrichment.d.ts.map +0 -1
  175. package/dist/indexer/stages/scip-enrichment.js +0 -174
  176. package/dist/indexer/stages/scip-enrichment.js.map +0 -1
  177. package/dist/indexer/stages/scip-source.d.ts.map +0 -1
  178. package/dist/indexer/stages/scip-source.js.map +0 -1
  179. package/dist/server/tools/annotations.d.ts +0 -40
  180. package/dist/server/tools/annotations.d.ts.map +0 -1
  181. package/dist/server/tools/annotations.js +0 -35
  182. package/dist/server/tools/annotations.js.map +0 -1
  183. package/dist/server/tools/architecture.d.ts +0 -67
  184. package/dist/server/tools/architecture.d.ts.map +0 -1
  185. package/dist/server/tools/architecture.js +0 -209
  186. package/dist/server/tools/architecture.js.map +0 -1
  187. package/dist/server/tools/coverage.d.ts +0 -67
  188. package/dist/server/tools/coverage.d.ts.map +0 -1
  189. package/dist/server/tools/coverage.js +0 -74
  190. package/dist/server/tools/coverage.js.map +0 -1
  191. package/dist/server/tools/graph-analysis.d.ts +0 -64
  192. package/dist/server/tools/graph-analysis.d.ts.map +0 -1
  193. package/dist/server/tools/graph-analysis.js +0 -82
  194. package/dist/server/tools/graph-analysis.js.map +0 -1
  195. package/dist/server/tools/notes.d.ts +0 -165
  196. package/dist/server/tools/notes.d.ts.map +0 -1
  197. package/dist/server/tools/notes.js +0 -214
  198. package/dist/server/tools/notes.js.map +0 -1
  199. package/dist/server/tools/routes.d.ts +0 -38
  200. package/dist/server/tools/routes.d.ts.map +0 -1
  201. package/dist/server/tools/routes.js +0 -38
  202. package/dist/server/tools/routes.js.map +0 -1
  203. package/dist/server/tools/writeback.d.ts +0 -49
  204. package/dist/server/tools/writeback.d.ts.map +0 -1
  205. package/dist/server/tools/writeback.js +0 -68
  206. package/dist/server/tools/writeback.js.map +0 -1
@@ -7,18 +7,19 @@
7
7
  * ## Stage ordering (data-dependency chain)
8
8
  *
9
9
  * ```
10
- * ScipSourceStage → SourceIndexStage → DocsIndexStage
10
+ * ScipIndexerStage → SourceIndexStage → DocsIndexStage
11
11
  * → ImportResolutionStage → DependencyApiStage
12
12
  * → LspEnrichmentStage → ResolutionStage
13
13
  * → TestMapStage → HistoryStage → EmbeddingStage
14
14
  * ```
15
15
  *
16
- * `ScipSourceStage` runs first for SCIP-covered languages, populating
17
- * symbols AND refs directly with pre-resolved edges. `SourceIndexStage`
18
- * then handles remaining languages via tree-sitter.
16
+ * `ScipIndexerStage` runs first for SCIP-covered languages, populating
17
+ * symbols AND refs directly with pre-resolved edges and enrichment
18
+ * metadata (type signatures, definition locations) in a single pass.
19
+ * `SourceIndexStage` then adds tree-sitter metrics (complexity, nesting)
20
+ * to SCIP-sourced files and handles remaining languages.
19
21
  *
20
- * LSP enrichment is optional for both paths (adds type signatures to
21
- * SCIP-sourced symbols, enriches non-SCIP refs with definition data).
22
+ * LSP enrichment is optional (enriches non-SCIP refs with definition data).
22
23
  *
23
24
  * The resolution stage only processes refs that are still `unresolved`
24
25
  * (i.e. non-SCIP languages without LSP enrichment).
@@ -67,8 +68,6 @@ export interface PipelineContext {
67
68
  depth?: number;
68
69
  all?: boolean;
69
70
  };
70
- /** Whether to auto-seed documentation notes. */
71
- docsAutoNotes: boolean;
72
71
  /**
73
72
  * Absolute paths of changed files supplied by the caller for incremental
74
73
  * updates. Undefined in build mode.
@@ -91,21 +90,40 @@ export interface PipelineContext {
91
90
  changedDocPaths: string[];
92
91
  /**
93
92
  * Languages for which SCIP enrichment already provided data.
94
- * Set by `ScipEnrichmentStage`; read by `LspEnrichmentStage` to skip
93
+ * Set by `ScipIndexerStage`; read by `LspEnrichmentStage` to skip
95
94
  * languages that don't need LSP fallback.
96
95
  */
97
96
  scipCoveredLanguages?: ReadonlySet<string>;
98
97
  /**
99
98
  * Languages fully sourced from SCIP (symbols + refs).
100
- * Set by `ScipSourceStage`; read by `SourceIndexStage` to skip
99
+ * Set by `ScipIndexerStage`; read by `SourceIndexStage` to skip
101
100
  * tree-sitter extraction for these languages, and by `LspEnrichmentStage`.
102
101
  */
103
102
  scipSourcedLanguages?: ReadonlySet<string>;
104
103
  /**
105
104
  * Absolute file paths sourced from SCIP.
106
- * Set by `ScipSourceStage`; read by `SourceIndexStage` to skip files.
105
+ * Set by `ScipIndexerStage`; read by `SourceIndexStage` to skip files.
107
106
  */
108
107
  scipSourcedFiles?: ReadonlySet<string>;
108
+ /**
109
+ * In-memory cache of source file contents (path → source text).
110
+ * Populated by SourceIndexStage / ScipIndexerStage during parsing.
111
+ * Later stages (LSP enrichment) read from here to
112
+ * avoid redundant `readFileSync` calls.
113
+ */
114
+ sourceCache: Map<string, string>;
115
+ /**
116
+ * The layer that stages should write to:
117
+ * - `'baseline'` for full SCIP builds.
118
+ * - `'overlay'` for tree-sitter + LSP incremental updates.
119
+ */
120
+ layer: 'baseline' | 'overlay';
121
+ /**
122
+ * Baseline generation counter produced by SCIP.
123
+ * Baseline rows are written with this value.
124
+ * Overlay rows always use `generation = 0`.
125
+ */
126
+ generation: number;
109
127
  }
110
128
  /**
111
129
  * A composable pipeline stage.
@@ -130,30 +148,35 @@ export interface PipelineStage {
130
148
  dispose?(): Promise<void>;
131
149
  }
132
150
  /**
133
- * Orchestrates a sequence of `PipelineStage` instances through a shared
151
+ * A pipeline entry is either a single stage or an array of stages to run
152
+ * concurrently. Parallel stages must be independent (write to disjoint
153
+ * tables, read disjoint inputs).
154
+ */
155
+ export type PipelineEntry = PipelineStage | PipelineStage[];
156
+ /**
157
+ * Orchestrates a sequence of `PipelineEntry` instances through a shared
134
158
  * `PipelineContext`.
135
159
  *
136
- * Replaces the god-method `IndexBuilder.build()` with a declarative,
137
- * composable pipeline whose ordering is enforced structurally.
160
+ * Each entry is either a single stage or an array of stages that run
161
+ * concurrently. Entries are executed in order; within a parallel group
162
+ * all stages start simultaneously and the group completes when all finish.
138
163
  *
139
164
  * @example
140
165
  * ```ts
141
166
  * const pipeline = new IndexPipeline([
142
- * new SourceIndexStage(),
143
- * new DocsIndexStage(),
167
+ * new ScipIndexerStage(),
168
+ * [new SourceIndexStage(), new DocsIndexStage()], // run in parallel
144
169
  * new ImportResolutionStage(),
145
- * new LspEnrichmentStage(),
146
- * new ResolutionStage(),
147
170
  * new EmbeddingStage(),
148
171
  * ]);
149
172
  * await pipeline.run(context, 'build');
150
173
  * ```
151
174
  */
152
175
  export declare class IndexPipeline {
153
- private readonly stages;
154
- constructor(stages: PipelineStage[]);
176
+ private readonly entries;
177
+ constructor(entries: PipelineEntry[]);
155
178
  /**
156
- * Execute all stages in order. If any stage throws, the remaining stages
179
+ * Execute all entries in order. If any stage throws, the remaining entries
157
180
  * are skipped but every stage's `dispose()` hook is still called.
158
181
  */
159
182
  run(context: PipelineContext, mode: 'build' | 'update'): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,YAAY,EAAE,YAAY,CAAC;IAC3B,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACjC,iDAAiD;IACjD,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnC,mCAAmC;IACnC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,uBAAuB;IACvB,GAAG,EAAE,UAAU,CAAC;IAEhB;;;;;OAKG;IACH,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEjD,8DAA8D;IAC9D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gCAAgC;IAChC,OAAO,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrD,gDAAgD;IAChD,aAAa,EAAE,OAAO,CAAC;IAIvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAE7B;;;OAGG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE3C;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE3C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3E;;;OAGG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,aAAa,EAAE;IAInC;;;OAGG;IACG,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5E,kFAAkF;IAClF,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;CACF"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"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"}
@@ -7,18 +7,19 @@
7
7
  * ## Stage ordering (data-dependency chain)
8
8
  *
9
9
  * ```
10
- * ScipSourceStage → SourceIndexStage → DocsIndexStage
10
+ * ScipIndexerStage → SourceIndexStage → DocsIndexStage
11
11
  * → ImportResolutionStage → DependencyApiStage
12
12
  * → LspEnrichmentStage → ResolutionStage
13
13
  * → TestMapStage → HistoryStage → EmbeddingStage
14
14
  * ```
15
15
  *
16
- * `ScipSourceStage` runs first for SCIP-covered languages, populating
17
- * symbols AND refs directly with pre-resolved edges. `SourceIndexStage`
18
- * then handles remaining languages via tree-sitter.
16
+ * `ScipIndexerStage` runs first for SCIP-covered languages, populating
17
+ * symbols AND refs directly with pre-resolved edges and enrichment
18
+ * metadata (type signatures, definition locations) in a single pass.
19
+ * `SourceIndexStage` then adds tree-sitter metrics (complexity, nesting)
20
+ * to SCIP-sourced files and handles remaining languages.
19
21
  *
20
- * LSP enrichment is optional for both paths (adds type signatures to
21
- * SCIP-sourced symbols, enriches non-SCIP refs with definition data).
22
+ * LSP enrichment is optional (enriches non-SCIP refs with definition data).
22
23
  *
23
24
  * The resolution stage only processes refs that are still `unresolved`
24
25
  * (i.e. non-SCIP languages without LSP enrichment).
@@ -26,49 +27,69 @@
26
27
  import { getLogger } from '../logger.js';
27
28
  // ─── IndexPipeline ────────────────────────────────────────────────────────────
28
29
  /**
29
- * Orchestrates a sequence of `PipelineStage` instances through a shared
30
+ * Orchestrates a sequence of `PipelineEntry` instances through a shared
30
31
  * `PipelineContext`.
31
32
  *
32
- * Replaces the god-method `IndexBuilder.build()` with a declarative,
33
- * composable pipeline whose ordering is enforced structurally.
33
+ * Each entry is either a single stage or an array of stages that run
34
+ * concurrently. Entries are executed in order; within a parallel group
35
+ * all stages start simultaneously and the group completes when all finish.
34
36
  *
35
37
  * @example
36
38
  * ```ts
37
39
  * const pipeline = new IndexPipeline([
38
- * new SourceIndexStage(),
39
- * new DocsIndexStage(),
40
+ * new ScipIndexerStage(),
41
+ * [new SourceIndexStage(), new DocsIndexStage()], // run in parallel
40
42
  * new ImportResolutionStage(),
41
- * new LspEnrichmentStage(),
42
- * new ResolutionStage(),
43
43
  * new EmbeddingStage(),
44
44
  * ]);
45
45
  * await pipeline.run(context, 'build');
46
46
  * ```
47
47
  */
48
48
  export class IndexPipeline {
49
- stages;
50
- constructor(stages) {
51
- this.stages = stages;
49
+ entries;
50
+ constructor(entries) {
51
+ this.entries = entries;
52
52
  }
53
53
  /**
54
- * Execute all stages in order. If any stage throws, the remaining stages
54
+ * Execute all entries in order. If any stage throws, the remaining entries
55
55
  * are skipped but every stage's `dispose()` hook is still called.
56
56
  */
57
57
  async run(context, mode) {
58
58
  const log = context.log ?? getLogger();
59
59
  const startMs = performance.now();
60
60
  try {
61
- for (const stage of this.stages) {
62
- const stageStart = performance.now();
63
- log.indexing(`stage:${stage.name} started`);
64
- await stage.execute(context, mode);
65
- const durationMs = Math.round(performance.now() - stageStart);
66
- log.indexing(`stage:${stage.name} complete`, { durationMs });
61
+ for (const entry of this.entries) {
62
+ const stages = Array.isArray(entry) ? entry : [entry];
63
+ if (stages.length === 1) {
64
+ // Single stage — run directly.
65
+ const stage = stages[0];
66
+ const stageStart = performance.now();
67
+ log.indexing(`stage:${stage.name} started`);
68
+ await stage.execute(context, mode);
69
+ const durationMs = Math.round(performance.now() - stageStart);
70
+ log.indexing(`stage:${stage.name} complete`, { durationMs });
71
+ }
72
+ else {
73
+ // Parallel group — run all concurrently.
74
+ const groupNames = stages.map(s => s.name).join(', ');
75
+ log.indexing(`stage-group started: [${groupNames}]`);
76
+ const groupStart = performance.now();
77
+ await Promise.all(stages.map(async (stage) => {
78
+ const stageStart = performance.now();
79
+ log.indexing(`stage:${stage.name} started`);
80
+ await stage.execute(context, mode);
81
+ const durationMs = Math.round(performance.now() - stageStart);
82
+ log.indexing(`stage:${stage.name} complete`, { durationMs });
83
+ }));
84
+ const groupMs = Math.round(performance.now() - groupStart);
85
+ log.indexing(`stage-group complete: [${groupNames}]`, { durationMs: groupMs });
86
+ }
67
87
  }
68
88
  }
69
89
  finally {
70
90
  // Always clean up, even on failure.
71
- for (const stage of this.stages) {
91
+ const allStages = this.entries.flatMap(e => Array.isArray(e) ? e : [e]);
92
+ for (const stage of allStages) {
72
93
  if (stage.dispose) {
73
94
  try {
74
95
  await stage.dispose();
@@ -79,12 +100,13 @@ export class IndexPipeline {
79
100
  }
80
101
  }
81
102
  const totalMs = Math.round(performance.now() - startMs);
82
- log.indexing('pipeline complete', { mode, totalStages: this.stages.length, durationMs: totalMs });
103
+ const stageCount = this.entries.flatMap(e => Array.isArray(e) ? e : [e]).length;
104
+ log.indexing('pipeline complete', { mode, totalStages: stageCount, durationMs: totalMs });
83
105
  }
84
106
  }
85
107
  /** Returns the ordered list of stage names (useful for introspection / tests). */
86
108
  get stageNames() {
87
- return this.stages.map(s => s.name);
109
+ return this.entries.flatMap(e => Array.isArray(e) ? e.map(s => s.name) : [e.name]);
88
110
  }
89
111
  }
90
112
  //# sourceMappingURL=pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAQH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAiHzC,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,aAAa;IACP,MAAM,CAAkB;IAEzC,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,OAAwB,EAAE,IAAwB;QAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBACrC,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC;gBAC5C,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC;gBAC9D,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,CAAC,IAAI,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,oCAAoC;YACpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,IAAI,CAAC;wBACH,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,yBAAyB;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC;YACxD,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"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"}
@@ -2,19 +2,17 @@
2
2
  * @module indexer/stages/docs-index
3
3
  *
4
4
  * Pipeline stage: walk documentation files, chunk by headings, insert into
5
- * the database, and optionally seed notes from documentation content.
5
+ * the database.
6
6
  */
7
7
  import type { PipelineContext, PipelineStage } from '../pipeline.js';
8
8
  import type { Database } from '../../db/schema.js';
9
9
  import type { DocumentationFile } from '../../docs/docs.js';
10
10
  /**
11
11
  * Walk documentation files, chunk by headings, and persist to the database.
12
- * Optionally seeds notes from documentation content.
13
12
  */
14
13
  export declare class DocsIndexStage implements PipelineStage {
15
14
  readonly name = "docs-index";
16
15
  execute(context: PipelineContext, mode: 'build' | 'update'): Promise<void>;
17
16
  }
18
17
  export declare function processDocumentationFile(db: Database.Database, doc: DocumentationFile, branch: string): void;
19
- export declare function upsertSeededDocumentationNote(db: Database.Database, doc: DocumentationFile, branch: string): void;
20
18
  //# sourceMappingURL=docs-index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs-index.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/docs-index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAiB5D;;;GAGG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAsCjF;AAID,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,CAsEN;AAED,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,CAsBN"}
1
+ {"version":3,"file":"docs-index.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/docs-index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAW5D;;GAEG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAkCjF;AAID,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,CAsEN"}
@@ -2,14 +2,12 @@
2
2
  * @module indexer/stages/docs-index
3
3
  *
4
4
  * Pipeline stage: walk documentation files, chunk by headings, insert into
5
- * the database, and optionally seed notes from documentation content.
5
+ * the database.
6
6
  */
7
7
  import { walkDocumentationFiles } from '../../discovery/walker.js';
8
- import { inferSeededDocNoteKey, buildDocNoteScope } from '../../docs/docs.js';
9
8
  // ─── Stage ────────────────────────────────────────────────────────────────────
10
9
  /**
11
10
  * Walk documentation files, chunk by headings, and persist to the database.
12
- * Optionally seeds notes from documentation content.
13
11
  */
14
12
  export class DocsIndexStage {
15
13
  name = 'docs-index';
@@ -23,9 +21,6 @@ export class DocsIndexStage {
23
21
  for (const doc of docs) {
24
22
  seenDocPaths.add(doc.path);
25
23
  processDocumentationFile(db, doc, branch);
26
- if (context.docsAutoNotes) {
27
- upsertSeededDocumentationNote(db, doc, branch);
28
- }
29
24
  }
30
25
  removeStaleDocumentation(db, branch, seenDocPaths);
31
26
  })();
@@ -40,8 +35,6 @@ export class DocsIndexStage {
40
35
  const changedDoc = docsByPath.get(filePath);
41
36
  if (changedDoc) {
42
37
  processDocumentationFile(db, changedDoc, branch);
43
- if (context.docsAutoNotes)
44
- upsertSeededDocumentationNote(db, changedDoc, branch);
45
38
  context.changedDocPaths.push(filePath);
46
39
  }
47
40
  else {
@@ -96,23 +89,6 @@ export function processDocumentationFile(db, doc, branch) {
96
89
  WHERE id IN (${staleSectionIds.map(() => '?').join(', ')})`).run(...staleSectionIds);
97
90
  }
98
91
  }
99
- export function upsertSeededDocumentationNote(db, doc, branch) {
100
- const key = inferSeededDocNoteKey(doc);
101
- if (!key)
102
- return;
103
- const scope = buildDocNoteScope(doc.path, branch);
104
- const existing = db.prepare('SELECT content, source_hash FROM notes WHERE key = ? AND scope = ?').get(key, scope);
105
- if (existing?.content === doc.content && existing.source_hash === doc.hash) {
106
- return;
107
- }
108
- db.prepare(`INSERT INTO notes (key, scope, content, model, source_hash, created_at, updated_at)
109
- VALUES (?, ?, ?, ?, ?, unixepoch(), unixepoch())
110
- ON CONFLICT(key, scope) DO UPDATE SET
111
- content = excluded.content,
112
- model = excluded.model,
113
- source_hash = excluded.source_hash,
114
- updated_at = unixepoch()`).run(key, scope, doc.content, 'system:auto-doc-seed', doc.hash);
115
- }
116
92
  function deleteDocumentationByPath(db, docPath, branch) {
117
93
  const row = db.prepare('SELECT id FROM docs WHERE path = ? AND branch = ?')
118
94
  .get(docPath, branch);
@@ -1 +1 @@
1
- {"version":3,"file":"docs-index.js","sourceRoot":"","sources":["../../../src/indexer/stages/docs-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docs-index.js","sourceRoot":"","sources":["../../../src/indexer/stages/docs-index.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,14 @@
3
3
  *
4
4
  * Concrete pipeline stages with real implementations.
5
5
  */
6
- export { ScipSourceStage } from './scip-source.js';
6
+ export { ScipIndexerStage } from './scip-indexer.js';
7
7
  export { SourceIndexStage } from './source-index.js';
8
8
  export { DocsIndexStage } from './docs-index.js';
9
9
  export { ImportResolutionStage } from './import-resolution.js';
10
10
  export { DependencyApiStage } from './dependency-api.js';
11
- export { ScipEnrichmentStage } from './scip-enrichment.js';
12
11
  export { LspEnrichmentStage } from './lsp-enrichment.js';
13
12
  export { EmbeddingStage } from './embedding.js';
13
+ export { ReverseDepsStage } from './reverse-deps.js';
14
+ export { OverlayCleanupStage } from './overlay-cleanup.js';
15
+ export type { OverlayCleanupOptions } from './overlay-cleanup.js';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -3,12 +3,13 @@
3
3
  *
4
4
  * Concrete pipeline stages with real implementations.
5
5
  */
6
- export { ScipSourceStage } from './scip-source.js';
6
+ export { ScipIndexerStage } from './scip-indexer.js';
7
7
  export { SourceIndexStage } from './source-index.js';
8
8
  export { DocsIndexStage } from './docs-index.js';
9
9
  export { ImportResolutionStage } from './import-resolution.js';
10
10
  export { DependencyApiStage } from './dependency-api.js';
11
- export { ScipEnrichmentStage } from './scip-enrichment.js';
12
11
  export { LspEnrichmentStage } from './lsp-enrichment.js';
13
12
  export { EmbeddingStage } from './embedding.js';
13
+ export { ReverseDepsStage } from './reverse-deps.js';
14
+ export { OverlayCleanupStage } from './overlay-cleanup.js';
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexer/stages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexer/stages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -44,5 +44,5 @@ export declare class LspEnrichmentStage implements PipelineStage {
44
44
  export declare function enrichProjectRefs(db: Database.Database, branch: string, files: Array<{
45
45
  path: string;
46
46
  language: string;
47
- }>, coordinator: LspEnrichmentCoordinator): Promise<void>;
47
+ }>, coordinator: LspEnrichmentCoordinator, sourceCache?: Map<string, string>): Promise<void>;
48
48
  //# sourceMappingURL=lsp-enrichment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lsp-enrichment.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/lsp-enrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAGnE;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,oBAAoB;IAEjC,OAAO,CAAC,WAAW,CAAyC;IAEtD,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD3E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B;AAID;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,WAAW,EAAE,wBAAwB,GACpC,OAAO,CAAC,IAAI,CAAC,CAgMf"}
1
+ {"version":3,"file":"lsp-enrichment.d.ts","sourceRoot":"","sources":["../../../src/indexer/stages/lsp-enrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,oBAAoB;IAEjC,OAAO,CAAC,WAAW,CAAyC;IAEtD,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwE3E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B;AAID;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,WAAW,EAAE,wBAAwB,EACrC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAyLf"}
@@ -24,7 +24,6 @@
24
24
  */
25
25
  import * as fs from 'node:fs';
26
26
  import { LspEnrichmentCoordinator } from '../../lsp/enrichment.js';
27
- import { buildStructuralEmbeddingText } from '../../embeddings/embedder.js';
28
27
  /**
29
28
  * Enriches indexed artefacts with LSP-derived metadata.
30
29
  *
@@ -37,6 +36,25 @@ export class LspEnrichmentStage {
37
36
  async execute(context, _mode) {
38
37
  if (!context.lsp?.enabled || context.files.length === 0)
39
38
  return;
39
+ // In baseline builds, SCIP is the sole resolution authority.
40
+ // LSP enrichment is only used in overlay mode for cross-file resolution.
41
+ if (context.layer === 'baseline') {
42
+ // Still run for non-SCIP languages in baseline builds (legacy behavior)
43
+ const scipSourced = context.scipSourcedLanguages;
44
+ const scipCovered = context.scipCoveredLanguages;
45
+ const nonScipFiles = context.files.filter(f => !(scipSourced?.has(f.language) || scipCovered?.has(f.language)));
46
+ if (nonScipFiles.length === 0)
47
+ return;
48
+ const languages = new Set(nonScipFiles.map(f => f.language));
49
+ if (context.indexDependencies)
50
+ languages.add('typescript');
51
+ this.coordinator = new LspEnrichmentCoordinator(context.lsp, context.walkerConfig.rootDir);
52
+ await this.coordinator.start(languages);
53
+ if (nonScipFiles.length > 0) {
54
+ await enrichProjectRefs(context.db, context.branch, nonScipFiles, this.coordinator, context.sourceCache);
55
+ }
56
+ return;
57
+ }
40
58
  const scipSourced = context.scipSourcedLanguages;
41
59
  const scipCovered = context.scipCoveredLanguages;
42
60
  // Split files into two groups:
@@ -67,14 +85,14 @@ export class LspEnrichmentStage {
67
85
  await this.coordinator.start(languages);
68
86
  // Full enrichment for non-SCIP files (all targets).
69
87
  if (fullEnrichFiles.length > 0) {
70
- await enrichProjectRefs(context.db, context.branch, fullEnrichFiles, this.coordinator);
88
+ await enrichProjectRefs(context.db, context.branch, fullEnrichFiles, this.coordinator, context.sourceCache);
71
89
  }
72
90
  // Targeted enrichment for SCIP-sourced files (only unresolved refs).
73
91
  if (scipFiles.length > 0) {
74
92
  context.log.indexing('lsp-enrichment: enriching unresolved SCIP refs', {
75
93
  files: scipFiles.length,
76
94
  });
77
- await enrichUnresolvedScipRefs(context.db, context.branch, scipFiles, this.coordinator);
95
+ await enrichUnresolvedScipRefs(context.db, context.branch, scipFiles, this.coordinator, context.sourceCache);
78
96
  }
79
97
  }
80
98
  async dispose() {
@@ -89,7 +107,7 @@ export class LspEnrichmentStage {
89
107
  * Enrich symbols, call refs, type refs, and relationships for every file in
90
108
  * the context with LSP-derived metadata.
91
109
  */
92
- export async function enrichProjectRefs(db, branch, files, coordinator) {
110
+ export async function enrichProjectRefs(db, branch, files, coordinator, sourceCache) {
93
111
  const selectSymbols = db.prepare(`SELECT s.id, s.name, s.signature, s.start_line
94
112
  FROM symbols s
95
113
  JOIN files f ON f.id = s.file_id
@@ -114,7 +132,6 @@ export async function enrichProjectRefs(db, branch, files, coordinator) {
114
132
  const updateSymbol = db.prepare(`UPDATE symbols
115
133
  SET resolved_type_signature = ?, resolved_return_type = ?, definition_uri = ?, definition_path = ?
116
134
  WHERE id = ?`);
117
- const updateSymbolFts = db.prepare('UPDATE symbols_fts SET signature = ? WHERE rowid = ?');
118
135
  const updateCallRef = db.prepare(`UPDATE symbol_refs
119
136
  SET resolved_type_signature = ?, resolved_return_type = ?, definition_uri = ?, definition_path = ?, definition_line = ?, definition_character = ?
120
137
  WHERE id = ?`);
@@ -132,11 +149,17 @@ export async function enrichProjectRefs(db, branch, files, coordinator) {
132
149
  if (!file || !fs.existsSync(file.path))
133
150
  continue;
134
151
  let source;
135
- try {
136
- source = fs.readFileSync(file.path, 'utf8');
152
+ const cached = sourceCache?.get(file.path);
153
+ if (cached !== undefined) {
154
+ source = cached;
137
155
  }
138
- catch {
139
- continue;
156
+ else {
157
+ try {
158
+ source = fs.readFileSync(file.path, 'utf8');
159
+ }
160
+ catch {
161
+ continue;
162
+ }
140
163
  }
141
164
  const tagged = [];
142
165
  const symbols = selectSymbols.all(file.path, branch);
@@ -174,12 +197,6 @@ export async function enrichProjectRefs(db, branch, files, coordinator) {
174
197
  case 'symbol':
175
198
  updates.push(() => {
176
199
  updateSymbol.run(m.resolvedTypeSignature, m.resolvedReturnType, m.definitionUri, m.definitionPath, tag.rowId);
177
- updateSymbolFts.run(buildStructuralEmbeddingText({
178
- name: tag.name,
179
- signature: tag.signature ?? null,
180
- resolvedTypeSignature: m.resolvedTypeSignature,
181
- resolvedReturnType: m.resolvedReturnType,
182
- }), tag.rowId);
183
200
  });
184
201
  break;
185
202
  case 'callRef':
@@ -207,7 +224,7 @@ export async function enrichProjectRefs(db, branch, files, coordinator) {
207
224
  /**
208
225
  * For SCIP-sourced files, only enrich refs that are still `unresolved`.
209
226
  *
210
- * SCIP pre-resolves most refs during `ScipSourceStage`, but some refs
227
+ * SCIP pre-resolves most refs during `ScipIndexerStage`, but some refs
211
228
  * (notably member-access calls like `db.prepare(...)`) remain unresolved
212
229
  * because SCIP tracks the receiver and method as separate occurrences.
213
230
  *
@@ -215,7 +232,7 @@ export async function enrichProjectRefs(db, branch, files, coordinator) {
215
232
  * call-site position. We write `definition_path` / `definition_line`
216
233
  * so the downstream resolution stage can map them to a `callee_id`.
217
234
  */
218
- async function enrichUnresolvedScipRefs(db, branch, files, coordinator) {
235
+ async function enrichUnresolvedScipRefs(db, branch, files, coordinator, sourceCache) {
219
236
  // Only select refs that SCIP left unresolved.
220
237
  const selectUnresolvedCallRefs = db.prepare(`SELECT sr.id, sr.call_line, sr.call_character
221
238
  FROM symbol_refs sr
@@ -250,11 +267,17 @@ async function enrichUnresolvedScipRefs(db, branch, files, coordinator) {
250
267
  if (!file || !fs.existsSync(file.path))
251
268
  continue;
252
269
  let source;
253
- try {
254
- source = fs.readFileSync(file.path, 'utf8');
270
+ const cached = sourceCache?.get(file.path);
271
+ if (cached !== undefined) {
272
+ source = cached;
255
273
  }
256
- catch {
257
- continue;
274
+ else {
275
+ try {
276
+ source = fs.readFileSync(file.path, 'utf8');
277
+ }
278
+ catch {
279
+ continue;
280
+ }
258
281
  }
259
282
  const tagged = [];
260
283
  const callRefs = selectUnresolvedCallRefs.all(file.path, branch);