feat(auto_name): propagate first chat name to parent session
When a chat is auto-named, also rename the parent session if it is still on its default 'New session' label. UPDATE is gated by an atomic WHERE clause so user renames and prior propagations are not clobbered. Publishes session_renamed via broker.publishUser; useSidebar already listens. Closes the gap where sessions auto-created from the sidebar would stay 'New session' forever. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user