refactor(desktop): name value-taking setters set*, not toggle*

toggleSkill(name, enabled) is a setter wearing a toggle's name. A toggle takes
no argument; anything handed an explicit value is a set.
This commit is contained in:
Brooklyn Nicholson 2026-07-30 02:41:41 -05:00
parent f975837054
commit 3198ed7cc3
7 changed files with 26 additions and 26 deletions

View file

@ -150,7 +150,7 @@ function ModelEditSubmenuBody({
// Preset-only without a session: `isActive` holds for the global/default
// row pre-session, and the gateway's `config.set` falls back to global
// config when none matches — so don't reach it (preset + optimistic store
// are the whole effect). Same guard in applyModelPreset / toggleFast.
// are the whole effect). Same guard in applyModelPreset / setFast.
if (!activeSessionId) {
return
}
@ -169,7 +169,7 @@ function ModelEditSubmenuBody({
}
}
const toggleFast = (enabled: boolean) => {
const setFast = (enabled: boolean) => {
if (fastControl.kind === 'variant') {
// Fast is a separate model id. Record the choice on the base model's
// preset (selectFamily picks the `-fast` sibling later when set), and
@ -245,7 +245,7 @@ function ModelEditSubmenuBody({
{hasFast ? (
<DropdownMenuItem className={dropdownMenuRow} onSelect={event => event.preventDefault()}>
{copy.fast}
<Switch checked={fastOn} className="ml-auto" onCheckedChange={toggleFast} size="xs" />
<Switch checked={fastOn} className="ml-auto" onCheckedChange={setFast} size="xs" />
</DropdownMenuItem>
) : null}
{reasoning ? (

View file

@ -10,8 +10,8 @@ import { queryClient } from '@/lib/query-client'
const getSkills = vi.fn()
const getToolsets = vi.fn()
const toggleSkill = vi.fn()
const toggleToolset = vi.fn()
const setSkillEnabled = vi.fn()
const setToolsetEnabled = vi.fn()
const getToolsetConfig = vi.fn()
const selectToolsetProvider = vi.fn()
const getUsageAnalytics = vi.fn()
@ -23,8 +23,8 @@ vi.mock('@/hermes', async importOriginal => ({
...(await importOriginal<typeof HermesApi>()),
getSkills: () => getSkills(),
getToolsets: () => getToolsets(),
toggleSkill: (name: string, enabled: boolean) => toggleSkill(name, enabled),
toggleToolset: (name: string, enabled: boolean) => toggleToolset(name, enabled),
setSkillEnabled: (name: string, enabled: boolean) => setSkillEnabled(name, enabled),
setToolsetEnabled: (name: string, enabled: boolean) => setToolsetEnabled(name, enabled),
getToolsetConfig: (name: string) => getToolsetConfig(name),
selectToolsetProvider: (toolset: string, provider: string) => selectToolsetProvider(toolset, provider),
getUsageAnalytics: (days: number) => getUsageAnalytics(days)
@ -78,7 +78,7 @@ async function renderSkills() {
beforeEach(() => {
getSkills.mockResolvedValue([])
getToolsets.mockResolvedValue([toolset()])
toggleToolset.mockResolvedValue({ ok: true, name: 'web', enabled: false })
setToolsetEnabled.mockResolvedValue({ ok: true, name: 'web', enabled: false })
getToolsetConfig.mockResolvedValue({ has_category: true, active_provider: null, providers: [] })
getUsageAnalytics.mockResolvedValue({ tools: [] })
})
@ -101,7 +101,7 @@ describe('SkillsView toolset management', () => {
fireEvent.click(sw)
})
await waitFor(() => expect(toggleToolset).toHaveBeenCalledWith('web', false))
await waitFor(() => expect(setToolsetEnabled).toHaveBeenCalledWith('web', false))
})
it('renders toolset titles without leading emoji', async () => {

View file

@ -730,7 +730,7 @@ export function McpTab({ gateway }: { gateway: HermesGateway | null }) {
return next
}
const toggleServer = async (serverName: string, enabled: boolean) => {
const setServerEnabled = async (serverName: string, enabled: boolean) => {
if (profilePending) {
return
}
@ -978,7 +978,7 @@ export function McpTab({ gateway }: { gateway: HermesGateway | null }) {
onBack={() => setCursor(0)}
onProbe={() => void runProbe(selected)}
onRemove={() => void removeServer(selected)}
onToggle={checked => void toggleServer(selected, checked)}
onToggle={checked => void setServerEnabled(selected, checked)}
onToggleTool={toolName => void toggleTool(selected, toolName)}
probe={probes[selected]}
saved={savedEntry !== undefined}
@ -1019,7 +1019,7 @@ export function McpTab({ gateway }: { gateway: HermesGateway | null }) {
onProbe={() => void runProbe(serverName)}
onRemove={() => void removeServer(serverName)}
onSelect={() => focusServer(serverName)}
onToggle={checked => void toggleServer(serverName, checked)}
onToggle={checked => void setServerEnabled(serverName, checked)}
status={status}
statusText={statusLine(m, status, probes[serverName], server)}
/>

View file

@ -67,7 +67,7 @@ export function ModelVisibilityDialog({
setVisibleModels(toggleModelVisibility($visibleModels.get(), providers, provider.slug, model))
}
const toggleProvider = (provider: ModelOptionProvider, next: boolean) => {
const setProviderVisible = (provider: ModelOptionProvider, next: boolean) => {
setVisibleModels(setProviderVisibility($visibleModels.get(), providers, provider.slug, next))
}
@ -135,7 +135,7 @@ export function ModelVisibilityDialog({
size="0.625rem"
/>
</button>
<Checkbox checked={checkState} onCheckedChange={next => toggleProvider(provider, next !== false)} />
<Checkbox checked={checkState} onCheckedChange={next => setProviderVisible(provider, next !== false)} />
</div>
{!collapsed &&
models.map(family => {

View file

@ -46,7 +46,7 @@ import {
SESSION_TILE_DRAG,
setTreeGroupHeaderHidden,
splitTreeZone,
toggleTreeGroupMinimized
setTreeGroupMinimized
} from '../store'
import { type DoubleTapContext, startPaneDrag } from './drag-session'
@ -110,7 +110,7 @@ function ZoneMenu({
{headerHidden ? t.zones.showHeader : t.zones.hideHeader}
</ContextMenuItem>
{minimizable && (
<ContextMenuItem onSelect={() => toggleTreeGroupMinimized(nodeId, !minimized)}>
<ContextMenuItem onSelect={() => setTreeGroupMinimized(nodeId, !minimized)}>
{minimized ? t.zones.restore : t.zones.minimize}
</ContextMenuItem>
)}
@ -250,7 +250,7 @@ export function TreeGroup({
const hideHeaderDoubleTap: DoubleTapContext = {
key: `hide-header-${node.id}`,
onDoubleTap: () => {
toggleTreeGroupMinimized(node.id, false)
setTreeGroupMinimized(node.id, false)
setTreeGroupHeaderHidden(node.id, true)
}
}

View file

@ -798,7 +798,7 @@ export function revealTreePane(paneId: string) {
// just front its tab behind a collapsed rail. Without this, a tool panel
// (terminal/logs) in a shared zone stays minimized after its toggle opens
// it: setPaneCollapsed's shared-zone branch calls revealTreePane instead
// of toggleTreeGroupMinimized, so the zone never un-minimizes and the
// of setTreeGroupMinimized, so the zone never un-minimizes and the
// pane appears to "close but not open" on ctrl-` / tab click.
let next = tree
@ -1217,7 +1217,7 @@ export function splitTreeZone(groupId: string, side: RootEdge, movePaneId: strin
}
}
export function toggleTreeGroupMinimized(groupId: string, minimized: boolean) {
export function setTreeGroupMinimized(groupId: string, minimized: boolean) {
const tree = $layoutTree.get()
if (tree) {
@ -1256,7 +1256,7 @@ export function setPaneCollapsed(paneId: string, collapsed: boolean) {
activateTreePane(group.id, group.panes[at - 1] ?? group.panes[at + 1])
} else {
toggleTreeGroupMinimized(group.id, true) // pure tool zone folds as a unit
setTreeGroupMinimized(group.id, true) // pure tool zone folds as a unit
}
} else if (!collapsed) {
revealTreePane(paneId)
@ -1266,7 +1266,7 @@ export function setPaneCollapsed(paneId: string, collapsed: boolean) {
}
if (Boolean(group.minimized) !== collapsed) {
toggleTreeGroupMinimized(group.id, collapsed)
setTreeGroupMinimized(group.id, collapsed)
if (!collapsed) {
revealTreePane(paneId)
@ -1290,7 +1290,7 @@ export function restoreTreePane(paneId: string) {
const group = paneGroup(paneId)
if (group?.minimized) {
toggleTreeGroupMinimized(group.id, false)
setTreeGroupMinimized(group.id, false)
}
revealTreePane(paneId)
@ -1301,7 +1301,7 @@ export function restoreTreePane(paneId: string) {
const group = paneGroup(paneId)
if (group) {
toggleTreeGroupMinimized(group.id, false)
setTreeGroupMinimized(group.id, false)
activateTreePane(group.id, paneId)
}
}
@ -1321,7 +1321,7 @@ export function collapseTreePane(paneId: string) {
const group = paneGroup(paneId)
if (group) {
toggleTreeGroupMinimized(group.id, true)
setTreeGroupMinimized(group.id, true)
}
}

View file

@ -960,7 +960,7 @@ export function editLearningNode(id: string, content: string): Promise<{ message
})
}
export function toggleSkill(name: string, enabled: boolean): Promise<{ ok: boolean; name: string; enabled: boolean }> {
export function setSkillEnabled(name: string, enabled: boolean): Promise<{ ok: boolean; name: string; enabled: boolean }> {
return window.hermesDesktop.api<{ ok: boolean; name: string; enabled: boolean }>({
...profileScoped(),
path: '/api/skills/toggle',
@ -1034,7 +1034,7 @@ export function getToolsets(): Promise<ToolsetInfo[]> {
})
}
export function toggleToolset(
export function setToolsetEnabled(
name: string,
enabled: boolean
): Promise<{ ok: boolean; name: string; enabled: boolean }> {