@alisaitteke/photoshop-mcp 1.3.13 → 1.6.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 (166) hide show
  1. package/README.de.md +787 -0
  2. package/README.es.md +737 -0
  3. package/README.ja.md +732 -0
  4. package/README.md +204 -41
  5. package/README.tr.md +842 -0
  6. package/README.zh-CN.md +727 -0
  7. package/dist/api/extendscript.d.ts +17 -1
  8. package/dist/api/extendscript.d.ts.map +1 -1
  9. package/dist/api/extendscript.js +301 -3
  10. package/dist/api/extendscript.js.map +1 -1
  11. package/dist/api/photoshop-api.d.ts +1 -1
  12. package/dist/api/photoshop-api.d.ts.map +1 -1
  13. package/dist/api/photoshop-api.js +4 -4
  14. package/dist/api/photoshop-api.js.map +1 -1
  15. package/dist/core/server.d.ts.map +1 -1
  16. package/dist/core/server.js +8 -0
  17. package/dist/core/server.js.map +1 -1
  18. package/dist/errors/envelope.d.ts +1 -1
  19. package/dist/errors/envelope.d.ts.map +1 -1
  20. package/dist/errors/envelope.js +4 -0
  21. package/dist/errors/envelope.js.map +1 -1
  22. package/dist/platform/capabilities.d.ts +7 -0
  23. package/dist/platform/capabilities.d.ts.map +1 -1
  24. package/dist/platform/capabilities.js +23 -1
  25. package/dist/platform/capabilities.js.map +1 -1
  26. package/dist/platform/macos-detector.d.ts.map +1 -1
  27. package/dist/platform/macos-detector.js +7 -4
  28. package/dist/platform/macos-detector.js.map +1 -1
  29. package/dist/platform/macos-executor.d.ts +11 -0
  30. package/dist/platform/macos-executor.d.ts.map +1 -1
  31. package/dist/platform/macos-executor.js +103 -32
  32. package/dist/platform/macos-executor.js.map +1 -1
  33. package/dist/platform/uxp-bridge-client.d.ts +13 -0
  34. package/dist/platform/uxp-bridge-client.d.ts.map +1 -0
  35. package/dist/platform/uxp-bridge-client.js +31 -0
  36. package/dist/platform/uxp-bridge-client.js.map +1 -0
  37. package/dist/platform/uxp-bridge-server.d.ts +16 -0
  38. package/dist/platform/uxp-bridge-server.d.ts.map +1 -0
  39. package/dist/platform/uxp-bridge-server.js +105 -0
  40. package/dist/platform/uxp-bridge-server.js.map +1 -0
  41. package/dist/prompts/instructions.d.ts.map +1 -1
  42. package/dist/prompts/instructions.js +21 -12
  43. package/dist/prompts/instructions.js.map +1 -1
  44. package/dist/prompts/registry.d.ts +2 -2
  45. package/dist/prompts/registry.d.ts.map +1 -1
  46. package/dist/prompts/registry.js +15 -0
  47. package/dist/prompts/registry.js.map +1 -1
  48. package/dist/prompts/templates/batch-watermark.d.ts +3 -0
  49. package/dist/prompts/templates/batch-watermark.d.ts.map +1 -0
  50. package/dist/prompts/templates/batch-watermark.js +67 -0
  51. package/dist/prompts/templates/batch-watermark.js.map +1 -0
  52. package/dist/prompts/templates/generative-expand.d.ts +3 -0
  53. package/dist/prompts/templates/generative-expand.d.ts.map +1 -0
  54. package/dist/prompts/templates/generative-expand.js +34 -0
  55. package/dist/prompts/templates/generative-expand.js.map +1 -0
  56. package/dist/prompts/templates/generative-fill.d.ts +3 -0
  57. package/dist/prompts/templates/generative-fill.d.ts.map +1 -0
  58. package/dist/prompts/templates/generative-fill.js +29 -0
  59. package/dist/prompts/templates/generative-fill.js.map +1 -0
  60. package/dist/prompts/templates/generative-remove.d.ts +3 -0
  61. package/dist/prompts/templates/generative-remove.d.ts.map +1 -0
  62. package/dist/prompts/templates/generative-remove.js +36 -0
  63. package/dist/prompts/templates/generative-remove.js.map +1 -0
  64. package/dist/prompts/templates/passport-photo.d.ts +3 -0
  65. package/dist/prompts/templates/passport-photo.d.ts.map +1 -0
  66. package/dist/prompts/templates/passport-photo.js +36 -0
  67. package/dist/prompts/templates/passport-photo.js.map +1 -0
  68. package/dist/prompts/templates/remove-distraction.d.ts.map +1 -1
  69. package/dist/prompts/templates/remove-distraction.js +4 -5
  70. package/dist/prompts/templates/remove-distraction.js.map +1 -1
  71. package/dist/prompts/templates/split-carousel.d.ts +3 -0
  72. package/dist/prompts/templates/split-carousel.d.ts.map +1 -0
  73. package/dist/prompts/templates/split-carousel.js +49 -0
  74. package/dist/prompts/templates/split-carousel.js.map +1 -0
  75. package/dist/tools/generative/_shared.d.ts +14 -0
  76. package/dist/tools/generative/_shared.d.ts.map +1 -0
  77. package/dist/tools/generative/_shared.js +79 -0
  78. package/dist/tools/generative/_shared.js.map +1 -0
  79. package/dist/tools/generative-tools.d.ts +8 -0
  80. package/dist/tools/generative-tools.d.ts.map +1 -0
  81. package/dist/tools/generative-tools.js +221 -0
  82. package/dist/tools/generative-tools.js.map +1 -0
  83. package/dist/tools/layer-properties-tools.d.ts.map +1 -1
  84. package/dist/tools/layer-properties-tools.js +2 -1
  85. package/dist/tools/layer-properties-tools.js.map +1 -1
  86. package/dist/tools/neural-tools.d.ts +8 -0
  87. package/dist/tools/neural-tools.d.ts.map +1 -0
  88. package/dist/tools/neural-tools.js +99 -0
  89. package/dist/tools/neural-tools.js.map +1 -0
  90. package/dist/tools/recipes/_shared.d.ts +8 -0
  91. package/dist/tools/recipes/_shared.d.ts.map +1 -1
  92. package/dist/tools/recipes/_shared.js +45 -0
  93. package/dist/tools/recipes/_shared.js.map +1 -1
  94. package/dist/tools/recipes/batch-watermark.d.ts +4 -0
  95. package/dist/tools/recipes/batch-watermark.d.ts.map +1 -0
  96. package/dist/tools/recipes/batch-watermark.js +283 -0
  97. package/dist/tools/recipes/batch-watermark.js.map +1 -0
  98. package/dist/tools/recipes/enhance-portrait.d.ts.map +1 -1
  99. package/dist/tools/recipes/enhance-portrait.js +47 -0
  100. package/dist/tools/recipes/enhance-portrait.js.map +1 -1
  101. package/dist/tools/recipes/index.d.ts +1 -1
  102. package/dist/tools/recipes/index.d.ts.map +1 -1
  103. package/dist/tools/recipes/index.js +9 -0
  104. package/dist/tools/recipes/index.js.map +1 -1
  105. package/dist/tools/recipes/passport-photo.d.ts +4 -0
  106. package/dist/tools/recipes/passport-photo.d.ts.map +1 -0
  107. package/dist/tools/recipes/passport-photo.js +202 -0
  108. package/dist/tools/recipes/passport-photo.js.map +1 -0
  109. package/dist/tools/recipes/remove-background.d.ts.map +1 -1
  110. package/dist/tools/recipes/remove-background.js +5 -0
  111. package/dist/tools/recipes/remove-background.js.map +1 -1
  112. package/dist/tools/recipes/remove-distraction.d.ts.map +1 -1
  113. package/dist/tools/recipes/remove-distraction.js +48 -8
  114. package/dist/tools/recipes/remove-distraction.js.map +1 -1
  115. package/dist/tools/recipes/sky-blend.d.ts.map +1 -1
  116. package/dist/tools/recipes/sky-blend.js +43 -1
  117. package/dist/tools/recipes/sky-blend.js.map +1 -1
  118. package/dist/tools/recipes/split-carousel.d.ts +4 -0
  119. package/dist/tools/recipes/split-carousel.d.ts.map +1 -0
  120. package/dist/tools/recipes/split-carousel.js +163 -0
  121. package/dist/tools/recipes/split-carousel.js.map +1 -0
  122. package/dist/tools/state-tools.js +2 -2
  123. package/dist/tools/state-tools.js.map +1 -1
  124. package/dist/ui/cli.js +7 -1
  125. package/dist/ui/cli.js.map +1 -1
  126. package/dist/ui/providers/anthropic.d.ts.map +1 -1
  127. package/dist/ui/providers/anthropic.js +11 -1
  128. package/dist/ui/providers/anthropic.js.map +1 -1
  129. package/dist/ui/providers/types.d.ts +1 -0
  130. package/dist/ui/providers/types.d.ts.map +1 -1
  131. package/dist/ui/security/session-token.d.ts +24 -0
  132. package/dist/ui/security/session-token.d.ts.map +1 -0
  133. package/dist/ui/security/session-token.js +72 -0
  134. package/dist/ui/security/session-token.js.map +1 -0
  135. package/dist/ui/server.d.ts +4 -0
  136. package/dist/ui/server.d.ts.map +1 -1
  137. package/dist/ui/server.js +79 -11
  138. package/dist/ui/server.js.map +1 -1
  139. package/dist/utils/js-string.d.ts.map +1 -1
  140. package/dist/utils/js-string.js +6 -1
  141. package/dist/utils/js-string.js.map +1 -1
  142. package/package.json +8 -4
  143. package/uxp-plugin/index.html +20 -0
  144. package/uxp-plugin/main.js +139 -0
  145. package/uxp-plugin/manifest.json +26 -0
  146. package/web/dist/assets/index-SNfxhJjr.js +350 -0
  147. package/web/dist/assets/index-vi5C3hqd.css +1 -0
  148. package/web/dist/index.html +2 -2
  149. package/dist/analytics/client-ip.d.ts +0 -5
  150. package/dist/analytics/client-ip.d.ts.map +0 -1
  151. package/dist/analytics/client-ip.js +0 -39
  152. package/dist/analytics/client-ip.js.map +0 -1
  153. package/dist/analytics/debug-log.d.ts +0 -3
  154. package/dist/analytics/debug-log.d.ts.map +0 -1
  155. package/dist/analytics/debug-log.js +0 -21
  156. package/dist/analytics/debug-log.js.map +0 -1
  157. package/dist/prompts/templates.d.ts +0 -8
  158. package/dist/prompts/templates.d.ts.map +0 -1
  159. package/dist/prompts/templates.js +0 -162
  160. package/dist/prompts/templates.js.map +0 -1
  161. package/dist/tools/recipe-tools.d.ts +0 -4
  162. package/dist/tools/recipe-tools.d.ts.map +0 -1
  163. package/dist/tools/recipe-tools.js +0 -265
  164. package/dist/tools/recipe-tools.js.map +0 -1
  165. package/web/dist/assets/index-BgiXf1Jy.css +0 -1
  166. package/web/dist/assets/index-DvGX0LLy.js +0 -346
@@ -1,5 +1,5 @@
1
1
  import type { PromptRegistry } from '../core/prompt-registry.js';
2
- export declare const PHOTOSHOP_GUIDE_PROMPT_NAMES: readonly ["ps.gradient_blend", "ps.color_correct", "ps.dodge_burn_guide", "ps.composite_blend"];
3
- export declare const PHOTOSHOP_PROMPT_TEMPLATES: readonly [import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate];
2
+ export declare const PHOTOSHOP_GUIDE_PROMPT_NAMES: readonly ["ps.gradient_blend", "ps.color_correct", "ps.dodge_burn_guide", "ps.composite_blend", "ps.generative_fill", "ps.generative_remove", "ps.generative_expand"];
3
+ export declare const PHOTOSHOP_PROMPT_TEMPLATES: readonly [import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate, import("./_shared.js").PhotoshopPromptTemplate];
4
4
  export declare function registerPhotoshopPrompts(registry: PromptRegistry): void;
5
5
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAmBjE,eAAO,MAAM,4BAA4B,iGAK/B,CAAC;AAEX,eAAO,MAAM,0BAA0B,2wBAiB7B,CAAC;AAEX,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAIvE"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAyBjE,eAAO,MAAM,4BAA4B,uKAQ/B,CAAC;AAEX,eAAO,MAAM,0BAA0B,2iCAuB7B,CAAC;AAEX,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAIvE"}
@@ -15,11 +15,20 @@ import { gradientBlendTemplate } from './templates/gradient-blend.js';
15
15
  import { colorCorrectTemplate } from './templates/color-correct.js';
16
16
  import { dodgeBurnGuideTemplate } from './templates/dodge-burn-guide.js';
17
17
  import { compositeBlendTemplate } from './templates/composite-blend.js';
18
+ import { generativeFillTemplate } from './templates/generative-fill.js';
19
+ import { generativeRemoveTemplate } from './templates/generative-remove.js';
20
+ import { generativeExpandTemplate } from './templates/generative-expand.js';
21
+ import { splitCarouselTemplate } from './templates/split-carousel.js';
22
+ import { batchWatermarkTemplate } from './templates/batch-watermark.js';
23
+ import { passportPhotoTemplate } from './templates/passport-photo.js';
18
24
  export const PHOTOSHOP_GUIDE_PROMPT_NAMES = [
19
25
  'ps.gradient_blend',
20
26
  'ps.color_correct',
21
27
  'ps.dodge_burn_guide',
22
28
  'ps.composite_blend',
29
+ 'ps.generative_fill',
30
+ 'ps.generative_remove',
31
+ 'ps.generative_expand',
23
32
  ];
24
33
  export const PHOTOSHOP_PROMPT_TEMPLATES = [
25
34
  enhancePortraitTemplate,
@@ -38,6 +47,12 @@ export const PHOTOSHOP_PROMPT_TEMPLATES = [
38
47
  colorCorrectTemplate,
39
48
  compositeBlendTemplate,
40
49
  dodgeBurnGuideTemplate,
50
+ generativeFillTemplate,
51
+ generativeRemoveTemplate,
52
+ generativeExpandTemplate,
53
+ splitCarouselTemplate,
54
+ batchWatermarkTemplate,
55
+ passportPhotoTemplate,
41
56
  ];
42
57
  export function registerPhotoshopPrompts(registry) {
43
58
  for (const template of PHOTOSHOP_PROMPT_TEMPLATES) {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,mBAAmB;IACnB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,uBAAuB;IACvB,wBAAwB;IACxB,qBAAqB;IACrB,4BAA4B;IAC5B,uBAAuB;IACvB,2BAA2B;IAC3B,0BAA0B;IAC1B,sBAAsB;IACtB,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,yBAAyB;IACzB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;CACd,CAAC;AAEX,MAAM,UAAU,wBAAwB,CAAC,QAAwB;IAC/D,KAAK,MAAM,QAAQ,IAAI,0BAA0B,EAAE,CAAC;QAClD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,mBAAmB;IACnB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,uBAAuB;IACvB,wBAAwB;IACxB,qBAAqB;IACrB,4BAA4B;IAC5B,uBAAuB;IACvB,2BAA2B;IAC3B,0BAA0B;IAC1B,sBAAsB;IACtB,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,yBAAyB;IACzB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,wBAAwB;IACxB,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;CACb,CAAC;AAEX,MAAM,UAAU,wBAAwB,CAAC,QAAwB;IAC/D,KAAK,MAAM,QAAQ,IAAI,0BAA0B,EAAE,CAAC;QAClD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PhotoshopPromptTemplate } from '../_shared.js';
2
+ export declare const batchWatermarkTemplate: PhotoshopPromptTemplate;
3
+ //# sourceMappingURL=batch-watermark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-watermark.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/batch-watermark.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,uBAAuB,EAC7B,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,sBAAsB,EAAE,uBAkEpC,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { argEnum, argInt, argString, userPrompt, } from '../_shared.js';
2
+ const POSITIONS = ['bottom_right', 'bottom_left', 'top_right', 'top_left', 'center'];
3
+ export const batchWatermarkTemplate = {
4
+ name: 'ps.batch_watermark',
5
+ description: 'Apply a text or logo watermark to every image in a folder and export watermarked JPEGs. Users often say: watermark these photos, add my logo to all, toplu filigran.',
6
+ arguments: [
7
+ {
8
+ name: 'assets_dir',
9
+ description: 'Absolute path to the folder of images to watermark.',
10
+ required: true,
11
+ },
12
+ {
13
+ name: 'text',
14
+ description: 'Watermark text (e.g. "© Jane Doe 2026"). Required unless logo_path is given.',
15
+ required: false,
16
+ },
17
+ {
18
+ name: 'logo_path',
19
+ description: 'Absolute path to a logo image (transparent PNG recommended).',
20
+ required: false,
21
+ },
22
+ {
23
+ name: 'position',
24
+ description: `One of: ${POSITIONS.join(', ')}. Default bottom_right.`,
25
+ required: false,
26
+ },
27
+ {
28
+ name: 'opacity',
29
+ description: 'Watermark opacity 0-100. Default 40.',
30
+ required: false,
31
+ },
32
+ ],
33
+ handler: (args) => {
34
+ const assetsDir = argString(args, 'assets_dir', '');
35
+ const wmText = argString(args, 'text', '');
36
+ const logoPath = argString(args, 'logo_path', '');
37
+ const position = argEnum(args, 'position', POSITIONS, 'bottom_right');
38
+ const opacity = Math.max(0, Math.min(100, argInt(args, 'opacity', 40)));
39
+ const toolArgs = {
40
+ assets_dir: assetsDir,
41
+ position,
42
+ opacity,
43
+ };
44
+ let modeNote;
45
+ if (wmText) {
46
+ toolArgs.text = wmText;
47
+ modeNote = `White text watermark "${wmText}" at ${opacity}% opacity, ${position}.`;
48
+ }
49
+ else {
50
+ toolArgs.logo_path = logoPath;
51
+ modeNote = `Logo watermark from ${logoPath} at ${opacity}% opacity, ${position}, scaled to 15% of image width.`;
52
+ }
53
+ const text = [
54
+ `Goal: Watermark every image in ${assetsDir}.`,
55
+ ``,
56
+ `Plan:`,
57
+ `1. Call \`photoshop_recipe_batch_watermark\` with ${JSON.stringify(toolArgs)}.`,
58
+ ` - ${modeNote}`,
59
+ ` - The recipe opens each supported image (jpg/png/tif/webp) in turn, applies the watermark, saves a JPEG copy, and closes the original untouched. Files that fail are skipped and reported, not fatal.`,
60
+ `2. Report how many images were watermarked and list any failures from details.failed.`,
61
+ ``,
62
+ `End state: one watermarked JPEG per source image under ~/.photoshop-mcp/exports[/<chat-id>]; source files unmodified.`,
63
+ ].join('\n');
64
+ return userPrompt(`Batch watermark the images in ${assetsDir}.`, text);
65
+ },
66
+ };
67
+ //# sourceMappingURL=batch-watermark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-watermark.js","sourceRoot":"","sources":["../../../src/prompts/templates/batch-watermark.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,GAEX,MAAM,eAAe,CAAC;AAEvB,MAAM,SAAS,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AAE9F,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,sKAAsK;IACxK,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,8EAA8E;YAC3F,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,8DAA8D;YAC3E,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,WAAW,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB;YACrE,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAA4B;YACxC,UAAU,EAAE,SAAS;YACrB,QAAQ;YACR,OAAO;SACR,CAAC;QACF,IAAI,QAAgB,CAAC;QACrB,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;YACvB,QAAQ,GAAG,yBAAyB,MAAM,QAAQ,OAAO,cAAc,QAAQ,GAAG,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC9B,QAAQ,GAAG,uBAAuB,QAAQ,OAAO,OAAO,cAAc,QAAQ,iCAAiC,CAAC;QAClH,CAAC;QAED,MAAM,IAAI,GAAG;YACX,kCAAkC,SAAS,GAAG;YAC9C,EAAE;YACF,OAAO;YACP,qDAAqD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;YAChF,QAAQ,QAAQ,EAAE;YAClB,0MAA0M;YAC1M,uFAAuF;YACvF,EAAE;YACF,uHAAuH;SACxH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,UAAU,CAAC,iCAAiC,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PhotoshopPromptTemplate } from '../_shared.js';
2
+ export declare const generativeExpandTemplate: PhotoshopPromptTemplate;
3
+ //# sourceMappingURL=generative-expand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generative-expand.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/generative-expand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAI7F,eAAO,MAAM,wBAAwB,EAAE,uBA+BtC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { argEnum, argString, userPrompt } from '../_shared.js';
2
+ const DIRECTIONS = ['left', 'right', 'top', 'bottom', 'all'];
3
+ export const generativeExpandTemplate = {
4
+ name: 'ps.generative_expand',
5
+ description: 'Generative Expand beyond canvas edges. Users often say: extend canvas, outpainting, expand background, generative expand.',
6
+ arguments: [
7
+ {
8
+ name: 'prompt',
9
+ description: 'How to extend the image (default: extend the background naturally)',
10
+ required: false,
11
+ },
12
+ {
13
+ name: 'direction',
14
+ description: 'left | right | top | bottom | all (default all)',
15
+ required: false,
16
+ },
17
+ ],
18
+ handler: (args) => {
19
+ const prompt = argString(args, 'prompt', 'extend the background naturally');
20
+ const direction = argEnum(args, 'direction', DIRECTIONS, 'all');
21
+ const text = [
22
+ `Goal: Extend the canvas with Generative Expand.`,
23
+ ``,
24
+ `Plan:`,
25
+ `1. Verify \`generative_expand\` via \`photoshop_get_capabilities\`.`,
26
+ `2. Call \`photoshop_generative_expand\` with { prompt: "${prompt.replace(/"/g, '\\"')}", direction: "${direction}" }.`,
27
+ `3. Call \`photoshop_get_preview\` to confirm expanded canvas.`,
28
+ ``,
29
+ `End state: document enlarged with generated border content.`,
30
+ ].join('\n');
31
+ return userPrompt(`Generative expand (${direction})`, text);
32
+ },
33
+ };
34
+ //# sourceMappingURL=generative-expand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generative-expand.js","sourceRoot":"","sources":["../../../src/prompts/templates/generative-expand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAgC,MAAM,eAAe,CAAC;AAE7F,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAEtE,MAAM,CAAC,MAAM,wBAAwB,GAA4B;IAC/D,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,2HAA2H;IAC7H,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oEAAoE;YACjF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,iCAAiC,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG;YACX,iDAAiD;YACjD,EAAE;YACF,OAAO;YACP,qEAAqE;YACrE,2DAA2D,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,kBAAkB,SAAS,MAAM;YACvH,+DAA+D;YAC/D,EAAE;YACF,6DAA6D;SAC9D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,UAAU,CAAC,sBAAsB,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PhotoshopPromptTemplate } from '../_shared.js';
2
+ export declare const generativeFillTemplate: PhotoshopPromptTemplate;
3
+ //# sourceMappingURL=generative-fill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generative-fill.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/generative-fill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAEpF,eAAO,MAAM,sBAAsB,EAAE,uBA2BpC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { argString, userPrompt } from '../_shared.js';
2
+ export const generativeFillTemplate = {
3
+ name: 'ps.generative_fill',
4
+ description: 'Generative Fill inside the current selection with a text prompt. Users often say: add object, replace selection, generative fill, firefly fill.',
5
+ arguments: [
6
+ {
7
+ name: 'prompt',
8
+ description: 'What to generate inside the selection',
9
+ required: true,
10
+ },
11
+ ],
12
+ handler: (args) => {
13
+ const prompt = argString(args, 'prompt', 'seamless background extension');
14
+ const text = [
15
+ `Goal: Fill the current selection using Generative Fill (Firefly).`,
16
+ ``,
17
+ `Plan:`,
18
+ `1. Call \`photoshop_get_capabilities\` once if not done this session; verify \`generative_fill\`.`,
19
+ `2. Call \`photoshop_get_state\` — ensure a pixel selection exists.`,
20
+ `3. If no selection: \`photoshop_select_subject\` or \`photoshop_select_rectangle\`, then retry.`,
21
+ `4. Call \`photoshop_generative_fill\` with { prompt: "${prompt.replace(/"/g, '\\"')}" }.`,
22
+ `5. Call \`photoshop_get_preview\` to verify the result.`,
23
+ ``,
24
+ `End state: selection filled with generative content; one undo per generative layer.`,
25
+ ].join('\n');
26
+ return userPrompt(`Generative fill: ${prompt}`, text);
27
+ },
28
+ };
29
+ //# sourceMappingURL=generative-fill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generative-fill.js","sourceRoot":"","sources":["../../../src/prompts/templates/generative-fill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAgC,MAAM,eAAe,CAAC;AAEpF,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,iJAAiJ;IACnJ,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,IAAI;SACf;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,+BAA+B,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG;YACX,mEAAmE;YACnE,EAAE;YACF,OAAO;YACP,mGAAmG;YACnG,oEAAoE;YACpE,iGAAiG;YACjG,yDAAyD,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM;YAC1F,yDAAyD;YACzD,EAAE;YACF,qFAAqF;SACtF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,UAAU,CAAC,oBAAoB,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PhotoshopPromptTemplate } from '../_shared.js';
2
+ export declare const generativeRemoveTemplate: PhotoshopPromptTemplate;
3
+ //# sourceMappingURL=generative-remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generative-remove.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/generative-remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE1F,eAAO,MAAM,wBAAwB,EAAE,uBAkCtC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { argBool, argInt, userPrompt } from '../_shared.js';
2
+ export const generativeRemoveTemplate = {
3
+ name: 'ps.generative_remove',
4
+ description: 'AI Remove tool on the current selection. Users often say: remove person, erase distraction, generative remove, delete object.',
5
+ arguments: [
6
+ {
7
+ name: 'feather_px',
8
+ description: 'Edge feather 0-20 before remove (default 0)',
9
+ required: false,
10
+ },
11
+ {
12
+ name: 'auto_select_subject',
13
+ description: 'Run Select Subject when no selection (true/false, default false)',
14
+ required: false,
15
+ },
16
+ ],
17
+ handler: (args) => {
18
+ const feather = Math.max(0, Math.min(20, argInt(args, 'feather_px', 0)));
19
+ const autoSelect = argBool(args, 'auto_select_subject', false);
20
+ const text = [
21
+ `Goal: Remove selected content using generative AI (Remove tool).`,
22
+ ``,
23
+ `Plan:`,
24
+ `1. Call \`photoshop_get_capabilities\` — verify \`generative_remove\`.`,
25
+ `2. Call \`photoshop_get_state\` for selection bounds.`,
26
+ `3. Call \`photoshop_generative_remove\` with { feather_px: ${feather}, auto_select_subject: ${autoSelect} }.`,
27
+ `4. On \`generative_no_selection\`, define selection then retry.`,
28
+ `5. On \`generative_unavailable\`, fallback \`photoshop_recipe_remove_distraction\`.`,
29
+ `6. Call \`photoshop_get_preview\`.`,
30
+ ``,
31
+ `End state: distraction removed; selection cleared.`,
32
+ ].join('\n');
33
+ return userPrompt(`Generative remove (feather ${feather}px)`, text);
34
+ },
35
+ };
36
+ //# sourceMappingURL=generative-remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generative-remove.js","sourceRoot":"","sources":["../../../src/prompts/templates/generative-remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAgC,MAAM,eAAe,CAAC;AAE1F,MAAM,CAAC,MAAM,wBAAwB,GAA4B;IAC/D,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,+HAA+H;IACjI,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,kEAAkE;YAC/E,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG;YACX,kEAAkE;YAClE,EAAE;YACF,OAAO;YACP,wEAAwE;YACxE,uDAAuD;YACvD,8DAA8D,OAAO,0BAA0B,UAAU,KAAK;YAC9G,iEAAiE;YACjE,qFAAqF;YACrF,oCAAoC;YACpC,EAAE;YACF,oDAAoD;SACrD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,UAAU,CAAC,8BAA8B,OAAO,KAAK,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PhotoshopPromptTemplate } from '../_shared.js';
2
+ export declare const passportPhotoTemplate: PhotoshopPromptTemplate;
3
+ //# sourceMappingURL=passport-photo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passport-photo.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/passport-photo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAI3F,eAAO,MAAM,qBAAqB,EAAE,uBAsCnC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { argBool, argEnum, userPrompt } from '../_shared.js';
2
+ const SPECS = ['us_2x2', 'eu_35x45', 'tr_50x60'];
3
+ export const passportPhotoTemplate = {
4
+ name: 'ps.passport_photo',
5
+ description: 'Turn the active portrait into a passport/ID photo: white background, ICAO-style framing, exact official pixel size at 300 DPI, optional 10×15 cm print sheet. Users often say: passport photo, visa photo, ID photo, vesikalık, biyometrik.',
6
+ arguments: [
7
+ {
8
+ name: 'spec',
9
+ description: 'Target size: us_2x2 (US 2×2 in), eu_35x45 (EU/Schengen 35×45 mm), tr_50x60 (Türkiye 50×60 mm). Default us_2x2.',
10
+ required: false,
11
+ },
12
+ {
13
+ name: 'make_sheet',
14
+ description: 'true to also export a 10×15 cm print sheet with multiple copies. Default false.',
15
+ required: false,
16
+ },
17
+ ],
18
+ handler: (args) => {
19
+ const spec = argEnum(args, 'spec', SPECS, 'us_2x2');
20
+ const makeSheet = argBool(args, 'make_sheet', false);
21
+ const toolArgs = { spec, make_sheet: makeSheet };
22
+ const text = [
23
+ `Goal: Produce a ${spec} passport/ID photo from the active portrait.`,
24
+ ``,
25
+ `Plan:`,
26
+ `1. Call \`photoshop_get_state\` to confirm an active document with a single-person portrait.`,
27
+ `2. Call \`photoshop_recipe_passport_photo\` with ${JSON.stringify(toolArgs)}.`,
28
+ ` - The recipe duplicates the document, runs Select Subject, fills the background with white, crops around the subject (subject ≈ 72% of frame height, ~10% headroom), resizes to the exact spec at 300 DPI, and exports JPEG${makeSheet ? ' plus a 10×15 cm print sheet tiled with copies' : ''}.`,
29
+ `3. Present the output path(s). Remind the user that head-size rules are approximated from subject bounds (no face detection) and official acceptance is not guaranteed — a manual crop beforehand improves results.`,
30
+ ``,
31
+ `End state: the source document is unchanged; the passport JPEG${makeSheet ? ' and print sheet' : ''} exist under ~/.photoshop-mcp/exports[/<chat-id>].`,
32
+ ].join('\n');
33
+ return userPrompt(`Make a ${spec} passport photo from the active document.`, text);
34
+ },
35
+ };
36
+ //# sourceMappingURL=passport-photo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passport-photo.js","sourceRoot":"","sources":["../../../src/prompts/templates/passport-photo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAgC,MAAM,eAAe,CAAC;AAE3F,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC5D,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,6OAA6O;IAC/O,SAAS,EAAE;QACT;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EACT,gHAAgH;YAClH,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EACT,iFAAiF;YACnF,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAErD,MAAM,QAAQ,GAA4B,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAE1E,MAAM,IAAI,GAAG;YACX,mBAAmB,IAAI,8CAA8C;YACrE,EAAE;YACF,OAAO;YACP,8FAA8F;YAC9F,oDAAoD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;YAC/E,iOAAiO,SAAS,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,EAAE,GAAG;YACrS,qNAAqN;YACrN,EAAE;YACF,iEAAiE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,oDAAoD;SACzJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,UAAU,CAAC,UAAU,IAAI,2CAA2C,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-distraction.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/remove-distraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,yBAAyB,EAAE,uBA+BvC,CAAC"}
1
+ {"version":3,"file":"remove-distraction.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/remove-distraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,yBAAyB,EAAE,uBA8BvC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { argInt, userPrompt, } from '../_shared.js';
2
2
  export const removeDistractionTemplate = {
3
3
  name: 'ps.remove_distraction',
4
- description: 'One-shot distraction removal via content-aware fill on the current selection. Users often say: remove that person, erase distraction, content aware remove, clone out object. Generative remove is not scriptable — content-aware only.',
4
+ description: 'One-shot distraction removal: generative AI remove when available, else content-aware fill. Users often say: remove that person, erase distraction, content aware remove, clone out object.',
5
5
  arguments: [
6
6
  {
7
7
  name: 'feather_px',
@@ -17,11 +17,10 @@ export const removeDistractionTemplate = {
17
17
  `Plan:`,
18
18
  `1. Call \`photoshop_get_state\` to confirm an active document and check whether a pixel selection exists.`,
19
19
  `2. If no selection: call \`photoshop_select_rectangle\`, \`photoshop_select_subject\`, or ask the user to define the region to remove.`,
20
- `3. Call \`photoshop_recipe_remove_distraction\` with { feather_px: ${feather} }.`,
21
- ` - The recipe feathers the selection (if ${feather} > 0), runs content-aware fill, and deselects.`,
20
+ `3. Call \`photoshop_recipe_remove_distraction\` with { feather_px: ${feather} } (uses generative remove when capable).`,
21
+ ` - Fallback: content-aware fill when generative is unavailable.`,
22
22
  `4. If the result returns \`selection_required\`, go back to step 2.`,
23
- `5. Call \`photoshop_get_preview\` once. If artifacts remain, ask the user to refine manually — generative remove is not available via ExtendScript.`,
24
- `6. For generative-remove requests, explain the limitation and offer content-aware fill or manual clone/heal.`,
23
+ `5. Call \`photoshop_get_preview\` once. For best results prefer \`ps.generative_remove\` or \`photoshop_generative_remove\` when capabilities allow.`,
25
24
  ``,
26
25
  `End state: selected pixels are inpainted; selection cleared; one undo reverts the fill.`,
27
26
  ].join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"remove-distraction.js","sourceRoot":"","sources":["../../../src/prompts/templates/remove-distraction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,UAAU,GAEX,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,yBAAyB,GAA4B;IAChE,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,yOAAyO;IAC3O,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,IAAI,GAAG;YACX,8FAA8F;YAC9F,EAAE;YACF,OAAO;YACP,2GAA2G;YAC3G,wIAAwI;YACxI,sEAAsE,OAAO,KAAK;YAClF,8CAA8C,OAAO,gDAAgD;YACrG,qEAAqE;YACrE,qJAAqJ;YACrJ,8GAA8G;YAC9G,EAAE;YACF,yFAAyF;SAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,UAAU,CAAC,+BAA+B,OAAO,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"remove-distraction.js","sourceRoot":"","sources":["../../../src/prompts/templates/remove-distraction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,UAAU,GAEX,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,yBAAyB,GAA4B;IAChE,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,6LAA6L;IAC/L,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,MAAM,IAAI,GAAG;YACX,8FAA8F;YAC9F,EAAE;YACF,OAAO;YACP,2GAA2G;YAC3G,wIAAwI;YACxI,sEAAsE,OAAO,2CAA2C;YACxH,mEAAmE;YACnE,qEAAqE;YACrE,sJAAsJ;YACtJ,EAAE;YACF,yFAAyF;SAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,UAAU,CAAC,+BAA+B,OAAO,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type PhotoshopPromptTemplate } from '../_shared.js';
2
+ export declare const splitCarouselTemplate: PhotoshopPromptTemplate;
3
+ //# sourceMappingURL=split-carousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-carousel.d.ts","sourceRoot":"","sources":["../../../src/prompts/templates/split-carousel.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,uBAAuB,EAC7B,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,qBAAqB,EAAE,uBAmDnC,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { argEnum, argInt, argString, userPrompt, } from '../_shared.js';
2
+ export const splitCarouselTemplate = {
3
+ name: 'ps.split_carousel',
4
+ description: 'Split the active wide document into N equal vertical slices exported as sequentially numbered files for a seamless Instagram/TikTok carousel. Users often say: carousel, seamless carousel, swipe, split panorama, slayt.',
5
+ arguments: [
6
+ {
7
+ name: 'slides',
8
+ description: 'Number of slides to split into (2-10).',
9
+ required: true,
10
+ },
11
+ {
12
+ name: 'size',
13
+ description: 'Optional final slide size as WxH (e.g. 1080x1350 for Instagram portrait). Omit to keep native slice dimensions.',
14
+ required: false,
15
+ },
16
+ {
17
+ name: 'format',
18
+ description: 'jpg or png. Default jpg.',
19
+ required: false,
20
+ },
21
+ ],
22
+ handler: (args) => {
23
+ const slides = Math.max(2, Math.min(10, argInt(args, 'slides', 3)));
24
+ const format = argEnum(args, 'format', ['jpg', 'png'], 'jpg');
25
+ const sizeRaw = argString(args, 'size', '');
26
+ const sizeMatch = sizeRaw.match(/(\d{2,5})\s*x\s*(\d{2,5})/i);
27
+ const toolArgs = { slides, format };
28
+ let sizeNote = 'Each slice keeps its native dimensions.';
29
+ if (sizeMatch) {
30
+ toolArgs.slide_width = Number(sizeMatch[1]);
31
+ toolArgs.slide_height = Number(sizeMatch[2]);
32
+ sizeNote = `Each slice is center-cropped/resized to ${sizeMatch[1]}×${sizeMatch[2]} px.`;
33
+ }
34
+ const text = [
35
+ `Goal: Turn the active wide document into a seamless ${slides}-slide carousel.`,
36
+ ``,
37
+ `Plan:`,
38
+ `1. Call \`photoshop_get_state\` to confirm an active document and note its dimensions (width must be >= ${slides} px).`,
39
+ `2. Call \`photoshop_recipe_split_carousel\` with ${JSON.stringify(toolArgs)}.`,
40
+ ` - The recipe duplicates the document per slide, crops slice i to [i·W/${slides}, (i+1)·W/${slides}], exports sequentially numbered files (…-01, …-02, …), and closes the duplicates.`,
41
+ ` - ${sizeNote}`,
42
+ `3. Present the output paths in slide order — that is the exact order to upload in the Instagram carousel picker.`,
43
+ ``,
44
+ `End state: the source document is unchanged; ${slides} files exist under ~/.photoshop-mcp/exports[/<chat-id>].`,
45
+ ].join('\n');
46
+ return userPrompt(`Split the active document into a ${slides}-slide seamless carousel.`, text);
47
+ },
48
+ };
49
+ //# sourceMappingURL=split-carousel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-carousel.js","sourceRoot":"","sources":["../../../src/prompts/templates/split-carousel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,GAEX,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC5D,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,2NAA2N;IAC7N,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EACT,iHAAiH;YACnH,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAU,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAA4B,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC7D,IAAI,QAAQ,GAAG,yCAAyC,CAAC;QACzD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,QAAQ,GAAG,2CAA2C,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,CAAC;QAED,MAAM,IAAI,GAAG;YACX,uDAAuD,MAAM,kBAAkB;YAC/E,EAAE;YACF,OAAO;YACP,2GAA2G,MAAM,OAAO;YACxH,oDAAoD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;YAC/E,4EAA4E,MAAM,aAAa,MAAM,oFAAoF;YACzL,QAAQ,QAAQ,EAAE;YAClB,kHAAkH;YAClH,EAAE;YACF,gDAAgD,MAAM,0DAA0D;SACjH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,UAAU,CAAC,oCAAoC,MAAM,2BAA2B,EAAE,IAAI,CAAC,CAAC;IACjG,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ToolResult } from '../../core/tool-registry.js';
2
+ import { ExtendScriptSnippets } from '../../api/extendscript.js';
3
+ import type { PhotoshopConnection } from '../../platform/connection.js';
4
+ /** Generative cloud jobs may exceed the default 30s script timeout. */
5
+ export declare const GENERATIVE_SCRIPT_TIMEOUT_MS = 120000;
6
+ export declare function runGenerativeSnippet(connection: PhotoshopConnection, script: string): Promise<unknown>;
7
+ export declare function requireGenerativeCapability(connection: PhotoshopConnection, feature: 'generative_fill' | 'generative_upscale'): Promise<ToolResult | null>;
8
+ export declare function parseGenerativeResult(raw: unknown): ToolResult;
9
+ export declare function clampGenerativeScale(value: unknown): 2 | 4;
10
+ export declare const GENERATIVE_EXPAND_DIRECTIONS: readonly ["left", "right", "top", "bottom", "all"];
11
+ export type GenerativeExpandDirection = (typeof GENERATIVE_EXPAND_DIRECTIONS)[number];
12
+ export declare function normalizeExpandDirection(value: unknown): GenerativeExpandDirection;
13
+ export { ExtendScriptSnippets };
14
+ //# sourceMappingURL=_shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../../src/tools/generative/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AASxE,uEAAuE;AACvE,eAAO,MAAM,4BAA4B,SAAU,CAAC;AAEpD,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,mBAAmB,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE,iBAAiB,GAAG,oBAAoB,GAChD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAY5B;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA0C9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAG1D;AAED,eAAO,MAAM,4BAA4B,oDAM/B,CAAC;AAEX,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CAKlF;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { ExtendScriptSnippets } from '../../api/extendscript.js';
2
+ import { getPhotoshopCapabilities } from '../../platform/capabilities.js';
3
+ import { PhotoshopAPIFactory } from '../../api/photoshop-api.js';
4
+ import { atomicFailure, atomicFailureFromError, atomicSuccess, parseSnippetResult, } from '../atomic-shared.js';
5
+ /** Generative cloud jobs may exceed the default 30s script timeout. */
6
+ export const GENERATIVE_SCRIPT_TIMEOUT_MS = 120_000;
7
+ export async function runGenerativeSnippet(connection, script) {
8
+ const apiFactory = new PhotoshopAPIFactory(connection);
9
+ const api = await apiFactory.createAPI();
10
+ return api.executeScript(script, GENERATIVE_SCRIPT_TIMEOUT_MS);
11
+ }
12
+ export async function requireGenerativeCapability(connection, feature) {
13
+ const version = await connection.getVersion();
14
+ const caps = getPhotoshopCapabilities(version);
15
+ if (!caps.features[feature]) {
16
+ return atomicFailure({
17
+ ok: false,
18
+ code: 'version_unsupported',
19
+ message: `Photoshop ${version} does not expose ${feature}`,
20
+ suggested_next_tool: 'photoshop_get_capabilities',
21
+ });
22
+ }
23
+ return null;
24
+ }
25
+ export function parseGenerativeResult(raw) {
26
+ const parsed = parseSnippetResult(raw);
27
+ if (!parsed) {
28
+ return atomicFailureFromError(new Error(`Unparseable generative result: ${String(raw)}`));
29
+ }
30
+ if (parsed.ok === false) {
31
+ const rawCode = typeof parsed.code === 'string' ? parsed.code : 'generative_unavailable';
32
+ const allowed = [
33
+ 'generative_credits_exhausted',
34
+ 'generative_no_selection',
35
+ 'generative_timeout',
36
+ 'generative_unavailable',
37
+ 'version_unsupported',
38
+ ];
39
+ const code = allowed.includes(rawCode)
40
+ ? rawCode
41
+ : 'generative_unavailable';
42
+ const message = typeof parsed.message === 'string' ? parsed.message : 'Generative action failed';
43
+ return atomicFailure({
44
+ ok: false,
45
+ code,
46
+ message,
47
+ suggested_next_tool: code === 'generative_no_selection'
48
+ ? 'photoshop_select_rectangle'
49
+ : 'photoshop_get_capabilities',
50
+ });
51
+ }
52
+ const summary = typeof parsed.summary === 'string' ? parsed.summary : 'Generative action completed';
53
+ const nextTool = typeof parsed.next_suggested_tool === 'string'
54
+ ? parsed.next_suggested_tool
55
+ : 'photoshop_get_preview';
56
+ const details = parsed.details && typeof parsed.details === 'object' && !Array.isArray(parsed.details)
57
+ ? parsed.details
58
+ : undefined;
59
+ return atomicSuccess(summary, details, nextTool);
60
+ }
61
+ export function clampGenerativeScale(value) {
62
+ const n = typeof value === 'number' ? value : Number(value);
63
+ return n >= 4 ? 4 : 2;
64
+ }
65
+ export const GENERATIVE_EXPAND_DIRECTIONS = [
66
+ 'left',
67
+ 'right',
68
+ 'top',
69
+ 'bottom',
70
+ 'all',
71
+ ];
72
+ export function normalizeExpandDirection(value) {
73
+ const raw = typeof value === 'string' ? value.trim().toLowerCase() : 'all';
74
+ return GENERATIVE_EXPAND_DIRECTIONS.includes(raw)
75
+ ? raw
76
+ : 'all';
77
+ }
78
+ export { ExtendScriptSnippets };
79
+ //# sourceMappingURL=_shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/tools/generative/_shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Firefly generative MCP tools (ExtendScript lane).
3
+ * See docs/plans/2026-07-03-1149-photoshop-ai-features/pai-phase-2.0-generative-core.md.
4
+ */
5
+ import type { ToolDefinition } from '../core/tool-registry.js';
6
+ import type { PhotoshopConnection } from '../platform/connection.js';
7
+ export declare function createGenerativeTools(connection: PhotoshopConnection): ToolDefinition[];
8
+ //# sourceMappingURL=generative-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generative-tools.d.ts","sourceRoot":"","sources":["../../src/tools/generative-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAgBrE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAkJvF"}