@alisaitteke/photoshop-mcp 1.7.15 → 1.7.17
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/README.md +6 -0
- package/dist/analytics/events.d.ts.map +1 -1
- package/dist/analytics/events.js +9 -1
- package/dist/analytics/events.js.map +1 -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/analytics/rybbit-node.d.ts.map +1 -1
- package/dist/analytics/rybbit-node.js +45 -5
- package/dist/analytics/rybbit-node.js.map +1 -1
- package/dist/core/document-target.d.ts.map +1 -1
- package/dist/core/document-target.js +1 -0
- package/dist/core/document-target.js.map +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +30 -12
- package/dist/core/server.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/feedback/nudge.d.ts +32 -0
- package/dist/feedback/nudge.d.ts.map +1 -0
- package/dist/feedback/nudge.js +192 -0
- package/dist/feedback/nudge.js.map +1 -0
- package/dist/index.js +2 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/export-paths.d.ts +2 -0
- package/dist/lib/export-paths.d.ts.map +1 -1
- package/dist/lib/export-paths.js +2 -0
- package/dist/lib/export-paths.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 +9 -0
- package/dist/prompts/instructions.js.map +1 -1
- package/dist/ui/agent/action-plan.d.ts.map +1 -1
- package/dist/ui/agent/action-plan.js +2 -7
- package/dist/ui/agent/action-plan.js.map +1 -1
- package/dist/ui/agent/api-key.d.ts.map +1 -1
- package/dist/ui/agent/api-key.js +2 -7
- package/dist/ui/agent/api-key.js.map +1 -1
- package/dist/ui/agent/mcp-transport.d.ts +2 -0
- package/dist/ui/agent/mcp-transport.d.ts.map +1 -1
- package/dist/ui/agent/mcp-transport.js +12 -8
- package/dist/ui/agent/mcp-transport.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/README.md
CHANGED
|
@@ -136,6 +136,12 @@ next. Common fixes: [`docs/troubleshooting.md`](docs/troubleshooting.md).
|
|
|
136
136
|
|
|
137
137
|
Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR.
|
|
138
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
|
+
|
|
139
145
|
## Maintainer
|
|
140
146
|
|
|
141
147
|
Built by **[Ali Sait Teke](https://alisait.com)** — [GitHub](https://github.com/alisaitteke) · [LinkedIn](https://www.linkedin.com/in/alisait/).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"AAqHA,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAsBtD;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAa3C;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAOtD;AAED,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAC3C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAc3C"}
|
package/dist/analytics/events.js
CHANGED
|
@@ -85,8 +85,16 @@ const ALLOWED_PROPERTY_KEYS = new Set([
|
|
|
85
85
|
'active_model',
|
|
86
86
|
'model',
|
|
87
87
|
'last_active_at',
|
|
88
|
+
'feedback_choice',
|
|
89
|
+
'has_suggestion',
|
|
90
|
+
'suggestion',
|
|
91
|
+
]);
|
|
92
|
+
const ANALYTICS_RESERVED_PROPERTY_KEYS = new Set([
|
|
93
|
+
'$current_url',
|
|
94
|
+
'$pathname',
|
|
95
|
+
'$page_title',
|
|
96
|
+
'$screen_name',
|
|
88
97
|
]);
|
|
89
|
-
const ANALYTICS_RESERVED_PROPERTY_KEYS = new Set(['$current_url', '$pathname', '$screen_name']);
|
|
90
98
|
const ARRAY_PROPERTY_KEYS = new Set(['tools_used', 'error_codes']);
|
|
91
99
|
/** Install-cohort fields written via identify traits only when not already set. */
|
|
92
100
|
const PERSON_ONCE_PROPERTY_KEYS = new Set([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,SAAS;IACT,QAAQ;IACR,KAAK;IACL,OAAO;IACP,QAAQ;IACR,UAAU;IACV,OAAO;IACP,eAAe;IACf,UAAU;IACV,MAAM;IACN,WAAW;IACX,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,aAAa;IACb,IAAI;IACJ,MAAM;IACN,cAAc;IACd,aAAa;IACb,aAAa;IACb,IAAI;IACJ,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,cAAc;IACd,MAAM;IACN,MAAM;IACN,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,WAAW;IACX,UAAU;IACV,cAAc;IACd,mBAAmB;IACnB,uBAAuB;IACvB,OAAO;IACP,eAAe;IACf,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,eAAe;IACf,sBAAsB;IACtB,wBAAwB;IACxB,iBAAiB;IACjB,SAAS;IACT,YAAY;IACZ,WAAW;IACX,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,YAAY;IACZ,aAAa;IACb,2BAA2B;IAC3B,4BAA4B;IAC5B,WAAW;IACX,aAAa;IACb,eAAe;IACf,iBAAiB;IACjB,wBAAwB;IACxB,aAAa;IACb,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,iBAAiB;IACjB,oBAAoB;IACpB,0BAA0B;IAC1B,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,OAAO;IACP,gBAAgB;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"rybbit-node.d.ts","sourceRoot":"","sources":["../../src/analytics/rybbit-node.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAA0B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"rybbit-node.d.ts","sourceRoot":"","sources":["../../src/analytics/rybbit-node.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAA0B,MAAM,YAAY,CAAC;AAgC5F,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;;IAezB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAepD,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAgBxD,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAyB9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ/B,OAAO,CAAC,OAAO;YAOD,IAAI;CA2BnB"}
|
|
@@ -22,6 +22,7 @@ const DROP_WHEN_OVER_BUDGET = [
|
|
|
22
22
|
'arch',
|
|
23
23
|
'os_type',
|
|
24
24
|
];
|
|
25
|
+
const PROTECTED_PROPERTY_KEYS = new Set(['feedback_choice', 'suggestion']);
|
|
25
26
|
export class RybbitNodeProvider {
|
|
26
27
|
logger = new Logger('Analytics');
|
|
27
28
|
distinctId;
|
|
@@ -86,6 +87,9 @@ export class RybbitNodeProvider {
|
|
|
86
87
|
pathname,
|
|
87
88
|
user_id: this.distinctId,
|
|
88
89
|
};
|
|
90
|
+
const pageTitle = resolvePageTitle(props);
|
|
91
|
+
if (pageTitle)
|
|
92
|
+
body.page_title = pageTitle;
|
|
89
93
|
if (eventName)
|
|
90
94
|
body.event_name = eventName;
|
|
91
95
|
const encoded = encodeProperties(props);
|
|
@@ -130,11 +134,19 @@ export class RybbitNodeProvider {
|
|
|
130
134
|
if (this.apiKey) {
|
|
131
135
|
headers.authorization = `Bearer ${this.apiKey}`;
|
|
132
136
|
}
|
|
133
|
-
await fetch(request.url, {
|
|
137
|
+
const response = await fetch(request.url, {
|
|
134
138
|
method: 'POST',
|
|
135
139
|
headers,
|
|
136
140
|
body: JSON.stringify(request.body),
|
|
137
141
|
});
|
|
142
|
+
if (!response.ok && request.url.includes('/track')) {
|
|
143
|
+
const eventName = typeof request.body.event_name === 'string'
|
|
144
|
+
? request.body.event_name
|
|
145
|
+
: typeof request.body.type === 'string'
|
|
146
|
+
? request.body.type
|
|
147
|
+
: 'unknown';
|
|
148
|
+
this.logger.warn(`Analytics /track returned ${response.status} for ${eventName}`);
|
|
149
|
+
}
|
|
138
150
|
}
|
|
139
151
|
catch (err) {
|
|
140
152
|
this.logger.debug('Failed to send analytics request', err);
|
|
@@ -158,6 +170,13 @@ function resolvePathname(properties) {
|
|
|
158
170
|
return '/ui';
|
|
159
171
|
return '/ui-server';
|
|
160
172
|
}
|
|
173
|
+
function resolvePageTitle(properties) {
|
|
174
|
+
const explicit = properties.$page_title;
|
|
175
|
+
if (typeof explicit !== 'string')
|
|
176
|
+
return undefined;
|
|
177
|
+
const trimmed = explicit.trim();
|
|
178
|
+
return trimmed || undefined;
|
|
179
|
+
}
|
|
161
180
|
function encodeProperties(properties) {
|
|
162
181
|
const compact = compactRecord(stripPayloadFields(properties));
|
|
163
182
|
if (Object.keys(compact).length === 0)
|
|
@@ -187,7 +206,7 @@ function compactRecord(properties) {
|
|
|
187
206
|
if (encoded.length <= PROPERTIES_MAX_CHARS)
|
|
188
207
|
return next;
|
|
189
208
|
for (const key of DROP_WHEN_OVER_BUDGET) {
|
|
190
|
-
if (!(key in next))
|
|
209
|
+
if (!(key in next) || PROTECTED_PROPERTY_KEYS.has(key))
|
|
191
210
|
continue;
|
|
192
211
|
delete next[key];
|
|
193
212
|
encoded = JSON.stringify(next);
|
|
@@ -195,6 +214,8 @@ function compactRecord(properties) {
|
|
|
195
214
|
return next;
|
|
196
215
|
}
|
|
197
216
|
for (const [key, value] of Object.entries(next)) {
|
|
217
|
+
if (PROTECTED_PROPERTY_KEYS.has(key))
|
|
218
|
+
continue;
|
|
198
219
|
if (typeof value !== 'string' || value.length < 40)
|
|
199
220
|
continue;
|
|
200
221
|
next[key] = `${value.slice(0, 80)}…`;
|
|
@@ -202,11 +223,30 @@ function compactRecord(properties) {
|
|
|
202
223
|
if (encoded.length <= PROPERTIES_MAX_CHARS)
|
|
203
224
|
return next;
|
|
204
225
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
226
|
+
const suggestion = next.suggestion;
|
|
227
|
+
if (encoded.length > PROPERTIES_MAX_CHARS &&
|
|
228
|
+
typeof suggestion === 'string' &&
|
|
229
|
+
suggestion.length >= 40) {
|
|
230
|
+
next.suggestion = `${suggestion.slice(0, 80)}…`;
|
|
231
|
+
encoded = JSON.stringify(next);
|
|
232
|
+
if (encoded.length <= PROPERTIES_MAX_CHARS)
|
|
233
|
+
return next;
|
|
234
|
+
}
|
|
235
|
+
while (encoded.length > PROPERTIES_MAX_CHARS) {
|
|
236
|
+
const droppable = Object.keys(next).filter((key) => !PROTECTED_PROPERTY_KEYS.has(key));
|
|
237
|
+
if (droppable.length === 0)
|
|
238
|
+
break;
|
|
239
|
+
delete next[droppable[droppable.length - 1]];
|
|
208
240
|
encoded = JSON.stringify(next);
|
|
209
241
|
}
|
|
242
|
+
if (encoded.length > PROPERTIES_MAX_CHARS && typeof next.suggestion === 'string') {
|
|
243
|
+
let keep = next.suggestion.length;
|
|
244
|
+
while (encoded.length > PROPERTIES_MAX_CHARS && keep > 1) {
|
|
245
|
+
keep = Math.max(1, Math.floor(keep / 2));
|
|
246
|
+
next.suggestion = `${next.suggestion.slice(0, keep)}…`;
|
|
247
|
+
encoded = JSON.stringify(next);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
210
250
|
return next;
|
|
211
251
|
}
|
|
212
252
|
function compactTraits(properties) {
|