@expressivecss/mcp-server 0.4.1 → 0.5.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.
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CHANGELOG.md +58 -0
- package/README.md +2 -2
- package/capability-roadmap.json +1812 -289
- package/component-decisions.json +3290 -891
- package/component-guides.json +176 -76
- package/contract.json +5 -4
- package/lint.mjs +8 -4
- package/package.json +4 -2
- package/scripts/bounded-file.mjs +73 -0
- package/scripts/resolve-version.mjs +17 -60
- package/scripts/semantics-rules.mjs +184 -0
- package/semantics-data.json +746 -33
- package/server.js +242 -196
- package/smoke.mjs +206 -22
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expressivecss-mcp",
|
|
3
3
|
"displayName": "ExpressiveCSS MCP",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"description": "ExpressiveCSS workflow server with Setup Expert, Rules Enforcer, Creative Director, Page Arcjitect, Component Syntax Expert, and Quality Inspector.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "BaezFJ",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expressivecss-mcp",
|
|
3
3
|
"displayName": "ExpressiveCSS MCP",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"description": "ExpressiveCSS workflow server with Setup Expert, Rules Enforcer, Creative Director, Page Arcjitect, Component Syntax Expert, and Quality Inspector.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "BaezFJ",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,63 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.5.0 - 2026-10-27
|
|
6
|
+
|
|
7
|
+
- Security: update the locked `body-parser` to 2.4.0, `fast-uri` to 3.1.9,
|
|
8
|
+
and the `qs` override to 6.16.1 to resolve known dependency advisories.
|
|
9
|
+
- Security: `quality_inspector` skips every `files` entry outside
|
|
10
|
+
`projectRoot` with the same reason before touching the disk. A missing
|
|
11
|
+
path used to get "file does not exist", so a client could tell which host
|
|
12
|
+
paths exist.
|
|
13
|
+
- Security: a nav or control that repeats one id in `aria-labelledby` no
|
|
14
|
+
longer makes inspection walk the labelled element once per repeat. A
|
|
15
|
+
snippet of about 136 KB used to block the server for seconds, and a larger
|
|
16
|
+
one could run it out of memory. Each id now counts once, and only the
|
|
17
|
+
first 32 are read.
|
|
18
|
+
- Security: version resolution reads crafted lockfiles in linear time. Blank
|
|
19
|
+
lines inside a pnpm entry, or a long run of `(` in a version, used to stall
|
|
20
|
+
every project-scoped tool call for as long as minutes or hours.
|
|
21
|
+
- On Windows, a client `projectRoot` that is a network path (`\\host\share`)
|
|
22
|
+
is refused before it is resolved, unless it sits under an allowed root.
|
|
23
|
+
Resolving it would contact that host.
|
|
24
|
+
|
|
25
|
+
- `rules_enforcer` and the lint command flag the class names, color roles
|
|
26
|
+
and markup paths that ExpressiveCSS 0.16.0 removes, and each finding names
|
|
27
|
+
the replacement. The new rule IDs start with `legacy-`: material-icons,
|
|
28
|
+
i-icon, visibility-alias, helper-class, renamed-component, picker-root,
|
|
29
|
+
sheet-class, variant-alias, markup-path, carousel-flat, color-role,
|
|
30
|
+
selector, datepicker-range and range-export. Class names match as whole
|
|
31
|
+
tokens in `class`, JSX `className`, `className={"…"}` and template
|
|
32
|
+
literals; `legacy-selector` covers CSS selectors and query strings.
|
|
33
|
+
- The three drag-handle rules select `.drag-handle` only; `.handle` is a
|
|
34
|
+
removed name that `legacy-sheet-class` reports inside a bottom sheet.
|
|
35
|
+
- Static inspection no longer stalls the server on adversarial markup. An
|
|
36
|
+
unclosed class value full of `btn` took 30 s to check and now takes about
|
|
37
|
+
100 ms. Markup nested deeper than 256 elements stops early with
|
|
38
|
+
`markup nesting limit reached`; 4,000 nested `aria-hidden` elements took
|
|
39
|
+
20 s before.
|
|
40
|
+
- `legacy-renamed-component` no longer stalls on an unclosed tag that
|
|
41
|
+
repeats `class="range`. A 500,000-character snippet blocked the server
|
|
42
|
+
for about 10 s.
|
|
43
|
+
- Breaking: with `EXPRESSIVECSS_MCP_ALLOWED_PROJECT_ROOTS` unset, a client
|
|
44
|
+
`projectRoot` must now sit inside the server's default root, from
|
|
45
|
+
`--project-root` or the working directory. Before, any directory was
|
|
46
|
+
accepted, so a prompt-injected call such as `quality_inspector` with
|
|
47
|
+
`projectRoot: "/"` could report whether a file like `~/.ssh/id_rsa`
|
|
48
|
+
existed, with its size and SHA-256. A missing `projectRoot` is now an
|
|
49
|
+
error instead of an `unresolved` result. To pass other projects, list
|
|
50
|
+
them in `EXPRESSIVECSS_MCP_ALLOWED_PROJECT_ROOTS`.
|
|
51
|
+
- A client `projectRoot` resolves to the real path that passed the root
|
|
52
|
+
check, so swapping a symlink after the check cannot redirect later reads.
|
|
53
|
+
- Reading a FIFO inside the project fails at once instead of hanging the call.
|
|
54
|
+
- `quality_inspector` stops its typecheck or test command when the call is
|
|
55
|
+
cancelled or the client closes the session. Before, the command kept
|
|
56
|
+
running after the server exited.
|
|
57
|
+
- The lint hook exits 2 when inspection throws, so a crash blocks the edit
|
|
58
|
+
instead of letting the file through unlinted.
|
|
59
|
+
- Bundled framework guidance: ExpressiveCSS 0.16.0.
|
|
60
|
+
|
|
3
61
|
## 0.4.1 - 2026-10-14
|
|
4
62
|
|
|
5
63
|
- The catalogue, guides and rules cover keypad and keyboard.
|
package/README.md
CHANGED
|
@@ -643,7 +643,7 @@ EXPRESSIVECSS_MCP_ALLOWED_COMMAND_ROOTS=["/srv/projects/site-a","/srv/projects/s
|
|
|
643
643
|
|
|
644
644
|
The real `projectRoot` must equal or be contained by one of those roots. A tool caller cannot expand this policy. Allowed commands receive only the executable path, system/temp/locale variables, `CI=1`, `NO_COLOR=1`, and `HOME`/`USERPROFILE` reset to the project root. API keys, tokens, passwords, cloud credentials, SSH agent variables, and other MCP-process environment values are not forwarded.
|
|
645
645
|
|
|
646
|
-
|
|
646
|
+
A tool's `projectRoot` must sit inside the default root, from `--project-root` or the working directory, because `quality_inspector` reports the existence, size and SHA-256 of files under it. To let a caller name other directories, set `EXPRESSIVECSS_MCP_ALLOWED_PROJECT_ROOTS` in the same format; the listed roots then replace the default root as the allowlist. A `projectRoot` that is missing, or whose real path is outside every allowed root, fails with a tool error. An empty or invalid value denies every caller-supplied root. Calls without a `projectRoot` use the default root, which is not checked.
|
|
647
647
|
|
|
648
648
|
## Sample client configuration
|
|
649
649
|
|
|
@@ -677,7 +677,7 @@ Hermes uses the top-level `mcp_servers` setting shown in `sample-hermes-config.y
|
|
|
677
677
|
## Notes
|
|
678
678
|
|
|
679
679
|
- Published package scripts are self-contained: `npm test` runs the live MCP protocol smoke test, and `npm pack --dry-run` runs that test through `prepack`.
|
|
680
|
-
- Repository maintainers can verify generated sources with `node ../../scripts/gen-expressivecss-skill.mjs --check
|
|
680
|
+
- Repository maintainers can verify generated sources with `node ../../scripts/gen-expressivecss-skill.mjs --check`, then run `npm test`. To refresh them, run the generator without `--check` before packing.
|
|
681
681
|
- `setup_expert` resolves framework source, an installed package, or supported lockfiles in that order. A manifest range alone is reported as unresolved rather than treated as the installed version. An installed version outside the direct manifest range also blocks contract-dependent guidance.
|
|
682
682
|
- Pass `projectRoot` in tool calls when the target project differs from the MCP process working directory.
|
|
683
683
|
|