@aicodepulse/core 0.1.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,142 @@
1
+ import BetterSqlite3 from 'better-sqlite3';
2
+
3
+ interface IndexMeta {
4
+ schemaVersion: number;
5
+ lastIndexedCommit: string;
6
+ lastIndexedAt: number;
7
+ repoRoot: string;
8
+ totalFiles: number;
9
+ totalSymbols: number;
10
+ }
11
+ type SymbolKind = 'function' | 'class' | 'interface' | 'type' | 'enum' | 'variable' | 'constant' | 'method' | 'property' | 'module';
12
+ interface FileRecord {
13
+ id: number;
14
+ path: string;
15
+ language: string;
16
+ contentHash: string;
17
+ sizeBytes: number;
18
+ linesTotal: number;
19
+ indexedAt: number;
20
+ isDeleted: boolean;
21
+ }
22
+ interface CodeSymbol {
23
+ id: number;
24
+ fileId: number;
25
+ filePath: string;
26
+ name: string;
27
+ kind: SymbolKind;
28
+ line: number;
29
+ endLine: number;
30
+ isExported: boolean;
31
+ signature: string | null;
32
+ docComment: string | null;
33
+ parentName: string | null;
34
+ }
35
+ interface ImportEdge {
36
+ id: number;
37
+ fromFileId: number;
38
+ fromPath: string;
39
+ toPath: string | null;
40
+ toPackage: string | null;
41
+ importedNames: string[];
42
+ isTypeOnly: boolean;
43
+ }
44
+ type LayerName = 'repo_overview' | 'directory_map' | 'symbol_table' | 'import_graph' | 'focus';
45
+ interface ContextRequest {
46
+ budgetTokens: number;
47
+ focusPath?: string;
48
+ format: 'markdown' | 'xml';
49
+ layers?: LayerName[];
50
+ }
51
+ interface LayerResult {
52
+ layer: LayerName;
53
+ tokensUsed: number;
54
+ content: string;
55
+ truncated: boolean;
56
+ }
57
+ interface ContextResult {
58
+ totalTokens: number;
59
+ budgetTokens: number;
60
+ layers: LayerResult[];
61
+ rendered: string;
62
+ }
63
+ interface CodePulseConfig {
64
+ exclude: string[];
65
+ maxFileSizeBytes: number;
66
+ defaultBudgetTokens: number;
67
+ layerWeights: Record<LayerName, number>;
68
+ languages?: string[];
69
+ }
70
+ declare const DEFAULT_CONFIG: CodePulseConfig;
71
+
72
+ type DB = BetterSqlite3.Database;
73
+ declare function openDatabase(dbPath: string): DB;
74
+
75
+ declare class FileRepository {
76
+ private db;
77
+ constructor(db: DB);
78
+ upsert(file: Omit<FileRecord, 'id'>): number;
79
+ getByPath(path: string): FileRecord | null;
80
+ markDeleted(path: string): void;
81
+ getAllActive(): FileRecord[];
82
+ getLanguageStats(): {
83
+ language: string;
84
+ count: number;
85
+ }[];
86
+ }
87
+
88
+ declare class SymbolRepository {
89
+ private db;
90
+ constructor(db: DB);
91
+ insertSymbols(fileId: number, symbols: Omit<CodeSymbol, 'id'>[]): void;
92
+ insertImports(fileId: number, edges: Omit<ImportEdge, 'id'>[]): void;
93
+ deleteByFileId(fileId: number): void;
94
+ getExportedByFile(filePath: string): CodeSymbol[];
95
+ getAllExported(): CodeSymbol[];
96
+ search(query: string, limit?: number): CodeSymbol[];
97
+ getImportsFrom(filePath: string): ImportEdge[];
98
+ getImportersOf(filePath: string): string[];
99
+ getTopImportedFiles(limit?: number): {
100
+ path: string;
101
+ importerCount: number;
102
+ }[];
103
+ }
104
+
105
+ declare class MetaRepository {
106
+ private db;
107
+ constructor(db: DB);
108
+ get(key: string): string | null;
109
+ set(key: string, value: string): void;
110
+ getIndexMeta(): IndexMeta;
111
+ saveIndexMeta(commit: string, repoRoot: string): void;
112
+ }
113
+
114
+ interface IndexStats {
115
+ filesAdded: number;
116
+ filesUpdated: number;
117
+ filesDeleted: number;
118
+ filesSkipped: number;
119
+ symbolsTotal: number;
120
+ durationMs: number;
121
+ mode: 'full' | 'incremental';
122
+ }
123
+ declare class Indexer {
124
+ private db;
125
+ private repoRoot;
126
+ private config;
127
+ private parser;
128
+ private files;
129
+ private symbols;
130
+ private meta;
131
+ constructor(db: DB, repoRoot: string, config: CodePulseConfig);
132
+ runFull(): Promise<IndexStats>;
133
+ runIncremental(): Promise<IndexStats>;
134
+ private indexFile;
135
+ parseAndIndex(absolutePath: string, relativePath: string): Promise<void>;
136
+ runFullWithParsing(onProgress?: (done: number, total: number) => void): Promise<IndexStats>;
137
+ runIncrementalWithParsing(onProgress?: (done: number, total: number) => void): Promise<IndexStats>;
138
+ }
139
+
140
+ declare function generateContext(db: DB, request: ContextRequest, config: CodePulseConfig): ContextResult;
141
+
142
+ export { type CodePulseConfig, type CodeSymbol, type ContextRequest, type ContextResult, DEFAULT_CONFIG, type FileRecord, FileRepository, type ImportEdge, type IndexMeta, type IndexStats, Indexer, type LayerName, type LayerResult, MetaRepository, type SymbolKind, SymbolRepository, generateContext, openDatabase };