// Package agents — встроенные агенты opencode (analyst, dev, ...).
//
// Агенты зашиты в бинарь через go:embed и распаковываются при запуске
// в каталог OPENCODE_CONFIG_DIR (по умолчанию ./agents рядом с бинарём),
// чтобы opencode находил их независимо от того, где запущен ratatoskr.
//
// opencode сканирует OPENCODE_CONFIG_DIR как каталог .opencode: агенты
// ищутся в поддиректории agents/ (мн.ч.), а не в корне. Поэтому распаковка
// идёт в
/agents/*.md.
package agents
import (
"embed"
"path/filepath"
)
//go:embed *.md
var FS embed.FS
// Names — имена распаковываемых агентов (файлы *.md, без .md).
//
// Держим в курсе: если добавить файл в каталог, он автоматически попадёт
// в FS, но для детерминированной распаковки список лучше дополнять здесь.
var Names = []string{"analyst", "dev", "reviewer", "chat", "postmortem"}
// WriteTo распаковывает всех встроенных агентов в каталог dir/agents
// (создаёт его). Файлы перезаписываются — встроенная копия всегда актуальна.
func WriteTo(dir string) error {
agentsDir := filepath.Join(dir, "agents")
for _, name := range Names {
data, err := FS.ReadFile(name + ".md")
if err != nil {
return err
}
if err := writeFile(agentsDir, name+".md", data); err != nil {
return err
}
}
return nil
}