From ad1741f05eb9a6412cddbd993ee4f399d34b04dc Mon Sep 17 00:00:00 2001 From: iliya Date: Mon, 23 Mar 2026 15:37:23 +0200 Subject: [PATCH] fix(team): enhance team member resolution and provisioning instructions - Added logic to merge "lead" alias into "team-lead" to prevent phantom member entries in the inbox. - Updated provisioning instructions to emphasize the importance of using the exact name for the team lead in messages, avoiding abbreviations. - Modified default role for 'tom' from 'reviewer' to 'researcher' with updated workflow description. - Improved UI in MemberDraftRow to indicate workflow status with a visual cue when expanded. --- src/main/services/team/TeamMemberResolver.ts | 7 +++++++ src/main/services/team/TeamProvisioningService.ts | 2 ++ src/renderer/components/team/dialogs/CreateTeamDialog.tsx | 4 ++-- src/renderer/components/team/members/MemberDraftRow.tsx | 5 ++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/services/team/TeamMemberResolver.ts b/src/main/services/team/TeamMemberResolver.ts index f6c9830d..c5368981 100644 --- a/src/main/services/team/TeamMemberResolver.ts +++ b/src/main/services/team/TeamMemberResolver.ts @@ -150,6 +150,13 @@ export class TeamMemberResolver { // (recipient of SendMessage to "user"). It's not a real AI teammate. names.delete('user'); + // Defense: merge inbox-derived "lead" alias into canonical "team-lead". + // Teammates sometimes address messages to "lead" instead of "team-lead", + // creating a separate inbox file that the resolver picks up as a phantom member. + if (names.has('lead') && names.has('team-lead')) { + names.delete('lead'); + } + // Defense: hide CLI auto-suffixed duplicates (alice-2) when base name (alice) exists. const keepName = createCliAutoSuffixNameGuard(names); // Defense: hide CLI provisioner artifacts (alice-provisioner) when base name (alice) exists. diff --git a/src/main/services/team/TeamProvisioningService.ts b/src/main/services/team/TeamProvisioningService.ts index d038fd53..4686214d 100644 --- a/src/main/services/team/TeamProvisioningService.ts +++ b/src/main/services/team/TeamProvisioningService.ts @@ -461,6 +461,7 @@ Your FIRST action: call MCP tool member_briefing with: { teamName: "${teamName}", memberName: "${member.name}" } Do NOT start work, claim tasks, or improvise workflow/task/process rules before member_briefing succeeds. If member_briefing fails, send a short message to your team lead "${leadName}" explaining that bootstrap failed, then wait. +IMPORTANT: When sending messages to the team lead, always use the exact name "${leadName}" in the \`to\` field of SendMessage. Never abbreviate or shorten it (e.g. do NOT use "lead" instead of "team-lead"). After member_briefing succeeds: - Introduce yourself briefly (name and role) and confirm you are ready. - Then wait for task assignments. @@ -505,6 +506,7 @@ function buildReconnectMemberSpawnPrompt( { teamName: "${teamName}", memberName: "${member.name}" } Do NOT start work, claim tasks, or improvise workflow/task/process rules before member_briefing succeeds. If member_briefing fails, send a short message to your team lead "${leadName}" explaining that bootstrap failed, then wait. + IMPORTANT: When sending messages to the team lead, always use the exact name "${leadName}" in the \`to\` field of SendMessage. Never abbreviate or shorten it (e.g. do NOT use "lead" instead of "team-lead"). ${buildTeammateAgentBlockReminder()} ${actionModeProtocol} diff --git a/src/renderer/components/team/dialogs/CreateTeamDialog.tsx b/src/renderer/components/team/dialogs/CreateTeamDialog.tsx index f2d75f2a..1d5f1bdc 100644 --- a/src/renderer/components/team/dialogs/CreateTeamDialog.tsx +++ b/src/renderer/components/team/dialogs/CreateTeamDialog.tsx @@ -112,9 +112,9 @@ const DEFAULT_MEMBERS: { name: string; roleSelection: string; workflow?: string }, { name: 'tom', - roleSelection: 'reviewer', + roleSelection: 'researcher', workflow: - 'Review every completed task in the project. Read the code changes, check for correctness, style, and potential issues. Approve the task or request changes with clear feedback.', + 'Research topics, gather information, and analyze relevant sources. Investigate questions, explore options, and provide detailed findings with clear summaries for the team.', }, { name: 'bob', roleSelection: 'developer' }, { name: 'jack', roleSelection: 'developer' }, diff --git a/src/renderer/components/team/members/MemberDraftRow.tsx b/src/renderer/components/team/members/MemberDraftRow.tsx index 9341f52a..f27d0055 100644 --- a/src/renderer/components/team/members/MemberDraftRow.tsx +++ b/src/renderer/components/team/members/MemberDraftRow.tsx @@ -170,7 +170,7 @@ export const MemberDraftRow = ({ ) : null}