Class: EasyAI::Command::Claude
- Inherits:
-
AIToolBase
- Object
- Command
- AIToolBase
- EasyAI::Command::Claude
- Defined in:
- lib/easyai/command/claude.rb
Constant Summary collapse
- DEFAULT_ENV =
Claude Code 默认禁用遥测与非必要流量;用户可在 config.json 的 env 中显式覆盖
{ 'DISABLE_TELEMETRY' => '1', 'CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC' => '1' }.freeze
Constants inherited from AIToolBase
AIToolBase::PROTECTED_ENV_KEYS
Instance Method Summary collapse
- #default_env ⇒ Object
- #exec_command ⇒ Object
- #install_hint ⇒ Object
-
#pre_exec ⇒ Object
启动 claude 之前把 Claude Code 状态强制对齐到"纯 token 模式",避免 OAuth 残留影响: 1.
- #tool_name ⇒ Object
Methods inherited from AIToolBase
#extra_platforms, #initialize, options, #run, #validate!
Constructor Details
This class inherits a constructor from EasyAI::Command::AIToolBase
Instance Method Details
#default_env ⇒ Object
47 48 49 |
# File 'lib/easyai/command/claude.rb', line 47 def default_env DEFAULT_ENV end |
#exec_command ⇒ Object
39 40 41 |
# File 'lib/easyai/command/claude.rb', line 39 def exec_command 'claude' end |
#install_hint ⇒ Object
43 44 45 |
# File 'lib/easyai/command/claude.rb', line 43 def install_hint '未找到 claude CLI。请安装:npm install -g @anthropic-ai/claude-code' end |
#pre_exec ⇒ Object
启动 claude 之前把 Claude Code 状态强制对齐到"纯 token 模式",避免 OAuth 残留影响:
- ~/.claude.json: hasCompletedOnboarding=true(跳过 onboarding)
- ~/.claude.json: 删除 oauthAccount 字段(OAuth 账户元数据残留)
- macOS Keychain: 删除 "Claude Code-credentials" 条目(OAuth token 残留) 三步全部幂等:已是目标状态则不操作;任意 IO/JSON/Keychain 异常降级为 warning,不阻塞 exec。
副作用提醒:如果用户直接跑 claude(不通过 easyai)走过 OAuth 登录,下一次跑 easyai claude
会清掉 OAuth 状态。EasyAI 设计前提是统一走 ANTHROPIC_AUTH_TOKEN 环境变量路径,OAuth 登录
态由 easyai backup claude / easyai restore claude 显式管理。
60 61 62 63 64 65 |
# File 'lib/easyai/command/claude.rb', line 60 def pre_exec # 方案 A:清理 OAuth 残留前先兜底备份,确保首次运行可恢复(仅当备份缺失时触发) Backup::Claude.new(CLAide::ARGV.new([])).backup_if_absent reset_claude_state_to_token_mode delete_keychain_credential(KEYCHAIN_LABEL) end |
#tool_name ⇒ Object
35 36 37 |
# File 'lib/easyai/command/claude.rb', line 35 def tool_name 'claude' end |