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,233 @@
|
|
|
1
|
+
import nlp from 'compromise';
|
|
2
|
+
// ─── Layout Regions (9-grid system for infinite canvas) ─────────
|
|
3
|
+
const LAYOUT_REGIONS = {
|
|
4
|
+
'top-left': { x: 0.05, y: 0.05 },
|
|
5
|
+
'top-center': { x: 0.4, y: 0.05 },
|
|
6
|
+
'top-right': { x: 0.7, y: 0.05 },
|
|
7
|
+
'center-left': { x: 0.05, y: 0.4 },
|
|
8
|
+
'center': { x: 0.4, y: 0.4 },
|
|
9
|
+
'center-right': { x: 0.7, y: 0.4 },
|
|
10
|
+
'bottom-left': { x: 0.05, y: 0.7 },
|
|
11
|
+
'bottom-center': { x: 0.4, y: 0.7 },
|
|
12
|
+
'bottom-right': { x: 0.7, y: 0.7 }
|
|
13
|
+
};
|
|
14
|
+
// Aliases for natural language
|
|
15
|
+
const REGION_ALIASES = {
|
|
16
|
+
'top': 'top-center',
|
|
17
|
+
'bottom': 'bottom-center',
|
|
18
|
+
'left': 'center-left',
|
|
19
|
+
'right': 'center-right',
|
|
20
|
+
'upper-left': 'top-left',
|
|
21
|
+
'upper-right': 'top-right',
|
|
22
|
+
'lower-left': 'bottom-left',
|
|
23
|
+
'lower-right': 'bottom-right',
|
|
24
|
+
'middle': 'center'
|
|
25
|
+
};
|
|
26
|
+
// ─── Natural Language Parsing ────────────────────────────────────
|
|
27
|
+
export function parseNaturalLanguageLayout(command, nodes, canvasBounds) {
|
|
28
|
+
const doc = nlp(command.toLowerCase());
|
|
29
|
+
// Extract action verb (move, arrange, cluster, position)
|
|
30
|
+
const verbs = doc.verbs().out('array');
|
|
31
|
+
const action = verbs[0] ?? 'move';
|
|
32
|
+
// Extract target nodes (by label matching)
|
|
33
|
+
const nodeMatches = extractNodeReferences(command, nodes);
|
|
34
|
+
if (nodeMatches.length === 0) {
|
|
35
|
+
return {
|
|
36
|
+
error: `No matching nodes found. Command: "${command}". Try specifying node labels explicitly (e.g., "move user auth nodes to top-right").`
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Extract target region
|
|
40
|
+
const region = extractTargetRegion(command);
|
|
41
|
+
if (!region) {
|
|
42
|
+
return {
|
|
43
|
+
error: `No target region found. Supported regions: ${Object.keys(LAYOUT_REGIONS).join(', ')}. Command: "${command}".`
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Extract arrangement style (vertical, horizontal, grid, cluster)
|
|
47
|
+
const arrangement = extractArrangement(command);
|
|
48
|
+
const direction = extractDirection(command);
|
|
49
|
+
// Convert region to absolute coordinates
|
|
50
|
+
const relativePos = LAYOUT_REGIONS[region];
|
|
51
|
+
const targetBounds = {
|
|
52
|
+
x: relativePos.x * canvasBounds.width,
|
|
53
|
+
y: relativePos.y * canvasBounds.height,
|
|
54
|
+
width: canvasBounds.width * 0.25, // 25% of canvas for layout region
|
|
55
|
+
height: canvasBounds.height * 0.25
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
nodeIds: nodeMatches,
|
|
59
|
+
targetBounds,
|
|
60
|
+
arrangement,
|
|
61
|
+
direction
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function extractNodeReferences(command, nodes) {
|
|
65
|
+
const matches = [];
|
|
66
|
+
// Extract potential node label keywords (nouns, adjectives)
|
|
67
|
+
const doc = nlp(command);
|
|
68
|
+
const keywords = [
|
|
69
|
+
...doc.nouns().out('array'),
|
|
70
|
+
...doc.adjectives().out('array')
|
|
71
|
+
];
|
|
72
|
+
// Match keywords against node labels (fuzzy matching)
|
|
73
|
+
for (const node of nodes) {
|
|
74
|
+
const label = (node.data?.label ?? '').toLowerCase();
|
|
75
|
+
if (!label)
|
|
76
|
+
continue;
|
|
77
|
+
// Check if any keyword appears in label
|
|
78
|
+
for (const keyword of keywords) {
|
|
79
|
+
if (label.includes(keyword) || keyword.includes(label)) {
|
|
80
|
+
matches.push(node.id);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return [...new Set(matches)]; // Deduplicate
|
|
86
|
+
}
|
|
87
|
+
function extractTargetRegion(command) {
|
|
88
|
+
const lowerCommand = command.toLowerCase();
|
|
89
|
+
// Check for explicit region names
|
|
90
|
+
for (const [alias, canonical] of Object.entries(REGION_ALIASES)) {
|
|
91
|
+
if (lowerCommand.includes(alias)) {
|
|
92
|
+
return canonical;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const region of Object.keys(LAYOUT_REGIONS)) {
|
|
96
|
+
if (lowerCommand.includes(region)) {
|
|
97
|
+
return region;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Pattern matching: "to the <direction>"
|
|
101
|
+
if (lowerCommand.includes('to the top'))
|
|
102
|
+
return 'top-center';
|
|
103
|
+
if (lowerCommand.includes('to the bottom'))
|
|
104
|
+
return 'bottom-center';
|
|
105
|
+
if (lowerCommand.includes('to the left'))
|
|
106
|
+
return 'center-left';
|
|
107
|
+
if (lowerCommand.includes('to the right'))
|
|
108
|
+
return 'center-right';
|
|
109
|
+
// Pattern matching: "in the <region>"
|
|
110
|
+
if (lowerCommand.includes('in the top left'))
|
|
111
|
+
return 'top-left';
|
|
112
|
+
if (lowerCommand.includes('in the top right'))
|
|
113
|
+
return 'top-right';
|
|
114
|
+
if (lowerCommand.includes('in the bottom left'))
|
|
115
|
+
return 'bottom-left';
|
|
116
|
+
if (lowerCommand.includes('in the bottom right'))
|
|
117
|
+
return 'bottom-right';
|
|
118
|
+
if (lowerCommand.includes('in the center'))
|
|
119
|
+
return 'center';
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
function extractArrangement(command) {
|
|
123
|
+
const lowerCommand = command.toLowerCase();
|
|
124
|
+
if (lowerCommand.includes('stack') || lowerCommand.includes('column') || lowerCommand.includes('row')) {
|
|
125
|
+
return 'stack';
|
|
126
|
+
}
|
|
127
|
+
if (lowerCommand.includes('grid')) {
|
|
128
|
+
return 'grid';
|
|
129
|
+
}
|
|
130
|
+
if (lowerCommand.includes('flow')) {
|
|
131
|
+
return 'flow';
|
|
132
|
+
}
|
|
133
|
+
if (lowerCommand.includes('cluster') || lowerCommand.includes('group')) {
|
|
134
|
+
return 'cluster';
|
|
135
|
+
}
|
|
136
|
+
// Default: stack for small groups, grid for larger
|
|
137
|
+
return 'stack';
|
|
138
|
+
}
|
|
139
|
+
function extractDirection(command) {
|
|
140
|
+
const lowerCommand = command.toLowerCase();
|
|
141
|
+
if (lowerCommand.includes('vertical') || lowerCommand.includes('vertically') || lowerCommand.includes('column')) {
|
|
142
|
+
return 'vertical';
|
|
143
|
+
}
|
|
144
|
+
if (lowerCommand.includes('horizontal') || lowerCommand.includes('horizontally') || lowerCommand.includes('row')) {
|
|
145
|
+
return 'horizontal';
|
|
146
|
+
}
|
|
147
|
+
return undefined; // Let arrangement logic decide
|
|
148
|
+
}
|
|
149
|
+
// ─── Apply Semantic Layout ───────────────────────────────────────
|
|
150
|
+
export function applySemanticLayout(nodes, edges, command) {
|
|
151
|
+
const positions = new Map();
|
|
152
|
+
const targetNodes = nodes.filter((n) => command.nodeIds.includes(n.id));
|
|
153
|
+
if (targetNodes.length === 0)
|
|
154
|
+
return positions;
|
|
155
|
+
const { targetBounds, arrangement, direction } = command;
|
|
156
|
+
switch (arrangement) {
|
|
157
|
+
case 'stack': {
|
|
158
|
+
// Stack vertically or horizontally
|
|
159
|
+
const isVertical = direction === 'vertical' || direction === undefined;
|
|
160
|
+
const spacing = 60;
|
|
161
|
+
targetNodes.forEach((node, index) => {
|
|
162
|
+
if (isVertical) {
|
|
163
|
+
positions.set(node.id, {
|
|
164
|
+
x: targetBounds.x,
|
|
165
|
+
y: targetBounds.y + index * spacing
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
positions.set(node.id, {
|
|
170
|
+
x: targetBounds.x + index * spacing,
|
|
171
|
+
y: targetBounds.y
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case 'grid': {
|
|
178
|
+
// Arrange in a grid (3 columns max)
|
|
179
|
+
const cols = Math.min(3, Math.ceil(Math.sqrt(targetNodes.length)));
|
|
180
|
+
const spacing = 80;
|
|
181
|
+
targetNodes.forEach((node, index) => {
|
|
182
|
+
const col = index % cols;
|
|
183
|
+
const row = Math.floor(index / cols);
|
|
184
|
+
positions.set(node.id, {
|
|
185
|
+
x: targetBounds.x + col * spacing,
|
|
186
|
+
y: targetBounds.y + row * spacing
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case 'flow': {
|
|
192
|
+
// Flow layout (left-to-right, wrapping)
|
|
193
|
+
const maxWidth = targetBounds.width;
|
|
194
|
+
const spacing = 70;
|
|
195
|
+
let currentX = targetBounds.x;
|
|
196
|
+
let currentY = targetBounds.y;
|
|
197
|
+
for (const node of targetNodes) {
|
|
198
|
+
positions.set(node.id, { x: currentX, y: currentY });
|
|
199
|
+
currentX += spacing;
|
|
200
|
+
if (currentX - targetBounds.x > maxWidth) {
|
|
201
|
+
currentX = targetBounds.x;
|
|
202
|
+
currentY += spacing;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case 'cluster': {
|
|
208
|
+
// Cluster in a compact circle/ellipse
|
|
209
|
+
const centerX = targetBounds.x + targetBounds.width / 2;
|
|
210
|
+
const centerY = targetBounds.y + targetBounds.height / 2;
|
|
211
|
+
const radius = Math.min(targetBounds.width, targetBounds.height) / 3;
|
|
212
|
+
targetNodes.forEach((node, index) => {
|
|
213
|
+
const angle = (index / targetNodes.length) * 2 * Math.PI;
|
|
214
|
+
positions.set(node.id, {
|
|
215
|
+
x: centerX + radius * Math.cos(angle),
|
|
216
|
+
y: centerY + radius * Math.sin(angle)
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return positions;
|
|
223
|
+
}
|
|
224
|
+
// ─── Supported Commands (for tool description) ───────────────────
|
|
225
|
+
export const SUPPORTED_COMMANDS = [
|
|
226
|
+
'move <nodes> to <region>',
|
|
227
|
+
'arrange <nodes> vertically/horizontally in <region>',
|
|
228
|
+
'cluster <nodes> in <region>',
|
|
229
|
+
'position <nodes> at <region>',
|
|
230
|
+
'stack <nodes> in <region>'
|
|
231
|
+
];
|
|
232
|
+
export const SUPPORTED_REGIONS = Object.keys(LAYOUT_REGIONS);
|
|
233
|
+
//# sourceMappingURL=semanticLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semanticLayout.js","sourceRoot":"","sources":["../../src/layout/semanticLayout.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -14,11 +14,23 @@ import { deleteNodeSchema, handleDeleteNode } from './tools/deleteNode.js';
|
|
|
14
14
|
import { createEdgeSchema, handleCreateEdge } from './tools/createEdge.js';
|
|
15
15
|
import { deleteEdgeSchema, handleDeleteEdge } from './tools/deleteEdge.js';
|
|
16
16
|
import { analyseProjectSchema, handleAnalyseProject } from './tools/analyseProject.js';
|
|
17
|
+
// v3 write tools
|
|
18
|
+
import { importYamlSchema, handleImportYaml } from './tools/importYaml.js';
|
|
19
|
+
import { autoLayoutSchema, handleAutoLayout } from './tools/autoLayout.js';
|
|
20
|
+
import { uploadImageSchema, handleUploadImage } from './tools/uploadImage.js';
|
|
21
|
+
import { createScreenSchema, handleCreateScreen } from './tools/createScreen.js';
|
|
22
|
+
import { updateScreenSchema, handleUpdateScreen } from './tools/updateScreen.js';
|
|
23
|
+
import { deleteScreenSchema, handleDeleteScreen } from './tools/deleteScreen.js';
|
|
24
|
+
import { addRegionSchema, handleAddRegion } from './tools/addRegion.js';
|
|
25
|
+
import { updateRegionSchema, handleUpdateRegion } from './tools/updateRegion.js';
|
|
26
|
+
import { removeRegionSchema, handleRemoveRegion } from './tools/removeRegion.js';
|
|
27
|
+
import { updateEdgeSchema, handleUpdateEdge } from './tools/updateEdge.js';
|
|
28
|
+
import { cloneProjectSchema, handleCloneProject } from './tools/cloneProject.js';
|
|
17
29
|
import { MODE } from './config.js';
|
|
18
30
|
export function createServer() {
|
|
19
31
|
const server = new McpServer({
|
|
20
32
|
name: 'flowspec',
|
|
21
|
-
version: '
|
|
33
|
+
version: '3.0.0',
|
|
22
34
|
});
|
|
23
35
|
// ─── Read tools ──────────────────────────────────────────────────
|
|
24
36
|
server.tool('flowspec_list_projects', 'List all FlowSpec projects with names and dates', listProjectsSchema.shape, handleListProjects);
|
|
@@ -36,7 +48,19 @@ export function createServer() {
|
|
|
36
48
|
server.tool('flowspec_create_edge', 'Connect two nodes with an edge type (flows-to, derives-from, transforms, validates, contains)', createEdgeSchema.shape, handleCreateEdge);
|
|
37
49
|
server.tool('flowspec_delete_edge', 'Remove an edge from a project', deleteEdgeSchema.shape, handleDeleteEdge);
|
|
38
50
|
server.tool('flowspec_analyse_project', 'Run orphan node and duplicate label analysis on a project', analyseProjectSchema.shape, handleAnalyseProject);
|
|
39
|
-
|
|
51
|
+
// ─── Write tools (v3) ────────────────────────────────────────────
|
|
52
|
+
server.tool('flowspec_import_yaml', 'Import YAML specification to create/merge nodes, edges, and screens', importYamlSchema.shape, handleImportYaml);
|
|
53
|
+
server.tool('flowspec_auto_layout', 'Apply automatic hierarchical layout (Dagre) to organize nodes', autoLayoutSchema.shape, handleAutoLayout);
|
|
54
|
+
server.tool('flowspec_upload_image', 'Upload an image and get its URL with auto-detected dimensions', uploadImageSchema.shape, handleUploadImage);
|
|
55
|
+
server.tool('flowspec_create_screen', 'Create a new wireframe screen with optional image', createScreenSchema.shape, handleCreateScreen);
|
|
56
|
+
server.tool('flowspec_update_screen', 'Update screen properties (name, image)', updateScreenSchema.shape, handleUpdateScreen);
|
|
57
|
+
server.tool('flowspec_delete_screen', 'Delete a wireframe screen and all its regions', deleteScreenSchema.shape, handleDeleteScreen);
|
|
58
|
+
server.tool('flowspec_add_region', 'Add a region to a screen with % coordinates and element IDs', addRegionSchema.shape, handleAddRegion);
|
|
59
|
+
server.tool('flowspec_update_region', 'Update region position, size, label, or element IDs', updateRegionSchema.shape, handleUpdateRegion);
|
|
60
|
+
server.tool('flowspec_remove_region', 'Remove a region from a screen', removeRegionSchema.shape, handleRemoveRegion);
|
|
61
|
+
server.tool('flowspec_update_edge', 'Update edge type, label, or handle positions', updateEdgeSchema.shape, handleUpdateEdge);
|
|
62
|
+
server.tool('flowspec_clone_project', 'Clone a project for backup or branching', cloneProjectSchema.shape, handleCloneProject);
|
|
63
|
+
console.error(`FlowSpec MCP v3.0.0 — mode: ${MODE}`);
|
|
40
64
|
return server;
|
|
41
65
|
}
|
|
42
66
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const addRegionSchema: z.ZodObject<{
|
|
3
|
+
projectId: z.ZodString;
|
|
4
|
+
screenId: z.ZodString;
|
|
5
|
+
label: z.ZodOptional<z.ZodString>;
|
|
6
|
+
position: z.ZodObject<{
|
|
7
|
+
x: z.ZodNumber;
|
|
8
|
+
y: z.ZodNumber;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
}, {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
}>;
|
|
16
|
+
size: z.ZodObject<{
|
|
17
|
+
width: z.ZodNumber;
|
|
18
|
+
height: z.ZodNumber;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
}, {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
}>;
|
|
26
|
+
elementIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
27
|
+
componentNodeId: z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
position: {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
};
|
|
33
|
+
size: {
|
|
34
|
+
width: number;
|
|
35
|
+
height: number;
|
|
36
|
+
};
|
|
37
|
+
projectId: string;
|
|
38
|
+
screenId: string;
|
|
39
|
+
label?: string | undefined;
|
|
40
|
+
elementIds?: string[] | undefined;
|
|
41
|
+
componentNodeId?: string | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
position: {
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
};
|
|
47
|
+
size: {
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
};
|
|
51
|
+
projectId: string;
|
|
52
|
+
screenId: string;
|
|
53
|
+
label?: string | undefined;
|
|
54
|
+
elementIds?: string[] | undefined;
|
|
55
|
+
componentNodeId?: string | undefined;
|
|
56
|
+
}>;
|
|
57
|
+
export declare function handleAddRegion(args: z.infer<typeof addRegionSchema>): Promise<{
|
|
58
|
+
content: {
|
|
59
|
+
type: "text";
|
|
60
|
+
text: string;
|
|
61
|
+
}[];
|
|
62
|
+
isError: boolean;
|
|
63
|
+
} | {
|
|
64
|
+
content: {
|
|
65
|
+
type: "text";
|
|
66
|
+
text: string;
|
|
67
|
+
}[];
|
|
68
|
+
isError?: undefined;
|
|
69
|
+
}>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { addRegionViaApi } from '../db.js';
|
|
3
|
+
export const addRegionSchema = z.object({
|
|
4
|
+
projectId: z.string().describe('UUID of the project'),
|
|
5
|
+
screenId: z.string().describe('UUID of the screen'),
|
|
6
|
+
label: z.string().optional().describe('Region label (e.g. "Login Form")'),
|
|
7
|
+
position: z.object({
|
|
8
|
+
x: z.number().describe('Left edge, percentage 0-100'),
|
|
9
|
+
y: z.number().describe('Top edge, percentage 0-100'),
|
|
10
|
+
}).describe('Top-left corner position in percentage coordinates'),
|
|
11
|
+
size: z.object({
|
|
12
|
+
width: z.number().describe('Width, percentage 0-100'),
|
|
13
|
+
height: z.number().describe('Height, percentage 0-100'),
|
|
14
|
+
}).describe('Region size in percentage coordinates'),
|
|
15
|
+
elementIds: z.array(z.string()).optional().describe('Canvas node IDs linked to this region'),
|
|
16
|
+
componentNodeId: z.string().optional().describe('Component node ID when region is promoted'),
|
|
17
|
+
});
|
|
18
|
+
export async function handleAddRegion(args) {
|
|
19
|
+
const region = await addRegionViaApi(args.projectId, args.screenId, {
|
|
20
|
+
label: args.label,
|
|
21
|
+
position: args.position,
|
|
22
|
+
size: args.size,
|
|
23
|
+
elementIds: args.elementIds,
|
|
24
|
+
componentNodeId: args.componentNodeId,
|
|
25
|
+
});
|
|
26
|
+
if (!region) {
|
|
27
|
+
return {
|
|
28
|
+
content: [{ type: 'text', text: `Failed to add region — project or screen not found` }],
|
|
29
|
+
isError: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
content: [{
|
|
34
|
+
type: 'text',
|
|
35
|
+
text: `Added region **${region.label ?? region.id}** to screen (id: ${region.id})`,
|
|
36
|
+
}],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=addRegion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addRegion.js","sourceRoot":"","sources":["../../src/tools/addRegion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACrD,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACrD,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACxD,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACpD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC5F,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC7F,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAqC;IACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;QAClE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oDAAoD,EAAE,CAAC;YAChG,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,kBAAkB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,qBAAqB,MAAM,CAAC,EAAE,GAAG;aACnF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const autoLayoutSchema: z.ZodObject<{
|
|
3
|
+
projectId: z.ZodString;
|
|
4
|
+
direction: z.ZodOptional<z.ZodEnum<["TB", "BT", "LR", "RL"]>>;
|
|
5
|
+
pinnedNodeIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
projectId: string;
|
|
8
|
+
direction?: "TB" | "BT" | "LR" | "RL" | undefined;
|
|
9
|
+
pinnedNodeIds?: string[] | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
projectId: string;
|
|
12
|
+
direction?: "TB" | "BT" | "LR" | "RL" | undefined;
|
|
13
|
+
pinnedNodeIds?: string[] | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function handleAutoLayout(args: z.infer<typeof autoLayoutSchema>): Promise<{
|
|
16
|
+
content: {
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}[];
|
|
20
|
+
isError: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
content: {
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
isError?: undefined;
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getProject, updateProjectViaApi } from '../db.js';
|
|
3
|
+
import { computeAutoLayout } from '../layout/autoLayout.js';
|
|
4
|
+
export const autoLayoutSchema = z.object({
|
|
5
|
+
projectId: z.string().describe('UUID of the project'),
|
|
6
|
+
direction: z.enum(['TB', 'BT', 'LR', 'RL']).optional().describe('Layout direction (default: TB — top-to-bottom)'),
|
|
7
|
+
pinnedNodeIds: z.array(z.string()).optional().describe('Node IDs to keep in their current positions'),
|
|
8
|
+
});
|
|
9
|
+
export async function handleAutoLayout(args) {
|
|
10
|
+
const project = await getProject(args.projectId);
|
|
11
|
+
if (!project) {
|
|
12
|
+
return {
|
|
13
|
+
content: [{ type: 'text', text: `Project not found: ${args.projectId}` }],
|
|
14
|
+
isError: true,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const nodes = project.canvas_state.nodes ?? [];
|
|
18
|
+
const edges = project.canvas_state.edges ?? [];
|
|
19
|
+
if (nodes.length === 0) {
|
|
20
|
+
return {
|
|
21
|
+
content: [{ type: 'text', text: 'No nodes to layout' }],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const direction = args.direction ?? 'TB';
|
|
25
|
+
const pinnedNodeIds = new Set(args.pinnedNodeIds ?? []);
|
|
26
|
+
const positions = computeAutoLayout(nodes, edges, { rankdir: direction, pinnedNodeIds });
|
|
27
|
+
// Apply positions to nodes
|
|
28
|
+
let movedCount = 0;
|
|
29
|
+
for (const node of nodes) {
|
|
30
|
+
const pos = positions.get(node.id);
|
|
31
|
+
if (pos) {
|
|
32
|
+
node.position = pos;
|
|
33
|
+
movedCount++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const updated = await updateProjectViaApi(args.projectId, {
|
|
37
|
+
canvas_state: project.canvas_state,
|
|
38
|
+
});
|
|
39
|
+
if (!updated) {
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: 'text', text: `Failed to save layout changes` }],
|
|
42
|
+
isError: true,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
content: [{
|
|
47
|
+
type: 'text',
|
|
48
|
+
text: `Auto-layout complete — repositioned ${movedCount} nodes (direction: ${direction}, pinned: ${pinnedNodeIds.size})`,
|
|
49
|
+
}],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=autoLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoLayout.js","sourceRoot":"","sources":["../../src/tools/autoLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACrD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IACjH,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACtG,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAsC;IAC3E,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sBAAsB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAClF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;IAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IAEzF,2BAA2B;IAC3B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YACpB,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE;QACxD,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;YAC3E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,uCAAuC,UAAU,sBAAsB,SAAS,aAAa,aAAa,CAAC,IAAI,GAAG;aACzH,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const captureScreenSchema: z.ZodObject<{
|
|
3
|
+
url: z.ZodString;
|
|
4
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
5
|
+
viewport: z.ZodOptional<z.ZodObject<{
|
|
6
|
+
width: z.ZodNumber;
|
|
7
|
+
height: z.ZodNumber;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
}, {
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
}>>;
|
|
15
|
+
waitFor: z.ZodOptional<z.ZodString>;
|
|
16
|
+
fullPage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
url: string;
|
|
19
|
+
fullPage: boolean;
|
|
20
|
+
selector?: string | undefined;
|
|
21
|
+
viewport?: {
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
} | undefined;
|
|
25
|
+
waitFor?: string | undefined;
|
|
26
|
+
}, {
|
|
27
|
+
url: string;
|
|
28
|
+
selector?: string | undefined;
|
|
29
|
+
viewport?: {
|
|
30
|
+
width: number;
|
|
31
|
+
height: number;
|
|
32
|
+
} | undefined;
|
|
33
|
+
waitFor?: string | undefined;
|
|
34
|
+
fullPage?: boolean | undefined;
|
|
35
|
+
}>;
|
|
36
|
+
export declare function handleCaptureScreen(args: z.infer<typeof captureScreenSchema>): Promise<{
|
|
37
|
+
content: {
|
|
38
|
+
type: "text";
|
|
39
|
+
text: string;
|
|
40
|
+
}[];
|
|
41
|
+
isError: boolean;
|
|
42
|
+
} | {
|
|
43
|
+
content: {
|
|
44
|
+
type: "text";
|
|
45
|
+
text: string;
|
|
46
|
+
}[];
|
|
47
|
+
isError?: undefined;
|
|
48
|
+
}>;
|