Share snapshot classification across review and readiness queries
This commit is contained in:
@@ -33,8 +33,7 @@ func (s *Store) SettleMergeFacts(ctx context.Context, taskID string, g GitFacts)
|
|||||||
}
|
}
|
||||||
|
|
||||||
f := api.MergeFacts{UnmergedCommits: g.UnmergedCommits, UnmergedFiles: g.UnmergedFiles, UnreviewedChanges: g.UnreviewedChanges}
|
f := api.MergeFacts{UnmergedCommits: g.UnmergedCommits, UnmergedFiles: g.UnmergedFiles, UnreviewedChanges: g.UnreviewedChanges}
|
||||||
err = tx.QueryRowContext(ctx, `SELECT coalesce(max(n), 0) FROM snapshots WHERE task_id = ? AND trigger NOT IN (?, ?, ?)`,
|
err = tx.QueryRowContext(ctx, `SELECT coalesce(max(n), 0) FROM snapshots WHERE task_id = ? AND trigger NOT IN `+cutPointTriggers, taskID).Scan(&f.ReviewSnapshot)
|
||||||
taskID, string(api.SnapshotTriggerAnswer), string(api.SnapshotTriggerFork), string(api.SnapshotTriggerAskHuman)).Scan(&f.ReviewSnapshot)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import (
|
|||||||
"g.fc.run/ai/byre/internal/api"
|
"g.fc.run/ai/byre/internal/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const cutPointTriggers = `('answer', 'fork', 'ask_human')`
|
||||||
|
|
||||||
const snapshotColumns = `id, task_id, agent_session_id, n, commit_sha, tree_sha, event_seq, trigger, created_at`
|
const snapshotColumns = `id, task_id, agent_session_id, n, commit_sha, tree_sha, event_seq, trigger, created_at`
|
||||||
|
|
||||||
func (s *Store) CreateSnapshot(ctx context.Context, snap api.Snapshot, projectID string) error {
|
func (s *Store) CreateSnapshot(ctx context.Context, snap api.Snapshot, projectID string) error {
|
||||||
@@ -17,11 +19,9 @@ func (s *Store) CreateSnapshot(ctx context.Context, snap api.Snapshot, projectID
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !CutPoint(snap.Trigger) {
|
_, err = tx.ExecContext(ctx, `UPDATE tasks SET ready = '' WHERE id = ? AND ? NOT IN `+cutPointTriggers, snap.TaskId, string(snap.Trigger))
|
||||||
_, err = tx.ExecContext(ctx, `UPDATE tasks SET ready = '' WHERE id = ?`, snap.TaskId)
|
if err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return emit(api.Event{
|
return emit(api.Event{
|
||||||
Kind: "snapshot.created",
|
Kind: "snapshot.created",
|
||||||
@@ -68,13 +68,8 @@ func (s *Store) LastSnapshot(ctx context.Context, taskID string) (api.Snapshot,
|
|||||||
return snap, err
|
return snap, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func CutPoint(trigger api.SnapshotTrigger) bool {
|
|
||||||
return trigger == api.SnapshotTriggerAnswer || trigger == api.SnapshotTriggerFork || trigger == api.SnapshotTriggerAskHuman
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Store) LastReviewable(ctx context.Context, taskID string) (api.Snapshot, error) {
|
func (s *Store) LastReviewable(ctx context.Context, taskID string) (api.Snapshot, error) {
|
||||||
snap, err := scanSnapshot(s.db.QueryRowContext(ctx, `SELECT `+snapshotColumns+` FROM snapshots WHERE task_id = ? AND trigger NOT IN (?, ?, ?) ORDER BY n DESC LIMIT 1`,
|
snap, err := scanSnapshot(s.db.QueryRowContext(ctx, `SELECT `+snapshotColumns+` FROM snapshots WHERE task_id = ? AND trigger NOT IN `+cutPointTriggers+` ORDER BY n DESC LIMIT 1`, taskID))
|
||||||
taskID, string(api.SnapshotTriggerAnswer), string(api.SnapshotTriggerFork), string(api.SnapshotTriggerAskHuman)))
|
|
||||||
if errors.Is(err, sql.ErrNoRows) {
|
if errors.Is(err, sql.ErrNoRows) {
|
||||||
return snap, ErrNotFound
|
return snap, ErrNotFound
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -772,9 +772,9 @@ func (s *Store) ReadyPromptDue(ctx context.Context, id string) (bool, error) {
|
|||||||
err := s.db.QueryRowContext(ctx, `SELECT EXISTS (
|
err := s.db.QueryRowContext(ctx, `SELECT EXISTS (
|
||||||
SELECT 1 FROM events e, tasks t
|
SELECT 1 FROM events e, tasks t
|
||||||
WHERE t.id = ? AND e.task_id = t.id AND e.seq > t.ready_prompt_seq
|
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') NOT IN (?, ?, ?))
|
AND ((e.kind = 'snapshot.created' AND json_extract(e.payload, '$.trigger') NOT IN `+cutPointTriggers+`)
|
||||||
OR (e.kind = 'user.message' AND e.actor != ? AND e.actor NOT LIKE '% (lead)' AND json_extract(e.payload, '$.bounce') IS NOT 1))
|
OR (e.kind = 'user.message' AND e.actor != ? AND e.actor NOT LIKE '% (lead)' AND json_extract(e.payload, '$.bounce') IS NOT 1))
|
||||||
)`, id, string(api.SnapshotTriggerAnswer), string(api.SnapshotTriggerFork), string(api.SnapshotTriggerAskHuman), agentActor).Scan(&due)
|
)`, id, agentActor).Scan(&due)
|
||||||
return due, err
|
return due, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user