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,
|
spawnEntry: MemberSpawnStatusEntry | undefined,
|
||||||
runtimeEntry?: TeamAgentRuntimeEntry
|
runtimeEntry?: TeamAgentRuntimeEntry
|
||||||
): string | undefined {
|
): string | undefined {
|
||||||
|
const memberProviderBackendId = (member as ResolvedTeamMember & { providerBackendId?: string })
|
||||||
|
.providerBackendId;
|
||||||
const configuredProvider: TeamProviderId =
|
const configuredProvider: TeamProviderId =
|
||||||
member.providerId ?? launchParams?.providerId ?? 'anthropic';
|
member.providerId ?? launchParams?.providerId ?? 'anthropic';
|
||||||
const configuredModel = member.model?.trim() || launchParams?.model?.trim() || '';
|
const inheritsLeadRuntimeDefaults =
|
||||||
const configuredEffort = member.effort ?? launchParams?.effort;
|
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 runtimeModel = spawnEntry?.runtimeModel?.trim() || runtimeEntry?.runtimeModel?.trim();
|
||||||
|
const configuredProviderBackendId =
|
||||||
|
memberProviderBackendId ??
|
||||||
|
(inheritsLeadRuntimeDefaults ? launchParams?.providerBackendId : undefined);
|
||||||
const backendLabel = normalizeMemberBackendLabel(
|
const backendLabel = normalizeMemberBackendLabel(
|
||||||
configuredProvider,
|
configuredProvider,
|
||||||
formatTeamProviderBackendLabel(configuredProvider, launchParams?.providerBackendId)
|
formatTeamProviderBackendLabel(configuredProvider, configuredProviderBackendId)
|
||||||
);
|
);
|
||||||
const memorySuffix =
|
const memorySuffix =
|
||||||
typeof runtimeEntry?.rssBytes === 'number' && runtimeEntry.rssBytes > 0
|
typeof runtimeEntry?.rssBytes === 'number' && runtimeEntry.rssBytes > 0
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ import { resolveMemberRuntimeSummary } from '@renderer/utils/memberRuntimeSummar
|
||||||
|
|
||||||
import type { MemberSpawnStatusEntry, ResolvedTeamMember } from '@shared/types';
|
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 {
|
return {
|
||||||
name: 'alice',
|
name: 'alice',
|
||||||
agentId: 'alice@test-team',
|
agentId: 'alice@test-team',
|
||||||
|
|
@ -118,4 +120,27 @@ describe('resolveMemberRuntimeSummary', () => {
|
||||||
)
|
)
|
||||||
).toBe('5.4 Mini · Medium · Codex');
|
).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