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.
- package/dist/analysis/analysisUtils.d.ts +36 -0
- package/dist/analysis/analysisUtils.js +284 -0
- package/dist/analysis/analysisUtils.js.map +1 -0
- package/dist/db.d.ts +68 -0
- package/dist/db.js +259 -0
- package/dist/db.js.map +1 -1
- package/dist/image/dimensions.d.ts +10 -0
- package/dist/image/dimensions.js +53 -0
- package/dist/image/dimensions.js.map +1 -0
- package/dist/import/yamlImporter.d.ts +22 -0
- package/dist/import/yamlImporter.js +227 -0
- package/dist/import/yamlImporter.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/layout/autoLayout.d.ts +19 -0
- package/dist/layout/autoLayout.js +85 -0
- package/dist/layout/autoLayout.js.map +1 -0
- package/dist/layout/semanticLayout.d.ts +24 -0
- package/dist/layout/semanticLayout.js +233 -0
- package/dist/layout/semanticLayout.js.map +1 -0
- package/dist/server.js +26 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/addRegion.d.ts +69 -0
- package/dist/tools/addRegion.js +39 -0
- package/dist/tools/addRegion.js.map +1 -0
- package/dist/tools/autoLayout.d.ts +27 -0
- package/dist/tools/autoLayout.js +52 -0
- package/dist/tools/autoLayout.js.map +1 -0
- package/dist/tools/captureScreen.d.ts +48 -0
- package/dist/tools/captureScreen.js +135 -0
- package/dist/tools/captureScreen.js.map +1 -0
- package/dist/tools/cloneProject.d.ts +21 -0
- package/dist/tools/cloneProject.js +21 -0
- package/dist/tools/cloneProject.js.map +1 -0
- package/dist/tools/createScreen.d.ts +36 -0
- package/dist/tools/createScreen.js +26 -0
- package/dist/tools/createScreen.js.map +1 -0
- package/dist/tools/deleteScreen.d.ts +24 -0
- package/dist/tools/deleteScreen.js +22 -0
- package/dist/tools/deleteScreen.js.map +1 -0
- package/dist/tools/generateSpec.d.ts +26 -0
- package/dist/tools/generateSpec.js +336 -0
- package/dist/tools/generateSpec.js.map +1 -0
- package/dist/tools/healthCheck.d.ts +8 -0
- package/dist/tools/healthCheck.js +16 -0
- package/dist/tools/healthCheck.js.map +1 -0
- package/dist/tools/importYaml.d.ts +33 -0
- package/dist/tools/importYaml.js +97 -0
- package/dist/tools/importYaml.js.map +1 -0
- package/dist/tools/ingestCodebase.d.ts +27 -0
- package/dist/tools/ingestCodebase.js +516 -0
- package/dist/tools/ingestCodebase.js.map +1 -0
- package/dist/tools/removeRegion.d.ts +27 -0
- package/dist/tools/removeRegion.js +23 -0
- package/dist/tools/removeRegion.js.map +1 -0
- package/dist/tools/smartLayout.d.ts +30 -0
- package/dist/tools/smartLayout.js +74 -0
- package/dist/tools/smartLayout.js.map +1 -0
- package/dist/tools/updateEdge.d.ts +39 -0
- package/dist/tools/updateEdge.js +50 -0
- package/dist/tools/updateEdge.js.map +1 -0
- package/dist/tools/updateRegion.d.ts +72 -0
- package/dist/tools/updateRegion.js +35 -0
- package/dist/tools/updateRegion.js.map +1 -0
- package/dist/tools/updateScreen.d.ts +39 -0
- package/dist/tools/updateScreen.js +28 -0
- package/dist/tools/updateScreen.js.map +1 -0
- package/dist/tools/uploadImage.d.ts +27 -0
- package/dist/tools/uploadImage.js +55 -0
- package/dist/tools/uploadImage.js.map +1 -0
- package/dist/types.d.ts +6 -6
- 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IACpG,QAAQ,EAAE,CAAC;SACT,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,oCAAoC,CAAC;IAChD,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IACzF,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACrG,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAyC;IAClF,eAAe;IACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACzE,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kDAAkD,EAAE,CAAC;YAC9F,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACJ,wDAAwD;QACxD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAEhD,iBAAiB;QACjB,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;SACxD,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAErC,kBAAkB;QAClB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAExD,4CAA4C;QAC5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvB,mBAAmB;gBACnB,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACP,oBAAoB;gBACpB,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACZ,OAAO;wBACN,OAAO,EAAE;4BACR;gCACC,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,aAAa,IAAI,CAAC,OAAO,uDAAuD;6BACtF;yBACD;wBACD,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;QAED,kBAAkB;QAClB,IAAI,gBAAwB,CAAC;QAE7B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,sBAAsB,IAAI,CAAC,QAAQ,EAAE;yBAC3C;qBACD;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YACD,gBAAgB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACP,mCAAmC;YACnC,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;gBACxC,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAEtB,oCAAoC;QACpC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC;QAC9D,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC;QAEjE,kCAAkC;QAClC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,cAAc,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE1E,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gFAAgF;qBACtF;iBACD;gBACD,OAAO,EAAE,IAAI;aACb,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC3E;aACD;SACD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,8BAA+B,KAAe,CAAC,OAAO,EAAE;iBAC9D;aACD;YACD,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;AACF,CAAC"}
|
|
@@ -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
|
+
}>;
|