@anytio/pspm 0.5.1 → 0.7.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,23 @@ 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.7.0] - 2026-02-25
9
+
10
+ ### Changed
11
+
12
+ - **BREAKING: `--access` is now required for `pspm publish`** — You must explicitly specify `--access public` or `--access private` when publishing. Previously, omitting `--access` would default to public (free users) or private (pro users). This prevents accidental public publishes.
13
+
14
+ ## [0.6.0] - 2026-02-17
15
+
16
+ ### Changed
17
+
18
+ - **Auth-free read operations**: API key is no longer required for non-write operations (`add`, `install`, `update`, `list`, `link`). Only `publish`, `unpublish`, `deprecate`, `access`, and `whoami` now require authentication.
19
+ - Made `apiKey` parameter optional in SDK configuration, eliminating `apiKey ?? ""` workaround patterns
20
+
21
+ ### Fixed
22
+
23
+ - `update` command no longer blocks users without a PSPM API key when they only have GitHub or public packages installed
24
+
8
25
  ## [0.5.1] - 2026-02-10
9
26
 
10
27
  ### Changed
package/README.md CHANGED
@@ -125,13 +125,15 @@ pspm version patch --dry-run # Preview changes without writing
125
125
  ### Publishing
126
126
 
127
127
  ```bash
128
- pspm publish # Publish current directory as a skill
129
- pspm publish --bump patch # Auto-bump version (major, minor, patch)
130
- pspm publish --access public # Publish and make public in one step
131
- pspm unpublish <spec> --force # Remove a published skill version
132
- pspm deprecate <spec> [msg] # Mark a version as deprecated
128
+ pspm publish --access private # Publish as private (requires Pro)
129
+ pspm publish --access public # Publish as public (irreversible)
130
+ pspm publish --access private --bump patch # Bump version and publish
131
+ pspm unpublish <spec> --force # Remove a published skill version
132
+ pspm deprecate <spec> [msg] # Mark a version as deprecated
133
133
  ```
134
134
 
135
+ **`--access` is required.** You must specify `--access public` or `--access private` every time you publish. Private skills require a Pro subscription.
136
+
135
137
  **Publish preview:** Before uploading, `pspm publish` shows a preview of included files, package size, and requires confirmation. Max package size is **10MB**.
136
138
 
137
139
 
@@ -310,3 +312,5 @@ pspm install --frozen-lockfile
310
312
  ## License
311
313
 
312
314
  This project is licensed under [The Artistic License 2.0](LICENSE), the same license used by npm.
315
+
316
+ <!-- @doc-sync: 17484e41aef17ad72e470bb5511876ce0bdfcbb4 | 2026-02-20 15:00 -->
package/dist/index.js CHANGED
@@ -772,7 +772,7 @@ async function resolveRecursive(rootDeps, config2) {
772
772
  };
773
773
  configure2({
774
774
  registryUrl: config2.registryUrl,
775
- apiKey: config2.apiKey ?? ""
775
+ apiKey: config2.apiKey
776
776
  });
777
777
  const rangesByPackage = /* @__PURE__ */ new Map();
778
778
  const queue = [];
@@ -2047,7 +2047,7 @@ async function validateRegistryPackage(specifier) {
2047
2047
  );
2048
2048
  }
2049
2049
  const { username, name, versionRange } = parsed;
2050
- configure2({ registryUrl, apiKey: apiKey ?? "" });
2050
+ configure2({ registryUrl, apiKey });
2051
2051
  console.log(`Resolving ${specifier}...`);
2052
2052
  const versionsResponse = await listSkillVersions(username, name);
2053
2053
  if (versionsResponse.status !== 200) {
@@ -2843,7 +2843,7 @@ async function installFromLockfile(options) {
2843
2843
  }
2844
2844
  console.log(`Resolving ${missingDeps.length} new dependency(ies)...
2845
2845
  `);
2846
- configure2({ registryUrl, apiKey: apiKey ?? "" });
2846
+ configure2({ registryUrl, apiKey });
2847
2847
  for (const { fullName, versionRange } of missingDeps) {
2848
2848
  const parsed = parseSkillSpecifier(fullName);
2849
2849
  if (!parsed) {
@@ -4144,8 +4144,9 @@ init_lockfile2();
4144
4144
  init_add();
4145
4145
  async function update(options) {
4146
4146
  try {
4147
- const apiKey = await requireApiKey();
4148
- const registryUrl = await getRegistryUrl();
4147
+ const config2 = await resolveConfig();
4148
+ const registryUrl = config2.registryUrl;
4149
+ const apiKey = getTokenForRegistry(config2, registryUrl);
4149
4150
  const skills = await listLockfileSkills();
4150
4151
  if (skills.length === 0) {
4151
4152
  console.log("No skills installed.");
@@ -4380,11 +4381,19 @@ program.command("version <bump>").description("Bump package version (major, mino
4380
4381
  dryRun: options.dryRun
4381
4382
  });
4382
4383
  });
4383
- program.command("publish").description("Publish current directory as a skill").option("--bump <level>", "Bump version (major, minor, patch)").option("--tag <tag>", "Tag for the release").option("--access <level>", "Set package visibility (public or private)").action(async (options) => {
4384
+ program.command("publish").description("Publish current directory as a skill").option("--bump <level>", "Bump version (major, minor, patch)").option("--tag <tag>", "Tag for the release").requiredOption(
4385
+ "--access <level>",
4386
+ "Set package visibility (public or private)"
4387
+ ).action(async (options) => {
4388
+ const access3 = options.access;
4389
+ if (access3 !== "public" && access3 !== "private") {
4390
+ console.error('Error: --access must be "public" or "private"');
4391
+ process.exit(1);
4392
+ }
4384
4393
  await publishCommand({
4385
4394
  bump: options.bump,
4386
4395
  tag: options.tag,
4387
- access: options.access
4396
+ access: access3
4388
4397
  });
4389
4398
  });
4390
4399
  program.command("unpublish <specifier>").description(