Collapse handoff turns in the transcript instead of streaming them

This commit is contained in:
Ian Gulliver
2026-10-15 10:30:24 -07:00
parent c777409dc1
commit e0d292fd75
7 changed files with 85 additions and 31 deletions
+5 -1
View File
@@ -587,6 +587,10 @@ func (m *Manager) message(ctx context.Context, l *live, actor, text string, imag
if len(images) > 0 {
payload["images"] = images
}
compacting := isHandoffPrompt(actor, text)
if compacting {
payload["handoff"] = true
}
err := m.emit(ctx, l, actor, "user.message", payload)
if err != nil {
return err
@@ -597,7 +601,7 @@ func (m *Manager) message(ctx context.Context, l *live, actor, text string, imag
l.asked = false
l.bounced = false
l.wantCompact = false
l.compacting = isHandoffPrompt(actor, text)
l.compacting = compacting
l.rateLimited = nil
m.mu.Unlock()
+3
View File
@@ -587,6 +587,9 @@ func TestCompactCarriesHandoff(t *testing.T) {
t.Fatalf("handoff turn.ended %v: want handoff and no inbox summary", ev.Payload)
}
}
if ev.Kind == "user.message" && ev.Actor == "byre" && *ev.AgentSessionId == old.Id && ev.Payload["handoff"] != true {
t.Fatalf("handoff prompt %v: want handoff flag", ev.Payload)
}
}
sessions, err := e.store.ListSessions(e.ctx, e.task.Id)
+3
View File
@@ -250,6 +250,9 @@ WHERE json_extract(focus, '$.task_id') IS NOT NULL;
DELETE FROM lead_inputs WHERE text LIKE 'The human switched the right pane %' OR text = 'The human cleared the right pane.';
`}, {"add-task-merging-by", `
ALTER TABLE tasks ADD COLUMN merging_by TEXT NOT NULL DEFAULT '';
`}, {"flag-handoff-prompts", `
UPDATE events SET payload = json_set(payload, '$.handoff', json('true'))
WHERE kind = 'user.message' AND actor = 'byre' AND json_extract(payload, '$.text') LIKE 'Write a handoff for a fresh %';
`}}
type Store struct {