Services can resolve legacy aliases and expose the catalog over CLI and HTTP instead of ad-hoc error strings. Co-authored-by: Cursor <cursoragent@cursor.com>
60 lines
4.1 KiB
Go
60 lines
4.1 KiB
Go
package domains
|
||
|
||
import "error-code-system/errcode"
|
||
|
||
// registerAgent 对齐 agent-native contract.ErrorCode(12)与 pitransport 历史码(7)。
|
||
// 副作用与重试语义见 docs/agent-native-mapping.md。
|
||
func registerAgent(r *errcode.Registry) {
|
||
must(r, def(errcode.AgentCanceled, 499, errcode.SeverityInfo, errcode.RetryNever, errcode.SideEffectPossible,
|
||
"执行已取消", "确认取消已传播到模型、工具与子进程;不要伪报成功",
|
||
"canceled", "CANCELLED"))
|
||
must(r, def(errcode.AgentDeadlineExceeded, 408, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectPossible,
|
||
"超过执行截止时间", "预算与截止时间在同一 ExecutionID 内共享,不要换 ID 无条件重放",
|
||
"deadline_exceeded"))
|
||
must(r, def(errcode.AgentBudgetExceeded, 429, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectPossible,
|
||
"执行预算耗尽", "提高预算或缩小任务后再发起新的执行",
|
||
"budget_exceeded"))
|
||
must(r, def(errcode.AgentProviderUnavailable, 503, errcode.SeverityError, errcode.RetryTransient, errcode.SideEffectNone,
|
||
"模型提供方不可用", "视为传输级瞬时故障,只做有界重试",
|
||
"provider_unavailable"))
|
||
must(r, def(errcode.AgentProviderRejected, 502, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
|
||
"模型提供方拒绝请求", "检查模型名、请求体与账号权限,不要当瞬时故障重试",
|
||
"provider_rejected"))
|
||
must(r, def(errcode.AgentToolRejected, 403, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
|
||
"工具调用被拒绝", "工具不在允许范围内;不要自行扩大工具策略",
|
||
"tool_rejected"))
|
||
must(r, def(errcode.AgentPathOutsideWorkspace, 403, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
|
||
"路径越出授权工作区", "只访问 Workspace.Root 之内的路径",
|
||
"path_outside_workspace"))
|
||
must(r, def(errcode.AgentMissingCapability, 400, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
|
||
"后端缺少必需能力", "拒绝执行,不要静默降级到 Stub",
|
||
"missing_capability"))
|
||
must(r, def(errcode.AgentMissingDeliverable, 422, errcode.SeverityError, errcode.RetryTransient, errcode.SideEffectPossible,
|
||
"交付物缺失", "确认目标文件未部分写入后再做一次有界重试",
|
||
"missing_deliverable", "MISSING_TARGET"))
|
||
must(r, def(errcode.AgentEmptyOutput, 422, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
|
||
"输出为空", "检查提示词与停止原因,不要把空输出当成成功",
|
||
"empty_output"))
|
||
must(r, def(errcode.AgentUnknownOutcome, 500, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectPossible,
|
||
"执行结果不确定", "Unknown 不得降级为成功或失败;由调用方依据副作用决定能否重放",
|
||
"unknown_outcome"))
|
||
must(r, def(errcode.AgentInternal, 500, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectUnknown,
|
||
"执行器内部错误", "保留执行日志与 trace_id,不要对未知副作用无条件重放",
|
||
"internal"))
|
||
must(r, def(errcode.AgentPromptEmpty, 400, errcode.SeverityWarn, errcode.RetryNever, errcode.SideEffectNone,
|
||
"提示词为空", "补齐 prompt 后重新发起;对应 pitransport PROMPT_EMPTY",
|
||
"PROMPT_EMPTY", "prompt_empty"))
|
||
must(r, def(errcode.AgentUnauthorized, 401, errcode.SeverityWarn, errcode.RetryNever, errcode.SideEffectNone,
|
||
"执行器鉴权失败", "检查 runner 凭证;对应 pitransport UNAUTHORIZED",
|
||
"UNAUTHORIZED"))
|
||
must(r, def(errcode.AgentTimeout, 504, errcode.SeverityError, errcode.RetryTransient, errcode.SideEffectPossible,
|
||
"执行超时", "传输级超时可有界重试;对应 pitransport TIMEOUT",
|
||
"TIMEOUT"))
|
||
must(r, def(errcode.AgentTransient, 503, errcode.SeverityError, errcode.RetryTransient, errcode.SideEffectPossible,
|
||
"执行瞬时故障", "仅作有界重试;对应 pitransport TRANSIENT",
|
||
"TRANSIENT"))
|
||
must(r, def(errcode.AgentRunFailed, 500, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectPossible,
|
||
"执行运行失败", "查看 error_code 以外的运行日志;对应 pitransport RUN_FAILED",
|
||
"RUN_FAILED"))
|
||
}
|