| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Merge origin/main (server-side search) into feat/spaces-chat-improvements Takes main's Postgres FTS search as the one search for spaces and retires this branch's client-side quick switcher. Ported onto main's header bar: the from:/in:/has:/mentions: filter grammar (client-side over the org's page), landing on the hit row with a flash, and the ⌘⇧K binding so plain ⌘K stays the global palette. Conflicts: both sides added store methods and header elements side by side (memory-store, pg-store, store, service, spaces-view) — kept both. Migration ids collided: main's 012-search keeps its number; polls is now 013-polls. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> | 3 天前 | |
fix(x): code mode — marking a session done kills its terminal PTY (#974) * fix(x): code mode — marking a session done kills its terminal PTY Done means nothing keeps running on the session's behalf: setDone(true) and merge-back auto-done now dispose the session's terminal (killing the shell and anything it runs — dev servers, watchers). Reopen and failed merges leave the terminal alone; the pane respawns a fresh shell via terminal:ensure on the next attach. Lives in CodeSessionService (core) so both hosts — Electron main and rowboat-server — get the behavior through the one setDone/mergeBack path. The kill is best-effort via dynamic import, keeping native node-pty off the service's static module graph. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(x): terminal dispose kills the whole process tree, not just the shell disposeTerminal relied on pty.kill() = one SIGHUP to the shell. zsh puts every job in its own process group, and any job trapping SIGHUP — which most dev servers do, to survive terminal disconnects — kept running (reproduced empirically: HUP-trapping foreground and background jobs both survived dispose). So "mark done kills the terminal" silently leaked exactly the processes users care about. killProcessTree snapshots the shell's descendants while it is still alive (orphans become untraceable after), TERMs them (+CONT for stopped jobs), and SIGKILLs survivors after a grace period. Group signalling is limited to groups whose leader is inside the tree — a group inherited from above the root is never swept, so the sweep can't hit the app or its siblings; foreign-group members are matched per-pid, re-validated against pid+pgid at KILL time to dodge pid reuse. Windows uses taskkill /T /F. Verified with real PTY trees: SIGHUP/SIGTERM-trapping parents and grandchildren, foreground and backgrounded, all reaped on dispose. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> | 1 小时前 |