hermes-agent/hermes_cli
teknium1 4068f20ce9 fix(anthropic): deep scan fixes — auth, retries, edge cases
Fixes from comprehensive code review and cross-referencing with
clawdbot/OpenCode implementations:

CRITICAL:
- Add one-shot guard (anthropic_auth_retry_attempted) to prevent
  infinite 401 retry loops when credentials keep changing
- Fix _is_oauth_token(): managed keys from ~/.claude.json are NOT
  regular API keys (don't start with sk-ant-api). Inverted the logic:
  only sk-ant-api* is treated as API key auth, everything else uses
  Bearer auth + oauth beta headers

HIGH:
- Wrap json.loads(args) in try/except in message conversion — malformed
  tool_call arguments no longer crash the entire conversation
- Raise AuthError in runtime_provider when no Anthropic token found
  (was silently passing empty string, causing confusing API errors)
- Remove broken _try_anthropic() from auxiliary vision chain — the
  centralized router creates an OpenAI client for api_key providers
  which doesn't work with Anthropic's Messages API

MEDIUM:
- Handle empty assistant message content — Anthropic rejects empty
  content blocks, now inserts '(empty)' placeholder
- Fix setup.py existing_key logic — set to 'KEEP' sentinel instead
  of None to prevent falling through to the auth choice prompt
- Add debug logging to _fetch_anthropic_models on failure

Tests: 43 adapter tests (2 new for token detection), 3197 total passed
2026-03-12 17:14:22 -07:00
..
__init__.py chore: bump version to v0.2.0 + add curated first-release changelog 2026-03-12 01:52:53 -07:00
auth.py feat: native Anthropic provider with Claude Code credential auto-discovery 2026-03-12 15:47:45 -07:00
banner.py feat: add versioning infrastructure and release script 2026-03-12 01:35:47 -07:00
callbacks.py feat: add 'View full command' option to dangerous command approval (#887) 2026-03-12 06:27:21 -07:00
checklist.py fix: skip hanging tests + add global test timeout 2026-03-12 01:23:28 -07:00
clipboard.py fix: clean up empty file after failed wl-paste clipboard extraction 2026-03-11 02:56:19 -07:00
codex_models.py fix: unify visibility filter in codex model discovery 2026-03-10 15:15:33 +03:00
colors.py Cleanup time! 2026-02-20 23:23:32 -08:00
commands.py feat(cli): add /reasoning command for effort level and display toggle 2026-03-11 06:02:18 -07:00
config.py merge: resolve conflicts with origin/main 2026-03-12 00:29:04 -07:00
cron.py refactor: streamline cron job handling and update CLI commands 2026-02-21 16:21:19 -08:00
curses_ui.py refactor: extract shared curses checklist, fix skill discovery perf 2026-03-11 03:06:15 -07:00
doctor.py fix(doctor): skip /models health check for MiniMax providers 2026-03-11 08:29:35 -07:00
gateway.py feat: add email gateway platform (IMAP/SMTP) 2026-03-11 06:32:01 -07:00
main.py fix(anthropic): improve auth UX with clear setup-token vs API key choice 2026-03-12 16:28:00 -07:00
models.py fix(anthropic): deep scan fixes — auth, retries, edge cases 2026-03-12 17:14:22 -07:00
pairing.py Cleanup time! 2026-02-20 23:23:32 -08:00
runtime_provider.py fix(anthropic): deep scan fixes — auth, retries, edge cases 2026-03-12 17:14:22 -07:00
setup.py fix(anthropic): deep scan fixes — auth, retries, edge cases 2026-03-12 17:14:22 -07:00
skills_config.py fix: wire email platform into toolset mappings + add documentation 2026-03-11 06:34:32 -07:00
skills_hub.py chore(skills): clean up PR #862 — simplify manifest guard, DRY up tests 2026-03-12 08:08:22 -07:00
skin_engine.py fix: add themed hero art for all skins, fix triple-quote syntax 2026-03-10 03:54:12 -07:00
status.py feat: add email gateway platform (IMAP/SMTP) 2026-03-11 06:32:01 -07:00
tools_config.py fix: wire email platform into toolset mappings + add documentation 2026-03-11 06:34:32 -07:00
uninstall.py Cleanup time! 2026-02-20 23:23:32 -08:00