Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
344 commits
Select commit Hold shift + click to select a range
133dd00
docs: fill documentation gaps for v3.8.0 features
diegosouzapw May 15, 2026
4a84ab9
feat(termux): Android/Termux headless support (#2273)
t-way666 May 15, 2026
47de3bf
docs(changelog): add entries for PRs #2269, #2271, #2273
diegosouzapw May 15, 2026
ed19c82
feat(cli): fase 8.4 — profiles/contexts (omniroute config contexts)
diegosouzapw May 15, 2026
1515287
Merge remote-tracking branch 'origin/feat/v3.8.0-features' into relea…
diegosouzapw May 15, 2026
b329cfc
feat(cli): fase 8.13 — self-heal native deps (omniroute runtime check…
diegosouzapw May 15, 2026
27f7e5c
feat(cli): fase 8.3 — i18n completude e linter check-cli-i18n
diegosouzapw May 15, 2026
5072b82
feat(skills): add 3 operational SKILL.md manifests + AI Skills dashbo…
diegosouzapw May 15, 2026
b3cfac3
feat(cli): fase 8.8 — system tray + autostart (omniroute serve --tray)
diegosouzapw May 15, 2026
59128b6
feat(cli): TUI dashboard interativo e menu de interface (Fases 8.10+8.9)
diegosouzapw May 15, 2026
79438ef
feat(cli): 8.12/8.14 — testes server-side e doc CLI_TOKEN_AUTH
diegosouzapw May 15, 2026
d28d756
feat(cli): fase 8.11 — REPL interativo multi-turn com Ink (runRepl, s…
diegosouzapw May 15, 2026
cd62899
feat(cli): fase 9.3 — codegen de comandos a partir do OpenAPI spec (o…
diegosouzapw May 15, 2026
b3e5ee3
feat(cli): fase 9.4 — plugin system (omniroute-cmd-*)
diegosouzapw May 15, 2026
1dd1726
fix(skills): harden clipboard copy + add i18n key for AI Skills tab
diegosouzapw May 15, 2026
956208c
Merge PR #2276: feat(skills): add 3 operational SKILL.md manifests + …
diegosouzapw May 15, 2026
d577759
fix(cli): R1+R2 — keys.mjs HTTP-first + eliminar SQL cru + policy/exp…
diegosouzapw May 15, 2026
d8445ca
feat(cli): R3 — tunnel status/logs/info/rotate (completa spec 8.7 tun…
diegosouzapw May 15, 2026
8a471e7
feat(cli): R4 — backup --cloud/--encrypt/--exclude/--retention/auto (…
diegosouzapw May 15, 2026
dcc21f1
feat(cli): R5 — test --latency/--repeat/--compare/--save (spec 8.7 te…
diegosouzapw May 15, 2026
2faf360
fix(cli): R6 — i18n para strings literais em logs.mjs e tunnel.mjs
diegosouzapw May 15, 2026
e3e962d
feat(cc-bridge): config-driven system block transforms (closes #2260)
mrmm May 15, 2026
09db112
feat(cli): R7 — OAuthFlow/EvalWatch/ProvidersTestAll TUI + integração…
diegosouzapw May 15, 2026
69a2b27
fix(cli): code-review — C1/C2/C3/I1/I3/I4/I5/m1/m2/m4
diegosouzapw May 15, 2026
5e94927
fix(authz/clientApi): fall through to anonymous on invalid bearer whe…
diegosouzapw May 15, 2026
f320caa
fix(cli): code-review-2 — I1/I2/M1/M2
diegosouzapw May 15, 2026
eba07d8
chore: tidy up deprecated models from windsurf provider (#2279)
backryun May 15, 2026
0cc6fec
Merge PR #2280: feat(cli): CLI v4 — Commander.js, 50+ commands, TUI, …
diegosouzapw May 15, 2026
9a9561f
fix(build): add next-themes + sql.js deps and mark sql.js as webpack …
diegosouzapw May 15, 2026
1c949c2
fix(build): add node-machine-id to serverExternalPackages
diegosouzapw May 15, 2026
bb0ec76
fix(machineToken): use require() for node-machine-id to survive webpa…
diegosouzapw May 15, 2026
634b4fe
feat(system-transforms): generic per-provider DSL closing OpenWebUI b…
mrmm May 15, 2026
0edf90b
feat(skills): add 5 CLI skills + AgentSkills / OmniSkills dashboard p…
diegosouzapw May 15, 2026
855eeb3
feat(claude-web): implement session-based executor with auto-refresh …
oyi77 May 15, 2026
0d09858
chore: remove junk files from PR #2283 squash merge
diegosouzapw May 15, 2026
d0d8638
refactor(system-transforms): caveman-review cleanup + logging
mrmm May 15, 2026
4d000f1
fix: strip _claudeCodeRequiresLowercaseToolNames before serialization
mrmm May 15, 2026
79d0357
feat(cli): suporte i18n completo — 42 locales, --lang flag, config la…
diegosouzapw May 15, 2026
875c8f7
feat(system-transforms): per-op UI editor + claude opt-in default + r…
mrmm May 15, 2026
0f65657
refactor(system-transforms): use shared UI primitives + drop dead i18…
mrmm May 15, 2026
69f0735
fix(cc-bridge): use idempotencyKey in prepend/append block ops
mrmm May 15, 2026
149e901
fix(ui): Claude tile disablable + strip issue refs + clean provider t…
mrmm May 15, 2026
4fde71a
feat(ui): separate system-block transforms into own Card + add/remove…
mrmm May 15, 2026
a6af54a
fix(ui): provider dropdown from AI_PROVIDERS catalog + shared Button …
mrmm May 15, 2026
fa1d1fe
fix(sse): remove dead-code flag leak in claudeCodeToolRemapper
May 15, 2026
4f01a89
fix(sse): strip stale content-encoding/length/transfer-encoding from …
May 15, 2026
68ca8bf
refactor(dashboard): remove page-body headers, add topology multi-rin…
diegosouzapw May 15, 2026
291c1ff
feat(skills): add 5 CLI skills + split AgentSkills / OmniSkills pages
diegosouzapw May 15, 2026
58c2cfc
fix(skills): use useCopyToClipboard hook in AgentSkills for HTTP fall…
diegosouzapw May 15, 2026
3975d2c
feat(dashboard): complete header descriptions for all sidebar pages
diegosouzapw May 15, 2026
b39d0d8
refactor(dashboard): fix dark theme + two-column layout on agent-skil…
diegosouzapw May 15, 2026
79e19b5
test(system-transforms): UI ↔ server defaults parity snapshot
mrmm May 15, 2026
b653cfd
feat(ui): collapsible provider tiles + ops + move Add provider to top
mrmm May 15, 2026
93526e3
refactor(dashboard): remove remaining redundant padding/max-width acr…
diegosouzapw May 15, 2026
1daf15e
feat(ui): optimistic save + per-op descriptions + per-field hints
mrmm May 15, 2026
a045ddc
feat(dashboard): tabs → pages, collapsible sidebar, narrower width, t…
diegosouzapw May 15, 2026
8e5c1d9
fix(migrations): resolve version collisions and add schema repair for…
hartmark May 15, 2026
a5f3301
feat(dashboard): accordion sidebar + OmniProxy section + pin behavior
diegosouzapw May 15, 2026
07f3b71
style(sse): condense flag-removal NOTE comment (review feedback)
May 15, 2026
7b73ac4
fix(db): add quota_window_thresholds_json to SCHEMA_SQL and in-memory…
hartmark May 15, 2026
523f674
feat(deepseek-web): full DeepSeek web API executor with PoW solver
oyi77 May 16, 2026
da82188
refactor(dashboard): reestruturação completa do sidebar — 9 seções, s…
diegosouzapw May 16, 2026
35cb91c
More permissive cookie auth so /dashboard/batch works with REQUIRE_AP…
hartmark May 16, 2026
15d20b7
Fix so we have delete on batches instead of files and fix so delete w…
hartmark May 16, 2026
cfc6be6
feat(home): remove Providers Overview card; rename API Manager → API …
diegosouzapw May 16, 2026
acc9a87
fix(sse): strip stale content-encoding/length/transfer-encoding from …
diegosouzapw May 16, 2026
b060ebb
fix(sse): remove dead-code flag leak in claudeCodeToolRemapper (#2290)
diegosouzapw May 16, 2026
baefcd0
fix: remove implicit API key request caps (#2289)
diegosouzapw May 16, 2026
8db3fec
build(deps): bump actions/checkout from 4 to 6 (#2288)
diegosouzapw May 16, 2026
5221a81
feat(cc-bridge): config-driven per-provider system-block transform DS…
diegosouzapw May 16, 2026
72afecf
fix(migrations): resolve version collisions and add batch deletion AP…
diegosouzapw May 16, 2026
5c41961
feat(deepseek-web): full DeepSeek web API executor with PoW solver (#…
diegosouzapw May 16, 2026
dc6e7b0
refactor(dashboard): mover toggle/transport para páginas MCP e A2A, l…
diegosouzapw May 16, 2026
00e19f3
refactor(dashboard): remover card de intro do api-manager e mover bot…
diegosouzapw May 16, 2026
a0d766d
refactor(dashboard): layout accordion para endpoint — barra de URLs a…
diegosouzapw May 16, 2026
feb263f
fix(dashboard): clean up endpoint card URL redundancy and tunnel pers…
diegosouzapw May 16, 2026
8b555d7
fix(dashboard): Tailscale detection, icon fix, and LAN IP display
diegosouzapw May 16, 2026
dc6c276
refactor(dashboard): streamline endpoint card expanded panels and inl…
diegosouzapw May 16, 2026
c9c6c63
feat(batch): global rate-limit header cache with 60s TTL + 24h retry …
diegosouzapw May 16, 2026
6a51b96
refactor(dashboard): remove Integration Surface card, move Cloud Omni…
diegosouzapw May 16, 2026
06bdc31
refactor(dashboard): rename MCP/A2A pages to *Server, wrap headers in…
diegosouzapw May 16, 2026
132658d
Merge pull request #2290 from thepigdestroyer/fix/remove-dead-claudec…
diegosouzapw May 16, 2026
718637c
Merge pull request #2286 from mrmm/mm/issue-2260-cc-bridge-sanitization
diegosouzapw May 16, 2026
5848fe3
Merge pull request #2294 from hartmark/fix/migration-version-collisions
diegosouzapw May 16, 2026
3046705
Merge pull request #2295 from oyi77/feature/deepseek-web-executor-v2
diegosouzapw May 16, 2026
beb43a8
feat(dashboard): add A2A audit page, stats bar on MCP audit, fix side…
diegosouzapw May 16, 2026
50ad3b0
fix(translator): map developer→system by default for non-openai provi…
diegosouzapw May 16, 2026
124ed82
fix(api/combos): add API-key-safe GET /v1/combos endpoint (#2300)
diegosouzapw May 16, 2026
52222aa
fix(embeddings/registry): add DeepInfra to embedding provider registr…
diegosouzapw May 16, 2026
56d6ad6
fix(opencode-zen): flag qwen3.6-plus(-free) as targetFormat=claude (#…
diegosouzapw May 16, 2026
b3baa0e
docs(changelog): document #2281 #2300 #2298 #2292 fixes
diegosouzapw May 16, 2026
3674979
feat(endpoints): grid layout for Available Endpoints card, add 4 miss…
diegosouzapw May 16, 2026
9efad44
docs(changelog): add missing entries for PRs #2286, #2288, #2289, #22…
diegosouzapw May 16, 2026
91af593
feat(dashboard,sse): add OpenCode Free provider (noAuth, public endpo…
diegosouzapw May 16, 2026
51918cb
feat(dashboard): providers page — custom section to top, smaller card…
diegosouzapw May 16, 2026
9ccb7b1
fix(dashboard,sse): correct opencode free provider and free section d…
diegosouzapw May 16, 2026
2af6923
fix(ui): v3.8.0 polish — connections border, sticky tabs, EN translat…
mrmm May 16, 2026
c15ea65
docs(changelog): add entry for PR #2305
diegosouzapw May 16, 2026
04335c5
fix: remove implicit API key request caps (#2289)
josephvoxone May 16, 2026
b3b006b
fix(dashboard): compact empty state, remove free badges, shrink toggle
diegosouzapw May 16, 2026
ec138c6
fix(auth+build): Bearer manage scope on management routes + lazy-load…
mrmm May 16, 2026
f80de41
docs(changelog): add entry for PR #2308
diegosouzapw May 16, 2026
f224b9f
fix(dashboard): correct dot colors per provider type + search/legend bar
diegosouzapw May 16, 2026
789a263
feat(dashboard): provider summary card, free test btn, sidebar order,…
diegosouzapw May 16, 2026
4913439
fix(dashboard): fix search icon alignment and widen search field in p…
diegosouzapw May 16, 2026
1640530
fix(config): replace wildcard 192.168.* with exact IP in allowedDevOr…
diegosouzapw May 16, 2026
ebef164
chore: Imporve cohere provider support (#2313)
backryun May 16, 2026
8eb721e
fix(claude): guard orphan tool_use/tool_result pairs before upstream …
mrmm May 16, 2026
dae0501
fix: remove count from batch removal (#2309)
hartmark May 16, 2026
bbfd386
chore(changelog): update for PRs #2313, #2312, #2309
diegosouzapw May 16, 2026
56b0ea9
fix(endpoint): replace nested <button> with <div role=button> in tunn…
diegosouzapw May 16, 2026
08f03a0
fix(auth): stop retrying unrecoverable token refresh failures
diegosouzapw May 16, 2026
b83d1a0
feat(provider): add Gitlawb Opengateway provider (xiaomi-mimo + gmi-c…
oyi77 May 16, 2026
d7dcd23
feat(provider): add hasFree flag to friendliai, chutes, featherless-ai
oyi77 May 16, 2026
7e9efe7
chore(changelog): add missing entries #2283, #2284, #2285, #2279, #22…
diegosouzapw May 16, 2026
debf7cb
feat(ui): add shared components + providers page category filter
oyi77 May 16, 2026
8669bf6
feat(ui): add InfoTooltip and PresetSlider shared components
oyi77 May 16, 2026
801f3c9
feat(ui): add simple/advanced mode switch to Caveman page
oyi77 May 16, 2026
3757e6d
feat(ui): add simple/advanced mode switch to RTK page
oyi77 May 16, 2026
8afaca4
feat(i18n): add simple/advanced mode keys for Caveman and RTK pages
oyi77 May 16, 2026
13ca2cc
feat(ui): add sidebar item subtitles for confusing navigation items
oyi77 May 16, 2026
8a23c55
feat(ui): replace cryptic error badges with human-readable labels
oyi77 May 16, 2026
fd28e77
fix(dashboard): show no-auth card for free providers instead of OAuth…
diegosouzapw May 17, 2026
42011ab
fix(auth): include connection id in token health check credentials
diegosouzapw May 17, 2026
7fdcba9
fix(auth): return synthetic credentials for noAuth free providers
diegosouzapw May 17, 2026
5a7df8a
fix: harden stream readiness and build output (#2317)
dhaern May 17, 2026
926ff2b
chore(providers): refresh provider metadata and ordering (#2318)
backryun May 17, 2026
cf3262a
alibaba provider consolidation (#2319)
backryun May 17, 2026
2b624b1
chore(changelog): add entries for PRs #2317, #2318, #2319
diegosouzapw May 17, 2026
a4a870c
feat(ui): add newbie-friendly UX improvements across dashboard
oyi77 May 17, 2026
317d146
Merge release/v3.8.0 into refactor/pages
diegosouzapw May 17, 2026
ee2a698
Merge pull request #2315 from diegosouzapw/refactor/pages
diegosouzapw May 17, 2026
43d4ea0
Merge pull request #2316 from oyi77/feat/ui-rework
diegosouzapw May 17, 2026
440ca8e
Merge pull request #2314 from oyi77/feat/gitlawb-opengateway
diegosouzapw May 17, 2026
6fa745e
chore: untrack .claude/scheduled_tasks.lock + ignore runtime artifacts
diegosouzapw May 17, 2026
b2fe307
chore: narrow .claude/ gitignore to runtime files only
diegosouzapw May 17, 2026
f57dcba
Merge pull request #2248 from diegosouzapw/release/v3.8.0
diegosouzapw May 17, 2026
84cde3d
chore(release): back-merge main into release/v3.8.0 after v3.8.0 cut
diegosouzapw May 17, 2026
ca8f492
fix(i18n): add missing providers.{allProviders,audioProviders,showFre…
diegosouzapw May 17, 2026
a45d919
fix(security): resolve CodeQL ReDoS + URL sanitization alerts
diegosouzapw May 17, 2026
fc9f8d9
feat(providers): bulk add API keys with Single/Bulk tabs
diegosouzapw May 17, 2026
02564d5
chore(changelog): update missing entries for recent PRs and commits
diegosouzapw May 17, 2026
634f50a
feat(codex-auth): rename export to auth-{email}.json and gate Apply L…
diegosouzapw May 17, 2026
de5434a
fix(providers): fix missing i18n keys and add 'Add Provider' button t…
diegosouzapw May 17, 2026
8a6d681
feat(codex): import single Codex auth.json as OAuth connection
diegosouzapw May 17, 2026
072e38e
Merge pull request #2333 from diegosouzapw/worktree-fix+providers-mis…
diegosouzapw May 17, 2026
25f3fe1
feat(codex): bulk import Codex auth.json — multi-file, paste, ZIP
diegosouzapw May 17, 2026
cf0006f
Merge pull request #2332 from diegosouzapw/feat/codex-auth-apply-modal
diegosouzapw May 17, 2026
3227c9f
chore(merge): resolve page.tsx conflict — keep ImportCodexAuthModal a…
diegosouzapw May 17, 2026
6e6cb5a
Merge pull request #2336 from diegosouzapw/feat/codex-auth-import-single
diegosouzapw May 17, 2026
3748b02
chore(merge): resolve conflicts for bulk import — keep both schemas a…
diegosouzapw May 17, 2026
9c69a20
Merge pull request #2343 from diegosouzapw/feat/codex-auth-import-bulk
diegosouzapw May 17, 2026
891a9e4
Merge pull request #2337 from diegosouzapw/worktree-fix+providers-mis…
diegosouzapw May 17, 2026
0f15797
fix(v1/messages): default to non-stream for Claude format when ambigu…
thepigdestroyer May 17, 2026
696e16b
fix(claude): cap-aware thinking budget fit for max_tokens (#2327)
thepigdestroyer May 17, 2026
0e2d045
fix: honor Codex reasoning suffix aliases (#2335)
terence71-glitch May 17, 2026
7491974
fix(translator): use reasoning cache before empty string fallback for…
herjarsa May 17, 2026
c245103
feat(providers): add GitHub Models as free provider (#2344)
oyi77 May 17, 2026
aefd9bb
feat(providers): add Hackclub AI as free provider (#2339)
oyi77 May 17, 2026
1f27c34
chore: improve huggingface provider support (#2322)
backryun May 17, 2026
b191173
Fix Providers empty state blocking first provider setup
slider23 May 17, 2026
193e7a6
feat(routing): LGKP remembers last good account per provider (#2338)
oyi77 May 17, 2026
1be18f5
feat(providers): add Microsoft Copilot Web wrapper (#2340)
oyi77 May 17, 2026
9b8dc4d
docs(changelog): add entries for PRs #2326 #2327 #2335 #2349 #2344 #2…
diegosouzapw May 17, 2026
db8a2dc
fix: preserve Claude Code messages on direct routes (#2351)
terence71-glitch May 18, 2026
d6d585e
fix: extract flat cached_tokens/reasoning_tokens from OpenAI-compatib…
TF0rd May 18, 2026
749b945
docs(changelog): add entries for PRs #2351 #2350
diegosouzapw May 18, 2026
6d4ee4f
fix: allow bracketed combo names (#2354)
congvc-dev May 18, 2026
7a40e0f
docs(changelog): add entry for PR #2354
diegosouzapw May 18, 2026
f636442
fix: emit stream errors in client protocol (#2355)
dhaern May 18, 2026
4eb5ba5
docs(changelog): add entry for PR #2355
diegosouzapw May 18, 2026
09fb5cd
feat(oauth): add Claude Code auth import/export libs + tests (PR1)
diegosouzapw May 18, 2026
c6a5160
feat(oauth): add Gemini CLI auth import/export libs + CLI_TOOLS regis…
diegosouzapw May 18, 2026
3786e92
feat(api): add Claude Code auth import/export API routes + schemas (PR2)
diegosouzapw May 18, 2026
877aafd
feat(api): add Gemini CLI auth import/export API routes + schemas (PR2)
diegosouzapw May 18, 2026
75c1d2e
feat(dashboard): add Claude Code auth import/export UI + i18n (PR3)
diegosouzapw May 18, 2026
b3cb5b6
feat(dashboard): add Gemini CLI auth import/export UI + i18n (PR3)
diegosouzapw May 18, 2026
855dc86
fix(dashboard): add missing comma in Gemini i18n JSON (PR3)
diegosouzapw May 18, 2026
1e709fd
Merge feat/claude-auth-libs (PR1 Claude) into release/v3.8.0
diegosouzapw May 18, 2026
b9126e5
Merge feat/claude-auth-api-routes (PR2 Claude) into release/v3.8.0
diegosouzapw May 18, 2026
0b2085d
Merge feat/claude-auth-ui (PR3 Claude) into release/v3.8.0
diegosouzapw May 18, 2026
f67c7d9
Merge feat/gemini-auth-libs (PR1 Gemini) into release/v3.8.0
diegosouzapw May 18, 2026
1dae73c
Merge feat/gemini-auth-api-routes (PR2 Gemini) into release/v3.8.0
diegosouzapw May 18, 2026
2bbd0ff
Merge feat/gemini-auth-ui (PR3 Gemini) into release/v3.8.0
diegosouzapw May 18, 2026
6c488d6
fix: avoid redundant Claude Code message clone (#2362)
terence71-glitch May 18, 2026
41b7f13
feat(providers): add Replicate as free provider (#2364)
oyi77 May 18, 2026
dd24571
feat(providers): add Veo AI Free as web wrapper provider (#2366)
oyi77 May 18, 2026
c4fe3d6
feat(content): extend providers with video, audio, TTS, music capabil…
oyi77 May 18, 2026
b464946
docs(changelog): credit contributors for PRs 2362, 2364, 2366, 2369
diegosouzapw May 18, 2026
5da9b1b
fix(auto-routing): replace bare getSettings() with getCachedSettings …
diegosouzapw May 18, 2026
2af324f
fix(docker): ship Dashboard Docs markdown in the container image (#2348)
diegosouzapw May 18, 2026
fe3ab7a
fix(combo/validator): accept reasoning_content as valid output (#2341)
diegosouzapw May 18, 2026
d62b128
fix(account-fallback): classify Anthropic 'Usage Limit Reached' as qu…
diegosouzapw May 18, 2026
9c5b75e
test(codex): regression guard for effort suffix priority (#2331)
diegosouzapw May 18, 2026
33928af
fix(ui/tooltip): render in portal + clamp to viewport (#2352)
diegosouzapw May 18, 2026
775c87b
docs(changelog): document #2321 #2341 #2346 #2348 #2352 fixes
diegosouzapw May 18, 2026
400dbc3
fix(claude-oauth): enable system-transforms pipeline for native claud…
May 18, 2026
06b34cc
fix(providers): register llm7 + route Cohere via compatibility layer …
diegosouzapw May 18, 2026
f2e3688
fix(combo): guard target.modelStr against non-string before .startsWi…
diegosouzapw May 18, 2026
b17fd87
fix(rate-limiter): Redis is now opt-in via REDIS_URL (#2357)
diegosouzapw May 18, 2026
531c9de
docs(changelog): document #2357 #2359 #2360 #2361 fixes
diegosouzapw May 18, 2026
e50126e
feat(@omniroute/opencode-provider): expand config helpers, MCP entry,…
mrmm May 18, 2026
0c44185
fix(@omniroute/opencode-provider): address gemini-code-assist review
mrmm May 18, 2026
57354ac
feat(@omniroute/opencode-provider): model capabilities, agent block, …
mrmm May 18, 2026
55160bc
feat(content): add Haiper, Leonardo, Ideogram, Suno, Udio providers
oyi77 May 18, 2026
32b3549
test(content): add unit tests for 5 new content providers
oyi77 May 18, 2026
6401faf
fix(content): address Gemini review — error checks, auth consistency
oyi77 May 18, 2026
85a4bac
Merge pull request #2375 from mrmm/mm/opencode-provider-v3
diegosouzapw May 18, 2026
5ed96f5
fix(routing): implement embedding combos, local provider validation b…
diegosouzapw May 18, 2026
b7316d5
style(providers): reformat provider validation calls for readability
diegosouzapw May 18, 2026
5098d8f
chore: resolve conflicts with release/v3.8.0
diegosouzapw May 18, 2026
985973b
Merge pull request #2377 from oyi77/feat/5-new-content-providers
diegosouzapw May 18, 2026
5ce3f7f
chore: merge release/v3.8.0 into PR branch
diegosouzapw May 18, 2026
72900be
Merge pull request #2370 from thepigdestroyer/fix/claude-oauth-system…
diegosouzapw May 18, 2026
04d44f6
fix(security): sanitize error messages, fix ReDoS patterns, harden OA…
diegosouzapw May 18, 2026
d291834
fix(ci): use explicit test path in opencode-provider to fix glob on L…
diegosouzapw May 18, 2026
0c4d50a
fix(ci): fix broken doc links and update brace-expansion to resolve m…
diegosouzapw May 18, 2026
eb83eaf
refactor(dashboard): nav, providers, endpoint, runtime, quota, pricin…
diegosouzapw May 18, 2026
44d9aba
fix: add tool_use/tool_result adjacency guard for Claude API
oyi77 May 18, 2026
62652b1
fix: also apply adjacency guard inside compressContext
oyi77 May 18, 2026
7e02b44
fix(gemini-web): address code review feedback
oyi77 May 18, 2026
c9dc205
fix(ci): add Zod validation to cli-tools routes and refresh i18n tran…
diegosouzapw May 18, 2026
62f6097
fix(types): add explicit cast to silence TS7053 on FREE_PROVIDERS str…
diegosouzapw May 18, 2026
1c4d850
fix(build): import Monaco ESM API to fix webpack nls.messages-loader …
diegosouzapw May 18, 2026
3470be8
fix(ci): update pack-artifact-policy to allow new cli-helper and open…
diegosouzapw May 18, 2026
fa3ee31
fix(dashboard): address PR #2384 follow-up review issues (#2389)
diegosouzapw May 19, 2026
3394ded
fix: tool_use without adjacent tool_result causes Claude 400 (#2383)
oyi77 May 19, 2026
f43badc
model: Add Composer 2.5 to Cursor Provider (#2381)
backryun May 19, 2026
0de964d
feat(providers): add Gemini Web cookie-based provider (#2380)
oyi77 May 19, 2026
c24b0f9
Merge pull request #2323 from diegosouzapw/release/v3.8.0
diegosouzapw May 19, 2026
fec6164
fix(security): resolve CodeQL alerts #243/#244/#245
diegosouzapw May 19, 2026
12b34d4
Merge pull request #2391 from diegosouzapw/fix/codeql-243-244-245
diegosouzapw May 19, 2026
595e9e3
docs(readme): restore 9router acknowledgment
diegosouzapw May 19, 2026
205ef64
Merge pull request #2393 from diegosouzapw/chore/restore-9router-ackn…
diegosouzapw May 19, 2026
6fcc99b
fix(security): switch sessionPoolKey to HMAC to clear CodeQL #246
diegosouzapw May 19, 2026
cfa948f
Merge pull request #2394 from diegosouzapw/fix/codeql-246-hmac
diegosouzapw May 19, 2026
10c8f32
fix(security): drop hashing in sessionPoolKey to clear CodeQL #247
diegosouzapw May 19, 2026
e463d79
Merge pull request #2396 from diegosouzapw/fix/codeql-247-no-hash
diegosouzapw May 19, 2026
61de0c7
deps: bump electron from 42.0.1 to 42.1.0 in /electron
dependabot[bot] May 19, 2026
2ebc84e
deps: bump the production group with 4 updates
dependabot[bot] May 19, 2026
e1cde14
deps: bump the development group with 4 updates
dependabot[bot] May 19, 2026
1410c50
Merge pull request #2397 from diegosouzapw/dependabot/npm_and_yarn/el…
diegosouzapw May 19, 2026
70d5566
Merge pull request #2398 from diegosouzapw/dependabot/npm_and_yarn/pr…
diegosouzapw May 19, 2026
5fcccc7
Merge pull request #2399 from diegosouzapw/dependabot/npm_and_yarn/de…
diegosouzapw May 19, 2026
18ba194
Merge main into sync-upstream-main-raw
JxnLexn May 19, 2026
90a8716
feat: update Node.js engine version and enhance backup and policy han…
JxnLexn May 19, 2026
091f7fc
feat: implement input sanitization for reasoning items in GithubExecu…
JxnLexn May 19, 2026
8079238
feat: enhance backup and CLI token authentication with improved error…
JxnLexn May 19, 2026
f26f644
fix: update brace-expansion version to 5.0.6 with resolved URL and in…
JxnLexn May 19, 2026
4139104
feat: downgrade electron version to 41.7.0 and update related depende…
JxnLexn May 19, 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
  •  
  •  
  •  
97 changes: 88 additions & 9 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ OMNIROUTE_USE_TURBOPACK=1
# OMNIROUTE_PORT=20128

# Hostname/bind address for the Next.js server.
# Used by: scripts/run-next.mjs (HOST), Playwright runner (HOSTNAME).
# Used by: scripts/dev/run-next.mjs (HOST), Playwright runner (HOSTNAME).
# Default: 0.0.0.0 (HOST) / 127.0.0.1 (HOSTNAME inside tests).
#HOST=0.0.0.0
#HOSTNAME=127.0.0.1
Expand All @@ -111,6 +111,12 @@ NODE_ENV=production
# Default: endpoint-proxy-salt | Change per-deployment for isolation.
MACHINE_ID_SALT=endpoint-proxy-salt

# Salt for deriving CLI machine-ID auth tokens (HMAC-SHA256).
# Used by: src/lib/machineToken.ts — rotates the local CLI auth token without
# touching code. Set to a new value to invalidate existing CLI tokens.
# Default: omniroute-cli-auth-v1
# OMNIROUTE_CLI_SALT=omniroute-cli-auth-v1

# Set true when running behind HTTPS (reverse proxy with TLS termination).
# Used by: src/lib/auth — sets the Secure flag on session cookies.
# Default: false | MUST be true in any non-localhost deployment.
Expand All @@ -137,6 +143,15 @@ ALLOW_API_KEY_REVEAL=false
# Used by: src/lib/compliance/index.ts — suppresses logs for specific keys.
# NO_LOG_API_KEY_IDS=key_abc123,key_def456

# Fallback per-day request budget applied to API keys whose `rate_limits`
# column is null. Default (unset/empty/malformed) preserves the legacy
# 1000/day, 5000/week, 20000/month windows so existing deployments do not
# silently lose rate limiting on upgrade.
# Set explicitly to "0" to opt out entirely (unlimited fallback). Any
# positive integer N enables N/day, 5N/week, 20N/month.
# Used by: src/shared/utils/apiKeyPolicy.ts — checkRateLimit() fallback.
# DEFAULT_RATE_LIMIT_PER_DAY=1000

# Maximum request body size in bytes (rejects larger payloads).
# Used by: src/shared/middleware/bodySizeGuard.ts — prevents oversized uploads.
# Default: 10485760 (10 MB)
Expand Down Expand Up @@ -297,6 +312,11 @@ NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true
# Used by: open-sse/executors — replaces Node.js default TLS fingerprint.
# ENABLE_TLS_FINGERPRINT=true

# Allow the Claude Turnstile Playwright browser context to ignore HTTPS certificate errors.
# Only enable for local debugging or trusted MITM/corporate proxy environments.
# Used by: open-sse/services/claudeTurnstileSolver.ts
# OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS=false


# ═══════════════════════════════════════════════════════════════════════════════
# 9. CLI TOOL INTEGRATION
Expand Down Expand Up @@ -412,6 +432,10 @@ PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES=70
# Used by: open-sse/services/compression/engines/rtk/filterLoader.ts. Default: 0.
#OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=0

# Skip the postinstall native-runtime warm-up (useful in CI / headless installs). Default: 0.
# Used by: scripts/postinstall.mjs.
#OMNIROUTE_SKIP_POSTINSTALL=0

# Force a DB healthcheck regardless of cadence. Default: 0.
# Used by: src/lib/db/core.ts::shouldRunDbHealthCheck().
#OMNIROUTE_FORCE_DB_HEALTHCHECK=0
Expand Down Expand Up @@ -527,6 +551,30 @@ GITHUB_OAUTH_CLIENT_ID=Iv1.b507a08c87ecfe98
# QODER_CLI_WORKSPACE=
# OMNIROUTE_QODER_WORKSPACE=

# ── Blackbox Web validated-token override (issue #2252) ──
# Used by: open-sse/executors/blackbox-web.ts. Blackbox `/api/chat` rejects
# requests whose `validated` field doesn't match the frontend `tk` token,
# returning HTTP 403 even with a valid session cookie + active subscription.
# Set this to the `tk` value exported from app.blackbox.ai's Next.js bundle
# to bypass the random-UUID fallback. Leave empty to keep the legacy behavior.
# BLACKBOX_WEB_VALIDATED_TOKEN=

# ── Vision Bridge OpenAI-compatible endpoint override (issue #2232) ──
# Used by: src/lib/guardrails/visionBridgeHelpers.ts. By default the
# vision-bridge guardrail sends non-Anthropic image-description calls to
# `https://api.openai.com/v1`, which fails with 401 if your operator doesn't
# have an OpenAI key or wants to use a different vision model
# (e.g., `google/gemini-2.0-flash` via the Gemini OpenAI-compat endpoint, or
# any model registered in OmniRoute via the self-loop endpoint).
#
# Set these two env vars to point the bridge at any OpenAI-compatible URL:
# - VISION_BRIDGE_BASE_URL=http://localhost:20128/v1 (OmniRoute self-loop)
# - VISION_BRIDGE_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai
# - VISION_BRIDGE_BASE_URL=https://openrouter.ai/api/v1
# Anthropic models (anthropic/*) keep their dedicated path and are unaffected.
# VISION_BRIDGE_BASE_URL=
# VISION_BRIDGE_API_KEY=

# ─────────────────────────────────────────────────────────────────────────────
# ⚠️ GOOGLE OAUTH (Antigravity, Gemini CLI) & OTHER PROVIDERS — REMOTE SERVERS
# ─────────────────────────────────────────────────────────────────────────────
Expand Down Expand Up @@ -557,19 +605,19 @@ GITHUB_OAUTH_CLIENT_ID=Iv1.b507a08c87ecfe98
# Used by: open-sse/executors/base.ts — buildHeaders() dynamic lookup.
# Update these when providers release new CLI versions to avoid blocks.

CLAUDE_USER_AGENT="claude-cli/2.1.137 (external, cli)"
CODEX_USER_AGENT="codex-cli/0.130.0 (Windows 10.0.26200; x64)"
CLAUDE_USER_AGENT="claude-cli/2.1.143 (external, cli)"
CODEX_USER_AGENT="codex-cli/0.131.0 (Windows 10.0.26200; x64)"
GITHUB_USER_AGENT="GitHubCopilotChat/0.45.1"
ANTIGRAVITY_USER_AGENT="antigravity/1.23.2 darwin/arm64"
KIRO_USER_AGENT="AWS-SDK-JS/3.0.0 kiro-ide/1.0.0"
QODER_USER_AGENT="Qoder-Cli"
QWEN_USER_AGENT="QwenCode/0.15.9 (linux; x64)"
CURSOR_USER_AGENT="Cursor/3.3"
CURSOR_USER_AGENT="Cursor/3.4"
GEMINI_CLI_USER_AGENT="google-api-nodejs-client/10.3.0"

# Override Codex client version sent in headers independently of the
# CODEX_USER_AGENT string. Used by: open-sse/config/codexClient.ts.
# CODEX_CLIENT_VERSION=0.130.0
# CODEX_CLIENT_VERSION=0.131.0


# ═══════════════════════════════════════════════════════════════════════════════
Expand Down Expand Up @@ -656,6 +704,13 @@ GEMINI_CLI_USER_AGENT="google-api-nodejs-client/10.3.0"
# OMNIROUTE_CHATGPT_TLS_TIMEOUT_MS=60000
# OMNIROUTE_CHATGPT_TLS_GRACE_MS=10000

# ── Claude TLS sidecar (Chromium-fingerprinted client) ──
# Used by: open-sse/services/claudeTlsClient.ts — wire-level timeout for
# the bogdanfinn/tls-client koffi binding and the JS-side grace window
# layered on top of it when the native library is wedged.
# OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS=60000
# OMNIROUTE_CLAUDE_TLS_GRACE_MS=10000

# ── Circuit breaker thresholds and reset windows ──
# Used by: open-sse/config/constants.ts → src/lib/resilience/settings.ts.
# Defaults match historical PROVIDER_PROFILES values (post-scaling for
Expand Down Expand Up @@ -772,6 +827,30 @@ APP_LOG_TO_FILE=true
# Default: 256 (Docker) | system default (npm)
# OMNIROUTE_MEMORY_MB=256

# ── CLI helpers (bin/cli/) ──
# Override UI language for CLI output. Accepts BCP-47 locale (e.g. en, pt-BR).
# Falls back to LC_ALL / LC_MESSAGES / LANG / en if unset.
# OMNIROUTE_LANG=en

# Show server logs inline when running in supervised mode (omniroute serve).
# Set to "1" to forward server stdout/stderr to the terminal.
# Equivalent to the --log flag on `omniroute serve`.
# OMNIROUTE_SHOW_LOG=1

# Bearer token injected as x-omniroute-cli-token header for machine-auth (task 8.12).
# Auto-generated on first run if machine-id is available; set manually to override.
# OMNIROUTE_CLI_TOKEN=

# Per-attempt HTTP timeout for CLI → server calls (milliseconds). Default: 30000.
# OMNIROUTE_HTTP_TIMEOUT_MS=30000

# Set to 1 to print retry/backoff details to stderr during CLI commands.
# OMNIROUTE_VERBOSE=0

# Custom directory for CLI plugin discovery (omniroute-cmd-* packages).
# Default: ~/.omniroute/plugins/ Override in dev/CI to point at a local plugin tree.
# OMNIROUTE_PLUGIN_PATH=

# ── Prompt cache (system prompt deduplication) ──
# Used by: open-sse/services — caches identical system prompts across requests.
# PROMPT_CACHE_MAX_SIZE=50 # Max cached entries (default: 50)
Expand Down Expand Up @@ -938,7 +1017,7 @@ APP_LOG_TO_FILE=true
# Used by: open-sse/utils/cursorVersionDetector.ts. Default: probed automatically.
# CURSOR_STATE_DB_PATH=

# Direct Cursor bearer token used by scripts/cursor-tap.cjs (developer tooling).
# Direct Cursor bearer token used by scripts/ad-hoc/cursor-tap.cjs (developer tooling).
# CURSOR_TOKEN=

# Log Responses API SSE-to-JSON translation details.
Expand Down Expand Up @@ -1056,8 +1135,8 @@ APP_LOG_TO_FILE=true
# ═══════════════════════════════════════════════════════════════════════════════
# 25. TEST & E2E
# ═══════════════════════════════════════════════════════════════════════════════
# Used by scripts/run-next-playwright.mjs, scripts/smoke-electron-packaged.mjs,
# scripts/run-ecosystem-tests.mjs and scripts/uninstall.mjs.
# Used by scripts/dev/run-next-playwright.mjs, scripts/dev/smoke-electron-packaged.mjs,
# scripts/dev/run-ecosystem-tests.mjs and scripts/build/uninstall.mjs.
# Production deployments should leave every value below unset.

# E2E bootstrap mode for the Playwright runner. Accepted: auth | fresh | reuse.
Expand Down Expand Up @@ -1099,7 +1178,7 @@ APP_LOG_TO_FILE=true
# Number of parallel translation requests (default 4).
# OMNIROUTE_TRANSLATION_CONCURRENCY=4

# Electron smoke harness (used by scripts/smoke-electron-packaged.mjs).
# Electron smoke harness (used by scripts/dev/smoke-electron-packaged.mjs).
# ELECTRON_SMOKE_URL=http://127.0.0.1:20128/login
# ELECTRON_SMOKE_TIMEOUT_MS=45000
# ELECTRON_SMOKE_SETTLE_MS=2000
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ body:
description: "Which commands or tests should prove this bug is fixed?"
placeholder: |
Example:
- node --import tsx/esm --test tests/unit/my-file.test.ts
- node --import tsx --test tests/unit/my-file.test.ts
- npm run test:coverage
validations:
required: false
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/test_coverage_task.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ body:
description: "List the commands that must pass before this issue can be closed."
placeholder: |
Example:
- node --import tsx/esm --test tests/unit/my-suite.test.ts
- node --import tsx --test tests/unit/my-suite.test.ts
- npm run test:coverage
validations:
required: true
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ jobs:
cache: npm
- run: npm ci
- run: npm run check:node-runtime
- run: node --import tsx/esm --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts
- run: node --import tsx --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts

node-24-compat:
name: Node 24 Compatibility (${{ matrix.shard }}/2)
Expand All @@ -221,7 +221,7 @@ jobs:
- run: npm ci
- run: npm run check:node-runtime
- run: npm run build
- run: node --import tsx/esm --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts
- run: node --import tsx --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts

node-26-compat:
name: Node 26 Compatibility (${{ matrix.shard }}/2)
Expand All @@ -245,7 +245,7 @@ jobs:
- run: npm ci
- run: npm run check:node-runtime
- run: npm run build
- run: node --import tsx/esm --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts
- run: node --import tsx --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts

test-coverage:
name: Coverage
Expand Down Expand Up @@ -452,7 +452,7 @@ jobs:
cache: npm
- run: npm ci
- run: npm run check:node-runtime
- run: node --import tsx/esm --test --test-force-exit --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/integration/*.test.ts
- run: node --import tsx --test --test-force-exit --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/integration/*.test.ts

test-security:
name: Security Tests
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 1

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 1

Expand Down
61 changes: 61 additions & 0 deletions .github/workflows/opencode-provider-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: opencode-provider CI

on:
push:
branches: [main, release/v3.8.0]
paths:
- "@omniroute/opencode-provider/**"
pull_request:
branches: [main, release/v3.8.0]
paths:
- "@omniroute/opencode-provider/**"
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

defaults:
run:
working-directory: "@omniroute/opencode-provider"

jobs:
test:
name: Test (Node ${{ matrix.node }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node: ["20", "22", "24"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: npm
cache-dependency-path: "@omniroute/opencode-provider/package-lock.json"
- run: npm ci
- run: npm test

build:
name: Build
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
cache-dependency-path: "@omniroute/opencode-provider/package-lock.json"
- run: npm ci
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: opencode-provider-dist
path: "@omniroute/opencode-provider/dist"
retention-days: 7
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
omnirouteCloud/
omnirouteSite/

# Claude Code local state — runtime files only; shared commands at .claude/commands/ are tracked
.claude/scheduled_tasks.lock
.claude/scheduled_tasks/
.claude/sessions/
.claude/state.json

# Root-level underscore-prefixed directories (private/draft — never commit)
/_*/

Expand Down Expand Up @@ -76,6 +82,7 @@ open-sse/test/*
.github/instructions/codacy.instructions.md

# Playwright
.playwright-mcp/
test-results/
playwright-report/
blob-report/
Expand Down
3 changes: 3 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ npm run check:any-budget:t11
# Strict env-doc sync (FASE 2)
node scripts/check/check-env-doc-sync.mjs

# CLI i18n consistency check — all t() keys must exist in en.json (FASE 8.3)
node scripts/check/check-cli-i18n.mjs

# i18n docs drift advisory (FASE 5) — warn-only on pre-commit; CI enforces strict.
node scripts/i18n/check-translation-drift.mjs --warn || \
echo "⚠️ i18n drift detected. Run 'npm run i18n:run' to update locale mirrors."
Expand Down
Loading
Loading