Added
Added in fragcap 0.6.0.
A registered Steam title now keeps all three of its names: the storefront display name, the raw installed folder name, and the observed launch executable, none reconstructed from another. A title whose folder name diverges from its current storefront title, which happens more often than expected (11 of 34 titles on a sampled library), is now findable by any of the three: typing a substring of the folder name or the executable resolves it exactly as a handle or an exact name already did. targets show names both the display name and the folder name when they genuinely diverge, and stays quiet when the difference is only casing, whitespace, or a truncated subtitle. Handle derivation also stops silently dropping &; a name like Trapped with Ivy & Piper now derives trapped_with_ivy_and_piper rather than reading as if a word were missing.
fragcap steam list now honors the global --json flag, which it previously ignored for its own result even though it reached the diagnostic emitter. fragcap steam list --json writes one newline-delimited record per installed title to standard output: the app id, name, and install directory (which the human table has never shown), plus the same handle, stable id, and row index the human table carries when a title is registered, absent entirely rather than null when it is not. Zero installed titles produces zero records rather than a sentence describing the empty state, and enumeration warnings keep reaching standard error through the emitter in either mode, matching the doctor --json precedent.
fragcap targets now checks for anti-cheat products installed machine-wide, outside any title's own install tree. Modern Easy Anti-Cheat installs once per machine as a Windows service, which a directory scan can never see no matter how many signature rows exist. When the EasyAntiCheat_EOS service is registered, a Machine: section appears once, after the per-target table, naming it. This is always kept distinct from a title's own reported evidence: a machine-wide fact is never merged into, or used to infer, any specific target's row, since presence on the machine does not say which installed title, if any, is the one that put it there. When the check finds nothing, or cannot run at all, nothing is printed; no output ever asserts a completed "no anti-cheat found" scan the tool cannot actually vouch for.
Only Easy Anti-Cheat is checked. BattlEye and Vanguard's machine-wide service names have not been measured on a real installation, and the probe checks only what has been verified rather than guessed.
fragcap capture no longer goes silent from acquisition until the run stops. On a real terminal, a status block redraws in place at least once a second, showing elapsed time, the bound process, packets and bytes written against any configured --max-bytes/--max-packets bound, the capture filter's narrowing state, every discard counter, and the top per-process contributors to the file so far. This is the fix for the run that prompted issue #186: a sixteen-minute capture whose last visible line was filter narrowed to 0 endpoint(s), during which 91 percent of the eventual file went to an unrelated background process with no way for the operator to notice until the run ended.
When standard error is not a terminal (a redirected or logged run), the redraw never appears, and output is otherwise unchanged, except that a run left silent for thirty seconds now gets a single plain heartbeat line reporting elapsed time and packets written, so a long redirected run is not silent either. --json gains an optional periodic capture.progress event carrying the same counters (never appearing outside --json); --quiet, --silent, --mode stream --out -, and the extcap integration are unaffected.
NO_COLOR disables the block's color and leaves its layout unchanged, matching the existing doctor command's contract. No new runtime dependency was added; the redraw is two hand-rolled ANSI escape sequences, extending the pattern doctor already established.