@goonnguyen/human-mcp 1.0.2 → 1.2.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/README.md CHANGED
@@ -29,11 +29,41 @@ Human MCP is a Model Context Protocol server that provides AI coding agents with
29
29
 
30
30
  ### Prerequisites
31
31
 
32
- - [Bun](https://bun.sh) v1.2+
32
+ - Node.js v18+ or [Bun](https://bun.sh) v1.2+
33
33
  - Google Gemini API key
34
34
 
35
35
  ### Installation
36
36
 
37
+ Install Human MCP as an npm package:
38
+
39
+ ```bash
40
+ # Using npm
41
+ npm install -g @goonnguyen/human-mcp
42
+
43
+ # Using bun (recommended)
44
+ bun install -g @goonnguyen/human-mcp
45
+
46
+ # Using pnpm
47
+ pnpm install -g @goonnguyen/human-mcp
48
+ ```
49
+
50
+ ### Environment Setup
51
+
52
+ Configure your Google Gemini API key:
53
+
54
+ ```bash
55
+ # Option 1: Environment variable (recommended)
56
+ export GOOGLE_GEMINI_API_KEY="your_api_key_here"
57
+
58
+ # Option 2: Add to your shell profile
59
+ echo 'export GOOGLE_GEMINI_API_KEY="your_api_key_here"' >> ~/.zshrc
60
+ source ~/.zshrc
61
+ ```
62
+
63
+ ### Development (For Contributors)
64
+
65
+ If you want to contribute to Human MCP development:
66
+
37
67
  ```bash
38
68
  # Clone the repository
39
69
  git clone https://github.com/human-mcp/human-mcp.git
@@ -47,11 +77,7 @@ cp .env.example .env
47
77
 
48
78
  # Add your Gemini API key to .env
49
79
  GOOGLE_GEMINI_API_KEY=your_api_key_here
50
- ```
51
80
 
52
- ### Development
53
-
54
- ```bash
55
81
  # Start development server
56
82
  bun run dev
57
83
 
@@ -67,34 +93,382 @@ bun run typecheck
67
93
 
68
94
  ### Usage with MCP Clients
69
95
 
96
+ Human MCP can be configured with various MCP clients for different development workflows. Follow the setup instructions for your preferred client below.
97
+
70
98
  #### Claude Desktop
71
99
 
72
- Add to your Claude Desktop configuration:
100
+ Claude Desktop is a desktop application that provides a user-friendly interface for interacting with MCP servers.
101
+
102
+ **Configuration Location:**
103
+ - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
104
+ - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
105
+ - **Linux**: `~/.config/Claude/claude_desktop_config.json`
106
+
107
+ **Configuration Example:**
108
+
109
+ ```json
110
+ {
111
+ "mcpServers": {
112
+ "human-mcp": {
113
+ "command": "npx",
114
+ "args": ["@goonnguyen/human-mcp"],
115
+ "env": {
116
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
117
+ }
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ **Alternative Configuration (if globally installed):**
73
124
 
74
125
  ```json
75
126
  {
76
127
  "mcpServers": {
77
128
  "human-mcp": {
78
- "command": "bun",
79
- "args": ["run", "/path/to/human-mcp/src/index.ts"],
129
+ "command": "human-mcp",
80
130
  "env": {
81
- "GOOGLE_GEMINI_API_KEY": "your_api_key"
131
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
82
132
  }
83
133
  }
84
134
  }
85
135
  }
86
136
  ```
87
137
 
88
- #### Other MCP Clients
138
+ **Setup Steps:**
139
+ 1. Install Human MCP globally: `npm install -g @goonnguyen/human-mcp`
140
+ 2. Create or edit the Claude Desktop configuration file
141
+ 3. Add the Human MCP server configuration (use the first example with `npx` for reliability)
142
+ 4. Set your Google Gemini API key in environment variables or the config
143
+ 5. Restart Claude Desktop
144
+
145
+ **Verification:**
146
+ - Look for the connection indicator in Claude Desktop
147
+ - Try using the `eyes.analyze` tool with a test image
148
+
149
+ #### Claude Code (CLI)
150
+
151
+ Claude Code is the official CLI for Claude that supports MCP servers for enhanced coding workflows.
89
152
 
153
+ **Configuration Location:**
154
+ - **All platforms**: `~/.config/claude/config.json`
155
+
156
+ **Configuration Example:**
157
+
158
+ ```json
159
+ {
160
+ "mcpServers": {
161
+ "human-mcp": {
162
+ "command": "npx",
163
+ "args": ["@goonnguyen/human-mcp"],
164
+ "env": {
165
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here",
166
+ "LOG_LEVEL": "info"
167
+ }
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ **Alternative Configuration (if globally installed):**
174
+
175
+ ```json
176
+ {
177
+ "mcpServers": {
178
+ "human-mcp": {
179
+ "command": "human-mcp",
180
+ "env": {
181
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here",
182
+ "LOG_LEVEL": "info"
183
+ }
184
+ }
185
+ }
186
+ }
187
+ ```
188
+
189
+ **Setup Steps:**
190
+ 1. Install Claude Code CLI: `npm install -g @anthropic-ai/claude`
191
+ 2. Install Human MCP: `npm install -g @goonnguyen/human-mcp`
192
+ 3. Initialize configuration: `claude configure`
193
+ 4. Edit the config file to add Human MCP server
194
+ 5. Test connection: `claude --list-mcp-servers`
195
+
196
+ **Usage:**
90
197
  ```bash
91
- # Run with stdio transport
92
- bun run src/index.ts
198
+ # Start Claude Code with MCP servers
199
+ claude --enable-mcp
93
200
 
94
- # Use MCP inspector for testing
95
- bun run inspector
201
+ # Analyze a screenshot in your current project
202
+ claude "Analyze this screenshot for UI issues" --attach screenshot.png
96
203
  ```
97
204
 
205
+ #### Gemini CLI
206
+
207
+ While Gemini CLI doesn't directly support MCP, you can use Human MCP as a bridge to access visual analysis capabilities.
208
+
209
+ **Direct Usage:**
210
+
211
+ ```bash
212
+ # Run Human MCP server directly (if globally installed)
213
+ human-mcp
214
+
215
+ # Or using npx (no global installation needed)
216
+ npx @goonnguyen/human-mcp
217
+ ```
218
+
219
+ **Integration Example:**
220
+ ```bash
221
+ # Create a wrapper script for Gemini CLI integration
222
+ #!/bin/bash
223
+ # gemini-visual-analysis.sh
224
+
225
+ # Set environment variables
226
+ export GOOGLE_GEMINI_API_KEY="your_api_key"
227
+
228
+ # Run Human MCP analysis
229
+ echo '{"source": "'$1'", "type": "image", "analysis_type": "ui_debug"}' | \
230
+ npx @goonnguyen/human-mcp
231
+ ```
232
+
233
+ #### MCP Coding Clients (Cline, Cursor, Windsurf)
234
+
235
+ These IDE extensions support MCP servers for enhanced AI-assisted coding with visual analysis capabilities.
236
+
237
+ ##### Cline (VS Code Extension)
238
+
239
+ **Configuration Location:**
240
+ - VS Code Settings: `.vscode/settings.json` in your workspace
241
+ - Or Global Settings: VS Code → Preferences → Settings → Extensions → Cline
242
+
243
+ **Configuration Example:**
244
+
245
+ ```json
246
+ {
247
+ "cline.mcpServers": {
248
+ "human-mcp": {
249
+ "command": "npx",
250
+ "args": ["@goonnguyen/human-mcp"],
251
+ "env": {
252
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
253
+ }
254
+ }
255
+ }
256
+ }
257
+ ```
258
+
259
+ **Alternative Configuration (if globally installed):**
260
+
261
+ ```json
262
+ {
263
+ "cline.mcpServers": {
264
+ "human-mcp": {
265
+ "command": "human-mcp",
266
+ "env": {
267
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
268
+ }
269
+ }
270
+ }
271
+ }
272
+ ```
273
+
274
+ **Setup Steps:**
275
+ 1. Install Cline extension from VS Code Marketplace
276
+ 2. Install Human MCP: `npm install -g @goonnguyen/human-mcp`
277
+ 3. Open VS Code in your project directory
278
+ 4. Add Human MCP configuration to workspace settings (use `npx` version for reliability)
279
+ 5. Restart VS Code or reload the window
280
+ 6. Open Cline panel and verify MCP connection
281
+
282
+ ##### Cursor
283
+
284
+ **Configuration Location:**
285
+ - Cursor Settings: `.cursor/settings.json` in your workspace
286
+ - Or via Cursor → Settings → Extensions → MCP
287
+
288
+ **Configuration Example:**
289
+
290
+ ```json
291
+ {
292
+ "mcp.servers": {
293
+ "human-mcp": {
294
+ "command": "npx",
295
+ "args": ["@goonnguyen/human-mcp"],
296
+ "env": {
297
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
298
+ }
299
+ }
300
+ }
301
+ }
302
+ ```
303
+
304
+ **Alternative Configuration (if globally installed):**
305
+
306
+ ```json
307
+ {
308
+ "mcp.servers": {
309
+ "human-mcp": {
310
+ "command": "human-mcp",
311
+ "env": {
312
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
313
+ }
314
+ }
315
+ }
316
+ }
317
+ ```
318
+
319
+ **Setup Steps:**
320
+ 1. Install latest version of Cursor
321
+ 2. Install Human MCP: `npm install -g @goonnguyen/human-mcp`
322
+ 3. Open your project in Cursor
323
+ 4. Configure MCP servers in settings (use `npx` version for reliability)
324
+ 5. Enable MCP integration in Cursor preferences
325
+ 6. Test visual analysis features
326
+
327
+ ##### Windsurf
328
+
329
+ **Configuration Location:**
330
+ - Windsurf config: `~/.windsurf/mcp_servers.json`
331
+ - Or project-specific: `.windsurf/mcp_servers.json`
332
+
333
+ **Configuration Example:**
334
+
335
+ ```json
336
+ {
337
+ "servers": {
338
+ "human-mcp": {
339
+ "command": "npx",
340
+ "args": ["@goonnguyen/human-mcp"],
341
+ "env": {
342
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
343
+ },
344
+ "timeout": 30000
345
+ }
346
+ }
347
+ }
348
+ ```
349
+
350
+ **Alternative Configuration (if globally installed):**
351
+
352
+ ```json
353
+ {
354
+ "servers": {
355
+ "human-mcp": {
356
+ "command": "human-mcp",
357
+ "env": {
358
+ "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
359
+ },
360
+ "timeout": 30000
361
+ }
362
+ }
363
+ }
364
+ ```
365
+
366
+ **Setup Steps:**
367
+ 1. Install Windsurf IDE
368
+ 2. Install Human MCP: `npm install -g @goonnguyen/human-mcp`
369
+ 3. Create MCP server configuration file
370
+ 4. Add Human MCP server configuration (use `npx` version for reliability)
371
+ 5. Restart Windsurf
372
+ 6. Verify connection in MCP panel
373
+
374
+ ### Environment Variable Setup
375
+
376
+ For all clients, ensure your Google Gemini API key is properly configured:
377
+
378
+ **Option 1: System Environment Variables (Recommended)**
379
+ ```bash
380
+ # Add to your shell profile (.bashrc, .zshrc, etc.)
381
+ export GOOGLE_GEMINI_API_KEY="your_api_key_here"
382
+
383
+ # Reload your shell
384
+ source ~/.zshrc # or ~/.bashrc
385
+ ```
386
+
387
+ **Option 2: Client Configuration**
388
+ Include the API key directly in the MCP server configuration (as shown in examples above). This is the most reliable method for ensuring the key is available to the Human MCP server.
389
+
390
+ **Option 3: Global .env File (Advanced)**
391
+ ```bash
392
+ # Create a global .env file (optional)
393
+ echo "GOOGLE_GEMINI_API_KEY=your_api_key_here" >> ~/.env
394
+
395
+ # Source it in your shell profile
396
+ echo "source ~/.env" >> ~/.zshrc
397
+ ```
398
+
399
+ ### Connection Verification
400
+
401
+ **Test Human MCP Server:**
402
+ ```bash
403
+ # Test the server directly (if globally installed)
404
+ human-mcp
405
+
406
+ # Or using npx (no installation needed)
407
+ npx @goonnguyen/human-mcp
408
+
409
+ # For development/testing, use the MCP inspector from source
410
+ # (only if you have cloned the repository for development)
411
+ cd /path/to/human-mcp && bun run inspector
412
+ ```
413
+
414
+ **Test with MCP Clients:**
415
+ 1. Check client logs for connection status
416
+ 2. Try using `eyes.analyze` tool with a test image
417
+ 3. Verify API responses are returned correctly
418
+ 4. Look for the Human MCP server in the client's MCP server list
419
+
420
+ ### Troubleshooting
421
+
422
+ **Common Issues:**
423
+
424
+ 1. **Connection Failed**
425
+ - Verify Node.js/npm or Bun is installed and accessible
426
+ - Ensure `@goonnguyen/human-mcp` package is installed
427
+ - Check Google Gemini API key is valid and properly configured
428
+
429
+ 2. **Package Not Found**
430
+ - Install Human MCP globally: `npm install -g @goonnguyen/human-mcp`
431
+ - Or use `npx @goonnguyen/human-mcp` without global installation
432
+ - Verify package installation: `npm list -g @goonnguyen/human-mcp`
433
+
434
+ 3. **Tool Not Found**
435
+ - Restart the MCP client after configuration changes
436
+ - Check Human MCP server logs for errors
437
+ - Verify the server starts: `npx @goonnguyen/human-mcp`
438
+
439
+ 4. **API Errors**
440
+ - Validate Google Gemini API key
441
+ - Check API quota and usage limits
442
+ - Review network connectivity and firewall settings
443
+
444
+ 5. **Permission Errors**
445
+ - Check npm global installation permissions
446
+ - Use `npx` instead of global installation if needed
447
+ - Verify API key has necessary permissions
448
+
449
+ **Debug Steps:**
450
+ ```bash
451
+ # Enable debug logging
452
+ export LOG_LEVEL=debug
453
+
454
+ # Run Human MCP with verbose output
455
+ npx @goonnguyen/human-mcp --verbose
456
+
457
+ # Check package installation
458
+ npm list -g @goonnguyen/human-mcp
459
+
460
+ # Test direct execution
461
+ human-mcp --version # if globally installed
462
+
463
+ # Check MCP client logs
464
+ # (Location varies by client - check client documentation)
465
+ ```
466
+
467
+ **Getting Help:**
468
+ - Check [Human MCP Issues](https://github.com/human-mcp/human-mcp/issues)
469
+ - Review client-specific MCP documentation
470
+ - Test package installation: `npx @goonnguyen/human-mcp --help`
471
+
98
472
  ## Tools
99
473
 
100
474
  ### eyes.analyze
package/bun.lock CHANGED
@@ -6,7 +6,11 @@
6
6
  "dependencies": {
7
7
  "@google/generative-ai": "^0.21.0",
8
8
  "@modelcontextprotocol/sdk": "^1.4.0",
9
+ "compression": "^1.8.1",
10
+ "cors": "^2.8.5",
11
+ "express": "^5.1.0",
9
12
  "fluent-ffmpeg": "^2.1.3",
13
+ "helmet": "^8.1.0",
10
14
  "sharp": "^0.33.0",
11
15
  "zod": "^3.23.0",
12
16
  },
@@ -17,6 +21,9 @@
17
21
  "@semantic-release/github": "^11.0.5",
18
22
  "@semantic-release/npm": "^12.0.2",
19
23
  "@types/bun": "latest",
24
+ "@types/compression": "^1.8.1",
25
+ "@types/cors": "^2.8.19",
26
+ "@types/express": "^5.0.3",
20
27
  "@types/fluent-ffmpeg": "^2.1.26",
21
28
  "semantic-release": "^24.2.7",
22
29
  "typescript": "^5.6.0",
@@ -220,16 +227,40 @@
220
227
 
221
228
  "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="],
222
229
 
230
+ "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="],
231
+
223
232
  "@types/bun": ["@types/bun@1.2.21", "", { "dependencies": { "bun-types": "1.2.21" } }, "sha512-NiDnvEqmbfQ6dmZ3EeUO577s4P5bf4HCTXtI6trMc6f6RzirY5IrF3aIookuSpyslFzrnvv2lmEWv5HyC1X79A=="],
224
233
 
234
+ "@types/compression": ["@types/compression@1.8.1", "", { "dependencies": { "@types/express": "*", "@types/node": "*" } }, "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q=="],
235
+
236
+ "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="],
237
+
238
+ "@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="],
239
+
240
+ "@types/express": ["@types/express@5.0.3", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "*" } }, "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw=="],
241
+
242
+ "@types/express-serve-static-core": ["@types/express-serve-static-core@5.0.7", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ=="],
243
+
225
244
  "@types/fluent-ffmpeg": ["@types/fluent-ffmpeg@2.1.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-QiDWjihpUhriISNoBi2hJBRUUmoj/BMTYcfz+F+ZM9hHWBYABFAE6hjP/TbCZC0GWwlpa3FzvHH9RzFeRusZ7A=="],
226
245
 
246
+ "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="],
247
+
248
+ "@types/mime": ["@types/mime@1.3.5", "", {}, "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="],
249
+
227
250
  "@types/node": ["@types/node@24.3.0", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow=="],
228
251
 
229
252
  "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="],
230
253
 
254
+ "@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="],
255
+
256
+ "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="],
257
+
231
258
  "@types/react": ["@types/react@19.1.12", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w=="],
232
259
 
260
+ "@types/send": ["@types/send@0.17.5", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w=="],
261
+
262
+ "@types/serve-static": ["@types/serve-static@1.15.8", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg=="],
263
+
233
264
  "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="],
234
265
 
235
266
  "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="],
@@ -312,6 +343,10 @@
312
343
 
313
344
  "compare-func": ["compare-func@2.0.0", "", { "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA=="],
314
345
 
346
+ "compressible": ["compressible@2.0.18", "", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="],
347
+
348
+ "compression": ["compression@1.8.1", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w=="],
349
+
315
350
  "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
316
351
 
317
352
  "concurrently": ["concurrently@9.2.1", "", { "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", "shell-quote": "1.8.3", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" }, "bin": { "concurrently": "dist/bin/concurrently.js", "conc": "dist/bin/concurrently.js" } }, "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="],
@@ -476,6 +511,8 @@
476
511
 
477
512
  "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
478
513
 
514
+ "helmet": ["helmet@8.1.0", "", {}, "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg=="],
515
+
479
516
  "highlight.js": ["highlight.js@10.7.3", "", {}, "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="],
480
517
 
481
518
  "hook-std": ["hook-std@3.0.0", "", {}, "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw=="],
@@ -616,7 +653,7 @@
616
653
 
617
654
  "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="],
618
655
 
619
- "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="],
656
+ "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="],
620
657
 
621
658
  "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="],
622
659
 
@@ -638,6 +675,8 @@
638
675
 
639
676
  "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="],
640
677
 
678
+ "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="],
679
+
641
680
  "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
642
681
 
643
682
  "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
@@ -676,7 +715,7 @@
676
715
 
677
716
  "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
678
717
 
679
- "path-to-regexp": ["path-to-regexp@3.3.0", "", {}, "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="],
718
+ "path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="],
680
719
 
681
720
  "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="],
682
721
 
@@ -942,10 +981,14 @@
942
981
 
943
982
  "@semantic-release/release-notes-generator/get-stream": ["get-stream@7.0.1", "", {}, "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ=="],
944
983
 
984
+ "accepts/negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="],
985
+
945
986
  "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
946
987
 
947
988
  "cli-highlight/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="],
948
989
 
990
+ "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="],
991
+
949
992
  "cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
950
993
 
951
994
  "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
@@ -1324,8 +1367,6 @@
1324
1367
 
1325
1368
  "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="],
1326
1369
 
1327
- "router/path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="],
1328
-
1329
1370
  "semantic-release/@semantic-release/error": ["@semantic-release/error@4.0.0", "", {}, "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ=="],
1330
1371
 
1331
1372
  "semantic-release/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="],
@@ -1340,6 +1381,8 @@
1340
1381
 
1341
1382
  "serve-handler/mime-types": ["mime-types@2.1.18", "", { "dependencies": { "mime-db": "~1.33.0" } }, "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ=="],
1342
1383
 
1384
+ "serve-handler/path-to-regexp": ["path-to-regexp@3.3.0", "", {}, "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="],
1385
+
1343
1386
  "serve-handler/range-parser": ["range-parser@1.2.0", "", {}, "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A=="],
1344
1387
 
1345
1388
  "signale/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="],
@@ -1414,6 +1457,8 @@
1414
1457
 
1415
1458
  "cli-highlight/yargs/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="],
1416
1459
 
1460
+ "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="],
1461
+
1417
1462
  "env-ci/execa/get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="],
1418
1463
 
1419
1464
  "env-ci/execa/human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="],