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 обновлены
26 lines
595 B
Go
26 lines
595 B
Go
package agents
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWriteTo(t *testing.T) {
|
|
dir := t.TempDir()
|
|
if err := WriteTo(dir); err != nil {
|
|
t.Fatalf("WriteTo: %v", err)
|
|
}
|
|
for _, name := range Names {
|
|
// opencode ищет агентов в поддиректории agent/ (или agents/) внутри .opencode
|
|
p := filepath.Join(dir, "agent", name+".md")
|
|
data, err := os.ReadFile(p)
|
|
if err != nil {
|
|
t.Fatalf("read %s: %v", p, err)
|
|
}
|
|
if !strings.Contains(string(data), "name: "+name) {
|
|
t.Errorf("%s: нет frontmatter name: %s", p, name)
|
|
}
|
|
}
|
|
} |