avoid deep proxying message info

This commit is contained in:
Shantur Rathore
2025-11-26 10:29:14 +00:00
parent f13feb3062
commit b54db28fb1
2 changed files with 17 additions and 7 deletions

View File

@@ -22,7 +22,7 @@ function createInitialState(instanceId: string): InstanceMessageState {
sessions: {},
sessionOrder: [],
messages: {},
messageInfo: {},
messageInfoVersion: {},
pendingParts: {},
permissions: {
queue: [],
@@ -164,6 +164,7 @@ export interface InstanceMessageStore {
export function createInstanceMessageStore(instanceId: string): InstanceMessageStore {
const [state, setState] = createStore<InstanceMessageState>(createInitialState(instanceId))
const messageInfoCache = new Map<string, MessageInfo>()
function withUsageState(sessionId: string, updater: (draft: SessionUsageState) => void) {
setState("usage", sessionId, (current) => {
@@ -370,10 +371,13 @@ export function createInstanceMessageStore(instanceId: string): InstanceMessageS
})
})
const infoEntry = state.messageInfo[options.oldId]
const infoEntry = messageInfoCache.get(options.oldId)
if (infoEntry) {
setState("messageInfo", options.newId, infoEntry)
setState("messageInfo", (prev) => {
messageInfoCache.set(options.newId, infoEntry)
messageInfoCache.delete(options.oldId)
const version = state.messageInfoVersion[options.oldId] ?? 0
setState("messageInfoVersion", options.newId, version)
setState("messageInfoVersion", (prev) => {
const next = { ...prev }
delete next[options.oldId]
return next
@@ -405,12 +409,15 @@ export function createInstanceMessageStore(instanceId: string): InstanceMessageS
function setMessageInfo(messageId: string, info: MessageInfo) {
if (!messageId) return
setState("messageInfo", messageId, info)
messageInfoCache.set(messageId, info)
const nextVersion = (state.messageInfoVersion[messageId] ?? 0) + 1
setState("messageInfoVersion", messageId, nextVersion)
updateUsageWithInfo(info)
}
function getMessageInfo(messageId: string) {
return state.messageInfo[messageId]
void state.messageInfoVersion[messageId]
return messageInfoCache.get(messageId)
}
function upsertPermission(entry: PermissionEntry) {
@@ -492,6 +499,7 @@ export function createInstanceMessageStore(instanceId: string): InstanceMessageS
}
function clearInstance() {
messageInfoCache.clear()
setState(reconcile(createInitialState(instanceId)))
}

View File

@@ -93,8 +93,10 @@ export interface InstanceMessageState {
sessions: Record<string, SessionRecord>
sessionOrder: string[]
messages: Record<string, MessageRecord>
messageInfo: Record<string, MessageInfo>
messageInfoVersion: Record<string, number>
pendingParts: Record<string, PendingPartEntry[]>
permissions: InstancePermissionState
usage: Record<string, SessionUsageState>
scrollState: Record<string, ScrollSnapshot>