From 24f9ec51d2aa26e06e692b9c92e262ad9bd66616 Mon Sep 17 00:00:00 2001 From: Kevin Zhao Date: Tue, 14 Apr 2026 04:45:52 +0800 Subject: [PATCH 1/2] fix: correct redirect count increment in fetchJson (#24896) Co-authored-by: Tommaso Sciortino --- packages/cli/src/config/extensions/github_fetch.test.ts | 2 ++ packages/cli/src/config/extensions/github_fetch.ts | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/config/extensions/github_fetch.test.ts b/packages/cli/src/config/extensions/github_fetch.test.ts index fe6edbedb2..c1eca8c9c7 100644 --- a/packages/cli/src/config/extensions/github_fetch.test.ts +++ b/packages/cli/src/config/extensions/github_fetch.test.ts @@ -62,6 +62,7 @@ describe('fetchJson', () => { const res = new EventEmitter() as IncomingMessage; res.statusCode = 302; res.headers = { location: 'https://example.com/final' }; + res.resume = vi.fn(); (callback as (res: IncomingMessage) => void)(res); res.emit('end'); return new EventEmitter() as ClientRequest; @@ -85,6 +86,7 @@ describe('fetchJson', () => { const res = new EventEmitter() as IncomingMessage; res.statusCode = 301; res.headers = { location: 'https://example.com/final-permanent' }; + res.resume = vi.fn(); (callback as (res: IncomingMessage) => void)(res); res.emit('end'); return new EventEmitter() as ClientRequest; diff --git a/packages/cli/src/config/extensions/github_fetch.ts b/packages/cli/src/config/extensions/github_fetch.ts index 33a9cb674f..7afd235605 100644 --- a/packages/cli/src/config/extensions/github_fetch.ts +++ b/packages/cli/src/config/extensions/github_fetch.ts @@ -31,7 +31,11 @@ export async function fetchJson( if (!res.headers.location) { return reject(new Error('No location header in redirect response')); } - fetchJson(res.headers.location, redirectCount++) + res.resume(); + fetchJson( + new URL(res.headers.location, url).toString(), + redirectCount + 1, + ) .then(resolve) .catch(reject); return; From 706d4d4707a4d17af5c6b8bc4d4afe0942276961 Mon Sep 17 00:00:00 2001 From: Christian Gunderman Date: Mon, 13 Apr 2026 20:57:01 +0000 Subject: [PATCH 2/2] fix(core): prevent secondary crash in ModelRouterService finally block (#25333) --- packages/core/src/routing/modelRouterService.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/src/routing/modelRouterService.ts b/packages/core/src/routing/modelRouterService.ts index a62deacd31..30e2bb9f8d 100644 --- a/packages/core/src/routing/modelRouterService.ts +++ b/packages/core/src/routing/modelRouterService.ts @@ -74,7 +74,7 @@ export class ModelRouterService { */ async route(context: RoutingContext): Promise { const startTime = Date.now(); - let decision: RoutingDecision; + let decision: RoutingDecision | undefined; const [enableNumericalRouting, thresholdValue] = await Promise.all([ this.config.getNumericalRoutingEnabled(), @@ -117,10 +117,10 @@ export class ModelRouterService { ); } finally { const event = new ModelRoutingEvent( - decision!.model, - decision!.metadata.source, - decision!.metadata.latencyMs, - decision!.metadata.reasoning, + decision?.model || 'unknown', + decision?.metadata?.source || 'unknown', + decision?.metadata?.latencyMs || 0, + decision?.metadata?.reasoning, failed, error_message, this.config.getApprovalMode(),