diff --git a/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts b/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts index 2c1fd0cc24..41da8ac3fa 100644 --- a/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts +++ b/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts @@ -10,6 +10,16 @@ async function pressSettingsToggleShortcut(page: import("@playwright/test").Page await page.keyboard.press(`${modifier}+Comma`); } +async function openComposerTab(page: import("@playwright/test").Page, agentId: string) { + await page + .getByTestId(`workspace-tab-agent_${agentId}`) + .filter({ visible: true }) + .first() + .click(); + await expectAgentTabActive(page, agentId); + await expect(page.getByRole("textbox", { name: "Message agent..." })).toBeVisible(); +} + interface ComposerFrame { at: number; visible: boolean; @@ -27,7 +37,9 @@ async function startComposerFrameCapture(page: import("@playwright/test").Page) const sample = () => { if (capture.stopped) return; - const root = document.querySelector('[data-testid="message-input-root"]'); + const root = Array.from( + document.querySelectorAll('[data-testid="message-input-root"]'), + ).find((candidate) => candidate.offsetParent !== null); const input = root?.querySelector("textarea"); if (root && input) { const style = getComputedStyle(input); @@ -178,6 +190,8 @@ test.describe("Settings toggle tab regression", () => { await openWorkspaceWithAgents(page, [firstAgent, secondAgent]); await waitForTabBar(page); + await openComposerTab(page, firstAgent.id); + await openComposerTab(page, secondAgent.id); const input = page.getByRole("textbox", { name: "Message agent..." }); await input.fill("Keep this short draft in the composer"); const root = page.getByTestId("message-input-root").filter({ visible: true }).first(); @@ -194,6 +208,7 @@ test.describe("Settings toggle tab regression", () => { const frames = await stopComposerFrameCapture(page); const visibleFrames = frames.filter((frame) => frame.visible); + expect(visibleFrames.length, "Capture must observe the visible composer").toBeGreaterThan(0); const tallestIndex = visibleFrames.reduce( (index, frame, candidateIndex) => frame.rootHeight > visibleFrames[index].rootHeight ? candidateIndex : index, diff --git a/packages/app/src/data/acp-provider-catalog.ts b/packages/app/src/data/acp-provider-catalog.ts index f91a9540f2..f0210f1402 100644 --- a/packages/app/src/data/acp-provider-catalog.ts +++ b/packages/app/src/data/acp-provider-catalog.ts @@ -38,10 +38,10 @@ const CATALOG_DATA = [ title: "Auggie CLI", description: "Augment Code's powerful software agent, backed by industry-leading context engine", - version: "0.33.0", + version: "0.36.0", iconId: "auggie", installLink: "https://www.augmentcode.com/", - command: ["npx", "-y", "@augmentcode/auggie@0.33.0", "--acp"], + command: ["npx", "-y", "@augmentcode/auggie@0.36.0", "--acp"], env: { AUGMENT_DISABLE_AUTO_UPDATE: "1", }, @@ -60,10 +60,10 @@ const CATALOG_DATA = [ title: "Cline", description: "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more", - version: "3.0.46", + version: "3.0.73", iconId: "cline", installLink: "https://cline.bot/cli", - command: ["npx", "-y", "cline@3.0.46", "--acp"], + command: ["npx", "-y", "cline@3.0.73", "--acp"], }, { id: "codebuddy-code", @@ -123,10 +123,10 @@ const CATALOG_DATA = [ id: "deepagents", title: "DeepAgents", description: "Batteries-included AI coding and general purpose agent powered by LangChain.", - version: "0.1.20", + version: "0.1.36", iconId: "deepagents", installLink: "https://docs.langchain.com/oss/javascript/deepagents/overview", - command: ["npx", "-y", "deepagents-acp@0.1.20"], + command: ["npx", "-y", "deepagents-acp@0.1.36"], }, { id: "devin", @@ -141,29 +141,29 @@ const CATALOG_DATA = [ id: "dimcode", title: "DimCode", description: "A coding agent that puts leading models at your command.", - version: "0.2.36", + version: "0.5.21", iconId: "dimcode", installLink: "https://dimcode.dev/docs/acp.html", - command: ["npx", "-y", "dimcode@0.2.36", "acp"], + command: ["npx", "-y", "dimcode@0.5.21", "acp"], }, { id: "dirac", title: "Dirac", description: "Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source.", - version: "0.4.22", + version: "0.5.23", iconId: "dirac", installLink: "https://dirac.run", - command: ["npx", "-y", "dirac-cli@0.4.22", "--acp"], + command: ["npx", "-y", "dirac-cli@0.5.23", "--acp"], }, { id: "factory-droid", title: "Factory Droid", description: "Factory Droid - AI coding agent powered by Factory AI", - version: "0.179.0", + version: "0.249.0", iconId: "factory-droid", installLink: "https://factory.ai/product/cli", - command: ["npx", "-y", "droid@0.179.0", "exec", "--output-format", "acp-daemon"], + command: ["npx", "-y", "droid@0.249.0", "exec", "--output-format", "acp-daemon"], env: { DROID_DISABLE_AUTO_UPDATE: "true", FACTORY_DROID_AUTO_UPDATE_ENABLED: "false", @@ -174,19 +174,19 @@ const CATALOG_DATA = [ id: "fast-agent", title: "fast-agent", description: "Code and build agents with comprehensive multi-provider support", - version: "0.9.22", + version: "0.10.47", iconId: "fast-agent", installLink: "https://fast-agent.ai/acp/", - command: ["uvx", "--from", "fast-agent-acp==0.9.22", "fast-agent-acp", "-x"], + command: ["uvx", "--from", "fast-agent-acp==0.10.47", "fast-agent-acp", "-x"], }, { id: "gemini", title: "Gemini CLI", description: "Google's official CLI for Gemini", - version: "0.52.0", + version: "0.65.0", iconId: "gemini", installLink: "https://geminicli.com", - command: ["npx", "-y", "@google/gemini-cli@0.52.0", "--acp"], + command: ["npx", "-y", "@google/gemini-cli@0.65.0", "--acp"], }, { id: "gjc", @@ -205,11 +205,11 @@ const CATALOG_DATA = [ id: "glm-acp-agent", title: "GLM Agent", description: - "ACP agent powered by Zhipu AI's GLM Coding Plan models (glm-5.1, glm-5-turbo, glm-4.7, glm-4.5-air). Supports streaming, tool calls, mid-session model switching, image input via Z.AI Coding Plan Vision MCP, and session load/fork/resume with on-disk persistence.", - version: "1.3.0", + "ACP agent powered by Zhipu AI's GLM Coding Plan models (glm-5.3, glm-5.3-flash, glm-5-turbo, glm-4.7). Supports streaming, tool calls, mid-session model switching, image input via Z.AI Coding Plan Vision MCP, and session load/fork/resume with on-disk persistence.", + version: "1.15.0", iconId: "glm-acp-agent", installLink: "https://github.com/stefandevo/glm-acp-agent", - command: ["npx", "-y", "glm-acp-agent@1.3.0"], + command: ["npx", "-y", "glm-acp-agent@1.15.0"], }, { id: "goose", @@ -289,20 +289,20 @@ const CATALOG_DATA = [ id: "minimax-code", title: "MiniMax Code", description: "MiniMax's coding agent for the terminal", - version: "0.1.2", + version: "0.6.13", iconId: "minimax-code", installLink: "https://agent.minimax.io", - command: ["npx", "-y", "@minimax-ai/code@0.1.2", "acp"], + command: ["npx", "-y", "@minimax-ai/code@0.6.13", "acp"], }, { id: "minion-code", title: "Minion Code", description: "An enhanced AI code assistant built on the Minion framework with rich development tools", - version: "0.1.44", + version: "0.1.45", iconId: "minion-code", installLink: "https://github.com/femto/minion-code", - command: ["uvx", "--from", "minion-code==0.1.44", "minion-code", "acp"], + command: ["uvx", "--from", "minion-code==0.1.45", "minion-code", "acp"], }, { id: "mistral-vibe", @@ -317,10 +317,10 @@ const CATALOG_DATA = [ id: "nova", title: "Nova", description: "Nova by Compass AI - a fully-fledged software engineer at your command", - version: "1.1.29", + version: "1.1.59", iconId: "nova", installLink: "https://www.compassap.ai/portfolio/nova.html", - command: ["npx", "-y", "@compass-ai/nova@1.1.29", "acp"], + command: ["npx", "-y", "@compass-ai/nova@1.1.59", "acp"], }, { id: "poolside", @@ -335,19 +335,19 @@ const CATALOG_DATA = [ id: "qoder", title: "Qoder CLI", description: "AI coding assistant with agentic capabilities", - version: "1.1.4", + version: "1.1.78", iconId: "qoder", installLink: "https://qoder.com", - command: ["npx", "-y", "@qoder-ai/qodercli@1.1.4", "--acp"], + command: ["npx", "-y", "@qoder-ai/qodercli@1.1.78", "--acp"], }, { id: "qwen-code", title: "Qwen Code", description: "Alibaba's Qwen coding assistant", - version: "0.20.1", + version: "0.26.0", iconId: "qwen-code", installLink: "https://qwenlm.github.io/qwen-code-docs/en/users/overview", - command: ["npx", "-y", "@qwen-code/qwen-code@0.20.1", "--acp", "--experimental-skills"], + command: ["npx", "-y", "@qwen-code/qwen-code@0.26.0", "--acp", "--experimental-skills"], }, { id: "sigit", diff --git a/packages/app/src/hooks/use-acp-provider-catalog.test.ts b/packages/app/src/hooks/use-acp-provider-catalog.test.ts index c5fd59d53e..a30b27ce8f 100644 --- a/packages/app/src/hooks/use-acp-provider-catalog.test.ts +++ b/packages/app/src/hooks/use-acp-provider-catalog.test.ts @@ -61,8 +61,8 @@ describe("ACP provider catalog", () => { it("offers MiniMax Code through its pinned public ACP package", () => { expect(findProvider("minimax-code")).toMatchObject({ title: "MiniMax Code", - version: "0.1.2", - command: ["npx", "-y", "@minimax-ai/code@0.1.2", "acp"], + version: "0.6.13", + command: ["npx", "-y", "@minimax-ai/code@0.6.13", "acp"], }); expect(findProvider("minimax-code").iconSvg).toContain("