From 7d96e602a9d231f63f0a6977084d627c7c9c63be Mon Sep 17 00:00:00 2001 From: "hermes-seaeye[bot]" <307254004+hermes-seaeye[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 03:32:32 +0000 Subject: [PATCH] fmt(js): `npm run fix` on merge (#69805) Co-authored-by: github-actions[bot] --- apps/desktop/electron/backend-probes.test.ts | 7 ++++- .../src/app/chat/composer/controls.tsx | 5 +++- .../hooks/use-composer-submit.test.tsx | 7 ++++- .../session/hooks/use-hermes-config.test.ts | 1 - .../hooks/use-prompt-actions/index.test.tsx | 6 +--- .../session/hooks/use-prompt-actions/index.ts | 29 ++++++++++++++----- .../hooks/use-session-actions/utils.test.ts | 8 ++--- .../hooks/use-session-actions/utils.ts | 8 ++++- .../src/app/settings/billing/index.test.tsx | 4 ++- .../src/app/settings/gateway-settings.tsx | 9 +++++- apps/desktop/src/app/settings/primitives.tsx | 7 ++++- .../src/app/shell/context-usage-panel.tsx | 7 ++++- apps/desktop/src/app/updates-overlay.tsx | 7 ++++- apps/desktop/src/components/ui/input.tsx | 8 +++-- apps/desktop/src/store/billing-block.ts | 5 +--- apps/desktop/src/store/session-color.ts | 4 ++- 16 files changed, 88 insertions(+), 34 deletions(-) diff --git a/apps/desktop/electron/backend-probes.test.ts b/apps/desktop/electron/backend-probes.test.ts index eb3c50c8107..bddc61152f8 100644 --- a/apps/desktop/electron/backend-probes.test.ts +++ b/apps/desktop/electron/backend-probes.test.ts @@ -12,7 +12,12 @@ import path from 'node:path' import { test } from 'vitest' -import { canImportHermesCli, hermesRuntimeImportProbe, shouldTrustHermesOverride, verifyHermesCli } from './backend-probes' +import { + canImportHermesCli, + hermesRuntimeImportProbe, + shouldTrustHermesOverride, + verifyHermesCli +} from './backend-probes' // Resolve the host's own Node binary -- guaranteed to be on disk and // runnable. We use it as both a stand-in for "a python that doesn't diff --git a/apps/desktop/src/app/chat/composer/controls.tsx b/apps/desktop/src/app/chat/composer/controls.tsx index 432e0a6ead4..47f253001da 100644 --- a/apps/desktop/src/app/chat/composer/controls.tsx +++ b/apps/desktop/src/app/chat/composer/controls.tsx @@ -115,7 +115,10 @@ export function ComposerControls({ + ) : ( ) diff --git a/apps/desktop/src/app/chat/composer/hooks/use-composer-submit.test.tsx b/apps/desktop/src/app/chat/composer/hooks/use-composer-submit.test.tsx index 1ab89167eb6..a09cd10ef29 100644 --- a/apps/desktop/src/app/chat/composer/hooks/use-composer-submit.test.tsx +++ b/apps/desktop/src/app/chat/composer/hooks/use-composer-submit.test.tsx @@ -12,7 +12,12 @@ interface SubmitHarnessOptions { text?: string } -function renderSubmitHook({ attachments = [], busy = false, compacting = false, text = '' }: SubmitHarnessOptions = {}) { +function renderSubmitHook({ + attachments = [], + busy = false, + compacting = false, + text = '' +}: SubmitHarnessOptions = {}) { const draftRef = { current: text } const editor = document.createElement('div') editor.dataset.slot = 'composer-rich-input' diff --git a/apps/desktop/src/app/session/hooks/use-hermes-config.test.ts b/apps/desktop/src/app/session/hooks/use-hermes-config.test.ts index d562fae960f..23e0f5a74c8 100644 --- a/apps/desktop/src/app/session/hooks/use-hermes-config.test.ts +++ b/apps/desktop/src/app/session/hooks/use-hermes-config.test.ts @@ -73,7 +73,6 @@ describe('useHermesConfig refreshHermesConfig', () => { expect($currentCwd.get()).toBe('/Users/example/repo/.worktrees/attached') }) - it('does not let a stale forced config refresh overwrite newer draft selector intent', async () => { const profileConfig = deferred>>() vi.mocked(getHermesConfig).mockReturnValueOnce(profileConfig.promise) diff --git a/apps/desktop/src/app/session/hooks/use-prompt-actions/index.test.tsx b/apps/desktop/src/app/session/hooks/use-prompt-actions/index.test.tsx index 31caf06cb73..f27fc5b750a 100644 --- a/apps/desktop/src/app/session/hooks/use-prompt-actions/index.test.tsx +++ b/apps/desktop/src/app/session/hooks/use-prompt-actions/index.test.tsx @@ -1062,11 +1062,7 @@ describe('usePromptActions submit / queue drain semantics', () => { let handle: HarnessHandle | null = null await actRender( - (handle = h)} - refreshSessions={async () => undefined} - requestGateway={requestGateway} - /> + (handle = h)} refreshSessions={async () => undefined} requestGateway={requestGateway} /> ) markVoicePlaybackInterrupted() diff --git a/apps/desktop/src/app/session/hooks/use-prompt-actions/index.ts b/apps/desktop/src/app/session/hooks/use-prompt-actions/index.ts index a3327594568..f7edf24f14c 100644 --- a/apps/desktop/src/app/session/hooks/use-prompt-actions/index.ts +++ b/apps/desktop/src/app/session/hooks/use-prompt-actions/index.ts @@ -247,16 +247,22 @@ export function usePromptActions({ role, parts: [textPart(body)] } - const streamIndex = options.insertBeforeActiveReply && state.streamId - ? state.messages.findIndex(candidate => candidate.id === state.streamId) - : -1 + + const streamIndex = + options.insertBeforeActiveReply && state.streamId + ? state.messages.findIndex(candidate => candidate.id === state.streamId) + : -1 + const lastAssistantIndex = options.insertBeforeActiveReply ? state.messages.map(candidate => candidate.role).lastIndexOf('assistant') : -1 + const insertionIndex = streamIndex >= 0 ? streamIndex : lastAssistantIndex - const messages = insertionIndex >= 0 - ? [...state.messages.slice(0, insertionIndex), message, ...state.messages.slice(insertionIndex)] - : [...state.messages, message] + + const messages = + insertionIndex >= 0 + ? [...state.messages.slice(0, insertionIndex), message, ...state.messages.slice(insertionIndex)] + : [...state.messages, message] return { ...state, messages } }, @@ -643,11 +649,13 @@ export function usePromptActions({ // gateway; appending after the response leaves the correction below a // reply that the redirect has already replaced. const messageId = appendSessionTextMessage(id, 'user', text, undefined, { insertBeforeActiveReply: true }) + const discardOptimisticMessage = () => updateSessionState(id, state => ({ ...state, messages: state.messages.filter(message => message.id !== messageId) })) + const moveOptimisticMessageToEnd = () => updateSessionState(id, state => { const message = state.messages.find(candidate => candidate.id === messageId) @@ -713,7 +721,14 @@ export function usePromptActions({ return false }, - [activeSessionId, activeSessionIdRef, appendSessionTextMessage, requestGateway, selectedStoredSessionIdRef, updateSessionState] + [ + activeSessionId, + activeSessionIdRef, + appendSessionTextMessage, + requestGateway, + selectedStoredSessionIdRef, + updateSessionState + ] ) const reloadFromMessage = useCallback( diff --git a/apps/desktop/src/app/session/hooks/use-session-actions/utils.test.ts b/apps/desktop/src/app/session/hooks/use-session-actions/utils.test.ts index 75dd98bc228..d2fab21de6c 100644 --- a/apps/desktop/src/app/session/hooks/use-session-actions/utils.test.ts +++ b/apps/desktop/src/app/session/hooks/use-session-actions/utils.test.ts @@ -342,11 +342,9 @@ describe('preserveLocalPendingTurnMessages', () => { msg('user-inflight', 'user', 'the one genuinely in-flight prompt') ] - expect(preserveLocalPendingTurnMessages(compressedAuthority, pollutedWarmCache).map(message => message.id)).toEqual([ - 'stored-user', - 'stored-assistant', - 'user-inflight' - ]) + expect(preserveLocalPendingTurnMessages(compressedAuthority, pollutedWarmCache).map(message => message.id)).toEqual( + ['stored-user', 'stored-assistant', 'user-inflight'] + ) }) it('drops the live tail once the latest authoritative user has persisted it after compression', () => { diff --git a/apps/desktop/src/app/session/hooks/use-session-actions/utils.ts b/apps/desktop/src/app/session/hooks/use-session-actions/utils.ts index 4e31c2771bf..f724a8f3e2c 100644 --- a/apps/desktop/src/app/session/hooks/use-session-actions/utils.ts +++ b/apps/desktop/src/app/session/hooks/use-session-actions/utils.ts @@ -260,9 +260,11 @@ export function preserveLocalPendingTurnMessages( const nextIds = new Set(nextMessages.map(message => message.id)) const previousRoleCounts = new Map() + const newestOptimisticUser = [...previousMessages] .reverse() .find(message => message.role === 'user' && message.id.startsWith('user-')) + const latestAuthoritativeUser = [...nextMessages].reverse().find(message => message.role === 'user') const preserved: ChatMessage[] = [] @@ -283,7 +285,11 @@ export function preserveLocalPendingTurnMessages( continue } - if (isOptimisticUser && latestAuthoritativeUser && chatMessageText(latestAuthoritativeUser).trim() === chatMessageText(message).trim()) { + if ( + isOptimisticUser && + latestAuthoritativeUser && + chatMessageText(latestAuthoritativeUser).trim() === chatMessageText(message).trim() + ) { continue } diff --git a/apps/desktop/src/app/settings/billing/index.test.tsx b/apps/desktop/src/app/settings/billing/index.test.tsx index 6ba5f99a4f9..7ef62d54342 100644 --- a/apps/desktop/src/app/settings/billing/index.test.tsx +++ b/apps/desktop/src/app/settings/billing/index.test.tsx @@ -668,7 +668,9 @@ describe('BillingSettings', () => { expect(await screen.findByText('No payment method on file')).toBeTruthy() expect( - screen.getByText('Buying top-up credits and auto-refill stay disabled until a card is on file. Add one on the portal.') + screen.getByText( + 'Buying top-up credits and auto-refill stay disabled until a card is on file. Add one on the portal.' + ) ).toBeTruthy() expect(screen.getByRole('button', { name: /Add card/ })).toBeTruthy() }) diff --git a/apps/desktop/src/app/settings/gateway-settings.tsx b/apps/desktop/src/app/settings/gateway-settings.tsx index 7f8b45c0e78..91e1a117845 100644 --- a/apps/desktop/src/app/settings/gateway-settings.tsx +++ b/apps/desktop/src/app/settings/gateway-settings.tsx @@ -985,7 +985,14 @@ export function GatewaySettings({ embedded = false }: { embedded?: boolean } = { } if (loading) { - return + return ( + + ) } if (!window.hermesDesktop?.getConnectionConfig) { diff --git a/apps/desktop/src/app/settings/primitives.tsx b/apps/desktop/src/app/settings/primitives.tsx index 11d169f5298..2cc671f24ca 100644 --- a/apps/desktop/src/app/settings/primitives.tsx +++ b/apps/desktop/src/app/settings/primitives.tsx @@ -194,7 +194,12 @@ export function SectionHeadingSkeleton() { export function ListRowSkeleton({ wide = false }: { wide?: boolean }) { return (
-
+
diff --git a/apps/desktop/src/app/shell/context-usage-panel.tsx b/apps/desktop/src/app/shell/context-usage-panel.tsx index 03ddd21a50c..8689e8f29f3 100644 --- a/apps/desktop/src/app/shell/context-usage-panel.tsx +++ b/apps/desktop/src/app/shell/context-usage-panel.tsx @@ -12,7 +12,12 @@ interface ContextUsagePanelProps { sessionId: string | null } -export function ContextUsagePanel({ currentUsage, onUsageSnapshot, requestGateway, sessionId }: ContextUsagePanelProps) { +export function ContextUsagePanel({ + currentUsage, + onUsageSnapshot, + requestGateway, + sessionId +}: ContextUsagePanelProps) { const { t } = useI18n() const copy = t.shell.statusbar.contextUsagePanel const [breakdown, setBreakdown] = useState(null) diff --git a/apps/desktop/src/app/updates-overlay.tsx b/apps/desktop/src/app/updates-overlay.tsx index be2d4c9f823..2ad94f8ab38 100644 --- a/apps/desktop/src/app/updates-overlay.tsx +++ b/apps/desktop/src/app/updates-overlay.tsx @@ -397,7 +397,12 @@ function ApplyingView({ apply, isBackend }: { apply: UpdateApplyState; isBackend ) : null}
- + {recentLog.length > 1 ? (
diff --git a/apps/desktop/src/components/ui/input.tsx b/apps/desktop/src/components/ui/input.tsx index 8279cd1d459..9789cf0687f 100644 --- a/apps/desktop/src/components/ui/input.tsx +++ b/apps/desktop/src/components/ui/input.tsx @@ -59,9 +59,13 @@ function Input({ className, containerClassName, prefix, suffix, size, type, ...p )} data-slot="input-group" > - {prefix != null && {prefix}} + {prefix != null && ( + {prefix} + )} {field} - {suffix != null && {suffix}} + {suffix != null && ( + {suffix} + )}
) } diff --git a/apps/desktop/src/store/billing-block.ts b/apps/desktop/src/store/billing-block.ts index 4d640302b63..6ced9d5f0c4 100644 --- a/apps/desktop/src/store/billing-block.ts +++ b/apps/desktop/src/store/billing-block.ts @@ -71,9 +71,6 @@ export function runBillingRecovery(block: BillingBlock): void { requestBillingSettings() } -export function billingCtaLabel( - block: BillingBlock, - copy: { addCredits: string; openBilling: string } -): string { +export function billingCtaLabel(block: BillingBlock, copy: { addCredits: string; openBilling: string }): string { return block.is_nous ? copy.openBilling : copy.addCredits } diff --git a/apps/desktop/src/store/session-color.ts b/apps/desktop/src/store/session-color.ts index 9c0871c6391..f4925496d99 100644 --- a/apps/desktop/src/store/session-color.ts +++ b/apps/desktop/src/store/session-color.ts @@ -74,5 +74,7 @@ export function sessionColorFor(session: null | SessionInfo | undefined): string return undefined } - return $sessionColorById.get()[session.id] ?? resolveSessionColor(session, $projects.get(), $sessionColorOverrides.get()) + return ( + $sessionColorById.get()[session.id] ?? resolveSessionColor(session, $projects.get(), $sessionColorOverrides.get()) + ) }