v2.3 Phase 5. Provider management lives in Settings → Providers: lists every registered provider with a status badge, enable/disable toggle (sends the full override so a custom ACP entry's command survives the wholesale-replace PATCH), per-provider refresh, and a plaintext diagnostic. The composer provider picker now filters to enabled && (status==='ready' || 'loading') — disabled/unavailable providers leave the picker and are managed only in settings; native boocode always shows. Adds a curated ACP catalog + AddProviderModal (PATCH config then subset refresh; the modal caps to the viewport with a single overscroll-contain scroll region). Loading state uses a capped client poll (no WS frame). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
import type { ProviderConfigPatch } from '@/api/types';
|
|
|
|
/**
|
|
* v2.3 Phase 5 (design.md §7.3) — a SMALL curated catalog of ACP coding agents
|
|
* the user might register. We deliberately do NOT port Paseo's 30+ entry list.
|
|
*
|
|
* Non-goal: we never install anything. Each entry is a manual-install hint
|
|
* (`installUrl` / `installCmd`) plus the config `command` that gets written into
|
|
* `/data/coder-providers.json`. The user installs the CLI themselves; until the
|
|
* binary is on PATH the provider shows as "Not installed". Commands are
|
|
* editable after adding — versions are aliased/untrimmed on purpose; pin on your
|
|
* own host once verified.
|
|
*/
|
|
export interface AcpCatalogEntry {
|
|
id: string;
|
|
label: string;
|
|
description: string;
|
|
/** Config command written verbatim into providers[id].command: [binary, ...args]. */
|
|
command: [string, ...string[]];
|
|
/** Where to install the CLI manually — we LINK, never install. */
|
|
installUrl: string;
|
|
/** Optional suggested install command, shown as a copyable hint. */
|
|
installCmd?: string;
|
|
}
|
|
|
|
export const ACP_PROVIDER_CATALOG: AcpCatalogEntry[] = [
|
|
{
|
|
id: 'amp-acp',
|
|
label: 'Amp',
|
|
description: 'Sourcegraph Amp — agentic coding CLI with an ACP bridge.',
|
|
command: ['amp-acp'],
|
|
installUrl: 'https://ampcode.com/',
|
|
installCmd: 'npm i -g @sourcegraph/amp',
|
|
},
|
|
{
|
|
id: 'gemini',
|
|
label: 'Gemini CLI',
|
|
description: 'Google Gemini CLI in ACP mode (--experimental-acp).',
|
|
command: ['gemini', '--experimental-acp'],
|
|
installUrl: 'https://github.com/google-gemini/gemini-cli',
|
|
installCmd: 'npm i -g @google/gemini-cli',
|
|
},
|
|
{
|
|
id: 'cline',
|
|
label: 'Cline',
|
|
description: 'Cline coding agent over ACP (run via npx).',
|
|
command: ['npx', '-y', 'cline', '--acp'],
|
|
installUrl: 'https://cline.bot/',
|
|
},
|
|
{
|
|
id: 'claude-code-acp',
|
|
label: 'Claude Code (ACP)',
|
|
description: "Zed's ACP adapter for Claude Code — distinct from the built-in PTY claude provider.",
|
|
command: ['npx', '-y', '@zed-industries/claude-code-acp'],
|
|
installUrl: 'https://github.com/zed-industries/claude-code-acp',
|
|
},
|
|
{
|
|
id: 'pi-acp',
|
|
label: 'Pi',
|
|
description: 'Example custom ACP entry — build the binary from source, then edit the command.',
|
|
command: ['pi-acp'],
|
|
installUrl: 'https://agentclientprotocol.com/',
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Build the PATCH body that registers a catalog entry: a single-id partial
|
|
* providers map with the custom-ACP override (extends:'acp' + label + command),
|
|
* enabled. Sent to PATCH /api/providers/config (then refreshProviders([id])).
|
|
*/
|
|
export function buildAcpProviderConfigPatch(entry: AcpCatalogEntry): ProviderConfigPatch {
|
|
return {
|
|
providers: {
|
|
[entry.id]: {
|
|
extends: 'acp',
|
|
label: entry.label,
|
|
description: entry.description,
|
|
command: entry.command,
|
|
enabled: true,
|
|
},
|
|
},
|
|
};
|
|
}
|