@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,509 +0,0 @@
|
|
|
1
|
-
# Route DSL (Domain Specific Language)
|
|
2
|
-
|
|
3
|
-
The Route DSL provides a fluent, declarative API for designing complex conversation flows. Unlike traditional chatbot frameworks that use rigid state machines, the Route DSL enables natural, branching conversation patterns with intelligent routing.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
Routes are the building blocks of conversational AI in @falai/agent. Each route represents a journey with:
|
|
8
|
-
|
|
9
|
-
- **Structured Steps**: Sequential or branching conversation states
|
|
10
|
-
- **Data Collection**: Schema-driven information gathering
|
|
11
|
-
- **Conditional Logic**: Smart skipping and branching based on context
|
|
12
|
-
- **Lifecycle Hooks**: Custom behavior at route and step levels
|
|
13
|
-
|
|
14
|
-
## Basic Route Creation
|
|
15
|
-
|
|
16
|
-
### Simple Linear Route
|
|
17
|
-
|
|
18
|
-
```typescript
|
|
19
|
-
const greetingRoute = agent
|
|
20
|
-
.createRoute({
|
|
21
|
-
title: "Greeting Flow",
|
|
22
|
-
description: "Simple greeting and introduction",
|
|
23
|
-
initialStep: {
|
|
24
|
-
prompt: "Hello! What's your name?",
|
|
25
|
-
collect: ["name"],
|
|
26
|
-
},
|
|
27
|
-
})
|
|
28
|
-
.nextStep({
|
|
29
|
-
prompt: "Nice to meet you, {{name}}! How can I help you today?",
|
|
30
|
-
requires: ["name"], // Must have name before proceeding
|
|
31
|
-
});
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### Route with Agent-Level Schema
|
|
35
|
-
|
|
36
|
-
```typescript
|
|
37
|
-
interface UserInfo {
|
|
38
|
-
name: string;
|
|
39
|
-
email: string;
|
|
40
|
-
interests: string[];
|
|
41
|
-
preferences?: object;
|
|
42
|
-
profileComplete?: boolean;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Agent defines comprehensive schema
|
|
46
|
-
const agent = new Agent<{}, UserInfo>({
|
|
47
|
-
name: "Profile Assistant",
|
|
48
|
-
provider: openaiProvider,
|
|
49
|
-
schema: {
|
|
50
|
-
type: "object",
|
|
51
|
-
properties: {
|
|
52
|
-
name: { type: "string" },
|
|
53
|
-
email: { type: "string", format: "email" },
|
|
54
|
-
interests: {
|
|
55
|
-
type: "array",
|
|
56
|
-
items: { type: "string" },
|
|
57
|
-
},
|
|
58
|
-
preferences: { type: "object" },
|
|
59
|
-
profileComplete: { type: "boolean" }
|
|
60
|
-
},
|
|
61
|
-
required: ["name", "email"],
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// Route specifies required fields instead of schema
|
|
66
|
-
const userProfileRoute = agent
|
|
67
|
-
.createRoute({
|
|
68
|
-
title: "User Profile Collection",
|
|
69
|
-
description: "Collect basic user information",
|
|
70
|
-
requiredFields: ["name", "email", "interests"], // Required for completion
|
|
71
|
-
optionalFields: ["preferences"], // Nice to have
|
|
72
|
-
initialStep: {
|
|
73
|
-
prompt: "Let's create your profile. What's your name?",
|
|
74
|
-
collect: ["name"],
|
|
75
|
-
},
|
|
76
|
-
})
|
|
77
|
-
.nextStep({
|
|
78
|
-
prompt: "Great, {{name}}! What's your email address?",
|
|
79
|
-
collect: ["email"],
|
|
80
|
-
requires: ["name"], // Prerequisites from agent data
|
|
81
|
-
})
|
|
82
|
-
.nextStep({
|
|
83
|
-
prompt: "What are your interests? (comma-separated)",
|
|
84
|
-
collect: ["interests"],
|
|
85
|
-
requires: ["name", "email"], // Prerequisites from agent data
|
|
86
|
-
});
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Step Configuration
|
|
90
|
-
|
|
91
|
-
### Step Options
|
|
92
|
-
|
|
93
|
-
Each step supports comprehensive configuration:
|
|
94
|
-
|
|
95
|
-
```typescript
|
|
96
|
-
interface StepOptions<TContext, TData> {
|
|
97
|
-
id?: string; // Optional custom ID
|
|
98
|
-
description?: string; // Human-readable description
|
|
99
|
-
prompt?: Template<TContext, TData>; // AI prompt template
|
|
100
|
-
collect?: string[]; // Fields to extract from AI response
|
|
101
|
-
skipIf?: (data: Partial<TData>) => boolean; // Skip condition
|
|
102
|
-
requires?: string[]; // Required data fields
|
|
103
|
-
when?: Template<TContext, TData>; // Conditional execution
|
|
104
|
-
prepare?: (context: TContext, data?: Partial<TData>) => void | Promise<void>;
|
|
105
|
-
finalize?: (context: TContext, data?: Partial<TData>) => void | Promise<void>;
|
|
106
|
-
tools?: (string | Tool<TContext, unknown[], unknown, TData>)[];
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Data Collection Steps
|
|
111
|
-
|
|
112
|
-
```typescript
|
|
113
|
-
const dataCollectionStep = {
|
|
114
|
-
prompt: "What's your preferred contact method?",
|
|
115
|
-
collect: ["contactMethod"], // Maps to agent schema field
|
|
116
|
-
requires: ["name", "email"], // Must have these fields from agent data
|
|
117
|
-
skipIf: (data) => data.contactMethod !== undefined, // Skip if already collected by any route
|
|
118
|
-
};
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Conditional Steps
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
const conditionalStep = {
|
|
125
|
-
prompt: "Would you like to receive our newsletter?",
|
|
126
|
-
collect: ["newsletterOptIn"],
|
|
127
|
-
when: "if user has provided email address", // AI-evaluated condition
|
|
128
|
-
skipIf: (data) => data.email === undefined, // Skip if no email
|
|
129
|
-
};
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Lifecycle Hooks
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
const stepWithHooks = {
|
|
136
|
-
prompt: "Processing your request...",
|
|
137
|
-
prepare: async (context, data) => {
|
|
138
|
-
// Run before AI responds
|
|
139
|
-
console.log("Preparing step with data:", data);
|
|
140
|
-
// Could fetch external data, validate state, etc.
|
|
141
|
-
},
|
|
142
|
-
finalize: async (context, data) => {
|
|
143
|
-
// Run after AI responds and data is collected
|
|
144
|
-
console.log("Step completed with data:", data);
|
|
145
|
-
// Could save to database, trigger notifications, etc.
|
|
146
|
-
},
|
|
147
|
-
};
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Branching and Non-Linear Flows
|
|
151
|
-
|
|
152
|
-
### Basic Branching
|
|
153
|
-
|
|
154
|
-
```typescript
|
|
155
|
-
const branchingRoute = agent
|
|
156
|
-
.createRoute({
|
|
157
|
-
title: "Support Flow",
|
|
158
|
-
initialStep: {
|
|
159
|
-
prompt: "How can I help you today?",
|
|
160
|
-
collect: ["intent"],
|
|
161
|
-
},
|
|
162
|
-
})
|
|
163
|
-
.branch([
|
|
164
|
-
{
|
|
165
|
-
name: "technical",
|
|
166
|
-
step: {
|
|
167
|
-
prompt:
|
|
168
|
-
"I understand you're having a technical issue. Can you describe the problem?",
|
|
169
|
-
collect: ["problem"],
|
|
170
|
-
requires: ["intent"],
|
|
171
|
-
when: "if intent indicates technical support",
|
|
172
|
-
},
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
name: "billing",
|
|
176
|
-
step: {
|
|
177
|
-
prompt: "For billing questions, I'll need your account information...",
|
|
178
|
-
collect: ["accountInfo"],
|
|
179
|
-
requires: ["intent"],
|
|
180
|
-
when: "if intent indicates billing or payment",
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
name: "general",
|
|
185
|
-
step: {
|
|
186
|
-
prompt: "I'd be happy to help with general questions...",
|
|
187
|
-
collect: ["question"],
|
|
188
|
-
requires: ["intent"],
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
]);
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Accessing Branch Results
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
const routeWithBranches = agent
|
|
198
|
-
.createRoute({
|
|
199
|
-
title: "Complex Flow",
|
|
200
|
-
})
|
|
201
|
-
.branch([
|
|
202
|
-
{
|
|
203
|
-
name: "optionA",
|
|
204
|
-
step: { prompt: "Choose option A", collect: ["choiceA"] },
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
name: "optionB",
|
|
208
|
-
step: { prompt: "Choose option B", collect: ["choiceB"] },
|
|
209
|
-
},
|
|
210
|
-
]);
|
|
211
|
-
|
|
212
|
-
// Access specific branches for further chaining
|
|
213
|
-
const optionA = routeWithBranches.branches.optionA.nextStep({
|
|
214
|
-
prompt: "You chose A. What's next?",
|
|
215
|
-
requires: ["choiceA"],
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
const optionB = routeWithBranches.branches.optionB.nextStep({
|
|
219
|
-
prompt: "You chose B. What's next?",
|
|
220
|
-
requires: ["choiceB"],
|
|
221
|
-
});
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
## Route Completion and Transitions
|
|
225
|
-
|
|
226
|
-
### Basic Route Completion
|
|
227
|
-
|
|
228
|
-
```typescript
|
|
229
|
-
const simpleRoute = agent
|
|
230
|
-
.createRoute({
|
|
231
|
-
title: "Simple Task",
|
|
232
|
-
initialStep: { prompt: "What task should I help with?", collect: ["task"] },
|
|
233
|
-
})
|
|
234
|
-
.nextStep({
|
|
235
|
-
prompt: "I'll help you with: {{task}}",
|
|
236
|
-
requires: ["task"],
|
|
237
|
-
})
|
|
238
|
-
.endRoute({
|
|
239
|
-
prompt: "Task completed! Is there anything else I can help with?",
|
|
240
|
-
});
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### Automatic Transitions
|
|
244
|
-
|
|
245
|
-
```typescript
|
|
246
|
-
const onboardingRoute = agent
|
|
247
|
-
.createRoute({
|
|
248
|
-
title: "User Onboarding",
|
|
249
|
-
initialStep: { prompt: "Welcome! What's your name?", collect: ["name"] },
|
|
250
|
-
})
|
|
251
|
-
.nextStep({
|
|
252
|
-
prompt: "Thanks {{name}}! Let's set up your profile.",
|
|
253
|
-
collect: ["profileComplete"],
|
|
254
|
-
requires: ["name"],
|
|
255
|
-
})
|
|
256
|
-
.endRoute({
|
|
257
|
-
prompt: "Onboarding complete! Ready to explore?",
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
// Automatically transition to another route when complete
|
|
261
|
-
onboardingRoute.onComplete = "main-menu"; // Route ID or title
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### Conditional Transitions
|
|
265
|
-
|
|
266
|
-
```typescript
|
|
267
|
-
const purchaseRoute = agent
|
|
268
|
-
.createRoute({
|
|
269
|
-
title: "Purchase Flow",
|
|
270
|
-
initialStep: {
|
|
271
|
-
prompt: "What would you like to purchase?",
|
|
272
|
-
collect: ["item"],
|
|
273
|
-
},
|
|
274
|
-
})
|
|
275
|
-
.nextStep({
|
|
276
|
-
prompt: "Great choice! Processing {{item}}...",
|
|
277
|
-
collect: ["purchaseComplete"],
|
|
278
|
-
requires: ["item"],
|
|
279
|
-
})
|
|
280
|
-
.endRoute();
|
|
281
|
-
|
|
282
|
-
purchaseRoute.onComplete = {
|
|
283
|
-
nextStep: "feedback-collection", // Transition target
|
|
284
|
-
condition: "if purchase was successful", // AI-evaluated condition
|
|
285
|
-
};
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
### Dynamic Transitions
|
|
289
|
-
|
|
290
|
-
```typescript
|
|
291
|
-
purchaseRoute.onComplete = async (session, context) => {
|
|
292
|
-
// Custom logic for determining next route
|
|
293
|
-
if (session.data?.purchaseComplete) {
|
|
294
|
-
return "feedback-collection";
|
|
295
|
-
} else if (session.data?.error) {
|
|
296
|
-
return "error-recovery";
|
|
297
|
-
} else {
|
|
298
|
-
return "support";
|
|
299
|
-
}
|
|
300
|
-
};
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
## Advanced Route Features
|
|
304
|
-
|
|
305
|
-
### Route-Level Configuration
|
|
306
|
-
|
|
307
|
-
```typescript
|
|
308
|
-
const advancedRoute = agent.createRoute({
|
|
309
|
-
title: "Advanced Interaction",
|
|
310
|
-
description: "Complex multi-step conversation",
|
|
311
|
-
|
|
312
|
-
// Route completion requirements
|
|
313
|
-
requiredFields: ["customerName", "email", "issueType"],
|
|
314
|
-
optionalFields: ["phone", "priority"],
|
|
315
|
-
|
|
316
|
-
// Route-level identity overrides agent identity
|
|
317
|
-
identity: "You are an expert consultant specializing in {{domain}}",
|
|
318
|
-
|
|
319
|
-
// Behavioral guidelines for this route
|
|
320
|
-
guidelines: [
|
|
321
|
-
{
|
|
322
|
-
condition: "if user is frustrated",
|
|
323
|
-
action: "Be extra patient and offer specific solutions",
|
|
324
|
-
},
|
|
325
|
-
],
|
|
326
|
-
|
|
327
|
-
// Domain-specific terms
|
|
328
|
-
terms: [
|
|
329
|
-
{
|
|
330
|
-
name: "ROI",
|
|
331
|
-
description: "Return on Investment - the financial benefit gained",
|
|
332
|
-
synonyms: ["return on investment", "profitability"],
|
|
333
|
-
},
|
|
334
|
-
],
|
|
335
|
-
|
|
336
|
-
// Initial data to pre-populate (maps to agent schema)
|
|
337
|
-
initialData: {
|
|
338
|
-
sessionId: generateId(),
|
|
339
|
-
startTime: new Date().toISOString(),
|
|
340
|
-
},
|
|
341
|
-
|
|
342
|
-
// Route-level lifecycle hooks (work with agent data)
|
|
343
|
-
hooks: {
|
|
344
|
-
onDataUpdate: (newData, previousData) => {
|
|
345
|
-
// Validate or enrich agent-level collected data
|
|
346
|
-
if (newData.email && !isValidEmail(newData.email)) {
|
|
347
|
-
throw new Error("Invalid email format");
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// Auto-set priority based on issue type
|
|
351
|
-
if (newData.issueType === 'billing' && !newData.priority) {
|
|
352
|
-
newData.priority = 'high';
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
return newData;
|
|
356
|
-
},
|
|
357
|
-
onContextUpdate: (newContext, previousContext) => {
|
|
358
|
-
// React to context changes
|
|
359
|
-
console.log("Context updated:", { previousContext, newContext });
|
|
360
|
-
},
|
|
361
|
-
},
|
|
362
|
-
});
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
### Sequential Step Building
|
|
366
|
-
|
|
367
|
-
```typescript
|
|
368
|
-
const sequentialRoute = agent.createRoute({
|
|
369
|
-
title: "Sequential Process",
|
|
370
|
-
steps: [
|
|
371
|
-
{
|
|
372
|
-
description: "Step 1: Initial assessment",
|
|
373
|
-
prompt: "Let's start with some basic information...",
|
|
374
|
-
collect: ["basicInfo"],
|
|
375
|
-
},
|
|
376
|
-
{
|
|
377
|
-
description: "Step 2: Detailed requirements",
|
|
378
|
-
prompt: "Now I need more specific details...",
|
|
379
|
-
collect: ["detailedInfo"],
|
|
380
|
-
requires: ["basicInfo"],
|
|
381
|
-
skipIf: (data) => data.skipDetailed, // Allow skipping if condition met
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
description: "Step 3: Confirmation",
|
|
385
|
-
prompt: "Please confirm the following details...",
|
|
386
|
-
collect: ["confirmed"],
|
|
387
|
-
requires: ["basicInfo"], // Note: detailedInfo not required due to skipIf
|
|
388
|
-
},
|
|
389
|
-
],
|
|
390
|
-
});
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
## Route Management
|
|
394
|
-
|
|
395
|
-
### Route Registration
|
|
396
|
-
|
|
397
|
-
```typescript
|
|
398
|
-
const agent = new Agent({
|
|
399
|
-
name: "Multi-Purpose Assistant",
|
|
400
|
-
provider: openaiProvider,
|
|
401
|
-
routes: [greetingRoute, supportRoute, purchaseRoute],
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
// Or add routes dynamically
|
|
405
|
-
agent.createRoute(salesRoute);
|
|
406
|
-
agent.createRoute(feedbackRoute);
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
### Route Access and Inspection
|
|
410
|
-
|
|
411
|
-
```typescript
|
|
412
|
-
// Get all routes
|
|
413
|
-
const allRoutes = agent.getRoutes();
|
|
414
|
-
|
|
415
|
-
// Find specific route
|
|
416
|
-
const supportRoute = agent.getRoutes().find((r) => r.id === "support");
|
|
417
|
-
|
|
418
|
-
// Inspect route structure
|
|
419
|
-
console.log(supportRoute.describe());
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
## Best Practices
|
|
423
|
-
|
|
424
|
-
### Route Design
|
|
425
|
-
|
|
426
|
-
1. **Single Responsibility**: Each route should serve one clear user intent
|
|
427
|
-
2. **Progressive Disclosure**: Collect information in logical order
|
|
428
|
-
3. **Fail Fast**: Use `requires` to prevent invalid state transitions
|
|
429
|
-
4. **Smart Skipping**: Use `skipIf` to avoid redundant questions
|
|
430
|
-
|
|
431
|
-
### Step Design
|
|
432
|
-
|
|
433
|
-
1. **Clear Prompts**: Make step purposes obvious to both AI and users
|
|
434
|
-
2. **Minimal Collection**: Only collect what's needed for the current step
|
|
435
|
-
3. **Validation**: Use lifecycle hooks for data validation
|
|
436
|
-
4. **Error Handling**: Plan for edge cases and invalid inputs
|
|
437
|
-
|
|
438
|
-
### Performance
|
|
439
|
-
|
|
440
|
-
1. **Limit Branching**: Too many branches increase AI evaluation complexity
|
|
441
|
-
2. **Optimize Conditions**: Use efficient `skipIf` and `requires` logic
|
|
442
|
-
3. **Cache Data**: Avoid redundant data fetching in lifecycle hooks
|
|
443
|
-
4. **Monitor Usage**: Track route completion rates and drop-off points
|
|
444
|
-
|
|
445
|
-
### Maintainability
|
|
446
|
-
|
|
447
|
-
1. **Descriptive Names**: Use clear route and step IDs
|
|
448
|
-
2. **Documentation**: Add descriptions to routes and complex steps
|
|
449
|
-
3. **Modular Design**: Break complex routes into smaller, focused routes
|
|
450
|
-
4. **Version Control**: Plan for route evolution and backward compatibility
|
|
451
|
-
|
|
452
|
-
## Debugging and Testing
|
|
453
|
-
|
|
454
|
-
### Route Inspection
|
|
455
|
-
|
|
456
|
-
```typescript
|
|
457
|
-
// Get detailed route structure
|
|
458
|
-
console.log(route.describe());
|
|
459
|
-
|
|
460
|
-
// Inspect all steps
|
|
461
|
-
const steps = route.getAllSteps();
|
|
462
|
-
steps.forEach((step) => {
|
|
463
|
-
console.log(`Step: ${step.id} - ${step.description}`);
|
|
464
|
-
console.log(
|
|
465
|
-
`Transitions:`,
|
|
466
|
-
step.getTransitions().map((s) => s.id)
|
|
467
|
-
);
|
|
468
|
-
});
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
### Step Validation
|
|
472
|
-
|
|
473
|
-
```typescript
|
|
474
|
-
// Test skipIf conditions
|
|
475
|
-
const shouldSkip = step.shouldSkip(collectedData);
|
|
476
|
-
|
|
477
|
-
// Test requirements
|
|
478
|
-
const hasRequirements = step.hasRequires(collectedData);
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
### Route Testing
|
|
482
|
-
|
|
483
|
-
```typescript
|
|
484
|
-
// Simulate route execution — classic signature
|
|
485
|
-
const mockSession = createSession();
|
|
486
|
-
|
|
487
|
-
// Or pre-populate with known data using partial state overload
|
|
488
|
-
const prepopSession = createSession({
|
|
489
|
-
data: { name: "Test User" },
|
|
490
|
-
history: [{ role: "user", content: "Hello" }],
|
|
491
|
-
});
|
|
492
|
-
|
|
493
|
-
const mockHistory = [
|
|
494
|
-
{
|
|
495
|
-
role: "user",
|
|
496
|
-
content: "Hello",
|
|
497
|
-
},
|
|
498
|
-
];
|
|
499
|
-
|
|
500
|
-
const response = await agent.respond({
|
|
501
|
-
history: mockHistory,
|
|
502
|
-
session: mockSession,
|
|
503
|
-
});
|
|
504
|
-
|
|
505
|
-
console.log("Route selected:", response.session.currentRoute?.title);
|
|
506
|
-
console.log("Data collected:", response.session.data);
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
The Route DSL transforms conversation design from rigid, hardcoded flows into flexible, intelligent systems that can adapt to user needs while maintaining structure and reliability.
|