Compare commits
1 Commits
v1.6.5-ses
...
v1.6.4-aut
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ee266a4d9 |
@@ -120,15 +120,6 @@ export function registerSessionRoutes(
|
|||||||
return { error: 'invalid body', details: parsed.error.flatten() };
|
return { error: 'invalid body', details: parsed.error.flatten() };
|
||||||
}
|
}
|
||||||
const { name, model, system_prompt } = parsed.data;
|
const { name, model, system_prompt } = parsed.data;
|
||||||
// Read the prior name so the post-update publish can skip no-op renames
|
|
||||||
// (PATCH { name: "Foo" } where the session is already "Foo"). The window
|
|
||||||
// between SELECT and UPDATE is sub-millisecond in the same request handler;
|
|
||||||
// a concurrent rename in that gap would just mean one stale publish, which
|
|
||||||
// existing clients dedup by id.
|
|
||||||
const before = await sql<{ name: string }[]>`
|
|
||||||
SELECT name FROM sessions WHERE id = ${req.params.id}
|
|
||||||
`;
|
|
||||||
const priorName = before[0]?.name;
|
|
||||||
const rows = await sql<Session[]>`
|
const rows = await sql<Session[]>`
|
||||||
UPDATE sessions
|
UPDATE sessions
|
||||||
SET
|
SET
|
||||||
@@ -144,7 +135,7 @@ export function registerSessionRoutes(
|
|||||||
return { error: 'session not found' };
|
return { error: 'session not found' };
|
||||||
}
|
}
|
||||||
const session = rows[0]!;
|
const session = rows[0]!;
|
||||||
if (name !== undefined && session.name !== priorName) {
|
if (name !== undefined) {
|
||||||
broker.publishUser('default', {
|
broker.publishUser('default', {
|
||||||
type: 'session_renamed',
|
type: 'session_renamed',
|
||||||
session_id: session.id,
|
session_id: session.id,
|
||||||
|
|||||||
@@ -144,4 +144,23 @@ export async function maybeAutoNameChat(
|
|||||||
updated_at: updated[0]!.updated_at,
|
updated_at: updated[0]!.updated_at,
|
||||||
});
|
});
|
||||||
ctx.log.info({ chatId, name }, 'chat auto-named');
|
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