saglitzdesign-mcp 0.3.1 → 0.4.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/LICENSE +0 -8
- package/NOTICE.md +16 -0
- package/README.md +40 -9
- package/dist/index.js +9 -1
- package/dist/prompts.js +146 -0
- package/package.json +3 -2
package/LICENSE
CHANGED
|
@@ -19,11 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
Note on bundled research content: the files under knowledge/ are original
|
|
26
|
-
syntheses written for this project, with sources cited in each document's
|
|
27
|
-
frontmatter. Screenshot images referenced by knowledge/examples/*.json are a
|
|
28
|
-
local research asset, are NOT part of this repository or the published
|
|
29
|
-
package, and may not be redistributed.
|
package/NOTICE.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Notice on bundled content
|
|
2
|
+
|
|
3
|
+
The software is licensed under the [MIT License](LICENSE).
|
|
4
|
+
|
|
5
|
+
Additional notes on the research content shipped in this repository:
|
|
6
|
+
|
|
7
|
+
- The documents under `knowledge/` are original syntheses written for this
|
|
8
|
+
project. Sources consulted are cited in each document's frontmatter
|
|
9
|
+
(`sources:`). No third‑party text is reproduced verbatim.
|
|
10
|
+
- Screenshot images referenced by `knowledge/examples/*.json` are a local
|
|
11
|
+
research asset. They are **not** part of this repository or any published
|
|
12
|
+
package (`knowledge/examples/images/` is git‑ignored), and may not be
|
|
13
|
+
redistributed. See [`scripts/regenerate-examples.md`](scripts/regenerate-examples.md).
|
|
14
|
+
|
|
15
|
+
These notes describe the provenance of the bundled content; they do not modify
|
|
16
|
+
the MIT License terms above.
|
package/README.md
CHANGED
|
@@ -9,7 +9,11 @@ expert‑level guidance on **web, iOS, Android and macOS design** — plus the
|
|
|
9
9
|
**UX, copywriting, SEO, GEO and marketing** knowledge that makes a product
|
|
10
10
|
actually convert.
|
|
11
11
|
|
|
12
|
-
56 curated knowledge documents · 10 tools · phased roadmaps · real‑world visual examples
|
|
12
|
+
56 curated knowledge documents · 10 tools · 5 build/review workflows · phased roadmaps · real‑world visual examples
|
|
13
|
+
|
|
14
|
+
[](https://www.npmjs.com/package/saglitzdesign-mcp)
|
|
15
|
+
[](LICENSE)
|
|
16
|
+
[](https://modelcontextprotocol.io)
|
|
13
17
|
|
|
14
18
|
[Why](#why) · [What's inside](#whats-inside) · [Tools](#tools) · [Install](#install) · [Usage](#usage) · [Extending](#extending-the-knowledge-base) · [License](#license)
|
|
15
19
|
|
|
@@ -54,6 +58,28 @@ instead of guessing.
|
|
|
54
58
|
| 📣 **Marketing** | Branding & identity (strategy, logo systems, brand voice) · email marketing (design, lifecycle, deliverability) · ad creative (hooks, platform specs, testing) |
|
|
55
59
|
| 🖼️ **Patterns & examples** | Real‑world patterns studied from top apps & sites, plus a curated screenshot library served as images |
|
|
56
60
|
|
|
61
|
+
## Workflows (`/` prompts) — "build me a…"
|
|
62
|
+
|
|
63
|
+
Beyond answering questions, SaglitzDesign ships **prompts** that orchestrate an
|
|
64
|
+
entire build end‑to‑end. In Claude Code they appear in the `/` menu; invoke one
|
|
65
|
+
and the agent runs the full method — roadmap → positioning & copy → real
|
|
66
|
+
examples → **writes the actual code** → opens it in a browser, screenshots,
|
|
67
|
+
scores it against the critique rubric, and iterates until it passes.
|
|
68
|
+
|
|
69
|
+
| Prompt | What it does |
|
|
70
|
+
|---|---|
|
|
71
|
+
| **`build_landing_page`** | Designs & builds a conversion‑focused landing page, copy‑first, with a visual critique loop. |
|
|
72
|
+
| **`build_website`** | Builds a multi‑page marketing site — positioning, IA, SEO/GEO, shared design system. |
|
|
73
|
+
| **`build_mobile_app_ui`** | Builds iOS or Android screens on the correct platform baseline (HIG/Liquid Glass or Material 3). |
|
|
74
|
+
| **`design_review`** | Audits an existing site/app against the checklists and the 0–40 critique rubric, ranked by severity. |
|
|
75
|
+
| **`redesign`** | Improves an existing UI (bolder / quieter / higher‑converting) using the craft standards, with before→after scoring. |
|
|
76
|
+
|
|
77
|
+
> Just say, e.g., *"/build_landing_page for a SaaS invoicing tool for freelancers"* — the workflow asks for anything missing, then builds it.
|
|
78
|
+
>
|
|
79
|
+
> The visual critique loop uses whatever browser tool is connected (Claude in
|
|
80
|
+
> Chrome, Playwright, or chrome‑devtools MCP) to see and refine its own output.
|
|
81
|
+
> Without one, it reviews the code directly.
|
|
82
|
+
|
|
57
83
|
## Tools
|
|
58
84
|
|
|
59
85
|
| Tool | What it does |
|
|
@@ -73,7 +99,7 @@ instead of guessing.
|
|
|
73
99
|
|
|
74
100
|
**Requirements:** Node.js 18+.
|
|
75
101
|
|
|
76
|
-
**From npm** (
|
|
102
|
+
**From npm** (no clone needed):
|
|
77
103
|
|
|
78
104
|
```bash
|
|
79
105
|
npx saglitzdesign-mcp
|
|
@@ -90,13 +116,17 @@ npm run build
|
|
|
90
116
|
|
|
91
117
|
### Claude Code
|
|
92
118
|
|
|
93
|
-
Register it once, available in every project:
|
|
119
|
+
Register it once (via npm — no clone), available in every project:
|
|
94
120
|
|
|
95
121
|
```bash
|
|
96
|
-
claude mcp add --scope user saglitzdesign
|
|
122
|
+
claude mcp add --scope user saglitzdesign -- npx -y saglitzdesign-mcp
|
|
97
123
|
```
|
|
98
124
|
|
|
99
|
-
Or
|
|
125
|
+
Or, if you cloned the repo, point it at the built file:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
claude mcp add --scope user saglitzdesign node /absolute/path/to/saglitzdesign-mcp/dist/index.js
|
|
129
|
+
```
|
|
100
130
|
|
|
101
131
|
### Claude Desktop
|
|
102
132
|
|
|
@@ -106,8 +136,8 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
|
106
136
|
{
|
|
107
137
|
"mcpServers": {
|
|
108
138
|
"saglitzdesign": {
|
|
109
|
-
"command": "
|
|
110
|
-
"args": ["
|
|
139
|
+
"command": "npx",
|
|
140
|
+
"args": ["-y", "saglitzdesign-mcp"]
|
|
111
141
|
}
|
|
112
142
|
}
|
|
113
143
|
}
|
|
@@ -115,7 +145,7 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
|
115
145
|
|
|
116
146
|
### Cursor / other MCP clients
|
|
117
147
|
|
|
118
|
-
|
|
148
|
+
Run `npx -y saglitzdesign-mcp` over stdio (or `node /absolute/path/to/dist/index.js` from a clone).
|
|
119
149
|
|
|
120
150
|
### Dev & debug
|
|
121
151
|
|
|
@@ -184,7 +214,8 @@ To rebuild the local image library (or add your own examples), see
|
|
|
184
214
|
[MIT](LICENSE) © 2026 Saglitz Design.
|
|
185
215
|
|
|
186
216
|
The `knowledge/` documents are original syntheses with sources cited per file.
|
|
187
|
-
Referenced screenshots are not part of this repo and may not be redistributed
|
|
217
|
+
Referenced screenshots are not part of this repo and may not be redistributed —
|
|
218
|
+
see [NOTICE.md](NOTICE.md).
|
|
188
219
|
|
|
189
220
|
<div align="center">
|
|
190
221
|
<sub>Built for the <a href="https://modelcontextprotocol.io">Model Context Protocol</a>.</sub>
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { dirname, join } from "node:path";
|
|
|
7
7
|
import { existsSync, readFileSync } from "node:fs";
|
|
8
8
|
import { loadKnowledge, searchKnowledge, sections } from "./knowledge.js";
|
|
9
9
|
import { loadExamples, searchExamples, imageMime } from "./examples.js";
|
|
10
|
+
import { registerPrompts } from "./prompts.js";
|
|
10
11
|
// knowledge/ sits next to dist/ (repo root) both in dev (tsx) and after build
|
|
11
12
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
12
13
|
const knowledgeDir = [join(here, "..", "knowledge"), join(here, "..", "..", "knowledge")].find(existsSync);
|
|
@@ -19,7 +20,7 @@ const examplesDir = join(knowledgeDir, "examples");
|
|
|
19
20
|
const examples = loadExamples(examplesDir);
|
|
20
21
|
const server = new McpServer({
|
|
21
22
|
name: "saglitzdesign",
|
|
22
|
-
version: "0.
|
|
23
|
+
version: "0.4.0",
|
|
23
24
|
});
|
|
24
25
|
function docHeader(d) {
|
|
25
26
|
return `# ${d.title}\n_id: ${d.id} · category: ${d.category} · platform: ${d.platform} · tags: ${d.tags.join(", ")}_\n`;
|
|
@@ -368,6 +369,13 @@ server.tool("knowledge_freshness", "Report how fresh each knowledge document is
|
|
|
368
369
|
];
|
|
369
370
|
return text(lines.join("\n"));
|
|
370
371
|
});
|
|
372
|
+
// ── prompts (user-invocable build/review/redesign workflows) ─────────────────
|
|
373
|
+
registerPrompts(server, {
|
|
374
|
+
brief: z
|
|
375
|
+
.string()
|
|
376
|
+
.optional()
|
|
377
|
+
.describe("What to build/review, in your words (audience, offer, stack, URL…). Optional — the workflow will ask for anything missing."),
|
|
378
|
+
});
|
|
371
379
|
// ── start ────────────────────────────────────────────────────────────────────
|
|
372
380
|
const transport = new StdioServerTransport();
|
|
373
381
|
await server.connect(transport);
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// SaglitzDesign MCP prompts — user-invocable workflows that orchestrate the
|
|
2
|
+
// server's knowledge tools into an end-to-end "build / review / redesign"
|
|
3
|
+
// experience. In Claude Code these appear in the "/" (slash) prompt menu.
|
|
4
|
+
const TOOLS_NOTE = `You have the SaglitzDesign knowledge tools available. Use them — do not design from memory:
|
|
5
|
+
- get_design_roadmap(project_type) — the phased plan; call FIRST.
|
|
6
|
+
- search_design_knowledge(query) / get_design_doc(id) — rules & specs.
|
|
7
|
+
- get_component_guidance(component, platform) — per-component specs + patterns.
|
|
8
|
+
- get_design_examples(query, platform) — real annotated screenshots to reference.
|
|
9
|
+
- get_design_language(language) — Material 3 / Liquid Glass / iOS / Android / macOS / Fluent / web-trends / tokens.
|
|
10
|
+
- seo_geo_guide(scope, topic) — SEO & GEO for web.
|
|
11
|
+
- design_review_checklist(project_type, focus) — the audit gate.`;
|
|
12
|
+
const CRITIQUE_LOOP = `## Visual critique loop (do this, don't skip it)
|
|
13
|
+
After you build something runnable:
|
|
14
|
+
1. Run it and open it in a browser. If a browser-automation tool is available
|
|
15
|
+
(Claude in Chrome, Playwright, or chrome-devtools MCP), navigate to the page
|
|
16
|
+
and take a screenshot at both mobile (390px) and desktop (1440px) widths.
|
|
17
|
+
If no browser tool is available, say so and review the code directly instead.
|
|
18
|
+
2. Look at the screenshot as a critical senior designer. Score it against the
|
|
19
|
+
rubric in get_design_doc("design-critique-scoring") (0–40) and run the
|
|
20
|
+
matching design_review_checklist.
|
|
21
|
+
3. Fix the highest-severity issues first (hierarchy, one primary CTA, spacing
|
|
22
|
+
from the scale, contrast ≥ the required ratios, real content stress).
|
|
23
|
+
4. Re-screenshot and repeat until it passes the checklist and the squint test
|
|
24
|
+
(the primary action is the first thing you see). Report the before/after.`;
|
|
25
|
+
const QUALITY_BAR = `## Non-negotiables (from the knowledge base)
|
|
26
|
+
- Content & copy BEFORE chrome: write the real headline/CTA/empty/error copy first (never lorem ipsum).
|
|
27
|
+
- Exactly one primary CTA per view; verb-first labels ("Start free trial", never "Submit").
|
|
28
|
+
- Everything on the 8pt spacing scale; tokens for color/type/spacing, not ad-hoc values.
|
|
29
|
+
- Text contrast ≥4.5:1, non-text ≥3:1; visible focus states; keyboard reachable.
|
|
30
|
+
- Design every state: default, empty, loading, error, long-content, zero-results.
|
|
31
|
+
- Respect prefers-reduced-motion; motion durations/easings per the motion doc.
|
|
32
|
+
- For web: semantic HTML, LCP ≤2.5s discipline (image/font rules), no layout shift.`;
|
|
33
|
+
const BUILD_PROMPTS = [
|
|
34
|
+
{
|
|
35
|
+
name: "build_landing_page",
|
|
36
|
+
title: "Build a landing page (SaglitzDesign)",
|
|
37
|
+
description: "Design & build a conversion-focused landing page end-to-end using SaglitzDesign expertise, with a visual critique loop.",
|
|
38
|
+
build: (brief) => `Build a high-converting **landing page**${brief ? ` for: ${brief}` : ""}, using the SaglitzDesign method.
|
|
39
|
+
|
|
40
|
+
${TOOLS_NOTE}
|
|
41
|
+
|
|
42
|
+
## Sequence
|
|
43
|
+
1. Call get_design_roadmap("landing-page") and follow its phases.
|
|
44
|
+
2. **Positioning & message first.** If key facts are missing (who it's for, the offer, the one conversion goal, proof points), ask me up to 4 concise questions before building. Then draft the hero headline, subhead, primary CTA + risk-reducers, and the section narrative (hero → proof → benefits → objections/FAQ → final CTA). Pull rules from get_design_doc("storybrand-copywriting"), get_design_doc("conversion-ux"), get_design_doc("influence-persuasion").
|
|
45
|
+
3. **Reference real examples:** get_design_examples("hero", "web"), get_design_examples("pricing", "web"), get_design_examples("social proof", "web").
|
|
46
|
+
4. **Build it.** Write the actual code (default to a single responsive HTML file with inline CSS unless I specify a stack like Next.js/React/Tailwind). Apply the foundations: typography, color-systems, spacing-layout, buttons, visual-craft-standards.
|
|
47
|
+
5. **SEO/GEO:** apply seo_geo_guide("both") essentials — semantic HTML, meta/title, one H1, JSON-LD, fast images/fonts.
|
|
48
|
+
|
|
49
|
+
${QUALITY_BAR}
|
|
50
|
+
|
|
51
|
+
${CRITIQUE_LOOP}
|
|
52
|
+
|
|
53
|
+
Finish with: the files created, how to preview it, the critique score, and what you'd test/improve next.`,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "build_website",
|
|
57
|
+
title: "Build a website (SaglitzDesign)",
|
|
58
|
+
description: "Design & build a multi-page marketing website end-to-end using SaglitzDesign expertise, with a visual critique loop.",
|
|
59
|
+
build: (brief) => `Build a marketing **website**${brief ? ` for: ${brief}` : ""}, using the SaglitzDesign method.
|
|
60
|
+
|
|
61
|
+
${TOOLS_NOTE}
|
|
62
|
+
|
|
63
|
+
## Sequence
|
|
64
|
+
1. Call get_design_roadmap("website") and follow its phases (positioning → copy → IA/SEO → design → build → CRO).
|
|
65
|
+
2. **Positioning + IA first.** Ask me up to 4 questions if the audience, offer, conversion goal, or page set is unclear. Then propose a sitemap (home, product/features, pricing, about, contact, etc.), each page mapped to one search intent.
|
|
66
|
+
3. **Copy before layout** for each page (get_design_doc("storybrand-copywriting"), get_design_doc("marketing-website-roadmap")).
|
|
67
|
+
4. **SEO/GEO foundations up front:** seo_geo_guide("both") — rendering, meta, schema plan, llms.txt, internal linking.
|
|
68
|
+
5. **Reference real examples** via get_design_examples for each section type.
|
|
69
|
+
6. **Build it** as a coherent multi-page site (default: static HTML/CSS with shared styles, or a Next.js app if I ask). Shared design tokens; consistent nav/footer; every page in all states.
|
|
70
|
+
|
|
71
|
+
${QUALITY_BAR}
|
|
72
|
+
|
|
73
|
+
${CRITIQUE_LOOP}
|
|
74
|
+
|
|
75
|
+
Finish with: sitemap built, files, preview instructions, per-page critique scores, SEO/GEO checklist status, and next steps.`,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "build_mobile_app_ui",
|
|
79
|
+
title: "Build a mobile app UI (SaglitzDesign)",
|
|
80
|
+
description: "Design & build iOS or Android app screens end-to-end using SaglitzDesign expertise, with a visual critique loop.",
|
|
81
|
+
build: (brief) => `Design and build **mobile app UI**${brief ? ` for: ${brief}` : ""}, using the SaglitzDesign method.
|
|
82
|
+
|
|
83
|
+
${TOOLS_NOTE}
|
|
84
|
+
|
|
85
|
+
## Sequence
|
|
86
|
+
1. Ask which platform (iOS or Android) and stack (SwiftUI / Jetpack Compose / React Native / Flutter) if not stated, plus the 2–3 core screens to build. Ask up to 4 questions max.
|
|
87
|
+
2. Call get_design_roadmap("ios-app") or ("android-app") and follow it.
|
|
88
|
+
3. Load the platform baseline: get_design_language("ios-app-design") + ("apple-hig-liquid-glass"), or ("android-app-design") + ("material-3"). Respect native navigation, controls, safe areas, Dynamic Type / sp.
|
|
89
|
+
4. **Reference real examples** with get_design_examples (platform "mobile"): onboarding, paywall, navigation, empty-state, etc.
|
|
90
|
+
5. **Build the screens** with get_component_guidance for each element; design every state; thumb-zone the primary actions.
|
|
91
|
+
|
|
92
|
+
${QUALITY_BAR}
|
|
93
|
+
|
|
94
|
+
${CRITIQUE_LOOP}
|
|
95
|
+
|
|
96
|
+
Finish with: screens built, how to run/preview, critique scores, platform-fit notes, and next steps.`,
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
const ACTION_PROMPTS = [
|
|
100
|
+
{
|
|
101
|
+
name: "design_review",
|
|
102
|
+
title: "Design review (SaglitzDesign)",
|
|
103
|
+
description: "Audit an existing website / app / landing page against SaglitzDesign checklists and the 0–40 critique rubric.",
|
|
104
|
+
build: (brief) => `Do an expert **design review**${brief ? ` of: ${brief}` : ""}, using the SaglitzDesign method.
|
|
105
|
+
|
|
106
|
+
${TOOLS_NOTE}
|
|
107
|
+
|
|
108
|
+
## Sequence
|
|
109
|
+
1. Identify the project type (website / landing-page / mobile-app / macos-app / dashboard). If it's a URL or running app and a browser tool is available, open it and screenshot mobile + desktop; otherwise review the code/design provided.
|
|
110
|
+
2. Run design_review_checklist for that type (and a focused pass: accessibility, conversion, seo, etc.).
|
|
111
|
+
3. Score against get_design_doc("design-critique-scoring") (0–40) with per-heuristic notes.
|
|
112
|
+
4. Report findings ranked by severity (P0→P3): what's wrong, why (cite the rule/doc), and the concrete fix. Separate "must fix" from "polish".
|
|
113
|
+
5. If asked, apply the top fixes and re-review.
|
|
114
|
+
|
|
115
|
+
Be specific and prescriptive — every finding cites a SaglitzDesign rule and gives an actionable fix, not vague advice.`,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "redesign",
|
|
119
|
+
title: "Redesign / improve a UI (SaglitzDesign)",
|
|
120
|
+
description: "Improve an existing UI (bolder, quieter, cleaner, higher-converting) using SaglitzDesign craft standards, with a visual critique loop.",
|
|
121
|
+
build: (brief) => `**Redesign / improve** the UI${brief ? `: ${brief}` : ""}, using the SaglitzDesign method.
|
|
122
|
+
|
|
123
|
+
${TOOLS_NOTE}
|
|
124
|
+
|
|
125
|
+
## Sequence
|
|
126
|
+
1. First review the current state: run design_review_checklist and score it (get_design_doc("design-critique-scoring")). State the top problems and the design direction you'll take (and why).
|
|
127
|
+
2. Pull the relevant craft docs: visual-craft-standards, typography-craft, and the foundations (typography, color-systems, spacing-layout). For conversion goals, add conversion-ux + storybrand-copywriting.
|
|
128
|
+
3. Reference real examples with get_design_examples for the pattern in question.
|
|
129
|
+
4. **Apply the changes in code**, preserving working behavior. Improve hierarchy by de-emphasizing secondary content rather than only enlarging primary; fix spacing to the scale; one primary CTA; contrast; states.
|
|
130
|
+
|
|
131
|
+
${QUALITY_BAR}
|
|
132
|
+
|
|
133
|
+
${CRITIQUE_LOOP}
|
|
134
|
+
|
|
135
|
+
Finish with a concrete before→after: the score change, what you changed and why, and what to test next.`,
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
const ALL_PROMPTS = [...BUILD_PROMPTS, ...ACTION_PROMPTS];
|
|
139
|
+
// Registered against an McpServer-like object exposing registerPrompt.
|
|
140
|
+
export function registerPrompts(server, briefArg) {
|
|
141
|
+
for (const p of ALL_PROMPTS) {
|
|
142
|
+
server.registerPrompt(p.name, { title: p.title, description: p.description, argsSchema: briefArg }, ({ brief }) => ({
|
|
143
|
+
messages: [{ role: "user", content: { type: "text", text: p.build((brief ?? "").trim()) } }],
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "saglitzdesign-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "SaglitzDesign — expert MCP server for mobile app & website design: UI, UX, buttons, design languages, SEO and GEO guidance backed by a curated knowledge base and real-world pattern research.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"!knowledge/examples/images",
|
|
14
14
|
"scripts/regenerate-examples.md",
|
|
15
15
|
"LICENSE",
|
|
16
|
-
"README.md"
|
|
16
|
+
"README.md",
|
|
17
|
+
"NOTICE.md"
|
|
17
18
|
],
|
|
18
19
|
"engines": {
|
|
19
20
|
"node": ">=18"
|