Files
ratatoskr-go/internal/core/decider.go
ki.sagidullin 1459670ce9
Some checks failed
CI / test (pull_request) Failing after 34s
CI / build-and-package (amd64, linux) (pull_request) Successful in 34s
CI / build-and-package (amd64, windows) (pull_request) Successful in 36s
refactor: чистка мёртвого кода, лимит ходов D3, HTML-экранирование и UTF-8 обрезка в Telegram
2026-08-18 23:13:04 +05:00

49 lines
1.3 KiB
Go

package core
import (
"context"
"strings"
"github.com/kamelion/ratatoskr-go/internal/storage"
)
// Message — запись диалога.
type Message struct {
Role string // "user" | "assistant"
Content string
}
// Decision — вердикт аналитика.
type Decision struct {
Phase string // "ask" | "propose" | "ready" | "abort"
Draft storage.Task // обновлённые поля черновика
Questions []string // вопросы для phase=ask
ChatReply string // ответ пользователю
}
// Decider — интерфейс для вызова аналитика (opencode).
type Decider interface {
Decide(ctx context.Context, history []Message, draft storage.Task, force bool) (Decision, error)
}
// Result — результат одного хода.
type Result struct {
Reply string
TaskID int64
Status storage.Status
}
// consentPhrases — слова и фразы согласия.
var consentPhrases = []string{"создавай", "подтверждаю", "создать", "ок", "давай", "go"}
// isConsent проверяет, является ли текст согласием на создание.
func isConsent(text string) bool {
t := strings.ToLower(strings.TrimSpace(text))
for _, p := range consentPhrases {
if t == p {
return true
}
}
return false
}