@@ -67,6 +67,12 @@ var Tools = map[string]types.Tool{
6767 ),
6868 BuiltinFunc : SysExec ,
6969 },
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+ },
7076}
7177
7278func ListTools () (result []types.Tool ) {
@@ -147,6 +153,9 @@ func SysExec(ctx context.Context, env []string, input string) (string, error) {
147153 cmd .Env = env
148154 cmd .Dir = params .Directory
149155 out , err := cmd .CombinedOutput ()
156+ if err != nil {
157+ _ , _ = os .Stdout .Write (out )
158+ }
150159 return string (out ), err
151160}
152161
@@ -241,6 +250,17 @@ func SysHTTPPost(ctx context.Context, env []string, input string) (string, error
241250 return fmt .Sprintf ("Wrote %d to %s" , len ([]byte (params .Content )), params .URL ), nil
242251}
243252
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+
244264func SysAbort (ctx context.Context , env []string , input string ) (string , error ) {
245265 var params struct {
246266 Message string `json:"message,omitempty"`
0 commit comments