feat(analyst): этапы задачи — аналитик раскладывает на steps с критериями готовности, dev идёт по ним
Some checks failed
CI / test (push) Failing after 1m52s
CI / build-and-package (amd64, linux) (push) Failing after 1m3s
CI / build-and-package (amd64, windows) (push) Successful in 30s

This commit is contained in:
ki.sagidullin
2026-08-24 18:05:06 +05:00
parent 6546f18348
commit 6c0b903794
10 changed files with 286 additions and 50 deletions

View File

@@ -3,6 +3,8 @@ package analyst
import (
"strings"
"text/template"
"github.com/kamelion/ratatoskr-go/internal/storage"
)
// promptTemplate — шаблон промпта для аналитика (opencode analyst-agent).
@@ -23,6 +25,7 @@ var promptTemplate = template.Must(template.New("analyst").Parse(`Ты — ан
| repos | список репозиториев (имена на git-хосте; для связанных — все сразу) |
| why | зачем это нужно, контекст |
| ac | acceptance criteria — конкретный результат, что считается готовым |
| steps | (опционально) разбиение задачи на этапы: список {title, ac} с критерием готовности каждого этапа |
Изменяй в JSON только те поля, которые надо поменять; что менять не надо — пустой строкой.
@@ -51,6 +54,12 @@ var promptTemplate = template.Must(template.New("analyst").Parse(`Ты — ан
{{- else}} repos: (не задано){{end}}
{{if .Why}} why: {{.Why}}{{else}} why: (не задано){{end}}
{{if .AC}} ac: {{.AC}}{{else}} ac: (не задано){{end}}
{{if .Steps}}
steps:
{{- range .Steps}}
- {{.Title}}{{if .AC}}{{.AC}}{{end}}
{{- end}}
{{- else}} steps: (не задано){{end}}
**Ответь строго JSON-объектом, без лишнего текста:**
{
@@ -60,6 +69,7 @@ var promptTemplate = template.Must(template.New("analyst").Parse(`Ты — ан
"repos": ["имя_репо_1", "имя_репо_2"],
"why": "зачем (только если меняешь)",
"ac": "критерии (только если меняешь)",
"steps": [{"title": "этап 1", "ac": "критерий этапа 1"}],
"questions": ["вопрос 1", "вопрос 2"],
"chat_reply": "твой ответ пользователю (на русском, естественно)",
"abort_reason": "если phase=abort — причина"
@@ -73,6 +83,7 @@ type TemplateData struct {
Repos []string
Why string
AC string
Steps []storage.Step
History string // отформатированная переписка
Force bool
}
@@ -84,4 +95,4 @@ func RenderPrompt(data TemplateData) (string, error) {
return "", err
}
return buf.String(), nil
}
}