A direct sub-agent chat cannot be stopped: no cancel on the instance surface, and the global stop omits the target

Chiusa
#459 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@kaguranananana ci sta già lavorando.

Dal 28/10/2026.

  • #1140 di @kaguranananana — aperta

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
javascript, python
Ambito
api, frontend

Direzione di ricerca

Start in ui-web/src/live/230-tabs.js and ui-web/src/live/080-overrides.js, then read the turn.cancel handling documented in raven/rpc/methods/turn.py around line 650. Reproduce a long-running direct instance turn and trace how turn.send resolves its target versus how DS.composer.stop chooses the lane. Done means a direct instance turn can be stopped from the page without the global stop silently missing it.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

A direct chat with a sub-agent instance cannot be stopped from the page. The instance surface exposes no cancel, and the global stop cannot reach one: it sends turn.cancel without a target, which the server documents as missing every direct turn. The backend can already do it -- turn.cancel accepts a target and cancels a direct lane correctly when one is passed.

Steps to reproduce

  1. Open a session, create or open a sub-agent instance, and send it something long-running from the instance composer.
  2. Look for a way to stop it, on the instance surface and with the global stop (the go button's other half, or Esc).

Expected behavior

A turn a person started can be stopped by that person. The main agent's turn can be, and a direct turn is started from the same composer with the same turn.send.

Actual behavior

Nothing stops it. The two halves of the same conversation are asymmetric:

send stop
main agent turn.send { session_key } turn.cancel { session_key } -- works
direct instance chat turn.send { session_key, target: { agent, handle } } (ui-web/src/live/230-tabs.js:65) no call exists

The instance surface in 230-tabs.js offers instanceHistory, instanceForget, instanceSend, instanceCreate, instanceMode, instanceSetMode, instanceSetModel. There is no cancel; stop, cancel, busy and cancellable do not appear in that file at all.

The global stop cannot substitute, for two separate reasons:

// ui-web/src/live/080-overrides.js:561
DS.composer.stop = function () {
  if (!turn.cancellable()) return;
  const owner = sessionCurrent();
  ...
  rpc.call('turn.cancel', { session_key: owner })
  • No target is passed, and the server states what that costs: "target names which lane to cancel and must be resolved the same way turn.send resolves the lane it binds, or the lookup misses every direct turn: those are registered under direct_lane(...), never under the bare session key." (raven/rpc/methods/turn.py:650)
  • The early return is silent, so on the path where the guard does not hold the reader gets no feedback at all -- the same nothing as a stop that ran and found nothing to stop.

The backend is not the gap

turn.cancel with a target works. Cancelling two live direct turns over /rpc today:

turn.cancel {"session_key": "<session>", "target": {"agent": "Raven-Design", "handle": "<handle>"}}
  -> {"cancelled": true}

Both instances stopped, and a subsequent turn.send to the same handles started clean turns. So this is the page not wiring a capability that is already there and already shaped for it.

Environment

macOS, raven from the repo working tree, web UI at current main.

Note on scope

Whether the control belongs on the instance surface, or the global stop should resolve the lane the composer is currently addressing, is a design call for whoever owns the composer -- the second would also fix the silent return for free, since a direct turn would then be cancellable. Filing the defect rather than the fix.

Lingua principale
Python
Stelle
4.1k
Fork
94
Merge medio
1g 23h
PR unite (30g)
221

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di EverMind-AI/Raven

Tutte le issue di EverMind-AI/Raven

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.