Repository navigation
Proxima v1.4.0
What's changed
Added
- Update check on startup (
lib/core/update_checker.dart) — checks GitHub for a newer release at most once per 24 hours, in a fire-and-forget background fetch that never blocks startup and swallows every failure. When an update exists the notice offers the install command, skip-this-version (remembered in~/.proxima/update_check.json, and a later release is still announced), or remind-me-later. Proxima never installs anything itself — it has filesystem and shell access, so self-replacing its binary would make a compromised release channel equivalent to remote code execution; the user is given the command to run. Disable withcheck_for_updates: false; source builds (dev) never check. Version comparison is numeric, so1.10.0correctly beats1.9.0. The notice appears at the first prompt rather than before the header — the check is deliberately not awaited at startup, so consuming it there would read a still-pending result and drop the notice under any real network latency - Shared ignore matcher (
lib/tools/ignore_matcher.dart) —list_files,glob,search,search_symbol, andfind_referencesnow all skip the same paths: built-in defaults (VCS, dependency, build directories, generated Dart files), the working directory's.gitignore, and session patterns from/ignore. Previously there were three inconsistent skip lists — two byte-identical copies in the search tools, a different set inproject_index, and none at all inlist_files,glob, orsearch, sosearchwalkednode_modulesandlist_filesrecursed into.git. Full gitignore syntax is supported including negation (!keep.log), anchoring (/build.sh), directory-only rules (cache/), and**. All five walkers consult it for both files and directories, using working-directory-relative paths so path-qualified rules (vendor/lib/) and file rules (lib/excluded.dart) match — a basename alone cannot. The matcher lives onToolRegistryand is injected as a callback, leaving theProximaTool.executecontract — which plugins implement — unchanged; the agent loop refreshes it each turn so.gitignoreedits and/dirswitches apply without a restart. Clears the last unticked box in SPECS §18 /ignore <pattern>is now enforced — it previously stored and displayed patterns that no tool ever read, despite the README claiming it excluded them from context- Tests for
list_files(11) and the ignore matcher (20), covering gitignore precedence, negation ordering,**semantics, and Windows separators - Tests for the four previously untested tools —
patch_file(12: first-vs-all replacement, backup creation, theBACKUP_PATH:marker/undodepends on, no-write-on-failure),glob(8),search(9), andrun_command(11, including that a blocked command is never executed). SPECS §18 previously ticked these with a "works; no dedicated test file" caveat; every box is now backed by tests
Fixed
-
run_commandandrun_testswere broken on Windows — both hardcodedbash, which on Windows resolves to the WSL launcher; with no distribution installed it returns UTF-16 help text and exit code 1, so every shell command failed in the shippedproxima-windows-x64.exe. Both now usecmd /con Windows andbash -celsewhere, via a single sharedRunCommandTool.shellExecutable/shellArgs -
Timed-out commands are now killed, not orphaned —
run_commandandrun_testsusedProcess.run(...).timeout(...), which abandons the Future but leaves the child process running: a command Proxima reported as timed out kept executing invisibly, which is unacceptable for a tool behind a permission gate. Verified — asleep 2"timed out" at 1s still completed its work 3s later. Both tools now useProcess.startand kill the process on timeout. On Windows the whole tree is killed withtaskkill /T:cmd /c <command>launches the command as a separate process, so killing the shell alone left it running — holding the working directory open and continuing work the user was told had stopped. On POSIXbash -cexecs into the command, so killing the shell suffices -
globmatched nothing on Windows — glob patterns are written with forward slashes but the tool matched them against native separators, so**/*.dartcould never matchlib\nested.dart. Paths are now normalised to forward slashes for both matching and output, so results are consistent across platforms -
Transport errors surface as actionable messages (
lib/providers/transport.dart) —OllamaProviderandAnthropicProviderlet rawClientException/SocketExceptionescape, so a stopped Ollama produced six lines of socket dump instead of the message SPECS §22 promises. All three providers now route HTTP through one shared helper: a refused connection to Ollama readsOllama not detected at <url>. Run: ollama serve, and cloud providers report the unreachable host. Because these are nowLLMError(network), a configuredfallback_modelis finally tried for Ollama and Anthropic too -
Unreachable servers are no longer retried —
agent_loopretried a refused connection up tomaxRetriesLlmtimes and the stream path re-issued each failure viacomplete(), producing six lines for one problem. A server that cannot be reached now reports once and stops -
Per-model parameter support is discovered rather than predicted — the provider guessed from model names which models reject an explicit
temperature, and was wrong repeatedly (gpt-5rejects it,gpt-5.1accepts it). It now sends the request and, on a 400 naming an unsupported parameter, drops that field and retries once. The same mechanism setsreasoning_effort: nonewhen a model refuses function tools while reasoning is active (gpt-5.6-luna,gpt-5.6-sol) -
/modelpicker lists only usable models —babbage-002,davinci-002,gpt-3.5-turbo-instruct, the barechat-latestalias, and all*-codexmodels are excluded; codex models are deprecated or served only by/v1/responsesand 404 on chat. Models are ordered so current families (gpt-5*,gpt-4.1*,o*,gpt-4o*) appear before deprecated ones instead of alphabetically, which previously buriedgpt-4ounder a dozengpt-3.5-turbo-*variants
Installation
macOS / Linux — install script
curl -fsSL https://raw.githubusercontent.com/jizzel/proxima/main/install.sh | shmacOS (Apple Silicon + Intel via Rosetta 2)
curl -fsSL https://github.com/jizzel/proxima/releases/download/v1.4.0/proxima-macos-arm64 \
-o /usr/local/bin/proxima && chmod +x /usr/local/bin/proximaLinux (x86_64)
curl -fsSL https://github.com/jizzel/proxima/releases/download/v1.4.0/proxima-linux-x64 \
-o /usr/local/bin/proxima && chmod +x /usr/local/bin/proximaWindows (x86_64) — PowerShell
irm https://raw.githubusercontent.com/jizzel/proxima/main/install.ps1 | iexOr download proxima-windows-x64.exe below and add it to a directory on your PATH.