claude-ex 1.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.
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.collectFiles = collectFiles;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const SKIP_DIRS = new Set([
40
+ 'node_modules', '.git', '.hg', '.svn', 'dist', 'build', 'out',
41
+ '.next', '.nuxt', '__pycache__', '.pytest_cache', 'target', 'vendor',
42
+ '.codex', '.claude', 'coverage', '.vscode', '.idea', 'venv', '.venv',
43
+ '.env', '.tox', 'bower_components', '.cache', '.parcel-cache',
44
+ 'tmp', 'temp', '.turbo', '.vercel', '.netlify',
45
+ ]);
46
+ const SKIP_EXTENSIONS = new Set([
47
+ '.lock', '.log', '.map', '.min.js', '.min.css',
48
+ '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg', '.webp',
49
+ '.woff', '.woff2', '.ttf', '.eot', '.otf',
50
+ '.mp3', '.mp4', '.wav', '.avi', '.mov', '.webm', '.ogg',
51
+ '.zip', '.tar', '.gz', '.bz2', '.rar', '.7z',
52
+ '.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
53
+ '.exe', '.dll', '.so', '.dylib', '.o', '.a',
54
+ '.pyc', '.pyo', '.class', '.jar',
55
+ '.db', '.sqlite', '.sqlite3',
56
+ '.bin', '.dat', '.img', '.iso',
57
+ ]);
58
+ const SUPPORTED_EXTENSIONS = new Set([
59
+ '.ts', '.tsx', '.js', '.jsx', '.mjs',
60
+ '.py',
61
+ '.rs',
62
+ '.go',
63
+ '.sh', '.bash',
64
+ '.c', '.h',
65
+ '.cpp', '.cc', '.hpp',
66
+ '.json',
67
+ '.css',
68
+ '.html', '.htm',
69
+ ]);
70
+ const MAX_FILE_SIZE = 512 * 1024; // 512KB
71
+ function parseGitignore(rootDir) {
72
+ const ignored = new Set();
73
+ const gitignorePath = path.join(rootDir, '.gitignore');
74
+ if (!fs.existsSync(gitignorePath))
75
+ return ignored;
76
+ try {
77
+ const content = fs.readFileSync(gitignorePath, 'utf-8');
78
+ for (const line of content.split('\n')) {
79
+ const trimmed = line.trim();
80
+ if (!trimmed || trimmed.startsWith('#'))
81
+ continue;
82
+ const name = trimmed.replace(/\/$/, '').replace(/^\//, '');
83
+ if (!name.includes('/') && !name.includes('*')) {
84
+ ignored.add(name);
85
+ }
86
+ }
87
+ }
88
+ catch {
89
+ // ignore read errors
90
+ }
91
+ return ignored;
92
+ }
93
+ function collectFiles(rootDir) {
94
+ const files = [];
95
+ const gitignored = parseGitignore(rootDir);
96
+ function walk(dir) {
97
+ let entries;
98
+ try {
99
+ entries = fs.readdirSync(dir, { withFileTypes: true });
100
+ }
101
+ catch {
102
+ return;
103
+ }
104
+ for (const entry of entries) {
105
+ const name = entry.name;
106
+ if (entry.isDirectory()) {
107
+ if (name.startsWith('.') || SKIP_DIRS.has(name) || gitignored.has(name))
108
+ continue;
109
+ walk(path.join(dir, name));
110
+ }
111
+ else if (entry.isFile()) {
112
+ const ext = path.extname(name).toLowerCase();
113
+ if (SKIP_EXTENSIONS.has(ext))
114
+ continue;
115
+ if (!SUPPORTED_EXTENSIONS.has(ext))
116
+ continue;
117
+ const fullPath = path.join(dir, name);
118
+ try {
119
+ const stat = fs.statSync(fullPath);
120
+ if (stat.size > MAX_FILE_SIZE)
121
+ continue;
122
+ }
123
+ catch {
124
+ continue;
125
+ }
126
+ files.push(path.relative(rootDir, fullPath));
127
+ }
128
+ }
129
+ }
130
+ walk(rootDir);
131
+ return files;
132
+ }
133
+ //# sourceMappingURL=collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/indexer/collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import Database from 'better-sqlite3';
2
+ export interface IndexStats {
3
+ totalFiles: number;
4
+ indexedFiles: number;
5
+ skippedFiles: number;
6
+ symbols: number;
7
+ edges: number;
8
+ timeMs: number;
9
+ }
10
+ export declare function indexProject(rootDir: string, options?: {
11
+ verbose?: boolean;
12
+ }): IndexStats;
13
+ export declare function reindexFile(rootDir: string, relPath: string, db?: Database.Database): void;
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.indexProject = indexProject;
37
+ exports.reindexFile = reindexFile;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const schema_1 = require("../db/schema");
41
+ const collector_1 = require("./collector");
42
+ const parser_1 = require("./parser");
43
+ function resolveImportPath(rootDir, fromFile, importSource) {
44
+ // Skip non-relative imports (packages)
45
+ if (!importSource.startsWith('.') && !importSource.startsWith('/'))
46
+ return null;
47
+ const fromDir = path.dirname(path.join(rootDir, fromFile));
48
+ const resolved = path.resolve(fromDir, importSource);
49
+ const rel = path.relative(rootDir, resolved);
50
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.rs', '.go', ''];
51
+ const indexFiles = ['/index.ts', '/index.tsx', '/index.js', '/index.jsx'];
52
+ // Try direct match with extensions
53
+ for (const ext of extensions) {
54
+ const candidate = rel + ext;
55
+ if (fs.existsSync(path.join(rootDir, candidate)))
56
+ return candidate;
57
+ }
58
+ // Try index files in directory
59
+ for (const idx of indexFiles) {
60
+ const candidate = rel + idx;
61
+ if (fs.existsSync(path.join(rootDir, candidate)))
62
+ return candidate;
63
+ }
64
+ return null;
65
+ }
66
+ function indexProject(rootDir, options) {
67
+ const start = performance.now();
68
+ const db = (0, schema_1.openDatabase)(rootDir);
69
+ const files = (0, collector_1.collectFiles)(rootDir);
70
+ const verbose = options?.verbose ?? false;
71
+ let indexedFiles = 0;
72
+ let skippedFiles = 0;
73
+ let totalSymbols = 0;
74
+ let totalEdges = 0;
75
+ // Track file -> symbol IDs and file -> imported file paths
76
+ const fileSymbolMap = new Map(); // filePath -> (symbolName -> symbolId)
77
+ const fileImportMap = new Map();
78
+ const validPaths = new Set(files);
79
+ const transaction = db.transaction(() => {
80
+ for (const relPath of files) {
81
+ const fullPath = path.join(rootDir, relPath);
82
+ let content;
83
+ try {
84
+ content = fs.readFileSync(fullPath, 'utf-8');
85
+ }
86
+ catch {
87
+ skippedFiles++;
88
+ continue;
89
+ }
90
+ const hash = (0, parser_1.hashFile)(content);
91
+ const language = (0, parser_1.getLanguage)(relPath);
92
+ const lineCount = content.split('\n').length;
93
+ const fileRecord = (0, schema_1.getOrCreateFile)(db, relPath, hash, language, lineCount);
94
+ if (!fileRecord.changed) {
95
+ skippedFiles++;
96
+ // Still need to track existing symbols for cross-file resolution
97
+ const existingSymbols = db.prepare('SELECT id, name, qualified_name, exported FROM symbols WHERE file_id = ?').all(fileRecord.id);
98
+ const symbolMap = new Map();
99
+ for (const s of existingSymbols) {
100
+ if (s.exported) {
101
+ symbolMap.set(s.name, s.id);
102
+ if (s.qualified_name)
103
+ symbolMap.set(s.qualified_name, s.id);
104
+ }
105
+ }
106
+ fileSymbolMap.set(relPath, symbolMap);
107
+ continue;
108
+ }
109
+ (0, schema_1.clearFileData)(db, fileRecord.id);
110
+ const parsed = (0, parser_1.parseFile)(relPath, content);
111
+ const symbolMap = new Map();
112
+ for (const sym of parsed.symbols) {
113
+ const symId = (0, schema_1.insertSymbol)(db, fileRecord.id, {
114
+ name: sym.name,
115
+ qualifiedName: sym.qualifiedName,
116
+ kind: sym.kind,
117
+ lineStart: sym.lineStart,
118
+ lineEnd: sym.lineEnd,
119
+ signature: sym.signature,
120
+ docstring: sym.docstring,
121
+ content: sym.content,
122
+ exported: sym.exported,
123
+ });
124
+ symbolMap.set(sym.name, symId);
125
+ if (sym.qualifiedName)
126
+ symbolMap.set(sym.qualifiedName, symId);
127
+ totalSymbols++;
128
+ }
129
+ fileSymbolMap.set(relPath, symbolMap);
130
+ // Resolve imports to file paths
131
+ const resolvedImports = [];
132
+ for (const imp of parsed.imports) {
133
+ const resolved = resolveImportPath(rootDir, relPath, imp.source);
134
+ if (resolved) {
135
+ // Create file dep
136
+ const toFile = db.prepare('SELECT id FROM files WHERE path = ?').get(resolved);
137
+ if (toFile) {
138
+ const importName = imp.names.length > 0 ? imp.names.join(',') : '*';
139
+ (0, schema_1.insertFileDep)(db, fileRecord.id, toFile.id, 'import', importName);
140
+ }
141
+ resolvedImports.push({ resolved, names: imp.names });
142
+ }
143
+ }
144
+ fileImportMap.set(relPath, resolvedImports);
145
+ // Create intra-file call edges
146
+ for (const call of parsed.calls) {
147
+ const callerId = symbolMap.get(call.callerSymbol);
148
+ const calledId = symbolMap.get(call.calledName);
149
+ if (callerId && calledId && callerId !== calledId) {
150
+ (0, schema_1.insertEdge)(db, callerId, calledId, 'calls');
151
+ totalEdges++;
152
+ }
153
+ }
154
+ indexedFiles++;
155
+ if (verbose && indexedFiles % 100 === 0) {
156
+ process.stderr.write(` Indexed ${indexedFiles} files...\n`);
157
+ }
158
+ }
159
+ // Remove stale files
160
+ (0, schema_1.removeStaleFiles)(db, validPaths);
161
+ // Cross-file edge resolution
162
+ for (const [filePath, resolvedImports] of fileImportMap) {
163
+ const importingSymbols = fileSymbolMap.get(filePath);
164
+ if (!importingSymbols)
165
+ continue;
166
+ for (const imp of resolvedImports) {
167
+ const exportedSymbols = fileSymbolMap.get(imp.resolved);
168
+ if (!exportedSymbols)
169
+ continue;
170
+ for (const importedName of imp.names) {
171
+ const targetId = exportedSymbols.get(importedName);
172
+ if (targetId) {
173
+ // Create REFERENCES edges from all symbols in importing file to imported symbol
174
+ for (const [, srcId] of importingSymbols) {
175
+ if (srcId !== targetId) {
176
+ (0, schema_1.insertEdge)(db, srcId, targetId, 'references');
177
+ totalEdges++;
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+ });
185
+ transaction();
186
+ // Compute PageRank
187
+ computePageRank(db);
188
+ db.close();
189
+ return {
190
+ totalFiles: files.length,
191
+ indexedFiles,
192
+ skippedFiles,
193
+ symbols: totalSymbols,
194
+ edges: totalEdges,
195
+ timeMs: performance.now() - start,
196
+ };
197
+ }
198
+ function reindexFile(rootDir, relPath, db) {
199
+ const shouldClose = !db;
200
+ if (!db)
201
+ db = (0, schema_1.openDatabase)(rootDir);
202
+ const fullPath = path.join(rootDir, relPath);
203
+ if (!fs.existsSync(fullPath)) {
204
+ (0, schema_1.removeFile)(db, relPath);
205
+ if (shouldClose)
206
+ db.close();
207
+ return;
208
+ }
209
+ let content;
210
+ try {
211
+ content = fs.readFileSync(fullPath, 'utf-8');
212
+ }
213
+ catch {
214
+ if (shouldClose)
215
+ db.close();
216
+ return;
217
+ }
218
+ const hash = (0, parser_1.hashFile)(content);
219
+ const language = (0, parser_1.getLanguage)(relPath);
220
+ const lineCount = content.split('\n').length;
221
+ const fileRecord = (0, schema_1.getOrCreateFile)(db, relPath, hash, language, lineCount);
222
+ if (!fileRecord.changed) {
223
+ if (shouldClose)
224
+ db.close();
225
+ return;
226
+ }
227
+ (0, schema_1.clearFileData)(db, fileRecord.id);
228
+ const parsed = (0, parser_1.parseFile)(relPath, content);
229
+ const symbolMap = new Map();
230
+ for (const sym of parsed.symbols) {
231
+ const symId = (0, schema_1.insertSymbol)(db, fileRecord.id, {
232
+ name: sym.name,
233
+ qualifiedName: sym.qualifiedName,
234
+ kind: sym.kind,
235
+ lineStart: sym.lineStart,
236
+ lineEnd: sym.lineEnd,
237
+ signature: sym.signature,
238
+ docstring: sym.docstring,
239
+ content: sym.content,
240
+ exported: sym.exported,
241
+ });
242
+ symbolMap.set(sym.name, symId);
243
+ if (sym.qualifiedName)
244
+ symbolMap.set(sym.qualifiedName, symId);
245
+ }
246
+ // Resolve imports
247
+ for (const imp of parsed.imports) {
248
+ const resolved = resolveImportPath(rootDir, relPath, imp.source);
249
+ if (resolved) {
250
+ const toFile = db.prepare('SELECT id FROM files WHERE path = ?').get(resolved);
251
+ if (toFile) {
252
+ (0, schema_1.insertFileDep)(db, fileRecord.id, toFile.id, 'import', imp.names.join(',') || '*');
253
+ }
254
+ }
255
+ }
256
+ // Intra-file call edges
257
+ for (const call of parsed.calls) {
258
+ const callerId = symbolMap.get(call.callerSymbol);
259
+ const calledId = symbolMap.get(call.calledName);
260
+ if (callerId && calledId && callerId !== calledId) {
261
+ (0, schema_1.insertEdge)(db, callerId, calledId, 'calls');
262
+ }
263
+ }
264
+ if (shouldClose)
265
+ db.close();
266
+ }
267
+ function computePageRank(db, iterations = 20, damping = 0.85) {
268
+ const symbols = db.prepare('SELECT id FROM symbols').all();
269
+ if (symbols.length === 0)
270
+ return;
271
+ const n = symbols.length;
272
+ const idToIdx = new Map();
273
+ const ids = [];
274
+ for (let i = 0; i < symbols.length; i++) {
275
+ idToIdx.set(symbols[i].id, i);
276
+ ids.push(symbols[i].id);
277
+ }
278
+ const edges = db.prepare('SELECT from_id, to_id FROM edges').all();
279
+ // Build adjacency: outgoing[i] = [j, k, ...] means i links to j, k
280
+ const outgoing = new Array(n).fill(null).map(() => []);
281
+ const incoming = new Array(n).fill(null).map(() => []);
282
+ const outDegree = new Array(n).fill(0);
283
+ const inDegree = new Array(n).fill(0);
284
+ for (const edge of edges) {
285
+ const from = idToIdx.get(edge.from_id);
286
+ const to = idToIdx.get(edge.to_id);
287
+ if (from !== undefined && to !== undefined) {
288
+ outgoing[from].push(to);
289
+ incoming[to].push(from);
290
+ outDegree[from]++;
291
+ inDegree[to]++;
292
+ }
293
+ }
294
+ // PageRank iteration
295
+ let rank = new Float64Array(n).fill(1 / n);
296
+ let newRank = new Float64Array(n);
297
+ for (let iter = 0; iter < iterations; iter++) {
298
+ newRank.fill((1 - damping) / n);
299
+ for (let i = 0; i < n; i++) {
300
+ if (outDegree[i] > 0) {
301
+ const share = rank[i] / outDegree[i];
302
+ for (const j of outgoing[i]) {
303
+ newRank[j] += damping * share;
304
+ }
305
+ }
306
+ else {
307
+ // Distribute dangling node's rank
308
+ const share = rank[i] / n;
309
+ for (let j = 0; j < n; j++) {
310
+ newRank[j] += damping * share;
311
+ }
312
+ }
313
+ }
314
+ [rank, newRank] = [newRank, rank];
315
+ }
316
+ // Write rankings
317
+ db.prepare('DELETE FROM rankings').run();
318
+ const insertRank = db.prepare('INSERT INTO rankings (symbol_id, pagerank, in_degree, out_degree) VALUES (?, ?, ?, ?)');
319
+ const writeRankings = db.transaction(() => {
320
+ for (let i = 0; i < n; i++) {
321
+ insertRank.run(ids[i], rank[i], inDegree[i], outDegree[i]);
322
+ }
323
+ });
324
+ writeRankings();
325
+ }
326
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export declare function getLanguage(filePath: string): string | null;
2
+ export declare function isSupportedFile(filePath: string): boolean;
3
+ export declare function hashFile(content: string): string;
4
+ export interface ExtractedSymbol {
5
+ name: string;
6
+ qualifiedName?: string;
7
+ kind: string;
8
+ lineStart: number;
9
+ lineEnd: number;
10
+ signature?: string;
11
+ docstring?: string;
12
+ content?: string;
13
+ exported?: boolean;
14
+ }
15
+ export interface ExtractedImport {
16
+ source: string;
17
+ names: string[];
18
+ isDefault: boolean;
19
+ }
20
+ export interface ExtractedCall {
21
+ callerSymbol: string;
22
+ calledName: string;
23
+ line: number;
24
+ }
25
+ export interface ParseResult {
26
+ symbols: ExtractedSymbol[];
27
+ imports: ExtractedImport[];
28
+ calls: ExtractedCall[];
29
+ language: string | null;
30
+ }
31
+ export declare function parseFile(filePath: string, content: string): ParseResult;