fix(ci): restore checks and lead model selection

This commit is contained in:
777genius 2026-04-18 22:28:53 +03:00
parent 93a6ae74b0
commit 61556a5a77
17 changed files with 27 additions and 21 deletions

View file

@ -1,7 +1,7 @@
import { ActivityItem } from '@renderer/components/team/activity/ActivityItem'; import { ActivityItem } from '@renderer/components/team/activity/ActivityItem';
import { import {
resolveMessageRenderProps,
type MessageContext, type MessageContext,
resolveMessageRenderProps,
} from '@renderer/components/team/activity/activityMessageContext'; } from '@renderer/components/team/activity/activityMessageContext';
import type { import type {

View file

@ -13,6 +13,7 @@ import {
type InlineActivityEntry, type InlineActivityEntry,
} from '../../core/domain/buildInlineActivityEntries'; } from '../../core/domain/buildInlineActivityEntries';
import { useGraphActivityContext } from '../hooks/useGraphActivityContext'; import { useGraphActivityContext } from '../hooks/useGraphActivityContext';
import { GraphActivityCard } from './GraphActivityCard'; import { GraphActivityCard } from './GraphActivityCard';
import type { GraphNode } from '@claude-teams/agent-graph'; import type { GraphNode } from '@claude-teams/agent-graph';

View file

@ -8,11 +8,11 @@ import { buildTaskCountsByProject } from '@renderer/utils/pathNormalize';
import { useShallow } from 'zustand/react/shallow'; import { useShallow } from 'zustand/react/shallow';
import { adaptRecentProjectsSection } from '../adapters/RecentProjectsSectionAdapter'; import { adaptRecentProjectsSection } from '../adapters/RecentProjectsSectionAdapter';
import { buildActiveTeamsByProject } from '../utils/activeProjectTeams';
import { import {
sortRecentProjectsByDisplayPriority, sortRecentProjectsByDisplayPriority,
subscribeRecentProjectOpenHistory, subscribeRecentProjectOpenHistory,
} from '../utils/recentProjectOpenHistory'; } from '../utils/recentProjectOpenHistory';
import { buildActiveTeamsByProject } from '../utils/activeProjectTeams';
import { import {
getRecentProjectsClientSnapshot, getRecentProjectsClientSnapshot,
loadRecentProjectsWithClientCache, loadRecentProjectsWithClientCache,

View file

@ -16,9 +16,9 @@ import {
TEAM_DELETE_DRAFT, TEAM_DELETE_DRAFT,
TEAM_DELETE_TASK_ATTACHMENT, TEAM_DELETE_TASK_ATTACHMENT,
TEAM_DELETE_TEAM, TEAM_DELETE_TEAM,
TEAM_GET_AGENT_RUNTIME,
TEAM_GET_ALL_TASKS, TEAM_GET_ALL_TASKS,
TEAM_GET_ATTACHMENTS, TEAM_GET_ATTACHMENTS,
TEAM_GET_AGENT_RUNTIME,
TEAM_GET_CLAUDE_LOGS, TEAM_GET_CLAUDE_LOGS,
TEAM_GET_DATA, TEAM_GET_DATA,
TEAM_GET_DELETED_TASKS, TEAM_GET_DELETED_TASKS,
@ -60,8 +60,8 @@ import {
TEAM_SEND_MESSAGE, TEAM_SEND_MESSAGE,
TEAM_SET_CHANGE_PRESENCE_TRACKING, TEAM_SET_CHANGE_PRESENCE_TRACKING,
TEAM_SET_PROJECT_BRANCH_TRACKING, TEAM_SET_PROJECT_BRANCH_TRACKING,
TEAM_SET_TASK_LOG_STREAM_TRACKING,
TEAM_SET_TASK_CLARIFICATION, TEAM_SET_TASK_CLARIFICATION,
TEAM_SET_TASK_LOG_STREAM_TRACKING,
TEAM_SET_TOOL_ACTIVITY_TRACKING, TEAM_SET_TOOL_ACTIVITY_TRACKING,
TEAM_SHOW_MESSAGE_NOTIFICATION, TEAM_SHOW_MESSAGE_NOTIFICATION,
TEAM_SOFT_DELETE_TASK, TEAM_SOFT_DELETE_TASK,
@ -167,7 +167,6 @@ import type {
LeadContextUsageSnapshot, LeadContextUsageSnapshot,
MemberFullStats, MemberFullStats,
MemberLogSummary, MemberLogSummary,
TeamAgentRuntimeSnapshot,
MemberSpawnStatusesSnapshot, MemberSpawnStatusesSnapshot,
MessagesPage, MessagesPage,
SendMessageRequest, SendMessageRequest,
@ -175,6 +174,7 @@ import type {
TaskAttachmentMeta, TaskAttachmentMeta,
TaskComment, TaskComment,
TaskRef, TaskRef,
TeamAgentRuntimeSnapshot,
TeamClaudeLogsQuery, TeamClaudeLogsQuery,
TeamClaudeLogsResponse, TeamClaudeLogsResponse,
TeamConfig, TeamConfig,

View file

@ -122,10 +122,10 @@ import type { ContextInjection } from '@renderer/types/contextInjection';
import type { Session } from '@renderer/types/data'; import type { Session } from '@renderer/types/data';
import type { InlineChip } from '@renderer/types/inlineChip'; import type { InlineChip } from '@renderer/types/inlineChip';
import type { import type {
TeamAgentRuntimeEntry,
MemberSpawnStatusEntry, MemberSpawnStatusEntry,
ResolvedTeamMember, ResolvedTeamMember,
TaskRef, TaskRef,
TeamAgentRuntimeEntry,
TeamTaskWithKanban, TeamTaskWithKanban,
} from '@shared/types'; } from '@shared/types';
import type { EditorSelectionAction } from '@shared/types/editor'; import type { EditorSelectionAction } from '@shared/types/editor';

View file

@ -32,21 +32,21 @@ import {
areThoughtMessagesEquivalentForRender, areThoughtMessagesEquivalentForRender,
} from '@renderer/utils/messageRenderEquality'; } from '@renderer/utils/messageRenderEquality';
import { toMessageKey } from '@renderer/utils/teamMessageKey'; import { toMessageKey } from '@renderer/utils/teamMessageKey';
import { stripAgentBlocks } from '@shared/constants/agentBlocks';
import { isApiErrorMessage } from '@shared/utils/apiErrorDetector'; import { isApiErrorMessage } from '@shared/utils/apiErrorDetector';
import { isThoughtProtocolNoise } from '@shared/utils/inboxNoise'; import { isThoughtProtocolNoise } from '@shared/utils/inboxNoise';
import { extractMarkdownPlainText } from '@shared/utils/markdownTextSearch'; import { extractMarkdownPlainText } from '@shared/utils/markdownTextSearch';
import { formatToolSummary, parseToolSummary } from '@shared/utils/toolSummary'; import { formatToolSummary, parseToolSummary } from '@shared/utils/toolSummary';
import { ChevronDown, ChevronRight, ChevronUp, Maximize2 } from 'lucide-react'; import { ChevronDown, ChevronRight, ChevronUp, Maximize2 } from 'lucide-react';
import { buildThoughtDisplayContent } from './activityMarkdown';
import { import {
AnimatedHeightReveal, AnimatedHeightReveal,
ENTRY_REVEAL_ANIMATION_MS, ENTRY_REVEAL_ANIMATION_MS,
ENTRY_REVEAL_EASING, ENTRY_REVEAL_EASING,
} from './AnimatedHeightReveal'; } from './AnimatedHeightReveal';
import { buildThoughtDisplayContent } from './activityMarkdown';
import { ThoughtBodyContent } from './ThoughtBodyContent'; import { ThoughtBodyContent } from './ThoughtBodyContent';
import { stripAgentBlocks } from '@shared/constants/agentBlocks';
import type { InboxMessage, ToolCallMeta } from '@shared/types'; import type { InboxMessage, ToolCallMeta } from '@shared/types';
export interface LeadThoughtGroup { export interface LeadThoughtGroup {

View file

@ -44,7 +44,6 @@ import { normalizePath } from '@renderer/utils/pathNormalize';
import { import {
getTeamModelSelectionError, getTeamModelSelectionError,
normalizeExplicitTeamModelForUi, normalizeExplicitTeamModelForUi,
normalizeTeamModelForUi,
} from '@renderer/utils/teamModelAvailability'; } from '@renderer/utils/teamModelAvailability';
import { getTeamProviderLabel as getCatalogTeamProviderLabel } from '@renderer/utils/teamModelCatalog'; import { getTeamProviderLabel as getCatalogTeamProviderLabel } from '@renderer/utils/teamModelCatalog';
import { DEFAULT_PROVIDER_MODEL_SELECTION } from '@shared/utils/providerModelSelection'; import { DEFAULT_PROVIDER_MODEL_SELECTION } from '@shared/utils/providerModelSelection';
@ -400,7 +399,7 @@ export const CreateTeamDialog = ({
}, [advancedKey]); }, [advancedKey]);
const setSelectedModel = (value: string): void => { const setSelectedModel = (value: string): void => {
const normalizedValue = normalizeTeamModelForUi(selectedProviderId, value); const normalizedValue = normalizeExplicitTeamModelForUi(selectedProviderId, value);
setSelectedModelRaw(normalizedValue); setSelectedModelRaw(normalizedValue);
localStorage.setItem(`team:lastSelectedModel:${selectedProviderId}`, normalizedValue); localStorage.setItem(`team:lastSelectedModel:${selectedProviderId}`, normalizedValue);
}; };

View file

@ -49,7 +49,6 @@ import { nameColorSet } from '@renderer/utils/projectColor';
import { import {
getTeamModelSelectionError, getTeamModelSelectionError,
normalizeExplicitTeamModelForUi, normalizeExplicitTeamModelForUi,
normalizeTeamModelForUi,
} from '@renderer/utils/teamModelAvailability'; } from '@renderer/utils/teamModelAvailability';
import { getTeamProviderLabel as getCatalogTeamProviderLabel } from '@renderer/utils/teamModelCatalog'; import { getTeamProviderLabel as getCatalogTeamProviderLabel } from '@renderer/utils/teamModelCatalog';
import { DEFAULT_PROVIDER_MODEL_SELECTION } from '@shared/utils/providerModelSelection'; import { DEFAULT_PROVIDER_MODEL_SELECTION } from '@shared/utils/providerModelSelection';
@ -462,7 +461,7 @@ export const LaunchTeamDialog = (props: LaunchTeamDialogProps): React.JSX.Elemen
}; };
const setSelectedModel = (value: string): void => { const setSelectedModel = (value: string): void => {
const normalizedValue = normalizeTeamModelForUi(selectedProviderId, value); const normalizedValue = normalizeExplicitTeamModelForUi(selectedProviderId, value);
setSelectedModelRaw(normalizedValue); setSelectedModelRaw(normalizedValue);
localStorage.setItem(`team:lastSelectedModel:${selectedProviderId}`, normalizedValue); localStorage.setItem(`team:lastSelectedModel:${selectedProviderId}`, normalizedValue);
}; };

View file

@ -1,5 +1,6 @@
import React, { act } from 'react'; import React, { act } from 'react';
import { createRoot } from 'react-dom/client'; import { createRoot } from 'react-dom/client';
import { afterEach, describe, expect, it, vi } from 'vitest'; import { afterEach, describe, expect, it, vi } from 'vitest';
vi.mock('@renderer/components/team/MemberBadge', () => ({ vi.mock('@renderer/components/team/MemberBadge', () => ({

View file

@ -27,14 +27,14 @@ import { MemberMessagesTab } from './MemberMessagesTab';
import { MemberStatsTab } from './MemberStatsTab'; import { MemberStatsTab } from './MemberStatsTab';
import { MemberTasksTab } from './MemberTasksTab'; import { MemberTasksTab } from './MemberTasksTab';
import type { TeamLaunchParams } from '@renderer/store/slices/teamSlice';
import type { import type {
LeadActivityState, LeadActivityState,
MemberSpawnStatusEntry, MemberSpawnStatusEntry,
TeamAgentRuntimeEntry,
ResolvedTeamMember, ResolvedTeamMember,
TeamAgentRuntimeEntry,
TeamTaskWithKanban, TeamTaskWithKanban,
} from '@shared/types'; } from '@shared/types';
import type { TeamLaunchParams } from '@renderer/store/slices/teamSlice';
interface MemberDetailDialogProps { interface MemberDetailDialogProps {
open: boolean; open: boolean;

View file

@ -10,9 +10,9 @@ import type { TeamLaunchParams } from '@renderer/store/slices/teamSlice';
import type { TaskStatusCounts } from '@renderer/utils/pathNormalize'; import type { TaskStatusCounts } from '@renderer/utils/pathNormalize';
import type { import type {
LeadActivityState, LeadActivityState,
TeamAgentRuntimeEntry,
MemberSpawnStatusEntry, MemberSpawnStatusEntry,
ResolvedTeamMember, ResolvedTeamMember,
TeamAgentRuntimeEntry,
TeamTaskWithKanban, TeamTaskWithKanban,
} from '@shared/types'; } from '@shared/types';

View file

@ -38,8 +38,6 @@ import type {
LeadActivityState, LeadActivityState,
LeadContextUsage, LeadContextUsage,
MemberActivityMetaEntry, MemberActivityMetaEntry,
TeamAgentRuntimeEntry,
TeamAgentRuntimeSnapshot,
MemberSpawnStatusEntry, MemberSpawnStatusEntry,
MemberSpawnStatusesSnapshot, MemberSpawnStatusesSnapshot,
PersistedTeamLaunchSummary, PersistedTeamLaunchSummary,
@ -48,6 +46,8 @@ import type {
SendMessageResult, SendMessageResult,
TaskChangePresenceState, TaskChangePresenceState,
TaskComment, TaskComment,
TeamAgentRuntimeEntry,
TeamAgentRuntimeSnapshot,
TeamCreateRequest, TeamCreateRequest,
TeamLaunchRequest, TeamLaunchRequest,
TeamMemberActivityMeta, TeamMemberActivityMeta,

View file

@ -1,6 +1,5 @@
import { import {
getProviderScopedTeamModelLabel, getProviderScopedTeamModelLabel,
isSupportedAnthropicTeamModel,
getRuntimeAwareTeamModelUiDisabledReason, getRuntimeAwareTeamModelUiDisabledReason,
getTeamProviderLabel, getTeamProviderLabel,
getTeamProviderModelOptions, getTeamProviderModelOptions,
@ -12,6 +11,7 @@ import {
GPT_5_2_CODEX_UI_DISABLED_REASON, GPT_5_2_CODEX_UI_DISABLED_REASON,
GPT_5_3_CODEX_SPARK_UI_DISABLED_MODEL, GPT_5_3_CODEX_SPARK_UI_DISABLED_MODEL,
GPT_5_3_CODEX_SPARK_UI_DISABLED_REASON, GPT_5_3_CODEX_SPARK_UI_DISABLED_REASON,
isSupportedAnthropicTeamModel,
normalizeTeamModelForUi as normalizeCatalogTeamModelForUi, normalizeTeamModelForUi as normalizeCatalogTeamModelForUi,
sortTeamProviderModels, sortTeamProviderModels,
TEAM_MODEL_UI_DISABLED_BADGE_LABEL, TEAM_MODEL_UI_DISABLED_BADGE_LABEL,

View file

@ -1,10 +1,10 @@
import { parseModelString } from '@shared/utils/modelParser';
import { import {
filterVisibleProviderRuntimeModels, filterVisibleProviderRuntimeModels,
GPT_5_1_CODEX_MINI_UI_DISABLED_MODEL, GPT_5_1_CODEX_MINI_UI_DISABLED_MODEL,
GPT_5_2_CODEX_UI_DISABLED_MODEL, GPT_5_2_CODEX_UI_DISABLED_MODEL,
GPT_5_3_CODEX_SPARK_UI_DISABLED_MODEL, GPT_5_3_CODEX_SPARK_UI_DISABLED_MODEL,
} from '@shared/utils/providerModelVisibility'; } from '@shared/utils/providerModelVisibility';
import { parseModelString } from '@shared/utils/modelParser';
import type { CliProviderId, CliProviderStatus, TeamProviderId } from '@shared/types'; import type { CliProviderId, CliProviderStatus, TeamProviderId } from '@shared/types';

View file

@ -56,7 +56,6 @@ import type {
LeadContextUsageSnapshot, LeadContextUsageSnapshot,
MemberFullStats, MemberFullStats,
MemberLogSummary, MemberLogSummary,
TeamAgentRuntimeSnapshot,
MemberSpawnStatusesSnapshot, MemberSpawnStatusesSnapshot,
MessagesPage, MessagesPage,
ProjectBranchChangeEvent, ProjectBranchChangeEvent,
@ -66,6 +65,7 @@ import type {
TaskAttachmentMeta, TaskAttachmentMeta,
TaskChangePresenceState, TaskChangePresenceState,
TaskComment, TaskComment,
TeamAgentRuntimeSnapshot,
TeamChangeEvent, TeamChangeEvent,
TeamClaudeLogsQuery, TeamClaudeLogsQuery,
TeamClaudeLogsResponse, TeamClaudeLogsResponse,

View file

@ -271,6 +271,7 @@ describe('ipc teams handlers', () => {
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined,
boardTaskActivityService as never, boardTaskActivityService as never,
boardTaskActivityDetailService as never, boardTaskActivityDetailService as never,
boardTaskLogStreamService as never, boardTaskLogStreamService as never,

View file

@ -167,7 +167,12 @@ describe('TeamProvisioningService prepare/auth behavior', () => {
}); });
afterEach(() => { afterEach(() => {
fs.rmSync(tempRoot, { recursive: true, force: true }); fs.rmSync(tempRoot, {
recursive: true,
force: true,
maxRetries: 5,
retryDelay: 200,
});
}); });
it('does not create missing directories during prepareForProvisioning', async () => { it('does not create missing directories during prepareForProvisioning', async () => {