fix(welcome): gate Claude and Opencode buttons on CLI availability too

Extends the Gemini gating from bb7fb9e to the other welcome-screen
buttons that had the same problem: shown unconditionally even when the
underlying CLI isn't installed.

- Add isClaudeAvailable() (claude-cli-resolver.ts) and GET
  /api/claude/status, mirroring the existing opencode/codex/gemini
  resolvers and status endpoints.
- Opencode already had a working /api/opencode/status the welcome
  screen just wasn't checking; wire it up the same way.
- Refactor loadGeminiAvailability() into a shared
  _loadCliAvailability(buttonId, statusUrl) helper instead of
  duplicating the fetch/try-catch three times.

Run-mode dropdown entries (Opencode/Codex) are intentionally left
unconditional here — follow-up PR.
This commit is contained in:
timkjr
2026-08-04 16:22:21 -05:00
parent 62008fb408
commit 3ea1ea28f0
5 changed files with 38 additions and 5 deletions
+2
View File
@@ -1195,6 +1195,8 @@ Object.assign(CodemanApp.prototype, {
if (overlay) {
overlay.classList.add('visible');
this.loadTunnelStatus();
this.loadClaudeAvailability();
this.loadOpencodeAvailability();
this.loadGeminiAvailability();
this.loadHistorySessions();
this.initSearchPanel();