* fix: remove extra blank lines in `railway agent` REPL output
The thinking spinner and the Chunk/ToolCallReady handlers were each
unconditionally emitting a `println!()`, stacking multiple blank lines
between user input and the agent's response. Drop the unconditional
newline before the initial spinner, and only emit a leading newline in
the Chunk/ToolCallReady handlers when a spinner wasn't just cleared
(since `finish_and_clear` already leaves the cursor on a blank line).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(agent): markdown rendering, spacing fixes, and API endpoint update
- Stream raw text during agent responses, then re-render each block with
termimad on ToolCallReady / WorkflowCompleted for GitHub-style markdown
- Track block start position via crossterm cursor::position so the re-render
only erases the current block, not prior tool output
- Render a "✓ Done" / "✗ Tool failed" badge after each tool call so the
indicator stays visible once the spinner finishes
- Insert a blank line between consecutive agent responses within a turn;
keep the tool spinner directly attached to the preceding text
- Update chat endpoint from /api/v1/chat to /api/v1/agent
- Refactor: bundle streaming state into HumanRenderer, extract
stream_human / stream_json / tool_badge helpers to drop ~60 lines of
duplication between run_single_shot and run_repl
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* style: wrap tool-status label across lines for rustfmt
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>