Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
10 changes: 5 additions & 5 deletions apps/ade-cli/src/adeRpcServer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1559,7 +1559,7 @@ describe("adeRpcServer", () => {
return await callTool(handler, "spawn_agent", {
laneId: "lane-1",
provider: "claude",
model: "claude-sonnet-4-6",
model: "claude-sonnet-5",
prompt: "Implement API wiring",
title: "Orchestrator Spawn"
});
Expand All @@ -1574,7 +1574,7 @@ describe("adeRpcServer", () => {
tracked: true,
toolType: "claude-orchestrated",
command: claudePath,
args: expect.arrayContaining(["--model", "claude-sonnet-4-6", "--permission-mode", "default"]),
args: expect.arrayContaining(["--model", "claude-sonnet-5", "--permission-mode", "default"]),
env: expect.objectContaining({
ADE_DEFAULT_ROLE: "agent",
}),
Expand Down Expand Up @@ -1993,7 +1993,7 @@ describe("adeRpcServer", () => {
return await callTool(handler, "spawn_agent", {
laneId: "lane-1",
provider: "claude",
model: "claude-sonnet-4-6",
model: "claude-sonnet-5",
prompt: "Implement API wiring",
title: "Orchestrator Spawn",
runId: "run-1",
Expand Down Expand Up @@ -2083,7 +2083,7 @@ describe("adeRpcServer", () => {
const response = await callTool(handler, "spawn_agent", {
laneId: "lane-1",
provider: "claude",
model: "claude-sonnet-4-6",
model: "claude-sonnet-5",
permissionMode: "config-toml",
prompt: "Implement API wiring",
});
Expand All @@ -2106,7 +2106,7 @@ describe("adeRpcServer", () => {
const response = await callTool(handler, "spawn_agent", {
laneId: "lane-1",
provider: "claude",
model: "claude-sonnet-4-6",
model: "claude-sonnet-5",
prompt: "Implement API wiring",
title: "Orchestrator Spawn",
runId: "run-1",
Expand Down
2 changes: 1 addition & 1 deletion apps/ade-cli/src/cli.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4448,7 +4448,7 @@ describe("ADE CLI", () => {
id: "legacy-rule",
actions: [
{ type: "create-lane", laneNameTemplate: "{{trigger.issue.title}}" },
{ type: "agent-session", modelId: "claude-opus-4-7" },
{ type: "agent-session", modelId: "claude-opus-4-8" },
],
});
const plan = buildCliPlan(["automations", "create", "--text", draft]);
Expand Down
2 changes: 1 addition & 1 deletion apps/ade-cli/src/headlessLinearServices.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ describe("headlessLinearServices", () => {

expect(codex.model).toBe("gpt-5.5");
expect(codex.modelId).toBe("openai/gpt-5.5");
expect(claude.model).toBe("opus-4.8-1m");
expect(claude.model).toBe("claude-opus-4-8");
expect(claude.modelId).toBe("anthropic/claude-opus-4-8");

services.dispose();
Expand Down
8 changes: 4 additions & 4 deletions apps/ade-cli/src/services/modelPickerStore.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ describe("modelPickerStore (db-backed)", () => {
const { db, root } = await makeDb();
const store = createModelPickerStore({ db, legacyFilePath: noMigration(root) });

const first = store.toggleFavorite("claude-opus-4-7");
expect(first).toEqual({ favorites: ["claude-opus-4-7"], isFavorite: true });
const first = store.toggleFavorite("claude-opus-4-8");
expect(first).toEqual({ favorites: ["claude-opus-4-8"], isFavorite: true });

const second = store.toggleFavorite("gpt-5");
expect(second.favorites).toEqual(["claude-opus-4-7", "gpt-5"]);
expect(second.favorites).toEqual(["claude-opus-4-8", "gpt-5"]);
expect(second.isFavorite).toBe(true);

const third = store.toggleFavorite("claude-opus-4-7");
const third = store.toggleFavorite("claude-opus-4-8");
expect(third).toEqual({ favorites: ["gpt-5"], isFavorite: false });
});

Expand Down
8 changes: 4 additions & 4 deletions apps/ade-cli/src/tuiClient/__tests__/RightPane.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ describe("RightPane chat info", () => {
<RightPane
content={{
kind: "chat-info",
info: chatInfo({ provider: "claude", modelLabel: "claude-opus-4-7", goal: null }),
info: chatInfo({ provider: "claude", modelLabel: "claude-opus-4-8", goal: null }),
}}
focused
width={80}
Expand Down Expand Up @@ -815,11 +815,11 @@ describe("RightPane setup panes", () => {
}}
modelPickerInputs={{
models: [
{ id: "anthropic/claude-sonnet-4-6", displayName: "Claude Sonnet 4.6", isDefault: true },
{ id: "anthropic/claude-sonnet-5", displayName: "Claude Sonnet 5", isDefault: true },
],
favorites: [],
recents: [],
activeModelId: "anthropic/claude-sonnet-4-6",
activeModelId: "anthropic/claude-sonnet-5",
activeReasoningEffort: "high",
}}
focused
Expand All @@ -829,7 +829,7 @@ describe("RightPane setup panes", () => {
const frame = stripAnsi(result.lastFrame() ?? "");

expect(frame).toContain("MODEL");
expect(frame).toContain("Claude Sonnet 4.6");
expect(frame).toContain("Claude Sonnet 5");
// Reasoning is shown in the settings footer, not as an inline per-model
// "think high" chip (that detail was removed from model rows).
expect(frame).toContain("reasoning");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ describe("TerminalPane", () => {
"││What's new│",
"│Welcome back Arul!│Added `claude agents --json` to list live Claude sessions",
"│ ▐▛███▜▌│Statusline JSON input now includes GitHub repo and PR information",
"│Sonnet 4.6 with low effort · Claude Max · ││",
"│Sonnet 5 with low effort · Claude Max · ││",
"│~/Projects/ADE/.ade/worktrees/scratch-tui-claude-audit││",
"○ low · /effort",
"❯ sayokthenstop",
Expand Down
4 changes: 2 additions & 2 deletions apps/ade-cli/src/tuiClient/__tests__/adeApi.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ describe("startCliTerminalSession", () => {
provider: "claude",
laneId: "lane-1",
title: "Claude smoke",
model: "anthropic/claude-sonnet-4-6",
model: "anthropic/claude-sonnet-5",
reasoningEffort: "low",
permissionMode: "auto",
initialInput: "Hello",
Expand All @@ -606,7 +606,7 @@ describe("startCliTerminalSession", () => {
laneId: "lane-1",
provider: "claude",
title: "Claude smoke",
model: "anthropic/claude-sonnet-4-6",
model: "anthropic/claude-sonnet-5",
reasoningEffort: "low",
permissionMode: "auto",
initialInput: "Hello",
Expand Down
4 changes: 2 additions & 2 deletions apps/ade-cli/src/tuiClient/__tests__/appInput.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -627,7 +627,7 @@ describe("right pane context defaults", () => {
function chatInfoForContext(): ChatInfoSnapshot {
return {
provider: "claude",
modelLabel: "Claude Sonnet 4.6",
modelLabel: "Claude Sonnet 5",
laneLabel: "Lane one",
contextPercent: null,
tokenSummary: null,
Expand Down Expand Up @@ -662,7 +662,7 @@ describe("right pane context defaults", () => {
newChatSetup: {
laneId: lane.id,
laneLabel: lane.name,
rows: [{ kind: "model", label: "Model", value: "Claude Sonnet 4.6", cyclable: true }],
rows: [{ kind: "model", label: "Model", value: "Claude Sonnet 5", cyclable: true }],
},
unavailableLaneIds: new Set(),
});
Expand Down
10 changes: 5 additions & 5 deletions apps/ade-cli/src/tuiClient/__tests__/chatInfo.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ function session(overrides: Partial<AgentChatSessionSummary> = {}): AgentChatSes
id: "session-1",
laneId: "lane-1",
provider: "claude",
model: "claude-opus-4-7",
model: "claude-opus-4-8",
title: null,
createdAt: "2026-05-18T12:00:00.000Z",
updatedAt: "2026-05-18T12:00:00.000Z",
Expand Down Expand Up @@ -91,7 +91,7 @@ describe("deriveChatInfoSnapshot", () => {
],
activeSession: null,
provider: "claude",
modelLabel: "claude-opus-4-7",
modelLabel: "claude-opus-4-8",
laneLabel: null,
snapshots: [],
tokenStats: null,
Expand All @@ -110,7 +110,7 @@ describe("deriveChatInfoSnapshot", () => {
events: [],
activeSession: null,
provider: "claude",
modelLabel: "claude-opus-4-7",
modelLabel: "claude-opus-4-8",
laneLabel: null,
snapshots: [],
tokenStats: tokenStats({
Expand Down Expand Up @@ -143,7 +143,7 @@ describe("deriveChatInfoSnapshot", () => {
events,
activeSession: null,
provider: "claude",
modelLabel: "claude-opus-4-7",
modelLabel: "claude-opus-4-8",
laneLabel: "lane-1",
snapshots: [],
tokenStats: null,
Expand All @@ -159,7 +159,7 @@ describe("deriveChatInfoSnapshot", () => {
events: [],
activeSession: session({ provider: "codex" }),
provider: "claude",
modelLabel: "claude-opus-4-7",
modelLabel: "claude-opus-4-8",
laneLabel: "fixing-cli-send-error",
snapshots: [
{ id: "x1", name: "delegated", kind: "subagent", status: "running", summary: "" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const modelState: Pick<AdeCodeModelState, "modelId" | "reasoningEffort" | "inter
describe("buildModelPickerLayout", () => {
const models: AgentChatModelInfo[] = [
modelInfo({ id: "anthropic/claude-opus-4-8", displayName: "Claude Opus 4.8 1M" }),
modelInfo({ id: "anthropic/claude-sonnet-4-6", displayName: "Claude Sonnet 4.6" }),
modelInfo({ id: "anthropic/claude-sonnet-5", displayName: "Claude Sonnet 5" }),
modelInfo({ id: "openai/gpt-5", displayName: "GPT-5" }),
];

Expand Down Expand Up @@ -116,12 +116,12 @@ describe("buildModelPickerLayout", () => {
key: "default",
label: "Anthropic",
models: [{
id: "anthropic/claude-sonnet-4-6",
runtimeModelId: "claude-sonnet-4-6",
id: "anthropic/claude-sonnet-5",
runtimeModelId: "claude-sonnet-5",
provider: "anthropic",
providerKey: "anthropic",
groupKey: "anthropic",
displayName: "Claude Sonnet 4.6",
displayName: "Claude Sonnet 5",
isDefault: true,
isAvailable: true,
}],
Expand All @@ -141,7 +141,7 @@ describe("buildModelPickerLayout", () => {
focusedIndex: 0,
searchMode: false,
});
expect(layout.entries.some((entry) => entry.modelId === "anthropic/claude-sonnet-4-6")).toBe(true);
expect(layout.entries.some((entry) => entry.modelId === "anthropic/claude-sonnet-5")).toBe(true);
expect(layout.entries.every((entry) => entry.family === "claude")).toBe(true);
});

Expand Down Expand Up @@ -316,7 +316,7 @@ describe("modelPickerController", () => {
models: [],
catalog: null,
favorites: ["openai/gpt-5.5"],
recents: ["anthropic/claude-sonnet-4-6"],
recents: ["anthropic/claude-sonnet-5"],
modelState,
aiStatus: null,
})).toMatchObject({
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/resources/voice/voice-glossary.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"Haiku",
"Fable",
"Claude Opus 4.8",
"Claude Sonnet 4.6",
"Claude Sonnet 5",
"Claude Haiku 4.5",
"Claude Fable 5",
"GPT-5.5",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ describe("aiIntegrationService", () => {
taskType: "planning",
prompt: "Plan this task",
cwd: "/tmp",
model: "anthropic/claude-sonnet-4-6"
model: "anthropic/claude-sonnet-5"
});

expect(mockState.runProviderTask).toHaveBeenCalledTimes(1);
Expand Down
4 changes: 2 additions & 2 deletions apps/desktop/src/main/services/ai/aiIntegrationService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ const DEFAULT_AI_FEATURE_FLAGS: Record<AiFeatureKey, boolean> = {
initial_context: true,
};

const DEFAULT_CLAUDE_TASK_MODEL_ID = getDefaultModelDescriptor("claude")?.id ?? "anthropic/claude-sonnet-4-6";
const DEFAULT_CLAUDE_TASK_MODEL_ID = getDefaultModelDescriptor("claude")?.id ?? "anthropic/claude-sonnet-5";
const DEFAULT_CODEX_TASK_MODEL_ID = getDefaultModelDescriptor("codex")?.id ?? "openai/gpt-5.5";

const TASK_DEFAULTS: Record<AiTaskType, RuntimeTaskDefaults> = {
Expand Down Expand Up @@ -1416,7 +1416,7 @@ export function createAiIntegrationService(args: {
if (exact) return exact.id;
}

// Resolve from alias (e.g. "sonnet" -> "anthropic/claude-sonnet-4-6")
// Resolve from alias (e.g. "sonnet" -> "anthropic/claude-sonnet-5")
if (requestedModelHint) {
const resolved = resolveModelAlias(requestedModelHint);
if (resolved) return resolved.id;
Expand Down
15 changes: 10 additions & 5 deletions apps/desktop/src/main/services/ai/claudeModelUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@ describe("resolveClaudeCliModel", () => {
expect(resolveClaudeCliModel("claude-opus-4-8[1m]")).toBe("claude-opus-4-8");
});

it("keeps Opus 4.7 and Opus 4.7 1M aliases on their existing CLI aliases", () => {
expect(resolveClaudeCliModel("claude-opus-4-7")).toBe("opus");
expect(resolveClaudeCliModel("claude-opus-4-7-1m")).toBe("opus[1m]");
expect(resolveClaudeCliModel("claude-opus-4-7[1m]")).toBe("opus[1m]");
expect(resolveClaudeCliModel("opus-11m")).toBe("opus");
it("maps removed basic Opus and Sonnet aliases to supported Claude CLI model ids", () => {
expect(resolveClaudeCliModel("claude-opus-4-7")).toBe("claude-opus-4-8");
expect(resolveClaudeCliModel("claude-sonnet-4-6")).toBe("claude-sonnet-5");
expect(resolveClaudeCliModel("sonnet")).toBe("claude-sonnet-5");
});

it("keeps Opus 4.7 1M aliases on their explicit 1M CLI id", () => {
expect(resolveClaudeCliModel("claude-opus-4-7-1m")).toBe("claude-opus-4-7[1m]");
expect(resolveClaudeCliModel("claude-opus-4-7[1m]")).toBe("claude-opus-4-7[1m]");
expect(resolveClaudeCliModel("opus-11m")).toBe("claude-opus-4-8");
});
});
5 changes: 3 additions & 2 deletions apps/desktop/src/main/services/ai/claudeModelUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ import { getDefaultModelDescriptor, getModelById, resolveModelAlias } from "../.

/**
* Normalize arbitrary Claude model strings into CLI-safe values accepted by
* Claude Code (`claude-opus-4-8`, `opus`, `opus[1m]`, `sonnet`, `haiku`) where possible.
* Claude Code (`claude-fable-5`, `claude-opus-4-8`, `claude-sonnet-5`,
* `claude-haiku-4-5`, `claude-opus-4-7[1m]`) where possible.
*/
export function resolveClaudeCliModel(model: string | null | undefined): string {
return resolveClaudeCliModelAlias(model, "sonnet") ?? "sonnet";
return resolveClaudeCliModelAlias(model, "claude-sonnet-5") ?? "claude-sonnet-5";
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ describe("runProviderTask", () => {
descriptor: {
family: "anthropic",
isCliWrapped: true,
providerModelId: "claude-sonnet-4-6",
providerModelId: "claude-sonnet-5",
} as any,
prompt: "Summarize the worktree state.",
feature: "unit-test",
Expand Down
6 changes: 3 additions & 3 deletions apps/desktop/src/main/services/ai/tools/ctoOperatorTools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -334,23 +334,23 @@ export function createCtoOperatorTools(deps: CtoOperatorToolDeps): Record<string
description:
"Create a native ADE work chat session — the primary way to launch an AI agent in ADE. " +
"IMPORTANT: Always pass modelId when the user specifies a model. Use the full model ID " +
"(e.g. 'anthropic/claude-opus-4-7' for Opus, 'anthropic/claude-sonnet-4-6' for Sonnet, " +
"(e.g. 'anthropic/claude-opus-4-8' for Opus, 'anthropic/claude-sonnet-5' for Sonnet, " +
"'anthropic/claude-haiku-4-5' for Haiku, 'openai/gpt-5.5' for GPT-5.5). " +
"If no modelId is passed, the CTO's default model preference is used. " +
"Set initialPrompt to seed the chat with a task description — the agent will begin working immediately. " +
"This creates a full ADE chat with UI, streaming, tool approval, and service integration. " +
"Use this when the user asks for 'a chat' or 'an agent'. If they explicitly want a terminal or CLI tool, use createTerminal instead.",
inputSchema: z.object({
laneId: z.string().optional().describe("Lane to run in. Defaults to the primary lane. A new lane is auto-created if needed."),
modelId: z.string().optional().describe("Full model ID (e.g. 'anthropic/claude-sonnet-4-6'). MUST be set when user specifies a model."),
modelId: z.string().optional().describe("Full model ID (e.g. 'anthropic/claude-sonnet-5'). MUST be set when user specifies a model."),
reasoningEffort: z.string().nullable().optional().describe("Reasoning effort: 'low', 'medium', 'high', 'max' (opus), 'xhigh' (openai)."),
title: z.string().optional().describe("Display title for the chat session."),
initialPrompt: z.string().optional().describe("Task description to seed the chat. The agent starts working immediately."),
openInUi: z.boolean().optional().default(true).describe("Whether to open the chat in the ADE UI."),
}),
execute: async ({ laneId, modelId, reasoningEffort, title, initialPrompt, openInUi }) => {
try {
// Resolve model: supports full IDs (anthropic/claude-sonnet-4-6), short IDs (sonnet), and aliases (opus)
// Resolve model: supports full IDs (anthropic/claude-sonnet-5), short IDs (sonnet), and aliases (opus)
const rawModelId = modelId?.trim() || null;
const descriptor = rawModelId ? resolveModelDescriptor(rawModelId) : null;
const selectedModelId = descriptor?.id ?? rawModelId ?? deps.defaultModelId ?? null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,14 +352,14 @@ describe("spawnAgent tool", () => {
expect(createArgs.orchestrationRole).toBe("worker");
expect(createArgs.orchestrationStepId).toBe("T-1");
expect(createArgs.provider).toBe("claude");
expect(createArgs.model).toBe("claude-sonnet-4-6");
expect(createArgs.model).toBe("claude-sonnet-5");
expect(createArgs.claudePermissionMode).toBe("bypassPermissions");
const manifest = setup.svc.getManifestForRun(setup.runId)!;
expect(manifest.agents.some((a) => a.sessionId === "S-spawned-1")).toBe(true);
const spawned = manifest.agents.find((a) => a.sessionId === "S-spawned-1")!;
expect(spawned.spawnFingerprint).toMatchObject({
provider: "claude",
modelId: "claude-sonnet-4-6",
modelId: "claude-sonnet-5",
routingKey: "fallback",
});
expect(setup.chat.sendMessage).toHaveBeenCalledTimes(1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ type WatchedFileRoot = {
const DEFAULT_AUTOMATION_CHAT_MODEL_ID =
getDefaultModelDescriptor("opencode")?.id
?? getDefaultModelDescriptor("claude")?.id
?? "anthropic/claude-sonnet-4-6";
?? "anthropic/claude-sonnet-5";

type AutomationRunRow = {
id: string;
Expand Down
Loading
Loading