fix: stream usa ultimo frame + playground artifact_probe
- streamAnswer: el result final es el ULTIMO answer parseado (frame post-idle, limpio) en vez del mas largo, que podia ser un frame intermedio con spinner. - playground/artifact_probe.go: herramienta de auditoria que corre oneshot + stream contra varios prompts, detecta artefactos del render que se cuelan (box chars, status bar, spinner, palabras pegadas, prompt echo) y verifica consistencia del streaming (concat de deltas == result). Opcional --ref para comparar con claude -p real. No se indexa (playground del padre). El fix del spinner en si vive en parse_claude_tui_go_tui (repo padre): detecta la linea de carga por estructura (glyph + palabra + ellipsis) y firma ((Ns tokens) / esc to interrupt), no por la palabra, que cambia cada frame.
This commit is contained in:
@@ -200,9 +200,11 @@ func streamAnswer(ctx context.Context, bin string, inputs []string, warmup, step
|
||||
}
|
||||
prev = ans
|
||||
}
|
||||
// Keep the longest answer seen as the final, even if a later frame shrank
|
||||
// (transient reflow / parse noise).
|
||||
if len(ans) >= len(final) {
|
||||
// The final result is the LAST non-empty parsed answer. The last snapshot is
|
||||
// emitted after idle (generation stopped), so it is the cleanest frame — no
|
||||
// active spinner, fully rendered. Using "longest seen" instead would let a
|
||||
// noisy mid-generation frame win over the clean final one.
|
||||
if ans != "" {
|
||||
final = ans
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user