@falai/agent 0.3.10 → 0.3.12

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 (131) hide show
  1. package/README.md +192 -16
  2. package/dist/adapters/PrismaAdapter.d.ts +115 -0
  3. package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
  4. package/dist/adapters/PrismaAdapter.js +331 -0
  5. package/dist/adapters/PrismaAdapter.js.map +1 -0
  6. package/dist/adapters/index.d.ts +6 -0
  7. package/dist/adapters/index.d.ts.map +1 -0
  8. package/dist/adapters/index.js +5 -0
  9. package/dist/adapters/index.js.map +1 -0
  10. package/dist/cjs/adapters/PrismaAdapter.d.ts +115 -0
  11. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -0
  12. package/dist/cjs/adapters/PrismaAdapter.js +335 -0
  13. package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
  14. package/dist/cjs/adapters/index.d.ts +6 -0
  15. package/dist/cjs/adapters/index.d.ts.map +1 -0
  16. package/dist/cjs/adapters/index.js +9 -0
  17. package/dist/cjs/adapters/index.js.map +1 -0
  18. package/dist/cjs/core/Agent.d.ts +35 -0
  19. package/dist/cjs/core/Agent.d.ts.map +1 -1
  20. package/dist/cjs/core/Agent.js +153 -0
  21. package/dist/cjs/core/Agent.js.map +1 -1
  22. package/dist/cjs/core/PersistenceManager.d.ts +77 -0
  23. package/dist/cjs/core/PersistenceManager.d.ts.map +1 -0
  24. package/dist/cjs/core/PersistenceManager.js +153 -0
  25. package/dist/cjs/core/PersistenceManager.js.map +1 -0
  26. package/dist/cjs/index.d.ts +6 -0
  27. package/dist/cjs/index.d.ts.map +1 -1
  28. package/dist/cjs/index.js +8 -1
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/providers/AnthropicProvider.d.ts +43 -0
  31. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -0
  32. package/dist/cjs/providers/AnthropicProvider.js +328 -0
  33. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  34. package/dist/cjs/providers/GeminiProvider.d.ts +4 -1
  35. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  36. package/dist/cjs/providers/GeminiProvider.js +96 -0
  37. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  38. package/dist/cjs/providers/OpenAIProvider.d.ts +4 -1
  39. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  40. package/dist/cjs/providers/OpenAIProvider.js +115 -0
  41. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  42. package/dist/cjs/providers/OpenRouterProvider.d.ts +4 -1
  43. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  44. package/dist/cjs/providers/OpenRouterProvider.js +115 -0
  45. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  46. package/dist/cjs/providers/index.d.ts +13 -0
  47. package/dist/cjs/providers/index.d.ts.map +1 -0
  48. package/dist/cjs/providers/index.js +16 -0
  49. package/dist/cjs/providers/index.js.map +1 -0
  50. package/dist/cjs/types/agent.d.ts +3 -0
  51. package/dist/cjs/types/agent.d.ts.map +1 -1
  52. package/dist/cjs/types/agent.js.map +1 -1
  53. package/dist/cjs/types/ai.d.ts +28 -0
  54. package/dist/cjs/types/ai.d.ts.map +1 -1
  55. package/dist/cjs/types/index.d.ts +1 -0
  56. package/dist/cjs/types/index.d.ts.map +1 -1
  57. package/dist/cjs/types/persistence.d.ts +194 -0
  58. package/dist/cjs/types/persistence.d.ts.map +1 -0
  59. package/dist/cjs/types/persistence.js +7 -0
  60. package/dist/cjs/types/persistence.js.map +1 -0
  61. package/dist/core/Agent.d.ts +35 -0
  62. package/dist/core/Agent.d.ts.map +1 -1
  63. package/dist/core/Agent.js +153 -0
  64. package/dist/core/Agent.js.map +1 -1
  65. package/dist/core/PersistenceManager.d.ts +77 -0
  66. package/dist/core/PersistenceManager.d.ts.map +1 -0
  67. package/dist/core/PersistenceManager.js +149 -0
  68. package/dist/core/PersistenceManager.js.map +1 -0
  69. package/dist/index.d.ts +6 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +4 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/providers/AnthropicProvider.d.ts +43 -0
  74. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  75. package/dist/providers/AnthropicProvider.js +321 -0
  76. package/dist/providers/AnthropicProvider.js.map +1 -0
  77. package/dist/providers/GeminiProvider.d.ts +4 -1
  78. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  79. package/dist/providers/GeminiProvider.js +96 -0
  80. package/dist/providers/GeminiProvider.js.map +1 -1
  81. package/dist/providers/OpenAIProvider.d.ts +4 -1
  82. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  83. package/dist/providers/OpenAIProvider.js +115 -0
  84. package/dist/providers/OpenAIProvider.js.map +1 -1
  85. package/dist/providers/OpenRouterProvider.d.ts +4 -1
  86. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  87. package/dist/providers/OpenRouterProvider.js +115 -0
  88. package/dist/providers/OpenRouterProvider.js.map +1 -1
  89. package/dist/providers/index.d.ts +13 -0
  90. package/dist/providers/index.d.ts.map +1 -0
  91. package/dist/providers/index.js +9 -0
  92. package/dist/providers/index.js.map +1 -0
  93. package/dist/types/agent.d.ts +3 -0
  94. package/dist/types/agent.d.ts.map +1 -1
  95. package/dist/types/agent.js.map +1 -1
  96. package/dist/types/ai.d.ts +28 -0
  97. package/dist/types/ai.d.ts.map +1 -1
  98. package/dist/types/index.d.ts +1 -0
  99. package/dist/types/index.d.ts.map +1 -1
  100. package/dist/types/persistence.d.ts +194 -0
  101. package/dist/types/persistence.d.ts.map +1 -0
  102. package/dist/types/persistence.js +6 -0
  103. package/dist/types/persistence.js.map +1 -0
  104. package/docs/API_REFERENCE.md +260 -2
  105. package/docs/PERSISTENCE.md +419 -0
  106. package/docs/PROVIDERS.md +139 -2
  107. package/examples/business-onboarding.ts +5 -4
  108. package/examples/declarative-agent.ts +1 -1
  109. package/examples/domain-scoping.ts +5 -4
  110. package/examples/healthcare-agent.ts +4 -4
  111. package/examples/openai-agent.ts +6 -4
  112. package/examples/prisma-persistence.ts +313 -0
  113. package/examples/prisma-schema.example.prisma +74 -0
  114. package/examples/rules-prohibitions.ts +4 -4
  115. package/examples/streaming-agent.ts +371 -0
  116. package/examples/travel-agent.ts +7 -4
  117. package/package.json +10 -1
  118. package/src/adapters/PrismaAdapter.ts +510 -0
  119. package/src/adapters/index.ts +10 -0
  120. package/src/core/Agent.ts +205 -0
  121. package/src/core/PersistenceManager.ts +222 -0
  122. package/src/index.ts +23 -0
  123. package/src/providers/AnthropicProvider.ts +467 -0
  124. package/src/providers/GeminiProvider.ts +135 -0
  125. package/src/providers/OpenAIProvider.ts +157 -0
  126. package/src/providers/OpenRouterProvider.ts +157 -0
  127. package/src/providers/index.ts +16 -0
  128. package/src/types/agent.ts +3 -0
  129. package/src/types/ai.ts +32 -0
  130. package/src/types/index.ts +14 -0
  131. package/src/types/persistence.ts +234 -0
package/src/core/Agent.ts CHANGED
@@ -16,6 +16,7 @@ import { Route } from "./Route";
16
16
  import { DomainRegistry } from "./DomainRegistry";
17
17
  import { PromptBuilder } from "./PromptBuilder";
18
18
  import { Observation } from "./Observation";
19
+ import { PersistenceManager } from "./PersistenceManager";
19
20
 
20
21
  /**
21
22
  * Main Agent class with generic context support
@@ -28,6 +29,7 @@ export class Agent<TContext = unknown> {
28
29
  private observations: Observation[] = [];
29
30
  private domainRegistry = new DomainRegistry();
30
31
  private context: TContext | undefined;
32
+ private persistenceManager: PersistenceManager | undefined;
31
33
 
32
34
  /**
33
35
  * Dynamic domain property - populated via addDomain
@@ -50,6 +52,21 @@ export class Agent<TContext = unknown> {
50
52
  // Initialize context if provided
51
53
  this.context = options.context;
52
54
 
55
+ // Initialize persistence if configured
56
+ if (options.persistence) {
57
+ this.persistenceManager = new PersistenceManager(options.persistence);
58
+
59
+ // Initialize the adapter if it has an initialize method
60
+ if (options.persistence.adapter.initialize) {
61
+ options.persistence.adapter.initialize().catch((error) => {
62
+ console.error(
63
+ "[Agent] Persistence adapter initialization failed:",
64
+ error
65
+ );
66
+ });
67
+ }
68
+ }
69
+
53
70
  // Initialize from options
54
71
  if (options.terms) {
55
72
  this.terms = [...options.terms];
@@ -211,6 +228,180 @@ export class Agent<TContext = unknown> {
211
228
  return this.context;
212
229
  }
213
230
 
231
+ /**
232
+ * Generate a response based on history and context as a stream
233
+ */
234
+ async *respondStream(params: {
235
+ history: Event[];
236
+ state?: StateRef;
237
+ contextOverride?: Partial<TContext>;
238
+ signal?: AbortSignal;
239
+ }): AsyncGenerator<{
240
+ delta: string;
241
+ accumulated: string;
242
+ done: boolean;
243
+ route?: { id: string; title: string } | null;
244
+ state?: { id: string; description?: string } | null;
245
+ toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
246
+ }> {
247
+ const { history, contextOverride, signal } = params;
248
+
249
+ // Get current context (may fetch from provider)
250
+ let currentContext = await this.getContext();
251
+
252
+ // Call beforeRespond hook if configured
253
+ if (this.options.hooks?.beforeRespond && currentContext !== undefined) {
254
+ currentContext = await this.options.hooks.beforeRespond(currentContext);
255
+ // Update stored context with the result from beforeRespond
256
+ this.context = currentContext;
257
+ }
258
+
259
+ // Merge context with override
260
+ const effectiveContext = {
261
+ ...(currentContext as Record<string, unknown>),
262
+ ...(contextOverride as Record<string, unknown>),
263
+ } as TContext;
264
+
265
+ // Build prompt (same as respond method)
266
+ const promptBuilder = new PromptBuilder();
267
+
268
+ // Add agent identity
269
+ if (this.options.description) {
270
+ promptBuilder.addAgentIdentity({
271
+ name: this.options.name,
272
+ description: this.options.description,
273
+ });
274
+ }
275
+
276
+ // Add interaction history
277
+ promptBuilder.addInteractionHistoryForMessageGeneration(history);
278
+
279
+ // Add glossary
280
+ if (this.terms.length > 0) {
281
+ promptBuilder.addGlossary(this.terms);
282
+ }
283
+
284
+ // Add guidelines (convert to GuidelineMatch format, filter enabled only)
285
+ const enabledGuidelines = this.guidelines.filter(
286
+ (g) => g.enabled !== false
287
+ );
288
+ if (enabledGuidelines.length > 0) {
289
+ const guidelineMatches: GuidelineMatch[] = enabledGuidelines.map((g) => ({
290
+ guideline: g,
291
+ }));
292
+ promptBuilder.addGuidelinesForMessageGeneration(guidelineMatches);
293
+ }
294
+
295
+ // Add capabilities
296
+ if (this.capabilities.length > 0) {
297
+ promptBuilder.addCapabilitiesForMessageGeneration(this.capabilities);
298
+ }
299
+
300
+ // Add observations
301
+ if (this.observations.length > 0) {
302
+ const observationsWithRoutes = this.observations
303
+ .map((obs) => ({
304
+ description: obs.description,
305
+ routes: obs.getRoutes().map((routeRef) => {
306
+ const route = this.routes.find((r) => r.id === routeRef.id);
307
+ return { title: route?.title || routeRef.id };
308
+ }),
309
+ }))
310
+ .filter((obs) => obs.routes.length > 0);
311
+
312
+ if (observationsWithRoutes.length > 0) {
313
+ promptBuilder.addObservations(observationsWithRoutes);
314
+ }
315
+ }
316
+
317
+ // Add active routes with their rules and prohibitions
318
+ if (this.routes.length > 0) {
319
+ promptBuilder.addActiveRoutes(
320
+ this.routes.map((r) => ({
321
+ title: r.title,
322
+ description: r.description,
323
+ conditions: r.conditions,
324
+ domains: r.getDomains(),
325
+ rules: r.getRules(),
326
+ prohibitions: r.getProhibitions(),
327
+ }))
328
+ );
329
+ }
330
+
331
+ // Add domains (tools) information if any domains are registered
332
+ const allDomains = this.domainRegistry.all();
333
+ if (Object.keys(allDomains).length > 0) {
334
+ promptBuilder.addDomains(allDomains);
335
+ }
336
+
337
+ // Add JSON response schema instructions
338
+ promptBuilder.addJsonResponseSchema();
339
+
340
+ // Build final prompt
341
+ const prompt = promptBuilder.build();
342
+
343
+ // Generate message stream using AI provider with JSON mode enabled
344
+ const stream = this.options.ai.generateMessageStream({
345
+ prompt,
346
+ history,
347
+ context: effectiveContext,
348
+ signal,
349
+ parameters: {
350
+ jsonMode: true,
351
+ },
352
+ });
353
+
354
+ // Stream chunks to caller
355
+ for await (const chunk of stream) {
356
+ // Extract route and state from structured response on final chunk
357
+ let route: { id: string; title: string } | null = null;
358
+ let state: { id: string; description?: string } | null = null;
359
+ let toolCalls:
360
+ | Array<{ toolName: string; arguments: Record<string, unknown> }>
361
+ | undefined;
362
+
363
+ if (chunk.done && chunk.structured) {
364
+ // Find route by title
365
+ if (chunk.structured.route) {
366
+ const foundRoute = this.routes.find(
367
+ (r) => r.title === chunk.structured?.route
368
+ );
369
+ if (foundRoute) {
370
+ route = {
371
+ id: foundRoute.id,
372
+ title: foundRoute.title,
373
+ };
374
+ }
375
+ }
376
+
377
+ // Create state reference if provided
378
+ if (chunk.structured.state) {
379
+ state = {
380
+ id: "dynamic_state",
381
+ description: chunk.structured.state,
382
+ };
383
+ }
384
+
385
+ // Extract tool calls
386
+ if (
387
+ chunk.structured.toolCalls &&
388
+ chunk.structured.toolCalls.length > 0
389
+ ) {
390
+ toolCalls = chunk.structured.toolCalls;
391
+ }
392
+ }
393
+
394
+ yield {
395
+ delta: chunk.delta,
396
+ accumulated: chunk.accumulated,
397
+ done: chunk.done,
398
+ route: route || undefined,
399
+ state: state || undefined,
400
+ toolCalls,
401
+ };
402
+ }
403
+ }
404
+
214
405
  /**
215
406
  * Generate a response based on history and context
216
407
  */
@@ -424,6 +615,20 @@ export class Agent<TContext = unknown> {
424
615
  return this.domainRegistry;
425
616
  }
426
617
 
618
+ /**
619
+ * Get the persistence manager (if configured)
620
+ */
621
+ getPersistenceManager(): PersistenceManager | undefined {
622
+ return this.persistenceManager;
623
+ }
624
+
625
+ /**
626
+ * Check if persistence is enabled
627
+ */
628
+ hasPersistence(): boolean {
629
+ return this.persistenceManager !== undefined;
630
+ }
631
+
427
632
  /**
428
633
  * Get allowed domains for a specific route
429
634
  * @param routeId - Route ID to check
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Persistence Manager
3
+ * Handles optional persistence of sessions and messages
4
+ */
5
+
6
+ import type {
7
+ PersistenceConfig,
8
+ SessionData,
9
+ MessageData,
10
+ CreateSessionOptions,
11
+ SaveMessageOptions,
12
+ SessionStatus,
13
+ SessionRepository,
14
+ MessageRepository,
15
+ } from "../types/persistence";
16
+ import type { Event } from "../types/history";
17
+
18
+ /**
19
+ * Manager for handling persistence operations
20
+ * Provides a clean interface for optional database persistence
21
+ */
22
+ export class PersistenceManager {
23
+ private config: PersistenceConfig;
24
+ private sessionRepository: SessionRepository;
25
+ private messageRepository: MessageRepository;
26
+
27
+ constructor(config: PersistenceConfig) {
28
+ this.config = {
29
+ autoSave: true,
30
+ ...config,
31
+ };
32
+ this.sessionRepository = config.adapter.sessionRepository;
33
+ this.messageRepository = config.adapter.messageRepository;
34
+ }
35
+
36
+ /**
37
+ * Create a new session
38
+ */
39
+ async createSession(options: CreateSessionOptions): Promise<SessionData> {
40
+ const userId = options.userId || this.config.userId;
41
+
42
+ return await this.sessionRepository.create({
43
+ userId,
44
+ agentName: options.agentName,
45
+ status: "active",
46
+ collectedData: options.initialData || {},
47
+ messageCount: 0,
48
+ });
49
+ }
50
+
51
+ /**
52
+ * Get session by ID
53
+ */
54
+ async getSession(sessionId: string): Promise<SessionData | null> {
55
+ return await this.sessionRepository.findById(sessionId);
56
+ }
57
+
58
+ /**
59
+ * Find active session for a user
60
+ */
61
+ async findActiveSession(userId?: string): Promise<SessionData | null> {
62
+ const effectiveUserId = userId || this.config.userId;
63
+ if (!effectiveUserId) {
64
+ throw new Error(
65
+ "userId must be provided or configured in PersistenceConfig"
66
+ );
67
+ }
68
+ return await this.sessionRepository.findActiveByUserId(effectiveUserId);
69
+ }
70
+
71
+ /**
72
+ * Get all sessions for a user
73
+ */
74
+ async getUserSessions(
75
+ userId?: string,
76
+ limit?: number
77
+ ): Promise<SessionData[]> {
78
+ const effectiveUserId = userId || this.config.userId;
79
+ if (!effectiveUserId) {
80
+ throw new Error(
81
+ "userId must be provided or configured in PersistenceConfig"
82
+ );
83
+ }
84
+ return await this.sessionRepository.findByUserId(effectiveUserId, limit);
85
+ }
86
+
87
+ /**
88
+ * Update session status
89
+ */
90
+ async updateSessionStatus(
91
+ sessionId: string,
92
+ status: SessionStatus,
93
+ completedAt?: Date
94
+ ): Promise<SessionData | null> {
95
+ return await this.sessionRepository.updateStatus(
96
+ sessionId,
97
+ status,
98
+ completedAt
99
+ );
100
+ }
101
+
102
+ /**
103
+ * Update collected data in session
104
+ */
105
+ async updateCollectedData(
106
+ sessionId: string,
107
+ collectedData: Record<string, unknown>
108
+ ): Promise<SessionData | null> {
109
+ return await this.sessionRepository.updateCollectedData(
110
+ sessionId,
111
+ collectedData
112
+ );
113
+ }
114
+
115
+ /**
116
+ * Update current route and state
117
+ */
118
+ async updateRouteState(
119
+ sessionId: string,
120
+ route?: string,
121
+ state?: string
122
+ ): Promise<SessionData | null> {
123
+ return await this.sessionRepository.updateRouteState(
124
+ sessionId,
125
+ route,
126
+ state
127
+ );
128
+ }
129
+
130
+ /**
131
+ * Save a message
132
+ */
133
+ async saveMessage(options: SaveMessageOptions): Promise<MessageData> {
134
+ const userId = options.userId || this.config.userId;
135
+
136
+ const message = await this.messageRepository.create({
137
+ sessionId: options.sessionId,
138
+ userId,
139
+ role: options.role,
140
+ content: options.content,
141
+ route: options.route,
142
+ state: options.state,
143
+ toolCalls: options.toolCalls,
144
+ event: options.event,
145
+ });
146
+
147
+ // Increment message count in session if autoSave is enabled
148
+ if (this.config.autoSave) {
149
+ await this.sessionRepository.incrementMessageCount(options.sessionId);
150
+ }
151
+
152
+ return message;
153
+ }
154
+
155
+ /**
156
+ * Get all messages for a session
157
+ */
158
+ async getSessionMessages(
159
+ sessionId: string,
160
+ limit?: number
161
+ ): Promise<MessageData[]> {
162
+ return await this.messageRepository.findBySessionId(sessionId, limit);
163
+ }
164
+
165
+ /**
166
+ * Get messages for a user
167
+ */
168
+ async getUserMessages(
169
+ userId?: string,
170
+ limit?: number
171
+ ): Promise<MessageData[]> {
172
+ const effectiveUserId = userId || this.config.userId;
173
+ if (!effectiveUserId) {
174
+ throw new Error(
175
+ "userId must be provided or configured in PersistenceConfig"
176
+ );
177
+ }
178
+ return await this.messageRepository.findByUserId(effectiveUserId, limit);
179
+ }
180
+
181
+ /**
182
+ * Delete a session and all its messages
183
+ */
184
+ async deleteSession(sessionId: string): Promise<boolean> {
185
+ // Delete all messages first
186
+ await this.messageRepository.deleteBySessionId(sessionId);
187
+
188
+ // Then delete the session
189
+ return await this.sessionRepository.delete(sessionId);
190
+ }
191
+
192
+ /**
193
+ * Complete a session
194
+ */
195
+ async completeSession(sessionId: string): Promise<SessionData | null> {
196
+ return await this.updateSessionStatus(sessionId, "completed", new Date());
197
+ }
198
+
199
+ /**
200
+ * Abandon a session
201
+ */
202
+ async abandonSession(sessionId: string): Promise<SessionData | null> {
203
+ return await this.updateSessionStatus(sessionId, "abandoned");
204
+ }
205
+
206
+ /**
207
+ * Helper: Convert message data to Event format
208
+ */
209
+ messageToEvent(message: MessageData): Event | undefined {
210
+ return message.event;
211
+ }
212
+
213
+ /**
214
+ * Helper: Load history from session messages
215
+ */
216
+ async loadSessionHistory(sessionId: string): Promise<Event[]> {
217
+ const messages = await this.getSessionMessages(sessionId);
218
+ return messages
219
+ .map((m) => this.messageToEvent(m))
220
+ .filter((e): e is Event => e !== undefined);
221
+ }
222
+ }
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";
@@ -24,6 +25,16 @@ export { OpenAIProvider } from "./providers/OpenAIProvider";
24
25
  export type { OpenAIProviderOptions } from "./providers/OpenAIProvider";
25
26
  export { OpenRouterProvider } from "./providers/OpenRouterProvider";
26
27
  export type { OpenRouterProviderOptions } from "./providers/OpenRouterProvider";
28
+ export { AnthropicProvider } from "./providers/AnthropicProvider";
29
+ export type { AnthropicProviderOptions } from "./providers/AnthropicProvider";
30
+
31
+ // Adapters
32
+ export { PrismaAdapter } from "./adapters/PrismaAdapter";
33
+ export type {
34
+ PrismaClient,
35
+ FieldMappings,
36
+ PrismaAdapterOptions,
37
+ } from "./adapters/PrismaAdapter";
27
38
 
28
39
  // Constants
29
40
  export { END_ROUTE } from "./constants";
@@ -92,3 +103,15 @@ export type {
92
103
  Observation as IObservation,
93
104
  ObservationOptions,
94
105
  } from "./types/observation";
106
+
107
+ export type {
108
+ SessionData,
109
+ MessageData,
110
+ SessionStatus,
111
+ MessageRole,
112
+ SessionRepository,
113
+ MessageRepository,
114
+ PersistenceConfig,
115
+ CreateSessionOptions,
116
+ SaveMessageOptions,
117
+ } from "./types/persistence";