@alisaitteke/photoshop-mcp 1.3.10 → 1.3.12
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 +8 -4
- package/dist/analytics/config.d.ts +7 -0
- package/dist/analytics/config.d.ts.map +1 -1
- package/dist/analytics/config.js +27 -0
- package/dist/analytics/config.js.map +1 -1
- package/dist/analytics/events.d.ts +5 -3
- package/dist/analytics/events.d.ts.map +1 -1
- package/dist/analytics/events.js +49 -6
- package/dist/analytics/events.js.map +1 -1
- package/dist/analytics/identity.d.ts +3 -0
- package/dist/analytics/identity.d.ts.map +1 -1
- package/dist/analytics/identity.js +36 -2
- package/dist/analytics/identity.js.map +1 -1
- package/dist/analytics/index.d.ts +6 -2
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +33 -9
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/install-cohorts.d.ts +12 -0
- package/dist/analytics/install-cohorts.d.ts.map +1 -0
- package/dist/analytics/install-cohorts.js +30 -0
- package/dist/analytics/install-cohorts.js.map +1 -0
- package/dist/analytics/mcp-client.d.ts.map +1 -1
- package/dist/analytics/mcp-client.js +8 -3
- package/dist/analytics/mcp-client.js.map +1 -1
- package/dist/analytics/mcp-session.d.ts.map +1 -1
- package/dist/analytics/mcp-session.js +23 -2
- package/dist/analytics/mcp-session.js.map +1 -1
- package/dist/analytics/milestones.d.ts +7 -0
- package/dist/analytics/milestones.d.ts.map +1 -0
- package/dist/analytics/milestones.js +23 -0
- package/dist/analytics/milestones.js.map +1 -0
- package/dist/analytics/mixpanel-node.d.ts +16 -0
- package/dist/analytics/mixpanel-node.d.ts.map +1 -0
- package/dist/analytics/mixpanel-node.js +88 -0
- package/dist/analytics/mixpanel-node.js.map +1 -0
- package/dist/analytics/noop.d.ts +1 -0
- package/dist/analytics/noop.d.ts.map +1 -1
- package/dist/analytics/noop.js +3 -0
- package/dist/analytics/noop.js.map +1 -1
- package/dist/analytics/pageview.js +2 -2
- package/dist/analytics/pageview.js.map +1 -1
- package/dist/analytics/posthog-node.d.ts +1 -0
- package/dist/analytics/posthog-node.d.ts.map +1 -1
- package/dist/analytics/posthog-node.js +21 -1
- package/dist/analytics/posthog-node.js.map +1 -1
- package/dist/analytics/provider.d.ts.map +1 -1
- package/dist/analytics/provider.js +9 -3
- package/dist/analytics/provider.js.map +1 -1
- package/dist/analytics/runtime-env.d.ts +2 -0
- package/dist/analytics/runtime-env.d.ts.map +1 -1
- package/dist/analytics/runtime-env.js +4 -1
- package/dist/analytics/runtime-env.js.map +1 -1
- package/dist/analytics/types.d.ts +8 -2
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +6 -1
- package/dist/core/session.js.map +1 -1
- package/dist/ui/cli.js +6 -0
- package/dist/ui/cli.js.map +1 -1
- package/dist/ui/config.d.ts +17 -1
- package/dist/ui/config.d.ts.map +1 -1
- package/dist/ui/config.js +12 -0
- package/dist/ui/config.js.map +1 -1
- package/dist/ui/providers/custom.d.ts +3 -0
- package/dist/ui/providers/custom.d.ts.map +1 -0
- package/dist/ui/providers/custom.js +67 -0
- package/dist/ui/providers/custom.js.map +1 -0
- package/dist/ui/providers/registry.d.ts.map +1 -1
- package/dist/ui/providers/registry.js +2 -0
- package/dist/ui/providers/registry.js.map +1 -1
- package/dist/ui/providers/types.d.ts +14 -1
- package/dist/ui/providers/types.d.ts.map +1 -1
- package/dist/ui/server.d.ts.map +1 -1
- package/dist/ui/server.js +65 -7
- package/dist/ui/server.js.map +1 -1
- package/package.json +2 -1
- package/web/dist/assets/index-CyledTKU.js +346 -0
- package/web/dist/index.html +1 -1
- package/web/dist/assets/index-n0ymP-Cw.js +0 -249
package/README.md
CHANGED
|
@@ -526,10 +526,14 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
|
|
|
526
526
|
|
|
527
527
|
- `PHOTOSHOP_PATH`: (Optional) Specify custom Photoshop installation path
|
|
528
528
|
- `LOG_LEVEL`: Logging level (0=DEBUG, 1=INFO, 2=WARN, 3=ERROR)
|
|
529
|
-
- `
|
|
530
|
-
- `
|
|
531
|
-
- `
|
|
532
|
-
- `
|
|
529
|
+
- `ANALYTICS_DISABLED`: Set to `1` or `true` to disable anonymous usage analytics entirely
|
|
530
|
+
- `POSTHOG_DISABLED`: Legacy alias for `ANALYTICS_DISABLED`
|
|
531
|
+
- `ANALYTICS_PROVIDER`: Analytics backend — `mixpanel` (default) or `posthog` (rollback)
|
|
532
|
+
- `MIXPANEL_TOKEN`: (Optional) Override the Mixpanel project token
|
|
533
|
+
- `MIXPANEL_API_HOST`: (Optional) Mixpanel ingest host (default: `https://api-eu.mixpanel.com`)
|
|
534
|
+
- `POSTHOG_KEY`: (Optional, legacy) PostHog project key — used only when `ANALYTICS_PROVIDER=posthog`
|
|
535
|
+
- `POSTHOG_API_HOST`: (Optional, legacy) PostHog ingest host (default: `https://a.alisait.com`)
|
|
536
|
+
- `POSTHOG_UI_HOST`: (Optional, legacy) PostHog UI host (default: `https://eu.posthog.com`)
|
|
533
537
|
|
|
534
538
|
## Available Tools
|
|
535
539
|
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
export type AnalyticsProviderName = 'mixpanel' | 'posthog';
|
|
1
2
|
export declare function isPostHogDisabledByEnv(): boolean;
|
|
3
|
+
export declare function isAnalyticsDisabledByEnv(): boolean;
|
|
4
|
+
export declare function resolveAnalyticsProvider(): AnalyticsProviderName;
|
|
5
|
+
export declare function resolveMixpanelToken(): string;
|
|
6
|
+
export declare function resolveMixpanelApiHost(): string;
|
|
7
|
+
export declare function resolveMixpanelNodeHost(): string;
|
|
2
8
|
export declare function resolvePostHogKey(): string;
|
|
3
9
|
export declare function resolvePostHogApiHost(): string;
|
|
4
10
|
export declare function resolvePostHogUiHost(): string;
|
|
5
11
|
export declare function hasPostHogKey(): boolean;
|
|
12
|
+
export declare function hasAnalyticsKey(): boolean;
|
|
6
13
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,SAAS,CAAC;AAO3D,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAIhE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAKzC"}
|
package/dist/analytics/config.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
const DEFAULT_POSTHOG_KEY = 'phc_mejq4ZZ8jTNZPiusjh7vHyPzWYinzsDwVJW43SM5FEcg';
|
|
2
2
|
const DEFAULT_API_HOST = 'https://a.alisait.com';
|
|
3
3
|
const DEFAULT_UI_HOST = 'https://eu.posthog.com';
|
|
4
|
+
const DEFAULT_MIXPANEL_TOKEN = 'b7df8a8fde7156da7b9c99ecbb7e9862';
|
|
5
|
+
const DEFAULT_MIXPANEL_API_HOST = 'https://api-eu.mixpanel.com';
|
|
6
|
+
const DEFAULT_MIXPANEL_NODE_HOST = 'api-eu.mixpanel.com';
|
|
4
7
|
function envTruthy(name) {
|
|
5
8
|
const value = process.env[name]?.trim().toLowerCase();
|
|
6
9
|
return value === '1' || value === 'true' || value === 'yes';
|
|
@@ -8,6 +11,24 @@ function envTruthy(name) {
|
|
|
8
11
|
export function isPostHogDisabledByEnv() {
|
|
9
12
|
return envTruthy('POSTHOG_DISABLED');
|
|
10
13
|
}
|
|
14
|
+
export function isAnalyticsDisabledByEnv() {
|
|
15
|
+
return envTruthy('ANALYTICS_DISABLED') || isPostHogDisabledByEnv();
|
|
16
|
+
}
|
|
17
|
+
export function resolveAnalyticsProvider() {
|
|
18
|
+
const value = process.env.ANALYTICS_PROVIDER?.trim().toLowerCase();
|
|
19
|
+
if (value === 'posthog')
|
|
20
|
+
return 'posthog';
|
|
21
|
+
return 'mixpanel';
|
|
22
|
+
}
|
|
23
|
+
export function resolveMixpanelToken() {
|
|
24
|
+
return process.env.MIXPANEL_TOKEN?.trim() || DEFAULT_MIXPANEL_TOKEN;
|
|
25
|
+
}
|
|
26
|
+
export function resolveMixpanelApiHost() {
|
|
27
|
+
return process.env.MIXPANEL_API_HOST?.trim() || DEFAULT_MIXPANEL_API_HOST;
|
|
28
|
+
}
|
|
29
|
+
export function resolveMixpanelNodeHost() {
|
|
30
|
+
return process.env.MIXPANEL_NODE_HOST?.trim() || DEFAULT_MIXPANEL_NODE_HOST;
|
|
31
|
+
}
|
|
11
32
|
export function resolvePostHogKey() {
|
|
12
33
|
return process.env.POSTHOG_KEY?.trim() || DEFAULT_POSTHOG_KEY;
|
|
13
34
|
}
|
|
@@ -20,4 +41,10 @@ export function resolvePostHogUiHost() {
|
|
|
20
41
|
export function hasPostHogKey() {
|
|
21
42
|
return resolvePostHogKey().length > 0;
|
|
22
43
|
}
|
|
44
|
+
export function hasAnalyticsKey() {
|
|
45
|
+
if (resolveAnalyticsProvider() === 'posthog') {
|
|
46
|
+
return hasPostHogKey();
|
|
47
|
+
}
|
|
48
|
+
return resolveMixpanelToken().length > 0;
|
|
49
|
+
}
|
|
23
50
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG,kDAAkD,CAAC;AAC/E,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAEjD,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG,kDAAkD,CAAC;AAC/E,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAEjD,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AAClE,MAAM,yBAAyB,GAAG,6BAA6B,CAAC;AAChE,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;AAIzD,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,SAAS,CAAC,oBAAoB,CAAC,IAAI,sBAAsB,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,sBAAsB,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,yBAAyB,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,0BAA0B,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,wBAAwB,EAAE,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,oBAAoB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export declare function sanitizeAnalyticsProperties(properties: Record<string, unknown> | undefined): Record<string, string | number | boolean>;
|
|
2
|
-
|
|
3
|
-
|
|
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":"
|
|
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"}
|
package/dist/analytics/events.js
CHANGED
|
@@ -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',
|
|
@@ -83,18 +86,25 @@ const ALLOWED_PROPERTY_KEYS = new Set([
|
|
|
83
86
|
'model',
|
|
84
87
|
'last_active_at',
|
|
85
88
|
]);
|
|
86
|
-
const
|
|
89
|
+
const ANALYTICS_RESERVED_PROPERTY_KEYS = new Set([
|
|
87
90
|
'$current_url',
|
|
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))
|
|
94
104
|
return false;
|
|
95
105
|
if (ALLOWED_PROPERTY_KEYS.has(normalized))
|
|
96
106
|
return true;
|
|
97
|
-
return
|
|
107
|
+
return ANALYTICS_RESERVED_PROPERTY_KEYS.has(key);
|
|
98
108
|
}
|
|
99
109
|
export function sanitizeAnalyticsProperties(properties) {
|
|
100
110
|
if (!properties)
|
|
@@ -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 = POSTHOG_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
|
|
158
|
+
/** Person-profile fields merged on identify() — includes install-level hardware signals. */
|
|
124
159
|
export function buildPersonIdentifyProperties(properties) {
|
|
125
|
-
|
|
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":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
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;CACjB,CAAC,CAAC;AAEH,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAAC;IAC/C,cAAc;IACd,WAAW;IACX,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;AAEnE,kFAAkF;AAClF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,kBAAkB;IAClB,qBAAqB;IACrB,uBAAuB;CACxB,CAAC,CAAC;AAEH,SAAS,6BAA6B,CAAC,GAAW;IAChD,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,gCAAgC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,UAA+C;IAE/C,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,GAAG,GAAyD,EAAE,CAAC;IACrE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAEpD,MAAM,MAAM,GAAG,gCAAgC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAEnF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC/C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;gBAAE,SAAS;YAC/D,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;YACpB,SAAS;QACX,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACzF,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,4BAA4B,CAC1C,UAA+C;IAE/C,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,GAAG,GAA8C,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QACzD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACzF,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAA+C;IAE/C,OAAO;QACL,GAAG,wBAAwB,EAAE;QAC7B,aAAa,EAAE,eAAe,EAAE;QAChC,GAAG,yBAAyB,EAAE;QAC9B,GAAG,2BAA2B,CAAC,UAAU,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,6BAA6B,CAC3C,UAAoC;IAEpC,MAAM,MAAM,GAAG,sBAAsB,CAAC;QACpC,YAAY,EAAE,aAAa,EAAE;QAC7B,SAAS,EAAE,iBAAiB,EAAE;QAC9B,GAAG,UAAU;KACd,CAAC,CAAC;IAEH,MAAM,GAAG,GAA8C,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACzF,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -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;
|
|
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"}
|
|
@@ -3,12 +3,13 @@ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { getPhotoshopMcpHomeDir } from '../lib/export-paths.js';
|
|
5
5
|
import { kvGet, kvSet } from '../ui/store/kv.js';
|
|
6
|
-
import {
|
|
6
|
+
import { isAnalyticsDisabledByEnv } from './config.js';
|
|
7
7
|
const DISTINCT_ID_KEY = 'analytics_distinct_id';
|
|
8
8
|
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;
|
|
@@ -106,7 +107,7 @@ export function getOrCreateDistinctId() {
|
|
|
106
107
|
return id;
|
|
107
108
|
}
|
|
108
109
|
export function isAnalyticsOptedOut() {
|
|
109
|
-
if (
|
|
110
|
+
if (isAnalyticsDisabledByEnv())
|
|
110
111
|
return true;
|
|
111
112
|
const fromKv = readOptOutFromKv();
|
|
112
113
|
if (fromKv !== undefined)
|
|
@@ -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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/analytics/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,11 @@ import { captureMcpPageleave, captureMcpPageview } from './pageview.js';
|
|
|
7
7
|
import { getAnalytics, resetAnalyticsProvider } from './provider.js';
|
|
8
8
|
import type { AnalyticsEvent, AnalyticsProvider, AnalyticsRuntimeConfig, BetaTelemetryState, UsageSurface } from './types.js';
|
|
9
9
|
export type { McpShutdownReason } from './mcp-session.js';
|
|
10
|
-
/** Persist the install ID and register one anonymous
|
|
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
|
|
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;
|
|
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"}
|
package/dist/analytics/index.js
CHANGED
|
@@ -1,35 +1,44 @@
|
|
|
1
1
|
import { captureBetaChatTurn } from './beta-telemetry.js';
|
|
2
2
|
import { getAppVersion } from './app-version.js';
|
|
3
|
-
import {
|
|
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';
|
|
8
9
|
import { captureMcpPageleave, captureMcpPageview } from './pageview.js';
|
|
9
10
|
import { getAnalytics, resetAnalyticsProvider, shutdownAnalyticsClient } from './provider.js';
|
|
10
|
-
/** Persist the install ID and register one anonymous
|
|
11
|
+
/** Persist the install ID and register one anonymous analytics person per process. */
|
|
11
12
|
export function ensureAnalyticsIdentity() {
|
|
12
|
-
if (!isAnalyticsEnabled() || !
|
|
13
|
+
if (!isAnalyticsEnabled() || !hasAnalyticsKey())
|
|
13
14
|
return;
|
|
14
15
|
getOrCreateDistinctId();
|
|
15
16
|
getAnalytics();
|
|
16
17
|
}
|
|
17
|
-
export function capture(name, properties) {
|
|
18
|
-
if (!isAnalyticsEnabled() || !
|
|
18
|
+
export function capture(name, properties, options) {
|
|
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
|
-
if (!isAnalyticsEnabled() || !
|
|
28
|
+
if (!isAnalyticsEnabled() || !hasAnalyticsKey())
|
|
27
29
|
return;
|
|
28
30
|
const props = { ...(properties ?? {}) };
|
|
29
|
-
|
|
30
|
-
|
|
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. */
|
|
@@ -56,10 +65,24 @@ export async function shutdownAnalytics() {
|
|
|
56
65
|
await shutdownAnalyticsClient();
|
|
57
66
|
}
|
|
58
67
|
export function getAnalyticsRuntimeConfig() {
|
|
59
|
-
const
|
|
68
|
+
const provider = resolveAnalyticsProvider();
|
|
69
|
+
const enabled = isAnalyticsEnabled() && hasAnalyticsKey();
|
|
60
70
|
const beta = getBetaTelemetryState();
|
|
71
|
+
if (provider === 'mixpanel') {
|
|
72
|
+
return {
|
|
73
|
+
enabled,
|
|
74
|
+
provider,
|
|
75
|
+
key: resolveMixpanelToken(),
|
|
76
|
+
apiHost: resolveMixpanelApiHost(),
|
|
77
|
+
uiHost: '',
|
|
78
|
+
distinctId: getOrCreateDistinctId(),
|
|
79
|
+
betaTelemetryOptIn: beta.betaTelemetryOptIn,
|
|
80
|
+
betaTelemetryPromptAnswered: beta.betaTelemetryPromptAnswered,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
61
83
|
return {
|
|
62
84
|
enabled,
|
|
85
|
+
provider,
|
|
63
86
|
key: resolvePostHogKey(),
|
|
64
87
|
apiHost: resolvePostHogApiHost(),
|
|
65
88
|
uiHost: resolvePostHogUiHost(),
|
|
@@ -68,5 +91,6 @@ export function getAnalyticsRuntimeConfig() {
|
|
|
68
91
|
betaTelemetryPromptAnswered: beta.betaTelemetryPromptAnswered,
|
|
69
92
|
};
|
|
70
93
|
}
|
|
94
|
+
export { captureAnalyticsMilestoneOnce, } from './milestones.js';
|
|
71
95
|
export { captureBetaChatTurn, captureMcpPageleave, captureMcpPageview, endMcpAnalyticsSession, getAnalytics, getAppVersion, getBetaTelemetryState, onMcpClientConnected, onMcpClientDisconnected, recordMcpToolCall, resetAnalyticsProvider, setBetaTelemetryChoice, startMcpAnalyticsSession, };
|
|
72
96
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,
|
|
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":"
|
|
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,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
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';
|
|
6
7
|
import { flushAnalyticsClient, getAnalytics } from './provider.js';
|
|
7
8
|
let clientConnectCount = 0;
|
|
8
9
|
function captureMcpClientEvent(name, properties) {
|
|
9
|
-
if (!isAnalyticsEnabled() || !
|
|
10
|
+
if (!isAnalyticsEnabled() || !hasAnalyticsKey())
|
|
10
11
|
return;
|
|
11
12
|
getAnalytics().capture({
|
|
12
13
|
name,
|
|
@@ -14,7 +15,7 @@ function captureMcpClientEvent(name, properties) {
|
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
17
|
function identifyMcpClientPerson(properties) {
|
|
17
|
-
if (!isAnalyticsEnabled() || !
|
|
18
|
+
if (!isAnalyticsEnabled() || !hasAnalyticsKey())
|
|
18
19
|
return;
|
|
19
20
|
const props = { ...properties };
|
|
20
21
|
if (typeof props.usage_surface === 'string') {
|
|
@@ -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,
|
|
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":"
|
|
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"}
|