@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 +12 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/references/agent-session/customer-agents-block.md +2 -0
- package/references/agent-session/production-merge.md +1 -1
- package/references/agent-session/projects.registry.json +3 -2
- package/references/agent-session/strip-skill-always-on.sh +32 -0
- package/references/deps-update/projects.registry.json +3 -2
- package/skills/contentful-cms-core/SKILL.md +22 -25
- package/skills/se-marketing-sites-handling-media/SKILL.md +1 -1
- package/skills/se-marketing-sites-lib-cms-structure/SKILL.md +1 -1
- package/skills/site-workflows-agent-session/SKILL.md +1 -1
- package/skills/site-workflows-deps-update/SKILL.md +1 -0
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
|
@@ -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`
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
|
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.
|
|
16
|
+
`cms-edit` lets you read and edit Contentful draft content without publishing.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
161
|
+
For multi-paragraph Markdown, pass `--content` or `--base64` on MCP (no stdin, no `--file`):
|
|
163
162
|
|
|
164
|
-
```
|
|
165
|
-
|
|
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
|
|
676
|
+
Run a sequence of operations from `--json` or `--json-base64` (hosted MCP).
|
|
683
677
|
|
|
684
|
-
```
|
|
685
|
-
|
|
686
|
-
|
|
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
|
|
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**:
|
|
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,
|
|
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` | `
|
|
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
|
|