Cancel subscription sign-in requests when leaving agent setup (#19610)

Back during pending subscription sign-in could accept a late response and
reopen agent setup. Abort pending reads, release abandoned sessions, and
ignore stale responses. Wait for cleanup before starting a replacement,
and preserve sessions belonging to another account or environment.

Cover deferred resume/start/prompt responses for both providers, local
login cancellation, quick reselection, and browser request abort. Stabilize
Runner fixtures and normalization assertions exposed by integration CI.

Verified: 483 focused UI tests, six onboarding browser cases, UI typecheck
and token gates, Runner fixture checks, and the complete CI run on
221f2e3eb7. Greptile scored 5/5;
all review threads are resolved. Earlier failures and recovery evidence
remain in the PR description.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Devin FoleyandPaperclip authored and GitHub committed 2026-11-06 14:31:11 -08:00
1 parent fdda02a26e
commit 8621bcf53e
12 files changed
+439 -89

No files matched your search

@@ -1,4 +1,5 @@
import { describe, expect, it } from "vitest";
import { PAPERCLIP_RUNNER_DEFAULT_MODELS } from "@paperclipai/adapter-utils/paperclip-runner-permissions";
import {
normalizePaperclipOperationalSkillPreference,
normalizePaperclipRunnerAdapterConfig,
@@ -16,7 +17,7 @@ describe("paperclip_runner operational skill normalization", () => {
it("applies full-auto native runner defaults at persistence boundaries", () => {
expect(normalizePaperclipRunnerAdapterConfig("paperclip_runner", {})).toEqual({
provider: "codex",
model: "gpt-5.6-sol",
model: PAPERCLIP_RUNNER_DEFAULT_MODELS.codex,
codexPermissionMode: "never",
lifecycleMode: "per_turn",
});
@@ -24,7 +25,7 @@ describe("paperclip_runner operational skill normalization", () => {
it("repairs an existing blank model without replacing an explicit model", () => {
expect(normalizePaperclipRunnerAdapterConfig("paperclip_runner", { model: "" }))
.toMatchObject({ model: "gpt-5.6-sol" });
.toMatchObject({ model: PAPERCLIP_RUNNER_DEFAULT_MODELS.codex });
expect(normalizePaperclipRunnerAdapterConfig("paperclip_runner", { model: "gpt-5.5" }))
.toMatchObject({ model: "gpt-5.5" });
});