github.com/anthropics/anthropic-sdk-go@v1.70.1/betaagent.go (about)

     1  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
     2  
     3  package anthropic
     4  
     5  import (
     6  	"context"
     7  	"encoding/json"
     8  	"errors"
     9  	"fmt"
    10  	"net/http"
    11  	"net/url"
    12  	"slices"
    13  	"time"
    14  
    15  	"github.com/anthropics/anthropic-sdk-go/internal/apijson"
    16  	"github.com/anthropics/anthropic-sdk-go/internal/apiquery"
    17  	"github.com/anthropics/anthropic-sdk-go/internal/paramutil"
    18  	"github.com/anthropics/anthropic-sdk-go/internal/requestconfig"
    19  	"github.com/anthropics/anthropic-sdk-go/option"
    20  	"github.com/anthropics/anthropic-sdk-go/packages/pagination"
    21  	"github.com/anthropics/anthropic-sdk-go/packages/param"
    22  	"github.com/anthropics/anthropic-sdk-go/packages/respjson"
    23  	"github.com/anthropics/anthropic-sdk-go/shared/constant"
    24  )
    25  
    26  // BetaAgentService contains methods and other services that help with interacting
    27  // with the anthropic API.
    28  //
    29  // Note, unlike clients, this service does not read variables from the environment
    30  // automatically. You should not instantiate this service directly, and instead use
    31  // the [NewBetaAgentService] method instead.
    32  type BetaAgentService struct {
    33  	Options  []option.RequestOption
    34  	Versions BetaAgentVersionService
    35  }
    36  
    37  // NewBetaAgentService generates a new service that applies the given options to
    38  // each request. These options are applied after the parent client's options (if
    39  // there is one), and before any request-specific options.
    40  func NewBetaAgentService(opts ...option.RequestOption) (r BetaAgentService) {
    41  	r = BetaAgentService{}
    42  	r.Options = opts
    43  	r.Versions = NewBetaAgentVersionService(opts...)
    44  	return
    45  }
    46  
    47  // Create Agent
    48  func (r *BetaAgentService) New(ctx context.Context, params BetaAgentNewParams, opts ...option.RequestOption) (res *BetaManagedAgentsAgent, err error) {
    49  	for _, v := range params.Betas {
    50  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
    51  	}
    52  	if !param.IsOmitted(params.WorkspaceID) {
    53  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", params.WorkspaceID.Value)))
    54  	}
    55  	opts = slices.Concat(r.Options, opts)
    56  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
    57  	path := "v1/agents?beta=true"
    58  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
    59  	return res, err
    60  }
    61  
    62  // Get Agent
    63  func (r *BetaAgentService) Get(ctx context.Context, agentID string, params BetaAgentGetParams, opts ...option.RequestOption) (res *BetaManagedAgentsAgent, err error) {
    64  	for _, v := range params.Betas {
    65  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
    66  	}
    67  	if !param.IsOmitted(params.WorkspaceID) {
    68  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", params.WorkspaceID.Value)))
    69  	}
    70  	opts = slices.Concat(r.Options, opts)
    71  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
    72  	if agentID == "" {
    73  		err = errors.New("missing required agent_id parameter")
    74  		return nil, err
    75  	}
    76  	path := fmt.Sprintf("v1/agents/%s?beta=true", agentID)
    77  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, params, &res, opts...)
    78  	return res, err
    79  }
    80  
    81  // Update Agent
    82  func (r *BetaAgentService) Update(ctx context.Context, agentID string, params BetaAgentUpdateParams, opts ...option.RequestOption) (res *BetaManagedAgentsAgent, err error) {
    83  	for _, v := range params.Betas {
    84  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
    85  	}
    86  	if !param.IsOmitted(params.WorkspaceID) {
    87  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", params.WorkspaceID.Value)))
    88  	}
    89  	opts = slices.Concat(r.Options, opts)
    90  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
    91  	if agentID == "" {
    92  		err = errors.New("missing required agent_id parameter")
    93  		return nil, err
    94  	}
    95  	path := fmt.Sprintf("v1/agents/%s?beta=true", agentID)
    96  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
    97  	return res, err
    98  }
    99  
   100  // List Agents
   101  func (r *BetaAgentService) List(ctx context.Context, params BetaAgentListParams, opts ...option.RequestOption) (res *pagination.PageCursor[BetaManagedAgentsAgent], err error) {
   102  	var raw *http.Response
   103  	for _, v := range params.Betas {
   104  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
   105  	}
   106  	if !param.IsOmitted(params.WorkspaceID) {
   107  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", params.WorkspaceID.Value)))
   108  	}
   109  	opts = slices.Concat(r.Options, opts)
   110  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01"), option.WithResponseInto(&raw)}, opts...)
   111  	path := "v1/agents?beta=true"
   112  	cfg, err := requestconfig.NewRequestConfig(ctx, http.MethodGet, path, params, &res, opts...)
   113  	if err != nil {
   114  		return nil, err
   115  	}
   116  	err = cfg.Execute()
   117  	if err != nil {
   118  		return nil, err
   119  	}
   120  	res.SetPageConfig(cfg, raw)
   121  	return res, nil
   122  }
   123  
   124  // List Agents
   125  func (r *BetaAgentService) ListAutoPaging(ctx context.Context, params BetaAgentListParams, opts ...option.RequestOption) *pagination.PageCursorAutoPager[BetaManagedAgentsAgent] {
   126  	return pagination.NewPageCursorAutoPager(r.List(ctx, params, opts...))
   127  }
   128  
   129  // Archive Agent
   130  func (r *BetaAgentService) Archive(ctx context.Context, agentID string, body BetaAgentArchiveParams, opts ...option.RequestOption) (res *BetaManagedAgentsAgent, err error) {
   131  	for _, v := range body.Betas {
   132  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
   133  	}
   134  	if !param.IsOmitted(body.WorkspaceID) {
   135  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", body.WorkspaceID.Value)))
   136  	}
   137  	opts = slices.Concat(r.Options, opts)
   138  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
   139  	if agentID == "" {
   140  		err = errors.New("missing required agent_id parameter")
   141  		return nil, err
   142  	}
   143  	path := fmt.Sprintf("v1/agents/%s/archive?beta=true", agentID)
   144  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
   145  	return res, err
   146  }
   147  
   148  // Platform advisor roster entry: a model the session's primary thread may consult
   149  // mid-turn.
   150  type BetaManagedAgentsAdvisor struct {
   151  	// The advisor model id.
   152  	Model string `json:"model" api:"required"`
   153  	// Any of "advisor".
   154  	Type BetaManagedAgentsAdvisorType `json:"type" api:"required"`
   155  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
   156  	JSON struct {
   157  		Model       respjson.Field
   158  		Type        respjson.Field
   159  		ExtraFields map[string]respjson.Field
   160  		raw         string
   161  	} `json:"-"`
   162  }
   163  
   164  // Returns the unmodified JSON received from the API
   165  func (r BetaManagedAgentsAdvisor) RawJSON() string { return r.JSON.raw }
   166  func (r *BetaManagedAgentsAdvisor) UnmarshalJSON(data []byte) error {
   167  	return apijson.UnmarshalRoot(data, r)
   168  }
   169  
   170  type BetaManagedAgentsAdvisorType string
   171  
   172  const (
   173  	BetaManagedAgentsAdvisorTypeAdvisor BetaManagedAgentsAdvisorType = "advisor"
   174  )
   175  
   176  // A Managed Agents `agent`.
   177  type BetaManagedAgentsAgent struct {
   178  	ID string `json:"id" api:"required"`
   179  	// A timestamp in RFC 3339 format
   180  	ArchivedAt time.Time `json:"archived_at" api:"required" format:"date-time"`
   181  	// A timestamp in RFC 3339 format
   182  	CreatedAt   time.Time                                 `json:"created_at" api:"required" format:"date-time"`
   183  	Description string                                    `json:"description" api:"required"`
   184  	MCPServers  []BetaManagedAgentsMCPServerURLDefinition `json:"mcp_servers" api:"required"`
   185  	Metadata    map[string]string                         `json:"metadata" api:"required"`
   186  	// Model identifier and configuration.
   187  	Model BetaManagedAgentsModelConfig `json:"model" api:"required"`
   188  	// Resolved coordinator topology with a concrete agent roster.
   189  	Multiagent BetaManagedAgentsMultiagent        `json:"multiagent" api:"required"`
   190  	Name       string                             `json:"name" api:"required"`
   191  	Skills     []BetaManagedAgentsAgentSkillUnion `json:"skills" api:"required"`
   192  	System     string                             `json:"system" api:"required"`
   193  	Tools      []BetaManagedAgentsAgentToolUnion  `json:"tools" api:"required"`
   194  	// Any of "agent".
   195  	Type BetaManagedAgentsAgentType `json:"type" api:"required"`
   196  	// A timestamp in RFC 3339 format
   197  	UpdatedAt time.Time `json:"updated_at" api:"required" format:"date-time"`
   198  	// The agent's current version. Starts at 1 and increments when the agent is
   199  	// modified.
   200  	Version int64 `json:"version" api:"required"`
   201  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
   202  	JSON struct {
   203  		ID          respjson.Field
   204  		ArchivedAt  respjson.Field
   205  		CreatedAt   respjson.Field
   206  		Description respjson.Field
   207  		MCPServers  respjson.Field
   208  		Metadata    respjson.Field
   209  		Model       respjson.Field
   210  		Multiagent  respjson.Field
   211  		Name        respjson.Field
   212  		Skills      respjson.Field
   213  		System      respjson.Field
   214  		Tools       respjson.Field
   215  		Type        respjson.Field
   216  		UpdatedAt   respjson.Field
   217  		Version     respjson.Field
   218  		ExtraFields map[string]respjson.Field
   219  		raw         string
   220  	} `json:"-"`
   221  }
   222  
   223  // Returns the unmodified JSON received from the API
   224  func (r BetaManagedAgentsAgent) RawJSON() string { return r.JSON.raw }
   225  func (r *BetaManagedAgentsAgent) UnmarshalJSON(data []byte) error {
   226  	return apijson.UnmarshalRoot(data, r)
   227  }
   228  
   229  // BetaManagedAgentsAgentSkillUnion contains all possible properties and values
   230  // from [BetaManagedAgentsAnthropicSkill], [BetaManagedAgentsCustomSkill].
   231  //
   232  // Use the [BetaManagedAgentsAgentSkillUnion.AsAny] method to switch on the
   233  // variant.
   234  //
   235  // Use the methods beginning with 'As' to cast the union to one of its variants.
   236  type BetaManagedAgentsAgentSkillUnion struct {
   237  	SkillID string `json:"skill_id"`
   238  	// Any of "anthropic", "custom".
   239  	Type    string `json:"type"`
   240  	Version string `json:"version"`
   241  	JSON    struct {
   242  		SkillID respjson.Field
   243  		Type    respjson.Field
   244  		Version respjson.Field
   245  		raw     string
   246  	} `json:"-"`
   247  }
   248  
   249  // anyBetaManagedAgentsAgentSkill is implemented by each variant of
   250  // [BetaManagedAgentsAgentSkillUnion] to add type safety for the return type of
   251  // [BetaManagedAgentsAgentSkillUnion.AsAny]
   252  type anyBetaManagedAgentsAgentSkill interface {
   253  	implBetaManagedAgentsAgentSkillUnion()
   254  }
   255  
   256  func (BetaManagedAgentsAnthropicSkill) implBetaManagedAgentsAgentSkillUnion() {}
   257  func (BetaManagedAgentsCustomSkill) implBetaManagedAgentsAgentSkillUnion()    {}
   258  
   259  // Use the following switch statement to find the correct variant
   260  //
   261  //	switch variant := BetaManagedAgentsAgentSkillUnion.AsAny().(type) {
   262  //	case anthropic.BetaManagedAgentsAnthropicSkill:
   263  //	case anthropic.BetaManagedAgentsCustomSkill:
   264  //	default:
   265  //	  fmt.Errorf("no variant present")
   266  //	}
   267  func (u BetaManagedAgentsAgentSkillUnion) AsAny() anyBetaManagedAgentsAgentSkill {
   268  	switch u.Type {
   269  	case "anthropic":
   270  		return u.AsAnthropic()
   271  	case "custom":
   272  		return u.AsCustom()
   273  	}
   274  	return nil
   275  }
   276  
   277  func (u BetaManagedAgentsAgentSkillUnion) AsAnthropic() (v BetaManagedAgentsAnthropicSkill) {
   278  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   279  	return
   280  }
   281  
   282  func (u BetaManagedAgentsAgentSkillUnion) AsCustom() (v BetaManagedAgentsCustomSkill) {
   283  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   284  	return
   285  }
   286  
   287  // Returns the unmodified JSON received from the API
   288  func (u BetaManagedAgentsAgentSkillUnion) RawJSON() string { return u.JSON.raw }
   289  
   290  func (r *BetaManagedAgentsAgentSkillUnion) UnmarshalJSON(data []byte) error {
   291  	return apijson.UnmarshalRoot(data, r)
   292  }
   293  
   294  // BetaManagedAgentsAgentToolUnion contains all possible properties and values from
   295  // [BetaManagedAgentsAgentToolset20260401], [BetaManagedAgentsMCPToolset],
   296  // [BetaManagedAgentsCustomTool].
   297  //
   298  // Use the [BetaManagedAgentsAgentToolUnion.AsAny] method to switch on the variant.
   299  //
   300  // Use the methods beginning with 'As' to cast the union to one of its variants.
   301  type BetaManagedAgentsAgentToolUnion struct {
   302  	// This field is a union of [[]BetaManagedAgentsAgentToolConfigUnion],
   303  	// [[]BetaManagedAgentsMCPToolConfig]
   304  	Configs BetaManagedAgentsAgentToolUnionConfigs `json:"configs"`
   305  	// This field is a union of [BetaManagedAgentsAgentToolsetDefaultConfig],
   306  	// [BetaManagedAgentsMCPToolsetDefaultConfig]
   307  	DefaultConfig BetaManagedAgentsAgentToolUnionDefaultConfig `json:"default_config"`
   308  	// Any of "agent_toolset_20260401", "mcp_toolset", "custom".
   309  	Type string `json:"type"`
   310  	// This field is from variant [BetaManagedAgentsMCPToolset].
   311  	MCPServerName string `json:"mcp_server_name"`
   312  	// This field is from variant [BetaManagedAgentsCustomTool].
   313  	Description string `json:"description"`
   314  	// This field is from variant [BetaManagedAgentsCustomTool].
   315  	InputSchema BetaManagedAgentsCustomToolInputSchema `json:"input_schema"`
   316  	// This field is from variant [BetaManagedAgentsCustomTool].
   317  	Name string `json:"name"`
   318  	JSON struct {
   319  		Configs       respjson.Field
   320  		DefaultConfig respjson.Field
   321  		Type          respjson.Field
   322  		MCPServerName respjson.Field
   323  		Description   respjson.Field
   324  		InputSchema   respjson.Field
   325  		Name          respjson.Field
   326  		raw           string
   327  	} `json:"-"`
   328  }
   329  
   330  // anyBetaManagedAgentsAgentTool is implemented by each variant of
   331  // [BetaManagedAgentsAgentToolUnion] to add type safety for the return type of
   332  // [BetaManagedAgentsAgentToolUnion.AsAny]
   333  type anyBetaManagedAgentsAgentTool interface {
   334  	implBetaManagedAgentsAgentToolUnion()
   335  }
   336  
   337  func (BetaManagedAgentsAgentToolset20260401) implBetaManagedAgentsAgentToolUnion() {}
   338  func (BetaManagedAgentsMCPToolset) implBetaManagedAgentsAgentToolUnion()           {}
   339  func (BetaManagedAgentsCustomTool) implBetaManagedAgentsAgentToolUnion()           {}
   340  
   341  // Use the following switch statement to find the correct variant
   342  //
   343  //	switch variant := BetaManagedAgentsAgentToolUnion.AsAny().(type) {
   344  //	case anthropic.BetaManagedAgentsAgentToolset20260401:
   345  //	case anthropic.BetaManagedAgentsMCPToolset:
   346  //	case anthropic.BetaManagedAgentsCustomTool:
   347  //	default:
   348  //	  fmt.Errorf("no variant present")
   349  //	}
   350  func (u BetaManagedAgentsAgentToolUnion) AsAny() anyBetaManagedAgentsAgentTool {
   351  	switch u.Type {
   352  	case "agent_toolset_20260401":
   353  		return u.AsAgentToolset20260401()
   354  	case "mcp_toolset":
   355  		return u.AsMCPToolset()
   356  	case "custom":
   357  		return u.AsCustom()
   358  	}
   359  	return nil
   360  }
   361  
   362  func (u BetaManagedAgentsAgentToolUnion) AsAgentToolset20260401() (v BetaManagedAgentsAgentToolset20260401) {
   363  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   364  	return
   365  }
   366  
   367  func (u BetaManagedAgentsAgentToolUnion) AsMCPToolset() (v BetaManagedAgentsMCPToolset) {
   368  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   369  	return
   370  }
   371  
   372  func (u BetaManagedAgentsAgentToolUnion) AsCustom() (v BetaManagedAgentsCustomTool) {
   373  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   374  	return
   375  }
   376  
   377  // Returns the unmodified JSON received from the API
   378  func (u BetaManagedAgentsAgentToolUnion) RawJSON() string { return u.JSON.raw }
   379  
   380  func (r *BetaManagedAgentsAgentToolUnion) UnmarshalJSON(data []byte) error {
   381  	return apijson.UnmarshalRoot(data, r)
   382  }
   383  
   384  // BetaManagedAgentsAgentToolUnionConfigs is an implicit subunion of
   385  // [BetaManagedAgentsAgentToolUnion]. BetaManagedAgentsAgentToolUnionConfigs
   386  // provides convenient access to the sub-properties of the union.
   387  //
   388  // For type safety it is recommended to directly use a variant of the
   389  // [BetaManagedAgentsAgentToolUnion].
   390  //
   391  // If the underlying value is not a json object, one of the following properties
   392  // will be valid: OfBetaManagedAgentsAgentToolConfigArray
   393  // OfBetaManagedAgentsMCPToolConfigArray]
   394  type BetaManagedAgentsAgentToolUnionConfigs struct {
   395  	// This field will be present if the value is a
   396  	// [[]BetaManagedAgentsAgentToolConfigUnion] instead of an object.
   397  	OfBetaManagedAgentsAgentToolConfigArray []BetaManagedAgentsAgentToolConfigUnion `json:",inline"`
   398  	// This field will be present if the value is a [[]BetaManagedAgentsMCPToolConfig]
   399  	// instead of an object.
   400  	OfBetaManagedAgentsMCPToolConfigArray []BetaManagedAgentsMCPToolConfig `json:",inline"`
   401  	JSON                                  struct {
   402  		OfBetaManagedAgentsAgentToolConfigArray respjson.Field
   403  		OfBetaManagedAgentsMCPToolConfigArray   respjson.Field
   404  		raw                                     string
   405  	} `json:"-"`
   406  }
   407  
   408  func (r *BetaManagedAgentsAgentToolUnionConfigs) UnmarshalJSON(data []byte) error {
   409  	return apijson.UnmarshalRoot(data, r)
   410  }
   411  
   412  // BetaManagedAgentsAgentToolUnionDefaultConfig is an implicit subunion of
   413  // [BetaManagedAgentsAgentToolUnion]. BetaManagedAgentsAgentToolUnionDefaultConfig
   414  // provides convenient access to the sub-properties of the union.
   415  //
   416  // For type safety it is recommended to directly use a variant of the
   417  // [BetaManagedAgentsAgentToolUnion].
   418  type BetaManagedAgentsAgentToolUnionDefaultConfig struct {
   419  	Enabled bool `json:"enabled"`
   420  	// This field is a union of
   421  	// [BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion],
   422  	// [BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion]
   423  	PermissionPolicy BetaManagedAgentsAgentToolUnionDefaultConfigPermissionPolicy `json:"permission_policy"`
   424  	JSON             struct {
   425  		Enabled          respjson.Field
   426  		PermissionPolicy respjson.Field
   427  		raw              string
   428  	} `json:"-"`
   429  }
   430  
   431  func (r *BetaManagedAgentsAgentToolUnionDefaultConfig) UnmarshalJSON(data []byte) error {
   432  	return apijson.UnmarshalRoot(data, r)
   433  }
   434  
   435  // BetaManagedAgentsAgentToolUnionDefaultConfigPermissionPolicy is an implicit
   436  // subunion of [BetaManagedAgentsAgentToolUnion].
   437  // BetaManagedAgentsAgentToolUnionDefaultConfigPermissionPolicy provides convenient
   438  // access to the sub-properties of the union.
   439  //
   440  // For type safety it is recommended to directly use a variant of the
   441  // [BetaManagedAgentsAgentToolUnion].
   442  type BetaManagedAgentsAgentToolUnionDefaultConfigPermissionPolicy struct {
   443  	Type string `json:"type"`
   444  	JSON struct {
   445  		Type respjson.Field
   446  		raw  string
   447  	} `json:"-"`
   448  }
   449  
   450  func (r *BetaManagedAgentsAgentToolUnionDefaultConfigPermissionPolicy) UnmarshalJSON(data []byte) error {
   451  	return apijson.UnmarshalRoot(data, r)
   452  }
   453  
   454  type BetaManagedAgentsAgentType string
   455  
   456  const (
   457  	BetaManagedAgentsAgentTypeAgent BetaManagedAgentsAgentType = "agent"
   458  )
   459  
   460  // A resolved agent reference with a concrete version.
   461  type BetaManagedAgentsAgentReference struct {
   462  	ID string `json:"id" api:"required"`
   463  	// Any of "agent".
   464  	Type    BetaManagedAgentsAgentReferenceType `json:"type" api:"required"`
   465  	Version int64                               `json:"version" api:"required"`
   466  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
   467  	JSON struct {
   468  		ID          respjson.Field
   469  		Type        respjson.Field
   470  		Version     respjson.Field
   471  		ExtraFields map[string]respjson.Field
   472  		raw         string
   473  	} `json:"-"`
   474  }
   475  
   476  // Returns the unmodified JSON received from the API
   477  func (r BetaManagedAgentsAgentReference) RawJSON() string { return r.JSON.raw }
   478  func (r *BetaManagedAgentsAgentReference) UnmarshalJSON(data []byte) error {
   479  	return apijson.UnmarshalRoot(data, r)
   480  }
   481  
   482  type BetaManagedAgentsAgentReferenceType string
   483  
   484  const (
   485  	BetaManagedAgentsAgentReferenceTypeAgent BetaManagedAgentsAgentReferenceType = "agent"
   486  )
   487  
   488  // BetaManagedAgentsAgentToolConfigUnion contains all possible properties and
   489  // values from [BetaManagedAgentsBashToolConfig],
   490  // [BetaManagedAgentsEditToolConfig], [BetaManagedAgentsReadToolConfig],
   491  // [BetaManagedAgentsWriteToolConfig], [BetaManagedAgentsGlobToolConfig],
   492  // [BetaManagedAgentsGrepToolConfig], [BetaManagedAgentsWebFetchToolConfig],
   493  // [BetaManagedAgentsWebSearchToolConfig].
   494  //
   495  // Use the [BetaManagedAgentsAgentToolConfigUnion.AsAny] method to switch on the
   496  // variant.
   497  //
   498  // Use the methods beginning with 'As' to cast the union to one of its variants.
   499  type BetaManagedAgentsAgentToolConfigUnion struct {
   500  	Enabled bool   `json:"enabled"`
   501  	Name    string `json:"name"`
   502  	// This field is a union of [BetaManagedAgentsBashToolConfigPermissionPolicyUnion],
   503  	// [BetaManagedAgentsEditToolConfigPermissionPolicyUnion],
   504  	// [BetaManagedAgentsReadToolConfigPermissionPolicyUnion],
   505  	// [BetaManagedAgentsWriteToolConfigPermissionPolicyUnion],
   506  	// [BetaManagedAgentsGlobToolConfigPermissionPolicyUnion],
   507  	// [BetaManagedAgentsGrepToolConfigPermissionPolicyUnion],
   508  	// [BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion],
   509  	// [BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion]
   510  	PermissionPolicy BetaManagedAgentsAgentToolConfigUnionPermissionPolicy `json:"permission_policy"`
   511  	// Any of "bash", "edit", "read", "write", "glob", "grep", "web_fetch",
   512  	// "web_search".
   513  	Type           string   `json:"type"`
   514  	AllowedDomains []string `json:"allowed_domains"`
   515  	BlockedDomains []string `json:"blocked_domains"`
   516  	// This field is from variant [BetaManagedAgentsWebFetchToolConfig].
   517  	MaxContentTokens int64 `json:"max_content_tokens"`
   518  	// This field is from variant [BetaManagedAgentsWebSearchToolConfig].
   519  	UserLocation BetaManagedAgentsUserLocation `json:"user_location"`
   520  	JSON         struct {
   521  		Enabled          respjson.Field
   522  		Name             respjson.Field
   523  		PermissionPolicy respjson.Field
   524  		Type             respjson.Field
   525  		AllowedDomains   respjson.Field
   526  		BlockedDomains   respjson.Field
   527  		MaxContentTokens respjson.Field
   528  		UserLocation     respjson.Field
   529  		raw              string
   530  	} `json:"-"`
   531  }
   532  
   533  // anyBetaManagedAgentsAgentToolConfig is implemented by each variant of
   534  // [BetaManagedAgentsAgentToolConfigUnion] to add type safety for the return type
   535  // of [BetaManagedAgentsAgentToolConfigUnion.AsAny]
   536  type anyBetaManagedAgentsAgentToolConfig interface {
   537  	implBetaManagedAgentsAgentToolConfigUnion()
   538  }
   539  
   540  func (BetaManagedAgentsBashToolConfig) implBetaManagedAgentsAgentToolConfigUnion()      {}
   541  func (BetaManagedAgentsEditToolConfig) implBetaManagedAgentsAgentToolConfigUnion()      {}
   542  func (BetaManagedAgentsReadToolConfig) implBetaManagedAgentsAgentToolConfigUnion()      {}
   543  func (BetaManagedAgentsWriteToolConfig) implBetaManagedAgentsAgentToolConfigUnion()     {}
   544  func (BetaManagedAgentsGlobToolConfig) implBetaManagedAgentsAgentToolConfigUnion()      {}
   545  func (BetaManagedAgentsGrepToolConfig) implBetaManagedAgentsAgentToolConfigUnion()      {}
   546  func (BetaManagedAgentsWebFetchToolConfig) implBetaManagedAgentsAgentToolConfigUnion()  {}
   547  func (BetaManagedAgentsWebSearchToolConfig) implBetaManagedAgentsAgentToolConfigUnion() {}
   548  
   549  // Use the following switch statement to find the correct variant
   550  //
   551  //	switch variant := BetaManagedAgentsAgentToolConfigUnion.AsAny().(type) {
   552  //	case anthropic.BetaManagedAgentsBashToolConfig:
   553  //	case anthropic.BetaManagedAgentsEditToolConfig:
   554  //	case anthropic.BetaManagedAgentsReadToolConfig:
   555  //	case anthropic.BetaManagedAgentsWriteToolConfig:
   556  //	case anthropic.BetaManagedAgentsGlobToolConfig:
   557  //	case anthropic.BetaManagedAgentsGrepToolConfig:
   558  //	case anthropic.BetaManagedAgentsWebFetchToolConfig:
   559  //	case anthropic.BetaManagedAgentsWebSearchToolConfig:
   560  //	default:
   561  //	  fmt.Errorf("no variant present")
   562  //	}
   563  func (u BetaManagedAgentsAgentToolConfigUnion) AsAny() anyBetaManagedAgentsAgentToolConfig {
   564  	switch u.Type {
   565  	case "bash":
   566  		return u.AsBash()
   567  	case "edit":
   568  		return u.AsEdit()
   569  	case "read":
   570  		return u.AsRead()
   571  	case "write":
   572  		return u.AsWrite()
   573  	case "glob":
   574  		return u.AsGlob()
   575  	case "grep":
   576  		return u.AsGrep()
   577  	case "web_fetch":
   578  		return u.AsWebFetch()
   579  	case "web_search":
   580  		return u.AsWebSearch()
   581  	}
   582  	return nil
   583  }
   584  
   585  func (u BetaManagedAgentsAgentToolConfigUnion) AsBash() (v BetaManagedAgentsBashToolConfig) {
   586  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   587  	return
   588  }
   589  
   590  func (u BetaManagedAgentsAgentToolConfigUnion) AsEdit() (v BetaManagedAgentsEditToolConfig) {
   591  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   592  	return
   593  }
   594  
   595  func (u BetaManagedAgentsAgentToolConfigUnion) AsRead() (v BetaManagedAgentsReadToolConfig) {
   596  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   597  	return
   598  }
   599  
   600  func (u BetaManagedAgentsAgentToolConfigUnion) AsWrite() (v BetaManagedAgentsWriteToolConfig) {
   601  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   602  	return
   603  }
   604  
   605  func (u BetaManagedAgentsAgentToolConfigUnion) AsGlob() (v BetaManagedAgentsGlobToolConfig) {
   606  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   607  	return
   608  }
   609  
   610  func (u BetaManagedAgentsAgentToolConfigUnion) AsGrep() (v BetaManagedAgentsGrepToolConfig) {
   611  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   612  	return
   613  }
   614  
   615  func (u BetaManagedAgentsAgentToolConfigUnion) AsWebFetch() (v BetaManagedAgentsWebFetchToolConfig) {
   616  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   617  	return
   618  }
   619  
   620  func (u BetaManagedAgentsAgentToolConfigUnion) AsWebSearch() (v BetaManagedAgentsWebSearchToolConfig) {
   621  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   622  	return
   623  }
   624  
   625  // Returns the unmodified JSON received from the API
   626  func (u BetaManagedAgentsAgentToolConfigUnion) RawJSON() string { return u.JSON.raw }
   627  
   628  func (r *BetaManagedAgentsAgentToolConfigUnion) UnmarshalJSON(data []byte) error {
   629  	return apijson.UnmarshalRoot(data, r)
   630  }
   631  
   632  // BetaManagedAgentsAgentToolConfigUnionPermissionPolicy is an implicit subunion of
   633  // [BetaManagedAgentsAgentToolConfigUnion].
   634  // BetaManagedAgentsAgentToolConfigUnionPermissionPolicy provides convenient access
   635  // to the sub-properties of the union.
   636  //
   637  // For type safety it is recommended to directly use a variant of the
   638  // [BetaManagedAgentsAgentToolConfigUnion].
   639  type BetaManagedAgentsAgentToolConfigUnionPermissionPolicy struct {
   640  	Type string `json:"type"`
   641  	JSON struct {
   642  		Type respjson.Field
   643  		raw  string
   644  	} `json:"-"`
   645  }
   646  
   647  func (r *BetaManagedAgentsAgentToolConfigUnionPermissionPolicy) UnmarshalJSON(data []byte) error {
   648  	return apijson.UnmarshalRoot(data, r)
   649  }
   650  
   651  // Only one field can be non-zero.
   652  //
   653  // Use [param.IsOmitted] to confirm if a field is set.
   654  type BetaManagedAgentsAgentToolConfigParamsUnion struct {
   655  	OfBash      *BetaManagedAgentsBashToolConfigParams      `json:",omitzero,inline"`
   656  	OfEdit      *BetaManagedAgentsEditToolConfigParams      `json:",omitzero,inline"`
   657  	OfRead      *BetaManagedAgentsReadToolConfigParams      `json:",omitzero,inline"`
   658  	OfWrite     *BetaManagedAgentsWriteToolConfigParams     `json:",omitzero,inline"`
   659  	OfGlob      *BetaManagedAgentsGlobToolConfigParams      `json:",omitzero,inline"`
   660  	OfGrep      *BetaManagedAgentsGrepToolConfigParams      `json:",omitzero,inline"`
   661  	OfWebFetch  *BetaManagedAgentsWebFetchToolConfigParams  `json:",omitzero,inline"`
   662  	OfWebSearch *BetaManagedAgentsWebSearchToolConfigParams `json:",omitzero,inline"`
   663  	paramUnion
   664  }
   665  
   666  func (u BetaManagedAgentsAgentToolConfigParamsUnion) MarshalJSON() ([]byte, error) {
   667  	return param.MarshalUnion(u, u.OfBash,
   668  		u.OfEdit,
   669  		u.OfRead,
   670  		u.OfWrite,
   671  		u.OfGlob,
   672  		u.OfGrep,
   673  		u.OfWebFetch,
   674  		u.OfWebSearch)
   675  }
   676  func (u *BetaManagedAgentsAgentToolConfigParamsUnion) UnmarshalJSON(data []byte) error {
   677  	return apijson.UnmarshalRoot(data, u)
   678  }
   679  
   680  func (u *BetaManagedAgentsAgentToolConfigParamsUnion) asAny() any {
   681  	if !param.IsOmitted(u.OfBash) {
   682  		return u.OfBash
   683  	} else if !param.IsOmitted(u.OfEdit) {
   684  		return u.OfEdit
   685  	} else if !param.IsOmitted(u.OfRead) {
   686  		return u.OfRead
   687  	} else if !param.IsOmitted(u.OfWrite) {
   688  		return u.OfWrite
   689  	} else if !param.IsOmitted(u.OfGlob) {
   690  		return u.OfGlob
   691  	} else if !param.IsOmitted(u.OfGrep) {
   692  		return u.OfGrep
   693  	} else if !param.IsOmitted(u.OfWebFetch) {
   694  		return u.OfWebFetch
   695  	} else if !param.IsOmitted(u.OfWebSearch) {
   696  		return u.OfWebSearch
   697  	}
   698  	return nil
   699  }
   700  
   701  // Returns a pointer to the underlying variant's property, if present.
   702  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetMaxContentTokens() *int64 {
   703  	if vt := u.OfWebFetch; vt != nil && vt.MaxContentTokens.Valid() {
   704  		return &vt.MaxContentTokens.Value
   705  	}
   706  	return nil
   707  }
   708  
   709  // Returns a pointer to the underlying variant's property, if present.
   710  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetUserLocation() *BetaManagedAgentsUserLocationParam {
   711  	if vt := u.OfWebSearch; vt != nil {
   712  		return &vt.UserLocation
   713  	}
   714  	return nil
   715  }
   716  
   717  // Returns a pointer to the underlying variant's property, if present.
   718  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetName() *string {
   719  	if vt := u.OfBash; vt != nil {
   720  		return (*string)(&vt.Name)
   721  	} else if vt := u.OfEdit; vt != nil {
   722  		return (*string)(&vt.Name)
   723  	} else if vt := u.OfRead; vt != nil {
   724  		return (*string)(&vt.Name)
   725  	} else if vt := u.OfWrite; vt != nil {
   726  		return (*string)(&vt.Name)
   727  	} else if vt := u.OfGlob; vt != nil {
   728  		return (*string)(&vt.Name)
   729  	} else if vt := u.OfGrep; vt != nil {
   730  		return (*string)(&vt.Name)
   731  	} else if vt := u.OfWebFetch; vt != nil {
   732  		return (*string)(&vt.Name)
   733  	} else if vt := u.OfWebSearch; vt != nil {
   734  		return (*string)(&vt.Name)
   735  	}
   736  	return nil
   737  }
   738  
   739  // Returns a pointer to the underlying variant's property, if present.
   740  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetEnabled() *bool {
   741  	if vt := u.OfBash; vt != nil && vt.Enabled.Valid() {
   742  		return &vt.Enabled.Value
   743  	} else if vt := u.OfEdit; vt != nil && vt.Enabled.Valid() {
   744  		return &vt.Enabled.Value
   745  	} else if vt := u.OfRead; vt != nil && vt.Enabled.Valid() {
   746  		return &vt.Enabled.Value
   747  	} else if vt := u.OfWrite; vt != nil && vt.Enabled.Valid() {
   748  		return &vt.Enabled.Value
   749  	} else if vt := u.OfGlob; vt != nil && vt.Enabled.Valid() {
   750  		return &vt.Enabled.Value
   751  	} else if vt := u.OfGrep; vt != nil && vt.Enabled.Valid() {
   752  		return &vt.Enabled.Value
   753  	} else if vt := u.OfWebFetch; vt != nil && vt.Enabled.Valid() {
   754  		return &vt.Enabled.Value
   755  	} else if vt := u.OfWebSearch; vt != nil && vt.Enabled.Valid() {
   756  		return &vt.Enabled.Value
   757  	}
   758  	return nil
   759  }
   760  
   761  // Returns a pointer to the underlying variant's property, if present.
   762  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetType() *string {
   763  	if vt := u.OfBash; vt != nil {
   764  		return (*string)(&vt.Type)
   765  	} else if vt := u.OfEdit; vt != nil {
   766  		return (*string)(&vt.Type)
   767  	} else if vt := u.OfRead; vt != nil {
   768  		return (*string)(&vt.Type)
   769  	} else if vt := u.OfWrite; vt != nil {
   770  		return (*string)(&vt.Type)
   771  	} else if vt := u.OfGlob; vt != nil {
   772  		return (*string)(&vt.Type)
   773  	} else if vt := u.OfGrep; vt != nil {
   774  		return (*string)(&vt.Type)
   775  	} else if vt := u.OfWebFetch; vt != nil {
   776  		return (*string)(&vt.Type)
   777  	} else if vt := u.OfWebSearch; vt != nil {
   778  		return (*string)(&vt.Type)
   779  	}
   780  	return nil
   781  }
   782  
   783  // Returns a subunion which exports methods to access subproperties
   784  //
   785  // Or use AsAny() to get the underlying value
   786  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetPermissionPolicy() (res betaManagedAgentsAgentToolConfigParamsUnionPermissionPolicy) {
   787  	if vt := u.OfBash; vt != nil {
   788  		res.any = vt.PermissionPolicy.asAny()
   789  	} else if vt := u.OfEdit; vt != nil {
   790  		res.any = vt.PermissionPolicy.asAny()
   791  	} else if vt := u.OfRead; vt != nil {
   792  		res.any = vt.PermissionPolicy.asAny()
   793  	} else if vt := u.OfWrite; vt != nil {
   794  		res.any = vt.PermissionPolicy.asAny()
   795  	} else if vt := u.OfGlob; vt != nil {
   796  		res.any = vt.PermissionPolicy.asAny()
   797  	} else if vt := u.OfGrep; vt != nil {
   798  		res.any = vt.PermissionPolicy.asAny()
   799  	} else if vt := u.OfWebFetch; vt != nil {
   800  		res.any = vt.PermissionPolicy.asAny()
   801  	} else if vt := u.OfWebSearch; vt != nil {
   802  		res.any = vt.PermissionPolicy.asAny()
   803  	}
   804  	return
   805  }
   806  
   807  // Can have the runtime types [*BetaManagedAgentsAlwaysAllowPolicyParam],
   808  // [*BetaManagedAgentsAlwaysAskPolicyParam]
   809  type betaManagedAgentsAgentToolConfigParamsUnionPermissionPolicy struct{ any }
   810  
   811  // Use the following switch statement to get the type of the union:
   812  //
   813  //	switch u.AsAny().(type) {
   814  //	case *anthropic.BetaManagedAgentsAlwaysAllowPolicyParam:
   815  //	case *anthropic.BetaManagedAgentsAlwaysAskPolicyParam:
   816  //	default:
   817  //	    fmt.Errorf("not present")
   818  //	}
   819  func (u betaManagedAgentsAgentToolConfigParamsUnionPermissionPolicy) AsAny() any { return u.any }
   820  
   821  // Returns a pointer to the underlying variant's property, if present.
   822  func (u betaManagedAgentsAgentToolConfigParamsUnionPermissionPolicy) GetType() *string {
   823  	switch vt := u.any.(type) {
   824  	case *BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion:
   825  		return vt.GetType()
   826  	case *BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion:
   827  		return vt.GetType()
   828  	case *BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion:
   829  		return vt.GetType()
   830  	case *BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion:
   831  		return vt.GetType()
   832  	case *BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion:
   833  		return vt.GetType()
   834  	case *BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion:
   835  		return vt.GetType()
   836  	case *BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion:
   837  		return vt.GetType()
   838  	case *BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion:
   839  		return vt.GetType()
   840  	}
   841  	return nil
   842  }
   843  
   844  // Returns a pointer to the underlying variant's AllowedDomains property, if
   845  // present.
   846  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetAllowedDomains() []string {
   847  	if vt := u.OfWebFetch; vt != nil {
   848  		return vt.AllowedDomains
   849  	} else if vt := u.OfWebSearch; vt != nil {
   850  		return vt.AllowedDomains
   851  	}
   852  	return nil
   853  }
   854  
   855  // Returns a pointer to the underlying variant's BlockedDomains property, if
   856  // present.
   857  func (u BetaManagedAgentsAgentToolConfigParamsUnion) GetBlockedDomains() []string {
   858  	if vt := u.OfWebFetch; vt != nil {
   859  		return vt.BlockedDomains
   860  	} else if vt := u.OfWebSearch; vt != nil {
   861  		return vt.BlockedDomains
   862  	}
   863  	return nil
   864  }
   865  
   866  func init() {
   867  	apijson.RegisterUnion[BetaManagedAgentsAgentToolConfigParamsUnion](
   868  		"type",
   869  		apijson.Discriminator[BetaManagedAgentsBashToolConfigParams]("bash"),
   870  		apijson.Discriminator[BetaManagedAgentsEditToolConfigParams]("edit"),
   871  		apijson.Discriminator[BetaManagedAgentsReadToolConfigParams]("read"),
   872  		apijson.Discriminator[BetaManagedAgentsWriteToolConfigParams]("write"),
   873  		apijson.Discriminator[BetaManagedAgentsGlobToolConfigParams]("glob"),
   874  		apijson.Discriminator[BetaManagedAgentsGrepToolConfigParams]("grep"),
   875  		apijson.Discriminator[BetaManagedAgentsWebFetchToolConfigParams]("web_fetch"),
   876  		apijson.Discriminator[BetaManagedAgentsWebSearchToolConfigParams]("web_search"),
   877  	)
   878  }
   879  
   880  // Resolved default configuration for agent tools.
   881  type BetaManagedAgentsAgentToolsetDefaultConfig struct {
   882  	Enabled bool `json:"enabled" api:"required"`
   883  	// Permission policy for tool execution.
   884  	PermissionPolicy BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
   885  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
   886  	JSON struct {
   887  		Enabled          respjson.Field
   888  		PermissionPolicy respjson.Field
   889  		ExtraFields      map[string]respjson.Field
   890  		raw              string
   891  	} `json:"-"`
   892  }
   893  
   894  // Returns the unmodified JSON received from the API
   895  func (r BetaManagedAgentsAgentToolsetDefaultConfig) RawJSON() string { return r.JSON.raw }
   896  func (r *BetaManagedAgentsAgentToolsetDefaultConfig) UnmarshalJSON(data []byte) error {
   897  	return apijson.UnmarshalRoot(data, r)
   898  }
   899  
   900  // BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion contains all
   901  // possible properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
   902  // [BetaManagedAgentsAlwaysAskPolicy].
   903  //
   904  // Use the [BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion.AsAny]
   905  // method to switch on the variant.
   906  //
   907  // Use the methods beginning with 'As' to cast the union to one of its variants.
   908  type BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion struct {
   909  	// Any of "always_allow", "always_ask".
   910  	Type string `json:"type"`
   911  	JSON struct {
   912  		Type respjson.Field
   913  		raw  string
   914  	} `json:"-"`
   915  }
   916  
   917  // anyBetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicy is implemented by
   918  // each variant of
   919  // [BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion] to add type
   920  // safety for the return type of
   921  // [BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion.AsAny]
   922  type anyBetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicy interface {
   923  	implBetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion()
   924  }
   925  
   926  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion() {
   927  }
   928  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion() {
   929  }
   930  
   931  // Use the following switch statement to find the correct variant
   932  //
   933  //	switch variant := BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion.AsAny().(type) {
   934  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
   935  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
   936  //	default:
   937  //	  fmt.Errorf("no variant present")
   938  //	}
   939  func (u BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicy {
   940  	switch u.Type {
   941  	case "always_allow":
   942  		return u.AsAlwaysAllow()
   943  	case "always_ask":
   944  		return u.AsAlwaysAsk()
   945  	}
   946  	return nil
   947  }
   948  
   949  func (u BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
   950  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   951  	return
   952  }
   953  
   954  func (u BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
   955  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
   956  	return
   957  }
   958  
   959  // Returns the unmodified JSON received from the API
   960  func (u BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion) RawJSON() string {
   961  	return u.JSON.raw
   962  }
   963  
   964  func (r *BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
   965  	return apijson.UnmarshalRoot(data, r)
   966  }
   967  
   968  // Default configuration for all tools in a toolset.
   969  type BetaManagedAgentsAgentToolsetDefaultConfigParams struct {
   970  	// Whether tools are enabled and available to Claude by default. Defaults to true
   971  	// if not specified.
   972  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
   973  	// Permission policy for tool execution.
   974  	PermissionPolicy BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
   975  	paramObj
   976  }
   977  
   978  func (r BetaManagedAgentsAgentToolsetDefaultConfigParams) MarshalJSON() (data []byte, err error) {
   979  	type shadow BetaManagedAgentsAgentToolsetDefaultConfigParams
   980  	return param.MarshalObject(r, (*shadow)(&r))
   981  }
   982  func (r *BetaManagedAgentsAgentToolsetDefaultConfigParams) UnmarshalJSON(data []byte) error {
   983  	return apijson.UnmarshalRoot(data, r)
   984  }
   985  
   986  // Only one field can be non-zero.
   987  //
   988  // Use [param.IsOmitted] to confirm if a field is set.
   989  type BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion struct {
   990  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
   991  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
   992  	paramUnion
   993  }
   994  
   995  func (u BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
   996  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
   997  }
   998  func (u *BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
   999  	return apijson.UnmarshalRoot(data, u)
  1000  }
  1001  
  1002  func (u *BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion) asAny() any {
  1003  	if !param.IsOmitted(u.OfAlwaysAllow) {
  1004  		return u.OfAlwaysAllow
  1005  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  1006  		return u.OfAlwaysAsk
  1007  	}
  1008  	return nil
  1009  }
  1010  
  1011  // Returns a pointer to the underlying variant's property, if present.
  1012  func (u BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion) GetType() *string {
  1013  	if vt := u.OfAlwaysAllow; vt != nil {
  1014  		return (*string)(&vt.Type)
  1015  	} else if vt := u.OfAlwaysAsk; vt != nil {
  1016  		return (*string)(&vt.Type)
  1017  	}
  1018  	return nil
  1019  }
  1020  
  1021  func init() {
  1022  	apijson.RegisterUnion[BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion](
  1023  		"type",
  1024  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  1025  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  1026  	)
  1027  }
  1028  
  1029  type BetaManagedAgentsAgentToolset20260401 struct {
  1030  	Configs []BetaManagedAgentsAgentToolConfigUnion `json:"configs" api:"required"`
  1031  	// Resolved default configuration for agent tools.
  1032  	DefaultConfig BetaManagedAgentsAgentToolsetDefaultConfig `json:"default_config" api:"required"`
  1033  	// Any of "agent_toolset_20260401".
  1034  	Type BetaManagedAgentsAgentToolset20260401Type `json:"type" api:"required"`
  1035  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1036  	JSON struct {
  1037  		Configs       respjson.Field
  1038  		DefaultConfig respjson.Field
  1039  		Type          respjson.Field
  1040  		ExtraFields   map[string]respjson.Field
  1041  		raw           string
  1042  	} `json:"-"`
  1043  }
  1044  
  1045  // Returns the unmodified JSON received from the API
  1046  func (r BetaManagedAgentsAgentToolset20260401) RawJSON() string { return r.JSON.raw }
  1047  func (r *BetaManagedAgentsAgentToolset20260401) UnmarshalJSON(data []byte) error {
  1048  	return apijson.UnmarshalRoot(data, r)
  1049  }
  1050  
  1051  type BetaManagedAgentsAgentToolset20260401Type string
  1052  
  1053  const (
  1054  	BetaManagedAgentsAgentToolset20260401TypeAgentToolset20260401 BetaManagedAgentsAgentToolset20260401Type = "agent_toolset_20260401"
  1055  )
  1056  
  1057  // Input payload for the `bash` tool of the `agent_toolset_20260401` toolset. All
  1058  // fields are optional; a normal invocation supplies `command`, while
  1059  // `restart=true` (with no `command`) reboots the runner-side bash session.
  1060  type BetaManagedAgentsAgentToolset20260401BashInput struct {
  1061  	// Shell command to execute. Omit only when `restart` is true.
  1062  	Command string `json:"command"`
  1063  	// When true, restart the persistent bash session instead of running a command.
  1064  	// Subsequent calls without `restart` will run against the fresh session.
  1065  	Restart bool `json:"restart"`
  1066  	// Per-call timeout in milliseconds. Defaults to the runner-wide tool timeout when
  1067  	// omitted or zero.
  1068  	TimeoutMs int64 `json:"timeout_ms"`
  1069  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1070  	JSON struct {
  1071  		Command     respjson.Field
  1072  		Restart     respjson.Field
  1073  		TimeoutMs   respjson.Field
  1074  		ExtraFields map[string]respjson.Field
  1075  		raw         string
  1076  	} `json:"-"`
  1077  }
  1078  
  1079  // Returns the unmodified JSON received from the API
  1080  func (r BetaManagedAgentsAgentToolset20260401BashInput) RawJSON() string { return r.JSON.raw }
  1081  func (r *BetaManagedAgentsAgentToolset20260401BashInput) UnmarshalJSON(data []byte) error {
  1082  	return apijson.UnmarshalRoot(data, r)
  1083  }
  1084  
  1085  // Input payload for the `edit` tool. Performs a string replacement in the named
  1086  // file; by default `old_string` must occur exactly once.
  1087  type BetaManagedAgentsAgentToolset20260401EditInput struct {
  1088  	// Path of the file to edit.
  1089  	FilePath string `json:"file_path" api:"required"`
  1090  	// Replacement text.
  1091  	NewString string `json:"new_string" api:"required"`
  1092  	// Substring to find and replace.
  1093  	OldString string `json:"old_string" api:"required"`
  1094  	// When true, replace every occurrence of `old_string` instead of requiring a
  1095  	// unique match.
  1096  	ReplaceAll bool `json:"replace_all"`
  1097  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1098  	JSON struct {
  1099  		FilePath    respjson.Field
  1100  		NewString   respjson.Field
  1101  		OldString   respjson.Field
  1102  		ReplaceAll  respjson.Field
  1103  		ExtraFields map[string]respjson.Field
  1104  		raw         string
  1105  	} `json:"-"`
  1106  }
  1107  
  1108  // Returns the unmodified JSON received from the API
  1109  func (r BetaManagedAgentsAgentToolset20260401EditInput) RawJSON() string { return r.JSON.raw }
  1110  func (r *BetaManagedAgentsAgentToolset20260401EditInput) UnmarshalJSON(data []byte) error {
  1111  	return apijson.UnmarshalRoot(data, r)
  1112  }
  1113  
  1114  // Input payload for the `glob` tool. Returns paths matching a doublestar glob
  1115  // pattern, newest first.
  1116  type BetaManagedAgentsAgentToolset20260401GlobInput struct {
  1117  	// Doublestar glob pattern (e.g. `**/*.go`). Absolute patterns are only permitted
  1118  	// when the runner is configured to allow them.
  1119  	Pattern string `json:"pattern" api:"required"`
  1120  	// Optional directory root to search under. Defaults to the runner's working
  1121  	// directory.
  1122  	Path string `json:"path"`
  1123  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1124  	JSON struct {
  1125  		Pattern     respjson.Field
  1126  		Path        respjson.Field
  1127  		ExtraFields map[string]respjson.Field
  1128  		raw         string
  1129  	} `json:"-"`
  1130  }
  1131  
  1132  // Returns the unmodified JSON received from the API
  1133  func (r BetaManagedAgentsAgentToolset20260401GlobInput) RawJSON() string { return r.JSON.raw }
  1134  func (r *BetaManagedAgentsAgentToolset20260401GlobInput) UnmarshalJSON(data []byte) error {
  1135  	return apijson.UnmarshalRoot(data, r)
  1136  }
  1137  
  1138  // Input payload for the `grep` tool. Searches file contents for a regular
  1139  // expression, returning matching lines.
  1140  type BetaManagedAgentsAgentToolset20260401GrepInput struct {
  1141  	// Regular expression to search for.
  1142  	Pattern string `json:"pattern" api:"required"`
  1143  	// Optional directory root to search under. Defaults to the runner's working
  1144  	// directory.
  1145  	Path string `json:"path"`
  1146  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1147  	JSON struct {
  1148  		Pattern     respjson.Field
  1149  		Path        respjson.Field
  1150  		ExtraFields map[string]respjson.Field
  1151  		raw         string
  1152  	} `json:"-"`
  1153  }
  1154  
  1155  // Returns the unmodified JSON received from the API
  1156  func (r BetaManagedAgentsAgentToolset20260401GrepInput) RawJSON() string { return r.JSON.raw }
  1157  func (r *BetaManagedAgentsAgentToolset20260401GrepInput) UnmarshalJSON(data []byte) error {
  1158  	return apijson.UnmarshalRoot(data, r)
  1159  }
  1160  
  1161  // Configuration for built-in agent tools. Use this to enable or disable groups of
  1162  // tools available to the agent.
  1163  //
  1164  // The property Type is required.
  1165  type BetaManagedAgentsAgentToolset20260401Params struct {
  1166  	// Any of "agent_toolset_20260401".
  1167  	Type BetaManagedAgentsAgentToolset20260401ParamsType `json:"type,omitzero" api:"required"`
  1168  	// Per-tool configuration overrides.
  1169  	Configs []BetaManagedAgentsAgentToolConfigParamsUnion `json:"configs,omitzero"`
  1170  	// Default configuration for all tools in a toolset.
  1171  	DefaultConfig BetaManagedAgentsAgentToolsetDefaultConfigParams `json:"default_config,omitzero"`
  1172  	paramObj
  1173  }
  1174  
  1175  func (r BetaManagedAgentsAgentToolset20260401Params) MarshalJSON() (data []byte, err error) {
  1176  	type shadow BetaManagedAgentsAgentToolset20260401Params
  1177  	return param.MarshalObject(r, (*shadow)(&r))
  1178  }
  1179  func (r *BetaManagedAgentsAgentToolset20260401Params) UnmarshalJSON(data []byte) error {
  1180  	return apijson.UnmarshalRoot(data, r)
  1181  }
  1182  
  1183  type BetaManagedAgentsAgentToolset20260401ParamsType string
  1184  
  1185  const (
  1186  	BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401 BetaManagedAgentsAgentToolset20260401ParamsType = "agent_toolset_20260401"
  1187  )
  1188  
  1189  // Input payload for the `read` tool. Reads file contents relative to the runner's
  1190  // working directory (or absolute when the runner permits).
  1191  type BetaManagedAgentsAgentToolset20260401ReadInput struct {
  1192  	// Path of the file to read.
  1193  	FilePath string `json:"file_path" api:"required"`
  1194  	// Optional `[start_line, end_line]` 1-indexed inclusive range. When omitted the
  1195  	// entire file is returned. `end_line` of 0 or negative means "to end of file".
  1196  	ViewRange []int64 `json:"view_range"`
  1197  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1198  	JSON struct {
  1199  		FilePath    respjson.Field
  1200  		ViewRange   respjson.Field
  1201  		ExtraFields map[string]respjson.Field
  1202  		raw         string
  1203  	} `json:"-"`
  1204  }
  1205  
  1206  // Returns the unmodified JSON received from the API
  1207  func (r BetaManagedAgentsAgentToolset20260401ReadInput) RawJSON() string { return r.JSON.raw }
  1208  func (r *BetaManagedAgentsAgentToolset20260401ReadInput) UnmarshalJSON(data []byte) error {
  1209  	return apijson.UnmarshalRoot(data, r)
  1210  }
  1211  
  1212  // Input payload for the `write` tool. Writes (overwriting) the entire file
  1213  // contents.
  1214  type BetaManagedAgentsAgentToolset20260401WriteInput struct {
  1215  	// Full file contents to write.
  1216  	Content string `json:"content" api:"required"`
  1217  	// Path of the file to write.
  1218  	FilePath string `json:"file_path" api:"required"`
  1219  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1220  	JSON struct {
  1221  		Content     respjson.Field
  1222  		FilePath    respjson.Field
  1223  		ExtraFields map[string]respjson.Field
  1224  		raw         string
  1225  	} `json:"-"`
  1226  }
  1227  
  1228  // Returns the unmodified JSON received from the API
  1229  func (r BetaManagedAgentsAgentToolset20260401WriteInput) RawJSON() string { return r.JSON.raw }
  1230  func (r *BetaManagedAgentsAgentToolset20260401WriteInput) UnmarshalJSON(data []byte) error {
  1231  	return apijson.UnmarshalRoot(data, r)
  1232  }
  1233  
  1234  // Tool calls are automatically approved without user confirmation.
  1235  type BetaManagedAgentsAlwaysAllowPolicy struct {
  1236  	// Any of "always_allow".
  1237  	Type BetaManagedAgentsAlwaysAllowPolicyType `json:"type" api:"required"`
  1238  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1239  	JSON struct {
  1240  		Type        respjson.Field
  1241  		ExtraFields map[string]respjson.Field
  1242  		raw         string
  1243  	} `json:"-"`
  1244  }
  1245  
  1246  // Returns the unmodified JSON received from the API
  1247  func (r BetaManagedAgentsAlwaysAllowPolicy) RawJSON() string { return r.JSON.raw }
  1248  func (r *BetaManagedAgentsAlwaysAllowPolicy) UnmarshalJSON(data []byte) error {
  1249  	return apijson.UnmarshalRoot(data, r)
  1250  }
  1251  
  1252  // ToParam converts this BetaManagedAgentsAlwaysAllowPolicy to a
  1253  // BetaManagedAgentsAlwaysAllowPolicyParam.
  1254  //
  1255  // Warning: the fields of the param type will not be present. ToParam should only
  1256  // be used at the last possible moment before sending a request. Test for this with
  1257  // BetaManagedAgentsAlwaysAllowPolicyParam.Overrides()
  1258  func (r BetaManagedAgentsAlwaysAllowPolicy) ToParam() BetaManagedAgentsAlwaysAllowPolicyParam {
  1259  	return param.Override[BetaManagedAgentsAlwaysAllowPolicyParam](json.RawMessage(r.RawJSON()))
  1260  }
  1261  
  1262  type BetaManagedAgentsAlwaysAllowPolicyType string
  1263  
  1264  const (
  1265  	BetaManagedAgentsAlwaysAllowPolicyTypeAlwaysAllow BetaManagedAgentsAlwaysAllowPolicyType = "always_allow"
  1266  )
  1267  
  1268  // Tool calls are automatically approved without user confirmation.
  1269  //
  1270  // The property Type is required.
  1271  type BetaManagedAgentsAlwaysAllowPolicyParam struct {
  1272  	// Any of "always_allow".
  1273  	Type BetaManagedAgentsAlwaysAllowPolicyType `json:"type,omitzero" api:"required"`
  1274  	paramObj
  1275  }
  1276  
  1277  func (r BetaManagedAgentsAlwaysAllowPolicyParam) MarshalJSON() (data []byte, err error) {
  1278  	type shadow BetaManagedAgentsAlwaysAllowPolicyParam
  1279  	return param.MarshalObject(r, (*shadow)(&r))
  1280  }
  1281  func (r *BetaManagedAgentsAlwaysAllowPolicyParam) UnmarshalJSON(data []byte) error {
  1282  	return apijson.UnmarshalRoot(data, r)
  1283  }
  1284  
  1285  // Tool calls require user confirmation before execution.
  1286  type BetaManagedAgentsAlwaysAskPolicy struct {
  1287  	// Any of "always_ask".
  1288  	Type BetaManagedAgentsAlwaysAskPolicyType `json:"type" api:"required"`
  1289  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1290  	JSON struct {
  1291  		Type        respjson.Field
  1292  		ExtraFields map[string]respjson.Field
  1293  		raw         string
  1294  	} `json:"-"`
  1295  }
  1296  
  1297  // Returns the unmodified JSON received from the API
  1298  func (r BetaManagedAgentsAlwaysAskPolicy) RawJSON() string { return r.JSON.raw }
  1299  func (r *BetaManagedAgentsAlwaysAskPolicy) UnmarshalJSON(data []byte) error {
  1300  	return apijson.UnmarshalRoot(data, r)
  1301  }
  1302  
  1303  // ToParam converts this BetaManagedAgentsAlwaysAskPolicy to a
  1304  // BetaManagedAgentsAlwaysAskPolicyParam.
  1305  //
  1306  // Warning: the fields of the param type will not be present. ToParam should only
  1307  // be used at the last possible moment before sending a request. Test for this with
  1308  // BetaManagedAgentsAlwaysAskPolicyParam.Overrides()
  1309  func (r BetaManagedAgentsAlwaysAskPolicy) ToParam() BetaManagedAgentsAlwaysAskPolicyParam {
  1310  	return param.Override[BetaManagedAgentsAlwaysAskPolicyParam](json.RawMessage(r.RawJSON()))
  1311  }
  1312  
  1313  type BetaManagedAgentsAlwaysAskPolicyType string
  1314  
  1315  const (
  1316  	BetaManagedAgentsAlwaysAskPolicyTypeAlwaysAsk BetaManagedAgentsAlwaysAskPolicyType = "always_ask"
  1317  )
  1318  
  1319  // Tool calls require user confirmation before execution.
  1320  //
  1321  // The property Type is required.
  1322  type BetaManagedAgentsAlwaysAskPolicyParam struct {
  1323  	// Any of "always_ask".
  1324  	Type BetaManagedAgentsAlwaysAskPolicyType `json:"type,omitzero" api:"required"`
  1325  	paramObj
  1326  }
  1327  
  1328  func (r BetaManagedAgentsAlwaysAskPolicyParam) MarshalJSON() (data []byte, err error) {
  1329  	type shadow BetaManagedAgentsAlwaysAskPolicyParam
  1330  	return param.MarshalObject(r, (*shadow)(&r))
  1331  }
  1332  func (r *BetaManagedAgentsAlwaysAskPolicyParam) UnmarshalJSON(data []byte) error {
  1333  	return apijson.UnmarshalRoot(data, r)
  1334  }
  1335  
  1336  // A resolved Anthropic-managed skill.
  1337  type BetaManagedAgentsAnthropicSkill struct {
  1338  	SkillID string `json:"skill_id" api:"required"`
  1339  	// Any of "anthropic".
  1340  	Type    BetaManagedAgentsAnthropicSkillType `json:"type" api:"required"`
  1341  	Version string                              `json:"version" api:"required"`
  1342  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1343  	JSON struct {
  1344  		SkillID     respjson.Field
  1345  		Type        respjson.Field
  1346  		Version     respjson.Field
  1347  		ExtraFields map[string]respjson.Field
  1348  		raw         string
  1349  	} `json:"-"`
  1350  }
  1351  
  1352  // Returns the unmodified JSON received from the API
  1353  func (r BetaManagedAgentsAnthropicSkill) RawJSON() string { return r.JSON.raw }
  1354  func (r *BetaManagedAgentsAnthropicSkill) UnmarshalJSON(data []byte) error {
  1355  	return apijson.UnmarshalRoot(data, r)
  1356  }
  1357  
  1358  type BetaManagedAgentsAnthropicSkillType string
  1359  
  1360  const (
  1361  	BetaManagedAgentsAnthropicSkillTypeAnthropic BetaManagedAgentsAnthropicSkillType = "anthropic"
  1362  )
  1363  
  1364  // An Anthropic-managed skill.
  1365  //
  1366  // The properties SkillID, Type are required.
  1367  type BetaManagedAgentsAnthropicSkillParams struct {
  1368  	// Identifier of the Anthropic skill (e.g., "xlsx").
  1369  	SkillID string `json:"skill_id" api:"required"`
  1370  	// Any of "anthropic".
  1371  	Type BetaManagedAgentsAnthropicSkillParamsType `json:"type,omitzero" api:"required"`
  1372  	// Version to pin. Defaults to latest if omitted.
  1373  	Version param.Opt[string] `json:"version,omitzero"`
  1374  	paramObj
  1375  }
  1376  
  1377  func (r BetaManagedAgentsAnthropicSkillParams) MarshalJSON() (data []byte, err error) {
  1378  	type shadow BetaManagedAgentsAnthropicSkillParams
  1379  	return param.MarshalObject(r, (*shadow)(&r))
  1380  }
  1381  func (r *BetaManagedAgentsAnthropicSkillParams) UnmarshalJSON(data []byte) error {
  1382  	return apijson.UnmarshalRoot(data, r)
  1383  }
  1384  
  1385  type BetaManagedAgentsAnthropicSkillParamsType string
  1386  
  1387  const (
  1388  	BetaManagedAgentsAnthropicSkillParamsTypeAnthropic BetaManagedAgentsAnthropicSkillParamsType = "anthropic"
  1389  )
  1390  
  1391  // Configuration for the bash tool.
  1392  type BetaManagedAgentsBashToolConfig struct {
  1393  	Enabled bool          `json:"enabled" api:"required"`
  1394  	Name    constant.Bash `json:"name" default:"bash"`
  1395  	// Permission policy for tool execution.
  1396  	PermissionPolicy BetaManagedAgentsBashToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  1397  	Type             constant.Bash                                        `json:"type" default:"bash"`
  1398  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1399  	JSON struct {
  1400  		Enabled          respjson.Field
  1401  		Name             respjson.Field
  1402  		PermissionPolicy respjson.Field
  1403  		Type             respjson.Field
  1404  		ExtraFields      map[string]respjson.Field
  1405  		raw              string
  1406  	} `json:"-"`
  1407  }
  1408  
  1409  // Returns the unmodified JSON received from the API
  1410  func (r BetaManagedAgentsBashToolConfig) RawJSON() string { return r.JSON.raw }
  1411  func (r *BetaManagedAgentsBashToolConfig) UnmarshalJSON(data []byte) error {
  1412  	return apijson.UnmarshalRoot(data, r)
  1413  }
  1414  
  1415  // BetaManagedAgentsBashToolConfigPermissionPolicyUnion contains all possible
  1416  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  1417  // [BetaManagedAgentsAlwaysAskPolicy].
  1418  //
  1419  // Use the [BetaManagedAgentsBashToolConfigPermissionPolicyUnion.AsAny] method to
  1420  // switch on the variant.
  1421  //
  1422  // Use the methods beginning with 'As' to cast the union to one of its variants.
  1423  type BetaManagedAgentsBashToolConfigPermissionPolicyUnion struct {
  1424  	// Any of "always_allow", "always_ask".
  1425  	Type string `json:"type"`
  1426  	JSON struct {
  1427  		Type respjson.Field
  1428  		raw  string
  1429  	} `json:"-"`
  1430  }
  1431  
  1432  // anyBetaManagedAgentsBashToolConfigPermissionPolicy is implemented by each
  1433  // variant of [BetaManagedAgentsBashToolConfigPermissionPolicyUnion] to add type
  1434  // safety for the return type of
  1435  // [BetaManagedAgentsBashToolConfigPermissionPolicyUnion.AsAny]
  1436  type anyBetaManagedAgentsBashToolConfigPermissionPolicy interface {
  1437  	implBetaManagedAgentsBashToolConfigPermissionPolicyUnion()
  1438  }
  1439  
  1440  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsBashToolConfigPermissionPolicyUnion() {
  1441  }
  1442  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsBashToolConfigPermissionPolicyUnion() {}
  1443  
  1444  // Use the following switch statement to find the correct variant
  1445  //
  1446  //	switch variant := BetaManagedAgentsBashToolConfigPermissionPolicyUnion.AsAny().(type) {
  1447  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  1448  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  1449  //	default:
  1450  //	  fmt.Errorf("no variant present")
  1451  //	}
  1452  func (u BetaManagedAgentsBashToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsBashToolConfigPermissionPolicy {
  1453  	switch u.Type {
  1454  	case "always_allow":
  1455  		return u.AsAlwaysAllow()
  1456  	case "always_ask":
  1457  		return u.AsAlwaysAsk()
  1458  	}
  1459  	return nil
  1460  }
  1461  
  1462  func (u BetaManagedAgentsBashToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  1463  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  1464  	return
  1465  }
  1466  
  1467  func (u BetaManagedAgentsBashToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  1468  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  1469  	return
  1470  }
  1471  
  1472  // Returns the unmodified JSON received from the API
  1473  func (u BetaManagedAgentsBashToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  1474  
  1475  func (r *BetaManagedAgentsBashToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  1476  	return apijson.UnmarshalRoot(data, r)
  1477  }
  1478  
  1479  // Configuration override for the bash tool.
  1480  //
  1481  // The property Name is required.
  1482  type BetaManagedAgentsBashToolConfigParams struct {
  1483  	// Whether this tool is enabled and available to Claude. Overrides the
  1484  	// default_config setting.
  1485  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  1486  	// Permission policy for tool execution.
  1487  	PermissionPolicy BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  1488  	// Any of "bash".
  1489  	Type BetaManagedAgentsBashToolConfigParamsType `json:"type,omitzero"`
  1490  	// Must be "bash".
  1491  	//
  1492  	// This field can be elided, and will marshal its zero value as "bash".
  1493  	Name constant.Bash `json:"name" default:"bash"`
  1494  	paramObj
  1495  }
  1496  
  1497  func (r BetaManagedAgentsBashToolConfigParams) MarshalJSON() (data []byte, err error) {
  1498  	type shadow BetaManagedAgentsBashToolConfigParams
  1499  	return param.MarshalObject(r, (*shadow)(&r))
  1500  }
  1501  func (r *BetaManagedAgentsBashToolConfigParams) UnmarshalJSON(data []byte) error {
  1502  	return apijson.UnmarshalRoot(data, r)
  1503  }
  1504  
  1505  // Only one field can be non-zero.
  1506  //
  1507  // Use [param.IsOmitted] to confirm if a field is set.
  1508  type BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion struct {
  1509  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  1510  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  1511  	paramUnion
  1512  }
  1513  
  1514  func (u BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  1515  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  1516  }
  1517  func (u *BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  1518  	return apijson.UnmarshalRoot(data, u)
  1519  }
  1520  
  1521  func (u *BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion) asAny() any {
  1522  	if !param.IsOmitted(u.OfAlwaysAllow) {
  1523  		return u.OfAlwaysAllow
  1524  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  1525  		return u.OfAlwaysAsk
  1526  	}
  1527  	return nil
  1528  }
  1529  
  1530  // Returns a pointer to the underlying variant's property, if present.
  1531  func (u BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion) GetType() *string {
  1532  	if vt := u.OfAlwaysAllow; vt != nil {
  1533  		return (*string)(&vt.Type)
  1534  	} else if vt := u.OfAlwaysAsk; vt != nil {
  1535  		return (*string)(&vt.Type)
  1536  	}
  1537  	return nil
  1538  }
  1539  
  1540  func init() {
  1541  	apijson.RegisterUnion[BetaManagedAgentsBashToolConfigParamsPermissionPolicyUnion](
  1542  		"type",
  1543  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  1544  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  1545  	)
  1546  }
  1547  
  1548  type BetaManagedAgentsBashToolConfigParamsType string
  1549  
  1550  const (
  1551  	BetaManagedAgentsBashToolConfigParamsTypeBash BetaManagedAgentsBashToolConfigParamsType = "bash"
  1552  )
  1553  
  1554  // A resolved user-created custom skill.
  1555  type BetaManagedAgentsCustomSkill struct {
  1556  	SkillID string `json:"skill_id" api:"required"`
  1557  	// Any of "custom".
  1558  	Type    BetaManagedAgentsCustomSkillType `json:"type" api:"required"`
  1559  	Version string                           `json:"version" api:"required"`
  1560  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1561  	JSON struct {
  1562  		SkillID     respjson.Field
  1563  		Type        respjson.Field
  1564  		Version     respjson.Field
  1565  		ExtraFields map[string]respjson.Field
  1566  		raw         string
  1567  	} `json:"-"`
  1568  }
  1569  
  1570  // Returns the unmodified JSON received from the API
  1571  func (r BetaManagedAgentsCustomSkill) RawJSON() string { return r.JSON.raw }
  1572  func (r *BetaManagedAgentsCustomSkill) UnmarshalJSON(data []byte) error {
  1573  	return apijson.UnmarshalRoot(data, r)
  1574  }
  1575  
  1576  type BetaManagedAgentsCustomSkillType string
  1577  
  1578  const (
  1579  	BetaManagedAgentsCustomSkillTypeCustom BetaManagedAgentsCustomSkillType = "custom"
  1580  )
  1581  
  1582  // A user-created custom skill.
  1583  //
  1584  // The properties SkillID, Type are required.
  1585  type BetaManagedAgentsCustomSkillParams struct {
  1586  	// Tagged ID of the custom skill (e.g., "skill_01XJ5...").
  1587  	SkillID string `json:"skill_id" api:"required"`
  1588  	// Any of "custom".
  1589  	Type BetaManagedAgentsCustomSkillParamsType `json:"type,omitzero" api:"required"`
  1590  	// Version to pin. Defaults to latest if omitted.
  1591  	Version param.Opt[string] `json:"version,omitzero"`
  1592  	paramObj
  1593  }
  1594  
  1595  func (r BetaManagedAgentsCustomSkillParams) MarshalJSON() (data []byte, err error) {
  1596  	type shadow BetaManagedAgentsCustomSkillParams
  1597  	return param.MarshalObject(r, (*shadow)(&r))
  1598  }
  1599  func (r *BetaManagedAgentsCustomSkillParams) UnmarshalJSON(data []byte) error {
  1600  	return apijson.UnmarshalRoot(data, r)
  1601  }
  1602  
  1603  type BetaManagedAgentsCustomSkillParamsType string
  1604  
  1605  const (
  1606  	BetaManagedAgentsCustomSkillParamsTypeCustom BetaManagedAgentsCustomSkillParamsType = "custom"
  1607  )
  1608  
  1609  // A custom tool as returned in API responses.
  1610  type BetaManagedAgentsCustomTool struct {
  1611  	Description string `json:"description" api:"required"`
  1612  	// JSON Schema for custom tool input parameters.
  1613  	InputSchema BetaManagedAgentsCustomToolInputSchema `json:"input_schema" api:"required"`
  1614  	Name        string                                 `json:"name" api:"required"`
  1615  	// Any of "custom".
  1616  	Type BetaManagedAgentsCustomToolType `json:"type" api:"required"`
  1617  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1618  	JSON struct {
  1619  		Description respjson.Field
  1620  		InputSchema respjson.Field
  1621  		Name        respjson.Field
  1622  		Type        respjson.Field
  1623  		ExtraFields map[string]respjson.Field
  1624  		raw         string
  1625  	} `json:"-"`
  1626  }
  1627  
  1628  // Returns the unmodified JSON received from the API
  1629  func (r BetaManagedAgentsCustomTool) RawJSON() string { return r.JSON.raw }
  1630  func (r *BetaManagedAgentsCustomTool) UnmarshalJSON(data []byte) error {
  1631  	return apijson.UnmarshalRoot(data, r)
  1632  }
  1633  
  1634  type BetaManagedAgentsCustomToolType string
  1635  
  1636  const (
  1637  	BetaManagedAgentsCustomToolTypeCustom BetaManagedAgentsCustomToolType = "custom"
  1638  )
  1639  
  1640  // JSON Schema for custom tool input parameters.
  1641  type BetaManagedAgentsCustomToolInputSchema struct {
  1642  	Type        constant.Object `json:"type" default:"object"`
  1643  	Properties  map[string]any  `json:"properties" api:"nullable"`
  1644  	Required    []string        `json:"required" api:"nullable"`
  1645  	ExtraFields map[string]any  `json:"" api:"extrafields"`
  1646  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1647  	JSON struct {
  1648  		Type        respjson.Field
  1649  		Properties  respjson.Field
  1650  		Required    respjson.Field
  1651  		ExtraFields map[string]respjson.Field
  1652  		raw         string
  1653  	} `json:"-"`
  1654  }
  1655  
  1656  // Returns the unmodified JSON received from the API
  1657  func (r BetaManagedAgentsCustomToolInputSchema) RawJSON() string { return r.JSON.raw }
  1658  func (r *BetaManagedAgentsCustomToolInputSchema) UnmarshalJSON(data []byte) error {
  1659  	return apijson.UnmarshalRoot(data, r)
  1660  }
  1661  
  1662  // ToParam converts this BetaManagedAgentsCustomToolInputSchema to a
  1663  // BetaManagedAgentsCustomToolInputSchemaParam.
  1664  //
  1665  // Warning: the fields of the param type will not be present. ToParam should only
  1666  // be used at the last possible moment before sending a request. Test for this with
  1667  // BetaManagedAgentsCustomToolInputSchemaParam.Overrides()
  1668  func (r BetaManagedAgentsCustomToolInputSchema) ToParam() BetaManagedAgentsCustomToolInputSchemaParam {
  1669  	return param.Override[BetaManagedAgentsCustomToolInputSchemaParam](json.RawMessage(r.RawJSON()))
  1670  }
  1671  
  1672  // JSON Schema for custom tool input parameters.
  1673  //
  1674  // The property Type is required.
  1675  type BetaManagedAgentsCustomToolInputSchemaParam struct {
  1676  	Properties map[string]any `json:"properties,omitzero"`
  1677  	Required   []string       `json:"required,omitzero"`
  1678  	// This field can be elided, and will marshal its zero value as "object".
  1679  	Type        constant.Object `json:"type" default:"object"`
  1680  	ExtraFields map[string]any  `json:"-"`
  1681  	paramObj
  1682  }
  1683  
  1684  func (r BetaManagedAgentsCustomToolInputSchemaParam) MarshalJSON() (data []byte, err error) {
  1685  	type shadow BetaManagedAgentsCustomToolInputSchemaParam
  1686  	return param.MarshalWithExtras(r, (*shadow)(&r), r.ExtraFields)
  1687  }
  1688  func (r *BetaManagedAgentsCustomToolInputSchemaParam) UnmarshalJSON(data []byte) error {
  1689  	return apijson.UnmarshalRoot(data, r)
  1690  }
  1691  
  1692  // A custom tool that is executed by the API client rather than the agent. When the
  1693  // agent calls this tool, an `agent.custom_tool_use` event is emitted and the
  1694  // session goes idle, waiting for the client to provide the result via a
  1695  // `user.custom_tool_result` event.
  1696  //
  1697  // The properties Description, InputSchema, Name, Type are required.
  1698  type BetaManagedAgentsCustomToolParams struct {
  1699  	// Description of what the tool does, shown to the agent to help it decide when to
  1700  	// use the tool.
  1701  	Description string `json:"description" api:"required"`
  1702  	// JSON Schema for custom tool input parameters.
  1703  	InputSchema BetaManagedAgentsCustomToolInputSchemaParam `json:"input_schema,omitzero" api:"required"`
  1704  	// Unique name for the tool. 1-128 characters; letters, digits, underscores, and
  1705  	// hyphens.
  1706  	Name string `json:"name" api:"required"`
  1707  	// Any of "custom".
  1708  	Type BetaManagedAgentsCustomToolParamsType `json:"type,omitzero" api:"required"`
  1709  	paramObj
  1710  }
  1711  
  1712  func (r BetaManagedAgentsCustomToolParams) MarshalJSON() (data []byte, err error) {
  1713  	type shadow BetaManagedAgentsCustomToolParams
  1714  	return param.MarshalObject(r, (*shadow)(&r))
  1715  }
  1716  func (r *BetaManagedAgentsCustomToolParams) UnmarshalJSON(data []byte) error {
  1717  	return apijson.UnmarshalRoot(data, r)
  1718  }
  1719  
  1720  type BetaManagedAgentsCustomToolParamsType string
  1721  
  1722  const (
  1723  	BetaManagedAgentsCustomToolParamsTypeCustom BetaManagedAgentsCustomToolParamsType = "custom"
  1724  )
  1725  
  1726  // Configuration for the edit tool.
  1727  type BetaManagedAgentsEditToolConfig struct {
  1728  	Enabled bool          `json:"enabled" api:"required"`
  1729  	Name    constant.Edit `json:"name" default:"edit"`
  1730  	// Permission policy for tool execution.
  1731  	PermissionPolicy BetaManagedAgentsEditToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  1732  	Type             constant.Edit                                        `json:"type" default:"edit"`
  1733  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1734  	JSON struct {
  1735  		Enabled          respjson.Field
  1736  		Name             respjson.Field
  1737  		PermissionPolicy respjson.Field
  1738  		Type             respjson.Field
  1739  		ExtraFields      map[string]respjson.Field
  1740  		raw              string
  1741  	} `json:"-"`
  1742  }
  1743  
  1744  // Returns the unmodified JSON received from the API
  1745  func (r BetaManagedAgentsEditToolConfig) RawJSON() string { return r.JSON.raw }
  1746  func (r *BetaManagedAgentsEditToolConfig) UnmarshalJSON(data []byte) error {
  1747  	return apijson.UnmarshalRoot(data, r)
  1748  }
  1749  
  1750  // BetaManagedAgentsEditToolConfigPermissionPolicyUnion contains all possible
  1751  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  1752  // [BetaManagedAgentsAlwaysAskPolicy].
  1753  //
  1754  // Use the [BetaManagedAgentsEditToolConfigPermissionPolicyUnion.AsAny] method to
  1755  // switch on the variant.
  1756  //
  1757  // Use the methods beginning with 'As' to cast the union to one of its variants.
  1758  type BetaManagedAgentsEditToolConfigPermissionPolicyUnion struct {
  1759  	// Any of "always_allow", "always_ask".
  1760  	Type string `json:"type"`
  1761  	JSON struct {
  1762  		Type respjson.Field
  1763  		raw  string
  1764  	} `json:"-"`
  1765  }
  1766  
  1767  // anyBetaManagedAgentsEditToolConfigPermissionPolicy is implemented by each
  1768  // variant of [BetaManagedAgentsEditToolConfigPermissionPolicyUnion] to add type
  1769  // safety for the return type of
  1770  // [BetaManagedAgentsEditToolConfigPermissionPolicyUnion.AsAny]
  1771  type anyBetaManagedAgentsEditToolConfigPermissionPolicy interface {
  1772  	implBetaManagedAgentsEditToolConfigPermissionPolicyUnion()
  1773  }
  1774  
  1775  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsEditToolConfigPermissionPolicyUnion() {
  1776  }
  1777  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsEditToolConfigPermissionPolicyUnion() {}
  1778  
  1779  // Use the following switch statement to find the correct variant
  1780  //
  1781  //	switch variant := BetaManagedAgentsEditToolConfigPermissionPolicyUnion.AsAny().(type) {
  1782  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  1783  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  1784  //	default:
  1785  //	  fmt.Errorf("no variant present")
  1786  //	}
  1787  func (u BetaManagedAgentsEditToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsEditToolConfigPermissionPolicy {
  1788  	switch u.Type {
  1789  	case "always_allow":
  1790  		return u.AsAlwaysAllow()
  1791  	case "always_ask":
  1792  		return u.AsAlwaysAsk()
  1793  	}
  1794  	return nil
  1795  }
  1796  
  1797  func (u BetaManagedAgentsEditToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  1798  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  1799  	return
  1800  }
  1801  
  1802  func (u BetaManagedAgentsEditToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  1803  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  1804  	return
  1805  }
  1806  
  1807  // Returns the unmodified JSON received from the API
  1808  func (u BetaManagedAgentsEditToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  1809  
  1810  func (r *BetaManagedAgentsEditToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  1811  	return apijson.UnmarshalRoot(data, r)
  1812  }
  1813  
  1814  // Configuration override for the edit tool.
  1815  //
  1816  // The property Name is required.
  1817  type BetaManagedAgentsEditToolConfigParams struct {
  1818  	// Whether this tool is enabled and available to Claude. Overrides the
  1819  	// default_config setting.
  1820  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  1821  	// Permission policy for tool execution.
  1822  	PermissionPolicy BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  1823  	// Any of "edit".
  1824  	Type BetaManagedAgentsEditToolConfigParamsType `json:"type,omitzero"`
  1825  	// Must be "edit".
  1826  	//
  1827  	// This field can be elided, and will marshal its zero value as "edit".
  1828  	Name constant.Edit `json:"name" default:"edit"`
  1829  	paramObj
  1830  }
  1831  
  1832  func (r BetaManagedAgentsEditToolConfigParams) MarshalJSON() (data []byte, err error) {
  1833  	type shadow BetaManagedAgentsEditToolConfigParams
  1834  	return param.MarshalObject(r, (*shadow)(&r))
  1835  }
  1836  func (r *BetaManagedAgentsEditToolConfigParams) UnmarshalJSON(data []byte) error {
  1837  	return apijson.UnmarshalRoot(data, r)
  1838  }
  1839  
  1840  // Only one field can be non-zero.
  1841  //
  1842  // Use [param.IsOmitted] to confirm if a field is set.
  1843  type BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion struct {
  1844  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  1845  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  1846  	paramUnion
  1847  }
  1848  
  1849  func (u BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  1850  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  1851  }
  1852  func (u *BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  1853  	return apijson.UnmarshalRoot(data, u)
  1854  }
  1855  
  1856  func (u *BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion) asAny() any {
  1857  	if !param.IsOmitted(u.OfAlwaysAllow) {
  1858  		return u.OfAlwaysAllow
  1859  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  1860  		return u.OfAlwaysAsk
  1861  	}
  1862  	return nil
  1863  }
  1864  
  1865  // Returns a pointer to the underlying variant's property, if present.
  1866  func (u BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion) GetType() *string {
  1867  	if vt := u.OfAlwaysAllow; vt != nil {
  1868  		return (*string)(&vt.Type)
  1869  	} else if vt := u.OfAlwaysAsk; vt != nil {
  1870  		return (*string)(&vt.Type)
  1871  	}
  1872  	return nil
  1873  }
  1874  
  1875  func init() {
  1876  	apijson.RegisterUnion[BetaManagedAgentsEditToolConfigParamsPermissionPolicyUnion](
  1877  		"type",
  1878  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  1879  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  1880  	)
  1881  }
  1882  
  1883  type BetaManagedAgentsEditToolConfigParamsType string
  1884  
  1885  const (
  1886  	BetaManagedAgentsEditToolConfigParamsTypeEdit BetaManagedAgentsEditToolConfigParamsType = "edit"
  1887  )
  1888  
  1889  // High effort. Favors reasoning depth.
  1890  type BetaManagedAgentsEffortHigh struct {
  1891  	// Any of "high".
  1892  	Type BetaManagedAgentsEffortHighType `json:"type" api:"required"`
  1893  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1894  	JSON struct {
  1895  		Type        respjson.Field
  1896  		ExtraFields map[string]respjson.Field
  1897  		raw         string
  1898  	} `json:"-"`
  1899  }
  1900  
  1901  // Returns the unmodified JSON received from the API
  1902  func (r BetaManagedAgentsEffortHigh) RawJSON() string { return r.JSON.raw }
  1903  func (r *BetaManagedAgentsEffortHigh) UnmarshalJSON(data []byte) error {
  1904  	return apijson.UnmarshalRoot(data, r)
  1905  }
  1906  
  1907  // ToParam converts this BetaManagedAgentsEffortHigh to a
  1908  // BetaManagedAgentsEffortHighParam.
  1909  //
  1910  // Warning: the fields of the param type will not be present. ToParam should only
  1911  // be used at the last possible moment before sending a request. Test for this with
  1912  // BetaManagedAgentsEffortHighParam.Overrides()
  1913  func (r BetaManagedAgentsEffortHigh) ToParam() BetaManagedAgentsEffortHighParam {
  1914  	return param.Override[BetaManagedAgentsEffortHighParam](json.RawMessage(r.RawJSON()))
  1915  }
  1916  
  1917  type BetaManagedAgentsEffortHighType string
  1918  
  1919  const (
  1920  	BetaManagedAgentsEffortHighTypeHigh BetaManagedAgentsEffortHighType = "high"
  1921  )
  1922  
  1923  // High effort. Favors reasoning depth.
  1924  //
  1925  // The property Type is required.
  1926  type BetaManagedAgentsEffortHighParam struct {
  1927  	// Any of "high".
  1928  	Type BetaManagedAgentsEffortHighType `json:"type,omitzero" api:"required"`
  1929  	paramObj
  1930  }
  1931  
  1932  func (r BetaManagedAgentsEffortHighParam) MarshalJSON() (data []byte, err error) {
  1933  	type shadow BetaManagedAgentsEffortHighParam
  1934  	return param.MarshalObject(r, (*shadow)(&r))
  1935  }
  1936  func (r *BetaManagedAgentsEffortHighParam) UnmarshalJSON(data []byte) error {
  1937  	return apijson.UnmarshalRoot(data, r)
  1938  }
  1939  
  1940  // Low effort. Favors latency over reasoning depth.
  1941  type BetaManagedAgentsEffortLow struct {
  1942  	// Any of "low".
  1943  	Type BetaManagedAgentsEffortLowType `json:"type" api:"required"`
  1944  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1945  	JSON struct {
  1946  		Type        respjson.Field
  1947  		ExtraFields map[string]respjson.Field
  1948  		raw         string
  1949  	} `json:"-"`
  1950  }
  1951  
  1952  // Returns the unmodified JSON received from the API
  1953  func (r BetaManagedAgentsEffortLow) RawJSON() string { return r.JSON.raw }
  1954  func (r *BetaManagedAgentsEffortLow) UnmarshalJSON(data []byte) error {
  1955  	return apijson.UnmarshalRoot(data, r)
  1956  }
  1957  
  1958  // ToParam converts this BetaManagedAgentsEffortLow to a
  1959  // BetaManagedAgentsEffortLowParam.
  1960  //
  1961  // Warning: the fields of the param type will not be present. ToParam should only
  1962  // be used at the last possible moment before sending a request. Test for this with
  1963  // BetaManagedAgentsEffortLowParam.Overrides()
  1964  func (r BetaManagedAgentsEffortLow) ToParam() BetaManagedAgentsEffortLowParam {
  1965  	return param.Override[BetaManagedAgentsEffortLowParam](json.RawMessage(r.RawJSON()))
  1966  }
  1967  
  1968  type BetaManagedAgentsEffortLowType string
  1969  
  1970  const (
  1971  	BetaManagedAgentsEffortLowTypeLow BetaManagedAgentsEffortLowType = "low"
  1972  )
  1973  
  1974  // Low effort. Favors latency over reasoning depth.
  1975  //
  1976  // The property Type is required.
  1977  type BetaManagedAgentsEffortLowParam struct {
  1978  	// Any of "low".
  1979  	Type BetaManagedAgentsEffortLowType `json:"type,omitzero" api:"required"`
  1980  	paramObj
  1981  }
  1982  
  1983  func (r BetaManagedAgentsEffortLowParam) MarshalJSON() (data []byte, err error) {
  1984  	type shadow BetaManagedAgentsEffortLowParam
  1985  	return param.MarshalObject(r, (*shadow)(&r))
  1986  }
  1987  func (r *BetaManagedAgentsEffortLowParam) UnmarshalJSON(data []byte) error {
  1988  	return apijson.UnmarshalRoot(data, r)
  1989  }
  1990  
  1991  // Maximum effort. Favors reasoning depth over latency.
  1992  type BetaManagedAgentsEffortMax struct {
  1993  	// Any of "max".
  1994  	Type BetaManagedAgentsEffortMaxType `json:"type" api:"required"`
  1995  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  1996  	JSON struct {
  1997  		Type        respjson.Field
  1998  		ExtraFields map[string]respjson.Field
  1999  		raw         string
  2000  	} `json:"-"`
  2001  }
  2002  
  2003  // Returns the unmodified JSON received from the API
  2004  func (r BetaManagedAgentsEffortMax) RawJSON() string { return r.JSON.raw }
  2005  func (r *BetaManagedAgentsEffortMax) UnmarshalJSON(data []byte) error {
  2006  	return apijson.UnmarshalRoot(data, r)
  2007  }
  2008  
  2009  // ToParam converts this BetaManagedAgentsEffortMax to a
  2010  // BetaManagedAgentsEffortMaxParam.
  2011  //
  2012  // Warning: the fields of the param type will not be present. ToParam should only
  2013  // be used at the last possible moment before sending a request. Test for this with
  2014  // BetaManagedAgentsEffortMaxParam.Overrides()
  2015  func (r BetaManagedAgentsEffortMax) ToParam() BetaManagedAgentsEffortMaxParam {
  2016  	return param.Override[BetaManagedAgentsEffortMaxParam](json.RawMessage(r.RawJSON()))
  2017  }
  2018  
  2019  type BetaManagedAgentsEffortMaxType string
  2020  
  2021  const (
  2022  	BetaManagedAgentsEffortMaxTypeMax BetaManagedAgentsEffortMaxType = "max"
  2023  )
  2024  
  2025  // Maximum effort. Favors reasoning depth over latency.
  2026  //
  2027  // The property Type is required.
  2028  type BetaManagedAgentsEffortMaxParam struct {
  2029  	// Any of "max".
  2030  	Type BetaManagedAgentsEffortMaxType `json:"type,omitzero" api:"required"`
  2031  	paramObj
  2032  }
  2033  
  2034  func (r BetaManagedAgentsEffortMaxParam) MarshalJSON() (data []byte, err error) {
  2035  	type shadow BetaManagedAgentsEffortMaxParam
  2036  	return param.MarshalObject(r, (*shadow)(&r))
  2037  }
  2038  func (r *BetaManagedAgentsEffortMaxParam) UnmarshalJSON(data []byte) error {
  2039  	return apijson.UnmarshalRoot(data, r)
  2040  }
  2041  
  2042  // Medium effort. Balances latency and reasoning depth.
  2043  type BetaManagedAgentsEffortMedium struct {
  2044  	// Any of "medium".
  2045  	Type BetaManagedAgentsEffortMediumType `json:"type" api:"required"`
  2046  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2047  	JSON struct {
  2048  		Type        respjson.Field
  2049  		ExtraFields map[string]respjson.Field
  2050  		raw         string
  2051  	} `json:"-"`
  2052  }
  2053  
  2054  // Returns the unmodified JSON received from the API
  2055  func (r BetaManagedAgentsEffortMedium) RawJSON() string { return r.JSON.raw }
  2056  func (r *BetaManagedAgentsEffortMedium) UnmarshalJSON(data []byte) error {
  2057  	return apijson.UnmarshalRoot(data, r)
  2058  }
  2059  
  2060  // ToParam converts this BetaManagedAgentsEffortMedium to a
  2061  // BetaManagedAgentsEffortMediumParam.
  2062  //
  2063  // Warning: the fields of the param type will not be present. ToParam should only
  2064  // be used at the last possible moment before sending a request. Test for this with
  2065  // BetaManagedAgentsEffortMediumParam.Overrides()
  2066  func (r BetaManagedAgentsEffortMedium) ToParam() BetaManagedAgentsEffortMediumParam {
  2067  	return param.Override[BetaManagedAgentsEffortMediumParam](json.RawMessage(r.RawJSON()))
  2068  }
  2069  
  2070  type BetaManagedAgentsEffortMediumType string
  2071  
  2072  const (
  2073  	BetaManagedAgentsEffortMediumTypeMedium BetaManagedAgentsEffortMediumType = "medium"
  2074  )
  2075  
  2076  // Medium effort. Balances latency and reasoning depth.
  2077  //
  2078  // The property Type is required.
  2079  type BetaManagedAgentsEffortMediumParam struct {
  2080  	// Any of "medium".
  2081  	Type BetaManagedAgentsEffortMediumType `json:"type,omitzero" api:"required"`
  2082  	paramObj
  2083  }
  2084  
  2085  func (r BetaManagedAgentsEffortMediumParam) MarshalJSON() (data []byte, err error) {
  2086  	type shadow BetaManagedAgentsEffortMediumParam
  2087  	return param.MarshalObject(r, (*shadow)(&r))
  2088  }
  2089  func (r *BetaManagedAgentsEffortMediumParam) UnmarshalJSON(data []byte) error {
  2090  	return apijson.UnmarshalRoot(data, r)
  2091  }
  2092  
  2093  // Extra-high effort. Not all models accept this level.
  2094  type BetaManagedAgentsEffortXhigh struct {
  2095  	// Any of "xhigh".
  2096  	Type BetaManagedAgentsEffortXhighType `json:"type" api:"required"`
  2097  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2098  	JSON struct {
  2099  		Type        respjson.Field
  2100  		ExtraFields map[string]respjson.Field
  2101  		raw         string
  2102  	} `json:"-"`
  2103  }
  2104  
  2105  // Returns the unmodified JSON received from the API
  2106  func (r BetaManagedAgentsEffortXhigh) RawJSON() string { return r.JSON.raw }
  2107  func (r *BetaManagedAgentsEffortXhigh) UnmarshalJSON(data []byte) error {
  2108  	return apijson.UnmarshalRoot(data, r)
  2109  }
  2110  
  2111  // ToParam converts this BetaManagedAgentsEffortXhigh to a
  2112  // BetaManagedAgentsEffortXhighParam.
  2113  //
  2114  // Warning: the fields of the param type will not be present. ToParam should only
  2115  // be used at the last possible moment before sending a request. Test for this with
  2116  // BetaManagedAgentsEffortXhighParam.Overrides()
  2117  func (r BetaManagedAgentsEffortXhigh) ToParam() BetaManagedAgentsEffortXhighParam {
  2118  	return param.Override[BetaManagedAgentsEffortXhighParam](json.RawMessage(r.RawJSON()))
  2119  }
  2120  
  2121  type BetaManagedAgentsEffortXhighType string
  2122  
  2123  const (
  2124  	BetaManagedAgentsEffortXhighTypeXhigh BetaManagedAgentsEffortXhighType = "xhigh"
  2125  )
  2126  
  2127  // Extra-high effort. Not all models accept this level.
  2128  //
  2129  // The property Type is required.
  2130  type BetaManagedAgentsEffortXhighParam struct {
  2131  	// Any of "xhigh".
  2132  	Type BetaManagedAgentsEffortXhighType `json:"type,omitzero" api:"required"`
  2133  	paramObj
  2134  }
  2135  
  2136  func (r BetaManagedAgentsEffortXhighParam) MarshalJSON() (data []byte, err error) {
  2137  	type shadow BetaManagedAgentsEffortXhighParam
  2138  	return param.MarshalObject(r, (*shadow)(&r))
  2139  }
  2140  func (r *BetaManagedAgentsEffortXhighParam) UnmarshalJSON(data []byte) error {
  2141  	return apijson.UnmarshalRoot(data, r)
  2142  }
  2143  
  2144  // Configuration for the glob tool.
  2145  type BetaManagedAgentsGlobToolConfig struct {
  2146  	Enabled bool          `json:"enabled" api:"required"`
  2147  	Name    constant.Glob `json:"name" default:"glob"`
  2148  	// Permission policy for tool execution.
  2149  	PermissionPolicy BetaManagedAgentsGlobToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  2150  	Type             constant.Glob                                        `json:"type" default:"glob"`
  2151  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2152  	JSON struct {
  2153  		Enabled          respjson.Field
  2154  		Name             respjson.Field
  2155  		PermissionPolicy respjson.Field
  2156  		Type             respjson.Field
  2157  		ExtraFields      map[string]respjson.Field
  2158  		raw              string
  2159  	} `json:"-"`
  2160  }
  2161  
  2162  // Returns the unmodified JSON received from the API
  2163  func (r BetaManagedAgentsGlobToolConfig) RawJSON() string { return r.JSON.raw }
  2164  func (r *BetaManagedAgentsGlobToolConfig) UnmarshalJSON(data []byte) error {
  2165  	return apijson.UnmarshalRoot(data, r)
  2166  }
  2167  
  2168  // BetaManagedAgentsGlobToolConfigPermissionPolicyUnion contains all possible
  2169  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  2170  // [BetaManagedAgentsAlwaysAskPolicy].
  2171  //
  2172  // Use the [BetaManagedAgentsGlobToolConfigPermissionPolicyUnion.AsAny] method to
  2173  // switch on the variant.
  2174  //
  2175  // Use the methods beginning with 'As' to cast the union to one of its variants.
  2176  type BetaManagedAgentsGlobToolConfigPermissionPolicyUnion struct {
  2177  	// Any of "always_allow", "always_ask".
  2178  	Type string `json:"type"`
  2179  	JSON struct {
  2180  		Type respjson.Field
  2181  		raw  string
  2182  	} `json:"-"`
  2183  }
  2184  
  2185  // anyBetaManagedAgentsGlobToolConfigPermissionPolicy is implemented by each
  2186  // variant of [BetaManagedAgentsGlobToolConfigPermissionPolicyUnion] to add type
  2187  // safety for the return type of
  2188  // [BetaManagedAgentsGlobToolConfigPermissionPolicyUnion.AsAny]
  2189  type anyBetaManagedAgentsGlobToolConfigPermissionPolicy interface {
  2190  	implBetaManagedAgentsGlobToolConfigPermissionPolicyUnion()
  2191  }
  2192  
  2193  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsGlobToolConfigPermissionPolicyUnion() {
  2194  }
  2195  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsGlobToolConfigPermissionPolicyUnion() {}
  2196  
  2197  // Use the following switch statement to find the correct variant
  2198  //
  2199  //	switch variant := BetaManagedAgentsGlobToolConfigPermissionPolicyUnion.AsAny().(type) {
  2200  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  2201  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  2202  //	default:
  2203  //	  fmt.Errorf("no variant present")
  2204  //	}
  2205  func (u BetaManagedAgentsGlobToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsGlobToolConfigPermissionPolicy {
  2206  	switch u.Type {
  2207  	case "always_allow":
  2208  		return u.AsAlwaysAllow()
  2209  	case "always_ask":
  2210  		return u.AsAlwaysAsk()
  2211  	}
  2212  	return nil
  2213  }
  2214  
  2215  func (u BetaManagedAgentsGlobToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  2216  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2217  	return
  2218  }
  2219  
  2220  func (u BetaManagedAgentsGlobToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  2221  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2222  	return
  2223  }
  2224  
  2225  // Returns the unmodified JSON received from the API
  2226  func (u BetaManagedAgentsGlobToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  2227  
  2228  func (r *BetaManagedAgentsGlobToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2229  	return apijson.UnmarshalRoot(data, r)
  2230  }
  2231  
  2232  // Configuration override for the glob tool.
  2233  //
  2234  // The property Name is required.
  2235  type BetaManagedAgentsGlobToolConfigParams struct {
  2236  	// Whether this tool is enabled and available to Claude. Overrides the
  2237  	// default_config setting.
  2238  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  2239  	// Permission policy for tool execution.
  2240  	PermissionPolicy BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  2241  	// Any of "glob".
  2242  	Type BetaManagedAgentsGlobToolConfigParamsType `json:"type,omitzero"`
  2243  	// Must be "glob".
  2244  	//
  2245  	// This field can be elided, and will marshal its zero value as "glob".
  2246  	Name constant.Glob `json:"name" default:"glob"`
  2247  	paramObj
  2248  }
  2249  
  2250  func (r BetaManagedAgentsGlobToolConfigParams) MarshalJSON() (data []byte, err error) {
  2251  	type shadow BetaManagedAgentsGlobToolConfigParams
  2252  	return param.MarshalObject(r, (*shadow)(&r))
  2253  }
  2254  func (r *BetaManagedAgentsGlobToolConfigParams) UnmarshalJSON(data []byte) error {
  2255  	return apijson.UnmarshalRoot(data, r)
  2256  }
  2257  
  2258  // Only one field can be non-zero.
  2259  //
  2260  // Use [param.IsOmitted] to confirm if a field is set.
  2261  type BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion struct {
  2262  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  2263  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  2264  	paramUnion
  2265  }
  2266  
  2267  func (u BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  2268  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  2269  }
  2270  func (u *BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2271  	return apijson.UnmarshalRoot(data, u)
  2272  }
  2273  
  2274  func (u *BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion) asAny() any {
  2275  	if !param.IsOmitted(u.OfAlwaysAllow) {
  2276  		return u.OfAlwaysAllow
  2277  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  2278  		return u.OfAlwaysAsk
  2279  	}
  2280  	return nil
  2281  }
  2282  
  2283  // Returns a pointer to the underlying variant's property, if present.
  2284  func (u BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion) GetType() *string {
  2285  	if vt := u.OfAlwaysAllow; vt != nil {
  2286  		return (*string)(&vt.Type)
  2287  	} else if vt := u.OfAlwaysAsk; vt != nil {
  2288  		return (*string)(&vt.Type)
  2289  	}
  2290  	return nil
  2291  }
  2292  
  2293  func init() {
  2294  	apijson.RegisterUnion[BetaManagedAgentsGlobToolConfigParamsPermissionPolicyUnion](
  2295  		"type",
  2296  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  2297  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  2298  	)
  2299  }
  2300  
  2301  type BetaManagedAgentsGlobToolConfigParamsType string
  2302  
  2303  const (
  2304  	BetaManagedAgentsGlobToolConfigParamsTypeGlob BetaManagedAgentsGlobToolConfigParamsType = "glob"
  2305  )
  2306  
  2307  // Configuration for the grep tool.
  2308  type BetaManagedAgentsGrepToolConfig struct {
  2309  	Enabled bool          `json:"enabled" api:"required"`
  2310  	Name    constant.Grep `json:"name" default:"grep"`
  2311  	// Permission policy for tool execution.
  2312  	PermissionPolicy BetaManagedAgentsGrepToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  2313  	Type             constant.Grep                                        `json:"type" default:"grep"`
  2314  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2315  	JSON struct {
  2316  		Enabled          respjson.Field
  2317  		Name             respjson.Field
  2318  		PermissionPolicy respjson.Field
  2319  		Type             respjson.Field
  2320  		ExtraFields      map[string]respjson.Field
  2321  		raw              string
  2322  	} `json:"-"`
  2323  }
  2324  
  2325  // Returns the unmodified JSON received from the API
  2326  func (r BetaManagedAgentsGrepToolConfig) RawJSON() string { return r.JSON.raw }
  2327  func (r *BetaManagedAgentsGrepToolConfig) UnmarshalJSON(data []byte) error {
  2328  	return apijson.UnmarshalRoot(data, r)
  2329  }
  2330  
  2331  // BetaManagedAgentsGrepToolConfigPermissionPolicyUnion contains all possible
  2332  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  2333  // [BetaManagedAgentsAlwaysAskPolicy].
  2334  //
  2335  // Use the [BetaManagedAgentsGrepToolConfigPermissionPolicyUnion.AsAny] method to
  2336  // switch on the variant.
  2337  //
  2338  // Use the methods beginning with 'As' to cast the union to one of its variants.
  2339  type BetaManagedAgentsGrepToolConfigPermissionPolicyUnion struct {
  2340  	// Any of "always_allow", "always_ask".
  2341  	Type string `json:"type"`
  2342  	JSON struct {
  2343  		Type respjson.Field
  2344  		raw  string
  2345  	} `json:"-"`
  2346  }
  2347  
  2348  // anyBetaManagedAgentsGrepToolConfigPermissionPolicy is implemented by each
  2349  // variant of [BetaManagedAgentsGrepToolConfigPermissionPolicyUnion] to add type
  2350  // safety for the return type of
  2351  // [BetaManagedAgentsGrepToolConfigPermissionPolicyUnion.AsAny]
  2352  type anyBetaManagedAgentsGrepToolConfigPermissionPolicy interface {
  2353  	implBetaManagedAgentsGrepToolConfigPermissionPolicyUnion()
  2354  }
  2355  
  2356  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsGrepToolConfigPermissionPolicyUnion() {
  2357  }
  2358  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsGrepToolConfigPermissionPolicyUnion() {}
  2359  
  2360  // Use the following switch statement to find the correct variant
  2361  //
  2362  //	switch variant := BetaManagedAgentsGrepToolConfigPermissionPolicyUnion.AsAny().(type) {
  2363  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  2364  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  2365  //	default:
  2366  //	  fmt.Errorf("no variant present")
  2367  //	}
  2368  func (u BetaManagedAgentsGrepToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsGrepToolConfigPermissionPolicy {
  2369  	switch u.Type {
  2370  	case "always_allow":
  2371  		return u.AsAlwaysAllow()
  2372  	case "always_ask":
  2373  		return u.AsAlwaysAsk()
  2374  	}
  2375  	return nil
  2376  }
  2377  
  2378  func (u BetaManagedAgentsGrepToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  2379  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2380  	return
  2381  }
  2382  
  2383  func (u BetaManagedAgentsGrepToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  2384  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2385  	return
  2386  }
  2387  
  2388  // Returns the unmodified JSON received from the API
  2389  func (u BetaManagedAgentsGrepToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  2390  
  2391  func (r *BetaManagedAgentsGrepToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2392  	return apijson.UnmarshalRoot(data, r)
  2393  }
  2394  
  2395  // Configuration override for the grep tool.
  2396  //
  2397  // The property Name is required.
  2398  type BetaManagedAgentsGrepToolConfigParams struct {
  2399  	// Whether this tool is enabled and available to Claude. Overrides the
  2400  	// default_config setting.
  2401  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  2402  	// Permission policy for tool execution.
  2403  	PermissionPolicy BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  2404  	// Any of "grep".
  2405  	Type BetaManagedAgentsGrepToolConfigParamsType `json:"type,omitzero"`
  2406  	// Must be "grep".
  2407  	//
  2408  	// This field can be elided, and will marshal its zero value as "grep".
  2409  	Name constant.Grep `json:"name" default:"grep"`
  2410  	paramObj
  2411  }
  2412  
  2413  func (r BetaManagedAgentsGrepToolConfigParams) MarshalJSON() (data []byte, err error) {
  2414  	type shadow BetaManagedAgentsGrepToolConfigParams
  2415  	return param.MarshalObject(r, (*shadow)(&r))
  2416  }
  2417  func (r *BetaManagedAgentsGrepToolConfigParams) UnmarshalJSON(data []byte) error {
  2418  	return apijson.UnmarshalRoot(data, r)
  2419  }
  2420  
  2421  // Only one field can be non-zero.
  2422  //
  2423  // Use [param.IsOmitted] to confirm if a field is set.
  2424  type BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion struct {
  2425  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  2426  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  2427  	paramUnion
  2428  }
  2429  
  2430  func (u BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  2431  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  2432  }
  2433  func (u *BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2434  	return apijson.UnmarshalRoot(data, u)
  2435  }
  2436  
  2437  func (u *BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion) asAny() any {
  2438  	if !param.IsOmitted(u.OfAlwaysAllow) {
  2439  		return u.OfAlwaysAllow
  2440  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  2441  		return u.OfAlwaysAsk
  2442  	}
  2443  	return nil
  2444  }
  2445  
  2446  // Returns a pointer to the underlying variant's property, if present.
  2447  func (u BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion) GetType() *string {
  2448  	if vt := u.OfAlwaysAllow; vt != nil {
  2449  		return (*string)(&vt.Type)
  2450  	} else if vt := u.OfAlwaysAsk; vt != nil {
  2451  		return (*string)(&vt.Type)
  2452  	}
  2453  	return nil
  2454  }
  2455  
  2456  func init() {
  2457  	apijson.RegisterUnion[BetaManagedAgentsGrepToolConfigParamsPermissionPolicyUnion](
  2458  		"type",
  2459  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  2460  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  2461  	)
  2462  }
  2463  
  2464  type BetaManagedAgentsGrepToolConfigParamsType string
  2465  
  2466  const (
  2467  	BetaManagedAgentsGrepToolConfigParamsTypeGrep BetaManagedAgentsGrepToolConfigParamsType = "grep"
  2468  )
  2469  
  2470  // URL-based MCP server connection as returned in API responses.
  2471  type BetaManagedAgentsMCPServerURLDefinition struct {
  2472  	Name string `json:"name" api:"required"`
  2473  	// Any of "url".
  2474  	Type BetaManagedAgentsMCPServerURLDefinitionType `json:"type" api:"required"`
  2475  	URL  string                                      `json:"url" api:"required"`
  2476  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2477  	JSON struct {
  2478  		Name        respjson.Field
  2479  		Type        respjson.Field
  2480  		URL         respjson.Field
  2481  		ExtraFields map[string]respjson.Field
  2482  		raw         string
  2483  	} `json:"-"`
  2484  }
  2485  
  2486  // Returns the unmodified JSON received from the API
  2487  func (r BetaManagedAgentsMCPServerURLDefinition) RawJSON() string { return r.JSON.raw }
  2488  func (r *BetaManagedAgentsMCPServerURLDefinition) UnmarshalJSON(data []byte) error {
  2489  	return apijson.UnmarshalRoot(data, r)
  2490  }
  2491  
  2492  type BetaManagedAgentsMCPServerURLDefinitionType string
  2493  
  2494  const (
  2495  	BetaManagedAgentsMCPServerURLDefinitionTypeURL BetaManagedAgentsMCPServerURLDefinitionType = "url"
  2496  )
  2497  
  2498  // Resolved configuration for a specific MCP tool.
  2499  type BetaManagedAgentsMCPToolConfig struct {
  2500  	Enabled bool   `json:"enabled" api:"required"`
  2501  	Name    string `json:"name" api:"required"`
  2502  	// Permission policy for tool execution.
  2503  	PermissionPolicy BetaManagedAgentsMCPToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  2504  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2505  	JSON struct {
  2506  		Enabled          respjson.Field
  2507  		Name             respjson.Field
  2508  		PermissionPolicy respjson.Field
  2509  		ExtraFields      map[string]respjson.Field
  2510  		raw              string
  2511  	} `json:"-"`
  2512  }
  2513  
  2514  // Returns the unmodified JSON received from the API
  2515  func (r BetaManagedAgentsMCPToolConfig) RawJSON() string { return r.JSON.raw }
  2516  func (r *BetaManagedAgentsMCPToolConfig) UnmarshalJSON(data []byte) error {
  2517  	return apijson.UnmarshalRoot(data, r)
  2518  }
  2519  
  2520  // BetaManagedAgentsMCPToolConfigPermissionPolicyUnion contains all possible
  2521  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  2522  // [BetaManagedAgentsAlwaysAskPolicy].
  2523  //
  2524  // Use the [BetaManagedAgentsMCPToolConfigPermissionPolicyUnion.AsAny] method to
  2525  // switch on the variant.
  2526  //
  2527  // Use the methods beginning with 'As' to cast the union to one of its variants.
  2528  type BetaManagedAgentsMCPToolConfigPermissionPolicyUnion struct {
  2529  	// Any of "always_allow", "always_ask".
  2530  	Type string `json:"type"`
  2531  	JSON struct {
  2532  		Type respjson.Field
  2533  		raw  string
  2534  	} `json:"-"`
  2535  }
  2536  
  2537  // anyBetaManagedAgentsMCPToolConfigPermissionPolicy is implemented by each variant
  2538  // of [BetaManagedAgentsMCPToolConfigPermissionPolicyUnion] to add type safety for
  2539  // the return type of [BetaManagedAgentsMCPToolConfigPermissionPolicyUnion.AsAny]
  2540  type anyBetaManagedAgentsMCPToolConfigPermissionPolicy interface {
  2541  	implBetaManagedAgentsMCPToolConfigPermissionPolicyUnion()
  2542  }
  2543  
  2544  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsMCPToolConfigPermissionPolicyUnion() {}
  2545  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsMCPToolConfigPermissionPolicyUnion()   {}
  2546  
  2547  // Use the following switch statement to find the correct variant
  2548  //
  2549  //	switch variant := BetaManagedAgentsMCPToolConfigPermissionPolicyUnion.AsAny().(type) {
  2550  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  2551  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  2552  //	default:
  2553  //	  fmt.Errorf("no variant present")
  2554  //	}
  2555  func (u BetaManagedAgentsMCPToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsMCPToolConfigPermissionPolicy {
  2556  	switch u.Type {
  2557  	case "always_allow":
  2558  		return u.AsAlwaysAllow()
  2559  	case "always_ask":
  2560  		return u.AsAlwaysAsk()
  2561  	}
  2562  	return nil
  2563  }
  2564  
  2565  func (u BetaManagedAgentsMCPToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  2566  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2567  	return
  2568  }
  2569  
  2570  func (u BetaManagedAgentsMCPToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  2571  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2572  	return
  2573  }
  2574  
  2575  // Returns the unmodified JSON received from the API
  2576  func (u BetaManagedAgentsMCPToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  2577  
  2578  func (r *BetaManagedAgentsMCPToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2579  	return apijson.UnmarshalRoot(data, r)
  2580  }
  2581  
  2582  // Configuration override for a specific MCP tool.
  2583  //
  2584  // The property Name is required.
  2585  type BetaManagedAgentsMCPToolConfigParams struct {
  2586  	// Name of the MCP tool to configure. 1-128 characters.
  2587  	Name string `json:"name" api:"required"`
  2588  	// Whether this tool is enabled. Overrides the `default_config` setting.
  2589  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  2590  	// Permission policy for tool execution.
  2591  	PermissionPolicy BetaManagedAgentsMCPToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  2592  	paramObj
  2593  }
  2594  
  2595  func (r BetaManagedAgentsMCPToolConfigParams) MarshalJSON() (data []byte, err error) {
  2596  	type shadow BetaManagedAgentsMCPToolConfigParams
  2597  	return param.MarshalObject(r, (*shadow)(&r))
  2598  }
  2599  func (r *BetaManagedAgentsMCPToolConfigParams) UnmarshalJSON(data []byte) error {
  2600  	return apijson.UnmarshalRoot(data, r)
  2601  }
  2602  
  2603  // Only one field can be non-zero.
  2604  //
  2605  // Use [param.IsOmitted] to confirm if a field is set.
  2606  type BetaManagedAgentsMCPToolConfigParamsPermissionPolicyUnion struct {
  2607  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  2608  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  2609  	paramUnion
  2610  }
  2611  
  2612  func (u BetaManagedAgentsMCPToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  2613  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  2614  }
  2615  func (u *BetaManagedAgentsMCPToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2616  	return apijson.UnmarshalRoot(data, u)
  2617  }
  2618  
  2619  func (u *BetaManagedAgentsMCPToolConfigParamsPermissionPolicyUnion) asAny() any {
  2620  	if !param.IsOmitted(u.OfAlwaysAllow) {
  2621  		return u.OfAlwaysAllow
  2622  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  2623  		return u.OfAlwaysAsk
  2624  	}
  2625  	return nil
  2626  }
  2627  
  2628  // Returns a pointer to the underlying variant's property, if present.
  2629  func (u BetaManagedAgentsMCPToolConfigParamsPermissionPolicyUnion) GetType() *string {
  2630  	if vt := u.OfAlwaysAllow; vt != nil {
  2631  		return (*string)(&vt.Type)
  2632  	} else if vt := u.OfAlwaysAsk; vt != nil {
  2633  		return (*string)(&vt.Type)
  2634  	}
  2635  	return nil
  2636  }
  2637  
  2638  func init() {
  2639  	apijson.RegisterUnion[BetaManagedAgentsMCPToolConfigParamsPermissionPolicyUnion](
  2640  		"type",
  2641  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  2642  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  2643  	)
  2644  }
  2645  
  2646  type BetaManagedAgentsMCPToolset struct {
  2647  	Configs []BetaManagedAgentsMCPToolConfig `json:"configs" api:"required"`
  2648  	// Resolved default configuration for all tools from an MCP server.
  2649  	DefaultConfig BetaManagedAgentsMCPToolsetDefaultConfig `json:"default_config" api:"required"`
  2650  	MCPServerName string                                   `json:"mcp_server_name" api:"required"`
  2651  	// Any of "mcp_toolset".
  2652  	Type BetaManagedAgentsMCPToolsetType `json:"type" api:"required"`
  2653  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2654  	JSON struct {
  2655  		Configs       respjson.Field
  2656  		DefaultConfig respjson.Field
  2657  		MCPServerName respjson.Field
  2658  		Type          respjson.Field
  2659  		ExtraFields   map[string]respjson.Field
  2660  		raw           string
  2661  	} `json:"-"`
  2662  }
  2663  
  2664  // Returns the unmodified JSON received from the API
  2665  func (r BetaManagedAgentsMCPToolset) RawJSON() string { return r.JSON.raw }
  2666  func (r *BetaManagedAgentsMCPToolset) UnmarshalJSON(data []byte) error {
  2667  	return apijson.UnmarshalRoot(data, r)
  2668  }
  2669  
  2670  type BetaManagedAgentsMCPToolsetType string
  2671  
  2672  const (
  2673  	BetaManagedAgentsMCPToolsetTypeMCPToolset BetaManagedAgentsMCPToolsetType = "mcp_toolset"
  2674  )
  2675  
  2676  // Resolved default configuration for all tools from an MCP server.
  2677  type BetaManagedAgentsMCPToolsetDefaultConfig struct {
  2678  	Enabled bool `json:"enabled" api:"required"`
  2679  	// Permission policy for tool execution.
  2680  	PermissionPolicy BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  2681  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2682  	JSON struct {
  2683  		Enabled          respjson.Field
  2684  		PermissionPolicy respjson.Field
  2685  		ExtraFields      map[string]respjson.Field
  2686  		raw              string
  2687  	} `json:"-"`
  2688  }
  2689  
  2690  // Returns the unmodified JSON received from the API
  2691  func (r BetaManagedAgentsMCPToolsetDefaultConfig) RawJSON() string { return r.JSON.raw }
  2692  func (r *BetaManagedAgentsMCPToolsetDefaultConfig) UnmarshalJSON(data []byte) error {
  2693  	return apijson.UnmarshalRoot(data, r)
  2694  }
  2695  
  2696  // BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion contains all
  2697  // possible properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  2698  // [BetaManagedAgentsAlwaysAskPolicy].
  2699  //
  2700  // Use the [BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion.AsAny]
  2701  // method to switch on the variant.
  2702  //
  2703  // Use the methods beginning with 'As' to cast the union to one of its variants.
  2704  type BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion struct {
  2705  	// Any of "always_allow", "always_ask".
  2706  	Type string `json:"type"`
  2707  	JSON struct {
  2708  		Type respjson.Field
  2709  		raw  string
  2710  	} `json:"-"`
  2711  }
  2712  
  2713  // anyBetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicy is implemented by
  2714  // each variant of [BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion]
  2715  // to add type safety for the return type of
  2716  // [BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion.AsAny]
  2717  type anyBetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicy interface {
  2718  	implBetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion()
  2719  }
  2720  
  2721  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion() {
  2722  }
  2723  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion() {
  2724  }
  2725  
  2726  // Use the following switch statement to find the correct variant
  2727  //
  2728  //	switch variant := BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion.AsAny().(type) {
  2729  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  2730  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  2731  //	default:
  2732  //	  fmt.Errorf("no variant present")
  2733  //	}
  2734  func (u BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicy {
  2735  	switch u.Type {
  2736  	case "always_allow":
  2737  		return u.AsAlwaysAllow()
  2738  	case "always_ask":
  2739  		return u.AsAlwaysAsk()
  2740  	}
  2741  	return nil
  2742  }
  2743  
  2744  func (u BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  2745  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2746  	return
  2747  }
  2748  
  2749  func (u BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  2750  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2751  	return
  2752  }
  2753  
  2754  // Returns the unmodified JSON received from the API
  2755  func (u BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion) RawJSON() string {
  2756  	return u.JSON.raw
  2757  }
  2758  
  2759  func (r *BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2760  	return apijson.UnmarshalRoot(data, r)
  2761  }
  2762  
  2763  // Default configuration for all tools from an MCP server.
  2764  type BetaManagedAgentsMCPToolsetDefaultConfigParams struct {
  2765  	// Whether tools are enabled by default. Defaults to true if not specified.
  2766  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  2767  	// Permission policy for tool execution.
  2768  	PermissionPolicy BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  2769  	paramObj
  2770  }
  2771  
  2772  func (r BetaManagedAgentsMCPToolsetDefaultConfigParams) MarshalJSON() (data []byte, err error) {
  2773  	type shadow BetaManagedAgentsMCPToolsetDefaultConfigParams
  2774  	return param.MarshalObject(r, (*shadow)(&r))
  2775  }
  2776  func (r *BetaManagedAgentsMCPToolsetDefaultConfigParams) UnmarshalJSON(data []byte) error {
  2777  	return apijson.UnmarshalRoot(data, r)
  2778  }
  2779  
  2780  // Only one field can be non-zero.
  2781  //
  2782  // Use [param.IsOmitted] to confirm if a field is set.
  2783  type BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion struct {
  2784  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  2785  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  2786  	paramUnion
  2787  }
  2788  
  2789  func (u BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  2790  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  2791  }
  2792  func (u *BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  2793  	return apijson.UnmarshalRoot(data, u)
  2794  }
  2795  
  2796  func (u *BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion) asAny() any {
  2797  	if !param.IsOmitted(u.OfAlwaysAllow) {
  2798  		return u.OfAlwaysAllow
  2799  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  2800  		return u.OfAlwaysAsk
  2801  	}
  2802  	return nil
  2803  }
  2804  
  2805  // Returns a pointer to the underlying variant's property, if present.
  2806  func (u BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion) GetType() *string {
  2807  	if vt := u.OfAlwaysAllow; vt != nil {
  2808  		return (*string)(&vt.Type)
  2809  	} else if vt := u.OfAlwaysAsk; vt != nil {
  2810  		return (*string)(&vt.Type)
  2811  	}
  2812  	return nil
  2813  }
  2814  
  2815  func init() {
  2816  	apijson.RegisterUnion[BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion](
  2817  		"type",
  2818  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  2819  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  2820  	)
  2821  }
  2822  
  2823  // Configuration for tools from an MCP server defined in `mcp_servers`.
  2824  //
  2825  // The properties MCPServerName, Type are required.
  2826  type BetaManagedAgentsMCPToolsetParams struct {
  2827  	// Name of the MCP server. Must match a server name from the mcp_servers array.
  2828  	// 1-255 characters.
  2829  	MCPServerName string `json:"mcp_server_name" api:"required"`
  2830  	// Any of "mcp_toolset".
  2831  	Type BetaManagedAgentsMCPToolsetParamsType `json:"type,omitzero" api:"required"`
  2832  	// Per-tool configuration overrides.
  2833  	Configs []BetaManagedAgentsMCPToolConfigParams `json:"configs,omitzero"`
  2834  	// Default configuration for all tools from an MCP server.
  2835  	DefaultConfig BetaManagedAgentsMCPToolsetDefaultConfigParams `json:"default_config,omitzero"`
  2836  	paramObj
  2837  }
  2838  
  2839  func (r BetaManagedAgentsMCPToolsetParams) MarshalJSON() (data []byte, err error) {
  2840  	type shadow BetaManagedAgentsMCPToolsetParams
  2841  	return param.MarshalObject(r, (*shadow)(&r))
  2842  }
  2843  func (r *BetaManagedAgentsMCPToolsetParams) UnmarshalJSON(data []byte) error {
  2844  	return apijson.UnmarshalRoot(data, r)
  2845  }
  2846  
  2847  type BetaManagedAgentsMCPToolsetParamsType string
  2848  
  2849  const (
  2850  	BetaManagedAgentsMCPToolsetParamsTypeMCPToolset BetaManagedAgentsMCPToolsetParamsType = "mcp_toolset"
  2851  )
  2852  
  2853  // The model that will power your agent.
  2854  //
  2855  // See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
  2856  // details and options.
  2857  type BetaManagedAgentsModel = string
  2858  
  2859  const (
  2860  	BetaManagedAgentsModelClaudeFable5_1           BetaManagedAgentsModel = "claude-fable-5-1"
  2861  	BetaManagedAgentsModelClaudeSonnet5            BetaManagedAgentsModel = "claude-sonnet-5"
  2862  	BetaManagedAgentsModelClaudeFable5             BetaManagedAgentsModel = "claude-fable-5"
  2863  	BetaManagedAgentsModelClaudeOpus5              BetaManagedAgentsModel = "claude-opus-5"
  2864  	BetaManagedAgentsModelClaudeOpus4_8            BetaManagedAgentsModel = "claude-opus-4-8"
  2865  	BetaManagedAgentsModelClaudeOpus4_7            BetaManagedAgentsModel = "claude-opus-4-7"
  2866  	BetaManagedAgentsModelClaudeOpus4_6            BetaManagedAgentsModel = "claude-opus-4-6"
  2867  	BetaManagedAgentsModelClaudeSonnet4_6          BetaManagedAgentsModel = "claude-sonnet-4-6"
  2868  	BetaManagedAgentsModelClaudeHaiku4_5           BetaManagedAgentsModel = "claude-haiku-4-5"
  2869  	BetaManagedAgentsModelClaudeHaiku4_5_20251001  BetaManagedAgentsModel = "claude-haiku-4-5-20251001"
  2870  	BetaManagedAgentsModelClaudeOpus4_5            BetaManagedAgentsModel = "claude-opus-4-5"
  2871  	BetaManagedAgentsModelClaudeOpus4_5_20251101   BetaManagedAgentsModel = "claude-opus-4-5-20251101"
  2872  	BetaManagedAgentsModelClaudeSonnet4_5          BetaManagedAgentsModel = "claude-sonnet-4-5"
  2873  	BetaManagedAgentsModelClaudeSonnet4_5_20250929 BetaManagedAgentsModel = "claude-sonnet-4-5-20250929"
  2874  )
  2875  
  2876  // Model identifier and configuration.
  2877  type BetaManagedAgentsModelConfig struct {
  2878  	// The model that will power your agent.
  2879  	//
  2880  	// See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
  2881  	// details and options.
  2882  	ID BetaManagedAgentsModel `json:"id" api:"required"`
  2883  	// How hard Claude works on each turn. Sets `output_config.effort` on every
  2884  	// Messages call the session makes.
  2885  	Effort BetaManagedAgentsModelConfigEffortUnion `json:"effort"`
  2886  	// Geographic region for model inference. When unset, requests fall through to the
  2887  	// workspace's default_inference_geo.
  2888  	InferenceGeo string `json:"inference_geo"`
  2889  	// Inference speed mode. `fast` provides significantly faster output token
  2890  	// generation at premium pricing. Not all models support `fast`; invalid
  2891  	// combinations are rejected at create time.
  2892  	//
  2893  	// Any of "standard", "fast".
  2894  	Speed BetaManagedAgentsModelConfigSpeed `json:"speed"`
  2895  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  2896  	JSON struct {
  2897  		ID           respjson.Field
  2898  		Effort       respjson.Field
  2899  		InferenceGeo respjson.Field
  2900  		Speed        respjson.Field
  2901  		ExtraFields  map[string]respjson.Field
  2902  		raw          string
  2903  	} `json:"-"`
  2904  }
  2905  
  2906  // Returns the unmodified JSON received from the API
  2907  func (r BetaManagedAgentsModelConfig) RawJSON() string { return r.JSON.raw }
  2908  func (r *BetaManagedAgentsModelConfig) UnmarshalJSON(data []byte) error {
  2909  	return apijson.UnmarshalRoot(data, r)
  2910  }
  2911  
  2912  // BetaManagedAgentsModelConfigEffortUnion contains all possible properties and
  2913  // values from [BetaManagedAgentsEffortLow], [BetaManagedAgentsEffortMedium],
  2914  // [BetaManagedAgentsEffortHigh], [BetaManagedAgentsEffortXhigh],
  2915  // [BetaManagedAgentsEffortMax].
  2916  //
  2917  // Use the [BetaManagedAgentsModelConfigEffortUnion.AsAny] method to switch on the
  2918  // variant.
  2919  //
  2920  // Use the methods beginning with 'As' to cast the union to one of its variants.
  2921  type BetaManagedAgentsModelConfigEffortUnion struct {
  2922  	// Any of "low", "medium", "high", "xhigh", "max".
  2923  	Type string `json:"type"`
  2924  	JSON struct {
  2925  		Type respjson.Field
  2926  		raw  string
  2927  	} `json:"-"`
  2928  }
  2929  
  2930  // anyBetaManagedAgentsModelConfigEffort is implemented by each variant of
  2931  // [BetaManagedAgentsModelConfigEffortUnion] to add type safety for the return type
  2932  // of [BetaManagedAgentsModelConfigEffortUnion.AsAny]
  2933  type anyBetaManagedAgentsModelConfigEffort interface {
  2934  	implBetaManagedAgentsModelConfigEffortUnion()
  2935  }
  2936  
  2937  func (BetaManagedAgentsEffortLow) implBetaManagedAgentsModelConfigEffortUnion()    {}
  2938  func (BetaManagedAgentsEffortMedium) implBetaManagedAgentsModelConfigEffortUnion() {}
  2939  func (BetaManagedAgentsEffortHigh) implBetaManagedAgentsModelConfigEffortUnion()   {}
  2940  func (BetaManagedAgentsEffortXhigh) implBetaManagedAgentsModelConfigEffortUnion()  {}
  2941  func (BetaManagedAgentsEffortMax) implBetaManagedAgentsModelConfigEffortUnion()    {}
  2942  
  2943  // Use the following switch statement to find the correct variant
  2944  //
  2945  //	switch variant := BetaManagedAgentsModelConfigEffortUnion.AsAny().(type) {
  2946  //	case anthropic.BetaManagedAgentsEffortLow:
  2947  //	case anthropic.BetaManagedAgentsEffortMedium:
  2948  //	case anthropic.BetaManagedAgentsEffortHigh:
  2949  //	case anthropic.BetaManagedAgentsEffortXhigh:
  2950  //	case anthropic.BetaManagedAgentsEffortMax:
  2951  //	default:
  2952  //	  fmt.Errorf("no variant present")
  2953  //	}
  2954  func (u BetaManagedAgentsModelConfigEffortUnion) AsAny() anyBetaManagedAgentsModelConfigEffort {
  2955  	switch u.Type {
  2956  	case "low":
  2957  		return u.AsLow()
  2958  	case "medium":
  2959  		return u.AsMedium()
  2960  	case "high":
  2961  		return u.AsHigh()
  2962  	case "xhigh":
  2963  		return u.AsXhigh()
  2964  	case "max":
  2965  		return u.AsMax()
  2966  	}
  2967  	return nil
  2968  }
  2969  
  2970  func (u BetaManagedAgentsModelConfigEffortUnion) AsLow() (v BetaManagedAgentsEffortLow) {
  2971  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2972  	return
  2973  }
  2974  
  2975  func (u BetaManagedAgentsModelConfigEffortUnion) AsMedium() (v BetaManagedAgentsEffortMedium) {
  2976  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2977  	return
  2978  }
  2979  
  2980  func (u BetaManagedAgentsModelConfigEffortUnion) AsHigh() (v BetaManagedAgentsEffortHigh) {
  2981  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2982  	return
  2983  }
  2984  
  2985  func (u BetaManagedAgentsModelConfigEffortUnion) AsXhigh() (v BetaManagedAgentsEffortXhigh) {
  2986  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2987  	return
  2988  }
  2989  
  2990  func (u BetaManagedAgentsModelConfigEffortUnion) AsMax() (v BetaManagedAgentsEffortMax) {
  2991  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  2992  	return
  2993  }
  2994  
  2995  // Returns the unmodified JSON received from the API
  2996  func (u BetaManagedAgentsModelConfigEffortUnion) RawJSON() string { return u.JSON.raw }
  2997  
  2998  func (r *BetaManagedAgentsModelConfigEffortUnion) UnmarshalJSON(data []byte) error {
  2999  	return apijson.UnmarshalRoot(data, r)
  3000  }
  3001  
  3002  // Inference speed mode. `fast` provides significantly faster output token
  3003  // generation at premium pricing. Not all models support `fast`; invalid
  3004  // combinations are rejected at create time.
  3005  type BetaManagedAgentsModelConfigSpeed string
  3006  
  3007  const (
  3008  	BetaManagedAgentsModelConfigSpeedStandard BetaManagedAgentsModelConfigSpeed = "standard"
  3009  	BetaManagedAgentsModelConfigSpeedFast     BetaManagedAgentsModelConfigSpeed = "fast"
  3010  )
  3011  
  3012  // An object that defines additional configuration control over model use
  3013  //
  3014  // The property ID is required.
  3015  type BetaManagedAgentsModelConfigParams struct {
  3016  	// The model that will power your agent.
  3017  	//
  3018  	// See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
  3019  	// details and options.
  3020  	ID BetaManagedAgentsModel `json:"id,omitzero" api:"required"`
  3021  	// Geographic region for model inference. When unset, requests fall through to the
  3022  	// workspace's default_inference_geo. On update, `model` is whole-object
  3023  	// replacement — omitting inference_geo clears it.
  3024  	InferenceGeo param.Opt[string] `json:"inference_geo,omitzero"`
  3025  	// How hard Claude works on each inference call. Accepts a bare level string
  3026  	// (`"high"`) or `{"type": "high"}`. On create, omitting it resolves the per-model
  3027  	// default; on update, omitting it leaves the stored value unchanged.
  3028  	Effort BetaManagedAgentsModelConfigParamsEffortUnion `json:"effort,omitzero"`
  3029  	// Inference speed mode. `fast` provides significantly faster output token
  3030  	// generation at premium pricing. Not all models support `fast`; invalid
  3031  	// combinations are rejected at create time.
  3032  	//
  3033  	// Any of "standard", "fast".
  3034  	Speed BetaManagedAgentsModelConfigParamsSpeed `json:"speed,omitzero"`
  3035  	paramObj
  3036  }
  3037  
  3038  func (r BetaManagedAgentsModelConfigParams) MarshalJSON() (data []byte, err error) {
  3039  	type shadow BetaManagedAgentsModelConfigParams
  3040  	return param.MarshalObject(r, (*shadow)(&r))
  3041  }
  3042  func (r *BetaManagedAgentsModelConfigParams) UnmarshalJSON(data []byte) error {
  3043  	return apijson.UnmarshalRoot(data, r)
  3044  }
  3045  
  3046  // Only one field can be non-zero.
  3047  //
  3048  // Use [param.IsOmitted] to confirm if a field is set.
  3049  type BetaManagedAgentsModelConfigParamsEffortUnion struct {
  3050  	// Check if union is this variant with
  3051  	// !param.IsOmitted(union.OfBetaManagedAgentsModelConfigsEffortBetaManagedAgentsEffortLevel)
  3052  	OfBetaManagedAgentsModelConfigsEffortBetaManagedAgentsEffortLevel param.Opt[string]                   `json:",omitzero,inline"`
  3053  	OfBetaManagedAgentsEffortLow                                      *BetaManagedAgentsEffortLowParam    `json:",omitzero,inline"`
  3054  	OfBetaManagedAgentsEffortMedium                                   *BetaManagedAgentsEffortMediumParam `json:",omitzero,inline"`
  3055  	OfBetaManagedAgentsEffortHigh                                     *BetaManagedAgentsEffortHighParam   `json:",omitzero,inline"`
  3056  	OfBetaManagedAgentsEffortXhigh                                    *BetaManagedAgentsEffortXhighParam  `json:",omitzero,inline"`
  3057  	OfBetaManagedAgentsEffortMax                                      *BetaManagedAgentsEffortMaxParam    `json:",omitzero,inline"`
  3058  	paramUnion
  3059  }
  3060  
  3061  func (u BetaManagedAgentsModelConfigParamsEffortUnion) MarshalJSON() ([]byte, error) {
  3062  	return param.MarshalUnion(u, u.OfBetaManagedAgentsModelConfigsEffortBetaManagedAgentsEffortLevel,
  3063  		u.OfBetaManagedAgentsEffortLow,
  3064  		u.OfBetaManagedAgentsEffortMedium,
  3065  		u.OfBetaManagedAgentsEffortHigh,
  3066  		u.OfBetaManagedAgentsEffortXhigh,
  3067  		u.OfBetaManagedAgentsEffortMax)
  3068  }
  3069  func (u *BetaManagedAgentsModelConfigParamsEffortUnion) UnmarshalJSON(data []byte) error {
  3070  	return apijson.UnmarshalRoot(data, u)
  3071  }
  3072  
  3073  func (u *BetaManagedAgentsModelConfigParamsEffortUnion) asAny() any {
  3074  	if !param.IsOmitted(u.OfBetaManagedAgentsModelConfigsEffortBetaManagedAgentsEffortLevel) {
  3075  		return &u.OfBetaManagedAgentsModelConfigsEffortBetaManagedAgentsEffortLevel
  3076  	} else if !param.IsOmitted(u.OfBetaManagedAgentsEffortLow) {
  3077  		return u.OfBetaManagedAgentsEffortLow
  3078  	} else if !param.IsOmitted(u.OfBetaManagedAgentsEffortMedium) {
  3079  		return u.OfBetaManagedAgentsEffortMedium
  3080  	} else if !param.IsOmitted(u.OfBetaManagedAgentsEffortHigh) {
  3081  		return u.OfBetaManagedAgentsEffortHigh
  3082  	} else if !param.IsOmitted(u.OfBetaManagedAgentsEffortXhigh) {
  3083  		return u.OfBetaManagedAgentsEffortXhigh
  3084  	} else if !param.IsOmitted(u.OfBetaManagedAgentsEffortMax) {
  3085  		return u.OfBetaManagedAgentsEffortMax
  3086  	}
  3087  	return nil
  3088  }
  3089  
  3090  // Returns a pointer to the underlying variant's property, if present.
  3091  func (u BetaManagedAgentsModelConfigParamsEffortUnion) GetType() *string {
  3092  	if vt := u.OfBetaManagedAgentsEffortLow; vt != nil {
  3093  		return (*string)(&vt.Type)
  3094  	} else if vt := u.OfBetaManagedAgentsEffortMedium; vt != nil {
  3095  		return (*string)(&vt.Type)
  3096  	} else if vt := u.OfBetaManagedAgentsEffortHigh; vt != nil {
  3097  		return (*string)(&vt.Type)
  3098  	} else if vt := u.OfBetaManagedAgentsEffortXhigh; vt != nil {
  3099  		return (*string)(&vt.Type)
  3100  	} else if vt := u.OfBetaManagedAgentsEffortMax; vt != nil {
  3101  		return (*string)(&vt.Type)
  3102  	}
  3103  	return nil
  3104  }
  3105  
  3106  // How hard Claude works on each turn. Higher levels favor reasoning depth over
  3107  // latency. Not all models accept every level; invalid combinations are rejected at
  3108  // create time.
  3109  type BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevel string
  3110  
  3111  const (
  3112  	BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevelLow    BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevel = "low"
  3113  	BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevelMedium BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevel = "medium"
  3114  	BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevelHigh   BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevel = "high"
  3115  	BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevelXhigh  BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevel = "xhigh"
  3116  	BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevelMax    BetaManagedAgentsModelConfigParamsEffortBetaManagedAgentsEffortLevel = "max"
  3117  )
  3118  
  3119  // Inference speed mode. `fast` provides significantly faster output token
  3120  // generation at premium pricing. Not all models support `fast`; invalid
  3121  // combinations are rejected at create time.
  3122  type BetaManagedAgentsModelConfigParamsSpeed string
  3123  
  3124  const (
  3125  	BetaManagedAgentsModelConfigParamsSpeedStandard BetaManagedAgentsModelConfigParamsSpeed = "standard"
  3126  	BetaManagedAgentsModelConfigParamsSpeedFast     BetaManagedAgentsModelConfigParamsSpeed = "fast"
  3127  )
  3128  
  3129  // Sentinel roster entry meaning "the agent that owns this configuration". Resolved
  3130  // server-side to a concrete agent reference.
  3131  //
  3132  // The property Type is required.
  3133  type BetaManagedAgentsMultiagentSelfParams struct {
  3134  	// Any of "self".
  3135  	Type BetaManagedAgentsMultiagentSelfParamsType `json:"type,omitzero" api:"required"`
  3136  	paramObj
  3137  }
  3138  
  3139  func (r BetaManagedAgentsMultiagentSelfParams) MarshalJSON() (data []byte, err error) {
  3140  	type shadow BetaManagedAgentsMultiagentSelfParams
  3141  	return param.MarshalObject(r, (*shadow)(&r))
  3142  }
  3143  func (r *BetaManagedAgentsMultiagentSelfParams) UnmarshalJSON(data []byte) error {
  3144  	return apijson.UnmarshalRoot(data, r)
  3145  }
  3146  
  3147  type BetaManagedAgentsMultiagentSelfParamsType string
  3148  
  3149  const (
  3150  	BetaManagedAgentsMultiagentSelfParamsTypeSelf BetaManagedAgentsMultiagentSelfParamsType = "self"
  3151  )
  3152  
  3153  // Configuration for the read tool.
  3154  type BetaManagedAgentsReadToolConfig struct {
  3155  	Enabled bool          `json:"enabled" api:"required"`
  3156  	Name    constant.Read `json:"name" default:"read"`
  3157  	// Permission policy for tool execution.
  3158  	PermissionPolicy BetaManagedAgentsReadToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  3159  	Type             constant.Read                                        `json:"type" default:"read"`
  3160  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  3161  	JSON struct {
  3162  		Enabled          respjson.Field
  3163  		Name             respjson.Field
  3164  		PermissionPolicy respjson.Field
  3165  		Type             respjson.Field
  3166  		ExtraFields      map[string]respjson.Field
  3167  		raw              string
  3168  	} `json:"-"`
  3169  }
  3170  
  3171  // Returns the unmodified JSON received from the API
  3172  func (r BetaManagedAgentsReadToolConfig) RawJSON() string { return r.JSON.raw }
  3173  func (r *BetaManagedAgentsReadToolConfig) UnmarshalJSON(data []byte) error {
  3174  	return apijson.UnmarshalRoot(data, r)
  3175  }
  3176  
  3177  // BetaManagedAgentsReadToolConfigPermissionPolicyUnion contains all possible
  3178  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  3179  // [BetaManagedAgentsAlwaysAskPolicy].
  3180  //
  3181  // Use the [BetaManagedAgentsReadToolConfigPermissionPolicyUnion.AsAny] method to
  3182  // switch on the variant.
  3183  //
  3184  // Use the methods beginning with 'As' to cast the union to one of its variants.
  3185  type BetaManagedAgentsReadToolConfigPermissionPolicyUnion struct {
  3186  	// Any of "always_allow", "always_ask".
  3187  	Type string `json:"type"`
  3188  	JSON struct {
  3189  		Type respjson.Field
  3190  		raw  string
  3191  	} `json:"-"`
  3192  }
  3193  
  3194  // anyBetaManagedAgentsReadToolConfigPermissionPolicy is implemented by each
  3195  // variant of [BetaManagedAgentsReadToolConfigPermissionPolicyUnion] to add type
  3196  // safety for the return type of
  3197  // [BetaManagedAgentsReadToolConfigPermissionPolicyUnion.AsAny]
  3198  type anyBetaManagedAgentsReadToolConfigPermissionPolicy interface {
  3199  	implBetaManagedAgentsReadToolConfigPermissionPolicyUnion()
  3200  }
  3201  
  3202  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsReadToolConfigPermissionPolicyUnion() {
  3203  }
  3204  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsReadToolConfigPermissionPolicyUnion() {}
  3205  
  3206  // Use the following switch statement to find the correct variant
  3207  //
  3208  //	switch variant := BetaManagedAgentsReadToolConfigPermissionPolicyUnion.AsAny().(type) {
  3209  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  3210  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  3211  //	default:
  3212  //	  fmt.Errorf("no variant present")
  3213  //	}
  3214  func (u BetaManagedAgentsReadToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsReadToolConfigPermissionPolicy {
  3215  	switch u.Type {
  3216  	case "always_allow":
  3217  		return u.AsAlwaysAllow()
  3218  	case "always_ask":
  3219  		return u.AsAlwaysAsk()
  3220  	}
  3221  	return nil
  3222  }
  3223  
  3224  func (u BetaManagedAgentsReadToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  3225  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3226  	return
  3227  }
  3228  
  3229  func (u BetaManagedAgentsReadToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  3230  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3231  	return
  3232  }
  3233  
  3234  // Returns the unmodified JSON received from the API
  3235  func (u BetaManagedAgentsReadToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  3236  
  3237  func (r *BetaManagedAgentsReadToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  3238  	return apijson.UnmarshalRoot(data, r)
  3239  }
  3240  
  3241  // Configuration override for the read tool.
  3242  //
  3243  // The property Name is required.
  3244  type BetaManagedAgentsReadToolConfigParams struct {
  3245  	// Whether this tool is enabled and available to Claude. Overrides the
  3246  	// default_config setting.
  3247  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  3248  	// Permission policy for tool execution.
  3249  	PermissionPolicy BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  3250  	// Any of "read".
  3251  	Type BetaManagedAgentsReadToolConfigParamsType `json:"type,omitzero"`
  3252  	// Must be "read".
  3253  	//
  3254  	// This field can be elided, and will marshal its zero value as "read".
  3255  	Name constant.Read `json:"name" default:"read"`
  3256  	paramObj
  3257  }
  3258  
  3259  func (r BetaManagedAgentsReadToolConfigParams) MarshalJSON() (data []byte, err error) {
  3260  	type shadow BetaManagedAgentsReadToolConfigParams
  3261  	return param.MarshalObject(r, (*shadow)(&r))
  3262  }
  3263  func (r *BetaManagedAgentsReadToolConfigParams) UnmarshalJSON(data []byte) error {
  3264  	return apijson.UnmarshalRoot(data, r)
  3265  }
  3266  
  3267  // Only one field can be non-zero.
  3268  //
  3269  // Use [param.IsOmitted] to confirm if a field is set.
  3270  type BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion struct {
  3271  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  3272  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  3273  	paramUnion
  3274  }
  3275  
  3276  func (u BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  3277  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  3278  }
  3279  func (u *BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  3280  	return apijson.UnmarshalRoot(data, u)
  3281  }
  3282  
  3283  func (u *BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion) asAny() any {
  3284  	if !param.IsOmitted(u.OfAlwaysAllow) {
  3285  		return u.OfAlwaysAllow
  3286  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  3287  		return u.OfAlwaysAsk
  3288  	}
  3289  	return nil
  3290  }
  3291  
  3292  // Returns a pointer to the underlying variant's property, if present.
  3293  func (u BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion) GetType() *string {
  3294  	if vt := u.OfAlwaysAllow; vt != nil {
  3295  		return (*string)(&vt.Type)
  3296  	} else if vt := u.OfAlwaysAsk; vt != nil {
  3297  		return (*string)(&vt.Type)
  3298  	}
  3299  	return nil
  3300  }
  3301  
  3302  func init() {
  3303  	apijson.RegisterUnion[BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion](
  3304  		"type",
  3305  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  3306  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  3307  	)
  3308  }
  3309  
  3310  type BetaManagedAgentsReadToolConfigParamsType string
  3311  
  3312  const (
  3313  	BetaManagedAgentsReadToolConfigParamsTypeRead BetaManagedAgentsReadToolConfigParamsType = "read"
  3314  )
  3315  
  3316  // Resolved `agent` definition for a single `session_thread`. Snapshot of the agent
  3317  // at thread creation time. The multiagent roster is not repeated here; read it
  3318  // from `Session.agent`.
  3319  type BetaManagedAgentsSessionThreadAgent struct {
  3320  	ID          string                                    `json:"id" api:"required"`
  3321  	Description string                                    `json:"description" api:"required"`
  3322  	MCPServers  []BetaManagedAgentsMCPServerURLDefinition `json:"mcp_servers" api:"required"`
  3323  	// Model identifier and configuration.
  3324  	Model  BetaManagedAgentsModelConfig                    `json:"model" api:"required"`
  3325  	Name   string                                          `json:"name" api:"required"`
  3326  	Skills []BetaManagedAgentsSessionThreadAgentSkillUnion `json:"skills" api:"required"`
  3327  	System string                                          `json:"system" api:"required"`
  3328  	Tools  []BetaManagedAgentsSessionThreadAgentToolUnion  `json:"tools" api:"required"`
  3329  	// Any of "agent".
  3330  	Type    BetaManagedAgentsSessionThreadAgentType `json:"type" api:"required"`
  3331  	Version int64                                   `json:"version" api:"required"`
  3332  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  3333  	JSON struct {
  3334  		ID          respjson.Field
  3335  		Description respjson.Field
  3336  		MCPServers  respjson.Field
  3337  		Model       respjson.Field
  3338  		Name        respjson.Field
  3339  		Skills      respjson.Field
  3340  		System      respjson.Field
  3341  		Tools       respjson.Field
  3342  		Type        respjson.Field
  3343  		Version     respjson.Field
  3344  		ExtraFields map[string]respjson.Field
  3345  		raw         string
  3346  	} `json:"-"`
  3347  }
  3348  
  3349  // Returns the unmodified JSON received from the API
  3350  func (r BetaManagedAgentsSessionThreadAgent) RawJSON() string { return r.JSON.raw }
  3351  func (r *BetaManagedAgentsSessionThreadAgent) UnmarshalJSON(data []byte) error {
  3352  	return apijson.UnmarshalRoot(data, r)
  3353  }
  3354  
  3355  // BetaManagedAgentsSessionThreadAgentSkillUnion contains all possible properties
  3356  // and values from [BetaManagedAgentsAnthropicSkill],
  3357  // [BetaManagedAgentsCustomSkill].
  3358  //
  3359  // Use the [BetaManagedAgentsSessionThreadAgentSkillUnion.AsAny] method to switch
  3360  // on the variant.
  3361  //
  3362  // Use the methods beginning with 'As' to cast the union to one of its variants.
  3363  type BetaManagedAgentsSessionThreadAgentSkillUnion struct {
  3364  	SkillID string `json:"skill_id"`
  3365  	// Any of "anthropic", "custom".
  3366  	Type    string `json:"type"`
  3367  	Version string `json:"version"`
  3368  	JSON    struct {
  3369  		SkillID respjson.Field
  3370  		Type    respjson.Field
  3371  		Version respjson.Field
  3372  		raw     string
  3373  	} `json:"-"`
  3374  }
  3375  
  3376  // anyBetaManagedAgentsSessionThreadAgentSkill is implemented by each variant of
  3377  // [BetaManagedAgentsSessionThreadAgentSkillUnion] to add type safety for the
  3378  // return type of [BetaManagedAgentsSessionThreadAgentSkillUnion.AsAny]
  3379  type anyBetaManagedAgentsSessionThreadAgentSkill interface {
  3380  	implBetaManagedAgentsSessionThreadAgentSkillUnion()
  3381  }
  3382  
  3383  func (BetaManagedAgentsAnthropicSkill) implBetaManagedAgentsSessionThreadAgentSkillUnion() {}
  3384  func (BetaManagedAgentsCustomSkill) implBetaManagedAgentsSessionThreadAgentSkillUnion()    {}
  3385  
  3386  // Use the following switch statement to find the correct variant
  3387  //
  3388  //	switch variant := BetaManagedAgentsSessionThreadAgentSkillUnion.AsAny().(type) {
  3389  //	case anthropic.BetaManagedAgentsAnthropicSkill:
  3390  //	case anthropic.BetaManagedAgentsCustomSkill:
  3391  //	default:
  3392  //	  fmt.Errorf("no variant present")
  3393  //	}
  3394  func (u BetaManagedAgentsSessionThreadAgentSkillUnion) AsAny() anyBetaManagedAgentsSessionThreadAgentSkill {
  3395  	switch u.Type {
  3396  	case "anthropic":
  3397  		return u.AsAnthropic()
  3398  	case "custom":
  3399  		return u.AsCustom()
  3400  	}
  3401  	return nil
  3402  }
  3403  
  3404  func (u BetaManagedAgentsSessionThreadAgentSkillUnion) AsAnthropic() (v BetaManagedAgentsAnthropicSkill) {
  3405  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3406  	return
  3407  }
  3408  
  3409  func (u BetaManagedAgentsSessionThreadAgentSkillUnion) AsCustom() (v BetaManagedAgentsCustomSkill) {
  3410  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3411  	return
  3412  }
  3413  
  3414  // Returns the unmodified JSON received from the API
  3415  func (u BetaManagedAgentsSessionThreadAgentSkillUnion) RawJSON() string { return u.JSON.raw }
  3416  
  3417  func (r *BetaManagedAgentsSessionThreadAgentSkillUnion) UnmarshalJSON(data []byte) error {
  3418  	return apijson.UnmarshalRoot(data, r)
  3419  }
  3420  
  3421  // BetaManagedAgentsSessionThreadAgentToolUnion contains all possible properties
  3422  // and values from [BetaManagedAgentsAgentToolset20260401],
  3423  // [BetaManagedAgentsMCPToolset], [BetaManagedAgentsCustomTool].
  3424  //
  3425  // Use the [BetaManagedAgentsSessionThreadAgentToolUnion.AsAny] method to switch on
  3426  // the variant.
  3427  //
  3428  // Use the methods beginning with 'As' to cast the union to one of its variants.
  3429  type BetaManagedAgentsSessionThreadAgentToolUnion struct {
  3430  	// This field is a union of [[]BetaManagedAgentsAgentToolConfigUnion],
  3431  	// [[]BetaManagedAgentsMCPToolConfig]
  3432  	Configs BetaManagedAgentsSessionThreadAgentToolUnionConfigs `json:"configs"`
  3433  	// This field is a union of [BetaManagedAgentsAgentToolsetDefaultConfig],
  3434  	// [BetaManagedAgentsMCPToolsetDefaultConfig]
  3435  	DefaultConfig BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfig `json:"default_config"`
  3436  	// Any of "agent_toolset_20260401", "mcp_toolset", "custom".
  3437  	Type string `json:"type"`
  3438  	// This field is from variant [BetaManagedAgentsMCPToolset].
  3439  	MCPServerName string `json:"mcp_server_name"`
  3440  	// This field is from variant [BetaManagedAgentsCustomTool].
  3441  	Description string `json:"description"`
  3442  	// This field is from variant [BetaManagedAgentsCustomTool].
  3443  	InputSchema BetaManagedAgentsCustomToolInputSchema `json:"input_schema"`
  3444  	// This field is from variant [BetaManagedAgentsCustomTool].
  3445  	Name string `json:"name"`
  3446  	JSON struct {
  3447  		Configs       respjson.Field
  3448  		DefaultConfig respjson.Field
  3449  		Type          respjson.Field
  3450  		MCPServerName respjson.Field
  3451  		Description   respjson.Field
  3452  		InputSchema   respjson.Field
  3453  		Name          respjson.Field
  3454  		raw           string
  3455  	} `json:"-"`
  3456  }
  3457  
  3458  // anyBetaManagedAgentsSessionThreadAgentTool is implemented by each variant of
  3459  // [BetaManagedAgentsSessionThreadAgentToolUnion] to add type safety for the return
  3460  // type of [BetaManagedAgentsSessionThreadAgentToolUnion.AsAny]
  3461  type anyBetaManagedAgentsSessionThreadAgentTool interface {
  3462  	implBetaManagedAgentsSessionThreadAgentToolUnion()
  3463  }
  3464  
  3465  func (BetaManagedAgentsAgentToolset20260401) implBetaManagedAgentsSessionThreadAgentToolUnion() {}
  3466  func (BetaManagedAgentsMCPToolset) implBetaManagedAgentsSessionThreadAgentToolUnion()           {}
  3467  func (BetaManagedAgentsCustomTool) implBetaManagedAgentsSessionThreadAgentToolUnion()           {}
  3468  
  3469  // Use the following switch statement to find the correct variant
  3470  //
  3471  //	switch variant := BetaManagedAgentsSessionThreadAgentToolUnion.AsAny().(type) {
  3472  //	case anthropic.BetaManagedAgentsAgentToolset20260401:
  3473  //	case anthropic.BetaManagedAgentsMCPToolset:
  3474  //	case anthropic.BetaManagedAgentsCustomTool:
  3475  //	default:
  3476  //	  fmt.Errorf("no variant present")
  3477  //	}
  3478  func (u BetaManagedAgentsSessionThreadAgentToolUnion) AsAny() anyBetaManagedAgentsSessionThreadAgentTool {
  3479  	switch u.Type {
  3480  	case "agent_toolset_20260401":
  3481  		return u.AsAgentToolset20260401()
  3482  	case "mcp_toolset":
  3483  		return u.AsMCPToolset()
  3484  	case "custom":
  3485  		return u.AsCustom()
  3486  	}
  3487  	return nil
  3488  }
  3489  
  3490  func (u BetaManagedAgentsSessionThreadAgentToolUnion) AsAgentToolset20260401() (v BetaManagedAgentsAgentToolset20260401) {
  3491  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3492  	return
  3493  }
  3494  
  3495  func (u BetaManagedAgentsSessionThreadAgentToolUnion) AsMCPToolset() (v BetaManagedAgentsMCPToolset) {
  3496  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3497  	return
  3498  }
  3499  
  3500  func (u BetaManagedAgentsSessionThreadAgentToolUnion) AsCustom() (v BetaManagedAgentsCustomTool) {
  3501  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3502  	return
  3503  }
  3504  
  3505  // Returns the unmodified JSON received from the API
  3506  func (u BetaManagedAgentsSessionThreadAgentToolUnion) RawJSON() string { return u.JSON.raw }
  3507  
  3508  func (r *BetaManagedAgentsSessionThreadAgentToolUnion) UnmarshalJSON(data []byte) error {
  3509  	return apijson.UnmarshalRoot(data, r)
  3510  }
  3511  
  3512  // BetaManagedAgentsSessionThreadAgentToolUnionConfigs is an implicit subunion of
  3513  // [BetaManagedAgentsSessionThreadAgentToolUnion].
  3514  // BetaManagedAgentsSessionThreadAgentToolUnionConfigs provides convenient access
  3515  // to the sub-properties of the union.
  3516  //
  3517  // For type safety it is recommended to directly use a variant of the
  3518  // [BetaManagedAgentsSessionThreadAgentToolUnion].
  3519  //
  3520  // If the underlying value is not a json object, one of the following properties
  3521  // will be valid: OfBetaManagedAgentsAgentToolConfigArray
  3522  // OfBetaManagedAgentsMCPToolConfigArray]
  3523  type BetaManagedAgentsSessionThreadAgentToolUnionConfigs struct {
  3524  	// This field will be present if the value is a
  3525  	// [[]BetaManagedAgentsAgentToolConfigUnion] instead of an object.
  3526  	OfBetaManagedAgentsAgentToolConfigArray []BetaManagedAgentsAgentToolConfigUnion `json:",inline"`
  3527  	// This field will be present if the value is a [[]BetaManagedAgentsMCPToolConfig]
  3528  	// instead of an object.
  3529  	OfBetaManagedAgentsMCPToolConfigArray []BetaManagedAgentsMCPToolConfig `json:",inline"`
  3530  	JSON                                  struct {
  3531  		OfBetaManagedAgentsAgentToolConfigArray respjson.Field
  3532  		OfBetaManagedAgentsMCPToolConfigArray   respjson.Field
  3533  		raw                                     string
  3534  	} `json:"-"`
  3535  }
  3536  
  3537  func (r *BetaManagedAgentsSessionThreadAgentToolUnionConfigs) UnmarshalJSON(data []byte) error {
  3538  	return apijson.UnmarshalRoot(data, r)
  3539  }
  3540  
  3541  // BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfig is an implicit
  3542  // subunion of [BetaManagedAgentsSessionThreadAgentToolUnion].
  3543  // BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfig provides convenient
  3544  // access to the sub-properties of the union.
  3545  //
  3546  // For type safety it is recommended to directly use a variant of the
  3547  // [BetaManagedAgentsSessionThreadAgentToolUnion].
  3548  type BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfig struct {
  3549  	Enabled bool `json:"enabled"`
  3550  	// This field is a union of
  3551  	// [BetaManagedAgentsAgentToolsetDefaultConfigPermissionPolicyUnion],
  3552  	// [BetaManagedAgentsMCPToolsetDefaultConfigPermissionPolicyUnion]
  3553  	PermissionPolicy BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfigPermissionPolicy `json:"permission_policy"`
  3554  	JSON             struct {
  3555  		Enabled          respjson.Field
  3556  		PermissionPolicy respjson.Field
  3557  		raw              string
  3558  	} `json:"-"`
  3559  }
  3560  
  3561  func (r *BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfig) UnmarshalJSON(data []byte) error {
  3562  	return apijson.UnmarshalRoot(data, r)
  3563  }
  3564  
  3565  // BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfigPermissionPolicy is an
  3566  // implicit subunion of [BetaManagedAgentsSessionThreadAgentToolUnion].
  3567  // BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfigPermissionPolicy
  3568  // provides convenient access to the sub-properties of the union.
  3569  //
  3570  // For type safety it is recommended to directly use a variant of the
  3571  // [BetaManagedAgentsSessionThreadAgentToolUnion].
  3572  type BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfigPermissionPolicy struct {
  3573  	Type string `json:"type"`
  3574  	JSON struct {
  3575  		Type respjson.Field
  3576  		raw  string
  3577  	} `json:"-"`
  3578  }
  3579  
  3580  func (r *BetaManagedAgentsSessionThreadAgentToolUnionDefaultConfigPermissionPolicy) UnmarshalJSON(data []byte) error {
  3581  	return apijson.UnmarshalRoot(data, r)
  3582  }
  3583  
  3584  type BetaManagedAgentsSessionThreadAgentType string
  3585  
  3586  const (
  3587  	BetaManagedAgentsSessionThreadAgentTypeAgent BetaManagedAgentsSessionThreadAgentType = "agent"
  3588  )
  3589  
  3590  func BetaManagedAgentsSkillParamsOfAnthropic(skillID string) BetaManagedAgentsSkillParamsUnion {
  3591  	var anthropic BetaManagedAgentsAnthropicSkillParams
  3592  	anthropic.SkillID = skillID
  3593  	return BetaManagedAgentsSkillParamsUnion{OfAnthropic: &anthropic}
  3594  }
  3595  
  3596  func BetaManagedAgentsSkillParamsOfCustom(skillID string) BetaManagedAgentsSkillParamsUnion {
  3597  	var custom BetaManagedAgentsCustomSkillParams
  3598  	custom.SkillID = skillID
  3599  	return BetaManagedAgentsSkillParamsUnion{OfCustom: &custom}
  3600  }
  3601  
  3602  // Only one field can be non-zero.
  3603  //
  3604  // Use [param.IsOmitted] to confirm if a field is set.
  3605  type BetaManagedAgentsSkillParamsUnion struct {
  3606  	OfAnthropic *BetaManagedAgentsAnthropicSkillParams `json:",omitzero,inline"`
  3607  	OfCustom    *BetaManagedAgentsCustomSkillParams    `json:",omitzero,inline"`
  3608  	paramUnion
  3609  }
  3610  
  3611  func (u BetaManagedAgentsSkillParamsUnion) MarshalJSON() ([]byte, error) {
  3612  	return param.MarshalUnion(u, u.OfAnthropic, u.OfCustom)
  3613  }
  3614  func (u *BetaManagedAgentsSkillParamsUnion) UnmarshalJSON(data []byte) error {
  3615  	return apijson.UnmarshalRoot(data, u)
  3616  }
  3617  
  3618  func (u *BetaManagedAgentsSkillParamsUnion) asAny() any {
  3619  	if !param.IsOmitted(u.OfAnthropic) {
  3620  		return u.OfAnthropic
  3621  	} else if !param.IsOmitted(u.OfCustom) {
  3622  		return u.OfCustom
  3623  	}
  3624  	return nil
  3625  }
  3626  
  3627  // Returns a pointer to the underlying variant's property, if present.
  3628  func (u BetaManagedAgentsSkillParamsUnion) GetSkillID() *string {
  3629  	if vt := u.OfAnthropic; vt != nil {
  3630  		return (*string)(&vt.SkillID)
  3631  	} else if vt := u.OfCustom; vt != nil {
  3632  		return (*string)(&vt.SkillID)
  3633  	}
  3634  	return nil
  3635  }
  3636  
  3637  // Returns a pointer to the underlying variant's property, if present.
  3638  func (u BetaManagedAgentsSkillParamsUnion) GetType() *string {
  3639  	if vt := u.OfAnthropic; vt != nil {
  3640  		return (*string)(&vt.Type)
  3641  	} else if vt := u.OfCustom; vt != nil {
  3642  		return (*string)(&vt.Type)
  3643  	}
  3644  	return nil
  3645  }
  3646  
  3647  // Returns a pointer to the underlying variant's property, if present.
  3648  func (u BetaManagedAgentsSkillParamsUnion) GetVersion() *string {
  3649  	if vt := u.OfAnthropic; vt != nil && vt.Version.Valid() {
  3650  		return &vt.Version.Value
  3651  	} else if vt := u.OfCustom; vt != nil && vt.Version.Valid() {
  3652  		return &vt.Version.Value
  3653  	}
  3654  	return nil
  3655  }
  3656  
  3657  func init() {
  3658  	apijson.RegisterUnion[BetaManagedAgentsSkillParamsUnion](
  3659  		"type",
  3660  		apijson.Discriminator[BetaManagedAgentsAnthropicSkillParams]("anthropic"),
  3661  		apijson.Discriminator[BetaManagedAgentsCustomSkillParams]("custom"),
  3662  	)
  3663  }
  3664  
  3665  // URL-based MCP server connection.
  3666  //
  3667  // The properties Name, Type, URL are required.
  3668  type BetaManagedAgentsURLMCPServerParams struct {
  3669  	// Unique name for this server, referenced by mcp_toolset configurations. 1-255
  3670  	// characters.
  3671  	Name string `json:"name" api:"required"`
  3672  	// Any of "url".
  3673  	Type BetaManagedAgentsURLMCPServerParamsType `json:"type,omitzero" api:"required"`
  3674  	// Endpoint URL for the MCP server.
  3675  	URL string `json:"url" api:"required"`
  3676  	paramObj
  3677  }
  3678  
  3679  func (r BetaManagedAgentsURLMCPServerParams) MarshalJSON() (data []byte, err error) {
  3680  	type shadow BetaManagedAgentsURLMCPServerParams
  3681  	return param.MarshalObject(r, (*shadow)(&r))
  3682  }
  3683  func (r *BetaManagedAgentsURLMCPServerParams) UnmarshalJSON(data []byte) error {
  3684  	return apijson.UnmarshalRoot(data, r)
  3685  }
  3686  
  3687  type BetaManagedAgentsURLMCPServerParamsType string
  3688  
  3689  const (
  3690  	BetaManagedAgentsURLMCPServerParamsTypeURL BetaManagedAgentsURLMCPServerParamsType = "url"
  3691  )
  3692  
  3693  // Approximate user location for search result localization.
  3694  type BetaManagedAgentsUserLocation struct {
  3695  	// Location precision. Only "approximate" is supported.
  3696  	Type constant.Approximate `json:"type" default:"approximate"`
  3697  	// City name.
  3698  	City string `json:"city" api:"nullable"`
  3699  	// Two-letter ISO 3166-1 country code, uppercase.
  3700  	Country string `json:"country" api:"nullable"`
  3701  	// Region or state name.
  3702  	Region string `json:"region" api:"nullable"`
  3703  	// IANA timezone identifier, e.g. "America/Los_Angeles".
  3704  	Timezone string `json:"timezone" api:"nullable"`
  3705  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  3706  	JSON struct {
  3707  		Type        respjson.Field
  3708  		City        respjson.Field
  3709  		Country     respjson.Field
  3710  		Region      respjson.Field
  3711  		Timezone    respjson.Field
  3712  		ExtraFields map[string]respjson.Field
  3713  		raw         string
  3714  	} `json:"-"`
  3715  }
  3716  
  3717  // Returns the unmodified JSON received from the API
  3718  func (r BetaManagedAgentsUserLocation) RawJSON() string { return r.JSON.raw }
  3719  func (r *BetaManagedAgentsUserLocation) UnmarshalJSON(data []byte) error {
  3720  	return apijson.UnmarshalRoot(data, r)
  3721  }
  3722  
  3723  // ToParam converts this BetaManagedAgentsUserLocation to a
  3724  // BetaManagedAgentsUserLocationParam.
  3725  //
  3726  // Warning: the fields of the param type will not be present. ToParam should only
  3727  // be used at the last possible moment before sending a request. Test for this with
  3728  // BetaManagedAgentsUserLocationParam.Overrides()
  3729  func (r BetaManagedAgentsUserLocation) ToParam() BetaManagedAgentsUserLocationParam {
  3730  	return param.Override[BetaManagedAgentsUserLocationParam](json.RawMessage(r.RawJSON()))
  3731  }
  3732  
  3733  // Approximate user location for search result localization.
  3734  //
  3735  // The property Type is required.
  3736  type BetaManagedAgentsUserLocationParam struct {
  3737  	// City name.
  3738  	City param.Opt[string] `json:"city,omitzero"`
  3739  	// Two-letter ISO 3166-1 country code, uppercase.
  3740  	Country param.Opt[string] `json:"country,omitzero"`
  3741  	// Region or state name.
  3742  	Region param.Opt[string] `json:"region,omitzero"`
  3743  	// IANA timezone identifier, e.g. "America/Los_Angeles".
  3744  	Timezone param.Opt[string] `json:"timezone,omitzero"`
  3745  	// Location precision. Only "approximate" is supported.
  3746  	//
  3747  	// This field can be elided, and will marshal its zero value as "approximate".
  3748  	Type constant.Approximate `json:"type" default:"approximate"`
  3749  	paramObj
  3750  }
  3751  
  3752  func (r BetaManagedAgentsUserLocationParam) MarshalJSON() (data []byte, err error) {
  3753  	type shadow BetaManagedAgentsUserLocationParam
  3754  	return param.MarshalObject(r, (*shadow)(&r))
  3755  }
  3756  func (r *BetaManagedAgentsUserLocationParam) UnmarshalJSON(data []byte) error {
  3757  	return apijson.UnmarshalRoot(data, r)
  3758  }
  3759  
  3760  // Configuration for the web_fetch tool.
  3761  type BetaManagedAgentsWebFetchToolConfig struct {
  3762  	Enabled bool              `json:"enabled" api:"required"`
  3763  	Name    constant.WebFetch `json:"name" default:"web_fetch"`
  3764  	// Permission policy for tool execution.
  3765  	PermissionPolicy BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  3766  	Type             constant.WebFetch                                        `json:"type" default:"web_fetch"`
  3767  	AllowedDomains   []string                                                 `json:"allowed_domains"`
  3768  	BlockedDomains   []string                                                 `json:"blocked_domains"`
  3769  	MaxContentTokens int64                                                    `json:"max_content_tokens" api:"nullable"`
  3770  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  3771  	JSON struct {
  3772  		Enabled          respjson.Field
  3773  		Name             respjson.Field
  3774  		PermissionPolicy respjson.Field
  3775  		Type             respjson.Field
  3776  		AllowedDomains   respjson.Field
  3777  		BlockedDomains   respjson.Field
  3778  		MaxContentTokens respjson.Field
  3779  		ExtraFields      map[string]respjson.Field
  3780  		raw              string
  3781  	} `json:"-"`
  3782  }
  3783  
  3784  // Returns the unmodified JSON received from the API
  3785  func (r BetaManagedAgentsWebFetchToolConfig) RawJSON() string { return r.JSON.raw }
  3786  func (r *BetaManagedAgentsWebFetchToolConfig) UnmarshalJSON(data []byte) error {
  3787  	return apijson.UnmarshalRoot(data, r)
  3788  }
  3789  
  3790  // BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion contains all possible
  3791  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  3792  // [BetaManagedAgentsAlwaysAskPolicy].
  3793  //
  3794  // Use the [BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion.AsAny] method
  3795  // to switch on the variant.
  3796  //
  3797  // Use the methods beginning with 'As' to cast the union to one of its variants.
  3798  type BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion struct {
  3799  	// Any of "always_allow", "always_ask".
  3800  	Type string `json:"type"`
  3801  	JSON struct {
  3802  		Type respjson.Field
  3803  		raw  string
  3804  	} `json:"-"`
  3805  }
  3806  
  3807  // anyBetaManagedAgentsWebFetchToolConfigPermissionPolicy is implemented by each
  3808  // variant of [BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion] to add
  3809  // type safety for the return type of
  3810  // [BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion.AsAny]
  3811  type anyBetaManagedAgentsWebFetchToolConfigPermissionPolicy interface {
  3812  	implBetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion()
  3813  }
  3814  
  3815  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion() {
  3816  }
  3817  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion() {
  3818  }
  3819  
  3820  // Use the following switch statement to find the correct variant
  3821  //
  3822  //	switch variant := BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion.AsAny().(type) {
  3823  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  3824  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  3825  //	default:
  3826  //	  fmt.Errorf("no variant present")
  3827  //	}
  3828  func (u BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsWebFetchToolConfigPermissionPolicy {
  3829  	switch u.Type {
  3830  	case "always_allow":
  3831  		return u.AsAlwaysAllow()
  3832  	case "always_ask":
  3833  		return u.AsAlwaysAsk()
  3834  	}
  3835  	return nil
  3836  }
  3837  
  3838  func (u BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  3839  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3840  	return
  3841  }
  3842  
  3843  func (u BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  3844  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  3845  	return
  3846  }
  3847  
  3848  // Returns the unmodified JSON received from the API
  3849  func (u BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  3850  
  3851  func (r *BetaManagedAgentsWebFetchToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  3852  	return apijson.UnmarshalRoot(data, r)
  3853  }
  3854  
  3855  // Configuration override for the web_fetch tool.
  3856  //
  3857  // The property Name is required.
  3858  type BetaManagedAgentsWebFetchToolConfigParams struct {
  3859  	// Whether this tool is enabled and available to Claude. Overrides the
  3860  	// default_config setting.
  3861  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  3862  	// Maximum number of tokens of fetched text content to include in context per call.
  3863  	// Does not apply to binary content such as PDFs.
  3864  	MaxContentTokens param.Opt[int64] `json:"max_content_tokens,omitzero"`
  3865  	// Permission policy for tool execution.
  3866  	PermissionPolicy BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  3867  	// Only fetch URLs whose host is one of these domains or a subdomain of one. Each
  3868  	// entry is a plain hostname like "docs.example.com" (no scheme, port, or path). At
  3869  	// most 64 entries; an empty list is rejected (omit the field instead). Cannot be
  3870  	// combined with blocked_domains.
  3871  	AllowedDomains []string `json:"allowed_domains,omitzero"`
  3872  	// Never fetch URLs whose host is one of these domains or a subdomain of one. Each
  3873  	// entry is a plain hostname like "ads.example.com" (no scheme, port, or path). At
  3874  	// most 64 entries; an empty list is rejected (omit the field instead). Cannot be
  3875  	// combined with allowed_domains.
  3876  	BlockedDomains []string `json:"blocked_domains,omitzero"`
  3877  	// Any of "web_fetch".
  3878  	Type BetaManagedAgentsWebFetchToolConfigParamsType `json:"type,omitzero"`
  3879  	// Must be "web_fetch".
  3880  	//
  3881  	// This field can be elided, and will marshal its zero value as "web_fetch".
  3882  	Name constant.WebFetch `json:"name" default:"web_fetch"`
  3883  	paramObj
  3884  }
  3885  
  3886  func (r BetaManagedAgentsWebFetchToolConfigParams) MarshalJSON() (data []byte, err error) {
  3887  	type shadow BetaManagedAgentsWebFetchToolConfigParams
  3888  	return param.MarshalObject(r, (*shadow)(&r))
  3889  }
  3890  func (r *BetaManagedAgentsWebFetchToolConfigParams) UnmarshalJSON(data []byte) error {
  3891  	return apijson.UnmarshalRoot(data, r)
  3892  }
  3893  
  3894  // Only one field can be non-zero.
  3895  //
  3896  // Use [param.IsOmitted] to confirm if a field is set.
  3897  type BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion struct {
  3898  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  3899  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  3900  	paramUnion
  3901  }
  3902  
  3903  func (u BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  3904  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  3905  }
  3906  func (u *BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  3907  	return apijson.UnmarshalRoot(data, u)
  3908  }
  3909  
  3910  func (u *BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion) asAny() any {
  3911  	if !param.IsOmitted(u.OfAlwaysAllow) {
  3912  		return u.OfAlwaysAllow
  3913  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  3914  		return u.OfAlwaysAsk
  3915  	}
  3916  	return nil
  3917  }
  3918  
  3919  // Returns a pointer to the underlying variant's property, if present.
  3920  func (u BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion) GetType() *string {
  3921  	if vt := u.OfAlwaysAllow; vt != nil {
  3922  		return (*string)(&vt.Type)
  3923  	} else if vt := u.OfAlwaysAsk; vt != nil {
  3924  		return (*string)(&vt.Type)
  3925  	}
  3926  	return nil
  3927  }
  3928  
  3929  func init() {
  3930  	apijson.RegisterUnion[BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion](
  3931  		"type",
  3932  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  3933  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  3934  	)
  3935  }
  3936  
  3937  type BetaManagedAgentsWebFetchToolConfigParamsType string
  3938  
  3939  const (
  3940  	BetaManagedAgentsWebFetchToolConfigParamsTypeWebFetch BetaManagedAgentsWebFetchToolConfigParamsType = "web_fetch"
  3941  )
  3942  
  3943  // Configuration for the web_search tool.
  3944  type BetaManagedAgentsWebSearchToolConfig struct {
  3945  	Enabled bool               `json:"enabled" api:"required"`
  3946  	Name    constant.WebSearch `json:"name" default:"web_search"`
  3947  	// Permission policy for tool execution.
  3948  	PermissionPolicy BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  3949  	Type             constant.WebSearch                                        `json:"type" default:"web_search"`
  3950  	AllowedDomains   []string                                                  `json:"allowed_domains"`
  3951  	BlockedDomains   []string                                                  `json:"blocked_domains"`
  3952  	// Approximate user location for search result localization.
  3953  	UserLocation BetaManagedAgentsUserLocation `json:"user_location" api:"nullable"`
  3954  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  3955  	JSON struct {
  3956  		Enabled          respjson.Field
  3957  		Name             respjson.Field
  3958  		PermissionPolicy respjson.Field
  3959  		Type             respjson.Field
  3960  		AllowedDomains   respjson.Field
  3961  		BlockedDomains   respjson.Field
  3962  		UserLocation     respjson.Field
  3963  		ExtraFields      map[string]respjson.Field
  3964  		raw              string
  3965  	} `json:"-"`
  3966  }
  3967  
  3968  // Returns the unmodified JSON received from the API
  3969  func (r BetaManagedAgentsWebSearchToolConfig) RawJSON() string { return r.JSON.raw }
  3970  func (r *BetaManagedAgentsWebSearchToolConfig) UnmarshalJSON(data []byte) error {
  3971  	return apijson.UnmarshalRoot(data, r)
  3972  }
  3973  
  3974  // BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion contains all possible
  3975  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  3976  // [BetaManagedAgentsAlwaysAskPolicy].
  3977  //
  3978  // Use the [BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion.AsAny] method
  3979  // to switch on the variant.
  3980  //
  3981  // Use the methods beginning with 'As' to cast the union to one of its variants.
  3982  type BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion struct {
  3983  	// Any of "always_allow", "always_ask".
  3984  	Type string `json:"type"`
  3985  	JSON struct {
  3986  		Type respjson.Field
  3987  		raw  string
  3988  	} `json:"-"`
  3989  }
  3990  
  3991  // anyBetaManagedAgentsWebSearchToolConfigPermissionPolicy is implemented by each
  3992  // variant of [BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion] to add
  3993  // type safety for the return type of
  3994  // [BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion.AsAny]
  3995  type anyBetaManagedAgentsWebSearchToolConfigPermissionPolicy interface {
  3996  	implBetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion()
  3997  }
  3998  
  3999  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion() {
  4000  }
  4001  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion() {
  4002  }
  4003  
  4004  // Use the following switch statement to find the correct variant
  4005  //
  4006  //	switch variant := BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion.AsAny().(type) {
  4007  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  4008  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  4009  //	default:
  4010  //	  fmt.Errorf("no variant present")
  4011  //	}
  4012  func (u BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsWebSearchToolConfigPermissionPolicy {
  4013  	switch u.Type {
  4014  	case "always_allow":
  4015  		return u.AsAlwaysAllow()
  4016  	case "always_ask":
  4017  		return u.AsAlwaysAsk()
  4018  	}
  4019  	return nil
  4020  }
  4021  
  4022  func (u BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  4023  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  4024  	return
  4025  }
  4026  
  4027  func (u BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  4028  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  4029  	return
  4030  }
  4031  
  4032  // Returns the unmodified JSON received from the API
  4033  func (u BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion) RawJSON() string {
  4034  	return u.JSON.raw
  4035  }
  4036  
  4037  func (r *BetaManagedAgentsWebSearchToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  4038  	return apijson.UnmarshalRoot(data, r)
  4039  }
  4040  
  4041  // Configuration override for the web_search tool.
  4042  //
  4043  // The property Name is required.
  4044  type BetaManagedAgentsWebSearchToolConfigParams struct {
  4045  	// Whether this tool is enabled and available to Claude. Overrides the
  4046  	// default_config setting.
  4047  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  4048  	// Permission policy for tool execution.
  4049  	PermissionPolicy BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  4050  	// Only return search results whose host is one of these domains or a subdomain of
  4051  	// one. Each entry is a plain hostname like "docs.example.com" (no scheme or port;
  4052  	// an optional path suffix is accepted). At most 64 entries; an empty list is
  4053  	// rejected (omit the field instead). Cannot be combined with blocked_domains.
  4054  	AllowedDomains []string `json:"allowed_domains,omitzero"`
  4055  	// Never return search results whose host is one of these domains or a subdomain of
  4056  	// one. Each entry is a plain hostname like "ads.example.com" (no scheme or port;
  4057  	// an optional path suffix is accepted). At most 64 entries; an empty list is
  4058  	// rejected (omit the field instead). Cannot be combined with allowed_domains.
  4059  	BlockedDomains []string `json:"blocked_domains,omitzero"`
  4060  	// Any of "web_search".
  4061  	Type BetaManagedAgentsWebSearchToolConfigParamsType `json:"type,omitzero"`
  4062  	// Approximate user location for search result localization.
  4063  	UserLocation BetaManagedAgentsUserLocationParam `json:"user_location,omitzero"`
  4064  	// Must be "web_search".
  4065  	//
  4066  	// This field can be elided, and will marshal its zero value as "web_search".
  4067  	Name constant.WebSearch `json:"name" default:"web_search"`
  4068  	paramObj
  4069  }
  4070  
  4071  func (r BetaManagedAgentsWebSearchToolConfigParams) MarshalJSON() (data []byte, err error) {
  4072  	type shadow BetaManagedAgentsWebSearchToolConfigParams
  4073  	return param.MarshalObject(r, (*shadow)(&r))
  4074  }
  4075  func (r *BetaManagedAgentsWebSearchToolConfigParams) UnmarshalJSON(data []byte) error {
  4076  	return apijson.UnmarshalRoot(data, r)
  4077  }
  4078  
  4079  // Only one field can be non-zero.
  4080  //
  4081  // Use [param.IsOmitted] to confirm if a field is set.
  4082  type BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion struct {
  4083  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  4084  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  4085  	paramUnion
  4086  }
  4087  
  4088  func (u BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  4089  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  4090  }
  4091  func (u *BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  4092  	return apijson.UnmarshalRoot(data, u)
  4093  }
  4094  
  4095  func (u *BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion) asAny() any {
  4096  	if !param.IsOmitted(u.OfAlwaysAllow) {
  4097  		return u.OfAlwaysAllow
  4098  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  4099  		return u.OfAlwaysAsk
  4100  	}
  4101  	return nil
  4102  }
  4103  
  4104  // Returns a pointer to the underlying variant's property, if present.
  4105  func (u BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion) GetType() *string {
  4106  	if vt := u.OfAlwaysAllow; vt != nil {
  4107  		return (*string)(&vt.Type)
  4108  	} else if vt := u.OfAlwaysAsk; vt != nil {
  4109  		return (*string)(&vt.Type)
  4110  	}
  4111  	return nil
  4112  }
  4113  
  4114  func init() {
  4115  	apijson.RegisterUnion[BetaManagedAgentsWebSearchToolConfigParamsPermissionPolicyUnion](
  4116  		"type",
  4117  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  4118  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  4119  	)
  4120  }
  4121  
  4122  type BetaManagedAgentsWebSearchToolConfigParamsType string
  4123  
  4124  const (
  4125  	BetaManagedAgentsWebSearchToolConfigParamsTypeWebSearch BetaManagedAgentsWebSearchToolConfigParamsType = "web_search"
  4126  )
  4127  
  4128  // Configuration for the write tool.
  4129  type BetaManagedAgentsWriteToolConfig struct {
  4130  	Enabled bool           `json:"enabled" api:"required"`
  4131  	Name    constant.Write `json:"name" default:"write"`
  4132  	// Permission policy for tool execution.
  4133  	PermissionPolicy BetaManagedAgentsWriteToolConfigPermissionPolicyUnion `json:"permission_policy" api:"required"`
  4134  	Type             constant.Write                                        `json:"type" default:"write"`
  4135  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
  4136  	JSON struct {
  4137  		Enabled          respjson.Field
  4138  		Name             respjson.Field
  4139  		PermissionPolicy respjson.Field
  4140  		Type             respjson.Field
  4141  		ExtraFields      map[string]respjson.Field
  4142  		raw              string
  4143  	} `json:"-"`
  4144  }
  4145  
  4146  // Returns the unmodified JSON received from the API
  4147  func (r BetaManagedAgentsWriteToolConfig) RawJSON() string { return r.JSON.raw }
  4148  func (r *BetaManagedAgentsWriteToolConfig) UnmarshalJSON(data []byte) error {
  4149  	return apijson.UnmarshalRoot(data, r)
  4150  }
  4151  
  4152  // BetaManagedAgentsWriteToolConfigPermissionPolicyUnion contains all possible
  4153  // properties and values from [BetaManagedAgentsAlwaysAllowPolicy],
  4154  // [BetaManagedAgentsAlwaysAskPolicy].
  4155  //
  4156  // Use the [BetaManagedAgentsWriteToolConfigPermissionPolicyUnion.AsAny] method to
  4157  // switch on the variant.
  4158  //
  4159  // Use the methods beginning with 'As' to cast the union to one of its variants.
  4160  type BetaManagedAgentsWriteToolConfigPermissionPolicyUnion struct {
  4161  	// Any of "always_allow", "always_ask".
  4162  	Type string `json:"type"`
  4163  	JSON struct {
  4164  		Type respjson.Field
  4165  		raw  string
  4166  	} `json:"-"`
  4167  }
  4168  
  4169  // anyBetaManagedAgentsWriteToolConfigPermissionPolicy is implemented by each
  4170  // variant of [BetaManagedAgentsWriteToolConfigPermissionPolicyUnion] to add type
  4171  // safety for the return type of
  4172  // [BetaManagedAgentsWriteToolConfigPermissionPolicyUnion.AsAny]
  4173  type anyBetaManagedAgentsWriteToolConfigPermissionPolicy interface {
  4174  	implBetaManagedAgentsWriteToolConfigPermissionPolicyUnion()
  4175  }
  4176  
  4177  func (BetaManagedAgentsAlwaysAllowPolicy) implBetaManagedAgentsWriteToolConfigPermissionPolicyUnion() {
  4178  }
  4179  func (BetaManagedAgentsAlwaysAskPolicy) implBetaManagedAgentsWriteToolConfigPermissionPolicyUnion() {}
  4180  
  4181  // Use the following switch statement to find the correct variant
  4182  //
  4183  //	switch variant := BetaManagedAgentsWriteToolConfigPermissionPolicyUnion.AsAny().(type) {
  4184  //	case anthropic.BetaManagedAgentsAlwaysAllowPolicy:
  4185  //	case anthropic.BetaManagedAgentsAlwaysAskPolicy:
  4186  //	default:
  4187  //	  fmt.Errorf("no variant present")
  4188  //	}
  4189  func (u BetaManagedAgentsWriteToolConfigPermissionPolicyUnion) AsAny() anyBetaManagedAgentsWriteToolConfigPermissionPolicy {
  4190  	switch u.Type {
  4191  	case "always_allow":
  4192  		return u.AsAlwaysAllow()
  4193  	case "always_ask":
  4194  		return u.AsAlwaysAsk()
  4195  	}
  4196  	return nil
  4197  }
  4198  
  4199  func (u BetaManagedAgentsWriteToolConfigPermissionPolicyUnion) AsAlwaysAllow() (v BetaManagedAgentsAlwaysAllowPolicy) {
  4200  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  4201  	return
  4202  }
  4203  
  4204  func (u BetaManagedAgentsWriteToolConfigPermissionPolicyUnion) AsAlwaysAsk() (v BetaManagedAgentsAlwaysAskPolicy) {
  4205  	apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
  4206  	return
  4207  }
  4208  
  4209  // Returns the unmodified JSON received from the API
  4210  func (u BetaManagedAgentsWriteToolConfigPermissionPolicyUnion) RawJSON() string { return u.JSON.raw }
  4211  
  4212  func (r *BetaManagedAgentsWriteToolConfigPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  4213  	return apijson.UnmarshalRoot(data, r)
  4214  }
  4215  
  4216  // Configuration override for the write tool.
  4217  //
  4218  // The property Name is required.
  4219  type BetaManagedAgentsWriteToolConfigParams struct {
  4220  	// Whether this tool is enabled and available to Claude. Overrides the
  4221  	// default_config setting.
  4222  	Enabled param.Opt[bool] `json:"enabled,omitzero"`
  4223  	// Permission policy for tool execution.
  4224  	PermissionPolicy BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion `json:"permission_policy,omitzero"`
  4225  	// Any of "write".
  4226  	Type BetaManagedAgentsWriteToolConfigParamsType `json:"type,omitzero"`
  4227  	// Must be "write".
  4228  	//
  4229  	// This field can be elided, and will marshal its zero value as "write".
  4230  	Name constant.Write `json:"name" default:"write"`
  4231  	paramObj
  4232  }
  4233  
  4234  func (r BetaManagedAgentsWriteToolConfigParams) MarshalJSON() (data []byte, err error) {
  4235  	type shadow BetaManagedAgentsWriteToolConfigParams
  4236  	return param.MarshalObject(r, (*shadow)(&r))
  4237  }
  4238  func (r *BetaManagedAgentsWriteToolConfigParams) UnmarshalJSON(data []byte) error {
  4239  	return apijson.UnmarshalRoot(data, r)
  4240  }
  4241  
  4242  // Only one field can be non-zero.
  4243  //
  4244  // Use [param.IsOmitted] to confirm if a field is set.
  4245  type BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion struct {
  4246  	OfAlwaysAllow *BetaManagedAgentsAlwaysAllowPolicyParam `json:",omitzero,inline"`
  4247  	OfAlwaysAsk   *BetaManagedAgentsAlwaysAskPolicyParam   `json:",omitzero,inline"`
  4248  	paramUnion
  4249  }
  4250  
  4251  func (u BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion) MarshalJSON() ([]byte, error) {
  4252  	return param.MarshalUnion(u, u.OfAlwaysAllow, u.OfAlwaysAsk)
  4253  }
  4254  func (u *BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion) UnmarshalJSON(data []byte) error {
  4255  	return apijson.UnmarshalRoot(data, u)
  4256  }
  4257  
  4258  func (u *BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion) asAny() any {
  4259  	if !param.IsOmitted(u.OfAlwaysAllow) {
  4260  		return u.OfAlwaysAllow
  4261  	} else if !param.IsOmitted(u.OfAlwaysAsk) {
  4262  		return u.OfAlwaysAsk
  4263  	}
  4264  	return nil
  4265  }
  4266  
  4267  // Returns a pointer to the underlying variant's property, if present.
  4268  func (u BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion) GetType() *string {
  4269  	if vt := u.OfAlwaysAllow; vt != nil {
  4270  		return (*string)(&vt.Type)
  4271  	} else if vt := u.OfAlwaysAsk; vt != nil {
  4272  		return (*string)(&vt.Type)
  4273  	}
  4274  	return nil
  4275  }
  4276  
  4277  func init() {
  4278  	apijson.RegisterUnion[BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion](
  4279  		"type",
  4280  		apijson.Discriminator[BetaManagedAgentsAlwaysAllowPolicyParam]("always_allow"),
  4281  		apijson.Discriminator[BetaManagedAgentsAlwaysAskPolicyParam]("always_ask"),
  4282  	)
  4283  }
  4284  
  4285  type BetaManagedAgentsWriteToolConfigParamsType string
  4286  
  4287  const (
  4288  	BetaManagedAgentsWriteToolConfigParamsTypeWrite BetaManagedAgentsWriteToolConfigParamsType = "write"
  4289  )
  4290  
  4291  type BetaAgentNewParams struct {
  4292  	// Model identifier. Accepts the
  4293  	// [model string](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison),
  4294  	// e.g. `claude-opus-5`, or a `model_config` object for additional configuration
  4295  	// control
  4296  	Model BetaManagedAgentsModelConfigParams `json:"model,omitzero" api:"required"`
  4297  	// Human-readable name for the agent.
  4298  	Name string `json:"name" api:"required"`
  4299  	// Description of what the agent does.
  4300  	Description param.Opt[string] `json:"description,omitzero"`
  4301  	// System prompt for the agent.
  4302  	System      param.Opt[string] `json:"system,omitzero"`
  4303  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
  4304  	// MCP servers this agent connects to. Maximum 20. Names must be unique within the
  4305  	// array. Every server must be referenced by an `mcp_toolset` in `tools`;
  4306  	// unreferenced servers are rejected. See the
  4307  	// [MCP connector guide](https://platform.claude.com/docs/en/managed-agents/mcp-connector).
  4308  	MCPServers []BetaManagedAgentsURLMCPServerParams `json:"mcp_servers,omitzero"`
  4309  	// Arbitrary key-value metadata. Maximum 16 pairs, keys up to 64 chars, values up
  4310  	// to 512 chars.
  4311  	Metadata map[string]string `json:"metadata,omitzero"`
  4312  	// A coordinator topology: the session's primary thread orchestrates work by
  4313  	// spawning session threads, each running an agent drawn from the `agents` roster.
  4314  	Multiagent BetaManagedAgentsMultiagentParams `json:"multiagent,omitzero"`
  4315  	// Skills available to the agent.
  4316  	Skills []BetaManagedAgentsSkillParamsUnion `json:"skills,omitzero"`
  4317  	// Tool configurations available to the agent. Maximum of 128 tools across all
  4318  	// toolsets allowed.
  4319  	Tools []BetaAgentNewParamsToolUnion `json:"tools,omitzero"`
  4320  	// Optional header to specify the beta version(s) you want to use.
  4321  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
  4322  	paramObj
  4323  }
  4324  
  4325  func (r BetaAgentNewParams) MarshalJSON() (data []byte, err error) {
  4326  	type shadow BetaAgentNewParams
  4327  	return param.MarshalObject(r, (*shadow)(&r))
  4328  }
  4329  func (r *BetaAgentNewParams) UnmarshalJSON(data []byte) error {
  4330  	return apijson.UnmarshalRoot(data, r)
  4331  }
  4332  
  4333  // Only one field can be non-zero.
  4334  //
  4335  // Use [param.IsOmitted] to confirm if a field is set.
  4336  type BetaAgentNewParamsToolUnion struct {
  4337  	OfAgentToolset20260401 *BetaManagedAgentsAgentToolset20260401Params `json:",omitzero,inline"`
  4338  	OfMCPToolset           *BetaManagedAgentsMCPToolsetParams           `json:",omitzero,inline"`
  4339  	OfCustom               *BetaManagedAgentsCustomToolParams           `json:",omitzero,inline"`
  4340  	paramUnion
  4341  }
  4342  
  4343  func (u BetaAgentNewParamsToolUnion) MarshalJSON() ([]byte, error) {
  4344  	return param.MarshalUnion(u, u.OfAgentToolset20260401, u.OfMCPToolset, u.OfCustom)
  4345  }
  4346  func (u *BetaAgentNewParamsToolUnion) UnmarshalJSON(data []byte) error {
  4347  	return apijson.UnmarshalRoot(data, u)
  4348  }
  4349  
  4350  func (u *BetaAgentNewParamsToolUnion) asAny() any {
  4351  	if !param.IsOmitted(u.OfAgentToolset20260401) {
  4352  		return u.OfAgentToolset20260401
  4353  	} else if !param.IsOmitted(u.OfMCPToolset) {
  4354  		return u.OfMCPToolset
  4355  	} else if !param.IsOmitted(u.OfCustom) {
  4356  		return u.OfCustom
  4357  	}
  4358  	return nil
  4359  }
  4360  
  4361  // Returns a pointer to the underlying variant's property, if present.
  4362  func (u BetaAgentNewParamsToolUnion) GetMCPServerName() *string {
  4363  	if vt := u.OfMCPToolset; vt != nil {
  4364  		return &vt.MCPServerName
  4365  	}
  4366  	return nil
  4367  }
  4368  
  4369  // Returns a pointer to the underlying variant's property, if present.
  4370  func (u BetaAgentNewParamsToolUnion) GetDescription() *string {
  4371  	if vt := u.OfCustom; vt != nil {
  4372  		return &vt.Description
  4373  	}
  4374  	return nil
  4375  }
  4376  
  4377  // Returns a pointer to the underlying variant's property, if present.
  4378  func (u BetaAgentNewParamsToolUnion) GetInputSchema() *BetaManagedAgentsCustomToolInputSchemaParam {
  4379  	if vt := u.OfCustom; vt != nil {
  4380  		return &vt.InputSchema
  4381  	}
  4382  	return nil
  4383  }
  4384  
  4385  // Returns a pointer to the underlying variant's property, if present.
  4386  func (u BetaAgentNewParamsToolUnion) GetName() *string {
  4387  	if vt := u.OfCustom; vt != nil {
  4388  		return &vt.Name
  4389  	}
  4390  	return nil
  4391  }
  4392  
  4393  // Returns a pointer to the underlying variant's property, if present.
  4394  func (u BetaAgentNewParamsToolUnion) GetType() *string {
  4395  	if vt := u.OfAgentToolset20260401; vt != nil {
  4396  		return (*string)(&vt.Type)
  4397  	} else if vt := u.OfMCPToolset; vt != nil {
  4398  		return (*string)(&vt.Type)
  4399  	} else if vt := u.OfCustom; vt != nil {
  4400  		return (*string)(&vt.Type)
  4401  	}
  4402  	return nil
  4403  }
  4404  
  4405  // Returns a subunion which exports methods to access subproperties
  4406  //
  4407  // Or use AsAny() to get the underlying value
  4408  func (u BetaAgentNewParamsToolUnion) GetConfigs() (res betaAgentNewParamsToolUnionConfigs) {
  4409  	if vt := u.OfAgentToolset20260401; vt != nil {
  4410  		res.any = &vt.Configs
  4411  	} else if vt := u.OfMCPToolset; vt != nil {
  4412  		res.any = &vt.Configs
  4413  	}
  4414  	return
  4415  }
  4416  
  4417  // Can have the runtime types [_[]BetaManagedAgentsAgentToolConfigParamsUnion],
  4418  // [_[]BetaManagedAgentsMCPToolConfigParams]
  4419  type betaAgentNewParamsToolUnionConfigs struct{ any }
  4420  
  4421  // Use the following switch statement to get the type of the union:
  4422  //
  4423  //	switch u.AsAny().(type) {
  4424  //	case *[]anthropic.BetaManagedAgentsAgentToolConfigParamsUnion:
  4425  //	case *[]anthropic.BetaManagedAgentsMCPToolConfigParams:
  4426  //	default:
  4427  //	    fmt.Errorf("not present")
  4428  //	}
  4429  func (u betaAgentNewParamsToolUnionConfigs) AsAny() any { return u.any }
  4430  
  4431  // Returns a subunion which exports methods to access subproperties
  4432  //
  4433  // Or use AsAny() to get the underlying value
  4434  func (u BetaAgentNewParamsToolUnion) GetDefaultConfig() (res betaAgentNewParamsToolUnionDefaultConfig) {
  4435  	if vt := u.OfAgentToolset20260401; vt != nil {
  4436  		res.any = &vt.DefaultConfig
  4437  	} else if vt := u.OfMCPToolset; vt != nil {
  4438  		res.any = &vt.DefaultConfig
  4439  	}
  4440  	return
  4441  }
  4442  
  4443  // Can have the runtime types [*BetaManagedAgentsAgentToolsetDefaultConfigParams],
  4444  // [*BetaManagedAgentsMCPToolsetDefaultConfigParams]
  4445  type betaAgentNewParamsToolUnionDefaultConfig struct{ any }
  4446  
  4447  // Use the following switch statement to get the type of the union:
  4448  //
  4449  //	switch u.AsAny().(type) {
  4450  //	case *anthropic.BetaManagedAgentsAgentToolsetDefaultConfigParams:
  4451  //	case *anthropic.BetaManagedAgentsMCPToolsetDefaultConfigParams:
  4452  //	default:
  4453  //	    fmt.Errorf("not present")
  4454  //	}
  4455  func (u betaAgentNewParamsToolUnionDefaultConfig) AsAny() any { return u.any }
  4456  
  4457  // Returns a pointer to the underlying variant's property, if present.
  4458  func (u betaAgentNewParamsToolUnionDefaultConfig) GetEnabled() *bool {
  4459  	switch vt := u.any.(type) {
  4460  	case *BetaManagedAgentsAgentToolsetDefaultConfigParams:
  4461  		return paramutil.AddrIfPresent(vt.Enabled)
  4462  	case *BetaManagedAgentsMCPToolsetDefaultConfigParams:
  4463  		return paramutil.AddrIfPresent(vt.Enabled)
  4464  	}
  4465  	return nil
  4466  }
  4467  
  4468  // Returns a subunion which exports methods to access subproperties
  4469  //
  4470  // Or use AsAny() to get the underlying value
  4471  func (u betaAgentNewParamsToolUnionDefaultConfig) GetPermissionPolicy() (res betaAgentNewParamsToolUnionDefaultConfigPermissionPolicy) {
  4472  	switch vt := u.any.(type) {
  4473  	case *BetaManagedAgentsAgentToolsetDefaultConfigParams:
  4474  		res.any = vt.PermissionPolicy
  4475  	case *BetaManagedAgentsMCPToolsetDefaultConfigParams:
  4476  		res.any = vt.PermissionPolicy
  4477  	}
  4478  	return res
  4479  }
  4480  
  4481  // Can have the runtime types [*BetaManagedAgentsAlwaysAllowPolicyParam],
  4482  // [*BetaManagedAgentsAlwaysAskPolicyParam]
  4483  type betaAgentNewParamsToolUnionDefaultConfigPermissionPolicy struct{ any }
  4484  
  4485  // Use the following switch statement to get the type of the union:
  4486  //
  4487  //	switch u.AsAny().(type) {
  4488  //	case *anthropic.BetaManagedAgentsAlwaysAllowPolicyParam:
  4489  //	case *anthropic.BetaManagedAgentsAlwaysAskPolicyParam:
  4490  //	default:
  4491  //	    fmt.Errorf("not present")
  4492  //	}
  4493  func (u betaAgentNewParamsToolUnionDefaultConfigPermissionPolicy) AsAny() any { return u.any }
  4494  
  4495  // Returns a pointer to the underlying variant's property, if present.
  4496  func (u betaAgentNewParamsToolUnionDefaultConfigPermissionPolicy) GetType() *string {
  4497  	switch vt := u.any.(type) {
  4498  	case *BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion:
  4499  		return vt.GetType()
  4500  	case *BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion:
  4501  		return vt.GetType()
  4502  	}
  4503  	return nil
  4504  }
  4505  
  4506  func init() {
  4507  	apijson.RegisterUnion[BetaAgentNewParamsToolUnion](
  4508  		"type",
  4509  		apijson.Discriminator[BetaManagedAgentsAgentToolset20260401Params]("agent_toolset_20260401"),
  4510  		apijson.Discriminator[BetaManagedAgentsMCPToolsetParams]("mcp_toolset"),
  4511  		apijson.Discriminator[BetaManagedAgentsCustomToolParams]("custom"),
  4512  	)
  4513  }
  4514  
  4515  type BetaAgentGetParams struct {
  4516  	// Agent version. Omit for the most recent version. Must be at least 1 if
  4517  	// specified.
  4518  	Version     param.Opt[int64]  `query:"version,omitzero" json:"-"`
  4519  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
  4520  	// Optional header to specify the beta version(s) you want to use.
  4521  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
  4522  	paramObj
  4523  }
  4524  
  4525  // URLQuery serializes [BetaAgentGetParams]'s query parameters as `url.Values`.
  4526  func (r BetaAgentGetParams) URLQuery() (v url.Values, err error) {
  4527  	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
  4528  		ArrayFormat:  apiquery.ArrayQueryFormatBrackets,
  4529  		NestedFormat: apiquery.NestedQueryFormatBrackets,
  4530  	})
  4531  }
  4532  
  4533  type BetaAgentUpdateParams struct {
  4534  	// Description. Omit to preserve; send empty string or null to clear.
  4535  	Description param.Opt[string] `json:"description,omitzero"`
  4536  	// System prompt. Omit to preserve; send empty string or null to clear.
  4537  	System param.Opt[string] `json:"system,omitzero"`
  4538  	// Human-readable name. Must be non-empty. Omit to preserve. Cannot be cleared.
  4539  	Name param.Opt[string] `json:"name,omitzero"`
  4540  	// The agent's current version, used to prevent concurrent overwrites. Obtain this
  4541  	// value from a create or retrieve response. Must be at least 1 if specified. When
  4542  	// supplied, the request fails if it does not match the server's current version;
  4543  	// omit to apply the update unconditionally.
  4544  	Version     param.Opt[int64]  `json:"version,omitzero"`
  4545  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
  4546  	// MCP servers. Full replacement. Omit to preserve; send empty array or `null` to
  4547  	// clear. Names must be unique. Maximum 20. Every server must be referenced by an
  4548  	// `mcp_toolset` in the agent's resulting `tools`; unreferenced servers are
  4549  	// rejected. See the
  4550  	// [MCP connector guide](https://platform.claude.com/docs/en/managed-agents/mcp-connector).
  4551  	MCPServers []BetaManagedAgentsURLMCPServerParams `json:"mcp_servers,omitzero"`
  4552  	// Metadata patch. Set a key to a string to upsert it, or to null to delete it.
  4553  	// Omit the field to preserve. The stored bag is limited to 16 keys (up to 64 chars
  4554  	// each) with values up to 512 chars.
  4555  	Metadata map[string]string `json:"metadata,omitzero"`
  4556  	// Skills. Full replacement. Omit to preserve; send empty array or null to clear.
  4557  	Skills []BetaManagedAgentsSkillParamsUnion `json:"skills,omitzero"`
  4558  	// Tool configurations available to the agent. Full replacement. Omit to preserve;
  4559  	// send empty array or null to clear. Maximum of 128 tools across all toolsets
  4560  	// allowed.
  4561  	Tools []BetaAgentUpdateParamsToolUnion `json:"tools,omitzero"`
  4562  	// Model identifier. Accepts the
  4563  	// [model string](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison),
  4564  	// e.g. `claude-opus-5`, or a `model_config` object for additional configuration
  4565  	// control. Omit to preserve. Cannot be cleared.
  4566  	Model BetaManagedAgentsModelConfigParams `json:"model,omitzero"`
  4567  	// A coordinator topology: the session's primary thread orchestrates work by
  4568  	// spawning session threads, each running an agent drawn from the `agents` roster.
  4569  	Multiagent BetaManagedAgentsMultiagentParams `json:"multiagent,omitzero"`
  4570  	// Optional header to specify the beta version(s) you want to use.
  4571  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
  4572  	paramObj
  4573  }
  4574  
  4575  func (r BetaAgentUpdateParams) MarshalJSON() (data []byte, err error) {
  4576  	type shadow BetaAgentUpdateParams
  4577  	return param.MarshalObject(r, (*shadow)(&r))
  4578  }
  4579  func (r *BetaAgentUpdateParams) UnmarshalJSON(data []byte) error {
  4580  	return apijson.UnmarshalRoot(data, r)
  4581  }
  4582  
  4583  // Only one field can be non-zero.
  4584  //
  4585  // Use [param.IsOmitted] to confirm if a field is set.
  4586  type BetaAgentUpdateParamsToolUnion struct {
  4587  	OfAgentToolset20260401 *BetaManagedAgentsAgentToolset20260401Params `json:",omitzero,inline"`
  4588  	OfMCPToolset           *BetaManagedAgentsMCPToolsetParams           `json:",omitzero,inline"`
  4589  	OfCustom               *BetaManagedAgentsCustomToolParams           `json:",omitzero,inline"`
  4590  	paramUnion
  4591  }
  4592  
  4593  func (u BetaAgentUpdateParamsToolUnion) MarshalJSON() ([]byte, error) {
  4594  	return param.MarshalUnion(u, u.OfAgentToolset20260401, u.OfMCPToolset, u.OfCustom)
  4595  }
  4596  func (u *BetaAgentUpdateParamsToolUnion) UnmarshalJSON(data []byte) error {
  4597  	return apijson.UnmarshalRoot(data, u)
  4598  }
  4599  
  4600  func (u *BetaAgentUpdateParamsToolUnion) asAny() any {
  4601  	if !param.IsOmitted(u.OfAgentToolset20260401) {
  4602  		return u.OfAgentToolset20260401
  4603  	} else if !param.IsOmitted(u.OfMCPToolset) {
  4604  		return u.OfMCPToolset
  4605  	} else if !param.IsOmitted(u.OfCustom) {
  4606  		return u.OfCustom
  4607  	}
  4608  	return nil
  4609  }
  4610  
  4611  // Returns a pointer to the underlying variant's property, if present.
  4612  func (u BetaAgentUpdateParamsToolUnion) GetMCPServerName() *string {
  4613  	if vt := u.OfMCPToolset; vt != nil {
  4614  		return &vt.MCPServerName
  4615  	}
  4616  	return nil
  4617  }
  4618  
  4619  // Returns a pointer to the underlying variant's property, if present.
  4620  func (u BetaAgentUpdateParamsToolUnion) GetDescription() *string {
  4621  	if vt := u.OfCustom; vt != nil {
  4622  		return &vt.Description
  4623  	}
  4624  	return nil
  4625  }
  4626  
  4627  // Returns a pointer to the underlying variant's property, if present.
  4628  func (u BetaAgentUpdateParamsToolUnion) GetInputSchema() *BetaManagedAgentsCustomToolInputSchemaParam {
  4629  	if vt := u.OfCustom; vt != nil {
  4630  		return &vt.InputSchema
  4631  	}
  4632  	return nil
  4633  }
  4634  
  4635  // Returns a pointer to the underlying variant's property, if present.
  4636  func (u BetaAgentUpdateParamsToolUnion) GetName() *string {
  4637  	if vt := u.OfCustom; vt != nil {
  4638  		return &vt.Name
  4639  	}
  4640  	return nil
  4641  }
  4642  
  4643  // Returns a pointer to the underlying variant's property, if present.
  4644  func (u BetaAgentUpdateParamsToolUnion) GetType() *string {
  4645  	if vt := u.OfAgentToolset20260401; vt != nil {
  4646  		return (*string)(&vt.Type)
  4647  	} else if vt := u.OfMCPToolset; vt != nil {
  4648  		return (*string)(&vt.Type)
  4649  	} else if vt := u.OfCustom; vt != nil {
  4650  		return (*string)(&vt.Type)
  4651  	}
  4652  	return nil
  4653  }
  4654  
  4655  // Returns a subunion which exports methods to access subproperties
  4656  //
  4657  // Or use AsAny() to get the underlying value
  4658  func (u BetaAgentUpdateParamsToolUnion) GetConfigs() (res betaAgentUpdateParamsToolUnionConfigs) {
  4659  	if vt := u.OfAgentToolset20260401; vt != nil {
  4660  		res.any = &vt.Configs
  4661  	} else if vt := u.OfMCPToolset; vt != nil {
  4662  		res.any = &vt.Configs
  4663  	}
  4664  	return
  4665  }
  4666  
  4667  // Can have the runtime types [_[]BetaManagedAgentsAgentToolConfigParamsUnion],
  4668  // [_[]BetaManagedAgentsMCPToolConfigParams]
  4669  type betaAgentUpdateParamsToolUnionConfigs struct{ any }
  4670  
  4671  // Use the following switch statement to get the type of the union:
  4672  //
  4673  //	switch u.AsAny().(type) {
  4674  //	case *[]anthropic.BetaManagedAgentsAgentToolConfigParamsUnion:
  4675  //	case *[]anthropic.BetaManagedAgentsMCPToolConfigParams:
  4676  //	default:
  4677  //	    fmt.Errorf("not present")
  4678  //	}
  4679  func (u betaAgentUpdateParamsToolUnionConfigs) AsAny() any { return u.any }
  4680  
  4681  // Returns a subunion which exports methods to access subproperties
  4682  //
  4683  // Or use AsAny() to get the underlying value
  4684  func (u BetaAgentUpdateParamsToolUnion) GetDefaultConfig() (res betaAgentUpdateParamsToolUnionDefaultConfig) {
  4685  	if vt := u.OfAgentToolset20260401; vt != nil {
  4686  		res.any = &vt.DefaultConfig
  4687  	} else if vt := u.OfMCPToolset; vt != nil {
  4688  		res.any = &vt.DefaultConfig
  4689  	}
  4690  	return
  4691  }
  4692  
  4693  // Can have the runtime types [*BetaManagedAgentsAgentToolsetDefaultConfigParams],
  4694  // [*BetaManagedAgentsMCPToolsetDefaultConfigParams]
  4695  type betaAgentUpdateParamsToolUnionDefaultConfig struct{ any }
  4696  
  4697  // Use the following switch statement to get the type of the union:
  4698  //
  4699  //	switch u.AsAny().(type) {
  4700  //	case *anthropic.BetaManagedAgentsAgentToolsetDefaultConfigParams:
  4701  //	case *anthropic.BetaManagedAgentsMCPToolsetDefaultConfigParams:
  4702  //	default:
  4703  //	    fmt.Errorf("not present")
  4704  //	}
  4705  func (u betaAgentUpdateParamsToolUnionDefaultConfig) AsAny() any { return u.any }
  4706  
  4707  // Returns a pointer to the underlying variant's property, if present.
  4708  func (u betaAgentUpdateParamsToolUnionDefaultConfig) GetEnabled() *bool {
  4709  	switch vt := u.any.(type) {
  4710  	case *BetaManagedAgentsAgentToolsetDefaultConfigParams:
  4711  		return paramutil.AddrIfPresent(vt.Enabled)
  4712  	case *BetaManagedAgentsMCPToolsetDefaultConfigParams:
  4713  		return paramutil.AddrIfPresent(vt.Enabled)
  4714  	}
  4715  	return nil
  4716  }
  4717  
  4718  // Returns a subunion which exports methods to access subproperties
  4719  //
  4720  // Or use AsAny() to get the underlying value
  4721  func (u betaAgentUpdateParamsToolUnionDefaultConfig) GetPermissionPolicy() (res betaAgentUpdateParamsToolUnionDefaultConfigPermissionPolicy) {
  4722  	switch vt := u.any.(type) {
  4723  	case *BetaManagedAgentsAgentToolsetDefaultConfigParams:
  4724  		res.any = vt.PermissionPolicy
  4725  	case *BetaManagedAgentsMCPToolsetDefaultConfigParams:
  4726  		res.any = vt.PermissionPolicy
  4727  	}
  4728  	return res
  4729  }
  4730  
  4731  // Can have the runtime types [*BetaManagedAgentsAlwaysAllowPolicyParam],
  4732  // [*BetaManagedAgentsAlwaysAskPolicyParam]
  4733  type betaAgentUpdateParamsToolUnionDefaultConfigPermissionPolicy struct{ any }
  4734  
  4735  // Use the following switch statement to get the type of the union:
  4736  //
  4737  //	switch u.AsAny().(type) {
  4738  //	case *anthropic.BetaManagedAgentsAlwaysAllowPolicyParam:
  4739  //	case *anthropic.BetaManagedAgentsAlwaysAskPolicyParam:
  4740  //	default:
  4741  //	    fmt.Errorf("not present")
  4742  //	}
  4743  func (u betaAgentUpdateParamsToolUnionDefaultConfigPermissionPolicy) AsAny() any { return u.any }
  4744  
  4745  // Returns a pointer to the underlying variant's property, if present.
  4746  func (u betaAgentUpdateParamsToolUnionDefaultConfigPermissionPolicy) GetType() *string {
  4747  	switch vt := u.any.(type) {
  4748  	case *BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion:
  4749  		return vt.GetType()
  4750  	case *BetaManagedAgentsMCPToolsetDefaultConfigParamsPermissionPolicyUnion:
  4751  		return vt.GetType()
  4752  	}
  4753  	return nil
  4754  }
  4755  
  4756  func init() {
  4757  	apijson.RegisterUnion[BetaAgentUpdateParamsToolUnion](
  4758  		"type",
  4759  		apijson.Discriminator[BetaManagedAgentsAgentToolset20260401Params]("agent_toolset_20260401"),
  4760  		apijson.Discriminator[BetaManagedAgentsMCPToolsetParams]("mcp_toolset"),
  4761  		apijson.Discriminator[BetaManagedAgentsCustomToolParams]("custom"),
  4762  	)
  4763  }
  4764  
  4765  type BetaAgentListParams struct {
  4766  	// Return agents created at or after this time (inclusive).
  4767  	CreatedAtGte param.Opt[time.Time] `query:"created_at[gte],omitzero" format:"date-time" json:"-"`
  4768  	// Return agents created at or before this time (inclusive).
  4769  	CreatedAtLte param.Opt[time.Time] `query:"created_at[lte],omitzero" format:"date-time" json:"-"`
  4770  	// Include archived agents in results. Defaults to false.
  4771  	IncludeArchived param.Opt[bool] `query:"include_archived,omitzero" json:"-"`
  4772  	// Maximum results per page. Default 20, maximum 100.
  4773  	Limit param.Opt[int64] `query:"limit,omitzero" json:"-"`
  4774  	// Opaque pagination cursor from a previous response.
  4775  	Page        param.Opt[string] `query:"page,omitzero" json:"-"`
  4776  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
  4777  	// Optional header to specify the beta version(s) you want to use.
  4778  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
  4779  	paramObj
  4780  }
  4781  
  4782  // URLQuery serializes [BetaAgentListParams]'s query parameters as `url.Values`.
  4783  func (r BetaAgentListParams) URLQuery() (v url.Values, err error) {
  4784  	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
  4785  		ArrayFormat:  apiquery.ArrayQueryFormatBrackets,
  4786  		NestedFormat: apiquery.NestedQueryFormatBrackets,
  4787  	})
  4788  }
  4789  
  4790  type BetaAgentArchiveParams struct {
  4791  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
  4792  	// Optional header to specify the beta version(s) you want to use.
  4793  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
  4794  	paramObj
  4795  }