Skip to content

feat(sse): restrict auto-combo no-auth pool to an allowlist (opencode, felo) - #8183

Merged
diegosouzapw merged 4 commits into
release/v3.8.49from
feat/autocombo-noauth-opencode-only
Jul 23, 2026
Merged

diegosouzapw merged 4 commits into
release/v3.8.49from
feat/autocombo-noauth-opencode-only

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented Jul 22, 2026 •

Copy link
Copy Markdown
Collaborator

Objetivo

Restringir quais provedores no-auth (keyless) entram automaticamente no pool do auto-combo (auto/*) numa instalação nova, deixando apenas os que funcionam de fato sem credenciais.

Contexto

Antes, o pool do auto-combo incluía todos os no-auth chat providers sem qualquer configuração: opencode, duckduckgo-web, felo-web, [provider removed at its operator's request], chipotle, aihorde, mimocode, auggie. Vários deles não respondem sem credencial/ambiente adequado, poluindo o roteamento automático com alvos que falham.

Validação na VPS de referência (.15)

Teste real (/v1/chat/completions) por provider no-auth:

Provider HTTP Veredito
opencode 200 ✅ funciona
felo-web 200 (2 rounds) ✅ funciona
duckduckgo-web 429 rate-limit persistente (VQD)
[provider removed at its operator's request] 403 Vercel bloqueia o IP egress da VPS
chipotle 502 fetch failed
aihorde 401 anon key rejeitada

Mudança

  • Nova allowlist em open-sse/services/autoCombo/virtualFactory.ts:
    const AUTO_COMBO_NOAUTH_ALLOWLIST = new Set<string>(["opencode", "felo-web"]);
    verificada em isChatAutoComboNoAuthProvider.
  • Escopo cirúrgico: os provedores excluídos continuam listados e usáveis por chamada direta (ddgw/…, [removed-provider]/…, etc.) — apenas deixaram de ser auto-roteados. Readicionar = incluir o id no set.
  • Nenhum provedor pago é afetado (aquele caminho depende de provider_connections, que não existe em instalação nova).

Testes

  • Novo guard: tests/unit/noauth-autocombo-allowlist.test.ts — 3 casos, incluindo every noauth candidate ∈ allowlist (pega qualquer no-auth que vaze no futuro). Escrito TDD: falhava na baseline (todos entravam), passa após a allowlist.
  • Atualizado tests/unit/virtual-auto-combo.test.ts para a nova política.
  • Verde: novo guard 3/3 · virtual-auto-combo 10/10 · noauth-exclude-7622 3/3 · vitest autoCombo 80/80 · integração combo-matrix/auto 2/2 · typecheck:core limpo · lint limpo.

…, felo)

The auto/* candidate pool auto-included every keyless (no-auth) provider
(duckduckgo-web, felo-web, theoldllm, chipotle, aihorde, mimocode, auggie)
without any configuration. On the reference egress (VPS .15) only opencode
and felo-web answer 200 reliably without credentials: duckduckgo 429 (VQD
rate limit), theoldllm 403 (Vercel egress block), chipotle 502, aihorde 401.

Gate no-auth auto-combo membership behind an allowlist
(AUTO_COMBO_NOAUTH_ALLOWLIST = {opencode, felo-web}) checked in
isChatAutoComboNoAuthProvider. The excluded providers remain fully usable
via direct <alias>/<model> calls; they are just no longer auto-routed to.
Re-add an id to the allowlist to bring it back.

Regression guard: tests/unit/noauth-autocombo-allowlist.test.ts.
Updates the virtual-auto-combo policy test to the new allowlist.
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

…stall

Highlight, near the top of the README, that OmniRoute answers out of the box
after install: the auto combo already includes the built-in keyless free
providers (OpenCode Free, Felo) — no API key, no signup, no config. Shows a
concrete curl against /v1/chat/completions with model=auto, and points to
adding more providers and building your own free combos.

Pairs with the auto-combo no-auth allowlist (opencode + felo) so the promise
the section makes is exactly what a fresh install delivers.
@diegosouzapw

Copy link
Copy Markdown
Collaborator Author

🍼 Babysit summary — PR clean, all reds are pre-existing base-reds

This PR's own changes are green. The 4 tests it touches pass in CI (Unit Tests fast-path 4/4):

  • fresh install: the allowlisted no-auth providers are present in the auto-combo pool ✔
  • fresh install: non-allowlisted no-auth providers are EXCLUDED from the auto-combo pool ✔
  • fresh install: EVERY synthetic-noauth candidate belongs to an allowlisted provider ✔
  • createVirtualAutoCombo restricts the no-auth pool to the allowlist ✔

ESLint on the 3 changed source/test files passes with --max-warnings 0; the new README section passes check:fabricated-docs, check:doc-links, check:docs-sync.

Every failing check is a base-red already failing on release/v3.8.49 (this PR touches none of these files — verified by rerunning tests/unit/ladder-engine-maps-6533.test.ts locally on a tree with only this PR's 4-file diff; it fails identically):

Failing check Root cause (pre-existing on the release tip)
Docs Gates / check:docs-counts README says "11 compression engines", code has 12
Unit ladder-engine-maps-6533 (aggressivenessOf / expectedReductionFactor) same 12th compression engine missing from maps
Unit the gate exits 0 against the current repo state docs-count drift above
Unit #7793: real .env.example is in sync + Fast Quality check:env-doc-sync 13 env vars in code missing from .env.example
Unit combo 429 lockout … (#6863) unrelated resilience test
Unit #7258 zh-TW __MISSING__ placeholder unrelated i18n
Unit SPAWN_CAPABLE_PREFIXES … unrelated constants leaf
Unit repository contract is in sync (live data) unrelated catalog contract
Unit #7610 OAuthModal rejects bare Grok JWT unrelated OAuth UI
Fast Quality check:error-helper → muse-spark-web.ts unrelated executor
No new ESLint warnings base warning outside this PR's files

This PR's 4-file diff: open-sse/services/autoCombo/virtualFactory.ts, tests/unit/noauth-autocombo-allowlist.test.ts, tests/unit/virtual-auto-combo.test.ts, README.md.

Not merging — the base-reds belong to the release captain (they clear when the tip's compression-engine count / .env.example drift is reconciled). Ready for human review & merge once the base is green.

@diegosouzapw

Copy link
Copy Markdown
Collaborator Author

Revisão automática — PR #8183 está com uma worktree ativa (autocombo-noauth-opencode, branch feat/autocombo-noauth-opencode-only) sendo trabalhada por outra sessão agora mesmo (o SHA local já está à frente do último push visto aqui), então estou segurando esta análise em modo "held" e não vou tocar/mergear nada.

Pelo diff em si (lido estaticamente, sem checkout): a mudança é pequena e bem cirúrgica — um Set allowlist + 1 early-return em isChatAutoComboNoAuthProvider, sem rotas novas, sem DB, sem auth. Os testes acompanham bem: guard dedicado novo (3 casos, incluindo "nenhum no-auth futuro vaza da allowlist") + atualização do teste de política existente, e não colide com os testes #7620/#7622 vizinhos (que usam só opencode, que continua allowlisted).

Único ponto que deixo registrado como observação (não bloqueante): a allowlist é um Set hardcoded — vale considerar, num PR futuro, uma fonte única de verdade que junte a lista com os dados de verificação de egress citados no corpo do PR, para não divergirem com o tempo. Fora isso, parece pronto assim que a sessão dona terminar o trabalho em curso na worktree.

Probe Test added 2 commits July 22, 2026 16:09
…rift)

README said 11 compression engines; the live ENGINE_CATALOG has 12
(ENGINE_IDS.length). The stack table also listed only 10 and in the wrong
order. Reconcile all four count claims (feature bullet, prose, heading, SVG
alt) to 12 and rebuild the table in real pipeline order (stackPriority),
adding the two missing engines: Responses Tool Output (codex-responses) and
OmniGlyph. Clears the check:docs-counts STRICT drift blocking the Docs Gate.
check:env-doc-sync flagged 13 env vars read in code but absent from
.env.example / ENVIRONMENT.md: the browser-login VNC container knobs in
src/lib/vncSession/manifest.ts (image, docker bin, container VNC/CDP ports,
profile dirs, idle/max/ready/harvest timeouts, max sessions, chromium args)
and the legacy VIBEPROXY_DATA_DIR alias in notionThreadSessions.ts.

Document all 13 with their real defaults in both files. Clears the
check:env-doc-sync leg of the Docs Gate (check:docs-all) and the #7793
'.env.example in sync' unit test.
@diegosouzapw

Copy link
Copy Markdown
Collaborator Author

🍼 Babysit update — Docs Gate now GREEN; remaining reds are code base-reds

Since the last summary, two Docs-Gate base-reds were reconciled (they blocked check:docs-all, unrelated to this PR's routing change but fixed here to unblock the gate):

  • docs(readme) — README compression count synced 11 → 12 engines (live ENGINE_CATALOG), table rebuilt in pipeline order with the two missing engines (Responses Tool Output, OmniGlyph). check:docs-counts ✓
  • docs(env) — documented 13 env vars flagged by check:env-doc-sync (12 VNC browser-login knobs in src/lib/vncSession/manifest.ts + legacy VIBEPROXY_DATA_DIR) in .env.example + ENVIRONMENT.md. check:env-doc-sync ✓

Result: Docs Gates (fast-path) is now green; failing checks dropped 8 → 6.

Remaining 6 reds are all pre-existing code base-reds on release/v3.8.49 — none touch this PR's 4 files, and several are the release tip's own 12th compression engine not yet wired into its maps/groups:

Remaining red Base-red cause (not this PR)
Unit ladder-engine-maps (aggressivenessOf / expectedReductionFactor), COMPRESSION_CONTEXT_GROUP … 4 engine items, group order Settings→Combos→engines→Studio 12th compression engine missing from aggressiveness/reduction maps + UI groups
Unit #6863 combo 429 lockout, #7610 OAuthModal Grok, #7258 zh-TW __MISSING__, SPAWN_CAPABLE_PREFIXES, repository contract, primary sidebar limits after cache unrelated resilience / OAuth UI / i18n / constants / dashboard
Fast Quality check:error-helper → muse-spark-web.ts unrelated executor
No new ESLint warnings base warning outside this PR's files
Vitest (fast-path) database is locked / UNIQUE constraint _omniroute_migrations — migration-concurrency flake, infra

This PR's own tests (auto-combo no-auth allowlist ×4) pass in CI every run. Not merging — the residual base-reds belong to the release captain and clear when the tip reconciles its 12th-engine maps and the flaky vitest DB setup. Ready for human review & merge.

@diegosouzapw
diegosouzapw merged commit 38fd4d3 into release/v3.8.49 Jul 23, 2026
10 checks passed
@diegosouzapw
diegosouzapw deleted the feat/autocombo-noauth-opencode-only branch July 23, 2026 03:31
diegosouzapw added a commit that referenced this pull request Jul 24, 2026
…ly (no-auth allowlist scoped to tier pools) (#8391)

Context: #8183 introduced AUTO_COMBO_NOAUTH_ALLOWLIST (opencode, felo-web) to
gate no-auth providers out of every auto/* candidate pool, motivated by public
HTTP egress reliability on the reference VPS (.15) — several no-auth backends
(duckduckgo-web, theoldllm, chipotle, aihorde) were flaky there. Its own tests
(noauth-autocombo-allowlist.test.ts, virtual-auto-combo.test.ts) never
exercised the auto/<family> path, so the gate silently applied there too.

auto/<family> combos (#6453, e.g. auto/glm, auto/zai) are a different axis:
an identity selector ("route to whatever genuinely serves GLM"), not a
reliability-curated pool. auggie (local CLI subprocess, zero HTTP egress —
the reliability concern #8183 targets doesn't even apply to it) advertises a
literal glm-5.2 model and had an explicit design-test seat in auto/glm since
#7032, but the #8183 allowlist silently excluded it from that pool.

Operator decision (2026-07-24): the no-auth allowlist gate keeps applying to
category/tier and flat-variant auto/* pools (auto/best-free, auto/coding:fast,
...), but auto/<family> pools bypass it — any no-auth backend that genuinely
serves the family is admitted.

Fix: thread a `bypassAllowlist` flag through isChatAutoComboNoAuthProvider()
and getNoAuthCandidates(), set to `Boolean(spec?.family)` at the single call
site in createVirtualAutoCombo(). Family narrowing (buildFamilyCandidateFilter)
still runs afterward, so a bypassed no-auth candidate only survives if its
model actually belongs to the requested family. Category/tier and flat-variant
pools (spec.family unset) keep the gate fully intact.

Validation:
- tests/unit/autoCombo/provider-family-combos.test.ts:136 was red (expected
  ["auggie","glm","zai"], got ["glm","zai"]) — now green (11/11 passing).
- tests/unit/noauth-autocombo-allowlist.test.ts (3/3) and
  tests/unit/virtual-auto-combo.test.ts (10/10, including "restricts the
  no-auth pool to the allowlist") stay green — the #8183 gate is untouched for
  spec-less/category/tier pools.
- Full tests/unit/autoCombo/ vitest sweep: 5 files, 36/36 passing.
- npm run typecheck:core clean.
- 4 unrelated failures pre-exist on origin/release/v3.8.49 (verified via `git
  show HEAD:<path>` swap, no stash) in
  tests/unit/auto-combo-credentialed-model-pool.test.ts (antigravity/gemini-3.5
  credentialed-pool logic, untouched by this change).

Refs #8183, Refs #6453, Refs #7032
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
…elo) + docs (cheaper-inference#8183)

Restrict the auto-combo no-auth (keyless) candidate pool to an allowlist —
opencode + felo — the only keyless backends verified to answer without any
credential on the reference egress (VPS .15). Excluded no-auth providers stay
usable via direct <alias>/<model> calls; they are just no longer auto-routed to.
Guard: tests/unit/noauth-autocombo-allowlist.test.ts.

Docs: add a "works the second you install it" free section near the top of the
README; sync the compression stack count 11 → 12 engines; document 13 env vars
(VNC browser-login knobs + VIBEPROXY_DATA_DIR) in .env.example / ENVIRONMENT.md.
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
…ly (no-auth allowlist scoped to tier pools) (cheaper-inference#8391)

Context: cheaper-inference#8183 introduced AUTO_COMBO_NOAUTH_ALLOWLIST (opencode, felo-web) to
gate no-auth providers out of every auto/* candidate pool, motivated by public
HTTP egress reliability on the reference VPS (.15) — several no-auth backends
(duckduckgo-web, theoldllm, chipotle, aihorde) were flaky there. Its own tests
(noauth-autocombo-allowlist.test.ts, virtual-auto-combo.test.ts) never
exercised the auto/<family> path, so the gate silently applied there too.

auto/<family> combos (cheaper-inference#6453, e.g. auto/glm, auto/zai) are a different axis:
an identity selector ("route to whatever genuinely serves GLM"), not a
reliability-curated pool. auggie (local CLI subprocess, zero HTTP egress —
the reliability concern cheaper-inference#8183 targets doesn't even apply to it) advertises a
literal glm-5.2 model and had an explicit design-test seat in auto/glm since
cheaper-inference#7032, but the cheaper-inference#8183 allowlist silently excluded it from that pool.

Operator decision (2026-07-24): the no-auth allowlist gate keeps applying to
category/tier and flat-variant auto/* pools (auto/best-free, auto/coding:fast,
...), but auto/<family> pools bypass it — any no-auth backend that genuinely
serves the family is admitted.

Fix: thread a `bypassAllowlist` flag through isChatAutoComboNoAuthProvider()
and getNoAuthCandidates(), set to `Boolean(spec?.family)` at the single call
site in createVirtualAutoCombo(). Family narrowing (buildFamilyCandidateFilter)
still runs afterward, so a bypassed no-auth candidate only survives if its
model actually belongs to the requested family. Category/tier and flat-variant
pools (spec.family unset) keep the gate fully intact.

Validation:
- tests/unit/autoCombo/provider-family-combos.test.ts:136 was red (expected
  ["auggie","glm","zai"], got ["glm","zai"]) — now green (11/11 passing).
- tests/unit/noauth-autocombo-allowlist.test.ts (3/3) and
  tests/unit/virtual-auto-combo.test.ts (10/10, including "restricts the
  no-auth pool to the allowlist") stay green — the cheaper-inference#8183 gate is untouched for
  spec-less/category/tier pools.
- Full tests/unit/autoCombo/ vitest sweep: 5 files, 36/36 passing.
- npm run typecheck:core clean.
- 4 unrelated failures pre-exist on origin/release/v3.8.49 (verified via `git
  show HEAD:<path>` swap, no stash) in
  tests/unit/auto-combo-credentialed-model-pool.test.ts (antigravity/gemini-3.5
  credentialed-pool logic, untouched by this change).

Refs cheaper-inference#8183, Refs cheaper-inference#6453, Refs cheaper-inference#7032
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…elo) + docs (cheaper-inference#8183)

Restrict the auto-combo no-auth (keyless) candidate pool to an allowlist —
opencode + felo — the only keyless backends verified to answer without any
credential on the reference egress (VPS .15). Excluded no-auth providers stay
usable via direct <alias>/<model> calls; they are just no longer auto-routed to.
Guard: tests/unit/noauth-autocombo-allowlist.test.ts.

Docs: add a "works the second you install it" free section near the top of the
README; sync the compression stack count 11 → 12 engines; document 13 env vars
(VNC browser-login knobs + VIBEPROXY_DATA_DIR) in .env.example / ENVIRONMENT.md.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…ly (no-auth allowlist scoped to tier pools) (cheaper-inference#8391)

Context: cheaper-inference#8183 introduced AUTO_COMBO_NOAUTH_ALLOWLIST (opencode, felo-web) to
gate no-auth providers out of every auto/* candidate pool, motivated by public
HTTP egress reliability on the reference VPS (.15) — several no-auth backends
(duckduckgo-web, theoldllm, chipotle, aihorde) were flaky there. Its own tests
(noauth-autocombo-allowlist.test.ts, virtual-auto-combo.test.ts) never
exercised the auto/<family> path, so the gate silently applied there too.

auto/<family> combos (cheaper-inference#6453, e.g. auto/glm, auto/zai) are a different axis:
an identity selector ("route to whatever genuinely serves GLM"), not a
reliability-curated pool. auggie (local CLI subprocess, zero HTTP egress —
the reliability concern cheaper-inference#8183 targets doesn't even apply to it) advertises a
literal glm-5.2 model and had an explicit design-test seat in auto/glm since
cheaper-inference#7032, but the cheaper-inference#8183 allowlist silently excluded it from that pool.

Operator decision (2026-07-24): the no-auth allowlist gate keeps applying to
category/tier and flat-variant auto/* pools (auto/best-free, auto/coding:fast,
...), but auto/<family> pools bypass it — any no-auth backend that genuinely
serves the family is admitted.

Fix: thread a `bypassAllowlist` flag through isChatAutoComboNoAuthProvider()
and getNoAuthCandidates(), set to `Boolean(spec?.family)` at the single call
site in createVirtualAutoCombo(). Family narrowing (buildFamilyCandidateFilter)
still runs afterward, so a bypassed no-auth candidate only survives if its
model actually belongs to the requested family. Category/tier and flat-variant
pools (spec.family unset) keep the gate fully intact.

Validation:
- tests/unit/autoCombo/provider-family-combos.test.ts:136 was red (expected
  ["auggie","glm","zai"], got ["glm","zai"]) — now green (11/11 passing).
- tests/unit/noauth-autocombo-allowlist.test.ts (3/3) and
  tests/unit/virtual-auto-combo.test.ts (10/10, including "restricts the
  no-auth pool to the allowlist") stay green — the cheaper-inference#8183 gate is untouched for
  spec-less/category/tier pools.
- Full tests/unit/autoCombo/ vitest sweep: 5 files, 36/36 passing.
- npm run typecheck:core clean.
- 4 unrelated failures pre-exist on origin/release/v3.8.49 (verified via `git
  show HEAD:<path>` swap, no stash) in
  tests/unit/auto-combo-credentialed-model-pool.test.ts (antigravity/gemini-3.5
  credentialed-pool logic, untouched by this change).

Refs cheaper-inference#8183, Refs cheaper-inference#6453, Refs cheaper-inference#7032
opensource-elearning added a commit to opensource-elearning/OmniRoute that referenced this pull request Oct 13, 2026
…roviders

- Add toolCalling=emulated to cloudflare-playground and uncloseai
- Auto-discovery in virtualFactory.ts picks up all providers with toolCalling=emulated
- No hardcoded allowlist - new providers just need toolCalling=emulated in NOAUTH_PROVIDERS

5 providers now support tool-calling combos via emulation:
- devin-cli-agentic
- opencode
- duckduckgo-web
- cloudflare-playground
- uncloseai

Update the two regression guards that pinned the old {opencode}-only allowlist
(tests/unit/virtual-auto-combo.test.ts, tests/unit/noauth-autocombo-allowlist.test.ts)
to the auto-discovered set, keeping the 2026-07-24 egress-reliability note
(refs cheaper-inference#8183/cheaper-inference#6453/cheaper-inference#7032) as historical context. Repair the comment block above
getEmulatedToolCallingNoAuthProviders(), which the rewrite had left cut mid-sentence.

Verified: auto/coding, auto/coding:free, auto/coding:pro work with tools
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant