fix(subprocess-local): fence descendant adoption on the shell's start identity

A recycled shell pid could donate an unrelated process's children to the
terminal session's cleanup signalling: post-exit rescans queried
processTree/processSession by numeric pid alone. The handle now captures
the spawned shell's start identity at construction and adopts newly
scanned members only while the root pid still carries it; already-adopted
members keep their own identities, which every signal already rechecks.
Regressions cover a recycled root donating an imposter child and a shell
whose identity was never observable; the terminal fakes now model the
root row the real /proc and ps scans include.

Also from the review round: tool-pty's dependency list is re-sorted, and
the LSP renderer documents the deliberate drive-letter reading of
ambiguous file: URIs (display-only blast radius).
This commit is contained in:
Tianyi Cui
2026-08-08 22:17:54 +08:00
parent d47df8ff9d
commit b9b25f81cb
5 changed files with 60 additions and 11 deletions
+3
View File
@@ -146,6 +146,9 @@ export function renderUri(uri: string, workspaceUri: string): string {
return uri
}
if (workspace.protocol !== 'file:') return uri
// A `file:` URI does not carry its world's OS, so a leading `/X:` segment is
// read as a Windows drive. A POSIX workspace literally rooted at `/c:/...`
// would mis-render (display only; edits and reads use the exact URI).
const drivePath = /^\/[a-z](?::|%3A)/iu
const windowsWorld = workspace.hostname.length > 0 || drivePath.test(workspace.pathname)
const targetWindowsWorld = windowsWorld && (target.hostname.length > 0 || drivePath.test(target.pathname))