fix(team): block lead relaunches and clarify log counts

This commit is contained in:
iliya 2026-04-07 12:59:42 +03:00
parent 7f737f985b
commit dd6f50cad6
3 changed files with 33 additions and 9 deletions

View file

@ -171,7 +171,8 @@ const FS_MONITOR_POLL_MS = 2000;
const TASK_WAIT_FALLBACK_MS = 15_000;
const STALL_CHECK_INTERVAL_MS = 10_000;
const STALL_WARNING_THRESHOLD_MS = 20_000;
const APP_TEAM_RUNTIME_DISALLOWED_TOOLS = 'TeamDelete,TodoWrite,TaskCreate,TaskUpdate';
const APP_TEAM_RUNTIME_DISALLOWED_TOOLS =
'TeamDelete,TodoWrite,TaskCreate,TaskUpdate,Agent,mcp__agent-teams__team_launch,mcp__agent-teams__team_stop';
const TEAM_JSON_READ_TIMEOUT_MS = 5_000;
const TEAM_CONFIG_MAX_BYTES = 10 * 1024 * 1024;
const TEAM_INBOX_MAX_BYTES = 2 * 1024 * 1024;

View file

@ -50,6 +50,8 @@ export const ClaudeLogsPanel = ({
pendingNewCount,
isAlive,
filteredText,
totalGroupCount,
filteredGroupCount,
showMoreVisible,
searchQuery,
setSearchQuery,
@ -70,10 +72,17 @@ export const ClaudeLogsPanel = ({
{/* Toolbar */}
<div className="flex items-center justify-between gap-2 pb-2">
<span className="text-[11px] text-[var(--color-text-muted)]">
{data.total > 0 ? (
{totalGroupCount > 0 ? (
<>
<span className="font-mono">{Math.min(data.total, data.lines.length)}</span> of{' '}
<span className="font-mono">{data.total}</span>
<span className="font-mono">{filteredGroupCount}</span> of{' '}
<span className="font-mono">{totalGroupCount}</span> groups
{data.total !== totalGroupCount ? (
<>
{' '}
<span aria-hidden="true">·</span> <span className="font-mono">{data.total}</span>{' '}
raw lines
</>
) : null}
</>
) : isAlive ? (
'No logs yet.'

View file

@ -19,6 +19,7 @@ import {
setTeamClaudeLogsSidebarUiState,
} from './sidebar/teamSidebarUiState';
import { DEFAULT_CLAUDE_LOGS_FILTER } from './ClaudeLogsFilterPopover';
import { parseStreamJsonToGroups } from '@renderer/utils/streamJsonParser';
import type { ClaudeLogsFilterState } from './ClaudeLogsFilterPopover';
import type { ClaudeLogsViewerState } from './CliLogsRichView';
@ -59,6 +60,8 @@ export interface ClaudeLogsController {
filteredText: string;
online: boolean;
badge: number | undefined;
totalGroupCount: number;
filteredGroupCount: number;
showMoreVisible: boolean;
lastLogPreview: LastLogPreview | null;
@ -585,7 +588,6 @@ export function useClaudeLogsController(teamName: string): ClaudeLogsController
// ── Computed values ───────────────────────────────────────────────────
const online = useMemo(() => isRecent(data.updatedAt), [data.updatedAt]);
const badge = data.total > 0 ? data.total : undefined;
const showMoreVisible = data.hasMore || loadingMore;
const lastLogPreview = useMemo(
@ -593,6 +595,8 @@ export function useClaudeLogsController(teamName: string): ClaudeLogsController
[data.lines]
);
const normalizedText = useMemo(() => normalizeToStreamJsonText(data.lines), [data.lines]);
const filteredText = useMemo(() => {
if (data.lines.length === 0) return '';
const isDefault =
@ -601,11 +605,19 @@ export function useClaudeLogsController(teamName: string): ClaudeLogsController
[...DEFAULT_CLAUDE_LOGS_FILTER.streams].every((s) => filter.streams.has(s)) &&
[...DEFAULT_CLAUDE_LOGS_FILTER.kinds].every((k) => filter.kinds.has(k));
if (!searchQuery.trim() && isDefault) {
return normalizeToStreamJsonText(data.lines);
}
if (!searchQuery.trim() && isDefault) return normalizedText;
return filterStreamJsonText(data.lines, searchQuery, filter);
}, [data.lines, searchQuery, filter]);
}, [data.lines, normalizedText, searchQuery, filter]);
const totalGroupCount = useMemo(
() => parseStreamJsonToGroups(normalizedText).length,
[normalizedText]
);
const filteredGroupCount = useMemo(
() => parseStreamJsonToGroups(filteredText).length,
[filteredText]
);
const badge = totalGroupCount > 0 ? totalGroupCount : undefined;
// ── Container ref callback ────────────────────────────────────────────
const containerRefCallback = useCallback((el: HTMLDivElement | null) => {
@ -647,6 +659,8 @@ export function useClaudeLogsController(teamName: string): ClaudeLogsController
filteredText,
online,
badge,
totalGroupCount,
filteredGroupCount,
showMoreVisible,
lastLogPreview,
searchQuery,