@falai/agent 0.8.0 → 0.9.0-alpha-1
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 +306 -133
- 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/{core → cjs/src/core}/Agent.d.ts +67 -69
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1433 -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/cjs/src/core/PersistenceManager.d.ts +98 -0
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +62 -32
- 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 +31 -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 +143 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +446 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +126 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/Route.js +116 -20
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +76 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +197 -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 +43 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
- 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 +54 -35
- 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 +39 -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/{types → src/types}/route.d.ts +85 -31
- 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 +70 -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/cjs/{types → src/types}/tool.d.ts +6 -8
- 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 +36 -13
- 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/{cjs → src}/core/Agent.d.ts +67 -69
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1429 -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/src/core/PersistenceManager.d.ts +98 -0
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +56 -26
- 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 +31 -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 +143 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +442 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +126 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/{core → src/core}/Route.js +116 -20
- package/dist/src/core/Route.js.map +1 -0
- package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +98 -104
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +76 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +193 -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 +43 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +70 -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 +54 -35
- 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 +39 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/{types → src/types}/route.d.ts +85 -31
- 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 +70 -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/{types → src/types}/tool.d.ts +6 -8
- package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
- 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 +34 -13
- 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} +902 -263
- package/docs/api/overview.md +798 -0
- package/docs/core/agent/README.md +642 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +144 -95
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
- package/docs/core/ai-integration/prompt-composition.md +196 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +165 -0
- package/docs/core/conversation-flows/data-collection.md +545 -0
- package/docs/core/conversation-flows/route-dsl.md +479 -0
- package/docs/core/conversation-flows/routes.md +61 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +130 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +2 -2
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +339 -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 +384 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
- package/examples/ai-providers/anthropic-integration.ts +377 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
- package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +115 -108
- package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
- package/examples/core-concepts/schema-driven-extraction.ts +301 -0
- package/examples/core-concepts/session-management.ts +394 -0
- package/examples/integrations/database-integration.ts +615 -0
- package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
- package/examples/integrations/server-session-management.ts +299 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
- package/examples/persistence/memory-sessions.ts +506 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
- package/examples/tools/basic-tools.ts +550 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
- 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 +1102 -487
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +87 -57
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +118 -38
- package/src/core/ResponsePipeline.ts +715 -0
- package/src/core/Route.ts +168 -51
- package/src/core/RoutingEngine.ts +178 -209
- package/src/core/SessionManager.ts +241 -0
- package/src/core/Step.ts +149 -67
- package/src/core/ToolExecutor.ts +37 -42
- 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 +50 -38
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +43 -7
- package/src/types/persistence.ts +46 -28
- package/src/types/route.ts +104 -45
- package/src/types/session.ts +19 -213
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +9 -11
- 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 +229 -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.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 +0 -96
- 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.map +0 -1
- 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.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/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.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 +0 -96
- 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.map +0 -1
- 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.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/domain-scoping.ts +0 -366
- 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
|
@@ -10,7 +10,11 @@ import type {
|
|
|
10
10
|
MessageData,
|
|
11
11
|
SessionStatus,
|
|
12
12
|
PersistenceAdapter,
|
|
13
|
-
|
|
13
|
+
CollectedStateData,
|
|
14
|
+
MessageRole,
|
|
15
|
+
Event,
|
|
16
|
+
CreateSessionData,
|
|
17
|
+
} from "../types";
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
20
|
* Prisma model operations
|
|
@@ -115,8 +119,10 @@ export interface PrismaAdapterOptions {
|
|
|
115
119
|
* });
|
|
116
120
|
* ```
|
|
117
121
|
*/
|
|
118
|
-
export class PrismaAdapter
|
|
119
|
-
|
|
122
|
+
export class PrismaAdapter<TData = Record<string, unknown>>
|
|
123
|
+
implements PersistenceAdapter<TData>
|
|
124
|
+
{
|
|
125
|
+
public readonly sessionRepository: SessionRepository<TData>;
|
|
120
126
|
public readonly messageRepository: MessageRepository;
|
|
121
127
|
private prisma: PrismaClient;
|
|
122
128
|
private options: Required<Omit<PrismaAdapterOptions, "fieldMappings">> & {
|
|
@@ -137,7 +143,7 @@ export class PrismaAdapter implements PersistenceAdapter {
|
|
|
137
143
|
};
|
|
138
144
|
|
|
139
145
|
// Initialize repositories
|
|
140
|
-
this.sessionRepository = new PrismaSessionRepository(
|
|
146
|
+
this.sessionRepository = new PrismaSessionRepository<TData>(
|
|
141
147
|
this.prisma,
|
|
142
148
|
this.options.tables.sessions!,
|
|
143
149
|
this.options.fieldMappings?.sessions
|
|
@@ -191,15 +197,17 @@ export class PrismaAdapter implements PersistenceAdapter {
|
|
|
191
197
|
* Prisma Session Repository
|
|
192
198
|
* Internal implementation - users should use PrismaAdapter instead
|
|
193
199
|
*/
|
|
194
|
-
class PrismaSessionRepository
|
|
200
|
+
class PrismaSessionRepository<TData = Record<string, unknown>>
|
|
201
|
+
implements SessionRepository<TData>
|
|
202
|
+
{
|
|
195
203
|
private prisma: PrismaClient;
|
|
196
204
|
private tableName: string;
|
|
197
|
-
private fieldMap: Partial<Record<keyof SessionData
|
|
205
|
+
private fieldMap: Partial<Record<keyof SessionData<TData>, string>>;
|
|
198
206
|
|
|
199
207
|
constructor(
|
|
200
208
|
prismaClient: PrismaClient,
|
|
201
209
|
tableName: string,
|
|
202
|
-
fieldMappings?: Partial<Record<keyof SessionData
|
|
210
|
+
fieldMappings?: Partial<Record<keyof SessionData<TData>, string>>
|
|
203
211
|
) {
|
|
204
212
|
this.prisma = prismaClient;
|
|
205
213
|
this.tableName = tableName;
|
|
@@ -212,7 +220,7 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
212
220
|
private mapFields(data: Record<string, unknown>): Record<string, unknown> {
|
|
213
221
|
const mapped: Record<string, unknown> = {};
|
|
214
222
|
for (const [key, value] of Object.entries(data)) {
|
|
215
|
-
const mappedKey = this.fieldMap[key as keyof SessionData] || key;
|
|
223
|
+
const mappedKey = this.fieldMap[key as keyof SessionData<TData>] || key;
|
|
216
224
|
mapped[mappedKey] = value;
|
|
217
225
|
}
|
|
218
226
|
return mapped;
|
|
@@ -221,8 +229,8 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
221
229
|
/**
|
|
222
230
|
* Map custom schema field names back to our standard field names
|
|
223
231
|
*/
|
|
224
|
-
private unmapFields(data: Record<string, unknown>): SessionData {
|
|
225
|
-
if (!data)
|
|
232
|
+
private unmapFields(data: Record<string, unknown>): SessionData<TData> {
|
|
233
|
+
if (!data) throw new Error("Data cannot be null");
|
|
226
234
|
|
|
227
235
|
const reverseMap: Record<string, string> = {};
|
|
228
236
|
for (const [standardKey, customKey] of Object.entries(this.fieldMap)) {
|
|
@@ -235,31 +243,48 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
235
243
|
unmapped[unmappedKey] = value;
|
|
236
244
|
}
|
|
237
245
|
|
|
238
|
-
|
|
246
|
+
// Construct proper SessionData object
|
|
247
|
+
return {
|
|
248
|
+
id: unmapped.id as string,
|
|
249
|
+
userId: unmapped.userId as string | undefined,
|
|
250
|
+
agentName: unmapped.agentName as string | undefined,
|
|
251
|
+
status: unmapped.status as "active" | "completed" | "abandoned",
|
|
252
|
+
currentRoute: unmapped.currentRoute as string | undefined,
|
|
253
|
+
currentStep: unmapped.currentStep as string | undefined,
|
|
254
|
+
collectedData: unmapped.collectedData as CollectedStateData<TData>,
|
|
255
|
+
messageCount: unmapped.messageCount as number | undefined,
|
|
256
|
+
lastMessageAt: unmapped.lastMessageAt as Date | undefined,
|
|
257
|
+
completedAt: unmapped.completedAt as Date | undefined,
|
|
258
|
+
createdAt: unmapped.createdAt as Date,
|
|
259
|
+
updatedAt: unmapped.updatedAt as Date,
|
|
260
|
+
};
|
|
239
261
|
}
|
|
240
262
|
|
|
241
263
|
private getModel(): PrismaModel {
|
|
242
264
|
return this.prisma[this.tableName] as PrismaModel;
|
|
243
265
|
}
|
|
244
266
|
|
|
245
|
-
async create(
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
267
|
+
async create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
|
|
268
|
+
const mapped = this.mapFields({
|
|
269
|
+
...data,
|
|
270
|
+
id:
|
|
271
|
+
data.id ||
|
|
272
|
+
`session_${Date.now()}_${Math.random().toString(36).slice(2)}`,
|
|
273
|
+
});
|
|
249
274
|
const result = await this.getModel().create({
|
|
250
275
|
data: mapped,
|
|
251
276
|
});
|
|
252
277
|
return this.unmapFields(result);
|
|
253
278
|
}
|
|
254
279
|
|
|
255
|
-
async findById(id: string): Promise<SessionData | null> {
|
|
280
|
+
async findById(id: string): Promise<SessionData<TData> | null> {
|
|
256
281
|
const result = await this.getModel().findUnique({
|
|
257
282
|
where: { [this.fieldMap.id || "id"]: id },
|
|
258
283
|
});
|
|
259
284
|
return result ? this.unmapFields(result) : null;
|
|
260
285
|
}
|
|
261
286
|
|
|
262
|
-
async findActiveByUserId(userId: string): Promise<SessionData | null> {
|
|
287
|
+
async findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
|
|
263
288
|
const result = await this.getModel().findFirst({
|
|
264
289
|
where: {
|
|
265
290
|
[this.fieldMap.userId || "userId"]: userId,
|
|
@@ -272,7 +297,10 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
272
297
|
return result ? this.unmapFields(result) : null;
|
|
273
298
|
}
|
|
274
299
|
|
|
275
|
-
async findByUserId(
|
|
300
|
+
async findByUserId(
|
|
301
|
+
userId: string,
|
|
302
|
+
limit = 100
|
|
303
|
+
): Promise<SessionData<TData>[]> {
|
|
276
304
|
const results = await this.getModel().findMany({
|
|
277
305
|
where: {
|
|
278
306
|
[this.fieldMap.userId || "userId"]: userId,
|
|
@@ -287,8 +315,8 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
287
315
|
|
|
288
316
|
async update(
|
|
289
317
|
id: string,
|
|
290
|
-
data: Partial<Omit<SessionData
|
|
291
|
-
): Promise<SessionData | null> {
|
|
318
|
+
data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
|
|
319
|
+
): Promise<SessionData<TData> | null> {
|
|
292
320
|
const mapped = this.mapFields(data as Record<string, unknown>);
|
|
293
321
|
const result = await this.getModel().update({
|
|
294
322
|
where: { [this.fieldMap.id || "id"]: id },
|
|
@@ -304,7 +332,7 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
304
332
|
id: string,
|
|
305
333
|
status: SessionStatus,
|
|
306
334
|
completedAt?: Date
|
|
307
|
-
): Promise<SessionData | null> {
|
|
335
|
+
): Promise<SessionData<TData> | null> {
|
|
308
336
|
const data: Record<string, unknown> = {
|
|
309
337
|
[this.fieldMap.status || "status"]: status,
|
|
310
338
|
[this.fieldMap.updatedAt || "updatedAt"]: new Date(),
|
|
@@ -321,8 +349,8 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
321
349
|
|
|
322
350
|
async updateCollectedData(
|
|
323
351
|
id: string,
|
|
324
|
-
collectedData:
|
|
325
|
-
): Promise<SessionData | null> {
|
|
352
|
+
collectedData: CollectedStateData<TData>
|
|
353
|
+
): Promise<SessionData<TData> | null> {
|
|
326
354
|
const result = await this.getModel().update({
|
|
327
355
|
where: { [this.fieldMap.id || "id"]: id },
|
|
328
356
|
data: {
|
|
@@ -337,7 +365,7 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
337
365
|
id: string,
|
|
338
366
|
route?: string,
|
|
339
367
|
step?: string
|
|
340
|
-
): Promise<SessionData | null> {
|
|
368
|
+
): Promise<SessionData<TData> | null> {
|
|
341
369
|
const data: Record<string, unknown> = {
|
|
342
370
|
[this.fieldMap.updatedAt || "updatedAt"]: new Date(),
|
|
343
371
|
};
|
|
@@ -354,7 +382,7 @@ class PrismaSessionRepository implements SessionRepository {
|
|
|
354
382
|
return this.unmapFields(result);
|
|
355
383
|
}
|
|
356
384
|
|
|
357
|
-
async incrementMessageCount(id: string): Promise<SessionData | null> {
|
|
385
|
+
async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
|
|
358
386
|
const result = await this.getModel().update({
|
|
359
387
|
where: { [this.fieldMap.id || "id"]: id },
|
|
360
388
|
data: {
|
|
@@ -413,7 +441,7 @@ class PrismaMessageRepository implements MessageRepository {
|
|
|
413
441
|
* Map custom schema field names back to our standard field names
|
|
414
442
|
*/
|
|
415
443
|
private unmapFields(data: Record<string, unknown>): MessageData {
|
|
416
|
-
if (!data)
|
|
444
|
+
if (!data) throw new Error("Data cannot be null");
|
|
417
445
|
|
|
418
446
|
const reverseMap: Record<string, string> = {};
|
|
419
447
|
for (const [standardKey, customKey] of Object.entries(this.fieldMap)) {
|
|
@@ -426,7 +454,21 @@ class PrismaMessageRepository implements MessageRepository {
|
|
|
426
454
|
unmapped[unmappedKey] = value;
|
|
427
455
|
}
|
|
428
456
|
|
|
429
|
-
|
|
457
|
+
// Construct proper MessageData object
|
|
458
|
+
return {
|
|
459
|
+
id: unmapped.id as string,
|
|
460
|
+
sessionId: unmapped.sessionId as string,
|
|
461
|
+
userId: unmapped.userId as string | undefined,
|
|
462
|
+
role: unmapped.role as MessageRole,
|
|
463
|
+
content: unmapped.content as string,
|
|
464
|
+
route: unmapped.route as string | undefined,
|
|
465
|
+
step: unmapped.step as string | undefined,
|
|
466
|
+
toolCalls: unmapped.toolCalls as
|
|
467
|
+
| Array<{ toolName: string; arguments: Record<string, unknown> }>
|
|
468
|
+
| undefined,
|
|
469
|
+
event: unmapped.event as Event | undefined,
|
|
470
|
+
createdAt: unmapped.createdAt as Date,
|
|
471
|
+
};
|
|
430
472
|
}
|
|
431
473
|
|
|
432
474
|
private getModel(): PrismaModel {
|
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type {
|
|
7
|
-
|
|
7
|
+
MessageData,
|
|
8
8
|
MessageRepository,
|
|
9
|
+
PersistenceAdapter,
|
|
9
10
|
SessionData,
|
|
10
|
-
|
|
11
|
+
SessionRepository,
|
|
11
12
|
SessionStatus,
|
|
12
|
-
|
|
13
|
-
} from "../types
|
|
13
|
+
CollectedStateData,
|
|
14
|
+
} from "../types";
|
|
15
|
+
import { createSessionId } from "../utils";
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* Redis client interface - matches ioredis/redis clients
|
|
@@ -72,8 +74,10 @@ export interface RedisAdapterOptions {
|
|
|
72
74
|
* });
|
|
73
75
|
* ```
|
|
74
76
|
*/
|
|
75
|
-
export class RedisAdapter
|
|
76
|
-
|
|
77
|
+
export class RedisAdapter<TData = Record<string, unknown>>
|
|
78
|
+
implements PersistenceAdapter<TData>
|
|
79
|
+
{
|
|
80
|
+
public readonly sessionRepository: SessionRepository<TData>;
|
|
77
81
|
public readonly messageRepository: MessageRepository;
|
|
78
82
|
private redis: RedisClient;
|
|
79
83
|
private keyPrefix: string;
|
|
@@ -86,7 +90,7 @@ export class RedisAdapter implements PersistenceAdapter {
|
|
|
86
90
|
this.sessionTTL = options.sessionTTL || 7 * 24 * 60 * 60; // 7 days
|
|
87
91
|
this.messageTTL = options.messageTTL || 30 * 24 * 60 * 60; // 30 days
|
|
88
92
|
|
|
89
|
-
this.sessionRepository = new RedisSessionRepository(
|
|
93
|
+
this.sessionRepository = new RedisSessionRepository<TData>(
|
|
90
94
|
this.redis,
|
|
91
95
|
this.keyPrefix,
|
|
92
96
|
this.sessionTTL
|
|
@@ -107,7 +111,9 @@ export class RedisAdapter implements PersistenceAdapter {
|
|
|
107
111
|
/**
|
|
108
112
|
* Redis Session Repository
|
|
109
113
|
*/
|
|
110
|
-
class RedisSessionRepository
|
|
114
|
+
class RedisSessionRepository<TData = Record<string, unknown>>
|
|
115
|
+
implements SessionRepository<TData>
|
|
116
|
+
{
|
|
111
117
|
constructor(
|
|
112
118
|
private redis: RedisClient,
|
|
113
119
|
private keyPrefix: string,
|
|
@@ -123,11 +129,13 @@ class RedisSessionRepository implements SessionRepository {
|
|
|
123
129
|
}
|
|
124
130
|
|
|
125
131
|
async create(
|
|
126
|
-
data: Omit<SessionData
|
|
127
|
-
|
|
128
|
-
|
|
132
|
+
data: Omit<SessionData<TData>, "createdAt" | "updatedAt"> & {
|
|
133
|
+
id?: string;
|
|
134
|
+
}
|
|
135
|
+
): Promise<SessionData<TData>> {
|
|
136
|
+
const id = data.id || createSessionId();
|
|
129
137
|
const now = new Date();
|
|
130
|
-
const session: SessionData = {
|
|
138
|
+
const session: SessionData<TData> = {
|
|
131
139
|
...data,
|
|
132
140
|
id,
|
|
133
141
|
createdAt: now,
|
|
@@ -150,18 +158,18 @@ class RedisSessionRepository implements SessionRepository {
|
|
|
150
158
|
return session;
|
|
151
159
|
}
|
|
152
160
|
|
|
153
|
-
async findById(id: string): Promise<SessionData | null> {
|
|
161
|
+
async findById(id: string): Promise<SessionData<TData> | null> {
|
|
154
162
|
const data = await this.redis.get(this.getKey(id));
|
|
155
163
|
if (!data) return null;
|
|
156
164
|
try {
|
|
157
|
-
return JSON.parse(data) as SessionData
|
|
165
|
+
return JSON.parse(data) as SessionData<TData>;
|
|
158
166
|
} catch (error) {
|
|
159
167
|
console.error(`Error parsing session data for id ${id}:`, error);
|
|
160
168
|
return null;
|
|
161
169
|
}
|
|
162
170
|
}
|
|
163
171
|
|
|
164
|
-
async findActiveByUserId(userId: string): Promise<SessionData | null> {
|
|
172
|
+
async findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
|
|
165
173
|
const sessionIds = await this.redis.hgetall(this.getUserKey(userId));
|
|
166
174
|
|
|
167
175
|
for (const sessionId of Object.keys(sessionIds)) {
|
|
@@ -174,9 +182,12 @@ class RedisSessionRepository implements SessionRepository {
|
|
|
174
182
|
return null;
|
|
175
183
|
}
|
|
176
184
|
|
|
177
|
-
async findByUserId(
|
|
185
|
+
async findByUserId(
|
|
186
|
+
userId: string,
|
|
187
|
+
limit = 100
|
|
188
|
+
): Promise<SessionData<TData>[]> {
|
|
178
189
|
const sessionIds = await this.redis.hgetall(this.getUserKey(userId));
|
|
179
|
-
const sessions: SessionData[] = [];
|
|
190
|
+
const sessions: SessionData<TData>[] = [];
|
|
180
191
|
|
|
181
192
|
for (const sessionId of Object.keys(sessionIds).slice(0, limit)) {
|
|
182
193
|
const session = await this.findById(sessionId);
|
|
@@ -186,18 +197,19 @@ class RedisSessionRepository implements SessionRepository {
|
|
|
186
197
|
}
|
|
187
198
|
|
|
188
199
|
return sessions.sort(
|
|
189
|
-
(a, b) =>
|
|
200
|
+
(a, b) =>
|
|
201
|
+
new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
|
|
190
202
|
);
|
|
191
203
|
}
|
|
192
204
|
|
|
193
205
|
async update(
|
|
194
206
|
id: string,
|
|
195
|
-
data: Partial<Omit<SessionData
|
|
196
|
-
): Promise<SessionData | null> {
|
|
207
|
+
data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
|
|
208
|
+
): Promise<SessionData<TData> | null> {
|
|
197
209
|
const existing = await this.findById(id);
|
|
198
210
|
if (!existing) return null;
|
|
199
211
|
|
|
200
|
-
const updated: SessionData = {
|
|
212
|
+
const updated: SessionData<TData> = {
|
|
201
213
|
...existing,
|
|
202
214
|
...data,
|
|
203
215
|
updatedAt: new Date(),
|
|
@@ -212,14 +224,14 @@ class RedisSessionRepository implements SessionRepository {
|
|
|
212
224
|
id: string,
|
|
213
225
|
status: SessionStatus,
|
|
214
226
|
completedAt?: Date
|
|
215
|
-
): Promise<SessionData | null> {
|
|
227
|
+
): Promise<SessionData<TData> | null> {
|
|
216
228
|
return this.update(id, { status, completedAt });
|
|
217
229
|
}
|
|
218
230
|
|
|
219
231
|
async updateCollectedData(
|
|
220
232
|
id: string,
|
|
221
|
-
collectedData:
|
|
222
|
-
): Promise<SessionData | null> {
|
|
233
|
+
collectedData: CollectedStateData<TData>
|
|
234
|
+
): Promise<SessionData<TData> | null> {
|
|
223
235
|
return this.update(id, { collectedData });
|
|
224
236
|
}
|
|
225
237
|
|
|
@@ -227,11 +239,11 @@ class RedisSessionRepository implements SessionRepository {
|
|
|
227
239
|
id: string,
|
|
228
240
|
route?: string,
|
|
229
241
|
step?: string
|
|
230
|
-
): Promise<SessionData | null> {
|
|
242
|
+
): Promise<SessionData<TData> | null> {
|
|
231
243
|
return this.update(id, { currentRoute: route, currentStep: step });
|
|
232
244
|
}
|
|
233
245
|
|
|
234
|
-
async incrementMessageCount(id: string): Promise<SessionData | null> {
|
|
246
|
+
async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
|
|
235
247
|
const session = await this.findById(id);
|
|
236
248
|
if (!session) return null;
|
|
237
249
|
|
|
@@ -10,7 +10,10 @@ import type {
|
|
|
10
10
|
MessageData,
|
|
11
11
|
SessionStatus,
|
|
12
12
|
PersistenceAdapter,
|
|
13
|
-
|
|
13
|
+
CollectedStateData,
|
|
14
|
+
CreateSessionData,
|
|
15
|
+
} from "../types";
|
|
16
|
+
import { createSessionId } from "../utils";
|
|
14
17
|
|
|
15
18
|
/**
|
|
16
19
|
* SQLite database interface - matches better-sqlite3
|
|
@@ -68,8 +71,10 @@ export interface SQLiteAdapterOptions {
|
|
|
68
71
|
* });
|
|
69
72
|
* ```
|
|
70
73
|
*/
|
|
71
|
-
export class SQLiteAdapter
|
|
72
|
-
|
|
74
|
+
export class SQLiteAdapter<TData = Record<string, unknown>>
|
|
75
|
+
implements PersistenceAdapter<TData>
|
|
76
|
+
{
|
|
77
|
+
public readonly sessionRepository: SessionRepository<TData>;
|
|
73
78
|
public readonly messageRepository: MessageRepository;
|
|
74
79
|
private db: SqliteDatabase;
|
|
75
80
|
|
|
@@ -79,7 +84,10 @@ export class SQLiteAdapter implements PersistenceAdapter {
|
|
|
79
84
|
const sessionTable = options.tables?.sessions || "agent_sessions";
|
|
80
85
|
const messageTable = options.tables?.messages || "agent_messages";
|
|
81
86
|
|
|
82
|
-
this.sessionRepository = new SQLiteSessionRepository(
|
|
87
|
+
this.sessionRepository = new SQLiteSessionRepository<TData>(
|
|
88
|
+
this.db,
|
|
89
|
+
sessionTable
|
|
90
|
+
);
|
|
83
91
|
this.messageRepository = new SQLiteMessageRepository(this.db, messageTable);
|
|
84
92
|
}
|
|
85
93
|
|
|
@@ -145,16 +153,16 @@ export class SQLiteAdapter implements PersistenceAdapter {
|
|
|
145
153
|
/**
|
|
146
154
|
* SQLite Session Repository
|
|
147
155
|
*/
|
|
148
|
-
class SQLiteSessionRepository
|
|
156
|
+
class SQLiteSessionRepository<TData = Record<string, unknown>>
|
|
157
|
+
implements SessionRepository<TData>
|
|
158
|
+
{
|
|
149
159
|
constructor(private db: SqliteDatabase, private tableName: string) {}
|
|
150
160
|
|
|
151
|
-
create(
|
|
152
|
-
|
|
153
|
-
): Promise<SessionData> {
|
|
154
|
-
const id = `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
161
|
+
create(data: CreateSessionData<TData>): Promise<SessionData<TData>> {
|
|
162
|
+
const id = data.id || createSessionId();
|
|
155
163
|
const now = new Date();
|
|
156
164
|
|
|
157
|
-
const session: SessionData = {
|
|
165
|
+
const session: SessionData<TData> = {
|
|
158
166
|
...data,
|
|
159
167
|
id,
|
|
160
168
|
status: data.status || "active",
|
|
@@ -183,7 +191,7 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
183
191
|
return Promise.resolve(session);
|
|
184
192
|
}
|
|
185
193
|
|
|
186
|
-
findById(id: string): Promise<SessionData | null> {
|
|
194
|
+
findById(id: string): Promise<SessionData<TData> | null> {
|
|
187
195
|
const stmt = this.db.prepare(
|
|
188
196
|
`SELECT * FROM ${this.tableName} WHERE id = ?`
|
|
189
197
|
);
|
|
@@ -191,7 +199,7 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
191
199
|
return Promise.resolve(row ? this.deserializeSession(row) : null);
|
|
192
200
|
}
|
|
193
201
|
|
|
194
|
-
findActiveByUserId(userId: string): Promise<SessionData | null> {
|
|
202
|
+
findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
|
|
195
203
|
const stmt = this.db.prepare(
|
|
196
204
|
`SELECT * FROM ${this.tableName}
|
|
197
205
|
WHERE user_id = ? AND status = 'active'
|
|
@@ -202,7 +210,7 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
202
210
|
return Promise.resolve(row ? this.deserializeSession(row) : null);
|
|
203
211
|
}
|
|
204
212
|
|
|
205
|
-
findByUserId(userId: string, limit = 100): Promise<SessionData[]> {
|
|
213
|
+
findByUserId(userId: string, limit = 100): Promise<SessionData<TData>[]> {
|
|
206
214
|
const stmt = this.db.prepare(
|
|
207
215
|
`SELECT * FROM ${this.tableName}
|
|
208
216
|
WHERE user_id = ?
|
|
@@ -215,8 +223,8 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
215
223
|
|
|
216
224
|
async update(
|
|
217
225
|
id: string,
|
|
218
|
-
data: Partial<Omit<SessionData
|
|
219
|
-
): Promise<SessionData | null> {
|
|
226
|
+
data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
|
|
227
|
+
): Promise<SessionData<TData> | null> {
|
|
220
228
|
const fields: string[] = [];
|
|
221
229
|
const values: unknown[] = [];
|
|
222
230
|
|
|
@@ -270,14 +278,14 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
270
278
|
id: string,
|
|
271
279
|
status: SessionStatus,
|
|
272
280
|
completedAt?: Date
|
|
273
|
-
): Promise<SessionData | null> {
|
|
281
|
+
): Promise<SessionData<TData> | null> {
|
|
274
282
|
return await this.update(id, { status, completedAt });
|
|
275
283
|
}
|
|
276
284
|
|
|
277
285
|
async updateCollectedData(
|
|
278
286
|
id: string,
|
|
279
|
-
collectedData:
|
|
280
|
-
): Promise<SessionData | null> {
|
|
287
|
+
collectedData: CollectedStateData<TData>
|
|
288
|
+
): Promise<SessionData<TData> | null> {
|
|
281
289
|
return await this.update(id, { collectedData });
|
|
282
290
|
}
|
|
283
291
|
|
|
@@ -285,14 +293,14 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
285
293
|
id: string,
|
|
286
294
|
route?: string,
|
|
287
295
|
step?: string
|
|
288
|
-
): Promise<SessionData | null> {
|
|
296
|
+
): Promise<SessionData<TData> | null> {
|
|
289
297
|
return await this.update(id, {
|
|
290
298
|
currentRoute: route,
|
|
291
299
|
currentStep: step,
|
|
292
300
|
});
|
|
293
301
|
}
|
|
294
302
|
|
|
295
|
-
async incrementMessageCount(id: string): Promise<SessionData | null> {
|
|
303
|
+
async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
|
|
296
304
|
const stmt = this.db.prepare(
|
|
297
305
|
`UPDATE ${this.tableName}
|
|
298
306
|
SET message_count = message_count + 1,
|
|
@@ -314,7 +322,7 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
314
322
|
return Promise.resolve(result.changes > 0);
|
|
315
323
|
}
|
|
316
324
|
|
|
317
|
-
private deserializeSession(row: Record<string, unknown>): SessionData {
|
|
325
|
+
private deserializeSession(row: Record<string, unknown>): SessionData<TData> {
|
|
318
326
|
return {
|
|
319
327
|
id: row.id as string,
|
|
320
328
|
userId: (row.user_id as string) || undefined,
|
|
@@ -323,7 +331,9 @@ class SQLiteSessionRepository implements SessionRepository {
|
|
|
323
331
|
currentRoute: (row.current_route as string) || undefined,
|
|
324
332
|
currentStep: (row.current_step as string) || undefined,
|
|
325
333
|
collectedData: row.collected_data
|
|
326
|
-
? (JSON.parse(
|
|
334
|
+
? (JSON.parse(
|
|
335
|
+
row.collected_data as string
|
|
336
|
+
) as CollectedStateData<TData>)
|
|
327
337
|
: undefined,
|
|
328
338
|
messageCount: (row.message_count as number) || 0,
|
|
329
339
|
lastMessageAt: row.last_message_at
|