Background
The repo contains a complete StreamingProxy subsystem at agents/Aevatar.GAgents.StreamingProxy/ plus agents/Aevatar.GAgents.StreamingProxyParticipant/. It comes with:
StreamingProxyGAgent, StreamingProxyParticipantGAgent
- Full endpoints (
StreamingProxyEndpoints.cs), room session orchestration, SSE writer
- Projection pipeline (
StreamingProxyRoomSessionEventProjector, *CurrentStateProjector)
- Coordinator (
StreamingProxyNyxParticipantCoordinator.cs)
- ADR-0015 (
docs/adr/0015-agui-sse-projection-session-pipeline.md)
- ~25 source + test files
Now that /v1/responses (and the planned /v1/messages Path B) implement streaming directly on top of LlmSessionGAgent + NyxIdLLMProvider, the StreamingProxy may be:
- Obsolete duplicate streaming surface
- Or still load-bearing for multi-party rooms / NyxID participant coordination
Either way it needs an explicit audit because two parallel SSE paths violate CLAUDE.md "单一主干".
Audit questions
- Who calls
StreamingProxyEndpoints? grep for live callers — frontend (tools/Aevatar.Tools.Cli/Frontend/src/runtime/), demos, production?
- What business capability does it provide that
LlmSessionGAgent + /v1/responses SSE cannot?
- Multi-participant rooms?
- Persisted streaming history?
- Cross-client fanout?
- Is
StreamingProxyNyxParticipantCoordinator still on a hot path? It was central to the older NyxID chat flow — check if NyxIdChat agent still depends on it
- ADR-0015 status — does it accurately describe today's design, or is it stale?
Decision matrix
| Audit outcome |
Action |
No live callers + capability subsumed by /v1/responses |
Delete entire subsystem. Supersede ADR-0015. GAgent count: 19 -> 17 |
| Used by frontend playground only |
Delete prod path, keep minimal demo or move to demos/ |
| Multi-participant rooms still needed |
Keep, but document the boundary with /v1/responses SSE clearly in a new ADR |
| Coordinator still load-bearing for NyxID chat |
Keep that piece, delete the rest, narrow the public surface |
Out of scope
- Re-implementing multi-participant features on top of
LlmSessionGAgent if audit says they're still needed — separate proposal
- Frontend rewrite — depends on audit outcome
Acceptance
- Written audit report with answers to the 4 questions above
- Either a deletion PR (preferred if audit says obsolete) or an ADR explaining what stays and why
- No parallel SSE paths left undocumented
Background
The repo contains a complete
StreamingProxysubsystem atagents/Aevatar.GAgents.StreamingProxy/plusagents/Aevatar.GAgents.StreamingProxyParticipant/. It comes with:StreamingProxyGAgent,StreamingProxyParticipantGAgentStreamingProxyEndpoints.cs), room session orchestration, SSE writerStreamingProxyRoomSessionEventProjector,*CurrentStateProjector)StreamingProxyNyxParticipantCoordinator.cs)docs/adr/0015-agui-sse-projection-session-pipeline.md)Now that
/v1/responses(and the planned/v1/messagesPath B) implement streaming directly on top ofLlmSessionGAgent+ NyxIdLLMProvider, the StreamingProxy may be:Either way it needs an explicit audit because two parallel SSE paths violate CLAUDE.md "单一主干".
Audit questions
StreamingProxyEndpoints? grep for live callers — frontend (tools/Aevatar.Tools.Cli/Frontend/src/runtime/), demos, production?LlmSessionGAgent+/v1/responsesSSE cannot?StreamingProxyNyxParticipantCoordinatorstill on a hot path? It was central to the older NyxID chat flow — check ifNyxIdChatagent still depends on itDecision matrix
/v1/responsesdemos//v1/responsesSSE clearly in a new ADROut of scope
LlmSessionGAgentif audit says they're still needed — separate proposalAcceptance