@fastpaca/cria 1.7.1 → 1.7.2

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.
package/README.md CHANGED
@@ -324,6 +324,30 @@ const messages = await cria
324
324
 
325
325
  </details>
326
326
 
327
+ <details>
328
+ <summary><strong>SQLite (vector search)</strong></summary>
329
+
330
+ ```ts
331
+ import { z } from "zod";
332
+ import { SqliteVectorStore } from "@fastpaca/cria/memory/sqlite-vector";
333
+
334
+ const store = new SqliteVectorStore({
335
+ filename: "cria.sqlite",
336
+ dimensions: 1536,
337
+ embed: async (text) => await getEmbedding(text),
338
+ schema: z.string(),
339
+ });
340
+
341
+ const messages = await cria
342
+ .prompt(provider)
343
+ .system("You are a research assistant.")
344
+ .vectorSearch({ store, query, limit: 10 })
345
+ .user(query)
346
+ .render({ budget: 128_000 });
347
+ ```
348
+
349
+ </details>
350
+
327
351
  <details>
328
352
  <summary><strong>Chroma (vector search)</strong></summary>
329
353
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAA8B,MAAM,UAAU,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;gBAEhC,OAAO,EAAE,kBAAkB;IAKjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAqBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;CAoDpC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAA8B,MAAM,UAAU,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAwDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;gBAEhC,OAAO,EAAE,kBAAkB;IAKjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAgBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;CAkDpC"}
@@ -1,12 +1,13 @@
1
1
  import { IncludeEnum } from "chromadb";
2
- /**
3
- * Parse a document string. Tries JSON.parse first, returns raw string on failure.
4
- * Throws if document is missing.
5
- */
6
- function parseDocument(document) {
7
- if (!document) {
2
+ import { z } from "zod";
3
+ const DocumentSchema = z
4
+ .preprocess((value) => {
5
+ if (typeof value !== "string" || value.length === 0) {
8
6
  throw new Error("ChromaStore: document is missing from entry");
9
7
  }
8
+ return value;
9
+ }, z.string())
10
+ .transform((document) => {
10
11
  try {
11
12
  return JSON.parse(document);
12
13
  }
@@ -14,7 +15,8 @@ function parseDocument(document) {
14
15
  // Document was stored as a raw string (T is string)
15
16
  return document;
16
17
  }
17
- }
18
+ });
19
+ const MetadataSchema = z.record(z.string(), z.unknown()).optional().nullable();
18
20
  /**
19
21
  * Convert L2 distance to a similarity score (0-1).
20
22
  * Lower distance = higher similarity.
@@ -29,6 +31,20 @@ function extractTimestamp(metadata, field) {
29
31
  const value = metadata?.[field];
30
32
  return typeof value === "number" ? value : 0;
31
33
  }
34
+ const ChromaEntrySchema = z
35
+ .object({
36
+ document: DocumentSchema,
37
+ metadata: MetadataSchema,
38
+ })
39
+ .transform((entry) => {
40
+ const metadata = entry.metadata ?? undefined;
41
+ return {
42
+ data: entry.document,
43
+ createdAt: extractTimestamp(metadata, "_createdAt"),
44
+ updatedAt: extractTimestamp(metadata, "_updatedAt"),
45
+ ...(metadata && { metadata }),
46
+ };
47
+ });
32
48
  /**
33
49
  * VectorMemory implementation backed by ChromaDB.
34
50
  *
@@ -77,12 +93,7 @@ export class ChromaStore {
77
93
  }
78
94
  const document = response.documents?.[0];
79
95
  const metadata = response.metadatas?.[0];
80
- return {
81
- data: parseDocument(document),
82
- createdAt: extractTimestamp(metadata, "_createdAt"),
83
- updatedAt: extractTimestamp(metadata, "_updatedAt"),
84
- ...(metadata && { metadata: metadata }),
85
- };
96
+ return ChromaEntrySchema.parse({ document, metadata });
86
97
  }
87
98
  async set(key, data, metadata) {
88
99
  const now = Date.now();
@@ -145,12 +156,10 @@ export class ChromaStore {
145
156
  results.push({
146
157
  key: id,
147
158
  score,
148
- entry: {
149
- data: parseDocument(documents[i]),
150
- createdAt: extractTimestamp(metadata, "_createdAt"),
151
- updatedAt: extractTimestamp(metadata, "_updatedAt"),
152
- ...(metadata && { metadata: metadata }),
153
- },
159
+ entry: ChromaEntrySchema.parse({
160
+ document: documents[i],
161
+ metadata,
162
+ }),
154
163
  });
155
164
  }
156
165
  return results;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAErC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,oBAAyB;YAQhC,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAsBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAyBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAG3B;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,oBAAyB;YAQhC,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAiBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAyBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAG3B;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -1,4 +1,19 @@
1
1
  import { Pool } from "pg";
2
+ import { z } from "zod";
3
+ const KVRowSchema = z
4
+ .object({
5
+ key: z.string(),
6
+ data: z.unknown(),
7
+ created_at: z.coerce.date(),
8
+ updated_at: z.coerce.date(),
9
+ metadata: z.record(z.string(), z.unknown()).nullable(),
10
+ })
11
+ .transform((row) => ({
12
+ data: row.data,
13
+ createdAt: row.created_at.getTime(),
14
+ updatedAt: row.updated_at.getTime(),
15
+ ...(row.metadata && { metadata: row.metadata }),
16
+ }));
2
17
  /**
3
18
  * Postgres-backed implementation of KVMemory.
4
19
  *
@@ -67,12 +82,7 @@ export class PostgresStore {
67
82
  if (row === undefined) {
68
83
  return null;
69
84
  }
70
- return {
71
- data: row.data,
72
- createdAt: new Date(row.created_at).getTime(),
73
- updatedAt: new Date(row.updated_at).getTime(),
74
- ...(row.metadata && { metadata: row.metadata }),
75
- };
85
+ return KVRowSchema.parse(row);
76
86
  }
77
87
  async set(key, data, metadata) {
78
88
  await this.ensureTable();
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAgC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAO;IACX,SAAS,CAAS;IAClB,eAAe,CAAU;IAClC,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,UAAgC,EAAE;QAC5C,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;QAE9D,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,eAAe,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;mCACS,IAAI,CAAC,SAAS;;;;;;;KAO5C,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,2DAA2D,IAAI,CAAC,SAAS,iBAAiB,EAC1F,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAS;YACnB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;YAC7C,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;YAC7C,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,IAAO,EACP,QAAkC;QAElC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,oDAAoD;QACpD,0DAA0D;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;oBACc,IAAI,CAAC,SAAS;;;;;;OAM3B,EACD;YACE,GAAG;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB,GAAG;YACH,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;SAC3C,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,eAAe,IAAI,CAAC,SAAS,iBAAiB,EAC9C,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqBxB,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACjB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC;KACD,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE;IACnC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE;IACnC,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;CAChD,CAAC,CAAC,CAAC;AAEN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAO;IACX,SAAS,CAAS;IAClB,eAAe,CAAU;IAClC,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,UAAgC,EAAE;QAC5C,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;QAE9D,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,eAAe,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;mCACS,IAAI,CAAC,SAAS;;;;;;;KAO5C,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,2DAA2D,IAAI,CAAC,SAAS,iBAAiB,EAC1F,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,IAAO,EACP,QAAkC;QAElC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,oDAAoD;QACpD,0DAA0D;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;oBACc,IAAI,CAAC,SAAS;;;;;;OAM3B,EACD;YACE,GAAG;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB,GAAG;YACH,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;SAC3C,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,eAAe,IAAI,CAAC,SAAS,iBAAiB,EAC9C,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,CAAC;IACzB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAEpC,OAAO,EAAE,kBAAkB;IAOjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAuBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;CAsCpC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,CAAC;IACzB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAEpC,OAAO,EAAE,kBAAkB;IAOjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;CAiCpC"}
@@ -1,3 +1,17 @@
1
+ import { z } from "zod";
2
+ const QdrantPayloadSchema = z
3
+ .object({
4
+ data: z.unknown(),
5
+ createdAt: z.number(),
6
+ updatedAt: z.number(),
7
+ metadata: z.record(z.string(), z.unknown()).optional(),
8
+ })
9
+ .transform((payload) => ({
10
+ data: payload.data,
11
+ createdAt: payload.createdAt,
12
+ updatedAt: payload.updatedAt,
13
+ ...(payload.metadata && { metadata: payload.metadata }),
14
+ }));
1
15
  /**
2
16
  * VectorMemory implementation backed by Qdrant.
3
17
  *
@@ -49,15 +63,10 @@ export class QdrantStore {
49
63
  if (!point) {
50
64
  return null;
51
65
  }
52
- const payload = point.payload;
53
- return payload
54
- ? {
55
- data: payload.data,
56
- createdAt: payload.createdAt,
57
- updatedAt: payload.updatedAt,
58
- ...(payload.metadata && { metadata: payload.metadata }),
59
- }
60
- : null;
66
+ if (!point.payload) {
67
+ throw new Error("QdrantStore: payload is missing from entry");
68
+ }
69
+ return QdrantPayloadSchema.parse(point.payload);
61
70
  }
62
71
  async set(key, data, metadata) {
63
72
  const now = Date.now();
@@ -76,7 +85,7 @@ export class QdrantStore {
76
85
  {
77
86
  id: key,
78
87
  vector: this.vectorName ? { [this.vectorName]: vector } : vector,
79
- payload: payload,
88
+ payload,
80
89
  },
81
90
  ],
82
91
  });
@@ -106,19 +115,14 @@ export class QdrantStore {
106
115
  });
107
116
  const results = [];
108
117
  for (const point of response) {
109
- const payload = point.payload;
110
- if (!payload) {
111
- continue;
118
+ if (!point.payload) {
119
+ throw new Error("QdrantStore: payload is missing from entry");
112
120
  }
121
+ const entry = QdrantPayloadSchema.parse(point.payload);
113
122
  results.push({
114
123
  key: String(point.id),
115
124
  score: point.score,
116
- entry: {
117
- data: payload.data,
118
- createdAt: payload.createdAt,
119
- updatedAt: payload.updatedAt,
120
- ...(payload.metadata && { metadata: payload.metadata }),
121
- },
125
+ entry,
122
126
  });
123
127
  }
124
128
  return results;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,OAAO,GAAE,iBAAsB;IAW3C,OAAO,CAAC,WAAW;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA6BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,OAAO,GAAE,iBAAsB;IAW3C,OAAO,CAAC,WAAW;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAWhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA6BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -1,5 +1,23 @@
1
1
  import Redis from "ioredis";
2
- const parseStoredEntry = (raw) => JSON.parse(raw);
2
+ import { z } from "zod";
3
+ const StoredEntrySchema = z
4
+ .preprocess((value) => {
5
+ if (typeof value === "string") {
6
+ return JSON.parse(value);
7
+ }
8
+ return value;
9
+ }, z.object({
10
+ data: z.unknown(),
11
+ createdAt: z.number(),
12
+ updatedAt: z.number(),
13
+ metadata: z.record(z.string(), z.unknown()).optional(),
14
+ }))
15
+ .transform((entry) => ({
16
+ data: entry.data,
17
+ createdAt: entry.createdAt,
18
+ updatedAt: entry.updatedAt,
19
+ ...(entry.metadata && { metadata: entry.metadata }),
20
+ }));
3
21
  /**
4
22
  * Redis-backed implementation of KVMemory.
5
23
  *
@@ -55,13 +73,7 @@ export class RedisStore {
55
73
  if (raw === null) {
56
74
  return null;
57
75
  }
58
- const stored = parseStoredEntry(raw);
59
- return {
60
- data: stored.data,
61
- createdAt: stored.createdAt,
62
- updatedAt: stored.updatedAt,
63
- ...(stored.metadata && { metadata: stored.metadata }),
64
- };
76
+ return StoredEntrySchema.parse(raw);
65
77
  }
66
78
  async set(key, data, metadata) {
67
79
  const prefixedKey = this.prefixedKey(key);
@@ -70,7 +82,7 @@ export class RedisStore {
70
82
  const existingRaw = await this.client.get(prefixedKey);
71
83
  let createdAt = now;
72
84
  if (existingRaw !== null) {
73
- const existing = parseStoredEntry(existingRaw);
85
+ const existing = StoredEntrySchema.parse(existingRaw);
74
86
  createdAt = existing.createdAt;
75
87
  }
76
88
  const entry = {
@@ -1 +1 @@
1
- {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { z } from "zod";
2
+ import type { MemoryEntry } from "./key-value";
3
+ import type { SqliteConnectionOptions, SqliteDatabase } from "./sqlite";
4
+ import type { VectorMemory, VectorSearchOptions, VectorSearchResult } from "./vector";
5
+ /**
6
+ * Function to generate embeddings for text.
7
+ */
8
+ export type EmbeddingFunction = (text: string) => Promise<number[]>;
9
+ /**
10
+ * Configuration options for the SQLite vector store.
11
+ */
12
+ export interface SqliteVectorStoreOptions<T = unknown> {
13
+ /**
14
+ * Database filename. Use ":memory:" for in-memory databases.
15
+ * @default ":memory:"
16
+ */
17
+ filename?: string;
18
+ /**
19
+ * Options passed to the libSQL client.
20
+ */
21
+ options?: SqliteConnectionOptions;
22
+ /**
23
+ * Provide an existing database client (overrides filename/options).
24
+ */
25
+ database?: SqliteDatabase;
26
+ /**
27
+ * Table name for storing entries.
28
+ * The table will be created automatically if it doesn't exist.
29
+ * @default "cria_vector_store"
30
+ */
31
+ tableName?: string;
32
+ /**
33
+ * Vector dimensionality (must match embedding length).
34
+ */
35
+ dimensions: number;
36
+ /**
37
+ * Function to generate embeddings from text.
38
+ */
39
+ embed: EmbeddingFunction;
40
+ /**
41
+ * Schema for validating stored data.
42
+ */
43
+ schema: z.ZodType<T>;
44
+ }
45
+ /**
46
+ * SQLite-backed implementation of VectorMemory.
47
+ *
48
+ * Uses libSQL vector columns and vector indexes for DB-side similarity search.
49
+ *
50
+ * @template T - The type of data to store
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * import { z } from "zod";
55
+ * import { SqliteVectorStore } from "@fastpaca/cria/memory/sqlite-vector";
56
+ *
57
+ * const store = new SqliteVectorStore<string>({
58
+ * filename: "cria.sqlite",
59
+ * dimensions: 1536,
60
+ * embed: async (text) => getEmbedding(text),
61
+ * schema: z.string(),
62
+ * });
63
+ *
64
+ * const results = await store.search("What is RAG?", { limit: 5 });
65
+ * ```
66
+ */
67
+ export declare class SqliteVectorStore<T = unknown> implements VectorMemory<T> {
68
+ private readonly db;
69
+ private readonly tableName;
70
+ private readonly embedFn;
71
+ private readonly dimensions;
72
+ private readonly schema;
73
+ private readonly embeddingSchema;
74
+ private tableCreated;
75
+ private indexCreated;
76
+ constructor(options: SqliteVectorStoreOptions<T>);
77
+ private ensureTable;
78
+ private ensureIndex;
79
+ get(key: string): Promise<MemoryEntry<T> | null>;
80
+ set(key: string, data: T, metadata?: Record<string, unknown>): Promise<void>;
81
+ delete(key: string): Promise<boolean>;
82
+ search(query: string, options?: VectorSearchOptions): Promise<VectorSearchResult<T>[]>;
83
+ /**
84
+ * Close the database connection.
85
+ * Call this when you're done using the store to clean up resources.
86
+ */
87
+ close(): void;
88
+ }
89
+ //# sourceMappingURL=sqlite-vector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vector.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite-vector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,OAAO;IACnD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,EAAE,iBAAiB,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACtB;AAWD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;YAwBlC,WAAW;YAmBX,WAAW;IAenB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IA4BhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAuCV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAsEnC;;;OAGG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,211 @@
1
+ import { createClient } from "@libsql/client";
2
+ import { z } from "zod";
3
+ const metadataSchema = z.object({}).catchall(z.unknown());
4
+ const sqliteRowSchema = z.object({
5
+ key: z.string(),
6
+ data: z.string(),
7
+ created_at: z.number(),
8
+ updated_at: z.number(),
9
+ metadata: z.string().nullable(),
10
+ });
11
+ /**
12
+ * SQLite-backed implementation of VectorMemory.
13
+ *
14
+ * Uses libSQL vector columns and vector indexes for DB-side similarity search.
15
+ *
16
+ * @template T - The type of data to store
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { z } from "zod";
21
+ * import { SqliteVectorStore } from "@fastpaca/cria/memory/sqlite-vector";
22
+ *
23
+ * const store = new SqliteVectorStore<string>({
24
+ * filename: "cria.sqlite",
25
+ * dimensions: 1536,
26
+ * embed: async (text) => getEmbedding(text),
27
+ * schema: z.string(),
28
+ * });
29
+ *
30
+ * const results = await store.search("What is RAG?", { limit: 5 });
31
+ * ```
32
+ */
33
+ export class SqliteVectorStore {
34
+ db;
35
+ tableName;
36
+ embedFn;
37
+ dimensions;
38
+ schema;
39
+ embeddingSchema;
40
+ tableCreated = false;
41
+ indexCreated = false;
42
+ constructor(options) {
43
+ const { filename = ":memory:", options: dbOptions, database, tableName = "cria_vector_store", dimensions, embed, schema, } = options;
44
+ this.db =
45
+ database ??
46
+ createClient({
47
+ url: filename === ":memory:" ? ":memory:" : `file:${filename}`,
48
+ ...dbOptions,
49
+ });
50
+ this.tableName = tableName;
51
+ this.embedFn = embed;
52
+ this.dimensions = dimensions;
53
+ this.schema = schema;
54
+ this.embeddingSchema = z.array(z.number()).length(dimensions);
55
+ }
56
+ async ensureTable() {
57
+ if (this.tableCreated) {
58
+ return;
59
+ }
60
+ await this.db.execute(`
61
+ CREATE TABLE IF NOT EXISTS ${this.tableName} (
62
+ key TEXT PRIMARY KEY,
63
+ data TEXT NOT NULL,
64
+ embedding F32_BLOB(${this.dimensions}) NOT NULL,
65
+ created_at INTEGER NOT NULL,
66
+ updated_at INTEGER NOT NULL,
67
+ metadata TEXT
68
+ )
69
+ `);
70
+ this.tableCreated = true;
71
+ }
72
+ async ensureIndex() {
73
+ if (this.indexCreated) {
74
+ return;
75
+ }
76
+ await this.db.execute(`
77
+ CREATE INDEX IF NOT EXISTS ${this.tableName}_vector_idx
78
+ ON ${this.tableName} (
79
+ libsql_vector_idx(embedding, 'metric=cosine')
80
+ )
81
+ `);
82
+ this.indexCreated = true;
83
+ }
84
+ async get(key) {
85
+ await this.ensureTable();
86
+ const result = await this.db.execute({
87
+ sql: `SELECT key, data, created_at, updated_at, metadata FROM ${this.tableName} WHERE key = ?`,
88
+ args: [key],
89
+ });
90
+ const row = result.rows[0];
91
+ if (!row) {
92
+ return null;
93
+ }
94
+ const parsedRow = sqliteRowSchema.parse(row);
95
+ const data = this.schema.parse(JSON.parse(parsedRow.data));
96
+ const metadata = parsedRow.metadata === null
97
+ ? undefined
98
+ : metadataSchema.parse(JSON.parse(parsedRow.metadata));
99
+ return {
100
+ data,
101
+ createdAt: parsedRow.created_at,
102
+ updatedAt: parsedRow.updated_at,
103
+ ...(metadata && { metadata }),
104
+ };
105
+ }
106
+ async set(key, data, metadata) {
107
+ await this.ensureTable();
108
+ await this.ensureIndex();
109
+ const now = Date.now();
110
+ const parsedData = this.schema.parse(data);
111
+ const serializedData = JSON.stringify(parsedData);
112
+ const serializedMetadata = metadata === undefined
113
+ ? null
114
+ : JSON.stringify(metadataSchema.parse(metadata));
115
+ const textToEmbed = typeof parsedData === "string" ? parsedData : serializedData;
116
+ const embedding = this.embeddingSchema.parse(await this.embedFn(textToEmbed));
117
+ await this.db.execute({
118
+ sql: `
119
+ INSERT INTO ${this.tableName} (key, data, embedding, created_at, updated_at, metadata)
120
+ VALUES (?, ?, vector32(?), ?, ?, ?)
121
+ ON CONFLICT(key) DO UPDATE SET
122
+ data = excluded.data,
123
+ embedding = excluded.embedding,
124
+ updated_at = excluded.updated_at,
125
+ metadata = excluded.metadata
126
+ `,
127
+ args: [
128
+ key,
129
+ serializedData,
130
+ JSON.stringify(embedding),
131
+ now,
132
+ now,
133
+ serializedMetadata,
134
+ ],
135
+ });
136
+ }
137
+ async delete(key) {
138
+ await this.ensureTable();
139
+ const result = await this.db.execute({
140
+ sql: `DELETE FROM ${this.tableName} WHERE key = ?`,
141
+ args: [key],
142
+ });
143
+ return result.rowsAffected > 0;
144
+ }
145
+ async search(query, options) {
146
+ await this.ensureTable();
147
+ await this.ensureIndex();
148
+ const limit = Math.max(0, Math.trunc(options?.limit ?? 10));
149
+ const threshold = options?.threshold;
150
+ const queryVector = this.embeddingSchema.parse(await this.embedFn(query));
151
+ const serializedQuery = JSON.stringify(queryVector);
152
+ const result = await this.db.execute({
153
+ sql: `
154
+ SELECT
155
+ t.key,
156
+ t.data,
157
+ t.created_at,
158
+ t.updated_at,
159
+ t.metadata,
160
+ vector_distance_cos(t.embedding, vector32(?)) AS distance
161
+ FROM vector_top_k(
162
+ ?,
163
+ vector32(?),
164
+ CAST(? AS INTEGER)
165
+ ) AS i
166
+ JOIN ${this.tableName} AS t ON t.rowid = i.id
167
+ ORDER BY distance ASC
168
+ `,
169
+ args: [
170
+ serializedQuery,
171
+ `${this.tableName}_vector_idx`,
172
+ serializedQuery,
173
+ limit,
174
+ ],
175
+ });
176
+ const results = [];
177
+ const searchRowSchema = sqliteRowSchema.extend({
178
+ distance: z.number(),
179
+ });
180
+ for (const row of result.rows) {
181
+ const parsedRow = searchRowSchema.parse(row);
182
+ const score = Math.max(0, Math.min(1, 1 - parsedRow.distance / 2));
183
+ if (threshold !== undefined && score < threshold) {
184
+ continue;
185
+ }
186
+ const data = this.schema.parse(JSON.parse(parsedRow.data));
187
+ const metadata = parsedRow.metadata === null
188
+ ? undefined
189
+ : metadataSchema.parse(JSON.parse(parsedRow.metadata));
190
+ results.push({
191
+ key: parsedRow.key,
192
+ score,
193
+ entry: {
194
+ data,
195
+ createdAt: parsedRow.created_at,
196
+ updatedAt: parsedRow.updated_at,
197
+ ...(metadata && { metadata }),
198
+ },
199
+ });
200
+ }
201
+ return results;
202
+ }
203
+ /**
204
+ * Close the database connection.
205
+ * Call this when you're done using the store to clean up resources.
206
+ */
207
+ close() {
208
+ this.db.close();
209
+ }
210
+ }
211
+ //# sourceMappingURL=sqlite-vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-vector.js","sourceRoot":"","sources":["../../src/memory/sqlite-vector.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import Database from "better-sqlite3";
1
+ import { type Client, type Config } from "@libsql/client";
2
2
  import type { KVMemory, MemoryEntry } from "./key-value";
3
3
  /**
4
- * Connection options for a SQLite database.
4
+ * Connection options for a libSQL database.
5
5
  */
6
- export type SqliteConnectionOptions = Database.Options;
6
+ export type SqliteConnectionOptions = Omit<Config, "url">;
7
7
  /**
8
- * better-sqlite3 Database instance used by the store.
8
+ * libSQL Client instance used by the store.
9
9
  */
10
- export type SqliteDatabase = Database.Database;
10
+ export type SqliteDatabase = Client;
11
11
  /**
12
12
  * Configuration options for the SQLite store.
13
13
  */
@@ -18,11 +18,11 @@ export interface SqliteStoreOptions {
18
18
  */
19
19
  filename?: string;
20
20
  /**
21
- * Options passed to the SQLite driver.
21
+ * Options passed to the libSQL client.
22
22
  */
23
23
  options?: SqliteConnectionOptions;
24
24
  /**
25
- * Provide an existing database instance (overrides filename/options).
25
+ * Provide an existing database client (overrides filename/options).
26
26
  */
27
27
  database?: SqliteDatabase;
28
28
  /**
@@ -40,8 +40,8 @@ export interface SqliteStoreOptions {
40
40
  /**
41
41
  * SQLite-backed implementation of KVMemory.
42
42
  *
43
- * Plug-and-play adapter using better-sqlite3. Just pass a filename or
44
- * an existing database instance.
43
+ * Plug-and-play adapter using libSQL. Just pass a filename or
44
+ * an existing database client.
45
45
  *
46
46
  * @template T - The type of data to store
47
47
  *
@@ -64,9 +64,9 @@ export declare class SqliteStore<T = unknown> implements KVMemory<T> {
64
64
  private tableCreated;
65
65
  constructor(options?: SqliteStoreOptions);
66
66
  private ensureTable;
67
- get(key: string): MemoryEntry<T> | null;
68
- set(key: string, data: T, metadata?: Record<string, unknown>): void;
69
- delete(key: string): boolean;
67
+ get(key: string): Promise<MemoryEntry<T> | null>;
68
+ set(key: string, data: T, metadata?: Record<string, unknown>): Promise<void>;
69
+ delete(key: string): Promise<boolean>;
70
70
  /**
71
71
  * Close the database connection.
72
72
  * Call this when you're done using the store to clean up resources.
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,OAAO,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAU/C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,kBAAuB;IAc5C,OAAO,CAAC,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IA2BvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAsBnE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU5B;;;OAGG;IACH,KAAK,IAAI,IAAI;CAGd;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AA0BpC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,kBAAuB;YAmB9B,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAgBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAqBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;;OAGG;IACH,KAAK,IAAI,IAAI;CAGd;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -1,9 +1,30 @@
1
- import Database from "better-sqlite3";
1
+ import { createClient } from "@libsql/client";
2
+ import { z } from "zod";
3
+ const MetadataSchema = z.record(z.string(), z.unknown());
4
+ const SqliteRowSchema = z
5
+ .object({
6
+ key: z.string(),
7
+ data: z.string(),
8
+ created_at: z.coerce.number(),
9
+ updated_at: z.coerce.number(),
10
+ metadata: z.string().nullable(),
11
+ })
12
+ .transform((row) => {
13
+ const metadata = row.metadata === null
14
+ ? undefined
15
+ : MetadataSchema.parse(JSON.parse(row.metadata));
16
+ return {
17
+ data: JSON.parse(row.data),
18
+ createdAt: row.created_at,
19
+ updatedAt: row.updated_at,
20
+ ...(metadata && { metadata }),
21
+ };
22
+ });
2
23
  /**
3
24
  * SQLite-backed implementation of KVMemory.
4
25
  *
5
- * Plug-and-play adapter using better-sqlite3. Just pass a filename or
6
- * an existing database instance.
26
+ * Plug-and-play adapter using libSQL. Just pass a filename or
27
+ * an existing database client.
7
28
  *
8
29
  * @template T - The type of data to store
9
30
  *
@@ -25,16 +46,21 @@ export class SqliteStore {
25
46
  autoCreateTable;
26
47
  tableCreated = false;
27
48
  constructor(options = {}) {
28
- const { filename, options: dbOptions, database, tableName, autoCreateTable, } = options;
29
- this.db = database ?? new Database(filename ?? ":memory:", dbOptions);
30
- this.tableName = tableName ?? "cria_kv_store";
31
- this.autoCreateTable = autoCreateTable ?? true;
49
+ const { filename = ":memory:", options: dbOptions, database, tableName = "cria_kv_store", autoCreateTable = true, } = options;
50
+ this.db =
51
+ database ??
52
+ createClient({
53
+ url: filename === ":memory:" ? ":memory:" : `file:${filename}`,
54
+ ...dbOptions,
55
+ });
56
+ this.tableName = tableName;
57
+ this.autoCreateTable = autoCreateTable;
32
58
  }
33
- ensureTable() {
59
+ async ensureTable() {
34
60
  if (this.tableCreated || !this.autoCreateTable) {
35
61
  return;
36
62
  }
37
- this.db.exec(`
63
+ await this.db.execute(`
38
64
  CREATE TABLE IF NOT EXISTS ${this.tableName} (
39
65
  key TEXT PRIMARY KEY,
40
66
  data TEXT NOT NULL,
@@ -45,47 +71,42 @@ export class SqliteStore {
45
71
  `);
46
72
  this.tableCreated = true;
47
73
  }
48
- get(key) {
49
- this.ensureTable();
50
- const row = this.db
51
- .prepare(`SELECT key, data, created_at, updated_at, metadata FROM ${this.tableName} WHERE key = ?`)
52
- .get(key);
74
+ async get(key) {
75
+ await this.ensureTable();
76
+ const result = await this.db.execute({
77
+ sql: `SELECT key, data, created_at, updated_at, metadata FROM ${this.tableName} WHERE key = ?`,
78
+ args: [key],
79
+ });
80
+ const row = result.rows[0];
53
81
  if (row === undefined) {
54
82
  return null;
55
83
  }
56
- const data = JSON.parse(row.data);
57
- const metadata = row.metadata === null
58
- ? undefined
59
- : JSON.parse(row.metadata);
60
- return {
61
- data,
62
- createdAt: row.created_at,
63
- updatedAt: row.updated_at,
64
- ...(metadata && { metadata }),
65
- };
84
+ return SqliteRowSchema.parse(row);
66
85
  }
67
- set(key, data, metadata) {
68
- this.ensureTable();
86
+ async set(key, data, metadata) {
87
+ await this.ensureTable();
69
88
  const now = Date.now();
70
89
  const serializedData = JSON.stringify(data);
71
90
  const serializedMetadata = metadata !== undefined ? JSON.stringify(metadata) : null;
72
- this.db
73
- .prepare(`
91
+ await this.db.execute({
92
+ sql: `
74
93
  INSERT INTO ${this.tableName} (key, data, created_at, updated_at, metadata)
75
94
  VALUES (?, ?, ?, ?, ?)
76
95
  ON CONFLICT(key) DO UPDATE SET
77
96
  data = excluded.data,
78
97
  updated_at = excluded.updated_at,
79
98
  metadata = excluded.metadata
80
- `)
81
- .run(key, serializedData, now, now, serializedMetadata);
99
+ `,
100
+ args: [key, serializedData, now, now, serializedMetadata],
101
+ });
82
102
  }
83
- delete(key) {
84
- this.ensureTable();
85
- const result = this.db
86
- .prepare(`DELETE FROM ${this.tableName} WHERE key = ?`)
87
- .run(key);
88
- return result.changes > 0;
103
+ async delete(key) {
104
+ await this.ensureTable();
105
+ const result = await this.db.execute({
106
+ sql: `DELETE FROM ${this.tableName} WHERE key = ?`,
107
+ args: [key],
108
+ });
109
+ return result.rowsAffected > 0;
89
110
  }
90
111
  /**
91
112
  * Close the database connection.
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAmDtC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,WAAW;IACL,EAAE,CAAiB;IACnB,SAAS,CAAS;IAClB,eAAe,CAAU;IAClC,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,UAA8B,EAAE;QAC1C,MAAM,EACJ,QAAQ,EACR,OAAO,EAAE,SAAS,EAClB,QAAQ,EACR,SAAS,EACT,eAAe,GAChB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,EAAE,GAAG,QAAQ,IAAI,IAAI,QAAQ,CAAC,QAAQ,IAAI,UAAU,EAAE,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,eAAe,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC;IACjD,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;mCACkB,IAAI,CAAC,SAAS;;;;;;;KAO5C,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN,2DAA2D,IAAI,CAAC,SAAS,gBAAgB,CAC1F;aACA,GAAG,CAAC,GAAG,CAAC,CAAC;QAEZ,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAM,CAAC;QACvC,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ,KAAK,IAAI;YACnB,CAAC,CAAC,SAAS;YACX,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAA6B,CAAC;QAE5D,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAO,EAAE,QAAkC;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,kBAAkB,GACtB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3D,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;sBACc,IAAI,CAAC,SAAS;;;;;;SAM3B,CACF;aACA,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CAAC,eAAe,IAAI,CAAC,SAAS,gBAAgB,CAAC;aACtD,GAAG,CAAC,GAAG,CAAC,CAAC;QAEZ,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastpaca/cria",
3
- "version": "1.7.1",
3
+ "version": "1.7.2",
4
4
  "description": "Lightweight, fast, and tiny LLM Context & Memory layout renderer to enforce token budgets in long running agents.",
5
5
  "license": "MIT",
6
6
  "author": "seb@fastpaca.com",
@@ -45,6 +45,10 @@
45
45
  "types": "./dist/memory/sqlite.d.ts",
46
46
  "import": "./dist/memory/sqlite.js"
47
47
  },
48
+ "./memory/sqlite-vector": {
49
+ "types": "./dist/memory/sqlite-vector.d.ts",
50
+ "import": "./dist/memory/sqlite-vector.js"
51
+ },
48
52
  "./memory/chroma": {
49
53
  "types": "./dist/memory/chroma/index.d.ts",
50
54
  "import": "./dist/memory/chroma/index.js"
@@ -60,9 +64,9 @@
60
64
  },
61
65
  "peerDependencies": {
62
66
  "@anthropic-ai/sdk": "^0.20.0",
67
+ "@libsql/client": "^0.17.0",
63
68
  "@qdrant/js-client-rest": "^1.0.0",
64
69
  "ai": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
65
- "better-sqlite3": "^12.0.0",
66
70
  "chromadb": "^1.0.0 || ^2.0.0 || ^3.0.0",
67
71
  "ioredis": "^5.0.0",
68
72
  "openai": "^4.0.0 || ^5.0.0 || ^6.0.0",
@@ -72,13 +76,13 @@
72
76
  "@anthropic-ai/sdk": {
73
77
  "optional": true
74
78
  },
75
- "@qdrant/js-client-rest": {
79
+ "@libsql/client": {
76
80
  "optional": true
77
81
  },
78
- "ai": {
82
+ "@qdrant/js-client-rest": {
79
83
  "optional": true
80
84
  },
81
- "better-sqlite3": {
85
+ "ai": {
82
86
  "optional": true
83
87
  },
84
88
  "chromadb": {
@@ -117,11 +121,10 @@
117
121
  "@qdrant/js-client-rest": "^1.16.2",
118
122
  "@semantic-release/changelog": "^6.0.3",
119
123
  "@semantic-release/git": "^10.0.1",
120
- "@types/better-sqlite3": "^7.6.9",
124
+ "@libsql/client": "^0.17.0",
121
125
  "@types/node": "^25.0.10",
122
126
  "@types/pg": "^8.16.0",
123
127
  "ai": "^6.0.45",
124
- "better-sqlite3": "^12.0.0",
125
128
  "chromadb": "^3.2.2",
126
129
  "husky": "^9.1.7",
127
130
  "ioredis": "^5.9.2",