@falai/agent 0.3.20 → 0.3.22

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 (52) hide show
  1. package/README.md +18 -6
  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/OpenSearchAdapter.d.ts +169 -0
  7. package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
  8. package/dist/adapters/OpenSearchAdapter.js +457 -0
  9. package/dist/adapters/OpenSearchAdapter.js.map +1 -0
  10. package/dist/adapters/SQLiteAdapter.d.ts +69 -0
  11. package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
  12. package/dist/adapters/SQLiteAdapter.js +307 -0
  13. package/dist/adapters/SQLiteAdapter.js.map +1 -0
  14. package/dist/adapters/index.d.ts +5 -0
  15. package/dist/adapters/index.d.ts.map +1 -1
  16. package/dist/adapters/index.js +3 -0
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/cjs/adapters/MemoryAdapter.d.ts +47 -0
  19. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -0
  20. package/dist/cjs/adapters/MemoryAdapter.js +182 -0
  21. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
  22. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +169 -0
  23. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -0
  24. package/dist/cjs/adapters/OpenSearchAdapter.js +461 -0
  25. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
  26. package/dist/cjs/adapters/SQLiteAdapter.d.ts +69 -0
  27. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -0
  28. package/dist/cjs/adapters/SQLiteAdapter.js +311 -0
  29. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
  30. package/dist/cjs/adapters/index.d.ts +5 -0
  31. package/dist/cjs/adapters/index.d.ts.map +1 -1
  32. package/dist/cjs/adapters/index.js +7 -1
  33. package/dist/cjs/adapters/index.js.map +1 -1
  34. package/dist/cjs/index.d.ts +5 -0
  35. package/dist/cjs/index.d.ts.map +1 -1
  36. package/dist/cjs/index.js +7 -1
  37. package/dist/cjs/index.js.map +1 -1
  38. package/dist/index.d.ts +5 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +3 -0
  41. package/dist/index.js.map +1 -1
  42. package/docs/ADAPTERS.md +39 -3
  43. package/docs/API_REFERENCE.md +179 -0
  44. package/docs/PERSISTENCE.md +154 -7
  45. package/docs/README.md +27 -2
  46. package/examples/opensearch-persistence.ts +175 -0
  47. package/package.json +10 -2
  48. package/src/adapters/MemoryAdapter.ts +245 -0
  49. package/src/adapters/OpenSearchAdapter.ts +666 -0
  50. package/src/adapters/SQLiteAdapter.ts +449 -0
  51. package/src/adapters/index.ts +15 -0
  52. package/src/index.ts +12 -0
package/README.md CHANGED
@@ -921,6 +921,15 @@ Fast, in-memory persistence for high-throughput applications:
921
921
  - 🔑 Custom key prefixes
922
922
  - 💨 Perfect for real-time chat applications
923
923
 
924
+ ### 🔍 [OpenSearch Persistence](./examples/opensearch-persistence.ts)
925
+
926
+ Full-text search and analytics-powered persistence:
927
+
928
+ - 🔍 Built-in full-text search across all messages
929
+ - 📊 Powerful aggregations and analytics
930
+ - 🌐 Compatible with Elasticsearch 7.x
931
+ - ☁️ AWS OpenSearch Service ready
932
+
924
933
  ---
925
934
 
926
935
  ## 💾 Database Adapters
@@ -929,12 +938,15 @@ Fast, in-memory persistence for high-throughput applications:
929
938
 
930
939
  ### 🎯 Available Adapters
931
940
 
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` |
941
+ | Adapter | Use Case | Install |
942
+ | --------------------- | ---------------------------------- | -------------------------------------------- |
943
+ | **PrismaAdapter** | Type-safe ORM with migrations | `npm install @prisma/client` |
944
+ | **RedisAdapter** | Fast in-memory for real-time apps | `npm install ioredis` |
945
+ | **MongoAdapter** | Flexible document storage | `npm install mongodb` |
946
+ | **PostgreSQLAdapter** | Raw SQL with auto table creation | `npm install pg` |
947
+ | **SQLiteAdapter** | Lightweight local database | `npm install better-sqlite3` |
948
+ | **OpenSearchAdapter** | Full-text search & analytics | `npm install @opensearch-project/opensearch` |
949
+ | **MemoryAdapter** | Testing & development (no install) | Built-in (no dependencies) ✨ |
938
950
 
939
951
  ### ⚡ Quick Setup
940
952
 
@@ -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,169 @@
1
+ /**
2
+ * OpenSearch Persistence Adapter
3
+ *
4
+ * Provides persistence for sessions and messages using OpenSearch.
5
+ * Also compatible with Elasticsearch 7.x (not tested with newer versions).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { Client } from '@opensearch-project/opensearch';
10
+ * import { OpenSearchAdapter } from '@falai/agent';
11
+ *
12
+ * const client = new Client({
13
+ * node: 'https://localhost:9200',
14
+ * auth: {
15
+ * username: 'admin',
16
+ * password: 'admin'
17
+ * }
18
+ * });
19
+ *
20
+ * const adapter = new OpenSearchAdapter(client, {
21
+ * indices: {
22
+ * sessions: 'agent_sessions',
23
+ * messages: 'agent_messages'
24
+ * },
25
+ * autoCreateIndices: true
26
+ * });
27
+ *
28
+ * const agent = new Agent({
29
+ * model: provider,
30
+ * persistence: { adapter }
31
+ * });
32
+ * ```
33
+ */
34
+ import type { PersistenceAdapter, SessionRepository, MessageRepository } from "../types/persistence.js";
35
+ /**
36
+ * OpenSearch Client interface (minimal typing for the official client)
37
+ */
38
+ export interface OpenSearchClient {
39
+ index(params: {
40
+ index: string;
41
+ id?: string;
42
+ body: Record<string, unknown>;
43
+ refresh?: boolean | "wait_for";
44
+ }): Promise<{
45
+ body: {
46
+ _id: string;
47
+ result: string;
48
+ };
49
+ }>;
50
+ get(params: {
51
+ index: string;
52
+ id: string;
53
+ }): Promise<{
54
+ body: {
55
+ _source: Record<string, unknown>;
56
+ };
57
+ }>;
58
+ update(params: {
59
+ index: string;
60
+ id: string;
61
+ body: {
62
+ doc: Record<string, unknown>;
63
+ };
64
+ refresh?: boolean | "wait_for";
65
+ }): Promise<{
66
+ body: {
67
+ result: string;
68
+ };
69
+ }>;
70
+ delete(params: {
71
+ index: string;
72
+ id: string;
73
+ refresh?: boolean | "wait_for";
74
+ }): Promise<{
75
+ body: {
76
+ result: string;
77
+ };
78
+ }>;
79
+ deleteByQuery(params: {
80
+ index: string;
81
+ body: {
82
+ query: Record<string, unknown>;
83
+ };
84
+ refresh?: boolean | "wait_for";
85
+ }): Promise<{
86
+ body: {
87
+ deleted: number;
88
+ };
89
+ }>;
90
+ search(params: {
91
+ index: string;
92
+ body: {
93
+ query?: Record<string, unknown>;
94
+ sort?: Array<Record<string, unknown>>;
95
+ size?: number;
96
+ };
97
+ }): Promise<{
98
+ body: {
99
+ hits: {
100
+ hits: Array<{
101
+ _id: string;
102
+ _source: Record<string, unknown>;
103
+ }>;
104
+ };
105
+ };
106
+ }>;
107
+ indices: {
108
+ exists(params: {
109
+ index: string;
110
+ }): Promise<{
111
+ body: boolean;
112
+ }>;
113
+ create(params: {
114
+ index: string;
115
+ body: {
116
+ mappings?: Record<string, unknown>;
117
+ };
118
+ }): Promise<{
119
+ body: {
120
+ acknowledged: boolean;
121
+ };
122
+ }>;
123
+ };
124
+ }
125
+ /**
126
+ * Configuration options for the OpenSearch adapter
127
+ */
128
+ export interface OpenSearchAdapterOptions {
129
+ /**
130
+ * Index names for sessions and messages
131
+ * @default { sessions: 'agent_sessions', messages: 'agent_messages' }
132
+ */
133
+ indices?: {
134
+ sessions?: string;
135
+ messages?: string;
136
+ };
137
+ /**
138
+ * Automatically create indices with mappings if they don't exist
139
+ * @default true
140
+ */
141
+ autoCreateIndices?: boolean;
142
+ /**
143
+ * Refresh strategy for write operations
144
+ * - true: Refresh immediately (slower, good for testing)
145
+ * - false: Refresh in background (faster, eventual consistency)
146
+ * - 'wait_for': Wait for refresh (balanced)
147
+ * @default false
148
+ */
149
+ refresh?: boolean | "wait_for";
150
+ }
151
+ /**
152
+ * OpenSearch persistence adapter
153
+ *
154
+ * Stores sessions and messages as documents in OpenSearch indices.
155
+ * Compatible with OpenSearch 1.x, 2.x and Elasticsearch 7.x.
156
+ */
157
+ export declare class OpenSearchAdapter implements PersistenceAdapter {
158
+ readonly sessionRepository: SessionRepository;
159
+ readonly messageRepository: MessageRepository;
160
+ private readonly client;
161
+ private readonly sessionIndex;
162
+ private readonly messageIndex;
163
+ private readonly autoCreateIndices;
164
+ private readonly refresh;
165
+ constructor(client: OpenSearchClient, options?: OpenSearchAdapterOptions);
166
+ initialize(): Promise<void>;
167
+ disconnect(): Promise<void>;
168
+ }
169
+ //# sourceMappingURL=OpenSearchAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenSearchAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/OpenSearchAdapter.ts"],"names":[],"mappings":"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"}