@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
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
logger,
|
|
20
20
|
render,
|
|
21
21
|
} from "../utils";
|
|
22
|
+
import { createTemplateContext } from "../utils/template";
|
|
22
23
|
import { Route } from "../core/Route";
|
|
23
24
|
import { Step } from "../core/Step";
|
|
24
25
|
import { RoutingEngine } from "../core/RoutingEngine";
|
|
@@ -211,12 +212,12 @@ export class ResponsePipeline<TContext = unknown, TData = unknown> {
|
|
|
211
212
|
/**
|
|
212
213
|
* Determine next step and update session
|
|
213
214
|
*/
|
|
214
|
-
determineNextStep(params: {
|
|
215
|
+
async determineNextStep(params: {
|
|
215
216
|
selectedRoute: Route<TContext, TData> | undefined;
|
|
216
217
|
selectedStep: Step<TContext, TData> | undefined;
|
|
217
218
|
session: SessionState<TData>;
|
|
218
219
|
isRouteComplete: boolean;
|
|
219
|
-
}): { nextStep: Step<TContext, TData> | undefined; session: SessionState<TData> } {
|
|
220
|
+
}): Promise<{ nextStep: Step<TContext, TData> | undefined; session: SessionState<TData> }> {
|
|
220
221
|
const { selectedRoute, selectedStep, session, isRouteComplete } = params;
|
|
221
222
|
|
|
222
223
|
if (!selectedRoute || isRouteComplete) {
|
|
@@ -229,16 +230,23 @@ export class ResponsePipeline<TContext = unknown, TData = unknown> {
|
|
|
229
230
|
if (selectedStep) {
|
|
230
231
|
nextStep = selectedStep;
|
|
231
232
|
} else {
|
|
232
|
-
//
|
|
233
|
-
const
|
|
233
|
+
// Determine current step from session if we're already in this route
|
|
234
|
+
const currentStep = session.currentRoute?.id === selectedRoute.id && session.currentStep
|
|
235
|
+
? selectedRoute.getStep(session.currentStep.id)
|
|
236
|
+
: undefined;
|
|
237
|
+
|
|
238
|
+
const contextToUse = this.getStoredContext();
|
|
239
|
+
// Get candidate steps based on current position in the route
|
|
240
|
+
const candidates = await this.routingEngine.getCandidateStepsWithConditions(
|
|
234
241
|
selectedRoute,
|
|
235
|
-
undefined
|
|
236
|
-
session.data
|
|
242
|
+
currentStep, // Pass current step instead of undefined to maintain progression
|
|
243
|
+
createTemplateContext({ data: session.data, session, context: contextToUse })
|
|
237
244
|
);
|
|
245
|
+
|
|
238
246
|
if (candidates.length > 0) {
|
|
239
247
|
nextStep = candidates[0].step;
|
|
240
248
|
logger.debug(
|
|
241
|
-
`[ResponseHandler] Using first valid step: ${nextStep.id} for new route`
|
|
249
|
+
`[ResponseHandler] Using first valid step: ${nextStep.id}${currentStep ? ' (progressing from ' + currentStep.id + ')' : ' for new route'}`
|
|
242
250
|
);
|
|
243
251
|
} else {
|
|
244
252
|
// Fallback to initial step even if it should be skipped
|
|
@@ -564,11 +572,11 @@ export class ResponsePipeline<TContext = unknown, TData = unknown> {
|
|
|
564
572
|
);
|
|
565
573
|
|
|
566
574
|
if (targetRoute) {
|
|
567
|
-
const templateContext = {
|
|
575
|
+
const templateContext = createTemplateContext({
|
|
568
576
|
context,
|
|
569
577
|
session,
|
|
570
578
|
history,
|
|
571
|
-
};
|
|
579
|
+
});
|
|
572
580
|
const renderedCondition: string =
|
|
573
581
|
(await render(transitionConfig.condition, templateContext)) ||
|
|
574
582
|
(typeof transitionConfig.condition === "string"
|
package/src/core/Route.ts
CHANGED
|
@@ -12,14 +12,21 @@ import type {
|
|
|
12
12
|
RouteLifecycleHooks,
|
|
13
13
|
StructuredSchema,
|
|
14
14
|
Guideline,
|
|
15
|
+
GuidelineMatch,
|
|
15
16
|
Term,
|
|
16
17
|
Tool,
|
|
17
18
|
Template,
|
|
19
|
+
ConditionTemplate,
|
|
20
|
+
TemplateContext,
|
|
21
|
+
ConditionEvaluationResult,
|
|
22
|
+
SessionState,
|
|
23
|
+
Event,
|
|
18
24
|
} from "../types";
|
|
19
25
|
|
|
26
|
+
import { createConditionEvaluator, generateRouteId, logger } from "../utils";
|
|
27
|
+
|
|
20
28
|
import { Step } from "./Step";
|
|
21
29
|
import { Agent } from './Agent'
|
|
22
|
-
import { generateRouteId } from "../utils/id";
|
|
23
30
|
import { END_ROUTE } from "../constants";
|
|
24
31
|
|
|
25
32
|
/**
|
|
@@ -31,7 +38,8 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
31
38
|
public readonly description?: string;
|
|
32
39
|
public readonly identity?: Template<TContext, TData>;
|
|
33
40
|
public readonly personality?: Template<TContext, TData>;
|
|
34
|
-
public readonly
|
|
41
|
+
public readonly when?: ConditionTemplate<TContext, TData>;
|
|
42
|
+
public readonly skipIf?: ConditionTemplate<TContext, TData>;
|
|
35
43
|
public readonly rules: Template<TContext, TData>[];
|
|
36
44
|
public readonly prohibitions: Template<TContext, TData>[];
|
|
37
45
|
public readonly initialStep: Step<TContext, TData>;
|
|
@@ -49,7 +57,7 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
49
57
|
| RouteCompletionHandler<TContext, TData>;
|
|
50
58
|
public readonly hooks?: RouteLifecycleHooks<TContext, TData>;
|
|
51
59
|
public routingExtrasSchema?: StructuredSchema;
|
|
52
|
-
public guidelines: Guideline<TContext>[] = [];
|
|
60
|
+
public guidelines: Guideline<TContext, TData>[] = [];
|
|
53
61
|
public terms: Term<TContext>[] = [];
|
|
54
62
|
public tools: Tool<TContext, TData>[] = [];
|
|
55
63
|
public knowledgeBase: Record<string, unknown> = {};
|
|
@@ -64,7 +72,8 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
64
72
|
this.description = options.description;
|
|
65
73
|
this.identity = options.identity;
|
|
66
74
|
this.personality = options.personality;
|
|
67
|
-
this.
|
|
75
|
+
this.when = options.when;
|
|
76
|
+
this.skipIf = options.skipIf;
|
|
68
77
|
this.rules = options.rules || [];
|
|
69
78
|
this.prohibitions = options.prohibitions || [];
|
|
70
79
|
|
|
@@ -122,8 +131,28 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
122
131
|
|
|
123
132
|
// Initialize tools from options
|
|
124
133
|
if (options.tools) {
|
|
125
|
-
options.tools.forEach((
|
|
126
|
-
|
|
134
|
+
options.tools.forEach((toolRef) => {
|
|
135
|
+
if (typeof toolRef === 'string') {
|
|
136
|
+
// Tool ID - try to resolve from ToolManager
|
|
137
|
+
if (this.parentAgent?.tool) {
|
|
138
|
+
const registeredTool = this.parentAgent.tool.find(toolRef);
|
|
139
|
+
if (registeredTool) {
|
|
140
|
+
this.createTool(registeredTool);
|
|
141
|
+
} else {
|
|
142
|
+
// Tool not found - log warning but don't fail
|
|
143
|
+
logger.warn(`[Route] Tool ID '${toolRef}' not found in any scope for route ${this.title}`);
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
logger.warn(`[Route] No agent available to resolve tool ID '${toolRef}' for route ${this.title}`);
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
// Inline tool object - validate and use directly
|
|
150
|
+
if (toolRef && toolRef.id && typeof toolRef.handler === 'function') {
|
|
151
|
+
this.createTool(toolRef);
|
|
152
|
+
} else {
|
|
153
|
+
logger.warn(`[Route] Invalid inline tool object in route ${this.title}:`, toolRef);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
127
156
|
});
|
|
128
157
|
}
|
|
129
158
|
|
|
@@ -151,10 +180,50 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
151
180
|
}
|
|
152
181
|
}
|
|
153
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Evaluate the when condition for this route
|
|
185
|
+
* @param templateContext - Context for condition evaluation
|
|
186
|
+
* @returns Evaluation result with programmatic result and AI context strings
|
|
187
|
+
*/
|
|
188
|
+
async evaluateWhen(
|
|
189
|
+
templateContext: TemplateContext<TContext, TData>
|
|
190
|
+
): Promise<ConditionEvaluationResult> {
|
|
191
|
+
if (!this.when) {
|
|
192
|
+
return {
|
|
193
|
+
programmaticResult: true, // No condition means always eligible
|
|
194
|
+
aiContextStrings: [],
|
|
195
|
+
hasProgrammaticConditions: false,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const evaluator = createConditionEvaluator(templateContext);
|
|
200
|
+
return await evaluator.evaluateCondition(this.when, 'AND');
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Evaluate the skipIf condition for this route
|
|
205
|
+
* @param templateContext - Context for condition evaluation
|
|
206
|
+
* @returns Evaluation result with programmatic result and AI context strings
|
|
207
|
+
*/
|
|
208
|
+
async evaluateSkipIf(
|
|
209
|
+
templateContext: TemplateContext<TContext, TData>
|
|
210
|
+
): Promise<ConditionEvaluationResult> {
|
|
211
|
+
if (!this.skipIf) {
|
|
212
|
+
return {
|
|
213
|
+
programmaticResult: false, // No skipIf means never skip
|
|
214
|
+
aiContextStrings: [],
|
|
215
|
+
hasProgrammaticConditions: false,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const evaluator = createConditionEvaluator(templateContext);
|
|
220
|
+
return await evaluator.evaluateCondition(this.skipIf, 'OR');
|
|
221
|
+
}
|
|
222
|
+
|
|
154
223
|
/**
|
|
155
224
|
* Create a guideline specific to this route
|
|
156
225
|
*/
|
|
157
|
-
createGuideline(guideline: Guideline<TContext>): this {
|
|
226
|
+
createGuideline(guideline: Guideline<TContext, TData>): this {
|
|
158
227
|
this.guidelines.push({
|
|
159
228
|
...guideline,
|
|
160
229
|
id: guideline.id || `guideline_${this.id}_${this.guidelines.length}`,
|
|
@@ -212,10 +281,59 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
212
281
|
/**
|
|
213
282
|
* Get all guidelines for this route
|
|
214
283
|
*/
|
|
215
|
-
getGuidelines(): Guideline<TContext>[] {
|
|
284
|
+
getGuidelines(): Guideline<TContext, TData>[] {
|
|
216
285
|
return [...this.guidelines];
|
|
217
286
|
}
|
|
218
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Evaluate and match active guidelines based on their conditions
|
|
290
|
+
* Returns guidelines that should be active given the current context
|
|
291
|
+
*/
|
|
292
|
+
async evaluateGuidelines(
|
|
293
|
+
context?: TContext,
|
|
294
|
+
session?: SessionState<TData>,
|
|
295
|
+
history?: Event[]
|
|
296
|
+
): Promise<GuidelineMatch<TContext, TData>[]> {
|
|
297
|
+
const templateContext = { context, session, history, data: session?.data };
|
|
298
|
+
const evaluator = createConditionEvaluator(templateContext);
|
|
299
|
+
const matches: GuidelineMatch<TContext, TData>[] = [];
|
|
300
|
+
|
|
301
|
+
for (const guideline of this.guidelines) {
|
|
302
|
+
// Skip disabled guidelines
|
|
303
|
+
if (guideline.enabled === false) {
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (guideline.condition) {
|
|
308
|
+
const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
|
|
309
|
+
|
|
310
|
+
// Include guideline if:
|
|
311
|
+
// 1. No programmatic conditions (only strings) - always active
|
|
312
|
+
// 2. Programmatic conditions evaluate to true
|
|
313
|
+
if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
|
|
314
|
+
const rationale = evaluation.aiContextStrings.length > 0
|
|
315
|
+
? `Condition met: ${evaluation.aiContextStrings.join(" AND ")}`
|
|
316
|
+
: evaluation.hasProgrammaticConditions
|
|
317
|
+
? "Programmatic condition evaluated to true"
|
|
318
|
+
: "Always active (no conditions)";
|
|
319
|
+
|
|
320
|
+
matches.push({
|
|
321
|
+
guideline,
|
|
322
|
+
rationale
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
} else {
|
|
326
|
+
// No condition means always active
|
|
327
|
+
matches.push({
|
|
328
|
+
guideline,
|
|
329
|
+
rationale: "Always active (no conditions)"
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return matches;
|
|
335
|
+
}
|
|
336
|
+
|
|
219
337
|
/**
|
|
220
338
|
* Get all terms for this route
|
|
221
339
|
*/
|
|
@@ -325,7 +443,8 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
325
443
|
`Route: ${this.title}`,
|
|
326
444
|
`ID: ${this.id}`,
|
|
327
445
|
`Description: ${this.description || "N/A"}`,
|
|
328
|
-
`
|
|
446
|
+
`When: ${this.when ? (typeof this.when === 'string' ? this.when : Array.isArray(this.when) ? '[Array]' : '[Function]') : "None"}`,
|
|
447
|
+
`SkipIf: ${this.skipIf ? (typeof this.skipIf === 'string' ? this.skipIf : Array.isArray(this.skipIf) ? '[Array]' : '[Function]') : "None"}`,
|
|
329
448
|
"",
|
|
330
449
|
"Steps:",
|
|
331
450
|
];
|
|
@@ -382,20 +501,93 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
382
501
|
}
|
|
383
502
|
}
|
|
384
503
|
|
|
504
|
+
/**
|
|
505
|
+
* Export route configuration as RouteOptions for copying/cloning
|
|
506
|
+
* @returns RouteOptions that can be used to create a new route with identical configuration
|
|
507
|
+
*/
|
|
508
|
+
toOptions(): RouteOptions<TContext, TData> {
|
|
509
|
+
// Convert steps to StepOptions
|
|
510
|
+
const steps = this.getAllSteps()
|
|
511
|
+
.filter(step => step.id !== this.initialStep.id) // Exclude initial step
|
|
512
|
+
.map(step => ({
|
|
513
|
+
id: step.id,
|
|
514
|
+
description: step.description,
|
|
515
|
+
prompt: step.prompt,
|
|
516
|
+
tools: step.tools,
|
|
517
|
+
prepare: step.prepare,
|
|
518
|
+
finalize: step.finalize,
|
|
519
|
+
collect: step.collect,
|
|
520
|
+
skipIf: step.skipIf,
|
|
521
|
+
requires: step.requires,
|
|
522
|
+
when: step.when,
|
|
523
|
+
guidelines: step.getGuidelines(),
|
|
524
|
+
}));
|
|
525
|
+
|
|
526
|
+
return {
|
|
527
|
+
id: this.id,
|
|
528
|
+
title: this.title,
|
|
529
|
+
description: this.description,
|
|
530
|
+
identity: this.identity,
|
|
531
|
+
personality: this.personality,
|
|
532
|
+
when: this.when,
|
|
533
|
+
skipIf: this.skipIf,
|
|
534
|
+
guidelines: this.getGuidelines(),
|
|
535
|
+
terms: this.getTerms(),
|
|
536
|
+
tools: this.getTools(),
|
|
537
|
+
rules: this.rules,
|
|
538
|
+
prohibitions: this.prohibitions,
|
|
539
|
+
routingExtrasSchema: this.routingExtrasSchema,
|
|
540
|
+
responseOutputSchema: this.responseOutputSchema,
|
|
541
|
+
requiredFields: this.requiredFields,
|
|
542
|
+
optionalFields: this.optionalFields,
|
|
543
|
+
initialData: this.initialData,
|
|
544
|
+
steps: steps.length > 0 ? steps : undefined,
|
|
545
|
+
initialStep: {
|
|
546
|
+
id: this.initialStep.id,
|
|
547
|
+
description: this.initialStep.description,
|
|
548
|
+
prompt: this.initialStep.prompt,
|
|
549
|
+
tools: this.initialStep.tools,
|
|
550
|
+
prepare: this.initialStep.prepare,
|
|
551
|
+
finalize: this.initialStep.finalize,
|
|
552
|
+
collect: this.initialStep.collect,
|
|
553
|
+
skipIf: this.initialStep.skipIf,
|
|
554
|
+
requires: this.initialStep.requires,
|
|
555
|
+
when: this.initialStep.when,
|
|
556
|
+
guidelines: this.initialStep.getGuidelines(),
|
|
557
|
+
},
|
|
558
|
+
endStep: this.endStepSpec,
|
|
559
|
+
onComplete: this.onComplete,
|
|
560
|
+
hooks: this.hooks,
|
|
561
|
+
knowledgeBase: this.knowledgeBase,
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
|
|
385
565
|
/**
|
|
386
566
|
* Check if this route is complete based on the provided data
|
|
387
567
|
* @param data - Currently collected agent-level data
|
|
388
568
|
* @returns true if all required fields are present, false otherwise
|
|
569
|
+
*
|
|
570
|
+
* Note: Routes with no requiredFields AND no optionalFields are never complete
|
|
571
|
+
* based on data (they complete via END_ROUTE). Routes with only optionalFields
|
|
572
|
+
* are always complete (optional data doesn't block completion).
|
|
389
573
|
*/
|
|
390
574
|
isComplete(data: Partial<TData>): boolean {
|
|
391
|
-
|
|
392
|
-
|
|
575
|
+
// If route has required fields, check if they're all collected
|
|
576
|
+
if (this.requiredFields && this.requiredFields.length > 0) {
|
|
577
|
+
return this.requiredFields.every(field => {
|
|
578
|
+
const value = data[field];
|
|
579
|
+
return value !== undefined && value !== null && value !== '';
|
|
580
|
+
});
|
|
393
581
|
}
|
|
394
582
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
return
|
|
398
|
-
}
|
|
583
|
+
// If route has optional fields but no required fields, it's always complete
|
|
584
|
+
if (this.optionalFields && this.optionalFields.length > 0) {
|
|
585
|
+
return true;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// No required or optional fields - route doesn't complete based on data
|
|
589
|
+
// It can only complete by reaching END_ROUTE in step flow
|
|
590
|
+
return false;
|
|
399
591
|
}
|
|
400
592
|
|
|
401
593
|
/**
|
|
@@ -418,18 +610,27 @@ export class Route<TContext = unknown, TData = unknown> {
|
|
|
418
610
|
* Get the completion progress for this route as a percentage
|
|
419
611
|
* @param data - Currently collected agent-level data
|
|
420
612
|
* @returns Completion progress as a number between 0 and 1
|
|
613
|
+
*
|
|
614
|
+
* Note: Must be consistent with isComplete() logic
|
|
421
615
|
*/
|
|
422
616
|
getCompletionProgress(data: Partial<TData>): number {
|
|
423
|
-
|
|
424
|
-
|
|
617
|
+
// If route has required fields, calculate progress
|
|
618
|
+
if (this.requiredFields && this.requiredFields.length > 0) {
|
|
619
|
+
const completedFields = this.requiredFields.filter(field => {
|
|
620
|
+
const value = data[field];
|
|
621
|
+
return value !== undefined && value !== null && value !== '';
|
|
622
|
+
});
|
|
623
|
+
return completedFields.length / this.requiredFields.length;
|
|
425
624
|
}
|
|
426
625
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
return
|
|
430
|
-
}
|
|
626
|
+
// If route has optional fields but no required fields, it's always complete
|
|
627
|
+
if (this.optionalFields && this.optionalFields.length > 0) {
|
|
628
|
+
return 1;
|
|
629
|
+
}
|
|
431
630
|
|
|
432
|
-
|
|
631
|
+
// No required or optional fields - route doesn't complete based on data
|
|
632
|
+
// Progress is 0 (must reach END_ROUTE in step flow)
|
|
633
|
+
return 0;
|
|
433
634
|
}
|
|
434
635
|
|
|
435
636
|
/**
|