This sample hosts built Agent Framework workflows directly with
ResponsesHostServer(workflow=..., parse_response=...); it does not wrap them
with .as_agent().
main.pyparses a typedSloganRequest, builds fresh agents, clients, credentials, executors, and a graph for every hosted request, and keeps stable workflow/executor IDs so a later turn can restore its exact checkpoint.approval.pypauses on an approval request and resumes only after the caller answers the complete pending reply batch. Its "publish" operation is deliberately simulated and makes no external change.
The Foundry sandbox (agent_session_id) is the trusted user-isolation boundary.
Responses response.id/previous_response_id select caller-visible turns
inside that sandbox. The MAF checkpoint ID is private workflow state and is
bound to the exact outer response; none of these IDs is a downstream model
service_session_id.
Use a request-aware factory for multi-turn workflows or pauses. A built
Workflow instance is single-use and is not cloned. Every factory invocation
must create fresh mutable resources, while workflow names and executor IDs
remain stable. store=False is one-shot and cannot expose a resumable pause.
Run locally from this directory with the current workspace:
uv run --no-sync python main.py
# or:
uv run --no-sync python approval.pyExample typed request:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input":"{\"topic\":\"an affordable electric SUV\",\"style\":\"retro\"}","store":true}'An approval response uses the id of each returned
mcp_approval_request. Reusing an old, forged, duplicate, partial, cross-user,
or cross-sandbox reply is rejected.
For Foundry deployment instructions, see the parent README.