suggest_discard again

This commit is contained in:
Ian Gulliver
2026-10-19 20:05:55 -07:00
parent 36f4955a09
commit e7e6fae758
4 changed files with 32 additions and 13 deletions
+11 -3
View File
@@ -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
View File
@@ -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
}