Skip to content

Commit 625c5b7

Browse files
committed
Use current turn id
1 parent deb1946 commit 625c5b7

3 files changed

Lines changed: 14 additions & 19 deletions

File tree

src/CodexAcpServer.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ export interface SessionState {
4444
supportedReasoningEfforts: Array<ReasoningEffortOption>,
4545
supportedInputModalities: Array<InputModality>,
4646
agentMode: AgentMode,
47-
pendingTurnId: Promise<string> | null;
48-
currentTurnId: string | null;
47+
// Promise covers the turn/start request window before the turn id response arrives.
48+
currentTurnId: Promise<string> | string | null;
4949
lastTokenUsage: TokenCount | null;
5050
totalTokenUsage: TokenCount | null;
5151
modelContextWindow: number | null;
@@ -175,7 +175,6 @@ export class CodexAcpServer implements acp.Agent {
175175
supportedReasoningEfforts: currentModel?.supportedReasoningEfforts ?? [],
176176
supportedInputModalities: currentModel?.inputModalities ?? ["text", "image"],
177177
agentMode: AgentMode.getInitialAgentMode(),
178-
pendingTurnId: null,
179178
currentTurnId: null,
180179
lastTokenUsage: null,
181180
totalTokenUsage: null,
@@ -407,7 +406,6 @@ export class CodexAcpServer implements acp.Agent {
407406
supportedReasoningEfforts: currentModel?.supportedReasoningEfforts ?? [],
408407
supportedInputModalities: currentModel?.inputModalities ?? ["text", "image"],
409408
agentMode: AgentMode.getInitialAgentMode(),
410-
pendingTurnId: null,
411409
currentTurnId: null,
412410
lastTokenUsage: null,
413411
totalTokenUsage: null,
@@ -670,17 +668,19 @@ export class CodexAcpServer implements acp.Agent {
670668
}
671669

672670
private async resolveActiveTurnId(sessionState: SessionState): Promise<string | null> {
673-
if (sessionState.currentTurnId) {
674-
return sessionState.currentTurnId;
675-
}
676-
if (!sessionState.pendingTurnId) {
671+
const currentTurnId = sessionState.currentTurnId;
672+
if (!currentTurnId) {
677673
return null;
678674
}
679675

676+
if (typeof currentTurnId === "string") {
677+
return currentTurnId;
678+
}
679+
680680
try {
681-
return await sessionState.pendingTurnId;
681+
return await currentTurnId;
682682
} catch (err) {
683-
logger.error(`Failed to resolve pending turn for session ${sessionState.sessionId}`, err);
683+
logger.error(`Failed to resolve current turn for session ${sessionState.sessionId}`, err);
684684
return null;
685685
}
686686
}
@@ -783,7 +783,6 @@ export class CodexAcpServer implements acp.Agent {
783783
const sessionState = this.getSessionState(params.sessionId);
784784
const requireTrackedSession = this.sessions.has(params.sessionId);
785785
this.ensureSessionIsActive(params.sessionId, requireTrackedSession);
786-
sessionState.pendingTurnId = null;
787786
sessionState.currentTurnId = null;
788787
sessionState.lastTokenUsage = null;
789788

@@ -830,12 +829,11 @@ export class CodexAcpServer implements acp.Agent {
830829
throw RequestError.invalidRequest("The current model does not support image input");
831830
}
832831
const agentMode = sessionState.agentMode;
833-
const pendingTurnId = this.runWithProcessCheck(
832+
const turnIdPromise = this.runWithProcessCheck(
834833
() => this.codexAcpClient.startPrompt(params, agentMode, modelId, disableSummary, sessionState.cwd)
835834
);
836-
sessionState.pendingTurnId = pendingTurnId;
837-
const turnId = await pendingTurnId;
838-
sessionState.pendingTurnId = null;
835+
sessionState.currentTurnId = turnIdPromise;
836+
const turnId = await turnIdPromise;
839837
sessionState.currentTurnId = turnId;
840838

841839
const turnCompleted = await this.runWithProcessCheck(
@@ -879,7 +877,6 @@ export class CodexAcpServer implements acp.Agent {
879877
throw err;
880878
} finally {
881879
logger.log("Prompt completed", {sessionId: params.sessionId});
882-
sessionState.pendingTurnId = null;
883880
sessionState.currentTurnId = null;
884881
}
885882
}

src/__tests__/CodexACPAgent/CodexAcpClient.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,8 +1239,7 @@ describe('ACP server test', { timeout: 40_000 }, () => {
12391239
const codexAcpClient = mockFixture.getCodexAcpClient();
12401240
const sessionState = createTestSessionState({
12411241
sessionId: "session-close",
1242-
currentTurnId: null,
1243-
pendingTurnId: Promise.resolve("turn-pending"),
1242+
currentTurnId: Promise.resolve("turn-pending"),
12441243
});
12451244
const closeSpy = vi.spyOn(codexAcpClient, "closeSession").mockResolvedValue();
12461245

src/__tests__/acp-test-utils.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,6 @@ function anonymizeValue(value: any, path: string[], fieldsToAnonymize: Set<strin
299299
*/
300300
export function createTestSessionState(overrides?: Partial<SessionState>): SessionState {
301301
return {
302-
pendingTurnId: null,
303302
currentTurnId: null,
304303
lastTokenUsage: null,
305304
totalTokenUsage: null,

0 commit comments

Comments
 (0)