@falai/agent 0.9.2 → 1.0.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 +281 -42
- 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 +16 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +63 -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 +850 -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 +217 -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 +211 -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 +752 -74
- 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 +15 -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 +16 -1
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +64 -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 +845 -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 +213 -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 +207 -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 +752 -74
- 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 +15 -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/README.md +1 -0
- package/docs/api/README.md +237 -12
- package/docs/api/overview.md +206 -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 +156 -5
- package/docs/core/agent/rules-and-prohibitions.md +113 -0
- 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 +27 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +373 -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 +78 -2
- package/src/core/BatchExecutor.ts +1166 -0
- package/src/core/BatchPromptBuilder.ts +293 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +168 -29
- package/src/core/ResponseModal.ts +954 -74
- 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 +15 -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
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Demonstrates how to use rules and prohibitions to control agent behavior
|
|
6
6
|
* in different conversation routes (e.g., WhatsApp bot with different styles)
|
|
7
|
+
*
|
|
8
|
+
* NEW: Enhanced with complex ConditionTemplate patterns:
|
|
9
|
+
* - Mixed conditions: ["AI context", (ctx) => keyword_detection]
|
|
10
|
+
* - Route skipIf: Dynamic route exclusion based on message analysis
|
|
11
|
+
* - Function-only conditions: (ctx) => sophisticated_routing_logic
|
|
12
|
+
* - String-only conditions: "simple AI context for general chat"
|
|
13
|
+
* - Emergency routing with never-skip logic (skipIf: false)
|
|
14
|
+
* - Performance patterns for real-time condition evaluation
|
|
7
15
|
*/
|
|
8
16
|
|
|
9
17
|
import { Agent, type History, END_ROUTE, OpenAIProvider } from "../../src";
|
|
@@ -112,7 +120,23 @@ const agent = new Agent<unknown, ServiceData>({
|
|
|
112
120
|
agent.createRoute({
|
|
113
121
|
title: "Quick Support",
|
|
114
122
|
description: "Fast answers for common questions",
|
|
115
|
-
|
|
123
|
+
// Mixed condition: AI context + programmatic validation
|
|
124
|
+
when: [
|
|
125
|
+
"User has a simple question",
|
|
126
|
+
"User wants quick help",
|
|
127
|
+
(ctx) => {
|
|
128
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
129
|
+
return message.includes('quick') || message.includes('simple') || message.length < 50;
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
// Skip if user seems to need detailed help
|
|
133
|
+
skipIf: [
|
|
134
|
+
"user needs detailed or complex assistance",
|
|
135
|
+
(ctx) => {
|
|
136
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
137
|
+
return message.includes('detailed') || message.includes('complex') || message.length > 100;
|
|
138
|
+
}
|
|
139
|
+
],
|
|
116
140
|
rules: [
|
|
117
141
|
"Keep messages extremely short (1-2 lines maximum)",
|
|
118
142
|
"Use bullet points for lists",
|
|
@@ -130,9 +154,21 @@ agent.createRoute({
|
|
|
130
154
|
agent.createRoute({
|
|
131
155
|
title: "Sales Consultation",
|
|
132
156
|
description: "Help customer discover needs and present solutions",
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
157
|
+
// Function-only condition for programmatic sales detection
|
|
158
|
+
when: (ctx) => {
|
|
159
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
160
|
+
return message.includes('buy') || message.includes('purchase') ||
|
|
161
|
+
message.includes('price') || message.includes('cost') ||
|
|
162
|
+
message.includes('product') || message.includes('interested');
|
|
163
|
+
},
|
|
164
|
+
// Skip if user is having technical issues
|
|
165
|
+
skipIf: [
|
|
166
|
+
"user has technical problems that need solving first",
|
|
167
|
+
(ctx) => {
|
|
168
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
169
|
+
return message.includes('broken') || message.includes('error') ||
|
|
170
|
+
message.includes('not working') || message.includes('problem');
|
|
171
|
+
}
|
|
136
172
|
],
|
|
137
173
|
rules: [
|
|
138
174
|
"Ask open-ended questions to discover needs",
|
|
@@ -169,7 +205,22 @@ agent.createRoute({
|
|
|
169
205
|
agent.createRoute({
|
|
170
206
|
title: "Technical Support",
|
|
171
207
|
description: "Help with technical issues and troubleshooting",
|
|
172
|
-
|
|
208
|
+
// Mixed condition: AI context + technical keyword detection
|
|
209
|
+
when: [
|
|
210
|
+
"User has technical problem",
|
|
211
|
+
"User needs step-by-step help",
|
|
212
|
+
(ctx) => {
|
|
213
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
214
|
+
return message.includes('help') || message.includes('problem') ||
|
|
215
|
+
message.includes('error') || message.includes('not working') ||
|
|
216
|
+
message.includes('broken') || message.includes('fix');
|
|
217
|
+
}
|
|
218
|
+
],
|
|
219
|
+
// Skip if user is just browsing or asking about sales
|
|
220
|
+
skipIf: (ctx) => {
|
|
221
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
222
|
+
return message.includes('price') || message.includes('buy') || message.includes('cost');
|
|
223
|
+
},
|
|
173
224
|
rules: [
|
|
174
225
|
"Provide clear, numbered steps",
|
|
175
226
|
"Use simple language for technical concepts",
|
|
@@ -209,7 +260,19 @@ techSupportRoute.initialStep
|
|
|
209
260
|
agent.createRoute({
|
|
210
261
|
title: "Emergency Support",
|
|
211
262
|
description: "Handle urgent customer issues",
|
|
212
|
-
|
|
263
|
+
// Mixed condition: AI context + urgency detection
|
|
264
|
+
when: [
|
|
265
|
+
"Customer is frustrated",
|
|
266
|
+
"Urgent issue",
|
|
267
|
+
"Service down",
|
|
268
|
+
(ctx) => {
|
|
269
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
270
|
+
const urgentWords = ['urgent', 'emergency', 'critical', 'down', 'broken', 'frustrated', 'angry'];
|
|
271
|
+
return urgentWords.some(word => message.includes(word)) || message.includes('!!!');
|
|
272
|
+
}
|
|
273
|
+
],
|
|
274
|
+
// Never skip emergency support
|
|
275
|
+
skipIf: ()=>false,
|
|
213
276
|
rules: [
|
|
214
277
|
"Acknowledge the urgency immediately",
|
|
215
278
|
"Express empathy and understanding",
|
|
@@ -229,7 +292,14 @@ agent.createRoute({
|
|
|
229
292
|
agent.createRoute({
|
|
230
293
|
title: "General Chat",
|
|
231
294
|
description: "Casual conversation and general questions",
|
|
232
|
-
|
|
295
|
+
// String-only condition for AI context
|
|
296
|
+
when: "User is just chatting, greeting, or asking general questions",
|
|
297
|
+
// Skip if user has specific needs that other routes can handle
|
|
298
|
+
skipIf: (ctx) => {
|
|
299
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
300
|
+
return message.includes('help') || message.includes('buy') ||
|
|
301
|
+
message.includes('problem') || message.includes('urgent');
|
|
302
|
+
},
|
|
233
303
|
rules: [
|
|
234
304
|
"Be friendly and conversational",
|
|
235
305
|
"Use emojis naturally 😊",
|
|
@@ -262,7 +332,7 @@ async function demonstrateRulesAndProhibitions() {
|
|
|
262
332
|
agent.createRoute({
|
|
263
333
|
title: "Quick Support",
|
|
264
334
|
description: "Fast answers for common questions",
|
|
265
|
-
|
|
335
|
+
when: ["User has a simple question", "User wants quick help"],
|
|
266
336
|
rules: [
|
|
267
337
|
"Keep messages extremely short (1-2 lines maximum)",
|
|
268
338
|
"Use bullet points for lists",
|
|
@@ -280,7 +350,7 @@ async function demonstrateRulesAndProhibitions() {
|
|
|
280
350
|
agent.createRoute({
|
|
281
351
|
title: "Sales Consultation",
|
|
282
352
|
description: "Help customer discover needs and present solutions",
|
|
283
|
-
|
|
353
|
+
when: [
|
|
284
354
|
"User is interested in buying",
|
|
285
355
|
"User wants product information",
|
|
286
356
|
],
|
|
@@ -303,7 +373,7 @@ async function demonstrateRulesAndProhibitions() {
|
|
|
303
373
|
agent.createRoute({
|
|
304
374
|
title: "Technical Support",
|
|
305
375
|
description: "Help with technical issues and troubleshooting",
|
|
306
|
-
|
|
376
|
+
when: ["User has technical problem", "User needs step-by-step help"],
|
|
307
377
|
rules: [
|
|
308
378
|
"Provide clear, numbered steps",
|
|
309
379
|
"Use simple language for technical concepts",
|
|
@@ -343,7 +413,7 @@ async function demonstrateRulesAndProhibitions() {
|
|
|
343
413
|
agent.createRoute({
|
|
344
414
|
title: "Emergency Support",
|
|
345
415
|
description: "Handle urgent customer issues",
|
|
346
|
-
|
|
416
|
+
when: ["Customer is frustrated", "Urgent issue", "Service down"],
|
|
347
417
|
rules: [
|
|
348
418
|
"Acknowledge the urgency immediately",
|
|
349
419
|
"Express empathy and understanding",
|
|
@@ -363,7 +433,7 @@ async function demonstrateRulesAndProhibitions() {
|
|
|
363
433
|
agent.createRoute({
|
|
364
434
|
title: "General Chat",
|
|
365
435
|
description: "Casual conversation and general questions",
|
|
366
|
-
|
|
436
|
+
when: ["User is just chatting", "Greeting", "General question"],
|
|
367
437
|
rules: [
|
|
368
438
|
"Be friendly and conversational",
|
|
369
439
|
"Use emojis naturally 😊",
|
|
@@ -361,7 +361,7 @@ async function modernStreamingWithRoutes() {
|
|
|
361
361
|
const supportRoute = agent.createRoute({
|
|
362
362
|
title: "Product Support",
|
|
363
363
|
description: "Help users with product questions",
|
|
364
|
-
|
|
364
|
+
when: ["User asks about product features or issues"],
|
|
365
365
|
});
|
|
366
366
|
|
|
367
367
|
supportRoute.initialStep.nextStep({
|
|
@@ -372,7 +372,7 @@ async function modernStreamingWithRoutes() {
|
|
|
372
372
|
agent.createRoute({
|
|
373
373
|
title: "Collect Feedback",
|
|
374
374
|
description: "Collect user feedback on their support experience",
|
|
375
|
-
|
|
375
|
+
when: ["User wants to provide feedback"],
|
|
376
376
|
// NEW: Required fields for route completion
|
|
377
377
|
requiredFields: ["rating"],
|
|
378
378
|
// NEW: Optional fields
|
|
@@ -135,7 +135,7 @@ For example: "Research the impact of artificial intelligence on healthcare, comp
|
|
|
135
135
|
const askTopic = researchRoute.initialStep.nextStep({
|
|
136
136
|
prompt: "What topic would you like me to research?",
|
|
137
137
|
collect: ["topic"],
|
|
138
|
-
skipIf: (
|
|
138
|
+
skipIf: (ctx) => !!ctx.data?.topic,
|
|
139
139
|
});
|
|
140
140
|
|
|
141
141
|
const askDepth = askTopic.nextStep({
|
|
@@ -143,14 +143,14 @@ const askDepth = askTopic.nextStep({
|
|
|
143
143
|
"How deep should I go with this research? (overview, detailed, or comprehensive)",
|
|
144
144
|
collect: ["depth"],
|
|
145
145
|
requires: ["topic"],
|
|
146
|
-
skipIf: (
|
|
146
|
+
skipIf: (ctx) => !!ctx.data?.depth,
|
|
147
147
|
});
|
|
148
148
|
|
|
149
149
|
const askSources = askDepth.nextStep({
|
|
150
150
|
prompt: "How many sources should I analyze? (1-20, default is 5)",
|
|
151
151
|
collect: ["sources"],
|
|
152
152
|
requires: ["topic"],
|
|
153
|
-
skipIf: (
|
|
153
|
+
skipIf: (ctx) => ctx.data?.sources !== undefined,
|
|
154
154
|
});
|
|
155
155
|
|
|
156
156
|
const askFormat = askSources.nextStep({
|
|
@@ -158,7 +158,7 @@ const askFormat = askSources.nextStep({
|
|
|
158
158
|
"What format would you prefer for the results? (summary, bullet_points, or structured)",
|
|
159
159
|
collect: ["format"],
|
|
160
160
|
requires: ["topic"],
|
|
161
|
-
skipIf: (
|
|
161
|
+
skipIf: (ctx) => !!ctx.data?.format,
|
|
162
162
|
});
|
|
163
163
|
|
|
164
164
|
askFormat.nextStep({
|
|
@@ -131,7 +131,7 @@ async function main() {
|
|
|
131
131
|
const weatherRoute = agent.createRoute({
|
|
132
132
|
title: "Check Weather",
|
|
133
133
|
description: "Help user check weather for a location",
|
|
134
|
-
|
|
134
|
+
when: ["User wants to know the weather"],
|
|
135
135
|
});
|
|
136
136
|
|
|
137
137
|
// Step 1: Collect location
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Function-Only Conditions Example
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates using function-only conditions for programmatic routing.
|
|
5
|
+
* Function conditions are perfect when you need precise, deterministic routing logic
|
|
6
|
+
* based on data, state, or complex business rules.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - Function conditions provide programmatic evaluation only
|
|
10
|
+
* - Return boolean values for routing decisions
|
|
11
|
+
* - Perfect for data-driven routing scenarios
|
|
12
|
+
* - Ideal for complex business logic and state-based routing
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
Agent,
|
|
17
|
+
GeminiProvider,
|
|
18
|
+
type Guideline,
|
|
19
|
+
} from "../../src/index";
|
|
20
|
+
|
|
21
|
+
// Context for an e-commerce system
|
|
22
|
+
interface EcommerceContext {
|
|
23
|
+
userId: string;
|
|
24
|
+
userTier: "bronze" | "silver" | "gold" | "platinum";
|
|
25
|
+
accountBalance: number;
|
|
26
|
+
region: string;
|
|
27
|
+
isBusinessAccount: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Order data schema
|
|
31
|
+
interface OrderData {
|
|
32
|
+
productId?: string;
|
|
33
|
+
quantity?: number;
|
|
34
|
+
totalAmount?: number;
|
|
35
|
+
shippingMethod?: "standard" | "express" | "overnight";
|
|
36
|
+
paymentMethod?: "credit" | "debit" | "paypal" | "crypto";
|
|
37
|
+
discountApplied?: boolean;
|
|
38
|
+
orderComplete?: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const orderSchema = {
|
|
42
|
+
type: "object",
|
|
43
|
+
properties: {
|
|
44
|
+
productId: { type: "string" },
|
|
45
|
+
quantity: { type: "number", minimum: 1 },
|
|
46
|
+
totalAmount: { type: "number", minimum: 0 },
|
|
47
|
+
shippingMethod: { type: "string", enum: ["standard", "express", "overnight"] },
|
|
48
|
+
paymentMethod: { type: "string", enum: ["credit", "debit", "paypal", "crypto"] },
|
|
49
|
+
discountApplied: { type: "boolean" },
|
|
50
|
+
orderComplete: { type: "boolean" },
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// Create agent with function-only condition examples
|
|
55
|
+
const agent = new Agent<EcommerceContext, OrderData>({
|
|
56
|
+
name: "EcommerceBot",
|
|
57
|
+
description: "An e-commerce bot that uses programmatic logic for routing decisions",
|
|
58
|
+
provider: new GeminiProvider({
|
|
59
|
+
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
60
|
+
model: "models/gemini-2.5-flash",
|
|
61
|
+
}),
|
|
62
|
+
context: {
|
|
63
|
+
userId: "user_12345",
|
|
64
|
+
userTier: "gold",
|
|
65
|
+
accountBalance: 1500.00,
|
|
66
|
+
region: "US",
|
|
67
|
+
isBusinessAccount: false,
|
|
68
|
+
},
|
|
69
|
+
schema: orderSchema,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Guidelines with function-only conditions for programmatic logic
|
|
73
|
+
const guidelines: Guideline<EcommerceContext>[] = [
|
|
74
|
+
{
|
|
75
|
+
// Function-only condition - check user tier for premium features
|
|
76
|
+
condition: (ctx) => ctx.context?.userTier === "platinum",
|
|
77
|
+
action: "Offer premium features like white-glove service, priority support, and exclusive products",
|
|
78
|
+
tags: ["premium", "vip"],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
// Function-only condition - check account balance for payment options
|
|
82
|
+
condition: (ctx) => (ctx.context?.accountBalance || 0) < 100,
|
|
83
|
+
action: "Suggest payment plans or financing options for large purchases",
|
|
84
|
+
tags: ["financing", "payment"],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
// Function-only condition - check business account status
|
|
88
|
+
condition: (ctx) => ctx.context?.isBusinessAccount === true,
|
|
89
|
+
action: "Offer bulk pricing, invoicing options, and business-specific features",
|
|
90
|
+
tags: ["business", "bulk"],
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
// Add guidelines to agent
|
|
95
|
+
guidelines.forEach(guideline => agent.createGuideline(guideline));
|
|
96
|
+
|
|
97
|
+
// Route 1: VIP Customer Route - Function-only condition
|
|
98
|
+
agent.createRoute({
|
|
99
|
+
title: "VIP Customer Service",
|
|
100
|
+
description: "Special handling for premium customers",
|
|
101
|
+
// Function-only condition - programmatic tier check
|
|
102
|
+
when: (ctx) => ctx.context?.userTier === "platinum" || ctx.context?.userTier === "gold",
|
|
103
|
+
// Skip if customer has active issues
|
|
104
|
+
skipIf: (ctx) => (ctx.data?.totalAmount || 0) > (ctx.context?.accountBalance || 0),
|
|
105
|
+
steps: [
|
|
106
|
+
{
|
|
107
|
+
id: "vip_greeting",
|
|
108
|
+
description: "Provide VIP greeting and priority service",
|
|
109
|
+
prompt: "Welcome back! As a valued VIP customer, you have access to our premium services. How can I assist you today?",
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Route 2: Large Order Processing - Function-only condition
|
|
115
|
+
agent.createRoute({
|
|
116
|
+
title: "Large Order Processing",
|
|
117
|
+
description: "Handle high-value orders with special processing",
|
|
118
|
+
// Function-only condition - check order value
|
|
119
|
+
when: (ctx) => (ctx.data?.totalAmount || 0) > 1000,
|
|
120
|
+
// Skip if insufficient balance
|
|
121
|
+
skipIf: (ctx) => (ctx.data?.totalAmount || 0) > (ctx.context?.accountBalance || 0) * 2,
|
|
122
|
+
requiredFields: ["productId", "quantity", "totalAmount"],
|
|
123
|
+
optionalFields: ["shippingMethod", "paymentMethod"],
|
|
124
|
+
steps: [
|
|
125
|
+
{
|
|
126
|
+
id: "verify_large_order",
|
|
127
|
+
description: "Verify large order details",
|
|
128
|
+
prompt: "I see you're placing a large order. Let me verify the details and check for any available discounts.",
|
|
129
|
+
collect: ["productId", "quantity", "totalAmount"],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "apply_bulk_discount",
|
|
133
|
+
description: "Apply bulk discounts if eligible",
|
|
134
|
+
prompt: "Based on your order size, you're eligible for bulk pricing. Let me apply the best available discount.",
|
|
135
|
+
requires: ["totalAmount"],
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// Route 3: Business Account Route - Function-only condition
|
|
141
|
+
agent.createRoute({
|
|
142
|
+
title: "Business Account Services",
|
|
143
|
+
description: "Specialized services for business customers",
|
|
144
|
+
// Function-only condition - check business account status
|
|
145
|
+
when: (ctx) => ctx.context?.isBusinessAccount === true,
|
|
146
|
+
// Skip if personal shopping (small quantities)
|
|
147
|
+
skipIf: (ctx) => (ctx.data?.quantity || 0) < 10,
|
|
148
|
+
steps: [
|
|
149
|
+
{
|
|
150
|
+
id: "business_options",
|
|
151
|
+
description: "Present business-specific options",
|
|
152
|
+
prompt: "I see you're shopping with a business account. Would you like to see bulk pricing, invoicing options, or set up recurring orders?",
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Route 4: Regional Compliance Route - Function-only condition
|
|
158
|
+
agent.createRoute({
|
|
159
|
+
title: "Regional Compliance",
|
|
160
|
+
description: "Handle region-specific requirements and restrictions",
|
|
161
|
+
// Function-only condition - check region for compliance
|
|
162
|
+
when: (ctx) => ctx.context?.region === "EU" || ctx.context?.region === "CA",
|
|
163
|
+
// Skip if already compliant
|
|
164
|
+
skipIf: (ctx) => ctx.data?.orderComplete === true,
|
|
165
|
+
steps: [
|
|
166
|
+
{
|
|
167
|
+
id: "compliance_check",
|
|
168
|
+
description: "Verify regional compliance requirements",
|
|
169
|
+
prompt: "I need to verify some regional compliance requirements for your order. This will just take a moment.",
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// Route 5: Payment Method Route - Function-only condition
|
|
175
|
+
agent.createRoute({
|
|
176
|
+
title: "Payment Processing",
|
|
177
|
+
description: "Handle payment method selection and processing",
|
|
178
|
+
// Function-only condition - check if payment method is needed
|
|
179
|
+
when: (ctx) => !ctx.data?.paymentMethod && (ctx.data?.totalAmount || 0) > 0,
|
|
180
|
+
// Skip if order is already complete
|
|
181
|
+
skipIf: (ctx) => ctx.data?.orderComplete === true,
|
|
182
|
+
requiredFields: ["paymentMethod"],
|
|
183
|
+
steps: [
|
|
184
|
+
{
|
|
185
|
+
id: "select_payment_method",
|
|
186
|
+
description: "Help customer select payment method",
|
|
187
|
+
prompt: "What payment method would you like to use for this order?",
|
|
188
|
+
collect: ["paymentMethod"],
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "process_payment",
|
|
192
|
+
description: "Process the payment",
|
|
193
|
+
prompt: "Processing your payment now. Please wait a moment...",
|
|
194
|
+
requires: ["paymentMethod", "totalAmount"],
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// Route 6: Shipping Options Route - Function-only condition
|
|
200
|
+
agent.createRoute({
|
|
201
|
+
title: "Shipping Selection",
|
|
202
|
+
description: "Handle shipping method selection based on customer tier and order value",
|
|
203
|
+
// Function-only condition - check if shipping is needed
|
|
204
|
+
when: (ctx) => Boolean(!ctx.data?.shippingMethod && ctx.data?.productId),
|
|
205
|
+
// Skip if digital product (no shipping needed)
|
|
206
|
+
skipIf: (ctx) => Boolean(ctx.data?.productId?.startsWith("digital_")),
|
|
207
|
+
optionalFields: ["shippingMethod"],
|
|
208
|
+
steps: [
|
|
209
|
+
{
|
|
210
|
+
id: "shipping_options",
|
|
211
|
+
description: "Present shipping options based on customer tier",
|
|
212
|
+
prompt: "Let me show you the available shipping options for your order.",
|
|
213
|
+
collect: ["shippingMethod"],
|
|
214
|
+
// Function-only when condition for step
|
|
215
|
+
when: (ctx) => {
|
|
216
|
+
// VIP customers get free express shipping
|
|
217
|
+
if (ctx.context?.userTier === "platinum" || ctx.context?.userTier === "gold") {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
// Regular customers need to choose
|
|
221
|
+
return (ctx.data?.totalAmount || 0) > 50;
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
// Route 7: Order Completion Route - Function-only condition
|
|
228
|
+
agent.createRoute({
|
|
229
|
+
title: "Order Completion",
|
|
230
|
+
description: "Finalize and complete the order",
|
|
231
|
+
// Function-only condition - check if order is ready to complete
|
|
232
|
+
when: (ctx) => {
|
|
233
|
+
return !!(ctx.data?.productId &&
|
|
234
|
+
ctx.data?.quantity &&
|
|
235
|
+
ctx.data?.totalAmount &&
|
|
236
|
+
ctx.data?.paymentMethod &&
|
|
237
|
+
!ctx.data?.orderComplete);
|
|
238
|
+
},
|
|
239
|
+
// Never skip order completion
|
|
240
|
+
skipIf: ()=>false,
|
|
241
|
+
steps: [
|
|
242
|
+
{
|
|
243
|
+
id: "finalize_order",
|
|
244
|
+
description: "Complete the order",
|
|
245
|
+
prompt: "Perfect! Let me finalize your order now.",
|
|
246
|
+
requires: ["productId", "quantity", "totalAmount", "paymentMethod"],
|
|
247
|
+
},
|
|
248
|
+
],
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// Demonstration function
|
|
252
|
+
async function demonstrateFunctionOnlyConditions() {
|
|
253
|
+
console.log("=== Function-Only Conditions Demo ===\n");
|
|
254
|
+
console.log("This demo shows how function conditions enable precise, programmatic routing decisions.\n");
|
|
255
|
+
|
|
256
|
+
const testScenarios = [
|
|
257
|
+
{
|
|
258
|
+
name: "VIP Customer",
|
|
259
|
+
context: { userTier: "platinum" as const, accountBalance: 5000, region: "US", isBusinessAccount: false },
|
|
260
|
+
message: "I'd like to place an order",
|
|
261
|
+
expectedRoute: "VIP Customer Service"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: "Large Order",
|
|
265
|
+
context: { userTier: "silver" as const, accountBalance: 2000, region: "US", isBusinessAccount: false },
|
|
266
|
+
data: { totalAmount: 1500 },
|
|
267
|
+
message: "I want to buy this expensive item",
|
|
268
|
+
expectedRoute: "Large Order Processing"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: "Business Account",
|
|
272
|
+
context: { userTier: "bronze" as const, accountBalance: 1000, region: "US", isBusinessAccount: true },
|
|
273
|
+
message: "I need to place a bulk order for my company",
|
|
274
|
+
expectedRoute: "Business Account Services"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
name: "EU Customer",
|
|
278
|
+
context: { userTier: "silver" as const, accountBalance: 800, region: "EU", isBusinessAccount: false },
|
|
279
|
+
message: "I want to place an order",
|
|
280
|
+
expectedRoute: "Regional Compliance"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: "Payment Needed",
|
|
284
|
+
context: { userTier: "bronze" as const, accountBalance: 500, region: "US", isBusinessAccount: false },
|
|
285
|
+
data: { productId: "prod_123", quantity: 2, totalAmount: 200 },
|
|
286
|
+
message: "How do I pay for this?",
|
|
287
|
+
expectedRoute: "Payment Processing"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
name: "Shipping Selection",
|
|
291
|
+
context: { userTier: "gold" as const, accountBalance: 1200, region: "US", isBusinessAccount: false },
|
|
292
|
+
data: { productId: "prod_456", quantity: 1, totalAmount: 150, paymentMethod: "credit" as const },
|
|
293
|
+
message: "What shipping options do I have?",
|
|
294
|
+
expectedRoute: "Shipping Selection"
|
|
295
|
+
},
|
|
296
|
+
];
|
|
297
|
+
|
|
298
|
+
for (const scenario of testScenarios) {
|
|
299
|
+
console.log(`🔍 Testing: ${scenario.name}`);
|
|
300
|
+
console.log(`📝 Message: "${scenario.message}"`);
|
|
301
|
+
|
|
302
|
+
// Create agent with specific context for this scenario
|
|
303
|
+
const testAgent = new Agent<EcommerceContext, OrderData>({
|
|
304
|
+
name: "TestBot",
|
|
305
|
+
description: "Test bot for function conditions",
|
|
306
|
+
provider: new GeminiProvider({
|
|
307
|
+
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
308
|
+
model: "models/gemini-2.5-flash",
|
|
309
|
+
}),
|
|
310
|
+
context: {
|
|
311
|
+
userId: "test_user",
|
|
312
|
+
...scenario.context,
|
|
313
|
+
},
|
|
314
|
+
schema: orderSchema,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// Copy routes from main agent
|
|
318
|
+
agent.getRoutes().forEach(route => {
|
|
319
|
+
testAgent.createRoute(route.toOptions());
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
try {
|
|
323
|
+
const response = await testAgent.respond({
|
|
324
|
+
history: [
|
|
325
|
+
{
|
|
326
|
+
role: "user",
|
|
327
|
+
content: scenario.message,
|
|
328
|
+
name: "Customer",
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
session: scenario.data ? { id: "test-scenario", data: scenario.data } : undefined,
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
console.log(`🎯 Routed to: ${response.session?.currentRoute?.title || "No route"}`);
|
|
335
|
+
console.log(`✅ Expected: ${scenario.expectedRoute}`);
|
|
336
|
+
console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
|
|
337
|
+
console.log();
|
|
338
|
+
} catch (error) {
|
|
339
|
+
console.log(`❌ Error: ${error}`);
|
|
340
|
+
console.log();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
console.log("💡 Key Benefits of Function-Only Conditions:");
|
|
345
|
+
console.log(" - Precise, deterministic routing logic");
|
|
346
|
+
console.log(" - Access to full context and data for decisions");
|
|
347
|
+
console.log(" - Complex business rules and state-based routing");
|
|
348
|
+
console.log(" - Type-safe condition evaluation");
|
|
349
|
+
console.log(" - Perfect for data-driven applications");
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Run demonstration
|
|
353
|
+
async function main() {
|
|
354
|
+
try {
|
|
355
|
+
await demonstrateFunctionOnlyConditions();
|
|
356
|
+
} catch (error) {
|
|
357
|
+
console.error("Error:", error);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
362
|
+
main().catch(console.error);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
export { agent, demonstrateFunctionOnlyConditions };
|