feat: display toggles, smart session resume, fix stale transcript pane

Three things.

1. Two new display preferences. "Show Tool Calls" and "Show Reasoning"
   control whether each answer lists the tools Lam called and the model's
   thinking trace. Both default on, so nothing changes on upgrade.

2. Fix: starting a new chat left the previous conversation in the right
   pane. The pane rendered the highlighted row's transcript, and Vicinae
   exposes no way to set the selected row, so the selection could stay put
   when cmd+N prepended a new chat. The pane now derives from the active
   session rather than the row, so it follows the chat the user is
   actually in whatever the selection happens to be. A side benefit is
   that mount now reads only session summaries, not every transcript.

3. "Start New Chat After" (default 1 hour) starts a fresh chat when the
   command opens and the last conversation is older than the window.
   "Never" restores the old always-reopen behaviour, for people who want
   to stay in their last chat. Old conversations are never deleted; they
   just sort into their recency section.

The setup screen lists all three so the current values are visible without
opening preferences.

Verified: setup renders "Show Tool Calls: Shown", "Show Reasoning: Shown",
"Start New Chat After: After 1 hour" with 17 models reachable. typecheck,
eslint, 127 tests and vici build all pass.
This commit is contained in:
2026-10-04 05:21:35 +08:00
parent ffe2c6b7ed
commit 9a791475d3
8 changed files with 304 additions and 73 deletions
+19 -1
View File
@@ -1,6 +1,6 @@
import { Action, ActionPanel, Icon, List, openExtensionPreferences } from "@vicinae/api";
import { useCallback, useEffect, useMemo, useState } from "react";
import { getLamPreferences, needsSetup } from "./lib/preferences";
import { describeResumeTimeout, getLamPreferences, needsSetup } from "./lib/preferences";
import { listModels } from "./lib/ollama";
import type { ModelInfo } from "./lib/types";
import { errorMessage } from "./lib/utils";
@@ -131,6 +131,24 @@ export default function SetupCommand() {
subtitle={preferences.think ?? "Off"}
actions={settingsActions}
/>
<List.Item
icon={Icon.BulletPoints}
title="Show Tool Calls"
subtitle={preferences.showToolCalls ? "Shown" : "Hidden"}
actions={settingsActions}
/>
<List.Item
icon={Icon.SpeechBubble}
title="Show Reasoning"
subtitle={preferences.showReasoning ? "Shown" : "Hidden"}
actions={settingsActions}
/>
<List.Item
icon={Icon.ArrowClockwise}
title="Start New Chat After"
subtitle={describeResumeTimeout(preferences.resumeTimeoutMs)}
actions={settingsActions}
/>
</List.Section>
{error ? (