fix(team): avoid leaking lead backend into mixed member summary
This commit is contained in:
parent
5ab14682a2
commit
7cdee429ec
2 changed files with 40 additions and 4 deletions
|
|
@ -45,14 +45,25 @@ export function resolveMemberRuntimeSummary(
|
|||
spawnEntry: MemberSpawnStatusEntry | undefined,
|
||||
runtimeEntry?: TeamAgentRuntimeEntry
|
||||
): string | undefined {
|
||||
const memberProviderBackendId = (member as ResolvedTeamMember & { providerBackendId?: string })
|
||||
.providerBackendId;
|
||||
const configuredProvider: TeamProviderId =
|
||||
member.providerId ?? launchParams?.providerId ?? 'anthropic';
|
||||
const configuredModel = member.model?.trim() || launchParams?.model?.trim() || '';
|
||||
const configuredEffort = member.effort ?? launchParams?.effort;
|
||||
const inheritsLeadRuntimeDefaults =
|
||||
member.providerId == null ||
|
||||
launchParams?.providerId == null ||
|
||||
member.providerId === launchParams.providerId;
|
||||
const configuredModel =
|
||||
member.model?.trim() || (inheritsLeadRuntimeDefaults ? launchParams?.model?.trim() || '' : '');
|
||||
const configuredEffort =
|
||||
member.effort ?? (inheritsLeadRuntimeDefaults ? launchParams?.effort : undefined);
|
||||
const runtimeModel = spawnEntry?.runtimeModel?.trim() || runtimeEntry?.runtimeModel?.trim();
|
||||
const configuredProviderBackendId =
|
||||
memberProviderBackendId ??
|
||||
(inheritsLeadRuntimeDefaults ? launchParams?.providerBackendId : undefined);
|
||||
const backendLabel = normalizeMemberBackendLabel(
|
||||
configuredProvider,
|
||||
formatTeamProviderBackendLabel(configuredProvider, launchParams?.providerBackendId)
|
||||
formatTeamProviderBackendLabel(configuredProvider, configuredProviderBackendId)
|
||||
);
|
||||
const memorySuffix =
|
||||
typeof runtimeEntry?.rssBytes === 'number' && runtimeEntry.rssBytes > 0
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ import { resolveMemberRuntimeSummary } from '@renderer/utils/memberRuntimeSummar
|
|||
|
||||
import type { MemberSpawnStatusEntry, ResolvedTeamMember } from '@shared/types';
|
||||
|
||||
function createMember(overrides: Partial<ResolvedTeamMember> = {}): ResolvedTeamMember {
|
||||
type TestResolvedTeamMember = ResolvedTeamMember & { providerBackendId?: string };
|
||||
|
||||
function createMember(overrides: Partial<TestResolvedTeamMember> = {}): TestResolvedTeamMember {
|
||||
return {
|
||||
name: 'alice',
|
||||
agentId: 'alice@test-team',
|
||||
|
|
@ -118,4 +120,27 @@ describe('resolveMemberRuntimeSummary', () => {
|
|||
)
|
||||
).toBe('5.4 Mini · Medium · Codex');
|
||||
});
|
||||
|
||||
it('does not leak the lead backend label into OpenCode side-lane members', () => {
|
||||
const member = createMember({
|
||||
providerId: 'opencode',
|
||||
providerBackendId: undefined,
|
||||
model: 'opencode/nemotron-3-super-free',
|
||||
effort: undefined,
|
||||
});
|
||||
|
||||
expect(
|
||||
resolveMemberRuntimeSummary(
|
||||
member,
|
||||
{
|
||||
providerId: 'codex',
|
||||
providerBackendId: 'codex-native',
|
||||
model: 'gpt-5.4',
|
||||
effort: 'medium',
|
||||
limitContext: false,
|
||||
},
|
||||
undefined
|
||||
)
|
||||
).toBe('nemotron-3-super-free · via OpenCode');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue