From a54cc6dd11f73864fc78100a9587010274ba1e10 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 24 Oct 2026 12:36:10 +0700 Subject: [PATCH] chore(acp): refresh pinned provider packages (#7781) * chore(acp): refresh pinned provider packages Co-authored-by: Kim Co-authored-by: Louis Deconinck * test(app): capture the visible composer across retained tabs The settings regression sampler selected the first mounted composer even when it belonged to an inactive retained tab. Mount both tabs before capturing so the test consistently covers that case, and sample the visible composer. --------- Co-authored-by: Kim Co-authored-by: Louis Deconinck --- .../settings-toggle-tab-regression.spec.ts | 17 +++++- packages/app/src/data/acp-provider-catalog.ts | 58 +++++++++---------- .../hooks/use-acp-provider-catalog.test.ts | 4 +- 3 files changed, 47 insertions(+), 32 deletions(-) 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("