apperror

package
v0.20.0 Latest Latest
Warning

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

Go to latest
Published: Sep 15, 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 (
	CodeWorkspaceDependencyDiscoveryFailed       Code = "workspace_dependency.discovery_failed"
	CodeWorkspaceDependencyDefinitionUnavailable Code = "workspace_dependency.definition_unavailable"
	CodeWorkspaceDependencyDefinitionInvalid     Code = "workspace_dependency.definition_invalid"
	CodeWorkspaceDependencyCatalogUnavailable    Code = "workspace_dependency.catalog_unavailable"
	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"
	CodeWorkspaceTemplateBootstrapFailed         Code = "workspace.template_bootstrap_failed"
	CodeWorkspaceDisplayPrepareFailed            Code = "workspace.display_prepare_failed"
	CodeWorkspaceDependencyNotFound              Code = "workspace_dependency.not_found"
	CodeWorkspaceDependencyRequestInvalid        Code = "workspace_dependency.request_invalid"
	CodeWorkspaceDependencyActionUnsupported     Code = "workspace_dependency.action_unsupported"
	CodeWorkspaceDependencyPlatformUnsupported   Code = "workspace_dependency.platform_unsupported"
	CodeWorkspaceDependencyBusy                  Code = "workspace_dependency.busy"
	CodeWorkspaceDependencyWorkspaceNotRunning   Code = "workspace_dependency.workspace_not_running"
	CodeWorkspaceDependencyWorkspaceMissing      Code = "workspace_dependency.workspace_missing"
	CodeWorkspaceDependencyRollbackUnavailable   Code = "workspace_dependency.rollback_unavailable"
	CodeWorkspaceDependencyOperationFailed       Code = "workspace_dependency.operation_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"
	CodeAppNotFound                              Code = "app.not_found"
	CodeAppRequestInvalid                        Code = "app.request_invalid"
	CodeAppBusy                                  Code = "app.busy"
	CodeAppOperationFailed                       Code = "app.operation_failed"
	CodeRegistryUnavailable                      Code = "registry.unavailable"
	CodeRegistryAppNotFound                      Code = "registry.app_not_found"
	CodeRegistryAppInvalid                       Code = "registry.app_invalid"
	CodeRegistryAppInstallFailed                 Code = "registry.app_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"
	CodeExternalAgentTurnReplacementUnsupported  Code = "external_agent.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"
	CodeRuntimeControlUnsupported                Code = "runtime_control.unsupported"
	CodeRuntimeControlCommandUnavailable         Code = "runtime_control.command_unavailable"
	CodeRuntimeControlModeUnavailable            Code = "runtime_control.mode_unavailable"
	CodeRuntimeControlGoalRequiresDefaultMode    Code = "runtime_control.goal_requires_default_mode"
	CodeWorkdirGitBusy                           Code = "workdir.git_busy"
	CodeWorkdirGitBranchUnavailable              Code = "workdir.git_branch_unavailable"
	CodeWorkdirGitSwitchFailed                   Code = "workdir.git_switch_failed"
	CodeWorkdirGitUnavailable                    Code = "workdir.git_unavailable"
	CodeRuntimeControlThreadUnavailable          Code = "runtime_control.thread_unavailable"
	CodeRuntimeControlCancelled                  Code = "runtime_control.cancelled"
	CodeRuntimeControlFailed                     Code = "runtime_control.failed"
	CodeRuntimeControlSteerFailed                Code = "runtime_control.steer_failed"
	CodeRuntimeControlForbidden                  Code = "runtime_control.forbidden"
	CodeRuntimeControlRequestInvalid             Code = "runtime_control.request_invalid"
	CodeExternalRuntimeAuthRequired              Code = "external_runtime.auth_required"
	CodeExternalRuntimeUnavailable               Code = "external_runtime.unavailable"
	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"
	CodeSessionModelPreferenceConflict           Code = "session.model_preference_conflict"
	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"
	CodeAgentProviderOverloaded                  Code = "agent.provider_overloaded"
	CodeAgentProviderRateLimited                 Code = "agent.provider_rate_limited"
	CodeAgentProviderQuotaExhausted              Code = "agent.provider_quota_exhausted"
	CodeAgentProviderAuthFailed                  Code = "agent.provider_auth_failed"
	CodeQueueNoActiveRun                         Code = "queue_no_active_run"
	CodeQueueAdmissionOverloaded                 Code = "queue_admission_overloaded"
	CodeQueueAdmissionUnavailable                Code = "queue_admission_unavailable"
	CodeQueueRequestInvalid                      Code = "queue_request_invalid"
	CodeQueueItemNotPending                      Code = "queue_item_not_pending"
	CodeQueueCapacityExceeded                    Code = "queue_capacity_exceeded"
	CodeQueueSteerUnsupported                    Code = "queue.steer_unsupported"

	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"
	CodeAgentAuthorizationExpired              Code = "agent_authorization.expired"
	CodeAgentAuthorizationNotReady             Code = "agent_authorization.not_ready"
	CodeAgentAuthorizationLimit                Code = "agent_authorization.limit"
	CodeAgentAuthorizationFailed               Code = "agent_authorization.failed"
	CodeAgentAuthorizationCodeInvalid          Code = "agent_authorization.code_invalid"
	CodeAgentCredentialNotFound                Code = "agent_credential.not_found"                //nolint:gosec // Stable public error code.
	CodeAgentCredentialRequestInvalid          Code = "agent_credential.request_invalid"          //nolint:gosec // Stable public error code.
	CodeAgentCredentialForbidden               Code = "agent_credential.forbidden"                //nolint:gosec // Stable public error code.
	CodeAgentCredentialIncompatible            Code = "agent_credential.incompatible"             //nolint:gosec // Stable public error code.
	CodeAgentCredentialRevoked                 Code = "agent_credential.revoked"                  //nolint:gosec // Stable public error code.
	CodeAgentCredentialReauthRequired          Code = "agent_credential.reauthorization_required" //nolint:gosec // Stable public error code.
	CodeAgentCredentialEncryptionUnavailable   Code = "agent_credential.encryption_unavailable"   //nolint:gosec // Stable public error code.
	CodeAgentCredentialRuntimeBusy             Code = "agent_credential.runtime_busy"             //nolint:gosec // Stable public error code.
	CodeAgentCredentialMaterializationFailed   Code = "agent_credential.materialization_failed"   //nolint:gosec // Stable public error code.
)

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