@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,206 @@
1
+ /**
2
+ * Mockup-from-DesignSystem — Bridge platform Phase D tools.
3
+ *
4
+ * "Thick" commands that compose existing Figma components into mockups
5
+ * without `use_figma` scripts or temporary JSON files:
6
+ *
7
+ * - `find_components` — READ-ONLY catalogue of local + (optional)
8
+ * library components used in this file. Paginated, includes
9
+ * componentPropertyDefinitions so the agent can build override payloads
10
+ * up front.
11
+ * - `build_mockup` — assemble an auto-layout mockup from an
12
+ * ordered item tree (`instance | section | spacer | text`). Supports
13
+ * property / text / fill-binding overrides per instance and recursive
14
+ * sections. `dryRun: true` returns the plan without touching the canvas.
15
+ * - `apply_mockup_dataset` — clone a template per row and apply
16
+ * row-specific overrides. Useful when N cards need to be rendered from
17
+ * a list. `dryRun` supported.
18
+ *
19
+ * Token-economy: every command surfaces summary counts + per-item / per-row
20
+ * errors so the agent never has to re-run the entire call to debug a single
21
+ * bad item.
22
+ */
23
+ import { z } from "zod";
24
+ import { callPluginCommand } from "./shared.js";
25
+ // ─── Shared building blocks ──────────────────────────────────────────────────
26
+ const propertyValueZod = z.union([z.string(), z.boolean()]);
27
+ const propertiesMapZod = z.record(z.string(), propertyValueZod);
28
+ const textOverrideZod = z.object({
29
+ layerName: z.string().min(1).describe("TEXT layer name inside the instance to receive `value`."),
30
+ value: z.string().describe("New characters to write into that TEXT layer."),
31
+ });
32
+ const fillBindingZod = z.object({
33
+ layerName: z
34
+ .string()
35
+ .min(1)
36
+ .optional()
37
+ .describe("Optional child-layer name to scope the binding. When omitted, the binding applies to the host node itself."),
38
+ variableId: z.string().min(1).describe("Figma Variable id (must resolve to COLOR)."),
39
+ paintIndex: z
40
+ .number()
41
+ .int()
42
+ .min(0)
43
+ .optional()
44
+ .describe("Which existing fill index to bind. Default: 0 (first fill, which is created if absent)."),
45
+ });
46
+ const sizingSpecZod = z.object({
47
+ mode: z.enum(["HUG", "FIXED", "FILL"]).optional(),
48
+ width: z.number().positive().optional(),
49
+ height: z.number().positive().optional(),
50
+ });
51
+ const paddingSpecZod = z.union([
52
+ z.number().min(0),
53
+ z.object({
54
+ top: z.number().min(0).optional(),
55
+ right: z.number().min(0).optional(),
56
+ bottom: z.number().min(0).optional(),
57
+ left: z.number().min(0).optional(),
58
+ }),
59
+ ]);
60
+ const layoutBackgroundZod = z.union([
61
+ z.object({ hex: z.string().regex(/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/, "hex must be #rrggbb[aa]") }),
62
+ z.object({ variableId: z.string().min(1) }),
63
+ ]);
64
+ const layoutSpecZod = z.object({
65
+ mode: z.enum(["VERTICAL", "HORIZONTAL", "WRAP"]).optional(),
66
+ itemSpacing: z.number().min(0).optional(),
67
+ counterAxisSpacing: z.number().min(0).optional(),
68
+ padding: paddingSpecZod.optional(),
69
+ primaryAxis: z.enum(["MIN", "CENTER", "MAX", "SPACE_BETWEEN"]).optional(),
70
+ counterAxis: z.enum(["MIN", "CENTER", "MAX", "BASELINE"]).optional(),
71
+ width: z.number().positive().optional(),
72
+ height: z.number().positive().optional(),
73
+ background: layoutBackgroundZod.optional(),
74
+ });
75
+ // ─── find_components ─────────────────────────────────────────────────────────
76
+ const findComponentsArgs = {
77
+ query: z
78
+ .string()
79
+ .min(1)
80
+ .optional()
81
+ .describe("Case-insensitive substring match against component name."),
82
+ prefix: z
83
+ .string()
84
+ .min(1)
85
+ .optional()
86
+ .describe("Name prefix match (e.g. 'W' to list SXL DS components)."),
87
+ kind: z
88
+ .enum(["COMPONENT", "COMPONENT_SET", "ALL"])
89
+ .optional()
90
+ .describe("Filter by node kind. Default: ALL."),
91
+ sort: z.enum(["name", "key", "recent"]).optional().describe("Sort order. Default: name."),
92
+ includeProperties: z
93
+ .boolean()
94
+ .optional()
95
+ .describe("Include componentPropertyDefinitions in each entry. Default: true."),
96
+ includeRemoteInstances: z
97
+ .boolean()
98
+ .optional()
99
+ .describe("Also include library components instantiated in this file (deduplicated by main id). Default: false."),
100
+ limit: z.number().int().positive().max(200).optional().describe("Max entries returned. Default: 50."),
101
+ cursor: z.string().optional().describe("Opaque pagination cursor returned by previous call."),
102
+ };
103
+ const mockupItemZod = z.lazy(() => z.discriminatedUnion("kind", [
104
+ z.object({
105
+ kind: z.literal("instance"),
106
+ componentId: z.string().min(1).optional(),
107
+ componentKey: z.string().min(1).optional(),
108
+ componentName: z.string().min(1).optional(),
109
+ name: z.string().optional().describe("Override the resulting instance.name."),
110
+ properties: propertiesMapZod.optional().describe("Component property overrides keyed by base name (e.g. `size`, `variant`). The plugin resolves the internal `name#defId` suffix."),
111
+ textOverrides: z.array(textOverrideZod).optional(),
112
+ fillBindings: z.array(fillBindingZod).optional(),
113
+ layoutSizing: sizingSpecZod.optional(),
114
+ count: z
115
+ .number()
116
+ .int()
117
+ .positive()
118
+ .max(500)
119
+ .optional()
120
+ .describe("Repeat the same instance N times (HUG layouts wrap automatically). Default: 1."),
121
+ }),
122
+ z.object({
123
+ kind: z.literal("spacer"),
124
+ size: z.number().min(0).optional().describe("Square size when fillContainer is false. Default: 8."),
125
+ fillContainer: z.boolean().optional().describe("Stretch along the parent's primary axis."),
126
+ }),
127
+ z.object({
128
+ kind: z.literal("text"),
129
+ value: z.string(),
130
+ name: z.string().optional(),
131
+ fontSize: z.number().positive().optional(),
132
+ fontName: z
133
+ .object({ family: z.string(), style: z.string() })
134
+ .optional()
135
+ .describe("Defaults to Inter Regular (loaded with safe fallback)."),
136
+ textStyleId: z.string().optional(),
137
+ fillBindings: z.array(fillBindingZod).optional(),
138
+ layoutSizing: sizingSpecZod.optional(),
139
+ }),
140
+ z.object({
141
+ kind: z.literal("section"),
142
+ name: z.string().optional(),
143
+ layout: layoutSpecZod.optional(),
144
+ layoutSizing: sizingSpecZod.optional(),
145
+ items: z.array(mockupItemZod).min(1),
146
+ }),
147
+ ]));
148
+ const buildMockupArgs = {
149
+ name: z
150
+ .string()
151
+ .optional()
152
+ .describe("Container name (default: `Mockup <ISO timestamp>`)."),
153
+ targetParentId: z
154
+ .string()
155
+ .optional()
156
+ .describe("Parent frame id where the new container is created. Mutually exclusive with targetRootId."),
157
+ targetRootId: z
158
+ .string()
159
+ .optional()
160
+ .describe("Existing FRAME id — items are appended into it instead of creating a new container."),
161
+ layout: layoutSpecZod.optional(),
162
+ items: z.array(mockupItemZod).min(1),
163
+ dryRun: z
164
+ .boolean()
165
+ .optional()
166
+ .describe("If true, returns the resolved plan + would-be overrides without touching the canvas."),
167
+ };
168
+ // ─── apply_mockup_dataset ────────────────────────────────────────────────────
169
+ const datasetRowZod = z.object({
170
+ name: z.string().optional(),
171
+ properties: propertiesMapZod.optional(),
172
+ textOverrides: z.array(textOverrideZod).optional(),
173
+ fillBindings: z.array(fillBindingZod).optional(),
174
+ });
175
+ const applyMockupDatasetArgs = {
176
+ templateNodeId: z
177
+ .string()
178
+ .min(1)
179
+ .describe("Scene node id to clone per row (typically an INSTANCE)."),
180
+ targetParentId: z
181
+ .string()
182
+ .optional()
183
+ .describe("Parent frame id for clones. Defaults to the template's parent."),
184
+ rows: z.array(datasetRowZod).min(1).max(1000),
185
+ removeTemplate: z
186
+ .boolean()
187
+ .optional()
188
+ .describe("Remove the original template after the dataset is applied. Default: false."),
189
+ dryRun: z
190
+ .boolean()
191
+ .optional()
192
+ .describe("Preview the plan without writing to the canvas."),
193
+ };
194
+ // ─── Registration ────────────────────────────────────────────────────────────
195
+ export function registerMockupTools(server, queue) {
196
+ server.tool("find_components", "READ-ONLY (Phase D, mockup): paginated catalogue of local Figma COMPONENT / COMPONENT_SET nodes plus, optionally, library components instantiated in this file. Returns id, key, name, parent set, default variant, and componentPropertyDefinitions so the agent can build override payloads for build_mockup without round-tripping use_figma. Use this BEFORE build_mockup to discover correct ids/keys instead of guessing names.", findComponentsArgs, async (args) => callPluginCommand(queue, "find_components", { ...args }));
197
+ server.tool("build_mockup", "Phase D: assemble a Figma auto-layout mockup from a declarative item tree. Items: `instance` (component override + text + fill bindings), `section` (recursive auto-layout frame), `spacer` (rigid or stretchy), `text`. Component resolution: `componentId` (any) → `componentKey` (library import) → `componentName` (local exact match). Property overrides accept the human key (`size`, `variant`); the plugin maps to the internal `name#defId` suffix. `fillBindings` bind COLOR variables to SOLID paints (creates a SOLID if missing). Run with `dryRun: true` first to preview the resolved plan. NEVER hand-write use_figma scripts for this — read sxl://agent/recipes/mockup-builder.", buildMockupArgs, async (args) => callPluginCommand(queue, "build_mockup", { ...args }));
198
+ server.tool("apply_mockup_dataset", "Phase D: clone a template scene node once per row and apply row-specific overrides (properties, text, fill bindings). Use this when the user wants to render N cards / list rows from a structured dataset. `removeTemplate: true` deletes the original after cloning (handy when the template was a placeholder). `dryRun: true` previews without touching the canvas. Per-row failures are reported but never abort the run.", applyMockupDatasetArgs, async (args) => callPluginCommand(queue, "apply_mockup_dataset", { ...args }));
199
+ }
200
+ export const __test_only__ = {
201
+ mockupItemZod,
202
+ buildMockupArgs,
203
+ findComponentsArgs,
204
+ applyMockupDatasetArgs,
205
+ };
206
+ //# sourceMappingURL=mockup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockup.js","sourceRoot":"","sources":["../../src/tools/mockup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,gFAAgF;AAEhF,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAEhE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IAChG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;CAC5E,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,4GAA4G,CAC7G;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACpF,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,yFAAyF,CAAC;CACvG,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC;IAC7B,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACnC,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC;IAClC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oCAAoC,EAAE,yBAAyB,CAAC,EAAE,CAAC;IACpG,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxC,UAAU,EAAE,mBAAmB,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,gFAAgF;AAEhF,MAAM,kBAAkB,GAAG;IACzB,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACvE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;IACtE,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;SAC3C,QAAQ,EAAE;SACV,QAAQ,CAAC,oCAAoC,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACzF,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,oEAAoE,CAAC;IACjF,sBAAsB,EAAE,CAAC;SACtB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,sGAAsG,CACvG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACrG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CAC9F,CAAC;AA2CF,MAAM,aAAa,GAA0B,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACvD,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC3B,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC7E,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC9C,iIAAiI,CAClI;QACD,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;QAClD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;QAChD,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE;QACtC,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gFAAgF,CAAC;KAC9F,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACnG,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KAC3F,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC1C,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;aACjD,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;QACrE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;QAChD,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE;KACvC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE;QAChC,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE;QACtC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACrC,CAAC;CACH,CAA0B,CAC5B,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2FAA2F,CAAC;IACxG,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qFAAqF,CAAC;IAClG,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,sFAAsF,CAAC;CACpG,CAAC;AAEF,gFAAgF;AAEhF,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACvC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;IAClD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG;IAC7B,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,yDAAyD,CAAC;IACtE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7C,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;IACzF,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,iDAAiD,CAAC;CAC/D,CAAC;AAEF,gFAAgF;AAEhF,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,KAAmB;IACxE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,uaAAua,EACva,kBAAkB,EAClB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CACzE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,oqBAAoqB,EACpqB,eAAe,EACf,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CACtE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,gaAAga,EACha,sBAAsB,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAC9E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,aAAa;IACb,eAAe;IACf,kBAAkB;IAClB,sBAAsB;CACvB,CAAC"}
@@ -9,7 +9,7 @@
9
9
  * Each registered category calls `catalogueTool` as it registers its tool, so
10
10
  * there's one source of truth and no drift between docs/registration.
11
11
  */
12
- export type BridgeToolCategory = "diagnostics" | "tokens" | "compositions" | "variables" | "styles" | "canvas" | "data" | "git" | "orchestration";
12
+ export type BridgeToolCategory = "diagnostics" | "tokens" | "compositions" | "compositions-orchestration" | "variables" | "variables-orchestration" | "styles" | "styles-orchestration" | "canvas" | "data" | "git" | "orchestration" | "audit" | "mockup";
13
13
  export type BridgeToolEntry = {
14
14
  name: string;
15
15
  category: BridgeToolCategory;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,SAAS,GAAsB,EAAE,CAAC;AAExC,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0BH,MAAM,SAAS,GAAsB,EAAE,CAAC;AAExC,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChD,CAAC"}
@@ -9,7 +9,7 @@
9
9
  * - sxl://agent/recipes/index → intent router (always read first)
10
10
  * - sxl://agent/recipes/template-discovery → how to find templateNodeId / swatchLayerName
11
11
  * - sxl://agent/recipes/doc-spec-v2 → Doc Spec v2 sections vocabulary
12
- * - sxl://agent/recipes/{id} → machine-readable doc-agent recipes (doc-tokens / doc-component / doc-composition / doc-flow / variable-palette)
12
+ * - sxl://agent/recipes/{id} → machine-readable doc-agent recipes (doc-tokens / doc-component / doc-composition / doc-flow / variable-palette / variable-usage / audit-coverage / find-unused / bulk-variables / auto-bind-from-audit / bulk-styles / style-drift / mockup-builder / bulk-compositions / composition-drift)
13
13
  * - sxl://figma/selection → current Figma selection summary
14
14
  * - sxl://figma/status → plugin status (editor type, mode, ...)
15
15
  *
@@ -9,7 +9,7 @@
9
9
  * - sxl://agent/recipes/index → intent router (always read first)
10
10
  * - sxl://agent/recipes/template-discovery → how to find templateNodeId / swatchLayerName
11
11
  * - sxl://agent/recipes/doc-spec-v2 → Doc Spec v2 sections vocabulary
12
- * - sxl://agent/recipes/{id} → machine-readable doc-agent recipes (doc-tokens / doc-component / doc-composition / doc-flow / variable-palette)
12
+ * - sxl://agent/recipes/{id} → machine-readable doc-agent recipes (doc-tokens / doc-component / doc-composition / doc-flow / variable-palette / variable-usage / audit-coverage / find-unused / bulk-variables / auto-bind-from-audit / bulk-styles / style-drift / mockup-builder / bulk-compositions / composition-drift)
13
13
  * - sxl://figma/selection → current Figma selection summary
14
14
  * - sxl://figma/status → plugin status (editor type, mode, ...)
15
15
  *
@@ -17,7 +17,7 @@
17
17
  * attach them as context without requiring agents to explicitly call tools.
18
18
  */
19
19
  import { ResourceTemplate, } from "../../node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.js";
20
- import { RECIPE_COMPOSE_WITH_VARIABLES, RECIPE_DOC_COMPONENT, RECIPE_DOC_COMPOSITION, RECIPE_DOC_FLOW, RECIPE_DOC_SPEC_V2, RECIPE_DOC_TOKENS, RECIPE_INDEX, RECIPE_SCENARIO_FROM_MARKDOWN, RECIPE_TEMPLATE_DISCOVERY, RECIPE_VARIABLE_PALETTE, } from "../agent-recipes.js";
20
+ import { RECIPE_AUDIT_COVERAGE, RECIPE_AUTO_BIND_FROM_AUDIT, RECIPE_BULK_COMPOSITIONS, RECIPE_BULK_STYLES, RECIPE_BULK_VARIABLES, RECIPE_COMPOSE_WITH_VARIABLES, RECIPE_COMPOSITION_DRIFT, RECIPE_DOC_COMPONENT, RECIPE_DOC_COMPOSITION, RECIPE_DOC_FLOW, RECIPE_DOC_SPEC_V2, RECIPE_DOC_TOKENS, RECIPE_FIND_UNUSED, RECIPE_INDEX, RECIPE_MOCKUP_BUILDER, RECIPE_SCENARIO_FROM_MARKDOWN, RECIPE_STYLE_DRIFT, RECIPE_TEMPLATE_DISCOVERY, RECIPE_VARIABLE_PALETTE, RECIPE_VARIABLE_USAGE, } from "../agent-recipes.js";
21
21
  async function execRaw(queue, commandType, payload = {}) {
22
22
  const r = await queue.execute(commandType, payload);
23
23
  if (r.status !== "completed") {
@@ -145,6 +145,56 @@ export function registerBridgeResources(server, queue) {
145
145
  description: "Parse a markdown scenario document (H1 title, H2 pages, Figma URLs, prose descriptions) and render it as a Figma flow using build_scenario_from_md. Always dryRun first.",
146
146
  mimeType: "application/json",
147
147
  }, async (uri) => asJson(uri.href, RECIPE_SCENARIO_FROM_MARKDOWN));
148
+ server.registerResource("sxl-agent-recipe-variable-usage", "sxl://agent/recipes/variable-usage", {
149
+ title: "SXL — agent recipe: count and visualize variable usage",
150
+ description: "How to answer 'how many times is variable X used' and 'show me everywhere variable X appears': analyze_variable_usage for the summary, find_variable_usages for paginated details, render_variable_usage_page to clone every reference into a fresh Figma page. Resolves transitive aliases automatically.",
151
+ mimeType: "application/json",
152
+ }, async (uri) => asJson(uri.href, RECIPE_VARIABLE_USAGE));
153
+ server.registerResource("sxl-agent-recipe-audit-coverage", "sxl://agent/recipes/audit-coverage", {
154
+ title: "SXL — agent recipe: audit variable / style coverage",
155
+ description: "How to find raw values that should be bound to variables / styles. audit_variable_coverage returns a summary; find_variable_coverage_misses paginates details and surfaces suggestions ready for batch_bind_variables. audit_style_coverage covers the styleId case.",
156
+ mimeType: "application/json",
157
+ }, async (uri) => asJson(uri.href, RECIPE_AUDIT_COVERAGE));
158
+ server.registerResource("sxl-agent-recipe-find-unused", "sxl://agent/recipes/find-unused", {
159
+ title: "SXL — agent recipe: find unused variables and styles",
160
+ description: "How to enumerate local variables and styles that nothing references. Read-only; pair with batch_delete_variables only after explicit user confirmation.",
161
+ mimeType: "application/json",
162
+ }, async (uri) => asJson(uri.href, RECIPE_FIND_UNUSED));
163
+ server.registerResource("sxl-agent-recipe-bulk-variables", "sxl://agent/recipes/bulk-variables", {
164
+ title: "SXL — agent recipe: bulk Variables refactor (Phase B)",
165
+ description: "How to use the Phase B 'thick' commands: import_variable_spec (declarative bulk create / update with aliases), dedupe_variables (merge duplicates), rebind_variable_aliases (rewrite alias targets across modes), analyze_variable_order (read-only ordering analysis). All write commands support dryRun for preview.",
166
+ mimeType: "application/json",
167
+ }, async (uri) => asJson(uri.href, RECIPE_BULK_VARIABLES));
168
+ server.registerResource("sxl-agent-recipe-auto-bind-from-audit", "sxl://agent/recipes/auto-bind-from-audit", {
169
+ title: "SXL — agent recipe: apply audit_variable_coverage suggestions",
170
+ description: "How to convert suggestions from find_variable_coverage_misses into actual variable bindings via apply_coverage_suggestions. Always dryRun: true first to preview the proposed setBoundVariableFor* writes.",
171
+ mimeType: "application/json",
172
+ }, async (uri) => asJson(uri.href, RECIPE_AUTO_BIND_FROM_AUDIT));
173
+ server.registerResource("sxl-agent-recipe-bulk-styles", "sxl://agent/recipes/bulk-styles", {
174
+ title: "SXL — agent recipe: bulk Styles refactor (Phase C)",
175
+ description: "How to use the Phase C 'thick' commands: import_style_spec (declarative bulk create / update of Paint / Text / Effect styles), dedupe_styles (merge duplicates byName | bySignature), rebind_style_consumers (rewrite styleId on every consumer node), apply_style_coverage_suggestions (convert find_style_coverage_misses into setStyleId* writes). All write commands support dryRun for preview.",
176
+ mimeType: "application/json",
177
+ }, async (uri) => asJson(uri.href, RECIPE_BULK_STYLES));
178
+ server.registerResource("sxl-agent-recipe-style-drift", "sxl://agent/recipes/style-drift", {
179
+ title: "SXL — agent recipe: audit Paint style drift vs source of truth (Phase C)",
180
+ description: "READ-ONLY drift detection between local PaintStyles and Variables (byName) or explicit token snapshot. audit_style_drift returns findings[] (drift > tolerance) and skipped[] (no matching variable, non-SOLID paint, etc.). Dev-Mode-safe; pair with import_style_spec for the fix.",
181
+ mimeType: "application/json",
182
+ }, async (uri) => asJson(uri.href, RECIPE_STYLE_DRIFT));
183
+ server.registerResource("sxl-agent-recipe-mockup-builder", "sxl://agent/recipes/mockup-builder", {
184
+ title: "SXL — agent recipe: assemble a mockup from existing design-system components (Phase D)",
185
+ description: "How to compose screens / dashboards / lists from existing components in auto-layout. find_components discovers ids + componentPropertyDefinitions; build_mockup assembles a declarative item tree (instance | section | spacer | text) with property / text / fill-binding overrides; apply_mockup_dataset clones a template per dataset row. All write commands support dryRun for preview.",
186
+ mimeType: "application/json",
187
+ }, async (uri) => asJson(uri.href, RECIPE_MOCKUP_BUILDER));
188
+ server.registerResource("sxl-agent-recipe-bulk-compositions", "sxl://agent/recipes/bulk-compositions", {
189
+ title: "SXL — agent recipe: bulk generate / apply compositions (Phase E)",
190
+ description: "How to use bulk_generate_compositions to (re)build many composition components in one call. Filters: fileIds | names | prefix. Operations: auto (manual UX) | generate (force rebuild) | apply (force apply). Per-item error isolation; dryRun preview supported. Pair with audit_composition_drift to surgically fix only drifted components.",
191
+ mimeType: "application/json",
192
+ }, async (uri) => asJson(uri.href, RECIPE_BULK_COMPOSITIONS));
193
+ server.registerResource("sxl-agent-recipe-composition-drift", "sxl://agent/recipes/composition-drift", {
194
+ title: "SXL — agent recipe: audit composition drift vs Figma components (Phase E)",
195
+ description: "READ-ONLY drift detector between composition JSON files in the plugin workspace and the Figma components they tracked. Statuses: linked | unlinked | drift | missing. Fully Dev-Mode-compatible. Pair with bulk_generate_compositions { fileIds: drifted } to fix drift in one round-trip.",
196
+ mimeType: "application/json",
197
+ }, async (uri) => asJson(uri.href, RECIPE_COMPOSITION_DRIFT));
148
198
  server.registerResource("sxl-plugin-status", "sxl://figma/status", {
149
199
  title: "SXL — plugin status",
150
200
  description: "Plugin status snapshot: editorType, mode, isDevMode, writesAllowed, currentPage, selection, session state.",
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/tools/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/tools/resources.ts"],"names":[],"mappings":"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"}