Class: EasyAI::Command::Setup
- Inherits:
-
Command
- Object
- Command
- EasyAI::Command::Setup
- Defined in:
- lib/easyai/command/setup.rb
Overview
交互式本地配置生成器
子命令矩阵: easyai setup # 全量交互(首次)/ 选择菜单 upsert(已存在) easyai setup --tool=claude # 仅配置指定工具 easyai setup --add=kimi --tool=claude # 追加 / 覆盖单平台 easyai setup --remove=kimi --tool=claude # 删除单平台 easyai setup --list # 脱敏概览 easyai setup --reset # 删除现有 config 后重走交互 easyai setup --edit # 用 $EDITOR 直接编辑 config.json
Constant Summary collapse
- KNOWN_PLATFORMS =
仅 setup 内含的硬编码平台清单;runtime(AIToolBase)不读取此常量
{ 'claude' => { 'claude_official' => { label: 'Claude 官方', required_env: %w[ANTHROPIC_AUTH_TOKEN], fixed_env: { 'ANTHROPIC_BASE_URL' => 'https://api.anthropic.com' } }, 'kimi' => { label: 'Kimi(Moonshot)', required_env: %w[ANTHROPIC_AUTH_TOKEN], fixed_env: { 'ANTHROPIC_BASE_URL' => 'https://api.kimi.com/coding/' } }, 'deepseek' => { label: 'DeepSeek', required_env: %w[ANTHROPIC_AUTH_TOKEN], fixed_env: { 'ANTHROPIC_BASE_URL' => 'https://api.deepseek.com/anthropic', 'ANTHROPIC_MODEL' => 'deepseek-v4-pro[1m]', 'ANTHROPIC_DEFAULT_OPUS_MODEL' => 'deepseek-v4-pro[1m]', 'ANTHROPIC_DEFAULT_SONNET_MODEL' => 'deepseek-v4-pro[1m]', 'ANTHROPIC_DEFAULT_HAIKU_MODEL' => 'deepseek-v4-flash', 'CLAUDE_CODE_SUBAGENT_MODEL' => 'deepseek-v4-flash', 'CLAUDE_CODE_EFFORT_LEVEL' => 'max' } }, 'aliqwen' => { label: '阿里千问 Coding Plan(兼容 Anthropic 协议)', required_env: %w[ANTHROPIC_AUTH_TOKEN], fixed_env: { 'ANTHROPIC_BASE_URL' => 'https://coding.dashscope.aliyuncs.com/apps/anthropic', 'ANTHROPIC_MODEL' => 'qwen3.6-plus', 'ANTHROPIC_DEFAULT_OPUS_MODEL' => 'qwen3.6-plus', 'ANTHROPIC_DEFAULT_SONNET_MODEL' => 'qwen3.6-plus', 'ANTHROPIC_DEFAULT_HAIKU_MODEL' => 'qwen3.6-plus', 'ANTHROPIC_SMALL_FAST_MODEL' => 'qwen3.6-plus', 'CLAUDE_CODE_SUBAGENT_MODEL' => 'qwen3.6-plus', 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' => '1' } }, 'minimax' => { label: 'MiniMax(兼容 Anthropic 协议)', required_env: %w[ANTHROPIC_AUTH_TOKEN], fixed_env: { 'ANTHROPIC_BASE_URL' => 'https://api.minimaxi.com/anthropic', 'ANTHROPIC_MODEL' => 'MiniMax-M2.7-highspeed', 'ANTHROPIC_DEFAULT_SONNET_MODEL' => 'MiniMax-M2.7-highspeed', 'ANTHROPIC_DEFAULT_HAIKU_MODEL' => 'MiniMax-M2.7-highspeed', 'ANTHROPIC_DEFAULT_OPUS_MODEL' => 'MiniMax-M2.7-highspeed' } }, 'glm' => { label: 'GLM Coding Plan(bigmodel.cn)', required_env: %w[ANTHROPIC_AUTH_TOKEN], fixed_env: { 'ANTHROPIC_BASE_URL' => 'https://open.bigmodel.cn/api/anthropic', 'API_TIMEOUT_MS' => '3000000', 'CLAUDE_CODE_AUTO_COMPACT_WINDOW' => '1000000', 'ANTHROPIC_DEFAULT_OPUS_MODEL' => 'glm-5.2[1m]', 'ANTHROPIC_DEFAULT_SONNET_MODEL' => 'glm-5.2[1m]', 'ANTHROPIC_DEFAULT_HAIKU_MODEL' => 'glm-4.7' } }, 'longcat' => { label: 'LongCat(美团,兼容 Anthropic 协议)', required_env: %w[ANTHROPIC_AUTH_TOKEN], fixed_env: { 'ANTHROPIC_BASE_URL' => 'https://api.longcat.chat/anthropic', 'ANTHROPIC_MODEL' => 'LongCat-2.0', 'ANTHROPIC_SMALL_FAST_MODEL' => 'LongCat-2.0', 'ANTHROPIC_DEFAULT_SONNET_MODEL' => 'LongCat-2.0', 'ANTHROPIC_DEFAULT_OPUS_MODEL' => 'LongCat-2.0', 'CLAUDE_CODE_MAX_OUTPUT_TOKENS' => '131072', 'CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC' => '1' } } }, 'codex' => { 'openai_official' => { label: 'ChatGPT Subscribe(使用 ChatGPT 订阅账户授权信息)', # 不录入 API Key:直接复用 ~/.codex 的 ChatGPT OAuth 登录态, # 配置动作 = 等同 easyai backup codex(仅当存在官方 token 时更新备份) chatgpt_subscribe: true }, 'deepseek' => { label: 'DeepSeek(兼容 OpenAI 协议,codex 自动写 responses provider profile)', required_env: %w[OPENAI_API_KEY], fixed_env: { 'OPENAI_BASE_URL' => 'https://api.deepseek.com/v1' } }, 'longcat' => { label: 'LongCat(美团,兼容 OpenAI 协议)', required_env: %w[OPENAI_API_KEY], fixed_env: { 'OPENAI_BASE_URL' => 'https://api.longcat.chat/openai/v1' } } } }.freeze
- SENSITIVE_KEY_PATTERN =
敏感字段脱敏统一走 Base::SecretMasker,保留常量别名仅用于历史兼容
Base::SecretMasker::SENSITIVE_KEY_PATTERN
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(argv) ⇒ Setup
constructor
A new instance of Setup.
- #run ⇒ Object
Constructor Details
#initialize(argv) ⇒ Setup
Returns a new instance of Setup.
158 159 160 161 162 163 164 165 166 |
# File 'lib/easyai/command/setup.rb', line 158 def initialize(argv) @tool = argv.option('tool') @add = argv.option('add') @remove = argv.option('remove') @list = argv.flag?('list') @reset = argv.flag?('reset') @edit = argv.flag?('edit') super end |
Class Method Details
.options ⇒ Object
147 148 149 150 151 152 153 154 155 156 |
# File 'lib/easyai/command/setup.rb', line 147 def self. [ ['--tool=NAME', '指定要配置的工具(claude / codex)'], ['--add=PLATFORM', '在指定工具下追加或覆盖单个平台'], ['--remove=PLATFORM', '在指定工具下删除单个平台'], ['--list', '脱敏方式展示当前所有配置'], ['--reset', '删除现有 config.json 后重走全量交互'], ['--edit', '使用 $EDITOR / $VISUAL 直接编辑 config.json'] ].concat(super) end |
Instance Method Details
#run ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/easyai/command/setup.rb', line 168 def run return run_list if @list return run_remove if @remove return run_add if @add return run_reset if @reset return run_edit if @edit run_full_interactive rescue Config::LocalConfig::ParseError, Config::LocalConfig::IncompatibleVersionError => e print_error(e.) puts " 可运行: #{'easyai setup --reset'.yellow} 重新生成配置" exit 1 rescue Interrupt puts print_error('用户取消操作') exit 130 end |