Repository navigation
feat(sse): restrict auto-combo no-auth pool to an allowlist (opencode, felo) - #8183
Conversation
…, 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.
|
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.
🍼 Babysit summary — PR clean, all reds are pre-existing base-redsThis PR's own changes are green. The 4 tests it touches pass in CI (Unit Tests fast-path 4/4):
ESLint on the 3 changed source/test files passes with Every failing check is a base-red already failing on
This PR's 4-file diff: Not merging — the base-reds belong to the release captain (they clear when the tip's compression-engine count / |
|
Revisão automática — PR #8183 está com uma worktree ativa ( Pelo diff em si (lido estaticamente, sem checkout): a mudança é pequena e bem cirúrgica — um Único ponto que deixo registrado como observação (não bloqueante): a allowlist é um |
…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.
🍼 Babysit update — Docs Gate now GREEN; remaining reds are code base-redsSince the last summary, two Docs-Gate base-reds were reconciled (they blocked
Result: Remaining 6 reds are all pre-existing code base-reds on
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. |
…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
…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.
…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
…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.
…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
…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
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:Mudança
open-sse/services/autoCombo/virtualFactory.ts:isChatAutoComboNoAuthProvider.ddgw/…,[removed-provider]/…, etc.) — apenas deixaram de ser auto-roteados. Readicionar = incluir o id no set.provider_connections, que não existe em instalação nova).Testes
tests/unit/noauth-autocombo-allowlist.test.ts— 3 casos, incluindoevery noauth candidate ∈ allowlist(pega qualquer no-auth que vaze no futuro). Escrito TDD: falhava na baseline (todos entravam), passa após a allowlist.tests/unit/virtual-auto-combo.test.tspara a nova política.