@xfabric/memory 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.
Files changed (121) hide show
  1. package/dist/chunking/index.d.ts +3 -0
  2. package/dist/chunking/index.d.ts.map +1 -0
  3. package/dist/chunking/index.js +3 -0
  4. package/dist/chunking/index.js.map +1 -0
  5. package/dist/chunking/markdown.d.ts +13 -0
  6. package/dist/chunking/markdown.d.ts.map +1 -0
  7. package/dist/chunking/markdown.js +106 -0
  8. package/dist/chunking/markdown.js.map +1 -0
  9. package/dist/chunking/session.d.ts +24 -0
  10. package/dist/chunking/session.d.ts.map +1 -0
  11. package/dist/chunking/session.js +173 -0
  12. package/dist/chunking/session.js.map +1 -0
  13. package/dist/index.d.ts +18 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +24 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/memory-manager.d.ts +189 -0
  18. package/dist/memory-manager.d.ts.map +1 -0
  19. package/dist/memory-manager.js +1055 -0
  20. package/dist/memory-manager.js.map +1 -0
  21. package/dist/providers/gemini.d.ts +6 -0
  22. package/dist/providers/gemini.d.ts.map +1 -0
  23. package/dist/providers/gemini.js +73 -0
  24. package/dist/providers/gemini.js.map +1 -0
  25. package/dist/providers/index.d.ts +20 -0
  26. package/dist/providers/index.d.ts.map +1 -0
  27. package/dist/providers/index.js +102 -0
  28. package/dist/providers/index.js.map +1 -0
  29. package/dist/providers/local.d.ts +14 -0
  30. package/dist/providers/local.d.ts.map +1 -0
  31. package/dist/providers/local.js +73 -0
  32. package/dist/providers/local.js.map +1 -0
  33. package/dist/providers/openai.d.ts +6 -0
  34. package/dist/providers/openai.d.ts.map +1 -0
  35. package/dist/providers/openai.js +48 -0
  36. package/dist/providers/openai.js.map +1 -0
  37. package/dist/providers/types.d.ts +62 -0
  38. package/dist/providers/types.d.ts.map +1 -0
  39. package/dist/providers/types.js +2 -0
  40. package/dist/providers/types.js.map +1 -0
  41. package/dist/search/fts.d.ts +11 -0
  42. package/dist/search/fts.d.ts.map +1 -0
  43. package/dist/search/fts.js +50 -0
  44. package/dist/search/fts.js.map +1 -0
  45. package/dist/search/hybrid.d.ts +16 -0
  46. package/dist/search/hybrid.d.ts.map +1 -0
  47. package/dist/search/hybrid.js +83 -0
  48. package/dist/search/hybrid.js.map +1 -0
  49. package/dist/search/index.d.ts +4 -0
  50. package/dist/search/index.d.ts.map +1 -0
  51. package/dist/search/index.js +4 -0
  52. package/dist/search/index.js.map +1 -0
  53. package/dist/search/vector.d.ts +25 -0
  54. package/dist/search/vector.d.ts.map +1 -0
  55. package/dist/search/vector.js +152 -0
  56. package/dist/search/vector.js.map +1 -0
  57. package/dist/storage/index.d.ts +4 -0
  58. package/dist/storage/index.d.ts.map +1 -0
  59. package/dist/storage/index.js +4 -0
  60. package/dist/storage/index.js.map +1 -0
  61. package/dist/storage/schema.d.ts +24 -0
  62. package/dist/storage/schema.d.ts.map +1 -0
  63. package/dist/storage/schema.js +175 -0
  64. package/dist/storage/schema.js.map +1 -0
  65. package/dist/storage/sqlite-vec.d.ts +22 -0
  66. package/dist/storage/sqlite-vec.d.ts.map +1 -0
  67. package/dist/storage/sqlite-vec.js +85 -0
  68. package/dist/storage/sqlite-vec.js.map +1 -0
  69. package/dist/storage/sqlite.d.ts +206 -0
  70. package/dist/storage/sqlite.d.ts.map +1 -0
  71. package/dist/storage/sqlite.js +352 -0
  72. package/dist/storage/sqlite.js.map +1 -0
  73. package/dist/sync/index.d.ts +4 -0
  74. package/dist/sync/index.d.ts.map +1 -0
  75. package/dist/sync/index.js +4 -0
  76. package/dist/sync/index.js.map +1 -0
  77. package/dist/sync/minimatch.d.ts +6 -0
  78. package/dist/sync/minimatch.d.ts.map +1 -0
  79. package/dist/sync/minimatch.js +60 -0
  80. package/dist/sync/minimatch.js.map +1 -0
  81. package/dist/sync/session-monitor.d.ts +50 -0
  82. package/dist/sync/session-monitor.d.ts.map +1 -0
  83. package/dist/sync/session-monitor.js +126 -0
  84. package/dist/sync/session-monitor.js.map +1 -0
  85. package/dist/sync/watcher.d.ts +44 -0
  86. package/dist/sync/watcher.d.ts.map +1 -0
  87. package/dist/sync/watcher.js +110 -0
  88. package/dist/sync/watcher.js.map +1 -0
  89. package/dist/tools/index.d.ts +3 -0
  90. package/dist/tools/index.d.ts.map +1 -0
  91. package/dist/tools/index.js +3 -0
  92. package/dist/tools/index.js.map +1 -0
  93. package/dist/tools/memory-get.d.ts +32 -0
  94. package/dist/tools/memory-get.d.ts.map +1 -0
  95. package/dist/tools/memory-get.js +53 -0
  96. package/dist/tools/memory-get.js.map +1 -0
  97. package/dist/tools/memory-search.d.ts +32 -0
  98. package/dist/tools/memory-search.d.ts.map +1 -0
  99. package/dist/tools/memory-search.js +56 -0
  100. package/dist/tools/memory-search.js.map +1 -0
  101. package/dist/types.d.ts +350 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +15 -0
  104. package/dist/types.js.map +1 -0
  105. package/dist/utils/concurrency.d.ts +25 -0
  106. package/dist/utils/concurrency.d.ts.map +1 -0
  107. package/dist/utils/concurrency.js +59 -0
  108. package/dist/utils/concurrency.js.map +1 -0
  109. package/dist/utils/hash.d.ts +9 -0
  110. package/dist/utils/hash.d.ts.map +1 -0
  111. package/dist/utils/hash.js +16 -0
  112. package/dist/utils/hash.js.map +1 -0
  113. package/dist/utils/index.d.ts +4 -0
  114. package/dist/utils/index.d.ts.map +1 -0
  115. package/dist/utils/index.js +4 -0
  116. package/dist/utils/index.js.map +1 -0
  117. package/dist/utils/retry.d.ts +22 -0
  118. package/dist/utils/retry.d.ts.map +1 -0
  119. package/dist/utils/retry.js +48 -0
  120. package/dist/utils/retry.js.map +1 -0
  121. package/package.json +67 -0
@@ -0,0 +1,206 @@
1
+ import Database from "better-sqlite3";
2
+ import { type SchemaStatus } from "./schema.js";
3
+ export type StorageOptions = {
4
+ /** Path to SQLite database file, or ":memory:" for in-memory */
5
+ path: string;
6
+ /** Enable WAL mode for better concurrent performance */
7
+ wal?: boolean;
8
+ };
9
+ export type CreateDatabaseResult = {
10
+ db: Database.Database;
11
+ schemaStatus: SchemaStatus;
12
+ };
13
+ /**
14
+ * Create and initialize a SQLite database connection
15
+ */
16
+ export declare function createDatabase(options: StorageOptions): CreateDatabaseResult;
17
+ /**
18
+ * Storage wrapper for memory index operations
19
+ */
20
+ export declare class MemoryStorage {
21
+ private db;
22
+ private _schemaStatus;
23
+ private _path;
24
+ constructor(options: StorageOptions);
25
+ /**
26
+ * Get the underlying database connection
27
+ */
28
+ get database(): Database.Database;
29
+ /**
30
+ * Get the schema status
31
+ */
32
+ get schemaStatus(): SchemaStatus;
33
+ /**
34
+ * Get the database file path
35
+ */
36
+ get path(): string;
37
+ /**
38
+ * Get the database file size in bytes
39
+ */
40
+ getSizeBytes(): number;
41
+ /**
42
+ * Close the database connection
43
+ */
44
+ close(): void;
45
+ /**
46
+ * Execute a function within a transaction
47
+ * Automatically commits on success, rolls back on error
48
+ */
49
+ transaction<T>(fn: () => T): T;
50
+ /**
51
+ * Execute a function within an immediate transaction (write lock)
52
+ */
53
+ writeTransaction<T>(fn: () => T): T;
54
+ /**
55
+ * Get a meta value
56
+ */
57
+ getMeta(key: string): string | undefined;
58
+ /**
59
+ * Set a meta value
60
+ */
61
+ setMeta(key: string, value: string): void;
62
+ /**
63
+ * Get file entry by path
64
+ */
65
+ getFile(path: string): {
66
+ path: string;
67
+ source: string;
68
+ hash: string;
69
+ mtime: number;
70
+ size: number;
71
+ } | undefined;
72
+ /**
73
+ * Upsert file entry
74
+ */
75
+ upsertFile(file: {
76
+ path: string;
77
+ source: string;
78
+ hash: string;
79
+ mtime: number;
80
+ size: number;
81
+ }): void;
82
+ /**
83
+ * Delete file entry
84
+ */
85
+ deleteFile(path: string): void;
86
+ /**
87
+ * Get all files
88
+ */
89
+ getAllFiles(): {
90
+ path: string;
91
+ source: string;
92
+ hash: string;
93
+ mtime: number;
94
+ size: number;
95
+ }[];
96
+ /**
97
+ * Upsert chunk with FTS sync
98
+ */
99
+ upsertChunk(chunk: {
100
+ id: string;
101
+ path: string;
102
+ source: string;
103
+ startLine: number;
104
+ endLine: number;
105
+ hash: string;
106
+ model: string;
107
+ text: string;
108
+ embedding: number[];
109
+ updatedAt: number;
110
+ }): void;
111
+ /**
112
+ * Delete chunks by path
113
+ */
114
+ deleteChunksByPath(path: string): void;
115
+ /**
116
+ * Get all chunks
117
+ */
118
+ getAllChunks(): {
119
+ id: string;
120
+ path: string;
121
+ source: string;
122
+ startLine: number;
123
+ endLine: number;
124
+ hash: string;
125
+ model: string;
126
+ text: string;
127
+ embedding: number[];
128
+ updatedAt: number;
129
+ }[];
130
+ /**
131
+ * Get cached embedding
132
+ */
133
+ getCachedEmbedding(provider: string, model: string, providerKey: string, hash: string): number[] | undefined;
134
+ /**
135
+ * Cache embedding
136
+ */
137
+ cacheEmbedding(provider: string, model: string, providerKey: string, hash: string, embedding: number[]): void;
138
+ /**
139
+ * Clear old cache entries
140
+ */
141
+ clearOldCache(maxAgeMs: number): number;
142
+ /**
143
+ * Get file/chunk counts by source
144
+ */
145
+ getSourceCounts(): {
146
+ source: string;
147
+ files: number;
148
+ chunks: number;
149
+ }[];
150
+ /**
151
+ * Delete all chunks and files by source
152
+ */
153
+ deleteBySource(source: string): {
154
+ files: number;
155
+ chunks: number;
156
+ };
157
+ /**
158
+ * Upsert multiple chunks in a transaction (more efficient for batch operations)
159
+ */
160
+ upsertChunksBatch(chunks: Array<{
161
+ id: string;
162
+ path: string;
163
+ source: string;
164
+ startLine: number;
165
+ endLine: number;
166
+ hash: string;
167
+ model: string;
168
+ text: string;
169
+ embedding: number[];
170
+ updatedAt: number;
171
+ sessionId?: string;
172
+ role?: string;
173
+ byteOffset?: number;
174
+ }>): void;
175
+ /**
176
+ * Get files by source
177
+ */
178
+ getFilesBySource(source: string): {
179
+ path: string;
180
+ source: string;
181
+ hash: string;
182
+ mtime: number;
183
+ size: number;
184
+ byteOffset: number;
185
+ }[];
186
+ /**
187
+ * Update file byte offset (for session delta tracking)
188
+ */
189
+ updateFileByteOffset(path: string, byteOffset: number): void;
190
+ /**
191
+ * Get chunks by source with optional pagination
192
+ */
193
+ getChunksBySource(source: string, options?: {
194
+ limit?: number;
195
+ offset?: number;
196
+ }): {
197
+ id: string;
198
+ path: string;
199
+ source: string;
200
+ startLine: number;
201
+ endLine: number;
202
+ text: string;
203
+ embedding: number[];
204
+ }[];
205
+ }
206
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,352 @@
1
+ import Database from "better-sqlite3";
2
+ import { dirname } from "node:path";
3
+ import { mkdirSync, statSync } from "node:fs";
4
+ import { ensureMemoryIndexSchema, getSchemaVersion, migrateSchema, SCHEMA_VERSION, } from "./schema.js";
5
+ /**
6
+ * Create and initialize a SQLite database connection
7
+ */
8
+ export function createDatabase(options) {
9
+ const { path, wal = true } = options;
10
+ // Ensure directory exists for file-based DBs
11
+ if (path !== ":memory:") {
12
+ mkdirSync(dirname(path), { recursive: true });
13
+ }
14
+ const db = new Database(path);
15
+ // Enable WAL mode for better performance
16
+ if (wal && path !== ":memory:") {
17
+ db.pragma("journal_mode = WAL");
18
+ }
19
+ // Performance optimizations
20
+ db.pragma("synchronous = NORMAL");
21
+ db.pragma("cache_size = -64000"); // 64MB cache
22
+ db.pragma("temp_store = MEMORY");
23
+ // Check and apply schema
24
+ const currentVersion = getSchemaVersion(db);
25
+ let schemaStatus;
26
+ if (currentVersion === 0) {
27
+ // Fresh database - create full schema
28
+ schemaStatus = ensureMemoryIndexSchema(db);
29
+ }
30
+ else if (currentVersion < SCHEMA_VERSION) {
31
+ // Existing database - migrate
32
+ schemaStatus = migrateSchema(db, currentVersion);
33
+ }
34
+ else {
35
+ // Schema up to date - just check FTS
36
+ schemaStatus = {
37
+ version: currentVersion,
38
+ ftsAvailable: false,
39
+ };
40
+ try {
41
+ db.prepare("SELECT 1 FROM chunks_fts LIMIT 0").run();
42
+ schemaStatus.ftsAvailable = true;
43
+ }
44
+ catch (err) {
45
+ schemaStatus.ftsError = err instanceof Error ? err.message : String(err);
46
+ }
47
+ }
48
+ return { db, schemaStatus };
49
+ }
50
+ /**
51
+ * Storage wrapper for memory index operations
52
+ */
53
+ export class MemoryStorage {
54
+ db;
55
+ _schemaStatus;
56
+ _path;
57
+ constructor(options) {
58
+ this._path = options.path;
59
+ const result = createDatabase(options);
60
+ this.db = result.db;
61
+ this._schemaStatus = result.schemaStatus;
62
+ }
63
+ /**
64
+ * Get the underlying database connection
65
+ */
66
+ get database() {
67
+ return this.db;
68
+ }
69
+ /**
70
+ * Get the schema status
71
+ */
72
+ get schemaStatus() {
73
+ return this._schemaStatus;
74
+ }
75
+ /**
76
+ * Get the database file path
77
+ */
78
+ get path() {
79
+ return this._path;
80
+ }
81
+ /**
82
+ * Get the database file size in bytes
83
+ */
84
+ getSizeBytes() {
85
+ if (this._path === ":memory:") {
86
+ return 0;
87
+ }
88
+ try {
89
+ return statSync(this._path).size;
90
+ }
91
+ catch {
92
+ return 0;
93
+ }
94
+ }
95
+ /**
96
+ * Close the database connection
97
+ */
98
+ close() {
99
+ this.db.close();
100
+ }
101
+ /**
102
+ * Execute a function within a transaction
103
+ * Automatically commits on success, rolls back on error
104
+ */
105
+ transaction(fn) {
106
+ const txn = this.db.transaction(fn);
107
+ return txn();
108
+ }
109
+ /**
110
+ * Execute a function within an immediate transaction (write lock)
111
+ */
112
+ writeTransaction(fn) {
113
+ const txn = this.db.transaction(fn);
114
+ return txn.immediate();
115
+ }
116
+ /**
117
+ * Get a meta value
118
+ */
119
+ getMeta(key) {
120
+ const row = this.db.prepare("SELECT value FROM meta WHERE key = ?").get(key);
121
+ return row?.value;
122
+ }
123
+ /**
124
+ * Set a meta value
125
+ */
126
+ setMeta(key, value) {
127
+ this.db.prepare("INSERT OR REPLACE INTO meta (key, value) VALUES (?, ?)").run(key, value);
128
+ }
129
+ /**
130
+ * Get file entry by path
131
+ */
132
+ getFile(path) {
133
+ return this.db.prepare("SELECT * FROM files WHERE path = ?").get(path);
134
+ }
135
+ /**
136
+ * Upsert file entry
137
+ */
138
+ upsertFile(file) {
139
+ this.db
140
+ .prepare(`INSERT OR REPLACE INTO files (path, source, hash, mtime, size)
141
+ VALUES (?, ?, ?, ?, ?)`)
142
+ .run(file.path, file.source, file.hash, file.mtime, file.size);
143
+ }
144
+ /**
145
+ * Delete file entry
146
+ */
147
+ deleteFile(path) {
148
+ this.db.prepare("DELETE FROM files WHERE path = ?").run(path);
149
+ }
150
+ /**
151
+ * Get all files
152
+ */
153
+ getAllFiles() {
154
+ return this.db.prepare("SELECT * FROM files").all();
155
+ }
156
+ /**
157
+ * Upsert chunk with FTS sync
158
+ */
159
+ upsertChunk(chunk) {
160
+ const embeddingJson = JSON.stringify(chunk.embedding);
161
+ // Delete existing from FTS if exists
162
+ this.db.prepare("DELETE FROM chunks_fts WHERE id = ?").run(chunk.id);
163
+ // Upsert chunk
164
+ this.db
165
+ .prepare(`INSERT OR REPLACE INTO chunks
166
+ (id, path, source, start_line, end_line, hash, model, text, embedding, updated_at)
167
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
168
+ .run(chunk.id, chunk.path, chunk.source, chunk.startLine, chunk.endLine, chunk.hash, chunk.model, chunk.text, embeddingJson, chunk.updatedAt);
169
+ // Insert into FTS
170
+ this.db
171
+ .prepare(`INSERT INTO chunks_fts (text, id, path, source, model, start_line, end_line)
172
+ VALUES (?, ?, ?, ?, ?, ?, ?)`)
173
+ .run(chunk.text, chunk.id, chunk.path, chunk.source, chunk.model, chunk.startLine, chunk.endLine);
174
+ }
175
+ /**
176
+ * Delete chunks by path
177
+ */
178
+ deleteChunksByPath(path) {
179
+ // Get chunk IDs first
180
+ const chunks = this.db.prepare("SELECT id FROM chunks WHERE path = ?").all(path);
181
+ for (const chunk of chunks) {
182
+ this.db.prepare("DELETE FROM chunks_fts WHERE id = ?").run(chunk.id);
183
+ }
184
+ this.db.prepare("DELETE FROM chunks WHERE path = ?").run(path);
185
+ }
186
+ /**
187
+ * Get all chunks
188
+ */
189
+ getAllChunks() {
190
+ const rows = this.db.prepare("SELECT * FROM chunks").all();
191
+ return rows.map((row) => ({
192
+ id: row.id,
193
+ path: row.path,
194
+ source: row.source,
195
+ startLine: row.start_line,
196
+ endLine: row.end_line,
197
+ hash: row.hash,
198
+ model: row.model,
199
+ text: row.text,
200
+ embedding: JSON.parse(row.embedding),
201
+ updatedAt: row.updated_at,
202
+ }));
203
+ }
204
+ /**
205
+ * Get cached embedding
206
+ */
207
+ getCachedEmbedding(provider, model, providerKey, hash) {
208
+ const row = this.db
209
+ .prepare(`SELECT embedding FROM embedding_cache
210
+ WHERE provider = ? AND model = ? AND provider_key = ? AND hash = ?`)
211
+ .get(provider, model, providerKey, hash);
212
+ return row ? JSON.parse(row.embedding) : undefined;
213
+ }
214
+ /**
215
+ * Cache embedding
216
+ */
217
+ cacheEmbedding(provider, model, providerKey, hash, embedding) {
218
+ this.db
219
+ .prepare(`INSERT OR REPLACE INTO embedding_cache
220
+ (provider, model, provider_key, hash, embedding, dims, updated_at)
221
+ VALUES (?, ?, ?, ?, ?, ?, ?)`)
222
+ .run(provider, model, providerKey, hash, JSON.stringify(embedding), embedding.length, Date.now());
223
+ }
224
+ /**
225
+ * Clear old cache entries
226
+ */
227
+ clearOldCache(maxAgeMs) {
228
+ const cutoff = Date.now() - maxAgeMs;
229
+ const result = this.db
230
+ .prepare("DELETE FROM embedding_cache WHERE updated_at < ?")
231
+ .run(cutoff);
232
+ return result.changes;
233
+ }
234
+ /**
235
+ * Get file/chunk counts by source
236
+ */
237
+ getSourceCounts() {
238
+ const files = this.db
239
+ .prepare("SELECT source, COUNT(*) as count FROM files GROUP BY source")
240
+ .all();
241
+ const chunks = this.db
242
+ .prepare("SELECT source, COUNT(*) as count FROM chunks GROUP BY source")
243
+ .all();
244
+ const fileMap = new Map(files.map((f) => [f.source, f.count]));
245
+ const chunkMap = new Map(chunks.map((c) => [c.source, c.count]));
246
+ const sources = new Set([...fileMap.keys(), ...chunkMap.keys()]);
247
+ return Array.from(sources).map((source) => ({
248
+ source,
249
+ files: fileMap.get(source) ?? 0,
250
+ chunks: chunkMap.get(source) ?? 0,
251
+ }));
252
+ }
253
+ /**
254
+ * Delete all chunks and files by source
255
+ */
256
+ deleteBySource(source) {
257
+ return this.writeTransaction(() => {
258
+ // Get chunk IDs to delete from FTS
259
+ const chunks = this.db
260
+ .prepare("SELECT id FROM chunks WHERE source = ?")
261
+ .all(source);
262
+ // Delete from FTS
263
+ const deleteFts = this.db.prepare("DELETE FROM chunks_fts WHERE id = ?");
264
+ for (const chunk of chunks) {
265
+ deleteFts.run(chunk.id);
266
+ }
267
+ // Delete chunks
268
+ const chunkResult = this.db
269
+ .prepare("DELETE FROM chunks WHERE source = ?")
270
+ .run(source);
271
+ // Delete files
272
+ const fileResult = this.db
273
+ .prepare("DELETE FROM files WHERE source = ?")
274
+ .run(source);
275
+ return {
276
+ files: fileResult.changes,
277
+ chunks: chunkResult.changes,
278
+ };
279
+ });
280
+ }
281
+ /**
282
+ * Upsert multiple chunks in a transaction (more efficient for batch operations)
283
+ */
284
+ upsertChunksBatch(chunks) {
285
+ if (chunks.length === 0)
286
+ return;
287
+ this.writeTransaction(() => {
288
+ const deleteFts = this.db.prepare("DELETE FROM chunks_fts WHERE id = ?");
289
+ const insertChunk = this.db.prepare(`INSERT OR REPLACE INTO chunks
290
+ (id, path, source, start_line, end_line, hash, model, text, embedding, updated_at, session_id, role, byte_offset)
291
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
292
+ const insertFts = this.db.prepare(`INSERT INTO chunks_fts (text, id, path, source, model, start_line, end_line)
293
+ VALUES (?, ?, ?, ?, ?, ?, ?)`);
294
+ for (const chunk of chunks) {
295
+ const embeddingJson = JSON.stringify(chunk.embedding);
296
+ // Delete existing from FTS
297
+ deleteFts.run(chunk.id);
298
+ // Insert chunk
299
+ insertChunk.run(chunk.id, chunk.path, chunk.source, chunk.startLine, chunk.endLine, chunk.hash, chunk.model, chunk.text, embeddingJson, chunk.updatedAt, chunk.sessionId ?? null, chunk.role ?? null, chunk.byteOffset ?? 0);
300
+ // Insert into FTS
301
+ insertFts.run(chunk.text, chunk.id, chunk.path, chunk.source, chunk.model, chunk.startLine, chunk.endLine);
302
+ }
303
+ });
304
+ }
305
+ /**
306
+ * Get files by source
307
+ */
308
+ getFilesBySource(source) {
309
+ const rows = this.db
310
+ .prepare("SELECT path, source, hash, mtime, size, byte_offset FROM files WHERE source = ?")
311
+ .all(source);
312
+ return rows.map((row) => ({
313
+ path: row.path,
314
+ source: row.source,
315
+ hash: row.hash,
316
+ mtime: row.mtime,
317
+ size: row.size,
318
+ byteOffset: row.byte_offset ?? 0,
319
+ }));
320
+ }
321
+ /**
322
+ * Update file byte offset (for session delta tracking)
323
+ */
324
+ updateFileByteOffset(path, byteOffset) {
325
+ this.db
326
+ .prepare("UPDATE files SET byte_offset = ? WHERE path = ?")
327
+ .run(byteOffset, path);
328
+ }
329
+ /**
330
+ * Get chunks by source with optional pagination
331
+ */
332
+ getChunksBySource(source, options = {}) {
333
+ const { limit, offset = 0 } = options;
334
+ let sql = "SELECT id, path, source, start_line, end_line, text, embedding FROM chunks WHERE source = ?";
335
+ const params = [source];
336
+ if (limit !== undefined) {
337
+ sql += " LIMIT ? OFFSET ?";
338
+ params.push(limit, offset);
339
+ }
340
+ const rows = this.db.prepare(sql).all(...params);
341
+ return rows.map((row) => ({
342
+ id: row.id,
343
+ path: row.path,
344
+ source: row.source,
345
+ startLine: row.start_line,
346
+ endLine: row.end_line,
347
+ text: row.text,
348
+ embedding: JSON.parse(row.embedding),
349
+ }));
350
+ }
351
+ }
352
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { FileWatcher, type FileWatcherOptions } from "./watcher.js";
2
+ export { SessionMonitor, type SessionMonitorOptions } from "./session-monitor.js";
3
+ export { minimatch } from "./minimatch.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { FileWatcher } from "./watcher.js";
2
+ export { SessionMonitor } from "./session-monitor.js";
3
+ export { minimatch } from "./minimatch.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,cAAc,EAA8B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Simple glob pattern matching for file paths
3
+ * Supports: *, **, ?
4
+ */
5
+ export declare function minimatch(path: string, pattern: string): boolean;
6
+ //# sourceMappingURL=minimatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimatch.d.ts","sourceRoot":"","sources":["../../src/sync/minimatch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQhE"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Simple glob pattern matching for file paths
3
+ * Supports: *, **, ?
4
+ */
5
+ export function minimatch(path, pattern) {
6
+ // Normalize path separators
7
+ const normalizedPath = path.replace(/\\/g, "/");
8
+ const normalizedPattern = pattern.replace(/\\/g, "/");
9
+ // Convert glob pattern to regex
10
+ const regexPattern = globToRegex(normalizedPattern);
11
+ return regexPattern.test(normalizedPath);
12
+ }
13
+ function globToRegex(pattern) {
14
+ let regex = "";
15
+ let i = 0;
16
+ while (i < pattern.length) {
17
+ const char = pattern[i];
18
+ if (char === "*") {
19
+ if (pattern[i + 1] === "*") {
20
+ // ** matches any path segments
21
+ if (pattern[i + 2] === "/") {
22
+ regex += "(?:.*/)?";
23
+ i += 3;
24
+ }
25
+ else {
26
+ regex += ".*";
27
+ i += 2;
28
+ }
29
+ }
30
+ else {
31
+ // * matches anything except /
32
+ regex += "[^/]*";
33
+ i++;
34
+ }
35
+ }
36
+ else if (char === "?") {
37
+ // ? matches any single character except /
38
+ regex += "[^/]";
39
+ i++;
40
+ }
41
+ else if (char === ".") {
42
+ regex += "\\.";
43
+ i++;
44
+ }
45
+ else if (char === "/") {
46
+ regex += "/";
47
+ i++;
48
+ }
49
+ else if ("[{(".includes(char)) {
50
+ regex += "\\" + char;
51
+ i++;
52
+ }
53
+ else {
54
+ regex += char;
55
+ i++;
56
+ }
57
+ }
58
+ return new RegExp("^" + regex + "$");
59
+ }
60
+ //# sourceMappingURL=minimatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimatch.js","sourceRoot":"","sources":["../../src/sync/minimatch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe;IACrD,4BAA4B;IAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEtD,gCAAgC;IAChC,MAAM,YAAY,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACpD,OAAO,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC3B,+BAA+B;gBAC/B,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC3B,KAAK,IAAI,UAAU,CAAC;oBACpB,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,KAAK,IAAI,IAAI,CAAC;oBACd,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,8BAA8B;gBAC9B,KAAK,IAAI,OAAO,CAAC;gBACjB,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,0CAA0C;YAC1C,KAAK,IAAI,MAAM,CAAC;YAChB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,IAAI,KAAK,CAAC;YACf,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,IAAI,GAAG,CAAC;YACb,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,IAAI,CAAC;YACd,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AACvC,CAAC"}