@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.
- package/assets/kordis-publishing/SKILL.md +12 -2
- package/dist/index.js +13 -11
- package/package.json +1 -1
|
@@ -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", "버전 올리기"
|
|
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
|
|
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
|
|
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 (
|
|
4727
|
+
if (parsed.range) {
|
|
4728
4728
|
throw new Error(
|
|
4729
|
-
|
|
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${
|
|
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 (`@" +
|
|
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}@${
|
|
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,
|
|
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)}@${
|
|
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 !==
|
|
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 ${
|
|
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}@${
|
|
4792
|
+
` \u2192 Reverse with: kordis unyank ${parsed.fullSlug}@${targetVersion}`
|
|
4791
4793
|
)
|
|
4792
4794
|
);
|
|
4793
4795
|
}
|