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.
Files changed (58) 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.js +19 -3
  5. package/dist/db.js.map +1 -1
  6. package/dist/export/yamlExporter.d.ts +6 -0
  7. package/dist/export/yamlExporter.js +155 -0
  8. package/dist/export/yamlExporter.js.map +1 -0
  9. package/dist/import/yamlImporter.d.ts +22 -0
  10. package/dist/import/yamlImporter.js +227 -0
  11. package/dist/import/yamlImporter.js.map +1 -0
  12. package/dist/index.js +0 -0
  13. package/dist/layout/semanticLayout.d.ts +24 -0
  14. package/dist/layout/semanticLayout.js +233 -0
  15. package/dist/layout/semanticLayout.js.map +1 -0
  16. package/dist/resources/selection.d.ts +5 -0
  17. package/dist/resources/selection.js +88 -0
  18. package/dist/resources/selection.js.map +1 -0
  19. package/dist/server.js +29 -24
  20. package/dist/server.js.map +1 -1
  21. package/dist/tools/captureScreen.d.ts +48 -0
  22. package/dist/tools/captureScreen.js +135 -0
  23. package/dist/tools/captureScreen.js.map +1 -0
  24. package/dist/tools/createNode.d.ts +2 -2
  25. package/dist/tools/createSubview.d.ts +50 -0
  26. package/dist/tools/createSubview.js +29 -0
  27. package/dist/tools/createSubview.js.map +1 -0
  28. package/dist/tools/deleteSubview.d.ts +24 -0
  29. package/dist/tools/deleteSubview.js +19 -0
  30. package/dist/tools/deleteSubview.js.map +1 -0
  31. package/dist/tools/generateSpec.d.ts +26 -0
  32. package/dist/tools/generateSpec.js +336 -0
  33. package/dist/tools/generateSpec.js.map +1 -0
  34. package/dist/tools/getYaml.d.ts +21 -0
  35. package/dist/tools/getYaml.js +23 -0
  36. package/dist/tools/getYaml.js.map +1 -0
  37. package/dist/tools/healthCheck.d.ts +8 -0
  38. package/dist/tools/healthCheck.js +16 -0
  39. package/dist/tools/healthCheck.js.map +1 -0
  40. package/dist/tools/importYaml.d.ts +33 -0
  41. package/dist/tools/importYaml.js +97 -0
  42. package/dist/tools/importYaml.js.map +1 -0
  43. package/dist/tools/ingestCodebase.d.ts +27 -0
  44. package/dist/tools/ingestCodebase.js +516 -0
  45. package/dist/tools/ingestCodebase.js.map +1 -0
  46. package/dist/tools/listSubviews.d.ts +21 -0
  47. package/dist/tools/listSubviews.js +34 -0
  48. package/dist/tools/listSubviews.js.map +1 -0
  49. package/dist/tools/smartLayout.d.ts +30 -0
  50. package/dist/tools/smartLayout.js +74 -0
  51. package/dist/tools/smartLayout.js.map +1 -0
  52. package/dist/tools/updateSubview.d.ts +53 -0
  53. package/dist/tools/updateSubview.js +33 -0
  54. package/dist/tools/updateSubview.js.map +1 -0
  55. package/dist/utils/selectionHelper.d.ts +61 -0
  56. package/dist/utils/selectionHelper.js +111 -0
  57. package/dist/utils/selectionHelper.js.map +1 -0
  58. package/package.json +1 -1
@@ -0,0 +1,155 @@
1
+ import { stringify } from 'yaml';
2
+ /**
3
+ * Exports canvas state to YAML specification optimised for Claude Code.
4
+ * Adapted from web app — uses plain interfaces instead of @xyflow/svelte types.
5
+ */
6
+ export function exportToYaml(nodes, edges, projectName = 'Untitled Project', screens = []) {
7
+ const exportableNodes = nodes.filter((n) => n.type !== 'image' && n.type !== 'screen');
8
+ const dataPointNodes = exportableNodes.filter((n) => n.type === 'datapoint');
9
+ const componentNodes = exportableNodes.filter((n) => n.type === 'component');
10
+ const transformNodes = exportableNodes.filter((n) => n.type === 'transform');
11
+ const tableNodes = exportableNodes.filter((n) => n.type === 'table');
12
+ const locationMap = buildLocationMap(dataPointNodes, componentNodes, edges);
13
+ // Build node label lookup for screen region export
14
+ const nodeLabelMap = new Map();
15
+ for (const n of exportableNodes) {
16
+ const label = n.data.label ?? 'Untitled';
17
+ nodeLabelMap.set(n.id, { label, type: n.type ?? 'unknown' });
18
+ }
19
+ const spec = {
20
+ version: '1.2.0',
21
+ metadata: {
22
+ projectName,
23
+ exportedAt: new Date().toISOString(),
24
+ nodeCount: exportableNodes.length,
25
+ edgeCount: edges.length,
26
+ },
27
+ dataPoints: dataPointNodes.map((node) => {
28
+ const data = node.data;
29
+ return {
30
+ id: node.id,
31
+ label: data.label,
32
+ type: data.type,
33
+ source: data.source,
34
+ sourceDefinition: data.sourceDefinition,
35
+ constraints: data.constraints,
36
+ locations: locationMap.get(node.id) ?? [],
37
+ };
38
+ }),
39
+ components: componentNodes.map((node) => {
40
+ const data = node.data;
41
+ const result = {
42
+ id: node.id,
43
+ label: data.label,
44
+ displays: data.displays,
45
+ captures: data.captures,
46
+ };
47
+ if (data.wireframeRef) {
48
+ result.wireframeRef = data.wireframeRef;
49
+ }
50
+ return result;
51
+ }),
52
+ transforms: transformNodes.map((node) => {
53
+ const data = node.data;
54
+ return {
55
+ id: node.id,
56
+ type: data.type,
57
+ description: data.description,
58
+ inputs: data.inputs,
59
+ outputs: data.outputs,
60
+ logic: data.logic,
61
+ };
62
+ }),
63
+ dataFlow: edges.filter((e) => {
64
+ return e.data?.edgeType !== 'contains';
65
+ }).map((edge) => {
66
+ const result = {
67
+ from: edge.source,
68
+ to: edge.target,
69
+ edgeType: edge.data?.edgeType ?? 'flows-to',
70
+ };
71
+ if (edge.data?.label) {
72
+ result.label = edge.data.label;
73
+ }
74
+ return result;
75
+ }),
76
+ };
77
+ // Add tables section if table nodes exist
78
+ if (tableNodes.length > 0) {
79
+ spec.tables = tableNodes.map((node) => {
80
+ const data = node.data;
81
+ const result = {
82
+ id: node.id,
83
+ label: data.label,
84
+ sourceType: data.sourceType,
85
+ columns: (data.columns ?? []).map((c) => ({ name: c.name, type: c.type })),
86
+ };
87
+ if (data.endpoint) {
88
+ result.endpoint = data.endpoint;
89
+ }
90
+ return result;
91
+ });
92
+ }
93
+ // Add screens section if screens exist
94
+ if (screens.length > 0) {
95
+ spec.screens = screens.map((sc) => ({
96
+ id: sc.id,
97
+ name: sc.name,
98
+ imageFilename: sc.imageFilename,
99
+ regions: sc.regions.map((r) => {
100
+ const region = {
101
+ id: r.id,
102
+ label: r.label,
103
+ position: {
104
+ x: Math.round(r.position.x * 10) / 10,
105
+ y: Math.round(r.position.y * 10) / 10,
106
+ },
107
+ size: {
108
+ width: Math.round(r.size.width * 10) / 10,
109
+ height: Math.round(r.size.height * 10) / 10,
110
+ },
111
+ elements: r.elementIds.map((eid) => {
112
+ const info = nodeLabelMap.get(eid);
113
+ return {
114
+ nodeId: eid,
115
+ nodeLabel: info?.label ?? 'Missing element',
116
+ nodeType: info?.type ?? 'unknown',
117
+ };
118
+ }),
119
+ };
120
+ if (r.componentNodeId) {
121
+ region.componentNodeId = r.componentNodeId;
122
+ }
123
+ return region;
124
+ }),
125
+ }));
126
+ }
127
+ return stringify(spec, {
128
+ lineWidth: 120,
129
+ indent: 2,
130
+ });
131
+ }
132
+ function buildLocationMap(dataPoints, components, edges) {
133
+ const map = new Map();
134
+ for (const dp of dataPoints) {
135
+ map.set(dp.id, []);
136
+ }
137
+ for (const edge of edges) {
138
+ const sourceIsDataPoint = dataPoints.some((n) => n.id === edge.source);
139
+ const targetIsComponent = components.some((n) => n.id === edge.target);
140
+ if (sourceIsDataPoint && targetIsComponent) {
141
+ const locations = map.get(edge.source) ?? [];
142
+ locations.push({ component: edge.target, role: 'output' });
143
+ map.set(edge.source, locations);
144
+ }
145
+ const sourceIsComponent = components.some((n) => n.id === edge.source);
146
+ const targetIsDataPoint = dataPoints.some((n) => n.id === edge.target);
147
+ if (sourceIsComponent && targetIsDataPoint) {
148
+ const locations = map.get(edge.target) ?? [];
149
+ locations.push({ component: edge.source, role: 'input' });
150
+ map.set(edge.target, locations);
151
+ }
152
+ }
153
+ return map;
154
+ }
155
+ //# sourceMappingURL=yamlExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yamlExporter.js","sourceRoot":"","sources":["../../src/export/yamlExporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Converts a validated YAML spec back into FlowSpec canvas nodes and edges.
3
+ * Ported from src/lib/import/yamlImporter.ts — uses MCP types, no @xyflow deps.
4
+ * Lenient: uses sensible defaults for missing fields, skips broken edges.
5
+ */
6
+ import type { CanvasNode, CanvasEdge, Screen } from '../types.js';
7
+ export interface ImportResult {
8
+ nodes: CanvasNode[];
9
+ edges: CanvasEdge[];
10
+ screens: Screen[];
11
+ projectName: string;
12
+ stats: {
13
+ dataPoints: number;
14
+ components: number;
15
+ transforms: number;
16
+ tables: number;
17
+ edges: number;
18
+ skippedEdges: number;
19
+ skippedNodes: number;
20
+ };
21
+ }
22
+ export declare function importFromYaml(spec: Record<string, unknown>): ImportResult;
@@ -0,0 +1,227 @@
1
+ export function importFromYaml(spec) {
2
+ const metadata = (spec.metadata ?? {});
3
+ const projectName = metadata.projectName ?? 'Imported Project';
4
+ const rawDataPoints = spec.dataPoints ?? [];
5
+ const rawComponents = spec.components ?? [];
6
+ const rawTransforms = spec.transforms ?? [];
7
+ const rawDataFlow = spec.dataFlow ?? [];
8
+ const rawTables = spec.tables ?? [];
9
+ const nodes = [];
10
+ const seenIds = new Set();
11
+ let skippedNodes = 0;
12
+ // --- DataPoints ---
13
+ for (const dp of rawDataPoints) {
14
+ const id = dp.id;
15
+ if (!id || seenIds.has(id)) {
16
+ skippedNodes++;
17
+ continue;
18
+ }
19
+ seenIds.add(id);
20
+ nodes.push({
21
+ id,
22
+ type: 'datapoint',
23
+ position: { x: 0, y: 0 },
24
+ data: {
25
+ label: dp.label ?? 'Untitled',
26
+ type: validDataType(dp.type),
27
+ source: validSource(dp.source),
28
+ sourceDefinition: dp.sourceDefinition ?? '',
29
+ constraints: Array.isArray(dp.constraints) ? dp.constraints : []
30
+ }
31
+ });
32
+ }
33
+ // --- Components ---
34
+ for (const comp of rawComponents) {
35
+ const id = comp.id;
36
+ if (!id || seenIds.has(id)) {
37
+ skippedNodes++;
38
+ continue;
39
+ }
40
+ seenIds.add(id);
41
+ const data = {
42
+ label: comp.label ?? 'Untitled Component',
43
+ displays: Array.isArray(comp.displays) ? comp.displays : [],
44
+ captures: Array.isArray(comp.captures) ? comp.captures : []
45
+ };
46
+ if (comp.wireframeRef) {
47
+ data.wireframeRef = comp.wireframeRef;
48
+ }
49
+ nodes.push({ id, type: 'component', position: { x: 0, y: 0 }, data });
50
+ }
51
+ // --- Transforms ---
52
+ for (const tx of rawTransforms) {
53
+ const id = tx.id;
54
+ if (!id || seenIds.has(id)) {
55
+ skippedNodes++;
56
+ continue;
57
+ }
58
+ seenIds.add(id);
59
+ const description = tx.description ?? '';
60
+ const rawLogic = (tx.logic ?? {});
61
+ nodes.push({
62
+ id,
63
+ type: 'transform',
64
+ position: { x: 0, y: 0 },
65
+ data: {
66
+ label: description || 'Untitled Transform',
67
+ type: validLogicType(tx.type),
68
+ description,
69
+ inputs: Array.isArray(tx.inputs) ? tx.inputs : [],
70
+ outputs: Array.isArray(tx.outputs) ? tx.outputs : [],
71
+ logic: {
72
+ type: validLogicContentType(rawLogic.type),
73
+ content: rawLogic.content ?? ''
74
+ }
75
+ }
76
+ });
77
+ }
78
+ // --- Tables ---
79
+ for (const tbl of rawTables) {
80
+ const id = tbl.id;
81
+ if (!id || seenIds.has(id)) {
82
+ skippedNodes++;
83
+ continue;
84
+ }
85
+ seenIds.add(id);
86
+ const rawColumns = Array.isArray(tbl.columns) ? tbl.columns : [];
87
+ const columns = rawColumns.map((c) => ({
88
+ name: c.name ?? '',
89
+ type: validDataType(c.type)
90
+ }));
91
+ nodes.push({
92
+ id,
93
+ type: 'table',
94
+ position: { x: 0, y: 0 },
95
+ data: {
96
+ label: tbl.label ?? 'Untitled Table',
97
+ sourceType: validTableSourceType(tbl.sourceType),
98
+ columns,
99
+ endpoint: tbl.endpoint ?? ''
100
+ }
101
+ });
102
+ }
103
+ // --- Edges (no markerEnd — visual-only, not needed in canvas_state) ---
104
+ const edges = [];
105
+ let skippedEdges = 0;
106
+ for (const flow of rawDataFlow) {
107
+ const from = flow.from;
108
+ const to = flow.to;
109
+ if (!from || !to || !seenIds.has(from) || !seenIds.has(to)) {
110
+ skippedEdges++;
111
+ continue;
112
+ }
113
+ const edgeData = {
114
+ edgeType: validEdgeType(flow.edgeType)
115
+ };
116
+ if (flow.label) {
117
+ edgeData.label = flow.label;
118
+ }
119
+ edges.push({
120
+ id: crypto.randomUUID(),
121
+ source: from,
122
+ target: to,
123
+ type: 'typed',
124
+ data: edgeData
125
+ });
126
+ }
127
+ // --- Screens (import metadata + auto-create screen nodes) ---
128
+ const screens = [];
129
+ const rawScreens = spec.screens ?? [];
130
+ let screenOffsetY = 50;
131
+ for (const rawSc of rawScreens) {
132
+ const screenId = rawSc.id ?? crypto.randomUUID();
133
+ const rawRegions = Array.isArray(rawSc.regions) ? rawSc.regions : [];
134
+ const regions = rawRegions.map((r) => {
135
+ const rawElements = Array.isArray(r.elements) ? r.elements : [];
136
+ return {
137
+ id: r.id ?? crypto.randomUUID(),
138
+ label: r.label,
139
+ position: {
140
+ x: (r.position?.x ?? 10),
141
+ y: (r.position?.y ?? 10)
142
+ },
143
+ size: {
144
+ width: (r.size?.width ?? 20),
145
+ height: (r.size?.height ?? 15)
146
+ },
147
+ elementIds: rawElements
148
+ .map((el) => el.nodeId)
149
+ .filter((eid) => seenIds.has(eid)),
150
+ componentNodeId: r.componentNodeId || undefined
151
+ };
152
+ });
153
+ const elementCount = regions.reduce((sum, r) => sum + r.elementIds.length, 0);
154
+ screens.push({
155
+ id: screenId,
156
+ name: rawSc.name ?? 'Imported Screen',
157
+ imageUrl: '',
158
+ imageWidth: 1920,
159
+ imageHeight: 1080,
160
+ imageFilename: rawSc.imageFilename,
161
+ regions
162
+ });
163
+ // Auto-create screen node on canvas
164
+ const screenNodeId = crypto.randomUUID();
165
+ nodes.push({
166
+ id: screenNodeId,
167
+ type: 'screen',
168
+ position: { x: 50, y: screenOffsetY },
169
+ data: {
170
+ label: rawSc.name ?? 'Imported Screen',
171
+ screenId,
172
+ regionCount: regions.length,
173
+ elementCount
174
+ }
175
+ });
176
+ screenOffsetY += 160;
177
+ }
178
+ return {
179
+ nodes,
180
+ edges,
181
+ screens,
182
+ projectName,
183
+ stats: {
184
+ dataPoints: nodes.filter((n) => n.type === 'datapoint').length,
185
+ components: nodes.filter((n) => n.type === 'component').length,
186
+ transforms: nodes.filter((n) => n.type === 'transform').length,
187
+ tables: nodes.filter((n) => n.type === 'table').length,
188
+ edges: edges.length,
189
+ skippedEdges,
190
+ skippedNodes
191
+ }
192
+ };
193
+ }
194
+ // --- Validation helpers with defaults ---
195
+ const VALID_DATA_TYPES = new Set(['string', 'number', 'boolean', 'object', 'array']);
196
+ function validDataType(t) {
197
+ return t && VALID_DATA_TYPES.has(t) ? t : 'string';
198
+ }
199
+ const VALID_SOURCES = new Set(['captured', 'inferred']);
200
+ function validSource(s) {
201
+ return s && VALID_SOURCES.has(s) ? s : 'captured';
202
+ }
203
+ const VALID_LOGIC_TYPES = new Set(['formula', 'validation', 'workflow']);
204
+ function validLogicType(t) {
205
+ return t && VALID_LOGIC_TYPES.has(t) ? t : 'formula';
206
+ }
207
+ const VALID_LOGIC_CONTENT_TYPES = new Set(['formula', 'decision_table', 'steps']);
208
+ function validLogicContentType(t) {
209
+ return t && VALID_LOGIC_CONTENT_TYPES.has(t)
210
+ ? t
211
+ : 'formula';
212
+ }
213
+ const VALID_TABLE_SOURCE_TYPES = new Set(['database', 'api', 'file', 'manual']);
214
+ function validTableSourceType(t) {
215
+ return t && VALID_TABLE_SOURCE_TYPES.has(t) ? t : 'database';
216
+ }
217
+ const VALID_EDGE_TYPES = new Set([
218
+ 'flows-to',
219
+ 'derives-from',
220
+ 'transforms',
221
+ 'validates',
222
+ 'contains'
223
+ ]);
224
+ function validEdgeType(t) {
225
+ return t && VALID_EDGE_TYPES.has(t) ? t : 'flows-to';
226
+ }
227
+ //# sourceMappingURL=yamlImporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yamlImporter.js","sourceRoot":"","sources":["../../src/import/yamlImporter.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
@@ -0,0 +1,24 @@
1
+ import type { CanvasNode, CanvasEdge } from '../types.js';
2
+ export interface LayoutCommand {
3
+ nodeIds: string[];
4
+ targetBounds: {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ arrangement: 'stack' | 'grid' | 'flow' | 'cluster';
11
+ direction?: 'vertical' | 'horizontal';
12
+ }
13
+ export declare function parseNaturalLanguageLayout(command: string, nodes: CanvasNode[], canvasBounds: {
14
+ width: number;
15
+ height: number;
16
+ }): LayoutCommand | {
17
+ error: string;
18
+ };
19
+ export declare function applySemanticLayout(nodes: CanvasNode[], edges: CanvasEdge[], command: LayoutCommand): Map<string, {
20
+ x: number;
21
+ y: number;
22
+ }>;
23
+ export declare const SUPPORTED_COMMANDS: string[];
24
+ export declare const SUPPORTED_REGIONS: string[];