From 201f78c2efdab798b0db8e76c1636650b32518e1 Mon Sep 17 00:00:00 2001 From: Dotta Date: Fri, 11 Sep 2026 17:02:30 -0500 Subject: [PATCH] fix(runner): preserve exact Claude model selectors during ACP admission Co-Authored-By: Paperclip --- .../src/drivers/acpx/codex-runtime-adapter.test.ts | 8 ++++++-- .../src/drivers/acpx/codex-runtime-adapter.ts | 9 ++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.test.ts b/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.test.ts index 45ad16975f..9ebcda1bd6 100644 --- a/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.test.ts +++ b/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.test.ts @@ -101,7 +101,10 @@ describe("Codex ACPX runtime adapter", () => { }); }); - it.each([["claude" as const, "claude-sonnet-5", "claude-sonnet-5"]])( + it.each([ + ["claude" as const, "claude-sonnet-5", "claude-sonnet-5"], + ["claude" as const, "custom-claude-model", "custom-claude-model"], + ])( "opens the qualified %s session through the verified lease", async (agent, model, providerModel) => { const runtime = fakeRuntime(); @@ -109,7 +112,7 @@ describe("Codex ACPX runtime adapter", () => { const options = openOptions(command); let runtimeOptions: AcpRuntimeOptions | undefined; options.profile = resolveQualifiedAcpxProfile(agent, model); - options.launchEnvironment = { PATH: "/verified/bin" }; + options.launchEnvironment = { PATH: "/verified/bin", ANTHROPIC_CUSTOM_MODEL_OPTION: "stale-model" }; await openCodexAcpxRuntime(options, { createRegistry: ({ overrides }) => { @@ -128,6 +131,7 @@ describe("Codex ACPX runtime adapter", () => { expect(runtimeOptions?.spawnEnvironment?.()).toEqual({ PATH: "/verified/bin", PAPERCLIP_ACPX_ISOLATED_CONTEXT: "1", + ANTHROPIC_CUSTOM_MODEL_OPTION: providerModel, }); expect(runtime.ensureSession).toHaveBeenCalledWith( expect.objectContaining({ diff --git a/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.ts b/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.ts index b92419eec6..a5c1d2d456 100644 --- a/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.ts +++ b/packages/paperclip-runner/src/drivers/acpx/codex-runtime-adapter.ts @@ -317,7 +317,14 @@ export async function openQualifiedAcpxRuntime( spawnEnvironment: () => ({ ...definedEnvironment(options.launchEnvironment), ...(options.profile.agent === "claude" - ? { PAPERCLIP_ACPX_ISOLATED_CONTEXT: "1" } + ? { + PAPERCLIP_ACPX_ISOLATED_CONTEXT: "1", + // Claude ACP otherwise maps concrete IDs back to rolling picker + // aliases (e.g. claude-sonnet-5 -> sonnet). Advertise the exact + // host-requested ID so model verification stays exact on resume + // and before the first billable prompt. + ANTHROPIC_CUSTOM_MODEL_OPTION: options.profile.reportedModelId, + } : {}), }), spawnCwd: options.cwd,