class InterruptRequestStore(Protocol):
async def remember_interrupt_request(...): ...
async def resolve_interrupt_request(...): ...
async def discard_interrupt_request(...): ...
class NoopInterruptRequestStore(...):
...
runtime = StreamRuntime(interrupt_store=resolved_store)
jsonrpc_handlers use the same adapter instead of getattr/callable probing
🔍 发现的问题 / 原始需求描述
src/opencode_a2a/execution/stream_runtime.py、src/opencode_a2a/jsonrpc/handlers/interrupt_callbacks.py、src/opencode_a2a/server/state_store.py等位置的getattr(...)/callable(...)分支。🛠️ 详细实施方案
getattr。例如为 interrupt request persistence / resolution、state repository initialization 定义Protocol或显式 adapter,并提供 no-op 实现。stream_runtime与interrupt_callbacks中对remember_interrupt_request、discard_interrupt_request、resolve_interrupt_request、resolve_interrupt_session的能力探测,下沉到统一 adapter;调用点只依赖“有该能力的对象”或 no-op 对象。src/opencode_a2a/execution/stream_runtime.py、src/opencode_a2a/jsonrpc/handlers/interrupt_callbacks.py、src/opencode_a2a/server/state_store.py,必要时新增src/opencode_a2a/server/interrupt_store.py或类似 adapter 文件。🧪 回归测试建议
bash ./scripts/doctor.sh。