继续优化重构后的逻辑

This commit is contained in:
xintaofei
2026-03-10 21:32:21 +08:00
parent 516aebd7e5
commit a048a4cae2
2 changed files with 12 additions and 48 deletions

View File

@@ -165,10 +165,6 @@ const ConversationTabView = memo(function ConversationTabView({
const dbConvIdRef = useRef<number | null>(conversationId)
const statusUpdatedRef = useRef(false)
const selectedAgentRef = useRef(selectedAgent)
const pendingPromptRef = useRef<{
draft: PromptDraft
modeId: string | null
} | null>(null)
const createConversationPendingRef = useRef(false)
const reconcileTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)
const externalIdSavedRef = useRef(false)
@@ -355,14 +351,6 @@ const ConversationTabView = memo(function ConversationTabView({
setSyncState,
])
useEffect(() => {
if (connStatus === "connected" && pendingPromptRef.current) {
const pending = pendingPromptRef.current
pendingPromptRef.current = null
lifecycleSend(pending.draft, pending.modeId)
}
}, [connStatus, lifecycleSend])
useEffect(() => {
if (connStatus === "connected" || connStatus === "prompting") {
statusUpdatedRef.current = false
@@ -424,6 +412,7 @@ const ConversationTabView = memo(function ConversationTabView({
setAgentConnectError(tWelcome("enableAgentFirstPlaceholder"))
return
}
if (connStatus !== "connected") return
const optimisticTurn = buildOptimisticUserTurnFromDraft(
draft,
@@ -436,32 +425,7 @@ const ConversationTabView = memo(function ConversationTabView({
)
setSendSignal((prev) => prev + 1)
setSyncState(effectiveConversationId, "awaiting_persist")
if (connStatus === "connected") {
lifecycleSend(draft, selectedModeIdArg)
} else {
pendingPromptRef.current = {
draft,
modeId: selectedModeIdArg ?? null,
}
if (
(!connStatus ||
connStatus === "disconnected" ||
connStatus === "error") &&
workingDirForConnection
) {
connConnect(
selectedAgent,
workingDirForConnection,
dbConversationId != null ? externalId : undefined,
{
source: "auto_link",
}
).catch((e) => {
setAgentConnectError(normalizeErrorMessage(e))
})
}
}
lifecycleSend(draft, selectedModeIdArg)
const persistedId = dbConvIdRef.current
if (persistedId) {
@@ -511,11 +475,8 @@ const ConversationTabView = memo(function ConversationTabView({
appendOptimisticTurn,
bindConversationTab,
canAutoConnect,
connConnect,
connStatus,
dbConversationId,
effectiveConversationId,
externalId,
folderId,
hasPersistedConversation,
lifecycleSend,
@@ -530,7 +491,6 @@ const ConversationTabView = memo(function ConversationTabView({
tabId,
temporaryConversationId,
trySaveExternalId,
workingDirForConnection,
]
)
@@ -659,12 +619,17 @@ export function ConversationDetailPanel() {
const { tabs, activeTabId, openNewConversationTab, closeTab } =
useTabContext()
const [reloadByTabId, setReloadByTabId] = useState<Record<string, number>>({})
const tabsRef = useRef(tabs)
const conversationsRef = useRef(conversations)
const pendingClosedConversationIdsRef = useRef<Set<number>>(new Set())
const pendingRefreshTimerRef = useRef<ReturnType<typeof setTimeout> | null>(
null
)
useEffect(() => {
tabsRef.current = tabs
}, [tabs])
useEffect(() => {
conversationsRef.current = conversations
}, [conversations])
@@ -744,6 +709,11 @@ export function ConversationDetailPanel() {
runtimeConversationId ?? summary?.id ?? null
if (!matchedConversationId) return
const isOpenInTabs = tabsRef.current.some(
(tab) => tab.conversationId === matchedConversationId
)
if (isOpenInTabs) return
invalidateDetailCache(matchedConversationId)
setSyncState(matchedConversationId, "reconciling")

View File

@@ -70,12 +70,6 @@ async function loadAndCacheDetail(
return promise
}
export async function warmupDetailCache(
conversationId: number
): Promise<DbConversationDetail> {
return loadAndCacheDetail(conversationId)
}
export async function refreshDetailCache(
conversationId: number
): Promise<DbConversationDetail> {