MCPcopy Create free account
hub / github.com/anomalyco/opencode / loadMessages

Function loadMessages

packages/app/src/context/server-session.ts:562–610  ·  view source on GitHub ↗
(sessionID: string, limit: number, before?: string, mode?: "replace" | "prepend")

Source from the content-addressed store, hash-verified

560 }
561
562 const loadMessages = async (sessionID: string, limit: number, before?: string, mode?: "replace" | "prepend") => {
563 if (meta.loading[sessionID]) return
564 const active = generation(sessionID)
565 const load: MessageLoadState = {
566 touchedMessages: new Set(),
567 removedMessages: new Set(),
568 retainedMessages: new Set(),
569 touchedParts: new Map(),
570 deltaParts: new Map(),
571 carriedDeltaParts: new Map(),
572 removedParts: new Map(),
573 optimisticParts: new Map(),
574 orphanParents: new Set(),
575 clearedMessageParts: new Set(),
576 }
577 messageLoads.set(sessionID, load)
578 setMeta("loading", sessionID, true)
579 let applied = false
580 await fetchMessages(sessionID, limit, before, () => resetMessageLoad(sessionID, load))
581 .then((page) => {
582 if (generations.get(sessionID) !== active) return
583 const first = page.session.reduce<Message | undefined>(
584 (oldest, message) => (!oldest || cmpMessage(message, oldest) < 0 ? message : oldest),
585 undefined,
586 )
587 const preserveUnfetched =
588 mode === "prepend" || (!page.complete && (!first || ((message: Message) => cmpMessage(message, first) < 0)))
589 applyMessagePage(
590 sessionID,
591 page,
592 messageLoads.get(sessionID) === load ? load : undefined,
593 preserveUnfetched,
594 mode !== "prepend",
595 )
596 applied = true
597 })
598 .finally(() => {
599 if (!applied && generations.get(sessionID) === active && messageLoads.get(sessionID) === load) {
600 for (const messageID of load.orphanParents) {
601 if (!orphanParts.get(sessionID)?.has(messageID)) continue
602 setData(produce((draft) => deleteMessageParts(draft, messageID)))
603 orphanParts.get(sessionID)?.delete(messageID)
604 }
605 if (orphanParts.get(sessionID)?.size === 0) orphanParts.delete(sessionID)
606 }
607 if (messageLoads.get(sessionID) === load) messageLoads.delete(sessionID)
608 if (generations.get(sessionID) === active) setMeta("loading", sessionID, false)
609 })
610 }
611
612 const sync = (sessionID: string, options?: { force?: boolean; messageLimit?: number }) => {
613 touch(sessionID)

Callers 3

syncFunction · 0.85
prefetchFunction · 0.85
loadMoreFunction · 0.85

Calls 9

fetchMessagesFunction · 0.85
resetMessageLoadFunction · 0.85
cmpMessageFunction · 0.85
applyMessagePageFunction · 0.85
deleteMessagePartsFunction · 0.85
generationFunction · 0.70
getMethod · 0.65
setMethod · 0.45
deleteMethod · 0.45

Tested by

no test coverage detected