@castandcrew/spotlight-mcp 0.1.3 → 0.1.4
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 +137 -16
- package/data/index.json +56002 -1197
- package/dist/data/health.d.ts +33 -0
- package/dist/data/health.js +111 -0
- package/dist/data/health.js.map +1 -0
- package/dist/data/loader.d.ts +19 -0
- package/dist/data/loader.js +61 -4
- package/dist/data/loader.js.map +1 -1
- package/dist/lib/regex-safety.d.ts +14 -0
- package/dist/lib/regex-safety.js +34 -0
- package/dist/lib/regex-safety.js.map +1 -0
- package/dist/server.js +25 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/_fuzzy.d.ts +49 -0
- package/dist/tools/_fuzzy.js +103 -0
- package/dist/tools/_fuzzy.js.map +1 -0
- package/dist/tools/_guard.d.ts +31 -0
- package/dist/tools/_guard.js +62 -0
- package/dist/tools/_guard.js.map +1 -0
- package/dist/tools/_synonyms.d.ts +1 -0
- package/dist/tools/_synonyms.js +28 -0
- package/dist/tools/_synonyms.js.map +1 -0
- package/dist/tools/ask_spotlight.js +67 -5
- package/dist/tools/ask_spotlight.js.map +1 -1
- package/dist/tools/get_component.js +14 -5
- package/dist/tools/get_component.js.map +1 -1
- package/dist/tools/get_migration_guide.js +4 -2
- package/dist/tools/get_migration_guide.js.map +1 -1
- package/dist/tools/get_pattern.js +22 -7
- package/dist/tools/get_pattern.js.map +1 -1
- package/dist/tools/get_recipe.js +4 -2
- package/dist/tools/get_recipe.js.map +1 -1
- package/dist/tools/get_token.js +5 -3
- package/dist/tools/get_token.js.map +1 -1
- package/dist/tools/identify_pattern.js +7 -5
- package/dist/tools/identify_pattern.js.map +1 -1
- package/dist/tools/list_deprecated.js +4 -2
- package/dist/tools/list_deprecated.js.map +1 -1
- package/dist/tools/search_components.js +9 -3
- package/dist/tools/search_components.js.map +1 -1
- package/dist/tools/search_tokens.js +8 -3
- package/dist/tools/search_tokens.js.map +1 -1
- package/dist/tools/search_utility_classes.js +4 -2
- package/dist/tools/search_utility_classes.js.map +1 -1
- package/dist/tools/validate_usage.js +25 -5
- package/dist/tools/validate_usage.js.map +1 -1
- package/dist/transports/http.js +21 -1
- package/dist/transports/http.js.map +1 -1
- package/dist/types.d.ts +8 -2
- package/dist/version.d.ts +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +10 -7
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { guardedIndex } from './_guard.js';
|
|
3
|
+
import { checkPattern } from '../lib/regex-safety.js';
|
|
3
4
|
export function registerValidateUsage(server) {
|
|
4
|
-
server.tool('validate_usage', 'Check a JSX/TSX snippet against Spotlight rules and return any violations.', {
|
|
5
|
-
|
|
5
|
+
server.tool('validate_usage', 'Check a JSX/TSX snippet against Spotlight rules and return any violations.', {
|
|
6
|
+
// Capped: each rule.pattern is compiled into `new RegExp(...)` and tested against
|
|
7
|
+
// `code` (SPT-1835 follow-up). Patterns are maintainer-authored and checked for
|
|
8
|
+
// catastrophic backtracking at index-build time (scripts/indexer.ts), but bounding
|
|
9
|
+
// the caller-supplied string is a cheap independent limit on worst-case match time.
|
|
10
|
+
code: z.string().max(20000).describe('JSX or TSX code snippet to validate (max 20,000 characters)'),
|
|
11
|
+
}, async ({ code }) => {
|
|
12
|
+
const { index, error } = guardedIndex('validate_usage', 'rules', 'components');
|
|
13
|
+
if (error)
|
|
14
|
+
return error;
|
|
6
15
|
const violations = [];
|
|
7
16
|
for (const rule of index.rules) {
|
|
8
17
|
const patternToCheck = rule.pattern ?? rule.incorrect;
|
|
9
18
|
if (!patternToCheck)
|
|
10
19
|
continue;
|
|
20
|
+
// Re-checked here, not just at index-build time (scripts/indexer.ts): this is
|
|
21
|
+
// the actual RegExp construction site, and it must never run on an unvetted
|
|
22
|
+
// pattern regardless of how the index reached this process.
|
|
23
|
+
if (rule.pattern && !checkPattern(rule.pattern).ok)
|
|
24
|
+
continue;
|
|
11
25
|
const matched = rule.pattern
|
|
12
26
|
? new RegExp(rule.pattern).test(code)
|
|
13
27
|
: code.includes(patternToCheck.trim());
|
|
@@ -31,9 +45,15 @@ export function registerValidateUsage(server) {
|
|
|
31
45
|
});
|
|
32
46
|
}
|
|
33
47
|
}
|
|
48
|
+
// `checked` makes a clean bill of health auditable: a reader can tell the
|
|
49
|
+
// difference between "71 rules ran and found nothing" and "no rules ran".
|
|
50
|
+
const checked = {
|
|
51
|
+
rules: index.rules.length,
|
|
52
|
+
deprecatedComponents: index.deprecated.length,
|
|
53
|
+
};
|
|
34
54
|
const result = violations.length
|
|
35
|
-
? { valid: false, violations }
|
|
36
|
-
: { valid: true, message: 'No violations found.' };
|
|
55
|
+
? { valid: false, violations, checked }
|
|
56
|
+
: { valid: true, message: 'No violations found.', checked };
|
|
37
57
|
return {
|
|
38
58
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
39
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_usage.js","sourceRoot":"","sources":["../../src/tools/validate_usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"validate_usage.js","sourceRoot":"","sources":["../../src/tools/validate_usage.ts"],"names":[],"mappings":"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"}
|
package/dist/transports/http.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
+
import cors from 'cors';
|
|
2
3
|
import { randomUUID } from 'crypto';
|
|
3
4
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
5
|
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
5
6
|
import { createServer } from '../server.js';
|
|
7
|
+
import { getIndexHealth, remedyFor } from '../data/health.js';
|
|
8
|
+
import { PACKAGE_VERSION } from '../version.js';
|
|
6
9
|
const DEFAULT_PORT = Number(process.env.PORT ?? 3000);
|
|
7
10
|
export async function runHttp(port = DEFAULT_PORT) {
|
|
8
11
|
const app = express();
|
|
12
|
+
app.use(cors({
|
|
13
|
+
allowedHeaders: ['content-type', 'mcp-session-id', 'accept'],
|
|
14
|
+
exposedHeaders: ['mcp-session-id'],
|
|
15
|
+
}));
|
|
9
16
|
app.use(express.json());
|
|
10
17
|
// ── Streamable HTTP (MCP spec 2025-03-26, new standard) ──────────────────
|
|
11
18
|
const streamableSessions = new Map();
|
|
@@ -59,7 +66,20 @@ export async function runHttp(port = DEFAULT_PORT) {
|
|
|
59
66
|
});
|
|
60
67
|
// ── Health ────────────────────────────────────────────────────────────────
|
|
61
68
|
app.get('/health', (_, res) => {
|
|
62
|
-
|
|
69
|
+
const health = getIndexHealth();
|
|
70
|
+
res.status(health.fatal ? 503 : 200).json({
|
|
71
|
+
status: health.fatal ? 'error' : health.status,
|
|
72
|
+
server: 'spotlight-mcp',
|
|
73
|
+
version: PACKAGE_VERSION,
|
|
74
|
+
index: {
|
|
75
|
+
path: health.indexPath,
|
|
76
|
+
version: health.version,
|
|
77
|
+
generated: health.generated,
|
|
78
|
+
counts: health.counts,
|
|
79
|
+
empty: health.empty,
|
|
80
|
+
...(health.fatal ? { error: health.fatal, remedy: remedyFor(health.indexPath) } : {}),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
63
83
|
});
|
|
64
84
|
app.listen(port, () => {
|
|
65
85
|
console.error(`Spotlight MCP HTTP server running on port ${port}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -59,8 +59,14 @@ export interface Token {
|
|
|
59
59
|
scale?: string;
|
|
60
60
|
weight?: string;
|
|
61
61
|
states?: string[];
|
|
62
|
-
/**
|
|
63
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Where the token sits in the design-tokens stack (SPT-1854), derived from its source file in
|
|
64
|
+
* @castandcrew/common-ui-design-tokens — not from the token directory's `isSemantic` flag.
|
|
65
|
+
* - semantic: purpose-named colour tokens (_theme, _interactive) — what you should use
|
|
66
|
+
* - foundation: public scales (spacing, size, border, typography) — use directly
|
|
67
|
+
* - ref: internal primitives/mode tokens (_ref, _disabled, --color-light-*) — don't use
|
|
68
|
+
*/
|
|
69
|
+
layer?: 'ref' | 'semantic' | 'foundation';
|
|
64
70
|
/** CSS selectors/states this token applies to (e.g. ".spotlight_interactive:focus"). */
|
|
65
71
|
appliesTo?: string[];
|
|
66
72
|
/** Human-readable intent derived from the name formula — "what to use this for". */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PACKAGE_VERSION: string;
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
// createRequire rather than an ESM JSON import: tsconfig sets rootDir "src", so
|
|
3
|
+
// importing ../package.json would pull it into the compile graph and break tsc.
|
|
4
|
+
// From dist/version.js this resolves to the package root, which always ships
|
|
5
|
+
// package.json; from src/version.ts under tsx it resolves to the repo root.
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
export const PACKAGE_VERSION = require('../package.json').version;
|
|
8
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,4EAA4E;AAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAY,OAAO,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@castandcrew/spotlight-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "MCP server for the Spotlight Design System",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/cast-and-crew/spotlight-mcp.git"
|
|
8
|
+
},
|
|
5
9
|
"type": "module",
|
|
6
10
|
"bin": {
|
|
7
11
|
"spotlight-mcp": "dist/index.js"
|
|
@@ -18,18 +22,22 @@
|
|
|
18
22
|
"start": "node dist/index.js",
|
|
19
23
|
"start:http": "node dist/index.js --http",
|
|
20
24
|
"index": "tsx scripts/indexer.ts",
|
|
21
|
-
"test": "pnpm build && vitest run"
|
|
25
|
+
"test": "pnpm build && vitest run",
|
|
26
|
+
"test:mode": "bash scripts/test-mode.sh",
|
|
27
|
+
"prepublishOnly": "pnpm test"
|
|
22
28
|
},
|
|
23
29
|
"publishConfig": {
|
|
24
30
|
"access": "public"
|
|
25
31
|
},
|
|
26
32
|
"dependencies": {
|
|
27
33
|
"@modelcontextprotocol/sdk": "^1.10.2",
|
|
34
|
+
"cors": "^2.8.5",
|
|
28
35
|
"express": "^4.22.2",
|
|
29
36
|
"fuse.js": "^7.4.2",
|
|
30
37
|
"zod": "^3.24.2"
|
|
31
38
|
},
|
|
32
39
|
"devDependencies": {
|
|
40
|
+
"@types/cors": "^2.8.17",
|
|
33
41
|
"@types/express": "^5.0.1",
|
|
34
42
|
"@types/node": "^22.15.3",
|
|
35
43
|
"gray-matter": "^4.0.3",
|
|
@@ -37,10 +45,5 @@
|
|
|
37
45
|
"tsx": "^4.19.4",
|
|
38
46
|
"typescript": "^5.8.3",
|
|
39
47
|
"vitest": "^4.1.9"
|
|
40
|
-
},
|
|
41
|
-
"pnpm": {
|
|
42
|
-
"onlyBuiltDependencies": [
|
|
43
|
-
"esbuild"
|
|
44
|
-
]
|
|
45
48
|
}
|
|
46
49
|
}
|