@alisaitteke/photoshop-mcp 1.7.18 → 1.7.19

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.
@@ -7,7 +7,6 @@ export declare class WindowsExecutor implements ScriptExecutor {
7
7
  execute(script: string, timeout?: number): Promise<unknown>;
8
8
  private processQueue;
9
9
  private executeScript;
10
- private createVBSWrapper;
11
10
  private parseResult;
12
11
  isPhotoshopRunning(): Promise<boolean>;
13
12
  launchPhotoshop(photoshopPath: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"windows-executor.d.ts","sourceRoot":"","sources":["../../src/platform/windows-executor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkBtD,qBAAa,eAAgB,YAAW,cAAc;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAS;;IAMvB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YA8CnD,YAAY;YAsBZ,aAAa;IAuC3B,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,WAAW;IAUb,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAStC,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB5D"}
1
+ {"version":3,"file":"windows-executor.d.ts","sourceRoot":"","sources":["../../src/platform/windows-executor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiCtD,qBAAa,eAAgB,YAAW,cAAc;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAS;;IAMvB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YA8CnD,YAAY;YAsBZ,aAAa;IAkD3B,OAAO,CAAC,WAAW;IAUb,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAStC,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB5D"}
@@ -7,9 +7,19 @@ import { prefixExtendScriptBom } from '../utils/extendscript-file.js';
7
7
  import { parseExtendScriptPayload } from '../utils/extendscript-result.js';
8
8
  import { Logger } from '../utils/logger.js';
9
9
  import { DEFAULT_SCRIPT_TIMEOUT_MS, QUEUE_WAIT_ALLOWANCE_MS, isScriptTimeoutError, resolveScriptTimeoutMs, } from './script-timeout.js';
10
+ import { WINDOWS_JSX_ENV, WINDOWS_RESULT_ENV, buildWindowsBridgeScript, readWindowsResultFile, } from './windows-script-bridge.js';
10
11
  const execAsync = promisify(exec);
11
12
  /** Extra grace before Node kills cscript, beyond the advertised tool timeout. */
12
13
  const KILL_GRACE_MS = 5000;
14
+ function isExecTimeout(error) {
15
+ if (typeof error === 'object' && error !== null) {
16
+ const execError = error;
17
+ if (execError.killed || execError.signal)
18
+ return true;
19
+ }
20
+ const message = error instanceof Error ? error.message : String(error);
21
+ return isScriptTimeoutError(message) || /killed/i.test(message);
22
+ }
13
23
  export class WindowsExecutor {
14
24
  logger;
15
25
  scriptQueue = [];
@@ -75,60 +85,49 @@ export class WindowsExecutor {
75
85
  this.isProcessing = false;
76
86
  }
77
87
  async executeScript(script, timeout = DEFAULT_SCRIPT_TIMEOUT_MS) {
78
- const tempScriptPath = join(tmpdir(), `photoshop-script-${Date.now()}.jsx`);
88
+ const stamp = `${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
89
+ const tempScriptPath = join(tmpdir(), `photoshop-script-${stamp}.jsx`);
90
+ const vbsPath = join(tmpdir(), `photoshop-vbs-${stamp}.vbs`);
91
+ const resultPath = join(tmpdir(), `photoshop-result-${stamp}.txt`);
79
92
  try {
80
93
  await writeFile(tempScriptPath, prefixExtendScriptBom(script), 'utf8');
81
- const vbsScript = this.createVBSWrapper(tempScriptPath);
82
- const vbsPath = join(tmpdir(), `photoshop-vbs-${Date.now()}.vbs`);
83
- await writeFile(vbsPath, vbsScript, 'utf8');
94
+ await writeFile(vbsPath, buildWindowsBridgeScript(), 'utf8');
84
95
  try {
85
- const { stdout, stderr } = await execAsync(`cscript //nologo "${vbsPath}"`, {
96
+ const { stderr } = await execAsync(`cscript //nologo "${vbsPath}"`, {
86
97
  timeout: timeout + KILL_GRACE_MS,
87
98
  killSignal: 'SIGKILL',
99
+ env: {
100
+ ...process.env,
101
+ [WINDOWS_JSX_ENV]: tempScriptPath,
102
+ [WINDOWS_RESULT_ENV]: resultPath,
103
+ },
88
104
  });
89
105
  if (stderr) {
90
106
  this.logger.warn('Script execution warning:', stderr);
91
107
  }
92
- return this.parseResult(stdout);
93
108
  }
94
109
  catch (error) {
95
- const message = error instanceof Error ? error.message : String(error);
96
- if (isScriptTimeoutError(message) || /killed/i.test(message)) {
110
+ if (isExecTimeout(error)) {
97
111
  throw new Error('Script execution timeout');
98
112
  }
113
+ const fromFile = await readWindowsResultFile(resultPath);
114
+ if (fromFile !== null) {
115
+ return this.parseResult(fromFile);
116
+ }
99
117
  throw error;
100
118
  }
101
- finally {
102
- await unlink(vbsPath).catch(() => { });
119
+ const fromFile = await readWindowsResultFile(resultPath);
120
+ if (fromFile === null) {
121
+ throw new Error('Photoshop script produced no result');
103
122
  }
123
+ return this.parseResult(fromFile);
104
124
  }
105
125
  finally {
126
+ await unlink(vbsPath).catch(() => { });
106
127
  await unlink(tempScriptPath).catch(() => { });
128
+ await unlink(resultPath).catch(() => { });
107
129
  }
108
130
  }
109
- createVBSWrapper(jsxPath) {
110
- return `
111
- On Error Resume Next
112
- Dim photoshopApp
113
- Set photoshopApp = CreateObject("Photoshop.Application")
114
-
115
- If Err.Number <> 0 Then
116
- WScript.Echo "ERROR: Failed to connect to Photoshop - " & Err.Description
117
- WScript.Quit 1
118
- End If
119
-
120
- ' Execute the JSX script
121
- Dim result
122
- result = photoshopApp.DoJavaScript("$.evalFile('" & Replace("${jsxPath}", "\\", "\\\\") & "')")
123
-
124
- If Err.Number <> 0 Then
125
- WScript.Echo "ERROR: " & Err.Description
126
- WScript.Quit 1
127
- Else
128
- WScript.Echo result
129
- End If
130
- `.trim();
131
- }
132
131
  parseResult(output) {
133
132
  const trimmed = output.trim();
134
133
  if (trimmed.startsWith('ERROR:')) {
@@ -1 +1 @@
1
- {"version":3,"file":"windows-executor.js","sourceRoot":"","sources":["../../src/platform/windows-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"windows-executor.js","sourceRoot":"","sources":["../../src/platform/windows-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /** Child-process env var holding the JSX path. Kept out of the .vbs source. */
2
+ export declare const WINDOWS_JSX_ENV = "PSMCP_JSX";
3
+ /** Child-process env var holding the UTF-16 result file path. */
4
+ export declare const WINDOWS_RESULT_ENV = "PSMCP_RESULT";
5
+ /**
6
+ * ASCII-only cscript bridge.
7
+ *
8
+ * cscript prints WScript.Echo with the system ANSI code page, so any non-ASCII
9
+ * Photoshop result (and any non-ASCII temp path inlined into the .vbs file)
10
+ * is corrupted before Node can read it. Paths travel in the process environment
11
+ * (Unicode), and the script body is written as UTF-16 LE by FileSystemObject,
12
+ * which ships with Windows Script Host. Stdout stays ASCII.
13
+ */
14
+ export declare function buildWindowsBridgeScript(): string;
15
+ /** Decode a FileSystemObject Unicode text file (UTF-16 LE, BOM required). */
16
+ export declare function decodeWindowsResultFile(buffer: Buffer): string;
17
+ export declare function readWindowsResultFile(path: string): Promise<string | null>;
18
+ //# sourceMappingURL=windows-script-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-script-bridge.d.ts","sourceRoot":"","sources":["../../src/platform/windows-script-bridge.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CA+DjD;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAShF"}
@@ -0,0 +1,100 @@
1
+ import { readFile } from 'fs/promises';
2
+ /** Child-process env var holding the JSX path. Kept out of the .vbs source. */
3
+ export const WINDOWS_JSX_ENV = 'PSMCP_JSX';
4
+ /** Child-process env var holding the UTF-16 result file path. */
5
+ export const WINDOWS_RESULT_ENV = 'PSMCP_RESULT';
6
+ /**
7
+ * ASCII-only cscript bridge.
8
+ *
9
+ * cscript prints WScript.Echo with the system ANSI code page, so any non-ASCII
10
+ * Photoshop result (and any non-ASCII temp path inlined into the .vbs file)
11
+ * is corrupted before Node can read it. Paths travel in the process environment
12
+ * (Unicode), and the script body is written as UTF-16 LE by FileSystemObject,
13
+ * which ships with Windows Script Host. Stdout stays ASCII.
14
+ */
15
+ export function buildWindowsBridgeScript() {
16
+ return `
17
+ On Error Resume Next
18
+ Dim shell, jsxPath, outFile, photoshopApp, result, jsxForJs
19
+
20
+ Sub WriteResult(text)
21
+ On Error Resume Next
22
+ Dim fso, stream, writeErr
23
+ ' Err is global. Clear the Photoshop failure that caused this write
24
+ ' before treating a non-zero Err as a file-system failure.
25
+ Err.Clear
26
+ Set fso = CreateObject("Scripting.FileSystemObject")
27
+ Set stream = fso.CreateTextFile(outFile, True, True)
28
+ writeErr = Err.Number
29
+ If writeErr <> 0 Then
30
+ WScript.Echo "ERROR: Failed to write script result (" & writeErr & ")"
31
+ WScript.Quit 1
32
+ End If
33
+ Err.Clear
34
+ stream.Write text
35
+ writeErr = Err.Number
36
+ If writeErr <> 0 Then
37
+ WScript.Echo "ERROR: Failed to write script result (" & writeErr & ")"
38
+ WScript.Quit 1
39
+ End If
40
+ stream.Close
41
+ End Sub
42
+
43
+ Set shell = CreateObject("WScript.Shell")
44
+ jsxPath = shell.Environment("PROCESS")("${WINDOWS_JSX_ENV}")
45
+ outFile = shell.Environment("PROCESS")("${WINDOWS_RESULT_ENV}")
46
+
47
+ If jsxPath = "" Or outFile = "" Then
48
+ WScript.Echo "ERROR: Missing Photoshop script paths"
49
+ WScript.Quit 1
50
+ End If
51
+
52
+ Set photoshopApp = CreateObject("Photoshop.Application")
53
+ If Err.Number <> 0 Then
54
+ WriteResult "ERROR: Failed to connect to Photoshop - " & Err.Description
55
+ WScript.Quit 1
56
+ End If
57
+
58
+ Err.Clear
59
+ jsxForJs = Replace(jsxPath, "\\", "\\\\")
60
+ jsxForJs = Replace(jsxForJs, "'", "\\'")
61
+ result = photoshopApp.DoJavaScript("$.evalFile('" & jsxForJs & "')")
62
+
63
+ If Err.Number <> 0 Then
64
+ WriteResult "ERROR: " & Err.Description
65
+ WScript.Quit 1
66
+ End If
67
+
68
+ If IsNull(result) Or IsEmpty(result) Then
69
+ result = ""
70
+ Else
71
+ result = CStr(result)
72
+ End If
73
+
74
+ WriteResult result
75
+ `
76
+ .trim()
77
+ .replace(/\n/g, '\r\n');
78
+ }
79
+ /** Decode a FileSystemObject Unicode text file (UTF-16 LE, BOM required). */
80
+ export function decodeWindowsResultFile(buffer) {
81
+ if (buffer.length === 0)
82
+ return '';
83
+ if (buffer.length >= 2 && buffer[0] === 0xff && buffer[1] === 0xfe) {
84
+ return buffer.subarray(2).toString('utf16le');
85
+ }
86
+ throw new Error('Photoshop script result was not UTF-16 text');
87
+ }
88
+ export async function readWindowsResultFile(path) {
89
+ try {
90
+ const buffer = await readFile(path);
91
+ return decodeWindowsResultFile(buffer);
92
+ }
93
+ catch (error) {
94
+ const code = error.code;
95
+ if (code === 'ENOENT')
96
+ return null;
97
+ throw error;
98
+ }
99
+ }
100
+ //# sourceMappingURL=windows-script-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-script-bridge.js","sourceRoot":"","sources":["../../src/platform/windows-script-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAE3C,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CA4BiC,eAAe;0CACf,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B3D;SACI,IAAI,EAAE;SACN,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alisaitteke/photoshop-mcp",
3
- "version": "1.7.18",
3
+ "version": "1.7.19",
4
4
  "description": "MCP server for Adobe Photoshop — 122 tools (generative AI + recipes), standalone web UI. Control Photoshop from Cursor, Claude, or natural language.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",