v0.13.0 — compose tools + response_format (agentic flow ending in structured JSON)

/openai/v1/chat/completions now accepts `tools` and `response_format` in the
same request. They describe different turn types, like OpenAI:

- tool-call turn -> tool_calls / finish_reason "tool_calls" (never
  schema-checked);
- final answer turn -> schema-validated (with retry) canonical JSON /
  finish_reason "stop".

The tools directive carries the final-answer schema so both exits are stated
coherently. Enabled by a new early_accept escape in
shared/runner.py:run_with_json_retry that short-circuits a tool-call turn
instead of retrying it as a schema failure.

tools + stream=true still -> 400 (planned follow-up). Additive: the v0.12.0 400
on tools+response_format is removed; non-combined requests unchanged.

190 tests passing. Ships psyb0t/aicodebox:v0.13.0.