@se-studio/contentful-cms 3.9.3 → 3.10.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.
Files changed (91) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +3 -3
  3. package/dist/commands/asset.d.ts.map +1 -1
  4. package/dist/commands/asset.js +20 -5
  5. package/dist/commands/asset.js.map +1 -1
  6. package/dist/commands/host-scaffold.js +1 -1
  7. package/dist/commands/media.d.ts.map +1 -1
  8. package/dist/commands/media.js +10 -5
  9. package/dist/commands/media.js.map +1 -1
  10. package/dist/contentful/assets.d.ts +4 -0
  11. package/dist/contentful/assets.d.ts.map +1 -1
  12. package/dist/contentful/assets.js +9 -0
  13. package/dist/contentful/assets.js.map +1 -1
  14. package/dist/contentful/cma-user-agent.d.ts +1 -1
  15. package/dist/contentful/cma-user-agent.d.ts.map +1 -1
  16. package/dist/contentful/hosted-asset-upload.d.ts +1 -1
  17. package/dist/contentful/hosted-asset-upload.d.ts.map +1 -1
  18. package/dist/contentful/hosted-asset-upload.js +1 -1
  19. package/dist/contentful/hosted-asset-upload.js.map +1 -1
  20. package/dist/contentful/pipeline-encode-gate.d.ts +27 -0
  21. package/dist/contentful/pipeline-encode-gate.d.ts.map +1 -0
  22. package/dist/contentful/pipeline-encode-gate.js +102 -0
  23. package/dist/contentful/pipeline-encode-gate.js.map +1 -0
  24. package/dist/editor-pack/generate.js +1 -1
  25. package/dist/editor-pack/generate.js.map +1 -1
  26. package/dist/generated/hosted-guide.d.ts +1 -1
  27. package/dist/generated/hosted-guide.d.ts.map +1 -1
  28. package/dist/generated/hosted-guide.js +1 -1
  29. package/dist/generated/hosted-guide.js.map +1 -1
  30. package/dist/generated/version.d.ts +1 -1
  31. package/dist/generated/version.d.ts.map +1 -1
  32. package/dist/generated/version.js +1 -1
  33. package/dist/generated/version.js.map +1 -1
  34. package/dist/hosted/next/routes/staged-upload.d.ts +1 -0
  35. package/dist/hosted/next/routes/staged-upload.d.ts.map +1 -1
  36. package/dist/hosted/next/routes/staged-upload.js +38 -1
  37. package/dist/hosted/next/routes/staged-upload.js.map +1 -1
  38. package/dist/mcp/prompts/onboarding.d.ts.map +1 -1
  39. package/dist/mcp/prompts/onboarding.js +5 -5
  40. package/dist/mcp/prompts/onboarding.js.map +1 -1
  41. package/dist/mcp/tools/cms-edit.d.ts +1 -1
  42. package/dist/mcp/tools/cms-edit.d.ts.map +1 -1
  43. package/dist/mcp/tools/cms-edit.js +3 -2
  44. package/dist/mcp/tools/cms-edit.js.map +1 -1
  45. package/dist/mcp/tools/media.d.ts.map +1 -1
  46. package/dist/mcp/tools/media.js +18 -11
  47. package/dist/mcp/tools/media.js.map +1 -1
  48. package/dist/mcp/tools/staged-upload.d.ts.map +1 -1
  49. package/dist/mcp/tools/staged-upload.js +6 -4
  50. package/dist/mcp/tools/staged-upload.js.map +1 -1
  51. package/dist/media-pipeline/actions.d.ts +6 -8
  52. package/dist/media-pipeline/actions.d.ts.map +1 -1
  53. package/dist/media-pipeline/actions.js +10 -8
  54. package/dist/media-pipeline/actions.js.map +1 -1
  55. package/dist/media-pipeline/client.d.ts +11 -3
  56. package/dist/media-pipeline/client.d.ts.map +1 -1
  57. package/dist/media-pipeline/client.js +1 -4
  58. package/dist/media-pipeline/client.js.map +1 -1
  59. package/dist/media-pipeline/import-alt.d.ts +8 -0
  60. package/dist/media-pipeline/import-alt.d.ts.map +1 -0
  61. package/dist/media-pipeline/import-alt.js +23 -0
  62. package/dist/media-pipeline/import-alt.js.map +1 -0
  63. package/dist/media-pipeline/import.d.ts.map +1 -1
  64. package/dist/media-pipeline/import.js +45 -0
  65. package/dist/media-pipeline/import.js.map +1 -1
  66. package/dist/media-pipeline/limits.d.ts +2 -2
  67. package/dist/media-pipeline/limits.d.ts.map +1 -1
  68. package/dist/media-pipeline/limits.js +2 -2
  69. package/dist/media-pipeline/limits.js.map +1 -1
  70. package/dist/media-pipeline/prepare-source.d.ts +32 -0
  71. package/dist/media-pipeline/prepare-source.d.ts.map +1 -0
  72. package/dist/media-pipeline/prepare-source.js +132 -0
  73. package/dist/media-pipeline/prepare-source.js.map +1 -0
  74. package/dist/staged-upload/hmac.d.ts +4 -0
  75. package/dist/staged-upload/hmac.d.ts.map +1 -1
  76. package/dist/staged-upload/hmac.js +35 -0
  77. package/dist/staged-upload/hmac.js.map +1 -1
  78. package/dist/staged-upload/request.d.ts.map +1 -1
  79. package/dist/staged-upload/request.js +14 -11
  80. package/dist/staged-upload/request.js.map +1 -1
  81. package/dist/staged-upload/store.d.ts +2 -0
  82. package/dist/staged-upload/store.d.ts.map +1 -1
  83. package/dist/staged-upload/store.js +18 -0
  84. package/dist/staged-upload/store.js.map +1 -1
  85. package/docs/editor-tasks/create-from-document.md +10 -3
  86. package/docs/editor-tasks/media-pipeline-prepare.md +29 -18
  87. package/docs/editor-tasks/media-reuse-and-upload.md +23 -20
  88. package/docs/editor-tasks/source-readiness-review.md +4 -3
  89. package/docs/mcp/hosted-guide.md +9 -8
  90. package/package.json +1 -1
  91. package/skills/core/SKILL.md +4 -8
@@ -20,7 +20,7 @@ All `save` operations create **drafts only**. A human must review and publish in
20
20
  | Tool | Purpose |
21
21
  |------|---------|
22
22
  | `cms_edit` | Run any cms-edit command via an `args` array |
23
- | `cms_edit_request_staged_upload` | Get a presigned upload URL for binary files (then `curl` + `asset upload --staged`) |
23
+ | `cms_edit_request_staged_upload` | Presigned URL for binaries. Raster/video: then `cms_edit_media` prepare. SVG/PDF/Lottie: then `asset upload --staged` |
24
24
  | `cms_edit_version` | Check the installed cms-edit version (no session required) |
25
25
  | `cms_edit_help` | Guide topics (`overview`, `workflow`, `commands`, `troubleshooting`, `hosted`) **or** playbooks (`create-from-json`, `fields-component`, …) |
26
26
 
@@ -130,7 +130,7 @@ Always run `diff` before `save`. To abandon changes: `["discard"]`.
130
130
  | Task | Where |
131
131
  |------|-------|
132
132
  | Edit copy, add sections, create pages/articles | **Agent + cms-edit** (drafts) |
133
- | Upload new images and files | **Agent + cms-edit** (`asset upload`) — search/reuse first |
133
+ | Upload new images and files | **Agent + cms-edit** — search/reuse first; raster/video via `cms_edit_media` import |
134
134
  | Publish approved drafts | **Contentful UI** |
135
135
  | Edit copy directly in Contentful | **Avoid** — use cms-edit instead |
136
136
 
@@ -138,12 +138,13 @@ cms-edit saves **drafts only**. A colleague must **publish in Contentful** for c
138
138
 
139
139
  ## Asset upload (hosted MCP)
140
140
 
141
- Hosted connectors have **no server filesystem** and **reject `asset upload --base64`**. Use staged upload for all images and binary files.
141
+ Hosted connectors have **no server filesystem** and **reject `asset upload --base64`**. Raster/video: staged intake then **media pipeline**. SVG/PDF/Lottie: staged then `asset upload --staged`.
142
142
 
143
143
  | Source | When | Example |
144
144
  |--------|------|---------|
145
- | **Staged upload** (required for binary) | All images and files on hosted MCP | See **Staged upload** below |
146
- | **`--url`** (last resort) | File already on public HTTPS fetchable by the host | `["asset", "upload", "--url", "https://…/photo.png", "--mime", "image/png", "--file-name", "photo.png"]` |
145
+ | **Staged + pipeline** | jpeg/png/webp/gif/mp4 | `cms_edit_media` prepare `stagedUploadIds` → import (required for video) |
146
+ | **`--url`** | Pipeline-ready **images** only, or SVG/PDF | `["asset", "upload", "--url", "https://….blob.vercel-storage.com/ready.jpg"]` |
147
+ | **Staged consume** | SVG/PDF/Lottie | `asset upload --staged` |
147
148
 
148
149
  **After upload:** note the returned asset `id`, attach to the entry (`asset set @root media <id>` for person portraits), then `diff` → `save`. Upload alone does not update entries.
149
150
 
@@ -168,10 +169,10 @@ Keeps binary **out of MCP tool args**. The agent uploads via `curl`, then passes
168
169
 
169
170
  1. `cms_edit_request_staged_upload` with `fileName`, `mimeType`, optional `byteLength`, optional `title`
170
171
  2. Run the returned `curlCommand` in a shell (POST multipart to `uploadUrl`)
171
- 3. `cms_edit` with the returned `consumeArgs` (includes `asset upload --staged <uploadId>`)
172
- 4. Link and save as usual
172
+ 3. Follow `consumeArgs`: **media prepare** (`cms_edit_media` / `media prepare --staged-ids`) for jpeg/png/webp/gif/mp4; **asset upload --staged** for SVG/PDF/Lottie
173
+ 4. For pipeline jobs: wait → catalog → **import** (required for video). Then link and save
173
174
 
174
- Hosted limit: **4 MB** per staged file (Vercel body limit). Rate limit: **1000 upload URLs per user per hour**. TTL: **60 minutes**, single-use.
175
+ Hosted limit: **4 MB** per staged file (Vercel body limit). Rate limit: **1000 upload URLs per user per hour**. TTL: **60 minutes**. Raster/video staged files are intake (GET by the pipeline); they are not consumed into CMA.
175
176
 
176
177
  ## Featured images (articles)
177
178
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/contentful-cms",
3
- "version": "3.9.3",
3
+ "version": "3.10.0",
4
4
  "description": "CLI tool for AI agents to read and edit Contentful draft content without publish permissions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,7 +31,8 @@ Use this skill when you need to read or edit content in Contentful using **hoste
31
31
  All `save` operations create **draft** versions. A human must review and publish in Contentful.
32
32
 
33
33
  **Assets:** Upload **is** supported (`asset upload`). Default workflow: **search and reuse** existing assets first (`index sync` → `asset search`). When uploading:
34
- - **Hosted MCP:** always `cms_edit_request_staged_upload` → curl → `asset upload --staged` (never `--base64`)
34
+ - **Raster/video:** `cms_edit_request_staged_upload` → curl → `cms_edit_media` prepare (`stagedUploadIds`) → wait → catalog → import with real alt. Never `asset upload --staged/--url/--base64` for jpeg/png/webp/gif/mp4.
35
+ - **SVG/PDF/Lottie:** `cms_edit_request_staged_upload` → curl → `asset upload --staged` (never `--base64`)
35
36
  - Use a **sensible fileName** and **descriptive title** (and alt text where the site uses it)
36
37
  - Avoid oversized images — width over **2000px** is usually wasteful for web (exact limits vary by project; check `asset audit` / media review guidance)
37
38
  - Prefer `--if-exists-by-filename` to avoid duplicates
@@ -371,13 +372,8 @@ cms-edit asset search "hero background"
371
372
  cms-edit asset search --filename istockphoto-123.jpg
372
373
  cms-edit asset search --filename-match 'istockphoto-.*'
373
374
 
374
- # Local CLI — URL or base64 (hosted MCP rejects --base64)
375
- cms-edit asset upload --url https://example.com/image.jpg --if-exists-by-filename
376
- cms-edit asset upload --base64 "$B64" --mime image/png --file-name poster.png
377
-
378
- # Hosted MCP — always staged upload for binary files
379
- # cms_edit_request_staged_upload → curl uploadUrl → consumeArgs
380
- # cms_edit ["asset", "upload", "--staged", "<uploadId>", "--mime", "image/png", "--file-name", "photo.png"]
375
+ # Raster/video: cms_edit_media prepare → wait → catalog → import (video: import only).
376
+ # SVG/PDF/Lottie: cms_edit_request_staged_upload → curl → asset upload --staged
381
377
 
382
378
  # Upload and create a Media wrapper in one step (--media-name defaults to asset title)
383
379
  cms-edit asset upload ./figure.png --with-media --media-position Middle