diff --git a/apps/server/src/services/auto_name.ts b/apps/server/src/services/auto_name.ts index c1e43dd..341c60b 100644 --- a/apps/server/src/services/auto_name.ts +++ b/apps/server/src/services/auto_name.ts @@ -144,4 +144,23 @@ export async function maybeAutoNameChat( updated_at: updated[0]!.updated_at, }); ctx.log.info({ chatId, name }, 'chat auto-named'); + + // Propagate to the parent session if it's still on its default name. + // The WHERE guard makes the check atomic — if the user has already + // renamed (or a prior chat already propagated), this UPDATE matches + // zero rows and we do nothing. First chat wins; manual renames win. + const renamedSession = await ctx.sql<{ id: string; name: string }[]>` + UPDATE sessions + SET name = ${name} + WHERE id = ${sessionId} AND name = 'New session' + RETURNING id, name + `; + if (renamedSession.length > 0) { + ctx.publishUser({ + type: 'session_renamed', + session_id: sessionId, + name, + }); + ctx.log.info({ sessionId, name }, 'session auto-named from chat'); + } }