Names that fit the chat, and a way to change one
Two things about titles were wrong. Every chat spent a second completion on its name, including an agent chat whose opening words are already a title -- somebody starting one states an objective, not a topic. An agent chat now takes `fallback_title` from its first prompt and makes no request at all; an ordinary chat, which opens with a question whose *answer* is what makes a title worth asking for, is unchanged. And renaming existed only as the `/title` slash command, which set the heading and left the sidebar row showing the old name until the next reload -- a rename that looks half-applied is one people do twice. There are pencil buttons on the heading and on every sidebar row now, both PATCHing the route that was already there, and `update_chat` answers a rename with the out-of-band pair the `done` frame has always sent, so one response moves both. Only on a rename: sending it for every PATCH would overwrite the heading from an unrelated save. `/title` sets both spans itself, being a bare fetch rather than htmx. The dialog is the `data-prompt` mechanism the folder work added, which is why the heading keeps a button rather than becoming an inline field: it sits in a flex row beside the badges and the connection chip, and swapping it for a text box moves all of them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -115,9 +115,16 @@
|
||||
body.append("title", wanted);
|
||||
fetch("/api/chats/" + chat(), { method: "PATCH", body: body, credentials: "same-origin" })
|
||||
.then(function () {
|
||||
var heading = el("#chat-title");
|
||||
// textContent, never innerHTML: this is text somebody typed.
|
||||
if (heading) heading.textContent = wanted;
|
||||
/* Both places the title appears. The heading alone left the sidebar
|
||||
row showing the old name until the next reload, which reads as a
|
||||
rename that half worked -- and is the reason the route now hands
|
||||
back the out-of-band pair for every other caller. This one is a
|
||||
bare fetch rather than htmx, so it sets them itself.
|
||||
|
||||
textContent, never innerHTML: this is text somebody typed. */
|
||||
[el("#chat-title"), el("#chat-link-label-" + chat())].forEach(function (node) {
|
||||
if (node) node.textContent = wanted;
|
||||
});
|
||||
note("Renamed.");
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user