Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions docs/reference/PROVIDER_REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ lastUpdated: 2026-09-18
> Regenerate with: `npm run gen:provider-reference`
> **Last generated:** 2026-09-18

Total providers: **359**. See category breakdown below.
Total providers: **360**. See category breakdown below.

## Categories

Expand Down Expand Up @@ -49,7 +49,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each
| `veoaifree-web` | `veo-free` | Veo AI Free | No-auth, video | [link](https://veoaifree.com) | No auth required. Rate limited to 6 requests/hour per IP. | — |
| `zcode` | `zc` | ZCode (GLM Coding Plan) | No-auth | [link](https://zcode.z.ai) | No API key stored by OmniRoute. The local ZCode app-server uses the existing builtin:zai-coding-plan login. | — |

## OAuth Providers (24)
## OAuth Providers (25)

| ID | Alias | Name | Tags | Website | Notes |
|----|-------|------|------|---------|-------|
Expand All @@ -71,6 +71,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each
| `kilocode` | `kc` | Kilo Code | OAuth | — | — |
| `kimi-coding` | `kmc` | Kimi Code CLI | OAuth | [link](https://www.kimi.com/code?aff=omniroute) | Sign in with the same Kimi account used by Kimi Code CLI. OmniRoute uses the CLI OAuth flow and Kimi Coding Plan endpoints. |
| `kiro` | `kr` | Kiro AI | OAuth | — | Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use. |
| `muse-code-oauth` | `mco` | Muse Code OAuth (Meta) | OAuth | [link](https://api.meta.ai) | Sign in with Meta to use api.meta.ai Muse Spark models. ⚠️ Routing a personal Muse Code subscription through a third-party gateway may violate Meta's terms and risk account suspension — use at your own risk. Separate from the META_API_KEY API-key preset. |
| `openference` | `of` | Openference | OAuth | [link](https://openference.com) | Sign in with your Openference account to route requests through api.openference.com. Includes free-tier access to Qwen3.8 27b and Llama 3.2 3B — see openference.com/pricing for current plan terms. |
| `qoder` | `if` | Qoder | OAuth | — | — |
| `trae` | `tr` | Trae | OAuth | [link](https://trae.ai) | Trae is an AI-native IDE by ByteDance (SOLO remote agent). Authorize via trae.ai in the popup, or sign in at solo.trae.ai and paste the Cloud-IDE-JWT (sent as 'Authorization: Cloud-IDE-JWT <token>', ~14-day lifetime) as the access token; web_id/biz_user_id/user_unique_id/scope/tenant/region propagate via providerSpecificData. No headless refresh for pasted tokens — re-paste on expiry. |
Expand Down Expand Up @@ -258,7 +259,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each
| `monsterapi` | `monster` | MonsterAPI | API key | [link](https://monsterapi.ai) | ⚠️ **DEPRECATED.** Monster API shuttered operations on 2026-06-30. Use alternative OpenAI-compatible providers. |
| `moonshot` | `moonshot` | Kimi | API key | [link](https://platform.kimi.ai?aff=omniroute) | — |
| `morph` | `morph` | Morph | API key | [link](https://morphllm.com) | Free tier: 250K credits/month, $0 |
| `muse-code` | `mc` | Muse Code (Meta) | API key | [link](https://github.com/meta-llama/llama-stack) | Use your META_API_KEY env var as a Bearer token. Muse Code CLI uses the OpenAI Responses API wire format (POST /responses). |
| `muse-code` | `mc` | Muse Code (Meta) | API key | [link](https://github.com/meta-llama/llama-stack) | Use your META_API_KEY env var as a Bearer token, or sign in with Meta. ⚠️ Routing a personal Muse Code subscription through a third-party gateway may violate Meta's terms and risk account suspension — use at your own risk. Muse Code CLI uses the OpenAI Responses API wire format (POST /responses). |
| `naga-ac` | `naga` | Naga.ac | API key, aggregator | [link](https://naga.ac) | Get API key at naga.ac — Google/GitHub/Discord signup available. |
| `naga-ai` | `naga-ai` | Naga AI | API key, aggregator | [link](https://naga.ac) | Models marked :free are publicly listed, but no numeric quota is confirmed. Naga's policy warns that free-tier prompts and outputs may be collected or used for training. |
| `nanogpt` | `nanogpt` | NanoGPT | API key | [link](https://nano-gpt.com) | — |
Expand Down Expand Up @@ -447,7 +448,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each

- Catalog: [`src/shared/constants/providers.ts`](../../src/shared/constants/providers.ts)
- Registry (per-model details): [`open-sse/config/providerRegistry.ts`](../../open-sse/config/providerRegistry.ts)
- Executors: [`open-sse/executors/`](../../open-sse/executors/) (114 implementations)
- Executors: [`open-sse/executors/`](../../open-sse/executors/) (121 implementations)
- Translators: [`open-sse/translator/`](../../open-sse/translator/)

## See Also
Expand Down
2 changes: 2 additions & 0 deletions open-sse/config/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ import { hcnsecProvider } from "./registry/hcnsec/index.ts";
import { promptqlProvider } from "./registry/promptql/index.ts";
import { hyperagentProvider } from "./registry/hyperagent/index.ts";
import { muse_codeProvider } from "./registry/muse-code/index.ts";
import { muse_code_oauthProvider } from "./registry/muse/code/index.ts";
import { naga_acProvider } from "./registry/naga-ac/index.ts";
import { chatanywhereProvider } from "./registry/chatanywhere/index.ts";
import { zyloApiProvider } from "./registry/zylo-api/index.ts";
Expand Down Expand Up @@ -519,6 +520,7 @@ export const REGISTRY: Record<string, RegistryEntry> = {
promptql: promptqlProvider,
hyperagent: hyperagentProvider,
"muse-code": muse_codeProvider,
"muse-code-oauth": muse_code_oauthProvider,
"zylo-api": zyloApiProvider,
unorouter: unorouterProvider,
"naga-ac": naga_acProvider,
Expand Down
97 changes: 37 additions & 60 deletions open-sse/config/providers/registry/muse-code/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,106 +2,83 @@ import type { RegistryEntry } from "../../shared.ts";
import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts";

/**
* Muse Code CLI — Meta's agentic coding tool.
* Muse Code CLI — Meta's agentic coding tool (API-key / pay-as-you-go path).
*
* Wire format: OpenAI Responses API (POST /responses).
* Auth: Bearer token from META_API_KEY env var.
*
* The `default` executor returns `config.baseUrl` verbatim and does not consult
* `responsesBaseUrl`, so `baseUrl` points at the Responses endpoint itself —
* every model below is tagged `targetFormat: "openai-responses"`. This mirrors
* the responses-only providers `deepseek` and `perplexity-agent`.
*
* Auth: Bearer API key created at https://dev.meta.ai/ → API keys tab
* (https://dev.meta.ai/docs/authentication).
* Reasoning efforts: xhigh/ultra -> high (handled generically).
*
* @see https://github.com/joymadhu49/muse-openrouter-shim
* @see https://dev.meta.ai/docs/authentication
*/
export const muse_codeProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({
id: "muse-code",
alias: "mc",
passthroughModels: true,
baseUrl: "https://api.meta.ai/v1/responses",
reasoningTransport: "opaque",
defaultContextLength: 200000,
defaultContextLength: 1048576,
models: [
{
id: "llama-4-maverick",
name: "Llama 4 Maverick",
id: "muse-spark-1.3",
name: "Muse Spark 1.3",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsXHighEffort: true,
toolCalling: true,
supportsVision: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs", "logitBias"],
},
{
id: "llama-4-scout",
name: "Llama 4 Scout",
id: "muse-spark-1.2",
name: "Muse Spark 1.2",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsXHighEffort: true,
toolCalling: true,
supportsVision: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs", "logitBias"],
},
{
id: "llama-3.3-70b",
name: "Llama 3.3 70B",
contextLength: 131072,
maxOutputTokens: 32768,
supportsReasoning: false,
toolCalling: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs"],
},
{
id: "llama-3.1-405b",
name: "Llama 3.1 405B",
contextLength: 131072,
maxOutputTokens: 32768,
supportsReasoning: false,
toolCalling: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs"],
},
{
id: "llama-3.1-70b",
name: "Llama 3.1 70B",
contextLength: 131072,
maxOutputTokens: 32768,
supportsReasoning: false,
toolCalling: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs"],
},
{
id: "llama-3.1-8b",
name: "Llama 3.1 8B",
contextLength: 131072,
maxOutputTokens: 32768,
supportsReasoning: false,
id: "muse-spark-1.1",
name: "Muse Spark 1.1",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsXHighEffort: true,
toolCalling: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs"],
unsupportedParams: ["logprobs", "topLogprobs", "logitBias"],
},
{
id: "llama-3.2-90b-vision",
name: "Llama 3.2 90B Vision",
contextLength: 131072,
maxOutputTokens: 32768,
supportsReasoning: false,
id: "muse-spark-1.3-contributor",
name: "Muse Spark 1.3 Contributor",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsXHighEffort: true,
toolCalling: true,
supportsVision: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs"],
unsupportedParams: ["logprobs", "topLogprobs", "logitBias"],
},
{
id: "llama-3.2-11b-vision",
name: "Llama 3.2 11B Vision",
contextLength: 131072,
maxOutputTokens: 32768,
supportsReasoning: false,
id: "muse-spark-1.2-contributor",
name: "Muse Spark 1.2 Contributor",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsXHighEffort: true,
toolCalling: true,
supportsVision: true,
targetFormat: "openai-responses",
unsupportedParams: ["logprobs", "topLogprobs"],
unsupportedParams: ["logprobs", "topLogprobs", "logitBias"],
},
],
});
76 changes: 76 additions & 0 deletions open-sse/config/providers/registry/muse/code/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import type { RegistryEntry, RegistryModel } from "../../../shared.ts";
import { resolvePublicCred } from "../../../shared.ts";

/**
* Meta Muse Code OAuth catalog.
*
* Muse Spark models are served over the OpenAI Responses API
* (`targetFormat: "openai-responses"`), same as the API-key `muse-code`
* preset. Window/max-output mirror the published OpenCode catalog
* (1048576 / 131072).
*/
export const MUSE_CODE_MODELS: RegistryModel[] = [
{
id: "muse-spark-1.1",
name: "Muse Spark 1.1",
supportsReasoning: true,
targetFormat: "openai-responses",
contextLength: 1048576,
maxOutputTokens: 131072,
},
{
id: "muse-spark-1.2",
name: "Muse Spark 1.2",
supportsReasoning: true,
targetFormat: "openai-responses",
contextLength: 1048576,
maxOutputTokens: 131072,
},
{
id: "muse-spark-1.2-contributor",
name: "Muse Spark 1.2 Contributor",
supportsReasoning: true,
targetFormat: "openai-responses",
contextLength: 1048576,
maxOutputTokens: 131072,
},
{
id: "muse-spark-1.3",
name: "Muse Spark 1.3",
supportsReasoning: true,
targetFormat: "openai-responses",
contextLength: 1048576,
maxOutputTokens: 131072,
},
{
id: "muse-spark-1.3-contributor",
name: "Muse Spark 1.3 Contributor",
supportsReasoning: true,
targetFormat: "openai-responses",
contextLength: 1048576,
maxOutputTokens: 131072,
},
];

export const MUSE_CODE_SHARED = {
format: "openai",
executor: "default",
baseUrl: "https://api.meta.ai/v1/responses",
authHeader: "bearer",
defaultContextLength: 1048576,
models: MUSE_CODE_MODELS,
};

export const muse_code_oauthProvider: RegistryEntry = {
id: "muse-code-oauth",
alias: "mco",
...MUSE_CODE_SHARED,
authType: "oauth",
oauth: {
clientIdEnv: "MUSE_CODE_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("muse_id"),
tokenUrl: "https://auth.meta.com/oidc/device/token/",
refreshUrl: "https://auth.meta.com/oidc/device/token/",
authUrl: "https://auth.meta.com/oidc/device/authorization/",
},
};
8 changes: 8 additions & 0 deletions open-sse/services/tokenRefresh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import { refreshKiroToken } from "./tokenRefresh/providers/kiro.ts";
import { refreshQoderToken } from "./tokenRefresh/providers/qoder.ts";
import { refreshGitHubToken } from "./tokenRefresh/providers/github.ts";
import { refreshCopilotToken } from "./tokenRefresh/providers/copilot.ts";
import { refreshMuseCodeToken } from "./tokenRefresh/providers/museCode.ts";

export {
refreshCodebuddyCnToken,
Expand All @@ -70,6 +71,7 @@ export {
refreshQoderToken,
refreshGitHubToken,
refreshCopilotToken,
refreshMuseCodeToken,
extractOAuthErrorCode,
isUnrecoverableRefreshError,
isProviderBlocked,
Expand Down Expand Up @@ -441,6 +443,11 @@ async function _getAccessTokenInternal(provider, credentials, log, proxyConfig:
case "codebuddy-cn":
return await refreshCodebuddyCnToken(credentials.refreshToken, log, proxyConfig);

// OAuth connections are stored under the registry backend id
// "muse-code-oauth" (see open-sse/config/providers/registry/muse/code).
case "muse-code-oauth":
return await refreshMuseCodeToken(credentials.refreshToken, log, proxyConfig);

default:
// Fallback to generic OAuth refresh for unknown providers
return refreshAccessToken(provider, credentials.refreshToken, credentials, log, proxyConfig);
Expand Down Expand Up @@ -472,6 +479,7 @@ export function supportsTokenRefresh(provider) {
"gitlab-duo",
"codebuddy-cn",
"cursor",
"muse-code-oauth",
]);
if (explicitlySupported.has(provider)) return true;
const config = PROVIDERS[provider];
Expand Down
Loading
Loading