User hit two bugs in production:
1. uclaude_install.sh ERROR: Command failed at line 82 — gitea returned
transient HTTP 502 to `git fetch`, `2>/dev/null` masked stderr but
ERR trap fired with cryptic message.
2. After install, claude model picker showed only 5 models (built-in
defaults) instead of 19. Root cause: load_config() fell back to the
PUBLIC sanitized patcher.config.json (api_key='YOUR_API_KEY') after
remote fetch failed → claude API auth broken → custom models invisible.
Fixes:
claude/uclaude_install.sh:
- New retry_git() helper: 3 attempts, 5s backoff, loud diagnostic
- Existing-clone branch: retry_git wraps `git fetch` AND `git reset`
- Fallback: if fetch fails 3x on existing clone, nuke and re-clone fresh
(incremental fetch breaks more often than full clone on flaky gitea)
- Secondary fetch (before updater): tolerates failure with `|| true`
(we already have a working clone)
claude/uclaude_updater.py:
- _config_is_usable() guard: rejects {"api_key": "YOUR_API_KEY"} etc.
- load_config() retries remote 3x with backoff before falling back
- Removed local-file fallback (was loading public sanitized = bait)
- Cache-only fallback now (from previous successful fetch)
Public configs synced from canonical (api_key sanitized, models list
fully refreshed):
- claude/patcher.config.json: 17 → 19 models (+gpt-5.5, +gemini-3.1-pro etc)
- codex/codex_config.json: 4 → 5 models (+gpt-5.5)
- gemini/gemini_config.json: refreshed
- target_version: 2.1.112 → 2.1.119
Tests: tests/test_installer_robustness.py — 6 new GREEN guards.
Total: 196 → 207 GREEN.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
34 lines
943 B
JSON
Executable File
34 lines
943 B
JSON
Executable File
{
|
|
"base_url": "https://ai.37-187-136-86.sslip.io",
|
|
"api_key": "YOUR_API_KEY",
|
|
"model": "claude-opus-4-7",
|
|
"models": [
|
|
"claude-opus-4-7",
|
|
"claude-opus-4-6",
|
|
"claude-sonnet-4-6",
|
|
"claude-haiku-4-5-20251001",
|
|
"claude-opus-4-5-20251101",
|
|
"claude-sonnet-4-5-20250929",
|
|
"gpt-5.5",
|
|
"gpt-5.4",
|
|
"gpt-5.4-mini",
|
|
"gpt-5.3-codex",
|
|
"gemini-3.1-pro",
|
|
"gemini-3.1-pro-preview",
|
|
"gemini-3.1-pro-preview-customtools",
|
|
"gemini-3-flash",
|
|
"gemini-3-flash-preview",
|
|
"gemini-2.5-flash",
|
|
"glm-5.1",
|
|
"glm-5",
|
|
"glm-4.7"
|
|
],
|
|
"default_sonnet_model": "claude-sonnet-4-6",
|
|
"default_opus_model": "claude-opus-4-7",
|
|
"timeout_ms": 3000000,
|
|
"theme": "dark",
|
|
"complete_onboarding": true,
|
|
"target_version": "2.1.119",
|
|
"effort_level": "high",
|
|
"_note": "Production api_key lives in PRIVATE unlimitedcoding-config repo. uclaude_updater.py fetches it at runtime with token auth."
|
|
} |