Skip to content

feat(web): automate Vercel latest alias mapping - #6226

Merged
chrarnoldus merged 10 commits into
mainfrom
feat/automate-vercel-latest-aliases
Sep 24, 2026
Merged

chrarnoldus merged 10 commits into
mainfrom
feat/automate-vercel-latest-aliases

Conversation

@chrarnoldus

@chrarnoldus chrarnoldus commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • persist OpenRouter alias_target.slug metadata during the existing model synchronization
  • resolve all tilde-prefixed aliases from the cached model snapshot before Vercel routing
  • remove hardcoded latest-model targets so synchronized catalog metadata is the sole alias source
  • apply automated resolution consistently to routing, request transforms, BYOK discovery, embeddings, and provider synchronization

Alternative to #6193.

Testing

  • CI validates tests, typecheck, lint, formatting, and builds
  • formatted changed files
  • git diff --check

@chrarnoldus chrarnoldus self-assigned this Sep 16, 2026
@kilo-code-bot

kilo-code-bot Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental commit makes injectExtraProviderModels synchronous again and uses the newly-exported mapResolvedModelIdToVercel, so provider sync no longer consults the alias cache; callers and tests were updated consistently and no correctness, security, or memory-retention defects were found in the changed code.

Files Reviewed (4 files)
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.test.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/sync-providers.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts
Previous Review Summaries (6 snapshots, latest commit 7b8aa34)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 7b8aa34)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental change since the previous review only adds the missing await to the Vercel model mapping in the provider-model index, correctly completing the PR's async mapper conversion; no correctness, security, or memory-retention defects were found in the changed code.

Files Reviewed (14 files)
  • apps/web/src/app/api/openrouter/embeddings/route.ts
  • apps/web/src/lib/ai-gateway/byok/index.ts
  • apps/web/src/lib/ai-gateway/providers/gateway-models-cache.test.ts
  • apps/web/src/lib/ai-gateway/providers/gateway-models-cache.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.test.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/models-by-provider-index.server.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/sync-providers.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/index.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.test.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts
  • apps/web/src/routers/byok-router.ts
  • packages/db/src/schema-types.test.ts
  • packages/db/src/schema-types.ts

Previous review (commit dbc5db4)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (13 files)
  • apps/web/src/app/api/openrouter/embeddings/route.ts
  • apps/web/src/lib/ai-gateway/byok/index.ts
  • apps/web/src/lib/ai-gateway/providers/gateway-models-cache.test.ts
  • apps/web/src/lib/ai-gateway/providers/gateway-models-cache.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.test.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/sync-providers.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/index.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.test.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts
  • apps/web/src/routers/byok-router.ts
  • packages/db/src/schema-types.test.ts
  • packages/db/src/schema-types.ts

Previous review (commit 3306877)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts — Removing the hardcoded ~...-latest alias fallbacks means an unresolved alias (empty or stale OpenRouter catalog) is now passed through to Vercel as e.g. ~anthropic/claude-sonnet-latest instead of routing to the last known model. The PR description still states these fallbacks are retained; confirm the removal is intentional or restore a fallback.
Files Reviewed (2 files)
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts - 1 issue
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.test.ts

Fix these issues in Kilo Cloud

Previous review (commit 20a90e8)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental change is a pure rename refactor: the synchronous mapper became private mapResolvedModelIdToVercel, resolveModelIdForVercel was renamed to the exported async mapModelIdToVercel, and all call sites, the newly-async injectExtraProviderModels, and the unit tests were updated consistently with await.

Files Reviewed (9 files)
  • apps/web/src/app/api/openrouter/embeddings/route.ts
  • apps/web/src/lib/ai-gateway/byok/index.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.test.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/inject-extra-provider-models.ts
  • apps/web/src/lib/ai-gateway/providers/openrouter/sync-providers.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/index.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.test.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts
  • apps/web/src/routers/byok-router.ts

Previous review (commit d7e20a7)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The only change since the prior review removed the brittle resolveOpenRouterModelAlias mock and its four catalog-alias unit tests from mapModelIdToVercel.test.ts; the remaining tests are self-contained and no correctness, security, or memory-retention defect was introduced.

Files Reviewed (1 file)
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.test.ts

Previous review (commit 2157071)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Reviewed the catalog-driven tilde-alias resolution (alias_target schema field, resolveOpenRouterModelAlias, async resolveModelIdForVercel) and all five call sites; the resolution order, await handling, and legacy fallbacks are consistent and appear correct, with no correctness, security, or memory-retention defects identified in the changed lines.

Files Reviewed (10 files)
  • apps/web/src/app/api/openrouter/embeddings/route.ts
  • apps/web/src/lib/ai-gateway/byok/index.ts
  • apps/web/src/lib/ai-gateway/providers/gateway-models-cache.test.ts
  • apps/web/src/lib/ai-gateway/providers/gateway-models-cache.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/index.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.test.ts
  • apps/web/src/lib/ai-gateway/providers/vercel/mapModelIdToVercel.ts
  • apps/web/src/routers/byok-router.ts
  • packages/db/src/schema-types.test.ts
  • packages/db/src/schema-types.ts

Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@chrarnoldus
chrarnoldus force-pushed the feat/automate-vercel-latest-aliases branch from 3306877 to dbc5db4 Compare September 18, 2026 22:59
@johnnyeric

Copy link
Copy Markdown
Contributor

Deployed the pr changes locally in docker containers. Executed the manual sync providers button from gateway page and then verified the alias mapping.

The only two model changes were that latest sol and luna for gpt latest resolved to gpt-6 instead of gpt5.6. All other mappings remained the same as before.

Agent Report

Local Environment

Testing used an isolated local stack:

  • Compose project: kilo-dev-pr-6226-26210
  • PostgreSQL: localhost:26210
  • Redis: localhost:26211
  • Redis HTTP: localhost:26212
  • Next.js: http://localhost:26220
  • Disposable named volumes scoped to the PR
  • No other project's containers, databases, credentials, or ports were modified
  • No production databases or real user data were accessed
  • Provider synchronization performed external catalog reads only; all writes went to local PostgreSQL

Sync Results

The Sync Providers job completed through the local admin page and stored:

  • 457 OpenRouter models
  • 388 Vercel models
  • 18 OpenRouter latest aliases
  • 18 of 18 aliases with valid alias_target.slug metadata

Before/After Comparison

Sixteen of the eighteen aliases resolve identically before and after the PR.

The two intentional changes follow the current OpenRouter catalog:

Alias Pre-PR PR
~openai/gpt-luna-latest openai/gpt-5.6-luna openai/gpt-6-luna
~openai/gpt-sol-latest openai/gpt-5.6-sol openai/gpt-6-sol

Every resolved PR target exists in the synced Vercel catalog.

Existing provider-prefix transformations remain correct:

  • x-ai/grok-4.7 becomes spacexai/grok-4.7
  • z-ai/glm-5.3 becomes zai/glm-5.3
  • z-ai/glm-5.3-flash becomes zai/glm-5.3-flash

Paths Covered

The assessment covered:

  • OpenRouter schema parsing and preservation of alias_target
  • Full provider synchronization and database persistence
  • Cached snapshot lookup
  • Five-minute cache expiry
  • Missing, null, empty, and stale alias metadata
  • Cache fallback during database failure
  • Vercel routing eligibility
  • Vercel request-body transformation
  • BYOK provider discovery
  • BYOK supported-model catalog generation
  • Embedding model translation
  • Provider-model injection
  • Concrete, non-alias model behavior
  • Vercel language-model filtering

@chrarnoldus
chrarnoldus merged commit 3797919 into main Sep 24, 2026
57 checks passed
@chrarnoldus
chrarnoldus deleted the feat/automate-vercel-latest-aliases branch September 24, 2026 08:33
iscekic pushed a commit to Kilo-Org/kilocode that referenced this pull request Sep 26, 2026
…4554)

## Automated docs sync — 2026-09-25

This PR keeps kilo.ai/docs in sync with features merged to [Kilo-Org/cloud](https://github.com/Kilo-Org/cloud) and [Kilo-Org/kilocode](https://github.com/Kilo-Org/kilocode). Every change below links to the merged PR it documents.

- Window: `2026-09-24T07:08:33.639Z` → `2026-09-25T07:05:29.302Z`
- Verification (docs build + tests): **passing**

### Surface: `cloud-mobile`

- Assignees / requested reviewers: @iscekic and @eshurakov
- Derivation: Derived from the repository layout. A product surface is a package under packages/ that ships a distinct client, plugin, backend, or hosted service: cli = packages/opencode/ + packages/tui/ + packages/server/ + packages/sdk/ + packages/plugin/; vscode = packages/kilo-vscode/ + packages/kilo-web-ui/ + packages/kilo-ui/; jetbrains = packages/kilo-jetbrains/; gateway = packages/kilo-gateway/; web = packages/kilo-console/ + packages/kilo-indexing/ + packages/kilo-memory/ + packages/kilo-sandbox/. Docs route from the IA tree packages/kilo-docs/pages/ plus docs/jetbrains-vscode-settings-parity.md: each surface lists the pages sections that document it, and the per-platform pages under packages/kilo-docs/pages/code-with-ai/platforms/ map to the matching extension surface (the vscode/ directory to vscode, jetbrains.md to jetbrains). A doc path belongs to the surface with the longest matching prefix; a path that matches none of those prefixes falls to `other` (the explicit other prefixes are listed under other.docs). The cloud surfaces are derived the same way from the Kilo-Org/cloud layout: cloud-mobile = apps/mobile/, cloud-web = apps/web/, cloud-extension = apps/extension/, and cloud-agent = the cloud-agent packages under packages/ (packages/cloud-agent-sdk/ + packages/cloud-agent-profile/). A cloud source names its repository while a bare string still means this repository. The pages under packages/kilo-docs/pages/collaborate/ document the cloud web app (app.kilo.ai: teams dashboard, billing, SSO, adoption dashboard), so they route to cloud-web. No page under packages/kilo-docs/pages/ documents the browser side-panel extension yet, so cloud-extension lists no docs prefix.
- Map: `.github/docs-sync/surfaces.json`
- Surface map: `cli`, `vscode`, `jetbrains`, `gateway`, `web`, `cloud-mobile`, `cloud-web`, `cloud-extension`, `cloud-agent`, `other`
- Source prefixes: `apps/mobile/` (Kilo-Org/cloud)
- Doc prefixes: `packages/kilo-docs/pages/code-with-ai/platforms/mobile.md`
- Paths that fall to `other`: `packages/kilo-docs/pages/community/`, `packages/kilo-docs/pages/kiloclaw/`, `packages/kilo-docs/pages/contributing/`, `packages/kilo-docs/LEARNINGS.md`, `docs/`
- Reviewers are ranked from `Kilo-Org/cloud`; the workflow needs a token with `contents: read` on that repository (repository secret `CROSS_REPO_ACCESS_TOKEN`, exposed to the upsert step as `CLOUD_REPO_TOKEN`).
- How the two were computed: Reviewers for `cloud-mobile` are ranked from `Kilo-Org/cloud` git history over `apps/mobile/` (a commit 180 days old counts half as much, half-life 180 days). Bots (author type "Bot" or a login matching /\[bot\]$/i) and people without admin, write, or maintain permission are excluded.

### Changes

<!-- docs-sync:changes:start -->
| Docs change | Source |
| --- | --- |
| updated pages/code-with-ai/platforms/mobile.md | [Kilo-Org/cloud#6386](Kilo-Org/cloud#6386) |
| updated pages/ai-providers/openai-chatgpt-plus-pro.md | [Kilo-Org/cloud#6702](Kilo-Org/cloud#6702) |
| updated pages/code-with-ai/platforms/cloud-agent.md | [Kilo-Org/cloud#6683](Kilo-Org/cloud#6683) |
| updated pages/getting-started/byok.md | [Kilo-Org/cloud#6692](Kilo-Org/cloud#6692) |
<!-- docs-sync:changes:end -->

### Pending — will retry

<!-- docs-sync:pending:start -->
_None._
<!-- docs-sync:pending:end -->

### Considered, no docs change needed

<!-- docs-sync:skipped:start -->
| PR | Reason |
| --- | --- |
| [Kilo-Org/cloud#6658](Kilo-Org/cloud#6658) | Internal sandbox lifecycle fix with no user-visible workflow or setting. |
| [Kilo-Org/cloud#6673](Kilo-Org/cloud#6673) | Internal container CA trust plumbing, no user-facing behavior. |
| [Kilo-Org/cloud#6672](Kilo-Org/cloud#6672) | Internal sandbox launch/recovery fix with no documented workflow change. |
| [Kilo-Org/cloud#6660](Kilo-Org/cloud#6660) | Internal cloud-agent queue delivery fix; no new command, setting, or workflow for users. |
| [Kilo-Org/cloud#6226](Kilo-Org/cloud#6226) | Internal gateway alias-routing change, not user-visible. |
| [#14490](#14490) | Tool-call animation and streaming UI polish; users do not need to learn a new workflow. |
| [#14530](#14530) | Bug fix restoring intended worktree-pool behavior, no doc change needed. |
| [#14529](#14529) | Bug fix restoring tab/panel state across project switches. |
| [#14531](#14531) | Reconnect recovery bug fix, restores already-documented behavior. |
| [#14532](#14532) | Bug fix keeping session tab title in sync on rename. |
| [Kilo-Org/cloud#6088](Kilo-Org/cloud#6088) | Removes internal/admin model-experiment surfaces, not public product docs. |
| [Kilo-Org/cloud#6682](Kilo-Org/cloud#6682) | Internal control-socket reconnect race fix, no user-facing change. |
| [#14534](#14534) | Transcript re-render performance bug fix. |
| [#14535](#14535) | Bug fix preserving the loaded browser page across context switches. |
| [Kilo-Org/cloud#6684](Kilo-Org/cloud#6684) | Reverted by Kilo-Org/cloud#6685. |
| [Kilo-Org/cloud#6678](Kilo-Org/cloud#6678) | Dead-code constant removal, no user-visible effect. |
| [Kilo-Org/cloud#6687](Kilo-Org/cloud#6687) | Removes internal model-experiment maintenance and retains tables, no user-facing change. |
| [#14515](#14515) | JetBrains plugin unload crash fix, no documented behavior change. |
| [#14520](#14520) | JetBrains transcript/list rendering performance work. |
| [Kilo-Org/cloud#6614](Kilo-Org/cloud#6614) | Mobile PR Review header and session title bug fix, no doc change needed. |
| [Kilo-Org/cloud#6625](Kilo-Org/cloud#6625) | Internal mobile secure-store error-handling refactor. |
| [Kilo-Org/cloud#6624](Kilo-Org/cloud#6624) | Mobile auth bug fix that stops a retry loop; restores expected sign-in behavior with no new setting or workflow. |
| [#14310](#14310) | Contributor/CI fix making the kilo-v2 checkout installable; not user-visible product behavior. |
| [Kilo-Org/cloud#6611](Kilo-Org/cloud#6611) | Mobile notification-tap fix that selects the session's organization; restores correct behavior rather than adding a learnable feature. |
| [Kilo-Org/cloud#6644](Kilo-Org/cloud#6644) | Mobile sign-in layout/alignment polish; no change to what a user must do. |
| [Kilo-Org/cloud#6601](Kilo-Org/cloud#6601) | Mobile layout fix keeping empty states clear of the tab bar; purely visual. |
| [#14543](#14543) | CI/release infrastructure adding Windows binary code signing; no public docs impact. |
| [Kilo-Org/cloud#6616](Kilo-Org/cloud#6616) | Mobile visual defect fixes and a session-title fallback; no new user workflow or setting. |
| [Kilo-Org/cloud#6630](Kilo-Org/cloud#6630) | Reports an edge-case partial worktree restore; failure-path plumbing with no new user-facing workflow, target setting, or config. |
| [Kilo-Org/cloud#6699](Kilo-Org/cloud#6699) | Cloud Agent e2e stabilization plus internal idle-sandbox capacity handling; not user-visible. |
| [#14545](#14545) | Automated JetBrains release/changelog PR; underlying user-facing changes are triaged from their own PRs. |
| [Kilo-Org/cloud#6708](Kilo-Org/cloud#6708) | Internal AI-gateway request-logging policy change in the admin panel; no existing public docs surface and no change to how users run Kilo Code. |
| [#14533](#14533) | Documentation already shipped with the merged PR. The experimental.task_model_selection flag is gone from the current source, and pages/code-with-ai/agents/model-selection.md, pages/code-with-ai/agents/context-mentions.md, and pages/getting-started/settings/index.md already describe per-task selection as default-on with no stale experiment references. |
| [#14510](#14510) | Documentation already shipped with the merged PR. Marketplace companion-skill support is present in the current source (packages/opencode/src/kilocode/marketplace/companions.ts and installer), and pages/customize/marketplace.md already documents installing, publishing, and removing MCP servers with companion skills. |
<!-- docs-sync:skipped:end -->

---

(bot) Generated by the docs-sync workflow. Humans review and merge; while this PR stays open, the next daily run appends new changes here. Branch: `docs/auto-sync-2026-09-25`.
<!-- docs-sync: processed-through 2026-09-25T07:05:29.302Z -->
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.

2 participants