diff --git a/src/main/services/team/TeamProvisioningService.ts b/src/main/services/team/TeamProvisioningService.ts index dc03d68a..eb83f854 100644 --- a/src/main/services/team/TeamProvisioningService.ts +++ b/src/main/services/team/TeamProvisioningService.ts @@ -957,17 +957,6 @@ export class TeamProvisioningService { 'Using ANTHROPIC_AUTH_TOKEN (proxy) mapped to ANTHROPIC_API_KEY for `-p` mode.' ); } - if (authSource === 'claude_code_oauth_token_credentials') { - const source = - process.platform === 'darwin' - ? 'macOS Keychain or credentials file' - : `${path.join(getClaudeBasePath(), '.credentials.json')}`; - warnings.push( - `Using OAuth token from ${source}. ` + - 'Note: this token may be stale if Claude Code refreshed it in-memory without persisting. ' + - 'If auth fails, run `claude setup-token` and export CLAUDE_CODE_OAUTH_TOKEN.' - ); - } const probe = await this.probeClaudeRuntime(claudePath, targetCwd, executionEnv); diff --git a/src/renderer/components/team/TeamProvisioningBanner.tsx b/src/renderer/components/team/TeamProvisioningBanner.tsx index bb0177ba..31eb02a0 100644 --- a/src/renderer/components/team/TeamProvisioningBanner.tsx +++ b/src/renderer/components/team/TeamProvisioningBanner.tsx @@ -26,8 +26,6 @@ function findProgressForTeam( return matching[0] ?? null; } -const READY_DISMISS_MS = 5_000; - export const TeamProvisioningBanner = ({ teamName, }: TeamProvisioningBannerProps): React.JSX.Element | null => { @@ -49,28 +47,9 @@ export const TeamProvisioningBanner = ({ } } - useEffect(() => { - if (progress?.state !== 'ready') { - return; - } - // If we captured any logs/output, keep the banner visible so the user - // can inspect what happened (common for fast stop→start cycles). - if (progress.assistantOutput || progress.cliLogsTail || progress.error) { - return; - } - const timer = window.setTimeout(() => { - setDismissed(true); - }, READY_DISMISS_MS); - return () => { - window.clearTimeout(timer); - }; - }, [ - progress?.state, - progress?.runId, - progress?.assistantOutput, - progress?.cliLogsTail, - progress?.error, - ]); + // NOTE: we intentionally do NOT auto-dismiss "ready" banners. + // Users frequently need to inspect launch output after fast stop→start cycles, + // and auto-dismiss can make it look like no progress/logs were produced. if (!progress || dismissed) { return null; diff --git a/src/renderer/components/team/dialogs/TaskCommentsSection.tsx b/src/renderer/components/team/dialogs/TaskCommentsSection.tsx index b5be0f98..3f56f891 100644 --- a/src/renderer/components/team/dialogs/TaskCommentsSection.tsx +++ b/src/renderer/components/team/dialogs/TaskCommentsSection.tsx @@ -2,9 +2,9 @@ import { useCallback, useMemo, useState } from 'react'; import { MarkdownViewer } from '@renderer/components/chat/viewers/MarkdownViewer'; import { ReplyQuoteBlock } from '@renderer/components/team/activity/ReplyQuoteBlock'; +import { MemberBadge } from '@renderer/components/team/MemberBadge'; import { MentionableTextarea } from '@renderer/components/ui/MentionableTextarea'; import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip'; -import { getTeamColorSet } from '@renderer/constants/teamColors'; import { useDraftPersistence } from '@renderer/hooks/useDraftPersistence'; import { useMarkCommentsRead } from '@renderer/hooks/useMarkCommentsRead'; import { useStore } from '@renderer/store'; @@ -14,7 +14,16 @@ import { getModifierKeyName } from '@renderer/utils/keyboardUtils'; import { buildMemberColorMap } from '@renderer/utils/memberHelpers'; import { stripAgentBlocks } from '@shared/constants/agentBlocks'; import { formatDistanceToNow } from 'date-fns'; -import { ChevronDown, ChevronUp, MessageSquare, Reply, Send, X } from 'lucide-react'; +import { + CheckCircle2, + ChevronDown, + ChevronUp, + Eye, + MessageSquare, + Reply, + Send, + X, +} from 'lucide-react'; import type { MentionSuggestion } from '@renderer/types/mention'; import type { ResolvedTeamMember, TaskComment } from '@shared/types'; @@ -146,19 +155,30 @@ export const TaskCommentsSection = ({ ) : null} {visibleComments.map((comment) => ( -
+
- { - const rc = colorMap.get(comment.author); - return rc ? getTeamColorSet(rc).text : 'var(--color-text-secondary)'; - })(), - }} - > - {comment.author} - + + {comment.type === 'review_approved' ? ( + + + Approved + + ) : comment.type === 'review_request' ? ( + + + Review requested + + ) : null} {(() => { const date = new Date(comment.createdAt); @@ -290,19 +310,9 @@ export const TaskCommentsSection = ({ {replyTo ? (
-
- Replying to{' '} - { - const rc = colorMap.get(replyTo.author); - return rc ? getTeamColorSet(rc).text : 'var(--color-text-secondary)'; - })(), - }} - > - @{replyTo.author} - +
+ Replying to +
{replyTo.text}