@calibrate-ds/cli 0.1.6 → 0.1.8
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/dist/commands/bridge.d.ts +3 -0
- package/dist/commands/bridge.d.ts.map +1 -0
- package/dist/commands/bridge.js +62 -0
- package/dist/commands/bridge.js.map +1 -0
- package/dist/commands/diff.d.ts +7 -0
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +68 -0
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +31 -1
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +4 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +25 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/verify.d.ts +6 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +280 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.js +38 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/registry.d.ts +20 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +8 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +67 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/component-tools.d.ts +9 -0
- package/dist/mcp/tools/component-tools.d.ts.map +1 -0
- package/dist/mcp/tools/component-tools.js +105 -0
- package/dist/mcp/tools/component-tools.js.map +1 -0
- package/dist/mcp/tools/governance-tools.d.ts +3 -0
- package/dist/mcp/tools/governance-tools.d.ts.map +1 -0
- package/dist/mcp/tools/governance-tools.js +180 -0
- package/dist/mcp/tools/governance-tools.js.map +1 -0
- package/dist/mcp/tools/token-tools.d.ts +3 -0
- package/dist/mcp/tools/token-tools.d.ts.map +1 -0
- package/dist/mcp/tools/token-tools.js +60 -0
- package/dist/mcp/tools/token-tools.js.map +1 -0
- package/dist/mcp/tools/verify-tool.d.ts +3 -0
- package/dist/mcp/tools/verify-tool.d.ts.map +1 -0
- package/dist/mcp/tools/verify-tool.js +82 -0
- package/dist/mcp/tools/verify-tool.js.map +1 -0
- package/package.json +6 -5
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { loadConfig, loadLatestSnapshot, resolveComponent, resolveDSPaths, createNamingStrategy, isIconComponent, normalizeIconDisplayName, getComponentContext, loadManifest, } from "@calibrate-ds/core";
|
|
4
|
+
import { fetchFigmaScreenshot, runPixelDiff, } from "@calibrate-ds/core";
|
|
5
|
+
import { logger } from "../utils/logger.js";
|
|
6
|
+
// ── Storybook screenshot ──────────────────────────────────────────────────────
|
|
7
|
+
/**
|
|
8
|
+
* Converts a Storybook story title (e.g. "chat/ChatHeader") and story name
|
|
9
|
+
* ("Default") to the iframe URL used for headless screenshotting.
|
|
10
|
+
* Format: /iframe.html?id={title-slug}--{story-slug}&viewMode=story
|
|
11
|
+
*/
|
|
12
|
+
function buildStorybookIframeUrl(baseUrl, title, story = "Default") {
|
|
13
|
+
const titleSlug = title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
14
|
+
const storySlug = story.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
15
|
+
return `${baseUrl}/iframe.html?id=${titleSlug}--${storySlug}&viewMode=story`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Checks if a URL is reachable (Storybook is running).
|
|
19
|
+
*/
|
|
20
|
+
async function isReachable(url) {
|
|
21
|
+
try {
|
|
22
|
+
const res = await fetch(url, { method: "HEAD", signal: AbortSignal.timeout(2000) });
|
|
23
|
+
return res.ok;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Takes a screenshot of a Storybook story using Playwright (if installed).
|
|
31
|
+
* Returns the output path on success, null if Playwright isn't available.
|
|
32
|
+
*/
|
|
33
|
+
async function screenshotWithPlaywright(iframeUrl, outputPath, width, height) {
|
|
34
|
+
try {
|
|
35
|
+
const { chromium } = await import("playwright");
|
|
36
|
+
const browser = await chromium.launch({ args: ["--no-sandbox"] });
|
|
37
|
+
const page = await browser.newPage();
|
|
38
|
+
// Give the viewport breathing room around the component
|
|
39
|
+
const viewW = Math.max(width + 80, 320);
|
|
40
|
+
const viewH = Math.max(height + 80, 200);
|
|
41
|
+
await page.setViewportSize({ width: viewW, height: viewH });
|
|
42
|
+
await page.goto(iframeUrl, { waitUntil: "networkidle", timeout: 20_000 });
|
|
43
|
+
// Wait for any CSS transitions to settle
|
|
44
|
+
await page.waitForTimeout(500);
|
|
45
|
+
// Crop to the actual component bounds, not the full viewport
|
|
46
|
+
const box = await page.evaluate(() => {
|
|
47
|
+
const el = document.querySelector("#storybook-root > *");
|
|
48
|
+
if (!el)
|
|
49
|
+
return null;
|
|
50
|
+
const r = el.getBoundingClientRect();
|
|
51
|
+
return { x: r.left, y: r.top, width: r.width, height: r.height };
|
|
52
|
+
});
|
|
53
|
+
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
|
54
|
+
if (box && box.width > 0 && box.height > 0) {
|
|
55
|
+
await page.screenshot({
|
|
56
|
+
path: outputPath,
|
|
57
|
+
clip: { x: Math.max(0, box.x), y: Math.max(0, box.y), width: box.width, height: box.height },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Fallback: screenshot the full viewport at the expected dimensions
|
|
62
|
+
await page.screenshot({
|
|
63
|
+
path: outputPath,
|
|
64
|
+
clip: { x: 0, y: 0, width, height },
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
await browser.close();
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ── AI Visual Feedback ────────────────────────────────────────────────────────
|
|
75
|
+
/**
|
|
76
|
+
* Sends both screenshots to Claude Vision and returns structured feedback
|
|
77
|
+
* describing the visual differences. Uses claude-haiku for speed + cost.
|
|
78
|
+
*/
|
|
79
|
+
async function getAIFeedback(figmaPath, implPath, componentName) {
|
|
80
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
81
|
+
if (!apiKey)
|
|
82
|
+
return null;
|
|
83
|
+
try {
|
|
84
|
+
const Anthropic = (await import("@anthropic-ai/sdk")).default;
|
|
85
|
+
const client = new Anthropic({ apiKey });
|
|
86
|
+
const figmaData = (await fs.readFile(figmaPath)).toString("base64");
|
|
87
|
+
const implData = (await fs.readFile(implPath)).toString("base64");
|
|
88
|
+
const response = await client.messages.create({
|
|
89
|
+
model: "claude-haiku-4-5-20251001",
|
|
90
|
+
max_tokens: 1024,
|
|
91
|
+
messages: [{
|
|
92
|
+
role: "user",
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: "text",
|
|
96
|
+
text: `You are a design QA reviewer comparing a Figma design to its React implementation for the "${componentName}" component.
|
|
97
|
+
|
|
98
|
+
The FIRST image is the Figma design (source of truth).
|
|
99
|
+
The SECOND image is the browser-rendered React implementation.
|
|
100
|
+
|
|
101
|
+
List every visual difference you see. For each difference state:
|
|
102
|
+
- property: what CSS/layout property is wrong (e.g. "padding", "border-radius", "font-size", "color", "gap", "alignment")
|
|
103
|
+
- expected: what the Figma design shows
|
|
104
|
+
- observed: what the implementation shows
|
|
105
|
+
|
|
106
|
+
Then give an overall assessment: "matches" (≥95% identical), "minor-differences" (small spacing/color deviations), or "significant-differences" (structural layout or major style errors).
|
|
107
|
+
|
|
108
|
+
Respond ONLY with valid JSON in this exact shape:
|
|
109
|
+
{
|
|
110
|
+
"summary": "one-sentence summary",
|
|
111
|
+
"differences": [{ "property": "...", "expected": "...", "observed": "..." }],
|
|
112
|
+
"overallAssessment": "matches" | "minor-differences" | "significant-differences"
|
|
113
|
+
}`
|
|
114
|
+
},
|
|
115
|
+
{ type: "image", source: { type: "base64", media_type: "image/png", data: figmaData } },
|
|
116
|
+
{ type: "image", source: { type: "base64", media_type: "image/png", data: implData } },
|
|
117
|
+
],
|
|
118
|
+
}],
|
|
119
|
+
});
|
|
120
|
+
const text = response.content[0].type === "text" ? response.content[0].text : "";
|
|
121
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
122
|
+
if (!jsonMatch)
|
|
123
|
+
return null;
|
|
124
|
+
return JSON.parse(jsonMatch[0]);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ── Main command ──────────────────────────────────────────────────────────────
|
|
131
|
+
export async function verifyComponentCommand(name, options = {}) {
|
|
132
|
+
try {
|
|
133
|
+
const config = await loadConfig();
|
|
134
|
+
const snapshot = await loadLatestSnapshot(config);
|
|
135
|
+
if (!snapshot?.components) {
|
|
136
|
+
logger.warn("No snapshot found. Run 'ptb scan' first.");
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const resolution = resolveComponent(name, snapshot.components, config);
|
|
140
|
+
const component = resolution.exactMatch;
|
|
141
|
+
if (!component) {
|
|
142
|
+
logger.error(`Component '${name}' not found.`);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const naming = createNamingStrategy(config.naming);
|
|
146
|
+
const normalizedName = isIconComponent(component.name)
|
|
147
|
+
? normalizeIconDisplayName(component.name)
|
|
148
|
+
: component.name;
|
|
149
|
+
const codeName = naming.formatComponentName(normalizedName);
|
|
150
|
+
const slug = component.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
151
|
+
logger.info(`Verifying \x1b[36m${component.name}\x1b[0m \x1b[2m(${codeName})\x1b[0m`);
|
|
152
|
+
const { metadataDir } = resolveDSPaths(config);
|
|
153
|
+
const verifyDir = path.join(metadataDir, "verify", slug);
|
|
154
|
+
await fs.mkdir(verifyDir, { recursive: true });
|
|
155
|
+
const report = {
|
|
156
|
+
componentName: component.name,
|
|
157
|
+
slug,
|
|
158
|
+
checkedAt: new Date().toISOString(),
|
|
159
|
+
figmaNodeId: component.designToolNodeId ?? null,
|
|
160
|
+
screenshots: { figma: null, impl: null, diff: null },
|
|
161
|
+
pixelMatch: null,
|
|
162
|
+
aiFeedback: null,
|
|
163
|
+
};
|
|
164
|
+
// ── Step 1: Figma screenshot ──────────────────────────────────────────
|
|
165
|
+
logger.info(" Fetching Figma screenshot...");
|
|
166
|
+
const figmaPath = report.figmaNodeId
|
|
167
|
+
? await fetchFigmaScreenshot(report.figmaNodeId, slug, config)
|
|
168
|
+
: null;
|
|
169
|
+
if (figmaPath) {
|
|
170
|
+
report.screenshots.figma = path.relative(process.cwd(), figmaPath);
|
|
171
|
+
logger.success(` ✔ Figma screenshot → ${report.screenshots.figma}`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
logger.warn(" ✗ Figma screenshot unavailable (check token / node ID)");
|
|
175
|
+
}
|
|
176
|
+
// ── Step 2: Implementation screenshot ────────────────────────────────
|
|
177
|
+
let implPath = null;
|
|
178
|
+
if (options.implScreenshot) {
|
|
179
|
+
// User provided an explicit screenshot path
|
|
180
|
+
implPath = path.resolve(options.implScreenshot);
|
|
181
|
+
logger.info(` Using provided screenshot: ${options.implScreenshot}`);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Try Storybook (auto-detect or use provided URL)
|
|
185
|
+
const compWidth = component.size?.width?.rawValue ?? 400;
|
|
186
|
+
const compHeight = component.size?.height?.rawValue ?? 300;
|
|
187
|
+
const sbPorts = [6006, 6007, 6008];
|
|
188
|
+
const sbBaseUrl = options.storybookUrl
|
|
189
|
+
?? await (async () => {
|
|
190
|
+
for (const port of sbPorts) {
|
|
191
|
+
const base = `http://localhost:${port}`;
|
|
192
|
+
if (await isReachable(base))
|
|
193
|
+
return base;
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
})();
|
|
197
|
+
if (sbBaseUrl) {
|
|
198
|
+
// Build the story title the same way generate-component-stories.ts does
|
|
199
|
+
const manifest = await loadManifest(config);
|
|
200
|
+
const context = await getComponentContext(component.id, snapshot, config, manifest);
|
|
201
|
+
const category = context
|
|
202
|
+
? (context.component.categoryPath
|
|
203
|
+
? `${context.component.categoryPath}/${codeName}`
|
|
204
|
+
: `Components/${codeName}`)
|
|
205
|
+
: `Components/${codeName}`;
|
|
206
|
+
const iframeUrl = buildStorybookIframeUrl(sbBaseUrl, category);
|
|
207
|
+
logger.info(` Rendering story: ${iframeUrl}`);
|
|
208
|
+
const implOut = path.join(verifyDir, "impl.png");
|
|
209
|
+
const ok = await screenshotWithPlaywright(iframeUrl, implOut, compWidth, compHeight);
|
|
210
|
+
if (ok) {
|
|
211
|
+
implPath = implOut;
|
|
212
|
+
report.screenshots.impl = path.relative(process.cwd(), implOut);
|
|
213
|
+
logger.success(` ✔ Implementation screenshot → ${report.screenshots.impl}`);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
logger.warn(" ✗ Playwright not available — install it with: pnpm add -D playwright && pnpx playwright install chromium");
|
|
217
|
+
logger.warn(" Or provide a screenshot with: ptb verify --impl-screenshot <path>");
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
logger.warn(" ✗ Storybook not detected on ports 6006–6008");
|
|
222
|
+
logger.warn(" Start Storybook, or pass --storybook-url <url>, or --impl-screenshot <path>");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (implPath) {
|
|
226
|
+
try {
|
|
227
|
+
await fs.access(implPath);
|
|
228
|
+
if (!report.screenshots.impl) {
|
|
229
|
+
report.screenshots.impl = path.relative(process.cwd(), implPath);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
implPath = null;
|
|
234
|
+
logger.warn(" ✗ Impl screenshot path not found");
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// ── Step 3: Pixel diff ────────────────────────────────────────────────
|
|
238
|
+
if (figmaPath && implPath) {
|
|
239
|
+
logger.info(" Running pixel diff...");
|
|
240
|
+
const diffOut = path.join(verifyDir, "diff.png");
|
|
241
|
+
const result = await runPixelDiff(figmaPath, implPath, diffOut);
|
|
242
|
+
if (result) {
|
|
243
|
+
report.pixelMatch = result;
|
|
244
|
+
report.screenshots.diff = path.relative(process.cwd(), diffOut);
|
|
245
|
+
const pct = (result.score * 100).toFixed(1);
|
|
246
|
+
const indicator = result.score >= 0.95 ? "\x1b[32m✔\x1b[0m" : result.score >= 0.80 ? "\x1b[33m~\x1b[0m" : "\x1b[31m✗\x1b[0m";
|
|
247
|
+
logger.info(` ${indicator} Pixel match: \x1b[1m${pct}%\x1b[0m (${result.diffPixels.toLocaleString()} px differ)`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// ── Step 4: AI visual feedback ────────────────────────────────────────
|
|
251
|
+
if (figmaPath && implPath && !options.noAi) {
|
|
252
|
+
logger.info(" Requesting AI visual feedback (claude-haiku)...");
|
|
253
|
+
const feedback = await getAIFeedback(figmaPath, implPath, component.name);
|
|
254
|
+
if (feedback) {
|
|
255
|
+
report.aiFeedback = feedback;
|
|
256
|
+
logger.info(` AI: ${feedback.summary}`);
|
|
257
|
+
if (feedback.differences.length > 0) {
|
|
258
|
+
for (const d of feedback.differences) {
|
|
259
|
+
logger.dim(` • ${d.property}: expected ${d.expected}, got ${d.observed}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
logger.dim(" AI feedback skipped (set ANTHROPIC_API_KEY to enable)");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// ── Write report ──────────────────────────────────────────────────────
|
|
268
|
+
const reportPath = path.join(verifyDir, "report.json");
|
|
269
|
+
await fs.writeFile(reportPath, JSON.stringify(report, null, 2), "utf-8");
|
|
270
|
+
logger.success(`\n Report → ${path.relative(process.cwd(), reportPath)}`);
|
|
271
|
+
if (!figmaPath && !implPath) {
|
|
272
|
+
logger.warn(" No screenshots captured — verify had nothing to compare.");
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
logger.error(error.message || String(error));
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ const { version } = require("../package.json");
|
|
|
7
7
|
import { ptbReactGenerator } from "@calibrate-ds/generator-react";
|
|
8
8
|
import { createInitCommand } from "./commands/init.js";
|
|
9
9
|
import { scanCommand } from "./commands/scan.js";
|
|
10
|
-
import { diffCommand } from "./commands/diff.js";
|
|
10
|
+
import { diffCommand, diffClearCommand } from "./commands/diff.js";
|
|
11
11
|
import { importTokensCommand } from "./commands/import-tokens.js";
|
|
12
12
|
import { generateTokensCommand } from "./commands/generate-tokens.js";
|
|
13
13
|
import { generateComponentsCommand } from "./commands/generate-components.js";
|
|
@@ -25,12 +25,15 @@ import { assignCommand } from "./commands/assign.js";
|
|
|
25
25
|
import { logCommand } from "./commands/log.js";
|
|
26
26
|
import { joinCommand, teamCommand, teamRoleCommand } from "./commands/team.js";
|
|
27
27
|
import { doctorCommand, doctorComponentCommand, doctorTokensCommand, doctorContextCommand, doctorBuildCommand } from "./commands/doctor.js";
|
|
28
|
+
import { verifyComponentCommand } from "./commands/verify.js";
|
|
28
29
|
import { aiStatusCommand, aiProvidersCommand, aiListCommand, aiSetupCommand, aiUseCommand, aiRemoveCommand, aiModelCommand } from "./commands/ai.js";
|
|
29
30
|
import { documentComponentCommand } from "./commands/document.js";
|
|
30
31
|
import { documentSystemCommand } from "./commands/document-system.js";
|
|
31
32
|
import { ciSetupCommand } from "./commands/ci.js";
|
|
32
33
|
import { removeCommand } from "./commands/remove.js";
|
|
33
34
|
import { helpCommand } from "./commands/help-topics.js";
|
|
35
|
+
import { mcpCommand } from "./commands/mcp.js";
|
|
36
|
+
import { bridgeAddCommand, bridgeListCommand } from "./commands/bridge.js";
|
|
34
37
|
import { ClaudeProvider } from "./ai/claude-provider.js";
|
|
35
38
|
import { OpenAIProvider } from "./ai/openai-provider.js";
|
|
36
39
|
// Register default design tool adapters
|
|
@@ -120,10 +123,14 @@ program
|
|
|
120
123
|
.command("import-tokens <path>")
|
|
121
124
|
.description("Import a PTB-friendly token JSON export into the local project")
|
|
122
125
|
.action(importTokensCommand);
|
|
123
|
-
program
|
|
126
|
+
const diffProgram = program
|
|
124
127
|
.command("diff")
|
|
125
128
|
.description("Show design changes not yet stamped. Uses stamp baseline when available so changes are never lost across multiple scans.")
|
|
126
129
|
.action(diffCommand);
|
|
130
|
+
diffProgram
|
|
131
|
+
.command("clear")
|
|
132
|
+
.description("Reset the diff baseline to the current state. Future diffs will compare against now.")
|
|
133
|
+
.action(diffClearCommand);
|
|
127
134
|
const planProgram = program
|
|
128
135
|
.command("plan")
|
|
129
136
|
.description("Plan likely affected generated files based on design changes from the previous snapshot")
|
|
@@ -216,6 +223,17 @@ implementProgram
|
|
|
216
223
|
.option("-f, --framework <name>", "Target framework (e.g. react, vue, flutter)")
|
|
217
224
|
.option("--force", "Overwrite existing files")
|
|
218
225
|
.action(implementComponentCommand);
|
|
226
|
+
// Verify Command
|
|
227
|
+
const verifyProgram = program
|
|
228
|
+
.command("verify")
|
|
229
|
+
.description("Compare a component's implementation against the Figma design visually");
|
|
230
|
+
verifyProgram
|
|
231
|
+
.command("component <name>")
|
|
232
|
+
.description("Fetch Figma screenshot, render via Storybook, pixel-diff, and get AI feedback e.g. ptb verify component Button")
|
|
233
|
+
.option("--storybook-url <url>", "Storybook base URL (default: auto-detect localhost:6006)")
|
|
234
|
+
.option("--impl-screenshot <path>", "Path to an existing implementation screenshot to compare")
|
|
235
|
+
.option("--no-ai", "Skip Claude Vision feedback (pixel diff only)")
|
|
236
|
+
.action(verifyComponentCommand);
|
|
219
237
|
// NEW: Export Command
|
|
220
238
|
const exportProgram = program
|
|
221
239
|
.command("export")
|
|
@@ -303,5 +321,23 @@ program
|
|
|
303
321
|
.command("guide [topic]")
|
|
304
322
|
.description("Detailed workflow guide for a feature area. Topics: setup, context, implement, document, status, team, ai, doctor, ci")
|
|
305
323
|
.action((topic) => helpCommand(topic));
|
|
324
|
+
// MCP Server
|
|
325
|
+
program
|
|
326
|
+
.command("mcp")
|
|
327
|
+
.description("Start a Model Context Protocol server over stdio. Exposes the design system as a live queryable data source for any MCP-compatible client (AI IDEs, agents, custom tools).")
|
|
328
|
+
.option("--cwd <path>", "Workspace directory containing ptb.config.json. Use this when the MCP client spawns the server from a different directory than your project root.")
|
|
329
|
+
.action((opts) => mcpCommand({ cwd: opts.cwd }));
|
|
330
|
+
// Symbol Bridge
|
|
331
|
+
const bridgeProgram = program
|
|
332
|
+
.command("bridge")
|
|
333
|
+
.description("Manage the Symbol Bridge (ptb-bridge.json) — maps Figma node IDs to exported component symbols");
|
|
334
|
+
bridgeProgram
|
|
335
|
+
.command("add <nodeId> <componentName> <filePath>")
|
|
336
|
+
.description("Manually add or update a Symbol Bridge entry, e.g. ptb bridge add 123:456 BtnWeb src/components/btn-web/BtnWeb.tsx")
|
|
337
|
+
.action(bridgeAddCommand);
|
|
338
|
+
bridgeProgram
|
|
339
|
+
.command("list")
|
|
340
|
+
.description("List all current Symbol Bridge entries")
|
|
341
|
+
.action(bridgeListCommand);
|
|
306
342
|
program.parse(process.argv);
|
|
307
343
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { DesignSystemModel, PTBConfig } from "@calibrate-ds/shared-types";
|
|
3
|
+
export type MCPContext = {
|
|
4
|
+
snapshot: DesignSystemModel;
|
|
5
|
+
config: PTBConfig;
|
|
6
|
+
workspaceRoot: string;
|
|
7
|
+
metadataDir: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A tool group is a collection of related MCP tools.
|
|
11
|
+
* Register new capabilities by creating an MCPToolGroup and calling registerMCPToolGroup().
|
|
12
|
+
* The server calls register() on each group at startup.
|
|
13
|
+
*/
|
|
14
|
+
export type MCPToolGroup = {
|
|
15
|
+
name: string;
|
|
16
|
+
register(server: McpServer, getContext: () => Promise<MCPContext>): void;
|
|
17
|
+
};
|
|
18
|
+
export declare function registerMCPToolGroup(group: MCPToolGroup): void;
|
|
19
|
+
export declare function getAllToolGroups(): MCPToolGroup[];
|
|
20
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE/E,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CAC5E,CAAC;AAIF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE9D;AAED,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,GAAmB,EAAE,CAAC;AAElC,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,eAAe,CAAC;AA0D9D,wBAAsB,cAAc,CAChC,UAAU,EAAE,YAAY,EAAE,EAC1B,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { loadConfig, loadLatestSnapshot, resolveDSPaths } from "@calibrate-ds/core";
|
|
5
|
+
let cachedContext = null;
|
|
6
|
+
let resolvedCwd = null;
|
|
7
|
+
let mcpServerRef = null;
|
|
8
|
+
function uriToPath(uri) {
|
|
9
|
+
return uri.startsWith("file://") ? fileURLToPath(uri) : uri;
|
|
10
|
+
}
|
|
11
|
+
async function resolveCwd() {
|
|
12
|
+
if (resolvedCwd)
|
|
13
|
+
return resolvedCwd;
|
|
14
|
+
// Ask the MCP client for its workspace roots — the official protocol way.
|
|
15
|
+
// Not all clients support this; fall through silently if they don't.
|
|
16
|
+
if (mcpServerRef) {
|
|
17
|
+
try {
|
|
18
|
+
const result = await mcpServerRef.server.listRoots();
|
|
19
|
+
const first = result?.roots?.[0];
|
|
20
|
+
if (first?.uri) {
|
|
21
|
+
resolvedCwd = uriToPath(first.uri);
|
|
22
|
+
return resolvedCwd;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch { /* client doesn't support roots — fall through */ }
|
|
26
|
+
}
|
|
27
|
+
resolvedCwd = process.cwd();
|
|
28
|
+
return resolvedCwd;
|
|
29
|
+
}
|
|
30
|
+
async function buildContext() {
|
|
31
|
+
if (cachedContext)
|
|
32
|
+
return cachedContext;
|
|
33
|
+
const cwd = await resolveCwd();
|
|
34
|
+
let config;
|
|
35
|
+
try {
|
|
36
|
+
config = await loadConfig(cwd);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
throw new Error(`ptb.config.json not found starting from '${cwd}'.\n\n` +
|
|
40
|
+
`The MCP server is running from a different directory than your workspace.\n` +
|
|
41
|
+
`Fix any one of these:\n` +
|
|
42
|
+
` 1. Pass --cwd to the server: "args": ["mcp", "--cwd", "/path/to/your/workspace"]\n` +
|
|
43
|
+
` 2. Set env var: PTB_WORKSPACE=/path/to/your/workspace\n` +
|
|
44
|
+
` 3. Set cwd in your MCP client config: "cwd": "/path/to/your/workspace"\n\n` +
|
|
45
|
+
`Original error: ${err.message}`);
|
|
46
|
+
}
|
|
47
|
+
const snapshot = await loadLatestSnapshot(config);
|
|
48
|
+
if (!snapshot) {
|
|
49
|
+
throw new Error(`No snapshot found in '${cwd}'. Run 'ptb scan' in that workspace first.`);
|
|
50
|
+
}
|
|
51
|
+
const { workspaceRoot, metadataDir } = resolveDSPaths(config);
|
|
52
|
+
cachedContext = { snapshot, config, workspaceRoot, metadataDir };
|
|
53
|
+
return cachedContext;
|
|
54
|
+
}
|
|
55
|
+
export async function startMCPServer(toolGroups, version, explicitCwd) {
|
|
56
|
+
// Explicit cwd wins — set before any tool call can trigger resolveCwd()
|
|
57
|
+
if (explicitCwd)
|
|
58
|
+
resolvedCwd = explicitCwd;
|
|
59
|
+
const server = new McpServer({ name: "ptb", version });
|
|
60
|
+
mcpServerRef = server;
|
|
61
|
+
for (const group of toolGroups) {
|
|
62
|
+
group.register(server, buildContext);
|
|
63
|
+
}
|
|
64
|
+
const transport = new StdioServerTransport();
|
|
65
|
+
await server.connect(transport);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MCPToolGroup } from "../registry.js";
|
|
2
|
+
export type BridgeEntry = {
|
|
3
|
+
nodeId: string;
|
|
4
|
+
componentName: string;
|
|
5
|
+
filePath: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function loadBridge(workspaceRoot: string): Promise<BridgeEntry[]>;
|
|
8
|
+
export declare const componentTools: MCPToolGroup;
|
|
9
|
+
//# sourceMappingURL=component-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/component-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAcF,wBAAsB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAO9E;AAED,eAAO,MAAM,cAAc,EAAE,YAyF5B,CAAC"}
|