flowspec-mcp 5.4.0 → 5.5.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.
- 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.js +19 -3
- package/dist/db.js.map +1 -1
- package/dist/export/yamlExporter.d.ts +6 -0
- package/dist/export/yamlExporter.js +155 -0
- package/dist/export/yamlExporter.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/semanticLayout.d.ts +24 -0
- package/dist/layout/semanticLayout.js +233 -0
- package/dist/layout/semanticLayout.js.map +1 -0
- package/dist/resources/selection.d.ts +5 -0
- package/dist/resources/selection.js +88 -0
- package/dist/resources/selection.js.map +1 -0
- package/dist/server.js +29 -24
- package/dist/server.js.map +1 -1
- 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/createNode.d.ts +2 -2
- package/dist/tools/createSubview.d.ts +50 -0
- package/dist/tools/createSubview.js +29 -0
- package/dist/tools/createSubview.js.map +1 -0
- package/dist/tools/deleteSubview.d.ts +24 -0
- package/dist/tools/deleteSubview.js +19 -0
- package/dist/tools/deleteSubview.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/getYaml.d.ts +21 -0
- package/dist/tools/getYaml.js +23 -0
- package/dist/tools/getYaml.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/listSubviews.d.ts +21 -0
- package/dist/tools/listSubviews.js +34 -0
- package/dist/tools/listSubviews.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/updateSubview.d.ts +53 -0
- package/dist/tools/updateSubview.js +33 -0
- package/dist/tools/updateSubview.js.map +1 -0
- package/dist/utils/selectionHelper.d.ts +61 -0
- package/dist/utils/selectionHelper.js +111 -0
- package/dist/utils/selectionHelper.js.map +1 -0
- package/package.json +1 -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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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { MODE, LOCAL_API_BASE, getLocalAuthToken } from '../config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fetch current selection state from desktop server
|
|
4
|
+
*/
|
|
5
|
+
async function fetchLocalSelection() {
|
|
6
|
+
if (MODE !== 'local') {
|
|
7
|
+
throw new Error('Selection resource only available in local mode');
|
|
8
|
+
}
|
|
9
|
+
const token = getLocalAuthToken();
|
|
10
|
+
const headers = {
|
|
11
|
+
'Content-Type': 'application/json',
|
|
12
|
+
};
|
|
13
|
+
if (token) {
|
|
14
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
15
|
+
}
|
|
16
|
+
const res = await fetch(`${LOCAL_API_BASE}/api/selection/current`, {
|
|
17
|
+
headers,
|
|
18
|
+
signal: AbortSignal.timeout(2000)
|
|
19
|
+
});
|
|
20
|
+
if (!res.ok) {
|
|
21
|
+
throw new Error(`Failed to fetch selection: ${res.status} ${res.statusText}`);
|
|
22
|
+
}
|
|
23
|
+
return res.json();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* MCP Resource handler for flowspec://selection/current
|
|
27
|
+
*/
|
|
28
|
+
export const handleReadSelection = async (uri, extra) => {
|
|
29
|
+
try {
|
|
30
|
+
const selection = await fetchLocalSelection();
|
|
31
|
+
// Format for better readability
|
|
32
|
+
let text = '';
|
|
33
|
+
if (selection.type === 'none' || (!selection.selectedNodes?.length && !selection.selectedEdges?.length)) {
|
|
34
|
+
text = 'No nodes or edges currently selected in FlowSpec editor.';
|
|
35
|
+
if (selection.stale) {
|
|
36
|
+
text += '\n\n_Note: Selection state is stale (>60s old). Make sure the FlowSpec desktop app is open._';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
text = `## FlowSpec Selection State\n\n`;
|
|
41
|
+
text += `**Project:** ${selection.projectName || 'Unknown'} (${selection.projectId || 'N/A'})\n`;
|
|
42
|
+
text += `**Updated:** ${selection.timestamp}\n\n`;
|
|
43
|
+
if (selection.selectedNodes?.length > 0) {
|
|
44
|
+
text += `### Selected Nodes (${selection.selectedNodes.length})\n\n`;
|
|
45
|
+
for (const node of selection.selectedNodes) {
|
|
46
|
+
text += `- **${node.label}** (${node.type})\n`;
|
|
47
|
+
text += ` - ID: \`${node.id}\`\n`;
|
|
48
|
+
text += ` - Position: (${node.position.x.toFixed(0)}, ${node.position.y.toFixed(0)})\n`;
|
|
49
|
+
text += ` - Data: \`${JSON.stringify(node.data)}\`\n\n`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (selection.selectedEdges?.length > 0) {
|
|
53
|
+
text += `### Selected Edges (${selection.selectedEdges.length})\n\n`;
|
|
54
|
+
for (const edge of selection.selectedEdges) {
|
|
55
|
+
text += `- **${edge.edgeType}**: \`${edge.source}\` → \`${edge.target}\`\n`;
|
|
56
|
+
text += ` - ID: \`${edge.id}\`\n`;
|
|
57
|
+
if (edge.sourceHandle)
|
|
58
|
+
text += ` - Source Handle: ${edge.sourceHandle}\n`;
|
|
59
|
+
if (edge.targetHandle)
|
|
60
|
+
text += ` - Target Handle: ${edge.targetHandle}\n`;
|
|
61
|
+
text += `\n`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (selection.viewport) {
|
|
65
|
+
text += `### Viewport\n\n`;
|
|
66
|
+
text += `- Position: (${selection.viewport.x.toFixed(1)}, ${selection.viewport.y.toFixed(1)})\n`;
|
|
67
|
+
text += `- Zoom: ${(selection.viewport.zoom * 100).toFixed(0)}%\n`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
contents: [{
|
|
72
|
+
uri: uri.toString(),
|
|
73
|
+
mimeType: 'text/markdown',
|
|
74
|
+
text
|
|
75
|
+
}]
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
return {
|
|
80
|
+
contents: [{
|
|
81
|
+
uri: uri.toString(),
|
|
82
|
+
mimeType: 'text/plain',
|
|
83
|
+
text: `Error reading selection state: ${err instanceof Error ? err.message : String(err)}\n\nMake sure the FlowSpec desktop app is running.`
|
|
84
|
+
}]
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/resources/selection.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -33,46 +33,51 @@ import { getDecisionTreeSchema, handleGetDecisionTree } from './tools/getDecisio
|
|
|
33
33
|
import { deleteDecisionTreeSchema, handleDeleteDecisionTree } from './tools/deleteDecisionTree.js';
|
|
34
34
|
import { analyseDecisionTreeSchema, handleAnalyseDecisionTree } from './tools/analyseDecisionTree.js';
|
|
35
35
|
import { MODE } from './config.js';
|
|
36
|
+
// FLOWSPEC_TOOLS=core → 11 essential tools only (~2,900 tokens)
|
|
37
|
+
// FLOWSPEC_TOOLS=all → all 30 tools (~7,980 tokens) [default]
|
|
38
|
+
const TOOLS_MODE = (process.env.FLOWSPEC_TOOLS ?? 'all');
|
|
36
39
|
export function createServer() {
|
|
37
40
|
const server = new McpServer({
|
|
38
41
|
name: 'flowspec',
|
|
39
42
|
version: '5.0.0',
|
|
40
43
|
});
|
|
41
|
-
// ───
|
|
44
|
+
// ─── Core tools (always registered) ─────────────────────────────
|
|
42
45
|
server.tool('flowspec_list_projects', 'List all FlowSpec projects with names and dates', listProjectsSchema.shape, handleListProjects);
|
|
43
46
|
server.tool('flowspec_get_json', 'Get the full JSON spec for a FlowSpec project (optimised for Claude Code consumption)', getJsonSchema.shape, handleGetJson);
|
|
44
47
|
server.tool('flowspec_get_project', 'Get project data (nodes, edges, screens) for a FlowSpec project', getProjectSchema.shape, handleGetProject);
|
|
45
48
|
server.tool('flowspec_search_nodes', 'Search for nodes by label across all projects, optionally filtered by type', searchNodesSchema.shape, handleSearchNodes);
|
|
46
49
|
server.tool('flowspec_get_screen_context', 'Get screen/region/element structure for a FlowSpec project (lightweight alternative to full JSON)', getScreenContextSchema.shape, handleGetScreenContext);
|
|
47
|
-
// ─── Write tools (v2) ────────────────────────────────────────────
|
|
48
50
|
server.tool('flowspec_create_project', 'Create a new FlowSpec project. Before building from a codebase, scan source files for @flowspec annotations (left by the codebase-indexer skill) to avoid re-discovering already-indexed elements.', createProjectSchema.shape, handleCreateProject);
|
|
49
|
-
server.tool('flowspec_update_project', 'Update a project name or replace its entire canvas state', updateProjectSchema.shape, handleUpdateProject);
|
|
50
|
-
server.tool('flowspec_delete_project', 'Delete a FlowSpec project', deleteProjectSchema.shape, handleDeleteProject);
|
|
51
51
|
server.tool('flowspec_create_node', 'Add a node (datapoint, component, transform, or table) to a project. Check source files for @flowspec annotations first — they contain pre-indexed element definitions (e.g. // @flowspec dp-name: type, source, constraints).', createNodeSchema.shape, handleCreateNode);
|
|
52
52
|
server.tool('flowspec_update_node', 'Update a node\'s data (label, type, constraints) or position', updateNodeSchema.shape, handleUpdateNode);
|
|
53
|
-
server.tool('flowspec_delete_node', 'Remove a node and all its connected edges from a project', deleteNodeSchema.shape, handleDeleteNode);
|
|
54
53
|
server.tool('flowspec_create_edge', 'Connect two nodes with an edge type (flows-to, derives-from, transforms, validates, contains)', createEdgeSchema.shape, handleCreateEdge);
|
|
55
|
-
server.tool('flowspec_delete_edge', 'Remove an edge from a project', deleteEdgeSchema.shape, handleDeleteEdge);
|
|
56
54
|
server.tool('flowspec_analyse_project', 'Run orphan node and duplicate label analysis on a project', analyseProjectSchema.shape, handleAnalyseProject);
|
|
57
55
|
server.tool('flowspec_validate_project', 'Validate data flow semantics: DataPoint sources, Transform I/O, Component references, type matching, and circular dependencies', validateProjectSchema.shape, handleValidateProject);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
56
|
+
if (TOOLS_MODE === 'all') {
|
|
57
|
+
// ─── Extras: v2 destructive/update tools ───────────────────────
|
|
58
|
+
server.tool('flowspec_update_project', 'Update a project name or replace its entire canvas state', updateProjectSchema.shape, handleUpdateProject);
|
|
59
|
+
server.tool('flowspec_delete_project', 'Delete a FlowSpec project', deleteProjectSchema.shape, handleDeleteProject);
|
|
60
|
+
server.tool('flowspec_delete_node', 'Remove a node and all its connected edges from a project', deleteNodeSchema.shape, handleDeleteNode);
|
|
61
|
+
server.tool('flowspec_delete_edge', 'Remove an edge from a project', deleteEdgeSchema.shape, handleDeleteEdge);
|
|
62
|
+
// ─── Extras: v3 bulk/screen/region tools ───────────────────────
|
|
63
|
+
server.tool('flowspec_import_json', 'Import JSON specification to create/merge nodes, edges, and screens. If the codebase has @flowspec annotations, incorporate them into the spec before importing to avoid duplicating pre-indexed elements.', importJsonSchema.shape, handleImportJson);
|
|
64
|
+
server.tool('flowspec_auto_layout', 'Apply automatic hierarchical layout (Dagre) to organize nodes', autoLayoutSchema.shape, handleAutoLayout);
|
|
65
|
+
server.tool('flowspec_upload_image', 'Upload an image and get its URL with auto-detected dimensions', uploadImageSchema.shape, handleUploadImage);
|
|
66
|
+
server.tool('flowspec_create_screen', 'Create a new wireframe screen with optional image', createScreenSchema.shape, handleCreateScreen);
|
|
67
|
+
server.tool('flowspec_update_screen', 'Update screen properties (name, image)', updateScreenSchema.shape, handleUpdateScreen);
|
|
68
|
+
server.tool('flowspec_delete_screen', 'Delete a wireframe screen and all its regions', deleteScreenSchema.shape, handleDeleteScreen);
|
|
69
|
+
server.tool('flowspec_add_region', 'Add a region to a screen with % coordinates and element IDs', addRegionSchema.shape, handleAddRegion);
|
|
70
|
+
server.tool('flowspec_update_region', 'Update region position, size, label, or element IDs', updateRegionSchema.shape, handleUpdateRegion);
|
|
71
|
+
server.tool('flowspec_remove_region', 'Remove a region from a screen', removeRegionSchema.shape, handleRemoveRegion);
|
|
72
|
+
server.tool('flowspec_update_edge', 'Update edge type, label, or handle positions', updateEdgeSchema.shape, handleUpdateEdge);
|
|
73
|
+
server.tool('flowspec_clone_project', 'Clone a project for backup or branching', cloneProjectSchema.shape, handleCloneProject);
|
|
74
|
+
// ─── Extras: v4 decision tree tools ────────────────────────────
|
|
75
|
+
server.tool('flowspec_list_decision_trees', 'List all decision trees for a project', listDecisionTreesSchema.shape, handleListDecisionTrees);
|
|
76
|
+
server.tool('flowspec_get_decision_tree', 'Get a decision tree with full node/edge structure', getDecisionTreeSchema.shape, handleGetDecisionTree);
|
|
77
|
+
server.tool('flowspec_delete_decision_tree', 'Delete a decision tree from a project', deleteDecisionTreeSchema.shape, handleDeleteDecisionTree);
|
|
78
|
+
server.tool('flowspec_analyse_decision_tree', 'Analyse a decision tree: depth, orphans, outcomes, under-branched decisions', analyseDecisionTreeSchema.shape, handleAnalyseDecisionTree);
|
|
79
|
+
}
|
|
80
|
+
console.error(`FlowSpec MCP v5.4.0 — mode: ${MODE}, tools: ${TOOLS_MODE} (${TOOLS_MODE === 'core' ? 11 : 30})`);
|
|
76
81
|
return server;
|
|
77
82
|
}
|
|
78
83
|
//# 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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,yBAAyB;AACzB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACtG,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
+
}>;
|