Kode-cli/src/utils/terminal.ts
2025-08-10 19:57:17 +08:00

50 lines
1.4 KiB
TypeScript

import { safeParseJSON } from './json'
import { logError } from './log'
export function setTerminalTitle(title: string): void {
if (process.platform === 'win32') {
process.title = title ? `${title}` : title
} else {
process.stdout.write(`\x1b]0;${title ? `${title}` : ''}\x07`)
}
}
export async function updateTerminalTitle(message: string): Promise<void> {
try {
const result = await queryQuick({
systemPrompt: [
"Analyze if this message indicates a new conversation topic. If it does, extract a 2-3 word title that captures the new topic. Format your response as a JSON object with two fields: 'isNewTopic' (boolean) and 'title' (string, or null if isNewTopic is false). Only include these fields, no other text.",
],
userPrompt: message,
enablePromptCaching: true,
})
const content = result.message.content
.filter(_ => _.type === 'text')
.map(_ => _.text)
.join('')
const response = safeParseJSON(content)
if (
response &&
typeof response === 'object' &&
'isNewTopic' in response &&
'title' in response
) {
if (response.isNewTopic && response.title) {
setTerminalTitle(response.title as string)
}
}
} catch (error) {
logError(error)
}
}
export function clearTerminal(): Promise<void> {
return new Promise(resolve => {
process.stdout.write('\x1b[2J\x1b[3J\x1b[H', () => {
resolve()
})
})
}