suggest_discard again
This commit is contained in:
@@ -156,15 +156,23 @@ func (m *Manager) tryPromptReady(ctx context.Context, taskID string, fromReview
|
||||
return nil
|
||||
}
|
||||
}
|
||||
prompted, err := m.store.ReadyPromptN(ctx, taskID)
|
||||
if err != nil || prompted >= latest.N {
|
||||
due, err := m.store.ReadyPromptDue(ctx, taskID)
|
||||
if err != nil || !due {
|
||||
return err
|
||||
}
|
||||
open, err := m.store.ListInbox(ctx, store.InboxFilter{TaskID: taskID, State: api.Open})
|
||||
if err != nil || len(open) > 0 {
|
||||
return err
|
||||
}
|
||||
_, err = m.Send(ctx, sess.Id, "byre", readyPrompt, "")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = m.store.SetReadyPromptN(ctx, taskID, latest.N)
|
||||
seq, err := m.store.LastTaskSeq(ctx, taskID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = m.store.SetReadyPromptSeq(ctx, taskID, seq)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
ALTER TABLE tasks ADD COLUMN ready_prompt_seq INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
UPDATE tasks SET ready_prompt_seq = COALESCE((
|
||||
SELECT MAX(e.seq) FROM events e
|
||||
WHERE e.task_id = tasks.id AND e.kind = 'user.message' AND e.actor = 'byre'
|
||||
AND json_extract(e.payload, '$.text') LIKE 'Your turn has ended and the review of your latest work has finished.%'
|
||||
), 0);
|
||||
|
||||
ALTER TABLE tasks DROP COLUMN ready_prompt_n;
|
||||
+11
-9
@@ -746,17 +746,19 @@ func (s *Store) SetTaskSummary(ctx context.Context, id, summary, actor string) e
|
||||
})
|
||||
}
|
||||
|
||||
func (s *Store) ReadyPromptN(ctx context.Context, id string) (int, error) {
|
||||
n := 0
|
||||
err := s.db.QueryRowContext(ctx, `SELECT ready_prompt_n FROM tasks WHERE id = ?`, id).Scan(&n)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return 0, ErrNotFound
|
||||
}
|
||||
return n, err
|
||||
func (s *Store) ReadyPromptDue(ctx context.Context, id string) (bool, error) {
|
||||
due := false
|
||||
err := s.db.QueryRowContext(ctx, `SELECT EXISTS (
|
||||
SELECT 1 FROM events e, tasks t
|
||||
WHERE t.id = ? AND e.task_id = t.id AND e.seq > t.ready_prompt_seq
|
||||
AND ((e.kind = 'snapshot.created' AND json_extract(e.payload, '$.trigger') != ?)
|
||||
OR (e.kind = 'user.message' AND e.actor NOT IN ('byre', ?) AND e.actor NOT LIKE '% (lead)'))
|
||||
)`, id, string(api.SnapshotTriggerAnswer), agentActor).Scan(&due)
|
||||
return due, err
|
||||
}
|
||||
|
||||
func (s *Store) SetReadyPromptN(ctx context.Context, id string, snapshotN int) error {
|
||||
_, err := s.db.ExecContext(ctx, `UPDATE tasks SET ready_prompt_n = ? WHERE id = ?`, snapshotN, id)
|
||||
func (s *Store) SetReadyPromptSeq(ctx context.Context, id string, seq int64) error {
|
||||
_, err := s.db.ExecContext(ctx, `UPDATE tasks SET ready_prompt_seq = ? WHERE id = ?`, seq, id)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user