illustrator-mcp-server 1.2.3 → 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 (246) 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 +3 -0
  45. package/dist/tools/modify/close-document.d.ts.map +1 -0
  46. package/dist/tools/modify/close-document.js +46 -0
  47. package/dist/tools/modify/close-document.js.map +1 -0
  48. package/dist/tools/modify/convert-to-outlines.d.ts.map +1 -1
  49. package/dist/tools/modify/convert-to-outlines.js +7 -29
  50. package/dist/tools/modify/convert-to-outlines.js.map +1 -1
  51. package/dist/tools/modify/create-document.d.ts +3 -0
  52. package/dist/tools/modify/create-document.d.ts.map +1 -0
  53. package/dist/tools/modify/create-document.js +67 -0
  54. package/dist/tools/modify/create-document.js.map +1 -0
  55. package/dist/tools/modify/create-ellipse.d.ts.map +1 -1
  56. package/dist/tools/modify/create-ellipse.js +15 -32
  57. package/dist/tools/modify/create-ellipse.js.map +1 -1
  58. package/dist/tools/modify/create-gradient.d.ts +3 -0
  59. package/dist/tools/modify/create-gradient.d.ts.map +1 -0
  60. package/dist/tools/modify/create-gradient.js +111 -0
  61. package/dist/tools/modify/create-gradient.js.map +1 -0
  62. package/dist/tools/modify/create-line.d.ts.map +1 -1
  63. package/dist/tools/modify/create-line.js +16 -36
  64. package/dist/tools/modify/create-line.js.map +1 -1
  65. package/dist/tools/modify/create-path-text.d.ts +3 -0
  66. package/dist/tools/modify/create-path-text.d.ts.map +1 -0
  67. package/dist/tools/modify/create-path-text.js +85 -0
  68. package/dist/tools/modify/create-path-text.js.map +1 -0
  69. package/dist/tools/modify/create-path.d.ts.map +1 -1
  70. package/dist/tools/modify/create-path.js +18 -38
  71. package/dist/tools/modify/create-path.js.map +1 -1
  72. package/dist/tools/modify/create-rectangle.d.ts.map +1 -1
  73. package/dist/tools/modify/create-rectangle.js +16 -32
  74. package/dist/tools/modify/create-rectangle.js.map +1 -1
  75. package/dist/tools/modify/create-text-frame.d.ts.map +1 -1
  76. package/dist/tools/modify/create-text-frame.js +27 -40
  77. package/dist/tools/modify/create-text-frame.js.map +1 -1
  78. package/dist/tools/modify/duplicate-objects.d.ts +3 -0
  79. package/dist/tools/modify/duplicate-objects.d.ts.map +1 -0
  80. package/dist/tools/modify/duplicate-objects.js +97 -0
  81. package/dist/tools/modify/duplicate-objects.js.map +1 -0
  82. package/dist/tools/modify/group-objects.d.ts +3 -0
  83. package/dist/tools/modify/group-objects.d.ts.map +1 -0
  84. package/dist/tools/modify/group-objects.js +79 -0
  85. package/dist/tools/modify/group-objects.js.map +1 -0
  86. package/dist/tools/modify/manage-artboards.d.ts +3 -0
  87. package/dist/tools/modify/manage-artboards.d.ts.map +1 -0
  88. package/dist/tools/modify/manage-artboards.js +142 -0
  89. package/dist/tools/modify/manage-artboards.js.map +1 -0
  90. package/dist/tools/modify/manage-datasets.d.ts +3 -0
  91. package/dist/tools/modify/manage-datasets.d.ts.map +1 -0
  92. package/dist/tools/modify/manage-datasets.js +126 -0
  93. package/dist/tools/modify/manage-datasets.js.map +1 -0
  94. package/dist/tools/modify/manage-layers.d.ts +3 -0
  95. package/dist/tools/modify/manage-layers.d.ts.map +1 -0
  96. package/dist/tools/modify/manage-layers.js +141 -0
  97. package/dist/tools/modify/manage-layers.js.map +1 -0
  98. package/dist/tools/modify/manage-linked-images.d.ts +3 -0
  99. package/dist/tools/modify/manage-linked-images.d.ts.map +1 -0
  100. package/dist/tools/modify/manage-linked-images.js +96 -0
  101. package/dist/tools/modify/manage-linked-images.js.map +1 -0
  102. package/dist/tools/modify/manage-swatches.d.ts +3 -0
  103. package/dist/tools/modify/manage-swatches.d.ts.map +1 -0
  104. package/dist/tools/modify/manage-swatches.js +78 -0
  105. package/dist/tools/modify/manage-swatches.js.map +1 -0
  106. package/dist/tools/modify/modify-object.d.ts.map +1 -1
  107. package/dist/tools/modify/modify-object.js +31 -47
  108. package/dist/tools/modify/modify-object.js.map +1 -1
  109. package/dist/tools/modify/move-to-layer.d.ts +3 -0
  110. package/dist/tools/modify/move-to-layer.d.ts.map +1 -0
  111. package/dist/tools/modify/move-to-layer.js +73 -0
  112. package/dist/tools/modify/move-to-layer.js.map +1 -0
  113. package/dist/tools/modify/open-document.d.ts +3 -0
  114. package/dist/tools/modify/open-document.d.ts.map +1 -0
  115. package/dist/tools/modify/open-document.js +72 -0
  116. package/dist/tools/modify/open-document.js.map +1 -0
  117. package/dist/tools/modify/place-color-chips.d.ts +3 -0
  118. package/dist/tools/modify/place-color-chips.d.ts.map +1 -0
  119. package/dist/tools/modify/place-color-chips.js +218 -0
  120. package/dist/tools/modify/place-color-chips.js.map +1 -0
  121. package/dist/tools/modify/place-image.d.ts +3 -0
  122. package/dist/tools/modify/place-image.d.ts.map +1 -0
  123. package/dist/tools/modify/place-image.js +113 -0
  124. package/dist/tools/modify/place-image.js.map +1 -0
  125. package/dist/tools/modify/place-symbol.d.ts +3 -0
  126. package/dist/tools/modify/place-symbol.d.ts.map +1 -0
  127. package/dist/tools/modify/place-symbol.js +96 -0
  128. package/dist/tools/modify/place-symbol.js.map +1 -0
  129. package/dist/tools/modify/replace-color.d.ts +3 -0
  130. package/dist/tools/modify/replace-color.d.ts.map +1 -0
  131. package/dist/tools/modify/replace-color.js +136 -0
  132. package/dist/tools/modify/replace-color.js.map +1 -0
  133. package/dist/tools/modify/resize-for-variation.d.ts +3 -0
  134. package/dist/tools/modify/resize-for-variation.d.ts.map +1 -0
  135. package/dist/tools/modify/resize-for-variation.js +169 -0
  136. package/dist/tools/modify/resize-for-variation.js.map +1 -0
  137. package/dist/tools/modify/save-document.d.ts +3 -0
  138. package/dist/tools/modify/save-document.d.ts.map +1 -0
  139. package/dist/tools/modify/save-document.js +63 -0
  140. package/dist/tools/modify/save-document.js.map +1 -0
  141. package/dist/tools/modify/set-z-order.d.ts +3 -0
  142. package/dist/tools/modify/set-z-order.d.ts.map +1 -0
  143. package/dist/tools/modify/set-z-order.js +60 -0
  144. package/dist/tools/modify/set-z-order.js.map +1 -0
  145. package/dist/tools/modify/shared.d.ts +49 -1
  146. package/dist/tools/modify/shared.d.ts.map +1 -1
  147. package/dist/tools/modify/shared.js +48 -4
  148. package/dist/tools/modify/shared.js.map +1 -1
  149. package/dist/tools/modify/undo.d.ts +3 -0
  150. package/dist/tools/modify/undo.d.ts.map +1 -0
  151. package/dist/tools/modify/undo.js +64 -0
  152. package/dist/tools/modify/undo.js.map +1 -0
  153. package/dist/tools/modify/ungroup-objects.d.ts +3 -0
  154. package/dist/tools/modify/ungroup-objects.d.ts.map +1 -0
  155. package/dist/tools/modify/ungroup-objects.js +67 -0
  156. package/dist/tools/modify/ungroup-objects.js.map +1 -0
  157. package/dist/tools/read/check-contrast.d.ts +3 -0
  158. package/dist/tools/read/check-contrast.d.ts.map +1 -0
  159. package/dist/tools/read/check-contrast.js +239 -0
  160. package/dist/tools/read/check-contrast.js.map +1 -0
  161. package/dist/tools/read/convert-coordinate.d.ts +3 -0
  162. package/dist/tools/read/convert-coordinate.d.ts.map +1 -0
  163. package/dist/tools/read/convert-coordinate.js +74 -0
  164. package/dist/tools/read/convert-coordinate.js.map +1 -0
  165. package/dist/tools/read/extract-design-tokens.d.ts +3 -0
  166. package/dist/tools/read/extract-design-tokens.d.ts.map +1 -0
  167. package/dist/tools/read/extract-design-tokens.js +258 -0
  168. package/dist/tools/read/extract-design-tokens.js.map +1 -0
  169. package/dist/tools/read/find-objects.d.ts.map +1 -1
  170. package/dist/tools/read/find-objects.js +16 -37
  171. package/dist/tools/read/find-objects.js.map +1 -1
  172. package/dist/tools/read/get-artboards.d.ts.map +1 -1
  173. package/dist/tools/read/get-artboards.js +15 -13
  174. package/dist/tools/read/get-artboards.js.map +1 -1
  175. package/dist/tools/read/get-colors.d.ts.map +1 -1
  176. package/dist/tools/read/get-colors.js +93 -15
  177. package/dist/tools/read/get-colors.js.map +1 -1
  178. package/dist/tools/read/get-document-info.d.ts.map +1 -1
  179. package/dist/tools/read/get-document-info.js +47 -19
  180. package/dist/tools/read/get-document-info.js.map +1 -1
  181. package/dist/tools/read/get-document-structure.d.ts.map +1 -1
  182. package/dist/tools/read/get-document-structure.js +16 -24
  183. package/dist/tools/read/get-document-structure.js.map +1 -1
  184. package/dist/tools/read/get-effects.d.ts.map +1 -1
  185. package/dist/tools/read/get-effects.js +32 -43
  186. package/dist/tools/read/get-effects.js.map +1 -1
  187. package/dist/tools/read/get-groups.d.ts.map +1 -1
  188. package/dist/tools/read/get-groups.js +22 -26
  189. package/dist/tools/read/get-groups.js.map +1 -1
  190. package/dist/tools/read/get-guidelines.d.ts.map +1 -1
  191. package/dist/tools/read/get-guidelines.js +13 -16
  192. package/dist/tools/read/get-guidelines.js.map +1 -1
  193. package/dist/tools/read/get-images.d.ts.map +1 -1
  194. package/dist/tools/read/get-images.js +43 -25
  195. package/dist/tools/read/get-images.js.map +1 -1
  196. package/dist/tools/read/get-layers.d.ts.map +1 -1
  197. package/dist/tools/read/get-layers.js +14 -15
  198. package/dist/tools/read/get-layers.js.map +1 -1
  199. package/dist/tools/read/get-overprint-info.d.ts.map +1 -1
  200. package/dist/tools/read/get-overprint-info.js +72 -63
  201. package/dist/tools/read/get-overprint-info.js.map +1 -1
  202. package/dist/tools/read/get-path-items.d.ts.map +1 -1
  203. package/dist/tools/read/get-path-items.js +26 -20
  204. package/dist/tools/read/get-path-items.js.map +1 -1
  205. package/dist/tools/read/get-selection.d.ts.map +1 -1
  206. package/dist/tools/read/get-selection.js +19 -33
  207. package/dist/tools/read/get-selection.js.map +1 -1
  208. package/dist/tools/read/get-separation-info.d.ts +3 -0
  209. package/dist/tools/read/get-separation-info.d.ts.map +1 -0
  210. package/dist/tools/read/get-separation-info.js +94 -0
  211. package/dist/tools/read/get-separation-info.js.map +1 -0
  212. package/dist/tools/read/get-symbols.d.ts.map +1 -1
  213. package/dist/tools/read/get-symbols.js +19 -23
  214. package/dist/tools/read/get-symbols.js.map +1 -1
  215. package/dist/tools/read/get-text-frame-detail.d.ts.map +1 -1
  216. package/dist/tools/read/get-text-frame-detail.js +270 -67
  217. package/dist/tools/read/get-text-frame-detail.js.map +1 -1
  218. package/dist/tools/read/list-fonts.d.ts +3 -0
  219. package/dist/tools/read/list-fonts.d.ts.map +1 -0
  220. package/dist/tools/read/list-fonts.js +78 -0
  221. package/dist/tools/read/list-fonts.js.map +1 -0
  222. package/dist/tools/read/list-text-frames.d.ts.map +1 -1
  223. package/dist/tools/read/list-text-frames.js +99 -36
  224. package/dist/tools/read/list-text-frames.js.map +1 -1
  225. package/dist/tools/registry.d.ts.map +1 -1
  226. package/dist/tools/registry.js +68 -0
  227. package/dist/tools/registry.js.map +1 -1
  228. package/dist/tools/session.d.ts +36 -0
  229. package/dist/tools/session.d.ts.map +1 -0
  230. package/dist/tools/session.js +246 -0
  231. package/dist/tools/session.js.map +1 -0
  232. package/dist/tools/utility/check-text-consistency.d.ts +3 -0
  233. package/dist/tools/utility/check-text-consistency.d.ts.map +1 -0
  234. package/dist/tools/utility/check-text-consistency.js +303 -0
  235. package/dist/tools/utility/check-text-consistency.js.map +1 -0
  236. package/dist/tools/utility/preflight-check.d.ts.map +1 -1
  237. package/dist/tools/utility/preflight-check.js +141 -43
  238. package/dist/tools/utility/preflight-check.js.map +1 -1
  239. package/dist/tools/utility/set-workflow.d.ts +3 -0
  240. package/dist/tools/utility/set-workflow.d.ts.map +1 -0
  241. package/dist/tools/utility/set-workflow.js +95 -0
  242. package/dist/tools/utility/set-workflow.js.map +1 -0
  243. package/dist/utils/image-header.d.ts.map +1 -1
  244. package/dist/utils/image-header.js +5 -1
  245. package/dist/utils/image-header.js.map +1 -1
  246. package/package.json +1 -1
@@ -0,0 +1,246 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../executor/jsx-runner.js';
3
+ // --- Session state (module-level, lives for the MCP server process lifetime) ---
4
+ let sessionCoordinateSystem = null;
5
+ let sessionWorkflow = null;
6
+ /** true when user/AI explicitly called set_workflow */
7
+ let sessionExplicit = false;
8
+ export function getSessionCoordinateSystem() {
9
+ return sessionCoordinateSystem;
10
+ }
11
+ export function getSessionWorkflow() {
12
+ return sessionWorkflow;
13
+ }
14
+ export function setSession(workflow, coordinateSystem) {
15
+ sessionWorkflow = workflow;
16
+ sessionCoordinateSystem = coordinateSystem;
17
+ sessionExplicit = true;
18
+ }
19
+ export function clearSession() {
20
+ sessionWorkflow = null;
21
+ sessionCoordinateSystem = null;
22
+ sessionExplicit = false;
23
+ autoDetectCache = null;
24
+ }
25
+ /** ドキュメント切替時(create/close/open)に自動検出キャッシュのみ無効化 */
26
+ export function invalidateAutoDetectCache() {
27
+ autoDetectCache = null;
28
+ }
29
+ let autoDetectCache = null;
30
+ /** Minimal JSX to fetch only the current document key (for cache validation) */
31
+ const GET_DOCUMENT_KEY_JSX = `
32
+ try {
33
+ if (app.documents.length === 0) {
34
+ writeResultFile(RESULT_PATH, { error: true, message: "No document open" });
35
+ } else {
36
+ var doc = app.activeDocument;
37
+ var fp = "";
38
+ try { fp = doc.fullName.fsName; } catch (e) {}
39
+ writeResultFile(RESULT_PATH, { documentKey: fp || doc.name });
40
+ }
41
+ } catch (e) {
42
+ writeResultFile(RESULT_PATH, { error: true, message: e.message });
43
+ }
44
+ `;
45
+ /** Lightweight JSX to fetch only document signals needed for workflow detection */
46
+ const DETECT_SIGNALS_JSX = `
47
+ try {
48
+ var preflight = preflightChecks();
49
+ if (preflight) {
50
+ writeResultFile(RESULT_PATH, preflight);
51
+ } else {
52
+ var doc = app.activeDocument;
53
+ var filePath = "";
54
+ try { filePath = doc.fullName.fsName; } catch (e) { filePath = ""; }
55
+
56
+ var colorMode = "unknown";
57
+ if (doc.documentColorSpace === DocumentColorSpace.CMYK) colorMode = "CMYK";
58
+ else if (doc.documentColorSpace === DocumentColorSpace.RGB) colorMode = "RGB";
59
+
60
+ var colorProfile = "";
61
+ try { colorProfile = doc.colorProfileName; } catch (e) {}
62
+
63
+ var rulerUnits = "unknown";
64
+ try {
65
+ var ru = doc.rulerUnits;
66
+ if (ru === RulerUnits.Pixels) rulerUnits = "px";
67
+ else if (ru === RulerUnits.Points) rulerUnits = "pt";
68
+ else if (ru === RulerUnits.Millimeters) rulerUnits = "mm";
69
+ else if (ru === RulerUnits.Centimeters) rulerUnits = "cm";
70
+ else if (ru === RulerUnits.Inches) rulerUnits = "in";
71
+ else if (ru === RulerUnits.Picas) rulerUnits = "pica";
72
+ } catch (e) {}
73
+
74
+ var rasterRes = 0;
75
+ try { rasterRes = doc.rasterEffectSettings.resolution; } catch (e) {}
76
+
77
+ writeResultFile(RESULT_PATH, {
78
+ documentKey: filePath || doc.name,
79
+ colorMode: colorMode,
80
+ rulerUnits: rulerUnits,
81
+ rasterEffectResolution: rasterRes,
82
+ colorProfile: colorProfile
83
+ });
84
+ }
85
+ } catch (e) {
86
+ writeResultFile(RESULT_PATH, { error: true, message: e.message });
87
+ }
88
+ `;
89
+ /**
90
+ * Auto-detect coordinate system from the active document.
91
+ * Caches result keyed by document; invalidates on document switch.
92
+ */
93
+ async function autoDetectCoordinateSystem() {
94
+ const result = await executeJsx(DETECT_SIGNALS_JSX);
95
+ if (!result || result.error) {
96
+ return 'artboard-web'; // fallback on error
97
+ }
98
+ const docKey = result.documentKey ?? '';
99
+ const hint = detectWorkflow({
100
+ colorMode: result.colorMode ?? 'unknown',
101
+ rulerUnits: result.rulerUnits ?? 'unknown',
102
+ rasterEffectResolution: result.rasterEffectResolution ?? 0,
103
+ colorProfile: result.colorProfile ?? '',
104
+ });
105
+ autoDetectCache = {
106
+ documentKey: docKey,
107
+ coordinateSystem: hint.recommendedCoordinateSystem,
108
+ workflow: hint.detectedWorkflow,
109
+ };
110
+ return hint.recommendedCoordinateSystem;
111
+ }
112
+ /**
113
+ * Resolve coordinate_system:
114
+ * 1. explicit param (per-tool call)
115
+ * 2. session default (set via set_workflow)
116
+ * 3. auto-detect from document signals (cached, invalidated on document switch)
117
+ * 4. fallback: 'artboard-web'
118
+ */
119
+ export async function resolveCoordinateSystem(explicit) {
120
+ if (explicit !== undefined)
121
+ return explicit;
122
+ if (sessionExplicit)
123
+ return sessionCoordinateSystem;
124
+ // キャッシュがあれば、現在のドキュメントキーと比較して有効性を確認
125
+ if (autoDetectCache) {
126
+ try {
127
+ const keyResult = await executeJsx(GET_DOCUMENT_KEY_JSX);
128
+ if (keyResult && !keyResult.error) {
129
+ const currentKey = keyResult.documentKey ?? '';
130
+ if (currentKey === autoDetectCache.documentKey) {
131
+ return autoDetectCache.coordinateSystem;
132
+ }
133
+ // ドキュメントが変わっている — キャッシュ無効化して再検出
134
+ autoDetectCache = null;
135
+ }
136
+ }
137
+ catch {
138
+ // キー取得失敗時はキャッシュを信頼せず再検出へフォールスルー
139
+ autoDetectCache = null;
140
+ }
141
+ }
142
+ // キャッシュなし — 初回自動検出
143
+ try {
144
+ return await autoDetectCoordinateSystem();
145
+ }
146
+ catch {
147
+ return 'artboard-web';
148
+ }
149
+ }
150
+ // --- Shared Zod schema (all tools import this instead of defining their own) ---
151
+ export const coordinateSystemSchema = z
152
+ .enum(['artboard-web', 'document'])
153
+ .optional()
154
+ .describe('Coordinate system. Omit to auto-detect from document (CMYK→document, RGB→artboard-web). Override via set_workflow.');
155
+ export function detectWorkflow(signals) {
156
+ const { colorMode, rulerUnits, rasterEffectResolution, colorProfile } = signals;
157
+ const isCMYK = colorMode === 'CMYK';
158
+ const isRGB = colorMode === 'RGB';
159
+ const isPixelUnit = rulerUnits === 'px';
160
+ const isPrintUnit = ['mm', 'cm', 'in', 'pica'].includes(rulerUnits);
161
+ const is72dpi = rasterEffectResolution === 72;
162
+ const isHighRes = rasterEffectResolution >= 300;
163
+ const isMidRes = rasterEffectResolution >= 150 && rasterEffectResolution < 300;
164
+ const isPrintProfile = isCMYK ||
165
+ /japan color|fogra|swop|gracol|coated|uncoated/i.test(colorProfile);
166
+ const isWebProfile = /srgb|display p3/i.test(colorProfile);
167
+ let webScore = 0;
168
+ let printScore = 0;
169
+ let videoScore = 0;
170
+ // Color mode
171
+ if (isCMYK)
172
+ printScore += 3;
173
+ if (isRGB) {
174
+ webScore += 1;
175
+ videoScore += 1;
176
+ }
177
+ // Units
178
+ if (isPixelUnit) {
179
+ webScore += 2;
180
+ videoScore += 2;
181
+ }
182
+ if (isPrintUnit)
183
+ printScore += 2;
184
+ if (rulerUnits === 'pt') {
185
+ printScore += 1;
186
+ webScore += 1;
187
+ }
188
+ // Resolution
189
+ if (is72dpi)
190
+ webScore += 2;
191
+ if (isHighRes)
192
+ printScore += 2;
193
+ if (isMidRes && isRGB)
194
+ videoScore += 2;
195
+ // Color profile
196
+ if (isPrintProfile)
197
+ printScore += 2;
198
+ if (isWebProfile)
199
+ webScore += 2;
200
+ const maxScore = Math.max(webScore, printScore, videoScore);
201
+ let detectedWorkflow;
202
+ const reasons = [];
203
+ if (maxScore === 0) {
204
+ detectedWorkflow = 'unknown';
205
+ reasons.push('No strong signals detected');
206
+ }
207
+ else if (printScore === maxScore && printScore > webScore) {
208
+ detectedWorkflow = 'print';
209
+ if (isCMYK)
210
+ reasons.push('CMYK color mode');
211
+ if (isPrintUnit)
212
+ reasons.push(`${rulerUnits} units`);
213
+ if (isHighRes)
214
+ reasons.push(`${rasterEffectResolution}dpi`);
215
+ if (isPrintProfile && colorProfile)
216
+ reasons.push(colorProfile);
217
+ }
218
+ else if (videoScore === maxScore && videoScore > webScore) {
219
+ detectedWorkflow = 'video';
220
+ if (isRGB)
221
+ reasons.push('RGB color mode');
222
+ if (isPixelUnit)
223
+ reasons.push('px units');
224
+ if (isMidRes)
225
+ reasons.push(`${rasterEffectResolution}dpi`);
226
+ }
227
+ else {
228
+ detectedWorkflow = 'web';
229
+ if (isRGB)
230
+ reasons.push('RGB color mode');
231
+ if (isPixelUnit)
232
+ reasons.push('px units');
233
+ if (is72dpi)
234
+ reasons.push('72dpi');
235
+ if (isWebProfile && colorProfile)
236
+ reasons.push(colorProfile);
237
+ }
238
+ const recommendedCoordinateSystem = detectedWorkflow === 'print' ? 'document' : 'artboard-web';
239
+ return {
240
+ detectedWorkflow,
241
+ recommendedCoordinateSystem,
242
+ reasoning: reasons.join(', '),
243
+ signals,
244
+ };
245
+ }
246
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/tools/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=check-text-consistency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-text-consistency.d.ts","sourceRoot":"","sources":["../../../src/tools/utility/check-text-consistency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmTpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoDhD"}
@@ -0,0 +1,303 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../../executor/jsx-runner.js';
3
+ import { coordinateSystemSchema, resolveCoordinateSystem, } from '../session.js';
4
+ import { READ_ANNOTATIONS } from '../modify/shared.js';
5
+ /**
6
+ * check_text_consistency — テキスト一貫性チェック(ダミーテキスト検出・フォント統計)
7
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/TextFrameItem/ — contents, textRanges
8
+ * @see https://ai-scripting.docsforadobe.dev/jsobjref/CharacterAttributes/ — size, textFont
9
+ */
10
+ const jsxCode = `
11
+ var preflight = preflightChecks();
12
+ if (preflight) {
13
+ writeResultFile(RESULT_PATH, preflight);
14
+ } else {
15
+ try {
16
+ var params = readParamsFile(PARAMS_PATH);
17
+ var doc = app.activeDocument;
18
+ var filterArtboard = (params && typeof params.artboard_index === "number") ? params.artboard_index : null;
19
+
20
+ if (filterArtboard !== null && (filterArtboard < 0 || filterArtboard >= doc.artboards.length)) {
21
+ writeResultFile(RESULT_PATH, {
22
+ error: true,
23
+ message: "Artboard index " + filterArtboard + " is out of range (0-" + (doc.artboards.length - 1) + ")"
24
+ });
25
+ } else {
26
+ var frames = [];
27
+ for (var i = 0; i < doc.textFrames.length; i++) {
28
+ var tf = doc.textFrames[i];
29
+ try {
30
+ var uuid = ensureUUID(tf);
31
+ var abIdx = getArtboardIndexForItem(tf);
32
+
33
+ if (filterArtboard !== null && abIdx !== filterArtboard) continue;
34
+
35
+ var layerName = getParentLayerName(tf);
36
+
37
+ frames.push({
38
+ uuid: uuid,
39
+ contents: tf.contents,
40
+ layerName: layerName,
41
+ artboardIndex: abIdx
42
+ });
43
+ } catch(e) {}
44
+ }
45
+
46
+ writeResultFile(RESULT_PATH, {
47
+ totalFrames: frames.length,
48
+ frames: frames
49
+ });
50
+ }
51
+ } catch (e) {
52
+ writeResultFile(RESULT_PATH, { error: true, message: e.message, line: e.line });
53
+ }
54
+ }
55
+ `;
56
+ const DUMMY_PATTERNS = [
57
+ { pattern: /lorem\s+ipsum/i, label: 'Lorem ipsum' },
58
+ { pattern: /テキストが入ります/, label: 'テキストが入ります' },
59
+ { pattern: /ここにテキスト/, label: 'ここにテキスト' },
60
+ { pattern: /ダミーテキスト/, label: 'ダミーテキスト' },
61
+ { pattern: /^ダミー$/, label: 'ダミー' },
62
+ { pattern: /^sample\s*text$/i, label: 'sample text' },
63
+ { pattern: /^placeholder$/i, label: 'placeholder' },
64
+ { pattern: /^xxx+$/i, label: 'XXX placeholder' },
65
+ { pattern: /^○+$/, label: '○○○ placeholder' },
66
+ { pattern: /^●+$/, label: '●●● placeholder' },
67
+ { pattern: /^△+$/, label: '△△△ placeholder' },
68
+ { pattern: /仮テキスト/, label: '仮テキスト' },
69
+ { pattern: /テキストを入力/, label: 'テキストを入力' },
70
+ ];
71
+ function detectDummyTexts(frames) {
72
+ const hits = [];
73
+ for (const frame of frames) {
74
+ const text = frame.contents.trim();
75
+ if (!text)
76
+ continue;
77
+ for (const dp of DUMMY_PATTERNS) {
78
+ if (dp.pattern.test(text)) {
79
+ hits.push({
80
+ uuid: frame.uuid,
81
+ contents: text.substring(0, 100),
82
+ pattern: dp.label,
83
+ layerName: frame.layerName,
84
+ artboardIndex: frame.artboardIndex,
85
+ });
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ return hits;
91
+ }
92
+ /**
93
+ * Detect katakana long vowel variations: "サーバー" vs "サーバ"
94
+ */
95
+ function detectKatakanaLongVowel(frames) {
96
+ // Extract all katakana words from text frames
97
+ const katakanaWordMap = new Map(); // base -> {variant -> uuids}
98
+ const katakanaPattern = /[\u30A0-\u30FF]{2,}/g;
99
+ for (const frame of frames) {
100
+ const matches = frame.contents.match(katakanaPattern);
101
+ if (!matches)
102
+ continue;
103
+ for (const word of matches) {
104
+ // Normalize: remove trailing long vowel mark
105
+ const base = word.replace(/ー+$/, '');
106
+ if (base.length < 2)
107
+ continue;
108
+ if (!katakanaWordMap.has(base)) {
109
+ katakanaWordMap.set(base, new Map());
110
+ }
111
+ const variants = katakanaWordMap.get(base);
112
+ if (!variants.has(word)) {
113
+ variants.set(word, []);
114
+ }
115
+ variants.get(word).push(frame.uuid);
116
+ }
117
+ }
118
+ const variationGroups = [];
119
+ for (const [, variants] of katakanaWordMap) {
120
+ if (variants.size > 1) {
121
+ const group = [];
122
+ for (const [text, uuids] of variants) {
123
+ group.push({ text, count: uuids.length, uuids: [...new Set(uuids)] });
124
+ }
125
+ variationGroups.push(...group);
126
+ }
127
+ }
128
+ if (variationGroups.length === 0)
129
+ return null;
130
+ // Regroup by base word
131
+ const result = [];
132
+ const seen = new Set();
133
+ for (const [base, variants] of katakanaWordMap) {
134
+ if (variants.size <= 1)
135
+ continue;
136
+ if (seen.has(base))
137
+ continue;
138
+ seen.add(base);
139
+ for (const [text, uuids] of variants) {
140
+ result.push({ text, count: uuids.length, uuids: [...new Set(uuids)] });
141
+ }
142
+ }
143
+ return {
144
+ type: 'katakana_long_vowel',
145
+ description: 'Katakana trailing long vowel mark variation (e.g. "サーバー" vs "サーバ")',
146
+ variants: result,
147
+ };
148
+ }
149
+ /**
150
+ * Detect fullwidth/halfwidth number variations: "123" vs "123"
151
+ */
152
+ function detectFullwidthHalfwidth(frames) {
153
+ let hasFullwidthDigits = false;
154
+ let hasHalfwidthDigits = false;
155
+ const fullwidthUuids = [];
156
+ const halfwidthUuids = [];
157
+ const fullwidthDigitPattern = /[0-9]+/;
158
+ const halfwidthDigitPattern = /[0-9]+/;
159
+ for (const frame of frames) {
160
+ if (fullwidthDigitPattern.test(frame.contents)) {
161
+ hasFullwidthDigits = true;
162
+ fullwidthUuids.push(frame.uuid);
163
+ }
164
+ if (halfwidthDigitPattern.test(frame.contents)) {
165
+ hasHalfwidthDigits = true;
166
+ halfwidthUuids.push(frame.uuid);
167
+ }
168
+ }
169
+ if (hasFullwidthDigits && hasHalfwidthDigits) {
170
+ return {
171
+ type: 'fullwidth_halfwidth_digits',
172
+ description: 'Mixed fullwidth and halfwidth digits (e.g. "123" vs "123")',
173
+ variants: [
174
+ { text: 'Fullwidth digits (0-9)', count: fullwidthUuids.length, uuids: [...new Set(fullwidthUuids)] },
175
+ { text: 'Halfwidth digits (0-9)', count: halfwidthUuids.length, uuids: [...new Set(halfwidthUuids)] },
176
+ ],
177
+ };
178
+ }
179
+ return null;
180
+ }
181
+ /**
182
+ * Detect fullwidth/halfwidth alphabet variations: "A" vs "A"
183
+ */
184
+ function detectFullwidthAlphabet(frames) {
185
+ let hasFullwidth = false;
186
+ let hasHalfwidth = false;
187
+ const fullwidthUuids = [];
188
+ const halfwidthUuids = [];
189
+ const fullwidthAlphaPattern = /[A-Za-z]+/;
190
+ const halfwidthAlphaPattern = /[A-Za-z]+/;
191
+ for (const frame of frames) {
192
+ if (fullwidthAlphaPattern.test(frame.contents)) {
193
+ hasFullwidth = true;
194
+ fullwidthUuids.push(frame.uuid);
195
+ }
196
+ if (halfwidthAlphaPattern.test(frame.contents)) {
197
+ hasHalfwidth = true;
198
+ halfwidthUuids.push(frame.uuid);
199
+ }
200
+ }
201
+ if (hasFullwidth && hasHalfwidth) {
202
+ return {
203
+ type: 'fullwidth_halfwidth_alpha',
204
+ description: 'Mixed fullwidth and halfwidth alphabets (e.g. "A" vs "A")',
205
+ variants: [
206
+ { text: 'Fullwidth alpha (A-Z)', count: fullwidthUuids.length, uuids: [...new Set(fullwidthUuids)] },
207
+ { text: 'Halfwidth alpha (A-Z)', count: halfwidthUuids.length, uuids: [...new Set(halfwidthUuids)] },
208
+ ],
209
+ };
210
+ }
211
+ return null;
212
+ }
213
+ /**
214
+ * Detect wave dash vs fullwidth tilde: "〜" (U+301C) vs "~" (U+FF5E)
215
+ */
216
+ function detectWaveDashTilde(frames) {
217
+ let hasWaveDash = false;
218
+ let hasTilde = false;
219
+ const waveDashUuids = [];
220
+ const tildeUuids = [];
221
+ for (const frame of frames) {
222
+ if (frame.contents.includes('\u301C')) {
223
+ hasWaveDash = true;
224
+ waveDashUuids.push(frame.uuid);
225
+ }
226
+ if (frame.contents.includes('\uFF5E')) {
227
+ hasTilde = true;
228
+ tildeUuids.push(frame.uuid);
229
+ }
230
+ }
231
+ if (hasWaveDash && hasTilde) {
232
+ return {
233
+ type: 'wave_dash_tilde',
234
+ description: 'Wave dash (〜 U+301C) vs fullwidth tilde (~ U+FF5E)',
235
+ variants: [
236
+ { text: '〜 (Wave dash U+301C)', count: waveDashUuids.length, uuids: [...new Set(waveDashUuids)] },
237
+ { text: '~ (Fullwidth tilde U+FF5E)', count: tildeUuids.length, uuids: [...new Set(tildeUuids)] },
238
+ ],
239
+ };
240
+ }
241
+ return null;
242
+ }
243
+ function analyzeTextConsistency(frames) {
244
+ const dummyTexts = detectDummyTexts(frames);
245
+ const knownVariations = [];
246
+ const katakana = detectKatakanaLongVowel(frames);
247
+ if (katakana)
248
+ knownVariations.push(katakana);
249
+ const fwHwDigits = detectFullwidthHalfwidth(frames);
250
+ if (fwHwDigits)
251
+ knownVariations.push(fwHwDigits);
252
+ const fwHwAlpha = detectFullwidthAlphabet(frames);
253
+ if (fwHwAlpha)
254
+ knownVariations.push(fwHwAlpha);
255
+ const waveDash = detectWaveDashTilde(frames);
256
+ if (waveDash)
257
+ knownVariations.push(waveDash);
258
+ // Return all texts for LLM analysis
259
+ const allTexts = frames.map((f) => ({
260
+ uuid: f.uuid,
261
+ contents: f.contents,
262
+ layerName: f.layerName,
263
+ artboardIndex: f.artboardIndex,
264
+ }));
265
+ return { dummyTexts, knownVariations, allTexts };
266
+ }
267
+ export function register(server) {
268
+ server.registerTool('check_text_consistency', {
269
+ title: 'Check Text Consistency',
270
+ description: 'Analyze text frames for dummy/placeholder text and known notation variation patterns (katakana long vowel, fullwidth/halfwidth, wave dash/tilde). Returns all text contents for LLM-driven deeper analysis of inconsistencies, typos, and version mismatches.',
271
+ inputSchema: {
272
+ artboard_index: z
273
+ .number()
274
+ .int()
275
+ .min(0)
276
+ .optional()
277
+ .describe('Filter by artboard index (0-based)'),
278
+ coordinate_system: coordinateSystemSchema,
279
+ },
280
+ annotations: READ_ANNOTATIONS,
281
+ }, async (params) => {
282
+ const resolvedParams = { ...params, coordinate_system: await resolveCoordinateSystem(params.coordinate_system) };
283
+ const result = (await executeJsx(jsxCode, resolvedParams));
284
+ if (result.error) {
285
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
286
+ }
287
+ const analysis = analyzeTextConsistency(result.frames);
288
+ return {
289
+ content: [
290
+ {
291
+ type: 'text',
292
+ text: JSON.stringify({
293
+ totalFrames: result.totalFrames,
294
+ dummyTexts: analysis.dummyTexts,
295
+ knownVariations: analysis.knownVariations,
296
+ allTexts: analysis.allTexts,
297
+ }, null, 2),
298
+ },
299
+ ],
300
+ };
301
+ });
302
+ }
303
+ //# sourceMappingURL=check-text-consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-text-consistency.js","sourceRoot":"","sources":["../../../src/tools/utility/check-text-consistency.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preflight-check.d.ts","sourceRoot":"","sources":["../../../src/tools/utility/preflight-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkVpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2FhD"}
1
+ {"version":3,"file":"preflight-check.d.ts","sourceRoot":"","sources":["../../../src/tools/utility/preflight-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+XpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2JhD"}