@anytio/pspm 0.3.2 → 0.4.1

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,94 @@ 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.1] - 2026-02-09
9
+
10
+ ### Changed
11
+
12
+ - Updated all outdated dependencies
13
+
14
+ ### Added
15
+
16
+ - Store SKILL.md content in database and display on package detail page
17
+
18
+ ## [0.4.0] - 2026-02-09
19
+
20
+ ### Added
21
+
22
+ - **Publish size limit (10MB)**: Packages exceeding 10MB are rejected with actionable suggestions
23
+ - Client-side validation catches oversized packages before upload
24
+ - Server-side schema validation updated from 50MB to 10MB
25
+ - Helpful error messages suggest using `files` field, `.pspmignore`, or removing build artifacts
26
+
27
+ - **Publish preview with confirmation**: Users now see a full preview before publishing
28
+ - Displays tarball contents with file sizes (sorted by size)
29
+ - Shows package size, unpacked size, file count, and integrity hashes
30
+ - Requires explicit confirmation (`y/N`) before uploading to registry
31
+
32
+ ## [0.3.4] - 2026-01-29
33
+
34
+ ### Added
35
+
36
+ - **`version` command**: Bump package version in `pspm.json` without publishing (like `npm version`)
37
+ - `pspm version major` - Bump major version (1.0.0 → 2.0.0)
38
+ - `pspm version minor` - Bump minor version (1.0.0 → 1.1.0)
39
+ - `pspm version patch` - Bump patch version (1.0.0 → 1.0.1)
40
+ - `pspm version patch --dry-run` - Preview changes without writing
41
+
42
+ - **Visibility support for publish command**: Set package visibility during publish
43
+ - `pspm publish --access public` - Publish and make public in one step
44
+ - `pspm publish --access private` - Explicitly publish as private
45
+
46
+ - **Dependency visibility in publish**: Published packages now include their dependencies in the manifest
47
+
48
+ ### Fixed
49
+
50
+ - **Registry subdomain compatibility**: SDK now correctly handles registry URLs with subdomains
51
+ - **Improved CLI error messages**: Better extraction and display of API error details
52
+
53
+ ## [0.3.3] - 2026-01-28
54
+
55
+ ### Fixed
56
+
57
+ - Strip registry subdomain for web app and server URLs
58
+
59
+ ## [0.3.2] - 2026-01-28
9
60
 
10
61
  ### Added
11
62
 
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}/`
63
+ - Registry subdomain support for multi-tenant deployments
20
64
 
21
- - **Enhanced `list` command**: Shows local packages with `[local]` indicator and path
65
+ ## [0.3.1] - 2026-01-27
22
66
 
23
67
  ### Changed
24
68
 
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
69
+ - Version bump for npm publish
70
+
71
+ ## [0.3.0] - 2026-01-27
72
+
73
+ ### Added
74
+
75
+ - **`.pspmignore` support for publish command**: Control which files are excluded when publishing or packing skill packages
76
+ - If `.pspmignore` exists, use it for ignore patterns (like `.npmignore`)
77
+ - Otherwise, fall back to `.gitignore` if present
78
+ - Always ignores `node_modules`, `.git`, and `.pspm-publish` regardless
79
+ - Displays which ignore file is being used during publish
80
+
81
+ - **Local directory support (file: protocol)**: Install skills from local directories for development and testing
82
+ - `pspm add file:../path/to/skill` - Install from local directory
83
+ - `pspm add ../my-skill` - Also works without the `file:` prefix
84
+ - Creates symlinks in `.pspm/skills/_local/{name}` for instant updates
85
+ - `localDependencies` field in `pspm.json` for local packages
86
+ - `localPackages` in lockfile (v4) tracks installed local packages
87
+ - Validates that directory exists and contains SKILL.md or pspm.json
88
+ - Provides helpful error messages: "Directory not found", "Not a valid skill directory"
89
+
90
+ ### Fixed
91
+
92
+ - **Improved error messages for `access` command**: Now provides specific feedback for different specifier types
93
+ - GitHub specifiers explain that visibility only applies to registry packages
94
+ - Local file specifiers explain they are not registry packages
95
+ - Invalid registry specifiers show examples of correct format
28
96
 
29
97
  ## [0.2.0] - 2026-01-23
30
98
 
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`: