fmt(js): npm run fix on merge (#70291)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
hermes-seaeye[bot] 2026-07-23 20:23:02 +00:00 committed by GitHub
parent 53bdcacf17
commit 053f162f94
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 48 additions and 27 deletions

View file

@ -134,6 +134,7 @@ const originalWebSocket = globalThis.WebSocket
beforeEach(() => {
// Drop any parked gateway left by a prior file/case (globalThis slot).
const leftover = takeGatewaySurvivor()
if (leftover) {
try {
leftover.gateway.close()
@ -141,6 +142,7 @@ beforeEach(() => {
// ignore
}
}
vi.useFakeTimers()
FakeWebSocket.mode = 'open'
FakeWebSocket.instances = []
@ -166,6 +168,7 @@ afterEach(() => {
// open gateway instead of tearing it down (the real HMR path). Drain + close
// that survivor so the next test boots a fresh socket instead of adoptBoot().
const survivor = takeGatewaySurvivor()
if (survivor) {
try {
survivor.gateway.close()
@ -173,6 +176,7 @@ afterEach(() => {
// ignore
}
}
vi.useRealTimers()
;(globalThis as { WebSocket: unknown }).WebSocket = originalWebSocket
delete (window as { hermesDesktop?: unknown }).hermesDesktop

View file

@ -512,11 +512,9 @@ export function useMessageStream({
// text merge — replaces the interim's text with the full final.)
const finalContinuesInterim = Boolean(
existing.interim &&
finalText &&
existingText &&
(finalText === existingText ||
finalText.startsWith(existingText) ||
existingText.startsWith(finalText))
finalText &&
existingText &&
(finalText === existingText || finalText.startsWith(existingText) || existingText.startsWith(finalText))
)
if (existing.pending || (!interimBoundaryPending && finalText && existingText === finalText)) {

View file

@ -167,20 +167,20 @@ describe('toChatMessages', () => {
role: 'user',
content: 'opaque compaction payload',
display_kind: 'hidden',
timestamp: 3,
timestamp: 3
},
{
role: 'user',
content: 'opaque model context payload',
display_kind: 'model_switch',
timestamp: 4,
timestamp: 4
},
{
role: 'user',
content: 'opaque delegation context payload',
display_kind: 'async_delegation_complete',
timestamp: 5,
},
timestamp: 5
}
])
expect(messages.map(message => message.role)).toEqual(['user', 'assistant', 'system', 'system'])
@ -188,7 +188,7 @@ describe('toChatMessages', () => {
'real user turn',
'real assistant reply',
'model changed',
'background agent work finished',
'background agent work finished'
])
})
})

View file

@ -313,9 +313,11 @@ function timelineDisplayContent(message: SessionMessage, content: string): strin
}
if (message.display_kind === 'async_delegation_complete') {
const count = message.display_metadata && 'task_count' in message.display_metadata
? message.display_metadata.task_count
: undefined
const count =
message.display_metadata && 'task_count' in message.display_metadata
? message.display_metadata.task_count
: undefined
return count === undefined
? 'background agent work finished'
: `${count} background agent${count === 1 ? '' : 's'} finished`
@ -905,14 +907,17 @@ export function toChatMessages(messages: SessionMessage[]): ChatMessage[] {
}
const content = message.content || message.text || message.context || message.name
const displayContent = transcriptContent(
message.display_kind,
timelineDisplayContent(message, displayContentForMessage(message.role, content))
)
const displayRole =
message.display_kind === 'model_switch' || message.display_kind === 'async_delegation_complete'
? 'system'
: message.role
const parts: ChatMessagePart[] = []
const reasoning =

View file

@ -425,7 +425,13 @@ export interface SessionInfo {
export type TimelineDisplayMetadata =
| { model: string; provider?: string }
| { delegation_id: string; task_count: number; completed_count?: number; failed_count?: number; duration_seconds?: number }
| {
delegation_id: string
task_count: number
completed_count?: number
failed_count?: number
duration_seconds?: number
}
export interface SessionMessage {
codex_reasoning_items?: unknown

View file

@ -31,7 +31,7 @@ describe('toTranscriptMessages', () => {
const rows = [
{ role: 'user', text: 'visible prompt' },
{ role: 'user', text: '[CONTEXT COMPACTION — REFERENCE ONLY]', display_kind: 'hidden' },
{ role: 'assistant', text: 'visible reply' },
{ role: 'assistant', text: 'visible reply' }
]
const result = toTranscriptMessages(rows)
@ -43,14 +43,14 @@ describe('toTranscriptMessages', () => {
const rows = [
{ role: 'user', text: 'hello' },
{ role: 'user', text: '[System: model changed to gpt-5]', display_kind: 'model_switch' },
{ role: 'assistant', text: 'hi' },
{ role: 'assistant', text: 'hi' }
]
const result = toTranscriptMessages(rows)
expect(result.map(msg => [msg.kind, msg.role, msg.text])).toEqual([
[undefined, 'user', 'hello'],
['event', 'system', 'model changed'],
[undefined, 'assistant', 'hi'],
[undefined, 'assistant', 'hi']
])
})
@ -58,8 +58,13 @@ describe('toTranscriptMessages', () => {
const rows = [
{ role: 'user', text: 'do work' },
{ role: 'assistant', text: 'done' },
{ role: 'user', text: '[IMPORTANT: delegation done]', display_kind: 'async_delegation_complete', display_metadata: { task_count: 3 } },
{ role: 'assistant', text: 'merged' },
{
role: 'user',
text: '[IMPORTANT: delegation done]',
display_kind: 'async_delegation_complete',
display_metadata: { task_count: 3 }
},
{ role: 'assistant', text: 'merged' }
]
const result = toTranscriptMessages(rows)
@ -67,14 +72,12 @@ describe('toTranscriptMessages', () => {
[undefined, 'do work'],
[undefined, 'done'],
['event', '3 background agents finished'],
[undefined, 'merged'],
[undefined, 'merged']
])
})
it('projects async_delegation_complete without metadata as generic text', () => {
const rows = [
{ role: 'user', text: 'event', display_kind: 'async_delegation_complete' },
]
const rows = [{ role: 'user', text: 'event', display_kind: 'async_delegation_complete' }]
const result = toTranscriptMessages(rows)
expect(result[0]?.kind).toBe('event')

View file

@ -131,7 +131,9 @@ export const MessageLine = memo(function MessageLine({
<NoSelect flexShrink={0} fromLeftEdge width={eventGutterWidth}>
<Text> </Text>
</NoSelect>
<Text color={t.color.muted} dimColor> {msg.text}</Text>
<Text color={t.color.muted} dimColor>
{msg.text}
</Text>
</Box>
)
}

View file

@ -72,9 +72,12 @@ export const toTranscriptMessages = (rows: unknown): Msg[] => {
if (display_kind === 'async_delegation_complete') {
const meta = (row as TranscriptRow).display_metadata
const count = meta && typeof meta.task_count === 'number' ? meta.task_count : undefined
const label = count === undefined
? 'background agent work finished'
: `${count} background agent${count === 1 ? '' : 's'} finished`
const label =
count === undefined
? 'background agent work finished'
: `${count} background agent${count === 1 ? '' : 's'} finished`
out.push({ kind: 'event', role: 'system', text: label })
pending = []