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

Function apply

packages/app/src/context/server-session.ts:659–966  ·  view source on GitHub ↗
(event: { type: string; properties?: unknown })

Source from the content-addressed store, hash-verified

657 }
658
659 const apply = (event: { type: string; properties?: unknown }) => {
660 const eventID = eventSessionID(event)
661 if (eventID) {
662 touch(eventID)
663 if (
664 !data.info[eventID] &&
665 event.type !== "session.created" &&
666 event.type !== "session.updated" &&
667 event.type !== "session.deleted"
668 )
669 void resolve(eventID).catch(() => {})
670 }
671 switch (event.type) {
672 case "session.created":
673 remember((event.properties as { info: Session }).info)
674 return
675 case "session.updated": {
676 const info = (event.properties as { info: Session }).info
677 remember(info)
678 if (info.time.archived) evict([info.id])
679 return
680 }
681 case "session.deleted": {
682 const sessionID = (event.properties as { info: Session }).info.id
683 infoSeen.delete(sessionID)
684 setData(
685 "info",
686 produce((draft) => void delete draft[sessionID]),
687 )
688 evict([sessionID])
689 return
690 }
691 case "session.diff": {
692 const props = event.properties as { sessionID: string; diff: SnapshotFileDiff[] }
693 setData("session_diff", props.sessionID, reconcile(cleanDiffs(props.diff), { key: "file" }))
694 return
695 }
696 case "todo.updated": {
697 const props = event.properties as { sessionID: string; todos: Todo[] }
698 setData("todo", props.sessionID, reconcile(props.todos, { key: "id" }))
699 return
700 }
701 case "session.status": {
702 const props = event.properties as { sessionID: string; status: SessionStatus }
703 setData("session_status", props.sessionID, reconcile(props.status))
704 return
705 }
706 case "message.updated": {
707 const info = cleanMessage((event.properties as { info: Message }).info)
708 const load = messageLoads.get(info.sessionID)
709 load?.touchedMessages.add(info.id)
710 load?.removedMessages.delete(info.id)
711 const items = optimistic.get(info.sessionID)
712 const item = items?.get(info.id)
713 if (items && item) {
714 if (item.parts.length === 0) clearOptimistic(info.sessionID, info.id)
715 if (item.parts.length > 0) items.set(info.id, { ...item, confirmedMessage: true })
716 }

Callers

nothing calls this directly

Calls 15

eventSessionIDFunction · 0.85
clearOptimisticFunction · 0.85
deleteMessagePartsFunction · 0.85
trackPartChangeFunction · 0.85
confirmOptimisticPartFunction · 0.85
clearOptimisticPartFunction · 0.85
touchFunction · 0.70
resolveFunction · 0.70
rememberFunction · 0.70
evictFunction · 0.70
getMethod · 0.65
addMethod · 0.65

Tested by

no test coverage detected