Repository navigation
Proxima v1.2.0
What's changed
Added
Agent Loop — Spinning Detection
StuckDetector.isSpinning(toolLog, {int window = 6})— second stuck-detection mechanism that fires when the lastwindowcalls are all read-only tools (read_file,list_files,glob,search,search_symbol,find_references,get_imports,git_status,git_diff,git_log). Catches models that loop on reads without ever writing — not caught by the identical-call detector.StuckDetector.spinWindow = 6— public constant exposed for callers that need to slice the log for display.AgentCallbacks.onStuckgainsreasonparameter ('stuck'|'spinning', default'stuck') — lets the renderer show a tailored message for each case; existing callers unaffected.TaskSummaryRenderer.renderStuckdifferentiated message — spinning shows "Agent is reading without making progress — last N calls were all read-only"; stuck shows the existing "Repeated tool calls detected" message.
Improved
plugin_loader.dart— fully async I/O —_loadOneconverted from sync toasync;existsSync→exists,readAsStringSync→readAsString,statSync→stat,list().toList()→await for; prevents blocking the Dart event loop during plugin discovery at startup.find_references_tool.dart— streaming directory walk —_walknow usesawait forinstead ofdir.list().toList(); processes entries one at a time and exits early whenmax_resultsis reached, avoiding loading the full directory listing into memory on large codebases.
Security
- Secret masking before disk writes (
lib/core/secret_masker.dart) — tool arguments are persisted to both~/.proxima/audit.jsonland~/.proxima/sessions/*.json; secret-shaped values are now replaced with***in both. Detects Anthropic (sk-ant-), OpenAI (sk-proj-,sk-), GitHub (gh[porsu]_), AWS (AKIA…), Slack (xox[baprs]-), and JWTs by pattern.Authorizationheaders consume the auth scheme (Bearer/Basic/Token/Digest/APIKey) and the credential after it, so opaque credentials with no provider prefix are masked too. Bare schemes (Bearer/Basic/Digest/APIKey/Token) are matched without anAuthorization:prefix, covering headers passed structurally as{'headers': {'Authorization': 'Token abc'}}. Argument names are normalised (camelCase split, separators collapsed) and matched per segment, soapi-key,x-api-key,apiKey,API_KEY, andAuthorizationare all recognised whileauthorandtokenizerare not. Masking is applied at the serialisation boundary only (AuditLog.record(),Message.toJson(),TaskRecord.toJson()) — never to the live in-memory session, whichAnthropicProviderandCompactionboth read. Terminal output and tool results are deliberately left unmasked so the confirm prompt shows the real command and--resumereplays correctly. Closes the last unmitigated Critical risk in SPECS §22. 46 new tests
Fixed
ollama_base_urlignored by/model—SlashCommandHandlerreadOLLAMA_BASE_URLfrom the environment directly, so a base URL set in~/.proxima/config.yamlwas honoured by the agent loop but ignored by the model picker. The handler now takes an injectableollamaBaseUrl(matching the existingisTtyinjection pattern) wired fromProximaConfig
Documentation
- SPECS §15.3 documents config precedence (YAML overrides environment); new §15.3.1 specifies secret masking; §18 MVP checklist reconciled against the test suite, with
list_files.gitignoresupport explicitly marked not implemented; §22 risk register updated - README gains a "Secret masking" subsection under Data & Privacy and an explicit config-precedence note
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.2.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.2.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.