Skip to content

v0.46.0

Choose a tag to compare

@nuroctane nuroctane released this 14 Oct 01:02
· 30 commits to main since this release

v0.46.0 - post-switch review: lean tool results, Factory Droid OAuth, grep/glob/bg/jev fixes

A review pass over everything shipped in v0.45.x, plus the token-saving conventions from unreal-agent that nur did not have yet.

Tool results cost less

  • bash returns the stdout alone. Stderr: and Exit code: N sections appear only when they carry information, (no output) when nothing was printed. No per-call header.
  • One bound per result: max_output_length is honoured once (default min(80000, tool_result_max_chars), max 400000) and headroom no longer re-spills it. The marker is ...N bytes truncated; complete output in <path>....
  • Timeout handoff only when the command produced output in the last 15 s; a silent command is killed and reported as timed out (new E2E scenario 29). The placeholder tells the model the result arrives on its own.
  • New "Turn economics" prompt guidance: go wide with independent tool calls, never poll background work.

Background jobs

  • Failed jobs keep their full output (previously only a 400-char preview). Cancelled jobs report as cancelled. Only model-launched jobs post completion notes. Bytes past the 2 MB capture cap are counted and reported.

Factory Droid

  • /login -> Factory Droid -> Sign in with browser imports an existing droid sign-in (keyring presence only; nothing secret is copied). FACTORY_API_KEY still works.
  • Launcher discovery: NUR_DROID_BIN, ~/.factory/bin, ~/.local/bin, ~/bin, %LOCALAPPDATA%\Programs\factory, /usr/local/bin, /opt/factory/bin, then PATH. The error now distinguishes "signed in, launcher missing" from "not installed".
  • Whole process tree is terminated on cancel/timeout; .cmd shims never receive the prompt on argv; idle timeout defaults to the turn budget.

grep / glob

  • ripgrep: --with-filename, NUL separators (timestamps in text no longer split a line), globs anchored at path, **/dir/ pruning, streamed and cancellable output with an 8 MiB budget, exit-2 handling.
  • Fallback walker: ancestor false positive in is_hard_excluded removed, 500-byte line clip, deterministic order, output identical to the rg path.
  • glob: directory patterns expand to dir/**; the size cap applies only to grep.

Jev engine slots

  • Removing a key clears the in-memory copy too; the residence panel mirrors the client's key resolution exactly; forgetting a key clears the sessions-store copy but keeps OAuth; shared-slot deletion arms then confirms; accurate "fallback vs replaces" hint; hit-rect, compact error row and PageUp/Down fixes; one probe per refresh.

Vision

  • Loop-level retry without images on any transport's media-unsupported error; media-aware compaction estimate; image/jpg normalised for Anthropic and Gemini; Gemini only sends accepted types; ftyp brand sniff rejects QuickTime/HEIF as mp4.

Docs updated: providers, authentication, tools, troubleshooting, README.