@expressivecss/mcp-server 0.4.0 → 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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expressivecss-mcp",
3
3
  "displayName": "ExpressiveCSS MCP",
4
- "version": "0.4.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.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,68 @@
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
+
61
+ ## 0.4.1 - 2026-10-14
62
+
63
+ - The catalogue, guides and rules cover keypad and keyboard.
64
+ - Bundled framework guidance: ExpressiveCSS 0.15.0.
65
+
3
66
  ## 0.4.0 - 2026-10-11
4
67
 
5
68
  - Command-output redaction no longer stalls the server on long token runs.
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
- Any tool accepts a `projectRoot` by default, and `quality_inspector` reports the existence, size and SHA-256 of files under it. To limit which directories a caller can name, set `EXPRESSIVECSS_MCP_ALLOWED_PROJECT_ROOTS` in the same format. A `projectRoot` whose real path is outside every listed root fails with a tool error. An empty or invalid value denies every caller-supplied root. The default root, from `--project-root` or the working directory, is not checked.
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` and `node scripts/sync-guides.mjs --check`, then run `npm test`. To refresh them, run those two generator commands without `--check` before packing.
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