@ruso-0/nreki 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +648 -0
- package/LICENSE +21 -0
- package/README.md +425 -0
- package/dist/ast-navigator.d.ts +29 -0
- package/dist/ast-navigator.d.ts.map +1 -0
- package/dist/ast-navigator.js +279 -0
- package/dist/ast-navigator.js.map +1 -0
- package/dist/ast-sandbox.d.ts +74 -0
- package/dist/ast-sandbox.d.ts.map +1 -0
- package/dist/ast-sandbox.js +242 -0
- package/dist/ast-sandbox.js.map +1 -0
- package/dist/chronos-memory.d.ts +69 -0
- package/dist/chronos-memory.d.ts.map +1 -0
- package/dist/chronos-memory.js +247 -0
- package/dist/chronos-memory.js.map +1 -0
- package/dist/circuit-breaker.d.ts +107 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +330 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/compressor-advanced.d.ts +80 -0
- package/dist/compressor-advanced.d.ts.map +1 -0
- package/dist/compressor-advanced.js +555 -0
- package/dist/compressor-advanced.js.map +1 -0
- package/dist/compressor.d.ts +81 -0
- package/dist/compressor.d.ts.map +1 -0
- package/dist/compressor.js +227 -0
- package/dist/compressor.js.map +1 -0
- package/dist/database.d.ts +169 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +1029 -0
- package/dist/database.js.map +1 -0
- package/dist/embedder.d.ts +73 -0
- package/dist/embedder.d.ts.map +1 -0
- package/dist/embedder.js +165 -0
- package/dist/embedder.js.map +1 -0
- package/dist/engine.d.ts +224 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +582 -0
- package/dist/engine.js.map +1 -0
- package/dist/hologram/harvester.d.ts +41 -0
- package/dist/hologram/harvester.d.ts.map +1 -0
- package/dist/hologram/harvester.js +129 -0
- package/dist/hologram/harvester.js.map +1 -0
- package/dist/hologram/shadow-cache.d.ts +49 -0
- package/dist/hologram/shadow-cache.d.ts.map +1 -0
- package/dist/hologram/shadow-cache.js +165 -0
- package/dist/hologram/shadow-cache.js.map +1 -0
- package/dist/hologram/shadow-generator.d.ts +32 -0
- package/dist/hologram/shadow-generator.d.ts.map +1 -0
- package/dist/hologram/shadow-generator.js +828 -0
- package/dist/hologram/shadow-generator.js.map +1 -0
- package/dist/hooks/preToolUse.d.ts +63 -0
- package/dist/hooks/preToolUse.d.ts.map +1 -0
- package/dist/hooks/preToolUse.js +103 -0
- package/dist/hooks/preToolUse.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +367 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/kernel-manager.d.ts +52 -0
- package/dist/kernel/kernel-manager.d.ts.map +1 -0
- package/dist/kernel/kernel-manager.js +197 -0
- package/dist/kernel/kernel-manager.js.map +1 -0
- package/dist/kernel/kernel-worker.d.ts +9 -0
- package/dist/kernel/kernel-worker.d.ts.map +1 -0
- package/dist/kernel/kernel-worker.js +76 -0
- package/dist/kernel/kernel-worker.js.map +1 -0
- package/dist/kernel/nreki-kernel.d.ts +244 -0
- package/dist/kernel/nreki-kernel.d.ts.map +1 -0
- package/dist/kernel/nreki-kernel.js +1656 -0
- package/dist/kernel/nreki-kernel.js.map +1 -0
- package/dist/middleware/circuit-breaker.d.ts +32 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +160 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- package/dist/middleware/file-lock.d.ts +33 -0
- package/dist/middleware/file-lock.d.ts.map +1 -0
- package/dist/middleware/file-lock.js +55 -0
- package/dist/middleware/file-lock.js.map +1 -0
- package/dist/middleware/validator.d.ts +26 -0
- package/dist/middleware/validator.d.ts.map +1 -0
- package/dist/middleware/validator.js +39 -0
- package/dist/middleware/validator.js.map +1 -0
- package/dist/monitor.d.ts +94 -0
- package/dist/monitor.d.ts.map +1 -0
- package/dist/monitor.js +221 -0
- package/dist/monitor.js.map +1 -0
- package/dist/parser-pool.d.ts +28 -0
- package/dist/parser-pool.d.ts.map +1 -0
- package/dist/parser-pool.js +81 -0
- package/dist/parser-pool.js.map +1 -0
- package/dist/parser.d.ts +91 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +311 -0
- package/dist/parser.js.map +1 -0
- package/dist/pin-memory.d.ts +35 -0
- package/dist/pin-memory.d.ts.map +1 -0
- package/dist/pin-memory.js +161 -0
- package/dist/pin-memory.js.map +1 -0
- package/dist/repo-map.d.ts +81 -0
- package/dist/repo-map.d.ts.map +1 -0
- package/dist/repo-map.js +550 -0
- package/dist/repo-map.js.map +1 -0
- package/dist/router.d.ts +102 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +1989 -0
- package/dist/router.js.map +1 -0
- package/dist/semantic-edit.d.ts +82 -0
- package/dist/semantic-edit.d.ts.map +1 -0
- package/dist/semantic-edit.js +529 -0
- package/dist/semantic-edit.js.map +1 -0
- package/dist/terminal-filter.d.ts +27 -0
- package/dist/terminal-filter.d.ts.map +1 -0
- package/dist/terminal-filter.js +257 -0
- package/dist/terminal-filter.js.map +1 -0
- package/dist/undo.d.ts +21 -0
- package/dist/undo.d.ts.map +1 -0
- package/dist/undo.js +55 -0
- package/dist/undo.js.map +1 -0
- package/dist/utils/code-tokenizer.d.ts +25 -0
- package/dist/utils/code-tokenizer.d.ts.map +1 -0
- package/dist/utils/code-tokenizer.js +52 -0
- package/dist/utils/code-tokenizer.js.map +1 -0
- package/dist/utils/file-filter.d.ts +23 -0
- package/dist/utils/file-filter.d.ts.map +1 -0
- package/dist/utils/file-filter.js +48 -0
- package/dist/utils/file-filter.js.map +1 -0
- package/dist/utils/imports.d.ts +32 -0
- package/dist/utils/imports.d.ts.map +1 -0
- package/dist/utils/imports.js +155 -0
- package/dist/utils/imports.js.map +1 -0
- package/dist/utils/path-jail.d.ts +27 -0
- package/dist/utils/path-jail.d.ts.map +1 -0
- package/dist/utils/path-jail.js +95 -0
- package/dist/utils/path-jail.js.map +1 -0
- package/dist/utils/read-source.d.ts +18 -0
- package/dist/utils/read-source.d.ts.map +1 -0
- package/dist/utils/read-source.js +22 -0
- package/dist/utils/read-source.js.map +1 -0
- package/dist/utils/safe-parse.d.ts +20 -0
- package/dist/utils/safe-parse.d.ts.map +1 -0
- package/dist/utils/safe-parse.js +25 -0
- package/dist/utils/safe-parse.js.map +1 -0
- package/package.json +75 -0
- package/scripts/download-wasm.js +46 -0
- package/wasm/.gitkeep +0 -0
- package/wasm/tree-sitter-go.wasm +0 -0
- package/wasm/tree-sitter-javascript.wasm +0 -0
- package/wasm/tree-sitter-python.wasm +0 -0
- package/wasm/tree-sitter-typescript.wasm +0 -0
package/dist/repo-map.js
ADDED
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* repo-map.ts - Static repository map for Anthropic prompt cache optimization.
|
|
3
|
+
*
|
|
4
|
+
* Generates a deterministic text representation of all file signatures,
|
|
5
|
+
* exports, and imports. Same repo state produces identical text output,
|
|
6
|
+
* enabling Anthropic's prompt caching ($0.30/M vs $3.00/M input tokens).
|
|
7
|
+
*/
|
|
8
|
+
import fs from "fs";
|
|
9
|
+
import path from "path";
|
|
10
|
+
import crypto from "crypto";
|
|
11
|
+
import { shouldProcess } from "./utils/file-filter.js";
|
|
12
|
+
import { readSource } from "./utils/read-source.js";
|
|
13
|
+
// ─── Constants ──────────────────────────────────────────────────────
|
|
14
|
+
const SUPPORTED_EXTENSIONS = new Set([".ts", ".tsx", ".js", ".jsx", ".py", ".go"]);
|
|
15
|
+
const IGNORE_DIRS = new Set([
|
|
16
|
+
"node_modules", "dist", "build", ".git", "coverage",
|
|
17
|
+
".next", "__pycache__", ".nreki",
|
|
18
|
+
]);
|
|
19
|
+
const STRIP_KEYWORD = /^(?:export|default|declare|abstract|public|private|protected|static|readonly|async|function|class|interface|type|enum|const|let|var|def|func)\s+/;
|
|
20
|
+
/** Byte-identical comparator - same result on every OS (no ICU dependency). */
|
|
21
|
+
const stableCompare = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
22
|
+
// ─── Extraction Helpers ─────────────────────────────────────────────
|
|
23
|
+
/** Extract signature from raw AST code (everything before opening `{` or `:` for Python). */
|
|
24
|
+
export function extractSignature(rawCode) {
|
|
25
|
+
const lines = rawCode.split("\n");
|
|
26
|
+
if (lines.length <= 1)
|
|
27
|
+
return rawCode.trim();
|
|
28
|
+
let parenDepth = 0;
|
|
29
|
+
let angleDepth = 0;
|
|
30
|
+
let inString = null;
|
|
31
|
+
let templateExprDepth = 0; // Track ${...} nesting in template literals
|
|
32
|
+
for (let i = 0; i < rawCode.length; i++) {
|
|
33
|
+
const ch = rawCode[i];
|
|
34
|
+
// Track string state - skip everything inside strings
|
|
35
|
+
if (inString) {
|
|
36
|
+
if (ch === "\\" && i + 1 < rawCode.length) {
|
|
37
|
+
i++; // Skip escaped character
|
|
38
|
+
}
|
|
39
|
+
else if (inString === '`' && ch === '$' && i + 1 < rawCode.length && rawCode[i + 1] === '{') {
|
|
40
|
+
// Enter template expression ${...}
|
|
41
|
+
templateExprDepth++;
|
|
42
|
+
inString = null;
|
|
43
|
+
i++; // skip the {
|
|
44
|
+
}
|
|
45
|
+
else if (ch === inString) {
|
|
46
|
+
inString = null;
|
|
47
|
+
}
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
// Track closing of template expressions
|
|
51
|
+
if (templateExprDepth > 0 && ch === '}') {
|
|
52
|
+
templateExprDepth--;
|
|
53
|
+
inString = '`'; // Re-enter template literal
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// Detect string start
|
|
57
|
+
if (ch === '"' || ch === "'" || ch === '`') {
|
|
58
|
+
inString = ch;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (ch === "(")
|
|
62
|
+
parenDepth++;
|
|
63
|
+
else if (ch === ")")
|
|
64
|
+
parenDepth--;
|
|
65
|
+
else if (ch === "<")
|
|
66
|
+
angleDepth++;
|
|
67
|
+
else if (ch === ">")
|
|
68
|
+
angleDepth--;
|
|
69
|
+
else if (ch === "{" && parenDepth === 0 && angleDepth === 0) {
|
|
70
|
+
return rawCode.slice(0, i).trim();
|
|
71
|
+
}
|
|
72
|
+
// A-02: Python colon - only match at depth 0 (skip colons inside type hints)
|
|
73
|
+
else if (ch === ":" && parenDepth === 0 && angleDepth === 0) {
|
|
74
|
+
if (/^(?:async\s+)?def\s|^class\s/.test(rawCode)) {
|
|
75
|
+
return rawCode.slice(0, i).trim();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return lines[0].trim();
|
|
80
|
+
}
|
|
81
|
+
/** Strip keyword prefixes from a signature, leaving just name + params + return type. */
|
|
82
|
+
export function cleanSignature(rawSig) {
|
|
83
|
+
let sig = rawSig.trim();
|
|
84
|
+
let prev = "";
|
|
85
|
+
while (prev !== sig) {
|
|
86
|
+
prev = sig;
|
|
87
|
+
sig = sig.replace(STRIP_KEYWORD, "");
|
|
88
|
+
}
|
|
89
|
+
return sig;
|
|
90
|
+
}
|
|
91
|
+
/** Extract exported symbol names from file content using regex. */
|
|
92
|
+
function extractExports(content, ext) {
|
|
93
|
+
const exports = new Set();
|
|
94
|
+
if ([".ts", ".tsx", ".js", ".jsx"].includes(ext)) {
|
|
95
|
+
// export function/class/interface/type/enum/const name
|
|
96
|
+
const declRe = /export\s+(?:default\s+)?(?:declare\s+)?(?:abstract\s+)?(?:async\s+)?(?:function|class|interface|type|enum|const|let|var)\s+(\w+)/g;
|
|
97
|
+
let m;
|
|
98
|
+
while ((m = declRe.exec(content)) !== null) {
|
|
99
|
+
exports.add(m[1]);
|
|
100
|
+
}
|
|
101
|
+
// export { name1, name2 }
|
|
102
|
+
const namedRe = /export\s*\{([^}]+)\}/g;
|
|
103
|
+
while ((m = namedRe.exec(content)) !== null) {
|
|
104
|
+
for (const name of m[1].split(",")) {
|
|
105
|
+
const clean = name.trim().split(/\s+as\s+/).pop().trim();
|
|
106
|
+
if (clean && /^\w+$/.test(clean))
|
|
107
|
+
exports.add(clean);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (ext === ".py") {
|
|
112
|
+
// Python: top-level def/class (non-underscore) are public
|
|
113
|
+
const pyRe = /^(?:async\s+)?(?:def|class)\s+(\w+)/gm;
|
|
114
|
+
let m;
|
|
115
|
+
while ((m = pyRe.exec(content)) !== null) {
|
|
116
|
+
if (!m[1].startsWith("_"))
|
|
117
|
+
exports.add(m[1]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (ext === ".go") {
|
|
121
|
+
// Go: capitalized names are exported
|
|
122
|
+
const goRe = /^(?:func|type)\s+(?:\([^)]*\)\s+)?([A-Z]\w*)/gm;
|
|
123
|
+
let m;
|
|
124
|
+
while ((m = goRe.exec(content)) !== null) {
|
|
125
|
+
exports.add(m[1]);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return [...exports].sort(stableCompare);
|
|
129
|
+
}
|
|
130
|
+
/** Extract import module names from file content. */
|
|
131
|
+
function extractImports(content, ext) {
|
|
132
|
+
const imports = new Set();
|
|
133
|
+
if ([".ts", ".tsx", ".js", ".jsx"].includes(ext)) {
|
|
134
|
+
const fromRe = /from\s+["']([^"']+)["']/g;
|
|
135
|
+
let m;
|
|
136
|
+
while ((m = fromRe.exec(content)) !== null) {
|
|
137
|
+
imports.add(m[1]);
|
|
138
|
+
}
|
|
139
|
+
const reqRe = /require\(["']([^"']+)["']\)/g;
|
|
140
|
+
while ((m = reqRe.exec(content)) !== null) {
|
|
141
|
+
imports.add(m[1]);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (ext === ".py") {
|
|
145
|
+
const pyFromRe = /^from\s+(\S+)\s+import/gm;
|
|
146
|
+
let m;
|
|
147
|
+
while ((m = pyFromRe.exec(content)) !== null) {
|
|
148
|
+
imports.add(m[1]);
|
|
149
|
+
}
|
|
150
|
+
const pyImportRe = /^import\s+(\S+)/gm;
|
|
151
|
+
while ((m = pyImportRe.exec(content)) !== null) {
|
|
152
|
+
imports.add(m[1]);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (ext === ".go") {
|
|
156
|
+
const importBlocks = content.match(/import\s*\([\s\S]*?\)|import\s+"[^"]+"/g);
|
|
157
|
+
if (importBlocks) {
|
|
158
|
+
const goRe = /"([^"]+)"/g;
|
|
159
|
+
for (const block of importBlocks) {
|
|
160
|
+
let m;
|
|
161
|
+
while ((m = goRe.exec(block)) !== null) {
|
|
162
|
+
imports.add(m[1]);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return [...imports].sort(stableCompare);
|
|
168
|
+
}
|
|
169
|
+
/** Shorten an import path for display: strip leading ./ and trailing .js/.ts */
|
|
170
|
+
function shortenImport(imp) {
|
|
171
|
+
return imp.replace(/^\.\//, "").replace(/\.js$|\.ts$/, "");
|
|
172
|
+
}
|
|
173
|
+
// ─── Directory Walking ──────────────────────────────────────────────
|
|
174
|
+
function walkFiles(dirPath) {
|
|
175
|
+
const files = [];
|
|
176
|
+
const walk = (dir) => {
|
|
177
|
+
let entries;
|
|
178
|
+
try {
|
|
179
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// Sort directory entries for deterministic walk order
|
|
185
|
+
entries.sort((a, b) => stableCompare(a.name, b.name));
|
|
186
|
+
for (const entry of entries) {
|
|
187
|
+
const fullPath = path.join(dir, entry.name);
|
|
188
|
+
if (entry.isDirectory()) {
|
|
189
|
+
if (!IGNORE_DIRS.has(entry.name))
|
|
190
|
+
walk(fullPath);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
194
|
+
if (!SUPPORTED_EXTENSIONS.has(ext))
|
|
195
|
+
continue;
|
|
196
|
+
// Skip .d.ts files (auto-generated type definitions)
|
|
197
|
+
if (entry.name.endsWith(".d.ts"))
|
|
198
|
+
continue;
|
|
199
|
+
try {
|
|
200
|
+
const stat = fs.statSync(fullPath);
|
|
201
|
+
const filter = shouldProcess(fullPath, stat.size);
|
|
202
|
+
if (filter.process)
|
|
203
|
+
files.push(fullPath);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Skip inaccessible files
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
walk(dirPath);
|
|
211
|
+
return files.sort(stableCompare);
|
|
212
|
+
}
|
|
213
|
+
// ─── PageRank ───────────────────────────────────────────────────────
|
|
214
|
+
/**
|
|
215
|
+
* PageRank via Power Iteration on a Markov Chain.
|
|
216
|
+
* PR(A) = (1-d)/N + d * Σ (PR(Ti) / OutDegree(Ti))
|
|
217
|
+
* Convergence for 5,000 files: < 8ms (20 iterations).
|
|
218
|
+
*
|
|
219
|
+
* @param files All file paths in the project
|
|
220
|
+
* @param importedBy Reverse dependency map: file → set of files that import it
|
|
221
|
+
* @returns Map of file → normalized PageRank score (0 to 1)
|
|
222
|
+
*/
|
|
223
|
+
export function computePageRank(files, importedBy) {
|
|
224
|
+
const N = files.length;
|
|
225
|
+
let pr = new Map();
|
|
226
|
+
if (N === 0)
|
|
227
|
+
return pr;
|
|
228
|
+
const d = 0.85; // Standard damping factor
|
|
229
|
+
const outDegree = new Map();
|
|
230
|
+
// Initialize uniform distribution
|
|
231
|
+
for (const f of files) {
|
|
232
|
+
pr.set(f, 1 / N);
|
|
233
|
+
outDegree.set(f, 0);
|
|
234
|
+
}
|
|
235
|
+
// Compute out-degree (how many things each file imports)
|
|
236
|
+
for (const consumers of importedBy.values()) {
|
|
237
|
+
for (const consumer of consumers) {
|
|
238
|
+
outDegree.set(consumer, (outDegree.get(consumer) || 0) + 1);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Power iteration (20 cycles is sufficient for convergence)
|
|
242
|
+
for (let iter = 0; iter < 20; iter++) {
|
|
243
|
+
const nextPr = new Map();
|
|
244
|
+
// Sink nodes: files that don't import anything (rank leaks without redistribution)
|
|
245
|
+
let sinkSum = 0;
|
|
246
|
+
for (const f of files) {
|
|
247
|
+
if (outDegree.get(f) === 0)
|
|
248
|
+
sinkSum += pr.get(f);
|
|
249
|
+
}
|
|
250
|
+
for (const target of files) {
|
|
251
|
+
let rankSum = 0;
|
|
252
|
+
const consumers = importedBy.get(target);
|
|
253
|
+
if (consumers) {
|
|
254
|
+
for (const consumer of consumers) {
|
|
255
|
+
rankSum += pr.get(consumer) / (outDegree.get(consumer) || 1);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
nextPr.set(target, ((1 - d) / N) + d * (rankSum + sinkSum / N));
|
|
259
|
+
}
|
|
260
|
+
pr = nextPr;
|
|
261
|
+
}
|
|
262
|
+
// Normalize to 0-1 range for percentile calculation
|
|
263
|
+
let maxPr = 0;
|
|
264
|
+
for (const rank of pr.values()) {
|
|
265
|
+
if (rank > maxPr)
|
|
266
|
+
maxPr = rank;
|
|
267
|
+
}
|
|
268
|
+
if (maxPr > 0) {
|
|
269
|
+
for (const [file, rank] of pr.entries()) {
|
|
270
|
+
pr.set(file, rank / maxPr);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return pr;
|
|
274
|
+
}
|
|
275
|
+
// ─── Dependency Graph ───────────────────────────────────────────────
|
|
276
|
+
/**
|
|
277
|
+
* Build a fast-lookup index for resolving imports to file paths in O(1).
|
|
278
|
+
* Maps extensionless, with-extension, src/-stripped, and index-collapsed variants.
|
|
279
|
+
*/
|
|
280
|
+
export function buildFastLookup(allFiles) {
|
|
281
|
+
const lookup = new Map();
|
|
282
|
+
for (const file of allFiles) {
|
|
283
|
+
const normalized = file.replace(/\\/g, "/");
|
|
284
|
+
const noExt = normalized.replace(/\.[^/.]+$/, "");
|
|
285
|
+
lookup.set(noExt, normalized);
|
|
286
|
+
lookup.set(normalized, normalized);
|
|
287
|
+
// Handle baseUrl "src/" without reading tsconfig
|
|
288
|
+
if (noExt.startsWith("src/")) {
|
|
289
|
+
lookup.set(noExt.slice(4), normalized);
|
|
290
|
+
}
|
|
291
|
+
// Handle index.ts/index.js implicit imports
|
|
292
|
+
if (noExt.endsWith("/index")) {
|
|
293
|
+
const dir = noExt.slice(0, -6);
|
|
294
|
+
lookup.set(dir, normalized);
|
|
295
|
+
if (dir.startsWith("src/")) {
|
|
296
|
+
lookup.set(dir.slice(4), normalized);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return lookup;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Resolve an import string to an actual project file path.
|
|
304
|
+
* Returns null for external dependencies (lodash, react, etc).
|
|
305
|
+
*/
|
|
306
|
+
export function resolveImportFast(importStr, currentFile, lookup) {
|
|
307
|
+
// External dependencies → null
|
|
308
|
+
if (!importStr.startsWith(".") && !importStr.startsWith("/") && !importStr.startsWith("@/")) {
|
|
309
|
+
return lookup.get(importStr) || null;
|
|
310
|
+
}
|
|
311
|
+
// Resolve @/ alias → src/
|
|
312
|
+
let target = importStr.replace(/^@\//, "src/");
|
|
313
|
+
// Resolve relative paths
|
|
314
|
+
if (target.startsWith(".")) {
|
|
315
|
+
target = path.posix.join(path.posix.dirname(currentFile.replace(/\\/g, "/")), target);
|
|
316
|
+
}
|
|
317
|
+
// Strip extension (import may be "./db.js" but file is "db.ts")
|
|
318
|
+
target = target.replace(/\.(ts|tsx|js|jsx)$/, "");
|
|
319
|
+
return lookup.get(target) || null;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Build a dependency graph from repo map entries.
|
|
323
|
+
* Computes in-degree (how many files import each file) and classifies by percentile.
|
|
324
|
+
*/
|
|
325
|
+
export function buildDependencyGraph(entries, allFiles) {
|
|
326
|
+
const lookup = buildFastLookup(allFiles);
|
|
327
|
+
const importedBy = new Map();
|
|
328
|
+
const inDegree = new Map();
|
|
329
|
+
// Initialize all files with 0
|
|
330
|
+
for (const file of allFiles) {
|
|
331
|
+
inDegree.set(file, 0);
|
|
332
|
+
importedBy.set(file, new Set());
|
|
333
|
+
}
|
|
334
|
+
// Build reverse graph
|
|
335
|
+
for (const entry of entries) {
|
|
336
|
+
for (const imp of entry.imports) {
|
|
337
|
+
const resolved = resolveImportFast(imp, entry.filePath, lookup);
|
|
338
|
+
if (resolved && resolved !== entry.filePath) {
|
|
339
|
+
inDegree.set(resolved, (inDegree.get(resolved) || 0) + 1);
|
|
340
|
+
const deps = importedBy.get(resolved) || new Set();
|
|
341
|
+
deps.add(entry.filePath);
|
|
342
|
+
importedBy.set(resolved, deps);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// PageRank classification (recursive importance, not naive inDegree)
|
|
347
|
+
const prScores = computePageRank(allFiles, importedBy);
|
|
348
|
+
const prScoresArray = Array.from(prScores.values()).sort((a, b) => a - b);
|
|
349
|
+
const p85 = prScoresArray[Math.floor(allFiles.length * 0.85)] || 0;
|
|
350
|
+
const p50 = prScoresArray[Math.floor(allFiles.length * 0.50)] || 0;
|
|
351
|
+
const tiers = new Map();
|
|
352
|
+
for (const [file, score] of prScores.entries()) {
|
|
353
|
+
// Only CORE/LOGIC if someone actually imports it (prevents orphan anomalies)
|
|
354
|
+
if (score >= p85 && (inDegree.get(file) || 0) > 0)
|
|
355
|
+
tiers.set(file, "core");
|
|
356
|
+
else if (score >= p50 && (inDegree.get(file) || 0) > 0)
|
|
357
|
+
tiers.set(file, "logic");
|
|
358
|
+
else
|
|
359
|
+
tiers.set(file, "leaf");
|
|
360
|
+
}
|
|
361
|
+
return { importedBy, inDegree, tiers };
|
|
362
|
+
}
|
|
363
|
+
/** Serialize DependencyGraph to JSON-safe format. */
|
|
364
|
+
function serializeGraph(graph) {
|
|
365
|
+
const importedBy = {};
|
|
366
|
+
for (const [k, v] of graph.importedBy) {
|
|
367
|
+
if (v.size > 0)
|
|
368
|
+
importedBy[k] = [...v];
|
|
369
|
+
}
|
|
370
|
+
const inDegree = {};
|
|
371
|
+
for (const [k, v] of graph.inDegree) {
|
|
372
|
+
if (v > 0)
|
|
373
|
+
inDegree[k] = v;
|
|
374
|
+
}
|
|
375
|
+
const tiers = {};
|
|
376
|
+
for (const [k, v] of graph.tiers) {
|
|
377
|
+
tiers[k] = v;
|
|
378
|
+
}
|
|
379
|
+
return { importedBy, inDegree, tiers };
|
|
380
|
+
}
|
|
381
|
+
/** Deserialize DependencyGraphData back to DependencyGraph. */
|
|
382
|
+
function deserializeGraph(data) {
|
|
383
|
+
const importedBy = new Map();
|
|
384
|
+
for (const [k, v] of Object.entries(data.importedBy)) {
|
|
385
|
+
importedBy.set(k, new Set(v));
|
|
386
|
+
}
|
|
387
|
+
const inDegree = new Map(Object.entries(data.inDegree));
|
|
388
|
+
const tiers = new Map(Object.entries(data.tiers));
|
|
389
|
+
return { importedBy, inDegree, tiers };
|
|
390
|
+
}
|
|
391
|
+
// ─── Repo Map Generation ────────────────────────────────────────────
|
|
392
|
+
export async function generateRepoMap(projectRoot, parser) {
|
|
393
|
+
await parser.initialize();
|
|
394
|
+
const files = walkFiles(projectRoot);
|
|
395
|
+
const entries = [];
|
|
396
|
+
let totalLines = 0;
|
|
397
|
+
for (const filePath of files) {
|
|
398
|
+
let content;
|
|
399
|
+
try {
|
|
400
|
+
content = readSource(filePath);
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
406
|
+
const lineCount = content.split("\n").length;
|
|
407
|
+
totalLines += lineCount;
|
|
408
|
+
const imports = extractImports(content, ext);
|
|
409
|
+
const exports = extractExports(content, ext);
|
|
410
|
+
// Parse with tree-sitter for signatures
|
|
411
|
+
const signatures = [];
|
|
412
|
+
if (parser.isSupported(ext)) {
|
|
413
|
+
const result = await parser.parse(filePath, content);
|
|
414
|
+
for (const chunk of result.chunks) {
|
|
415
|
+
const rawSig = extractSignature(chunk.rawCode);
|
|
416
|
+
const cleaned = cleanSignature(rawSig);
|
|
417
|
+
const prefix = chunk.nodeType === "class" ? "class" :
|
|
418
|
+
chunk.nodeType === "interface" ? "iface" :
|
|
419
|
+
chunk.nodeType === "type" ? "type" :
|
|
420
|
+
chunk.nodeType === "method" ? "method" : "fn";
|
|
421
|
+
signatures.push(`${prefix}: ${cleaned}`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// Sort signatures alphabetically for deterministic output
|
|
425
|
+
signatures.sort(stableCompare);
|
|
426
|
+
const relPath = path.relative(projectRoot, filePath).replace(/\\/g, "/");
|
|
427
|
+
entries.push({ filePath: relPath, exports, signatures, imports, lineCount });
|
|
428
|
+
}
|
|
429
|
+
// Sort by file path for deterministic output (locale-independent)
|
|
430
|
+
entries.sort((a, b) => stableCompare(a.filePath, b.filePath));
|
|
431
|
+
const allRelPaths = entries.map(e => e.filePath);
|
|
432
|
+
const graph = buildDependencyGraph(entries, allRelPaths);
|
|
433
|
+
return {
|
|
434
|
+
version: "1.0.0",
|
|
435
|
+
generatedAt: new Date().toISOString(),
|
|
436
|
+
totalFiles: entries.length,
|
|
437
|
+
totalLines,
|
|
438
|
+
entries,
|
|
439
|
+
graph,
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
// ─── Text Rendering (Deterministic) ─────────────────────────────────
|
|
443
|
+
export function repoMapToText(map) {
|
|
444
|
+
const lines = [];
|
|
445
|
+
lines.push(`=== Repo Map (${map.totalFiles} files, ${map.totalLines} lines) ===`);
|
|
446
|
+
lines.push("");
|
|
447
|
+
for (const entry of map.entries) {
|
|
448
|
+
lines.push(`${entry.filePath} (${entry.lineCount} lines)`);
|
|
449
|
+
if (entry.exports.length > 0) {
|
|
450
|
+
lines.push(` exports: ${entry.exports.join(", ")}`);
|
|
451
|
+
}
|
|
452
|
+
for (const sig of entry.signatures) {
|
|
453
|
+
lines.push(` ${sig}`);
|
|
454
|
+
}
|
|
455
|
+
if (entry.imports.length > 0) {
|
|
456
|
+
const shortened = entry.imports.map(shortenImport);
|
|
457
|
+
lines.push(` imports: ${shortened.join(", ")}`);
|
|
458
|
+
}
|
|
459
|
+
lines.push("");
|
|
460
|
+
}
|
|
461
|
+
// Architecture tier summary (if graph available)
|
|
462
|
+
if (map.graph) {
|
|
463
|
+
const graph = map.graph;
|
|
464
|
+
const coreFiles = [];
|
|
465
|
+
const logicFiles = [];
|
|
466
|
+
let leafCount = 0;
|
|
467
|
+
for (const entry of map.entries) {
|
|
468
|
+
const tier = graph.tiers.get(entry.filePath);
|
|
469
|
+
const degree = graph.inDegree.get(entry.filePath) ?? 0;
|
|
470
|
+
if (tier === "core") {
|
|
471
|
+
coreFiles.push(` ${entry.filePath} (imported by ${degree} files)`);
|
|
472
|
+
}
|
|
473
|
+
else if (tier === "logic") {
|
|
474
|
+
logicFiles.push(` ${entry.filePath} (imported by ${degree} files)`);
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
leafCount++;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
if (coreFiles.length > 0) {
|
|
481
|
+
lines.push("=== CORE DOMAIN (Top 25% - modify with caution) ===");
|
|
482
|
+
for (const f of coreFiles)
|
|
483
|
+
lines.push(f);
|
|
484
|
+
lines.push("");
|
|
485
|
+
}
|
|
486
|
+
if (logicFiles.length > 0) {
|
|
487
|
+
lines.push("=== BUSINESS LOGIC (Middle tier) ===");
|
|
488
|
+
for (const f of logicFiles)
|
|
489
|
+
lines.push(f);
|
|
490
|
+
lines.push("");
|
|
491
|
+
}
|
|
492
|
+
if (leafCount > 0) {
|
|
493
|
+
lines.push(`=== LEAF NODES (${leafCount} files - safe to experiment) ===`);
|
|
494
|
+
lines.push("");
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
return lines.join("\n");
|
|
498
|
+
}
|
|
499
|
+
// ─── Caching ─────────────────────────────────────────────────────────
|
|
500
|
+
function computeFileDigest(projectRoot) {
|
|
501
|
+
const files = walkFiles(projectRoot);
|
|
502
|
+
const hash = crypto.createHash("sha256");
|
|
503
|
+
for (const file of files) {
|
|
504
|
+
try {
|
|
505
|
+
const stat = fs.statSync(file);
|
|
506
|
+
const rel = path.relative(projectRoot, file).replace(/\\/g, "/");
|
|
507
|
+
// M-04: Use only rel:size - mtimeMs causes full cache invalidation on git clone
|
|
508
|
+
hash.update(`${rel}:${stat.size}\n`);
|
|
509
|
+
}
|
|
510
|
+
catch {
|
|
511
|
+
// Skip
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return hash.digest("hex");
|
|
515
|
+
}
|
|
516
|
+
export async function getOrGenerateRepoMap(projectRoot, parser, forceRefresh = false) {
|
|
517
|
+
const cacheDir = path.join(projectRoot, ".nreki");
|
|
518
|
+
const cachePath = path.join(cacheDir, "repo-map.json");
|
|
519
|
+
const currentDigest = computeFileDigest(projectRoot);
|
|
520
|
+
// Check cache
|
|
521
|
+
if (!forceRefresh && fs.existsSync(cachePath)) {
|
|
522
|
+
try {
|
|
523
|
+
const cached = JSON.parse(fs.readFileSync(cachePath, "utf-8"));
|
|
524
|
+
if (cached.digest === currentDigest) {
|
|
525
|
+
// Restore graph from cached serialized form
|
|
526
|
+
if (cached.graph) {
|
|
527
|
+
cached.map.graph = deserializeGraph(cached.graph);
|
|
528
|
+
}
|
|
529
|
+
return { map: cached.map, text: cached.text, fromCache: true };
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
// Cache corrupted, regenerate
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
// Generate fresh map (includes graph)
|
|
537
|
+
const map = await generateRepoMap(projectRoot, parser);
|
|
538
|
+
const text = repoMapToText(map);
|
|
539
|
+
// Save to cache (serialize graph for JSON storage)
|
|
540
|
+
if (!fs.existsSync(cacheDir)) {
|
|
541
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
542
|
+
}
|
|
543
|
+
const graphData = map.graph ? serializeGraph(map.graph) : undefined;
|
|
544
|
+
// Strip non-serializable graph from the map for JSON storage
|
|
545
|
+
const mapForCache = { ...map, graph: undefined };
|
|
546
|
+
const cacheData = { digest: currentDigest, map: mapForCache, text, graph: graphData };
|
|
547
|
+
fs.writeFileSync(cachePath, JSON.stringify(cacheData));
|
|
548
|
+
return { map, text, fromCache: false };
|
|
549
|
+
}
|
|
550
|
+
//# sourceMappingURL=repo-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-map.js","sourceRoot":"","sources":["../src/repo-map.ts"],"names":[],"mappings":"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"}
|