@alisaitteke/photoshop-mcp 1.7.28 → 1.7.29
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/AGENTS.md +1 -0
- package/README.de.md +1 -0
- package/README.es.md +1 -0
- package/README.ja.md +1 -0
- package/README.tr.md +1 -0
- package/README.zh-CN.md +1 -0
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +5 -1
- package/dist/core/server.js.map +1 -1
- package/dist/feedback/nudge.d.ts +5 -1
- package/dist/feedback/nudge.d.ts.map +1 -1
- package/dist/feedback/nudge.js +17 -6
- package/dist/feedback/nudge.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/prompts/instructions.d.ts.map +1 -1
- package/dist/prompts/instructions.js +5 -0
- package/dist/prompts/instructions.js.map +1 -1
- package/dist/update/check.d.ts +64 -0
- package/dist/update/check.d.ts.map +1 -0
- package/dist/update/check.js +217 -0
- package/dist/update/check.js.map +1 -0
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -86,6 +86,7 @@ Examples: [examples/cursor-config.json](examples/cursor-config.json), [examples/
|
|
|
86
86
|
| `PHOTOSHOP_SCRIPT_TIMEOUT` | Default ExtendScript timeout in ms (default `30000`, max `600000`) |
|
|
87
87
|
| `PSMCP_UI_TOKEN` | Pin standalone UI API token (see README) |
|
|
88
88
|
| `PSMCP_FEEDBACK` | Set `0` to disable the product-feedback ping question (on by default) |
|
|
89
|
+
| `PSMCP_UPDATE_CHECK` | Set `0` to disable the daily npm version check and the `UPDATE_AVAILABLE` ping notice (on by default; also off with `NO_UPDATE_NOTIFIER` or `CI`) |
|
|
89
90
|
|
|
90
91
|
## Troubleshooting (common agent blockers)
|
|
91
92
|
|
package/README.de.md
CHANGED
|
@@ -644,6 +644,7 @@ Zur Claude Desktop-Konfiguration hinzufügen (`~/Library/Application Support/Cla
|
|
|
644
644
|
- `PHOTOSHOP_SCRIPT_TIMEOUT`: Standard-ExtendScript-Timeout in Millisekunden (Standard `30000`, max. `600000`)
|
|
645
645
|
- `LOG_LEVEL`: Protokollierungsstufe (0=DEBUG, 1=INFO, 2=WARN, 3=ERROR)
|
|
646
646
|
- `PSMCP_FEEDBACK`: `0` / `false` / `no` deaktiviert die Produkt-Feedback-Ping-Frage (standardmäßig an)
|
|
647
|
+
- `PSMCP_UPDATE_CHECK`: `0` / `false` / `no` deaktiviert die tägliche npm-Versionsprüfung und den Update-Hinweis beim Ping (standardmäßig an)
|
|
647
648
|
- `ANALYTICS_DISABLED`: Auf `1` oder `true` setzen, um anonyme Nutzungsanalysen vollständig zu deaktivieren
|
|
648
649
|
- `POSTHOG_DISABLED`: Veralteter Alias für `ANALYTICS_DISABLED`
|
|
649
650
|
- `RYBBIT_API_KEY`: (Optional) Rybbit-Ingest-Schlüssel — umgeht Bot-Erkennung für Server-Events
|
package/README.es.md
CHANGED
|
@@ -599,6 +599,7 @@ Añada a su configuración de Claude Desktop (`~/Library/Application Support/Cla
|
|
|
599
599
|
- `PHOTOSHOP_SCRIPT_TIMEOUT`: Timeout ExtendScript por defecto en milisegundos (por defecto `30000`, máx. `600000`)
|
|
600
600
|
- `LOG_LEVEL`: Nivel de registro (0=DEBUG, 1=INFO, 2=WARN, 3=ERROR)
|
|
601
601
|
- `PSMCP_FEEDBACK`: Establezca `0` / `false` / `no` para desactivar la pregunta de feedback en ping (activada por defecto)
|
|
602
|
+
- `PSMCP_UPDATE_CHECK`: Establezca `0` / `false` / `no` para desactivar la comprobación diaria de versión en npm y el aviso de actualización en ping (activada por defecto)
|
|
602
603
|
- `ANALYTICS_DISABLED`: Establezca en `1` o `true` para deshabilitar completamente el análisis de uso anónimo
|
|
603
604
|
- `POSTHOG_DISABLED`: Alias heredado de `ANALYTICS_DISABLED`
|
|
604
605
|
- `RYBBIT_API_KEY`: (Opcional) Clave de ingesta de Rybbit — omite la detección de bots en eventos del servidor
|
package/README.ja.md
CHANGED
|
@@ -601,6 +601,7 @@ Claude Desktopの設定に追加してください(macOSは`~/Library/Applicat
|
|
|
601
601
|
- `PHOTOSHOP_SCRIPT_TIMEOUT`:ExtendScript のデフォルトタイムアウト(ミリ秒、既定 `30000`、最大 `600000`)
|
|
602
602
|
- `LOG_LEVEL`:ログレベル(0=DEBUG、1=INFO、2=WARN、3=ERROR)
|
|
603
603
|
- `PSMCP_FEEDBACK`:製品フィードバック ping の質問を無効にするには `0` / `false` / `no`(既定はオン)
|
|
604
|
+
- `PSMCP_UPDATE_CHECK`:1 日 1 回の npm バージョン確認と ping の更新通知を無効にするには `0` / `false` / `no`(既定はオン)
|
|
604
605
|
- `ANALYTICS_DISABLED`:`1`または`true`に設定して匿名使用状況の解析を完全に無効化
|
|
605
606
|
- `POSTHOG_DISABLED`:`ANALYTICS_DISABLED`の旧エイリアス
|
|
606
607
|
- `RYBBIT_API_KEY`:(オプション)Rybbit ingest APIキー — サーバーイベントのボット検出をスキップ
|
package/README.tr.md
CHANGED
|
@@ -686,6 +686,7 @@ const q = query({
|
|
|
686
686
|
- `PHOTOSHOP_SCRIPT_TIMEOUT`: Varsayılan ExtendScript zaman aşımı (ms; varsayılan `30000`, en fazla `600000`)
|
|
687
687
|
- `LOG_LEVEL`: Günlük kaydı düzeyi (0=DEBUG, 1=INFO, 2=WARN, 3=ERROR)
|
|
688
688
|
- `PSMCP_FEEDBACK`: Ürün-geri bildirim ping sorusunu kapatmak için `0` / `false` / `no` (varsayılan açık)
|
|
689
|
+
- `PSMCP_UPDATE_CHECK`: Günlük npm sürüm kontrolünü ve ping'deki yeni sürüm bildirimini kapatmak için `0` / `false` / `no` (varsayılan açık)
|
|
689
690
|
- `ANALYTICS_DISABLED`: Anonim kullanım analizlerini tamamen devre dışı bırakmak için `1` veya `true`
|
|
690
691
|
olarak ayarlayın
|
|
691
692
|
- `POSTHOG_DISABLED`: `ANALYTICS_DISABLED` için eski takma ad
|
package/README.zh-CN.md
CHANGED
|
@@ -596,6 +596,7 @@ npx @alisaitteke/photoshop-mcp
|
|
|
596
596
|
- `PHOTOSHOP_SCRIPT_TIMEOUT`:ExtendScript 默认超时(毫秒,默认 `30000`,最大 `600000`)
|
|
597
597
|
- `LOG_LEVEL`:日志级别(0=DEBUG,1=INFO,2=WARN,3=ERROR)
|
|
598
598
|
- `PSMCP_FEEDBACK`:设为 `0` / `false` / `no` 可关闭 ping 产品反馈提问(默认开启)
|
|
599
|
+
- `PSMCP_UPDATE_CHECK`:设为 `0` / `false` / `no` 可关闭每日 npm 版本检查及 ping 更新提示(默认开启)
|
|
599
600
|
- `ANALYTICS_DISABLED`:设置为 `1` 或 `true` 可完全禁用匿名使用分析
|
|
600
601
|
- `POSTHOG_DISABLED`:`ANALYTICS_DISABLED` 的旧版别名
|
|
601
602
|
- `RYBBIT_API_KEY`:(可选)Rybbit 采集 API 密钥 — 跳过服务端事件的机器人检测
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,yBAAyB;IAyB9C,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,aAAa;IAgGrB,OAAO,CAAC,aAAa;YA2CP,aAAa;YAOb,UAAU;IAaxB,oBAAoB,IAAI,OAAO;IAI/B,YAAY,IAAI,MAAM;IAIhB,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAYlD,KAAK;IAgBL,IAAI;CAIX"}
|
package/dist/core/server.js
CHANGED
|
@@ -38,6 +38,7 @@ import { createArtboardTools } from '../tools/artboard-tools.js';
|
|
|
38
38
|
import { ensureUxpBridgeServer } from '../platform/uxp-bridge-server.js';
|
|
39
39
|
import { submitFeedbackFromArgs } from '../feedback/nudge.js';
|
|
40
40
|
import { probePhotoshopEngine } from './ping-engine.js';
|
|
41
|
+
import { refreshUpdateCheck } from '../update/check.js';
|
|
41
42
|
export class PhotoshopMCPServer {
|
|
42
43
|
server;
|
|
43
44
|
logger;
|
|
@@ -80,7 +81,7 @@ export class PhotoshopMCPServer {
|
|
|
80
81
|
description: 'Verify that the Photoshop scripting engine can run a script.\n\n' +
|
|
81
82
|
'Use when: once at session start, and after extendscript_timeout until this call succeeds.\n' +
|
|
82
83
|
'Do NOT use when: on every tool call — after a successful ping, use photoshop_get_state. Do not call get_state or get_layers while this ping is still failing.\n\n' +
|
|
83
|
-
'Returns: "Successfully connected to Photoshop" only after a short script runs inside Photoshop. While a previous script is still running, returns extendscript_timeout — retry photoshop_ping. If that timeout happens while the OS drive has under 10 GB free, returns scratch_disk_full instead: free space on the scratch disk and restart Photoshop. If Photoshop is not installed or not running, returns a failure string and does not launch the app. May append a FEEDBACK_NUDGE block 15 minutes after the first successful ping, then at most once per 7 days (disabled with PSMCP_FEEDBACK=0).\n' +
|
|
84
|
+
'Returns: "Successfully connected to Photoshop" only after a short script runs inside Photoshop. While a previous script is still running, returns extendscript_timeout — retry photoshop_ping. If that timeout happens while the OS drive has under 10 GB free, returns scratch_disk_full instead: free space on the scratch disk and restart Photoshop. If Photoshop is not installed or not running, returns a failure string and does not launch the app. May append a FEEDBACK_NUDGE block 15 minutes after the first successful ping, then at most once per 7 days (disabled with PSMCP_FEEDBACK=0). May append an UPDATE_AVAILABLE block when a newer photoshop-mcp release is on npm, at most once per 7 days (disabled with PSMCP_UPDATE_CHECK=0). A single ping carries at most one of these blocks.\n' +
|
|
84
85
|
'Preconditions: none. Side effects: may trigger Photoshop detection. Does not launch Photoshop.',
|
|
85
86
|
inputSchema: { type: 'object', properties: {} },
|
|
86
87
|
},
|
|
@@ -196,6 +197,9 @@ export class PhotoshopMCPServer {
|
|
|
196
197
|
});
|
|
197
198
|
}
|
|
198
199
|
async pingPhotoshop() {
|
|
200
|
+
// Long-lived hosts (Claude Desktop) keep one server across chats; refresh the cached
|
|
201
|
+
// release here too (at most once per 24h), racing the probe so this ping can use it.
|
|
202
|
+
void refreshUpdateCheck();
|
|
199
203
|
return probePhotoshopEngine(this.session.getConnection());
|
|
200
204
|
}
|
|
201
205
|
async getVersion() {
|
package/dist/core/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"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"}
|
package/dist/feedback/nudge.d.ts
CHANGED
|
@@ -32,7 +32,11 @@ export declare function recordFeedback(choice: FeedbackChoice, suggestion?: stri
|
|
|
32
32
|
has_suggestion: boolean;
|
|
33
33
|
};
|
|
34
34
|
export declare function buildFeedbackNudgeBlock(): string;
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* First text block is always the connection string so existing ping clients keep working.
|
|
37
|
+
* A connected ping carries at most one extra block: UPDATE_AVAILABLE wins, and a due
|
|
38
|
+
* FEEDBACK_NUDGE waits for a later ping (its cooldown is not started).
|
|
39
|
+
*/
|
|
36
40
|
export declare function buildPingToolResult(connected: boolean, now?: number): CallToolResult;
|
|
37
41
|
export declare function submitFeedbackFromArgs(args: Record<string, unknown>): CallToolResult;
|
|
38
42
|
//# sourceMappingURL=nudge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nudge.d.ts","sourceRoot":"","sources":["../../src/feedback/nudge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"nudge.d.ts","sourceRoot":"","sources":["../../src/feedback/nudge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AASzE,eAAO,MAAM,0BAA0B,QAA0B,CAAC;AAClE,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AACxD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AACnD,eAAO,MAAM,0BAA0B,4GACoE,CAAC;AAC5G,eAAO,MAAM,0BAA0B,wNACgG,CAAC;AACxI,eAAO,MAAM,4BAA4B,yWAC0T,CAAC;AACpW,eAAO,MAAM,mBAAmB,wCAAwC,CAAC;AACzE,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AASD,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE5E;AAOD,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEpF;AAkBD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKxF;AAMD,wBAAgB,kBAAkB,CAAC,GAAG,SAAa,GAAG,OAAO,CAY5D;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,GAAG,SAAa,GAAG,IAAI,CAO5D;AAED,wBAAgB,sBAAsB,CAAC,GAAG,SAAa,GAAG,IAAI,CAQ7D;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CA0CrE;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAmBhD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,SAAa,GAAG,cAAc,CAsBxF;AAOD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CA0BpF"}
|
package/dist/feedback/nudge.js
CHANGED
|
@@ -6,6 +6,7 @@ import { hasAnalyticsKey } from '../analytics/config.js';
|
|
|
6
6
|
import { isAnalyticsEnabled } from '../analytics/identity.js';
|
|
7
7
|
import { envelopeToToolResult } from '../errors/envelope.js';
|
|
8
8
|
import { getPhotoshopMcpHomeDir, PHOTOSHOP_MCP_SURFACE_ENV } from '../lib/export-paths.js';
|
|
9
|
+
import { takeUpdateNoticeBlock } from '../update/check.js';
|
|
9
10
|
export const FEEDBACK_NUDGE_COOLDOWN_MS = 7 * 24 * 60 * 60 * 1000;
|
|
10
11
|
export const FEEDBACK_NUDGE_MIN_AGE_MS = 15 * 60 * 1000;
|
|
11
12
|
export const FEEDBACK_SUGGESTION_MAX_CHARS = 200;
|
|
@@ -157,7 +158,11 @@ export function buildFeedbackNudgeBlock() {
|
|
|
157
158
|
'- suggestion: string (when choice is yes)',
|
|
158
159
|
].join('\n');
|
|
159
160
|
}
|
|
160
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* First text block is always the connection string so existing ping clients keep working.
|
|
163
|
+
* A connected ping carries at most one extra block: UPDATE_AVAILABLE wins, and a due
|
|
164
|
+
* FEEDBACK_NUDGE waits for a later ping (its cooldown is not started).
|
|
165
|
+
*/
|
|
161
166
|
export function buildPingToolResult(connected, now = Date.now()) {
|
|
162
167
|
const content = [
|
|
163
168
|
{
|
|
@@ -165,12 +170,18 @@ export function buildPingToolResult(connected, now = Date.now()) {
|
|
|
165
170
|
text: connected ? PING_CONNECTED_TEXT : PING_FAILED_TEXT,
|
|
166
171
|
},
|
|
167
172
|
];
|
|
168
|
-
if (connected
|
|
173
|
+
if (!connected)
|
|
174
|
+
return { content };
|
|
175
|
+
const feedbackEnabled = isFeedbackNudgeEnabled();
|
|
176
|
+
if (feedbackEnabled)
|
|
169
177
|
markFeedbackFirstSeen(now);
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
178
|
+
const updateBlock = takeUpdateNoticeBlock(now);
|
|
179
|
+
if (updateBlock) {
|
|
180
|
+
content.push({ type: 'text', text: updateBlock });
|
|
181
|
+
}
|
|
182
|
+
else if (feedbackEnabled && isFeedbackNudgeDue(now)) {
|
|
183
|
+
markFeedbackNudgeShown(now);
|
|
184
|
+
content.push({ type: 'text', text: buildFeedbackNudgeBlock() });
|
|
174
185
|
}
|
|
175
186
|
return { content };
|
|
176
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nudge.js","sourceRoot":"","sources":["../../src/feedback/nudge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"nudge.js","sourceRoot":"","sources":["../../src/feedback/nudge.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { capture, endMcpAnalyticsSession, ensureAnalyticsIdentity, getAppVersion, identifyAnalyticsPerson, onMcpClientDisconnected, shutdownAnalytics, startLogicalMcpAnalyticsSession, } from './analytics/index.js';
|
|
3
3
|
import { PhotoshopMCPServer } from './core/server.js';
|
|
4
|
+
import { refreshUpdateCheck } from './update/check.js';
|
|
4
5
|
import { Logger } from './utils/logger.js';
|
|
5
6
|
const logger = new Logger('Main');
|
|
6
7
|
let mcpServer = null;
|
|
@@ -9,6 +10,8 @@ async function main() {
|
|
|
9
10
|
try {
|
|
10
11
|
logger.info('Starting Photoshop MCP Server...');
|
|
11
12
|
ensureAnalyticsIdentity();
|
|
13
|
+
// Background npm lookup (cached 24h, 3s timeout). photoshop_ping reads the cache only.
|
|
14
|
+
void refreshUpdateCheck();
|
|
12
15
|
mcpServer = new PhotoshopMCPServer({ serverVersion: getAppVersion() });
|
|
13
16
|
await mcpServer.start();
|
|
14
17
|
const photoshopVersion = await mcpServer.getPhotoshopVersion();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/prompts/instructions.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,0BAA0B,
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/prompts/instructions.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QA8M/B,CAAC;AAET,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD"}
|
|
@@ -23,6 +23,11 @@ HARD RULE — product feedback (FEEDBACK_NUDGE)
|
|
|
23
23
|
6. Then immediately continue the user's original request. Do not end the turn on this question.
|
|
24
24
|
- If ping has no \`FEEDBACK_NUDGE\`, never invent this question.
|
|
25
25
|
|
|
26
|
+
Update notice (UPDATE_AVAILABLE)
|
|
27
|
+
- If \`photoshop_ping\` returns an \`UPDATE_AVAILABLE\` block, tell the user once, in one short sentence in their language, with the update step from the block.
|
|
28
|
+
- Do not ask a question, do not run the update step yourself, and do not end the turn. Continue the user's request.
|
|
29
|
+
- If ping has no \`UPDATE_AVAILABLE\`, do not bring up updates.
|
|
30
|
+
|
|
26
31
|
Session bootstrap
|
|
27
32
|
- Call \`photoshop_ping\` exactly once at the start of a session to verify the
|
|
28
33
|
connection. Do not repeat it on every turn.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/prompts/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;OAanC,4BAA4B;;yCAEM,0BAA0B,eAAe,0BAA0B
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/prompts/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;OAanC,4BAA4B;;yCAEM,0BAA0B,eAAe,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+L3G,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,UAAU,0BAA0B;IACxC,OAAO,0BAA0B,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export declare const UPDATE_CHECK_ENV = "PSMCP_UPDATE_CHECK";
|
|
2
|
+
export declare const INSTALL_CHANNEL_ENV = "PSMCP_INSTALL_CHANNEL";
|
|
3
|
+
export declare const UPDATE_NOTICE_MARKER = "UPDATE_AVAILABLE";
|
|
4
|
+
export declare const NPM_PACKAGE_NAME = "@alisaitteke/photoshop-mcp";
|
|
5
|
+
/** dist-tags only: ~20 bytes instead of the full packument. */
|
|
6
|
+
export declare const UPDATE_CHECK_URL = "https://registry.npmjs.org/-/package/@alisaitteke%2fphotoshop-mcp/dist-tags";
|
|
7
|
+
export declare const UPDATE_CHECK_INTERVAL_MS: number;
|
|
8
|
+
export declare const UPDATE_CHECK_TIMEOUT_MS = 3000;
|
|
9
|
+
export declare const UPDATE_NOTICE_COOLDOWN_MS: number;
|
|
10
|
+
export type InstallChannel = 'npx' | 'mcpb' | 'npm' | 'source';
|
|
11
|
+
export interface UpdateCheckStore {
|
|
12
|
+
/** Last successful registry lookup. Failed lookups are not stamped, so the next start retries. */
|
|
13
|
+
checkedAt?: number;
|
|
14
|
+
latestVersion?: string;
|
|
15
|
+
notifiedAt?: number;
|
|
16
|
+
notifiedVersion?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface UpdateNotice {
|
|
19
|
+
currentVersion: string;
|
|
20
|
+
latestVersion: string;
|
|
21
|
+
channel: InstallChannel;
|
|
22
|
+
}
|
|
23
|
+
type FetchLike = (url: string, init?: RequestInit) => Promise<Response>;
|
|
24
|
+
/**
|
|
25
|
+
* On by default. Off with `PSMCP_UPDATE_CHECK=0`, any `NO_UPDATE_NOTIFIER`, a truthy `CI`,
|
|
26
|
+
* and when the standalone UI spawns this server (its agent is not the user's host).
|
|
27
|
+
*/
|
|
28
|
+
export declare function isUpdateCheckEnabled(env?: NodeJS.ProcessEnv): boolean;
|
|
29
|
+
interface ParsedVersion {
|
|
30
|
+
major: number;
|
|
31
|
+
minor: number;
|
|
32
|
+
patch: number;
|
|
33
|
+
prerelease: string | null;
|
|
34
|
+
}
|
|
35
|
+
export declare function parseVersion(raw: string): ParsedVersion | null;
|
|
36
|
+
/** True when `latest` is a stable release newer than `current`. Unknown versions never notify. */
|
|
37
|
+
export declare function isNewerStableVersion(latest: string, current: string): boolean;
|
|
38
|
+
/** How this copy was installed, so the notice can give one correct update step. */
|
|
39
|
+
export declare function detectInstallChannel(env?: NodeJS.ProcessEnv, modulePath?: string): InstallChannel;
|
|
40
|
+
export declare function buildUpdateInstruction(channel: InstallChannel, currentVersion: string): string;
|
|
41
|
+
/** Latest dist-tag from npm, or undefined on any failure (offline, timeout, bad payload). */
|
|
42
|
+
export declare function fetchLatestVersion(fetchImpl?: FetchLike, timeoutMs?: number): Promise<string | undefined>;
|
|
43
|
+
export interface RefreshUpdateCheckOptions {
|
|
44
|
+
now?: number;
|
|
45
|
+
fetchImpl?: FetchLike;
|
|
46
|
+
timeoutMs?: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Look up the latest npm release at most once per 24 hours and cache it under
|
|
50
|
+
* ~/.photoshop-mcp/update-check.json. Never throws; concurrent calls share one request.
|
|
51
|
+
* Tool calls only read the cache, so a slow or missing network never delays them.
|
|
52
|
+
*/
|
|
53
|
+
export declare function refreshUpdateCheck(options?: RefreshUpdateCheckOptions): Promise<void>;
|
|
54
|
+
/** A notice when the cached release is newer and none was shown in the last 7 days. */
|
|
55
|
+
export declare function getDueUpdateNotice(now?: number, currentVersion?: string): UpdateNotice | null;
|
|
56
|
+
export declare function markUpdateNoticeShown(latestVersion: string, now?: number): void;
|
|
57
|
+
export declare function buildUpdateNoticeBlock(notice: UpdateNotice): string;
|
|
58
|
+
/**
|
|
59
|
+
* The UPDATE_AVAILABLE block for this ping, or null. Starts the 7-day cooldown when it
|
|
60
|
+
* returns a block; if the cooldown cannot be saved, shows nothing rather than repeat it every ping.
|
|
61
|
+
*/
|
|
62
|
+
export declare function takeUpdateNoticeBlock(now?: number): string | null;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/update/check.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AACrD,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAC3D,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AACvD,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAC7D,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,gFACkD,CAAC;AAChF,eAAO,MAAM,wBAAwB,QAAsB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,yBAAyB,QAA0B,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AA8CxE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAMlF;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAW9D;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAU7E;AAID,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,UAAU,GAAE,MAAoB,GAC/B,cAAc,CAUhB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAc9F;AAED,6FAA6F;AAC7F,wBAAsB,kBAAkB,CACtC,SAAS,GAAE,SAAiB,EAC5B,SAAS,GAAE,MAAgC,GAC1C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB7B;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAmB,EACxB,cAAc,GAAE,MAAwB,GACvC,YAAY,GAAG,IAAI,CAOrB;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,IAAI,CAE3F;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CASnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAS7E"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { getAppVersion } from '../analytics/app-version.js';
|
|
5
|
+
import { getPhotoshopMcpHomeDir, PHOTOSHOP_MCP_SURFACE_ENV } from '../lib/export-paths.js';
|
|
6
|
+
import { Logger } from '../utils/logger.js';
|
|
7
|
+
export const UPDATE_CHECK_ENV = 'PSMCP_UPDATE_CHECK';
|
|
8
|
+
export const INSTALL_CHANNEL_ENV = 'PSMCP_INSTALL_CHANNEL';
|
|
9
|
+
export const UPDATE_NOTICE_MARKER = 'UPDATE_AVAILABLE';
|
|
10
|
+
export const NPM_PACKAGE_NAME = '@alisaitteke/photoshop-mcp';
|
|
11
|
+
/** dist-tags only: ~20 bytes instead of the full packument. */
|
|
12
|
+
export const UPDATE_CHECK_URL = 'https://registry.npmjs.org/-/package/@alisaitteke%2fphotoshop-mcp/dist-tags';
|
|
13
|
+
export const UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
14
|
+
export const UPDATE_CHECK_TIMEOUT_MS = 3000;
|
|
15
|
+
export const UPDATE_NOTICE_COOLDOWN_MS = 7 * 24 * 60 * 60 * 1000;
|
|
16
|
+
const STORE_FILE = 'update-check.json';
|
|
17
|
+
const INSTALL_CHANNELS = ['npx', 'mcpb', 'npm', 'source'];
|
|
18
|
+
const logger = new Logger('UpdateCheck');
|
|
19
|
+
let inflight = null;
|
|
20
|
+
function getStorePath() {
|
|
21
|
+
return join(getPhotoshopMcpHomeDir(), STORE_FILE);
|
|
22
|
+
}
|
|
23
|
+
function readStore() {
|
|
24
|
+
try {
|
|
25
|
+
const parsed = JSON.parse(readFileSync(getStorePath(), 'utf8'));
|
|
26
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function writeStore(store) {
|
|
33
|
+
const dir = getPhotoshopMcpHomeDir();
|
|
34
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
35
|
+
writeFileSync(getStorePath(), JSON.stringify(store), { mode: 0o600 });
|
|
36
|
+
}
|
|
37
|
+
function isFiniteTimestamp(value) {
|
|
38
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
39
|
+
}
|
|
40
|
+
/** True while `since` is in the past and less than `windowMs` ago (a clock set backwards expires it). */
|
|
41
|
+
function withinWindow(since, now, windowMs) {
|
|
42
|
+
return isFiniteTimestamp(since) && since <= now && now - since < windowMs;
|
|
43
|
+
}
|
|
44
|
+
function envFalsy(value) {
|
|
45
|
+
const v = value?.trim().toLowerCase();
|
|
46
|
+
return v === '0' || v === 'false' || v === 'no';
|
|
47
|
+
}
|
|
48
|
+
function envTruthy(value) {
|
|
49
|
+
const v = value?.trim().toLowerCase();
|
|
50
|
+
return Boolean(v) && !envFalsy(v);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* On by default. Off with `PSMCP_UPDATE_CHECK=0`, any `NO_UPDATE_NOTIFIER`, a truthy `CI`,
|
|
54
|
+
* and when the standalone UI spawns this server (its agent is not the user's host).
|
|
55
|
+
*/
|
|
56
|
+
export function isUpdateCheckEnabled(env = process.env) {
|
|
57
|
+
if (envFalsy(env[UPDATE_CHECK_ENV]))
|
|
58
|
+
return false;
|
|
59
|
+
if (env.NO_UPDATE_NOTIFIER?.trim())
|
|
60
|
+
return false;
|
|
61
|
+
if (envTruthy(env.CI))
|
|
62
|
+
return false;
|
|
63
|
+
if (env[PHOTOSHOP_MCP_SURFACE_ENV]?.trim().toLowerCase() === 'ui')
|
|
64
|
+
return false;
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
export function parseVersion(raw) {
|
|
68
|
+
const match = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(raw.trim());
|
|
69
|
+
if (!match)
|
|
70
|
+
return null;
|
|
71
|
+
return {
|
|
72
|
+
major: Number(match[1]),
|
|
73
|
+
minor: Number(match[2]),
|
|
74
|
+
patch: Number(match[3]),
|
|
75
|
+
prerelease: match[4] ?? null,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** True when `latest` is a stable release newer than `current`. Unknown versions never notify. */
|
|
79
|
+
export function isNewerStableVersion(latest, current) {
|
|
80
|
+
const l = parseVersion(latest);
|
|
81
|
+
const c = parseVersion(current);
|
|
82
|
+
if (!l || !c || l.prerelease)
|
|
83
|
+
return false;
|
|
84
|
+
if (c.major === 0 && c.minor === 0 && c.patch === 0)
|
|
85
|
+
return false;
|
|
86
|
+
if (l.major !== c.major)
|
|
87
|
+
return l.major > c.major;
|
|
88
|
+
if (l.minor !== c.minor)
|
|
89
|
+
return l.minor > c.minor;
|
|
90
|
+
if (l.patch !== c.patch)
|
|
91
|
+
return l.patch > c.patch;
|
|
92
|
+
// Same x.y.z: the stable release is newer than a prerelease of it.
|
|
93
|
+
return c.prerelease !== null;
|
|
94
|
+
}
|
|
95
|
+
const MODULE_PATH = fileURLToPath(import.meta.url);
|
|
96
|
+
/** How this copy was installed, so the notice can give one correct update step. */
|
|
97
|
+
export function detectInstallChannel(env = process.env, modulePath = MODULE_PATH) {
|
|
98
|
+
const explicit = env[INSTALL_CHANNEL_ENV]?.trim().toLowerCase();
|
|
99
|
+
if (explicit && INSTALL_CHANNELS.includes(explicit)) {
|
|
100
|
+
return explicit;
|
|
101
|
+
}
|
|
102
|
+
const path = modulePath.replace(/\\/g, '/');
|
|
103
|
+
if (/\/_npx\//.test(path) || /\/dlx\//.test(path))
|
|
104
|
+
return 'npx';
|
|
105
|
+
if (/\/claude extensions\//i.test(path))
|
|
106
|
+
return 'mcpb';
|
|
107
|
+
if (/\/node_modules\//.test(path))
|
|
108
|
+
return 'npm';
|
|
109
|
+
return 'source';
|
|
110
|
+
}
|
|
111
|
+
export function buildUpdateInstruction(channel, currentVersion) {
|
|
112
|
+
switch (channel) {
|
|
113
|
+
case 'npx':
|
|
114
|
+
return ('Restart the MCP client (or reload this MCP server) so npx starts the new version. ' +
|
|
115
|
+
`If it still starts ${currentVersion}, change the server args to \`-y ${NPM_PACKAGE_NAME}@latest\` and restart.`);
|
|
116
|
+
case 'mcpb':
|
|
117
|
+
return 'Update the Photoshop MCP extension in Claude Desktop (Settings → Extensions) or install the latest .mcpb bundle, then restart Claude Desktop.';
|
|
118
|
+
case 'npm':
|
|
119
|
+
return `Run \`npm install -g ${NPM_PACKAGE_NAME}@latest\` (or update it where it was installed), then restart the MCP client.`;
|
|
120
|
+
case 'source':
|
|
121
|
+
return 'Run `git pull && npm install && npm run build` in the photoshop-mcp checkout, then restart the MCP client.';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** Latest dist-tag from npm, or undefined on any failure (offline, timeout, bad payload). */
|
|
125
|
+
export async function fetchLatestVersion(fetchImpl = fetch, timeoutMs = UPDATE_CHECK_TIMEOUT_MS) {
|
|
126
|
+
try {
|
|
127
|
+
const response = await fetchImpl(UPDATE_CHECK_URL, {
|
|
128
|
+
headers: {
|
|
129
|
+
accept: 'application/json',
|
|
130
|
+
'user-agent': `photoshop-mcp/${getAppVersion()}`,
|
|
131
|
+
},
|
|
132
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
133
|
+
});
|
|
134
|
+
if (!response.ok)
|
|
135
|
+
return undefined;
|
|
136
|
+
const body = (await response.json());
|
|
137
|
+
const latest = body?.latest;
|
|
138
|
+
return typeof latest === 'string' && parseVersion(latest) ? latest.trim() : undefined;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
logger.debug('Update check failed:', error instanceof Error ? error.message : String(error));
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async function runRefresh(options) {
|
|
146
|
+
const now = options.now ?? Date.now();
|
|
147
|
+
if (withinWindow(readStore().checkedAt, now, UPDATE_CHECK_INTERVAL_MS))
|
|
148
|
+
return;
|
|
149
|
+
const latest = await fetchLatestVersion(options.fetchImpl, options.timeoutMs);
|
|
150
|
+
if (!latest)
|
|
151
|
+
return;
|
|
152
|
+
try {
|
|
153
|
+
writeStore({ ...readStore(), checkedAt: now, latestVersion: latest });
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
logger.debug('Could not save update check:', error instanceof Error ? error.message : String(error));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Look up the latest npm release at most once per 24 hours and cache it under
|
|
161
|
+
* ~/.photoshop-mcp/update-check.json. Never throws; concurrent calls share one request.
|
|
162
|
+
* Tool calls only read the cache, so a slow or missing network never delays them.
|
|
163
|
+
*/
|
|
164
|
+
export function refreshUpdateCheck(options = {}) {
|
|
165
|
+
if (!isUpdateCheckEnabled())
|
|
166
|
+
return Promise.resolve();
|
|
167
|
+
if (inflight)
|
|
168
|
+
return inflight;
|
|
169
|
+
inflight = runRefresh(options)
|
|
170
|
+
.catch(() => { })
|
|
171
|
+
.finally(() => {
|
|
172
|
+
inflight = null;
|
|
173
|
+
});
|
|
174
|
+
return inflight;
|
|
175
|
+
}
|
|
176
|
+
/** A notice when the cached release is newer and none was shown in the last 7 days. */
|
|
177
|
+
export function getDueUpdateNotice(now = Date.now(), currentVersion = getAppVersion()) {
|
|
178
|
+
if (!isUpdateCheckEnabled())
|
|
179
|
+
return null;
|
|
180
|
+
const store = readStore();
|
|
181
|
+
const latest = store.latestVersion;
|
|
182
|
+
if (typeof latest !== 'string' || !isNewerStableVersion(latest, currentVersion))
|
|
183
|
+
return null;
|
|
184
|
+
if (withinWindow(store.notifiedAt, now, UPDATE_NOTICE_COOLDOWN_MS))
|
|
185
|
+
return null;
|
|
186
|
+
return { currentVersion, latestVersion: latest, channel: detectInstallChannel() };
|
|
187
|
+
}
|
|
188
|
+
export function markUpdateNoticeShown(latestVersion, now = Date.now()) {
|
|
189
|
+
writeStore({ ...readStore(), notifiedAt: now, notifiedVersion: latestVersion });
|
|
190
|
+
}
|
|
191
|
+
export function buildUpdateNoticeBlock(notice) {
|
|
192
|
+
return [
|
|
193
|
+
UPDATE_NOTICE_MARKER,
|
|
194
|
+
`photoshop-mcp ${notice.latestVersion} is available. This session runs ${notice.currentVersion}.`,
|
|
195
|
+
'Tell the user now, once, in one short sentence in the language they are using in this conversation, and include the update step below.',
|
|
196
|
+
"Do not ask a question, do not open the host question UI, and do not run the update step yourself. Then continue the user's original request immediately. Do not end the turn on this notice.",
|
|
197
|
+
'',
|
|
198
|
+
`Update step: ${buildUpdateInstruction(notice.channel, notice.currentVersion)}`,
|
|
199
|
+
].join('\n');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The UPDATE_AVAILABLE block for this ping, or null. Starts the 7-day cooldown when it
|
|
203
|
+
* returns a block; if the cooldown cannot be saved, shows nothing rather than repeat it every ping.
|
|
204
|
+
*/
|
|
205
|
+
export function takeUpdateNoticeBlock(now = Date.now()) {
|
|
206
|
+
const notice = getDueUpdateNotice(now);
|
|
207
|
+
if (!notice)
|
|
208
|
+
return null;
|
|
209
|
+
try {
|
|
210
|
+
markUpdateNoticeShown(notice.latestVersion, now);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
return buildUpdateNoticeBlock(notice);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/update/check.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alisaitteke/photoshop-mcp",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.29",
|
|
4
4
|
"description": "MCP server for Adobe Photoshop — 123 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",
|