A direct sub-agent chat cannot be stopped: no cancel on the instance surface, and the global stop omits the target
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 68/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- javascript, python
Research direction
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.
Written by the indexing model from the issue text.
Description
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
- Open a session, create or open a sub-agent instance, and send it something long-running from the instance composer.
- 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
targetis passed, and the server states what that costs: "targetnames which lane to cancel and must be resolved the same wayturn.sendresolves the lane it binds, or the lookup misses every direct turn: those are registered underdirect_lane(...), never under the bare session key." (raven/rpc/methods/turn.py:650) - The early
returnis 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.
- Dominant language
- Python
- Stars
- 4.1k
- Forks
- 94
- Avg merge
- 16h 34m
- Merged PRs (30d)
- 444
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from EverMind-AI/Raven
-
fix: two error hints tell users to install raven by name, which is Sentry's client on PyPIPossibly taken @TheIrvin claimed this 12 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
EverMind-AI/Raven#845 · 2 comments ·
Maintainers usually reply within 1 day
-
security: tool output scrubbing misses raven's own oauth token filesPossibly taken @akushonkamen claimed this 4 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
EverMind-AI/Raven#842 · 2 comments ·
Maintainers usually reply within 1 day
-
WeChat send silently succeeds when iLink returns non-zero ret with errcode=0May be free again A pull request for this issue was closed without being merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
EverMind-AI/Raven#210 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
EverMind-AI/Raven#121 ·
Maintainers usually reply within 1 day
-
fix(acp_client): on macOS and Windows an ACP agent outlives a host that dies without closing itMay be free again A pull request for this issue was closed without being merged. Openbug
Difficulty 4/5 3-5 days Newbie friendliness 35/100
EverMind-AI/Raven#928 · 5 comments ·
Maintainers usually reply within 1 day
All issues in EverMind-AI/Raven
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
cathrynlavery/diagram-design#441 ·
Maintainers usually reply within 2 days
-
[Cleanup] Include the public header in work_split.cppPossibly taken @blozano-tt claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
tenstorrent/tt-metal#60850 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
backend::sglang bug language::python observability
Difficulty 2/5 Half a day Newbie friendliness 65/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 75/100
OpenShot/openshot-qt#6202 ·
Maintainers usually reply within 1 day