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::GuardForbade
ContinuationEvaluationincludesstopReasonfield- Removed
ContinuationCriteria::inferStopReason()(stop reasons now come from criteria directly) - New state contracts:
CanMarkExecutionStarted,CanMarkStepStarted,CanTrackExecutionTime
Command Builders (agent-ctrl)
ClaudeCommandBuilder, CodexCommandBuilder, OpenCodeCommandBuilder:
stdbuf -o0prefix now conditional (checks availability)- Skipped on Windows
- Skipped when
stdbufnot found on PATH (fixes macOS) - Override via
COGNESY_STDBUFenv 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