@falai/agent 0.1.0-alpha2
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 +797 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts +47 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/MemoryAdapter.js +202 -0
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/MongoAdapter.d.ts +97 -0
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/MongoAdapter.js +168 -0
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts +169 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.js +458 -0
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js +260 -0
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/PrismaAdapter.js +366 -0
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/RedisAdapter.d.ts +71 -0
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/RedisAdapter.js +231 -0
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts +69 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.js +312 -0
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts +17 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js +21 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts +10 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js +13 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/core/Agent.d.ts +232 -0
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +741 -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/src/core/PersistenceManager.js +261 -0
- 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 +194 -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 +202 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponseModal.d.ts +222 -0
- package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseModal.js +1588 -0
- package/dist/cjs/src/core/ResponseModal.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +175 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +549 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +181 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/src/core/Route.js +541 -0
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts +159 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.js +961 -0
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +94 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +239 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +170 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +448 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolManager.d.ts +234 -0
- package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/src/core/ToolManager.js +1117 -0
- package/dist/cjs/src/core/ToolManager.js.map +1 -0
- package/dist/cjs/src/index.d.ts +44 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +88 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/providers/AnthropicProvider.d.ts +43 -0
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/AnthropicProvider.js +377 -0
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/cjs/src/providers/GeminiProvider.d.ts +58 -0
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/GeminiProvider.js +489 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/src/providers/OpenAIProvider.d.ts +52 -0
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/OpenAIProvider.js +395 -0
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts +56 -0
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js +409 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts +13 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js +16 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/src/types/agent.d.ts +181 -0
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js +21 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/src/types/ai.d.ts +143 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js +6 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/cjs/src/types/history.d.ts +178 -0
- 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 +22 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +37 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/cjs/src/types/persistence.d.ts +209 -0
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js +7 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/src/types/route.d.ts +238 -0
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/src/types/route.js +6 -0
- package/dist/cjs/src/types/route.js.map +1 -0
- package/dist/cjs/src/types/routing.d.ts +16 -0
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/cjs/src/types/routing.js +3 -0
- package/dist/cjs/src/types/routing.js.map +1 -0
- package/dist/cjs/src/types/schema.d.ts +22 -0
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/cjs/src/types/schema.js +3 -0
- package/dist/cjs/src/types/schema.js.map +1 -0
- 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 +88 -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/src/types/tool.d.ts +130 -0
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/src/types/tool.js +19 -0
- package/dist/cjs/src/types/tool.js.map +1 -0
- 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 +32 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/cjs/src/utils/condition.d.ts +38 -0
- package/dist/cjs/src/utils/condition.d.ts.map +1 -0
- package/dist/cjs/src/utils/condition.js +168 -0
- package/dist/cjs/src/utils/condition.js.map +1 -0
- package/dist/cjs/src/utils/event.d.ts +6 -0
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/src/utils/event.js +20 -0
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +60 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +274 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts +25 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js +70 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +15 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +64 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/json.d.ts +16 -0
- package/dist/cjs/src/utils/json.d.ts.map +1 -0
- package/dist/cjs/src/utils/json.js +47 -0
- package/dist/cjs/src/utils/json.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts +10 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js +23 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts +10 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js +76 -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/src/utils/session.js +170 -0
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +155 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +383 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/src/adapters/MemoryAdapter.d.ts +47 -0
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/src/adapters/MemoryAdapter.js +198 -0
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/src/adapters/MongoAdapter.d.ts +97 -0
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/src/adapters/MongoAdapter.js +164 -0
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/src/adapters/OpenSearchAdapter.d.ts +169 -0
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/src/adapters/OpenSearchAdapter.js +454 -0
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/src/adapters/PostgreSQLAdapter.d.ts +71 -0
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/src/adapters/PostgreSQLAdapter.js +256 -0
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/src/adapters/PrismaAdapter.d.ts +115 -0
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/src/adapters/PrismaAdapter.js +362 -0
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/src/adapters/RedisAdapter.d.ts +71 -0
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/src/adapters/RedisAdapter.js +227 -0
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/src/adapters/SQLiteAdapter.d.ts +69 -0
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/src/adapters/SQLiteAdapter.js +308 -0
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.d.ts +17 -0
- package/dist/src/adapters/index.d.ts.map +1 -0
- package/dist/src/adapters/index.js +11 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.d.ts +10 -0
- package/dist/src/constants/index.d.ts.map +1 -0
- package/dist/src/constants/index.js +10 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/core/Agent.d.ts +232 -0
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +737 -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/src/core/PersistenceManager.js +257 -0
- 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 +190 -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 +198 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponseModal.d.ts +222 -0
- package/dist/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/src/core/ResponseModal.js +1583 -0
- package/dist/src/core/ResponseModal.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +175 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +545 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +181 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/src/core/Route.js +537 -0
- package/dist/src/core/Route.js.map +1 -0
- package/dist/src/core/RoutingEngine.d.ts +159 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/src/core/RoutingEngine.js +957 -0
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +94 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +235 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +170 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +444 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolManager.d.ts +234 -0
- package/dist/src/core/ToolManager.d.ts.map +1 -0
- package/dist/src/core/ToolManager.js +1111 -0
- package/dist/src/core/ToolManager.js.map +1 -0
- package/dist/src/index.d.ts +44 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +37 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/providers/AnthropicProvider.d.ts +43 -0
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/src/providers/AnthropicProvider.js +370 -0
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/src/providers/GeminiProvider.d.ts +58 -0
- package/dist/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/src/providers/GeminiProvider.js +485 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/src/providers/OpenAIProvider.d.ts +52 -0
- package/dist/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/src/providers/OpenAIProvider.js +388 -0
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/src/providers/OpenRouterProvider.d.ts +56 -0
- package/dist/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/src/providers/OpenRouterProvider.js +402 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.d.ts +13 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +9 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/src/types/agent.d.ts +181 -0
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js +18 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/src/types/ai.d.ts +143 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/src/types/ai.js +5 -0
- package/dist/src/types/ai.js.map +1 -0
- package/dist/src/types/history.d.ts +178 -0
- 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 +22 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +12 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/persistence.d.ts +209 -0
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js +6 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/src/types/route.d.ts +238 -0
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/src/types/route.js +5 -0
- package/dist/src/types/route.js.map +1 -0
- package/dist/src/types/routing.d.ts +16 -0
- package/dist/src/types/routing.d.ts.map +1 -0
- package/dist/src/types/routing.js +2 -0
- package/dist/src/types/routing.js.map +1 -0
- package/dist/src/types/schema.d.ts +22 -0
- package/dist/src/types/schema.d.ts.map +1 -0
- package/dist/src/types/schema.js +2 -0
- package/dist/src/types/schema.js.map +1 -0
- 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 +88 -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/src/types/tool.d.ts +130 -0
- package/dist/src/types/tool.d.ts.map +1 -0
- package/dist/src/types/tool.js +16 -0
- package/dist/src/types/tool.js.map +1 -0
- 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 +29 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/src/utils/condition.d.ts +38 -0
- package/dist/src/utils/condition.d.ts.map +1 -0
- package/dist/src/utils/condition.js +161 -0
- package/dist/src/utils/condition.js.map +1 -0
- package/dist/src/utils/event.d.ts +6 -0
- package/dist/src/utils/event.d.ts.map +1 -0
- package/dist/src/utils/event.js +17 -0
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +60 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +263 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.d.ts +25 -0
- package/dist/src/utils/id.d.ts.map +1 -0
- package/dist/src/utils/id.js +64 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +15 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +23 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/json.d.ts +16 -0
- package/dist/src/utils/json.d.ts.map +1 -0
- package/dist/src/utils/json.js +43 -0
- package/dist/src/utils/json.js.map +1 -0
- package/dist/src/utils/logger.d.ts +10 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +17 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.d.ts +10 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +71 -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/src/utils/session.js +160 -0
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +155 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +374 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/CONTRIBUTING.md +521 -0
- package/docs/README.md +228 -0
- package/docs/api/README.md +3258 -0
- package/docs/api/overview.md +1134 -0
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/core/agent/README.md +902 -0
- package/docs/core/agent/context-management.md +796 -0
- package/docs/core/agent/session-management.md +641 -0
- 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 +287 -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 +247 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +154 -0
- package/docs/core/error-handling.md +638 -0
- package/docs/core/persistence/adapters.md +255 -0
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +466 -0
- package/docs/core/tools/tool-definition.md +970 -0
- package/docs/core/tools/tool-scoping.md +819 -0
- package/docs/guides/advanced-patterns/publishing.md +186 -0
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +696 -0
- package/docs/guides/migration/README.md +72 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/response-modal-refactor.md +518 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +735 -0
- package/examples/advanced-patterns/persistent-onboarding.ts +728 -0
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +556 -0
- package/examples/advanced-patterns/streaming-responses.ts +578 -0
- package/examples/ai-providers/anthropic-integration.ts +388 -0
- package/examples/ai-providers/openai-integration.ts +228 -0
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +318 -0
- package/examples/core-concepts/basic-agent.ts +503 -0
- package/examples/core-concepts/modern-streaming-api.ts +309 -0
- package/examples/core-concepts/schema-driven-extraction.ts +332 -0
- package/examples/core-concepts/session-management.ts +494 -0
- package/examples/integrations/database-integration.ts +630 -0
- package/examples/integrations/healthcare-integration.ts +595 -0
- package/examples/integrations/search-integration.ts +530 -0
- package/examples/integrations/server-session-management.ts +307 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/persistence/database-persistence.ts +583 -0
- package/examples/persistence/memory-sessions.ts +495 -0
- package/examples/persistence/prisma-schema.example.prisma +74 -0
- package/examples/persistence/redis-persistence.ts +488 -0
- package/examples/tools/basic-tools.ts +765 -0
- package/examples/tools/data-enrichment-tools.ts +593 -0
- package/package.json +125 -0
- package/src/adapters/MemoryAdapter.ts +273 -0
- package/src/adapters/MongoAdapter.ts +304 -0
- package/src/adapters/OpenSearchAdapter.ts +670 -0
- package/src/adapters/PostgreSQLAdapter.ts +428 -0
- package/src/adapters/PrismaAdapter.ts +553 -0
- package/src/adapters/RedisAdapter.ts +377 -0
- package/src/adapters/SQLiteAdapter.ts +459 -0
- package/src/adapters/index.ts +43 -0
- package/src/constants/index.ts +10 -0
- package/src/core/Agent.ts +970 -0
- package/src/core/Events.ts +164 -0
- package/src/core/PersistenceManager.ts +353 -0
- package/src/core/PromptComposer.ts +253 -0
- package/src/core/ResponseEngine.ts +306 -0
- package/src/core/ResponseModal.ts +2050 -0
- package/src/core/ResponsePipeline.ts +864 -0
- package/src/core/Route.ts +677 -0
- package/src/core/RoutingEngine.ts +1396 -0
- package/src/core/SessionManager.ts +297 -0
- package/src/core/Step.ts +593 -0
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +155 -0
- package/src/providers/AnthropicProvider.ts +560 -0
- package/src/providers/GeminiProvider.ts +683 -0
- package/src/providers/OpenAIProvider.ts +602 -0
- package/src/providers/OpenRouterProvider.ts +613 -0
- package/src/providers/index.ts +16 -0
- package/src/types/agent.ts +196 -0
- package/src/types/ai.ts +158 -0
- package/src/types/history.ts +206 -0
- package/src/types/index.ts +119 -0
- package/src/types/persistence.ts +251 -0
- package/src/types/route.ts +272 -0
- package/src/types/routing.ts +18 -0
- package/src/types/schema.ts +23 -0
- package/src/types/session.ts +74 -0
- package/src/types/template.ts +104 -0
- package/src/types/tool.ts +174 -0
- package/src/utils/clone.ts +34 -0
- package/src/utils/condition.ts +190 -0
- package/src/utils/event.ts +16 -0
- package/src/utils/history.ts +306 -0
- package/src/utils/id.ts +73 -0
- package/src/utils/index.ts +69 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/logger.ts +19 -0
- package/src/utils/retry.ts +97 -0
- package/src/utils/session.ts +204 -0
- package/src/utils/template.ts +444 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event utilities and helpers
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
Event,
|
|
7
|
+
EmittedEvent,
|
|
8
|
+
MessageEventData,
|
|
9
|
+
ToolEventData,
|
|
10
|
+
HistoryMessage,
|
|
11
|
+
MessageData,
|
|
12
|
+
HistoryItem,
|
|
13
|
+
History,
|
|
14
|
+
} from "../types";
|
|
15
|
+
import { EventKind, MessageRole } from "../types";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Convert a simple JSON history message to an internal Event
|
|
19
|
+
*/
|
|
20
|
+
export function convertHistoryMessage<TData = unknown>(
|
|
21
|
+
message: HistoryMessage<TData>
|
|
22
|
+
): Event<MessageEventData> {
|
|
23
|
+
return {
|
|
24
|
+
kind: EventKind.MESSAGE,
|
|
25
|
+
source: message.role,
|
|
26
|
+
data: {
|
|
27
|
+
participant: {
|
|
28
|
+
display_name: message.name || getDefaultName(message.role),
|
|
29
|
+
},
|
|
30
|
+
message: message.content,
|
|
31
|
+
session: message.session,
|
|
32
|
+
},
|
|
33
|
+
timestamp: message.timestamp || new Date().toISOString(),
|
|
34
|
+
id: message.metadata?.id as string,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Get default participant name for a role
|
|
40
|
+
*/
|
|
41
|
+
function getDefaultName(role: MessageRole): string {
|
|
42
|
+
switch (role) {
|
|
43
|
+
case MessageRole.USER:
|
|
44
|
+
return "User";
|
|
45
|
+
case MessageRole.ASSISTANT:
|
|
46
|
+
return "Assistant";
|
|
47
|
+
case MessageRole.SYSTEM:
|
|
48
|
+
return "System";
|
|
49
|
+
default:
|
|
50
|
+
return "Unknown";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Convert an array of history messages to Events
|
|
56
|
+
*/
|
|
57
|
+
export function convertHistoryToEvents<TData = unknown>(
|
|
58
|
+
history: HistoryMessage<TData>[]
|
|
59
|
+
): Event[] {
|
|
60
|
+
return history.map(convertHistoryMessage);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Adapt an event for inclusion in prompts
|
|
65
|
+
* Transforms event data into a serializable format
|
|
66
|
+
*/
|
|
67
|
+
export function adaptEvent(e: Event | EmittedEvent): string {
|
|
68
|
+
let data: unknown = e.data;
|
|
69
|
+
|
|
70
|
+
if (e.kind === EventKind.MESSAGE) {
|
|
71
|
+
const messageData = e.data as MessageEventData;
|
|
72
|
+
|
|
73
|
+
if (messageData.flagged) {
|
|
74
|
+
data = {
|
|
75
|
+
participant: messageData.participant.display_name,
|
|
76
|
+
message: "<N/A>",
|
|
77
|
+
censored: true,
|
|
78
|
+
reasons: messageData.tags,
|
|
79
|
+
};
|
|
80
|
+
} else {
|
|
81
|
+
data = {
|
|
82
|
+
participant: messageData.participant.display_name,
|
|
83
|
+
message: messageData.message,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (e.kind === EventKind.TOOL) {
|
|
89
|
+
const toolData = e.data as ToolEventData;
|
|
90
|
+
|
|
91
|
+
data = {
|
|
92
|
+
tool_calls: toolData.tool_calls.map((tc) => ({
|
|
93
|
+
tool_id: tc.tool_id,
|
|
94
|
+
arguments: tc.arguments,
|
|
95
|
+
result: tc.result.data,
|
|
96
|
+
})),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const sourceMap: Record<MessageRole, string> = {
|
|
101
|
+
[MessageRole.USER]: "user",
|
|
102
|
+
[MessageRole.ASSISTANT]: "assistant",
|
|
103
|
+
[MessageRole.AGENT]: "agent",
|
|
104
|
+
[MessageRole.SYSTEM]: "system",
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
return JSON.stringify({
|
|
108
|
+
event_kind: e.kind,
|
|
109
|
+
event_source: sourceMap[e.source],
|
|
110
|
+
data,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Convert MessageData to HistoryItem
|
|
116
|
+
*/
|
|
117
|
+
export function convertMessageDataToHistoryItem(
|
|
118
|
+
message: MessageData
|
|
119
|
+
): HistoryItem {
|
|
120
|
+
switch (message.role) {
|
|
121
|
+
case MessageRole.USER:
|
|
122
|
+
return {
|
|
123
|
+
role: "user",
|
|
124
|
+
content: message.content,
|
|
125
|
+
};
|
|
126
|
+
case MessageRole.ASSISTANT:
|
|
127
|
+
return {
|
|
128
|
+
role: "assistant",
|
|
129
|
+
content: message.content,
|
|
130
|
+
tool_calls: message.toolCalls?.map((tc, index) => ({
|
|
131
|
+
id: `call_${index}`, // Generate an ID since MessageData doesn't have tool call IDs
|
|
132
|
+
name: tc.toolName,
|
|
133
|
+
arguments: tc.arguments,
|
|
134
|
+
})),
|
|
135
|
+
};
|
|
136
|
+
case MessageRole.AGENT:
|
|
137
|
+
// Agent role typically represents tool execution results
|
|
138
|
+
// Since we don't have tool_call_id in MessageData, we'll use a placeholder
|
|
139
|
+
return {
|
|
140
|
+
role: "tool",
|
|
141
|
+
tool_call_id: "unknown", // MessageData doesn't store tool call IDs
|
|
142
|
+
name: "unknown_tool",
|
|
143
|
+
content: message.content,
|
|
144
|
+
};
|
|
145
|
+
case MessageRole.SYSTEM:
|
|
146
|
+
return {
|
|
147
|
+
role: "system",
|
|
148
|
+
content: message.content,
|
|
149
|
+
};
|
|
150
|
+
default:
|
|
151
|
+
// Fallback for unknown roles
|
|
152
|
+
return {
|
|
153
|
+
role: "system",
|
|
154
|
+
content: message.content,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Convert an array of MessageData to History (HistoryItem[])
|
|
161
|
+
*/
|
|
162
|
+
export function convertMessagesToHistory(messages: MessageData[]): History {
|
|
163
|
+
return messages.map(convertMessageDataToHistoryItem);
|
|
164
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence Manager
|
|
3
|
+
* Handles optional persistence of sessions and messages
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type {
|
|
7
|
+
PersistenceConfig,
|
|
8
|
+
SessionData,
|
|
9
|
+
MessageData,
|
|
10
|
+
CreateSessionOptions,
|
|
11
|
+
SaveMessageOptions,
|
|
12
|
+
SessionStatus,
|
|
13
|
+
SessionRepository,
|
|
14
|
+
MessageRepository,
|
|
15
|
+
Event,
|
|
16
|
+
SessionState,
|
|
17
|
+
History,
|
|
18
|
+
PersistenceAdapter,
|
|
19
|
+
CollectedStateData,
|
|
20
|
+
} from "../types";
|
|
21
|
+
import { createSession, sessionStepToData, sessionDataToStep } from "../utils";
|
|
22
|
+
import { convertMessagesToHistory } from "./Events";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Manager for handling persistence operations
|
|
26
|
+
* Provides a clean interface for optional database persistence
|
|
27
|
+
*/
|
|
28
|
+
export class PersistenceManager<TData = Record<string, unknown>> {
|
|
29
|
+
private config: PersistenceConfig<TData>;
|
|
30
|
+
private sessionRepository: SessionRepository<TData>;
|
|
31
|
+
private messageRepository: MessageRepository;
|
|
32
|
+
|
|
33
|
+
constructor(config: PersistenceConfig<TData>) {
|
|
34
|
+
this.config = {
|
|
35
|
+
autoSave: true,
|
|
36
|
+
...config,
|
|
37
|
+
};
|
|
38
|
+
this.sessionRepository = config.adapter.sessionRepository;
|
|
39
|
+
this.messageRepository = config.adapter.messageRepository;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Create a new session
|
|
44
|
+
*/
|
|
45
|
+
async createSession(
|
|
46
|
+
options: CreateSessionOptions<TData>
|
|
47
|
+
): Promise<SessionData<TData>> {
|
|
48
|
+
const userId = options.userId || this.config.userId;
|
|
49
|
+
|
|
50
|
+
return await this.sessionRepository.create({
|
|
51
|
+
userId,
|
|
52
|
+
agentName: options.agentName,
|
|
53
|
+
status: "active",
|
|
54
|
+
collectedData: {
|
|
55
|
+
data: options.initialData || {},
|
|
56
|
+
routeHistory: [],
|
|
57
|
+
metadata: {},
|
|
58
|
+
},
|
|
59
|
+
messageCount: 0,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get session by ID
|
|
65
|
+
*/
|
|
66
|
+
async getSession(sessionId: string): Promise<SessionData<TData> | null> {
|
|
67
|
+
return await this.sessionRepository.findById(sessionId);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Find active session for a user
|
|
72
|
+
*/
|
|
73
|
+
async findActiveSession(userId?: string): Promise<SessionData<TData> | null> {
|
|
74
|
+
const effectiveUserId = userId || this.config.userId;
|
|
75
|
+
if (!effectiveUserId) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
"userId must be provided or configured in PersistenceConfig"
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
return await this.sessionRepository.findActiveByUserId(effectiveUserId);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Get all sessions for a user
|
|
85
|
+
*/
|
|
86
|
+
async getUserSessions(
|
|
87
|
+
userId?: string,
|
|
88
|
+
limit?: number
|
|
89
|
+
): Promise<SessionData<TData>[]> {
|
|
90
|
+
const effectiveUserId = userId || this.config.userId;
|
|
91
|
+
if (!effectiveUserId) {
|
|
92
|
+
throw new Error(
|
|
93
|
+
"userId must be provided or configured in PersistenceConfig"
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
return await this.sessionRepository.findByUserId(effectiveUserId, limit);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Update session status
|
|
101
|
+
*/
|
|
102
|
+
async updateSessionStatus(
|
|
103
|
+
sessionId: string,
|
|
104
|
+
status: SessionStatus,
|
|
105
|
+
completedAt?: Date
|
|
106
|
+
): Promise<SessionData<TData> | null> {
|
|
107
|
+
return await this.sessionRepository.updateStatus(
|
|
108
|
+
sessionId,
|
|
109
|
+
status,
|
|
110
|
+
completedAt
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Update collected data in session
|
|
116
|
+
*/
|
|
117
|
+
async updateCollectedData(
|
|
118
|
+
sessionId: string,
|
|
119
|
+
collectedData: CollectedStateData<TData>
|
|
120
|
+
): Promise<SessionData<TData> | null> {
|
|
121
|
+
return await this.sessionRepository.updateCollectedData(
|
|
122
|
+
sessionId,
|
|
123
|
+
collectedData
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Update current route and step
|
|
129
|
+
*/
|
|
130
|
+
async updateRouteStep(
|
|
131
|
+
sessionId: string,
|
|
132
|
+
route?: string,
|
|
133
|
+
step?: string
|
|
134
|
+
): Promise<SessionData<TData> | null> {
|
|
135
|
+
return await this.sessionRepository.updateRouteStep(sessionId, route, step);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Save a message
|
|
140
|
+
*/
|
|
141
|
+
async saveMessage(options: SaveMessageOptions): Promise<MessageData> {
|
|
142
|
+
const userId = options.userId || this.config.userId;
|
|
143
|
+
|
|
144
|
+
const message = await this.messageRepository.create({
|
|
145
|
+
sessionId: options.sessionId,
|
|
146
|
+
userId,
|
|
147
|
+
role: options.role,
|
|
148
|
+
content: options.content,
|
|
149
|
+
route: options.route,
|
|
150
|
+
step: options.step,
|
|
151
|
+
toolCalls: options.toolCalls,
|
|
152
|
+
event: options.event,
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// Increment message count in session if autoSave is enabled
|
|
156
|
+
if (this.config.autoSave) {
|
|
157
|
+
await this.sessionRepository.incrementMessageCount(options.sessionId);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return message;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Get all messages for a session
|
|
165
|
+
*/
|
|
166
|
+
async getSessionMessages(
|
|
167
|
+
sessionId: string,
|
|
168
|
+
limit?: number
|
|
169
|
+
): Promise<MessageData[]> {
|
|
170
|
+
return await this.messageRepository.findBySessionId(sessionId, limit);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Get messages for a user
|
|
175
|
+
*/
|
|
176
|
+
async getUserMessages(
|
|
177
|
+
userId?: string,
|
|
178
|
+
limit?: number
|
|
179
|
+
): Promise<MessageData[]> {
|
|
180
|
+
const effectiveUserId = userId || this.config.userId;
|
|
181
|
+
if (!effectiveUserId) {
|
|
182
|
+
throw new Error(
|
|
183
|
+
"userId must be provided or configured in PersistenceConfig"
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
return await this.messageRepository.findByUserId(effectiveUserId, limit);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Delete a session and all its messages
|
|
191
|
+
*/
|
|
192
|
+
async deleteSession(sessionId: string): Promise<boolean> {
|
|
193
|
+
// Delete all messages first
|
|
194
|
+
await this.messageRepository.deleteBySessionId(sessionId);
|
|
195
|
+
|
|
196
|
+
// Then delete the session
|
|
197
|
+
return await this.sessionRepository.delete(sessionId);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Complete a session
|
|
202
|
+
*/
|
|
203
|
+
async completeSession(sessionId: string): Promise<SessionData<TData> | null> {
|
|
204
|
+
return await this.updateSessionStatus(sessionId, "completed", new Date());
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Abandon a session
|
|
209
|
+
*/
|
|
210
|
+
async abandonSession(sessionId: string): Promise<SessionData<TData> | null> {
|
|
211
|
+
return await this.updateSessionStatus(sessionId, "abandoned");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Helper: Convert message data to Event format
|
|
216
|
+
*/
|
|
217
|
+
messageToEvent(message: MessageData): Event | undefined {
|
|
218
|
+
return message.event;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Helper: Load history from session messages
|
|
223
|
+
*/
|
|
224
|
+
async loadSessionHistory(sessionId: string): Promise<History> {
|
|
225
|
+
const messages = await this.getSessionMessages(sessionId);
|
|
226
|
+
return convertMessagesToHistory(messages);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Save SessionState to database
|
|
231
|
+
* Converts SessionState to SessionData and persists it
|
|
232
|
+
*/
|
|
233
|
+
async saveSessionState(
|
|
234
|
+
sessionId: string,
|
|
235
|
+
sessionStep: SessionState<TData>
|
|
236
|
+
): Promise<SessionData<TData> | null> {
|
|
237
|
+
// Validate input parameters
|
|
238
|
+
if (!sessionId || typeof sessionId !== 'string') {
|
|
239
|
+
throw new Error('Session ID must be a non-empty string');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (!sessionStep || typeof sessionStep !== 'object') {
|
|
243
|
+
throw new Error('Session step must be a valid object');
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Validate session data structure
|
|
247
|
+
if (sessionStep.data && typeof sessionStep.data !== 'object') {
|
|
248
|
+
throw new Error('Session data must be an object');
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
let persistenceData;
|
|
252
|
+
try {
|
|
253
|
+
persistenceData = sessionStepToData(sessionStep);
|
|
254
|
+
} catch (error) {
|
|
255
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
256
|
+
throw new Error(`Failed to convert session step to persistence data: ${errorMessage}`);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
try {
|
|
260
|
+
// First try to find existing session
|
|
261
|
+
const existingSession = await this.sessionRepository.findById(sessionId);
|
|
262
|
+
|
|
263
|
+
if (existingSession) {
|
|
264
|
+
// Update existing session
|
|
265
|
+
return await this.sessionRepository.update(sessionId, {
|
|
266
|
+
currentRoute: persistenceData.currentRoute,
|
|
267
|
+
currentStep: persistenceData.currentStep,
|
|
268
|
+
collectedData: persistenceData.collectedData,
|
|
269
|
+
lastMessageAt: new Date(),
|
|
270
|
+
});
|
|
271
|
+
} else {
|
|
272
|
+
// Create new session if it doesn't exist
|
|
273
|
+
return await this.sessionRepository.create({
|
|
274
|
+
id: sessionId,
|
|
275
|
+
userId: persistenceData.collectedData.metadata?.userId
|
|
276
|
+
? JSON.stringify(persistenceData.collectedData.metadata?.userId)
|
|
277
|
+
: this.config.userId,
|
|
278
|
+
status: "active",
|
|
279
|
+
currentRoute: persistenceData.currentRoute,
|
|
280
|
+
currentStep: persistenceData.currentStep,
|
|
281
|
+
collectedData: persistenceData.collectedData,
|
|
282
|
+
messageCount: 0,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
} catch (error) {
|
|
286
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
287
|
+
throw new Error(`Failed to save session state to persistence: ${errorMessage}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Load SessionState from database
|
|
293
|
+
* Converts SessionData to SessionState
|
|
294
|
+
*/
|
|
295
|
+
async loadSessionState(
|
|
296
|
+
sessionId: string
|
|
297
|
+
): Promise<SessionState<TData> | null> {
|
|
298
|
+
const sessionData = await this.sessionRepository.findById(sessionId);
|
|
299
|
+
|
|
300
|
+
if (!sessionData) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Reconstruct SessionState from SessionData
|
|
305
|
+
const sessionState = sessionDataToStep<TData>(sessionId, sessionData);
|
|
306
|
+
|
|
307
|
+
// Create a full session step with the loaded data
|
|
308
|
+
const session = createSession<TData>(sessionId, {
|
|
309
|
+
createdAt: sessionData.createdAt,
|
|
310
|
+
lastUpdatedAt: sessionData.updatedAt,
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
return {
|
|
314
|
+
...session,
|
|
315
|
+
...sessionState,
|
|
316
|
+
metadata: {
|
|
317
|
+
...session.metadata,
|
|
318
|
+
...sessionState.metadata,
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Get the underlying adapter
|
|
325
|
+
*/
|
|
326
|
+
getAdapter(): PersistenceAdapter<TData> {
|
|
327
|
+
return this.config.adapter;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Create session with SessionState support
|
|
332
|
+
* Returns both SessionData and initialized SessionState
|
|
333
|
+
*/
|
|
334
|
+
async createSessionWithStep(options: CreateSessionOptions<TData>): Promise<{
|
|
335
|
+
sessionData: SessionData<TData>;
|
|
336
|
+
sessionStep: SessionState<TData>;
|
|
337
|
+
}> {
|
|
338
|
+
const sessionData = await this.createSession(options);
|
|
339
|
+
|
|
340
|
+
// Create SessionState with database session ID
|
|
341
|
+
const sessionStep = createSession<TData>(sessionData.id, {
|
|
342
|
+
createdAt: sessionData.createdAt,
|
|
343
|
+
lastUpdatedAt: sessionData.updatedAt,
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
// If initial data was provided, merge it as collected data
|
|
347
|
+
if (options.initialData) {
|
|
348
|
+
sessionStep.data = options.initialData;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return { sessionData, sessionStep };
|
|
352
|
+
}
|
|
353
|
+
}
|