Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
67fc686
fix(i18n): resolve code review issues for PR #1318
clousky2020 Apr 16, 2026
2206fed
fix(requestLogger): add missing cacheSource and tps columns to i18n
clousky2020 Apr 16, 2026
8d52a6c
fix(cli): implement Node 22 mjs entrypoint to bypass type stripping l…
diegosouzapw Apr 16, 2026
57395ed
Merge pull request #1324 from clousky2020/feat/i18n-clean
diegosouzapw Apr 16, 2026
d1ca9c2
Merge pull request #1325 from diegosouzapw/fix/cli-node22-entrypoint
diegosouzapw Apr 16, 2026
37cc61e
fix(providers): add grok-web SSO cookie validation handler (#1334)
payne0420 Apr 16, 2026
4eedf4d
fix: preserve key_value settings across DB recreation (#1333)
oyi77 Apr 16, 2026
b140181
fix: allow combo fallback on context overflow 400 errors (#1331)
oyi77 Apr 16, 2026
ca944f2
fix(#1316): resolve thinking leaks, consecutive roles, and missing th…
diegosouzapw Apr 16, 2026
3843751
security: Resolve GitHub CodeQL scan alerts
diegosouzapw Apr 16, 2026
c4570a1
feat: add stopSequences support and expand tool definitions to includ…
diegosouzapw Apr 16, 2026
6e9b23c
fix(providers): support batch testing for web, search, and audio
diegosouzapw Apr 16, 2026
732a311
chore(release): v3.6.7 - complete bugfixes and pr merges
diegosouzapw Apr 16, 2026
bf04aa3
fix: pass client headers to executor in chatCore (#1335)
cedrugs Apr 16, 2026
68060d6
feat: display Antigravity credit balance in dashboard Limits & Quotas…
sFaxsy Apr 16, 2026
03b8e21
feat: add Node.js 24 LTS (Krypton) support (#1340)
oyi77 Apr 16, 2026
bc7fb96
fix: close MCP audit SQLite connections on shutdown (#1348)
rdself Apr 16, 2026
01bd0d6
Add Claude Opus 4.7 to Claude Code OAuth models (#1347)
rdself Apr 16, 2026
79c63d1
fix(codex): keep system prompts in input for GPT-5 prompt caching (#1…
Gi99lin Apr 16, 2026
5cbc08a
docs: fix outdated Node 24 warnings in TROUBLESHOOTING.md (#1343)
oyi77 Apr 16, 2026
6902fa3
fix(providers): separate test batch calls and ignore unknown connections
diegosouzapw Apr 16, 2026
438f252
chore(release): update changelog for v3.6.7 PR merges (#1335, #1338)
diegosouzapw Apr 16, 2026
adf59dd
chore(scripts): add scratch maintenance utilities and ai workspace rules
diegosouzapw Apr 16, 2026
a0654b4
fix: resolve migration abort on fresh database #1328 and missing getC…
diegosouzapw Apr 16, 2026
a5c258a
docs(changelog): record PR #1340 and issue #1328 for v3.6.7
diegosouzapw Apr 16, 2026
f5700f2
ci: bump actions node-version to 24 natively
diegosouzapw Apr 16, 2026
661a63c
fix(db): prevent native module errors from renaming db and bump mass-…
diegosouzapw Apr 16, 2026
55da8fd
chore(release): v3.6.7 - include PRs 1343, 1346, 1347, 1348 in changelog
diegosouzapw Apr 16, 2026
22492b5
fix(i18n): update nodeIncompatibleHint to recommend Node 24 LTS acros…
diegosouzapw Apr 16, 2026
bbc0a8d
fix: fully close MCP audit SQLite connections on shutdown (#1349)
diegosouzapw Apr 16, 2026
25f9a13
fix(cli): avoid creating app router during postinstall (#1351)
diegosouzapw Apr 16, 2026
689bf7f
chore(release): bump to v3.6.8 — changelog, docs, version sync
diegosouzapw Apr 16, 2026
bd1ead2
fix: fully close MCP audit SQLite connections on shutdown (#1349)
rdself Apr 16, 2026
d868124
fix(cli): avoid creating app router during postinstall (#1351)
yart Apr 16, 2026
c4c353a
fix: integrate compressContext() into chatCore.ts request pipeline
oyi77 Apr 15, 2026
dfb0db3
feat: dynamic context limit for compaction based on model capabilities
oyi77 Apr 17, 2026
a85b001
feat: use minimum context limit across all combo targets for compaction
oyi77 Apr 17, 2026
79605d3
fix: address code review feedback from PR #1363
oyi77 Apr 17, 2026
d20c26a
fix(db): Complete call_logs schema in SCHEMA_SQL and update test
oyi77 Apr 17, 2026
5cc99d6
fix: use CALL_LOG_MAX_ENTRIES for database rotation
oyi77 Apr 17, 2026
f21e403
fix(test): link artifact files to database rows in call-log-file-rota…
oyi77 Apr 17, 2026
cf3e132
fix: replace unit test with integration test for proactive context co…
oyi77 Apr 17, 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
39 changes: 39 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,42 @@ images
clipr
omnirouteCloud
omnirouteSite

# Temporary/Scratch Folders
_*

# CI/CD and Version Control (that are not actual code)
.github
.husky
.omc

# Test Configs and Reports
playwright.config.ts
vitest*.ts
audit-report.json
sonar-project.properties

# Deployment Configs
docker-compose*.yml
fly.toml

# Consistent with .gitignore
.DS_Store
.idea/
.config/
.data/
.omnivscodeagent/
*.sqlite-*
*.tsbuildinfo
next-env.d.ts
security-analysis/
.analysis/
antigravity-manager-analysis/
.sisyphus/
.plans/
app.__qa_backup/
.app-build-backup-*/
.gitnexus
.worktrees
.next-playwright/
cloud/
24 changes: 23 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ permissions:
contents: read

env:
CI_NODE_VERSION: "22.22.2"
CI_NODE_VERSION: "24"
CI_NODE_24_VERSION: "24"

jobs:
lint:
Expand Down Expand Up @@ -185,6 +186,26 @@ jobs:
- run: npm run check:node-runtime
- run: npm run test:unit

node-24-compat:
name: Node 24 Compatibility
runs-on: ubuntu-latest
timeout-minutes: 15
needs: build
env:
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
API_KEY_SECRET: ci-test-api-key-secret-long
DISABLE_SQLITE_AUTO_BACKUP: "true"
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.CI_NODE_24_VERSION }}
cache: npm
- run: npm ci
- run: npm run check:node-runtime
- run: npm run build
- run: npm run test:unit

test-coverage:
name: Coverage
runs-on: ubuntu-latest
Expand Down Expand Up @@ -413,6 +434,7 @@ jobs:
- build
- package-artifact
- test-unit
- node-24-compat
- test-coverage
- sonarqube
- coverage-pr-comment
Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/electron-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,11 @@ jobs:
deb_ext: .deb

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup Node.js
- uses: actions/checkout@v6
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24
cache: npm

- name: Cache node_modules
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ permissions:
packages: write

env:
NPM_PUBLISH_NODE_VERSION: "22.22.2"
NPM_PUBLISH_NODE_VERSION: "24"

jobs:
publish:
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -170,3 +170,9 @@ docs/superpowers/
# GitNexus local index
.gitnexus
.worktrees
bin/omniroute.mjs

# Consistent with .dockerignore / .npmignore
.omc/
audit-report.json
bun.lock
2 changes: 1 addition & 1 deletion .node-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22
24
24 changes: 24 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,27 @@ app/_*/
app/coverage/
app/logs/
app/tests/

# Consistent with .gitignore and .dockerignore
.DS_Store
.idea/
.config/
.data/
.omnivscodeagent/
.omc/
*.sqlite-*
*.tsbuildinfo
security-analysis/
.analysis/
antigravity-manager-analysis/
.sisyphus/
.plans/
app.__qa_backup/
.app-build-backup-*/
.gitnexus
.worktrees
.next-playwright/
test-results/
playwright-report/
blob-report/
coverage/
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22
24
27 changes: 23 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,33 @@

---

## [3.6.7] — 2026-04-16
## [3.6.8] — 2026-04-16

### ✨ New Features

- **feat(core):** Add full support for Node.js 24 LTS (Krypton) environments with continuous integration coverage (#1340)
- **feat(dashboard):** Display Antigravity credit balance in dashboard Limits & Quotas (#1338)
- **feat(i18n):** Add internationalization support for combo features and dashboard components; sync translations across 31 keys (#1318)

### 🐛 Bug Fixes

- **feat(providers):** Add Claude Opus 4.7 to Claude Code OAuth models natively with extended context and caching (#1347)
- **feat(core):** Add stopSequences support and expand tool definitions to include Google Search capabilities
- **security:** Resolve GitHub CodeQL scan alerts and enforce deep SSRF mitigations

### 🐛 Bug Fixes

- **fix(db):** Prevent native module ABI load crashes from assuming database corruption and skipping databases
- **fix(db):** Increase mass-migration threshold from 5 to 50 pending migrations to protect legacy users upgrading node
- **fix(db):** Prevent migration runner safety aborts from triggering on fresh `DATA_DIR` installations by detecting new databases (#1328)
- **fix(mcp):** Checkpoint and close MCP audit SQLite database safely on process signals and shutdown (#1348)
- **fix(mcp):** Fully decouple MCP audit SQLite connection caching via globalThis to fix unhandled teardown in standalone Next.js chunks (#1349)
- **fix(cli):** Avoid creating app router directory during postinstall initialization on non-built source trees (#1351)
- **fix(codex):** Correctly translate `system` role to `developer` in input array to unlock GPT-5 automatic prompt caching (#1346)
- **fix(core):** Pass client headers to executor in chatCore (#1335)
- **fix(providers):** Separate test batch calls and ignore unknown connections
- **fix(providers):** Add grok-web SSO cookie validation handler (#1334)
- **fix(db):** Preserve key_value settings (dashboard passwords, saved aliases) across DB heuristic recreation cycles (#1333)
- **fix(routing):** Allow combo fallback to cascade context overflow 400 errors instead of immediate aborts (#1331)
- **fix(core):** Resolve thinking leaks, consecutive roles, and missing thoughtSignatures for Antigravity translator (#1316)
- **fix(providers):** Default to batch testing execution blocks for web, search, and audio modalities to prevent connection timeouts
- **fix(cli):** Resolve Node 22 TS entrypoint incompatibility by using esbuild compilation (#1315)
- **fix(chat):** Preserve max_output_tokens for Responses API targets in chatCore sanitization (#1313)
- **fix(api):** API Manager usage stats showing 0 for all registered keys (#1310)
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:22.22.2-trixie-slim AS builder
FROM node:24.14.1-trixie-slim AS builder
WORKDIR /app

RUN apt-get update \
Expand All @@ -13,7 +13,7 @@ RUN if [ -f package-lock.json ]; then npm ci --no-audit --no-fund; else npm inst
COPY . ./
RUN mkdir -p /app/data && npm run build -- --webpack

FROM node:22.22.2-trixie-slim AS runner-base
FROM node:24.14.1-trixie-slim AS runner-base
WORKDIR /app

LABEL org.opencontainers.image.title="omniroute" \
Expand Down
15 changes: 15 additions & 0 deletions GEMINI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Security and Cleanliness Rules for AI Assistants

## 1. File Placement & Organization

- **Test Files**: ALL unit tests, integration tests, ecosystem tests, or Vitest files MUST strictly be placed within the `tests/` directory (e.g., `tests/unit/`, `tests/integration/`). NEVER create test files in the project root (`/`).
- **Scripts and Utilities**: ALL maintenance, debugging, generation, or experimental scripts (`.cjs`, `.mjs`, `.js`, `.ts`) MUST be placed strictly inside the `scripts/` directory or `scripts/scratch/` for temporary one-offs. NEVER dump loose scripts in the project root (`/`).

**The Project Root MUST ONLY CONTAIN:**

- Configuration files (`vitest.config.ts`, `next.config.mjs`, `eslint.config.mjs`, etc.)
- Dependency files (`package.json`, `package-lock.json`)
- Documentation files (`README.md`, `CHANGELOG.md`, `AGENTS.md`)
- CI/CD files and ignore definitions (`.gitignore`, `.dockerignore`)

When creating _any_ validation tests or one-off logic scripts, default to using `scripts/scratch/` or the `tests/unit/` directories according to your goals. Do not pollute the `/` root context.
34 changes: 24 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -695,7 +695,7 @@ During deep debugging, long histories with tool results quickly exceed provider

```txt
Combo: "maximize-claude"
1. cc/claude-opus-4-6
1. cc/claude-opus-4-7
2. glm/glm-4.7
3. if/kimi-k2-thinking

Expand All @@ -719,7 +719,7 @@ Outcome: stable free coding workflow

```txt
Combo: "always-on"
1. cc/claude-opus-4-6
1. cc/claude-opus-4-7
2. cx/gpt-5.2-codex
3. glm/glm-4.7
4. minimax/MiniMax-M2.1
Expand Down Expand Up @@ -1511,7 +1511,7 @@ OmniRoute v3.6 is built as an operational platform, not just a relay proxy.

```txt
Combo: "my-coding-stack"
1. cc/claude-opus-4-6
1. cc/claude-opus-4-7
2. nvidia/llama-3.3-70b
3. glm/glm-4.7
4. if/kimi-k2-thinking
Expand Down Expand Up @@ -1650,7 +1650,7 @@ Dashboard → Providers → Connect Claude Code
→ 5-hour + weekly quota tracking

Models:
cc/claude-opus-4-6
cc/claude-opus-4-7
cc/claude-sonnet-4-5-20250929
cc/claude-haiku-4-5-20251001
```
Expand Down Expand Up @@ -1850,7 +1850,7 @@ Dashboard → Combos → Create New

Name: premium-coding
Models:
1. cc/claude-opus-4-6 (Subscription primary)
1. cc/claude-opus-4-7 (Subscription primary)
2. glm/glm-4.7 (Cheap backup, $0.6/1M)
3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)

Expand Down Expand Up @@ -1880,7 +1880,7 @@ Cost: $0 forever!
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from OmniRoute dashboard]
Model: cc/claude-opus-4-6
Model: cc/claude-opus-4-7
```

### Claude Code
Expand Down Expand Up @@ -1990,7 +1990,7 @@ opencode
**Rate limiting**

- Subscription quota out → Fallback to GLM/MiniMax
- Add combo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
- Add combo: `cc/claude-opus-4-7 → glm/glm-4.7 → if/kimi-k2-thinking`

**OAuth token expired**

Expand Down Expand Up @@ -2322,9 +2322,23 @@ gh release create v2.0.0 --title "v2.0.0" --generate-notes

## 📊 Star History

## Stargazers over time

## [![Stargazers over time](https://starchart.cc/diegosouzapw/OmniRoute.svg?variant=adaptive)](https://starchart.cc/diegosouzapw/OmniRoute)
<a href="https://www.star-history.com/?repos=diegosouzapw%2Fomniroute&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=diegosouzapw/omniroute&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=diegosouzapw/omniroute&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=diegosouzapw/omniroute&type=date&legend=top-left" />
</picture>
</a>

## 🌍 StarMapper

<a href="https://starmapper.bruniaux.com/diegosouzapw/omniroute">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://starmapper.bruniaux.com/api/map-image/diegosouzapw/omniroute?theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://starmapper.bruniaux.com/api/map-image/diegosouzapw/omniroute?theme=light" />
<img alt="StarMapper" src="https://starmapper.bruniaux.com/api/map-image/diegosouzapw/omniroute" />
</picture>
</a>

## 🙏 Acknowledgments

Expand Down
3 changes: 2 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

x-common: &common
restart: unless-stopped
stop_grace_period: 40s
env_file: .env
environment:
- DATA_DIR=/app/data # Must match the volume mount below
Expand Down Expand Up @@ -101,7 +102,7 @@ services:
# Adjust paths below to match YOUR host system.
- ~/.local/bin:/host-local/bin:ro
# Node global binaries (adjust node version path)
# - ~/.nvm/versions/node/v22.16.0/bin:/host-node/bin:ro
# - ~/.nvm/versions/node/v24.14.1/bin:/host-node/bin:ro
# ── Host config mounts (read-write) ──
- ~/.codex:/host-home/.codex:rw
- ~/.claude:/host-home/.claude:rw
Expand Down
21 changes: 9 additions & 12 deletions docs/TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Common problems and solutions for OmniRoute.
| No logs written to disk | Set `APP_LOG_TO_FILE=true` and verify call log capture is enabled |
| EACCES: permission denied | Set `DATA_DIR=/path/to/writable/dir` to override `~/.omniroute` |
| Routing strategy not saving | Update to v1.4.11+ (Zod schema fix for settings persistence) |
| Login crash / blank page | You may be on Node.js 24+ — see [Node.js Compatibility](#nodejs-compatibility) below |
| Login crash / blank page | Check Node.js version — see [Node.js Compatibility](#nodejs-compatibility) below |
| `dlopen` / `slice is not valid mach-o file` (macOS) | Run `cd $(npm root -g)/omniroute/app && npm rebuild better-sqlite3 && omniroute` — see [macOS native module rebuild](#macos-native-module-rebuild) below |
| Proxy "fetch failed" | Ensure proxy config is set at the correct level — see [Proxy Issues](#proxy-issues) below |

Expand All @@ -27,10 +27,7 @@ Common problems and solutions for OmniRoute.

### Login page crashes or shows "Module self-registration" error

**Cause:** You are running a Node.js version outside OmniRoute's approved secure runtime floor. Two cases matter:

1. **Node.js 24+**: `better-sqlite3` is not supported here and startup can fail hard.
2. **Older Node 20/22 patch levels**: the runtime may start, but it falls below the patched security floor OmniRoute now requires.
**Cause:** You are running a Node.js version outside OmniRoute's approved secure runtime floor. The most common case is running an older Node 20, 22, or 24 patch level that falls below the patched security floor OmniRoute requires.

**Symptoms:**

Expand All @@ -40,16 +37,16 @@ Common problems and solutions for OmniRoute.

**Fix:**

1. Install a patched Node.js 22 LTS release (recommended):
1. Install a supported Node.js LTS release (recommended: Node.js 24.x):
```bash
nvm install 22.22.2
nvm use 22.22.2
nvm install 24
nvm use 24
```
2. Verify your version: `node --version` should show `v22.22.2` or newer on the 22.x LTS line
2. Verify your version: `node --version` should show `v24.0.0` or newer on the 24.x LTS line
3. Reinstall OmniRoute: `npm install -g omniroute`
4. Restart: `omniroute`

> **Supported secure versions:** `>=20.20.2 <21` or `>=22.22.2 <23`. Node.js 24+ is **not supported**.
> **Supported secure versions:** `>=20.20.2 <21`, `>=22.22.2 <23`, or `>=24.0.0 <25`. Node.js 24.x LTS (Krypton) is fully supported.

### macOS: `dlopen` / "slice is not valid mach-o file"

Expand All @@ -64,7 +61,7 @@ Common problems and solutions for OmniRoute.
- Full example:

```
dlopen(/Users/<user>/.nvm/versions/node/v24.13.1/lib/node_modules/omniroute/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node, 0x0001): tried: '...' (slice is not valid mach-o file)
dlopen(/Users/<user>/.nvm/versions/node/v24.14.1/lib/node_modules/omniroute/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node, 0x0001): tried: '...' (slice is not valid mach-o file)
```

**Fix — rebuild for your local environment (no Node.js downgrade required):**
Expand All @@ -75,7 +72,7 @@ npm rebuild better-sqlite3
omniroute
```

> **Note:** This recompiles the native binding against your local Node.js version and CPU architecture, resolving the binary mismatch. The officially supported secure range is now **`>=20.20.2 <21` or `>=22.22.2 <23`** (`engines` field in `package.json`). If you are on Node.js 24, the rebuild may silence this specific startup error but other issues can still occur — moving to a patched Node.js 22 LTS release remains the recommended path.
> **Note:** This recompiles the native binding against your local Node.js version and CPU architecture, resolving the binary mismatch. The officially supported range is **`>=20.20.2 <21`, `>=22.22.2 <23`, or `>=24.0.0 <25`** (`engines` field in `package.json`). Node.js 24.x LTS (Krypton) is fully supported with `better-sqlite3` v12.x.

---

Expand Down
Loading