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
49 lines
1.8 KiB
Go
49 lines
1.8 KiB
Go
package worker
|
||
|
||
import (
|
||
"strings"
|
||
"text/template"
|
||
)
|
||
|
||
// devPromptTemplate — промпт для dev-агента при запуске задачи.
|
||
var devPromptTemplate = template.Must(template.New("dev").Parse(`Ты — dev-агент, реализуешь задачу в репозитории(ях).
|
||
|
||
**Задача:**
|
||
{{if .Title}}Название: {{.Title}}{{end}}
|
||
{{if .Goal}}Цель: {{.Goal}}{{end}}
|
||
{{if .Repos}}
|
||
Репозитории (доступны как подпапки текущего каталога):
|
||
{{- range .Repos}}
|
||
- {{.}}
|
||
{{- end}}
|
||
{{end}}
|
||
{{if .Why}}Зачем: {{.Why}}{{end}}
|
||
{{if .AC}}Критерии готовности:
|
||
{{.AC}}{{end}}
|
||
|
||
**Инструкции:**
|
||
1. Рабочий каталог — общий корень, в котором лежат все репозитории по именам.
|
||
Правь файлы внутри нужного репозитория (./имя_репо/...). Связанные репозитории меняй согласованно.
|
||
2. Напиши код, реализующий задачу.
|
||
3. Убедись, что все acceptance criteria выполнены.
|
||
4. Пользуйся встроенными инструментами opencode (чтение файлов, поиск, редактирование).
|
||
5. По окончании верни краткий отчёт о том, что сделано.
|
||
`))
|
||
|
||
// DevPromptData — данные для рендера dev-промпта.
|
||
type DevPromptData struct {
|
||
Title string
|
||
Goal string
|
||
Repos []string
|
||
Why string
|
||
AC string
|
||
}
|
||
|
||
// RenderDevPrompt собирает промпт для dev-агента.
|
||
func RenderDevPrompt(data DevPromptData) (string, error) {
|
||
var buf strings.Builder
|
||
if err := devPromptTemplate.Execute(&buf, data); err != nil {
|
||
return "", err
|
||
}
|
||
return buf.String(), nil
|
||
} |