Studio: stop ActiveThreadSync clearing persisted draft on reload
ActiveThreadSync was reacting to aui's mainThreadId === null on mount (aui hasn't booted yet) by calling setActiveThreadId(null), which wiped the just-restored persisted draft id from localStorage and emptied the doc panel for the user's thread. The previous fix only covered the 'aui minted a different LOCALID' branch; it missed the 'mainThreadId is null while aui boots' branch. Treat a null mainThreadId as a no-op for the sync. Explicit clears (new chat, sidebar delete) keep going through setActiveThreadId(null) directly, so this guard doesn't trap stale state — it just gives the persisted draft id a chance to survive until aui finishes booting.
This commit is contained in:
parent
41e43b6c7b
commit
3d3a00c2be
1 changed files with 11 additions and 3 deletions
|
|
@ -1017,6 +1017,15 @@ function ActiveThreadSync({
|
||||||
if (!enabled) {
|
if (!enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// Don't clobber a persisted activeThreadId while aui is still booting
|
||||||
|
// up. mainThreadId starts null on every page load before aui's async
|
||||||
|
// thread init finishes; without this guard we'd reset our persisted
|
||||||
|
// draft id to null and lose the doc chip mapping for that thread.
|
||||||
|
// Explicit clears (new chat / thread delete) go through
|
||||||
|
// setActiveThreadId(null) directly and bypass this effect.
|
||||||
|
if (!mainThreadId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const persisted = useChatRuntimeStore.getState().activeThreadId;
|
const persisted = useChatRuntimeStore.getState().activeThreadId;
|
||||||
// On page reload aui mints a fresh `__LOCALID_*` for its draft thread.
|
// On page reload aui mints a fresh `__LOCALID_*` for its draft thread.
|
||||||
// If we already have a persisted draft id, keep it so any RAG docs
|
// If we already have a persisted draft id, keep it so any RAG docs
|
||||||
|
|
@ -1024,15 +1033,14 @@ function ActiveThreadSync({
|
||||||
// chat history for the new mainThreadId starts empty either way, so
|
// chat history for the new mainThreadId starts empty either way, so
|
||||||
// this only affects what we treat as the active id for doc/RAG lookup.
|
// this only affects what we treat as the active id for doc/RAG lookup.
|
||||||
if (
|
if (
|
||||||
mainThreadId
|
persisted
|
||||||
&& persisted
|
|
||||||
&& persisted !== mainThreadId
|
&& persisted !== mainThreadId
|
||||||
&& persisted.startsWith("__LOCALID_")
|
&& persisted.startsWith("__LOCALID_")
|
||||||
&& mainThreadId.startsWith("__LOCALID_")
|
&& mainThreadId.startsWith("__LOCALID_")
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setActiveThreadId(mainThreadId ?? null);
|
setActiveThreadId(mainThreadId);
|
||||||
}, [enabled, mainThreadId, setActiveThreadId]);
|
}, [enabled, mainThreadId, setActiveThreadId]);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue