@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
|
@@ -5,13 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
Agent,
|
|
8
|
-
|
|
8
|
+
type Tool,
|
|
9
9
|
GeminiProvider,
|
|
10
10
|
END_ROUTE,
|
|
11
|
-
|
|
12
|
-
createMessageEvent,
|
|
13
|
-
createSession,
|
|
14
|
-
} from "../src/index";
|
|
11
|
+
} from "../../src";
|
|
15
12
|
|
|
16
13
|
// ============================================================================
|
|
17
14
|
// DATABASE SIMULATION
|
|
@@ -35,14 +32,11 @@ const database = new Map<string, SessionData>();
|
|
|
35
32
|
|
|
36
33
|
const db = {
|
|
37
34
|
sessions: {
|
|
38
|
-
|
|
35
|
+
findById(sessionId: string): SessionData | undefined {
|
|
39
36
|
return database.get(sessionId);
|
|
40
37
|
},
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
sessionId: string,
|
|
44
|
-
updates: Partial<SessionData>
|
|
45
|
-
): Promise<void> {
|
|
39
|
+
update(sessionId: string, updates: Partial<SessionData>): void {
|
|
46
40
|
const existing = database.get(sessionId);
|
|
47
41
|
if (existing) {
|
|
48
42
|
database.set(sessionId, {
|
|
@@ -53,7 +47,7 @@ const db = {
|
|
|
53
47
|
}
|
|
54
48
|
},
|
|
55
49
|
|
|
56
|
-
|
|
50
|
+
create(sessionData: SessionData): void {
|
|
57
51
|
database.set(sessionData.sessionId, sessionData);
|
|
58
52
|
},
|
|
59
53
|
},
|
|
@@ -90,9 +84,9 @@ interface OnboardingContext {
|
|
|
90
84
|
* - Load fresh context from database before each response
|
|
91
85
|
* - Persist context updates automatically after changes
|
|
92
86
|
*/
|
|
93
|
-
|
|
87
|
+
function createPersistentOnboardingAgent(sessionId: string) {
|
|
94
88
|
// Load session from database
|
|
95
|
-
const session =
|
|
89
|
+
const session = db.sessions.findById(sessionId);
|
|
96
90
|
|
|
97
91
|
if (!session) {
|
|
98
92
|
throw new Error(`Session ${sessionId} not found`);
|
|
@@ -101,7 +95,7 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
101
95
|
// Define lifecycle hooks for automatic persistence
|
|
102
96
|
const hooks = {
|
|
103
97
|
// Called after data extraction - validate and enrich collected data
|
|
104
|
-
onDataUpdate:
|
|
98
|
+
onDataUpdate: (data: Partial<OnboardingData>) => {
|
|
105
99
|
console.log("🔄 Processing collected data...");
|
|
106
100
|
|
|
107
101
|
// Update completed steps based on what's been data
|
|
@@ -112,7 +106,7 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
112
106
|
if (data.contactEmail) completedSteps.push("contact");
|
|
113
107
|
|
|
114
108
|
// Persist to database
|
|
115
|
-
|
|
109
|
+
db.sessions.update(sessionId, {
|
|
116
110
|
collectedData: data,
|
|
117
111
|
completedSteps,
|
|
118
112
|
});
|
|
@@ -126,15 +120,94 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
126
120
|
model: "models/gemini-2.5-flash",
|
|
127
121
|
});
|
|
128
122
|
|
|
129
|
-
|
|
123
|
+
// Define the onboarding schema
|
|
124
|
+
const onboardingSchema = {
|
|
125
|
+
type: "object",
|
|
126
|
+
properties: {
|
|
127
|
+
businessName: {
|
|
128
|
+
type: "string",
|
|
129
|
+
description: "Name of the business",
|
|
130
|
+
},
|
|
131
|
+
businessDescription: {
|
|
132
|
+
type: "string",
|
|
133
|
+
description: "Brief description of what the business does",
|
|
134
|
+
},
|
|
135
|
+
industry: {
|
|
136
|
+
type: "string",
|
|
137
|
+
description: "Industry the business operates in",
|
|
138
|
+
},
|
|
139
|
+
contactEmail: {
|
|
140
|
+
type: "string",
|
|
141
|
+
description: "Contact email for the business",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
required: ["businessName", "businessDescription"],
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const agent = new Agent<OnboardingContext, OnboardingData>({
|
|
130
148
|
name: "OnboardingBot",
|
|
131
149
|
description: "A friendly assistant that helps businesses get started",
|
|
132
150
|
goal: "Collect business information efficiently while being conversational",
|
|
133
151
|
provider: provider,
|
|
152
|
+
// NEW: Agent-level schema
|
|
153
|
+
schema: onboardingSchema,
|
|
154
|
+
|
|
155
|
+
// Knowledge base with onboarding best practices
|
|
156
|
+
knowledgeBase: {
|
|
157
|
+
onboardingFlow: {
|
|
158
|
+
stages: [
|
|
159
|
+
"Business identification",
|
|
160
|
+
"Industry classification",
|
|
161
|
+
"Contact information collection",
|
|
162
|
+
"Verification and confirmation",
|
|
163
|
+
],
|
|
164
|
+
averageCompletion: "3-5 minutes",
|
|
165
|
+
dropOffPoints: ["Contact email collection", "Industry classification"],
|
|
166
|
+
},
|
|
167
|
+
businessTypes: {
|
|
168
|
+
retail: {
|
|
169
|
+
commonIndustries: [
|
|
170
|
+
"Fashion",
|
|
171
|
+
"Electronics",
|
|
172
|
+
"Home goods",
|
|
173
|
+
"Food service",
|
|
174
|
+
],
|
|
175
|
+
keyQuestions: ["Store location", "Target customers", "Peak hours"],
|
|
176
|
+
},
|
|
177
|
+
professional: {
|
|
178
|
+
commonIndustries: ["Consulting", "Legal", "Accounting", "Healthcare"],
|
|
179
|
+
keyQuestions: ["Service areas", "Certifications", "Client types"],
|
|
180
|
+
},
|
|
181
|
+
manufacturing: {
|
|
182
|
+
commonIndustries: [
|
|
183
|
+
"Electronics",
|
|
184
|
+
"Automotive",
|
|
185
|
+
"Food processing",
|
|
186
|
+
"Textiles",
|
|
187
|
+
],
|
|
188
|
+
keyQuestions: [
|
|
189
|
+
"Production capacity",
|
|
190
|
+
"Supply chain",
|
|
191
|
+
"Quality standards",
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
dataValidation: {
|
|
196
|
+
email: "Must contain @ symbol and valid domain",
|
|
197
|
+
businessName: "2-100 characters, no special characters",
|
|
198
|
+
description: "10-500 characters, describes what the business does",
|
|
199
|
+
},
|
|
200
|
+
completionCriteria: [
|
|
201
|
+
"Business name provided",
|
|
202
|
+
"Business description provided",
|
|
203
|
+
"Industry category selected",
|
|
204
|
+
"Valid contact email provided",
|
|
205
|
+
],
|
|
206
|
+
},
|
|
134
207
|
// Context is loaded fresh from database on each respond() call
|
|
135
|
-
contextProvider:
|
|
208
|
+
contextProvider: () => {
|
|
136
209
|
console.log("🔄 Loading fresh context from database...");
|
|
137
|
-
const freshSession =
|
|
210
|
+
const freshSession = db.sessions.findById(sessionId);
|
|
138
211
|
|
|
139
212
|
if (!freshSession) {
|
|
140
213
|
throw new Error(`Session ${sessionId} not found`);
|
|
@@ -155,13 +228,25 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
155
228
|
// ============================================================================
|
|
156
229
|
|
|
157
230
|
// OPTION 1: Using contextUpdate in return value
|
|
158
|
-
const saveBusinessInfo
|
|
231
|
+
const saveBusinessInfo: Tool<
|
|
159
232
|
OnboardingContext,
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
233
|
+
OnboardingData,
|
|
234
|
+
unknown[],
|
|
235
|
+
unknown
|
|
236
|
+
> = {
|
|
237
|
+
id: "save_business_info",
|
|
238
|
+
name: "Business Info Saver",
|
|
239
|
+
description: "Save business name and description",
|
|
240
|
+
parameters: {
|
|
241
|
+
type: "object",
|
|
242
|
+
properties: {
|
|
243
|
+
name: { type: "string", description: "Business name" },
|
|
244
|
+
description: { type: "string", description: "Business description" },
|
|
245
|
+
},
|
|
246
|
+
required: ["name", "description"],
|
|
247
|
+
},
|
|
248
|
+
handler: (toolContext, ...args) => {
|
|
249
|
+
const [name, description] = args as [string, string];
|
|
165
250
|
console.log(`📝 Saving business info: ${name}`);
|
|
166
251
|
|
|
167
252
|
return {
|
|
@@ -180,19 +265,27 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
180
265
|
},
|
|
181
266
|
};
|
|
182
267
|
},
|
|
183
|
-
|
|
184
|
-
description: "Save business name and description",
|
|
185
|
-
}
|
|
186
|
-
);
|
|
268
|
+
};
|
|
187
269
|
|
|
188
270
|
// OPTION 2: Using updateContext method directly
|
|
189
|
-
const saveIndustry
|
|
271
|
+
const saveIndustry: Tool<
|
|
190
272
|
OnboardingContext,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
273
|
+
OnboardingData,
|
|
274
|
+
unknown[],
|
|
275
|
+
unknown
|
|
276
|
+
> = {
|
|
277
|
+
id: "save_industry",
|
|
278
|
+
name: "Industry Classifier",
|
|
279
|
+
description: "Save business industry",
|
|
280
|
+
parameters: {
|
|
281
|
+
type: "object",
|
|
282
|
+
properties: {
|
|
283
|
+
industry: { type: "string", description: "Business industry" },
|
|
284
|
+
},
|
|
285
|
+
required: ["industry"],
|
|
286
|
+
},
|
|
287
|
+
handler: async (toolContext, ...args) => {
|
|
288
|
+
const [industry] = args as [string];
|
|
196
289
|
console.log(`🏭 Saving industry: ${industry}`);
|
|
197
290
|
|
|
198
291
|
// Direct context update (triggers onContextUpdate hook)
|
|
@@ -206,18 +299,26 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
206
299
|
|
|
207
300
|
return { data: true };
|
|
208
301
|
},
|
|
209
|
-
|
|
210
|
-
description: "Save business industry",
|
|
211
|
-
}
|
|
212
|
-
);
|
|
302
|
+
};
|
|
213
303
|
|
|
214
|
-
const saveContactEmail
|
|
304
|
+
const saveContactEmail: Tool<
|
|
215
305
|
OnboardingContext,
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
306
|
+
OnboardingData,
|
|
307
|
+
unknown[],
|
|
308
|
+
unknown
|
|
309
|
+
> = {
|
|
310
|
+
id: "save_contact_email",
|
|
311
|
+
name: "Contact Email Saver",
|
|
312
|
+
description: "Save contact email",
|
|
313
|
+
parameters: {
|
|
314
|
+
type: "object",
|
|
315
|
+
properties: {
|
|
316
|
+
email: { type: "string", description: "Contact email address" },
|
|
317
|
+
},
|
|
318
|
+
required: ["email"],
|
|
319
|
+
},
|
|
320
|
+
handler: async (toolContext, ...args) => {
|
|
321
|
+
const [email] = args as [string];
|
|
221
322
|
console.log(`📧 Saving contact email: ${email}`);
|
|
222
323
|
|
|
223
324
|
await toolContext.updateContext({
|
|
@@ -230,85 +331,64 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
230
331
|
|
|
231
332
|
return { data: true };
|
|
232
333
|
},
|
|
233
|
-
|
|
234
|
-
description: "Save contact email",
|
|
235
|
-
}
|
|
236
|
-
);
|
|
334
|
+
};
|
|
237
335
|
|
|
238
336
|
// ============================================================================
|
|
239
337
|
// ONBOARDING ROUTE WITH DATA EXTRACTION
|
|
240
338
|
// ============================================================================
|
|
241
339
|
|
|
242
|
-
const onboardingRoute = agent.createRoute
|
|
340
|
+
const onboardingRoute = agent.createRoute({
|
|
243
341
|
title: "Business Onboarding",
|
|
244
342
|
description: "Guide user through business information collection",
|
|
245
343
|
conditions: ["User is onboarding their business"],
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
type: "string",
|
|
251
|
-
description: "Name of the business",
|
|
252
|
-
},
|
|
253
|
-
businessDescription: {
|
|
254
|
-
type: "string",
|
|
255
|
-
description: "Brief description of what the business does",
|
|
256
|
-
},
|
|
257
|
-
industry: {
|
|
258
|
-
type: "string",
|
|
259
|
-
description: "Industry the business operates in",
|
|
260
|
-
},
|
|
261
|
-
contactEmail: {
|
|
262
|
-
type: "string",
|
|
263
|
-
description: "Contact email for the business",
|
|
264
|
-
},
|
|
265
|
-
},
|
|
266
|
-
required: ["businessName", "businessDescription"],
|
|
267
|
-
},
|
|
344
|
+
// NEW: Required fields for route completion
|
|
345
|
+
requiredFields: ["businessName", "businessDescription"],
|
|
346
|
+
// NEW: Optional fields that enhance the experience
|
|
347
|
+
optionalFields: ["industry", "contactEmail"],
|
|
268
348
|
endStep: {
|
|
269
|
-
|
|
349
|
+
prompt:
|
|
270
350
|
"Summarize all collected information warmly and confirm onboarding is complete",
|
|
271
351
|
},
|
|
272
352
|
});
|
|
273
353
|
|
|
274
354
|
// Step 1: Collect business name and description
|
|
275
355
|
const collectBusinessInfo = onboardingRoute.initialStep.nextStep({
|
|
276
|
-
|
|
356
|
+
prompt: "Ask for business name and a brief description",
|
|
277
357
|
collect: ["businessName", "businessDescription"],
|
|
278
358
|
skipIf: (data) => !!data.businessName && !!data.businessDescription,
|
|
279
|
-
|
|
359
|
+
when: "Need to collect basic business information first",
|
|
280
360
|
});
|
|
281
361
|
|
|
282
362
|
// Step 2: Save business info (tool execution)
|
|
283
363
|
const saveBusiness = collectBusinessInfo.nextStep({
|
|
284
|
-
|
|
364
|
+
tools: [saveBusinessInfo],
|
|
285
365
|
requires: ["businessName", "businessDescription"],
|
|
286
|
-
|
|
366
|
+
when: "Business name and description provided, save to database",
|
|
287
367
|
});
|
|
288
368
|
|
|
289
369
|
// Step 3: Collect industry
|
|
290
370
|
const collectIndustry = saveBusiness.nextStep({
|
|
291
|
-
|
|
371
|
+
prompt: "Ask what industry the business operates in",
|
|
292
372
|
collect: ["industry"],
|
|
293
373
|
skipIf: (data) => !!data.industry,
|
|
294
374
|
});
|
|
295
375
|
|
|
296
376
|
// Step 4: Save industry (tool execution)
|
|
297
377
|
const saveIndustryStep = collectIndustry.nextStep({
|
|
298
|
-
|
|
378
|
+
tools: [saveIndustry],
|
|
299
379
|
requires: ["industry"],
|
|
300
380
|
});
|
|
301
381
|
|
|
302
382
|
// Step 5: Collect contact email
|
|
303
383
|
const collectContact = saveIndustryStep.nextStep({
|
|
304
|
-
|
|
384
|
+
prompt: "Ask for their contact email",
|
|
305
385
|
collect: ["contactEmail"],
|
|
306
386
|
skipIf: (data) => !!data.contactEmail,
|
|
307
387
|
});
|
|
308
388
|
|
|
309
389
|
// Step 6: Save contact (tool execution)
|
|
310
390
|
const saveContact = collectContact.nextStep({
|
|
311
|
-
|
|
391
|
+
tools: [saveContactEmail],
|
|
312
392
|
requires: ["contactEmail"],
|
|
313
393
|
});
|
|
314
394
|
|
|
@@ -350,20 +430,46 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
350
430
|
* - No need for beforeRespond hook
|
|
351
431
|
* - Still use onContextUpdate for persistence
|
|
352
432
|
*/
|
|
353
|
-
|
|
433
|
+
function createOnboardingAgentWithProvider(sessionId: string) {
|
|
354
434
|
const provider = new GeminiProvider({
|
|
355
435
|
apiKey: process.env.GEMINI_API_KEY || "test-key",
|
|
356
436
|
model: "models/gemini-2.5-flash",
|
|
357
437
|
});
|
|
358
438
|
|
|
359
|
-
|
|
439
|
+
// Define the onboarding schema
|
|
440
|
+
const onboardingSchema = {
|
|
441
|
+
type: "object",
|
|
442
|
+
properties: {
|
|
443
|
+
businessName: {
|
|
444
|
+
type: "string",
|
|
445
|
+
description: "Name of the business",
|
|
446
|
+
},
|
|
447
|
+
businessDescription: {
|
|
448
|
+
type: "string",
|
|
449
|
+
description: "Brief description of what the business does",
|
|
450
|
+
},
|
|
451
|
+
industry: {
|
|
452
|
+
type: "string",
|
|
453
|
+
description: "Industry the business operates in",
|
|
454
|
+
},
|
|
455
|
+
contactEmail: {
|
|
456
|
+
type: "string",
|
|
457
|
+
description: "Contact email for the business",
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
required: ["businessName", "businessDescription"],
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
const agent = new Agent<OnboardingContext, OnboardingData>({
|
|
360
464
|
name: "OnboardingBot",
|
|
361
465
|
description: "A friendly assistant that helps businesses get started",
|
|
362
466
|
provider: provider,
|
|
467
|
+
// NEW: Agent-level schema
|
|
468
|
+
schema: onboardingSchema,
|
|
363
469
|
|
|
364
470
|
// Context is always fetched fresh from database
|
|
365
|
-
contextProvider:
|
|
366
|
-
const session =
|
|
471
|
+
contextProvider: () => {
|
|
472
|
+
const session = db.sessions.findById(sessionId);
|
|
367
473
|
if (!session) {
|
|
368
474
|
throw new Error(`Session ${sessionId} not found`);
|
|
369
475
|
}
|
|
@@ -378,8 +484,8 @@ async function createOnboardingAgentWithProvider(sessionId: string) {
|
|
|
378
484
|
|
|
379
485
|
// Still persist updates
|
|
380
486
|
hooks: {
|
|
381
|
-
onContextUpdate:
|
|
382
|
-
|
|
487
|
+
onContextUpdate: (newContext) => {
|
|
488
|
+
db.sessions.update(sessionId, {
|
|
383
489
|
collectedData: newContext.collectedData,
|
|
384
490
|
completedSteps: newContext.completedSteps,
|
|
385
491
|
});
|
|
@@ -401,7 +507,7 @@ async function main() {
|
|
|
401
507
|
const userId = "user_456";
|
|
402
508
|
|
|
403
509
|
// Initialize session in database
|
|
404
|
-
|
|
510
|
+
db.sessions.create({
|
|
405
511
|
sessionId,
|
|
406
512
|
userId,
|
|
407
513
|
collectedData: {},
|
|
@@ -410,27 +516,24 @@ async function main() {
|
|
|
410
516
|
});
|
|
411
517
|
|
|
412
518
|
// Create agent with fresh context loading
|
|
413
|
-
const agent =
|
|
519
|
+
const agent = createPersistentOnboardingAgent(sessionId);
|
|
414
520
|
|
|
415
521
|
console.log("=== MULTI-TURN CONVERSATION SIMULATION ===\n");
|
|
416
522
|
|
|
417
|
-
//
|
|
418
|
-
|
|
523
|
+
// Session is automatically managed by the agent
|
|
524
|
+
console.log("✨ Session ready:", agent.session.id);
|
|
419
525
|
|
|
420
526
|
// Turn 1: Start onboarding
|
|
421
527
|
console.log("📱 Turn 1: User starts onboarding");
|
|
528
|
+
|
|
529
|
+
await agent.session.addMessage("user", "Hi, I want to onboard my business", "Alice");
|
|
530
|
+
|
|
422
531
|
const response1 = await agent.respond({
|
|
423
|
-
history:
|
|
424
|
-
createMessageEvent(
|
|
425
|
-
EventSource.CUSTOMER,
|
|
426
|
-
"Alice",
|
|
427
|
-
"Hi, I want to onboard my business"
|
|
428
|
-
),
|
|
429
|
-
],
|
|
430
|
-
session,
|
|
532
|
+
history: agent.session.getHistory(),
|
|
431
533
|
});
|
|
534
|
+
|
|
432
535
|
console.log("🤖 Bot:", response1.message);
|
|
433
|
-
console.log("📊 Data after turn 1:",
|
|
536
|
+
console.log("📊 Data after turn 1:", agent.session.getData());
|
|
434
537
|
console.log("📊 Route:", response1.session?.currentRoute?.title);
|
|
435
538
|
|
|
436
539
|
// Check route completion after turn 1
|
|
@@ -443,25 +546,28 @@ async function main() {
|
|
|
443
546
|
|
|
444
547
|
console.log();
|
|
445
548
|
|
|
446
|
-
|
|
447
|
-
session = response1.session!;
|
|
549
|
+
await agent.session.addMessage("assistant", response1.message);
|
|
448
550
|
|
|
449
551
|
// Turn 2: User provides business info
|
|
450
552
|
console.log("📱 Turn 2: User provides business info");
|
|
451
553
|
const history2 = [
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
"
|
|
455
|
-
"
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
554
|
+
{
|
|
555
|
+
role: "user" as const,
|
|
556
|
+
content: "Hi, I want to onboard my business",
|
|
557
|
+
name: "Alice",
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
role: "assistant" as const,
|
|
561
|
+
content: response1.message,
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
role: "user" as const,
|
|
565
|
+
content:
|
|
566
|
+
"My business is called 'TechFlow' and we build AI-powered workflow automation tools",
|
|
567
|
+
name: "Alice",
|
|
568
|
+
},
|
|
463
569
|
];
|
|
464
|
-
const response2 = await agent.respond({ history: history2
|
|
570
|
+
const response2 = await agent.respond({ history: history2 });
|
|
465
571
|
console.log("🤖 Bot:", response2.message);
|
|
466
572
|
console.log("📊 Data after turn 2:", response2.session?.data);
|
|
467
573
|
|
|
@@ -475,21 +581,22 @@ async function main() {
|
|
|
475
581
|
|
|
476
582
|
console.log();
|
|
477
583
|
|
|
478
|
-
// Update session again
|
|
479
|
-
session = response2.session!;
|
|
480
584
|
|
|
481
585
|
// Turn 3: User provides industry
|
|
482
586
|
console.log("📱 Turn 3: User provides industry");
|
|
483
587
|
const history3 = [
|
|
484
588
|
...history2,
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
589
|
+
{
|
|
590
|
+
role: "assistant" as const,
|
|
591
|
+
content: response2.message,
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
role: "user" as const,
|
|
595
|
+
content: "We're in the SaaS industry",
|
|
596
|
+
name: "Alice",
|
|
597
|
+
},
|
|
491
598
|
];
|
|
492
|
-
const response3 = await agent.respond({ history: history3
|
|
599
|
+
const response3 = await agent.respond({ history: history3 });
|
|
493
600
|
console.log("🤖 Bot:", response3.message);
|
|
494
601
|
console.log("📊 Data after turn 3:", response3.session?.data);
|
|
495
602
|
|
|
@@ -503,21 +610,21 @@ async function main() {
|
|
|
503
610
|
|
|
504
611
|
console.log();
|
|
505
612
|
|
|
506
|
-
// Update session again
|
|
507
|
-
session = response3.session!;
|
|
508
|
-
|
|
509
613
|
// Turn 4: User provides contact email, completing the flow
|
|
510
614
|
console.log("📱 Turn 4: User provides contact email");
|
|
511
615
|
const history4 = [
|
|
512
616
|
...history3,
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
617
|
+
{
|
|
618
|
+
role: "assistant" as const,
|
|
619
|
+
content: response3.message,
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
role: "user" as const,
|
|
623
|
+
content: "Our contact email is contact@techflow.ai",
|
|
624
|
+
name: "Alice",
|
|
625
|
+
},
|
|
519
626
|
];
|
|
520
|
-
const response4 = await agent.respond({ history: history4
|
|
627
|
+
const response4 = await agent.respond({ history: history4 });
|
|
521
628
|
console.log("🤖 Bot:", response4.message);
|
|
522
629
|
console.log("📊 Data after turn 4:", response4.session?.data);
|
|
523
630
|
|
|
@@ -525,13 +632,13 @@ async function main() {
|
|
|
525
632
|
if (response4.isRouteComplete) {
|
|
526
633
|
console.log("\n✅ Onboarding complete!");
|
|
527
634
|
await finalizeOnboarding(
|
|
528
|
-
agent.getData(
|
|
635
|
+
agent.getData() as unknown as OnboardingData
|
|
529
636
|
);
|
|
530
637
|
}
|
|
531
638
|
|
|
532
639
|
// Verify persistence
|
|
533
640
|
console.log("=== PERSISTENCE VERIFICATION ===");
|
|
534
|
-
const finalSession =
|
|
641
|
+
const finalSession = db.sessions.findById(sessionId);
|
|
535
642
|
console.log(
|
|
536
643
|
"💾 Final persisted session:",
|
|
537
644
|
JSON.stringify(finalSession, null, 2)
|
|
@@ -543,9 +650,9 @@ async function main() {
|
|
|
543
650
|
// ============================================================================
|
|
544
651
|
|
|
545
652
|
/*
|
|
546
|
-
* ✅ PATTERN 1: Session
|
|
547
|
-
* -
|
|
548
|
-
* -
|
|
653
|
+
* ✅ PATTERN 1: Session Management (New SessionManager pattern)
|
|
654
|
+
* - agent.session: Automatic session management
|
|
655
|
+
* - agent.session.addMessage(): Add messages to history
|
|
549
656
|
* - Session tracks collected data across turns
|
|
550
657
|
* - Always-on routing respects intent changes
|
|
551
658
|
*
|