Skip to content

v0.14.0 - 2026-08-17

Choose a tag to compare

@emyasnikov emyasnikov released this 26 Aug 19:47
· 465 commits to main since this release
  • Alias layer for tools and params - tool names can register aliases (read/view > read_file, ls > list_dir, bash/exec > run_command) and param_aliases (file > path, query > pattern, cmd > command, q > query, cursor > offset). The registry resolves aliases to the canonical tool and normalizes args, so the advertised schema stays in the project's own vocabulary while model-dialect tool and argument names are absorbed. /tool, /help, tool policy, confirm prompts, and glyph activity lines work through aliases unchanged
  • open web tool (replio-core-websearch) - fetch a web page by id (1-based result from the most recent web_search) or url, with offset (also accepted as cursor) to resume reading. web_search now retains its last results for open to resolve, and a shared _fetch_text helper gives both fetch_page and open offset-with-continuation paging, appending [offset N of M chars - continue with cursor=N] when content continues past the cap
  • Configurable stream retry - a provider stream that ends before a completion event with no streamed content is re-requested up to 1 + stream_retries times (default 3 total attempts, configurable) with stream_retry_delay (default 0.5s) between attempts. The retrying note shows the attempt count, and when tool calls have already run the warning notes the results are saved so the answer can be retried with a follow-up message
  • tool_max_result_chars config (default 0 = unlimited) - replaces the bundled plugins' hardcoded 8000-char tool-result cap with a configurable one (set via /config tool_max_result_chars N). With the default nothing is truncated, read_file headers now report the total line and character count so the model can page large files with offset/limit, and read_file(path, limit=0) returns just the header as a size probe before committing to a read. Handlers can read the config via a _config kwarg the registry passes only when declared
  • Glyph activity lines - typed <glyph> <verb> <key_arg> status (dimmed) replaces the [tool: key_arg] oneliner for mapped categories, gated by the new glyph_lines config (default true). ToolRegistry.activity() resolves the glyph from category defaults (read ← Read, write → Write, search % Search, exec $ Run, ask ~ Ask, todo - Todo, delegate ↳ Call) or per-tool glyph/verb overrides (glob * Glob, fetch_page ↓ Fetch). Disabling glyph_lines or an unmapped category keeps the [tool: key_arg] oneliner + detail lines. ReplUI/HeadlessUI render the glyph line, ephemeral UI only (never persisted to session files)
  • write_file reports the resolved absolute path to the model - the tool result now returns Created|Overwritten|Appended <resolved abs path> (<n> lines, <n> chars) instead of echoing the raw path arg, so when a relative path resolves to an unexpected directory (e.g. launched from ~) the model sees where the file actually landed, the tool description notes that relative paths resolve against the current working directory. Terminal status preview unchanged. Tests: create/overwrite/append result strings and relative-path resolution
  • Tab completion extended - filesystem path completion after command arguments (directories get a trailing / for continued descent), tool-name completion for /tool <prefix>, and subcommand completion for commands declaring subcommands (/session lo > load, /plugins dis > disable)
  • Fixed tab completion - the completer no longer fires on macOS libedit (readline.parse_and_bind('tab: complete') is GNU-only and silently inserts a literal tab, libedit needs bind ^I rl_complete). / is removed from the completer delimiters so the model-facing word keeps its slash and paths complete correctly