@leftoff/cli 0.9.8 → 0.9.9-beta.10
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 +26 -0
- package/bin/leftoff.js +411 -345
- package/docs/SECURITY.md +15 -0
- package/mod/.claude-plugin/plugin.json +1 -1
- package/mod/hooks/core.js +48 -5
- package/mod/hooks/register.js +21 -8
- package/package.json +1 -1
- package/ui/app.css +287 -5
- package/ui/app.js +461 -53
- package/ui/composer.js +51 -1
- package/ui/facts.js +34 -0
- package/ui/icons.js +2 -0
- package/ui/index.html +1 -0
- package/ui/live-status.js +13 -1
- package/ui/live-view.js +164 -9
- package/ui/live-wake.js +1 -1
- package/ui/needs.js +181 -13
- package/ui/start.js +367 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
What changed in Leftoff (called Checkpoints until 0.4.5), newest first. The board's **What's new** page and `leftoff changelog` both read this file.
|
|
4
4
|
|
|
5
|
+
## Unreleased
|
|
6
|
+
- Live: once answered, a turn's permission asks fold into one row (“▸ 7 asks · 6 allowed · 1 denied”); tap it to see them. They now sit before that turn's reply, so Claude's latest reply is the last thing in the thread (it could end up above them).
|
|
7
|
+
- Live: a message you send while Claude is working shows as its own dimmed “Queued” bubble, in order, until Claude takes it in (at its next step or when the turn ends). In a session started from the board you can Cancel it or Edit it (back into the box) until then; a terminal session's queue can't be reached from here, so those just show Queued.
|
|
8
|
+
- Live: queued messages are compact (one line, a long one folds to two; one small “Queued · Send now · Edit · Cancel” row). **Send now** stops Claude's current step and runs that message next, ahead of others queued (sessions started from the board, Claude Code 2.1.300 or later).
|
|
9
|
+
- Live: a permission prompt or question now takes the message box's place at the bottom of Live (big Allow / Deny… / Auto-approve the rest on a phone, “1 of 3” when several wait, Reply instead to type), and the thread keeps a row for each one: Allowed, Denied or Auto-approved.
|
|
10
|
+
- On a phone, Send closes the keyboard (Live, a Needs-you reply or answer, quick replies, New session). On a Mac the box keeps focus so you can keep typing; a send that fails keeps your text and focus.
|
|
11
|
+
- New session: pick Permissions (Ask me, Accept edits, or Auto: routine steps just run, riskier ones get Claude Code's safety check), remembered per Mac. Switch a running session from its page, or tap “Auto-approve the rest” on a permission card; a pill beside Live shows the mode. From another device it follows the same rule as starting a session.
|
|
12
|
+
- macOS notifications show Leftoff's name and icon instead of Script Editor's: they come from a small Leftoff app each Mac builds for itself (macOS asks once to allow “Leftoff” notifications). A click opens the session. `leftoff notifier` checks it.
|
|
13
|
+
- New session: the session's page shows your first message and Claude's reply in Live (it read “Nothing sent yet” once you opened it again), and keeps them, read-only, after you stop it.
|
|
14
|
+
- Generated session titles are in the language you write in (English if unsure), never a mix: a local model's “Ants README笑话” now falls back to the usual repo · first words name.
|
|
15
|
+
- Session page: tap Directory, Worktree, Repo, Session id, the process id or the terminal tab id to copy the whole value; hover or focus shows it in full. A long folder shows its start and its last folder.
|
|
16
|
+
- New session: a session started from the board no longer stays on “Working” in Live after Claude finished. If Claude Code's own end-of-turn report doesn't reach Leftoff, the session's own “done” line ends it a moment later, counted once.
|
|
17
|
+
- The board finds Claude Code even though the login service's PATH doesn't include it (~/.local/bin, ~/.claude/local, Homebrew, nvm, npm global), so New session no longer says it isn't installed. Its Bash commands get your login shell's PATH too (Homebrew tools your shell config calls).
|
|
18
|
+
|
|
19
|
+
- **New session** (beta) on the board, phone or desktop: pick a Mac, a repo it has used Claude Code in, and type the first message. It shows on every board at once; approve its edits and commands in Needs you, Stop or Resume it from its page. The Mac stays awake while it works.
|
|
20
|
+
- Settings → Privacy & security: **Allow starting sessions from other devices**, off by default and set on each Mac itself. Off, a start from your phone or another Mac waits for a yes on that Mac. It saves the moment you tick it and says “Saved ✓” beside it.
|
|
21
|
+
- New session from your hosted board (yourname.leftoff.dev) open on the Mac itself starts right away, like its own board; it no longer asks that same Mac for a yes it then couldn't give. Start it / Decline, Stop / Resume and the switch work there too.
|
|
22
|
+
- New session → **Other folder…**: browse a Mac's folders (names only, git repos marked, your phone included) and start in one it hasn't run Claude Code in. At that Mac it starts right away; from anywhere else it always waits for a yes there first, since it runs that folder's hooks. Or type a folder you know (~/code/web). Folders that aren't git repos work too, without a new worktree.
|
|
23
|
+
- New session: **Approved folders** on each Mac. With Allow starting sessions from other devices on, a folder that Mac hasn't run Claude Code in starts right away from your phone or another Mac when it's inside a folder you approved there (~/src/personal). Approve one from the ask (“Always allow in ~/src/personal”), in Settings → Privacy & security, or with `leftoff starts allow <folder>`.
|
|
24
|
+
- `leftoff starts` shows this Mac's Allow starting sessions from other devices; `leftoff starts on` / `off` change it from a terminal, over ssh too (`--trust` turns Trust my paired devices on as well).
|
|
25
|
+
- Settings: a setting kept only on one Mac (Allow starting sessions from other devices, Use from anywhere, Answer and Go, an API key) has a small “🖥️ studio only” pill by its name; synced ones don’t. Away from that Mac its switch shows a lock and says where to change it.
|
|
26
|
+
- When a Mac pairs a phone (or sees a new Mac), its board asks once: “Let your phone start sessions here?” No is the default; Yes turns on Allow starting sessions from other devices (and Trust my paired devices, if it was off).
|
|
27
|
+
- Board on a phone: New session is a + next to search, out of the filter row (on a desktop it matches the buttons beside it). A start or Restore asked from another device shows its words full width, with its buttons on a row below.
|
|
28
|
+
- Needs you: the Reply box is the same composer as Live (rounded box, round ↑ send, grows as you type; Enter sends on a Mac, Return is a new line on a phone), with the quick replies still under it. Your drafts carry over. The composer's 📎 and ↑, and the card's ✕, Go ↗ and other hints, show styled tips instead of browser tooltips.
|
|
29
|
+
- Hosted relay: its owner can see how many Macs connect each day (`/_admin/stats`, off until a `STATS_TOKEN` secret is set). Counts only: each account once a day as an opaque id, no IPs or content, kept 90 days.
|
|
30
|
+
|
|
5
31
|
## [0.9.8] - 2026-10-17
|
|
6
32
|
|
|
7
33
|
- **What it did**, on every session page (folded): the last tools it ran with their output, and **This folder's changes** (staged, unstaged and new files, tap one for its lines, drawn like GitHub: old and new line numbers, green and red rows, the changed words marked, a header that stays put while you scroll the file). Works for your other Mac's sessions too, read live; key and env files are never shown and secrets are blanked. In Live, tap a command under “Ran N commands” to see its output; an edit shows what it changed. A board answer too big for the relay now says so at once instead of hanging.
|