mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-22 00:02:23 +00:00
Some Windows shell brokers enforce `ProcessRedirectionTrustPolicy` on what they launch. The daemon inherited it, every ConPTY shell under the daemon inherited it in turn, and PowerShell could then no longer traverse a user-created junction — which is exactly what Scoop's `current` links are. `oh-my-posh` and `fzf` died with `Shim: Could not determine if target is a GUI app`. Windows Terminal was unaffected because its process tree never picked the policy up. The policy cannot be relaxed once enabled, so the fix is to not inherit it: when tty7 detects the enforcing bit, it creates the daemon with `STARTUPINFOEXW` and `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` naming the interactive desktop shell, which supplies the ordinary desktop token, device map, and mitigation policy. The Win32 code stays isolated in `daemon/spawn/windows.rs`, and the ordinary path still runs whenever the policy is absent — or whenever the desktop shell cannot be borrowed, in which case tty7 logs a warning and starts degraded rather than not at all. Because naming a logical parent makes handle inheritance follow that process, the daemon starts with no standard handles. `daemon::server` and the pane reader's trace line now write to stderr in a way that tolerates that, instead of `eprintln!`, which panics on a failed write. ConPTY exit ordering: the process-exit monitor could observe a short-lived shell exiting before the reader had delivered its final frame, so `Exited` reached clients ahead of the output that preceded it. The monitor now releases the pseudoconsole and lets the reader — which reports only after forwarding everything up to EOF — announce the death, with a bounded window behind it for the case where EOF never arrives because a grandchild holds the ConPTY output pipe open. Note this changes the daemon's token on the clean-parent path: it derives from Explorer, so an elevated tty7 starts a medium-integrity daemon. Co-authored-by: ARNO <ArnoChenFx@users.noreply.github.com>