mirror of
https://github.com/Narcooo/inkos
synced 2026-04-21 14:37:16 +00:00
fix(studio): 草稿会话(draft session)不在侧边栏展示,直到发出第一条消息
之前点"+ 新建会话"会立刻在侧边栏多出一条空条目,体验突兀且和"新建书籍" 草稿态(侧边栏不显示草稿节点)行为不一致。 - createDraftSession 不再把 sessionId 追加进 sessionIdsByBook,只放到 sessions map + activeSessionId(让 ChatPage 显示空对话区) - sendMessage 的 draft 分支在 POST /sessions 落盘成功那一刻才把 sessionId 写进 sessionIdsByBook,侧边栏那时才出现此会话(并带上 title) 副作用:用户点新建会话但没聊就切走/关窗,draft 彻底消失(内存都释放), 不会在磁盘和侧边栏留下空白痕迹——与"新建书籍"草稿一致。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1b5e5dcf4e
commit
fdb36bdbd4
1 changed files with 13 additions and 9 deletions
|
|
@ -156,8 +156,10 @@ export const createMessageSlice: StateCreator<ChatStore, [], [], MessageActions>
|
|||
},
|
||||
|
||||
createDraftSession: (bookId) => {
|
||||
// 前端生成 sessionId(与后端 createBookSession 同格式),暂不持久化到磁盘。
|
||||
// 发送第一条消息时,sendMessage 会调 POST /sessions { sessionId, bookId } 落盘。
|
||||
// 前端生成 sessionId(与后端 createBookSession 同格式),暂不持久化到磁盘,
|
||||
// 也暂不写入 sessionIdsByBook——侧边栏看不到这条 draft。
|
||||
// 发送第一条消息时 sendMessage 会调 POST /sessions { sessionId, bookId } 落盘
|
||||
// 并把 id 追加进 sessionIdsByBook,那一刻侧边栏才出现该会话(带着 title)。
|
||||
const sessionId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
||||
set((state) => {
|
||||
const runtime = createSessionRuntime({
|
||||
|
|
@ -171,13 +173,6 @@ export const createMessageSlice: StateCreator<ChatStore, [], [], MessageActions>
|
|||
...state.sessions,
|
||||
[sessionId]: runtime,
|
||||
},
|
||||
sessionIdsByBook: {
|
||||
...state.sessionIdsByBook,
|
||||
[bookKey(bookId)]: mergeSessionIds(
|
||||
state.sessionIdsByBook[bookKey(bookId)],
|
||||
[sessionId],
|
||||
),
|
||||
},
|
||||
activeSessionId: sessionId,
|
||||
};
|
||||
});
|
||||
|
|
@ -306,8 +301,17 @@ export const createMessageSlice: StateCreator<ChatStore, [], [], MessageActions>
|
|||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ sessionId, bookId: session.bookId }),
|
||||
});
|
||||
// 落盘成功:把 isDraft 翻成 false,同时把 sessionId 追加进 sessionIdsByBook
|
||||
// 让侧边栏现在才看到这条会话。
|
||||
set((state) => ({
|
||||
sessions: updateSession(state.sessions, sessionId, () => ({ isDraft: false })),
|
||||
sessionIdsByBook: {
|
||||
...state.sessionIdsByBook,
|
||||
[bookKey(session.bookId)]: mergeSessionIds(
|
||||
state.sessionIdsByBook[bookKey(session.bookId)],
|
||||
[sessionId],
|
||||
),
|
||||
},
|
||||
}));
|
||||
} catch (err) {
|
||||
get().addErrorMessage(sessionId, err instanceof Error ? err.message : String(err));
|
||||
|
|
|
|||
Loading…
Reference in a new issue