Files
ratatoskr-go/internal/agents/agents.go
ki.sagidullin 8c91c83024
Some checks failed
CI / test (push) Failing after 1m20s
CI / build-and-package (amd64, linux) (push) Failing after 1m4s
CI / build-and-package (amd64, windows) (push) Successful in 37s
fix(opencode): агенты — в <worktree>/.opencode/agent, OPENCODE_CONFIG_DIR больше не выставляем
OPENCODE_CONFIG_DIR в opencode v1.18.18 перенаправляет Global.Path.config
(global.ts: config = OPENCODE_CONFIG_DIR ?? ~/.config/opencode), из-за чего
глобальный конфиг (модель/провайдеры, напр. tokentool) не загружался и
opencode уходил в fallback-модель. Агенты открывались, т.к. OPENCODE_CONFIG_DIR
дополнительно сканируется как каталог для agent/*.md.

Теперь агенты распаковываются в <worktree>/.opencode/agent/*.md, где opencode
находит их через project-каталог .opencode (paths.ts, cwd=worktree). Глобальный
конфиг не трогаем вовсе.

- internal/opencode: удалены Server.ConfigDir/Pool.ConfigDir и env OPENCODE_CONFIG_DIR
- internal/config: удалено поле OpenCodeCfg.ConfigDir (config_dir)
- internal/app: ensureAgentsDir пишет в <worktree>/.opencode/agent
- internal/agents: WriteTo(dir) → dir/agent/*.md
- README/config.yaml.example/memory обновлены
2026-08-23 17:54:35 +05:00

39 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package agents — встроенные агенты opencode (analyst, dev, ...).
//
// Агенты зашиты в бинарь через go:embed и распаковываются при запуске
// в project-каталог <worktree>/.opencode/agent/*.md. opencode при serve
// (cwd = worktree) обнаруживает .opencode поднятием вверх (ConfigPaths) и
// находит агентов по шаблону {agent,agents}/**/*.md. Глобальный конфиг
// opencode остаётся нетронутым (OPENCODE_CONFIG_DIR не выставляем).
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/agent
// (создаёт его). Файлы перезаписываются — встроенная копия всегда актуальна.
func WriteTo(dir string) error {
agentsDir := filepath.Join(dir, "agent")
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
}