Match pending sends by a send id the server echoes
This commit is contained in:
+15
-12
@@ -185,11 +185,11 @@ func (m *Manager) taskFor(ctx context.Context, sess api.AgentSession) (api.Task,
|
||||
return m.store.GetTask(ctx, sess.TaskId)
|
||||
}
|
||||
|
||||
func (m *Manager) Create(ctx context.Context, task api.Task, creator api.User, prompt, model string, images ...string) (api.AgentSession, error) {
|
||||
return m.create(ctx, task, creator, "", prompt, model, creator.Login, images)
|
||||
func (m *Manager) Create(ctx context.Context, task api.Task, creator api.User, prompt, model, sendID string, images ...string) (api.AgentSession, error) {
|
||||
return m.create(ctx, task, creator, "", prompt, model, creator.Login, sendID, images)
|
||||
}
|
||||
|
||||
func (m *Manager) create(ctx context.Context, task api.Task, creator api.User, member, prompt, model, actor string, images []string) (api.AgentSession, error) {
|
||||
func (m *Manager) create(ctx context.Context, task api.Task, creator api.User, member, prompt, model, actor, sendID string, images []string) (api.AgentSession, error) {
|
||||
if creator.GitName == "" || creator.GitEmail == "" {
|
||||
return api.AgentSession{}, ErrNoGitIdentity
|
||||
}
|
||||
@@ -202,7 +202,7 @@ func (m *Manager) create(ctx context.Context, task api.Task, creator api.User, m
|
||||
if err != nil {
|
||||
return api.AgentSession{}, err
|
||||
}
|
||||
return m.turn(ctx, sess, task, actor, prompt, images)
|
||||
return m.turn(ctx, sess, task, actor, prompt, sendID, images)
|
||||
}
|
||||
|
||||
func (m *Manager) newSession(ctx context.Context, task api.Task, creator api.User, member, model string) (api.AgentSession, error) {
|
||||
@@ -235,7 +235,7 @@ func (m *Manager) newSession(ctx context.Context, task api.Task, creator api.Use
|
||||
return sess, err
|
||||
}
|
||||
|
||||
func (m *Manager) Send(ctx context.Context, sessionID, actor, text, model string, images ...string) (api.AgentSession, error) {
|
||||
func (m *Manager) Send(ctx context.Context, sessionID, actor, text, model, sendID string, images ...string) (api.AgentSession, error) {
|
||||
sess, err := m.store.GetSession(ctx, sessionID)
|
||||
if err != nil {
|
||||
return api.AgentSession{}, err
|
||||
@@ -262,7 +262,7 @@ func (m *Manager) Send(ctx context.Context, sessionID, actor, text, model string
|
||||
return api.AgentSession{}, err
|
||||
}
|
||||
|
||||
return m.turn(ctx, sess, task, actor, text, images)
|
||||
return m.turn(ctx, sess, task, actor, text, sendID, images)
|
||||
}
|
||||
|
||||
func (m *Manager) Interrupt(ctx context.Context, sessionID string) (api.AgentSession, error) {
|
||||
@@ -564,12 +564,12 @@ func (m *Manager) Usage(ctx context.Context) (Usage, error) {
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func (m *Manager) turn(ctx context.Context, sess api.AgentSession, task api.Task, actor, text string, images []string) (api.AgentSession, error) {
|
||||
func (m *Manager) turn(ctx context.Context, sess api.AgentSession, task api.Task, actor, text, sendID string, images []string) (api.AgentSession, error) {
|
||||
err := m.startRunning(ctx, sess, task.Id, actor)
|
||||
if err != nil {
|
||||
return api.AgentSession{}, err
|
||||
}
|
||||
return m.launch(ctx, sess, task, actor, text, images)
|
||||
return m.launch(ctx, sess, task, actor, text, sendID, images)
|
||||
}
|
||||
|
||||
func (m *Manager) startRunning(ctx context.Context, sess api.AgentSession, taskID, actor string) error {
|
||||
@@ -591,8 +591,8 @@ func (m *Manager) startRunning(ctx context.Context, sess api.AgentSession, taskI
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Manager) launch(ctx context.Context, sess api.AgentSession, task api.Task, actor, text string, images []string) (api.AgentSession, error) {
|
||||
imgs, compacting, err := m.recordMessage(ctx, sess, task, actor, text, images)
|
||||
func (m *Manager) launch(ctx context.Context, sess api.AgentSession, task api.Task, actor, text, sendID string, images []string) (api.AgentSession, error) {
|
||||
imgs, compacting, err := m.recordMessage(ctx, sess, task, actor, text, sendID, images)
|
||||
if err != nil {
|
||||
m.failStart(ctx, sess.Id, actor, err)
|
||||
return api.AgentSession{}, err
|
||||
@@ -691,7 +691,7 @@ func transition(ctx context.Context, st *store.Store, id string, from, to api.Ag
|
||||
}
|
||||
|
||||
func (m *Manager) message(ctx context.Context, sess api.AgentSession, task api.Task, l *live, actor, text string, images []string) error {
|
||||
imgs, compacting, err := m.recordMessage(ctx, sess, task, actor, text, images)
|
||||
imgs, compacting, err := m.recordMessage(ctx, sess, task, actor, text, "", images)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -707,7 +707,7 @@ func (m *Manager) send(ctx context.Context, l *live, text string, imgs []image)
|
||||
return m.store.MarkSessionDelivered(ctx, l.id)
|
||||
}
|
||||
|
||||
func (m *Manager) recordMessage(ctx context.Context, sess api.AgentSession, task api.Task, actor, text string, images []string) ([]image, bool, error) {
|
||||
func (m *Manager) recordMessage(ctx context.Context, sess api.AgentSession, task api.Task, actor, text, sendID string, images []string) ([]image, bool, error) {
|
||||
implementer := sess.Role == api.Implementer
|
||||
if implementer && isMergeInPrompt(actor, text) {
|
||||
m.ownMerge(sess.Id, task.Id, task.WorktreePath)
|
||||
@@ -738,6 +738,9 @@ func (m *Manager) recordMessage(ctx context.Context, sess api.AgentSession, task
|
||||
if isFindingsMessage(actor, text) {
|
||||
payload["findings"] = true
|
||||
}
|
||||
if sendID != "" {
|
||||
payload["send_id"] = sendID
|
||||
}
|
||||
err = m.store.RecordTurnMessage(ctx, sess.Id, newEvent(sess.Id, sess.Owner, task.ProjectId, task.Id, actor, "user.message", payload))
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
|
||||
Reference in New Issue
Block a user