Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
5aff529
chore(release): v3.7.9 — gemini-cli cloud code separation
diegosouzapw May 2, 2026
c499293
chore(provider): Update Jina AI model catalog (#1874)
backryun May 2, 2026
f64b209
docs: update CHANGELOG for PR 1874 and retroactive credits
diegosouzapw May 2, 2026
fe25fdc
fix: resolve stream defaults and codex prompt mapping (#1873, #1872)
diegosouzapw May 2, 2026
a2d0db2
chore(compression): start caveman compression update
diegosouzapw May 2, 2026
0f35c14
feat(compression): expand caveman compression and analytics pipeline
diegosouzapw May 2, 2026
aa40bc3
feat(compression): expose rule intensities and track usd savings
diegosouzapw May 2, 2026
743be29
feat(compression): RTK compression roadmap (#1889)
diegosouzapw May 3, 2026
970f6a3
feat(compression): expand caveman parity and MCP metadata compression
diegosouzapw May 3, 2026
a7233d1
feat(compression): unify config validation and persist MCP savings
diegosouzapw May 3, 2026
dde7428
fix(auth): require dashboard management auth for compression preview
diegosouzapw May 3, 2026
6e38bd5
fix(compression): preserve stacked defaults and secure metadata routes
diegosouzapw May 3, 2026
d8baf44
fix(compression): align seeded standard savings combo with stacked de…
diegosouzapw May 3, 2026
6424c82
docs(compression): document RTK+Caveman stacked savings ranges
diegosouzapw May 3, 2026
37a4a66
feat(image-gen): add NanoGPT image generation provider (#1899)
Aculeasis May 3, 2026
2bd8e05
fix(codex): sanitize raw responses input (#1895)
dhaern May 3, 2026
6b7f331
Fix combo provider breaker profile handling (#1891)
rdself May 3, 2026
879eda9
fix(combos): align strategy contracts (#1892)
dhaern May 3, 2026
53fd36e
feat(proxy): move proxy configuration to dedicated System → Proxy pag…
oyi77 May 3, 2026
d7a14ce
feat: add K/M/B/T cost shortener to prevent UI overflow (#1902)
oyi77 May 3, 2026
dc8b856
feat(providers): implement bulk paste for extra API keys (#1916)
0xtbug May 3, 2026
9dc377e
fix(migrations): treat duplicate-column ALTER as no-op (#1886)
smartenok-ops May 3, 2026
1d38900
fix(analytics): robust model pricing resolution, dark mode charts and…
Gi99lin May 3, 2026
0e8148d
fix(oauth): per-connection mutex for rotating refresh tokens (#1885)
smartenok-ops May 3, 2026
9e1d488
fix: resolve 3 bugs — Codex tool normalization (#1914), image gen pro…
diegosouzapw May 3, 2026
fb2fb7c
chore(release): v3.7.9 — all changes in ONE commit
diegosouzapw May 3, 2026
b8746b1
fix: allow local ollama provider connections (#1893)
diegosouzapw May 3, 2026
0c27b89
fix(copilot): emit compatible reasoning text deltas (#1919)
ivan-mezentsev May 4, 2026
b73f361
fix(api-manager): show validation errors inline in modals, not behind…
andrewmunsell May 4, 2026
d3c1abc
docs: update changelog and pr body with merged prs
diegosouzapw May 4, 2026
f6fdfea
fix(providers): route agentrouter through anthropic endpoint headers
diegosouzapw May 4, 2026
88972bf
feat(logs): show compression tokens in request log UI (#1923)
diegosouzapw May 4, 2026
1a342ae
docs: add PR #1923 to changelog
diegosouzapw May 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .agents/workflows/deploy-vps-akamai.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Deploy OmniRoute to the Akamai VPS using `npm pack + scp` + PM2.
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The deployment script uses a hardcoded, user-specific absolute path (/home/diegosouzapw/dev/proxys/OmniRoute). This makes the script non-portable and difficult for other developers to use. It's better to use a relative path or a command to dynamically find the project root.

Suggested change
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd $(git rev-parse --show-toplevel) && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts

```

### 2. Copy to Akamai VPS and install
Expand Down
2 changes: 1 addition & 1 deletion .agents/workflows/deploy-vps-both.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Deploy OmniRoute to the production VPSs using `npm pack + scp` + PM2.
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The deployment script uses a hardcoded, user-specific absolute path (/home/diegosouzapw/dev/proxys/OmniRoute). This makes the script non-portable and difficult for other developers to use. It's better to use a relative path or a command to dynamically find the project root.

Suggested change
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd $(git rev-parse --show-toplevel) && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts

```

### 2. Copy to both VPS and install
Expand Down
2 changes: 1 addition & 1 deletion .agents/workflows/deploy-vps-local.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Deploy OmniRoute to the Local VPS using `npm pack + scp` + PM2.
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The deployment script uses a hardcoded, user-specific absolute path (/home/diegosouzapw/dev/proxys/OmniRoute). This makes the script non-portable and difficult for other developers to use. It's better to use a relative path or a command to dynamically find the project root.

Suggested change
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd $(git rev-parse --show-toplevel) && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts

```

### 2. Copy to Local VPS and install
Expand Down
2 changes: 1 addition & 1 deletion .agents/workflows/generate-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ git checkout main
git pull origin main

# Build and pack locally
cd /home/diegosouzapw/dev/proxys/9router && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The deployment script uses a hardcoded, user-specific absolute path (/home/diegosouzapw/dev/proxys/OmniRoute). This makes the script non-portable and difficult for other developers to use. It's better to use a relative path or a command to dynamically find the project root.

Suggested change
cd /home/diegosouzapw/dev/proxys/OmniRoute && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts
cd $(git rev-parse --show-toplevel) && rm -f omniroute-*.tgz && rm -rf .next/cache app/.next/cache && npm run build:cli && rm -rf app/logs app/coverage app/.git app/.app-build-backup* && npm pack --ignore-scripts


# Deploy to LOCAL VPS (192.168.0.15)
scp omniroute-*.tgz root@192.168.0.15:/tmp/
Expand Down
18 changes: 9 additions & 9 deletions .agents/workflows/version-bump.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Automatically bump the project version, generate CHANGELOG entries from git hist
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The script uses a hardcoded, user-specific absolute path (/home/diegosouzapw/dev/proxys/OmniRoute). This makes the script non-portable and difficult for other developers to use. It's better to use a relative path or an environment variable for the project root directory.

Suggested change
cd /home/diegosouzapw/dev/proxys/OmniRoute
cd $(git rev-parse --show-toplevel)

CURRENT_VERSION=$(node -p "require('./package.json').version")
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
CURRENT_BRANCH=$(git branch --show-current)
Expand Down Expand Up @@ -64,7 +64,7 @@ npm version "$VERSION" --no-git-tag-version
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
echo "=== Commits since $LAST_TAG ==="
git log "$LAST_TAG"..HEAD --pretty=format:"%h %s" --no-merges | head -100
Expand Down Expand Up @@ -133,7 +133,7 @@ The date must be today's date in `YYYY-MM-DD` format.
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
VERSION=$(node -p "require('./package.json').version")

# Update docs/openapi.yaml version
Expand All @@ -156,7 +156,7 @@ echo "✓ All workspace packages synced to $VERSION"
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
VERSION=$(node -p "require('./package.json').version")
OLD_VERSION_PATTERN='[0-9]\+\.[0-9]\+\.[0-9]\+'

Expand All @@ -174,7 +174,7 @@ echo "✓ llm.txt → $VERSION"
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
npm install
echo "✓ Lock file regenerated"
```
Expand Down Expand Up @@ -236,7 +236,7 @@ For each file in `docs/` (excluding `docs/i18n/`), review if CHANGELOG changes a
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
npm run lint
```

Expand All @@ -245,7 +245,7 @@ npm run lint
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
npm test
```

Expand All @@ -254,7 +254,7 @@ npm test
// turbo

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
VERSION=$(node -p "require('./package.json').version")
echo "Expected version: $VERSION"
echo ""
Expand Down Expand Up @@ -299,7 +299,7 @@ grep "^## \[" CHANGELOG.md | head -2
// turbo-all

```bash
cd /home/diegosouzapw/dev/proxys/9router
cd /home/diegosouzapw/dev/proxys/OmniRoute
git add -A
VERSION=$(node -p "require('./package.json').version")
git commit -m "chore(release): bump to v$VERSION — changelog, docs, version sync"
Expand Down
34 changes: 25 additions & 9 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Unified AI proxy/router — route any LLM through one endpoint. Multi-provider s
with **160+ providers** (OpenAI, Anthropic, Gemini, DeepSeek, Groq, xAI, Mistral, Fireworks,
Cohere, NVIDIA, Cerebras, Pollinations, Puter, Cloudflare AI, HuggingFace, DeepInfra,
SambaNova, Meta Llama API, Moonshot AI, AI21 Labs, Databricks, Snowflake, and many more)
with **MCP Server** (29 tools), **A2A v0.3 Protocol**, and **Electron desktop app**.
with **MCP Server** (37 tools), **A2A v0.3 Protocol**, and **Electron desktop app**.

## Stack

Expand Down Expand Up @@ -292,17 +292,28 @@ compression pipeline), and more.

Modular prompt compression that runs proactively before the existing reactive context manager.

- **`strategySelector.ts`**: Selects compression mode based on config, combo overrides, auto-trigger
thresholds. Priority: combo override > auto-trigger > default mode > off.
- **`strategySelector.ts`**: Selects compression mode based on config, compression combo assignments,
combo overrides, auto-trigger thresholds, and defaults. Priority: assigned compression combo >
combo override > auto-trigger > default mode > off.
- **`lite.ts`**: 5 lite-mode techniques: `collapseWhitespace`, `dedupSystemPrompt`,
`compressToolResults`, `removeRedundantContent`, `replaceImageUrls`. Target: 10-15% savings at
<1ms latency.
- **`caveman.ts` / `cavemanRules.ts`**: Caveman-style semantic condensation backed by built-in
rules plus file-loaded language packs under `compression/rules/`.
- **`engines/rtk/`**: Rule-based terminal/tool-output compression inspired by RTK patterns. Detects
command output classes, applies JSON filter packs, deduplicates repeated lines, strips ANSI/code
noise, and preserves errors/actionable context. The RTK JSON DSL supports replace,
match-output short-circuit, strip/keep, per-line truncation, head/tail/max-line truncation,
inline tests, trust-gated project/global custom filters, and optional redacted raw-output
retention for authenticated recovery.
- **`engines/registry.ts`**: Registers engines (`caveman`, `rtk`) and powers stacked pipelines.
- **`stats.ts`**: Per-request compression stats tracking (original tokens, compressed tokens,
savings %, techniques used).
- **`types.ts`**: `CompressionMode` (off/lite/standard/aggressive/ultra), `CompressionConfig`,
`CompressionStats`, `CompressionResult`.
- DB settings in `src/lib/db/compression.ts`, API route at `src/app/api/settings/compression/`.
- Phase 1 implements lite mode only; standard/aggressive/ultra are placeholders for Phase 2.
savings %, techniques used, engine breakdown, compression combo id).
- **`types.ts`**: `CompressionMode` (off/lite/standard/aggressive/ultra/rtk/stacked),
`CompressionConfig`, `CompressionStats`, `CompressionResult`.
- DB settings in `src/lib/db/compression.ts`, compression combos in
`src/lib/db/compressionCombos.ts`, API routes under `src/app/api/settings/compression/`,
`src/app/api/context/*`, and preview/language-pack routes under `src/app/api/compression/*`.

#### Combo Routing Engine (`combo.ts`)

Expand All @@ -323,7 +334,7 @@ Policy engine modules: `policyEngine.ts`, `comboResolver.ts`, `costRules.ts`,

### MCP Server (`open-sse/mcp-server/`)

29 tools, 3 transports (stdio / SSE / Streamable HTTP). Scoped auth (10 scopes), Zod schemas.
37 tools, 3 transports (stdio / SSE / Streamable HTTP). Scoped auth (10 scopes), Zod schemas.

**Core tools** (20): get_health, list_combos, get_combo_metrics, switch_combo, check_quota,
route_request, cost_report, list_models_catalog, web_search, simulate_route, set_budget_guard,
Expand All @@ -332,6 +343,11 @@ best_combo_for_task, explain_route, get_session_snapshot, db_health_check, sync_

**Cache tools** (2): cache_stats, cache_flush.

**Compression tools** (5): compression_status, compression_configure, set_compression_engine,
list_compression_combos, compression_combo_stats.

**1proxy tools** (3): oneproxy_fetch, oneproxy_rotate, oneproxy_stats.

**Memory tools** (3): memory_search, memory_add, memory_clear.

**Skill tools** (4): skills_list, skills_enable, skills_execute, skills_executions.
Expand Down
49 changes: 49 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,55 @@

## [Unreleased]

## [3.7.9] — 2026-05-03

### ✨ New Features

- **feat(compression):** major upgrade to Caveman and RTK compression pipelines (#1876, #1889):
- Add RTK tool-output compression, stacked Caveman + RTK pipelines, compression combo assignments, dashboard context pages, MCP management tools, and language-aware Caveman rule packs.
- Expand RTK parity with a 39-filter catalog, RTK-style JSON DSL stages, inline verify/benchmark coverage, trust-gated custom filters, expanded command detection, and redacted raw-output recovery.
- Expose rule intensities, track USD savings, unify config validation, and persist MCP savings.
- Expand Caveman parity and MCP metadata compression.
- **feat(provider):** update Jina AI model catalog to support Embeddings and Rerank natively (#1874 — thanks @backryun)
- **feat(provider):** add NanoGPT image generation provider (#1899 — thanks @Aculeasis)
- **feat(ui):** move proxy configuration to dedicated System → Proxy page (#1907 — thanks @oyi77)
- **feat(ui):** add K/M/B/T cost shortener utility (#1902 — thanks @oyi77)
- **feat(providers):** implement bulk paste for extra API keys (#1916 — thanks @0xtbug)
- **feat(analytics):** usage history API key backfill + dark mode pricing (#1896 — thanks @Gi99lin)
- **feat(logs):** show RTK and Caveman compression token savings accurately in request log UI (#1923 — thanks @emdash)

### 🐛 Bug Fixes

- **fix(providers):** allow local OpenAI-compatible endpoints (like Ollama) to be added without an API key (fixes #1893)
- **fix(providers):** bypass AgentRouter unauthorized_client_error by spoofing Claude CLI headers via Anthropic endpoints (fixes #1921)
- **fix(copilot):** emit compatible reasoning text deltas (#1919 — thanks @ivan-mezentsev)
- **fix(api-manager):** show validation errors inline in modals, not behind (#1920 — thanks @andrewmunsell)
- **fix(compression):** align seeded standard savings combo with stacked default, preserve stacked defaults, and secure metadata routes.
- **fix(gemini-cli):** separate Cloud Code transport from Antigravity (#1869 — thanks @dhaern)
- **fix(codex):** map prompt field to input array for Cursor compatibility (fixes #1872)
- **fix(core):** align stream parameter default to false per strict OpenAI spec (fixes #1873)
- **fix(ui):** restore Next.js CSP `unsafe-eval` in production `script-src` to fix unresponsive Onboarding button (fixes #1883)
- **fix(proxy):** globally strip `prompt_cache_retention` in `BaseExecutor` to prevent upstream 400 errors from strict endpoints like droid/gemini-2-pro (fixes #1884)
- **fix(ui):** include `isOpen` dependency in `EditConnectionModal` state sync to ensure `maxConcurrent` is properly hydrated when reopening the modal (fixes #1859)
- **fix(security):** remediate 4 polynomial-redos CodeQL alerts in compression regexes by bounding repetitions and removing overlapping quantifiers
- **fix(codex):** flatten Chat Completions tool format to Codex Responses format in `normalizeCodexTools` — prevents `Missing required parameter: tools[0].name` upstream errors (#1914 — thanks @tranduykhanh030)
- **fix(proxy):** add proxy-aware execution context to image generation route — proxy settings are now correctly applied for image providers behind restricted networks (#1904 — thanks @Aculeasis)
- **fix(translator):** inject `properties: {}` into zero-argument MCP tool schemas during Anthropic→OpenAI translation — prevents 400 errors from OpenAI strict schema validation (#1898 — thanks @bryceIT)
- **fix(codex):** sanitize raw responses input (#1895 — thanks @dhaern)
- **fix(combos):** align strategy contracts (#1892 — thanks @dhaern)
- **fix(combos):** fix combo provider breaker profile handling (#1891 — thanks @rdself)
- **fix(migrations):** duplicate-column no-op fix (#1886 — thanks @smartenok-ops)
- **fix(auth):** per-connection OAuth refresh mutex (#1885 — thanks @smartenok-ops)
- **fix(auth):** require dashboard management auth for compression preview

### 📝 Documentation

- **docs(compression):** document RTK+Caveman stacked savings ranges

### 🏆 Release Attribution & Retroactive Credits

- **@payne0420** (PR #1828 / #1839) — Implementation of the **Rate Limit Watchdog** and environment overrides. (This feature was manually backported to v3.7.8, causing the automatic GitHub Release notes to omit the author's credit).

---

## [3.7.8] — 2026-05-01
Expand Down
Loading
Loading