@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
|
@@ -4,13 +4,43 @@
|
|
|
4
4
|
* A handler may be a function, a registered tool id, or an inline tool.
|
|
5
5
|
* Used by the response prepare phase (prepare) and by SessionFinalizer
|
|
6
6
|
* (finalize).
|
|
7
|
+
*
|
|
8
|
+
* Handlers may emit directives three ways: a function's return value,
|
|
9
|
+
* `ctx.dispatch()` inside a tool, or a `{ directive }` tool return. All are
|
|
10
|
+
* merged via the canonical Algorithm 4 (`flow.merge`) and validated with
|
|
11
|
+
* `flow.validate`. State writes (`dataUpdate`/`contextUpdate`) are applied
|
|
12
|
+
* immediately to the TURN session — never to agent-level live state — so
|
|
13
|
+
* persistence captures them. Remaining control-flow fields (position fields,
|
|
14
|
+
* verbatim replies, halts) are returned to the caller to act on.
|
|
7
15
|
*/
|
|
8
16
|
|
|
9
|
-
import type { PrepareResult, SessionState, Tool } from "../types";
|
|
10
|
-
import type { Flow } from "./Flow";
|
|
11
|
-
import type { Step } from "./Step";
|
|
12
|
-
import type { ToolManager } from "./ToolManager";
|
|
13
|
-
import {
|
|
17
|
+
import type { Directive, PrepareResult, SessionState, Tool } from "../types/index.js";
|
|
18
|
+
import type { Flow } from "./Flow.js";
|
|
19
|
+
import type { Step } from "./Step.js";
|
|
20
|
+
import type { ToolManager } from "./ToolManager.js";
|
|
21
|
+
import { flow } from "./flow-namespace.js";
|
|
22
|
+
import { logger } from "../utils/index.js";
|
|
23
|
+
|
|
24
|
+
/** Fields a caller can still act on after state writes have been applied. */
|
|
25
|
+
const CONTROL_FIELDS = [
|
|
26
|
+
"goTo",
|
|
27
|
+
"goToStep",
|
|
28
|
+
"reset",
|
|
29
|
+
"complete",
|
|
30
|
+
"abort",
|
|
31
|
+
"reply",
|
|
32
|
+
"halt",
|
|
33
|
+
"appendPrompt",
|
|
34
|
+
"injectTools",
|
|
35
|
+
] as const;
|
|
36
|
+
|
|
37
|
+
function hasControlFields(directive: Directive): boolean {
|
|
38
|
+
return CONTROL_FIELDS.some(
|
|
39
|
+
(field) =>
|
|
40
|
+
(directive as Record<string, unknown>)[field] !== undefined &&
|
|
41
|
+
(directive as Record<string, unknown>)[field] !== null
|
|
42
|
+
);
|
|
43
|
+
}
|
|
14
44
|
|
|
15
45
|
export class StepLifecycle<TContext = unknown, TData = unknown> {
|
|
16
46
|
constructor(
|
|
@@ -23,10 +53,14 @@ export class StepLifecycle<TContext = unknown, TData = unknown> {
|
|
|
23
53
|
) { }
|
|
24
54
|
|
|
25
55
|
/**
|
|
26
|
-
* Execute prepare
|
|
56
|
+
* Execute prepare for the session's current step if available.
|
|
57
|
+
* Returns the merged control-flow directive, if the handler emitted one.
|
|
27
58
|
* Auto-steps are skipped — their prepare is handled by AutoChainExecutor.
|
|
28
59
|
*/
|
|
29
|
-
async runPrepare(
|
|
60
|
+
async runPrepare(
|
|
61
|
+
session: SessionState<TData>,
|
|
62
|
+
context: TContext
|
|
63
|
+
): Promise<Directive<TContext, TData> | undefined> {
|
|
30
64
|
if (session.currentFlow && session.currentStep) {
|
|
31
65
|
const currentFlow = this.deps.getFlows().find(
|
|
32
66
|
(r) => r.id === session.currentFlow?.id
|
|
@@ -36,26 +70,31 @@ export class StepLifecycle<TContext = unknown, TData = unknown> {
|
|
|
36
70
|
// Skip auto-steps — their prepare is handled by AutoChainExecutor
|
|
37
71
|
if (currentStep?.auto) {
|
|
38
72
|
logger.debug(`[StepLifecycle] Skipping pre-routing prepare for auto-step: ${currentStep.id}`);
|
|
39
|
-
return;
|
|
73
|
+
return undefined;
|
|
40
74
|
}
|
|
41
75
|
if (currentStep?.prepare) {
|
|
42
76
|
logger.debug(`[StepLifecycle] Executing prepare for step: ${currentStep.id}`);
|
|
43
|
-
|
|
77
|
+
return this.executePrepareFinalize(
|
|
44
78
|
currentStep.prepare,
|
|
45
79
|
context,
|
|
46
|
-
session
|
|
80
|
+
session,
|
|
47
81
|
currentFlow,
|
|
48
82
|
currentStep
|
|
49
83
|
);
|
|
50
84
|
}
|
|
51
85
|
}
|
|
52
86
|
}
|
|
87
|
+
return undefined;
|
|
53
88
|
}
|
|
54
89
|
|
|
55
90
|
/**
|
|
56
|
-
* Execute finalize
|
|
91
|
+
* Execute finalize for the session's current step if available.
|
|
92
|
+
* Returns the merged control-flow directive, if the handler emitted one.
|
|
57
93
|
*/
|
|
58
|
-
async runFinalize(
|
|
94
|
+
async runFinalize(
|
|
95
|
+
session: SessionState<TData>,
|
|
96
|
+
context: TContext
|
|
97
|
+
): Promise<Directive<TContext, TData> | undefined> {
|
|
59
98
|
if (session.currentFlow && session.currentStep) {
|
|
60
99
|
const currentFlow = this.deps.getFlows().find(
|
|
61
100
|
(r) => r.id === session.currentFlow?.id
|
|
@@ -66,58 +105,75 @@ export class StepLifecycle<TContext = unknown, TData = unknown> {
|
|
|
66
105
|
logger.debug(
|
|
67
106
|
`[StepLifecycle] Executing finalize for step: ${currentStep.id}`
|
|
68
107
|
);
|
|
69
|
-
|
|
108
|
+
return this.executePrepareFinalize(
|
|
70
109
|
currentStep.finalize,
|
|
71
110
|
context,
|
|
72
|
-
session
|
|
111
|
+
session,
|
|
73
112
|
currentFlow,
|
|
74
113
|
currentStep
|
|
75
114
|
);
|
|
76
115
|
}
|
|
77
116
|
}
|
|
78
117
|
}
|
|
118
|
+
return undefined;
|
|
79
119
|
}
|
|
80
120
|
|
|
81
121
|
/**
|
|
82
|
-
* Execute a prepare or finalize
|
|
122
|
+
* Execute a prepare or finalize handler and resolve its emitted directives.
|
|
83
123
|
*/
|
|
84
124
|
private async executePrepareFinalize(
|
|
85
125
|
prepareOrFinalize:
|
|
86
126
|
| string
|
|
87
127
|
| Tool<TContext, TData>
|
|
88
|
-
| ((context: TContext, data?: Partial<TData>) => void | PrepareResult | Promise<void | PrepareResult
|
|
128
|
+
| ((context: TContext, data?: Partial<TData>) => void | PrepareResult<TContext, TData> | Promise<void | PrepareResult<TContext, TData>>)
|
|
89
129
|
| undefined,
|
|
90
130
|
context: TContext,
|
|
91
|
-
|
|
92
|
-
|
|
131
|
+
session: SessionState<TData>,
|
|
132
|
+
flowRef?: Flow<TContext, TData>,
|
|
93
133
|
step?: Step<TContext, TData>
|
|
94
|
-
): Promise<
|
|
95
|
-
if (!prepareOrFinalize) return;
|
|
134
|
+
): Promise<Directive<TContext, TData> | undefined> {
|
|
135
|
+
if (!prepareOrFinalize) return undefined;
|
|
136
|
+
|
|
137
|
+
const collected: Directive<TContext, TData>[] = [];
|
|
138
|
+
|
|
139
|
+
/** State writes land on the TURN session so persistence captures them. */
|
|
140
|
+
const writeToSession = (updates: Partial<TData> | Record<string, unknown> | undefined): void => {
|
|
141
|
+
if (!updates) return;
|
|
142
|
+
session.data = { ...(session.data ?? {}), ...updates };
|
|
143
|
+
};
|
|
96
144
|
|
|
97
145
|
if (typeof prepareOrFinalize === "function") {
|
|
98
|
-
// It's a function - call it
|
|
99
|
-
await prepareOrFinalize(context, data);
|
|
146
|
+
// It's a function - call it and honor its return value
|
|
147
|
+
const result = await prepareOrFinalize(context, session.data);
|
|
148
|
+
if (result && typeof result === "object") {
|
|
149
|
+
collected.push(result);
|
|
150
|
+
}
|
|
100
151
|
} else {
|
|
101
152
|
// It's a tool reference - find and execute the tool
|
|
102
153
|
let tool: Tool<TContext, TData> | undefined;
|
|
103
154
|
|
|
104
155
|
if (typeof prepareOrFinalize === "string") {
|
|
105
156
|
// Tool ID - use ToolManager for unified resolution
|
|
106
|
-
tool = this.deps.toolManager.find(prepareOrFinalize, undefined, step,
|
|
157
|
+
tool = this.deps.toolManager.find(prepareOrFinalize, undefined, step, flowRef);
|
|
107
158
|
} else {
|
|
108
159
|
// Tool object - use directly
|
|
109
160
|
tool = prepareOrFinalize;
|
|
110
161
|
}
|
|
111
162
|
|
|
112
163
|
if (tool) {
|
|
113
|
-
// Use ToolManager for unified tool execution
|
|
164
|
+
// Use ToolManager for unified tool execution. updateData writes
|
|
165
|
+
// into the turn session (previously it mutated the agent's live
|
|
166
|
+
// session, losing writes made after the persistence snapshot).
|
|
114
167
|
const result = await this.deps.toolManager.executeTool({
|
|
115
168
|
tool,
|
|
116
169
|
context,
|
|
117
170
|
updateContext: this.deps.updateContext,
|
|
118
|
-
updateData:
|
|
171
|
+
updateData: async (updates) => {
|
|
172
|
+
writeToSession(updates);
|
|
173
|
+
await this.deps.updateData(updates);
|
|
174
|
+
},
|
|
119
175
|
history: [], // Empty history for prepare/finalize
|
|
120
|
-
data,
|
|
176
|
+
data: session.data,
|
|
121
177
|
});
|
|
122
178
|
|
|
123
179
|
if (!result.success) {
|
|
@@ -126,6 +182,16 @@ export class StepLifecycle<TContext = unknown, TData = unknown> {
|
|
|
126
182
|
);
|
|
127
183
|
throw new Error(`Tool execution failed: ${result.error}`);
|
|
128
184
|
}
|
|
185
|
+
|
|
186
|
+
// Collect directives (ctx.dispatch / {directive} returns)
|
|
187
|
+
if (result.directives?.length) {
|
|
188
|
+
collected.push(...(result.directives as Directive<TContext, TData>[]));
|
|
189
|
+
}
|
|
190
|
+
// Honor ToolResult-level state updates
|
|
191
|
+
writeToSession(result.dataUpdate as Partial<TData> | undefined);
|
|
192
|
+
if (result.contextUpdate) {
|
|
193
|
+
await this.deps.updateContext(result.contextUpdate as Partial<TContext>);
|
|
194
|
+
}
|
|
129
195
|
} else {
|
|
130
196
|
logger.warn(
|
|
131
197
|
`[StepLifecycle] Tool not found for prepare/finalize: ${typeof prepareOrFinalize === "string"
|
|
@@ -135,5 +201,42 @@ export class StepLifecycle<TContext = unknown, TData = unknown> {
|
|
|
135
201
|
);
|
|
136
202
|
}
|
|
137
203
|
}
|
|
204
|
+
|
|
205
|
+
if (collected.length === 0) return undefined;
|
|
206
|
+
|
|
207
|
+
// Canonical merge + validation — one algorithm shared with tools,
|
|
208
|
+
// signals, and auto-steps.
|
|
209
|
+
for (const directive of collected) {
|
|
210
|
+
flow.validate(directive);
|
|
211
|
+
}
|
|
212
|
+
const merged = flow.mergeAll(collected);
|
|
213
|
+
if (!merged) return undefined;
|
|
214
|
+
|
|
215
|
+
// Apply state writes immediately; they are not control flow.
|
|
216
|
+
writeToSession(merged.dataUpdate);
|
|
217
|
+
if (merged.contextUpdate) {
|
|
218
|
+
await this.deps.updateContext(merged.contextUpdate);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (!hasControlFields(merged)) return undefined;
|
|
222
|
+
|
|
223
|
+
// Pre-LLM augmentation fields (appendPrompt / injectTools / halt / reply)
|
|
224
|
+
// have no sink on non-auto steps yet — surface loudly instead of silently
|
|
225
|
+
// dropping them.
|
|
226
|
+
if (
|
|
227
|
+
(merged.appendPrompt?.length || merged.injectTools?.length || merged.halt || merged.reply) &&
|
|
228
|
+
!step?.auto
|
|
229
|
+
) {
|
|
230
|
+
logger.warn(
|
|
231
|
+
`[StepLifecycle] Directive from "${step?.id ?? "step"}" ${flowRef ? `in flow "${flowRef.title}" ` : ""}` +
|
|
232
|
+
`carries pre-LLM fields (appendPrompt/injectTools/halt/reply) that only auto-steps honor today. ` +
|
|
233
|
+
`Use an auto step for prompt augmentation or a signal handler for halt+reply.`
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const control = { ...merged };
|
|
238
|
+
delete control.dataUpdate;
|
|
239
|
+
delete control.contextUpdate;
|
|
240
|
+
return control;
|
|
138
241
|
}
|
|
139
242
|
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import log from "loglevel";
|
|
14
|
+
import type { Directive } from "../types/index.js";
|
|
14
15
|
import type {
|
|
15
16
|
ToolCallRequest,
|
|
16
17
|
ToolExecutionUpdate,
|
|
@@ -18,8 +19,9 @@ import type {
|
|
|
18
19
|
ToolContext,
|
|
19
20
|
Tool,
|
|
20
21
|
TrackedTool,
|
|
21
|
-
} from "../types/tool";
|
|
22
|
-
import { evaluateToolGates } from "./toolGates";
|
|
22
|
+
} from "../types/tool.js";
|
|
23
|
+
import { evaluateToolGates } from "./toolGates.js";
|
|
24
|
+
import { isToolResultLike, extractResultDirectives } from "../utils/index.js";
|
|
23
25
|
|
|
24
26
|
/** Options for the StreamingToolExecutor */
|
|
25
27
|
interface StreamingToolExecutorOptions {
|
|
@@ -257,8 +259,18 @@ export class StreamingToolExecutor<TContext = unknown, TData = unknown> {
|
|
|
257
259
|
this.parentSignal.addEventListener("abort", parentAbortHandler, { once: true });
|
|
258
260
|
}
|
|
259
261
|
|
|
262
|
+
// Per-call context so ctx.dispatch() emissions attribute to THIS
|
|
263
|
+
// tool even while siblings run concurrently on the shared context.
|
|
264
|
+
const dispatchedDirectives: Directive[] = [];
|
|
265
|
+
const callContext: ToolContext<TContext, TData> = {
|
|
266
|
+
...this.toolContext,
|
|
267
|
+
dispatch: (directive) => {
|
|
268
|
+
dispatchedDirectives.push(directive);
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
|
|
260
272
|
// Execute the tool handler
|
|
261
|
-
const result = await tool.handler(
|
|
273
|
+
const result = await tool.handler(callContext, toolCall.arguments);
|
|
262
274
|
|
|
263
275
|
// Clean up abort listeners
|
|
264
276
|
if (batchAbortController) {
|
|
@@ -282,6 +294,15 @@ export class StreamingToolExecutor<TContext = unknown, TData = unknown> {
|
|
|
282
294
|
// Normalize the result
|
|
283
295
|
const executionResult = this.normalizeResult(result, tool);
|
|
284
296
|
|
|
297
|
+
// Merge ctx.dispatch() emissions with result-carried directives —
|
|
298
|
+
// the same collection the sequential ToolManager.executeTool does.
|
|
299
|
+
if (dispatchedDirectives.length > 0) {
|
|
300
|
+
executionResult.directives = [
|
|
301
|
+
...(executionResult.directives ?? []),
|
|
302
|
+
...dispatchedDirectives,
|
|
303
|
+
];
|
|
304
|
+
}
|
|
305
|
+
|
|
285
306
|
// Apply per-tool maxResultSizeChars truncation (Req 9.4)
|
|
286
307
|
const truncatedResult = this.applyResultTruncation(executionResult, tool);
|
|
287
308
|
|
|
@@ -326,18 +347,22 @@ export class StreamingToolExecutor<TContext = unknown, TData = unknown> {
|
|
|
326
347
|
result: unknown,
|
|
327
348
|
tool: Tool<TContext, TData>
|
|
328
349
|
): ToolExecutionResult {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
) {
|
|
350
|
+
// Only SEMANTIC markers identify a ToolResult — bare `{data}` / `{error}`
|
|
351
|
+
// shapes are indistinguishable from ordinary business payloads and are
|
|
352
|
+
// wrapped as raw results instead (shared guard with ToolManager).
|
|
353
|
+
if (isToolResultLike(result)) {
|
|
334
354
|
const r = result as Record<string, unknown>;
|
|
355
|
+
// A handler may return `{ directive }` (singular shorthand) or
|
|
356
|
+
// `{ directives }` — normalized via the shared extractor so the
|
|
357
|
+
// concurrent path honors them identically to sequential execution.
|
|
358
|
+
const directives = extractResultDirectives(result);
|
|
335
359
|
return {
|
|
336
360
|
success: r.success !== false,
|
|
337
361
|
data: r.data,
|
|
338
362
|
error: r.error as string | undefined,
|
|
339
363
|
contextUpdate: r.contextUpdate as Record<string, unknown> | undefined,
|
|
340
364
|
dataUpdate: r.dataUpdate as Record<string, unknown> | undefined,
|
|
365
|
+
...(directives.length > 0 ? { directives } : {}),
|
|
341
366
|
metadata: {
|
|
342
367
|
toolId: tool.id,
|
|
343
368
|
...(r.meta as Record<string, unknown> | undefined),
|