Skip to content

Commit 84c9167

Browse files
committed
Handle non-resumable pending user input
1 parent d1e85c4 commit 84c9167

5 files changed

Lines changed: 21 additions & 7 deletions

File tree

apps/server/src/orchestration/Layers/ProjectionPipeline.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@ function derivePendingUserInputCountFromActivities(
141141
activity.kind === "provider.user-input.respond.failed" &&
142142
detail !== null &&
143143
(detail.includes("stale pending user-input request") ||
144-
detail.includes("unknown pending user-input request"))
144+
detail.includes("unknown pending user-input request") ||
145+
detail.includes("unknown pending user input request") ||
146+
detail.includes("unknown pending codex user input request"))
145147
) {
146148
openRequestIds.delete(requestId);
147149
}

apps/server/src/orchestration/Layers/ProviderCommandReactor.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1857,15 +1857,15 @@ describe("ProviderCommandReactor", () => {
18571857
expect(resolvedActivity).toBeUndefined();
18581858
});
18591859

1860-
it("surfaces stale provider user-input failures without faking user-input resolution", async () => {
1860+
it("surfaces non-resumable provider user-input callbacks as stale failures", async () => {
18611861
const harness = await createHarness();
18621862
const now = "2026-01-01T00:00:00.000Z";
18631863
harness.respondToUserInput.mockImplementation(() =>
18641864
Effect.fail(
18651865
new ProviderAdapterRequestError({
18661866
provider: ProviderDriverKind.make("claudeAgent"),
18671867
method: "item/tool/respondToUserInput",
1868-
detail: "Unknown pending user-input request: user-input-request-1",
1868+
detail: "Unknown pending Codex user input request: user-input-request-1",
18691869
}),
18701870
),
18711871
);

apps/server/src/orchestration/Layers/ProviderCommandReactor.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,19 @@ function isUnknownPendingApprovalRequestError(cause: Cause.Cause<ProviderService
142142
function isUnknownPendingUserInputRequestError(cause: Cause.Cause<ProviderServiceError>): boolean {
143143
const error = findProviderAdapterRequestError(cause);
144144
if (error) {
145-
return error.detail.toLowerCase().includes("unknown pending user-input request");
145+
const detail = error.detail.toLowerCase();
146+
return (
147+
detail.includes("unknown pending user-input request") ||
148+
detail.includes("unknown pending user input request") ||
149+
detail.includes("unknown pending codex user input request")
150+
);
146151
}
147-
return Cause.pretty(cause).toLowerCase().includes("unknown pending user-input request");
152+
const message = Cause.pretty(cause).toLowerCase();
153+
return (
154+
message.includes("unknown pending user-input request") ||
155+
message.includes("unknown pending user input request") ||
156+
message.includes("unknown pending codex user input request")
157+
);
148158
}
149159

150160
function stalePendingRequestDetail(

apps/web/src/session-logic.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ describe("derivePendingUserInputs", () => {
297297
payload: {
298298
requestId: "req-user-input-stale-1",
299299
detail:
300-
"Stale pending user-input request: req-user-input-stale-1. Provider callback state does not survive app restarts or recovered sessions. Restart the turn to continue.",
300+
"Provider adapter request failed (codex) for item/tool/requestUserInput: Unknown pending Codex user input request: req-user-input-stale-1",
301301
},
302302
}),
303303
];

apps/web/src/session-logic.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,9 @@ function isStalePendingRequestFailureDetail(detail: string | undefined): boolean
201201
normalized.includes("stale pending user-input request") ||
202202
normalized.includes("unknown pending approval request") ||
203203
normalized.includes("unknown pending permission request") ||
204-
normalized.includes("unknown pending user-input request")
204+
normalized.includes("unknown pending user-input request") ||
205+
normalized.includes("unknown pending user input request") ||
206+
normalized.includes("unknown pending codex user input request")
205207
);
206208
}
207209

0 commit comments

Comments
 (0)