@@ -53,9 +53,9 @@ function normalizePayloadKind(payload: Record<string, unknown>) {
5353}
5454
5555function inferPayloadIfMissing ( raw : Record < string , unknown > ) {
56- const message = typeof raw . message === "string" ? raw . message . trim ( ) : "" ;
57- const text = typeof raw . text === "string" ? raw . text . trim ( ) : "" ;
58- const command = typeof raw . command === "string" ? raw . command . trim ( ) : "" ;
56+ const message = normalizeOptionalString ( raw . message ) ?? "" ;
57+ const text = normalizeOptionalString ( raw . text ) ?? "" ;
58+ const command = normalizeOptionalString ( raw . command ) ?? "" ;
5959 if ( message ) {
6060 raw . payload = { kind : "agentTurn" , message } ;
6161 return true ;
@@ -78,13 +78,13 @@ function copyTopLevelAgentTurnFields(
7878 let mutated = false ;
7979
8080 const copyTrimmedString = ( field : "model" | "thinking" ) => {
81- const existing = payload [ field ] ;
82- if ( typeof existing === "string" && existing . trim ( ) ) {
81+ const existing = normalizeOptionalString ( payload [ field ] ) ;
82+ if ( existing ) {
8383 return ;
8484 }
85- const value = raw [ field ] ;
86- if ( typeof value === "string" && value . trim ( ) ) {
87- payload [ field ] = value . trim ( ) ;
85+ const value = normalizeOptionalString ( raw [ field ] ) ;
86+ if ( value ) {
87+ payload [ field ] = value ;
8888 mutated = true ;
8989 }
9090 } ;
@@ -112,24 +112,22 @@ function copyTopLevelAgentTurnFields(
112112 payload . deliver = raw . deliver ;
113113 mutated = true ;
114114 }
115- if (
116- typeof payload . channel !== "string" &&
117- typeof raw . channel === "string" &&
118- raw . channel . trim ( )
119- ) {
120- payload . channel = raw . channel . trim ( ) ;
115+ const channel = normalizeOptionalString ( raw . channel ) ;
116+ if ( typeof payload . channel !== "string" && channel ) {
117+ payload . channel = channel ;
121118 mutated = true ;
122119 }
123- if ( typeof payload . to !== "string" && typeof raw . to === "string" && raw . to . trim ( ) ) {
124- payload . to = raw . to . trim ( ) ;
120+ const to = normalizeOptionalString ( raw . to ) ;
121+ if ( typeof payload . to !== "string" && to ) {
122+ payload . to = to ;
125123 mutated = true ;
126124 }
125+ const rawThreadId = normalizeOptionalString ( raw . threadId ) ;
127126 if (
128127 ! ( "threadId" in payload ) &&
129- ( ( typeof raw . threadId === "number" && Number . isFinite ( raw . threadId ) ) ||
130- ( typeof raw . threadId === "string" && raw . threadId . trim ( ) ) )
128+ ( ( typeof raw . threadId === "number" && Number . isFinite ( raw . threadId ) ) || Boolean ( rawThreadId ) )
131129 ) {
132- payload . threadId = typeof raw . threadId === "string" ? raw . threadId . trim ( ) : raw . threadId ;
130+ payload . threadId = rawThreadId ?? raw . threadId ;
133131 mutated = true ;
134132 }
135133 if (
@@ -139,12 +137,9 @@ function copyTopLevelAgentTurnFields(
139137 payload . bestEffortDeliver = raw . bestEffortDeliver ;
140138 mutated = true ;
141139 }
142- if (
143- typeof payload . provider !== "string" &&
144- typeof raw . provider === "string" &&
145- raw . provider . trim ( )
146- ) {
147- payload . provider = raw . provider . trim ( ) ;
140+ const provider = normalizeOptionalString ( raw . provider ) ;
141+ if ( typeof payload . provider !== "string" && provider ) {
142+ payload . provider = provider ;
148143 mutated = true ;
149144 }
150145
@@ -300,11 +295,11 @@ export function normalizeStoredCronJobs(
300295 trackIssue ( "legacyPayloadKind" ) ;
301296 }
302297 if ( ! payloadRecord . kind ) {
303- if ( typeof payloadRecord . message === "string" && payloadRecord . message . trim ( ) ) {
298+ if ( normalizeOptionalString ( payloadRecord . message ) ) {
304299 payloadRecord . kind = "agentTurn" ;
305300 mutated = true ;
306301 trackIssue ( "legacyPayloadKind" ) ;
307- } else if ( typeof payloadRecord . text === "string" && payloadRecord . text . trim ( ) ) {
302+ } else if ( normalizeOptionalString ( payloadRecord . text ) ) {
308303 payloadRecord . kind = "systemEvent" ;
309304 mutated = true ;
310305 trackIssue ( "legacyPayloadKind" ) ;
@@ -343,8 +338,7 @@ export function normalizeStoredCronJobs(
343338 }
344339
345340 if ( payloadRecord ) {
346- const hadLegacyPayloadProvider =
347- typeof payloadRecord . provider === "string" && payloadRecord . provider . trim ( ) . length > 0 ;
341+ const hadLegacyPayloadProvider = Boolean ( normalizeOptionalString ( payloadRecord . provider ) ) ;
348342 if ( migrateLegacyCronPayload ( payloadRecord ) ) {
349343 mutated = true ;
350344 if ( hadLegacyPayloadProvider ) {
@@ -361,7 +355,7 @@ export function normalizeStoredCronJobs(
361355 sched . kind = "at" ;
362356 mutated = true ;
363357 }
364- const atRaw = typeof sched . at === "string" ? sched . at . trim ( ) : "" ;
358+ const atRaw = normalizeOptionalString ( sched . at ) ?? "" ;
365359 const atMsRaw = sched . atMs ;
366360 const parsedAtMs =
367361 typeof atMsRaw === "number"
@@ -403,8 +397,8 @@ export function normalizeStoredCronJobs(
403397 }
404398 }
405399
406- const exprRaw = typeof sched . expr === "string" ? sched . expr . trim ( ) : "" ;
407- const legacyCronRaw = typeof sched . cron === "string" ? sched . cron . trim ( ) : "" ;
400+ const exprRaw = normalizeOptionalString ( sched . expr ) ?? "" ;
401+ const legacyCronRaw = normalizeOptionalString ( sched . cron ) ?? "" ;
408402 let normalizedExpr = exprRaw ;
409403 if ( ! normalizedExpr && legacyCronRaw ) {
410404 normalizedExpr = legacyCronRaw ;
@@ -461,7 +455,7 @@ export function normalizeStoredCronJobs(
461455
462456 const payloadKind =
463457 payloadRecord && typeof payloadRecord . kind === "string" ? payloadRecord . kind : "" ;
464- const rawSessionTarget = typeof raw . sessionTarget === "string" ? raw . sessionTarget . trim ( ) : "" ;
458+ const rawSessionTarget = normalizeOptionalString ( raw . sessionTarget ) ?? "" ;
465459 const loweredSessionTarget = normalizeLowercaseStringOrEmpty ( rawSessionTarget ) ;
466460 if ( loweredSessionTarget === "main" || loweredSessionTarget === "isolated" ) {
467461 if ( raw . sessionTarget !== loweredSessionTarget ) {
0 commit comments