@se-studio/skills 1.7.7 → 1.7.9

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.7.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Stop applying 2px video overscan by default (`edgeOverscan` opt-in). Remove ImageKit/HLS. CMS local files are mute-loop packs only (click-to-play is YouTube/Vimeo). Raise mute-loop max duration to 2 minutes. Drop `videoPrefix`.
8
+
9
+ ## 1.7.8
10
+
11
+ ### Patch Changes
12
+
13
+ - 62d1960: Document and ship the post-sync strip of AGENTS.md / CLAUDE.md inside skill directories so Cursor does not always-apply Vercel encyclopedias.
14
+
3
15
  ## 1.7.7
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -65,7 +65,7 @@ Claude Code uses a naive frontmatter parser; violations cause descriptions to si
65
65
 
66
66
  1. Edit `packages/skills/skills/<skill-dir>/SKILL.md`
67
67
  2. Validate: `pnpm skills:validate`
68
- 3. Sync: `pnpm skills:sync` (copies `skills/` → `.agents/skills/` and `references/` → `.agents/references/`)
68
+ 3. Sync: `pnpm skills:sync` (copies `skills/` → `.agents/skills/` and `references/` → `.agents/references/`, then strips `AGENTS.md` next to `SKILL.md`)
69
69
  4. Add a changeset if publishing `@se-studio/skills`
70
70
 
71
71
  ### cms-edit bundled skills (`@se-studio/contentful-cms`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/skills",
3
- "version": "1.7.7",
3
+ "version": "1.7.9",
4
4
  "description": "SE Studio agent skills for marketing site development with Contentful CMS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -2,6 +2,8 @@
2
2
 
3
3
  This site runs **Next.js 16.3**. Before writing Next.js code, read the relevant guide in `node_modules/next/dist/docs/` (in monorepos, resolve from the app that depends on `next`). Keep the managed `<!-- BEGIN:nextjs-agent-rules -->` block in `AGENTS.md`. Do **not** use `npx @next/codemod agents-md`, `.next-docs`, or `NEXT-AGENTS-MD-START` (Next 15 index: Pages Router, `middleware.ts`). Ignore `vercel-react-native-skills` if the vercel-labs pack installed it.
4
4
 
5
+ After `pnpm skills:sync`, strip `AGENTS.md` / `CLAUDE.md` that sit next to a skill `SKILL.md`. Cursor always-applies those filenames; Vercel packs must stay on-demand.
6
+
5
7
  ## Agent session workflow
6
8
 
7
9
  **Load skill `site-workflows-agent-session` at the start of every coding session.**
@@ -12,7 +12,7 @@ Canonical skill: `site-workflows-agent-session`. Customer `AGENTS.md` copies the
12
12
 
13
13
  | Repo | Integration | Production (Git-connected Vercel) |
14
14
  |------|-------------|-----------------------------------|
15
- | Customer marketing sites | `develop` (or registry override, e.g. Highlander `port-2026`) | usually `main` |
15
+ | Customer marketing sites | `develop` | usually `main` |
16
16
  | HopSkipDrive | `develop` | **`production`** |
17
17
 
18
18
  Never ship from a registry `productionPath` checkout. Merge with `gh` from the **develop** checkout.
@@ -107,12 +107,13 @@
107
107
  "displayName": "Highlander Health",
108
108
  "path": "~/source/customers/highlander/highlander-health-website-2026",
109
109
  "worktreesRoot": "~/source/customers/highlander/worktrees",
110
- "branch": "port-2026",
110
+ "branch": "develop",
111
+ "productionBranch": "main",
111
112
  "type": "customer",
112
113
  "contentfulSpaceId": "bkkox68g99rn",
113
114
  "hostedMcp": "cms-edit-highlander",
114
115
  "validate": "pnpm check && pnpm type-check && pnpm validate:routes",
115
- "notes": "New 2026 stack. Integration branch is port-2026 until go-live, then develop/main. Live Bond/Netlify site remains highlander-health-website. cms-edit DNS/OAuth for highlander.content.se.studio is a human gate."
116
+ "notes": "2026 stack is live on Vercel (develop preview, main production alias). Public DNS is still Bond/Netlify highlanderhealth.com until cutover. cms-edit DNS/OAuth for highlander.content.se.studio is a human gate."
116
117
  }
117
118
  ]
118
119
  }
@@ -0,0 +1,32 @@
1
+ # Source from scripts/sync-skills.sh after installing skills.
2
+ # Cursor always-applies every AGENTS.md in the workspace. Skill packs must keep
3
+ # SKILL.md (and rules/) only — never an AGENTS.md / CLAUDE.md next to SKILL.md.
4
+
5
+ strip_skill_always_on_docs() {
6
+ node "${STRIP_SKILL_ALWAYS_ON_JS:-}" 2>/dev/null || python3 - <<'PY'
7
+ from pathlib import Path
8
+
9
+ cwd = Path('.')
10
+ roots = [cwd / '.agents' / 'skills', cwd / '.cursor' / 'skills', cwd / '.claude' / 'skills']
11
+ apps = cwd / 'apps'
12
+ if apps.is_dir():
13
+ for app in apps.iterdir():
14
+ if app.is_dir():
15
+ roots.append(app / '.cursor' / 'skills')
16
+ roots.append(app / '.agents' / 'skills')
17
+
18
+ removed = 0
19
+ for root in roots:
20
+ if not root.is_dir():
21
+ continue
22
+ for skill_md in root.rglob('SKILL.md'):
23
+ skill_dir = skill_md.parent
24
+ for name in ('AGENTS.md', 'CLAUDE.md'):
25
+ path = skill_dir / name
26
+ if path.is_file():
27
+ path.unlink()
28
+ print(f'Removed always-on {path}')
29
+ removed += 1
30
+ print(f'Stripped {removed} always-on skill doc(s).')
31
+ PY
32
+ }
@@ -83,11 +83,12 @@
83
83
  "key": "highlander",
84
84
  "displayName": "Highlander Health",
85
85
  "path": "~/source/customers/highlander/highlander-health-website-2026",
86
- "branch": "port-2026",
86
+ "branch": "develop",
87
+ "productionBranch": "main",
87
88
  "validate": "pnpm check && pnpm type-check && pnpm validate:routes",
88
89
  "workspace": true,
89
90
  "hasPinOverrides": false,
90
- "notes": "2026 port. Integration branch port-2026 until live; then develop/main."
91
+ "notes": "2026 stack. Integration develop; Vercel production tracks main. Public DNS still Bond/Netlify until cutover."
91
92
  }
92
93
  ]
93
94
  }
@@ -13,14 +13,13 @@ Use this skill when you need to read or edit content in Contentful using **hoste
13
13
 
14
14
  ## Overview
15
15
 
16
- `cms-edit` lets you read and edit Contentful draft content without publishing. It uses a **snapshot → ref → edit → save** workflow:
16
+ `cms-edit` lets you read and edit Contentful draft content without publishing.
17
17
 
18
- 1. `open` a page to load the content tree into a session
19
- 2. `snapshot` to see the tree with `@ref` labels
20
- 3. `read` an entry to inspect its fields
21
- 4. `set` / `rtf` to modify fields
22
- 5. `diff` to review changes
23
- 6. `save` to write drafts to Contentful (NEVER publishes)
18
+ **New page/article:** `schema` for this space → `create from-json --dry-run --strict` → `create from-json` (`--json` or `--json-base64`). Nested tree key is `components`; discriminator is `type`.
19
+
20
+ **Edit a tree:** `open` → `export from-json` → edit JSON → `apply from-json`. Tiny patches: `set` / `rtf` / `add` then `diff` → `save`.
21
+
22
+ **Never publish.** Hosted MCP cannot see your disk — send JSON in the tool call.
24
23
 
25
24
  ## Safety Rules
26
25
 
@@ -159,15 +158,10 @@ Markdown support:
159
158
  - `` `inline code` ``
160
159
  - `---` for horizontal rule
161
160
 
162
- For any content with multiple paragraphs or newlines, use `printf` piped to stdin — `\n` in a double-quoted shell string is **not** interpreted as a newline by bash:
161
+ For multi-paragraph Markdown, pass `--content` or `--base64` on MCP (no stdin, no `--file`):
163
162
 
164
- ```bash
165
- # Correct — printf interprets \n properly
166
- printf '## Why it matters\n\nOur platform helps teams **move faster**.\n\n- Instant setup\n- No code required\n' | cms-edit rtf @c1 body --markdown -
167
-
168
- # Also correct — file input
169
- cms-edit rtf @c1 body --markdown --content "# Heading\n\nBody."
170
- cms-edit rtf @c1 body --markdown - < path/to/file.md
163
+ ```
164
+ cms_edit ["rtf", "@c1", "body", "--content", "## Why it matters\n\nOur platform helps teams **move faster**."]
171
165
  ```
172
166
 
173
167
  Single-line content (no newlines) can be passed as a quoted argument directly:
@@ -679,12 +673,11 @@ cms-edit peek --id <entryId> # Look up by entry ID
679
673
 
680
674
  ## Batch Operations (batch run)
681
675
 
682
- Run a sequence of operations from a JSON file or stdin.
676
+ Run a sequence of operations from `--json` or `--json-base64` (hosted MCP).
683
677
 
684
- ```bash
685
- cms-edit batch run --json '[...]' # Run batch ops from inline JSON
686
- echo '[...]' | cms-edit batch run # Pipe from stdin
687
- cms-edit batch run --json '[...]' --dry-run # Validate without saving
678
+ ```
679
+ cms_edit ["batch", "run", "--json", "[...]"]
680
+ cms_edit ["batch", "run", "--json-base64", "<b64>", "--dry-run"]
688
681
  ```
689
682
 
690
683
  Supported ops: `open`, `set`, `rtf`, `rtf-replace`, `save`, `add`, `links-add`.
@@ -715,13 +708,17 @@ Example `ops.json` — update an existing page with a new CTA that has two butto
715
708
 
716
709
  ## Create Page or Article from JSON
717
710
 
718
- Create a complete page or article — including all components, fields, and CTA links — from a single declarative JSON file. This is the recommended approach for creating multiple pages or articles in bulk.
711
+ Create a complete page or article from `--json` or `--json-base64`. Dry-run is local (no CMA) once the index is warm.
719
712
 
720
- ```bash
721
- cms-edit create from-json --json '{...}' # Create from inline JSON
722
- cms-edit create from-json --json '{...}' --dry-run # Preview without writing
723
- cat page.json | cms-edit create from-json # Pipe from stdin
724
713
  ```
714
+ cms_edit ["help", "create-from-json"]
715
+ cms_edit ["create", "from-json", "--json", "{...}", "--dry-run", "--strict"]
716
+ cms_edit ["create", "from-json", "--json-base64", "<b64>"]
717
+ cms_edit ["export", "from-json"]
718
+ cms_edit ["apply", "from-json", "--json-base64", "<b64>"]
719
+ ```
720
+
721
+ Use `"components"` not `"content"`. Nested discriminator is `"type"` not `"componentType"`. Empty `components` fails. `schema <contentType>` for this space’s field ids.
725
722
 
726
723
  **Page JSON schema:**
727
724
 
@@ -165,7 +165,7 @@ Pass `componentLabel` (usually `cmsLabel`) and `analyticsContext` to enable clic
165
165
  The `IResponsiveVisual` type (from `@se-studio/core-data-types`) supports:
166
166
 
167
167
  1. **Image**: Standard Contentful image asset.
168
- 2. **Video**: Hosted video file (mp4/webm). The component handles `<video>` tag rendering with autoplay/loop/muted attributes suitable for background videos.
168
+ 2. **Video**: Mute autoplay-loop local files via the hero pipeline (`HERO_VIDEO_*`, R2 / `video.se.studio`). Click-to-play is YouTube or Vimeo — do not play Contentful MP4s. Cover/fill does not overscan unless you pass `edgeOverscan` (parent must clip; `HeroLoopVideo` does not self-clip). Mute-loops may be up to 2 minutes.
169
169
  3. **Animation**: Lottie motion file. Player is chosen by **file extension**:
170
170
  * **`.json`** (or `application/json`) → `@lottiefiles/lottie-player` (classic Lottie).
171
171
  * **`.lottie`** → `@lottiefiles/dotlottie-react` (ThorVG / WASM). Wrong extension ⇒ wrong player.
@@ -14,7 +14,7 @@ Reference app: **example-empty** (this monorepo). Customer implementations: see
14
14
  | `cms.ts` | Yes | Types, buildComponentRecord / buildCollectionRecord / buildExternalRecord (array → Record), then build*Maps from those Records, createConverterContext |
15
15
  | `cms-server.ts` | No (server-only) | createAppHelpers, buildOptions, getContentfulConfig, projectRendererConfig |
16
16
  | `config.ts` | Yes | isProduction, isDevelopment |
17
- | `server-config.ts` | No | draftOnly, videoPrefix, baseUrl, revalidationSecret |
17
+ | `server-config.ts` | No | draftOnly, baseUrl, revalidationSecret |
18
18
  | `constants.ts` | Yes | ARTICLES_BASE, TAGS_BASE, PEOPLE_BASE, enable flags, customer name |
19
19
  | `registrations.ts` | Yes | componentRegistrationsList, collectionRegistrationsList, externalComponentRegistrationsList (arrays) |
20
20
  | `SizingInformation.ts` | Yes | getSizingInformation for dynamic heading sizes |
@@ -365,6 +365,6 @@ Agent must load this skill, write manifest (with `worktree` path), run placement
365
365
  | `pointme` | `develop` | `main` | customer |
366
366
  | `pedestal` | `develop` | `main` | customer monorepo |
367
367
  | `hsd` | `develop` (`develop-hsd-website`) | `production` (`production-hsd-website`) | customer |
368
- | `highlander` | `port-2026` until live, then `develop` | `main` after cutover | customer |
368
+ | `highlander` | `develop` | `main` | customer |
369
369
 
370
370
  Full paths (`path`, `worktreesRoot`, `productionPath`), MCP keys: `projects.registry.json`.
@@ -140,6 +140,7 @@ Marketing sites run **Next.js 16.3**. Version-matched docs live in each app’s
140
140
  - **Do not** run `npx @next/codemod agents-md` or restore `NEXT-AGENTS-MD-START` / `.next-docs` — that index is Next 15 (Pages Router, `middleware.ts`, upgrade guides only through v15).
141
141
  - Cursor’s Vercel plugin **`nextjs`** skill is fine for App Router patterns; it is not a substitute for `node_modules/next/dist/docs/`.
142
142
  - After `npx skills add vercel-labs/agent-skills`, **delete `vercel-react-native-skills`** — these are web sites. Do not treat React Native skills as Next guidance.
143
+ - After any `skills add` / `skills:sync`, **delete `AGENTS.md` and `CLAUDE.md` that sit next to a `SKILL.md`**. Cursor always-applies those filenames. Keep `SKILL.md` and `rules/`. Core: `node scripts/strip-skill-always-on-docs.mjs`. Customer `scripts/sync-skills.sh` must call the same strip (see `packages/skills/references/agent-session/strip-skill-always-on.sh`).
143
144
 
144
145
  ---
145
146