@anytio/pspm 0.12.0 → 0.14.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/CHANGELOG.md CHANGED
@@ -5,6 +5,30 @@ All notable changes to the PSPM CLI will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.14.0] - 2026-05-02
9
+
10
+ ### Added
11
+
12
+ - **Unpublish org skills**: `pspm unpublish @org/myorg/skill-name` now routes to the org delete endpoint and works for org-namespaced packages. Version-specific deletion for org skills is not yet supported server-side and returns a clear error.
13
+
14
+ ### Changed
15
+
16
+ - Replaced tsup with tsdown (rolldown-based) for ESM bundling
17
+ - Upgraded TypeScript to 6.0 and updated all dependencies to latest versions
18
+ - Internal: workspace package scope renamed from `@repo/*` to `@anytio/*`
19
+ - Internal: split large files/functions and added unit tests for CLI helpers (no behavior changes)
20
+
21
+ ## [0.13.0] - 2026-03-24
22
+
23
+ ### Added
24
+
25
+ - **Client-side encryption for private packages**: Encrypt skill packages before publishing with AES-256-GCM encryption
26
+ - `pspm config set-encryption-key` — Set an encryption key for a scope (`@user/x` or `@org/x`)
27
+ - `pspm config get-encryption-key` — Check if an encryption key is set for a scope
28
+ - `pspm config remove-encryption-key` — Remove an encryption key for a scope
29
+ - Private packages are automatically encrypted on publish and decrypted on install when a key is configured
30
+ - Uses scrypt key derivation for secure key management
31
+
8
32
  ## [0.12.0] - 2026-03-19
9
33
 
10
34
  ### Added
@@ -103,7 +127,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
103
127
  - **`audit` command**: Verify integrity of installed skills
104
128
  - Checks for missing packages, deprecated versions, corrupted installations
105
129
  - `--json` flag for CI integration
106
- - **Expanded agent support**: From 6 to 41 supported AI coding agents
130
+ - **Expanded agent support**: From 6 to 41 supported AI agents
107
131
  - Added Windsurf, Amp, Augment, Cline, Continue, Goose, Kilo Code, Kiro CLI, OpenCode, OpenHands, Replit, Roo Code, Trae, and 22 more
108
132
 
109
133
  ### Changed
@@ -130,7 +154,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
130
154
 
131
155
  ### Fixed
132
156
 
133
- - **Fix npm install failure**: Moved `@repo/types` and `@repo/skill-registry` from `dependencies` to `devDependencies` to prevent npm from trying to install workspace-only packages from the public registry
157
+ - **Fix npm install failure**: Moved `@anytio/types` and `@anytio/skill-registry` from `dependencies` to `devDependencies` to prevent npm from trying to install workspace-only packages from the public registry
134
158
 
135
159
  ## [0.7.1] - 2026-03-02
136
160
 
package/CLI_GUIDE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # PSPM CLI Guide
2
2
 
3
- PSPM is a package manager for AI agent skills. It provides commands for authentication, configuration, skill management, and publishing across AI coding agents.
3
+ PSPM is a package manager for AI agent skills. It provides commands for authentication, configuration, skill management, and publishing across AI agents.
4
4
 
5
5
  ## Installation
6
6
 
@@ -24,7 +24,7 @@ Options:
24
24
  -h, --help display help for command
25
25
 
26
26
  Commands:
27
- config Manage PSPM configuration
27
+ config Manage PSPM configuration (show, init, set-encryption-key, get-encryption-key, remove-encryption-key)
28
28
  login [options] Log in via browser or with an API key
29
29
  logout Log out and clear stored credentials
30
30
  whoami Show current user information
@@ -36,11 +36,17 @@ Commands:
36
36
  install|i [options] [specifiers...] Install skills from lockfile, or add and install specific packages
37
37
  link [options] Recreate agent symlinks without reinstalling
38
38
  update [options] Update all skills to latest compatible versions
39
+ search|find [options] [query] Search and discover skills from the registry
40
+ audit [options] Verify integrity of installed skills
41
+ outdated [options] [packages...] Check for outdated skills
39
42
  version <bump> Bump package version (major, minor, patch)
40
43
  publish [options] Publish current directory as a skill
41
44
  unpublish [options] <specifier> Remove a published skill version (only within 72 hours of publishing)
42
45
  access [options] [specifier] Change package visibility (public/private)
43
46
  deprecate [options] <specifier> [message] Mark a skill version as deprecated (alternative to unpublish after 72 hours)
47
+ skill-list Manage skill lists (list, create, show, update, delete, add-skill, remove-skill, install)
48
+ notebook Manage notebooks (upload, list, download, delete)
49
+ upgrade Update pspm itself to the latest version
44
50
  help [command] display help for command
45
51
  ```
46
52
 
@@ -171,6 +177,7 @@ pspm add @user/alice/skill1 @user/bob/skill2
171
177
  pspm add @user/skill --agent claude-code,cursor # Link to multiple agents
172
178
  pspm add github:owner/repo --agent none # Skip symlink creation
173
179
  pspm add @user/skill -y # Skip agent selection prompt
180
+ pspm add @user/skill -g # Install to user home directory
174
181
  ```
175
182
 
176
183
  ### Remove Skill
@@ -193,6 +200,9 @@ pspm ls
193
200
  # JSON output for scripting
194
201
  pspm list --json
195
202
 
203
+ # List global skills
204
+ pspm list -g
205
+
196
206
  # Example output:
197
207
  # Installed skills:
198
208
  #
@@ -219,6 +229,7 @@ pspm install --dir ./vendor/skills # Install to specific directory
219
229
  pspm install --agent claude-code,cursor # Link to multiple agents
220
230
  pspm install --agent none # Skip symlink creation
221
231
  pspm install -y # Skip agent selection prompt
232
+ pspm install -g # Install to user home directory
222
233
 
223
234
  # Install specific packages (like npm):
224
235
  pspm install @user/alice/skill1 github:org/repo
@@ -236,6 +247,7 @@ Recreate agent symlinks without reinstalling (useful after adding agents):
236
247
  pspm link
237
248
  pspm link --agent claude-code,cursor # Link to specific agents
238
249
  pspm link -y # Skip agent selection prompt
250
+ pspm link -g # Recreate global agent symlinks
239
251
  ```
240
252
 
241
253
  ### Update Skills
@@ -245,6 +257,39 @@ pspm update
245
257
  pspm update --dry-run # Preview updates without applying
246
258
  ```
247
259
 
260
+ ### Search Skills
261
+
262
+ Search and discover skills from the registry:
263
+
264
+ ```bash
265
+ pspm search typescript # Search by keyword
266
+ pspm find react # Alias for search
267
+ pspm search react --json # JSON output
268
+ pspm search --sort recent --limit 10
269
+ ```
270
+
271
+ ### Check Outdated Skills
272
+
273
+ ```bash
274
+ pspm outdated # Check all packages
275
+ pspm outdated code-review # Check specific package
276
+ pspm outdated --json # JSON output
277
+ pspm outdated --all # Include up-to-date packages
278
+ ```
279
+
280
+ Exits with code `1` if any packages are outdated.
281
+
282
+ ### Audit Skills
283
+
284
+ Verify integrity of installed skills:
285
+
286
+ ```bash
287
+ pspm audit # Human-readable output
288
+ pspm audit --json # JSON output (for CI)
289
+ ```
290
+
291
+ Checks for: missing packages, deprecated versions, corrupted installations.
292
+
248
293
  ## Versioning
249
294
 
250
295
  ### Bump Version
@@ -276,12 +321,15 @@ The command:
276
321
  Publish the current directory as a skill:
277
322
 
278
323
  ```bash
279
- pspm publish
280
- pspm publish --bump patch # Auto-bump version (major, minor, patch)
281
- pspm publish --bump minor --tag beta
282
- pspm publish --access public # Publish and make public in one step
324
+ pspm publish --access public # Publish as public
325
+ pspm publish --access private # Publish as private
326
+ pspm publish --access team --org myorg # Publish under org
327
+ pspm publish --access public --bump patch # Auto-bump version
328
+ pspm publish --access public --bump minor --tag beta
283
329
  ```
284
330
 
331
+ The `--access` flag is required and must be `public`, `private`, or `team`.
332
+
285
333
  **Required `pspm.json` fields:**
286
334
  - `name` - Skill name (e.g., `@user/username/skillname`)
287
335
  - `version` - Semver version
@@ -298,13 +346,18 @@ Remove a published skill version (only within 72 hours of publishing):
298
346
  ```bash
299
347
  pspm unpublish <specifier> --force
300
348
 
301
- # Delete specific version
349
+ # Delete specific version (user skills only)
302
350
  pspm unpublish @user/bsheng/vite_slides@2.0.0 --force
303
351
 
304
- # Delete all versions
352
+ # Delete all versions (user skill)
305
353
  pspm unpublish @user/bsheng/vite_slides --force
354
+
355
+ # Delete all versions (org skill)
356
+ pspm unpublish @org/myorg/team-skill --force
306
357
  ```
307
358
 
359
+ **Note:** Version-specific deletion for org skills is not yet supported. Use the full skill specifier without a version to delete the entire org skill.
360
+
308
361
  ### Deprecate Skill
309
362
 
310
363
  Mark a skill version as deprecated (alternative to unpublish after 72 hours):
@@ -338,6 +391,88 @@ pspm access @user/bsheng/vite_slides --public
338
391
  - **Private packages** (default): Require authentication to download
339
392
  - **Public packages**: Anyone can download without authentication
340
393
 
394
+ ## Client-Side Encryption
395
+
396
+ Private packages can be encrypted before upload so that the PSPM server and storage (R2) only ever see ciphertext. The encryption key never leaves your machine.
397
+
398
+ ### How It Works
399
+
400
+ - **Publish:** If an encryption key is set for the package scope, the CLI encrypts the tarball with AES-256-GCM before uploading. The server stores only ciphertext.
401
+ - **Install:** The CLI checks the package manifest for encryption metadata. If present, it decrypts the tarball locally before extracting.
402
+ - **Public packages** are never encrypted — encryption only applies to `private` and `team` visibility.
403
+
404
+ ### Set an Encryption Key
405
+
406
+ Each scope (`@user/yourname` or `@org/orgname`) has one encryption key. All private packages under that scope use the same key.
407
+
408
+ ```bash
409
+ # Set encryption key for your user scope
410
+ pspm config set-encryption-key @user/yourname my-secret-passphrase
411
+
412
+ # Set encryption key for an organization
413
+ pspm config set-encryption-key @org/myorg shared-team-secret
414
+ ```
415
+
416
+ Or use environment variables:
417
+
418
+ ```bash
419
+ export PSPM_ENCRYPTION_KEY_USER_YOURNAME="my-secret-passphrase"
420
+ export PSPM_ENCRYPTION_KEY_ORG_MYORG="shared-team-secret"
421
+ ```
422
+
423
+ ### Manage Encryption Keys
424
+
425
+ ```bash
426
+ # Check if a key is set
427
+ pspm config get-encryption-key @user/yourname
428
+
429
+ # Remove a key
430
+ pspm config remove-encryption-key @user/yourname
431
+ ```
432
+
433
+ ### Publish with Encryption
434
+
435
+ When you publish a private package and an encryption key is configured for the scope, the CLI automatically encrypts:
436
+
437
+ ```bash
438
+ pspm config set-encryption-key @user/yourname my-secret
439
+ pspm publish --access private
440
+ # Output: pspm notice Encrypting package (scope: @user/yourname)
441
+ ```
442
+
443
+ If no encryption key is set, the package is uploaded unencrypted with a warning.
444
+
445
+ ### Install Encrypted Packages
446
+
447
+ ```bash
448
+ # Set the same key used during publish
449
+ pspm config set-encryption-key @user/yourname my-secret
450
+
451
+ # Install as usual — decryption is automatic
452
+ pspm install
453
+ ```
454
+
455
+ If you don't have the key, the CLI will show an error with instructions:
456
+
457
+ ```
458
+ Error: Package @user/yourname/my-skill is encrypted.
459
+ Set the key: pspm config set-encryption-key @user/yourname <passphrase>
460
+ ```
461
+
462
+ ### Team Sharing
463
+
464
+ For organization packages, share the encryption key with team members through a secure channel (e.g., a password manager). Each team member adds it to their local config:
465
+
466
+ ```bash
467
+ pspm config set-encryption-key @org/myorg shared-team-secret
468
+ ```
469
+
470
+ ### Important Notes
471
+
472
+ - **Key loss = data loss.** If you lose your encryption key, encrypted packages cannot be recovered. Back up your keys.
473
+ - The server stores encryption metadata (algorithm, salt, IV) alongside the package — these are not secrets and are safe to store publicly.
474
+ - Encryption is opt-in. If no key is configured, private packages are uploaded unencrypted.
475
+
341
476
  ## Configuration Files
342
477
 
343
478
  ### User Config: `~/.pspmrc`
@@ -357,6 +492,10 @@ username = myuser
357
492
  ; Multi-registry: Per-registry tokens (optional)
358
493
  //pspm.dev:authToken = sk_public_token
359
494
  //corp.pspm.io:authToken = sk_corp_token
495
+
496
+ ; Encryption keys (optional)
497
+ encryption-key:@user/yourname = my-secret-passphrase
498
+ encryption-key:@org/myorg = shared-team-secret
360
499
  ```
361
500
 
362
501
  ### Project Config: `.pspmrc`
@@ -441,6 +580,7 @@ Configuration is resolved in priority order:
441
580
  | `PSPM_API_KEY` | Override API key |
442
581
  | `PSPM_DEBUG` | Enable debug logging |
443
582
  | `GITHUB_TOKEN` | GitHub token for private repos and higher rate limits |
583
+ | `PSPM_ENCRYPTION_KEY_<SCOPE>` | Encryption key for a scope (e.g., `PSPM_ENCRYPTION_KEY_USER_ALICE`) |
444
584
 
445
585
  ## Directory Structure
446
586
 
@@ -517,6 +657,106 @@ pspm init
517
657
  pspm publish --bump patch
518
658
  ```
519
659
 
660
+ ## Skill Lists
661
+
662
+ ### List Skill Lists
663
+
664
+ ```bash
665
+ pspm skill-list list # Your lists
666
+ pspm skill-list list --org myorg # Organization's lists
667
+ pspm skill-list list --json # JSON output
668
+ ```
669
+
670
+ ### Create Skill List
671
+
672
+ ```bash
673
+ pspm skill-list create my-favorites
674
+ pspm skill-list create my-favorites --visibility public
675
+ pspm skill-list create team-tools --org myorg -d "Our team's tools"
676
+ ```
677
+
678
+ ### Show Skill List
679
+
680
+ ```bash
681
+ pspm skill-list show @user/alice/my-favorites
682
+ pspm skill-list show @org/myorg/team-tools --json
683
+ ```
684
+
685
+ ### Update Skill List
686
+
687
+ ```bash
688
+ pspm skill-list update @user/alice/my-favorites --description "Updated desc"
689
+ pspm skill-list update @user/alice/my-favorites --visibility public
690
+ ```
691
+
692
+ ### Delete Skill List
693
+
694
+ ```bash
695
+ pspm skill-list delete @user/alice/my-favorites
696
+ ```
697
+
698
+ ### Add Skill to List
699
+
700
+ ```bash
701
+ pspm skill-list add-skill @user/alice/my-favorites @user/bob/code-review
702
+ pspm skill-list add-skill @user/alice/my-favorites @user/bob/lint --note "Great for CI"
703
+ ```
704
+
705
+ ### Remove Skill from List
706
+
707
+ ```bash
708
+ pspm skill-list remove-skill @user/alice/my-favorites @user/bob/code-review
709
+ ```
710
+
711
+ ### Install from Skill List
712
+
713
+ ```bash
714
+ pspm skill-list install @user/alice/my-favorites
715
+ pspm skill-list install @org/myorg/team-tools --agent claude-code
716
+ ```
717
+
718
+ ## Notebook Management
719
+
720
+ ### Upload Notebook
721
+
722
+ ```bash
723
+ pspm notebook upload notebook.anyt.md
724
+ pspm notebook upload notebook.anyt.md --visibility public
725
+ pspm notebook upload notebook.anyt.md --org myorg
726
+ ```
727
+
728
+ ### List Notebooks
729
+
730
+ ```bash
731
+ pspm notebook list
732
+ pspm notebook list --org myorg
733
+ pspm notebook list --json
734
+ ```
735
+
736
+ ### Download Notebook
737
+
738
+ ```bash
739
+ pspm notebook download <id>
740
+ ```
741
+
742
+ ### Delete Notebook
743
+
744
+ ```bash
745
+ pspm notebook delete <id>
746
+ ```
747
+
748
+ ## Self-Update
749
+
750
+ ### Upgrade PSPM
751
+
752
+ Update pspm itself to the latest version:
753
+
754
+ ```bash
755
+ pspm upgrade
756
+ ```
757
+
758
+ Auto-detects your package manager (pnpm, npm, yarn, bun). The CLI also checks for updates every 24 hours and notifies you when a newer version is available.
759
+
520
760
  ## Troubleshooting
521
761
 
522
762
  | Error | Solution |
package/README.md CHANGED
@@ -130,6 +130,8 @@ pspm install
130
130
  | `pspm login` | Authenticate via browser or API key |
131
131
  | `pspm skill-list <subcommand>` | Manage skill lists (list, create, show, delete, update, add-skill, remove-skill, install) |
132
132
  | `pspm notebook <subcommand>` | Manage notebooks (upload, list, download, delete) |
133
+ | `pspm config <subcommand>` | Manage configuration and per-scope encryption keys (show, init, set/get/remove-encryption-key) |
134
+ | `pspm migrate` | Migrate from older on-disk skill directory layouts |
133
135
  | `pspm upgrade` | Update pspm itself to the latest version |
134
136
 
135
137
  ### `pspm install`
@@ -445,7 +447,7 @@ project/
445
447
  | | +-- _local/ # Local skill symlinks
446
448
  | +-- cache/ # Tarball cache
447
449
  +-- .claude/
448
- | +-- skills/ # Symlinks for Claude Code
450
+ | +-- skills/ # Symlinks for Claude Code (and other agents)
449
451
  +-- .cursor/
450
452
  +-- skills/ # Symlinks for Cursor (if configured)
451
453
  ```
@@ -514,4 +516,4 @@ Auto-detects your package manager (pnpm, npm, yarn, bun). The CLI also checks fo
514
516
 
515
517
  This project is licensed under [The Artistic License 2.0](LICENSE), the same license used by npm.
516
518
 
517
- <!-- @doc-sync: 1f5c64d | 2026-03-18 10:30 -->
519
+ <!-- @doc-sync: 99b1a4a | 2026-04-24 13:00 -->