Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
File size: 2,199 Bytes
bdbcdab da5e0c7 7ead77c da5e0c7 bdbcdab 472f63c bdbcdab 7ead77c bdbcdab | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import { Box, Typography } from '@mui/material';
import { keyframes } from '@mui/system';
import { useAgentStore, type ActivityStatus } from '@/store/agentStore';
const shimmer = keyframes`
0% { background-position: -100% center; }
50% { background-position: 200% center; }
100% { background-position: -100% center; }
`;
const TOOL_LABELS: Record<string, string> = {
sandbox_create: 'Creating sandbox for code development, this might take 1-2 minutes',
bash: 'Running command in sandbox',
hf_jobs: 'Running a GPU job, this might take a while',
hf_repo_files: 'Uploading file',
hf_repo_git: 'Git operation',
hf_inspect_dataset: 'Inspecting dataset',
hf_search: 'Searching',
plan_tool: 'Planning',
research: 'Researching',
};
function statusLabel(status: ActivityStatus): string {
switch (status.type) {
case 'thinking': return 'Thinking';
case 'streaming': return 'Writing';
case 'tool': {
const base = status.description || TOOL_LABELS[status.toolName] || `Running ${status.toolName}`;
if (status.toolName === 'bash' && status.description && /install/i.test(status.description)) {
return `${base} — this can take a few minutes, sit tight`;
}
return base;
}
case 'waiting-approval': return 'Waiting for approval';
default: return '';
}
}
export default function ActivityStatusBar() {
const activityStatus = useAgentStore(s => s.activityStatus);
if (activityStatus.type === 'idle') return null;
const label = statusLabel(activityStatus);
return (
<Box sx={{ px: 2, py: 0.5, minHeight: 28, display: 'flex', alignItems: 'center' }}>
<Typography
sx={{
fontFamily: 'monospace',
fontSize: '0.72rem',
fontWeight: 500,
letterSpacing: '0.02em',
background: 'linear-gradient(90deg, var(--muted-text) 30%, var(--text) 50%, var(--muted-text) 70%)',
backgroundSize: '250% 100%',
backgroundClip: 'text',
WebkitBackgroundClip: 'text',
WebkitTextFillColor: 'transparent',
animation: `${shimmer} 4s ease-in-out infinite`,
}}
>
{label}…
</Typography>
</Box>
);
}
|