* feat(cli): combine elapsed + timeout in shell time indicator
Render shell tools that have an explicit timeout as
`(elapsed · timeout N)` inline with the Running… status from t=0,
instead of splitting the information across the right-aligned elapsed
indicator and the ShellStatsBar row.
- formatters: add a `hideTrailingZeros` option so whole seconds render
as `5s` rather than `5.0s` while fractional values like `5.5s` stay
intact
- ToolElapsedTime: accept optional `timeoutMs`; when set, skip the 3s
quiet threshold and render the combined `(elapsed · timeout N)` label
- ToolMessage: extract `timeoutMs` from AnsiOutputDisplay and feed it
to ToolElapsedTime
- ShellStatsBar: drop its `timeoutMs` field (now inline); keeps
`+N lines` and memory usage only
- Unify both modes on `formatDuration` so hour-range output is
consistent (`1h 2m 6s` across timeout and no-timeout paths)
* feat(cli): thread shell timeoutMs through compact tool group display
The combined `(elapsed · timeout N)` format introduced in the previous
commit was only wired through the expanded ToolMessage path. Compact
tool groups kept rendering ToolElapsedTime without timeoutMs, so shell
tools displayed in compact mode silently dropped the timeout budget.
- CompactToolGroupDisplay: add getShellTimeoutMs() to pull timeoutMs
off the active tool's AnsiOutputDisplay result (same shape used by
ToolMessage) and feed it to ToolElapsedTime
- add CompactToolGroupDisplay.test.tsx covering the three paths:
ansi display with timeoutMs, ansi display without timeoutMs, and
non-ansi resultDisplay (string)