flowspec-mcp 2.1.1 → 3.0.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.
Files changed (71) hide show
  1. package/dist/analysis/analysisUtils.d.ts +36 -0
  2. package/dist/analysis/analysisUtils.js +284 -0
  3. package/dist/analysis/analysisUtils.js.map +1 -0
  4. package/dist/db.d.ts +68 -0
  5. package/dist/db.js +259 -0
  6. package/dist/db.js.map +1 -1
  7. package/dist/image/dimensions.d.ts +10 -0
  8. package/dist/image/dimensions.js +53 -0
  9. package/dist/image/dimensions.js.map +1 -0
  10. package/dist/import/yamlImporter.d.ts +22 -0
  11. package/dist/import/yamlImporter.js +227 -0
  12. package/dist/import/yamlImporter.js.map +1 -0
  13. package/dist/index.js +0 -0
  14. package/dist/layout/autoLayout.d.ts +19 -0
  15. package/dist/layout/autoLayout.js +85 -0
  16. package/dist/layout/autoLayout.js.map +1 -0
  17. package/dist/layout/semanticLayout.d.ts +24 -0
  18. package/dist/layout/semanticLayout.js +233 -0
  19. package/dist/layout/semanticLayout.js.map +1 -0
  20. package/dist/server.js +26 -2
  21. package/dist/server.js.map +1 -1
  22. package/dist/tools/addRegion.d.ts +69 -0
  23. package/dist/tools/addRegion.js +39 -0
  24. package/dist/tools/addRegion.js.map +1 -0
  25. package/dist/tools/autoLayout.d.ts +27 -0
  26. package/dist/tools/autoLayout.js +52 -0
  27. package/dist/tools/autoLayout.js.map +1 -0
  28. package/dist/tools/captureScreen.d.ts +48 -0
  29. package/dist/tools/captureScreen.js +135 -0
  30. package/dist/tools/captureScreen.js.map +1 -0
  31. package/dist/tools/cloneProject.d.ts +21 -0
  32. package/dist/tools/cloneProject.js +21 -0
  33. package/dist/tools/cloneProject.js.map +1 -0
  34. package/dist/tools/createScreen.d.ts +36 -0
  35. package/dist/tools/createScreen.js +26 -0
  36. package/dist/tools/createScreen.js.map +1 -0
  37. package/dist/tools/deleteScreen.d.ts +24 -0
  38. package/dist/tools/deleteScreen.js +22 -0
  39. package/dist/tools/deleteScreen.js.map +1 -0
  40. package/dist/tools/generateSpec.d.ts +26 -0
  41. package/dist/tools/generateSpec.js +336 -0
  42. package/dist/tools/generateSpec.js.map +1 -0
  43. package/dist/tools/healthCheck.d.ts +8 -0
  44. package/dist/tools/healthCheck.js +16 -0
  45. package/dist/tools/healthCheck.js.map +1 -0
  46. package/dist/tools/importYaml.d.ts +33 -0
  47. package/dist/tools/importYaml.js +97 -0
  48. package/dist/tools/importYaml.js.map +1 -0
  49. package/dist/tools/ingestCodebase.d.ts +27 -0
  50. package/dist/tools/ingestCodebase.js +516 -0
  51. package/dist/tools/ingestCodebase.js.map +1 -0
  52. package/dist/tools/removeRegion.d.ts +27 -0
  53. package/dist/tools/removeRegion.js +23 -0
  54. package/dist/tools/removeRegion.js.map +1 -0
  55. package/dist/tools/smartLayout.d.ts +30 -0
  56. package/dist/tools/smartLayout.js +74 -0
  57. package/dist/tools/smartLayout.js.map +1 -0
  58. package/dist/tools/updateEdge.d.ts +39 -0
  59. package/dist/tools/updateEdge.js +50 -0
  60. package/dist/tools/updateEdge.js.map +1 -0
  61. package/dist/tools/updateRegion.d.ts +72 -0
  62. package/dist/tools/updateRegion.js +35 -0
  63. package/dist/tools/updateRegion.js.map +1 -0
  64. package/dist/tools/updateScreen.d.ts +39 -0
  65. package/dist/tools/updateScreen.js +28 -0
  66. package/dist/tools/updateScreen.js.map +1 -0
  67. package/dist/tools/uploadImage.d.ts +27 -0
  68. package/dist/tools/uploadImage.js +55 -0
  69. package/dist/tools/uploadImage.js.map +1 -0
  70. package/dist/types.d.ts +6 -6
  71. package/package.json +2 -1
@@ -0,0 +1,135 @@
1
+ import { z } from 'zod';
2
+ import { uploadImageViaApi } from '../db.js';
3
+ import { detectImageDimensions } from '../image/dimensions.js';
4
+ export const captureScreenSchema = z.object({
5
+ url: z.string().describe('URL to screenshot (http:// or https://)'),
6
+ selector: z.string().optional().describe('CSS selector for specific element (full page if omitted)'),
7
+ viewport: z
8
+ .object({
9
+ width: z.number(),
10
+ height: z.number()
11
+ })
12
+ .optional()
13
+ .describe('Viewport size (default: 1920x1080)'),
14
+ waitFor: z
15
+ .string()
16
+ .optional()
17
+ .describe('CSS selector to wait for before screenshot, or timeout in ms (e.g., "3000")'),
18
+ fullPage: z.boolean().optional().default(false).describe('Capture full page height (default: false)')
19
+ });
20
+ export async function handleCaptureScreen(args) {
21
+ // Validate URL
22
+ if (!args.url.startsWith('http://') && !args.url.startsWith('https://')) {
23
+ return {
24
+ content: [{ type: 'text', text: `Invalid URL. Must start with http:// or https://` }],
25
+ isError: true
26
+ };
27
+ }
28
+ let browser;
29
+ try {
30
+ // Dynamically import playwright (cloud-only dependency)
31
+ const { chromium } = await import('playwright');
32
+ // Launch browser
33
+ browser = await chromium.launch({ headless: true });
34
+ const context = await browser.newContext({
35
+ viewport: args.viewport ?? { width: 1920, height: 1080 }
36
+ });
37
+ const page = await context.newPage();
38
+ // Navigate to URL
39
+ await page.goto(args.url, { waitUntil: 'networkidle' });
40
+ // Wait for selector or timeout if specified
41
+ if (args.waitFor) {
42
+ const timeoutMs = parseInt(args.waitFor, 10);
43
+ if (!isNaN(timeoutMs)) {
44
+ // Wait for timeout
45
+ await page.waitForTimeout(timeoutMs);
46
+ }
47
+ else {
48
+ // Wait for selector
49
+ try {
50
+ await page.waitForSelector(args.waitFor, { timeout: 10000 });
51
+ }
52
+ catch (e) {
53
+ return {
54
+ content: [
55
+ {
56
+ type: 'text',
57
+ text: `Selector "${args.waitFor}" not found within 10s. Screenshot may be incomplete.`
58
+ }
59
+ ],
60
+ isError: true
61
+ };
62
+ }
63
+ }
64
+ }
65
+ // Take screenshot
66
+ let screenshotBuffer;
67
+ if (args.selector) {
68
+ // Screenshot specific element
69
+ const element = await page.$(args.selector);
70
+ if (!element) {
71
+ return {
72
+ content: [
73
+ {
74
+ type: 'text',
75
+ text: `Element not found: ${args.selector}`
76
+ }
77
+ ],
78
+ isError: true
79
+ };
80
+ }
81
+ screenshotBuffer = await element.screenshot({ type: 'png' });
82
+ }
83
+ else {
84
+ // Screenshot full page or viewport
85
+ screenshotBuffer = await page.screenshot({
86
+ type: 'png',
87
+ fullPage: args.fullPage
88
+ });
89
+ }
90
+ await browser.close();
91
+ // Detect dimensions from screenshot
92
+ const detected = detectImageDimensions(new Uint8Array(screenshotBuffer));
93
+ const width = detected?.width ?? args.viewport?.width ?? 1920;
94
+ const height = detected?.height ?? args.viewport?.height ?? 1080;
95
+ // Upload to Vercel Blob (via API)
96
+ const base64Data = screenshotBuffer.toString('base64');
97
+ const filename = `screenshot_${Date.now()}.png`;
98
+ const result = await uploadImageViaApi(base64Data, filename, 'image/png');
99
+ if (!result) {
100
+ return {
101
+ content: [
102
+ {
103
+ type: 'text',
104
+ text: `Failed to upload screenshot. In cloud mode, image upload is not yet supported.`
105
+ }
106
+ ],
107
+ isError: true
108
+ };
109
+ }
110
+ // Return result in same format as uploadImage
111
+ return {
112
+ content: [
113
+ {
114
+ type: 'text',
115
+ text: JSON.stringify({ url: result.url, width, height, filename }, null, 2)
116
+ }
117
+ ]
118
+ };
119
+ }
120
+ catch (error) {
121
+ if (browser) {
122
+ await browser.close();
123
+ }
124
+ return {
125
+ content: [
126
+ {
127
+ type: 'text',
128
+ text: `Screenshot capture failed: ${error.message}`
129
+ }
130
+ ],
131
+ isError: true
132
+ };
133
+ }
134
+ }
135
+ //# sourceMappingURL=captureScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureScreen.js","sourceRoot":"","sources":["../../src/tools/captureScreen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ export declare const cloneProjectSchema: z.ZodObject<{
3
+ projectId: z.ZodString;
4
+ }, "strip", z.ZodTypeAny, {
5
+ projectId: string;
6
+ }, {
7
+ projectId: string;
8
+ }>;
9
+ export declare function handleCloneProject(args: z.infer<typeof cloneProjectSchema>): Promise<{
10
+ content: {
11
+ type: "text";
12
+ text: string;
13
+ }[];
14
+ isError: boolean;
15
+ } | {
16
+ content: {
17
+ type: "text";
18
+ text: string;
19
+ }[];
20
+ isError?: undefined;
21
+ }>;
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { cloneProjectViaApi } from '../db.js';
3
+ export const cloneProjectSchema = z.object({
4
+ projectId: z.string().describe('UUID of the project to clone'),
5
+ });
6
+ export async function handleCloneProject(args) {
7
+ const clonedId = await cloneProjectViaApi(args.projectId);
8
+ if (!clonedId) {
9
+ return {
10
+ content: [{ type: 'text', text: `Failed to clone — source project not found: ${args.projectId}` }],
11
+ isError: true,
12
+ };
13
+ }
14
+ return {
15
+ content: [{
16
+ type: 'text',
17
+ text: `Cloned project (new id: ${clonedId})`,
18
+ }],
19
+ };
20
+ }
21
+ //# sourceMappingURL=cloneProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloneProject.js","sourceRoot":"","sources":["../../src/tools/cloneProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC/D,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAwC;IAC/E,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,+CAA+C,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAC3G,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,2BAA2B,QAAQ,GAAG;aAC7C,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ export declare const createScreenSchema: z.ZodObject<{
3
+ projectId: z.ZodString;
4
+ name: z.ZodString;
5
+ imageUrl: z.ZodOptional<z.ZodString>;
6
+ imageWidth: z.ZodOptional<z.ZodNumber>;
7
+ imageHeight: z.ZodOptional<z.ZodNumber>;
8
+ imageFilename: z.ZodOptional<z.ZodString>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ name: string;
11
+ projectId: string;
12
+ imageUrl?: string | undefined;
13
+ imageWidth?: number | undefined;
14
+ imageHeight?: number | undefined;
15
+ imageFilename?: string | undefined;
16
+ }, {
17
+ name: string;
18
+ projectId: string;
19
+ imageUrl?: string | undefined;
20
+ imageWidth?: number | undefined;
21
+ imageHeight?: number | undefined;
22
+ imageFilename?: string | undefined;
23
+ }>;
24
+ export declare function handleCreateScreen(args: z.infer<typeof createScreenSchema>): Promise<{
25
+ content: {
26
+ type: "text";
27
+ text: string;
28
+ }[];
29
+ isError: boolean;
30
+ } | {
31
+ content: {
32
+ type: "text";
33
+ text: string;
34
+ }[];
35
+ isError?: undefined;
36
+ }>;
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { createScreenViaApi } from '../db.js';
3
+ export const createScreenSchema = z.object({
4
+ projectId: z.string().describe('UUID of the project'),
5
+ name: z.string().describe('Screen name (e.g. "Login Page")'),
6
+ imageUrl: z.string().optional().describe('URL of the wireframe image (optional for skeleton screens)'),
7
+ imageWidth: z.number().optional().describe('Image width in pixels (default: 1920)'),
8
+ imageHeight: z.number().optional().describe('Image height in pixels (default: 1080)'),
9
+ imageFilename: z.string().optional().describe('Original filename of the image'),
10
+ });
11
+ export async function handleCreateScreen(args) {
12
+ const screen = await createScreenViaApi(args.projectId, args.name, args.imageUrl, args.imageWidth, args.imageHeight, args.imageFilename);
13
+ if (!screen) {
14
+ return {
15
+ content: [{ type: 'text', text: `Failed to create screen — project not found: ${args.projectId}` }],
16
+ isError: true,
17
+ };
18
+ }
19
+ return {
20
+ content: [{
21
+ type: 'text',
22
+ text: `Created screen **${screen.name}** (id: ${screen.id})${args.imageUrl ? ` with image` : ' (no image)'}`,
23
+ }],
24
+ };
25
+ }
26
+ //# sourceMappingURL=createScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createScreen.js","sourceRoot":"","sources":["../../src/tools/createScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IACtG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACrF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CAChF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAwC;IAC/E,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,CACnB,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gDAAgD,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAC5G,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,oBAAoB,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE;aAC7G,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export declare const deleteScreenSchema: z.ZodObject<{
3
+ projectId: z.ZodString;
4
+ screenId: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ projectId: string;
7
+ screenId: string;
8
+ }, {
9
+ projectId: string;
10
+ screenId: string;
11
+ }>;
12
+ export declare function handleDeleteScreen(args: z.infer<typeof deleteScreenSchema>): Promise<{
13
+ content: {
14
+ type: "text";
15
+ text: string;
16
+ }[];
17
+ isError: boolean;
18
+ } | {
19
+ content: {
20
+ type: "text";
21
+ text: string;
22
+ }[];
23
+ isError?: undefined;
24
+ }>;
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { deleteScreenViaApi } from '../db.js';
3
+ export const deleteScreenSchema = z.object({
4
+ projectId: z.string().describe('UUID of the project'),
5
+ screenId: z.string().describe('UUID of the screen to delete'),
6
+ });
7
+ export async function handleDeleteScreen(args) {
8
+ const success = await deleteScreenViaApi(args.projectId, args.screenId);
9
+ if (!success) {
10
+ return {
11
+ content: [{ type: 'text', text: `Failed to delete screen — project or screen not found` }],
12
+ isError: true,
13
+ };
14
+ }
15
+ return {
16
+ content: [{
17
+ type: 'text',
18
+ text: `Deleted screen ${args.screenId}`,
19
+ }],
20
+ };
21
+ }
22
+ //# sourceMappingURL=deleteScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteScreen.js","sourceRoot":"","sources":["../../src/tools/deleteScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAwC;IAC/E,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAExE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uDAAuD,EAAE,CAAC;YACnG,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,kBAAkB,IAAI,CAAC,QAAQ,EAAE;aACxC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ export declare const generateSpecSchema: z.ZodObject<{
3
+ projectId: z.ZodString;
4
+ format: z.ZodDefault<z.ZodEnum<["markdown", "json"]>>;
5
+ sections: z.ZodOptional<z.ZodArray<z.ZodEnum<["db_schema", "api_contracts", "component_tree", "validation_rules", "all"]>, "many">>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ projectId: string;
8
+ format: "markdown" | "json";
9
+ sections?: ("db_schema" | "api_contracts" | "component_tree" | "validation_rules" | "all")[] | undefined;
10
+ }, {
11
+ projectId: string;
12
+ format?: "markdown" | "json" | undefined;
13
+ sections?: ("db_schema" | "api_contracts" | "component_tree" | "validation_rules" | "all")[] | undefined;
14
+ }>;
15
+ export declare function handleGenerateSpec(args: z.infer<typeof generateSpecSchema>): Promise<{
16
+ content: {
17
+ type: "text";
18
+ text: string;
19
+ }[];
20
+ isError: boolean;
21
+ } | {
22
+ content: {
23
+ type: "text";
24
+ text: string;
25
+ }[];
26
+ }>;