| 84 | } |
| 85 | |
| 86 | function createDepsBase() { |
| 87 | const messagesRef = { current: [] as Message[] } |
| 88 | |
| 89 | return { |
| 90 | queryGuard: { |
| 91 | tryStart: () => null, |
| 92 | end: () => true, |
| 93 | isActive: () => false, |
| 94 | }, |
| 95 | enqueuePrompt: () => {}, |
| 96 | setMessages: (action: Message[] | ((prev: Message[]) => Message[])) => { |
| 97 | messagesRef.current = |
| 98 | typeof action === 'function' ? action(messagesRef.current) : action |
| 99 | return messagesRef.current |
| 100 | }, |
| 101 | messagesRef, |
| 102 | responseLengthRef: { current: 0 }, |
| 103 | apiMetricsRef: { current: [] }, |
| 104 | setStreamingToolUses: () => {}, |
| 105 | setStreamingText: () => {}, |
| 106 | resetTimingRefs: () => {}, |
| 107 | mrOnBeforeQuery: async () => {}, |
| 108 | runQueryImpl: async () => {}, |
| 109 | finalizeCurrentTurn: async () => {}, |
| 110 | getRestorableCanceledMessage: () => undefined, |
| 111 | removeLastFromHistory: () => {}, |
| 112 | restoreMessageSync: () => {}, |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | async function waitUntil( |
| 117 | predicate: () => boolean, |