internal/core: ядро-машина состояний (ProcessTurn поверх storage) + история задач в БД
All checks were successful
build-test / build (push) Successful in 1m11s
All checks were successful
build-test / build (push) Successful in 1m11s
- status = единственный источник истины (collecting/ready как фазы диалога) - команды /start /cancel /skip /retry N /status N /continue N - Decider интерфейс (аналитик→opencode, мок для тестов) - task_history таблица для промпта аналитика - allow ready→collecting (правка черновика)
This commit is contained in:
49
internal/core/decider.go
Normal file
49
internal/core/decider.go
Normal file
@@ -0,0 +1,49 @@
|
||||
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" | "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
|
||||
Action string // send | summary | created:N | abort | drop | greeting
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user