fix(opencode): x-opencode-directory, Content-Length, warmup /api/model; serve без явного Env
Some checks failed
CI / test (push) Failing after 2m13s
CI / build-and-package (amd64, linux) (push) Failing after 1m3s
CI / build-and-package (amd64, windows) (push) Successful in 29s

This commit is contained in:
ki.sagidullin
2026-08-24 08:38:59 +05:00
parent 88b455203f
commit c9ab753c1e
6 changed files with 32 additions and 55 deletions

View File

@@ -120,6 +120,8 @@ func (s *Server) Start(ctx context.Context) error {
s.done = done
s.mu.Unlock()
log.Printf("opencode serve: spawn dir=%s HOME=%q USERPROFILE=%q OPENCODE_CONFIG=%q (serve наследует окружение родителя)", cmd.Dir, os.Getenv("HOME"), os.Getenv("USERPROFILE"), s.ConfigPath)
if err := cmd.Start(); err != nil {
return fmt.Errorf("opencode serve: start %v: %w", s.Bin, err)
}
@@ -143,24 +145,8 @@ func (s *Server) serveCmd(ctx context.Context) *exec.Cmd {
// Своя process-group: чтобы killGroup (по pgid) убивал только сервер и его
// дочерние процессы, а не чужой процесс (например, тест-реннер).
setpgid(cmd)
env := append(os.Environ(),
"OPENCODE_DISABLE_AUTOUPDATE=1",
"OPENCODE_DISABLE_MODELS_FETCH=1")
// Гарантированно указываем глобальный конфиг opencode: serve обязан
// подхватить модель/провайдеров из него (иначе возможен фоллбэк на
// случайную модель из каталога).
if s.ConfigPath != "" {
env = append(env, "OPENCODE_CONFIG="+s.ConfigPath)
}
// Агенты (analyst/dev/...) opencode находит сам через project-каталог
// .opencode (см. internal/agents).
if s.DBPath != "" {
env = append(env, "OPENCODE_DB="+s.DBPath)
}
if s.Password != "" {
env = append(env, "OPENCODE_SERVER_PASSWORD="+s.Password)
}
cmd.Env = env
// Env не задаём: serve наследует окружение родителя и сам резолвит свой
// глобальный/локальный конфиг (модель/провайдеры, агентов, БД) как обычно.
return cmd
}