History

Address Codex review feedback

Julius Marminge committed 7 months ago

Commit fa4a29f1 parent 3a38f065 files · +75 −8Browse files

Showing the changes to apps/server/src/provider/codex (2 of 5 files). Show all

Unified · Split

2 files
  1. apps/server/src/provider/codex/CodexSessionRuntime.test.ts +21 −0
  2. apps/server/src/provider/codex/CodexSessionRuntime.ts +15 −2
apps/server/src/provider/codex/CodexSessionRuntime.test.ts+21−0
@@ -171,6 +171,27 @@ describe("isRecoverableThreadResumeError", () => { · 170 unmodified lines
171171 false,
172172 );
173173 });
174+
175+ it("ignores unrelated missing-resource errors that do not mention threads", () => {
176+ assert.equal(
177+ isRecoverableThreadResumeError(
178+ new CodexErrors.CodexAppServerRequestError({
179+ code: -32603,
180+ errorMessage: "Config file not found",
181+ }),
182+ ),
183+ false,
184+ );
185+ assert.equal(
186+ isRecoverableThreadResumeError(
187+ new CodexErrors.CodexAppServerRequestError({
188+ code: -32603,
189+ errorMessage: "Model does not exist",
190+ }),
191+ ),
192+ false,
193+ );
194+ });
174195 });
175196
176197 describe("openCodexThread", () => {
apps/server/src/provider/codex/CodexSessionRuntime.ts+15−2
@@ -383,6 +383,9 @@ function classifyCodexStderrLine(rawLine: string): { readonly message: string } · 382 unmodified lines
383383
384384 export function isRecoverableThreadResumeError(error: unknown): boolean {
385385 const message = (error instanceof Error ? error.message : String(error)).toLowerCase();
386+ if (!message.includes("thread")) {
387+ return false;
388+ }
386389 return RECOVERABLE_THREAD_RESUME_ERROR_SNIPPETS.some((snippet) => message.includes(snippet));
387390 }
388391
@@ -390,8 +393,17 @@ type CodexThreadOpenResponse = · 1 unmodified line
390393 | CodexRpc.ClientRequestResponsesByMethod["thread/start"]
391394 | CodexRpc.ClientRequestResponsesByMethod["thread/resume"];
392395
396+type CodexThreadOpenMethod = "thread/start" | "thread/resume";
397+
398+interface CodexThreadOpenClient {
399+ readonly request: <M extends CodexThreadOpenMethod>(
400+ method: M,
401+ payload: CodexRpc.ClientRequestParamsByMethod[M],
402+ ) => Effect.Effect<CodexRpc.ClientRequestResponsesByMethod[M], CodexErrors.CodexAppServerError>;
403+}
404+
393405 export const openCodexThread = (input: {
394− readonly client: CodexClient.CodexAppServerClientShape;
406+ readonly client: CodexThreadOpenClient;
395407 readonly threadId: ThreadId;
396408 readonly runtimeMode: RuntimeMode;
397409 readonly cwd: string;
@@ -1288,6 +1300,7 @@ export const makeCodexSessionRuntime = ( · 890 unmodified lines
12881300 requestId,
12891301 });
12901302 }
1303+ const codexAnswers = yield* toCodexUserInputAnswers(answers);
12911304 yield* Ref.update(pendingUserInputsRef, (current) => {
12921305 const next = new Map(current);
12931306 next.delete(requestId);
@@ -1302,7 +1315,7 @@ export const makeCodexSessionRuntime = ( · 8 unmodified lines
13021315 ...(pending.turnId ? { turnId: pending.turnId } : {}),
13031316 ...(pending.itemId ? { itemId: pending.itemId } : {}),
13041317 payload: {
1305− answers: yield* toCodexUserInputAnswers(answers),
1318+ answers: codexAnswers,
13061319 },
13071320 });
13081321 }),

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t