@falai/agent 1.2.8 ā 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js ā FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js ā flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js ā FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +15 -202
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +15 -0
- package/docs/migration/route-to-flow.md +560 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts ā FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- package/src/types/route.ts +0 -392
|
@@ -1,583 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
|
|
2
|
-
/**
|
|
3
|
-
* Example: Using Prisma ORM for Persistence with New Session Management
|
|
4
|
-
*
|
|
5
|
-
* This example demonstrates the new automatic session management features:
|
|
6
|
-
* - Automatic session creation and loading with sessionId
|
|
7
|
-
* - Built-in conversation history management
|
|
8
|
-
* - Simplified server-side usage patterns
|
|
9
|
-
* - SessionManager API for direct session control
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
Agent,
|
|
14
|
-
GeminiProvider,
|
|
15
|
-
PrismaAdapter,
|
|
16
|
-
END_ROUTE,
|
|
17
|
-
} from "../../src";
|
|
18
|
-
|
|
19
|
-
// @ts-expect-error - PrismaClient is not typed
|
|
20
|
-
import { PrismaClient } from "@prisma/client";
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Setup Steps:
|
|
24
|
-
*
|
|
25
|
-
* 1. Install dependencies:
|
|
26
|
-
* npm install prisma @prisma/client
|
|
27
|
-
*
|
|
28
|
-
* 2. Initialize Prisma:
|
|
29
|
-
* npx prisma init
|
|
30
|
-
*
|
|
31
|
-
* 3. Copy schema from examples/prisma-schema.example.prisma
|
|
32
|
-
* to your prisma/schema.prisma file
|
|
33
|
-
*
|
|
34
|
-
* 4. Generate Prisma client:
|
|
35
|
-
* npx prisma generate
|
|
36
|
-
*
|
|
37
|
-
* 5. Run migrations:
|
|
38
|
-
* npx prisma migrate dev --name init
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
// Example context type
|
|
42
|
-
interface ConversationContext {
|
|
43
|
-
userId: string;
|
|
44
|
-
userName: string;
|
|
45
|
-
currentBooking?: {
|
|
46
|
-
destination?: string;
|
|
47
|
-
departureDate?: string;
|
|
48
|
-
returnDate?: string;
|
|
49
|
-
passengers?: number;
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Collected data type for flight booking
|
|
54
|
-
interface FlightBookingData {
|
|
55
|
-
destination: string;
|
|
56
|
-
departureDate: string;
|
|
57
|
-
returnDate?: string;
|
|
58
|
-
passengers: number;
|
|
59
|
-
cabinClass: "economy" | "premium" | "business" | "first";
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Collected data type for onboarding
|
|
63
|
-
interface OnboardingData {
|
|
64
|
-
fullName: string;
|
|
65
|
-
email: string;
|
|
66
|
-
phoneNumber: string;
|
|
67
|
-
country: string;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Collected data type for contact form
|
|
71
|
-
interface ContactFormData {
|
|
72
|
-
name: string;
|
|
73
|
-
email: string;
|
|
74
|
-
message: string;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async function example() {
|
|
78
|
-
// Initialize Prisma client
|
|
79
|
-
const prisma = new PrismaClient();
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Server-Style Usage: Create Agent per request with sessionId
|
|
83
|
-
* This is the recommended pattern for server environments
|
|
84
|
-
*/
|
|
85
|
-
const sessionId = "session_user123_booking"; // Could be from request params
|
|
86
|
-
|
|
87
|
-
const agent = new Agent<ConversationContext, FlightBookingData>({
|
|
88
|
-
name: "Travel Assistant",
|
|
89
|
-
description: "A helpful travel booking assistant",
|
|
90
|
-
goal: "Help users book flights with ease",
|
|
91
|
-
provider: new GeminiProvider({
|
|
92
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
93
|
-
model: "models/gemini-2.5-flash",
|
|
94
|
-
}),
|
|
95
|
-
context: {
|
|
96
|
-
userId: "user_123",
|
|
97
|
-
userName: "Alice",
|
|
98
|
-
},
|
|
99
|
-
persistence: {
|
|
100
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
101
|
-
autoSave: true, // Auto-saves session after each response
|
|
102
|
-
},
|
|
103
|
-
schema: {
|
|
104
|
-
type: "object",
|
|
105
|
-
properties: {
|
|
106
|
-
destination: {
|
|
107
|
-
type: "string",
|
|
108
|
-
description: "Destination city or airport",
|
|
109
|
-
},
|
|
110
|
-
departureDate: {
|
|
111
|
-
type: "string",
|
|
112
|
-
description: "Departure date (YYYY-MM-DD)",
|
|
113
|
-
},
|
|
114
|
-
returnDate: {
|
|
115
|
-
type: "string",
|
|
116
|
-
description: "Return date (YYYY-MM-DD)",
|
|
117
|
-
},
|
|
118
|
-
passengers: {
|
|
119
|
-
type: "number",
|
|
120
|
-
minimum: 1,
|
|
121
|
-
maximum: 9,
|
|
122
|
-
description: "Number of passengers",
|
|
123
|
-
},
|
|
124
|
-
cabinClass: {
|
|
125
|
-
type: "string",
|
|
126
|
-
enum: ["economy", "premium", "business", "first"],
|
|
127
|
-
default: "economy",
|
|
128
|
-
description: "Cabin class preference",
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
required: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
132
|
-
},
|
|
133
|
-
sessionId, // ⨠Agent will automatically load or create this session
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Create a route with data extraction schema
|
|
138
|
-
*/
|
|
139
|
-
const flightRoute = agent.createRoute({
|
|
140
|
-
title: "Book a Flight",
|
|
141
|
-
description: "Help user book a flight ticket",
|
|
142
|
-
when: [
|
|
143
|
-
"User wants to book a flight",
|
|
144
|
-
"User mentions travel, flying, or booking tickets",
|
|
145
|
-
],
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
// Step flow with smart data collecting and custom IDs
|
|
149
|
-
const askDestination = flightRoute.initialStep.nextStep({
|
|
150
|
-
id: "ask_destination", // Custom step ID for easier tracking
|
|
151
|
-
prompt: "Ask where they want to fly",
|
|
152
|
-
collect: ["destination"],
|
|
153
|
-
skipIf: (ctx) => !!ctx.data?.destination,
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
const askDates = askDestination.nextStep({
|
|
157
|
-
id: "ask_dates", // Custom step ID
|
|
158
|
-
prompt: "Ask about travel dates",
|
|
159
|
-
collect: ["departureDate", "returnDate"],
|
|
160
|
-
skipIf: (ctx) => !!ctx.data?.departureDate,
|
|
161
|
-
requires: ["destination"],
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
const askPassengers = askDates.nextStep({
|
|
165
|
-
id: "ask_passengers", // Custom step ID
|
|
166
|
-
prompt: "Ask how many passengers",
|
|
167
|
-
collect: ["passengers"],
|
|
168
|
-
skipIf: (ctx) => !!ctx.data?.passengers,
|
|
169
|
-
requires: ["destination", "departureDate"],
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
const askCabinClass = askPassengers.nextStep({
|
|
173
|
-
id: "ask_cabin_class", // Custom step ID
|
|
174
|
-
prompt: "Ask about cabin class preference",
|
|
175
|
-
collect: ["cabinClass"],
|
|
176
|
-
skipIf: (ctx) => !!ctx.data?.cabinClass,
|
|
177
|
-
requires: ["destination", "departureDate", "passengers"],
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
const confirmBooking = askCabinClass.nextStep({
|
|
181
|
-
id: "confirm_booking", // Custom step ID
|
|
182
|
-
prompt: "Present options and confirm booking details",
|
|
183
|
-
requires: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
confirmBooking.nextStep({ step: END_ROUTE });
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Session is automatically loaded/created by Agent constructor
|
|
190
|
-
* Access it through agent.session
|
|
191
|
-
*/
|
|
192
|
-
console.log("⨠Session ready:", agent.session.id);
|
|
193
|
-
console.log("š Session data:", agent.session.getData());
|
|
194
|
-
console.log("š Conversation history:", agent.session.getHistory().length, "messages");
|
|
195
|
-
|
|
196
|
-
// Set some initial data if this is a new session
|
|
197
|
-
if (!agent.session.getData()?.cabinClass) {
|
|
198
|
-
await agent.session.setData({ cabinClass: "economy" });
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Turn 1: Simple message-based conversation
|
|
203
|
-
* SessionManager automatically handles history and persistence
|
|
204
|
-
*/
|
|
205
|
-
console.log("\n--- Turn 1 ---");
|
|
206
|
-
|
|
207
|
-
// Add user message to session history and get response
|
|
208
|
-
await agent.session.addMessage("user", "I want to fly to Paris on June 15 with 2 people", "Alice");
|
|
209
|
-
|
|
210
|
-
const response1 = await agent.respond({
|
|
211
|
-
history: agent.session.getHistory(), // Use session-managed history
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
console.log("š¤ Agent:", response1.message);
|
|
215
|
-
console.log("š Session after turn 1:", {
|
|
216
|
-
sessionId: agent.session.id,
|
|
217
|
-
currentRoute: response1.session?.currentRoute?.title,
|
|
218
|
-
currentStepId: response1.session?.currentStep?.id,
|
|
219
|
-
data: agent.session.getData(),
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
// Add agent response to session history
|
|
223
|
-
await agent.session.addMessage("assistant", response1.message);
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Turn 2: User changes their mind
|
|
227
|
-
*/
|
|
228
|
-
console.log("\n--- Turn 2 ---");
|
|
229
|
-
|
|
230
|
-
await agent.session.addMessage("user", "Actually, make that Tokyo instead, and premium class", "Alice");
|
|
231
|
-
|
|
232
|
-
const response2 = await agent.respond({
|
|
233
|
-
history: agent.session.getHistory(),
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
console.log("š¤ Agent:", response2.message);
|
|
237
|
-
console.log("š Session after turn 2:", {
|
|
238
|
-
currentRoute: response2.session?.currentRoute?.title,
|
|
239
|
-
currentStep: response2.session?.currentStep?.id,
|
|
240
|
-
data: agent.session.getData(),
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
await agent.session.addMessage("assistant", response2.message);
|
|
244
|
-
|
|
245
|
-
if (response2.isRouteComplete) {
|
|
246
|
-
console.log("\nā
Flight booking complete!");
|
|
247
|
-
await sendFlightConfirmation(agent.session.getData());
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Demonstrate session recovery - create new Agent instance with same sessionId
|
|
252
|
-
*/
|
|
253
|
-
console.log("\n--- Session Recovery (New Agent Instance) ---");
|
|
254
|
-
|
|
255
|
-
const newAgent = new Agent<ConversationContext, FlightBookingData>({
|
|
256
|
-
name: "Travel Assistant",
|
|
257
|
-
provider: new GeminiProvider({
|
|
258
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
259
|
-
model: "models/gemini-2.5-flash",
|
|
260
|
-
}),
|
|
261
|
-
context: {
|
|
262
|
-
userId: "user_123",
|
|
263
|
-
userName: "Alice",
|
|
264
|
-
},
|
|
265
|
-
// NEW: Agent-level schema (same as original agent)
|
|
266
|
-
schema: {
|
|
267
|
-
type: "object",
|
|
268
|
-
properties: {
|
|
269
|
-
destination: { type: "string" },
|
|
270
|
-
departureDate: { type: "string" },
|
|
271
|
-
returnDate: { type: "string" },
|
|
272
|
-
passengers: { type: "number", minimum: 1, maximum: 9 },
|
|
273
|
-
cabinClass: { type: "string", enum: ["economy", "premium", "business", "first"] },
|
|
274
|
-
},
|
|
275
|
-
required: ["destination", "departureDate", "passengers", "cabinClass"],
|
|
276
|
-
},
|
|
277
|
-
persistence: {
|
|
278
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
279
|
-
},
|
|
280
|
-
sessionId, // Same sessionId - will load existing session
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
console.log("š„ Recovered session:", {
|
|
284
|
-
sessionId: newAgent.session.id,
|
|
285
|
-
historyLength: newAgent.session.getHistory().length,
|
|
286
|
-
data: newAgent.session.getData(),
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Continue conversation with recovered session
|
|
291
|
-
*/
|
|
292
|
-
await newAgent.session.addMessage("user", "Can you confirm my booking details?");
|
|
293
|
-
|
|
294
|
-
const confirmResponse = await newAgent.respond({
|
|
295
|
-
history: newAgent.session.getHistory(),
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
console.log("š¤ Confirmation:", confirmResponse.message);
|
|
299
|
-
await newAgent.session.addMessage("assistant", confirmResponse.message);
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Cleanup
|
|
303
|
-
*/
|
|
304
|
-
await prisma.$disconnect();
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* Advanced Example: SessionManager with History Management
|
|
309
|
-
*/
|
|
310
|
-
async function advancedExample() {
|
|
311
|
-
const prisma = new PrismaClient();
|
|
312
|
-
const sessionId = "session_user456_onboarding";
|
|
313
|
-
|
|
314
|
-
interface UserContext {
|
|
315
|
-
userId: string;
|
|
316
|
-
userName: string;
|
|
317
|
-
preferences: {
|
|
318
|
-
currency: string;
|
|
319
|
-
language: string;
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
const agent = new Agent<UserContext, OnboardingData>({
|
|
324
|
-
name: "Onboarding Assistant",
|
|
325
|
-
description: "Help new users get started",
|
|
326
|
-
provider: new GeminiProvider({
|
|
327
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
328
|
-
model: "models/gemini-2.5-flash",
|
|
329
|
-
}),
|
|
330
|
-
context: {
|
|
331
|
-
userId: "user_456",
|
|
332
|
-
userName: "Bob",
|
|
333
|
-
preferences: {
|
|
334
|
-
currency: "USD",
|
|
335
|
-
language: "en",
|
|
336
|
-
},
|
|
337
|
-
},
|
|
338
|
-
// Lifecycle hooks for data enrichment
|
|
339
|
-
hooks: {
|
|
340
|
-
onDataUpdate: async (
|
|
341
|
-
data,
|
|
342
|
-
previous
|
|
343
|
-
) => {
|
|
344
|
-
console.log("š Data updated:", { data, previous });
|
|
345
|
-
|
|
346
|
-
// Normalize phone numbers
|
|
347
|
-
if (data.phoneNumber) {
|
|
348
|
-
data.phoneNumber = data.phoneNumber.replace(/\D/g, "");
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
// Validate email
|
|
352
|
-
if (data.email && !data.email.includes("@")) {
|
|
353
|
-
console.warn("ā ļø Invalid email detected");
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
return data as OnboardingData;
|
|
357
|
-
},
|
|
358
|
-
|
|
359
|
-
onContextUpdate: async (
|
|
360
|
-
newContext: UserContext,
|
|
361
|
-
oldContext: UserContext
|
|
362
|
-
) => {
|
|
363
|
-
console.log("š Context updated:", { newContext, oldContext });
|
|
364
|
-
return Promise.resolve();
|
|
365
|
-
},
|
|
366
|
-
},
|
|
367
|
-
persistence: {
|
|
368
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
369
|
-
autoSave: true,
|
|
370
|
-
},
|
|
371
|
-
sessionId,
|
|
372
|
-
schema: {
|
|
373
|
-
type: "object",
|
|
374
|
-
properties: {
|
|
375
|
-
fullName: { type: "string" },
|
|
376
|
-
email: { type: "string" },
|
|
377
|
-
phoneNumber: { type: "string" },
|
|
378
|
-
country: { type: "string" },
|
|
379
|
-
},
|
|
380
|
-
required: ["fullName", "email", "country"],
|
|
381
|
-
},
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
// Create onboarding route
|
|
385
|
-
const onboardingRoute = agent.createRoute({
|
|
386
|
-
title: "User Onboarding",
|
|
387
|
-
description: "Collect user information for account setup",
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
onboardingRoute.initialStep
|
|
391
|
-
.nextStep({
|
|
392
|
-
prompt: "Welcome and ask for name",
|
|
393
|
-
collect: ["fullName"],
|
|
394
|
-
skipIf: (ctx) => !!ctx.data?.fullName,
|
|
395
|
-
})
|
|
396
|
-
.nextStep({
|
|
397
|
-
prompt: "Ask for email",
|
|
398
|
-
collect: ["email"],
|
|
399
|
-
skipIf: (ctx) => !!ctx.data?.email,
|
|
400
|
-
})
|
|
401
|
-
.nextStep({
|
|
402
|
-
prompt: "Ask for phone number (optional)",
|
|
403
|
-
collect: ["phoneNumber"],
|
|
404
|
-
})
|
|
405
|
-
.nextStep({
|
|
406
|
-
prompt: "Ask for country",
|
|
407
|
-
collect: ["country"],
|
|
408
|
-
skipIf: (ctx) => !!ctx.data?.country,
|
|
409
|
-
})
|
|
410
|
-
.nextStep({
|
|
411
|
-
prompt: "Confirm and complete onboarding",
|
|
412
|
-
})
|
|
413
|
-
.nextStep({ step: END_ROUTE });
|
|
414
|
-
|
|
415
|
-
console.log("⨠Onboarding session ready:", agent.session.id);
|
|
416
|
-
|
|
417
|
-
// Demonstrate history override for context setting
|
|
418
|
-
const contextHistory = [
|
|
419
|
-
{ role: "system" as const, content: "User is starting onboarding process" },
|
|
420
|
-
{ role: "user" as const, content: "I'd like to create an account" },
|
|
421
|
-
];
|
|
422
|
-
|
|
423
|
-
const response = await agent.respond({
|
|
424
|
-
history: contextHistory, // Override session history for this response
|
|
425
|
-
});
|
|
426
|
-
|
|
427
|
-
console.log("š¤ Agent:", response.message);
|
|
428
|
-
console.log("š Data collected:", agent.session.getData());
|
|
429
|
-
|
|
430
|
-
// Add to session history for future responses
|
|
431
|
-
await agent.session.addMessage("user", "I'd like to create an account");
|
|
432
|
-
await agent.session.addMessage("assistant", response.message);
|
|
433
|
-
|
|
434
|
-
// Continue with session-managed history
|
|
435
|
-
await agent.session.addMessage("user", "My name is Bob Johnson and email is bob@example.com");
|
|
436
|
-
|
|
437
|
-
const response2 = await agent.respond({
|
|
438
|
-
history: agent.session.getHistory(),
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
console.log("š¤ Agent:", response2.message);
|
|
442
|
-
console.log("š Normalized data:", agent.session.getData());
|
|
443
|
-
// Shows normalized phone and email
|
|
444
|
-
|
|
445
|
-
if (response2.isRouteComplete) {
|
|
446
|
-
console.log("\nā
Onboarding complete!");
|
|
447
|
-
await sendOnboardingEmail(agent.session.getData());
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
await prisma.$disconnect();
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
/**
|
|
454
|
-
* Minimal Example - Server Endpoint Pattern
|
|
455
|
-
*/
|
|
456
|
-
async function serverEndpointExample() {
|
|
457
|
-
const prisma = new PrismaClient();
|
|
458
|
-
|
|
459
|
-
// Simulate server endpoint receiving request
|
|
460
|
-
const requestData = {
|
|
461
|
-
sessionId: "session_user789_support", // From client
|
|
462
|
-
message: "I need help, my name is John and my email is john@example.com",
|
|
463
|
-
};
|
|
464
|
-
|
|
465
|
-
// Define contact form schema
|
|
466
|
-
const contactFormSchema = {
|
|
467
|
-
type: "object",
|
|
468
|
-
properties: {
|
|
469
|
-
name: { type: "string" },
|
|
470
|
-
email: { type: "string" },
|
|
471
|
-
message: { type: "string" },
|
|
472
|
-
},
|
|
473
|
-
required: ["name", "email", "message"],
|
|
474
|
-
};
|
|
475
|
-
|
|
476
|
-
// Create agent with sessionId (loads existing or creates new)
|
|
477
|
-
const agent = new Agent<unknown, ContactFormData>({
|
|
478
|
-
name: "Support Agent",
|
|
479
|
-
provider: new GeminiProvider({
|
|
480
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
481
|
-
model: "models/gemini-2.5-flash",
|
|
482
|
-
}),
|
|
483
|
-
// NEW: Agent-level schema
|
|
484
|
-
schema: contactFormSchema,
|
|
485
|
-
persistence: {
|
|
486
|
-
adapter: new PrismaAdapter<unknown>({ prisma }),
|
|
487
|
-
autoSave: true,
|
|
488
|
-
},
|
|
489
|
-
sessionId: requestData.sessionId, // ⨠Automatic session management
|
|
490
|
-
});
|
|
491
|
-
|
|
492
|
-
// Create a simple contact form route
|
|
493
|
-
const contactRoute = agent.createRoute({
|
|
494
|
-
title: "Contact Form",
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
contactRoute.initialStep
|
|
498
|
-
.nextStep({
|
|
499
|
-
prompt: "Collect all information",
|
|
500
|
-
collect: ["name", "email", "message"],
|
|
501
|
-
})
|
|
502
|
-
.nextStep({
|
|
503
|
-
prompt: "Confirm submission",
|
|
504
|
-
})
|
|
505
|
-
.nextStep({ step: END_ROUTE });
|
|
506
|
-
|
|
507
|
-
// Add user message and respond
|
|
508
|
-
await agent.session.addMessage("user", requestData.message);
|
|
509
|
-
|
|
510
|
-
const response = await agent.respond({
|
|
511
|
-
history: agent.session.getHistory(),
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
await agent.session.addMessage("assistant", response.message);
|
|
515
|
-
|
|
516
|
-
// Return response (like in a REST API)
|
|
517
|
-
const apiResponse = {
|
|
518
|
-
message: response.message,
|
|
519
|
-
sessionId: agent.session.id,
|
|
520
|
-
isComplete: response.isRouteComplete,
|
|
521
|
-
data: agent.session.getData(),
|
|
522
|
-
};
|
|
523
|
-
|
|
524
|
-
console.log("ā
API Response:", apiResponse);
|
|
525
|
-
|
|
526
|
-
if (response.isRouteComplete) {
|
|
527
|
-
console.log("\nā
Contact form submitted!");
|
|
528
|
-
await logContactForm(agent.session.getData());
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
await prisma.$disconnect();
|
|
532
|
-
return apiResponse;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
/**
|
|
536
|
-
* Mock function to send a flight confirmation email.
|
|
537
|
-
*/
|
|
538
|
-
async function sendFlightConfirmation(
|
|
539
|
-
data
|
|
540
|
-
) {
|
|
541
|
-
console.log("\n" + "=".repeat(60));
|
|
542
|
-
console.log("š Sending Flight Confirmation...");
|
|
543
|
-
console.log("=".repeat(60));
|
|
544
|
-
console.log("Booking Details:", JSON.stringify(data, null, 2));
|
|
545
|
-
console.log(
|
|
546
|
-
` - Sending confirmation for ${data?.passengers} passengers to ${data?.destination}.`
|
|
547
|
-
);
|
|
548
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
549
|
-
console.log("⨠Confirmation sent!");
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
/**
|
|
553
|
-
* Mock function to send an onboarding email.
|
|
554
|
-
*/
|
|
555
|
-
async function sendOnboardingEmail(data) {
|
|
556
|
-
console.log("\n" + "=".repeat(60));
|
|
557
|
-
console.log("š Sending Onboarding Email...");
|
|
558
|
-
console.log("=".repeat(60));
|
|
559
|
-
console.log("Onboarding Details:", JSON.stringify(data, null, 2));
|
|
560
|
-
console.log(` - Sending welcome email to ${data?.email}.`);
|
|
561
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
562
|
-
console.log("⨠Email sent!");
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
/**
|
|
566
|
-
* Mock function to log a contact form submission.
|
|
567
|
-
*/
|
|
568
|
-
async function logContactForm(data: Partial<ContactFormData> | undefined) {
|
|
569
|
-
console.log("\n" + "=".repeat(60));
|
|
570
|
-
console.log("š Logging Contact Form Submission...");
|
|
571
|
-
console.log("=".repeat(60));
|
|
572
|
-
console.log("Submission Details:", JSON.stringify(data, null, 2));
|
|
573
|
-
console.log(` - Logging message from ${data?.name}.`);
|
|
574
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
575
|
-
console.log("⨠Submission logged!");
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
// Run the example
|
|
579
|
-
if (require.main === module) {
|
|
580
|
-
example().catch(console.error);
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
export { example, advancedExample, serverEndpointExample };
|