@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
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
export interface RetryOptions<T> {
|
|
2
|
-
operation: () => Promise<T>;
|
|
3
|
-
maxRetries: number;
|
|
4
|
-
delay: (attempt: number) => number;
|
|
5
|
-
onRetry?: (attempt: number, error: unknown) => void;
|
|
6
|
-
onFailure?: (error: unknown) => boolean;
|
|
7
|
-
}
|
|
8
|
-
/** Provider timeout (ms) + retry count, after defaults are applied. */
|
|
9
|
-
export interface RetryConfig {
|
|
10
|
-
timeout: number;
|
|
11
|
-
retries: number;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Normalize a provider's optional retry config against the defaults. `timeout`
|
|
15
|
-
* uses `||` (a 0ms timeout is degenerate — it aborts every call immediately — so
|
|
16
|
-
* fall back to the default), while `retries` uses `??` so an explicit
|
|
17
|
-
* `retries: 0` (disable retries) is honored rather than treated as unset. Single
|
|
18
|
-
* definition so this distinction can't drift between providers.
|
|
19
|
-
*/
|
|
20
|
-
export declare function resolveRetryConfig(input?: {
|
|
21
|
-
timeout?: number;
|
|
22
|
-
retries?: number;
|
|
23
|
-
}): RetryConfig;
|
|
24
|
-
export declare function retry<T>(options: RetryOptions<T>): Promise<T>;
|
|
25
|
-
/**
|
|
26
|
-
* Combine abort signals into one that aborts as soon as any input aborts.
|
|
27
|
-
* `undefined` inputs are skipped, so a caller can pass an optional caller-signal
|
|
28
|
-
* alongside a required per-attempt one. Returns the sole signal when only one is
|
|
29
|
-
* present (no wrapper), or `undefined` when none are.
|
|
30
|
-
*
|
|
31
|
-
* Prefers the platform `AbortSignal.any`, which cleans up its listeners via weak
|
|
32
|
-
* refs — so merging onto a long-lived caller signal that's reused across many
|
|
33
|
-
* calls can't accumulate listeners. Falls back to a manual controller on older
|
|
34
|
-
* runtimes (< Node 20.3); there the listeners live until a source aborts or is
|
|
35
|
-
* garbage-collected, which is fine for the usual per-request signal.
|
|
36
|
-
*/
|
|
37
|
-
export declare function combineAbortSignals(...signals: Array<AbortSignal | undefined>): AbortSignal | undefined;
|
|
38
|
-
export declare const withTimeoutAndRetry: <T>(operation: (signal: AbortSignal) => Promise<T>, timeoutMs?: number, maxRetries?: number, operationName?: string) => Promise<T>;
|
|
39
|
-
export interface StreamRetryOptions {
|
|
40
|
-
/** Maximum number of retries after the first attempt. Defaults to 3. */
|
|
41
|
-
maxRetries?: number;
|
|
42
|
-
/** Backoff before the next attempt, in ms. Defaults to capped exponential. */
|
|
43
|
-
delay?: (attempt: number) => number;
|
|
44
|
-
/** Label used in retry logs. */
|
|
45
|
-
operationName?: string;
|
|
46
|
-
/**
|
|
47
|
-
* Max ms to wait for the *first* chunk (time-to-first-token) before treating
|
|
48
|
-
* the attempt as failed. Guards a provider that opens a stream and then
|
|
49
|
-
* stalls. Only the first chunk is bounded — later chunks are unbounded so a
|
|
50
|
-
* long but healthy stream is never cut off. `0`/omitted disables the deadline.
|
|
51
|
-
*/
|
|
52
|
-
firstChunkTimeoutMs?: number;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Streaming analog of {@link withTimeoutAndRetry}. Re-runs an async-generator
|
|
56
|
-
* factory as long as it fails *before yielding its first chunk* — an empty
|
|
57
|
-
* completion that throws "No response", an error while establishing the stream,
|
|
58
|
-
* or (with `firstChunkTimeoutMs`) a stall before the first token. Once any chunk
|
|
59
|
-
* has been yielded the stream is committed and further errors propagate, so a
|
|
60
|
-
* retry can never double-emit deltas the consumer has already received.
|
|
61
|
-
*
|
|
62
|
-
* This mirrors the non-streaming path, where the provider throws on an empty
|
|
63
|
-
* completion inside `withTimeoutAndRetry` and is retried on the same model
|
|
64
|
-
* before the caller falls through to backup models.
|
|
65
|
-
*/
|
|
66
|
-
export declare function withStreamRetry<T>(factory: (signal: AbortSignal) => AsyncGenerator<T>, options?: StreamRetryOptions): AsyncGenerator<T>;
|
|
67
|
-
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/utils/retry.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzC;AAED,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,WAAW,CAKd;AAED,wBAAsB,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA8BnE;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GACzC,WAAW,GAAG,SAAS,CAgBzB;AAED,eAAO,MAAM,mBAAmB,GAAU,CAAC,EACzC,WAAW,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9C,YAAW,MAAc,EACzB,aAAY,MAAU,EACtB,gBAAe,MAAuB,KACrC,OAAO,CAAC,CAAC,CAiDX,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAuB,eAAe,CAAC,CAAC,EACtC,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,cAAc,CAAC,CAAC,CAAC,EACnD,OAAO,GAAE,kBAAuB,GAC/B,cAAc,CAAC,CAAC,CAAC,CAwDnB"}
|
package/dist/cjs/utils/retry.js
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withTimeoutAndRetry = void 0;
|
|
4
|
-
exports.resolveRetryConfig = resolveRetryConfig;
|
|
5
|
-
exports.retry = retry;
|
|
6
|
-
exports.combineAbortSignals = combineAbortSignals;
|
|
7
|
-
exports.withStreamRetry = withStreamRetry;
|
|
8
|
-
/**
|
|
9
|
-
* Retry utility with exponential backoff
|
|
10
|
-
*/
|
|
11
|
-
const logger_1 = require("./logger");
|
|
12
|
-
const DEFAULT_RETRY_CONFIG = {
|
|
13
|
-
timeout: 60000,
|
|
14
|
-
retries: 3,
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Normalize a provider's optional retry config against the defaults. `timeout`
|
|
18
|
-
* uses `||` (a 0ms timeout is degenerate — it aborts every call immediately — so
|
|
19
|
-
* fall back to the default), while `retries` uses `??` so an explicit
|
|
20
|
-
* `retries: 0` (disable retries) is honored rather than treated as unset. Single
|
|
21
|
-
* definition so this distinction can't drift between providers.
|
|
22
|
-
*/
|
|
23
|
-
function resolveRetryConfig(input) {
|
|
24
|
-
return {
|
|
25
|
-
timeout: input?.timeout || DEFAULT_RETRY_CONFIG.timeout,
|
|
26
|
-
retries: input?.retries ?? DEFAULT_RETRY_CONFIG.retries,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
async function retry(options) {
|
|
30
|
-
const { operation, maxRetries, delay, onRetry, onFailure } = options;
|
|
31
|
-
let lastError;
|
|
32
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
33
|
-
try {
|
|
34
|
-
return await operation();
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
lastError = error;
|
|
38
|
-
if (attempt === maxRetries) {
|
|
39
|
-
const shouldRethrow = onFailure ? onFailure(lastError) : true;
|
|
40
|
-
if (shouldRethrow) {
|
|
41
|
-
throw lastError;
|
|
42
|
-
}
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
if (onRetry) {
|
|
46
|
-
onRetry(attempt, lastError);
|
|
47
|
-
}
|
|
48
|
-
const delayMs = delay(attempt);
|
|
49
|
-
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// eslint-disable-next-line @typescript-eslint/only-throw-error
|
|
53
|
-
throw lastError ?? new Error("Operation failed");
|
|
54
|
-
}
|
|
55
|
-
/** Capped exponential backoff (1s, 2s, 4s, … max 5s) shared by the retry helpers. */
|
|
56
|
-
const defaultBackoff = (attempt) => Math.min(1000 * Math.pow(2, attempt), 5000);
|
|
57
|
-
/**
|
|
58
|
-
* Combine abort signals into one that aborts as soon as any input aborts.
|
|
59
|
-
* `undefined` inputs are skipped, so a caller can pass an optional caller-signal
|
|
60
|
-
* alongside a required per-attempt one. Returns the sole signal when only one is
|
|
61
|
-
* present (no wrapper), or `undefined` when none are.
|
|
62
|
-
*
|
|
63
|
-
* Prefers the platform `AbortSignal.any`, which cleans up its listeners via weak
|
|
64
|
-
* refs — so merging onto a long-lived caller signal that's reused across many
|
|
65
|
-
* calls can't accumulate listeners. Falls back to a manual controller on older
|
|
66
|
-
* runtimes (< Node 20.3); there the listeners live until a source aborts or is
|
|
67
|
-
* garbage-collected, which is fine for the usual per-request signal.
|
|
68
|
-
*/
|
|
69
|
-
function combineAbortSignals(...signals) {
|
|
70
|
-
const present = signals.filter((s) => s != null);
|
|
71
|
-
if (present.length <= 1)
|
|
72
|
-
return present[0];
|
|
73
|
-
if (typeof AbortSignal.any === "function")
|
|
74
|
-
return AbortSignal.any(present);
|
|
75
|
-
const controller = new AbortController();
|
|
76
|
-
for (const signal of present) {
|
|
77
|
-
if (signal.aborted) {
|
|
78
|
-
controller.abort(signal.reason);
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
signal.addEventListener("abort", () => controller.abort(signal.reason), {
|
|
82
|
-
once: true,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return controller.signal;
|
|
86
|
-
}
|
|
87
|
-
const withTimeoutAndRetry = async (operation, timeoutMs = 60000, maxRetries = 3, operationName = "AI operation") => {
|
|
88
|
-
const createTimeoutOperation = () => async () => {
|
|
89
|
-
const controller = new AbortController();
|
|
90
|
-
const timeoutId = setTimeout(() => {
|
|
91
|
-
controller.abort();
|
|
92
|
-
}, timeoutMs);
|
|
93
|
-
try {
|
|
94
|
-
// Hand the operation the timeout signal so the in-flight upstream call is
|
|
95
|
-
// actually cancelled when the deadline fires — otherwise the abandoned
|
|
96
|
-
// attempt keeps running while the retry stacks a second concurrent call.
|
|
97
|
-
const result = await Promise.race([
|
|
98
|
-
operation(controller.signal),
|
|
99
|
-
new Promise((_, reject) => {
|
|
100
|
-
controller.signal.addEventListener("abort", () => {
|
|
101
|
-
reject(new Error(`Operation timed out after ${timeoutMs}ms`));
|
|
102
|
-
});
|
|
103
|
-
}),
|
|
104
|
-
]);
|
|
105
|
-
clearTimeout(timeoutId);
|
|
106
|
-
return result;
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
clearTimeout(timeoutId);
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
return retry({
|
|
114
|
-
operation: createTimeoutOperation(),
|
|
115
|
-
maxRetries,
|
|
116
|
-
delay: defaultBackoff,
|
|
117
|
-
onRetry: (attempt, error) => {
|
|
118
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
119
|
-
logger_1.logger.error(`[${operationName}] Failed attempt ${attempt + 1}:`, message);
|
|
120
|
-
const delay = defaultBackoff(attempt);
|
|
121
|
-
logger_1.logger.debug(`[${operationName}] Retrying in ${delay}ms...`);
|
|
122
|
-
logger_1.logger.debug(`[${operationName}] Attempt ${attempt + 2}/${maxRetries + 1}`);
|
|
123
|
-
},
|
|
124
|
-
onFailure: (_error) => {
|
|
125
|
-
logger_1.logger.error(`[${operationName}] All ${maxRetries + 1} attempts failed`);
|
|
126
|
-
return true;
|
|
127
|
-
},
|
|
128
|
-
});
|
|
129
|
-
};
|
|
130
|
-
exports.withTimeoutAndRetry = withTimeoutAndRetry;
|
|
131
|
-
/** Reject if `next` hasn't settled within `timeoutMs`; always clears its timer. */
|
|
132
|
-
function raceFirstChunk(next, timeoutMs, operationName) {
|
|
133
|
-
let timer;
|
|
134
|
-
const timeout = new Promise((_, reject) => {
|
|
135
|
-
timer = setTimeout(() => reject(new Error(`[${operationName}] Stream timed out: no first chunk within ${timeoutMs}ms`)), timeoutMs);
|
|
136
|
-
});
|
|
137
|
-
return Promise.race([next, timeout]).finally(() => clearTimeout(timer));
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Streaming analog of {@link withTimeoutAndRetry}. Re-runs an async-generator
|
|
141
|
-
* factory as long as it fails *before yielding its first chunk* — an empty
|
|
142
|
-
* completion that throws "No response", an error while establishing the stream,
|
|
143
|
-
* or (with `firstChunkTimeoutMs`) a stall before the first token. Once any chunk
|
|
144
|
-
* has been yielded the stream is committed and further errors propagate, so a
|
|
145
|
-
* retry can never double-emit deltas the consumer has already received.
|
|
146
|
-
*
|
|
147
|
-
* This mirrors the non-streaming path, where the provider throws on an empty
|
|
148
|
-
* completion inside `withTimeoutAndRetry` and is retried on the same model
|
|
149
|
-
* before the caller falls through to backup models.
|
|
150
|
-
*/
|
|
151
|
-
async function* withStreamRetry(factory, options = {}) {
|
|
152
|
-
const { maxRetries = 3, delay = defaultBackoff, operationName = "AI stream", firstChunkTimeoutMs, } = options;
|
|
153
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
154
|
-
// One controller per attempt: aborting it on abandon cancels the upstream
|
|
155
|
-
// SDK call so a retry can't stack a second concurrent stream.
|
|
156
|
-
const controller = new AbortController();
|
|
157
|
-
const iterator = factory(controller.signal);
|
|
158
|
-
let yielded = false;
|
|
159
|
-
let completed = false;
|
|
160
|
-
try {
|
|
161
|
-
// Drive the iterator by hand so the first chunk can be raced against a
|
|
162
|
-
// deadline; for-await would give no hook for that.
|
|
163
|
-
for (;;) {
|
|
164
|
-
const result = !yielded && firstChunkTimeoutMs
|
|
165
|
-
? await raceFirstChunk(iterator.next(), firstChunkTimeoutMs, operationName)
|
|
166
|
-
: await iterator.next();
|
|
167
|
-
if (result.done) {
|
|
168
|
-
completed = true;
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
yielded = true;
|
|
172
|
-
yield result.value;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
catch (error) {
|
|
176
|
-
// Can't retry once deltas are out, and don't retry past the budget.
|
|
177
|
-
if (yielded || attempt === maxRetries) {
|
|
178
|
-
throw error;
|
|
179
|
-
}
|
|
180
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
181
|
-
logger_1.logger.error(`[${operationName}] Failed attempt ${attempt + 1}:`, message);
|
|
182
|
-
const delayMs = delay(attempt);
|
|
183
|
-
logger_1.logger.debug(`[${operationName}] Retrying in ${delayMs}ms... (attempt ${attempt + 2}/${maxRetries + 1})`);
|
|
184
|
-
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
185
|
-
}
|
|
186
|
-
finally {
|
|
187
|
-
// Abandoning an attempt (first-chunk timeout, pre-yield error before a
|
|
188
|
-
// retry, or a consumer that breaks early): abort the upstream SDK call
|
|
189
|
-
// first so it's actually torn down — not left running while we retry —
|
|
190
|
-
// then dispose the iterator. Aborting also unblocks a stalled
|
|
191
|
-
// iterator.next() so return() can run the generator's cleanup. Both are
|
|
192
|
-
// fire-and-forget: a wedged generator's return() may never settle, so we
|
|
193
|
-
// must not await it.
|
|
194
|
-
if (!completed) {
|
|
195
|
-
controller.abort();
|
|
196
|
-
void iterator.return?.(undefined)?.catch(() => undefined);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=retry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/utils/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DirectiveBus — per-turn collection mechanism for directives emitted by
|
|
3
|
-
* hooks, tools, and branches.
|
|
4
|
-
*
|
|
5
|
-
* Two phases per turn:
|
|
6
|
-
* 1. Pre-LLM: collects from `prepare` hooks and `onEnter` hooks.
|
|
7
|
-
* 2. Post-LLM: collects from `finalize`, tools via `executeToolCalls`,
|
|
8
|
-
* branches via `evaluateBranches`.
|
|
9
|
-
*
|
|
10
|
-
* Each entry is stamped with an emitter ID for debug logging. At phase
|
|
11
|
-
* boundaries, the bus contents are merged using `flow.merge` and the
|
|
12
|
-
* result is returned via `drain()`.
|
|
13
|
-
*
|
|
14
|
-
* Algorithm 4: position precedence `abort > complete > goTo/goToStep > reset`,
|
|
15
|
-
* ties broken by emission order (last wins).
|
|
16
|
-
*
|
|
17
|
-
* **Validates: Requirements 1.3, 10.4, 10.5, 10.6**
|
|
18
|
-
*/
|
|
19
|
-
import type { Directive } from "../types/flow";
|
|
20
|
-
/** Phase of the turn pipeline the bus is currently collecting for. */
|
|
21
|
-
export type DirectiveBusPhase = "pre-llm" | "post-llm";
|
|
22
|
-
/** A single entry on the bus, stamped with its emitter for debug logging. */
|
|
23
|
-
export interface DirectiveBusEntry<TContext = unknown, TData = unknown> {
|
|
24
|
-
directive: Directive<TContext, TData>;
|
|
25
|
-
emitterId: string;
|
|
26
|
-
phase: DirectiveBusPhase;
|
|
27
|
-
/** Monotonically increasing emission index within the phase. */
|
|
28
|
-
order: number;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Per-turn directive collection bus.
|
|
32
|
-
*
|
|
33
|
-
* Usage:
|
|
34
|
-
* ```ts
|
|
35
|
-
* const bus = new DirectiveBus();
|
|
36
|
-
* bus.setPhase('pre-llm');
|
|
37
|
-
* bus.emit({ goTo: 'Booking' }, 'step.onEnter:ask_date');
|
|
38
|
-
* bus.emit({ appendPrompt: ['Be concise.'] }, 'step.prepare:ask_date');
|
|
39
|
-
* const merged = bus.drain(); // merges all collected directives
|
|
40
|
-
* bus.setPhase('post-llm');
|
|
41
|
-
* // ... collect post-LLM emissions ...
|
|
42
|
-
* const postMerged = bus.drain();
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
export declare class DirectiveBus<TContext = unknown, TData = unknown> {
|
|
46
|
-
private entries;
|
|
47
|
-
private currentPhase;
|
|
48
|
-
private orderCounter;
|
|
49
|
-
/** Set the current collection phase. Resets the order counter for the new phase. */
|
|
50
|
-
setPhase(phase: DirectiveBusPhase): void;
|
|
51
|
-
/** Get the current phase. */
|
|
52
|
-
getPhase(): DirectiveBusPhase;
|
|
53
|
-
/**
|
|
54
|
-
* Emit a directive onto the bus.
|
|
55
|
-
*
|
|
56
|
-
* @param directive - The directive to collect.
|
|
57
|
-
* @param emitterId - Human-readable identifier of the emitter (for debug logging).
|
|
58
|
-
*/
|
|
59
|
-
emit(directive: Directive<TContext, TData>, emitterId: string): void;
|
|
60
|
-
/**
|
|
61
|
-
* Drain the bus: merge all collected directives for the current phase
|
|
62
|
-
* using Algorithm 4 (position precedence, last-wins tie-breaking,
|
|
63
|
-
* shallow-merge for state writes).
|
|
64
|
-
*
|
|
65
|
-
* Returns `undefined` if no directives were collected.
|
|
66
|
-
* After draining, the entries for the current phase are cleared.
|
|
67
|
-
*/
|
|
68
|
-
drain(): Directive<TContext, TData> | undefined;
|
|
69
|
-
/**
|
|
70
|
-
* Drain ALL entries regardless of phase. Used for final turn cleanup.
|
|
71
|
-
* Returns `undefined` if no directives were collected.
|
|
72
|
-
*/
|
|
73
|
-
drainAll(): Directive<TContext, TData> | undefined;
|
|
74
|
-
/** Clear all collected entries and reset the bus for a new turn. */
|
|
75
|
-
clear(): void;
|
|
76
|
-
/** Get the number of entries currently on the bus. */
|
|
77
|
-
get size(): number;
|
|
78
|
-
/** Get all entries (for inspection/testing). */
|
|
79
|
-
getEntries(): ReadonlyArray<DirectiveBusEntry<TContext, TData>>;
|
|
80
|
-
/** Check if the bus has any entries for the current phase. */
|
|
81
|
-
hasEntries(): boolean;
|
|
82
|
-
/**
|
|
83
|
-
* Log debug-level conflict warnings when multiple emitters set position
|
|
84
|
-
* fields or reply fields in the same phase.
|
|
85
|
-
*/
|
|
86
|
-
private logConflicts;
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=DirectiveBus.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DirectiveBus.d.ts","sourceRoot":"","sources":["../../src/core/DirectiveBus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI/C,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEvD,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO;IAClE,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;IACzB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY,CAAC,QAAQ,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO;IACzD,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,YAAY,CAAK;IAEzB,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAMxC,6BAA6B;IAC7B,QAAQ,IAAI,iBAAiB;IAI7B;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAyBpE;;;;;;;OAOG;IACH,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,SAAS;IA4D/C;;;OAGG;IACH,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,SAAS;IAgBlD,oEAAoE;IACpE,KAAK,IAAI,IAAI;IAMb,sDAAsD;IACtD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,gDAAgD;IAChD,UAAU,IAAI,aAAa,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAI/D,8DAA8D;IAC9D,UAAU,IAAI,OAAO;IAMrB;;;OAGG;IACH,OAAO,CAAC,YAAY;CAiCvB"}
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DirectiveBus — per-turn collection mechanism for directives emitted by
|
|
3
|
-
* hooks, tools, and branches.
|
|
4
|
-
*
|
|
5
|
-
* Two phases per turn:
|
|
6
|
-
* 1. Pre-LLM: collects from `prepare` hooks and `onEnter` hooks.
|
|
7
|
-
* 2. Post-LLM: collects from `finalize`, tools via `executeToolCalls`,
|
|
8
|
-
* branches via `evaluateBranches`.
|
|
9
|
-
*
|
|
10
|
-
* Each entry is stamped with an emitter ID for debug logging. At phase
|
|
11
|
-
* boundaries, the bus contents are merged using `flow.merge` and the
|
|
12
|
-
* result is returned via `drain()`.
|
|
13
|
-
*
|
|
14
|
-
* Algorithm 4: position precedence `abort > complete > goTo/goToStep > reset`,
|
|
15
|
-
* ties broken by emission order (last wins).
|
|
16
|
-
*
|
|
17
|
-
* **Validates: Requirements 1.3, 10.4, 10.5, 10.6**
|
|
18
|
-
*/
|
|
19
|
-
import { flow } from "./flow-namespace";
|
|
20
|
-
import { logger } from "../utils";
|
|
21
|
-
/**
|
|
22
|
-
* Per-turn directive collection bus.
|
|
23
|
-
*
|
|
24
|
-
* Usage:
|
|
25
|
-
* ```ts
|
|
26
|
-
* const bus = new DirectiveBus();
|
|
27
|
-
* bus.setPhase('pre-llm');
|
|
28
|
-
* bus.emit({ goTo: 'Booking' }, 'step.onEnter:ask_date');
|
|
29
|
-
* bus.emit({ appendPrompt: ['Be concise.'] }, 'step.prepare:ask_date');
|
|
30
|
-
* const merged = bus.drain(); // merges all collected directives
|
|
31
|
-
* bus.setPhase('post-llm');
|
|
32
|
-
* // ... collect post-LLM emissions ...
|
|
33
|
-
* const postMerged = bus.drain();
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export class DirectiveBus {
|
|
37
|
-
constructor() {
|
|
38
|
-
this.entries = [];
|
|
39
|
-
this.currentPhase = "pre-llm";
|
|
40
|
-
this.orderCounter = 0;
|
|
41
|
-
}
|
|
42
|
-
/** Set the current collection phase. Resets the order counter for the new phase. */
|
|
43
|
-
setPhase(phase) {
|
|
44
|
-
this.currentPhase = phase;
|
|
45
|
-
// Order counter is NOT reset — emission order is global within the turn
|
|
46
|
-
// so that cross-phase comparisons (if ever needed) remain consistent.
|
|
47
|
-
}
|
|
48
|
-
/** Get the current phase. */
|
|
49
|
-
getPhase() {
|
|
50
|
-
return this.currentPhase;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Emit a directive onto the bus.
|
|
54
|
-
*
|
|
55
|
-
* @param directive - The directive to collect.
|
|
56
|
-
* @param emitterId - Human-readable identifier of the emitter (for debug logging).
|
|
57
|
-
*/
|
|
58
|
-
emit(directive, emitterId) {
|
|
59
|
-
if (!directive || typeof directive !== "object" || Array.isArray(directive)) {
|
|
60
|
-
return; // Silently ignore non-object values (void returns from hooks)
|
|
61
|
-
}
|
|
62
|
-
// Check if the directive has any meaningful fields set
|
|
63
|
-
const hasFields = Object.keys(directive).some((k) => directive[k] !== undefined);
|
|
64
|
-
if (!hasFields) {
|
|
65
|
-
return; // Empty directive — nothing to collect
|
|
66
|
-
}
|
|
67
|
-
this.entries.push({
|
|
68
|
-
directive,
|
|
69
|
-
emitterId,
|
|
70
|
-
phase: this.currentPhase,
|
|
71
|
-
order: this.orderCounter++,
|
|
72
|
-
});
|
|
73
|
-
logger.debug(`[DirectiveBus] Collected directive from "${emitterId}" (phase=${this.currentPhase}, order=${this.orderCounter - 1})`);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Drain the bus: merge all collected directives for the current phase
|
|
77
|
-
* using Algorithm 4 (position precedence, last-wins tie-breaking,
|
|
78
|
-
* shallow-merge for state writes).
|
|
79
|
-
*
|
|
80
|
-
* Returns `undefined` if no directives were collected.
|
|
81
|
-
* After draining, the entries for the current phase are cleared.
|
|
82
|
-
*/
|
|
83
|
-
drain() {
|
|
84
|
-
const phaseEntries = this.entries.filter((e) => e.phase === this.currentPhase);
|
|
85
|
-
if (phaseEntries.length === 0) {
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
// Log conflicts when multiple emitters set position or reply fields
|
|
89
|
-
this.logConflicts(phaseEntries);
|
|
90
|
-
// Merge all directives in emission order using flow.merge (pairwise reduction).
|
|
91
|
-
// flow.merge implements Algorithm 4: position precedence with last-wins tie-breaking.
|
|
92
|
-
let merged = phaseEntries[0].directive;
|
|
93
|
-
for (let i = 1; i < phaseEntries.length; i++) {
|
|
94
|
-
merged = flow.merge(merged, phaseEntries[i].directive);
|
|
95
|
-
}
|
|
96
|
-
// Strip pre-LLM-only fields from post-LLM phase emissions
|
|
97
|
-
if (this.currentPhase === "post-llm") {
|
|
98
|
-
const asAny = merged;
|
|
99
|
-
const preLlmFields = ["appendPrompt", "injectTools", "halt"];
|
|
100
|
-
// Identify which fields are present BEFORE stripping (the merge may
|
|
101
|
-
// alias phaseEntries[0].directive when there is a single emitter, so
|
|
102
|
-
// we must collect emitter names first).
|
|
103
|
-
const droppedFields = [];
|
|
104
|
-
for (const f of preLlmFields) {
|
|
105
|
-
if (asAny[f] !== undefined) {
|
|
106
|
-
droppedFields.push(f);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
if (droppedFields.length > 0) {
|
|
110
|
-
// Identify emitters that contributed the dropped fields.
|
|
111
|
-
const emitters = phaseEntries
|
|
112
|
-
.filter((e) => {
|
|
113
|
-
const d = e.directive;
|
|
114
|
-
return droppedFields.some((f) => d[f] !== undefined);
|
|
115
|
-
})
|
|
116
|
-
.map((e) => e.emitterId);
|
|
117
|
-
// Now strip the fields from the merged result.
|
|
118
|
-
for (const f of droppedFields) {
|
|
119
|
-
delete asAny[f];
|
|
120
|
-
}
|
|
121
|
-
logger.debug(`[DirectiveBus] Dropped pre-LLM-only fields [${droppedFields.join(", ")}] from post-LLM emitters: ${emitters.join(", ")}`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Clear entries for the drained phase
|
|
125
|
-
this.entries = this.entries.filter((e) => e.phase !== this.currentPhase);
|
|
126
|
-
return merged;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Drain ALL entries regardless of phase. Used for final turn cleanup.
|
|
130
|
-
* Returns `undefined` if no directives were collected.
|
|
131
|
-
*/
|
|
132
|
-
drainAll() {
|
|
133
|
-
if (this.entries.length === 0) {
|
|
134
|
-
return undefined;
|
|
135
|
-
}
|
|
136
|
-
this.logConflicts(this.entries);
|
|
137
|
-
let merged = this.entries[0].directive;
|
|
138
|
-
for (let i = 1; i < this.entries.length; i++) {
|
|
139
|
-
merged = flow.merge(merged, this.entries[i].directive);
|
|
140
|
-
}
|
|
141
|
-
this.entries = [];
|
|
142
|
-
return merged;
|
|
143
|
-
}
|
|
144
|
-
/** Clear all collected entries and reset the bus for a new turn. */
|
|
145
|
-
clear() {
|
|
146
|
-
this.entries = [];
|
|
147
|
-
this.orderCounter = 0;
|
|
148
|
-
this.currentPhase = "pre-llm";
|
|
149
|
-
}
|
|
150
|
-
/** Get the number of entries currently on the bus. */
|
|
151
|
-
get size() {
|
|
152
|
-
return this.entries.length;
|
|
153
|
-
}
|
|
154
|
-
/** Get all entries (for inspection/testing). */
|
|
155
|
-
getEntries() {
|
|
156
|
-
return this.entries;
|
|
157
|
-
}
|
|
158
|
-
/** Check if the bus has any entries for the current phase. */
|
|
159
|
-
hasEntries() {
|
|
160
|
-
return this.entries.some((e) => e.phase === this.currentPhase);
|
|
161
|
-
}
|
|
162
|
-
// ─── Private helpers ─────────────────────────────────────────────────────
|
|
163
|
-
/**
|
|
164
|
-
* Log debug-level conflict warnings when multiple emitters set position
|
|
165
|
-
* fields or reply fields in the same phase.
|
|
166
|
-
*/
|
|
167
|
-
logConflicts(entries) {
|
|
168
|
-
// Check for position field conflicts
|
|
169
|
-
const positionEmitters = [];
|
|
170
|
-
for (const entry of entries) {
|
|
171
|
-
const d = entry.directive;
|
|
172
|
-
for (const field of ["abort", "complete", "goTo", "goToStep", "reset"]) {
|
|
173
|
-
if (d[field] !== undefined) {
|
|
174
|
-
positionEmitters.push({ emitterId: entry.emitterId, field });
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (positionEmitters.length > 1) {
|
|
179
|
-
const details = positionEmitters
|
|
180
|
-
.map((e) => `${e.emitterId}(${e.field})`)
|
|
181
|
-
.join(", ");
|
|
182
|
-
logger.debug(`[DirectiveBus] Multiple position fields in one turn — conflict resolution applied. Emitters: ${details}`);
|
|
183
|
-
}
|
|
184
|
-
// Check for reply conflicts
|
|
185
|
-
const replyEmitters = entries.filter((e) => e.directive.reply !== undefined);
|
|
186
|
-
if (replyEmitters.length > 1) {
|
|
187
|
-
const emitterIds = replyEmitters.map((e) => e.emitterId).join(", ");
|
|
188
|
-
logger.debug(`[DirectiveBus] Multiple reply fields in one turn — using last emission. Emitters: ${emitterIds}`);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
//# sourceMappingURL=DirectiveBus.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DirectiveBus.js","sourceRoot":"","sources":["../../src/core/DirectiveBus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared provider error utilities: classification of SDK/HTTP errors onto
|
|
3
|
-
* normalized ProviderErrorCode values, backup-model eligibility, and
|
|
4
|
-
* wrapping of terminal failures in ProviderError.
|
|
5
|
-
*
|
|
6
|
-
* The classification is derived once and reused for both backup-model
|
|
7
|
-
* decisions and final error wrapping, so the two can never drift apart.
|
|
8
|
-
*/
|
|
9
|
-
import { ProviderError, type ProviderErrorCode } from "../types/errors";
|
|
10
|
-
/**
|
|
11
|
-
* Shape of errors with status/code properties thrown by provider SDKs
|
|
12
|
-
*/
|
|
13
|
-
export interface ErrorWithStatus {
|
|
14
|
-
status?: number;
|
|
15
|
-
code?: string;
|
|
16
|
-
message?: string;
|
|
17
|
-
type?: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Type guard to check if error is ErrorWithStatus
|
|
21
|
-
*/
|
|
22
|
-
export declare function isErrorWithStatus(error: unknown): error is ErrorWithStatus;
|
|
23
|
-
/**
|
|
24
|
-
* Safely extract error message
|
|
25
|
-
*/
|
|
26
|
-
export declare function getErrorMessage(error: unknown): string;
|
|
27
|
-
/**
|
|
28
|
-
* Provider-specific signals treated as "overloaded/unavailable", in
|
|
29
|
-
* addition to the shared defaults (HTTP 500/503 and the common message
|
|
30
|
-
* substrings below).
|
|
31
|
-
*/
|
|
32
|
-
export interface ErrorClassificationOptions {
|
|
33
|
-
/** Extra HTTP statuses treated as overloaded (e.g. Anthropic's 529) */
|
|
34
|
-
overloadedStatuses?: readonly number[];
|
|
35
|
-
/** Error `code` values treated as overloaded/unavailable (e.g. "model_not_found") */
|
|
36
|
-
overloadedCodes?: readonly string[];
|
|
37
|
-
/** Error `type` values treated as overloaded (e.g. Anthropic's "overloaded_error") */
|
|
38
|
-
overloadedTypes?: readonly string[];
|
|
39
|
-
/** Extra message substrings treated as overloaded (e.g. OpenRouter's "capacity") */
|
|
40
|
-
overloadedMessages?: readonly string[];
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Classify an unknown error into a normalized ProviderErrorCode.
|
|
44
|
-
*
|
|
45
|
-
* Overload/availability checks run first so that backup-model decisions
|
|
46
|
-
* (rate_limited/overloaded) match the historical shouldUseBackupModel
|
|
47
|
-
* predicate exactly.
|
|
48
|
-
*/
|
|
49
|
-
export declare function classifyProviderError(error: unknown, options?: ErrorClassificationOptions): ProviderErrorCode;
|
|
50
|
-
/**
|
|
51
|
-
* Whether an error code qualifies for trying backup models.
|
|
52
|
-
* Mirrors the historical shouldUseBackupModel predicate.
|
|
53
|
-
*/
|
|
54
|
-
export declare function isBackupEligible(code: ProviderErrorCode): boolean;
|
|
55
|
-
/**
|
|
56
|
-
* Wrap a terminal failure (after retries/backup exhaustion) in a
|
|
57
|
-
* normalized ProviderError, preserving the original error as `cause`.
|
|
58
|
-
* Already-wrapped errors pass through untouched.
|
|
59
|
-
*/
|
|
60
|
-
export declare function toProviderError(error: unknown, provider: string, options?: ErrorClassificationOptions): ProviderError;
|
|
61
|
-
//# sourceMappingURL=errorClassification.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errorClassification.d.ts","sourceRoot":"","sources":["../../src/providers/errorClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAM1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQtD;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,qFAAqF;IACrF,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,sFAAsF;IACtF,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAaD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,0BAA+B,GACvC,iBAAiB,CA4DnB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,0BAA0B,GACnC,aAAa,CAUf"}
|