diff --git a/packages/agent/src/server/agent-server.configure-environment.test.ts b/packages/agent/src/server/agent-server.configure-environment.test.ts index f5b96ccea9..dfae60dabe 100644 --- a/packages/agent/src/server/agent-server.configure-environment.test.ts +++ b/packages/agent/src/server/agent-server.configure-environment.test.ts @@ -161,6 +161,23 @@ describe("AgentServer.configureEnvironment", () => { }, ); + it.each([{ isInternal: true }, { isInternal: false }] as const)( + "tags as posthog_code when origin_product is 'loop' (isInternal=$isInternal)", + ({ isInternal }) => { + const env = buildServer("background").configureEnvironment({ + isInternal, + originProduct: "loop", + }); + + expect(env.anthropicBaseUrl).toBe( + "https://gateway.us.posthog.com/posthog_code", + ); + expect(env.openaiBaseUrl).toBe( + "https://gateway.us.posthog.com/posthog_code/v1", + ); + }, + ); + // The codex/OpenAI path sets provider http_headers rather than // ANTHROPIC_CUSTOM_HEADERS, so the same task metadata must be exposed as a // record — including team_id, which the Claude path adds separately in diff --git a/packages/agent/src/utils/gateway.test.ts b/packages/agent/src/utils/gateway.test.ts index 9a2bc0a2aa..2a40bbf959 100644 --- a/packages/agent/src/utils/gateway.test.ts +++ b/packages/agent/src/utils/gateway.test.ts @@ -59,6 +59,16 @@ describe("resolveGatewayProduct", () => { originProduct: "support_reply", expected: "conversations", }, + { + isInternal: true, + originProduct: "loop", + expected: "posthog_code", + }, + { + isInternal: false, + originProduct: "loop", + expected: "posthog_code", + }, ] as const)( "isInternal=$isInternal originProduct=$originProduct -> $expected", ({ isInternal, originProduct, expected }) => { diff --git a/packages/agent/src/utils/gateway.ts b/packages/agent/src/utils/gateway.ts index b258086070..a9ecaaf41a 100644 --- a/packages/agent/src/utils/gateway.ts +++ b/packages/agent/src/utils/gateway.ts @@ -25,6 +25,9 @@ export function resolveGatewayProduct({ if (originProduct === "support_reply") { return "conversations"; } + if (originProduct === "loop") { + return "posthog_code"; + } if (isInternal) { return "background_agents"; } diff --git a/packages/shared/src/task.ts b/packages/shared/src/task.ts index b93c6e96d7..9e4c1c898f 100644 --- a/packages/shared/src/task.ts +++ b/packages/shared/src/task.ts @@ -16,7 +16,8 @@ export interface Task { | "session_summaries" | "signal_report" | "signals_scout" - | "slack"; + | "slack" + | "loop"; signal_report?: string | null; // Inbox report UUID when origin_product is "signal_report" github_integration?: number | null; repository: string; // Format: "organization/repository" (e.g., "posthog/posthog-js")