@typeroll/mcp-server 0.45.77 → 0.45.80
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/dist/bundled-content.js +29 -8
- package/dist/server.js +1 -1
- package/dist/tools/deploy.js +2 -1
- package/dist/tools/domain.js +3 -3
- package/dist/tools/media.js +1 -1
- package/dist/tools/migration.js +4 -2
- package/dist/tools/pages.js +1 -1
- package/dist/tools/preview.js +1 -1
- package/dist/tools/settings.js +9 -2
- package/dist/tools/working-copy.js +1 -1
- package/dist/version.js +1 -1
- package/dist/workspace.js +7 -6
- package/package.json +2 -2
- package/skills/tr-brand.md +43 -7
- package/skills/tr-header-footer.md +95 -41
- package/skills/tr-migrate-wp.md +77 -6
- package/skills/tr-migration-evidence.md +3 -1
- package/skills/tr-new-site.md +42 -8
- package/skills/tr-starter-design.md +36 -0
- package/workspace-templates/qa/checklist.md +52 -0
- package/workspace-templates/qa/typeroll-platform-feedback.md +11 -0
- package/workspace-templates/scripts/README.md +111 -0
- package/workspace-templates/scripts/typeroll/browser.cjs +50 -0
- package/workspace-templates/scripts/typeroll/call.py +12 -0
- package/workspace-templates/scripts/typeroll/capture_text.cjs +17 -0
- package/workspace-templates/scripts/typeroll/card-stacking-check.cjs +27 -0
- package/workspace-templates/scripts/typeroll/check_assets.py +72 -0
- package/workspace-templates/scripts/typeroll/check_unsaved.py +13 -0
- package/workspace-templates/scripts/typeroll/check_url_parity.py +74 -0
- package/workspace-templates/scripts/typeroll/color_tokens.py +81 -0
- package/workspace-templates/scripts/typeroll/compare_text.py +59 -0
- package/workspace-templates/scripts/typeroll/contact_sheet.py +20 -0
- package/workspace-templates/scripts/typeroll/layout_trace.cjs +33 -0
- package/workspace-templates/scripts/typeroll/prepare_image.py +64 -0
- package/workspace-templates/scripts/typeroll/shoot_hosted.cjs +26 -0
- package/workspace-templates/scripts/typeroll/shootframe.cjs +16 -0
- package/workspace-templates/scripts/typeroll/sweep_blocks.example.py +23 -0
- package/workspace-templates/scripts/typeroll/trlib.py +212 -0
- package/workspace-templates/workflows/design.md +65 -0
- package/workspace-templates/workflows/migration.md +94 -0
- package/workspace-templates/workflows/new-site.md +7 -0
- package/workspace-templates/workflows/source-media.md +50 -0
|
@@ -33,3 +33,97 @@ Track import, block reconstruction, separate text/design review, candidate
|
|
|
33
33
|
publication and domain cutover as separate milestones. Import completion is not
|
|
34
34
|
launch approval. All four text/design combinations use the same block hierarchy
|
|
35
35
|
and URL continuity contract. Planning choices are not migration API fields.
|
|
36
|
+
|
|
37
|
+
## Repeatable reconstruction and acceptance
|
|
38
|
+
|
|
39
|
+
Read workflows/design.md and scripts/README.md. First check whether public
|
|
40
|
+
WordPress REST + HTML covers the source; use tr-migrate-wp's access decision
|
|
41
|
+
table before asking for a helper plugin. Inventory both Pages and posts plus
|
|
42
|
+
internal links and known old slugs. A sitemap alone is not complete.
|
|
43
|
+
|
|
44
|
+
Discard HTML comments before extracting text, resolve relative links against
|
|
45
|
+
the source, and keep an explicit old URL map. Do not redirect deleted content
|
|
46
|
+
to the home page merely to get a 200. Preserve/renew text and design separately.
|
|
47
|
+
Use capture_text.cjs + compare_text.py for preserved text with explicit selectors.
|
|
48
|
+
|
|
49
|
+
Before every authorized test deployment run check_unsaved.py (Pages and partials).
|
|
50
|
+
Deploy saved content to the agreed protected test host, then run check_url_parity.py,
|
|
51
|
+
check_assets.py and shoot_hosted.cjs. Check whole-card targets with
|
|
52
|
+
card-stacking-check.cjs and inspect actual desktop/mobile screenshots. Record a
|
|
53
|
+
QA round and platform findings. Review on the owner's phone when possible.
|
|
54
|
+
Domain preparation/cutover and production indexing follow their own explicit
|
|
55
|
+
approval scope and the platform's current guided flow; do not bypass readiness.
|
|
56
|
+
Do not request a second approval for a step the owner has already authorized.
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
## Native controls and publication checks
|
|
60
|
+
|
|
61
|
+
On Core 0.2.103 / MCP 0.45.79 or later, discover the actual block schemas first.
|
|
62
|
+
Use column `content_gap_px`, responsive section `padding_y`, heading-role
|
|
63
|
+
`space_before`/`space_after`, hero focal/fit/text-position fields and image
|
|
64
|
+
`never_upscale` instead of one-off CSS. Responsive block keys start at `mobile`,
|
|
65
|
+
not `base`. For vertical-only spacing, do not reset horizontal padding with CSS
|
|
66
|
+
shorthand. Optional `click_to_load` videos need an explicit poster if desired;
|
|
67
|
+
choose a first-party poster to avoid early provider requests.
|
|
68
|
+
|
|
69
|
+
`import_sitemap` can include public WordPress REST (`include_wordpress: true`)
|
|
70
|
+
and a bounded crawl (`crawl_pages: 10`). Record truncation and access warnings.
|
|
71
|
+
A `matched_draft` URL is accounted for in the CMS but not ready for launch.
|
|
72
|
+
Resolve `unpublished_targets`, redirect loops/chains and actual deployed parity.
|
|
73
|
+
|
|
74
|
+
A deploy with working copies returns `unsaved_content`; review the targets.
|
|
75
|
+
Save explicitly or obtain approval to publish saved content only using
|
|
76
|
+
`allow_unsaved: true`. Never silently save somebody else's work.
|
|
77
|
+
|
|
78
|
+
Keep the bound Organization/Site/Version explicit. A site API key cannot switch
|
|
79
|
+
to another Organization: use an authorized OAuth connection or a separate key.
|
|
80
|
+
Read the schema for target envelopes and pagination; do not guess aliases.
|
|
81
|
+
Page/partial block writes update working copies; check `saved` and use
|
|
82
|
+
`commit_working_copy` with `target: {kind: "page"|"partial", id: "..."}`.
|
|
83
|
+
Page templates save immediately and do not have working copies. REST read envelopes and
|
|
84
|
+
MCP tool text are different layers; `call.py` returns the decoded tool result.
|
|
85
|
+
|
|
86
|
+
## Design token check
|
|
87
|
+
|
|
88
|
+
Follow workflows/design.md for palette/font roles and named scales. Run
|
|
89
|
+
`lint_design_tokens` before launch and after major design changes. Review exact
|
|
90
|
+
colour replacements with scripts/typeroll/color_tokens.py; record deliberate
|
|
91
|
+
exceptions in decisions.md. Preserve text independently from design changes.
|
|
92
|
+
|
|
93
|
+
## Source retirement, analytics and domain preparation
|
|
94
|
+
|
|
95
|
+
Before old hosting is retired, follow workflows/source-media.md: preserve unused
|
|
96
|
+
and print originals in a private archive with independently verified checksums.
|
|
97
|
+
Only approved web assets enter the CMS. Use ICC-aware conversion for CMYK/TIFF.
|
|
98
|
+
|
|
99
|
+
Enable Analytics through the authorized Typeroll API/MCP (`update_app` or the
|
|
100
|
+
Organization analytics tools), then read back settings and verify the beacon and
|
|
101
|
+
cookies on the actual artifact. Resolve missing provider scopes through the
|
|
102
|
+
normal approval flow. A separately authorized provider-side setup with a supplied
|
|
103
|
+
beacon token is an alternative, not a way to bypass Organization permissions.
|
|
104
|
+
Never expose a provider API token as a public beacon token.
|
|
105
|
+
|
|
106
|
+
From Core 0.2.106, saving future hosts does not redirect normal publication.
|
|
107
|
+
Keep using `trigger_deploy` to update and review the current/temporary address.
|
|
108
|
+
Read `next_publication` in `read_publishing_domains` for the destination.
|
|
109
|
+
Shortly before DNS changes, deliberately call `prepare_publishing_domain_change`
|
|
110
|
+
with the current revision. It prepares the last successful public snapshot,
|
|
111
|
+
not later unpublished CMS edits. Review its frozen indexing settings and DNS
|
|
112
|
+
requirements, then approve traffic separately. If another normal publication
|
|
113
|
+
succeeds while the candidate waits, prepare again: an outdated snapshot cannot
|
|
114
|
+
replace newer published content. There is no need to clear saved future hosts.
|
|
115
|
+
To correct candidate indexing, save the intended setting, publish normally, and
|
|
116
|
+
prepare again. Temporary-host protection keeps the review address noindex even
|
|
117
|
+
when the published authored setting permits indexing on the future host.
|
|
118
|
+
Keep MX/SPF and unrelated DNS unchanged; review any validation window and obtain
|
|
119
|
+
the already-defined traffic-switch authorization.
|
|
120
|
+
|
|
121
|
+
## Owner-supplied facts and photos
|
|
122
|
+
|
|
123
|
+
Record owner statements, source and confirmation date. Preserve approved copy
|
|
124
|
+
under `text: preserve`; do not silently delete dates/prices or rewrite it into
|
|
125
|
+
"timeless" language. Under `text: renew`, propose removing stale details or using
|
|
126
|
+
recurring-event wording only when a source supports recurrence. Flag uncertain
|
|
127
|
+
facts for review or keep new Pages in draft; missing evidence does not prove that
|
|
128
|
+
an event stopped. Link to the actual organiser when relevant. Upload approved
|
|
129
|
+
photos with SHA-256 verification and review focal points at mobile/desktop widths.
|
|
@@ -15,3 +15,10 @@ Do not publish, change DNS or send messages without explicit approval.
|
|
|
15
15
|
|
|
16
16
|
The CMS owns current content and settings. The repository owns the brief, rules,
|
|
17
17
|
decisions and evidence. Load recipes when needed, not the whole manual.
|
|
18
|
+
|
|
19
|
+
## Design token check
|
|
20
|
+
|
|
21
|
+
Follow workflows/design.md for palette/font roles and named scales. Run
|
|
22
|
+
`lint_design_tokens` before launch and after major design changes. Review exact
|
|
23
|
+
colour replacements with scripts/typeroll/color_tokens.py; record deliberate
|
|
24
|
+
exceptions in decisions.md. Preserve text independently from design changes.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Preserve source media before retirement
|
|
2
|
+
|
|
3
|
+
This is a separate owner-approved archive, not an import of every old file into
|
|
4
|
+
the CMS. Do not delete source files or cancel old hosting as part of this routine.
|
|
5
|
+
|
|
6
|
+
1. Inventory originals and downloads from the source API/export, including files
|
|
7
|
+
absent from published pages. Include drafts, private records and historical
|
|
8
|
+
attachments when authorized. A public sitemap or REST response cannot prove
|
|
9
|
+
the library is complete. Keep the export under ignored `sources/private/`.
|
|
10
|
+
2. Compare with the new site's references, including templates, partials and
|
|
11
|
+
retained URLs. Record used, unused and uncertain files. "Unused" is not an
|
|
12
|
+
instruction to delete. Preserve print originals even when a web derivative exists.
|
|
13
|
+
3. Agree a private archive destination, its owning account, retention and access.
|
|
14
|
+
Verify account/bucket identity and that public bucket/custom-domain access is
|
|
15
|
+
disabled. Use the owner's credentials through their secret manager; never put
|
|
16
|
+
credentials in scripts or manifests. Do not provision or expose a bucket silently.
|
|
17
|
+
4. Copy with bounded concurrency and bounded reads, stream large files and use
|
|
18
|
+
resumable transfers when supported. Preserve a collision-safe key derived from
|
|
19
|
+
the full source host/path, not just the filename. Never overwrite a different
|
|
20
|
+
object merely because the basename matches.
|
|
21
|
+
5. Record source URL, destination key, source ID, byte count, SHA-256, media type,
|
|
22
|
+
title/alt/caption, copy time and verification state in a private manifest.
|
|
23
|
+
ETag is not universally MD5 (multipart objects and providers differ). Use a
|
|
24
|
+
documented checksum API or stream the destination back and compare SHA-256
|
|
25
|
+
and size. Metadata claiming a hash is not proof of the uploaded bytes.
|
|
26
|
+
6. Resume only verified matches; report every unavailable source and hash conflict.
|
|
27
|
+
Verify a restore from the archive, including a large file. Keep an independent
|
|
28
|
+
private copy of the manifest. The owner reviews completeness and grants a
|
|
29
|
+
separate old-host retirement decision. This archive does not preserve old
|
|
30
|
+
public URLs by itself: keep URL parity/redirect acceptance separate.
|
|
31
|
+
|
|
32
|
+
## Prepare print images for the web
|
|
33
|
+
|
|
34
|
+
Use `scripts/typeroll/prepare_image.py` for a reviewed local TIFF or other original.
|
|
35
|
+
Install Pillow with ImageCms in an isolated environment. It applies EXIF
|
|
36
|
+
orientation, converts through the embedded (or explicitly supplied) ICC profile
|
|
37
|
+
to sRGB, embeds the sRGB profile, strips source EXIF metadata and writes a new
|
|
38
|
+
JPEG. It never changes the original, uploads files or edits a Page.
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
python3 scripts/typeroll/prepare_image.py sources/private/original.tif sources/private/web.jpg
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
CMYK without the correct profile fails; obtain the actual source profile instead
|
|
45
|
+
of guessing. `--source-profile sources/private/original.icc` supplies it.
|
|
46
|
+
Unprofiled RGB/gray requires an explicit `--assume-srgb` decision. Multi-page,
|
|
47
|
+
animated and transparent images require a separate reviewed workflow. Compare
|
|
48
|
+
colour, subject framing and sharpness visually before upload. Upload through the
|
|
49
|
+
normal integrity-checked media flow and choose alt/caption text independently.
|
|
50
|
+
Store the tool's hash report privately; never commit customer images or archives.
|