sealkeep 0.5.2 → 0.6.0
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/ARCHITECTURE.md +2 -2
- package/CHANGELOG.md +30 -0
- package/CONTROL_PLANE.md +3 -3
- package/README.md +3 -3
- package/dist/site/index.html +287 -178
- package/dist/site.zip +0 -0
- package/dist/src/adapters.js +2 -2
- package/dist/src/autopilot.js +3 -3
- package/dist/src/chunk-store.js +6 -0
- package/dist/src/cli.js +22 -16
- package/dist/src/cloud.js +2 -1
- package/dist/src/control-plane-cli.js +8 -7
- package/dist/src/control-plane.js +3 -2
- package/dist/src/dashboard-cli.js +2 -1
- package/dist/src/doctor.js +2 -1
- package/dist/src/enroll.js +1 -1
- package/dist/src/env.d.ts +17 -0
- package/dist/src/env.js +28 -0
- package/dist/src/local-api.js +12 -10
- package/dist/src/mcp-install.d.ts +1 -1
- package/dist/src/mcp-install.js +3 -3
- package/dist/src/mcp.js +4 -3
- package/dist/src/notify.js +2 -1
- package/dist/src/offload.js +3 -3
- package/dist/src/providers/gdrive.d.ts +1 -1
- package/dist/src/providers/gdrive.js +3 -2
- package/dist/src/providers/index.js +1 -1
- package/dist/src/rehydrate.js +1 -1
- package/dist/src/search.js +53 -0
- package/dist/src/secrets.d.ts +1 -1
- package/dist/src/secrets.js +4 -3
- package/dist/src/service.d.ts +2 -2
- package/dist/src/service.js +4 -2
- package/dist/src/storage-setup.js +5 -5
- package/dist/src/storage-targets.d.ts +3 -0
- package/dist/src/storage-targets.js +22 -2
- package/dist/src/types.d.ts +3 -0
- package/dist/src/upload.js +4 -0
- package/dist/src/vault.js +4 -3
- package/package.json +4 -2
package/ARCHITECTURE.md
CHANGED
|
@@ -94,7 +94,7 @@ Full specification, test vectors, and tamper coverage: `packages/vaultline-crypt
|
|
|
94
94
|
|
|
95
95
|
## 4. Control-plane API v1
|
|
96
96
|
|
|
97
|
-
Authentication is on by default. `
|
|
97
|
+
Authentication is on by default. `SEALKEEP_CONTROL_PLANE_DEV=1` disables device signatures
|
|
98
98
|
and keeps state in memory for local interface work; `/health` reports
|
|
99
99
|
`mode: development-interface` so a misconfigured deployment is visible in one request.
|
|
100
100
|
|
|
@@ -198,4 +198,4 @@ Four gates remain open, none closable by writing more code in this repository:
|
|
|
198
198
|
3. **OS code-signing certificates.** Releases carry npm provenance and an Ed25519-signed manifest only.
|
|
199
199
|
4. **Browser and accessibility QA** of the dashboard.
|
|
200
200
|
|
|
201
|
-
Uploads remain off unless `
|
|
201
|
+
Uploads remain off unless `SEALKEEP_ENABLE_SIGNER=1` is set explicitly.
|
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,36 @@
|
|
|
3
3
|
Notable changes, by published version. Sealkeep is pre-1.0: minor versions
|
|
4
4
|
may change behavior, and say so here when they do.
|
|
5
5
|
|
|
6
|
+
## 0.6.0 — 2026-08-19
|
|
7
|
+
|
|
8
|
+
**A second machine no longer wipes your search index.** The content index is
|
|
9
|
+
shared by every machine of a vault, but each machine pruned it from its own
|
|
10
|
+
records: a laptop that had never sealed anything concluded every entry was
|
|
11
|
+
dead, deleted them, and pushed the emptied index back — after which the machine
|
|
12
|
+
that built it could not search its own history either. A machine now forgets
|
|
13
|
+
only what it itself indexed. If this bit you, `sealkeep index build` on the
|
|
14
|
+
machine holding the archives restores the phonebook for the whole vault.
|
|
15
|
+
|
|
16
|
+
- Cross-machine search now finds ordinary uploaded archives, not just streamed
|
|
17
|
+
ones: a hit with no local record is rebuilt from the archive's own frame.
|
|
18
|
+
- Environment variables are `SEALKEEP_*`. The Vaultline-era names still work,
|
|
19
|
+
so nothing on an existing machine breaks; the new name wins when both are set.
|
|
20
|
+
- The CLI honours `SEALKEEP_DATA_DIR` — the variable `mcp install` already
|
|
21
|
+
writes into agent configs — so the agent and the CLI cannot silently work on
|
|
22
|
+
different vaults.
|
|
23
|
+
- New: `npm run acceptance` drives 22 end-to-end scenarios through the shipped
|
|
24
|
+
CLI (see `docs/acceptance-matrix.md`).
|
|
25
|
+
|
|
26
|
+
## 0.5.3 — 2026-08-19
|
|
27
|
+
|
|
28
|
+
The account now knows what every destination holds. Machines stamp
|
|
29
|
+
per-target usage (Drive, your bucket, cloud) into the routing rules they
|
|
30
|
+
already sync, so the panel's new headline reads like the truth:
|
|
31
|
+
"3.7 GB in Sealkeep cloud · 56 MB in Google Drive". The panel also got
|
|
32
|
+
its polish pass: status headline first, routing rules as three short
|
|
33
|
+
bullets, per-row "holds X", compact editors, your current package leads
|
|
34
|
+
with the tiers as chips, and Drive shows as "folder <name>".
|
|
35
|
+
|
|
6
36
|
## 0.5.2 — 2026-08-19
|
|
7
37
|
|
|
8
38
|
- "Manage in cloud" now opens sealkeep.spala.ai — the panel URL was still
|
package/CONTROL_PLANE.md
CHANGED
|
@@ -6,7 +6,7 @@ The control plane stores device identities, encrypted manifests, and provider co
|
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
8
|
npm run control-plane # authenticated, durable
|
|
9
|
-
|
|
9
|
+
SEALKEEP_CONTROL_PLANE_DEV=1 npm run control-plane # unauthenticated, in memory
|
|
10
10
|
docker build -t vaultline-control-plane . && docker run -p 8787:8787 -v vaultline-data:/data vaultline-control-plane
|
|
11
11
|
```
|
|
12
12
|
|
|
@@ -35,7 +35,7 @@ presented in `x-vaultline-device`, `x-vaultline-timestamp`, `x-vaultline-nonce`,
|
|
|
35
35
|
refused, and a nonce cache rejects verbatim replays. Binding method, path, and body hash
|
|
36
36
|
into the signature means a captured signature cannot be redirected to another endpoint.
|
|
37
37
|
|
|
38
|
-
`
|
|
38
|
+
`SEALKEEP_CONTROL_PLANE_DEV=1` disables this and keeps state in memory. It exists for
|
|
39
39
|
local interface development. If `/health` reports `development-interface` on anything you
|
|
40
40
|
deployed, stop it.
|
|
41
41
|
|
|
@@ -61,7 +61,7 @@ Input is ciphertext-only metadata: archive ID, encrypted byte length, SHA-256 of
|
|
|
61
61
|
|
|
62
62
|
Every lease carries `status` and `uploadable`. In this build they are always `pending-signer` and `false`. `assertLeaseUsable` is the single gate an upload path must pass: it checks expiry first, so a replayed lease is refused as `lease_expired` rather than as an unsigned one, and it then refuses anything that is not an `active` uploadable lease with `signer_not_configured`.
|
|
63
63
|
|
|
64
|
-
`
|
|
64
|
+
`SEALKEEP_ENABLE_SIGNER=1` permits registering a `ProviderUploadClient`, but no implementation ships. With the flag off, registration and lookup both fail; turning it off again immediately withdraws every registered client.
|
|
65
65
|
|
|
66
66
|
For S3/R2 the response contains `createMultipart`, per-part presigned PUT URLs, and a completion endpoint. For GCS it contains a signed initiation URL plus the resumable session URI returned to the local agent. The client validates the remote checksum and then calls `POST /v1/archives/complete`.
|
|
67
67
|
|
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ heartbeat every cycle, so `status`, the dashboard, and the local API all answer
|
|
|
30
30
|
"is it running, when did it last check, and what has it sealed" from the same fact.
|
|
31
31
|
It also raises a native notification when disk is reclaimed or something needs a
|
|
32
32
|
decision — never for routine sealing, which would just train you to ignore it.
|
|
33
|
-
Silence it entirely with `
|
|
33
|
+
Silence it entirely with `SEALKEEP_NOTIFICATIONS=off`.
|
|
34
34
|
|
|
35
35
|
Prefer to drive it yourself? `sealkeep quickstart` does the same setup without installing
|
|
36
36
|
a service, and you run `sealkeep queue run` when you feel like it.
|
|
@@ -70,7 +70,7 @@ Autopilot runs all four on a loop. To unlock the vault without a human present,
|
|
|
70
70
|
your phrase in the OS keystore — macOS Keychain, Freedesktop Secret Service, or Windows
|
|
71
71
|
DPAPI. That is a real trade-off, stated plainly: anything running as you can read it once
|
|
72
72
|
you are logged in. Opt out with `--no-remember` and supply
|
|
73
|
-
`
|
|
73
|
+
`SEALKEEP_RECOVERY_PHRASE` to the service yourself. Either way, the phrase you wrote down
|
|
74
74
|
stays your disaster-recovery path.
|
|
75
75
|
|
|
76
76
|
## Your recovery phrase is 24 words
|
|
@@ -191,7 +191,7 @@ and phrase still never leave your machine.
|
|
|
191
191
|
```sh
|
|
192
192
|
sealkeep storage configure --provider r2 --bucket encrypted-sessions --prefix accounts/me
|
|
193
193
|
echo '{"accessKeyId":"…","secretAccessKey":"…"}' | sealkeep storage credentials set
|
|
194
|
-
|
|
194
|
+
SEALKEEP_ENABLE_SIGNER=1 sealkeep upload --all
|
|
195
195
|
```
|
|
196
196
|
|
|
197
197
|
Or skip storage entirely and keep everything local. Sealkeep still seals every archive; it
|