@falai/agent 2.2.4 → 2.4.2
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.map +1 -1
- package/dist/adapters/MemoryAdapter.js +10 -1
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/adapters/MongoAdapter.js +33 -2
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +15 -1
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +35 -5
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter.js +58 -15
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/adapters/RedisAdapter.js +10 -1
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +38 -6
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +10 -1
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +33 -2
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +15 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +35 -5
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +58 -15
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +10 -1
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +38 -6
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/core/Agent.d.ts +28 -18
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +58 -68
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/cjs/core/AutoChainExecutor.js +14 -20
- package/dist/cjs/core/AutoChainExecutor.js.map +1 -1
- package/dist/cjs/core/BranchEvaluator.d.ts +4 -3
- package/dist/cjs/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/BranchEvaluator.js +18 -23
- package/dist/cjs/core/BranchEvaluator.js.map +1 -1
- package/dist/cjs/core/Flow.d.ts +2 -1
- package/dist/cjs/core/Flow.d.ts.map +1 -1
- package/dist/cjs/core/Flow.js +10 -3
- package/dist/cjs/core/Flow.js.map +1 -1
- package/dist/cjs/core/FlowRouter.d.ts +1 -0
- package/dist/cjs/core/FlowRouter.d.ts.map +1 -1
- package/dist/cjs/core/FlowRouter.js +28 -5
- package/dist/cjs/core/FlowRouter.js.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +3 -0
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +57 -5
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +24 -10
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/ResponseGenerationError.d.ts +30 -0
- package/dist/cjs/core/ResponseGenerationError.d.ts.map +1 -0
- package/dist/cjs/core/ResponseGenerationError.js +37 -0
- package/dist/cjs/core/ResponseGenerationError.js.map +1 -0
- package/dist/cjs/core/ResponseModal.d.ts +43 -102
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +178 -1194
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/ResponsePipeline.d.ts +58 -152
- package/dist/cjs/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/core/ResponsePipeline.js +408 -457
- package/dist/cjs/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/core/SessionFinalizer.d.ts +34 -0
- package/dist/cjs/core/SessionFinalizer.d.ts.map +1 -0
- package/dist/cjs/core/SessionFinalizer.js +61 -0
- package/dist/cjs/core/SessionFinalizer.js.map +1 -0
- package/dist/cjs/core/SessionManager.d.ts +1 -1
- package/dist/cjs/core/SessionManager.d.ts.map +1 -1
- package/dist/cjs/core/SessionManager.js +18 -7
- package/dist/cjs/core/SessionManager.js.map +1 -1
- package/dist/cjs/core/SignalCoordinator.d.ts +103 -0
- package/dist/cjs/core/SignalCoordinator.d.ts.map +1 -0
- package/dist/cjs/core/SignalCoordinator.js +207 -0
- package/dist/cjs/core/SignalCoordinator.js.map +1 -0
- package/dist/cjs/core/SignalEvaluator.d.ts +2 -2
- package/dist/cjs/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/cjs/core/SignalEvaluator.js +11 -26
- package/dist/cjs/core/SignalEvaluator.js.map +1 -1
- package/dist/cjs/core/SignalProcessor.d.ts.map +1 -1
- package/dist/cjs/core/SignalProcessor.js +28 -11
- package/dist/cjs/core/SignalProcessor.js.map +1 -1
- package/dist/cjs/core/Step.d.ts +3 -1
- package/dist/cjs/core/Step.d.ts.map +1 -1
- package/dist/cjs/core/Step.js +10 -3
- package/dist/cjs/core/Step.js.map +1 -1
- package/dist/cjs/core/StepLifecycle.d.ts +33 -0
- package/dist/cjs/core/StepLifecycle.d.ts.map +1 -0
- package/dist/cjs/core/StepLifecycle.js +97 -0
- package/dist/cjs/core/StepLifecycle.js.map +1 -0
- package/dist/cjs/core/ToolLoopExecutor.d.ts +104 -0
- package/dist/cjs/core/ToolLoopExecutor.d.ts.map +1 -0
- package/dist/cjs/core/ToolLoopExecutor.js +391 -0
- package/dist/cjs/core/ToolLoopExecutor.js.map +1 -0
- package/dist/cjs/core/ToolManager.d.ts +1 -1
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -5
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +7 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +2 -0
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +28 -56
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.d.ts +25 -21
- package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/cjs/providers/DeepSeekProvider.js +48 -407
- package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +2 -0
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +27 -56
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +129 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +1 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.js +485 -0
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +1 -0
- package/dist/cjs/providers/OpenAIProvider.d.ts +9 -28
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +23 -417
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts +10 -27
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +28 -417
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/providers/errorClassification.d.ts +61 -0
- package/dist/cjs/providers/errorClassification.d.ts.map +1 -0
- package/dist/cjs/providers/errorClassification.js +123 -0
- package/dist/cjs/providers/errorClassification.js.map +1 -0
- package/dist/cjs/providers/index.d.ts +4 -0
- package/dist/cjs/providers/index.d.ts.map +1 -1
- package/dist/cjs/providers/index.js +7 -1
- package/dist/cjs/providers/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +2 -1
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/ai.d.ts +20 -0
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/errors.d.ts +33 -0
- package/dist/cjs/types/errors.d.ts.map +1 -1
- package/dist/cjs/types/errors.js +37 -1
- package/dist/cjs/types/errors.js.map +1 -1
- package/dist/cjs/types/flow.d.ts +10 -5
- 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 +5 -4
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/persistence.d.ts +43 -2
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +8 -0
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/signals.d.ts +18 -2
- package/dist/cjs/types/signals.d.ts.map +1 -1
- package/dist/cjs/types/template.d.ts +3 -1
- package/dist/cjs/types/template.d.ts.map +1 -1
- package/dist/cjs/types/tool.d.ts +4 -4
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/utils/condition.d.ts +19 -0
- package/dist/cjs/utils/condition.d.ts.map +1 -1
- package/dist/cjs/utils/condition.js +86 -15
- package/dist/cjs/utils/condition.js.map +1 -1
- package/dist/cjs/utils/session.d.ts +1 -0
- package/dist/cjs/utils/session.d.ts.map +1 -1
- package/dist/cjs/utils/session.js +1 -0
- package/dist/cjs/utils/session.js.map +1 -1
- package/dist/core/Agent.d.ts +28 -18
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +58 -68
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/AutoChainExecutor.d.ts.map +1 -1
- package/dist/core/AutoChainExecutor.js +14 -20
- package/dist/core/AutoChainExecutor.js.map +1 -1
- package/dist/core/BranchEvaluator.d.ts +4 -3
- package/dist/core/BranchEvaluator.d.ts.map +1 -1
- package/dist/core/BranchEvaluator.js +18 -23
- package/dist/core/BranchEvaluator.js.map +1 -1
- package/dist/core/Flow.d.ts +2 -1
- package/dist/core/Flow.d.ts.map +1 -1
- package/dist/core/Flow.js +10 -3
- package/dist/core/Flow.js.map +1 -1
- package/dist/core/FlowRouter.d.ts +1 -0
- package/dist/core/FlowRouter.d.ts.map +1 -1
- package/dist/core/FlowRouter.js +28 -5
- package/dist/core/FlowRouter.js.map +1 -1
- package/dist/core/PersistenceManager.d.ts +3 -0
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +58 -6
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +24 -10
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/ResponseGenerationError.d.ts +30 -0
- package/dist/core/ResponseGenerationError.d.ts.map +1 -0
- package/dist/core/ResponseGenerationError.js +33 -0
- package/dist/core/ResponseGenerationError.js.map +1 -0
- package/dist/core/ResponseModal.d.ts +43 -102
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +171 -1186
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/ResponsePipeline.d.ts +58 -152
- package/dist/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/core/ResponsePipeline.js +409 -458
- package/dist/core/ResponsePipeline.js.map +1 -1
- package/dist/core/SessionFinalizer.d.ts +34 -0
- package/dist/core/SessionFinalizer.d.ts.map +1 -0
- package/dist/core/SessionFinalizer.js +57 -0
- package/dist/core/SessionFinalizer.js.map +1 -0
- package/dist/core/SessionManager.d.ts +1 -1
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +18 -7
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/SignalCoordinator.d.ts +103 -0
- package/dist/core/SignalCoordinator.d.ts.map +1 -0
- package/dist/core/SignalCoordinator.js +203 -0
- package/dist/core/SignalCoordinator.js.map +1 -0
- package/dist/core/SignalEvaluator.d.ts +2 -2
- package/dist/core/SignalEvaluator.d.ts.map +1 -1
- package/dist/core/SignalEvaluator.js +11 -26
- package/dist/core/SignalEvaluator.js.map +1 -1
- package/dist/core/SignalProcessor.d.ts.map +1 -1
- package/dist/core/SignalProcessor.js +28 -11
- package/dist/core/SignalProcessor.js.map +1 -1
- package/dist/core/Step.d.ts +3 -1
- package/dist/core/Step.d.ts.map +1 -1
- package/dist/core/Step.js +10 -3
- package/dist/core/Step.js.map +1 -1
- package/dist/core/StepLifecycle.d.ts +33 -0
- package/dist/core/StepLifecycle.d.ts.map +1 -0
- package/dist/core/StepLifecycle.js +93 -0
- package/dist/core/StepLifecycle.js.map +1 -0
- package/dist/core/ToolLoopExecutor.d.ts +104 -0
- package/dist/core/ToolLoopExecutor.d.ts.map +1 -0
- package/dist/core/ToolLoopExecutor.js +387 -0
- package/dist/core/ToolLoopExecutor.js.map +1 -0
- package/dist/core/ToolManager.d.ts +1 -1
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts +2 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/AnthropicProvider.js +22 -50
- package/dist/providers/AnthropicProvider.js.map +1 -1
- package/dist/providers/DeepSeekProvider.d.ts +25 -21
- package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/DeepSeekProvider.js +49 -408
- package/dist/providers/DeepSeekProvider.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +2 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +21 -50
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAICompatibleProvider.d.ts +129 -0
- package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -0
- package/dist/providers/OpenAICompatibleProvider.js +481 -0
- package/dist/providers/OpenAICompatibleProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts +9 -28
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +23 -417
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +10 -27
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +28 -417
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/providers/errorClassification.d.ts +61 -0
- package/dist/providers/errorClassification.d.ts.map +1 -0
- package/dist/providers/errorClassification.js +116 -0
- package/dist/providers/errorClassification.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/types/agent.d.ts +2 -1
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/ai.d.ts +20 -0
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/errors.d.ts +33 -0
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +34 -0
- package/dist/types/errors.js.map +1 -1
- package/dist/types/flow.d.ts +10 -5
- 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 +5 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/persistence.d.ts +43 -2
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/session.d.ts +8 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/signals.d.ts +18 -2
- package/dist/types/signals.d.ts.map +1 -1
- package/dist/types/template.d.ts +3 -1
- package/dist/types/template.d.ts.map +1 -1
- package/dist/types/tool.d.ts +4 -4
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/utils/condition.d.ts +19 -0
- package/dist/utils/condition.d.ts.map +1 -1
- package/dist/utils/condition.js +84 -15
- package/dist/utils/condition.js.map +1 -1
- package/dist/utils/session.d.ts +1 -0
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +1 -0
- package/dist/utils/session.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/guides/branching.md +1 -1
- package/docs/guides/compaction.md +12 -5
- package/docs/guides/conditions.md +15 -2
- package/docs/guides/error-handling.md +59 -9
- package/docs/guides/instructions.md +2 -2
- package/docs/guides/persistence.md +69 -2
- package/docs/guides/streaming.md +2 -0
- package/docs/migration/README.md +5 -1
- package/docs/migration/v2-3-to-v2-4.md +316 -0
- package/docs/reference/adapters.md +55 -7
- package/docs/reference/branches.md +2 -2
- package/docs/reference/create-agent.md +3 -3
- package/docs/reference/errors.md +66 -1
- package/docs/reference/flow.md +1 -1
- package/docs/reference/instruction.md +4 -4
- package/docs/reference/providers.md +100 -3
- package/docs/reference/signals.md +14 -3
- package/docs/reference/step.md +2 -2
- package/docs/reference/tool.md +3 -1
- package/docs/start/05-go-to-production.md +3 -0
- package/package.json +1 -1
- package/src/adapters/MemoryAdapter.ts +15 -1
- package/src/adapters/MongoAdapter.ts +41 -2
- package/src/adapters/OpenSearchAdapter.ts +24 -1
- package/src/adapters/PostgreSQLAdapter.ts +45 -5
- package/src/adapters/PrismaAdapter.ts +82 -16
- package/src/adapters/RedisAdapter.ts +19 -1
- package/src/adapters/SQLiteAdapter.ts +47 -5
- package/src/core/Agent.ts +70 -85
- package/src/core/AutoChainExecutor.ts +27 -57
- package/src/core/BranchEvaluator.ts +24 -30
- package/src/core/Flow.ts +10 -3
- package/src/core/FlowRouter.ts +36 -4
- package/src/core/PersistenceManager.ts +79 -10
- package/src/core/PromptComposer.ts +25 -12
- package/src/core/ResponseGenerationError.ts +56 -0
- package/src/core/ResponseModal.ts +233 -1482
- package/src/core/ResponsePipeline.ts +492 -662
- package/src/core/SessionFinalizer.ts +78 -0
- package/src/core/SessionManager.ts +21 -9
- package/src/core/SignalCoordinator.ts +263 -0
- package/src/core/SignalEvaluator.ts +12 -29
- package/src/core/SignalProcessor.ts +34 -11
- package/src/core/Step.ts +11 -3
- package/src/core/StepLifecycle.ts +139 -0
- package/src/core/ToolLoopExecutor.ts +492 -0
- package/src/core/ToolManager.ts +2 -1
- package/src/index.ts +7 -5
- package/src/providers/AnthropicProvider.ts +30 -72
- package/src/providers/DeepSeekProvider.ts +74 -586
- package/src/providers/GeminiProvider.ts +29 -70
- package/src/providers/OpenAICompatibleProvider.ts +738 -0
- package/src/providers/OpenAIProvider.ts +29 -602
- package/src/providers/OpenRouterProvider.ts +38 -596
- package/src/providers/errorClassification.ts +172 -0
- package/src/providers/index.ts +13 -0
- package/src/types/agent.ts +2 -1
- package/src/types/ai.ts +22 -0
- package/src/types/errors.ts +57 -0
- package/src/types/flow.ts +10 -5
- package/src/types/history.ts +1 -2
- package/src/types/index.ts +5 -1
- package/src/types/persistence.ts +50 -2
- package/src/types/session.ts +9 -0
- package/src/types/signals.ts +20 -2
- package/src/types/template.ts +3 -1
- package/src/types/tool.ts +10 -10
- package/src/utils/condition.ts +115 -18
- package/src/utils/session.ts +2 -0
|
@@ -0,0 +1,172 @@
|
|
|
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
|
+
|
|
10
|
+
import { ProviderError, type ProviderErrorCode } from "../types/errors";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Shape of errors with status/code properties thrown by provider SDKs
|
|
14
|
+
*/
|
|
15
|
+
export interface ErrorWithStatus {
|
|
16
|
+
status?: number;
|
|
17
|
+
code?: string;
|
|
18
|
+
message?: string;
|
|
19
|
+
type?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Type guard to check if error is ErrorWithStatus
|
|
24
|
+
*/
|
|
25
|
+
export function isErrorWithStatus(error: unknown): error is ErrorWithStatus {
|
|
26
|
+
return (
|
|
27
|
+
typeof error === "object" &&
|
|
28
|
+
error !== null &&
|
|
29
|
+
("status" in error || "code" in error || "message" in error)
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Safely extract error message
|
|
35
|
+
*/
|
|
36
|
+
export function getErrorMessage(error: unknown): string {
|
|
37
|
+
if (error instanceof Error) {
|
|
38
|
+
return error.message;
|
|
39
|
+
}
|
|
40
|
+
if (isErrorWithStatus(error) && error.message) {
|
|
41
|
+
return error.message;
|
|
42
|
+
}
|
|
43
|
+
return String(error);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Provider-specific signals treated as "overloaded/unavailable", in
|
|
48
|
+
* addition to the shared defaults (HTTP 500/503 and the common message
|
|
49
|
+
* substrings below).
|
|
50
|
+
*/
|
|
51
|
+
export interface ErrorClassificationOptions {
|
|
52
|
+
/** Extra HTTP statuses treated as overloaded (e.g. Anthropic's 529) */
|
|
53
|
+
overloadedStatuses?: readonly number[];
|
|
54
|
+
/** Error `code` values treated as overloaded/unavailable (e.g. "model_not_found") */
|
|
55
|
+
overloadedCodes?: readonly string[];
|
|
56
|
+
/** Error `type` values treated as overloaded (e.g. Anthropic's "overloaded_error") */
|
|
57
|
+
overloadedTypes?: readonly string[];
|
|
58
|
+
/** Extra message substrings treated as overloaded (e.g. OpenRouter's "capacity") */
|
|
59
|
+
overloadedMessages?: readonly string[];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Message substrings every provider historically treated as
|
|
64
|
+
* overloaded/unavailable for backup-model purposes.
|
|
65
|
+
*/
|
|
66
|
+
const DEFAULT_OVERLOADED_MESSAGES: readonly string[] = [
|
|
67
|
+
"overloaded",
|
|
68
|
+
"unavailable",
|
|
69
|
+
"internal error",
|
|
70
|
+
"Internal error",
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Classify an unknown error into a normalized ProviderErrorCode.
|
|
75
|
+
*
|
|
76
|
+
* Overload/availability checks run first so that backup-model decisions
|
|
77
|
+
* (rate_limited/overloaded) match the historical shouldUseBackupModel
|
|
78
|
+
* predicate exactly.
|
|
79
|
+
*/
|
|
80
|
+
export function classifyProviderError(
|
|
81
|
+
error: unknown,
|
|
82
|
+
options: ErrorClassificationOptions = {}
|
|
83
|
+
): ProviderErrorCode {
|
|
84
|
+
if (!isErrorWithStatus(error)) {
|
|
85
|
+
return "unknown";
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const { status, code, type } = error;
|
|
89
|
+
const message = getErrorMessage(error);
|
|
90
|
+
|
|
91
|
+
// Server errors / overload
|
|
92
|
+
if (status === 500 || status === 503) {
|
|
93
|
+
return "overloaded";
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Rate limiting
|
|
97
|
+
if (status === 429) {
|
|
98
|
+
return "rate_limited";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Provider-specific overload/unavailability signals
|
|
102
|
+
if (status !== undefined && options.overloadedStatuses?.includes(status)) {
|
|
103
|
+
return "overloaded";
|
|
104
|
+
}
|
|
105
|
+
if (code !== undefined && options.overloadedCodes?.includes(code)) {
|
|
106
|
+
return "overloaded";
|
|
107
|
+
}
|
|
108
|
+
if (type !== undefined && options.overloadedTypes?.includes(type)) {
|
|
109
|
+
return "overloaded";
|
|
110
|
+
}
|
|
111
|
+
const overloadedMessages = options.overloadedMessages
|
|
112
|
+
? [...DEFAULT_OVERLOADED_MESSAGES, ...options.overloadedMessages]
|
|
113
|
+
: DEFAULT_OVERLOADED_MESSAGES;
|
|
114
|
+
if (overloadedMessages.some((pattern) => message.includes(pattern))) {
|
|
115
|
+
return "overloaded";
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Non-retriable classifications (never triggered backup models)
|
|
119
|
+
if (status === 401 || status === 403) {
|
|
120
|
+
return "auth";
|
|
121
|
+
}
|
|
122
|
+
if (status === 400 || status === 404 || status === 422) {
|
|
123
|
+
return "invalid_request";
|
|
124
|
+
}
|
|
125
|
+
if (
|
|
126
|
+
status === 408 ||
|
|
127
|
+
message.includes("timed out") ||
|
|
128
|
+
message.includes("timeout")
|
|
129
|
+
) {
|
|
130
|
+
return "timeout";
|
|
131
|
+
}
|
|
132
|
+
if (
|
|
133
|
+
message.includes("fetch failed") ||
|
|
134
|
+
message.includes("ECONNREFUSED") ||
|
|
135
|
+
message.includes("ECONNRESET") ||
|
|
136
|
+
message.includes("ETIMEDOUT") ||
|
|
137
|
+
message.includes("network")
|
|
138
|
+
) {
|
|
139
|
+
return "network";
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return "unknown";
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Whether an error code qualifies for trying backup models.
|
|
147
|
+
* Mirrors the historical shouldUseBackupModel predicate.
|
|
148
|
+
*/
|
|
149
|
+
export function isBackupEligible(code: ProviderErrorCode): boolean {
|
|
150
|
+
return code === "rate_limited" || code === "overloaded";
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Wrap a terminal failure (after retries/backup exhaustion) in a
|
|
155
|
+
* normalized ProviderError, preserving the original error as `cause`.
|
|
156
|
+
* Already-wrapped errors pass through untouched.
|
|
157
|
+
*/
|
|
158
|
+
export function toProviderError(
|
|
159
|
+
error: unknown,
|
|
160
|
+
provider: string,
|
|
161
|
+
options?: ErrorClassificationOptions
|
|
162
|
+
): ProviderError {
|
|
163
|
+
if (error instanceof ProviderError) {
|
|
164
|
+
return error;
|
|
165
|
+
}
|
|
166
|
+
return new ProviderError(
|
|
167
|
+
classifyProviderError(error, options),
|
|
168
|
+
provider,
|
|
169
|
+
getErrorMessage(error),
|
|
170
|
+
error
|
|
171
|
+
);
|
|
172
|
+
}
|
package/src/providers/index.ts
CHANGED
|
@@ -17,3 +17,16 @@ export type { OpenRouterProviderOptions } from "./OpenRouterProvider";
|
|
|
17
17
|
|
|
18
18
|
export { DeepSeekProvider } from "./DeepSeekProvider";
|
|
19
19
|
export type { DeepSeekProviderOptions } from "./DeepSeekProvider";
|
|
20
|
+
|
|
21
|
+
export { OpenAICompatibleProvider } from "./OpenAICompatibleProvider";
|
|
22
|
+
export type {
|
|
23
|
+
OpenAICompatibleProviderInit,
|
|
24
|
+
OpenAICompatibleRequestConfig,
|
|
25
|
+
} from "./OpenAICompatibleProvider";
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
classifyProviderError,
|
|
29
|
+
isBackupEligible,
|
|
30
|
+
toProviderError,
|
|
31
|
+
} from "./errorClassification";
|
|
32
|
+
export type { ErrorClassificationOptions } from "./errorClassification";
|
package/src/types/agent.ts
CHANGED
|
@@ -267,7 +267,8 @@ export interface Instruction<TContext = unknown, TData = unknown> {
|
|
|
267
267
|
*/
|
|
268
268
|
kind?: 'must' | 'never' | 'should';
|
|
269
269
|
/**
|
|
270
|
-
* AI-evaluated activation condition.
|
|
270
|
+
* AI-evaluated activation condition. Non-`!` strings are OR alternatives;
|
|
271
|
+
* `!` strings are OR exclusions where any match inhibits the instruction.
|
|
271
272
|
* Undefined = always active. Functions are NOT allowed here — use `if`.
|
|
272
273
|
*/
|
|
273
274
|
when?: ConditionWhen;
|
package/src/types/ai.ts
CHANGED
|
@@ -132,6 +132,25 @@ export interface GenerateMessageStreamChunk<
|
|
|
132
132
|
structured?: TStructured;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Static capability flags exposed by a provider implementation.
|
|
137
|
+
*
|
|
138
|
+
* Values describe what the implementation actually does (e.g. Anthropic
|
|
139
|
+
* enforces JSON output via a prompt instruction, not a native schema mode).
|
|
140
|
+
*/
|
|
141
|
+
export interface ProviderCapabilities {
|
|
142
|
+
/** Provider supports tool/function calling */
|
|
143
|
+
supportsTools: boolean;
|
|
144
|
+
/** Provider natively enforces a JSON schema on output (vs. prompt-based JSON instruction) */
|
|
145
|
+
supportsNativeJsonSchema: boolean;
|
|
146
|
+
/** Provider supports streaming responses */
|
|
147
|
+
supportsStreaming: boolean;
|
|
148
|
+
/** Provider surfaces tool calls during streaming */
|
|
149
|
+
supportsStreamingToolCalls: boolean;
|
|
150
|
+
/** Provider supports prompt caching */
|
|
151
|
+
supportsPromptCaching: boolean;
|
|
152
|
+
}
|
|
153
|
+
|
|
135
154
|
/**
|
|
136
155
|
* AI provider interface (strategy pattern)
|
|
137
156
|
*/
|
|
@@ -139,6 +158,9 @@ export interface AiProvider {
|
|
|
139
158
|
/** Provider name/identifier */
|
|
140
159
|
readonly name: string;
|
|
141
160
|
|
|
161
|
+
/** Static capability flags for this provider implementation */
|
|
162
|
+
capabilities: ProviderCapabilities;
|
|
163
|
+
|
|
142
164
|
/**
|
|
143
165
|
* Generate a message based on prompt and context
|
|
144
166
|
*/
|
package/src/types/errors.ts
CHANGED
|
@@ -16,3 +16,60 @@ export class NotImplementedError extends Error {
|
|
|
16
16
|
this.name = 'NotImplementedError';
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Normalized error codes for AI provider failures.
|
|
22
|
+
*
|
|
23
|
+
* Providers map their SDK/HTTP errors onto these codes so callers can
|
|
24
|
+
* handle failures uniformly regardless of which provider is configured.
|
|
25
|
+
*/
|
|
26
|
+
export type ProviderErrorCode =
|
|
27
|
+
| 'rate_limited'
|
|
28
|
+
| 'overloaded'
|
|
29
|
+
| 'auth'
|
|
30
|
+
| 'invalid_request'
|
|
31
|
+
| 'schema_rejected'
|
|
32
|
+
| 'timeout'
|
|
33
|
+
| 'network'
|
|
34
|
+
| 'unknown';
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Normalized error thrown by AI providers for terminal failures — i.e.
|
|
38
|
+
* after retries and backup models (if any) have been exhausted.
|
|
39
|
+
*
|
|
40
|
+
* The original SDK/HTTP error is preserved as `cause` for debugging and
|
|
41
|
+
* provider-specific handling.
|
|
42
|
+
*/
|
|
43
|
+
export class ProviderError extends Error {
|
|
44
|
+
constructor(
|
|
45
|
+
public readonly code: ProviderErrorCode,
|
|
46
|
+
public readonly provider: string,
|
|
47
|
+
message: string,
|
|
48
|
+
public readonly cause?: unknown,
|
|
49
|
+
) {
|
|
50
|
+
super(message);
|
|
51
|
+
this.name = 'ProviderError';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Thrown by the persistence layer when a session save carries a stale
|
|
57
|
+
* `version` — i.e. another writer persisted the session after this one
|
|
58
|
+
* loaded it (concurrent respond() calls, parallel webhooks, two tabs).
|
|
59
|
+
*
|
|
60
|
+
* Handlers should reload the session and retry or surface the conflict.
|
|
61
|
+
*/
|
|
62
|
+
export class SessionConflictError extends Error {
|
|
63
|
+
constructor(
|
|
64
|
+
public readonly sessionId: string,
|
|
65
|
+
public readonly expectedVersion: number,
|
|
66
|
+
public readonly actualVersion: number | undefined,
|
|
67
|
+
) {
|
|
68
|
+
super(
|
|
69
|
+
`[SessionConflictError] Session "${sessionId}" was modified concurrently: ` +
|
|
70
|
+
`expected version ${expectedVersion}, found ${actualVersion ?? 'none'}. ` +
|
|
71
|
+
`Reload the session and retry the operation.`
|
|
72
|
+
);
|
|
73
|
+
this.name = 'SessionConflictError';
|
|
74
|
+
}
|
|
75
|
+
}
|
package/src/types/flow.ts
CHANGED
|
@@ -25,8 +25,10 @@ export type ConditionIf<TContext = unknown, TData = unknown> =
|
|
|
25
25
|
| ConditionPredicate<TContext, TData>[];
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
|
-
* The `when` field shape: a single AI-evaluated string or array of strings
|
|
29
|
-
*
|
|
28
|
+
* The `when` field shape: a single AI-evaluated string or array of strings.
|
|
29
|
+
* Non-`!` entries use OR semantics. `!`-prefixed entries are OR exclusions:
|
|
30
|
+
* any matching exclusion inhibits the condition. Functions are NOT allowed on
|
|
31
|
+
* `when` — they belong on `if` only.
|
|
30
32
|
*/
|
|
31
33
|
export type ConditionWhen = string | string[];
|
|
32
34
|
import type { SessionState } from "./session";
|
|
@@ -196,7 +198,8 @@ export type BranchPredicate<TContext = unknown, TData = unknown> = (
|
|
|
196
198
|
*/
|
|
197
199
|
export interface BranchEntry<TContext = unknown, TData = unknown> {
|
|
198
200
|
/**
|
|
199
|
-
* AI-evaluated condition.
|
|
201
|
+
* AI-evaluated condition. Non-`!` strings are OR alternatives; `!` strings
|
|
202
|
+
* are OR exclusions where any match inhibits the branch.
|
|
200
203
|
* Costs LLM tokens. Reuses the same machinery as `step.when`.
|
|
201
204
|
* Only evaluated if `if` passes (or is absent) — code-first short-circuit.
|
|
202
205
|
*/
|
|
@@ -324,7 +327,8 @@ export interface FlowOptions<TContext = unknown, TData = unknown> {
|
|
|
324
327
|
description?: string;
|
|
325
328
|
|
|
326
329
|
/**
|
|
327
|
-
* AI-evaluated activation condition(s).
|
|
330
|
+
* AI-evaluated activation condition(s). Non-`!` strings are OR alternatives;
|
|
331
|
+
* `!` strings are OR exclusions where any match inhibits activation.
|
|
328
332
|
* Costs LLM tokens. Functions are NOT allowed here — use `if` for code predicates.
|
|
329
333
|
*/
|
|
330
334
|
when?: ConditionWhen;
|
|
@@ -498,7 +502,8 @@ export interface StepOptions<TContext = unknown, TData = unknown> {
|
|
|
498
502
|
*/
|
|
499
503
|
requires?: (keyof TData)[];
|
|
500
504
|
/**
|
|
501
|
-
* AI-evaluated activation condition(s).
|
|
505
|
+
* AI-evaluated activation condition(s). Non-`!` strings are OR alternatives;
|
|
506
|
+
* `!` strings are OR exclusions where any match inhibits activation.
|
|
502
507
|
* Costs LLM tokens. Functions are NOT allowed here — use `if` for code predicates.
|
|
503
508
|
*/
|
|
504
509
|
when?: ConditionWhen;
|
package/src/types/history.ts
CHANGED
package/src/types/index.ts
CHANGED
|
@@ -69,6 +69,7 @@ export type {
|
|
|
69
69
|
Signal,
|
|
70
70
|
SignalContext,
|
|
71
71
|
SignalDirective,
|
|
72
|
+
ResolvedSignalDirective,
|
|
72
73
|
SignalPredicate,
|
|
73
74
|
SignalPredicateContext,
|
|
74
75
|
SignalFiring,
|
|
@@ -118,6 +119,7 @@ export type {
|
|
|
118
119
|
AgentStructuredResponse,
|
|
119
120
|
ReasoningConfig,
|
|
120
121
|
GenerateMessageStreamChunk,
|
|
122
|
+
ProviderCapabilities,
|
|
121
123
|
} from "./ai";
|
|
122
124
|
|
|
123
125
|
// Schema types
|
|
@@ -136,6 +138,7 @@ export type {
|
|
|
136
138
|
CreateSessionData,
|
|
137
139
|
SaveMessageOptions,
|
|
138
140
|
CollectedStateData,
|
|
141
|
+
SessionUpdateOptions,
|
|
139
142
|
} from "./persistence";
|
|
140
143
|
|
|
141
144
|
// Template types
|
|
@@ -146,7 +149,8 @@ export type {
|
|
|
146
149
|
} from "./template";
|
|
147
150
|
|
|
148
151
|
// Error types
|
|
149
|
-
export { NotImplementedError } from "./errors";
|
|
152
|
+
export { NotImplementedError, SessionConflictError, ProviderError } from "./errors";
|
|
153
|
+
export type { ProviderErrorCode } from "./errors";
|
|
150
154
|
|
|
151
155
|
// Internal — ConditionTemplate is NOT exported from the public surface in v2.
|
|
152
156
|
// It remains internally for the condition evaluator utility.
|
package/src/types/persistence.ts
CHANGED
|
@@ -27,6 +27,11 @@ export interface SessionData<TData = Record<string, unknown>> {
|
|
|
27
27
|
completedAt?: Date;
|
|
28
28
|
createdAt: Date;
|
|
29
29
|
updatedAt: Date;
|
|
30
|
+
/**
|
|
31
|
+
* Optimistic-concurrency version. Incremented by the repository on every
|
|
32
|
+
* update. Undefined on rows written by pre-2.4 versions.
|
|
33
|
+
*/
|
|
34
|
+
version?: number;
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
/**
|
|
@@ -44,6 +49,12 @@ export type CreateSessionData<TData = Record<string, unknown>> = Omit<
|
|
|
44
49
|
* This is a subset of SessionState, stored within SessionData.
|
|
45
50
|
*/
|
|
46
51
|
export interface CollectedStateData<TData = Record<string, unknown>> {
|
|
52
|
+
/**
|
|
53
|
+
* User-defined schema version of the agent that wrote this state.
|
|
54
|
+
* Set from `PersistenceConfig.schemaVersion` on save; checked on load so
|
|
55
|
+
* `migrateSession` can upgrade state written by older agent deployments.
|
|
56
|
+
*/
|
|
57
|
+
schemaVersion?: number;
|
|
47
58
|
data: Partial<TData>;
|
|
48
59
|
flowHistory: SessionState<TData>["flowHistory"];
|
|
49
60
|
history?: SessionState<TData>["history"];
|
|
@@ -72,6 +83,18 @@ export interface MessageData {
|
|
|
72
83
|
createdAt: Date;
|
|
73
84
|
}
|
|
74
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Options for SessionRepository.update
|
|
88
|
+
*/
|
|
89
|
+
export interface SessionUpdateOptions {
|
|
90
|
+
/**
|
|
91
|
+
* Optimistic-concurrency guard. When set, the repository must reject the
|
|
92
|
+
* update with SessionConflictError if the stored session's `version`
|
|
93
|
+
* differs from this value.
|
|
94
|
+
*/
|
|
95
|
+
expectedVersion?: number;
|
|
96
|
+
}
|
|
97
|
+
|
|
75
98
|
/**
|
|
76
99
|
* Repository interface for sessions
|
|
77
100
|
* Implement this interface with your database of choice
|
|
@@ -98,11 +121,17 @@ export interface SessionRepository<TData = Record<string, unknown>> {
|
|
|
98
121
|
findByUserId(userId: string, limit?: number): Promise<SessionData<TData>[]>;
|
|
99
122
|
|
|
100
123
|
/**
|
|
101
|
-
* Update session
|
|
124
|
+
* Update session.
|
|
125
|
+
*
|
|
126
|
+
* When `options.expectedVersion` is provided, the update is a compare-and-swap:
|
|
127
|
+
* it must throw SessionConflictError if the stored `version` differs (rows with
|
|
128
|
+
* no stored version — written by pre-2.4 — are accepted). Every successful
|
|
129
|
+
* update increments `version` by one.
|
|
102
130
|
*/
|
|
103
131
|
update(
|
|
104
132
|
id: string,
|
|
105
|
-
data: Partial<Omit<SessionData<TData>, "id" | "createdAt"
|
|
133
|
+
data: Partial<Omit<SessionData<TData>, "id" | "createdAt">>,
|
|
134
|
+
options?: SessionUpdateOptions
|
|
106
135
|
): Promise<SessionData<TData> | null>;
|
|
107
136
|
|
|
108
137
|
/**
|
|
@@ -229,6 +258,25 @@ export interface PersistenceConfig<TData = Record<string, unknown>> {
|
|
|
229
258
|
* Can also be provided per-call in methods
|
|
230
259
|
*/
|
|
231
260
|
userId?: string;
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Version of the user-defined agent schema. Stamped onto persisted state on
|
|
264
|
+
* save. When a loaded session carries a different (or missing) schemaVersion,
|
|
265
|
+
* `migrateSession` is invoked to upgrade it; without a migrator, a warning is
|
|
266
|
+
* logged and the state is used as-is.
|
|
267
|
+
*/
|
|
268
|
+
schemaVersion?: number;
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Migrate persisted session state written under an older schemaVersion.
|
|
272
|
+
* Receives the stored state and the version it was written with
|
|
273
|
+
* (undefined for pre-versioning rows); must return state valid for the
|
|
274
|
+
* current schemaVersion.
|
|
275
|
+
*/
|
|
276
|
+
migrateSession?: (
|
|
277
|
+
collectedData: CollectedStateData<TData>,
|
|
278
|
+
fromVersion: number | undefined
|
|
279
|
+
) => CollectedStateData<TData> | Promise<CollectedStateData<TData>>;
|
|
232
280
|
}
|
|
233
281
|
|
|
234
282
|
/**
|
package/src/types/session.ts
CHANGED
|
@@ -74,4 +74,13 @@ export interface SessionState<TData = unknown> {
|
|
|
74
74
|
lastUpdatedAt?: Date;
|
|
75
75
|
[key: string]: unknown;
|
|
76
76
|
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Optimistic-concurrency version, managed by the persistence layer.
|
|
80
|
+
* Incremented on every successful save; a save with a stale version
|
|
81
|
+
* throws SessionConflictError instead of silently overwriting state
|
|
82
|
+
* written by a concurrent turn. Undefined for sessions never persisted
|
|
83
|
+
* or persisted by a pre-2.4 version (no conflict check is performed then).
|
|
84
|
+
*/
|
|
85
|
+
version?: number;
|
|
77
86
|
}
|
package/src/types/signals.ts
CHANGED
|
@@ -128,6 +128,18 @@ export interface SignalDirective<TContext = unknown, TData = unknown>
|
|
|
128
128
|
replyWith?: string | ((ctx: SignalContext<TContext, TData>) => string);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
/**
|
|
132
|
+
* A signal directive as reported on the response surface (SignalFiring).
|
|
133
|
+
* `replyWith` has been resolved onto `reply` and stripped by the processor,
|
|
134
|
+
* leaving a directive that is covariant in TContext — which lets firings
|
|
135
|
+
* flow into AgentResponse without casts.
|
|
136
|
+
*/
|
|
137
|
+
export type ResolvedSignalDirective<TContext = unknown, TData = unknown> =
|
|
138
|
+
Directive<TContext, TData> & {
|
|
139
|
+
/** Stop processing remaining signals for this phase after this handler. */
|
|
140
|
+
stopOtherSignals?: boolean;
|
|
141
|
+
};
|
|
142
|
+
|
|
131
143
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
132
144
|
// Signal context (handler argument)
|
|
133
145
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
@@ -311,10 +323,16 @@ export interface SignalFiring<TContext = unknown, TData = unknown> {
|
|
|
311
323
|
reason?: string;
|
|
312
324
|
/** Extracted data when the signal operates in extraction mode. */
|
|
313
325
|
extracted?: unknown;
|
|
314
|
-
/** The directive returned by the signal handler (if any)
|
|
315
|
-
directive?:
|
|
326
|
+
/** The directive returned by the signal handler (if any), with `replyWith` already resolved to `reply`. */
|
|
327
|
+
directive?: ResolvedSignalDirective<TContext, TData>;
|
|
316
328
|
/** Error message if the handler threw. */
|
|
317
329
|
handlerError?: string;
|
|
330
|
+
/**
|
|
331
|
+
* Set when the signal matched in extraction mode (`extract` defined) but the
|
|
332
|
+
* classifier returned no extracted payload — the handler ran with
|
|
333
|
+
* `extracted: undefined`. Independent of `handlerError`.
|
|
334
|
+
*/
|
|
335
|
+
extractionError?: string;
|
|
318
336
|
/** Wall-clock duration of the handler invocation in milliseconds. */
|
|
319
337
|
durationMs?: number;
|
|
320
338
|
}
|
package/src/types/template.ts
CHANGED
|
@@ -83,8 +83,10 @@ export type Template<TContext = unknown, TData = unknown> =
|
|
|
83
83
|
export interface ConditionEvaluationResult {
|
|
84
84
|
/** Result of function evaluations only */
|
|
85
85
|
programmaticResult: boolean;
|
|
86
|
-
/**
|
|
86
|
+
/** Positive string values for AI context. Any one may satisfy the condition. */
|
|
87
87
|
aiContextStrings: string[];
|
|
88
|
+
/** Negative string values for AI context. Any one inhibits the condition. */
|
|
89
|
+
aiExclusionStrings?: string[];
|
|
88
90
|
/** Whether any functions were evaluated */
|
|
89
91
|
hasProgrammaticConditions: boolean;
|
|
90
92
|
/** Detailed evaluation information for debugging */
|
package/src/types/tool.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { Directive } from "./flow";
|
|
|
9
9
|
/**
|
|
10
10
|
* Context provided to tool handlers
|
|
11
11
|
*/
|
|
12
|
-
export interface ToolContext<TContext =
|
|
12
|
+
export interface ToolContext<TContext = unknown, TData = unknown> {
|
|
13
13
|
/** The agent's context data */
|
|
14
14
|
context: TContext;
|
|
15
15
|
/** Complete agent-level data collected so far */
|
|
@@ -47,9 +47,9 @@ export interface ToolContext<TContext = any, TData = any> {
|
|
|
47
47
|
* Result returned by a tool
|
|
48
48
|
*/
|
|
49
49
|
export interface ToolResult<
|
|
50
|
-
TResultData =
|
|
51
|
-
TContext =
|
|
52
|
-
TData =
|
|
50
|
+
TResultData = unknown,
|
|
51
|
+
TContext = unknown,
|
|
52
|
+
TData = unknown
|
|
53
53
|
> {
|
|
54
54
|
/** The result data */
|
|
55
55
|
data?: TResultData;
|
|
@@ -71,9 +71,9 @@ export interface ToolResult<
|
|
|
71
71
|
* Handler function for a tool
|
|
72
72
|
*/
|
|
73
73
|
export type ToolHandler<
|
|
74
|
-
TContext =
|
|
75
|
-
TData =
|
|
76
|
-
TResult =
|
|
74
|
+
TContext = unknown,
|
|
75
|
+
TData = unknown,
|
|
76
|
+
TResult = unknown
|
|
77
77
|
> = (
|
|
78
78
|
context: ToolContext<TContext, TData>,
|
|
79
79
|
args?: Record<string, unknown>
|
|
@@ -90,9 +90,9 @@ export type ToolHandler<
|
|
|
90
90
|
* metadata fields optional. `EnhancedTool` is removed from the public surface.
|
|
91
91
|
*/
|
|
92
92
|
export interface Tool<
|
|
93
|
-
TContext =
|
|
94
|
-
TData =
|
|
95
|
-
TResult =
|
|
93
|
+
TContext = unknown,
|
|
94
|
+
TData = unknown,
|
|
95
|
+
TResult = unknown
|
|
96
96
|
> {
|
|
97
97
|
/** Tool identifier */
|
|
98
98
|
id: string;
|