@@ -14,6 +14,7 @@ import (
1414 "github.com/acorn-io/gptscript/pkg/openai"
1515 "github.com/acorn-io/gptscript/pkg/types"
1616 "github.com/acorn-io/gptscript/pkg/version"
17+ "github.com/google/shlex"
1718)
1819
1920// InternalSystemPrompt is added to all threads. Changing this is very dangerous as it has a
@@ -152,19 +153,24 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string)
152153 dec := json .NewDecoder (bytes .NewReader ([]byte (input )))
153154 dec .UseNumber ()
154155
156+ envMap := map [string ]string {}
155157 if err := json .Unmarshal ([]byte (input ), & data ); err == nil {
156158 for k , v := range data {
157- envName := fmt . Sprintf ( "%s" , strings .ToUpper (strings .ReplaceAll (k , "-" , "_" ) ))
159+ envName := strings .ToUpper (strings .ReplaceAll (k , "-" , "_" ))
158160 switch val := v .(type ) {
159161 case string :
162+ envMap [envName ] = val
160163 env = append (env , envName + "=" + val )
161164 case json.Number :
165+ envMap [envName ] = string (val )
162166 env = append (env , envName + "=" + string (val ))
163167 case bool :
168+ envMap [envName ] = fmt .Sprint (val )
164169 env = append (env , envName + "=" + fmt .Sprint (val ))
165170 default :
166171 data , err := json .Marshal (val )
167172 if err == nil {
173+ envMap [envName ] = string (data )
168174 env = append (env , envName + "=" + string (data ))
169175 }
170176 }
@@ -184,9 +190,19 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string)
184190 return "" , err
185191 }
186192 interpreter = strings .TrimSpace (interpreter )[2 :]
193+
194+ interpreter = os .Expand (interpreter , func (s string ) string {
195+ return envMap [s ]
196+ })
197+
198+ args , err := shlex .Split (interpreter )
199+ if err != nil {
200+ return "" , err
201+ }
202+
187203 output := & bytes.Buffer {}
188204
189- cmd := exec .Command (interpreter , f .Name ())
205+ cmd := exec .Command (args [ 0 ], append ( args [ 1 :], f .Name ()) ... )
190206 cmd .Env = env
191207 cmd .Stdin = strings .NewReader (input )
192208 cmd .Stderr = os .Stderr
@@ -198,7 +214,7 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string)
198214 return "" , err
199215 }
200216
201- return string ( output .Bytes () ), nil
217+ return output .String ( ), nil
202218}
203219
204220func (e * Engine ) Start (ctx Context , input string ) (* Return , error ) {
0 commit comments