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.
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.1 MiB |
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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>
|
||||
)}
|
||||
|
||||
|
||||