feat(cast)!: align the options with asciinema and play in place #18

Merged
natsukium merged 3 commits from feat/cli-options into main 2026-10-15 01:16:19 +09:00
Owner

Breaking renames (record --overwrite, --stop-after-idle, --max-duration; new -t/--title; play -s, -i). play replays in the current felis window via window retarget and returns at the end; Space pauses, q/Ctrl-C quit (serve player mode, play only). serve no longer reports clients that leave before attaching.

Breaking renames (record --overwrite, --stop-after-idle, --max-duration; new -t/--title; play -s, -i). play replays in the current felis window via window retarget and returns at the end; Space pauses, q/Ctrl-C quit (serve player mode, play only). serve no longer reports clients that leave before attaching.
The felis GUI opens a connection and closes it before attaching (a
probe) when it starts, so every play printed 'connection ended: client
closed before attach' on stderr, an error line for a run that went
fine. A client that leaves before attaching has asked for nothing; serve
now ends that connection quietly. Failures after the attach are still
reported.
felis has no recorder, so where its command line is silent the options
now follow asciinema, the recorder users already know, and are spelled
so that a carried-over option cannot mean something else here:

- record: -f/--force becomes --overwrite (asciinema's -f picks the
  output format); --idle and --max become --stop-after-idle and
  --max-duration, because asciinema's --idle-time-limit shortens pauses
  at playback and never stops a recording; -t/--title writes meta.title.
- play: -s/--speed and -i/--idle-time-limit, with asciinema's meaning.

felis still wins where it has an answer: the command stays the argv
after --, and the size stays --rows/--cols.

play now plays where it was typed, as record does and as asciinema play
does in a terminal: inside a felis window it moves that window onto the
replay with `felis window retarget`; elsewhere it opens one as before. A
recording has no program to exit, so serve gains a player mode (play
only): the replay ends after its last unit or when the viewer presses q
or Ctrl-C, and serve then pushes SessionExited so the window goes back
along its trail, or closes. Space pauses. Without this the moved window
would sit on the last screen with no way back, since play's own terminal
is the one showing the replay. `felis cast serve` keeps holding the
final screen with no controls, because its client may be a test.

Checked against a real felis window on a scratch daemon: the window
leaves its session for the replay and comes back when it ends, and play
removes its socket directory. The CLI tests now unset FELIS_SESSION_ID,
which they inherited from the felis window running them and which sent
play down the in-place path against the stand-in felis.
chore(skills): follow the asciinema-aligned options and in-place play
All checks were successful
ci / cargo fmt / clippy / test / deny (push) Successful in 49s
ci / cargo fmt / clippy / test / deny (pull_request) Successful in 2m11s
ci / cargo fuzz smoke (pull_request) Successful in 1m58s
ci / cargo fuzz smoke (push) Successful in 2m1s
0371fc46b0
The shipped skill taught --max and --force, which no longer parse, and
described play as always opening a new window. It now uses the renamed
options and says how play behaves and is controlled.
natsukium deleted branch feat/cli-options 2026-10-15 01:16:19 +09:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
natsukium/felis-fcast!18
No description provided.