@falai/agent 0.8.1 → 0.9.0-alpha-2
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 +332 -147
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/core/Agent.d.ts +223 -0
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1660 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +73 -20
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +514 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +145 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/src/core/Route.js +343 -0
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +86 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +217 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +45 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +80 -41
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +38 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/src/types/route.d.ts +235 -0
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +65 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/{types → cjs/src/types}/tool.d.ts +17 -13
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +35 -32
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/core/Agent.d.ts +223 -0
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1656 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +71 -18
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +32 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +510 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +145 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/src/core/Route.js +339 -0
- package/dist/src/core/Route.js.map +1 -0
- package/dist/src/core/RoutingEngine.d.ts +129 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +211 -113
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +86 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +213 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +45 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +80 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +80 -41
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +38 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/src/types/route.d.ts +235 -0
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +65 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{cjs → src}/types/tool.d.ts +17 -13
- package/dist/src/types/tool.d.ts.map +1 -0
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +33 -32
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +925 -255
- package/docs/api/overview.md +952 -0
- package/docs/core/agent/README.md +787 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
- package/docs/core/ai-integration/prompt-composition.md +220 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +176 -0
- package/docs/core/conversation-flows/data-collection.md +623 -0
- package/docs/core/conversation-flows/route-dsl.md +502 -0
- package/docs/core/conversation-flows/routes.md +117 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +154 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +348 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +406 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
- package/examples/ai-providers/anthropic-integration.ts +384 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
- package/examples/conversation-flows/completion-transitions.ts +277 -0
- package/examples/core-concepts/basic-agent.ts +443 -0
- package/examples/core-concepts/schema-driven-extraction.ts +305 -0
- package/examples/core-concepts/session-management.ts +406 -0
- package/examples/integrations/database-integration.ts +630 -0
- package/examples/integrations/healthcare-integration.ts +609 -0
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
- package/examples/integrations/server-session-management.ts +307 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
- package/examples/persistence/memory-sessions.ts +495 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/persistence/redis-persistence.ts +490 -0
- package/examples/tools/basic-tools.ts +561 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1431 -526
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +103 -49
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +128 -46
- package/src/core/ResponsePipeline.ts +830 -0
- package/src/core/Route.ts +222 -53
- package/src/core/RoutingEngine.ts +345 -229
- package/src/core/SessionManager.ts +265 -0
- package/src/core/Step.ts +157 -67
- package/src/core/ToolExecutor.ts +52 -43
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +81 -46
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +45 -7
- package/src/types/persistence.ts +45 -28
- package/src/types/route.ts +122 -57
- package/src/types/session.ts +20 -220
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +23 -19
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +204 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts +0 -197
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -203
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -109
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -175
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/types/tool.d.ts.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts +0 -197
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -199
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -109
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts +0 -175
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/declarative-agent.ts +0 -401
- package/examples/domain-scoping.ts +0 -366
- package/examples/healthcare-agent.ts +0 -511
- package/examples/redis-persistence.ts +0 -525
- package/examples/route-transitions.ts +0 -266
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
package/docs/PERSISTENCE.md
DELETED
|
@@ -1,815 +0,0 @@
|
|
|
1
|
-
# Persistence with @falai/agent
|
|
2
|
-
|
|
3
|
-
The `@falai/agent` framework provides optional, flexible persistence for automatically saving conversation sessions, collected data, and messages to your database.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- ✅ **Optional** - Persistence is completely optional
|
|
8
|
-
- ✅ **Provider Pattern** - Simple API like AI providers (`new PrismaAdapter({ prisma })`)
|
|
9
|
-
- ✅ **Type-safe** - Full TypeScript support with generics
|
|
10
|
-
- ✅ **Session Step Integration** - Automatic saving of collected data and conversation progress
|
|
11
|
-
- ✅ **Multiple Adapters** - Prisma, Redis, MongoDB, PostgreSQL, SQLite, OpenSearch, Memory
|
|
12
|
-
- ✅ **Extensible** - Create adapters for any database
|
|
13
|
-
- ✅ **Auto-save** - Automatic session step and message persistence
|
|
14
|
-
|
|
15
|
-
## Quick Start with Prisma
|
|
16
|
-
|
|
17
|
-
### 1. Install Dependencies
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
npm install @prisma/client prisma
|
|
21
|
-
npx prisma init
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### 2. Set Up Schema
|
|
25
|
-
|
|
26
|
-
Copy this schema to `prisma/schema.prisma`:
|
|
27
|
-
|
|
28
|
-
```prisma
|
|
29
|
-
datasource db {
|
|
30
|
-
provider = "postgresql"
|
|
31
|
-
url = env("DATABASE_URL")
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
generator client {
|
|
35
|
-
provider = "prisma-client-js"
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
model AgentSession {
|
|
39
|
-
id String @id @default(cuid())
|
|
40
|
-
userId String? @map("user_id")
|
|
41
|
-
agentName String? @map("agent_name")
|
|
42
|
-
status String @default("active")
|
|
43
|
-
currentRoute String? @map("current_route")
|
|
44
|
-
currentStep String? @map("current_step")
|
|
45
|
-
collectedData Json? @map("collected_data")
|
|
46
|
-
messageCount Int @default(0) @map("message_count")
|
|
47
|
-
lastMessageAt DateTime? @map("last_message_at")
|
|
48
|
-
completedAt DateTime? @map("completed_at")
|
|
49
|
-
createdAt DateTime @default(now()) @map("created_at")
|
|
50
|
-
updatedAt DateTime @updatedAt @map("updated_at")
|
|
51
|
-
|
|
52
|
-
messages AgentMessage[]
|
|
53
|
-
|
|
54
|
-
@@index([userId, status])
|
|
55
|
-
@@map("agent_sessions")
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
model AgentMessage {
|
|
59
|
-
id String @id @default(cuid())
|
|
60
|
-
sessionId String @map("session_id")
|
|
61
|
-
userId String? @map("user_id")
|
|
62
|
-
role String
|
|
63
|
-
content String @db.Text
|
|
64
|
-
route String?
|
|
65
|
-
step String?
|
|
66
|
-
toolCalls Json? @map("tool_calls")
|
|
67
|
-
event Json?
|
|
68
|
-
createdAt DateTime @default(now()) @map("created_at")
|
|
69
|
-
|
|
70
|
-
session AgentSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
|
|
71
|
-
|
|
72
|
-
@@index([sessionId])
|
|
73
|
-
@@map("agent_messages")
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### 3. Generate and Migrate
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
npx prisma generate
|
|
81
|
-
npx prisma migrate dev --name init
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 4. Use in Your Agent with Session Step (That's it!)
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
import { Agent, PrismaAdapter, GeminiProvider } from "@falai/agent";
|
|
88
|
-
import { PrismaClient } from "@prisma/client";
|
|
89
|
-
|
|
90
|
-
const prisma = new PrismaClient();
|
|
91
|
-
|
|
92
|
-
// Define your collected data type
|
|
93
|
-
interface BookingData {
|
|
94
|
-
destination: string;
|
|
95
|
-
date: string;
|
|
96
|
-
passengers: number;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const agent = new Agent({
|
|
100
|
-
name: "My Agent",
|
|
101
|
-
provider: new GeminiProvider({ apiKey: "..." }),
|
|
102
|
-
// ✨ Just add this!
|
|
103
|
-
persistence: {
|
|
104
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
105
|
-
userId: "user_123",
|
|
106
|
-
autoSave: true, // Auto-saves session step!
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
// Create a route with data extraction
|
|
111
|
-
const bookingRoute = agent.createRoute<BookingData>({
|
|
112
|
-
title: "Book Flight",
|
|
113
|
-
schema: {
|
|
114
|
-
type: "object",
|
|
115
|
-
properties: {
|
|
116
|
-
destination: { type: "string" },
|
|
117
|
-
date: { type: "string" },
|
|
118
|
-
passengers: { type: "number" },
|
|
119
|
-
},
|
|
120
|
-
required: ["destination", "date", "passengers"],
|
|
121
|
-
},
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
// Define steps with smart data collecting and custom IDs
|
|
125
|
-
bookingRoute.initialStep
|
|
126
|
-
.nextStep({
|
|
127
|
-
id: "collect_details", // ✅ Custom step ID for easier tracking
|
|
128
|
-
instructions: "Collect booking details",
|
|
129
|
-
collect: ["destination", "date", "passengers"],
|
|
130
|
-
})
|
|
131
|
-
.nextStep({
|
|
132
|
-
id: "confirm_booking", // ✅ Custom step ID
|
|
133
|
-
instructions: "Confirm all details",
|
|
134
|
-
requires: ["destination", "date", "passengers"],
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
// Access persistence methods
|
|
138
|
-
const persistence = agent.getPersistenceManager();
|
|
139
|
-
|
|
140
|
-
// Create a session with step support
|
|
141
|
-
const { sessionData, sessionStep } =
|
|
142
|
-
await persistence.createSessionWithStep<BookingData>({
|
|
143
|
-
userId: "user_123",
|
|
144
|
-
agentName: "My Agent",
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Session ID is automatically set in metadata
|
|
148
|
-
console.log("Session ID:", sessionStep.metadata?.sessionId);
|
|
149
|
-
// Outputs: sessionData.id (e.g., "cuid_abc123")
|
|
150
|
-
|
|
151
|
-
// Load history
|
|
152
|
-
const history = await persistence.loadSessionHistory(sessionData.id);
|
|
153
|
-
|
|
154
|
-
// Generate response with session step
|
|
155
|
-
const response = await agent.respond({
|
|
156
|
-
history,
|
|
157
|
-
session: sessionStep, // Pass session step with ID
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
// Session step is auto-saved! ✨
|
|
161
|
-
console.log("Collected data:", response.session?.data);
|
|
162
|
-
console.log("Current step ID:", response.session?.currentStep?.id); // Custom or auto-generated ID
|
|
163
|
-
|
|
164
|
-
// Save message
|
|
165
|
-
await persistence.saveMessage({
|
|
166
|
-
sessionId: sessionData.id,
|
|
167
|
-
role: "agent",
|
|
168
|
-
content: response.message,
|
|
169
|
-
});
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Configuration Options
|
|
173
|
-
|
|
174
|
-
### Basic Configuration
|
|
175
|
-
|
|
176
|
-
```typescript
|
|
177
|
-
new PrismaAdapter({
|
|
178
|
-
prisma: prismaClient, // Required: Your Prisma client
|
|
179
|
-
});
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Custom Table Names
|
|
183
|
-
|
|
184
|
-
```typescript
|
|
185
|
-
new PrismaAdapter({
|
|
186
|
-
prisma,
|
|
187
|
-
tables: {
|
|
188
|
-
sessions: "myCustomSessions",
|
|
189
|
-
messages: "myCustomMessages",
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Custom Field Mappings
|
|
195
|
-
|
|
196
|
-
If your database uses different field names:
|
|
197
|
-
|
|
198
|
-
```typescript
|
|
199
|
-
new PrismaAdapter({
|
|
200
|
-
prisma,
|
|
201
|
-
fieldMappings: {
|
|
202
|
-
sessions: {
|
|
203
|
-
userId: "user_id",
|
|
204
|
-
createdAt: "created_at",
|
|
205
|
-
updatedAt: "updated_at",
|
|
206
|
-
},
|
|
207
|
-
messages: {
|
|
208
|
-
sessionId: "session_id",
|
|
209
|
-
createdAt: "created_at",
|
|
210
|
-
},
|
|
211
|
-
},
|
|
212
|
-
});
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## Auto-Save Messages
|
|
216
|
-
|
|
217
|
-
Enable automatic message persistence:
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
const agent = new Agent({
|
|
221
|
-
name: "My Agent",
|
|
222
|
-
provider: provider,
|
|
223
|
-
persistence: {
|
|
224
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
225
|
-
autoSave: true, // Default: true
|
|
226
|
-
userId: "user_123",
|
|
227
|
-
},
|
|
228
|
-
});
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
## Using with Lifecycle Hooks
|
|
232
|
-
|
|
233
|
-
The most powerful pattern - auto-sync context with database:
|
|
234
|
-
|
|
235
|
-
```typescript
|
|
236
|
-
const agent = new Agent({
|
|
237
|
-
name: "Smart Assistant",
|
|
238
|
-
provider: provider,
|
|
239
|
-
context: {
|
|
240
|
-
userId: "user_123",
|
|
241
|
-
sessionId: session.id,
|
|
242
|
-
preferences: { theme: "light" },
|
|
243
|
-
},
|
|
244
|
-
hooks: {
|
|
245
|
-
// Load fresh context before each response
|
|
246
|
-
beforeRespond: async (ctx) => {
|
|
247
|
-
const persistence = agent.getPersistenceManager();
|
|
248
|
-
const session = await persistence?.getSession(ctx.sessionId);
|
|
249
|
-
return {
|
|
250
|
-
...ctx,
|
|
251
|
-
preferences: session?.collectedData?.preferences || ctx.preferences,
|
|
252
|
-
};
|
|
253
|
-
},
|
|
254
|
-
// Auto-save context updates
|
|
255
|
-
onContextUpdate: async (ctx) => {
|
|
256
|
-
const persistence = agent.getPersistenceManager();
|
|
257
|
-
await persistence?.updateCollectedData(ctx.sessionId, {
|
|
258
|
-
preferences: ctx.preferences,
|
|
259
|
-
});
|
|
260
|
-
},
|
|
261
|
-
},
|
|
262
|
-
persistence: {
|
|
263
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
264
|
-
},
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
// Now context updates are automatically persisted!
|
|
268
|
-
await agent.updateContext({ preferences: { theme: "dark" } });
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
## Session Step Integration
|
|
272
|
-
|
|
273
|
-
The new architecture automatically saves and loads `SessionState<TData>` which includes:
|
|
274
|
-
|
|
275
|
-
- **Current route and step** - Track conversation progress
|
|
276
|
-
- **Collected data** - All data collected via `schema` and `collect` fields
|
|
277
|
-
- **Route history** - History of route transitions
|
|
278
|
-
- **Metadata** - Session timestamps and custom data
|
|
279
|
-
|
|
280
|
-
### How It Works
|
|
281
|
-
|
|
282
|
-
1. **Auto-Save**: When `autoSave: true`, session step is automatically persisted after each `respond()` call
|
|
283
|
-
2. **Conversion**: `SessionState` is automatically converted to `SessionData` for storage
|
|
284
|
-
3. **Recovery**: Load session step from database to resume conversations
|
|
285
|
-
|
|
286
|
-
### Create Session with Step
|
|
287
|
-
|
|
288
|
-
```typescript
|
|
289
|
-
const { sessionData, sessionStep } =
|
|
290
|
-
await persistence.createSessionWithStep<YourDataType>({
|
|
291
|
-
userId: "user_123",
|
|
292
|
-
agentName: "My Agent",
|
|
293
|
-
initialData: {
|
|
294
|
-
/* optional pre-filled data */
|
|
295
|
-
},
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
// sessionData: Database record
|
|
299
|
-
// sessionStep: In-memory session step ready to use
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
### Save Session Step
|
|
303
|
-
|
|
304
|
-
```typescript
|
|
305
|
-
// Manual save (not needed if autoSave: true)
|
|
306
|
-
await persistence.saveSessionState(sessionId, sessionStep);
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### Load Session Step
|
|
310
|
-
|
|
311
|
-
```typescript
|
|
312
|
-
// Load session step from database
|
|
313
|
-
const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
|
|
314
|
-
|
|
315
|
-
// Load message history
|
|
316
|
-
const history = await persistence.loadSessionHistory(sessionId);
|
|
317
|
-
|
|
318
|
-
// Resume conversation
|
|
319
|
-
const response = await agent.respond({
|
|
320
|
-
history,
|
|
321
|
-
session: sessionStep,
|
|
322
|
-
});
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
### What Gets Persisted
|
|
326
|
-
|
|
327
|
-
The session step stores:
|
|
328
|
-
|
|
329
|
-
```typescript
|
|
330
|
-
{
|
|
331
|
-
currentRoute: {
|
|
332
|
-
id: "book_flight",
|
|
333
|
-
title: "Book a Flight",
|
|
334
|
-
enteredAt: Date
|
|
335
|
-
},
|
|
336
|
-
currentStep: {
|
|
337
|
-
id: "ask_dates",
|
|
338
|
-
description: "Ask about travel dates",
|
|
339
|
-
enteredAt: Date
|
|
340
|
-
},
|
|
341
|
-
data: {
|
|
342
|
-
destination: "Paris",
|
|
343
|
-
departureDate: "2025-06-15",
|
|
344
|
-
passengers: 2
|
|
345
|
-
},
|
|
346
|
-
routeHistory: [
|
|
347
|
-
{ routeId: "book_flight", enteredAt: Date, completed: false }
|
|
348
|
-
],
|
|
349
|
-
metadata: {
|
|
350
|
-
sessionId: "session_123",
|
|
351
|
-
createdAt: Date,
|
|
352
|
-
lastUpdatedAt: Date
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
This data is stored in `collectedData` field as JSON in the database.
|
|
358
|
-
|
|
359
|
-
## PersistenceManager API
|
|
360
|
-
|
|
361
|
-
Access via `agent.getPersistenceManager()`:
|
|
362
|
-
|
|
363
|
-
### Session Methods
|
|
364
|
-
|
|
365
|
-
```typescript
|
|
366
|
-
// Create session with step support (NEW!)
|
|
367
|
-
const { sessionData, sessionStep } =
|
|
368
|
-
await persistence.createSessionWithStep<YourDataType>({
|
|
369
|
-
userId: "user_123",
|
|
370
|
-
agentName: "My Agent",
|
|
371
|
-
initialData: {
|
|
372
|
-
/* optional */
|
|
373
|
-
},
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
// Save session step (NEW!)
|
|
377
|
-
await persistence.saveSessionState(sessionId, sessionStep);
|
|
378
|
-
|
|
379
|
-
// Load session step (NEW!)
|
|
380
|
-
const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
|
|
381
|
-
|
|
382
|
-
// Create session (legacy)
|
|
383
|
-
await persistence.createSession({
|
|
384
|
-
userId: "user_123",
|
|
385
|
-
agentName: "My Agent",
|
|
386
|
-
initialData: { key: "value" },
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
// Get session
|
|
390
|
-
await persistence.getSession(sessionId);
|
|
391
|
-
|
|
392
|
-
// Find active session for user
|
|
393
|
-
await persistence.findActiveSession(userId);
|
|
394
|
-
|
|
395
|
-
// Get all user sessions
|
|
396
|
-
await persistence.getUserSessions(userId);
|
|
397
|
-
|
|
398
|
-
// Update session
|
|
399
|
-
await persistence.updateSessionStatus(sessionId, "completed");
|
|
400
|
-
await persistence.updateCollectedData(sessionId, { key: "value" });
|
|
401
|
-
await persistence.updateRouteStep(sessionId, routeId, stepId);
|
|
402
|
-
|
|
403
|
-
// Complete/abandon session
|
|
404
|
-
await persistence.completeSession(sessionId);
|
|
405
|
-
await persistence.abandonSession(sessionId);
|
|
406
|
-
|
|
407
|
-
// Delete session
|
|
408
|
-
await persistence.deleteSession(sessionId);
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
### Message Methods
|
|
412
|
-
|
|
413
|
-
```typescript
|
|
414
|
-
// Save message
|
|
415
|
-
await persistence.saveMessage({
|
|
416
|
-
sessionId: session.id,
|
|
417
|
-
userId: "user_123",
|
|
418
|
-
role: "user" | "agent" | "system",
|
|
419
|
-
content: "Hello!",
|
|
420
|
-
route: "route_id",
|
|
421
|
-
step: "step_id",
|
|
422
|
-
toolCalls: [...],
|
|
423
|
-
});
|
|
424
|
-
|
|
425
|
-
// Get messages
|
|
426
|
-
await persistence.getSessionMessages(sessionId);
|
|
427
|
-
await persistence.getUserMessages(userId);
|
|
428
|
-
|
|
429
|
-
// Load as Event history
|
|
430
|
-
await persistence.loadSessionHistory(sessionId);
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
## Creating Custom Adapters
|
|
434
|
-
|
|
435
|
-
Create adapters for any database:
|
|
436
|
-
|
|
437
|
-
```typescript
|
|
438
|
-
import { PersistenceAdapter, SessionRepository, MessageRepository } from "@falai/agent";
|
|
439
|
-
|
|
440
|
-
class MyDatabaseAdapter implements PersistenceAdapter {
|
|
441
|
-
public readonly sessionRepository: SessionRepository;
|
|
442
|
-
public readonly messageRepository: MessageRepository;
|
|
443
|
-
|
|
444
|
-
constructor(config: MyConfig) {
|
|
445
|
-
this.sessionRepository = new MySessionRepository(config);
|
|
446
|
-
this.messageRepository = new MyMessageRepository(config);
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
async initialize?(): Promise<void> {
|
|
450
|
-
// Optional: Setup tables/indexes
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
async disconnect?(): Promise<void> {
|
|
454
|
-
// Optional: Cleanup
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
// Use it
|
|
459
|
-
const agent = new Agent({
|
|
460
|
-
persistence: {
|
|
461
|
-
adapter: new MyDatabaseAdapter({ ... }),
|
|
462
|
-
},
|
|
463
|
-
});
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
## Examples
|
|
467
|
-
|
|
468
|
-
### Complete Example
|
|
469
|
-
|
|
470
|
-
See `examples/prisma-persistence.ts` for a full working example.
|
|
471
|
-
|
|
472
|
-
### Minimal Example
|
|
473
|
-
|
|
474
|
-
```typescript
|
|
475
|
-
import { Agent, PrismaAdapter } from "@falai/agent";
|
|
476
|
-
import { PrismaClient } from "@prisma/client";
|
|
477
|
-
|
|
478
|
-
const prisma = new PrismaClient();
|
|
479
|
-
const agent = new Agent({
|
|
480
|
-
name: "Assistant",
|
|
481
|
-
provider: provider,
|
|
482
|
-
persistence: {
|
|
483
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
484
|
-
},
|
|
485
|
-
});
|
|
486
|
-
|
|
487
|
-
const persistence = agent.getPersistenceManager();
|
|
488
|
-
const session = await persistence.createSession({ userId: "user_123" });
|
|
489
|
-
const history = await persistence.loadSessionHistory(session.id);
|
|
490
|
-
const response = await agent.respond({ history });
|
|
491
|
-
await persistence.saveMessage({
|
|
492
|
-
sessionId: session.id,
|
|
493
|
-
role: "agent",
|
|
494
|
-
content: response.message,
|
|
495
|
-
});
|
|
496
|
-
```
|
|
497
|
-
|
|
498
|
-
## Database Schema Details
|
|
499
|
-
|
|
500
|
-
### SessionData Fields
|
|
501
|
-
|
|
502
|
-
- `id`: Unique session identifier
|
|
503
|
-
- `userId`: Optional user identifier
|
|
504
|
-
- `agentName`: Name of the agent
|
|
505
|
-
- `status`: `"active" | "completed" | "abandoned"`
|
|
506
|
-
- `currentRoute`: Current route ID
|
|
507
|
-
- `currentStep`: Current step ID
|
|
508
|
-
- `collectedData`: JSON object for custom data
|
|
509
|
-
- `messageCount`: Number of messages in session
|
|
510
|
-
- `lastMessageAt`: Timestamp of last message
|
|
511
|
-
- `completedAt`: When session was completed
|
|
512
|
-
- `createdAt`: Session creation time
|
|
513
|
-
- `updatedAt`: Last update time
|
|
514
|
-
|
|
515
|
-
### MessageData Fields
|
|
516
|
-
|
|
517
|
-
- `id`: Unique message identifier
|
|
518
|
-
- `sessionId`: Reference to session
|
|
519
|
-
- `userId`: Optional user identifier
|
|
520
|
-
- `role`: `"user" | "agent" | "system"`
|
|
521
|
-
- `content`: Message text
|
|
522
|
-
- `route`: Route ID when message was sent
|
|
523
|
-
- `step`: Step ID when message was sent
|
|
524
|
-
- `toolCalls`: Array of tool calls (if any)
|
|
525
|
-
- `event`: Full event data (optional)
|
|
526
|
-
- `createdAt`: Message creation time
|
|
527
|
-
|
|
528
|
-
## Best Practices
|
|
529
|
-
|
|
530
|
-
1. ✅ **Use `createSessionWithStep()`** - Get both database record and session step in one call
|
|
531
|
-
2. ✅ **Enable `autoSave: true`** - Automatically persist session step after each response
|
|
532
|
-
3. ✅ **Define extraction schemas** - Use `schema` in routes for structured data collection
|
|
533
|
-
4. ✅ **Pass session step** - Always pass `session` parameter to `agent.respond()`
|
|
534
|
-
5. ✅ **Load session step** - Use `loadSessionState()` to resume conversations
|
|
535
|
-
6. ✅ **Store collected data** - Leverage `collectedData.data` for user input tracking
|
|
536
|
-
7. ✅ **Index frequently queried fields** - Add database indexes on `userId`, `status`, etc.
|
|
537
|
-
8. ✅ **Use cascading deletes** - Clean up messages automatically when deleting sessions
|
|
538
|
-
9. ✅ **Complete sessions** - Mark sessions as completed when conversation ends
|
|
539
|
-
10. ✅ **Handle errors gracefully** - Wrap persistence calls in try-catch blocks
|
|
540
|
-
|
|
541
|
-
## Troubleshooting
|
|
542
|
-
|
|
543
|
-
### "Cannot find module '@prisma/client'"
|
|
544
|
-
|
|
545
|
-
Install Prisma:
|
|
546
|
-
|
|
547
|
-
```bash
|
|
548
|
-
npm install @prisma/client prisma
|
|
549
|
-
npx prisma generate
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
### "Table not found"
|
|
553
|
-
|
|
554
|
-
Run migrations:
|
|
555
|
-
|
|
556
|
-
```bash
|
|
557
|
-
npx prisma migrate dev
|
|
558
|
-
```
|
|
559
|
-
|
|
560
|
-
### Custom schema not working
|
|
561
|
-
|
|
562
|
-
Check your field mappings match your actual database schema.
|
|
563
|
-
|
|
564
|
-
## Other Databases
|
|
565
|
-
|
|
566
|
-
The adapter pattern works with any database. Built-in adapters:
|
|
567
|
-
|
|
568
|
-
### Redis
|
|
569
|
-
|
|
570
|
-
Perfect for high-throughput, real-time applications:
|
|
571
|
-
|
|
572
|
-
```typescript
|
|
573
|
-
import { RedisAdapter } from "@falai/agent";
|
|
574
|
-
import Redis from "ioredis";
|
|
575
|
-
|
|
576
|
-
const redis = new Redis();
|
|
577
|
-
|
|
578
|
-
const agent = new Agent({
|
|
579
|
-
persistence: {
|
|
580
|
-
adapter: new RedisAdapter({
|
|
581
|
-
redis,
|
|
582
|
-
keyPrefix: "agent:", // Optional: custom prefix
|
|
583
|
-
sessionTTL: 24 * 60 * 60, // Optional: 24 hours
|
|
584
|
-
messageTTL: 7 * 24 * 60 * 60, // Optional: 7 days
|
|
585
|
-
}),
|
|
586
|
-
},
|
|
587
|
-
});
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
**Install:** `npm install ioredis` or `npm install redis`
|
|
591
|
-
|
|
592
|
-
### More Adapters
|
|
593
|
-
|
|
594
|
-
All adapters are production-ready and available now:
|
|
595
|
-
|
|
596
|
-
- **MongoDB**: Document-based storage ✅
|
|
597
|
-
- **PostgreSQL**: Raw SQL for custom schemas ✅
|
|
598
|
-
- **SQLite**: Lightweight file-based database ✅
|
|
599
|
-
- **OpenSearch**: Full-text search & analytics ✅
|
|
600
|
-
- **Memory**: Built-in for testing ✅
|
|
601
|
-
|
|
602
|
-
Create your own adapter by implementing the `PersistenceAdapter` interface!
|
|
603
|
-
|
|
604
|
-
### MongoDB
|
|
605
|
-
|
|
606
|
-
Document-based storage with flexible schema:
|
|
607
|
-
|
|
608
|
-
```typescript
|
|
609
|
-
import { MongoAdapter } from "@falai/agent";
|
|
610
|
-
import { MongoClient } from "mongodb";
|
|
611
|
-
|
|
612
|
-
const client = new MongoClient("mongodb://localhost:27017");
|
|
613
|
-
await client.connect();
|
|
614
|
-
|
|
615
|
-
const agent = new Agent({
|
|
616
|
-
persistence: {
|
|
617
|
-
adapter: new MongoAdapter({
|
|
618
|
-
client,
|
|
619
|
-
databaseName: "myapp",
|
|
620
|
-
collections: {
|
|
621
|
-
// Optional: custom names
|
|
622
|
-
sessions: "agent_sessions",
|
|
623
|
-
messages: "agent_messages",
|
|
624
|
-
},
|
|
625
|
-
}),
|
|
626
|
-
},
|
|
627
|
-
});
|
|
628
|
-
```
|
|
629
|
-
|
|
630
|
-
**Install:** `npm install mongodb`
|
|
631
|
-
|
|
632
|
-
### PostgreSQL
|
|
633
|
-
|
|
634
|
-
Raw SQL adapter with auto-table creation:
|
|
635
|
-
|
|
636
|
-
```typescript
|
|
637
|
-
import { PostgreSQLAdapter } from "@falai/agent";
|
|
638
|
-
import { Client } from "pg";
|
|
639
|
-
|
|
640
|
-
const client = new Client({
|
|
641
|
-
host: "localhost",
|
|
642
|
-
database: "myapp",
|
|
643
|
-
user: "postgres",
|
|
644
|
-
password: "password",
|
|
645
|
-
});
|
|
646
|
-
await client.connect();
|
|
647
|
-
|
|
648
|
-
const adapter = new PostgreSQLAdapter({
|
|
649
|
-
client,
|
|
650
|
-
tables: {
|
|
651
|
-
// Optional: custom names
|
|
652
|
-
sessions: "agent_sessions",
|
|
653
|
-
messages: "agent_messages",
|
|
654
|
-
},
|
|
655
|
-
});
|
|
656
|
-
|
|
657
|
-
// Auto-create tables with indexes
|
|
658
|
-
await adapter.initialize();
|
|
659
|
-
|
|
660
|
-
const agent = new Agent({
|
|
661
|
-
persistence: {
|
|
662
|
-
adapter,
|
|
663
|
-
},
|
|
664
|
-
});
|
|
665
|
-
```
|
|
666
|
-
|
|
667
|
-
**Install:** `npm install pg`
|
|
668
|
-
|
|
669
|
-
**Note:** PostgreSQL adapter includes `initialize()` method to auto-create tables with proper indexes and foreign keys.
|
|
670
|
-
|
|
671
|
-
### SQLite
|
|
672
|
-
|
|
673
|
-
Lightweight, file-based database for local development:
|
|
674
|
-
|
|
675
|
-
```typescript
|
|
676
|
-
import { SQLiteAdapter } from "@falai/agent";
|
|
677
|
-
import Database from "better-sqlite3";
|
|
678
|
-
|
|
679
|
-
const db = new Database("agent.db");
|
|
680
|
-
|
|
681
|
-
const adapter = new SQLiteAdapter({ db });
|
|
682
|
-
|
|
683
|
-
// Auto-create tables
|
|
684
|
-
await adapter.initialize();
|
|
685
|
-
|
|
686
|
-
const agent = new Agent({
|
|
687
|
-
persistence: { adapter },
|
|
688
|
-
});
|
|
689
|
-
```
|
|
690
|
-
|
|
691
|
-
**Install:** `npm install better-sqlite3`
|
|
692
|
-
|
|
693
|
-
**Perfect for:**
|
|
694
|
-
|
|
695
|
-
- Local development
|
|
696
|
-
- Testing
|
|
697
|
-
- Desktop applications
|
|
698
|
-
- Single-user apps
|
|
699
|
-
|
|
700
|
-
### OpenSearch
|
|
701
|
-
|
|
702
|
-
Full-text search and analytics-powered persistence. Also compatible with Elasticsearch 7.x:
|
|
703
|
-
|
|
704
|
-
```typescript
|
|
705
|
-
import { OpenSearchAdapter } from "@falai/agent";
|
|
706
|
-
import { Client } from "@opensearch-project/opensearch";
|
|
707
|
-
|
|
708
|
-
const client = new Client({
|
|
709
|
-
node: "https://localhost:9200",
|
|
710
|
-
auth: {
|
|
711
|
-
username: "admin",
|
|
712
|
-
password: "admin",
|
|
713
|
-
},
|
|
714
|
-
});
|
|
715
|
-
|
|
716
|
-
const adapter = new OpenSearchAdapter(client, {
|
|
717
|
-
indices: {
|
|
718
|
-
sessions: "agent_sessions",
|
|
719
|
-
messages: "agent_messages",
|
|
720
|
-
},
|
|
721
|
-
autoCreateIndices: true, // Auto-create indices with mappings
|
|
722
|
-
refresh: "wait_for", // Ensure documents are searchable immediately
|
|
723
|
-
});
|
|
724
|
-
|
|
725
|
-
// Auto-create indices with mappings
|
|
726
|
-
await adapter.initialize();
|
|
727
|
-
|
|
728
|
-
const agent = new Agent({
|
|
729
|
-
persistence: { adapter },
|
|
730
|
-
});
|
|
731
|
-
```
|
|
732
|
-
|
|
733
|
-
**Install:** `npm install @opensearch-project/opensearch`
|
|
734
|
-
|
|
735
|
-
**Perfect for:**
|
|
736
|
-
|
|
737
|
-
- Full-text search across conversations
|
|
738
|
-
- Analytics and aggregations
|
|
739
|
-
- Time-series analysis
|
|
740
|
-
- AWS OpenSearch Service
|
|
741
|
-
- Elasticsearch 7.x users
|
|
742
|
-
|
|
743
|
-
**Advanced features:**
|
|
744
|
-
|
|
745
|
-
```typescript
|
|
746
|
-
// Get OpenSearch client for custom queries
|
|
747
|
-
const pm = agent.getPersistenceManager();
|
|
748
|
-
if (pm) {
|
|
749
|
-
const messages = await pm.getSessionMessages(sessionId);
|
|
750
|
-
|
|
751
|
-
// Now use the client directly for advanced queries
|
|
752
|
-
const results = await client.search({
|
|
753
|
-
index: "agent_messages",
|
|
754
|
-
body: {
|
|
755
|
-
query: {
|
|
756
|
-
match: {
|
|
757
|
-
content: "flight booking",
|
|
758
|
-
},
|
|
759
|
-
},
|
|
760
|
-
aggregations: {
|
|
761
|
-
by_route: {
|
|
762
|
-
terms: { field: "route" },
|
|
763
|
-
},
|
|
764
|
-
},
|
|
765
|
-
},
|
|
766
|
-
});
|
|
767
|
-
}
|
|
768
|
-
```
|
|
769
|
-
|
|
770
|
-
### Memory (Built-in)
|
|
771
|
-
|
|
772
|
-
Zero-dependency in-memory storage for testing:
|
|
773
|
-
|
|
774
|
-
```typescript
|
|
775
|
-
import { MemoryAdapter } from "@falai/agent";
|
|
776
|
-
|
|
777
|
-
const agent = new Agent({
|
|
778
|
-
persistence: {
|
|
779
|
-
adapter: new MemoryAdapter(),
|
|
780
|
-
userId: "test_user",
|
|
781
|
-
},
|
|
782
|
-
});
|
|
783
|
-
|
|
784
|
-
// Perfect for unit tests - no database setup required!
|
|
785
|
-
```
|
|
786
|
-
|
|
787
|
-
**Features:**
|
|
788
|
-
|
|
789
|
-
- No installation required ✨
|
|
790
|
-
- Perfect for testing
|
|
791
|
-
- Data snapshot for debugging
|
|
792
|
-
- Clear method for test cleanup
|
|
793
|
-
|
|
794
|
-
**Example test:**
|
|
795
|
-
|
|
796
|
-
```typescript
|
|
797
|
-
describe("Agent persistence", () => {
|
|
798
|
-
const adapter = new MemoryAdapter();
|
|
799
|
-
|
|
800
|
-
afterEach(() => {
|
|
801
|
-
adapter.clear(); // Clean step between tests
|
|
802
|
-
});
|
|
803
|
-
|
|
804
|
-
it("should save session", async () => {
|
|
805
|
-
const agent = new Agent({
|
|
806
|
-
persistence: { adapter },
|
|
807
|
-
});
|
|
808
|
-
|
|
809
|
-
// Test your logic...
|
|
810
|
-
|
|
811
|
-
const snapshot = adapter.getSnapshot();
|
|
812
|
-
expect(snapshot.sessions).toHaveLength(1);
|
|
813
|
-
});
|
|
814
|
-
});
|
|
815
|
-
```
|