@leftoff/cli 0.9.8-beta.2 → 0.9.8-beta.20
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 +39 -2
- package/bin/leftoff.js +423 -392
- package/docs/peer-protocol.md +2 -0
- package/mod/.claude-plugin/plugin.json +1 -1
- package/mod/hooks/core.js +24 -4
- package/mod/hooks/register.js +1 -1
- package/package.json +1 -1
- package/ui/app.css +492 -22
- package/ui/app.js +1165 -83
- package/ui/attach.js +211 -0
- package/ui/composer.js +46 -0
- package/ui/index.html +4 -0
- package/ui/lightbox.js +452 -0
- package/ui/live-status.js +17 -9
- package/ui/live-view.js +229 -12
- package/ui/live-wake.js +96 -0
- package/ui/navhide.js +35 -0
- package/ui/pdfview.js +510 -0
- package/ui/prs.js +10 -5
- package/ui/push.js +140 -0
- package/ui/relay-client.js +70 -5
- package/ui/sw.js +52 -5
- package/ui/tabs.js +216 -0
- package/ui/tour.css +63 -0
- package/ui/tour.js +364 -0
- package/ui/update-bar.js +158 -0
- package/ui/vendor/PDFJS-LICENSE.txt +179 -0
- package/ui/vendor/pdfjs/pdf.min.js +27 -0
- package/ui/vendor/pdfjs/pdf.worker.min.js +27 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,23 +4,60 @@ What changed in Leftoff (called Checkpoints until 0.4.5), newest first. The boar
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
- **The digest reads like a brief**: Yesterday and Today up top, Start here with your top three next steps (Go or Resume beside each), every session in one sentence (“You were …; left off …”), and Finished folded away.
|
|
8
|
+
- Live: a message with an image in a new session no longer stays on “Working” after Claude answered (the transcript's first write was bigger than Live looked back, so it missed the message).
|
|
9
|
+
- Live: a transcript read of many lines no longer crashes (“Maximum call stack size exceeded”) and drops those lines; one session's bad read no longer stops Live following the others.
|
|
10
|
+
- Settings → Summaries: **Try it on your latest session** right after Save no longer loses its result.
|
|
11
|
+
- Digest: **Unfinished** lists sessions you closed in the last week with a next step left, each with Resume; past digests are a month calendar (folded to the week on phones).
|
|
12
|
+
- Session page: a non-Live session's Live box shows the Live resume command with a copy icon in it; the Lists ? opens “How lists work” right there.
|
|
13
|
+
- Session page: tap a PR for its details in place (as on the PRs page); GitHub ↗ sits beside it.
|
|
14
|
+
|
|
15
|
+
- Session page: Copy Live resume, for a session that wasn't Live (exit it, run the command, it comes back Live).
|
|
16
|
+
|
|
17
|
+
- Live: your messages render markdown (lists, code, bold), same as Claude's.
|
|
18
|
+
- **A quick tour** of the board: Needs you, a session, Live, tabs, catching up and your phone, in six steps. It runs once after setup; **Take the tour** in Settings → Updates & about plays it again.
|
|
19
|
+
|
|
7
20
|
### Added
|
|
8
21
|
- **Live link (beta, opt-in)**: start a session with `leftoff live` to send it messages from the board or your phone, see Claude's answers, and answer its permission prompts there. A Live badge marks those sessions.
|
|
9
22
|
- **Outside events**: CI or a webhook can post into a live session with this Mac's key (`leftoff live key`), signed through your leftoff.dev board.
|
|
10
23
|
- **Restore from your phone or another Mac**: it asks that Mac first, and nothing opens until someone there confirms.
|
|
11
24
|
- **Sidebar**: the sections move to a narrow rail on the left, with a count on Needs you. On phones they sit in a bar at the bottom, the rest under More.
|
|
25
|
+
- **Tabs**: sessions open in tabs next to the board. A click opens one italic preview tab that the next click replaces; it stays once you send a Live message, type there, or double-click it. On a phone, an Open row on the board and a swipe between open sessions. The layout follows the window's width, so iPad, Split View and folding keep your tabs.
|
|
12
26
|
- **Quick look**: hover Needs you (or long-press it on a phone) to see the five longest waits and Allow or Deny a permission prompt right there.
|
|
13
27
|
- **Pull to refresh** on phones: pull down from the top of any page to read it again.
|
|
14
28
|
- **Always allow here** on permission prompts, like Claude Code's own "don't ask again". It adds the exact rule (say `Bash(rm /tmp/x)`) to the project's `.claude/settings.local.json`; the ⓘ beside it shows which rule and where. Quick look calls it **Always**.
|
|
15
29
|
|
|
30
|
+
- **A session from another Mac loads from that Mac.** On your leftoff.dev board, opening a session that lives on another Mac gets its Live chat, timeline, files and Find lists straight from that Mac, so nothing comes up empty. Find lists works from any Mac now, and when that Mac is offline the page says so plainly.
|
|
31
|
+
- **Resume a Live session as Live.** Resume and Copy resume on a session you started with `leftoff live` now run `leftoff live -- --resume <id>`, so it reconnects to Live. Anything after `--` goes to Claude Code as is.
|
|
32
|
+
- **The Live badge pulses while Claude is working** on a turn, and stays still when the session is idle (no motion with Reduce Motion on).
|
|
33
|
+
- **Notifications on your phone.** Add the board to your iPhone's Home Screen (iOS 16.4+), tap **Turn on notifications** under More, and you get a notification when Claude needs your OK or a Live reply lands. The Mac running the session sends it, encrypted end to end. Any browser with Push works the same.
|
|
34
|
+
- **Attach files to a Live message.** A paperclip in the box picks photos, the camera or files on a phone; on a Mac, drop or paste them too. Files go to the Mac running the session (kept a week, outside your projects) and Claude gets their paths. Big photos are scaled down; HEIC becomes JPEG.
|
|
35
|
+
- **Leftoff updated · Refresh.** After an update, an open board (a browser tab, or the Home Screen app on your phone) shows a bar with one tap to reload. It never reloads by itself, and what you were typing comes back.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
- On phones the top row and the bottom bar slide away while you scroll down and come back when you scroll up, like Safari. They stay put while you type.
|
|
39
|
+
- The Live message box works like a chat app's: one rounded box that grows as you type, with a round ↑ inside to send. On a Mac, Enter sends and Shift+Enter adds a line; on a phone, Return adds a line.
|
|
40
|
+
- Pictures in a Live message open full screen: pinch, double-tap or scroll to zoom, swipe or use the arrows to go between them, and swipe down or press Esc to close. A picture in the box opens before you send it, too.
|
|
41
|
+
- PDFs in a Live message open full screen too, every page, with pinch, double-tap or +/− to zoom. A PDF shows its first page in the box and in your message.
|
|
42
|
+
|
|
16
43
|
### Fixed
|
|
44
|
+
- Live chat on your phone catches up when you come back to it, and keeps checking while Claude is working, so a reply never hides behind a **Working** bubble until you pull to refresh. If it can't reach your Mac for a while, the bubble says **Reconnecting…** instead of counting.
|
|
45
|
+
- Opening a session from a card shows right away: the card responds to the tap and the page opens at once while its details load, which is also faster now.
|
|
46
|
+
- Closing a preview puts you back on the picture or file you opened, even if the page refreshed meanwhile.
|
|
47
|
+
- `leftoff upgrade` asks npm for fresh package info, so a version published minutes ago installs instead of failing with "No matching version".
|
|
48
|
+
- Live chat: a message no longer stays on **Working** after Claude has answered. It settles when the turn ends, including a second message sent while Claude was busy ("Answered with the reply above"), and stuck ones clear when you update.
|
|
49
|
+
- Live chat: a message sent while an older one was stuck now gets its own reply instead of sitting on **Starting**, and each message shows the time it was sent instead of a frozen "just now".
|
|
50
|
+
- Live chat: **Jump to latest ↓** now shows whenever you've scrolled up, not only when something new arrives, and the chat stays at the bottom while Claude's reply grows.
|
|
17
51
|
- Your leftoff.dev board no longer sits on a blank page while it waits for your Mac. It shows "Connecting to your Mac…" right away and never waits more than about 10 seconds.
|
|
18
52
|
- It no longer says your Macs are asleep when they just dropped off or aren't answering. It says "Reconnecting…" or "isn't answering", tries your other Mac, and opens the board by itself on iPhone too.
|
|
19
53
|
- Leftoff notices a dead relay connection and reconnects. Its log says why the relay closed it, and `leftoff status` shows the relay.
|
|
20
54
|
- `leftoff upgrade --beta` on a git or curl install now stops and gives the command that works (`npm i -g @leftoff/cli@beta --force`), instead of saying "Up to date" or updating from main.
|
|
21
55
|
- Live link: a live session gets a name right away (its first prompt, then Claude Code's /rename), shows one Live pill, and never sits under "empty" or reads "dormant". Cards get a **Chat** button.
|
|
22
|
-
- Live link: after Send
|
|
23
|
-
- Live link: the
|
|
56
|
+
- Live link: after Send your message shows Sent ✓ or Received ✓✓, and Claude's side shows what it's doing (Working · 45s, the command it's running), then its answer with the tools folded into "Ran 3 commands". Claude's answer is the one from the session, formatting included, and long answers scroll instead of being cut off.
|
|
57
|
+
- Live link: the chat survives a restart or a refresh, and shows the session's earlier turns too, including what you typed in the terminal ("You · terminal"). The last 20 show, with **Show earlier** for more. A message caught by a restart says "No reply recorded" instead of spinning forever.
|
|
58
|
+
- Live link: the thread opens at the bottom and stays there (it no longer jumps back to the top), with **Jump to latest** when you've scrolled up. It says when a tool ran without asking, and who sent a message ("You · from laptop").
|
|
59
|
+
- Live link: a session you only talk to from the board now takes its first message as its title and counts its turns. They used to stay at "repo · branch, 0 turns" because board messages don't fire Claude Code's prompt hook. Leftoff now reads them from the session's transcript, so cards already stuck that way are fixed when Leftoff starts. A long message no longer leaves a `<channel …>` tag as the title, the repo chip hides while it would just repeat the title, and long titles wrap after a "/" instead of mid-word.
|
|
60
|
+
- A session's page has tidier buttons: one line each, the same height, with short labels (Timeline, Copy resume, Checkpoint ▾). Go is left out when it can't run, and on a narrow window or a phone the buttons move under a long title instead of squeezing it. Card buttons no longer wrap either.
|
|
24
61
|
- `leftoff live "a prompt"` keeps the prompt as a prompt. It also says that Claude Code's "no MCP server configured" line is harmless.
|
|
25
62
|
|
|
26
63
|
## [0.9.7] - 2026-10-14
|