Files
orca/src/shared/tab-title-resolution.ts
T

42 lines
1.3 KiB
TypeScript

import type { Tab } from './tab-types'
import type { TerminalTab } from './terminal-tab-types'
import { isMeaningfulOpenCodeTerminalTitle } from './opencode-terminal-title'
export function resolveTerminalTabTitle(
tab: Pick<TerminalTab, 'quickCommandLabel' | 'aiVaultTitle' | 'generatedTitle' | 'title'> & {
customTitle?: string | null
},
generatedTitlesEnabled: boolean,
fallback = ''
): string {
const liveTitle = tab.title?.trim() ?? ''
return (
tab.customTitle?.trim() ||
tab.quickCommandLabel?.trim() ||
(isMeaningfulOpenCodeTerminalTitle(liveTitle) ? liveTitle : '') ||
tab.aiVaultTitle?.title.trim() ||
(generatedTitlesEnabled ? tab.generatedTitle?.trim() : '') ||
liveTitle ||
fallback
)
}
export function resolveUnifiedTabLabel(
tab:
| Pick<Tab, 'customLabel' | 'quickCommandLabel' | 'aiVaultTitle' | 'generatedLabel' | 'label'>
| undefined,
generatedTitlesEnabled: boolean,
fallback = ''
): string {
const liveLabel = tab?.label?.trim() ?? ''
return (
tab?.customLabel?.trim() ||
tab?.quickCommandLabel?.trim() ||
(isMeaningfulOpenCodeTerminalTitle(liveLabel) ? liveLabel : '') ||
tab?.aiVaultTitle?.title.trim() ||
(generatedTitlesEnabled ? tab?.generatedLabel?.trim() : '') ||
liveLabel ||
fallback
)
}