@alisaitteke/photoshop-mcp 1.3.11 → 1.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +35 -1
  2. package/dist/analytics/events.d.ts +5 -3
  3. package/dist/analytics/events.d.ts.map +1 -1
  4. package/dist/analytics/events.js +47 -4
  5. package/dist/analytics/events.js.map +1 -1
  6. package/dist/analytics/identity.d.ts +3 -0
  7. package/dist/analytics/identity.d.ts.map +1 -1
  8. package/dist/analytics/identity.js +34 -0
  9. package/dist/analytics/identity.js.map +1 -1
  10. package/dist/analytics/index.d.ts +5 -1
  11. package/dist/analytics/index.d.ts.map +1 -1
  12. package/dist/analytics/index.js +13 -3
  13. package/dist/analytics/index.js.map +1 -1
  14. package/dist/analytics/install-cohorts.d.ts +12 -0
  15. package/dist/analytics/install-cohorts.d.ts.map +1 -0
  16. package/dist/analytics/install-cohorts.js +30 -0
  17. package/dist/analytics/install-cohorts.js.map +1 -0
  18. package/dist/analytics/mcp-client.d.ts.map +1 -1
  19. package/dist/analytics/mcp-client.js +5 -0
  20. package/dist/analytics/mcp-client.js.map +1 -1
  21. package/dist/analytics/mcp-session.d.ts.map +1 -1
  22. package/dist/analytics/mcp-session.js +21 -0
  23. package/dist/analytics/mcp-session.js.map +1 -1
  24. package/dist/analytics/milestones.d.ts +7 -0
  25. package/dist/analytics/milestones.d.ts.map +1 -0
  26. package/dist/analytics/milestones.js +23 -0
  27. package/dist/analytics/milestones.js.map +1 -0
  28. package/dist/analytics/mixpanel-node.d.ts +3 -0
  29. package/dist/analytics/mixpanel-node.d.ts.map +1 -1
  30. package/dist/analytics/mixpanel-node.js +52 -16
  31. package/dist/analytics/mixpanel-node.js.map +1 -1
  32. package/dist/analytics/noop.d.ts +1 -0
  33. package/dist/analytics/noop.d.ts.map +1 -1
  34. package/dist/analytics/noop.js +3 -0
  35. package/dist/analytics/noop.js.map +1 -1
  36. package/dist/analytics/posthog-node.d.ts +1 -0
  37. package/dist/analytics/posthog-node.d.ts.map +1 -1
  38. package/dist/analytics/posthog-node.js +21 -1
  39. package/dist/analytics/posthog-node.js.map +1 -1
  40. package/dist/analytics/runtime-env.d.ts +2 -0
  41. package/dist/analytics/runtime-env.d.ts.map +1 -1
  42. package/dist/analytics/runtime-env.js +4 -1
  43. package/dist/analytics/runtime-env.js.map +1 -1
  44. package/dist/analytics/types.d.ts +6 -1
  45. package/dist/analytics/types.d.ts.map +1 -1
  46. package/dist/core/session.d.ts.map +1 -1
  47. package/dist/core/session.js +6 -1
  48. package/dist/core/session.js.map +1 -1
  49. package/dist/ui/cli.js +6 -0
  50. package/dist/ui/cli.js.map +1 -1
  51. package/dist/ui/server.d.ts.map +1 -1
  52. package/dist/ui/server.js +1 -0
  53. package/dist/ui/server.js.map +1 -1
  54. package/package.json +13 -5
  55. package/web/dist/assets/{index-U5ptYNMN.js → index-DvGX0LLy.js} +77 -77
  56. package/web/dist/index.html +6 -1
package/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Photoshop MCP Server
2
2
 
3
+ <p align="center">
4
+ <a href="https://github.com/alisaitteke/photoshop-mcp">
5
+ <img src="./images/readme-hero.png" alt="Photoshop MCP — AI-driven Photoshop automation" width="100%" />
6
+ </a>
7
+ </p>
8
+
3
9
  *v1.1+ — recipe workflows, fewer round-trips, snappier sessions. Standalone UI ships **Action Plan (beta)** for plan-then-execute runs.*
4
10
 
5
11
  > **Note:** This is an unofficial, community-maintained project and is not affiliated with or endorsed by Adobe Inc.
@@ -13,6 +19,14 @@
13
19
 
14
20
  A Model Context Protocol (MCP) server that enables AI assistants like Claude and Cursor to control Adobe Photoshop programmatically. This allows you to create designs, manipulate images, and automate Photoshop workflows through natural language commands while working in your IDE — or through the bundled **standalone web UI**, which supports both API keys and CLI subscription accounts (Claude Code / Gemini CLI). The UI also offers an opt-in **Action Plan (beta)** mode that plans every Photoshop step in one LLM call, then runs them in a single pass.
15
21
 
22
+ ## Why this exists
23
+
24
+ Designers and developers want to drive Photoshop from AI assistants, but raw ExtendScript calls are brittle: agents waste tokens on trial-and-error, layer types break filters, and one failed command leaves the document in an unknown state.
25
+
26
+ Photoshop MCP adds **state awareness** (`get_state`, `get_preview`, `get_capabilities`), **recipe tools** that wrap multi-step outcomes in a single undo step, and **structured error envelopes** so agents know what to try next. The optional standalone UI and Action Plan mode reduce round-trips for longer workflows — so natural language can actually ship pixels, not just suggest them.
27
+
28
+ Engineering deep-dive: [`docs/architecture.md`](docs/architecture.md).
29
+
16
30
  ## 🖥️ Standalone UI (no IDE required)
17
31
 
18
32
  Don't want to wire this into Claude Desktop or Cursor? The same package ships a
@@ -636,13 +650,33 @@ From-source setup, build, lint, integration tests (with latest results), and usa
636
650
 
637
651
  ## Architecture
638
652
 
639
- Repository layout and module map:
653
+ System design, data flow, platform abstraction, and UI agent modes:
640
654
  [`docs/architecture.md`](docs/architecture.md).
641
655
 
656
+ Sharing on LinkedIn or social? Use [`images/og-social.png`](images/og-social.png) and
657
+ [`docs/social-preview.md`](docs/social-preview.md) for OG setup and post copy.
658
+
642
659
  ## Contributing
643
660
 
644
661
  Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR.
645
662
 
663
+ ## About the maintainer
664
+
665
+ **[Ali Sait Teke](https://alisait.com)** — Full-Stack engineer & AI-era software architect
666
+ (Python, Go, Node.js, React, Next.js, Vue).
667
+
668
+ This project started from a practical question: *how do you make Photoshop reliably
669
+ controllable by LLMs without fragile one-off scripts?* It grew into an MCP server
670
+ with 80 tools, a recipe/prompt layer for dependable multi-step workflows, and a
671
+ local web UI so creative work does not require an IDE.
672
+
673
+ **What this codebase demonstrates:** TypeScript systems design, MCP protocol
674
+ integration, cross-platform desktop automation (macOS AppleScript / Windows COM),
675
+ structured error recovery for agentic loops, and a production-minded local-first UI
676
+ (Vue 3 + Hono + SQLite).
677
+
678
+ - [Portfolio](https://alisait.com) · [GitHub](https://github.com/alisaitteke) · [LinkedIn](https://www.linkedin.com/in/alisait/)
679
+
646
680
  ## License
647
681
 
648
682
  MIT
@@ -1,5 +1,7 @@
1
- export declare function sanitizeAnalyticsProperties(properties: Record<string, unknown> | undefined): Record<string, string | number | boolean>;
2
- export declare function buildRuntimeProperties(properties: Record<string, unknown> | undefined): Record<string, string | number | boolean>;
3
- /** Person-profile fields merged on PostHog identify() — includes install-level hardware signals. */
1
+ export declare function sanitizeAnalyticsProperties(properties: Record<string, unknown> | undefined): Record<string, string | number | boolean | string[]>;
2
+ /** Sanitize person.set_once cohort properties (not attached to every event). */
3
+ export declare function sanitizePersonOnceProperties(properties: Record<string, unknown> | undefined): Record<string, string | number | boolean>;
4
+ export declare function buildRuntimeProperties(properties: Record<string, unknown> | undefined): Record<string, string | number | boolean | string[]>;
5
+ /** Person-profile fields merged on identify() — includes install-level hardware signals. */
4
6
  export declare function buildPersonIdentifyProperties(properties?: Record<string, unknown>): Record<string, string | number | boolean>;
5
7
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"AAqGA,wBAAgB,2BAA2B,CACzC,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,CAAC,CAO3C;AAED,oGAAoG;AACpG,wBAAgB,6BAA6B,CAC3C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAK3C"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"AAiHA,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"}
@@ -1,6 +1,6 @@
1
1
  import { getServerAnalyticsContext } from './context.js';
2
2
  import { getLaunchMethod } from './launch-method.js';
3
- import { buildAnonymousRuntimeEnv, getTotalRamGb } from './runtime-env.js';
3
+ import { buildAnonymousRuntimeEnv, getMemoryGbBucket, getTotalRamGb } from './runtime-env.js';
4
4
  const BLOCKED_PROPERTY_KEYS = new Set([
5
5
  'api_key',
6
6
  'apikey',
@@ -73,6 +73,9 @@ const ALLOWED_PROPERTY_KEYS = new Set([
73
73
  'unique_tools_count',
74
74
  'tool_usage_summary',
75
75
  'error_codes_summary',
76
+ 'tools_used',
77
+ 'error_codes',
78
+ 'had_errors',
76
79
  'batch_flush_reason',
77
80
  'mcp_client_name',
78
81
  'mcp_client_version',
@@ -88,6 +91,13 @@ const ANALYTICS_RESERVED_PROPERTY_KEYS = new Set([
88
91
  '$pathname',
89
92
  '$screen_name',
90
93
  ]);
94
+ const ARRAY_PROPERTY_KEYS = new Set(['tools_used', 'error_codes']);
95
+ /** Install-cohort fields written via people.set_once / PostHog $set_once only. */
96
+ const PERSON_ONCE_PROPERTY_KEYS = new Set([
97
+ 'first_install_at',
98
+ 'first_usage_surface',
99
+ 'first_mcp_client_name',
100
+ ]);
91
101
  function isAllowedAnalyticsPropertyKey(key) {
92
102
  const normalized = key.toLowerCase();
93
103
  if (BLOCKED_PROPERTY_KEYS.has(normalized))
@@ -105,13 +115,38 @@ export function sanitizeAnalyticsProperties(properties) {
105
115
  continue;
106
116
  if (value === null || value === undefined)
107
117
  continue;
118
+ const outKey = ANALYTICS_RESERVED_PROPERTY_KEYS.has(key) ? key : key.toLowerCase();
119
+ if (Array.isArray(value)) {
120
+ if (!ARRAY_PROPERTY_KEYS.has(outKey))
121
+ continue;
122
+ if (!value.every((item) => typeof item === 'string'))
123
+ continue;
124
+ out[outKey] = value;
125
+ continue;
126
+ }
108
127
  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
109
- const outKey = ANALYTICS_RESERVED_PROPERTY_KEYS.has(key) ? key : key.toLowerCase();
110
128
  out[outKey] = value;
111
129
  }
112
130
  }
113
131
  return out;
114
132
  }
133
+ /** Sanitize person.set_once cohort properties (not attached to every event). */
134
+ export function sanitizePersonOnceProperties(properties) {
135
+ if (!properties)
136
+ return {};
137
+ const out = {};
138
+ for (const [key, value] of Object.entries(properties)) {
139
+ const normalized = key.toLowerCase();
140
+ if (!PERSON_ONCE_PROPERTY_KEYS.has(normalized))
141
+ continue;
142
+ if (value === null || value === undefined)
143
+ continue;
144
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
145
+ out[normalized] = value;
146
+ }
147
+ }
148
+ return out;
149
+ }
115
150
  export function buildRuntimeProperties(properties) {
116
151
  return {
117
152
  ...buildAnonymousRuntimeEnv(),
@@ -120,11 +155,19 @@ export function buildRuntimeProperties(properties) {
120
155
  ...sanitizeAnalyticsProperties(properties),
121
156
  };
122
157
  }
123
- /** Person-profile fields merged on PostHog identify() — includes install-level hardware signals. */
158
+ /** Person-profile fields merged on identify() — includes install-level hardware signals. */
124
159
  export function buildPersonIdentifyProperties(properties) {
125
- return buildRuntimeProperties({
160
+ const merged = buildRuntimeProperties({
126
161
  total_ram_gb: getTotalRamGb(),
162
+ memory_gb: getMemoryGbBucket(),
127
163
  ...properties,
128
164
  });
165
+ const out = {};
166
+ for (const [key, value] of Object.entries(merged)) {
167
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
168
+ out[key] = value;
169
+ }
170
+ }
171
+ return out;
129
172
  }
130
173
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ export declare function isAnalyticsEnabled(): boolean;
6
6
  export declare function getBetaTelemetryState(): BetaTelemetryState;
7
7
  export declare function isBetaTelemetryOptIn(): boolean;
8
8
  export declare function setBetaTelemetryChoice(optedIn: boolean): void;
9
+ /** Returns whether a one-time funnel milestone was already captured for this install. */
10
+ export declare function hasAnalyticsMilestone(key: string): boolean;
11
+ export declare function markAnalyticsMilestone(key: string): void;
9
12
  /** Accumulates usage surfaces on the anonymous person profile (mcp, server, web). */
10
13
  export declare function recordUsageSurface(surface: string): string;
11
14
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/analytics/identity.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA0FrD,wBAAgB,qBAAqB,IAAI,MAAM,CAsB9C;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAI1D;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAqBD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAW1D;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS7D;AA6BD,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ1D"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/analytics/identity.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA4FrD,wBAAgB,qBAAqB,IAAI,MAAM,CAsB9C;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAI1D;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAqBD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAW1D;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS7D;AAqDD,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ1D"}
@@ -9,6 +9,7 @@ const OPT_OUT_KEY = 'analytics_opt_out';
9
9
  const BETA_TELEMETRY_OPT_IN_KEY = 'beta_telemetry_opt_in';
10
10
  const BETA_TELEMETRY_PROMPT_ANSWERED_KEY = 'beta_telemetry_prompt_answered';
11
11
  const USAGE_SURFACES_KEY = 'analytics_usage_surfaces';
12
+ const MILESTONES_KEY = 'analytics_milestones';
12
13
  const STORE_FILE = 'analytics-store.json';
13
14
  let memoryDistinctId = null;
14
15
  let dbAvailable = null;
@@ -192,6 +193,39 @@ function writeUsageSurfacesToStore(surfaces) {
192
193
  const store = readFileStore();
193
194
  writeFileStore({ ...store, usageSurfaces: surfaces });
194
195
  }
196
+ function readMilestonesFromStore() {
197
+ if (canUseKv()) {
198
+ try {
199
+ const fromKv = kvGet(MILESTONES_KEY);
200
+ if (fromKv && typeof fromKv === 'object')
201
+ return fromKv;
202
+ }
203
+ catch {
204
+ dbAvailable = false;
205
+ }
206
+ }
207
+ return readFileStore().milestones ?? {};
208
+ }
209
+ function writeMilestonesToStore(milestones) {
210
+ if (canUseKv()) {
211
+ try {
212
+ kvSet(MILESTONES_KEY, milestones);
213
+ }
214
+ catch {
215
+ dbAvailable = false;
216
+ }
217
+ }
218
+ const store = readFileStore();
219
+ writeFileStore({ ...store, milestones });
220
+ }
221
+ /** Returns whether a one-time funnel milestone was already captured for this install. */
222
+ export function hasAnalyticsMilestone(key) {
223
+ return readMilestonesFromStore()[key] === true;
224
+ }
225
+ export function markAnalyticsMilestone(key) {
226
+ const milestones = { ...readMilestonesFromStore(), [key]: true };
227
+ writeMilestonesToStore(milestones);
228
+ }
195
229
  /** Accumulates usage surfaces on the anonymous person profile (mcp, server, web). */
196
230
  export function recordUsageSurface(surface) {
197
231
  const normalized = surface.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/analytics/identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/analytics/identity.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,9 @@ import type { AnalyticsEvent, AnalyticsProvider, AnalyticsRuntimeConfig, BetaTel
9
9
  export type { McpShutdownReason } from './mcp-session.js';
10
10
  /** Persist the install ID and register one anonymous analytics person per process. */
11
11
  export declare function ensureAnalyticsIdentity(): void;
12
- export declare function capture(name: string, properties?: Record<string, unknown>): void;
12
+ export declare function capture(name: string, properties?: Record<string, unknown>, options?: {
13
+ insertId?: string;
14
+ }): void;
13
15
  export declare function identifyAnalyticsPerson(properties?: Record<string, unknown>): void;
14
16
  /** Refresh the anonymous person profile when Photoshop version becomes known. */
15
17
  export declare function identifyPhotoshopVersion(version: string): void;
@@ -17,6 +19,8 @@ export declare function identifyPhotoshopVersion(version: string): void;
17
19
  export declare function identifyUiModelSelection(providerId: string, model: string): void;
18
20
  export declare function shutdownAnalytics(): Promise<void>;
19
21
  export declare function getAnalyticsRuntimeConfig(): AnalyticsRuntimeConfig;
22
+ export { captureAnalyticsMilestoneOnce, } from './milestones.js';
23
+ export type { AnalyticsMilestone } from './milestones.js';
20
24
  export { captureBetaChatTurn, captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, getAnalytics, getAppVersion, getBetaTelemetryState, onMcpClientConnected, onMcpClientDisconnected, recordMcpToolCall, resetAnalyticsProvider, setBetaTelemetryChoice, startMcpAnalyticsSession, };
21
25
  export type { AnalyticsEvent, AnalyticsProvider, AnalyticsRuntimeConfig, BetaTelemetryState, UsageSurface, };
22
26
  //# 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;AAWjD,OAAO,EACL,qBAAqB,EAIrB,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxE,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,GACnC,IAAI,CAMN;AAED,wBAAgB,uBAAuB,CACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,IAAI,CAQN;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,CA0BlE;AAED,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;AAYjD,OAAO,EACL,qBAAqB,EAIrB,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxE,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,CACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,IAAI,CAgBN;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,CA0BlE;AAED,OAAO,EACL,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AACzB,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"}
@@ -2,6 +2,7 @@ import { captureBetaChatTurn } from './beta-telemetry.js';
2
2
  import { getAppVersion } from './app-version.js';
3
3
  import { hasAnalyticsKey, resolveAnalyticsProvider, resolveMixpanelApiHost, resolveMixpanelToken, resolvePostHogApiHost, resolvePostHogKey, resolvePostHogUiHost, } from './config.js';
4
4
  import { buildPersonIdentifyProperties, buildRuntimeProperties } from './events.js';
5
+ import { applyInstallCohortPersonOnce } from './install-cohorts.js';
5
6
  import { getBetaTelemetryState, getOrCreateDistinctId, isAnalyticsEnabled, recordUsageSurface, setBetaTelemetryChoice, } from './identity.js';
6
7
  import { onMcpClientConnected, onMcpClientDisconnected, } from './mcp-client.js';
7
8
  import { endMcpAnalyticsSession, recordMcpToolCall, startMcpAnalyticsSession, } from './mcp-session.js';
@@ -14,22 +15,30 @@ export function ensureAnalyticsIdentity() {
14
15
  getOrCreateDistinctId();
15
16
  getAnalytics();
16
17
  }
17
- export function capture(name, properties) {
18
+ export function capture(name, properties, options) {
18
19
  if (!isAnalyticsEnabled() || !hasAnalyticsKey())
19
20
  return;
20
21
  getAnalytics().capture({
21
22
  name,
22
23
  properties: buildRuntimeProperties(properties),
24
+ insertId: options?.insertId,
23
25
  });
24
26
  }
25
27
  export function identifyAnalyticsPerson(properties) {
26
28
  if (!isAnalyticsEnabled() || !hasAnalyticsKey())
27
29
  return;
28
30
  const props = { ...(properties ?? {}) };
29
- if (typeof props.usage_surface === 'string') {
30
- props.usage_surfaces = recordUsageSurface(props.usage_surface);
31
+ const usageSurface = typeof props.usage_surface === 'string' ? props.usage_surface : undefined;
32
+ if (usageSurface) {
33
+ props.usage_surfaces = recordUsageSurface(usageSurface);
31
34
  delete props.usage_surface;
32
35
  }
36
+ applyInstallCohortPersonOnce({
37
+ ...(usageSurface ? { usageSurface } : {}),
38
+ ...(typeof props.mcp_client_name === 'string'
39
+ ? { mcpClientName: props.mcp_client_name }
40
+ : {}),
41
+ });
33
42
  getAnalytics().identify(buildPersonIdentifyProperties(props));
34
43
  }
35
44
  /** Refresh the anonymous person profile when Photoshop version becomes known. */
@@ -82,5 +91,6 @@ export function getAnalyticsRuntimeConfig() {
82
91
  betaTelemetryPromptAnswered: beta.betaTelemetryPromptAnswered,
83
92
  };
84
93
  }
94
+ export { captureAnalyticsMilestoneOnce, } from './milestones.js';
85
95
  export { captureBetaChatTurn, captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, getAnalytics, getAppVersion, getBetaTelemetryState, onMcpClientConnected, onMcpClientDisconnected, recordMcpToolCall, resetAnalyticsProvider, setBetaTelemetryChoice, startMcpAnalyticsSession, };
86
96
  //# 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,12 @@
1
+ export type InstallUsageSurface = 'mcp' | 'server' | 'web';
2
+ /** Maps internal usage_surface values to install-cohort person properties. */
3
+ export declare function normalizeInstallUsageSurface(surface: string): InstallUsageSurface;
4
+ /**
5
+ * Mixpanel/PostHog people.set_once install cohort fields — safe to call repeatedly.
6
+ * See docs/anonymous-usage-analytics.md (person profile cohorts).
7
+ */
8
+ export declare function applyInstallCohortPersonOnce(params: {
9
+ usageSurface?: string;
10
+ mcpClientName?: string;
11
+ }): void;
12
+ //# sourceMappingURL=install-cohorts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-cohorts.d.ts","sourceRoot":"","sources":["../../src/analytics/install-cohorts.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE3D,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAIjF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CAeP"}
@@ -0,0 +1,30 @@
1
+ import { hasAnalyticsKey } from './config.js';
2
+ import { isAnalyticsEnabled } from './identity.js';
3
+ import { getAnalytics } from './provider.js';
4
+ /** Maps internal usage_surface values to install-cohort person properties. */
5
+ export function normalizeInstallUsageSurface(surface) {
6
+ if (surface === 'ui' || surface === 'web')
7
+ return 'web';
8
+ if (surface === 'mcp' || surface === 'server')
9
+ return surface;
10
+ return 'server';
11
+ }
12
+ /**
13
+ * Mixpanel/PostHog people.set_once install cohort fields — safe to call repeatedly.
14
+ * See docs/anonymous-usage-analytics.md (person profile cohorts).
15
+ */
16
+ export function applyInstallCohortPersonOnce(params) {
17
+ if (!isAnalyticsEnabled() || !hasAnalyticsKey())
18
+ return;
19
+ const once = {
20
+ first_install_at: new Date().toISOString(),
21
+ };
22
+ if (params.usageSurface) {
23
+ once.first_usage_surface = normalizeInstallUsageSurface(params.usageSurface);
24
+ }
25
+ if (params.mcpClientName?.trim()) {
26
+ once.first_mcp_client_name = params.mcpClientName.trim();
27
+ }
28
+ getAnalytics().setPersonOnce(once);
29
+ }
30
+ //# sourceMappingURL=install-cohorts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-cohorts.js","sourceRoot":"","sources":["../../src/analytics/install-cohorts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAI7C,8EAA8E;AAC9E,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC1D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC9D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAG5C;IACC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO;IAExD,MAAM,IAAI,GAA2B;QACnC,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC3C,CAAC;IAEF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,GAAG,4BAA4B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC3D,CAAC;IAED,YAAY,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-client.ts"],"names":[],"mappings":"AAmCA;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACpD,IAAI,CAiBN;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,IAAI,CAc9C"}
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-client.ts"],"names":[],"mappings":"AAoCA;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACpD,IAAI,CAsBN;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,IAAI,CAc9C"}
@@ -1,5 +1,6 @@
1
1
  import { hasAnalyticsKey } from './config.js';
2
2
  import { buildPersonIdentifyProperties, buildRuntimeProperties } from './events.js';
3
+ import { applyInstallCohortPersonOnce } from './install-cohorts.js';
3
4
  import { isAnalyticsEnabled, recordUsageSurface } from './identity.js';
4
5
  import { clearActiveMcpClient, getActiveMcpClient, hasActiveMcpClient, setActiveMcpClient, } from './mcp-client-state.js';
5
6
  import { flushMcpToolBatchOnClientDisconnect } from './mcp-session.js';
@@ -36,6 +37,10 @@ export function onMcpClientConnected(client) {
36
37
  mcp_client_connect_count: clientConnectCount,
37
38
  event_source: 'mcp',
38
39
  });
40
+ applyInstallCohortPersonOnce({
41
+ usageSurface: 'mcp',
42
+ mcpClientName: client?.name,
43
+ });
39
44
  identifyMcpClientPerson({
40
45
  usage_surface: 'mcp',
41
46
  mcp_client_name: client?.name ?? 'unknown',
@@ -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,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,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,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAE3B,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,IAAI,CAAC,CAAC;IACxB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,qBAAqB,CAAC,sBAAsB,EAAE;QAC5C,eAAe,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS;QAC1C,kBAAkB,EAAE,MAAM,EAAE,OAAO,IAAI,SAAS;QAChD,wBAAwB,EAAE,kBAAkB;QAC5C,YAAY,EAAE,KAAK;KACpB,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,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,mCAAmC,EAAE,CAAC;IAEtC,qBAAqB,CAAC,yBAAyB,EAAE;QAC/C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,oBAAoB,EAAE,CAAC;IACvB,KAAK,oBAAoB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/analytics/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-session.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAC/B,UAAU,GACV,UAAU,GACV,UAAU,GACV,mBAAmB,CAAC;AAgFxB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CA+BvE;AAmBD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;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,CAuBP;AAED,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CActE"}
1
+ {"version":3,"file":"mcp-session.d.ts","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAC/B,UAAU,GACV,UAAU,GACV,UAAU,GACV,mBAAmB,CAAC;AA0FxB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAoCvE;AAmBD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;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,CA8BP;AAED,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CActE"}
@@ -2,6 +2,7 @@ import { hasAnalyticsKey } from './config.js';
2
2
  import { buildRuntimeProperties } from './events.js';
3
3
  import { isAnalyticsEnabled } from './identity.js';
4
4
  import { getActiveMcpClient } from './mcp-client-state.js';
5
+ import { captureAnalyticsMilestoneOnce } from './milestones.js';
5
6
  import { captureMcpPageleave } from './pageview.js';
6
7
  import { flushAnalyticsClient, getAnalytics } from './provider.js';
7
8
  /** Flush after the last tool in a burst — fits IDE agent turns (LLM pauses between bursts). */
@@ -66,6 +67,15 @@ function formatErrorCodesSummary(batch) {
66
67
  .map(([code, count]) => `${code}:${count}`)
67
68
  .join(',');
68
69
  }
70
+ function collectErrorCodes(batch) {
71
+ const codes = new Set();
72
+ for (const entry of batch.values()) {
73
+ for (const code of entry.errors.keys()) {
74
+ codes.add(code);
75
+ }
76
+ }
77
+ return [...codes].sort();
78
+ }
69
79
  export function flushMcpToolBatch(reason) {
70
80
  if (toolBatch.size === 0)
71
81
  return;
@@ -78,12 +88,17 @@ export function flushMcpToolBatch(reason) {
78
88
  totalDurationMs += entry.durationMs;
79
89
  }
80
90
  const errorCodesSummary = formatErrorCodesSummary(toolBatch);
91
+ const errorCodes = collectErrorCodes(toolBatch);
92
+ const toolsUsed = [...toolBatch.keys()].sort();
81
93
  captureMcpEvent('mcp_tool_batch', {
82
94
  tools_called_count: toolsCalledCount,
83
95
  tools_error_count: toolsErrorCount,
84
96
  unique_tools_count: toolBatch.size,
85
97
  tool_usage_summary: formatUsageSummary(toolBatch),
98
+ tools_used: toolsUsed,
99
+ had_errors: toolsErrorCount > 0,
86
100
  ...(errorCodesSummary ? { error_codes_summary: errorCodesSummary } : {}),
101
+ ...(errorCodes.length > 0 ? { error_codes: errorCodes } : {}),
87
102
  batch_flush_reason: reason,
88
103
  duration_ms: totalDurationMs,
89
104
  event_source: 'mcp',
@@ -129,6 +144,12 @@ export function recordMcpToolCall(params) {
129
144
  }
130
145
  existing.durationMs += params.durationMs;
131
146
  toolBatch.set(params.toolName, existing);
147
+ if (params.ok) {
148
+ captureAnalyticsMilestoneOnce('mcp_first_tool_success', {
149
+ tool_name: params.toolName,
150
+ event_source: 'mcp',
151
+ });
152
+ }
132
153
  scheduleBatchFlush();
133
154
  }
134
155
  export function flushMcpToolBatchOnClientDisconnect() {
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-session.js","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-session.js","sourceRoot":"","sources":["../../src/analytics/mcp-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type AnalyticsMilestone = 'mcp_first_tool_success' | 'mcp_photoshop_first_connected';
2
+ /**
3
+ * Fires a one-time funnel milestone per install. Uses a persisted flag plus a
4
+ * deterministic $insert_id so Mixpanel deduplicates accidental double-sends.
5
+ */
6
+ export declare function captureAnalyticsMilestoneOnce(milestone: AnalyticsMilestone, properties?: Record<string, unknown>): boolean;
7
+ //# sourceMappingURL=milestones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milestones.d.ts","sourceRoot":"","sources":["../../src/analytics/milestones.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,kBAAkB,GAC1B,wBAAwB,GACxB,+BAA+B,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,kBAAkB,EAC7B,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,OAAO,CAYT"}
@@ -0,0 +1,23 @@
1
+ import { hasAnalyticsKey } from './config.js';
2
+ import { buildRuntimeProperties } from './events.js';
3
+ import { getOrCreateDistinctId, hasAnalyticsMilestone, isAnalyticsEnabled, markAnalyticsMilestone, } from './identity.js';
4
+ import { getAnalytics } from './provider.js';
5
+ /**
6
+ * Fires a one-time funnel milestone per install. Uses a persisted flag plus a
7
+ * deterministic $insert_id so Mixpanel deduplicates accidental double-sends.
8
+ */
9
+ export function captureAnalyticsMilestoneOnce(milestone, properties = {}) {
10
+ if (!isAnalyticsEnabled() || !hasAnalyticsKey())
11
+ return false;
12
+ if (hasAnalyticsMilestone(milestone))
13
+ return false;
14
+ markAnalyticsMilestone(milestone);
15
+ const distinctId = getOrCreateDistinctId();
16
+ getAnalytics().capture({
17
+ name: milestone,
18
+ properties: buildRuntimeProperties(properties),
19
+ insertId: `${distinctId}:${milestone}`,
20
+ });
21
+ return true;
22
+ }
23
+ //# sourceMappingURL=milestones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milestones.js","sourceRoot":"","sources":["../../src/analytics/milestones.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAC3C,SAA6B,EAC7B,aAAsC,EAAE;IAExC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,qBAAqB,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnD,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAC3C,YAAY,EAAE,CAAC,OAAO,CAAC;QACrB,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,sBAAsB,CAAC,UAAU,CAAC;QAC9C,QAAQ,EAAE,GAAG,UAAU,IAAI,SAAS,EAAE;KACvC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}