@buildinternet/releases-skills 0.52.0 → 0.54.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buildinternet/releases-skills",
3
- "version": "0.52.0",
3
+ "version": "0.54.0",
4
4
  "description": "Agent skills bundled with the Releases CLI. Markdown playbooks for changelog ingest, discovery, and analysis.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -16,6 +16,7 @@ Operations can be performed via CLI commands or typed MCP/agent tools. Use which
16
16
  | List sources | `releases list [slug] --json [--org <org>] [--query <text>] [--has-feed] [--category <c>] [--compact] [--limit <n>] [--page <n>]` | `list_catalog` (filter `kind: "source"` to exclude products); `list_sources` is a deprecated alias |
17
17
  | Add source | `releases admin source create <name> --url <url> [--type <type>] [--org <org>] [--feed-url <url>] [--primary]` | `manage_source` action "add" with name, url, type, organization, feed_url, **is_primary** (type auto-detected if omitted; only pass is_primary=true when the source is the org's primary changelog — see "Primary Sources") |
18
18
  | Add App Store source | `releases admin source create-appstore <url-or-id> [--platform ios\|macos] [--org <slug>] [--product <slug>] [--storefront <code>]` | _(no typed tool yet — CLI only)_ |
19
+ | Add video source | `releases admin source create-video <channel-or-playlist-url> --org <slug> [--product <slug>]` | _(no typed tool yet — CLI only)_ |
19
20
  | Edit source | `releases admin source update <identifier> [--primary] [--priority <p>]` | `manage_source` action "edit" with identifier, is_primary, fetch_priority, name, url, type (use only when changing an already-added source; prefer setting flags on "add") |
20
21
  | Remove source | `releases admin source delete <slug> [--ignore --reason <reason>]` | `manage_source` action "remove" with identifier |
21
22
  | Fetch releases | `releases admin source fetch <slug> [--dry-run] [--max <n>]` | `manage_source` action "fetch" with identifier |
@@ -48,7 +49,7 @@ Use `--json` (CLI) for structured output. Typed tools always return JSON.
48
49
 
49
50
  ## Adding Sources
50
51
 
51
- Required: **name** and **url**. Optional: **type** (github, scrape, feed, agent — auto-detected from URL if omitted), **organization** (org ID or slug to associate with), **feed_url** (direct feed URL if known). App Store apps (`appstore` type) are **not** created this way — use `create-appstore` (below); `source create` rejects `--type appstore` and pasted `apps.apple.com` URLs with a pointer to it.
52
+ Required: **name** and **url**. Optional: **type** (github, scrape, feed, agent — auto-detected from URL if omitted), **organization** (org ID or slug to associate with), **feed_url** (direct feed URL if known). App Store apps (`appstore` type) are **not** created this way — use `create-appstore` (below); `source create` rejects `--type appstore` and pasted `apps.apple.com` URLs with a pointer to it. YouTube channels/playlists (`video` type) are likewise **not** created this way — use `create-video` (below); `source create` rejects `--type video` and pasted `youtube.com`/`youtu.be` URLs.
52
53
 
53
54
  On slug collision the API auto-suffixes (`changelog` → `changelog-2`, `-3`, …) and the created row in the response tells you the resolved slug — no rename-and-retry needed.
54
55
 
@@ -71,6 +72,19 @@ releases admin source create-appstore <url-or-id> [--platform ios|macos] [--org
71
72
  - **Keep writes serial.** The endpoint resolves the listing on the fly; concurrent creates for a brand-new org/product race on the org/product slug uniqueness constraint. Add one app at a time.
72
73
  - The command is idempotent on the app's track ID — re-running reports the existing source instead of creating a duplicate.
73
74
 
75
+ ### Video sources
76
+
77
+ YouTube channels and playlists need a dedicated command because the create flow resolves the channel/playlist to its Atom feed, mints a `video` source, and backfills current videos as releases (description-only, summarizer-cleaned, marketing-filtered):
78
+
79
+ ```
80
+ releases admin source create-video <channel-or-playlist-url> --org <slug> [--product <slug>]
81
+ ```
82
+
83
+ - `<channel-or-playlist-url>` is a YouTube channel (`youtube.com/@handle`, `/channel/<id>`) or playlist (`/playlist?list=<id>`) URL.
84
+ - **`--org` is required and must already exist** — unlike `create-appstore`, no org is derived from the channel. Pass a slug or a typed `org_…` id. `--product <slug>` optionally attaches the source to an existing product.
85
+ - The command is idempotent on the resolved feed URL — re-running reports the existing source.
86
+ - **Never use generic `source create` for a YouTube URL.** It builds a `feed` source whose parser drops `media:group/media:description`, leaving a source with titles and dates but **empty release bodies** — a silent failure that needs deleting and re-creating to fix. `create` rejects YouTube URLs with a pointer to `create-video`.
87
+
74
88
  ### Naming sources and products
75
89
 
76
90
  **Don't prefix names with the org name.** The org is already shown as context on every page — repeating it in each child source produces noise like "Datadog › Datadog dd-trace-py". Pick the bare, recognizable name instead.
@@ -40,7 +40,7 @@ releases admin source create "Linear" --url https://linear.app/changelog --dry-r
40
40
 
41
41
  `--dry-run` still runs the URL dedup and exclusion checks (so you'll see "already exists" or "blocked URL" outcomes), but skips the write — including the auto-create-org side effect when `--org <name>` doesn't resolve.
42
42
 
43
- By default, `create` runs automated pre-checks (provider detection, feed discovery, markdown probing). Override with `--type github|scrape|feed|agent`. Batch mode (`--batch`) skips evaluation by default for speed. App Store apps use the dedicated `source create-appstore` verb (below) — `create` rejects `--type appstore` and pasted `apps.apple.com` URLs with a pointer to it.
43
+ By default, `create` runs automated pre-checks (provider detection, feed discovery, markdown probing). Override with `--type github|scrape|feed|agent`. Batch mode (`--batch`) skips evaluation by default for speed. App Store apps use the dedicated `source create-appstore` verb (below) — `create` rejects `--type appstore` and pasted `apps.apple.com` URLs with a pointer to it. YouTube channels/playlists use `source create-video` (below) — `create` likewise rejects `--type video` and pasted `youtube.com`/`youtu.be` URLs.
44
44
 
45
45
  Provide a feed URL explicitly when it isn't easily discoverable:
46
46
 
@@ -60,6 +60,12 @@ releases admin source create "Acme" --url https://acme.dev/changelog \
60
60
 
61
61
  Do this rather than a follow-up `source update --metadata-set`: `create` triggers the onboard workflow's auto-fetch, which reads the source's metadata **before** any post-create edit lands. Setting a feed filter on create keeps that first ingest filtered; setting it afterward races the auto-fetch and ingests the whole unfiltered feed.
62
62
 
63
+ Mark the org's primary changelog in one step with `--primary` (sets `isPrimary` on create — no follow-up `source update --primary` needed). Only pass it when the source is the org's main, company-wide changelog:
64
+
65
+ ```bash
66
+ releases admin source create "Vitest" --url https://github.com/vitest-dev/vitest --org vitest --primary
67
+ ```
68
+
63
69
  Evaluate without adding:
64
70
 
65
71
  ```bash
@@ -87,6 +93,20 @@ releases admin source create-appstore https://apps.apple.com/us/app/shopify/id71
87
93
 
88
94
  Add one app at a time — the listing is resolved on the fly, and concurrent creates for a brand-new org/product race on slug uniqueness.
89
95
 
96
+ ### Create Video
97
+
98
+ YouTube channels and playlists have a dedicated verb because the create flow resolves the channel/playlist to its Atom feed, mints a `video` source, and backfills current videos as releases (description-only, summarizer-cleaned, marketing-filtered):
99
+
100
+ ```bash
101
+ releases admin source create-video https://www.youtube.com/@AnthropicAI --org anthropic
102
+ releases admin source create-video https://www.youtube.com/playlist?list=PLf2m23nhTg1P --org anthropic --product claude
103
+ releases admin source create-video https://www.youtube.com/@AnthropicAI --org anthropic --dry-run
104
+ ```
105
+
106
+ `--org` is **required** and must already exist — unlike `create-appstore`, no org is derived from the channel. Pass a slug or a typed `org_…` id. `--product <slug>` (optional) attaches the source to an existing product. The verb is idempotent on the resolved feed URL — re-running reports the existing source.
107
+
108
+ Do not point generic `source create` at a YouTube URL. It builds a `feed` source whose parser drops `media:group/media:description`, producing a source with titles and dates but **empty release bodies** — a silent failure. `create` rejects `--type video` and pasted `youtube.com`/`youtu.be` URLs with a pointer to this verb.
109
+
90
110
  ### Update
91
111
 
92
112
  ```bash
@@ -205,12 +225,12 @@ releases admin org update vercel --category developer-tools
205
225
  releases admin org link vercel --platform github --handle vercel
206
226
  releases admin org tag add vercel react serverless
207
227
  releases admin org alias add anthropic claude.ai claude.com
208
- releases admin org refresh vercel # fetch all sources + regenerate overview
228
+ releases admin source fetch --org vercel # fetch all of an org's active sources
209
229
  releases admin org delete vercel # reversible tombstone soft-delete
210
230
  releases admin org delete vercel --hard --yes # permanent purge + FK cascade
211
231
  ```
212
232
 
213
- `org refresh` flags: `--max <n>` (per-source cap, default 20), `--concurrency <n>`, `--window <days>`, `--dry-run`, `--skip-overview`, `--json`.
233
+ There is no `org refresh` command. To refresh an org: fetch its sources with `releases admin source fetch --org <slug>` (see **Fetch** above), then regenerate the overview with the `overview` subcommands — `releases admin overview inputs <slug>` generate the body → `releases admin overview update <slug>` (or `releases admin overview batch` for a server-side sweep). Overview generation is agent-driven; no single command does both.
214
234
 
215
235
  `org delete` soft-deletes by default (a reversible tombstone). `--hard` purges the row and cascade-deletes every dependent source, release, fetch-log, changelog file/chunk, summary, media asset, and webhook subscription; it prompts for a slug typeback unless `--yes` is passed (required in non-TTY/scripted contexts). You can pass a slug or an `org_…` ID either way — the CLI resolves to the typed ID the destructive path requires.
216
236
 
@@ -223,6 +243,8 @@ releases admin product create "Next.js" --org vercel --url https://nextjs.org
223
243
  releases admin product create "Stripe Node" --org stripe --kind sdk
224
244
  releases admin product list vercel
225
245
  releases admin product list openai --kind sdk # filter by taxonomy
246
+ releases admin product list # every product, all orgs (adds an Org column)
247
+ releases admin product list --kind sdk --json # cross-org kind audit (CLI↔MCP list_catalog parity)
226
248
  releases admin product update nextjs --description "React framework for production"
227
249
  releases admin product update stripe-node --kind sdk # classify
228
250
  releases admin product update stripe-node --no-kind # clear