Add review workflows, tree-shaped workflows and a workflow editor

This commit is contained in:
Ian Gulliver
2026-10-20 18:52:04 -07:00
parent 9869fad988
commit f2188c53eb
31 changed files with 2179 additions and 863 deletions
+17 -11
View File
@@ -174,24 +174,30 @@ func (m *Manager) tryPromptReady(ctx context.Context, taskID string, fromReview
if err != nil {
return err
}
reviews, err := m.store.ListReviews(ctx, taskID)
reviews, err := m.snapshotReviews(ctx, taskID, latest.N)
if err != nil {
return err
}
var review *api.Review
for _, r := range reviews {
if r.SnapshotN == latest.N {
review = &r
if len(reviews) == 0 {
project, err := m.store.GetProject(ctx, task.ProjectId)
if err != nil || project.ReviewWorkflow != "" {
return err
}
}
if review == nil || (review.State != api.ReviewStateDone && review.State != api.ReviewStateSkipped) {
return nil
settled, err := m.reviewsSettled(ctx, reviews)
if err != nil || !settled {
return err
}
if fromReview && review.State == api.ReviewStateDone && review.Result != nil {
findings, _ := (*review.Result)["findings"].([]any)
if len(findings) > 0 {
for _, r := range reviews {
if r.State != api.ReviewStateDone && r.State != api.ReviewStateSkipped {
return nil
}
if fromReview && r.Result != nil {
findings, _ := (*r.Result)["findings"].([]any)
if len(findings) > 0 {
return nil
}
}
}
due, err := m.store.ReadyPromptDue(ctx, taskID)
if err != nil || !due {
@@ -202,7 +208,7 @@ func (m *Manager) tryPromptReady(ctx context.Context, taskID string, fromReview
return err
}
prompt := readyPrompt
if review.State == api.ReviewStateSkipped {
if len(reviews) == 1 && reviews[0].State == api.ReviewStateSkipped {
prompt = readyPromptUnchanged
}
_, err = m.Send(ctx, sess.Id, "byre", prompt, "", "")