The legacy application - its src, tests, landing site, promo assets, docs, release tooling, CI workflows, and root configs - leaves the tree; it stays reachable in history. Everything under AgentCompany-New moves up unchanged: same package name, so the production userData/database path is untouched, and e2e/build scripts already resolved paths relative to the project. The developer cred.txt stays gitignored at its new location. Full verify:ci passes from the new root.
173 lines
5.9 KiB
TypeScript
173 lines
5.9 KiB
TypeScript
import { PROVIDER_AUTH_TYPE, type ProviderCatalogEntry } from "./domain";
|
||
import { listProviderModels } from "./provider-models";
|
||
|
||
const RAW_CATALOG: Omit<ProviderCatalogEntry, "models" | "supportsLiveModels">[] = [
|
||
{
|
||
key: "openai",
|
||
label: "OpenAI",
|
||
authType: PROVIDER_AUTH_TYPE.API_KEY,
|
||
defaultModel: "gpt-5.4",
|
||
capabilityTags: ["responses", "tools", "background"],
|
||
signInUrl: null,
|
||
credentialHelp: "Generate an API key at platform.openai.com → API keys.",
|
||
},
|
||
{
|
||
key: "anthropic",
|
||
label: "Anthropic",
|
||
authType: PROVIDER_AUTH_TYPE.API_KEY,
|
||
defaultModel: "claude-sonnet-4-5",
|
||
capabilityTags: ["messages", "tool-use", "token-bucket"],
|
||
signInUrl: null,
|
||
credentialHelp: "Generate an API key at console.anthropic.com → API keys.",
|
||
},
|
||
{
|
||
key: "claude-pro",
|
||
label: "Claude Pro/Max",
|
||
authType: PROVIDER_AUTH_TYPE.OAUTH_PKCE,
|
||
defaultModel: "claude-sonnet-4-5",
|
||
capabilityTags: ["account", "subscription"],
|
||
signInUrl: "https://claude.ai/login",
|
||
credentialHelp: "Sign in with your Claude Pro or Max account in the browser; AgentCompany finishes the handshake.",
|
||
},
|
||
{
|
||
key: "xai",
|
||
label: "xAI Grok",
|
||
authType: PROVIDER_AUTH_TYPE.API_KEY,
|
||
defaultModel: "grok-4",
|
||
capabilityTags: ["chat", "reasoning"],
|
||
signInUrl: null,
|
||
credentialHelp: "Generate an API key at console.x.ai → API keys.",
|
||
},
|
||
{
|
||
key: "groq",
|
||
label: "Groq",
|
||
authType: PROVIDER_AUTH_TYPE.API_KEY,
|
||
defaultModel: "groq/compound",
|
||
capabilityTags: ["inference", "low-latency"],
|
||
signInUrl: null,
|
||
credentialHelp: "Generate an API key at console.groq.com → API keys.",
|
||
},
|
||
{
|
||
key: "mistral",
|
||
label: "Mistral",
|
||
authType: PROVIDER_AUTH_TYPE.API_KEY,
|
||
defaultModel: "mistral-large-latest",
|
||
capabilityTags: ["chat", "reasoning"],
|
||
signInUrl: null,
|
||
credentialHelp: "Generate an API key at console.mistral.ai → API keys.",
|
||
},
|
||
{
|
||
key: "cerebras",
|
||
label: "Cerebras",
|
||
authType: PROVIDER_AUTH_TYPE.API_KEY,
|
||
defaultModel: "qwen-3-235b-a22b-instruct-2507",
|
||
capabilityTags: ["inference", "fast"],
|
||
signInUrl: null,
|
||
credentialHelp: "Generate an API key at cloud.cerebras.ai → API keys.",
|
||
},
|
||
{
|
||
key: "openrouter",
|
||
label: "OpenRouter",
|
||
authType: PROVIDER_AUTH_TYPE.API_KEY,
|
||
defaultModel: "anthropic/claude-sonnet-4.5",
|
||
capabilityTags: ["router", "multi-model"],
|
||
signInUrl: null,
|
||
credentialHelp: "Generate an API key at openrouter.ai → Keys.",
|
||
},
|
||
{
|
||
key: "github-copilot",
|
||
label: "GitHub Copilot",
|
||
authType: PROVIDER_AUTH_TYPE.OAUTH_PKCE,
|
||
defaultModel: "claude-opus-4-5",
|
||
capabilityTags: ["account", "coding"],
|
||
signInUrl: "https://github.com/login/device",
|
||
credentialHelp: "Sign in with the GitHub device code shown here — no token to copy.",
|
||
},
|
||
{
|
||
key: "google-antigravity",
|
||
label: "Google Antigravity",
|
||
authType: PROVIDER_AUTH_TYPE.OAUTH_PKCE,
|
||
defaultModel: "claude-sonnet-4-5",
|
||
capabilityTags: ["account", "coding"],
|
||
signInUrl: "https://antigravity.google/",
|
||
credentialHelp: "Sign in with your Google account in the browser; AgentCompany finishes the handshake.",
|
||
},
|
||
{
|
||
key: "gpt-account",
|
||
label: "GPT account",
|
||
authType: PROVIDER_AUTH_TYPE.ACCOUNT_SUBSCRIPTION,
|
||
defaultModel: "gpt-5.3-codex",
|
||
capabilityTags: ["codex", "subscription"],
|
||
signInUrl: "https://chatgpt.com/codex",
|
||
credentialHelp: "Sign in to ChatGPT Plus/Pro in the browser; AgentCompany finishes the handshake.",
|
||
},
|
||
{
|
||
key: "azure-openai",
|
||
label: "Azure OpenAI",
|
||
authType: PROVIDER_AUTH_TYPE.CLOUD,
|
||
defaultModel: "gpt-5.4",
|
||
capabilityTags: ["enterprise", "regional"],
|
||
signInUrl: null,
|
||
credentialHelp: "Set base URL (e.g. https://<resource>.openai.azure.com), deployment name, and the api-key from Azure portal.",
|
||
},
|
||
{
|
||
key: "aws-bedrock",
|
||
label: "AWS Bedrock",
|
||
authType: PROVIDER_AUTH_TYPE.CLOUD,
|
||
defaultModel: "anthropic.claude-sonnet-4-5",
|
||
capabilityTags: ["enterprise", "multi-model"],
|
||
signInUrl: null,
|
||
credentialHelp: "Provide AWS region plus an access key + secret access key with bedrock:InvokeModel permission.",
|
||
},
|
||
{
|
||
key: "vertex-ai",
|
||
label: "Vertex AI",
|
||
authType: PROVIDER_AUTH_TYPE.CLOUD,
|
||
defaultModel: "gemini-2.5-pro",
|
||
capabilityTags: ["enterprise", "regional"],
|
||
signInUrl: null,
|
||
credentialHelp: "Provide GCP project id, region, and a service-account JSON key with aiplatform.user role.",
|
||
},
|
||
{
|
||
key: "custom-openai",
|
||
label: "Custom OpenAI-compatible",
|
||
authType: PROVIDER_AUTH_TYPE.CLOUD,
|
||
defaultModel: null,
|
||
capabilityTags: ["custom", "openai-compatible"],
|
||
signInUrl: null,
|
||
credentialHelp: "Set the base URL (ending in /v1) and an API key for any OpenAI Chat Completions–compatible endpoint, then enter the model id.",
|
||
customEndpoint: "openai",
|
||
},
|
||
{
|
||
key: "custom-anthropic",
|
||
label: "Custom Anthropic-compatible",
|
||
authType: PROVIDER_AUTH_TYPE.CLOUD,
|
||
defaultModel: null,
|
||
capabilityTags: ["custom", "anthropic-compatible"],
|
||
signInUrl: null,
|
||
credentialHelp: "Set the base URL and an API key for any Anthropic Messages–compatible endpoint, then enter the model id.",
|
||
customEndpoint: "anthropic",
|
||
},
|
||
];
|
||
|
||
// Providers with no enumerable models endpoint: the Codex subscription, the
|
||
// browser-token / cloud connectors, and user-configured custom endpoints whose
|
||
// model id is entered by hand. The UI offers a fixed dropdown (when a curated
|
||
// list exists) or a free-text model id instead of a live fetch.
|
||
const CURATED_MODEL_PROVIDERS = new Set([
|
||
"github-copilot",
|
||
"google-antigravity",
|
||
"gpt-account",
|
||
"azure-openai",
|
||
"aws-bedrock",
|
||
"vertex-ai",
|
||
"custom-openai",
|
||
"custom-anthropic",
|
||
]);
|
||
|
||
export const PROVIDER_CATALOG: ProviderCatalogEntry[] = RAW_CATALOG.map((entry) => ({
|
||
...entry,
|
||
models: listProviderModels(entry.key),
|
||
supportsLiveModels: !CURATED_MODEL_PROVIDERS.has(entry.key),
|
||
}));
|