@falai/agent 0.3.11 → 0.3.20
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/README.md +164 -0
- package/dist/adapters/MongoAdapter.d.ts +97 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js +163 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js +256 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/adapters/PrismaAdapter.js +331 -0
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts +71 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/adapters/RedisAdapter.js +226 -0
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/index.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 +167 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js +260 -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 +335 -0
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/adapters/RedisAdapter.d.ts +71 -0
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/adapters/RedisAdapter.js +230 -0
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.d.ts +12 -0
- package/dist/cjs/adapters/index.d.ts.map +1 -0
- package/dist/cjs/adapters/index.js +15 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/core/Agent.d.ts +10 -0
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +23 -0
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +77 -0
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/core/PersistenceManager.js +153 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +12 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +3 -0
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/persistence.d.ts +194 -0
- package/dist/cjs/types/persistence.d.ts.map +1 -0
- package/dist/cjs/types/persistence.js +7 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/core/Agent.d.ts +10 -0
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +23 -0
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/PersistenceManager.d.ts +77 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js +149 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/types/agent.d.ts +3 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/persistence.d.ts +194 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js +6 -0
- package/dist/types/persistence.js.map +1 -0
- package/docs/ADAPTERS.md +127 -0
- package/docs/API_REFERENCE.md +337 -0
- package/docs/PERSISTENCE.md +513 -0
- package/examples/prisma-persistence.ts +313 -0
- package/examples/prisma-schema.example.prisma +74 -0
- package/examples/redis-persistence.ts +89 -0
- package/package.json +29 -1
- package/src/adapters/MongoAdapter.ts +295 -0
- package/src/adapters/PostgreSQLAdapter.ts +417 -0
- package/src/adapters/PrismaAdapter.ts +510 -0
- package/src/adapters/RedisAdapter.ts +365 -0
- package/src/adapters/index.ts +28 -0
- package/src/core/Agent.ts +31 -0
- package/src/core/PersistenceManager.ts +222 -0
- package/src/index.ts +36 -0
- package/src/types/agent.ts +3 -0
- package/src/types/index.ts +14 -0
- package/src/types/persistence.ts +234 -0
package/src/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ export { adaptEvent, createMessageEvent, createToolEvent } from "./core/Events";
|
|
|
16
16
|
export { PromptBuilder } from "./core/PromptBuilder";
|
|
17
17
|
export type { Customer, AgentInfo } from "./core/PromptBuilder";
|
|
18
18
|
export { BuiltInSection } from "./core/PromptBuilder";
|
|
19
|
+
export { PersistenceManager } from "./core/PersistenceManager";
|
|
19
20
|
|
|
20
21
|
// Providers
|
|
21
22
|
export { GeminiProvider } from "./providers/GeminiProvider";
|
|
@@ -27,6 +28,29 @@ export type { OpenRouterProviderOptions } from "./providers/OpenRouterProvider";
|
|
|
27
28
|
export { AnthropicProvider } from "./providers/AnthropicProvider";
|
|
28
29
|
export type { AnthropicProviderOptions } from "./providers/AnthropicProvider";
|
|
29
30
|
|
|
31
|
+
// Adapters
|
|
32
|
+
export { PrismaAdapter } from "./adapters/PrismaAdapter";
|
|
33
|
+
export type {
|
|
34
|
+
PrismaClient,
|
|
35
|
+
FieldMappings,
|
|
36
|
+
PrismaAdapterOptions,
|
|
37
|
+
} from "./adapters/PrismaAdapter";
|
|
38
|
+
export { RedisAdapter } from "./adapters/RedisAdapter";
|
|
39
|
+
export type { RedisClient, RedisAdapterOptions } from "./adapters/RedisAdapter";
|
|
40
|
+
export { MongoAdapter } from "./adapters/MongoAdapter";
|
|
41
|
+
export type {
|
|
42
|
+
MongoClient,
|
|
43
|
+
MongoDatabase,
|
|
44
|
+
MongoCollection,
|
|
45
|
+
MongoAdapterOptions,
|
|
46
|
+
} from "./adapters/MongoAdapter";
|
|
47
|
+
export { PostgreSQLAdapter } from "./adapters/PostgreSQLAdapter";
|
|
48
|
+
export type {
|
|
49
|
+
PgClient,
|
|
50
|
+
PgQueryResult,
|
|
51
|
+
PostgreSQLAdapterOptions,
|
|
52
|
+
} from "./adapters/PostgreSQLAdapter";
|
|
53
|
+
|
|
30
54
|
// Constants
|
|
31
55
|
export { END_ROUTE } from "./constants";
|
|
32
56
|
|
|
@@ -94,3 +118,15 @@ export type {
|
|
|
94
118
|
Observation as IObservation,
|
|
95
119
|
ObservationOptions,
|
|
96
120
|
} from "./types/observation";
|
|
121
|
+
|
|
122
|
+
export type {
|
|
123
|
+
SessionData,
|
|
124
|
+
MessageData,
|
|
125
|
+
SessionStatus,
|
|
126
|
+
MessageRole,
|
|
127
|
+
SessionRepository,
|
|
128
|
+
MessageRepository,
|
|
129
|
+
PersistenceConfig,
|
|
130
|
+
CreateSessionOptions,
|
|
131
|
+
SaveMessageOptions,
|
|
132
|
+
} from "./types/persistence";
|
package/src/types/agent.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import type { AiProvider } from "./ai";
|
|
6
6
|
import type { ToolRef } from "./tool";
|
|
7
7
|
import type { RouteOptions } from "./route";
|
|
8
|
+
import type { PersistenceConfig } from "./persistence";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Composition mode determines how the agent processes and structures responses
|
|
@@ -85,6 +86,8 @@ export interface AgentOptions<TContext = unknown> {
|
|
|
85
86
|
routes?: RouteOptions[];
|
|
86
87
|
/** Initial observations for disambiguation */
|
|
87
88
|
observations?: ObservationOptions[];
|
|
89
|
+
/** Optional persistence configuration for auto-saving sessions and messages */
|
|
90
|
+
persistence?: PersistenceConfig;
|
|
88
91
|
}
|
|
89
92
|
|
|
90
93
|
/**
|
package/src/types/index.ts
CHANGED
|
@@ -54,3 +54,17 @@ export { SectionStatus } from "./prompt";
|
|
|
54
54
|
|
|
55
55
|
// Observation types
|
|
56
56
|
export type { Observation, ObservationOptions } from "./observation";
|
|
57
|
+
|
|
58
|
+
// Persistence types
|
|
59
|
+
export type {
|
|
60
|
+
SessionData,
|
|
61
|
+
MessageData,
|
|
62
|
+
SessionStatus,
|
|
63
|
+
MessageRole,
|
|
64
|
+
SessionRepository,
|
|
65
|
+
MessageRepository,
|
|
66
|
+
PersistenceAdapter,
|
|
67
|
+
PersistenceConfig,
|
|
68
|
+
CreateSessionOptions,
|
|
69
|
+
SaveMessageOptions,
|
|
70
|
+
} from "./persistence";
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence-related type definitions
|
|
3
|
+
* Support for optional database persistence (Prisma, etc.)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Event } from "./history";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Session status enum
|
|
10
|
+
*/
|
|
11
|
+
export type SessionStatus = "active" | "completed" | "abandoned";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Message role enum
|
|
15
|
+
*/
|
|
16
|
+
export type MessageRole = "user" | "agent" | "system";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Base session data structure
|
|
20
|
+
*/
|
|
21
|
+
export interface SessionData {
|
|
22
|
+
id: string;
|
|
23
|
+
userId?: string;
|
|
24
|
+
agentName?: string;
|
|
25
|
+
status: SessionStatus;
|
|
26
|
+
currentRoute?: string;
|
|
27
|
+
currentState?: string;
|
|
28
|
+
collectedData?: Record<string, unknown>;
|
|
29
|
+
messageCount?: number;
|
|
30
|
+
lastMessageAt?: Date;
|
|
31
|
+
completedAt?: Date;
|
|
32
|
+
createdAt: Date;
|
|
33
|
+
updatedAt: Date;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Base message data structure
|
|
38
|
+
*/
|
|
39
|
+
export interface MessageData {
|
|
40
|
+
id: string;
|
|
41
|
+
sessionId: string;
|
|
42
|
+
userId?: string;
|
|
43
|
+
role: MessageRole;
|
|
44
|
+
content: string;
|
|
45
|
+
route?: string;
|
|
46
|
+
state?: string;
|
|
47
|
+
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
48
|
+
event?: Event; // Optional: store full event data
|
|
49
|
+
createdAt: Date;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Repository interface for sessions
|
|
54
|
+
* Implement this interface with your database of choice
|
|
55
|
+
*/
|
|
56
|
+
export interface SessionRepository {
|
|
57
|
+
/**
|
|
58
|
+
* Create a new session
|
|
59
|
+
*/
|
|
60
|
+
create(
|
|
61
|
+
data: Omit<SessionData, "id" | "createdAt" | "updatedAt">
|
|
62
|
+
): Promise<SessionData>;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Find session by ID
|
|
66
|
+
*/
|
|
67
|
+
findById(id: string): Promise<SessionData | null>;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Find active session by user ID
|
|
71
|
+
*/
|
|
72
|
+
findActiveByUserId(userId: string): Promise<SessionData | null>;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Find all sessions for a user
|
|
76
|
+
*/
|
|
77
|
+
findByUserId(userId: string, limit?: number): Promise<SessionData[]>;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Update session
|
|
81
|
+
*/
|
|
82
|
+
update(
|
|
83
|
+
id: string,
|
|
84
|
+
data: Partial<Omit<SessionData, "id" | "createdAt">>
|
|
85
|
+
): Promise<SessionData | null>;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Update session status
|
|
89
|
+
*/
|
|
90
|
+
updateStatus(
|
|
91
|
+
id: string,
|
|
92
|
+
status: SessionStatus,
|
|
93
|
+
completedAt?: Date
|
|
94
|
+
): Promise<SessionData | null>;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Update collected data
|
|
98
|
+
*/
|
|
99
|
+
updateCollectedData(
|
|
100
|
+
id: string,
|
|
101
|
+
collectedData: Record<string, unknown>
|
|
102
|
+
): Promise<SessionData | null>;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Update current route and state
|
|
106
|
+
*/
|
|
107
|
+
updateRouteState(
|
|
108
|
+
id: string,
|
|
109
|
+
route?: string,
|
|
110
|
+
state?: string
|
|
111
|
+
): Promise<SessionData | null>;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Increment message count
|
|
115
|
+
*/
|
|
116
|
+
incrementMessageCount(id: string): Promise<SessionData | null>;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Delete session
|
|
120
|
+
*/
|
|
121
|
+
delete(id: string): Promise<boolean>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Repository interface for messages
|
|
126
|
+
* Implement this interface with your database of choice
|
|
127
|
+
*/
|
|
128
|
+
export interface MessageRepository {
|
|
129
|
+
/**
|
|
130
|
+
* Create a new message
|
|
131
|
+
*/
|
|
132
|
+
create(data: Omit<MessageData, "id" | "createdAt">): Promise<MessageData>;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Find message by ID
|
|
136
|
+
*/
|
|
137
|
+
findById(id: string): Promise<MessageData | null>;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Find all messages for a session
|
|
141
|
+
*/
|
|
142
|
+
findBySessionId(sessionId: string, limit?: number): Promise<MessageData[]>;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Find messages for a user
|
|
146
|
+
*/
|
|
147
|
+
findByUserId(userId: string, limit?: number): Promise<MessageData[]>;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Delete message by ID
|
|
151
|
+
*/
|
|
152
|
+
delete(id: string): Promise<boolean>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Delete all messages for a session
|
|
156
|
+
*/
|
|
157
|
+
deleteBySessionId(sessionId: string): Promise<number>;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Delete all messages for a user
|
|
161
|
+
*/
|
|
162
|
+
deleteByUserId(userId: string): Promise<number>;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Persistence adapter interface
|
|
167
|
+
* Implement this to create adapters for different databases
|
|
168
|
+
*/
|
|
169
|
+
export interface PersistenceAdapter {
|
|
170
|
+
/**
|
|
171
|
+
* Session repository
|
|
172
|
+
*/
|
|
173
|
+
readonly sessionRepository: SessionRepository;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Message repository
|
|
177
|
+
*/
|
|
178
|
+
readonly messageRepository: MessageRepository;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Initialize the adapter (create tables, indexes, etc.)
|
|
182
|
+
* Called automatically when adapter is created
|
|
183
|
+
*/
|
|
184
|
+
initialize?(): Promise<void>;
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Disconnect/cleanup resources
|
|
188
|
+
*/
|
|
189
|
+
disconnect?(): Promise<void>;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Configuration for persistence
|
|
194
|
+
*/
|
|
195
|
+
export interface PersistenceConfig {
|
|
196
|
+
/**
|
|
197
|
+
* Persistence adapter instance (e.g., PrismaAdapter)
|
|
198
|
+
*/
|
|
199
|
+
adapter: PersistenceAdapter;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Whether to auto-save messages (default: true)
|
|
203
|
+
*/
|
|
204
|
+
autoSave?: boolean;
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* User ID to associate with sessions/messages
|
|
208
|
+
* Can also be provided per-call in methods
|
|
209
|
+
*/
|
|
210
|
+
userId?: string;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Options for creating a session
|
|
215
|
+
*/
|
|
216
|
+
export interface CreateSessionOptions {
|
|
217
|
+
userId?: string;
|
|
218
|
+
agentName?: string;
|
|
219
|
+
initialData?: Record<string, unknown>;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Options for saving a message
|
|
224
|
+
*/
|
|
225
|
+
export interface SaveMessageOptions {
|
|
226
|
+
sessionId: string;
|
|
227
|
+
userId?: string;
|
|
228
|
+
role: MessageRole;
|
|
229
|
+
content: string;
|
|
230
|
+
route?: string;
|
|
231
|
+
state?: string;
|
|
232
|
+
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
233
|
+
event?: Event;
|
|
234
|
+
}
|