Where: internal/service/agent/registry_orchestrator.go:161-208
streamSink.finish packs terminated_by / partial / max_reached / iterations into the end chunk's Metadata (eino_sink.go:167-181), but the orchestrator's switch event handles only tool_call / tool_result / error — there is no case "end".
The streaming client therefore never learns the answer is a truncated/limit-hit degraded result.
Combined with #1, a streaming user receives concatenated partial + wind-down text with no degradation signal, whereas the buffered Response.Metadata carries all of it.
Where: internal/service/agent/registry_orchestrator.go:161-208
streamSink.finish packs terminated_by / partial / max_reached / iterations into the end chunk's Metadata (eino_sink.go:167-181), but the orchestrator's switch event handles only tool_call / tool_result / error — there is no case "end".
The streaming client therefore never learns the answer is a truncated/limit-hit degraded result.
Combined with #1, a streaming user receives concatenated partial + wind-down text with no degradation signal, whereas the buffered Response.Metadata carries all of it.