From b65435fc55d1dfcd61862da27fb1f8b62ee8c100 Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Sat, 7 Feb 2026 18:26:23 -0800 Subject: [PATCH] fix(cli): route PostHog networking through shared fetch (#9149) * fix(cli): route PostHog networking through shared fetch * remove unnecessary `as RequestInit` casts from PostHog fetch wrappers PostHogFetchOptions is a structural subset of RequestInit, so the cast is unnecessary. Also removes a stale comment about shared client support in PostHogErrorProvider. --- src/services/error/providers/PostHogErrorProvider.ts | 5 +++-- .../feature-flags/providers/PostHogFeatureFlagsProvider.ts | 2 ++ .../telemetry/providers/posthog/PostHogClientProvider.ts | 4 +++- .../telemetry/providers/posthog/PostHogTelemetryProvider.ts | 2 ++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/services/error/providers/PostHogErrorProvider.ts b/src/services/error/providers/PostHogErrorProvider.ts index ebef3bf74b..ca9c3fe8f6 100644 --- a/src/services/error/providers/PostHogErrorProvider.ts +++ b/src/services/error/providers/PostHogErrorProvider.ts @@ -3,10 +3,11 @@ import { StateManager } from "@/core/storage/StateManager" import { HostProvider } from "@/hosts/host-provider" import { getDistinctId } from "@/services/logging/distinctId" import { PostHogClientProvider } from "@/services/telemetry/providers/posthog/PostHogClientProvider" +import { fetch } from "@/shared/net" import { Setting } from "@/shared/proto/index.host" import { Logger } from "@/shared/services/Logger" import * as pkg from "../../../../package.json" -import { PostHogClientValidConfig } from "../../../shared/services/config/posthog-config" +import type { PostHogClientValidConfig } from "../../../shared/services/config/posthog-config" import { getErrorLevelFromString } from ".." import { ClineError } from "../ClineError" import type { ErrorSettings, IErrorProvider } from "./IErrorProvider" @@ -24,9 +25,9 @@ export class PostHogErrorProvider implements IErrorProvider { private readonly isSharedClient = false constructor(clientConfig: PostHogClientValidConfig) { - // Use shared PostHog client if provided, otherwise create a new one this.client = new PostHog(clientConfig.errorTrackingApiKey, { host: clientConfig.host, + fetch: (url, options) => fetch(url, options), enableExceptionAutocapture: false, // NOTE: Re-enable it once the api key is set to env var before_send: (event) => PostHogClientProvider.eventFilter(event), }) diff --git a/src/services/feature-flags/providers/PostHogFeatureFlagsProvider.ts b/src/services/feature-flags/providers/PostHogFeatureFlagsProvider.ts index 54972f92e1..5c41a65c24 100644 --- a/src/services/feature-flags/providers/PostHogFeatureFlagsProvider.ts +++ b/src/services/feature-flags/providers/PostHogFeatureFlagsProvider.ts @@ -1,5 +1,6 @@ import { PostHog } from "posthog-node" import { getDistinctId } from "@/services/logging/distinctId" +import { fetch } from "@/shared/net" import { Logger } from "@/shared/services/Logger" import { posthogConfig } from "../../../shared/services/config/posthog-config" import type { FeatureFlagsAndPayloads, FeatureFlagsSettings, IFeatureFlagsProvider } from "./IFeatureFlagsProvider" @@ -26,6 +27,7 @@ export class PostHogFeatureFlagsProvider implements IFeatureFlagsProvider { } this.client = new PostHog(posthogConfig.apiKey, { host: posthogConfig.host, + fetch: (url, options) => fetch(url, options), }) } diff --git a/src/services/telemetry/providers/posthog/PostHogClientProvider.ts b/src/services/telemetry/providers/posthog/PostHogClientProvider.ts index 9897ebe046..ba3f6c31e8 100644 --- a/src/services/telemetry/providers/posthog/PostHogClientProvider.ts +++ b/src/services/telemetry/providers/posthog/PostHogClientProvider.ts @@ -1,5 +1,6 @@ -import { EventMessage, PostHog } from "posthog-node" +import { type EventMessage, PostHog } from "posthog-node" import { ClineEndpoint } from "@/config" +import { fetch } from "@/shared/net" import { posthogConfig } from "@/shared/services/config/posthog-config" import { Logger } from "@/shared/services/Logger" @@ -30,6 +31,7 @@ export class PostHogClientProvider { this.client = posthogConfig.apiKey ? new PostHog(posthogConfig.apiKey, { host: posthogConfig.host, + fetch: (url, options) => fetch(url, options), enableExceptionAutocapture: false, // This is only enabled for error services before_send: (event) => PostHogClientProvider.eventFilter(event), }) diff --git a/src/services/telemetry/providers/posthog/PostHogTelemetryProvider.ts b/src/services/telemetry/providers/posthog/PostHogTelemetryProvider.ts index 8fe8fc2221..271525daa8 100644 --- a/src/services/telemetry/providers/posthog/PostHogTelemetryProvider.ts +++ b/src/services/telemetry/providers/posthog/PostHogTelemetryProvider.ts @@ -3,6 +3,7 @@ import { StateManager } from "@/core/storage/StateManager" import { HostProvider } from "@/hosts/host-provider" import { getErrorLevelFromString } from "@/services/error" import { getDistinctId, setDistinctId } from "@/services/logging/distinctId" +import { fetch } from "@/shared/net" import { Setting } from "@/shared/proto/index.host" import { Logger } from "@/shared/services/Logger" import { posthogConfig } from "../../../../shared/services/config/posthog-config" @@ -33,6 +34,7 @@ export class PostHogTelemetryProvider implements ITelemetryProvider { } this.client = new PostHog(posthogConfig.apiKey, { host: posthogConfig.host, + fetch: (url, options) => fetch(url, options), }) }