From 3bf61fe32e5bc9497bb8f2d2d47b8f95fd6f78df Mon Sep 17 00:00:00 2001 From: Rhuan Barreto Date: Mon, 23 Mar 2026 02:18:14 +0100 Subject: [PATCH 1/2] fix: use marketplace add + install pattern for copilot CLI plugin The copilot CLI `plugin install ` command expects plugin.json at the repo root, but our repo is a marketplace (marketplace.json at root, plugins nested under plugins/archgate/). This caused "No plugin.json found" errors. Fix both the auto-install path and manual fallback to: 1. Use archgate-vscode.git URL (.github/plugin/ format copilot expects) 2. Run two-step marketplace add + install (matching the Claude Code pattern) Co-Authored-By: Claude Opus 4.6 (1M context) --- src/commands/plugin/install.ts | 7 +++++-- src/helpers/plugin-install.ts | 20 +++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/commands/plugin/install.ts b/src/commands/plugin/install.ts index d7a14a03..0719d17f 100644 --- a/src/commands/plugin/install.ts +++ b/src/commands/plugin/install.ts @@ -65,12 +65,15 @@ export function registerPluginInstallCommand(plugin: Command) { await installCopilotPlugin(); logInfo(`Archgate plugin installed for ${label}.`); } else { - const url = buildMarketplaceUrl(); + const url = buildVscodeMarketplaceUrl(); logWarn( "Copilot CLI not found. To install the plugin manually, run:" ); console.log( - ` ${styleText("bold", "copilot plugin install")} ${url}` + ` ${styleText("bold", "copilot plugin marketplace add")} ${url}` + ); + console.log( + ` ${styleText("bold", "copilot plugin install")} archgate@archgate` ); } break; diff --git a/src/helpers/plugin-install.ts b/src/helpers/plugin-install.ts index b4df6d3c..d97d9b2a 100644 --- a/src/helpers/plugin-install.ts +++ b/src/helpers/plugin-install.ts @@ -164,16 +164,30 @@ export async function isCopilotCliAvailable(): Promise { * Install the archgate plugin via the `copilot` CLI. * * Runs: - * copilot plugin install + * copilot plugin marketplace add + * copilot plugin install archgate@archgate * * Throws on failure so the caller can fall back to manual instructions. */ export async function installCopilotPlugin(): Promise { - const url = buildMarketplaceUrl(); + const url = buildVscodeMarketplaceUrl(); const cmd = (await resolveCommand("copilot")) ?? "copilot"; + logDebug("Adding archgate marketplace to copilot CLI"); + const addResult = await run([cmd, "plugin", "marketplace", "add", url]); + if (addResult.exitCode !== 0) { + throw new Error( + `copilot plugin marketplace add failed (exit ${addResult.exitCode})` + ); + } + logDebug("Installing archgate plugin via copilot CLI"); - const installResult = await run([cmd, "plugin", "install", url]); + const installResult = await run([ + cmd, + "plugin", + "install", + "archgate@archgate", + ]); if (installResult.exitCode !== 0) { throw new Error( `copilot plugin install failed (exit ${installResult.exitCode})` From dd829f31112a81082cddb288104bfd66f10dbe7c Mon Sep 17 00:00:00 2001 From: Rhuan Barreto Date: Mon, 23 Mar 2026 03:09:04 +0100 Subject: [PATCH 2/2] fix: use two-segment URL path for VS Code marketplace VS Code's normalizeGitRepoPath requires at least two path segments (owner/repo) in marketplace URLs. The previous single-segment URL (/archgate-vscode.git) was silently rejected, causing the plugin to never appear in the Extensions tab. Change URL from: https://plugins.archgate.dev/archgate-vscode.git To: https://plugins.archgate.dev/archgate/vscode.git Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/public/llms-full.txt | 4 ++-- docs/src/content/docs/guides/vscode-plugin.mdx | 4 ++-- docs/src/content/docs/pt-br/guides/vscode-plugin.mdx | 4 ++-- src/helpers/plugin-install.ts | 2 +- tests/helpers/plugin-install.test.ts | 10 +++++----- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/public/llms-full.txt b/docs/public/llms-full.txt index 3d166931..b5daf3bf 100644 --- a/docs/public/llms-full.txt +++ b/docs/public/llms-full.txt @@ -1826,7 +1826,7 @@ The Archgate VS Code plugin gives AI agents working in [VS Code](https://code.vi ## How it works -VS Code supports **agent plugins** installed from git-based marketplaces. The Archgate plugin is served from a git repository at `plugins.archgate.dev/archgate-vscode.git`. When you add this marketplace to your VS Code user settings, VS Code discovers and installs the plugin automatically. +VS Code supports **agent plugins** installed from git-based marketplaces. The Archgate plugin is served from a git repository at `plugins.archgate.dev/archgate/vscode.git`. When you add this marketplace to your VS Code user settings, VS Code discovers and installs the plugin automatically. The plugin is served in VS Code Copilot's native `.github/plugin/` manifest format, separate from the Claude Code `.claude-plugin/` format. @@ -1894,7 +1894,7 @@ The user-level marketplace setting (added to your `settings.json`): ```json { "chat.plugins.marketplaces": [ - "https://:@plugins.archgate.dev/archgate-vscode.git" + "https://:@plugins.archgate.dev/archgate/vscode.git" ] } ``` diff --git a/docs/src/content/docs/guides/vscode-plugin.mdx b/docs/src/content/docs/guides/vscode-plugin.mdx index 77ce062a..09cd038b 100644 --- a/docs/src/content/docs/guides/vscode-plugin.mdx +++ b/docs/src/content/docs/guides/vscode-plugin.mdx @@ -7,7 +7,7 @@ The Archgate VS Code plugin gives AI agents working in [VS Code](https://code.vi ## How it works -VS Code supports **agent plugins** installed from git-based marketplaces. The Archgate plugin is served from a git repository at `plugins.archgate.dev/archgate-vscode.git`. When you add this marketplace to your VS Code user settings, VS Code discovers and installs the plugin automatically. +VS Code supports **agent plugins** installed from git-based marketplaces. The Archgate plugin is served from a git repository at `plugins.archgate.dev/archgate/vscode.git`. When you add this marketplace to your VS Code user settings, VS Code discovers and installs the plugin automatically. The plugin is served in VS Code Copilot's native `.github/plugin/` manifest format, separate from the Claude Code `.claude-plugin/` format. @@ -79,7 +79,7 @@ The user-level marketplace setting (added to your `settings.json`): ```json { "chat.plugins.marketplaces": [ - "https://:@plugins.archgate.dev/archgate-vscode.git" + "https://:@plugins.archgate.dev/archgate/vscode.git" ] } ``` diff --git a/docs/src/content/docs/pt-br/guides/vscode-plugin.mdx b/docs/src/content/docs/pt-br/guides/vscode-plugin.mdx index 3fffa101..ac56b3fc 100644 --- a/docs/src/content/docs/pt-br/guides/vscode-plugin.mdx +++ b/docs/src/content/docs/pt-br/guides/vscode-plugin.mdx @@ -7,7 +7,7 @@ O plugin Archgate para VS Code oferece aos agentes de IA que trabalham no [VS Co ## Como funciona -O VS Code suporta **plugins de agente** instalados a partir de marketplaces baseados em git. O plugin Archgate é servido a partir de um repositório git em `plugins.archgate.dev/archgate-vscode.git`. Quando você adiciona esse marketplace às suas configurações de usuário do VS Code, o VS Code descobre e instala o plugin automaticamente. +O VS Code suporta **plugins de agente** instalados a partir de marketplaces baseados em git. O plugin Archgate é servido a partir de um repositório git em `plugins.archgate.dev/archgate/vscode.git`. Quando você adiciona esse marketplace às suas configurações de usuário do VS Code, o VS Code descobre e instala o plugin automaticamente. O plugin é servido no formato nativo `.github/plugin/` do VS Code Copilot, separado do formato `.claude-plugin/` do Claude Code. @@ -79,7 +79,7 @@ A configuração do marketplace no nível de usuário (adicionada ao seu `settin ```json { "chat.plugins.marketplaces": [ - "https://:@plugins.archgate.dev/archgate-vscode.git" + "https://:@plugins.archgate.dev/archgate/vscode.git" ] } ``` diff --git a/src/helpers/plugin-install.ts b/src/helpers/plugin-install.ts index d97d9b2a..66f54514 100644 --- a/src/helpers/plugin-install.ts +++ b/src/helpers/plugin-install.ts @@ -19,7 +19,7 @@ const PLUGINS_API = "https://plugins.archgate.dev"; const MARKETPLACE_URL = "https://plugins.archgate.dev/archgate.git"; /** Base VS Code marketplace URL — credentials are provided by the git credential manager. */ const VSCODE_MARKETPLACE_URL = - "https://plugins.archgate.dev/archgate-vscode.git"; + "https://plugins.archgate.dev/archgate/vscode.git"; /** * Run a command using Bun.spawn (cross-platform, no shell). diff --git a/tests/helpers/plugin-install.test.ts b/tests/helpers/plugin-install.test.ts index 02405863..24eb8652 100644 --- a/tests/helpers/plugin-install.test.ts +++ b/tests/helpers/plugin-install.test.ts @@ -21,9 +21,9 @@ describe("plugin-install", () => { }); describe("buildVscodeMarketplaceUrl", () => { - test("returns bare URL pointing to archgate-vscode.git", () => { + test("returns bare URL pointing to archgate/vscode.git", () => { const url = buildVscodeMarketplaceUrl(); - expect(url).toBe("https://plugins.archgate.dev/archgate-vscode.git"); + expect(url).toBe("https://plugins.archgate.dev/archgate/vscode.git"); }); test("does not contain @ (no embedded credentials)", () => { @@ -31,11 +31,11 @@ describe("plugin-install", () => { expect(url).not.toContain("@"); }); - test("uses archgate-vscode.git repo (not archgate.git)", () => { + test("uses archgate/vscode.git path (not archgate.git)", () => { const vscodeUrl = buildVscodeMarketplaceUrl(); const claudeUrl = buildMarketplaceUrl(); - expect(vscodeUrl).toContain("archgate-vscode.git"); - expect(claudeUrl).not.toContain("archgate-vscode.git"); + expect(vscodeUrl).toContain("archgate/vscode.git"); + expect(claudeUrl).not.toContain("archgate/vscode.git"); expect(claudeUrl).toContain("archgate.git"); }); });