Skip to content

feat!: drop multi-window support and name sessions after the cwd#8

Merged
kylecarbs merged 1 commit into
mainfrom
single-window
Jun 10, 2026
Merged

feat!: drop multi-window support and name sessions after the cwd#8
kylecarbs merged 1 commit into
mainfrom
single-window

Conversation

@kylecarbs

Copy link
Copy Markdown
Member

Removes multi-window semantics entirely: a session owns exactly one command. Also makes boo new default the session name to the current directory's basename.

Breaking changes

  • boo windows (CLI and wire command) is removed.
  • Window-management bindings (C-a c, n, p, 0-9, C-a C-a, k, w and their C-x variants) are removed. Remaining: C-a d/C-d detach, C-a l/C-l redraw, C-a a literal C-a.
  • ls loses the WINDOWS column and "windows" JSON key.
  • peek --json loses the "window" key.
  • WINDOW is no longer set in the child environment.
  • Daemon exit reason is now command exited.

New behavior

  • boo new without a name uses the cwd basename, sanitized to the session-name charset (invalid bytes become -, truncated to 64), falling back to the pid when taken or unusable.
  • The info wire reply carries an output-idle field so wait --idle keeps working without window listings.

Version bumped to 0.2.0 (release tagged after merge).

Decision log
  • Single window is stored as ?*Window on the daemon; window ids, the active index, and switch logic are deleted rather than special-cased.
  • wait --idle previously read per-window idle from windows; the daemon now reports output idle (out_idle_ms) in info, keeping idle_ms as the session activity clock used by ls.
  • Name sanitization is a pure sanitizeName helper in paths.zig with unit tests; taken-ness is checked by socket-file existence, with pid fallback preserving the old behavior.
  • Integration harness gained runIn(cwd, argv); exe_path is resolved to an absolute path because it is build-root relative and broke spawning with a custom cwd.
  • Kitty-keyboard detach regressions (v0.1.1) re-verified against this branch via the PTY repro harnesses.

Testing

  • zig build test-all (Debug and ReleaseSafe): 67/67 pass, including a new end-to-end test for cwd-derived names and pid fallback.
  • Manual smoke: cwd naming, pid fallback, ls/ls --json, wait --for/--idle, peek --json, windows now exits 2, exorcise.
  • Kitty/alt-screen detach repro scripts still pass.

Generated with Coder Agents on behalf of @kylecarbs.

Sessions now own exactly one command. The windows CLI command, the
windows wire command, and all window-management key bindings (C-a c,
n, p, 0-9, C-a C-a, k, w) are gone; C-a d/C-d detach, C-a l/C-l
redraw, and C-a a literal C-a remain. The info reply carries an
output-idle field so wait --idle works without window listings, and
ls/peek lose their window columns and JSON keys.

boo new without a name now uses the basename of the working
directory (sanitized to the session-name character set), falling
back to the process id when that name is taken or unusable.

Bump version to 0.2.0.
@kylecarbs kylecarbs merged commit 3ef873c into main Jun 10, 2026
4 checks passed
@kylecarbs kylecarbs deleted the single-window branch June 10, 2026 08:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant