illustrator-mcp-server 1.0.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/LICENSE +21 -0
- package/README.ja.md +270 -0
- package/README.md +253 -0
- package/dist/executor/file-transport.d.ts +19 -0
- package/dist/executor/file-transport.d.ts.map +1 -0
- package/dist/executor/file-transport.js +55 -0
- package/dist/executor/file-transport.js.map +1 -0
- package/dist/executor/jsx-runner.d.ts +18 -0
- package/dist/executor/jsx-runner.d.ts.map +1 -0
- package/dist/executor/jsx-runner.js +95 -0
- package/dist/executor/jsx-runner.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx/helpers/common.jsx +320 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +11 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/export/export-pdf.d.ts +3 -0
- package/dist/tools/export/export-pdf.d.ts.map +1 -0
- package/dist/tools/export/export-pdf.js +153 -0
- package/dist/tools/export/export-pdf.js.map +1 -0
- package/dist/tools/export/export.d.ts +3 -0
- package/dist/tools/export/export.d.ts.map +1 -0
- package/dist/tools/export/export.js +230 -0
- package/dist/tools/export/export.js.map +1 -0
- package/dist/tools/modify/apply-color-profile.d.ts +3 -0
- package/dist/tools/modify/apply-color-profile.d.ts.map +1 -0
- package/dist/tools/modify/apply-color-profile.js +86 -0
- package/dist/tools/modify/apply-color-profile.js.map +1 -0
- package/dist/tools/modify/convert-to-outlines.d.ts +3 -0
- package/dist/tools/modify/convert-to-outlines.d.ts.map +1 -0
- package/dist/tools/modify/convert-to-outlines.js +127 -0
- package/dist/tools/modify/convert-to-outlines.js.map +1 -0
- package/dist/tools/modify/create-ellipse.d.ts +3 -0
- package/dist/tools/modify/create-ellipse.d.ts.map +1 -0
- package/dist/tools/modify/create-ellipse.js +135 -0
- package/dist/tools/modify/create-ellipse.js.map +1 -0
- package/dist/tools/modify/create-line.d.ts +3 -0
- package/dist/tools/modify/create-line.d.ts.map +1 -0
- package/dist/tools/modify/create-line.js +150 -0
- package/dist/tools/modify/create-line.js.map +1 -0
- package/dist/tools/modify/create-path.d.ts +3 -0
- package/dist/tools/modify/create-path.d.ts.map +1 -0
- package/dist/tools/modify/create-path.js +192 -0
- package/dist/tools/modify/create-path.js.map +1 -0
- package/dist/tools/modify/create-rectangle.d.ts +3 -0
- package/dist/tools/modify/create-rectangle.d.ts.map +1 -0
- package/dist/tools/modify/create-rectangle.js +142 -0
- package/dist/tools/modify/create-rectangle.js.map +1 -0
- package/dist/tools/modify/create-text-frame.d.ts +3 -0
- package/dist/tools/modify/create-text-frame.d.ts.map +1 -0
- package/dist/tools/modify/create-text-frame.js +154 -0
- package/dist/tools/modify/create-text-frame.js.map +1 -0
- package/dist/tools/modify/modify-object.d.ts +3 -0
- package/dist/tools/modify/modify-object.d.ts.map +1 -0
- package/dist/tools/modify/modify-object.js +224 -0
- package/dist/tools/modify/modify-object.js.map +1 -0
- package/dist/tools/read/find-objects.d.ts +3 -0
- package/dist/tools/read/find-objects.d.ts.map +1 -0
- package/dist/tools/read/find-objects.js +220 -0
- package/dist/tools/read/find-objects.js.map +1 -0
- package/dist/tools/read/get-artboards.d.ts +3 -0
- package/dist/tools/read/get-artboards.d.ts.map +1 -0
- package/dist/tools/read/get-artboards.js +85 -0
- package/dist/tools/read/get-artboards.js.map +1 -0
- package/dist/tools/read/get-colors.d.ts +3 -0
- package/dist/tools/read/get-colors.d.ts.map +1 -0
- package/dist/tools/read/get-colors.js +184 -0
- package/dist/tools/read/get-colors.js.map +1 -0
- package/dist/tools/read/get-document-info.d.ts +3 -0
- package/dist/tools/read/get-document-info.d.ts.map +1 -0
- package/dist/tools/read/get-document-info.js +134 -0
- package/dist/tools/read/get-document-info.js.map +1 -0
- package/dist/tools/read/get-document-structure.d.ts +3 -0
- package/dist/tools/read/get-document-structure.d.ts.map +1 -0
- package/dist/tools/read/get-document-structure.js +125 -0
- package/dist/tools/read/get-document-structure.js.map +1 -0
- package/dist/tools/read/get-effects.d.ts +3 -0
- package/dist/tools/read/get-effects.d.ts.map +1 -0
- package/dist/tools/read/get-effects.js +187 -0
- package/dist/tools/read/get-effects.js.map +1 -0
- package/dist/tools/read/get-groups.d.ts +3 -0
- package/dist/tools/read/get-groups.d.ts.map +1 -0
- package/dist/tools/read/get-groups.js +174 -0
- package/dist/tools/read/get-groups.js.map +1 -0
- package/dist/tools/read/get-guidelines.d.ts +3 -0
- package/dist/tools/read/get-guidelines.d.ts.map +1 -0
- package/dist/tools/read/get-guidelines.js +100 -0
- package/dist/tools/read/get-guidelines.js.map +1 -0
- package/dist/tools/read/get-images.d.ts +3 -0
- package/dist/tools/read/get-images.d.ts.map +1 -0
- package/dist/tools/read/get-images.js +160 -0
- package/dist/tools/read/get-images.js.map +1 -0
- package/dist/tools/read/get-layers.d.ts +3 -0
- package/dist/tools/read/get-layers.d.ts.map +1 -0
- package/dist/tools/read/get-layers.js +112 -0
- package/dist/tools/read/get-layers.js.map +1 -0
- package/dist/tools/read/get-overprint-info.d.ts +3 -0
- package/dist/tools/read/get-overprint-info.d.ts.map +1 -0
- package/dist/tools/read/get-overprint-info.js +109 -0
- package/dist/tools/read/get-overprint-info.js.map +1 -0
- package/dist/tools/read/get-path-items.d.ts +3 -0
- package/dist/tools/read/get-path-items.d.ts.map +1 -0
- package/dist/tools/read/get-path-items.js +252 -0
- package/dist/tools/read/get-path-items.js.map +1 -0
- package/dist/tools/read/get-selection.d.ts +3 -0
- package/dist/tools/read/get-selection.d.ts.map +1 -0
- package/dist/tools/read/get-selection.js +177 -0
- package/dist/tools/read/get-selection.js.map +1 -0
- package/dist/tools/read/get-symbols.d.ts +3 -0
- package/dist/tools/read/get-symbols.d.ts.map +1 -0
- package/dist/tools/read/get-symbols.js +101 -0
- package/dist/tools/read/get-symbols.js.map +1 -0
- package/dist/tools/read/get-text-frame-detail.d.ts +3 -0
- package/dist/tools/read/get-text-frame-detail.d.ts.map +1 -0
- package/dist/tools/read/get-text-frame-detail.js +184 -0
- package/dist/tools/read/get-text-frame-detail.js.map +1 -0
- package/dist/tools/read/list-text-frames.d.ts +3 -0
- package/dist/tools/read/list-text-frames.d.ts.map +1 -0
- package/dist/tools/read/list-text-frames.js +177 -0
- package/dist/tools/read/list-text-frames.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +65 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/utility/preflight-check.d.ts +3 -0
- package/dist/tools/utility/preflight-check.d.ts.map +1 -0
- package/dist/tools/utility/preflight-check.js +337 -0
- package/dist/tools/utility/preflight-check.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { executeJsx } from '../../executor/jsx-runner.js';
|
|
3
|
+
const jsxCode = `
|
|
4
|
+
var preflight = preflightChecks();
|
|
5
|
+
if (preflight) {
|
|
6
|
+
writeResultFile(RESULT_PATH, preflight);
|
|
7
|
+
} else {
|
|
8
|
+
try {
|
|
9
|
+
var params = readParamsFile(PARAMS_PATH);
|
|
10
|
+
var doc = app.activeDocument;
|
|
11
|
+
var includeSwatches = (params && typeof params.include_swatches === "boolean") ? params.include_swatches : true;
|
|
12
|
+
var includeUsedColors = (params && typeof params.include_used_colors === "boolean") ? params.include_used_colors : true;
|
|
13
|
+
|
|
14
|
+
var result = {};
|
|
15
|
+
|
|
16
|
+
// スウォッチ一覧
|
|
17
|
+
if (includeSwatches) {
|
|
18
|
+
var swatches = [];
|
|
19
|
+
for (var si = 0; si < doc.swatches.length; si++) {
|
|
20
|
+
var sw = doc.swatches[si];
|
|
21
|
+
var swInfo = {
|
|
22
|
+
name: sw.name,
|
|
23
|
+
color: colorToObject(sw.color)
|
|
24
|
+
};
|
|
25
|
+
swatches.push(swInfo);
|
|
26
|
+
}
|
|
27
|
+
result.swatches = swatches;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// グラデーション一覧
|
|
31
|
+
var gradients = [];
|
|
32
|
+
for (var gi = 0; gi < doc.gradients.length; gi++) {
|
|
33
|
+
var grad = doc.gradients[gi];
|
|
34
|
+
var gradType = "unknown";
|
|
35
|
+
try {
|
|
36
|
+
if (grad.type === GradientType.LINEAR) gradType = "linear";
|
|
37
|
+
else if (grad.type === GradientType.RADIAL) gradType = "radial";
|
|
38
|
+
else gradType = grad.type.toString();
|
|
39
|
+
} catch (e) {}
|
|
40
|
+
|
|
41
|
+
var stops = [];
|
|
42
|
+
for (var gsi = 0; gsi < grad.gradientStops.length; gsi++) {
|
|
43
|
+
var gs = grad.gradientStops[gsi];
|
|
44
|
+
var stopInfo = {
|
|
45
|
+
rampPoint: gs.rampPoint,
|
|
46
|
+
midPoint: gs.midPoint,
|
|
47
|
+
color: colorToObject(gs.color)
|
|
48
|
+
};
|
|
49
|
+
try { stopInfo.opacity = gs.opacity; } catch (e) { stopInfo.opacity = 100; }
|
|
50
|
+
stops.push(stopInfo);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
gradients.push({
|
|
54
|
+
name: grad.name,
|
|
55
|
+
type: gradType,
|
|
56
|
+
stops: stops
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
result.gradients = gradients;
|
|
60
|
+
|
|
61
|
+
// パターン一覧
|
|
62
|
+
var patterns = [];
|
|
63
|
+
for (var pi = 0; pi < doc.patterns.length; pi++) {
|
|
64
|
+
patterns.push({
|
|
65
|
+
name: doc.patterns[pi].name
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
result.patterns = patterns;
|
|
69
|
+
|
|
70
|
+
// 特色(スポットカラー)一覧
|
|
71
|
+
var spots = [];
|
|
72
|
+
for (var spi = 0; spi < doc.spots.length; spi++) {
|
|
73
|
+
var spot = doc.spots[spi];
|
|
74
|
+
var spotInfo = {
|
|
75
|
+
name: spot.name
|
|
76
|
+
};
|
|
77
|
+
try { spotInfo.color = colorToObject(spot.color); } catch (e) { spotInfo.color = { type: "unknown" }; }
|
|
78
|
+
try {
|
|
79
|
+
var st = spot.spotKind;
|
|
80
|
+
if (st === SpotColorKind.SPOTCMYK) spotInfo.spotKind = "CMYK";
|
|
81
|
+
else if (st === SpotColorKind.SPOTRGB) spotInfo.spotKind = "RGB";
|
|
82
|
+
else if (st === SpotColorKind.SPOTLAB) spotInfo.spotKind = "LAB";
|
|
83
|
+
else spotInfo.spotKind = st.toString();
|
|
84
|
+
} catch (e) { spotInfo.spotKind = "unknown"; }
|
|
85
|
+
spots.push(spotInfo);
|
|
86
|
+
}
|
|
87
|
+
result.spots = spots;
|
|
88
|
+
|
|
89
|
+
// 使用色の収集とメッシュ検出
|
|
90
|
+
if (includeUsedColors) {
|
|
91
|
+
var usedFills = [];
|
|
92
|
+
var usedStrokes = [];
|
|
93
|
+
var meshItems = [];
|
|
94
|
+
var spotUsageCount = {};
|
|
95
|
+
|
|
96
|
+
for (var ii = 0; ii < doc.pageItems.length; ii++) {
|
|
97
|
+
var item = doc.pageItems[ii];
|
|
98
|
+
|
|
99
|
+
// メッシュアイテム検出
|
|
100
|
+
if (item.typename === "MeshItem") {
|
|
101
|
+
meshItems.push(ensureUUID(item));
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// PathItem の fillColor / strokeColor を収集
|
|
106
|
+
if (item.typename === "PathItem") {
|
|
107
|
+
try {
|
|
108
|
+
if (item.filled) {
|
|
109
|
+
var fc = colorToObject(item.fillColor);
|
|
110
|
+
usedFills.push(fc);
|
|
111
|
+
if (fc.type === "spot") {
|
|
112
|
+
var spName = fc.name;
|
|
113
|
+
if (spotUsageCount[spName] === undefined) spotUsageCount[spName] = 0;
|
|
114
|
+
spotUsageCount[spName] = spotUsageCount[spName] + 1;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
} catch (e) {}
|
|
118
|
+
try {
|
|
119
|
+
if (item.stroked) {
|
|
120
|
+
var sc = colorToObject(item.strokeColor);
|
|
121
|
+
usedStrokes.push(sc);
|
|
122
|
+
if (sc.type === "spot") {
|
|
123
|
+
var spName2 = sc.name;
|
|
124
|
+
if (spotUsageCount[spName2] === undefined) spotUsageCount[spName2] = 0;
|
|
125
|
+
spotUsageCount[spName2] = spotUsageCount[spName2] + 1;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
} catch (e) {}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// 特色使用箇所数を spots に追加
|
|
133
|
+
for (var sci = 0; sci < spots.length; sci++) {
|
|
134
|
+
var count = spotUsageCount[spots[sci].name];
|
|
135
|
+
spots[sci].usageCount = (count !== undefined) ? count : 0;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
result.usedFillColors = usedFills;
|
|
139
|
+
result.usedStrokeColors = usedStrokes;
|
|
140
|
+
result.meshGradient = {
|
|
141
|
+
hasMesh: meshItems.length > 0,
|
|
142
|
+
meshItemUUIDs: meshItems
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
writeResultFile(RESULT_PATH, result);
|
|
147
|
+
} catch (e) {
|
|
148
|
+
writeResultFile(RESULT_PATH, { error: true, message: "Failed to get color information: " + e.message, line: e.line });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
`;
|
|
152
|
+
export function register(server) {
|
|
153
|
+
server.registerTool('get_colors', {
|
|
154
|
+
title: 'Get Colors',
|
|
155
|
+
description: 'Get all color information used in the document',
|
|
156
|
+
inputSchema: {
|
|
157
|
+
include_swatches: z
|
|
158
|
+
.boolean()
|
|
159
|
+
.optional()
|
|
160
|
+
.default(true)
|
|
161
|
+
.describe('Include swatch list'),
|
|
162
|
+
include_used_colors: z
|
|
163
|
+
.boolean()
|
|
164
|
+
.optional()
|
|
165
|
+
.default(true)
|
|
166
|
+
.describe('Include used color collection'),
|
|
167
|
+
coordinate_system: z
|
|
168
|
+
.enum(['artboard-web', 'document'])
|
|
169
|
+
.optional()
|
|
170
|
+
.default('artboard-web')
|
|
171
|
+
.describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
|
|
172
|
+
},
|
|
173
|
+
annotations: {
|
|
174
|
+
readOnlyHint: true,
|
|
175
|
+
destructiveHint: false,
|
|
176
|
+
idempotentHint: true,
|
|
177
|
+
openWorldHint: false,
|
|
178
|
+
},
|
|
179
|
+
}, async (params) => {
|
|
180
|
+
const result = await executeJsx(jsxCode, params);
|
|
181
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=get-colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-colors.js","sourceRoot":"","sources":["../../../src/tools/read/get-colors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoJf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,qBAAqB,CAAC;YAClC,mBAAmB,EAAE,CAAC;iBACnB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,+BAA+B,CAAC;YAC5C,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;iBACvB,QAAQ,CAAC,sGAAsG,CAAC;SACpH;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-document-info.d.ts","sourceRoot":"","sources":["../../../src/tools/read/get-document-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiHpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0BhD"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { executeJsx } from '../../executor/jsx-runner.js';
|
|
3
|
+
const jsxCode = `
|
|
4
|
+
try {
|
|
5
|
+
var err = preflightChecks();
|
|
6
|
+
if (err) {
|
|
7
|
+
writeResultFile(RESULT_PATH, err);
|
|
8
|
+
} else {
|
|
9
|
+
var params = readParamsFile(PARAMS_PATH);
|
|
10
|
+
var doc = app.activeDocument;
|
|
11
|
+
var coordSystem = (params && params.coordinate_system) ? params.coordinate_system : "artboard-web";
|
|
12
|
+
|
|
13
|
+
// ファイル名・パス
|
|
14
|
+
var fileName = doc.name;
|
|
15
|
+
var filePath = "";
|
|
16
|
+
try {
|
|
17
|
+
filePath = doc.fullName.fsName;
|
|
18
|
+
} catch (e) {
|
|
19
|
+
// 未保存ドキュメントの場合 fullName がエラーになる
|
|
20
|
+
filePath = "";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// ドキュメントサイズ(pt)
|
|
24
|
+
var docWidth = doc.width;
|
|
25
|
+
var docHeight = doc.height;
|
|
26
|
+
|
|
27
|
+
// カラーモード
|
|
28
|
+
var colorSpace = doc.documentColorSpace;
|
|
29
|
+
var colorMode = "unknown";
|
|
30
|
+
if (colorSpace === DocumentColorSpace.CMYK) {
|
|
31
|
+
colorMode = "CMYK";
|
|
32
|
+
} else if (colorSpace === DocumentColorSpace.RGB) {
|
|
33
|
+
colorMode = "RGB";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// カラープロファイル
|
|
37
|
+
var colorProfile = "";
|
|
38
|
+
try {
|
|
39
|
+
colorProfile = doc.colorProfileName;
|
|
40
|
+
} catch (e) {
|
|
41
|
+
colorProfile = "";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 裁ち落とし設定
|
|
45
|
+
// Illustrator ExtendScript API はドキュメントの裁ち落とし(bleed)設定を
|
|
46
|
+
// 直接公開していないため、取得不可
|
|
47
|
+
var bleed = {
|
|
48
|
+
note: "Illustrator ExtendScript API does not expose bleed settings directly. Use File > Document Setup to check bleed values.",
|
|
49
|
+
top: null,
|
|
50
|
+
bottom: null,
|
|
51
|
+
left: null,
|
|
52
|
+
right: null
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// ラスタライズ解像度
|
|
56
|
+
var rasterResolution = 0;
|
|
57
|
+
try {
|
|
58
|
+
rasterResolution = doc.rasterEffectSettings.resolution;
|
|
59
|
+
} catch (e) {
|
|
60
|
+
rasterResolution = 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// アートボード数・情報
|
|
64
|
+
var artboardCount = doc.artboards.length;
|
|
65
|
+
var artboards = [];
|
|
66
|
+
for (var i = 0; i < doc.artboards.length; i++) {
|
|
67
|
+
var ab = doc.artboards[i];
|
|
68
|
+
var rect = ab.artboardRect; // [left, top, right, bottom]
|
|
69
|
+
var abWidth = rect[2] - rect[0];
|
|
70
|
+
var abHeight = rect[1] - rect[3]; // top - bottom (Illustrator座標)
|
|
71
|
+
|
|
72
|
+
var abInfo = {
|
|
73
|
+
index: i,
|
|
74
|
+
name: ab.name
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
if (coordSystem === "document") {
|
|
78
|
+
abInfo.x = rect[0];
|
|
79
|
+
abInfo.y = rect[1];
|
|
80
|
+
} else {
|
|
81
|
+
// artboard-web: 各アートボードは自身の原点(0,0)を持つ
|
|
82
|
+
abInfo.x = 0;
|
|
83
|
+
abInfo.y = 0;
|
|
84
|
+
}
|
|
85
|
+
abInfo.width = abWidth;
|
|
86
|
+
abInfo.height = abHeight;
|
|
87
|
+
|
|
88
|
+
artboards.push(abInfo);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var result = {
|
|
92
|
+
fileName: fileName,
|
|
93
|
+
filePath: filePath,
|
|
94
|
+
width: docWidth,
|
|
95
|
+
height: docHeight,
|
|
96
|
+
colorMode: colorMode,
|
|
97
|
+
colorProfile: colorProfile,
|
|
98
|
+
bleed: bleed,
|
|
99
|
+
rasterEffectResolution: rasterResolution,
|
|
100
|
+
artboardCount: artboardCount,
|
|
101
|
+
artboards: artboards,
|
|
102
|
+
coordinateSystem: coordSystem
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
writeResultFile(RESULT_PATH, result);
|
|
106
|
+
}
|
|
107
|
+
} catch (e) {
|
|
108
|
+
writeResultFile(RESULT_PATH, { error: true, message: e.message, line: e.line });
|
|
109
|
+
}
|
|
110
|
+
`;
|
|
111
|
+
export function register(server) {
|
|
112
|
+
server.registerTool('get_document_info', {
|
|
113
|
+
title: 'Get Document Info',
|
|
114
|
+
description: 'Get document metadata',
|
|
115
|
+
inputSchema: {
|
|
116
|
+
coordinate_system: z
|
|
117
|
+
.enum(['artboard-web', 'document'])
|
|
118
|
+
.optional()
|
|
119
|
+
.default('artboard-web'),
|
|
120
|
+
},
|
|
121
|
+
annotations: {
|
|
122
|
+
readOnlyHint: true,
|
|
123
|
+
destructiveHint: false,
|
|
124
|
+
idempotentHint: true,
|
|
125
|
+
openWorldHint: false,
|
|
126
|
+
},
|
|
127
|
+
}, async (params) => {
|
|
128
|
+
const result = await executeJsx(jsxCode, params);
|
|
129
|
+
return {
|
|
130
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=get-document-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-document-info.js","sourceRoot":"","sources":["../../../src/tools/read/get-document-info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Gf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE;YACX,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;SAC3B;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-document-structure.d.ts","sourceRoot":"","sources":["../../../src/tools/read/get-document-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+FpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmChD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { executeJsx } from '../../executor/jsx-runner.js';
|
|
3
|
+
const jsxCode = `
|
|
4
|
+
var err = preflightChecks();
|
|
5
|
+
if (err) {
|
|
6
|
+
writeResultFile(RESULT_PATH, err);
|
|
7
|
+
} else {
|
|
8
|
+
try {
|
|
9
|
+
var params = readParamsFile(PARAMS_PATH);
|
|
10
|
+
var maxDepth = (params.depth !== undefined) ? params.depth : 999;
|
|
11
|
+
var filterArtboard = (params.artboard_index !== undefined) ? params.artboard_index : -1;
|
|
12
|
+
var coordSystem = params.coordinate_system || "artboard-web";
|
|
13
|
+
var doc = app.activeDocument;
|
|
14
|
+
|
|
15
|
+
function getArtboardRect(item) {
|
|
16
|
+
var abIdx = getArtboardIndexForItem(item);
|
|
17
|
+
if (abIdx >= 0) {
|
|
18
|
+
return doc.artboards[abIdx].artboardRect;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function shouldIncludeItem(item) {
|
|
24
|
+
if (filterArtboard < 0) { return true; }
|
|
25
|
+
var abIdx = getArtboardIndexForItem(item);
|
|
26
|
+
return abIdx === filterArtboard;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function traverseItems(container, currentDepth) {
|
|
30
|
+
var children = [];
|
|
31
|
+
if (currentDepth >= maxDepth) { return children; }
|
|
32
|
+
for (var i = 0; i < container.pageItems.length; i++) {
|
|
33
|
+
var item = container.pageItems[i];
|
|
34
|
+
if (!shouldIncludeItem(item)) { continue; }
|
|
35
|
+
var itemType = getItemType(item);
|
|
36
|
+
var abRect = getArtboardRect(item);
|
|
37
|
+
var child = {
|
|
38
|
+
uuid: ensureUUID(item),
|
|
39
|
+
name: "",
|
|
40
|
+
type: itemType,
|
|
41
|
+
zIndex: getZIndex(item),
|
|
42
|
+
bounds: getBounds(item, coordSystem, abRect)
|
|
43
|
+
};
|
|
44
|
+
try { child.name = item.name || ""; } catch (e) {}
|
|
45
|
+
if (itemType === "group") {
|
|
46
|
+
try {
|
|
47
|
+
child.children = traverseItems(item, currentDepth + 1);
|
|
48
|
+
} catch (e) {
|
|
49
|
+
child.children = [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
children.push(child);
|
|
53
|
+
}
|
|
54
|
+
return children;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function traverseLayer(layer, currentDepth) {
|
|
58
|
+
var info = {
|
|
59
|
+
name: layer.name,
|
|
60
|
+
visible: layer.visible,
|
|
61
|
+
locked: layer.locked,
|
|
62
|
+
zIndex: 0,
|
|
63
|
+
children: []
|
|
64
|
+
};
|
|
65
|
+
try { info.zIndex = layer.zOrderPosition; } catch (e) {}
|
|
66
|
+
|
|
67
|
+
if (currentDepth < maxDepth) {
|
|
68
|
+
info.children = traverseItems(layer, currentDepth);
|
|
69
|
+
|
|
70
|
+
// Include sublayers as nested layers
|
|
71
|
+
for (var s = 0; s < layer.layers.length; s++) {
|
|
72
|
+
info.children.push(traverseLayer(layer.layers[s], currentDepth + 1));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return info;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
var layers = [];
|
|
80
|
+
for (var i = 0; i < doc.layers.length; i++) {
|
|
81
|
+
layers.push(traverseLayer(doc.layers[i], 0));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
writeResultFile(RESULT_PATH, {
|
|
85
|
+
coordinateSystem: coordSystem,
|
|
86
|
+
layers: layers
|
|
87
|
+
});
|
|
88
|
+
} catch (e) {
|
|
89
|
+
writeResultFile(RESULT_PATH, { error: true, message: "get_document_structure: " + e.message, line: e.line });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
`;
|
|
93
|
+
export function register(server) {
|
|
94
|
+
server.registerTool('get_document_structure', {
|
|
95
|
+
title: 'Get Document Structure',
|
|
96
|
+
description: 'Get tree structure of layers, groups, and objects',
|
|
97
|
+
inputSchema: {
|
|
98
|
+
depth: z
|
|
99
|
+
.number()
|
|
100
|
+
.optional()
|
|
101
|
+
.describe('Maximum traversal depth (unlimited if omitted)'),
|
|
102
|
+
artboard_index: z
|
|
103
|
+
.number()
|
|
104
|
+
.optional()
|
|
105
|
+
.describe('Filter by artboard index (0-based integer)'),
|
|
106
|
+
coordinate_system: z
|
|
107
|
+
.enum(['artboard-web', 'document'])
|
|
108
|
+
.optional()
|
|
109
|
+
.default('artboard-web')
|
|
110
|
+
.describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
|
|
111
|
+
},
|
|
112
|
+
annotations: {
|
|
113
|
+
readOnlyHint: true,
|
|
114
|
+
destructiveHint: false,
|
|
115
|
+
idempotentHint: true,
|
|
116
|
+
openWorldHint: false,
|
|
117
|
+
},
|
|
118
|
+
}, async (params) => {
|
|
119
|
+
const result = await executeJsx(jsxCode, params);
|
|
120
|
+
return {
|
|
121
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=get-document-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-document-structure.js","sourceRoot":"","sources":["../../../src/tools/read/get-document-structure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,4CAA4C,CAAC;YACzD,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;iBACvB,QAAQ,CAAC,sGAAsG,CAAC;SACpH;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-effects.d.ts","sourceRoot":"","sources":["../../../src/tools/read/get-effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoKpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4BhD"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { executeJsx } from '../../executor/jsx-runner.js';
|
|
3
|
+
const jsxCode = `
|
|
4
|
+
try {
|
|
5
|
+
var err = preflightChecks();
|
|
6
|
+
if (err) {
|
|
7
|
+
writeResultFile(RESULT_PATH, err);
|
|
8
|
+
} else {
|
|
9
|
+
var params = readParamsFile(PARAMS_PATH);
|
|
10
|
+
var coordSystem = (params && params.coordinate_system) ? params.coordinate_system : "artboard-web";
|
|
11
|
+
var targetUuid = (params && params.target) ? params.target : null;
|
|
12
|
+
var selectionOnly = (params && params.selection_only === true) ? true : false;
|
|
13
|
+
var doc = app.activeDocument;
|
|
14
|
+
|
|
15
|
+
function blendModeToString(mode) {
|
|
16
|
+
if (mode === BlendModes.NORMAL) return "normal";
|
|
17
|
+
if (mode === BlendModes.MULTIPLY) return "multiply";
|
|
18
|
+
if (mode === BlendModes.SCREEN) return "screen";
|
|
19
|
+
if (mode === BlendModes.OVERLAY) return "overlay";
|
|
20
|
+
if (mode === BlendModes.SOFTLIGHT) return "softLight";
|
|
21
|
+
if (mode === BlendModes.HARDLIGHT) return "hardLight";
|
|
22
|
+
if (mode === BlendModes.COLORDODGE) return "colorDodge";
|
|
23
|
+
if (mode === BlendModes.COLORBURN) return "colorBurn";
|
|
24
|
+
if (mode === BlendModes.DARKEN) return "darken";
|
|
25
|
+
if (mode === BlendModes.LIGHTEN) return "lighten";
|
|
26
|
+
if (mode === BlendModes.DIFFERENCE) return "difference";
|
|
27
|
+
if (mode === BlendModes.EXCLUSION) return "exclusion";
|
|
28
|
+
if (mode === BlendModes.HUE) return "hue";
|
|
29
|
+
if (mode === BlendModes.SATURATION) return "saturationBlend";
|
|
30
|
+
if (mode === BlendModes.COLOR) return "colorBlend";
|
|
31
|
+
if (mode === BlendModes.LUMINOSITY) return "luminosity";
|
|
32
|
+
return "unknown";
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function getEffectInfo(item, coordSys) {
|
|
36
|
+
var uuid = ensureUUID(item);
|
|
37
|
+
var zIdx = getZIndex(item);
|
|
38
|
+
var itemType = getItemType(item);
|
|
39
|
+
var abIndex = getArtboardIndexForItem(item);
|
|
40
|
+
var abRect = null;
|
|
41
|
+
if (abIndex >= 0) { abRect = doc.artboards[abIndex].artboardRect; }
|
|
42
|
+
var bounds = getBounds(item, coordSys, abRect);
|
|
43
|
+
|
|
44
|
+
var info = {
|
|
45
|
+
uuid: uuid,
|
|
46
|
+
zIndex: zIdx,
|
|
47
|
+
name: "",
|
|
48
|
+
type: itemType,
|
|
49
|
+
bounds: bounds,
|
|
50
|
+
opacity: 100,
|
|
51
|
+
blendingMode: "normal",
|
|
52
|
+
fill: null,
|
|
53
|
+
stroke: null,
|
|
54
|
+
limitations: "ExtendScript DOM cannot access: multiple fills/strokes (only first), live effects parameters, full appearance stack. Only opacity, blendingMode, and primary fill/stroke are returned."
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
try { info.name = item.name || ""; } catch(e) {}
|
|
58
|
+
try { info.opacity = item.opacity; } catch(e) {}
|
|
59
|
+
try { info.blendingMode = blendModeToString(item.blendingMode); } catch(e) {}
|
|
60
|
+
|
|
61
|
+
// Fill and stroke info for path-like items
|
|
62
|
+
try {
|
|
63
|
+
if (itemType === "path") {
|
|
64
|
+
info.fill = { filled: item.filled };
|
|
65
|
+
if (item.filled) {
|
|
66
|
+
info.fill.color = colorToObject(item.fillColor);
|
|
67
|
+
}
|
|
68
|
+
info.stroke = { stroked: item.stroked };
|
|
69
|
+
if (item.stroked) {
|
|
70
|
+
info.stroke.color = colorToObject(item.strokeColor);
|
|
71
|
+
info.stroke.width = item.strokeWidth;
|
|
72
|
+
}
|
|
73
|
+
} else if (itemType === "compound-path") {
|
|
74
|
+
if (item.pathItems.length > 0) {
|
|
75
|
+
var fp = item.pathItems[0];
|
|
76
|
+
info.fill = { filled: fp.filled };
|
|
77
|
+
if (fp.filled) {
|
|
78
|
+
info.fill.color = colorToObject(fp.fillColor);
|
|
79
|
+
}
|
|
80
|
+
info.stroke = { stroked: fp.stroked };
|
|
81
|
+
if (fp.stroked) {
|
|
82
|
+
info.stroke.color = colorToObject(fp.strokeColor);
|
|
83
|
+
info.stroke.width = fp.strokeWidth;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
} else if (itemType === "text") {
|
|
87
|
+
// TextFrameItem does not expose fill/stroke directly in the same way
|
|
88
|
+
// but we can try character attributes
|
|
89
|
+
try {
|
|
90
|
+
if (item.textRanges.length > 0) {
|
|
91
|
+
var tr = item.textRanges[0];
|
|
92
|
+
var ca = tr.characterAttributes;
|
|
93
|
+
info.fill = { filled: true, color: colorToObject(ca.fillColor) };
|
|
94
|
+
if (ca.strokeWeight > 0) {
|
|
95
|
+
info.stroke = { stroked: true, color: colorToObject(ca.strokeColor), width: ca.strokeWeight };
|
|
96
|
+
} else {
|
|
97
|
+
info.stroke = { stroked: false };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
} catch(e) {}
|
|
101
|
+
}
|
|
102
|
+
} catch(e) {}
|
|
103
|
+
|
|
104
|
+
return info;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
var items = [];
|
|
108
|
+
|
|
109
|
+
function findByNote(items, uuid) {
|
|
110
|
+
for (var i = 0; i < items.length; i++) {
|
|
111
|
+
var item = items[i];
|
|
112
|
+
try { if (item.note === uuid) return item; } catch(e) {}
|
|
113
|
+
if (item.typename === "GroupItem") {
|
|
114
|
+
try {
|
|
115
|
+
var child = findByNote(item.pageItems, uuid);
|
|
116
|
+
if (child) return child;
|
|
117
|
+
} catch(e2) {}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (targetUuid) {
|
|
124
|
+
// Find specific item by UUID
|
|
125
|
+
var targetItem = null;
|
|
126
|
+
for (var li = 0; li < doc.layers.length; li++) {
|
|
127
|
+
targetItem = findByNote(doc.layers[li].pageItems, targetUuid);
|
|
128
|
+
if (targetItem) break;
|
|
129
|
+
}
|
|
130
|
+
if (targetItem) {
|
|
131
|
+
items.push(getEffectInfo(targetItem, coordSystem));
|
|
132
|
+
} else {
|
|
133
|
+
writeResultFile(RESULT_PATH, { error: true, message: "Item not found with UUID: " + targetUuid });
|
|
134
|
+
}
|
|
135
|
+
} else if (selectionOnly) {
|
|
136
|
+
var sel = doc.selection;
|
|
137
|
+
if (sel && sel.length > 0) {
|
|
138
|
+
for (var si = 0; si < sel.length; si++) {
|
|
139
|
+
items.push(getEffectInfo(sel[si], coordSystem));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
var limit = 500;
|
|
144
|
+
var count = doc.pageItems.length < limit ? doc.pageItems.length : limit;
|
|
145
|
+
for (var j = 0; j < count; j++) {
|
|
146
|
+
items.push(getEffectInfo(doc.pageItems[j], coordSystem));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (!targetUuid || items.length > 0) {
|
|
151
|
+
writeResultFile(RESULT_PATH, {
|
|
152
|
+
coordinateSystem: coordSystem,
|
|
153
|
+
count: items.length,
|
|
154
|
+
items: items
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
} catch (e) {
|
|
159
|
+
writeResultFile(RESULT_PATH, { error: true, message: e.message, line: e.line });
|
|
160
|
+
}
|
|
161
|
+
`;
|
|
162
|
+
export function register(server) {
|
|
163
|
+
server.registerTool('get_effects', {
|
|
164
|
+
title: 'Get Effects',
|
|
165
|
+
description: 'Get effect and appearance information',
|
|
166
|
+
inputSchema: {
|
|
167
|
+
target: z.string().optional().describe('Filter by UUID for a specific object'),
|
|
168
|
+
selection_only: z.boolean().optional().default(false).describe('Selected objects only'),
|
|
169
|
+
coordinate_system: z
|
|
170
|
+
.enum(['artboard-web', 'document'])
|
|
171
|
+
.optional()
|
|
172
|
+
.default('artboard-web'),
|
|
173
|
+
},
|
|
174
|
+
annotations: {
|
|
175
|
+
readOnlyHint: true,
|
|
176
|
+
destructiveHint: false,
|
|
177
|
+
idempotentHint: true,
|
|
178
|
+
openWorldHint: false,
|
|
179
|
+
},
|
|
180
|
+
}, async (params) => {
|
|
181
|
+
const result = await executeJsx(jsxCode, params);
|
|
182
|
+
return {
|
|
183
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=get-effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-effects.js","sourceRoot":"","sources":["../../../src/tools/read/get-effects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Jf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC9E,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACvF,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;SAC3B;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-groups.d.ts","sourceRoot":"","sources":["../../../src/tools/read/get-groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuJpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4BhD"}
|