Skip to content

Commit 2a84b43

Browse files
committed
refactor(cli): migrate message queue to use queue-store
Migrate use-message-queue hook to use the new queue-store instead of local useState. This is the first step in reducing prop drilling. Changes: - Update use-message-queue to read from and write to queue-store - Fix queue-store setCanProcessQueue to accept SetStateAction type - Maintain backward compatibility with existing API All tests pass (231/231) and typecheck is clean.
1 parent ccc2b75 commit 2a84b43

File tree

2 files changed

+40
-29
lines changed

2 files changed

+40
-29
lines changed

cli/src/hooks/use-message-queue.ts

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { useCallback, useEffect, useRef, useState } from 'react'
1+
import { useCallback, useEffect, useRef } from 'react'
2+
import { useQueueStore } from '../state/queue-store'
23

34
export type StreamStatus = 'idle' | 'waiting' | 'streaming'
45

@@ -7,17 +8,28 @@ export const useMessageQueue = (
78
isChainInProgressRef: React.MutableRefObject<boolean>,
89
activeAgentStreamsRef: React.MutableRefObject<number>,
910
) => {
10-
const [queuedMessages, setQueuedMessages] = useState<string[]>([])
11-
const [streamStatus, setStreamStatus] = useState<StreamStatus>('idle')
12-
const [canProcessQueue, setCanProcessQueue] = useState<boolean>(true)
13-
const [queuePaused, setQueuePaused] = useState<boolean>(false)
11+
const {
12+
queuedMessages,
13+
streamStatus,
14+
canProcessQueue,
15+
queuePaused,
16+
addToQueue: addToQueueStore,
17+
clearQueue: clearQueueStore,
18+
pauseQueue: pauseQueueStore,
19+
resumeQueue: resumeQueueStore,
20+
setStreamStatus,
21+
setCanProcessQueue,
22+
startStreaming: startStreamingStore,
23+
stopStreaming: stopStreamingStore,
24+
} = useQueueStore()
1425

1526
const queuedMessagesRef = useRef<string[]>([])
1627
const streamTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)
1728
const streamIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null)
1829
const streamMessageIdRef = useRef<string | null>(null)
1930
const isQueuePausedRef = useRef<boolean>(false)
2031

32+
// Sync refs with store state
2133
useEffect(() => {
2234
queuedMessagesRef.current = queuedMessages
2335
}, [queuedMessages])
@@ -60,7 +72,7 @@ export const useMessageQueue = (
6072
const nextMessage = queuedList[0]
6173
const remainingMessages = queuedList.slice(1)
6274
queuedMessagesRef.current = remainingMessages
63-
setQueuedMessages(remainingMessages)
75+
useQueueStore.setState({ queuedMessages: remainingMessages })
6476
sendMessage(nextMessage)
6577
}, 100)
6678

@@ -74,38 +86,36 @@ export const useMessageQueue = (
7486
activeAgentStreamsRef,
7587
])
7688

77-
const addToQueue = useCallback((message: string) => {
78-
const newQueue = [...queuedMessagesRef.current, message]
79-
queuedMessagesRef.current = newQueue
80-
setQueuedMessages(newQueue)
81-
}, [])
89+
const addToQueue = useCallback(
90+
(message: string) => {
91+
const newQueue = [...queuedMessagesRef.current, message]
92+
queuedMessagesRef.current = newQueue
93+
addToQueueStore(message)
94+
},
95+
[addToQueueStore],
96+
)
8297

8398
const pauseQueue = useCallback(() => {
84-
setQueuePaused(true)
85-
setCanProcessQueue(false)
86-
}, [])
99+
pauseQueueStore()
100+
}, [pauseQueueStore])
87101

88102
const resumeQueue = useCallback(() => {
89-
setQueuePaused(false)
90-
setCanProcessQueue(true)
91-
}, [])
103+
resumeQueueStore()
104+
}, [resumeQueueStore])
92105

93106
const clearQueue = useCallback(() => {
94107
const current = queuedMessagesRef.current
95108
queuedMessagesRef.current = []
96-
setQueuedMessages([])
97-
return current
98-
}, [])
109+
return clearQueueStore()
110+
}, [clearQueueStore])
99111

100112
const startStreaming = useCallback(() => {
101-
setStreamStatus('streaming')
102-
setCanProcessQueue(false)
103-
}, [])
113+
startStreamingStore()
114+
}, [startStreamingStore])
104115

105116
const stopStreaming = useCallback(() => {
106-
setStreamStatus('idle')
107-
setCanProcessQueue(!queuePaused)
108-
}, [queuePaused])
117+
stopStreamingStore()
118+
}, [stopStreamingStore])
109119

110120
return {
111121
queuedMessages,

cli/src/state/queue-store.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export type QueueStoreActions = {
1616
pauseQueue: () => void
1717
resumeQueue: () => void
1818
setStreamStatus: (status: StreamStatus) => void
19-
setCanProcessQueue: (can: boolean) => void
19+
setCanProcessQueue: (value: boolean | ((prev: boolean) => boolean)) => void
2020
startStreaming: () => void
2121
stopStreaming: () => void
2222
}
@@ -64,9 +64,10 @@ export const useQueueStore = create<QueueStore>()(
6464
state.streamStatus = status
6565
}),
6666

67-
setCanProcessQueue: (can) =>
67+
setCanProcessQueue: (value) =>
6868
set((state) => {
69-
state.canProcessQueue = can
69+
state.canProcessQueue =
70+
typeof value === 'function' ? value(state.canProcessQueue) : value
7071
}),
7172

7273
startStreaming: () =>

0 commit comments

Comments
 (0)