lshed 0.7.0 → 0.7.4
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 +40 -0
- package/README.md +39 -2
- package/dist/cli.js +257 -1790
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.4 — 2026-09-03
|
|
4
|
+
|
|
5
|
+
The first CI run on real macOS and Windows machines found three bugs. All of them were path comparisons that only hold on Linux.
|
|
6
|
+
|
|
7
|
+
- A stub whose symlink points into a package was not recognised as generated on **macOS or Windows**. The target of a broken link cannot be resolved, so it was compared unresolved: on macOS `/var/folders/...` never matches the package's real `/private/var/folders/...`. Paths are now resolved as far as they exist before being compared.
|
|
8
|
+
- The warning for a settings value pointing inside a package never fired on **Windows**, because it matched the raw path against JSON text where backslashes are escaped. It now walks the values and compares them as paths.
|
|
9
|
+
- Path comparison is one helper that strips the Windows `\\?\` prefix and ignores case there.
|
|
10
|
+
- The test that runs a package's `install:` script is skipped on Windows; `./setup` is a shell script and `cmd.exe` cannot run it.
|
|
11
|
+
|
|
12
|
+
## 0.7.3 — 2026-09-03
|
|
13
|
+
|
|
14
|
+
You no longer need Node to run lshed.
|
|
15
|
+
|
|
16
|
+
- **Standalone binaries** for Windows x64, macOS (arm64/x64) and Linux (x64/arm64), attached to every tagged release. They carry their own runtime (~60-85 MB) and need nothing installed. `npm run binaries` builds all five from one machine.
|
|
17
|
+
- **The npm package is self-contained.** `commander`, `yaml` and `zod` are bundled into `dist/cli.js` (627 KB) instead of being installed alongside it; `zod` alone was 7.9 MB. `npm install -g lshed` now downloads one file.
|
|
18
|
+
- The version is baked in at build time, so the binaries do not look for a `package.json` that is not there.
|
|
19
|
+
- The smoke script accepts `LSHED_CLI=<path>` and is run against the compiled binary in CI, so the binaries are tested, not just built.
|
|
20
|
+
|
|
21
|
+
The design assumed everyone using a coding agent already had Node, because Claude Code installs through npm. Claude Code also has a native installer, and that assumption cost a user their laptop.
|
|
22
|
+
|
|
23
|
+
## 0.7.2 — 2026-09-03
|
|
24
|
+
|
|
25
|
+
Joining a machine that already has a harness, found while preparing the Windows check.
|
|
26
|
+
|
|
27
|
+
- `restore` warns before removing parts that a **different** shed had claimed. Running `init` against a scratch shed to look around marks that machine's own parts as managed, so a later restore from the real shed would remove them. They were always backed up, but nothing said why. `lshed scan` is the read-only way to look.
|
|
28
|
+
- No longer crashes with an `EPIPE` stack trace when output is piped into something that exits early (`lshed status | head`).
|
|
29
|
+
- The smoke script now models a machine that already runs the agent: a skill whose name collides with the shed, a skill only that machine has, and its own MCP and settings. It checks that a collision is backed up and replaced, that machine-only parts survive, that nothing is removed, and that `add` pushes them into the shed.
|
|
30
|
+
- README: how to join a machine that already has a setup, and why not to `init` there.
|
|
31
|
+
|
|
32
|
+
## 0.7.1 — 2026-09-03
|
|
33
|
+
|
|
34
|
+
Groundwork for running on Windows and macOS. Not yet verified on a real machine.
|
|
35
|
+
|
|
36
|
+
- Package `install:` commands run through the platform shell (`sh` or `cmd.exe`) instead of a hard-coded `sh -c`.
|
|
37
|
+
- On Windows, `claude` and other wrappers installed as `.cmd` are found by spawning through the shell.
|
|
38
|
+
- Home-directory paths with backslashes are also rewritten to `${HOME}`.
|
|
39
|
+
- `sync` explains what to do when git has no user identity.
|
|
40
|
+
- `npm run smoke` drives the built CLI through init, restore, add, diff, save, profile switch, list and sync in a temporary directory without touching the real `~/.claude`. Use it on a new OS before trusting a real restore.
|
|
41
|
+
- GitHub Actions matrix: ubuntu, macOS, Windows × Node 20, 22. Tests use directory junctions on Windows so no elevated privileges are needed.
|
|
42
|
+
|
|
3
43
|
## 0.7.0 — 2026-09-03
|
|
4
44
|
|
|
5
45
|
`settings.json` travels, without merging.
|
package/README.md
CHANGED
|
@@ -25,11 +25,23 @@ Currently supports **Claude Code** (`~/.claude`). Other agents plug in through a
|
|
|
25
25
|
|
|
26
26
|
## Install
|
|
27
27
|
|
|
28
|
+
With Node 20 or newer:
|
|
29
|
+
|
|
28
30
|
```
|
|
29
|
-
npm install -g lshed
|
|
31
|
+
npm install -g lshed # or run it once: npx lshed status
|
|
30
32
|
```
|
|
31
33
|
|
|
32
|
-
Node
|
|
34
|
+
Without Node, download a standalone binary from the [latest release](https://github.com/LeeSongHeon-LSH/lshed/releases/latest) and put it on your PATH. It carries its own runtime, so it is ~80 MB.
|
|
35
|
+
|
|
36
|
+
| Platform | File |
|
|
37
|
+
|---|---|
|
|
38
|
+
| Windows x64 | `lshed-windows-x64.exe` → rename to `lshed.exe` |
|
|
39
|
+
| macOS Apple Silicon / Intel | `lshed-darwin-arm64` / `lshed-darwin-x64` |
|
|
40
|
+
| Linux x64 / arm64 | `lshed-linux-x64` / `lshed-linux-arm64` |
|
|
41
|
+
|
|
42
|
+
On macOS and Linux, `chmod +x` it first. The binaries are unsigned, so macOS warns on first run.
|
|
43
|
+
|
|
44
|
+
Either way you also need `git` on the PATH for packages and `sync`, and `claude` if your shed lists plugins.
|
|
33
45
|
|
|
34
46
|
## Quick start
|
|
35
47
|
|
|
@@ -89,6 +101,31 @@ lshed sync # commit the shed, pull, push
|
|
|
89
101
|
|
|
90
102
|
`save` is the only path from `~/.claude` to the shed, and it only works for parts the shed owns (`file:` sources). `sync` warns if you have unsaved edits so you do not push a shed that is behind your machine.
|
|
91
103
|
|
|
104
|
+
### A machine that already has a setup
|
|
105
|
+
|
|
106
|
+
The common case is not an empty machine: it already runs the agent and has skills, settings and MCP servers of its own. `restore` is built for that. With no prior lshed state it **removes nothing** — it places what the profile lists, and anything it overwrites goes to `~/.claude/lshed/backups/<timestamp>/` first. Parts that exist only on that machine are untouched.
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
$ lshed restore default --shed ~/lshed --dry-run
|
|
110
|
+
+ skills/mine
|
|
111
|
+
~ skills/shared # same name, different content → backed up, then replaced
|
|
112
|
+
+ mcp:exa (${EXA_API_KEY})
|
|
113
|
+
~ settings:model
|
|
114
|
+
(dry-run) 변경 없음. 배치 5, 제거 0, 백업 예정 3
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Always run `--dry-run` first. `+` is new, `~` replaces with a backup, `-` removes with a backup. If the plan looks right, drop the flag.
|
|
118
|
+
|
|
119
|
+
Then push that machine's own parts up into the shed and both machines have everything:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
lshed add # lists what this machine has that the shed does not
|
|
123
|
+
lshed add windows-only mcp/my-local-server
|
|
124
|
+
lshed sync
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Do not run `init` on such a machine just to look around. `init` claims what it finds as lshed-managed, so a later `restore` from your real shed would treat those parts as removable (backed up, but removed). Use `lshed scan`, which only prints. If you do it anyway, `restore` warns you before removing anything and `lshed add` is the way out.
|
|
128
|
+
|
|
92
129
|
### A new machine
|
|
93
130
|
|
|
94
131
|
```
|