@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/README.md
CHANGED
|
@@ -57,6 +57,27 @@
|
|
|
57
57
|
- **Domain Registry** - Organize capabilities by domain
|
|
58
58
|
- **Context Awareness** - Tools receive typed context automatically
|
|
59
59
|
|
|
60
|
+
</td>
|
|
61
|
+
</tr>
|
|
62
|
+
<tr>
|
|
63
|
+
<td width="50%">
|
|
64
|
+
|
|
65
|
+
### 💾 **Optional Persistence**
|
|
66
|
+
|
|
67
|
+
- **Provider Pattern** - Simple API like AI providers
|
|
68
|
+
- **Prisma Ready** - Built-in ORM adapter
|
|
69
|
+
- **Auto-save** - Automatic session & message persistence
|
|
70
|
+
- **Extensible** - Create adapters for any database
|
|
71
|
+
|
|
72
|
+
</td>
|
|
73
|
+
<td width="50%">
|
|
74
|
+
|
|
75
|
+
### 🎯 **Smart Routing**
|
|
76
|
+
|
|
77
|
+
- **Deterministic IDs** - Consistent identifiers across restarts
|
|
78
|
+
- **Route Scoping** - Control tool access per route
|
|
79
|
+
- **Rules & Prohibitions** - Fine-grained behavior control
|
|
80
|
+
|
|
60
81
|
</td>
|
|
61
82
|
</tr>
|
|
62
83
|
</table>
|
|
@@ -225,6 +246,7 @@ See [streaming-agent.ts](./examples/streaming-agent.ts) for complete examples.
|
|
|
225
246
|
- **[Getting Started](./docs/GETTING_STARTED.md)** - Your first agent in 5 minutes
|
|
226
247
|
- **[Constructor Options](./docs/CONSTRUCTOR_OPTIONS.md)** - Declarative vs Fluent API patterns
|
|
227
248
|
- **[Context Management](./docs/CONTEXT_MANAGEMENT.md)** - Persistent conversations & state management
|
|
249
|
+
- **[Persistence](./docs/PERSISTENCE.md)** - Optional database persistence with Prisma **(NEW!)**
|
|
228
250
|
- **[API Reference](./docs/API_REFERENCE.md)** - Complete API documentation
|
|
229
251
|
- **[Architecture](./docs/STRUCTURE.md)** - Package structure and design principles
|
|
230
252
|
|
|
@@ -595,6 +617,66 @@ const saveTool = defineTool("save_data", async (ctx, data) => {
|
|
|
595
617
|
|
|
596
618
|
See [Context Management Guide](./docs/CONTEXT_MANAGEMENT.md) for complete patterns and best practices.
|
|
597
619
|
|
|
620
|
+
### 💾 Optional Database Persistence (NEW!)
|
|
621
|
+
|
|
622
|
+
For **production applications** that need to persist sessions and messages:
|
|
623
|
+
|
|
624
|
+
```typescript
|
|
625
|
+
import { Agent, PrismaAdapter } from "@falai/agent";
|
|
626
|
+
import { PrismaClient } from "@prisma/client";
|
|
627
|
+
|
|
628
|
+
const prisma = new PrismaClient();
|
|
629
|
+
|
|
630
|
+
const agent = new Agent({
|
|
631
|
+
name: "My Agent",
|
|
632
|
+
ai: provider,
|
|
633
|
+
// ✨ Just add this!
|
|
634
|
+
persistence: {
|
|
635
|
+
adapter: new PrismaAdapter({ prisma }),
|
|
636
|
+
autoSave: true,
|
|
637
|
+
userId: "user_123",
|
|
638
|
+
},
|
|
639
|
+
});
|
|
640
|
+
|
|
641
|
+
// Access persistence manager
|
|
642
|
+
const persistence = agent.getPersistenceManager();
|
|
643
|
+
|
|
644
|
+
// Create a session
|
|
645
|
+
const session = await persistence.createSession({
|
|
646
|
+
userId: "user_123",
|
|
647
|
+
agentName: "My Agent",
|
|
648
|
+
});
|
|
649
|
+
|
|
650
|
+
// Load history
|
|
651
|
+
const history = await persistence.loadSessionHistory(session.id);
|
|
652
|
+
|
|
653
|
+
// Generate response
|
|
654
|
+
const response = await agent.respond({ history });
|
|
655
|
+
|
|
656
|
+
// Optionally Save message (automatically saves if autoSave: true)
|
|
657
|
+
await persistence.saveMessage({
|
|
658
|
+
sessionId: session.id,
|
|
659
|
+
role: "agent",
|
|
660
|
+
content: response.message,
|
|
661
|
+
});
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
**Features:**
|
|
665
|
+
|
|
666
|
+
- ✅ **Provider Pattern** - Simple API like AI providers
|
|
667
|
+
- ✅ **Prisma Built-in** - Ready-to-use ORM adapter
|
|
668
|
+
- ✅ **Auto-save** - Automatic message tracking
|
|
669
|
+
- ✅ **Custom Adapters** - Create for any database (MongoDB, Redis, etc.)
|
|
670
|
+
- ✅ **Lifecycle Integration** - Works seamlessly with context hooks
|
|
671
|
+
|
|
672
|
+
**Setup (3 steps):**
|
|
673
|
+
|
|
674
|
+
1. Install: `npm install @prisma/client prisma`
|
|
675
|
+
2. Copy schema from `examples/prisma-schema.example.prisma`
|
|
676
|
+
3. Run: `npx prisma generate && npx prisma migrate dev`
|
|
677
|
+
|
|
678
|
+
See [Persistence Guide](./docs/PERSISTENCE.md) for complete documentation and custom adapter examples.
|
|
679
|
+
|
|
598
680
|
### 📖 Domain Glossary
|
|
599
681
|
|
|
600
682
|
Teach your agent business-specific language:
|
|
@@ -751,6 +833,16 @@ const openrouterProvider = new OpenRouterProvider({
|
|
|
751
833
|
- 🔧 Two approaches: lifecycle hooks vs context provider
|
|
752
834
|
- 📝 Complete onboarding flow across multiple turns
|
|
753
835
|
|
|
836
|
+
### 💾 [Prisma Persistence](./examples/prisma-persistence.ts) **(NEW!)**
|
|
837
|
+
|
|
838
|
+
**Production-ready database persistence:**
|
|
839
|
+
|
|
840
|
+
- ✨ Provider pattern - simple as `new PrismaAdapter({ prisma })`
|
|
841
|
+
- 🗄️ Automatic session and message persistence
|
|
842
|
+
- 🔄 Seamless lifecycle hook integration
|
|
843
|
+
- 📊 Complete examples: basic, advanced, and minimal
|
|
844
|
+
- 🎯 3-step setup with Prisma ORM
|
|
845
|
+
|
|
754
846
|
### 🏢 [Business Onboarding](./examples/business-onboarding.ts)
|
|
755
847
|
|
|
756
848
|
**Production-ready business onboarding with advanced patterns:**
|
|
@@ -810,6 +902,78 @@ Control agent behavior and communication style per route:
|
|
|
810
902
|
- 💬 Different communication styles per route
|
|
811
903
|
- 🎨 Perfect for multi-channel bots (WhatsApp, email, chat)
|
|
812
904
|
|
|
905
|
+
### 💾 [Prisma Persistence](./examples/prisma-persistence.ts)
|
|
906
|
+
|
|
907
|
+
Complete example of auto-saving sessions and messages with Prisma ORM:
|
|
908
|
+
|
|
909
|
+
- 💾 Auto-save sessions and messages to database
|
|
910
|
+
- 🔄 Load conversation history on agent initialization
|
|
911
|
+
- 📊 Track conversation state across restarts
|
|
912
|
+
- 🎯 Full example with lifecycle hooks
|
|
913
|
+
- 📝 Includes schema example
|
|
914
|
+
|
|
915
|
+
### ⚡ [Redis Persistence](./examples/redis-persistence.ts)
|
|
916
|
+
|
|
917
|
+
Fast, in-memory persistence for high-throughput applications:
|
|
918
|
+
|
|
919
|
+
- 🚀 Lightning-fast session storage
|
|
920
|
+
- ⏰ Configurable TTLs for auto-cleanup
|
|
921
|
+
- 🔑 Custom key prefixes
|
|
922
|
+
- 💨 Perfect for real-time chat applications
|
|
923
|
+
|
|
924
|
+
---
|
|
925
|
+
|
|
926
|
+
## 💾 Database Adapters
|
|
927
|
+
|
|
928
|
+
**Optional persistence** - Choose the database that fits your needs. All adapters follow the same simple provider pattern:
|
|
929
|
+
|
|
930
|
+
### 🎯 Available Adapters
|
|
931
|
+
|
|
932
|
+
| Adapter | Use Case | Install |
|
|
933
|
+
| --------------------- | --------------------------------- | ---------------------------- |
|
|
934
|
+
| **PrismaAdapter** | Type-safe ORM with migrations | `npm install @prisma/client` |
|
|
935
|
+
| **RedisAdapter** | Fast in-memory for real-time apps | `npm install ioredis` |
|
|
936
|
+
| **MongoAdapter** | Flexible document storage | `npm install mongodb` |
|
|
937
|
+
| **PostgreSQLAdapter** | Raw SQL with auto table creation | `npm install pg` |
|
|
938
|
+
|
|
939
|
+
### ⚡ Quick Setup
|
|
940
|
+
|
|
941
|
+
```typescript
|
|
942
|
+
import { Agent, PrismaAdapter } from "@falai/agent";
|
|
943
|
+
import { PrismaClient } from "@prisma/client";
|
|
944
|
+
|
|
945
|
+
const prisma = new PrismaClient();
|
|
946
|
+
|
|
947
|
+
const agent = new Agent({
|
|
948
|
+
name: "My Agent",
|
|
949
|
+
ai: provider,
|
|
950
|
+
persistence: {
|
|
951
|
+
adapter: new PrismaAdapter({ prisma }),
|
|
952
|
+
userId: "user_123",
|
|
953
|
+
autoSave: true, // Automatically save all messages
|
|
954
|
+
},
|
|
955
|
+
});
|
|
956
|
+
```
|
|
957
|
+
|
|
958
|
+
That's it! Sessions and messages are now automatically persisted.
|
|
959
|
+
|
|
960
|
+
### 📚 Full Documentation
|
|
961
|
+
|
|
962
|
+
See [**docs/PERSISTENCE.md**](./docs/PERSISTENCE.md) for:
|
|
963
|
+
|
|
964
|
+
- Complete adapter API reference
|
|
965
|
+
- Custom table names & field mappings
|
|
966
|
+
- Lifecycle hooks for persistence
|
|
967
|
+
- Creating custom adapters
|
|
968
|
+
- Migration guides
|
|
969
|
+
|
|
970
|
+
See [**docs/ADAPTERS.md**](./docs/ADAPTERS.md) for:
|
|
971
|
+
|
|
972
|
+
- Detailed adapter comparison
|
|
973
|
+
- Configuration examples for each database
|
|
974
|
+
- Performance characteristics
|
|
975
|
+
- Type safety guarantees
|
|
976
|
+
|
|
813
977
|
---
|
|
814
978
|
|
|
815
979
|
## 🏗️ Architecture
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB adapter for persistence
|
|
3
|
+
* Document-based storage with flexible schema
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionRepository, MessageRepository, PersistenceAdapter } from "../types/persistence";
|
|
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
|
+
* ai: 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 implements PersistenceAdapter {
|
|
90
|
+
readonly sessionRepository: SessionRepository;
|
|
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,EACV,iBAAiB,EACjB,iBAAiB,EAIjB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B;;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,YAAa,YAAW,kBAAkB;IACrD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,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,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB adapter for persistence
|
|
3
|
+
* Document-based storage with flexible schema
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* MongoDB Adapter - Provider-style API for MongoDB persistence
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { MongoClient } from 'mongodb';
|
|
11
|
+
* import { Agent, MongoAdapter } from '@falai/agent';
|
|
12
|
+
*
|
|
13
|
+
* const client = new MongoClient('mongodb://localhost:27017');
|
|
14
|
+
* await client.connect();
|
|
15
|
+
*
|
|
16
|
+
* const agent = new Agent({
|
|
17
|
+
* name: "My Agent",
|
|
18
|
+
* ai: provider,
|
|
19
|
+
* persistence: {
|
|
20
|
+
* adapter: new MongoAdapter({
|
|
21
|
+
* client,
|
|
22
|
+
* databaseName: 'myapp',
|
|
23
|
+
* }),
|
|
24
|
+
* userId: "user_123",
|
|
25
|
+
* },
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class MongoAdapter {
|
|
30
|
+
constructor(options) {
|
|
31
|
+
this.client = options.client;
|
|
32
|
+
this.db = options.client.db(options.databaseName);
|
|
33
|
+
const sessionCollection = options.collections?.sessions || "agent_sessions";
|
|
34
|
+
const messageCollection = options.collections?.messages || "agent_messages";
|
|
35
|
+
this.sessionRepository = new MongoSessionRepository(this.db.collection(sessionCollection));
|
|
36
|
+
this.messageRepository = new MongoMessageRepository(this.db.collection(messageCollection));
|
|
37
|
+
}
|
|
38
|
+
async disconnect() {
|
|
39
|
+
await this.client.close();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* MongoDB Session Repository
|
|
44
|
+
*/
|
|
45
|
+
class MongoSessionRepository {
|
|
46
|
+
constructor(collection) {
|
|
47
|
+
this.collection = collection;
|
|
48
|
+
}
|
|
49
|
+
async create(data) {
|
|
50
|
+
const now = new Date();
|
|
51
|
+
const session = {
|
|
52
|
+
...data,
|
|
53
|
+
id: `session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
|
|
54
|
+
status: data.status || "active",
|
|
55
|
+
messageCount: data.messageCount || 0,
|
|
56
|
+
createdAt: now,
|
|
57
|
+
updatedAt: now,
|
|
58
|
+
};
|
|
59
|
+
await this.collection.insertOne(session);
|
|
60
|
+
return session;
|
|
61
|
+
}
|
|
62
|
+
async findById(id) {
|
|
63
|
+
return await this.collection.findOne({ id });
|
|
64
|
+
}
|
|
65
|
+
async findActiveByUserId(userId) {
|
|
66
|
+
return await this.collection.findOne({ userId, status: "active" });
|
|
67
|
+
}
|
|
68
|
+
async findByUserId(userId, limit = 100) {
|
|
69
|
+
return await this.collection
|
|
70
|
+
.find({ userId })
|
|
71
|
+
.sort({ createdAt: -1 })
|
|
72
|
+
.limit(limit)
|
|
73
|
+
.toArray();
|
|
74
|
+
}
|
|
75
|
+
async update(id, data) {
|
|
76
|
+
const result = await this.collection.updateOne({ id }, { $set: { ...data, updatedAt: new Date() } });
|
|
77
|
+
if (result.matchedCount === 0)
|
|
78
|
+
return null;
|
|
79
|
+
return await this.findById(id);
|
|
80
|
+
}
|
|
81
|
+
async updateStatus(id, status, completedAt) {
|
|
82
|
+
const updateData = {
|
|
83
|
+
status,
|
|
84
|
+
updatedAt: new Date(),
|
|
85
|
+
};
|
|
86
|
+
if (completedAt) {
|
|
87
|
+
updateData.completedAt = completedAt;
|
|
88
|
+
}
|
|
89
|
+
const result = await this.collection.updateOne({ id }, { $set: updateData });
|
|
90
|
+
if (result.matchedCount === 0)
|
|
91
|
+
return null;
|
|
92
|
+
return await this.findById(id);
|
|
93
|
+
}
|
|
94
|
+
async updateCollectedData(id, collectedData) {
|
|
95
|
+
return await this.update(id, { collectedData });
|
|
96
|
+
}
|
|
97
|
+
async updateRouteState(id, route, state) {
|
|
98
|
+
return await this.update(id, {
|
|
99
|
+
currentRoute: route,
|
|
100
|
+
currentState: state,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
async incrementMessageCount(id) {
|
|
104
|
+
const result = await this.collection.updateOne({ id }, {
|
|
105
|
+
$inc: { messageCount: 1 },
|
|
106
|
+
$set: { lastMessageAt: new Date(), updatedAt: new Date() },
|
|
107
|
+
});
|
|
108
|
+
if (result.matchedCount === 0)
|
|
109
|
+
return null;
|
|
110
|
+
return await this.findById(id);
|
|
111
|
+
}
|
|
112
|
+
async delete(id) {
|
|
113
|
+
const result = await this.collection.deleteOne({ id });
|
|
114
|
+
return result.deletedCount > 0;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* MongoDB Message Repository
|
|
119
|
+
*/
|
|
120
|
+
class MongoMessageRepository {
|
|
121
|
+
constructor(collection) {
|
|
122
|
+
this.collection = collection;
|
|
123
|
+
}
|
|
124
|
+
async create(data) {
|
|
125
|
+
const message = {
|
|
126
|
+
...data,
|
|
127
|
+
id: `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`,
|
|
128
|
+
createdAt: new Date(),
|
|
129
|
+
};
|
|
130
|
+
await this.collection.insertOne(message);
|
|
131
|
+
return message;
|
|
132
|
+
}
|
|
133
|
+
async findById(id) {
|
|
134
|
+
return await this.collection.findOne({ id });
|
|
135
|
+
}
|
|
136
|
+
async findBySessionId(sessionId, limit = 1000) {
|
|
137
|
+
return await this.collection
|
|
138
|
+
.find({ sessionId })
|
|
139
|
+
.sort({ createdAt: 1 })
|
|
140
|
+
.limit(limit)
|
|
141
|
+
.toArray();
|
|
142
|
+
}
|
|
143
|
+
async findByUserId(userId, limit = 100) {
|
|
144
|
+
return await this.collection
|
|
145
|
+
.find({ userId })
|
|
146
|
+
.sort({ createdAt: -1 })
|
|
147
|
+
.limit(limit)
|
|
148
|
+
.toArray();
|
|
149
|
+
}
|
|
150
|
+
async delete(id) {
|
|
151
|
+
const result = await this.collection.deleteOne({ id });
|
|
152
|
+
return result.deletedCount > 0;
|
|
153
|
+
}
|
|
154
|
+
async deleteBySessionId(sessionId) {
|
|
155
|
+
const result = await this.collection.deleteMany({ sessionId });
|
|
156
|
+
return result.deletedCount;
|
|
157
|
+
}
|
|
158
|
+
async deleteByUserId(userId) {
|
|
159
|
+
const result = await this.collection.deleteMany({ userId });
|
|
160
|
+
return result.deletedCount;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# 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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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL adapter for persistence
|
|
3
|
+
* Raw SQL adapter for PostgreSQL with custom schemas
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionRepository, MessageRepository, PersistenceAdapter } from "../types/persistence";
|
|
6
|
+
/**
|
|
7
|
+
* PostgreSQL query result interface
|
|
8
|
+
*/
|
|
9
|
+
export interface PgQueryResult<T = Record<string, unknown>> {
|
|
10
|
+
rows: T[];
|
|
11
|
+
rowCount: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* PostgreSQL client interface - matches pg (node-postgres)
|
|
15
|
+
*/
|
|
16
|
+
export interface PgClient {
|
|
17
|
+
query<T = Record<string, unknown>>(sql: string, values?: unknown[]): Promise<PgQueryResult<T>>;
|
|
18
|
+
end(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Options for PostgreSQL adapter
|
|
22
|
+
*/
|
|
23
|
+
export interface PostgreSQLAdapterOptions {
|
|
24
|
+
/**
|
|
25
|
+
* PostgreSQL client instance (from 'pg' package)
|
|
26
|
+
*/
|
|
27
|
+
client: PgClient;
|
|
28
|
+
/**
|
|
29
|
+
* Table names (default: "agent_sessions" and "agent_messages")
|
|
30
|
+
*/
|
|
31
|
+
tables?: {
|
|
32
|
+
sessions?: string;
|
|
33
|
+
messages?: string;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* PostgreSQL Adapter - Provider-style API for PostgreSQL persistence
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import { Client } from 'pg';
|
|
42
|
+
* import { Agent, PostgreSQLAdapter } from '@falai/agent';
|
|
43
|
+
*
|
|
44
|
+
* const client = new Client({
|
|
45
|
+
* host: 'localhost',
|
|
46
|
+
* port: 5432,
|
|
47
|
+
* database: 'myapp',
|
|
48
|
+
* user: 'postgres',
|
|
49
|
+
* password: 'password',
|
|
50
|
+
* });
|
|
51
|
+
* await client.connect();
|
|
52
|
+
*
|
|
53
|
+
* const agent = new Agent({
|
|
54
|
+
* name: "My Agent",
|
|
55
|
+
* ai: provider,
|
|
56
|
+
* persistence: {
|
|
57
|
+
* adapter: new PostgreSQLAdapter({ client }),
|
|
58
|
+
* userId: "user_123",
|
|
59
|
+
* },
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare class PostgreSQLAdapter implements PersistenceAdapter {
|
|
64
|
+
readonly sessionRepository: SessionRepository;
|
|
65
|
+
readonly messageRepository: MessageRepository;
|
|
66
|
+
private client;
|
|
67
|
+
constructor(options: PostgreSQLAdapterOptions);
|
|
68
|
+
initialize(): Promise<void>;
|
|
69
|
+
disconnect(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=PostgreSQLAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostgreSQLAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/PostgreSQLAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAIjB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,MAAM,CAAW;gBAEb,OAAO,EAAE,wBAAwB;IAiBvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|