// 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"} // 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 }