fix(opencode): x-opencode-directory, Content-Length, warmup /api/model; serve без явного Env
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user