fix(providers): renumber Qwen migration 163→167 and fix async getExecutor assertions for v3.8.51

- src/lib/db/migrations: 163 collided with radar_feed_cache_generated_at
  and 3 other provenance-sweep retirement migrations already in this
  batch (164 Designer, 165 Felo, 166 GPL-derived); renumbered to 167.
- tests/unit/qwen-web-retirement.test.ts, chatcore-executor-proxy.test.ts,
  web-cookie-providers-new.test.ts: getExecutor became async on v3.8.51
  (#11220 lazy-loading refactor); fixed 3 assertions comparing/throwing
  against the raw Promise instead of the awaited result.
- tests/unit/qwen38-max-bare-id-alias.test.ts: removed the retired
  qwen-web from the SERVES_BARE fixture (it no longer exists as a
  provider); kept the newer catalog-split test structure already on
  v3.8.51 instead of the PR's pre-split version.
- docs/reference/PROVIDER_REFERENCE.md: regenerated via
  npm run gen:provider-reference.
This commit is contained in:
Markus Hartung
2026-08-28 01:49:07 -03:00
parent 7f84884bbd
commit c96345d2b3
6 changed files with 23 additions and 23 deletions

View File

@@ -1,16 +1,16 @@
---
title: "Provider Reference"
version: 3.8.51
lastUpdated: 2026-08-27
lastUpdated: 2026-08-28
---
# Provider Reference
> **Auto-generated** from `src/shared/constants/providers.ts` — do not edit by hand.
> Regenerate with: `npm run gen:provider-reference`
> **Last generated:** 2026-08-27
> **Last generated:** 2026-08-28
Total providers: **357**. See category breakdown below.
Total providers: **356**. See category breakdown below.
## Categories
@@ -444,7 +444,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each
- Catalog: [`src/shared/constants/providers.ts`](../../src/shared/constants/providers.ts)
- Registry (per-model details): [`open-sse/config/providerRegistry.ts`](../../open-sse/config/providerRegistry.ts)
- Executors: [`open-sse/executors/`](../../open-sse/executors/) (112 implementations)
- Executors: [`open-sse/executors/`](../../open-sse/executors/) (111 implementations)
- Translators: [`open-sse/translator/`](../../open-sse/translator/)
## See Also

View File

@@ -29,7 +29,7 @@ UPDATE provider_connections
SET is_active = 0,
test_status = 'unavailable',
error_code = 'PROVIDER_REMOVED',
last_error = 'Provider integration retired from OmniRoute v3.8.50',
last_error = 'Provider integration retired from OmniRoute v3.8.51',
last_error_type = 'provider_removed',
last_error_source = 'migration:retire-qwen-web',
last_error_at = datetime('now'),
@@ -40,7 +40,7 @@ WHERE lower(trim(provider, char(9,10,11,12,13,32,160,5760,8192,8193,8194,8195,81
is_active IS NOT 0
OR test_status IS NOT 'unavailable'
OR error_code IS NOT 'PROVIDER_REMOVED'
OR last_error IS NOT 'Provider integration retired from OmniRoute v3.8.50'
OR last_error IS NOT 'Provider integration retired from OmniRoute v3.8.51'
OR last_error_type IS NOT 'provider_removed'
OR last_error_source IS NOT 'migration:retire-qwen-web'
OR last_error_at IS NULL
@@ -59,7 +59,7 @@ BEGIN
SET is_active = 0,
test_status = 'unavailable',
error_code = 'PROVIDER_REMOVED',
last_error = 'Provider integration retired from OmniRoute v3.8.50',
last_error = 'Provider integration retired from OmniRoute v3.8.51',
last_error_type = 'provider_removed',
last_error_source = 'migration:retire-qwen-web',
last_error_at = datetime('now'),
@@ -69,7 +69,7 @@ BEGIN
is_active IS NOT 0
OR test_status IS NOT 'unavailable'
OR error_code IS NOT 'PROVIDER_REMOVED'
OR last_error IS NOT 'Provider integration retired from OmniRoute v3.8.50'
OR last_error IS NOT 'Provider integration retired from OmniRoute v3.8.51'
OR last_error_type IS NOT 'provider_removed'
OR last_error_source IS NOT 'migration:retire-qwen-web'
OR last_error_at IS NULL
@@ -93,7 +93,7 @@ BEGIN
SET is_active = 0,
test_status = 'unavailable',
error_code = 'PROVIDER_REMOVED',
last_error = 'Provider integration retired from OmniRoute v3.8.50',
last_error = 'Provider integration retired from OmniRoute v3.8.51',
last_error_type = 'provider_removed',
last_error_source = 'migration:retire-qwen-web',
last_error_at = datetime('now'),
@@ -103,7 +103,7 @@ BEGIN
is_active IS NOT 0
OR test_status IS NOT 'unavailable'
OR error_code IS NOT 'PROVIDER_REMOVED'
OR last_error IS NOT 'Provider integration retired from OmniRoute v3.8.50'
OR last_error IS NOT 'Provider integration retired from OmniRoute v3.8.51'
OR last_error_type IS NOT 'provider_removed'
OR last_error_source IS NOT 'migration:retire-qwen-web'
OR last_error_at IS NULL

View File

@@ -154,5 +154,5 @@ test("retired Qwen Web ids cannot bypass the tombstone through a connection prox
const qwenCloud = await resolveExecutorWithProxy("qwen-cloud", undefined, {
cliproxyapiMode: "claude-native",
});
assert.equal(qwenCloud, getExecutor("cliproxyapi"));
assert.equal(qwenCloud, await getExecutor("cliproxyapi"));
});

View File

@@ -70,16 +70,16 @@ test.after(() => {
fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true });
});
test("migration 163 retires every Qwen Web id fail-closed and preserves audit history", async () => {
test("migration 167 retires every Qwen Web id fail-closed and preserves audit history", async () => {
const db = core.getDbInstance();
const applied = db
.prepare("SELECT version FROM _omniroute_migrations WHERE version = 163")
.prepare("SELECT version FROM _omniroute_migrations WHERE version = 167")
.get() as { version: number } | undefined;
assert.ok(applied, "migration 163 must be recorded as applied");
assert.ok(applied, "migration 167 must be recorded as applied");
// Recreate a pre-migration fixture even though a fresh test database already
// applied migration 163 during startup.
// applied migration 167 during startup.
db.exec(`
DROP TRIGGER IF EXISTS provider_connections_retire_qwen_web_insert;
DROP TRIGGER IF EXISTS provider_connections_retire_qwen_web_update;
@@ -229,7 +229,7 @@ test("migration 163 retires every Qwen Web id fail-closed and preserves audit hi
(db.prepare("SELECT total_changes() AS changes").get() as { changes: number }).changes;
const sql = fs.readFileSync(
path.join(process.cwd(), "src/lib/db/migrations/163_retire_qwen_web.sql"),
path.join(process.cwd(), "src/lib/db/migrations/167_retire_qwen_web.sql"),
"utf8"
);
db.exec(sql);
@@ -263,7 +263,7 @@ test("migration 163 retires every Qwen Web id fail-closed and preserves audit hi
assert.equal(connection.is_active, 0);
assert.equal(connection.test_status, "unavailable");
assert.equal(connection.error_code, "PROVIDER_REMOVED");
assert.equal(connection.last_error, "Provider integration retired from OmniRoute v3.8.50");
assert.equal(connection.last_error, "Provider integration retired from OmniRoute v3.8.51");
assert.equal(connection.last_error_type, "provider_removed");
assert.equal(connection.last_error_source, "migration:retire-qwen-web");
assert.notEqual(connection.last_error_at, "2000-01-01T00:00:00.000Z");
@@ -429,7 +429,7 @@ test("migration 163 retires every Qwen Web id fail-closed and preserves audit hi
"last_error_type, last_error_source, last_error_at, created_at, updated_at) " +
"VALUES ('already-tombstoned-insert-connection', '\u00a0qwen-web\ufeff', " +
"'apikey', 'already tombstoned restore', 0, 'unavailable', 'PROVIDER_REMOVED', " +
"'Provider integration retired from OmniRoute v3.8.50', 'provider_removed', " +
"'Provider integration retired from OmniRoute v3.8.51', 'provider_removed', " +
"'migration:retire-qwen-web', '2001-01-01T00:00:00.000Z', datetime('now'), " +
"datetime('now'))"
).run();
@@ -450,7 +450,7 @@ test("migration 163 retires every Qwen Web id fail-closed and preserves audit hi
db.prepare(
"UPDATE provider_connections SET provider = '\u2003QW\u2029', is_active = 0, " +
"test_status = 'unavailable', error_code = 'PROVIDER_REMOVED', " +
"last_error = 'Provider integration retired from OmniRoute v3.8.50', " +
"last_error = 'Provider integration retired from OmniRoute v3.8.51', " +
"last_error_type = 'provider_removed', last_error_source = 'migration:retire-qwen-web', " +
"last_error_at = '2001-01-01T00:00:00.000Z' " +
"WHERE id = 'already-tombstoned-update-connection'"

View File

@@ -25,7 +25,7 @@ test("Qwen Web provenance-hold integration is absent from runtime dispatch", ()
assert.equal(hasSpecializedExecutor("qw"), false);
});
test("retired Qwen Web ids fail closed instead of falling through to OpenAI", () => {
test("retired Qwen Web ids fail closed instead of falling through to OpenAI", async () => {
for (const providerId of [
"qwen-web",
"qw",
@@ -34,7 +34,7 @@ test("retired Qwen Web ids fail closed instead of falling through to OpenAI", ()
"\u00a0QWEN-WEB\uFEFF",
"\u2003qw\u2029",
]) {
assert.throws(
await assert.rejects(
() => getExecutor(providerId),
(error: unknown) => {
const typed = error as Error & { status?: number };

View File

@@ -157,10 +157,10 @@ test("Doubao Web executor is registered", async () => {
assert.ok(executor instanceof DoubaoWebExecutor);
});
test("Qwen Web aliases stay removed while Qwen Cloud remains routable", () => {
test("Qwen Web aliases stay removed while Qwen Cloud remains routable", async () => {
assert.equal(hasSpecializedExecutor("qwen-web"), false);
assert.equal(hasSpecializedExecutor("qw"), false);
assert.equal(getExecutor("qwen-cloud").getProvider(), "qwen-cloud");
assert.equal((await getExecutor("qwen-cloud")).getProvider(), "qwen-cloud");
});
// ── Constructor Tests ────────────────────────────────────────────────────────