@leftoff/cli 0.9.17-beta.9 → 0.9.18-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,40 @@ What changed in Leftoff (called Checkpoints until 0.4.5), newest first. The boar
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ - **Continue in terminal / Continue headless.** An idle session can switch how it runs and keep its conversation: a headless one continues in a terminal of Leftoff's (`claude --resume` / `codex resume`, same session), and one in Leftoff's terminal continues headless. The old process ends before the new one starts, so the session never runs twice; one that's mid-turn or waiting on you is refused, and if the new side can't start, it goes back where it was.
8
+
9
+ - **Terminal sessions keep running.** A session in the board terminal or your terminal app now survives closing that window or tab, closing the board, and restarting or updating Leftoff: each terminal runs in a small detached host of its own, and Leftoff finds it again when it starts. With nothing showing it, it reads “◌ running · detached”; Go brings back the terminal app window attached to it (or shows it in the board), Open in Terminal attaches a window to the same session, and `leftoff attach <id>` works even while the daemon is stopped, including a session started just before the restart. Only Stop or Exit ends it. (After updating, Leftoff rewrites its login service once so a restart leaves these running.)
10
+
11
+ - **Headless Codex.** Codex can run with no terminal: pick Codex and Headless in New session (or `leftoff start --codex --headless "…"`) and talk to it in Live from the board or your phone. Its answers stream in, its command and edit approvals wait in Needs you, Stop interrupts it, a message sent while it works is Queued (Cancel or Send now), and the next message after a Stop or a restart picks the same Codex session back up. Permissions become Codex's sandbox and approval policy, never the bypass.
12
+
13
+ - **Pick where a session runs.** New session asks the agent (Claude Code or Codex) and the mode: **Headless** (talk to it in Live, from any device), **Board terminal** (a terminal Leftoff keeps, in the board and on your phone) or **My terminal app** (that same terminal, opened in Ghostty, iTerm or Terminal through `leftoff attach`). It's remembered per Mac and per agent, and starts the way Start did before until you pick. From a terminal: `leftoff start [--codex] [--headless | --term | --app]`.
14
+
15
+ - **Start with Codex.** New session asks Claude Code or Codex when this Mac has both, remembers the pick on this Mac, and picks Codex by itself when Claude Code isn't installed. Codex runs in the board's own terminal in the folder you chose (a new worktree, Permissions and the first message carry over; a phone sees it too), and its session opens as soon as Codex writes it, linked to that start by folder and time. From a terminal: `leftoff start --codex "first message"` (or `--agent codex`) runs Codex right there. Resume on a Codex session still runs `codex resume`.
16
+
17
+ - **Codex stands in when Claude can't.** Walk me through it has a Codex choice: `codex exec`, read-only, with no network, in the session's folder, on your own Codex login. A Codex session's walkthrough uses it when you haven't picked a model (before, it was a fresh Claude). When Claude fails because it's signed out or hit a subscription or usage limit, the walkthrough falls back to Codex, then to your summarizer. The header says "Written by Codex (Claude unavailable: usage limit reached)", and Claude is skipped for the next 10 minutes. Ask falls back the same way. On a Codex session started from the board, Ask about this change puts the question in Codex's own box.
18
+
19
+ - **Exact Needs you for Codex started from the board.** Codex doesn't save approval prompts to its session file, so for other Codex sessions Leftoff still guesses after 8 seconds. Codex started from the board is asked, for that run only, to post its own notifications in the terminal Leftoff owns. "Approval requested: …" and "Codex wants to edit …" now show on the card the moment Codex asks. Your Codex config is untouched.
20
+
21
+ - **Go finds the Codex sessions Leftoff started.** A Codex session started from the board brings up its terminal on the board, on any device. One started with `leftoff start --codex` is focused in the terminal app you typed it in, like a Claude Code session, and so is one resumed in the board's terminal. Codex started elsewhere still says Leftoff can't tell where it is.
22
+
23
+ - **Point the walkthrough's question at exact lines.** Click a line number in a walkthrough's code to pick it; shift-click or drag for a range, and Cmd/Ctrl-click to add lines from another file or step (on a phone, tap one number, then another). The picks show as chips over the ask box, and the question goes into the chat with each ref and its exact lines.
24
+
25
+ - **A step's files fold.** Each file in a step has its own header (status, path, +/− counts) that folds, with Collapse all and Expand all. What you fold is remembered per walkthrough, and lockfiles and generated files start folded.
26
+
27
+ - **Side-by-side diffs.** Unified or Split in the walkthrough's toolbar, remembered on this device. Split is offered on screens 1000px and wider, and picked lines carry across.
28
+
29
+ - **A file list you can fold or widen.** `[` or its button folds the walkthrough's file list to a slim rail with counts; drag its edge to make it wider or narrower. Both are remembered.
30
+
31
+ - **Walkthroughs open at once when the change has moved on.** A walkthrough was already kept for its exact diff, but in a live session every edit made a new one and opening it ran the whole read again. Now the last one opens straight away with "3 files changed since this walkthrough · Update", and the steps whose files changed say so. Update writes the new one, and your Mark reviewed carries over for steps whose files didn't change.
32
+
33
+ - **Next spot.** A toolbar button (or `n`, Shift+N for back) jumps across steps to the next place worth a real look: flagged lines, Core changes, and risky ones (removed logic, auth, config, migrations, error handling), each with a short reason tag. Supporting steps come last.
34
+
35
+ - **See how far you got.** The session panel's Walk me through it button shows "◐ 3 of 7 reviewed" or "✓ Reviewed", plus how many files changed since.
36
+
37
+ - **Walkthroughs cover every repo a session changed.** When a session’s edits also landed in another repo, Walk me through it reads that repo too: each step says which repo it’s in (“api · src/x.ts”), the reading order and the page group steps under a small header per repo with its counts, and the downloaded .html and Copy as Markdown get a heading per repo. A repo it only read stays out, and one that can’t be read here gets one quiet line instead of vanishing.
38
+
39
+ - **Walkthroughs render Markdown, and say all of it.** `code`, bold, lists, links and code blocks in a step now render on screen and in the downloaded .html (Copy as Markdown stays raw), as do the `code` bits in Catch me up and Claude’s recap line. A step’s explanation is no longer cut off mid-sentence, and the slides get a second Next: “Mark reviewed & next” (Shift+→ or Enter) beside the plain › Next.
40
+
7
41
  - **A calmer session panel.** Only a slim head stays pinned (the title row and the status chips); the newest checkpoint shows Stopped and Next with the rest behind More, PRs are one row each (several unchecked refs fold into “+4 not checked”), and everything else is a one-line header with a count, closed until you open it and remembered on this device. Files touched read relative to the repo, five then “+N more”; a duplicate checkpoint written from Claude Code’s own task notice is gone; answers from your phone say “via relay”, not “over Tailscale”. A file path in a message is a link only when its file can be opened from here; otherwise it’s plain text that says why.
8
42
 
9
43
  - **“Away” never claims more than a session’s age.** A session that started while you were away still reads at full depth, but its Catch me up label now says how long it really went unseen (a 30-minute-old session said “Away 12h”).