diff --git a/claude/releases/index.json b/claude/releases/index.json index 94819ce..68a3f66 100755 --- a/claude/releases/index.json +++ b/claude/releases/index.json @@ -1,6 +1,13 @@ { - "latest": "2.1.119", + "latest": "2.1.120", "releases": [ + { + "version": "2.1.120", + "date": "2026-04-26", + "patches": 9, + "status": "stable", + "install_type": "sea_binary" + }, { "version": "2.1.119", "date": "2026-04-24", diff --git a/claude/uclaude_install.sh b/claude/uclaude_install.sh index 017ec3a..2d43fda 100755 --- a/claude/uclaude_install.sh +++ b/claude/uclaude_install.sh @@ -216,14 +216,21 @@ if [ -n "$CLAUDE_BIN" ] && [ -f "$CLAUDE_BIN" ]; then fi ;; claude.exe|claude) - # SEA binary — grep -a treats binary as text + # SEA binary — grep -a treats binary as text. Three required + # markers that gate user-visible features: + # ae1: /model picker shows custom models from availableModels + # ae2: picker accepts non-"anthropic.*"-prefixed models + # ae3: Agent.model accepts gpt-5.5/glm-5.1 (not just sonnet/opus/haiku) sea_ok=true - grep -aq '/\*ae1_models_filter_patched' "$CLAUDE_BIN" 2>/dev/null || sea_ok=false - grep -aq '/\*bypass_permissions_prompt' "$CLAUDE_BIN" 2>/dev/null || sea_ok=false + missing="" + grep -aq '/\*ae1_models_filter_patched' "$CLAUDE_BIN" 2>/dev/null || { sea_ok=false; missing="$missing ae1"; } + grep -aq '/\*ae2_anthropic_unfilter' "$CLAUDE_BIN" 2>/dev/null || { sea_ok=false; missing="$missing ae2"; } + grep -aq '/\*ae3_subagent_model' "$CLAUDE_BIN" 2>/dev/null || { sea_ok=false; missing="$missing ae3"; } + grep -aq '/\*bypass_permissions_prompt' "$CLAUDE_BIN" 2>/dev/null || { sea_ok=false; missing="$missing bypass"; } if $sea_ok; then - echo " SEA binary: OK (ae1_models_filter + bypass_permissions markers)" + echo " SEA binary: OK (ae1 + ae2 + ae3 + bypass_permissions markers)" else - echo " SEA binary: ⚠ NOT fully patched ($CLAUDE_BIN — re-run uclaude_updater.py --force)" + echo " SEA binary: ⚠ NOT fully patched (missing:$missing) — re-run uclaude_updater.py --force" fi ;; *)