@falai/agent 2.6.1 → 3.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 +2 -2
- package/dist/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryAdapter.js +32 -36
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.d.ts +1 -1
- package/dist/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +3 -3
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +18 -13
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter.js +3 -3
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.d.ts +2 -1
- package/dist/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/adapters/RedisAdapter.js +77 -27
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +9 -31
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +13 -13
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/sessionRow.d.ts +22 -0
- package/dist/adapters/sessionRow.d.ts.map +1 -0
- package/dist/adapters/sessionRow.js +48 -0
- package/dist/adapters/sessionRow.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +39 -43
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +4 -4
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +6 -6
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +20 -15
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +7 -7
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +2 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +81 -31
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +11 -33
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/index.d.ts +13 -13
- package/dist/cjs/adapters/index.d.ts.map +1 -1
- package/dist/cjs/adapters/index.js +14 -14
- package/dist/cjs/adapters/index.js.map +1 -1
- package/dist/cjs/adapters/sessionRow.d.ts +22 -0
- package/dist/cjs/adapters/sessionRow.d.ts.map +1 -0
- package/dist/cjs/adapters/sessionRow.js +52 -0
- package/dist/cjs/adapters/sessionRow.js.map +1 -0
- package/dist/cjs/core/Agent.d.ts +19 -11
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +102 -64
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +12 -22
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.js +46 -49
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -1
- package/dist/cjs/core/BranchEvaluator.d.ts +4 -4
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/BranchEvaluator.js +6 -6
- package/dist/cjs/core/BranchEvaluator.js.map +1 -1
- package/dist/cjs/core/CompactionEngine.d.ts +16 -3
- package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
- package/dist/cjs/core/CompactionEngine.js +30 -6
- package/dist/cjs/core/CompactionEngine.js.map +1 -1
- package/dist/cjs/core/DirectiveChainTracker.d.ts +1 -1
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -1
- package/dist/cjs/core/DirectiveChainTracker.js +5 -5
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -1
- package/dist/cjs/core/Events.d.ts +1 -1
- package/dist/cjs/core/Events.d.ts.map +1 -1
- package/dist/cjs/core/Events.js +15 -15
- package/dist/cjs/core/Events.js.map +1 -1
- package/dist/cjs/core/Flow.d.ts +4 -4
- package/dist/cjs/core/Flow.d.ts.map +1 -1
- package/dist/cjs/core/Flow.js +15 -15
- package/dist/cjs/core/Flow.js.map +1 -1
- package/dist/cjs/core/FlowRouter.d.ts +4 -4
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -1
- package/dist/cjs/core/FlowRouter.js +92 -70
- package/dist/cjs/core/FlowRouter.js.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +10 -10
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +4 -4
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +13 -13
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +2 -2
- package/dist/cjs/core/PromptSectionCache.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +4 -4
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +7 -7
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseGenerationError.d.ts.map +1 -1
- package/dist/cjs/core/ResponseGenerationError.js +3 -5
- package/dist/cjs/core/ResponseGenerationError.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +39 -10
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +195 -72
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +50 -12
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +301 -158
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SessionFinalizer.d.ts +4 -4
- package/dist/cjs/core/SessionFinalizer.d.ts.map +1 -1
- package/dist/cjs/core/SessionFinalizer.js +36 -9
- package/dist/cjs/core/SessionFinalizer.js.map +1 -1
- package/dist/cjs/core/SessionManager.d.ts +15 -6
- package/dist/cjs/core/SessionManager.d.ts.map +1 -1
- package/dist/cjs/core/SessionManager.js +49 -22
- package/dist/cjs/core/SessionManager.js.map +1 -1
- package/dist/cjs/core/SignalCoordinator.d.ts +5 -5
- package/dist/cjs/core/SignalCoordinator.d.ts.map +1 -1
- package/dist/cjs/core/SignalCoordinator.js +12 -12
- package/dist/cjs/core/SignalCoordinator.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +4 -4
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/SignalEvaluator.js +6 -6
- package/dist/cjs/core/SignalEvaluator.js.map +1 -1
- package/dist/cjs/core/SignalProcessor.d.ts +6 -6
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -1
- package/dist/cjs/core/SignalProcessor.js +17 -89
- package/dist/cjs/core/SignalProcessor.js.map +1 -1
- package/dist/cjs/core/Step.d.ts +5 -5
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +65 -17
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StepLifecycle.d.ts +18 -8
- package/dist/cjs/core/StepLifecycle.d.ts.map +1 -1
- package/dist/cjs/core/StepLifecycle.js +103 -20
- package/dist/cjs/core/StepLifecycle.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js +30 -6
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolLoopExecutor.d.ts +8 -4
- package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -1
- package/dist/cjs/core/ToolLoopExecutor.js +189 -97
- package/dist/cjs/core/ToolLoopExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +6 -6
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +102 -79
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +2 -2
- package/dist/cjs/core/createAgent.d.ts.map +1 -1
- package/dist/cjs/core/createAgent.js +2 -2
- package/dist/cjs/core/createAgent.js.map +1 -1
- package/dist/cjs/core/flow-namespace.d.ts +16 -1
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -1
- package/dist/cjs/core/flow-namespace.js +26 -4
- package/dist/cjs/core/flow-namespace.js.map +1 -1
- package/dist/cjs/core/toolGates.d.ts +1 -1
- package/dist/cjs/core/toolGates.d.ts.map +1 -1
- package/dist/cjs/core/toolGates.js +3 -3
- package/dist/cjs/core/toolGates.js.map +1 -1
- package/dist/cjs/index.d.ts +50 -45
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +96 -88
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +25 -35
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +30 -426
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.d.ts +13 -34
- package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.js +17 -51
- package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +22 -75
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +32 -558
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +14 -20
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +26 -135
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.js +40 -496
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +14 -20
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +21 -28
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts +20 -24
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +22 -38
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts +94 -0
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -0
- package/dist/cjs/providers/ProviderAdapter.js +257 -0
- package/dist/cjs/providers/ProviderAdapter.js.map +1 -0
- package/dist/cjs/providers/index.d.ts +21 -18
- package/dist/cjs/providers/index.d.ts.map +1 -1
- package/dist/cjs/providers/index.js +23 -21
- package/dist/cjs/providers/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +37 -11
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/ai.d.ts +11 -21
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/compaction.d.ts +2 -2
- package/dist/cjs/types/compaction.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +16 -20
- package/dist/cjs/types/errors.d.ts.map +1 -1
- package/dist/cjs/types/errors.js +17 -18
- package/dist/cjs/types/errors.js.map +1 -1
- package/dist/cjs/types/flow.d.ts +56 -39
- package/dist/cjs/types/flow.d.ts.map +1 -1
- package/dist/cjs/types/history.d.ts +1 -1
- package/dist/cjs/types/history.d.ts.map +1 -1
- package/dist/cjs/types/index.d.ts +17 -17
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +14 -14
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +2 -2
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +4 -4
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +3 -3
- package/dist/cjs/types/signals.d.ts.map +1 -1
- package/dist/cjs/types/template.d.ts +2 -2
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +4 -2
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +1 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js +6 -6
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/event.d.ts +1 -1
- package/dist/cjs/utils/event.d.ts.map +1 -1
- package/dist/cjs/utils/event.js +2 -2
- package/dist/cjs/utils/event.js.map +1 -1
- package/dist/cjs/utils/history.d.ts +2 -2
- package/dist/cjs/utils/history.d.ts.map +1 -1
- package/dist/cjs/utils/history.js +15 -15
- package/dist/cjs/utils/history.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +11 -13
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +57 -58
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/serialize.d.ts +17 -0
- package/dist/cjs/utils/serialize.d.ts.map +1 -1
- package/dist/cjs/utils/serialize.js +33 -0
- package/dist/cjs/utils/serialize.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +23 -3
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +40 -8
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/cjs/utils/template.d.ts +3 -3
- package/dist/cjs/utils/template.d.ts.map +1 -1
- package/dist/cjs/utils/template.js +5 -5
- package/dist/cjs/utils/template.js.map +1 -1
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -1
- package/dist/core/Agent.d.ts +19 -11
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +53 -15
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +12 -22
- package/dist/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/core/AutoChainExecutor.js +27 -30
- package/dist/core/AutoChainExecutor.js.map +1 -1
- package/dist/core/BranchEvaluator.d.ts +4 -4
- package/dist/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/core/BranchEvaluator.js +2 -2
- package/dist/core/BranchEvaluator.js.map +1 -1
- package/dist/core/CompactionEngine.d.ts +16 -3
- package/dist/core/CompactionEngine.d.ts.map +1 -1
- package/dist/core/CompactionEngine.js +30 -6
- package/dist/core/CompactionEngine.js.map +1 -1
- package/dist/core/DirectiveChainTracker.d.ts +1 -1
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -1
- package/dist/core/DirectiveChainTracker.js +2 -2
- package/dist/core/DirectiveChainTracker.js.map +1 -1
- package/dist/core/Events.d.ts +1 -1
- package/dist/core/Events.d.ts.map +1 -1
- package/dist/core/Events.js +1 -1
- package/dist/core/Events.js.map +1 -1
- package/dist/core/Flow.d.ts +4 -4
- package/dist/core/Flow.d.ts.map +1 -1
- package/dist/core/Flow.js +3 -3
- package/dist/core/Flow.js.map +1 -1
- package/dist/core/FlowRouter.d.ts +4 -4
- package/dist/core/FlowRouter.d.ts.map +1 -1
- package/dist/core/FlowRouter.js +36 -14
- package/dist/core/FlowRouter.js.map +1 -1
- package/dist/core/PersistenceManager.d.ts +1 -1
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +3 -3
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +4 -4
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +3 -3
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +2 -2
- package/dist/core/PromptSectionCache.d.ts.map +1 -1
- package/dist/core/ResponseEngine.d.ts +4 -4
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +2 -2
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseGenerationError.d.ts.map +1 -1
- package/dist/core/ResponseGenerationError.js +3 -5
- package/dist/core/ResponseGenerationError.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +39 -10
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +152 -29
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +50 -12
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +232 -89
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SessionFinalizer.d.ts +4 -4
- package/dist/core/SessionFinalizer.d.ts.map +1 -1
- package/dist/core/SessionFinalizer.js +32 -5
- package/dist/core/SessionFinalizer.js.map +1 -1
- package/dist/core/SessionManager.d.ts +15 -6
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +46 -19
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/SignalCoordinator.d.ts +5 -5
- package/dist/core/SignalCoordinator.d.ts.map +1 -1
- package/dist/core/SignalCoordinator.js +2 -2
- package/dist/core/SignalCoordinator.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +4 -4
- package/dist/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/core/SignalEvaluator.js +2 -2
- package/dist/core/SignalEvaluator.js.map +1 -1
- package/dist/core/SignalProcessor.d.ts +6 -6
- package/dist/core/SignalProcessor.d.ts.map +1 -1
- package/dist/core/SignalProcessor.js +7 -79
- package/dist/core/SignalProcessor.js.map +1 -1
- package/dist/core/Step.d.ts +5 -5
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +53 -5
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StepLifecycle.d.ts +18 -8
- package/dist/core/StepLifecycle.d.ts.map +1 -1
- package/dist/core/StepLifecycle.js +98 -15
- package/dist/core/StepLifecycle.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +1 -1
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js +29 -5
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolLoopExecutor.d.ts +8 -4
- package/dist/core/ToolLoopExecutor.d.ts.map +1 -1
- package/dist/core/ToolLoopExecutor.js +157 -65
- package/dist/core/ToolLoopExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +6 -6
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +44 -21
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +2 -2
- package/dist/core/createAgent.d.ts.map +1 -1
- package/dist/core/createAgent.js +1 -1
- package/dist/core/createAgent.js.map +1 -1
- package/dist/core/flow-namespace.d.ts +16 -1
- package/dist/core/flow-namespace.d.ts.map +1 -1
- package/dist/core/flow-namespace.js +23 -1
- package/dist/core/flow-namespace.js.map +1 -1
- package/dist/core/toolGates.d.ts +1 -1
- package/dist/core/toolGates.d.ts.map +1 -1
- package/dist/core/toolGates.js +1 -1
- package/dist/core/toolGates.js.map +1 -1
- package/dist/index.d.ts +50 -45
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -30
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +25 -35
- package/dist/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/AnthropicProvider.js +30 -423
- package/dist/providers/AnthropicProvider.js.map +1 -1
- package/dist/providers/DeepSeekProvider.d.ts +13 -34
- package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/DeepSeekProvider.js +16 -47
- package/dist/providers/DeepSeekProvider.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +22 -75
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +32 -558
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
- package/dist/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/GenericOpenAICompatibleProvider.js +13 -16
- package/dist/providers/GenericOpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.d.ts +26 -135
- package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.js +39 -495
- package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +14 -20
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +20 -24
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +20 -24
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +21 -34
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/providers/ProviderAdapter.d.ts +94 -0
- package/dist/providers/ProviderAdapter.d.ts.map +1 -0
- package/dist/providers/ProviderAdapter.js +251 -0
- package/dist/providers/ProviderAdapter.js.map +1 -0
- package/dist/providers/index.d.ts +21 -18
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +13 -10
- package/dist/providers/index.js.map +1 -1
- package/dist/types/agent.d.ts +37 -11
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/ai.d.ts +11 -21
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/compaction.d.ts +2 -2
- package/dist/types/compaction.d.ts.map +1 -1
- package/dist/types/errors.d.ts +16 -20
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +15 -16
- package/dist/types/errors.js.map +1 -1
- package/dist/types/flow.d.ts +56 -39
- package/dist/types/flow.d.ts.map +1 -1
- package/dist/types/history.d.ts +1 -1
- package/dist/types/history.d.ts.map +1 -1
- package/dist/types/index.d.ts +17 -17
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -4
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +2 -2
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/session.d.ts +4 -4
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +3 -3
- package/dist/types/signals.d.ts.map +1 -1
- package/dist/types/template.d.ts +2 -2
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +4 -2
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +1 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js +2 -2
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/event.d.ts +1 -1
- package/dist/utils/event.d.ts.map +1 -1
- package/dist/utils/event.js +1 -1
- package/dist/utils/event.js.map +1 -1
- package/dist/utils/history.d.ts +2 -2
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/history.js +1 -1
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/index.d.ts +11 -13
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +11 -12
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/serialize.d.ts +17 -0
- package/dist/utils/serialize.d.ts.map +1 -1
- package/dist/utils/serialize.js +31 -0
- package/dist/utils/serialize.js.map +1 -1
- package/dist/utils/session.d.ts +23 -3
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +35 -6
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/template.d.ts +3 -3
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +1 -1
- package/dist/utils/template.js.map +1 -1
- package/docs/concepts/architecture.md +3 -3
- package/docs/concepts/directives.md +1 -1
- package/docs/guides/error-handling.md +46 -45
- package/docs/guides/flow-control.md +8 -1
- package/docs/guides/instructions.md +15 -6
- package/docs/guides/persistence.md +12 -5
- package/docs/guides/streaming.md +10 -0
- package/docs/migration/README.md +4 -0
- package/docs/migration/v2-3-to-v2-4.md +4 -0
- package/docs/migration/v2-6-to-v2-7.md +246 -0
- package/docs/reference/adapters.md +15 -1
- package/docs/reference/branches.md +2 -0
- package/docs/reference/create-agent.md +28 -0
- package/docs/reference/directive.md +1 -1
- package/docs/reference/errors.md +30 -32
- package/docs/reference/providers.md +63 -60
- package/docs/reference/step.md +28 -21
- package/docs/reference/tool.md +14 -5
- package/docs/start/02-first-agent.md +8 -4
- package/docs/start/03-collect-data.md +19 -10
- package/examples/01-quickstart.ts +2 -2
- package/examples/02-data-extraction.ts +1 -1
- package/examples/03-tools.ts +1 -1
- package/examples/04-instructions.ts +2 -2
- package/examples/05-branching.ts +3 -3
- package/examples/06-flow-control.ts +3 -3
- package/examples/07-streaming.ts +1 -1
- package/examples/08-persistence.ts +2 -2
- package/examples/09-signals.ts +1 -1
- package/examples/tsconfig.json +6 -3
- package/package.json +9 -7
- package/src/adapters/MemoryAdapter.ts +33 -37
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +4 -4
- package/src/adapters/PostgreSQLAdapter.ts +26 -21
- package/src/adapters/PrismaAdapter.ts +4 -4
- package/src/adapters/RedisAdapter.ts +84 -37
- package/src/adapters/SQLiteAdapter.ts +13 -34
- package/src/adapters/index.ts +13 -13
- package/src/adapters/sessionRow.ts +57 -0
- package/src/core/Agent.ts +64 -18
- package/src/core/AutoChainExecutor.ts +44 -57
- package/src/core/BranchEvaluator.ts +5 -5
- package/src/core/CompactionEngine.ts +42 -8
- package/src/core/DirectiveChainTracker.ts +3 -3
- package/src/core/Events.ts +2 -2
- package/src/core/Flow.ts +9 -9
- package/src/core/FlowRouter.ts +46 -20
- package/src/core/PersistenceManager.ts +4 -4
- package/src/core/PromptComposer.ts +8 -8
- package/src/core/PromptSectionCache.ts +2 -2
- package/src/core/ResponseEngine.ts +6 -6
- package/src/core/ResponseGenerationError.ts +3 -6
- package/src/core/ResponseModal.ts +205 -39
- package/src/core/ResponsePipeline.ts +301 -107
- package/src/core/SessionFinalizer.ts +40 -10
- package/src/core/SessionManager.ts +61 -27
- package/src/core/SignalCoordinator.ts +7 -7
- package/src/core/SignalEvaluator.ts +6 -6
- package/src/core/SignalProcessor.ts +13 -93
- package/src/core/Step.ts +87 -10
- package/src/core/StepLifecycle.ts +129 -26
- package/src/core/StreamingToolExecutor.ts +33 -8
- package/src/core/ToolLoopExecutor.ts +206 -80
- package/src/core/ToolManager.ts +53 -26
- package/src/core/createAgent.ts +2 -2
- package/src/core/flow-namespace.ts +31 -2
- package/src/core/toolGates.ts +2 -2
- package/src/index.ts +59 -45
- package/src/providers/AnthropicProvider.ts +44 -595
- package/src/providers/DeepSeekProvider.ts +27 -92
- package/src/providers/GeminiProvider.ts +41 -752
- package/src/providers/GenericOpenAICompatibleProvider.ts +19 -27
- package/src/providers/OpenAICompatibleProvider.ts +58 -764
- package/src/providers/OpenAIProvider.ts +31 -55
- package/src/providers/OpenRouterProvider.ts +40 -70
- package/src/providers/ProviderAdapter.ts +368 -0
- package/src/providers/index.ts +21 -23
- package/src/types/agent.ts +36 -11
- package/src/types/ai.ts +11 -21
- package/src/types/compaction.ts +2 -2
- package/src/types/errors.ts +17 -35
- package/src/types/flow.ts +44 -46
- package/src/types/history.ts +1 -1
- package/src/types/index.ts +18 -17
- package/src/types/persistence.ts +2 -2
- package/src/types/session.ts +4 -4
- package/src/types/signals.ts +3 -3
- package/src/types/template.ts +2 -2
- package/src/types/tool.ts +4 -2
- package/src/utils/condition.ts +3 -3
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +3 -3
- package/src/utils/index.ts +14 -15
- package/src/utils/serialize.ts +38 -0
- package/src/utils/session.ts +46 -9
- package/src/utils/template.ts +3 -3
- package/dist/cjs/core/DirectiveBus.d.ts +0 -88
- package/dist/cjs/core/DirectiveBus.d.ts.map +0 -1
- package/dist/cjs/core/DirectiveBus.js +0 -196
- package/dist/cjs/core/DirectiveBus.js.map +0 -1
- package/dist/cjs/providers/errorClassification.d.ts +0 -61
- package/dist/cjs/providers/errorClassification.d.ts.map +0 -1
- package/dist/cjs/providers/errorClassification.js +0 -123
- package/dist/cjs/providers/errorClassification.js.map +0 -1
- package/dist/cjs/utils/retry.d.ts +0 -67
- package/dist/cjs/utils/retry.d.ts.map +0 -1
- package/dist/cjs/utils/retry.js +0 -201
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/core/DirectiveBus.d.ts +0 -88
- package/dist/core/DirectiveBus.d.ts.map +0 -1
- package/dist/core/DirectiveBus.js +0 -192
- package/dist/core/DirectiveBus.js.map +0 -1
- package/dist/providers/errorClassification.d.ts +0 -61
- package/dist/providers/errorClassification.d.ts.map +0 -1
- package/dist/providers/errorClassification.js +0 -116
- package/dist/providers/errorClassification.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -67
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js +0 -193
- package/dist/utils/retry.js.map +0 -1
- package/src/core/DirectiveBus.ts +0 -248
- package/src/providers/errorClassification.ts +0 -172
- package/src/utils/retry.ts +0 -274
package/src/adapters/index.ts
CHANGED
|
@@ -2,42 +2,42 @@
|
|
|
2
2
|
* Database adapters for persistence
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
export { PrismaAdapter } from "./PrismaAdapter";
|
|
5
|
+
export { PrismaAdapter } from "./PrismaAdapter.js";
|
|
6
6
|
export type {
|
|
7
7
|
PrismaClient,
|
|
8
8
|
FieldMappings,
|
|
9
9
|
PrismaAdapterOptions,
|
|
10
|
-
} from "./PrismaAdapter";
|
|
10
|
+
} from "./PrismaAdapter.js";
|
|
11
11
|
|
|
12
|
-
export { RedisAdapter } from "./RedisAdapter";
|
|
13
|
-
export type { RedisClient, RedisAdapterOptions } from "./RedisAdapter";
|
|
12
|
+
export { RedisAdapter } from "./RedisAdapter.js";
|
|
13
|
+
export type { RedisClient, RedisAdapterOptions } from "./RedisAdapter.js";
|
|
14
14
|
|
|
15
|
-
export { MongoAdapter } from "./MongoAdapter";
|
|
15
|
+
export { MongoAdapter } from "./MongoAdapter.js";
|
|
16
16
|
export type {
|
|
17
17
|
MongoClient,
|
|
18
18
|
MongoDatabase,
|
|
19
19
|
MongoCollection,
|
|
20
20
|
MongoAdapterOptions,
|
|
21
|
-
} from "./MongoAdapter";
|
|
21
|
+
} from "./MongoAdapter.js";
|
|
22
22
|
|
|
23
|
-
export { PostgreSQLAdapter } from "./PostgreSQLAdapter";
|
|
23
|
+
export { PostgreSQLAdapter } from "./PostgreSQLAdapter.js";
|
|
24
24
|
export type {
|
|
25
25
|
PgClient,
|
|
26
26
|
PgQueryResult,
|
|
27
27
|
PostgreSQLAdapterOptions,
|
|
28
|
-
} from "./PostgreSQLAdapter";
|
|
28
|
+
} from "./PostgreSQLAdapter.js";
|
|
29
29
|
|
|
30
|
-
export { SQLiteAdapter } from "./SQLiteAdapter";
|
|
30
|
+
export { SQLiteAdapter } from "./SQLiteAdapter.js";
|
|
31
31
|
export type {
|
|
32
32
|
SqliteDatabase,
|
|
33
33
|
SqliteStatement,
|
|
34
34
|
SQLiteAdapterOptions,
|
|
35
|
-
} from "./SQLiteAdapter";
|
|
35
|
+
} from "./SQLiteAdapter.js";
|
|
36
36
|
|
|
37
|
-
export { MemoryAdapter } from "./MemoryAdapter";
|
|
37
|
+
export { MemoryAdapter } from "./MemoryAdapter.js";
|
|
38
38
|
|
|
39
|
-
export { OpenSearchAdapter } from "./OpenSearchAdapter";
|
|
39
|
+
export { OpenSearchAdapter } from "./OpenSearchAdapter.js";
|
|
40
40
|
export type {
|
|
41
41
|
OpenSearchClient,
|
|
42
42
|
OpenSearchAdapterOptions,
|
|
43
|
-
} from "./OpenSearchAdapter";
|
|
43
|
+
} from "./OpenSearchAdapter.js";
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared row-mapping for the SQL-shaped session adapters (PostgreSQL, SQLite)
|
|
3
|
+
* and date coercion for JSON-round-tripped values (Redis).
|
|
4
|
+
*
|
|
5
|
+
* One implementation so the adapters can't drift on what a stored session row
|
|
6
|
+
* means. PostgreSQL's driver returns JSONB pre-parsed and timestamptz as Date
|
|
7
|
+
* instances; SQLite returns strings — both shapes are accepted here.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type {
|
|
11
|
+
CollectedStateData,
|
|
12
|
+
SessionData,
|
|
13
|
+
SessionStatus,
|
|
14
|
+
} from "../types/index.js";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Coerce a raw stored value into a Date. Drivers variously hand back Date
|
|
18
|
+
* instances (node-postgres timestamptz) or ISO strings (SQLite, JSON blobs).
|
|
19
|
+
* `null`/`undefined` maps to `undefined`.
|
|
20
|
+
*/
|
|
21
|
+
export function coerceDate(value: unknown): Date | undefined {
|
|
22
|
+
if (value == null) return undefined;
|
|
23
|
+
return value instanceof Date ? value : new Date(value as string);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Map a raw snake_case row onto the camelCase SessionData interface.
|
|
28
|
+
* `collected_data` arrives JSONB-parsed on PostgreSQL and as a raw string on
|
|
29
|
+
* SQLite — both are handled. Exported for the adapter mapping tests.
|
|
30
|
+
*/
|
|
31
|
+
export function deserializeSessionRow<TData = Record<string, unknown>>(
|
|
32
|
+
row: Record<string, unknown>
|
|
33
|
+
): SessionData<TData> {
|
|
34
|
+
const collected = row.collected_data;
|
|
35
|
+
return {
|
|
36
|
+
id: row.id as string,
|
|
37
|
+
userId: (row.user_id as string) || undefined,
|
|
38
|
+
agentName: (row.agent_name as string) || undefined,
|
|
39
|
+
status: row.status as SessionStatus,
|
|
40
|
+
currentFlow: (row.current_flow as string) || undefined,
|
|
41
|
+
currentStep: (row.current_step as string) || undefined,
|
|
42
|
+
collectedData:
|
|
43
|
+
collected == null
|
|
44
|
+
? undefined
|
|
45
|
+
: typeof collected === "string"
|
|
46
|
+
? (JSON.parse(collected) as CollectedStateData<TData>)
|
|
47
|
+
: (collected as CollectedStateData<TData>),
|
|
48
|
+
messageCount: (row.message_count as number) || 0,
|
|
49
|
+
lastMessageAt: coerceDate(row.last_message_at),
|
|
50
|
+
completedAt: coerceDate(row.completed_at),
|
|
51
|
+
version: (row.version as number | null) ?? undefined,
|
|
52
|
+
// created_at/updated_at are NOT NULL in every adapter's schema; the
|
|
53
|
+
// fallback only covers hand-crafted rows.
|
|
54
|
+
createdAt: coerceDate(row.created_at) ?? new Date(),
|
|
55
|
+
updatedAt: coerceDate(row.updated_at) ?? new Date(),
|
|
56
|
+
};
|
|
57
|
+
}
|
package/src/core/Agent.ts
CHANGED
|
@@ -18,12 +18,12 @@ import type {
|
|
|
18
18
|
AiProvider,
|
|
19
19
|
CompactionOptions,
|
|
20
20
|
Directive,
|
|
21
|
-
} from "../types";
|
|
22
|
-
import type { Signal } from "../types/signals";
|
|
23
|
-
import { NotImplementedError } from "../types/errors";
|
|
24
|
-
import { SignalProcessor } from "./SignalProcessor";
|
|
25
|
-
import { SignalEvaluator } from "./SignalEvaluator";
|
|
26
|
-
import type { StreamOptions, GenerateOptions, RespondParams, ResponseModalDeps } from "./ResponseModal";
|
|
21
|
+
} from "../types/index.js";
|
|
22
|
+
import type { Signal } from "../types/signals.js";
|
|
23
|
+
import { NotImplementedError } from "../types/errors.js";
|
|
24
|
+
import { SignalProcessor } from "./SignalProcessor.js";
|
|
25
|
+
import { SignalEvaluator } from "./SignalEvaluator.js";
|
|
26
|
+
import type { StreamOptions, GenerateOptions, RespondParams, ResponseModalDeps } from "./ResponseModal.js";
|
|
27
27
|
import {
|
|
28
28
|
mergeCollected,
|
|
29
29
|
enterFlow,
|
|
@@ -32,18 +32,18 @@ import {
|
|
|
32
32
|
logger,
|
|
33
33
|
LoggerLevel,
|
|
34
34
|
generateSignalId,
|
|
35
|
-
} from "../utils";
|
|
35
|
+
} from "../utils/index.js";
|
|
36
36
|
|
|
37
|
-
import { Flow } from "./Flow";
|
|
38
|
-
import { Step, FlowConfigurationError as StepFlowConfigurationError } from "./Step";
|
|
39
|
-
import { PersistenceManager } from "./PersistenceManager";
|
|
40
|
-
import { SessionManager } from "./SessionManager";
|
|
41
|
-
import { FlowRouter } from "./FlowRouter";
|
|
42
|
-
import { PromptSectionCache } from "./PromptSectionCache";
|
|
37
|
+
import { Flow } from "./Flow.js";
|
|
38
|
+
import { Step, FlowConfigurationError as StepFlowConfigurationError } from "./Step.js";
|
|
39
|
+
import { PersistenceManager } from "./PersistenceManager.js";
|
|
40
|
+
import { SessionManager } from "./SessionManager.js";
|
|
41
|
+
import { FlowRouter } from "./FlowRouter.js";
|
|
42
|
+
import { PromptSectionCache } from "./PromptSectionCache.js";
|
|
43
43
|
|
|
44
|
-
import { ResponseModal } from "./ResponseModal";
|
|
45
|
-
import { ToolManager } from "./ToolManager";
|
|
46
|
-
import { CompactionEngine } from "./CompactionEngine";
|
|
44
|
+
import { ResponseModal } from "./ResponseModal.js";
|
|
45
|
+
import { ToolManager } from "./ToolManager.js";
|
|
46
|
+
import { CompactionEngine } from "./CompactionEngine.js";
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* Error thrown when data validation fails
|
|
@@ -205,8 +205,14 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
|
|
|
205
205
|
this.signalProcessor = undefined;
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
// Set log level based on debug option
|
|
208
|
+
// Set log level based on debug option. NOTE: loglevel's default logger is
|
|
209
|
+
// process-global — one agent enabling debug turns on DEBUG for every agent
|
|
210
|
+
// in the process. Warned so multi-tenant embedders aren't surprised.
|
|
209
211
|
if (options.debug) {
|
|
212
|
+
logger.warn(
|
|
213
|
+
`[Agent] "${options.name}" enabled debug logging via the PROCESS-GLOBAL loglevel level. ` +
|
|
214
|
+
`Every agent in this process now logs at DEBUG. Scope logging in your host if needed.`
|
|
215
|
+
);
|
|
210
216
|
logger.setLevel(LoggerLevel.DEBUG);
|
|
211
217
|
}
|
|
212
218
|
|
|
@@ -868,6 +874,26 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
|
|
|
868
874
|
}
|
|
869
875
|
}
|
|
870
876
|
|
|
877
|
+
// Overlap detection: warn (don't throw) when the incoming flow's
|
|
878
|
+
// requiredFields intersect another registered flow's — the schema is
|
|
879
|
+
// agent-level, so both flows complete together and one is silently
|
|
880
|
+
// excluded from routing.
|
|
881
|
+
if (options.requiredFields && options.requiredFields.length > 0) {
|
|
882
|
+
const incoming = new Set(options.requiredFields.map(String));
|
|
883
|
+
for (const existing of this._flows) {
|
|
884
|
+
const shared = (existing.requiredFields ?? [])
|
|
885
|
+
.map(String)
|
|
886
|
+
.filter((f) => incoming.has(f));
|
|
887
|
+
if (shared.length > 0) {
|
|
888
|
+
logger.warn(
|
|
889
|
+
`[FlowConfigurationError] Overlapping requiredFields: flows "${existing.title}" and "${options.title}" share [${shared.join(', ')}]. ` +
|
|
890
|
+
`The schema is agent-level, so data collected for one flow marks the other complete and excludes it from routing. ` +
|
|
891
|
+
`Give each flow distinct requiredFields, or set \`reentrant: true\` on flows that legitimately share fields.`
|
|
892
|
+
);
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
|
|
871
897
|
const flow = new Flow<TContext, TData>(options, this);
|
|
872
898
|
|
|
873
899
|
// Validate that step collect fields reference valid schema keys
|
|
@@ -1151,12 +1177,20 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
|
|
|
1151
1177
|
*
|
|
1152
1178
|
* String form desugars to `{ goTo: target }`.
|
|
1153
1179
|
*
|
|
1180
|
+
* Durability: with a persistence adapter and autoSave configured (the
|
|
1181
|
+
* defaults), the queued directive is persisted immediately — safe for
|
|
1182
|
+
* out-of-process callers like webhooks or cron. Without an adapter it is
|
|
1183
|
+
* memory-only, as is `persistence.autoSave: false` (then persisting before
|
|
1184
|
+
* the next turn is the caller's job).
|
|
1185
|
+
*
|
|
1154
1186
|
* @param target - Flow ID/title string (desugars to `{ goTo: target }`) or a full Directive
|
|
1155
1187
|
* @param session - Session to update (uses current session if not provided)
|
|
1156
1188
|
* @returns Updated session with `pendingDirective` set
|
|
1157
1189
|
*
|
|
1158
1190
|
* @throws FlowConfigurationError if the string target doesn't match any flow
|
|
1159
1191
|
* @throws FlowConfigurationError if the directive fails validation
|
|
1192
|
+
* @throws SessionConflictError when persistence is enabled and another writer
|
|
1193
|
+
* moved the stored session since this copy was loaded
|
|
1160
1194
|
*
|
|
1161
1195
|
* @example
|
|
1162
1196
|
* // String shorthand — desugars to { goTo: 'Feedback' }
|
|
@@ -1166,7 +1200,6 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
|
|
|
1166
1200
|
* // Full directive
|
|
1167
1201
|
* const updated = await agent.dispatch({ goTo: 'Billing', reply: 'Transferring you now.' }, session);
|
|
1168
1202
|
*/
|
|
1169
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
1170
1203
|
async dispatch(
|
|
1171
1204
|
target: string | Directive<TContext, TData>,
|
|
1172
1205
|
session?: SessionState<TData>
|
|
@@ -1225,6 +1258,19 @@ export class Agent<TContext = unknown, TData = unknown> implements ResponseModal
|
|
|
1225
1258
|
},
|
|
1226
1259
|
};
|
|
1227
1260
|
|
|
1261
|
+
// Durability: with an adapter + autoSave configured, dispatch persists
|
|
1262
|
+
// immediately — webhooks/cron run out-of-process from the responder, and a
|
|
1263
|
+
// memory-only queue would evaporate with this process. The save stamps the
|
|
1264
|
+
// new version back onto updatedSession, so the next turn's auto-save CAS
|
|
1265
|
+
// stays clean. Persisting BEFORE the in-memory sync keeps the existing
|
|
1266
|
+
// invariant: a throwing dispatch leaves the session untouched.
|
|
1267
|
+
if (this._persistenceManager && this.options.persistence?.autoSave !== false) {
|
|
1268
|
+
await this._persistenceManager.saveSessionState(updatedSession.id, updatedSession);
|
|
1269
|
+
logger.debug(
|
|
1270
|
+
`[Agent] Dispatched directive persisted to adapter for session ${updatedSession.id}`
|
|
1271
|
+
);
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1228
1274
|
// Update current session in place if no explicit session was passed
|
|
1229
1275
|
if (!session && this.session.current) {
|
|
1230
1276
|
this.session.syncSession(updatedSession);
|
|
@@ -15,36 +15,30 @@
|
|
|
15
15
|
* Implements Algorithm 1 from `.kiro/specs/auto-steps/design.md`.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { SessionState } from "../types";
|
|
19
|
-
import type { Event } from "../types/history";
|
|
20
|
-
import { FlowConfigurationError, Step } from "./Step";
|
|
21
|
-
import { Flow } from "./Flow";
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
18
|
+
import type { Directive, SessionState } from "../types/index.js";
|
|
19
|
+
import type { Event } from "../types/history.js";
|
|
20
|
+
import { FlowConfigurationError, Step } from "./Step.js";
|
|
21
|
+
import { Flow } from "./Flow.js";
|
|
22
|
+
import { flow } from "./flow-namespace.js";
|
|
23
|
+
import { enterStep, mergeCollected, logger } from "../utils/index.js";
|
|
24
|
+
import { createTemplateContext } from "../utils/template.js";
|
|
24
25
|
import type {
|
|
25
26
|
StoppedReason,
|
|
26
27
|
BranchMap,
|
|
27
28
|
BranchEntry,
|
|
28
29
|
BranchPredicateContext,
|
|
29
|
-
} from "../types/flow";
|
|
30
|
-
import { evaluateIfPredicates } from "../utils/condition";
|
|
30
|
+
} from "../types/flow.js";
|
|
31
|
+
import { evaluateIfPredicates } from "../utils/condition.js";
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
34
|
* The directive-like object that `prepare` may return on auto-steps.
|
|
34
|
-
*
|
|
35
|
+
* A structural subset of Directive (pre-LLM + position fields), so results
|
|
36
|
+
* merge through the canonical Algorithm 4 (`flow.merge`).
|
|
35
37
|
*/
|
|
36
|
-
export
|
|
37
|
-
|
|
38
|
-
contextUpdate
|
|
39
|
-
|
|
40
|
-
reply?: string;
|
|
41
|
-
/** Position-changing: jump to a step within the current flow. */
|
|
42
|
-
goToStep?: string;
|
|
43
|
-
/** Position-changing: jump to another flow. */
|
|
44
|
-
goTo?: string;
|
|
45
|
-
/** Position-changing: mark the flow as complete. */
|
|
46
|
-
complete?: boolean;
|
|
47
|
-
}
|
|
38
|
+
export type AutoStepPrepareResult<TContext = unknown, TData = unknown> = Pick<
|
|
39
|
+
Directive<TContext, TData>,
|
|
40
|
+
"dataUpdate" | "contextUpdate" | "halt" | "reply" | "goToStep" | "goTo" | "complete"
|
|
41
|
+
>;
|
|
48
42
|
|
|
49
43
|
/**
|
|
50
44
|
* Result of running the auto-chain.
|
|
@@ -53,7 +47,7 @@ export interface AutoChainResult<TContext = unknown, TData = unknown> {
|
|
|
53
47
|
/** The interactive step to hand off to the LLM path (undefined if chain ended without one). */
|
|
54
48
|
resolvedStep?: Step<TContext, TData>;
|
|
55
49
|
/** The merged directive from the halting auto-step's prepare (only set when stoppedReason = 'halt'). */
|
|
56
|
-
mergedDirective?: AutoStepPrepareResult
|
|
50
|
+
mergedDirective?: AutoStepPrepareResult<TContext, TData>;
|
|
57
51
|
/** Why the chain stopped, if it didn't reach an interactive step normally. */
|
|
58
52
|
stoppedReason?: StoppedReason;
|
|
59
53
|
/** Updated session after all auto-step state writes. */
|
|
@@ -192,10 +186,24 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
|
|
|
192
186
|
|
|
193
187
|
// STEP 5: position-changing directive (goToStep, goTo, complete)
|
|
194
188
|
if (merged.goToStep) {
|
|
195
|
-
|
|
189
|
+
// String form targets the current flow; object form carrying
|
|
190
|
+
// a different `flow` defers to the pipeline for cross-flow
|
|
191
|
+
// resolution (same as goTo).
|
|
192
|
+
const goTarget = typeof merged.goToStep === "string"
|
|
193
|
+
? { step: merged.goToStep, flowId: undefined }
|
|
194
|
+
: { step: merged.goToStep.step, flowId: merged.goToStep.flow };
|
|
195
|
+
if (goTarget.flowId && goTarget.flowId !== flow.id) {
|
|
196
|
+
return {
|
|
197
|
+
resolvedStep: step,
|
|
198
|
+
mergedDirective: merged,
|
|
199
|
+
stoppedReason: 'goto',
|
|
200
|
+
session,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
const targetStep = flow.getStep(goTarget.step);
|
|
196
204
|
if (!targetStep) {
|
|
197
205
|
throw new FlowConfigurationError(
|
|
198
|
-
`[FlowConfigurationError] Auto-step "${step.id}" goToStep targets unknown step: "${
|
|
206
|
+
`[FlowConfigurationError] Auto-step "${step.id}" goToStep targets unknown step: "${goTarget.step}" does not exist in the current flow. ` +
|
|
199
207
|
`Check the step id or use goTo to target a different flow.`
|
|
200
208
|
);
|
|
201
209
|
}
|
|
@@ -263,26 +271,15 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
|
|
|
263
271
|
}
|
|
264
272
|
|
|
265
273
|
/**
|
|
266
|
-
* Run
|
|
274
|
+
* Run the prepare hook for an auto-step, collecting any
|
|
267
275
|
* Directive return values (pre-LLM fields honored).
|
|
268
276
|
*/
|
|
269
277
|
private async runStepHooks(
|
|
270
278
|
step: Step<TContext, TData>,
|
|
271
279
|
session: SessionState<TData>,
|
|
272
280
|
context: TContext
|
|
273
|
-
): Promise<AutoStepPrepareResult | undefined> {
|
|
274
|
-
let merged: AutoStepPrepareResult | undefined;
|
|
275
|
-
|
|
276
|
-
// onEnter (future hook — not yet in StepOptions, but handle if present)
|
|
277
|
-
const stepWithHooks = step as Step<TContext, TData> & {
|
|
278
|
-
onEnter?: (context: TContext, data: Partial<TData> | undefined) => Promise<unknown>;
|
|
279
|
-
};
|
|
280
|
-
if (typeof stepWithHooks.onEnter === 'function') {
|
|
281
|
-
const onEnterResult = await stepWithHooks.onEnter(context, session.data);
|
|
282
|
-
if (onEnterResult && typeof onEnterResult === 'object') {
|
|
283
|
-
merged = this.mergeDirectives(merged, onEnterResult as AutoStepPrepareResult);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
281
|
+
): Promise<AutoStepPrepareResult<TContext, TData> | undefined> {
|
|
282
|
+
let merged: AutoStepPrepareResult<TContext, TData> | undefined;
|
|
286
283
|
|
|
287
284
|
// prepare hook — for auto-steps, prepare may return a Directive with pre-LLM fields
|
|
288
285
|
if (step.prepare) {
|
|
@@ -296,7 +293,7 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
|
|
|
296
293
|
);
|
|
297
294
|
// prepare may return void or a directive-like object
|
|
298
295
|
if (prepareResult && typeof prepareResult === 'object') {
|
|
299
|
-
merged = this.mergeDirectives(merged, prepareResult as AutoStepPrepareResult);
|
|
296
|
+
merged = this.mergeDirectives(merged, prepareResult as AutoStepPrepareResult<TContext, TData>);
|
|
300
297
|
}
|
|
301
298
|
} else {
|
|
302
299
|
// Tool reference (string or Tool object) — for auto-steps, tool-based
|
|
@@ -312,27 +309,17 @@ export class AutoChainExecutor<TContext = unknown, TData = unknown> {
|
|
|
312
309
|
}
|
|
313
310
|
|
|
314
311
|
/**
|
|
315
|
-
* Merge two directive-like objects
|
|
316
|
-
*
|
|
312
|
+
* Merge two directive-like objects via the canonical Algorithm 4 merge —
|
|
313
|
+
* one algorithm shared with tools, hooks and signals.
|
|
317
314
|
*/
|
|
318
315
|
private mergeDirectives(
|
|
319
|
-
base: AutoStepPrepareResult | undefined,
|
|
320
|
-
incoming: AutoStepPrepareResult
|
|
321
|
-
): AutoStepPrepareResult {
|
|
316
|
+
base: AutoStepPrepareResult<TContext, TData> | undefined,
|
|
317
|
+
incoming: AutoStepPrepareResult<TContext, TData>
|
|
318
|
+
): AutoStepPrepareResult<TContext, TData> {
|
|
322
319
|
if (!base) return { ...incoming };
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
: base.dataUpdate,
|
|
327
|
-
contextUpdate: incoming.contextUpdate
|
|
328
|
-
? { ...(base.contextUpdate || {}), ...incoming.contextUpdate }
|
|
329
|
-
: base.contextUpdate,
|
|
330
|
-
halt: incoming.halt ?? base.halt,
|
|
331
|
-
reply: incoming.reply ?? base.reply,
|
|
332
|
-
goTo: incoming.goTo ?? base.goTo,
|
|
333
|
-
goToStep: incoming.goToStep ?? base.goToStep,
|
|
334
|
-
complete: incoming.complete ?? base.complete,
|
|
335
|
-
};
|
|
320
|
+
// AutoStepPrepareResult is a structural subset of Directive, so both
|
|
321
|
+
// sides flow through the canonical merge directly — no casts needed.
|
|
322
|
+
return flow.merge<TContext, TData>(base, incoming);
|
|
336
323
|
}
|
|
337
324
|
|
|
338
325
|
/**
|
|
@@ -12,11 +12,11 @@ import type {
|
|
|
12
12
|
BranchMap,
|
|
13
13
|
BranchPredicateContext,
|
|
14
14
|
Directive,
|
|
15
|
-
} from "../types/flow";
|
|
16
|
-
import type { AiProvider } from "../types/ai";
|
|
17
|
-
import type { Event } from "../types/history";
|
|
18
|
-
import { eventsToHistory, logger } from "../utils";
|
|
19
|
-
import { splitWhenConditions, evaluateIfPredicates, type WhenConditionGroups } from "../utils/condition";
|
|
15
|
+
} from "../types/flow.js";
|
|
16
|
+
import type { AiProvider } from "../types/ai.js";
|
|
17
|
+
import type { Event } from "../types/history.js";
|
|
18
|
+
import { eventsToHistory, logger } from "../utils/index.js";
|
|
19
|
+
import { splitWhenConditions, evaluateIfPredicates, type WhenConditionGroups } from "../utils/condition.js";
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* The AI condition evaluator function signature.
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import log from "loglevel";
|
|
12
|
-
import type { HistoryItem } from "../types/history";
|
|
13
|
-
import type { CompactionOptions, CompactionResult } from "../types/compaction";
|
|
12
|
+
import type { HistoryItem } from "../types/history.js";
|
|
13
|
+
import type { CompactionOptions, CompactionResult } from "../types/compaction.js";
|
|
14
14
|
|
|
15
15
|
export class CompactionEngine {
|
|
16
16
|
/**
|
|
@@ -180,6 +180,27 @@ export class CompactionEngine {
|
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Adjust the left edge of a preserved window so it never begins with an
|
|
185
|
+
* orphaned tool result — a role:'tool' message whose assistant tool_calls
|
|
186
|
+
* parent lies outside the window. Providers reject such histories at the
|
|
187
|
+
* next request.
|
|
188
|
+
*
|
|
189
|
+
* The preserve count is a target, not a hard guarantee: when the naive
|
|
190
|
+
* message-count boundary would split an assistant/tool pair, the window
|
|
191
|
+
* grows left just enough to keep the pair together.
|
|
192
|
+
*/
|
|
193
|
+
private static alignPreserveStart(
|
|
194
|
+
history: HistoryItem[],
|
|
195
|
+
start: number
|
|
196
|
+
): number {
|
|
197
|
+
let aligned = Math.max(0, Math.min(start, history.length));
|
|
198
|
+
while (aligned > 0 && history[aligned].role === "tool") {
|
|
199
|
+
aligned--;
|
|
200
|
+
}
|
|
201
|
+
return aligned;
|
|
202
|
+
}
|
|
203
|
+
|
|
183
204
|
/**
|
|
184
205
|
* Aggressive truncation fallback: remove oldest messages (no LLM needed).
|
|
185
206
|
* Keeps only the most recent messages that fit within the token budget.
|
|
@@ -191,11 +212,16 @@ export class CompactionEngine {
|
|
|
191
212
|
const threshold = options.maxTokens * options.compactionThreshold;
|
|
192
213
|
const preserveCount = options.preserveRecentCount;
|
|
193
214
|
|
|
194
|
-
// Always preserve the last preserveRecentCount messages
|
|
195
|
-
|
|
215
|
+
// Always preserve the last ~preserveRecentCount messages (aligned so
|
|
216
|
+
// the window never opens on an orphaned tool result)
|
|
217
|
+
const preserveStart = CompactionEngine.alignPreserveStart(
|
|
218
|
+
history,
|
|
219
|
+
Math.max(0, history.length - preserveCount)
|
|
220
|
+
);
|
|
221
|
+
const preserved = history.slice(preserveStart);
|
|
196
222
|
|
|
197
223
|
// Try to keep as many older messages as fit within budget
|
|
198
|
-
const older = history.slice(0,
|
|
224
|
+
const older = history.slice(0, preserveStart);
|
|
199
225
|
const result: HistoryItem[] = [];
|
|
200
226
|
|
|
201
227
|
// Add older messages from most recent backwards until we'd exceed budget
|
|
@@ -219,7 +245,9 @@ export class CompactionEngine {
|
|
|
219
245
|
* Layer 3 (micro_compact): Compress verbose tool outputs inline
|
|
220
246
|
* Layer 4 (auto_compact): Summarize old messages via LLM provider
|
|
221
247
|
*
|
|
222
|
-
* The last `preserveRecentCount` messages are NEVER modified or removed
|
|
248
|
+
* The last `preserveRecentCount` messages are NEVER modified or removed
|
|
249
|
+
* (the preserved window may extend slightly further left so it never
|
|
250
|
+
* splits an assistant/tool pair at its boundary).
|
|
223
251
|
*/
|
|
224
252
|
static async checkAndCompact(
|
|
225
253
|
history: HistoryItem[],
|
|
@@ -277,8 +305,14 @@ export class CompactionEngine {
|
|
|
277
305
|
}
|
|
278
306
|
|
|
279
307
|
// Layer 4: Auto-compact (summarize old messages via LLM)
|
|
280
|
-
|
|
281
|
-
|
|
308
|
+
// preserveRecentCount is a target, not a hard guarantee: the window's
|
|
309
|
+
// left edge is aligned so it never opens on an orphaned tool result.
|
|
310
|
+
const preserveStart = CompactionEngine.alignPreserveStart(
|
|
311
|
+
microCompacted,
|
|
312
|
+
Math.max(0, microCompacted.length - preserveCount)
|
|
313
|
+
);
|
|
314
|
+
const oldMessages = microCompacted.slice(0, preserveStart);
|
|
315
|
+
const recentMessages = microCompacted.slice(preserveStart);
|
|
282
316
|
|
|
283
317
|
const summary = await CompactionEngine.summarizeMessages(
|
|
284
318
|
oldMessages,
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* Validates: Requirements 22.1, 22.2, 22.3
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { FlowConfigurationError } from "./Step";
|
|
16
|
-
import { logger } from "../utils";
|
|
17
|
-
import type { Directive } from "../types/flow";
|
|
15
|
+
import { FlowConfigurationError } from "./Step.js";
|
|
16
|
+
import { logger } from "../utils/index.js";
|
|
17
|
+
import type { Directive } from "../types/flow.js";
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Entry in the directive chain log — records what was emitted and by whom.
|
package/src/core/Events.ts
CHANGED
|
@@ -11,8 +11,8 @@ import type {
|
|
|
11
11
|
MessageData,
|
|
12
12
|
HistoryItem,
|
|
13
13
|
History,
|
|
14
|
-
} from "../types";
|
|
15
|
-
import { EventKind, MessageRole } from "../types";
|
|
14
|
+
} from "../types/index.js";
|
|
15
|
+
import { EventKind, MessageRole } from "../types/index.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Convert a simple JSON history message to an internal Event
|
package/src/core/Flow.ts
CHANGED
|
@@ -13,16 +13,16 @@ import type {
|
|
|
13
13
|
TemplateContext,
|
|
14
14
|
ConditionEvaluationResult,
|
|
15
15
|
Directive,
|
|
16
|
-
} from "../types";
|
|
17
|
-
import type { SessionState } from "../types/session";
|
|
18
|
-
import type { StepResult } from "../types/flow";
|
|
19
|
-
import type { ConditionWhen, ConditionIf } from "../types/flow";
|
|
16
|
+
} from "../types/index.js";
|
|
17
|
+
import type { SessionState } from "../types/session.js";
|
|
18
|
+
import type { StepResult } from "../types/flow.js";
|
|
19
|
+
import type { ConditionWhen, ConditionIf } from "../types/flow.js";
|
|
20
20
|
|
|
21
|
-
import { generateFlowId, logger } from "../utils";
|
|
22
|
-
import { splitWhenConditions } from "../utils/condition";
|
|
21
|
+
import { generateFlowId, logger } from "../utils/index.js";
|
|
22
|
+
import { splitWhenConditions } from "../utils/condition.js";
|
|
23
23
|
|
|
24
|
-
import { Step, FlowConfigurationError } from "./Step";
|
|
25
|
-
import { Agent } from './Agent'
|
|
24
|
+
import { Step, FlowConfigurationError } from "./Step.js";
|
|
25
|
+
import { Agent } from './Agent.js'
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Represents a conversational flow/journey
|
|
@@ -647,7 +647,7 @@ export class Flow<TContext = unknown, TData = unknown> {
|
|
|
647
647
|
context: context as TContext,
|
|
648
648
|
data: session.data ?? {} as Partial<TData>,
|
|
649
649
|
session: {} as SessionState<TData>,
|
|
650
|
-
history: [] as import("../types/history").Event[],
|
|
650
|
+
history: [] as import("../types/history.js").Event[],
|
|
651
651
|
dispatch: () => { },
|
|
652
652
|
};
|
|
653
653
|
const result = await this.hooks.onComplete(hookCtx);
|