fix codex session import merge (#1123) (#1127)

修复 Codex 会话导入合并后列表为空的问题。

Fix Codex session import merge so a session is not detected as a duplicate of itself and deleted during merge.
This commit is contained in:
Himehane
2026-07-22 23:31:46 +08:00
committed by GitHub
parent 782b523fb0
commit a965b0ab21
5 changed files with 340 additions and 18 deletions
+11 -3
View File
@@ -204,6 +204,7 @@ function SessionsPage() {
const [isSyncConfirmOpen, setIsSyncConfirmOpen] = useState(false)
const [isRestartingCodexDesktop, setIsRestartingCodexDesktop] = useState(false)
const [pendingDuplicateSessionIds, setPendingDuplicateSessionIds] = useState<string[]>([])
const [pendingDuplicateHapiSessionIds, setPendingDuplicateHapiSessionIds] = useState<string[]>([])
const [duplicateSessionGroups, setDuplicateSessionGroups] = useState<CodexDuplicateSessionGroup[]>([])
const [isDuplicateMergeConfirmOpen, setIsDuplicateMergeConfirmOpen] = useState(false)
const [isMergingDuplicateSessions, setIsMergingDuplicateSessions] = useState(false)
@@ -312,6 +313,7 @@ function SessionsPage() {
// 中文注释:重复会话确认框关闭时一并清空“本次选中导入”的上下文,确保后续检测不会误用上一轮的 codexSessionId。
setIsDuplicateMergeConfirmOpen(false)
setPendingDuplicateSessionIds([])
setPendingDuplicateHapiSessionIds([])
setDuplicateSessionGroups([])
}, [])
@@ -367,7 +369,9 @@ function SessionsPage() {
const redirectTarget = selectedSessionId
? result.merged.find((group) => group.removedSessionIds?.includes(selectedSessionId))
: undefined
?? result.merged.find((group) => Boolean(group.canonicalSessionId))
: result.merged.find((group) => Boolean(group.canonicalSessionId))
const redirectSessionId = redirectTarget?.canonicalSessionId ?? pendingDuplicateHapiSessionIds[0]
closeDuplicateMergeDialog()
await Promise.all([
@@ -381,10 +385,10 @@ function SessionsPage() {
])
await refetch()
if (redirectTarget?.canonicalSessionId) {
if (redirectSessionId) {
navigate({
to: '/sessions/$sessionId',
params: { sessionId: redirectTarget.canonicalSessionId }
params: { sessionId: redirectSessionId }
})
}
} catch (error) {
@@ -408,6 +412,7 @@ function SessionsPage() {
isMergingDuplicateSessions,
navigate,
normalizeCodexScriptError,
pendingDuplicateHapiSessionIds,
pendingDuplicateSessionIds,
queryClient,
refetch,
@@ -475,6 +480,7 @@ function SessionsPage() {
await refetch()
setPendingDuplicateSessionIds([])
setPendingDuplicateHapiSessionIds(result.hapiSessionIds ?? [])
setDuplicateSessionGroups([])
setIsDuplicateMergeConfirmOpen(false)
try {
@@ -489,6 +495,7 @@ function SessionsPage() {
if (duplicateResult.duplicates.length > 0) {
setPendingDuplicateSessionIds(sessionIds)
setPendingDuplicateHapiSessionIds(result.hapiSessionIds ?? [])
setDuplicateSessionGroups(duplicateResult.duplicates)
setIsDuplicateMergeConfirmOpen(true)
}
@@ -529,6 +536,7 @@ function SessionsPage() {
refetch,
setDuplicateSessionGroups,
setIsDuplicateMergeConfirmOpen,
setPendingDuplicateHapiSessionIds,
setPendingDuplicateSessionIds,
t
])