This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

list --remote shows tags

Nathan Herald (Apr 16, 2026, 12:41 PM +0200) 3e647c61 52296105

+21 -3
+1
CHANGELOG.md
··· 23 23 - BUG-5: The Unix-socket file is now created under `umask 0o077`, closing the microsecond window where the inode was group/world-readable before `chmod 0o600`. 24 24 25 25 ### Fixes 26 + - Fix `pty list --remote` not rendering tags or displayName on remote sessions. Remote sessions now go through the same render path as local — displayName in parens, strategy marker, user-facing tags as `#key=value` — whenever the relay includes them in its `ls --json` output. 26 27 - Fix mouse tracking modes (1000/1002/1003) not being replayed when a client reattaches to a session with mouse tracking already enabled — the server previously only replayed the SGR encoding (1006), cursor visibility, and kitty keyboard flags. Clients (e.g., pty-layout) checking tracking mode to decide whether to forward mouse events will now see the correct state. 27 28 - Fix `EventFollower` starting at EOF when its directory watcher detected a brand-new `.events.jsonl` — `session_start` was already on disk by the time the dir event fired, so followers were skipping it. New-file detections now start at offset 0 while existing-file watches still start at EOF. 28 29 - Fix `session_exit` sometimes missing from the events log when the daemon was killed via SIGTERM (`pty kill` and similar). The event was queued on the `EventWriter` chain but the daemon exited before the append flushed. `close()` now waits for the child process's `onExit` (bounded at 2s) and then drains the writer before resolving.
+20 -3
src/cli.ts
··· 1094 1094 } 1095 1095 1096 1096 // Fetch relay hosts if --remote 1097 - let remoteHosts: { label: string; sessions: { name: string; status: string; command?: string; cwd?: string }[]; error: string | null }[] = []; 1097 + let remoteHosts: { 1098 + label: string; 1099 + sessions: { 1100 + name: string; 1101 + status: string; 1102 + command?: string; 1103 + cwd?: string; 1104 + tags?: Record<string, string>; 1105 + displayName?: string; 1106 + }[]; 1107 + error: string | null; 1108 + }[] = []; 1098 1109 if (remote) { 1099 1110 try { 1100 1111 const relayBin = execFileSync("which", ["pty-relay"], { encoding: "utf-8" }).trim(); ··· 1192 1203 } 1193 1204 } 1194 1205 1195 - // Remote hosts 1206 + // Remote hosts — render with the same treatment as local: displayName 1207 + // in parens after the id, strategy marker, user-facing tags inline. 1196 1208 for (const host of remoteHosts) { 1197 1209 console.log(""); 1198 1210 if (host.error) { ··· 1204 1216 const icon = s.status === "running" ? "\u25cf" : "\u25cb"; 1205 1217 const cwd = s.cwd ? shortPath(s.cwd) : ""; 1206 1218 const cmd = s.command ?? ""; 1207 - console.log(` \x1b[1;36m${icon} ${s.name}\x1b[0m — ${cwd} — \x1b[2m${cmd}\x1b[0m`); 1219 + const labelBase = s.displayName 1220 + ? `\x1b[1;36m${s.displayName}\x1b[0m \x1b[2m(${s.name})\x1b[0m` 1221 + : `\x1b[1;36m${s.name}\x1b[0m`; 1222 + const tagStr = renderTags(s.tags, showTags); 1223 + const marker = strategyMarker(s.tags); 1224 + console.log(` ${icon} ${labelBase}${marker}${tagStr} — ${cwd} — \x1b[2m${cmd}\x1b[0m`); 1208 1225 } 1209 1226 } 1210 1227 }