@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,350 @@
1
+ /**
2
+ * Core type definitions for @vibestudio/memory
3
+ */
4
+ export type EmbeddingProviderType = "openai" | "gemini" | "local" | "auto";
5
+ export type MemoryConfig = {
6
+ /** Unique identifier for the agent using this memory */
7
+ agentId: string;
8
+ /** Root directory of the workspace to index */
9
+ workspaceDir: string;
10
+ /** Embedding provider configuration */
11
+ provider?: EmbeddingProviderType;
12
+ /** Remote API configuration (OpenAI/Gemini) */
13
+ remote?: {
14
+ apiKey?: string;
15
+ baseUrl?: string;
16
+ model?: string;
17
+ };
18
+ /** Local embedding configuration */
19
+ local?: {
20
+ modelPath?: string;
21
+ };
22
+ /** Storage configuration */
23
+ store?: {
24
+ path?: string;
25
+ };
26
+ /** Chunking configuration */
27
+ chunking?: {
28
+ tokens?: number;
29
+ overlap?: number;
30
+ };
31
+ /** Query configuration */
32
+ query?: {
33
+ maxResults?: number;
34
+ minScore?: number;
35
+ hybrid?: {
36
+ vectorWeight?: number;
37
+ textWeight?: number;
38
+ };
39
+ };
40
+ /** Sync configuration */
41
+ sync?: {
42
+ watchDebounceMs?: number;
43
+ enabled?: boolean;
44
+ };
45
+ };
46
+ export declare const DEFAULT_CONFIG: {
47
+ readonly provider: EmbeddingProviderType;
48
+ readonly model: "text-embedding-3-small";
49
+ readonly chunking: {
50
+ readonly tokens: 400;
51
+ readonly overlap: 80;
52
+ };
53
+ readonly query: {
54
+ readonly maxResults: 10;
55
+ readonly minScore: 0.35;
56
+ readonly hybrid: {
57
+ readonly vectorWeight: 0.7;
58
+ readonly textWeight: 0.3;
59
+ };
60
+ };
61
+ readonly sync: {
62
+ readonly watchDebounceMs: 1500;
63
+ };
64
+ };
65
+ export type MemorySource = "memory" | "sessions";
66
+ export type MemoryFileEntry = {
67
+ /** Relative path from workspace root */
68
+ path: string;
69
+ /** Absolute path on filesystem */
70
+ absPath: string;
71
+ /** Last modification time in milliseconds */
72
+ mtimeMs: number;
73
+ /** File size in bytes */
74
+ size: number;
75
+ /** SHA-256 hash of file contents */
76
+ hash: string;
77
+ };
78
+ export type MemoryChunk = {
79
+ /** Starting line number (1-indexed) */
80
+ startLine: number;
81
+ /** Ending line number (1-indexed, inclusive) */
82
+ endLine: number;
83
+ /** Chunk text content */
84
+ text: string;
85
+ /** SHA-256 hash of chunk text */
86
+ hash: string;
87
+ };
88
+ export type StoredChunk = MemoryChunk & {
89
+ /** Unique chunk ID (path:startLine) */
90
+ id: string;
91
+ /** File path */
92
+ path: string;
93
+ /** Source type */
94
+ source: MemorySource;
95
+ /** Model used for embedding */
96
+ model: string;
97
+ /** Embedding vector */
98
+ embedding: number[];
99
+ /** Last update timestamp */
100
+ updatedAt: number;
101
+ };
102
+ export type MemorySearchResult = {
103
+ /** File path relative to workspace */
104
+ path: string;
105
+ /** Starting line number of the matched chunk */
106
+ startLine: number;
107
+ /** Ending line number of the matched chunk */
108
+ endLine: number;
109
+ /** Relevance score (0-1) */
110
+ score: number;
111
+ /** Text snippet from the matched chunk */
112
+ snippet: string;
113
+ /** Source of the memory (file or session) */
114
+ source: MemorySource;
115
+ };
116
+ export type VectorSearchResult = {
117
+ id: string;
118
+ path: string;
119
+ startLine: number;
120
+ endLine: number;
121
+ source: MemorySource;
122
+ snippet: string;
123
+ vectorScore: number;
124
+ };
125
+ export type KeywordSearchResult = {
126
+ id: string;
127
+ path: string;
128
+ startLine: number;
129
+ endLine: number;
130
+ source: MemorySource;
131
+ snippet: string;
132
+ textScore: number;
133
+ };
134
+ export type HybridSearchOptions = {
135
+ vectorWeight?: number;
136
+ textWeight?: number;
137
+ };
138
+ export type SearchOptions = {
139
+ /** Maximum number of results to return */
140
+ maxResults?: number;
141
+ /** Minimum relevance score threshold (0-1) */
142
+ minScore?: number;
143
+ /** Session key for session-aware search */
144
+ sessionKey?: string;
145
+ };
146
+ export type MemorySearchParams = {
147
+ query: string;
148
+ maxResults?: number;
149
+ minScore?: number;
150
+ };
151
+ export type MemoryGetParams = {
152
+ path: string;
153
+ from?: number;
154
+ lines?: number;
155
+ };
156
+ export type MemorySearchResponse = {
157
+ success: boolean;
158
+ results?: MemorySearchResult[];
159
+ error?: string;
160
+ meta?: {
161
+ provider: string;
162
+ model: string;
163
+ fallbackFrom?: string;
164
+ fallbackReason?: string;
165
+ };
166
+ };
167
+ export type MemoryGetResponse = {
168
+ success: boolean;
169
+ content?: string;
170
+ path?: string;
171
+ startLine?: number;
172
+ endLine?: number;
173
+ error?: string;
174
+ };
175
+ export type MemoryIndexMeta = {
176
+ model: string;
177
+ provider: string;
178
+ providerKey?: string;
179
+ chunkTokens: number;
180
+ chunkOverlap: number;
181
+ vectorDims?: number;
182
+ };
183
+ export type FileChangeEvent = {
184
+ type: "add" | "change" | "unlink";
185
+ path: string;
186
+ };
187
+ export type SessionEvent = {
188
+ type: "message";
189
+ sessionId: string;
190
+ role: "user" | "assistant";
191
+ content: string;
192
+ timestamp: number;
193
+ };
194
+ export type SyncProgress = {
195
+ /** Current phase of sync */
196
+ phase: "scanning" | "chunking" | "embedding" | "storing" | "complete";
197
+ /** Source being synced */
198
+ source: MemorySource;
199
+ /** Total files to process */
200
+ totalFiles: number;
201
+ /** Files processed so far */
202
+ processedFiles: number;
203
+ /** Total chunks created */
204
+ totalChunks: number;
205
+ /** Chunks embedded so far */
206
+ embeddedChunks: number;
207
+ /** Any errors encountered */
208
+ errors: Array<{
209
+ file: string;
210
+ error: string;
211
+ }>;
212
+ };
213
+ export type MemoryStatus = {
214
+ /** Database status */
215
+ database: {
216
+ path: string;
217
+ sizeBytes: number;
218
+ schemaVersion: number;
219
+ };
220
+ /** File/chunk counts by source */
221
+ sources: {
222
+ memory: {
223
+ files: number;
224
+ chunks: number;
225
+ };
226
+ sessions: {
227
+ files: number;
228
+ chunks: number;
229
+ };
230
+ };
231
+ /** FTS5 availability */
232
+ fts: {
233
+ available: boolean;
234
+ error?: string;
235
+ };
236
+ /** Vector search status */
237
+ vector: {
238
+ /** sqlite-vec available for ANN search */
239
+ sqliteVecAvailable: boolean;
240
+ /** Using JS fallback for cosine similarity */
241
+ usingJsFallback: boolean;
242
+ error?: string;
243
+ };
244
+ /** Embedding provider status */
245
+ provider: {
246
+ id: string;
247
+ model: string;
248
+ dimensions: number;
249
+ /** Whether fallback was activated */
250
+ fallbackActivated: boolean;
251
+ fallbackFrom?: string;
252
+ fallbackReason?: string;
253
+ /** Failure count for active fallback switching */
254
+ consecutiveFailures: number;
255
+ };
256
+ /** Batch processing status */
257
+ batch: {
258
+ /** Whether batch API is enabled */
259
+ enabled: boolean;
260
+ /** Pending batch jobs */
261
+ pendingJobs: number;
262
+ /** Whether batch was auto-disabled due to failures */
263
+ autoDisabled: boolean;
264
+ disableReason?: string;
265
+ };
266
+ /** Sync status */
267
+ sync: {
268
+ watching: boolean;
269
+ intervalMs?: number;
270
+ lastSyncAt?: number;
271
+ memoryDirty: boolean;
272
+ sessionsDirty: boolean;
273
+ };
274
+ };
275
+ export type ProbeResult = {
276
+ available: boolean;
277
+ error?: string;
278
+ latencyMs?: number;
279
+ };
280
+ export type SessionChunk = {
281
+ /** Session ID this chunk belongs to */
282
+ sessionId: string;
283
+ /** Role of the message (user or assistant) */
284
+ role: "user" | "assistant";
285
+ /** Starting byte offset in the JSONL file */
286
+ byteOffset: number;
287
+ /** Chunk index within the session */
288
+ chunkIndex: number;
289
+ /** Starting line number (1-indexed) */
290
+ startLine: number;
291
+ /** Ending line number (1-indexed, inclusive) */
292
+ endLine: number;
293
+ /** Chunk text content */
294
+ text: string;
295
+ /** SHA-256 hash of chunk text */
296
+ hash: string;
297
+ };
298
+ export type SessionFileState = {
299
+ /** Session ID */
300
+ sessionId: string;
301
+ /** Path to JSONL file */
302
+ path: string;
303
+ /** Last processed byte offset for delta tracking */
304
+ lastByteOffset: number;
305
+ /** Last modification time */
306
+ mtimeMs: number;
307
+ /** File size in bytes */
308
+ size: number;
309
+ /** SHA-256 hash of entire file */
310
+ hash: string;
311
+ };
312
+ export type BatchConfig = {
313
+ /** Enable batch API for bulk embedding */
314
+ enabled: boolean;
315
+ /** Max texts per batch request */
316
+ maxBatchSize: number;
317
+ /** Max concurrent batch requests */
318
+ concurrency: number;
319
+ /** Timeout for batch operations (ms) */
320
+ timeoutMs: number;
321
+ /** Auto-disable after consecutive failures */
322
+ maxConsecutiveFailures: number;
323
+ };
324
+ export type BatchJob = {
325
+ id: string;
326
+ status: "pending" | "processing" | "completed" | "failed";
327
+ texts: string[];
328
+ embeddings?: number[][];
329
+ error?: string;
330
+ createdAt: number;
331
+ completedAt?: number;
332
+ };
333
+ export type ExtendedMemoryConfig = MemoryConfig & {
334
+ /** Progress callback for sync operations */
335
+ onProgress?: (progress: SyncProgress) => void;
336
+ /** Extra paths to index outside workspace (e.g., global memory dirs) */
337
+ extraPaths?: string[];
338
+ /** Session directory for transcript indexing */
339
+ sessionsDir?: string;
340
+ /** Extended sync configuration */
341
+ sync?: MemoryConfig["sync"] & {
342
+ /** Interval-based sync period (ms), 0 to disable */
343
+ intervalMs?: number;
344
+ /** Sync sessions automatically */
345
+ syncSessions?: boolean;
346
+ };
347
+ /** Batch API configuration */
348
+ batch?: Partial<BatchConfig>;
349
+ };
350
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Core type definitions for @vibestudio/memory
3
+ */
4
+ export const DEFAULT_CONFIG = {
5
+ provider: "openai",
6
+ model: "text-embedding-3-small",
7
+ chunking: { tokens: 400, overlap: 80 },
8
+ query: {
9
+ maxResults: 10,
10
+ minScore: 0.35,
11
+ hybrid: { vectorWeight: 0.7, textWeight: 0.3 },
12
+ },
13
+ sync: { watchDebounceMs: 1500 },
14
+ };
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkDH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,QAAiC;IAC3C,KAAK,EAAE,wBAAwB;IAC/B,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;IACtC,KAAK,EAAE;QACL,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;KAC/C;IACD,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;CACvB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Async semaphore for limiting concurrent operations
3
+ */
4
+ export declare class Semaphore {
5
+ private permits;
6
+ private waitQueue;
7
+ constructor(maxPermits: number);
8
+ /**
9
+ * Number of available permits
10
+ */
11
+ get available(): number;
12
+ /**
13
+ * Acquire a permit, waiting if necessary
14
+ */
15
+ acquire(): Promise<void>;
16
+ /**
17
+ * Release a permit
18
+ */
19
+ release(): void;
20
+ /**
21
+ * Run an async function with automatic acquire/release
22
+ */
23
+ run<T>(fn: () => Promise<T>): Promise<T>;
24
+ }
25
+ //# sourceMappingURL=concurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/utils/concurrency.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAyB;gBAE9B,UAAU,EAAE,MAAM;IAO9B;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B;;OAEG;IACH,OAAO,IAAI,IAAI;IAWf;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAQ/C"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Async semaphore for limiting concurrent operations
3
+ */
4
+ export class Semaphore {
5
+ permits;
6
+ waitQueue = [];
7
+ constructor(maxPermits) {
8
+ if (maxPermits < 1) {
9
+ throw new Error("Semaphore requires at least 1 permit");
10
+ }
11
+ this.permits = maxPermits;
12
+ }
13
+ /**
14
+ * Number of available permits
15
+ */
16
+ get available() {
17
+ return this.permits;
18
+ }
19
+ /**
20
+ * Acquire a permit, waiting if necessary
21
+ */
22
+ async acquire() {
23
+ if (this.permits > 0) {
24
+ this.permits--;
25
+ return;
26
+ }
27
+ // Wait for a permit to become available
28
+ return new Promise((resolve) => {
29
+ this.waitQueue.push(resolve);
30
+ });
31
+ }
32
+ /**
33
+ * Release a permit
34
+ */
35
+ release() {
36
+ const next = this.waitQueue.shift();
37
+ if (next) {
38
+ // Give permit to waiting task
39
+ next();
40
+ }
41
+ else {
42
+ // Return permit to pool
43
+ this.permits++;
44
+ }
45
+ }
46
+ /**
47
+ * Run an async function with automatic acquire/release
48
+ */
49
+ async run(fn) {
50
+ await this.acquire();
51
+ try {
52
+ return await fn();
53
+ }
54
+ finally {
55
+ this.release();
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=concurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/utils/concurrency.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,OAAO,CAAS;IAChB,SAAS,GAAsB,EAAE,CAAC;IAE1C,YAAY,UAAkB;QAC5B,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,8BAA8B;YAC9B,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,CAAC;YACN,wBAAwB;YACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAI,EAAoB;QAC/B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compute SHA-256 hash of a string
3
+ */
4
+ export declare function hashText(value: string): string;
5
+ /**
6
+ * Compute SHA-256 hash of a file's contents
7
+ */
8
+ export declare function hashFile(filePath: string): Promise<string>;
9
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE"}
@@ -0,0 +1,16 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile } from "node:fs/promises";
3
+ /**
4
+ * Compute SHA-256 hash of a string
5
+ */
6
+ export function hashText(value) {
7
+ return createHash("sha256").update(value).digest("hex");
8
+ }
9
+ /**
10
+ * Compute SHA-256 hash of a file's contents
11
+ */
12
+ export async function hashFile(filePath) {
13
+ const content = await readFile(filePath, "utf-8");
14
+ return hashText(content);
15
+ }
16
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { hashText, hashFile } from "./hash.js";
2
+ export { retry, RetryError, type RetryOptions } from "./retry.js";
3
+ export { Semaphore } from "./concurrency.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { hashText, hashFile } from "./hash.js";
2
+ export { retry, RetryError } from "./retry.js";
3
+ export { Semaphore } from "./concurrency.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,22 @@
1
+ export type RetryOptions = {
2
+ /** Maximum number of attempts (default: 3) */
3
+ maxAttempts?: number;
4
+ /** Base delay in ms before retry (default: 1000) */
5
+ baseDelayMs?: number;
6
+ /** Maximum delay in ms (default: 30000) */
7
+ maxDelayMs?: number;
8
+ /** Callback on each retry */
9
+ onRetry?: (error: Error, attempt: number) => void;
10
+ /** Return false to stop retrying (default: always retry) */
11
+ shouldRetry?: (error: Error) => boolean | Promise<boolean>;
12
+ };
13
+ export declare class RetryError extends Error {
14
+ readonly attempts: number;
15
+ readonly errors: Error[];
16
+ constructor(message: string, attempts: number, errors: Error[]);
17
+ }
18
+ /**
19
+ * Retry an async function with exponential backoff
20
+ */
21
+ export declare function retry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
22
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,4DAA4D;IAC5D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5D,CAAC;AAEF,qBAAa,UAAW,SAAQ,KAAK;aAGjB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,KAAK,EAAE;gBAF/B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,KAAK,EAAE;CAKlC;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CA8CZ"}
@@ -0,0 +1,48 @@
1
+ export class RetryError extends Error {
2
+ attempts;
3
+ errors;
4
+ constructor(message, attempts, errors) {
5
+ super(message);
6
+ this.attempts = attempts;
7
+ this.errors = errors;
8
+ this.name = "RetryError";
9
+ }
10
+ }
11
+ /**
12
+ * Retry an async function with exponential backoff
13
+ */
14
+ export async function retry(fn, options = {}) {
15
+ const { maxAttempts = 3, baseDelayMs = 1000, maxDelayMs = 30000, onRetry, shouldRetry, } = options;
16
+ const errors = [];
17
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
18
+ try {
19
+ return await fn();
20
+ }
21
+ catch (err) {
22
+ const error = err instanceof Error ? err : new Error(String(err));
23
+ errors.push(error);
24
+ // Check if we should retry
25
+ if (shouldRetry) {
26
+ const canRetry = await shouldRetry(error);
27
+ if (!canRetry) {
28
+ throw error;
29
+ }
30
+ }
31
+ // If this was the last attempt, throw
32
+ if (attempt >= maxAttempts) {
33
+ throw new RetryError(`Failed after ${maxAttempts} attempts: ${error.message}`, maxAttempts, errors);
34
+ }
35
+ // Call onRetry callback
36
+ onRetry?.(error, attempt);
37
+ // Calculate delay with exponential backoff
38
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt - 1), maxDelayMs);
39
+ await sleep(delay);
40
+ }
41
+ }
42
+ // This should never be reached
43
+ throw new RetryError("Unexpected retry exit", maxAttempts, errors);
44
+ }
45
+ function sleep(ms) {
46
+ return new Promise((resolve) => setTimeout(resolve, ms));
47
+ }
48
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAGjB;IACA;IAHlB,YACE,OAAe,EACC,QAAgB,EAChB,MAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAS;QAG/B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,UAAwB,EAAE;IAE1B,MAAM,EACJ,WAAW,GAAG,CAAC,EACf,WAAW,GAAG,IAAI,EAClB,UAAU,GAAG,KAAK,EAClB,OAAO,EACP,WAAW,GACZ,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnB,2BAA2B;YAC3B,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YAED,sCAAsC;YACtC,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;gBAC3B,MAAM,IAAI,UAAU,CAClB,gBAAgB,WAAW,cAAc,KAAK,CAAC,OAAO,EAAE,EACxD,WAAW,EACX,MAAM,CACP,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1B,2CAA2C;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC3E,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,IAAI,UAAU,CAAC,uBAAuB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}