@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.
- package/README.md +192 -16
- 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/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.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/index.d.ts +6 -0
- package/dist/cjs/adapters/index.d.ts.map +1 -0
- package/dist/cjs/adapters/index.js +9 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/core/Agent.d.ts +35 -0
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +153 -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 +6 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +43 -0
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/providers/AnthropicProvider.js +328 -0
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/cjs/providers/GeminiProvider.d.ts +4 -1
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +96 -0
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +4 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +115 -0
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts +4 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +115 -0
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/providers/index.d.ts +13 -0
- package/dist/cjs/providers/index.d.ts.map +1 -0
- package/dist/cjs/providers/index.js +16 -0
- package/dist/cjs/providers/index.js.map +1 -0
- 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/ai.d.ts +28 -0
- package/dist/cjs/types/ai.d.ts.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 +35 -0
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +153 -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 +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +43 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/providers/AnthropicProvider.js +321 -0
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts +4 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +96 -0
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +4 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +115 -0
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +4 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +115 -0
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +9 -0
- package/dist/providers/index.js.map +1 -0
- 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/ai.d.ts +28 -0
- package/dist/types/ai.d.ts.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/API_REFERENCE.md +260 -2
- package/docs/PERSISTENCE.md +419 -0
- package/docs/PROVIDERS.md +139 -2
- package/examples/business-onboarding.ts +5 -4
- package/examples/declarative-agent.ts +1 -1
- package/examples/domain-scoping.ts +5 -4
- package/examples/healthcare-agent.ts +4 -4
- package/examples/openai-agent.ts +6 -4
- package/examples/prisma-persistence.ts +313 -0
- package/examples/prisma-schema.example.prisma +74 -0
- package/examples/rules-prohibitions.ts +4 -4
- package/examples/streaming-agent.ts +371 -0
- package/examples/travel-agent.ts +7 -4
- package/package.json +10 -1
- package/src/adapters/PrismaAdapter.ts +510 -0
- package/src/adapters/index.ts +10 -0
- package/src/core/Agent.ts +205 -0
- package/src/core/PersistenceManager.ts +222 -0
- package/src/index.ts +23 -0
- package/src/providers/AnthropicProvider.ts +467 -0
- package/src/providers/GeminiProvider.ts +135 -0
- package/src/providers/OpenAIProvider.ts +157 -0
- package/src/providers/OpenRouterProvider.ts +157 -0
- package/src/providers/index.ts +16 -0
- package/src/types/agent.ts +3 -0
- package/src/types/ai.ts +32 -0
- package/src/types/index.ts +14 -0
- package/src/types/persistence.ts +234 -0
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
### 🚀 **Production Ready**
|
|
35
35
|
|
|
36
36
|
- **Robust Retry Logic** - Exponential backoff & backup models
|
|
37
|
-
- **AI Provider Strategy** - Pluggable backends (Gemini, OpenAI, OpenRouter)
|
|
37
|
+
- **AI Provider Strategy** - Pluggable backends (Claude, Gemini, OpenAI, OpenRouter)
|
|
38
38
|
- **Prompt Composition** - Sophisticated prompt building system
|
|
39
39
|
|
|
40
40
|
</td>
|
|
@@ -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>
|
|
@@ -87,8 +108,10 @@ Get up and running in 60 seconds:
|
|
|
87
108
|
```typescript
|
|
88
109
|
import {
|
|
89
110
|
Agent,
|
|
111
|
+
AnthropicProvider,
|
|
90
112
|
GeminiProvider,
|
|
91
|
-
OpenAIProvider,
|
|
113
|
+
OpenAIProvider,
|
|
114
|
+
OpenRouterProvider,
|
|
92
115
|
createMessageEvent,
|
|
93
116
|
EventSource,
|
|
94
117
|
} from "@falai/agent";
|
|
@@ -101,15 +124,25 @@ interface SupportContext {
|
|
|
101
124
|
}
|
|
102
125
|
|
|
103
126
|
// 2️⃣ Create AI provider (choose one)
|
|
104
|
-
const ai = new
|
|
105
|
-
apiKey: process.env.
|
|
106
|
-
model: "
|
|
127
|
+
const ai = new AnthropicProvider({
|
|
128
|
+
apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
129
|
+
model: "claude-sonnet-4-5",
|
|
107
130
|
});
|
|
108
131
|
|
|
109
|
-
// Or use
|
|
132
|
+
// Or use other providers:
|
|
133
|
+
// const ai = new GeminiProvider({
|
|
134
|
+
// apiKey: process.env.GEMINI_API_KEY!,
|
|
135
|
+
// model: "models/gemini-2.5-flash",
|
|
136
|
+
// });
|
|
137
|
+
|
|
110
138
|
// const ai = new OpenAIProvider({
|
|
111
139
|
// apiKey: process.env.OPENAI_API_KEY!,
|
|
112
|
-
// model: "gpt-5",
|
|
140
|
+
// model: "gpt-5",
|
|
141
|
+
// });
|
|
142
|
+
|
|
143
|
+
// const ai = new OpenRouterProvider({
|
|
144
|
+
// apiKey: process.env.OPENROUTER_API_KEY!,
|
|
145
|
+
// model: "anthropic/claude-sonnet-4-5", // Access to 200+ models
|
|
113
146
|
// });
|
|
114
147
|
|
|
115
148
|
// 3️⃣ Initialize your agent - two ways!
|
|
@@ -174,6 +207,36 @@ const response = await agent.respond({
|
|
|
174
207
|
console.log(response.message); // 🎉 AI-powered response ready!
|
|
175
208
|
```
|
|
176
209
|
|
|
210
|
+
### ⚡ Streaming Responses (NEW!)
|
|
211
|
+
|
|
212
|
+
Stream AI responses in real-time for better user experience:
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Use respondStream for real-time streaming
|
|
216
|
+
for await (const chunk of agent.respondStream({ history })) {
|
|
217
|
+
// chunk.delta contains the new text
|
|
218
|
+
process.stdout.write(chunk.delta);
|
|
219
|
+
|
|
220
|
+
if (chunk.done) {
|
|
221
|
+
// Stream complete - access final metadata
|
|
222
|
+
console.log("\n✅ Complete!");
|
|
223
|
+
console.log("Route:", chunk.route?.title);
|
|
224
|
+
console.log("Tool calls:", chunk.toolCalls?.length);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Benefits:**
|
|
230
|
+
|
|
231
|
+
- ✨ Real-time response generation
|
|
232
|
+
- 🎯 Better perceived performance
|
|
233
|
+
- 🛑 Cancellable with AbortSignal
|
|
234
|
+
- 📊 Access to route/state/tool information in final chunk
|
|
235
|
+
|
|
236
|
+
**Supported Providers:** All providers support streaming (Anthropic, OpenAI, Gemini, OpenRouter)
|
|
237
|
+
|
|
238
|
+
See [streaming-agent.ts](./examples/streaming-agent.ts) for complete examples.
|
|
239
|
+
|
|
177
240
|
---
|
|
178
241
|
|
|
179
242
|
## 📚 Documentation
|
|
@@ -183,6 +246,7 @@ console.log(response.message); // 🎉 AI-powered response ready!
|
|
|
183
246
|
- **[Getting Started](./docs/GETTING_STARTED.md)** - Your first agent in 5 minutes
|
|
184
247
|
- **[Constructor Options](./docs/CONSTRUCTOR_OPTIONS.md)** - Declarative vs Fluent API patterns
|
|
185
248
|
- **[Context Management](./docs/CONTEXT_MANAGEMENT.md)** - Persistent conversations & state management
|
|
249
|
+
- **[Persistence](./docs/PERSISTENCE.md)** - Optional database persistence with Prisma **(NEW!)**
|
|
186
250
|
- **[API Reference](./docs/API_REFERENCE.md)** - Complete API documentation
|
|
187
251
|
- **[Architecture](./docs/STRUCTURE.md)** - Package structure and design principles
|
|
188
252
|
|
|
@@ -553,6 +617,66 @@ const saveTool = defineTool("save_data", async (ctx, data) => {
|
|
|
553
617
|
|
|
554
618
|
See [Context Management Guide](./docs/CONTEXT_MANAGEMENT.md) for complete patterns and best practices.
|
|
555
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
|
+
|
|
556
680
|
### 📖 Domain Glossary
|
|
557
681
|
|
|
558
682
|
Teach your agent business-specific language:
|
|
@@ -616,9 +740,27 @@ const event = createMessageEvent(
|
|
|
616
740
|
|
|
617
741
|
### ⚙️ Advanced Configuration
|
|
618
742
|
|
|
619
|
-
Fine-tune AI provider behavior - works with
|
|
743
|
+
Fine-tune AI provider behavior - works with all providers:
|
|
620
744
|
|
|
621
745
|
```typescript
|
|
746
|
+
// Anthropic (Claude) configuration
|
|
747
|
+
const anthropicProvider = new AnthropicProvider({
|
|
748
|
+
apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
749
|
+
model: "claude-sonnet-4-5", // Primary model
|
|
750
|
+
backupModels: [
|
|
751
|
+
"claude-opus-4-1", // Backup if primary fails
|
|
752
|
+
"claude-sonnet-4-0", // Stable fallback
|
|
753
|
+
],
|
|
754
|
+
config: {
|
|
755
|
+
temperature: 0.7,
|
|
756
|
+
top_p: 0.9,
|
|
757
|
+
},
|
|
758
|
+
retryConfig: {
|
|
759
|
+
timeout: 60000, // 60s timeout
|
|
760
|
+
retries: 3, // 3 attempts with exponential backoff
|
|
761
|
+
},
|
|
762
|
+
});
|
|
763
|
+
|
|
622
764
|
// Gemini configuration
|
|
623
765
|
const geminiProvider = new GeminiProvider({
|
|
624
766
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
@@ -628,8 +770,8 @@ const geminiProvider = new GeminiProvider({
|
|
|
628
770
|
"models/gemini-2.0-flash",
|
|
629
771
|
],
|
|
630
772
|
retryConfig: {
|
|
631
|
-
timeout: 60000,
|
|
632
|
-
retries: 3,
|
|
773
|
+
timeout: 60000,
|
|
774
|
+
retries: 3,
|
|
633
775
|
},
|
|
634
776
|
});
|
|
635
777
|
|
|
@@ -643,6 +785,19 @@ const openaiProvider = new OpenAIProvider({
|
|
|
643
785
|
retries: 3,
|
|
644
786
|
},
|
|
645
787
|
});
|
|
788
|
+
|
|
789
|
+
// OpenRouter configuration (access to 200+ models)
|
|
790
|
+
const openrouterProvider = new OpenRouterProvider({
|
|
791
|
+
apiKey: process.env.OPENROUTER_API_KEY!,
|
|
792
|
+
model: "anthropic/claude-sonnet-4-5",
|
|
793
|
+
backupModels: ["openai/gpt-5", "google/gemini-2.5-flash"],
|
|
794
|
+
siteUrl: "https://yourapp.com",
|
|
795
|
+
siteName: "Your App Name",
|
|
796
|
+
retryConfig: {
|
|
797
|
+
timeout: 60000,
|
|
798
|
+
retries: 3,
|
|
799
|
+
},
|
|
800
|
+
});
|
|
646
801
|
```
|
|
647
802
|
|
|
648
803
|
---
|
|
@@ -658,6 +813,16 @@ const openaiProvider = new OpenAIProvider({
|
|
|
658
813
|
- 🔗 Route references by title in observations
|
|
659
814
|
- ➕ Dynamic additions after construction
|
|
660
815
|
|
|
816
|
+
### ⚡ [Streaming Responses](./examples/streaming-agent.ts) **(NEW!)**
|
|
817
|
+
|
|
818
|
+
**Real-time streaming responses for better UX:**
|
|
819
|
+
|
|
820
|
+
- 🌊 Stream responses from all providers (Anthropic, OpenAI, Gemini, OpenRouter)
|
|
821
|
+
- 📡 Real-time text generation with `respondStream`
|
|
822
|
+
- 🛑 Cancellable streams with AbortSignal
|
|
823
|
+
- 📊 Access route, state, and tool information
|
|
824
|
+
- 🎯 5 comprehensive examples covering different use cases
|
|
825
|
+
|
|
661
826
|
### 💾 [Persistent Onboarding Agent](./examples/persistent-onboarding.ts)
|
|
662
827
|
|
|
663
828
|
**Multi-turn conversation with state persistence:**
|
|
@@ -668,6 +833,16 @@ const openaiProvider = new OpenAIProvider({
|
|
|
668
833
|
- 🔧 Two approaches: lifecycle hooks vs context provider
|
|
669
834
|
- 📝 Complete onboarding flow across multiple turns
|
|
670
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
|
+
|
|
671
846
|
### 🏢 [Business Onboarding](./examples/business-onboarding.ts)
|
|
672
847
|
|
|
673
848
|
**Production-ready business onboarding with advanced patterns:**
|
|
@@ -699,13 +874,14 @@ Healthcare-focused agent demonstrating:
|
|
|
699
874
|
- 🔐 Sensitive data handling
|
|
700
875
|
- ⚠️ Urgent case prioritization
|
|
701
876
|
|
|
702
|
-
### 🌐
|
|
877
|
+
### 🌐 Multiple Provider Examples
|
|
703
878
|
|
|
704
|
-
|
|
879
|
+
See how different AI providers work:
|
|
705
880
|
|
|
706
|
-
-
|
|
707
|
-
-
|
|
708
|
-
-
|
|
881
|
+
- **[OpenAI Agent](./examples/openai-agent.ts)** - GPT-5 integration
|
|
882
|
+
- **[Healthcare Agent](./examples/healthcare-agent.ts)** - Claude 3.5 Sonnet
|
|
883
|
+
- **[Travel Agent](./examples/travel-agent.ts)** - OpenRouter with backup models
|
|
884
|
+
- 🔄 All with backup model configuration and retry settings
|
|
709
885
|
- 🌤️ Weather checking example
|
|
710
886
|
|
|
711
887
|
### 🔐 [Domain Scoping](./examples/domain-scoping.ts)
|
|
@@ -734,7 +910,7 @@ Control agent behavior and communication style per route:
|
|
|
734
910
|
src/
|
|
735
911
|
├── types/ # Type definitions (strongly typed contracts)
|
|
736
912
|
├── core/ # Core framework (Agent, Route, State, Tools, etc.)
|
|
737
|
-
├── providers/ # AI providers (Gemini
|
|
913
|
+
├── providers/ # AI providers (Anthropic, Gemini, OpenAI, OpenRouter)
|
|
738
914
|
├── utils/ # Utilities (retry, timeout, helpers)
|
|
739
915
|
├── constants/ # Constants (END_ROUTE, symbols)
|
|
740
916
|
└── index.ts # Public API exports
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma adapter for persistence
|
|
3
|
+
* Simple, provider-like API with automatic schema creation
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionRepository, MessageRepository, SessionData, MessageData, PersistenceAdapter } from "../types/persistence";
|
|
6
|
+
/**
|
|
7
|
+
* Prisma model operations
|
|
8
|
+
*/
|
|
9
|
+
export interface PrismaModel {
|
|
10
|
+
create: (params: {
|
|
11
|
+
data: Record<string, unknown>;
|
|
12
|
+
}) => Promise<Record<string, unknown>>;
|
|
13
|
+
findUnique: (params: {
|
|
14
|
+
where: Record<string, unknown>;
|
|
15
|
+
}) => Promise<Record<string, unknown> | null>;
|
|
16
|
+
findFirst: (params: {
|
|
17
|
+
where: Record<string, unknown>;
|
|
18
|
+
orderBy?: Record<string, string>;
|
|
19
|
+
}) => Promise<Record<string, unknown> | null>;
|
|
20
|
+
findMany: (params: {
|
|
21
|
+
where: Record<string, unknown>;
|
|
22
|
+
orderBy?: Record<string, string>;
|
|
23
|
+
take?: number;
|
|
24
|
+
}) => Promise<Array<Record<string, unknown>>>;
|
|
25
|
+
update: (params: {
|
|
26
|
+
where: Record<string, unknown>;
|
|
27
|
+
data: Record<string, unknown>;
|
|
28
|
+
}) => Promise<Record<string, unknown>>;
|
|
29
|
+
delete: (params: {
|
|
30
|
+
where: Record<string, unknown>;
|
|
31
|
+
}) => Promise<Record<string, unknown>>;
|
|
32
|
+
deleteMany: (params: {
|
|
33
|
+
where: Record<string, unknown>;
|
|
34
|
+
}) => Promise<{
|
|
35
|
+
count: number;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Prisma client interface - matches the shape of a generated Prisma client
|
|
40
|
+
*/
|
|
41
|
+
export interface PrismaClient extends Record<string, unknown> {
|
|
42
|
+
$queryRaw?: <T = unknown>(query: TemplateStringsArray | string, ...values: unknown[]) => Promise<T>;
|
|
43
|
+
$executeRaw?: (query: TemplateStringsArray | string, ...values: unknown[]) => Promise<number>;
|
|
44
|
+
$disconnect?: () => Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Configuration for field mappings
|
|
48
|
+
*/
|
|
49
|
+
export interface FieldMappings {
|
|
50
|
+
sessions?: Partial<Record<keyof SessionData, string>>;
|
|
51
|
+
messages?: Partial<Record<keyof MessageData, string>>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Options for creating a Prisma adapter
|
|
55
|
+
*/
|
|
56
|
+
export interface PrismaAdapterOptions {
|
|
57
|
+
/**
|
|
58
|
+
* Prisma client instance
|
|
59
|
+
*/
|
|
60
|
+
prisma: PrismaClient;
|
|
61
|
+
/**
|
|
62
|
+
* Table/model names (defaults to 'agentSession' and 'agentMessage')
|
|
63
|
+
*/
|
|
64
|
+
tables?: {
|
|
65
|
+
sessions?: string;
|
|
66
|
+
messages?: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Field mappings (optional, if your schema uses different field names)
|
|
70
|
+
*/
|
|
71
|
+
fieldMappings?: FieldMappings;
|
|
72
|
+
/**
|
|
73
|
+
* Whether to auto-create tables if they don't exist (default: false)
|
|
74
|
+
* Note: Only works if your Prisma client has $executeRaw method
|
|
75
|
+
*/
|
|
76
|
+
autoMigrate?: boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Prisma Adapter - Provider-style API for Prisma persistence
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import { PrismaClient } from '@prisma/client';
|
|
84
|
+
* import { Agent, PrismaAdapter } from '@falai/agent';
|
|
85
|
+
*
|
|
86
|
+
* const prisma = new PrismaClient();
|
|
87
|
+
*
|
|
88
|
+
* const agent = new Agent({
|
|
89
|
+
* name: "My Agent",
|
|
90
|
+
* ai: provider,
|
|
91
|
+
* persistence: {
|
|
92
|
+
* adapter: new PrismaAdapter({ prisma }),
|
|
93
|
+
* userId: "user_123",
|
|
94
|
+
* },
|
|
95
|
+
* });
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare class PrismaAdapter implements PersistenceAdapter {
|
|
99
|
+
readonly sessionRepository: SessionRepository;
|
|
100
|
+
readonly messageRepository: MessageRepository;
|
|
101
|
+
private prisma;
|
|
102
|
+
private options;
|
|
103
|
+
private initialized;
|
|
104
|
+
constructor(options: PrismaAdapterOptions);
|
|
105
|
+
/**
|
|
106
|
+
* Initialize the adapter (check/create tables)
|
|
107
|
+
* Called automatically if autoMigrate is enabled
|
|
108
|
+
*/
|
|
109
|
+
initialize(): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Disconnect from the database
|
|
112
|
+
*/
|
|
113
|
+
disconnect(): Promise<void>;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=PrismaAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrismaAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/PrismaAdapter.ts"],"names":[],"mappings":"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"}
|