@agentxjs/persistence 1.8.0 → 1.9.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.
@@ -19,28 +19,57 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
19
 
20
20
  // src/drivers/sqlite.ts
21
21
  import { createStorage } from "unstorage";
22
- async function getSqliteConnector(path) {
23
- if (typeof Bun !== "undefined") {
24
- const { default: bunSqliteConnector } = await import("db0/connectors/bun-sqlite");
25
- return bunSqliteConnector({ path });
26
- }
27
- const nodeSqlite = globalThis.process?.getBuiltinModule?.("node:sqlite");
28
- if (nodeSqlite) {
29
- const { default: nodeSqliteConnector } = await import("db0/connectors/node-sqlite");
30
- return nodeSqliteConnector({ path });
31
- }
32
- throw new Error("No SQLite driver available. Requires Bun runtime or Node.js 22+.");
22
+ import { openDatabase } from "@agentxjs/common/sqlite";
23
+ function createSqliteUnstorageDriver(db) {
24
+ db.exec(`
25
+ CREATE TABLE IF NOT EXISTS kv_storage (
26
+ key TEXT PRIMARY KEY,
27
+ value TEXT NOT NULL,
28
+ created_at INTEGER NOT NULL,
29
+ updated_at INTEGER NOT NULL
30
+ );
31
+ CREATE INDEX IF NOT EXISTS idx_kv_key ON kv_storage(key);
32
+ `);
33
+ return {
34
+ name: "agentx-sqlite",
35
+ hasItem(key) {
36
+ const row = db.prepare("SELECT 1 FROM kv_storage WHERE key = ?").get(key);
37
+ return row !== undefined;
38
+ },
39
+ getItem(key) {
40
+ const row = db.prepare("SELECT value FROM kv_storage WHERE key = ?").get(key);
41
+ return row?.value ?? null;
42
+ },
43
+ setItem(key, value) {
44
+ const now = Date.now();
45
+ const existing = db.prepare("SELECT 1 FROM kv_storage WHERE key = ?").get(key);
46
+ if (existing) {
47
+ db.prepare("UPDATE kv_storage SET value = ?, updated_at = ? WHERE key = ?").run(value, now, key);
48
+ } else {
49
+ db.prepare("INSERT INTO kv_storage (key, value, created_at, updated_at) VALUES (?, ?, ?, ?)").run(key, value, now, now);
50
+ }
51
+ },
52
+ removeItem(key) {
53
+ db.prepare("DELETE FROM kv_storage WHERE key = ?").run(key);
54
+ },
55
+ getKeys() {
56
+ const rows = db.prepare("SELECT key FROM kv_storage").all();
57
+ return rows.map((r) => r.key);
58
+ },
59
+ clear() {
60
+ db.exec("DELETE FROM kv_storage");
61
+ },
62
+ dispose() {
63
+ db.close();
64
+ }
65
+ };
33
66
  }
34
67
  function sqliteDriver(options) {
35
68
  return {
36
69
  async createStorage() {
37
- const { default: db0Driver } = await import("unstorage/drivers/db0");
38
- const { createDatabase } = await import("db0");
39
- const connector = await getSqliteConnector(options.path);
40
- const database = createDatabase(connector);
41
- return createStorage({
42
- driver: db0Driver({ database })
43
- });
70
+ const db = openDatabase(options.path);
71
+ const driver = createSqliteUnstorageDriver(db);
72
+ return createStorage({ driver });
44
73
  }
45
74
  };
46
75
  }
@@ -48,4 +77,4 @@ export {
48
77
  sqliteDriver
49
78
  };
50
79
 
51
- //# debugId=9C750D9F3C5B308064756E2164756E21
80
+ //# debugId=C7DB872B4F7049E064756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/drivers/sqlite.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * SQLite Driver - SQLite database storage\n *\n * Uses db0 with automatic runtime detection:\n * - Bun: uses bun:sqlite (built-in)\n * - Node.js 22+: uses node:sqlite (built-in)\n *\n * @example\n * ```typescript\n * import { createPersistence } from \"@agentxjs/persistence\";\n * import { sqliteDriver } from \"@agentxjs/persistence/sqlite\";\n *\n * const persistence = await createPersistence(\n * sqliteDriver({ path: \"./data/agentx.db\" })\n * );\n * ```\n */\n\nimport { createStorage, type Storage } from \"unstorage\";\nimport type { PersistenceDriver } from \"../Persistence\";\n\ndeclare const Bun: unknown;\n\nexport interface SqliteDriverOptions {\n /**\n * Path to SQLite database file\n * @example \"./data/agentx.db\"\n */\n path: string;\n}\n\n/**\n * Detect runtime and return appropriate SQLite connector\n */\nasync function getSqliteConnector(path: string) {\n // Bun runtime - use bun:sqlite\n if (typeof Bun !== \"undefined\") {\n const { default: bunSqliteConnector } = await import(\"db0/connectors/bun-sqlite\");\n return bunSqliteConnector({ path });\n }\n\n // Node.js 22+ - use built-in node:sqlite\n const nodeSqlite = globalThis.process?.getBuiltinModule?.(\"node:sqlite\");\n if (nodeSqlite) {\n const { default: nodeSqliteConnector } = await import(\"db0/connectors/node-sqlite\");\n return nodeSqliteConnector({ path });\n }\n\n throw new Error(\"No SQLite driver available. Requires Bun runtime or Node.js 22+.\");\n}\n\n/**\n * Create a SQLite driver\n *\n * @param options - Driver options\n */\nexport function sqliteDriver(options: SqliteDriverOptions): PersistenceDriver {\n return {\n async createStorage(): Promise<Storage> {\n // Dynamic imports to avoid bundling when not used\n const { default: db0Driver } = await import(\"unstorage/drivers/db0\");\n const { createDatabase } = await import(\"db0\");\n\n const connector = await getSqliteConnector(options.path);\n const database = createDatabase(connector);\n\n return createStorage({\n driver: db0Driver({ database }),\n });\n },\n };\n}\n"
5
+ "/**\n * SQLite Driver - SQLite database storage\n *\n * Uses @agentxjs/common SQLite abstraction with automatic runtime detection:\n * - Bun: uses bun:sqlite (built-in)\n * - Node.js 22+: uses node:sqlite (built-in)\n *\n * @example\n * ```typescript\n * import { createPersistence } from \"@agentxjs/persistence\";\n * import { sqliteDriver } from \"@agentxjs/persistence/sqlite\";\n *\n * const persistence = await createPersistence(\n * sqliteDriver({ path: \"./data/agentx.db\" })\n * );\n * ```\n */\n\nimport { createStorage, type Storage, type Driver } from \"unstorage\";\nimport { openDatabase, type Database } from \"@agentxjs/common/sqlite\";\nimport type { PersistenceDriver } from \"../Persistence\";\n\nexport interface SqliteDriverOptions {\n /**\n * Path to SQLite database file\n * @example \"./data/agentx.db\"\n */\n path: string;\n}\n\n/**\n * Create a custom unstorage driver using our SQLite abstraction\n */\nfunction createSqliteUnstorageDriver(db: Database): Driver {\n // Initialize schema\n db.exec(`\n CREATE TABLE IF NOT EXISTS kv_storage (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n CREATE INDEX IF NOT EXISTS idx_kv_key ON kv_storage(key);\n `);\n\n return {\n name: \"agentx-sqlite\",\n\n hasItem(key: string): boolean {\n const row = db.prepare(\"SELECT 1 FROM kv_storage WHERE key = ?\").get(key);\n return row !== undefined;\n },\n\n getItem(key: string): string | null {\n const row = db.prepare(\"SELECT value FROM kv_storage WHERE key = ?\").get(key) as\n | { value: string }\n | undefined;\n return row?.value ?? null;\n },\n\n setItem(key: string, value: string): void {\n const now = Date.now();\n const existing = db.prepare(\"SELECT 1 FROM kv_storage WHERE key = ?\").get(key);\n if (existing) {\n db.prepare(\"UPDATE kv_storage SET value = ?, updated_at = ? WHERE key = ?\").run(\n value,\n now,\n key\n );\n } else {\n db.prepare(\n \"INSERT INTO kv_storage (key, value, created_at, updated_at) VALUES (?, ?, ?, ?)\"\n ).run(key, value, now, now);\n }\n },\n\n removeItem(key: string): void {\n db.prepare(\"DELETE FROM kv_storage WHERE key = ?\").run(key);\n },\n\n getKeys(): string[] {\n const rows = db.prepare(\"SELECT key FROM kv_storage\").all() as { key: string }[];\n return rows.map((r) => r.key);\n },\n\n clear(): void {\n db.exec(\"DELETE FROM kv_storage\");\n },\n\n dispose(): void {\n db.close();\n },\n };\n}\n\n/**\n * Create a SQLite driver\n *\n * @param options - Driver options\n */\nexport function sqliteDriver(options: SqliteDriverOptions): PersistenceDriver {\n return {\n async createStorage(): Promise<Storage> {\n const db = openDatabase(options.path);\n const driver = createSqliteUnstorageDriver(db);\n\n return createStorage({ driver });\n },\n };\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAkBA;AAgBA,eAAe,kBAAkB,CAAC,MAAc;AAAA,EAE9C,IAAI,OAAO,QAAQ,aAAa;AAAA,IAC9B,QAAQ,SAAS,uBAAuB,MAAa;AAAA,IACrD,OAAO,mBAAmB,EAAE,KAAK,CAAC;AAAA,EACpC;AAAA,EAGA,MAAM,aAAa,WAAW,SAAS,mBAAmB,aAAa;AAAA,EACvE,IAAI,YAAY;AAAA,IACd,QAAQ,SAAS,wBAAwB,MAAa;AAAA,IACtD,OAAO,oBAAoB,EAAE,KAAK,CAAC;AAAA,EACrC;AAAA,EAEA,MAAM,IAAI,MAAM,kEAAkE;AAAA;AAQ7E,SAAS,YAAY,CAAC,SAAiD;AAAA,EAC5E,OAAO;AAAA,SACC,cAAa,GAAqB;AAAA,MAEtC,QAAQ,SAAS,cAAc,MAAa;AAAA,MAC5C,QAAQ,mBAAmB,MAAa;AAAA,MAExC,MAAM,YAAY,MAAM,mBAAmB,QAAQ,IAAI;AAAA,MACvD,MAAM,WAAW,eAAe,SAAS;AAAA,MAEzC,OAAO,cAAc;AAAA,QACnB,QAAQ,UAAU,EAAE,SAAS,CAAC;AAAA,MAChC,CAAC;AAAA;AAAA,EAEL;AAAA;",
8
- "debugId": "9C750D9F3C5B308064756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAkBA;AACA;AAcA,SAAS,2BAA2B,CAAC,IAAsB;AAAA,EAEzD,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQP;AAAA,EAED,OAAO;AAAA,IACL,MAAM;AAAA,IAEN,OAAO,CAAC,KAAsB;AAAA,MAC5B,MAAM,MAAM,GAAG,QAAQ,wCAAwC,EAAE,IAAI,GAAG;AAAA,MACxE,OAAO,QAAQ;AAAA;AAAA,IAGjB,OAAO,CAAC,KAA4B;AAAA,MAClC,MAAM,MAAM,GAAG,QAAQ,4CAA4C,EAAE,IAAI,GAAG;AAAA,MAG5E,OAAO,KAAK,SAAS;AAAA;AAAA,IAGvB,OAAO,CAAC,KAAa,OAAqB;AAAA,MACxC,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB,MAAM,WAAW,GAAG,QAAQ,wCAAwC,EAAE,IAAI,GAAG;AAAA,MAC7E,IAAI,UAAU;AAAA,QACZ,GAAG,QAAQ,+DAA+D,EAAE,IAC1E,OACA,KACA,GACF;AAAA,MACF,EAAO;AAAA,QACL,GAAG,QACD,iFACF,EAAE,IAAI,KAAK,OAAO,KAAK,GAAG;AAAA;AAAA;AAAA,IAI9B,UAAU,CAAC,KAAmB;AAAA,MAC5B,GAAG,QAAQ,sCAAsC,EAAE,IAAI,GAAG;AAAA;AAAA,IAG5D,OAAO,GAAa;AAAA,MAClB,MAAM,OAAO,GAAG,QAAQ,4BAA4B,EAAE,IAAI;AAAA,MAC1D,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA;AAAA,IAG9B,KAAK,GAAS;AAAA,MACZ,GAAG,KAAK,wBAAwB;AAAA;AAAA,IAGlC,OAAO,GAAS;AAAA,MACd,GAAG,MAAM;AAAA;AAAA,EAEb;AAAA;AAQK,SAAS,YAAY,CAAC,SAAiD;AAAA,EAC5E,OAAO;AAAA,SACC,cAAa,GAAqB;AAAA,MACtC,MAAM,KAAK,aAAa,QAAQ,IAAI;AAAA,MACpC,MAAM,SAAS,4BAA4B,EAAE;AAAA,MAE7C,OAAO,cAAc,EAAE,OAAO,CAAC;AAAA;AAAA,EAEnC;AAAA;",
8
+ "debugId": "C7DB872B4F7049E064756E2164756E21",
9
9
  "names": []
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentxjs/persistence",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Multi-backend persistence layer for AgentX - supports memory, SQLite, Redis, MongoDB, and SQL databases",
5
5
  "keywords": [
6
6
  "agentx",
@@ -63,18 +63,10 @@
63
63
  "clean": "rm -rf dist"
64
64
  },
65
65
  "dependencies": {
66
- "@agentxjs/common": "^1.8.0",
67
- "@agentxjs/types": "^1.8.0",
66
+ "@agentxjs/common": "^1.9.0",
67
+ "@agentxjs/types": "^1.9.0",
68
68
  "unstorage": "^1.14.4"
69
69
  },
70
- "peerDependencies": {
71
- "db0": "^0.2.0"
72
- },
73
- "peerDependenciesMeta": {
74
- "db0": {
75
- "optional": true
76
- }
77
- },
78
70
  "publishConfig": {
79
71
  "access": "public"
80
72
  }