@alisaitteke/photoshop-mcp 0.1.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.
Files changed (115) hide show
  1. package/.prettierrc +9 -0
  2. package/README.md +1300 -0
  3. package/dist/api/batch-play.d.ts +62 -0
  4. package/dist/api/batch-play.d.ts.map +1 -0
  5. package/dist/api/batch-play.js +131 -0
  6. package/dist/api/batch-play.js.map +1 -0
  7. package/dist/api/extendscript.d.ts +258 -0
  8. package/dist/api/extendscript.d.ts.map +1 -0
  9. package/dist/api/extendscript.js +1437 -0
  10. package/dist/api/extendscript.js.map +1 -0
  11. package/dist/api/photoshop-api.d.ts +20 -0
  12. package/dist/api/photoshop-api.d.ts.map +1 -0
  13. package/dist/api/photoshop-api.js +88 -0
  14. package/dist/api/photoshop-api.js.map +1 -0
  15. package/dist/core/server.d.ts +14 -0
  16. package/dist/core/server.d.ts.map +1 -0
  17. package/dist/core/server.js +191 -0
  18. package/dist/core/server.js.map +1 -0
  19. package/dist/core/session.d.ts +24 -0
  20. package/dist/core/session.d.ts.map +1 -0
  21. package/dist/core/session.js +83 -0
  22. package/dist/core/session.js.map +1 -0
  23. package/dist/core/tool-registry.d.ts +23 -0
  24. package/dist/core/tool-registry.d.ts.map +1 -0
  25. package/dist/core/tool-registry.js +55 -0
  26. package/dist/core/tool-registry.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +18 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/platform/connection.d.ts +20 -0
  32. package/dist/platform/connection.d.ts.map +1 -0
  33. package/dist/platform/connection.js +94 -0
  34. package/dist/platform/connection.js.map +1 -0
  35. package/dist/platform/detector.d.ts +19 -0
  36. package/dist/platform/detector.d.ts.map +1 -0
  37. package/dist/platform/detector.js +63 -0
  38. package/dist/platform/detector.js.map +1 -0
  39. package/dist/platform/macos-detector.d.ts +13 -0
  40. package/dist/platform/macos-detector.d.ts.map +1 -0
  41. package/dist/platform/macos-detector.js +145 -0
  42. package/dist/platform/macos-detector.js.map +1 -0
  43. package/dist/platform/macos-executor.d.ts +22 -0
  44. package/dist/platform/macos-executor.d.ts.map +1 -0
  45. package/dist/platform/macos-executor.js +161 -0
  46. package/dist/platform/macos-executor.js.map +1 -0
  47. package/dist/platform/script-executor.d.ts +23 -0
  48. package/dist/platform/script-executor.d.ts.map +1 -0
  49. package/dist/platform/script-executor.js +2 -0
  50. package/dist/platform/script-executor.js.map +1 -0
  51. package/dist/platform/windows-detector.d.ts +14 -0
  52. package/dist/platform/windows-detector.d.ts.map +1 -0
  53. package/dist/platform/windows-detector.js +173 -0
  54. package/dist/platform/windows-detector.js.map +1 -0
  55. package/dist/platform/windows-executor.d.ts +15 -0
  56. package/dist/platform/windows-executor.d.ts.map +1 -0
  57. package/dist/platform/windows-executor.js +148 -0
  58. package/dist/platform/windows-executor.js.map +1 -0
  59. package/dist/tools/action-tools.d.ts +4 -0
  60. package/dist/tools/action-tools.d.ts.map +1 -0
  61. package/dist/tools/action-tools.js +102 -0
  62. package/dist/tools/action-tools.js.map +1 -0
  63. package/dist/tools/adjustment-tools.d.ts +4 -0
  64. package/dist/tools/adjustment-tools.d.ts.map +1 -0
  65. package/dist/tools/adjustment-tools.js +274 -0
  66. package/dist/tools/adjustment-tools.js.map +1 -0
  67. package/dist/tools/document-tools.d.ts +4 -0
  68. package/dist/tools/document-tools.d.ts.map +1 -0
  69. package/dist/tools/document-tools.js +230 -0
  70. package/dist/tools/document-tools.js.map +1 -0
  71. package/dist/tools/filter-tools.d.ts +4 -0
  72. package/dist/tools/filter-tools.d.ts.map +1 -0
  73. package/dist/tools/filter-tools.js +230 -0
  74. package/dist/tools/filter-tools.js.map +1 -0
  75. package/dist/tools/history-tools.d.ts +4 -0
  76. package/dist/tools/history-tools.d.ts.map +1 -0
  77. package/dist/tools/history-tools.js +137 -0
  78. package/dist/tools/history-tools.js.map +1 -0
  79. package/dist/tools/image-placement-tools.d.ts +4 -0
  80. package/dist/tools/image-placement-tools.d.ts.map +1 -0
  81. package/dist/tools/image-placement-tools.js +109 -0
  82. package/dist/tools/image-placement-tools.js.map +1 -0
  83. package/dist/tools/image-tools.d.ts +4 -0
  84. package/dist/tools/image-tools.d.ts.map +1 -0
  85. package/dist/tools/image-tools.js +123 -0
  86. package/dist/tools/image-tools.js.map +1 -0
  87. package/dist/tools/layer-ordering-tools.d.ts +4 -0
  88. package/dist/tools/layer-ordering-tools.d.ts.map +1 -0
  89. package/dist/tools/layer-ordering-tools.js +210 -0
  90. package/dist/tools/layer-ordering-tools.js.map +1 -0
  91. package/dist/tools/layer-properties-tools.d.ts +4 -0
  92. package/dist/tools/layer-properties-tools.d.ts.map +1 -0
  93. package/dist/tools/layer-properties-tools.js +421 -0
  94. package/dist/tools/layer-properties-tools.js.map +1 -0
  95. package/dist/tools/layer-tools.d.ts +4 -0
  96. package/dist/tools/layer-tools.d.ts.map +1 -0
  97. package/dist/tools/layer-tools.js +251 -0
  98. package/dist/tools/layer-tools.js.map +1 -0
  99. package/dist/tools/layer-transform-tools.d.ts +4 -0
  100. package/dist/tools/layer-transform-tools.d.ts.map +1 -0
  101. package/dist/tools/layer-transform-tools.js +199 -0
  102. package/dist/tools/layer-transform-tools.js.map +1 -0
  103. package/dist/tools/selection-tools.d.ts +4 -0
  104. package/dist/tools/selection-tools.d.ts.map +1 -0
  105. package/dist/tools/selection-tools.js +295 -0
  106. package/dist/tools/selection-tools.js.map +1 -0
  107. package/dist/tools/text-tools.d.ts +4 -0
  108. package/dist/tools/text-tools.d.ts.map +1 -0
  109. package/dist/tools/text-tools.js +210 -0
  110. package/dist/tools/text-tools.js.map +1 -0
  111. package/dist/utils/logger.d.ts +17 -0
  112. package/dist/utils/logger.d.ts.map +1 -0
  113. package/dist/utils/logger.js +43 -0
  114. package/dist/utils/logger.js.map +1 -0
  115. package/package.json +47 -0
@@ -0,0 +1,173 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { access, constants } from 'fs/promises';
4
+ import { Logger } from '../utils/logger.js';
5
+ const execAsync = promisify(exec);
6
+ export class WindowsDetector {
7
+ logger;
8
+ constructor() {
9
+ this.logger = new Logger('WindowsDetector');
10
+ }
11
+ async detect() {
12
+ this.logger.info('Detecting Photoshop on Windows...');
13
+ // Try environment variable first
14
+ const envPath = process.env.PHOTOSHOP_PATH;
15
+ if (envPath) {
16
+ this.logger.debug(`Using environment variable: ${envPath}`);
17
+ const info = await this.checkPath(envPath);
18
+ if (info)
19
+ return info;
20
+ }
21
+ // Try registry detection
22
+ try {
23
+ const registryInfo = await this.detectFromRegistry();
24
+ if (registryInfo)
25
+ return registryInfo;
26
+ }
27
+ catch (error) {
28
+ this.logger.warn('Registry detection failed:', error);
29
+ }
30
+ // Try common installation paths
31
+ const commonPaths = this.getCommonPaths();
32
+ for (const path of commonPaths) {
33
+ const info = await this.checkPath(path);
34
+ if (info)
35
+ return info;
36
+ }
37
+ throw new Error('Photoshop not found on this system');
38
+ }
39
+ async detectFromRegistry() {
40
+ try {
41
+ // Query Adobe registry keys
42
+ const registryPaths = [
43
+ 'HKLM\\SOFTWARE\\Adobe\\Photoshop',
44
+ 'HKLM\\SOFTWARE\\WOW6432Node\\Adobe\\Photoshop',
45
+ ];
46
+ for (const regPath of registryPaths) {
47
+ try {
48
+ const { stdout } = await execAsync(`reg query "${regPath}" /s`);
49
+ const entries = this.parseRegistryOutput(stdout);
50
+ if (entries.length > 0) {
51
+ // Get the latest version
52
+ const latest = entries.sort((a, b) => b.version.localeCompare(a.version))[0];
53
+ const info = await this.checkPath(latest.path);
54
+ if (info)
55
+ return info;
56
+ }
57
+ }
58
+ catch (error) {
59
+ // Continue to next registry path
60
+ continue;
61
+ }
62
+ }
63
+ // Try COM CLSID registry
64
+ const clsidPaths = [
65
+ 'HKCR\\CLSID\\{06870682-6f3c-4b97-9143-f03e85c0bd3e}\\LocalServer32',
66
+ 'HKCR\\Wow6432Node\\CLSID\\{06870682-6f3c-4b97-9143-f03e85c0bd3e}\\LocalServer32',
67
+ ];
68
+ for (const clsidPath of clsidPaths) {
69
+ try {
70
+ const { stdout } = await execAsync(`reg query "${clsidPath}" /ve`);
71
+ const exePath = this.extractPathFromCLSID(stdout);
72
+ if (exePath) {
73
+ const info = await this.checkPath(exePath);
74
+ if (info)
75
+ return info;
76
+ }
77
+ }
78
+ catch (error) {
79
+ continue;
80
+ }
81
+ }
82
+ }
83
+ catch (error) {
84
+ this.logger.error('Registry query failed:', error);
85
+ }
86
+ return null;
87
+ }
88
+ parseRegistryOutput(output) {
89
+ const entries = [];
90
+ const lines = output.split('\n');
91
+ let currentVersion = '';
92
+ for (const line of lines) {
93
+ // Extract version from registry path
94
+ const versionMatch = line.match(/Photoshop\\(\d+\.\d+)/);
95
+ if (versionMatch) {
96
+ currentVersion = versionMatch[1];
97
+ }
98
+ // Extract ApplicationPath
99
+ const pathMatch = line.match(/ApplicationPath\s+REG_SZ\s+(.+)/);
100
+ if (pathMatch && currentVersion) {
101
+ entries.push({
102
+ version: currentVersion,
103
+ path: pathMatch[1].trim(),
104
+ });
105
+ }
106
+ }
107
+ return entries;
108
+ }
109
+ extractPathFromCLSID(output) {
110
+ const match = output.match(/REG_SZ\s+(.+\.exe)/i);
111
+ if (match) {
112
+ // Remove quotes and trailing parameters
113
+ return match[1].trim().replace(/^"(.+)".*$/, '$1');
114
+ }
115
+ return null;
116
+ }
117
+ getCommonPaths() {
118
+ const programFiles = process.env.ProgramFiles || 'C:\\Program Files';
119
+ const programFilesX86 = process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)';
120
+ const paths = [];
121
+ // Generate paths for versions 2012-2025
122
+ for (let year = 2025; year >= 2012; year--) {
123
+ paths.push(`${programFiles}\\Adobe\\Adobe Photoshop ${year}\\Photoshop.exe`, `${programFilesX86}\\Adobe\\Adobe Photoshop ${year}\\Photoshop.exe`, `${programFiles}\\Adobe\\Adobe Photoshop CC ${year}\\Photoshop.exe`, `${programFilesX86}\\Adobe\\Adobe Photoshop CC ${year}\\Photoshop.exe`);
124
+ }
125
+ // Also check for version-less installation
126
+ paths.push(`${programFiles}\\Adobe\\Adobe Photoshop CC\\Photoshop.exe`, `${programFiles}\\Adobe\\Photoshop CC\\Photoshop.exe`);
127
+ return paths;
128
+ }
129
+ async checkPath(path) {
130
+ try {
131
+ // Clean up path
132
+ let cleanPath = path.trim().replace(/^"|"$/g, '');
133
+ // If path is a directory, append Photoshop.exe
134
+ if (!cleanPath.toLowerCase().endsWith('.exe')) {
135
+ cleanPath = `${cleanPath}\\Photoshop.exe`;
136
+ }
137
+ await access(cleanPath, constants.F_OK);
138
+ const version = this.extractVersionFromPath(cleanPath);
139
+ this.logger.info(`Found Photoshop at: ${cleanPath}`);
140
+ return {
141
+ version,
142
+ path: cleanPath,
143
+ isRunning: await this.checkIfRunning(),
144
+ };
145
+ }
146
+ catch (error) {
147
+ return null;
148
+ }
149
+ }
150
+ extractVersionFromPath(path) {
151
+ // Try to extract year from path
152
+ const yearMatch = path.match(/(\d{4})/);
153
+ if (yearMatch) {
154
+ return yearMatch[1];
155
+ }
156
+ // Try to extract version number
157
+ const versionMatch = path.match(/(\d+\.\d+)/);
158
+ if (versionMatch) {
159
+ return versionMatch[1];
160
+ }
161
+ return 'Unknown';
162
+ }
163
+ async checkIfRunning() {
164
+ try {
165
+ const { stdout } = await execAsync('tasklist /FI "IMAGENAME eq Photoshop.exe"');
166
+ return stdout.toLowerCase().includes('photoshop.exe');
167
+ }
168
+ catch (error) {
169
+ return false;
170
+ }
171
+ }
172
+ }
173
+ //# sourceMappingURL=windows-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-detector.js","sourceRoot":"","sources":["../../src/platform/windows-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ScriptExecutor } from './script-executor.js';
2
+ export declare class WindowsExecutor implements ScriptExecutor {
3
+ private logger;
4
+ private scriptQueue;
5
+ private isProcessing;
6
+ constructor();
7
+ execute(script: string, timeout?: number): Promise<unknown>;
8
+ private processQueue;
9
+ private executeScript;
10
+ private createVBSWrapper;
11
+ private parseResult;
12
+ isPhotoshopRunning(): Promise<boolean>;
13
+ launchPhotoshop(photoshopPath: string): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=windows-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-executor.d.ts","sourceRoot":"","sources":["../../src/platform/windows-executor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,qBAAa,eAAgB,YAAW,cAAc;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,YAAY,CAAS;;IAMvB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;YAuB1D,YAAY;YAqBZ,aAAa;IAkC3B,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,WAAW;IAiBb,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAStC,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB5D"}
@@ -0,0 +1,148 @@
1
+ import { exec, spawn } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { writeFile, unlink } from 'fs/promises';
4
+ import { tmpdir } from 'os';
5
+ import { join } from 'path';
6
+ import { Logger } from '../utils/logger.js';
7
+ const execAsync = promisify(exec);
8
+ export class WindowsExecutor {
9
+ logger;
10
+ scriptQueue = [];
11
+ isProcessing = false;
12
+ constructor() {
13
+ this.logger = new Logger('WindowsExecutor');
14
+ }
15
+ async execute(script, timeout = 30000) {
16
+ return new Promise((resolve, reject) => {
17
+ const timeoutId = setTimeout(() => {
18
+ reject(new Error('Script execution timeout'));
19
+ }, timeout);
20
+ this.scriptQueue.push(async () => {
21
+ try {
22
+ const result = await this.executeScript(script);
23
+ clearTimeout(timeoutId);
24
+ resolve(result);
25
+ return result;
26
+ }
27
+ catch (error) {
28
+ clearTimeout(timeoutId);
29
+ reject(error);
30
+ throw error;
31
+ }
32
+ });
33
+ this.processQueue();
34
+ });
35
+ }
36
+ async processQueue() {
37
+ if (this.isProcessing || this.scriptQueue.length === 0) {
38
+ return;
39
+ }
40
+ this.isProcessing = true;
41
+ while (this.scriptQueue.length > 0) {
42
+ const task = this.scriptQueue.shift();
43
+ if (task) {
44
+ try {
45
+ await task();
46
+ }
47
+ catch (error) {
48
+ this.logger.error('Script execution failed:', error);
49
+ }
50
+ }
51
+ }
52
+ this.isProcessing = false;
53
+ }
54
+ async executeScript(script) {
55
+ // For Windows, we'll use a combination of VBScript/JScript to communicate with Photoshop via COM
56
+ // Write script to temporary file
57
+ const tempScriptPath = join(tmpdir(), `photoshop-script-${Date.now()}.jsx`);
58
+ try {
59
+ await writeFile(tempScriptPath, script, 'utf8');
60
+ // Use VBScript to execute the JSX script via COM
61
+ const vbsScript = this.createVBSWrapper(tempScriptPath);
62
+ const vbsPath = join(tmpdir(), `photoshop-vbs-${Date.now()}.vbs`);
63
+ await writeFile(vbsPath, vbsScript, 'utf8');
64
+ try {
65
+ // Execute VBScript
66
+ const { stdout, stderr } = await execAsync(`cscript //nologo "${vbsPath}"`);
67
+ if (stderr) {
68
+ this.logger.warn('Script execution warning:', stderr);
69
+ }
70
+ // Parse result
71
+ return this.parseResult(stdout);
72
+ }
73
+ finally {
74
+ // Cleanup VBS file
75
+ await unlink(vbsPath).catch(() => { });
76
+ }
77
+ }
78
+ finally {
79
+ // Cleanup JSX file
80
+ await unlink(tempScriptPath).catch(() => { });
81
+ }
82
+ }
83
+ createVBSWrapper(jsxPath) {
84
+ return `
85
+ On Error Resume Next
86
+ Dim photoshopApp
87
+ Set photoshopApp = CreateObject("Photoshop.Application")
88
+
89
+ If Err.Number <> 0 Then
90
+ WScript.Echo "ERROR: Failed to connect to Photoshop - " & Err.Description
91
+ WScript.Quit 1
92
+ End If
93
+
94
+ ' Execute the JSX script
95
+ Dim result
96
+ result = photoshopApp.DoJavaScript("$.evalFile('" & Replace("${jsxPath}", "\\", "\\\\") & "');")
97
+
98
+ If Err.Number <> 0 Then
99
+ WScript.Echo "ERROR: " & Err.Description
100
+ WScript.Quit 1
101
+ Else
102
+ WScript.Echo result
103
+ End If
104
+ `.trim();
105
+ }
106
+ parseResult(output) {
107
+ const trimmed = output.trim();
108
+ // Check for error
109
+ if (trimmed.startsWith('ERROR:')) {
110
+ throw new Error(trimmed.substring(6).trim());
111
+ }
112
+ // Try to parse as JSON
113
+ try {
114
+ return JSON.parse(trimmed);
115
+ }
116
+ catch {
117
+ // Return as string if not JSON
118
+ return trimmed;
119
+ }
120
+ }
121
+ async isPhotoshopRunning() {
122
+ try {
123
+ const { stdout } = await execAsync('tasklist /FI "IMAGENAME eq Photoshop.exe"');
124
+ return stdout.toLowerCase().includes('photoshop.exe');
125
+ }
126
+ catch (error) {
127
+ return false;
128
+ }
129
+ }
130
+ async launchPhotoshop(photoshopPath) {
131
+ return new Promise((resolve, reject) => {
132
+ this.logger.info(`Launching Photoshop: ${photoshopPath}`);
133
+ const child = spawn(photoshopPath, [], {
134
+ detached: true,
135
+ stdio: 'ignore',
136
+ });
137
+ child.unref();
138
+ // Wait a bit for Photoshop to start
139
+ setTimeout(() => {
140
+ resolve();
141
+ }, 5000);
142
+ child.on('error', (error) => {
143
+ reject(new Error(`Failed to launch Photoshop: ${error.message}`));
144
+ });
145
+ });
146
+ }
147
+ }
148
+ //# sourceMappingURL=windows-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-executor.js","sourceRoot":"","sources":["../../src/platform/windows-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,OAAO,eAAe;IAClB,MAAM,CAAS;IACf,WAAW,GAAkC,EAAE,CAAC;IAChD,YAAY,GAAG,KAAK,CAAC;IAE7B;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,UAAkB,KAAK;QACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAChD,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC/B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAChD,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChB,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC;oBACH,MAAM,IAAI,EAAE,CAAC;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAc;QACxC,iGAAiG;QACjG,iCAAiC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAEhD,iDAAiD;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAElE,MAAM,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAE5C,IAAI,CAAC;gBACH,mBAAmB;gBACnB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,qBAAqB,OAAO,GAAG,CAAC,CAAC;gBAE5E,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;gBACxD,CAAC;gBAED,eAAe;gBACf,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;oBAAS,CAAC;gBACT,mBAAmB;gBACnB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,mBAAmB;YACnB,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACtC,OAAO;;;;;;;;;;;;+DAYoD,OAAO;;;;;;;;CAQrE,CAAC,IAAI,EAAE,CAAC;IACP,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE9B,kBAAkB;QAClB,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2CAA2C,CAAC,CAAC;YAChF,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,aAAa,EAAE,CAAC,CAAC;YAE1D,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE;gBACrC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,oCAAoC;YACpC,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { ToolDefinition } from '../core/tool-registry.js';
2
+ import { PhotoshopConnection } from '../platform/connection.js';
3
+ export declare function createActionTools(connection: PhotoshopConnection): ToolDefinition[];
4
+ //# sourceMappingURL=action-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-tools.d.ts","sourceRoot":"","sources":["../../src/tools/action-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIhE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAyCnF"}
@@ -0,0 +1,102 @@
1
+ import { PhotoshopAPIFactory } from '../api/photoshop-api.js';
2
+ import { ExtendScriptSnippets } from '../api/extendscript.js';
3
+ export function createActionTools(connection) {
4
+ return [
5
+ {
6
+ tool: {
7
+ name: 'photoshop_play_action',
8
+ description: 'Play a recorded action from the Actions palette',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ actionName: {
13
+ type: 'string',
14
+ description: 'Name of the action to play',
15
+ },
16
+ actionSetName: {
17
+ type: 'string',
18
+ description: 'Name of the action set containing the action',
19
+ },
20
+ },
21
+ required: ['actionName', 'actionSetName'],
22
+ },
23
+ },
24
+ handler: async (args) => playAction(connection, args),
25
+ },
26
+ {
27
+ tool: {
28
+ name: 'photoshop_execute_script',
29
+ description: 'Execute custom ExtendScript code (advanced)',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ code: {
34
+ type: 'string',
35
+ description: 'ExtendScript code to execute',
36
+ },
37
+ },
38
+ required: ['code'],
39
+ },
40
+ },
41
+ handler: async (args) => executeCustomScript(connection, args),
42
+ },
43
+ ];
44
+ }
45
+ async function playAction(connection, args) {
46
+ const actionName = args.actionName;
47
+ const actionSetName = args.actionSetName;
48
+ try {
49
+ const apiFactory = new PhotoshopAPIFactory(connection);
50
+ const api = await apiFactory.createAPI();
51
+ const script = ExtendScriptSnippets.playAction(actionName, actionSetName);
52
+ await api.executeScript(script);
53
+ return {
54
+ content: [
55
+ {
56
+ type: 'text',
57
+ text: `Action played: "${actionName}" from set "${actionSetName}"`,
58
+ },
59
+ ],
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ content: [
65
+ {
66
+ type: 'text',
67
+ text: `Error playing action: ${error instanceof Error ? error.message : String(error)}`,
68
+ },
69
+ ],
70
+ isError: true,
71
+ };
72
+ }
73
+ }
74
+ async function executeCustomScript(connection, args) {
75
+ const code = args.code;
76
+ try {
77
+ const apiFactory = new PhotoshopAPIFactory(connection);
78
+ const api = await apiFactory.createAPI();
79
+ const script = ExtendScriptSnippets.executeCustomScript(code);
80
+ const result = await api.executeScript(script);
81
+ return {
82
+ content: [
83
+ {
84
+ type: 'text',
85
+ text: `Custom script executed\nResult: ${JSON.stringify(result)}`,
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ catch (error) {
91
+ return {
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ text: `Error executing custom script: ${error instanceof Error ? error.message : String(error)}`,
96
+ },
97
+ ],
98
+ isError: true,
99
+ };
100
+ }
101
+ }
102
+ //# sourceMappingURL=action-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-tools.js","sourceRoot":"","sources":["../../src/tools/action-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ToolDefinition } from '../core/tool-registry.js';
2
+ import { PhotoshopConnection } from '../platform/connection.js';
3
+ export declare function createAdjustmentTools(connection: PhotoshopConnection): ToolDefinition[];
4
+ //# sourceMappingURL=adjustment-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adjustment-tools.d.ts","sourceRoot":"","sources":["../../src/tools/adjustment-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIhE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAuGvF"}