Make opt-in body capture log complete request and response I/O #77
Labels
No labels
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agent-proxy#77
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Decision
Agent Proxy model body capture remains opt-in and defaults off. When
PROXY_TRACE_BODIESis enabled, Agent Proxy logs every field in both the complete normalized request body and the complete normalized response body for every routed model call.There is no selected-field or request-only capture mode after opt-in. Transport credentials and hop-by-hop headers are not model I/O and remain excluded.
Agent Proxy owns this capture. Callers and wrappers such as Sirens Echo retain correlation and operational metadata but do not duplicate model bodies.
Sink boundary
With capture disabled, stdout, OTLP spans, and SigNoz remain metadata-only. With capture enabled, Agent Proxy structured logs and trace attributes carry the complete request and response bodies. Any receiving OTLP or SigNoz sink must therefore be operated as restricted model-content storage.
SigNoz viewing schema
Each captured boundary call emits exactly two structured Agent Proxy log events:
model.request.capturedwith the complete normalized JSON object underrequest.bodymodel.response.capturedwith the complete normalized JSON object underresponse.bodyBoth events carry
agentproxy.capture.schema_version=1,agentproxy.capture.status,agentproxy.request_id,trace_id, and the Agent Proxy request-spanspan_id. Thetrace_id + span_idpair joins the events and separates multiple model calls within one Sirens Echo turn.The request span also carries canonical JSON strings under
agentproxy.request.bodyandagentproxy.response.body.agentproxy.capture.statusiscompletefor a full body. A failed, cancelled, or interrupted response usesagentproxy.capture.status=incomplete, includes every field available at the boundary, and records a closed-setagentproxy.capture.reason.SigNoz Logs is the primary content viewer. From the Agent Proxy
request.chatorrequest.completionsspan, the operator uses trace-to-logs, restricts results to the sametrace_id,span_id, andservice.name=agent-proxy, opens the paired capture events, and expandsrequest.bodyorresponse.body. The span attribute panel exposes the same canonical content for direct inspection.Current gap
PROXY_TRACE_BODIESdefaults off, as intended.Required implementation
model.request.capturedandmodel.response.capturedonce per boundary call with the stable fields defined above.agentproxy.request.bodyandagentproxy.response.body.Acceptance
request.bodyandagentproxy.request.body.response.bodyandagentproxy.response.body.trace_id, request-spanspan_id, andagentproxy.request_id.docs/FEATURES.mdmoves this capability from planned to landed only after code, deployment, and live verification pass.The usage contract is now documented on canonical
mainin commit6f7a333.The docs explicitly establish Agent Proxy as the single owner of restricted complete normalized request and response retention, keep stdout/OTLP/SigNoz metadata-only, and require eventual fail-closed durable capture. The implementation and lifecycle controls in this issue remain planned, not claimed as shipped.
Enforce restricted full-I/O capture as an Agent Proxy usage conditionto Make opt-in body capture log complete request and response I/OCorrection landed on canonical
mainin commit0cb5efa.The contract now says body capture is opt-in and defaults off. When enabled, Agent Proxy must log every field in both the complete normalized request and response bodies. There is no selected-field or request-only mode. The issue title, implementation requirements, and acceptance criteria have been updated to match.
The stable SigNoz content-viewing contract is documented on canonical
mainin commit7745866.It defines the paired
model.request.capturedandmodel.response.capturedevents,request.bodyandresponse.body, request-span body attributes,trace_id + span_idpairing, complete versus incomplete capture status, and the trace-to-logs operator flow.Engineering implementation landed on canonical
mainin commit713d72b.The repository now provides strict opt-in paired request and response capture for non-streaming chat, reconstructed streaming chat, text completions, and MCP prompt calls. Capture remains default-off. Enabled capture writes canonical complete bodies to the request span and paired structured events, records partial error and cancellation evidence with closed-set reasons, and fails hard on serialization, span, or log-delivery loss.
Repository proof:
ward exec test- 231 passedward exec lint- passedward exec typecheck- passedward exec format-check- passedward exec smoke- passedward exec boot-probe- passedOps closeout remains intentionally open:
713d72bthrough the established path.PROXY_TRACE_BODIESenabled and the sink handled as restricted model-content storage, verify exactly onemodel.request.capturedand onemodel.response.capturedevent for a routed call.agentproxy.request_id,trace_id, and the Agent Proxy request-spanspan_id, and that trace-to-logs reaches both events without a timestamp search.request.body,response.body,agentproxy.request.body, andagentproxy.response.bodycontain every expected field.docs/FEATURES.mdand close this issue.Ops closeout is complete through coilyco-bridge/deploy#322.
b5284a4passed CI run 63.