@leftoff/cli 0.8.3 → 0.8.6

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
@@ -2,6 +2,35 @@
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
+ ## [0.8.6] - 2026-10-13
6
+
7
+ ### Added
8
+ - **leftoff ↗** in Claude Code's status line: one click opens that session's card on the board. If you already have a status line, it's kept and the link goes at the end; `leftoff uninstall` puts yours back exactly.
9
+ - `/cp` prints the session's board link, plus the phone link when the relay or tailnet is on.
10
+ - **Search the board**: find a session by title, repo, branch, worktree, folder, summary or its id. Closed matches are one tap away. In a terminal: `leftoff find <words>`.
11
+ - **Machine emojis**: each Mac gets one next to its name. Tap it on the board to pick another, or run `leftoff machine emoji`.
12
+
13
+ ### Fixed
14
+ - Sessions take Claude Code's own name for them, so a live session no longer shows as Untitled.
15
+ - `claude -p`, Agent SDK and `codex exec` runs no longer fill the board as sessions.
16
+ - Sessions with time-ordered ids no longer share one short id (cp:…).
17
+ - "(this one)" now means the computer you're looking from, not the one hosting the board.
18
+
19
+ ## [0.8.5] - 2026-10-12
20
+
21
+ ### Added
22
+ - **PR filters**: repo, state (Needs attention, Open, Draft, Merged, Closed) and checks chips, plus a search box. They're in the link, so you can share or bookmark a view. PRs with no activity for 14 days fold into a Quiet group.
23
+ - **Tap a PR** to see its failing checks (each linking to its log), reviews, description, files changed and latest comments, right on the page.
24
+ - Each linked PR says why: created here, same branch, you mentioned it, or linked by you.
25
+
26
+ ### Fixed
27
+ - A PR no longer links to a session just because Claude mentioned it. A mention links only if you pasted it yourself or it's on the session's branch.
28
+
29
+ ## [0.8.4] - 2026-10-12
30
+
31
+ ### Fixed
32
+ - The "set up this computer too" banner no longer shows on a Mac that already runs Leftoff.
33
+
5
34
  ## [0.8.3] - 2026-10-12
6
35
 
7
36
  ### Added
@@ -1,12 +1,12 @@
1
1
  {"type": "summary", "summary": "Larry sync retry", "leafUuid": "x"}
2
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u2", "timestamp": "2026-10-09T13:02:00.000Z", "type": "user", "message": {"role": "user", "content": "The Larry sync worker retries forever when the API is down. Add exponential backoff with jitter and cap it at 5 attempts."}}
3
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u3", "timestamp": "2026-10-09T13:03:00.000Z", "type": "assistant", "message": {"id": "msg_1", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "text", "text": "Reading the worker and the retry helper first."}]}}
4
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u4", "timestamp": "2026-10-09T13:04:00.000Z", "type": "assistant", "message": {"id": "msg_1", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "tool_use", "id": "tu1", "name": "Read", "input": {"file_path": "/Users/joel/code/larry/src/sync/worker.ts"}}]}}
5
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u5", "timestamp": "2026-10-09T13:05:00.000Z", "type": "assistant", "message": {"id": "msg_1", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "tool_use", "id": "tu2", "name": "Read", "input": {"file_path": "/Users/joel/code/larry/src/sync/retry.ts"}}]}}
6
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u6", "timestamp": "2026-10-09T13:06:00.000Z", "type": "user", "message": {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "tu1", "content": "export async function syncWorker() {...}"}, {"type": "tool_result", "tool_use_id": "tu2", "content": "export function retry() {...}"}]}}
7
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u7", "timestamp": "2026-10-09T13:07:00.000Z", "type": "assistant", "message": {"id": "msg_2", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "text", "text": "Rewriting retry() with exponential backoff and full jitter, capped at 5 attempts."}, {"type": "tool_use", "id": "tu3", "name": "Edit", "input": {"file_path": "/Users/joel/code/larry/src/sync/retry.ts", "old_string": "a", "new_string": "b"}}, {"type": "tool_use", "id": "tu4", "name": "Edit", "input": {"file_path": "/Users/joel/code/larry/src/sync/worker.ts", "old_string": "a", "new_string": "b"}}]}}
8
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u8", "timestamp": "2026-10-09T13:08:00.000Z", "type": "user", "message": {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "tu3", "content": "ok"}, {"type": "tool_result", "tool_use_id": "tu4", "content": "ok"}]}}
9
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u9", "timestamp": "2026-10-09T13:09:00.000Z", "type": "assistant", "message": {"id": "msg_3", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "tool_use", "id": "tu5", "name": "Bash", "input": {"command": "npm test -- sync"}}]}}
10
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u10", "timestamp": "2026-10-09T13:10:00.000Z", "type": "user", "message": {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "tu5", "content": "PASS test/sync.unit.test.ts\nFAIL test/sync.int.test.ts\n staging request timed out after 30000 ms", "is_error": true}]}}
11
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u11", "timestamp": "2026-10-09T13:11:00.000Z", "type": "user", "message": {"role": "user", "content": "<local-command-stdout>Set model to opus</local-command-stdout>"}}
12
- {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/joel/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u12", "timestamp": "2026-10-09T13:12:00.000Z", "type": "assistant", "message": {"id": "msg_4", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "text", "text": "Unit tests pass with the new backoff. The integration test against staging still times out after 30s because the staging endpoint is slow. Do you want me to bump the integration timeout to 90s, or mock the slow endpoint?"}]}}
2
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u2", "timestamp": "2026-10-09T13:02:00.000Z", "type": "user", "message": {"role": "user", "content": "The Larry sync worker retries forever when the API is down. Add exponential backoff with jitter and cap it at 5 attempts."}}
3
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u3", "timestamp": "2026-10-09T13:03:00.000Z", "type": "assistant", "message": {"id": "msg_1", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "text", "text": "Reading the worker and the retry helper first."}]}}
4
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u4", "timestamp": "2026-10-09T13:04:00.000Z", "type": "assistant", "message": {"id": "msg_1", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "tool_use", "id": "tu1", "name": "Read", "input": {"file_path": "/Users/yourname/code/larry/src/sync/worker.ts"}}]}}
5
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u5", "timestamp": "2026-10-09T13:05:00.000Z", "type": "assistant", "message": {"id": "msg_1", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "tool_use", "id": "tu2", "name": "Read", "input": {"file_path": "/Users/yourname/code/larry/src/sync/retry.ts"}}]}}
6
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u6", "timestamp": "2026-10-09T13:06:00.000Z", "type": "user", "message": {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "tu1", "content": "export async function syncWorker() {...}"}, {"type": "tool_result", "tool_use_id": "tu2", "content": "export function retry() {...}"}]}}
7
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u7", "timestamp": "2026-10-09T13:07:00.000Z", "type": "assistant", "message": {"id": "msg_2", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "text", "text": "Rewriting retry() with exponential backoff and full jitter, capped at 5 attempts."}, {"type": "tool_use", "id": "tu3", "name": "Edit", "input": {"file_path": "/Users/yourname/code/larry/src/sync/retry.ts", "old_string": "a", "new_string": "b"}}, {"type": "tool_use", "id": "tu4", "name": "Edit", "input": {"file_path": "/Users/yourname/code/larry/src/sync/worker.ts", "old_string": "a", "new_string": "b"}}]}}
8
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u8", "timestamp": "2026-10-09T13:08:00.000Z", "type": "user", "message": {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "tu3", "content": "ok"}, {"type": "tool_result", "tool_use_id": "tu4", "content": "ok"}]}}
9
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u9", "timestamp": "2026-10-09T13:09:00.000Z", "type": "assistant", "message": {"id": "msg_3", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "tool_use", "id": "tu5", "name": "Bash", "input": {"command": "npm test -- sync"}}]}}
10
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u10", "timestamp": "2026-10-09T13:10:00.000Z", "type": "user", "message": {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "tu5", "content": "PASS test/sync.unit.test.ts\nFAIL test/sync.int.test.ts\n staging request timed out after 30000 ms", "is_error": true}]}}
11
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u11", "timestamp": "2026-10-09T13:11:00.000Z", "type": "user", "message": {"role": "user", "content": "<local-command-stdout>Set model to opus</local-command-stdout>"}}
12
+ {"parentUuid": null, "isSidechain": false, "userType": "external", "cwd": "/Users/yourname/code/larry", "sessionId": "00893aaf-19fa-41d2-8238-13269b9b3ca0", "version": "2.1.290", "gitBranch": "fix/sync-retry", "uuid": "u12", "timestamp": "2026-10-09T13:12:00.000Z", "type": "assistant", "message": {"id": "msg_4", "role": "assistant", "model": "claude-opus-5", "content": [{"type": "text", "text": "Unit tests pass with the new backoff. The integration test against staging still times out after 30s because the staging endpoint is slow. Do you want me to bump the integration timeout to 90s, or mock the slow endpoint?"}]}}