@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.
- package/README.md +38 -150
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +80 -32
- package/dist/cli.js.map +1 -1
- package/dist/db/read-only.d.ts +22 -43
- package/dist/db/read-only.d.ts.map +1 -1
- package/dist/db/read-only.js +80 -156
- package/dist/db/read-only.js.map +1 -1
- package/dist/db/schema.d.ts +9 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +171 -85
- package/dist/db/schema.js.map +1 -1
- package/dist/discovery/poller.d.ts +6 -16
- package/dist/discovery/poller.d.ts.map +1 -1
- package/dist/discovery/poller.js +21 -52
- package/dist/discovery/poller.js.map +1 -1
- package/dist/discovery/scip-flush.d.ts +44 -0
- package/dist/discovery/scip-flush.d.ts.map +1 -0
- package/dist/discovery/scip-flush.js +67 -0
- package/dist/discovery/scip-flush.js.map +1 -0
- package/dist/discovery/watcher.d.ts +6 -16
- package/dist/discovery/watcher.d.ts.map +1 -1
- package/dist/discovery/watcher.js +22 -54
- package/dist/discovery/watcher.js.map +1 -1
- package/dist/docs/docs.d.ts +0 -2
- package/dist/docs/docs.d.ts.map +1 -1
- package/dist/docs/docs.js +0 -27
- package/dist/docs/docs.js.map +1 -1
- package/dist/embeddings/embedder.d.ts +12 -8
- package/dist/embeddings/embedder.d.ts.map +1 -1
- package/dist/embeddings/embedder.js +35 -19
- package/dist/embeddings/embedder.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/indexer/index.d.ts +19 -10
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +135 -28
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/pipeline.d.ts +44 -21
- package/dist/indexer/pipeline.d.ts.map +1 -1
- package/dist/indexer/pipeline.js +48 -26
- package/dist/indexer/pipeline.js.map +1 -1
- package/dist/indexer/stages/docs-index.d.ts +1 -3
- package/dist/indexer/stages/docs-index.d.ts.map +1 -1
- package/dist/indexer/stages/docs-index.js +1 -25
- package/dist/indexer/stages/docs-index.js.map +1 -1
- package/dist/indexer/stages/index.d.ts +4 -2
- package/dist/indexer/stages/index.d.ts.map +1 -1
- package/dist/indexer/stages/index.js +3 -2
- package/dist/indexer/stages/index.js.map +1 -1
- package/dist/indexer/stages/lsp-enrichment.d.ts +1 -1
- package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -1
- package/dist/indexer/stages/lsp-enrichment.js +44 -21
- package/dist/indexer/stages/lsp-enrichment.js.map +1 -1
- package/dist/indexer/stages/overlay-cleanup.d.ts +31 -0
- package/dist/indexer/stages/overlay-cleanup.d.ts.map +1 -0
- package/dist/indexer/stages/overlay-cleanup.js +64 -0
- package/dist/indexer/stages/overlay-cleanup.js.map +1 -0
- package/dist/indexer/stages/reverse-deps.d.ts +13 -0
- package/dist/indexer/stages/reverse-deps.d.ts.map +1 -0
- package/dist/indexer/stages/reverse-deps.js +81 -0
- package/dist/indexer/stages/reverse-deps.js.map +1 -0
- package/dist/indexer/stages/{scip-source.d.ts → scip-indexer.d.ts} +38 -9
- package/dist/indexer/stages/scip-indexer.d.ts.map +1 -0
- package/dist/indexer/stages/{scip-source.js → scip-indexer.js} +359 -98
- package/dist/indexer/stages/scip-indexer.js.map +1 -0
- package/dist/indexer/stages/source-index.d.ts +3 -3
- package/dist/indexer/stages/source-index.d.ts.map +1 -1
- package/dist/indexer/stages/source-index.js +188 -70
- package/dist/indexer/stages/source-index.js.map +1 -1
- package/dist/lsp/enrichment.d.ts.map +1 -1
- package/dist/lsp/enrichment.js +1 -18
- package/dist/lsp/enrichment.js.map +1 -1
- package/dist/parsing/extractors/go.d.ts.map +1 -1
- package/dist/parsing/extractors/go.js +0 -38
- package/dist/parsing/extractors/go.js.map +1 -1
- package/dist/parsing/extractors/javascript.d.ts.map +1 -1
- package/dist/parsing/extractors/javascript.js +0 -47
- package/dist/parsing/extractors/javascript.js.map +1 -1
- package/dist/parsing/extractors/python.d.ts.map +1 -1
- package/dist/parsing/extractors/python.js +0 -22
- package/dist/parsing/extractors/python.js.map +1 -1
- package/dist/parsing/extractors/types.d.ts +0 -16
- package/dist/parsing/extractors/types.d.ts.map +1 -1
- package/dist/parsing/extractors/types.js +1 -1
- package/dist/parsing/extractors/types.js.map +1 -1
- package/dist/parsing/extractors/typescript.d.ts.map +1 -1
- package/dist/parsing/extractors/typescript.js +18 -2
- package/dist/parsing/extractors/typescript.js.map +1 -1
- package/dist/resolution/call-graph.d.ts +3 -1
- package/dist/resolution/call-graph.d.ts.map +1 -1
- package/dist/resolution/call-graph.js +15 -13
- package/dist/resolution/call-graph.js.map +1 -1
- package/dist/resolution/resolution-method.d.ts +1 -1
- package/dist/resolution/resolution-method.d.ts.map +1 -1
- package/dist/resolution/resolution-method.js +2 -0
- package/dist/resolution/resolution-method.js.map +1 -1
- package/dist/resolution/resolver.d.ts +6 -0
- package/dist/resolution/resolver.d.ts.map +1 -1
- package/dist/resolution/resolver.js +21 -0
- package/dist/resolution/resolver.js.map +1 -1
- package/dist/runtime.d.ts +0 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/scip/compdb.d.ts +38 -0
- package/dist/scip/compdb.d.ts.map +1 -0
- package/dist/scip/compdb.js +138 -0
- package/dist/scip/compdb.js.map +1 -0
- package/dist/scip/enrichment.d.ts +6 -1
- package/dist/scip/enrichment.d.ts.map +1 -1
- package/dist/scip/enrichment.js +62 -5
- package/dist/scip/enrichment.js.map +1 -1
- package/dist/scip/installer.d.ts +59 -0
- package/dist/scip/installer.d.ts.map +1 -0
- package/dist/scip/installer.js +302 -0
- package/dist/scip/installer.js.map +1 -0
- package/dist/scip/registry.d.ts +1 -1
- package/dist/scip/registry.d.ts.map +1 -1
- package/dist/scip/registry.js +33 -5
- package/dist/scip/registry.js.map +1 -1
- package/dist/server/server.d.ts +3 -8
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +7 -66
- package/dist/server/server.js.map +1 -1
- package/dist/server/tool-registry.d.ts +2 -2
- package/dist/server/tool-registry.d.ts.map +1 -1
- package/dist/server/tool-registry.js +37 -41
- package/dist/server/tool-registry.js.map +1 -1
- package/dist/server/tools/cohesion.d.ts +46 -0
- package/dist/server/tools/cohesion.d.ts.map +1 -0
- package/dist/server/tools/cohesion.js +100 -0
- package/dist/server/tools/cohesion.js.map +1 -0
- package/dist/server/tools/dependents.d.ts +139 -0
- package/dist/server/tools/dependents.d.ts.map +1 -0
- package/dist/server/tools/dependents.js +354 -0
- package/dist/server/tools/dependents.js.map +1 -0
- package/dist/server/tools/diff.d.ts +73 -0
- package/dist/server/tools/diff.d.ts.map +1 -0
- package/dist/server/tools/diff.js +157 -0
- package/dist/server/tools/diff.js.map +1 -0
- package/dist/server/tools/graph.d.ts +7 -3
- package/dist/server/tools/graph.d.ts.map +1 -1
- package/dist/server/tools/graph.js +15 -85
- package/dist/server/tools/graph.js.map +1 -1
- package/dist/server/tools/metrics.d.ts +5 -30
- package/dist/server/tools/metrics.d.ts.map +1 -1
- package/dist/server/tools/metrics.js +21 -57
- package/dist/server/tools/metrics.js.map +1 -1
- package/dist/server/tools/structure.d.ts +77 -0
- package/dist/server/tools/structure.d.ts.map +1 -0
- package/dist/server/tools/structure.js +309 -0
- package/dist/server/tools/structure.js.map +1 -0
- package/dist/server/tools/test-map.d.ts +7 -0
- package/dist/server/tools/test-map.d.ts.map +1 -1
- package/dist/server/tools/test-map.js +18 -1
- package/dist/server/tools/test-map.js.map +1 -1
- package/dist/server/tools/trace.d.ts +84 -0
- package/dist/server/tools/trace.d.ts.map +1 -0
- package/dist/server/tools/trace.js +317 -0
- package/dist/server/tools/trace.js.map +1 -0
- package/dist/testing/coverage.d.ts +11 -0
- package/dist/testing/coverage.d.ts.map +1 -1
- package/dist/testing/coverage.js +34 -2
- package/dist/testing/coverage.js.map +1 -1
- package/dist/testing/test-mapper.d.ts +1 -1
- package/dist/testing/test-mapper.d.ts.map +1 -1
- package/dist/testing/test-mapper.js +1 -0
- package/dist/testing/test-mapper.js.map +1 -1
- package/package.json +3 -1
- package/dist/indexer/stages/scip-enrichment.d.ts +0 -43
- package/dist/indexer/stages/scip-enrichment.d.ts.map +0 -1
- package/dist/indexer/stages/scip-enrichment.js +0 -174
- package/dist/indexer/stages/scip-enrichment.js.map +0 -1
- package/dist/indexer/stages/scip-source.d.ts.map +0 -1
- package/dist/indexer/stages/scip-source.js.map +0 -1
- package/dist/server/tools/annotations.d.ts +0 -40
- package/dist/server/tools/annotations.d.ts.map +0 -1
- package/dist/server/tools/annotations.js +0 -35
- package/dist/server/tools/annotations.js.map +0 -1
- package/dist/server/tools/architecture.d.ts +0 -67
- package/dist/server/tools/architecture.d.ts.map +0 -1
- package/dist/server/tools/architecture.js +0 -209
- package/dist/server/tools/architecture.js.map +0 -1
- package/dist/server/tools/coverage.d.ts +0 -67
- package/dist/server/tools/coverage.d.ts.map +0 -1
- package/dist/server/tools/coverage.js +0 -74
- package/dist/server/tools/coverage.js.map +0 -1
- package/dist/server/tools/graph-analysis.d.ts +0 -64
- package/dist/server/tools/graph-analysis.d.ts.map +0 -1
- package/dist/server/tools/graph-analysis.js +0 -82
- package/dist/server/tools/graph-analysis.js.map +0 -1
- package/dist/server/tools/notes.d.ts +0 -165
- package/dist/server/tools/notes.d.ts.map +0 -1
- package/dist/server/tools/notes.js +0 -214
- package/dist/server/tools/notes.js.map +0 -1
- package/dist/server/tools/routes.d.ts +0 -38
- package/dist/server/tools/routes.d.ts.map +0 -1
- package/dist/server/tools/routes.js +0 -38
- package/dist/server/tools/routes.js.map +0 -1
- package/dist/server/tools/writeback.d.ts +0 -49
- package/dist/server/tools/writeback.d.ts.map +0 -1
- package/dist/server/tools/writeback.js +0 -68
- 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
|
-
*
|
|
10
|
+
* ScipIndexerStage → SourceIndexStage → DocsIndexStage
|
|
11
11
|
* → ImportResolutionStage → DependencyApiStage
|
|
12
12
|
* → LspEnrichmentStage → ResolutionStage
|
|
13
13
|
* → TestMapStage → HistoryStage → EmbeddingStage
|
|
14
14
|
* ```
|
|
15
15
|
*
|
|
16
|
-
* `
|
|
17
|
-
* symbols AND refs directly with pre-resolved edges
|
|
18
|
-
*
|
|
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
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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
|
-
*
|
|
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
|
-
*
|
|
137
|
-
*
|
|
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
|
|
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
|
|
154
|
-
constructor(
|
|
176
|
+
private readonly entries;
|
|
177
|
+
constructor(entries: PipelineEntry[]);
|
|
155
178
|
/**
|
|
156
|
-
* Execute all
|
|
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
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;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;IAIrD;;;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;IAEvC;;;;;OAKG;IACH,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIjC;;;;OAIG;IACH,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IAE9B;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;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;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,EAAE,CAAC;AAI5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBAE9B,OAAO,EAAE,aAAa,EAAE;IAIpC;;;OAGG;IACG,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD5E,kFAAkF;IAClF,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;CACF"}
|
package/dist/indexer/pipeline.js
CHANGED
|
@@ -7,18 +7,19 @@
|
|
|
7
7
|
* ## Stage ordering (data-dependency chain)
|
|
8
8
|
*
|
|
9
9
|
* ```
|
|
10
|
-
*
|
|
10
|
+
* ScipIndexerStage → SourceIndexStage → DocsIndexStage
|
|
11
11
|
* → ImportResolutionStage → DependencyApiStage
|
|
12
12
|
* → LspEnrichmentStage → ResolutionStage
|
|
13
13
|
* → TestMapStage → HistoryStage → EmbeddingStage
|
|
14
14
|
* ```
|
|
15
15
|
*
|
|
16
|
-
* `
|
|
17
|
-
* symbols AND refs directly with pre-resolved edges
|
|
18
|
-
*
|
|
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
|
|
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 `
|
|
30
|
+
* Orchestrates a sequence of `PipelineEntry` instances through a shared
|
|
30
31
|
* `PipelineContext`.
|
|
31
32
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
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
|
|
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
|
-
|
|
50
|
-
constructor(
|
|
51
|
-
this.
|
|
49
|
+
entries;
|
|
50
|
+
constructor(entries) {
|
|
51
|
+
this.entries = entries;
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Execute all
|
|
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
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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;
|
|
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
|
|
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":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
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 {
|
|
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,
|
|
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 {
|
|
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,
|
|
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;
|
|
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
|
-
|
|
136
|
-
|
|
152
|
+
const cached = sourceCache?.get(file.path);
|
|
153
|
+
if (cached !== undefined) {
|
|
154
|
+
source = cached;
|
|
137
155
|
}
|
|
138
|
-
|
|
139
|
-
|
|
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 `
|
|
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
|
-
|
|
254
|
-
|
|
270
|
+
const cached = sourceCache?.get(file.path);
|
|
271
|
+
if (cached !== undefined) {
|
|
272
|
+
source = cached;
|
|
255
273
|
}
|
|
256
|
-
|
|
257
|
-
|
|
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);
|