@alisaitteke/photoshop-mcp 1.7.14 → 1.7.16
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 +7 -1
- package/README.de.md +3 -1
- package/README.es.md +3 -1
- package/README.ja.md +3 -1
- package/README.md +10 -0
- package/README.tr.md +3 -1
- package/README.zh-CN.md +3 -1
- package/dist/analytics/index.d.ts +2 -2
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +2 -2
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/logical-session.d.ts +32 -0
- package/dist/analytics/logical-session.d.ts.map +1 -0
- package/dist/analytics/logical-session.js +99 -0
- package/dist/analytics/logical-session.js.map +1 -0
- package/dist/analytics/mcp-client.d.ts.map +1 -1
- package/dist/analytics/mcp-client.js +14 -14
- package/dist/analytics/mcp-client.js.map +1 -1
- package/dist/analytics/mcp-session.d.ts +7 -2
- package/dist/analytics/mcp-session.d.ts.map +1 -1
- package/dist/analytics/mcp-session.js +25 -11
- package/dist/analytics/mcp-session.js.map +1 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +20 -9
- package/dist/core/session.js.map +1 -1
- package/dist/index.js +2 -5
- package/dist/index.js.map +1 -1
- package/dist/platform/connection.d.ts +8 -0
- package/dist/platform/connection.d.ts.map +1 -1
- package/dist/platform/connection.js +68 -13
- package/dist/platform/connection.js.map +1 -1
- package/dist/platform/detect-cache.d.ts +16 -0
- package/dist/platform/detect-cache.d.ts.map +1 -0
- package/dist/platform/detect-cache.js +59 -0
- package/dist/platform/detect-cache.js.map +1 -0
- package/dist/prompts/instructions.d.ts.map +1 -1
- package/dist/prompts/instructions.js +10 -1
- package/dist/prompts/instructions.js.map +1 -1
- package/dist/prompts/templates/remove-background.d.ts.map +1 -1
- package/dist/prompts/templates/remove-background.js +8 -11
- package/dist/prompts/templates/remove-background.js.map +1 -1
- package/dist/tools/recipes/remove-background.d.ts.map +1 -1
- package/dist/tools/recipes/remove-background.js +85 -24
- package/dist/tools/recipes/remove-background.js.map +1 -1
- package/package.json +1 -1
- package/web/dist/assets/{index-BOj_0m8V.js → index-Bf3HFVtS.js} +51 -51
- package/web/dist/index.html +1 -1
package/AGENTS.md
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
| Scenario | Path |
|
|
9
9
|
| -------- | ---- |
|
|
10
|
-
| Cursor
|
|
10
|
+
| Cursor | Install the `photoshop-mcp` plugin (Customize → Plugins / Marketplace) so the Photoshop logo appears in the MCP list. Fallback: `mcpServers` → `npx -y @alisaitteke/photoshop-mcp` (stdio, generic icon) |
|
|
11
|
+
| Claude Desktop / VS Code | Configure `mcpServers` → `npx -y @alisaitteke/photoshop-mcp` (stdio) |
|
|
11
12
|
| Claude Code | `claude mcp add photoshop -- npx -y @alisaitteke/photoshop-mcp` |
|
|
12
13
|
| Standalone chat UI (no IDE) | `npx -p @alisaitteke/photoshop-mcp photoshop-mcp-ui` |
|
|
13
14
|
| Local development | `npm install && npm run build && node dist/index.js` — see [docs/development.md](docs/development.md) |
|
|
@@ -58,6 +59,8 @@ Full catalog: [docs/available-tools.md](docs/available-tools.md). Prompt layer:
|
|
|
58
59
|
|
|
59
60
|
## MCP client configuration
|
|
60
61
|
|
|
62
|
+
Cursor: prefer the `photoshop-mcp` plugin (Customize → Plugins) so the Photoshop logo appears in the MCP list. Other hosts and the install-mcp deeplink use:
|
|
63
|
+
|
|
61
64
|
```json
|
|
62
65
|
{
|
|
63
66
|
"mcpServers": {
|
|
@@ -99,6 +102,7 @@ More: [docs/troubleshooting.md](docs/troubleshooting.md).
|
|
|
99
102
|
| npm | `@alisaitteke/photoshop-mcp` |
|
|
100
103
|
| MCP Registry | `io.github.alisaitteke/photoshop-mcp` |
|
|
101
104
|
| GitHub | https://github.com/alisaitteke/photoshop-mcp |
|
|
105
|
+
| Cursor Marketplace | plugin `photoshop-mcp` (submit via [CONTRIBUTING.md](CONTRIBUTING.md#cursor-marketplace)) |
|
|
102
106
|
|
|
103
107
|
## Key files
|
|
104
108
|
|
|
@@ -111,6 +115,8 @@ More: [docs/troubleshooting.md](docs/troubleshooting.md).
|
|
|
111
115
|
| [src/tools/](src/tools/) | Tool implementations |
|
|
112
116
|
| [src/prompts/](src/prompts/) | MCP prompt templates |
|
|
113
117
|
| [CONTRIBUTING.md](CONTRIBUTING.md) | PR and release workflow |
|
|
118
|
+
| [`.cursor-plugin/plugin.json`](.cursor-plugin/plugin.json) | Cursor Plugin manifest (MCP list logo) |
|
|
119
|
+
| [`mcp.json`](mcp.json) | Cursor Plugin stdio server config |
|
|
114
120
|
|
|
115
121
|
## Contributing (agents editing this repo)
|
|
116
122
|
|
package/README.de.md
CHANGED
|
@@ -602,7 +602,9 @@ Für die lokale Entwicklung am Repository: [Aus dem Quellcode](docs/development.
|
|
|
602
602
|
|
|
603
603
|
### Für Cursor
|
|
604
604
|
|
|
605
|
-
|
|
605
|
+
Damit das Photoshop-Logo in der MCP-Liste erscheint, das Plugin unter **Customize → Plugins** installieren oder nach der Freigabe im [Cursor Marketplace](https://cursor.com/marketplace) nach `photoshop-mcp` suchen. Ein manuelles `mcp.json` funktioniert weiterhin, zeigt aber ein generisches Symbol.
|
|
606
|
+
|
|
607
|
+
Zu den Cursor-Einstellungen (`~/.cursor/mcp.json` oder Workspace-Einstellungen) hinzufügen:
|
|
606
608
|
|
|
607
609
|
```json
|
|
608
610
|
{
|
package/README.es.md
CHANGED
|
@@ -557,7 +557,9 @@ Para trabajar en el repositorio localmente, consulte [From Source](docs/developm
|
|
|
557
557
|
|
|
558
558
|
### Para Cursor
|
|
559
559
|
|
|
560
|
-
|
|
560
|
+
Para que el logo de Photoshop aparezca en la lista MCP, instale el plugin desde **Customize → Plugins**, o busque `photoshop-mcp` en el [Cursor Marketplace](https://cursor.com/marketplace) cuando esté publicado. Un `mcp.json` manual sigue funcionando, pero muestra un icono genérico.
|
|
561
|
+
|
|
562
|
+
Añada a su configuración de Cursor (`~/.cursor/mcp.json` o la configuración del espacio de trabajo):
|
|
561
563
|
|
|
562
564
|
```json
|
|
563
565
|
{
|
package/README.ja.md
CHANGED
|
@@ -559,7 +559,9 @@ npx @alisaitteke/photoshop-mcp
|
|
|
559
559
|
|
|
560
560
|
### Cursor向け
|
|
561
561
|
|
|
562
|
-
Cursor
|
|
562
|
+
MCPリストにPhotoshopロゴを表示するには、**Customize → Plugins** からプラグインをインストールするか、公開後に [Cursor Marketplace](https://cursor.com/marketplace) で `photoshop-mcp` を検索してください。手動の `mcp.json` でも動作しますが、汎用アイコンになります。
|
|
563
|
+
|
|
564
|
+
Cursorの設定に追加してください(`~/.cursor/mcp.json`またはワークスペース設定):
|
|
563
565
|
|
|
564
566
|
```json
|
|
565
567
|
{
|
package/README.md
CHANGED
|
@@ -89,6 +89,10 @@ Details, providers, Action Plan (API key or CLI account), and security notes:
|
|
|
89
89
|
|
|
90
90
|
### Option 2 — Inside your AI app (Cursor, Claude, VS Code)
|
|
91
91
|
|
|
92
|
+
**Cursor (shows the Photoshop logo in the MCP list):** install the plugin from **Customize → Plugins**, or search the [Cursor Marketplace](https://cursor.com/marketplace) for `photoshop-mcp` once it is listed. That package still launches `npx -y @alisaitteke/photoshop-mcp`; the plugin manifest is what supplies the icon.
|
|
93
|
+
|
|
94
|
+
Until the Marketplace listing is live, copy `.cursor-plugin/`, `mcp.json`, and `assets/` into `~/.cursor/plugins/local/photoshop-mcp` and reload the window — details in [CONTRIBUTING.md](CONTRIBUTING.md#cursor-marketplace). The Install-in-Cursor button and a raw `mcp.json` entry still work, but they show a generic icon.
|
|
95
|
+
|
|
92
96
|
[](https://cursor.com/en/install-mcp?name=photoshop&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhbGlzYWl0dGVrZS9waG90b3Nob3AtbWNwIl19)
|
|
93
97
|
[](https://vscode.dev/redirect/mcp/install?name=photoshop&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40alisaitteke%2Fphotoshop-mcp%22%5D%7D)
|
|
94
98
|
|
|
@@ -132,6 +136,12 @@ next. Common fixes: [`docs/troubleshooting.md`](docs/troubleshooting.md).
|
|
|
132
136
|
|
|
133
137
|
Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR.
|
|
134
138
|
|
|
139
|
+
## ❤️ Contributors & Credits
|
|
140
|
+
|
|
141
|
+
Thanks to all our contributors!
|
|
142
|
+
|
|
143
|
+
<a href="https://github.com/alisaitteke/photoshop-mcp/graphs/contributors"><img src="https://contrib.rocks/image?repo=alisaitteke/photoshop-mcp" alt="Contributors" /></a>
|
|
144
|
+
|
|
135
145
|
## Maintainer
|
|
136
146
|
|
|
137
147
|
Built by **[Ali Sait Teke](https://alisait.com)** — [GitHub](https://github.com/alisaitteke) · [LinkedIn](https://www.linkedin.com/in/alisait/).
|
package/README.tr.md
CHANGED
|
@@ -596,7 +596,9 @@ Depoyu yerel olarak geliştirmek için geliştirme kılavuzundaki [Kaynaktan](do
|
|
|
596
596
|
|
|
597
597
|
### Cursor için
|
|
598
598
|
|
|
599
|
-
|
|
599
|
+
MCP listesinde Photoshop logosunun görünmesi için eklentiyi **Customize → Plugins** üzerinden kurun (veya listelendikten sonra [Cursor Marketplace](https://cursor.com/marketplace) içinde `photoshop-mcp` arayın). Ham `mcp.json` yedek olarak çalışır ama jenerik ikon gösterir.
|
|
600
|
+
|
|
601
|
+
Cursor ayarlarınıza ekleyin (`.cursor/mcp.json` veya workspace ayarları):
|
|
600
602
|
|
|
601
603
|
```json
|
|
602
604
|
{
|
package/README.zh-CN.md
CHANGED
|
@@ -554,7 +554,9 @@ npx @alisaitteke/photoshop-mcp
|
|
|
554
554
|
|
|
555
555
|
### 适用于 Cursor
|
|
556
556
|
|
|
557
|
-
|
|
557
|
+
若要在 MCP 列表中显示 Photoshop 图标,请从 **Customize → Plugins** 安装插件,或在插件上架后于 [Cursor Marketplace](https://cursor.com/marketplace) 搜索 `photoshop-mcp`。直接写入 `mcp.json` 仍可用,但会显示通用图标。
|
|
558
|
+
|
|
559
|
+
在您的 Cursor 设置(`~/.cursor/mcp.json` 或工作区设置)中添加:
|
|
558
560
|
|
|
559
561
|
```json
|
|
560
562
|
{
|
|
@@ -2,7 +2,7 @@ import { captureBetaChatTurn } from './beta-telemetry.js';
|
|
|
2
2
|
import { getAppVersion } from './app-version.js';
|
|
3
3
|
import { getBetaTelemetryState, setBetaTelemetryChoice } from './identity.js';
|
|
4
4
|
import { onMcpClientConnected, onMcpClientDisconnected } from './mcp-client.js';
|
|
5
|
-
import { captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, recordMcpToolCall, startMcpAnalyticsSession } from './mcp-session.js';
|
|
5
|
+
import { captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, recordMcpToolCall, startLogicalMcpAnalyticsSession, startMcpAnalyticsSession } from './mcp-session.js';
|
|
6
6
|
import { getAnalytics, resetAnalyticsProvider } from './provider.js';
|
|
7
7
|
import type { AnalyticsEvent, AnalyticsProvider, AnalyticsRuntimeConfig, BetaTelemetryState, UsageSurface } from './types.js';
|
|
8
8
|
export type { McpShutdownReason } from './mcp-session.js';
|
|
@@ -20,6 +20,6 @@ export declare function shutdownAnalytics(): Promise<void>;
|
|
|
20
20
|
export declare function getAnalyticsRuntimeConfig(): AnalyticsRuntimeConfig;
|
|
21
21
|
export { captureAnalyticsMilestoneOnce } from './milestones.js';
|
|
22
22
|
export type { AnalyticsMilestone } from './milestones.js';
|
|
23
|
-
export { captureBetaChatTurn, captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, getAnalytics, getAppVersion, getBetaTelemetryState, onMcpClientConnected, onMcpClientDisconnected, recordMcpToolCall, resetAnalyticsProvider, setBetaTelemetryChoice, startMcpAnalyticsSession, };
|
|
23
|
+
export { captureBetaChatTurn, captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, getAnalytics, getAppVersion, getBetaTelemetryState, onMcpClientConnected, onMcpClientDisconnected, recordMcpToolCall, resetAnalyticsProvider, setBetaTelemetryChoice, startLogicalMcpAnalyticsSession, startMcpAnalyticsSession, };
|
|
24
24
|
export type { AnalyticsEvent, AnalyticsProvider, AnalyticsRuntimeConfig, BetaTelemetryState, UsageSurface, };
|
|
25
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EACL,qBAAqB,EAIrB,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAA2B,MAAM,eAAe,CAAC;AAC9F,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,sFAAsF;AACtF,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CAON;AAED,wBAAgB,uBAAuB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAalF;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9D;AAED,4FAA4F;AAC5F,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAYhF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAYlE;AACD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GACzB,CAAC;AACF,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,GACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EACL,qBAAqB,EAIrB,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,+BAA+B,EAC/B,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAA2B,MAAM,eAAe,CAAC;AAC9F,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,sFAAsF;AACtF,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CAON;AAED,wBAAgB,uBAAuB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAalF;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9D;AAED,4FAA4F;AAC5F,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAYhF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAYlE;AACD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,+BAA+B,EAC/B,wBAAwB,GACzB,CAAC;AACF,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,GACb,CAAC"}
|
package/dist/analytics/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { buildPersonIdentifyProperties, buildRuntimeProperties } from './events.
|
|
|
5
5
|
import { applyInstallCohortPersonOnce } from './install-cohorts.js';
|
|
6
6
|
import { getBetaTelemetryState, getOrCreateDistinctId, isAnalyticsEnabled, recordUsageSurface, setBetaTelemetryChoice, } from './identity.js';
|
|
7
7
|
import { onMcpClientConnected, onMcpClientDisconnected } from './mcp-client.js';
|
|
8
|
-
import { captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, recordMcpToolCall, startMcpAnalyticsSession, } from './mcp-session.js';
|
|
8
|
+
import { captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, recordMcpToolCall, startLogicalMcpAnalyticsSession, startMcpAnalyticsSession, } from './mcp-session.js';
|
|
9
9
|
import { getAnalytics, resetAnalyticsProvider, shutdownAnalyticsClient } from './provider.js';
|
|
10
10
|
/** Persist the install ID and register one anonymous analytics person per process. */
|
|
11
11
|
export function ensureAnalyticsIdentity() {
|
|
@@ -75,5 +75,5 @@ export function getAnalyticsRuntimeConfig() {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
export { captureAnalyticsMilestoneOnce } from './milestones.js';
|
|
78
|
-
export { captureBetaChatTurn, captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, getAnalytics, getAppVersion, getBetaTelemetryState, onMcpClientConnected, onMcpClientDisconnected, recordMcpToolCall, resetAnalyticsProvider, setBetaTelemetryChoice, startMcpAnalyticsSession, };
|
|
78
|
+
export { captureBetaChatTurn, captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, getAnalytics, getAppVersion, getBetaTelemetryState, onMcpClientConnected, onMcpClientDisconnected, recordMcpToolCall, resetAnalyticsProvider, setBetaTelemetryChoice, startLogicalMcpAnalyticsSession, startMcpAnalyticsSession, };
|
|
79
79
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Cursor often respawns stdio; treat activity inside this window as one session. */
|
|
2
|
+
export declare const MCP_LOGICAL_SESSION_IDLE_MS: number;
|
|
3
|
+
export interface LogicalSessionRecord {
|
|
4
|
+
id: string;
|
|
5
|
+
startedAt: number;
|
|
6
|
+
lastSeenAt: number;
|
|
7
|
+
clientName?: string;
|
|
8
|
+
clientVersion?: string;
|
|
9
|
+
connectCount: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ClosedLogicalSession {
|
|
12
|
+
durationMs: number;
|
|
13
|
+
shutdownReason: 'idle_timeout';
|
|
14
|
+
}
|
|
15
|
+
export interface BeginLogicalSessionResult {
|
|
16
|
+
isNew: boolean;
|
|
17
|
+
session: LogicalSessionRecord;
|
|
18
|
+
closedPrevious?: ClosedLogicalSession;
|
|
19
|
+
}
|
|
20
|
+
export declare function beginLogicalSession(now?: number): BeginLogicalSessionResult;
|
|
21
|
+
export declare function noteLogicalSessionActivity(now?: number): void;
|
|
22
|
+
export declare function bindLogicalSessionClient(client: {
|
|
23
|
+
name?: string;
|
|
24
|
+
version?: string;
|
|
25
|
+
}, now?: number): {
|
|
26
|
+
emitConnected: boolean;
|
|
27
|
+
connectCount: number;
|
|
28
|
+
};
|
|
29
|
+
export declare function getLogicalSession(): LogicalSessionRecord | null;
|
|
30
|
+
/** Clears in-process state so tests can switch `PHOTOSHOP_MCP_HOME`. */
|
|
31
|
+
export declare function resetLogicalSessionForTests(): void;
|
|
32
|
+
//# sourceMappingURL=logical-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logical-session.d.ts","sourceRoot":"","sources":["../../src/analytics/logical-session.ts"],"names":[],"mappings":"AAKA,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAI1D,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;IAC9B,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAwCD,wBAAgB,mBAAmB,CAAC,GAAG,SAAa,GAAG,yBAAyB,CAuB/E;AAED,wBAAgB,0BAA0B,CAAC,GAAG,SAAa,GAAG,IAAI,CAIjE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,GAAG,SAAa,GACf;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAwBlD;AAED,wBAAgB,iBAAiB,IAAI,oBAAoB,GAAG,IAAI,CAE/D;AAED,wEAAwE;AACxE,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { getPhotoshopMcpHomeDir } from '../lib/export-paths.js';
|
|
5
|
+
/** Cursor often respawns stdio; treat activity inside this window as one session. */
|
|
6
|
+
export const MCP_LOGICAL_SESSION_IDLE_MS = 30 * 60 * 1000;
|
|
7
|
+
const STORE_FILE = 'mcp-logical-session.json';
|
|
8
|
+
let memory = null;
|
|
9
|
+
function storePath() {
|
|
10
|
+
return join(getPhotoshopMcpHomeDir(), STORE_FILE);
|
|
11
|
+
}
|
|
12
|
+
function readStore() {
|
|
13
|
+
if (memory)
|
|
14
|
+
return memory;
|
|
15
|
+
try {
|
|
16
|
+
const raw = JSON.parse(readFileSync(storePath(), 'utf8'));
|
|
17
|
+
if (raw &&
|
|
18
|
+
typeof raw.id === 'string' &&
|
|
19
|
+
typeof raw.startedAt === 'number' &&
|
|
20
|
+
typeof raw.lastSeenAt === 'number') {
|
|
21
|
+
memory = {
|
|
22
|
+
id: raw.id,
|
|
23
|
+
startedAt: raw.startedAt,
|
|
24
|
+
lastSeenAt: raw.lastSeenAt,
|
|
25
|
+
connectCount: typeof raw.connectCount === 'number' ? raw.connectCount : 0,
|
|
26
|
+
...(typeof raw.clientName === 'string' ? { clientName: raw.clientName } : {}),
|
|
27
|
+
...(typeof raw.clientVersion === 'string' ? { clientVersion: raw.clientVersion } : {}),
|
|
28
|
+
};
|
|
29
|
+
return memory;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Missing or corrupt store — start a new logical session.
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function writeStore(record) {
|
|
38
|
+
memory = record;
|
|
39
|
+
mkdirSync(getPhotoshopMcpHomeDir(), { recursive: true, mode: 0o700 });
|
|
40
|
+
writeFileSync(storePath(), JSON.stringify(record), { mode: 0o600 });
|
|
41
|
+
}
|
|
42
|
+
export function beginLogicalSession(now = Date.now()) {
|
|
43
|
+
const existing = readStore();
|
|
44
|
+
if (existing && now - existing.lastSeenAt < MCP_LOGICAL_SESSION_IDLE_MS) {
|
|
45
|
+
const session = { ...existing, lastSeenAt: now };
|
|
46
|
+
writeStore(session);
|
|
47
|
+
return { isNew: false, session };
|
|
48
|
+
}
|
|
49
|
+
const closedPrevious = existing
|
|
50
|
+
? {
|
|
51
|
+
durationMs: Math.max(0, existing.lastSeenAt - existing.startedAt),
|
|
52
|
+
shutdownReason: 'idle_timeout',
|
|
53
|
+
}
|
|
54
|
+
: undefined;
|
|
55
|
+
const session = {
|
|
56
|
+
id: randomUUID(),
|
|
57
|
+
startedAt: now,
|
|
58
|
+
lastSeenAt: now,
|
|
59
|
+
connectCount: 0,
|
|
60
|
+
};
|
|
61
|
+
writeStore(session);
|
|
62
|
+
return { isNew: true, session, closedPrevious };
|
|
63
|
+
}
|
|
64
|
+
export function noteLogicalSessionActivity(now = Date.now()) {
|
|
65
|
+
const existing = readStore();
|
|
66
|
+
if (!existing)
|
|
67
|
+
return;
|
|
68
|
+
writeStore({ ...existing, lastSeenAt: now });
|
|
69
|
+
}
|
|
70
|
+
export function bindLogicalSessionClient(client, now = Date.now()) {
|
|
71
|
+
let session = readStore();
|
|
72
|
+
if (!session) {
|
|
73
|
+
session = beginLogicalSession(now).session;
|
|
74
|
+
}
|
|
75
|
+
const name = client.name?.trim() || 'unknown';
|
|
76
|
+
const version = client.version?.trim() || 'unknown';
|
|
77
|
+
const sameClient = session.clientName === name && session.clientVersion === version;
|
|
78
|
+
if (sameClient) {
|
|
79
|
+
writeStore({ ...session, lastSeenAt: now });
|
|
80
|
+
return { emitConnected: false, connectCount: session.connectCount };
|
|
81
|
+
}
|
|
82
|
+
const connectCount = session.connectCount + 1;
|
|
83
|
+
writeStore({
|
|
84
|
+
...session,
|
|
85
|
+
lastSeenAt: now,
|
|
86
|
+
clientName: name,
|
|
87
|
+
clientVersion: version,
|
|
88
|
+
connectCount,
|
|
89
|
+
});
|
|
90
|
+
return { emitConnected: true, connectCount };
|
|
91
|
+
}
|
|
92
|
+
export function getLogicalSession() {
|
|
93
|
+
return readStore();
|
|
94
|
+
}
|
|
95
|
+
/** Clears in-process state so tests can switch `PHOTOSHOP_MCP_HOME`. */
|
|
96
|
+
export function resetLogicalSessionForTests() {
|
|
97
|
+
memory = null;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=logical-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logical-session.js","sourceRoot":"","sources":["../../src/analytics/logical-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-client.ts"],"names":[],"mappings":"AAkCA;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACpD,IAAI,CA2BN;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,IAAI,CAO9C"}
|
|
@@ -2,10 +2,10 @@ import { hasAnalyticsKey } from './config.js';
|
|
|
2
2
|
import { buildPersonIdentifyProperties, buildRuntimeProperties } from './events.js';
|
|
3
3
|
import { applyInstallCohortPersonOnce } from './install-cohorts.js';
|
|
4
4
|
import { isAnalyticsEnabled, recordUsageSurface } from './identity.js';
|
|
5
|
-
import {
|
|
5
|
+
import { bindLogicalSessionClient, noteLogicalSessionActivity } from './logical-session.js';
|
|
6
|
+
import { clearActiveMcpClient, hasActiveMcpClient, setActiveMcpClient, } from './mcp-client-state.js';
|
|
6
7
|
import { flushMcpToolBatchOnClientDisconnect } from './mcp-session.js';
|
|
7
8
|
import { flushAnalyticsClient, getAnalytics } from './provider.js';
|
|
8
|
-
let clientConnectCount = 0;
|
|
9
9
|
function captureMcpClientEvent(name, properties) {
|
|
10
10
|
if (!isAnalyticsEnabled() || !hasAnalyticsKey())
|
|
11
11
|
return;
|
|
@@ -29,14 +29,19 @@ function identifyMcpClientPerson(properties) {
|
|
|
29
29
|
* See docs/anonymous-usage-analytics.md — distinguishes real client usage from process-only starts.
|
|
30
30
|
*/
|
|
31
31
|
export function onMcpClientConnected(client) {
|
|
32
|
-
clientConnectCount += 1;
|
|
33
32
|
setActiveMcpClient(client);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
mcp_client_connect_count: clientConnectCount,
|
|
38
|
-
event_source: 'mcp',
|
|
33
|
+
const { emitConnected, connectCount } = bindLogicalSessionClient({
|
|
34
|
+
name: client?.name,
|
|
35
|
+
version: client?.version,
|
|
39
36
|
});
|
|
37
|
+
if (emitConnected) {
|
|
38
|
+
captureMcpClientEvent('mcp_client_connected', {
|
|
39
|
+
mcp_client_name: client?.name ?? 'unknown',
|
|
40
|
+
mcp_client_version: client?.version ?? 'unknown',
|
|
41
|
+
mcp_client_connect_count: connectCount,
|
|
42
|
+
event_source: 'mcp',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
40
45
|
applyInstallCohortPersonOnce({
|
|
41
46
|
usageSurface: 'mcp',
|
|
42
47
|
mcpClientName: client?.name,
|
|
@@ -52,13 +57,8 @@ export function onMcpClientConnected(client) {
|
|
|
52
57
|
export function onMcpClientDisconnected() {
|
|
53
58
|
if (!hasActiveMcpClient())
|
|
54
59
|
return;
|
|
55
|
-
const client = getActiveMcpClient();
|
|
56
60
|
flushMcpToolBatchOnClientDisconnect();
|
|
57
|
-
|
|
58
|
-
...(client.name ? { mcp_client_name: client.name } : {}),
|
|
59
|
-
...(client.version ? { mcp_client_version: client.version } : {}),
|
|
60
|
-
event_source: 'mcp',
|
|
61
|
-
});
|
|
61
|
+
noteLogicalSessionActivity();
|
|
62
62
|
clearActiveMcpClient();
|
|
63
63
|
void flushAnalyticsClient().catch(() => { });
|
|
64
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/analytics/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/analytics/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mCAAmC,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnE,SAAS,qBAAqB,CAC5B,IAAY,EACZ,UAAmC;IAEnC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO;IACxD,YAAY,EAAE,CAAC,OAAO,CAAC;QACrB,IAAI;QACJ,UAAU,EAAE,sBAAsB,CAAC,UAAU,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAmC;IAClE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO;IACxD,MAAM,KAAK,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC5C,KAAK,CAAC,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC,aAAa,CAAC;IAC7B,CAAC;IACD,YAAY,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAqD;IAErD,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,wBAAwB,CAAC;QAC/D,IAAI,EAAE,MAAM,EAAE,IAAI;QAClB,OAAO,EAAE,MAAM,EAAE,OAAO;KACzB,CAAC,CAAC;IAEH,IAAI,aAAa,EAAE,CAAC;QAClB,qBAAqB,CAAC,sBAAsB,EAAE;YAC5C,eAAe,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS;YAC1C,kBAAkB,EAAE,MAAM,EAAE,OAAO,IAAI,SAAS;YAChD,wBAAwB,EAAE,YAAY;YACtC,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IAED,4BAA4B,CAAC;QAC3B,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,MAAM,EAAE,IAAI;KAC5B,CAAC,CAAC;IAEH,uBAAuB,CAAC;QACtB,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS;QAC1C,kBAAkB,EAAE,MAAM,EAAE,OAAO,IAAI,SAAS;QAChD,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC,kBAAkB,EAAE;QAAE,OAAO;IAElC,mCAAmC,EAAE,CAAC;IACtC,0BAA0B,EAAE,CAAC;IAC7B,oBAAoB,EAAE,CAAC;IACvB,KAAK,oBAAoB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
export type McpShutdownReason = 'sigint' | 'sigterm' | 'error' | 'stdio_closed';
|
|
1
|
+
export type McpShutdownReason = 'sigint' | 'sigterm' | 'error' | 'stdio_closed' | 'idle_timeout';
|
|
2
2
|
export type McpToolBatchFlushReason = 'debounce' | 'max_hold' | 'shutdown' | 'client_disconnect';
|
|
3
3
|
/** Virtual /mcp hit so MCP-only installs show up next to UI traffic. */
|
|
4
4
|
export declare function captureMcpPageview(): void;
|
|
5
5
|
export declare function captureMcpPageleave(durationMs: number, reason: string): void;
|
|
6
6
|
export declare function flushMcpToolBatch(reason: McpToolBatchFlushReason): void;
|
|
7
7
|
export declare function startMcpAnalyticsSession(): void;
|
|
8
|
+
/** Process start: emit session/pageview only when the 30m logical window is new. */
|
|
9
|
+
export declare function startLogicalMcpAnalyticsSession(properties: {
|
|
10
|
+
photoshop_detected: boolean;
|
|
11
|
+
tools_registered_count: number;
|
|
12
|
+
}): void;
|
|
8
13
|
export declare function recordMcpToolCall(params: {
|
|
9
14
|
toolName: string;
|
|
10
15
|
ok: boolean;
|
|
@@ -12,5 +17,5 @@ export declare function recordMcpToolCall(params: {
|
|
|
12
17
|
durationMs: number;
|
|
13
18
|
}): void;
|
|
14
19
|
export declare function flushMcpToolBatchOnClientDisconnect(): void;
|
|
15
|
-
export declare function endMcpAnalyticsSession(
|
|
20
|
+
export declare function endMcpAnalyticsSession(_reason: McpShutdownReason): void;
|
|
16
21
|
//# sourceMappingURL=mcp-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-session.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-session.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;AACjG,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,mBAAmB,CAAC;AAwCjG,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ5E;AAwDD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAoCvE;AAmBD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,oFAAoF;AACpF,wBAAgB,+BAA+B,CAAC,UAAU,EAAE;IAC1D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;CAChC,GAAG,IAAI,CAmBP;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CA4BP;AAED,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAKvE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { hasAnalyticsKey } from './config.js';
|
|
2
2
|
import { buildRuntimeProperties } from './events.js';
|
|
3
3
|
import { isAnalyticsEnabled } from './identity.js';
|
|
4
|
+
import { beginLogicalSession, noteLogicalSessionActivity } from './logical-session.js';
|
|
4
5
|
import { getActiveMcpClient } from './mcp-client-state.js';
|
|
5
6
|
import { captureAnalyticsMilestoneOnce } from './milestones.js';
|
|
6
7
|
import { flushAnalyticsClient, getAnalytics } from './provider.js';
|
|
@@ -10,7 +11,6 @@ const DEBOUNCE_FLUSH_MS = 3_000;
|
|
|
10
11
|
/** Force flush during long uninterrupted tool chains (no debounce gap). */
|
|
11
12
|
const MAX_BATCH_HOLD_MS = 60_000;
|
|
12
13
|
const MAX_SUMMARY_LENGTH = 800;
|
|
13
|
-
let startedAt = null;
|
|
14
14
|
let toolBatch = new Map();
|
|
15
15
|
let debounceFlushTimer = null;
|
|
16
16
|
let maxHoldFlushTimer = null;
|
|
@@ -150,7 +150,27 @@ function scheduleBatchFlush() {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
export function startMcpAnalyticsSession() {
|
|
153
|
-
|
|
153
|
+
beginLogicalSession();
|
|
154
|
+
}
|
|
155
|
+
/** Process start: emit session/pageview only when the 30m logical window is new. */
|
|
156
|
+
export function startLogicalMcpAnalyticsSession(properties) {
|
|
157
|
+
const result = beginLogicalSession();
|
|
158
|
+
if (result.closedPrevious) {
|
|
159
|
+
captureMcpPageleave(result.closedPrevious.durationMs, result.closedPrevious.shutdownReason);
|
|
160
|
+
captureMcpEvent('mcp_session_ended', {
|
|
161
|
+
duration_ms: result.closedPrevious.durationMs,
|
|
162
|
+
shutdown_reason: result.closedPrevious.shutdownReason,
|
|
163
|
+
event_source: 'mcp',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (!result.isNew)
|
|
167
|
+
return;
|
|
168
|
+
captureMcpPageview();
|
|
169
|
+
captureMcpEvent('mcp_session_started', {
|
|
170
|
+
photoshop_detected: properties.photoshop_detected,
|
|
171
|
+
tools_registered_count: properties.tools_registered_count,
|
|
172
|
+
event_source: 'mcp',
|
|
173
|
+
});
|
|
154
174
|
}
|
|
155
175
|
export function recordMcpToolCall(params) {
|
|
156
176
|
const existing = toolBatch.get(params.toolName) ?? {
|
|
@@ -170,6 +190,7 @@ export function recordMcpToolCall(params) {
|
|
|
170
190
|
}
|
|
171
191
|
existing.durationMs += params.durationMs;
|
|
172
192
|
toolBatch.set(params.toolName, existing);
|
|
193
|
+
noteLogicalSessionActivity();
|
|
173
194
|
if (params.ok) {
|
|
174
195
|
captureAnalyticsMilestoneOnce('mcp_first_tool_success', {
|
|
175
196
|
tool_name: params.toolName,
|
|
@@ -181,16 +202,9 @@ export function recordMcpToolCall(params) {
|
|
|
181
202
|
export function flushMcpToolBatchOnClientDisconnect() {
|
|
182
203
|
flushMcpToolBatch('client_disconnect');
|
|
183
204
|
}
|
|
184
|
-
export function endMcpAnalyticsSession(
|
|
205
|
+
export function endMcpAnalyticsSession(_reason) {
|
|
185
206
|
flushMcpToolBatch('shutdown');
|
|
186
|
-
|
|
187
|
-
captureMcpPageleave(durationMs, reason);
|
|
188
|
-
captureMcpEvent('mcp_session_ended', {
|
|
189
|
-
duration_ms: durationMs,
|
|
190
|
-
shutdown_reason: reason,
|
|
191
|
-
event_source: 'mcp',
|
|
192
|
-
});
|
|
193
|
-
startedAt = null;
|
|
207
|
+
noteLogicalSessionActivity();
|
|
194
208
|
toolBatch.clear();
|
|
195
209
|
clearFlushTimers();
|
|
196
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-session.js","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAK9C,+FAA+F;AAC/F,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAS/B,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"mcp-session.js","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAAO;gBAEf,MAAM,GAAE,aAAkB;IAYhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAAO;gBAEf,MAAM,GAAE,aAAkB;IAYhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAoB3B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,aAAa,IAAI,mBAAmB;IAIpC,mBAAmB,IAAI,OAAO;IAI9B,eAAe,IAAI,IAAI;IAIvB,cAAc,IAAI,IAAI;IAItB,OAAO,CAAC,sBAAsB;YAehB,+BAA+B;IAS7C,OAAO,CAAC,KAAK;CAGd"}
|
package/dist/core/session.js
CHANGED
|
@@ -20,27 +20,38 @@ export class Session {
|
|
|
20
20
|
}
|
|
21
21
|
async initialize() {
|
|
22
22
|
this.logger.info('Initializing session...');
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
this.connection.setOnFreshDetect((ok) => {
|
|
24
|
+
this.isConnected = ok;
|
|
25
|
+
if (ok) {
|
|
26
|
+
this.updateActivity();
|
|
27
|
+
void this.refreshPhotoshopVersionOnPerson();
|
|
28
|
+
}
|
|
29
|
+
this.captureConnectionEvent(ok);
|
|
30
|
+
});
|
|
31
|
+
if (!this.config.autoConnect)
|
|
32
|
+
return;
|
|
33
|
+
if (this.connection.hydrateFromCache()) {
|
|
34
|
+
this.isConnected = true;
|
|
35
|
+
this.updateActivity();
|
|
36
|
+
this.logger.info('Using cached Photoshop detection');
|
|
37
|
+
void this.refreshPhotoshopVersionOnPerson();
|
|
38
|
+
return;
|
|
26
39
|
}
|
|
40
|
+
this.logger.debug('Photoshop detection deferred until first tool');
|
|
27
41
|
}
|
|
28
42
|
async connect() {
|
|
29
43
|
try {
|
|
30
44
|
this.logger.info('Connecting to Photoshop...');
|
|
31
45
|
const connected = await this.connection.ping();
|
|
46
|
+
this.isConnected = connected;
|
|
32
47
|
if (connected) {
|
|
33
|
-
this.isConnected = true;
|
|
34
48
|
this.updateActivity();
|
|
35
49
|
this.logger.info('Successfully connected to Photoshop');
|
|
36
50
|
void this.refreshPhotoshopVersionOnPerson();
|
|
37
51
|
return true;
|
|
38
52
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.logger.warn('Failed to connect to Photoshop');
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
53
|
+
this.logger.warn('Failed to connect to Photoshop');
|
|
54
|
+
return false;
|
|
44
55
|
}
|
|
45
56
|
catch (error) {
|
|
46
57
|
this.logger.error('Connection error:', error);
|
package/dist/core/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAQhE,MAAM,OAAO,OAAO;IACV,MAAM,CAAS;IACf,UAAU,CAAsB;IAChC,MAAM,CAAgB;IACtB,WAAW,GAAY,KAAK,CAAC;IAC7B,YAAY,CAAO;IAE3B,YAAY,SAAwB,EAAE;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG;YACZ,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,CAAC;YACpB,cAAc,EAAE,IAAI;YACpB,GAAG,MAAM;SACV,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|