Skip to content

v0.107.0 — HITL everywhere

Choose a tag to compare

@wishborn wishborn released this 07 Jul 03:33

Human-in-the-loop, phase 2 (fork issue #4)

  • All providers: client-executed tools and approval-required tools now work on every Text and Structured handler with a tool loop — Azure, DeepSeek, Gemini, Groq, Mistral, Ollama, OpenRouter, Qwen, Requesty, Vertex, xAI, Z, and OpenAI ChatCompletions join Anthropic + OpenAI Responses. Each handler resolves pending approvals before sending, stops its loop on marked tool calls, and carries approval requests on the assistant message for resume correlation.
  • Streaming (Anthropic + OpenAI): pending approvals resolve at stream start (yielding their tool result events); marked tool calls yield ToolApprovalRequestEvents and end the stream with FinishReason::ToolCalls. Stream fixtures + tests ported from upstream prism-php#932.
  • Docs: new core-concepts guide — Human-in-the-Loop — covering client tools, static/conditional approvals, the resume flow, deny-by-default semantics, and streaming events. Ships in the package, so the docs site picks it up automatically.

Remaining on issue #4: streaming emission for the other providers' streams, and the Reverb live demo in the docs site app.

Suite: 1868 passing, PHPStan clean.