Don't call a Merge & continue a dismissal of the ready call
This commit is contained in:
@@ -352,7 +352,11 @@ func (m *Manager) Observe(events []api.Event) {
|
||||
go m.promptReady(*ev.TaskId, nil)
|
||||
}
|
||||
switch ev.Kind {
|
||||
case "inbox.created", "inbox.updated", "task.created", "task.merge_queued", "task.merge_after_review", "task.merge_after_review_cancelled", "task.merge_after_review_dropped", "task.merge_started", "task.merged", "task.discarded", "turn.ended", "task.workflow_stage", "task.workflow_finished", "review.started", "review.finished", "task.state", "task.ready", "task.discard_suggested", "task.ready_cleared":
|
||||
case "inbox.created", "inbox.updated", "task.created", "task.merge_queued", "task.merge_after_review", "task.merge_after_review_cancelled", "task.merge_after_review_dropped", "task.merge_started", "task.merged", "task.discarded", "turn.ended", "task.workflow_stage", "task.workflow_finished", "review.started", "review.finished", "task.state", "task.ready", "task.discard_suggested":
|
||||
case "task.ready_cleared":
|
||||
if ev.Payload["reason"] == "merge" {
|
||||
continue
|
||||
}
|
||||
case "user.message":
|
||||
if ev.TaskId == nil || !humanActor(ev.Actor) {
|
||||
continue
|
||||
|
||||
@@ -230,7 +230,7 @@ func (m *Manager) MergeToMain(ctx context.Context, task api.Task, project api.Pr
|
||||
return api.Task{}, err
|
||||
}
|
||||
|
||||
err = m.store.ClearReady(ctx, task.Id, user.Login)
|
||||
err = m.store.ClearReady(ctx, task.Id, user.Login, "merge")
|
||||
if err != nil && !errors.Is(err, store.ErrNotFound) {
|
||||
return api.Task{}, err
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ func (m *Manager) cancelReadyTool(l *live) mcp.Tool {
|
||||
"The human then no longer sees the task as ready to merge or as suggested for discard; call ready_for_merge or suggest_discard again once it holds.",
|
||||
InputSchema: json.RawMessage(`{"type": "object", "properties": {}}`),
|
||||
Handler: func(ctx context.Context, raw json.RawMessage) (string, error) {
|
||||
err := m.store.ClearReady(ctx, l.taskID, agentActor)
|
||||
err := m.store.ClearReady(ctx, l.taskID, agentActor, "")
|
||||
if errors.Is(err, store.ErrNotFound) {
|
||||
return "", fmt.Errorf("%w: this task has no standing ready_for_merge or suggest_discard", ErrConflict)
|
||||
}
|
||||
|
||||
@@ -601,7 +601,7 @@ func (s *Server) CancelMergeAfterReview(w http.ResponseWriter, r *http.Request,
|
||||
}
|
||||
|
||||
func (s *Server) DismissReady(w http.ResponseWriter, r *http.Request, taskID string) {
|
||||
err := s.store.ClearReady(r.Context(), taskID, actor(r))
|
||||
err := s.store.ClearReady(r.Context(), taskID, actor(r), "")
|
||||
if err != nil {
|
||||
writeStoreError(w, err)
|
||||
return
|
||||
|
||||
@@ -789,7 +789,7 @@ func (s *Store) SuggestDiscard(ctx context.Context, id, reason, actor string) er
|
||||
return s.setReady(ctx, id, actor, "discard", "task.discard_suggested", map[string]any{"id": id, "reason": reason})
|
||||
}
|
||||
|
||||
func (s *Store) ClearReady(ctx context.Context, id, actor string) error {
|
||||
func (s *Store) ClearReady(ctx context.Context, id, actor, reason string) error {
|
||||
return s.write(ctx, func(tx *sql.Tx, emit emitFunc) error {
|
||||
projectID := ""
|
||||
err := tx.QueryRowContext(ctx, `UPDATE tasks SET ready = '' WHERE id = ? AND status = ? AND ready != '' RETURNING project_id`, id, string(api.TaskStatusActive)).Scan(&projectID)
|
||||
@@ -799,7 +799,11 @@ func (s *Store) ClearReady(ctx context.Context, id, actor string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return emit(api.Event{Kind: "task.ready_cleared", ProjectId: &projectID, TaskId: &id, Actor: actor, Payload: map[string]any{"id": id}})
|
||||
payload := map[string]any{"id": id}
|
||||
if reason != "" {
|
||||
payload["reason"] = reason
|
||||
}
|
||||
return emit(api.Event{Kind: "task.ready_cleared", ProjectId: &projectID, TaskId: &id, Actor: actor, Payload: payload})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user