feat: множественные репозитории (Repos) и клонирование в воркере
All checks were successful
CI / test (push) Successful in 46s
CI / build-and-package (amd64, darwin) (push) Successful in 36s
CI / build-and-package (amd64, linux) (push) Successful in 37s
CI / build-and-package (amd64, windows) (push) Successful in 44s
CI / build-and-package (arm64, darwin) (push) Successful in 35s
CI / build-and-package (arm64, linux) (push) Successful in 36s
All checks were successful
CI / test (push) Successful in 46s
CI / build-and-package (amd64, darwin) (push) Successful in 36s
CI / build-and-package (amd64, linux) (push) Successful in 37s
CI / build-and-package (amd64, windows) (push) Successful in 44s
CI / build-and-package (arm64, darwin) (push) Successful in 35s
CI / build-and-package (arm64, linux) (push) Successful in 36s
- Task.Repos []string (XML-колонка repos, обратная совместимость с repo)
- config: блок git {base_url, token}
- аналитик: ответ repos[], шаблон показывает список
- core: propose без repos → возврат в сбор (E1)
- worker вариант A: один dev из общего cwd, prepareRepos клонирует
недостающие репо (git clone), validateRepoName (E3), ErrRepoNotGit (E4)
- ошибки E1-E4 в worker/errors.go
This commit is contained in:
@@ -20,7 +20,7 @@ var promptTemplate = template.Must(template.New("analyst").Parse(`Ты — ан
|
||||
|------|----------|
|
||||
| title | краткое название (1–4 слова) |
|
||||
| goal | цель задачи: что именно нужно сделать |
|
||||
| repo | путь к репозиторию (относительно /opt/data/src/) |
|
||||
| repos | список репозиториев (имена на git-хосте; для связанных — все сразу) |
|
||||
| why | зачем это нужно, контекст |
|
||||
| ac | acceptance criteria — конкретный результат, что считается готовым |
|
||||
|
||||
@@ -35,7 +35,12 @@ var promptTemplate = template.Must(template.New("analyst").Parse(`Ты — ан
|
||||
**Текущий черновик:**
|
||||
{{if .Title}} title: {{.Title}}{{else}} title: (не задано){{end}}
|
||||
{{if .Goal}} goal: {{.Goal}}{{else}} goal: (не задано){{end}}
|
||||
{{if .Repo}} repo: {{.Repo}}{{else}} repo: (не задано){{end}}
|
||||
{{if .Repos}}
|
||||
repos:
|
||||
{{- range .Repos}}
|
||||
- {{.}}
|
||||
{{- end}}
|
||||
{{- else}} repos: (не задано){{end}}
|
||||
{{if .Why}} why: {{.Why}}{{else}} why: (не задано){{end}}
|
||||
{{if .AC}} ac: {{.AC}}{{else}} ac: (не задано){{end}}
|
||||
|
||||
@@ -44,7 +49,7 @@ var promptTemplate = template.Must(template.New("analyst").Parse(`Ты — ан
|
||||
"phase": "ask|propose|abort",
|
||||
"title": "название (только если меняешь)",
|
||||
"goal": "цель (только если меняешь)",
|
||||
"repo": "путь к репозиторию (только если меняешь)",
|
||||
"repos": ["имя_репо_1", "имя_репо_2"],
|
||||
"why": "зачем (только если меняешь)",
|
||||
"ac": "критерии (только если меняешь)",
|
||||
"questions": ["вопрос 1", "вопрос 2"],
|
||||
@@ -57,7 +62,7 @@ var promptTemplate = template.Must(template.New("analyst").Parse(`Ты — ан
|
||||
type TemplateData struct {
|
||||
Title string
|
||||
Goal string
|
||||
Repo string
|
||||
Repos []string
|
||||
Why string
|
||||
AC string
|
||||
History string // отформатированная переписка
|
||||
|
||||
Reference in New Issue
Block a user