MCPcopy Create free account
hub / github.com/Noumena-Network/code / deriveNextReplMessageSignalState

Function deriveNextReplMessageSignalState

src/screens/replMessageSignals.ts:49–124  ·  view source on GitHub ↗
(
  previous: ReplMessageSignalState | null,
  messages: Message[],
  isLoading: boolean,
)

Source from the content-addressed store, hash-verified

47}
48
49export function deriveNextReplMessageSignalState(
50 previous: ReplMessageSignalState | null,
51 messages: Message[],
52 isLoading: boolean,
53): ReplMessageSignalState {
54 if (!previous) {
55 return deriveReplMessageSignalState(messages, isLoading)
56 }
57
58 if (messages.length === previous.messageCount) {
59 const lastMessageRef = messages.at(-1)
60 if (lastMessageRef === previous.lastMessageRef) {
61 return withSignals(previous, isLoading)
62 }
63
64 // Fast path: only the last message changed. If both old and new last
65 // messages are non-assistant, all previous signal values remain valid
66 // (most common: ephemeral progress updates replacing a progress message).
67 // If the new last message is an assistant, recompute signals from it.
68 // Otherwise fall back to full rebuild.
69 const oldLastWasAssistant = previous.lastMessageRef?.type === 'assistant'
70 const newLastIsAssistant = lastMessageRef?.type === 'assistant'
71 if (!oldLastWasAssistant && !newLastIsAssistant) {
72 return finalizeReplMessageSignalState(
73 messages,
74 previous.promptSignals,
75 previous.lastAssistantToolUses,
76 previous.stopHookState,
77 isLoading,
78 )
79 }
80 if (newLastIsAssistant && lastMessageRef) {
81 const promptSignals = applyAppendedPromptSignals(
82 previous.promptSignals,
83 [lastMessageRef],
84 )
85 const lastAssistantToolUses = applyAppendedLastAssistantToolUses(
86 previous.lastAssistantToolUses,
87 [lastMessageRef],
88 )
89 return finalizeReplMessageSignalState(
90 messages,
91 promptSignals,
92 lastAssistantToolUses,
93 previous.stopHookState,
94 isLoading,
95 )
96 }
97 }
98
99 if (canAppendIncrementally(previous, messages)) {
100 const appended = messages.slice(previous.messageCount)
101 const promptSignals = applyAppendedPromptSignals(
102 previous.promptSignals,
103 appended,
104 )
105 const lastAssistantToolUses = applyAppendedLastAssistantToolUses(
106 previous.lastAssistantToolUses,

Callers 2

REPLFunction · 0.85
deriveFunction · 0.85

Tested by 1

deriveFunction · 0.68