mirror of
https://github.com/awizemann/scarf.git
synced 2026-05-10 10:36:35 +00:00
ec03627bcd
First-run of diagnostics against a working Mardon returned 0/14 passing with "(no output)" for every probe — including the trivial "emit connectivity PASS" that the script emits unconditionally. That meant the script wasn't executing as written; the parser saw `__END__` but no probe lines. Root cause: SSHTransport.runProcess wraps every argument through `remotePathArg`, which is designed for PATHS (it rewrites `~/` to `$HOME/` and double-quotes the result with backslash-escapes). Passing a multi-line shell script with embedded `"$1"` / `"$2"` / `"$3"` and `printf '\n'` escape sequences through that is corruption — the remote sh -c receives a scrambled script and silently emits nothing. TestConnectionProbe already works around this: it builds the ssh argv directly (ssh host -- /bin/sh -c <script>) so the script travels as a single opaque argv entry and ssh forwards it to the remote shell unchanged. Mirror that approach. RemoteDiagnosticsViewModel.execute now: - For remote contexts: builds ssh argv directly (ControlMaster-aware, uses the same socket as SSHTransport so it's effectively free after the first connection), then passes /bin/sh -c <script> as argv. - For local contexts: spawns /bin/sh -c <script> via Process directly. Also surfaces raw stdout/stderr/exit-code in a disclosure panel at the bottom of the sheet, visible only when ALL probes fail. Makes any future transport-level breakage self-diagnosing: the user sees exactly what the remote returned, not just "(no output)" rows. Expose SSHTransport.controlDirPath (already static) as a public helper so the diagnostics probe reuses the same ControlMaster socket as the connection itself. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>