Coverage for agentos/cli/errors.py: 17%
109 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-02 09:59 +0800
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-02 09:59 +0800
1"""
2AgentOS CLI — 友好错误提示。
4所有面向用户的错误信息统一由本模块生成,
5确保错误可读、有引导、有修复建议。
6"""
8from __future__ import annotations
10import os
11import sys
14def _dim(text: str) -> str:
15 """终端灰色文字。"""
16 return f"\033[2m{text}\033[0m"
19def _bold(text: str) -> str:
20 return f"\033[1m{text}\033[0m"
23def _yellow(text: str) -> str:
24 return f"\033[33m{text}\033[0m"
27def _red(text: str) -> str:
28 return f"\033[31m{text}\033[0m"
31def _green(text: str) -> str:
32 return f"\033[32m{text}\033[0m"
35def _cyan(text: str) -> str:
36 return f"\033[36m{text}\033[0m"
39# ── 错误场景定义 ──────────────────────────────────────────
42def no_provider_configured():
43 """当没有任何 LLM Provider 配置 API Key 时。"""
44 print()
45 print(f" {_red('✗')} {_bold('未检测到 LLM API Key')}")
46 print()
47 print(f" AgentOS 需要至少一个 LLM 服务商的 API Key 才能运行。")
48 print()
49 print(f" 支持的服务商:")
50 print(f" {_cyan('OpenAI')} — gpt-4o-mini / gpt-4o / o3-mini")
51 print(f" {_cyan('DeepSeek')} — deepseek-chat / deepseek-reasoner")
52 print(f" {_cyan('Anthropic')}— claude-sonnet-4 / claude-opus-4")
53 print()
54 print(f" {_bold('快速配置(推荐):')}")
55 print(f" {_green('$ agentos init')}")
56 print()
57 print(f" 或手动设置环境变量:")
58 print(f" export OPENAI_API_KEY=sk-xxx")
59 print()
60 sys.exit(1)
63def single_provider_failed(provider_name: str, error: str = ""):
64 """单一 Provider API 调用失败。"""
65 print()
66 print(f" {_red('✗')} {_bold(provider_name)} API 调用失败")
67 if error:
68 print(f" {_dim(error)}")
69 print()
70 print(f" 常见原因:")
71 print(f" 1. API Key 过期或无效 → 运行 {_green('agentos init')} 重新配置")
72 print(f" 2. 网络不通 → 检查代理/防火墙设置")
73 print(f" 3. 余额不足 → 检查服务商账户余额")
74 print()
75 print(f" 或切换到其他 Provider:")
76 print(f" export OPENAI_API_KEY=sk-xxx # 备用")
77 print()
78 sys.exit(1)
81def all_providers_failed(failures: list[tuple[str, str]]):
82 """所有已配置 Provider 都调用失败。"""
83 print()
84 print(f" {_red('✗')} {_bold('所有已配置的 LLM 服务商均调用失败')}")
85 print()
86 print(f" 失败列表:")
87 for name, err in failures:
88 print(f" - {_yellow(name)}: {_dim(err)}")
89 print()
90 print(f" 建议:")
91 print(f" 1. 运行 {_green('agentos init')} 重新配置 API Key")
92 print(f" 2. 检查网络连接和代理设置")
93 print(f" 3. 检查各服务商账户余额")
94 print()
95 sys.exit(1)
98def no_task_provided():
99 """没有提供任务描述。"""
100 print()
101 print(f" {_yellow('!')} 请提供任务描述。")
102 print()
103 print(f" 用法:")
104 print(f" {_green('agentos run')} \"列出当前目录的文件\"")
105 print(f" {_green('agentos')} \"写一个 Python 脚本用于...\"")
106 print()
107 print(f" 更多帮助:")
108 print(f" {_green('agentos --help')}")
109 print(f" {_green('agentos demo')} # 运行天气演示")
110 print(f" {_green('agentos hello')} # 一分钟快速体验")
111 print()
112 sys.exit(1)
115def feature_disabled(feature: str, mode: str = "当前运行模式"):
116 """功能在当前模式下不可用。"""
117 print()
118 print(f" {_yellow('!')} {_bold(feature)} 在{mode}下暂不可用")
119 print()
120 print(f" 如需完整功能,请在桌面端运行 AgentOS。")
121 print()
124def import_error(module: str):
125 """依赖缺失。"""
126 print()
127 print(f" {_red('✗')} 缺少依赖:{_bold(module)}")
128 print()
129 print(f" 修复:pip install nexus-agentos[{module}]")
130 print(f" 或:pip install nexus-agentos[all]")
131 print()
134def config_error(message: str):
135 """配置格式错误。"""
136 print()
137 print(f" {_red('✗')} 配置错误")
138 print(f" {_dim(message)}")
139 print()
140 print(f" 运行 {_green('agentos init')} 可自动修复配置。")
141 print()
142 sys.exit(1)
145def tool_execution_failed(tool_name: str, error: str):
146 """工具执行失败。"""
147 print()
148 print(f" {_yellow('!')} 工具 {_yellow(tool_name)} 执行失败")
149 print(f" {_dim(error)}")
150 print()
153def welcome():
154 """打印欢迎信息。"""
155 from agentos import __version__
156 print(f" {_cyan('Nexus AgentOS')} v{__version__}")
157 if os.environ.get("OPENAI_API_KEY") or os.environ.get("DEEPSEEK_API_KEY"):
158 print(f" {_green('●')} 已配置 API Key,可以直接使用。")
159 else:
160 print(f" {_yellow('●')} 尚未配置 API Key,运行 agentos init 开始配置。")
161 print()