@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,656 +0,0 @@
|
|
|
1
|
-
# Session Storage & Persistence
|
|
2
|
-
|
|
3
|
-
@falai/agent provides **automatic session management** through the integrated `SessionManager` class, eliminating manual session lifecycle management while providing comprehensive persistence capabilities for conversation state and history.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The automatic session management system provides:
|
|
8
|
-
|
|
9
|
-
- **Zero-Boilerplate Sessions**: Automatic session creation, loading, and persistence
|
|
10
|
-
- **Built-in History Management**: Conversation history automatically maintained within sessions
|
|
11
|
-
- **Multi-Adapter Support**: Choose from multiple database backends
|
|
12
|
-
- **Server-Friendly Design**: Perfect for stateless server environments
|
|
13
|
-
- **Automatic Persistence**: Sessions auto-saved after each interaction
|
|
14
|
-
- **Type-Safe Operations**: Full TypeScript support with generics
|
|
15
|
-
|
|
16
|
-
## Enhanced Session State Structure
|
|
17
|
-
|
|
18
|
-
Sessions now include automatic conversation history management:
|
|
19
|
-
|
|
20
|
-
```typescript
|
|
21
|
-
interface SessionState<TData = unknown> {
|
|
22
|
-
id: string; // Session identifier (always present)
|
|
23
|
-
data: Partial<TData>; // Collected data from conversation
|
|
24
|
-
dataByRoute: Record<string, Partial<TData>>; // Per-route data
|
|
25
|
-
routeHistory: RouteHistoryEntry[]; // Route transition history
|
|
26
|
-
currentRoute?: RouteRef; // Active route
|
|
27
|
-
currentStep?: StepRef; // Active step
|
|
28
|
-
history?: History; // Automatic conversation history
|
|
29
|
-
metadata?: SessionMetadata; // Timestamps and custom data
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// History is automatically managed
|
|
33
|
-
interface HistoryItem {
|
|
34
|
-
role: 'user' | 'assistant' | 'system';
|
|
35
|
-
content: string;
|
|
36
|
-
name?: string;
|
|
37
|
-
timestamp?: string; // ISO string
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### What Gets Automatically Persisted
|
|
42
|
-
|
|
43
|
-
- **Collected Data**: All information gathered via `collect` fields and schemas
|
|
44
|
-
- **Conversation Progress**: Current route, step, and route history
|
|
45
|
-
- **Conversation History**: Automatic message history within sessions
|
|
46
|
-
- **Metadata**: Creation/update timestamps and custom fields
|
|
47
|
-
- **Session State**: Complete session state after each interaction
|
|
48
|
-
|
|
49
|
-
## Quick Start
|
|
50
|
-
|
|
51
|
-
### Automatic Session Management with Prisma
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
import { Agent, PrismaAdapter } from "@falai/agent";
|
|
55
|
-
import { PrismaClient } from "@prisma/client";
|
|
56
|
-
|
|
57
|
-
const prisma = new PrismaClient();
|
|
58
|
-
|
|
59
|
-
// Server endpoint with automatic session management
|
|
60
|
-
app.post('/chat', async (req, res) => {
|
|
61
|
-
const { sessionId, message } = req.body;
|
|
62
|
-
|
|
63
|
-
const agent = new Agent({
|
|
64
|
-
name: "Customer Support",
|
|
65
|
-
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
66
|
-
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
67
|
-
sessionId // Automatically loads or creates this session
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const response = await agent.respond(message);
|
|
71
|
-
|
|
72
|
-
res.json({
|
|
73
|
-
message: response.message,
|
|
74
|
-
sessionId: agent.session.id,
|
|
75
|
-
isComplete: response.isRouteComplete
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### SessionManager API
|
|
81
|
-
|
|
82
|
-
The `SessionManager` provides a clean API for session operations:
|
|
83
|
-
|
|
84
|
-
```typescript
|
|
85
|
-
// Access the session manager
|
|
86
|
-
const sessionManager = agent.session;
|
|
87
|
-
|
|
88
|
-
// Get or create session (works for existing, new, or auto-generated IDs)
|
|
89
|
-
await sessionManager.getOrCreate("user-123");
|
|
90
|
-
await sessionManager.getOrCreate(); // Auto-generates ID
|
|
91
|
-
|
|
92
|
-
// History management (automatically persisted)
|
|
93
|
-
await sessionManager.addMessage("user", "Hello");
|
|
94
|
-
await sessionManager.addMessage("assistant", "Hi there!");
|
|
95
|
-
const history = sessionManager.getHistory();
|
|
96
|
-
sessionManager.clearHistory();
|
|
97
|
-
|
|
98
|
-
// Data access
|
|
99
|
-
const data = sessionManager.getData<MyDataType>();
|
|
100
|
-
await sessionManager.setData({ field: "value" });
|
|
101
|
-
|
|
102
|
-
// Session operations
|
|
103
|
-
await sessionManager.save(); // Manual save (auto-saves on addMessage)
|
|
104
|
-
await sessionManager.delete();
|
|
105
|
-
const newSession = await sessionManager.reset(true); // Preserve history
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Database Schema
|
|
109
|
-
|
|
110
|
-
```prisma
|
|
111
|
-
model AgentSession {
|
|
112
|
-
id String @id @default(cuid())
|
|
113
|
-
userId String? @map("user_id")
|
|
114
|
-
agentName String? @map("agent_name")
|
|
115
|
-
status String @default("active")
|
|
116
|
-
currentRoute String? @map("current_route")
|
|
117
|
-
currentStep String? @map("current_step")
|
|
118
|
-
collectedData Json? @map("collected_data")
|
|
119
|
-
messageCount Int @default(0) @map("message_count")
|
|
120
|
-
lastMessageAt DateTime? @map("last_message_at")
|
|
121
|
-
completedAt DateTime? @map("completed_at")
|
|
122
|
-
createdAt DateTime @default(now()) @map("created_at")
|
|
123
|
-
updatedAt DateTime @updatedAt @map("updated_at")
|
|
124
|
-
|
|
125
|
-
messages AgentMessage[]
|
|
126
|
-
|
|
127
|
-
@@index([userId, status])
|
|
128
|
-
@@map("agent_sessions")
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
model AgentMessage {
|
|
132
|
-
id String @id @default(cuid())
|
|
133
|
-
sessionId String @map("session_id")
|
|
134
|
-
userId String? @map("user_id")
|
|
135
|
-
role String
|
|
136
|
-
content String @db.Text
|
|
137
|
-
route String?
|
|
138
|
-
step String?
|
|
139
|
-
toolCalls Json? @map("tool_calls")
|
|
140
|
-
event Json?
|
|
141
|
-
createdAt DateTime @default(now()) @map("created_at")
|
|
142
|
-
|
|
143
|
-
session AgentSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
|
|
144
|
-
|
|
145
|
-
@@index([sessionId])
|
|
146
|
-
@@map("agent_messages")
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Advanced Session Management
|
|
151
|
-
|
|
152
|
-
### Manual Session Operations
|
|
153
|
-
|
|
154
|
-
While sessions are managed automatically, you can perform manual operations when needed:
|
|
155
|
-
|
|
156
|
-
```typescript
|
|
157
|
-
import { createSession, createSessionId } from "@falai/agent";
|
|
158
|
-
|
|
159
|
-
// Access session manager directly
|
|
160
|
-
const sessionManager = agent.session;
|
|
161
|
-
|
|
162
|
-
// Create session with specific ID
|
|
163
|
-
await sessionManager.getOrCreate("custom-session-id");
|
|
164
|
-
|
|
165
|
-
// Generate a session ID without creating a session object
|
|
166
|
-
const id = createSessionId();
|
|
167
|
-
|
|
168
|
-
// Create a pre-populated session using the partial state overload
|
|
169
|
-
const restoredSession = createSession<MyDataType>({
|
|
170
|
-
id: "custom-session-id",
|
|
171
|
-
data: { userName: "John" },
|
|
172
|
-
history: previousHistory,
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
// Session data management
|
|
176
|
-
await sessionManager.setData({
|
|
177
|
-
userName: "John",
|
|
178
|
-
preferences: { theme: "dark" },
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
// Get current session data
|
|
182
|
-
const data = sessionManager.getData<MyDataType>();
|
|
183
|
-
console.log(data.userName); // "John"
|
|
184
|
-
|
|
185
|
-
// Session information
|
|
186
|
-
console.log(sessionManager.id); // Current session ID
|
|
187
|
-
console.log(sessionManager.current); // Full session state
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### History Management
|
|
191
|
-
|
|
192
|
-
```typescript
|
|
193
|
-
// Add messages to history (automatically persisted)
|
|
194
|
-
await sessionManager.addMessage("user", "Hello there");
|
|
195
|
-
await sessionManager.addMessage("assistant", "Hi! How can I help?");
|
|
196
|
-
|
|
197
|
-
// Get conversation history
|
|
198
|
-
const history = sessionManager.getHistory();
|
|
199
|
-
console.log(history); // Array of HistoryItem objects
|
|
200
|
-
|
|
201
|
-
// Set entire history (for migration or testing)
|
|
202
|
-
sessionManager.setHistory([
|
|
203
|
-
{ role: "user", content: "Previous message" },
|
|
204
|
-
{ role: "assistant", content: "Previous response" }
|
|
205
|
-
]);
|
|
206
|
-
|
|
207
|
-
// Clear history
|
|
208
|
-
sessionManager.clearHistory();
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
## Persistence Configuration
|
|
212
|
-
|
|
213
|
-
### Automatic Persistence Setup
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
const agent = new Agent({
|
|
217
|
-
name: "Assistant",
|
|
218
|
-
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
219
|
-
persistence: {
|
|
220
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
221
|
-
autoSave: true, // Auto-save after each interaction (default)
|
|
222
|
-
},
|
|
223
|
-
sessionId: "user-123" // Automatically loads or creates this session
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
// Sessions are automatically persisted - no manual save needed
|
|
227
|
-
const response = await agent.respond("Hello");
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
### Manual Session Operations (Advanced)
|
|
231
|
-
|
|
232
|
-
```typescript
|
|
233
|
-
// Access persistence manager if needed
|
|
234
|
-
const persistence = agent.session.getPersistenceManager();
|
|
235
|
-
|
|
236
|
-
// Manual save (usually not needed due to auto-save)
|
|
237
|
-
await agent.session.save();
|
|
238
|
-
|
|
239
|
-
// Delete session
|
|
240
|
-
await agent.session.delete();
|
|
241
|
-
|
|
242
|
-
// Reset session (creates new session, optionally preserving history)
|
|
243
|
-
const newSession = await agent.session.reset(true); // Preserve history
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
## Auto-Save Behavior
|
|
247
|
-
|
|
248
|
-
Sessions are automatically persisted after each interaction:
|
|
249
|
-
|
|
250
|
-
```typescript
|
|
251
|
-
const agent = new Agent({
|
|
252
|
-
persistence: {
|
|
253
|
-
adapter: new RedisAdapter(redisClient),
|
|
254
|
-
autoSave: true, // Default behavior
|
|
255
|
-
},
|
|
256
|
-
sessionId: "user-123"
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
// Session automatically saved after each respond call
|
|
260
|
-
const response = await agent.respond("Hello");
|
|
261
|
-
// Session state automatically saved to Redis
|
|
262
|
-
|
|
263
|
-
// History automatically saved when messages are added
|
|
264
|
-
await agent.session.addMessage("user", "Follow-up question");
|
|
265
|
-
// Automatically persisted
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### What Gets Auto-Saved
|
|
269
|
-
|
|
270
|
-
- **Collected Data**: All data from `collect` fields and schemas
|
|
271
|
-
- **Route Progress**: Current route and step
|
|
272
|
-
- **Route History**: Transition log
|
|
273
|
-
- **Conversation History**: Complete message history within sessions
|
|
274
|
-
- **Metadata**: Timestamps and custom fields
|
|
275
|
-
|
|
276
|
-
## Data Recovery & Resumption
|
|
277
|
-
|
|
278
|
-
### Automatic Session Loading
|
|
279
|
-
|
|
280
|
-
```typescript
|
|
281
|
-
// Agent automatically loads existing session
|
|
282
|
-
const agent = new Agent({
|
|
283
|
-
name: "Assistant",
|
|
284
|
-
provider: new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }),
|
|
285
|
-
persistence: { adapter: new PrismaAdapter({ prisma }) },
|
|
286
|
-
sessionId: "existing-session-123" // Automatically loads this session
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
// Session and history automatically restored
|
|
290
|
-
const response = await agent.respond("Continue our conversation");
|
|
291
|
-
console.log(agent.session.getHistory()); // Previous conversation history
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
### Session Queries
|
|
295
|
-
|
|
296
|
-
```typescript
|
|
297
|
-
// Find active session for user
|
|
298
|
-
const activeSession = await persistence.findActiveSessionByUserId(userId);
|
|
299
|
-
|
|
300
|
-
// Get all sessions for user
|
|
301
|
-
const userSessions = await persistence.findSessionsByUserId(userId, {
|
|
302
|
-
limit: 10,
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
// Get session by ID
|
|
306
|
-
const session = await persistence.findSessionById(sessionId);
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
## Message Persistence
|
|
310
|
-
|
|
311
|
-
### Automatic Message Saving
|
|
312
|
-
|
|
313
|
-
```typescript
|
|
314
|
-
const agent = new Agent({
|
|
315
|
-
persistence: {
|
|
316
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
317
|
-
autoSave: true, // Default - saves sessions and history
|
|
318
|
-
},
|
|
319
|
-
sessionId: "user-123"
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
// Messages automatically saved as part of session history
|
|
323
|
-
const response = await agent.respond("Hello");
|
|
324
|
-
// Both session state and conversation history automatically persisted
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
### Manual Message Operations
|
|
328
|
-
|
|
329
|
-
```typescript
|
|
330
|
-
// Save message manually
|
|
331
|
-
await persistence.saveMessage({
|
|
332
|
-
sessionId: session.id,
|
|
333
|
-
role: "user",
|
|
334
|
-
content: "Hello!",
|
|
335
|
-
route: session.currentRoute?.id,
|
|
336
|
-
step: session.currentStep?.id,
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
// Load messages
|
|
340
|
-
const messages = await persistence.findMessagesBySessionId(session.id);
|
|
341
|
-
|
|
342
|
-
// Convert to Event format for agent
|
|
343
|
-
const history = await persistence.loadSessionHistory(session.id);
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
## Database Adapters
|
|
347
|
-
|
|
348
|
-
### Prisma Adapter
|
|
349
|
-
|
|
350
|
-
Full-featured ORM integration:
|
|
351
|
-
|
|
352
|
-
```typescript
|
|
353
|
-
import { PrismaAdapter } from "@falai/agent";
|
|
354
|
-
|
|
355
|
-
const adapter = new PrismaAdapter({
|
|
356
|
-
prisma,
|
|
357
|
-
tables: {
|
|
358
|
-
sessions: "custom_sessions", // Custom table names
|
|
359
|
-
messages: "custom_messages",
|
|
360
|
-
},
|
|
361
|
-
fieldMappings: {
|
|
362
|
-
sessions: {
|
|
363
|
-
userId: "user_id",
|
|
364
|
-
createdAt: "created_at",
|
|
365
|
-
},
|
|
366
|
-
},
|
|
367
|
-
});
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
### Redis Adapter
|
|
371
|
-
|
|
372
|
-
High-performance key-value storage:
|
|
373
|
-
|
|
374
|
-
```typescript
|
|
375
|
-
import { RedisAdapter } from "@falai/agent";
|
|
376
|
-
|
|
377
|
-
const adapter = new RedisAdapter({
|
|
378
|
-
redis: redisClient,
|
|
379
|
-
keyPrefix: "agent:", // Key prefix
|
|
380
|
-
sessionTTL: 86400, // 24 hours
|
|
381
|
-
messageTTL: 604800, // 7 days
|
|
382
|
-
});
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
### MongoDB Adapter
|
|
386
|
-
|
|
387
|
-
Document-based flexible storage:
|
|
388
|
-
|
|
389
|
-
```typescript
|
|
390
|
-
import { MongoAdapter } from "@falai/agent";
|
|
391
|
-
|
|
392
|
-
const adapter = new MongoAdapter({
|
|
393
|
-
client: mongoClient,
|
|
394
|
-
databaseName: "myapp",
|
|
395
|
-
collections: {
|
|
396
|
-
sessions: "agent_sessions",
|
|
397
|
-
messages: "agent_messages",
|
|
398
|
-
},
|
|
399
|
-
});
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
### PostgreSQL Adapter
|
|
403
|
-
|
|
404
|
-
Raw SQL with auto-table creation:
|
|
405
|
-
|
|
406
|
-
```typescript
|
|
407
|
-
import { PostgreSQLAdapter } from "@falai/agent";
|
|
408
|
-
|
|
409
|
-
const adapter = new PostgreSQLAdapter({
|
|
410
|
-
client: pgClient,
|
|
411
|
-
tables: {
|
|
412
|
-
sessions: "agent_sessions",
|
|
413
|
-
messages: "agent_messages",
|
|
414
|
-
},
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
// Auto-create tables
|
|
418
|
-
await adapter.initialize();
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
### SQLite Adapter
|
|
422
|
-
|
|
423
|
-
Lightweight file-based database:
|
|
424
|
-
|
|
425
|
-
```typescript
|
|
426
|
-
import { SQLiteAdapter } from "@falai/agent";
|
|
427
|
-
|
|
428
|
-
const adapter = new SQLiteAdapter({
|
|
429
|
-
db: sqliteDb,
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
// Auto-create tables
|
|
433
|
-
await adapter.initialize();
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
### OpenSearch Adapter
|
|
437
|
-
|
|
438
|
-
Full-text search and analytics:
|
|
439
|
-
|
|
440
|
-
```typescript
|
|
441
|
-
import { OpenSearchAdapter } from "@falai/agent";
|
|
442
|
-
|
|
443
|
-
const adapter = new OpenSearchAdapter(client, {
|
|
444
|
-
indices: {
|
|
445
|
-
sessions: "agent_sessions",
|
|
446
|
-
messages: "agent_messages",
|
|
447
|
-
},
|
|
448
|
-
autoCreateIndices: true,
|
|
449
|
-
});
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
### Memory Adapter
|
|
453
|
-
|
|
454
|
-
Testing and development:
|
|
455
|
-
|
|
456
|
-
```typescript
|
|
457
|
-
import { MemoryAdapter } from "@falai/agent";
|
|
458
|
-
|
|
459
|
-
const adapter = new MemoryAdapter();
|
|
460
|
-
|
|
461
|
-
// Useful for testing
|
|
462
|
-
const snapshot = adapter.getSnapshot();
|
|
463
|
-
adapter.clear();
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
## Advanced Patterns
|
|
467
|
-
|
|
468
|
-
### Context Synchronization
|
|
469
|
-
|
|
470
|
-
Auto-sync agent context with database:
|
|
471
|
-
|
|
472
|
-
```typescript
|
|
473
|
-
const agent = new Agent({
|
|
474
|
-
context: { userId: "123", preferences: {} },
|
|
475
|
-
hooks: {
|
|
476
|
-
beforeRespond: async (context) => {
|
|
477
|
-
// Load fresh context from database
|
|
478
|
-
const session = await persistence.loadSessionState(context.sessionId);
|
|
479
|
-
return {
|
|
480
|
-
...context,
|
|
481
|
-
preferences: session?.data?.preferences || {},
|
|
482
|
-
};
|
|
483
|
-
},
|
|
484
|
-
onContextUpdate: async (newContext, previousContext) => {
|
|
485
|
-
// Save context changes
|
|
486
|
-
if (newContext.preferences !== previousContext.preferences) {
|
|
487
|
-
await persistence.updateCollectedData(newContext.sessionId, {
|
|
488
|
-
preferences: newContext.preferences,
|
|
489
|
-
});
|
|
490
|
-
}
|
|
491
|
-
},
|
|
492
|
-
},
|
|
493
|
-
persistence: {
|
|
494
|
-
adapter: new PrismaAdapter({ prisma }),
|
|
495
|
-
autoSave: true,
|
|
496
|
-
},
|
|
497
|
-
});
|
|
498
|
-
```
|
|
499
|
-
|
|
500
|
-
### Session Lifecycle Management
|
|
501
|
-
|
|
502
|
-
```typescript
|
|
503
|
-
// Complete a session
|
|
504
|
-
await persistence.updateSessionStatus(sessionId, "completed", new Date());
|
|
505
|
-
|
|
506
|
-
// Abandon a session
|
|
507
|
-
await persistence.updateSessionStatus(sessionId, "abandoned");
|
|
508
|
-
|
|
509
|
-
// Clean up old sessions
|
|
510
|
-
const oldSessions = await persistence.findSessionsByUserId(userId, {
|
|
511
|
-
status: "completed",
|
|
512
|
-
olderThan: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // 30 days ago
|
|
513
|
-
});
|
|
514
|
-
|
|
515
|
-
for (const session of oldSessions) {
|
|
516
|
-
await persistence.deleteSession(session.id);
|
|
517
|
-
}
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
### Custom Adapters
|
|
521
|
-
|
|
522
|
-
Create adapters for any database:
|
|
523
|
-
|
|
524
|
-
```typescript
|
|
525
|
-
import {
|
|
526
|
-
PersistenceAdapter,
|
|
527
|
-
SessionRepository,
|
|
528
|
-
MessageRepository,
|
|
529
|
-
} from "@falai/agent";
|
|
530
|
-
|
|
531
|
-
class CustomAdapter implements PersistenceAdapter {
|
|
532
|
-
sessionRepository: SessionRepository;
|
|
533
|
-
messageRepository: MessageRepository;
|
|
534
|
-
|
|
535
|
-
constructor(config: CustomConfig) {
|
|
536
|
-
this.sessionRepository = new CustomSessionRepository(config);
|
|
537
|
-
this.messageRepository = new CustomMessageRepository(config);
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
async initialize?(): Promise<void> {
|
|
541
|
-
// Setup database schema
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
## Performance Optimization
|
|
547
|
-
|
|
548
|
-
### Connection Pooling
|
|
549
|
-
|
|
550
|
-
```typescript
|
|
551
|
-
// Reuse database connections
|
|
552
|
-
const prisma = new PrismaClient({
|
|
553
|
-
datasources: {
|
|
554
|
-
db: { url: process.env.DATABASE_URL },
|
|
555
|
-
},
|
|
556
|
-
});
|
|
557
|
-
|
|
558
|
-
// Single adapter instance per application
|
|
559
|
-
const adapter = new PrismaAdapter({ prisma });
|
|
560
|
-
```
|
|
561
|
-
|
|
562
|
-
### Indexing Strategy
|
|
563
|
-
|
|
564
|
-
Ensure proper database indexes:
|
|
565
|
-
|
|
566
|
-
```sql
|
|
567
|
-
-- Essential indexes for performance
|
|
568
|
-
CREATE INDEX idx_sessions_user_status ON agent_sessions(user_id, status);
|
|
569
|
-
CREATE INDEX idx_sessions_updated ON agent_sessions(updated_at);
|
|
570
|
-
CREATE INDEX idx_messages_session ON agent_messages(session_id);
|
|
571
|
-
CREATE INDEX idx_messages_created ON agent_messages(created_at);
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
### Batch Operations
|
|
575
|
-
|
|
576
|
-
```typescript
|
|
577
|
-
// Batch save multiple messages
|
|
578
|
-
const messages = [
|
|
579
|
-
{ sessionId, role: "user", content: "Hi" },
|
|
580
|
-
{ sessionId, role: "assistant", content: "Hello!" },
|
|
581
|
-
];
|
|
582
|
-
|
|
583
|
-
await Promise.all(messages.map((msg) => persistence.saveMessage(msg)));
|
|
584
|
-
```
|
|
585
|
-
|
|
586
|
-
## Monitoring & Debugging
|
|
587
|
-
|
|
588
|
-
### Persistence Health Checks
|
|
589
|
-
|
|
590
|
-
```typescript
|
|
591
|
-
// Check adapter connectivity
|
|
592
|
-
try {
|
|
593
|
-
await adapter.sessionRepository.findById("nonexistent");
|
|
594
|
-
console.log("Persistence adapter is healthy");
|
|
595
|
-
} catch (error) {
|
|
596
|
-
console.error("Persistence adapter error:", error);
|
|
597
|
-
}
|
|
598
|
-
```
|
|
599
|
-
|
|
600
|
-
### Session State Inspection
|
|
601
|
-
|
|
602
|
-
```typescript
|
|
603
|
-
// Debug session state
|
|
604
|
-
console.log("Session data:", session.data);
|
|
605
|
-
console.log("Current route:", session.currentRoute);
|
|
606
|
-
console.log("Current step:", session.currentStep);
|
|
607
|
-
console.log("Route history:", session.routeHistory);
|
|
608
|
-
|
|
609
|
-
// Validate session integrity
|
|
610
|
-
const isValid = session.id && session.data && session.metadata;
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
### Performance Monitoring
|
|
614
|
-
|
|
615
|
-
```typescript
|
|
616
|
-
// Monitor persistence operations
|
|
617
|
-
const startTime = Date.now();
|
|
618
|
-
await persistence.saveSessionState(sessionId, session);
|
|
619
|
-
const duration = Date.now() - startTime;
|
|
620
|
-
|
|
621
|
-
if (duration > 1000) {
|
|
622
|
-
console.warn(`Slow persistence operation: ${duration}ms`);
|
|
623
|
-
}
|
|
624
|
-
```
|
|
625
|
-
|
|
626
|
-
## Best Practices
|
|
627
|
-
|
|
628
|
-
### Session Management
|
|
629
|
-
|
|
630
|
-
- **Always Set Session IDs**: Ensure sessions have unique identifiers
|
|
631
|
-
- **Use Auto-Save**: Enable `autoSave: true` for seamless persistence
|
|
632
|
-
- **Validate Data**: Use lifecycle hooks to validate collected data
|
|
633
|
-
- **Handle Errors**: Wrap persistence operations in error handling
|
|
634
|
-
|
|
635
|
-
### Database Design
|
|
636
|
-
|
|
637
|
-
- **Use Appropriate Indexes**: Index frequently queried fields
|
|
638
|
-
- **Plan Retention**: Implement session cleanup policies
|
|
639
|
-
- **Monitor Usage**: Track storage growth and query performance
|
|
640
|
-
- **Backup Regularly**: Ensure session data is backed up
|
|
641
|
-
|
|
642
|
-
### Performance
|
|
643
|
-
|
|
644
|
-
- **Connection Reuse**: Share database connections across requests
|
|
645
|
-
- **Batch Writes**: Group multiple operations when possible
|
|
646
|
-
- **Cache Frequently Read Data**: Cache session metadata if needed
|
|
647
|
-
- **Optimize Queries**: Use selective field retrieval
|
|
648
|
-
|
|
649
|
-
### Security
|
|
650
|
-
|
|
651
|
-
- **Validate User Access**: Ensure users can only access their sessions
|
|
652
|
-
- **Sanitize Data**: Clean user input before persistence
|
|
653
|
-
- **Audit Logging**: Log sensitive operations
|
|
654
|
-
- **Encryption**: Encrypt sensitive session data at rest
|
|
655
|
-
|
|
656
|
-
The persistence system enables robust, scalable conversational AI applications with reliable state management and comprehensive data recovery capabilities.
|