@anytio/pspm 0.3.2 → 0.4.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,26 +5,84 @@ 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.3.0] - 2026-01-27
8
+ ## [0.4.0] - 2026-02-09
9
9
 
10
10
  ### Added
11
11
 
12
- - **Local directory support**: Install skills directly from local directories using the `file:` protocol
13
- - `pspm add file:../my-skill` - Install from relative path
14
- - `pspm add file:/absolute/path/to/skill` - Install from absolute path
15
- - `pspm add ../my-skill` - Auto-detected as `file:../my-skill`
16
- - Local packages are symlinked (not copied) for instant updates during development
17
- - `localDependencies` section in `pspm.json`
18
- - `localPackages` section in lockfile (version 5)
19
- - Local packages stored as symlinks in `.pspm/skills/_local/{name}/`
12
+ - **Publish size limit (10MB)**: Packages exceeding 10MB are rejected with actionable suggestions
13
+ - Client-side validation catches oversized packages before upload
14
+ - Server-side schema validation updated from 50MB to 10MB
15
+ - Helpful error messages suggest using `files` field, `.pspmignore`, or removing build artifacts
16
+
17
+ - **Publish preview with confirmation**: Users now see a full preview before publishing
18
+ - Displays tarball contents with file sizes (sorted by size)
19
+ - Shows package size, unpacked size, file count, and integrity hashes
20
+ - Requires explicit confirmation (`y/N`) before uploading to registry
21
+
22
+ ## [0.3.4] - 2026-01-29
23
+
24
+ ### Added
25
+
26
+ - **`version` command**: Bump package version in `pspm.json` without publishing (like `npm version`)
27
+ - `pspm version major` - Bump major version (1.0.0 → 2.0.0)
28
+ - `pspm version minor` - Bump minor version (1.0.0 → 1.1.0)
29
+ - `pspm version patch` - Bump patch version (1.0.0 → 1.0.1)
30
+ - `pspm version patch --dry-run` - Preview changes without writing
31
+
32
+ - **Visibility support for publish command**: Set package visibility during publish
33
+ - `pspm publish --access public` - Publish and make public in one step
34
+ - `pspm publish --access private` - Explicitly publish as private
35
+
36
+ - **Dependency visibility in publish**: Published packages now include their dependencies in the manifest
37
+
38
+ ### Fixed
39
+
40
+ - **Registry subdomain compatibility**: SDK now correctly handles registry URLs with subdomains
41
+ - **Improved CLI error messages**: Better extraction and display of API error details
42
+
43
+ ## [0.3.3] - 2026-01-28
44
+
45
+ ### Fixed
20
46
 
21
- - **Enhanced `list` command**: Shows local packages with `[local]` indicator and path
47
+ - Strip registry subdomain for web app and server URLs
48
+
49
+ ## [0.3.2] - 2026-01-28
50
+
51
+ ### Added
52
+
53
+ - Registry subdomain support for multi-tenant deployments
54
+
55
+ ## [0.3.1] - 2026-01-27
22
56
 
23
57
  ### Changed
24
58
 
25
- - Lockfile version bumped to 5 to support `localPackages`
26
- - `install` command now processes local dependencies (Phase 2.5 resolve, Phase 4.5 install)
27
- - `remove` command now handles local package removal
59
+ - Version bump for npm publish
60
+
61
+ ## [0.3.0] - 2026-01-27
62
+
63
+ ### Added
64
+
65
+ - **`.pspmignore` support for publish command**: Control which files are excluded when publishing or packing skill packages
66
+ - If `.pspmignore` exists, use it for ignore patterns (like `.npmignore`)
67
+ - Otherwise, fall back to `.gitignore` if present
68
+ - Always ignores `node_modules`, `.git`, and `.pspm-publish` regardless
69
+ - Displays which ignore file is being used during publish
70
+
71
+ - **Local directory support (file: protocol)**: Install skills from local directories for development and testing
72
+ - `pspm add file:../path/to/skill` - Install from local directory
73
+ - `pspm add ../my-skill` - Also works without the `file:` prefix
74
+ - Creates symlinks in `.pspm/skills/_local/{name}` for instant updates
75
+ - `localDependencies` field in `pspm.json` for local packages
76
+ - `localPackages` in lockfile (v4) tracks installed local packages
77
+ - Validates that directory exists and contains SKILL.md or pspm.json
78
+ - Provides helpful error messages: "Directory not found", "Not a valid skill directory"
79
+
80
+ ### Fixed
81
+
82
+ - **Improved error messages for `access` command**: Now provides specific feedback for different specifier types
83
+ - GitHub specifiers explain that visibility only applies to registry packages
84
+ - Local file specifiers explain they are not registry packages
85
+ - Invalid registry specifiers show examples of correct format
28
86
 
29
87
  ## [0.2.0] - 2026-01-23
30
88
 
package/CLI_GUIDE.md CHANGED
@@ -36,6 +36,7 @@ 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
+ version <bump> Bump package version (major, minor, patch)
39
40
  publish [options] Publish current directory as a skill
40
41
  unpublish [options] <specifier> Remove a published skill version (only within 72 hours of publishing)
41
42
  access [options] [specifier] Change package visibility (public/private)
@@ -77,7 +78,7 @@ pspm whoami
77
78
  # Output:
78
79
  # Username: myuser
79
80
  # User ID: user_123
80
- # Registry: https://pspm.dev
81
+ # Registry: https://registry.pspm.dev
81
82
  ```
82
83
 
83
84
  ## Configuration
@@ -92,7 +93,7 @@ pspm config show
92
93
  # Output:
93
94
  # Resolved Configuration:
94
95
  #
95
- # Registry URL: https://pspm.dev
96
+ # Registry URL: https://registry.pspm.dev
96
97
  # API Key: ***
97
98
  # Username: myuser
98
99
  #
@@ -158,10 +159,10 @@ pspm add github:owner/repo@main # Entire repo, specific branch
158
159
  pspm add github:owner/repo/path/to/skill # Subdirectory, default branch
159
160
  pspm add github:owner/repo/path@v1.0.0 # Subdirectory with tag/ref
160
161
 
161
- # Local specifier formats:
162
- pspm add file:../my-skill # Relative path (symlinked)
162
+ # Local directory specifiers (for development):
163
+ pspm add file:../my-skill # Relative path
164
+ pspm add file:./local-skill # Current directory relative
163
165
  pspm add file:/absolute/path/to/skill # Absolute path
164
- pspm add ../my-skill # Auto-detected as file:../my-skill
165
166
 
166
167
  # Add multiple skills at once:
167
168
  pspm add @user/alice/skill1 @user/bob/skill2
@@ -201,10 +202,7 @@ pspm list --json
201
202
  # github:owner/repo/skills/react-tips (main@abc1234)
202
203
  # -> .claude/skills/react-tips, .cursor/skills/react-tips
203
204
  #
204
- # my-local-skill [local] <- ../my-local-skill
205
- # -> .claude/skills/my-local-skill
206
- #
207
- # Total: 3 skill(s) (1 registry, 1 github, 1 local)
205
+ # Total: 2 skill(s) (1 registry, 1 github)
208
206
  ```
209
207
 
210
208
  ### Install Skills
@@ -243,6 +241,30 @@ pspm update
243
241
  pspm update --dry-run # Preview updates without applying
244
242
  ```
245
243
 
244
+ ## Versioning
245
+
246
+ ### Bump Version
247
+
248
+ Bump the package version in `pspm.json` without publishing (similar to `npm version`):
249
+
250
+ ```bash
251
+ pspm version <bump>
252
+
253
+ # Bump types:
254
+ pspm version major # 1.0.0 → 2.0.0
255
+ pspm version minor # 1.0.0 → 1.1.0
256
+ pspm version patch # 1.0.0 → 1.0.1
257
+
258
+ # Options:
259
+ pspm version patch --dry-run # Preview what would change
260
+ ```
261
+
262
+ The command:
263
+ - Reads the current version from `pspm.json`
264
+ - Increments the version according to semver rules
265
+ - Writes the updated version back to `pspm.json`
266
+ - Outputs the new version (e.g., `v1.0.1`)
267
+
246
268
  ## Publishing
247
269
 
248
270
  ### Publish Skill
@@ -321,7 +343,7 @@ INI format configuration file:
321
343
  ```ini
322
344
  ; PSPM Configuration
323
345
 
324
- registry = https://pspm.dev
346
+ registry = https://registry.pspm.dev
325
347
  authToken = sk_...
326
348
  username = myuser
327
349
 
@@ -353,7 +375,16 @@ Package manifest file (created with `pspm init`):
353
375
  "version": "1.0.0",
354
376
  "description": "A helpful skill for...",
355
377
  "author": "Your Name",
356
- "files": ["pspm.json", "SKILL.md", "runtime", "scripts", "data"]
378
+ "files": ["pspm.json", "SKILL.md", "runtime", "scripts", "data"],
379
+ "dependencies": {
380
+ "@user/other/skill": "^1.0.0"
381
+ },
382
+ "githubDependencies": {
383
+ "github:owner/repo/skills/example": "main"
384
+ },
385
+ "localDependencies": {
386
+ "file:../my-local-skill": "*"
387
+ }
357
388
  }
358
389
  ```
359
390
 
@@ -361,12 +392,12 @@ Package manifest file (created with `pspm init`):
361
392
 
362
393
  ```json
363
394
  {
364
- "lockfileVersion": 5,
365
- "registryUrl": "https://pspm.dev",
395
+ "lockfileVersion": 4,
396
+ "registryUrl": "https://registry.pspm.dev",
366
397
  "packages": {
367
398
  "@user/bsheng/vite_slides": {
368
399
  "version": "2.0.0",
369
- "resolved": "https://pspm.dev/...",
400
+ "resolved": "https://registry.pspm.dev/...",
370
401
  "integrity": "sha256-abc123..."
371
402
  }
372
403
  },
@@ -380,11 +411,11 @@ Package manifest file (created with `pspm init`):
380
411
  }
381
412
  },
382
413
  "localPackages": {
383
- "file:../my-skill": {
414
+ "file:../my-local-skill": {
384
415
  "version": "local",
385
- "path": "../my-skill",
386
- "resolvedPath": "/absolute/path/to/my-skill",
387
- "name": "my-skill"
416
+ "path": "../my-local-skill",
417
+ "resolvedPath": "/absolute/path/to/my-local-skill",
418
+ "name": "my-local-skill"
388
419
  }
389
420
  }
390
421
  }
@@ -422,8 +453,8 @@ project/
422
453
  │ │ │ └── {owner}/
423
454
  │ │ │ └── {repo}/
424
455
  │ │ │ └── {path}/
425
- │ │ └── _local/ # Local skills (symlinks)
426
- │ │ └── {name} -> /path/to/source
456
+ │ │ └── _local/ # Local skill symlinks
457
+ │ │ └── {name} -> ../../../path/to/local/skill
427
458
  │ └── cache/ # Tarball cache
428
459
  ├── .claude/
429
460
  │ └── skills/ # Symlinks for claude-code agent
@@ -446,6 +477,31 @@ export PSPM_API_KEY=sk_ci_key
446
477
  pspm install --frozen-lockfile
447
478
  ```
448
479
 
480
+ ### Local Development Workflow
481
+
482
+ Use local dependencies to develop and test skills before publishing:
483
+
484
+ ```bash
485
+ # Add a local skill for development
486
+ pspm add file:../my-skill
487
+
488
+ # The skill is symlinked, so changes are instant
489
+ # No need to reinstall after editing the local skill
490
+
491
+ # When ready to publish
492
+ cd ../my-skill
493
+ pspm publish
494
+ ```
495
+
496
+ In your `pspm.json`:
497
+ ```json
498
+ {
499
+ "localDependencies": {
500
+ "file:../my-local-skill": "*"
501
+ }
502
+ }
503
+ ```
504
+
449
505
  ### Publishing Workflow
450
506
 
451
507
  ```bash
package/README.md CHANGED
@@ -100,10 +100,9 @@ pspm install # Install all from lockfile
100
100
  - `github:owner/repo/path/to/skill` - Subdirectory within repo
101
101
  - `github:owner/repo/path/to/skill@v1.0.0` - Subdirectory with tag
102
102
 
103
- **Local specifier formats:**
104
- - `file:../my-skill` - Relative path (symlinked, not copied)
105
- - `file:/absolute/path/to/skill` - Absolute path
106
- - `../my-skill` - Auto-detected as `file:../my-skill`
103
+ **Local directory specifiers (for development):**
104
+ - `file:../path/to/skill` - Install from local directory
105
+ - `file:./subdir/skill` - Relative path from current directory
107
106
 
108
107
  **Agent symlink options:**
109
108
  ```bash
@@ -114,6 +113,15 @@ pspm link --agent codex # Recreate symlinks for specifi
114
113
 
115
114
  Default is all agents (`claude-code`, `codex`, `cursor`, `gemini`, `kiro`, `opencode`). Use `--agent claude-code` to install for a single agent.
116
115
 
116
+ ### Versioning
117
+
118
+ ```bash
119
+ pspm version major # Bump major version (1.0.0 → 2.0.0)
120
+ pspm version minor # Bump minor version (1.0.0 → 1.1.0)
121
+ pspm version patch # Bump patch version (1.0.0 → 1.0.1)
122
+ pspm version patch --dry-run # Preview changes without writing
123
+ ```
124
+
117
125
  ### Publishing
118
126
 
119
127
  ```bash
@@ -124,6 +132,9 @@ pspm unpublish <spec> --force # Remove a published skill version
124
132
  pspm deprecate <spec> [msg] # Mark a version as deprecated
125
133
  ```
126
134
 
135
+ **Publish preview:** Before uploading, `pspm publish` shows a preview of included files, package size, and requires confirmation. Max package size is **10MB**.
136
+
137
+
127
138
  ### Visibility
128
139
 
129
140
  ```bash
@@ -148,7 +159,7 @@ PSPM uses a simple npm-like INI configuration format.
148
159
 
149
160
  ```ini
150
161
  ; PSPM Configuration
151
- registry = https://pspm.dev
162
+ registry = https://registry.pspm.dev
152
163
  authToken = sk_...
153
164
  username = myuser
154
165
  ```
@@ -166,12 +177,12 @@ registry = https://custom-registry.example.com
166
177
 
167
178
  ```json
168
179
  {
169
- "lockfileVersion": 5,
170
- "registryUrl": "https://pspm.dev",
180
+ "lockfileVersion": 4,
181
+ "registryUrl": "https://registry.pspm.dev",
171
182
  "packages": {
172
183
  "@user/username/skillname": {
173
184
  "version": "1.0.0",
174
- "resolved": "https://pspm.dev/...",
185
+ "resolved": "https://registry.pspm.dev/@user/username/skillname/1.0.0",
175
186
  "integrity": "sha256-..."
176
187
  }
177
188
  },
@@ -185,11 +196,11 @@ registry = https://custom-registry.example.com
185
196
  }
186
197
  },
187
198
  "localPackages": {
188
- "file:../my-skill": {
199
+ "file:../my-local-skill": {
189
200
  "version": "local",
190
- "path": "../my-skill",
191
- "resolvedPath": "/absolute/path/to/my-skill",
192
- "name": "my-skill"
201
+ "path": "../my-local-skill",
202
+ "resolvedPath": "/absolute/path/to/my-local-skill",
203
+ "name": "my-local-skill"
193
204
  }
194
205
  }
195
206
  }
@@ -220,8 +231,8 @@ project/
220
231
  │ │ │ └── repo/
221
232
  │ │ │ └── path/
222
233
  │ │ │ └── SKILL.md
223
- │ │ └── _local/ # Local skills (symlinks)
224
- │ │ └── my-skill -> /absolute/path/to/my-skill
234
+ │ │ └── _local/ # Local skill symlinks
235
+ │ │ └── skillname -> ../../../path/to/local/skill
225
236
  │ └── cache/ # Tarball cache
226
237
  ├── .claude/
227
238
  │ └── skills/ # Symlinks for claude-code agent
@@ -234,6 +245,23 @@ project/
234
245
  └── .pspmrc # User config
235
246
  ```
236
247
 
248
+ ## Ignoring Files (.pspmignore)
249
+
250
+ Control which files are excluded when publishing with a `.pspmignore` file:
251
+
252
+ ```
253
+ # .pspmignore - exclude files from publish
254
+ *.test.ts
255
+ __tests__/
256
+ .env*
257
+ *.log
258
+ ```
259
+
260
+ **Behavior:**
261
+ - If `.pspmignore` exists, use it for ignore patterns
262
+ - Otherwise, fall back to `.gitignore` if present
263
+ - Always ignores `node_modules`, `.git`, and `.pspm-publish` regardless
264
+
237
265
  ## Creating a Skill
238
266
 
239
267
  A skill is a directory containing at minimum a `pspm.json` and `SKILL.md`: