From 6d15d18fa766aaf6a478b63aa98c10ffd23e3d4c Mon Sep 17 00:00:00 2001 From: marius-kilocode Date: Fri, 28 Aug 2026 09:38:58 +0200 Subject: [PATCH] feat(vscode): add compaction model setting --- .changeset/quiet-compaction-model.md | 5 +++++ .../tests/unit/config-utils.test.ts | 21 +++++++++++++++++++ .../src/components/settings/ContextTab.tsx | 20 ++++++++++++++++++ .../kilo-vscode/webview-ui/src/i18n/ar.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/br.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/bs.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/da.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/de.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/en.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/es.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/fa.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/fr.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/it.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/ja.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/ko.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/nl.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/no.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/pl.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/ru.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/th.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/tr.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/uk.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/zh.ts | 4 ++++ .../kilo-vscode/webview-ui/src/i18n/zht.ts | 4 ++++ 24 files changed, 130 insertions(+) create mode 100644 .changeset/quiet-compaction-model.md diff --git a/.changeset/quiet-compaction-model.md b/.changeset/quiet-compaction-model.md new file mode 100644 index 0000000000..56efcb1eab --- /dev/null +++ b/.changeset/quiet-compaction-model.md @@ -0,0 +1,5 @@ +--- +"kilo-code": minor +--- + +Choose a separate model for conversation compaction in Context settings. diff --git a/packages/kilo-vscode/tests/unit/config-utils.test.ts b/packages/kilo-vscode/tests/unit/config-utils.test.ts index 5ca90cb714..3bbb320979 100644 --- a/packages/kilo-vscode/tests/unit/config-utils.test.ts +++ b/packages/kilo-vscode/tests/unit/config-utils.test.ts @@ -392,6 +392,27 @@ describe("ConfigState", () => { }) }) + it("sets and clears the compaction model without changing other settings", () => { + const s = new ConfigState() + const cfg: Config = { + model: "kilo/openai/gpt-4.1", + agent: { compaction: { prompt: "Keep task details" }, code: { model: "kilo/openai/gpt-4.1" } }, + } + const model = "kilo/anthropic/claude-haiku-4-5" + s.handleConfigLoaded(cfg) + s.updateConfig({ agent: { compaction: { model } } }) + + expect(s.config).toEqual({ + ...cfg, + agent: { ...cfg.agent, compaction: { prompt: "Keep task details", model } }, + }) + s.updateConfig({ agent: { compaction: { model: null } } }) + + expect(s.config).toEqual(cfg) + expect(s.draft.agent?.compaction?.model).toBeNull() + expect(configUnsetPaths(s.draft)).toEqual([["agent", "compaction", "model"]]) + }) + describe("agent permission patches", () => { it("merges nested per-agent permission patches into existing rules", () => { const s = new ConfigState() diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx index e1c92c1211..999f2e86e2 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx @@ -8,6 +8,8 @@ import { IconButton } from "@kilocode/kilo-ui/icon-button" import { useConfig } from "../../context/config" import { useLanguage } from "../../context/language" import { useMemory } from "../../context/memory" +import { parseModelString } from "../../../../src/shared/provider-model" +import { ModelSelectorBase } from "../shared/ModelSelector" import SettingsRow from "./SettingsRow" const ContextTab: Component = () => { @@ -139,6 +141,24 @@ const ContextTab: Component = () => { {language.t("settings.context.autoCompaction.title")} + + + updateConfig({ + agent: { compaction: { model: providerID && modelID ? `${providerID}/${modelID}` : null } }, + }) + } + placement="bottom-start" + allowClear + clearLabel={language.t("settings.context.compactionModel.useChatModel")} + label={language.t("settings.context.compactionModel.title")} + description={language.t("settings.context.compactionModel.description")} + /> +