Match pending sends by a send id the server echoes
This commit is contained in:
@@ -39,7 +39,7 @@ func (m *Manager) lockDelivery(sessionID string) func() {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model string, images ...string) (api.AgentSession, bool, error) {
|
||||
func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model, sendID string, images ...string) (api.AgentSession, bool, error) {
|
||||
unlock := m.lockDelivery(sessionID)
|
||||
defer unlock()
|
||||
|
||||
@@ -55,7 +55,7 @@ func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model str
|
||||
}
|
||||
held := sess.State == api.AgentSessionStateIdle && sess.Role == api.Implementer && (automatedActor(actor) && m.interrupted(sess.Id) || m.heldForLanding(sess.TaskId, sess.Id))
|
||||
if !held && (sess.State != api.AgentSessionStateRunning || sess.Role != api.Implementer) {
|
||||
sess, err = m.Send(ctx, sessionID, actor, text, model, images...)
|
||||
sess, err = m.Send(ctx, sessionID, actor, text, model, sendID, images...)
|
||||
return sess, false, err
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model str
|
||||
if err != nil {
|
||||
return api.AgentSession{}, false, err
|
||||
}
|
||||
err = m.store.AddTaskInput(ctx, store.TaskInput{TaskID: sess.TaskId, Member: sess.Member, Actor: actor, Text: text, Images: images}, task.ProjectId, sess.Id)
|
||||
err = m.store.AddTaskInput(ctx, store.TaskInput{TaskID: sess.TaskId, Member: sess.Member, Actor: actor, Text: text, Images: images, SendID: sendID}, task.ProjectId, sess.Id)
|
||||
if err != nil {
|
||||
return api.AgentSession{}, false, err
|
||||
}
|
||||
@@ -139,7 +139,7 @@ func (m *Manager) deliverQueued(ctx context.Context, sess api.AgentSession) (boo
|
||||
}
|
||||
|
||||
in := inputs[0]
|
||||
_, err = m.Send(ctx, sess.Id, in.Actor, in.Text, "", in.Images...)
|
||||
_, err = m.Send(ctx, sess.Id, in.Actor, in.Text, "", in.SendID, in.Images...)
|
||||
if errors.Is(err, ErrConflict) {
|
||||
slog.Info("queued message held: session changed state", "session", sess.Id, "task", task.Id, "err", err)
|
||||
return true, nil
|
||||
@@ -171,8 +171,9 @@ func (m *Manager) deliverAllQueued(ctx context.Context) {
|
||||
}
|
||||
|
||||
type queued struct {
|
||||
actor string
|
||||
text string
|
||||
actor string
|
||||
text string
|
||||
sendID string
|
||||
}
|
||||
|
||||
func (m *Manager) takeQueuedMidTurn(ctx context.Context, l *live) []store.TaskInput {
|
||||
@@ -260,6 +261,9 @@ func (m *Manager) recordQueued(ctx context.Context, l *live, msgs []queued) stri
|
||||
if isFindingsMessage(q.actor, q.text) {
|
||||
payload["findings"] = true
|
||||
}
|
||||
if q.sendID != "" {
|
||||
payload["send_id"] = q.sendID
|
||||
}
|
||||
err := m.emit(ctx, l, q.actor, "user.message", payload)
|
||||
if err != nil {
|
||||
slog.Error("record mid-turn message", "session", l.id, "err", err)
|
||||
|
||||
Reference in New Issue
Block a user