Class: EasyAI::Command::Claude

Inherits:
AIToolBase
  • Object
show all
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

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_envObject



47
48
49
# File 'lib/easyai/command/claude.rb', line 47

def default_env
  DEFAULT_ENV
end

#exec_commandObject



39
40
41
# File 'lib/easyai/command/claude.rb', line 39

def exec_command
  'claude'
end

#install_hintObject



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_execObject

启动 claude 之前把 Claude Code 状态强制对齐到"纯 token 模式",避免 OAuth 残留影响:

  1. ~/.claude.json: hasCompletedOnboarding=true(跳过 onboarding)
  2. ~/.claude.json: 删除 oauthAccount 字段(OAuth 账户元数据残留)
  3. 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_nameObject



35
36
37
# File 'lib/easyai/command/claude.rb', line 35

def tool_name
  'claude'
end