Lead messages mid-turn

This commit is contained in:
Ian Gulliver
2026-10-18 00:12:42 -07:00
parent 1e3cc2d0c0
commit 2ed0adae90
6 changed files with 21 additions and 16 deletions
+9 -8
View File
@@ -39,40 +39,41 @@ func (m *Manager) lockDelivery(sessionID string) func() {
}
}
func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model string, images ...string) (api.AgentSession, error) {
func (m *Manager) Message(ctx context.Context, sessionID, actor, text, model string, images ...string) (api.AgentSession, bool, error) {
unlock := m.lockDelivery(sessionID)
defer unlock()
sess, err := m.store.GetSession(ctx, sessionID)
if err != nil {
return api.AgentSession{}, err
return api.AgentSession{}, false, err
}
if sess.State != api.AgentSessionStateRunning || sess.Role != api.Implementer {
return m.Send(ctx, sessionID, actor, text, model, images...)
sess, err = m.Send(ctx, sessionID, actor, text, model, images...)
return sess, false, err
}
if model != "" && model != sess.Model {
err = checkModel(sess, model)
if err != nil {
return api.AgentSession{}, err
return api.AgentSession{}, false, err
}
err = m.store.SetSessionModel(ctx, sess.Id, model, actor)
if err != nil {
return api.AgentSession{}, err
return api.AgentSession{}, false, err
}
sess.Model = model
}
task, err := m.store.GetTask(ctx, sess.TaskId)
if err != nil {
return api.AgentSession{}, err
return api.AgentSession{}, false, err
}
err = m.store.AddTaskInput(ctx, store.TaskInput{TaskID: sess.TaskId, Actor: actor, Text: text, Images: images}, task.ProjectId, sess.Id)
if err != nil {
return api.AgentSession{}, err
return api.AgentSession{}, false, err
}
slog.Info("message queued", "session", sess.Id, "task", sess.TaskId, "actor", actor)
return sess, nil
return sess, true, nil
}
func (m *Manager) Withdraw(ctx context.Context, taskID string, inputID int64, actor string) error {