detached ea0e112

fix(subagents): sync queued-turns counter with queue mutations (#230)

* fix(subagents): sync queued-turns counter with queue mutations

* fix(subagents): drop redundant queued-turns reset after interrupt
commit
ea0e1122cd587c8dc0c75d251a03bf0e3b3d15af
author
bnema · · 2026-09-29 04:13 UTC
committer
GitHub · · 2026-09-29 04:13 UTC
parent
a3faff4
signature
GPG UnverifiedB5690EEEBB952194 The key is unknown
refs
tag: v0.46.0
1 file · +3 -1
M packages/agent/subagents/resident_child.go +3 -1
@@ -462,11 +462,13 @@ func (c *ResidentChild) run() {
462462 }
463463 }
464464 queue = nil
465+ c.setQueuedTurns(0)
465466 }
466467 for {
467468 c.setQueuedTurns(len(queue))
468469 if !interrupted && !running && len(queue) > 0 {
469470 active, queue = queue[0], queue[1:]
471+ c.setQueuedTurns(len(queue))
470472 if c.journal != nil {
471473 if err := c.journal.RecordTurnStarted(c.spec, active.turnID); err != nil {
472474 terminalErr := fmt.Errorf("persist resident child start state: %w", err)
@@ -551,7 +553,6 @@ func (c *ResidentChild) run() {
551553 turnInterrupted = true
552554 turnCancel()
553555 dropQueued(context.Canceled)
554- c.setQueuedTurns(0)
555556 request.reply <- residentControlReply{ok: true, turnID: active.turnID}
556557 }
557558 case request := <-c.inbox:
@@ -560,6 +561,7 @@ func (c *ResidentChild) run() {
560561 continue
561562 }
562563 queue = append(queue, request)
564+ c.setQueuedTurns(len(queue))
563565 request.ack <- nil
564566 case result := <-results:
565567 running = false
@@ -462,11 +462,13 @@ func (c *ResidentChild) run() {
462 }462 }
463 }463 }
464 queue = nil464 queue = nil
465+ c.setQueuedTurns(0)
465 }466 }
466 for {467 for {
467 c.setQueuedTurns(len(queue))468 c.setQueuedTurns(len(queue))
468 if !interrupted && !running && len(queue) > 0 {469 if !interrupted && !running && len(queue) > 0 {
469 active, queue = queue[0], queue[1:]470 active, queue = queue[0], queue[1:]
471+ c.setQueuedTurns(len(queue))
470 if c.journal != nil {472 if c.journal != nil {
471 if err := c.journal.RecordTurnStarted(c.spec, active.turnID); err != nil {473 if err := c.journal.RecordTurnStarted(c.spec, active.turnID); err != nil {
472 terminalErr := fmt.Errorf("persist resident child start state: %w", err)474 terminalErr := fmt.Errorf("persist resident child start state: %w", err)
@@ -551,7 +553,6 @@ func (c *ResidentChild) run() {
551 turnInterrupted = true553 turnInterrupted = true
552 turnCancel()554 turnCancel()
553 dropQueued(context.Canceled)555 dropQueued(context.Canceled)
554- c.setQueuedTurns(0)
555 request.reply <- residentControlReply{ok: true, turnID: active.turnID}556 request.reply <- residentControlReply{ok: true, turnID: active.turnID}
556 }557 }
557 case request := <-c.inbox:558 case request := <-c.inbox:
@@ -560,6 +561,7 @@ func (c *ResidentChild) run() {
560 continue561 continue
561 }562 }
562 queue = append(queue, request)563 queue = append(queue, request)
564+ c.setQueuedTurns(len(queue))
563 request.ack <- nil565 request.ack <- nil
564 case result := <-results:566 case result := <-results:
565 running = false567 running = false

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 476

↑↓ moveenter openesc close