@falai/agent 0.3.12 → 0.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +74 -0
  2. package/dist/adapters/MemoryAdapter.d.ts +47 -0
  3. package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
  4. package/dist/adapters/MemoryAdapter.js +178 -0
  5. package/dist/adapters/MemoryAdapter.js.map +1 -0
  6. package/dist/adapters/MongoAdapter.d.ts +97 -0
  7. package/dist/adapters/MongoAdapter.d.ts.map +1 -0
  8. package/dist/adapters/MongoAdapter.js +163 -0
  9. package/dist/adapters/MongoAdapter.js.map +1 -0
  10. package/dist/adapters/PostgreSQLAdapter.d.ts +71 -0
  11. package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  12. package/dist/adapters/PostgreSQLAdapter.js +256 -0
  13. package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
  14. package/dist/adapters/RedisAdapter.d.ts +71 -0
  15. package/dist/adapters/RedisAdapter.d.ts.map +1 -0
  16. package/dist/adapters/RedisAdapter.js +226 -0
  17. package/dist/adapters/RedisAdapter.js.map +1 -0
  18. package/dist/adapters/SQLiteAdapter.d.ts +69 -0
  19. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
  20. package/dist/adapters/SQLiteAdapter.js +307 -0
  21. package/dist/adapters/SQLiteAdapter.js.map +1 -0
  22. package/dist/adapters/index.d.ts +9 -0
  23. package/dist/adapters/index.d.ts.map +1 -1
  24. package/dist/adapters/index.js +5 -0
  25. package/dist/adapters/index.js.map +1 -1
  26. package/dist/cjs/adapters/MemoryAdapter.d.ts +47 -0
  27. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -0
  28. package/dist/cjs/adapters/MemoryAdapter.js +182 -0
  29. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
  30. package/dist/cjs/adapters/MongoAdapter.d.ts +97 -0
  31. package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -0
  32. package/dist/cjs/adapters/MongoAdapter.js +167 -0
  33. package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
  34. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +71 -0
  35. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  36. package/dist/cjs/adapters/PostgreSQLAdapter.js +260 -0
  37. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
  38. package/dist/cjs/adapters/RedisAdapter.d.ts +71 -0
  39. package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -0
  40. package/dist/cjs/adapters/RedisAdapter.js +230 -0
  41. package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
  42. package/dist/cjs/adapters/SQLiteAdapter.d.ts +69 -0
  43. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -0
  44. package/dist/cjs/adapters/SQLiteAdapter.js +311 -0
  45. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
  46. package/dist/cjs/adapters/index.d.ts +9 -0
  47. package/dist/cjs/adapters/index.d.ts.map +1 -1
  48. package/dist/cjs/adapters/index.js +11 -1
  49. package/dist/cjs/adapters/index.js.map +1 -1
  50. package/dist/cjs/index.d.ts +9 -0
  51. package/dist/cjs/index.d.ts.map +1 -1
  52. package/dist/cjs/index.js +11 -1
  53. package/dist/cjs/index.js.map +1 -1
  54. package/dist/index.d.ts +9 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +5 -0
  57. package/dist/index.js.map +1 -1
  58. package/docs/ADAPTERS.md +151 -0
  59. package/docs/API_REFERENCE.md +448 -0
  60. package/docs/PERSISTENCE.md +176 -6
  61. package/examples/redis-persistence.ts +89 -0
  62. package/package.json +26 -2
  63. package/src/adapters/MemoryAdapter.ts +245 -0
  64. package/src/adapters/MongoAdapter.ts +295 -0
  65. package/src/adapters/PostgreSQLAdapter.ts +417 -0
  66. package/src/adapters/RedisAdapter.ts +365 -0
  67. package/src/adapters/SQLiteAdapter.ts +449 -0
  68. package/src/adapters/index.ts +27 -0
  69. package/src/index.ts +22 -0
package/README.md CHANGED
@@ -902,6 +902,80 @@ Control agent behavior and communication style per route:
902
902
  - 💬 Different communication styles per route
903
903
  - 🎨 Perfect for multi-channel bots (WhatsApp, email, chat)
904
904
 
905
+ ### 💾 [Prisma Persistence](./examples/prisma-persistence.ts)
906
+
907
+ Complete example of auto-saving sessions and messages with Prisma ORM:
908
+
909
+ - 💾 Auto-save sessions and messages to database
910
+ - 🔄 Load conversation history on agent initialization
911
+ - 📊 Track conversation state across restarts
912
+ - 🎯 Full example with lifecycle hooks
913
+ - 📝 Includes schema example
914
+
915
+ ### ⚡ [Redis Persistence](./examples/redis-persistence.ts)
916
+
917
+ Fast, in-memory persistence for high-throughput applications:
918
+
919
+ - 🚀 Lightning-fast session storage
920
+ - ⏰ Configurable TTLs for auto-cleanup
921
+ - 🔑 Custom key prefixes
922
+ - 💨 Perfect for real-time chat applications
923
+
924
+ ---
925
+
926
+ ## 💾 Database Adapters
927
+
928
+ **Optional persistence** - Choose the database that fits your needs. All adapters follow the same simple provider pattern:
929
+
930
+ ### 🎯 Available Adapters
931
+
932
+ | Adapter | Use Case | Install |
933
+ | --------------------- | ---------------------------------- | ----------------------------- |
934
+ | **PrismaAdapter** | Type-safe ORM with migrations | `npm install @prisma/client` |
935
+ | **RedisAdapter** | Fast in-memory for real-time apps | `npm install ioredis` |
936
+ | **MongoAdapter** | Flexible document storage | `npm install mongodb` |
937
+ | **PostgreSQLAdapter** | Raw SQL with auto table creation | `npm install pg` |
938
+ | **SQLiteAdapter** | Lightweight local database | `npm install better-sqlite3` |
939
+ | **MemoryAdapter** | Testing & development (no install) | Built-in (no dependencies) ✨ |
940
+
941
+ ### ⚡ Quick Setup
942
+
943
+ ```typescript
944
+ import { Agent, PrismaAdapter } from "@falai/agent";
945
+ import { PrismaClient } from "@prisma/client";
946
+
947
+ const prisma = new PrismaClient();
948
+
949
+ const agent = new Agent({
950
+ name: "My Agent",
951
+ ai: provider,
952
+ persistence: {
953
+ adapter: new PrismaAdapter({ prisma }),
954
+ userId: "user_123",
955
+ autoSave: true, // Automatically save all messages
956
+ },
957
+ });
958
+ ```
959
+
960
+ That's it! Sessions and messages are now automatically persisted.
961
+
962
+ ### 📚 Full Documentation
963
+
964
+ See [**docs/PERSISTENCE.md**](./docs/PERSISTENCE.md) for:
965
+
966
+ - Complete adapter API reference
967
+ - Custom table names & field mappings
968
+ - Lifecycle hooks for persistence
969
+ - Creating custom adapters
970
+ - Migration guides
971
+
972
+ See [**docs/ADAPTERS.md**](./docs/ADAPTERS.md) for:
973
+
974
+ - Detailed adapter comparison
975
+ - Configuration examples for each database
976
+ - Performance characteristics
977
+ - Type safety guarantees
978
+
905
979
  ---
906
980
 
907
981
  ## 🏗️ Architecture
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Memory adapter for persistence
3
+ * In-memory storage for testing and development (no database required)
4
+ */
5
+ import type { SessionRepository, MessageRepository, SessionData, MessageData, PersistenceAdapter } from "../types/persistence";
6
+ /**
7
+ * Memory Adapter - Provider-style API for in-memory persistence
8
+ *
9
+ * Perfect for:
10
+ * - Testing
11
+ * - Development
12
+ * - Prototyping
13
+ * - No database setup required
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { Agent, MemoryAdapter } from '@falai/agent';
18
+ *
19
+ * const agent = new Agent({
20
+ * name: "My Agent",
21
+ * ai: provider,
22
+ * persistence: {
23
+ * adapter: new MemoryAdapter(),
24
+ * userId: "user_123",
25
+ * },
26
+ * });
27
+ * ```
28
+ */
29
+ export declare class MemoryAdapter implements PersistenceAdapter {
30
+ readonly sessionRepository: SessionRepository;
31
+ readonly messageRepository: MessageRepository;
32
+ private sessions;
33
+ private messages;
34
+ constructor();
35
+ /**
36
+ * Clear all data (useful for testing)
37
+ */
38
+ clear(): void;
39
+ /**
40
+ * Get data snapshot (useful for debugging)
41
+ */
42
+ getSnapshot(): {
43
+ sessions: SessionData[];
44
+ messages: MessageData[];
45
+ };
46
+ }
47
+ //# sourceMappingURL=MemoryAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EAEX,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,YAAW,kBAAkB;IACtD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,QAAQ,CAA2B;;IAU3C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI;QACb,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;KACzB;CAMF"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Memory adapter for persistence
3
+ * In-memory storage for testing and development (no database required)
4
+ */
5
+ /**
6
+ * Memory Adapter - Provider-style API for in-memory persistence
7
+ *
8
+ * Perfect for:
9
+ * - Testing
10
+ * - Development
11
+ * - Prototyping
12
+ * - No database setup required
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { Agent, MemoryAdapter } from '@falai/agent';
17
+ *
18
+ * const agent = new Agent({
19
+ * name: "My Agent",
20
+ * ai: provider,
21
+ * persistence: {
22
+ * adapter: new MemoryAdapter(),
23
+ * userId: "user_123",
24
+ * },
25
+ * });
26
+ * ```
27
+ */
28
+ export class MemoryAdapter {
29
+ constructor() {
30
+ this.sessions = new Map();
31
+ this.messages = new Map();
32
+ this.sessionRepository = new MemorySessionRepository(this.sessions);
33
+ this.messageRepository = new MemoryMessageRepository(this.messages);
34
+ }
35
+ /**
36
+ * Clear all data (useful for testing)
37
+ */
38
+ clear() {
39
+ this.sessions.clear();
40
+ this.messages.clear();
41
+ }
42
+ /**
43
+ * Get data snapshot (useful for debugging)
44
+ */
45
+ getSnapshot() {
46
+ return {
47
+ sessions: Array.from(this.sessions.values()),
48
+ messages: Array.from(this.messages.values()),
49
+ };
50
+ }
51
+ }
52
+ /**
53
+ * Memory Session Repository
54
+ */
55
+ class MemorySessionRepository {
56
+ constructor(sessions) {
57
+ this.sessions = sessions;
58
+ }
59
+ async create(data) {
60
+ const id = `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
61
+ const now = new Date();
62
+ const session = {
63
+ ...data,
64
+ id,
65
+ status: data.status || "active",
66
+ messageCount: data.messageCount || 0,
67
+ createdAt: now,
68
+ updatedAt: now,
69
+ };
70
+ this.sessions.set(id, session);
71
+ return Promise.resolve(session);
72
+ }
73
+ async findById(id) {
74
+ const session = this.sessions.get(id) || null;
75
+ return Promise.resolve(session);
76
+ }
77
+ async findActiveByUserId(userId) {
78
+ const sessions = Array.from(this.sessions.values())
79
+ .filter((s) => s.userId === userId && s.status === "active")
80
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
81
+ return Promise.resolve(sessions[0] || null);
82
+ }
83
+ async findByUserId(userId, limit = 100) {
84
+ const sessions = Array.from(this.sessions.values())
85
+ .filter((s) => s.userId === userId)
86
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
87
+ .slice(0, limit);
88
+ return Promise.resolve(sessions);
89
+ }
90
+ async update(id, data) {
91
+ const existing = this.sessions.get(id);
92
+ if (!existing)
93
+ return null;
94
+ const updated = {
95
+ ...existing,
96
+ ...data,
97
+ updatedAt: new Date(),
98
+ };
99
+ this.sessions.set(id, updated);
100
+ return Promise.resolve(updated);
101
+ }
102
+ async updateStatus(id, status, completedAt) {
103
+ return await this.update(id, { status, completedAt });
104
+ }
105
+ async updateCollectedData(id, collectedData) {
106
+ return await this.update(id, { collectedData });
107
+ }
108
+ async updateRouteState(id, route, state) {
109
+ return await this.update(id, {
110
+ currentRoute: route,
111
+ currentState: state,
112
+ });
113
+ }
114
+ async incrementMessageCount(id) {
115
+ const session = this.sessions.get(id);
116
+ if (!session)
117
+ return null;
118
+ return await this.update(id, {
119
+ messageCount: (session.messageCount || 0) + 1,
120
+ lastMessageAt: new Date(),
121
+ });
122
+ }
123
+ async delete(id) {
124
+ const result = this.sessions.delete(id);
125
+ return Promise.resolve(result);
126
+ }
127
+ }
128
+ /**
129
+ * Memory Message Repository
130
+ */
131
+ class MemoryMessageRepository {
132
+ constructor(messages) {
133
+ this.messages = messages;
134
+ }
135
+ async create(data) {
136
+ const id = `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`;
137
+ const message = {
138
+ ...data,
139
+ id,
140
+ createdAt: new Date(),
141
+ };
142
+ this.messages.set(id, message);
143
+ return Promise.resolve(message);
144
+ }
145
+ async findById(id) {
146
+ const message = this.messages.get(id) || null;
147
+ return Promise.resolve(message);
148
+ }
149
+ async findBySessionId(sessionId, limit = 1000) {
150
+ const messages = Array.from(this.messages.values())
151
+ .filter((m) => m.sessionId === sessionId)
152
+ .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime())
153
+ .slice(0, limit);
154
+ return Promise.resolve(messages);
155
+ }
156
+ async findByUserId(userId, limit = 100) {
157
+ const messages = Array.from(this.messages.values())
158
+ .filter((m) => m.userId === userId)
159
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
160
+ .slice(0, limit);
161
+ return Promise.resolve(messages);
162
+ }
163
+ async delete(id) {
164
+ const result = this.messages.delete(id);
165
+ return Promise.resolve(result);
166
+ }
167
+ async deleteBySessionId(sessionId) {
168
+ const toDelete = Array.from(this.messages.values()).filter((m) => m.sessionId === sessionId);
169
+ toDelete.forEach((m) => this.messages.delete(m.id));
170
+ return Promise.resolve(toDelete.length);
171
+ }
172
+ async deleteByUserId(userId) {
173
+ const toDelete = Array.from(this.messages.values()).filter((m) => m.userId === userId);
174
+ toDelete.forEach((m) => this.messages.delete(m.id));
175
+ return Promise.resolve(toDelete.length);
176
+ }
177
+ }
178
+ //# sourceMappingURL=MemoryAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryAdapter.js","sourceRoot":"","sources":["../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * MongoDB adapter for persistence
3
+ * Document-based storage with flexible schema
4
+ */
5
+ import type { SessionRepository, MessageRepository, PersistenceAdapter } from "../types/persistence";
6
+ /**
7
+ * MongoDB collection interface - matches mongodb driver
8
+ */
9
+ export interface MongoCollection<T = Record<string, unknown>> {
10
+ insertOne(doc: T): Promise<{
11
+ insertedId: unknown;
12
+ }>;
13
+ findOne(filter: Record<string, unknown>): Promise<T | null>;
14
+ find(filter: Record<string, unknown>): {
15
+ sort(sort: Record<string, number>): {
16
+ limit(limit: number): {
17
+ toArray(): Promise<T[]>;
18
+ };
19
+ };
20
+ toArray(): Promise<T[]>;
21
+ };
22
+ updateOne(filter: Record<string, unknown>, update: Record<string, unknown>): Promise<{
23
+ matchedCount: number;
24
+ }>;
25
+ deleteOne(filter: Record<string, unknown>): Promise<{
26
+ deletedCount: number;
27
+ }>;
28
+ deleteMany(filter: Record<string, unknown>): Promise<{
29
+ deletedCount: number;
30
+ }>;
31
+ }
32
+ /**
33
+ * MongoDB database interface
34
+ */
35
+ export interface MongoDatabase {
36
+ collection<T = Record<string, unknown>>(name: string): MongoCollection<T>;
37
+ }
38
+ /**
39
+ * MongoDB client interface
40
+ */
41
+ export interface MongoClient {
42
+ db(name?: string): MongoDatabase;
43
+ close(): Promise<void>;
44
+ }
45
+ /**
46
+ * Options for MongoDB adapter
47
+ */
48
+ export interface MongoAdapterOptions {
49
+ /**
50
+ * MongoDB client instance
51
+ */
52
+ client: MongoClient;
53
+ /**
54
+ * Database name
55
+ */
56
+ databaseName: string;
57
+ /**
58
+ * Collection names (default: "agent_sessions" and "agent_messages")
59
+ */
60
+ collections?: {
61
+ sessions?: string;
62
+ messages?: string;
63
+ };
64
+ }
65
+ /**
66
+ * MongoDB Adapter - Provider-style API for MongoDB persistence
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * import { MongoClient } from 'mongodb';
71
+ * import { Agent, MongoAdapter } from '@falai/agent';
72
+ *
73
+ * const client = new MongoClient('mongodb://localhost:27017');
74
+ * await client.connect();
75
+ *
76
+ * const agent = new Agent({
77
+ * name: "My Agent",
78
+ * ai: provider,
79
+ * persistence: {
80
+ * adapter: new MongoAdapter({
81
+ * client,
82
+ * databaseName: 'myapp',
83
+ * }),
84
+ * userId: "user_123",
85
+ * },
86
+ * });
87
+ * ```
88
+ */
89
+ export declare class MongoAdapter implements PersistenceAdapter {
90
+ readonly sessionRepository: SessionRepository;
91
+ readonly messageRepository: MessageRepository;
92
+ private client;
93
+ private db;
94
+ constructor(options: MongoAdapterOptions);
95
+ disconnect(): Promise<void>;
96
+ }
97
+ //# sourceMappingURL=MongoAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/MongoAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAIjB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACrC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;YAClC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;gBACpB,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;aACzB,CAAC;SACH,CAAC;QACF,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;KACzB,CAAC;IACF,SAAS,CACP,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9E,UAAU,CACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,YAAa,YAAW,kBAAkB;IACrD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,EAAE,CAAgB;gBAEd,OAAO,EAAE,mBAAmB;IAgBlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * MongoDB adapter for persistence
3
+ * Document-based storage with flexible schema
4
+ */
5
+ /**
6
+ * MongoDB Adapter - Provider-style API for MongoDB persistence
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { MongoClient } from 'mongodb';
11
+ * import { Agent, MongoAdapter } from '@falai/agent';
12
+ *
13
+ * const client = new MongoClient('mongodb://localhost:27017');
14
+ * await client.connect();
15
+ *
16
+ * const agent = new Agent({
17
+ * name: "My Agent",
18
+ * ai: provider,
19
+ * persistence: {
20
+ * adapter: new MongoAdapter({
21
+ * client,
22
+ * databaseName: 'myapp',
23
+ * }),
24
+ * userId: "user_123",
25
+ * },
26
+ * });
27
+ * ```
28
+ */
29
+ export class MongoAdapter {
30
+ constructor(options) {
31
+ this.client = options.client;
32
+ this.db = options.client.db(options.databaseName);
33
+ const sessionCollection = options.collections?.sessions || "agent_sessions";
34
+ const messageCollection = options.collections?.messages || "agent_messages";
35
+ this.sessionRepository = new MongoSessionRepository(this.db.collection(sessionCollection));
36
+ this.messageRepository = new MongoMessageRepository(this.db.collection(messageCollection));
37
+ }
38
+ async disconnect() {
39
+ await this.client.close();
40
+ }
41
+ }
42
+ /**
43
+ * MongoDB Session Repository
44
+ */
45
+ class MongoSessionRepository {
46
+ constructor(collection) {
47
+ this.collection = collection;
48
+ }
49
+ async create(data) {
50
+ const now = new Date();
51
+ const session = {
52
+ ...data,
53
+ id: `session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
54
+ status: data.status || "active",
55
+ messageCount: data.messageCount || 0,
56
+ createdAt: now,
57
+ updatedAt: now,
58
+ };
59
+ await this.collection.insertOne(session);
60
+ return session;
61
+ }
62
+ async findById(id) {
63
+ return await this.collection.findOne({ id });
64
+ }
65
+ async findActiveByUserId(userId) {
66
+ return await this.collection.findOne({ userId, status: "active" });
67
+ }
68
+ async findByUserId(userId, limit = 100) {
69
+ return await this.collection
70
+ .find({ userId })
71
+ .sort({ createdAt: -1 })
72
+ .limit(limit)
73
+ .toArray();
74
+ }
75
+ async update(id, data) {
76
+ const result = await this.collection.updateOne({ id }, { $set: { ...data, updatedAt: new Date() } });
77
+ if (result.matchedCount === 0)
78
+ return null;
79
+ return await this.findById(id);
80
+ }
81
+ async updateStatus(id, status, completedAt) {
82
+ const updateData = {
83
+ status,
84
+ updatedAt: new Date(),
85
+ };
86
+ if (completedAt) {
87
+ updateData.completedAt = completedAt;
88
+ }
89
+ const result = await this.collection.updateOne({ id }, { $set: updateData });
90
+ if (result.matchedCount === 0)
91
+ return null;
92
+ return await this.findById(id);
93
+ }
94
+ async updateCollectedData(id, collectedData) {
95
+ return await this.update(id, { collectedData });
96
+ }
97
+ async updateRouteState(id, route, state) {
98
+ return await this.update(id, {
99
+ currentRoute: route,
100
+ currentState: state,
101
+ });
102
+ }
103
+ async incrementMessageCount(id) {
104
+ const result = await this.collection.updateOne({ id }, {
105
+ $inc: { messageCount: 1 },
106
+ $set: { lastMessageAt: new Date(), updatedAt: new Date() },
107
+ });
108
+ if (result.matchedCount === 0)
109
+ return null;
110
+ return await this.findById(id);
111
+ }
112
+ async delete(id) {
113
+ const result = await this.collection.deleteOne({ id });
114
+ return result.deletedCount > 0;
115
+ }
116
+ }
117
+ /**
118
+ * MongoDB Message Repository
119
+ */
120
+ class MongoMessageRepository {
121
+ constructor(collection) {
122
+ this.collection = collection;
123
+ }
124
+ async create(data) {
125
+ const message = {
126
+ ...data,
127
+ id: `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`,
128
+ createdAt: new Date(),
129
+ };
130
+ await this.collection.insertOne(message);
131
+ return message;
132
+ }
133
+ async findById(id) {
134
+ return await this.collection.findOne({ id });
135
+ }
136
+ async findBySessionId(sessionId, limit = 1000) {
137
+ return await this.collection
138
+ .find({ sessionId })
139
+ .sort({ createdAt: 1 })
140
+ .limit(limit)
141
+ .toArray();
142
+ }
143
+ async findByUserId(userId, limit = 100) {
144
+ return await this.collection
145
+ .find({ userId })
146
+ .sort({ createdAt: -1 })
147
+ .limit(limit)
148
+ .toArray();
149
+ }
150
+ async delete(id) {
151
+ const result = await this.collection.deleteOne({ id });
152
+ return result.deletedCount > 0;
153
+ }
154
+ async deleteBySessionId(sessionId) {
155
+ const result = await this.collection.deleteMany({ sessionId });
156
+ return result.deletedCount;
157
+ }
158
+ async deleteByUserId(userId) {
159
+ const result = await this.collection.deleteMany({ userId });
160
+ return result.deletedCount;
161
+ }
162
+ }
163
+ //# sourceMappingURL=MongoAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoAdapter.js","sourceRoot":"","sources":["../../src/adapters/MongoAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * PostgreSQL adapter for persistence
3
+ * Raw SQL adapter for PostgreSQL with custom schemas
4
+ */
5
+ import type { SessionRepository, MessageRepository, PersistenceAdapter } from "../types/persistence";
6
+ /**
7
+ * PostgreSQL query result interface
8
+ */
9
+ export interface PgQueryResult<T = Record<string, unknown>> {
10
+ rows: T[];
11
+ rowCount: number;
12
+ }
13
+ /**
14
+ * PostgreSQL client interface - matches pg (node-postgres)
15
+ */
16
+ export interface PgClient {
17
+ query<T = Record<string, unknown>>(sql: string, values?: unknown[]): Promise<PgQueryResult<T>>;
18
+ end(): Promise<void>;
19
+ }
20
+ /**
21
+ * Options for PostgreSQL adapter
22
+ */
23
+ export interface PostgreSQLAdapterOptions {
24
+ /**
25
+ * PostgreSQL client instance (from 'pg' package)
26
+ */
27
+ client: PgClient;
28
+ /**
29
+ * Table names (default: "agent_sessions" and "agent_messages")
30
+ */
31
+ tables?: {
32
+ sessions?: string;
33
+ messages?: string;
34
+ };
35
+ }
36
+ /**
37
+ * PostgreSQL Adapter - Provider-style API for PostgreSQL persistence
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * import { Client } from 'pg';
42
+ * import { Agent, PostgreSQLAdapter } from '@falai/agent';
43
+ *
44
+ * const client = new Client({
45
+ * host: 'localhost',
46
+ * port: 5432,
47
+ * database: 'myapp',
48
+ * user: 'postgres',
49
+ * password: 'password',
50
+ * });
51
+ * await client.connect();
52
+ *
53
+ * const agent = new Agent({
54
+ * name: "My Agent",
55
+ * ai: provider,
56
+ * persistence: {
57
+ * adapter: new PostgreSQLAdapter({ client }),
58
+ * userId: "user_123",
59
+ * },
60
+ * });
61
+ * ```
62
+ */
63
+ export declare class PostgreSQLAdapter implements PersistenceAdapter {
64
+ readonly sessionRepository: SessionRepository;
65
+ readonly messageRepository: MessageRepository;
66
+ private client;
67
+ constructor(options: PostgreSQLAdapterOptions);
68
+ initialize(): Promise<void>;
69
+ disconnect(): Promise<void>;
70
+ }
71
+ //# sourceMappingURL=PostgreSQLAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgreSQLAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/PostgreSQLAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAIjB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,MAAM,CAAW;gBAEb,OAAO,EAAE,wBAAwB;IAiBvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}