@falai/agent 1.2.8 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js → FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +1 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js → flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js → FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +1 -1
- package/dist/providers/AnthropicProvider.js +1 -1
- package/dist/providers/GeminiProvider.d.ts +1 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +1 -1
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +1 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +1 -1
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +22 -200
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +14 -0
- package/docs/migration/route-to-flow.md +561 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts → FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/providers/AnthropicProvider.ts +2 -2
- package/src/providers/GeminiProvider.ts +2 -2
- package/src/providers/OpenAIProvider.ts +2 -2
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- package/src/types/route.ts +0 -392
|
@@ -1,468 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Route skipIf Patterns Example
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates using skipIf conditions on routes for dynamic
|
|
5
|
-
* route exclusion. Route skipIf allows you to prevent entire routes from
|
|
6
|
-
* being considered based on context, data, or business logic.
|
|
7
|
-
*
|
|
8
|
-
* Key concepts:
|
|
9
|
-
* - Route skipIf prevents routes from being activated
|
|
10
|
-
* - Uses OR logic (skip if ANY condition is true)
|
|
11
|
-
* - Can use strings, functions, or mixed arrays
|
|
12
|
-
* - Perfect for business rules and access control
|
|
13
|
-
* - Evaluated before route when conditions
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import {
|
|
17
|
-
Agent,
|
|
18
|
-
GeminiProvider,
|
|
19
|
-
} from "../../src/index";
|
|
20
|
-
|
|
21
|
-
// Context for a banking system
|
|
22
|
-
interface BankingContext {
|
|
23
|
-
customerId: string;
|
|
24
|
-
accountType: "basic" | "premium" | "business" | "private";
|
|
25
|
-
accountStatus: "active" | "suspended" | "closed" | "pending";
|
|
26
|
-
creditScore: number;
|
|
27
|
-
accountBalance: number;
|
|
28
|
-
hasActiveLoans: boolean;
|
|
29
|
-
region: string;
|
|
30
|
-
kycVerified: boolean;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Banking transaction data
|
|
34
|
-
interface BankingData {
|
|
35
|
-
transactionType?: "transfer" | "loan" | "investment" | "card" | "mortgage";
|
|
36
|
-
amount?: number;
|
|
37
|
-
recipientAccount?: string;
|
|
38
|
-
loanAmount?: number;
|
|
39
|
-
investmentType?: string;
|
|
40
|
-
approved?: boolean;
|
|
41
|
-
requiresApproval?: boolean;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const bankingSchema = {
|
|
45
|
-
type: "object",
|
|
46
|
-
properties: {
|
|
47
|
-
transactionType: { type: "string", enum: ["transfer", "loan", "investment", "card", "mortgage"] },
|
|
48
|
-
amount: { type: "number", minimum: 0 },
|
|
49
|
-
recipientAccount: { type: "string" },
|
|
50
|
-
loanAmount: { type: "number", minimum: 0 },
|
|
51
|
-
investmentType: { type: "string" },
|
|
52
|
-
approved: { type: "boolean" },
|
|
53
|
-
requiresApproval: { type: "boolean" },
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
// Create agent with route skipIf examples
|
|
58
|
-
const agent = new Agent<BankingContext, BankingData>({
|
|
59
|
-
name: "BankingBot",
|
|
60
|
-
description: "A banking bot demonstrating route skipIf patterns",
|
|
61
|
-
provider: new GeminiProvider({
|
|
62
|
-
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
63
|
-
model: "models/gemini-2.5-flash",
|
|
64
|
-
}),
|
|
65
|
-
context: {
|
|
66
|
-
customerId: "cust_12345",
|
|
67
|
-
accountType: "premium",
|
|
68
|
-
accountStatus: "active",
|
|
69
|
-
creditScore: 750,
|
|
70
|
-
accountBalance: 15000,
|
|
71
|
-
hasActiveLoans: false,
|
|
72
|
-
region: "US",
|
|
73
|
-
kycVerified: true,
|
|
74
|
-
},
|
|
75
|
-
schema: bankingSchema,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// Route 1: Premium Services - String-only skipIf
|
|
79
|
-
agent.createRoute({
|
|
80
|
-
title: "Premium Banking Services",
|
|
81
|
-
description: "Exclusive services for premium customers",
|
|
82
|
-
when: "Customer asks about premium services, investment options, or wealth management",
|
|
83
|
-
// String-only skipIf - AI understands account restrictions
|
|
84
|
-
skipIf: "Customer account is not premium or has restrictions that prevent premium services",
|
|
85
|
-
steps: [
|
|
86
|
-
{
|
|
87
|
-
id: "premium_welcome",
|
|
88
|
-
description: "Welcome premium customer",
|
|
89
|
-
prompt: "Welcome to our premium banking services! I can help you with investments, wealth management, and exclusive products.",
|
|
90
|
-
},
|
|
91
|
-
],
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// Route 2: Loan Services - Function-only skipIf
|
|
95
|
-
agent.createRoute({
|
|
96
|
-
title: "Loan Services",
|
|
97
|
-
description: "Handle loan applications and inquiries",
|
|
98
|
-
when: "Customer wants to apply for a loan or asks about lending options",
|
|
99
|
-
// Function-only skipIf - programmatic eligibility check
|
|
100
|
-
skipIf: (ctx) => {
|
|
101
|
-
// Skip if account is not active, credit score too low, or already has active loans
|
|
102
|
-
return ctx.context?.accountStatus !== "active" ||
|
|
103
|
-
(ctx.context?.creditScore || 0) < 600 ||
|
|
104
|
-
ctx.context?.hasActiveLoans === true;
|
|
105
|
-
},
|
|
106
|
-
requiredFields: ["loanAmount"],
|
|
107
|
-
steps: [
|
|
108
|
-
{
|
|
109
|
-
id: "loan_application",
|
|
110
|
-
description: "Process loan application",
|
|
111
|
-
prompt: "I'd be happy to help you with a loan application. What amount are you looking to borrow?",
|
|
112
|
-
collect: ["loanAmount"],
|
|
113
|
-
},
|
|
114
|
-
],
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
// Route 3: Investment Services - Mixed array skipIf
|
|
118
|
-
agent.createRoute({
|
|
119
|
-
title: "Investment Services",
|
|
120
|
-
description: "Investment and wealth management services",
|
|
121
|
-
when: [
|
|
122
|
-
"Customer asks about investments, stocks, bonds, or portfolio management",
|
|
123
|
-
(ctx) => ctx.context?.accountType === "premium" || ctx.context?.accountType === "private"
|
|
124
|
-
],
|
|
125
|
-
// Mixed array skipIf - AI context + multiple programmatic checks
|
|
126
|
-
skipIf: [
|
|
127
|
-
"Customer account has restrictions or insufficient funds for investments",
|
|
128
|
-
(ctx) => ctx.context?.accountStatus !== "active",
|
|
129
|
-
(ctx) => (ctx.context?.accountBalance || 0) < 10000,
|
|
130
|
-
(ctx) => ctx.context?.kycVerified !== true
|
|
131
|
-
],
|
|
132
|
-
optionalFields: ["investmentType", "amount"],
|
|
133
|
-
steps: [
|
|
134
|
-
{
|
|
135
|
-
id: "investment_consultation",
|
|
136
|
-
description: "Provide investment consultation",
|
|
137
|
-
prompt: "I can help you explore investment opportunities. What type of investments interest you?",
|
|
138
|
-
collect: ["investmentType"],
|
|
139
|
-
},
|
|
140
|
-
],
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
// Route 4: Large Transfers - Complex mixed skipIf
|
|
144
|
-
agent.createRoute({
|
|
145
|
-
title: "Large Money Transfers",
|
|
146
|
-
description: "Handle large money transfers with enhanced security",
|
|
147
|
-
when: [
|
|
148
|
-
"Customer wants to make a large money transfer",
|
|
149
|
-
(ctx) => (ctx.data?.amount || 0) > 10000
|
|
150
|
-
],
|
|
151
|
-
// Complex mixed skipIf with multiple business rules
|
|
152
|
-
skipIf: [
|
|
153
|
-
"Account has restrictions, insufficient funds, or compliance issues",
|
|
154
|
-
(ctx) => ctx.context?.accountStatus === "suspended" || ctx.context?.accountStatus === "closed",
|
|
155
|
-
(ctx) => (ctx.context?.accountBalance || 0) < (ctx.data?.amount || 0),
|
|
156
|
-
(ctx) => ctx.context?.kycVerified !== true,
|
|
157
|
-
(ctx) => ctx.context?.region === "restricted_region" // Compliance restriction
|
|
158
|
-
],
|
|
159
|
-
requiredFields: ["amount", "recipientAccount"],
|
|
160
|
-
steps: [
|
|
161
|
-
{
|
|
162
|
-
id: "verify_transfer",
|
|
163
|
-
description: "Verify large transfer details",
|
|
164
|
-
prompt: "For large transfers, I need to verify some details for security. What's the recipient account and transfer amount?",
|
|
165
|
-
collect: ["amount", "recipientAccount"],
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
id: "security_check",
|
|
169
|
-
description: "Perform additional security checks",
|
|
170
|
-
prompt: "I'm performing additional security verification for this large transfer. This may take a moment.",
|
|
171
|
-
requires: ["amount", "recipientAccount"],
|
|
172
|
-
},
|
|
173
|
-
],
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
// Route 5: Business Banking - Account type skipIf
|
|
177
|
-
agent.createRoute({
|
|
178
|
-
title: "Business Banking Services",
|
|
179
|
-
description: "Services specifically for business accounts",
|
|
180
|
-
when: "Customer asks about business banking, commercial loans, or business services",
|
|
181
|
-
// Function-only skipIf - account type restriction
|
|
182
|
-
skipIf: (ctx) => ctx.context?.accountType !== "business",
|
|
183
|
-
steps: [
|
|
184
|
-
{
|
|
185
|
-
id: "business_services",
|
|
186
|
-
description: "Present business banking options",
|
|
187
|
-
prompt: "I can help you with business banking services including commercial loans, merchant services, and business accounts.",
|
|
188
|
-
},
|
|
189
|
-
],
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
// Route 6: Credit Card Services - Multiple restriction skipIf
|
|
193
|
-
agent.createRoute({
|
|
194
|
-
title: "Credit Card Services",
|
|
195
|
-
description: "Credit card applications and management",
|
|
196
|
-
when: "Customer asks about credit cards, card applications, or card services",
|
|
197
|
-
// Mixed skipIf with multiple eligibility criteria
|
|
198
|
-
skipIf: [
|
|
199
|
-
"Customer not eligible for credit card services due to account or credit restrictions",
|
|
200
|
-
(ctx) => ctx.context?.accountStatus !== "active",
|
|
201
|
-
(ctx) => (ctx.context?.creditScore || 0) < 650,
|
|
202
|
-
(ctx) => ctx.context?.kycVerified !== true,
|
|
203
|
-
(ctx) => ctx.context?.hasActiveLoans === true && (ctx.context?.creditScore || 0) < 700
|
|
204
|
-
],
|
|
205
|
-
steps: [
|
|
206
|
-
{
|
|
207
|
-
id: "card_application",
|
|
208
|
-
description: "Process credit card application",
|
|
209
|
-
prompt: "I can help you apply for a credit card. Based on your account, you're eligible for our premium card options.",
|
|
210
|
-
},
|
|
211
|
-
],
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
// Route 7: Mortgage Services - Complex eligibility skipIf
|
|
215
|
-
agent.createRoute({
|
|
216
|
-
title: "Mortgage Services",
|
|
217
|
-
description: "Mortgage applications and home loan services",
|
|
218
|
-
when: [
|
|
219
|
-
"Customer asks about mortgages, home loans, or property financing",
|
|
220
|
-
(ctx) => ctx.helpers.lastMessageContains(["mortgage", "home loan", "property", "house"])
|
|
221
|
-
],
|
|
222
|
-
// Complex skipIf with comprehensive eligibility check
|
|
223
|
-
skipIf: [
|
|
224
|
-
"Customer not eligible for mortgage services due to various restrictions",
|
|
225
|
-
(ctx) => ctx.context?.accountStatus !== "active",
|
|
226
|
-
(ctx) => (ctx.context?.creditScore || 0) < 620, // Minimum credit score for mortgages
|
|
227
|
-
(ctx) => (ctx.context?.accountBalance || 0) < 50000, // Minimum down payment capability
|
|
228
|
-
(ctx) => ctx.context?.hasActiveLoans === true && (ctx.context?.creditScore || 0) < 720,
|
|
229
|
-
(ctx) => ctx.context?.kycVerified !== true,
|
|
230
|
-
(ctx) => ctx.context?.region === "restricted_mortgage_region"
|
|
231
|
-
],
|
|
232
|
-
requiredFields: ["loanAmount"],
|
|
233
|
-
steps: [
|
|
234
|
-
{
|
|
235
|
-
id: "mortgage_consultation",
|
|
236
|
-
description: "Provide mortgage consultation",
|
|
237
|
-
prompt: "I can help you with mortgage options. What's your target loan amount for your home purchase?",
|
|
238
|
-
collect: ["loanAmount"],
|
|
239
|
-
},
|
|
240
|
-
],
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
// Route 8: Account Recovery - Status-based skipIf
|
|
244
|
-
agent.createRoute({
|
|
245
|
-
title: "Account Recovery",
|
|
246
|
-
description: "Help customers recover suspended or restricted accounts",
|
|
247
|
-
when: "Customer has account issues, restrictions, or needs account recovery help",
|
|
248
|
-
// Function-only skipIf - only for accounts that need recovery
|
|
249
|
-
skipIf: (ctx) => ctx.context?.accountStatus === "active" && ctx.context?.kycVerified === true,
|
|
250
|
-
steps: [
|
|
251
|
-
{
|
|
252
|
-
id: "recovery_assistance",
|
|
253
|
-
description: "Provide account recovery assistance",
|
|
254
|
-
prompt: "I can help you resolve account issues. Let me check what steps are needed to restore full access to your account.",
|
|
255
|
-
},
|
|
256
|
-
],
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
// Route 9: General Banking - Fallback with minimal skipIf
|
|
260
|
-
agent.createRoute({
|
|
261
|
-
title: "General Banking Support",
|
|
262
|
-
description: "General banking questions and support",
|
|
263
|
-
when: "Customer has general banking questions or needs basic support",
|
|
264
|
-
// Minimal skipIf - only skip if account is completely closed
|
|
265
|
-
skipIf: (ctx) => ctx.context?.accountStatus === "closed",
|
|
266
|
-
steps: [
|
|
267
|
-
{
|
|
268
|
-
id: "general_support",
|
|
269
|
-
description: "Provide general banking support",
|
|
270
|
-
prompt: "I'm here to help with your banking needs. What can I assist you with today?",
|
|
271
|
-
},
|
|
272
|
-
],
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
// Demonstration function
|
|
276
|
-
async function demonstrateRouteSkipIfPatterns() {
|
|
277
|
-
console.log("=== Route skipIf Patterns Demo ===\n");
|
|
278
|
-
console.log("This demo shows how route skipIf conditions prevent routes from being activated.\n");
|
|
279
|
-
|
|
280
|
-
const testScenarios = [
|
|
281
|
-
{
|
|
282
|
-
name: "Premium Customer - Premium Services",
|
|
283
|
-
context: {
|
|
284
|
-
accountType: "premium" as const,
|
|
285
|
-
accountStatus: "active" as const,
|
|
286
|
-
creditScore: 800,
|
|
287
|
-
kycVerified: true
|
|
288
|
-
},
|
|
289
|
-
message: "I'm interested in your premium investment services",
|
|
290
|
-
expectedRoute: "Premium Banking Services",
|
|
291
|
-
shouldSkip: false
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
name: "Basic Customer - Premium Services (Should Skip)",
|
|
295
|
-
context: {
|
|
296
|
-
accountType: "basic" as const,
|
|
297
|
-
accountStatus: "active" as const,
|
|
298
|
-
creditScore: 700,
|
|
299
|
-
kycVerified: true
|
|
300
|
-
},
|
|
301
|
-
message: "I want premium investment services",
|
|
302
|
-
expectedRoute: "General Banking Support", // Should fallback
|
|
303
|
-
shouldSkip: true
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
name: "Good Credit - Loan Services",
|
|
307
|
-
context: {
|
|
308
|
-
accountType: "basic" as const,
|
|
309
|
-
accountStatus: "active" as const,
|
|
310
|
-
creditScore: 750,
|
|
311
|
-
hasActiveLoans: false,
|
|
312
|
-
kycVerified: true
|
|
313
|
-
},
|
|
314
|
-
message: "I'd like to apply for a personal loan",
|
|
315
|
-
expectedRoute: "Loan Services",
|
|
316
|
-
shouldSkip: false
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
name: "Poor Credit - Loan Services (Should Skip)",
|
|
320
|
-
context: {
|
|
321
|
-
accountType: "basic" as const,
|
|
322
|
-
accountStatus: "active" as const,
|
|
323
|
-
creditScore: 550,
|
|
324
|
-
hasActiveLoans: false,
|
|
325
|
-
kycVerified: true
|
|
326
|
-
},
|
|
327
|
-
message: "I need a loan",
|
|
328
|
-
expectedRoute: "General Banking Support", // Should fallback
|
|
329
|
-
shouldSkip: true
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
name: "High Balance - Investment Services",
|
|
333
|
-
context: {
|
|
334
|
-
accountType: "premium" as const,
|
|
335
|
-
accountStatus: "active" as const,
|
|
336
|
-
accountBalance: 50000,
|
|
337
|
-
kycVerified: true
|
|
338
|
-
},
|
|
339
|
-
message: "I want to invest in stocks",
|
|
340
|
-
expectedRoute: "Investment Services",
|
|
341
|
-
shouldSkip: false
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
name: "Low Balance - Investment Services (Should Skip)",
|
|
345
|
-
context: {
|
|
346
|
-
accountType: "premium" as const,
|
|
347
|
-
accountStatus: "active" as const,
|
|
348
|
-
accountBalance: 5000,
|
|
349
|
-
kycVerified: true
|
|
350
|
-
},
|
|
351
|
-
message: "I want to invest in stocks",
|
|
352
|
-
expectedRoute: "General Banking Support", // Should fallback
|
|
353
|
-
shouldSkip: true
|
|
354
|
-
},
|
|
355
|
-
{
|
|
356
|
-
name: "Business Account - Business Services",
|
|
357
|
-
context: {
|
|
358
|
-
accountType: "business" as const,
|
|
359
|
-
accountStatus: "active" as const,
|
|
360
|
-
kycVerified: true
|
|
361
|
-
},
|
|
362
|
-
message: "I need business banking services",
|
|
363
|
-
expectedRoute: "Business Banking Services",
|
|
364
|
-
shouldSkip: false
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
name: "Personal Account - Business Services (Should Skip)",
|
|
368
|
-
context: {
|
|
369
|
-
accountType: "basic" as const,
|
|
370
|
-
accountStatus: "active" as const,
|
|
371
|
-
kycVerified: true
|
|
372
|
-
},
|
|
373
|
-
message: "I need business banking services",
|
|
374
|
-
expectedRoute: "General Banking Support", // Should fallback
|
|
375
|
-
shouldSkip: true
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
name: "Suspended Account - Account Recovery",
|
|
379
|
-
context: {
|
|
380
|
-
accountType: "basic" as const,
|
|
381
|
-
accountStatus: "suspended" as const,
|
|
382
|
-
kycVerified: false
|
|
383
|
-
},
|
|
384
|
-
message: "My account is suspended, I need help",
|
|
385
|
-
expectedRoute: "Account Recovery",
|
|
386
|
-
shouldSkip: false
|
|
387
|
-
},
|
|
388
|
-
];
|
|
389
|
-
|
|
390
|
-
for (const scenario of testScenarios) {
|
|
391
|
-
console.log(`🔍 Testing: ${scenario.name}`);
|
|
392
|
-
console.log(`📝 Message: "${scenario.message}"`);
|
|
393
|
-
console.log(`🎯 Should Skip Target Route: ${scenario.shouldSkip}`);
|
|
394
|
-
|
|
395
|
-
// Create agent with specific context for this scenario
|
|
396
|
-
const testAgent = new Agent<BankingContext, BankingData>({
|
|
397
|
-
name: "TestBankBot",
|
|
398
|
-
description: "Test bot for route skipIf patterns",
|
|
399
|
-
provider: new GeminiProvider({
|
|
400
|
-
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
401
|
-
model: "models/gemini-2.5-flash",
|
|
402
|
-
}),
|
|
403
|
-
context: {
|
|
404
|
-
customerId: "test_customer",
|
|
405
|
-
accountBalance: 10000,
|
|
406
|
-
hasActiveLoans: false,
|
|
407
|
-
region: "US",
|
|
408
|
-
...scenario.context,
|
|
409
|
-
} as BankingContext,
|
|
410
|
-
schema: bankingSchema,
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
// Copy routes from main agent using the new toOptions() method
|
|
414
|
-
agent.getRoutes().forEach(route => {
|
|
415
|
-
testAgent.createRoute(route.toOptions());
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
try {
|
|
419
|
-
const response = await testAgent.respond({
|
|
420
|
-
history: [
|
|
421
|
-
{
|
|
422
|
-
role: "user",
|
|
423
|
-
content: scenario.message,
|
|
424
|
-
name: "Customer",
|
|
425
|
-
},
|
|
426
|
-
],
|
|
427
|
-
});
|
|
428
|
-
|
|
429
|
-
const actualRoute = response.session?.currentRoute?.title || "No route";
|
|
430
|
-
console.log(`🎯 Routed to: ${actualRoute}`);
|
|
431
|
-
console.log(`✅ Expected: ${scenario.expectedRoute}`);
|
|
432
|
-
|
|
433
|
-
if (scenario.shouldSkip) {
|
|
434
|
-
console.log(`✅ Skip Logic: Route was correctly skipped`);
|
|
435
|
-
} else {
|
|
436
|
-
console.log(`✅ Skip Logic: Route was correctly allowed`);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
|
|
440
|
-
console.log();
|
|
441
|
-
} catch (error) {
|
|
442
|
-
console.log(`❌ Error: ${error}`);
|
|
443
|
-
console.log();
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
console.log("💡 Key Benefits of Route skipIf Patterns:");
|
|
448
|
-
console.log(" - Dynamic route exclusion based on business rules");
|
|
449
|
-
console.log(" - Access control and eligibility enforcement");
|
|
450
|
-
console.log(" - Prevents inappropriate routes from being considered");
|
|
451
|
-
console.log(" - Supports complex business logic with mixed conditions");
|
|
452
|
-
console.log(" - Evaluated before route when conditions for efficiency");
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
// Run demonstration
|
|
456
|
-
async function main() {
|
|
457
|
-
try {
|
|
458
|
-
await demonstrateRouteSkipIfPatterns();
|
|
459
|
-
} catch (error) {
|
|
460
|
-
console.error("Error:", error);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
465
|
-
main().catch(console.error);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
export { agent, demonstrateRouteSkipIfPatterns };
|
|
File without changes
|