@falai/agent 0.8.1 → 0.9.0-alpha-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +332 -147
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/core/Agent.d.ts +223 -0
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1660 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/{core → cjs/src/core}/PersistenceManager.d.ts +21 -19
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +73 -20
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +32 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +514 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +145 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/src/core/Route.js +343 -0
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts +129 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +215 -117
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +86 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +217 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +45 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +30 -19
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +80 -41
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +38 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/src/types/route.d.ts +235 -0
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +65 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/{types → cjs/src/types}/tool.d.ts +17 -13
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +35 -32
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/core/Agent.d.ts +223 -0
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1656 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/{cjs → src}/core/PersistenceManager.d.ts +21 -19
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +71 -18
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +32 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +171 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +510 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +145 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/src/core/Route.js +339 -0
- package/dist/src/core/Route.js.map +1 -0
- package/dist/src/core/RoutingEngine.d.ts +129 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +211 -113
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +86 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +213 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +45 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +80 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +80 -41
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +38 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/src/types/route.d.ts +235 -0
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +65 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{cjs → src}/types/tool.d.ts +17 -13
- package/dist/src/types/tool.d.ts.map +1 -0
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +33 -32
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +925 -255
- package/docs/api/overview.md +952 -0
- package/docs/core/agent/README.md +787 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +175 -102
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +117 -69
- package/docs/core/ai-integration/prompt-composition.md +220 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +176 -0
- package/docs/core/conversation-flows/data-collection.md +623 -0
- package/docs/core/conversation-flows/route-dsl.md +502 -0
- package/docs/core/conversation-flows/routes.md +117 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +154 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +1 -1
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +348 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +406 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +139 -95
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +244 -137
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +130 -84
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +116 -90
- package/examples/ai-providers/anthropic-integration.ts +384 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +57 -63
- package/examples/conversation-flows/completion-transitions.ts +277 -0
- package/examples/core-concepts/basic-agent.ts +443 -0
- package/examples/core-concepts/schema-driven-extraction.ts +305 -0
- package/examples/core-concepts/session-management.ts +406 -0
- package/examples/integrations/database-integration.ts +630 -0
- package/examples/integrations/healthcare-integration.ts +609 -0
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +199 -171
- package/examples/integrations/server-session-management.ts +307 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +215 -272
- package/examples/persistence/memory-sessions.ts +495 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/persistence/redis-persistence.ts +490 -0
- package/examples/tools/basic-tools.ts +561 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +128 -117
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1431 -526
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +103 -49
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +128 -46
- package/src/core/ResponsePipeline.ts +830 -0
- package/src/core/Route.ts +222 -53
- package/src/core/RoutingEngine.ts +345 -229
- package/src/core/SessionManager.ts +265 -0
- package/src/core/Step.ts +157 -67
- package/src/core/ToolExecutor.ts +52 -43
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +81 -46
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +45 -7
- package/src/types/persistence.ts +45 -28
- package/src/types/route.ts +122 -57
- package/src/types/session.ts +20 -220
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +23 -19
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +204 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts +0 -197
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -203
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -109
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -175
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/types/tool.d.ts.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts +0 -197
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -199
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -109
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts +0 -175
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/declarative-agent.ts +0 -401
- package/examples/domain-scoping.ts +0 -366
- package/examples/healthcare-agent.ts +0 -511
- package/examples/redis-persistence.ts +0 -525
- package/examples/route-transitions.ts +0 -266
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
|
@@ -1,20 +1,22 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
|
|
1
2
|
/**
|
|
2
|
-
* Example: Using Prisma ORM for Persistence with Session
|
|
3
|
+
* Example: Using Prisma ORM for Persistence with New Session Management
|
|
3
4
|
*
|
|
4
|
-
* This example
|
|
5
|
-
* session
|
|
5
|
+
* This example demonstrates the new automatic session management features:
|
|
6
|
+
* - Automatic session creation and loading with sessionId
|
|
7
|
+
* - Built-in conversation history management
|
|
8
|
+
* - Simplified server-side usage patterns
|
|
9
|
+
* - SessionManager API for direct session control
|
|
6
10
|
*/
|
|
7
11
|
|
|
8
12
|
import {
|
|
9
13
|
Agent,
|
|
10
14
|
GeminiProvider,
|
|
11
15
|
PrismaAdapter,
|
|
12
|
-
createMessageEvent,
|
|
13
|
-
EventSource,
|
|
14
16
|
END_ROUTE,
|
|
15
|
-
} from "
|
|
17
|
+
} from "../../src";
|
|
16
18
|
|
|
17
|
-
// @ts-
|
|
19
|
+
// @ts-expect-error - PrismaClient is not typed
|
|
18
20
|
import { PrismaClient } from "@prisma/client";
|
|
19
21
|
|
|
20
22
|
/**
|
|
@@ -76,41 +78,28 @@ async function example() {
|
|
|
76
78
|
// Initialize Prisma client
|
|
77
79
|
const prisma = new PrismaClient();
|
|
78
80
|
|
|
79
|
-
const userId = "user_123";
|
|
80
|
-
|
|
81
81
|
/**
|
|
82
|
-
* Create Agent
|
|
82
|
+
* Server-Style Usage: Create Agent per request with sessionId
|
|
83
|
+
* This is the recommended pattern for server environments
|
|
83
84
|
*/
|
|
84
|
-
const
|
|
85
|
+
const sessionId = "session_user123_booking"; // Could be from request params
|
|
86
|
+
|
|
87
|
+
const agent = new Agent<ConversationContext, FlightBookingData>({
|
|
85
88
|
name: "Travel Assistant",
|
|
86
89
|
description: "A helpful travel booking assistant",
|
|
87
90
|
goal: "Help users book flights with ease",
|
|
88
91
|
provider: new GeminiProvider({
|
|
89
92
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
90
|
-
model: "models/gemini-2.
|
|
93
|
+
model: "models/gemini-2.5-flash",
|
|
91
94
|
}),
|
|
92
95
|
context: {
|
|
93
|
-
userId,
|
|
96
|
+
userId: "user_123",
|
|
94
97
|
userName: "Alice",
|
|
95
98
|
},
|
|
96
|
-
// ✨ Just pass the adapter - that's it!
|
|
97
99
|
persistence: {
|
|
98
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
99
|
-
autoSave: true, // Auto-saves session
|
|
100
|
-
userId,
|
|
100
|
+
adapter: new PrismaAdapter<ConversationContext>({ prisma }),
|
|
101
|
+
autoSave: true, // Auto-saves session after each response
|
|
101
102
|
},
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Create a route with data extraction schema
|
|
106
|
-
*/
|
|
107
|
-
const flightRoute = agent.createRoute<FlightBookingData>({
|
|
108
|
-
title: "Book a Flight",
|
|
109
|
-
description: "Help user book a flight ticket",
|
|
110
|
-
conditions: [
|
|
111
|
-
"User wants to book a flight",
|
|
112
|
-
"User mentions travel, flying, or booking tickets",
|
|
113
|
-
],
|
|
114
103
|
schema: {
|
|
115
104
|
type: "object",
|
|
116
105
|
properties: {
|
|
@@ -141,222 +130,173 @@ async function example() {
|
|
|
141
130
|
},
|
|
142
131
|
required: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
143
132
|
},
|
|
133
|
+
sessionId, // ✨ Agent will automatically load or create this session
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Create a route with data extraction schema
|
|
138
|
+
*/
|
|
139
|
+
const flightRoute = agent.createRoute({
|
|
140
|
+
title: "Book a Flight",
|
|
141
|
+
description: "Help user book a flight ticket",
|
|
142
|
+
conditions: [
|
|
143
|
+
"User wants to book a flight",
|
|
144
|
+
"User mentions travel, flying, or booking tickets",
|
|
145
|
+
],
|
|
144
146
|
});
|
|
145
147
|
|
|
146
148
|
// Step flow with smart data collecting and custom IDs
|
|
147
149
|
const askDestination = flightRoute.initialStep.nextStep({
|
|
148
150
|
id: "ask_destination", // Custom step ID for easier tracking
|
|
149
|
-
|
|
151
|
+
prompt: "Ask where they want to fly",
|
|
150
152
|
collect: ["destination"],
|
|
151
|
-
skipIf: (data) => !!data.destination,
|
|
153
|
+
skipIf: (data: Partial<FlightBookingData>) => !!data.destination,
|
|
152
154
|
});
|
|
153
155
|
|
|
154
156
|
const askDates = askDestination.nextStep({
|
|
155
157
|
id: "ask_dates", // Custom step ID
|
|
156
|
-
|
|
158
|
+
prompt: "Ask about travel dates",
|
|
157
159
|
collect: ["departureDate", "returnDate"],
|
|
158
|
-
skipIf: (data) => !!data.departureDate,
|
|
160
|
+
skipIf: (data: Partial<FlightBookingData>) => !!data.departureDate,
|
|
159
161
|
requires: ["destination"],
|
|
160
162
|
});
|
|
161
163
|
|
|
162
164
|
const askPassengers = askDates.nextStep({
|
|
163
165
|
id: "ask_passengers", // Custom step ID
|
|
164
|
-
|
|
166
|
+
prompt: "Ask how many passengers",
|
|
165
167
|
collect: ["passengers"],
|
|
166
|
-
skipIf: (data) => !!data.passengers,
|
|
168
|
+
skipIf: (data: Partial<FlightBookingData>) => !!data.passengers,
|
|
167
169
|
requires: ["destination", "departureDate"],
|
|
168
170
|
});
|
|
169
171
|
|
|
170
172
|
const askCabinClass = askPassengers.nextStep({
|
|
171
173
|
id: "ask_cabin_class", // Custom step ID
|
|
172
|
-
|
|
174
|
+
prompt: "Ask about cabin class preference",
|
|
173
175
|
collect: ["cabinClass"],
|
|
174
|
-
skipIf: (data) => !!data.cabinClass,
|
|
176
|
+
skipIf: (data: Partial<FlightBookingData>) => !!data.cabinClass,
|
|
175
177
|
requires: ["destination", "departureDate", "passengers"],
|
|
176
178
|
});
|
|
177
179
|
|
|
178
180
|
const confirmBooking = askCabinClass.nextStep({
|
|
179
181
|
id: "confirm_booking", // Custom step ID
|
|
180
|
-
|
|
182
|
+
prompt: "Present options and confirm booking details",
|
|
181
183
|
requires: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
182
184
|
});
|
|
183
185
|
|
|
184
186
|
confirmBooking.nextStep({ step: END_ROUTE });
|
|
185
187
|
|
|
186
188
|
/**
|
|
187
|
-
*
|
|
189
|
+
* Session is automatically loaded/created by Agent constructor
|
|
190
|
+
* Access it through agent.session
|
|
188
191
|
*/
|
|
189
|
-
|
|
192
|
+
console.log("✨ Session ready:", agent.session.id);
|
|
193
|
+
console.log("📊 Session data:", agent.session.getData());
|
|
194
|
+
console.log("📜 Conversation history:", agent.session.getHistory().length, "messages");
|
|
190
195
|
|
|
191
|
-
if
|
|
192
|
-
|
|
196
|
+
// Set some initial data if this is a new session
|
|
197
|
+
if (!agent.session.getData()?.cabinClass) {
|
|
198
|
+
await agent.session.setData({ cabinClass: "economy" });
|
|
193
199
|
}
|
|
194
200
|
|
|
195
201
|
/**
|
|
196
|
-
*
|
|
197
|
-
|
|
198
|
-
let sessionResult =
|
|
199
|
-
await persistence.createSessionWithStep<FlightBookingData>({
|
|
200
|
-
userId,
|
|
201
|
-
agentName: "Travel Assistant",
|
|
202
|
-
initialData: {
|
|
203
|
-
cabinClass: "economy", // Default value
|
|
204
|
-
},
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
let session = sessionResult.sessionStep;
|
|
208
|
-
const dbSessionId = sessionResult.sessionData.id;
|
|
209
|
-
|
|
210
|
-
console.log("✨ Created new session:", dbSessionId);
|
|
211
|
-
console.log("📊 Session metadata:", {
|
|
212
|
-
sessionId: session.metadata?.sessionId, // Same as dbSessionId
|
|
213
|
-
createdAt: session.metadata?.createdAt,
|
|
214
|
-
});
|
|
215
|
-
console.log("📊 Initial session step:", {
|
|
216
|
-
currentRoute: session.currentRoute,
|
|
217
|
-
data: session.data,
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Load conversation history
|
|
222
|
-
*/
|
|
223
|
-
const history = await persistence.loadSessionHistory(dbSessionId);
|
|
224
|
-
console.log(`📜 Loaded ${history.length} messages from history`);
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Turn 1: User provides multiple fields at once
|
|
202
|
+
* Turn 1: Simple message-based conversation
|
|
203
|
+
* SessionManager automatically handles history and persistence
|
|
228
204
|
*/
|
|
229
205
|
console.log("\n--- Turn 1 ---");
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
);
|
|
235
|
-
|
|
236
|
-
history.push(userMessage1);
|
|
237
|
-
|
|
206
|
+
|
|
207
|
+
// Add user message to session history and get response
|
|
208
|
+
await agent.session.addMessage("user", "I want to fly to Paris on June 15 with 2 people", "Alice");
|
|
209
|
+
|
|
238
210
|
const response1 = await agent.respond({
|
|
239
|
-
history,
|
|
240
|
-
session, // Pass session step
|
|
211
|
+
history: agent.session.getHistory(), // Use session-managed history
|
|
241
212
|
});
|
|
242
213
|
|
|
243
214
|
console.log("🤖 Agent:", response1.message);
|
|
244
|
-
console.log("📊 Session
|
|
245
|
-
sessionId:
|
|
215
|
+
console.log("📊 Session after turn 1:", {
|
|
216
|
+
sessionId: agent.session.id,
|
|
246
217
|
currentRoute: response1.session?.currentRoute?.title,
|
|
247
|
-
currentStepId: response1.session?.currentStep?.id,
|
|
248
|
-
|
|
249
|
-
data: response1.session?.data,
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
// Save user message
|
|
253
|
-
await persistence.saveMessage({
|
|
254
|
-
sessionId: dbSessionId,
|
|
255
|
-
userId,
|
|
256
|
-
role: "user",
|
|
257
|
-
content: userMessage1.data.message,
|
|
258
|
-
event: userMessage1,
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
// Save agent message (session step is auto-saved by Agent!)
|
|
262
|
-
await persistence.saveMessage({
|
|
263
|
-
sessionId: dbSessionId,
|
|
264
|
-
userId,
|
|
265
|
-
role: "agent",
|
|
266
|
-
content: response1.message,
|
|
267
|
-
route: response1.session?.currentRoute?.id,
|
|
268
|
-
step: response1.session?.currentStep?.id,
|
|
218
|
+
currentStepId: response1.session?.currentStep?.id,
|
|
219
|
+
data: agent.session.getData(),
|
|
269
220
|
});
|
|
270
221
|
|
|
271
|
-
//
|
|
272
|
-
session
|
|
222
|
+
// Add agent response to session history
|
|
223
|
+
await agent.session.addMessage("assistant", response1.message);
|
|
273
224
|
|
|
274
225
|
/**
|
|
275
226
|
* Turn 2: User changes their mind
|
|
276
227
|
*/
|
|
277
228
|
console.log("\n--- Turn 2 ---");
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
"Alice",
|
|
281
|
-
"Actually, make that Tokyo instead, and premium class"
|
|
282
|
-
);
|
|
283
|
-
|
|
284
|
-
history.push(
|
|
285
|
-
createMessageEvent(
|
|
286
|
-
EventSource.AI_AGENT,
|
|
287
|
-
"Travel Assistant",
|
|
288
|
-
response1.message
|
|
289
|
-
)
|
|
290
|
-
);
|
|
291
|
-
history.push(userMessage2);
|
|
229
|
+
|
|
230
|
+
await agent.session.addMessage("user", "Actually, make that Tokyo instead, and premium class", "Alice");
|
|
292
231
|
|
|
293
232
|
const response2 = await agent.respond({
|
|
294
|
-
history,
|
|
295
|
-
session, // Pass updated session
|
|
233
|
+
history: agent.session.getHistory(),
|
|
296
234
|
});
|
|
297
235
|
|
|
298
236
|
console.log("🤖 Agent:", response2.message);
|
|
299
|
-
console.log("📊 Session
|
|
237
|
+
console.log("📊 Session after turn 2:", {
|
|
300
238
|
currentRoute: response2.session?.currentRoute?.title,
|
|
301
239
|
currentStep: response2.session?.currentStep?.id,
|
|
302
|
-
data:
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
// Save messages
|
|
306
|
-
await persistence.saveMessage({
|
|
307
|
-
sessionId: dbSessionId,
|
|
308
|
-
userId,
|
|
309
|
-
role: "user",
|
|
310
|
-
content: userMessage2.data.message,
|
|
311
|
-
event: userMessage2,
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
await persistence.saveMessage({
|
|
315
|
-
sessionId: dbSessionId,
|
|
316
|
-
userId,
|
|
317
|
-
role: "agent",
|
|
318
|
-
content: response2.message,
|
|
319
|
-
route: response2.session?.currentRoute?.id,
|
|
320
|
-
step: response2.session?.currentStep?.id,
|
|
240
|
+
data: agent.session.getData(),
|
|
321
241
|
});
|
|
322
242
|
|
|
323
|
-
session
|
|
243
|
+
await agent.session.addMessage("assistant", response2.message);
|
|
324
244
|
|
|
325
245
|
if (response2.isRouteComplete) {
|
|
326
246
|
console.log("\n✅ Flight booking complete!");
|
|
327
|
-
await sendFlightConfirmation(
|
|
328
|
-
agent.getData(session.id) as FlightBookingData
|
|
329
|
-
);
|
|
247
|
+
await sendFlightConfirmation(agent.session.getData());
|
|
330
248
|
}
|
|
331
249
|
|
|
332
250
|
/**
|
|
333
|
-
*
|
|
251
|
+
* Demonstrate session recovery - create new Agent instance with same sessionId
|
|
334
252
|
*/
|
|
335
|
-
console.log("\n---
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
253
|
+
console.log("\n--- Session Recovery (New Agent Instance) ---");
|
|
254
|
+
|
|
255
|
+
const newAgent = new Agent<ConversationContext, FlightBookingData>({
|
|
256
|
+
name: "Travel Assistant",
|
|
257
|
+
provider: new GeminiProvider({
|
|
258
|
+
apiKey: process.env.GEMINI_API_KEY!,
|
|
259
|
+
model: "models/gemini-2.5-flash",
|
|
260
|
+
}),
|
|
261
|
+
context: {
|
|
262
|
+
userId: "user_123",
|
|
263
|
+
userName: "Alice",
|
|
264
|
+
},
|
|
265
|
+
// NEW: Agent-level schema (same as original agent)
|
|
266
|
+
schema: {
|
|
267
|
+
type: "object",
|
|
268
|
+
properties: {
|
|
269
|
+
destination: { type: "string" },
|
|
270
|
+
departureDate: { type: "string" },
|
|
271
|
+
returnDate: { type: "string" },
|
|
272
|
+
passengers: { type: "number", minimum: 1, maximum: 9 },
|
|
273
|
+
cabinClass: { type: "string", enum: ["economy", "premium", "business", "first"] },
|
|
274
|
+
},
|
|
275
|
+
required: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
276
|
+
},
|
|
277
|
+
persistence: {
|
|
278
|
+
adapter: new PrismaAdapter<ConversationContext>({ prisma }),
|
|
279
|
+
},
|
|
280
|
+
sessionId, // Same sessionId - will load existing session
|
|
344
281
|
});
|
|
345
282
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
const messages = await persistence.getSessionMessages(dbSessionId);
|
|
353
|
-
console.log(`💬 Session has ${messages.length} messages`);
|
|
283
|
+
console.log("📥 Recovered session:", {
|
|
284
|
+
sessionId: newAgent.session.id,
|
|
285
|
+
historyLength: newAgent.session.getHistory().length,
|
|
286
|
+
data: newAgent.session.getData(),
|
|
287
|
+
});
|
|
354
288
|
|
|
355
289
|
/**
|
|
356
|
-
*
|
|
290
|
+
* Continue conversation with recovered session
|
|
357
291
|
*/
|
|
358
|
-
await
|
|
359
|
-
|
|
292
|
+
await newAgent.session.addMessage("user", "Can you confirm my booking details?");
|
|
293
|
+
|
|
294
|
+
const confirmResponse = await newAgent.respond({
|
|
295
|
+
history: newAgent.session.getHistory(),
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
console.log("🤖 Confirmation:", confirmResponse.message);
|
|
299
|
+
await newAgent.session.addMessage("assistant", confirmResponse.message);
|
|
360
300
|
|
|
361
301
|
/**
|
|
362
302
|
* Cleanup
|
|
@@ -365,11 +305,11 @@ async function example() {
|
|
|
365
305
|
}
|
|
366
306
|
|
|
367
307
|
/**
|
|
368
|
-
* Advanced Example:
|
|
308
|
+
* Advanced Example: SessionManager with History Management
|
|
369
309
|
*/
|
|
370
310
|
async function advancedExample() {
|
|
371
311
|
const prisma = new PrismaClient();
|
|
372
|
-
const
|
|
312
|
+
const sessionId = "session_user456_onboarding";
|
|
373
313
|
|
|
374
314
|
interface UserContext {
|
|
375
315
|
userId: string;
|
|
@@ -380,26 +320,28 @@ async function advancedExample() {
|
|
|
380
320
|
};
|
|
381
321
|
}
|
|
382
322
|
|
|
383
|
-
const agent = new Agent<UserContext>({
|
|
323
|
+
const agent = new Agent<UserContext, OnboardingData>({
|
|
384
324
|
name: "Onboarding Assistant",
|
|
385
325
|
description: "Help new users get started",
|
|
386
326
|
provider: new GeminiProvider({
|
|
387
327
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
388
|
-
model: "models/gemini-2.
|
|
328
|
+
model: "models/gemini-2.5-flash",
|
|
389
329
|
}),
|
|
390
330
|
context: {
|
|
391
|
-
userId,
|
|
331
|
+
userId: "user_456",
|
|
392
332
|
userName: "Bob",
|
|
393
333
|
preferences: {
|
|
394
334
|
currency: "USD",
|
|
395
335
|
language: "en",
|
|
396
336
|
},
|
|
397
337
|
},
|
|
398
|
-
// Lifecycle hooks for
|
|
338
|
+
// Lifecycle hooks for data enrichment
|
|
399
339
|
hooks: {
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
340
|
+
onDataUpdate: async (
|
|
341
|
+
data: Partial<OnboardingData>,
|
|
342
|
+
previous: Partial<OnboardingData>
|
|
343
|
+
) => {
|
|
344
|
+
console.log("🔄 Data updated:", { data, previous });
|
|
403
345
|
|
|
404
346
|
// Normalize phone numbers
|
|
405
347
|
if (data.phoneNumber) {
|
|
@@ -411,25 +353,22 @@ async function advancedExample() {
|
|
|
411
353
|
console.warn("⚠️ Invalid email detected");
|
|
412
354
|
}
|
|
413
355
|
|
|
414
|
-
return data;
|
|
356
|
+
return data as OnboardingData;
|
|
415
357
|
},
|
|
416
358
|
|
|
417
|
-
|
|
418
|
-
|
|
359
|
+
onContextUpdate: async (
|
|
360
|
+
newContext: UserContext,
|
|
361
|
+
oldContext: UserContext
|
|
362
|
+
) => {
|
|
419
363
|
console.log("🔄 Context updated:", { newContext, oldContext });
|
|
364
|
+
return Promise.resolve();
|
|
420
365
|
},
|
|
421
366
|
},
|
|
422
367
|
persistence: {
|
|
423
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
368
|
+
adapter: new PrismaAdapter<UserContext>({ prisma }),
|
|
424
369
|
autoSave: true,
|
|
425
|
-
userId,
|
|
426
370
|
},
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
// Create onboarding route
|
|
430
|
-
const onboardingRoute = agent.createRoute<OnboardingData>({
|
|
431
|
-
title: "User Onboarding",
|
|
432
|
-
description: "Collect user information for account setup",
|
|
371
|
+
sessionId,
|
|
433
372
|
schema: {
|
|
434
373
|
type: "object",
|
|
435
374
|
properties: {
|
|
@@ -442,153 +381,159 @@ async function advancedExample() {
|
|
|
442
381
|
},
|
|
443
382
|
});
|
|
444
383
|
|
|
384
|
+
// Create onboarding route
|
|
385
|
+
const onboardingRoute = agent.createRoute({
|
|
386
|
+
title: "User Onboarding",
|
|
387
|
+
description: "Collect user information for account setup",
|
|
388
|
+
});
|
|
389
|
+
|
|
445
390
|
onboardingRoute.initialStep
|
|
446
391
|
.nextStep({
|
|
447
|
-
|
|
392
|
+
prompt: "Welcome and ask for name",
|
|
448
393
|
collect: ["fullName"],
|
|
449
|
-
skipIf: (data) => !!data.fullName,
|
|
394
|
+
skipIf: (data: Partial<OnboardingData>) => !!data.fullName,
|
|
450
395
|
})
|
|
451
396
|
.nextStep({
|
|
452
|
-
|
|
397
|
+
prompt: "Ask for email",
|
|
453
398
|
collect: ["email"],
|
|
454
|
-
skipIf: (data) => !!data.email,
|
|
399
|
+
skipIf: (data: Partial<OnboardingData>) => !!data.email,
|
|
455
400
|
})
|
|
456
401
|
.nextStep({
|
|
457
|
-
|
|
402
|
+
prompt: "Ask for phone number (optional)",
|
|
458
403
|
collect: ["phoneNumber"],
|
|
459
404
|
})
|
|
460
405
|
.nextStep({
|
|
461
|
-
|
|
406
|
+
prompt: "Ask for country",
|
|
462
407
|
collect: ["country"],
|
|
463
|
-
skipIf: (data) => !!data.country,
|
|
408
|
+
skipIf: (data: Partial<OnboardingData>) => !!data.country,
|
|
464
409
|
})
|
|
465
410
|
.nextStep({
|
|
466
|
-
|
|
411
|
+
prompt: "Confirm and complete onboarding",
|
|
467
412
|
})
|
|
468
413
|
.nextStep({ step: END_ROUTE });
|
|
469
414
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
// Create session with step
|
|
473
|
-
const { sessionData, sessionStep } =
|
|
474
|
-
await persistence.createSessionWithStep<OnboardingData>({
|
|
475
|
-
userId,
|
|
476
|
-
agentName: "Onboarding Assistant",
|
|
477
|
-
});
|
|
478
|
-
|
|
479
|
-
console.log("✨ Created onboarding session:", sessionData.id);
|
|
415
|
+
console.log("✨ Onboarding session ready:", agent.session.id);
|
|
480
416
|
|
|
481
|
-
//
|
|
482
|
-
const
|
|
483
|
-
|
|
417
|
+
// Demonstrate history override for context setting
|
|
418
|
+
const contextHistory = [
|
|
419
|
+
{ role: "system" as const, content: "User is starting onboarding process" },
|
|
420
|
+
{ role: "user" as const, content: "I'd like to create an account" },
|
|
421
|
+
];
|
|
484
422
|
|
|
485
423
|
const response = await agent.respond({
|
|
486
|
-
history:
|
|
487
|
-
createMessageEvent(EventSource.CUSTOMER, "Bob", "Hi, I'm new here!"),
|
|
488
|
-
],
|
|
489
|
-
session,
|
|
424
|
+
history: contextHistory, // Override session history for this response
|
|
490
425
|
});
|
|
491
426
|
|
|
492
427
|
console.log("🤖 Agent:", response.message);
|
|
493
|
-
console.log("📊 Data
|
|
428
|
+
console.log("📊 Data collected:", agent.session.getData());
|
|
429
|
+
|
|
430
|
+
// Add to session history for future responses
|
|
431
|
+
await agent.session.addMessage("user", "I'd like to create an account");
|
|
432
|
+
await agent.session.addMessage("assistant", response.message);
|
|
494
433
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
434
|
+
// Continue with session-managed history
|
|
435
|
+
await agent.session.addMessage("user", "My name is Bob Johnson and email is bob@example.com");
|
|
436
|
+
|
|
437
|
+
const response2 = await agent.respond({
|
|
438
|
+
history: agent.session.getHistory(),
|
|
500
439
|
});
|
|
501
440
|
|
|
502
|
-
|
|
441
|
+
console.log("🤖 Agent:", response2.message);
|
|
442
|
+
console.log("📊 Normalized data:", agent.session.getData());
|
|
443
|
+
// Shows normalized phone and email
|
|
444
|
+
|
|
445
|
+
if (response2.isRouteComplete) {
|
|
503
446
|
console.log("\n✅ Onboarding complete!");
|
|
504
|
-
await sendOnboardingEmail(agent.getData(
|
|
447
|
+
await sendOnboardingEmail(agent.session.getData());
|
|
505
448
|
}
|
|
506
449
|
|
|
507
|
-
console.log("✅ Session step automatically saved to database!");
|
|
508
|
-
|
|
509
450
|
await prisma.$disconnect();
|
|
510
451
|
}
|
|
511
452
|
|
|
512
453
|
/**
|
|
513
|
-
* Minimal Example -
|
|
454
|
+
* Minimal Example - Server Endpoint Pattern
|
|
514
455
|
*/
|
|
515
|
-
async function
|
|
456
|
+
async function serverEndpointExample() {
|
|
516
457
|
const prisma = new PrismaClient();
|
|
517
458
|
|
|
518
|
-
|
|
459
|
+
// Simulate server endpoint receiving request
|
|
460
|
+
const requestData = {
|
|
461
|
+
sessionId: "session_user789_support", // From client
|
|
462
|
+
message: "I need help, my name is John and my email is john@example.com",
|
|
463
|
+
};
|
|
464
|
+
|
|
465
|
+
// Define contact form schema
|
|
466
|
+
const contactFormSchema = {
|
|
467
|
+
type: "object",
|
|
468
|
+
properties: {
|
|
469
|
+
name: { type: "string" },
|
|
470
|
+
email: { type: "string" },
|
|
471
|
+
message: { type: "string" },
|
|
472
|
+
},
|
|
473
|
+
required: ["name", "email", "message"],
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
// Create agent with sessionId (loads existing or creates new)
|
|
477
|
+
const agent = new Agent<unknown, ContactFormData>({
|
|
519
478
|
name: "Support Agent",
|
|
520
479
|
provider: new GeminiProvider({
|
|
521
480
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
522
|
-
model: "models/gemini-2.
|
|
481
|
+
model: "models/gemini-2.5-flash",
|
|
523
482
|
}),
|
|
483
|
+
// NEW: Agent-level schema
|
|
484
|
+
schema: contactFormSchema,
|
|
524
485
|
persistence: {
|
|
525
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
526
|
-
|
|
527
|
-
autoSave: true, // ✨ Automatically saves session step!
|
|
486
|
+
adapter: new PrismaAdapter<unknown>({ prisma }),
|
|
487
|
+
autoSave: true,
|
|
528
488
|
},
|
|
489
|
+
sessionId: requestData.sessionId, // ✨ Automatic session management
|
|
529
490
|
});
|
|
530
491
|
|
|
531
492
|
// Create a simple contact form route
|
|
532
|
-
const contactRoute = agent.createRoute
|
|
493
|
+
const contactRoute = agent.createRoute({
|
|
533
494
|
title: "Contact Form",
|
|
534
|
-
schema: {
|
|
535
|
-
type: "object",
|
|
536
|
-
properties: {
|
|
537
|
-
name: { type: "string" },
|
|
538
|
-
email: { type: "string" },
|
|
539
|
-
message: { type: "string" },
|
|
540
|
-
},
|
|
541
|
-
required: ["name", "email", "message"],
|
|
542
|
-
},
|
|
543
495
|
});
|
|
544
496
|
|
|
545
497
|
contactRoute.initialStep
|
|
546
498
|
.nextStep({
|
|
547
|
-
|
|
499
|
+
prompt: "Collect all information",
|
|
548
500
|
collect: ["name", "email", "message"],
|
|
549
501
|
})
|
|
550
502
|
.nextStep({
|
|
551
|
-
|
|
503
|
+
prompt: "Confirm submission",
|
|
552
504
|
})
|
|
553
505
|
.nextStep({ step: END_ROUTE });
|
|
554
506
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
const { sessionData, sessionStep } =
|
|
559
|
-
await persistence.createSessionWithStep<ContactFormData>({
|
|
560
|
-
userId: "user_789",
|
|
561
|
-
agentName: "Support Agent",
|
|
562
|
-
});
|
|
563
|
-
|
|
564
|
-
// Chat!
|
|
507
|
+
// Add user message and respond
|
|
508
|
+
await agent.session.addMessage("user", requestData.message);
|
|
509
|
+
|
|
565
510
|
const response = await agent.respond({
|
|
566
|
-
history:
|
|
567
|
-
createMessageEvent(
|
|
568
|
-
EventSource.CUSTOMER,
|
|
569
|
-
"User",
|
|
570
|
-
"I need help, my name is John and my email is john@example.com"
|
|
571
|
-
),
|
|
572
|
-
],
|
|
573
|
-
session: sessionStep,
|
|
511
|
+
history: agent.session.getHistory(),
|
|
574
512
|
});
|
|
575
513
|
|
|
576
|
-
|
|
577
|
-
|
|
514
|
+
await agent.session.addMessage("assistant", response.message);
|
|
515
|
+
|
|
516
|
+
// Return response (like in a REST API)
|
|
517
|
+
const apiResponse = {
|
|
518
|
+
message: response.message,
|
|
519
|
+
sessionId: agent.session.id,
|
|
520
|
+
isComplete: response.isRouteComplete,
|
|
521
|
+
data: agent.session.getData(),
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
console.log("✅ API Response:", apiResponse);
|
|
578
525
|
|
|
579
526
|
if (response.isRouteComplete) {
|
|
580
527
|
console.log("\n✅ Contact form submitted!");
|
|
581
|
-
await logContactForm(agent.getData(
|
|
528
|
+
await logContactForm(agent.session.getData());
|
|
582
529
|
}
|
|
583
530
|
|
|
584
|
-
console.log("💾 Session step auto-saved to Prisma!");
|
|
585
|
-
|
|
586
531
|
await prisma.$disconnect();
|
|
532
|
+
return apiResponse;
|
|
587
533
|
}
|
|
588
534
|
|
|
589
535
|
/**
|
|
590
536
|
* Mock function to send a flight confirmation email.
|
|
591
|
-
* @param data - The flight booking data.
|
|
592
537
|
*/
|
|
593
538
|
async function sendFlightConfirmation(
|
|
594
539
|
data: Partial<FlightBookingData> | undefined
|
|
@@ -606,7 +551,6 @@ async function sendFlightConfirmation(
|
|
|
606
551
|
|
|
607
552
|
/**
|
|
608
553
|
* Mock function to send an onboarding email.
|
|
609
|
-
* @param data - The onboarding data.
|
|
610
554
|
*/
|
|
611
555
|
async function sendOnboardingEmail(data: Partial<OnboardingData> | undefined) {
|
|
612
556
|
console.log("\n" + "=".repeat(60));
|
|
@@ -620,7 +564,6 @@ async function sendOnboardingEmail(data: Partial<OnboardingData> | undefined) {
|
|
|
620
564
|
|
|
621
565
|
/**
|
|
622
566
|
* Mock function to log a contact form submission.
|
|
623
|
-
* @param data - The contact form data.
|
|
624
567
|
*/
|
|
625
568
|
async function logContactForm(data: Partial<ContactFormData> | undefined) {
|
|
626
569
|
console.log("\n" + "=".repeat(60));
|
|
@@ -637,4 +580,4 @@ if (require.main === module) {
|
|
|
637
580
|
example().catch(console.error);
|
|
638
581
|
}
|
|
639
582
|
|
|
640
|
-
export { example, advancedExample,
|
|
583
|
+
export { example, advancedExample, serverEndpointExample };
|