@falai/agent 1.2.8 → 2.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 +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/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/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 +15 -202
- 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 +15 -0
- package/docs/migration/route-to-flow.md +560 -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/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,365 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Function-Only Conditions Example
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates using function-only conditions for programmatic routing.
|
|
5
|
-
* Function conditions are perfect when you need precise, deterministic routing logic
|
|
6
|
-
* based on data, state, or complex business rules.
|
|
7
|
-
*
|
|
8
|
-
* Key concepts:
|
|
9
|
-
* - Function conditions provide programmatic evaluation only
|
|
10
|
-
* - Return boolean values for routing decisions
|
|
11
|
-
* - Perfect for data-driven routing scenarios
|
|
12
|
-
* - Ideal for complex business logic and state-based routing
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
Agent,
|
|
17
|
-
GeminiProvider,
|
|
18
|
-
type Guideline,
|
|
19
|
-
} from "../../src/index";
|
|
20
|
-
|
|
21
|
-
// Context for an e-commerce system
|
|
22
|
-
interface EcommerceContext {
|
|
23
|
-
userId: string;
|
|
24
|
-
userTier: "bronze" | "silver" | "gold" | "platinum";
|
|
25
|
-
accountBalance: number;
|
|
26
|
-
region: string;
|
|
27
|
-
isBusinessAccount: boolean;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Order data schema
|
|
31
|
-
interface OrderData {
|
|
32
|
-
productId?: string;
|
|
33
|
-
quantity?: number;
|
|
34
|
-
totalAmount?: number;
|
|
35
|
-
shippingMethod?: "standard" | "express" | "overnight";
|
|
36
|
-
paymentMethod?: "credit" | "debit" | "paypal" | "crypto";
|
|
37
|
-
discountApplied?: boolean;
|
|
38
|
-
orderComplete?: boolean;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const orderSchema = {
|
|
42
|
-
type: "object",
|
|
43
|
-
properties: {
|
|
44
|
-
productId: { type: "string" },
|
|
45
|
-
quantity: { type: "number", minimum: 1 },
|
|
46
|
-
totalAmount: { type: "number", minimum: 0 },
|
|
47
|
-
shippingMethod: { type: "string", enum: ["standard", "express", "overnight"] },
|
|
48
|
-
paymentMethod: { type: "string", enum: ["credit", "debit", "paypal", "crypto"] },
|
|
49
|
-
discountApplied: { type: "boolean" },
|
|
50
|
-
orderComplete: { type: "boolean" },
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// Create agent with function-only condition examples
|
|
55
|
-
const agent = new Agent<EcommerceContext, OrderData>({
|
|
56
|
-
name: "EcommerceBot",
|
|
57
|
-
description: "An e-commerce bot that uses programmatic logic for routing decisions",
|
|
58
|
-
provider: new GeminiProvider({
|
|
59
|
-
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
60
|
-
model: "models/gemini-2.5-flash",
|
|
61
|
-
}),
|
|
62
|
-
context: {
|
|
63
|
-
userId: "user_12345",
|
|
64
|
-
userTier: "gold",
|
|
65
|
-
accountBalance: 1500.00,
|
|
66
|
-
region: "US",
|
|
67
|
-
isBusinessAccount: false,
|
|
68
|
-
},
|
|
69
|
-
schema: orderSchema,
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// Guidelines with function-only conditions for programmatic logic
|
|
73
|
-
const guidelines: Guideline<EcommerceContext>[] = [
|
|
74
|
-
{
|
|
75
|
-
// Function-only condition - check user tier for premium features
|
|
76
|
-
condition: (ctx) => ctx.context?.userTier === "platinum",
|
|
77
|
-
action: "Offer premium features like white-glove service, priority support, and exclusive products",
|
|
78
|
-
tags: ["premium", "vip"],
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
// Function-only condition - check account balance for payment options
|
|
82
|
-
condition: (ctx) => (ctx.context?.accountBalance || 0) < 100,
|
|
83
|
-
action: "Suggest payment plans or financing options for large purchases",
|
|
84
|
-
tags: ["financing", "payment"],
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
// Function-only condition - check business account status
|
|
88
|
-
condition: (ctx) => ctx.context?.isBusinessAccount === true,
|
|
89
|
-
action: "Offer bulk pricing, invoicing options, and business-specific features",
|
|
90
|
-
tags: ["business", "bulk"],
|
|
91
|
-
},
|
|
92
|
-
];
|
|
93
|
-
|
|
94
|
-
// Add guidelines to agent
|
|
95
|
-
guidelines.forEach(guideline => agent.createGuideline(guideline));
|
|
96
|
-
|
|
97
|
-
// Route 1: VIP Customer Route - Function-only condition
|
|
98
|
-
agent.createRoute({
|
|
99
|
-
title: "VIP Customer Service",
|
|
100
|
-
description: "Special handling for premium customers",
|
|
101
|
-
// Function-only condition - programmatic tier check
|
|
102
|
-
when: (ctx) => ctx.context?.userTier === "platinum" || ctx.context?.userTier === "gold",
|
|
103
|
-
// Skip if customer has active issues
|
|
104
|
-
skipIf: (ctx) => (ctx.data?.totalAmount || 0) > (ctx.context?.accountBalance || 0),
|
|
105
|
-
steps: [
|
|
106
|
-
{
|
|
107
|
-
id: "vip_greeting",
|
|
108
|
-
description: "Provide VIP greeting and priority service",
|
|
109
|
-
prompt: "Welcome back! As a valued VIP customer, you have access to our premium services. How can I assist you today?",
|
|
110
|
-
},
|
|
111
|
-
],
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
// Route 2: Large Order Processing - Function-only condition
|
|
115
|
-
agent.createRoute({
|
|
116
|
-
title: "Large Order Processing",
|
|
117
|
-
description: "Handle high-value orders with special processing",
|
|
118
|
-
// Function-only condition - check order value
|
|
119
|
-
when: (ctx) => (ctx.data?.totalAmount || 0) > 1000,
|
|
120
|
-
// Skip if insufficient balance
|
|
121
|
-
skipIf: (ctx) => (ctx.data?.totalAmount || 0) > (ctx.context?.accountBalance || 0) * 2,
|
|
122
|
-
requiredFields: ["productId", "quantity", "totalAmount"],
|
|
123
|
-
optionalFields: ["shippingMethod", "paymentMethod"],
|
|
124
|
-
steps: [
|
|
125
|
-
{
|
|
126
|
-
id: "verify_large_order",
|
|
127
|
-
description: "Verify large order details",
|
|
128
|
-
prompt: "I see you're placing a large order. Let me verify the details and check for any available discounts.",
|
|
129
|
-
collect: ["productId", "quantity", "totalAmount"],
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
id: "apply_bulk_discount",
|
|
133
|
-
description: "Apply bulk discounts if eligible",
|
|
134
|
-
prompt: "Based on your order size, you're eligible for bulk pricing. Let me apply the best available discount.",
|
|
135
|
-
requires: ["totalAmount"],
|
|
136
|
-
},
|
|
137
|
-
],
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
// Route 3: Business Account Route - Function-only condition
|
|
141
|
-
agent.createRoute({
|
|
142
|
-
title: "Business Account Services",
|
|
143
|
-
description: "Specialized services for business customers",
|
|
144
|
-
// Function-only condition - check business account status
|
|
145
|
-
when: (ctx) => ctx.context?.isBusinessAccount === true,
|
|
146
|
-
// Skip if personal shopping (small quantities)
|
|
147
|
-
skipIf: (ctx) => (ctx.data?.quantity || 0) < 10,
|
|
148
|
-
steps: [
|
|
149
|
-
{
|
|
150
|
-
id: "business_options",
|
|
151
|
-
description: "Present business-specific options",
|
|
152
|
-
prompt: "I see you're shopping with a business account. Would you like to see bulk pricing, invoicing options, or set up recurring orders?",
|
|
153
|
-
},
|
|
154
|
-
],
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
// Route 4: Regional Compliance Route - Function-only condition
|
|
158
|
-
agent.createRoute({
|
|
159
|
-
title: "Regional Compliance",
|
|
160
|
-
description: "Handle region-specific requirements and restrictions",
|
|
161
|
-
// Function-only condition - check region for compliance
|
|
162
|
-
when: (ctx) => ctx.context?.region === "EU" || ctx.context?.region === "CA",
|
|
163
|
-
// Skip if already compliant
|
|
164
|
-
skipIf: (ctx) => ctx.data?.orderComplete === true,
|
|
165
|
-
steps: [
|
|
166
|
-
{
|
|
167
|
-
id: "compliance_check",
|
|
168
|
-
description: "Verify regional compliance requirements",
|
|
169
|
-
prompt: "I need to verify some regional compliance requirements for your order. This will just take a moment.",
|
|
170
|
-
},
|
|
171
|
-
],
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
// Route 5: Payment Method Route - Function-only condition
|
|
175
|
-
agent.createRoute({
|
|
176
|
-
title: "Payment Processing",
|
|
177
|
-
description: "Handle payment method selection and processing",
|
|
178
|
-
// Function-only condition - check if payment method is needed
|
|
179
|
-
when: (ctx) => !ctx.data?.paymentMethod && (ctx.data?.totalAmount || 0) > 0,
|
|
180
|
-
// Skip if order is already complete
|
|
181
|
-
skipIf: (ctx) => ctx.data?.orderComplete === true,
|
|
182
|
-
requiredFields: ["paymentMethod"],
|
|
183
|
-
steps: [
|
|
184
|
-
{
|
|
185
|
-
id: "select_payment_method",
|
|
186
|
-
description: "Help customer select payment method",
|
|
187
|
-
prompt: "What payment method would you like to use for this order?",
|
|
188
|
-
collect: ["paymentMethod"],
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
id: "process_payment",
|
|
192
|
-
description: "Process the payment",
|
|
193
|
-
prompt: "Processing your payment now. Please wait a moment...",
|
|
194
|
-
requires: ["paymentMethod", "totalAmount"],
|
|
195
|
-
},
|
|
196
|
-
],
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
// Route 6: Shipping Options Route - Function-only condition
|
|
200
|
-
agent.createRoute({
|
|
201
|
-
title: "Shipping Selection",
|
|
202
|
-
description: "Handle shipping method selection based on customer tier and order value",
|
|
203
|
-
// Function-only condition - check if shipping is needed
|
|
204
|
-
when: (ctx) => Boolean(!ctx.data?.shippingMethod && ctx.data?.productId),
|
|
205
|
-
// Skip if digital product (no shipping needed)
|
|
206
|
-
skipIf: (ctx) => Boolean(ctx.data?.productId?.startsWith("digital_")),
|
|
207
|
-
optionalFields: ["shippingMethod"],
|
|
208
|
-
steps: [
|
|
209
|
-
{
|
|
210
|
-
id: "shipping_options",
|
|
211
|
-
description: "Present shipping options based on customer tier",
|
|
212
|
-
prompt: "Let me show you the available shipping options for your order.",
|
|
213
|
-
collect: ["shippingMethod"],
|
|
214
|
-
// Function-only when condition for step
|
|
215
|
-
when: (ctx) => {
|
|
216
|
-
// VIP customers get free express shipping
|
|
217
|
-
if (ctx.context?.userTier === "platinum" || ctx.context?.userTier === "gold") {
|
|
218
|
-
return true;
|
|
219
|
-
}
|
|
220
|
-
// Regular customers need to choose
|
|
221
|
-
return (ctx.data?.totalAmount || 0) > 50;
|
|
222
|
-
},
|
|
223
|
-
},
|
|
224
|
-
],
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
// Route 7: Order Completion Route - Function-only condition
|
|
228
|
-
agent.createRoute({
|
|
229
|
-
title: "Order Completion",
|
|
230
|
-
description: "Finalize and complete the order",
|
|
231
|
-
// Function-only condition - check if order is ready to complete
|
|
232
|
-
when: (ctx) => {
|
|
233
|
-
return !!(ctx.data?.productId &&
|
|
234
|
-
ctx.data?.quantity &&
|
|
235
|
-
ctx.data?.totalAmount &&
|
|
236
|
-
ctx.data?.paymentMethod &&
|
|
237
|
-
!ctx.data?.orderComplete);
|
|
238
|
-
},
|
|
239
|
-
// Never skip order completion
|
|
240
|
-
skipIf: ()=>false,
|
|
241
|
-
steps: [
|
|
242
|
-
{
|
|
243
|
-
id: "finalize_order",
|
|
244
|
-
description: "Complete the order",
|
|
245
|
-
prompt: "Perfect! Let me finalize your order now.",
|
|
246
|
-
requires: ["productId", "quantity", "totalAmount", "paymentMethod"],
|
|
247
|
-
},
|
|
248
|
-
],
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
// Demonstration function
|
|
252
|
-
async function demonstrateFunctionOnlyConditions() {
|
|
253
|
-
console.log("=== Function-Only Conditions Demo ===\n");
|
|
254
|
-
console.log("This demo shows how function conditions enable precise, programmatic routing decisions.\n");
|
|
255
|
-
|
|
256
|
-
const testScenarios = [
|
|
257
|
-
{
|
|
258
|
-
name: "VIP Customer",
|
|
259
|
-
context: { userTier: "platinum" as const, accountBalance: 5000, region: "US", isBusinessAccount: false },
|
|
260
|
-
message: "I'd like to place an order",
|
|
261
|
-
expectedRoute: "VIP Customer Service"
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
name: "Large Order",
|
|
265
|
-
context: { userTier: "silver" as const, accountBalance: 2000, region: "US", isBusinessAccount: false },
|
|
266
|
-
data: { totalAmount: 1500 },
|
|
267
|
-
message: "I want to buy this expensive item",
|
|
268
|
-
expectedRoute: "Large Order Processing"
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
name: "Business Account",
|
|
272
|
-
context: { userTier: "bronze" as const, accountBalance: 1000, region: "US", isBusinessAccount: true },
|
|
273
|
-
message: "I need to place a bulk order for my company",
|
|
274
|
-
expectedRoute: "Business Account Services"
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
name: "EU Customer",
|
|
278
|
-
context: { userTier: "silver" as const, accountBalance: 800, region: "EU", isBusinessAccount: false },
|
|
279
|
-
message: "I want to place an order",
|
|
280
|
-
expectedRoute: "Regional Compliance"
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
name: "Payment Needed",
|
|
284
|
-
context: { userTier: "bronze" as const, accountBalance: 500, region: "US", isBusinessAccount: false },
|
|
285
|
-
data: { productId: "prod_123", quantity: 2, totalAmount: 200 },
|
|
286
|
-
message: "How do I pay for this?",
|
|
287
|
-
expectedRoute: "Payment Processing"
|
|
288
|
-
},
|
|
289
|
-
{
|
|
290
|
-
name: "Shipping Selection",
|
|
291
|
-
context: { userTier: "gold" as const, accountBalance: 1200, region: "US", isBusinessAccount: false },
|
|
292
|
-
data: { productId: "prod_456", quantity: 1, totalAmount: 150, paymentMethod: "credit" as const },
|
|
293
|
-
message: "What shipping options do I have?",
|
|
294
|
-
expectedRoute: "Shipping Selection"
|
|
295
|
-
},
|
|
296
|
-
];
|
|
297
|
-
|
|
298
|
-
for (const scenario of testScenarios) {
|
|
299
|
-
console.log(`🔍 Testing: ${scenario.name}`);
|
|
300
|
-
console.log(`📝 Message: "${scenario.message}"`);
|
|
301
|
-
|
|
302
|
-
// Create agent with specific context for this scenario
|
|
303
|
-
const testAgent = new Agent<EcommerceContext, OrderData>({
|
|
304
|
-
name: "TestBot",
|
|
305
|
-
description: "Test bot for function conditions",
|
|
306
|
-
provider: new GeminiProvider({
|
|
307
|
-
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
308
|
-
model: "models/gemini-2.5-flash",
|
|
309
|
-
}),
|
|
310
|
-
context: {
|
|
311
|
-
userId: "test_user",
|
|
312
|
-
...scenario.context,
|
|
313
|
-
},
|
|
314
|
-
schema: orderSchema,
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
// Copy routes from main agent
|
|
318
|
-
agent.getRoutes().forEach(route => {
|
|
319
|
-
testAgent.createRoute(route.toOptions());
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
try {
|
|
323
|
-
const response = await testAgent.respond({
|
|
324
|
-
history: [
|
|
325
|
-
{
|
|
326
|
-
role: "user",
|
|
327
|
-
content: scenario.message,
|
|
328
|
-
name: "Customer",
|
|
329
|
-
},
|
|
330
|
-
],
|
|
331
|
-
session: scenario.data ? { id: "test-scenario", data: scenario.data } : undefined,
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
console.log(`🎯 Routed to: ${response.session?.currentRoute?.title || "No route"}`);
|
|
335
|
-
console.log(`✅ Expected: ${scenario.expectedRoute}`);
|
|
336
|
-
console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
|
|
337
|
-
console.log();
|
|
338
|
-
} catch (error) {
|
|
339
|
-
console.log(`❌ Error: ${error}`);
|
|
340
|
-
console.log();
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
console.log("💡 Key Benefits of Function-Only Conditions:");
|
|
345
|
-
console.log(" - Precise, deterministic routing logic");
|
|
346
|
-
console.log(" - Access to full context and data for decisions");
|
|
347
|
-
console.log(" - Complex business rules and state-based routing");
|
|
348
|
-
console.log(" - Type-safe condition evaluation");
|
|
349
|
-
console.log(" - Perfect for data-driven applications");
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// Run demonstration
|
|
353
|
-
async function main() {
|
|
354
|
-
try {
|
|
355
|
-
await demonstrateFunctionOnlyConditions();
|
|
356
|
-
} catch (error) {
|
|
357
|
-
console.error("Error:", error);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
362
|
-
main().catch(console.error);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
export { agent, demonstrateFunctionOnlyConditions };
|