Skip to content

Proxima v1.7.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 20:20
· 3 commits to main since this release

What's changed

Fixed

  • The /model picker corrupted the terminal — it redrew by moving the cursor up by the full list length, so once that exceeded the terminal height the cursor could not reach the top and every arrow keypress appended another copy of the list. With ~90 models the picker filled the scrollback with dozens of duplicates. It now renders a scrolling window sized to the terminal, with a … n more · i/total position hint, and clears exactly what it drew
  • Video-generation models offered in the picker — sora-2 and sora-2-pro appeared in /model but cannot serve /v1/chat/completions, so selecting one failed on first use
  • Model discovery failed silently — every failure path flattened to an empty list: a non-200 returned [], any exception returned [], and the caller added another catchError. An invalid API key, an unreachable host, and a provider that legitimately serves nothing were indistinguishable, so /model showed three Anthropic entries with no hint that OpenAI had returned a 401. Providers now expose discoverModels(), which keeps the reason, and the picker prints it — ⚠ OpenAI: invalid API key (401), ⚠ Ollama: Ollama not detected at …. Run: ollama serve. listModels() is unchanged, so nothing else had to move
  • The active model could be missing from its own picker — the list held only what discovery returned, so when a provider's discovery failed the running model was absent and could not be re-selected after switching away. It is now always included and marked
  • The autocomplete panel left a copy in the scrollback on every keystroke — it drew a separator and suggestion rows below the prompt with real newlines, then restored the cursor with \x1b[s / \x1b[u. Near the bottom of the terminal those newlines scroll the screen, and a cursor restore cannot undo a scroll, so the saved position was stale and each repaint appended another separator and row — the input area walked down the screen as you typed. Replaced with inline completion: the candidate's untyped remainder is shown as dim text after the cursor on the prompt's own line, with a (2/6 · tab) counter when several match. Nothing is ever written below the prompt, so the scroll cannot happen — verified on a PTY at the bottom edge of both a 40-row and a 10-row terminal, where typing now emits zero newlines against the previous 14. Tab accepts the shown completion and cycles on a second press; Enter submits and the arrow keys mean history, since there is no longer a list to highlight
  • A terminal resize while the /model picker was open corrupted the display — each redraw recomputed the window from the current height while the cursor still sat below rows drawn at the previous one, so growing the terminal moved the redraw above the old list and shrinking it left stale rows behind; the Enter/Escape cleanup recalculated the same way. The picker now tracks the rows it actually drew and moves and clears by that
  • The picker overflowed short terminals — the window had a fixed six-row floor, so a six-row terminal or a split pane was drawn eight rows tall, recreating the redraw corruption the scrolling window was added to fix. The window is now derived from the actual height, and below three rows — too short for a header, one row, and the hint — the picker prints the plain list instead. The regression test that missed this restated the formula instead of calling it, and asserted a bound two rows looser than the real one, so it could not fail; it now calls the function and checks every height

Changed

  • The /model picker lists current models instead of the whole catalogue — OpenAI returns every generation ever shipped (69 chat-capable ids, 29 of them dated snapshots identical to the alias they duplicate), which made choosing a model a scrolling exercise. The picker now drops dated snapshots and keeps the three newest versions per family, taking it from 72 entries to 17 — one screen, no scrolling. Discovery is unchanged and still live: a new release appears with no code change. Nothing became unreachable — --model openai/gpt-4o, openai_model in config, /model <id>, and tab completion all still accept any id the endpoint serves. Anthropic's static list and Ollama's locally-pulled tags are already short and are not curated. Two rules keep curation from hiding working models: versions rank within a family rather than across the catalogue (a single ordering compared llama-3.3 against gpt-5.4 and dropped most of a proxy endpoint's catalogue), and an id with no parseable version is kept rather than dropped (o3 and o4-mini are current reasoning models, not old generations)


Installation

macOS / Linux — install script

curl -fsSL https://raw.githubusercontent.com/jizzel/proxima/main/install.sh | sh

macOS (Apple Silicon + Intel via Rosetta 2)

curl -fsSL https://github.com/jizzel/proxima/releases/download/v1.7.0/proxima-macos-arm64 \
  -o /usr/local/bin/proxima && chmod +x /usr/local/bin/proxima

Linux (x86_64)

curl -fsSL https://github.com/jizzel/proxima/releases/download/v1.7.0/proxima-linux-x64 \
  -o /usr/local/bin/proxima && chmod +x /usr/local/bin/proxima

Windows (x86_64) — PowerShell

irm https://raw.githubusercontent.com/jizzel/proxima/main/install.ps1 | iex

Or download proxima-windows-x64.exe below and add it to a directory on your PATH.