shipshots-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/api-client.d.ts +19 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +126 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +128 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/defaults.d.ts +86 -0
  12. package/dist/defaults.d.ts.map +1 -0
  13. package/dist/defaults.js +360 -0
  14. package/dist/defaults.js.map +1 -0
  15. package/dist/design.d.ts +26 -0
  16. package/dist/design.d.ts.map +1 -0
  17. package/dist/design.js +63 -0
  18. package/dist/design.js.map +1 -0
  19. package/dist/helpers.d.ts +12 -0
  20. package/dist/helpers.d.ts.map +1 -0
  21. package/dist/helpers.js +22 -0
  22. package/dist/helpers.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +44 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/tools/batch.d.ts +4 -0
  28. package/dist/tools/batch.d.ts.map +1 -0
  29. package/dist/tools/batch.js +253 -0
  30. package/dist/tools/batch.js.map +1 -0
  31. package/dist/tools/duplicate.d.ts +4 -0
  32. package/dist/tools/duplicate.d.ts.map +1 -0
  33. package/dist/tools/duplicate.js +91 -0
  34. package/dist/tools/duplicate.js.map +1 -0
  35. package/dist/tools/export.d.ts +4 -0
  36. package/dist/tools/export.d.ts.map +1 -0
  37. package/dist/tools/export.js +67 -0
  38. package/dist/tools/export.js.map +1 -0
  39. package/dist/tools/layers.d.ts +4 -0
  40. package/dist/tools/layers.d.ts.map +1 -0
  41. package/dist/tools/layers.js +493 -0
  42. package/dist/tools/layers.js.map +1 -0
  43. package/dist/tools/project.d.ts +4 -0
  44. package/dist/tools/project.d.ts.map +1 -0
  45. package/dist/tools/project.js +190 -0
  46. package/dist/tools/project.js.map +1 -0
  47. package/dist/tools/screen.d.ts +4 -0
  48. package/dist/tools/screen.d.ts.map +1 -0
  49. package/dist/tools/screen.js +295 -0
  50. package/dist/tools/screen.js.map +1 -0
  51. package/dist/tools/video.d.ts +4 -0
  52. package/dist/tools/video.d.ts.map +1 -0
  53. package/dist/tools/video.js +144 -0
  54. package/dist/tools/video.js.map +1 -0
  55. package/dist/types.d.ts +163 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +4 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +41 -0
@@ -0,0 +1,360 @@
1
+ // ── Canvas dimensions ──
2
+ export const CANVAS_WIDTH = 1260;
3
+ export const CANVAS_HEIGHT = 2736;
4
+ // ── Device aspect ratios (height / width) ──
5
+ const DEVICE_RATIOS = {
6
+ iphone: 2868 / 1320,
7
+ android: 2400 / 1080,
8
+ ipad: 2732 / 2048,
9
+ macbook: 1800 / 2880,
10
+ frameless: 2868 / 1320,
11
+ };
12
+ export function deviceAspectRatio(type) {
13
+ return DEVICE_RATIOS[type] ?? DEVICE_RATIOS.iphone;
14
+ }
15
+ export function deviceSize(type, width) {
16
+ return { width, height: Math.round(width * deviceAspectRatio(type)) };
17
+ }
18
+ // ── Default positions ──
19
+ /** Default position for a text layer — centered horizontally near the top. */
20
+ export function defaultTextPosition() {
21
+ return {
22
+ x: 145,
23
+ y: 200,
24
+ width: 1000,
25
+ height: 250,
26
+ };
27
+ }
28
+ /** Default position for a device frame — centered below text, fully visible. */
29
+ export function defaultDevicePosition(deviceType) {
30
+ const devWidth = Math.round(CANVAS_WIDTH * 0.77); // ~994px
31
+ const dev = deviceSize(deviceType, devWidth);
32
+ const x = Math.round((CANVAS_WIDTH - dev.width) / 2);
33
+ // Place below text (~y=450) with ~130px gap, but ensure device fits on canvas
34
+ const idealY = 580;
35
+ const maxY = CANVAS_HEIGHT - dev.height - 30;
36
+ return {
37
+ x,
38
+ y: Math.min(idealY, maxY),
39
+ width: dev.width,
40
+ height: dev.height,
41
+ };
42
+ }
43
+ /** Default position for an image layer — centered. */
44
+ export function defaultImagePosition() {
45
+ return {
46
+ x: Math.round((CANVAS_WIDTH - 600) / 2),
47
+ y: Math.round((CANVAS_HEIGHT - 600) / 2),
48
+ width: 600,
49
+ height: 600,
50
+ };
51
+ }
52
+ /** Default position for a shape layer — centered. */
53
+ export function defaultShapePosition() {
54
+ return {
55
+ x: Math.round((CANVAS_WIDTH - 400) / 2),
56
+ y: Math.round((CANVAS_HEIGHT - 400) / 2),
57
+ width: 400,
58
+ height: 400,
59
+ };
60
+ }
61
+ // ── Default shadow ──
62
+ const DEFAULT_SHADOW = {
63
+ shadowEnabled: false,
64
+ shadowColor: "#00000040",
65
+ shadowBlur: 20,
66
+ shadowOffsetX: 0,
67
+ shadowOffsetY: 10,
68
+ };
69
+ // ── Default styles ──
70
+ export function defaultTextStyle() {
71
+ return {
72
+ fontSize: 64,
73
+ fontFamily: "Inter",
74
+ fontWeight: 700,
75
+ color: "#ffffff",
76
+ textAlign: "center",
77
+ letterSpacing: -1,
78
+ lineHeight: 1.1,
79
+ };
80
+ }
81
+ // ── Smart positioning ──
82
+ /**
83
+ * Compute a position for a new layer that avoids overlapping existing layers.
84
+ * Offsets by 40px diagonally for each potential overlap.
85
+ */
86
+ export function autoPosition(existingLayers, newLayerType) {
87
+ let pos;
88
+ switch (newLayerType) {
89
+ case "text":
90
+ pos = defaultTextPosition();
91
+ break;
92
+ case "device":
93
+ pos = defaultDevicePosition("iphone");
94
+ break;
95
+ case "image":
96
+ pos = defaultImagePosition();
97
+ break;
98
+ case "shape":
99
+ pos = defaultShapePosition();
100
+ break;
101
+ case "badge":
102
+ pos = defaultBadgePosition();
103
+ break;
104
+ case "arrow":
105
+ pos = defaultArrowPosition();
106
+ break;
107
+ default:
108
+ pos = { x: 100, y: 100 };
109
+ }
110
+ // Offset to avoid overlaps
111
+ const OFFSET = 40;
112
+ let attempts = 0;
113
+ while (attempts < 20) {
114
+ const overlaps = existingLayers.some((layer) => Math.abs(layer.x - pos.x) < OFFSET &&
115
+ Math.abs(layer.y - pos.y) < OFFSET);
116
+ if (!overlaps)
117
+ break;
118
+ pos = { x: pos.x + OFFSET, y: pos.y + OFFSET };
119
+ attempts++;
120
+ }
121
+ return pos;
122
+ }
123
+ // ── Color utilities ──
124
+ /**
125
+ * Returns white or black text color depending on the perceived brightness
126
+ * of the given hex background color.
127
+ */
128
+ export function contrastColor(backgroundColor) {
129
+ const hex = backgroundColor.replace("#", "");
130
+ if (hex.length < 6)
131
+ return "#ffffff";
132
+ const r = parseInt(hex.slice(0, 2), 16);
133
+ const g = parseInt(hex.slice(2, 4), 16);
134
+ const b = parseInt(hex.slice(4, 6), 16);
135
+ // Relative luminance (simplified)
136
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
137
+ return luminance > 0.5 ? "#000000" : "#ffffff";
138
+ }
139
+ // ── Layer factory ──
140
+ let zIndexCounter = 1;
141
+ export function generateId() {
142
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
143
+ }
144
+ export function createTextLayer(overrides = {}) {
145
+ const pos = defaultTextPosition();
146
+ const style = defaultTextStyle();
147
+ // Auto-compute height from fontSize/lineHeight/text when not explicitly set.
148
+ // Counts explicit \n breaks and estimates word-wrap lines based on width.
149
+ const text = overrides.text ?? "Your Text";
150
+ const fontSize = overrides.fontSize ?? style.fontSize;
151
+ const lineHeight = overrides.lineHeight ?? style.lineHeight;
152
+ const textWidth = overrides.width ?? pos.width;
153
+ // Approximate chars per line: width / (fontSize * 0.55). The 0.55 factor
154
+ // is a rough average character width ratio for proportional fonts.
155
+ const charsPerLine = Math.max(1, Math.floor(textWidth / (fontSize * 0.55)));
156
+ const explicitLines = text.split("\n");
157
+ let totalLines = 0;
158
+ for (const line of explicitLines) {
159
+ totalLines += Math.max(1, Math.ceil(line.length / charsPerLine));
160
+ }
161
+ const autoHeight = Math.max(pos.height, Math.ceil(totalLines * fontSize * lineHeight) + 40);
162
+ return {
163
+ id: generateId(),
164
+ type: "text",
165
+ x: pos.x,
166
+ y: pos.y,
167
+ width: pos.width,
168
+ height: autoHeight,
169
+ rotation: 0,
170
+ rotateX: 0,
171
+ rotateY: 0,
172
+ zIndex: zIndexCounter++,
173
+ locked: false,
174
+ visible: true,
175
+ opacity: 1,
176
+ ...DEFAULT_SHADOW,
177
+ text,
178
+ fontSize,
179
+ fontFamily: style.fontFamily,
180
+ fontWeight: style.fontWeight,
181
+ color: style.color,
182
+ textAlign: style.textAlign,
183
+ letterSpacing: style.letterSpacing,
184
+ lineHeight,
185
+ ...overrides,
186
+ };
187
+ }
188
+ export function createDeviceLayer(overrides = {}) {
189
+ const deviceType = overrides.deviceType ?? "iphone";
190
+ const pos = defaultDevicePosition(deviceType);
191
+ return {
192
+ id: generateId(),
193
+ type: "device",
194
+ x: pos.x,
195
+ y: pos.y,
196
+ width: pos.width,
197
+ height: pos.height,
198
+ rotation: 0,
199
+ rotateX: 0,
200
+ rotateY: 0,
201
+ zIndex: zIndexCounter++,
202
+ locked: false,
203
+ visible: true,
204
+ opacity: 1,
205
+ ...DEFAULT_SHADOW,
206
+ deviceType,
207
+ screenshotUrl: "",
208
+ ...overrides,
209
+ };
210
+ }
211
+ export function createImageLayer(overrides = {}) {
212
+ const pos = defaultImagePosition();
213
+ return {
214
+ id: generateId(),
215
+ type: "image",
216
+ x: pos.x,
217
+ y: pos.y,
218
+ width: pos.width,
219
+ height: pos.height,
220
+ rotation: 0,
221
+ rotateX: 0,
222
+ rotateY: 0,
223
+ zIndex: zIndexCounter++,
224
+ locked: false,
225
+ visible: true,
226
+ opacity: 1,
227
+ ...DEFAULT_SHADOW,
228
+ imageUrl: "",
229
+ objectFit: "cover",
230
+ borderRadius: 0,
231
+ ...overrides,
232
+ };
233
+ }
234
+ export function createShapeLayer(overrides = {}) {
235
+ const pos = defaultShapePosition();
236
+ return {
237
+ id: generateId(),
238
+ type: "shape",
239
+ x: pos.x,
240
+ y: pos.y,
241
+ width: pos.width,
242
+ height: pos.height,
243
+ rotation: 0,
244
+ rotateX: 0,
245
+ rotateY: 0,
246
+ zIndex: zIndexCounter++,
247
+ locked: false,
248
+ visible: true,
249
+ opacity: 1,
250
+ ...DEFAULT_SHADOW,
251
+ shape: "rect",
252
+ fill: "#ffffff",
253
+ fillType: "solid",
254
+ gradientColor2: "#000000",
255
+ gradientDirection: 135,
256
+ fillImageUrl: "",
257
+ fillImageSize: "cover",
258
+ stroke: "transparent",
259
+ strokeWidth: 0,
260
+ borderRadius: 0,
261
+ ...overrides,
262
+ };
263
+ }
264
+ /** Default position for a badge layer — centered horizontally near the top. */
265
+ export function defaultBadgePosition() {
266
+ return {
267
+ x: Math.round((CANVAS_WIDTH - 500) / 2),
268
+ y: 150,
269
+ width: 500,
270
+ height: 100,
271
+ };
272
+ }
273
+ /** Default from/to for an arrow layer. */
274
+ export function defaultArrowEndpoints() {
275
+ return {
276
+ fromX: 400,
277
+ fromY: 600,
278
+ toX: 700,
279
+ toY: 400,
280
+ };
281
+ }
282
+ /** Compute bounding box from arrow endpoints. */
283
+ export function arrowBoundingBox(fromX, fromY, toX, toY, padding = 30) {
284
+ return {
285
+ x: Math.min(fromX, toX) - padding,
286
+ y: Math.min(fromY, toY) - padding,
287
+ width: Math.abs(toX - fromX) + padding * 2,
288
+ height: Math.abs(toY - fromY) + padding * 2,
289
+ };
290
+ }
291
+ /** Default position for an arrow layer — derived from default endpoints. */
292
+ export function defaultArrowPosition() {
293
+ const ep = defaultArrowEndpoints();
294
+ return arrowBoundingBox(ep.fromX, ep.fromY, ep.toX, ep.toY);
295
+ }
296
+ export function createBadgeLayer(overrides = {}) {
297
+ const pos = defaultBadgePosition();
298
+ return {
299
+ id: generateId(),
300
+ type: "badge",
301
+ x: pos.x,
302
+ y: pos.y,
303
+ width: pos.width,
304
+ height: pos.height,
305
+ rotation: 0,
306
+ rotateX: 0,
307
+ rotateY: 0,
308
+ zIndex: zIndexCounter++,
309
+ locked: false,
310
+ visible: true,
311
+ opacity: 1,
312
+ ...DEFAULT_SHADOW,
313
+ badgeStyle: "label",
314
+ text: "Editor's Choice",
315
+ fontSize: 32,
316
+ fontFamily: "system-ui",
317
+ fontWeight: 700,
318
+ color: "#ffffff",
319
+ backgroundColor: "#000000",
320
+ backgroundOpacity: 0.8,
321
+ borderRadius: 100,
322
+ iconType: "none",
323
+ ...overrides,
324
+ };
325
+ }
326
+ export function createArrowLayer(overrides = {}) {
327
+ const ep = defaultArrowEndpoints();
328
+ const fromX = overrides.fromX ?? ep.fromX;
329
+ const fromY = overrides.fromY ?? ep.fromY;
330
+ const toX = overrides.toX ?? ep.toX;
331
+ const toY = overrides.toY ?? ep.toY;
332
+ const box = arrowBoundingBox(fromX, fromY, toX, toY);
333
+ return {
334
+ id: generateId(),
335
+ type: "arrow",
336
+ x: box.x,
337
+ y: box.y,
338
+ width: box.width,
339
+ height: box.height,
340
+ rotation: 0,
341
+ rotateX: 0,
342
+ rotateY: 0,
343
+ zIndex: zIndexCounter++,
344
+ locked: false,
345
+ visible: true,
346
+ opacity: 1,
347
+ ...DEFAULT_SHADOW,
348
+ strokeColor: "#ffffff",
349
+ strokeWidth: 6,
350
+ headStyle: "triangle",
351
+ curvature: 30,
352
+ dashed: false,
353
+ fromX,
354
+ fromY,
355
+ toX,
356
+ toY,
357
+ ...overrides,
358
+ };
359
+ }
360
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Design knowledge exposed to LLMs via MCP tools.
3
+ * Curated from the app's font, palette, and gradient libraries.
4
+ */
5
+ export declare const FONTS: {
6
+ family: string;
7
+ category: string;
8
+ weights: number[];
9
+ note: string;
10
+ }[];
11
+ export declare const PALETTES: {
12
+ id: string;
13
+ name: string;
14
+ colors: string[];
15
+ textColor: string;
16
+ vibe: string;
17
+ }[];
18
+ export declare const GRADIENTS: {
19
+ id: string;
20
+ name: string;
21
+ from: string;
22
+ to: string;
23
+ direction: number;
24
+ vibe: string;
25
+ }[];
26
+ //# sourceMappingURL=design.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,KAAK;;;;;GAwBjB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;GAgBpB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;GAerB,CAAC"}
package/dist/design.js ADDED
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Design knowledge exposed to LLMs via MCP tools.
3
+ * Curated from the app's font, palette, and gradient libraries.
4
+ */
5
+ export const FONTS = [
6
+ // Sans-serif (modern, clean — best for app screenshots)
7
+ { family: "Inter", category: "sans-serif", weights: [400, 500, 700, 900], note: "Default. Clean, modern. Best all-rounder." },
8
+ { family: "Poppins", category: "sans-serif", weights: [400, 500, 700, 900], note: "Geometric, friendly. Great for consumer apps." },
9
+ { family: "Montserrat", category: "sans-serif", weights: [400, 500, 700, 900], note: "Elegant, versatile. Good for headlines." },
10
+ { family: "DM Sans", category: "sans-serif", weights: [400, 500, 700], note: "Compact, readable. Good for subtitles." },
11
+ { family: "Plus Jakarta Sans", category: "sans-serif", weights: [400, 500, 700], note: "Modern, professional." },
12
+ { family: "Outfit", category: "sans-serif", weights: [400, 500, 700, 900], note: "Contemporary, slightly rounded." },
13
+ { family: "Space Grotesk", category: "sans-serif", weights: [400, 500, 700], note: "Techy, distinctive. Good for dev tools." },
14
+ { family: "Sora", category: "sans-serif", weights: [400, 500, 700], note: "Geometric, balanced." },
15
+ { family: "Figtree", category: "sans-serif", weights: [400, 500, 700, 900], note: "Friendly, approachable." },
16
+ { family: "Manrope", category: "sans-serif", weights: [400, 500, 700], note: "Semi-geometric, modern." },
17
+ // Serif (premium, editorial feel)
18
+ { family: "Playfair Display", category: "serif", weights: [400, 700, 900], note: "Elegant, high-contrast. Luxury/editorial." },
19
+ { family: "DM Serif Display", category: "serif", weights: [400], note: "Sharp, contemporary serif. Great for headlines." },
20
+ { family: "Lora", category: "serif", weights: [400, 500, 700], note: "Readable, balanced serif." },
21
+ // Display (bold, attention-grabbing headlines)
22
+ { family: "Bebas Neue", category: "display", weights: [400], note: "Tall, condensed. Impact headlines." },
23
+ { family: "Oswald", category: "display", weights: [400, 500, 700], note: "Condensed, strong. Good for ALL CAPS." },
24
+ { family: "Syne", category: "display", weights: [400, 500, 700], note: "Distinctive, creative. Standout headlines." },
25
+ { family: "Rubik", category: "display", weights: [400, 500, 700, 900], note: "Rounded, playful yet professional." },
26
+ // Mono (code, technical)
27
+ { family: "JetBrains Mono", category: "mono", weights: [400, 500, 700], note: "Developer tools, code screenshots." },
28
+ { family: "Fira Code", category: "mono", weights: [400, 500, 700], note: "Code with ligatures." },
29
+ ];
30
+ export const PALETTES = [
31
+ { id: "ocean", name: "Ocean", colors: ["#0077B6", "#00B4D8", "#90E0EF"], textColor: "#ffffff", vibe: "Calm, trustworthy. Health, finance, productivity." },
32
+ { id: "sunset", name: "Sunset", colors: ["#FF6B35", "#F7931E", "#FFD23F"], textColor: "#ffffff", vibe: "Warm, energetic. Social, lifestyle, food." },
33
+ { id: "forest", name: "Forest", colors: ["#2D6A4F", "#40916C", "#95D5B2"], textColor: "#ffffff", vibe: "Natural, grounded. Wellness, sustainability." },
34
+ { id: "neon", name: "Neon", colors: ["#7209B7", "#F72585", "#4CC9F0"], textColor: "#ffffff", vibe: "Bold, electric. Gaming, entertainment, social." },
35
+ { id: "pastel", name: "Pastel", colors: ["#FFB3BA", "#BAE1FF", "#BAFFC9"], textColor: "#333333", vibe: "Soft, gentle. Kids, wellness, lifestyle." },
36
+ { id: "corporate", name: "Corporate", colors: ["#1B4965", "#2C6E8A", "#5FA8D3"], textColor: "#ffffff", vibe: "Professional, serious. Enterprise, B2B." },
37
+ { id: "dark-mode", name: "Dark Mode", colors: ["#1A1A2E", "#16213E", "#0F3460"], textColor: "#E0E0E0", vibe: "Sleek, modern. Dev tools, premium apps." },
38
+ { id: "lavender", name: "Lavender", colors: ["#7B68EE", "#9370DB", "#E6E6FA"], textColor: "#ffffff", vibe: "Creative, dreamy. Design, art, meditation." },
39
+ { id: "mint", name: "Mint", colors: ["#00C9A7", "#00B894", "#55EFC4"], textColor: "#ffffff", vibe: "Fresh, clean. Health, fintech." },
40
+ { id: "royal", name: "Royal", colors: ["#1A0533", "#3A0CA3", "#7209B7"], textColor: "#ffffff", vibe: "Luxurious, premium. Exclusive apps." },
41
+ { id: "fire", name: "Fire", colors: ["#D00000", "#E85D04", "#FAA307"], textColor: "#ffffff", vibe: "Intense, urgent. Fitness, sports, deals." },
42
+ { id: "sky", name: "Sky", colors: ["#4361EE", "#4895EF", "#4CC9F0"], textColor: "#ffffff", vibe: "Open, optimistic. Productivity, travel." },
43
+ { id: "rose", name: "Rose", colors: ["#590D22", "#A4133C", "#FF4D6D"], textColor: "#ffffff", vibe: "Passionate, feminine. Beauty, dating." },
44
+ { id: "charcoal", name: "Charcoal", colors: ["#2B2D42", "#3D405B", "#8D99AE"], textColor: "#EDF2F4", vibe: "Sophisticated, minimal. Any premium app." },
45
+ { id: "peach", name: "Peach", colors: ["#FFCDB2", "#FFB4A2", "#E5989B"], textColor: "#2D2D2D", vibe: "Warm, inviting. Lifestyle, wellness." },
46
+ ];
47
+ export const GRADIENTS = [
48
+ { id: "deep-blue", name: "Deep Blue", from: "#6A11CB", to: "#2575FC", direction: 135, vibe: "Tech, modern" },
49
+ { id: "purple-blue", name: "Purple Blue", from: "#7F00FF", to: "#E100FF", direction: 135, vibe: "Creative, bold" },
50
+ { id: "ocean-view", name: "Ocean View", from: "#00C6FF", to: "#0072FF", direction: 135, vibe: "Clean, trustworthy" },
51
+ { id: "lush", name: "Lush", from: "#56AB2F", to: "#A8E063", direction: 135, vibe: "Fresh, natural" },
52
+ { id: "sunny-morning", name: "Sunny Morning", from: "#F6D365", to: "#FDA085", direction: 135, vibe: "Warm, friendly" },
53
+ { id: "cosmic", name: "Cosmic", from: "#FF00CC", to: "#333399", direction: 135, vibe: "Bold, dramatic" },
54
+ { id: "coal", name: "Coal", from: "#EB5757", to: "#000000", direction: 135, vibe: "Dark, intense" },
55
+ { id: "warm-flame", name: "Warm Flame", from: "#FF9A9E", to: "#FAD0C4", direction: 135, vibe: "Soft, pastel" },
56
+ { id: "night-fade", name: "Night Fade", from: "#A18CD1", to: "#FBC2EB", direction: 135, vibe: "Dreamy, calm" },
57
+ { id: "mango", name: "Mango", from: "#FFE259", to: "#FFA751", direction: 135, vibe: "Energetic, fun" },
58
+ { id: "tempting-azure", name: "Tempting Azure", from: "#84FAB0", to: "#8FD3F4", direction: 135, vibe: "Fresh, airy" },
59
+ { id: "ripe-malinka", name: "Ripe Malinka", from: "#F093FB", to: "#F5576C", direction: 135, vibe: "Vibrant, feminine" },
60
+ { id: "frozen", name: "Frozen", from: "#403B4A", to: "#E7E9BB", direction: 135, vibe: "Moody, artistic" },
61
+ { id: "near-moon", name: "Near Moon", from: "#5EE7DF", to: "#B490CA", direction: 135, vibe: "Mystical, unique" },
62
+ ];
63
+ //# sourceMappingURL=design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.js","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ApiClient } from "./api-client.js";
2
+ import type { CanvasProject, CanvasScreen } from "./types.js";
3
+ /** Unescape literal \n sequences to real newlines (LLMs send these as two characters). */
4
+ export declare function unescapeNewlines(s: string): string;
5
+ export declare function getProjectAndScreen(api: ApiClient, projectId: string, screenId: string): Promise<{
6
+ project: CanvasProject;
7
+ screenIndex: number;
8
+ } | {
9
+ error: string;
10
+ }>;
11
+ export declare function computeScreenPositions(screens: CanvasScreen[], gap?: number): CanvasScreen[];
12
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAO9E;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EAAE,EACvB,GAAG,SAAM,GACR,YAAY,EAAE,CAShB"}
@@ -0,0 +1,22 @@
1
+ /** Unescape literal \n sequences to real newlines (LLMs send these as two characters). */
2
+ export function unescapeNewlines(s) {
3
+ return s.replace(/\\n/g, "\n");
4
+ }
5
+ export async function getProjectAndScreen(api, projectId, screenId) {
6
+ const project = await api.getProject(projectId);
7
+ const screenIndex = project.screens.findIndex((s) => s.id === screenId);
8
+ if (screenIndex === -1) {
9
+ return { error: `Screen "${screenId}" not found in project.` };
10
+ }
11
+ return { project, screenIndex };
12
+ }
13
+ export function computeScreenPositions(screens, gap = 100) {
14
+ let x = 0;
15
+ return screens.map((screen, i) => {
16
+ const updated = { ...screen, canvasX: x, canvasY: 0 };
17
+ const screenGap = screen.connectedToNext && i < screens.length - 1 ? 0 : gap;
18
+ x += screen.width + screenGap;
19
+ return updated;
20
+ });
21
+ }
22
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAGA,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAc,EACd,SAAiB,EACjB,QAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACxE,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,WAAW,QAAQ,yBAAyB,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAuB,EACvB,GAAG,GAAG,GAAG;IAET,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACtD,MAAM,SAAS,GACb,MAAM,CAAC,eAAe,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7D,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ // Handle `shipshots-mcp init` subcommand
3
+ if (process.argv[2] === "init") {
4
+ const { runInit } = await import("./cli.js");
5
+ await runInit();
6
+ process.exit(0);
7
+ }
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { ApiClient } from "./api-client.js";
11
+ import { registerProjectTools } from "./tools/project.js";
12
+ import { registerScreenTools } from "./tools/screen.js";
13
+ import { registerLayerTools } from "./tools/layers.js";
14
+ import { registerExportTools } from "./tools/export.js";
15
+ import { registerVideoTools } from "./tools/video.js";
16
+ import { registerDuplicateTools } from "./tools/duplicate.js";
17
+ import { registerBatchTools } from "./tools/batch.js";
18
+ const apiUrl = process.env.SHIPSHOTS_API_URL;
19
+ if (!apiUrl) {
20
+ console.error("Error: SHIPSHOTS_API_URL environment variable is required.\n" +
21
+ "Set it to the base URL of your Shipshots instance (e.g. http://localhost:3000).");
22
+ process.exit(1);
23
+ }
24
+ const apiToken = process.env.SHIPSHOTS_API_TOKEN;
25
+ if (!apiToken) {
26
+ console.error("Error: SHIPSHOTS_API_TOKEN environment variable is required.\n" +
27
+ "Generate a token in Settings > MCP Tokens in your Shipshots instance.");
28
+ process.exit(1);
29
+ }
30
+ const server = new McpServer({
31
+ name: "shipshots",
32
+ version: "0.1.0",
33
+ });
34
+ const api = new ApiClient(apiUrl, apiToken);
35
+ registerProjectTools(server, api);
36
+ registerScreenTools(server, api);
37
+ registerLayerTools(server, api);
38
+ registerExportTools(server, api);
39
+ registerVideoTools(server, api);
40
+ registerDuplicateTools(server, api);
41
+ registerBatchTools(server, api);
42
+ const transport = new StdioServerTransport();
43
+ await server.connect(transport);
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,yCAAyC;AACzC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,OAAO,EAAE,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,KAAK,CACX,8DAA8D;QAC9D,iFAAiF,CAClF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;IACd,OAAO,CAAC,KAAK,CACX,gEAAgE;QAChE,uEAAuE,CACxE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE5C,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAChC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAChC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACpC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerBatchTools(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/tools/batch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAwJlD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAiJ1E"}