@falai/agent 0.8.0 → 0.9.0-alpha-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +306 -133
- package/dist/{adapters → cjs/src/adapters}/MemoryAdapter.d.ts +4 -4
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/MongoAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/cjs/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{adapters → cjs/src/adapters}/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/cjs/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/index.d.ts.map +1 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/{core → cjs/src/core}/Agent.d.ts +67 -69
- package/dist/cjs/src/core/Agent.d.ts.map +1 -0
- package/dist/cjs/src/core/Agent.js +1433 -0
- package/dist/cjs/src/core/Agent.js.map +1 -0
- package/dist/cjs/src/core/Events.d.ts +26 -0
- package/dist/cjs/src/core/Events.d.ts.map +1 -0
- package/dist/cjs/src/core/Events.js +144 -0
- package/dist/cjs/src/core/Events.js.map +1 -0
- package/dist/cjs/src/core/PersistenceManager.d.ts +98 -0
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/PersistenceManager.js +62 -32
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -0
- package/dist/cjs/src/core/PromptComposer.d.ts +27 -0
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/src/core/PromptComposer.js +157 -0
- package/dist/cjs/src/core/PromptComposer.js.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts +31 -0
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseEngine.js +84 -0
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.js +446 -0
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -0
- package/dist/cjs/src/core/Route.d.ts +126 -0
- package/dist/cjs/src/core/Route.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/Route.js +116 -20
- package/dist/cjs/src/core/Route.js.map +1 -0
- package/dist/{core → cjs/src/core}/RoutingEngine.d.ts +33 -38
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/RoutingEngine.js +102 -108
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/src/core/SessionManager.d.ts +76 -0
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/src/core/SessionManager.js +197 -0
- package/dist/cjs/src/core/SessionManager.js.map +1 -0
- package/dist/cjs/src/core/Step.d.ts +96 -0
- package/dist/cjs/src/core/Step.d.ts.map +1 -0
- package/dist/cjs/src/core/Step.js +206 -0
- package/dist/cjs/src/core/Step.js.map +1 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts +43 -0
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/cjs/{core → src/core}/ToolExecutor.js +19 -18
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -0
- package/dist/{index.d.ts → cjs/src/index.d.ts} +7 -15
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/{index.js → src/index.js} +21 -19
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/cjs/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/GeminiProvider.d.ts +1 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/cjs/src/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{providers → cjs/src/providers}/OpenRouterProvider.d.ts +1 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/cjs/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/{types → src/types}/agent.d.ts +54 -35
- package/dist/cjs/src/types/agent.d.ts.map +1 -0
- package/dist/cjs/src/types/agent.js.map +1 -0
- package/dist/cjs/{types → src/types}/ai.d.ts +7 -0
- package/dist/cjs/src/types/ai.d.ts.map +1 -0
- package/dist/cjs/src/types/ai.js.map +1 -0
- package/dist/{types → cjs/src/types}/history.d.ts +76 -18
- package/dist/cjs/src/types/history.d.ts.map +1 -0
- package/dist/cjs/src/types/history.js +33 -0
- package/dist/cjs/src/types/history.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +20 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +30 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/{types → cjs/src/types}/persistence.d.ts +39 -23
- package/dist/cjs/src/types/persistence.d.ts.map +1 -0
- package/dist/cjs/src/types/persistence.js.map +1 -0
- package/dist/cjs/{types → src/types}/route.d.ts +85 -31
- package/dist/cjs/src/types/route.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/route.js.map +1 -1
- package/dist/cjs/src/types/routing.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/routing.js.map +1 -1
- package/dist/cjs/src/types/schema.d.ts.map +1 -0
- package/dist/{types → cjs/src/types}/schema.js.map +1 -1
- package/dist/cjs/src/types/session.d.ts +70 -0
- package/dist/cjs/src/types/session.d.ts.map +1 -0
- package/dist/cjs/src/types/session.js +6 -0
- package/dist/cjs/src/types/session.js.map +1 -0
- package/dist/cjs/src/types/template.d.ts +30 -0
- package/dist/cjs/src/types/template.d.ts.map +1 -0
- package/dist/cjs/src/types/template.js +3 -0
- package/dist/cjs/src/types/template.js.map +1 -0
- package/dist/cjs/{types → src/types}/tool.d.ts +6 -8
- package/dist/cjs/src/types/tool.d.ts.map +1 -0
- package/dist/cjs/{types → src/types}/tool.js.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts +8 -0
- package/dist/cjs/src/utils/clone.d.ts.map +1 -0
- package/dist/cjs/src/utils/clone.js +36 -0
- package/dist/cjs/src/utils/clone.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/event.d.ts +1 -1
- package/dist/cjs/src/utils/event.d.ts.map +1 -0
- package/dist/cjs/{utils → src/utils}/event.js +2 -2
- package/dist/cjs/src/utils/event.js.map +1 -0
- package/dist/cjs/src/utils/history.d.ts +31 -0
- package/dist/cjs/src/utils/history.d.ts.map +1 -0
- package/dist/cjs/src/utils/history.js +128 -0
- package/dist/cjs/src/utils/history.js.map +1 -0
- package/dist/cjs/src/utils/id.d.ts.map +1 -0
- package/dist/cjs/src/utils/id.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +13 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +49 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/logger.d.ts.map +1 -0
- package/dist/cjs/src/utils/logger.js.map +1 -0
- package/dist/cjs/src/utils/retry.d.ts.map +1 -0
- package/dist/cjs/src/utils/retry.js.map +1 -0
- package/dist/cjs/src/utils/session.d.ts +51 -0
- package/dist/cjs/src/utils/session.d.ts.map +1 -0
- package/dist/cjs/{types → src/utils}/session.js +36 -13
- package/dist/cjs/src/utils/session.js.map +1 -0
- package/dist/cjs/src/utils/template.d.ts +107 -0
- package/dist/cjs/src/utils/template.d.ts.map +1 -0
- package/dist/cjs/src/utils/template.js +283 -0
- package/dist/cjs/src/utils/template.js.map +1 -0
- package/dist/{cjs → src}/adapters/MemoryAdapter.d.ts +4 -4
- package/dist/src/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MemoryAdapter.js +41 -21
- package/dist/src/adapters/MemoryAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/MongoAdapter.d.ts +3 -3
- package/dist/src/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/MongoAdapter.js +2 -1
- package/dist/src/adapters/MongoAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.d.ts +3 -3
- package/dist/src/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/OpenSearchAdapter.js +10 -13
- package/dist/src/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.d.ts +3 -3
- package/dist/src/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PostgreSQLAdapter.js +1 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.d.ts +3 -3
- package/dist/src/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/PrismaAdapter.js +35 -5
- package/dist/src/adapters/PrismaAdapter.js.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.d.ts +3 -3
- package/dist/src/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/RedisAdapter.js +3 -2
- package/dist/src/adapters/RedisAdapter.js.map +1 -0
- package/dist/{cjs → src}/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/src/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/{adapters → src/adapters}/SQLiteAdapter.js +2 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/{cjs → src}/core/Agent.d.ts +67 -69
- package/dist/src/core/Agent.d.ts.map +1 -0
- package/dist/src/core/Agent.js +1429 -0
- package/dist/src/core/Agent.js.map +1 -0
- package/dist/src/core/Events.d.ts +26 -0
- package/dist/src/core/Events.d.ts.map +1 -0
- package/dist/src/core/Events.js +137 -0
- package/dist/src/core/Events.js.map +1 -0
- package/dist/src/core/PersistenceManager.d.ts +98 -0
- package/dist/src/core/PersistenceManager.d.ts.map +1 -0
- package/dist/{core → src/core}/PersistenceManager.js +56 -26
- package/dist/src/core/PersistenceManager.js.map +1 -0
- package/dist/src/core/PromptComposer.d.ts +27 -0
- package/dist/src/core/PromptComposer.d.ts.map +1 -0
- package/dist/src/core/PromptComposer.js +153 -0
- package/dist/src/core/PromptComposer.js.map +1 -0
- package/dist/src/core/ResponseEngine.d.ts +31 -0
- package/dist/src/core/ResponseEngine.d.ts.map +1 -0
- package/dist/src/core/ResponseEngine.js +80 -0
- package/dist/src/core/ResponseEngine.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +143 -0
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/src/core/ResponsePipeline.js +442 -0
- package/dist/src/core/ResponsePipeline.js.map +1 -0
- package/dist/src/core/Route.d.ts +126 -0
- package/dist/src/core/Route.d.ts.map +1 -0
- package/dist/{core → src/core}/Route.js +116 -20
- package/dist/src/core/Route.js.map +1 -0
- package/dist/{cjs → src}/core/RoutingEngine.d.ts +33 -38
- package/dist/src/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{core → src/core}/RoutingEngine.js +98 -104
- package/dist/src/core/RoutingEngine.js.map +1 -0
- package/dist/src/core/SessionManager.d.ts +76 -0
- package/dist/src/core/SessionManager.d.ts.map +1 -0
- package/dist/src/core/SessionManager.js +193 -0
- package/dist/src/core/SessionManager.js.map +1 -0
- package/dist/src/core/Step.d.ts +96 -0
- package/dist/src/core/Step.d.ts.map +1 -0
- package/dist/src/core/Step.js +202 -0
- package/dist/src/core/Step.js.map +1 -0
- package/dist/src/core/ToolExecutor.d.ts +43 -0
- package/dist/src/core/ToolExecutor.d.ts.map +1 -0
- package/dist/src/core/ToolExecutor.js +70 -0
- package/dist/src/core/ToolExecutor.js.map +1 -0
- package/dist/{cjs → src}/index.d.ts +7 -15
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -7
- package/dist/src/index.js.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.d.ts +1 -1
- package/dist/src/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{providers → src/providers}/AnthropicProvider.js +54 -2
- package/dist/src/providers/AnthropicProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/GeminiProvider.js +65 -0
- package/dist/src/providers/GeminiProvider.js.map +1 -0
- package/dist/{providers → src/providers}/OpenAIProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenAIProvider.js +70 -1
- package/dist/src/providers/OpenAIProvider.js.map +1 -0
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts +1 -1
- package/dist/{cjs → src}/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/{providers → src/providers}/OpenRouterProvider.js +76 -0
- package/dist/src/providers/OpenRouterProvider.js.map +1 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/{types → src/types}/agent.d.ts +54 -35
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/{types → src/types}/ai.d.ts +7 -0
- package/dist/src/types/ai.d.ts.map +1 -0
- package/dist/{cjs → src}/types/ai.js.map +1 -1
- package/dist/{cjs → src}/types/history.d.ts +76 -18
- package/dist/src/types/history.d.ts.map +1 -0
- package/dist/src/types/history.js +30 -0
- package/dist/src/types/history.js.map +1 -0
- package/dist/src/types/index.d.ts +20 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +10 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/{cjs → src}/types/persistence.d.ts +39 -23
- package/dist/src/types/persistence.d.ts.map +1 -0
- package/dist/src/types/persistence.js.map +1 -0
- package/dist/{types → src/types}/route.d.ts +85 -31
- package/dist/src/types/route.d.ts.map +1 -0
- package/dist/{types → src/types}/route.js.map +1 -1
- package/dist/src/types/session.d.ts +70 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +5 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/template.d.ts +30 -0
- package/dist/src/types/template.d.ts.map +1 -0
- package/dist/src/types/template.js +2 -0
- package/dist/src/types/template.js.map +1 -0
- package/dist/{types → src/types}/tool.d.ts +6 -8
- package/dist/{cjs → src}/types/tool.d.ts.map +1 -1
- package/dist/{types → src/types}/tool.js.map +1 -1
- package/dist/src/utils/clone.d.ts +8 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/clone.js +33 -0
- package/dist/src/utils/clone.js.map +1 -0
- package/dist/{cjs → src}/utils/event.d.ts +1 -1
- package/dist/{cjs → src}/utils/event.d.ts.map +1 -1
- package/dist/{utils → src/utils}/event.js +1 -1
- package/dist/src/utils/event.js.map +1 -0
- package/dist/src/utils/history.d.ts +31 -0
- package/dist/src/utils/history.d.ts.map +1 -0
- package/dist/src/utils/history.js +121 -0
- package/dist/src/utils/history.js.map +1 -0
- package/dist/src/utils/id.js.map +1 -0
- package/dist/src/utils/index.d.ts +13 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +19 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/session.d.ts +51 -0
- package/dist/src/utils/session.d.ts.map +1 -0
- package/dist/{types → src/utils}/session.js +34 -13
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/template.d.ts +107 -0
- package/dist/src/utils/template.d.ts.map +1 -0
- package/dist/src/utils/template.js +276 -0
- package/dist/src/utils/template.js.map +1 -0
- package/docs/README.md +174 -68
- package/docs/{API_REFERENCE.md → api/README.md} +902 -263
- package/docs/api/overview.md +798 -0
- package/docs/core/agent/README.md +642 -0
- package/docs/{CONTEXT_MANAGEMENT.md → core/agent/context-management.md} +144 -95
- package/docs/{ARCHITECTURE.md → core/agent/session-management.md} +74 -59
- package/docs/core/ai-integration/prompt-composition.md +196 -0
- package/docs/core/ai-integration/providers.md +515 -0
- package/docs/core/ai-integration/response-processing.md +165 -0
- package/docs/core/conversation-flows/data-collection.md +545 -0
- package/docs/core/conversation-flows/route-dsl.md +479 -0
- package/docs/core/conversation-flows/routes.md +61 -0
- package/docs/core/conversation-flows/step-transitions.md +595 -0
- package/docs/core/conversation-flows/steps.md +130 -0
- package/docs/{ADAPTERS.md → core/persistence/adapters.md} +2 -2
- package/docs/core/persistence/session-storage.md +644 -0
- package/docs/core/routing/intelligent-routing.md +339 -0
- package/docs/core/tools/tool-definition.md +346 -0
- package/docs/core/tools/tool-execution.md +815 -0
- package/docs/core/tools/tool-scoping.md +628 -0
- package/docs/guides/getting-started/README.md +384 -0
- package/examples/{company-qna-agent.ts → advanced-patterns/knowledge-based-agent.ts} +104 -69
- package/examples/{persistent-onboarding.ts → advanced-patterns/persistent-onboarding.ts} +181 -103
- package/examples/{rules-prohibitions.ts → advanced-patterns/route-lifecycle-hooks.ts} +102 -82
- package/examples/{streaming-agent.ts → advanced-patterns/streaming-responses.ts} +90 -69
- package/examples/ai-providers/anthropic-integration.ts +377 -0
- package/examples/{openai-agent.ts → ai-providers/openai-integration.ts} +37 -43
- package/examples/{route-transitions.ts → conversation-flows/completion-transitions.ts} +115 -108
- package/examples/{declarative-agent.ts → core-concepts/basic-agent.ts} +175 -131
- package/examples/core-concepts/schema-driven-extraction.ts +301 -0
- package/examples/core-concepts/session-management.ts +394 -0
- package/examples/integrations/database-integration.ts +615 -0
- package/examples/{healthcare-agent.ts → integrations/healthcare-integration.ts} +204 -111
- package/examples/{opensearch-persistence.ts → integrations/search-integration.ts} +159 -128
- package/examples/integrations/server-session-management.ts +299 -0
- package/examples/persistence/custom-adapter.ts +529 -0
- package/examples/{prisma-persistence.ts → persistence/database-persistence.ts} +168 -241
- package/examples/persistence/memory-sessions.ts +506 -0
- package/examples/{prisma-schema.example.prisma → persistence/prisma-schema.example.prisma} +1 -1
- package/examples/{redis-persistence.ts → persistence/redis-persistence.ts} +152 -173
- package/examples/tools/basic-tools.ts +550 -0
- package/examples/{extracted-data-modification.ts → tools/data-enrichment-tools.ts} +82 -79
- package/package.json +14 -10
- package/src/adapters/MemoryAdapter.ts +74 -46
- package/src/adapters/MongoAdapter.ts +33 -24
- package/src/adapters/OpenSearchAdapter.ts +41 -37
- package/src/adapters/PostgreSQLAdapter.ts +35 -24
- package/src/adapters/PrismaAdapter.ts +69 -27
- package/src/adapters/RedisAdapter.ts +38 -26
- package/src/adapters/SQLiteAdapter.ts +32 -22
- package/src/core/Agent.ts +1102 -487
- package/src/core/Events.ts +100 -112
- package/src/core/PersistenceManager.ts +87 -57
- package/src/core/PromptComposer.ts +158 -85
- package/src/core/ResponseEngine.ts +118 -38
- package/src/core/ResponsePipeline.ts +715 -0
- package/src/core/Route.ts +168 -51
- package/src/core/RoutingEngine.ts +178 -209
- package/src/core/SessionManager.ts +241 -0
- package/src/core/Step.ts +149 -67
- package/src/core/ToolExecutor.ts +37 -42
- package/src/index.ts +31 -37
- package/src/providers/AnthropicProvider.ts +71 -5
- package/src/providers/GeminiProvider.ts +83 -2
- package/src/providers/OpenAIProvider.ts +95 -3
- package/src/providers/OpenRouterProvider.ts +102 -2
- package/src/types/agent.ts +50 -38
- package/src/types/ai.ts +7 -0
- package/src/types/history.ts +91 -18
- package/src/types/index.ts +43 -7
- package/src/types/persistence.ts +46 -28
- package/src/types/route.ts +104 -45
- package/src/types/session.ts +19 -213
- package/src/types/template.ts +36 -0
- package/src/types/tool.ts +9 -11
- package/src/utils/clone.ts +36 -0
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +143 -0
- package/src/utils/index.ts +53 -0
- package/src/utils/session.ts +229 -0
- package/src/utils/template.ts +335 -0
- package/dist/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/adapters/MemoryAdapter.js.map +0 -1
- package/dist/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/adapters/MongoAdapter.js.map +0 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/adapters/PrismaAdapter.js.map +0 -1
- package/dist/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/adapters/RedisAdapter.js.map +0 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -966
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/DomainRegistry.d.ts +0 -36
- package/dist/cjs/core/DomainRegistry.d.ts.map +0 -1
- package/dist/cjs/core/DomainRegistry.js +0 -72
- package/dist/cjs/core/DomainRegistry.js.map +0 -1
- package/dist/cjs/core/Events.d.ts +0 -41
- package/dist/cjs/core/Events.d.ts.map +0 -1
- package/dist/cjs/core/Events.js +0 -99
- package/dist/cjs/core/Events.js.map +0 -1
- package/dist/cjs/core/PersistenceManager.d.ts +0 -96
- package/dist/cjs/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/core/PromptComposer.d.ts +0 -24
- package/dist/cjs/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/core/PromptComposer.js +0 -127
- package/dist/cjs/core/PromptComposer.js.map +0 -1
- package/dist/cjs/core/ResponseEngine.d.ts +0 -14
- package/dist/cjs/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/core/ResponseEngine.js +0 -56
- package/dist/cjs/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -90
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/core/Step.d.ts +0 -72
- package/dist/cjs/core/Step.d.ts.map +0 -1
- package/dist/cjs/core/Step.js +0 -150
- package/dist/cjs/core/Step.js.map +0 -1
- package/dist/cjs/core/Tool.d.ts +0 -39
- package/dist/cjs/core/Tool.d.ts.map +0 -1
- package/dist/cjs/core/Tool.js +0 -34
- package/dist/cjs/core/Tool.js.map +0 -1
- package/dist/cjs/core/ToolExecutor.d.ts +0 -29
- package/dist/cjs/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolExecutor.js.map +0 -1
- package/dist/cjs/core/Transition.d.ts +0 -32
- package/dist/cjs/core/Transition.d.ts.map +0 -1
- package/dist/cjs/core/Transition.js +0 -89
- package/dist/cjs/core/Transition.js.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/types/agent.d.ts.map +0 -1
- package/dist/cjs/types/agent.js.map +0 -1
- package/dist/cjs/types/ai.d.ts.map +0 -1
- package/dist/cjs/types/history.d.ts.map +0 -1
- package/dist/cjs/types/history.js +0 -37
- package/dist/cjs/types/history.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -12
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -12
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/persistence.d.ts.map +0 -1
- package/dist/cjs/types/persistence.js.map +0 -1
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/session.d.ts +0 -104
- package/dist/cjs/types/session.d.ts.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/utils/event.js.map +0 -1
- package/dist/cjs/utils/id.js.map +0 -1
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js.map +0 -1
- package/dist/core/Agent.d.ts.map +0 -1
- package/dist/core/Agent.js +0 -962
- package/dist/core/Agent.js.map +0 -1
- package/dist/core/DomainRegistry.d.ts +0 -36
- package/dist/core/DomainRegistry.d.ts.map +0 -1
- package/dist/core/DomainRegistry.js +0 -68
- package/dist/core/DomainRegistry.js.map +0 -1
- package/dist/core/Events.d.ts +0 -41
- package/dist/core/Events.d.ts.map +0 -1
- package/dist/core/Events.js +0 -94
- package/dist/core/Events.js.map +0 -1
- package/dist/core/PersistenceManager.d.ts +0 -96
- package/dist/core/PersistenceManager.d.ts.map +0 -1
- package/dist/core/PersistenceManager.js.map +0 -1
- package/dist/core/PromptComposer.d.ts +0 -24
- package/dist/core/PromptComposer.d.ts.map +0 -1
- package/dist/core/PromptComposer.js +0 -123
- package/dist/core/PromptComposer.js.map +0 -1
- package/dist/core/ResponseEngine.d.ts +0 -14
- package/dist/core/ResponseEngine.d.ts.map +0 -1
- package/dist/core/ResponseEngine.js +0 -52
- package/dist/core/ResponseEngine.js.map +0 -1
- package/dist/core/Route.d.ts +0 -90
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/core/Step.d.ts +0 -72
- package/dist/core/Step.d.ts.map +0 -1
- package/dist/core/Step.js +0 -146
- package/dist/core/Step.js.map +0 -1
- package/dist/core/Tool.d.ts +0 -39
- package/dist/core/Tool.d.ts.map +0 -1
- package/dist/core/Tool.js +0 -31
- package/dist/core/Tool.js.map +0 -1
- package/dist/core/ToolExecutor.d.ts +0 -29
- package/dist/core/ToolExecutor.d.ts.map +0 -1
- package/dist/core/ToolExecutor.js +0 -69
- package/dist/core/ToolExecutor.js.map +0 -1
- package/dist/core/Transition.d.ts +0 -32
- package/dist/core/Transition.d.ts.map +0 -1
- package/dist/core/Transition.js +0 -85
- package/dist/core/Transition.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/providers/AnthropicProvider.js.map +0 -1
- package/dist/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/providers/GeminiProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/providers/OpenRouterProvider.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/ai.js.map +0 -1
- package/dist/types/history.d.ts.map +0 -1
- package/dist/types/history.js +0 -34
- package/dist/types/history.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/persistence.d.ts.map +0 -1
- package/dist/types/persistence.js.map +0 -1
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -104
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js.map +0 -1
- package/dist/types/tool.d.ts.map +0 -1
- package/dist/utils/event.d.ts.map +0 -1
- package/dist/utils/event.js.map +0 -1
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js.map +0 -1
- package/docs/AGENT.md +0 -535
- package/docs/DOCS.md +0 -263
- package/docs/DOMAINS.md +0 -735
- package/docs/EXAMPLES.md +0 -467
- package/docs/GETTING_STARTED.md +0 -424
- package/docs/PERSISTENCE.md +0 -815
- package/docs/PROVIDERS.md +0 -612
- package/docs/ROUTES.md +0 -1085
- package/docs/STEPS.md +0 -883
- package/examples/business-onboarding.ts +0 -791
- package/examples/custom-database-persistence.ts +0 -574
- package/examples/domain-scoping.ts +0 -366
- package/examples/travel-agent.ts +0 -584
- package/src/core/DomainRegistry.ts +0 -80
- package/src/core/Tool.ts +0 -112
- package/src/core/Transition.ts +0 -115
- /package/dist/{adapters → cjs/src/adapters}/index.d.ts +0 -0
- /package/dist/cjs/{adapters → src/adapters}/index.js +0 -0
- /package/dist/cjs/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/cjs/{constants → src/constants}/index.js +0 -0
- /package/dist/cjs/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/cjs/{providers → src/providers}/index.js +0 -0
- /package/dist/cjs/{types → src/types}/agent.js +0 -0
- /package/dist/cjs/{types → src/types}/ai.js +0 -0
- /package/dist/cjs/{types → src/types}/persistence.js +0 -0
- /package/dist/cjs/{types → src/types}/route.js +0 -0
- /package/dist/cjs/{types → src/types}/routing.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/routing.js +0 -0
- /package/dist/cjs/{types → src/types}/schema.d.ts +0 -0
- /package/dist/cjs/{types → src/types}/schema.js +0 -0
- /package/dist/cjs/{types → src/types}/tool.js +0 -0
- /package/dist/cjs/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/id.js +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/logger.js +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/cjs/{utils → src/utils}/retry.js +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts +0 -0
- /package/dist/{cjs → src}/adapters/index.d.ts.map +0 -0
- /package/dist/{adapters → src/adapters}/index.js +0 -0
- /package/dist/{constants → src/constants}/index.d.ts +0 -0
- /package/dist/{cjs → src}/constants/index.d.ts.map +0 -0
- /package/dist/{constants → src/constants}/index.js +0 -0
- /package/dist/{providers → src/providers}/index.d.ts +0 -0
- /package/dist/{cjs → src}/providers/index.d.ts.map +0 -0
- /package/dist/{providers → src/providers}/index.js +0 -0
- /package/dist/{types → src/types}/agent.js +0 -0
- /package/dist/{types → src/types}/ai.js +0 -0
- /package/dist/{types → src/types}/persistence.js +0 -0
- /package/dist/{types → src/types}/route.js +0 -0
- /package/dist/{types → src/types}/routing.d.ts +0 -0
- /package/dist/{cjs → src}/types/routing.d.ts.map +0 -0
- /package/dist/{types → src/types}/routing.js +0 -0
- /package/dist/{cjs → src}/types/routing.js.map +0 -0
- /package/dist/{types → src/types}/schema.d.ts +0 -0
- /package/dist/{cjs → src}/types/schema.d.ts.map +0 -0
- /package/dist/{types → src/types}/schema.js +0 -0
- /package/dist/{cjs → src}/types/schema.js.map +0 -0
- /package/dist/{types → src/types}/tool.js +0 -0
- /package/dist/{utils → src/utils}/id.d.ts +0 -0
- /package/dist/{cjs → src}/utils/id.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/id.js +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{cjs → src}/utils/logger.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/logger.js +0 -0
- /package/dist/{utils → src/utils}/retry.d.ts +0 -0
- /package/dist/{cjs → src}/utils/retry.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/retry.js +0 -0
- /package/docs/{PUBLISHING.md → guides/advanced-patterns/publishing.md} +0 -0
|
@@ -1,791 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Business Onboarding Example
|
|
3
|
-
* Updated for v2 architecture with session step management and schema-first data extraction
|
|
4
|
-
*
|
|
5
|
-
* Real-world example showing:
|
|
6
|
-
* - Complex multi-step onboarding flow with schema-based data extraction
|
|
7
|
-
* - Tools with enhanced context access for automatic step management
|
|
8
|
-
* - Lifecycle hooks for data validation and persistence
|
|
9
|
-
* - Branching logic (physical vs online business) with skipIf conditions
|
|
10
|
-
* - Code-based step progression instead of fuzzy conditions
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
Agent,
|
|
15
|
-
defineTool,
|
|
16
|
-
END_ROUTE,
|
|
17
|
-
EventSource,
|
|
18
|
-
createMessageEvent,
|
|
19
|
-
OpenAIProvider,
|
|
20
|
-
createSession,
|
|
21
|
-
type ToolContext,
|
|
22
|
-
} from "../src/index";
|
|
23
|
-
|
|
24
|
-
// ==================== Types ====================
|
|
25
|
-
|
|
26
|
-
interface BusinessInfo {
|
|
27
|
-
businessName?: string;
|
|
28
|
-
businessDescription?: string;
|
|
29
|
-
businessSector?: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
interface LocationInfo {
|
|
33
|
-
address?: string;
|
|
34
|
-
city?: string;
|
|
35
|
-
step?: string;
|
|
36
|
-
hasPhysicalStore?: boolean;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
interface ContactInfo {
|
|
40
|
-
website?: string;
|
|
41
|
-
openingHours?: string;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
interface PaymentInfo {
|
|
45
|
-
paymentMethods?: string[];
|
|
46
|
-
pixInfo?: {
|
|
47
|
-
pixKey: string;
|
|
48
|
-
pixType: "cpf" | "cnpj" | "email" | "phone" | "random";
|
|
49
|
-
};
|
|
50
|
-
installmentOptions?: string;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
interface ProductsInfo {
|
|
54
|
-
products?: string[];
|
|
55
|
-
services?: string[];
|
|
56
|
-
targetAudience?: string;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
interface RouteInfo {
|
|
60
|
-
title: string;
|
|
61
|
-
description: string;
|
|
62
|
-
keywords: string[];
|
|
63
|
-
responseStyle: "formal" | "casual" | "professional" | "friendly";
|
|
64
|
-
actions: string[];
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
interface OnboardingData {
|
|
68
|
-
business?: BusinessInfo;
|
|
69
|
-
location?: LocationInfo;
|
|
70
|
-
contact?: ContactInfo;
|
|
71
|
-
payment?: PaymentInfo;
|
|
72
|
-
productsServices?: ProductsInfo;
|
|
73
|
-
routes: RouteInfo[];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
interface OnboardingContext {
|
|
77
|
-
userId: string;
|
|
78
|
-
userName: string;
|
|
79
|
-
sessionId: string;
|
|
80
|
-
collectedData: OnboardingData;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// ==================== Tools ====================
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Save business information
|
|
87
|
-
*/
|
|
88
|
-
const saveBusinessInfo = defineTool<
|
|
89
|
-
OnboardingContext,
|
|
90
|
-
[name: string, description: string, sector: string],
|
|
91
|
-
boolean
|
|
92
|
-
>(
|
|
93
|
-
"save_business_info",
|
|
94
|
-
async (
|
|
95
|
-
toolContext: ToolContext<OnboardingContext>,
|
|
96
|
-
name: string,
|
|
97
|
-
description: string,
|
|
98
|
-
sector: string
|
|
99
|
-
) => {
|
|
100
|
-
// Return contextUpdate to automatically update context
|
|
101
|
-
return {
|
|
102
|
-
data: true,
|
|
103
|
-
contextUpdate: {
|
|
104
|
-
collectedData: {
|
|
105
|
-
...toolContext.context.collectedData,
|
|
106
|
-
business: {
|
|
107
|
-
businessName: name,
|
|
108
|
-
businessDescription: description,
|
|
109
|
-
businessSector: sector,
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
description:
|
|
117
|
-
"Save basic business information: company name, description, and sector",
|
|
118
|
-
}
|
|
119
|
-
);
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Save products and services information
|
|
123
|
-
*/
|
|
124
|
-
const saveProductsServices = defineTool<
|
|
125
|
-
OnboardingContext,
|
|
126
|
-
[products: string[], services: string[], targetAudience: string],
|
|
127
|
-
boolean
|
|
128
|
-
>(
|
|
129
|
-
"save_products_services",
|
|
130
|
-
async (
|
|
131
|
-
toolContext: ToolContext<OnboardingContext>,
|
|
132
|
-
products: string[],
|
|
133
|
-
services: string[],
|
|
134
|
-
targetAudience: string
|
|
135
|
-
) => {
|
|
136
|
-
return {
|
|
137
|
-
data: true,
|
|
138
|
-
contextUpdate: {
|
|
139
|
-
collectedData: {
|
|
140
|
-
...toolContext.context.collectedData,
|
|
141
|
-
productsServices: {
|
|
142
|
-
products,
|
|
143
|
-
services,
|
|
144
|
-
targetAudience,
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
description: "Save products, services offered, and target audience",
|
|
152
|
-
}
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Save location information
|
|
157
|
-
*/
|
|
158
|
-
const saveLocationInfo = defineTool<
|
|
159
|
-
OnboardingContext,
|
|
160
|
-
[address: string, city: string, step: string, hasPhysicalStore: boolean],
|
|
161
|
-
boolean
|
|
162
|
-
>(
|
|
163
|
-
"save_location_info",
|
|
164
|
-
async (
|
|
165
|
-
toolContext: ToolContext<OnboardingContext>,
|
|
166
|
-
address: string,
|
|
167
|
-
city: string,
|
|
168
|
-
step: string,
|
|
169
|
-
hasPhysicalStore: boolean
|
|
170
|
-
) => {
|
|
171
|
-
return {
|
|
172
|
-
data: true,
|
|
173
|
-
contextUpdate: {
|
|
174
|
-
collectedData: {
|
|
175
|
-
...toolContext.context.collectedData,
|
|
176
|
-
location: {
|
|
177
|
-
address,
|
|
178
|
-
city,
|
|
179
|
-
step,
|
|
180
|
-
hasPhysicalStore,
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
},
|
|
184
|
-
};
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
description:
|
|
188
|
-
"Save location information: full address, city, step, and physical store status",
|
|
189
|
-
}
|
|
190
|
-
);
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Save contact information
|
|
194
|
-
*/
|
|
195
|
-
const saveContactInfo = defineTool<
|
|
196
|
-
OnboardingContext,
|
|
197
|
-
[website: string, openingHours: string],
|
|
198
|
-
boolean
|
|
199
|
-
>(
|
|
200
|
-
"save_contact_info",
|
|
201
|
-
async (
|
|
202
|
-
toolContext: ToolContext<OnboardingContext>,
|
|
203
|
-
website: string,
|
|
204
|
-
openingHours: string
|
|
205
|
-
) => {
|
|
206
|
-
return {
|
|
207
|
-
data: true,
|
|
208
|
-
contextUpdate: {
|
|
209
|
-
collectedData: {
|
|
210
|
-
...toolContext.context.collectedData,
|
|
211
|
-
contact: {
|
|
212
|
-
website,
|
|
213
|
-
openingHours,
|
|
214
|
-
},
|
|
215
|
-
},
|
|
216
|
-
},
|
|
217
|
-
};
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
description: "Save contact information: website/URL and business hours",
|
|
221
|
-
}
|
|
222
|
-
);
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Save payment information
|
|
226
|
-
*/
|
|
227
|
-
const savePaymentInfo = defineTool<
|
|
228
|
-
OnboardingContext,
|
|
229
|
-
[
|
|
230
|
-
paymentMethods: string[],
|
|
231
|
-
pixKey: string,
|
|
232
|
-
pixType: string,
|
|
233
|
-
installmentOptions: string
|
|
234
|
-
],
|
|
235
|
-
boolean
|
|
236
|
-
>(
|
|
237
|
-
"save_payment_info",
|
|
238
|
-
async (
|
|
239
|
-
toolContext: ToolContext<OnboardingContext>,
|
|
240
|
-
paymentMethods: string[],
|
|
241
|
-
pixKey: string,
|
|
242
|
-
pixType: string,
|
|
243
|
-
installmentOptions: string
|
|
244
|
-
) => {
|
|
245
|
-
const pixInfo =
|
|
246
|
-
pixKey && pixType
|
|
247
|
-
? {
|
|
248
|
-
pixKey,
|
|
249
|
-
pixType: ["cpf", "cnpj", "email", "phone", "random"].includes(
|
|
250
|
-
pixType.toLowerCase()
|
|
251
|
-
)
|
|
252
|
-
? (pixType.toLowerCase() as
|
|
253
|
-
| "cpf"
|
|
254
|
-
| "cnpj"
|
|
255
|
-
| "email"
|
|
256
|
-
| "phone"
|
|
257
|
-
| "random")
|
|
258
|
-
: ("random" as const),
|
|
259
|
-
}
|
|
260
|
-
: undefined;
|
|
261
|
-
|
|
262
|
-
return {
|
|
263
|
-
data: true,
|
|
264
|
-
contextUpdate: {
|
|
265
|
-
collectedData: {
|
|
266
|
-
...toolContext.context.collectedData,
|
|
267
|
-
payment: {
|
|
268
|
-
paymentMethods,
|
|
269
|
-
pixInfo,
|
|
270
|
-
installmentOptions,
|
|
271
|
-
},
|
|
272
|
-
},
|
|
273
|
-
},
|
|
274
|
-
};
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
description:
|
|
278
|
-
"Save payment information: accepted methods, Pix key with type (cpf/cnpj/email/phone/random), and installment options",
|
|
279
|
-
}
|
|
280
|
-
);
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Add a conversation route
|
|
284
|
-
*/
|
|
285
|
-
const addConversationRoute = defineTool<
|
|
286
|
-
OnboardingContext,
|
|
287
|
-
[
|
|
288
|
-
title: string,
|
|
289
|
-
description: string,
|
|
290
|
-
keywords: string[],
|
|
291
|
-
responseStyle: string
|
|
292
|
-
],
|
|
293
|
-
boolean
|
|
294
|
-
>(
|
|
295
|
-
"add_conversation_route",
|
|
296
|
-
async (
|
|
297
|
-
toolContext: ToolContext<OnboardingContext>,
|
|
298
|
-
title: string,
|
|
299
|
-
description: string,
|
|
300
|
-
keywords: string[],
|
|
301
|
-
responseStyle: string
|
|
302
|
-
) => {
|
|
303
|
-
const validResponseStyles = [
|
|
304
|
-
"formal",
|
|
305
|
-
"casual",
|
|
306
|
-
"professional",
|
|
307
|
-
"friendly",
|
|
308
|
-
];
|
|
309
|
-
const normalizedStyle = responseStyle.toLowerCase();
|
|
310
|
-
|
|
311
|
-
const route: RouteInfo = {
|
|
312
|
-
title,
|
|
313
|
-
description,
|
|
314
|
-
keywords,
|
|
315
|
-
responseStyle: validResponseStyles.includes(normalizedStyle)
|
|
316
|
-
? (normalizedStyle as "formal" | "casual" | "professional" | "friendly")
|
|
317
|
-
: "professional",
|
|
318
|
-
actions: [],
|
|
319
|
-
};
|
|
320
|
-
|
|
321
|
-
const existingRoutes = toolContext.context.collectedData.routes || [];
|
|
322
|
-
|
|
323
|
-
return {
|
|
324
|
-
data: true,
|
|
325
|
-
contextUpdate: {
|
|
326
|
-
collectedData: {
|
|
327
|
-
...toolContext.context.collectedData,
|
|
328
|
-
routes: [...existingRoutes, route],
|
|
329
|
-
},
|
|
330
|
-
},
|
|
331
|
-
};
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
description:
|
|
335
|
-
"Add a new conversation route with title, description, keywords, and response style",
|
|
336
|
-
}
|
|
337
|
-
);
|
|
338
|
-
|
|
339
|
-
/**
|
|
340
|
-
* Get all collected data for review
|
|
341
|
-
*/
|
|
342
|
-
const getData = defineTool<OnboardingContext, [], OnboardingData>(
|
|
343
|
-
"get_collected_data",
|
|
344
|
-
async (toolContext: ToolContext<OnboardingContext>) => {
|
|
345
|
-
return { data: toolContext.context.collectedData };
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
description: "Retrieve all collected data for review",
|
|
349
|
-
}
|
|
350
|
-
);
|
|
351
|
-
|
|
352
|
-
// ==================== Agent Creation ====================
|
|
353
|
-
|
|
354
|
-
/**
|
|
355
|
-
* Create a business onboarding agent with lifecycle hooks
|
|
356
|
-
* This demonstrates a real-world pattern with:
|
|
357
|
-
* - beforeRespond: Load fresh context before each response
|
|
358
|
-
* - onContextUpdate: Automatically persist context changes
|
|
359
|
-
*/
|
|
360
|
-
async function createBusinessOnboardingAgent(
|
|
361
|
-
userId: string,
|
|
362
|
-
userName: string,
|
|
363
|
-
sessionId: string,
|
|
364
|
-
initialData: OnboardingData = { routes: [] }
|
|
365
|
-
): Promise<Agent<OnboardingContext>> {
|
|
366
|
-
const provider = new OpenAIProvider({
|
|
367
|
-
apiKey: process.env.OPENAI_API_KEY || "test-key",
|
|
368
|
-
model: "gpt-5",
|
|
369
|
-
backupModels: ["gpt-5-mini"],
|
|
370
|
-
retryConfig: {
|
|
371
|
-
timeout: 60000,
|
|
372
|
-
retries: 3,
|
|
373
|
-
},
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
// Create agent with lifecycle hooks for automatic persistence
|
|
377
|
-
const agent = new Agent<OnboardingContext>({
|
|
378
|
-
name: "Business Onboarding Assistant",
|
|
379
|
-
description:
|
|
380
|
-
"A specialized assistant that helps businesses set up intelligent conversation routes for their customers.",
|
|
381
|
-
goal: "Collect comprehensive business information and create personalized conversation routes",
|
|
382
|
-
provider: provider,
|
|
383
|
-
context: {
|
|
384
|
-
userId,
|
|
385
|
-
userName,
|
|
386
|
-
sessionId,
|
|
387
|
-
collectedData: initialData,
|
|
388
|
-
},
|
|
389
|
-
// Lifecycle hooks enable agent caching!
|
|
390
|
-
hooks: {
|
|
391
|
-
// Load fresh context before each response
|
|
392
|
-
beforeRespond: async (currentContext) => {
|
|
393
|
-
// In a real app, fetch from database here
|
|
394
|
-
console.log(
|
|
395
|
-
`[beforeRespond] Loading fresh context for session ${sessionId}`
|
|
396
|
-
);
|
|
397
|
-
// Return updated context
|
|
398
|
-
return currentContext;
|
|
399
|
-
},
|
|
400
|
-
|
|
401
|
-
// Automatically persist context updates
|
|
402
|
-
onContextUpdate: async (newContext) => {
|
|
403
|
-
// In a real app, save to database here
|
|
404
|
-
console.log(
|
|
405
|
-
`[onContextUpdate] Persisting context for session ${sessionId}`
|
|
406
|
-
);
|
|
407
|
-
console.log(
|
|
408
|
-
"Updated data:",
|
|
409
|
-
JSON.stringify(newContext.collectedData, null, 2)
|
|
410
|
-
);
|
|
411
|
-
},
|
|
412
|
-
},
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
// Create the main onboarding route
|
|
416
|
-
const onboardingRoute = agent.createRoute({
|
|
417
|
-
title: "Business Onboarding",
|
|
418
|
-
description: "Complete onboarding process to configure personalized routes",
|
|
419
|
-
conditions: ["User is starting the onboarding process"],
|
|
420
|
-
endStep: {
|
|
421
|
-
instructions:
|
|
422
|
-
"🎉 Perfect! Setup complete! Your WhatsApp assistant is ready and will use all this information to automatically serve your customers. If you have any questions or need adjustments, just let me know!",
|
|
423
|
-
},
|
|
424
|
-
});
|
|
425
|
-
|
|
426
|
-
// ==================== Build the Flow ====================
|
|
427
|
-
|
|
428
|
-
// For complex flows with branching, we use step-by-step approach
|
|
429
|
-
// This makes it easier to reference steps for branching logic
|
|
430
|
-
|
|
431
|
-
// Step 0: Welcome
|
|
432
|
-
const welcome = onboardingRoute.initialStep.nextStep({
|
|
433
|
-
instructions: `Hello ${userName}! 👋 I'm your setup assistant. I'll help you configure your WhatsApp assistant by collecting practical information about your business. ${
|
|
434
|
-
initialData.business?.businessName
|
|
435
|
-
? `I see your company is "${initialData.business.businessName}".`
|
|
436
|
-
: ""
|
|
437
|
-
} Let's begin! This will only take a few minutes.`,
|
|
438
|
-
});
|
|
439
|
-
|
|
440
|
-
// Step 1: Business basics - Ask
|
|
441
|
-
const askBusiness = welcome.nextStep({
|
|
442
|
-
instructions:
|
|
443
|
-
initialData.business?.businessName &&
|
|
444
|
-
initialData.business?.businessDescription &&
|
|
445
|
-
initialData.business?.businessSector
|
|
446
|
-
? `Please confirm: your company is "${initialData.business.businessName}", operates in "${initialData.business.businessSector}", and "${initialData.business.businessDescription}". Is this correct?`
|
|
447
|
-
: initialData.business?.businessName
|
|
448
|
-
? `Your company "${initialData.business.businessName}" - what sector do you operate in? And what exactly do you do? (brief description)`
|
|
449
|
-
: "First, the basics: what's your company name, sector, and what do you do? (e.g., 'Store X, retail, we sell women's clothing')",
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
// Step 1: Business basics - Save
|
|
453
|
-
const saveBusiness = askBusiness.nextStep({
|
|
454
|
-
tool: saveBusinessInfo,
|
|
455
|
-
condition: "User provided company name, sector, and description",
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
// Step 2: Products/Services - Ask
|
|
459
|
-
const askProducts = saveBusiness.nextStep({
|
|
460
|
-
instructions:
|
|
461
|
-
"Perfect! Now tell me: what are the main products or services you offer? And who is your target audience? (e.g., 'We sell women's clothing and accessories for women aged 25-45')",
|
|
462
|
-
});
|
|
463
|
-
|
|
464
|
-
// Step 2: Products/Services - Save
|
|
465
|
-
const saveProducts = askProducts.nextStep({
|
|
466
|
-
tool: saveProductsServices,
|
|
467
|
-
condition: "User listed products/services and target audience",
|
|
468
|
-
});
|
|
469
|
-
|
|
470
|
-
// Step 3: Location - Branch point
|
|
471
|
-
const askLocation = saveProducts.nextStep({
|
|
472
|
-
instructions:
|
|
473
|
-
"Great! Do you have a physical store or in-person service location? (answer 'yes' or 'no')",
|
|
474
|
-
});
|
|
475
|
-
|
|
476
|
-
// Step 3a: Physical store path
|
|
477
|
-
const askPhysicalLocation = askLocation.nextStep({
|
|
478
|
-
instructions:
|
|
479
|
-
"I see! Since you have a physical presence, I need the complete address (street, number, city, and step) and business hours. This is important for your assistant to inform customers. (e.g., 'José Silva Street, 123, São Paulo - SP - Mon to Fri: 9am to 6pm')",
|
|
480
|
-
condition: "User has a physical store",
|
|
481
|
-
});
|
|
482
|
-
|
|
483
|
-
const savePhysicalLocation = askPhysicalLocation.nextStep({
|
|
484
|
-
tool: saveLocationInfo,
|
|
485
|
-
condition: "User provided physical address",
|
|
486
|
-
});
|
|
487
|
-
|
|
488
|
-
// Step 3b: Online-only path
|
|
489
|
-
const askOnlineLocation = askLocation.nextStep({
|
|
490
|
-
instructions:
|
|
491
|
-
"Perfect! Since it's online only, please share your main website or social media where customers can find you? And what are your support hours? (e.g., 'www.example.com - 24/7 support' or 'Instagram @mycompany - Mon to Fri: 9am-6pm')",
|
|
492
|
-
condition: "User does not have a physical store",
|
|
493
|
-
});
|
|
494
|
-
|
|
495
|
-
const saveOnlineLocation = askOnlineLocation.nextStep({
|
|
496
|
-
tool: saveContactInfo,
|
|
497
|
-
condition: "User provided website/social media and support hours",
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
// Step 4: Contact info (convergence point for physical stores)
|
|
501
|
-
const askContact = savePhysicalLocation.nextStep({
|
|
502
|
-
instructions:
|
|
503
|
-
"Do you also have a website or social media? If yes, which one? (if not, you can skip by saying 'I don't have one')",
|
|
504
|
-
});
|
|
505
|
-
|
|
506
|
-
const saveContact = askContact.nextStep({
|
|
507
|
-
tool: saveContactInfo,
|
|
508
|
-
condition: "User provided website/social media",
|
|
509
|
-
});
|
|
510
|
-
|
|
511
|
-
// Step 5: Payment info (convergence point from both paths)
|
|
512
|
-
const askPayment = saveContact.nextStep({
|
|
513
|
-
instructions:
|
|
514
|
-
"Now about payment: do you sell products/services that customers pay for? If yes, what payment methods do you accept? If you accept Pix, provide the key and type (CPF, CNPJ, email, phone). Do you offer installments? (e.g., 'Pix CPF: 12345678900, Credit card up to 12x, Bank slip' - or say 'not applicable' if you don't sell)",
|
|
515
|
-
});
|
|
516
|
-
|
|
517
|
-
// Also connect online path to payment
|
|
518
|
-
saveOnlineLocation.nextStep({ step: askPayment });
|
|
519
|
-
|
|
520
|
-
const savePayment = askPayment.nextStep({
|
|
521
|
-
tool: savePaymentInfo,
|
|
522
|
-
condition: "User provided payment methods or said not applicable",
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
// Step 6: Suggest automatic routes
|
|
526
|
-
const suggestRoutes = savePayment.nextStep({
|
|
527
|
-
instructions:
|
|
528
|
-
"Perfect! Now I'll create the essential routes. Based on what you told me, I'll automatically create:\n\n1. **Products and Services** - for when they ask what you offer\n2. **Pricing and Quotes** - for questions about prices\n3. **Payment Information** - payment methods and installments\n4. **Location and Contact** - address, website, and hours\n\nThese are the most important routes for any business. I'll create them automatically with the information you provided. Sound good?",
|
|
529
|
-
});
|
|
530
|
-
|
|
531
|
-
const createRoutes = suggestRoutes.nextStep({
|
|
532
|
-
tool: addConversationRoute,
|
|
533
|
-
condition: "User approved automatic route creation",
|
|
534
|
-
});
|
|
535
|
-
|
|
536
|
-
// Step 7: Review collected data
|
|
537
|
-
const reviewData = createRoutes.nextStep({
|
|
538
|
-
tool: getData,
|
|
539
|
-
condition: "Routes created successfully",
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
// Step 8: Summary and options
|
|
543
|
-
const summary = reviewData.nextStep({
|
|
544
|
-
instructions:
|
|
545
|
-
"Done! ✅ I've configured everything:\n\n✓ Business information\n✓ Products/services and target audience\n✓ Location and contact\n✓ Payment methods\n✓ Essential conversation routes\n\nYour assistant is ready! It will use this information to automatically respond when customers ask. Do you want to add any custom routes or is everything good?",
|
|
546
|
-
});
|
|
547
|
-
|
|
548
|
-
// Step 9a: Add more routes
|
|
549
|
-
const askCustomRoute = summary.nextStep({
|
|
550
|
-
instructions:
|
|
551
|
-
"Got it! Tell me about this additional route: what's the title, what kind of questions should it answer, and what keywords do customers use? (e.g., 'Warranty and Exchange - answers about warranty, exchange, and returns - keywords: warranty, exchange, return')",
|
|
552
|
-
condition: "User wants to add more routes",
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
const saveCustomRoute = askCustomRoute.nextStep({
|
|
556
|
-
tool: addConversationRoute,
|
|
557
|
-
condition: "User provided custom route information",
|
|
558
|
-
});
|
|
559
|
-
|
|
560
|
-
// Loop back to summary after adding custom route
|
|
561
|
-
saveCustomRoute.nextStep({ step: summary });
|
|
562
|
-
|
|
563
|
-
// Step 9b: Final confirmation - transition to END_ROUTE (uses route-level endStep)
|
|
564
|
-
summary.nextStep({
|
|
565
|
-
step: END_ROUTE,
|
|
566
|
-
condition: "User confirmed everything is okay",
|
|
567
|
-
});
|
|
568
|
-
|
|
569
|
-
// ==================== Alternative: Sequential Steps ====================
|
|
570
|
-
// For simpler linear flows, you can use the new sequential steps approach:
|
|
571
|
-
|
|
572
|
-
// Example 1: Using steps array (NEW!)
|
|
573
|
-
agent.createRoute({
|
|
574
|
-
title: "Collect Feedback",
|
|
575
|
-
description: "Quick feedback collection from completed onboarding",
|
|
576
|
-
conditions: ["User wants to provide feedback"],
|
|
577
|
-
steps: [
|
|
578
|
-
{
|
|
579
|
-
id: "ask_rating",
|
|
580
|
-
instructions:
|
|
581
|
-
"How would you rate your onboarding experience? (1-5 stars)",
|
|
582
|
-
},
|
|
583
|
-
{
|
|
584
|
-
id: "ask_liked_most",
|
|
585
|
-
instructions: "What did you like most about the process?",
|
|
586
|
-
},
|
|
587
|
-
{
|
|
588
|
-
id: "ask_improve",
|
|
589
|
-
instructions: "Is there anything we could improve?",
|
|
590
|
-
},
|
|
591
|
-
{
|
|
592
|
-
id: "thank_you",
|
|
593
|
-
instructions: "Thank you for your feedback! It helps us improve. 🙏",
|
|
594
|
-
},
|
|
595
|
-
],
|
|
596
|
-
});
|
|
597
|
-
|
|
598
|
-
// Example 2: Traditional chaining approach (still supported)
|
|
599
|
-
const manualFeedbackRoute = agent.createRoute({
|
|
600
|
-
title: "Manual Feedback Route",
|
|
601
|
-
description: "Same flow using traditional chaining",
|
|
602
|
-
conditions: ["User wants manual feedback flow"],
|
|
603
|
-
endStep: {
|
|
604
|
-
instructions: "Thank you for your feedback! It helps us improve. 🙏",
|
|
605
|
-
},
|
|
606
|
-
});
|
|
607
|
-
|
|
608
|
-
manualFeedbackRoute.initialStep
|
|
609
|
-
.nextStep({
|
|
610
|
-
id: "ask_rating",
|
|
611
|
-
instructions:
|
|
612
|
-
"How would you rate your onboarding experience? (1-5 stars)",
|
|
613
|
-
})
|
|
614
|
-
.nextStep({
|
|
615
|
-
id: "ask_liked_most",
|
|
616
|
-
instructions: "What did you like most about the process?",
|
|
617
|
-
})
|
|
618
|
-
.nextStep({
|
|
619
|
-
id: "ask_improve",
|
|
620
|
-
instructions: "Is there anything we could improve?",
|
|
621
|
-
condition: "User wants to provide feedback",
|
|
622
|
-
})
|
|
623
|
-
.nextStep({ step: END_ROUTE }); // Uses route-level endStep
|
|
624
|
-
|
|
625
|
-
// ==================== Global Guidelines ====================
|
|
626
|
-
|
|
627
|
-
agent
|
|
628
|
-
.createGuideline({
|
|
629
|
-
id: "guideline_confused",
|
|
630
|
-
condition: "User seems confused or doesn't understand something",
|
|
631
|
-
action:
|
|
632
|
-
"Be patient and provide practical examples of what you need. E.g., 'José Silva Street, 123, São Paulo - SP' for address",
|
|
633
|
-
})
|
|
634
|
-
.createGuideline({
|
|
635
|
-
id: "guideline_incomplete",
|
|
636
|
-
condition: "User provides incomplete or very vague information",
|
|
637
|
-
action:
|
|
638
|
-
"Politely ask for the missing specific details. E.g., 'You mentioned the address, but what's the city and step?'",
|
|
639
|
-
})
|
|
640
|
-
.createGuideline({
|
|
641
|
-
id: "guideline_skip",
|
|
642
|
-
condition:
|
|
643
|
-
"User wants to skip information saying they don't have it or it doesn't apply",
|
|
644
|
-
action:
|
|
645
|
-
"Be smart: if the information is critical for their business type (e.g., address for physical store, website for e-commerce), explain the importance. If not critical, accept it and move forward saying 'no problem, that's fine'",
|
|
646
|
-
})
|
|
647
|
-
.createGuideline({
|
|
648
|
-
id: "guideline_physical_online",
|
|
649
|
-
condition: "User has physical store but said online-only or vice versa",
|
|
650
|
-
action:
|
|
651
|
-
"Adjust the flow dynamically: if they have a physical store, prioritize address and hours. If online-only, prioritize website/social media and digital support hours. Don't ask for irrelevant information",
|
|
652
|
-
})
|
|
653
|
-
.createGuideline({
|
|
654
|
-
id: "guideline_why",
|
|
655
|
-
condition: "User asks why they need to provide certain information",
|
|
656
|
-
action:
|
|
657
|
-
"Explain practically: 'This information will help your assistant automatically answer customers when they ask about this. E.g., when they ask about payment methods, the assistant will inform automatically'",
|
|
658
|
-
})
|
|
659
|
-
.createGuideline({
|
|
660
|
-
id: "guideline_edit",
|
|
661
|
-
condition:
|
|
662
|
-
"User wants to edit or correct something they already provided",
|
|
663
|
-
action:
|
|
664
|
-
"Accept promptly and update the information: 'Of course! I'll update to...'. Use the appropriate tool to save the correction",
|
|
665
|
-
})
|
|
666
|
-
.createGuideline({
|
|
667
|
-
id: "guideline_unrelated",
|
|
668
|
-
condition: "User asks a question unrelated to onboarding",
|
|
669
|
-
action:
|
|
670
|
-
"Answer briefly and redirect: 'I understand, but let's finish the setup first? We're almost there!'",
|
|
671
|
-
});
|
|
672
|
-
|
|
673
|
-
return agent;
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
// ==================== Example Usage ====================
|
|
677
|
-
|
|
678
|
-
async function main() {
|
|
679
|
-
console.log("=".repeat(60));
|
|
680
|
-
console.log("Business Onboarding Agent - Example");
|
|
681
|
-
console.log("=".repeat(60));
|
|
682
|
-
|
|
683
|
-
// Create agent with sample initial data
|
|
684
|
-
const agent = await createBusinessOnboardingAgent(
|
|
685
|
-
"user_123",
|
|
686
|
-
"Alice",
|
|
687
|
-
"session_456",
|
|
688
|
-
{
|
|
689
|
-
routes: [],
|
|
690
|
-
// Optionally pre-populate some data:
|
|
691
|
-
// business: {
|
|
692
|
-
// businessName: "Alice's Boutique",
|
|
693
|
-
// }
|
|
694
|
-
}
|
|
695
|
-
);
|
|
696
|
-
|
|
697
|
-
console.log("\nAgent:", agent.name);
|
|
698
|
-
console.log("Description:", agent.description);
|
|
699
|
-
console.log("Routes:", agent.getRoutes().length);
|
|
700
|
-
console.log("Guidelines:", agent.getGuidelines().length);
|
|
701
|
-
|
|
702
|
-
// Print route structure
|
|
703
|
-
console.log("\n" + "=".repeat(60));
|
|
704
|
-
const routes = agent.getRoutes();
|
|
705
|
-
for (const route of routes) {
|
|
706
|
-
console.log("\n" + route.describe());
|
|
707
|
-
}
|
|
708
|
-
|
|
709
|
-
// Simulate a conversation
|
|
710
|
-
console.log("\n" + "=".repeat(60));
|
|
711
|
-
console.log("Conversation Simulation");
|
|
712
|
-
console.log("=".repeat(60) + "\n");
|
|
713
|
-
|
|
714
|
-
const history = [
|
|
715
|
-
createMessageEvent(
|
|
716
|
-
EventSource.CUSTOMER,
|
|
717
|
-
"Alice",
|
|
718
|
-
"Hi, I want to set up my assistant"
|
|
719
|
-
),
|
|
720
|
-
];
|
|
721
|
-
|
|
722
|
-
// Generate response (requires valid API key)
|
|
723
|
-
try {
|
|
724
|
-
// Initialize session step for multi-turn conversation
|
|
725
|
-
let session = createSession<OnboardingData>();
|
|
726
|
-
agent.setCurrentSession(session);
|
|
727
|
-
|
|
728
|
-
const response = await agent.respond({ history });
|
|
729
|
-
console.log("Agent:", response.message);
|
|
730
|
-
console.log("\nRoute:", response.session?.currentRoute?.title);
|
|
731
|
-
|
|
732
|
-
// After the conversation, you can get the collected data
|
|
733
|
-
const dataData = agent.getData<OnboardingData>();
|
|
734
|
-
console.log("Data:", dataData);
|
|
735
|
-
|
|
736
|
-
// Update session with progress
|
|
737
|
-
session = response.session!;
|
|
738
|
-
|
|
739
|
-
// You can also pass the session to the agent constructor
|
|
740
|
-
// const agentWithSession = await createBusinessOnboardingAgent("user_123", "Alice", "session_456", {}, session);
|
|
741
|
-
// const response2 = await agentWithSession.respond({ history });
|
|
742
|
-
|
|
743
|
-
if (response.isRouteComplete) {
|
|
744
|
-
console.log("\n✅ Onboarding route complete!");
|
|
745
|
-
// Here you would typically save the complete data to your database
|
|
746
|
-
await processOnboardingData(agent.getData());
|
|
747
|
-
} else {
|
|
748
|
-
console.log("\n⏳ Onboarding route in progress...");
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
console.log("\n✅ Session step benefits:");
|
|
752
|
-
console.log(" - Data extraction tracked across turns");
|
|
753
|
-
console.log(" - Step progression managed automatically");
|
|
754
|
-
console.log(" - Always-on routing respects intent changes");
|
|
755
|
-
} catch (error: any) {
|
|
756
|
-
console.log("\n(Skipping AI response - requires valid API key)");
|
|
757
|
-
console.log("Error:", error.message);
|
|
758
|
-
}
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
/**
|
|
762
|
-
* Mock function to process completed onboarding data
|
|
763
|
-
* @param data - The complete onboarding data
|
|
764
|
-
*/
|
|
765
|
-
async function processOnboardingData(data: Partial<OnboardingData>) {
|
|
766
|
-
console.log("\n" + "=".repeat(60));
|
|
767
|
-
console.log("🚀 Processing Completed Onboarding Data...");
|
|
768
|
-
console.log("=".repeat(60));
|
|
769
|
-
console.log("Received data:", JSON.stringify(data, null, 2));
|
|
770
|
-
|
|
771
|
-
// Example: Save to a database
|
|
772
|
-
console.log("\n💾 Saving to database...");
|
|
773
|
-
await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate async operation
|
|
774
|
-
console.log(" - Business Info:", data.business?.businessName);
|
|
775
|
-
console.log(" - Contact Info:", data.contact?.website);
|
|
776
|
-
console.log(" - Location Info:", data.location?.address);
|
|
777
|
-
|
|
778
|
-
// Example: Triggering a welcome email
|
|
779
|
-
console.log("\n📧 Sending welcome email...");
|
|
780
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
781
|
-
console.log(` - Email sent to user associated with the account.`);
|
|
782
|
-
|
|
783
|
-
console.log("\n✨ Onboarding processing complete!");
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
// Run if executed directly
|
|
787
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
788
|
-
main().catch(console.error);
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
export { createBusinessOnboardingAgent };
|