@onemrvapublic/design-system-mcp-server 2.1.0 → 2.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.
@@ -0,0 +1,92 @@
1
+ // blank out comments but keep newlines so line numbers stay honest
2
+ export function stripComments(scss) {
3
+ let out = '';
4
+ let i = 0;
5
+ while (i < scss.length) {
6
+ if (scss.startsWith('/*', i)) {
7
+ const end = scss.indexOf('*/', i + 2);
8
+ const stop = end === -1 ? scss.length : end + 2;
9
+ for (const ch of scss.slice(i, stop))
10
+ out += ch === '\n' ? '\n' : ' ';
11
+ i = stop;
12
+ }
13
+ else if (scss.startsWith('//', i)) {
14
+ const end = scss.indexOf('\n', i);
15
+ const stop = end === -1 ? scss.length : end;
16
+ out += ' '.repeat(stop - i);
17
+ i = stop;
18
+ }
19
+ else {
20
+ out += scss[i];
21
+ i++;
22
+ }
23
+ }
24
+ return out;
25
+ }
26
+ // a real declaration ends at ; or }, not at end of line
27
+ export function parseScss(scss) {
28
+ const src = stripComments(scss);
29
+ const decls = [];
30
+ const selectors = [];
31
+ let buf = '';
32
+ let line = 1;
33
+ let bufLine = 1;
34
+ const stack = [];
35
+ const flushDecl = () => {
36
+ const raw = buf.trim();
37
+ buf = '';
38
+ if (!raw)
39
+ return;
40
+ const at = raw.indexOf(':');
41
+ if (at <= 0)
42
+ return;
43
+ const prop = raw.slice(0, at).trim();
44
+ const value = raw.slice(at + 1).trim();
45
+ if (!prop || !value || /\s/.test(prop))
46
+ return;
47
+ decls.push({
48
+ prop: prop.toLowerCase(),
49
+ value,
50
+ line: bufLine,
51
+ raw,
52
+ selector: stack.join(' '),
53
+ });
54
+ };
55
+ for (const ch of src) {
56
+ if (ch === '\n') {
57
+ line++;
58
+ if (!buf.trim())
59
+ bufLine = line;
60
+ buf += ' ';
61
+ continue;
62
+ }
63
+ if (ch === '{') {
64
+ const text = buf.trim();
65
+ if (text)
66
+ selectors.push({ text, line: bufLine });
67
+ stack.push(text);
68
+ buf = '';
69
+ bufLine = line;
70
+ continue;
71
+ }
72
+ if (ch === ';') {
73
+ flushDecl();
74
+ bufLine = line;
75
+ continue;
76
+ }
77
+ if (ch === '}') {
78
+ flushDecl();
79
+ stack.pop();
80
+ bufLine = line;
81
+ continue;
82
+ }
83
+ if (!buf.trim() && ch === ' ')
84
+ continue;
85
+ if (!buf)
86
+ bufLine = line;
87
+ buf += ch;
88
+ }
89
+ flushDecl();
90
+ return { decls, selectors };
91
+ }
92
+ //# sourceMappingURL=tool-quality-scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-quality-scss.js","sourceRoot":"","sources":["../src/tool-quality-scss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function toPx(raw: string): number | null;
2
+ export declare function reviewImplementation(_scanner: unknown, args: any): import("./mcp-shared.js").McpToolResult;
@@ -0,0 +1,239 @@
1
+ import { textResult, errorResult } from './mcp-shared.js';
2
+ import { parseScss } from './tool-quality-scss.js';
3
+ import { spacingSuffix, spacingToken } from './spacing-scale.js';
4
+ const SIDE_AXIS = {
5
+ top: 't',
6
+ right: 'r',
7
+ bottom: 'b',
8
+ left: 'l',
9
+ };
10
+ // gap takes no axis: .g, .gc, .gr
11
+ const GAP_PREFIX = {
12
+ gap: 'g',
13
+ 'column-gap': 'gc',
14
+ 'row-gap': 'gr',
15
+ 'grid-gap': 'g',
16
+ 'grid-column-gap': 'gc',
17
+ 'grid-row-gap': 'gr',
18
+ };
19
+ const SPACING_PROPS = /^(padding|margin)(?:-(top|right|bottom|left))?$/;
20
+ export function toPx(raw) {
21
+ const m = raw.match(/^(-?(?:\d+(?:\.\d+)?|\.\d+))(px|rem)?$/);
22
+ if (!m)
23
+ return null;
24
+ const n = parseFloat(m[1]);
25
+ if (Number.isNaN(n))
26
+ return null;
27
+ if (m[2] === 'rem')
28
+ return n * 16;
29
+ if (m[2] === 'px')
30
+ return n;
31
+ return n === 0 ? 0 : null;
32
+ }
33
+ function classFor(prefix, axis, px) {
34
+ const suffix = spacingSuffix(px);
35
+ return suffix ? `${prefix}${axis}${suffix}` : null;
36
+ }
37
+ function tokenFor(px) {
38
+ return spacingToken(px) ?? null;
39
+ }
40
+ // a selector reaching into a design system component has no element you can class
41
+ function targetsDsInternals(selector) {
42
+ return /(?:^|\s)(?:onemrva-[\w-]+|\.mat-[\w-]+)\s+[.#\w]/.test(selector);
43
+ }
44
+ function spacingAdvice(prefix, axis, px, selector) {
45
+ if (targetsDsInternals(selector)) {
46
+ return 'Delete this rule: it styles the inside of a design system component, so there is no element of yours to put a class on.';
47
+ }
48
+ const cls = classFor(prefix, axis, px);
49
+ if (cls) {
50
+ return `Delete this rule and put .${cls} on the element in the template.`;
51
+ }
52
+ const token = tokenFor(px);
53
+ if (token)
54
+ return `Use var(${token}) instead of the literal.`;
55
+ return `${px}px is not on the spacing scale. Confirm it against the design, then use list_theme_utilities.`;
56
+ }
57
+ function reviewDecl(d, findings) {
58
+ const at = `scss:${d.line}`;
59
+ const value = d.value.replace(/!important/gi, '').trim();
60
+ if (d.prop.startsWith('--'))
61
+ return;
62
+ const gapPrefix = GAP_PREFIX[d.prop];
63
+ const padMar = d.prop.match(SPACING_PROPS);
64
+ if (gapPrefix || padMar) {
65
+ const parts = value.split(/\s+/);
66
+ const pxs = parts.map(toPx);
67
+ if (pxs.every(p => p !== null)) {
68
+ const nums = pxs;
69
+ if (nums.length === 1) {
70
+ const prefix = gapPrefix ?? (d.prop.startsWith('padding') ? 'p' : 'm');
71
+ const axis = padMar?.[2] ? SIDE_AXIS[padMar[2]] : '';
72
+ findings.push({
73
+ severity: 'warning',
74
+ rule: 'spacing-should-be-a-class',
75
+ where: at,
76
+ message: `\`${d.raw}\` hand-writes spacing the design system provides.`,
77
+ fix: spacingAdvice(prefix, axis, nums[0], d.selector),
78
+ });
79
+ return;
80
+ }
81
+ if (nums.length === 2 && padMar && !padMar[2]) {
82
+ const prefix = d.prop.startsWith('padding') ? 'p' : 'm';
83
+ const y = classFor(prefix, 'y', nums[0]);
84
+ const x = classFor(prefix, 'x', nums[1]);
85
+ findings.push({
86
+ severity: 'warning',
87
+ rule: 'spacing-should-be-a-class',
88
+ where: at,
89
+ message: `\`${d.raw}\` hand-writes spacing the design system provides.`,
90
+ fix: y && x
91
+ ? `Delete this rule and put .${y} .${x} on the element in the template.`
92
+ : 'Use spacing utility classes or tokens instead of literals.',
93
+ });
94
+ return;
95
+ }
96
+ }
97
+ if (parts.some(p => /^-?(?:\d+(?:\.\d+)?|\.\d+)(px|rem)$/.test(p))) {
98
+ findings.push({
99
+ severity: 'warning',
100
+ rule: 'raw-spacing-value',
101
+ where: at,
102
+ message: `\`${d.raw}\` hard-codes a spacing value.`,
103
+ fix: 'Use a spacing utility class in the template, or a var(--*-spacer) token in SCSS.',
104
+ });
105
+ }
106
+ return;
107
+ }
108
+ if (/#[0-9a-fA-F]{3,8}\b/.test(value) && !value.includes('var(')) {
109
+ findings.push({
110
+ severity: 'warning',
111
+ rule: 'raw-colour',
112
+ where: at,
113
+ message: `\`${d.raw}\` hard-codes a colour.`,
114
+ fix: 'Call get_design_token and use the CSS custom property.',
115
+ });
116
+ }
117
+ }
118
+ function reviewSelector(sel, findings) {
119
+ const at = `scss:${sel.line}`;
120
+ const text = sel.text.replace(/\s+/g, ' ').trim();
121
+ if (text.includes('::ng-deep') || text.includes('/deep/')) {
122
+ findings.push({
123
+ severity: 'error',
124
+ rule: 'pierces-encapsulation',
125
+ where: at,
126
+ message: `\`${text}\` reaches into another component's styles.`,
127
+ fix: 'Remove it. If the design system component itself is wrong, report that instead of patching around it.',
128
+ });
129
+ return;
130
+ }
131
+ // a DS element followed by a descendant is styling its internals; a sibling
132
+ // or comma-separated host selector is not
133
+ for (const part of text.split(',')) {
134
+ if (/(?:^|\s)(?:onemrva-[\w-]+|\.mat-[\w-]+)\s+[.#\w]/.test(part.trim())) {
135
+ findings.push({
136
+ severity: 'warning',
137
+ rule: 'restyles-ds-internals',
138
+ where: at,
139
+ message: `\`${text}\` restyles the internals of a design system component.`,
140
+ fix: 'Style your own wrapper instead, or report the gap to the design system team.',
141
+ });
142
+ return;
143
+ }
144
+ }
145
+ }
146
+ export function reviewImplementation(_scanner, args) {
147
+ const html = typeof args?.html === 'string' ? args.html : '';
148
+ const scss = typeof args?.scss === 'string' ? args.scss : '';
149
+ const ts = typeof args?.ts === 'string' ? args.ts : '';
150
+ if (!html.trim() && !scss.trim()) {
151
+ return errorResult('Provide `html` and/or `scss` for the component you want reviewed.');
152
+ }
153
+ const findings = [];
154
+ const { decls, selectors } = parseScss(scss);
155
+ for (const sel of selectors)
156
+ reviewSelector(sel, findings);
157
+ for (const d of decls)
158
+ reviewDecl(d, findings);
159
+ for (const d of decls) {
160
+ if (/!important/i.test(d.value)) {
161
+ findings.push({
162
+ severity: 'info',
163
+ rule: 'important-override',
164
+ where: `scss:${d.line}`,
165
+ message: `\`${d.raw}\` uses !important.`,
166
+ fix: 'Usually a sign of fighting a design system component. Prefer a utility class or your own wrapper.',
167
+ });
168
+ }
169
+ }
170
+ const htmlLines = html.split('\n');
171
+ htmlLines.forEach((line, i) => {
172
+ const inline = line.matchAll(/(?:\[style\.[\w.-]+\]|style)\s*=\s*("[^"]*"|'[^']*')/g);
173
+ for (const m of inline) {
174
+ findings.push({
175
+ severity: 'warning',
176
+ rule: 'inline-style-attribute',
177
+ where: `html:${i + 1}`,
178
+ message: `Inline style ${m[0]}.`,
179
+ fix: 'Use a spacing utility class (.mt-l, .px-m, .g-s) instead of a style attribute.',
180
+ });
181
+ }
182
+ });
183
+ const templateLines = htmlLines.filter((l) => l.trim()).length;
184
+ if (templateLines > 150) {
185
+ findings.push({
186
+ severity: 'warning',
187
+ rule: 'monolithic-template',
188
+ where: `html (${templateLines} lines)`,
189
+ message: 'This template is large enough to be doing several jobs.',
190
+ fix: 'Split the repeated or self-contained sections into named standalone components.',
191
+ });
192
+ }
193
+ if (ts) {
194
+ const inputs = (ts.match(/=\s*input[.<(]/g) || []).length +
195
+ (ts.match(/@Input\(/g) || []).length;
196
+ if (inputs > 12) {
197
+ findings.push({
198
+ severity: 'info',
199
+ rule: 'too-many-inputs',
200
+ where: `ts (${inputs} inputs)`,
201
+ message: 'A component with this many inputs is usually more than one component.',
202
+ fix: 'Group related inputs into an object, or split the component.',
203
+ });
204
+ }
205
+ }
206
+ const avoidable = findings.filter(f => ['spacing-should-be-a-class', 'raw-spacing-value'].includes(f.rule)).length;
207
+ if (decls.length > 0 && avoidable === decls.length) {
208
+ findings.push({
209
+ severity: 'warning',
210
+ rule: 'stylesheet-not-needed',
211
+ where: 'scss',
212
+ message: 'Every declaration in this stylesheet is spacing the design system already covers.',
213
+ fix: 'Delete the stylesheet and use utility classes in the template.',
214
+ });
215
+ }
216
+ const errors = findings.filter(f => f.severity === 'error').length;
217
+ const warnings = findings.filter(f => f.severity === 'warning').length;
218
+ const notes = findings.length - errors - warnings;
219
+ if (errors === 0 && warnings === 0) {
220
+ const tail = notes > 0 ? `\n\n${renderFindings(findings)}` : '';
221
+ return textResult(`# Implementation review\n\n## VERDICT: GOOD\n\n` +
222
+ `No errors, no warnings${notes > 0 ? `, ${notes} note(s) you may ignore` : ''}. ` +
223
+ `Spacing comes from the design system, no raw values, no restyled internals.${tail}\n\n` +
224
+ 'Also run lint_ds_usage on the template for API-level bugs.');
225
+ }
226
+ return textResult(`# Implementation review\n\n## VERDICT: NEEDS FIXING\n\n` +
227
+ `${errors} error(s), ${warnings} warning(s), ${notes} note(s).\n\n${renderFindings(findings)}\n\n` +
228
+ 'Apply the fixes above, then run this tool again. The verdict is GOOD once ' +
229
+ 'there are no errors and no warnings; notes alone do not block. ' +
230
+ 'Also run lint_ds_usage on the template for API-level bugs.');
231
+ }
232
+ function renderFindings(findings) {
233
+ const order = { error: 0, warning: 1, info: 2 };
234
+ return [...findings]
235
+ .sort((a, b) => order[a.severity] - order[b.severity])
236
+ .map(f => `[${f.severity.toUpperCase()}] ${f.rule} (${f.where})\n ${f.message}${f.fix ? `\n -> ${f.fix}` : ''}`)
237
+ .join('\n\n');
238
+ }
239
+ //# sourceMappingURL=tool-quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-quality.js","sourceRoot":"","sources":["../src/tool-quality.ts"],"names":[],"mappings":"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"}
@@ -214,15 +214,30 @@ export function getTools() {
214
214
  },
215
215
  },
216
216
  },
217
+ {
218
+ name: 'get_spacing_spec',
219
+ description: 'The padding, gap, direction and alignment of one or many components, in a compact form, in a single call. Use this when checking or correcting the spacing of a page against its design: it is far cheaper than calling get_figma_component per component. Accepts names, node ids or pasted Figma URLs.',
220
+ inputSchema: {
221
+ type: 'object',
222
+ properties: {
223
+ components: {
224
+ type: 'array',
225
+ items: { type: 'string' },
226
+ description: 'Component names, node ids, or Figma URLs. Pass every component on the page at once.',
227
+ },
228
+ },
229
+ required: ['components'],
230
+ },
231
+ },
217
232
  {
218
233
  name: 'get_figma_component',
219
- description: 'Get detailed info for one synced Figma component: mapping, properties, variants, tokens used, and Figma link.',
234
+ description: 'Get detailed info for one synced Figma component: mapping, properties, variants, tokens used, the Figma link, and the anatomy tree with padding, gap and layout per layer. Accepts a component name, a node id, or a pasted Figma frame URL. For spacing across several components prefer get_spacing_spec, which is far cheaper.',
220
235
  inputSchema: {
221
236
  type: 'object',
222
237
  properties: {
223
238
  name: {
224
239
  type: 'string',
225
- description: 'Figma component name',
240
+ description: 'Figma component name, a node id (51-1711 or 51:1711), or a full Figma frame URL.',
226
241
  },
227
242
  },
228
243
  required: ['name'],
@@ -494,6 +509,27 @@ export function getTools() {
494
509
  required: ['html'],
495
510
  },
496
511
  },
512
+ {
513
+ name: 'review_implementation',
514
+ description: 'Quality gate for code you just wrote or changed. Reports custom CSS that a spacing utility class already covers, hard-coded px and hex values, stylesheets that restyle design system internals or pierce encapsulation, inline style attributes, and templates that have grown into a monolith. Run it after implement_figma_design, alongside lint_ds_usage.',
515
+ inputSchema: {
516
+ type: 'object',
517
+ properties: {
518
+ html: {
519
+ type: 'string',
520
+ description: 'The component template.',
521
+ },
522
+ scss: {
523
+ type: 'string',
524
+ description: 'The component stylesheet. The most important input: most findings come from here.',
525
+ },
526
+ ts: {
527
+ type: 'string',
528
+ description: 'Optional component class, used for size signals.',
529
+ },
530
+ },
531
+ },
532
+ },
497
533
  {
498
534
  name: 'generate_form',
499
535
  description: 'Scaffold a complete design system form from a field spec. Default JSON Forms mode emits schema + uischema + the renderers to register; reactive mode emits a FormGroup + template. Routing to iban/phone/ssin/date/select renderers is handled automatically.',
@@ -587,6 +623,27 @@ export function getTools() {
587
623
  required: ['packageJson'],
588
624
  },
589
625
  },
626
+ {
627
+ name: 'implement_figma_design',
628
+ description: 'Call this FIRST, before any other tool and before writing code, whenever the user pastes a figma.com link, a frame, a mockup or a screenshot. It does not matter whether they say what to do with it: a bare Figma link on its own is enough. Triggers on messages like "Implement this design from Figma <link>", "build this screen", "recreate this page", or a message that is only a Figma URL. Returns the workflow to follow: how to read the frame, how to map every layer to a nemo Design System component, which tools to call in which order, and the rules (no raw Angular Material, no hard-coded colours or spacing, lint the result). Follow the returned steps instead of improvising.',
629
+ inputSchema: {
630
+ type: 'object',
631
+ properties: {
632
+ figmaUrl: {
633
+ type: 'string',
634
+ description: 'The Figma frame link the user pasted, if any.',
635
+ },
636
+ screen: {
637
+ type: 'string',
638
+ description: 'What the screen is, e.g. "claims intake step 2".',
639
+ },
640
+ notes: {
641
+ type: 'string',
642
+ description: 'Anything else the user said about the screen.',
643
+ },
644
+ },
645
+ },
646
+ },
590
647
  ];
591
648
  }
592
649
  // Flat list of tool names derived from the registry — imported by the drift
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { CallToolRequest } from '@modelcontextprotocol/sdk/types.js';
2
2
  import { ComponentScanner } from './component-scanner.js';
3
+ export declare function canFileGaps(): boolean;
4
+ export declare function syncedFigmaFileKey(): string | undefined;
3
5
  export declare function getHelpCatalogToolNames(): string[];
4
6
  type ToolResponse = {
5
7
  content: {
package/dist/tools.js CHANGED
@@ -1,9 +1,39 @@
1
+ import { TOOL_NAMES } from './tool-registry.js';
1
2
  import { toMarkdownTable, getCodebaseSnapshot, getJsonFormsRendererByName, getThemeUtilityByName, getDataSourceMode, readMcpJson, truncateText, formatSelector, toPascalCase, textResult, errorResult, notFound, } from './mcp-shared.js';
2
3
  import { listComponents, getComponent, searchComponents, generateComponentUsage, getComponentProps, getAccessibilityInfo, suggestComponent, auditComponent, compareComponents, } from './tool-components.js';
3
- import { listIcons, getSyncStatus, listFigmaComponents, getFigmaComponent, listDesignTokens, explainTokenDiff, listFigmaStyles, getDesignToken, getColorPalette, } from './tool-design.js';
4
+ import { listIcons, getSyncStatus, listFigmaComponents, getFigmaComponent, getSpacingSpec, listDesignTokens, explainTokenDiff, listFigmaStyles, getDesignToken, getColorPalette, } from './tool-design.js';
4
5
  import { migrateToDs, migrateFile, analyzeRepoMigration, } from './tool-migration.js';
5
6
  import { getReleaseNotes, angularMigrationGuide, dsUpgradeGuide, } from './tool-releases.js';
6
7
  import { lintDsUsage, generateForm, getStarted, explainComponent, dsInstall, } from './tool-devkit.js';
8
+ import { reviewImplementation } from './tool-quality.js';
9
+ import { figmaToPagePrompt, parseFigmaRef, EXECUTE_DIRECTIVE, } from './prompts.js';
10
+ // Only promise gap reporting when that tool is actually registered.
11
+ export function canFileGaps() {
12
+ return TOOL_NAMES.includes('request_ds_feature');
13
+ }
14
+ // Which Figma file the sync actually covers, taken from the synced data.
15
+ export function syncedFigmaFileKey() {
16
+ const { data } = readMcpJson('components.json');
17
+ for (const component of data ?? []) {
18
+ const ref = parseFigmaRef(component.figmaLink);
19
+ if (ref) {
20
+ return ref.fileKey;
21
+ }
22
+ }
23
+ return undefined;
24
+ }
25
+ // Same workflow as the implement_figma_design prompt, for clients without
26
+ // prompt support. The directive keeps models from echoing it at the user.
27
+ function figmaToPagePromptTool(args) {
28
+ const workflow = figmaToPagePrompt({
29
+ figmaUrl: typeof args?.figmaUrl === 'string' ? args.figmaUrl : undefined,
30
+ screen: typeof args?.screen === 'string' ? args.screen : undefined,
31
+ notes: typeof args?.notes === 'string' ? args.notes : undefined,
32
+ syncedFileKey: syncedFigmaFileKey(),
33
+ canFileGaps: canFileGaps(),
34
+ });
35
+ return textResult(`${EXECUTE_DIRECTIVE}\n\n${workflow}`);
36
+ }
7
37
  function getHelpToolGroups() {
8
38
  return [
9
39
  {
@@ -31,6 +61,10 @@ function getHelpToolGroups() {
31
61
  tools: [
32
62
  ['list_figma_components', 'List synced Figma components.'],
33
63
  ['get_figma_component', 'Get one synced Figma component.'],
64
+ [
65
+ 'get_spacing_spec',
66
+ 'Padding and gaps of many components in one call.',
67
+ ],
34
68
  ['list_design_tokens', 'List design tokens.'],
35
69
  ['get_design_token', 'Get one design token.'],
36
70
  ['explain_token_diff', 'Compare two design tokens.'],
@@ -97,6 +131,14 @@ function getHelpToolGroups() {
97
131
  'Scaffold a DS form from a field spec (JSON Forms/reactive).',
98
132
  ],
99
133
  ['lint_ds_usage', 'Lint a template for DS usage bugs (ESLint for DS).'],
134
+ [
135
+ 'review_implementation',
136
+ 'Check delivered code for needless CSS, restyled DS internals and monoliths.',
137
+ ],
138
+ [
139
+ 'implement_figma_design',
140
+ 'Start here for a Figma frame: the full design-to-page workflow.',
141
+ ],
100
142
  ],
101
143
  },
102
144
  ];
@@ -163,6 +205,7 @@ const TOOL_HANDLERS = {
163
205
  get_sync_status: () => getSyncStatus(),
164
206
  list_figma_components: (_scanner, args) => listFigmaComponents(args),
165
207
  get_figma_component: (_scanner, args) => getFigmaComponent(args),
208
+ get_spacing_spec: (_scanner, args) => getSpacingSpec(args),
166
209
  list_design_tokens: (_scanner, args) => listDesignTokens(args),
167
210
  explain_token_diff: (_scanner, args) => explainTokenDiff(args),
168
211
  list_figma_styles: (_scanner, args) => listFigmaStyles(args),
@@ -179,10 +222,12 @@ const TOOL_HANDLERS = {
179
222
  angular_migration_guide: (_scanner, args) => angularMigrationGuide(args),
180
223
  ds_upgrade_guide: (_scanner, args) => dsUpgradeGuide(args),
181
224
  lint_ds_usage: (scanner, args) => lintDsUsage(scanner, args),
225
+ review_implementation: (scanner, args) => reviewImplementation(scanner, args),
182
226
  generate_form: (scanner, args) => generateForm(scanner, args),
183
227
  get_started: (scanner, args) => getStarted(scanner, args),
184
228
  explain_component: (scanner, args) => explainComponent(scanner, args),
185
229
  ds_install: (scanner, args) => dsInstall(scanner, args),
230
+ implement_figma_design: (_scanner, args) => figmaToPagePromptTool(args),
186
231
  };
187
232
  // Tool names the dispatch table can handle — exported for the drift guard test.
188
233
  export const DISPATCH_TOOL_NAMES = Object.keys(TOOL_HANDLERS);