v0.8.0 — typed workflow state
Additive release, no breaking changes.
Typed state classes. A workflow can now declare a WorkflowState subclass and the engine hydrates it for every step, prompt closure, condition, predicate, and post-resume continuation:
public function stateClass(): string
{
return ContractReviewState::class;
}Typed accessors, IDE completion, and one class that knows where things live — while the storage stays the same schemaless JSON checkpoint. Fully opt-in: workflows without stateClass() behave exactly as before, the base get()/set() API still works on subclasses, and the state class is excluded from the definition hash so adopting one never strands in-flight runs.
WorkflowState::output(). Step outputs addressed by class instead of structural paths, on every state instance:
$state->output(RiskAnalysisAgent::class)?->structured('riskScore');
$state->output(DraftReplyAgent::class)?->text();Full write-up: docs/typed-state.md.