@diviops/mcp-server 1.5.9 → 1.5.11
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/README.md +22 -1
- package/data/verified-attrs-backlog.json +197 -0
- package/data/verified-attrs.json +663 -0
- package/dist/index.js +38 -2
- package/dist/preset-cli/__tests__/button-emitter.test.d.ts +8 -0
- package/dist/preset-cli/__tests__/button-emitter.test.js +188 -0
- package/dist/preset-cli/__tests__/cli.test.d.ts +9 -0
- package/dist/preset-cli/__tests__/cli.test.js +149 -0
- package/dist/preset-cli/__tests__/preset-create-unchanged.test.d.ts +13 -0
- package/dist/preset-cli/__tests__/preset-create-unchanged.test.js +64 -0
- package/dist/preset-cli/__tests__/registry.test.d.ts +5 -0
- package/dist/preset-cli/__tests__/registry.test.js +134 -0
- package/dist/preset-cli/__tests__/write-path.test.d.ts +8 -0
- package/dist/preset-cli/__tests__/write-path.test.js +120 -0
- package/dist/preset-cli/bin.d.ts +8 -0
- package/dist/preset-cli/bin.js +32 -0
- package/dist/preset-cli/button-emitter.d.ts +117 -0
- package/dist/preset-cli/button-emitter.js +218 -0
- package/dist/preset-cli/cli.d.ts +59 -0
- package/dist/preset-cli/cli.js +326 -0
- package/dist/preset-cli/registry.d.ts +107 -0
- package/dist/preset-cli/registry.js +168 -0
- package/dist/preset-cli/variable-token.d.ts +42 -0
- package/dist/preset-cli/variable-token.js +70 -0
- package/dist/preset-cli/write-path.d.ts +59 -0
- package/dist/preset-cli/write-path.js +89 -0
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -64,7 +64,7 @@ The skill enforces the Divi block format, the design system, and the response co
|
|
|
64
64
|
|
|
65
65
|
## Tools at a glance
|
|
66
66
|
|
|
67
|
-
The server exposes **
|
|
67
|
+
The server exposes **73 tools** across the categories below. Each category links to representative tools; the full table lives in [server-reference.md](../docs/server-reference.md).
|
|
68
68
|
|
|
69
69
|
| Category | Use case | Tool prefixes |
|
|
70
70
|
|----------|----------|---------------|
|
|
@@ -80,6 +80,27 @@ The server exposes **70 tools** across the categories below. Each category links
|
|
|
80
80
|
|
|
81
81
|
See [server-reference.md](../docs/server-reference.md) for per-tool descriptions.
|
|
82
82
|
|
|
83
|
+
## Bundled CLI — `diviops-preset`
|
|
84
|
+
|
|
85
|
+
The package also ships a standalone command-line preset emitter, `diviops-preset`,
|
|
86
|
+
that produces byte-canonical Divi 5.5.x preset JSON gated by the verified-attrs
|
|
87
|
+
registry (`data/verified-attrs.json`). It is independent of the MCP stdio server —
|
|
88
|
+
run it directly:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
diviops-preset button --name "Primary" --bg-color gcid-primary-color \
|
|
92
|
+
--bg-color-hover gcid-secondary-color --radius 8px \
|
|
93
|
+
--font-family Inter --font-weight 600 --font-color gcid-body-color
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`--dry-run` (the default) composes and prints the canonical JSON with no
|
|
97
|
+
credentials and no network. `--apply` posts to the existing `/preset/create`
|
|
98
|
+
REST route, reusing the same `WP_URL` / `WP_USER` / `WP_APP_PASSWORD` env vars.
|
|
99
|
+
The current scope is one emitter — `divi/button` group presets. See the
|
|
100
|
+
[preset-cli reference](https://github.com/oaris-dev/diviops/blob/main/diviops-server/src/preset-cli/README.md)
|
|
101
|
+
for the full command reference (the `src/` tree is not part of the published
|
|
102
|
+
npm package — this link resolves on the repository).
|
|
103
|
+
|
|
83
104
|
## Response contract
|
|
84
105
|
|
|
85
106
|
Tools return a standardized envelope. The shape lets clients branch on `ok` and machine-readable `error.code` without parsing freeform messages.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"generated_at": "2026-05-19",
|
|
4
|
+
"purpose": "Capture-priority backlog for cells in verified-attrs.json whose EFFECTIVE evidence (min(pattern, cell)) is below VB_PRESET_STORAGE_VERIFIED (4). Each entry names what specifically needs a VB-roundtrip capture to upgrade. Sorted by likely real-world authoring importance (heuristic: Phase 1 modules first; Tier 1 universal decorations before Tier 2 pattern families before Tier 3 unique attrs; group-preset bindings before inline-only).",
|
|
5
|
+
"heuristic_note": "'Likely importance' favors cells that would unblock the most preset-driven authoring once captured. The 4 Phase 1 modules (divi/section, divi/heading, divi/text, divi/button) carry most of the real-world authoring weight; cells outside those modules are lower-priority until customer / dogfooding pressure surfaces them.",
|
|
6
|
+
"items": [
|
|
7
|
+
{
|
|
8
|
+
"priority": 1,
|
|
9
|
+
"module": "divi/heading",
|
|
10
|
+
"wrapper": "module",
|
|
11
|
+
"pattern_family": "module.decoration.background",
|
|
12
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
13
|
+
"blocker": "Pattern is VB_PRESET_STORAGE_VERIFIED (round-4-section.json) but applicability[divi/heading].cell_evidence_level is SCHEMA_OBSERVED. Need a divi/heading module-preset capture that emits module.decoration.background.desktop.value.color to lift the cell.",
|
|
14
|
+
"capture_target": "module-preset on divi/heading with module.decoration.background.desktop.value.color set via VB",
|
|
15
|
+
"value_to_authoring": "high (heading-with-background is a common pattern for accent / callout headings)",
|
|
16
|
+
"notes": "Should be captured on divi5-clean.local per reference_substrate_roles."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"priority": 1,
|
|
20
|
+
"module": "divi/text",
|
|
21
|
+
"wrapper": "module",
|
|
22
|
+
"pattern_family": "module.decoration.background",
|
|
23
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
24
|
+
"blocker": "Same as divi/heading row: pattern verified, cell not.",
|
|
25
|
+
"capture_target": "module-preset on divi/text with module.decoration.background.desktop.value.color",
|
|
26
|
+
"value_to_authoring": "medium",
|
|
27
|
+
"notes": ""
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"priority": 1,
|
|
31
|
+
"module": "divi/heading",
|
|
32
|
+
"wrapper": "module",
|
|
33
|
+
"pattern_family": "module.decoration.spacing",
|
|
34
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
35
|
+
"blocker": "Pattern verified on section. Need a divi/heading module-preset with module.decoration.spacing.padding to confirm padding-widget atomicity holds on heading too.",
|
|
36
|
+
"capture_target": "module-preset on divi/heading with module.decoration.spacing.padding (touch top + bottom only) to confirm 4-corner + 2-sync emission rule cross-module",
|
|
37
|
+
"value_to_authoring": "high",
|
|
38
|
+
"notes": "Also covers margin axis if user touches both."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"priority": 1,
|
|
42
|
+
"module": "divi/text",
|
|
43
|
+
"wrapper": "module",
|
|
44
|
+
"pattern_family": "module.decoration.spacing",
|
|
45
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
46
|
+
"blocker": "Same as divi/heading row.",
|
|
47
|
+
"capture_target": "module-preset on divi/text with module.decoration.spacing.padding",
|
|
48
|
+
"value_to_authoring": "medium",
|
|
49
|
+
"notes": ""
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"priority": 1,
|
|
53
|
+
"module": "divi/button",
|
|
54
|
+
"wrapper": "module",
|
|
55
|
+
"pattern_family": "module.decoration.spacing",
|
|
56
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
57
|
+
"blocker": "Pattern verified. Button-module padding is canonically authored on module.decoration.spacing (Button exception); cell needs its own VB roundtrip to upgrade.",
|
|
58
|
+
"capture_target": "module-preset on divi/button with module.decoration.spacing.padding",
|
|
59
|
+
"value_to_authoring": "high (button padding is core to button design system)",
|
|
60
|
+
"notes": "Pair with hover-padding-gate test (per workaround A1) — capture should include the bypass corner if A1 still applies."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"priority": 2,
|
|
64
|
+
"module": "divi/heading",
|
|
65
|
+
"wrapper": "module",
|
|
66
|
+
"pattern_family": "module.decoration.border",
|
|
67
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
68
|
+
"blocker": "Pattern verified on button (outlined). Need a divi/heading module-preset with module.decoration.border.{radius, styles.all.*} to confirm shape on heading.",
|
|
69
|
+
"capture_target": "module-preset on divi/heading with border.radius + border.styles.all.{width, color}",
|
|
70
|
+
"value_to_authoring": "medium",
|
|
71
|
+
"notes": ""
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"priority": 2,
|
|
75
|
+
"module": "divi/section",
|
|
76
|
+
"wrapper": "module",
|
|
77
|
+
"pattern_family": "module.decoration.border",
|
|
78
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
79
|
+
"blocker": "Same.",
|
|
80
|
+
"capture_target": "module-preset on divi/section with module.decoration.border.*",
|
|
81
|
+
"value_to_authoring": "medium",
|
|
82
|
+
"notes": ""
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"priority": 2,
|
|
86
|
+
"pattern_family": "divi/spacing",
|
|
87
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
88
|
+
"blocker": "Pattern-level evidence is bucket existence only (presets.md group-bucket inventory). No Phase 1 capture of a divi/spacing GROUP-preset (not module-preset spacing) exists; the round-4-section capture stores spacing under module.decoration.spacing as module-preset attrs, not as a divi/spacing group preset. Need a dedicated divi/spacing group-preset capture for each {module.decoration.spacing, title.decoration.spacing, content.decoration.spacing} slot.",
|
|
89
|
+
"capture_targets": [
|
|
90
|
+
"divi/spacing group preset bound to module.decoration.spacing on a divi/section",
|
|
91
|
+
"divi/spacing group preset bound to title.decoration.spacing on a divi/heading",
|
|
92
|
+
"divi/spacing group preset bound to content.decoration.spacing on a divi/text"
|
|
93
|
+
],
|
|
94
|
+
"value_to_authoring": "very high (Composable Settings spacing presets are the entire preset-driven authoring story for spacing)",
|
|
95
|
+
"notes": "These captures lift the pattern_evidence_level for divi/spacing from SCHEMA_OBSERVED to VB_PRESET_STORAGE_VERIFIED in addition to lifting each cell."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"priority": 2,
|
|
99
|
+
"pattern_family": "divi/font (Pattern B)",
|
|
100
|
+
"module": "divi/text",
|
|
101
|
+
"wrapper": "content",
|
|
102
|
+
"current_effective_evidence": "UNVERIFIED",
|
|
103
|
+
"blocker_note": "Cell missing entirely from registry — divi/text + Pattern B is not yet enumerated as an applicability cell.",
|
|
104
|
+
"blocker": "Pattern B Heading cell exists but Pattern B body-text cell does not. round-2 _meta explicitly defers Pattern B body-text capture 'unless heading-vs-body shape divergence surfaces a body-specific need'.",
|
|
105
|
+
"capture_target": "divi/font-body group preset with locally-uploaded font (e.g. Sora 700) on divi/text content wrapper",
|
|
106
|
+
"value_to_authoring": "low (EU-GDPR sites need it, but Pattern A covers majority)",
|
|
107
|
+
"notes": ""
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"priority": 2,
|
|
111
|
+
"pattern_family": "divi/button.font (Pattern B)",
|
|
112
|
+
"module": "divi/button",
|
|
113
|
+
"wrapper": "button",
|
|
114
|
+
"current_effective_evidence": "UNVERIFIED",
|
|
115
|
+
"blocker_note": "No Pattern B button capture exists; cell is absent from registry.",
|
|
116
|
+
"blocker": "Pattern A button font verified; Pattern B button font has no capture.",
|
|
117
|
+
"capture_target": "divi/button group preset using local-hosted font on the button wrapper",
|
|
118
|
+
"value_to_authoring": "low (EU-GDPR niche)",
|
|
119
|
+
"notes": ""
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"priority": 3,
|
|
123
|
+
"module": "divi/blurb",
|
|
124
|
+
"wrapper": "title",
|
|
125
|
+
"pattern_family": "divi/font",
|
|
126
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
127
|
+
"blocker": "Pattern A divi/font verified on divi/heading. Wrapper inferred from module-formats.md Font Family B; not VB-roundtripped on divi/blurb specifically.",
|
|
128
|
+
"capture_target": "divi/font group preset bound to blurb's title element",
|
|
129
|
+
"value_to_authoring": "medium",
|
|
130
|
+
"notes": "Same capture also lights up bodyFont cell for blurb content if both are exercised."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"priority": 3,
|
|
134
|
+
"module": "divi/testimonial",
|
|
135
|
+
"wrapper": "author",
|
|
136
|
+
"pattern_family": "divi/font",
|
|
137
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
138
|
+
"blocker": "Testimonial exposes author, jobTitle, company variants — each a separate cell.",
|
|
139
|
+
"capture_target": "divi/font group preset on testimonial.author + .jobTitle + .company",
|
|
140
|
+
"value_to_authoring": "low",
|
|
141
|
+
"notes": ""
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"priority": 3,
|
|
145
|
+
"module": "divi/accordion-item",
|
|
146
|
+
"wrapper": "title",
|
|
147
|
+
"pattern_family": "divi/font",
|
|
148
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
149
|
+
"blocker": "Wrapper inferred from module-formats.md.",
|
|
150
|
+
"capture_target": "divi/font group preset on accordion-item title",
|
|
151
|
+
"value_to_authoring": "low",
|
|
152
|
+
"notes": ""
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"priority": 3,
|
|
156
|
+
"module": "divi/slide",
|
|
157
|
+
"wrapper": "title",
|
|
158
|
+
"pattern_family": "divi/font",
|
|
159
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
160
|
+
"blocker": "Wrapper inferred.",
|
|
161
|
+
"capture_target": "divi/font group preset on slide.title",
|
|
162
|
+
"value_to_authoring": "low",
|
|
163
|
+
"notes": ""
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"priority": 3,
|
|
167
|
+
"module": "divi/number-counter",
|
|
168
|
+
"wrapper": "title",
|
|
169
|
+
"pattern_family": "divi/font",
|
|
170
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
171
|
+
"blocker": "Wrapper inferred.",
|
|
172
|
+
"capture_target": "divi/font group preset on number-counter.title (number wrapper too)",
|
|
173
|
+
"value_to_authoring": "low",
|
|
174
|
+
"notes": ""
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"priority": 3,
|
|
178
|
+
"module": "divi/image",
|
|
179
|
+
"wrapper": "image",
|
|
180
|
+
"pattern_family": "module.decoration.border",
|
|
181
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
182
|
+
"blocker": "Image exception: border lives on image.decoration.border, not module.decoration.border. Also: border-radius from preset alone does not render on image — must reinforce inline per module-formats.md image-specific quirk.",
|
|
183
|
+
"capture_target": "module-preset on divi/image with image.decoration.border AND inline-reinforced radius; capture should document the preset-only-radius-doesnt-render gotcha",
|
|
184
|
+
"value_to_authoring": "medium",
|
|
185
|
+
"notes": "Cross-reference workaround A1-style discipline (capture the bug too)."
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"priority": 4,
|
|
189
|
+
"pattern_family": "module.decoration.sizing",
|
|
190
|
+
"current_effective_evidence": "SCHEMA_OBSERVED",
|
|
191
|
+
"blocker": "Pattern itself only SCHEMA_OBSERVED (no Phase 1 capture); no module cell can rise above SCHEMA_OBSERVED until a sizing capture lands.",
|
|
192
|
+
"capture_target": "module-preset on divi/column with sizing.flexType, parent row in display:'flex' mode — confirm 24-unit-grid emission and parent-prereq",
|
|
193
|
+
"value_to_authoring": "medium (column-sizing is fundamental but mostly authored inline, not via presets)",
|
|
194
|
+
"notes": "Same capture session could exercise divi/group and divi/section sizing too."
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
}
|