@elizaos/plugin-sql 1.0.0-beta.8 → 1.0.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.
@@ -0,0 +1,2 @@
1
+
2
+ export { }
package/dist/migrate.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  PGliteClientManager,
3
3
  PostgresConnectionManager,
4
- __name
5
- } from "./chunk-ROCRMD5N.js";
4
+ __name,
5
+ resolvePgliteDir
6
+ } from "./chunk-QOV7MUNF.js";
6
7
 
7
8
  // src/migrate.ts
8
9
  import { logger } from "@elizaos/core";
@@ -21,9 +22,15 @@ async function runMigrations() {
21
22
  process.exit(1);
22
23
  }
23
24
  } else {
24
- logger.info("Using PGlite database");
25
+ const elizaDbDir = resolvePgliteDir();
26
+ if (!process.env.PGLITE_DATA_DIR) {
27
+ logger.info(`PGLITE_DATA_DIR not set, defaulting to project path: ${elizaDbDir}`);
28
+ } else {
29
+ logger.info(`Using PGLITE_DATA_DIR: ${elizaDbDir}`);
30
+ }
31
+ logger.info("Using PGlite database at:", elizaDbDir);
25
32
  const clientManager = new PGliteClientManager({
26
- dataDir: "../../pglite"
33
+ dataDir: elizaDbDir
27
34
  });
28
35
  try {
29
36
  await clientManager.initialize();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/migrate.ts"],"sourceRoot":"./","sourcesContent":["import { logger } from '@elizaos/core';\nimport { config } from 'dotenv';\nimport { PGliteClientManager } from './pglite/manager.js';\nimport { PostgresConnectionManager } from './pg/manager.js';\n\nconfig({ path: '../../.env' });\n\n/**\n * Runs the database migrations based on the environment variable POSTGRES_URL.\n * If the POSTGRES_URL is provided, it indicates the use of a PostgreSQL database and the corresponding migration logic needs to be implemented.\n * If POSTGRES_URL is not provided, it uses a PGlite database and runs the migrations on it.\n * @returns {Promise<void>} A promise that resolves once the migrations are completed successfully or rejects if an error occurs.\n */\nasync function runMigrations() {\n if (process.env.POSTGRES_URL) {\n try {\n const connectionManager = new PostgresConnectionManager(process.env.POSTGRES_URL);\n await connectionManager.initialize();\n await connectionManager.runMigrations();\n // await connectionManager.close();\n logger.success('PostgreSQL migrations completed successfully');\n process.exit(0);\n } catch (error) {\n logger.warn('PostgreSQL migration failed:', error);\n process.exit(1);\n }\n } else {\n logger.info('Using PGlite database');\n const clientManager = new PGliteClientManager({\n dataDir: '../../pglite',\n });\n\n try {\n await clientManager.initialize();\n await clientManager.runMigrations();\n logger.success('PGlite migrations completed successfully');\n await clientManager.close();\n process.exit(0);\n } catch (error) {\n logger.error('PGlite migration failed:', error);\n try {\n await clientManager.close();\n } catch (closeError) {\n logger.error('Failed to close PGlite connection:', closeError);\n }\n process.exit(1);\n }\n }\n}\n\nrunMigrations().catch((error) => {\n logger.error('Unhandled error in migrations:', error);\n process.exit(1);\n});\n"],"mappings":";;;;;;;AAAA,SAAS,cAAc;AACvB,SAAS,cAAc;AAIvB,OAAO,EAAE,MAAM,aAAa,CAAC;AAQ7B,eAAe,gBAAgB;AAC7B,MAAI,QAAQ,IAAI,cAAc;AAC5B,QAAI;AACF,YAAM,oBAAoB,IAAI,0BAA0B,QAAQ,IAAI,YAAY;AAChF,YAAM,kBAAkB,WAAW;AACnC,YAAM,kBAAkB,cAAc;AAEtC,aAAO,QAAQ,8CAA8C;AAC7D,cAAQ,KAAK,CAAC;AAAA,IAChB,SAAS,OAAO;AACd,aAAO,KAAK,gCAAgC,KAAK;AACjD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AACL,WAAO,KAAK,uBAAuB;AACnC,UAAM,gBAAgB,IAAI,oBAAoB;AAAA,MAC5C,SAAS;AAAA,IACX,CAAC;AAED,QAAI;AACF,YAAM,cAAc,WAAW;AAC/B,YAAM,cAAc,cAAc;AAClC,aAAO,QAAQ,0CAA0C;AACzD,YAAM,cAAc,MAAM;AAC1B,cAAQ,KAAK,CAAC;AAAA,IAChB,SAAS,OAAO;AACd,aAAO,MAAM,4BAA4B,KAAK;AAC9C,UAAI;AACF,cAAM,cAAc,MAAM;AAAA,MAC5B,SAAS,YAAY;AACnB,eAAO,MAAM,sCAAsC,UAAU;AAAA,MAC/D;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAnCe;AAqCf,cAAc,EAAE,MAAM,CAAC,UAAU;AAC/B,SAAO,MAAM,kCAAkC,KAAK;AACpD,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/migrate.ts"],"sourceRoot":"./","sourcesContent":["import { logger } from '@elizaos/core';\nimport { config } from 'dotenv';\nimport { PostgresConnectionManager } from './pg/manager';\nimport { PGliteClientManager } from './pglite/manager';\nimport { resolvePgliteDir } from './utils';\n\nconfig({ path: '../../.env' });\n\n/**\n * Executes database migrations using either PostgreSQL or PGlite, depending on environment configuration.\n *\n * If the `POSTGRES_URL` environment variable is set, migrations are run against the specified PostgreSQL database. Otherwise, migrations are run using a PGlite database, with the data directory determined by the `PGLITE_DATA_DIR` environment variable or a project-specific default path.\n *\n * @remark This function terminates the Node.js process upon completion or failure.\n */\nasync function runMigrations() {\n if (process.env.POSTGRES_URL) {\n try {\n const connectionManager = new PostgresConnectionManager(process.env.POSTGRES_URL);\n await connectionManager.initialize();\n await connectionManager.runMigrations();\n // await connectionManager.close();\n logger.success('PostgreSQL migrations completed successfully');\n process.exit(0);\n } catch (error) {\n logger.warn('PostgreSQL migration failed:', error);\n process.exit(1);\n }\n } else {\n const elizaDbDir = resolvePgliteDir();\n\n if (!process.env.PGLITE_DATA_DIR) {\n logger.info(`PGLITE_DATA_DIR not set, defaulting to project path: ${elizaDbDir}`);\n } else {\n logger.info(`Using PGLITE_DATA_DIR: ${elizaDbDir}`);\n }\n\n logger.info('Using PGlite database at:', elizaDbDir);\n const clientManager = new PGliteClientManager({\n dataDir: elizaDbDir,\n });\n\n try {\n await clientManager.initialize();\n await clientManager.runMigrations();\n logger.success('PGlite migrations completed successfully');\n await clientManager.close();\n process.exit(0);\n } catch (error) {\n logger.error('PGlite migration failed:', error);\n try {\n await clientManager.close();\n } catch (closeError) {\n logger.error('Failed to close PGlite connection:', closeError);\n }\n process.exit(1);\n }\n }\n}\n\nrunMigrations().catch((error) => {\n logger.error('Unhandled error in migrations:', error);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;AAAA,SAAS,cAAc;AACvB,SAAS,cAAc;AAKvB,OAAO,EAAE,MAAM,aAAa,CAAC;AAS7B,eAAe,gBAAgB;AAC7B,MAAI,QAAQ,IAAI,cAAc;AAC5B,QAAI;AACF,YAAM,oBAAoB,IAAI,0BAA0B,QAAQ,IAAI,YAAY;AAChF,YAAM,kBAAkB,WAAW;AACnC,YAAM,kBAAkB,cAAc;AAEtC,aAAO,QAAQ,8CAA8C;AAC7D,cAAQ,KAAK,CAAC;AAAA,IAChB,SAAS,OAAO;AACd,aAAO,KAAK,gCAAgC,KAAK;AACjD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AACL,UAAM,aAAa,iBAAiB;AAEpC,QAAI,CAAC,QAAQ,IAAI,iBAAiB;AAChC,aAAO,KAAK,wDAAwD,UAAU,EAAE;AAAA,IAClF,OAAO;AACL,aAAO,KAAK,0BAA0B,UAAU,EAAE;AAAA,IACpD;AAEA,WAAO,KAAK,6BAA6B,UAAU;AACnD,UAAM,gBAAgB,IAAI,oBAAoB;AAAA,MAC5C,SAAS;AAAA,IACX,CAAC;AAED,QAAI;AACF,YAAM,cAAc,WAAW;AAC/B,YAAM,cAAc,cAAc;AAClC,aAAO,QAAQ,0CAA0C;AACzD,YAAM,cAAc,MAAM;AAC1B,cAAQ,KAAK,CAAC;AAAA,IAChB,SAAS,OAAO;AACd,aAAO,MAAM,4BAA4B,KAAK;AAC9C,UAAI;AACF,cAAM,cAAc,MAAM;AAAA,MAC5B,SAAS,YAAY;AACnB,eAAO,MAAM,sCAAsC,UAAU;AAAA,MAC/D;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AA3Ce;AA6Cf,cAAc,EAAE,MAAM,CAAC,UAAU;AAC/B,SAAO,MAAM,kCAAkC,KAAK;AACpD,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
@@ -0,0 +1,4 @@
1
+ CREATE EXTENSION IF NOT EXISTS vector;
2
+ --> statement-breakpoint
3
+ CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
4
+ --> statement-breakpoint
@@ -1,24 +1,25 @@
1
1
  CREATE EXTENSION IF NOT EXISTS vector;
2
- --> statement-breakpoint
2
+ --> statement-breakpoint
3
3
  CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
4
4
  --> statement-breakpoint
5
+
5
6
  CREATE TABLE "agents" (
6
7
  "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
7
8
  "enabled" boolean DEFAULT true NOT NULL,
8
9
  "createdAt" timestamptz DEFAULT now() NOT NULL,
9
10
  "updatedAt" timestamptz DEFAULT now() NOT NULL,
10
- "name" text,
11
+ "name" text NOT NULL,
11
12
  "username" text,
12
- "system" text,
13
- "bio" jsonb NOT NULL,
14
- "message_examples" jsonb DEFAULT '[]'::jsonb,
15
- "post_examples" jsonb DEFAULT '[]'::jsonb,
16
- "topics" jsonb DEFAULT '[]'::jsonb,
17
- "adjectives" jsonb DEFAULT '[]'::jsonb,
18
- "knowledge" jsonb DEFAULT '[]'::jsonb,
19
- "plugins" jsonb DEFAULT '[]'::jsonb,
20
- "settings" jsonb DEFAULT '{}'::jsonb,
21
- "style" jsonb DEFAULT '{}'::jsonb,
13
+ "system" text DEFAULT '',
14
+ "bio" jsonb DEFAULT '[]'::jsonb NOT NULL,
15
+ "message_examples" jsonb DEFAULT '[]'::jsonb NOT NULL,
16
+ "post_examples" jsonb DEFAULT '[]'::jsonb NOT NULL,
17
+ "topics" jsonb DEFAULT '[]'::jsonb NOT NULL,
18
+ "adjectives" jsonb DEFAULT '[]'::jsonb NOT NULL,
19
+ "knowledge" jsonb DEFAULT '[]'::jsonb NOT NULL,
20
+ "plugins" jsonb DEFAULT '[]'::jsonb NOT NULL,
21
+ "settings" jsonb DEFAULT '{}'::jsonb NOT NULL,
22
+ "style" jsonb DEFAULT '{}'::jsonb NOT NULL,
22
23
  CONSTRAINT "name_unique" UNIQUE("name")
23
24
  );
24
25
  --> statement-breakpoint
@@ -61,8 +62,8 @@ CREATE TABLE "entities" (
61
62
  "id" uuid PRIMARY KEY NOT NULL,
62
63
  "agentId" uuid NOT NULL,
63
64
  "createdAt" timestamptz DEFAULT now() NOT NULL,
64
- "names" text[] DEFAULT '{}'::text[],
65
- "metadata" jsonb DEFAULT '{}'::jsonb,
65
+ "names" text[] DEFAULT '{}'::text[] NOT NULL,
66
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
66
67
  CONSTRAINT "id_agent_id_unique" UNIQUE("id","agentId")
67
68
  );
68
69
  --> statement-breakpoint
@@ -81,8 +82,9 @@ CREATE TABLE "memories" (
81
82
  "createdAt" timestamptz DEFAULT now() NOT NULL,
82
83
  "content" jsonb NOT NULL,
83
84
  "entityId" uuid,
84
- "agentId" uuid,
85
+ "agentId" uuid NOT NULL,
85
86
  "roomId" uuid,
87
+ "worldId" uuid,
86
88
  "unique" boolean DEFAULT true NOT NULL,
87
89
  "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
88
90
  CONSTRAINT "fragment_metadata_check" CHECK (
@@ -138,14 +140,15 @@ CREATE TABLE "rooms" (
138
140
  CREATE TABLE "tasks" (
139
141
  "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
140
142
  "name" text NOT NULL,
141
- "description" text NOT NULL,
142
- "room_id" uuid,
143
- "world_id" uuid,
143
+ "description" text,
144
+ "roomId" uuid,
145
+ "worldId" uuid,
146
+ "entityId" uuid,
144
147
  "agent_id" uuid NOT NULL,
145
- "tags" text[],
146
- "metadata" jsonb,
147
- "created_at" timestamp DEFAULT now(),
148
- "updated_at" timestamp DEFAULT now()
148
+ "tags" text[] DEFAULT '{}'::text[],
149
+ "metadata" jsonb DEFAULT '{}'::jsonb,
150
+ "created_at" timestamp with time zone DEFAULT now(),
151
+ "updated_at" timestamp with time zone DEFAULT now()
149
152
  );
150
153
  --> statement-breakpoint
151
154
  CREATE TABLE "worlds" (
@@ -167,7 +170,7 @@ ALTER TABLE "embeddings" ADD CONSTRAINT "embeddings_memory_id_memories_id_fk" FO
167
170
  ALTER TABLE "embeddings" ADD CONSTRAINT "fk_embedding_memory" FOREIGN KEY ("memory_id") REFERENCES "public"."memories"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
168
171
  ALTER TABLE "entities" ADD CONSTRAINT "entities_agentId_agents_id_fk" FOREIGN KEY ("agentId") REFERENCES "public"."agents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
169
172
  ALTER TABLE "logs" ADD CONSTRAINT "logs_entityId_entities_id_fk" FOREIGN KEY ("entityId") REFERENCES "public"."entities"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
170
- ALTER TABLE "logs" ADD CONSTRAINT "logs_roomId_rooms_id_fk" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
173
+ ALTER TABLE "logs" ADD CONSTRAINT "logs_roomId_rooms_id_fk" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
171
174
  ALTER TABLE "logs" ADD CONSTRAINT "fk_room" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
172
175
  ALTER TABLE "logs" ADD CONSTRAINT "fk_user" FOREIGN KEY ("entityId") REFERENCES "public"."entities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
173
176
  ALTER TABLE "memories" ADD CONSTRAINT "memories_entityId_entities_id_fk" FOREIGN KEY ("entityId") REFERENCES "public"."entities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
@@ -175,7 +178,7 @@ ALTER TABLE "memories" ADD CONSTRAINT "memories_agentId_agents_id_fk" FOREIGN KE
175
178
  ALTER TABLE "memories" ADD CONSTRAINT "memories_roomId_rooms_id_fk" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
176
179
  ALTER TABLE "memories" ADD CONSTRAINT "fk_room" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
177
180
  ALTER TABLE "memories" ADD CONSTRAINT "fk_user" FOREIGN KEY ("entityId") REFERENCES "public"."entities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
178
- ALTER TABLE "memories" ADD CONSTRAINT "fk_agent" FOREIGN KEY ("agentId") REFERENCES "public"."entities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
181
+ ALTER TABLE "memories" ADD CONSTRAINT "fk_agent" FOREIGN KEY ("agentId") REFERENCES "public"."agents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
179
182
  ALTER TABLE "participants" ADD CONSTRAINT "participants_entityId_entities_id_fk" FOREIGN KEY ("entityId") REFERENCES "public"."entities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
180
183
  ALTER TABLE "participants" ADD CONSTRAINT "participants_roomId_rooms_id_fk" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
181
184
  ALTER TABLE "participants" ADD CONSTRAINT "participants_agentId_agents_id_fk" FOREIGN KEY ("agentId") REFERENCES "public"."agents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
@@ -187,10 +190,10 @@ ALTER TABLE "relationships" ADD CONSTRAINT "relationships_agentId_agents_id_fk"
187
190
  ALTER TABLE "relationships" ADD CONSTRAINT "fk_user_a" FOREIGN KEY ("sourceEntityId") REFERENCES "public"."entities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
188
191
  ALTER TABLE "relationships" ADD CONSTRAINT "fk_user_b" FOREIGN KEY ("targetEntityId") REFERENCES "public"."entities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
189
192
  ALTER TABLE "rooms" ADD CONSTRAINT "rooms_agentId_agents_id_fk" FOREIGN KEY ("agentId") REFERENCES "public"."agents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
190
- ALTER TABLE "rooms" ADD CONSTRAINT "rooms_worldId_worlds_id_fk" FOREIGN KEY ("worldId") REFERENCES "public"."worlds"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
191
193
  ALTER TABLE "worlds" ADD CONSTRAINT "worlds_agentId_agents_id_fk" FOREIGN KEY ("agentId") REFERENCES "public"."agents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
192
194
  CREATE INDEX "idx_embedding_memory" ON "embeddings" USING btree ("memory_id");--> statement-breakpoint
193
195
  CREATE INDEX "idx_memories_type_room" ON "memories" USING btree ("type","roomId");--> statement-breakpoint
196
+ CREATE INDEX "idx_memories_world_id" ON "memories" USING btree ("worldId");--> statement-breakpoint
194
197
  CREATE INDEX "idx_memories_metadata_type" ON "memories" USING btree (((metadata->>'type')));--> statement-breakpoint
195
198
  CREATE INDEX "idx_memories_document_id" ON "memories" USING btree (((metadata->>'documentId')));--> statement-breakpoint
196
199
  CREATE INDEX "idx_fragments_order" ON "memories" USING btree (((metadata->>'documentId')),((metadata->>'position')));--> statement-breakpoint
@@ -1,5 +1,5 @@
1
1
  {
2
- "id": "e868cf2d-10a2-406f-a31e-9342a0f29c35",
2
+ "id": "327f7a6a-2e61-4e4c-9604-242dc5fd42d4",
3
3
  "prevId": "00000000-0000-0000-0000-000000000000",
4
4
  "version": "7",
5
5
  "dialect": "postgresql",
@@ -20,7 +20,7 @@
20
20
  "type": "boolean",
21
21
  "primaryKey": false,
22
22
  "notNull": true,
23
- "default": "true"
23
+ "default": true
24
24
  },
25
25
  "createdAt": {
26
26
  "name": "createdAt",
@@ -40,7 +40,7 @@
40
40
  "name": "name",
41
41
  "type": "text",
42
42
  "primaryKey": false,
43
- "notNull": false
43
+ "notNull": true
44
44
  },
45
45
  "username": {
46
46
  "name": "username",
@@ -52,68 +52,68 @@
52
52
  "name": "system",
53
53
  "type": "text",
54
54
  "primaryKey": false,
55
- "notNull": false
55
+ "default": ""
56
56
  },
57
57
  "bio": {
58
58
  "name": "bio",
59
59
  "type": "jsonb",
60
60
  "primaryKey": false,
61
- "notNull": true
61
+ "default": "[]::jsonb"
62
62
  },
63
63
  "message_examples": {
64
64
  "name": "message_examples",
65
65
  "type": "jsonb",
66
66
  "primaryKey": false,
67
- "notNull": false,
67
+ "notNull": true,
68
68
  "default": "'[]'::jsonb"
69
69
  },
70
70
  "post_examples": {
71
71
  "name": "post_examples",
72
72
  "type": "jsonb",
73
73
  "primaryKey": false,
74
- "notNull": false,
74
+ "notNull": true,
75
75
  "default": "'[]'::jsonb"
76
76
  },
77
77
  "topics": {
78
78
  "name": "topics",
79
79
  "type": "jsonb",
80
80
  "primaryKey": false,
81
- "notNull": false,
81
+ "notNull": true,
82
82
  "default": "'[]'::jsonb"
83
83
  },
84
84
  "adjectives": {
85
85
  "name": "adjectives",
86
86
  "type": "jsonb",
87
87
  "primaryKey": false,
88
- "notNull": false,
88
+ "notNull": true,
89
89
  "default": "'[]'::jsonb"
90
90
  },
91
91
  "knowledge": {
92
92
  "name": "knowledge",
93
93
  "type": "jsonb",
94
94
  "primaryKey": false,
95
- "notNull": false,
95
+ "notNull": true,
96
96
  "default": "'[]'::jsonb"
97
97
  },
98
98
  "plugins": {
99
99
  "name": "plugins",
100
100
  "type": "jsonb",
101
101
  "primaryKey": false,
102
- "notNull": false,
102
+ "notNull": true,
103
103
  "default": "'[]'::jsonb"
104
104
  },
105
105
  "settings": {
106
106
  "name": "settings",
107
107
  "type": "jsonb",
108
108
  "primaryKey": false,
109
- "notNull": false,
109
+ "notNull": true,
110
110
  "default": "'{}'::jsonb"
111
111
  },
112
112
  "style": {
113
113
  "name": "style",
114
114
  "type": "jsonb",
115
115
  "primaryKey": false,
116
- "notNull": false,
116
+ "notNull": true,
117
117
  "default": "'{}'::jsonb"
118
118
  }
119
119
  },
@@ -450,14 +450,14 @@
450
450
  "name": "names",
451
451
  "type": "text[]",
452
452
  "primaryKey": false,
453
- "notNull": false,
453
+ "notNull": true,
454
454
  "default": "'{}'::text[]"
455
455
  },
456
456
  "metadata": {
457
457
  "name": "metadata",
458
458
  "type": "jsonb",
459
459
  "primaryKey": false,
460
- "notNull": false,
460
+ "notNull": true,
461
461
  "default": "'{}'::jsonb"
462
462
  }
463
463
  },
@@ -545,7 +545,7 @@
545
545
  "tableTo": "rooms",
546
546
  "columnsFrom": ["roomId"],
547
547
  "columnsTo": ["id"],
548
- "onDelete": "no action",
548
+ "onDelete": "cascade",
549
549
  "onUpdate": "no action"
550
550
  },
551
551
  "fk_room": {
@@ -612,7 +612,7 @@
612
612
  "name": "agentId",
613
613
  "type": "uuid",
614
614
  "primaryKey": false,
615
- "notNull": false
615
+ "notNull": true
616
616
  },
617
617
  "roomId": {
618
618
  "name": "roomId",
@@ -620,6 +620,12 @@
620
620
  "primaryKey": false,
621
621
  "notNull": false
622
622
  },
623
+ "worldId": {
624
+ "name": "worldId",
625
+ "type": "uuid",
626
+ "primaryKey": false,
627
+ "notNull": false
628
+ },
623
629
  "unique": {
624
630
  "name": "unique",
625
631
  "type": "boolean",
@@ -657,6 +663,21 @@
657
663
  "method": "btree",
658
664
  "with": {}
659
665
  },
666
+ "idx_memories_world_id": {
667
+ "name": "idx_memories_world_id",
668
+ "columns": [
669
+ {
670
+ "expression": "worldId",
671
+ "isExpression": false,
672
+ "asc": true,
673
+ "nulls": "last"
674
+ }
675
+ ],
676
+ "isUnique": false,
677
+ "concurrently": false,
678
+ "method": "btree",
679
+ "with": {}
680
+ },
660
681
  "idx_memories_metadata_type": {
661
682
  "name": "idx_memories_metadata_type",
662
683
  "columns": [
@@ -758,7 +779,7 @@
758
779
  "fk_agent": {
759
780
  "name": "fk_agent",
760
781
  "tableFrom": "memories",
761
- "tableTo": "entities",
782
+ "tableTo": "agents",
762
783
  "columnsFrom": ["agentId"],
763
784
  "columnsTo": ["id"],
764
785
  "onDelete": "cascade",
@@ -1116,15 +1137,6 @@
1116
1137
  "columnsTo": ["id"],
1117
1138
  "onDelete": "cascade",
1118
1139
  "onUpdate": "no action"
1119
- },
1120
- "rooms_worldId_worlds_id_fk": {
1121
- "name": "rooms_worldId_worlds_id_fk",
1122
- "tableFrom": "rooms",
1123
- "tableTo": "worlds",
1124
- "columnsFrom": ["worldId"],
1125
- "columnsTo": ["id"],
1126
- "onDelete": "cascade",
1127
- "onUpdate": "no action"
1128
1140
  }
1129
1141
  },
1130
1142
  "compositePrimaryKeys": {},
@@ -1154,16 +1166,22 @@
1154
1166
  "name": "description",
1155
1167
  "type": "text",
1156
1168
  "primaryKey": false,
1157
- "notNull": true
1169
+ "notNull": false
1158
1170
  },
1159
- "room_id": {
1160
- "name": "room_id",
1171
+ "roomId": {
1172
+ "name": "roomId",
1173
+ "type": "uuid",
1174
+ "primaryKey": false,
1175
+ "notNull": false
1176
+ },
1177
+ "worldId": {
1178
+ "name": "worldId",
1161
1179
  "type": "uuid",
1162
1180
  "primaryKey": false,
1163
1181
  "notNull": false
1164
1182
  },
1165
- "world_id": {
1166
- "name": "world_id",
1183
+ "entityId": {
1184
+ "name": "entityId",
1167
1185
  "type": "uuid",
1168
1186
  "primaryKey": false,
1169
1187
  "notNull": false
@@ -1178,24 +1196,26 @@
1178
1196
  "name": "tags",
1179
1197
  "type": "text[]",
1180
1198
  "primaryKey": false,
1181
- "notNull": false
1199
+ "notNull": false,
1200
+ "default": "'{}'::text[]"
1182
1201
  },
1183
1202
  "metadata": {
1184
1203
  "name": "metadata",
1185
1204
  "type": "jsonb",
1186
1205
  "primaryKey": false,
1187
- "notNull": false
1206
+ "notNull": false,
1207
+ "default": "'{}'::jsonb"
1188
1208
  },
1189
1209
  "created_at": {
1190
1210
  "name": "created_at",
1191
- "type": "timestamp",
1211
+ "type": "timestamp with time zone",
1192
1212
  "primaryKey": false,
1193
1213
  "notNull": false,
1194
1214
  "default": "now()"
1195
1215
  },
1196
1216
  "updated_at": {
1197
1217
  "name": "updated_at",
1198
- "type": "timestamp",
1218
+ "type": "timestamp with time zone",
1199
1219
  "primaryKey": false,
1200
1220
  "notNull": false,
1201
1221
  "default": "now()"
@@ -5,8 +5,8 @@
5
5
  {
6
6
  "idx": 0,
7
7
  "version": "7",
8
- "when": 1740921883121,
9
- "tag": "20250302132443_init",
8
+ "when": 1746884807264,
9
+ "tag": "0000_snapshot",
10
10
  "breakpoints": true
11
11
  }
12
12
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-sql",
3
- "version": "1.0.0-beta.8",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -27,29 +27,37 @@
27
27
  ],
28
28
  "dependencies": {
29
29
  "@electric-sql/pglite": "^0.2.17",
30
- "@elizaos/core": "^1.0.0-beta.8",
30
+ "@elizaos/core": "^1.0.1",
31
31
  "@types/pg": "8.11.10",
32
32
  "drizzle-kit": "^0.30.4",
33
33
  "drizzle-orm": "^0.39.1",
34
34
  "pg": "^8.13.3"
35
35
  },
36
36
  "devDependencies": {
37
+ "@types/node": "^22.15.3",
37
38
  "dockerode": "^4.0.4",
38
39
  "prettier": "3.5.3",
39
- "tsup": "8.4.0"
40
+ "tsup": "8.4.0",
41
+ "vitest": "^1.6.1",
42
+ "zod": "^3.22.4"
40
43
  },
41
44
  "scripts": {
42
45
  "build": "tsup",
43
46
  "dev": "tsup --watch",
44
- "migrate:generate": "drizzle-kit generate:pg",
47
+ "migrate:generate": "drizzle-kit generate",
45
48
  "migrate": "tsup src/migrate.ts --format esm --clean=false --onSuccess=\"node dist/migrate.js\"",
46
49
  "lint": "prettier --write ./src",
47
50
  "clean": "rm -rf dist .turbo node_modules .turbo-tsconfig.json tsconfig.tsbuildinfo",
48
51
  "format": "prettier --write ./src",
49
- "format:check": "prettier --check ./src"
52
+ "format:check": "prettier --check ./src",
53
+ "test": "vitest run",
54
+ "test:watch": "vitest",
55
+ "test:coverage": "vitest run --coverage",
56
+ "test:integration": "vitest run __tests__/integration"
50
57
  },
51
58
  "peerDependencies": {
52
- "typescript": "5.8.2"
59
+ "typescript": "5.8.2",
60
+ "whatwg-url": "7.1.0"
53
61
  },
54
- "gitHead": "a84e25ee21e33387a1303e62a2f95dc670ffddd4"
62
+ "gitHead": "990909cd4fc651f0242b346b05680a88264876be"
55
63
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/pglite/manager.ts","../src/pg/manager.ts"],"sourceRoot":"./","sourcesContent":["import { dirname as pathDirname, resolve as pathResolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { PGlite, type PGliteOptions } from '@electric-sql/pglite';\nimport { fuzzystrmatch } from '@electric-sql/pglite/contrib/fuzzystrmatch';\nimport { vector } from '@electric-sql/pglite/vector';\nimport { logger } from '@elizaos/core';\nimport { drizzle } from 'drizzle-orm/pglite';\nimport { migrate } from 'drizzle-orm/pglite/migrator';\nimport type { IDatabaseClientManager } from '../types';\n\n/**\n * Class representing a database client manager for PGlite.\n * @implements { IDatabaseClientManager }\n */\nexport class PGliteClientManager implements IDatabaseClientManager<PGlite> {\n private client: PGlite;\n private shuttingDown = false;\n private readonly shutdownTimeout = 500;\n\n /**\n * Constructor for creating a new instance of PGlite with the provided options.\n * Initializes the PGlite client with additional extensions.\n * @param {PGliteOptions} options - The options to configure the PGlite client.\n */\n constructor(options: PGliteOptions) {\n this.client = new PGlite({\n ...options,\n extensions: {\n vector,\n fuzzystrmatch,\n },\n });\n this.setupShutdownHandlers();\n }\n\n /**\n * Retrieves the PostgreSQL lite connection.\n *\n * @returns {PGlite} The PostgreSQL lite connection.\n * @throws {Error} If the client manager is currently shutting down.\n */\n public getConnection(): PGlite {\n if (this.shuttingDown) {\n throw new Error('Client manager is shutting down');\n }\n return this.client;\n }\n\n /**\n * Initiates a graceful shutdown of the PGlite client.\n * Checks if the client is already in the process of shutting down.\n * Logs the start of shutdown process and sets shuttingDown flag to true.\n * Sets a timeout for the shutdown process and forces closure of database connection if timeout is reached.\n * Handles the shutdown process, closes the client connection, clears the timeout, and logs the completion of shutdown.\n * Logs any errors that occur during the shutdown process.\n */\n private async gracefulShutdown() {\n if (this.shuttingDown) {\n return;\n }\n\n this.shuttingDown = true;\n logger.info('Starting graceful shutdown of PGlite client...');\n\n const timeout = setTimeout(() => {\n logger.warn('Shutdown timeout reached, forcing database connection closure...');\n this.client.close().finally(() => {\n process.exit(1);\n });\n }, this.shutdownTimeout);\n\n try {\n await this.client.close();\n clearTimeout(timeout);\n logger.info('PGlite client shutdown completed successfully');\n process.exit(0);\n } catch (error) {\n logger.error('Error during graceful shutdown:', error);\n process.exit(1);\n }\n }\n\n /**\n * Sets up shutdown handlers for SIGINT, SIGTERM, and beforeExit events to gracefully shutdown the application.\n * @private\n */\n private setupShutdownHandlers() {\n process.on('SIGINT', async () => {\n await this.gracefulShutdown();\n });\n\n process.on('SIGTERM', async () => {\n await this.gracefulShutdown();\n });\n\n process.on('beforeExit', async () => {\n await this.gracefulShutdown();\n });\n }\n\n /**\n * Initializes the client for PGlite.\n *\n * @returns {Promise<void>} A Promise that resolves when the client is initialized successfully\n */\n public async initialize(): Promise<void> {\n try {\n await this.client.waitReady;\n logger.info('PGlite client initialized successfully');\n } catch (error) {\n logger.error('Failed to initialize PGlite client:', error);\n throw error;\n }\n }\n\n /**\n * Asynchronously closes the resource. If the resource is not already shutting down,\n * it performs a graceful shutdown before closing.\n *\n * @returns A promise that resolves once the resource has been closed.\n */\n public async close(): Promise<void> {\n if (!this.shuttingDown) {\n await this.gracefulShutdown();\n }\n }\n\n /**\n * Check if the system is currently shutting down.\n *\n * @returns {boolean} True if the system is shutting down, false otherwise.\n */\n public isShuttingDown(): boolean {\n return this.shuttingDown;\n }\n\n /**\n * Asynchronously runs database migrations using Drizzle.\n *\n * Drizzle will first check if the migrations are already applied.\n * If there is a diff between database schema and migrations, it will apply the migrations.\n * If they are already applied, it will skip them.\n *\n * @returns {Promise<void>} A Promise that resolves once the migrations are completed successfully.\n */\n async runMigrations(): Promise<void> {\n try {\n const db = drizzle(this.client);\n\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = pathDirname(__filename);\n\n await migrate(db, {\n migrationsFolder: pathResolve(__dirname, '../drizzle/migrations'),\n migrationsSchema: 'public',\n });\n } catch (error) {\n logger.error('Failed to run database migrations (pglite):', error);\n }\n }\n}\n","import path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { logger } from '@elizaos/core';\nimport { drizzle } from 'drizzle-orm/node-postgres';\nimport { migrate } from 'drizzle-orm/node-postgres/migrator';\nimport pkg, { type Pool as PgPool } from 'pg';\nimport type { IDatabaseClientManager } from '../types';\n\nconst { Pool } = pkg;\n\n/**\n * Manages connections to a PostgreSQL database using a connection pool.\n * Implements IDatabaseClientManager interface.\n */\n\nexport class PostgresConnectionManager implements IDatabaseClientManager<PgPool> {\n private pool: PgPool;\n private isShuttingDown = false;\n private readonly connectionTimeout: number = 5000;\n\n /**\n * Constructor for creating a connection pool.\n * @param {string} connectionString - The connection string used to connect to the database.\n */\n constructor(connectionString: string) {\n const defaultConfig = {\n max: 20,\n idleTimeoutMillis: 30000,\n connectionTimeoutMillis: this.connectionTimeout,\n };\n\n this.pool = new Pool({\n ...defaultConfig,\n connectionString,\n });\n\n this.pool.on('error', (err) => {\n logger.error('Unexpected pool error', err);\n this.handlePoolError(err);\n });\n\n this.setupPoolErrorHandling();\n this.testConnection();\n }\n\n /**\n * Handles a pool error by attempting to reconnect the pool.\n *\n * @param {Error} error The error that occurred in the pool.\n * @throws {Error} If failed to reconnect the pool.\n */\n private async handlePoolError(error: Error) {\n logger.error('Pool error occurred, attempting to reconnect', {\n error: error.message,\n });\n\n try {\n await this.pool.end();\n\n this.pool = new Pool({\n ...this.pool.options,\n connectionTimeoutMillis: this.connectionTimeout,\n });\n\n await this.testConnection();\n logger.success('Pool reconnection successful');\n } catch (reconnectError) {\n logger.error('Failed to reconnect pool', {\n error: reconnectError instanceof Error ? reconnectError.message : String(reconnectError),\n });\n throw reconnectError;\n }\n }\n\n /**\n * Asynchronously tests the database connection by executing a query to get the current timestamp.\n *\n * @returns {Promise<boolean>} - A Promise that resolves to true if the database connection test is successful.\n */\n async testConnection(): Promise<boolean> {\n let client: pkg.PoolClient | null = null;\n try {\n client = await this.pool.connect();\n const result = await client.query('SELECT NOW()');\n logger.success('Database connection test successful:', result.rows[0]);\n return true;\n } catch (error) {\n logger.error('Database connection test failed:', error);\n throw new Error(`Failed to connect to database: ${(error as Error).message}`);\n } finally {\n if (client) client.release();\n }\n }\n\n /**\n * Sets up event listeners to handle pool cleanup on SIGINT, SIGTERM, and beforeExit events.\n */\n private setupPoolErrorHandling() {\n process.on('SIGINT', async () => {\n await this.cleanup();\n process.exit(0);\n });\n\n process.on('SIGTERM', async () => {\n await this.cleanup();\n process.exit(0);\n });\n\n process.on('beforeExit', async () => {\n await this.cleanup();\n });\n }\n\n /**\n * Get the connection pool.\n * @returns {PgPool} The connection pool\n * @throws {Error} If the connection manager is shutting down or an error occurs when trying to get the connection from the pool\n */\n public getConnection(): PgPool {\n if (this.isShuttingDown) {\n throw new Error('Connection manager is shutting down');\n }\n\n try {\n return this.pool;\n } catch (error) {\n logger.error('Failed to get connection from pool:', error);\n throw error;\n }\n }\n\n /**\n * Asynchronously acquires a database client from the connection pool.\n *\n * @returns {Promise<pkg.PoolClient>} A Promise that resolves with the acquired database client.\n * @throws {Error} If an error occurs while acquiring the database client.\n */\n public async getClient(): Promise<pkg.PoolClient> {\n try {\n return await this.pool.connect();\n } catch (error) {\n logger.error('Failed to acquire a database client:', error);\n throw error;\n }\n }\n\n /**\n * Initializes the PostgreSQL connection manager by testing the connection and logging the result.\n *\n * @returns {Promise<void>} A Promise that resolves once the manager is successfully initialized\n * @throws {Error} If there is an error initializing the connection manager\n */\n public async initialize(): Promise<void> {\n try {\n await this.testConnection();\n logger.debug('PostgreSQL connection manager initialized successfully');\n } catch (error) {\n logger.error('Failed to initialize connection manager:', error);\n throw error;\n }\n }\n\n /**\n * Asynchronously close the current process by executing a cleanup function.\n * @returns A promise that resolves once the cleanup is complete.\n */\n public async close(): Promise<void> {\n await this.cleanup();\n }\n\n /**\n * Cleans up and closes the database pool.\n * @returns {Promise<void>} A Promise that resolves when the database pool is closed.\n */\n async cleanup(): Promise<void> {\n try {\n await this.pool.end();\n logger.info('Database pool closed');\n } catch (error) {\n logger.error('Error closing database pool:', error);\n }\n }\n\n /**\n * Asynchronously runs database migrations using the Drizzle library.\n *\n * Drizzle will first check if the migrations are already applied.\n * If there is a diff between database schema and migrations, it will apply the migrations.\n * If they are already applied, it will skip them.\n *\n * @returns {Promise<void>} A Promise that resolves once the migrations are completed successfully.\n */\n async runMigrations(): Promise<void> {\n try {\n const db = drizzle(this.pool);\n\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n\n await migrate(db, {\n migrationsFolder: path.resolve(__dirname, '../drizzle/migrations'),\n migrationsSchema: 'public',\n });\n } catch (error) {\n logger.error('Failed to run database migrations (pg):', error);\n }\n }\n}\n"],"mappings":"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","names":["fileURLToPath","logger","drizzle","migrate","logger","drizzle","fileURLToPath","migrate"]}