@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.
- package/README.md +35 -2
- package/dist/agent-recipes.d.ts +268 -0
- package/dist/agent-recipes.js +637 -0
- package/dist/agent-recipes.js.map +1 -1
- package/dist/command-queue.js +16 -0
- package/dist/command-queue.js.map +1 -1
- package/dist/http-api.d.ts +1 -0
- package/dist/http-api.js +7 -2
- package/dist/http-api.js.map +1 -1
- package/dist/mcp-factory.js +11 -1
- package/dist/mcp-factory.js.map +1 -1
- package/dist/sxl-mcp-instructions.js +142 -2
- package/dist/sxl-mcp-instructions.js.map +1 -1
- package/dist/tools/audit.d.ts +49 -0
- package/dist/tools/audit.js +83 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/catalogue-bootstrap.js +34 -0
- package/dist/tools/catalogue-bootstrap.js.map +1 -1
- package/dist/tools/compositions-orchestration.d.ts +91 -0
- package/dist/tools/compositions-orchestration.js +101 -0
- package/dist/tools/compositions-orchestration.js.map +1 -0
- package/dist/tools/mockup.d.ts +323 -0
- package/dist/tools/mockup.js +206 -0
- package/dist/tools/mockup.js.map +1 -0
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/resources.d.ts +1 -1
- package/dist/tools/resources.js +52 -2
- package/dist/tools/resources.js.map +1 -1
- package/dist/tools/styles-orchestration.d.ts +544 -0
- package/dist/tools/styles-orchestration.js +175 -0
- package/dist/tools/styles-orchestration.js.map +1 -0
- package/dist/tools/tokens.d.ts +60 -60
- package/dist/tools/variables-orchestration.d.ts +20 -0
- package/dist/tools/variables-orchestration.js +116 -0
- package/dist/tools/variables-orchestration.js.map +1 -0
- package/dist/workspace-blob-http.d.ts +9 -0
- package/dist/workspace-blob-http.js +154 -0
- package/dist/workspace-blob-http.js.map +1 -0
- package/dist/workspace-blob-store.d.ts +12 -0
- package/dist/workspace-blob-store.js +87 -0
- package/dist/workspace-blob-store.js.map +1 -0
- 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":"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"}
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -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;
|
|
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
|
*
|
package/dist/tools/resources.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAEL,gBAAgB,GACjB,MAAM,qEAAqE,CAAC;AAC7E,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/tools/resources.ts"],"names":[],"mappings":"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"}
|