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

Function update

packages/core/src/session/message-updater.ts:78–395  ·  view source on GitHub ↗
(adapter: Adapter, event: SessionEvent.Event)

Source from the content-addressed store, hash-verified

76}
77
78export function update(adapter: Adapter, event: SessionEvent.Event) {
79 type DraftAssistant = WritableDraft<SessionMessage.Assistant>
80 type DraftTool = WritableDraft<SessionMessage.AssistantTool>
81 type DraftText = WritableDraft<SessionMessage.AssistantText>
82 type DraftReasoning = WritableDraft<SessionMessage.AssistantReasoning>
83
84 const latestTool = (assistant: DraftAssistant | undefined, callID?: string) =>
85 assistant?.content.findLast(
86 (item): item is DraftTool => item.type === "tool" && (callID === undefined || item.id === callID),
87 )
88
89 const latestText = (assistant: DraftAssistant | undefined, textID: string) =>
90 assistant?.content.findLast((item): item is DraftText => item.type === "text" && item.id === textID)
91
92 const latestReasoning = (assistant: DraftAssistant | undefined, reasoningID: string) =>
93 assistant?.content.findLast((item): item is DraftReasoning => item.type === "reasoning" && item.id === reasoningID)
94
95 const updateOwnedAssistant = (messageID: SessionMessage.ID, recipe: (draft: DraftAssistant) => void) =>
96 Effect.gen(function* () {
97 const assistant = yield* adapter.getAssistant(messageID)
98 if (assistant) yield* adapter.updateAssistant(produce(assistant, recipe))
99 })
100
101 return Effect.gen(function* () {
102 yield* SessionEvent.All.match(event, {
103 "session.next.agent.switched": (event) => {
104 return adapter.appendMessage(
105 SessionMessage.AgentSwitched.make({
106 id: event.data.messageID,
107 type: "agent-switched",
108 metadata: event.metadata,
109 agent: event.data.agent,
110 time: { created: event.data.timestamp },
111 }),
112 )
113 },
114 "session.next.model.switched": (event) => {
115 return adapter.appendMessage(
116 SessionMessage.ModelSwitched.make({
117 id: event.data.messageID,
118 type: "model-switched",
119 metadata: event.metadata,
120 model: event.data.model,
121 time: { created: event.data.timestamp },
122 }),
123 )
124 },
125 "session.next.moved": () => Effect.void,
126 "session.next.prompted": (event) => {
127 return adapter.appendMessage(
128 SessionMessage.User.make({
129 id: event.data.messageID,
130 type: "user",
131 metadata: event.metadata,
132 text: event.data.prompt.text,
133 files: event.data.prompt.files,
134 agents: event.data.prompt.agents,
135 time: { created: event.data.timestamp },

Callers 3

integration.tsFile · 0.50
registerFunction · 0.50
command.tsFile · 0.50

Calls 7

updateOwnedAssistantFunction · 0.85
pushMethod · 0.80
latestTextFunction · 0.70
latestToolFunction · 0.70
latestReasoningFunction · 0.70
makeMethod · 0.45
fromMethod · 0.45

Tested by

no test coverage detected