@auto-engineer/react-component-implementer 1.12.1

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.
Files changed (48) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +10 -0
  3. package/dist/src/commands/implement-react-component.d.ts +26 -0
  4. package/dist/src/commands/implement-react-component.d.ts.map +1 -0
  5. package/dist/src/commands/implement-react-component.js +295 -0
  6. package/dist/src/commands/implement-react-component.js.map +1 -0
  7. package/dist/src/component-generator.d.ts +37 -0
  8. package/dist/src/component-generator.d.ts.map +1 -0
  9. package/dist/src/component-generator.js +228 -0
  10. package/dist/src/component-generator.js.map +1 -0
  11. package/dist/src/component-writer.d.ts +3 -0
  12. package/dist/src/component-writer.d.ts.map +1 -0
  13. package/dist/src/component-writer.js +23 -0
  14. package/dist/src/component-writer.js.map +1 -0
  15. package/dist/src/design-reference.d.ts +5 -0
  16. package/dist/src/design-reference.d.ts.map +1 -0
  17. package/dist/src/design-reference.js +24 -0
  18. package/dist/src/design-reference.js.map +1 -0
  19. package/dist/src/file-tree.d.ts +8 -0
  20. package/dist/src/file-tree.d.ts.map +1 -0
  21. package/dist/src/file-tree.js +13 -0
  22. package/dist/src/file-tree.js.map +1 -0
  23. package/dist/src/functional-validator.d.ts +9 -0
  24. package/dist/src/functional-validator.d.ts.map +1 -0
  25. package/dist/src/functional-validator.js +31 -0
  26. package/dist/src/functional-validator.js.map +1 -0
  27. package/dist/src/index.d.ts +11 -0
  28. package/dist/src/index.d.ts.map +1 -0
  29. package/dist/src/index.js +4 -0
  30. package/dist/src/index.js.map +1 -0
  31. package/dist/src/mcp-client.d.ts +10 -0
  32. package/dist/src/mcp-client.d.ts.map +1 -0
  33. package/dist/src/mcp-client.js +43 -0
  34. package/dist/src/mcp-client.js.map +1 -0
  35. package/dist/src/type-checker.d.ts +6 -0
  36. package/dist/src/type-checker.d.ts.map +1 -0
  37. package/dist/src/type-checker.js +36 -0
  38. package/dist/src/type-checker.js.map +1 -0
  39. package/dist/src/types.d.ts +21 -0
  40. package/dist/src/types.d.ts.map +1 -0
  41. package/dist/src/types.js +2 -0
  42. package/dist/src/types.js.map +1 -0
  43. package/dist/src/visual-evaluator.d.ts +20 -0
  44. package/dist/src/visual-evaluator.d.ts.map +1 -0
  45. package/dist/src/visual-evaluator.js +70 -0
  46. package/dist/src/visual-evaluator.js.map +1 -0
  47. package/dist/tsconfig.tsbuildinfo +1 -0
  48. package/package.json +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-generator.js","sourceRoot":"","sources":["../../src/component-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function writeComponent(name: string, code: string, outputDir: string): Promise<string>;
2
+ export declare function writeStory(name: string, code: string, outputDir: string): Promise<string>;
3
+ //# sourceMappingURL=component-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-writer.d.ts","sourceRoot":"","sources":["../../src/component-writer.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMnG;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/F"}
@@ -0,0 +1,23 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ function toKebabCase(name) {
4
+ return name
5
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
6
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
7
+ .toLowerCase();
8
+ }
9
+ export async function writeComponent(name, code, outputDir) {
10
+ await mkdir(outputDir, { recursive: true });
11
+ const fileName = `${toKebabCase(name)}.tsx`;
12
+ const fullPath = join(outputDir, fileName);
13
+ await writeFile(fullPath, code);
14
+ return fullPath;
15
+ }
16
+ export async function writeStory(name, code, outputDir) {
17
+ await mkdir(outputDir, { recursive: true });
18
+ const fileName = `${toKebabCase(name)}.stories.tsx`;
19
+ const fullPath = join(outputDir, fileName);
20
+ await writeFile(fullPath, code);
21
+ return fullPath;
22
+ }
23
+ //# sourceMappingURL=component-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-writer.js","sourceRoot":"","sources":["../../src/component-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;SACxC,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY,EAAE,SAAiB;IAChF,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAAY,EAAE,SAAiB;IAC5E,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Browser } from 'playwright';
2
+ import type { DesignReference } from './visual-evaluator.js';
3
+ export declare function parseComponentIds(existingComponents: string): string[];
4
+ export declare function captureDesignReferences(browser: Browser, port: number, existingComponents: string, instructions: string): Promise<DesignReference>;
5
+ //# sourceMappingURL=design-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-reference.d.ts","sourceRoot":"","sources":["../../src/design-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAgB,iBAAiB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtE;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC,CAmB1B"}
@@ -0,0 +1,24 @@
1
+ export function parseComponentIds(existingComponents) {
2
+ const matches = existingComponents.matchAll(/\(([^)]+)\)/g);
3
+ return Array.from(matches, (m) => m[1]);
4
+ }
5
+ export async function captureDesignReferences(browser, port, existingComponents, instructions) {
6
+ const ids = parseComponentIds(existingComponents);
7
+ const screenshots = [];
8
+ for (const id of ids) {
9
+ const url = `http://localhost:${port}/iframe.html?id=${id}--default`;
10
+ try {
11
+ const page = await browser.newPage();
12
+ await page.goto(url);
13
+ await page.waitForSelector('#storybook-root');
14
+ const screenshot = await page.screenshot();
15
+ await page.close();
16
+ screenshots.push({ name: id, screenshot });
17
+ }
18
+ catch {
19
+ // skip components that fail to render
20
+ }
21
+ }
22
+ return { screenshots, instructions };
23
+ }
24
+ //# sourceMappingURL=design-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-reference.js","sourceRoot":"","sources":["../../src/design-reference.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAAC,kBAA0B;IAC1D,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAgB,EAChB,IAAY,EACZ,kBAA0B,EAC1B,YAAoB;IAEpB,MAAM,GAAG,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAgD,EAAE,CAAC;IAEpE,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,oBAAoB,IAAI,mBAAmB,EAAE,WAAW,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Dirent } from 'node:fs';
2
+ export interface FileTreeDeps {
3
+ readdir: (path: string, options: {
4
+ withFileTypes: true;
5
+ }) => Promise<Dirent[]>;
6
+ }
7
+ export declare function scanFileTree(dirPath: string, deps: FileTreeDeps): Promise<string>;
8
+ //# sourceMappingURL=file-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tree.d.ts","sourceRoot":"","sources":["../../src/file-tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAChF;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvF"}
@@ -0,0 +1,13 @@
1
+ export async function scanFileTree(dirPath, deps) {
2
+ const entries = await deps.readdir(dirPath, { withFileTypes: true });
3
+ const names = entries
4
+ .filter((e) => {
5
+ if (e.isFile() && e.name.endsWith('.stories.tsx'))
6
+ return false;
7
+ return true;
8
+ })
9
+ .map((e) => (e.isDirectory() ? `${e.name}/` : e.name))
10
+ .sort();
11
+ return names.join('\n');
12
+ }
13
+ //# sourceMappingURL=file-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tree.js","sourceRoot":"","sources":["../../src/file-tree.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,IAAkB;IACpE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACrD,IAAI,EAAE,CAAC;IACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Browser } from 'playwright';
2
+ export interface FunctionalResult {
3
+ passed: boolean;
4
+ interactionErrors: string[];
5
+ consoleErrors: string[];
6
+ consoleWarnings: string[];
7
+ }
8
+ export declare function validateFunctional(storyUrl: string, browser: Browser): Promise<FunctionalResult>;
9
+ //# sourceMappingURL=functional-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functional-validator.d.ts","sourceRoot":"","sources":["../../src/functional-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoCtG"}
@@ -0,0 +1,31 @@
1
+ export async function validateFunctional(storyUrl, browser) {
2
+ const consoleErrors = [];
3
+ const consoleWarnings = [];
4
+ const interactionErrors = [];
5
+ const page = await browser.newPage();
6
+ page.on('console', (msg) => {
7
+ if (msg.type() === 'error') {
8
+ consoleErrors.push(msg.text());
9
+ }
10
+ if (msg.type() === 'warning') {
11
+ consoleWarnings.push(msg.text());
12
+ }
13
+ });
14
+ await page.goto(storyUrl);
15
+ await page.waitForSelector('#storybook-root', { state: 'attached', timeout: 10000 });
16
+ const errorText = await page.evaluate(() => {
17
+ const el = document.querySelector('[data-testid="storybook-error"]');
18
+ return el ? el.textContent : null;
19
+ });
20
+ if (typeof errorText === 'string' && errorText.length > 0) {
21
+ interactionErrors.push(errorText);
22
+ }
23
+ await page.close();
24
+ return {
25
+ passed: interactionErrors.length === 0 && consoleErrors.length === 0,
26
+ interactionErrors,
27
+ consoleErrors,
28
+ consoleWarnings,
29
+ };
30
+ }
31
+ //# sourceMappingURL=functional-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functional-validator.js","sourceRoot":"","sources":["../../src/functional-validator.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,OAAgB;IACzE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAErC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YAC7B,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAErF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAEnB,OAAO;QACL,MAAM,EAAE,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QACpE,iBAAiB;QACjB,aAAa;QACb,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type { ImplementReactComponentCommand, ImplementReactComponentEvents, } from './commands/implement-react-component.js';
2
+ export { commandHandler as implementReactComponentCommandHandler } from './commands/implement-react-component.js';
3
+ export type { ComponentTask, Job } from './types.js';
4
+ export declare const COMMANDS: import("@auto-engineer/message-bus").UnifiedCommandHandler<Readonly<{
5
+ type: string;
6
+ data: Readonly<Record<string, unknown>>;
7
+ timestamp?: Date;
8
+ requestId?: string;
9
+ correlationId?: string;
10
+ }>>[];
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,IAAI,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAClH,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAGrD,eAAO,MAAM,QAAQ;;;;;;KAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { commandHandler as implementReactComponentCommandHandler } from './commands/implement-react-component.js';
2
+ import { commandHandler } from './commands/implement-react-component.js';
3
+ export const COMMANDS = [commandHandler];
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,IAAI,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAGlH,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function connectMcpClient(config: {
2
+ baseUrl: string;
3
+ }): Promise<{
4
+ listComponents(): Promise<string>;
5
+ getStoryUrl(exportName: string, absoluteStoryPath: string): Promise<string>;
6
+ getUiBuildingInstructions(): Promise<string>;
7
+ getDocumentation(id: string): Promise<string>;
8
+ close: () => Promise<void>;
9
+ }>;
10
+ //# sourceMappingURL=mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/mcp-client.ts"],"names":[],"mappings":"AA6BA,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;sBAItC,OAAO,CAAC,MAAM,CAAC;4BAGT,MAAM,qBAAqB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iCAK9C,OAAO,CAAC,MAAM,CAAC;yBAGvB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iBArB1C,OAAO,CAAC,IAAI,CAAC;GA0BzB"}
@@ -0,0 +1,43 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
3
+ async function connectToMcp(baseUrl) {
4
+ const url = new URL(`${baseUrl}/mcp`);
5
+ const transport = new StreamableHTTPClientTransport(url);
6
+ const client = new Client({ name: 'react-component-implementer', version: '1.0.0' });
7
+ await client.connect(transport);
8
+ return {
9
+ async callTool(name, args) {
10
+ const result = await client.callTool({ name, arguments: args });
11
+ const castResult = result;
12
+ const textContent = castResult.content.find((c) => c.type === 'text');
13
+ if (!textContent || typeof textContent.text !== 'string') {
14
+ throw new Error(`No text content in response for tool: ${name}`);
15
+ }
16
+ return textContent.text;
17
+ },
18
+ close() {
19
+ return client.close();
20
+ },
21
+ };
22
+ }
23
+ export async function connectMcpClient(config) {
24
+ const connection = await connectToMcp(config.baseUrl);
25
+ return {
26
+ async listComponents() {
27
+ return connection.callTool('list-all-documentation', {});
28
+ },
29
+ async getStoryUrl(exportName, absoluteStoryPath) {
30
+ return connection.callTool('preview-stories', {
31
+ stories: [{ exportName, absoluteStoryPath }],
32
+ });
33
+ },
34
+ async getUiBuildingInstructions() {
35
+ return connection.callTool('get-storybook-story-instructions', {});
36
+ },
37
+ async getDocumentation(id) {
38
+ return connection.callTool('get-documentation', { id });
39
+ },
40
+ close: connection.close.bind(connection),
41
+ };
42
+ }
43
+ //# sourceMappingURL=mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAMnG,KAAK,UAAU,YAAY,CAAC,OAAe;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACrF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA6B;YACxD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,MAAwB,CAAC;YAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,WAAW,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,KAAK;YACH,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAA2B;IAChE,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEtD,OAAO;QACL,KAAK,CAAC,cAAc;YAClB,OAAO,UAAU,CAAC,QAAQ,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAE,iBAAyB;YAC7D,OAAO,UAAU,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBAC5C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,yBAAyB;YAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,EAAU;YAC/B,OAAO,UAAU,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface TypeCheckResult {
2
+ passed: boolean;
3
+ errors: string[];
4
+ }
5
+ export declare function checkTypes(filePaths: string[], cwd: string): TypeCheckResult;
6
+ //# sourceMappingURL=type-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-checker.d.ts","sourceRoot":"","sources":["../../src/type-checker.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAWD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CA8B5E"}
@@ -0,0 +1,36 @@
1
+ import { execSync } from 'node:child_process';
2
+ import path from 'node:path';
3
+ function getExecOutput(error) {
4
+ if (typeof error !== 'object' || error === null) {
5
+ return { stdout: '', stderr: '' };
6
+ }
7
+ const stdout = 'stdout' in error && typeof error.stdout === 'string' ? error.stdout : '';
8
+ const stderr = 'stderr' in error && typeof error.stderr === 'string' ? error.stderr : '';
9
+ return { stdout, stderr };
10
+ }
11
+ export function checkTypes(filePaths, cwd) {
12
+ let stdout = '';
13
+ let stderr = '';
14
+ try {
15
+ stdout = execSync('pnpm type-check', { encoding: 'utf-8', cwd });
16
+ }
17
+ catch (error) {
18
+ const output = getExecOutput(error);
19
+ stdout = output.stdout;
20
+ stderr = output.stderr;
21
+ }
22
+ const combined = [stdout, stderr].join('\n');
23
+ const lines = combined.split('\n');
24
+ // tsc outputs relative paths (e.g. "src/components/ui/logo-text.tsx(3,1): error TS...")
25
+ // Convert absolute filePaths to relative (from cwd) for matching
26
+ const relativePaths = filePaths.map((fp) => path.relative(cwd, fp));
27
+ const errors = lines.filter((line) => relativePaths.some((rp) => line.includes(rp)));
28
+ console.log('Relative paths checked for type errors:', relativePaths);
29
+ console.log('Type check output lines:', lines);
30
+ console.log('Filtered type errors:', errors);
31
+ if (errors.length === 0) {
32
+ return { passed: true, errors: [] };
33
+ }
34
+ return { passed: false, errors };
35
+ }
36
+ //# sourceMappingURL=type-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-checker.js","sourceRoot":"","sources":["../../src/type-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,MAAM,MAAM,GAAG,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAmB,EAAE,GAAW;IACzD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnC,wFAAwF;IACxF,iEAAiE;IACjE,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErF,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,aAAa,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface ComponentTask {
2
+ title: string;
3
+ description: string;
4
+ type: string;
5
+ componentId: string;
6
+ implementation: string;
7
+ acceptanceCriteria: string[];
8
+ prompt: string;
9
+ storybookPath: string;
10
+ files: {
11
+ create: string[];
12
+ modify: string[];
13
+ };
14
+ }
15
+ export interface Job {
16
+ id: string;
17
+ dependsOn: string[];
18
+ target: string;
19
+ payload: ComponentTask;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { LanguageModel } from 'ai';
2
+ import type { Browser } from 'playwright';
3
+ export interface VisualFeedback {
4
+ score: number;
5
+ passed: boolean;
6
+ feedback: string;
7
+ }
8
+ export interface VisualComponentInfo {
9
+ name: string;
10
+ description: string;
11
+ }
12
+ export interface DesignReference {
13
+ screenshots: Array<{
14
+ name: string;
15
+ screenshot: Buffer;
16
+ }>;
17
+ instructions: string;
18
+ }
19
+ export declare function evaluateVisual(storyUrl: string, component: VisualComponentInfo, browser: Browser, model: LanguageModel, designReference?: DesignReference): Promise<VisualFeedback>;
20
+ //# sourceMappingURL=visual-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-evaluator.d.ts","sourceRoot":"","sources":["../../src/visual-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,aAAa,EACpB,eAAe,CAAC,EAAE,eAAe,GAChC,OAAO,CAAC,cAAc,CAAC,CAuEzB"}
@@ -0,0 +1,70 @@
1
+ import { generateText } from 'ai';
2
+ export async function evaluateVisual(storyUrl, component, browser, model, designReference) {
3
+ const page = await browser.newPage();
4
+ await page.goto(storyUrl);
5
+ await page.waitForSelector('#storybook-root');
6
+ const screenshotBuffer = await page.screenshot();
7
+ await page.close();
8
+ const content = [];
9
+ if (designReference) {
10
+ for (const ref of designReference.screenshots) {
11
+ content.push({ type: 'image', image: ref.screenshot, mediaType: 'image/png' });
12
+ content.push({ type: 'text', text: `Reference component: ${ref.name}` });
13
+ }
14
+ }
15
+ content.push({ type: 'image', image: screenshotBuffer, mediaType: 'image/png' });
16
+ if (designReference) {
17
+ content.push({
18
+ type: 'text',
19
+ text: `The images above are reference screenshots from the existing component library, followed by the component under review.
20
+
21
+ Design guidelines:
22
+ ${designReference.instructions}
23
+
24
+ Evaluate this screenshot of a "${component.name}" component (${component.description}).
25
+
26
+ Rate on a scale of 1-10 how well it matches the design system shown in the reference components and follows the design guidelines.
27
+
28
+ Respond with JSON only: { "score": N, "feedback": "..." }`,
29
+ });
30
+ }
31
+ else {
32
+ content.push({
33
+ type: 'text',
34
+ text: `Evaluate this screenshot of a "${component.name}" component (${component.description}).
35
+
36
+ Rate the following on a scale of 1-10:
37
+ - Visual quality and aesthetics
38
+ - Layout correctness
39
+ - Consistency with modern design systems
40
+ - Component renders correctly and looks professional
41
+
42
+ Respond with JSON only: { "score": N, "feedback": "..." }`,
43
+ });
44
+ }
45
+ const result = await generateText({
46
+ model,
47
+ messages: [
48
+ {
49
+ role: 'user',
50
+ content,
51
+ },
52
+ ],
53
+ });
54
+ try {
55
+ const parsed = JSON.parse(result.text);
56
+ return {
57
+ score: parsed.score,
58
+ passed: parsed.score >= 7,
59
+ feedback: parsed.feedback,
60
+ };
61
+ }
62
+ catch {
63
+ return {
64
+ score: 5,
65
+ passed: false,
66
+ feedback: result.text,
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=visual-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-evaluator.js","sourceRoot":"","sources":["../../src/visual-evaluator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAmBlC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,SAA8B,EAC9B,OAAgB,EAChB,KAAoB,EACpB,eAAiC;IAEjC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IACjD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAEnB,MAAM,OAAO,GAAqG,EAAE,CAAC;IAErH,IAAI,eAAe,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;IAEjF,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;;;EAGV,eAAe,CAAC,YAAY;;iCAEG,SAAS,CAAC,IAAI,gBAAgB,SAAS,CAAC,WAAW;;;;0DAI1B;SACrD,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,kCAAkC,SAAS,CAAC,IAAI,gBAAgB,SAAS,CAAC,WAAW;;;;;;;;0DAQvC;SACrD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,KAAK;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO;aACR;SACF;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAwC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5E,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,MAAM,CAAC,IAAI;SACtB,CAAC;IACJ,CAAC;AACH,CAAC"}