v1.20.0
Breaking Changes¶
Renames¶
ReverbAgentEventAdapter→AgentEventEnvelopeAdapterToolRegistryContract→ToolRegistryInterfaceDeterministicDriver→DeterministicAgentDriver
Agent¶
AgentStatenow implementsCanMarkExecutionStarted,CanMarkStepStarted,CanTrackExecutionTime- Added
AgentState::recordStep(),AgentState::failWith(),AgentState::withAddedExecutionTime() Agent::applyStep()andAgent::handleError()delegate toAgentStatemethods
StepByStep / Continuation¶
- New
CanProvideStopReasoninterface for criteria to provide explicit stop reasons - All continuation criteria implement
CanProvideStopReason: StepsLimit→StopReason::StepsLimitReachedTokenUsageLimit→StopReason::TokenLimitReachedExecutionTimeLimit,CumulativeExecutionTimeLimit→StopReason::TimeLimitReachedErrorPolicyCriterion→StopReason::ErrorForbadeFinishReasonCheck→StopReason::FinishReasonReceivedErrorPresenceCheck,RetryLimit→StopReason::GuardForbadeContinuationEvaluationincludesstopReasonfield- Removed
ContinuationCriteria::inferStopReason()(stop reasons now come from criteria directly) - New state contracts:
CanMarkExecutionStarted,CanMarkStepStarted,CanTrackExecutionTime
Command Builders (agent-ctrl)¶
ClaudeCommandBuilder, CodexCommandBuilder, OpenCodeCommandBuilder:
- stdbuf -o0 prefix now conditional (checks availability)
- Skipped on Windows
- Skipped when stdbuf not found on PATH (fixes macOS)
- Override via COGNESY_STDBUF env var: 0 = disable, 1 = force
Polyglot / Inference¶
InferenceExecution::usage(): fixed double-counting of current attemptInferenceResponse: added<think>...</think>tag parsing for reasoning content fallback- New
ReasoningContentSplitdata class AnthropicBodyFormat: cache marking applies only to last message in sequence (was all messages)DeepseekResponseAdapter: supportsreasoning,analysisfields as alternatives toreasoning_contentInference::with(): parameters now nullable (passnullto skip, was required empty values)PendingInference::asJson(),asJsonData(): use proper JSON extraction with output mode
HTTP Client¶
CurlHandle::close(): removedcurl_close()call (no-op since PHP 8.0, deprecated in PHP 8.5)
Instructor¶
StructuredOutputStream: fixed execution reference update during streaming to capture accumulated usage