@sxl-studio/bridge 1.5.1 → 1.7.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 (43) hide show
  1. package/README.md +35 -2
  2. package/dist/agent-recipes.d.ts +268 -0
  3. package/dist/agent-recipes.js +637 -0
  4. package/dist/agent-recipes.js.map +1 -1
  5. package/dist/command-queue.js +16 -0
  6. package/dist/command-queue.js.map +1 -1
  7. package/dist/http-api.d.ts +1 -0
  8. package/dist/http-api.js +7 -2
  9. package/dist/http-api.js.map +1 -1
  10. package/dist/mcp-factory.js +11 -1
  11. package/dist/mcp-factory.js.map +1 -1
  12. package/dist/sxl-mcp-instructions.js +142 -2
  13. package/dist/sxl-mcp-instructions.js.map +1 -1
  14. package/dist/tools/audit.d.ts +49 -0
  15. package/dist/tools/audit.js +83 -0
  16. package/dist/tools/audit.js.map +1 -0
  17. package/dist/tools/catalogue-bootstrap.js +34 -0
  18. package/dist/tools/catalogue-bootstrap.js.map +1 -1
  19. package/dist/tools/compositions-orchestration.d.ts +91 -0
  20. package/dist/tools/compositions-orchestration.js +101 -0
  21. package/dist/tools/compositions-orchestration.js.map +1 -0
  22. package/dist/tools/mockup.d.ts +323 -0
  23. package/dist/tools/mockup.js +206 -0
  24. package/dist/tools/mockup.js.map +1 -0
  25. package/dist/tools/registry.d.ts +1 -1
  26. package/dist/tools/registry.js.map +1 -1
  27. package/dist/tools/resources.d.ts +1 -1
  28. package/dist/tools/resources.js +52 -2
  29. package/dist/tools/resources.js.map +1 -1
  30. package/dist/tools/styles-orchestration.d.ts +544 -0
  31. package/dist/tools/styles-orchestration.js +175 -0
  32. package/dist/tools/styles-orchestration.js.map +1 -0
  33. package/dist/tools/tokens.d.ts +60 -60
  34. package/dist/tools/variables-orchestration.d.ts +20 -0
  35. package/dist/tools/variables-orchestration.js +116 -0
  36. package/dist/tools/variables-orchestration.js.map +1 -0
  37. package/dist/workspace-blob-http.d.ts +9 -0
  38. package/dist/workspace-blob-http.js +154 -0
  39. package/dist/workspace-blob-http.js.map +1 -0
  40. package/dist/workspace-blob-store.d.ts +12 -0
  41. package/dist/workspace-blob-store.js +87 -0
  42. package/dist/workspace-blob-store.js.map +1 -0
  43. package/package.json +3 -2
@@ -0,0 +1,544 @@
1
+ /**
2
+ * Styles orchestration — Bridge platform Phase C tools.
3
+ *
4
+ * "Thick" commands that wrap multi-step Figma local Style refactors:
5
+ * - `import_style_spec` — declarative bulk create / update of
6
+ * PaintStyle / TextStyle / EffectStyle (idempotent, dry-run-aware).
7
+ * - `dedupe_styles` — find / merge duplicates by name or
8
+ * property signature; dry-run by default, apply mode rebinds consumers
9
+ * to the survivor before deleting the duplicate.
10
+ * - `rebind_style_consumers` — bulk rewrite styleId on every node
11
+ * referencing the source via `fillStyleId | strokeStyleId | textStyleId |
12
+ * effectStyleId`.
13
+ * - `audit_style_drift` — READ-ONLY: detect drift between
14
+ * local Paint styles and the source-of-truth (like-named local Variables
15
+ * or explicit `{ styleId, expectedColor }` expectations). Fully Dev-Mode-
16
+ * compatible.
17
+ * - `apply_style_coverage_suggestions` — convert
18
+ * `find_style_coverage_misses` records into setStyleId* writes. Dry-run by
19
+ * default; agent shows preview, then re-calls with `dryRun: false`.
20
+ *
21
+ * Token economy:
22
+ * - dry-run / preview returns the exact plan WITHOUT touching the canvas.
23
+ * - per-item errors / skipped reasons are part of the report — no whole-call
24
+ * aborts on a single bad entry.
25
+ * - rich Zod schemas keep payloads strict so agents see the contract up
26
+ * front and avoid retries on shape errors.
27
+ */
28
+ import { z } from "zod";
29
+ import type { McpServer } from "../../node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.js";
30
+ import type { CommandQueue } from "../command-queue.js";
31
+ export declare const stylesOrchestrationSchemas: {
32
+ styleSpecZod: z.ZodEffects<z.ZodObject<{
33
+ paintStyles: z.ZodOptional<z.ZodArray<z.ZodObject<{
34
+ name: z.ZodString;
35
+ paints: z.ZodArray<z.ZodUnion<[z.ZodObject<{
36
+ type: z.ZodLiteral<"SOLID">;
37
+ color: z.ZodString;
38
+ opacity: z.ZodOptional<z.ZodNumber>;
39
+ visible: z.ZodOptional<z.ZodBoolean>;
40
+ blendMode: z.ZodOptional<z.ZodString>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ type: "SOLID";
43
+ color: string;
44
+ opacity?: number | undefined;
45
+ visible?: boolean | undefined;
46
+ blendMode?: string | undefined;
47
+ }, {
48
+ type: "SOLID";
49
+ color: string;
50
+ opacity?: number | undefined;
51
+ visible?: boolean | undefined;
52
+ blendMode?: string | undefined;
53
+ }>, z.ZodObject<{
54
+ type: z.ZodLiteral<"SOLID">;
55
+ color: z.ZodObject<{
56
+ r: z.ZodNumber;
57
+ g: z.ZodNumber;
58
+ b: z.ZodNumber;
59
+ }, "strip", z.ZodTypeAny, {
60
+ r: number;
61
+ g: number;
62
+ b: number;
63
+ }, {
64
+ r: number;
65
+ g: number;
66
+ b: number;
67
+ }>;
68
+ opacity: z.ZodOptional<z.ZodNumber>;
69
+ visible: z.ZodOptional<z.ZodBoolean>;
70
+ blendMode: z.ZodOptional<z.ZodString>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ type: "SOLID";
73
+ color: {
74
+ r: number;
75
+ g: number;
76
+ b: number;
77
+ };
78
+ opacity?: number | undefined;
79
+ visible?: boolean | undefined;
80
+ blendMode?: string | undefined;
81
+ }, {
82
+ type: "SOLID";
83
+ color: {
84
+ r: number;
85
+ g: number;
86
+ b: number;
87
+ };
88
+ opacity?: number | undefined;
89
+ visible?: boolean | undefined;
90
+ blendMode?: string | undefined;
91
+ }>, z.ZodRecord<z.ZodString, z.ZodUnknown>]>, "many">;
92
+ description: z.ZodOptional<z.ZodString>;
93
+ }, "strip", z.ZodTypeAny, {
94
+ name: string;
95
+ paints: (Record<string, unknown> | {
96
+ type: "SOLID";
97
+ color: string;
98
+ opacity?: number | undefined;
99
+ visible?: boolean | undefined;
100
+ blendMode?: string | undefined;
101
+ } | {
102
+ type: "SOLID";
103
+ color: {
104
+ r: number;
105
+ g: number;
106
+ b: number;
107
+ };
108
+ opacity?: number | undefined;
109
+ visible?: boolean | undefined;
110
+ blendMode?: string | undefined;
111
+ })[];
112
+ description?: string | undefined;
113
+ }, {
114
+ name: string;
115
+ paints: (Record<string, unknown> | {
116
+ type: "SOLID";
117
+ color: string;
118
+ opacity?: number | undefined;
119
+ visible?: boolean | undefined;
120
+ blendMode?: string | undefined;
121
+ } | {
122
+ type: "SOLID";
123
+ color: {
124
+ r: number;
125
+ g: number;
126
+ b: number;
127
+ };
128
+ opacity?: number | undefined;
129
+ visible?: boolean | undefined;
130
+ blendMode?: string | undefined;
131
+ })[];
132
+ description?: string | undefined;
133
+ }>, "many">>;
134
+ textStyles: z.ZodOptional<z.ZodArray<z.ZodObject<{
135
+ name: z.ZodString;
136
+ fontName: z.ZodObject<{
137
+ family: z.ZodString;
138
+ style: z.ZodString;
139
+ }, "strip", z.ZodTypeAny, {
140
+ family: string;
141
+ style: string;
142
+ }, {
143
+ family: string;
144
+ style: string;
145
+ }>;
146
+ fontSize: z.ZodOptional<z.ZodNumber>;
147
+ lineHeight: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
148
+ unit: z.ZodLiteral<"AUTO">;
149
+ }, "strip", z.ZodTypeAny, {
150
+ unit: "AUTO";
151
+ }, {
152
+ unit: "AUTO";
153
+ }>, z.ZodObject<{
154
+ unit: z.ZodLiteral<"PIXELS">;
155
+ value: z.ZodNumber;
156
+ }, "strip", z.ZodTypeAny, {
157
+ value: number;
158
+ unit: "PIXELS";
159
+ }, {
160
+ value: number;
161
+ unit: "PIXELS";
162
+ }>, z.ZodObject<{
163
+ unit: z.ZodLiteral<"PERCENT">;
164
+ value: z.ZodNumber;
165
+ }, "strip", z.ZodTypeAny, {
166
+ value: number;
167
+ unit: "PERCENT";
168
+ }, {
169
+ value: number;
170
+ unit: "PERCENT";
171
+ }>]>>;
172
+ letterSpacing: z.ZodOptional<z.ZodObject<{
173
+ unit: z.ZodEnum<["PIXELS", "PERCENT"]>;
174
+ value: z.ZodNumber;
175
+ }, "strip", z.ZodTypeAny, {
176
+ value: number;
177
+ unit: "PIXELS" | "PERCENT";
178
+ }, {
179
+ value: number;
180
+ unit: "PIXELS" | "PERCENT";
181
+ }>>;
182
+ paragraphSpacing: z.ZodOptional<z.ZodNumber>;
183
+ paragraphIndent: z.ZodOptional<z.ZodNumber>;
184
+ textCase: z.ZodOptional<z.ZodEnum<["ORIGINAL", "UPPER", "LOWER", "TITLE", "SMALL_CAPS", "SMALL_CAPS_FORCED"]>>;
185
+ textDecoration: z.ZodOptional<z.ZodEnum<["NONE", "UNDERLINE", "STRIKETHROUGH"]>>;
186
+ description: z.ZodOptional<z.ZodString>;
187
+ }, "strip", z.ZodTypeAny, {
188
+ name: string;
189
+ fontName: {
190
+ family: string;
191
+ style: string;
192
+ };
193
+ description?: string | undefined;
194
+ fontSize?: number | undefined;
195
+ lineHeight?: {
196
+ unit: "AUTO";
197
+ } | {
198
+ value: number;
199
+ unit: "PIXELS";
200
+ } | {
201
+ value: number;
202
+ unit: "PERCENT";
203
+ } | undefined;
204
+ letterSpacing?: {
205
+ value: number;
206
+ unit: "PIXELS" | "PERCENT";
207
+ } | undefined;
208
+ textDecoration?: "NONE" | "UNDERLINE" | "STRIKETHROUGH" | undefined;
209
+ textCase?: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED" | undefined;
210
+ paragraphSpacing?: number | undefined;
211
+ paragraphIndent?: number | undefined;
212
+ }, {
213
+ name: string;
214
+ fontName: {
215
+ family: string;
216
+ style: string;
217
+ };
218
+ description?: string | undefined;
219
+ fontSize?: number | undefined;
220
+ lineHeight?: {
221
+ unit: "AUTO";
222
+ } | {
223
+ value: number;
224
+ unit: "PIXELS";
225
+ } | {
226
+ value: number;
227
+ unit: "PERCENT";
228
+ } | undefined;
229
+ letterSpacing?: {
230
+ value: number;
231
+ unit: "PIXELS" | "PERCENT";
232
+ } | undefined;
233
+ textDecoration?: "NONE" | "UNDERLINE" | "STRIKETHROUGH" | undefined;
234
+ textCase?: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED" | undefined;
235
+ paragraphSpacing?: number | undefined;
236
+ paragraphIndent?: number | undefined;
237
+ }>, "many">>;
238
+ effectStyles: z.ZodOptional<z.ZodArray<z.ZodObject<{
239
+ name: z.ZodString;
240
+ effects: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
241
+ description: z.ZodOptional<z.ZodString>;
242
+ }, "strip", z.ZodTypeAny, {
243
+ name: string;
244
+ effects: Record<string, unknown>[];
245
+ description?: string | undefined;
246
+ }, {
247
+ name: string;
248
+ effects: Record<string, unknown>[];
249
+ description?: string | undefined;
250
+ }>, "many">>;
251
+ dryRun: z.ZodOptional<z.ZodBoolean>;
252
+ }, "strip", z.ZodTypeAny, {
253
+ dryRun?: boolean | undefined;
254
+ paintStyles?: {
255
+ name: string;
256
+ paints: (Record<string, unknown> | {
257
+ type: "SOLID";
258
+ color: string;
259
+ opacity?: number | undefined;
260
+ visible?: boolean | undefined;
261
+ blendMode?: string | undefined;
262
+ } | {
263
+ type: "SOLID";
264
+ color: {
265
+ r: number;
266
+ g: number;
267
+ b: number;
268
+ };
269
+ opacity?: number | undefined;
270
+ visible?: boolean | undefined;
271
+ blendMode?: string | undefined;
272
+ })[];
273
+ description?: string | undefined;
274
+ }[] | undefined;
275
+ textStyles?: {
276
+ name: string;
277
+ fontName: {
278
+ family: string;
279
+ style: string;
280
+ };
281
+ description?: string | undefined;
282
+ fontSize?: number | undefined;
283
+ lineHeight?: {
284
+ unit: "AUTO";
285
+ } | {
286
+ value: number;
287
+ unit: "PIXELS";
288
+ } | {
289
+ value: number;
290
+ unit: "PERCENT";
291
+ } | undefined;
292
+ letterSpacing?: {
293
+ value: number;
294
+ unit: "PIXELS" | "PERCENT";
295
+ } | undefined;
296
+ textDecoration?: "NONE" | "UNDERLINE" | "STRIKETHROUGH" | undefined;
297
+ textCase?: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED" | undefined;
298
+ paragraphSpacing?: number | undefined;
299
+ paragraphIndent?: number | undefined;
300
+ }[] | undefined;
301
+ effectStyles?: {
302
+ name: string;
303
+ effects: Record<string, unknown>[];
304
+ description?: string | undefined;
305
+ }[] | undefined;
306
+ }, {
307
+ dryRun?: boolean | undefined;
308
+ paintStyles?: {
309
+ name: string;
310
+ paints: (Record<string, unknown> | {
311
+ type: "SOLID";
312
+ color: string;
313
+ opacity?: number | undefined;
314
+ visible?: boolean | undefined;
315
+ blendMode?: string | undefined;
316
+ } | {
317
+ type: "SOLID";
318
+ color: {
319
+ r: number;
320
+ g: number;
321
+ b: number;
322
+ };
323
+ opacity?: number | undefined;
324
+ visible?: boolean | undefined;
325
+ blendMode?: string | undefined;
326
+ })[];
327
+ description?: string | undefined;
328
+ }[] | undefined;
329
+ textStyles?: {
330
+ name: string;
331
+ fontName: {
332
+ family: string;
333
+ style: string;
334
+ };
335
+ description?: string | undefined;
336
+ fontSize?: number | undefined;
337
+ lineHeight?: {
338
+ unit: "AUTO";
339
+ } | {
340
+ value: number;
341
+ unit: "PIXELS";
342
+ } | {
343
+ value: number;
344
+ unit: "PERCENT";
345
+ } | undefined;
346
+ letterSpacing?: {
347
+ value: number;
348
+ unit: "PIXELS" | "PERCENT";
349
+ } | undefined;
350
+ textDecoration?: "NONE" | "UNDERLINE" | "STRIKETHROUGH" | undefined;
351
+ textCase?: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED" | undefined;
352
+ paragraphSpacing?: number | undefined;
353
+ paragraphIndent?: number | undefined;
354
+ }[] | undefined;
355
+ effectStyles?: {
356
+ name: string;
357
+ effects: Record<string, unknown>[];
358
+ description?: string | undefined;
359
+ }[] | undefined;
360
+ }>, {
361
+ dryRun?: boolean | undefined;
362
+ paintStyles?: {
363
+ name: string;
364
+ paints: (Record<string, unknown> | {
365
+ type: "SOLID";
366
+ color: string;
367
+ opacity?: number | undefined;
368
+ visible?: boolean | undefined;
369
+ blendMode?: string | undefined;
370
+ } | {
371
+ type: "SOLID";
372
+ color: {
373
+ r: number;
374
+ g: number;
375
+ b: number;
376
+ };
377
+ opacity?: number | undefined;
378
+ visible?: boolean | undefined;
379
+ blendMode?: string | undefined;
380
+ })[];
381
+ description?: string | undefined;
382
+ }[] | undefined;
383
+ textStyles?: {
384
+ name: string;
385
+ fontName: {
386
+ family: string;
387
+ style: string;
388
+ };
389
+ description?: string | undefined;
390
+ fontSize?: number | undefined;
391
+ lineHeight?: {
392
+ unit: "AUTO";
393
+ } | {
394
+ value: number;
395
+ unit: "PIXELS";
396
+ } | {
397
+ value: number;
398
+ unit: "PERCENT";
399
+ } | undefined;
400
+ letterSpacing?: {
401
+ value: number;
402
+ unit: "PIXELS" | "PERCENT";
403
+ } | undefined;
404
+ textDecoration?: "NONE" | "UNDERLINE" | "STRIKETHROUGH" | undefined;
405
+ textCase?: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED" | undefined;
406
+ paragraphSpacing?: number | undefined;
407
+ paragraphIndent?: number | undefined;
408
+ }[] | undefined;
409
+ effectStyles?: {
410
+ name: string;
411
+ effects: Record<string, unknown>[];
412
+ description?: string | undefined;
413
+ }[] | undefined;
414
+ }, {
415
+ dryRun?: boolean | undefined;
416
+ paintStyles?: {
417
+ name: string;
418
+ paints: (Record<string, unknown> | {
419
+ type: "SOLID";
420
+ color: string;
421
+ opacity?: number | undefined;
422
+ visible?: boolean | undefined;
423
+ blendMode?: string | undefined;
424
+ } | {
425
+ type: "SOLID";
426
+ color: {
427
+ r: number;
428
+ g: number;
429
+ b: number;
430
+ };
431
+ opacity?: number | undefined;
432
+ visible?: boolean | undefined;
433
+ blendMode?: string | undefined;
434
+ })[];
435
+ description?: string | undefined;
436
+ }[] | undefined;
437
+ textStyles?: {
438
+ name: string;
439
+ fontName: {
440
+ family: string;
441
+ style: string;
442
+ };
443
+ description?: string | undefined;
444
+ fontSize?: number | undefined;
445
+ lineHeight?: {
446
+ unit: "AUTO";
447
+ } | {
448
+ value: number;
449
+ unit: "PIXELS";
450
+ } | {
451
+ value: number;
452
+ unit: "PERCENT";
453
+ } | undefined;
454
+ letterSpacing?: {
455
+ value: number;
456
+ unit: "PIXELS" | "PERCENT";
457
+ } | undefined;
458
+ textDecoration?: "NONE" | "UNDERLINE" | "STRIKETHROUGH" | undefined;
459
+ textCase?: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED" | undefined;
460
+ paragraphSpacing?: number | undefined;
461
+ paragraphIndent?: number | undefined;
462
+ }[] | undefined;
463
+ effectStyles?: {
464
+ name: string;
465
+ effects: Record<string, unknown>[];
466
+ description?: string | undefined;
467
+ }[] | undefined;
468
+ }>;
469
+ rebindMappingZod: z.ZodObject<{
470
+ fromStyleId: z.ZodString;
471
+ toStyleId: z.ZodString;
472
+ field: z.ZodOptional<z.ZodEnum<["fillStyleId", "strokeStyleId", "textStyleId", "effectStyleId"]>>;
473
+ }, "strip", z.ZodTypeAny, {
474
+ fromStyleId: string;
475
+ toStyleId: string;
476
+ field?: "textStyleId" | "fillStyleId" | "strokeStyleId" | "effectStyleId" | undefined;
477
+ }, {
478
+ fromStyleId: string;
479
+ toStyleId: string;
480
+ field?: "textStyleId" | "fillStyleId" | "strokeStyleId" | "effectStyleId" | undefined;
481
+ }>;
482
+ driftRequestZod: z.ZodUnion<[z.ZodObject<{
483
+ mode: z.ZodLiteral<"byName-vs-variables">;
484
+ styleType: z.ZodOptional<z.ZodLiteral<"PAINT">>;
485
+ tolerance: z.ZodOptional<z.ZodNumber>;
486
+ }, "strip", z.ZodTypeAny, {
487
+ mode: "byName-vs-variables";
488
+ styleType?: "PAINT" | undefined;
489
+ tolerance?: number | undefined;
490
+ }, {
491
+ mode: "byName-vs-variables";
492
+ styleType?: "PAINT" | undefined;
493
+ tolerance?: number | undefined;
494
+ }>, z.ZodObject<{
495
+ mode: z.ZodLiteral<"explicit">;
496
+ expectations: z.ZodArray<z.ZodObject<{
497
+ styleId: z.ZodString;
498
+ expectedColor: z.ZodString;
499
+ source: z.ZodOptional<z.ZodString>;
500
+ }, "strip", z.ZodTypeAny, {
501
+ styleId: string;
502
+ expectedColor: string;
503
+ source?: string | undefined;
504
+ }, {
505
+ styleId: string;
506
+ expectedColor: string;
507
+ source?: string | undefined;
508
+ }>, "many">;
509
+ tolerance: z.ZodOptional<z.ZodNumber>;
510
+ }, "strip", z.ZodTypeAny, {
511
+ mode: "explicit";
512
+ expectations: {
513
+ styleId: string;
514
+ expectedColor: string;
515
+ source?: string | undefined;
516
+ }[];
517
+ tolerance?: number | undefined;
518
+ }, {
519
+ mode: "explicit";
520
+ expectations: {
521
+ styleId: string;
522
+ expectedColor: string;
523
+ source?: string | undefined;
524
+ }[];
525
+ tolerance?: number | undefined;
526
+ }>]>;
527
+ styleCoverageSuggestionZod: z.ZodObject<{
528
+ nodeId: z.ZodString;
529
+ property: z.ZodString;
530
+ styleId: z.ZodString;
531
+ styleName: z.ZodOptional<z.ZodString>;
532
+ }, "strip", z.ZodTypeAny, {
533
+ nodeId: string;
534
+ styleId: string;
535
+ property: string;
536
+ styleName?: string | undefined;
537
+ }, {
538
+ nodeId: string;
539
+ styleId: string;
540
+ property: string;
541
+ styleName?: string | undefined;
542
+ }>;
543
+ };
544
+ export declare function registerStylesOrchestrationTools(server: McpServer, queue: CommandQueue): void;