@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,526 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom Persistence Adapter Example
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates how to create a custom persistence adapter
|
|
5
|
-
* that implements the PersistenceAdapter interface. It shows a simple
|
|
6
|
-
* in-memory implementation that can be extended to use any database.
|
|
7
|
-
*
|
|
8
|
-
* Key concepts:
|
|
9
|
-
* - Implementing PersistenceAdapter interface
|
|
10
|
-
* - SessionRepository and MessageRepository interfaces
|
|
11
|
-
* - Custom storage backends (database, file system, etc.)
|
|
12
|
-
* - Error handling and data validation
|
|
13
|
-
* - Async operations and resource management
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import type {
|
|
17
|
-
PersistenceAdapter,
|
|
18
|
-
SessionRepository,
|
|
19
|
-
MessageRepository,
|
|
20
|
-
SessionData,
|
|
21
|
-
MessageData,
|
|
22
|
-
SessionStatus,
|
|
23
|
-
CollectedStateData,
|
|
24
|
-
} from "../../src/types";
|
|
25
|
-
import { Agent, GeminiProvider, createSessionId } from "../../src";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Simple in-memory storage for demonstration
|
|
29
|
-
* In a real implementation, this would be replaced with database calls
|
|
30
|
-
*/
|
|
31
|
-
class InMemoryStorage {
|
|
32
|
-
private sessions = new Map<string, SessionData>();
|
|
33
|
-
private messages = new Map<string, MessageData>();
|
|
34
|
-
private sessionMessages = new Map<string, string[]>(); // sessionId -> messageIds
|
|
35
|
-
|
|
36
|
-
// Session operations
|
|
37
|
-
createSession(
|
|
38
|
-
data: Omit<SessionData, "createdAt" | "updatedAt"> & {
|
|
39
|
-
id?: string;
|
|
40
|
-
}
|
|
41
|
-
): SessionData {
|
|
42
|
-
const id =
|
|
43
|
-
data.id || createSessionId();
|
|
44
|
-
const session: SessionData = {
|
|
45
|
-
...data,
|
|
46
|
-
id,
|
|
47
|
-
createdAt: new Date(),
|
|
48
|
-
updatedAt: new Date(),
|
|
49
|
-
};
|
|
50
|
-
this.sessions.set(id, session);
|
|
51
|
-
return session;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
getSession(id: string): SessionData | null {
|
|
55
|
-
return this.sessions.get(id) || null;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
getSessionsByUserId(userId: string): SessionData[] {
|
|
59
|
-
return Array.from(this.sessions.values()).filter(
|
|
60
|
-
(s) => s.userId === userId
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
updateSession(id: string, updates: Partial<SessionData>): SessionData | null {
|
|
65
|
-
const existing = this.sessions.get(id);
|
|
66
|
-
if (!existing) return null;
|
|
67
|
-
|
|
68
|
-
const updated = {
|
|
69
|
-
...existing,
|
|
70
|
-
...updates,
|
|
71
|
-
updatedAt: new Date(),
|
|
72
|
-
};
|
|
73
|
-
this.sessions.set(id, updated);
|
|
74
|
-
return updated;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
updateSessionStatus(
|
|
78
|
-
id: string,
|
|
79
|
-
status: SessionStatus,
|
|
80
|
-
completedAt?: Date
|
|
81
|
-
): SessionData | null {
|
|
82
|
-
const existing = this.sessions.get(id);
|
|
83
|
-
if (!existing) return null;
|
|
84
|
-
|
|
85
|
-
const updated = {
|
|
86
|
-
...existing,
|
|
87
|
-
status,
|
|
88
|
-
completedAt:
|
|
89
|
-
status === "completed"
|
|
90
|
-
? completedAt || new Date()
|
|
91
|
-
: existing.completedAt,
|
|
92
|
-
updatedAt: new Date(),
|
|
93
|
-
};
|
|
94
|
-
this.sessions.set(id, updated);
|
|
95
|
-
return updated;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
updateCollectedData(
|
|
99
|
-
id: string,
|
|
100
|
-
collectedData: CollectedStateData<Record<string, unknown>>
|
|
101
|
-
): SessionData<Record<string, unknown>> | null {
|
|
102
|
-
const existing = this.sessions.get(id);
|
|
103
|
-
if (!existing) return null;
|
|
104
|
-
|
|
105
|
-
const updated: SessionData<Record<string, unknown>> = {
|
|
106
|
-
...existing,
|
|
107
|
-
collectedData: {
|
|
108
|
-
...(existing.collectedData || {}),
|
|
109
|
-
...collectedData,
|
|
110
|
-
},
|
|
111
|
-
updatedAt: new Date(),
|
|
112
|
-
};
|
|
113
|
-
this.sessions.set(id, updated);
|
|
114
|
-
return updated;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
updateRouteStep(
|
|
118
|
-
id: string,
|
|
119
|
-
route?: string,
|
|
120
|
-
step?: string
|
|
121
|
-
): SessionData | null {
|
|
122
|
-
const existing = this.sessions.get(id);
|
|
123
|
-
if (!existing) return null;
|
|
124
|
-
|
|
125
|
-
const updated = {
|
|
126
|
-
...existing,
|
|
127
|
-
currentRoute: route,
|
|
128
|
-
currentStep: step,
|
|
129
|
-
updatedAt: new Date(),
|
|
130
|
-
};
|
|
131
|
-
this.sessions.set(id, updated);
|
|
132
|
-
return updated;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
incrementMessageCount(id: string): SessionData | null {
|
|
136
|
-
const existing = this.sessions.get(id);
|
|
137
|
-
if (!existing) return null;
|
|
138
|
-
|
|
139
|
-
const updated = {
|
|
140
|
-
...existing,
|
|
141
|
-
messageCount: (existing.messageCount || 0) + 1,
|
|
142
|
-
lastMessageAt: new Date(),
|
|
143
|
-
updatedAt: new Date(),
|
|
144
|
-
};
|
|
145
|
-
this.sessions.set(id, updated);
|
|
146
|
-
return updated;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
deleteSession(id: string): boolean {
|
|
150
|
-
return this.sessions.delete(id);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// Message operations
|
|
154
|
-
createMessage(data: Omit<MessageData, "id" | "createdAt">): MessageData {
|
|
155
|
-
const id = `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
156
|
-
const message: MessageData = {
|
|
157
|
-
...data,
|
|
158
|
-
id,
|
|
159
|
-
createdAt: new Date(),
|
|
160
|
-
};
|
|
161
|
-
this.messages.set(id, message);
|
|
162
|
-
|
|
163
|
-
// Track messages by session
|
|
164
|
-
const sessionMessages = this.sessionMessages.get(data.sessionId) || [];
|
|
165
|
-
sessionMessages.push(id);
|
|
166
|
-
this.sessionMessages.set(data.sessionId, sessionMessages);
|
|
167
|
-
|
|
168
|
-
return message;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
getMessage(id: string): MessageData | null {
|
|
172
|
-
return this.messages.get(id) || null;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
getMessagesBySessionId(sessionId: string): MessageData[] {
|
|
176
|
-
const messageIds = this.sessionMessages.get(sessionId) || [];
|
|
177
|
-
return messageIds
|
|
178
|
-
.map((id) => this.messages.get(id))
|
|
179
|
-
.filter((msg): msg is MessageData => msg !== undefined)
|
|
180
|
-
.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
getMessagesByUserId(userId: string): MessageData[] {
|
|
184
|
-
return Array.from(this.messages.values())
|
|
185
|
-
.filter((msg) => msg.userId === userId)
|
|
186
|
-
.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
deleteMessage(id: string): boolean {
|
|
190
|
-
const message = this.messages.get(id);
|
|
191
|
-
if (!message) return false;
|
|
192
|
-
|
|
193
|
-
this.messages.delete(id);
|
|
194
|
-
|
|
195
|
-
// Remove from session tracking
|
|
196
|
-
const sessionMessages = this.sessionMessages.get(message.sessionId) || [];
|
|
197
|
-
const filtered = sessionMessages.filter((msgId) => msgId !== id);
|
|
198
|
-
if (filtered.length === 0) {
|
|
199
|
-
this.sessionMessages.delete(message.sessionId);
|
|
200
|
-
} else {
|
|
201
|
-
this.sessionMessages.set(message.sessionId, filtered);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return true;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
deleteMessagesBySessionId(sessionId: string): number {
|
|
208
|
-
const messageIds = this.sessionMessages.get(sessionId) || [];
|
|
209
|
-
let deletedCount = 0;
|
|
210
|
-
|
|
211
|
-
for (const messageId of messageIds) {
|
|
212
|
-
if (this.messages.delete(messageId)) {
|
|
213
|
-
deletedCount++;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
this.sessionMessages.delete(sessionId);
|
|
218
|
-
return deletedCount;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
deleteMessagesByUserId(userId: string): number {
|
|
222
|
-
const messagesToDelete = Array.from(this.messages.values()).filter(
|
|
223
|
-
(msg) => msg.userId === userId
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
let deletedCount = 0;
|
|
227
|
-
for (const message of messagesToDelete) {
|
|
228
|
-
if (this.messages.delete(message.id)) {
|
|
229
|
-
// Remove from session tracking
|
|
230
|
-
const sessionMessages =
|
|
231
|
-
this.sessionMessages.get(message.sessionId) || [];
|
|
232
|
-
const filtered = sessionMessages.filter(
|
|
233
|
-
(msgId) => msgId !== message.id
|
|
234
|
-
);
|
|
235
|
-
if (filtered.length === 0) {
|
|
236
|
-
this.sessionMessages.delete(message.sessionId);
|
|
237
|
-
} else {
|
|
238
|
-
this.sessionMessages.set(message.sessionId, filtered);
|
|
239
|
-
}
|
|
240
|
-
deletedCount++;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return deletedCount;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Custom Session Repository implementation
|
|
250
|
-
*/
|
|
251
|
-
class CustomSessionRepository<TData = Record<string, unknown>>
|
|
252
|
-
implements SessionRepository<TData> {
|
|
253
|
-
constructor(private storage: InMemoryStorage) { }
|
|
254
|
-
|
|
255
|
-
async create(
|
|
256
|
-
data: Omit<SessionData<TData>, "createdAt" | "updatedAt"> & {
|
|
257
|
-
id?: string;
|
|
258
|
-
}
|
|
259
|
-
): Promise<SessionData<TData>> {
|
|
260
|
-
return Promise.resolve(
|
|
261
|
-
this.storage.createSession({
|
|
262
|
-
...data,
|
|
263
|
-
id:
|
|
264
|
-
data.id ||
|
|
265
|
-
createSessionId(),
|
|
266
|
-
}) as SessionData<TData>
|
|
267
|
-
);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
async findById(id: string): Promise<SessionData<TData> | null> {
|
|
271
|
-
return Promise.resolve(
|
|
272
|
-
this.storage.getSession(id) as SessionData<TData> | null
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
async findActiveByUserId(userId: string): Promise<SessionData<TData> | null> {
|
|
277
|
-
const sessions = this.storage.getSessionsByUserId(userId);
|
|
278
|
-
return Promise.resolve(
|
|
279
|
-
(sessions.find((s) => s.status === "active") as SessionData<TData>) ||
|
|
280
|
-
null
|
|
281
|
-
);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
async findByUserId(
|
|
285
|
-
userId: string,
|
|
286
|
-
limit = 50
|
|
287
|
-
): Promise<SessionData<TData>[]> {
|
|
288
|
-
const sessions = this.storage.getSessionsByUserId(userId);
|
|
289
|
-
return Promise.resolve(
|
|
290
|
-
sessions
|
|
291
|
-
.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())
|
|
292
|
-
.slice(0, limit) as SessionData<TData>[]
|
|
293
|
-
);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
async update(
|
|
297
|
-
id: string,
|
|
298
|
-
data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>
|
|
299
|
-
): Promise<SessionData<TData> | null> {
|
|
300
|
-
return Promise.resolve(
|
|
301
|
-
this.storage.updateSession(id, data) as SessionData<TData> | null
|
|
302
|
-
);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
async updateStatus(
|
|
306
|
-
id: string,
|
|
307
|
-
status: SessionStatus,
|
|
308
|
-
completedAt?: Date
|
|
309
|
-
): Promise<SessionData<TData> | null> {
|
|
310
|
-
return Promise.resolve(
|
|
311
|
-
this.storage.updateSessionStatus(
|
|
312
|
-
id,
|
|
313
|
-
status,
|
|
314
|
-
completedAt
|
|
315
|
-
) as SessionData<TData> | null
|
|
316
|
-
);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
async updateCollectedData(
|
|
320
|
-
id: string,
|
|
321
|
-
collectedData: CollectedStateData<TData>
|
|
322
|
-
): Promise<SessionData<TData> | null> {
|
|
323
|
-
return Promise.resolve(
|
|
324
|
-
this.storage.updateCollectedData(
|
|
325
|
-
id,
|
|
326
|
-
collectedData
|
|
327
|
-
) as SessionData<TData> | null
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
async updateRouteStep(
|
|
332
|
-
id: string,
|
|
333
|
-
route?: string,
|
|
334
|
-
step?: string
|
|
335
|
-
): Promise<SessionData<TData> | null> {
|
|
336
|
-
return Promise.resolve(
|
|
337
|
-
this.storage.updateRouteStep(id, route, step) as SessionData<TData> | null
|
|
338
|
-
);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
async incrementMessageCount(id: string): Promise<SessionData<TData> | null> {
|
|
342
|
-
return Promise.resolve(
|
|
343
|
-
this.storage.incrementMessageCount(id) as SessionData<TData> | null
|
|
344
|
-
);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
async delete(id: string): Promise<boolean> {
|
|
348
|
-
return Promise.resolve(this.storage.deleteSession(id));
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
/**
|
|
353
|
-
* Custom Message Repository implementation
|
|
354
|
-
*/
|
|
355
|
-
class CustomMessageRepository implements MessageRepository {
|
|
356
|
-
constructor(private storage: InMemoryStorage) { }
|
|
357
|
-
|
|
358
|
-
async create(
|
|
359
|
-
data: Omit<MessageData, "id" | "createdAt">
|
|
360
|
-
): Promise<MessageData> {
|
|
361
|
-
return Promise.resolve(this.storage.createMessage(data));
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
async findById(id: string): Promise<MessageData | null> {
|
|
365
|
-
return Promise.resolve(this.storage.getMessage(id));
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
async findBySessionId(
|
|
369
|
-
sessionId: string,
|
|
370
|
-
limit = 100
|
|
371
|
-
): Promise<MessageData[]> {
|
|
372
|
-
const messages = this.storage.getMessagesBySessionId(sessionId);
|
|
373
|
-
return Promise.resolve(messages.slice(-limit)); // Get most recent messages
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
async findByUserId(userId: string, limit = 100): Promise<MessageData[]> {
|
|
377
|
-
const messages = this.storage.getMessagesByUserId(userId);
|
|
378
|
-
return Promise.resolve(messages.slice(-limit)); // Get most recent messages
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
async delete(id: string): Promise<boolean> {
|
|
382
|
-
return Promise.resolve(this.storage.deleteMessage(id));
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
async deleteBySessionId(sessionId: string): Promise<number> {
|
|
386
|
-
return Promise.resolve(this.storage.deleteMessagesBySessionId(sessionId));
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
async deleteByUserId(userId: string): Promise<number> {
|
|
390
|
-
return Promise.resolve(this.storage.deleteMessagesByUserId(userId));
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
/**
|
|
395
|
-
* Custom Persistence Adapter
|
|
396
|
-
*
|
|
397
|
-
* This adapter demonstrates how to implement a custom persistence layer.
|
|
398
|
-
* Replace the InMemoryStorage with actual database calls for production use.
|
|
399
|
-
*/
|
|
400
|
-
export class CustomAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
|
|
401
|
-
private storage = new InMemoryStorage();
|
|
402
|
-
|
|
403
|
-
readonly sessionRepository: SessionRepository<TData>;
|
|
404
|
-
readonly messageRepository: MessageRepository;
|
|
405
|
-
|
|
406
|
-
constructor() {
|
|
407
|
-
this.sessionRepository = new CustomSessionRepository<TData>(this.storage);
|
|
408
|
-
this.messageRepository = new CustomMessageRepository(this.storage);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* Initialize the adapter (create tables, indexes, etc.)
|
|
413
|
-
*/
|
|
414
|
-
async initialize(): Promise<void> {
|
|
415
|
-
console.log("š§ Initializing CustomAdapter...");
|
|
416
|
-
// In a real implementation, you might:
|
|
417
|
-
// - Create database tables
|
|
418
|
-
// - Set up indexes
|
|
419
|
-
// - Run migrations
|
|
420
|
-
// - Establish database connections
|
|
421
|
-
|
|
422
|
-
// For this demo, we just log
|
|
423
|
-
console.log("ā
CustomAdapter initialized");
|
|
424
|
-
return Promise.resolve();
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
/**
|
|
428
|
-
* Disconnect/cleanup resources
|
|
429
|
-
*/
|
|
430
|
-
async disconnect(): Promise<void> {
|
|
431
|
-
console.log("š Disconnecting CustomAdapter...");
|
|
432
|
-
// In a real implementation, you might:
|
|
433
|
-
// - Close database connections
|
|
434
|
-
// - Clean up resources
|
|
435
|
-
// - Flush pending writes
|
|
436
|
-
|
|
437
|
-
console.log("ā
CustomAdapter disconnected");
|
|
438
|
-
return Promise.resolve();
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
// ==============================================================================
|
|
443
|
-
// USAGE EXAMPLE
|
|
444
|
-
// ==============================================================================
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* Example: Using Custom Adapter with Agent
|
|
448
|
-
*/
|
|
449
|
-
async function demonstrateCustomAdapter() {
|
|
450
|
-
console.log("šļø Custom Persistence Adapter Demo");
|
|
451
|
-
console.log("=".repeat(50));
|
|
452
|
-
|
|
453
|
-
// Create custom adapter
|
|
454
|
-
const adapter = new CustomAdapter();
|
|
455
|
-
|
|
456
|
-
// Initialize adapter
|
|
457
|
-
await adapter.initialize();
|
|
458
|
-
|
|
459
|
-
// Create agent with custom persistence
|
|
460
|
-
const agent = new Agent({
|
|
461
|
-
name: "CustomPersistenceAgent",
|
|
462
|
-
description: "Agent with custom persistence adapter",
|
|
463
|
-
provider: new GeminiProvider({
|
|
464
|
-
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
465
|
-
model: "models/gemini-2.5-flash",
|
|
466
|
-
}),
|
|
467
|
-
persistence: {
|
|
468
|
-
adapter,
|
|
469
|
-
// Optional: configure auto-save behavior
|
|
470
|
-
autoSave: true, // Auto-saves session step after each response
|
|
471
|
-
},
|
|
472
|
-
});
|
|
473
|
-
|
|
474
|
-
// Session is automatically managed by the agent
|
|
475
|
-
console.log("⨠Session ready:", agent.session.id);
|
|
476
|
-
|
|
477
|
-
// First interaction
|
|
478
|
-
console.log("\nš¬ First interaction:");
|
|
479
|
-
|
|
480
|
-
await agent.session.addMessage("user", "Hi, I need help booking a flight", "Alice");
|
|
481
|
-
|
|
482
|
-
const response1 = await agent.respond({
|
|
483
|
-
history: agent.session.getHistory(),
|
|
484
|
-
});
|
|
485
|
-
|
|
486
|
-
console.log(`Agent: ${response1.message}`);
|
|
487
|
-
console.log(`Session ID: ${agent.session.id}`);
|
|
488
|
-
|
|
489
|
-
await agent.session.addMessage("assistant", response1.message);
|
|
490
|
-
|
|
491
|
-
// Second interaction
|
|
492
|
-
console.log("\nš¬ Second interaction:");
|
|
493
|
-
|
|
494
|
-
await agent.session.addMessage("user", "I want to fly to Paris next week", "Alice");
|
|
495
|
-
|
|
496
|
-
const response2 = await agent.respond({
|
|
497
|
-
history: agent.session.getHistory(),
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
console.log(`Agent: ${response2.message}`);
|
|
501
|
-
|
|
502
|
-
// Check persistence
|
|
503
|
-
console.log("\nš¾ Checking persistence:");
|
|
504
|
-
if (response2.session?.id) {
|
|
505
|
-
const savedSession = await adapter.sessionRepository.findById(
|
|
506
|
-
response2.session.id
|
|
507
|
-
);
|
|
508
|
-
const messages = await adapter.messageRepository.findBySessionId(
|
|
509
|
-
response2.session.id
|
|
510
|
-
);
|
|
511
|
-
|
|
512
|
-
console.log(`Saved session: ${savedSession?.id}`);
|
|
513
|
-
console.log(`Messages in session: ${messages.length}`);
|
|
514
|
-
console.log(`Session status: ${savedSession?.status}`);
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
// Clean up
|
|
518
|
-
await adapter.disconnect();
|
|
519
|
-
|
|
520
|
-
console.log("\nā
Demo complete!");
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
// Run the demo
|
|
524
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
525
|
-
demonstrateCustomAdapter().catch(console.error);
|
|
526
|
-
}
|