@falai/agent 3.4.3 → 3.4.5
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.
- package/dist/cjs/adapters/MemoryAdapter.d.ts +47 -0
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js +208 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.d.ts +97 -0
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js +200 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts +169 -0
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js +475 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +85 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js +312 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/PrismaAdapter.js +410 -0
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/adapters/RedisAdapter.d.ts +72 -0
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/RedisAdapter.js +290 -0
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +86 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js +341 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.d.ts +17 -0
- package/dist/cjs/adapters/index.d.ts.map +1 -0
- package/dist/cjs/adapters/index.js +21 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/sessionRow.d.ts +22 -0
- package/dist/cjs/adapters/sessionRow.d.ts.map +1 -0
- package/dist/cjs/adapters/sessionRow.js +52 -0
- package/dist/cjs/adapters/sessionRow.js.map +1 -0
- package/dist/cjs/constants/index.d.ts +1 -0
- package/dist/cjs/constants/index.d.ts.map +1 -0
- package/dist/cjs/constants/index.js +4 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/core/Agent.d.ts +382 -0
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/core/Agent.js +1198 -0
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/ResponseModal.d.ts +305 -0
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/core/ResponseModal.js +1414 -0
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/cjs/core/ToolLoopExecutor.d.ts +133 -0
- package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -0
- package/dist/cjs/core/ToolLoopExecutor.js +568 -0
- package/dist/cjs/core/ToolLoopExecutor.js.map +1 -0
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/index.d.ts +61 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +113 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/providers/AnthropicProvider.d.ts +46 -0
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/providers/AnthropicProvider.js +50 -0
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/cjs/providers/DeepSeekProvider.d.ts +47 -0
- package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -0
- package/dist/cjs/providers/DeepSeekProvider.js +42 -0
- package/dist/cjs/providers/DeepSeekProvider.js.map +1 -0
- package/dist/cjs/providers/FallbackAiProvider.d.ts +26 -0
- package/dist/cjs/providers/FallbackAiProvider.d.ts.map +1 -0
- package/dist/cjs/providers/FallbackAiProvider.js +54 -0
- package/dist/cjs/providers/FallbackAiProvider.js.map +1 -0
- package/dist/cjs/providers/GeminiProvider.d.ts +51 -0
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/providers/GeminiProvider.js +53 -0
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +80 -0
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -0
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +89 -0
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +61 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.js +58 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -0
- package/dist/cjs/providers/OpenAIProvider.d.ts +40 -0
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/providers/OpenAIProvider.js +42 -0
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/providers/OpenRouterProvider.d.ts +56 -0
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/providers/OpenRouterProvider.js +45 -0
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/ProviderAdapter.d.ts +126 -0
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -0
- package/dist/cjs/providers/ProviderAdapter.js +313 -0
- package/dist/cjs/providers/ProviderAdapter.js.map +1 -0
- package/dist/cjs/providers/ZaiProvider.d.ts +45 -0
- package/dist/cjs/providers/ZaiProvider.d.ts.map +1 -0
- package/dist/cjs/providers/ZaiProvider.js +51 -0
- package/dist/cjs/providers/ZaiProvider.js.map +1 -0
- package/dist/cjs/providers/index.d.ts +26 -0
- package/dist/cjs/providers/index.d.ts.map +1 -0
- package/dist/cjs/providers/index.js +30 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/utils/streamingMessage.d.ts +48 -0
- package/dist/cjs/utils/streamingMessage.d.ts.map +1 -0
- package/dist/cjs/utils/streamingMessage.js +210 -0
- package/dist/cjs/utils/streamingMessage.js.map +1 -0
- package/package.json +2 -2
|
@@ -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 { MessageData, MessageRepository, PersistenceAdapter, SessionData, SessionRepository } from "../types/index.js";
|
|
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
|
+
* provider: provider,
|
|
22
|
+
* persistence: {
|
|
23
|
+
* adapter: new MemoryAdapter(),
|
|
24
|
+
* userId: "user_123",
|
|
25
|
+
* },
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare class MemoryAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
|
|
30
|
+
readonly sessionRepository: SessionRepository<TData>;
|
|
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<TData>[];
|
|
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,EAEV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EAIlB,MAAM,mBAAmB,CAAC;AAK3B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,kBAAkB,CAAC,KAAK,CAAC;IAC9F,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAA2B;;IAU3C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI;QACb,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;KACzB;CAMF"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory adapter for persistence
|
|
4
|
+
* In-memory storage for testing and development (no database required)
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MemoryAdapter = void 0;
|
|
8
|
+
const errors_js_1 = require("../types/errors.js");
|
|
9
|
+
const clone_js_1 = require("../utils/clone.js");
|
|
10
|
+
const index_js_1 = require("../utils/index.js");
|
|
11
|
+
/**
|
|
12
|
+
* Memory Adapter - Provider-style API for in-memory persistence
|
|
13
|
+
*
|
|
14
|
+
* Perfect for:
|
|
15
|
+
* - Testing
|
|
16
|
+
* - Development
|
|
17
|
+
* - Prototyping
|
|
18
|
+
* - No database setup required
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import { Agent, MemoryAdapter } from '@falai/agent';
|
|
23
|
+
*
|
|
24
|
+
* const agent = new Agent({
|
|
25
|
+
* name: "My Agent",
|
|
26
|
+
* provider: provider,
|
|
27
|
+
* persistence: {
|
|
28
|
+
* adapter: new MemoryAdapter(),
|
|
29
|
+
* userId: "user_123",
|
|
30
|
+
* },
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
class MemoryAdapter {
|
|
35
|
+
constructor() {
|
|
36
|
+
this.sessions = new Map();
|
|
37
|
+
this.messages = new Map();
|
|
38
|
+
this.sessionRepository = new MemorySessionRepository(this.sessions);
|
|
39
|
+
this.messageRepository = new MemoryMessageRepository(this.messages);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Clear all data (useful for testing)
|
|
43
|
+
*/
|
|
44
|
+
clear() {
|
|
45
|
+
this.sessions.clear();
|
|
46
|
+
this.messages.clear();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get data snapshot (useful for debugging)
|
|
50
|
+
*/
|
|
51
|
+
getSnapshot() {
|
|
52
|
+
return {
|
|
53
|
+
sessions: Array.from(this.sessions.values()),
|
|
54
|
+
messages: Array.from(this.messages.values()),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.MemoryAdapter = MemoryAdapter;
|
|
59
|
+
/**
|
|
60
|
+
* Memory Session Repository
|
|
61
|
+
*/
|
|
62
|
+
class MemorySessionRepository {
|
|
63
|
+
constructor(sessions) {
|
|
64
|
+
this.sessions = sessions;
|
|
65
|
+
}
|
|
66
|
+
create(data) {
|
|
67
|
+
const id = data.id || (0, index_js_1.createSessionId)();
|
|
68
|
+
const now = new Date();
|
|
69
|
+
const session = {
|
|
70
|
+
...data,
|
|
71
|
+
id,
|
|
72
|
+
status: data.status || "active",
|
|
73
|
+
messageCount: data.messageCount || 0,
|
|
74
|
+
version: data.version ?? 1,
|
|
75
|
+
createdAt: now,
|
|
76
|
+
updatedAt: now,
|
|
77
|
+
};
|
|
78
|
+
this.sessions.set(id, (0, clone_js_1.cloneDeep)(session));
|
|
79
|
+
return Promise.resolve((0, clone_js_1.cloneDeep)(session));
|
|
80
|
+
}
|
|
81
|
+
findById(id) {
|
|
82
|
+
const session = this.sessions.get(id);
|
|
83
|
+
return Promise.resolve(session ? (0, clone_js_1.cloneDeep)(session) : null);
|
|
84
|
+
}
|
|
85
|
+
async findActiveByUserId(userId) {
|
|
86
|
+
const sessions = Array.from(this.sessions.values())
|
|
87
|
+
.filter((s) => s.userId === userId && s.status === "active")
|
|
88
|
+
.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
89
|
+
return Promise.resolve(sessions[0] || null);
|
|
90
|
+
}
|
|
91
|
+
async findByUserId(userId, limit = 100) {
|
|
92
|
+
const sessions = Array.from(this.sessions.values())
|
|
93
|
+
.filter((s) => s.userId === userId)
|
|
94
|
+
.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
|
|
95
|
+
.slice(0, limit);
|
|
96
|
+
return Promise.resolve(sessions);
|
|
97
|
+
}
|
|
98
|
+
async update(id, data, options) {
|
|
99
|
+
const existing = this.sessions.get(id);
|
|
100
|
+
if (!existing)
|
|
101
|
+
return null;
|
|
102
|
+
// Compare-and-swap: rows without a stored version (pre-2.4) are accepted
|
|
103
|
+
if (options?.expectedVersion !== undefined &&
|
|
104
|
+
existing.version !== undefined &&
|
|
105
|
+
existing.version !== options.expectedVersion) {
|
|
106
|
+
throw new errors_js_1.SessionConflictError(id, options.expectedVersion, existing.version);
|
|
107
|
+
}
|
|
108
|
+
const updated = {
|
|
109
|
+
...existing,
|
|
110
|
+
...data,
|
|
111
|
+
version: (existing.version ?? options?.expectedVersion ?? 0) + 1,
|
|
112
|
+
updatedAt: new Date(),
|
|
113
|
+
};
|
|
114
|
+
this.sessions.set(id, (0, clone_js_1.cloneDeep)(updated));
|
|
115
|
+
return Promise.resolve((0, clone_js_1.cloneDeep)(updated));
|
|
116
|
+
}
|
|
117
|
+
// Derived updaters route through update() so every state write shares one
|
|
118
|
+
// semantic across adapters: version bump + updatedAt refresh (the SQL
|
|
119
|
+
// adapters delegate to their update() the same way).
|
|
120
|
+
async updateStatus(id, status, completedAt) {
|
|
121
|
+
// An undefined completedAt must be omitted, not spread — update() writes
|
|
122
|
+
// whatever keys it receives, and SQL skips undefined columns.
|
|
123
|
+
return this.update(id, completedAt ? { status, completedAt } : { status });
|
|
124
|
+
}
|
|
125
|
+
async updateCollectedData(id, collectedData) {
|
|
126
|
+
return this.update(id, { collectedData });
|
|
127
|
+
}
|
|
128
|
+
async updateFlowStep(id, flow, step) {
|
|
129
|
+
// Mirror SQL's conditional column assembly: only defined values are written.
|
|
130
|
+
return this.update(id, {
|
|
131
|
+
...(flow !== undefined && { currentFlow: flow }),
|
|
132
|
+
...(step !== undefined && { currentStep: step }),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
async incrementMessageCount(id) {
|
|
136
|
+
// Bookkeeping write, deliberately NOT routed through update(): count bumps
|
|
137
|
+
// run alongside saveSessionState's version CAS every turn, so they must not
|
|
138
|
+
// move `version` (matches the SQL adapters' dedicated statement).
|
|
139
|
+
const session = this.sessions.get(id);
|
|
140
|
+
if (!session)
|
|
141
|
+
return Promise.resolve(null);
|
|
142
|
+
const updated = {
|
|
143
|
+
...session,
|
|
144
|
+
messageCount: (session.messageCount || 0) + 1,
|
|
145
|
+
lastMessageAt: new Date(),
|
|
146
|
+
updatedAt: new Date(),
|
|
147
|
+
};
|
|
148
|
+
this.sessions.set(id, (0, clone_js_1.cloneDeep)(updated));
|
|
149
|
+
return Promise.resolve((0, clone_js_1.cloneDeep)(updated));
|
|
150
|
+
}
|
|
151
|
+
async delete(id) {
|
|
152
|
+
const result = this.sessions.delete(id);
|
|
153
|
+
return Promise.resolve(result);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Memory Message Repository
|
|
158
|
+
*/
|
|
159
|
+
class MemoryMessageRepository {
|
|
160
|
+
constructor(messages) {
|
|
161
|
+
this.messages = messages;
|
|
162
|
+
}
|
|
163
|
+
async create(data) {
|
|
164
|
+
const id = `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
165
|
+
const message = {
|
|
166
|
+
...data,
|
|
167
|
+
id,
|
|
168
|
+
createdAt: new Date(),
|
|
169
|
+
};
|
|
170
|
+
// Clone on store and on return so callers can't mutate the stored row —
|
|
171
|
+
// same isolation the session repository provides.
|
|
172
|
+
this.messages.set(id, (0, clone_js_1.cloneDeep)(message));
|
|
173
|
+
return Promise.resolve((0, clone_js_1.cloneDeep)(message));
|
|
174
|
+
}
|
|
175
|
+
async findById(id) {
|
|
176
|
+
const message = this.messages.get(id) || null;
|
|
177
|
+
return Promise.resolve(message);
|
|
178
|
+
}
|
|
179
|
+
async findBySessionId(sessionId, limit = 1000) {
|
|
180
|
+
const messages = Array.from(this.messages.values())
|
|
181
|
+
.filter((m) => m.sessionId === sessionId)
|
|
182
|
+
.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime())
|
|
183
|
+
.slice(0, limit);
|
|
184
|
+
return Promise.resolve(messages);
|
|
185
|
+
}
|
|
186
|
+
async findByUserId(userId, limit = 100) {
|
|
187
|
+
const messages = Array.from(this.messages.values())
|
|
188
|
+
.filter((m) => m.userId === userId)
|
|
189
|
+
.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
|
|
190
|
+
.slice(0, limit);
|
|
191
|
+
return Promise.resolve(messages);
|
|
192
|
+
}
|
|
193
|
+
async delete(id) {
|
|
194
|
+
const result = this.messages.delete(id);
|
|
195
|
+
return Promise.resolve(result);
|
|
196
|
+
}
|
|
197
|
+
async deleteBySessionId(sessionId) {
|
|
198
|
+
const toDelete = Array.from(this.messages.values()).filter((m) => m.sessionId === sessionId);
|
|
199
|
+
toDelete.forEach((m) => this.messages.delete(m.id));
|
|
200
|
+
return Promise.resolve(toDelete.length);
|
|
201
|
+
}
|
|
202
|
+
async deleteByUserId(userId) {
|
|
203
|
+
const toDelete = Array.from(this.messages.values()).filter((m) => m.userId === userId);
|
|
204
|
+
toDelete.forEach((m) => this.messages.delete(m.id));
|
|
205
|
+
return Promise.resolve(toDelete.length);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# 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 { MessageRepository, PersistenceAdapter, SessionRepository } from "../types/index.js";
|
|
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
|
+
* provider: 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<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
|
|
90
|
+
readonly sessionRepository: SessionRepository<TData>;
|
|
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,EAEV,iBAAiB,EACjB,kBAAkB,EAElB,iBAAiB,EAKlB,MAAM,mBAAmB,CAAC;AAI3B;;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,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,kBAAkB,CAAC,KAAK,CAAC;IAC7F,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,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,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MongoDB adapter for persistence
|
|
4
|
+
* Document-based storage with flexible schema
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MongoAdapter = void 0;
|
|
8
|
+
const errors_js_1 = require("../types/errors.js");
|
|
9
|
+
const index_js_1 = require("../utils/index.js");
|
|
10
|
+
/**
|
|
11
|
+
* MongoDB Adapter - Provider-style API for MongoDB persistence
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { MongoClient } from 'mongodb';
|
|
16
|
+
* import { Agent, MongoAdapter } from '@falai/agent';
|
|
17
|
+
*
|
|
18
|
+
* const client = new MongoClient('mongodb://localhost:27017');
|
|
19
|
+
* await client.connect();
|
|
20
|
+
*
|
|
21
|
+
* const agent = new Agent({
|
|
22
|
+
* name: "My Agent",
|
|
23
|
+
* provider: provider,
|
|
24
|
+
* persistence: {
|
|
25
|
+
* adapter: new MongoAdapter({
|
|
26
|
+
* client,
|
|
27
|
+
* databaseName: 'myapp',
|
|
28
|
+
* }),
|
|
29
|
+
* userId: "user_123",
|
|
30
|
+
* },
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
class MongoAdapter {
|
|
35
|
+
constructor(options) {
|
|
36
|
+
this.client = options.client;
|
|
37
|
+
this.db = options.client.db(options.databaseName);
|
|
38
|
+
const sessionCollection = options.collections?.sessions || "agent_sessions";
|
|
39
|
+
const messageCollection = options.collections?.messages || "agent_messages";
|
|
40
|
+
this.sessionRepository = new MongoSessionRepository(this.db.collection(sessionCollection));
|
|
41
|
+
this.messageRepository = new MongoMessageRepository(this.db.collection(messageCollection));
|
|
42
|
+
}
|
|
43
|
+
async disconnect() {
|
|
44
|
+
await this.client.close();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.MongoAdapter = MongoAdapter;
|
|
48
|
+
/**
|
|
49
|
+
* MongoDB Session Repository
|
|
50
|
+
*/
|
|
51
|
+
class MongoSessionRepository {
|
|
52
|
+
constructor(collection) {
|
|
53
|
+
this.collection = collection;
|
|
54
|
+
}
|
|
55
|
+
async create(data) {
|
|
56
|
+
const now = new Date();
|
|
57
|
+
const session = {
|
|
58
|
+
...data,
|
|
59
|
+
id: data.id ||
|
|
60
|
+
(0, index_js_1.createSessionId)(),
|
|
61
|
+
status: data.status || "active",
|
|
62
|
+
messageCount: data.messageCount || 0,
|
|
63
|
+
version: data.version ?? 1,
|
|
64
|
+
createdAt: now,
|
|
65
|
+
updatedAt: now,
|
|
66
|
+
};
|
|
67
|
+
await this.collection.insertOne(session);
|
|
68
|
+
return session;
|
|
69
|
+
}
|
|
70
|
+
async findById(id) {
|
|
71
|
+
return await this.collection.findOne({ id });
|
|
72
|
+
}
|
|
73
|
+
async findActiveByUserId(userId) {
|
|
74
|
+
return await this.collection.findOne({ userId, status: "active" });
|
|
75
|
+
}
|
|
76
|
+
async findByUserId(userId, limit = 100) {
|
|
77
|
+
return await this.collection
|
|
78
|
+
.find({ userId })
|
|
79
|
+
.sort({ createdAt: -1 })
|
|
80
|
+
.limit(limit)
|
|
81
|
+
.toArray();
|
|
82
|
+
}
|
|
83
|
+
async update(id, data, options) {
|
|
84
|
+
if (options?.expectedVersion !== undefined) {
|
|
85
|
+
const expectedVersion = options.expectedVersion;
|
|
86
|
+
// Compare-and-swap via the filter: docs without a stored version
|
|
87
|
+
// (pre-2.4) are accepted and adopt expectedVersion as their base
|
|
88
|
+
const result = await this.collection.updateOne({
|
|
89
|
+
id,
|
|
90
|
+
$or: [
|
|
91
|
+
{ version: { $exists: false } },
|
|
92
|
+
{ version: null },
|
|
93
|
+
{ version: expectedVersion },
|
|
94
|
+
],
|
|
95
|
+
}, { $set: { ...data, version: expectedVersion + 1, updatedAt: new Date() } });
|
|
96
|
+
if (result.matchedCount === 0) {
|
|
97
|
+
const existing = await this.collection.findOne({ id });
|
|
98
|
+
if (!existing)
|
|
99
|
+
return null;
|
|
100
|
+
throw new errors_js_1.SessionConflictError(id, expectedVersion, existing.version);
|
|
101
|
+
}
|
|
102
|
+
return await this.findById(id);
|
|
103
|
+
}
|
|
104
|
+
const existing = await this.collection.findOne({ id });
|
|
105
|
+
if (!existing)
|
|
106
|
+
return null;
|
|
107
|
+
const result = await this.collection.updateOne({ id }, {
|
|
108
|
+
$set: {
|
|
109
|
+
...data,
|
|
110
|
+
version: (existing.version ?? 0) + 1,
|
|
111
|
+
updatedAt: new Date(),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
if (result.matchedCount === 0)
|
|
115
|
+
return null;
|
|
116
|
+
return await this.findById(id);
|
|
117
|
+
}
|
|
118
|
+
async updateStatus(id, status, completedAt) {
|
|
119
|
+
const updateData = {
|
|
120
|
+
status,
|
|
121
|
+
updatedAt: new Date(),
|
|
122
|
+
};
|
|
123
|
+
if (completedAt) {
|
|
124
|
+
updateData.completedAt = completedAt;
|
|
125
|
+
}
|
|
126
|
+
const result = await this.collection.updateOne({ id }, { $set: updateData });
|
|
127
|
+
if (result.matchedCount === 0)
|
|
128
|
+
return null;
|
|
129
|
+
return await this.findById(id);
|
|
130
|
+
}
|
|
131
|
+
async updateCollectedData(id, collectedData) {
|
|
132
|
+
return await this.update(id, { collectedData });
|
|
133
|
+
}
|
|
134
|
+
async updateFlowStep(id, flow, step) {
|
|
135
|
+
return await this.update(id, {
|
|
136
|
+
currentFlow: flow,
|
|
137
|
+
currentStep: step,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
async incrementMessageCount(id) {
|
|
141
|
+
const result = await this.collection.updateOne({ id }, {
|
|
142
|
+
$inc: { messageCount: 1 },
|
|
143
|
+
$set: { lastMessageAt: new Date(), updatedAt: new Date() },
|
|
144
|
+
});
|
|
145
|
+
if (result.matchedCount === 0)
|
|
146
|
+
return null;
|
|
147
|
+
return await this.findById(id);
|
|
148
|
+
}
|
|
149
|
+
async delete(id) {
|
|
150
|
+
const result = await this.collection.deleteOne({ id });
|
|
151
|
+
return result.deletedCount > 0;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* MongoDB Message Repository
|
|
156
|
+
*/
|
|
157
|
+
class MongoMessageRepository {
|
|
158
|
+
constructor(collection) {
|
|
159
|
+
this.collection = collection;
|
|
160
|
+
}
|
|
161
|
+
async create(data) {
|
|
162
|
+
const message = {
|
|
163
|
+
...data,
|
|
164
|
+
id: `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`,
|
|
165
|
+
createdAt: new Date(),
|
|
166
|
+
};
|
|
167
|
+
await this.collection.insertOne(message);
|
|
168
|
+
return message;
|
|
169
|
+
}
|
|
170
|
+
async findById(id) {
|
|
171
|
+
return await this.collection.findOne({ id });
|
|
172
|
+
}
|
|
173
|
+
async findBySessionId(sessionId, limit = 1000) {
|
|
174
|
+
return await this.collection
|
|
175
|
+
.find({ sessionId })
|
|
176
|
+
.sort({ createdAt: 1 })
|
|
177
|
+
.limit(limit)
|
|
178
|
+
.toArray();
|
|
179
|
+
}
|
|
180
|
+
async findByUserId(userId, limit = 100) {
|
|
181
|
+
return await this.collection
|
|
182
|
+
.find({ userId })
|
|
183
|
+
.sort({ createdAt: -1 })
|
|
184
|
+
.limit(limit)
|
|
185
|
+
.toArray();
|
|
186
|
+
}
|
|
187
|
+
async delete(id) {
|
|
188
|
+
const result = await this.collection.deleteOne({ id });
|
|
189
|
+
return result.deletedCount > 0;
|
|
190
|
+
}
|
|
191
|
+
async deleteBySessionId(sessionId) {
|
|
192
|
+
const result = await this.collection.deleteMany({ sessionId });
|
|
193
|
+
return result.deletedCount;
|
|
194
|
+
}
|
|
195
|
+
async deleteByUserId(userId) {
|
|
196
|
+
const result = await this.collection.deleteMany({ userId });
|
|
197
|
+
return result.deletedCount;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# 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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"}
|