| title |
错误码全集 |
| type |
reference |
| created |
2026-04-15 |
| updated |
2026-04-15 |
| owner |
sky |
| tags |
errors |
reference |
llm-friendly |
|
所有 Result.error.code 的完整列表。LLM 可按类别查到对应的 suggestion 做条件分支。
{
"code": "TRANSPORT_NOT_CONFIGURED",
"message": "No active transport configured",
"suggestion": "Run: alb setup adb",
"category": "transport",
"details": { ... }
}
| 字段 |
含义 |
code |
固定常量,LLM 可用于 switch/case |
message |
人类可读的描述 |
suggestion |
LLM 下一步可执行的建议 |
category |
粗分类,便于过滤 |
details |
可选,结构化附加信息 |
| 分类 |
错误码前缀 |
场景 |
transport |
TRANSPORT_*, ADB_*, SSH_*, SERIAL_* |
底层通道问题 |
device |
DEVICE_* |
设备状态问题 |
permission |
PERMISSION_* |
权限系统拒绝 |
timeout |
TIMEOUT_* |
各类超时 |
io |
IO_*, FILE_* |
文件 / 磁盘 / 网络 IO |
input |
INVALID_* |
参数错 |
system |
SYSTEM_* |
进程 / 依赖 / 环境 |
capability |
CAPABILITY_* |
业务层错误 |
| Code |
场景 |
suggestion |
TRANSPORT_NOT_CONFIGURED |
无活跃 transport |
Run: alb setup adb (or ssh / serial) |
TRANSPORT_NOT_SUPPORTED |
请求的 transport 未实现 |
Use one of: adb, ssh, serial |
TRANSPORT_HEALTH_CHECK_FAILED |
health check 失败 |
Run: alb status --verbose |
ADB_BINARY_NOT_FOUND |
找不到 adb 可执行文件 |
Install platform-tools or set ALB_ADB_PATH |
ADB_SERVER_UNREACHABLE |
adb server 连不上 |
Check Xshell tunnel; run: ss -tlnp | grep 5037 |
ADB_VERSION_MISMATCH |
client/server 版本不匹配 |
Sync adb versions on both sides |
SSH_KEY_NOT_FOUND |
SSH key 文件不存在 |
Generate key: ssh-keygen -t ed25519 |
SSH_AUTH_FAILED |
ssh 鉴权失败 |
Check key or run: ssh-copy-id <host> |
SSH_HOST_UNREACHABLE |
ssh 主机不通 |
ping <host>; check network |
SERIAL_PORT_NOT_FOUND |
串口不存在 |
Check ser2net config and Xshell tunnel |
SERIAL_PERMISSION_DENIED |
串口访问权限 |
Add user to dialout group or sudo chmod |
SERIAL_BAUD_MISMATCH |
波特率不匹配 |
Try 115200 / 9600 / 921600 |
| Code |
场景 |
suggestion |
DEVICE_NOT_FOUND |
指定 serial 不存在 |
Run: alb devices |
DEVICE_UNAUTHORIZED |
USB 未授权 |
Accept "Allow USB debugging" on device screen |
DEVICE_OFFLINE |
设备离线 |
Reconnect USB or re-run alb_devices |
DEVICE_BOOTING |
设备启动中 |
Wait 30s and retry; or alb_power_wait_boot |
DEVICE_NO_ROOT |
需要 root 但设备不允许 |
adb root or accept root prompt on device |
DEVICE_BUSY |
其他 session 占用中 |
adb kill-server or wait for other session |
| Code |
场景 |
suggestion |
PERMISSION_DENIED |
命令被黑名单拦截 |
见 error.details.matched_rule;调整 scope 或配置 allow |
PERMISSION_ASK_TIMEOUT |
需要询问但无人响应 |
Set ask_on_ambiguous=false or use --confirm |
PERMISSION_SCOPE_TOO_BROAD |
命令范围过大 |
Scope to specific path/process/partition |
| Code |
场景 |
suggestion |
TIMEOUT_SHELL |
shell 命令超时 |
Increase timeout param or use stream_read |
TIMEOUT_PUSH / TIMEOUT_PULL |
文件传输超时 |
Check device / network; retry with --resume |
TIMEOUT_CONNECT |
连接超时 |
Check tunnel / firewall |
TIMEOUT_BOOT |
等设备启动超时 |
Device may have kernel panic; check UART |
| Code |
场景 |
suggestion |
FILE_NOT_FOUND |
本地文件不存在 |
检查路径 |
FILE_NOT_READABLE |
本地文件不可读 |
检查权限 |
WORKSPACE_FULL |
工作目录磁盘满 |
Run: alb workspace clean --older-than 7d |
WORKSPACE_WRITE_DENIED |
工作目录不可写 |
检查 ALB_WORKSPACE 配置 |
REMOTE_PATH_INVALID |
远端路径不合法 |
检查是否包含空格 / 特殊字符 |
DEVICE_STORAGE_FULL |
设备存储满 |
清理设备 /data/local/tmp |
| Code |
场景 |
suggestion |
INVALID_DEVICE_SERIAL |
序列号格式错 |
使用 alb_devices 返回的值 |
INVALID_FILTER |
logcat filter 语法错 |
参考 docs/capabilities/logging.md#filter |
INVALID_DURATION |
duration 超范围 |
1 ≤ duration ≤ 86400 |
INVALID_PORT |
端口号不合法 |
1-65535 |
INVALID_PROFILE |
profile 不存在 |
Run: alb profile list |
| Code |
场景 |
suggestion |
SYSTEM_DEPENDENCY_MISSING |
缺依赖(rsync/socat/picocom) |
根据 message 安装对应工具 |
SYSTEM_PYTHON_VERSION |
Python 版本过低 |
Upgrade to Python 3.11+ |
SYSTEM_UV_NOT_FOUND |
uv 未安装 |
curl -LsSf https://astral.sh/uv/install.sh | sh |
CONFIG_INVALID |
config.toml 格式错 |
查看 error.details.line 修改 |
CONFIG_NOT_FOUND |
找不到配置文件 |
Run: alb init |
| Code |
场景 |
suggestion |
NO_ANR_FOUND |
触发了 anr_pull 但设备无 ANR |
正常,等下次 crash |
NO_TOMBSTONE_FOUND |
无 tombstone |
同上 |
LOGCAT_BUFFER_OVERFLOW |
logcat 缓冲溢出(采集太慢) |
降 filter 粒度或提高 buffer |
APP_NOT_INSTALLED |
目标 apk 未安装 |
alb_app_install 先 |
APP_ALREADY_RUNNING |
启动已在运行的 app |
先 alb_app_stop 或 --force |
PACKAGE_NAME_INVALID |
包名格式错 |
应类似 com.example.app |
BENCHMARK_UNAVAILABLE |
跑分 app 未装(M2) |
alb_app_install <benchmark.apk> |
result = await alb_logcat(...)
if not result["ok"]:
code = result["error"]["code"]
if code == "TRANSPORT_NOT_CONFIGURED":
await alb_setup("adb") # 自动修复
result = await alb_logcat(...) # 重试
elif code == "DEVICE_UNAUTHORIZED":
return "请在设备上点击'允许 USB 调试'"
elif code.startswith("TIMEOUT_"):
# 重试一次,翻倍超时
...
if result["error"]["category"] == "permission":
# 用户决策 / 向用户请求
...
elif result["error"]["category"] == "transport":
# 运行 diagnostic
await alb_status(verbose=True)
# 某些 suggestion 是具体的命令,直接跑
sugg = result["error"]["suggestion"]
if sugg.startswith("Run: "):
# 提示用户(不要自动跑,suggestion 仍需要人类判断)
print(f"建议: {sugg}")
alb describe-errors # 输出全表 JSON
alb describe-errors --code ADB_SERVER_UNREACHABLE # 单个查询
MCP tool:
@tool()
async def alb_describe_errors(code: str | None = None) -> dict:
"""Query the error code catalog. LLM can call this when uncertain about a received error."""
- 在
src/alb/infra/errors.py 的 ERROR_CODES dict 加条目
- 本文档同步更新
- 在抛出的位置用
fail(code="YOUR_NEW_CODE", ...)
- PR 里说明场景 + suggestion 写法