Skip to content

Commit 87aae9f

Browse files
authored
perf: skip manifest normalization in status summary (#87831)
1 parent 2a01602 commit 87aae9f

3 files changed

Lines changed: 111 additions & 0 deletions

File tree

src/agents/model-selection.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ export function resolvePersistedOverrideModelRef(params: {
9898
defaultProvider?: unknown;
9999
overrideProvider?: unknown;
100100
overrideModel?: unknown;
101+
allowManifestNormalization?: boolean;
101102
allowPluginNormalization?: boolean;
102103
}): ModelRef | null {
103104
const defaultProvider = normalizePersistedDefaultProvider(params.defaultProvider);
@@ -109,6 +110,7 @@ export function resolvePersistedOverrideModelRef(params: {
109110
const encodedOverride = overrideProvider ? `${overrideProvider}/${overrideModel}` : overrideModel;
110111
return (
111112
parseModelRef(encodedOverride, defaultProvider, {
113+
allowManifestNormalization: params.allowManifestNormalization,
112114
allowPluginNormalization: params.allowPluginNormalization,
113115
}) ?? {
114116
provider: overrideProvider || defaultProvider,
@@ -127,6 +129,7 @@ export function resolvePersistedModelRef(params: {
127129
runtimeModel?: unknown;
128130
overrideProvider?: unknown;
129131
overrideModel?: unknown;
132+
allowManifestNormalization?: boolean;
130133
allowPluginNormalization?: boolean;
131134
}): ModelRef | null {
132135
const defaultProvider = normalizePersistedDefaultProvider(params.defaultProvider);
@@ -138,6 +141,7 @@ export function resolvePersistedModelRef(params: {
138141
}
139142
return (
140143
parseModelRef(runtimeModel, defaultProvider, {
144+
allowManifestNormalization: params.allowManifestNormalization,
141145
allowPluginNormalization: params.allowPluginNormalization,
142146
}) ?? {
143147
provider: defaultProvider,
@@ -149,6 +153,7 @@ export function resolvePersistedModelRef(params: {
149153
defaultProvider,
150154
overrideProvider: params.overrideProvider,
151155
overrideModel: params.overrideModel,
156+
allowManifestNormalization: params.allowManifestNormalization,
152157
allowPluginNormalization: params.allowPluginNormalization,
153158
});
154159
}
@@ -164,12 +169,14 @@ export function resolvePersistedSelectedModelRef(params: {
164169
runtimeModel?: unknown;
165170
overrideProvider?: unknown;
166171
overrideModel?: unknown;
172+
allowManifestNormalization?: boolean;
167173
allowPluginNormalization?: boolean;
168174
}): ModelRef | null {
169175
const override = resolvePersistedOverrideModelRef({
170176
defaultProvider: params.defaultProvider,
171177
overrideProvider: params.overrideProvider,
172178
overrideModel: params.overrideModel,
179+
allowManifestNormalization: params.allowManifestNormalization,
173180
allowPluginNormalization: params.allowPluginNormalization,
174181
});
175182
if (override) {
@@ -179,6 +186,7 @@ export function resolvePersistedSelectedModelRef(params: {
179186
defaultProvider: params.defaultProvider,
180187
runtimeProvider: params.runtimeProvider,
181188
runtimeModel: params.runtimeModel,
189+
allowManifestNormalization: params.allowManifestNormalization,
182190
allowPluginNormalization: params.allowPluginNormalization,
183191
});
184192
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import { beforeEach, describe, expect, it, vi } from "vitest";
2+
3+
const normalizeProviderModelIdWithManifestMock = vi.hoisted(() => vi.fn());
4+
const normalizeProviderModelIdWithRuntimeMock = vi.hoisted(() => vi.fn());
5+
6+
vi.mock("../plugins/manifest-model-id-normalization.js", () => ({
7+
normalizeProviderModelIdWithManifest: normalizeProviderModelIdWithManifestMock,
8+
}));
9+
10+
vi.mock("../agents/provider-model-normalization.runtime.js", () => ({
11+
normalizeProviderModelIdWithRuntime: normalizeProviderModelIdWithRuntimeMock,
12+
}));
13+
14+
describe("statusSummaryRuntime configured model normalization", () => {
15+
beforeEach(() => {
16+
vi.resetModules();
17+
normalizeProviderModelIdWithManifestMock.mockReset();
18+
normalizeProviderModelIdWithRuntimeMock.mockReset();
19+
});
20+
21+
it("skips manifest and plugin model normalization for configured model refs", async () => {
22+
const { statusSummaryRuntime } = await import("./status.summary.runtime.js");
23+
24+
expect(
25+
statusSummaryRuntime.resolveConfiguredStatusModelRef({
26+
cfg: {
27+
agents: {
28+
defaults: {
29+
model: { primary: "openai-codex/gpt-5.5" },
30+
},
31+
},
32+
} as never,
33+
defaultProvider: "openai",
34+
defaultModel: "gpt-5.5",
35+
}),
36+
).toEqual({
37+
provider: "openai-codex",
38+
model: "gpt-5.5",
39+
});
40+
41+
expect(
42+
statusSummaryRuntime.resolveConfiguredStatusModelRef({
43+
cfg: {
44+
agents: {
45+
defaults: {
46+
model: { primary: "fast-codex" },
47+
models: {
48+
"openai-codex/gpt-5.5": { alias: "fast-codex" },
49+
},
50+
},
51+
},
52+
} as never,
53+
defaultProvider: "openai",
54+
defaultModel: "gpt-5.5",
55+
}),
56+
).toEqual({
57+
provider: "openai-codex",
58+
model: "gpt-5.5",
59+
});
60+
61+
expect(normalizeProviderModelIdWithManifestMock).not.toHaveBeenCalled();
62+
expect(normalizeProviderModelIdWithRuntimeMock).not.toHaveBeenCalled();
63+
});
64+
65+
it("skips manifest and plugin model normalization for providerless persisted session models", async () => {
66+
const { statusSummaryRuntime } = await import("./status.summary.runtime.js");
67+
const cfg = {
68+
agents: {
69+
defaults: {
70+
model: { primary: "anthropic/claude-sonnet-4-6" },
71+
},
72+
},
73+
} as never;
74+
75+
normalizeProviderModelIdWithManifestMock.mockReturnValue("claude-opus-4-6");
76+
normalizeProviderModelIdWithRuntimeMock.mockReturnValue("runtime-normalized-opus");
77+
78+
expect(
79+
statusSummaryRuntime.resolveSessionModelRef(cfg, {
80+
model: "opus-4.6",
81+
}),
82+
).toEqual({
83+
provider: "anthropic",
84+
model: "opus-4.6",
85+
});
86+
87+
expect(
88+
statusSummaryRuntime.resolveSessionModelRef(cfg, {
89+
model: "fallback-runtime-model",
90+
modelOverride: "opus-4.6",
91+
}),
92+
).toEqual({
93+
provider: "anthropic",
94+
model: "opus-4.6",
95+
});
96+
97+
expect(normalizeProviderModelIdWithManifestMock).not.toHaveBeenCalled();
98+
expect(normalizeProviderModelIdWithRuntimeMock).not.toHaveBeenCalled();
99+
});
100+
});

src/commands/status.summary.runtime.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ function resolveStatusModelRefFromRaw(params: {
3939
continue;
4040
}
4141
const parsed = parseModelRef(modelKey, params.defaultProvider, {
42+
allowManifestNormalization: false,
4243
allowPluginNormalization: false,
4344
});
4445
if (parsed) {
@@ -48,6 +49,7 @@ function resolveStatusModelRefFromRaw(params: {
4849
return { provider: params.defaultProvider, model: trimmed };
4950
}
5051
return parseModelRef(trimmed, params.defaultProvider, {
52+
allowManifestNormalization: false,
5153
allowPluginNormalization: false,
5254
});
5355
}
@@ -119,6 +121,7 @@ function resolveSessionModelRef(
119121
runtimeModel: entry?.model,
120122
overrideProvider: entry?.providerOverride,
121123
overrideModel: entry?.modelOverride,
124+
allowManifestNormalization: false,
122125
allowPluginNormalization: false,
123126
}) ?? resolved
124127
);

0 commit comments

Comments
 (0)