code: func Term(params Params) (*ast.Term, error) {
  
  	obj := ast.NewObject()
  
  	if params.Config != nil {
  
  		var x interface{}
  		if err := util.Unmarshal(params.Config, &x); err != nil {
  			return nil, err
  		}
  
  		v, err := ast.InterfaceToValue(x)
  		if err != nil {
  			return nil, err
  		}
  
  		obj.Insert(ast.StringTerm("config"), ast.NewTerm(v))
  	}
  
  	env := ast.NewObject()
  
  	for _, s := range os.Environ() {
  		parts := strings.SplitN(s, "=", 2)
  		if len(parts) == 1 {
  			env.Insert(ast.StringTerm(parts[0]), ast.NullTerm())
  		} else if len(parts) > 1 {
  			env.Insert(ast.StringTerm(parts[0]), ast.StringTerm(parts[1]))
  		}
  	}
  
  	obj.Insert(ast.StringTerm("env"), ast.NewTerm(env))
  
  	return ast.NewTerm(obj), nil
  }
docs: // Term returns the runtime information as an ast.Term object.