Skip to content

Commit 50bc288

Browse files
committed
perf: skip manifest normalization in status summary
1 parent 5d8cf28 commit 50bc288

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
@@ -95,6 +95,7 @@ export function resolvePersistedOverrideModelRef(params: {
9595
defaultProvider?: unknown;
9696
overrideProvider?: unknown;
9797
overrideModel?: unknown;
98+
allowManifestNormalization?: boolean;
9899
allowPluginNormalization?: boolean;
99100
}): ModelRef | null {
100101
const defaultProvider = normalizePersistedDefaultProvider(params.defaultProvider);
@@ -106,6 +107,7 @@ export function resolvePersistedOverrideModelRef(params: {
106107
const encodedOverride = overrideProvider ? `${overrideProvider}/${overrideModel}` : overrideModel;
107108
return (
108109
parseModelRef(encodedOverride, defaultProvider, {
110+
allowManifestNormalization: params.allowManifestNormalization,
109111
allowPluginNormalization: params.allowPluginNormalization,
110112
}) ?? {
111113
provider: overrideProvider || defaultProvider,
@@ -124,6 +126,7 @@ export function resolvePersistedModelRef(params: {
124126
runtimeModel?: unknown;
125127
overrideProvider?: unknown;
126128
overrideModel?: unknown;
129+
allowManifestNormalization?: boolean;
127130
allowPluginNormalization?: boolean;
128131
}): ModelRef | null {
129132
const defaultProvider = normalizePersistedDefaultProvider(params.defaultProvider);
@@ -135,6 +138,7 @@ export function resolvePersistedModelRef(params: {
135138
}
136139
return (
137140
parseModelRef(runtimeModel, defaultProvider, {
141+
allowManifestNormalization: params.allowManifestNormalization,
138142
allowPluginNormalization: params.allowPluginNormalization,
139143
}) ?? {
140144
provider: defaultProvider,
@@ -146,6 +150,7 @@ export function resolvePersistedModelRef(params: {
146150
defaultProvider,
147151
overrideProvider: params.overrideProvider,
148152
overrideModel: params.overrideModel,
153+
allowManifestNormalization: params.allowManifestNormalization,
149154
allowPluginNormalization: params.allowPluginNormalization,
150155
});
151156
}
@@ -161,12 +166,14 @@ export function resolvePersistedSelectedModelRef(params: {
161166
runtimeModel?: unknown;
162167
overrideProvider?: unknown;
163168
overrideModel?: unknown;
169+
allowManifestNormalization?: boolean;
164170
allowPluginNormalization?: boolean;
165171
}): ModelRef | null {
166172
const override = resolvePersistedOverrideModelRef({
167173
defaultProvider: params.defaultProvider,
168174
overrideProvider: params.overrideProvider,
169175
overrideModel: params.overrideModel,
176+
allowManifestNormalization: params.allowManifestNormalization,
170177
allowPluginNormalization: params.allowPluginNormalization,
171178
});
172179
if (override) {
@@ -176,6 +183,7 @@ export function resolvePersistedSelectedModelRef(params: {
176183
defaultProvider: params.defaultProvider,
177184
runtimeProvider: params.runtimeProvider,
178185
runtimeModel: params.runtimeModel,
186+
allowManifestNormalization: params.allowManifestNormalization,
179187
allowPluginNormalization: params.allowPluginNormalization,
180188
});
181189
}
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
@@ -33,6 +33,7 @@ function resolveStatusModelRefFromRaw(params: {
3333
continue;
3434
}
3535
const parsed = parseModelRef(modelKey, params.defaultProvider, {
36+
allowManifestNormalization: false,
3637
allowPluginNormalization: false,
3738
});
3839
if (parsed) {
@@ -42,6 +43,7 @@ function resolveStatusModelRefFromRaw(params: {
4243
return { provider: params.defaultProvider, model: trimmed };
4344
}
4445
return parseModelRef(trimmed, params.defaultProvider, {
46+
allowManifestNormalization: false,
4547
allowPluginNormalization: false,
4648
});
4749
}
@@ -145,6 +147,7 @@ function resolveSessionModelRef(
145147
runtimeModel: entry?.model,
146148
overrideProvider: entry?.providerOverride,
147149
overrideModel: entry?.modelOverride,
150+
allowManifestNormalization: false,
148151
allowPluginNormalization: false,
149152
}) ?? resolved
150153
);

0 commit comments

Comments
 (0)