diff --git a/src/server/routes/proxy/inputFiles.test.ts b/src/server/routes/proxy/inputFiles.test.ts index 843a420..7b2a604 100644 --- a/src/server/routes/proxy/inputFiles.test.ts +++ b/src/server/routes/proxy/inputFiles.test.ts @@ -2,9 +2,13 @@ import { describe, expect, it, vi, beforeEach } from 'vitest'; const getProxyFileByPublicIdForOwnerMock = vi.fn(); -vi.mock('../../services/proxyFileStore.js', () => ({ - getProxyFileByPublicIdForOwner: (...args: unknown[]) => getProxyFileByPublicIdForOwnerMock(...args), -})); +vi.mock('../../services/proxyFileStore.js', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getProxyFileByPublicIdForOwner: (...args: unknown[]) => getProxyFileByPublicIdForOwnerMock(...args), + }; +}); describe('inlineLocalInputFileReferences', () => { beforeEach(() => { diff --git a/src/server/routes/proxy/logPathMeta.ts b/src/server/routes/proxy/logPathMeta.ts index 35a3175..eb4c3cb 100644 --- a/src/server/routes/proxy/logPathMeta.ts +++ b/src/server/routes/proxy/logPathMeta.ts @@ -1,4 +1,4 @@ -import { parseProxyLogMetadata } from '../../../shared/proxyLogMeta.js'; +import { parseProxyLogMetadata, type ParsedProxyLogMetadata } from '../../../shared/proxyLogMeta.js'; type ComposeProxyLogMessageArgs = { clientKind?: string | null; @@ -9,13 +9,7 @@ type ComposeProxyLogMessageArgs = { errorMessage?: string | null; }; -export type ParsedProxyLogMessageMeta = { - clientKind: string | null; - sessionId: string | null; - downstreamPath: string | null; - upstreamPath: string | null; - messageText: string; -}; +export type ParsedProxyLogMessageMeta = ParsedProxyLogMetadata; export function parseProxyLogMessageMeta(rawMessage: string): ParsedProxyLogMessageMeta { return parseProxyLogMetadata(rawMessage); diff --git a/src/server/services/proxyInputFileResolver.test.ts b/src/server/services/proxyInputFileResolver.test.ts index 10b4c3b..9b68bc9 100644 --- a/src/server/services/proxyInputFileResolver.test.ts +++ b/src/server/services/proxyInputFileResolver.test.ts @@ -2,10 +2,13 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'; const getProxyFileByPublicIdForOwnerMock = vi.fn(); -vi.mock('./proxyFileStore.js', () => ({ - getProxyFileByPublicIdForOwner: (...args: unknown[]) => getProxyFileByPublicIdForOwnerMock(...args), - LOCAL_PROXY_FILE_ID_PREFIX: 'file-metapi-', -})); +vi.mock('./proxyFileStore.js', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getProxyFileByPublicIdForOwner: (...args: unknown[]) => getProxyFileByPublicIdForOwnerMock(...args), + }; +}); describe('proxyInputFileResolver', () => { beforeEach(() => { diff --git a/src/shared/proxyLogMeta.test.ts b/src/shared/proxyLogMeta.test.ts index 1e77042..4bec696 100644 --- a/src/shared/proxyLogMeta.test.ts +++ b/src/shared/proxyLogMeta.test.ts @@ -24,4 +24,38 @@ describe('proxyLogMeta', () => { messageText: 'network timeout', }); }); + + it('handles mixed-case, partial, reordered, and empty metadata safely', () => { + expect(parseProxyLogMetadata('[CLIENT:codex] [SESSION:turn-1] boom')).toEqual({ + clientKind: 'codex', + sessionId: 'turn-1', + downstreamPath: null, + upstreamPath: null, + messageText: 'boom', + }); + + expect(parseProxyLogMetadata('[client:codex] boom')).toEqual({ + clientKind: 'codex', + sessionId: null, + downstreamPath: null, + upstreamPath: null, + messageText: 'boom', + }); + + expect(parseProxyLogMetadata('[upstream:/x] [client:codex] [session:1] msg')).toEqual({ + clientKind: 'codex', + sessionId: '1', + downstreamPath: null, + upstreamPath: '/x', + messageText: 'msg', + }); + + expect(parseProxyLogMetadata('')).toEqual({ + clientKind: null, + sessionId: null, + downstreamPath: null, + upstreamPath: null, + messageText: '', + }); + }); }); diff --git a/src/web/pages/Settings.tsx b/src/web/pages/Settings.tsx index 09fcbb2..e110590 100644 --- a/src/web/pages/Settings.tsx +++ b/src/web/pages/Settings.tsx @@ -290,7 +290,7 @@ export default function Settings() { const query = selectorGroupSearch.trim(); if (!query) return groupRouteOptions; return groupRouteOptions.filter((route) => { - const matchText = `${resolveRouteTitle(route)} ${route.modelPattern} ${route.displayName || ''}`; + const matchText = `${resolveRouteTitle(route)} ${route.modelPattern}`; return fuzzyMatch(matchText, query); }); }, [groupRouteOptions, selectorGroupSearch]); @@ -1970,6 +1970,8 @@ export default function Settings() { ) : routeIcon.kind === 'auto' ? ( + ) : routeIcon.kind === 'none' ? ( + null ) : null}