@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.
Files changed (150) hide show
  1. package/CHANGELOG.md +648 -0
  2. package/LICENSE +21 -0
  3. package/README.md +425 -0
  4. package/dist/ast-navigator.d.ts +29 -0
  5. package/dist/ast-navigator.d.ts.map +1 -0
  6. package/dist/ast-navigator.js +279 -0
  7. package/dist/ast-navigator.js.map +1 -0
  8. package/dist/ast-sandbox.d.ts +74 -0
  9. package/dist/ast-sandbox.d.ts.map +1 -0
  10. package/dist/ast-sandbox.js +242 -0
  11. package/dist/ast-sandbox.js.map +1 -0
  12. package/dist/chronos-memory.d.ts +69 -0
  13. package/dist/chronos-memory.d.ts.map +1 -0
  14. package/dist/chronos-memory.js +247 -0
  15. package/dist/chronos-memory.js.map +1 -0
  16. package/dist/circuit-breaker.d.ts +107 -0
  17. package/dist/circuit-breaker.d.ts.map +1 -0
  18. package/dist/circuit-breaker.js +330 -0
  19. package/dist/circuit-breaker.js.map +1 -0
  20. package/dist/compressor-advanced.d.ts +80 -0
  21. package/dist/compressor-advanced.d.ts.map +1 -0
  22. package/dist/compressor-advanced.js +555 -0
  23. package/dist/compressor-advanced.js.map +1 -0
  24. package/dist/compressor.d.ts +81 -0
  25. package/dist/compressor.d.ts.map +1 -0
  26. package/dist/compressor.js +227 -0
  27. package/dist/compressor.js.map +1 -0
  28. package/dist/database.d.ts +169 -0
  29. package/dist/database.d.ts.map +1 -0
  30. package/dist/database.js +1029 -0
  31. package/dist/database.js.map +1 -0
  32. package/dist/embedder.d.ts +73 -0
  33. package/dist/embedder.d.ts.map +1 -0
  34. package/dist/embedder.js +165 -0
  35. package/dist/embedder.js.map +1 -0
  36. package/dist/engine.d.ts +224 -0
  37. package/dist/engine.d.ts.map +1 -0
  38. package/dist/engine.js +582 -0
  39. package/dist/engine.js.map +1 -0
  40. package/dist/hologram/harvester.d.ts +41 -0
  41. package/dist/hologram/harvester.d.ts.map +1 -0
  42. package/dist/hologram/harvester.js +129 -0
  43. package/dist/hologram/harvester.js.map +1 -0
  44. package/dist/hologram/shadow-cache.d.ts +49 -0
  45. package/dist/hologram/shadow-cache.d.ts.map +1 -0
  46. package/dist/hologram/shadow-cache.js +165 -0
  47. package/dist/hologram/shadow-cache.js.map +1 -0
  48. package/dist/hologram/shadow-generator.d.ts +32 -0
  49. package/dist/hologram/shadow-generator.d.ts.map +1 -0
  50. package/dist/hologram/shadow-generator.js +828 -0
  51. package/dist/hologram/shadow-generator.js.map +1 -0
  52. package/dist/hooks/preToolUse.d.ts +63 -0
  53. package/dist/hooks/preToolUse.d.ts.map +1 -0
  54. package/dist/hooks/preToolUse.js +103 -0
  55. package/dist/hooks/preToolUse.js.map +1 -0
  56. package/dist/index.d.ts +19 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +367 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/kernel/kernel-manager.d.ts +52 -0
  61. package/dist/kernel/kernel-manager.d.ts.map +1 -0
  62. package/dist/kernel/kernel-manager.js +197 -0
  63. package/dist/kernel/kernel-manager.js.map +1 -0
  64. package/dist/kernel/kernel-worker.d.ts +9 -0
  65. package/dist/kernel/kernel-worker.d.ts.map +1 -0
  66. package/dist/kernel/kernel-worker.js +76 -0
  67. package/dist/kernel/kernel-worker.js.map +1 -0
  68. package/dist/kernel/nreki-kernel.d.ts +244 -0
  69. package/dist/kernel/nreki-kernel.d.ts.map +1 -0
  70. package/dist/kernel/nreki-kernel.js +1656 -0
  71. package/dist/kernel/nreki-kernel.js.map +1 -0
  72. package/dist/middleware/circuit-breaker.d.ts +32 -0
  73. package/dist/middleware/circuit-breaker.d.ts.map +1 -0
  74. package/dist/middleware/circuit-breaker.js +160 -0
  75. package/dist/middleware/circuit-breaker.js.map +1 -0
  76. package/dist/middleware/file-lock.d.ts +33 -0
  77. package/dist/middleware/file-lock.d.ts.map +1 -0
  78. package/dist/middleware/file-lock.js +55 -0
  79. package/dist/middleware/file-lock.js.map +1 -0
  80. package/dist/middleware/validator.d.ts +26 -0
  81. package/dist/middleware/validator.d.ts.map +1 -0
  82. package/dist/middleware/validator.js +39 -0
  83. package/dist/middleware/validator.js.map +1 -0
  84. package/dist/monitor.d.ts +94 -0
  85. package/dist/monitor.d.ts.map +1 -0
  86. package/dist/monitor.js +221 -0
  87. package/dist/monitor.js.map +1 -0
  88. package/dist/parser-pool.d.ts +28 -0
  89. package/dist/parser-pool.d.ts.map +1 -0
  90. package/dist/parser-pool.js +81 -0
  91. package/dist/parser-pool.js.map +1 -0
  92. package/dist/parser.d.ts +91 -0
  93. package/dist/parser.d.ts.map +1 -0
  94. package/dist/parser.js +311 -0
  95. package/dist/parser.js.map +1 -0
  96. package/dist/pin-memory.d.ts +35 -0
  97. package/dist/pin-memory.d.ts.map +1 -0
  98. package/dist/pin-memory.js +161 -0
  99. package/dist/pin-memory.js.map +1 -0
  100. package/dist/repo-map.d.ts +81 -0
  101. package/dist/repo-map.d.ts.map +1 -0
  102. package/dist/repo-map.js +550 -0
  103. package/dist/repo-map.js.map +1 -0
  104. package/dist/router.d.ts +102 -0
  105. package/dist/router.d.ts.map +1 -0
  106. package/dist/router.js +1989 -0
  107. package/dist/router.js.map +1 -0
  108. package/dist/semantic-edit.d.ts +82 -0
  109. package/dist/semantic-edit.d.ts.map +1 -0
  110. package/dist/semantic-edit.js +529 -0
  111. package/dist/semantic-edit.js.map +1 -0
  112. package/dist/terminal-filter.d.ts +27 -0
  113. package/dist/terminal-filter.d.ts.map +1 -0
  114. package/dist/terminal-filter.js +257 -0
  115. package/dist/terminal-filter.js.map +1 -0
  116. package/dist/undo.d.ts +21 -0
  117. package/dist/undo.d.ts.map +1 -0
  118. package/dist/undo.js +55 -0
  119. package/dist/undo.js.map +1 -0
  120. package/dist/utils/code-tokenizer.d.ts +25 -0
  121. package/dist/utils/code-tokenizer.d.ts.map +1 -0
  122. package/dist/utils/code-tokenizer.js +52 -0
  123. package/dist/utils/code-tokenizer.js.map +1 -0
  124. package/dist/utils/file-filter.d.ts +23 -0
  125. package/dist/utils/file-filter.d.ts.map +1 -0
  126. package/dist/utils/file-filter.js +48 -0
  127. package/dist/utils/file-filter.js.map +1 -0
  128. package/dist/utils/imports.d.ts +32 -0
  129. package/dist/utils/imports.d.ts.map +1 -0
  130. package/dist/utils/imports.js +155 -0
  131. package/dist/utils/imports.js.map +1 -0
  132. package/dist/utils/path-jail.d.ts +27 -0
  133. package/dist/utils/path-jail.d.ts.map +1 -0
  134. package/dist/utils/path-jail.js +95 -0
  135. package/dist/utils/path-jail.js.map +1 -0
  136. package/dist/utils/read-source.d.ts +18 -0
  137. package/dist/utils/read-source.d.ts.map +1 -0
  138. package/dist/utils/read-source.js +22 -0
  139. package/dist/utils/read-source.js.map +1 -0
  140. package/dist/utils/safe-parse.d.ts +20 -0
  141. package/dist/utils/safe-parse.d.ts.map +1 -0
  142. package/dist/utils/safe-parse.js +25 -0
  143. package/dist/utils/safe-parse.js.map +1 -0
  144. package/package.json +75 -0
  145. package/scripts/download-wasm.js +46 -0
  146. package/wasm/.gitkeep +0 -0
  147. package/wasm/tree-sitter-go.wasm +0 -0
  148. package/wasm/tree-sitter-javascript.wasm +0 -0
  149. package/wasm/tree-sitter-python.wasm +0 -0
  150. package/wasm/tree-sitter-typescript.wasm +0 -0
@@ -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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"}