@falai/agent 0.9.0 → 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 +304 -72
- 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/{src → cjs}/core/Agent.d.ts +25 -6
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +121 -37
- 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 +54 -3
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +807 -121
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +10 -6
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +46 -10
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/core/Route.js +541 -0
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +360 -98
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/{src → cjs}/core/SessionManager.d.ts +9 -1
- package/dist/cjs/core/SessionManager.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/SessionManager.js +27 -5
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +170 -0
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/core/Step.js +448 -0
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.d.ts +234 -0
- package/dist/cjs/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/core/ToolManager.js +1117 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +5 -3
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +16 -3
- 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 +12 -4
- 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 +5 -3
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +8 -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 +116 -15
- 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.d.ts +130 -0
- package/dist/cjs/types/tool.d.ts.map +1 -0
- package/dist/cjs/types/tool.js +19 -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/{cjs/src/core → core}/Agent.d.ts +25 -6
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +122 -38
- 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 +54 -3
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +807 -121
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +10 -6
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +60 -25
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +46 -10
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/core/Route.js +537 -0
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +35 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +343 -81
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/SessionManager.d.ts +9 -1
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/{src/core → core}/SessionManager.js +27 -5
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/Step.d.ts +170 -0
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/core/Step.js +444 -0
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts +234 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js +1111 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +5 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +4 -1
- 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 +12 -4
- 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 +5 -3
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +2 -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 +116 -15
- 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 +130 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +16 -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/CONTRIBUTING.md +40 -0
- package/docs/README.md +12 -5
- package/docs/api/README.md +295 -56
- package/docs/api/overview.md +272 -31
- 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 +153 -6
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +261 -4
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +132 -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 +831 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/core/tools/tool-definition.md +684 -60
- package/docs/core/tools/tool-scoping.md +244 -53
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +423 -31
- 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 +107 -30
- package/examples/advanced-patterns/persistent-onboarding.ts +70 -48
- 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 +13 -9
- package/examples/ai-providers/openai-integration.ts +12 -8
- 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 +158 -98
- package/examples/core-concepts/schema-driven-extraction.ts +43 -16
- package/examples/core-concepts/session-management.ts +117 -29
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +25 -39
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +11 -11
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +6 -6
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/basic-tools.ts +293 -89
- package/examples/tools/data-enrichment-tools.ts +189 -79
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +152 -46
- 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 +1035 -137
- package/src/core/ResponsePipeline.ts +99 -65
- package/src/core/Route.ts +262 -34
- package/src/core/RoutingEngine.ts +467 -120
- package/src/core/SessionManager.ts +39 -7
- package/src/core/Step.ts +338 -32
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +27 -3
- 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 +12 -4
- package/src/types/index.ts +25 -3
- package/src/types/route.ts +136 -15
- package/src/types/template.ts +70 -2
- package/src/types/tool.ts +116 -25
- 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 +0 -343
- 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 +0 -96
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js +0 -206
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.js +0 -84
- package/dist/cjs/src/core/ToolExecutor.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 +0 -60
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js +0 -6
- 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 +0 -339
- 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.d.ts.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts +0 -96
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js +0 -202
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolExecutor.d.ts +0 -45
- package/dist/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/src/core/ToolExecutor.js +0 -80
- package/dist/src/core/ToolExecutor.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.d.ts +0 -60
- package/dist/src/types/tool.d.ts.map +0 -1
- package/dist/src/types/tool.js +0 -5
- 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/docs/core/tools/tool-execution.md +0 -815
- package/src/core/ToolExecutor.ts +0 -126
- /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/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/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/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/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,6 +8,12 @@
|
|
|
8
8
|
* 3. Session step management even for stepless conversations
|
|
9
9
|
* 4. Always-on routing with context awareness
|
|
10
10
|
* 5. Three-phase pipeline: PREPARATION → ROUTING → RESPONSE
|
|
11
|
+
* 6. NEW: Complex ConditionTemplate patterns for intelligent routing:
|
|
12
|
+
* - Mixed conditions: ["AI context", (ctx) => programmatic_check]
|
|
13
|
+
* - Route skipIf: Dynamic route exclusion based on message content
|
|
14
|
+
* - Function-only conditions: (ctx) => sophisticated_logic
|
|
15
|
+
* - String-only conditions: "simple AI context"
|
|
16
|
+
* - Fallback routing with programmatic logic
|
|
11
17
|
*/
|
|
12
18
|
|
|
13
19
|
import {
|
|
@@ -65,11 +71,11 @@ interface FeedbackData {
|
|
|
65
71
|
// ==============================================================================
|
|
66
72
|
|
|
67
73
|
// Tool: Fetch latest company news (context enrichment)
|
|
68
|
-
const fetchNewsTool: Tool<CompanyContext, UnifiedData
|
|
74
|
+
const fetchNewsTool: Tool<CompanyContext, UnifiedData> = {
|
|
69
75
|
id: "fetch_news",
|
|
70
76
|
name: "Company News Fetcher",
|
|
71
77
|
description: "Retrieve latest company news and updates",
|
|
72
|
-
handler: () => {
|
|
78
|
+
handler: (context, args) => {
|
|
73
79
|
// Simulate API call to news service
|
|
74
80
|
const news = [
|
|
75
81
|
{
|
|
@@ -87,7 +93,7 @@ const fetchNewsTool: Tool<CompanyContext, UnifiedData, [], void> = {
|
|
|
87
93
|
console.log(`[Tool] Fetched ${news.length} news articles`);
|
|
88
94
|
|
|
89
95
|
return {
|
|
90
|
-
data:
|
|
96
|
+
data: `Fetched ${news.length} latest news articles`,
|
|
91
97
|
contextUpdate: {
|
|
92
98
|
recentNews: news,
|
|
93
99
|
},
|
|
@@ -96,12 +102,12 @@ const fetchNewsTool: Tool<CompanyContext, UnifiedData, [], void> = {
|
|
|
96
102
|
};
|
|
97
103
|
|
|
98
104
|
// Tool: Search knowledge base (context enrichment)
|
|
99
|
-
const searchKnowledgeTool: Tool<CompanyContext,UnifiedData
|
|
105
|
+
const searchKnowledgeTool: Tool<CompanyContext, UnifiedData> = {
|
|
100
106
|
id: "search_knowledge",
|
|
101
107
|
name: "Knowledge Base Search",
|
|
102
108
|
description: "Search FAQs and documentation",
|
|
103
|
-
handler: (
|
|
104
|
-
const { history } =
|
|
109
|
+
handler: (toolContext, args) => {
|
|
110
|
+
const { history } = toolContext;
|
|
105
111
|
|
|
106
112
|
// Get last user message
|
|
107
113
|
const lastMessage = history
|
|
@@ -119,7 +125,7 @@ const searchKnowledgeTool: Tool<CompanyContext,UnifiedData, [], string> = {
|
|
|
119
125
|
).message.toLowerCase();
|
|
120
126
|
|
|
121
127
|
// Simple keyword matching (in real app, use vector search)
|
|
122
|
-
const relevantFaqs =
|
|
128
|
+
const relevantFaqs = toolContext.context.faqs.filter(
|
|
123
129
|
(faq) =>
|
|
124
130
|
faq.question.toLowerCase().includes(query) ||
|
|
125
131
|
faq.answer.toLowerCase().includes(query)
|
|
@@ -262,12 +268,25 @@ const agent = new Agent<CompanyContext, UnifiedData>({
|
|
|
262
268
|
agent.createRoute({
|
|
263
269
|
title: "Company Information",
|
|
264
270
|
description: "Answer general questions about Acme Corp",
|
|
265
|
-
|
|
271
|
+
// Mixed condition: AI context + programmatic validation
|
|
272
|
+
when: [
|
|
266
273
|
"User asks about the company",
|
|
267
274
|
"Questions about company history, size, location",
|
|
268
275
|
"When was the company founded",
|
|
269
276
|
"How many employees",
|
|
270
277
|
"Where is the headquarters",
|
|
278
|
+
(ctx) => {
|
|
279
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
280
|
+
return message.includes('company') || message.includes('acme') || message.includes('founded');
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
// Skip if user is asking about specific products instead
|
|
284
|
+
skipIf: [
|
|
285
|
+
"user is asking about specific products or services",
|
|
286
|
+
(ctx) => {
|
|
287
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
288
|
+
return message.includes('widget') || message.includes('gadget') || message.includes('product');
|
|
289
|
+
}
|
|
271
290
|
],
|
|
272
291
|
// Route-specific knowledge base for company information
|
|
273
292
|
knowledgeBase: {
|
|
@@ -299,12 +318,18 @@ agent.createRoute({
|
|
|
299
318
|
agent.createRoute({
|
|
300
319
|
title: "Product Information",
|
|
301
320
|
description: "Answer questions about products",
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
321
|
+
// Function-only condition for programmatic logic
|
|
322
|
+
when: (ctx) => {
|
|
323
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
324
|
+
return message.includes('product') || message.includes('widget') ||
|
|
325
|
+
message.includes('gadget') || message.includes('price') ||
|
|
326
|
+
message.includes('feature');
|
|
327
|
+
},
|
|
328
|
+
// Skip if user is asking about company policies instead
|
|
329
|
+
skipIf: (ctx) => {
|
|
330
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
331
|
+
return message.includes('policy') || message.includes('return') || message.includes('warranty');
|
|
332
|
+
},
|
|
308
333
|
// NO schema - just answering questions
|
|
309
334
|
});
|
|
310
335
|
|
|
@@ -315,11 +340,25 @@ agent.createRoute({
|
|
|
315
340
|
agent.createRoute({
|
|
316
341
|
title: "Policy Information",
|
|
317
342
|
description: "Answer questions about company policies",
|
|
318
|
-
|
|
343
|
+
// Mixed condition: AI context + programmatic check
|
|
344
|
+
when: [
|
|
319
345
|
"User asks about policies",
|
|
320
346
|
"Return policy",
|
|
321
|
-
"Shipping information",
|
|
347
|
+
"Shipping information",
|
|
322
348
|
"Warranty questions",
|
|
349
|
+
(ctx) => {
|
|
350
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
351
|
+
return message.includes('policy') || message.includes('return') ||
|
|
352
|
+
message.includes('shipping') || message.includes('warranty');
|
|
353
|
+
}
|
|
354
|
+
],
|
|
355
|
+
// Skip if user is asking about news or updates
|
|
356
|
+
skipIf: [
|
|
357
|
+
"user wants latest news or updates",
|
|
358
|
+
(ctx) => {
|
|
359
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
360
|
+
return message.includes('news') || message.includes('update') || message.includes('new');
|
|
361
|
+
}
|
|
323
362
|
],
|
|
324
363
|
// NO schema
|
|
325
364
|
});
|
|
@@ -330,12 +369,13 @@ agent.createRoute({
|
|
|
330
369
|
const newsRoute = agent.createRoute({
|
|
331
370
|
title: "Company News",
|
|
332
371
|
description: "Share latest company news and updates",
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
372
|
+
// String-only condition for AI context
|
|
373
|
+
when: "User asks about news, updates, or recent announcements",
|
|
374
|
+
// Skip if user is asking about general FAQ topics
|
|
375
|
+
skipIf: (ctx) => {
|
|
376
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
377
|
+
return message.includes('how do i') || message.includes('can i') || message.includes('is there');
|
|
378
|
+
},
|
|
339
379
|
});
|
|
340
380
|
|
|
341
381
|
// Add tool to initial step to fetch news
|
|
@@ -351,11 +391,25 @@ fetchNews.nextStep({
|
|
|
351
391
|
const faqRoute = agent.createRoute({
|
|
352
392
|
title: "FAQ Search",
|
|
353
393
|
description: "Search FAQs for relevant answers",
|
|
354
|
-
|
|
394
|
+
// Mixed condition: AI context + programmatic pattern matching
|
|
395
|
+
when: [
|
|
355
396
|
"User has a question that might be in FAQs",
|
|
356
397
|
"How do I...",
|
|
357
398
|
"Can I...",
|
|
358
399
|
"Is there...",
|
|
400
|
+
(ctx) => {
|
|
401
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
402
|
+
return message.startsWith('how ') || message.startsWith('can ') ||
|
|
403
|
+
message.startsWith('is ') || message.includes('?');
|
|
404
|
+
}
|
|
405
|
+
],
|
|
406
|
+
// Skip if user is clearly asking for news or company info
|
|
407
|
+
skipIf: [
|
|
408
|
+
"user wants company news or general company information",
|
|
409
|
+
(ctx) => {
|
|
410
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
411
|
+
return message.includes('news') || message.includes('company') || message.includes('founded');
|
|
412
|
+
}
|
|
359
413
|
],
|
|
360
414
|
});
|
|
361
415
|
|
|
@@ -372,12 +426,15 @@ searchFaqs.nextStep({
|
|
|
372
426
|
agent.createRoute({
|
|
373
427
|
title: "General Conversation",
|
|
374
428
|
description: "Handle general conversation or unclear questions",
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
429
|
+
// Function-only condition for fallback logic
|
|
430
|
+
when: (ctx) => {
|
|
431
|
+
// This route catches everything that doesn't match other routes
|
|
432
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
433
|
+
return !message.includes('product') && !message.includes('policy') &&
|
|
434
|
+
!message.includes('news') && !message.includes('company');
|
|
435
|
+
},
|
|
436
|
+
// Never skip the fallback route
|
|
437
|
+
skipIf: ()=>false,
|
|
381
438
|
});
|
|
382
439
|
|
|
383
440
|
// Initial step is enough for fallback conversations
|
|
@@ -386,7 +443,27 @@ agent.createRoute({
|
|
|
386
443
|
const feedbackRoute = agent.createRoute({
|
|
387
444
|
title: "Collect Feedback",
|
|
388
445
|
description: "Collect user feedback about their experience",
|
|
389
|
-
|
|
446
|
+
// Mixed condition: AI context + sentiment analysis
|
|
447
|
+
when: [
|
|
448
|
+
"User wants to leave feedback",
|
|
449
|
+
"User seems satisfied or upset",
|
|
450
|
+
(ctx) => {
|
|
451
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
452
|
+
return message.includes('feedback') || message.includes('review') ||
|
|
453
|
+
message.includes('satisfied') || message.includes('disappointed');
|
|
454
|
+
}
|
|
455
|
+
],
|
|
456
|
+
// Skip if user is in the middle of another task
|
|
457
|
+
skipIf: [
|
|
458
|
+
"user is actively getting help with something else",
|
|
459
|
+
(ctx) => {
|
|
460
|
+
const recentMessages = ctx.history?.filter((m) => "content" in m).slice(-3) || [];
|
|
461
|
+
return recentMessages.some(msg =>
|
|
462
|
+
(msg.content as string)?.toLowerCase().includes('help') ||
|
|
463
|
+
(msg.content as string)?.toLowerCase().includes('problem')
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
],
|
|
390
467
|
// NEW: Required fields for route completion
|
|
391
468
|
requiredFields: ["rating", "comments"],
|
|
392
469
|
// NEW: Optional fields
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persistent multi-turn onboarding agent example
|
|
3
3
|
* Updated for v2 architecture with session step management and schema-first data extraction
|
|
4
|
+
*
|
|
5
|
+
* NEW: Enhanced with flexible ConditionTemplate patterns:
|
|
6
|
+
* - Mixed route conditions: ["AI context", (ctx) => state_check]
|
|
7
|
+
* - Route skipIf: Skip if onboarding already complete
|
|
8
|
+
* - Step skipIf: Enhanced conditional step skipping with AI context
|
|
9
|
+
* - Programmatic when conditions: (ctx) => data_validation
|
|
10
|
+
* - Performance patterns for condition evaluation
|
|
4
11
|
*/
|
|
5
12
|
|
|
6
13
|
import {
|
|
@@ -228,12 +235,7 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
228
235
|
// ============================================================================
|
|
229
236
|
|
|
230
237
|
// OPTION 1: Using contextUpdate in return value
|
|
231
|
-
const saveBusinessInfo: Tool<
|
|
232
|
-
OnboardingContext,
|
|
233
|
-
OnboardingData,
|
|
234
|
-
unknown[],
|
|
235
|
-
unknown
|
|
236
|
-
> = {
|
|
238
|
+
const saveBusinessInfo: Tool<OnboardingContext, OnboardingData> = {
|
|
237
239
|
id: "save_business_info",
|
|
238
240
|
name: "Business Info Saver",
|
|
239
241
|
description: "Save business name and description",
|
|
@@ -245,12 +247,13 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
245
247
|
},
|
|
246
248
|
required: ["name", "description"],
|
|
247
249
|
},
|
|
248
|
-
handler: (toolContext,
|
|
249
|
-
const
|
|
250
|
+
handler: (toolContext, args) => {
|
|
251
|
+
const name = args?.name as string;
|
|
252
|
+
const description = args?.description as string;
|
|
250
253
|
console.log(`📝 Saving business info: ${name}`);
|
|
251
254
|
|
|
252
255
|
return {
|
|
253
|
-
data:
|
|
256
|
+
data: "Business information saved successfully",
|
|
254
257
|
// Context update is automatically persisted via onContextUpdate hook
|
|
255
258
|
contextUpdate: {
|
|
256
259
|
collectedData: {
|
|
@@ -267,13 +270,8 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
267
270
|
},
|
|
268
271
|
};
|
|
269
272
|
|
|
270
|
-
// OPTION 2: Using
|
|
271
|
-
const saveIndustry: Tool<
|
|
272
|
-
OnboardingContext,
|
|
273
|
-
OnboardingData,
|
|
274
|
-
unknown[],
|
|
275
|
-
unknown
|
|
276
|
-
> = {
|
|
273
|
+
// OPTION 2: Using contextUpdate in return value
|
|
274
|
+
const saveIndustry: Tool<OnboardingContext, OnboardingData> = {
|
|
277
275
|
id: "save_industry",
|
|
278
276
|
name: "Industry Classifier",
|
|
279
277
|
description: "Save business industry",
|
|
@@ -284,29 +282,24 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
284
282
|
},
|
|
285
283
|
required: ["industry"],
|
|
286
284
|
},
|
|
287
|
-
handler: async (toolContext,
|
|
288
|
-
const
|
|
285
|
+
handler: async (toolContext, args) => {
|
|
286
|
+
const industry = args?.industry as string;
|
|
289
287
|
console.log(`🏭 Saving industry: ${industry}`);
|
|
290
288
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
289
|
+
return {
|
|
290
|
+
data: "Industry information saved successfully",
|
|
291
|
+
contextUpdate: {
|
|
292
|
+
collectedData: {
|
|
293
|
+
...toolContext.context.collectedData,
|
|
294
|
+
industry,
|
|
295
|
+
},
|
|
296
|
+
completedSteps: [...toolContext.context.completedSteps, "industry"],
|
|
296
297
|
},
|
|
297
|
-
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
return { data: true };
|
|
298
|
+
};
|
|
301
299
|
},
|
|
302
300
|
};
|
|
303
301
|
|
|
304
|
-
const saveContactEmail: Tool<
|
|
305
|
-
OnboardingContext,
|
|
306
|
-
OnboardingData,
|
|
307
|
-
unknown[],
|
|
308
|
-
unknown
|
|
309
|
-
> = {
|
|
302
|
+
const saveContactEmail: Tool<OnboardingContext, OnboardingData> = {
|
|
310
303
|
id: "save_contact_email",
|
|
311
304
|
name: "Contact Email Saver",
|
|
312
305
|
description: "Save contact email",
|
|
@@ -317,19 +310,20 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
317
310
|
},
|
|
318
311
|
required: ["email"],
|
|
319
312
|
},
|
|
320
|
-
handler: async (toolContext,
|
|
321
|
-
const
|
|
313
|
+
handler: async (toolContext, args) => {
|
|
314
|
+
const email = args?.email as string;
|
|
322
315
|
console.log(`📧 Saving contact email: ${email}`);
|
|
323
316
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
317
|
+
return {
|
|
318
|
+
data: "Contact email saved successfully",
|
|
319
|
+
contextUpdate: {
|
|
320
|
+
collectedData: {
|
|
321
|
+
...toolContext.context.collectedData,
|
|
322
|
+
contactEmail: email,
|
|
323
|
+
},
|
|
324
|
+
completedSteps: [...toolContext.context.completedSteps, "contact"],
|
|
328
325
|
},
|
|
329
|
-
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
return { data: true };
|
|
326
|
+
};
|
|
333
327
|
},
|
|
334
328
|
};
|
|
335
329
|
|
|
@@ -340,7 +334,24 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
340
334
|
const onboardingRoute = agent.createRoute({
|
|
341
335
|
title: "Business Onboarding",
|
|
342
336
|
description: "Guide user through business information collection",
|
|
343
|
-
|
|
337
|
+
// Mixed condition: AI context + programmatic validation
|
|
338
|
+
when: [
|
|
339
|
+
"User is onboarding their business",
|
|
340
|
+
(ctx) => {
|
|
341
|
+
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
342
|
+
return message.includes('onboard') || message.includes('register') ||
|
|
343
|
+
message.includes('business') || message.includes('start');
|
|
344
|
+
}
|
|
345
|
+
],
|
|
346
|
+
// Skip if user already has complete business info
|
|
347
|
+
skipIf: [
|
|
348
|
+
"business information already complete",
|
|
349
|
+
(ctx) => {
|
|
350
|
+
const data = ctx.data;
|
|
351
|
+
return !!(data?.businessName && data?.businessDescription &&
|
|
352
|
+
data?.industry && data?.contactEmail);
|
|
353
|
+
}
|
|
354
|
+
],
|
|
344
355
|
// NEW: Required fields for route completion
|
|
345
356
|
requiredFields: ["businessName", "businessDescription"],
|
|
346
357
|
// NEW: Optional fields that enhance the experience
|
|
@@ -355,7 +366,12 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
355
366
|
const collectBusinessInfo = onboardingRoute.initialStep.nextStep({
|
|
356
367
|
prompt: "Ask for business name and a brief description",
|
|
357
368
|
collect: ["businessName", "businessDescription"],
|
|
358
|
-
skipIf:
|
|
369
|
+
// Mixed skipIf: AI context + programmatic check
|
|
370
|
+
skipIf: [
|
|
371
|
+
"business name and description already provided",
|
|
372
|
+
(ctx) => !!ctx.data?.businessName && !!ctx.data.businessDescription
|
|
373
|
+
],
|
|
374
|
+
// String-only when condition for AI context
|
|
359
375
|
when: "Need to collect basic business information first",
|
|
360
376
|
});
|
|
361
377
|
|
|
@@ -363,14 +379,19 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
363
379
|
const saveBusiness = collectBusinessInfo.nextStep({
|
|
364
380
|
tools: [saveBusinessInfo],
|
|
365
381
|
requires: ["businessName", "businessDescription"],
|
|
366
|
-
|
|
382
|
+
// Function-only when condition for programmatic logic
|
|
383
|
+
when: (ctx) => !!ctx.data?.businessName && !!ctx.data?.businessDescription,
|
|
367
384
|
});
|
|
368
385
|
|
|
369
386
|
// Step 3: Collect industry
|
|
370
387
|
const collectIndustry = saveBusiness.nextStep({
|
|
371
388
|
prompt: "Ask what industry the business operates in",
|
|
372
389
|
collect: ["industry"],
|
|
373
|
-
skipIf:
|
|
390
|
+
// Mixed skipIf: AI context + programmatic logic
|
|
391
|
+
skipIf: [
|
|
392
|
+
"industry already specified",
|
|
393
|
+
(ctx) => !!ctx.data?.industry
|
|
394
|
+
],
|
|
374
395
|
});
|
|
375
396
|
|
|
376
397
|
// Step 4: Save industry (tool execution)
|
|
@@ -383,7 +404,8 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
383
404
|
const collectContact = saveIndustryStep.nextStep({
|
|
384
405
|
prompt: "Ask for their contact email",
|
|
385
406
|
collect: ["contactEmail"],
|
|
386
|
-
skipIf
|
|
407
|
+
// Function-only skipIf for programmatic check
|
|
408
|
+
skipIf: (ctx) => !!ctx.data?.contactEmail,
|
|
387
409
|
});
|
|
388
410
|
|
|
389
411
|
// Step 6: Save contact (tool execution)
|
|
@@ -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
|