@compozy/skeeper 0.2.1 → 0.3.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.
Files changed (2) hide show
  1. package/README.md +168 -65
  2. package/package.json +16 -16
package/README.md CHANGED
@@ -29,10 +29,11 @@ It mirrors `SPEC.md`, ADRs, RFCs, and AI plan files into a sidecar Git repositor
29
29
  - **Specs stay local to their code.** Edit `SPEC.md`, `docs/specs/**`, `.claude/plans/**`, ADRs, RFCs, or custom globs where they naturally belong.
30
30
  - **Shared sidecars without collisions.** Namespaces isolate stored paths and sidecar branches inside one sidecar remote.
31
31
  - **Branch-aware history.** Namespace branches use `<namespace>/__branches__/<source-branch>`.
32
- - **Fresh-clone hydration.** `skeeper hydrate` restores files from the locked sidecar commits, not a best-effort latest branch.
33
- - **Safe reconciliation.** `hydrate`, `fsck`, `diff`, and `reconcile` classify per-path drift before any local managed document is overwritten or moved.
34
- - **Agent-friendly commands.** `status`, `sync`, `verify`, `fsck`, `diff`, `reconcile`, `update`, `hooks check`, `repair status`, `rescue`, `pattern`, `adopt`, and `untrack` all support deterministic output where needed.
35
- - **Skill for AI agents.** A bundled skill at [`.agents/skills/skeeper/SKILL.md`](.agents/skills/skeeper/SKILL.md) teaches coding agents the strict-sync workflow, namespaces, and recovery commands.
32
+ - **Git-like spec sync.** `skeeper pull` brings remote docs in, `skeeper push` publishes local docs, and `skeeper sync` runs pull then push.
33
+ - **Safe by default.** Manual push does not delete remote-only docs just because this clone does not have them; destructive pruning requires `--prune`.
34
+ - **Fresh-clone restore.** `skeeper restore --all` restores files from the exact sidecar commits recorded in `skeeper.lock`.
35
+ - **Small command surface.** Daily use is `status`, `pull`, `push`, `sync`, `restore`, `track`, `untrack`, `repair`, `log`, and `version`; Git hook plumbing lives behind hidden `skeeper internal` commands.
36
+ - **Skill for AI agents.** A bundled skill at [`skills/skeeper/SKILL.md`](skills/skeeper/SKILL.md) teaches coding agents the strict-sync workflow, namespaces, and recovery commands.
36
37
 
37
38
  ## 🎯 Who Is This For
38
39
 
@@ -42,16 +43,51 @@ It mirrors `SPEC.md`, ADRs, RFCs, and AI plan files into a sidecar Git repositor
42
43
 
43
44
  ## 📦 Installation
44
45
 
46
+ #### Homebrew
47
+
48
+ ```bash
49
+ brew tap compozy/compozy
50
+ brew install --cask skeeper
51
+ ```
52
+
53
+ #### NPM
54
+
55
+ ```bash
56
+ npm install -g @compozy/skeeper
57
+ ```
58
+
59
+ #### Go
60
+
45
61
  ```bash
46
62
  go install github.com/compozy/skeeper/cmd/skeeper@latest
47
63
  ```
48
64
 
49
- Other release channels are available through GitHub Releases, Homebrew, NPM, and the distroless Docker image.
65
+ #### GitHub Releases
66
+
67
+ Download the archive for your OS and architecture from [GitHub Releases](https://github.com/compozy/skeeper/releases), then place the `skeeper` binary on your `PATH`.
68
+
69
+ #### From Source
70
+
71
+ ```bash
72
+ git clone git@github.com:compozy/skeeper.git
73
+ cd skeeper
74
+ make verify
75
+ go build -o bin/skeeper ./cmd/skeeper
76
+ ```
77
+
78
+ #### Docker
79
+
80
+ ```bash
81
+ git clone git@github.com:compozy/skeeper.git
82
+ cd skeeper
83
+ make docker-build
84
+ docker run --rm -v "$PWD:/workspace" -w /workspace skeeper:dev status
85
+ ```
50
86
 
51
87
  Prerequisites:
52
88
 
53
89
  - `git` on `PATH`
54
- - `gh` only when `skeeper init` creates a new GitHub sidecar repo
90
+ - `gh` only when `skeeper init` creates a new GitHub sidecar repo; existing sidecars can be reused with `--sidecar`
55
91
 
56
92
  ## 🔄 How It Works
57
93
 
@@ -74,8 +110,8 @@ flowchart TD
74
110
 
75
111
  Block --> Commit[✅ Main commit proceeds]:::ok
76
112
  Commit --> Push([🚀 git push]):::user
77
- Push --> Verify[🔍 Skeeper pre-push verify]:::skeeper
78
- Verify --> Done([🎉 Sidecar verified]):::ok
113
+ Push --> Verify[🔍 Skeeper pre-push status check]:::skeeper
114
+ Verify --> Done([🎉 Sidecar checked]):::ok
79
115
 
80
116
  classDef user fill:#dbeafe,stroke:#1d4ed8,color:#0c1e3e
81
117
  classDef skeeper fill:#fef3c7,stroke:#b45309,color:#3b2c00
@@ -83,7 +119,7 @@ flowchart TD
83
119
  class S1,S2,S3,S4,S5 skeeper
84
120
  ```
85
121
 
86
- If sync fails, the commit fails. This is intentional: a committed main change should not silently drift from the sidecar. The audited bypass is `SKEEPER_SKIP=1`; it records `.git/skeeper/bypass.json`, prints a warning, and `pre-push`, `status`, `fsck`, and `verify` continue to surface stale-lock diagnostics until `skeeper sync` repairs the state. `git commit --no-verify` is unsupported because Git skips all hook code and cannot record an audit trail.
122
+ If sync fails, the commit fails. This is intentional: a committed main change should not silently drift from the sidecar. The audited bypass is `SKEEPER_SKIP=1`; it records `.git/skeeper/bypass.json`, prints a warning, and `status --check`, `repair`, and the managed `pre-push` hook continue to surface stale-lock diagnostics until `skeeper sync` or `skeeper repair` repairs the state. `git commit --no-verify` is unsupported because Git skips all hook code and cannot record an audit trail.
87
123
 
88
124
  ## ⚙️ Configuration
89
125
 
@@ -151,8 +187,8 @@ skeeper init \
151
187
  --sidecar-name myproject-specs \
152
188
  --visibility private \
153
189
  --namespace project \
154
- --patterns "**/SPEC.md" \
155
- --patterns "docs/specs/**"
190
+ --track "**/SPEC.md" \
191
+ --track "docs/specs/**"
156
192
  ```
157
193
 
158
194
  Use an existing shared sidecar:
@@ -161,7 +197,7 @@ Use an existing shared sidecar:
161
197
  skeeper init \
162
198
  --sidecar git@github.com:user/shared-specs.git \
163
199
  --namespace project \
164
- --patterns "**/SPEC.md"
200
+ --track "**/SPEC.md"
165
201
  ```
166
202
 
167
203
  Then edit specs and commit normally:
@@ -176,74 +212,140 @@ The `pre-commit` and `pre-merge-commit` hooks mirror specs and stage `skeeper.lo
176
212
 
177
213
  ## 🛟 Failed Sync Recovery
178
214
 
179
- Inspect local repair state:
215
+ Start with status. It prints the health summary and the next action:
180
216
 
181
217
  ```bash
182
- skeeper repair status
218
+ skeeper status --paths
183
219
  ```
184
220
 
185
- Resume the recorded operation when network/auth/sidecar contention has been fixed:
221
+ Use repair as the single recovery door for broken local state, stale bypasses, hook drift, missing sidecar objects, and interrupted transactions:
186
222
 
187
223
  ```bash
188
- skeeper repair resume
224
+ skeeper repair
225
+ skeeper status --check
189
226
  ```
190
227
 
191
- Abort only before the main index has been mutated:
228
+ When two clones have different docs and both sides should be preserved, use the union workflow:
192
229
 
193
230
  ```bash
194
- skeeper repair abort
231
+ skeeper sync
232
+ git add skeeper.lock
233
+ git commit -m "skeeper: sync docs"
234
+ git push
195
235
  ```
196
236
 
197
- Run a fresh repair sync when a bypass or stale lock is reported:
237
+ ## 📖 CLI Reference
238
+
239
+ The public surface is intentionally small. `status` tells you what is wrong and what to run next; `repair` is the only public recovery door; Git hook and merge-driver plumbing runs through hidden `skeeper internal` commands.
240
+
241
+ <details>
242
+ <summary><code>skeeper init</code> — Create or connect a sidecar repository</summary>
198
243
 
199
244
  ```bash
200
- skeeper sync
201
- skeeper verify
245
+ skeeper init [flags]
202
246
  ```
203
247
 
204
- ## 📖 CLI Reference
248
+ Run `init` once per main repository. Without flags in an interactive terminal, it opens the guided setup. With flags, it can create a GitHub sidecar or connect an existing remote. `init` installs hooks and merge-driver wiring.
249
+
250
+ | Flag | Default | Description |
251
+ | ---------------- | --------- | ------------------------------------------------- |
252
+ | `--sidecar` | | Existing sidecar repository URL |
253
+ | `--sidecar-name` | | GitHub sidecar repository name or `OWNER/REPO` |
254
+ | `--visibility` | `private` | GitHub repository visibility |
255
+ | `--namespace` | | Sidecar namespace for this project |
256
+ | `--track` | | Managed spec glob; repeat for multiple globs |
257
+ | `--patterns` | | Compatibility spelling for managed spec globs |
258
+ | `--bootstrap` | | Optional install command stored in `.skeeper.yml` |
259
+
260
+ </details>
261
+
262
+ <details>
263
+ <summary><code>skeeper status</code> — Inspect sync health and next action</summary>
205
264
 
206
265
  ```bash
207
- skeeper init [flags]
208
- skeeper sync [--dry-run] [--json] [--commit --message <msg>] [--force]
209
- skeeper adopt <path-or-glob>... [--dry-run] [--json] [--force] [--commit --message <msg>]
266
+ skeeper status [--json] [--check] [--paths]
267
+ ```
268
+
269
+ Use `status` before guessing. It reports sidecar URL, current branch, lock state, hook health, namespace drift counts, bypass state, active transactions, diagnostics, and a next-action line. `--check` exits non-zero when Skeeper needs action, making it the CI health check. `--paths` includes per-path drift classes such as `local_only`, `missing_local`, `local_modified`, and `both_modified_conflict`.
270
+
271
+ </details>
272
+
273
+ <details>
274
+ <summary><code>skeeper pull</code>, <code>push</code>, and <code>sync</code> — Git-like spec convergence</summary>
275
+
276
+ ```bash
277
+ skeeper pull [--json] [--no-git]
278
+ skeeper push [--dry-run] [--json] [--commit --message <msg>] [--force] [--prune]
279
+ skeeper sync [--dry-run] [--json] [--commit --message <msg>] [--force] [--prune]
280
+ ```
281
+
282
+ Use `pull` to fetch sidecar refs and materialize remote docs into the working tree while preserving local docs. It fast-forwards the main repo unless `--no-git` is set.
283
+
284
+ Use `push` to publish local managed docs, write `skeeper.lock`, and stage the lockfile. By default `push` is non-destructive: remote-only docs stay in the sidecar.
285
+
286
+ Use `sync` for the common two-clone flow. It runs a sidecar pull, then a push, so disjoint docs from two clones converge to the union.
287
+
288
+ `--prune` is explicit and destructive: it deletes remote-only sidecar files that are absent locally.
289
+
290
+ </details>
291
+
292
+ <details>
293
+ <summary><code>skeeper restore</code> — Restore local files from locked sidecar state</summary>
294
+
295
+ ```bash
296
+ skeeper restore <path...> [--dry-run] [--json]
297
+ skeeper restore --all [--dry-run] [--json]
298
+ ```
299
+
300
+ Use `restore <path>` to overwrite selected local files with the content pinned by `skeeper.lock`. Existing local content is moved into rescue storage before overwrite. Use `restore --all` after a fresh clone, bisect, or checkout when you need every locked managed file materialized locally. Use `pull` when you want the latest remote sidecar tip instead of the locked state.
301
+
302
+ </details>
303
+
304
+ <details>
305
+ <summary><code>skeeper track</code> and <code>untrack</code> — Change managed coverage</summary>
306
+
307
+ ```bash
308
+ skeeper track <glob> [--namespace <name>] [--exclude <glob>]... [--sync] [--dry-run] [--json] [--force] [--commit --message <msg>]
210
309
  skeeper untrack <path-or-glob>... [--dry-run] [--json] [--force] [--commit --message <msg>]
211
- skeeper pattern test <glob> [--namespace <name>] [--json]
212
- skeeper pattern add <glob> [--namespace <name>] [--exclude <glob>]... [--adopt-existing] [--dry-run] [--json] [--force] [--commit --message <msg>]
213
- skeeper hydrate [--dry-run] [--json] [--keep-local|--adopt-local|--prune-local|--merge] [--ours|--theirs]
214
- skeeper reconcile [--dry-run] [--json] [--adopt-local|--prune-local|--merge] [--ours|--theirs]
215
- skeeper diff [--json] [--namespace <name>] [--class <class>] [--extra] [--missing] [--modified]
216
- skeeper rescue list [--json]
217
- skeeper rescue restore <id> [path...] [--json] [--overwrite]
218
- skeeper update [--json] [--no-git] [--reconcile <report|keep-local|adopt-local|prune-local|merge>] [--ours|--theirs]
219
- skeeper status [--json]
220
- skeeper log <path> [--latest]
221
- skeeper fsck [--json] [--source-branch <branch>]
222
- skeeper verify [--json] [--source-branch <branch>]
223
- skeeper hooks install [--json]
224
- skeeper hooks check [--json]
225
- skeeper merge-driver [--json]
226
- skeeper repair status|resume|abort [--json]
310
+ ```
311
+
312
+ Use `track` to add a managed glob to `.skeeper.yml` and the managed `.gitignore` block. Add `--sync` when matching files already exist and should be published into the sidecar immediately.
313
+
314
+ Use `untrack` when a managed path should stop being tracked in the main repository after the sidecar has the content.
315
+
316
+ </details>
317
+
318
+ <details>
319
+ <summary><code>skeeper repair</code> — Diagnose and repair local Skeeper state</summary>
320
+
321
+ ```bash
322
+ skeeper repair [--check] [--json]
323
+ ```
324
+
325
+ `repair` handles hook drift, strict-hook bypasses, interrupted transactions, missing local sidecar objects, and rescue reporting. It applies safe repairs automatically and stops on ambiguous overwrite/delete decisions. Use `repair --check` for read-only diagnosis.
326
+
327
+ </details>
328
+
329
+ <details>
330
+ <summary><code>skeeper log</code>, <code>version</code>, and <code>completion</code> — Utility commands</summary>
331
+
332
+ ```bash
333
+ skeeper log <path> [--latest] [--source-branch <branch>]
227
334
  skeeper version
335
+ skeeper completion <bash|fish|powershell|zsh>
228
336
  ```
229
337
 
230
- Command notes:
338
+ `log` shows sidecar history for one managed spec path. By default it reads the locked commit; use `--latest` to fetch and inspect the latest namespace branch instead.
339
+
340
+ `version` prints build version, commit, and build date.
341
+
342
+ `completion` is provided by Cobra and generates shell completion scripts.
231
343
 
232
- - `sync` uses working-tree content and stages `skeeper.lock`. Hook mode uses staged index content.
233
- - `adopt` and `untrack` push sidecar coverage before removing main-index tracking.
234
- - `pattern add --adopt-existing` updates `.skeeper.yml`, updates the managed `.gitignore` block, then runs the same adoption transaction.
235
- - `verify` checks `skeeper.lock` against the sidecar remote and does not require hooks.
236
- - `fsck` compares current working-tree specs against locked sidecar content, reports exact drift paths, and does not mutate files or refs.
237
- - `hydrate` restores from locked sidecar commits by default, but fails closed if local managed files would be overwritten or orphaned.
238
- - `reconcile` is the explicit status/add/merge equivalent for managed documents. Use `--adopt-local` to publish local-only files, or `--prune-local` to move them to `.git/skeeper/rescue/<id>/` before restoring.
239
- - `diff` lists per-path drift classes such as `local_only`, `missing_local`, `local_modified`, and `both_modified_conflict`.
240
- - `update` is the high-level clone workflow for agents: safe fast-forward, verify, hydrate, fsck, and hook validation.
241
- - `log --latest` fetches the namespace branch and reads its latest history instead of the locked commit.
242
- - `hooks install` removes legacy Skeeper post-commit blocks, installs strict pre-commit/pre-merge-commit/pre-push blocks, writes `.gitattributes`, and configures the `skeeper.lock` merge driver.
344
+ </details>
243
345
 
244
346
  ## 🤖 CI Action
245
347
 
246
- Use the same-repository Action to verify `skeeper.lock` in CI:
348
+ Use the same-repository Action to check Skeeper health in CI:
247
349
 
248
350
  ```yaml
249
351
  name: skeeper
@@ -254,16 +356,17 @@ on:
254
356
  branches: [main]
255
357
 
256
358
  jobs:
257
- verify:
359
+ check:
258
360
  runs-on: ubuntu-latest
259
361
  steps:
260
362
  - uses: actions/checkout@v4
261
363
  with:
262
364
  fetch-depth: 0
263
- - uses: compozy/skeeper@v0.1.1
365
+ - uses: compozy/skeeper@v0.2.1
264
366
  with:
265
367
  args: |
266
- verify
368
+ status
369
+ --check
267
370
  --json
268
371
  ssh-private-key: ${{ secrets.SKEEPER_SSH_PRIVATE_KEY }}
269
372
  ```
@@ -274,29 +377,29 @@ Credential precedence:
274
377
  2. `token` configures HTTPS GitHub credentials.
275
378
  3. Existing runner Git/SSH credentials are used when neither input is provided.
276
379
 
277
- Secrets are masked before configuration. The wrapper downloads the released Skeeper binary for the action ref/tag and delegates verification to the CLI.
380
+ Secrets are masked before configuration. The wrapper downloads the released Skeeper binary for the action ref/tag and delegates the status check to the CLI.
278
381
 
279
382
  ## 🩺 Troubleshooting
280
383
 
281
384
  **`SKEEPER_SKIP=1` was used**
282
385
 
283
- Run `skeeper status`, then `skeeper sync`, then `skeeper verify`. The bypass journal remains visible until sync clears it.
386
+ Run `skeeper status`, then `skeeper sync`, then `skeeper status --check`. The bypass journal remains visible until sync clears it.
284
387
 
285
388
  **Sidecar push was rejected**
286
389
 
287
- Run `skeeper repair status`. If the failure happened before main-index mutation, fix network/auth or sidecar contention and run `skeeper repair resume`. If the main index was already mutated, inspect the listed files manually.
390
+ Run `skeeper repair --check`. If the failure is safe to repair automatically, run `skeeper repair` after fixing network/auth or sidecar contention. If the report names an ambiguous overwrite/delete decision, inspect the listed files manually and use `skeeper sync` after resolving it.
288
391
 
289
392
  **`skeeper.lock` conflicts during merge**
290
393
 
291
- Run `skeeper hooks install` to ensure the merge driver is configured, then rerun the merge. Manual editing of scalar sidecar SHAs is unsupported; regenerate the lock through `skeeper merge-driver` or `skeeper sync`.
394
+ Run `skeeper repair` to ensure hooks and merge-driver wiring are configured, then rerun the merge. Manual editing of scalar sidecar SHAs is unsupported; regenerate the lock through `skeeper sync`.
292
395
 
293
- **`skeeper hydrate` is blocked by local managed files**
396
+ **`skeeper pull` or `skeeper restore` is blocked by local managed files**
294
397
 
295
- Run `skeeper diff` to inspect exact paths. Use `skeeper reconcile --adopt-local` when the local files should be published into the sidecar, or `skeeper reconcile --prune-local` when they should be moved to rescue before restoring the locked content. Use `skeeper rescue list` and `skeeper rescue restore <id>` to recover pruned files.
398
+ Run `skeeper status --paths` to inspect exact paths. Use `skeeper sync` when local-only docs should be merged with remote docs. Use `skeeper push --prune` only when the local set is intentionally authoritative and remote-only docs should be pruned.
296
399
 
297
- **`verify` reports a lock mismatch**
400
+ **`status --check` reports a lock mismatch**
298
401
 
299
- The main commit and sidecar remote disagree. Run `skeeper sync`, include the updated `skeeper.lock`, and rerun `skeeper verify`.
402
+ The main commit and sidecar remote disagree. Run `skeeper sync`, include the updated `skeeper.lock`, and rerun `skeeper status --check`.
300
403
 
301
404
  **A namespace overlaps another namespace**
302
405
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@compozy/skeeper",
3
3
  "type": "module",
4
- "version": "0.2.1",
4
+ "version": "0.3.0",
5
5
  "description": "Sidecar Git versioning for spec artifacts",
6
6
  "scripts": {
7
7
  "postinstall": "node install.js",
@@ -27,63 +27,63 @@
27
27
  },
28
28
  "archives": {
29
29
  "darwin-arm64": {
30
- "name": "skeeper_0.2.1_darwin_arm64.tar.gz",
31
- "url": "https://github.com/compozy/skeeper/releases/download/v0.2.1/skeeper_0.2.1_darwin_arm64.tar.gz",
30
+ "name": "skeeper_0.3.0_darwin_arm64.tar.gz",
31
+ "url": "https://github.com/compozy/skeeper/releases/download/v0.3.0/skeeper_0.3.0_darwin_arm64.tar.gz",
32
32
  "bins": [
33
33
  "skeeper"
34
34
  ],
35
35
  "format": "tar.gz",
36
36
  "checksum": {
37
37
  "algorithm": "sha256",
38
- "digest": "0ce0b122891566136533442e176b05decc990bbe4e17bf01b290065276104392"
38
+ "digest": "3aa2e55272c6de252f6064cd35fbf4ce328715f6835c3810b6b18be2ba23cd84"
39
39
  }
40
40
  },
41
41
  "darwin-x64": {
42
- "name": "skeeper_0.2.1_darwin_x86_64.tar.gz",
43
- "url": "https://github.com/compozy/skeeper/releases/download/v0.2.1/skeeper_0.2.1_darwin_x86_64.tar.gz",
42
+ "name": "skeeper_0.3.0_darwin_x86_64.tar.gz",
43
+ "url": "https://github.com/compozy/skeeper/releases/download/v0.3.0/skeeper_0.3.0_darwin_x86_64.tar.gz",
44
44
  "bins": [
45
45
  "skeeper"
46
46
  ],
47
47
  "format": "tar.gz",
48
48
  "checksum": {
49
49
  "algorithm": "sha256",
50
- "digest": "5f7f2cf4ba83c3ed2f69eb388f04dce42b5e9f49009e307ede9b5200dcdc6621"
50
+ "digest": "d56c7ab028576cc50f6e9f3dd4b7c84909ef4baee6dfa9dcb9e98e32d77b0319"
51
51
  }
52
52
  },
53
53
  "linux-arm64": {
54
- "name": "skeeper_0.2.1_linux_arm64.tar.gz",
55
- "url": "https://github.com/compozy/skeeper/releases/download/v0.2.1/skeeper_0.2.1_linux_arm64.tar.gz",
54
+ "name": "skeeper_0.3.0_linux_arm64.tar.gz",
55
+ "url": "https://github.com/compozy/skeeper/releases/download/v0.3.0/skeeper_0.3.0_linux_arm64.tar.gz",
56
56
  "bins": [
57
57
  "skeeper"
58
58
  ],
59
59
  "format": "tar.gz",
60
60
  "checksum": {
61
61
  "algorithm": "sha256",
62
- "digest": "b10431032496f3091e2227ca2dd3fa660425f6224f1526b6086cb00a2f006396"
62
+ "digest": "457f1b62137886afa56cdbf48b902b01fc81abc10e4431619ca1a8bbca5b73e1"
63
63
  }
64
64
  },
65
65
  "linux-x64": {
66
- "name": "skeeper_0.2.1_linux_x86_64.tar.gz",
67
- "url": "https://github.com/compozy/skeeper/releases/download/v0.2.1/skeeper_0.2.1_linux_x86_64.tar.gz",
66
+ "name": "skeeper_0.3.0_linux_x86_64.tar.gz",
67
+ "url": "https://github.com/compozy/skeeper/releases/download/v0.3.0/skeeper_0.3.0_linux_x86_64.tar.gz",
68
68
  "bins": [
69
69
  "skeeper"
70
70
  ],
71
71
  "format": "tar.gz",
72
72
  "checksum": {
73
73
  "algorithm": "sha256",
74
- "digest": "b913b1e145d0cb81f32c3b968e429810942237df0e3f93af2ebd10714409437d"
74
+ "digest": "58697a19879045eb0c6f5d92711697f58f78926dc87e772608e8cf99bc614525"
75
75
  }
76
76
  },
77
77
  "win32-x64": {
78
- "name": "skeeper_0.2.1_windows_x86_64.zip",
79
- "url": "https://github.com/compozy/skeeper/releases/download/v0.2.1/skeeper_0.2.1_windows_x86_64.zip",
78
+ "name": "skeeper_0.3.0_windows_x86_64.zip",
79
+ "url": "https://github.com/compozy/skeeper/releases/download/v0.3.0/skeeper_0.3.0_windows_x86_64.zip",
80
80
  "bins": [
81
81
  "skeeper.exe"
82
82
  ],
83
83
  "format": "zip",
84
84
  "checksum": {
85
85
  "algorithm": "sha256",
86
- "digest": "0dc47392a8427bf29242ee92e72971cb8b4020ee78c03e6477ee0467523f8dd3"
86
+ "digest": "630c98e8f22fb91777602c704a4e21a70532dfada3bb604477a1997d95951768"
87
87
  }
88
88
  }
89
89
  }