feat(codex): import and resume sessions from runners (#1088)

* fix codex import resume flow

* fix hub restart session active state

* fix codex transcript workspace scoping

* Address Codex import review findings

* Fix Codex import machine selection

* Update Codex sessions error test

* Address Codex import review findings

* Preserve forked Codex session id on sync

* Make Codex duplicate cleanup source-aware

* Handle Codex archive failures

* Limit existing session flag to Codex

* Preserve Codex import machine binding

* fix: rebase runner Codex import onto current main

* fix: preserve runner-scoped Codex import behavior

---------

Co-authored-by: syy <815728149@qq.com>
This commit is contained in:
NightWatcher314
2026-07-19 14:14:42 +08:00
committed by GitHub
co-authored by syy
parent 651c83a1d9
commit 64834467e3
42 changed files with 2536 additions and 133 deletions
+14 -2
View File
@@ -7,6 +7,7 @@ import type {
CodexDesktopScriptResponse,
CodexDesktopSyncRequest,
CodexDesktopStatusResponse,
CodexArchiveSessionResponse,
CodexCollaborationMode,
FileSearchResponse,
MachinesResponse,
@@ -211,8 +212,19 @@ export class ApiClient {
})
}
async getCodexSessions(): Promise<CodexLocalSessionsResponse> {
return await this.request<CodexLocalSessionsResponse>('/api/codex/sessions')
async getCodexSessions(cwd?: string | null, machineId?: string | null): Promise<CodexLocalSessionsResponse> {
const params = new URLSearchParams()
if (cwd?.trim()) params.set('cwd', cwd.trim())
if (machineId?.trim()) params.set('machineId', machineId.trim())
const query = params.size ? `?${params.toString()}` : ''
return await this.request<CodexLocalSessionsResponse>(`/api/codex/sessions${query}`)
}
async archiveCodexSession(sessionId: string, machineId?: string | null): Promise<CodexArchiveSessionResponse> {
return await this.request<CodexArchiveSessionResponse>('/api/codex/archive-session', {
method: 'POST',
body: JSON.stringify({ sessionId, machineId: machineId ?? undefined })
})
}
async getCodexDesktopStatus(): Promise<CodexDesktopStatusResponse> {