illustrator-mcp-server 1.2.4 → 1.2.5

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 (243) hide show
  1. package/README.ja.md +525 -107
  2. package/README.md +510 -89
  3. package/dist/executor/jsx-runner.d.ts +1 -0
  4. package/dist/executor/jsx-runner.d.ts.map +1 -1
  5. package/dist/executor/jsx-runner.js +33 -19
  6. package/dist/executor/jsx-runner.js.map +1 -1
  7. package/dist/jsx/helpers/common.jsx +113 -7
  8. package/dist/prompts/print-preflight-workflow.d.ts +3 -0
  9. package/dist/prompts/print-preflight-workflow.d.ts.map +1 -0
  10. package/dist/prompts/print-preflight-workflow.js +45 -0
  11. package/dist/prompts/print-preflight-workflow.js.map +1 -0
  12. package/dist/prompts/quick-layout.d.ts +3 -0
  13. package/dist/prompts/quick-layout.d.ts.map +1 -0
  14. package/dist/prompts/quick-layout.js +42 -0
  15. package/dist/prompts/quick-layout.js.map +1 -0
  16. package/dist/prompts/registry.d.ts +3 -0
  17. package/dist/prompts/registry.d.ts.map +1 -0
  18. package/dist/prompts/registry.js +7 -0
  19. package/dist/prompts/registry.js.map +1 -0
  20. package/dist/server.d.ts.map +1 -1
  21. package/dist/server.js +3 -1
  22. package/dist/server.js.map +1 -1
  23. package/dist/tools/export/export-pdf.d.ts.map +1 -1
  24. package/dist/tools/export/export-pdf.js +48 -18
  25. package/dist/tools/export/export-pdf.js.map +1 -1
  26. package/dist/tools/export/export.d.ts.map +1 -1
  27. package/dist/tools/export/export.js +41 -49
  28. package/dist/tools/export/export.js.map +1 -1
  29. package/dist/tools/modify/align-objects.d.ts +3 -0
  30. package/dist/tools/modify/align-objects.d.ts.map +1 -0
  31. package/dist/tools/modify/align-objects.js +195 -0
  32. package/dist/tools/modify/align-objects.js.map +1 -0
  33. package/dist/tools/modify/apply-color-profile.d.ts.map +1 -1
  34. package/dist/tools/modify/apply-color-profile.js +12 -10
  35. package/dist/tools/modify/apply-color-profile.js.map +1 -1
  36. package/dist/tools/modify/apply-graphic-style.d.ts +3 -0
  37. package/dist/tools/modify/apply-graphic-style.d.ts.map +1 -0
  38. package/dist/tools/modify/apply-graphic-style.js +100 -0
  39. package/dist/tools/modify/apply-graphic-style.js.map +1 -0
  40. package/dist/tools/modify/apply-text-style.d.ts +3 -0
  41. package/dist/tools/modify/apply-text-style.d.ts.map +1 -0
  42. package/dist/tools/modify/apply-text-style.js +117 -0
  43. package/dist/tools/modify/apply-text-style.js.map +1 -0
  44. package/dist/tools/modify/close-document.d.ts.map +1 -1
  45. package/dist/tools/modify/close-document.js +9 -9
  46. package/dist/tools/modify/close-document.js.map +1 -1
  47. package/dist/tools/modify/convert-to-outlines.d.ts.map +1 -1
  48. package/dist/tools/modify/convert-to-outlines.js +7 -29
  49. package/dist/tools/modify/convert-to-outlines.js.map +1 -1
  50. package/dist/tools/modify/create-document.d.ts.map +1 -1
  51. package/dist/tools/modify/create-document.js +8 -6
  52. package/dist/tools/modify/create-document.js.map +1 -1
  53. package/dist/tools/modify/create-ellipse.d.ts.map +1 -1
  54. package/dist/tools/modify/create-ellipse.js +15 -32
  55. package/dist/tools/modify/create-ellipse.js.map +1 -1
  56. package/dist/tools/modify/create-gradient.d.ts +3 -0
  57. package/dist/tools/modify/create-gradient.d.ts.map +1 -0
  58. package/dist/tools/modify/create-gradient.js +111 -0
  59. package/dist/tools/modify/create-gradient.js.map +1 -0
  60. package/dist/tools/modify/create-line.d.ts.map +1 -1
  61. package/dist/tools/modify/create-line.js +16 -36
  62. package/dist/tools/modify/create-line.js.map +1 -1
  63. package/dist/tools/modify/create-path-text.d.ts +3 -0
  64. package/dist/tools/modify/create-path-text.d.ts.map +1 -0
  65. package/dist/tools/modify/create-path-text.js +85 -0
  66. package/dist/tools/modify/create-path-text.js.map +1 -0
  67. package/dist/tools/modify/create-path.d.ts.map +1 -1
  68. package/dist/tools/modify/create-path.js +18 -38
  69. package/dist/tools/modify/create-path.js.map +1 -1
  70. package/dist/tools/modify/create-rectangle.d.ts.map +1 -1
  71. package/dist/tools/modify/create-rectangle.js +16 -32
  72. package/dist/tools/modify/create-rectangle.js.map +1 -1
  73. package/dist/tools/modify/create-text-frame.d.ts.map +1 -1
  74. package/dist/tools/modify/create-text-frame.js +27 -40
  75. package/dist/tools/modify/create-text-frame.js.map +1 -1
  76. package/dist/tools/modify/duplicate-objects.d.ts +3 -0
  77. package/dist/tools/modify/duplicate-objects.d.ts.map +1 -0
  78. package/dist/tools/modify/duplicate-objects.js +97 -0
  79. package/dist/tools/modify/duplicate-objects.js.map +1 -0
  80. package/dist/tools/modify/group-objects.d.ts +3 -0
  81. package/dist/tools/modify/group-objects.d.ts.map +1 -0
  82. package/dist/tools/modify/group-objects.js +79 -0
  83. package/dist/tools/modify/group-objects.js.map +1 -0
  84. package/dist/tools/modify/manage-artboards.d.ts +3 -0
  85. package/dist/tools/modify/manage-artboards.d.ts.map +1 -0
  86. package/dist/tools/modify/manage-artboards.js +142 -0
  87. package/dist/tools/modify/manage-artboards.js.map +1 -0
  88. package/dist/tools/modify/manage-datasets.d.ts +3 -0
  89. package/dist/tools/modify/manage-datasets.d.ts.map +1 -0
  90. package/dist/tools/modify/manage-datasets.js +126 -0
  91. package/dist/tools/modify/manage-datasets.js.map +1 -0
  92. package/dist/tools/modify/manage-layers.d.ts +3 -0
  93. package/dist/tools/modify/manage-layers.d.ts.map +1 -0
  94. package/dist/tools/modify/manage-layers.js +141 -0
  95. package/dist/tools/modify/manage-layers.js.map +1 -0
  96. package/dist/tools/modify/manage-linked-images.d.ts +3 -0
  97. package/dist/tools/modify/manage-linked-images.d.ts.map +1 -0
  98. package/dist/tools/modify/manage-linked-images.js +96 -0
  99. package/dist/tools/modify/manage-linked-images.js.map +1 -0
  100. package/dist/tools/modify/manage-swatches.d.ts +3 -0
  101. package/dist/tools/modify/manage-swatches.d.ts.map +1 -0
  102. package/dist/tools/modify/manage-swatches.js +78 -0
  103. package/dist/tools/modify/manage-swatches.js.map +1 -0
  104. package/dist/tools/modify/modify-object.d.ts.map +1 -1
  105. package/dist/tools/modify/modify-object.js +31 -47
  106. package/dist/tools/modify/modify-object.js.map +1 -1
  107. package/dist/tools/modify/move-to-layer.d.ts +3 -0
  108. package/dist/tools/modify/move-to-layer.d.ts.map +1 -0
  109. package/dist/tools/modify/move-to-layer.js +73 -0
  110. package/dist/tools/modify/move-to-layer.js.map +1 -0
  111. package/dist/tools/modify/open-document.d.ts +3 -0
  112. package/dist/tools/modify/open-document.d.ts.map +1 -0
  113. package/dist/tools/modify/open-document.js +72 -0
  114. package/dist/tools/modify/open-document.js.map +1 -0
  115. package/dist/tools/modify/place-color-chips.d.ts +3 -0
  116. package/dist/tools/modify/place-color-chips.d.ts.map +1 -0
  117. package/dist/tools/modify/place-color-chips.js +218 -0
  118. package/dist/tools/modify/place-color-chips.js.map +1 -0
  119. package/dist/tools/modify/place-image.d.ts.map +1 -1
  120. package/dist/tools/modify/place-image.js +26 -35
  121. package/dist/tools/modify/place-image.js.map +1 -1
  122. package/dist/tools/modify/place-symbol.d.ts +3 -0
  123. package/dist/tools/modify/place-symbol.d.ts.map +1 -0
  124. package/dist/tools/modify/place-symbol.js +96 -0
  125. package/dist/tools/modify/place-symbol.js.map +1 -0
  126. package/dist/tools/modify/replace-color.d.ts +3 -0
  127. package/dist/tools/modify/replace-color.d.ts.map +1 -0
  128. package/dist/tools/modify/replace-color.js +136 -0
  129. package/dist/tools/modify/replace-color.js.map +1 -0
  130. package/dist/tools/modify/resize-for-variation.d.ts +3 -0
  131. package/dist/tools/modify/resize-for-variation.d.ts.map +1 -0
  132. package/dist/tools/modify/resize-for-variation.js +169 -0
  133. package/dist/tools/modify/resize-for-variation.js.map +1 -0
  134. package/dist/tools/modify/save-document.d.ts +3 -0
  135. package/dist/tools/modify/save-document.d.ts.map +1 -0
  136. package/dist/tools/modify/save-document.js +63 -0
  137. package/dist/tools/modify/save-document.js.map +1 -0
  138. package/dist/tools/modify/set-z-order.d.ts +3 -0
  139. package/dist/tools/modify/set-z-order.d.ts.map +1 -0
  140. package/dist/tools/modify/set-z-order.js +60 -0
  141. package/dist/tools/modify/set-z-order.js.map +1 -0
  142. package/dist/tools/modify/shared.d.ts +49 -1
  143. package/dist/tools/modify/shared.d.ts.map +1 -1
  144. package/dist/tools/modify/shared.js +48 -4
  145. package/dist/tools/modify/shared.js.map +1 -1
  146. package/dist/tools/modify/undo.d.ts +3 -0
  147. package/dist/tools/modify/undo.d.ts.map +1 -0
  148. package/dist/tools/modify/undo.js +64 -0
  149. package/dist/tools/modify/undo.js.map +1 -0
  150. package/dist/tools/modify/ungroup-objects.d.ts +3 -0
  151. package/dist/tools/modify/ungroup-objects.d.ts.map +1 -0
  152. package/dist/tools/modify/ungroup-objects.js +67 -0
  153. package/dist/tools/modify/ungroup-objects.js.map +1 -0
  154. package/dist/tools/read/check-contrast.d.ts +3 -0
  155. package/dist/tools/read/check-contrast.d.ts.map +1 -0
  156. package/dist/tools/read/check-contrast.js +239 -0
  157. package/dist/tools/read/check-contrast.js.map +1 -0
  158. package/dist/tools/read/convert-coordinate.d.ts +3 -0
  159. package/dist/tools/read/convert-coordinate.d.ts.map +1 -0
  160. package/dist/tools/read/convert-coordinate.js +74 -0
  161. package/dist/tools/read/convert-coordinate.js.map +1 -0
  162. package/dist/tools/read/extract-design-tokens.d.ts +3 -0
  163. package/dist/tools/read/extract-design-tokens.d.ts.map +1 -0
  164. package/dist/tools/read/extract-design-tokens.js +258 -0
  165. package/dist/tools/read/extract-design-tokens.js.map +1 -0
  166. package/dist/tools/read/find-objects.d.ts.map +1 -1
  167. package/dist/tools/read/find-objects.js +16 -37
  168. package/dist/tools/read/find-objects.js.map +1 -1
  169. package/dist/tools/read/get-artboards.d.ts.map +1 -1
  170. package/dist/tools/read/get-artboards.js +15 -13
  171. package/dist/tools/read/get-artboards.js.map +1 -1
  172. package/dist/tools/read/get-colors.d.ts.map +1 -1
  173. package/dist/tools/read/get-colors.js +93 -15
  174. package/dist/tools/read/get-colors.js.map +1 -1
  175. package/dist/tools/read/get-document-info.d.ts.map +1 -1
  176. package/dist/tools/read/get-document-info.js +47 -19
  177. package/dist/tools/read/get-document-info.js.map +1 -1
  178. package/dist/tools/read/get-document-structure.d.ts.map +1 -1
  179. package/dist/tools/read/get-document-structure.js +16 -24
  180. package/dist/tools/read/get-document-structure.js.map +1 -1
  181. package/dist/tools/read/get-effects.d.ts.map +1 -1
  182. package/dist/tools/read/get-effects.js +32 -43
  183. package/dist/tools/read/get-effects.js.map +1 -1
  184. package/dist/tools/read/get-groups.d.ts.map +1 -1
  185. package/dist/tools/read/get-groups.js +22 -26
  186. package/dist/tools/read/get-groups.js.map +1 -1
  187. package/dist/tools/read/get-guidelines.d.ts.map +1 -1
  188. package/dist/tools/read/get-guidelines.js +13 -16
  189. package/dist/tools/read/get-guidelines.js.map +1 -1
  190. package/dist/tools/read/get-images.d.ts.map +1 -1
  191. package/dist/tools/read/get-images.js +43 -25
  192. package/dist/tools/read/get-images.js.map +1 -1
  193. package/dist/tools/read/get-layers.d.ts.map +1 -1
  194. package/dist/tools/read/get-layers.js +14 -15
  195. package/dist/tools/read/get-layers.js.map +1 -1
  196. package/dist/tools/read/get-overprint-info.d.ts.map +1 -1
  197. package/dist/tools/read/get-overprint-info.js +72 -63
  198. package/dist/tools/read/get-overprint-info.js.map +1 -1
  199. package/dist/tools/read/get-path-items.d.ts.map +1 -1
  200. package/dist/tools/read/get-path-items.js +26 -20
  201. package/dist/tools/read/get-path-items.js.map +1 -1
  202. package/dist/tools/read/get-selection.d.ts.map +1 -1
  203. package/dist/tools/read/get-selection.js +19 -33
  204. package/dist/tools/read/get-selection.js.map +1 -1
  205. package/dist/tools/read/get-separation-info.d.ts +3 -0
  206. package/dist/tools/read/get-separation-info.d.ts.map +1 -0
  207. package/dist/tools/read/get-separation-info.js +94 -0
  208. package/dist/tools/read/get-separation-info.js.map +1 -0
  209. package/dist/tools/read/get-symbols.d.ts.map +1 -1
  210. package/dist/tools/read/get-symbols.js +19 -23
  211. package/dist/tools/read/get-symbols.js.map +1 -1
  212. package/dist/tools/read/get-text-frame-detail.d.ts.map +1 -1
  213. package/dist/tools/read/get-text-frame-detail.js +270 -67
  214. package/dist/tools/read/get-text-frame-detail.js.map +1 -1
  215. package/dist/tools/read/list-fonts.d.ts +3 -0
  216. package/dist/tools/read/list-fonts.d.ts.map +1 -0
  217. package/dist/tools/read/list-fonts.js +78 -0
  218. package/dist/tools/read/list-fonts.js.map +1 -0
  219. package/dist/tools/read/list-text-frames.d.ts.map +1 -1
  220. package/dist/tools/read/list-text-frames.js +99 -36
  221. package/dist/tools/read/list-text-frames.js.map +1 -1
  222. package/dist/tools/registry.d.ts.map +1 -1
  223. package/dist/tools/registry.js +60 -0
  224. package/dist/tools/registry.js.map +1 -1
  225. package/dist/tools/session.d.ts +36 -0
  226. package/dist/tools/session.d.ts.map +1 -0
  227. package/dist/tools/session.js +246 -0
  228. package/dist/tools/session.js.map +1 -0
  229. package/dist/tools/utility/check-text-consistency.d.ts +3 -0
  230. package/dist/tools/utility/check-text-consistency.d.ts.map +1 -0
  231. package/dist/tools/utility/check-text-consistency.js +303 -0
  232. package/dist/tools/utility/check-text-consistency.js.map +1 -0
  233. package/dist/tools/utility/preflight-check.d.ts.map +1 -1
  234. package/dist/tools/utility/preflight-check.js +141 -43
  235. package/dist/tools/utility/preflight-check.js.map +1 -1
  236. package/dist/tools/utility/set-workflow.d.ts +3 -0
  237. package/dist/tools/utility/set-workflow.d.ts.map +1 -0
  238. package/dist/tools/utility/set-workflow.js +95 -0
  239. package/dist/tools/utility/set-workflow.js.map +1 -0
  240. package/dist/utils/image-header.d.ts.map +1 -1
  241. package/dist/utils/image-header.js +5 -1
  242. package/dist/utils/image-header.js.map +1 -1
  243. package/package.json +1 -1
@@ -1,5 +1,15 @@
1
1
  import { z } from 'zod';
2
2
  import { executeJsxHeavy } from '../../executor/jsx-runner.js';
3
+ import { WRITE_IDEMPOTENT_ANNOTATIONS, coerceBoolean } from '../modify/shared.js';
4
+ /**
5
+ * export — SVG/PNG/JPG/WebP 書き出し
6
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/Document/ — exportFile()
7
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/ExportOptionsPNG24/
8
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/ExportOptionsSVG/
9
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/ExportOptionsJPEG/
10
+ *
11
+ * 注意: SVGIdType / idType はリファレンスに記載がないが try/catch で安全に処理。
12
+ */
3
13
  const jsxCode = `
4
14
  var preflight = preflightChecks();
5
15
  if (preflight) {
@@ -39,27 +49,7 @@ if (preflight) {
39
49
  } else {
40
50
  // UUID target — find and select (UUID は item.note に格納)
41
51
  targetType = "uuid";
42
- function findByUUID(items, uuid) {
43
- for (var i = 0; i < items.length; i++) {
44
- var item = items[i];
45
- try {
46
- if (item.note === uuid) return item;
47
- } catch(ex) {}
48
- if (item.typename === "GroupItem") {
49
- try {
50
- var child = findByUUID(item.pageItems, uuid);
51
- if (child) return child;
52
- } catch(ex2) {}
53
- }
54
- }
55
- return null;
56
- }
57
- // 全レイヤーを走査
58
- var targetItem = null;
59
- for (var li = 0; li < doc.layers.length; li++) {
60
- targetItem = findByUUID(doc.layers[li].pageItems, target);
61
- if (targetItem) break;
62
- }
52
+ var targetItem = findItemByUUID(target);
63
53
  if (!targetItem) {
64
54
  writeResultFile(RESULT_PATH, { error: true, message: "No object found matching UUID: " + target });
65
55
  targetType = "error";
@@ -70,8 +60,9 @@ if (preflight) {
70
60
  }
71
61
  }
72
62
 
63
+ var outFile = null;
73
64
  if (targetType !== "error") {
74
- var outFile = new File(outputPath);
65
+ outFile = new File(outputPath);
75
66
  var parentFolder = outFile.parent;
76
67
  if (!parentFolder.exists) {
77
68
  writeResultFile(RESULT_PATH, { error: true, message: "Output directory does not exist: " + parentFolder.fsName });
@@ -80,10 +71,9 @@ if (preflight) {
80
71
  }
81
72
 
82
73
  if (targetType !== "error") {
83
- var outFile = new File(outputPath);
84
-
85
74
  // UUID指定かつラスタ形式の場合、一時ドキュメントにコピーして書き出す
86
- var useIsolatedExport = (targetType === "selection" && typeof targetItem !== "undefined" && targetItem !== null && (format === "png" || format === "jpg"));
75
+ var isUUIDTarget = (targetType === "selection" && target !== "selection");
76
+ var useIsolatedExport = (isUUIDTarget && (format === "png" || format === "jpg"));
87
77
 
88
78
  if (useIsolatedExport) {
89
79
  // 選択オブジェクトをコピー
@@ -96,6 +86,7 @@ if (preflight) {
96
86
 
97
87
  // 一時ドキュメントを作成
98
88
  var tempDoc = app.documents.add(doc.documentColorSpace, objW, objH);
89
+ try {
99
90
  tempDoc.artboards[0].artboardRect = [0, objH, objW, 0];
100
91
 
101
92
  // ペースト
@@ -142,8 +133,10 @@ if (preflight) {
142
133
  tempDoc.exportFile(outFile, ExportType.JPEG, jpgOpts);
143
134
  }
144
135
 
145
- // 一時ドキュメントを閉じる(保存しない)
136
+ } finally {
137
+ // 一時ドキュメントを閉じる(エクスポート失敗時もリーク防止)
146
138
  tempDoc.close(SaveOptions.DONOTSAVECHANGES);
139
+ }
147
140
 
148
141
  } else {
149
142
  // 従来の書き出しロジック(artboard / selection / SVG)
@@ -162,13 +155,15 @@ if (preflight) {
162
155
  if (typeof svgOpts.embed_images !== "undefined") {
163
156
  opts.embedRasterImages = svgOpts.embed_images;
164
157
  }
165
- if (svgOpts.id_naming === "layer") {
166
- opts.idType = SVGIdType.SVGIDMINIMAL;
167
- } else if (svgOpts.id_naming === "object") {
168
- opts.idType = SVGIdType.SVGIDUNIQUE;
169
- } else {
170
- opts.idType = SVGIdType.SVGIDREGULAR;
171
- }
158
+ try {
159
+ if (svgOpts.id_naming === "layer") {
160
+ opts.idType = SVGIdType.SVGIDMINIMAL;
161
+ } else if (svgOpts.id_naming === "object") {
162
+ opts.idType = SVGIdType.SVGIDUNIQUE;
163
+ } else {
164
+ opts.idType = SVGIdType.SVGIDREGULAR;
165
+ }
166
+ } catch (_) { /* SVGIdType may not exist in some ExtendScript versions */ }
172
167
  if (typeof svgOpts.decimal_places === "number") {
173
168
  opts.coordinatePrecision = svgOpts.decimal_places;
174
169
  }
@@ -199,8 +194,6 @@ if (preflight) {
199
194
  if (targetType === "artboard") {
200
195
  doc.artboards.setActiveArtboardIndex(artboardIndex);
201
196
  pngOpts.artBoardClipping = true;
202
- pngOpts.saveMultipleArtboards = true;
203
- pngOpts.artboardRange = String(artboardIndex + 1);
204
197
  } else if (targetType === "selection") {
205
198
  pngOpts.artBoardClipping = false;
206
199
  }
@@ -218,8 +211,6 @@ if (preflight) {
218
211
  if (targetType === "artboard") {
219
212
  doc.artboards.setActiveArtboardIndex(artboardIndex);
220
213
  jpgOpts.artBoardClipping = true;
221
- jpgOpts.saveMultipleArtboards = true;
222
- jpgOpts.artboardRange = String(artboardIndex + 1);
223
214
  } else if (targetType === "selection") {
224
215
  jpgOpts.artBoardClipping = false;
225
216
  }
@@ -234,7 +225,13 @@ if (preflight) {
234
225
  if (!verifyFile.exists) {
235
226
  writeResultFile(RESULT_PATH, { error: true, message: "Export completed but output file was not created. The path may not be writable: " + outputPath });
236
227
  } else {
237
- writeResultFile(RESULT_PATH, { success: true, output_path: outputPath });
228
+ var resultInfo = { success: true, output_path: outputPath, format: format };
229
+ if (format === "png" || format === "jpg") {
230
+ var effectiveDpi = (rasterOpts.dpi || 72) * scale;
231
+ resultInfo.dpi = effectiveDpi;
232
+ resultInfo.scale = scale;
233
+ }
234
+ writeResultFile(RESULT_PATH, resultInfo);
238
235
  }
239
236
  }
240
237
 
@@ -251,7 +248,7 @@ export function register(server) {
251
248
  inputSchema: {
252
249
  target: z
253
250
  .string()
254
- .describe('UUID, "artboard:<index>", or "selection"'),
251
+ .describe('UUID, "artboard:<index>", or "selection". When exporting a UUID target as PNG/JPG, a temporary document is created internally (selection state may change).'),
255
252
  // WebP is not supported by ExtendScript API
256
253
  // format: z.enum(['svg', 'png', 'webp', 'jpg']).describe('Export format'),
257
254
  format: z.enum(['svg', 'png', 'jpg']).describe('Export format'),
@@ -259,9 +256,9 @@ export function register(server) {
259
256
  scale: z.number().optional().default(1).describe('Scale factor'),
260
257
  svg_options: z
261
258
  .object({
262
- text_outline: z.boolean().optional().describe('Convert text to outlines'),
263
- css_properties: z.boolean().optional().describe('Export as CSS properties'),
264
- embed_images: z.boolean().optional().describe('Embed raster images'),
259
+ text_outline: coerceBoolean.optional().describe('Convert text to outlines'),
260
+ css_properties: coerceBoolean.optional().describe('Export as CSS properties'),
261
+ embed_images: coerceBoolean.optional().describe('Embed raster images'),
265
262
  id_naming: z
266
263
  .enum(['layer', 'object', 'auto'])
267
264
  .optional()
@@ -277,17 +274,12 @@ export function register(server) {
277
274
  .string()
278
275
  .optional()
279
276
  .describe('"transparent", "white", or color code'),
280
- antialiasing: z.boolean().optional().describe('Anti-aliasing'),
277
+ antialiasing: coerceBoolean.optional().describe('Anti-aliasing'),
281
278
  })
282
279
  .optional()
283
280
  .describe('Raster export options'),
284
281
  },
285
- annotations: {
286
- readOnlyHint: false,
287
- destructiveHint: false,
288
- idempotentHint: true,
289
- openWorldHint: false,
290
- },
282
+ annotations: WRITE_IDEMPOTENT_ANNOTATIONS,
291
283
  }, async (params) => {
292
284
  const result = await executeJsxHeavy(jsxCode, params);
293
285
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/tools/export/export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/tools/export/export.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClF;;;;;;;;GAQG;AACH,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsOf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,gIAAgI;QAC7I,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,6JAA6J,CAAC;YAC1K,4CAA4C;YAC5C,2EAA2E;YAC3E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;YAChE,WAAW,EAAE,CAAC;iBACX,MAAM,CAAC;gBACN,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAC3E,cAAc,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAC7E,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACrE,SAAS,EAAE,CAAC;qBACT,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;qBACjC,QAAQ,EAAE;qBACV,QAAQ,CAAC,kBAAkB,CAAC;gBAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;aACjE,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,oBAAoB,CAAC;YAClC,cAAc,EAAE,CAAC;iBACd,MAAM,CAAC;gBACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACvD,UAAU,EAAE,CAAC;qBACV,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,uCAAuC,CAAC;gBACnD,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;aACjE,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,uBAAuB,CAAC;SACrC;QACD,WAAW,EAAE,4BAA4B;KAC3C,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtD,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,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=align-objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"align-objects.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/align-objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyKpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkChD"}
@@ -0,0 +1,195 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../../executor/jsx-runner.js';
3
+ import { coordinateSystemSchema, resolveCoordinateSystem, } from '../session.js';
4
+ import { WRITE_ANNOTATIONS } from './shared.js';
5
+ /**
6
+ * align_objects — オブジェクトの整列・均等配置
7
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/PageItem/ — geometricBounds, position, translate()
8
+ */
9
+ const jsxCode = `
10
+ var preflight = preflightChecks();
11
+ if (preflight) {
12
+ writeResultFile(RESULT_PATH, preflight);
13
+ } else {
14
+ try {
15
+ var params = readParamsFile(PARAMS_PATH);
16
+ var doc = app.activeDocument;
17
+ var uuids = params.uuids;
18
+ var alignment = params.alignment;
19
+ var distribute = params.distribute || null;
20
+ var reference = params.reference || "selection";
21
+
22
+ if (!alignment && !distribute) {
23
+ writeResultFile(RESULT_PATH, { error: true, message: "At least one of alignment or distribute must be specified" });
24
+ } else if (!uuids || uuids.length < 2) {
25
+ writeResultFile(RESULT_PATH, { error: true, message: "At least 2 UUIDs are required" });
26
+ } else {
27
+ // Collect items by UUID
28
+ var items = [];
29
+ for (var i = 0; i < uuids.length; i++) {
30
+ var found = findItemByUUID(uuids[i]);
31
+ if (found) {
32
+ items.push(found);
33
+ }
34
+ }
35
+
36
+ if (items.length < 2) {
37
+ writeResultFile(RESULT_PATH, { error: true, message: "Could not find at least 2 objects with the given UUIDs" });
38
+ } else {
39
+ // Pre-cache all bounds (1回のDOM アクセスで済ませる)
40
+ var boundsCache = [];
41
+ for (var bi = 0; bi < items.length; bi++) {
42
+ boundsCache.push(items[bi].geometricBounds);
43
+ }
44
+
45
+ // Get reference bounds
46
+ var refLeft, refRight, refTop, refBottom;
47
+ if (reference === "artboard") {
48
+ var abIdx = doc.artboards.getActiveArtboardIndex();
49
+ var abRect = getArtboardRectByIndex(abIdx);
50
+ if (!abRect) {
51
+ writeResultFile(RESULT_PATH, { error: true, message: "Could not resolve active artboard" });
52
+ items = []; // alignment/distribution をスキップ
53
+ } else {
54
+ refLeft = abRect[0];
55
+ refTop = abRect[1];
56
+ refRight = abRect[2];
57
+ refBottom = abRect[3];
58
+ }
59
+ } else {
60
+ refLeft = Infinity;
61
+ refTop = -Infinity;
62
+ refRight = -Infinity;
63
+ refBottom = Infinity;
64
+ for (var si = 0; si < boundsCache.length; si++) {
65
+ var sb = boundsCache[si];
66
+ if (sb[0] < refLeft) refLeft = sb[0];
67
+ if (sb[1] > refTop) refTop = sb[1];
68
+ if (sb[2] > refRight) refRight = sb[2];
69
+ if (sb[3] < refBottom) refBottom = sb[3];
70
+ }
71
+ }
72
+
73
+ // Alignment
74
+ if (alignment) {
75
+ for (var ai = 0; ai < items.length; ai++) {
76
+ var b = boundsCache[ai];
77
+ var w = b[2] - b[0];
78
+ var h = b[1] - b[3];
79
+
80
+ if (alignment === "left") {
81
+ items[ai].position = [refLeft, b[1]];
82
+ } else if (alignment === "right") {
83
+ items[ai].position = [refRight - w, b[1]];
84
+ } else if (alignment === "center_h") {
85
+ var cx = (refLeft + refRight) / 2;
86
+ items[ai].position = [cx - w / 2, b[1]];
87
+ } else if (alignment === "top") {
88
+ items[ai].position = [b[0], refTop];
89
+ } else if (alignment === "bottom") {
90
+ items[ai].position = [b[0], refBottom + h];
91
+ } else if (alignment === "center_v") {
92
+ var cy = (refTop + refBottom) / 2;
93
+ items[ai].position = [b[0], cy + h / 2];
94
+ }
95
+ }
96
+ }
97
+
98
+ // Distribution (bounds を再取得 — alignment で位置が変わっている可能性あり)
99
+ if (distribute) {
100
+ // 整列後の bounds を再取得
101
+ var distBounds = [];
102
+ for (var dbi = 0; dbi < items.length; dbi++) {
103
+ distBounds.push(items[dbi].geometricBounds);
104
+ }
105
+
106
+ // ソート用のインデックス配列を構築(bounds と item の対応を維持)
107
+ var indices = [];
108
+ for (var ii = 0; ii < items.length; ii++) { indices.push(ii); }
109
+
110
+ if (distribute === "horizontal") {
111
+ indices.sort(function(a, b) { return distBounds[a][0] - distBounds[b][0]; });
112
+ var totalWidth = 0;
113
+ for (var di = 0; di < indices.length; di++) {
114
+ var db = distBounds[indices[di]];
115
+ totalWidth += (db[2] - db[0]);
116
+ }
117
+ var firstLeft = distBounds[indices[0]][0];
118
+ var lastRight = distBounds[indices[indices.length - 1]][2];
119
+ var totalSpace = (lastRight - firstLeft) - totalWidth;
120
+ var gap = totalSpace / (indices.length - 1);
121
+ var currentX = firstLeft;
122
+ for (var di2 = 0; di2 < indices.length; di2++) {
123
+ var idx = indices[di2];
124
+ var itemW = distBounds[idx][2] - distBounds[idx][0];
125
+ items[idx].position = [currentX, distBounds[idx][1]];
126
+ currentX += itemW + gap;
127
+ }
128
+ } else if (distribute === "vertical") {
129
+ indices.sort(function(a, b) { return distBounds[b][1] - distBounds[a][1]; });
130
+ var totalHeight = 0;
131
+ for (var dj = 0; dj < indices.length; dj++) {
132
+ var dbv = distBounds[indices[dj]];
133
+ totalHeight += (dbv[1] - dbv[3]);
134
+ }
135
+ var firstTop = distBounds[indices[0]][1];
136
+ var lastBottom = distBounds[indices[indices.length - 1]][3];
137
+ var totalSpaceV = (firstTop - lastBottom) - totalHeight;
138
+ var gapV = totalSpaceV / (indices.length - 1);
139
+ var currentY = firstTop;
140
+ for (var dj2 = 0; dj2 < indices.length; dj2++) {
141
+ var idxV = indices[dj2];
142
+ var itemH = distBounds[idxV][1] - distBounds[idxV][3];
143
+ items[idxV].position = [distBounds[idxV][0], currentY];
144
+ currentY -= itemH + gapV;
145
+ }
146
+ }
147
+ }
148
+
149
+ if (items.length > 0) {
150
+ writeResultFile(RESULT_PATH, {
151
+ success: true,
152
+ alignedCount: items.length,
153
+ alignment: alignment || null,
154
+ distribute: distribute
155
+ });
156
+ }
157
+ }
158
+ }
159
+ } catch (e) {
160
+ writeResultFile(RESULT_PATH, { error: true, message: "Align failed: " + e.message, line: e.line });
161
+ }
162
+ }
163
+ `;
164
+ export function register(server) {
165
+ server.registerTool('align_objects', {
166
+ title: 'Align Objects',
167
+ description: 'Align and/or distribute multiple objects by their UUIDs',
168
+ inputSchema: {
169
+ uuids: z
170
+ .array(z.string())
171
+ .min(2)
172
+ .describe('UUIDs of objects to align (minimum 2)'),
173
+ alignment: z
174
+ .enum(['left', 'center_h', 'right', 'top', 'center_v', 'bottom'])
175
+ .optional()
176
+ .describe('Alignment direction'),
177
+ distribute: z
178
+ .enum(['horizontal', 'vertical'])
179
+ .optional()
180
+ .describe('Distribute objects evenly'),
181
+ reference: z
182
+ .enum(['selection', 'artboard'])
183
+ .optional()
184
+ .default('selection')
185
+ .describe('Align relative to selection bounding box or active artboard'),
186
+ coordinate_system: coordinateSystemSchema,
187
+ },
188
+ annotations: WRITE_ANNOTATIONS,
189
+ }, async (params) => {
190
+ const resolvedParams = { ...params, coordinate_system: await resolveCoordinateSystem(params.coordinate_system) };
191
+ const result = await executeJsx(jsxCode, resolvedParams);
192
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
193
+ });
194
+ }
195
+ //# sourceMappingURL=align-objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"align-objects.js","sourceRoot":"","sources":["../../../src/tools/modify/align-objects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Jf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,uCAAuC,CAAC;YACpD,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;iBAChE,QAAQ,EAAE;iBACV,QAAQ,CAAC,qBAAqB,CAAC;YAClC,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;iBAChC,QAAQ,EAAE;iBACV,QAAQ,CAAC,2BAA2B,CAAC;YACxC,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;iBAC/B,QAAQ,EAAE;iBACV,OAAO,CAAC,WAAW,CAAC;iBACpB,QAAQ,CAAC,6DAA6D,CAAC;YAC1E,iBAAiB,EAAE,sBAAsB;SAC1C;QACD,WAAW,EAAE,iBAAiB;KAC/B,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,cAAc,GAAG,EAAE,GAAG,MAAM,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACjH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACzD,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply-color-profile.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/apply-color-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgDpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBhD"}
1
+ {"version":3,"file":"apply-color-profile.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/apply-color-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuDpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgBhD"}
@@ -1,5 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import { executeJsx } from '../../executor/jsx-runner.js';
3
+ import { DESTRUCTIVE_ANNOTATIONS } from './shared.js';
4
+ /**
5
+ * assign_color_profile — カラープロファイルの割り当て
6
+ *
7
+ * 注意: Document.colorProfileName はリファレンスに記載がないが、実際のIllustratorでは動作する。
8
+ */
3
9
  const jsxCode = `
4
10
  var preflight = preflightChecks();
5
11
  if (preflight) {
@@ -32,7 +38,8 @@ if (preflight) {
32
38
 
33
39
  if (!hasError) {
34
40
  writeResultFile(RESULT_PATH, {
35
- success: true,
41
+ assigned: true,
42
+ converted: false,
36
43
  previousProfile: oldProfile,
37
44
  newProfile: profile,
38
45
  note: note
@@ -44,18 +51,13 @@ if (preflight) {
44
51
  }
45
52
  `;
46
53
  export function register(server) {
47
- server.registerTool('apply_color_profile', {
48
- title: 'Apply Color Profile',
49
- description: 'Apply or convert color profile. Note: Illustrator will be activated (brought to foreground) during execution.',
54
+ server.registerTool('assign_color_profile', {
55
+ title: 'Assign Color Profile',
56
+ description: 'Assign (tag) a color profile to the document. WARNING: This only changes the profile tag — it does NOT convert color values (ICC conversion). For full conversion, use Edit > Convert to Profile in Illustrator. Note: Illustrator will be activated (brought to foreground) during execution.',
50
57
  inputSchema: {
51
58
  profile: z.string().describe('Color profile name or path'),
52
59
  },
53
- annotations: {
54
- readOnlyHint: false,
55
- destructiveHint: true,
56
- idempotentHint: true,
57
- openWorldHint: false,
58
- },
60
+ annotations: DESTRUCTIVE_ANNOTATIONS,
59
61
  }, async (params) => {
60
62
  const result = await executeJsx(jsxCode, params, { activate: true });
61
63
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
@@ -1 +1 @@
1
- {"version":3,"file":"apply-color-profile.js","sourceRoot":"","sources":["../../../src/tools/modify/apply-color-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Cf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,+GAA+G;QAC5H,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SAC3D;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,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,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,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"}
1
+ {"version":3,"file":"apply-color-profile.js","sourceRoot":"","sources":["../../../src/tools/modify/apply-color-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;GAIG;AACH,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Cf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,gSAAgS;QAC7S,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SAC3D;QACD,WAAW,EAAE,uBAAuB;KACrC,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,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,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=apply-graphic-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-graphic-style.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/apply-graphic-style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4EpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoChD"}
@@ -0,0 +1,100 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../../executor/jsx-runner.js';
3
+ import { READ_ANNOTATIONS, WRITE_ANNOTATIONS, coerceBoolean } from './shared.js';
4
+ /**
5
+ * apply_graphic_style / list_graphic_styles
6
+ *
7
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/GraphicStyle/ — GraphicStyle.applyTo(), mergeTo()
8
+ *
9
+ * JSX API:
10
+ * Document.graphicStyles → GraphicStyles コレクション
11
+ * GraphicStyles.getByName(name: String) → GraphicStyle
12
+ * GraphicStyle.applyTo(artItem: PageItem) → void
13
+ * GraphicStyle.mergeTo(artItem: PageItem) → void
14
+ */
15
+ const applyJsxCode = `
16
+ var preflight = preflightChecks();
17
+ if (preflight) {
18
+ writeResultFile(RESULT_PATH, preflight);
19
+ } else {
20
+ try {
21
+ var params = readParamsFile(PARAMS_PATH);
22
+ var doc = app.activeDocument;
23
+
24
+ var style = null;
25
+ try {
26
+ style = doc.graphicStyles.getByName(params.style_name);
27
+ } catch(e) {
28
+ writeResultFile(RESULT_PATH, { error: true, message: "Graphic style not found: " + params.style_name });
29
+ }
30
+
31
+ if (style) {
32
+ var appliedCount = 0;
33
+ for (var i = 0; i < params.uuids.length; i++) {
34
+ var item = findItemByUUID(params.uuids[i]);
35
+ if (item) {
36
+ if (params.merge === true) {
37
+ style.mergeTo(item);
38
+ } else {
39
+ style.applyTo(item);
40
+ }
41
+ appliedCount++;
42
+ }
43
+ }
44
+ writeResultFile(RESULT_PATH, {
45
+ success: true,
46
+ styleName: params.style_name,
47
+ appliedCount: appliedCount,
48
+ merge: params.merge === true
49
+ });
50
+ }
51
+ } catch (e) {
52
+ writeResultFile(RESULT_PATH, { error: true, message: "apply_graphic_style failed: " + e.message, line: e.line });
53
+ }
54
+ }
55
+ `;
56
+ const listJsxCode = `
57
+ var preflight = preflightChecks();
58
+ if (preflight) {
59
+ writeResultFile(RESULT_PATH, preflight);
60
+ } else {
61
+ try {
62
+ var doc = app.activeDocument;
63
+ var styles = [];
64
+ for (var i = 0; i < doc.graphicStyles.length; i++) {
65
+ styles.push({ index: i, name: doc.graphicStyles[i].name });
66
+ }
67
+ writeResultFile(RESULT_PATH, { count: styles.length, styles: styles });
68
+ } catch (e) {
69
+ writeResultFile(RESULT_PATH, { error: true, message: "list_graphic_styles failed: " + e.message, line: e.line });
70
+ }
71
+ }
72
+ `;
73
+ export function register(server) {
74
+ server.registerTool('apply_graphic_style', {
75
+ title: 'Apply Graphic Style',
76
+ description: 'Apply a graphic style to objects. Note: Illustrator will be activated (brought to foreground) during execution.',
77
+ inputSchema: {
78
+ style_name: z.string().describe('Name of the graphic style to apply'),
79
+ uuids: z.array(z.string()).min(1).describe('UUIDs of target objects'),
80
+ merge: coerceBoolean
81
+ .optional()
82
+ .default(false)
83
+ .describe('true = merge with existing appearance, false = replace'),
84
+ },
85
+ annotations: WRITE_ANNOTATIONS,
86
+ }, async (params) => {
87
+ const result = await executeJsx(applyJsxCode, params, { activate: true });
88
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
89
+ });
90
+ server.registerTool('list_graphic_styles', {
91
+ title: 'List Graphic Styles',
92
+ description: 'List all graphic styles in the active document.',
93
+ inputSchema: {},
94
+ annotations: READ_ANNOTATIONS,
95
+ }, async (params) => {
96
+ const result = await executeJsx(listJsxCode, params);
97
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
98
+ });
99
+ }
100
+ //# sourceMappingURL=apply-graphic-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-graphic-style.js","sourceRoot":"","sources":["../../../src/tools/modify/apply-graphic-style.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCpB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;CAgBnB,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,iHAAiH;QACnH,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YACrE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACrE,KAAK,EAAE,aAAa;iBACjB,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,wDAAwD,CAAC;SACtE;QACD,WAAW,EAAE,iBAAiB;KAC/B,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,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;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACrD,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,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=apply-text-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-text-style.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/apply-text-style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4FpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqChD"}