@monoes/monograph 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cache/extraction-cache.d.ts +3 -1
- package/dist/src/cache/extraction-cache.d.ts.map +1 -1
- package/dist/src/cache/extraction-cache.js +10 -2
- package/dist/src/cache/extraction-cache.js.map +1 -1
- package/dist/src/graph/explain.d.ts.map +1 -1
- package/dist/src/graph/explain.js +9 -2
- package/dist/src/graph/explain.js.map +1 -1
- package/dist/src/graph/pagerank.d.ts +9 -3
- package/dist/src/graph/pagerank.d.ts.map +1 -1
- package/dist/src/graph/pagerank.js +69 -34
- package/dist/src/graph/pagerank.js.map +1 -1
- package/dist/src/mcp-tools/neighbors.d.ts +29 -3
- package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
- package/dist/src/mcp-tools/neighbors.js +85 -10
- package/dist/src/mcp-tools/neighbors.js.map +1 -1
- package/dist/src/mcp-tools/query.d.ts +8 -0
- package/dist/src/mcp-tools/query.d.ts.map +1 -1
- package/dist/src/mcp-tools/query.js +15 -9
- package/dist/src/mcp-tools/query.js.map +1 -1
- package/dist/src/mcp-tools/rename.d.ts.map +1 -1
- package/dist/src/mcp-tools/rename.js +27 -2
- package/dist/src/mcp-tools/rename.js.map +1 -1
- package/dist/src/parsers/cpp.d.ts.map +1 -1
- package/dist/src/parsers/cpp.js +12 -2
- package/dist/src/parsers/cpp.js.map +1 -1
- package/dist/src/parsers/dart.d.ts.map +1 -1
- package/dist/src/parsers/dart.js +18 -0
- package/dist/src/parsers/dart.js.map +1 -1
- package/dist/src/parsers/extractor.d.ts.map +1 -1
- package/dist/src/parsers/extractor.js +22 -8
- package/dist/src/parsers/extractor.js.map +1 -1
- package/dist/src/parsers/kotlin.d.ts +1 -1
- package/dist/src/parsers/kotlin.d.ts.map +1 -1
- package/dist/src/parsers/kotlin.js +4 -0
- package/dist/src/parsers/kotlin.js.map +1 -1
- package/dist/src/parsers/language-config.d.ts +7 -0
- package/dist/src/parsers/language-config.d.ts.map +1 -1
- package/dist/src/parsers/language-config.js +14 -1
- package/dist/src/parsers/language-config.js.map +1 -1
- package/dist/src/parsers/loader.js +17 -3
- package/dist/src/parsers/loader.js.map +1 -1
- package/dist/src/parsers/ruby.d.ts +1 -1
- package/dist/src/parsers/ruby.d.ts.map +1 -1
- package/dist/src/parsers/ruby.js +4 -0
- package/dist/src/parsers/ruby.js.map +1 -1
- package/dist/src/pipeline/index-scope.d.ts +23 -0
- package/dist/src/pipeline/index-scope.d.ts.map +1 -0
- package/dist/src/pipeline/index-scope.js +33 -0
- package/dist/src/pipeline/index-scope.js.map +1 -0
- package/dist/src/pipeline/orchestrator.d.ts +17 -0
- package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/src/pipeline/orchestrator.js +55 -122
- package/dist/src/pipeline/orchestrator.js.map +1 -1
- package/dist/src/pipeline/phases/communities.d.ts +78 -2
- package/dist/src/pipeline/phases/communities.d.ts.map +1 -1
- package/dist/src/pipeline/phases/communities.js +141 -9
- package/dist/src/pipeline/phases/communities.js.map +1 -1
- package/dist/src/pipeline/phases/markdown.js +6 -6
- package/dist/src/pipeline/phases/markdown.js.map +1 -1
- package/dist/src/pipeline/phases/parse.d.ts.map +1 -1
- package/dist/src/pipeline/phases/parse.js +22 -27
- package/dist/src/pipeline/phases/parse.js.map +1 -1
- package/dist/src/pipeline/phases/pdf-parse.js +5 -5
- package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
- package/dist/src/pipeline/phases/scan.d.ts.map +1 -1
- package/dist/src/pipeline/phases/scan.js +16 -1
- package/dist/src/pipeline/phases/scan.js.map +1 -1
- package/dist/src/pipeline/phases/structure.js +12 -12
- package/dist/src/pipeline/phases/structure.js.map +1 -1
- package/dist/src/pipeline/phases/variables.d.ts.map +1 -1
- package/dist/src/pipeline/phases/variables.js +2 -1
- package/dist/src/pipeline/phases/variables.js.map +1 -1
- package/dist/src/search/hybrid-query.d.ts +77 -14
- package/dist/src/search/hybrid-query.d.ts.map +1 -1
- package/dist/src/search/hybrid-query.js +81 -21
- package/dist/src/search/hybrid-query.js.map +1 -1
- package/dist/src/staleness/git-staleness.d.ts +46 -0
- package/dist/src/staleness/git-staleness.d.ts.map +1 -1
- package/dist/src/staleness/git-staleness.js +188 -24
- package/dist/src/staleness/git-staleness.js.map +1 -1
- package/dist/src/storage/fts-store.d.ts +14 -0
- package/dist/src/storage/fts-store.d.ts.map +1 -1
- package/dist/src/storage/fts-store.js +18 -3
- package/dist/src/storage/fts-store.js.map +1 -1
- package/dist/src/types.d.ts +58 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +103 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/web/api.d.ts +3 -0
- package/dist/src/web/api.d.ts.map +1 -1
- package/dist/src/web/api.js +2 -0
- package/dist/src/web/api.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,104 @@
|
|
|
1
|
+
import Graph from 'graphology';
|
|
1
2
|
import louvain from 'graphology-communities-louvain';
|
|
2
|
-
import { loadGraphFromEdges } from '../../graph/loader.js';
|
|
3
3
|
import { leiden } from './leiden.js';
|
|
4
|
+
/**
|
|
5
|
+
* The relation families that participate in clustering, and the weight each
|
|
6
|
+
* family contributes to the clustering graph.
|
|
7
|
+
*
|
|
8
|
+
* This selection is deliberate, not incidental: different relations mean very
|
|
9
|
+
* different things structurally, so they must not all count as the same
|
|
10
|
+
* evidence of coupling.
|
|
11
|
+
*
|
|
12
|
+
* - **Coupling (weight 1)** — one symbol genuinely depends on another at
|
|
13
|
+
* runtime or type-check time. These are what a module boundary is supposed
|
|
14
|
+
* to contain, so they drive cluster boundaries.
|
|
15
|
+
* - **Weak coupling (weight 0.5)** — real but indirect or partial links
|
|
16
|
+
* (pass-through re-exports, member access, framework wiring). They pull
|
|
17
|
+
* nodes together, but should not outvote a direct call or import.
|
|
18
|
+
* - **Containment (weight 0.25)** — a file *owns* a symbol; it is not evidence
|
|
19
|
+
* that the two are coupled. Counted at full weight, containment dominates
|
|
20
|
+
* every real repo (there is one CONTAINS edge per symbol) and clustering
|
|
21
|
+
* degenerates into a restatement of the file tree. It is kept at a low weight
|
|
22
|
+
* only so that symbols with no coupling edges still attach to their parent
|
|
23
|
+
* rather than dropping out of the clustering entirely.
|
|
24
|
+
*
|
|
25
|
+
* Everything not listed is excluded: process/step relations (produced after
|
|
26
|
+
* this phase runs), and the document-knowledge-graph families (REFERENCES,
|
|
27
|
+
* PARENT_SECTION, TAGGED_AS, CO_OCCURS and the LLM-inferred prose relations),
|
|
28
|
+
* which describe prose adjacency rather than code coupling.
|
|
29
|
+
*/
|
|
30
|
+
export const CLUSTERING_RELATION_WEIGHTS = {
|
|
31
|
+
// Coupling
|
|
32
|
+
CALLS: 1,
|
|
33
|
+
IMPORTS: 1,
|
|
34
|
+
EXTENDS: 1,
|
|
35
|
+
IMPLEMENTS: 1,
|
|
36
|
+
// Weak coupling
|
|
37
|
+
RE_EXPORTS: 0.5,
|
|
38
|
+
METHOD_OVERRIDES: 0.5,
|
|
39
|
+
METHOD_IMPLEMENTS: 0.5,
|
|
40
|
+
ACCESSES: 0.5,
|
|
41
|
+
QUERIES: 0.5,
|
|
42
|
+
FETCHES: 0.5,
|
|
43
|
+
HANDLES_ROUTE: 0.5,
|
|
44
|
+
HANDLES_TOOL: 0.5,
|
|
45
|
+
WRAPS: 0.5,
|
|
46
|
+
// Containment
|
|
47
|
+
CONTAINS: 0.25,
|
|
48
|
+
DEFINES: 0.25,
|
|
49
|
+
HAS_METHOD: 0.25,
|
|
50
|
+
HAS_PROPERTY: 0.25,
|
|
51
|
+
HAS_FIELD: 0.25,
|
|
52
|
+
MEMBER_OF: 0.25,
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Read the clustering input from the committed canonical graph — the `edges`
|
|
56
|
+
* table this build has already written — rather than from any single phase's
|
|
57
|
+
* in-memory output.
|
|
58
|
+
*
|
|
59
|
+
* This is the whole point of the query: edges produced by the resolution
|
|
60
|
+
* phases (scope-resolution's resolved CALLS, bridge-resolver, wildcard
|
|
61
|
+
* synthesis, mro, routes/tools/orm) are inserted straight into the DB and
|
|
62
|
+
* never surface in `parse` or `cross-file` phase output. Clustering from those
|
|
63
|
+
* outputs therefore ran over a thinner graph than the one every other consumer
|
|
64
|
+
* queries. Reading the table means clustering sees exactly the edges the rest
|
|
65
|
+
* of the system sees — filtered to the families selected above.
|
|
66
|
+
*
|
|
67
|
+
* The phase runs inside the build's open transaction on the same connection,
|
|
68
|
+
* so it observes this build's writes.
|
|
69
|
+
*/
|
|
70
|
+
export function loadClusteringEdges(db) {
|
|
71
|
+
const relations = Object.keys(CLUSTERING_RELATION_WEIGHTS);
|
|
72
|
+
const placeholders = relations.map(() => '?').join(',');
|
|
73
|
+
const rows = db
|
|
74
|
+
.prepare(`SELECT source_id, target_id, relation FROM edges WHERE relation IN (${placeholders})`)
|
|
75
|
+
.all(...relations);
|
|
76
|
+
return rows.map((r) => ({
|
|
77
|
+
sourceId: r.source_id,
|
|
78
|
+
targetId: r.target_id,
|
|
79
|
+
weight: CLUSTERING_RELATION_WEIGHTS[r.relation] ?? 0,
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build the weighted clustering graph. Louvain reads the `weight` attribute.
|
|
84
|
+
*
|
|
85
|
+
* The projection is **undirected**: "do these two symbols belong in the same
|
|
86
|
+
* group" is a symmetric question, and modularity is defined over undirected
|
|
87
|
+
* connectivity. Clustering the directed graph made the family weights above
|
|
88
|
+
* inert — directed modularity would split a caller from its callee even when
|
|
89
|
+
* the call edge was the heaviest link between them. A multigraph is used so
|
|
90
|
+
* that parallel links between the same pair (e.g. a call in both directions,
|
|
91
|
+
* or a call plus an import) add up rather than being discarded.
|
|
92
|
+
*/
|
|
93
|
+
function buildClusteringGraph(edges) {
|
|
94
|
+
const graph = new Graph({ multi: true, type: 'undirected' });
|
|
95
|
+
for (const edge of edges) {
|
|
96
|
+
graph.mergeNode(edge.sourceId);
|
|
97
|
+
graph.mergeNode(edge.targetId);
|
|
98
|
+
graph.addEdge(edge.sourceId, edge.targetId, { weight: edge.weight });
|
|
99
|
+
}
|
|
100
|
+
return graph;
|
|
101
|
+
}
|
|
4
102
|
export function computeCohesion(communityId, memberships, edges) {
|
|
5
103
|
const members = [...memberships.entries()].filter(([, c]) => c === communityId).map(([id]) => id);
|
|
6
104
|
const n = members.length;
|
|
@@ -30,9 +128,18 @@ export function computeCohesion(communityId, memberships, edges) {
|
|
|
30
128
|
* This replaces calling `computeCohesion` inside a loop, which was O(K*(N+E))
|
|
31
129
|
* because each call re-scanned all memberships (O(N)) and all edges (O(E)).
|
|
32
130
|
*
|
|
131
|
+
* The score is a structural measurement — the fraction of possible internal
|
|
132
|
+
* pairs that are actually connected by a selected edge — and nothing more. It
|
|
133
|
+
* is not a quality, health, or design-correctness judgment: a low score says
|
|
134
|
+
* the clustering grouped nodes that have few links *among the relation
|
|
135
|
+
* families listed in CLUSTERING_RELATION_WEIGHTS*, which can equally mean the
|
|
136
|
+
* coupling is real but expressed through a family this phase excludes.
|
|
137
|
+
*
|
|
33
138
|
* @param memberships - nodeId → communityId map from the clustering step
|
|
34
|
-
* @param edges -
|
|
35
|
-
*
|
|
139
|
+
* @param edges - the same selected edge set that was clustered (see
|
|
140
|
+
* `loadClusteringEdges`), so the score describes the graph that produced the
|
|
141
|
+
* communities rather than some other edge set
|
|
142
|
+
* @returns Map of communityId → internal-edge density ∈ [0, 1]
|
|
36
143
|
*/
|
|
37
144
|
export function computeAllCohesionScores(memberships, edges) {
|
|
38
145
|
// Single pass over memberships: build communityId → Set<nodeId>
|
|
@@ -78,17 +185,42 @@ export function computeAllCohesionScores(memberships, edges) {
|
|
|
78
185
|
}
|
|
79
186
|
return scores;
|
|
80
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Community detection over the committed canonical graph.
|
|
190
|
+
*
|
|
191
|
+
* What the output does and does not claim: communities here are the clusters
|
|
192
|
+
* a modularity-maximising algorithm (Leiden-style refinement over Louvain)
|
|
193
|
+
* finds in the weighted edge set defined by `CLUSTERING_RELATION_WEIGHTS`.
|
|
194
|
+
* They are a summary of *that* connectivity, and they have not been measured
|
|
195
|
+
* against package manifests, directory layout, or runtime deployment units —
|
|
196
|
+
* so a community is a candidate grouping to look at, not a verified
|
|
197
|
+
* architectural module or package boundary. Any consumer that presents these
|
|
198
|
+
* as architecture should say which basis it is using.
|
|
199
|
+
*
|
|
200
|
+
* `deps` lists every phase that writes a selected relation family into
|
|
201
|
+
* `edges`, so that the table is complete when this phase reads it. Adding a
|
|
202
|
+
* phase that emits a clustering relation means adding it here too.
|
|
203
|
+
*/
|
|
81
204
|
export const communitiesPhase = {
|
|
82
205
|
name: 'communities',
|
|
83
|
-
deps: [
|
|
84
|
-
|
|
206
|
+
deps: [
|
|
207
|
+
'parse',
|
|
208
|
+
'cross-file',
|
|
209
|
+
'mro',
|
|
210
|
+
'routes',
|
|
211
|
+
'tools',
|
|
212
|
+
'orm',
|
|
213
|
+
'import-resolver',
|
|
214
|
+
'scope-resolution',
|
|
215
|
+
'bridge-resolver',
|
|
216
|
+
'wildcard-synthesis',
|
|
217
|
+
],
|
|
218
|
+
async execute(ctx) {
|
|
85
219
|
if (ctx.allFilesCached) {
|
|
86
220
|
return { memberships: new Map(), communityLabels: new Map(), cohesionScores: new Map() };
|
|
87
221
|
}
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
const allUsedEdges = [...allEdges, ...resolvedEdges];
|
|
91
|
-
const graph = loadGraphFromEdges(allUsedEdges);
|
|
222
|
+
const allUsedEdges = loadClusteringEdges(ctx.db);
|
|
223
|
+
const graph = buildClusteringGraph(allUsedEdges);
|
|
92
224
|
let communities = {};
|
|
93
225
|
try {
|
|
94
226
|
communities = leiden(graph, { seed: 42 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communities.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/communities.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"communities.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/communities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,OAAO,MAAM,gCAAgC,CAAC;AAIrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAoD;IAC1F,WAAW;IACX,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,CAAC;IACb,gBAAgB;IAChB,UAAU,EAAE,GAAG;IACf,gBAAgB,EAAE,GAAG;IACrB,iBAAiB,EAAE,GAAG;IACtB,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,aAAa,EAAE,GAAG;IAClB,YAAY,EAAE,GAAG;IACjB,KAAK,EAAE,GAAG;IACV,cAAc;IACd,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;CAChB,CAAC;AAQF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAe;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,uEAAuE,YAAY,GAAG,CAAC;SAC/F,GAAG,CAAC,GAAG,SAAS,CAA4E,CAAC;IAEhG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;KACrD,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,KAAuB;IACnD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,WAAgC,EAChC,KAAoD;IAEpD,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAClG,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAErB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB;IAC5D,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE7B,yCAAyC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,aAAa,GAAG,QAAQ,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAgC,EAChC,KAAoD;IAEpD,gEAAgE;IAChE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACd,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,+EAA+E;IAC/E,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEpD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,OAAO;YAAE,SAAS;QAEpF,IAAI,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACjB,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,GAAG,GACP,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAqC;IAChE,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE;QACJ,OAAO;QACP,YAAY;QACZ,KAAK;QACL,QAAQ;QACR,OAAO;QACP,KAAK;QACL,iBAAiB;QACjB,kBAAkB;QAClB,iBAAiB;QACjB,oBAAoB;KACrB;IACD,KAAK,CAAC,OAAO,CAAC,GAAG;QACf,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC3F,CAAC;QACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,WAAW,GAA2B,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC;gBACH,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACpD,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA+B,CAAC;QAChE,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC3C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClF,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;QAED,uEAAuE;QACvE,MAAM,cAAc,GAAG,wBAAwB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE3E,0CAA0C;QAC1C,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC5C,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAC/B,0FAA0F,CAC3F,CAAC;YACF,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBACtB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;oBAC3C,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACjC,CAAC;gBACD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;oBAC9C,UAAU,CAAC,GAAG,CACZ,MAAM,EACN,KAAK,EACL,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAC1B,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAChC,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;IAC1D,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAmB,EAAE,YAAoB;IAC/E,IAAI,SAAS,CAAC,MAAM,IAAI,YAAY;QAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { readFileSync, statSync } from 'node:fs';
|
|
|
2
2
|
import { basename, extname } from 'node:path';
|
|
3
3
|
import { insertEdges } from '../../storage/edge-store.js';
|
|
4
4
|
import { insertNodes } from '../../storage/node-store.js';
|
|
5
|
-
import { makeId, toNormLabel } from '../../types.js';
|
|
5
|
+
import { docId, makeId, toNormLabel } from '../../types.js';
|
|
6
6
|
const MARKDOWN_EXTENSIONS = new Set(['.md', '.mdx']);
|
|
7
7
|
// Inline code span: `identifier`
|
|
8
8
|
const INLINE_CODE_RE = /`([^`]+)`/g;
|
|
@@ -39,10 +39,10 @@ export const markdownPhase = {
|
|
|
39
39
|
continue;
|
|
40
40
|
}
|
|
41
41
|
const nameWithoutExt = basename(relPath).replace(/\.(mdx?)$/, '');
|
|
42
|
-
// Use 'doc'
|
|
43
|
-
const
|
|
42
|
+
// Use the 'doc' kind to avoid collision with the 'file'-kinded File node
|
|
43
|
+
const relDocId = docId(relPath);
|
|
44
44
|
const docNode = {
|
|
45
|
-
id:
|
|
45
|
+
id: relDocId,
|
|
46
46
|
label: 'Document',
|
|
47
47
|
name: nameWithoutExt,
|
|
48
48
|
normLabel: toNormLabel(nameWithoutExt),
|
|
@@ -65,10 +65,10 @@ export const markdownPhase = {
|
|
|
65
65
|
// Exact name match, excluding structural nodes to avoid matching file names
|
|
66
66
|
const rows = symbolLookup.all(span);
|
|
67
67
|
if (rows.length === 1) {
|
|
68
|
-
const edgeId = makeId(
|
|
68
|
+
const edgeId = makeId(relDocId, rows[0].id, 'references');
|
|
69
69
|
referencesEdges.push({
|
|
70
70
|
id: edgeId,
|
|
71
|
-
sourceId:
|
|
71
|
+
sourceId: relDocId,
|
|
72
72
|
targetId: rows[0].id,
|
|
73
73
|
relation: 'REFERENCES',
|
|
74
74
|
confidence: 'INFERRED',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/parse.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/parse.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,WAAW,CA4KjD,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAU7E;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB9E"}
|
|
@@ -4,6 +4,7 @@ import { ExtractionCache } from '../../cache/extraction-cache.js';
|
|
|
4
4
|
import { parseFile } from '../../parsers/loader.js';
|
|
5
5
|
import { deleteEdgesForFile, insertEdges } from '../../storage/edge-store.js';
|
|
6
6
|
import { deleteNodesForFile, insertNodes } from '../../storage/node-store.js';
|
|
7
|
+
import { symbolId } from '../../types.js';
|
|
7
8
|
import { extractVariables, variableToNode } from './variables.js';
|
|
8
9
|
export const parsePhase = {
|
|
9
10
|
name: 'parse',
|
|
@@ -12,17 +13,6 @@ export const parsePhase = {
|
|
|
12
13
|
const { fileNodes } = deps.get('structure');
|
|
13
14
|
const symbolNodes = [];
|
|
14
15
|
const allEdges = [];
|
|
15
|
-
// freshNodes/freshEdges (the cache-miss-only subset) are NOT accumulated in a
|
|
16
|
-
// parallel array during the loop — that duplicated every fresh node/edge object
|
|
17
|
-
// in memory for the entire pipeline run. Instead we record the [start, end)
|
|
18
|
-
// slice of symbolNodes/allEdges that each cache-miss file contributed, and
|
|
19
|
-
// materialize the fresh subset via a single slice pass at the end, only when
|
|
20
|
-
// it's actually needed (cacheHits > 0). On a cold build (cacheHits === 0) the
|
|
21
|
-
// fresh subset is never materialized at all, since nodesToInsert falls back to
|
|
22
|
-
// symbolNodes/allEdges directly in that case — eliminating the redundant
|
|
23
|
-
// allocation entirely for the memory-heaviest scenario.
|
|
24
|
-
const freshNodeRanges = [];
|
|
25
|
-
const freshEdgeRanges = [];
|
|
26
16
|
const staleFilePaths = [];
|
|
27
17
|
const parseErrors = [];
|
|
28
18
|
const fileContents = new Map();
|
|
@@ -71,7 +61,12 @@ export const parsePhase = {
|
|
|
71
61
|
const csNamespaces = extractCsharpNamespaces(source, fileNode.filePath ?? '');
|
|
72
62
|
for (const ns of csNamespaces) {
|
|
73
63
|
fileSymbols.push({
|
|
74
|
-
id:
|
|
64
|
+
id: symbolId({
|
|
65
|
+
filePath: ns.filePath,
|
|
66
|
+
scope: [],
|
|
67
|
+
name: ns.name,
|
|
68
|
+
kind: 'Namespace',
|
|
69
|
+
}),
|
|
75
70
|
name: ns.name,
|
|
76
71
|
label: 'Namespace',
|
|
77
72
|
normLabel: 'namespace',
|
|
@@ -87,7 +82,7 @@ export const parsePhase = {
|
|
|
87
82
|
const arrowFns = extractArrowFunctions(source, fileNode.filePath ?? '');
|
|
88
83
|
for (const fn of arrowFns) {
|
|
89
84
|
fileSymbols.push({
|
|
90
|
-
id:
|
|
85
|
+
id: symbolId({ filePath: fn.filePath, scope: [], name: fn.name, kind: 'Function' }),
|
|
91
86
|
name: fn.name,
|
|
92
87
|
label: 'Function',
|
|
93
88
|
normLabel: 'function',
|
|
@@ -104,12 +99,8 @@ export const parsePhase = {
|
|
|
104
99
|
catch {
|
|
105
100
|
/* non-fatal */
|
|
106
101
|
}
|
|
107
|
-
const nodeStart = symbolNodes.length;
|
|
108
|
-
const edgeStart = allEdges.length;
|
|
109
102
|
symbolNodes.push(...fileSymbols);
|
|
110
103
|
allEdges.push(...fileEdges);
|
|
111
|
-
freshNodeRanges.push([nodeStart, symbolNodes.length]);
|
|
112
|
-
freshEdgeRanges.push([edgeStart, allEdges.length]);
|
|
113
104
|
// This file was re-parsed (cache miss) — its OLD node/edge set (from the
|
|
114
105
|
// previous build) must be deleted before the fresh rows are inserted below,
|
|
115
106
|
// otherwise a renamed/removed symbol's old row survives forever (ghost rows).
|
|
@@ -129,15 +120,20 @@ export const parsePhase = {
|
|
|
129
120
|
cache.flush();
|
|
130
121
|
if (ctx.db) {
|
|
131
122
|
const db = ctx.db;
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
123
|
+
// Insert EVERY extracted node/edge, cache hits included. A cache hit used
|
|
124
|
+
// to skip insertion on the assumption that those rows were already in
|
|
125
|
+
// SQLite from a previous build — but the cache is flushed to disk before
|
|
126
|
+
// the build's SQL transaction commits, so that assumption breaks the
|
|
127
|
+
// moment the DB and the cache disagree: a build that rolls back (or a
|
|
128
|
+
// deleted/replaced database file) leaves a fully-populated cache in front
|
|
129
|
+
// of an empty database, and the next build then "succeeds" with zero
|
|
130
|
+
// nodes. Treating cached extraction as reusable INPUT that can repopulate
|
|
131
|
+
// storage on its own keeps the cache a pure parse accelerator instead of
|
|
132
|
+
// a store that another store's contents silently depend on. Node IDs are
|
|
133
|
+
// deterministic, so re-inserting an unchanged row is an idempotent upsert.
|
|
134
|
+
const nodesToInsert = symbolNodes;
|
|
139
135
|
const knownIds = new Set(symbolNodes.map((n) => n.id));
|
|
140
|
-
const edgesToInsert =
|
|
136
|
+
const edgesToInsert = allEdges.filter((e) => knownIds.has(e.targetId));
|
|
141
137
|
// For every cache-miss file, purge its OLD node/edge set BEFORE inserting the
|
|
142
138
|
// fresh parse results, inside the same transaction — otherwise a renamed or
|
|
143
139
|
// removed symbol's old row would survive forever (INSERT OR REPLACE only
|
|
@@ -157,12 +153,11 @@ export const parsePhase = {
|
|
|
157
153
|
ctx.allFilesCached = true;
|
|
158
154
|
}
|
|
159
155
|
if (cacheHits > 0) {
|
|
160
|
-
const freshNodeCount = freshNodeRanges.reduce((sum, [s, e]) => sum + (e - s), 0);
|
|
161
156
|
ctx.onProgress?.({
|
|
162
157
|
phase: 'parse',
|
|
163
158
|
filesProcessed: processed,
|
|
164
159
|
totalFiles: fileNodes.length,
|
|
165
|
-
message: `cache: ${cacheHits} hits, ${cacheMisses} misses (${
|
|
160
|
+
message: `cache: ${cacheHits} hits, ${cacheMisses} misses (${symbolNodes.length} nodes inserted)`,
|
|
166
161
|
});
|
|
167
162
|
}
|
|
168
163
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
|
2
2
|
import { basename, extname, join, relative } from 'node:path';
|
|
3
3
|
import { insertEdges } from '../../storage/edge-store.js';
|
|
4
4
|
import { insertNodes } from '../../storage/node-store.js';
|
|
5
|
-
import { CONFIDENCE_SCORE, makeId, toNormLabel } from '../../types.js';
|
|
5
|
+
import { CONFIDENCE_SCORE, fileId, makeId, toNormLabel } from '../../types.js';
|
|
6
6
|
const IGNORE_DIRS = new Set([
|
|
7
7
|
'node_modules',
|
|
8
8
|
'.git',
|
|
@@ -76,7 +76,7 @@ export const pdfParsePhase = {
|
|
|
76
76
|
const allEdges = [];
|
|
77
77
|
for (const absPath of pdfPaths) {
|
|
78
78
|
const rel = relative(ctx.repoPath, absPath);
|
|
79
|
-
const
|
|
79
|
+
const relFileId = fileId(rel);
|
|
80
80
|
let text;
|
|
81
81
|
try {
|
|
82
82
|
const buf = readFileSync(absPath);
|
|
@@ -101,7 +101,7 @@ export const pdfParsePhase = {
|
|
|
101
101
|
for (let i = 0; i < chunks.length; i++) {
|
|
102
102
|
const { content, startChar } = chunks[i];
|
|
103
103
|
const title = `${docTitle} §${i + 1}`;
|
|
104
|
-
const sectionId = makeId('section',
|
|
104
|
+
const sectionId = makeId('section', relFileId, String(i));
|
|
105
105
|
const node = {
|
|
106
106
|
id: sectionId,
|
|
107
107
|
label: 'Section',
|
|
@@ -115,8 +115,8 @@ export const pdfParsePhase = {
|
|
|
115
115
|
};
|
|
116
116
|
sectionNodes.push(node);
|
|
117
117
|
allEdges.push({
|
|
118
|
-
id: makeId(
|
|
119
|
-
sourceId:
|
|
118
|
+
id: makeId(relFileId, sectionId, 'defines'),
|
|
119
|
+
sourceId: relFileId,
|
|
120
120
|
targetId: sectionId,
|
|
121
121
|
relation: 'DEFINES',
|
|
122
122
|
confidence: 'EXTRACTED',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-parse.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/pdf-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf-parse.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/pdf-parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/scan.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/scan.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA8DjD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,UAAU,CAiG/C,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CAe9F"}
|
|
@@ -19,6 +19,13 @@ const DEFAULT_IGNORE = new Set([
|
|
|
19
19
|
'.claude-plugin',
|
|
20
20
|
'.github',
|
|
21
21
|
'.githooks',
|
|
22
|
+
'.next',
|
|
23
|
+
'.nuxt',
|
|
24
|
+
'.svelte-kit',
|
|
25
|
+
'.turbo',
|
|
26
|
+
'.vercel',
|
|
27
|
+
'.wrangler',
|
|
28
|
+
'.open-next',
|
|
22
29
|
]);
|
|
23
30
|
const BINARY_EXTENSIONS = new Set([
|
|
24
31
|
'.png',
|
|
@@ -44,7 +51,15 @@ const BINARY_EXTENSIONS = new Set([
|
|
|
44
51
|
'.class',
|
|
45
52
|
'.jar',
|
|
46
53
|
]);
|
|
47
|
-
const GENERATED_PATTERNS = [
|
|
54
|
+
const GENERATED_PATTERNS = [
|
|
55
|
+
/\.min\.(js|css)$/,
|
|
56
|
+
/\.pb\.go$/,
|
|
57
|
+
/_generated\.ts$/,
|
|
58
|
+
// Monograph's own build output (reporting/graph-report.ts writes it to the repo
|
|
59
|
+
// root). Indexing it feeds a previous build's prose back into the graph as
|
|
60
|
+
// document nodes and edges, compounding on every rebuild.
|
|
61
|
+
/^GRAPH_REPORT\.md$/,
|
|
62
|
+
];
|
|
48
63
|
export const scanPhase = {
|
|
49
64
|
name: 'scan',
|
|
50
65
|
deps: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAiB,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,cAAc;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACP,aAAa;IACb,QAAQ;IACR,UAAU;IACV,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,gBAAgB;IAChB,SAAS;IACT,WAAW;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { basename, dirname, relative } from 'node:path';
|
|
2
|
-
import { CONFIDENCE_SCORE, makeId, toNormLabel } from '../../types.js';
|
|
2
|
+
import { CONFIDENCE_SCORE, fileId, folderId, makeId, toNormLabel } from '../../types.js';
|
|
3
3
|
export const structurePhase = {
|
|
4
4
|
name: 'structure',
|
|
5
5
|
deps: ['scan'],
|
|
@@ -11,9 +11,9 @@ export const structurePhase = {
|
|
|
11
11
|
const seenFolders = new Set();
|
|
12
12
|
for (const absPath of filePaths) {
|
|
13
13
|
const rel = relative(ctx.repoPath, absPath);
|
|
14
|
-
const
|
|
14
|
+
const relFileId = fileId(rel);
|
|
15
15
|
fileNodes.push({
|
|
16
|
-
id:
|
|
16
|
+
id: relFileId,
|
|
17
17
|
label: 'File',
|
|
18
18
|
name: basename(rel),
|
|
19
19
|
normLabel: toNormLabel(basename(rel)),
|
|
@@ -27,11 +27,11 @@ export const structurePhase = {
|
|
|
27
27
|
if (part === '.')
|
|
28
28
|
continue;
|
|
29
29
|
current = current ? `${current}/${part}` : part;
|
|
30
|
-
const
|
|
31
|
-
if (!seenFolders.has(
|
|
32
|
-
seenFolders.add(
|
|
30
|
+
const currentFolderId = folderId(current);
|
|
31
|
+
if (!seenFolders.has(currentFolderId)) {
|
|
32
|
+
seenFolders.add(currentFolderId);
|
|
33
33
|
folderNodes.push({
|
|
34
|
-
id:
|
|
34
|
+
id: currentFolderId,
|
|
35
35
|
label: 'Folder',
|
|
36
36
|
name: part,
|
|
37
37
|
normLabel: toNormLabel(part),
|
|
@@ -40,22 +40,22 @@ export const structurePhase = {
|
|
|
40
40
|
});
|
|
41
41
|
if (parentFolderId) {
|
|
42
42
|
containsEdges.push({
|
|
43
|
-
id: makeId(parentFolderId,
|
|
43
|
+
id: makeId(parentFolderId, currentFolderId, 'contains'),
|
|
44
44
|
sourceId: parentFolderId,
|
|
45
|
-
targetId:
|
|
45
|
+
targetId: currentFolderId,
|
|
46
46
|
relation: 'CONTAINS',
|
|
47
47
|
confidence: 'EXTRACTED',
|
|
48
48
|
confidenceScore: CONFIDENCE_SCORE.EXTRACTED,
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
parentFolderId =
|
|
52
|
+
parentFolderId = currentFolderId;
|
|
53
53
|
}
|
|
54
54
|
if (parentFolderId) {
|
|
55
55
|
containsEdges.push({
|
|
56
|
-
id: makeId(parentFolderId,
|
|
56
|
+
id: makeId(parentFolderId, relFileId, 'contains'),
|
|
57
57
|
sourceId: parentFolderId,
|
|
58
|
-
targetId:
|
|
58
|
+
targetId: relFileId,
|
|
59
59
|
relation: 'CONTAINS',
|
|
60
60
|
confidence: 'EXTRACTED',
|
|
61
61
|
confidenceScore: CONFIDENCE_SCORE.EXTRACTED,
|