@extenshi/mcp 0.13.1 → 0.14.1

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.
@@ -32,7 +32,8 @@
32
32
  */
33
33
  import { instrument } from '@posthog/mcp';
34
34
  import { FastMCPSession } from 'fastmcp';
35
- import { telemetryClient } from './telemetry.js';
35
+ import { bindSessionTelemetryGuard } from './session-telemetry.js';
36
+ import { telemetryAnonymousId, telemetryClient, telemetryEnabled } from './telemetry.js';
36
37
  const DROPPED_PROPERTIES = [
37
38
  '$mcp_parameters',
38
39
  '$mcp_response',
@@ -40,8 +41,9 @@ const DROPPED_PROPERTIES = [
40
41
  '$mcp_intent_source',
41
42
  '$mcp_error_message',
42
43
  ];
43
- /** Latest analytics consent per session, from the auth mcp-proxy passes to updateAuth. */
44
- const consent = new WeakMap();
44
+ // Auth is private in FastMCP; only validated updateAuth calls populate this map.
45
+ const actors = new WeakMap();
46
+ const AUTH_REVISION = '_extenshi_auth_revision';
45
47
  let installed = false;
46
48
  /** Call once per process, before `server.start()`. */
47
49
  export function instrumentMcpAnalytics(opts) {
@@ -57,8 +59,32 @@ export function instrumentMcpAnalytics(opts) {
57
59
  if (opts.perSessionConsent) {
58
60
  const updateAuth = proto.updateAuth;
59
61
  proto.updateAuth = function (...args) {
60
- // Same rule as tools.ts: only an explicit `telemetry: false` declines.
61
- consent.set(this, args[0]?.telemetry !== false);
62
+ const auth = args[0];
63
+ const userId = typeof auth?.userId === 'string' && auth.userId.trim() ? auth.userId : undefined;
64
+ const previous = actors.get(this);
65
+ const allowed = userId !== undefined && auth?.telemetry === true;
66
+ const ambiguous = previous?.ambiguous === true || Boolean(previous?.userId && userId && previous.userId !== userId);
67
+ const changed = previous?.allowed !== allowed || (userId !== undefined && previous?.userId !== userId);
68
+ const snapshot = {
69
+ userId: previous?.userId ?? userId,
70
+ allowed,
71
+ revision: (previous?.revision ?? 0) + Number(changed),
72
+ ambiguous,
73
+ };
74
+ actors.set(this, snapshot);
75
+ // FastMCP reads mutable auth after async validation. Suppress custom
76
+ // telemetry too if this transport switches accounts; permissions and
77
+ // backend identity remain the validated auth's own values.
78
+ if (args[0]) {
79
+ args[0] = { ...args[0], ...(ambiguous ? { telemetry: false } : {}) };
80
+ bindSessionTelemetryGuard(args[0], () => {
81
+ const current = actors.get(this);
82
+ return (snapshot.allowed &&
83
+ current?.allowed === true &&
84
+ !current.ambiguous &&
85
+ current.revision === snapshot.revision);
86
+ });
87
+ }
62
88
  return updateAuth.apply(this, args);
63
89
  };
64
90
  }
@@ -73,11 +99,34 @@ function instrumentSession(session, opts) {
73
99
  captureModel: false,
74
100
  enableConversationId: false,
75
101
  enableExceptionAutocapture: false,
76
- eventProperties: () => ({ surface: opts.surface }),
102
+ eventProperties: () => ({
103
+ surface: opts.surface,
104
+ ...(session.sessionId ? { mcp_session_id: session.sessionId } : {}),
105
+ ...(opts.perSessionConsent ? { [AUTH_REVISION]: actors.get(session)?.revision ?? 0 } : {}),
106
+ }),
77
107
  beforeSend: (event) => {
78
- if (opts.perSessionConsent && consent.get(session) !== true)
108
+ if (!telemetryEnabled())
79
109
  return null;
80
110
  const props = event.properties ?? {};
111
+ if (opts.perSessionConsent) {
112
+ const actor = actors.get(session);
113
+ // Snapshot the auth revision before the handler runs. Never attribute
114
+ // an in-flight completion to a later account/consent choice.
115
+ const revision = props[AUTH_REVISION];
116
+ delete props[AUTH_REVISION];
117
+ if (!actor?.allowed || !actor.userId || actor.ambiguous || revision !== actor.revision)
118
+ return null;
119
+ event.distinct_id = actor.userId;
120
+ props.$process_person_profile = true;
121
+ }
122
+ else {
123
+ const anonymousId = telemetryAnonymousId();
124
+ if (!anonymousId)
125
+ return null;
126
+ event.distinct_id = anonymousId;
127
+ // The install stays anonymous, with no identify or alias to an account.
128
+ props.$process_person_profile = false;
129
+ }
81
130
  for (const key of DROPPED_PROPERTIES)
82
131
  delete props[key];
83
132
  return event;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-analytics.js","sourceRoot":"","sources":["../src/mcp-analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,MAAM,kBAAkB,GAAG;IAC1B,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,oBAAoB;CACpB,CAAA;AAQD,0FAA0F;AAC1F,MAAM,OAAO,GAAG,IAAI,OAAO,EAA2B,CAAA;AAEtD,IAAI,SAAS,GAAG,KAAK,CAAA;AAErB,sDAAsD;AACtD,MAAM,UAAU,sBAAsB,CAAC,IAAa;IACnD,IAAI,SAAS;QAAE,OAAM;IACrB,SAAS,GAAG,IAAI,CAAA;IAChB,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAA;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;IAC7B,KAAK,CAAC,OAAO,GAAG,UAAgC,GAAG,IAAgC;QAClF,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC,CAAA;IACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QACnC,KAAK,CAAC,UAAU,GAAG,UAAgC,GAAG,IAAmC;YACxF,uEAAuE;YACvE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAG,IAAI,CAAC,CAAC,CAAyC,EAAE,SAAS,KAAK,KAAK,CAAC,CAAA;YACxF,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACpC,CAAC,CAAA;IACF,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB,EAAE,IAAa;IAChE,MAAM,OAAO,GAAG,eAAe,EAAE,CAAA;IACjC,IAAI,CAAC,OAAO;QAAE,OAAM;IACpB,IAAI,CAAC;QACJ,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;YACnC,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,KAAK;YACnB,oBAAoB,EAAE,KAAK;YAC3B,0BAA0B,EAAE,KAAK;YACjC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAClD,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrB,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAA;gBACxE,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAA;gBACpC,KAAK,MAAM,GAAG,IAAI,kBAAkB;oBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;gBACvD,OAAO,KAAK,CAAA;YACb,CAAC;SACD,CAAC,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACR,wCAAwC;IACzC,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"mcp-analytics.js","sourceRoot":"","sources":["../src/mcp-analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAExF,MAAM,kBAAkB,GAAG;IAC1B,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,oBAAoB;CACpB,CAAA;AAgBD,iFAAiF;AACjF,MAAM,MAAM,GAAG,IAAI,OAAO,EAAgC,CAAA;AAC1D,MAAM,aAAa,GAAG,yBAAyB,CAAA;AAE/C,IAAI,SAAS,GAAG,KAAK,CAAA;AAErB,sDAAsD;AACtD,MAAM,UAAU,sBAAsB,CAAC,IAAa;IACnD,IAAI,SAAS;QAAE,OAAM;IACrB,SAAS,GAAG,IAAI,CAAA;IAChB,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAA;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;IAC7B,KAAK,CAAC,OAAO,GAAG,UAAgC,GAAG,IAAgC;QAClF,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC,CAAA;IACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QACnC,KAAK,CAAC,UAAU,GAAG,UAAgC,GAAG,IAAmC;YACxF,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAA0D,CAAA;YAC7E,MAAM,MAAM,GAAG,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;YAC/F,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACjC,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,IAAI,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;YAChE,MAAM,SAAS,GACd,QAAQ,EAAE,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;YAClG,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAA;YACtG,MAAM,QAAQ,GAAiB;gBAC9B,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,MAAM;gBAClC,OAAO;gBACP,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;gBACrD,SAAS;aACT,CAAA;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YAC1B,qEAAqE;YACrE,qEAAqE;YACrE,2DAA2D;YAC3D,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;gBACpE,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE;oBACvC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAChC,OAAO,CACN,QAAQ,CAAC,OAAO;wBAChB,OAAO,EAAE,OAAO,KAAK,IAAI;wBACzB,CAAC,OAAO,CAAC,SAAS;wBAClB,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CACtC,CAAA;gBACF,CAAC,CAAC,CAAA;YACH,CAAC;YACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACpC,CAAC,CAAA;IACF,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB,EAAE,IAAa;IAChE,MAAM,OAAO,GAAG,eAAe,EAAE,CAAA;IACjC,IAAI,CAAC,OAAO;QAAE,OAAM;IACpB,IAAI,CAAC;QACJ,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;YACnC,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,KAAK;YACnB,oBAAoB,EAAE,KAAK;YAC3B,0BAA0B,EAAE,KAAK;YACjC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1F,CAAC;YACF,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrB,IAAI,CAAC,gBAAgB,EAAE;oBAAE,OAAO,IAAI,CAAA;gBACpC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAA;gBACpC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBACjC,sEAAsE;oBACtE,6DAA6D;oBAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;oBACrC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAA;oBAC3B,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,KAAK,KAAK,CAAC,QAAQ;wBAAE,OAAO,IAAI,CAAA;oBACnG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAA;oBAChC,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAA;gBACrC,CAAC;qBAAM,CAAC;oBACP,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAA;oBAC1C,IAAI,CAAC,WAAW;wBAAE,OAAO,IAAI,CAAA;oBAC7B,KAAK,CAAC,WAAW,GAAG,WAAW,CAAA;oBAC/B,wEAAwE;oBACxE,KAAK,CAAC,uBAAuB,GAAG,KAAK,CAAA;gBACtC,CAAC;gBACD,KAAK,MAAM,GAAG,IAAI,kBAAkB;oBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;gBACvD,OAAO,KAAK,CAAA;YACb,CAAC;SACD,CAAC,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACR,wCAAwC;IACzC,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function bindSessionTelemetryGuard(auth: object, allowed: () => boolean): void;
2
+ export declare function canCaptureSessionTelemetry(auth: unknown): boolean;
3
+ //# sourceMappingURL=session-telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-telemetry.d.ts","sourceRoot":"","sources":["../src/session-telemetry.ts"],"names":[],"mappings":"AAGA,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,CAEpF;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAIjE"}
@@ -0,0 +1,13 @@
1
+ /** Request-auth snapshots can outlive a session's current analytics consent. */
2
+ const guards = new WeakMap();
3
+ export function bindSessionTelemetryGuard(auth, allowed) {
4
+ guards.set(auth, allowed);
5
+ }
6
+ export function canCaptureSessionTelemetry(auth) {
7
+ if (!auth || typeof auth !== 'object')
8
+ return true; // Local stdio stays anonymous.
9
+ if (auth.telemetry === false)
10
+ return false;
11
+ return guards.get(auth)?.() ?? true;
12
+ }
13
+ //# sourceMappingURL=session-telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-telemetry.js","sourceRoot":"","sources":["../src/session-telemetry.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,MAAM,GAAG,IAAI,OAAO,EAAyB,CAAA;AAEnD,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,OAAsB;IAC7E,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAa;IACvD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA,CAAC,+BAA+B;IAClF,IAAK,IAAgC,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IACvE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAA;AACpC,CAAC"}
@@ -38,6 +38,8 @@ export declare function initTelemetry(opts: {
38
38
  version: string;
39
39
  }): void;
40
40
  export declare function telemetryEnabled(): boolean;
41
+ /** The existing install identity, without identifying or aliasing an account. */
42
+ export declare function telemetryAnonymousId(): string | undefined;
41
43
  /**
42
44
  * The shared posthog-node client, or null when telemetry is disabled. Exposed so
43
45
  * the MCP package's PostHog MCP Analytics instrumentation (mcp-analytics.ts)
@@ -75,7 +77,7 @@ export declare function flagsFromArgv(argv?: string[]): string[];
75
77
  * database, see tools/extenshi-mcp-server/src/legal.ts).
76
78
  */
77
79
  export declare function captureEvent(event: string, properties?: Record<string, unknown>, distinctId?: string): void;
78
- export declare function captureError(err: unknown, context?: Record<string, unknown>): void;
80
+ export declare function captureError(err: unknown, context?: Record<string, unknown>, distinctId?: string): void;
79
81
  /**
80
82
  * Flush buffered events and close the client. Hard-capped so a slow/hung
81
83
  * PostHog endpoint can never delay the command's exit. Safe to call when
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAyBtC,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG9E;AAmCD,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAkCD;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,GAAG,IAAI,CAEhD;AAaD,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5C;AA6DD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAgBlD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,MAAM,EAAE,CAM9E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACxC,UAAU,CAAC,EAAE,MAAM,GACjB,IAAI,CAkBN;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI,CAQtF;AASD;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CASpD"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAyBtC,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG9E;AAmCD,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAeD,iFAAiF;AACjF,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAGzD;AAqBD;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,GAAG,IAAI,CAEhD;AAaD,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5C;AA6DD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAgBlD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,MAAM,EAAE,CAM9E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACxC,UAAU,CAAC,EAAE,MAAM,GACjB,IAAI,CAkBN;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ3G;AASD;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CASpD"}
package/dist/telemetry.js CHANGED
@@ -111,6 +111,11 @@ function anonId() {
111
111
  mergeWriteConfig({ anonId: id });
112
112
  return id;
113
113
  }
114
+ /** The existing install identity, without identifying or aliasing an account. */
115
+ export function telemetryAnonymousId() {
116
+ // Do not create a config/identity when usage telemetry is disabled.
117
+ return telemetryEnabled() ? anonId() : undefined;
118
+ }
114
119
  function getClient() {
115
120
  // Fast path after the first call: never re-read the config file
116
121
  // (telemetryEnabled does a sync read) on subsequent events — matters for the
@@ -304,12 +309,12 @@ export function captureEvent(event, properties = {}, distinctId) {
304
309
  // Telemetry must never throw into the command path.
305
310
  }
306
311
  }
307
- export function captureError(err, context = {}) {
312
+ export function captureError(err, context = {}, distinctId) {
308
313
  const c = getClient();
309
314
  if (!c)
310
315
  return;
311
316
  try {
312
- c.captureException(sanitizeError(err), anonId(), { ...baseProps(), ...context });
317
+ c.captureException(sanitizeError(err), distinctId?.trim() || anonId(), { ...baseProps(), ...context });
313
318
  }
314
319
  catch {
315
320
  // Swallow — see captureEvent.
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -81,6 +81,8 @@ export type Capability = 'read' | 'docs' | 'scan' | 'publish';
81
81
  */
82
82
  export interface ToolCallContext {
83
83
  session?: FastMCPSessionAuth;
84
+ /** Stable transport ID; independent of the per-request auth object. */
85
+ sessionId?: string;
84
86
  }
85
87
  export interface ToolDeps {
86
88
  /** Base URLs for the BFF (reads), scan backend, and docs site. */
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AASH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAG1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AA6DnC,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAC5D,eAAO,MAAM,YAAY,qCAAqC,CAAA;AAC9D,eAAO,MAAM,iBAAiB,+EAA+E,CAAA;AAO7G,eAAO,MAAM,mBAAmB,QAWS,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEiE,CAAA;AAE/F;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,eAAO,MAAM,WAAW,aAAa,CAAA;AAErC;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAYiD,CAAA;AAEjF,oFAAoF;AACpF,wBAAgB,qBAAqB,CACpC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,EACrC,IAAI,GAAE,OAAmB,GACvB,MAAM,CAYR;AAID,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACxB,kEAAkE;IAClE,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,+BAA+B;IAC/B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,GAAG,CAAA;IACrC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAA;IACxD;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAiFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,MAA2B,GAAG,OAAO,CAGxF;AAuuBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CA+yDnE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AASH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAG1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAgEnC,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAC5D,eAAO,MAAM,YAAY,qCAAqC,CAAA;AAC9D,eAAO,MAAM,iBAAiB,+EAA+E,CAAA;AAO7G,eAAO,MAAM,mBAAmB,QAWS,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEiE,CAAA;AAE/F;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,eAAO,MAAM,WAAW,aAAa,CAAA;AAErC;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAYiD,CAAA;AAEjF,oFAAoF;AACpF,wBAAgB,qBAAqB,CACpC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,EACrC,IAAI,GAAE,OAAmB,GACvB,MAAM,CAYR;AAID,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACxB,kEAAkE;IAClE,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,+BAA+B;IAC/B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,GAAG,CAAA;IACrC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAA;IACxD;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAiFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,MAA2B,GAAG,OAAO,CAGxF;AA+tBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CA6zDnE"}
package/dist/tools.js CHANGED
@@ -52,10 +52,13 @@ import { amoCreateAllowed, PublishSetupError, publishArtifact, storeCredentialsF
52
52
  import { checkPublishAccess } from './publish-access.js';
53
53
  import { ScanError, scanArtifact } from './scan.js';
54
54
  import { describeStoreConstraints, validateSearchFilters } from './search-filters.js';
55
+ import { canCaptureSessionTelemetry } from './session-telemetry.js';
55
56
  import { DEFAULT_MARKET_TOP_N, MARKET_FACETS, MAX_MARKET_TOP_N, shapeExtension, shapeMarketOverview, shapeReviews, shapeSearch, shapeSecurity, shapeStoreRiskBatch, } from './shape.js';
56
57
  import { captureError, captureEvent, classifyError } from './telemetry.js';
57
58
  import { renderExtensionTemplates } from './templates.js';
59
+ import { registerUninstallFormTools } from './uninstall-form-tools.js';
58
60
  import { renderCatalogPayload } from './untrusted.js';
61
+ import { knownUpdate } from './update-check.js';
59
62
  import { renderWelcomeWorkflow } from './welcome-workflow.js';
60
63
  // ── Public links (shared by tool bodies + server instructions) ──────────────
61
64
  export const KEY_PAGE = 'https://dojo.extenshi.io/api-keys';
@@ -227,26 +230,15 @@ export function isExpectedError(err, kind = classifyError(err)) {
227
230
  return err instanceof UserError && err.cause === undefined;
228
231
  }
229
232
  /**
230
- * Attribution for a tool call, lifted from the session the surface supplies.
231
- *
232
- * Local stdio has no session at all, so both fields come back undefined and
233
- * captureEvent falls back to the per-install anonymous id — unchanged behaviour.
234
- * The hosted connector authenticates every request, so it supplies both: the
235
- * account id becomes the PostHog distinct_id, and the connection id threads one
236
- * client's calls together (see tools/extenshi-mcp-server/src/identity.ts, which
237
- * mints it per `authenticate()` — i.e. per connection, NOT per cached token).
238
- *
239
- * Read defensively: `session` is FastMCP's opaque auth record, and a surface
240
- * that carries neither field must degrade to the local behaviour rather than
241
- * throw inside instrumentation.
233
+ * Account identity comes from validated auth; connection identity comes from
234
+ * FastMCP's server-owned transport, not the auth object refreshed on each POST.
235
+ * Local stdio keeps captureEvent's anonymous per-install identity.
242
236
  */
243
- function attribution(session) {
244
- if (!session || typeof session !== 'object')
245
- return {};
246
- const s = session;
237
+ function attribution(session, sessionId) {
238
+ const s = session && typeof session === 'object' ? session : {};
247
239
  return {
248
240
  userId: typeof s.userId === 'string' && s.userId ? s.userId : undefined,
249
- sessionId: typeof s.sessionId === 'string' && s.sessionId ? s.sessionId : undefined,
241
+ sessionId: typeof sessionId === 'string' && sessionId ? sessionId : undefined,
250
242
  };
251
243
  }
252
244
  /**
@@ -285,15 +277,16 @@ function instrument(tool) {
285
277
  execute: async (args, context) => {
286
278
  // The hosted connector lets a user decline analytics on the consent
287
279
  // screen; honour it for every event, including error reports.
288
- if (context.session?.telemetry === false)
280
+ if (!canCaptureSessionTelemetry(context.session))
289
281
  return original(args, context);
290
282
  const startedAt = Date.now();
291
- const { userId, sessionId } = attribution(context.session);
283
+ const { userId, sessionId } = attribution(context.session, context.sessionId);
292
284
  const props = { tool: name, ...(sessionId ? { mcp_session_id: sessionId } : {}) };
293
285
  captureEvent('mcp_tool_called', props, userId);
294
286
  try {
295
287
  const result = await original(args, context);
296
- captureEvent('mcp_tool_succeeded', { ...props, duration_ms: Date.now() - startedAt }, userId);
288
+ if (canCaptureSessionTelemetry(context.session))
289
+ captureEvent('mcp_tool_succeeded', { ...props, duration_ms: Date.now() - startedAt }, userId);
297
290
  return result;
298
291
  }
299
292
  catch (err) {
@@ -303,12 +296,14 @@ function instrument(tool) {
303
296
  const kind = classifyError(err);
304
297
  // The failure count is always tracked, so we keep visibility into
305
298
  // how often callers hit each condition (incl. the billing gate).
306
- captureEvent('mcp_tool_failed', { ...props, error_kind: kind, duration_ms: Date.now() - startedAt }, userId);
307
- // …but only genuine faults are shipped as exceptions. Expected
308
- // user-facing conditions (a quota gate, a bad key, a message we
309
- // authored) are not bugs and must not open error-tracking issues.
310
- if (!isExpectedError(err, kind))
311
- captureError(err, { tool: name });
299
+ if (canCaptureSessionTelemetry(context.session)) {
300
+ captureEvent('mcp_tool_failed', { ...props, error_kind: kind, duration_ms: Date.now() - startedAt }, userId);
301
+ // …but only genuine faults are shipped as exceptions. Expected
302
+ // user-facing conditions (a quota gate, a bad key, a message we
303
+ // authored) are not bugs and must not open error-tracking issues.
304
+ if (!isExpectedError(err, kind))
305
+ captureError(err, { tool: name }, userId);
306
+ }
312
307
  throw err;
313
308
  }
314
309
  },
@@ -1110,7 +1105,7 @@ export function registerTools(server, deps) {
1110
1105
  });
1111
1106
  add({
1112
1107
  name: 'connection_diagnostics',
1113
- description: 'Verify authentication, granted scopes, supported workspace contracts and actual write permissions (incl. hosted.write, evidence uploads and, for a projectId, CI ingest configuration). Includes credit balances; credentials and secrets are not included. A failed sign-in returns an error that says how to sign in again.',
1108
+ description: 'Verify authentication, granted scopes, supported workspace contracts and actual write permissions (incl. hosted.write, evidence uploads and, for a projectId, CI ingest configuration) and the Pay scopes a key carries. Includes credit balances, the registered tools and, on the local server, `client` {version, latestVersion, updateAvailable}; credentials and secrets are not included. A failed sign-in returns an error that says how to sign in again.',
1114
1109
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
1115
1110
  parameters: z.object({}),
1116
1111
  execute: async (_args, context) => {
@@ -1120,7 +1115,13 @@ export function registerTools(server, deps) {
1120
1115
  client.connectionDiagnostics(),
1121
1116
  client.getApiCallerBalance(),
1122
1117
  ]);
1123
- return JSON.stringify({ connection, balance, registeredTools: registeredTools.map((t) => t.name) });
1118
+ const update = knownUpdate();
1119
+ return JSON.stringify({
1120
+ connection,
1121
+ balance,
1122
+ registeredTools: registeredTools.map((t) => t.name),
1123
+ ...(update ? { client: update } : {}),
1124
+ });
1124
1125
  }
1125
1126
  catch (err) {
1126
1127
  return readError(err, missingKeyMessage);
@@ -1540,7 +1541,7 @@ export function registerTools(server, deps) {
1540
1541
  'Built-in text (buttons, reasons, footers) is translated by Extenshi into en, es, pt-BR, fr, de, ' +
1541
1542
  'it, ru, ja, ko, zh-CN and ar and is not listed. A page is shown in the user’s browser language ' +
1542
1543
  'when the project offers it, otherwise in defaultLocale; an untranslated or outdated field shows ' +
1543
- 'its original. Requires project.read.',
1544
+ 'its original. Uninstall survey text itself is changed with update_uninstall_form. Requires project.read.',
1544
1545
  parameters: z.object({ projectId: z.string().uuid() }),
1545
1546
  execute: async (args, context) => {
1546
1547
  try {
@@ -1566,6 +1567,7 @@ export function registerTools(server, deps) {
1566
1567
  publicCode: z.string().max(40).describe('The page code, from get_page_translations.'),
1567
1568
  locale: z.string().max(35).describe('BCP 47 tag or the _locales spelling (de, pt-BR, pt_BR).'),
1568
1569
  translations: z.record(z.string().max(80), z.string().max(2000)),
1570
+ proposedBy: z.string().max(120).optional().describe('Your agent/tool name, shown to the owner.'),
1569
1571
  }),
1570
1572
  execute: async (args, context) => {
1571
1573
  try {
@@ -1637,6 +1639,8 @@ export function registerTools(server, deps) {
1637
1639
  });
1638
1640
  // get_license_terms_questionnaire / draft_license_terms (project.read, read-only).
1639
1641
  registerLicenseTermsTools(add, bff, (err) => readError(err, missingKeyMessage));
1642
+ // list/get/update/preview_uninstall_form + find_brand_mentions (project.read / hosted.write).
1643
+ registerUninstallFormTools(add, bff, (err) => readError(err, missingKeyMessage));
1640
1644
  // A local filesystem exists only where local artifacts do (stdio).
1641
1645
  const localFiles = caps.has('scan');
1642
1646
  add({
@@ -2120,7 +2124,12 @@ export function registerTools(server, deps) {
2120
2124
  'Manifests come as summaries by default (version, top-level keys, size, digest, origin ' +
2121
2125
  'imported/generated, and which keys of each drafted manifest differ from the imported ' +
2122
2126
  'source/built one); pass manifests "full" for the bodies, or get_project_scaffold for one ' +
2123
- "browser's manifest file. FREE — spends no credit. Type definitions are in list_extension_templates.",
2127
+ "browser's manifest file. `staleNames` is null until the project is renamed; after a rename it " +
2128
+ 'lists the earlier names (`earlierNames`), every hosted field that still holds one (`mentions`, ' +
2129
+ 'at most 20, each with the tool that fixes it; `total`, `truncated`) and a `warning` sentence — ' +
2130
+ 'find_brand_mentions with those names returns them all. License terms and Pay offers are ' +
2131
+ 'searched only with pay.read (otherwise listed in `skipped`). ' +
2132
+ 'FREE — spends no credit. Type definitions are in list_extension_templates.',
2124
2133
  parameters: z.object({
2125
2134
  projectId: z.string().describe('Project id from list_my_projects.'),
2126
2135
  includeToolStates: z