@@ -67,6 +67,12 @@ var Tools = map[string]types.Tool{
67
67
),
68
68
BuiltinFunc : SysExec ,
69
69
},
70
+ "sys.getenv" : {
71
+ Description : "Gets the value of an OS environment variable" ,
72
+ Arguments : types .ObjectSchema (
73
+ "name" , "The environment variable name to lookup" ),
74
+ BuiltinFunc : SysGetenv ,
75
+ },
70
76
}
71
77
72
78
func ListTools () (result []types.Tool ) {
@@ -147,6 +153,9 @@ func SysExec(ctx context.Context, env []string, input string) (string, error) {
147
153
cmd .Env = env
148
154
cmd .Dir = params .Directory
149
155
out , err := cmd .CombinedOutput ()
156
+ if err != nil {
157
+ _ , _ = os .Stdout .Write (out )
158
+ }
150
159
return string (out ), err
151
160
}
152
161
@@ -241,6 +250,17 @@ func SysHTTPPost(ctx context.Context, env []string, input string) (string, error
241
250
return fmt .Sprintf ("Wrote %d to %s" , len ([]byte (params .Content )), params .URL ), nil
242
251
}
243
252
253
+ func SysGetenv (ctx context.Context , env []string , input string ) (string , error ) {
254
+ var params struct {
255
+ Name string `json:"name,omitempty"`
256
+ }
257
+ if err := json .Unmarshal ([]byte (input ), & params ); err != nil {
258
+ return "" , err
259
+ }
260
+ log .Debugf ("looking up env var %s" , params .Name )
261
+ return os .Getenv (params .Name ), nil
262
+ }
263
+
244
264
func SysAbort (ctx context.Context , env []string , input string ) (string , error ) {
245
265
var params struct {
246
266
Message string `json:"message,omitempty"`
0 commit comments