Skip to content

feat(providers): add tencent-aistudio-web cookie provider (tasw) - #10174

Merged
diegosouzapw merged 9 commits into
cheaper-inference:release/v3.8.50from
MeRezaRezaei:feat/tencent-aistudio-web
Aug 15, 2026
Merged

diegosouzapw merged 9 commits into
cheaper-inference:release/v3.8.50from
MeRezaRezaei:feat/tencent-aistudio-web

Conversation

@MeRezaRezaei

Copy link
Copy Markdown
Contributor

Summary

Adds the Tencent AI Studio Web provider (tencent-aistudio-web, alias tasw) to OmniRoute.

  • New cookie-authenticated executor open-sse/executors/tencent-aistudio-web.ts that routes chat requests to https://aistudio.tencent.ai/api/chat/{model}.
  • Returns 401 with a clear message when no Cookie (API key) is supplied.
  • Registry entry in open-sse/config/providers/registry/tencent-aistudio-web/index.ts with models hy3-g, hunyuan-default, hunyuan-3d.
  • Registered in open-sse/config/providers/index.ts, open-sse/executors/index.ts, and src/shared/constants/providers/web-cookie.ts.

Test plan

  • Unit test tests/unit/tencent-aistudio-web.test.ts asserts registry fields and the missing-cookie → 401 guard. Passes locally.

Notes

⚠️ base-red inherited: #9985 — the release branch is marked not-green; any CI failures are inherited from the base, not from this change.

Checklist

  • Conventional commit
  • Tests included
  • No .brain/ or local-only config leaked (branch cut from release/v3.8.50, provider files only)

…ndex

The "devin-desktop" executor key is unused (devin-desktop provider config
resolves to executor "devin-cli"); the imported ./devin-desktop.ts file
was never present, so executors/index.ts failed to load (ERR_MODULE_NOT_FOUND)
and broke every unit test that imports the executor registry (e.g.
tests/unit/deepseek-web.test.ts). Stale base sync carried this into the branch.
Remove the dead import/registration/export.
@diegosouzapw

Copy link
Copy Markdown
Collaborator

The tencent-aistudio-web provider itself is sound — it follows the yuanbao-web pattern, uses buildErrorBody, and the registry entry is valid. However, this PR carries an out-of-scope commit 8bc6db32b6 (authored by openhands automation) that removes DevinDesktop. Could you drop that commit from this PR? It doesn't belong with a new-provider change. Once removed, this is good to merge.

… index

The previous commit removed the devin-desktop executor import/registration/
export from open-sse/executors/index.ts, but the devin-desktop provider
registry still resolves executor "devin-desktop" and
tests/unit/devin-providers.test.ts asserts hasSpecializedExecutor("devin-desktop")
is true. The removal broke 6 tests in that file. Restore the three lines so
the live Devin Desktop executor keeps serving the provider.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@diegosouzapw

Copy link
Copy Markdown
Collaborator

/fix-prs review notes

Commit 8bc6db32b6 ("fix(sse): remove orphaned DevinDesktopExecutor import") — REMOVED via corrective commit.

Verified with git show 8bc6db32b6 and the codebase:

  • open-sse/executors/devin-desktop.ts EXISTS at the merge-base and at this branch (introduced deliberately in [v3.8.50] feat(devin-desktop): replace public Windsurf provider #8228, replacing the public Windsurf provider). The commit's premise ("file never present") is false.
  • The provider registry still resolves executor: "devin-desktop", and tests/unit/devin-providers.test.ts asserts hasSpecializedExecutor("devin-desktop") and getExecutor("devin-desktop").constructor.name === "DevinDesktopExecutor".
  • Running the suite at head showed 6 failing tests in devin-providers.test.ts caused solely by that removal.

This was a real feature removal, not a dead-import fix. A corrective commit (254f100e40, authored as MeRezaRezaei) restores the three lines (import, registration, export). Net PR diff is now clean: +177/-2, exactly the tasw provider change.

Validation (fast-forward corrective commit):

  • typecheck:core ✅
  • eslint on all touched files ✅
  • tests/unit/tencent-aistudio-web.test.ts ✅
  • tests/unit/devin-providers-executor-remediation.test.ts ✅ (8/8)
  • tests/unit/devin-providers.test.ts — 9/10 at the old base; the 1 failure (OAuth modal string) is a stale-base artifact (fixed in base via fix(i18n): localize hardcoded web UI copy #9245 i18n localization; passes 10/10 when run at the current base tip)
  • check:changelog-integrity ✅ (PR does not touch CHANGELOG; gate passes with base-tip CHANGELOG)
  • check:test-discovery ✅ (orphan fal.test.ts is base evolution, removed at base tip, not from this PR)

⚠️ Stale-base conflict: the branch was cut from bd472200d5; the base has since evolved (Puter removal #10210, i18n #9245, etc.), so GitHub reports mergeable: CONFLICTING in open-sse/config/providers/index.ts (and the branch still carries pre-#10210 puter lines). The tasw additions themselves are additive and conflict-free. Requires the merge-train's rebase onto the current release/v3.8.50 tip.

adevwithpurpose and others added 6 commits August 14, 2026 21:42
# Conflicts:
#	open-sse/config/providers/index.ts
… count sync

Return {response,url,headers,transformedBody} instead of a raw fetch Response
(the executor contract every other executor in this file follows) and
re-wrap the upstream body so it uses the local Response constructor, not the
undici-patched one from globalThis.fetch.

Regenerate docs/reference/PROVIDER_REFERENCE.md and sync the 339->340
provider-count claims (README, AGENTS.md, llm.txt + 42 i18n mirrors,
package.json, promise-pillars/comparison-table/cli-terminal SVGs) that this
PR's new provider invalidated.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
# Conflicts:
#	README.md
#	docs/diagrams/comparison-table.svg
#	docs/diagrams/promise-pillars.svg
#	docs/i18n/ar/llm.txt
#	docs/i18n/az/llm.txt
#	docs/i18n/bg/llm.txt
#	docs/i18n/bn/llm.txt
#	docs/i18n/cs/llm.txt
#	docs/i18n/da/llm.txt
#	docs/i18n/de/llm.txt
#	docs/i18n/es/llm.txt
#	docs/i18n/fa/llm.txt
#	docs/i18n/fi/llm.txt
#	docs/i18n/fr/llm.txt
#	docs/i18n/gu/llm.txt
#	docs/i18n/he/llm.txt
#	docs/i18n/hi/llm.txt
#	docs/i18n/hu/llm.txt
#	docs/i18n/id/llm.txt
#	docs/i18n/in/llm.txt
#	docs/i18n/it/llm.txt
#	docs/i18n/ja/llm.txt
#	docs/i18n/ko/llm.txt
#	docs/i18n/mr/llm.txt
#	docs/i18n/ms/llm.txt
#	docs/i18n/nl/llm.txt
#	docs/i18n/no/llm.txt
#	docs/i18n/phi/llm.txt
#	docs/i18n/pl/llm.txt
#	docs/i18n/pt-BR/llm.txt
#	docs/i18n/pt/llm.txt
#	docs/i18n/ro/llm.txt
#	docs/i18n/ru/llm.txt
#	docs/i18n/sk/llm.txt
#	docs/i18n/sv/llm.txt
#	docs/i18n/sw/llm.txt
#	docs/i18n/ta/llm.txt
#	docs/i18n/te/llm.txt
#	docs/i18n/th/llm.txt
#	docs/i18n/tr/llm.txt
#	docs/i18n/uk-UA/llm.txt
#	docs/i18n/ur/llm.txt
#	docs/i18n/vi/llm.txt
#	docs/i18n/zh-CN/llm.txt
#	docs/i18n/zh-TW/llm.txt
#	llm.txt
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
…metadata + golden

Add the WEB_SESSION_CREDENTIAL_REQUIREMENTS entry for tencent-aistudio-web
(cookie-based, matching the executor's raw Cookie-header credential) and
regenerate the translate-path golden snapshot to include the new provider —
both were failing CI unit tests that enumerate every registered provider.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
…e contract

The test asserted res.status/res.json() directly against executor.execute()'s
return value, matching the pre-fix (broken) raw-Response shape. Update it to
read res.response.status/res.response.json() — the {response,url,headers,
transformedBody} contract every executor in this codebase follows.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@diegosouzapw
diegosouzapw merged commit 774127b into cheaper-inference:release/v3.8.50 Aug 15, 2026
16 checks passed
@diegosouzapw

Copy link
Copy Markdown
Collaborator

Thank you, @MeRezaRezaei! Merged, with a few fixes on top to match the codebase's executor contract: wrapped the upstream fetch response in the {response,url,headers,transformedBody} shape every executor here follows (raw Response breaks chatCore.ts's status read — same class of bug as the historical duckduckgo-web regression), registered the web-session credential metadata for the dashboard, regenerated the translate-path golden snapshot, and synced the 339→340 provider-count docs your new provider invalidated (README, AGENTS.md, llm.txt + 42 i18n mirrors, PROVIDER_REFERENCE.md, and the promise-pillars/comparison-table/cli-terminal/readme-hero SVGs). Nice addition — thanks for the tencent-aistudio-web provider!

tkgo11 pushed a commit to tkgo11/OmniRoute that referenced this pull request Sep 23, 2026
…aper-inference#10174)

* feat(providers): add tencent-aistudio-web cookie provider (tasw)

* fix(sse): remove orphaned DevinDesktopExecutor import from executor index

The "devin-desktop" executor key is unused (devin-desktop provider config
resolves to executor "devin-cli"); the imported ./devin-desktop.ts file
was never present, so executors/index.ts failed to load (ERR_MODULE_NOT_FOUND)
and broke every unit test that imports the executor registry (e.g.
tests/unit/deepseek-web.test.ts). Stale base sync carried this into the branch.
Remove the dead import/registration/export.

* fix(providers): restore DevinDesktopExecutor registration in executor index

The previous commit removed the devin-desktop executor import/registration/
export from open-sse/executors/index.ts, but the devin-desktop provider
registry still resolves executor "devin-desktop" and
tests/unit/devin-providers.test.ts asserts hasSpecializedExecutor("devin-desktop")
is true. The removal broke 6 tests in that file. Restore the three lines so
the live Devin Desktop executor keeps serving the provider.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(providers): correct tencent-aistudio-web wrapper shape + provider count sync

Return {response,url,headers,transformedBody} instead of a raw fetch Response
(the executor contract every other executor in this file follows) and
re-wrap the upstream body so it uses the local Response constructor, not the
undici-patched one from globalThis.fetch.

Regenerate docs/reference/PROVIDER_REFERENCE.md and sync the 339->340
provider-count claims (README, AGENTS.md, llm.txt + 42 i18n mirrors,
package.json, promise-pillars/comparison-table/cli-terminal SVGs) that this
PR's new provider invalidated.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* docs(providers): sync readme-hero.svg provider count claim (339->340)

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(providers): register tencent-aistudio-web web-session credential metadata + golden

Add the WEB_SESSION_CREDENTIAL_REQUIREMENTS entry for tencent-aistudio-web
(cookie-based, matching the executor's raw Cookie-header credential) and
regenerate the translate-path golden snapshot to include the new provider —
both were failing CI unit tests that enumerate every registered provider.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(providers): align tencent-aistudio-web test with the wrapper-shape contract

The test asserted res.status/res.json() directly against executor.execute()'s
return value, matching the pre-fix (broken) raw-Response shape. Update it to
read res.response.status/res.response.json() — the {response,url,headers,
transformedBody} contract every executor in this codebase follows.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: MeRezaRezaei <MeRezaRezaei@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: adevwithpurpose <adevwithpurpose@users.noreply.github.com>
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…aper-inference#10174)

* feat(providers): add tencent-aistudio-web cookie provider (tasw)

* fix(sse): remove orphaned DevinDesktopExecutor import from executor index

The "devin-desktop" executor key is unused (devin-desktop provider config
resolves to executor "devin-cli"); the imported ./devin-desktop.ts file
was never present, so executors/index.ts failed to load (ERR_MODULE_NOT_FOUND)
and broke every unit test that imports the executor registry (e.g.
tests/unit/deepseek-web.test.ts). Stale base sync carried this into the branch.
Remove the dead import/registration/export.

* fix(providers): restore DevinDesktopExecutor registration in executor index

The previous commit removed the devin-desktop executor import/registration/
export from open-sse/executors/index.ts, but the devin-desktop provider
registry still resolves executor "devin-desktop" and
tests/unit/devin-providers.test.ts asserts hasSpecializedExecutor("devin-desktop")
is true. The removal broke 6 tests in that file. Restore the three lines so
the live Devin Desktop executor keeps serving the provider.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(providers): correct tencent-aistudio-web wrapper shape + provider count sync

Return {response,url,headers,transformedBody} instead of a raw fetch Response
(the executor contract every other executor in this file follows) and
re-wrap the upstream body so it uses the local Response constructor, not the
undici-patched one from globalThis.fetch.

Regenerate docs/reference/PROVIDER_REFERENCE.md and sync the 339->340
provider-count claims (README, AGENTS.md, llm.txt + 42 i18n mirrors,
package.json, promise-pillars/comparison-table/cli-terminal SVGs) that this
PR's new provider invalidated.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* docs(providers): sync readme-hero.svg provider count claim (339->340)

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(providers): register tencent-aistudio-web web-session credential metadata + golden

Add the WEB_SESSION_CREDENTIAL_REQUIREMENTS entry for tencent-aistudio-web
(cookie-based, matching the executor's raw Cookie-header credential) and
regenerate the translate-path golden snapshot to include the new provider —
both were failing CI unit tests that enumerate every registered provider.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(providers): align tencent-aistudio-web test with the wrapper-shape contract

The test asserted res.status/res.json() directly against executor.execute()'s
return value, matching the pre-fix (broken) raw-Response shape. Update it to
read res.response.status/res.response.json() — the {response,url,headers,
transformedBody} contract every executor in this codebase follows.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: MeRezaRezaei <MeRezaRezaei@users.noreply.github.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: adevwithpurpose <adevwithpurpose@users.noreply.github.com>
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.

4 participants