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 Unverified
B5690EEEBB952194The 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() { | |||
| 462 | 462 | } | |
| 463 | 463 | } | |
| 464 | 464 | queue = nil | |
| 465 | + | c.setQueuedTurns(0) | |
| 465 | 466 | } | |
| 466 | 467 | for { | |
| 467 | 468 | c.setQueuedTurns(len(queue)) | |
| 468 | 469 | if !interrupted && !running && len(queue) > 0 { | |
| 469 | 470 | active, queue = queue[0], queue[1:] | |
| 471 | + | c.setQueuedTurns(len(queue)) | |
| 470 | 472 | if c.journal != nil { | |
| 471 | 473 | if err := c.journal.RecordTurnStarted(c.spec, active.turnID); err != nil { | |
| 472 | 474 | terminalErr := fmt.Errorf("persist resident child start state: %w", err) | |
| @@ -551,7 +553,6 @@ func (c *ResidentChild) run() { | |||
| 551 | 553 | turnInterrupted = true | |
| 552 | 554 | turnCancel() | |
| 553 | 555 | dropQueued(context.Canceled) | |
| 554 | - | c.setQueuedTurns(0) | |
| 555 | 556 | request.reply <- residentControlReply{ok: true, turnID: active.turnID} | |
| 556 | 557 | } | |
| 557 | 558 | case request := <-c.inbox: | |
| @@ -560,6 +561,7 @@ func (c *ResidentChild) run() { | |||
| 560 | 561 | continue | |
| 561 | 562 | } | |
| 562 | 563 | queue = append(queue, request) | |
| 564 | + | c.setQueuedTurns(len(queue)) | |
| 563 | 565 | request.ack <- nil | |
| 564 | 566 | case result := <-results: | |
| 565 | 567 | running = false | |
| @@ -462,11 +462,13 @@ func (c *ResidentChild) run() { | |||||
| 462 | } | 462 | } | ||
| 463 | } | 463 | } | ||
| 464 | queue = nil | 464 | 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 = true | 553 | 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 | continue | 561 | continue | ||
| 561 | } | 562 | } | ||
| 562 | queue = append(queue, request) | 563 | queue = append(queue, request) | ||
| 564 | + | c.setQueuedTurns(len(queue)) | |||
| 563 | request.ack <- nil | 565 | request.ack <- nil | ||
| 564 | case result := <-results: | 566 | case result := <-results: | ||
| 565 | running = false | 567 | running = false | ||