detect_shadowed_dcode() -> ShadowedDcode | NoneReturn the shadowing dcode entry point on the user's PATH, if any.
After a successful uv tool upgrade, the upgraded binary only takes effect
on the next launch if the user's PATH resolves to uv's tool bin dir for
dcode (and deepagents-code). A pre-uv install earlier on PATH will
silently win and report the old version, which looks like "the upgrade
didn't work" to the user.
This compares each supported console script against uv's tool bin dir. A mismatch means a different binary will run next launch for that entry point.
Caveat: a dcode symlink that lives in some unrelated bin dir but
points into the upgraded tool venv (e.g. a manually-created
convenience symlink) is reported as shadowing even though the next
launch would actually run the upgraded entry point. Comparing
directories rather than resolved targets is intentional — see the
inline note below for why — and this edge is rare enough that we
accept a benign false positive over a class of false negatives.