apperror

package
v0.19.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2026 License: AGPL-3.0 Imports: 3 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ArgsOf

func ArgsOf(err error) map[string]string

func CauseOf

func CauseOf(err error) error

CauseOf is intentionally separate from errors.Unwrap: infrastructure errors are retained for boundary logging without becoming a domain-level contract.

func TypeURI

func TypeURI(code Code) string

Types

type Code

type Code string

Code is the stable machine identity shared by every transport. Client logic may branch on it; it must never branch on Detail or an underlying cause.

const (
	CodeBotNameTaken                     Code = "bot.name_taken"
	CodeBotAgentNotFound                 Code = "bot_agent.not_found"
	CodeBotAgentNameTaken                Code = "bot_agent.name_taken"
	CodeBotAgentInvalidRuntime           Code = "bot_agent.invalid_runtime"
	CodeBotAgentInvalidMetadata          Code = "bot_agent.invalid_metadata"
	CodeBotAgentDefaultInUse             Code = "bot_agent.default_in_use"
	CodeBotAgentUnavailable              Code = "bot_agent.unavailable"
	CodeChannelRuntimeUnavailable        Code = "channel.runtime_unavailable"
	CodeCompactionModelUnavailable       Code = "compaction.model_unavailable"
	CodeSettingsReasoningEffortInvalid   Code = "settings.reasoning_effort_invalid"
	CodeSettingsReasoningUnavailable     Code = "settings.reasoning_options_unavailable"
	CodeContextBudgetUnsatisfied         Code = "context.budget_unsatisfied"
	CodeContextProtectedOverflow         Code = "context.protected_overflow"
	CodeWorkspaceUnreachable             Code = "workspace.unreachable"
	CodeWorkspaceImageIncompatible       Code = "workspace.image_incompatible"
	CodeWorkspaceTemplateBootstrapFailed Code = "workspace.template_bootstrap_failed"
	CodeWorkspaceDisplayPrepareFailed    Code = "workspace.display_prepare_failed"
	CodeProviderTemplateNotFound         Code = "provider_template.not_found"
	CodeProviderTemplateDomainInvalid    Code = "provider_template.domain_invalid"
	CodeProviderTemplateDomainMismatch   Code = "provider_template.domain_mismatch"
	CodeProviderTemplateOperationFailed  Code = "provider_template.operation_failed"
	CodeProviderNameTaken                Code = "provider.name_taken"
	CodeProviderTemplateRequestInvalid   Code = "provider_template.request_invalid"
	CodeSearchProviderTypeConflict       Code = "search_provider.type_conflict"
	CodeConnectorRequestInvalid          Code = "connector.request_invalid"
	CodeConnectorNotConfigured           Code = "connector.not_configured"
	CodeConnectorNotFound                Code = "connector.not_found"
	CodeConnectorConflict                Code = "connector.conflict"
	CodeConnectorRequestRejected         Code = "connector.request_rejected"
	CodeConnectorUpstreamUnavailable     Code = "connector.upstream_unavailable"
	CodeConnectorOperationFailed         Code = "connector.operation_failed"
	CodeSkillBuiltinReadOnly             Code = "skill.builtin_read_only"
	CodeSkillNameTaken                   Code = "skill.name_taken"
	CodeSkillSaveFailed                  Code = "skill.save_failed"
	CodeRegistryUnavailable              Code = "registry.unavailable"
	CodeRegistryPackageNotFound          Code = "registry.package_not_found"
	CodeRegistryPackageInvalid           Code = "registry.package_invalid"
	CodeRegistryPackageInstallFailed     Code = "registry.package_install_failed"
	CodeProfileRequestInvalid            Code = "profile.request_invalid"
	CodeProfileTitleModelInvalid         Code = "profile.title_model_invalid"
	CodeProfileUpdateFailed              Code = "profile.update_failed"
	CodeACPRequestInvalid                Code = "acp.request_invalid"
	CodeACPAccessForbidden               Code = "acp.access_forbidden"
	CodeACPRuntimeNotFound               Code = "acp.runtime_not_found"
	CodeACPRuntimeConflict               Code = "acp.runtime_conflict"
	CodeACPRuntimeLimitReached           Code = "acp.runtime_limit_reached"
	CodeACPOperationFailed               Code = "acp.operation_failed"
	CodeACPTurnReplacementUnsupported    Code = "acp.turn_replacement_unsupported"
	CodeACPModelSelectionUnsupported     Code = "acp.model_selection_unsupported"
	CodeACPModelIDRequired               Code = "acp.model_id_required"
	CodeACPModelUnavailable              Code = "acp.model_unavailable"
	CodeACPReasoningUnsupported          Code = "acp.reasoning_selection_unsupported"
	CodeACPReasoningEffortRequired       Code = "acp.reasoning_effort_required"
	CodeACPReasoningUnavailable          Code = "acp.reasoning_effort_unavailable"
	CodeACPModeSelectionUnsupported      Code = "acp.mode_selection_unsupported"
	CodeACPModeIDRequired                Code = "acp.mode_id_required"
	CodeACPModeUnavailable               Code = "acp.mode_unavailable"
	CodeACPConfigUpdateFailed            Code = "acp.config_update_failed"
	CodeToolApprovalForbidden            Code = "tool_approval.forbidden"
	CodeToolApprovalNotFound             Code = "tool_approval.not_found"
	CodeToolApprovalExpired              Code = "tool_approval.expired"
	CodeToolApprovalAmbiguous            Code = "tool_approval.ambiguous"
	CodeToolApprovalRequestInvalid       Code = "tool_approval.request_invalid"
	CodeToolApprovalOperationFailed      Code = "tool_approval.operation_failed"
	CodeUserInputForbidden               Code = "user_input.forbidden"
	CodeUserInputExpired                 Code = "user_input.expired"
	CodeUserInputOperationFailed         Code = "user_input.operation_failed"
	CodeSessionBusy                      Code = "session_runtime.session_busy"
	CodeSessionInvocationConflict        Code = "session_runtime.invocation_conflict"
	CodeSessionHistoryInconsistent       Code = "session_runtime.history_inconsistent"
	CodeAgentResponseTimeout             Code = "agent.response_timeout"
	CodeAgentResponseInterrupted         Code = "agent.response_interrupted"

	CodeContextLifecycleRequestInvalid         Code = "context_lifecycle.request_invalid"
	CodeContextLifecycleAuthenticationRequired Code = "context_lifecycle.authentication_required"
	CodeContextLifecycleAccessDenied           Code = "context_lifecycle.access_denied"
	CodeContextLifecycleNotFound               Code = "context_lifecycle.not_found"
	CodeContextLifecycleLoadFailed             Code = "context_lifecycle.load_failed"
)

func CodeOf

func CodeOf(err error) Code

type Definition

type Definition struct {
	HTTPStatus  int
	Detail      string
	AllowedArgs []string
}

Definition is the single catalog entry for a public error contract. Type URIs and frontend i18n keys are derived mechanically from Code.

func Lookup

func Lookup(code Code) (Definition, bool)

type Error

type Error struct {
	// contains filtered or unexported fields
}

Error keeps the public contract separate from private diagnostics. The cause is intentionally not exposed through Unwrap; transport boundaries may log it through CauseOf without making infrastructure details part of the API.

func As

func As(err error) (*Error, bool)

func New

func New(code Code, args map[string]string) *Error

New creates a public application error without an infrastructure cause.

func Wrap

func Wrap(code Code, cause error, args map[string]string) *Error

Wrap retains a private cause for boundary logging. Only catalog-allowed args are kept for serialization.

func (*Error) Error

func (e *Error) Error() string

type Problem

type Problem struct {
	Type      string            `json:"type" validate:"required"`
	Status    int               `json:"status" validate:"required"`
	Detail    string            `json:"detail" validate:"required"`
	Code      string            `json:"code" validate:"required"`
	Args      map[string]string `json:"args" validate:"required"`
	RequestID string            `json:"request_id,omitempty"`
}

func ProblemFrom

func ProblemFrom(err error, requestID string) (Problem, bool)

type Public

type Public struct {
	Code      Code              `json:"code"`
	Args      map[string]string `json:"args"`
	Detail    string            `json:"detail"`
	RequestID string            `json:"request_id,omitempty"`
}

Public is the transport-neutral, user-safe representation of an application error. HTTP and streaming transports may wrap it in different envelopes, but must not derive their own code, detail, or metadata.

func PublicFrom

func PublicFrom(err error, requestID string) (Public, bool)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL