<script lang="ts">
import { appStore } from '$lib/store.svelte.js';
function toolShortName(name: string): string {
if (name.startsWith('mcp__')) {
const parts = name.slice(5).split('__');
return parts.length >= 2 ? `${parts[0]}:${parts.slice(1).join('_')}` : name;
}
return name;
}
</script>
{#if appStore.activeToolName}
<div
class="tool-block"
class:mcp={!!appStore.activeMcpServer}
role="status"
aria-label="Tool executing: {appStore.activeToolName}"
>
<span class="spinner" aria-hidden="true"></span>
<span class="tool-icon" aria-hidden="true">{appStore.activeMcpServer ? '⊕' : '⚙'}</span>
<span class="tool-name">{toolShortName(appStore.activeToolName)}</span>
{#if appStore.activeMcpServer}
<span class="mcp-badge">MCP</span>
{/if}
</div>
{/if}
<style>
.tool-block {
display: flex;
align-items: center;
gap: 0.4rem;
padding: 0.3rem 0.625rem;
background: color-mix(in srgb, var(--yellow) 8%, var(--bg-surface));
border: 1px solid color-mix(in srgb, var(--yellow) 25%, var(--border));
border-radius: 4px;
font-size: 0.8125rem;
color: var(--yellow);
font-family: var(--font-mono);
}
.tool-block.mcp {
background: color-mix(in srgb, var(--magenta) 8%, var(--bg-surface));
border-color: color-mix(in srgb, var(--magenta) 25%, var(--border));
color: var(--magenta);
}
.spinner {
width: 0.5rem;
height: 0.5rem;
border: 1.5px solid currentColor;
border-top-color: transparent;
border-radius: 50%;
animation: spin 0.7s linear infinite;
flex-shrink: 0;
}
.tool-icon {
flex-shrink: 0;
font-size: 0.75rem;
}
.tool-name {
font-family: inherit;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.mcp-badge {
font-size: 0.625rem;
padding: 0.0625rem 0.3rem;
border-radius: 3px;
background: color-mix(in srgb, var(--magenta) 20%, transparent);
color: var(--magenta);
text-transform: uppercase;
letter-spacing: 0.06em;
font-weight: 700;
flex-shrink: 0;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
</style>