Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions desktop/src/features/onboarding/ui/SetupStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -612,7 +612,7 @@ function RuntimeProvidersSection({

<div className="flex w-full flex-1 flex-col items-center justify-center gap-8 py-10">
{orderedItems.length > 0 ? (
<div className="grid min-w-0 w-full max-w-[592px] grid-cols-1 gap-4 md:grid-cols-2">
<div className="grid min-w-0 w-full max-w-[1200px] grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4">
{orderedItems.map((runtime) => (
<RuntimeCard
installResults={installResults}
Expand All @@ -629,8 +629,8 @@ function RuntimeProvidersSection({
className="max-w-[560px] rounded-2xl bg-white/70 px-6 py-6 text-sm text-muted-foreground"
data-testid="onboarding-acp-empty"
>
No supported agent harnesses were detected yet. Install Claude Code
or Codex, then check again.
No supported agent harnesses were detected yet. Install a supported
harness, then check again.
</p>
)}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ function runtime(id, availability, status) {
return { id, availability, authStatus: { status } };
}

test("only Claude Code and Codex are visible in onboarding", () => {
test("all bundled harnesses are visible in onboarding", () => {
assert.equal(runtimeIsVisibleInOnboarding("claude"), true);
assert.equal(runtimeIsVisibleInOnboarding("codex"), true);
assert.equal(runtimeIsVisibleInOnboarding("goose"), false);
assert.equal(runtimeIsVisibleInOnboarding("buzz-agent"), false);
assert.equal(runtimeIsVisibleInOnboarding("goose"), true);
assert.equal(runtimeIsVisibleInOnboarding("buzz-agent"), true);
assert.equal(runtimeIsVisibleInOnboarding("custom"), false);
});

Expand All @@ -30,7 +30,7 @@ test("visible onboarding runtimes use the product order", () => {

assert.deepEqual(
getVisibleOnboardingRuntimes(runtimes).map(({ id }) => id),
["claude", "codex"],
["claude", "codex", "goose", "buzz-agent"],
);
});

Expand All @@ -55,16 +55,17 @@ test("readiness requires an available and authenticated runtime", () => {
);
});

test("ready onboarding runtimes exclude hidden ready harnesses", () => {
test("ready onboarding runtimes exclude unknown and non-ready harnesses", () => {
const runtimes = [
runtime("goose", "available", "not_applicable"),
runtime("codex", "available", "logged_out"),
runtime("buzz-agent", "available", "not_applicable"),
runtime("claude", "available", "logged_in"),
runtime("custom", "available", "not_applicable"),
];

assert.deepEqual(
getReadyOnboardingRuntimes(runtimes).map(({ id }) => id),
["claude"],
["claude", "goose", "buzz-agent"],
);
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import type { AcpRuntimeCatalogEntry } from "@/shared/api/types";

export const ONBOARDING_RUNTIME_ORDER = ["claude", "codex"];
export const ONBOARDING_RUNTIME_ORDER = [
"claude",
"codex",
"goose",
"buzz-agent",
];

const VISIBLE_ONBOARDING_RUNTIME_IDS = new Set<string>(
ONBOARDING_RUNTIME_ORDER,
Expand Down
18 changes: 7 additions & 11 deletions desktop/tests/e2e/onboarding-agent-defaults.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ async function readSavedRuntime(page: Parameters<typeof installMockBridge>[0]) {
});
}

test("setup shows only Claude Code and Codex as detected harnesses", async ({
page,
}) => {
test("setup shows all bundled harnesses as detected", async ({ page }) => {
await installMockBridge(
page,
{
Expand All @@ -77,10 +75,8 @@ test("setup shows only Claude Code and Codex as detected harnesses", async ({

await expect(page.getByTestId("onboarding-runtime-claude")).toBeVisible();
await expect(page.getByTestId("onboarding-runtime-codex")).toBeVisible();
await expect(page.getByTestId("onboarding-runtime-goose")).toHaveCount(0);
await expect(page.getByTestId("onboarding-runtime-buzz-agent")).toHaveCount(
0,
);
await expect(page.getByTestId("onboarding-runtime-goose")).toBeVisible();
await expect(page.getByTestId("onboarding-runtime-buzz-agent")).toBeVisible();
await expect(page.getByRole("checkbox")).toHaveCount(0);
});

Expand Down Expand Up @@ -525,8 +521,8 @@ test("defaults auto-selects the only ready visible harness", async ({
page,
{
acpRuntimesCatalog: [
runtime("buzz-agent", "available", { status: "not_applicable" }),
runtime("goose", "available", { status: "not_applicable" }),
runtime("buzz-agent", "not_installed", { status: "not_applicable" }),
runtime("goose", "not_installed", { status: "not_applicable" }),
runtime("claude", "available", { status: "logged_in" }),
runtime("codex", "available", { status: "logged_out" }),
],
Expand Down Expand Up @@ -626,10 +622,10 @@ test("defaults requires a choice when multiple visible harnesses are ready", asy
).toBeVisible();
await expect(
page.getByTestId("global-agent-default-harness-option-goose"),
).toHaveCount(0);
).toBeVisible();
await expect(
page.getByTestId("global-agent-default-harness-option-buzz-agent"),
).toHaveCount(0);
).toBeVisible();
await page.getByTestId("global-agent-default-harness-option-codex").click();
await expect(harness).toHaveText("Codex");
await expect(page.getByTestId("onboarding-finish")).toBeEnabled();
Expand Down
Loading