@sochdb/sochdb 0.4.0 → 0.4.1

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 (69) hide show
  1. package/README.md +220 -33
  2. package/_bin/aarch64-apple-darwin/libsochdb_storage.dylib +0 -0
  3. package/_bin/aarch64-apple-darwin/sochdb-bulk +0 -0
  4. package/_bin/aarch64-apple-darwin/sochdb-grpc-server +0 -0
  5. package/_bin/aarch64-apple-darwin/sochdb-server +0 -0
  6. package/_bin/x86_64-pc-windows-msvc/sochdb-bulk.exe +0 -0
  7. package/_bin/x86_64-pc-windows-msvc/sochdb-grpc-server.exe +0 -0
  8. package/_bin/x86_64-pc-windows-msvc/sochdb_storage.dll +0 -0
  9. package/_bin/x86_64-unknown-linux-gnu/libsochdb_storage.so +0 -0
  10. package/_bin/x86_64-unknown-linux-gnu/sochdb-bulk +0 -0
  11. package/_bin/x86_64-unknown-linux-gnu/sochdb-grpc-server +0 -0
  12. package/_bin/x86_64-unknown-linux-gnu/sochdb-server +0 -0
  13. package/bin/sochdb-bulk.js +1 -1
  14. package/bin/sochdb-grpc-server.js +1 -1
  15. package/bin/sochdb-server.js +1 -1
  16. package/dist/cjs/context-builder.js +280 -0
  17. package/dist/cjs/database.js +2 -2
  18. package/dist/cjs/embedded/database.js +2 -2
  19. package/dist/cjs/errors.js +99 -7
  20. package/dist/cjs/index.js +40 -3
  21. package/dist/cjs/ipc-client.js +2 -2
  22. package/dist/cjs/memory/consolidation.js +202 -0
  23. package/dist/cjs/memory/extraction.js +181 -0
  24. package/dist/cjs/memory/index.js +26 -0
  25. package/dist/cjs/memory/retrieval.js +232 -0
  26. package/dist/cjs/memory/types.js +69 -0
  27. package/dist/cjs/namespace.js +255 -0
  28. package/dist/cjs/queue.js +289 -0
  29. package/dist/cjs/semantic-cache.js +220 -0
  30. package/dist/esm/context-builder.js +280 -0
  31. package/dist/esm/database.js +2 -2
  32. package/dist/esm/embedded/database.js +2 -2
  33. package/dist/esm/errors.js +107 -7
  34. package/dist/esm/index.js +40 -3
  35. package/dist/esm/ipc-client.js +2 -2
  36. package/dist/esm/memory/consolidation.js +206 -0
  37. package/dist/esm/memory/extraction.js +185 -0
  38. package/dist/esm/memory/index.js +26 -0
  39. package/dist/esm/memory/retrieval.js +243 -0
  40. package/dist/esm/memory/types.js +72 -0
  41. package/dist/esm/namespace.js +262 -0
  42. package/dist/esm/queue.js +291 -0
  43. package/dist/esm/semantic-cache.js +223 -0
  44. package/dist/types/context-builder.d.ts +97 -0
  45. package/dist/types/context-builder.d.ts.map +1 -0
  46. package/dist/types/database.d.ts +1 -1
  47. package/dist/types/embedded/database.d.ts +1 -1
  48. package/dist/types/errors.d.ts +57 -1
  49. package/dist/types/errors.d.ts.map +1 -1
  50. package/dist/types/index.d.ts +12 -2
  51. package/dist/types/index.d.ts.map +1 -1
  52. package/dist/types/ipc-client.d.ts +1 -1
  53. package/dist/types/memory/consolidation.d.ts +66 -0
  54. package/dist/types/memory/consolidation.d.ts.map +1 -0
  55. package/dist/types/memory/extraction.d.ts +82 -0
  56. package/dist/types/memory/extraction.d.ts.map +1 -0
  57. package/dist/types/memory/index.d.ts +10 -0
  58. package/dist/types/memory/index.d.ts.map +1 -0
  59. package/dist/types/memory/retrieval.d.ts +46 -0
  60. package/dist/types/memory/retrieval.d.ts.map +1 -0
  61. package/dist/types/memory/types.d.ts +147 -0
  62. package/dist/types/memory/types.d.ts.map +1 -0
  63. package/dist/types/namespace.d.ts +129 -0
  64. package/dist/types/namespace.d.ts.map +1 -0
  65. package/dist/types/queue.d.ts +120 -0
  66. package/dist/types/queue.d.ts.map +1 -0
  67. package/dist/types/semantic-cache.d.ts +84 -0
  68. package/dist/types/semantic-cache.d.ts.map +1 -0
  69. package/package.json +1 -1
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ /**
3
+ * Semantic Cache for LLM responses
4
+ *
5
+ * Cache LLM responses with similarity-based retrieval for cost savings.
6
+ * Uses database prefix scanning to store and retrieve cached responses.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SemanticCache = void 0;
10
+ /**
11
+ * Calculate cosine similarity between two vectors
12
+ */
13
+ function cosineSimilarity(a, b) {
14
+ if (a.length !== b.length) {
15
+ throw new Error('Vectors must have same length');
16
+ }
17
+ let dotProduct = 0;
18
+ let normA = 0;
19
+ let normB = 0;
20
+ for (let i = 0; i < a.length; i++) {
21
+ dotProduct += a[i] * b[i];
22
+ normA += a[i] * a[i];
23
+ normB += b[i] * b[i];
24
+ }
25
+ if (normA === 0 || normB === 0) {
26
+ return 0;
27
+ }
28
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
29
+ }
30
+ /**
31
+ * Semantic Cache with vector similarity matching
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const cache = new SemanticCache(db, 'llm_responses');
36
+ *
37
+ * // Store response
38
+ * await cache.put(
39
+ * 'What is Python?',
40
+ * 'Python is a high-level programming language...',
41
+ * embedding,
42
+ * 3600 // TTL in seconds
43
+ * );
44
+ *
45
+ * // Check cache
46
+ * const hit = await cache.get(queryEmbedding, 0.85);
47
+ * if (hit) {
48
+ * console.log(`Cache HIT: ${hit.value} (similarity: ${hit.score})`);
49
+ * }
50
+ * ```
51
+ */
52
+ class SemanticCache {
53
+ db;
54
+ cacheName;
55
+ prefix;
56
+ hits = 0;
57
+ misses = 0;
58
+ constructor(db, cacheName) {
59
+ this.db = db;
60
+ this.cacheName = cacheName;
61
+ this.prefix = Buffer.from(`cache:${cacheName}:`);
62
+ }
63
+ /**
64
+ * Store a cached response
65
+ */
66
+ async put(key, value, embedding, ttlSeconds = 0, metadata) {
67
+ const entry = {
68
+ key,
69
+ value,
70
+ embedding,
71
+ timestamp: Date.now(),
72
+ ttl: ttlSeconds > 0 ? ttlSeconds : undefined,
73
+ metadata,
74
+ };
75
+ const entryKey = Buffer.concat([
76
+ this.prefix,
77
+ Buffer.from(key),
78
+ ]);
79
+ await this.db.put(entryKey, Buffer.from(JSON.stringify(entry)));
80
+ }
81
+ /**
82
+ * Retrieve cached response by similarity
83
+ *
84
+ * @param queryEmbedding - Query embedding vector
85
+ * @param threshold - Minimum cosine similarity (0-1)
86
+ * @returns Best matching cache entry or null
87
+ */
88
+ async get(queryEmbedding, threshold = 0.85) {
89
+ const now = Date.now();
90
+ let bestMatch = null;
91
+ let bestScore = threshold;
92
+ // Scan all cache entries with this prefix
93
+ try {
94
+ for await (const [_, valueBuffer] of this.db.scanPrefix(this.prefix)) {
95
+ const entry = JSON.parse(valueBuffer.toString());
96
+ // Check TTL expiration
97
+ if (entry.ttl && entry.timestamp) {
98
+ const expiresAt = entry.timestamp + entry.ttl * 1000;
99
+ if (now > expiresAt) {
100
+ continue; // Skip expired entries
101
+ }
102
+ }
103
+ // Calculate similarity
104
+ const score = cosineSimilarity(queryEmbedding, entry.embedding);
105
+ // Update best match
106
+ if (score > bestScore) {
107
+ bestScore = score;
108
+ bestMatch = { ...entry, score };
109
+ }
110
+ }
111
+ }
112
+ catch (error) {
113
+ // If scan fails, return null
114
+ this.misses++;
115
+ return null;
116
+ }
117
+ if (bestMatch) {
118
+ this.hits++;
119
+ }
120
+ else {
121
+ this.misses++;
122
+ }
123
+ return bestMatch;
124
+ }
125
+ /**
126
+ * Delete a specific cache entry
127
+ */
128
+ async delete(key) {
129
+ const entryKey = Buffer.concat([
130
+ this.prefix,
131
+ Buffer.from(key),
132
+ ]);
133
+ await this.db.delete(entryKey);
134
+ }
135
+ /**
136
+ * Clear all entries in this cache
137
+ */
138
+ async clear() {
139
+ let deleted = 0;
140
+ try {
141
+ const toDelete = [];
142
+ for await (const [key] of this.db.scanPrefix(this.prefix)) {
143
+ toDelete.push(key);
144
+ }
145
+ for (const key of toDelete) {
146
+ await this.db.delete(key);
147
+ deleted++;
148
+ }
149
+ }
150
+ catch (error) {
151
+ // If operation fails, return count so far
152
+ return deleted;
153
+ }
154
+ // Reset stats
155
+ this.hits = 0;
156
+ this.misses = 0;
157
+ return deleted;
158
+ }
159
+ /**
160
+ * Get cache statistics
161
+ */
162
+ async stats() {
163
+ const now = Date.now();
164
+ let count = 0;
165
+ let memoryUsage = 0;
166
+ try {
167
+ for await (const [key, value] of this.db.scanPrefix(this.prefix)) {
168
+ const entry = JSON.parse(value.toString());
169
+ // Skip expired entries
170
+ if (entry.ttl && entry.timestamp) {
171
+ const expiresAt = entry.timestamp + entry.ttl * 1000;
172
+ if (now > expiresAt) {
173
+ continue;
174
+ }
175
+ }
176
+ count++;
177
+ memoryUsage += key.length + value.length;
178
+ }
179
+ }
180
+ catch (error) {
181
+ // Return partial stats if operation fails
182
+ }
183
+ const total = this.hits + this.misses;
184
+ const hitRate = total > 0 ? this.hits / total : 0;
185
+ return {
186
+ count,
187
+ hits: this.hits,
188
+ misses: this.misses,
189
+ hitRate,
190
+ memoryUsage,
191
+ };
192
+ }
193
+ /**
194
+ * Purge expired entries
195
+ */
196
+ async purgeExpired() {
197
+ const now = Date.now();
198
+ let purged = 0;
199
+ try {
200
+ const toDelete = [];
201
+ for await (const [key, value] of this.db.scanPrefix(this.prefix)) {
202
+ const entry = JSON.parse(value.toString());
203
+ if (entry.ttl && entry.timestamp) {
204
+ const expiresAt = entry.timestamp + entry.ttl * 1000;
205
+ if (now > expiresAt) {
206
+ toDelete.push(key);
207
+ }
208
+ }
209
+ }
210
+ for (const key of toDelete) {
211
+ await this.db.delete(key);
212
+ purged++;
213
+ }
214
+ }
215
+ catch (error) {
216
+ // Return count so far
217
+ return purged;
218
+ }
219
+ return purged;
220
+ }
221
+ }
222
+ exports.SemanticCache = SemanticCache;
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VtYW50aWMtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7QUFJSDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsQ0FBVyxFQUFFLENBQVc7SUFDaEQsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE9BQU8sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQXVCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUExTUQsc0NBME1DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZW1hbnRpYyBDYWNoZSBmb3IgTExNIHJlc3BvbnNlc1xuICogXG4gKiBDYWNoZSBMTE0gcmVzcG9uc2VzIHdpdGggc2ltaWxhcml0eS1iYXNlZCByZXRyaWV2YWwgZm9yIGNvc3Qgc2F2aW5ncy5cbiAqIFVzZXMgZGF0YWJhc2UgcHJlZml4IHNjYW5uaW5nIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBjYWNoZWQgcmVzcG9uc2VzLlxuICovXG5cbmltcG9ydCB7IEVtYmVkZGVkRGF0YWJhc2UgfSBmcm9tICcuL2VtYmVkZGVkJztcblxuLyoqXG4gKiBDYWxjdWxhdGUgY29zaW5lIHNpbWlsYXJpdHkgYmV0d2VlbiB0d28gdmVjdG9yc1xuICovXG5mdW5jdGlvbiBjb3NpbmVTaW1pbGFyaXR5KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlciB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlY3RvcnMgbXVzdCBoYXZlIHNhbWUgbGVuZ3RoJyk7XG4gIH1cblxuICBsZXQgZG90UHJvZHVjdCA9IDA7XG4gIGxldCBub3JtQSA9IDA7XG4gIGxldCBub3JtQiA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgZG90UHJvZHVjdCArPSBhW2ldICogYltpXTtcbiAgICBub3JtQSArPSBhW2ldICogYVtpXTtcbiAgICBub3JtQiArPSBiW2ldICogYltpXTtcbiAgfVxuXG4gIGlmIChub3JtQSA9PT0gMCB8fCBub3JtQiA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIGRvdFByb2R1Y3QgLyAoTWF0aC5zcXJ0KG5vcm1BKSAqIE1hdGguc3FydChub3JtQikpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlRW50cnkge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZW1iZWRkaW5nOiBudW1iZXJbXTtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHR0bD86IG51bWJlcjtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlSGl0IGV4dGVuZHMgQ2FjaGVFbnRyeSB7XG4gIHNjb3JlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVTdGF0cyB7XG4gIGNvdW50OiBudW1iZXI7XG4gIGhpdHM6IG51bWJlcjtcbiAgbWlzc2VzOiBudW1iZXI7XG4gIGhpdFJhdGU6IG51bWJlcjtcbiAgbWVtb3J5VXNhZ2U6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTZW1hbnRpYyBDYWNoZSB3aXRoIHZlY3RvciBzaW1pbGFyaXR5IG1hdGNoaW5nXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjYWNoZSA9IG5ldyBTZW1hbnRpY0NhY2hlKGRiLCAnbGxtX3Jlc3BvbnNlcycpO1xuICogXG4gKiAvLyBTdG9yZSByZXNwb25zZVxuICogYXdhaXQgY2FjaGUucHV0KFxuICogICAnV2hhdCBpcyBQeXRob24/JyxcbiAqICAgJ1B5dGhvbiBpcyBhIGhpZ2gtbGV2ZWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuLi4nLFxuICogICBlbWJlZGRpbmcsXG4gKiAgIDM2MDAgIC8vIFRUTCBpbiBzZWNvbmRzXG4gKiApO1xuICogXG4gKiAvLyBDaGVjayBjYWNoZVxuICogY29uc3QgaGl0ID0gYXdhaXQgY2FjaGUuZ2V0KHF1ZXJ5RW1iZWRkaW5nLCAwLjg1KTtcbiAqIGlmIChoaXQpIHtcbiAqICAgY29uc29sZS5sb2coYENhY2hlIEhJVDogJHtoaXQudmFsdWV9IChzaW1pbGFyaXR5OiAke2hpdC5zY29yZX0pYCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNlbWFudGljQ2FjaGUge1xuICBwcml2YXRlIGRiOiBFbWJlZGRlZERhdGFiYXNlO1xuICBwcml2YXRlIGNhY2hlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHByZWZpeDogQnVmZmVyO1xuICBwcml2YXRlIGhpdHMgPSAwO1xuICBwcml2YXRlIG1pc3NlcyA9IDA7XG5cbiAgY29uc3RydWN0b3IoZGI6IEVtYmVkZGVkRGF0YWJhc2UsIGNhY2hlTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5kYiA9IGRiO1xuICAgIHRoaXMuY2FjaGVOYW1lID0gY2FjaGVOYW1lO1xuICAgIHRoaXMucHJlZml4ID0gQnVmZmVyLmZyb20oYGNhY2hlOiR7Y2FjaGVOYW1lfTpgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhIGNhY2hlZCByZXNwb25zZVxuICAgKi9cbiAgYXN5bmMgcHV0KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZW1iZWRkaW5nOiBudW1iZXJbXSxcbiAgICB0dGxTZWNvbmRzID0gMCxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50cnk6IENhY2hlRW50cnkgPSB7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGVtYmVkZGluZyxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIHR0bDogdHRsU2Vjb25kcyA+IDAgPyB0dGxTZWNvbmRzIDogdW5kZWZpbmVkLFxuICAgICAgbWV0YWRhdGEsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudHJ5S2V5ID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICB0aGlzLnByZWZpeCxcbiAgICAgIEJ1ZmZlci5mcm9tKGtleSksXG4gICAgXSk7XG5cbiAgICBhd2FpdCB0aGlzLmRiLnB1dChlbnRyeUtleSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZW50cnkpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgY2FjaGVkIHJlc3BvbnNlIGJ5IHNpbWlsYXJpdHlcbiAgICogXG4gICAqIEBwYXJhbSBxdWVyeUVtYmVkZGluZyAtIFF1ZXJ5IGVtYmVkZGluZyB2ZWN0b3JcbiAgICogQHBhcmFtIHRocmVzaG9sZCAtIE1pbmltdW0gY29zaW5lIHNpbWlsYXJpdHkgKDAtMSlcbiAgICogQHJldHVybnMgQmVzdCBtYXRjaGluZyBjYWNoZSBlbnRyeSBvciBudWxsXG4gICAqL1xuICBhc3luYyBnZXQoXG4gICAgcXVlcnlFbWJlZGRpbmc6IG51bWJlcltdLFxuICAgIHRocmVzaG9sZCA9IDAuODVcbiAgKTogUHJvbWlzZTxDYWNoZUhpdCB8IG51bGw+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBiZXN0TWF0Y2g6IENhY2hlSGl0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGJlc3RTY29yZSA9IHRocmVzaG9sZDtcblxuICAgIC8vIFNjYW4gYWxsIGNhY2hlIGVudHJpZXMgd2l0aCB0aGlzIHByZWZpeFxuICAgIHRyeSB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFtfLCB2YWx1ZUJ1ZmZlcl0gb2YgdGhpcy5kYi5zY2FuUHJlZml4KHRoaXMucHJlZml4KSkge1xuICAgICAgICBjb25zdCBlbnRyeTogQ2FjaGVFbnRyeSA9IEpTT04ucGFyc2UodmFsdWVCdWZmZXIudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgVFRMIGV4cGlyYXRpb25cbiAgICAgICAgaWYgKGVudHJ5LnR0bCAmJiBlbnRyeS50aW1lc3RhbXApIHtcbiAgICAgICAgICBjb25zdCBleHBpcmVzQXQgPSBlbnRyeS50aW1lc3RhbXAgKyBlbnRyeS50dGwgKiAxMDAwO1xuICAgICAgICAgIGlmIChub3cgPiBleHBpcmVzQXQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGV4cGlyZWQgZW50cmllc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBzaW1pbGFyaXR5XG4gICAgICAgIGNvbnN0IHNjb3JlID0gY29zaW5lU2ltaWxhcml0eShxdWVyeUVtYmVkZGluZywgZW50cnkuZW1iZWRkaW5nKTtcblxuICAgICAgICAvLyBVcGRhdGUgYmVzdCBtYXRjaFxuICAgICAgICBpZiAoc2NvcmUgPiBiZXN0U2NvcmUpIHtcbiAgICAgICAgICBiZXN0U2NvcmUgPSBzY29yZTtcbiAgICAgICAgICBiZXN0TWF0Y2ggPSB7IC4uLmVudHJ5LCBzY29yZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElmIHNjYW4gZmFpbHMsIHJldHVybiBudWxsXG4gICAgICB0aGlzLm1pc3NlcysrO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJlc3RNYXRjaCkge1xuICAgICAgdGhpcy5oaXRzKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlzc2VzKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlc3RNYXRjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSBzcGVjaWZpYyBjYWNoZSBlbnRyeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50cnlLZXkgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIHRoaXMucHJlZml4LFxuICAgICAgQnVmZmVyLmZyb20oa2V5KSxcbiAgICBdKTtcbiAgICBhd2FpdCB0aGlzLmRiLmRlbGV0ZShlbnRyeUtleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGVudHJpZXMgaW4gdGhpcyBjYWNoZVxuICAgKi9cbiAgYXN5bmMgY2xlYXIoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgZGVsZXRlZCA9IDA7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9EZWxldGU6IEJ1ZmZlcltdID0gW107XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFtrZXldIG9mIHRoaXMuZGIuc2NhblByZWZpeCh0aGlzLnByZWZpeCkpIHtcbiAgICAgICAgdG9EZWxldGUucHVzaChrZXkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiB0b0RlbGV0ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRiLmRlbGV0ZShrZXkpO1xuICAgICAgICBkZWxldGVkKys7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElmIG9wZXJhdGlvbiBmYWlscywgcmV0dXJuIGNvdW50IHNvIGZhclxuICAgICAgcmV0dXJuIGRlbGV0ZWQ7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgc3RhdHNcbiAgICB0aGlzLmhpdHMgPSAwO1xuICAgIHRoaXMubWlzc2VzID0gMDtcblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0aXN0aWNzXG4gICAqL1xuICBhc3luYyBzdGF0cygpOiBQcm9taXNlPENhY2hlU3RhdHM+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IG1lbW9yeVVzYWdlID0gMDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmRiLnNjYW5QcmVmaXgodGhpcy5wcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5OiBDYWNoZUVudHJ5ID0gSlNPTi5wYXJzZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNraXAgZXhwaXJlZCBlbnRyaWVzXG4gICAgICAgIGlmIChlbnRyeS50dGwgJiYgZW50cnkudGltZXN0YW1wKSB7XG4gICAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gZW50cnkudGltZXN0YW1wICsgZW50cnkudHRsICogMTAwMDtcbiAgICAgICAgICBpZiAobm93ID4gZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb3VudCsrO1xuICAgICAgICBtZW1vcnlVc2FnZSArPSBrZXkubGVuZ3RoICsgdmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBSZXR1cm4gcGFydGlhbCBzdGF0cyBpZiBvcGVyYXRpb24gZmFpbHNcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuaGl0cyArIHRoaXMubWlzc2VzO1xuICAgIGNvbnN0IGhpdFJhdGUgPSB0b3RhbCA+IDAgPyB0aGlzLmhpdHMgLyB0b3RhbCA6IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY291bnQsXG4gICAgICBoaXRzOiB0aGlzLmhpdHMsXG4gICAgICBtaXNzZXM6IHRoaXMubWlzc2VzLFxuICAgICAgaGl0UmF0ZSxcbiAgICAgIG1lbW9yeVVzYWdlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHVyZ2UgZXhwaXJlZCBlbnRyaWVzXG4gICAqL1xuICBhc3luYyBwdXJnZUV4cGlyZWQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBwdXJnZWQgPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRvRGVsZXRlOiBCdWZmZXJbXSA9IFtdO1xuXG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmRiLnNjYW5QcmVmaXgodGhpcy5wcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5OiBDYWNoZUVudHJ5ID0gSlNPTi5wYXJzZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChlbnRyeS50dGwgJiYgZW50cnkudGltZXN0YW1wKSB7XG4gICAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gZW50cnkudGltZXN0YW1wICsgZW50cnkudHRsICogMTAwMDtcbiAgICAgICAgICBpZiAobm93ID4gZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICB0b0RlbGV0ZS5wdXNoKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRvRGVsZXRlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGIuZGVsZXRlKGtleSk7XG4gICAgICAgIHB1cmdlZCsrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBSZXR1cm4gY291bnQgc28gZmFyXG4gICAgICByZXR1cm4gcHVyZ2VkO1xuICAgIH1cblxuICAgIHJldHVybiBwdXJnZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Context Query Builder for LLM Context Assembly
3
+ *
4
+ * Token-aware context assembly with priority-based truncation.
5
+ */
6
+ export declare enum ContextOutputFormat {
7
+ TOON = "toon",
8
+ JSON = "json",
9
+ MARKDOWN = "markdown"
10
+ }
11
+ export declare enum TruncationStrategy {
12
+ TAIL_DROP = "tail_drop",// Drop from end
13
+ HEAD_DROP = "head_drop",// Drop from beginning
14
+ PROPORTIONAL = "proportional"
15
+ }
16
+ export interface ContextResult {
17
+ text: string;
18
+ tokenCount: number;
19
+ sections: Array<{
20
+ name: string;
21
+ tokenCount: number;
22
+ truncated: boolean;
23
+ }>;
24
+ }
25
+ /**
26
+ * Context Query Builder for assembling LLM context
27
+ */
28
+ export declare class ContextQueryBuilder {
29
+ private sessionId?;
30
+ private tokenBudget;
31
+ private format;
32
+ private truncation;
33
+ private sections;
34
+ private currentSection?;
35
+ /**
36
+ * Set session ID for context
37
+ */
38
+ forSession(sessionId: string): this;
39
+ /**
40
+ * Set token budget
41
+ */
42
+ withBudget(tokens: number): this;
43
+ /**
44
+ * Set output format
45
+ */
46
+ setFormat(format: ContextOutputFormat): this;
47
+ /**
48
+ * Set truncation strategy
49
+ */
50
+ setTruncation(strategy: TruncationStrategy): this;
51
+ /**
52
+ * Add literal text section
53
+ */
54
+ literal(name: string, priority: number, text: string): this;
55
+ /**
56
+ * Start a new section
57
+ */
58
+ section(name: string, priority: number): this;
59
+ /**
60
+ * Add content to current section
61
+ */
62
+ get(path: string): this;
63
+ /**
64
+ * Add last N records query
65
+ */
66
+ last(n: number, table: string): this;
67
+ /**
68
+ * Add where equals condition
69
+ */
70
+ whereEq(field: string, value: any): this;
71
+ /**
72
+ * Add vector search
73
+ */
74
+ search(collection: string, embedding: string, k: number): this;
75
+ /**
76
+ * Add SQL query
77
+ */
78
+ sql(query: string): this;
79
+ /**
80
+ * Finish current section
81
+ */
82
+ done(): this;
83
+ /**
84
+ * Execute and build context
85
+ */
86
+ execute(): ContextResult;
87
+ private estimateTokens;
88
+ private truncateText;
89
+ private buildToonFormat;
90
+ private buildJsonFormat;
91
+ private buildMarkdownFormat;
92
+ }
93
+ /**
94
+ * Create a context query builder
95
+ */
96
+ export declare function createContextBuilder(): ContextQueryBuilder;
97
+ //# sourceMappingURL=context-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/context-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,mBAAmB;IAC7B,IAAI,SAAS;IACb,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,oBAAY,kBAAkB;IAC5B,SAAS,cAAc,CAAQ,gBAAgB;IAC/C,SAAS,cAAc,CAAQ,sBAAsB;IACrD,YAAY,iBAAiB;CAC9B;AASD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC3E;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,MAAM,CAAiD;IAC/D,OAAO,CAAC,UAAU,CAAoD;IACtE,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,cAAc,CAAC,CAAU;IAEjC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKnC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAK5C;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAKjD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAW3D;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU7C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQvB;;OAEG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAQxC;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ9D;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQxB;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,OAAO,IAAI,aAAa;IA2FxB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,mBAAmB;CAY5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,mBAAmB,CAE1D"}
@@ -99,7 +99,7 @@ export declare class Transaction {
99
99
  *
100
100
  * @example
101
101
  * ```typescript
102
- * import { Database } from '@sushanth/sochdb';
102
+ * import { Database } from '@sochdb/sochdb';
103
103
  *
104
104
  * // Open a database
105
105
  * const db = await Database.open('./my_database');
@@ -18,7 +18,7 @@ export interface EmbeddedDatabaseConfig {
18
18
  *
19
19
  * @example
20
20
  * ```typescript
21
- * import { EmbeddedDatabase } from '@sushanth/sochdb';
21
+ * import { EmbeddedDatabase } from '@sochdb/sochdb';
22
22
  *
23
23
  * const db = await EmbeddedDatabase.open('./mydb');
24
24
  * await db.put(Buffer.from('key'), Buffer.from('value'));
@@ -3,11 +3,31 @@
3
3
  *
4
4
  * @packageDocumentation
5
5
  */
6
+ /**
7
+ * Error codes matching Rust error codes.
8
+ */
9
+ export declare enum ErrorCode {
10
+ CONNECTION_FAILED = 1001,
11
+ CONNECTION_TIMEOUT = 1002,
12
+ CONNECTION_CLOSED = 1003,
13
+ PROTOCOL_ERROR = 1004,
14
+ TRANSACTION_ABORTED = 2001,
15
+ TRANSACTION_CONFLICT = 2002,
16
+ INTERNAL_ERROR = 9001,
17
+ STORAGE_ERROR = 9003,
18
+ DATABASE_LOCKED = 10001,
19
+ LOCK_TIMEOUT = 10002,
20
+ EPOCH_MISMATCH = 10003,
21
+ SPLIT_BRAIN = 10004,
22
+ STALE_LOCK = 10005
23
+ }
6
24
  /**
7
25
  * Base error class for all SochDB errors.
8
26
  */
9
27
  export declare class SochDBError extends Error {
10
- constructor(message: string);
28
+ readonly code: ErrorCode;
29
+ readonly remediation?: string;
30
+ constructor(message: string, code?: ErrorCode, remediation?: string);
11
31
  }
12
32
  /**
13
33
  * Error thrown when connection to the database fails.
@@ -33,4 +53,40 @@ export declare class ProtocolError extends SochDBError {
33
53
  export declare class DatabaseError extends SochDBError {
34
54
  constructor(message: string);
35
55
  }
56
+ /**
57
+ * Base class for lock-related errors.
58
+ */
59
+ export declare class LockError extends SochDBError {
60
+ constructor(message: string, code?: ErrorCode, remediation?: string);
61
+ }
62
+ /**
63
+ * Error thrown when database is locked by another process.
64
+ */
65
+ export declare class DatabaseLockedError extends LockError {
66
+ readonly path: string;
67
+ readonly holderPid?: number;
68
+ constructor(path: string, holderPid?: number);
69
+ }
70
+ /**
71
+ * Error thrown when timed out waiting for database lock.
72
+ */
73
+ export declare class LockTimeoutError extends LockError {
74
+ readonly path: string;
75
+ readonly timeoutSecs: number;
76
+ constructor(path: string, timeoutSecs: number);
77
+ }
78
+ /**
79
+ * Error thrown when WAL epoch mismatch detected (stale writer).
80
+ */
81
+ export declare class EpochMismatchError extends LockError {
82
+ readonly expected: number;
83
+ readonly actual: number;
84
+ constructor(expected: number, actual: number);
85
+ }
86
+ /**
87
+ * Error thrown when split-brain condition detected (multiple writers).
88
+ */
89
+ export declare class SplitBrainError extends LockError {
90
+ constructor(message?: string);
91
+ }
36
92
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;gBACnC,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM;CAK5B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;GAEG;AACH,oBAAY,SAAS;IAEnB,iBAAiB,OAAO;IACxB,kBAAkB,OAAO;IACzB,iBAAiB,OAAO;IACxB,cAAc,OAAO;IAGrB,mBAAmB,OAAO;IAC1B,oBAAoB,OAAO;IAG3B,cAAc,OAAO;IACrB,aAAa,OAAO;IAGpB,eAAe,QAAQ;IACvB,YAAY,QAAQ;IACpB,cAAc,QAAQ;IACtB,WAAW,QAAQ;IACnB,UAAU,QAAQ;CACnB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAoC,EAAE,WAAW,CAAC,EAAE,MAAM;CAO9F;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;gBACnC,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM;CAK5B;AAMD;;GAEG;AACH,qBAAa,SAAU,SAAQ,WAAW;gBAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAqC,EAAE,WAAW,CAAC,EAAE,MAAM;CAK/F;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEvB,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAU7C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAW9C;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAW7C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,GAAE,MAAwD;CAS9E"}
@@ -35,16 +35,26 @@
35
35
  * await client.putKv('key', Buffer.from('value'));
36
36
  * ```
37
37
  */
38
- export declare const VERSION = "0.4.0";
38
+ export declare const VERSION = "0.4.1";
39
39
  export { EmbeddedDatabase, EmbeddedDatabaseConfig } from './embedded';
40
40
  export { EmbeddedTransaction } from './embedded';
41
41
  export { EmbeddedDatabase as Database } from './embedded';
42
+ export { Namespace, Collection, DistanceMetric, NamespaceNotFoundError, NamespaceExistsError, CollectionNotFoundError, CollectionExistsError, } from './namespace';
43
+ export type { NamespaceConfig, CollectionConfig, SearchRequest, SearchResult as NamespaceSearchResult, } from './namespace';
44
+ export { PriorityQueue, TaskState, createQueue, } from './queue';
45
+ export type { QueueConfig, QueueKey, Task, QueueStats, } from './queue';
46
+ export { SemanticCache, } from './semantic-cache';
47
+ export type { CacheEntry, CacheHit, CacheStats, } from './semantic-cache';
48
+ export { ContextQueryBuilder, ContextOutputFormat, TruncationStrategy, createContextBuilder, } from './context-builder';
49
+ export type { ContextResult, } from './context-builder';
50
+ export { ExtractionPipeline, Consolidator, HybridRetriever, AllowedSet, NamespacePolicy, } from './memory';
51
+ export type { Entity, Relation, Assertion, RawAssertion, CanonicalFact, ExtractionResult, ExtractionSchema, ConsolidationConfig, RetrievalConfig, RetrievalResult, RetrievalResponse, NamespaceGrant, } from './memory';
42
52
  export { SochDBClient } from './grpc-client';
43
53
  export type { SearchResult, Document, GraphNode, GraphEdge, } from './grpc-client';
44
54
  export { IpcClient } from './ipc-client';
45
55
  export { WireFormat, ContextFormat, CanonicalFormat, FormatCapabilities, FormatConversionError, } from './format';
46
56
  export { Query } from './query';
47
57
  export type { QueryResult } from './query';
48
- export { SochDBError, ConnectionError, TransactionError, ProtocolError, DatabaseError, } from './errors';
58
+ export { SochDBError, ConnectionError, TransactionError, ProtocolError, DatabaseError, ErrorCode, LockError, DatabaseLockedError, LockTimeoutError, EpochMismatchError, SplitBrainError, } from './errors';
49
59
  export { SochDBClient as GrpcClient } from './grpc-client';
50
60
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,gBAAgB,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EACL,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,gBAAgB,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EACL,SAAS,EACT,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,YAAY,IAAI,qBAAqB,GACtC,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,UAAU,EACV,QAAQ,EACR,UAAU,GACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,MAAM,EACN,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EACL,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EAEb,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -51,7 +51,7 @@ export interface IpcClientConfig {
51
51
  *
52
52
  * @example
53
53
  * ```typescript
54
- * import { IpcClient } from '@sushanth/sochdb';
54
+ * import { IpcClient } from '@sochdb/sochdb';
55
55
  *
56
56
  * const client = await IpcClient.connect('/tmp/sochdb.sock');
57
57
  *
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Consolidator for Memory System
3
+ *
4
+ * Event-sourced consolidation with append-only events and derived canonical facts.
5
+ */
6
+ import { EmbeddedDatabase } from '../embedded';
7
+ import { RawAssertion, CanonicalFact, ConsolidationConfig } from './types';
8
+ /**
9
+ * Consolidator for managing facts
10
+ */
11
+ export declare class Consolidator {
12
+ private db;
13
+ private namespace;
14
+ private config;
15
+ private prefix;
16
+ constructor(db: EmbeddedDatabase, namespace: string, config?: ConsolidationConfig);
17
+ /**
18
+ * Create consolidator from database
19
+ */
20
+ static fromDatabase(db: EmbeddedDatabase, namespace: string, config?: ConsolidationConfig): Consolidator;
21
+ /**
22
+ * Add a raw assertion (immutable event)
23
+ */
24
+ add(assertion: RawAssertion): Promise<string>;
25
+ /**
26
+ * Add assertion with contradiction handling
27
+ */
28
+ addWithContradiction(newAssertion: RawAssertion, contradicts: string[]): Promise<string>;
29
+ /**
30
+ * Run consolidation to update canonical view
31
+ */
32
+ consolidate(): Promise<number>;
33
+ /**
34
+ * Get canonical facts
35
+ */
36
+ getCanonicalFacts(): Promise<CanonicalFact[]>;
37
+ /**
38
+ * Explain provenance of a fact
39
+ */
40
+ explain(factId: string): Promise<{
41
+ evidenceCount: number;
42
+ sources: string[];
43
+ confidence: number;
44
+ }>;
45
+ /**
46
+ * Get all raw assertions
47
+ */
48
+ private getAllAssertions;
49
+ /**
50
+ * Get all contradictions
51
+ */
52
+ private getContradictions;
53
+ /**
54
+ * Merge confidence from multiple assertions
55
+ */
56
+ private mergeConfidence;
57
+ /**
58
+ * Generate deterministic assertion ID
59
+ */
60
+ private generateAssertionId;
61
+ /**
62
+ * Generate deterministic canonical fact ID
63
+ */
64
+ private generateCanonicalId;
65
+ }
66
+ //# sourceMappingURL=consolidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidation.d.ts","sourceRoot":"","sources":["../../../src/memory/consolidation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB;IAWjF;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,YAAY;IAIxG;;OAEG;IACG,GAAG,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnD;;OAEG;IACG,oBAAoB,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB9F;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IA0DpC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAWnD;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBxG;;OAEG;YACW,gBAAgB;IAW9B;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM5B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Extraction Pipeline for Memory System
3
+ *
4
+ * Compiles LLM outputs into typed, validated facts (Entity, Relation, Assertion).
5
+ */
6
+ import { EmbeddedDatabase } from '../embedded';
7
+ import { Entity, Relation, Assertion, ExtractionResult, ExtractionSchema } from './types';
8
+ /**
9
+ * Extractor function type - user provides this to call their LLM
10
+ */
11
+ export type ExtractorFunction = (text: string) => Promise<{
12
+ entities?: Array<{
13
+ name: string;
14
+ entity_type: string;
15
+ properties?: Record<string, any>;
16
+ confidence?: number;
17
+ }>;
18
+ relations?: Array<{
19
+ from_entity: string;
20
+ relation_type: string;
21
+ to_entity: string;
22
+ properties?: Record<string, any>;
23
+ confidence?: number;
24
+ }>;
25
+ assertions?: Array<{
26
+ subject: string;
27
+ predicate: string;
28
+ object: string;
29
+ confidence?: number;
30
+ }>;
31
+ }>;
32
+ /**
33
+ * Extraction Pipeline
34
+ */
35
+ export declare class ExtractionPipeline {
36
+ private db;
37
+ private namespace;
38
+ private schema?;
39
+ private prefix;
40
+ constructor(db: EmbeddedDatabase, namespace: string, schema?: ExtractionSchema);
41
+ /**
42
+ * Create pipeline from database
43
+ */
44
+ static fromDatabase(db: EmbeddedDatabase, namespace: string, schema?: ExtractionSchema): ExtractionPipeline;
45
+ /**
46
+ * Extract entities and relations from text
47
+ */
48
+ extract(text: string, extractor: ExtractorFunction): Promise<ExtractionResult>;
49
+ /**
50
+ * Extract and immediately commit to database
51
+ */
52
+ extractAndCommit(text: string, extractor: ExtractorFunction): Promise<ExtractionResult>;
53
+ /**
54
+ * Commit extraction result to database
55
+ */
56
+ commit(result: ExtractionResult): Promise<void>;
57
+ /**
58
+ * Get all entities
59
+ */
60
+ getEntities(): Promise<Entity[]>;
61
+ /**
62
+ * Get all relations
63
+ */
64
+ getRelations(): Promise<Relation[]>;
65
+ /**
66
+ * Get all assertions
67
+ */
68
+ getAssertions(): Promise<Assertion[]>;
69
+ /**
70
+ * Generate deterministic entity ID
71
+ */
72
+ private generateEntityId;
73
+ /**
74
+ * Generate deterministic relation ID
75
+ */
76
+ private generateRelationId;
77
+ /**
78
+ * Generate deterministic assertion ID
79
+ */
80
+ private generateAssertionId;
81
+ }
82
+ //# sourceMappingURL=extraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../../src/memory/extraction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/G,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5I,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjG,CAAC,CAAC;AAEH;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAO9E;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,kBAAkB;IAI3G;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwEpF;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM7F;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBrD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAWtC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAWzC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAW3C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM5B"}