@falai/agent 3.4.3 → 3.4.4

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 (110) hide show
  1. package/dist/cjs/adapters/MemoryAdapter.d.ts +47 -0
  2. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -0
  3. package/dist/cjs/adapters/MemoryAdapter.js +208 -0
  4. package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
  5. package/dist/cjs/adapters/MongoAdapter.d.ts +97 -0
  6. package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -0
  7. package/dist/cjs/adapters/MongoAdapter.js +200 -0
  8. package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
  9. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +169 -0
  10. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -0
  11. package/dist/cjs/adapters/OpenSearchAdapter.js +475 -0
  12. package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
  13. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +85 -0
  14. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  15. package/dist/cjs/adapters/PostgreSQLAdapter.js +312 -0
  16. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
  17. package/dist/cjs/adapters/PrismaAdapter.d.ts +115 -0
  18. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -0
  19. package/dist/cjs/adapters/PrismaAdapter.js +410 -0
  20. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
  21. package/dist/cjs/adapters/RedisAdapter.d.ts +72 -0
  22. package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -0
  23. package/dist/cjs/adapters/RedisAdapter.js +290 -0
  24. package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
  25. package/dist/cjs/adapters/SQLiteAdapter.d.ts +86 -0
  26. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -0
  27. package/dist/cjs/adapters/SQLiteAdapter.js +341 -0
  28. package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
  29. package/dist/cjs/adapters/index.d.ts +17 -0
  30. package/dist/cjs/adapters/index.d.ts.map +1 -0
  31. package/dist/cjs/adapters/index.js +21 -0
  32. package/dist/cjs/adapters/index.js.map +1 -0
  33. package/dist/cjs/adapters/sessionRow.d.ts +22 -0
  34. package/dist/cjs/adapters/sessionRow.d.ts.map +1 -0
  35. package/dist/cjs/adapters/sessionRow.js +52 -0
  36. package/dist/cjs/adapters/sessionRow.js.map +1 -0
  37. package/dist/cjs/constants/index.d.ts +1 -0
  38. package/dist/cjs/constants/index.d.ts.map +1 -0
  39. package/dist/cjs/constants/index.js +4 -0
  40. package/dist/cjs/constants/index.js.map +1 -0
  41. package/dist/cjs/core/Agent.d.ts +382 -0
  42. package/dist/cjs/core/Agent.d.ts.map +1 -0
  43. package/dist/cjs/core/Agent.js +1198 -0
  44. package/dist/cjs/core/Agent.js.map +1 -0
  45. package/dist/cjs/core/ResponseModal.d.ts +305 -0
  46. package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
  47. package/dist/cjs/core/ResponseModal.js +1414 -0
  48. package/dist/cjs/core/ResponseModal.js.map +1 -0
  49. package/dist/cjs/core/ToolLoopExecutor.d.ts +133 -0
  50. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -0
  51. package/dist/cjs/core/ToolLoopExecutor.js +568 -0
  52. package/dist/cjs/core/ToolLoopExecutor.js.map +1 -0
  53. package/dist/cjs/core/createAgent.d.ts +35 -0
  54. package/dist/cjs/core/createAgent.d.ts.map +1 -0
  55. package/dist/cjs/core/createAgent.js +39 -0
  56. package/dist/cjs/core/createAgent.js.map +1 -0
  57. package/dist/cjs/index.d.ts +61 -0
  58. package/dist/cjs/index.d.ts.map +1 -0
  59. package/dist/cjs/index.js +113 -0
  60. package/dist/cjs/index.js.map +1 -0
  61. package/dist/cjs/package.json +1 -0
  62. package/dist/cjs/providers/AnthropicProvider.d.ts +46 -0
  63. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -0
  64. package/dist/cjs/providers/AnthropicProvider.js +50 -0
  65. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  66. package/dist/cjs/providers/DeepSeekProvider.d.ts +47 -0
  67. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -0
  68. package/dist/cjs/providers/DeepSeekProvider.js +42 -0
  69. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -0
  70. package/dist/cjs/providers/FallbackAiProvider.d.ts +26 -0
  71. package/dist/cjs/providers/FallbackAiProvider.d.ts.map +1 -0
  72. package/dist/cjs/providers/FallbackAiProvider.js +54 -0
  73. package/dist/cjs/providers/FallbackAiProvider.js.map +1 -0
  74. package/dist/cjs/providers/GeminiProvider.d.ts +51 -0
  75. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -0
  76. package/dist/cjs/providers/GeminiProvider.js +53 -0
  77. package/dist/cjs/providers/GeminiProvider.js.map +1 -0
  78. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +80 -0
  79. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -0
  80. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +89 -0
  81. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -0
  82. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +61 -0
  83. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -0
  84. package/dist/cjs/providers/OpenAICompatibleProvider.js +58 -0
  85. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -0
  86. package/dist/cjs/providers/OpenAIProvider.d.ts +40 -0
  87. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -0
  88. package/dist/cjs/providers/OpenAIProvider.js +42 -0
  89. package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
  90. package/dist/cjs/providers/OpenRouterProvider.d.ts +56 -0
  91. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -0
  92. package/dist/cjs/providers/OpenRouterProvider.js +45 -0
  93. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
  94. package/dist/cjs/providers/ProviderAdapter.d.ts +126 -0
  95. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -0
  96. package/dist/cjs/providers/ProviderAdapter.js +313 -0
  97. package/dist/cjs/providers/ProviderAdapter.js.map +1 -0
  98. package/dist/cjs/providers/ZaiProvider.d.ts +45 -0
  99. package/dist/cjs/providers/ZaiProvider.d.ts.map +1 -0
  100. package/dist/cjs/providers/ZaiProvider.js +51 -0
  101. package/dist/cjs/providers/ZaiProvider.js.map +1 -0
  102. package/dist/cjs/providers/index.d.ts +26 -0
  103. package/dist/cjs/providers/index.d.ts.map +1 -0
  104. package/dist/cjs/providers/index.js +30 -0
  105. package/dist/cjs/providers/index.js.map +1 -0
  106. package/dist/cjs/utils/streamingMessage.d.ts +48 -0
  107. package/dist/cjs/utils/streamingMessage.d.ts.map +1 -0
  108. package/dist/cjs/utils/streamingMessage.js +210 -0
  109. package/dist/cjs/utils/streamingMessage.js.map +1 -0
  110. package/package.json +1 -1
@@ -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/index.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;
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<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
158
+ readonly sessionRepository: SessionRepository<TData>;
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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"}
@@ -0,0 +1,475 @@
1
+ "use strict";
2
+ /**
3
+ * OpenSearch Persistence Adapter
4
+ *
5
+ * Provides persistence for sessions and messages using OpenSearch.
6
+ * Also compatible with Elasticsearch 7.x (not tested with newer versions).
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { Client } from '@opensearch-project/opensearch';
11
+ * import { OpenSearchAdapter } from '@falai/agent';
12
+ *
13
+ * const client = new Client({
14
+ * node: 'https://localhost:9200',
15
+ * auth: {
16
+ * username: 'admin',
17
+ * password: 'admin'
18
+ * }
19
+ * });
20
+ *
21
+ * const adapter = new OpenSearchAdapter(client, {
22
+ * indices: {
23
+ * sessions: 'agent_sessions',
24
+ * messages: 'agent_messages'
25
+ * },
26
+ * autoCreateIndices: true
27
+ * });
28
+ *
29
+ * const agent = new Agent({
30
+ * model: provider,
31
+ * persistence: { adapter }
32
+ * });
33
+ * ```
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.OpenSearchAdapter = void 0;
37
+ const clone_js_1 = require("../utils/clone.js");
38
+ const index_js_1 = require("../utils/index.js");
39
+ const errors_js_1 = require("../types/errors.js");
40
+ /**
41
+ * OpenSearch persistence adapter
42
+ *
43
+ * Stores sessions and messages as documents in OpenSearch indices.
44
+ * Compatible with OpenSearch 1.x, 2.x and Elasticsearch 7.x.
45
+ */
46
+ class OpenSearchAdapter {
47
+ constructor(client, options = {}) {
48
+ this.client = client;
49
+ this.sessionIndex = options.indices?.sessions || "agent_sessions";
50
+ this.messageIndex = options.indices?.messages || "agent_messages";
51
+ this.autoCreateIndices = options.autoCreateIndices ?? true;
52
+ this.refresh = options.refresh ?? false;
53
+ this.sessionRepository = new OpenSearchSessionRepository(this.client, this.sessionIndex, this.refresh);
54
+ this.messageRepository = new OpenSearchMessageRepository(this.client, this.messageIndex, this.refresh);
55
+ }
56
+ async initialize() {
57
+ if (!this.autoCreateIndices) {
58
+ return;
59
+ }
60
+ // Create sessions index with mappings
61
+ const sessionExists = await this.client.indices.exists({
62
+ index: this.sessionIndex,
63
+ });
64
+ if (!sessionExists.body) {
65
+ await this.client.indices.create({
66
+ index: this.sessionIndex,
67
+ body: {
68
+ mappings: {
69
+ properties: {
70
+ id: { type: "keyword" },
71
+ userId: { type: "keyword" },
72
+ agentName: { type: "keyword" },
73
+ status: { type: "keyword" },
74
+ currentFlow: { type: "keyword" },
75
+ currentStep: { type: "keyword" },
76
+ collectedData: { type: "object", enabled: false },
77
+ pendingDirective: { type: "object", enabled: false },
78
+ signals: { type: "object", enabled: false },
79
+ messageCount: { type: "integer" },
80
+ version: { type: "integer" },
81
+ createdAt: { type: "date" },
82
+ updatedAt: { type: "date" },
83
+ lastMessageAt: { type: "date" },
84
+ completedAt: { type: "date" },
85
+ },
86
+ },
87
+ },
88
+ });
89
+ }
90
+ // Create messages index with mappings
91
+ const messageExists = await this.client.indices.exists({
92
+ index: this.messageIndex,
93
+ });
94
+ if (!messageExists.body) {
95
+ await this.client.indices.create({
96
+ index: this.messageIndex,
97
+ body: {
98
+ mappings: {
99
+ properties: {
100
+ id: { type: "keyword" },
101
+ sessionId: { type: "keyword" },
102
+ userId: { type: "keyword" },
103
+ role: { type: "keyword" },
104
+ content: { type: "text" },
105
+ flow: { type: "keyword" },
106
+ step: { type: "keyword" },
107
+ toolCalls: { type: "object", enabled: false },
108
+ event: { type: "object", enabled: false },
109
+ createdAt: { type: "date" },
110
+ },
111
+ },
112
+ },
113
+ });
114
+ }
115
+ }
116
+ async disconnect() {
117
+ // OpenSearch client doesn't have a close method like some other clients
118
+ // Connection pooling is managed automatically
119
+ await Promise.resolve();
120
+ }
121
+ }
122
+ exports.OpenSearchAdapter = OpenSearchAdapter;
123
+ /**
124
+ * OpenSearch-based session repository implementation
125
+ */
126
+ class OpenSearchSessionRepository {
127
+ constructor(client, index, refresh) {
128
+ this.client = client;
129
+ this.index = index;
130
+ this.refresh = refresh;
131
+ }
132
+ async create(data) {
133
+ const id = data.id || (0, index_js_1.createSessionId)();
134
+ const now = new Date();
135
+ const session = {
136
+ ...data,
137
+ id,
138
+ status: data.status || "active",
139
+ messageCount: data.messageCount || 0,
140
+ version: data.version ?? 1,
141
+ createdAt: now,
142
+ updatedAt: now,
143
+ };
144
+ const clonedSession = (0, clone_js_1.cloneDeep)(session);
145
+ await this.client.index({
146
+ index: this.index,
147
+ id,
148
+ body: clonedSession,
149
+ refresh: true, // Refresh to make the document immediately available for search
150
+ });
151
+ return session;
152
+ }
153
+ async findById(id) {
154
+ try {
155
+ const response = await this.client.get({
156
+ index: this.index,
157
+ id,
158
+ });
159
+ return this.deserializeSession(response.body._source);
160
+ }
161
+ catch (error) {
162
+ if (this.isNotFoundError(error)) {
163
+ return null;
164
+ }
165
+ throw error;
166
+ }
167
+ }
168
+ async findActiveByUserId(userId) {
169
+ const response = await this.client.search({
170
+ index: this.index,
171
+ body: {
172
+ query: {
173
+ bool: {
174
+ must: [{ term: { userId } }, { term: { status: "active" } }],
175
+ },
176
+ },
177
+ sort: [{ createdAt: { order: "desc" } }],
178
+ size: 1,
179
+ },
180
+ });
181
+ const hits = response.body.hits.hits;
182
+ if (hits.length === 0) {
183
+ return null;
184
+ }
185
+ return this.deserializeSession(hits[0]._source);
186
+ }
187
+ async findByUserId(userId, limit = 100) {
188
+ const response = await this.client.search({
189
+ index: this.index,
190
+ body: {
191
+ query: {
192
+ term: { userId },
193
+ },
194
+ sort: [{ createdAt: { order: "desc" } }],
195
+ size: limit,
196
+ },
197
+ });
198
+ return response.body.hits.hits.map((hit) => this.deserializeSession(hit._source));
199
+ }
200
+ async update(id, updates, options) {
201
+ // Check-then-set on the stored document — not fully atomic across writers
202
+ const existing = await this.findById(id);
203
+ if (!existing)
204
+ return null;
205
+ if (options?.expectedVersion !== undefined &&
206
+ existing.version !== undefined &&
207
+ existing.version !== options.expectedVersion) {
208
+ throw new errors_js_1.SessionConflictError(id, options.expectedVersion, existing.version);
209
+ }
210
+ const doc = {
211
+ ...updates,
212
+ version: (existing.version ?? options?.expectedVersion ?? 0) + 1,
213
+ updatedAt: new Date().toISOString(),
214
+ };
215
+ // Serialize dates
216
+ if (updates.completedAt) {
217
+ doc.completedAt = updates.completedAt.toISOString();
218
+ }
219
+ if (updates.lastMessageAt) {
220
+ doc.lastMessageAt = updates.lastMessageAt.toISOString();
221
+ }
222
+ await this.client.update({
223
+ index: this.index,
224
+ id,
225
+ body: { doc },
226
+ refresh: this.refresh,
227
+ });
228
+ return await this.findById(id);
229
+ }
230
+ async updateStatus(id, status, completedAt) {
231
+ const doc = {
232
+ status,
233
+ updatedAt: new Date().toISOString(),
234
+ };
235
+ if (completedAt) {
236
+ doc.completedAt = completedAt.toISOString();
237
+ }
238
+ await this.client.update({
239
+ index: this.index,
240
+ id,
241
+ body: { doc },
242
+ refresh: this.refresh,
243
+ });
244
+ return await this.findById(id);
245
+ }
246
+ async updateCollectedData(id, collectedData) {
247
+ await this.client.update({
248
+ index: this.index,
249
+ id,
250
+ body: {
251
+ doc: {
252
+ collectedData,
253
+ updatedAt: new Date().toISOString(),
254
+ },
255
+ },
256
+ refresh: this.refresh,
257
+ });
258
+ return await this.findById(id);
259
+ }
260
+ async updateFlowStep(id, flow, step) {
261
+ const doc = {
262
+ updatedAt: new Date().toISOString(),
263
+ };
264
+ if (flow !== undefined) {
265
+ doc.currentFlow = flow;
266
+ }
267
+ if (step !== undefined) {
268
+ doc.currentStep = step;
269
+ }
270
+ await this.client.update({
271
+ index: this.index,
272
+ id,
273
+ body: { doc },
274
+ refresh: this.refresh,
275
+ });
276
+ return await this.findById(id);
277
+ }
278
+ async incrementMessageCount(id) {
279
+ const session = await this.findById(id);
280
+ if (!session) {
281
+ return null;
282
+ }
283
+ const newCount = (session.messageCount || 0) + 1;
284
+ await this.client.update({
285
+ index: this.index,
286
+ id,
287
+ body: {
288
+ doc: {
289
+ messageCount: newCount,
290
+ lastMessageAt: new Date().toISOString(),
291
+ updatedAt: new Date().toISOString(),
292
+ },
293
+ },
294
+ refresh: this.refresh,
295
+ });
296
+ return await this.findById(id);
297
+ }
298
+ async delete(id) {
299
+ try {
300
+ await this.client.delete({
301
+ index: this.index,
302
+ id,
303
+ refresh: this.refresh,
304
+ });
305
+ return true;
306
+ }
307
+ catch (error) {
308
+ if (this.isNotFoundError(error)) {
309
+ return false;
310
+ }
311
+ throw error;
312
+ }
313
+ }
314
+ deserializeSession(doc) {
315
+ return {
316
+ id: doc.id,
317
+ userId: doc.userId,
318
+ agentName: doc.agentName,
319
+ status: doc.status,
320
+ currentFlow: doc.currentFlow,
321
+ currentStep: doc.currentStep,
322
+ collectedData: doc.collectedData,
323
+ messageCount: doc.messageCount || 0,
324
+ version: doc.version ?? undefined,
325
+ createdAt: new Date(doc.createdAt),
326
+ updatedAt: new Date(doc.updatedAt),
327
+ lastMessageAt: doc.lastMessageAt
328
+ ? new Date(doc.lastMessageAt)
329
+ : undefined,
330
+ completedAt: doc.completedAt
331
+ ? new Date(doc.completedAt)
332
+ : undefined,
333
+ };
334
+ }
335
+ isNotFoundError(error) {
336
+ return (typeof error === "object" &&
337
+ error !== null &&
338
+ "statusCode" in error &&
339
+ error.statusCode === 404);
340
+ }
341
+ }
342
+ /**
343
+ * OpenSearch-based message repository implementation
344
+ */
345
+ class OpenSearchMessageRepository {
346
+ constructor(client, index, refresh) {
347
+ this.client = client;
348
+ this.index = index;
349
+ this.refresh = refresh;
350
+ }
351
+ async create(data) {
352
+ const id = `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`;
353
+ const now = new Date();
354
+ const message = {
355
+ id,
356
+ ...data,
357
+ createdAt: now,
358
+ };
359
+ await this.client.index({
360
+ index: this.index,
361
+ id,
362
+ body: this.serializeMessage(message),
363
+ refresh: this.refresh,
364
+ });
365
+ return message;
366
+ }
367
+ async findById(id) {
368
+ try {
369
+ const response = await this.client.get({
370
+ index: this.index,
371
+ id,
372
+ });
373
+ return this.deserializeMessage(response.body._source);
374
+ }
375
+ catch (error) {
376
+ if (this.isNotFoundError(error)) {
377
+ return null;
378
+ }
379
+ throw error;
380
+ }
381
+ }
382
+ async findBySessionId(sessionId, limit = 1000) {
383
+ const response = await this.client.search({
384
+ index: this.index,
385
+ body: {
386
+ query: {
387
+ term: { sessionId },
388
+ },
389
+ sort: [{ createdAt: { order: "asc" } }],
390
+ size: limit,
391
+ },
392
+ });
393
+ return response.body.hits.hits.map((hit) => this.deserializeMessage(hit._source));
394
+ }
395
+ async findByUserId(userId, limit = 100) {
396
+ const response = await this.client.search({
397
+ index: this.index,
398
+ body: {
399
+ query: {
400
+ term: { userId },
401
+ },
402
+ sort: [{ createdAt: { order: "desc" } }],
403
+ size: limit,
404
+ },
405
+ });
406
+ return response.body.hits.hits.map((hit) => this.deserializeMessage(hit._source));
407
+ }
408
+ async delete(id) {
409
+ try {
410
+ await this.client.delete({
411
+ index: this.index,
412
+ id,
413
+ refresh: this.refresh,
414
+ });
415
+ return true;
416
+ }
417
+ catch (error) {
418
+ if (this.isNotFoundError(error)) {
419
+ return false;
420
+ }
421
+ throw error;
422
+ }
423
+ }
424
+ async deleteBySessionId(sessionId) {
425
+ const response = await this.client.deleteByQuery({
426
+ index: this.index,
427
+ body: {
428
+ query: {
429
+ term: { sessionId },
430
+ },
431
+ },
432
+ refresh: this.refresh === "wait_for" ? false : this.refresh,
433
+ });
434
+ return response.body.deleted;
435
+ }
436
+ async deleteByUserId(userId) {
437
+ const response = await this.client.deleteByQuery({
438
+ index: this.index,
439
+ body: {
440
+ query: {
441
+ term: { userId },
442
+ },
443
+ },
444
+ refresh: this.refresh === "wait_for" ? false : this.refresh,
445
+ });
446
+ return response.body.deleted;
447
+ }
448
+ serializeMessage(message) {
449
+ return {
450
+ ...message,
451
+ createdAt: message.createdAt.toISOString(),
452
+ };
453
+ }
454
+ deserializeMessage(doc) {
455
+ return {
456
+ id: doc.id,
457
+ sessionId: doc.sessionId,
458
+ userId: doc.userId,
459
+ role: doc.role,
460
+ content: doc.content,
461
+ flow: doc.flow,
462
+ step: doc.step,
463
+ toolCalls: doc.toolCalls,
464
+ event: doc.event,
465
+ createdAt: new Date(doc.createdAt),
466
+ };
467
+ }
468
+ isNotFoundError(error) {
469
+ return (typeof error === "object" &&
470
+ error !== null &&
471
+ "statusCode" in error &&
472
+ error.statusCode === 404);
473
+ }
474
+ }
475
+ //# sourceMappingURL=OpenSearchAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenSearchAdapter.js","sourceRoot":"","sources":["../../../src/adapters/OpenSearchAdapter.ts"],"names":[],"mappings":"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"}