Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
c812113
chore(release): open v3.8.23 development cycle
diegosouzapw Jun 12, 2026
7ad96cc
fix(anthropic): strip top_p when temperature is set to avoid 400 (#3691)
zhiru Jun 12, 2026
2b18e19
fix(vertex): support Vertex AI Express-mode API keys (#3690)
artickc Jun 12, 2026
bb00198
fix(stream): error on empty Claude SSE instead of synthetic success (…
TechNickAI Jun 12, 2026
b71716e
fix(oauth): stop token-refresh invalidation loop + harden proxy resol…
diegosouzapw Jun 12, 2026
32cc78a
docs: add FUNDING.yml and Support section to README (#3698)
diegosouzapw Jun 12, 2026
74fa992
feat: gemini - handle known ratelimits (#3686)
hartmark Jun 12, 2026
b514c3c
fix: stream combo fails over on empty content-filtered response (#368…
diegosouzapw Jun 12, 2026
66d7957
fix(antigravity): preserve gemini-3.1-pro high/low budget tiers (#369…
diegosouzapw Jun 12, 2026
c79d0b5
feat(auto-combo): add auto-updating model intelligence scoring (#3660)
pizzav-xyz Jun 12, 2026
4ae478a
fix(gemini): context-mode fallback for signatureless tool calls (#368…
diegosouzapw Jun 12, 2026
9a60172
chore(quality-gate): reconcile file-size baseline (27 files + provide…
diegosouzapw Jun 12, 2026
6207875
feat(vertex): dynamic model discovery via Generative Language models …
artickc Jun 12, 2026
5b2c2d6
fix(combo): gate reasoning token buffer (#3700)
rdself Jun 12, 2026
72274e9
refactor(#3501): god-component Phase 1g-1j — client 4062→3408 LOC (-6…
diegosouzapw Jun 12, 2026
2db9a3a
refactor(#3501): god-component Phase 1k-1m — client 3408→2553 LOC (-8…
diegosouzapw Jun 12, 2026
34b7267
docs(changelog): restore #3590 bullet lost on the v3.8.20 release branch
diegosouzapw Jun 12, 2026
e12fb53
fix(kiro): resolve quota for IAM Identity Center accounts missing a p…
artickc Jun 12, 2026
61a2366
refactor(#3501): god-component Phase 1n-1s — client 2553→1376 LOC (-1…
diegosouzapw Jun 12, 2026
dd0b377
feat(model-lockout): settings UI, backend integration, error classifi…
Chewji9875 Jun 12, 2026
37e8030
refactor(#3501): god-component Phase 1t — client 1376→781 LOC (≤800 T…
diegosouzapw Jun 12, 2026
5635a4a
fix: bundle @omniroute/opencode-plugin inside omniroute + add 'setup …
herjarsa Jun 12, 2026
7018a6f
feat(vertex): self-tracked USD spend since account added (#3724)
artickc Jun 12, 2026
62eb7fe
fix(qwen-web): migrate to v2 chat API with full cookie-jar replay (#3…
diegosouzapw Jun 12, 2026
d18f9ab
fix(sse): make safeLogEvents async — 'await' in a sync function broke…
diegosouzapw Jun 12, 2026
9d01976
fix(sse): remove cross-provider credential leak in emergency fallback…
diegosouzapw Jun 12, 2026
635e236
fix(executors): inject MiMoCode anti-abuse marker so free endpoint st…
felipesartori Jun 12, 2026
8cf4b4d
fix(dashboard): repair "Test all models" — toast crash, status icons,…
felipesartori Jun 12, 2026
0c47785
chore(release): open v3.8.21 development cycle
diegosouzapw Jun 10, 2026
1385c38
fix: pass through valid max_tokens-truncated responses instead of fak…
diegosouzapw Jun 10, 2026
af7bcac
fix: /v1/completions returns legacy text-completion format, not chat …
diegosouzapw Jun 10, 2026
4015154
fix: z.ai/GLM coding plan no longer shows Monthly 0% when no monthly …
diegosouzapw Jun 10, 2026
39d650d
docs: mark DISCOVERY_TOOL_DESIGN endpoints as Phase-2 not-yet-impleme…
diegosouzapw Jun 10, 2026
b789ca6
fix(agent-bridge): add validate-only upstream-ca/test route (#3488) (…
diegosouzapw Jun 10, 2026
48dd328
fix(gamification): add level/badges/badges-earned profile routes (#3484)
diegosouzapw Jun 10, 2026
9f964d2
security(oauth): migrate 5 public client_ids to resolvePublicCred (#3…
diegosouzapw Jun 10, 2026
8ea99da
fix(mcp): ship MCP server source closure in npm files + coverage gate…
diegosouzapw Jun 10, 2026
8cc0f7b
Refactor: Extract chatCore phases into modular files (#3598)
oyi77 Jun 11, 2026
1249d3e
docs(changelog): credit #3598 (chatCore modularization) + #3588 (comb…
diegosouzapw Jun 11, 2026
fae947e
fix(api): implement GET /api/guardrails + POST /api/guardrails/test, …
diegosouzapw Jun 11, 2026
2e6bd8c
fix(gemini): isolate textual reasoning wrappers (#3605)
dhaern Jun 11, 2026
ece24e1
fix(antigravity): normalize Gemini 3.5 Flash tier IDs (#3603)
dhaern Jun 11, 2026
1d041ed
fix(agent-bridge): surface real MITM startup-failure cause, not alway…
diegosouzapw Jun 11, 2026
c70b8d7
fix(oauth): surface real Kiro import-token failure cause, not a bare …
diegosouzapw Jun 11, 2026
27c9ced
docs(opencode-provider): soft-deprecate in favor of @omniroute/openco…
diegosouzapw Jun 11, 2026
6b50c06
fix(usage): normalize Antigravity and agy provider quotas (#3604)
dhaern Jun 11, 2026
ce39b32
feat(cli): add autostart on/off/toggle shorthand for headless serve m…
diegosouzapw Jun 11, 2026
6b9e17c
docs(changelog): credit #3603 (Flash tier IDs) + #3604 (provider quot…
diegosouzapw Jun 11, 2026
b028bfe
refactor: modularize 12.8K-line provider detail page (Issue #3594)
oyi77 Jun 11, 2026
7bbf74e
fix: address code review feedback on PR #3627
oyi77 Jun 11, 2026
54e967a
refactor: modularize open-sse/services/combo.ts (Issue #3594)
oyi77 Jun 11, 2026
f6436f1
refactor: modularize 4.2K-line validation.ts (Issue #3594)
oyi77 Jun 11, 2026
65cf186
refactor: modularize 3.7K-line imageGeneration.ts (Issue #3594)
oyi77 Jun 11, 2026
46095ad
refactor: modularize 3.2K-line usage.ts (Issue #3594)
oyi77 Jun 11, 2026
0f4046f
refactor: modularize 3.1K-line providers.ts constants (Issue #3594)
oyi77 Jun 11, 2026
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
10 changes: 10 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -1071,6 +1071,16 @@ APP_LOG_TO_FILE=true
# Comma-separated data sources. Default: litellm
# PRICING_SYNC_SOURCES=litellm

# ═══════════════════════════════════════════════════════════════════════════════
# 18b. ARENA ELO SYNC
# ═══════════════════════════════════════════════════════════════════════════════
# Enable auto-updating model intelligence from Arena AI leaderboard ELO scores.
# Used by: src/lib/arenaEloSync.ts
# ARENA_ELO_SYNC_ENABLED=false

# Sync interval in seconds. Default: 86400 (24 hours).
# ARENA_ELO_SYNC_INTERVAL=86400

# ═══════════════════════════════════════════════════════════════════════════════
# 19. MODEL SYNC (Dev)
# ═══════════════════════════════════════════════════════════════════════════════
Expand Down
5 changes: 5 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Funding links for OmniRoute — rendered as the "Sponsor" button on GitHub.
# Docs: https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository
github: diegosouzapw
# Additional platforms (uncomment and fill in before enabling):
# custom: ["https://omniroute.online/donate"]
39 changes: 33 additions & 6 deletions @omniroute/opencode-plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,58 @@ This plugin solves that by:

## Install

Once published to npm:
The plugin ships **pre-built inside the `omniroute` npm package** since v3.8.23.
If you have OmniRoute installed, the plugin is already on disk:

```sh
npm install @omniroute/opencode-plugin
# 1. One command — copy the plugin into OpenCode and update opencode.json
omniroute setup opencode --auth

# 2. Follow the interactive prompt to enter your OmniRoute API key
# 3. Restart OpenCode — /models lists the full live catalog
```

Until then (or for local development), reference the built artifact directly. Either extract the package into your OpenCode plugins dir and point at the extracted `dist/index.js`:
The `--auth` flag runs `opencode auth login --provider omniroute` automatically.
Use `--base-url` to point at a non-default OmniRoute address:

```sh
omniroute setup opencode --base-url https://or.example.com --auth
```

### What it does

1. Locates the bundled plugin inside the omniroute installation
2. Copies `dist/` + `package.json` to `~/.config/opencode/plugins/omniroute/`
3. Writes/updates `opencode.json` with the plugin entry (idempotent, replaces legacy entries)
4. (With `--auth`) runs `opencode auth login` so the API key is stored

Re-run any time to update the plugin or change the base URL. Older entries for
`@omniroute/opencode-provider` or the legacy `opencode-omniroute-auth` package are
automatically cleaned up.

### Manual install (without omniroute CLI)

If you cannot run `omniroute setup opencode` (local dev, CI, air-gapped), reference
the built artifact directly:

```sh
# from inside the OmniRoute repo
cd @omniroute/opencode-plugin && npm run build && npm pack
# then extract into ~/.config/opencode/plugins/omniroute-opencode-plugin/
```

And add the entry to `opencode.json` manually (see Quick Start below).

Peer dep: `@opencode-ai/plugin` (managed by your OpenCode install).

## Quick start (single instance)
## Quick start (single instance, manual)

```jsonc
// opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
[
"@omniroute/opencode-plugin",
"./plugins/omniroute-opencode-plugin/dist/index.js",
{
"providerId": "omniroute",
"baseURL": "https://or.example.com",
Expand Down
28 changes: 21 additions & 7 deletions @omniroute/opencode-plugin/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2552,17 +2552,31 @@ export function createOmniRouteProviderHook(
const apiKey = (auth as { key: string }).key;

// baseURL resolution: plugin opts first, then credential-attached
// baseURL (auth backends sometimes stash it next to the key). No
// silent default to localhost: a misconfigured plugin should surface
// a clear error, not phantom /v1/models calls. Cast through unknown
// because the Auth union (OAuth | ApiAuth | WellKnownAuth) doesn't
// declare baseURL on any branch — we duck-type it as a defensive
// extension point.
// baseURL (auth backends sometimes stash it next to the key), then the
// provider config itself — a baseURL set via opencode.json provider
// options (or a config hook) lands on `provider.options` and is not
// visible through either of the first two links. No silent default to
// localhost: a misconfigured plugin should surface a clear warning,
// not phantom /v1/models calls. Cast through unknown because the Auth
// union (OAuth | ApiAuth | WellKnownAuth) doesn't declare baseURL on
// any branch — we duck-type it as a defensive extension point.
const authBaseURL = (auth as unknown as { baseURL?: unknown }).baseURL;
const providerBaseURL = (
_provider as { options?: { baseURL?: unknown } } | undefined
)?.options?.baseURL;
const baseURL =
resolved.baseURL ??
(typeof authBaseURL === "string" ? authBaseURL : "");
(typeof authBaseURL === "string" && authBaseURL.length > 0 ? authBaseURL : undefined) ??
(typeof providerBaseURL === "string" && providerBaseURL.length > 0
? providerBaseURL
: undefined) ??
"";
if (!baseURL) {
console.warn(
`[omniroute-plugin] provider.models(${resolved.providerId}): ` +
`no baseURL resolvable — checked plugin opts, auth.json, and provider config. ` +
`Set baseURL in opencode.json plugin options or run \`opencode connect ${resolved.providerId}\` with a baseURL.`
);
return {};
}

Expand Down
Loading