@falai/agent 1.2.7 → 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 +1196 -1015
- 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 +524 -134
- 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/GeminiProvider.d.ts +3 -3
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +16 -14
- package/dist/cjs/providers/GeminiProvider.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 +1198 -1017
- 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 +524 -135
- 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/GeminiProvider.d.ts +3 -3
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +16 -14
- package/dist/providers/GeminiProvider.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 +1458 -1241
- package/src/core/ResponsePipeline.ts +675 -173
- 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/GeminiProvider.ts +17 -15
- 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,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* String-Only Conditions Example
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates using string-only conditions for AI context-driven routing.
|
|
5
|
-
* String conditions are perfect when you want the AI to make routing decisions based
|
|
6
|
-
* on natural language understanding rather than programmatic logic.
|
|
7
|
-
*
|
|
8
|
-
* Key concepts:
|
|
9
|
-
* - String conditions provide AI context only
|
|
10
|
-
* - No programmatic evaluation - pure AI decision making
|
|
11
|
-
* - Perfect for natural language routing scenarios
|
|
12
|
-
* - Ideal for conversational flows where intent matters more than data
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
Agent,
|
|
17
|
-
GeminiProvider,
|
|
18
|
-
type Guideline,
|
|
19
|
-
} from "../../src/index";
|
|
20
|
-
|
|
21
|
-
// Context for a customer service chatbot
|
|
22
|
-
interface CustomerContext {
|
|
23
|
-
customerId: string;
|
|
24
|
-
customerTier: "basic" | "premium" | "enterprise";
|
|
25
|
-
previousInteractions: number;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Simple data schema for customer interactions
|
|
29
|
-
interface CustomerData {
|
|
30
|
-
issueType?: string;
|
|
31
|
-
satisfactionRating?: number;
|
|
32
|
-
followUpNeeded?: boolean;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const customerSchema = {
|
|
36
|
-
type: "object",
|
|
37
|
-
properties: {
|
|
38
|
-
issueType: { type: "string" },
|
|
39
|
-
satisfactionRating: { type: "number", minimum: 1, maximum: 5 },
|
|
40
|
-
followUpNeeded: { type: "boolean" },
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
// Create agent with string-only condition examples
|
|
45
|
-
const agent = new Agent<CustomerContext, CustomerData>({
|
|
46
|
-
name: "CustomerServiceBot",
|
|
47
|
-
description: "A customer service bot that uses AI context for routing decisions",
|
|
48
|
-
provider: new GeminiProvider({
|
|
49
|
-
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
50
|
-
model: "models/gemini-2.5-flash",
|
|
51
|
-
}),
|
|
52
|
-
context: {
|
|
53
|
-
customerId: "cust_12345",
|
|
54
|
-
customerTier: "premium",
|
|
55
|
-
previousInteractions: 3,
|
|
56
|
-
},
|
|
57
|
-
schema: customerSchema,
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
// Guidelines with string-only conditions for AI context
|
|
61
|
-
const guidelines: Guideline<CustomerContext>[] = [
|
|
62
|
-
{
|
|
63
|
-
// String-only condition - AI interprets the context
|
|
64
|
-
condition: "Customer is expressing frustration or anger",
|
|
65
|
-
action: "Acknowledge their feelings, apologize for the inconvenience, and escalate to a human agent if needed",
|
|
66
|
-
tags: ["empathy", "escalation"],
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
// String-only condition - AI understands satisfaction cues
|
|
70
|
-
condition: "Customer seems satisfied with the resolution",
|
|
71
|
-
action: "Thank them for their patience and ask if there's anything else you can help with",
|
|
72
|
-
tags: ["satisfaction", "closure"],
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
// String-only condition - AI detects urgency
|
|
76
|
-
condition: "Customer indicates this is an urgent or time-sensitive issue",
|
|
77
|
-
action: "Prioritize their request and provide immediate assistance or escalation",
|
|
78
|
-
tags: ["urgency", "priority"],
|
|
79
|
-
},
|
|
80
|
-
];
|
|
81
|
-
|
|
82
|
-
// Add guidelines to agent
|
|
83
|
-
guidelines.forEach(guideline => agent.createGuideline(guideline));
|
|
84
|
-
|
|
85
|
-
// Route 1: Billing Issues - String-only condition
|
|
86
|
-
agent.createRoute({
|
|
87
|
-
title: "Billing Support",
|
|
88
|
-
description: "Handle billing questions and payment issues",
|
|
89
|
-
// String-only condition - AI interprets billing-related intent
|
|
90
|
-
when: "Customer has questions about billing, payments, charges, or invoices",
|
|
91
|
-
steps: [
|
|
92
|
-
{
|
|
93
|
-
id: "understand_billing_issue",
|
|
94
|
-
description: "Understand the specific billing concern",
|
|
95
|
-
prompt: "I'd be happy to help with your billing question. Can you tell me more about the specific issue you're experiencing?",
|
|
96
|
-
collect: ["issueType"],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
id: "resolve_billing",
|
|
100
|
-
description: "Provide billing assistance",
|
|
101
|
-
prompt: "Let me help resolve your billing concern. Based on what you've told me, here's what I can do...",
|
|
102
|
-
requires: ["issueType"],
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// Route 2: Technical Support - String-only condition
|
|
108
|
-
agent.createRoute({
|
|
109
|
-
title: "Technical Support",
|
|
110
|
-
description: "Help with technical problems and troubleshooting",
|
|
111
|
-
// String-only condition - AI understands technical issues
|
|
112
|
-
when: "Customer is experiencing technical difficulties, errors, or product malfunctions",
|
|
113
|
-
steps: [
|
|
114
|
-
{
|
|
115
|
-
id: "diagnose_technical_issue",
|
|
116
|
-
description: "Understand the technical problem",
|
|
117
|
-
prompt: "I'm here to help with your technical issue. Can you describe what's happening and when the problem started?",
|
|
118
|
-
collect: ["issueType"],
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
id: "provide_technical_solution",
|
|
122
|
-
description: "Offer technical assistance",
|
|
123
|
-
prompt: "Based on your description, let me walk you through some troubleshooting steps...",
|
|
124
|
-
requires: ["issueType"],
|
|
125
|
-
},
|
|
126
|
-
],
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
// Route 3: Account Management - String-only condition
|
|
130
|
-
agent.createRoute({
|
|
131
|
-
title: "Account Management",
|
|
132
|
-
description: "Handle account changes, updates, and settings",
|
|
133
|
-
// String-only condition - AI recognizes account-related requests
|
|
134
|
-
when: "Customer wants to make changes to their account, update information, or modify settings",
|
|
135
|
-
steps: [
|
|
136
|
-
{
|
|
137
|
-
id: "identify_account_request",
|
|
138
|
-
description: "Understand what account changes are needed",
|
|
139
|
-
prompt: "I can help you with your account. What changes would you like to make?",
|
|
140
|
-
collect: ["issueType"],
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
id: "process_account_changes",
|
|
144
|
-
description: "Assist with account modifications",
|
|
145
|
-
prompt: "I'll help you make those account changes. Let me guide you through the process...",
|
|
146
|
-
requires: ["issueType"],
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
// Route 4: General Inquiry - String-only condition
|
|
152
|
-
agent.createRoute({
|
|
153
|
-
title: "General Information",
|
|
154
|
-
description: "Answer general questions about products and services",
|
|
155
|
-
// String-only condition - AI handles general questions
|
|
156
|
-
when: "Customer has general questions about products, services, or company information",
|
|
157
|
-
steps: [
|
|
158
|
-
{
|
|
159
|
-
id: "answer_general_question",
|
|
160
|
-
description: "Provide information and answer questions",
|
|
161
|
-
prompt: "I'd be happy to answer your question. Let me provide you with the information you need...",
|
|
162
|
-
},
|
|
163
|
-
],
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
// Route 5: Feedback Collection - String-only condition
|
|
167
|
-
agent.createRoute({
|
|
168
|
-
title: "Customer Feedback",
|
|
169
|
-
description: "Collect customer feedback and satisfaction ratings",
|
|
170
|
-
// String-only condition - AI detects feedback intent
|
|
171
|
-
when: "Customer wants to provide feedback, leave a review, or share their experience",
|
|
172
|
-
requiredFields: ["satisfactionRating"],
|
|
173
|
-
optionalFields: ["followUpNeeded"],
|
|
174
|
-
steps: [
|
|
175
|
-
{
|
|
176
|
-
id: "collect_satisfaction_rating",
|
|
177
|
-
description: "Ask for satisfaction rating",
|
|
178
|
-
prompt: "Thank you for wanting to share feedback! On a scale of 1 to 5, how satisfied are you with our service today?",
|
|
179
|
-
collect: ["satisfactionRating"],
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
id: "ask_for_follow_up",
|
|
183
|
-
description: "Check if follow-up is needed",
|
|
184
|
-
prompt: "Thank you for the rating! Would you like someone from our team to follow up with you about your experience?",
|
|
185
|
-
collect: ["followUpNeeded"],
|
|
186
|
-
requires: ["satisfactionRating"],
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
id: "thank_for_feedback",
|
|
190
|
-
description: "Thank customer for feedback",
|
|
191
|
-
prompt: "We really appreciate your feedback! It helps us improve our service for all customers.",
|
|
192
|
-
requires: ["satisfactionRating"],
|
|
193
|
-
},
|
|
194
|
-
],
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
// Route 6: Greeting and Welcome - String-only condition
|
|
198
|
-
agent.createRoute({
|
|
199
|
-
title: "Welcome and Greeting",
|
|
200
|
-
description: "Welcome new customers and handle greetings",
|
|
201
|
-
// String-only condition - AI recognizes greetings and welcomes
|
|
202
|
-
when: "Customer is greeting, saying hello, or appears to be new to the service",
|
|
203
|
-
steps: [
|
|
204
|
-
{
|
|
205
|
-
id: "welcome_customer",
|
|
206
|
-
description: "Provide warm welcome",
|
|
207
|
-
prompt: "Hello! Welcome to our customer service. I'm here to help you with any questions or concerns you might have. How can I assist you today?",
|
|
208
|
-
},
|
|
209
|
-
],
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
// Demonstration function
|
|
213
|
-
async function demonstrateStringOnlyConditions() {
|
|
214
|
-
console.log("=== String-Only Conditions Demo ===\n");
|
|
215
|
-
console.log("This demo shows how string conditions let the AI make routing decisions based on natural language understanding.\n");
|
|
216
|
-
|
|
217
|
-
const testScenarios = [
|
|
218
|
-
{
|
|
219
|
-
name: "Billing Issue",
|
|
220
|
-
message: "Hi, I was charged twice for my subscription this month and I need help getting a refund",
|
|
221
|
-
expectedRoute: "Billing Support"
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
name: "Technical Problem",
|
|
225
|
-
message: "My app keeps crashing every time I try to upload a file, can you help me fix this?",
|
|
226
|
-
expectedRoute: "Technical Support"
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
name: "Account Changes",
|
|
230
|
-
message: "I need to update my email address and change my password on my account",
|
|
231
|
-
expectedRoute: "Account Management"
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
name: "General Question",
|
|
235
|
-
message: "What are your business hours and do you offer phone support?",
|
|
236
|
-
expectedRoute: "General Information"
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
name: "Feedback",
|
|
240
|
-
message: "I had a great experience with your support team yesterday and wanted to leave some positive feedback",
|
|
241
|
-
expectedRoute: "Customer Feedback"
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
name: "Greeting",
|
|
245
|
-
message: "Hello! I'm new to your service and not sure where to start",
|
|
246
|
-
expectedRoute: "Welcome and Greeting"
|
|
247
|
-
},
|
|
248
|
-
];
|
|
249
|
-
|
|
250
|
-
for (const scenario of testScenarios) {
|
|
251
|
-
console.log(`🔍 Testing: ${scenario.name}`);
|
|
252
|
-
console.log(`📝 Message: "${scenario.message}"`);
|
|
253
|
-
|
|
254
|
-
try {
|
|
255
|
-
const response = await agent.respond({
|
|
256
|
-
history: [
|
|
257
|
-
{
|
|
258
|
-
role: "user",
|
|
259
|
-
content: scenario.message,
|
|
260
|
-
name: "Customer",
|
|
261
|
-
},
|
|
262
|
-
],
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
console.log(`🎯 Routed to: ${response.session?.currentRoute?.title || "No route"}`);
|
|
266
|
-
console.log(`✅ Expected: ${scenario.expectedRoute}`);
|
|
267
|
-
console.log(`🤖 Response: ${response.message.substring(0, 100)}...`);
|
|
268
|
-
console.log();
|
|
269
|
-
} catch (error) {
|
|
270
|
-
console.log(`❌ Error: ${error}`);
|
|
271
|
-
console.log();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
console.log("💡 Key Benefits of String-Only Conditions:");
|
|
276
|
-
console.log(" - Natural language understanding for routing");
|
|
277
|
-
console.log(" - No need to write complex programmatic logic");
|
|
278
|
-
console.log(" - AI handles intent recognition automatically");
|
|
279
|
-
console.log(" - Easy to maintain and update conditions");
|
|
280
|
-
console.log(" - Perfect for conversational, intent-based routing");
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Run demonstration
|
|
284
|
-
async function main() {
|
|
285
|
-
try {
|
|
286
|
-
await demonstrateStringOnlyConditions();
|
|
287
|
-
} catch (error) {
|
|
288
|
-
console.error("Error:", error);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
293
|
-
main().catch(console.error);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
export { agent, demonstrateStringOnlyConditions };
|
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Route Transitions Example
|
|
3
|
-
*
|
|
4
|
-
* Demonstrates how to use onComplete to automatically transition between routes
|
|
5
|
-
* after a route completes, enabling flows like:
|
|
6
|
-
* - Post-booking feedback collection
|
|
7
|
-
* - Upsell after purchase
|
|
8
|
-
* - Satisfaction surveys after support
|
|
9
|
-
*
|
|
10
|
-
* NEW: Enhanced with flexible ConditionTemplate patterns:
|
|
11
|
-
* - Mixed route conditions: ["AI context", (ctx) => programmatic_check]
|
|
12
|
-
* - Route skipIf examples: Dynamic route exclusion based on state
|
|
13
|
-
* - Step skipIf examples: Enhanced conditional step skipping
|
|
14
|
-
* - AI context strings in action for better routing decisions
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import {
|
|
18
|
-
Agent,
|
|
19
|
-
GeminiProvider,
|
|
20
|
-
History,
|
|
21
|
-
type SessionState,
|
|
22
|
-
} from "../../src/index";
|
|
23
|
-
|
|
24
|
-
// Type definitions for our unified data collection
|
|
25
|
-
interface UnifiedBookingData {
|
|
26
|
-
// Booking fields
|
|
27
|
-
hotelName: string;
|
|
28
|
-
date: string;
|
|
29
|
-
guests: number;
|
|
30
|
-
// Feedback fields
|
|
31
|
-
rating: number;
|
|
32
|
-
comments?: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function main() {
|
|
36
|
-
// Define unified schema for both booking and feedback data
|
|
37
|
-
const unifiedSchema = {
|
|
38
|
-
type: "object",
|
|
39
|
-
properties: {
|
|
40
|
-
// Booking fields
|
|
41
|
-
hotelName: { type: "string" },
|
|
42
|
-
date: { type: "string" },
|
|
43
|
-
guests: { type: "number" },
|
|
44
|
-
// Feedback fields
|
|
45
|
-
rating: { type: "number", minimum: 1, maximum: 5 },
|
|
46
|
-
comments: { type: "string" },
|
|
47
|
-
},
|
|
48
|
-
required: ["hotelName", "date", "guests"], // Only booking fields are required initially
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// Create agent with unified schema
|
|
52
|
-
const agent = new Agent<any, UnifiedBookingData>({
|
|
53
|
-
name: "HotelBot",
|
|
54
|
-
description: "A hotel booking assistant with feedback collection",
|
|
55
|
-
provider: new GeminiProvider({
|
|
56
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
57
|
-
model: "models/gemini-2.5-flash",
|
|
58
|
-
}),
|
|
59
|
-
debug: true,
|
|
60
|
-
schema: unifiedSchema,
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Route 1: Hotel Booking with automatic transition to feedback
|
|
64
|
-
agent.createRoute({
|
|
65
|
-
title: "Book Hotel",
|
|
66
|
-
description: "Collects hotel booking information",
|
|
67
|
-
// Mixed condition: AI context + programmatic validation
|
|
68
|
-
when: [
|
|
69
|
-
"User wants to book a hotel",
|
|
70
|
-
(ctx) => {
|
|
71
|
-
const event = ctx.history?.[ctx.history.length - 1]
|
|
72
|
-
if(event && "content" in event){
|
|
73
|
-
const message = (event.content as string).toLocaleLowerCase() || '';
|
|
74
|
-
return message.includes('book') || message.includes('hotel') || message.includes('reservation');
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
],
|
|
79
|
-
// Skip if user already has a booking
|
|
80
|
-
skipIf: [
|
|
81
|
-
"user already has an active booking",
|
|
82
|
-
(ctx) => !!ctx.data?.hotelName && !!ctx.data?.date
|
|
83
|
-
],
|
|
84
|
-
// NEW: Required fields for route completion
|
|
85
|
-
requiredFields: ["hotelName", "date", "guests"],
|
|
86
|
-
// Sequential steps for booking flow
|
|
87
|
-
steps: [
|
|
88
|
-
{
|
|
89
|
-
id: "ask_hotel",
|
|
90
|
-
description: "Ask for hotel preference",
|
|
91
|
-
prompt: "Which hotel would you like to book?",
|
|
92
|
-
collect: ["hotelName"],
|
|
93
|
-
// String-only skipIf for AI context
|
|
94
|
-
skipIf: "hotel already selected",
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
id: "ask_date",
|
|
98
|
-
description: "Ask for booking date",
|
|
99
|
-
prompt: "What date would you like to book for?",
|
|
100
|
-
collect: ["date"],
|
|
101
|
-
requires: ["hotelName"],
|
|
102
|
-
// Function-only skipIf for programmatic check
|
|
103
|
-
skipIf: (data) => !!data.context.date,
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
id: "ask_guests",
|
|
107
|
-
description: "Ask for number of guests",
|
|
108
|
-
prompt: "How many guests will be staying?",
|
|
109
|
-
collect: ["guests"],
|
|
110
|
-
requires: ["hotelName", "date"],
|
|
111
|
-
// Mixed skipIf: AI context + programmatic logic
|
|
112
|
-
skipIf: [
|
|
113
|
-
"guest count already provided",
|
|
114
|
-
(data) => data.context.guests !== undefined
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
id: "confirm_booking",
|
|
119
|
-
description: "Confirm the booking",
|
|
120
|
-
prompt:
|
|
121
|
-
"Confirm the booking with a summary of the hotel, date, and number of guests. Be enthusiastic!",
|
|
122
|
-
requires: ["hotelName", "date", "guests"],
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
// Automatic transition to feedback collection when booking completes
|
|
126
|
-
onComplete: "Collect Feedback",
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
// Route 2: Feedback Collection
|
|
130
|
-
agent.createRoute({
|
|
131
|
-
title: "Collect Feedback",
|
|
132
|
-
description: "Collects user feedback after booking",
|
|
133
|
-
// Function-only condition for programmatic logic
|
|
134
|
-
when: (ctx) => {
|
|
135
|
-
// Only activate if we have booking data but no feedback yet
|
|
136
|
-
return !!ctx.data?.hotelName && ctx.data?.rating === undefined;
|
|
137
|
-
},
|
|
138
|
-
// Skip if feedback already collected
|
|
139
|
-
skipIf: [
|
|
140
|
-
"feedback already provided",
|
|
141
|
-
(ctx) => ctx.data?.rating !== undefined
|
|
142
|
-
],
|
|
143
|
-
// NEW: Required fields for route completion
|
|
144
|
-
requiredFields: ["rating"],
|
|
145
|
-
// NEW: Optional fields that enhance the experience
|
|
146
|
-
optionalFields: ["comments"],
|
|
147
|
-
// Sequential steps for feedback collection
|
|
148
|
-
steps: [
|
|
149
|
-
{
|
|
150
|
-
id: "ask_rating",
|
|
151
|
-
description: "Ask for rating",
|
|
152
|
-
prompt: "How would you rate your booking experience from 1 to 5?",
|
|
153
|
-
collect: ["rating"],
|
|
154
|
-
// Mixed skipIf: AI context + programmatic check
|
|
155
|
-
skipIf: [
|
|
156
|
-
"rating already provided",
|
|
157
|
-
(data) => data.context.rating !== undefined
|
|
158
|
-
],
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
id: "ask_comments",
|
|
162
|
-
description: "Ask for comments",
|
|
163
|
-
prompt:
|
|
164
|
-
"Would you like to share any additional comments about your experience?",
|
|
165
|
-
collect: ["comments"],
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
id: "thank_feedback",
|
|
169
|
-
description: "Thank user for feedback",
|
|
170
|
-
prompt:
|
|
171
|
-
"Thank the user warmly for their feedback and let them know their input is valuable",
|
|
172
|
-
requires: ["rating"],
|
|
173
|
-
},
|
|
174
|
-
],
|
|
175
|
-
// End conversation after feedback is collected
|
|
176
|
-
onComplete: undefined, // No transition - conversation ends
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
console.log("\n=== Route Transitions Example ===\n");
|
|
180
|
-
|
|
181
|
-
// Conversation 1: User provides all booking info at once
|
|
182
|
-
let session: SessionState | undefined;
|
|
183
|
-
let history: History = [
|
|
184
|
-
{
|
|
185
|
-
role: "user" as const,
|
|
186
|
-
content: "I want to book the Grand Hotel for 2 guests on December 25th",
|
|
187
|
-
name: "Alice",
|
|
188
|
-
},
|
|
189
|
-
];
|
|
190
|
-
|
|
191
|
-
console.log("User:", history[0].content);
|
|
192
|
-
|
|
193
|
-
// First response - should handle booking
|
|
194
|
-
const response1 = await agent.respond({ history, session });
|
|
195
|
-
console.log("\nBot:", response1.message);
|
|
196
|
-
console.log("Route complete?", response1.isRouteComplete);
|
|
197
|
-
console.log(
|
|
198
|
-
"Pending transition?",
|
|
199
|
-
response1.session?.pendingTransition?.targetRouteId
|
|
200
|
-
);
|
|
201
|
-
console.log("Collected data:", response1.session?.data);
|
|
202
|
-
|
|
203
|
-
session = response1.session;
|
|
204
|
-
history = [
|
|
205
|
-
...history,
|
|
206
|
-
{
|
|
207
|
-
role: "assistant" as const,
|
|
208
|
-
content: response1.message,
|
|
209
|
-
},
|
|
210
|
-
] as History;
|
|
211
|
-
|
|
212
|
-
// Second response - should auto-transition to a feedback route
|
|
213
|
-
history = [
|
|
214
|
-
...history,
|
|
215
|
-
{
|
|
216
|
-
role: "user" as const,
|
|
217
|
-
content: "Yes, please proceed!",
|
|
218
|
-
name: "Alice",
|
|
219
|
-
},
|
|
220
|
-
];
|
|
221
|
-
console.log("\nUser:", "Yes, please proceed!");
|
|
222
|
-
|
|
223
|
-
const response2 = await agent.respond({ history, session });
|
|
224
|
-
console.log("\nBot:", response2.message);
|
|
225
|
-
console.log("Current route:", response2.session?.currentRoute?.title);
|
|
226
|
-
console.log("Route complete?", response2.isRouteComplete);
|
|
227
|
-
|
|
228
|
-
session = response2.session;
|
|
229
|
-
history = [
|
|
230
|
-
...history,
|
|
231
|
-
{
|
|
232
|
-
role: "assistant" as const,
|
|
233
|
-
content: response2.message,
|
|
234
|
-
},
|
|
235
|
-
];
|
|
236
|
-
|
|
237
|
-
// Third response - provide rating
|
|
238
|
-
history = [
|
|
239
|
-
...history,
|
|
240
|
-
{
|
|
241
|
-
role: "user" as const,
|
|
242
|
-
content: "I'd rate it 5 stars! The process was very smooth.",
|
|
243
|
-
name: "Alice",
|
|
244
|
-
},
|
|
245
|
-
];
|
|
246
|
-
console.log("\nUser:", "I'd rate it 5 stars! The process was very smooth.");
|
|
247
|
-
|
|
248
|
-
const response3 = await agent.respond({ history, session });
|
|
249
|
-
console.log("\nBot:", response3.message);
|
|
250
|
-
console.log("Current route:", response3.session?.currentRoute?.title);
|
|
251
|
-
console.log("Collected data:", response3.session?.data);
|
|
252
|
-
console.log("Route complete?", response3.isRouteComplete);
|
|
253
|
-
|
|
254
|
-
console.log("\n=== Manual Transition Example ===\n");
|
|
255
|
-
|
|
256
|
-
// Demonstrate manual transition using agent.nextStepRoute()
|
|
257
|
-
let session2: SessionState | undefined;
|
|
258
|
-
let history2: History = [
|
|
259
|
-
{
|
|
260
|
-
role: "user" as const,
|
|
261
|
-
content:
|
|
262
|
-
"I want to book the Sunset Resort for 4 people on New Year's Eve",
|
|
263
|
-
name: "Bob",
|
|
264
|
-
},
|
|
265
|
-
];
|
|
266
|
-
|
|
267
|
-
console.log("User:", history2[0].content);
|
|
268
|
-
|
|
269
|
-
const manualResponse = await agent.respond({
|
|
270
|
-
history: history2,
|
|
271
|
-
session: session2,
|
|
272
|
-
});
|
|
273
|
-
console.log("\nBot:", manualResponse.message);
|
|
274
|
-
console.log("Route complete?", manualResponse.isRouteComplete);
|
|
275
|
-
|
|
276
|
-
if (manualResponse.isRouteComplete && manualResponse.session) {
|
|
277
|
-
// Manually trigger transition instead of auto-transition
|
|
278
|
-
console.log("\n[Manually transitioning to feedback route...]");
|
|
279
|
-
session2 = await agent.nextStepRoute(
|
|
280
|
-
"Collect Feedback",
|
|
281
|
-
manualResponse.session,
|
|
282
|
-
"if booking was successful"
|
|
283
|
-
);
|
|
284
|
-
console.log(
|
|
285
|
-
"Pending transition set:",
|
|
286
|
-
session2.pendingTransition?.targetRouteId
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
history2 = [
|
|
290
|
-
...history2,
|
|
291
|
-
{
|
|
292
|
-
role: "assistant" as const,
|
|
293
|
-
content: manualResponse.message,
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
role: "user" as const,
|
|
297
|
-
content: "Great!",
|
|
298
|
-
name: "Bob",
|
|
299
|
-
},
|
|
300
|
-
];
|
|
301
|
-
|
|
302
|
-
const feedbackResponse = await agent.respond({
|
|
303
|
-
history: history2,
|
|
304
|
-
session: session2,
|
|
305
|
-
});
|
|
306
|
-
console.log("\nBot:", feedbackResponse.message);
|
|
307
|
-
console.log(
|
|
308
|
-
"Current route:",
|
|
309
|
-
feedbackResponse.session?.currentRoute?.title
|
|
310
|
-
);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
console.log("\n=== Done ===\n");
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
317
|
-
main().catch(console.error);
|
|
318
|
-
}
|