fix: rounded icons, setup text overflow, new chat on model switch, token counts

1. Desktop icon: bake rounded corners into the PNG/ICNS/ICO so the icon
   looks consistent on Desktop and in Applications.
2. SetupScreen: truncate long status text with ellipsis, word-break
   error messages so they don't overflow the block.
3. Model switching: create a new chat session when changing models,
   preventing stale context errors with the new model.
4. X-Ray footer: show input/output token counts in the collapsed
   summary (e.g. "42 in · 128 out") alongside engine, model, latency.
This commit is contained in:
Jon Saad-Falcon
2026-03-14 14:05:49 -07:00
parent e240fde74a
commit 7b0fcfa607
10 changed files with 8 additions and 5 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

+3 -1
View File
@@ -18,7 +18,9 @@ export function XRayFooter({ usage, telemetry }: Props) {
const parts: string[] = [];
if (telemetry?.engine) parts.push(telemetry.engine);
if (telemetry?.model_id) parts.push(telemetry.model_id);
if (usage?.completion_tokens) parts.push(`${usage.completion_tokens} tok`);
if (usage && (usage.prompt_tokens || usage.completion_tokens)) {
parts.push(`${usage.prompt_tokens} in \u00B7 ${usage.completion_tokens} out`);
}
if (telemetry?.total_ms) parts.push(formatMs(telemetry.total_ms));
if (parts.length === 0 && !usage?.total_tokens) return null;
+3 -2
View File
@@ -70,9 +70,10 @@ export function CommandPalette() {
setSelectedModel(modelId);
setCommandPaletteOpen(false);
// Preload the model if switching to a different one
// Switching models creates a new chat session for a clean slate
if (modelId !== previousModel) {
const { setModelLoading, addLogEntry } = useAppStore.getState();
const { createConversation, setModelLoading, addLogEntry } = useAppStore.getState();
createConversation(modelId);
setModelLoading(true);
addLogEntry({ timestamp: Date.now(), level: 'info', category: 'model', message: `Switching to ${modelId}...` });
try {
+2 -2
View File
@@ -48,7 +48,7 @@ function StepRow({
<div className="text-sm font-medium" style={{ color: 'var(--color-text)' }}>
{label}
</div>
<div className="text-xs" style={{ color: 'var(--color-text-tertiary)' }}>
<div className="text-xs truncate" style={{ color: 'var(--color-text-tertiary)', maxWidth: '280px' }}>
{done ? 'Ready' : active ? detail : 'Waiting...'}
</div>
</div>
@@ -145,7 +145,7 @@ export function SetupScreen({ onReady }: { onReady: () => void }) {
}}
>
<XCircle size={16} className="shrink-0 mt-0.5" />
<span>{status.error}</span>
<span style={{ wordBreak: 'break-word', overflowWrap: 'anywhere' }}>{status.error}</span>
</div>
)}