@efectoapp/mcp-server 0.1.24 → 0.1.27
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +63 -2
- package/dist/cli.js.map +1 -1
- package/dist/tools/state.d.ts.map +1 -1
- package/dist/tools/state.js +53 -9
- package/dist/tools/state.js.map +1 -1
- package/package.json +2 -1
- package/skills/SKILL.md +381 -0
- package/skills/recipes.md +490 -0
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAkQH,wBAAgB,MAAM,IAAI,OAAO,CAqBhC"}
|
package/dist/cli.js
CHANGED
|
@@ -84,6 +84,59 @@ function isClaudeCodeInstalled() {
|
|
|
84
84
|
const claudeDir = path.join(os.homedir(), '.claude');
|
|
85
85
|
return fs.existsSync(claudeDir);
|
|
86
86
|
}
|
|
87
|
+
// Get the path to the bundled skills directory
|
|
88
|
+
function getSkillsSourceDir() {
|
|
89
|
+
return path.join(__dirname, '..', 'skills');
|
|
90
|
+
}
|
|
91
|
+
// Get the target directory for skills (~/.claude/skills/efecto/)
|
|
92
|
+
function getSkillsTargetDir() {
|
|
93
|
+
return path.join(os.homedir(), '.claude', 'skills', 'efecto');
|
|
94
|
+
}
|
|
95
|
+
// Install the design skill files
|
|
96
|
+
function installSkills() {
|
|
97
|
+
const sourceDir = getSkillsSourceDir();
|
|
98
|
+
const targetDir = getSkillsTargetDir();
|
|
99
|
+
// Check if source skills exist
|
|
100
|
+
const skillFile = path.join(sourceDir, 'SKILL.md');
|
|
101
|
+
if (!fs.existsSync(skillFile)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
// Create target directory
|
|
105
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
106
|
+
// Copy skill files
|
|
107
|
+
const files = ['SKILL.md', 'recipes.md'];
|
|
108
|
+
for (const file of files) {
|
|
109
|
+
const src = path.join(sourceDir, file);
|
|
110
|
+
const dest = path.join(targetDir, file);
|
|
111
|
+
if (fs.existsSync(src)) {
|
|
112
|
+
fs.copyFileSync(src, dest);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
// Remove the design skill files
|
|
118
|
+
function uninstallSkills() {
|
|
119
|
+
const targetDir = getSkillsTargetDir();
|
|
120
|
+
if (fs.existsSync(targetDir)) {
|
|
121
|
+
const files = ['SKILL.md', 'recipes.md'];
|
|
122
|
+
for (const file of files) {
|
|
123
|
+
const filePath = path.join(targetDir, file);
|
|
124
|
+
if (fs.existsSync(filePath)) {
|
|
125
|
+
fs.unlinkSync(filePath);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Remove directory if empty
|
|
129
|
+
try {
|
|
130
|
+
fs.rmdirSync(targetDir);
|
|
131
|
+
// Also try to clean up parent skills dir if empty
|
|
132
|
+
const skillsDir = path.dirname(targetDir);
|
|
133
|
+
fs.rmdirSync(skillsDir);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Directory not empty, that's fine
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
87
140
|
// Install Efecto MCP server
|
|
88
141
|
function install() {
|
|
89
142
|
console.log('');
|
|
@@ -117,10 +170,16 @@ function install() {
|
|
|
117
170
|
console.log('');
|
|
118
171
|
process.exit(0);
|
|
119
172
|
}
|
|
120
|
-
// Add Efecto
|
|
173
|
+
// Add Efecto MCP server
|
|
121
174
|
mcpServers.efecto = EFECTO_CONFIG;
|
|
122
175
|
writeClaudeConfig(configPath, config);
|
|
123
|
-
console.log(green(' ✓
|
|
176
|
+
console.log(green(' ✓ MCP server installed'));
|
|
177
|
+
// Install design skill
|
|
178
|
+
const skillsInstalled = installSkills();
|
|
179
|
+
if (skillsInstalled) {
|
|
180
|
+
console.log(green(' ✓ Design skill installed'));
|
|
181
|
+
console.log(dim(` → ${getSkillsTargetDir()}`));
|
|
182
|
+
}
|
|
124
183
|
console.log('');
|
|
125
184
|
console.log(dim(` Config: ${configPath}`));
|
|
126
185
|
console.log('');
|
|
@@ -166,6 +225,8 @@ function uninstall() {
|
|
|
166
225
|
delete config.mcpServers;
|
|
167
226
|
}
|
|
168
227
|
writeClaudeConfig(configPath, config);
|
|
228
|
+
// Remove design skill files
|
|
229
|
+
uninstallSkills();
|
|
169
230
|
console.log(green(' ✓ Efecto uninstalled'));
|
|
170
231
|
console.log('');
|
|
171
232
|
console.log(dim(` Config: ${configPath}`));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/tools/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAA;AAG9D,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;AAGnE,KAAK,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAA;AAC/C,KAAK,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CAAA;AACpG,KAAK,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;AAC5C,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAGD,KAAK,QAAQ,GACT,MAAM,GAEN,gBAAgB,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,GACtE,cAAc,GAAG,iBAAiB,GAAG,aAAa,GAAG,eAAe,GAEpE,wBAAwB,GAAG,iBAAiB,GAAG,4BAA4B,GAC3E,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,uBAAuB,GAC7E,oBAAoB,GAEpB,eAAe,GAAG,eAAe,GAEjC,kBAAkB,GAAG,gBAAgB,GAAG,YAAY,GAAG,cAAc,GAErE,cAAc,GAAG,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,aAAa,CAAA;AAGvF,KAAK,eAAe,GAChB,WAAW,GAAG,UAAU,GAAG,sBAAsB,GAAG,WAAW,GAC/D,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,qBAAqB,GAC9E,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GACtE,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,eAAe,CAAA;AAG5D,KAAK,iBAAiB,GAClB,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAC1D,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;AAGvE,KAAK,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAA;AAGtE,UAAU,qBAAqB;IAC7B,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC3B,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAA;CACtC;AAGD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE,OAAO,CAAA;CACd;AAGD,KAAK,mBAAmB,GAAG,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/tools/state.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/state.js
CHANGED
|
@@ -120,6 +120,24 @@ function parseNormalizedFrameDimension(input) {
|
|
|
120
120
|
return undefined;
|
|
121
121
|
return clamp(value, 0.01, 2, value);
|
|
122
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Auto-fit font size so the longest word fits on one line within frameWidthPx.
|
|
125
|
+
* Uses a conservative 0.72 average-char-width factor (bold uppercase in DM Sans
|
|
126
|
+
* averages ~0.68–0.72 of fontSize). The +0.5 accounts for text padding
|
|
127
|
+
* (TEXT_PADDING_FACTOR * 2 = 0.25 * 2).
|
|
128
|
+
*/
|
|
129
|
+
function autoFitFontSize(content, fontSize, letterSpacing, frameWidthPx) {
|
|
130
|
+
const words = content.split(/\s+/);
|
|
131
|
+
const longestWord = words.reduce((a, b) => Array.from(a).length >= Array.from(b).length ? a : b, '');
|
|
132
|
+
const charCount = Array.from(longestWord).length;
|
|
133
|
+
if (charCount === 0)
|
|
134
|
+
return fontSize;
|
|
135
|
+
const spacingPx = Math.max(0, charCount - 1) * Math.abs(letterSpacing);
|
|
136
|
+
const maxFontSize = (frameWidthPx - spacingPx) / (0.72 * charCount + 0.5);
|
|
137
|
+
if (fontSize <= maxFontSize)
|
|
138
|
+
return fontSize;
|
|
139
|
+
return Math.max(12, Math.floor(maxFontSize));
|
|
140
|
+
}
|
|
123
141
|
function textNormalizedToPx(normalized, artboardAspect, axis) {
|
|
124
142
|
if (axis === 'height') {
|
|
125
143
|
return normalized / TEXT_WORLD_SCALE_FACTOR;
|
|
@@ -1898,16 +1916,25 @@ async function handleStateTool(name, args) {
|
|
|
1898
1916
|
: undefined;
|
|
1899
1917
|
const autoSize = requestedAutoSize ?? 'height';
|
|
1900
1918
|
if (frameWidthPx == null && textBoxWidth == null) {
|
|
1901
|
-
|
|
1919
|
+
// Account for canvas padding so the frame width matches what the
|
|
1920
|
+
// layout engine will actually give us after shrink-to-fit.
|
|
1921
|
+
const canvasPad = currentPoster.canvas.padding || { top: 0, right: 0, bottom: 0, left: 0 };
|
|
1922
|
+
const canvasContentW = 1.0 - (canvasPad.left || 0) - (canvasPad.right || 0);
|
|
1923
|
+
const defaultFrameWidthNormalized = Math.min(fontSize >= 72 ? 0.88 : 0.78, canvasContentW * 0.95);
|
|
1902
1924
|
frameWidthPx = textNormalizedToPx(defaultFrameWidthNormalized, artboardAspect, 'width');
|
|
1903
1925
|
}
|
|
1926
|
+
// Auto-fit: shrink font if the longest word can't fit on one line
|
|
1927
|
+
const letterSpacing = params.letterSpacing ?? 0;
|
|
1928
|
+
const fittedFontSize = frameWidthPx != null
|
|
1929
|
+
? autoFitFontSize(content, fontSize, letterSpacing, frameWidthPx)
|
|
1930
|
+
: fontSize;
|
|
1904
1931
|
layer = {
|
|
1905
1932
|
...baseLayer,
|
|
1906
1933
|
type: 'text',
|
|
1907
1934
|
content,
|
|
1908
1935
|
textType: 'frame',
|
|
1909
1936
|
fontFamily: normalizeFontFamily(params.fontFamily),
|
|
1910
|
-
fontSize,
|
|
1937
|
+
fontSize: fittedFontSize,
|
|
1911
1938
|
fontWeight: normalizeFontWeight(params.fontWeight),
|
|
1912
1939
|
color: params.color || '#ffffff',
|
|
1913
1940
|
textAlign: params.textAlign || 'center',
|
|
@@ -2147,29 +2174,46 @@ async function handleStateTool(name, args) {
|
|
|
2147
2174
|
const frameHeightPx = typeof childParams.frameHeightPx === 'number' ? childParams.frameHeightPx : frameHeightPxFromNormalized;
|
|
2148
2175
|
const textBoxWidth = typeof childParams.textBoxWidth === 'number' ? childParams.textBoxWidth : undefined;
|
|
2149
2176
|
const childFontSize = childParams.fontSize || 72;
|
|
2150
|
-
// Default frameWidthPx for
|
|
2177
|
+
// Default frameWidthPx — account for canvas + group padding so the
|
|
2178
|
+
// frame width matches the actual available space after layout shrink-to-fit.
|
|
2151
2179
|
if (frameWidthPx == null && textBoxWidth == null) {
|
|
2152
|
-
const
|
|
2180
|
+
const canvasPad = currentPoster.canvas.padding || { top: 0, right: 0, bottom: 0, left: 0 };
|
|
2181
|
+
const canvasContentW = 1.0 - (canvasPad.left || 0) - (canvasPad.right || 0);
|
|
2182
|
+
const grpPadPct = params.padding ?? 0;
|
|
2183
|
+
const grpPadNorm = cssPercentToSize(grpPadPct, 0);
|
|
2184
|
+
const grpPadLR = (cssPercentToSize(params.paddingLeft ?? grpPadPct, 0)) +
|
|
2185
|
+
(cssPercentToSize(params.paddingRight ?? grpPadPct, 0));
|
|
2186
|
+
const effectiveContentW = canvasContentW - grpPadLR;
|
|
2187
|
+
const defaultFrameWidthNormalized = Math.min(childFontSize >= 72 ? 0.88 : 0.78, effectiveContentW * 0.98);
|
|
2153
2188
|
frameWidthPx = textNormalizedToPx(defaultFrameWidthNormalized, artboardAspect, 'width');
|
|
2154
2189
|
}
|
|
2190
|
+
const childContent = childParams.content || 'Text';
|
|
2191
|
+
const childLetterSpacing = childParams.letterSpacing ?? 0;
|
|
2192
|
+
const childAutoSize = childParams.autoSize
|
|
2193
|
+
? childParams.autoSize
|
|
2194
|
+
: 'height';
|
|
2195
|
+
// Auto-fit: shrink font if the longest word can't fit on one line
|
|
2196
|
+
const fittedChildFontSize = frameWidthPx != null
|
|
2197
|
+
? autoFitFontSize(childContent, childFontSize, childLetterSpacing, frameWidthPx)
|
|
2198
|
+
: childFontSize;
|
|
2155
2199
|
childLayers.push({
|
|
2156
2200
|
...childBase,
|
|
2157
2201
|
type: 'text',
|
|
2158
|
-
content:
|
|
2202
|
+
content: childContent,
|
|
2159
2203
|
textType: 'frame',
|
|
2160
2204
|
fontFamily: normalizeFontFamily(childParams.fontFamily),
|
|
2161
|
-
fontSize:
|
|
2205
|
+
fontSize: fittedChildFontSize,
|
|
2162
2206
|
fontWeight: normalizeFontWeight(childParams.fontWeight),
|
|
2163
2207
|
color: childParams.color || '#ffffff',
|
|
2164
2208
|
textAlign: childParams.textAlign || 'center',
|
|
2165
2209
|
...(childParams.verticalAlign ? { verticalAlign: childParams.verticalAlign } : {}),
|
|
2166
|
-
letterSpacing:
|
|
2210
|
+
letterSpacing: childLetterSpacing,
|
|
2167
2211
|
lineHeight: childParams.lineHeight ?? 1.2,
|
|
2168
2212
|
textTransformMode: 'box',
|
|
2169
2213
|
...(textBoxWidth != null ? { textBoxWidth } : {}),
|
|
2170
|
-
frameWidthPx,
|
|
2214
|
+
...(frameWidthPx != null ? { frameWidthPx } : {}),
|
|
2171
2215
|
...(typeof frameHeightPx === 'number' ? { frameHeightPx } : {}),
|
|
2172
|
-
|
|
2216
|
+
autoSize: childAutoSize,
|
|
2173
2217
|
...(parseTextTransform(childParams) ? { textTransform: parseTextTransform(childParams) } : {}),
|
|
2174
2218
|
...parseTextDecoration(childParams),
|
|
2175
2219
|
});
|