tui: styled filesystem tool output (diff / list / grep) — stage 1
The TUI rendered every tool result as a single dim Text in a Panel — no
special handling for filesystem, so unified diffs from edit_lines/smart_edit/
diff were shown as plain grey text (the existing DiffRenderer only fires on
type:"diff", which filesystem never emits), directory listings were an
unaligned text blob, and grep matches had no pattern highlighting.

New FilesystemToolResultRenderer (clients/terminal/tui/renderers/filesystem.py)
intercepts filesystem tool_call events by tool=="filesystem" + args.action:

- diff / edit_lines / smart_edit: reuse a shared highlight_unified_diff()
  helper (extracted from DiffRenderer) — + green, - red, @@ dim; the
  "Applied …" summary line of edit_lines/smart_edit is separated from the
  diff body via a Group; "Files are identical." renders dim.
- list: header plaque dim (warning color on ⚠ truncated); directories
  shown as "▸ name/ (n items)" in info color; files as name (text) +
  size (accent) + time (dim), preserving the tool's fixed-width alignment;
  "?" entries in warning; "(empty directory)" dim.
- grep: header plaque dim; "rel:line:" location dim; matched pattern
  occurrences highlighted in accent (case-insensitive, re.escape'd);
  "No matches …" dim.
- read / info / write / edit / append / move / copy / delete / mkdir /
  exists / find / find_up / query / unknown: plain dim fallback (unchanged
  for now — stage 2). Errors (success=False): plain in tool_error color.

Registered before the generic ToolResultRenderer (first-match wins). The
filesystem tool, WS protocol, events, and webclient are untouched.

22 new tests in tests/clients/test_filesystem_renderer.py cover accepts,
diff/edit_lines/identical/error, list (dir/file/truncated), grep
(pattern/no-matches/no-pattern-arg), fallback, title+status, subagent
indent. DiffRenderer behavior unchanged (existing test still passes).

Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 8b36ce9 commit b61186e9c3a8ddfcfee40caf8ec1b9161843117c
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 7 hours ago
Showing 4 changed files
View
clients/terminal/tui/renderers/__init__.py
View
clients/terminal/tui/renderers/diff.py
View
clients/terminal/tui/renderers/filesystem.py 0 → 100644
View
tests/clients/test_filesystem_renderer.py 0 → 100644