Skip to content

v0.17.0

Choose a tag to compare

@magifd2 magifd2 released this 05 Oct 07:16
· 25 commits to main since this release

Changed

  • A saved MCP result shows its tail as well as its head (ADR-0029,
    from gem-agent ADR-0096 §1). A text block too large to hold inline is
    previewed by its first 600 and last 200 characters, and the notice names
    the byte spans shown and the route to the rest (read_file
    offset/length). Metadata a server appends — "truncated": true, a row
    total — arrives as the last bytes and was never visible before.
  • shell_exec keeps the tail of long output and saves all of it
    (ADR-0029, from gem-agent ADR-0096 §3). Past 20,000 bytes the model sees
    the first 15,000 and the last 5,000 bytes — a script's totals come last
    and used to be lost — and the whole output is saved to the work directory
    (up to 32 MiB), named in the note. The runtime writes the file, privately
    (0600), so no lane's reach changes. The operator lane is not saved, nor
    is any lane when the shell runs without the sandbox, and the note says so.
  • search_files counts every file it did not search (ADR-0029, from
    gem-agent ADR-0096 §4). Files over 2 MB (named, up to five), binary
    files, images, unreadable files and directories that could not be listed
    are counted in a closing line; size and image skips were silent, so a
    "no matches" could hide a large log that was never read. Refusals past the
    five named are counted too.

Added

  • read_file reads by bytes (ADR-0029, from gem-agent ADR-0096 §2).
    offset/length take a byte window — a negative offset counts from the
    end — so the tail of a long single-line file is reachable, which a line
    window never was: a tool result saved to the work directory past 200 KB
    could not be read to its end by the tool its notice named. The note names
    the bytes returned, moved to rune boundaries. A plain read cut at 200 KB
    now says where to read on.