1+ import { validateSessionId } from "./paths.js" ;
12import type { SessionEntry } from "./types.js" ;
23
34function isRecord ( value : unknown ) : value is Record < string , unknown > {
@@ -18,6 +19,14 @@ function isSafeSessionId(value: unknown): value is string {
1819 return / ^ [ A - Z a - z 0 - 9 ] [ A - Z a - z 0 - 9 . _ : @ - ] * $ / . test ( trimmed ) ;
1920}
2021
22+ function normalizeTranscriptSessionId ( value : string ) : string | undefined {
23+ try {
24+ return validateSessionId ( value ) ;
25+ } catch {
26+ return undefined ;
27+ }
28+ }
29+
2130function normalizeOptionalTimestamp ( value : unknown ) : number | undefined {
2231 if ( value === undefined ) {
2332 return undefined ;
@@ -31,12 +40,17 @@ export function normalizePersistedSessionEntryShape(value: unknown): SessionEntr
3140 }
3241
3342 let next = value as unknown as SessionEntry ;
43+ const sessionFile = typeof value . sessionFile === "string" ? value . sessionFile . trim ( ) : undefined ;
3444 if ( value . sessionId !== undefined ) {
3545 if ( ! isSafeSessionId ( value . sessionId ) ) {
3646 return undefined ;
3747 }
3848 const sessionId = value . sessionId . trim ( ) ;
39- if ( sessionId !== value . sessionId ) {
49+ const transcriptSessionId = normalizeTranscriptSessionId ( sessionId ) ;
50+ if ( ! transcriptSessionId && ! sessionFile ) {
51+ const { sessionId : _dropSessionId , ...rest } = next ;
52+ next = rest as SessionEntry ;
53+ } else if ( sessionId !== value . sessionId ) {
4054 next = { ...next , sessionId } ;
4155 }
4256 }
0 commit comments