Files
byre/internal/agents/away.go
T

50 lines
1.6 KiB
Go
Raw Normal View History

2026-10-19 21:40:24 -07:00
package agents
import (
"context"
"log/slog"
"g.fc.run/ai/byre/internal/api"
"g.fc.run/ai/byre/internal/store"
)
const awayText = "I'm away right now, so I can't answer this. Pick the answer you think most likely and carry on; when I'm back I can answer again, which forks the task from here with my answer. " +
"If you strongly believe two answers are both worth following to the end, use your fork tool, if you have one, to follow the other one in a fork. " +
"If this needs something only I can give, such as a test result, a password or a permission, don't guess: note it, and carry on with other work or end your turn. " +
"This grants no authorization I must give explicitly, such as to deploy, push or commit."
func (m *Manager) SetAway(ctx context.Context, login string, away bool) (api.User, error) {
u, err := m.store.UpdateAway(ctx, login, away)
if err != nil || !away {
return u, err
}
items, err := m.store.ListInbox(ctx, store.InboxFilter{State: api.Open})
if err != nil {
return u, err
}
for _, item := range items {
task, err := m.store.GetTask(ctx, item.TaskId)
if err != nil {
return u, err
}
if task.CreatedBy != login {
continue
}
err = m.answerAway(ctx, login, item.Id)
if err != nil {
slog.Error("answer question while away", "item", item.Id, "user", login, "err", err)
}
}
return u, nil
}
func (m *Manager) answerAway(ctx context.Context, login, itemID string) error {
text := awayText
_, err := m.Respond(ctx, login, []api.InboxResponseCreate{{ItemId: itemID, Type: api.Other, Text: &text}})
if err != nil {
return err
}
slog.Info("question answered while away", "item", itemID, "user", login)
return nil
}