@falai/agent 0.9.2 → 1.0.0
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 +262 -38
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.d.ts +6 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +42 -2
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +842 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +201 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +202 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +686 -66
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +34 -5
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Route.js +196 -19
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/{src → cjs}/core/Step.d.ts +31 -10
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Step.js +105 -10
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +4 -1
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +12 -1
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +11 -3
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +2 -1
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +6 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +111 -12
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{src/core → core}/Agent.d.ts +6 -1
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +43 -3
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +837 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +197 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +198 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +686 -66
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/{src/core → core}/Route.js +195 -18
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +310 -60
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/{src/core → core}/Step.js +104 -9
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +3 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +11 -3
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +111 -12
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/api/README.md +221 -12
- package/docs/api/overview.md +202 -3
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +120 -5
- package/docs/core/agent/session-management.md +1 -1
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +146 -0
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +2 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +193 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/guides/getting-started/README.md +284 -3
- package/docs/guides/migration/README.md +23 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +303 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
- package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +4 -4
- package/examples/ai-providers/openai-integration.ts +1 -1
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +48 -7
- package/examples/core-concepts/basic-agent.ts +54 -33
- package/examples/core-concepts/schema-driven-extraction.ts +33 -9
- package/examples/core-concepts/session-management.ts +51 -16
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +10 -10
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +8 -8
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +3 -3
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/data-enrichment-tools.ts +4 -4
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +54 -2
- package/src/core/BatchExecutor.ts +1156 -0
- package/src/core/BatchPromptBuilder.ts +275 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +143 -4
- package/src/core/ResponseModal.ts +888 -66
- package/src/core/ResponsePipeline.ts +17 -9
- package/src/core/Route.ts +223 -22
- package/src/core/RoutingEngine.ts +426 -83
- package/src/core/Step.ts +144 -16
- package/src/index.ts +19 -0
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +11 -3
- package/src/types/index.ts +12 -1
- package/src/types/route.ts +131 -12
- package/src/types/template.ts +70 -2
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolManager.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolManager.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.js +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.js +0 -0
- /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src/core → core}/ToolManager.js +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src/types → types}/tool.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
* - Schema-first data definition
|
|
9
9
|
* - Type-safe data extraction
|
|
10
10
|
* - Automatic validation
|
|
11
|
-
* -
|
|
11
|
+
* - NEW: Flexible ConditionTemplate patterns for routing and step control:
|
|
12
|
+
* - String-only conditions: "user wants to register" (AI context only)
|
|
13
|
+
* - Function-only conditions: (ctx) => ctx.data?.complete (programmatic only)
|
|
14
|
+
* - Mixed arrays: ["user provided info", (ctx) => !!ctx.data?.name] (hybrid)
|
|
15
|
+
* - Enhanced skipIf conditions for smart flow control
|
|
12
16
|
*/
|
|
13
17
|
|
|
14
18
|
import { Agent, GeminiProvider, type Tool } from "../../src/index";
|
|
@@ -106,6 +110,16 @@ agent.addTool(saveUserProfileTool);
|
|
|
106
110
|
agent.createRoute({
|
|
107
111
|
title: "User Profile Collection",
|
|
108
112
|
description: "Collect comprehensive user profile information",
|
|
113
|
+
// Mixed condition: AI context + programmatic validation
|
|
114
|
+
when: [
|
|
115
|
+
"user wants to create a profile or register",
|
|
116
|
+
(ctx) => {
|
|
117
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
118
|
+
return message.includes('profile') || message.includes('register') || message.includes('sign up');
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
// Skip if user already has a complete profile
|
|
122
|
+
skipIf: (ctx) => Boolean(ctx.data?.name && ctx.data?.email && ctx.data?.age),
|
|
109
123
|
// NEW: Required fields for route completion (instead of schema)
|
|
110
124
|
requiredFields: ["name", "email"],
|
|
111
125
|
// NEW: Optional fields that enhance the experience
|
|
@@ -117,7 +131,8 @@ agent.createRoute({
|
|
|
117
131
|
description: "Ask for user's name",
|
|
118
132
|
prompt: "Hi! I'd like to create a profile for you. What's your name?",
|
|
119
133
|
collect: ["name"],
|
|
120
|
-
skipIf
|
|
134
|
+
// String-only skipIf for AI context
|
|
135
|
+
skipIf: "user already provided their name",
|
|
121
136
|
},
|
|
122
137
|
{
|
|
123
138
|
id: "ask_email",
|
|
@@ -125,7 +140,8 @@ agent.createRoute({
|
|
|
125
140
|
prompt: "What's your email address?",
|
|
126
141
|
collect: ["email"],
|
|
127
142
|
requires: ["name"],
|
|
128
|
-
skipIf
|
|
143
|
+
// Function-only skipIf for programmatic logic
|
|
144
|
+
skipIf: (ctx) => !!ctx.data?.email,
|
|
129
145
|
},
|
|
130
146
|
{
|
|
131
147
|
id: "ask_age",
|
|
@@ -133,7 +149,11 @@ agent.createRoute({
|
|
|
133
149
|
prompt: "How old are you? (optional)",
|
|
134
150
|
collect: ["age"],
|
|
135
151
|
requires: ["name", "email"],
|
|
136
|
-
skipIf:
|
|
152
|
+
// Mixed skipIf: AI context + programmatic check
|
|
153
|
+
skipIf: [
|
|
154
|
+
"age already collected",
|
|
155
|
+
(ctx) => ctx.data?.age !== undefined
|
|
156
|
+
],
|
|
137
157
|
},
|
|
138
158
|
{
|
|
139
159
|
id: "ask_interests",
|
|
@@ -141,8 +161,11 @@ agent.createRoute({
|
|
|
141
161
|
prompt: "What are your interests or hobbies? (optional)",
|
|
142
162
|
collect: ["interests"],
|
|
143
163
|
requires: ["name", "email"],
|
|
144
|
-
skipIf
|
|
145
|
-
|
|
164
|
+
// Mixed skipIf with complex logic
|
|
165
|
+
skipIf: [
|
|
166
|
+
"interests already provided",
|
|
167
|
+
(ctx) => !!(ctx.data?.interests && ctx.data.interests.length > 0)
|
|
168
|
+
],
|
|
146
169
|
},
|
|
147
170
|
{
|
|
148
171
|
id: "ask_contact_preference",
|
|
@@ -150,7 +173,8 @@ agent.createRoute({
|
|
|
150
173
|
prompt: "What's your preferred contact method?",
|
|
151
174
|
collect: ["preferredContact"],
|
|
152
175
|
requires: ["name", "email"],
|
|
153
|
-
|
|
176
|
+
// Function-only skipIf
|
|
177
|
+
skipIf: (ctx) => !!ctx.data?.preferredContact,
|
|
154
178
|
},
|
|
155
179
|
{
|
|
156
180
|
id: "ask_newsletter",
|
|
@@ -158,8 +182,8 @@ agent.createRoute({
|
|
|
158
182
|
prompt: "Would you like to subscribe to our newsletter?",
|
|
159
183
|
collect: ["newsletterOptIn"],
|
|
160
184
|
requires: ["name", "email"],
|
|
161
|
-
skipIf
|
|
162
|
-
|
|
185
|
+
// String-only skipIf for simple cases
|
|
186
|
+
skipIf: "newsletter preference already collected",
|
|
163
187
|
},
|
|
164
188
|
{
|
|
165
189
|
id: "save_profile",
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
* - Data persistence across turns
|
|
11
11
|
* - Session restoration
|
|
12
12
|
* - Route transitions with session state
|
|
13
|
+
* - NEW: Flexible ConditionTemplate patterns for session-aware routing:
|
|
14
|
+
* - String-only conditions: "user wants to order" (AI context only)
|
|
15
|
+
* - Function-only conditions: (ctx) => !!ctx.data?.orderId (session state checks)
|
|
16
|
+
* - Mixed arrays: ["payment needed", (ctx) => !ctx.data?.confirmed] (hybrid)
|
|
17
|
+
* - Session-aware skipIf conditions for flow control
|
|
13
18
|
*/
|
|
14
19
|
|
|
15
20
|
import {
|
|
@@ -96,7 +101,7 @@ const processPaymentTool: Tool<unknown, UnifiedOrderData> = {
|
|
|
96
101
|
};
|
|
97
102
|
|
|
98
103
|
// Define unified data schema for all order-related interactions
|
|
99
|
-
interface UnifiedOrderData extends OrderData, PaymentData {}
|
|
104
|
+
interface UnifiedOrderData extends OrderData, PaymentData { }
|
|
100
105
|
|
|
101
106
|
const orderSchema = {
|
|
102
107
|
type: "object",
|
|
@@ -147,16 +152,16 @@ const orderValidationTool = agent.tool.createValidation({
|
|
|
147
152
|
validator: async (context, data) => {
|
|
148
153
|
const errors: ValidationError[] = [];
|
|
149
154
|
if (!data.customerName || data.customerName.length < 2) {
|
|
150
|
-
errors.push({
|
|
151
|
-
field: "customerName",
|
|
155
|
+
errors.push({
|
|
156
|
+
field: "customerName",
|
|
152
157
|
value: data.customerName,
|
|
153
158
|
message: "Customer name must be at least 2 characters",
|
|
154
159
|
schemaPath: "customerName"
|
|
155
160
|
});
|
|
156
161
|
}
|
|
157
162
|
if (!data.budget || data.budget < 100) {
|
|
158
|
-
errors.push({
|
|
159
|
-
field: "budget",
|
|
163
|
+
errors.push({
|
|
164
|
+
field: "budget",
|
|
160
165
|
value: data.budget,
|
|
161
166
|
message: "Budget must be at least $100",
|
|
162
167
|
schemaPath: "budget"
|
|
@@ -178,7 +183,7 @@ const orderEnrichmentTool = agent.tool.createDataEnrichment({
|
|
|
178
183
|
// Enrich with fields that exist in UnifiedOrderData
|
|
179
184
|
const urgentDelivery = data.budget > 1000; // Premium orders get urgent delivery
|
|
180
185
|
const preferredColor = data.productType === "laptop" ? "silver" : "black";
|
|
181
|
-
|
|
186
|
+
|
|
182
187
|
return {
|
|
183
188
|
urgentDelivery,
|
|
184
189
|
preferredColor,
|
|
@@ -190,6 +195,19 @@ const orderEnrichmentTool = agent.tool.createDataEnrichment({
|
|
|
190
195
|
agent.createRoute({
|
|
191
196
|
title: "Product Order",
|
|
192
197
|
description: "Collect order details and create an order",
|
|
198
|
+
// Mixed condition: AI context + programmatic validation
|
|
199
|
+
when: [
|
|
200
|
+
"user wants to place an order or buy something",
|
|
201
|
+
(ctx) => {
|
|
202
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
203
|
+
return message.includes('order') || message.includes('buy') || message.includes('purchase');
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
// Skip if user already has a pending order
|
|
207
|
+
skipIf: [
|
|
208
|
+
"user already has an active order",
|
|
209
|
+
(ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed
|
|
210
|
+
],
|
|
193
211
|
// NEW: Required fields for route completion
|
|
194
212
|
requiredFields: ["customerName", "productType", "budget"],
|
|
195
213
|
// NEW: Optional fields that enhance the experience
|
|
@@ -201,7 +219,8 @@ agent.createRoute({
|
|
|
201
219
|
description: "Ask for customer name",
|
|
202
220
|
prompt: "Hi! I'd like to help you place an order. What's your name?",
|
|
203
221
|
collect: ["customerName"],
|
|
204
|
-
skipIf
|
|
222
|
+
// String-only skipIf for AI context
|
|
223
|
+
skipIf: "customer name already provided",
|
|
205
224
|
},
|
|
206
225
|
{
|
|
207
226
|
id: "ask_product",
|
|
@@ -209,7 +228,8 @@ agent.createRoute({
|
|
|
209
228
|
prompt: "What would you like to order? (laptop, phone, or tablet)",
|
|
210
229
|
collect: ["productType"],
|
|
211
230
|
requires: ["customerName"],
|
|
212
|
-
skipIf
|
|
231
|
+
// Function-only skipIf for programmatic check
|
|
232
|
+
skipIf: (ctx) => !!ctx.data?.productType,
|
|
213
233
|
},
|
|
214
234
|
{
|
|
215
235
|
id: "ask_budget",
|
|
@@ -217,7 +237,11 @@ agent.createRoute({
|
|
|
217
237
|
prompt: "What's your budget for this purchase?",
|
|
218
238
|
collect: ["budget"],
|
|
219
239
|
requires: ["customerName", "productType"],
|
|
220
|
-
skipIf:
|
|
240
|
+
// Mixed skipIf: AI context + programmatic logic
|
|
241
|
+
skipIf: [
|
|
242
|
+
"budget already specified",
|
|
243
|
+
(ctx) => ctx.data?.budget !== undefined
|
|
244
|
+
],
|
|
221
245
|
},
|
|
222
246
|
{
|
|
223
247
|
id: "ask_color",
|
|
@@ -225,7 +249,8 @@ agent.createRoute({
|
|
|
225
249
|
prompt: "Do you have a preferred color?",
|
|
226
250
|
collect: ["preferredColor"],
|
|
227
251
|
requires: ["customerName", "productType", "budget"],
|
|
228
|
-
|
|
252
|
+
// Function-only skipIf
|
|
253
|
+
skipIf: (ctx) => !!ctx.data?.preferredColor,
|
|
229
254
|
},
|
|
230
255
|
{
|
|
231
256
|
id: "ask_urgent",
|
|
@@ -233,7 +258,8 @@ agent.createRoute({
|
|
|
233
258
|
prompt: "Do you need urgent delivery?",
|
|
234
259
|
collect: ["urgentDelivery"],
|
|
235
260
|
requires: ["customerName", "productType", "budget"],
|
|
236
|
-
|
|
261
|
+
// String-only skipIf for simple cases
|
|
262
|
+
skipIf: "delivery preference already collected",
|
|
237
263
|
},
|
|
238
264
|
{
|
|
239
265
|
id: "create_order",
|
|
@@ -253,6 +279,10 @@ agent.createRoute({
|
|
|
253
279
|
agent.createRoute({
|
|
254
280
|
title: "Payment Processing",
|
|
255
281
|
description: "Process payment for an order",
|
|
282
|
+
// Function-only condition for programmatic logic
|
|
283
|
+
when: (ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed,
|
|
284
|
+
// Skip if payment already processed
|
|
285
|
+
skipIf: (ctx) => !!ctx.data?.confirmed,
|
|
256
286
|
// NEW: Required fields for route completion
|
|
257
287
|
requiredFields: ["orderId", "paymentMethod", "amount"],
|
|
258
288
|
// NEW: Optional fields
|
|
@@ -265,7 +295,11 @@ agent.createRoute({
|
|
|
265
295
|
prompt:
|
|
266
296
|
"Now let's process payment for your order. What payment method would you prefer?",
|
|
267
297
|
collect: ["paymentMethod"],
|
|
268
|
-
skipIf:
|
|
298
|
+
// Mixed skipIf: AI context + programmatic check
|
|
299
|
+
skipIf: [
|
|
300
|
+
"payment method already selected",
|
|
301
|
+
(ctx) => !!ctx.data?.paymentMethod
|
|
302
|
+
],
|
|
269
303
|
},
|
|
270
304
|
{
|
|
271
305
|
id: "ask_amount",
|
|
@@ -273,7 +307,8 @@ agent.createRoute({
|
|
|
273
307
|
prompt: "What's the payment amount?",
|
|
274
308
|
collect: ["amount"],
|
|
275
309
|
requires: ["paymentMethod"],
|
|
276
|
-
|
|
310
|
+
// Function-only skipIf
|
|
311
|
+
skipIf: (ctx) => ctx.data?.amount !== undefined,
|
|
277
312
|
},
|
|
278
313
|
{
|
|
279
314
|
id: "process_payment",
|
|
@@ -308,7 +343,7 @@ async function demonstrateSessionManagement() {
|
|
|
308
343
|
|
|
309
344
|
// Copy routes to the session agent
|
|
310
345
|
agent.getRoutes().forEach(route => {
|
|
311
|
-
sessionAgent.createRoute(route);
|
|
346
|
+
sessionAgent.createRoute(route.toOptions());
|
|
312
347
|
});
|
|
313
348
|
|
|
314
349
|
// Turn 1: Start order process - simple message API
|
|
@@ -387,7 +422,7 @@ async function demonstrateSessionPersistence() {
|
|
|
387
422
|
|
|
388
423
|
// Copy routes to the persistent agent
|
|
389
424
|
agent.getRoutes().forEach(route => {
|
|
390
|
-
persistentAgent.createRoute(route);
|
|
425
|
+
persistentAgent.createRoute(route.toOptions());
|
|
391
426
|
});
|
|
392
427
|
|
|
393
428
|
console.log("Session ready:", persistentAgent.session.id);
|
|
@@ -426,7 +461,7 @@ async function demonstrateSessionPersistence() {
|
|
|
426
461
|
|
|
427
462
|
// Copy routes to the restored agent
|
|
428
463
|
agent.getRoutes().forEach(route => {
|
|
429
|
-
restoredAgent.createRoute(route);
|
|
464
|
+
restoredAgent.createRoute(route.toOptions());
|
|
430
465
|
});
|
|
431
466
|
|
|
432
467
|
console.log("Session automatically restored:");
|
|
@@ -155,7 +155,7 @@ async function example() {
|
|
|
155
155
|
const onboardingRoute = agent.createRoute({
|
|
156
156
|
title: "Customer Onboarding",
|
|
157
157
|
description: "Collect customer information",
|
|
158
|
-
|
|
158
|
+
when: [
|
|
159
159
|
"User is a new customer",
|
|
160
160
|
"User needs to set up their account",
|
|
161
161
|
],
|
|
@@ -171,19 +171,19 @@ async function example() {
|
|
|
171
171
|
id: "ask_name",
|
|
172
172
|
prompt: "Ask for full name",
|
|
173
173
|
collect: ["fullName"],
|
|
174
|
-
skipIf: (
|
|
174
|
+
skipIf: (ctx) => !!ctx.data?.fullName,
|
|
175
175
|
})
|
|
176
176
|
.nextStep({
|
|
177
177
|
id: "ask_email",
|
|
178
178
|
prompt: "Ask for email address",
|
|
179
179
|
collect: ["email"],
|
|
180
|
-
skipIf: (
|
|
180
|
+
skipIf: (ctx) => !!ctx.data?.email,
|
|
181
181
|
})
|
|
182
182
|
.nextStep({
|
|
183
183
|
id: "ask_company",
|
|
184
184
|
prompt: "Ask for company name",
|
|
185
185
|
collect: ["companyName"],
|
|
186
|
-
skipIf: (
|
|
186
|
+
skipIf: (ctx) => !!ctx.data?.companyName,
|
|
187
187
|
})
|
|
188
188
|
.nextStep({
|
|
189
189
|
id: "ask_phone",
|
|
@@ -414,7 +414,7 @@ async function syncSessionToDatabase(
|
|
|
414
414
|
/**
|
|
415
415
|
* Mock function to simulate processing the completed onboarding data.
|
|
416
416
|
*/
|
|
417
|
-
async function processOnboarding(data
|
|
417
|
+
async function processOnboarding(data) {
|
|
418
418
|
console.log("\n🚀 Processing onboarding data...");
|
|
419
419
|
console.log(
|
|
420
420
|
` - Creating account for ${data?.fullName} at ${data?.companyName}`
|
|
@@ -453,7 +453,7 @@ async function advancedExample() {
|
|
|
453
453
|
schema: smartOnboardingSchema,
|
|
454
454
|
hooks: {
|
|
455
455
|
// Validate and enrich collected data
|
|
456
|
-
onDataUpdate: (data
|
|
456
|
+
onDataUpdate: (data, _previous: Partial<OnboardingData>) => {
|
|
457
457
|
console.log("🔄 Data collected, validating...");
|
|
458
458
|
|
|
459
459
|
// Normalize email
|
|
@@ -248,7 +248,7 @@ function createHealthcareAgent() {
|
|
|
248
248
|
const schedulingRoute = agent.createRoute({
|
|
249
249
|
title: "Schedule an Appointment",
|
|
250
250
|
description: "Helps the patient find a time for their appointment.",
|
|
251
|
-
|
|
251
|
+
when: ["The patient wants to schedule an appointment"],
|
|
252
252
|
// Route-level identity for healthcare scheduling
|
|
253
253
|
identity:
|
|
254
254
|
"You are a compassionate healthcare scheduling assistant who helps patients book appointments. Be empathetic, prioritize urgent cases, and ensure patients feel supported throughout the process.",
|
|
@@ -281,7 +281,7 @@ function createHealthcareAgent() {
|
|
|
281
281
|
const collectReason = schedulingRoute.initialStep.nextStep({
|
|
282
282
|
prompt: "Ask what the patient needs an appointment for",
|
|
283
283
|
collect: ["appointmentReason"],
|
|
284
|
-
skipIf: (
|
|
284
|
+
skipIf: (ctx) => !!ctx.data?.appointmentReason,
|
|
285
285
|
when: "Patient hasn't specified reason for appointment yet",
|
|
286
286
|
});
|
|
287
287
|
|
|
@@ -289,7 +289,7 @@ function createHealthcareAgent() {
|
|
|
289
289
|
const checkUrgency = collectReason.nextStep({
|
|
290
290
|
prompt: "Check if this is urgent and show available slots",
|
|
291
291
|
collect: ["urgency"],
|
|
292
|
-
skipIf: (
|
|
292
|
+
skipIf: (ctx) => !!ctx.data?.urgency,
|
|
293
293
|
requires: ["appointmentReason"],
|
|
294
294
|
when: "Reason provided, now assess urgency level",
|
|
295
295
|
});
|
|
@@ -307,14 +307,14 @@ function createHealthcareAgent() {
|
|
|
307
307
|
const collectPreferences = presentTimes.nextStep({
|
|
308
308
|
prompt: "Collect preferred time and date",
|
|
309
309
|
collect: ["preferredTime", "preferredDate"],
|
|
310
|
-
skipIf: (
|
|
310
|
+
skipIf: (ctx) => !!ctx.data?.preferredTime && !!ctx.data?.preferredDate,
|
|
311
311
|
});
|
|
312
312
|
|
|
313
313
|
// Step 5: Confirm details and schedule
|
|
314
314
|
const confirmDetails = collectPreferences.nextStep({
|
|
315
315
|
prompt: "Confirm the details with the patient before scheduling",
|
|
316
316
|
collect: ["appointmentType"],
|
|
317
|
-
skipIf: (
|
|
317
|
+
skipIf: (ctx) => !!ctx.data?.appointmentType,
|
|
318
318
|
requires: ["appointmentReason", "preferredTime", "preferredDate"],
|
|
319
319
|
});
|
|
320
320
|
|
|
@@ -358,7 +358,7 @@ function createHealthcareAgent() {
|
|
|
358
358
|
const labResultsRoute = agent.createRoute({
|
|
359
359
|
title: "Lab Results",
|
|
360
360
|
description: "Retrieves the patient's lab results and explains them.",
|
|
361
|
-
|
|
361
|
+
when: ["The patient wants to see their lab results"],
|
|
362
362
|
// NEW: Required fields for route completion
|
|
363
363
|
requiredFields: ["testType"],
|
|
364
364
|
// NEW: Optional fields
|
|
@@ -369,14 +369,14 @@ function createHealthcareAgent() {
|
|
|
369
369
|
const collectTestInfo = labResultsRoute.initialStep.nextStep({
|
|
370
370
|
prompt: "Ask what type of test results they want to see",
|
|
371
371
|
collect: ["testType"],
|
|
372
|
-
skipIf: (
|
|
372
|
+
skipIf: (ctx) => !!ctx.data?.testType,
|
|
373
373
|
});
|
|
374
374
|
|
|
375
375
|
// Step 2: Optional: collect test date
|
|
376
376
|
const collectTestDate = collectTestInfo.nextStep({
|
|
377
377
|
prompt: "Ask for the test date if they remember it",
|
|
378
378
|
collect: ["testDate"],
|
|
379
|
-
skipIf: (
|
|
379
|
+
skipIf: (ctx) => !!ctx.data?.testDate,
|
|
380
380
|
requires: ["testType"],
|
|
381
381
|
});
|
|
382
382
|
|
|
@@ -404,7 +404,7 @@ function createHealthcareAgent() {
|
|
|
404
404
|
const satisfactionRoute = agent.createRoute({
|
|
405
405
|
title: "Satisfaction Survey",
|
|
406
406
|
description: "Quick satisfaction survey after scheduling",
|
|
407
|
-
|
|
407
|
+
when: ["Collect patient satisfaction feedback"],
|
|
408
408
|
|
|
409
409
|
// Route-specific knowledge base for patient feedback
|
|
410
410
|
knowledgeBase: {
|
|
@@ -442,7 +442,7 @@ function createHealthcareAgent() {
|
|
|
442
442
|
prompt:
|
|
443
443
|
"Ask for overall satisfaction rating from 1 to 5 with the scheduling experience",
|
|
444
444
|
collect: ["rating"],
|
|
445
|
-
skipIf: (
|
|
445
|
+
skipIf: (ctx) => !!ctx.data?.rating,
|
|
446
446
|
});
|
|
447
447
|
|
|
448
448
|
const askComments = askRating.nextStep({
|
|
@@ -76,7 +76,7 @@ async function example() {
|
|
|
76
76
|
const userId = "user_123";
|
|
77
77
|
|
|
78
78
|
// Create adapter
|
|
79
|
-
const adapter = new OpenSearchAdapter
|
|
79
|
+
const adapter = new OpenSearchAdapter(client, {
|
|
80
80
|
indices: {
|
|
81
81
|
sessions: "agent_sessions",
|
|
82
82
|
messages: "agent_messages",
|
|
@@ -145,7 +145,7 @@ async function example() {
|
|
|
145
145
|
const complaintRoute = agent.createRoute({
|
|
146
146
|
title: "Handle Customer Complaint",
|
|
147
147
|
description: "Process and resolve customer complaints",
|
|
148
|
-
|
|
148
|
+
when: [
|
|
149
149
|
"User has a complaint",
|
|
150
150
|
"User reports an issue or problem",
|
|
151
151
|
"User is dissatisfied",
|
|
@@ -161,18 +161,18 @@ async function example() {
|
|
|
161
161
|
.nextStep({
|
|
162
162
|
prompt: "Understand the complaint",
|
|
163
163
|
collect: ["category", "severity", "description"],
|
|
164
|
-
skipIf: (
|
|
164
|
+
skipIf: (ctx) => !!ctx.data?.description,
|
|
165
165
|
})
|
|
166
166
|
.nextStep({
|
|
167
167
|
prompt: "Identify affected service",
|
|
168
168
|
collect: ["affectedService"],
|
|
169
|
-
skipIf: (
|
|
169
|
+
skipIf: (ctx) => !!ctx.data?.affectedService,
|
|
170
170
|
requires: ["description"],
|
|
171
171
|
})
|
|
172
172
|
.nextStep({
|
|
173
173
|
prompt: "Ask for desired resolution",
|
|
174
174
|
collect: ["requestedResolution"],
|
|
175
|
-
skipIf: (
|
|
175
|
+
skipIf: (ctx) => !!ctx.data?.requestedResolution,
|
|
176
176
|
requires: ["category", "description"],
|
|
177
177
|
})
|
|
178
178
|
.nextStep({
|
|
@@ -254,7 +254,7 @@ async function example() {
|
|
|
254
254
|
recoveredAgent.createRoute({
|
|
255
255
|
title: "Handle Customer Complaint",
|
|
256
256
|
description: "Process and resolve customer complaints",
|
|
257
|
-
|
|
257
|
+
when: [
|
|
258
258
|
"User has a complaint",
|
|
259
259
|
"User reports an issue or problem",
|
|
260
260
|
"User is dissatisfied",
|
|
@@ -324,7 +324,7 @@ async function analyticsExample() {
|
|
|
324
324
|
auth: { username: "admin", password: "admin" },
|
|
325
325
|
});
|
|
326
326
|
|
|
327
|
-
const adapter = new OpenSearchAdapter
|
|
327
|
+
const adapter = new OpenSearchAdapter(client, {
|
|
328
328
|
indices: {
|
|
329
329
|
sessions: "support_sessions",
|
|
330
330
|
messages: "support_messages",
|
|
@@ -396,7 +396,7 @@ async function analyticsExample() {
|
|
|
396
396
|
// NEW: Agent-level schema
|
|
397
397
|
schema: ticketSchema,
|
|
398
398
|
persistence: {
|
|
399
|
-
adapter: new OpenSearchAdapter
|
|
399
|
+
adapter: new OpenSearchAdapter(client),
|
|
400
400
|
autoSave: true,
|
|
401
401
|
},
|
|
402
402
|
});
|
|
@@ -92,7 +92,7 @@ function createBookingAgent(sessionId?: string) {
|
|
|
92
92
|
{
|
|
93
93
|
title: "Hotel Booking",
|
|
94
94
|
description: "Collect booking details and confirm reservation",
|
|
95
|
-
|
|
95
|
+
when: ["User wants to book a hotel room"],
|
|
96
96
|
// NEW: Required fields for route completion
|
|
97
97
|
requiredFields: ["customerName", "hotelName", "checkInDate", "checkOutDate", "guests"],
|
|
98
98
|
// NEW: Optional fields that enhance the experience
|
|
@@ -103,7 +103,7 @@ function createBookingAgent(sessionId?: string) {
|
|
|
103
103
|
description: "Ask for customer name",
|
|
104
104
|
prompt: "Hi! I'd be happy to help you book a hotel room. What's your name?",
|
|
105
105
|
collect: ["customerName"],
|
|
106
|
-
skipIf: (
|
|
106
|
+
skipIf: (ctx) => !!ctx.data?.customerName,
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
id: "ask_hotel",
|
|
@@ -111,7 +111,7 @@ function createBookingAgent(sessionId?: string) {
|
|
|
111
111
|
prompt: "Which hotel would you like to book?",
|
|
112
112
|
collect: ["hotelName"],
|
|
113
113
|
requires: ["customerName"],
|
|
114
|
-
skipIf: (
|
|
114
|
+
skipIf: (ctx) => !!ctx.data?.hotelName,
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
id: "ask_dates",
|
|
@@ -119,7 +119,7 @@ function createBookingAgent(sessionId?: string) {
|
|
|
119
119
|
prompt: "What are your check-in and check-out dates?",
|
|
120
120
|
collect: ["checkInDate", "checkOutDate"],
|
|
121
121
|
requires: ["customerName", "hotelName"],
|
|
122
|
-
skipIf: (
|
|
122
|
+
skipIf: (ctx) => !!ctx.data?.checkInDate && !!ctx.data.checkOutDate,
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
id: "ask_guests",
|
|
@@ -127,7 +127,7 @@ function createBookingAgent(sessionId?: string) {
|
|
|
127
127
|
prompt: "How many guests will be staying?",
|
|
128
128
|
collect: ["guests"],
|
|
129
129
|
requires: ["customerName", "hotelName", "checkInDate", "checkOutDate"],
|
|
130
|
-
skipIf: (
|
|
130
|
+
skipIf: (ctx) => ctx.data?.guests !== undefined,
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
id: "ask_room_type",
|
|
@@ -135,7 +135,7 @@ function createBookingAgent(sessionId?: string) {
|
|
|
135
135
|
prompt: "What type of room would you prefer? (standard, deluxe, or suite)",
|
|
136
136
|
collect: ["roomType"],
|
|
137
137
|
requires: ["customerName", "hotelName", "checkInDate", "checkOutDate", "guests"],
|
|
138
|
-
skipIf: (
|
|
138
|
+
skipIf: (ctx) => !!ctx.data?.roomType,
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
141
|
id: "ask_special_requests",
|
|
@@ -143,7 +143,7 @@ function createBookingAgent(sessionId?: string) {
|
|
|
143
143
|
prompt: "Do you have any special requests for your stay?",
|
|
144
144
|
collect: ["specialRequests"],
|
|
145
145
|
requires: ["customerName", "hotelName", "checkInDate", "checkOutDate", "guests"],
|
|
146
|
-
skipIf: (
|
|
146
|
+
skipIf: (ctx) => ctx.data?.specialRequests !== undefined,
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
id: "confirm_booking",
|
|
@@ -168,7 +168,7 @@ interface ChatResponse {
|
|
|
168
168
|
message: string;
|
|
169
169
|
sessionId: string;
|
|
170
170
|
isComplete: boolean;
|
|
171
|
-
data
|
|
171
|
+
data?;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
// Simulate POST /chat endpoint
|
|
@@ -97,7 +97,7 @@ async function example() {
|
|
|
97
97
|
userName: "Alice",
|
|
98
98
|
},
|
|
99
99
|
persistence: {
|
|
100
|
-
adapter: new PrismaAdapter
|
|
100
|
+
adapter: new PrismaAdapter({ prisma }),
|
|
101
101
|
autoSave: true, // Auto-saves session after each response
|
|
102
102
|
},
|
|
103
103
|
schema: {
|
|
@@ -139,7 +139,7 @@ async function example() {
|
|
|
139
139
|
const flightRoute = agent.createRoute({
|
|
140
140
|
title: "Book a Flight",
|
|
141
141
|
description: "Help user book a flight ticket",
|
|
142
|
-
|
|
142
|
+
when: [
|
|
143
143
|
"User wants to book a flight",
|
|
144
144
|
"User mentions travel, flying, or booking tickets",
|
|
145
145
|
],
|
|
@@ -150,14 +150,14 @@ async function example() {
|
|
|
150
150
|
id: "ask_destination", // Custom step ID for easier tracking
|
|
151
151
|
prompt: "Ask where they want to fly",
|
|
152
152
|
collect: ["destination"],
|
|
153
|
-
skipIf: (
|
|
153
|
+
skipIf: (ctx) => !!ctx.data?.destination,
|
|
154
154
|
});
|
|
155
155
|
|
|
156
156
|
const askDates = askDestination.nextStep({
|
|
157
157
|
id: "ask_dates", // Custom step ID
|
|
158
158
|
prompt: "Ask about travel dates",
|
|
159
159
|
collect: ["departureDate", "returnDate"],
|
|
160
|
-
skipIf: (
|
|
160
|
+
skipIf: (ctx) => !!ctx.data?.departureDate,
|
|
161
161
|
requires: ["destination"],
|
|
162
162
|
});
|
|
163
163
|
|
|
@@ -165,7 +165,7 @@ async function example() {
|
|
|
165
165
|
id: "ask_passengers", // Custom step ID
|
|
166
166
|
prompt: "Ask how many passengers",
|
|
167
167
|
collect: ["passengers"],
|
|
168
|
-
skipIf: (
|
|
168
|
+
skipIf: (ctx) => !!ctx.data?.passengers,
|
|
169
169
|
requires: ["destination", "departureDate"],
|
|
170
170
|
});
|
|
171
171
|
|
|
@@ -173,7 +173,7 @@ async function example() {
|
|
|
173
173
|
id: "ask_cabin_class", // Custom step ID
|
|
174
174
|
prompt: "Ask about cabin class preference",
|
|
175
175
|
collect: ["cabinClass"],
|
|
176
|
-
skipIf: (
|
|
176
|
+
skipIf: (ctx) => !!ctx.data?.cabinClass,
|
|
177
177
|
requires: ["destination", "departureDate", "passengers"],
|
|
178
178
|
});
|
|
179
179
|
|
|
@@ -275,7 +275,7 @@ async function example() {
|
|
|
275
275
|
required: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
276
276
|
},
|
|
277
277
|
persistence: {
|
|
278
|
-
adapter: new PrismaAdapter
|
|
278
|
+
adapter: new PrismaAdapter({ prisma }),
|
|
279
279
|
},
|
|
280
280
|
sessionId, // Same sessionId - will load existing session
|
|
281
281
|
});
|
|
@@ -338,8 +338,8 @@ async function advancedExample() {
|
|
|
338
338
|
// Lifecycle hooks for data enrichment
|
|
339
339
|
hooks: {
|
|
340
340
|
onDataUpdate: async (
|
|
341
|
-
data
|
|
342
|
-
previous
|
|
341
|
+
data,
|
|
342
|
+
previous
|
|
343
343
|
) => {
|
|
344
344
|
console.log("🔄 Data updated:", { data, previous });
|
|
345
345
|
|
|
@@ -365,7 +365,7 @@ async function advancedExample() {
|
|
|
365
365
|
},
|
|
366
366
|
},
|
|
367
367
|
persistence: {
|
|
368
|
-
adapter: new PrismaAdapter
|
|
368
|
+
adapter: new PrismaAdapter({ prisma }),
|
|
369
369
|
autoSave: true,
|
|
370
370
|
},
|
|
371
371
|
sessionId,
|
|
@@ -391,12 +391,12 @@ async function advancedExample() {
|
|
|
391
391
|
.nextStep({
|
|
392
392
|
prompt: "Welcome and ask for name",
|
|
393
393
|
collect: ["fullName"],
|
|
394
|
-
skipIf: (
|
|
394
|
+
skipIf: (ctx) => !!ctx.data?.fullName,
|
|
395
395
|
})
|
|
396
396
|
.nextStep({
|
|
397
397
|
prompt: "Ask for email",
|
|
398
398
|
collect: ["email"],
|
|
399
|
-
skipIf: (
|
|
399
|
+
skipIf: (ctx) => !!ctx.data?.email,
|
|
400
400
|
})
|
|
401
401
|
.nextStep({
|
|
402
402
|
prompt: "Ask for phone number (optional)",
|
|
@@ -405,7 +405,7 @@ async function advancedExample() {
|
|
|
405
405
|
.nextStep({
|
|
406
406
|
prompt: "Ask for country",
|
|
407
407
|
collect: ["country"],
|
|
408
|
-
skipIf: (
|
|
408
|
+
skipIf: (ctx) => !!ctx.data?.country,
|
|
409
409
|
})
|
|
410
410
|
.nextStep({
|
|
411
411
|
prompt: "Confirm and complete onboarding",
|
|
@@ -536,7 +536,7 @@ async function serverEndpointExample() {
|
|
|
536
536
|
* Mock function to send a flight confirmation email.
|
|
537
537
|
*/
|
|
538
538
|
async function sendFlightConfirmation(
|
|
539
|
-
data
|
|
539
|
+
data
|
|
540
540
|
) {
|
|
541
541
|
console.log("\n" + "=".repeat(60));
|
|
542
542
|
console.log("🚀 Sending Flight Confirmation...");
|
|
@@ -552,7 +552,7 @@ async function sendFlightConfirmation(
|
|
|
552
552
|
/**
|
|
553
553
|
* Mock function to send an onboarding email.
|
|
554
554
|
*/
|
|
555
|
-
async function sendOnboardingEmail(data
|
|
555
|
+
async function sendOnboardingEmail(data) {
|
|
556
556
|
console.log("\n" + "=".repeat(60));
|
|
557
557
|
console.log("🚀 Sending Onboarding Email...");
|
|
558
558
|
console.log("=".repeat(60));
|