Revert "a new chat gets its name without a refresh, and can be renamed"
This reverts commit f9a3699603.
This commit is contained in:
@@ -200,26 +200,6 @@ export function useChat(initialSessionId?: string, initialModel?: string | null,
|
|||||||
const [claudeSessionId, setClaudeSessionId] = useState<string | null>(resumeSessionId ?? null);
|
const [claudeSessionId, setClaudeSessionId] = useState<string | null>(resumeSessionId ?? null);
|
||||||
|
|
||||||
const client = useClient();
|
const client = useClient();
|
||||||
const queryClient = useQueryClient();
|
|
||||||
|
|
||||||
/*
|
|
||||||
Tell the session LISTS that this conversation exists.
|
|
||||||
|
|
||||||
The chat header resolves its own title by finding this session in the cached list —
|
|
||||||
`sessions.find((s) => s.id === sessionId)`. A newborn conversation is not in that list: it has
|
|
||||||
`staleTime: 30s` and nothing invalidated it, so for up to half a minute the header read "New chat" and
|
|
||||||
the rename control was absent, because rename is a per-row action on a list the session was not in yet.
|
|
||||||
Navigating away and back fixed it, which is what made it look like a rendering bug rather than a stale
|
|
||||||
cache.
|
|
||||||
|
|
||||||
Fired when the transcript id arrives — the START of the turn, not the end — because that is the moment
|
|
||||||
the session becomes real on disk and the server can already name it from the first user message. Fired
|
|
||||||
again when the turn finishes, because the harness's own `ai-title` may have improved on it by then.
|
|
||||||
*/
|
|
||||||
const announceSession = useCallback(() => {
|
|
||||||
void queryClient.invalidateQueries({ queryKey: ['CLAUDE_SESSIONS'] });
|
|
||||||
void queryClient.invalidateQueries({ queryKey: ['CHAT_PWDS'] });
|
|
||||||
}, [queryClient]);
|
|
||||||
|
|
||||||
// Fetch the next older window and prepend it. The scroll container restores its position from the
|
// Fetch the next older window and prepend it. The scroll container restores its position from the
|
||||||
// height delta so the view stays put. Guarded against overlap and against running once fully paged in.
|
// height delta so the view stays put. Guarded against overlap and against running once fully paged in.
|
||||||
@@ -363,8 +343,6 @@ export function useChat(initialSessionId?: string, initialModel?: string | null,
|
|||||||
claudeSessionIdRef.current = msg.claudeSessionId;
|
claudeSessionIdRef.current = msg.claudeSessionId;
|
||||||
setClaudeSessionId(msg.claudeSessionId);
|
setClaudeSessionId(msg.claudeSessionId);
|
||||||
if (replaceUrl) writePermalink(msg.claudeSessionId);
|
if (replaceUrl) writePermalink(msg.claudeSessionId);
|
||||||
// The lists do not know this conversation exists yet — see `announceSession`.
|
|
||||||
announceSession();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'assistant:delta':
|
case 'assistant:delta':
|
||||||
@@ -430,10 +408,6 @@ export function useChat(initialSessionId?: string, initialModel?: string | null,
|
|||||||
setClaudeSessionId(msg.claudeSessionId);
|
setClaudeSessionId(msg.claudeSessionId);
|
||||||
if (replaceUrl) writePermalink(msg.claudeSessionId);
|
if (replaceUrl) writePermalink(msg.claudeSessionId);
|
||||||
}
|
}
|
||||||
// Again at the end of every turn, and OUTSIDE the id check above: the harness writes its own
|
|
||||||
// `ai-title` while the turn runs, so the name the list is showing may now be bettered by the one on
|
|
||||||
// disk — and that is true whether or not this particular `result` happened to carry the id.
|
|
||||||
announceSession();
|
|
||||||
commitStreaming();
|
commitStreaming();
|
||||||
setMessages((prev) => [
|
setMessages((prev) => [
|
||||||
...prev,
|
...prev,
|
||||||
|
|||||||
Reference in New Issue
Block a user