@falai/agent 1.2.8 ā 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -886
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +9 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +5 -5
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +30 -11
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +9 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +14 -0
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +25 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +5 -5
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +17 -0
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +30 -11
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/constants/index.d.ts +0 -9
- package/dist/cjs/constants/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.js +2 -11
- package/dist/cjs/constants/index.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +119 -153
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +471 -324
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +107 -0
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/cjs/core/AutoChainExecutor.js +297 -0
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -0
- package/dist/cjs/core/BranchEvaluator.d.ts +54 -0
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/BranchEvaluator.js +130 -0
- package/dist/cjs/core/BranchEvaluator.js.map +1 -0
- package/dist/cjs/core/DirectiveBus.d.ts +88 -0
- package/dist/cjs/core/DirectiveBus.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveBus.js +196 -0
- package/dist/cjs/core/DirectiveBus.js.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/cjs/core/DirectiveChainTracker.js +121 -0
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -0
- package/dist/cjs/core/Flow.d.ts +186 -0
- package/dist/cjs/core/Flow.d.ts.map +1 -0
- package/dist/cjs/core/Flow.js +550 -0
- package/dist/cjs/core/Flow.js.map +1 -0
- package/dist/cjs/core/FlowRouter.d.ts +182 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -0
- package/dist/cjs/core/{RoutingEngine.js ā FlowRouter.js} +323 -306
- package/dist/cjs/core/FlowRouter.js.map +1 -0
- package/dist/cjs/core/PersistenceManager.d.ts +2 -2
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +7 -7
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +21 -8
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +182 -105
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +1 -1
- package/dist/cjs/core/PromptSectionCache.js +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +18 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +38 -36
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +73 -56
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +1191 -1014
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +124 -26
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +509 -136
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +86 -0
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/cjs/core/SignalEvaluator.js +333 -0
- package/dist/cjs/core/SignalEvaluator.js.map +1 -0
- package/dist/cjs/core/SignalProcessor.d.ts +152 -0
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -0
- package/dist/cjs/core/SignalProcessor.js +562 -0
- package/dist/cjs/core/SignalProcessor.js.map +1 -0
- package/dist/cjs/core/Step.d.ts +43 -32
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +221 -126
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +44 -13
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +174 -91
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +35 -0
- package/dist/cjs/core/createAgent.d.ts.map +1 -0
- package/dist/cjs/core/createAgent.js +39 -0
- package/dist/cjs/core/createAgent.js.map +1 -0
- package/dist/cjs/core/flow-namespace.d.ts +49 -0
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -0
- package/dist/cjs/core/flow-namespace.js +171 -0
- package/dist/cjs/core/flow-namespace.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +1 -1
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +1 -1
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +183 -54
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js +0 -6
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/ai.d.ts +3 -3
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +15 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +22 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/flow.d.ts +513 -0
- package/dist/cjs/types/flow.d.ts.map +1 -0
- package/dist/cjs/types/{route.js ā flow.js} +2 -2
- package/dist/cjs/types/flow.js.map +1 -0
- package/dist/cjs/types/index.d.ts +7 -6
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +6 -2
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +11 -7
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/routing.d.ts +1 -1
- package/dist/cjs/types/routing.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +24 -23
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +248 -0
- package/dist/cjs/types/signals.d.ts.map +1 -0
- package/dist/cjs/types/signals.js +11 -0
- package/dist/cjs/types/signals.js.map +1 -0
- package/dist/cjs/types/template.d.ts +2 -8
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +36 -29
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +7 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/id.d.ts +13 -5
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +24 -10
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -2
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +44 -5
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +197 -38
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/constants/index.d.ts +0 -9
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -9
- package/dist/constants/index.js.map +1 -1
- package/dist/core/Agent.d.ts +119 -153
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +472 -325
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +107 -0
- package/dist/core/AutoChainExecutor.d.ts.map +1 -0
- package/dist/core/AutoChainExecutor.js +293 -0
- package/dist/core/AutoChainExecutor.js.map +1 -0
- package/dist/core/BranchEvaluator.d.ts +54 -0
- package/dist/core/BranchEvaluator.d.ts.map +1 -0
- package/dist/core/BranchEvaluator.js +126 -0
- package/dist/core/BranchEvaluator.js.map +1 -0
- package/dist/core/DirectiveBus.d.ts +88 -0
- package/dist/core/DirectiveBus.d.ts.map +1 -0
- package/dist/core/DirectiveBus.js +192 -0
- package/dist/core/DirectiveBus.js.map +1 -0
- package/dist/core/DirectiveChainTracker.d.ts +49 -0
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -0
- package/dist/core/DirectiveChainTracker.js +117 -0
- package/dist/core/DirectiveChainTracker.js.map +1 -0
- package/dist/core/Flow.d.ts +186 -0
- package/dist/core/Flow.d.ts.map +1 -0
- package/dist/core/Flow.js +546 -0
- package/dist/core/Flow.js.map +1 -0
- package/dist/core/FlowRouter.d.ts +182 -0
- package/dist/core/FlowRouter.d.ts.map +1 -0
- package/dist/core/{RoutingEngine.js ā FlowRouter.js} +322 -305
- package/dist/core/FlowRouter.js.map +1 -0
- package/dist/core/PersistenceManager.d.ts +2 -2
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +7 -7
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +21 -8
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +183 -106
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +1 -1
- package/dist/core/PromptSectionCache.js +1 -1
- package/dist/core/ResponseEngine.d.ts +18 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +38 -36
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +73 -56
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +1193 -1016
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +124 -26
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +509 -137
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +86 -0
- package/dist/core/SignalEvaluator.d.ts.map +1 -0
- package/dist/core/SignalEvaluator.js +326 -0
- package/dist/core/SignalEvaluator.js.map +1 -0
- package/dist/core/SignalProcessor.d.ts +152 -0
- package/dist/core/SignalProcessor.d.ts.map +1 -0
- package/dist/core/SignalProcessor.js +555 -0
- package/dist/core/SignalProcessor.js.map +1 -0
- package/dist/core/Step.d.ts +43 -32
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +220 -126
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +2 -2
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +44 -13
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +174 -91
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +35 -0
- package/dist/core/createAgent.d.ts.map +1 -0
- package/dist/core/createAgent.js +36 -0
- package/dist/core/createAgent.js.map +1 -0
- package/dist/core/flow-namespace.d.ts +49 -0
- package/dist/core/flow-namespace.d.ts.map +1 -0
- package/dist/core/flow-namespace.js +168 -0
- package/dist/core/flow-namespace.js.map +1 -0
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +1 -1
- package/dist/providers/AnthropicProvider.js +1 -1
- package/dist/providers/GeminiProvider.d.ts +1 -1
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +1 -1
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +1 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +1 -1
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/types/agent.d.ts +183 -54
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +0 -6
- package/dist/types/agent.js.map +1 -1
- package/dist/types/ai.d.ts +3 -3
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +18 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/flow.d.ts +513 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +5 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +7 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +11 -7
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/routing.d.ts +1 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -23
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +248 -0
- package/dist/types/signals.d.ts.map +1 -0
- package/dist/types/signals.js +10 -0
- package/dist/types/signals.js.map +1 -0
- package/dist/types/template.d.ts +2 -8
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +36 -29
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +7 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/id.d.ts +13 -5
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +44 -5
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +193 -37
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +22 -200
- package/docs/concepts/architecture.md +281 -0
- package/docs/concepts/directives.md +400 -0
- package/docs/concepts/pipeline.md +399 -0
- package/docs/guides/branching.md +263 -0
- package/docs/guides/compaction.md +163 -0
- package/docs/guides/conditions.md +167 -0
- package/docs/guides/error-handling.md +176 -0
- package/docs/guides/flow-control.md +409 -0
- package/docs/guides/instructions.md +210 -0
- package/docs/guides/persistence.md +182 -0
- package/docs/guides/streaming.md +137 -0
- package/docs/migration/README.md +14 -0
- package/docs/migration/route-to-flow.md +561 -0
- package/docs/migration/v1-to-v2.md +909 -0
- package/docs/reference/adapters.md +481 -0
- package/docs/reference/branches.md +241 -0
- package/docs/reference/create-agent.md +186 -0
- package/docs/reference/directive.md +243 -0
- package/docs/reference/errors.md +122 -0
- package/docs/reference/flow.md +238 -0
- package/docs/reference/instruction.md +177 -0
- package/docs/reference/pre-directive.md +131 -0
- package/docs/reference/providers.md +227 -0
- package/docs/reference/signals.md +356 -0
- package/docs/reference/step.md +339 -0
- package/docs/reference/tool.md +269 -0
- package/docs/start/01-install.md +81 -0
- package/docs/start/02-first-agent.md +196 -0
- package/docs/start/03-collect-data.md +222 -0
- package/docs/start/04-add-tools.md +276 -0
- package/docs/start/05-go-to-production.md +216 -0
- package/examples/01-quickstart.ts +20 -0
- package/examples/02-data-extraction.ts +90 -0
- package/examples/03-tools.ts +136 -0
- package/examples/04-instructions.ts +100 -0
- package/examples/05-branching.ts +140 -0
- package/examples/06-flow-control.ts +103 -0
- package/examples/07-streaming.ts +69 -0
- package/examples/08-persistence.ts +98 -0
- package/examples/09-signals.ts +144 -0
- package/examples/tsconfig.json +30 -0
- package/package.json +2 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +10 -8
- package/src/adapters/PostgreSQLAdapter.ts +26 -10
- package/src/adapters/PrismaAdapter.ts +6 -6
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +31 -12
- package/src/constants/index.ts +2 -10
- package/src/core/Agent.ts +585 -374
- package/src/core/AutoChainExecutor.ts +440 -0
- package/src/core/BranchEvaluator.ts +167 -0
- package/src/core/DirectiveBus.ts +248 -0
- package/src/core/DirectiveChainTracker.ts +144 -0
- package/src/core/Flow.ts +666 -0
- package/src/core/{RoutingEngine.ts ā FlowRouter.ts} +385 -365
- package/src/core/PersistenceManager.ts +8 -8
- package/src/core/PromptComposer.ts +209 -140
- package/src/core/PromptSectionCache.ts +1 -1
- package/src/core/ResponseEngine.ts +61 -46
- package/src/core/ResponseModal.ts +1453 -1240
- package/src/core/ResponsePipeline.ts +655 -175
- package/src/core/SignalEvaluator.ts +420 -0
- package/src/core/SignalProcessor.ts +723 -0
- package/src/core/Step.ts +279 -176
- package/src/core/StreamingToolExecutor.ts +4 -4
- package/src/core/ToolManager.ts +200 -97
- package/src/core/createAgent.ts +40 -0
- package/src/core/flow-namespace.ts +219 -0
- package/src/index.ts +42 -36
- package/src/providers/AnthropicProvider.ts +2 -2
- package/src/providers/GeminiProvider.ts +2 -2
- package/src/providers/OpenAIProvider.ts +2 -2
- package/src/types/agent.ts +182 -53
- package/src/types/ai.ts +3 -3
- package/src/types/errors.ts +18 -0
- package/src/types/flow.ts +590 -0
- package/src/types/index.ts +43 -16
- package/src/types/persistence.ts +12 -8
- package/src/types/routing.ts +1 -1
- package/src/types/session.ts +26 -23
- package/src/types/signals.ts +321 -0
- package/src/types/template.ts +3 -11
- package/src/types/tool.ts +50 -42
- package/src/utils/condition.ts +13 -4
- package/src/utils/id.ts +27 -9
- package/src/utils/index.ts +6 -2
- package/src/utils/session.ts +238 -42
- package/dist/cjs/core/BatchExecutor.d.ts +0 -359
- package/dist/cjs/core/BatchExecutor.d.ts.map +0 -1
- package/dist/cjs/core/BatchExecutor.js +0 -861
- package/dist/cjs/core/BatchExecutor.js.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/cjs/core/BatchPromptBuilder.js +0 -223
- package/dist/cjs/core/BatchPromptBuilder.js.map +0 -1
- package/dist/cjs/core/Route.d.ts +0 -180
- package/dist/cjs/core/Route.d.ts.map +0 -1
- package/dist/cjs/core/Route.js +0 -542
- package/dist/cjs/core/Route.js.map +0 -1
- package/dist/cjs/core/RoutingEngine.d.ts +0 -185
- package/dist/cjs/core/RoutingEngine.d.ts.map +0 -1
- package/dist/cjs/core/RoutingEngine.js.map +0 -1
- package/dist/cjs/types/route.d.ts +0 -336
- package/dist/cjs/types/route.d.ts.map +0 -1
- package/dist/cjs/types/route.js.map +0 -1
- package/dist/core/BatchExecutor.d.ts +0 -359
- package/dist/core/BatchExecutor.d.ts.map +0 -1
- package/dist/core/BatchExecutor.js +0 -856
- package/dist/core/BatchExecutor.js.map +0 -1
- package/dist/core/BatchPromptBuilder.d.ts +0 -89
- package/dist/core/BatchPromptBuilder.d.ts.map +0 -1
- package/dist/core/BatchPromptBuilder.js +0 -219
- package/dist/core/BatchPromptBuilder.js.map +0 -1
- package/dist/core/Route.d.ts +0 -180
- package/dist/core/Route.d.ts.map +0 -1
- package/dist/core/Route.js +0 -538
- package/dist/core/Route.js.map +0 -1
- package/dist/core/RoutingEngine.d.ts +0 -185
- package/dist/core/RoutingEngine.d.ts.map +0 -1
- package/dist/core/RoutingEngine.js.map +0 -1
- package/dist/types/route.d.ts +0 -336
- package/dist/types/route.d.ts.map +0 -1
- package/dist/types/route.js +0 -5
- package/dist/types/route.js.map +0 -1
- package/docs/CONTRIBUTING.md +0 -521
- package/docs/api/README.md +0 -3299
- package/docs/api/overview.md +0 -1410
- package/docs/architecture/data-extraction-flow.md +0 -360
- package/docs/architecture/multi-step-execution.md +0 -277
- package/docs/core/agent/README.md +0 -938
- package/docs/core/agent/context-management.md +0 -796
- package/docs/core/agent/rules-and-prohibitions.md +0 -113
- package/docs/core/agent/session-management.md +0 -693
- package/docs/core/ai-integration/prompt-composition.md +0 -355
- package/docs/core/ai-integration/providers.md +0 -515
- package/docs/core/ai-integration/response-processing.md +0 -433
- package/docs/core/conversation-flows/data-collection.md +0 -772
- package/docs/core/conversation-flows/route-dsl.md +0 -509
- package/docs/core/conversation-flows/routes.md +0 -249
- package/docs/core/conversation-flows/step-transitions.md +0 -731
- package/docs/core/conversation-flows/steps.md +0 -268
- package/docs/core/error-handling.md +0 -830
- package/docs/core/persistence/adapters.md +0 -255
- package/docs/core/persistence/session-storage.md +0 -656
- package/docs/core/routing/intelligent-routing.md +0 -470
- package/docs/core/tools/enhanced-tool.md +0 -186
- package/docs/core/tools/streaming-execution.md +0 -161
- package/docs/core/tools/tool-definition.md +0 -970
- package/docs/core/tools/tool-scoping.md +0 -819
- package/docs/guides/advanced-patterns/publishing.md +0 -186
- package/docs/guides/context-compaction.md +0 -96
- package/docs/guides/error-handling-patterns.md +0 -578
- package/docs/guides/getting-started/README.md +0 -795
- package/docs/guides/migration/README.md +0 -101
- package/docs/guides/migration/flexible-routing-conditions.md +0 -375
- package/docs/guides/migration/multi-step-execution.md +0 -393
- package/docs/guides/migration/response-modal-refactor.md +0 -518
- package/docs/guides/prompt-optimization.md +0 -164
- package/examples/advanced-patterns/context-compaction.ts +0 -223
- package/examples/advanced-patterns/knowledge-based-agent.ts +0 -735
- package/examples/advanced-patterns/persistent-onboarding.ts +0 -728
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +0 -556
- package/examples/advanced-patterns/streaming-responses.ts +0 -656
- package/examples/ai-providers/anthropic-integration.ts +0 -388
- package/examples/ai-providers/openai-integration.ts +0 -228
- package/examples/condition-patterns/function-only-conditions.ts +0 -365
- package/examples/condition-patterns/mixed-array-conditions.ts +0 -477
- package/examples/condition-patterns/route-skipif-patterns.ts +0 -468
- package/examples/condition-patterns/step-skipif-patterns.ts +0 -0
- package/examples/condition-patterns/string-only-conditions.ts +0 -296
- package/examples/conversation-flows/completion-transitions.ts +0 -318
- package/examples/core-concepts/basic-agent.ts +0 -503
- package/examples/core-concepts/modern-streaming-api.ts +0 -309
- package/examples/core-concepts/schema-driven-extraction.ts +0 -332
- package/examples/core-concepts/session-management.ts +0 -494
- package/examples/integrations/database-integration.ts +0 -631
- package/examples/integrations/healthcare-integration.ts +0 -595
- package/examples/integrations/search-integration.ts +0 -530
- package/examples/integrations/server-session-management.ts +0 -307
- package/examples/persistence/custom-adapter.ts +0 -526
- package/examples/persistence/database-persistence.ts +0 -583
- package/examples/persistence/memory-sessions.ts +0 -495
- package/examples/persistence/prisma-schema.example.prisma +0 -74
- package/examples/persistence/redis-persistence.ts +0 -488
- package/examples/tools/basic-tools.ts +0 -765
- package/examples/tools/data-enrichment-tools.ts +0 -593
- package/examples/tools/enhanced-tool-metadata.ts +0 -268
- package/examples/tools/streaming-tool-execution.ts +0 -283
- package/src/core/BatchExecutor.ts +0 -1187
- package/src/core/BatchPromptBuilder.ts +0 -299
- package/src/core/Route.ts +0 -678
- package/src/types/route.ts +0 -392
|
@@ -1,494 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Management Example
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates how to manage conversation state across multiple turns
|
|
5
|
-
* using session management, persistence, and state restoration.
|
|
6
|
-
*
|
|
7
|
-
* Key concepts:
|
|
8
|
-
* - Session state management
|
|
9
|
-
* - Multi-turn conversations
|
|
10
|
-
* - Data persistence across turns
|
|
11
|
-
* - Session restoration
|
|
12
|
-
* - Route transitions with session state
|
|
13
|
-
* - NEW: Flexible ConditionTemplate patterns for session-aware routing:
|
|
14
|
-
* - String-only conditions: "user wants to order" (AI context only)
|
|
15
|
-
* - Function-only conditions: (ctx) => !!ctx.data?.orderId (session state checks)
|
|
16
|
-
* - Mixed arrays: ["payment needed", (ctx) => !ctx.data?.confirmed] (hybrid)
|
|
17
|
-
* - Session-aware skipIf conditions for flow control
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import {
|
|
21
|
-
Agent,
|
|
22
|
-
GeminiProvider,
|
|
23
|
-
MemoryAdapter,
|
|
24
|
-
type Tool,
|
|
25
|
-
ValidationError,
|
|
26
|
-
} from "../../src/index";
|
|
27
|
-
|
|
28
|
-
// Define data types for our multi-step process
|
|
29
|
-
interface OrderData {
|
|
30
|
-
customerName: string;
|
|
31
|
-
productType: "laptop" | "phone" | "tablet";
|
|
32
|
-
budget: number;
|
|
33
|
-
preferredColor?: string;
|
|
34
|
-
urgentDelivery: boolean;
|
|
35
|
-
orderId?: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
interface OrderContext {
|
|
39
|
-
userId: string;
|
|
40
|
-
userName: string;
|
|
41
|
-
isVip: boolean;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
interface PaymentData {
|
|
45
|
-
orderId?: string; // Make this optional to match OrderData
|
|
46
|
-
paymentMethod: "credit_card" | "paypal" | "bank_transfer";
|
|
47
|
-
amount: number;
|
|
48
|
-
confirmed: boolean;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Tools for order processing - using unified Tool interface
|
|
52
|
-
const createOrderTool: Tool<unknown, UnifiedOrderData> = {
|
|
53
|
-
id: "create_order",
|
|
54
|
-
description: "Create a new order from the collected order data",
|
|
55
|
-
parameters: {
|
|
56
|
-
type: "object",
|
|
57
|
-
properties: {},
|
|
58
|
-
},
|
|
59
|
-
handler: (context, args) => {
|
|
60
|
-
const orderId = `ORD-${Date.now()}`;
|
|
61
|
-
console.log(`Creating order ${orderId} for ${context.data?.customerName}`);
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
data: `Order ${orderId} created successfully!`,
|
|
65
|
-
dataUpdate: {
|
|
66
|
-
orderId,
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const processPaymentTool: Tool<unknown, UnifiedOrderData> = {
|
|
73
|
-
id: "process_payment",
|
|
74
|
-
description: "Process payment for an order",
|
|
75
|
-
parameters: {
|
|
76
|
-
type: "object",
|
|
77
|
-
properties: {},
|
|
78
|
-
},
|
|
79
|
-
handler: (context, args) => {
|
|
80
|
-
console.log(`Processing payment for order ${context.data?.orderId}`);
|
|
81
|
-
|
|
82
|
-
// Simulate payment processing
|
|
83
|
-
const success = Math.random() > 0.1; // 90% success rate
|
|
84
|
-
|
|
85
|
-
if (success) {
|
|
86
|
-
return {
|
|
87
|
-
data: `Payment processed successfully! Order ${context.data?.orderId} is now confirmed.`,
|
|
88
|
-
dataUpdate: {
|
|
89
|
-
confirmed: true,
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
} else {
|
|
93
|
-
return {
|
|
94
|
-
data: "Payment failed. Please try again or contact support.",
|
|
95
|
-
dataUpdate: {
|
|
96
|
-
confirmed: false,
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
// Define unified data schema for all order-related interactions
|
|
104
|
-
interface UnifiedOrderData extends OrderData, PaymentData { }
|
|
105
|
-
|
|
106
|
-
const orderSchema = {
|
|
107
|
-
type: "object",
|
|
108
|
-
properties: {
|
|
109
|
-
// Order fields
|
|
110
|
-
customerName: { type: "string" },
|
|
111
|
-
productType: { type: "string", enum: ["laptop", "phone", "tablet"] },
|
|
112
|
-
budget: { type: "number", minimum: 100 },
|
|
113
|
-
preferredColor: { type: "string" },
|
|
114
|
-
urgentDelivery: { type: "boolean" },
|
|
115
|
-
orderId: { type: "string" },
|
|
116
|
-
// Payment fields
|
|
117
|
-
paymentMethod: {
|
|
118
|
-
type: "string",
|
|
119
|
-
enum: ["credit_card", "paypal", "bank_transfer"],
|
|
120
|
-
},
|
|
121
|
-
amount: { type: "number" },
|
|
122
|
-
confirmed: { type: "boolean" },
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
// Create agent with persistence and agent-level schema
|
|
127
|
-
const agent = new Agent<unknown, UnifiedOrderData>({
|
|
128
|
-
name: "OrderBot",
|
|
129
|
-
description:
|
|
130
|
-
"A bot that handles multi-step order processing with session management",
|
|
131
|
-
provider: new GeminiProvider({
|
|
132
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
133
|
-
model: "models/gemini-2.5-flash",
|
|
134
|
-
}),
|
|
135
|
-
// NEW: Agent-level schema
|
|
136
|
-
schema: orderSchema,
|
|
137
|
-
persistence: {
|
|
138
|
-
adapter: new MemoryAdapter(), // In production, use RedisAdapter, PrismaAdapter, etc.
|
|
139
|
-
},
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
// Demonstrate different tool registration patterns
|
|
143
|
-
|
|
144
|
-
// Method 1: Register tools for ID-based reference in steps
|
|
145
|
-
agent.tool.register(createOrderTool);
|
|
146
|
-
agent.tool.register(processPaymentTool);
|
|
147
|
-
|
|
148
|
-
// Method 2: Create specialized validation tool
|
|
149
|
-
const orderValidationTool = agent.tool.createValidation({
|
|
150
|
-
id: "validate_order",
|
|
151
|
-
fields: ["customerName", "productType", "budget"] as const,
|
|
152
|
-
validator: async (context, data) => {
|
|
153
|
-
const errors: ValidationError[] = [];
|
|
154
|
-
if (!data.customerName || data.customerName.length < 2) {
|
|
155
|
-
errors.push({
|
|
156
|
-
field: "customerName",
|
|
157
|
-
value: data.customerName,
|
|
158
|
-
message: "Customer name must be at least 2 characters",
|
|
159
|
-
schemaPath: "customerName"
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
if (!data.budget || data.budget < 100) {
|
|
163
|
-
errors.push({
|
|
164
|
-
field: "budget",
|
|
165
|
-
value: data.budget,
|
|
166
|
-
message: "Budget must be at least $100",
|
|
167
|
-
schemaPath: "budget"
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
return {
|
|
171
|
-
valid: errors.length === 0,
|
|
172
|
-
errors,
|
|
173
|
-
warnings: [],
|
|
174
|
-
};
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
// Method 3: Create data enrichment tool
|
|
179
|
-
const orderEnrichmentTool = agent.tool.createDataEnrichment({
|
|
180
|
-
id: "enrich_order",
|
|
181
|
-
fields: ["productType", "budget"] as const,
|
|
182
|
-
enricher: async (context, data) => {
|
|
183
|
-
// Enrich with fields that exist in UnifiedOrderData
|
|
184
|
-
const urgentDelivery = data.budget > 1000; // Premium orders get urgent delivery
|
|
185
|
-
const preferredColor = data.productType === "laptop" ? "silver" : "black";
|
|
186
|
-
|
|
187
|
-
return {
|
|
188
|
-
urgentDelivery,
|
|
189
|
-
preferredColor,
|
|
190
|
-
};
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// Order collection route with sequential steps
|
|
195
|
-
agent.createRoute({
|
|
196
|
-
title: "Product Order",
|
|
197
|
-
description: "Collect order details and create an order",
|
|
198
|
-
// Mixed condition: AI context + programmatic validation
|
|
199
|
-
when: [
|
|
200
|
-
"user wants to place an order or buy something",
|
|
201
|
-
(ctx) => {
|
|
202
|
-
const message = ctx.helpers.getLastUserMessage()?.toLowerCase() || '';
|
|
203
|
-
return message.includes('order') || message.includes('buy') || message.includes('purchase');
|
|
204
|
-
}
|
|
205
|
-
],
|
|
206
|
-
// Skip if user already has a pending order
|
|
207
|
-
skipIf: [
|
|
208
|
-
"user already has an active order",
|
|
209
|
-
(ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed
|
|
210
|
-
],
|
|
211
|
-
// NEW: Required fields for route completion
|
|
212
|
-
requiredFields: ["customerName", "productType", "budget"],
|
|
213
|
-
// NEW: Optional fields that enhance the experience
|
|
214
|
-
optionalFields: ["preferredColor", "urgentDelivery", "orderId"],
|
|
215
|
-
// Sequential steps for order collection
|
|
216
|
-
steps: [
|
|
217
|
-
{
|
|
218
|
-
id: "ask_name",
|
|
219
|
-
description: "Ask for customer name",
|
|
220
|
-
prompt: "Hi! I'd like to help you place an order. What's your name?",
|
|
221
|
-
collect: ["customerName"],
|
|
222
|
-
// String-only skipIf for AI context
|
|
223
|
-
skipIf: "customer name already provided",
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
id: "ask_product",
|
|
227
|
-
description: "Ask for product type",
|
|
228
|
-
prompt: "What would you like to order? (laptop, phone, or tablet)",
|
|
229
|
-
collect: ["productType"],
|
|
230
|
-
requires: ["customerName"],
|
|
231
|
-
// Function-only skipIf for programmatic check
|
|
232
|
-
skipIf: (ctx) => !!ctx.data?.productType,
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
id: "ask_budget",
|
|
236
|
-
description: "Ask for budget",
|
|
237
|
-
prompt: "What's your budget for this purchase?",
|
|
238
|
-
collect: ["budget"],
|
|
239
|
-
requires: ["customerName", "productType"],
|
|
240
|
-
// Mixed skipIf: AI context + programmatic logic
|
|
241
|
-
skipIf: [
|
|
242
|
-
"budget already specified",
|
|
243
|
-
(ctx) => ctx.data?.budget !== undefined
|
|
244
|
-
],
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
id: "ask_color",
|
|
248
|
-
description: "Ask for preferred color",
|
|
249
|
-
prompt: "Do you have a preferred color?",
|
|
250
|
-
collect: ["preferredColor"],
|
|
251
|
-
requires: ["customerName", "productType", "budget"],
|
|
252
|
-
// Function-only skipIf
|
|
253
|
-
skipIf: (ctx) => !!ctx.data?.preferredColor,
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
id: "ask_urgent",
|
|
257
|
-
description: "Ask about urgent delivery",
|
|
258
|
-
prompt: "Do you need urgent delivery?",
|
|
259
|
-
collect: ["urgentDelivery"],
|
|
260
|
-
requires: ["customerName", "productType", "budget"],
|
|
261
|
-
// String-only skipIf for simple cases
|
|
262
|
-
skipIf: "delivery preference already collected",
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
id: "create_order",
|
|
266
|
-
description: "Create the order",
|
|
267
|
-
prompt: "Great! Let me create your order.",
|
|
268
|
-
tools: ["create_order"], // Reference by ID
|
|
269
|
-
requires: ["customerName", "productType", "budget"],
|
|
270
|
-
},
|
|
271
|
-
],
|
|
272
|
-
onComplete: {
|
|
273
|
-
nextStep: "Payment Processing",
|
|
274
|
-
condition: "Order has been created successfully",
|
|
275
|
-
},
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
// Payment route with sequential steps
|
|
279
|
-
agent.createRoute({
|
|
280
|
-
title: "Payment Processing",
|
|
281
|
-
description: "Process payment for an order",
|
|
282
|
-
// Function-only condition for programmatic logic
|
|
283
|
-
when: (ctx) => !!ctx.data?.orderId && !ctx.data?.confirmed,
|
|
284
|
-
// Skip if payment already processed
|
|
285
|
-
skipIf: (ctx) => !!ctx.data?.confirmed,
|
|
286
|
-
// NEW: Required fields for route completion
|
|
287
|
-
requiredFields: ["orderId", "paymentMethod", "amount"],
|
|
288
|
-
// NEW: Optional fields
|
|
289
|
-
optionalFields: ["confirmed"],
|
|
290
|
-
// Sequential steps for payment processing
|
|
291
|
-
steps: [
|
|
292
|
-
{
|
|
293
|
-
id: "ask_payment_method",
|
|
294
|
-
description: "Ask for payment method",
|
|
295
|
-
prompt:
|
|
296
|
-
"Now let's process payment for your order. What payment method would you prefer?",
|
|
297
|
-
collect: ["paymentMethod"],
|
|
298
|
-
// Mixed skipIf: AI context + programmatic check
|
|
299
|
-
skipIf: [
|
|
300
|
-
"payment method already selected",
|
|
301
|
-
(ctx) => !!ctx.data?.paymentMethod
|
|
302
|
-
],
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
id: "ask_amount",
|
|
306
|
-
description: "Ask for payment amount",
|
|
307
|
-
prompt: "What's the payment amount?",
|
|
308
|
-
collect: ["amount"],
|
|
309
|
-
requires: ["paymentMethod"],
|
|
310
|
-
// Function-only skipIf
|
|
311
|
-
skipIf: (ctx) => ctx.data?.amount !== undefined,
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
id: "process_payment",
|
|
315
|
-
description: "Process the payment",
|
|
316
|
-
prompt: "Processing your payment...",
|
|
317
|
-
tools: ["process_payment"], // Reference by ID
|
|
318
|
-
requires: ["orderId", "paymentMethod", "amount"],
|
|
319
|
-
},
|
|
320
|
-
],
|
|
321
|
-
onComplete: "Order Complete", // End conversation when payment is complete
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
// Demonstration of automatic session management
|
|
325
|
-
async function demonstrateSessionManagement() {
|
|
326
|
-
console.log("=== Automatic Session Management Demo ===\n");
|
|
327
|
-
|
|
328
|
-
// Create agent with automatic session management
|
|
329
|
-
const sessionAgent = new Agent<unknown, UnifiedOrderData>({
|
|
330
|
-
name: "OrderBot",
|
|
331
|
-
description: "A bot that handles multi-step order processing",
|
|
332
|
-
provider: new GeminiProvider({
|
|
333
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
334
|
-
model: "models/gemini-2.5-flash",
|
|
335
|
-
}),
|
|
336
|
-
// NEW: Agent-level schema
|
|
337
|
-
schema: orderSchema,
|
|
338
|
-
persistence: {
|
|
339
|
-
adapter: new MemoryAdapter(),
|
|
340
|
-
},
|
|
341
|
-
sessionId: "user-alice-123", // Automatically creates/loads this session
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
// Copy routes to the session agent
|
|
345
|
-
agent.getRoutes().forEach(route => {
|
|
346
|
-
sessionAgent.createRoute(route.toOptions());
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
// Turn 1: Start order process - simple message API
|
|
350
|
-
console.log("Turn 1: Starting order process");
|
|
351
|
-
console.log("User: Hi, I'm Alice and I want to buy a laptop");
|
|
352
|
-
|
|
353
|
-
const response1 = await sessionAgent.chat("Hi, I'm Alice and I want to buy a laptop");
|
|
354
|
-
|
|
355
|
-
console.log("Bot:", response1.message);
|
|
356
|
-
console.log("Session ID:", sessionAgent.session.id);
|
|
357
|
-
console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
|
|
358
|
-
console.log("History length:", sessionAgent.session.getHistory().length);
|
|
359
|
-
console.log();
|
|
360
|
-
|
|
361
|
-
// Turn 2: Provide budget - session automatically maintained
|
|
362
|
-
console.log("Turn 2: Providing budget");
|
|
363
|
-
console.log("User: My budget is $1500");
|
|
364
|
-
|
|
365
|
-
const response2 = await sessionAgent.chat("My budget is $1500");
|
|
366
|
-
|
|
367
|
-
console.log("Bot:", response2.message);
|
|
368
|
-
console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
|
|
369
|
-
console.log("History length:", sessionAgent.session.getHistory().length);
|
|
370
|
-
console.log();
|
|
371
|
-
|
|
372
|
-
// Turn 3: Complete order details - session automatically updated
|
|
373
|
-
console.log("Turn 3: Completing order and transitioning to payment");
|
|
374
|
-
console.log("User: I want black color and urgent delivery please");
|
|
375
|
-
|
|
376
|
-
const response3 = await sessionAgent.chat("I want black color and urgent delivery please");
|
|
377
|
-
|
|
378
|
-
console.log("Bot:", response3.message);
|
|
379
|
-
console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
|
|
380
|
-
console.log("Route complete:", response3.isRouteComplete);
|
|
381
|
-
console.log("History length:", sessionAgent.session.getHistory().length);
|
|
382
|
-
console.log();
|
|
383
|
-
|
|
384
|
-
// Turn 4: Process payment - automatic route transition
|
|
385
|
-
console.log("Turn 4: Processing payment in transitioned route");
|
|
386
|
-
console.log("User: I'll pay with credit card, amount is $1599");
|
|
387
|
-
|
|
388
|
-
const response4 = await sessionAgent.chat("I'll pay with credit card, amount is $1599");
|
|
389
|
-
|
|
390
|
-
console.log("Bot:", response4.message);
|
|
391
|
-
console.log("Session data:", JSON.stringify(sessionAgent.session.getData(), null, 2));
|
|
392
|
-
console.log("Route complete:", response4.isRouteComplete);
|
|
393
|
-
console.log("Final history length:", sessionAgent.session.getHistory().length);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
// Demonstrate automatic session persistence and restoration
|
|
397
|
-
async function demonstrateSessionPersistence() {
|
|
398
|
-
console.log("\n=== Automatic Session Persistence Demo ===\n");
|
|
399
|
-
|
|
400
|
-
// Create agent with specific sessionId for demonstration
|
|
401
|
-
const sessionId = "demo-session-456";
|
|
402
|
-
const persistentAgent = new Agent<OrderContext, UnifiedOrderData>({
|
|
403
|
-
name: "Order Assistant",
|
|
404
|
-
description: "Help customers place orders with automatic persistence",
|
|
405
|
-
provider: new GeminiProvider({
|
|
406
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
407
|
-
model: "models/gemini-2.5-flash",
|
|
408
|
-
}),
|
|
409
|
-
context: {
|
|
410
|
-
userId: "user_alice",
|
|
411
|
-
userName: "Alice",
|
|
412
|
-
isVip: false,
|
|
413
|
-
},
|
|
414
|
-
// NEW: Agent-level schema
|
|
415
|
-
schema: orderSchema,
|
|
416
|
-
persistence: {
|
|
417
|
-
adapter: new MemoryAdapter(),
|
|
418
|
-
autoSave: true, // Automatic persistence
|
|
419
|
-
},
|
|
420
|
-
sessionId, // Agent automatically loads or creates this session
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
// Copy routes to the persistent agent
|
|
424
|
-
agent.getRoutes().forEach(route => {
|
|
425
|
-
persistentAgent.createRoute(route.toOptions());
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
console.log("Session ready:", persistentAgent.session.id);
|
|
429
|
-
|
|
430
|
-
// Start conversation - session automatically managed
|
|
431
|
-
const response1 = await persistentAgent.chat("I want to buy a phone for $800");
|
|
432
|
-
|
|
433
|
-
console.log("After first interaction:");
|
|
434
|
-
console.log("š¤ Agent:", response1.message);
|
|
435
|
-
console.log("Session data:", JSON.stringify(persistentAgent.session.getData(), null, 2));
|
|
436
|
-
console.log("History length:", persistentAgent.session.getHistory().length);
|
|
437
|
-
console.log("Session automatically saved to persistence ā");
|
|
438
|
-
|
|
439
|
-
// Simulate server restart - create new agent instance with same sessionId
|
|
440
|
-
console.log("\nš Simulating server restart - creating new agent instance...");
|
|
441
|
-
|
|
442
|
-
const restoredAgent = new Agent<OrderContext, UnifiedOrderData>({
|
|
443
|
-
name: "Order Assistant",
|
|
444
|
-
provider: new GeminiProvider({
|
|
445
|
-
apiKey: process.env.GEMINI_API_KEY!,
|
|
446
|
-
model: "models/gemini-2.5-flash",
|
|
447
|
-
}),
|
|
448
|
-
context: {
|
|
449
|
-
userId: "user_alice",
|
|
450
|
-
userName: "Alice",
|
|
451
|
-
isVip: false,
|
|
452
|
-
},
|
|
453
|
-
// NEW: Agent-level schema
|
|
454
|
-
schema: orderSchema,
|
|
455
|
-
persistence: {
|
|
456
|
-
adapter: new MemoryAdapter(), // Same adapter instance for demo
|
|
457
|
-
autoSave: true,
|
|
458
|
-
},
|
|
459
|
-
sessionId, // Same sessionId - automatically loads existing session
|
|
460
|
-
});
|
|
461
|
-
|
|
462
|
-
// Copy routes to the restored agent
|
|
463
|
-
agent.getRoutes().forEach(route => {
|
|
464
|
-
restoredAgent.createRoute(route.toOptions());
|
|
465
|
-
});
|
|
466
|
-
|
|
467
|
-
console.log("Session automatically restored:");
|
|
468
|
-
console.log("- Session ID:", restoredAgent.session.id);
|
|
469
|
-
console.log("- History length:", restoredAgent.session.getHistory().length);
|
|
470
|
-
console.log("- Restored data:", JSON.stringify(restoredAgent.session.getData(), null, 2));
|
|
471
|
-
|
|
472
|
-
// Continue conversation seamlessly
|
|
473
|
-
const response2 = await restoredAgent.chat("Actually, make it urgent delivery");
|
|
474
|
-
|
|
475
|
-
console.log("\nAfter continuing with restored session:");
|
|
476
|
-
console.log("š¤ Agent:", response2.message);
|
|
477
|
-
console.log("Session data:", JSON.stringify(restoredAgent.session.getData(), null, 2));
|
|
478
|
-
console.log("History length:", restoredAgent.session.getHistory().length);
|
|
479
|
-
console.log("Session automatically saved again ā");
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
// Run demonstrations
|
|
483
|
-
async function main() {
|
|
484
|
-
try {
|
|
485
|
-
await demonstrateSessionManagement();
|
|
486
|
-
await demonstrateSessionPersistence();
|
|
487
|
-
} catch (error) {
|
|
488
|
-
console.error("Error:", error);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
493
|
-
main().catch(console.error);
|
|
494
|
-
}
|