Revert idle "claude foreground" filter — back to legacy 5s notify
Reverts in one combined commit: -9931a92(inline pane_id + watch list into bash script) -6772b8d(pivot per-distro → per-pane via TILETOPIA_PANE_ID env) -f51033a(original per-distro idle filter) End-to-end probe never worked correctly against the real running app even after fixing the wsl.exe-drops-positional-args bug. Probe script ran fine in isolation but kept returning false-negative when called through tiletopia's wsl.exe spawn. Rather than keep iterating, back out cleanly — pane behaviour is now the original "go idle after 5s of silence regardless of what's running." memory.md session log notes the lessons for a future retry: don't ship per-distro again (CLAUDE.md explicitly says multi-claude-per-distro is the primary use case); prove the probe end-to-end before wiring into the idle effect (a "Test probe" button in MCP panel would have caught this in minutes). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9931a92c5f
commit
50fbd0e531
7 changed files with 27 additions and 486 deletions
|
|
@ -154,32 +154,7 @@ impl PtyManager {
|
|||
_ => None,
|
||||
};
|
||||
|
||||
// Reserve the pane id BEFORE spawning so we can tag the shell's
|
||||
// env with it — see TILETOPIA_PANE_ID below. We still insert into
|
||||
// the panes map further down, after the reader thread is wired.
|
||||
let id = self.next_id.fetch_add(1, Ordering::Relaxed);
|
||||
|
||||
let (mut cmd, spawn_err) = build_command(&spec)?;
|
||||
// WSL panes get a TILETOPIA_PANE_ID env marker so the idle-filter
|
||||
// probe (probe.rs) can tell which descendant processes belong to
|
||||
// which pane — inheritance does the work: the shell inherits from
|
||||
// wsl.exe via WSLENV, and every child (e.g. claude) inherits from
|
||||
// the shell, so checking `/proc/<pid>/environ` for the marker
|
||||
// answers "is this process running in pane N?" exactly.
|
||||
if matches!(spec, SpawnSpec::Wsl { .. }) {
|
||||
cmd.env("TILETOPIA_PANE_ID", id.to_string());
|
||||
// WSLENV controls which Windows-side env vars are forwarded into
|
||||
// the distro. Append our marker rather than clobbering — users
|
||||
// may have their own WSLENV set up. `/u` = always pass through
|
||||
// as a Unix-style env var.
|
||||
let existing = std::env::var("WSLENV").unwrap_or_default();
|
||||
let combined = if existing.is_empty() {
|
||||
"TILETOPIA_PANE_ID/u".to_string()
|
||||
} else {
|
||||
format!("{existing}:TILETOPIA_PANE_ID/u")
|
||||
};
|
||||
cmd.env("WSLENV", combined);
|
||||
}
|
||||
let (cmd, spawn_err) = build_command(&spec)?;
|
||||
let child = pair.slave.spawn_command(cmd).context(spawn_err)?;
|
||||
|
||||
// We need to keep the master alive (drop = close the PTY), but we
|
||||
|
|
@ -195,6 +170,8 @@ impl PtyManager {
|
|||
let writer: SharedWriter = Arc::new(Mutex::new(writer_raw));
|
||||
let ring: Arc<Mutex<PaneRing>> = Arc::new(Mutex::new(PaneRing::new()));
|
||||
|
||||
let id = self.next_id.fetch_add(1, Ordering::Relaxed);
|
||||
|
||||
self.panes.lock().insert(
|
||||
id,
|
||||
PaneHandle {
|
||||
|
|
@ -480,13 +457,6 @@ fn looks_like_password_prompt(buf: &[u8]) -> bool {
|
|||
|
||||
/// Run a process without flashing a console window on Windows.
|
||||
fn quiet_command(program: &str) -> std::process::Command {
|
||||
quiet_command_pub(program)
|
||||
}
|
||||
|
||||
/// Public variant for cross-module callers (currently {@link crate::probe}).
|
||||
/// Same behaviour as the in-module `quiet_command`; the wrapper exists so
|
||||
/// other modules don't each re-implement the CREATE_NO_WINDOW dance.
|
||||
pub fn quiet_command_pub(program: &str) -> std::process::Command {
|
||||
let mut c = std::process::Command::new(program);
|
||||
#[cfg(windows)]
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue