@falai/agent 0.9.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +262 -38
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -0
- package/dist/adapters/MemoryAdapter.js.map +1 -0
- package/dist/adapters/MongoAdapter.d.ts.map +1 -0
- package/dist/adapters/MongoAdapter.js.map +1 -0
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/adapters/PrismaAdapter.js.map +1 -0
- package/dist/adapters/RedisAdapter.d.ts.map +1 -0
- package/dist/{src/adapters → adapters}/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/dist/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -0
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -0
- package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/{src/adapters → adapters}/PrismaAdapter.js +3 -2
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -0
- package/dist/cjs/{src/adapters → adapters}/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -0
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.d.ts +6 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Agent.js +42 -2
- package/dist/cjs/core/Agent.js.map +1 -0
- package/dist/cjs/core/BatchExecutor.d.ts +353 -0
- package/dist/cjs/core/BatchExecutor.d.ts.map +1 -0
- package/dist/cjs/core/BatchExecutor.js +842 -0
- package/dist/cjs/core/BatchExecutor.js.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/cjs/core/BatchPromptBuilder.js +201 -0
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -0
- package/dist/cjs/core/Events.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.js.map +1 -0
- package/dist/{src → cjs}/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/PromptComposer.js +44 -7
- package/dist/cjs/core/PromptComposer.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +202 -0
- package/dist/cjs/core/ResponseEngine.js.map +1 -0
- package/dist/{src → cjs}/core/ResponseModal.d.ts +45 -0
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponseModal.js +686 -66
- package/dist/cjs/core/ResponseModal.js.map +1 -0
- package/dist/{src → cjs}/core/ResponsePipeline.d.ts +2 -2
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/cjs/core/ResponsePipeline.js.map +1 -0
- package/dist/{src → cjs}/core/Route.d.ts +34 -5
- package/dist/cjs/core/Route.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Route.js +196 -19
- package/dist/cjs/core/Route.js.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/RoutingEngine.js +330 -80
- package/dist/cjs/core/RoutingEngine.js.map +1 -0
- package/dist/cjs/core/SessionManager.js.map +1 -0
- package/dist/{src → cjs}/core/Step.d.ts +31 -10
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/{src/core → core}/Step.js +105 -10
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolManager.js.map +1 -0
- package/dist/{src → cjs}/index.d.ts +4 -1
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/{src/index.js → index.js} +12 -1
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/AnthropicProvider.js +18 -18
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
- package/dist/{src → cjs}/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenAIProvider.js +19 -19
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -0
- package/dist/cjs/{src/providers → providers}/OpenRouterProvider.js +19 -19
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/{src/types → types}/agent.d.ts +11 -3
- package/dist/cjs/types/agent.d.ts.map +1 -0
- package/dist/cjs/types/agent.js.map +1 -0
- package/dist/{src → cjs}/types/ai.js.map +1 -1
- package/dist/cjs/types/history.js.map +1 -0
- package/dist/cjs/{src/types → types}/index.d.ts +2 -1
- package/dist/{src → cjs}/types/index.d.ts.map +1 -1
- package/dist/cjs/{src/types → types}/index.js +6 -1
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/persistence.js.map +1 -0
- package/dist/cjs/{src/types → types}/route.d.ts +111 -12
- package/dist/cjs/types/route.d.ts.map +1 -0
- package/dist/cjs/{src/types → types}/route.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -0
- package/dist/cjs/types/template.d.ts +88 -0
- package/dist/cjs/types/template.d.ts.map +1 -0
- package/dist/cjs/types/tool.js.map +1 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/condition.d.ts +38 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -0
- package/dist/cjs/utils/condition.js +168 -0
- package/dist/cjs/utils/condition.js.map +1 -0
- package/dist/cjs/utils/event.js.map +1 -0
- package/dist/cjs/utils/history.js.map +1 -0
- package/dist/cjs/utils/id.js.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.d.ts +3 -1
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/json.d.ts +16 -0
- package/dist/cjs/utils/json.d.ts.map +1 -0
- package/dist/cjs/utils/json.js +47 -0
- package/dist/cjs/utils/json.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{src → cjs}/utils/retry.d.ts +0 -3
- package/dist/cjs/utils/retry.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/retry.js +8 -7
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/session.js.map +1 -0
- package/dist/{src → cjs}/utils/template.d.ts +48 -0
- package/dist/cjs/utils/template.d.ts.map +1 -0
- package/dist/cjs/{src/utils → utils}/template.js +100 -0
- package/dist/cjs/utils/template.js.map +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/{src/core → core}/Agent.d.ts +6 -1
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/{src/core → core}/Agent.js +43 -3
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/BatchExecutor.d.ts +353 -0
- package/dist/core/BatchExecutor.d.ts.map +1 -0
- package/dist/core/BatchExecutor.js +837 -0
- package/dist/core/BatchExecutor.js.map +1 -0
- package/dist/core/BatchPromptBuilder.d.ts +86 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -0
- package/dist/core/BatchPromptBuilder.js +197 -0
- package/dist/core/BatchPromptBuilder.js.map +1 -0
- package/dist/core/Events.d.ts.map +1 -0
- package/dist/core/Events.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -0
- package/dist/core/PersistenceManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/PromptComposer.d.ts +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -0
- package/dist/{src/core → core}/PromptComposer.js +45 -8
- package/dist/core/PromptComposer.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -0
- package/dist/core/ResponseEngine.js +198 -0
- package/dist/core/ResponseEngine.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponseModal.d.ts +45 -0
- package/dist/core/ResponseModal.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponseModal.js +686 -66
- package/dist/core/ResponseModal.js.map +1 -0
- package/dist/{cjs/src/core → core}/ResponsePipeline.d.ts +2 -2
- package/dist/core/ResponsePipeline.d.ts.map +1 -0
- package/dist/{src/core → core}/ResponsePipeline.js +13 -6
- package/dist/core/ResponsePipeline.js.map +1 -0
- package/dist/{cjs/src/core → core}/Route.d.ts +34 -5
- package/dist/core/Route.d.ts.map +1 -0
- package/dist/{src/core → core}/Route.js +195 -18
- package/dist/core/Route.js.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.d.ts +30 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -0
- package/dist/{src/core → core}/RoutingEngine.js +310 -60
- package/dist/core/RoutingEngine.js.map +1 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/{cjs/src/core → core}/Step.d.ts +31 -10
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/{src/core → core}/Step.js +104 -9
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolManager.d.ts.map +1 -0
- package/dist/core/ToolManager.js.map +1 -0
- package/dist/{cjs/src/index.d.ts → index.d.ts} +4 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/{src/index.js → index.js} +3 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/AnthropicProvider.js +17 -17
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/GeminiProvider.js +123 -51
- package/dist/providers/GeminiProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenAIProvider.js +18 -18
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/{src/providers → providers}/OpenRouterProvider.js +18 -18
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/{src/types → types}/agent.d.ts +11 -3
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js.map +1 -0
- package/dist/{src/types → types}/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{src/types → types}/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/{src/types → types}/route.d.ts +111 -12
- package/dist/types/route.d.ts.map +1 -0
- package/dist/{src/types → types}/route.js.map +1 -1
- package/dist/types/routing.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/routing.js.map +1 -1
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/schema.js.map +1 -1
- package/dist/types/session.d.ts.map +1 -0
- package/dist/{src/types → types}/session.js.map +1 -1
- package/dist/types/template.d.ts +88 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/{cjs/src/types → types}/template.js.map +1 -1
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/clone.d.ts.map +1 -0
- package/dist/utils/clone.js.map +1 -0
- package/dist/utils/condition.d.ts +38 -0
- package/dist/utils/condition.d.ts.map +1 -0
- package/dist/utils/condition.js +161 -0
- package/dist/utils/condition.js.map +1 -0
- package/dist/utils/event.d.ts.map +1 -0
- package/dist/utils/event.js.map +1 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/{src/utils → utils}/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{src/utils → utils}/index.js +5 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +16 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/retry.d.ts +0 -3
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{src/utils → utils}/retry.js +5 -4
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/{cjs/src/utils → utils}/template.d.ts +48 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/{src/utils → utils}/template.js +98 -0
- package/dist/utils/template.js.map +1 -0
- package/docs/api/README.md +221 -12
- package/docs/api/overview.md +202 -3
- package/docs/architecture/data-extraction-flow.md +363 -0
- package/docs/architecture/multi-step-execution.md +243 -0
- package/docs/core/agent/README.md +120 -5
- package/docs/core/agent/session-management.md +1 -1
- package/docs/core/ai-integration/prompt-composition.md +135 -0
- package/docs/core/ai-integration/response-processing.md +146 -0
- package/docs/core/conversation-flows/data-collection.md +143 -0
- package/docs/core/conversation-flows/routes.md +2 -2
- package/docs/core/conversation-flows/step-transitions.md +132 -0
- package/docs/core/conversation-flows/steps.md +112 -0
- package/docs/core/error-handling.md +193 -0
- package/docs/core/routing/intelligent-routing.md +118 -0
- package/docs/guides/getting-started/README.md +284 -3
- package/docs/guides/migration/README.md +23 -0
- package/docs/guides/migration/flexible-routing-conditions.md +375 -0
- package/docs/guides/migration/multi-step-execution.md +303 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +101 -24
- package/examples/advanced-patterns/persistent-onboarding.ts +40 -5
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +82 -12
- package/examples/advanced-patterns/streaming-responses.ts +2 -2
- package/examples/ai-providers/anthropic-integration.ts +4 -4
- package/examples/ai-providers/openai-integration.ts +1 -1
- package/examples/condition-patterns/function-only-conditions.ts +365 -0
- package/examples/condition-patterns/mixed-array-conditions.ts +477 -0
- package/examples/condition-patterns/route-skipif-patterns.ts +468 -0
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +296 -0
- package/examples/conversation-flows/completion-transitions.ts +48 -7
- package/examples/core-concepts/basic-agent.ts +54 -33
- package/examples/core-concepts/schema-driven-extraction.ts +33 -9
- package/examples/core-concepts/session-management.ts +51 -16
- package/examples/integrations/database-integration.ts +6 -6
- package/examples/integrations/healthcare-integration.ts +10 -10
- package/examples/integrations/search-integration.ts +8 -8
- package/examples/integrations/server-session-management.ts +8 -8
- package/examples/persistence/database-persistence.ts +15 -15
- package/examples/persistence/memory-sessions.ts +3 -3
- package/examples/persistence/redis-persistence.ts +7 -9
- package/examples/tools/data-enrichment-tools.ts +4 -4
- package/package.json +6 -4
- package/src/adapters/PrismaAdapter.ts +3 -2
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/core/Agent.ts +54 -2
- package/src/core/BatchExecutor.ts +1156 -0
- package/src/core/BatchPromptBuilder.ts +275 -0
- package/src/core/PromptComposer.ts +53 -16
- package/src/core/ResponseEngine.ts +143 -4
- package/src/core/ResponseModal.ts +888 -66
- package/src/core/ResponsePipeline.ts +17 -9
- package/src/core/Route.ts +223 -22
- package/src/core/RoutingEngine.ts +426 -83
- package/src/core/Step.ts +144 -16
- package/src/index.ts +19 -0
- package/src/providers/AnthropicProvider.ts +17 -17
- package/src/providers/GeminiProvider.ts +129 -60
- package/src/providers/OpenAIProvider.ts +18 -18
- package/src/providers/OpenRouterProvider.ts +18 -18
- package/src/types/agent.ts +11 -3
- package/src/types/index.ts +12 -1
- package/src/types/route.ts +131 -12
- package/src/types/template.ts +70 -2
- package/src/utils/condition.ts +190 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/json.ts +46 -0
- package/src/utils/retry.ts +5 -4
- package/src/utils/template.ts +109 -0
- package/dist/cjs/src/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/src/adapters/index.d.ts.map +0 -1
- package/dist/cjs/src/adapters/index.js.map +0 -1
- package/dist/cjs/src/constants/index.d.ts.map +0 -1
- package/dist/cjs/src/constants/index.js.map +0 -1
- package/dist/cjs/src/core/Agent.d.ts.map +0 -1
- package/dist/cjs/src/core/Agent.js.map +0 -1
- package/dist/cjs/src/core/Events.d.ts.map +0 -1
- package/dist/cjs/src/core/Events.js.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +0 -1
- package/dist/cjs/src/core/PersistenceManager.js.map +0 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/cjs/src/core/PromptComposer.js.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseEngine.js +0 -84
- package/dist/cjs/src/core/ResponseEngine.js.map +0 -1
- package/dist/cjs/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponseModal.js.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/cjs/src/core/ResponsePipeline.js.map +0 -1
- package/dist/cjs/src/core/Route.d.ts.map +0 -1
- package/dist/cjs/src/core/Route.js.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/src/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +0 -1
- package/dist/cjs/src/core/SessionManager.js.map +0 -1
- package/dist/cjs/src/core/Step.d.ts.map +0 -1
- package/dist/cjs/src/core/Step.js.map +0 -1
- package/dist/cjs/src/core/ToolManager.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolManager.js.map +0 -1
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/src/providers/index.d.ts.map +0 -1
- package/dist/cjs/src/providers/index.js.map +0 -1
- package/dist/cjs/src/types/agent.d.ts.map +0 -1
- package/dist/cjs/src/types/agent.js.map +0 -1
- package/dist/cjs/src/types/ai.d.ts.map +0 -1
- package/dist/cjs/src/types/ai.js.map +0 -1
- package/dist/cjs/src/types/history.d.ts.map +0 -1
- package/dist/cjs/src/types/history.js.map +0 -1
- package/dist/cjs/src/types/index.d.ts.map +0 -1
- package/dist/cjs/src/types/index.js.map +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +0 -1
- package/dist/cjs/src/types/persistence.js.map +0 -1
- package/dist/cjs/src/types/route.d.ts.map +0 -1
- package/dist/cjs/src/types/routing.d.ts.map +0 -1
- package/dist/cjs/src/types/schema.d.ts.map +0 -1
- package/dist/cjs/src/types/session.d.ts.map +0 -1
- package/dist/cjs/src/types/session.js.map +0 -1
- package/dist/cjs/src/types/template.d.ts +0 -30
- package/dist/cjs/src/types/template.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.d.ts.map +0 -1
- package/dist/cjs/src/types/tool.js.map +0 -1
- package/dist/cjs/src/utils/clone.d.ts.map +0 -1
- package/dist/cjs/src/utils/clone.js.map +0 -1
- package/dist/cjs/src/utils/event.d.ts.map +0 -1
- package/dist/cjs/src/utils/event.js.map +0 -1
- package/dist/cjs/src/utils/history.d.ts.map +0 -1
- package/dist/cjs/src/utils/history.js.map +0 -1
- package/dist/cjs/src/utils/id.d.ts.map +0 -1
- package/dist/cjs/src/utils/id.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/logger.d.ts.map +0 -1
- package/dist/cjs/src/utils/logger.js.map +0 -1
- package/dist/cjs/src/utils/retry.d.ts.map +0 -1
- package/dist/cjs/src/utils/retry.js.map +0 -1
- package/dist/cjs/src/utils/session.d.ts.map +0 -1
- package/dist/cjs/src/utils/session.js.map +0 -1
- package/dist/cjs/src/utils/template.d.ts.map +0 -1
- package/dist/cjs/src/utils/template.js.map +0 -1
- package/dist/src/adapters/MemoryAdapter.js.map +0 -1
- package/dist/src/adapters/MongoAdapter.js.map +0 -1
- package/dist/src/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/src/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/src/adapters/PrismaAdapter.js.map +0 -1
- package/dist/src/adapters/RedisAdapter.js.map +0 -1
- package/dist/src/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/core/Agent.d.ts.map +0 -1
- package/dist/src/core/Agent.js.map +0 -1
- package/dist/src/core/Events.js.map +0 -1
- package/dist/src/core/PersistenceManager.js.map +0 -1
- package/dist/src/core/PromptComposer.d.ts.map +0 -1
- package/dist/src/core/PromptComposer.js.map +0 -1
- package/dist/src/core/ResponseEngine.js +0 -80
- package/dist/src/core/ResponseEngine.js.map +0 -1
- package/dist/src/core/ResponseModal.d.ts.map +0 -1
- package/dist/src/core/ResponseModal.js.map +0 -1
- package/dist/src/core/ResponsePipeline.d.ts.map +0 -1
- package/dist/src/core/ResponsePipeline.js.map +0 -1
- package/dist/src/core/Route.d.ts.map +0 -1
- package/dist/src/core/Route.js.map +0 -1
- package/dist/src/core/RoutingEngine.d.ts.map +0 -1
- package/dist/src/core/RoutingEngine.js.map +0 -1
- package/dist/src/core/SessionManager.js.map +0 -1
- package/dist/src/core/Step.d.ts.map +0 -1
- package/dist/src/core/Step.js.map +0 -1
- package/dist/src/core/ToolManager.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/GeminiProvider.js.map +0 -1
- package/dist/src/providers/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/OpenRouterProvider.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/types/agent.d.ts.map +0 -1
- package/dist/src/types/agent.js.map +0 -1
- package/dist/src/types/history.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/persistence.js.map +0 -1
- package/dist/src/types/route.d.ts.map +0 -1
- package/dist/src/types/template.d.ts +0 -30
- package/dist/src/types/template.d.ts.map +0 -1
- package/dist/src/types/tool.js.map +0 -1
- package/dist/src/utils/clone.js.map +0 -1
- package/dist/src/utils/event.js.map +0 -1
- package/dist/src/utils/history.js.map +0 -1
- package/dist/src/utils/id.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/session.js.map +0 -1
- package/dist/src/utils/template.d.ts.map +0 -1
- package/dist/src/utils/template.js.map +0 -1
- /package/dist/{cjs/src/adapters → adapters}/MemoryAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/MongoAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/PrismaAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/RedisAdapter.d.ts +0 -0
- /package/dist/{cjs/src/adapters → adapters}/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{cjs/src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MemoryAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MemoryAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/MongoAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/MongoAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/OpenSearchAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/OpenSearchAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/PostgreSQLAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/PostgreSQLAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/PrismaAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/RedisAdapter.d.ts.map +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/SQLiteAdapter.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/SQLiteAdapter.js +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts +0 -0
- /package/dist/{src → cjs}/adapters/index.d.ts.map +0 -0
- /package/dist/cjs/{src/adapters → adapters}/index.js +0 -0
- /package/dist/cjs/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src → cjs}/constants/index.d.ts.map +0 -0
- /package/dist/cjs/{src/constants → constants}/index.js +0 -0
- /package/dist/cjs/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src → cjs}/core/Events.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/Events.js +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/PersistenceManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/SessionManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/SessionManager.js +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src → cjs}/core/ToolManager.d.ts.map +0 -0
- /package/dist/cjs/{src/core → core}/ToolManager.js +0 -0
- /package/dist/cjs/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/AnthropicProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenAIProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src → cjs}/providers/OpenRouterProvider.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src → cjs}/providers/index.d.ts.map +0 -0
- /package/dist/cjs/{src/providers → providers}/index.js +0 -0
- /package/dist/cjs/{src/types → types}/agent.js +0 -0
- /package/dist/cjs/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src → cjs}/types/ai.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/ai.js +0 -0
- /package/dist/cjs/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src → cjs}/types/history.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/history.js +0 -0
- /package/dist/cjs/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src → cjs}/types/persistence.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/persistence.js +0 -0
- /package/dist/cjs/{src/types → types}/route.js +0 -0
- /package/dist/cjs/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src → cjs}/types/routing.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/routing.js +0 -0
- /package/dist/{src → cjs}/types/routing.js.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src → cjs}/types/schema.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/schema.js +0 -0
- /package/dist/{src → cjs}/types/schema.js.map +0 -0
- /package/dist/cjs/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src → cjs}/types/session.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/session.js +0 -0
- /package/dist/cjs/{src/types → types}/template.js +0 -0
- /package/dist/{src → cjs}/types/template.js.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src → cjs}/types/tool.d.ts.map +0 -0
- /package/dist/cjs/{src/types → types}/tool.js +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src → cjs}/utils/clone.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/clone.js +0 -0
- /package/dist/cjs/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src → cjs}/utils/event.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/event.js +0 -0
- /package/dist/cjs/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src → cjs}/utils/history.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/history.js +0 -0
- /package/dist/cjs/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src → cjs}/utils/id.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/id.js +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src → cjs}/utils/logger.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/logger.js +0 -0
- /package/dist/cjs/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src → cjs}/utils/session.d.ts.map +0 -0
- /package/dist/cjs/{src/utils → utils}/session.js +0 -0
- /package/dist/{src/constants → constants}/index.d.ts +0 -0
- /package/dist/{src/constants → constants}/index.js +0 -0
- /package/dist/{src/core → core}/Events.d.ts +0 -0
- /package/dist/{src/core → core}/Events.js +0 -0
- /package/dist/{src/core → core}/PersistenceManager.d.ts +0 -0
- /package/dist/{src/core → core}/PersistenceManager.js +0 -0
- /package/dist/{src/core → core}/ResponseEngine.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.d.ts +0 -0
- /package/dist/{src/core → core}/SessionManager.js +0 -0
- /package/dist/{src/core → core}/ToolManager.d.ts +0 -0
- /package/dist/{src/core → core}/ToolManager.js +0 -0
- /package/dist/{src/providers → providers}/AnthropicProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/GeminiProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenAIProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/OpenRouterProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/index.js +0 -0
- /package/dist/{src/types → types}/agent.js +0 -0
- /package/dist/{src/types → types}/ai.d.ts +0 -0
- /package/dist/{src/types → types}/ai.js +0 -0
- /package/dist/{src/types → types}/history.d.ts +0 -0
- /package/dist/{src/types → types}/history.js +0 -0
- /package/dist/{src/types → types}/persistence.d.ts +0 -0
- /package/dist/{src/types → types}/persistence.js +0 -0
- /package/dist/{src/types → types}/route.js +0 -0
- /package/dist/{src/types → types}/routing.d.ts +0 -0
- /package/dist/{src/types → types}/routing.js +0 -0
- /package/dist/{src/types → types}/schema.d.ts +0 -0
- /package/dist/{src/types → types}/schema.js +0 -0
- /package/dist/{src/types → types}/session.d.ts +0 -0
- /package/dist/{src/types → types}/session.js +0 -0
- /package/dist/{src/types → types}/template.js +0 -0
- /package/dist/{src/types → types}/tool.d.ts +0 -0
- /package/dist/{src/types → types}/tool.js +0 -0
- /package/dist/{src/utils → utils}/clone.d.ts +0 -0
- /package/dist/{src/utils → utils}/clone.js +0 -0
- /package/dist/{src/utils → utils}/event.d.ts +0 -0
- /package/dist/{src/utils → utils}/event.js +0 -0
- /package/dist/{src/utils → utils}/history.d.ts +0 -0
- /package/dist/{src/utils → utils}/history.js +0 -0
- /package/dist/{src/utils → utils}/id.d.ts +0 -0
- /package/dist/{src/utils → utils}/id.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/session.d.ts +0 -0
- /package/dist/{src/utils → utils}/session.js +0 -0
|
@@ -8,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 {
|
|
@@ -119,7 +125,7 @@ const searchKnowledgeTool: Tool<CompanyContext, UnifiedData> = {
|
|
|
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 {
|
|
@@ -327,7 +334,24 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
327
334
|
const onboardingRoute = agent.createRoute({
|
|
328
335
|
title: "Business Onboarding",
|
|
329
336
|
description: "Guide user through business information collection",
|
|
330
|
-
|
|
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
|
+
],
|
|
331
355
|
// NEW: Required fields for route completion
|
|
332
356
|
requiredFields: ["businessName", "businessDescription"],
|
|
333
357
|
// NEW: Optional fields that enhance the experience
|
|
@@ -342,7 +366,12 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
342
366
|
const collectBusinessInfo = onboardingRoute.initialStep.nextStep({
|
|
343
367
|
prompt: "Ask for business name and a brief description",
|
|
344
368
|
collect: ["businessName", "businessDescription"],
|
|
345
|
-
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
|
|
346
375
|
when: "Need to collect basic business information first",
|
|
347
376
|
});
|
|
348
377
|
|
|
@@ -350,14 +379,19 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
350
379
|
const saveBusiness = collectBusinessInfo.nextStep({
|
|
351
380
|
tools: [saveBusinessInfo],
|
|
352
381
|
requires: ["businessName", "businessDescription"],
|
|
353
|
-
|
|
382
|
+
// Function-only when condition for programmatic logic
|
|
383
|
+
when: (ctx) => !!ctx.data?.businessName && !!ctx.data?.businessDescription,
|
|
354
384
|
});
|
|
355
385
|
|
|
356
386
|
// Step 3: Collect industry
|
|
357
387
|
const collectIndustry = saveBusiness.nextStep({
|
|
358
388
|
prompt: "Ask what industry the business operates in",
|
|
359
389
|
collect: ["industry"],
|
|
360
|
-
skipIf:
|
|
390
|
+
// Mixed skipIf: AI context + programmatic logic
|
|
391
|
+
skipIf: [
|
|
392
|
+
"industry already specified",
|
|
393
|
+
(ctx) => !!ctx.data?.industry
|
|
394
|
+
],
|
|
361
395
|
});
|
|
362
396
|
|
|
363
397
|
// Step 4: Save industry (tool execution)
|
|
@@ -370,7 +404,8 @@ function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
370
404
|
const collectContact = saveIndustryStep.nextStep({
|
|
371
405
|
prompt: "Ask for their contact email",
|
|
372
406
|
collect: ["contactEmail"],
|
|
373
|
-
skipIf
|
|
407
|
+
// Function-only skipIf for programmatic check
|
|
408
|
+
skipIf: (ctx) => !!ctx.data?.contactEmail,
|
|
374
409
|
});
|
|
375
410
|
|
|
376
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
|
|
@@ -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
|