@rayul/kordis 0.10.0 → 0.10.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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: kordis-publishing
3
- description: Use whenever the user wants to publish, share, or push a package to Kordis — phrases like "publish this", "share this skill to Kordis", "push this rule", "release a new version of <slug>", "bump the version", "semver", "버전 올리기", "yank", "withdraw a version", "unpublish a release", "철회". Covers dry-run flow, frontmatter requirements, version bump strategies, semver rules, yank/unyank for retracting bad releases, and the AI review pipeline.
3
+ description: Use whenever the user wants to publish, share, or push a package to Kordis — phrases like "publish this", "share this skill to Kordis", "push this rule", "release a new version of <slug>", "bump the version", "semver", "버전 올리기". Also covers retracting a bad or compromised release — "yank", "withdraw a version", "unpublish a release", "kill a release", "nuke a version", "take down a version", "recall a release", "we leaked a key in <version>", "compromised", "철회", "내리기". Covers dry-run flow, frontmatter requirements, version bump strategies, semver rules, yank/unyank for retracting bad releases, and the AI review pipeline.
4
4
  type: skill
5
5
  allowed-tools: ["Bash(kordis:*)", "Read", "Edit"]
6
6
  ---
@@ -41,8 +41,18 @@ single `.md` file that doesn't match the SKILL.md filename pattern.
41
41
  When a single release goes wrong — leaked secret, broken on platform X,
42
42
  superseded by an urgent fix — use **yank**, not delete.
43
43
 
44
- ### `kordis yank <full_slug>@<version> [--reason <text>] [--force]`
44
+ ### `kordis yank <full_slug>[@<version>] [--reason <text>] [--force]`
45
45
  Soft-marks the specific version as "unrecommended". Author-only.
46
+
47
+ **0.10.1+ — omit `@<version>` to yank the package's current version.**
48
+ Panic-mode shortcut: `kordis yank user/slug --reason "leaked AWS key"
49
+ --force` yanks whichever version is currently installed by bare-slug pulls
50
+ without needing a prior `kordis versions <slug>` round-trip. The CLI
51
+ displays `(current)` next to the resolved version in the confirmation
52
+ banner so you know what got picked. Explicit pins (`@1.2.3`) still
53
+ override.
54
+
55
+
46
56
  Versions yanked this way:
47
57
  - Disappear from `kordis pull <slug>` (bare slug) and from `@^X.Y` /
48
58
  `@X.x` / `@*` range resolution
package/dist/index.js CHANGED
@@ -4720,35 +4720,37 @@ import prompts3 from "prompts";
4720
4720
  function yankCommand() {
4721
4721
  return new Command13("yank").description("soft-mark a specific version of your package as yanked").argument(
4722
4722
  "<full_slug>",
4723
- 'package identifier with explicit version, e.g. "user/slug@1.2.3"'
4723
+ 'package identifier; omit @version to yank the current version, or pin like "user/slug@1.2.3"'
4724
4724
  ).option("--reason <text>", "optional reason shown to consumers (\u2264280 chars)").option("--force", "skip the confirmation prompt").action(
4725
4725
  async (fullSlugArg, opts) => {
4726
4726
  const parsed = parseSlugAtVersion(fullSlugArg);
4727
- if (!parsed.version) {
4727
+ if (parsed.range) {
4728
4728
  throw new Error(
4729
- 'yank requires an explicit version pin \u2014 use the form "user/slug@1.2.3" (range syntax not allowed)'
4729
+ "yank requires either no version (yanks current) or an explicit pin \u2014 range syntax not allowed"
4730
4730
  );
4731
4731
  }
4732
4732
  const bundle = await useClient();
4733
4733
  const detail = await bundle.api.getPackage(parsed.username, parsed.slug);
4734
+ const targetVersion = parsed.version ?? detail.current_version;
4735
+ const isImplicitCurrent = !parsed.version;
4734
4736
  if (!opts.force) {
4735
4737
  printHuman(c.yellow(" \u26A0 You are about to yank:"));
4736
4738
  printHuman(
4737
- ` ${c.bold(detail.full_slug)} v${parsed.version}`
4739
+ ` ${c.bold(detail.full_slug)} v${targetVersion}${isImplicitCurrent ? c.gray(" (current)") : ""}`
4738
4740
  );
4739
4741
  if (opts.reason) {
4740
4742
  printHuman(` reason: ${opts.reason}`);
4741
4743
  }
4742
4744
  printHuman(
4743
4745
  c.gray(
4744
- " Yanked versions disappear from range/`*` resolution. Pinned installs (`@" + parsed.version + "`) still work. Reversible with `kordis unyank`."
4746
+ " Yanked versions disappear from range/`*` resolution. Pinned installs (`@" + targetVersion + "`) still work. Reversible with `kordis unyank`."
4745
4747
  )
4746
4748
  );
4747
4749
  printHuman("");
4748
4750
  const { confirmed } = await prompts3({
4749
4751
  type: "confirm",
4750
4752
  name: "confirmed",
4751
- message: `Yank ${c.bold(`${parsed.fullSlug}@${parsed.version}`)}?`,
4753
+ message: `Yank ${c.bold(`${parsed.fullSlug}@${targetVersion}`)}?`,
4752
4754
  initial: false
4753
4755
  });
4754
4756
  if (!confirmed) {
@@ -4757,7 +4759,7 @@ function yankCommand() {
4757
4759
  }
4758
4760
  }
4759
4761
  const res = await bundle.authedRequest(
4760
- (api) => api.yankVersion(parsed.username, parsed.slug, parsed.version, {
4762
+ (api) => api.yankVersion(parsed.username, parsed.slug, targetVersion, {
4761
4763
  ...opts.reason ? { reason: opts.reason } : {}
4762
4764
  })
4763
4765
  );
@@ -4766,16 +4768,16 @@ function yankCommand() {
4766
4768
  human: () => {
4767
4769
  printHuman(
4768
4770
  c.green(
4769
- `\u2713 Yanked ${c.bold(parsed.fullSlug)}@${parsed.version}`
4771
+ `\u2713 Yanked ${c.bold(parsed.fullSlug)}@${targetVersion}`
4770
4772
  )
4771
4773
  );
4772
4774
  if (res.yank_reason) {
4773
4775
  printHuman(c.gray(` reason: ${res.yank_reason}`));
4774
4776
  }
4775
- if (res.effective_current_version !== parsed.version) {
4777
+ if (res.effective_current_version !== targetVersion) {
4776
4778
  printHuman(
4777
4779
  c.gray(
4778
- ` current_version is now ${c.bold(res.effective_current_version)} (was ${parsed.version})`
4780
+ ` current_version is now ${c.bold(res.effective_current_version)} (was ${targetVersion})`
4779
4781
  )
4780
4782
  );
4781
4783
  } else {
@@ -4787,7 +4789,7 @@ function yankCommand() {
4787
4789
  }
4788
4790
  printHuman(
4789
4791
  c.gray(
4790
- ` \u2192 Reverse with: kordis unyank ${parsed.fullSlug}@${parsed.version}`
4792
+ ` \u2192 Reverse with: kordis unyank ${parsed.fullSlug}@${targetVersion}`
4791
4793
  )
4792
4794
  );
4793
4795
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayul/kordis",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "private": false,
5
5
  "description": "Command-line client for the Kordis registry — discover, install, and publish agentic-coding packages.",
6
6
  "license": "MIT",