// Code generated by cmd/extension-protocol-gen; DO NOT EDIT.

// Package extension: Extension Protocol v2 wire DTOs, enums, method
// names, frozen limits, and the frozen error table, mirrored from the
// host's internal/extension/protocol package. Behavior (validators,
// error constructors, helpers) lives in the handwritten files.
package extension

import "encoding/json"

// ProtocolID is the immutable identity string peers exchange during the
// initialize handshake.
const ProtocolID = "reasonix.extension.v2"

// ProtocolMajor is the frozen major version of this protocol build.
const ProtocolMajor = 2

// ProtocolVersion is the wire string form of ProtocolMajor carried in the
// initialize handshake.
const ProtocolVersion = "2"

// Frozen wire limits. These constants are part of the protocol contract.
const (
	// FrameBytes caps one JSON-RPC frame on the extension transport.
	FrameBytes = 8388608
	// ExternalizeFieldBytes is the threshold above which an externalizable
	// payload must move into a content ref instead of traveling inline.
	ExternalizeFieldBytes = 65536
	// ContentRefChunkBytes caps one host/content/read chunk.
	ContentRefChunkBytes = 262144
	// ContentRefObjectBytes caps one externalized object.
	ContentRefObjectBytes = 8388608
)

// Method names, frozen for Extension Protocol v2.
const (
	MethodExtensionEvent                = "extension/event"
	MethodExtensionInitialize           = "extension/initialize"
	MethodExtensionInitialized          = "extension/initialized"
	MethodExtensionIntercept            = "extension/intercept"
	MethodExtensionProviderCatalog      = "extension/provider/catalog"
	MethodExtensionProviderStreamCancel = "extension/provider/stream/cancel"
	MethodExtensionProviderStreamChunk  = "extension/provider/stream/chunk"
	MethodExtensionProviderStreamEnd    = "extension/provider/stream/end"
	MethodExtensionProviderStreamOpen   = "extension/provider/stream/open"
	MethodExtensionResourcesChanged     = "extension/resources/changed"
	MethodExtensionShutdown             = "extension/shutdown"
	MethodExtensionUIAction             = "extension/ui/action"
	MethodExtensionUISubmit             = "extension/ui/submit"
	MethodHostContentRead               = "host/content/read"
	MethodHostUIPublish                 = "host/ui/publish"
	MethodHostUIRequest                 = "host/ui/request"
)

// DomainErrorCode is the JSON-RPC code every extension domain error uses on
// the wire. The structured ProtocolErrorData reason distinguishes them.
const DomainErrorCode = -32000

// errorSpec is one frozen error table entry: the JSON-RPC code, the
// generic wire message, and whether the call may be retried.
type errorSpec struct {
	Code      int
	Message   string
	Retryable bool
}

// frozenErrorSpecs mirrors the host's frozen error table. Adding an entry
// is a conscious protocol change.
var frozenErrorSpecs = map[ErrorReason]errorSpec{
	ErrActivationFailed:      {DomainErrorCode, "Component activation failed; the new generation was not published.", false},
	ErrCapabilityNotDeclared: {DomainErrorCode, "The extension used a capability its manifest did not declare.", false},
	ErrCleanupFailed:         {DomainErrorCode, "Component cleanup failed while disposing scoped effects.", true},
	ErrContentRefExpired:     {DomainErrorCode, "The referenced content has expired.", true},
	ErrDependencyCycle:       {DomainErrorCode, "The dependency graph contains a required cycle.", false},
	ErrDependencyUnsatisfied: {DomainErrorCode, "A required dependency is missing or not version-compatible.", false},
	ErrFrameTooLarge:         {DomainErrorCode, "The frame exceeds the frozen protocol size limit.", false},
	ErrInterceptTimeout:      {DomainErrorCode, "The extension did not answer an intercept within its timeout.", true},
	ErrInternal:              {CodeInternal, "An internal extension protocol error occurred.", true},
	ErrInvalidParams:         {CodeInvalidParams, "The params do not match the registered method schema.", false},
	ErrProtocolError:         {CodeInvalidRequest, "The extension protocol frame or envelope is invalid.", false},
	ErrProviderFailed:        {DomainErrorCode, "The extension provider stream failed.", true},
	ErrProviderInterrupted:   {DomainErrorCode, "The extension provider stream was interrupted.", true},
	ErrSchemaMismatch:        {DomainErrorCode, "A capability schema hash does not match the expected pin.", false},
	ErrShutdownTimeout:       {DomainErrorCode, "The extension did not shut down within the requested timeout.", true},
	ErrStaleGeneration:       {DomainErrorCode, "The message belongs to a superseded runtime generation.", false},
	ErrStreamCancelled:       {DomainErrorCode, "The provider stream was cancelled.", false},
	ErrStreamGap:             {DomainErrorCode, "A provider stream chunk is missing from the ordered sequence.", true},
	ErrUnknownMethod:         {CodeMethodNotFound, "The method is not registered in Extension Protocol v2.", false},
	ErrUnsupportedVersion:    {DomainErrorCode, "The peer's extension protocol version is not supported.", false},
}

// EventParams is a generated Extension Protocol v2 wire DTO.
type EventParams struct {
	Event        InterceptEvent      `json:"event"`
	Payload      json.RawMessage     `json:"payload" externalizable:"true"`
	Externalized []ExternalizedField `json:"externalized,omitempty"`
}

// InterceptEvent is a generated Extension Protocol v2 string enum.
type InterceptEvent string

const (
	EventAgentBeforeStart   InterceptEvent = "agent.before_start"
	EventCompactionComplete InterceptEvent = "compaction.complete"
	EventCompactionPrepare  InterceptEvent = "compaction.prepare"
	EventContextPrepare     InterceptEvent = "context.prepare"
	EventFrontendEvent      InterceptEvent = "frontend.event"
	EventInputReceive       InterceptEvent = "input.receive"
	EventPermissionDecision InterceptEvent = "permission.decision"
	EventProviderRequest    InterceptEvent = "provider.request"
	EventProviderResponse   InterceptEvent = "provider.response"
	EventSessionEnd         InterceptEvent = "session.end"
	EventSessionLoad        InterceptEvent = "session.load"
	EventSessionRotate      InterceptEvent = "session.rotate"
	EventSessionSave        InterceptEvent = "session.save"
	EventSessionStart       InterceptEvent = "session.start"
	EventSystemPromptBuild  InterceptEvent = "system_prompt.build"
	EventToolAfter          InterceptEvent = "tool.after"
	EventToolBefore         InterceptEvent = "tool.before"
)

// ExternalizedField is a generated Extension Protocol v2 wire DTO.
type ExternalizedField struct {
	JSONPointer string `json:"jsonPointer" validate:"nonempty"`
	ContentRef  string `json:"contentRef" validate:"nonempty"`
	TotalBytes  int64  `json:"totalBytes" validate:"min=0"`
	SHA256      string `json:"sha256" validate:"sha256"`
}

// InitializeParams is a generated Extension Protocol v2 wire DTO.
type InitializeParams struct {
	ProtocolVersion         string              `json:"protocolVersion" validate:"nonempty"`
	ProtocolID              string              `json:"protocolId" validate:"nonempty"`
	Manifest                ManifestExpectation `json:"manifest"`
	Session                 SessionContext      `json:"session"`
	Capabilities            HostCapabilities    `json:"capabilities"`
	DependencySchemaVersion int                 `json:"dependencySchemaVersion,omitempty" validate:"min=0"`
}

// ManifestExpectation is a generated Extension Protocol v2 wire DTO.
type ManifestExpectation struct {
	Intercepts   []string          `json:"intercepts,omitempty"`
	Replaces     []string          `json:"replaces,omitempty"`
	Providers    []string          `json:"providers,omitempty"`
	UIActions    []string          `json:"uiActions,omitempty"`
	Capabilities []string          `json:"capabilities,omitempty"`
	Requires     []RequirementWire `json:"requires,omitempty"`
	Provides     []CapabilityWire  `json:"provides,omitempty"`
}

// RequirementWire is a generated Extension Protocol v2 wire DTO.
type RequirementWire struct {
	Namespace    string `json:"namespace" validate:"nonempty"`
	Kind         string `json:"kind" validate:"nonempty"`
	ID           string `json:"id" validate:"nonempty"`
	Version      string `json:"version,omitempty"`
	SchemaHash   string `json:"schemaHash,omitempty"`
	VersionRange string `json:"versionRange,omitempty"`
	Optional     bool   `json:"optional,omitempty"`
}

// CapabilityWire is a generated Extension Protocol v2 wire DTO.
type CapabilityWire struct {
	Namespace  string `json:"namespace" validate:"nonempty"`
	Kind       string `json:"kind" validate:"nonempty"`
	ID         string `json:"id" validate:"nonempty"`
	Version    string `json:"version,omitempty"`
	SchemaHash string `json:"schemaHash,omitempty"`
}

// SessionContext is a generated Extension Protocol v2 wire DTO.
type SessionContext struct {
	SessionID     string `json:"sessionId" validate:"nonempty"`
	WorkspaceRoot string `json:"workspaceRoot" validate:"nonempty"`
	Generation    uint64 `json:"generation"`
	Epoch         string `json:"epoch,omitempty"`
}

// HostCapabilities is a generated Extension Protocol v2 wire DTO.
type HostCapabilities struct {
	ContentRefs             bool       `json:"contentRefs"`
	UIHost                  UIHostKind `json:"uiHost"`
	ProtocolVersion         string     `json:"protocolVersion" validate:"nonempty"`
	DependencySchemaVersion int        `json:"dependencySchemaVersion,omitempty" validate:"min=0"`
}

// UIHostKind is a generated Extension Protocol v2 string enum.
type UIHostKind string

const (
	UIHostTUI      UIHostKind = "tui"
	UIHostDesktop  UIHostKind = "desktop"
	UIHostACP      UIHostKind = "acp"
	UIHostHeadless UIHostKind = "headless"
)

// InitializeResult is a generated Extension Protocol v2 wire DTO.
type InitializeResult struct {
	ProtocolVersion    string               `json:"protocolVersion" validate:"nonempty"`
	Name               string               `json:"name" validate:"nonempty"`
	Version            string               `json:"version" validate:"nonempty"`
	ComponentID        string               `json:"componentId,omitempty"`
	Subscriptions      []string             `json:"subscriptions,omitempty"`
	Replaces           []string             `json:"replaces,omitempty"`
	Providers          []ProviderDescriptor `json:"providers,omitempty"`
	UIActions          []UIActionDecl       `json:"uiActions,omitempty"`
	Requires           []RequirementWire    `json:"requires,omitempty"`
	Provides           []CapabilityWire     `json:"provides,omitempty"`
	StateSchemaVersion int                  `json:"stateSchemaVersion" validate:"min=0"`
}

// ProviderDescriptor is a generated Extension Protocol v2 wire DTO.
type ProviderDescriptor struct {
	Ref                            string   `json:"ref" validate:"nonempty"`
	DisplayName                    string   `json:"displayName,omitempty"`
	Model                          string   `json:"model,omitempty"`
	ContextWindow                  int      `json:"contextWindow,omitempty" validate:"min=0"`
	PricingCurrency                string   `json:"pricingCurrency,omitempty"`
	CacheHitPerMillion             float64  `json:"cacheHitPerMillion,omitempty" validate:"min=0"`
	InputPerMillion                float64  `json:"inputPerMillion,omitempty" validate:"min=0"`
	OutputPerMillion               float64  `json:"outputPerMillion,omitempty" validate:"min=0"`
	Vision                         bool     `json:"vision,omitempty"`
	Tools                          bool     `json:"tools,omitempty"`
	Reasoning                      bool     `json:"reasoning,omitempty"`
	Efforts                        []string `json:"efforts,omitempty"`
	DefaultEffort                  string   `json:"defaultEffort,omitempty"`
	ToolCallReasoning              bool     `json:"toolCallReasoning,omitempty"`
	ReasoningRoundTrip             bool     `json:"reasoningRoundTrip,omitempty"`
	WarnOnMissingToolCallReasoning bool     `json:"warnOnMissingToolCallReasoning,omitempty"`
}

// UIActionDecl is a generated Extension Protocol v2 wire DTO.
type UIActionDecl struct {
	ActionID string `json:"actionId" validate:"nonempty"`
	Label    string `json:"label,omitempty"`
}

// InitializedParams is a generated Extension Protocol v2 wire DTO.
type InitializedParams struct{}

// InterceptParams is a generated Extension Protocol v2 wire DTO.
type InterceptParams struct {
	Event         InterceptEvent      `json:"event"`
	Seq           uint64              `json:"seq" validate:"min=1"`
	Payload       json.RawMessage     `json:"payload" externalizable:"true"`
	TimeoutMillis int                 `json:"timeoutMillis" validate:"min=0"`
	Externalized  []ExternalizedField `json:"externalized,omitempty"`
}

// InterceptResult is a generated Extension Protocol v2 wire DTO.
type InterceptResult struct {
	Decision     InterceptDecision   `json:"decision"`
	Reason       string              `json:"reason,omitempty"`
	Replacement  json.RawMessage     `json:"replacement,omitempty" externalizable:"true"`
	Externalized []ExternalizedField `json:"externalized,omitempty"`
}

// InterceptDecision is a generated Extension Protocol v2 string enum.
type InterceptDecision string

const (
	DecisionContinue InterceptDecision = "continue"
	DecisionBlock    InterceptDecision = "block"
	DecisionReplace  InterceptDecision = "replace"
	DecisionAllow    InterceptDecision = "allow"
	DecisionDeny     InterceptDecision = "deny"
)

// ProviderCatalogParams is a generated Extension Protocol v2 wire DTO.
type ProviderCatalogParams struct{}

// ProviderCatalogResult is a generated Extension Protocol v2 wire DTO.
type ProviderCatalogResult struct {
	Providers []ProviderDescriptor `json:"providers"`
}

// StreamCancelParams is a generated Extension Protocol v2 wire DTO.
type StreamCancelParams struct {
	StreamID string `json:"streamId" validate:"nonempty"`
}

// StreamCancelResult is a generated Extension Protocol v2 wire DTO.
type StreamCancelResult struct {
	Cancelled bool `json:"cancelled"`
}

// StreamChunkParams is a generated Extension Protocol v2 wire DTO.
type StreamChunkParams struct {
	StreamID   string        `json:"streamId" validate:"nonempty"`
	Seq        int64         `json:"seq" validate:"min=1"`
	Chunk      ProviderChunk `json:"chunk"`
	Generation uint64        `json:"generation,omitempty"`
	Epoch      string        `json:"epoch,omitempty"`
}

// ProviderChunk is a generated Extension Protocol v2 wire DTO.
type ProviderChunk struct {
	Type       ProviderChunkType `json:"type"`
	Text       string            `json:"text,omitempty"`
	Signature  string            `json:"signature,omitempty"`
	ToolCall   *ProviderToolCall `json:"toolCall,omitempty"`
	ArgChars   int               `json:"argChars,omitempty" validate:"min=0"`
	Usage      *ProviderUsage    `json:"usage,omitempty"`
	Error      *ProviderError    `json:"error,omitempty"`
	Generation uint64            `json:"generation,omitempty"`
	Epoch      string            `json:"epoch,omitempty"`
}

// ProviderChunkType is a generated Extension Protocol v2 string enum.
type ProviderChunkType string

const (
	ChunkText          ProviderChunkType = "text"
	ChunkReasoning     ProviderChunkType = "reasoning"
	ChunkToolCallStart ProviderChunkType = "tool_call_start"
	ChunkToolCallDelta ProviderChunkType = "tool_call_args_delta"
	ChunkToolCall      ProviderChunkType = "tool_call"
	ChunkUsage         ProviderChunkType = "usage"
	ChunkDone          ProviderChunkType = "done"
	ChunkError         ProviderChunkType = "error"
)

// ProviderToolCall is a generated Extension Protocol v2 wire DTO.
type ProviderToolCall struct {
	ID               string `json:"id" validate:"nonempty"`
	Name             string `json:"name" validate:"nonempty"`
	Arguments        string `json:"arguments"`
	ThoughtSignature string `json:"thought_signature,omitempty"`
}

// ProviderUsage is a generated Extension Protocol v2 wire DTO.
type ProviderUsage struct {
	PromptTokens     int    `json:"promptTokens" validate:"min=0"`
	CompletionTokens int    `json:"completionTokens" validate:"min=0"`
	TotalTokens      int    `json:"totalTokens" validate:"min=0"`
	CacheHitTokens   int    `json:"cacheHitTokens" validate:"min=0"`
	CacheMissTokens  int    `json:"cacheMissTokens" validate:"min=0"`
	ReasoningTokens  int    `json:"reasoningTokens" validate:"min=0"`
	FinishReason     string `json:"finishReason,omitempty"`
}

// ProviderError is a generated Extension Protocol v2 wire DTO.
type ProviderError struct {
	Code    ProviderErrorCode `json:"code"`
	Message string            `json:"message" validate:"nonempty"`
}

// ProviderErrorCode is a generated Extension Protocol v2 string enum.
type ProviderErrorCode string

const (
	ProviderFailed      ProviderErrorCode = "provider_failed"
	ProviderInterrupted ProviderErrorCode = "provider_interrupted"
)

// StreamEndParams is a generated Extension Protocol v2 wire DTO.
type StreamEndParams struct {
	StreamID    string `json:"streamId" validate:"nonempty"`
	LastSeq     int64  `json:"lastSeq" validate:"min=0"`
	Error       string `json:"error,omitempty"`
	Interrupted bool   `json:"interrupted,omitempty"`
}

// StreamOpenParams is a generated Extension Protocol v2 wire DTO.
type StreamOpenParams struct {
	StreamID    string          `json:"streamId" validate:"nonempty"`
	ProviderRef string          `json:"providerRef" validate:"nonempty"`
	Model       string          `json:"model,omitempty"`
	Effort      string          `json:"effort,omitempty"`
	Request     ProviderRequest `json:"request"`
	SeqBase     int             `json:"seqBase" validate:"min=0"`
	Generation  uint64          `json:"generation,omitempty"`
	Epoch       string          `json:"epoch,omitempty"`
}

// ProviderRequest is a generated Extension Protocol v2 wire DTO.
type ProviderRequest struct {
	Messages       []ProviderMessage       `json:"messages"`
	Tools          []ProviderToolSchema    `json:"tools"`
	Temperature    *float64                `json:"temperature,omitempty"`
	MaxTokens      int                     `json:"maxTokens" validate:"min=0"`
	ResponseFormat *ProviderResponseFormat `json:"responseFormat,omitempty"`
}

// ProviderMessage is a generated Extension Protocol v2 wire DTO.
type ProviderMessage struct {
	Role               ProviderRole       `json:"role,omitempty"`
	Content            string             `json:"content,omitempty" externalizable:"true"`
	Images             []string           `json:"images,omitempty"`
	ReasoningContent   string             `json:"reasoning_content,omitempty"`
	ReasoningSignature string             `json:"reasoning_signature,omitempty"`
	ToolCalls          []ProviderToolCall `json:"tool_calls,omitempty"`
	ToolCallID         string             `json:"tool_call_id,omitempty"`
	Name               string             `json:"name,omitempty"`
}

// ProviderRole is a generated Extension Protocol v2 string enum.
type ProviderRole string

const (
	ProviderRoleSystem    ProviderRole = "system"
	ProviderRoleUser      ProviderRole = "user"
	ProviderRoleAssistant ProviderRole = "assistant"
	ProviderRoleTool      ProviderRole = "tool"
)

// ProviderToolSchema is a generated Extension Protocol v2 wire DTO.
type ProviderToolSchema struct {
	Name        string          `json:"name" validate:"nonempty"`
	Description string          `json:"description,omitempty"`
	Parameters  json.RawMessage `json:"parameters"`
}

// ProviderResponseFormat is a generated Extension Protocol v2 wire DTO.
type ProviderResponseFormat struct {
	Type string `json:"type" validate:"nonempty"`
}

// StreamOpenResult is a generated Extension Protocol v2 wire DTO.
type StreamOpenResult struct {
	Accepted bool `json:"accepted"`
}

// ResourcesChangedParams is a generated Extension Protocol v2 wire DTO.
type ResourcesChangedParams struct {
	Paths []string `json:"paths"`
}

// ShutdownParams is a generated Extension Protocol v2 wire DTO.
type ShutdownParams struct {
	TimeoutMillis int `json:"timeoutMillis" validate:"min=0"`
}

// ShutdownResult is a generated Extension Protocol v2 wire DTO.
type ShutdownResult struct {
	Accepted bool `json:"accepted"`
}

// UIActionParams is a generated Extension Protocol v2 wire DTO.
type UIActionParams struct {
	ActionID   string            `json:"actionId" validate:"nonempty"`
	SessionID  string            `json:"sessionId" validate:"nonempty"`
	Generation uint64            `json:"generation"`
	Args       map[string]string `json:"args,omitempty"`
}

// UIActionResult is a generated Extension Protocol v2 wire DTO.
type UIActionResult struct {
	Accepted bool   `json:"accepted"`
	Message  string `json:"message,omitempty"`
}

// UISubmitParams is a generated Extension Protocol v2 wire DTO.
type UISubmitParams struct {
	SurfaceID  string         `json:"surfaceId" validate:"nonempty"`
	SessionID  string         `json:"sessionId" validate:"nonempty"`
	Generation uint64         `json:"generation"`
	Values     map[string]any `json:"values"`
}

// UISubmitResult is a generated Extension Protocol v2 wire DTO.
type UISubmitResult struct {
	Accepted bool `json:"accepted"`
}

// ContentReadParams is a generated Extension Protocol v2 wire DTO.
type ContentReadParams struct {
	ContentRef string `json:"contentRef" validate:"nonempty"`
	Offset     int64  `json:"offset" validate:"min=0"`
}

// ContentReadResult is a generated Extension Protocol v2 wire DTO.
type ContentReadResult struct {
	ContentRef string          `json:"contentRef" validate:"nonempty"`
	Offset     int64           `json:"offset" validate:"min=0"`
	DataBase64 string          `json:"dataBase64"`
	NextOffset *int64          `json:"nextOffset,omitempty" validate:"min=0"`
	TotalBytes int64           `json:"totalBytes" validate:"min=0"`
	SHA256     string          `json:"sha256" validate:"sha256"`
	Encoding   ContentEncoding `json:"encoding"`
}

// ContentEncoding is a generated Extension Protocol v2 string enum.
type ContentEncoding string

const (
	ContentUTF8 ContentEncoding = "utf8"
)

// UIPublishParams is a generated Extension Protocol v2 wire DTO.
type UIPublishParams struct {
	SurfaceID  string          `json:"surfaceId" validate:"nonempty"`
	SessionID  string          `json:"sessionId" validate:"nonempty"`
	Generation uint64          `json:"generation"`
	Kind       UISurfaceKind   `json:"kind"`
	Payload    json.RawMessage `json:"payload"`
}

// UISurfaceKind is a generated Extension Protocol v2 string enum.
type UISurfaceKind string

const (
	UISurfaceStatus       UISurfaceKind = "status"
	UISurfaceCard         UISurfaceKind = "card"
	UISurfaceForm         UISurfaceKind = "form"
	UISurfaceNotification UISurfaceKind = "notification"
)

// UIPublishResult is a generated Extension Protocol v2 wire DTO.
type UIPublishResult struct {
	Accepted bool `json:"accepted"`
}

// UIRequestParams is a generated Extension Protocol v2 wire DTO.
type UIRequestParams struct {
	SurfaceID  string          `json:"surfaceId" validate:"nonempty"`
	SessionID  string          `json:"sessionId" validate:"nonempty"`
	Generation uint64          `json:"generation"`
	Kind       UIRequestKind   `json:"kind"`
	Payload    json.RawMessage `json:"payload"`
}

// UIRequestKind is a generated Extension Protocol v2 string enum.
type UIRequestKind string

const (
	UIRequestConfirm     UIRequestKind = "confirm"
	UIRequestInput       UIRequestKind = "input"
	UIRequestSelect      UIRequestKind = "select"
	UIRequestMultiselect UIRequestKind = "multiselect"
)

// UIRequestResult is a generated Extension Protocol v2 wire DTO.
type UIRequestResult struct {
	Cancelled bool           `json:"cancelled"`
	Values    map[string]any `json:"values,omitempty"`
}

// UIStatusPayload is a generated Extension Protocol v2 wire DTO.
type UIStatusPayload struct {
	Label    string     `json:"label" validate:"nonempty"`
	Detail   string     `json:"detail,omitempty"`
	Severity UISeverity `json:"severity,omitempty"`
	Progress *float64   `json:"progress,omitempty"`
}

// UISeverity is a generated Extension Protocol v2 string enum.
type UISeverity string

const (
	UISeverityInfo  UISeverity = "info"
	UISeverityWarn  UISeverity = "warn"
	UISeverityError UISeverity = "error"
)

// UICardPayload is a generated Extension Protocol v2 wire DTO.
type UICardPayload struct {
	Title    string        `json:"title,omitempty"`
	Markdown string        `json:"markdown,omitempty"`
	Text     string        `json:"text,omitempty"`
	Fields   []UIKeyValue  `json:"fields,omitempty"`
	Progress *float64      `json:"progress,omitempty"`
	Actions  []UIActionRef `json:"actions,omitempty"`
}

// UIKeyValue is a generated Extension Protocol v2 wire DTO.
type UIKeyValue struct {
	Key   string `json:"key" validate:"nonempty"`
	Value string `json:"value"`
}

// UIActionRef is a generated Extension Protocol v2 wire DTO.
type UIActionRef struct {
	ActionID string `json:"actionId" validate:"nonempty"`
	Label    string `json:"label" validate:"nonempty"`
}

// UIFormPayload is a generated Extension Protocol v2 wire DTO.
type UIFormPayload struct {
	Title   string        `json:"title,omitempty"`
	Message string        `json:"message,omitempty"`
	Fields  []UIFormField `json:"fields"`
}

// UIFormField is a generated Extension Protocol v2 wire DTO.
type UIFormField struct {
	Key      string      `json:"key" validate:"nonempty"`
	Label    string      `json:"label,omitempty"`
	Kind     UIFieldKind `json:"kind"`
	Options  []string    `json:"options,omitempty"`
	Default  any         `json:"default,omitempty"`
	Required bool        `json:"required,omitempty"`
}

// UIFieldKind is a generated Extension Protocol v2 string enum.
type UIFieldKind string

const (
	UIFieldConfirm     UIFieldKind = "confirm"
	UIFieldInput       UIFieldKind = "input"
	UIFieldSelect      UIFieldKind = "select"
	UIFieldMultiselect UIFieldKind = "multiselect"
)

// UINotificationPayload is a generated Extension Protocol v2 wire DTO.
type UINotificationPayload struct {
	Title    string     `json:"title" validate:"nonempty"`
	Body     string     `json:"body,omitempty"`
	Severity UISeverity `json:"severity,omitempty"`
}

// ProtocolErrorData is a generated Extension Protocol v2 wire DTO.
type ProtocolErrorData struct {
	Reason    ErrorReason `json:"reason"`
	Retryable bool        `json:"retryable"`
}

// ErrorReason is a generated Extension Protocol v2 string enum.
type ErrorReason string

const (
	ErrActivationFailed      ErrorReason = "activation_failed"
	ErrCapabilityNotDeclared ErrorReason = "capability_not_declared"
	ErrCleanupFailed         ErrorReason = "cleanup_failed"
	ErrContentRefExpired     ErrorReason = "content_ref_expired"
	ErrDependencyCycle       ErrorReason = "dependency_cycle"
	ErrDependencyUnsatisfied ErrorReason = "dependency_unsatisfied"
	ErrFrameTooLarge         ErrorReason = "frame_too_large"
	ErrInterceptTimeout      ErrorReason = "intercept_timeout"
	ErrInternal              ErrorReason = "internal"
	ErrInvalidParams         ErrorReason = "invalid_params"
	ErrProtocolError         ErrorReason = "protocol_error"
	ErrProviderFailed        ErrorReason = "provider_failed"
	ErrProviderInterrupted   ErrorReason = "provider_interrupted"
	ErrSchemaMismatch        ErrorReason = "schema_mismatch"
	ErrShutdownTimeout       ErrorReason = "shutdown_timeout"
	ErrStaleGeneration       ErrorReason = "stale_generation"
	ErrStreamCancelled       ErrorReason = "stream_cancelled"
	ErrStreamGap             ErrorReason = "stream_gap"
	ErrUnknownMethod         ErrorReason = "unknown_method"
	ErrUnsupportedVersion    ErrorReason = "unsupported_version"
)
