Fix diagram layout and clicks; tell agents to yield to image messages

This commit is contained in:
Ian Gulliver
2026-10-23 10:58:01 -07:00
parent eba85a6a1a
commit 4e20fe8a12
5 changed files with 168 additions and 49 deletions
+28 -8
View File
@@ -387,19 +387,27 @@ type midTurn struct {
taskInputs []store.TaskInput
leadInputs []store.LeadInput
responses []string
hinted int64
}
func (m *Manager) deliverMidTurn(ctx context.Context, l *live) midTurn {
if l.owner != "" {
inputs := m.takeLeadQueuedMidTurn(ctx, l)
if len(inputs) == 0 {
return midTurn{}
inputs, held := m.takeLeadQueuedMidTurn(ctx, l)
parts := []string{}
if len(inputs) > 0 {
msgs := []queued{}
for _, in := range inputs {
msgs = append(msgs, queued{actor: in.Actor, text: in.Text, sendID: in.SendID, client: in.Client})
}
parts = append(parts, m.recordQueued(ctx, l, msgs))
}
msgs := []queued{}
for _, in := range inputs {
msgs = append(msgs, queued{actor: in.Actor, text: in.Text, sendID: in.SendID, client: in.Client})
mt := midTurn{leadInputs: inputs}
if hint := m.imagesHint(l, held); hint != "" {
parts = append(parts, hint)
mt.hinted = held.id
}
return midTurn{text: m.recordQueued(ctx, l, msgs), leadInputs: inputs}
mt.text = strings.Join(parts, "\n\n")
return mt
}
unlock := m.lockDelivery(l.id)
@@ -419,7 +427,8 @@ func (m *Manager) deliverMidTurn(ctx context.Context, l *live) midTurn {
mt := midTurn{}
parts := []string{}
mt.taskInputs = m.takeQueuedMidTurn(ctx, l)
inputs, held := m.takeQueuedMidTurn(ctx, l)
mt.taskInputs = inputs
if len(mt.taskInputs) > 0 {
msgs := []queued{}
for _, in := range mt.taskInputs {
@@ -427,6 +436,10 @@ func (m *Manager) deliverMidTurn(ctx context.Context, l *live) midTurn {
}
parts = append(parts, m.recordQueued(ctx, l, msgs))
}
if hint := m.imagesHint(l, held); hint != "" {
parts = append(parts, hint)
mt.hinted = held.id
}
responses, ids := m.responsesMidTurn(ctx, l)
if responses != "" {
parts = append(parts, responses)
@@ -472,6 +485,13 @@ func (m *Manager) restoreMidTurn(ctx context.Context, l *live, mt midTurn) {
slog.Error("mark responses undelivered", "session", l.id, "err", err, "responses", mt.responses)
}
}
if mt.hinted != 0 {
m.mu.Lock()
if l.hintedImages == mt.hinted {
l.hintedImages = 0
}
m.mu.Unlock()
}
slog.Info("mid-turn delivery restored", "session", l.id, "inputs", len(mt.taskInputs)+len(mt.leadInputs), "responses", mt.responses)
}