@@ -12,9 +12,10 @@ import (
1212)
1313
1414type RequestInput struct {
15- RequestType string `json:"request_type"`
16- RequestNewPythonExe string `json:"request_new_python_exe"`
17- RequestNewStartArgs []string `json:"request_new_start_args"`
15+ RequestType string `json:"request_type"`
16+ RequestNewPythonExe string `json:"request_new_python_exe"`
17+ RequestNewStartArgs []string `json:"request_new_start_args"`
18+ RequestSetEnvVars map [string ]* string `json:"request_set_env_vars"`
1819}
1920
2021type RequestOutput interface {
@@ -35,8 +36,9 @@ func (o *ExecRequestOutput) SetRequestType(v string) {
3536
3637type SpawnProcessRequestInput struct {
3738 * RequestInput
38- Command string `json:"command"`
39- Args []string `json:"args"`
39+ Command string `json:"command"`
40+ Args []string `json:"args"`
41+ Env map [string ]string `json:"env"`
4042}
4143
4244type SpawnProcessRequestOutput struct {
@@ -102,6 +104,18 @@ func (r *ProcessRunner) handleRequest() error {
102104 }
103105 slog .Debug ("Parsed request input" , "request" , input )
104106
107+ for k , v := range input .RequestSetEnvVars {
108+ if v == nil {
109+ err = os .Unsetenv (k )
110+ } else {
111+ err = os .Setenv (k , * v )
112+ }
113+ if err != nil {
114+ log .Debug ("Failed to set env var" , "env_var_name" , k , "env_var_value" , v )
115+ return err
116+ }
117+ }
118+
105119 var output RequestOutput
106120 switch input .RequestType {
107121 case "exec" :
@@ -144,6 +158,14 @@ func (r *ProcessRunner) handleSpawnCommandRequest(data []byte) (*SpawnProcessReq
144158 cmd .Stdin = os .Stdin
145159 cmd .Stdout = os .Stdout
146160 cmd .Stderr = os .Stderr
161+ if input .Env != nil {
162+ env := []string {}
163+ for k , v := range input .Env {
164+ env = append (env , fmt .Sprintf ("%v=%v" , k , v ))
165+ }
166+ cmd .Env = env
167+ }
168+
147169 slog .Debug ("Running command" , "command" , input .Command , "args" , input .Args )
148170 if err := cmd .Run (); err != nil {
149171 slog .Debug ("Spawned command returned an error" , "err" , err )
0 commit comments