illustrator-mcp-server 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +36 -27
- package/README.md +38 -27
- package/dist/executor/cep-transport.d.ts +13 -0
- package/dist/executor/cep-transport.d.ts.map +1 -0
- package/dist/executor/cep-transport.js.map +1 -0
- package/dist/executor/file-transport.d.ts +6 -2
- package/dist/executor/file-transport.d.ts.map +1 -1
- package/dist/executor/file-transport.js +43 -11
- package/dist/executor/file-transport.js.map +1 -1
- package/dist/executor/jsx-runner.d.ts +10 -0
- package/dist/executor/jsx-runner.d.ts.map +1 -1
- package/dist/executor/jsx-runner.js +114 -33
- package/dist/executor/jsx-runner.js.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/jsx/helpers/common.jsx +3 -1
- package/dist/tools/export/export-pdf.d.ts.map +1 -1
- package/dist/tools/export/export-pdf.js +2 -7
- package/dist/tools/export/export-pdf.js.map +1 -1
- package/dist/tools/export/export.d.ts.map +1 -1
- package/dist/tools/export/export.js +2 -14
- package/dist/tools/export/export.js.map +1 -1
- package/dist/tools/modify/apply-color-profile.d.ts.map +1 -1
- package/dist/tools/modify/apply-color-profile.js +2 -24
- package/dist/tools/modify/apply-color-profile.js.map +1 -1
- package/dist/tools/modify/convert-to-outlines.d.ts.map +1 -1
- package/dist/tools/modify/convert-to-outlines.js +2 -27
- package/dist/tools/modify/convert-to-outlines.js.map +1 -1
- package/dist/tools/modify/create-ellipse.d.ts.map +1 -1
- package/dist/tools/modify/create-ellipse.js +7 -55
- package/dist/tools/modify/create-ellipse.js.map +1 -1
- package/dist/tools/modify/create-line.d.ts.map +1 -1
- package/dist/tools/modify/create-line.js +6 -42
- package/dist/tools/modify/create-line.js.map +1 -1
- package/dist/tools/modify/create-path.d.ts.map +1 -1
- package/dist/tools/modify/create-path.js +7 -57
- package/dist/tools/modify/create-path.js.map +1 -1
- package/dist/tools/modify/create-rectangle.d.ts.map +1 -1
- package/dist/tools/modify/create-rectangle.js +7 -55
- package/dist/tools/modify/create-rectangle.js.map +1 -1
- package/dist/tools/modify/create-text-frame.d.ts.map +1 -1
- package/dist/tools/modify/create-text-frame.js +25 -43
- package/dist/tools/modify/create-text-frame.js.map +1 -1
- package/dist/tools/modify/modify-object.d.ts.map +1 -1
- package/dist/tools/modify/modify-object.js +23 -62
- package/dist/tools/modify/modify-object.js.map +1 -1
- package/dist/tools/modify/shared.d.ts +35 -0
- package/dist/tools/modify/shared.d.ts.map +1 -0
- package/dist/tools/modify/shared.js +91 -0
- package/dist/tools/modify/shared.js.map +1 -0
- package/dist/tools/read/get-colors.d.ts.map +1 -1
- package/dist/tools/read/get-colors.js +28 -31
- package/dist/tools/read/get-colors.js.map +1 -1
- package/dist/tools/read/get-effects.d.ts.map +1 -1
- package/dist/tools/read/get-effects.js +1 -3
- package/dist/tools/read/get-effects.js.map +1 -1
- package/dist/tools/read/get-images.d.ts.map +1 -1
- package/dist/tools/read/get-images.js +49 -7
- package/dist/tools/read/get-images.js.map +1 -1
- package/dist/tools/read/get-path-items.d.ts.map +1 -1
- package/dist/tools/read/get-path-items.js +5 -4
- package/dist/tools/read/get-path-items.js.map +1 -1
- package/dist/tools/read/list-text-frames.js +3 -3
- package/dist/tools/utility/preflight-check.d.ts.map +1 -1
- package/dist/tools/utility/preflight-check.js +102 -33
- package/dist/tools/utility/preflight-check.js.map +1 -1
- package/dist/utils/image-header.d.ts +11 -0
- package/dist/utils/image-header.d.ts.map +1 -0
- package/dist/utils/image-header.js +280 -0
- package/dist/utils/image-header.js.map +1 -0
- package/package.json +3 -4
|
@@ -3,15 +3,40 @@ import * as fs from 'fs/promises';
|
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import pLimit from 'p-limit';
|
|
6
|
-
import { createTempFiles, writeParams, writeJsx, writeAppleScript, readResult, cleanupTempFiles, } from './file-transport.js';
|
|
6
|
+
import { createTempFiles, writeParams, writeJsx, writeAppleScript, writePowerShellScript, readResult, cleanupTempFiles, } from './file-transport.js';
|
|
7
7
|
// Illustrator はシングルスレッド — JSX 実行を直列化
|
|
8
8
|
const jsxLimit = pLimit(1);
|
|
9
|
+
// 実行中の JSX を追跡(グレースフルシャットダウン用)
|
|
10
|
+
let pendingCount = 0;
|
|
11
|
+
let pendingResolvers = [];
|
|
12
|
+
export function resolveTransport(platform = process.platform, envVar = process.env['ILLUSTRATOR_MCP_TRANSPORT']) {
|
|
13
|
+
if (envVar === 'osascript')
|
|
14
|
+
return 'osascript';
|
|
15
|
+
if (envVar === 'powershell')
|
|
16
|
+
return 'powershell';
|
|
17
|
+
if (platform === 'darwin')
|
|
18
|
+
return 'osascript';
|
|
19
|
+
if (platform === 'win32')
|
|
20
|
+
return 'powershell';
|
|
21
|
+
throw new Error(`Unsupported platform: ${platform}. Only macOS and Windows are supported.`);
|
|
22
|
+
}
|
|
23
|
+
const TRANSPORT = resolveTransport();
|
|
24
|
+
/**
|
|
25
|
+
* 実行中の JSX がすべて完了するまで待機する(シャットダウン用)
|
|
26
|
+
*/
|
|
27
|
+
export function waitForPendingExecutions() {
|
|
28
|
+
if (pendingCount === 0)
|
|
29
|
+
return Promise.resolve();
|
|
30
|
+
return new Promise((resolve) => {
|
|
31
|
+
pendingResolvers.push(resolve);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
9
34
|
const JSX_HELPERS_PATH = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../jsx/helpers/common.jsx');
|
|
10
35
|
// タイムアウト設定(ms)
|
|
11
36
|
const TIMEOUT_NORMAL = 30_000;
|
|
12
37
|
const TIMEOUT_HEAVY = 60_000;
|
|
13
38
|
/**
|
|
14
|
-
* JSX
|
|
39
|
+
* osascript / PowerShell COM 用 JSX ビルダー(ファイルベース I/O)
|
|
15
40
|
*/
|
|
16
41
|
async function buildJsx(toolScript, paramsPath, resultPath) {
|
|
17
42
|
const helpers = await fs.readFile(JSX_HELPERS_PATH, 'utf-8');
|
|
@@ -22,9 +47,7 @@ var RESULT_PATH = ${JSON.stringify(resultPath)};
|
|
|
22
47
|
${toolScript}
|
|
23
48
|
})();`;
|
|
24
49
|
}
|
|
25
|
-
|
|
26
|
-
* osascript エラーメッセージを解析して分かりやすいエラーに変換する
|
|
27
|
-
*/
|
|
50
|
+
// ─── エラーメッセージ変換 ────────────────────────────────────────────────────
|
|
28
51
|
function parseOsascriptError(stderr) {
|
|
29
52
|
if (stderr.includes('Connection is invalid')) {
|
|
30
53
|
return 'Illustrator is not running. Please launch Adobe Illustrator.';
|
|
@@ -34,52 +57,108 @@ function parseOsascriptError(stderr) {
|
|
|
34
57
|
}
|
|
35
58
|
return stderr;
|
|
36
59
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
60
|
+
function parsePowerShellError(stderr) {
|
|
61
|
+
if (stderr.includes('Cannot create ActiveX component') || stderr.includes('80080005') || stderr.includes('80040154')) {
|
|
62
|
+
return 'Illustrator is not running or is not installed. Please launch Adobe Illustrator.';
|
|
63
|
+
}
|
|
64
|
+
return stderr;
|
|
65
|
+
}
|
|
66
|
+
export function getExecFailureMessage(error, stderr, timeout, transport = 'osascript') {
|
|
67
|
+
if (error.code === 'ETIMEDOUT') {
|
|
68
|
+
return `Script execution timed out after ${timeout}ms`;
|
|
69
|
+
}
|
|
70
|
+
if (error.killed) {
|
|
71
|
+
return `Script execution was terminated${error.signal ? ` by signal ${error.signal}` : ''}`;
|
|
72
|
+
}
|
|
73
|
+
if (transport === 'powershell')
|
|
74
|
+
return parsePowerShellError(stderr || error.message);
|
|
75
|
+
return parseOsascriptError(stderr || error.message);
|
|
76
|
+
}
|
|
77
|
+
// ─── 各トランスポートの実行ロジック ─────────────────────────────────────────
|
|
78
|
+
async function executeViaOsascript(jsxCode, params, timeout, activate) {
|
|
41
79
|
const files = createTempFiles();
|
|
42
80
|
try {
|
|
43
|
-
// 1. パラメータをJSONファイルに書き出し
|
|
44
81
|
await writeParams(files.paramsPath, params);
|
|
45
|
-
// 2. 共通ヘルパー + ツール固有コードを結合し、BOM付きUTF-8で保存
|
|
46
82
|
const fullJsx = await buildJsx(jsxCode, files.paramsPath, files.resultPath);
|
|
47
83
|
await writeJsx(files.scriptPath, fullJsx);
|
|
48
|
-
|
|
49
|
-
await writeAppleScript(files.scptPath, files.scriptPath, { activate });
|
|
50
|
-
// 4. osascript を非同期実行
|
|
84
|
+
await writeAppleScript(files.runnerPath, files.scriptPath, { activate });
|
|
51
85
|
await new Promise((resolve, reject) => {
|
|
52
|
-
execFile('osascript', [files.
|
|
86
|
+
execFile('osascript', [files.runnerPath], { timeout }, (error, _stdout, stderr) => {
|
|
53
87
|
if (error) {
|
|
54
|
-
|
|
55
|
-
reject(new Error(message));
|
|
88
|
+
reject(new Error(getExecFailureMessage(error, stderr, timeout, 'osascript')));
|
|
56
89
|
}
|
|
57
90
|
else {
|
|
58
91
|
resolve();
|
|
59
92
|
}
|
|
60
93
|
});
|
|
61
94
|
});
|
|
62
|
-
|
|
63
|
-
let result;
|
|
64
|
-
try {
|
|
65
|
-
result = await readResult(files.resultPath);
|
|
66
|
-
}
|
|
67
|
-
catch (readError) {
|
|
68
|
-
// osascript は成功したが結果ファイルが生成されなかった場合
|
|
69
|
-
// JSX の異常終了(try/catch 外でのクラッシュ等)が原因
|
|
70
|
-
throw new Error('JSX terminated without producing a result file. An uncaught exception may have occurred within the JSX script.');
|
|
71
|
-
}
|
|
72
|
-
// JSX 内でエラーが発生した場合
|
|
73
|
-
if (result.error) {
|
|
74
|
-
throw new Error(result.message || 'An unknown error occurred during JSX execution');
|
|
75
|
-
}
|
|
76
|
-
return result;
|
|
95
|
+
return await readAndValidateResult(files.resultPath);
|
|
77
96
|
}
|
|
78
97
|
finally {
|
|
79
|
-
// 6. クリーンアップ
|
|
80
98
|
await cleanupTempFiles(files);
|
|
81
99
|
}
|
|
82
100
|
}
|
|
101
|
+
async function executeViaPowerShell(jsxCode, params, timeout) {
|
|
102
|
+
const files = createTempFiles();
|
|
103
|
+
try {
|
|
104
|
+
await writeParams(files.paramsPath, params);
|
|
105
|
+
const fullJsx = await buildJsx(jsxCode, files.paramsPath, files.resultPath);
|
|
106
|
+
await writeJsx(files.scriptPath, fullJsx);
|
|
107
|
+
await writePowerShellScript(files.runnerPath, files.scriptPath);
|
|
108
|
+
await new Promise((resolve, reject) => {
|
|
109
|
+
execFile('powershell.exe', ['-ExecutionPolicy', 'Bypass', '-NonInteractive', '-File', files.runnerPath], { timeout }, (error, _stdout, stderr) => {
|
|
110
|
+
if (error) {
|
|
111
|
+
reject(new Error(getExecFailureMessage(error, stderr, timeout, 'powershell')));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
resolve();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return await readAndValidateResult(files.resultPath);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
await cleanupTempFiles(files);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function readAndValidateResult(resultPath) {
|
|
125
|
+
let result;
|
|
126
|
+
try {
|
|
127
|
+
result = await readResult(resultPath);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
throw new Error('JSX terminated without producing a result file. An uncaught exception may have occurred within the JSX script.');
|
|
131
|
+
}
|
|
132
|
+
if (result.error) {
|
|
133
|
+
throw new Error(result.message || 'An unknown error occurred during JSX execution');
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
// ─── 公開 API ────────────────────────────────────────────────────────────────
|
|
138
|
+
/**
|
|
139
|
+
* JSX を実行する(排他制御なし — 内部用)
|
|
140
|
+
*/
|
|
141
|
+
async function executeJsxRaw(jsxCode, params, timeout = TIMEOUT_NORMAL, activate = false) {
|
|
142
|
+
pendingCount++;
|
|
143
|
+
try {
|
|
144
|
+
switch (TRANSPORT) {
|
|
145
|
+
case 'osascript':
|
|
146
|
+
return await executeViaOsascript(jsxCode, params, timeout, activate);
|
|
147
|
+
case 'powershell':
|
|
148
|
+
return await executeViaPowerShell(jsxCode, params, timeout);
|
|
149
|
+
default: {
|
|
150
|
+
const _ = TRANSPORT;
|
|
151
|
+
throw new Error(`Unknown transport: ${_}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
pendingCount--;
|
|
157
|
+
if (pendingCount === 0 && pendingResolvers.length > 0) {
|
|
158
|
+
pendingResolvers.splice(0).forEach((r) => r());
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
83
162
|
/**
|
|
84
163
|
* JSX を実行する(排他制御付き — 公開 API)
|
|
85
164
|
*/
|
|
@@ -92,4 +171,6 @@ export async function executeJsx(jsxCode, params, options) {
|
|
|
92
171
|
export async function executeJsxHeavy(jsxCode, params) {
|
|
93
172
|
return executeJsx(jsxCode, params, { timeout: TIMEOUT_HEAVY, activate: true });
|
|
94
173
|
}
|
|
174
|
+
// ─── デバッグ用エクスポート ──────────────────────────────────────────────────
|
|
175
|
+
export { TRANSPORT };
|
|
95
176
|
//# sourceMappingURL=jsx-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-runner.js","sourceRoot":"","sources":["../../src/executor/jsx-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"jsx-runner.js","sourceRoot":"","sources":["../../src/executor/jsx-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { createServer } from './server.js';
|
|
4
4
|
import { ensureTmpDir, cleanupTmpDirSync } from './executor/file-transport.js';
|
|
5
|
+
import { waitForPendingExecutions } from './executor/jsx-runner.js';
|
|
5
6
|
async function main() {
|
|
6
7
|
// 一時ディレクトリを作成
|
|
7
8
|
await ensureTmpDir();
|
|
@@ -9,8 +10,17 @@ async function main() {
|
|
|
9
10
|
process.on('exit', () => {
|
|
10
11
|
cleanupTmpDirSync();
|
|
11
12
|
});
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
// グレースフルシャットダウン: 実行中の JSX を待ってから終了
|
|
14
|
+
let shuttingDown = false;
|
|
15
|
+
const gracefulShutdown = async () => {
|
|
16
|
+
if (shuttingDown)
|
|
17
|
+
return;
|
|
18
|
+
shuttingDown = true;
|
|
19
|
+
await waitForPendingExecutions();
|
|
20
|
+
process.exit(0);
|
|
21
|
+
};
|
|
22
|
+
process.on('SIGINT', () => { void gracefulShutdown().catch(() => process.exit(1)); });
|
|
23
|
+
process.on('SIGTERM', () => { void gracefulShutdown().catch(() => process.exit(1)); });
|
|
14
24
|
const server = createServer();
|
|
15
25
|
const transport = new StdioServerTransport();
|
|
16
26
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,KAAK,UAAU,IAAI;IACjB,cAAc;IACd,MAAM,YAAY,EAAE,CAAC;IAErB,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,iBAAiB,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,mCAAmC;IACnC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,MAAM,wBAAwB,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -73,7 +73,9 @@ function jsonParse(str) {
|
|
|
73
73
|
function readParamsFile(filePath) {
|
|
74
74
|
var f = new File(filePath);
|
|
75
75
|
f.encoding = "UTF-8";
|
|
76
|
-
f.open("r")
|
|
76
|
+
if (!f.open("r")) {
|
|
77
|
+
throw new Error("Cannot open params file: " + filePath);
|
|
78
|
+
}
|
|
77
79
|
var content = f.read();
|
|
78
80
|
f.close();
|
|
79
81
|
return jsonParse(content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-pdf.d.ts","sourceRoot":"","sources":["../../../src/tools/export/export-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmHpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"export-pdf.d.ts","sourceRoot":"","sources":["../../../src/tools/export/export-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmHpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsChD"}
|
|
@@ -44,7 +44,7 @@ if (preflight) {
|
|
|
44
44
|
pdfOpts.registrationMarks = true;
|
|
45
45
|
}
|
|
46
46
|
// 裁ち落としが未指定なら3mm自動設定(外トンボの表示に必要)
|
|
47
|
-
if (options.bleed !== true
|
|
47
|
+
if (options.bleed !== true) {
|
|
48
48
|
var bleedPt = 8.504; // 3mm
|
|
49
49
|
pdfOpts.bleedOffsetRect = [bleedPt, bleedPt, bleedPt, bleedPt];
|
|
50
50
|
}
|
|
@@ -113,7 +113,7 @@ if (preflight) {
|
|
|
113
113
|
export function register(server) {
|
|
114
114
|
server.registerTool('export_pdf', {
|
|
115
115
|
title: 'Export PDF',
|
|
116
|
-
description: 'Export print-ready PDF',
|
|
116
|
+
description: 'Export print-ready PDF. Note: Illustrator will be activated (brought to foreground) during execution.',
|
|
117
117
|
inputSchema: {
|
|
118
118
|
output_path: z.string().describe('Output file path'),
|
|
119
119
|
preset: z
|
|
@@ -133,11 +133,6 @@ export function register(server) {
|
|
|
133
133
|
})
|
|
134
134
|
.optional()
|
|
135
135
|
.describe('PDF export options'),
|
|
136
|
-
coordinate_system: z
|
|
137
|
-
.enum(['artboard-web', 'document'])
|
|
138
|
-
.optional()
|
|
139
|
-
.default('artboard-web')
|
|
140
|
-
.describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
|
|
141
136
|
},
|
|
142
137
|
annotations: {
|
|
143
138
|
readOnlyHint: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-pdf.js","sourceRoot":"","sources":["../../../src/tools/export/export-pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Gf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"export-pdf.js","sourceRoot":"","sources":["../../../src/tools/export/export-pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Gf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,uGAAuG;QACpH,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACpD,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,yCAAyC,CAAC;YACtD,OAAO,EAAE,CAAC;iBACP,MAAM,CAAC;gBACN,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAC7D,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;gBACrG,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBACjH,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBACzE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACzD,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACrE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBAC7D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;aACjE,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,oBAAoB,CAAC;SAClC;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/tools/export/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/tools/export/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2KpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoDhD"}
|
|
@@ -8,7 +8,6 @@ if (preflight) {
|
|
|
8
8
|
try {
|
|
9
9
|
var params = readParamsFile(PARAMS_PATH);
|
|
10
10
|
var doc = app.activeDocument;
|
|
11
|
-
var coordSystem = params.coordinate_system || "artboard-web";
|
|
12
11
|
var target = params.target;
|
|
13
12
|
var format = params.format;
|
|
14
13
|
var outputPath = params.output_path;
|
|
@@ -99,10 +98,6 @@ if (preflight) {
|
|
|
99
98
|
if (typeof svgOpts.decimal_places === "number") {
|
|
100
99
|
opts.coordinatePrecision = svgOpts.decimal_places;
|
|
101
100
|
}
|
|
102
|
-
if (typeof svgOpts.clean_metadata !== "undefined" && svgOpts.clean_metadata === false) {
|
|
103
|
-
// default includes metadata; only skip if explicitly false
|
|
104
|
-
}
|
|
105
|
-
|
|
106
101
|
if (targetType === "artboard") {
|
|
107
102
|
doc.artboards.setActiveArtboardIndex(artboardIndex);
|
|
108
103
|
opts.artBoardClipping = true;
|
|
@@ -161,7 +156,7 @@ if (preflight) {
|
|
|
161
156
|
// } else if (format === "webp") { ... }
|
|
162
157
|
}
|
|
163
158
|
|
|
164
|
-
if (targetType !== "error"
|
|
159
|
+
if (targetType !== "error") {
|
|
165
160
|
writeResultFile(RESULT_PATH, { success: true, output_path: outputPath });
|
|
166
161
|
}
|
|
167
162
|
|
|
@@ -174,7 +169,7 @@ if (preflight) {
|
|
|
174
169
|
export function register(server) {
|
|
175
170
|
server.registerTool('export', {
|
|
176
171
|
title: 'Export',
|
|
177
|
-
description: 'Export objects, groups, artboards, or selection',
|
|
172
|
+
description: 'Export objects, groups, artboards, or selection. Note: Illustrator will be activated (brought to foreground) during execution.',
|
|
178
173
|
inputSchema: {
|
|
179
174
|
target: z
|
|
180
175
|
.string()
|
|
@@ -194,8 +189,6 @@ export function register(server) {
|
|
|
194
189
|
.optional()
|
|
195
190
|
.describe('ID naming scheme'),
|
|
196
191
|
decimal_places: z.number().optional().describe('Decimal places'),
|
|
197
|
-
responsive: z.boolean().optional().describe('Responsive SVG (unofficial)'),
|
|
198
|
-
clean_metadata: z.boolean().optional().describe('Remove metadata'),
|
|
199
192
|
})
|
|
200
193
|
.optional()
|
|
201
194
|
.describe('SVG export options'),
|
|
@@ -210,11 +203,6 @@ export function register(server) {
|
|
|
210
203
|
})
|
|
211
204
|
.optional()
|
|
212
205
|
.describe('Raster export options'),
|
|
213
|
-
coordinate_system: z
|
|
214
|
-
.enum(['artboard-web', 'document'])
|
|
215
|
-
.optional()
|
|
216
|
-
.default('artboard-web')
|
|
217
|
-
.describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
|
|
218
206
|
},
|
|
219
207
|
annotations: {
|
|
220
208
|
readOnlyHint: false,
|
|
@@ -1 +1 @@
|
|
|
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;AAE/D,MAAM,OAAO,GAAG
|
|
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;AAE/D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqKf,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,0CAA0C,CAAC;YACvD,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,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACzE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAC3E,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACnE,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,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;aAC/D,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,uBAAuB,CAAC;SACrC;QACD,WAAW,EAAE;YACZ,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,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"}
|
|
@@ -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;
|
|
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"}
|
|
@@ -9,7 +9,6 @@ if (preflight) {
|
|
|
9
9
|
var params = readParamsFile(PARAMS_PATH);
|
|
10
10
|
var doc = app.activeDocument;
|
|
11
11
|
var profile = params.profile;
|
|
12
|
-
var intent = params.intent;
|
|
13
12
|
|
|
14
13
|
var oldProfile = "";
|
|
15
14
|
try {
|
|
@@ -18,18 +17,6 @@ if (preflight) {
|
|
|
18
17
|
oldProfile = "(unavailable)";
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
// Map intent string to RenderingIntent enum
|
|
22
|
-
var renderIntent = null;
|
|
23
|
-
if (intent === "perceptual") {
|
|
24
|
-
renderIntent = RenderingIntent.PERCEPTUAL;
|
|
25
|
-
} else if (intent === "relative") {
|
|
26
|
-
renderIntent = RenderingIntent.RELATIVECOLORIMETRIC;
|
|
27
|
-
} else if (intent === "saturation") {
|
|
28
|
-
renderIntent = RenderingIntent.SATURATION;
|
|
29
|
-
} else if (intent === "absolute") {
|
|
30
|
-
renderIntent = RenderingIntent.ABSOLUTECOLORIMETRIC;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
20
|
// ExtendScript does not provide a single-call color conversion API.
|
|
34
21
|
// We can assign a color profile name to embed/change the profile.
|
|
35
22
|
// For full ICC-based conversion, manual workflow or actions are needed.
|
|
@@ -48,7 +35,6 @@ if (preflight) {
|
|
|
48
35
|
success: true,
|
|
49
36
|
previousProfile: oldProfile,
|
|
50
37
|
newProfile: profile,
|
|
51
|
-
intent: intent,
|
|
52
38
|
note: note
|
|
53
39
|
});
|
|
54
40
|
}
|
|
@@ -60,17 +46,9 @@ if (preflight) {
|
|
|
60
46
|
export function register(server) {
|
|
61
47
|
server.registerTool('apply_color_profile', {
|
|
62
48
|
title: 'Apply Color Profile',
|
|
63
|
-
description: 'Apply or convert color profile',
|
|
49
|
+
description: 'Apply or convert color profile. Note: Illustrator will be activated (brought to foreground) during execution.',
|
|
64
50
|
inputSchema: {
|
|
65
51
|
profile: z.string().describe('Color profile name or path'),
|
|
66
|
-
intent: z
|
|
67
|
-
.enum(['perceptual', 'relative', 'saturation', 'absolute'])
|
|
68
|
-
.describe('Rendering intent'),
|
|
69
|
-
coordinate_system: z
|
|
70
|
-
.enum(['artboard-web', 'document'])
|
|
71
|
-
.optional()
|
|
72
|
-
.default('artboard-web')
|
|
73
|
-
.describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
|
|
74
52
|
},
|
|
75
53
|
annotations: {
|
|
76
54
|
readOnlyHint: false,
|
|
@@ -79,7 +57,7 @@ export function register(server) {
|
|
|
79
57
|
openWorldHint: false,
|
|
80
58
|
},
|
|
81
59
|
}, async (params) => {
|
|
82
|
-
const result = await executeJsx(jsxCode, params);
|
|
60
|
+
const result = await executeJsx(jsxCode, params, { activate: true });
|
|
83
61
|
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
84
62
|
});
|
|
85
63
|
}
|
|
@@ -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
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-to-outlines.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/convert-to-outlines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"convert-to-outlines.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/convert-to-outlines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoFpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuBhD"}
|
|
@@ -12,26 +12,6 @@ if (preflight) {
|
|
|
12
12
|
var count = 0;
|
|
13
13
|
var hasError = false;
|
|
14
14
|
|
|
15
|
-
function createColor(colorObj) {
|
|
16
|
-
if (!colorObj || colorObj.type === "none") return new NoColor();
|
|
17
|
-
if (colorObj.type === "cmyk") {
|
|
18
|
-
var c = new CMYKColor();
|
|
19
|
-
c.cyan = (typeof colorObj.c === "number") ? colorObj.c : 0;
|
|
20
|
-
c.magenta = (typeof colorObj.m === "number") ? colorObj.m : 0;
|
|
21
|
-
c.yellow = (typeof colorObj.y === "number") ? colorObj.y : 0;
|
|
22
|
-
c.black = (typeof colorObj.k === "number") ? colorObj.k : 0;
|
|
23
|
-
return c;
|
|
24
|
-
}
|
|
25
|
-
if (colorObj.type === "rgb") {
|
|
26
|
-
var c = new RGBColor();
|
|
27
|
-
c.red = (typeof colorObj.r === "number") ? colorObj.r : 0;
|
|
28
|
-
c.green = (typeof colorObj.g === "number") ? colorObj.g : 0;
|
|
29
|
-
c.blue = (typeof colorObj.b === "number") ? colorObj.b : 0;
|
|
30
|
-
return c;
|
|
31
|
-
}
|
|
32
|
-
return new NoColor();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
15
|
function findItemByUUID(uuid) {
|
|
36
16
|
var doc = app.activeDocument;
|
|
37
17
|
function search(items) {
|
|
@@ -102,16 +82,11 @@ if (preflight) {
|
|
|
102
82
|
export function register(server) {
|
|
103
83
|
server.registerTool('convert_to_outlines', {
|
|
104
84
|
title: 'Convert to Outlines',
|
|
105
|
-
description: 'Convert text to outlines',
|
|
85
|
+
description: 'Convert text to outlines. Note: Illustrator will be activated (brought to foreground) during execution.',
|
|
106
86
|
inputSchema: {
|
|
107
87
|
target: z
|
|
108
88
|
.string()
|
|
109
89
|
.describe('Target: "selection" (selected), "all" (all text), or layer name'),
|
|
110
|
-
coordinate_system: z
|
|
111
|
-
.enum(['artboard-web', 'document'])
|
|
112
|
-
.optional()
|
|
113
|
-
.default('artboard-web')
|
|
114
|
-
.describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
|
|
115
90
|
},
|
|
116
91
|
annotations: {
|
|
117
92
|
readOnlyHint: false,
|
|
@@ -120,7 +95,7 @@ export function register(server) {
|
|
|
120
95
|
openWorldHint: false,
|
|
121
96
|
},
|
|
122
97
|
}, async (params) => {
|
|
123
|
-
const result = await executeJsx(jsxCode, params);
|
|
98
|
+
const result = await executeJsx(jsxCode, params, { activate: true });
|
|
124
99
|
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
125
100
|
});
|
|
126
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-to-outlines.js","sourceRoot":"","sources":["../../../src/tools/modify/convert-to-outlines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG
|
|
1
|
+
{"version":3,"file":"convert-to-outlines.js","sourceRoot":"","sources":["../../../src/tools/modify/convert-to-outlines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Ef,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,yGAAyG;QACtH,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,iEAAiE,CAAC;SAC/E;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-ellipse.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/create-ellipse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"create-ellipse.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/create-ellipse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2DpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiChD"}
|