Demonstrates a struct with injected dependencies (OpenAIClient, Database)
that implements durable.Task directly via an Exec method.
Idiomatic pattern for production services where dependencies are constructed once
and reused across task runs. Also shows WithTaskTimeout, WithTaskMaxRetries,
WithTag, and WithAutoPurge.
Package main demonstrates the struct / method-receiver style of durable-go.
AgentRunner is a production-style struct with injected dependencies.
It implements durable.Task[AgentInput, AgentOutput] so it can be passed
directly to RegisterTask.