mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-24 16:54:43 +00:00
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:
parent
53bdcacf17
commit
053f162f94
8 changed files with 48 additions and 27 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
])
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue