@falai/agent 2.6.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/adapters/MemoryAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryAdapter.js +32 -36
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.d.ts +1 -1
- package/dist/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +3 -3
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +18 -13
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter.js +3 -3
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.d.ts +2 -1
- package/dist/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/adapters/RedisAdapter.js +77 -27
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +9 -31
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +13 -13
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/sessionRow.d.ts +22 -0
- package/dist/adapters/sessionRow.d.ts.map +1 -0
- package/dist/adapters/sessionRow.js +48 -0
- package/dist/adapters/sessionRow.js.map +1 -0
- package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +39 -43
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +4 -4
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +6 -6
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +20 -15
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +7 -7
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +2 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +81 -31
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +11 -33
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/index.d.ts +13 -13
- package/dist/cjs/adapters/index.d.ts.map +1 -1
- package/dist/cjs/adapters/index.js +14 -14
- package/dist/cjs/adapters/index.js.map +1 -1
- package/dist/cjs/adapters/sessionRow.d.ts +22 -0
- package/dist/cjs/adapters/sessionRow.d.ts.map +1 -0
- package/dist/cjs/adapters/sessionRow.js +52 -0
- package/dist/cjs/adapters/sessionRow.js.map +1 -0
- package/dist/cjs/core/Agent.d.ts +19 -11
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +102 -64
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts +12 -22
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.js +46 -49
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -1
- package/dist/cjs/core/BranchEvaluator.d.ts +4 -4
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/BranchEvaluator.js +6 -6
- package/dist/cjs/core/BranchEvaluator.js.map +1 -1
- package/dist/cjs/core/CompactionEngine.d.ts +16 -3
- package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
- package/dist/cjs/core/CompactionEngine.js +30 -6
- package/dist/cjs/core/CompactionEngine.js.map +1 -1
- package/dist/cjs/core/DirectiveChainTracker.d.ts +1 -1
- package/dist/cjs/core/DirectiveChainTracker.d.ts.map +1 -1
- package/dist/cjs/core/DirectiveChainTracker.js +5 -5
- package/dist/cjs/core/DirectiveChainTracker.js.map +1 -1
- package/dist/cjs/core/Events.d.ts +1 -1
- package/dist/cjs/core/Events.d.ts.map +1 -1
- package/dist/cjs/core/Events.js +15 -15
- package/dist/cjs/core/Events.js.map +1 -1
- package/dist/cjs/core/Flow.d.ts +4 -4
- package/dist/cjs/core/Flow.d.ts.map +1 -1
- package/dist/cjs/core/Flow.js +15 -15
- package/dist/cjs/core/Flow.js.map +1 -1
- package/dist/cjs/core/FlowRouter.d.ts +4 -4
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -1
- package/dist/cjs/core/FlowRouter.js +92 -70
- package/dist/cjs/core/FlowRouter.js.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +10 -10
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts +4 -4
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +13 -13
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +2 -2
- package/dist/cjs/core/PromptSectionCache.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +4 -4
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +7 -7
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseGenerationError.d.ts.map +1 -1
- package/dist/cjs/core/ResponseGenerationError.js +3 -5
- package/dist/cjs/core/ResponseGenerationError.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts +39 -10
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +195 -72
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +50 -12
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +301 -158
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SessionFinalizer.d.ts +4 -4
- package/dist/cjs/core/SessionFinalizer.d.ts.map +1 -1
- package/dist/cjs/core/SessionFinalizer.js +36 -9
- package/dist/cjs/core/SessionFinalizer.js.map +1 -1
- package/dist/cjs/core/SessionManager.d.ts +15 -6
- package/dist/cjs/core/SessionManager.d.ts.map +1 -1
- package/dist/cjs/core/SessionManager.js +49 -22
- package/dist/cjs/core/SessionManager.js.map +1 -1
- package/dist/cjs/core/SignalCoordinator.d.ts +5 -5
- package/dist/cjs/core/SignalCoordinator.d.ts.map +1 -1
- package/dist/cjs/core/SignalCoordinator.js +12 -12
- package/dist/cjs/core/SignalCoordinator.js.map +1 -1
- package/dist/cjs/core/SignalEvaluator.d.ts +4 -4
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/SignalEvaluator.js +6 -6
- package/dist/cjs/core/SignalEvaluator.js.map +1 -1
- package/dist/cjs/core/SignalProcessor.d.ts +6 -6
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -1
- package/dist/cjs/core/SignalProcessor.js +17 -89
- package/dist/cjs/core/SignalProcessor.js.map +1 -1
- package/dist/cjs/core/Step.d.ts +5 -5
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +65 -17
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StepLifecycle.d.ts +18 -8
- package/dist/cjs/core/StepLifecycle.d.ts.map +1 -1
- package/dist/cjs/core/StepLifecycle.js +103 -20
- package/dist/cjs/core/StepLifecycle.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.js +30 -6
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -1
- package/dist/cjs/core/ToolLoopExecutor.d.ts +8 -4
- package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -1
- package/dist/cjs/core/ToolLoopExecutor.js +189 -97
- package/dist/cjs/core/ToolLoopExecutor.js.map +1 -1
- package/dist/cjs/core/ToolManager.d.ts +6 -6
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +102 -79
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/core/createAgent.d.ts +2 -2
- package/dist/cjs/core/createAgent.d.ts.map +1 -1
- package/dist/cjs/core/createAgent.js +2 -2
- package/dist/cjs/core/createAgent.js.map +1 -1
- package/dist/cjs/core/flow-namespace.d.ts +16 -1
- package/dist/cjs/core/flow-namespace.d.ts.map +1 -1
- package/dist/cjs/core/flow-namespace.js +26 -4
- package/dist/cjs/core/flow-namespace.js.map +1 -1
- package/dist/cjs/core/toolGates.d.ts +1 -1
- package/dist/cjs/core/toolGates.d.ts.map +1 -1
- package/dist/cjs/core/toolGates.js +3 -3
- package/dist/cjs/core/toolGates.js.map +1 -1
- package/dist/cjs/index.d.ts +50 -45
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +96 -88
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +25 -35
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +30 -426
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.d.ts +13 -34
- package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.js +17 -51
- package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +22 -75
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +32 -558
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +14 -20
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +26 -135
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.js +40 -496
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +14 -20
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +21 -28
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts +20 -24
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +22 -38
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts +94 -0
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -0
- package/dist/cjs/providers/ProviderAdapter.js +257 -0
- package/dist/cjs/providers/ProviderAdapter.js.map +1 -0
- package/dist/cjs/providers/index.d.ts +21 -18
- package/dist/cjs/providers/index.d.ts.map +1 -1
- package/dist/cjs/providers/index.js +23 -21
- package/dist/cjs/providers/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +37 -11
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/ai.d.ts +11 -21
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/compaction.d.ts +2 -2
- package/dist/cjs/types/compaction.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +16 -20
- package/dist/cjs/types/errors.d.ts.map +1 -1
- package/dist/cjs/types/errors.js +17 -18
- package/dist/cjs/types/errors.js.map +1 -1
- package/dist/cjs/types/flow.d.ts +56 -39
- package/dist/cjs/types/flow.d.ts.map +1 -1
- package/dist/cjs/types/history.d.ts +1 -1
- package/dist/cjs/types/history.d.ts.map +1 -1
- package/dist/cjs/types/index.d.ts +17 -17
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +14 -14
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +2 -2
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +4 -4
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +3 -3
- package/dist/cjs/types/signals.d.ts.map +1 -1
- package/dist/cjs/types/template.d.ts +2 -2
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +4 -2
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/types/tool.js.map +1 -1
- package/dist/cjs/utils/condition.d.ts +1 -1
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js +6 -6
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/event.d.ts +1 -1
- package/dist/cjs/utils/event.d.ts.map +1 -1
- package/dist/cjs/utils/event.js +2 -2
- package/dist/cjs/utils/event.js.map +1 -1
- package/dist/cjs/utils/history.d.ts +2 -2
- package/dist/cjs/utils/history.d.ts.map +1 -1
- package/dist/cjs/utils/history.js +15 -15
- package/dist/cjs/utils/history.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +11 -13
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +57 -58
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/serialize.d.ts +17 -0
- package/dist/cjs/utils/serialize.d.ts.map +1 -1
- package/dist/cjs/utils/serialize.js +33 -0
- package/dist/cjs/utils/serialize.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +23 -3
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +40 -8
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/cjs/utils/template.d.ts +3 -3
- package/dist/cjs/utils/template.d.ts.map +1 -1
- package/dist/cjs/utils/template.js +5 -5
- package/dist/cjs/utils/template.js.map +1 -1
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -1
- package/dist/core/Agent.d.ts +19 -11
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +53 -15
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts +12 -22
- package/dist/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/core/AutoChainExecutor.js +27 -30
- package/dist/core/AutoChainExecutor.js.map +1 -1
- package/dist/core/BranchEvaluator.d.ts +4 -4
- package/dist/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/core/BranchEvaluator.js +2 -2
- package/dist/core/BranchEvaluator.js.map +1 -1
- package/dist/core/CompactionEngine.d.ts +16 -3
- package/dist/core/CompactionEngine.d.ts.map +1 -1
- package/dist/core/CompactionEngine.js +30 -6
- package/dist/core/CompactionEngine.js.map +1 -1
- package/dist/core/DirectiveChainTracker.d.ts +1 -1
- package/dist/core/DirectiveChainTracker.d.ts.map +1 -1
- package/dist/core/DirectiveChainTracker.js +2 -2
- package/dist/core/DirectiveChainTracker.js.map +1 -1
- package/dist/core/Events.d.ts +1 -1
- package/dist/core/Events.d.ts.map +1 -1
- package/dist/core/Events.js +1 -1
- package/dist/core/Events.js.map +1 -1
- package/dist/core/Flow.d.ts +4 -4
- package/dist/core/Flow.d.ts.map +1 -1
- package/dist/core/Flow.js +3 -3
- package/dist/core/Flow.js.map +1 -1
- package/dist/core/FlowRouter.d.ts +4 -4
- package/dist/core/FlowRouter.d.ts.map +1 -1
- package/dist/core/FlowRouter.js +36 -14
- package/dist/core/FlowRouter.js.map +1 -1
- package/dist/core/PersistenceManager.d.ts +1 -1
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +3 -3
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts +4 -4
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +3 -3
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +2 -2
- package/dist/core/PromptSectionCache.d.ts.map +1 -1
- package/dist/core/ResponseEngine.d.ts +4 -4
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +2 -2
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseGenerationError.d.ts.map +1 -1
- package/dist/core/ResponseGenerationError.js +3 -5
- package/dist/core/ResponseGenerationError.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +39 -10
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +152 -29
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +50 -12
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +232 -89
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SessionFinalizer.d.ts +4 -4
- package/dist/core/SessionFinalizer.d.ts.map +1 -1
- package/dist/core/SessionFinalizer.js +32 -5
- package/dist/core/SessionFinalizer.js.map +1 -1
- package/dist/core/SessionManager.d.ts +15 -6
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +46 -19
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/SignalCoordinator.d.ts +5 -5
- package/dist/core/SignalCoordinator.d.ts.map +1 -1
- package/dist/core/SignalCoordinator.js +2 -2
- package/dist/core/SignalCoordinator.js.map +1 -1
- package/dist/core/SignalEvaluator.d.ts +4 -4
- package/dist/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/core/SignalEvaluator.js +2 -2
- package/dist/core/SignalEvaluator.js.map +1 -1
- package/dist/core/SignalProcessor.d.ts +6 -6
- package/dist/core/SignalProcessor.d.ts.map +1 -1
- package/dist/core/SignalProcessor.js +7 -79
- package/dist/core/SignalProcessor.js.map +1 -1
- package/dist/core/Step.d.ts +5 -5
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +53 -5
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StepLifecycle.d.ts +18 -8
- package/dist/core/StepLifecycle.d.ts.map +1 -1
- package/dist/core/StepLifecycle.js +98 -15
- package/dist/core/StepLifecycle.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +1 -1
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/core/StreamingToolExecutor.js +29 -5
- package/dist/core/StreamingToolExecutor.js.map +1 -1
- package/dist/core/ToolLoopExecutor.d.ts +8 -4
- package/dist/core/ToolLoopExecutor.d.ts.map +1 -1
- package/dist/core/ToolLoopExecutor.js +157 -65
- package/dist/core/ToolLoopExecutor.js.map +1 -1
- package/dist/core/ToolManager.d.ts +6 -6
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +44 -21
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/core/createAgent.d.ts +2 -2
- package/dist/core/createAgent.d.ts.map +1 -1
- package/dist/core/createAgent.js +1 -1
- package/dist/core/createAgent.js.map +1 -1
- package/dist/core/flow-namespace.d.ts +16 -1
- package/dist/core/flow-namespace.d.ts.map +1 -1
- package/dist/core/flow-namespace.js +23 -1
- package/dist/core/flow-namespace.js.map +1 -1
- package/dist/core/toolGates.d.ts +1 -1
- package/dist/core/toolGates.d.ts.map +1 -1
- package/dist/core/toolGates.js +1 -1
- package/dist/core/toolGates.js.map +1 -1
- package/dist/index.d.ts +50 -45
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -30
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +25 -35
- package/dist/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/AnthropicProvider.js +30 -423
- package/dist/providers/AnthropicProvider.js.map +1 -1
- package/dist/providers/DeepSeekProvider.d.ts +13 -34
- package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/DeepSeekProvider.js +16 -47
- package/dist/providers/DeepSeekProvider.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +22 -75
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +32 -558
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/GenericOpenAICompatibleProvider.d.ts +9 -10
- package/dist/providers/GenericOpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/GenericOpenAICompatibleProvider.js +13 -16
- package/dist/providers/GenericOpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.d.ts +26 -135
- package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.js +39 -495
- package/dist/providers/OpenAICompatibleProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts +14 -20
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +20 -24
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +20 -24
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +21 -34
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/providers/ProviderAdapter.d.ts +94 -0
- package/dist/providers/ProviderAdapter.d.ts.map +1 -0
- package/dist/providers/ProviderAdapter.js +251 -0
- package/dist/providers/ProviderAdapter.js.map +1 -0
- package/dist/providers/index.d.ts +21 -18
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +13 -10
- package/dist/providers/index.js.map +1 -1
- package/dist/types/agent.d.ts +37 -11
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/ai.d.ts +11 -21
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/compaction.d.ts +2 -2
- package/dist/types/compaction.d.ts.map +1 -1
- package/dist/types/errors.d.ts +16 -20
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +15 -16
- package/dist/types/errors.js.map +1 -1
- package/dist/types/flow.d.ts +56 -39
- package/dist/types/flow.d.ts.map +1 -1
- package/dist/types/history.d.ts +1 -1
- package/dist/types/history.d.ts.map +1 -1
- package/dist/types/index.d.ts +17 -17
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -4
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +2 -2
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/session.d.ts +4 -4
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +3 -3
- package/dist/types/signals.d.ts.map +1 -1
- package/dist/types/template.d.ts +2 -2
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +4 -2
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/condition.d.ts +1 -1
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js +2 -2
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/event.d.ts +1 -1
- package/dist/utils/event.d.ts.map +1 -1
- package/dist/utils/event.js +1 -1
- package/dist/utils/event.js.map +1 -1
- package/dist/utils/history.d.ts +2 -2
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/history.js +1 -1
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/index.d.ts +11 -13
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +11 -12
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/serialize.d.ts +17 -0
- package/dist/utils/serialize.d.ts.map +1 -1
- package/dist/utils/serialize.js +31 -0
- package/dist/utils/serialize.js.map +1 -1
- package/dist/utils/session.d.ts +23 -3
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +35 -6
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/template.d.ts +3 -3
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +1 -1
- package/dist/utils/template.js.map +1 -1
- package/docs/concepts/architecture.md +3 -3
- package/docs/concepts/directives.md +1 -1
- package/docs/guides/error-handling.md +46 -45
- package/docs/guides/flow-control.md +8 -1
- package/docs/guides/instructions.md +15 -6
- package/docs/guides/persistence.md +12 -5
- package/docs/guides/streaming.md +10 -0
- package/docs/migration/README.md +4 -0
- package/docs/migration/v2-3-to-v2-4.md +4 -0
- package/docs/migration/v2-6-to-v2-7.md +246 -0
- package/docs/reference/adapters.md +15 -1
- package/docs/reference/branches.md +2 -0
- package/docs/reference/create-agent.md +28 -0
- package/docs/reference/directive.md +1 -1
- package/docs/reference/errors.md +30 -32
- package/docs/reference/providers.md +63 -60
- package/docs/reference/step.md +28 -21
- package/docs/reference/tool.md +14 -5
- package/docs/start/02-first-agent.md +8 -4
- package/docs/start/03-collect-data.md +19 -10
- package/examples/01-quickstart.ts +2 -2
- package/examples/02-data-extraction.ts +1 -1
- package/examples/03-tools.ts +1 -1
- package/examples/04-instructions.ts +2 -2
- package/examples/05-branching.ts +3 -3
- package/examples/06-flow-control.ts +3 -3
- package/examples/07-streaming.ts +1 -1
- package/examples/08-persistence.ts +2 -2
- package/examples/09-signals.ts +1 -1
- package/examples/tsconfig.json +6 -3
- package/package.json +9 -7
- package/src/adapters/MemoryAdapter.ts +33 -37
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +4 -4
- package/src/adapters/PostgreSQLAdapter.ts +26 -21
- package/src/adapters/PrismaAdapter.ts +4 -4
- package/src/adapters/RedisAdapter.ts +84 -37
- package/src/adapters/SQLiteAdapter.ts +13 -34
- package/src/adapters/index.ts +13 -13
- package/src/adapters/sessionRow.ts +57 -0
- package/src/core/Agent.ts +64 -18
- package/src/core/AutoChainExecutor.ts +44 -57
- package/src/core/BranchEvaluator.ts +5 -5
- package/src/core/CompactionEngine.ts +42 -8
- package/src/core/DirectiveChainTracker.ts +3 -3
- package/src/core/Events.ts +2 -2
- package/src/core/Flow.ts +9 -9
- package/src/core/FlowRouter.ts +46 -20
- package/src/core/PersistenceManager.ts +4 -4
- package/src/core/PromptComposer.ts +8 -8
- package/src/core/PromptSectionCache.ts +2 -2
- package/src/core/ResponseEngine.ts +6 -6
- package/src/core/ResponseGenerationError.ts +3 -6
- package/src/core/ResponseModal.ts +205 -39
- package/src/core/ResponsePipeline.ts +301 -107
- package/src/core/SessionFinalizer.ts +40 -10
- package/src/core/SessionManager.ts +61 -27
- package/src/core/SignalCoordinator.ts +7 -7
- package/src/core/SignalEvaluator.ts +6 -6
- package/src/core/SignalProcessor.ts +13 -93
- package/src/core/Step.ts +87 -10
- package/src/core/StepLifecycle.ts +129 -26
- package/src/core/StreamingToolExecutor.ts +33 -8
- package/src/core/ToolLoopExecutor.ts +206 -80
- package/src/core/ToolManager.ts +53 -26
- package/src/core/createAgent.ts +2 -2
- package/src/core/flow-namespace.ts +31 -2
- package/src/core/toolGates.ts +2 -2
- package/src/index.ts +59 -45
- package/src/providers/AnthropicProvider.ts +44 -595
- package/src/providers/DeepSeekProvider.ts +27 -92
- package/src/providers/GeminiProvider.ts +41 -752
- package/src/providers/GenericOpenAICompatibleProvider.ts +19 -27
- package/src/providers/OpenAICompatibleProvider.ts +58 -764
- package/src/providers/OpenAIProvider.ts +31 -55
- package/src/providers/OpenRouterProvider.ts +40 -70
- package/src/providers/ProviderAdapter.ts +368 -0
- package/src/providers/index.ts +21 -23
- package/src/types/agent.ts +36 -11
- package/src/types/ai.ts +11 -21
- package/src/types/compaction.ts +2 -2
- package/src/types/errors.ts +17 -35
- package/src/types/flow.ts +44 -46
- package/src/types/history.ts +1 -1
- package/src/types/index.ts +18 -17
- package/src/types/persistence.ts +2 -2
- package/src/types/session.ts +4 -4
- package/src/types/signals.ts +3 -3
- package/src/types/template.ts +2 -2
- package/src/types/tool.ts +4 -2
- package/src/utils/condition.ts +3 -3
- package/src/utils/event.ts +1 -1
- package/src/utils/history.ts +3 -3
- package/src/utils/index.ts +14 -15
- package/src/utils/serialize.ts +38 -0
- package/src/utils/session.ts +46 -9
- package/src/utils/template.ts +3 -3
- package/dist/cjs/core/DirectiveBus.d.ts +0 -88
- package/dist/cjs/core/DirectiveBus.d.ts.map +0 -1
- package/dist/cjs/core/DirectiveBus.js +0 -196
- package/dist/cjs/core/DirectiveBus.js.map +0 -1
- package/dist/cjs/providers/errorClassification.d.ts +0 -61
- package/dist/cjs/providers/errorClassification.d.ts.map +0 -1
- package/dist/cjs/providers/errorClassification.js +0 -123
- package/dist/cjs/providers/errorClassification.js.map +0 -1
- package/dist/cjs/utils/retry.d.ts +0 -67
- package/dist/cjs/utils/retry.d.ts.map +0 -1
- package/dist/cjs/utils/retry.js +0 -201
- package/dist/cjs/utils/retry.js.map +0 -1
- package/dist/core/DirectiveBus.d.ts +0 -88
- package/dist/core/DirectiveBus.d.ts.map +0 -1
- package/dist/core/DirectiveBus.js +0 -192
- package/dist/core/DirectiveBus.js.map +0 -1
- package/dist/providers/errorClassification.d.ts +0 -61
- package/dist/providers/errorClassification.d.ts.map +0 -1
- package/dist/providers/errorClassification.js +0 -116
- package/dist/providers/errorClassification.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -67
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js +0 -193
- package/dist/utils/retry.js.map +0 -1
- package/src/core/DirectiveBus.ts +0 -248
- package/src/providers/errorClassification.ts +0 -172
- package/src/utils/retry.ts +0 -274
package/src/utils/serialize.ts
CHANGED
|
@@ -2,6 +2,44 @@
|
|
|
2
2
|
* Serialization utilities for tool results and other data
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
+
import type { Directive } from "../types/flow.js";
|
|
6
|
+
import type { ToolResult } from "../types/tool.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Decide whether a tool handler's return value is a ToolResult-shaped object.
|
|
10
|
+
* Only SEMANTIC markers identify one — bare `{data}` / `{error}` shapes are
|
|
11
|
+
* indistinguishable from ordinary business payloads (e.g. upstream API
|
|
12
|
+
* envelopes) and must be wrapped as raw results instead. Shared by the
|
|
13
|
+
* sequential (ToolManager) and concurrent (StreamingToolExecutor) paths so the
|
|
14
|
+
* definition of "is a ToolResult" can't drift between them.
|
|
15
|
+
*/
|
|
16
|
+
export function isToolResultLike(result: unknown): result is ToolResult {
|
|
17
|
+
return (
|
|
18
|
+
result !== null &&
|
|
19
|
+
typeof result === "object" &&
|
|
20
|
+
(("success" in result &&
|
|
21
|
+
typeof (result as Record<string, unknown>).success === "boolean") ||
|
|
22
|
+
"directive" in result ||
|
|
23
|
+
"directives" in result ||
|
|
24
|
+
"dataUpdate" in result ||
|
|
25
|
+
"contextUpdate" in result)
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Collect a ToolResult's directives — `{directive}` (singular shorthand) and
|
|
31
|
+
* `{directives}` both count. Singular merges FIRST so plural entries win reply
|
|
32
|
+
* ties (last-wins merge), identical on both executor paths.
|
|
33
|
+
*/
|
|
34
|
+
export function extractResultDirectives<TContext = unknown, TData = unknown>(
|
|
35
|
+
result: ToolResult<unknown, TContext, TData>
|
|
36
|
+
): Directive<TContext, TData>[] {
|
|
37
|
+
const directives: Directive<TContext, TData>[] = [];
|
|
38
|
+
if (result.directive) directives.push(result.directive);
|
|
39
|
+
if (Array.isArray(result.directives)) directives.push(...result.directives);
|
|
40
|
+
return directives;
|
|
41
|
+
}
|
|
42
|
+
|
|
5
43
|
/**
|
|
6
44
|
* Serialize a tool execution result into a string suitable for conversation history.
|
|
7
45
|
*
|
package/src/utils/session.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { cloneDeep } from "./clone";
|
|
2
|
-
import type { SessionState } from "../types/session";
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import {
|
|
1
|
+
import { cloneDeep } from "./clone.js";
|
|
2
|
+
import type { SessionState } from "../types/session.js";
|
|
3
|
+
import type { History } from "../types/history.js";
|
|
4
|
+
import type { Directive } from "../types/flow.js";
|
|
5
|
+
import type { CollectedStateData } from "../types/persistence.js";
|
|
6
|
+
import { logger } from "./logger.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Helper to create a new session
|
|
@@ -68,8 +69,44 @@ export function createSession<TData = Record<string, unknown>>(
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
/**
|
|
71
|
-
*
|
|
72
|
+
* Default conversation-history bound applied when the agent configures neither
|
|
73
|
+
* `maxHistoryMessages` nor compaction: generous enough to never bite a real
|
|
74
|
+
* thread, finite so a long-running chat()/stream() session can't grow until
|
|
75
|
+
* the provider context limit bricks it.
|
|
72
76
|
*/
|
|
77
|
+
export const DEFAULT_MAX_HISTORY_MESSAGES = 400;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Bound a conversation history to its most recent `max` entries. The left
|
|
81
|
+
* edge never opens on an orphaned role:'tool' message (whose assistant
|
|
82
|
+
* tool_calls parent was cut) — providers reject such histories. Returns the
|
|
83
|
+
* SAME array reference when no truncation is needed.
|
|
84
|
+
*/
|
|
85
|
+
export function boundConversationHistory(
|
|
86
|
+
history: History,
|
|
87
|
+
max: number
|
|
88
|
+
): History {
|
|
89
|
+
if (!history || history.length <= max || max <= 0) return history;
|
|
90
|
+
let start = history.length - max;
|
|
91
|
+
while (start < history.length && (history[start] as { role?: string }).role === "tool") {
|
|
92
|
+
start++;
|
|
93
|
+
}
|
|
94
|
+
return history.slice(start);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Restore a session from a persisted blob (the named inverse of
|
|
99
|
+
* `createPersistedState`). Restores data + flowHistory verbatim — including a
|
|
100
|
+
* completed-flow blob, whose collected state MUST survive the round trip.
|
|
101
|
+
* Prefer this over the ambiguous `createSession(state)` overload.
|
|
102
|
+
*/
|
|
103
|
+
export function restoreSession<TData = Record<string, unknown>>(
|
|
104
|
+
state: Partial<SessionState<TData>>
|
|
105
|
+
): SessionState<TData> {
|
|
106
|
+
return createSession<TData>(state);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Helper to create a new session ID */
|
|
73
110
|
export function createSessionId(): string {
|
|
74
111
|
return `session_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
75
112
|
}
|
|
@@ -361,9 +398,9 @@ export function sessionDataToStep<TData = Record<string, unknown>>(
|
|
|
361
398
|
* `appendPrompt`, `injectTools`, and `halt` are transient (one-turn lifetime)
|
|
362
399
|
* and must not be serialized. This is a belt-and-suspenders safety net —
|
|
363
400
|
* `Agent.dispatch` already strips before setting `pendingDirective`, and the
|
|
364
|
-
*
|
|
365
|
-
* ensures the persistence layer never writes these fields regardless
|
|
366
|
-
* upstream path.
|
|
401
|
+
* signal pipeline strips pre-LLM-only fields from post-phase directives. This
|
|
402
|
+
* function ensures the persistence layer never writes these fields regardless
|
|
403
|
+
* of the upstream path.
|
|
367
404
|
*/
|
|
368
405
|
function stripPreDirectiveFields<TData>(
|
|
369
406
|
directive: Directive<unknown, TData>
|
package/src/utils/template.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Template, TemplateContext } from "../types";
|
|
2
|
-
import type { Event, MessageEventData } from "../types/history";
|
|
3
|
-
import { MessageRole, EventKind } from "../types/history";
|
|
1
|
+
import type { Template, TemplateContext } from "../types/index.js";
|
|
2
|
+
import type { Event, MessageEventData } from "../types/history.js";
|
|
3
|
+
import { MessageRole, EventKind } from "../types/history.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Renders a template, which can be a string or a function, using the provided context.
|
|
@@ -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,196 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* DirectiveBus — per-turn collection mechanism for directives emitted by
|
|
4
|
-
* hooks, tools, and branches.
|
|
5
|
-
*
|
|
6
|
-
* Two phases per turn:
|
|
7
|
-
* 1. Pre-LLM: collects from `prepare` hooks and `onEnter` hooks.
|
|
8
|
-
* 2. Post-LLM: collects from `finalize`, tools via `executeToolCalls`,
|
|
9
|
-
* branches via `evaluateBranches`.
|
|
10
|
-
*
|
|
11
|
-
* Each entry is stamped with an emitter ID for debug logging. At phase
|
|
12
|
-
* boundaries, the bus contents are merged using `flow.merge` and the
|
|
13
|
-
* result is returned via `drain()`.
|
|
14
|
-
*
|
|
15
|
-
* Algorithm 4: position precedence `abort > complete > goTo/goToStep > reset`,
|
|
16
|
-
* ties broken by emission order (last wins).
|
|
17
|
-
*
|
|
18
|
-
* **Validates: Requirements 1.3, 10.4, 10.5, 10.6**
|
|
19
|
-
*/
|
|
20
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.DirectiveBus = void 0;
|
|
22
|
-
const flow_namespace_1 = require("./flow-namespace");
|
|
23
|
-
const utils_1 = require("../utils");
|
|
24
|
-
/**
|
|
25
|
-
* Per-turn directive collection bus.
|
|
26
|
-
*
|
|
27
|
-
* Usage:
|
|
28
|
-
* ```ts
|
|
29
|
-
* const bus = new DirectiveBus();
|
|
30
|
-
* bus.setPhase('pre-llm');
|
|
31
|
-
* bus.emit({ goTo: 'Booking' }, 'step.onEnter:ask_date');
|
|
32
|
-
* bus.emit({ appendPrompt: ['Be concise.'] }, 'step.prepare:ask_date');
|
|
33
|
-
* const merged = bus.drain(); // merges all collected directives
|
|
34
|
-
* bus.setPhase('post-llm');
|
|
35
|
-
* // ... collect post-LLM emissions ...
|
|
36
|
-
* const postMerged = bus.drain();
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
class DirectiveBus {
|
|
40
|
-
constructor() {
|
|
41
|
-
this.entries = [];
|
|
42
|
-
this.currentPhase = "pre-llm";
|
|
43
|
-
this.orderCounter = 0;
|
|
44
|
-
}
|
|
45
|
-
/** Set the current collection phase. Resets the order counter for the new phase. */
|
|
46
|
-
setPhase(phase) {
|
|
47
|
-
this.currentPhase = phase;
|
|
48
|
-
// Order counter is NOT reset — emission order is global within the turn
|
|
49
|
-
// so that cross-phase comparisons (if ever needed) remain consistent.
|
|
50
|
-
}
|
|
51
|
-
/** Get the current phase. */
|
|
52
|
-
getPhase() {
|
|
53
|
-
return this.currentPhase;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Emit a directive onto the bus.
|
|
57
|
-
*
|
|
58
|
-
* @param directive - The directive to collect.
|
|
59
|
-
* @param emitterId - Human-readable identifier of the emitter (for debug logging).
|
|
60
|
-
*/
|
|
61
|
-
emit(directive, emitterId) {
|
|
62
|
-
if (!directive || typeof directive !== "object" || Array.isArray(directive)) {
|
|
63
|
-
return; // Silently ignore non-object values (void returns from hooks)
|
|
64
|
-
}
|
|
65
|
-
// Check if the directive has any meaningful fields set
|
|
66
|
-
const hasFields = Object.keys(directive).some((k) => directive[k] !== undefined);
|
|
67
|
-
if (!hasFields) {
|
|
68
|
-
return; // Empty directive — nothing to collect
|
|
69
|
-
}
|
|
70
|
-
this.entries.push({
|
|
71
|
-
directive,
|
|
72
|
-
emitterId,
|
|
73
|
-
phase: this.currentPhase,
|
|
74
|
-
order: this.orderCounter++,
|
|
75
|
-
});
|
|
76
|
-
utils_1.logger.debug(`[DirectiveBus] Collected directive from "${emitterId}" (phase=${this.currentPhase}, order=${this.orderCounter - 1})`);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Drain the bus: merge all collected directives for the current phase
|
|
80
|
-
* using Algorithm 4 (position precedence, last-wins tie-breaking,
|
|
81
|
-
* shallow-merge for state writes).
|
|
82
|
-
*
|
|
83
|
-
* Returns `undefined` if no directives were collected.
|
|
84
|
-
* After draining, the entries for the current phase are cleared.
|
|
85
|
-
*/
|
|
86
|
-
drain() {
|
|
87
|
-
const phaseEntries = this.entries.filter((e) => e.phase === this.currentPhase);
|
|
88
|
-
if (phaseEntries.length === 0) {
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
// Log conflicts when multiple emitters set position or reply fields
|
|
92
|
-
this.logConflicts(phaseEntries);
|
|
93
|
-
// Merge all directives in emission order using flow.merge (pairwise reduction).
|
|
94
|
-
// flow.merge implements Algorithm 4: position precedence with last-wins tie-breaking.
|
|
95
|
-
let merged = phaseEntries[0].directive;
|
|
96
|
-
for (let i = 1; i < phaseEntries.length; i++) {
|
|
97
|
-
merged = flow_namespace_1.flow.merge(merged, phaseEntries[i].directive);
|
|
98
|
-
}
|
|
99
|
-
// Strip pre-LLM-only fields from post-LLM phase emissions
|
|
100
|
-
if (this.currentPhase === "post-llm") {
|
|
101
|
-
const asAny = merged;
|
|
102
|
-
const preLlmFields = ["appendPrompt", "injectTools", "halt"];
|
|
103
|
-
// Identify which fields are present BEFORE stripping (the merge may
|
|
104
|
-
// alias phaseEntries[0].directive when there is a single emitter, so
|
|
105
|
-
// we must collect emitter names first).
|
|
106
|
-
const droppedFields = [];
|
|
107
|
-
for (const f of preLlmFields) {
|
|
108
|
-
if (asAny[f] !== undefined) {
|
|
109
|
-
droppedFields.push(f);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (droppedFields.length > 0) {
|
|
113
|
-
// Identify emitters that contributed the dropped fields.
|
|
114
|
-
const emitters = phaseEntries
|
|
115
|
-
.filter((e) => {
|
|
116
|
-
const d = e.directive;
|
|
117
|
-
return droppedFields.some((f) => d[f] !== undefined);
|
|
118
|
-
})
|
|
119
|
-
.map((e) => e.emitterId);
|
|
120
|
-
// Now strip the fields from the merged result.
|
|
121
|
-
for (const f of droppedFields) {
|
|
122
|
-
delete asAny[f];
|
|
123
|
-
}
|
|
124
|
-
utils_1.logger.debug(`[DirectiveBus] Dropped pre-LLM-only fields [${droppedFields.join(", ")}] from post-LLM emitters: ${emitters.join(", ")}`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Clear entries for the drained phase
|
|
128
|
-
this.entries = this.entries.filter((e) => e.phase !== this.currentPhase);
|
|
129
|
-
return merged;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Drain ALL entries regardless of phase. Used for final turn cleanup.
|
|
133
|
-
* Returns `undefined` if no directives were collected.
|
|
134
|
-
*/
|
|
135
|
-
drainAll() {
|
|
136
|
-
if (this.entries.length === 0) {
|
|
137
|
-
return undefined;
|
|
138
|
-
}
|
|
139
|
-
this.logConflicts(this.entries);
|
|
140
|
-
let merged = this.entries[0].directive;
|
|
141
|
-
for (let i = 1; i < this.entries.length; i++) {
|
|
142
|
-
merged = flow_namespace_1.flow.merge(merged, this.entries[i].directive);
|
|
143
|
-
}
|
|
144
|
-
this.entries = [];
|
|
145
|
-
return merged;
|
|
146
|
-
}
|
|
147
|
-
/** Clear all collected entries and reset the bus for a new turn. */
|
|
148
|
-
clear() {
|
|
149
|
-
this.entries = [];
|
|
150
|
-
this.orderCounter = 0;
|
|
151
|
-
this.currentPhase = "pre-llm";
|
|
152
|
-
}
|
|
153
|
-
/** Get the number of entries currently on the bus. */
|
|
154
|
-
get size() {
|
|
155
|
-
return this.entries.length;
|
|
156
|
-
}
|
|
157
|
-
/** Get all entries (for inspection/testing). */
|
|
158
|
-
getEntries() {
|
|
159
|
-
return this.entries;
|
|
160
|
-
}
|
|
161
|
-
/** Check if the bus has any entries for the current phase. */
|
|
162
|
-
hasEntries() {
|
|
163
|
-
return this.entries.some((e) => e.phase === this.currentPhase);
|
|
164
|
-
}
|
|
165
|
-
// ─── Private helpers ─────────────────────────────────────────────────────
|
|
166
|
-
/**
|
|
167
|
-
* Log debug-level conflict warnings when multiple emitters set position
|
|
168
|
-
* fields or reply fields in the same phase.
|
|
169
|
-
*/
|
|
170
|
-
logConflicts(entries) {
|
|
171
|
-
// Check for position field conflicts
|
|
172
|
-
const positionEmitters = [];
|
|
173
|
-
for (const entry of entries) {
|
|
174
|
-
const d = entry.directive;
|
|
175
|
-
for (const field of ["abort", "complete", "goTo", "goToStep", "reset"]) {
|
|
176
|
-
if (d[field] !== undefined) {
|
|
177
|
-
positionEmitters.push({ emitterId: entry.emitterId, field });
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (positionEmitters.length > 1) {
|
|
182
|
-
const details = positionEmitters
|
|
183
|
-
.map((e) => `${e.emitterId}(${e.field})`)
|
|
184
|
-
.join(", ");
|
|
185
|
-
utils_1.logger.debug(`[DirectiveBus] Multiple position fields in one turn — conflict resolution applied. Emitters: ${details}`);
|
|
186
|
-
}
|
|
187
|
-
// Check for reply conflicts
|
|
188
|
-
const replyEmitters = entries.filter((e) => e.directive.reply !== undefined);
|
|
189
|
-
if (replyEmitters.length > 1) {
|
|
190
|
-
const emitterIds = replyEmitters.map((e) => e.emitterId).join(", ");
|
|
191
|
-
utils_1.logger.debug(`[DirectiveBus] Multiple reply fields in one turn — using last emission. Emitters: ${emitterIds}`);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
exports.DirectiveBus = DirectiveBus;
|
|
196
|
-
//# 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"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Shared provider error utilities: classification of SDK/HTTP errors onto
|
|
4
|
-
* normalized ProviderErrorCode values, backup-model eligibility, and
|
|
5
|
-
* wrapping of terminal failures in ProviderError.
|
|
6
|
-
*
|
|
7
|
-
* The classification is derived once and reused for both backup-model
|
|
8
|
-
* decisions and final error wrapping, so the two can never drift apart.
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.isErrorWithStatus = isErrorWithStatus;
|
|
12
|
-
exports.getErrorMessage = getErrorMessage;
|
|
13
|
-
exports.classifyProviderError = classifyProviderError;
|
|
14
|
-
exports.isBackupEligible = isBackupEligible;
|
|
15
|
-
exports.toProviderError = toProviderError;
|
|
16
|
-
const errors_1 = require("../types/errors");
|
|
17
|
-
/**
|
|
18
|
-
* Type guard to check if error is ErrorWithStatus
|
|
19
|
-
*/
|
|
20
|
-
function isErrorWithStatus(error) {
|
|
21
|
-
return (typeof error === "object" &&
|
|
22
|
-
error !== null &&
|
|
23
|
-
("status" in error || "code" in error || "message" in error));
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Safely extract error message
|
|
27
|
-
*/
|
|
28
|
-
function getErrorMessage(error) {
|
|
29
|
-
if (error instanceof Error) {
|
|
30
|
-
return error.message;
|
|
31
|
-
}
|
|
32
|
-
if (isErrorWithStatus(error) && error.message) {
|
|
33
|
-
return error.message;
|
|
34
|
-
}
|
|
35
|
-
return String(error);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Message substrings every provider historically treated as
|
|
39
|
-
* overloaded/unavailable for backup-model purposes.
|
|
40
|
-
*/
|
|
41
|
-
const DEFAULT_OVERLOADED_MESSAGES = [
|
|
42
|
-
"overloaded",
|
|
43
|
-
"unavailable",
|
|
44
|
-
"internal error",
|
|
45
|
-
"Internal error",
|
|
46
|
-
];
|
|
47
|
-
/**
|
|
48
|
-
* Classify an unknown error into a normalized ProviderErrorCode.
|
|
49
|
-
*
|
|
50
|
-
* Overload/availability checks run first so that backup-model decisions
|
|
51
|
-
* (rate_limited/overloaded) match the historical shouldUseBackupModel
|
|
52
|
-
* predicate exactly.
|
|
53
|
-
*/
|
|
54
|
-
function classifyProviderError(error, options = {}) {
|
|
55
|
-
if (!isErrorWithStatus(error)) {
|
|
56
|
-
return "unknown";
|
|
57
|
-
}
|
|
58
|
-
const { status, code, type } = error;
|
|
59
|
-
const message = getErrorMessage(error);
|
|
60
|
-
// Server errors / overload
|
|
61
|
-
if (status === 500 || status === 503) {
|
|
62
|
-
return "overloaded";
|
|
63
|
-
}
|
|
64
|
-
// Rate limiting
|
|
65
|
-
if (status === 429) {
|
|
66
|
-
return "rate_limited";
|
|
67
|
-
}
|
|
68
|
-
// Provider-specific overload/unavailability signals
|
|
69
|
-
if (status !== undefined && options.overloadedStatuses?.includes(status)) {
|
|
70
|
-
return "overloaded";
|
|
71
|
-
}
|
|
72
|
-
if (code !== undefined && options.overloadedCodes?.includes(code)) {
|
|
73
|
-
return "overloaded";
|
|
74
|
-
}
|
|
75
|
-
if (type !== undefined && options.overloadedTypes?.includes(type)) {
|
|
76
|
-
return "overloaded";
|
|
77
|
-
}
|
|
78
|
-
const overloadedMessages = options.overloadedMessages
|
|
79
|
-
? [...DEFAULT_OVERLOADED_MESSAGES, ...options.overloadedMessages]
|
|
80
|
-
: DEFAULT_OVERLOADED_MESSAGES;
|
|
81
|
-
if (overloadedMessages.some((pattern) => message.includes(pattern))) {
|
|
82
|
-
return "overloaded";
|
|
83
|
-
}
|
|
84
|
-
// Non-retriable classifications (never triggered backup models)
|
|
85
|
-
if (status === 401 || status === 403) {
|
|
86
|
-
return "auth";
|
|
87
|
-
}
|
|
88
|
-
if (status === 400 || status === 404 || status === 422) {
|
|
89
|
-
return "invalid_request";
|
|
90
|
-
}
|
|
91
|
-
if (status === 408 ||
|
|
92
|
-
message.includes("timed out") ||
|
|
93
|
-
message.includes("timeout")) {
|
|
94
|
-
return "timeout";
|
|
95
|
-
}
|
|
96
|
-
if (message.includes("fetch failed") ||
|
|
97
|
-
message.includes("ECONNREFUSED") ||
|
|
98
|
-
message.includes("ECONNRESET") ||
|
|
99
|
-
message.includes("ETIMEDOUT") ||
|
|
100
|
-
message.includes("network")) {
|
|
101
|
-
return "network";
|
|
102
|
-
}
|
|
103
|
-
return "unknown";
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Whether an error code qualifies for trying backup models.
|
|
107
|
-
* Mirrors the historical shouldUseBackupModel predicate.
|
|
108
|
-
*/
|
|
109
|
-
function isBackupEligible(code) {
|
|
110
|
-
return code === "rate_limited" || code === "overloaded";
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Wrap a terminal failure (after retries/backup exhaustion) in a
|
|
114
|
-
* normalized ProviderError, preserving the original error as `cause`.
|
|
115
|
-
* Already-wrapped errors pass through untouched.
|
|
116
|
-
*/
|
|
117
|
-
function toProviderError(error, provider, options) {
|
|
118
|
-
if (error instanceof errors_1.ProviderError) {
|
|
119
|
-
return error;
|
|
120
|
-
}
|
|
121
|
-
return new errors_1.ProviderError(classifyProviderError(error, options), provider, getErrorMessage(error), error);
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=errorClassification.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errorClassification.js","sourceRoot":"","sources":["../../../src/providers/errorClassification.ts"],"names":[],"mappings":"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"}
|