diff --git a/.github/workflows/disabled/kilo.yml.disabled b/.github/workflows/disabled/kilo.yml.disabled index afedad0200c..7687af97072 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/kilo-auto/frontier diff --git a/packages/app/script/e2e-local.ts b/packages/app/script/e2e-local.ts index b66c4f2bfdc..767fdd9f74e 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/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 af8c0f060c8..522785b5729 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 e6ae9bc611b..48ec9c64feb 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 3264efb9502..fac90bbfcc4 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 f0084e959a0..de44681f69e 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 fb32b041a6f..a0268a7530e 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 ff3029d3259..7949d8add50 100644 --- a/packages/kilo-vscode/package.json +++ b/packages/kilo-vscode/package.json @@ -605,7 +605,7 @@ }, "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 74f408e0c8d..4e225014883 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -1003,7 +1003,7 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper const config = vscode.workspace.getConfiguration("kilo-code.new.model") const providerID = config.get("providerID", "kilo") - const modelID = config.get("modelID", "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 f936da02c54..18a0899c3e3 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", 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/tests/visual-regression.spec.ts-snapshots/shared/model-selector-no-providers-chromium-linux.png b/packages/kilo-vscode/tests/visual-regression.spec.ts-snapshots/shared/model-selector-no-providers-chromium-linux.png index f597731e231..01a235e81d7 100644 --- a/packages/kilo-vscode/tests/visual-regression.spec.ts-snapshots/shared/model-selector-no-providers-chromium-linux.png +++ b/packages/kilo-vscode/tests/visual-regression.spec.ts-snapshots/shared/model-selector-no-providers-chromium-linux.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0f7858b22d02fc7f30de4faae3f1f95ad7022e5e86741304b67d0f28f423e71 -size 1296 +oid sha256:2ebf160dce2e57e2547ceaabb7acd90049f4f97e9e7aea2181fe0f935e062171 +size 1808 diff --git a/packages/kilo-vscode/webview-ui/src/context/provider.tsx b/packages/kilo-vscode/webview-ui/src/context/provider.tsx index 3c9720b6b56..c38e734364a 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", 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 1a00287fcb2..ef94fdfb691 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 c517ac9ef6a..18f48f1db9c 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 ce8e539a54c..f80c48f1d7e 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/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 modelID = parts.slice(1).join("/") || "kilo-auto/frontier" // kilocode_change const now = Date.now() const seed = async () => { diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index d7566d924d5..c8ef9437218 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1256,7 +1256,7 @@ export namespace Provider { ] // kilocode_change start if (providerID.startsWith("kilo")) { - priority = ["auto-small"] + priority = ["kilo-auto/small"] } // kilocode_change end if (providerID.startsWith("github-copilot")) { @@ -1297,8 +1297,8 @@ export namespace Provider { // kilocode_change start // Check if kilo provider is available before using it const kiloProvider = await state().then((state) => state.providers["kilo"]) - if (kiloProvider && kiloProvider.models["auto-small"]) { - return getModel("kilo", "auto-small") + if (kiloProvider && kiloProvider.models["kilo-auto/small"]) { + return getModel("kilo", "kilo-auto/small") } // kilocode_change end