@skillsmith/cli 0.8.8 → 0.8.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 CHANGED
@@ -4,6 +4,106 @@ All notable changes to `@skillsmith/cli` are documented here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## v0.8.10
8
+
9
+ - **Fixed**: SMI-6472 -- `src/utils/skill-name.ts`'s re-export of `VALID_SKILL_NAME_RE`/`validateSkillName` now imports from the narrow `@skillsmith/core/utils/skill-name` subpath instead of the `@skillsmith/core` package barrel. The barrel import transitively pulled in `skill-installation.io.ts` -> `safe-fs.ts`'s `fs/promises` needs (`open`/`lstat`/`constants`), breaking `tests/create.test.ts`'s narrow `fs/promises` mock (`mkdir`/`writeFile`/`stat` only) with `[vitest] No "constants" export is defined on the "fs/promises" mock`. No behavior change — only the import path.
10
+
11
+ ## v0.8.9
12
+
13
+ - **Feature**: SMI-6343 Wave 3 -- tamper-check classification (#2710)
14
+ - **Added**: `skillsmith update` now refuses to force-install over an already-corrupt manifest
15
+ entry — before overwriting the currently-installed skill, it runs the same shared tamper-
16
+ check classification `skill_outdated` uses and skips (rather than updates) any entry
17
+ classified `local-drift`, `identity-mismatch`, or `unknown`, naming the reason in a new
18
+ `Skipped` bucket in the update summary (SMI-6343 Wave 3). `sklx list --outdated` similarly
19
+ no longer reports `hasUpdates: true` for a `local-drift`/owner-mismatch/path-unresolved
20
+ entry — only the two signals that don't require a network call (this scan is offline by
21
+ design); a signal-2-only (front-matter) corruption still surfaces through `skill_outdated`.
22
+ - **Fix**: `skills-directory.ts`'s `hasUpdates` computation (read by `sklx list --outdated`)
23
+ previously read a nonexistent `contentHash`/`originalContentHash` field off the *parsed
24
+ SKILL.md* object instead of the manifest entry, so it always fell back to comparing a fresh
25
+ on-disk hash against `skill_versions`' pre-fix metadata-proxy hash and could not correctly
26
+ report `hasUpdates: true` (SMI-6343 Wave 2). Now reads the manifest's real recorded install
27
+ hash and compares it via the shared `compareSkillContentHashes()` comparator, matching the
28
+ MCP server's `skill_outdated`/`skill_updates` tools.
29
+ - **Fix**: `utils/manifest.ts`'s `saveManifest()` — a homedir-derived manifest write with no
30
+ path-override parameter — now refuses to touch a manifest inside the real user home while
31
+ running under vitest, via `@skillsmith/core`'s newly-exported `assertNotRealUserHome()`
32
+ (SMI-6343 Wave 1 follow-up, adversarial review). Previously the test-run `$HOME` sandbox
33
+ was this write path's only protection.
34
+ - **Fix**: `skillsmith registry --help` now states that publishing and listing are MCP-only
35
+ today (`private_registry_publish`/`private_registry_manage`), pointing at those tools and
36
+ the private-registry docs page — matching already-shipped website copy. Two external
37
+ testers had each independently read the silent absence of `registry publish`/`list` as an
38
+ accidental gap; no new CLI subcommands (full CLI parity is tracked separately) (SMI-6266
39
+ Wave 8, SMI-6278)
40
+ - **Fix**: The MCP config snippet for Google Antigravity now sets `SKILLSMITH_CLIENT: "antigravity"`,
41
+ so copying it verbatim installs skills to AntiGravity's own directory instead of silently
42
+ falling back to Claude Code's default — the same fix Cursor got earlier. `command`/`args`
43
+ stay plain `npx` (AntiGravity has no known `npx`-resolution problem, unlike Cursor) (SMI-6266
44
+ Wave 7, SMI-6277)
45
+ - **Feature**: `skillsmith whoami` now shows your live effective license tier (and, when the
46
+ live check returns one, your per-minute API rate limit) alongside the existing masked-key/
47
+ session display, resolved via the same credential-aware `resolveEffectiveTier()` live check
48
+ `audit advisories`/`diff`/`pin`/`audit-collisions` already use (SMI-6271) — previously
49
+ `whoami` showed no tier information at all. Reuses the existing `formatTierBadge()` tier-badge
50
+ formatting rather than reimplementing it. Unlike those gating commands, a transient live-check
51
+ failure here does not block the command (this is a display command, not a gate) — it shows a
52
+ "could not verify" message instead of ever displaying a fabricated tier, since a single-shot
53
+ CLI invocation has no cached last-known tier to fall back to (SMI-6266 Wave 2, SMI-6272)
54
+ - **Feature**: `install`/`update`/`remove` gain a new `--scope <global|workspace>` flag
55
+ (ADR-139, SMI-6274 Wave 4) — `workspace` resolves against the nearest ancestor workspace
56
+ marker or `.git` root instead of the client's home-anchored global directory, creating the
57
+ workspace skills directory if none exists yet (the only path allowed to create one implicitly).
58
+ Precedence: `--scope` > `SKILLSMITH_SCOPE` env var > per-client `~/.skillsmith/config.json`
59
+ default > auto-detecting an EXISTING workspace directory > global (unchanged default — no
60
+ existing install moves, nothing changes for anyone who doesn't opt in). `remove`/`update` now
61
+ resolve against the exact `(scope, client, name)` triple rather than "whichever scope happened
62
+ to match by name." `list` now scans every client's workspace directory (not just Claude Code's
63
+ repo-local one) alongside every global directory, labels each row's scope, and marks a skill
64
+ present on disk with no manifest entry `[untracked]` instead of silently omitting it —
65
+ `remove`/`update` now adopt such a skill (reconstructing a manifest entry from disk) instead of
66
+ requiring `--force`. `agent install --scope workspace` can bootstrap AntiGravity as a target in
67
+ a fresh repo by creating `.agents/skills`. `getLocalSkillsDir()` is now a deprecated thin
68
+ wrapper delegating to the new resolver (also fixing a real bug: it previously never walked up
69
+ from `cwd`, so `list` run from a repo subdirectory silently missed the repo-root
70
+ `.claude/skills`)
71
+
72
+ - **Fix**: `skillsmith diagnose` now checks whether your Cursor MCP registration (both the
73
+ global `~/.cursor/mcp.json` and any project-scoped copy) is on the current, working config
74
+ shape and tells you how to fix it if not — previously nothing detected this at all once the
75
+ MCP server failed to even start, since the CLI's own update-nudge only fires from inside a
76
+ running MCP process (GH#2368, SMI-6279)
77
+
78
+ - **Fix**: `audit advisories`, `diff`, `pin`, `config get/set audit_mode`, and `audit-collisions`
79
+ now correctly recognize a personal `SKILLSMITH_API_KEY` or a logged-in `skillsmith login`
80
+ session — previously they only ever checked `SKILLSMITH_LICENSE_KEY` (an offline license key
81
+ almost nobody uses), so an Enterprise customer using either of the two common auth methods was
82
+ always reported as Community tier (GH#2508, GH#2509, SMI-6271). Live tier verification now
83
+ fails closed on a network/timeout error rather than silently passing or downgrading a real
84
+ paying customer
85
+
86
+ - **Fix**: `skillsmith login` (device-code flow) now refuses cleanly for SSO-provisioned users
87
+ instead of silently logging into the wrong account. Prints the server's refusal message and
88
+ points to the personal-API-key alternative (`/account/cli-token/` + `SKILLSMITH_API_KEY`).
89
+ Server-supplied error text is sanitized (control characters, bidi-override characters) before
90
+ being written to the terminal. Part of SMI-6206.
91
+
92
+ - **Breaking**: `sync` (and `sync config --enable`) now require Team+ tier — Community and
93
+ Individual tiers can no longer bulk-download the skill registry. The registry has grown far
94
+ larger than this feature was designed for (hundreds of thousands of records, still growing),
95
+ with no size warning or cost boundary until now. Enforced both client-side (fast, friendly
96
+ failure) and server-side (a new `registry-sync` Edge Function, so a direct API call or an
97
+ older CLI can't bypass the gate). Before syncing, the CLI now shows a live record count
98
+ fetched from the registry and asks for confirmation — pass `-y`/`--yes` to skip the prompt for
99
+ scripted/automated use (`--json` implies `--yes`). No deprecation window; see ADR-136 for the
100
+ full rationale (SMI-6236). Adversarial security review before merge found and fixed a real
101
+ regression in the client-side gate: it originally resolved tier from `SKILLSMITH_LICENSE_KEY`
102
+ only, which a user authenticated via the documented `skillsmith login` flow never has set —
103
+ such a user would have been incorrectly blocked as "community" even on a real Team plan. The
104
+ gate now resolves tier from whichever credential the sync request actually authenticates
105
+ with, deferring to the server's own response when it can't be resolved offline
106
+
7
107
  ## v0.8.8
8
108
 
9
109
  - **Fix**: logout/whoami now detect JWT device-code sessions (#2578)
package/README.md CHANGED
@@ -8,7 +8,7 @@ Part of Skillsmith: a registry for sharing, scanning, and tracking agent skills
8
8
 
9
9
  ## Contents
10
10
 
11
- - [What's New](#whats-new-in-v088)
11
+ - [What's New](#whats-new-in-v0810)
12
12
  - [Installation](#installation)
13
13
  - [Commands](#commands)
14
14
  - [inventory](#inventory)
@@ -16,7 +16,7 @@ Part of Skillsmith: a registry for sharing, scanning, and tracking agent skills
16
16
  - [Examples](#examples)
17
17
  - [Privacy & Data Handling](#privacy--data-handling)
18
18
 
19
- ## What's New in v0.8.8
19
+ ## What's New in v0.8.10
20
20
 
21
21
  - **Multi-client targeting fixed across the board**: `install`, `list`, `remove`, `update`, `sync`, and `search -i`'s install action now all honor `SKILLSMITH_CLIENT`/`--client` consistently — previously several of these silently acted on the Claude Code directory regardless of the flag or env var.
22
22
  - **`update` no longer fails after a fresh install**: now resolves the installed skill's registry source from the manifest `install` already writes, instead of a dead-code path that could never find it.
@@ -59,7 +59,7 @@ npm update -g @skillsmith/cli
59
59
  npm install -g @skillsmith/cli@latest
60
60
 
61
61
  # Using npx always gets the latest
62
- npx @skillsmith/cli@latest sync
62
+ npx @skillsmith/cli@latest --version
63
63
  ```
64
64
 
65
65
  ## Command Alias
@@ -432,12 +432,15 @@ skillsmith import --topic claude-skill --max 500
432
432
 
433
433
  ### sync
434
434
 
435
- Synchronize your local skill database with the live Skillsmith registry.
435
+ Synchronize your local skill database with the live Skillsmith registry (Team+ tier). The registry holds hundreds of thousands of skills, so `sync` shows a live record count and asks for confirmation before downloading — pass `-y`/`--yes` to skip the prompt for scripted or automated use (e.g. running the CLI on a Team's own cloud instance to maintain a shared local mirror).
436
436
 
437
437
  ```bash
438
438
  # Sync skills from registry (differential - only changes)
439
439
  skillsmith sync
440
440
 
441
+ # Skip the confirmation prompt (automation)
442
+ skillsmith sync --yes
443
+
441
444
  # Force full sync (ignore last sync time)
442
445
  skillsmith sync --force
443
446
 
@@ -448,6 +451,7 @@ skillsmith sync --dry-run
448
451
  **Options:**
449
452
  - `-f, --force` - Force full sync, ignore last sync timestamp
450
453
  - `--dry-run` - Preview changes without writing to database
454
+ - `-y, --yes` - Skip the confirmation prompt (for automation; also implied by `--json`)
451
455
  - `-d, --db <path>` - Database path
452
456
  - `--json` - Output results as JSON
453
457
 
@@ -489,7 +493,7 @@ Configure automatic sync settings.
489
493
  # Show current configuration
490
494
  skillsmith sync config --show
491
495
 
492
- # Enable automatic background sync
496
+ # Enable automatic background sync (Team+ tier)
493
497
  skillsmith sync config --enable
494
498
 
495
499
  # Disable automatic sync
@@ -841,6 +845,8 @@ skillsmith search --interactive
841
845
 
842
846
  ### Keep Skills Up-to-Date
843
847
 
848
+ `sync` and background auto-sync require Team+ tier — see [sync](#sync) above.
849
+
844
850
  ```bash
845
851
  # Sync with the live registry
846
852
  skillsmith sync
@@ -1 +1 @@
1
- 93f1c12d37b8d391f5574a4964e52d2745aba0a8
1
+ 5992a78b8d7fefcc5366d7b1a8c3f83c07ad056e