feat: встроенные агенты opencode (analyst, dev) через go:embed, распаковка по умолчанию в ./agents рядом с бинарём
All checks were successful
CI / test (push) Successful in 38s
CI / build-and-package (amd64, darwin) (push) Successful in 34s
CI / build-and-package (amd64, linux) (push) Successful in 33s
CI / build-and-package (amd64, windows) (push) Successful in 35s
CI / build-and-package (arm64, darwin) (push) Successful in 35s
CI / build-and-package (arm64, linux) (push) Successful in 34s
All checks were successful
CI / test (push) Successful in 38s
CI / build-and-package (amd64, darwin) (push) Successful in 34s
CI / build-and-package (amd64, linux) (push) Successful in 33s
CI / build-and-package (amd64, windows) (push) Successful in 35s
CI / build-and-package (arm64, darwin) (push) Successful in 35s
CI / build-and-package (arm64, linux) (push) Successful in 34s
This commit is contained in:
32
internal/agents/agents.go
Normal file
32
internal/agents/agents.go
Normal file
@@ -0,0 +1,32 @@
|
||||
// Package agents — встроенные агенты opencode (analyst, dev, ...).
|
||||
//
|
||||
// Агенты зашиты в бинарь через go:embed и распаковываются при запуске
|
||||
// в каталог OPENCODE_CONFIG_DIR (по умолчанию ./agents рядом с бинарём),
|
||||
// чтобы opencode находил их независимо от того, где запущен ratatoskr.
|
||||
package agents
|
||||
|
||||
import "embed"
|
||||
|
||||
//go:embed *.md
|
||||
var FS embed.FS
|
||||
|
||||
// Names — имена распаковываемых агентов (файлы *.md, без .md).
|
||||
//
|
||||
// Держим в курсе: если добавить файл в каталог, он автоматически попадёт
|
||||
// в FS, но для детерминированной распаковки список лучше дополнять здесь.
|
||||
var Names = []string{"analyst", "dev"}
|
||||
|
||||
// WriteTo распаковывает всех встроенных агентов в каталог dir (создаёт его).
|
||||
// Файлы перезаписываются — встроенная копия всегда актуальна.
|
||||
func WriteTo(dir string) error {
|
||||
for _, name := range Names {
|
||||
data, err := FS.ReadFile(name + ".md")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := writeFile(dir, name+".md", data); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user