* feat(hosting-invocations): add Invocations channel package
New ``agent-framework-hosting-invocations`` package implementing the
"Invocations" HTTP channel for the Hosting framework -- a lightweight
JSON-over-HTTP shape (``POST /invocations``) for callers that want a
single request/response without committing to the full OpenAI Responses
envelope. Mounts onto an ``AgentFrameworkHost`` like any other channel.
Surface (re-exported from ``agent_framework_hosting_invocations``):
- ``InvocationsChannel`` -- concrete ``Channel`` implementation. Owns
the Starlette route, parses inbound JSON into a ``ChannelRequest``
(``input`` / ``session`` / ``metadata`` / ``options``), runs the
optional ``ChannelRunHook``, calls back into the ``ChannelContext``
to invoke the agent target, and returns a flat JSON envelope (or an
SSE stream when ``stream=true``).
- 8 unit tests covering route wiring, isolation-key passthrough, hook
composition, sync vs streaming paths, and ack-only behaviour for
non-originating ``DeliveryReport``s.
Registers the package in ``python/pyproject.toml`` ``[tool.uv.sources]``
and adds the matching pyright ``executionEnvironments`` entry.
Independent of PR-3 (Responses); both depend only on PR-2 (Hosting
core).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* review: address PR-4 round 2 feedback
- expand `_stream` docstring to call out the HTTP-200 + `event: error`
SSE contract (status committed before generator runs; hard failures
surface as the first SSE frame, not an HTTP code)
- split chunked text on full-line terminators via `splitlines()` so
embedded `\r` / `\r\n` no longer leak into `data:` framing on the
wire, breaking EventSource consumers
- on `get_final_response()` failure, emit `event: error` instead of
silently swallowing — finalize is what triggers
history-provider persistence on the agent side, so a 5xx /
disk-full / context-provider error must reach the client
- add tests covering `stream_transform_hook` (rewrite, drop, async),
CRLF-in-chunk framing, and the finalize-error → no-`[DONE]` contract
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(hosting-invocations): rename stale ChatMessage docstring reference to Message
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(hosting-invocations): adapt to hosted run result wrapper
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(hosting-invocations): add response hooks
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Eduard van Valkenburg
·
2026-05-28 14:08:34 +02:00