A stalled reply says it is asking again while Escape only goes Home
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 68/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Domaine
- cli, testing-qa
Piste de recherche
Start with internal/session/loop.go:2694 and :2471, then inspect internal/tui3/failurerow.go:56 to trace both retry notices and Escape handling. Reproduce through codeaf chat in tmux with the provided stub.py, then add the requested unit and e2e coverage so the displayed promise and request state match Escape's actual effect; update the retry manual and invalidates.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Found on santos/dev2 at 008363c98 (#1410). It reaches dev when #1410 merges.
What happened
On a mid-reply stall, the person saw the model went quiet mid-reply — asking again. The documented wait line no answer N in T · still asking · esc stops was never drawn for that shape. In a conversation, Escape went Home while the re-ask continued in the background. The re-ask behavior is new relative to dev, whose corresponding hand test gave up after two attempts.
Replication
Deterministic (no model). A stub provider that sends one content chunk and then holds the connection open. Save it as stub.py:
# stub.py: a provider whose every reply is one content chunk.
# python3 stub.py cut -> then the connection closes (no finish_reason, no [DONE])
# python3 stub.py hold -> then the connection stays open for ten minutes
import json, sys, time
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
MODE = sys.argv[1]
MODEL = "deepseek/deepseek-v4-flash"
class H(BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
def log_message(self, *a): pass
def do_GET(self): # the model listing
b = json.dumps({"object": "list", "data": [{"id": MODEL, "object": "model"}]}).encode()
self.send_response(200); self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(b))); self.end_headers(); self.wfile.write(b)
def do_POST(self):
self.rfile.read(int(self.headers.get("Content-Length", "0")))
self.send_response(200); self.send_header("Content-Type", "text/event-stream")
self.send_header("Connection", "close"); self.end_headers()
chunk = {"id": "c", "object": "chat.completion.chunk", "model": MODEL,
"choices": [{"index": 0, "delta": {"content": "Partial ans"}, "finish_reason": None}]}
self.wfile.write(("data: " + json.dumps(chunk) + "\n\n").encode()); self.wfile.flush()
if MODE == "hold": time.sleep(600)
self.close_connection = True
srv = ThreadingHTTPServer(("", 0), H)
print("http://0.0.0.0:%d/v1" % srv.server_address[1], flush=True)
srv.serve_forever()
export CODEAF_HOME=$(mktemp -d) HOME=$(mktemp -d) OPENROUTER_API_KEY=<any non-empty value>
U=$(mktemp); python3 stub.py hold > "$U" & sleep 1
R=$(mktemp -d) && git -C "$R" init -q && cd "$R"
CODEAF_BASE_URL="$(cat "$U")" codeaf chat --no-host
Send reply with the word OK and wait about a minute. Today the row reads the model went quiet mid-reply — asking again and the request is sent again roughly every 47 s; no answer … still asking · esc stops is never drawn. Press esc: Home opens and the stub keeps receiving requests.
Field (real models). A real provider stall does the same, but it cannot be summoned; the stub is the replication.
Where
internal/session/loop.go:2694 emits the quiet-mid-reply notice; :2471 formats the distinct no answer … esc stops line. internal/tui3/failurerow.go:56 draws the retry event.
The fix
Make the visible escape promise match the actual key behavior on every retry shape. If Escape is meant to stop this wait, route it to the active request before navigating Home; otherwise remove esc stops from the wait line and document background continuation.
Acceptance
- e2e: through
codeaf chatin tmux against a stalled stub, the displayed line accurately predicts Escape's effect, and the request state follows that effect. - Unit: tests cover both notice strings and the active-turn Escape route.
- Update the retry manual and
invalidates.
- Langage dominant
- Go
- Étoiles
- 115
- Forks
- 14
- Merge moyen
- 9 h 35 min
- PR mergées (30 j)
- 752
Préparer son environnement
Nous n'avons pas encore vérifié les fichiers d'installation de ce projet. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Agent-Field/CodeAF
-
area:chat bug sev:papercut
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
Agent-Field/CodeAF#1592 ·
Les mainteneurs répondent en général sous 1 jour
-
area:headless bug sev:critical
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Agent-Field/CodeAF#1566 ·
Les mainteneurs répondent en général sous 1 jour
-
tui3: slash command completion inserts bare command prefix into prompt instead of navigatingOuvertearea:chat bug sev:critical
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Agent-Field/CodeAF#1548 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
area:chat feature
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Agent-Field/CodeAF#1510 ·
Les mainteneurs répondent en général sous 1 jour
-
area:tests bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Agent-Field/CodeAF#1489 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de Agent-Field/CodeAF
Issues similaires
-
bug needs triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
bug P2 reliability
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
afreidah/s3-orchestrator#1564 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
blinklabs-io/gouroboros#2577 ·
Les mainteneurs répondent en général sous 1 jour
-
agentic-workflows
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour