ClientCommandRunner
Runs a command AS THE PLAYER, for the run_command tool's target=client — i.e. exactly what typing it into the chat box does.
It calls the SAME vanilla method the chat screen uses — ClientPacketListener#sendCommand on MC >=1.19, else LocalPlayer#chat("/"+cmd) on <=1.18.2 (the 1.19 secure-chat rework split the send path; see org.js.lolifamily.minecraftmcp.compat.ClientCommandCompat) — so every loader's client-command interception fires automatically: Fabric mixes into that method, NeoForge/Forge consult ClientCommandHandler on that path. A client-only mod command (Baritone, clientcommands, ...) is caught and run locally; anything else goes to the connected server, executed with THIS PLAYER's permission.
Feedback is captured by the ChatComponent mixins at the public chat entries (best-effort — see those classes). This class opens a ChatCapture window for CAPTURE_WINDOW_MS around the send: unrelated chat during the window mixes in, and a reply slower than the window is missed. What lands in the window is filtered by ChatTrust unless allowUntrusted.
Loads only when the client path is actually taken, so it never touches client classes on a dedicated server.