From 55a1de8d9e0c93afc5ac36dea07ba413165f85df Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:03:35 +0000 Subject: [PATCH] refactor(model): migrate default to kilo-auto/frontier across codebase migrate default model IDs from kilo/auto to kilo-auto/frontier and related references across the codebase. update defaults in gateway constants, VSCode provider, tests, UI defaults, and e2e seed. align docs and examples to use kilo-auto/frontier and kilo-auto/free. this is a breaking change for existing configurations BREAKING CHANGE: update default model IDs to kilo-auto/frontier and kilo-auto/free kilo/auto and kilo/auto-free no longer used as defaults; update all references accordingly --- .github/workflows/disabled/kilo.yml.disabled | 2 +- packages/app/script/e2e-local.ts | 2 +- .../pages/code-with-ai/agents/auto-model.md | 10 +++++----- .../architecture/auto-model-tiers.md | 10 +++++----- .../kilo-docs/pages/gateway/authentication.md | 16 ++++++++-------- .../pages/gateway/models-and-providers.md | 8 ++++---- packages/kilo-gateway/src/api/constants.ts | 4 ++-- packages/kilo-vscode/package.json | 4 ++-- packages/kilo-vscode/src/KiloProvider.ts | 4 ++-- .../tests/unit/model-selector-utils.test.ts | 4 ++-- .../webview-ui/src/context/provider.tsx | 2 +- .../webview-ui/src/context/session.tsx | 2 +- .../webview-ui/src/stories/shared.stories.tsx | 2 +- packages/opencode/script/seed-e2e.ts | 6 +++--- 14 files changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/workflows/disabled/kilo.yml.disabled b/.github/workflows/disabled/kilo.yml.disabled index afedad0200..ff9d0d4cec 100644 --- a/.github/workflows/disabled/kilo.yml.disabled +++ b/.github/workflows/disabled/kilo.yml.disabled @@ -35,4 +35,4 @@ jobs: KILO_ORG_ID: ${{ secrets.KILO_ORG_ID }} KILO_PERMISSION: '{"bash": "deny"}' with: - model: kilo/kilo/auto + model: kilo-auto/frontier diff --git a/packages/app/script/e2e-local.ts b/packages/app/script/e2e-local.ts index b66c4f2bfd..be75a8a00c 100644 --- a/packages/app/script/e2e-local.ts +++ b/packages/app/script/e2e-local.ts @@ -72,7 +72,7 @@ const serverEnv = { KILO_E2E_PROJECT_DIR: repoDir, KILO_E2E_SESSION_TITLE: "E2E Session", KILO_E2E_MESSAGE: "Seeded for UI e2e", - KILO_E2E_MODEL: "kilo/kilo/auto", // kilocode_change + KILO_E2E_MODEL: "kilo-auto/frontier", // kilocode_change KILO_CLIENT: "app", } satisfies Record diff --git a/packages/kilo-docs/pages/code-with-ai/agents/auto-model.md b/packages/kilo-docs/pages/code-with-ai/agents/auto-model.md index af8c0f060c..522785b572 100644 --- a/packages/kilo-docs/pages/code-with-ai/agents/auto-model.md +++ b/packages/kilo-docs/pages/code-with-ai/agents/auto-model.md @@ -5,11 +5,11 @@ description: "Smart model routing that automatically selects the optimal AI mode # Auto Model -Auto Model (`kilo/auto`) is a smart model routing system that automatically selects the optimal AI model based on the Kilo Code mode you're using. It balances cost and capability so you get the best results without manual model switching. +Auto Model (`kilo-auto/frontier`) is a smart model routing system that automatically selects the optimal AI model based on the Kilo Code mode you're using. It balances cost and capability so you get the best results without manual model switching. ## How It Works -1. Select `kilo/auto` as your model in the model dropdown +1. Select `kilo-auto/frontier` as your model in the model dropdown 2. Start working in any mode (Code, Architect, Debug, etc.) 3. The system automatically routes your requests to the best model for that task @@ -55,18 +55,18 @@ Auto Model always routes to Claude's latest and most capable models: ## Requirements {% callout type="warning" title="Version Requirements" %} -Auto Model requires **VS Code/JetBrains extension v5.2.3+** or **CLI v1.0.15+** for automatic mode-based switching. On older versions, `kilo/auto` will default to Claude Sonnet for all requests. +Auto Model requires **VS Code/JetBrains extension v5.2.3+** or **CLI v1.0.15+** for automatic mode-based switching. On older versions, `kilo-auto/frontier` will default to Claude Sonnet for all requests. {% /callout %} ## Getting Started {% callout type="tip" title="Quick Setup" %} -Select `kilo/auto` from the model dropdown in the Kilo Code chat interface. That's all you need to do. +Select `kilo-auto/frontier` from the model dropdown in the Kilo Code chat interface. That's all you need to do. {% /callout %} 1. Open Kilo Code in VS Code or JetBrains 2. Click the model selector dropdown -3. Choose `kilo/auto` +3. Choose `kilo-auto/frontier` 4. Start chatting - the right model is selected automatically based on your current mode ## When to Use Auto Model diff --git a/packages/kilo-docs/pages/contributing/architecture/auto-model-tiers.md b/packages/kilo-docs/pages/contributing/architecture/auto-model-tiers.md index e6ae9bc611..48ec9c64fe 100644 --- a/packages/kilo-docs/pages/contributing/architecture/auto-model-tiers.md +++ b/packages/kilo-docs/pages/contributing/architecture/auto-model-tiers.md @@ -7,7 +7,7 @@ description: "Extending Kilo Auto to a family of smart model tiers that match us ## Overview -Today, Kilo Auto (`kilo/auto`) solves a real problem: users shouldn't have to know which AI model is best for planning versus coding. It picks the right model for the task automatically. +Today, Kilo Auto (`kilo-auto/frontier`) solves a real problem: users shouldn't have to know which AI model is best for planning versus coding. It picks the right model for the task automatically. But it only solves that problem for one audience — users willing to pay for frontier models. Everyone else is left navigating a long, intimidating model list where the "best" free or open-weight option changes monthly. This is a source of friction for new free users and cost-conscious teams. @@ -41,13 +41,13 @@ Extend Kilo Auto into four tiers. **What problem it solves**: Professional developers and teams don't want to spend time evaluating which paid model is best for which task — and the answer keeps changing as providers release new versions. Frontier eliminates that research burden. Users get the best paid models automatically, matched to their task, without ever having to compare benchmarks or read release notes. -**What it does**: This is what `kilo/auto` is today. It routes between the best paid models based on the task — stronger reasoning models for planning and architecture, faster models for code generation and editing. It optimizes for the best balance of capability, speed, and token efficiency. +**What it does**: This is what `kilo-auto/frontier` is today. It routes between the best paid models based on the task — stronger reasoning models for planning and architecture, faster models for code generation and editing. It optimizes for the best balance of capability, speed, and token efficiency. **Why it matters**: Frontier models offer the highest code quality, best instruction following, and most reliable tool use. For professional developers and teams where output quality directly impacts productivity, this is the right choice. **Pricing**: Paid. Uses credits. -**Backward compatibility**: The existing `kilo/auto` model ID becomes an alias for `kilo/auto-frontier`. No behavior change for existing users. +**Backward compatibility**: The existing `kilo/auto` model ID becomes an alias for `kilo-auto/frontier`. No behavior change for existing users. ### Auto: Free @@ -121,8 +121,8 @@ The UI shows the tier name (e.g., "Auto: Frontier"), not the underlying model. U ## Requirements -- `kilo/auto` remains as a backward-compatible alias for `kilo/auto-frontier` -- Unauthenticated users default to `kilo/auto-free` with no configuration required +- `kilo/auto` remains as a backward-compatible alias for `kilo-auto/frontier` +- Unauthenticated users default to `kilo-auto/free` with no configuration required - Free tier must handle model availability changes gracefully — fallback to next-best free model, never surface a "model unavailable" error if any free model exists - Open tier must use open-weight models as the primary routing targets - Auto: Small must detect credit availability and select paid or free small models accordingly diff --git a/packages/kilo-docs/pages/gateway/authentication.md b/packages/kilo-docs/pages/gateway/authentication.md index 3264efb950..fac90bbfcc 100644 --- a/packages/kilo-docs/pages/gateway/authentication.md +++ b/packages/kilo-docs/pages/gateway/authentication.md @@ -111,11 +111,11 @@ This provides the benefit of Vercel's reliability infrastructure while using you The gateway accepts the following headers: -| Header | Required | Description | -| --------------------------- | ----------------------- | -------------------------------------------- | -| `Authorization` | Yes (unless free model) | `Bearer ` | -| `Content-Type` | Yes | `application/json` | -| `X-KiloCode-OrganizationId` | No | Organization context for org-scoped requests | -| `X-KiloCode-TaskId` | No | Task identifier for prompt cache keying | -| `X-KiloCode-Version` | No | Client version string | -| `x-kilocode-mode` | No | Mode hint for `kilo/auto` model routing | +| Header | Required | Description | +| --------------------------- | ----------------------- | ------------------------------------------------ | +| `Authorization` | Yes (unless free model) | `Bearer ` | +| `Content-Type` | Yes | `application/json` | +| `X-KiloCode-OrganizationId` | No | Organization context for org-scoped requests | +| `X-KiloCode-TaskId` | No | Task identifier for prompt cache keying | +| `X-KiloCode-Version` | No | Client version string | +| `x-kilocode-mode` | No | Mode hint for `kilo-auto/frontier` model routing | diff --git a/packages/kilo-docs/pages/gateway/models-and-providers.md b/packages/kilo-docs/pages/gateway/models-and-providers.md index f0084e959a..de44681f69 100644 --- a/packages/kilo-docs/pages/gateway/models-and-providers.md +++ b/packages/kilo-docs/pages/gateway/models-and-providers.md @@ -64,9 +64,9 @@ Several models are available at no cost, subject to rate limits: Free models are available to both authenticated and anonymous users. Anonymous users are rate-limited to 200 requests per hour per IP address. -## The `kilo/auto` model +## The `kilo-auto/frontier` model -The `kilo/auto` virtual model automatically selects the best model based on the task type. The selection is controlled by the `x-kilocode-mode` request header: +The `kilo-auto/frontier` virtual model automatically selects the best model based on the task type. The selection is controlled by the `x-kilocode-mode` request header: | Mode | Resolved Model | | -------------------------------------------------------------- | ----------------------------- | @@ -76,7 +76,7 @@ The `kilo/auto` virtual model automatically selects the best model based on the ```json { - "model": "kilo/auto", + "model": "kilo-auto/frontier", "messages": [{ "role": "user", "content": "Help me design a database schema" }] } ``` @@ -88,7 +88,7 @@ curl -X POST "https://api.kilo.ai/api/gateway/chat/completions" \ -H "Authorization: Bearer $KILO_API_KEY" \ -H "x-kilocode-mode: plan" \ -H "Content-Type: application/json" \ - -d '{"model": "kilo/auto", "messages": [{"role": "user", "content": "Design a database schema"}]}' + -d '{"model": "kilo-auto/frontier", "messages": [{"role": "user", "content": "Design a database schema"}]}' ``` ## Providers diff --git a/packages/kilo-gateway/src/api/constants.ts b/packages/kilo-gateway/src/api/constants.ts index fb32b041a6..a0268a7530 100644 --- a/packages/kilo-gateway/src/api/constants.ts +++ b/packages/kilo-gateway/src/api/constants.ts @@ -19,10 +19,10 @@ export const KILO_OPENROUTER_BASE = `${KILO_API_BASE}/api/openrouter` export const POLL_INTERVAL_MS = 3000 /** Default model for authenticated users */ -export const DEFAULT_MODEL = "kilo/auto" +export const DEFAULT_MODEL = "kilo-auto/frontier" /** Default model for anonymous/free usage */ -export const DEFAULT_FREE_MODEL = "kilo/auto-free" +export const DEFAULT_FREE_MODEL = "kilo-auto/free" /** Token expiration duration in milliseconds (1 year) */ export const TOKEN_EXPIRATION_MS = 365 * 24 * 60 * 60 * 1000 diff --git a/packages/kilo-vscode/package.json b/packages/kilo-vscode/package.json index ff3029d325..e2d06716a6 100644 --- a/packages/kilo-vscode/package.json +++ b/packages/kilo-vscode/package.json @@ -600,12 +600,12 @@ }, "kilo-code.new.model.providerID": { "type": "string", - "default": "kilo", + "default": "kilo-auto", "description": "Default model provider ID for new sessions" }, "kilo-code.new.model.modelID": { "type": "string", - "default": "kilo/auto", + "default": "kilo-auto/frontier", "description": "Default model ID for new sessions" }, "kilo-code.new.autocomplete.enableAutoTrigger": { diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts index 74f408e0c8..a6322d9d0c 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -1002,8 +1002,8 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper const normalized = indexProvidersById(response.all) const config = vscode.workspace.getConfiguration("kilo-code.new.model") - const providerID = config.get("providerID", "kilo") - const modelID = config.get("modelID", "kilo/auto") + const providerID = config.get("providerID", "kilo-auto") + const modelID = config.get("modelID", "kilo-auto/frontier") const message = { type: "providersLoaded", diff --git a/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts b/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts index f936da02c5..33038379bc 100644 --- a/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts +++ b/packages/kilo-vscode/tests/unit/model-selector-utils.test.ts @@ -97,8 +97,8 @@ describe("buildTriggerLabel", () => { }) it("returns modelID for kilo gateway raw selection", () => { - const raw = { providerID: "kilo", modelID: "kilo/auto" } - expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("kilo/auto") + const raw = { providerID: "kilo-auto", modelID: "kilo-auto/frontier" } + expect(buildTriggerLabel(undefined, undefined, raw, false, "", true, labels)).toBe("kilo-auto/frontier") }) it("returns providerID / modelID for non-kilo raw selection", () => { diff --git a/packages/kilo-vscode/webview-ui/src/context/provider.tsx b/packages/kilo-vscode/webview-ui/src/context/provider.tsx index 3c9720b6b5..d32809de70 100644 --- a/packages/kilo-vscode/webview-ui/src/context/provider.tsx +++ b/packages/kilo-vscode/webview-ui/src/context/provider.tsx @@ -20,7 +20,7 @@ interface ProviderContextValue { findModel: (selection: ModelSelection | null) => EnrichedModel | undefined } -const KILO_AUTO: ModelSelection = { providerID: "kilo", modelID: "kilo/auto" } +const KILO_AUTO: ModelSelection = { providerID: "kilo-auto", modelID: "kilo-auto/frontier" } export const ProviderContext = createContext() diff --git a/packages/kilo-vscode/webview-ui/src/context/session.tsx b/packages/kilo-vscode/webview-ui/src/context/session.tsx index 1a00287fcb..ef94fdfb69 100644 --- a/packages/kilo-vscode/webview-ui/src/context/session.tsx +++ b/packages/kilo-vscode/webview-ui/src/context/session.tsx @@ -238,7 +238,7 @@ export const SessionProvider: ParentComponent = (props) => { }) // Global model selection per agent/mode - // Precedence: user override > per-mode config > global default > kilo/auto + // Precedence: user override > per-mode config > global default > kilo-auto/frontier const selected = createMemo(() => { const agentName = selectedAgentName() const override = store.modelSelections[agentName] diff --git a/packages/kilo-vscode/webview-ui/src/stories/shared.stories.tsx b/packages/kilo-vscode/webview-ui/src/stories/shared.stories.tsx index c517ac9ef6..d11c8b23e6 100644 --- a/packages/kilo-vscode/webview-ui/src/stories/shared.stories.tsx +++ b/packages/kilo-vscode/webview-ui/src/stories/shared.stories.tsx @@ -24,7 +24,7 @@ export const ModelSelectorNoProviders: Story = {
{}} placement="bottom-start" /> diff --git a/packages/opencode/script/seed-e2e.ts b/packages/opencode/script/seed-e2e.ts index ce8e539a54..4810089bf0 100644 --- a/packages/opencode/script/seed-e2e.ts +++ b/packages/opencode/script/seed-e2e.ts @@ -1,10 +1,10 @@ const dir = process.env.KILO_E2E_PROJECT_DIR ?? process.cwd() const title = process.env.KILO_E2E_SESSION_TITLE ?? "E2E Session" const text = process.env.KILO_E2E_MESSAGE ?? "Seeded for UI e2e" -const model = process.env.KILO_E2E_MODEL ?? "kilo/kilo/auto" +const model = process.env.KILO_E2E_MODEL ?? "kilo-auto/frontier" const parts = model.split("/") -const providerID = parts[0] ?? "kilo" // kilocode_change -const modelID = parts.slice(1).join("/") || "kilo/auto" // kilocode_change +const providerID = parts[0] ?? "kilo-auto" // kilocode_change +const modelID = parts.slice(1).join("/") || "kilo-auto/frontier" // kilocode_change const now = Date.now() const seed = async () => {