@se-studio/skills 1.2.2 → 1.3.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
@@ -1,5 +1,17 @@
1
1
  # @se-studio/skills
2
2
 
3
+ ## 1.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Add `screaming-frog-audit` agent skill for Screaming Frog crawl, native compare, and prioritized audit workflows.
8
+
9
+ ## 1.2.3
10
+
11
+ ### Patch Changes
12
+
13
+ - Bulk version bump: patch for all packages
14
+
3
15
  ## 1.2.2
4
16
 
5
17
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/skills",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "SE Studio agent skills for marketing site development with Contentful CMS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -479,10 +479,16 @@ cms-edit types component
479
479
  cms-edit types collection
480
480
 
481
481
  # List entries with filters
482
+ cms-edit list --type article --sort date -n 10 # recent articles by publication date
482
483
  cms-edit list --type article --has-download # articles with a download asset
483
484
  cms-edit list --type article --slug my-article # article with a specific slug
484
485
  cms-edit list --type article --has-field tags # articles where tags field is non-empty
485
486
 
487
+ # Find draft articles, then peek/open (both support drafts via CMA)
488
+ cms-edit sitemap --include article --status draft
489
+ cms-edit peek --article-slug resources/blog/my-post
490
+ # Only list --published / resolve --published are published-only
491
+
486
492
  # Resolve any entry or asset by ID (no open session required)
487
493
  cms-edit resolve --id 4xKj2abcDefGhijK # entry: shows type, title, slug, status
488
494
  cms-edit resolve --id 7pQrStuvWxyzAbc # asset: shows title, fileName, URL
@@ -702,6 +708,7 @@ cms-edit sitemap # All pages, sorted by slug
702
708
  cms-edit sitemap --prefix /blog # Filter by slug prefix
703
709
  cms-edit sitemap --status draft # Draft pages only
704
710
  cms-edit sitemap --sort updated # Most recently updated first
711
+ cms-edit sitemap --include article --sort date # Articles by publication date
705
712
  cms-edit sitemap --tree # Tree rendering
706
713
  cms-edit sitemap --include page,article # Include articles too
707
714
  ```
@@ -27,13 +27,15 @@ Run after any of these change:
27
27
 
28
28
  | Action | Automatic on git push? |
29
29
  |--------|------------------------|
30
- | Copy **committed** `editor-pack/` into cms-edit-host | Yes (when `cms-edit/**` changes and Vercel builds) |
30
+ | Copy **committed** `editor-pack/` + `.mcpb` into cms-edit-host | Yes (`stage-site.mjs` on Vercel build) |
31
31
  | Run `editor-pack generate` | **No** — always manual (this skill) |
32
- | Rebuild `.mcpb` on Vercel | Yes (part of customer `vercel-build.sh`) |
32
+ | Rebuild `.mcpb` on Vercel | **No** — commit locally (`pnpm cms-edit:mcpb` or `build-mcpb.sh`) when `hosted.mcpUrl` or extension metadata changes |
33
33
  | Update hosted guide/prompts from `@se-studio/contentful-cms` | Redeploy host after bumping package version |
34
34
 
35
35
  Editors do **not** reinstall `.mcpb` when only the editor pack changes.
36
36
 
37
+ **Staging:** `stage-site.mjs` copies committed artifacts into `cms-edit/host/` before build. Requires `CMS_EDIT_ROOT` on Vercel. Single-site repos default to `cms-edit` locally; multi-site repos need `CMS_EDIT_ROOT` in `cms-edit/host/.env.local`. Run manually with `pnpm cms-edit:stage` (or site-specific variant).
38
+
37
39
  ## Step 1 — Locate config
38
40
 
39
41
  | Repo layout | Config path |
@@ -84,17 +86,17 @@ git commit -m "chore(cms-edit): regenerate editor pack"
84
86
 
85
87
  ## Step 6 — Deploy
86
88
 
87
- ### SE Studio (git-connected Vercel)
89
+ ### Customer repo with `cms-edit/host/` (SE Studio, Pedestal, Headwater)
88
90
 
89
- Push to the branch Vercel watches (usually `develop`). Changes under `cms-edit/**` trigger `cms-edit/scripts/vercel-build.sh`, which copies the committed pack and rebuilds the host.
91
+ Commit `editor-pack/` (and `.mcpb` if `hosted.mcpUrl` changed), then push to the branch Vercel watches (usually `develop`). Changes under `cms-edit/**` trigger a host rebuild (`stage-site.mjs` copies committed artifacts).
90
92
 
91
93
  ```bash
92
94
  git push
93
95
  ```
94
96
 
95
- No `pnpm cms-edit:deploy` needed unless you want a manual Vercel deploy without pushing.
97
+ Manual deploy without pushing: `pnpm cms-edit:deploy` (single-site) or `pnpm cms-edit:deploy:<site>` (multi-site) — runs validate, stage, then `vercel deploy --prod`.
96
98
 
97
- ### Other customers (e.g. Pedestal)
99
+ ### Customers without `cms-edit/host/` in their repo
98
100
 
99
101
  From `se-core-product`:
100
102
 
@@ -105,8 +107,6 @@ From `se-core-product`:
105
107
  --prod
106
108
  ```
107
109
 
108
- Or commit + push if that customer repo has its own cms-edit-host Vercel project.
109
-
110
110
  ## Homepage slug reminder
111
111
 
112
112
  SE Studio sites store the marketing homepage as Contentful slug **`index`** (public URL `/`). Regenerated `routing.md` documents this. Set `website.homepageSlug` in `project.json` only for exceptions (e.g. Pedestal `home`).
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: screaming-frog-audit
3
+ description: "Crawl a marketing site with Screaming Frog, run native compare mode between crawls, and generate prioritized audit/compare reports via @se-studio/site-check and seo/screaming-frog.json."
4
+ ---
5
+
6
+ # Screaming Frog crawl, compare, and audit
7
+
8
+ Use when the user wants a Screaming Frog crawl, before/after deployment comparison, or SEO issue audit (404s, canonicals, structured data, content/metadata regressions).
9
+
10
+ **Requires:** Screaming Frog SEO Spider (licensed), **database storage mode** (default with `--save-crawl`).
11
+
12
+ **Config:** each app's `seo/screaming-frog.json` — no site-specific presets in core product.
13
+
14
+ ---
15
+
16
+ ## Deployment workflow (content push → code release)
17
+
18
+ Typical process: crawl after CMS/content is on preview, then crawl again after code ships, and confirm no significant content/metadata regressions.
19
+
20
+ ### 1. Baseline after content push
21
+
22
+ From the app directory:
23
+
24
+ ```bash
25
+ pnpm seo:screaming-frog:baseline
26
+ # equivalent:
27
+ site-check-screaming-frog crawl --tag content
28
+ ```
29
+
30
+ This crawls with the manifest profile, saves to SF's database, and records the database ID as baseline `content` in `docs/seo/sf-crawl-state.json`.
31
+
32
+ ### 2. Crawl after code release
33
+
34
+ ```bash
35
+ pnpm seo:screaming-frog:crawl
36
+ ```
37
+
38
+ Records the new crawl as `lastCrawl` in `sf-crawl-state.json`.
39
+
40
+ ### 3. Native compare (before vs after)
41
+
42
+ ```bash
43
+ pnpm seo:screaming-frog:compare
44
+ # equivalent:
45
+ site-check-screaming-frog compare --baseline content
46
+ ```
47
+
48
+ Uses Screaming Frog **`--crawl-comparison <current-db-id> <previous-db-id>`** (native Compare mode), exports Change Detection CSVs, and writes `docs/seo/<site>-screaming-frog-compare.md`.
49
+
50
+ Exit code 1 when title/meta/H1/word-count regressions are detected.
51
+
52
+ ### 4. Optional full issue audit
53
+
54
+ ```bash
55
+ pnpm seo:screaming-frog ~/spider/exports/<timestamp>
56
+ ```
57
+
58
+ Prioritized P0–P3 report from a single crawl export.
59
+
60
+ ---
61
+
62
+ ## Other commands
63
+
64
+ ```bash
65
+ site-check-screaming-frog profiles # show crawl profiles from manifest
66
+ site-check-screaming-frog list-crawls # SF database IDs for this siteHost
67
+ site-check-screaming-frog compare --latest # two most recent crawls (same host)
68
+ site-check-screaming-frog compare <current-id> <previous-id> # explicit IDs
69
+ ```
70
+
71
+ ---
72
+
73
+ ## What native compare checks
74
+
75
+ SF Change Detection exports (current vs previous on **matched URLs**):
76
+
77
+ - Page titles, meta descriptions, H1
78
+ - Word count (flags ≥50 words or ≥10% change)
79
+ - Indexability status
80
+ - Structured data type changes (via dedicated export tab)
81
+
82
+ Does **not** replace a full audit for new 404s — run `audit` on the post-release export for issue triage.
83
+
84
+ ---
85
+
86
+ ## Prerequisites
87
+
88
+ | Item | Notes |
89
+ |------|-------|
90
+ | SF GUI | Quit before CLI crawl/compare (shared DB lock) |
91
+ | Vercel preview | Bypass header in `.seospiderconfig`; `PREVIEW_SITE_URL` in `.env.local` |
92
+ | Same profile | Compare only meaningful when both crawls use the same URL/profile |
93
+ | Database storage | `--save-crawl` stores crawls; compare needs two DB IDs |
94
+
95
+ ---
96
+
97
+ ## Troubleshooting
98
+
99
+ | Problem | Fix |
100
+ |---------|-----|
101
+ | 0 matched URLs in compare | Different URLs/host between crawls — use same profile |
102
+ | No baseline | Run `crawl --tag content` first |
103
+ | GUI lock / FATAL | Quit Screaming Frog app |
104
+ | Wrong crawls picked | `list-crawls` then pass explicit database IDs |
@@ -0,0 +1,62 @@
1
+ # Screaming Frog site config
2
+
3
+ Each project owns **`seo/screaming-frog.json`** at the app root (or pass `--config` explicitly). The core product package has no built-in site presets.
4
+
5
+ ## Required fields
6
+
7
+ | Field | Purpose |
8
+ |-------|---------|
9
+ | `site` | Short site key (for logging) |
10
+ | `siteLabel` | Display name in audit report |
11
+ | `siteHost` | Host substring for filtering redirect samples |
12
+ | `defaultSiteUrl` | Fallback URL when crawl overview is missing |
13
+ | `outputMdName` | Audit markdown filename (written under `docs/seo/`) |
14
+ | `profiles` | Named crawl targets with `configFile` paths |
15
+
16
+ ## Optional fields
17
+
18
+ | Field | Purpose |
19
+ |-------|---------|
20
+ | `defaultProfile` | Profile used when `--profile` is omitted |
21
+ | `productionAuditDoc` | Cross-link in report to live HTML audit doc |
22
+ | `issueRuleOverrides` | Per-site P0–P3 rule tweaks (merged over base rules in `@se-studio/site-check`) |
23
+
24
+ ## Example manifest
25
+
26
+ ```json
27
+ {
28
+ "site": "brightline",
29
+ "siteLabel": "Brightline",
30
+ "siteHost": "hellobrightline.com",
31
+ "defaultSiteUrl": "https://www.hellobrightline.com/",
32
+ "outputMdName": "brightline-screaming-frog-audit.md",
33
+ "defaultProfile": "preview",
34
+ "issueRuleOverrides": [
35
+ {
36
+ "match": "directives_noindex",
37
+ "tier": "p2",
38
+ "category": "indexing",
39
+ "note": "Expected on Vercel preview."
40
+ }
41
+ ],
42
+ "profiles": {
43
+ "production": {
44
+ "label": "Production",
45
+ "url": "https://www.hellobrightline.com/",
46
+ "configFile": "~/spider/bl production.seospiderconfig"
47
+ },
48
+ "preview": {
49
+ "label": "Vercel preview",
50
+ "urlEnv": "PREVIEW_SITE_URL",
51
+ "configFile": "~/spider/bl dev.seospiderconfig"
52
+ },
53
+ "localhost": {
54
+ "label": "Local dev",
55
+ "url": "http://localhost:3010/",
56
+ "configFile": "~/spider/bl localhost.seospiderconfig"
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ `.seospiderconfig` files live outside the repo (typically `~/spider/`). Preview configs should embed the Vercel bypass header.