@falai/agent 0.8.1 → 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 +65 -67
- 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/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +50 -20
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +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 +52 -33
- 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 +34 -11
- 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 +65 -67
- 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/{cjs → src}/core/PersistenceManager.d.ts +21 -19
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +47 -17
- 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 +52 -33
- 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 +32 -11
- 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} +890 -251
- 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} +143 -94
- 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} +1 -1
- 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} +112 -105
- 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 +1093 -478
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +77 -47
- 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 +48 -36
- 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.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.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
package/src/types/persistence.ts
CHANGED
|
@@ -3,29 +3,25 @@
|
|
|
3
3
|
* Support for optional database persistence (Prisma, etc.)
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { Event } from "./history";
|
|
6
|
+
import type { Event, MessageRole } from "./history";
|
|
7
|
+
import type { SessionState } from "./session";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Session status enum
|
|
10
11
|
*/
|
|
11
12
|
export type SessionStatus = "active" | "completed" | "abandoned";
|
|
12
13
|
|
|
13
|
-
/**
|
|
14
|
-
* Message role enum
|
|
15
|
-
*/
|
|
16
|
-
export type MessageRole = "user" | "agent" | "system";
|
|
17
|
-
|
|
18
14
|
/**
|
|
19
15
|
* Base session data structure
|
|
20
16
|
*/
|
|
21
|
-
export interface SessionData {
|
|
17
|
+
export interface SessionData<TData = Record<string, unknown>> {
|
|
22
18
|
id: string;
|
|
23
19
|
userId?: string;
|
|
24
20
|
agentName?: string;
|
|
25
21
|
status: SessionStatus;
|
|
26
22
|
currentRoute?: string;
|
|
27
23
|
currentStep?: string;
|
|
28
|
-
collectedData?:
|
|
24
|
+
collectedData?: CollectedStateData<TData>;
|
|
29
25
|
messageCount?: number;
|
|
30
26
|
lastMessageAt?: Date;
|
|
31
27
|
completedAt?: Date;
|
|
@@ -33,6 +29,30 @@ export interface SessionData {
|
|
|
33
29
|
updatedAt: Date;
|
|
34
30
|
}
|
|
35
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Data for creating a new session (subset of SessionData)
|
|
34
|
+
*/
|
|
35
|
+
export type CreateSessionData<TData = Record<string, unknown>> = Omit<
|
|
36
|
+
SessionData<TData>,
|
|
37
|
+
"id" | "createdAt" | "updatedAt"
|
|
38
|
+
> & {
|
|
39
|
+
id?: string;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Structure for data collected during a session that needs to be persisted.
|
|
44
|
+
* This is a subset of SessionState, stored within SessionData.
|
|
45
|
+
*/
|
|
46
|
+
export interface CollectedStateData<TData = Record<string, unknown>> {
|
|
47
|
+
data: Partial<TData>;
|
|
48
|
+
dataByRoute: Record<string, Partial<TData>>;
|
|
49
|
+
routeHistory: SessionState<TData>["routeHistory"];
|
|
50
|
+
history?: SessionState<TData>["history"];
|
|
51
|
+
currentRouteTitle?: string;
|
|
52
|
+
currentStepDescription?: string;
|
|
53
|
+
metadata: SessionState<TData>["metadata"];
|
|
54
|
+
}
|
|
55
|
+
|
|
36
56
|
/**
|
|
37
57
|
* Base message data structure
|
|
38
58
|
*/
|
|
@@ -53,36 +73,34 @@ export interface MessageData {
|
|
|
53
73
|
* Repository interface for sessions
|
|
54
74
|
* Implement this interface with your database of choice
|
|
55
75
|
*/
|
|
56
|
-
export interface SessionRepository {
|
|
76
|
+
export interface SessionRepository<TData = Record<string, unknown>> {
|
|
57
77
|
/**
|
|
58
78
|
* Create a new session
|
|
59
79
|
*/
|
|
60
|
-
create(
|
|
61
|
-
data: Omit<SessionData, "id" | "createdAt" | "updatedAt">
|
|
62
|
-
): Promise<SessionData>;
|
|
80
|
+
create(data: CreateSessionData<TData>): Promise<SessionData<TData>>;
|
|
63
81
|
|
|
64
82
|
/**
|
|
65
83
|
* Find session by ID
|
|
66
84
|
*/
|
|
67
|
-
findById(id: string): Promise<SessionData | null>;
|
|
85
|
+
findById(id: string): Promise<SessionData<TData> | null>;
|
|
68
86
|
|
|
69
87
|
/**
|
|
70
88
|
* Find active session by user ID
|
|
71
89
|
*/
|
|
72
|
-
findActiveByUserId(userId: string): Promise<SessionData | null>;
|
|
90
|
+
findActiveByUserId(userId: string): Promise<SessionData<TData> | null>;
|
|
73
91
|
|
|
74
92
|
/**
|
|
75
93
|
* Find all sessions for a user
|
|
76
94
|
*/
|
|
77
|
-
findByUserId(userId: string, limit?: number): Promise<SessionData[]>;
|
|
95
|
+
findByUserId(userId: string, limit?: number): Promise<SessionData<TData>[]>;
|
|
78
96
|
|
|
79
97
|
/**
|
|
80
98
|
* Update session
|
|
81
99
|
*/
|
|
82
100
|
update(
|
|
83
101
|
id: string,
|
|
84
|
-
data: Partial<Omit<SessionData
|
|
85
|
-
): Promise<SessionData | null>;
|
|
102
|
+
data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
|
|
103
|
+
): Promise<SessionData<TData> | null>;
|
|
86
104
|
|
|
87
105
|
/**
|
|
88
106
|
* Update session status
|
|
@@ -91,15 +109,15 @@ export interface SessionRepository {
|
|
|
91
109
|
id: string,
|
|
92
110
|
status: SessionStatus,
|
|
93
111
|
completedAt?: Date
|
|
94
|
-
): Promise<SessionData | null>;
|
|
112
|
+
): Promise<SessionData<TData> | null>;
|
|
95
113
|
|
|
96
114
|
/**
|
|
97
115
|
* Update collected data
|
|
98
116
|
*/
|
|
99
117
|
updateCollectedData(
|
|
100
118
|
id: string,
|
|
101
|
-
collectedData:
|
|
102
|
-
): Promise<SessionData | null>;
|
|
119
|
+
collectedData: CollectedStateData<TData>
|
|
120
|
+
): Promise<SessionData<TData> | null>;
|
|
103
121
|
|
|
104
122
|
/**
|
|
105
123
|
* Update current route and step
|
|
@@ -108,12 +126,12 @@ export interface SessionRepository {
|
|
|
108
126
|
id: string,
|
|
109
127
|
route?: string,
|
|
110
128
|
step?: string
|
|
111
|
-
): Promise<SessionData | null>;
|
|
129
|
+
): Promise<SessionData<TData> | null>;
|
|
112
130
|
|
|
113
131
|
/**
|
|
114
132
|
* Increment message count
|
|
115
133
|
*/
|
|
116
|
-
incrementMessageCount(id: string): Promise<SessionData | null>;
|
|
134
|
+
incrementMessageCount(id: string): Promise<SessionData<TData> | null>;
|
|
117
135
|
|
|
118
136
|
/**
|
|
119
137
|
* Delete session
|
|
@@ -166,11 +184,11 @@ export interface MessageRepository {
|
|
|
166
184
|
* Persistence adapter interface
|
|
167
185
|
* Implement this to create adapters for different databases
|
|
168
186
|
*/
|
|
169
|
-
export interface PersistenceAdapter {
|
|
187
|
+
export interface PersistenceAdapter<TData = Record<string, unknown>> {
|
|
170
188
|
/**
|
|
171
189
|
* Session repository
|
|
172
190
|
*/
|
|
173
|
-
readonly sessionRepository: SessionRepository
|
|
191
|
+
readonly sessionRepository: SessionRepository<TData>;
|
|
174
192
|
|
|
175
193
|
/**
|
|
176
194
|
* Message repository
|
|
@@ -192,11 +210,11 @@ export interface PersistenceAdapter {
|
|
|
192
210
|
/**
|
|
193
211
|
* Configuration for persistence
|
|
194
212
|
*/
|
|
195
|
-
export interface PersistenceConfig {
|
|
213
|
+
export interface PersistenceConfig<TData = Record<string, unknown>> {
|
|
196
214
|
/**
|
|
197
215
|
* Persistence adapter instance (e.g., PrismaAdapter)
|
|
198
216
|
*/
|
|
199
|
-
adapter: PersistenceAdapter
|
|
217
|
+
adapter: PersistenceAdapter<TData>;
|
|
200
218
|
|
|
201
219
|
/**
|
|
202
220
|
* Whether to auto-save messages (default: true)
|
|
@@ -213,10 +231,10 @@ export interface PersistenceConfig {
|
|
|
213
231
|
/**
|
|
214
232
|
* Options for creating a session
|
|
215
233
|
*/
|
|
216
|
-
export interface CreateSessionOptions {
|
|
234
|
+
export interface CreateSessionOptions<TData = Record<string, unknown>> {
|
|
217
235
|
userId?: string;
|
|
218
236
|
agentName?: string;
|
|
219
|
-
initialData?:
|
|
237
|
+
initialData?: Partial<TData>;
|
|
220
238
|
}
|
|
221
239
|
|
|
222
240
|
/**
|
package/src/types/route.ts
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Route/Journey DSL type definitions
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type { Tool } from "./tool";
|
|
6
6
|
import type { StructuredSchema } from "./schema";
|
|
7
|
+
import { Template } from "./template";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Reference to a route
|
|
@@ -24,18 +25,46 @@ export interface StepRef {
|
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
|
-
* Forward declare Guideline for circular dependency
|
|
28
|
+
* Forward declare Guideline and Term for circular dependency
|
|
28
29
|
*/
|
|
29
|
-
import type { Guideline } from "./agent";
|
|
30
|
+
import type { Guideline, Term } from "./agent";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Route lifecycle hooks for managing route-specific data and behavior
|
|
34
|
+
*/
|
|
35
|
+
export interface RouteLifecycleHooks<TContext = unknown, TData = unknown> {
|
|
36
|
+
/**
|
|
37
|
+
* Called after collected data is updated for this route (from AI response or tool execution)
|
|
38
|
+
* Useful for validation, enrichment, or persistence of route-specific collected data
|
|
39
|
+
* Return modified collected data or the same data to keep it unchanged
|
|
40
|
+
*
|
|
41
|
+
* Unlike Agent-level onDataUpdate, this only triggers for data changes in this specific route.
|
|
42
|
+
*/
|
|
43
|
+
onDataUpdate?: (
|
|
44
|
+
data: Partial<TData>,
|
|
45
|
+
previousCollected: Partial<TData>
|
|
46
|
+
) => Partial<TData> | Promise<Partial<TData>>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Called after context is updated via updateContext() when this route is active
|
|
50
|
+
* Useful for route-specific context reactions, validation, or side effects
|
|
51
|
+
*
|
|
52
|
+
* Unlike Agent-level onContextUpdate, this only triggers when this specific route is active.
|
|
53
|
+
*/
|
|
54
|
+
onContextUpdate?: (
|
|
55
|
+
newContext: TContext,
|
|
56
|
+
previousContext: TContext
|
|
57
|
+
) => void | Promise<void>;
|
|
58
|
+
}
|
|
30
59
|
|
|
31
60
|
/**
|
|
32
61
|
* Route transition configuration when route completes
|
|
33
62
|
*/
|
|
34
|
-
export interface RouteTransitionConfig {
|
|
63
|
+
export interface RouteTransitionConfig<TContext = unknown, TData = unknown> {
|
|
35
64
|
/** Target route ID or title to transition to */
|
|
36
65
|
nextStep: string;
|
|
37
66
|
/** Optional AI-evaluated condition for the transition */
|
|
38
|
-
condition?:
|
|
67
|
+
condition?: Template<TContext, TData>;
|
|
39
68
|
}
|
|
40
69
|
|
|
41
70
|
/**
|
|
@@ -49,9 +78,9 @@ export type RouteCompletionHandler<TContext = unknown, TData = unknown> = (
|
|
|
49
78
|
context?: TContext
|
|
50
79
|
) =>
|
|
51
80
|
| string
|
|
52
|
-
| RouteTransitionConfig
|
|
81
|
+
| RouteTransitionConfig<TContext, TData>
|
|
53
82
|
| undefined
|
|
54
|
-
| Promise<string | RouteTransitionConfig | undefined>;
|
|
83
|
+
| Promise<string | RouteTransitionConfig<TContext, TData> | undefined>;
|
|
55
84
|
|
|
56
85
|
/**
|
|
57
86
|
* Options for creating a route
|
|
@@ -64,16 +93,22 @@ export interface RouteOptions<TContext = unknown, TData = unknown> {
|
|
|
64
93
|
title: string;
|
|
65
94
|
/** Description of what this route accomplishes */
|
|
66
95
|
description?: string;
|
|
96
|
+
/** Optional identity prompt defining the agent's role and persona for this route */
|
|
97
|
+
identity?: Template<TContext, TData>;
|
|
98
|
+
/** Optional personality prompt defining the agent's communication style for this route */
|
|
99
|
+
personality?: Template<TContext, TData>;
|
|
67
100
|
/** Conditions that activate this route */
|
|
68
|
-
conditions?:
|
|
101
|
+
conditions?: Template<TContext, TData>[];
|
|
69
102
|
/** Initial guidelines for this route */
|
|
70
|
-
guidelines?: Guideline[];
|
|
71
|
-
/**
|
|
72
|
-
|
|
103
|
+
guidelines?: Guideline<TContext>[];
|
|
104
|
+
/** Initial terms for the route's domain glossary */
|
|
105
|
+
terms?: Term<TContext>[];
|
|
106
|
+
/** Tools available in this route */
|
|
107
|
+
tools?: Tool<TContext, unknown[], unknown, TData>[];
|
|
73
108
|
/** Absolute rules the agent must follow in this route */
|
|
74
|
-
rules?:
|
|
109
|
+
rules?: Template<TContext, TData>[];
|
|
75
110
|
/** Absolute prohibitions the agent must never do in this route */
|
|
76
|
-
prohibitions?:
|
|
111
|
+
prohibitions?: Template<TContext, TData>[];
|
|
77
112
|
/** Optional: extractions the router may return (added to routing schema) */
|
|
78
113
|
routingExtrasSchema?: StructuredSchema;
|
|
79
114
|
/** Optional: structured response data for this route's message generation */
|
|
@@ -94,26 +129,20 @@ export interface RouteOptions<TContext = unknown, TData = unknown> {
|
|
|
94
129
|
* If provided, automatically chains the steps from initialStep to END_ROUTE
|
|
95
130
|
* For complex flows with branching, build the step machine manually instead
|
|
96
131
|
*/
|
|
97
|
-
steps?:
|
|
132
|
+
steps?: StepOptions<TContext, TData>[];
|
|
98
133
|
/**
|
|
99
134
|
* Configure the initial step (optional)
|
|
100
|
-
* Accepts full
|
|
135
|
+
* Accepts full StepOptions configuration (id, prompt, collect, skipIf, etc.)
|
|
101
136
|
* Note: tool and step properties are ignored for initial step
|
|
102
137
|
*/
|
|
103
|
-
initialStep?: Omit<
|
|
104
|
-
TransitionSpec<TContext, TData>,
|
|
105
|
-
"tool" | "step" | "condition"
|
|
106
|
-
>;
|
|
138
|
+
initialStep?: Omit<StepOptions<TContext, TData>, "step">;
|
|
107
139
|
/**
|
|
108
140
|
* Configure the end step (optional)
|
|
109
141
|
* Defines what happens when the route completes (reaches END_ROUTE)
|
|
110
|
-
* Can include
|
|
142
|
+
* Can include prompt for completion message, tool for final actions, etc.
|
|
111
143
|
* Note: step, condition, skipIf properties are ignored for end step
|
|
112
144
|
*/
|
|
113
|
-
endStep?: Omit<
|
|
114
|
-
TransitionSpec<TContext, TData>,
|
|
115
|
-
"step" | "condition" | "skipIf"
|
|
116
|
-
>;
|
|
145
|
+
endStep?: Omit<StepOptions<TContext, TData>, "step" | "condition" | "skipIf">;
|
|
117
146
|
/**
|
|
118
147
|
* Optional transition when route completes (reaches END_ROUTE)
|
|
119
148
|
* Can be:
|
|
@@ -141,30 +170,38 @@ export interface RouteOptions<TContext = unknown, TData = unknown> {
|
|
|
141
170
|
*/
|
|
142
171
|
onComplete?:
|
|
143
172
|
| string
|
|
144
|
-
| RouteTransitionConfig
|
|
173
|
+
| RouteTransitionConfig<TContext, TData>
|
|
145
174
|
| RouteCompletionHandler<TContext, TData>;
|
|
175
|
+
/**
|
|
176
|
+
* Route lifecycle hooks
|
|
177
|
+
*/
|
|
178
|
+
hooks?: RouteLifecycleHooks<TContext, TData>;
|
|
179
|
+
/** Knowledge base specific to this route containing any JSON structure the AI should know */
|
|
180
|
+
knowledgeBase?: Record<string, unknown>;
|
|
146
181
|
}
|
|
147
182
|
|
|
148
|
-
/**
|
|
149
|
-
* Inline tool handler for dynamic tool generation
|
|
150
|
-
*/
|
|
151
|
-
export type InlineToolHandler<TContext = unknown, TData = unknown> = (
|
|
152
|
-
context: import("./tool").ToolContext<TContext, TData>
|
|
153
|
-
) =>
|
|
154
|
-
| ToolResult<unknown, TContext, TData>
|
|
155
|
-
| Promise<ToolResult<unknown, TContext, TData>>;
|
|
156
|
-
|
|
157
183
|
/**
|
|
158
184
|
* Specification for a step transition
|
|
159
185
|
*/
|
|
160
|
-
export interface
|
|
186
|
+
export interface StepOptions<TContext = unknown, TData = unknown> {
|
|
161
187
|
/** Custom ID for this step (optional - will generate deterministic ID if not provided) */
|
|
162
188
|
id?: string;
|
|
189
|
+
/** Description of the transition */
|
|
190
|
+
description?: string;
|
|
163
191
|
/** Transition to a chat state with this description */
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
|
|
167
|
-
|
|
192
|
+
prompt?: Template<TContext, TData>;
|
|
193
|
+
/** Tools available for AI to call in this step (by ID reference or inline definition) */
|
|
194
|
+
tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
|
|
195
|
+
/** Programmatic function or tool to run before AI responds */
|
|
196
|
+
prepare?:
|
|
197
|
+
| string
|
|
198
|
+
| Tool<TContext, unknown[], unknown, TData>
|
|
199
|
+
| ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
200
|
+
/** Programmatic function or tool to run after AI responds */
|
|
201
|
+
finalize?:
|
|
202
|
+
| string
|
|
203
|
+
| Tool<TContext, unknown[], unknown, TData>
|
|
204
|
+
| ((context: TContext, data?: Partial<TData>) => void | Promise<void>);
|
|
168
205
|
/** Transition to a specific step or end marker */
|
|
169
206
|
step?: StepRef | symbol;
|
|
170
207
|
/**
|
|
@@ -189,17 +226,39 @@ export interface TransitionSpec<TContext = unknown, TData = unknown> {
|
|
|
189
226
|
* Optional condition for this transition
|
|
190
227
|
* Description of when this transition should be taken
|
|
191
228
|
*/
|
|
192
|
-
|
|
229
|
+
when?: Template<TContext, TData>;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Specification for a branch in the conversation flow
|
|
234
|
+
*/
|
|
235
|
+
export interface BranchSpec<TContext = unknown, TData = unknown> {
|
|
236
|
+
/** User-friendly identifier for this branch (used as object key) */
|
|
237
|
+
name: string;
|
|
238
|
+
/** Optional ID for this branch (auto-generated if not provided) */
|
|
239
|
+
id?: string;
|
|
240
|
+
/** Step configuration for this branch */
|
|
241
|
+
step: StepOptions<TContext, TData>;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Result of a branch operation
|
|
246
|
+
* Maps branch names to their respective step results for continued chaining
|
|
247
|
+
*/
|
|
248
|
+
export interface BranchResult<TContext = unknown, TData = unknown> {
|
|
249
|
+
[branchName: string]: StepResult<TContext, TData>;
|
|
193
250
|
}
|
|
194
251
|
|
|
195
252
|
/**
|
|
196
253
|
* Result of a transition operation
|
|
197
|
-
* Combines step reference with the ability to chain transitions
|
|
254
|
+
* Combines step reference with the ability to chain transitions and create branches
|
|
198
255
|
*/
|
|
199
|
-
export interface
|
|
256
|
+
export interface StepResult<TContext = unknown, TData = unknown>
|
|
200
257
|
extends StepRef {
|
|
201
258
|
/** Allow chaining transitions */
|
|
202
|
-
nextStep: (
|
|
203
|
-
|
|
204
|
-
|
|
259
|
+
nextStep: (spec: StepOptions<TContext, TData>) => StepResult<TContext, TData>;
|
|
260
|
+
/** Create multiple branches from this step */
|
|
261
|
+
branch: (
|
|
262
|
+
branches: BranchSpec<TContext, TData>[]
|
|
263
|
+
) => BranchResult<TContext, TData>;
|
|
205
264
|
}
|
package/src/types/session.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Session step types for tracking conversation progress
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
+
import type { History } from "./history";
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* Pending route transition information
|
|
7
9
|
*/
|
|
@@ -18,41 +20,41 @@ export interface PendingTransition {
|
|
|
18
20
|
* Session step tracks the current position in the conversation flow
|
|
19
21
|
* and data collected during the route progression
|
|
20
22
|
*/
|
|
21
|
-
export interface SessionState<TData =
|
|
23
|
+
export interface SessionState<TData = unknown> {
|
|
22
24
|
/** Unique session identifier (useful for persistence) */
|
|
23
|
-
id
|
|
25
|
+
id: string;
|
|
24
26
|
|
|
25
27
|
/** Current route the conversation is in */
|
|
26
28
|
currentRoute?: {
|
|
27
29
|
id: string;
|
|
28
30
|
title: string;
|
|
29
|
-
enteredAt
|
|
31
|
+
enteredAt?: Date;
|
|
30
32
|
};
|
|
31
33
|
|
|
32
34
|
/** Current step within the route */
|
|
33
35
|
currentStep?: {
|
|
34
36
|
id: string;
|
|
35
37
|
description?: string;
|
|
36
|
-
enteredAt
|
|
38
|
+
enteredAt?: Date;
|
|
37
39
|
};
|
|
38
40
|
|
|
39
41
|
/**
|
|
40
42
|
* Data collected during the current route
|
|
41
|
-
*
|
|
43
|
+
* Convenience reference to dataByRoute[currentRoute.id]
|
|
42
44
|
*/
|
|
43
45
|
data?: Partial<TData>;
|
|
44
46
|
|
|
45
47
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
48
|
+
* Data collected organized by route ID
|
|
49
|
+
* Persists data when switching between routes
|
|
50
|
+
* Allows resuming incomplete routes where they left off
|
|
49
51
|
*/
|
|
50
|
-
dataByRoute?: Record<string, Partial<
|
|
52
|
+
dataByRoute?: Record<string, Partial<TData>>;
|
|
51
53
|
|
|
52
54
|
/** History of routes visited in this session */
|
|
53
|
-
routeHistory
|
|
55
|
+
routeHistory?: Array<{
|
|
54
56
|
routeId: string;
|
|
55
|
-
enteredAt
|
|
57
|
+
enteredAt?: Date;
|
|
56
58
|
exitedAt?: Date;
|
|
57
59
|
completed: boolean;
|
|
58
60
|
}>;
|
|
@@ -63,6 +65,12 @@ export interface SessionState<TData = Record<string, unknown>> {
|
|
|
63
65
|
*/
|
|
64
66
|
pendingTransition?: PendingTransition;
|
|
65
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Conversation history managed by the session
|
|
70
|
+
* Contains the full conversation between user and assistant
|
|
71
|
+
*/
|
|
72
|
+
history?: History;
|
|
73
|
+
|
|
66
74
|
/** Session metadata */
|
|
67
75
|
metadata?: {
|
|
68
76
|
createdAt?: Date;
|
|
@@ -70,205 +78,3 @@ export interface SessionState<TData = Record<string, unknown>> {
|
|
|
70
78
|
[key: string]: unknown;
|
|
71
79
|
};
|
|
72
80
|
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Helper to create a new session
|
|
76
|
-
* @param sessionId - Optional session ID (e.g., from database)
|
|
77
|
-
* @param metadata - Optional metadata to attach
|
|
78
|
-
*/
|
|
79
|
-
export function createSession<TData = Record<string, unknown>>(
|
|
80
|
-
sessionId?: string,
|
|
81
|
-
metadata?: SessionState<TData>["metadata"]
|
|
82
|
-
): SessionState<TData> {
|
|
83
|
-
return {
|
|
84
|
-
id: sessionId,
|
|
85
|
-
data: {},
|
|
86
|
-
dataByRoute: {},
|
|
87
|
-
routeHistory: [],
|
|
88
|
-
metadata: {
|
|
89
|
-
...metadata,
|
|
90
|
-
createdAt: new Date(),
|
|
91
|
-
lastUpdatedAt: new Date(),
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Helper to update session with new route
|
|
98
|
-
* Preserves collected data per route in dataByRoute map
|
|
99
|
-
*/
|
|
100
|
-
export function enterRoute<TData = Record<string, unknown>>(
|
|
101
|
-
session: SessionState<TData>,
|
|
102
|
-
routeId: string,
|
|
103
|
-
routeTitle: string
|
|
104
|
-
): SessionState<TData> {
|
|
105
|
-
// Save current route's collected data before switching
|
|
106
|
-
const dataByRoute = { ...session.dataByRoute };
|
|
107
|
-
if (
|
|
108
|
-
session.currentRoute &&
|
|
109
|
-
session.data &&
|
|
110
|
-
Object.keys(session.data).length > 0
|
|
111
|
-
) {
|
|
112
|
-
dataByRoute[session.currentRoute.id] = session.data;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Exit current route if exists
|
|
116
|
-
const routeHistory = [...session.routeHistory];
|
|
117
|
-
if (session.currentRoute) {
|
|
118
|
-
const lastRouteIndex = routeHistory.findIndex(
|
|
119
|
-
(r) => r.routeId === session.currentRoute?.id && !r.exitedAt
|
|
120
|
-
);
|
|
121
|
-
if (lastRouteIndex >= 0) {
|
|
122
|
-
routeHistory[lastRouteIndex].exitedAt = new Date();
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Load collected data for new route (if resuming) or start fresh
|
|
127
|
-
const newCollected = (dataByRoute[routeId] as Partial<TData>) || {};
|
|
128
|
-
|
|
129
|
-
// Enter new route
|
|
130
|
-
const now = new Date();
|
|
131
|
-
return {
|
|
132
|
-
...session,
|
|
133
|
-
currentRoute: {
|
|
134
|
-
id: routeId,
|
|
135
|
-
title: routeTitle,
|
|
136
|
-
enteredAt: now,
|
|
137
|
-
},
|
|
138
|
-
currentStep: undefined,
|
|
139
|
-
data: newCollected, // Load route's data or start fresh
|
|
140
|
-
dataByRoute,
|
|
141
|
-
routeHistory: [
|
|
142
|
-
...routeHistory,
|
|
143
|
-
{
|
|
144
|
-
routeId,
|
|
145
|
-
enteredAt: now,
|
|
146
|
-
completed: false,
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
metadata: {
|
|
150
|
-
...session.metadata,
|
|
151
|
-
lastUpdatedAt: now,
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Helper to update session with new step
|
|
158
|
-
*/
|
|
159
|
-
export function enterStep<TData = Record<string, unknown>>(
|
|
160
|
-
session: SessionState<TData>,
|
|
161
|
-
stepId: string,
|
|
162
|
-
stepDescription?: string
|
|
163
|
-
): SessionState<TData> {
|
|
164
|
-
return {
|
|
165
|
-
...session,
|
|
166
|
-
currentStep: {
|
|
167
|
-
id: stepId,
|
|
168
|
-
description: stepDescription,
|
|
169
|
-
enteredAt: new Date(),
|
|
170
|
-
},
|
|
171
|
-
metadata: {
|
|
172
|
-
...session.metadata,
|
|
173
|
-
lastUpdatedAt: new Date(),
|
|
174
|
-
},
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Helper to merge collected data into session
|
|
180
|
-
* Updates both the data field and the dataByRoute map
|
|
181
|
-
*/
|
|
182
|
-
export function mergeCollected<TData = Record<string, unknown>>(
|
|
183
|
-
session: SessionState<TData>,
|
|
184
|
-
data: Partial<unknown>
|
|
185
|
-
): SessionState<TData> {
|
|
186
|
-
const newCollected = {
|
|
187
|
-
...session.data,
|
|
188
|
-
...data,
|
|
189
|
-
} as Partial<TData>;
|
|
190
|
-
|
|
191
|
-
// Also update the dataByRoute map for the current route
|
|
192
|
-
const dataByRoute = { ...session.dataByRoute };
|
|
193
|
-
if (session.currentRoute) {
|
|
194
|
-
dataByRoute[session.currentRoute.id] = newCollected;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return {
|
|
198
|
-
...session,
|
|
199
|
-
data: newCollected,
|
|
200
|
-
dataByRoute,
|
|
201
|
-
metadata: {
|
|
202
|
-
...session.metadata,
|
|
203
|
-
lastUpdatedAt: new Date(),
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Helper to convert SessionState to persistence-friendly format
|
|
210
|
-
* Used when saving to database
|
|
211
|
-
*/
|
|
212
|
-
export function sessionStepToData<TData = Record<string, unknown>>(
|
|
213
|
-
session: SessionState<TData>
|
|
214
|
-
): {
|
|
215
|
-
currentRoute?: string;
|
|
216
|
-
currentStep?: string;
|
|
217
|
-
collectedData: Record<string, unknown>;
|
|
218
|
-
} {
|
|
219
|
-
return {
|
|
220
|
-
currentRoute: session.currentRoute?.id,
|
|
221
|
-
currentStep: session.currentStep?.id,
|
|
222
|
-
collectedData: {
|
|
223
|
-
data: session.data,
|
|
224
|
-
dataByRoute: session.dataByRoute, // Include per-route data
|
|
225
|
-
routeHistory: session.routeHistory,
|
|
226
|
-
currentRouteTitle: session.currentRoute?.title,
|
|
227
|
-
currentStepDescription: session.currentStep?.description,
|
|
228
|
-
metadata: session.metadata,
|
|
229
|
-
},
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Helper to convert database SessionData back to SessionState
|
|
235
|
-
* Used when loading from database
|
|
236
|
-
* @param sessionId - The database session ID
|
|
237
|
-
* @param data - The database session data
|
|
238
|
-
*/
|
|
239
|
-
export function sessionDataToStep<TData = Record<string, unknown>>(
|
|
240
|
-
sessionId: string,
|
|
241
|
-
data: {
|
|
242
|
-
currentRoute?: string;
|
|
243
|
-
currentStep?: string;
|
|
244
|
-
collectedData?: Record<string, unknown>;
|
|
245
|
-
}
|
|
246
|
-
): SessionState<TData> {
|
|
247
|
-
const collectedData = data.collectedData || {};
|
|
248
|
-
|
|
249
|
-
return {
|
|
250
|
-
id: sessionId,
|
|
251
|
-
currentRoute: data.currentRoute
|
|
252
|
-
? {
|
|
253
|
-
id: data.currentRoute,
|
|
254
|
-
title:
|
|
255
|
-
(collectedData.currentRouteTitle as string) || data.currentRoute,
|
|
256
|
-
enteredAt: new Date(),
|
|
257
|
-
}
|
|
258
|
-
: undefined,
|
|
259
|
-
currentStep: data.currentStep
|
|
260
|
-
? {
|
|
261
|
-
id: data.currentStep,
|
|
262
|
-
description:
|
|
263
|
-
(collectedData.currentStepDescription as string) || undefined,
|
|
264
|
-
enteredAt: new Date(),
|
|
265
|
-
}
|
|
266
|
-
: undefined,
|
|
267
|
-
data: (collectedData.data as Partial<TData>) || {},
|
|
268
|
-
dataByRoute:
|
|
269
|
-
(collectedData.dataByRoute as Record<string, Partial<unknown>>) || {}, // Restore per-route data
|
|
270
|
-
routeHistory:
|
|
271
|
-
(collectedData.routeHistory as SessionState<TData>["routeHistory"]) || [],
|
|
272
|
-
metadata: (collectedData.metadata as SessionState<TData>["metadata"]) || {},
|
|
273
|
-
};
|
|
274
|
-
}
|