fix(vscode): stabilize expanded edit blocks

This commit is contained in:
marius-kilocode
2026-06-16 14:04:13 +02:00
parent 327eddb196
commit 87157ae99e
23 changed files with 141 additions and 91 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Prevent expanded code edit blocks from flickering when an edit completes, and localize their display settings.
@@ -1,6 +1,6 @@
import { describe, expect, it } from "bun:test"
import { messageTurns } from "../../webview-ui/src/context/session-queue"
import { partitionRows, transcriptRows } from "../../webview-ui/src/context/transcript-rows"
import { partitionRows, retainTurn, transcriptRows } from "../../webview-ui/src/context/transcript-rows"
import type { Message, Part } from "../../webview-ui/src/types/messages"
const base = {
@@ -154,6 +154,20 @@ describe("transcriptRows", () => {
})
})
describe("retainTurn", () => {
it("keeps the completed turn mounted until another turn takes ownership", () => {
const active = retainTurn(undefined, "session", "u1", false)
expect(retainTurn(active, "session", undefined, false)).toBe(active)
expect(retainTurn(active, "session", "u2", false)).toEqual({ sid: "session", turn: "u2" })
})
it("keeps the paused turn and clears it when the session changes", () => {
const active = { sid: "session", turn: "u1" }
expect(retainTurn(active, "session", "u2", true)).toBe(active)
expect(retainTurn(active, "other", undefined, false)).toBeUndefined()
})
})
describe("partitionRows", () => {
it("keeps completed history and the active user row virtualized", () => {
const u1 = user("u1")
@@ -42,7 +42,13 @@ import {
stableMessageTurns,
type MessageTurn,
} from "../../context/session-queue"
import { partitionRows, transcriptRows, type TranscriptRow } from "../../context/transcript-rows"
import {
partitionRows,
retainTurn,
transcriptRows,
type TranscriptHold,
type TranscriptRow,
} from "../../context/transcript-rows"
import type { QuestionRequest, SuggestionRequest } from "../../types/messages"
interface MessageListProps {
@@ -113,21 +119,12 @@ export const MessageList: Component<MessageListProps> = (props) => {
prev,
)
})
const [held, setHeld] = createSignal<{ sid: string; turn: string }>()
const [held, setHeld] = createSignal<TranscriptHold>()
createEffect(() => {
const id = activeUserID()
const sid = session.currentSessionID()
const paused = autoScroll.userScrolled()
if (!sid || (!id && !paused)) {
setHeld(undefined)
return
}
if (!id) return
if (!paused) {
setHeld({ sid, turn: id })
return
}
setHeld((prev) => (prev?.sid === sid ? prev : { sid, turn: id }))
setHeld((prev) => retainTurn(prev, sid, id, paused))
})
const direct = createMemo(() => {
const item = held()
@@ -140,6 +137,8 @@ export const MessageList: Component<MessageListProps> = (props) => {
// Virtua continues to own completed history and stable live chunks, but not
// the growing assistant suffix whose measurements would produce visible jumps.
const partition = createMemo(() => partitionRows(rows(), direct()))
const tail = createMemo(() => partition().direct.map((row) => row.key))
const lookup = createMemo(() => new Map(partition().direct.map((row) => [row.key, row])))
const keys = createMemo(() => partition().virtual.map((row) => row.key))
const fingerprint = createMemo(() => rowFingerprint(keys()))
const measurement = createMemo(() => {
@@ -322,8 +321,8 @@ export const MessageList: Component<MessageListProps> = (props) => {
)}
</Virtualizer>
</Show>
<For each={partition().direct}>
{(row) => <TranscriptRowView row={row} onForkMessage={props.onForkMessage} />}
<For each={tail()}>
{(key) => <TranscriptRowView row={lookup().get(key)!} onForkMessage={props.onForkMessage} />}
</For>
</div>
</Show>
@@ -54,6 +54,23 @@ export interface TranscriptPartition {
queued: TranscriptRow[]
}
export interface TranscriptHold {
sid: string
turn: string
}
export function retainTurn(
prev: TranscriptHold | undefined,
sid: string | undefined,
turn: string | undefined,
paused: boolean,
) {
if (!sid) return undefined
if (!turn || paused) return prev?.sid === sid ? prev : turn ? { sid, turn } : undefined
if (prev?.sid === sid && prev.turn === turn) return prev
return { sid, turn }
}
function same<T>(a: T[], b: T[]) {
if (a.length !== b.length) return false
for (let i = 0; i < a.length; i += 1) {
+5 -4
View File
@@ -1503,10 +1503,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "كتل تعديلات التعليمات البرمجية",
"settings.display.codeEdit.description":
"اختر ما إذا كانت الكتل التي تعرض تعديلات التعليمات البرمجية والفروقات تبدأ موسّعة أم مطوية.",
"settings.display.codeEdit.expanded": "موسّعة",
"settings.display.codeEdit.collapsed": "مطوية",
"settings.providers.defaultModel.title": "النموذج الافتراضي",
"settings.providers.defaultModel.description": "النموذج الأساسي للمحادثات",
"settings.providers.smallModel.title": "نموذج صغير",
+5 -4
View File
@@ -1548,10 +1548,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Blocos de edição de código",
"settings.display.codeEdit.description":
"Escolha se os blocos que exibem edições de código e diferenças começam expandidos ou recolhidos.",
"settings.display.codeEdit.expanded": "Expandidos",
"settings.display.codeEdit.collapsed": "Recolhidos",
"settings.providers.defaultModel.title": "Modelo padrão",
"settings.providers.defaultModel.description": "Modelo principal para conversas",
"settings.providers.smallModel.title": "Modelo pequeno",
+5 -4
View File
@@ -1543,10 +1543,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Blokovi izmjena koda",
"settings.display.codeEdit.description":
"Odaberite da li će blokovi koji prikazuju izmjene koda i razlike u početku biti prošireni ili sažeti.",
"settings.display.codeEdit.expanded": "Prošireni",
"settings.display.codeEdit.collapsed": "Sažeti",
"settings.providers.defaultModel.title": "Zadani model",
"settings.providers.defaultModel.description": "Primarni model za razgovore",
"settings.providers.smallModel.title": "Mali model",
+5 -4
View File
@@ -1532,10 +1532,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Koderedigeringsblokke",
"settings.display.codeEdit.description":
"Vælg, om blokke, der viser koderedigeringer og forskelle, starter foldet ud eller sammen.",
"settings.display.codeEdit.expanded": "Foldet ud",
"settings.display.codeEdit.collapsed": "Foldet sammen",
"settings.providers.defaultModel.title": "Standardmodel",
"settings.providers.defaultModel.description": "Primær model til samtaler",
"settings.providers.smallModel.title": "Lille model",
+5 -4
View File
@@ -1563,10 +1563,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Blöcke für Codebearbeitungen",
"settings.display.codeEdit.description":
"Wählen Sie, ob Blöcke mit Codebearbeitungen und Unterschieden anfangs aus- oder eingeklappt sind.",
"settings.display.codeEdit.expanded": "Ausgeklappt",
"settings.display.codeEdit.collapsed": "Eingeklappt",
"settings.providers.defaultModel.title": "Standardmodell",
"settings.providers.defaultModel.description": "Primäres Modell für Gespräche",
"settings.providers.smallModel.title": "Kleines Modell",
+5 -4
View File
@@ -1556,10 +1556,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Bloques de edición de código",
"settings.display.codeEdit.description":
"Elige si los bloques de edición de código y de diferencias aparecen inicialmente expandidos o contraídos.",
"settings.display.codeEdit.expanded": "Expandidos",
"settings.display.codeEdit.collapsed": "Contraídos",
"settings.providers.defaultModel.title": "Modelo predeterminado",
"settings.providers.defaultModel.description": "Modelo principal para conversaciones",
"settings.providers.smallModel.title": "Modelo pequeño",
+5 -4
View File
@@ -1576,10 +1576,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Blocs de modification du code",
"settings.display.codeEdit.description":
"Choisissez si les blocs de modification du code et de différences sont initialement développés ou réduits.",
"settings.display.codeEdit.expanded": "Développés",
"settings.display.codeEdit.collapsed": "Réduits",
"settings.providers.defaultModel.title": "Modèle par défaut",
"settings.providers.defaultModel.description": "Modèle principal pour les conversations",
"settings.providers.smallModel.title": "Petit modèle",
+5 -4
View File
@@ -1364,10 +1364,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Scegli se i blocchi comando terminale iniziano espansi o compressi.",
"settings.display.terminalCommand.expanded": "Espansi",
"settings.display.terminalCommand.collapsed": "Compressi",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Blocchi di modifica del codice",
"settings.display.codeEdit.description":
"Scegli se i blocchi delle modifiche al codice e delle differenze iniziano espansi o compressi.",
"settings.display.codeEdit.expanded": "Espansi",
"settings.display.codeEdit.collapsed": "Compressi",
"settings.providers.defaultModel.title": "Modello predefinito",
"settings.providers.defaultModel.description": "Modello principale per le conversazioni",
"settings.providers.smallModel.title": "Modello leggero",
+5 -4
View File
@@ -1527,10 +1527,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "コード編集ブロック",
"settings.display.codeEdit.description":
"コード編集ブロックと差分ブロックを最初から展開するか折りたたむかを選択します。",
"settings.display.codeEdit.expanded": "展開",
"settings.display.codeEdit.collapsed": "折りたたみ",
"settings.providers.defaultModel.title": "デフォルトモデル",
"settings.providers.defaultModel.description": "会話のプライマリモデル",
"settings.providers.smallModel.title": "小型モデル",
+4 -4
View File
@@ -1512,10 +1512,10 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "코드 편집 블록",
"settings.display.codeEdit.description": "코드 편집 블록과 차이점 블록을 처음부터 펼칠지 접을지 선택합니다.",
"settings.display.codeEdit.expanded": "펼침",
"settings.display.codeEdit.collapsed": "접힘",
"settings.providers.defaultModel.title": "기본 모델",
"settings.providers.defaultModel.description": "대화의 기본 모델",
"settings.providers.smallModel.title": "소형 모델",
+5 -4
View File
@@ -1507,10 +1507,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Blokken met codebewerkingen",
"settings.display.codeEdit.description":
"Kies of blokken met codebewerkingen en verschillen standaard uitgeklapt of ingeklapt zijn.",
"settings.display.codeEdit.expanded": "Uitgeklapt",
"settings.display.codeEdit.collapsed": "Ingeklapt",
"settings.providers.defaultModel.title": "Standaard Model",
"settings.providers.defaultModel.description": "Primair model voor gesprekken",
+5 -4
View File
@@ -1530,10 +1530,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Blokker for kodeendringer",
"settings.display.codeEdit.description":
"Velg om blokker for kodeendringer og forskjeller skal være utvidet eller skjult fra start.",
"settings.display.codeEdit.expanded": "Utvidet",
"settings.display.codeEdit.collapsed": "Skjult",
"settings.providers.defaultModel.title": "Standardmodell",
"settings.providers.defaultModel.description": "Primær modell for samtaler",
"settings.providers.smallModel.title": "Liten modell",
+5 -4
View File
@@ -1540,10 +1540,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Bloki edycji kodu",
"settings.display.codeEdit.description":
"Wybierz, czy bloki edycji kodu i podglądy różnic mają być początkowo rozwinięte czy zwinięte.",
"settings.display.codeEdit.expanded": "Rozwinięte",
"settings.display.codeEdit.collapsed": "Zwinięte",
"settings.providers.defaultModel.title": "Domyślny model",
"settings.providers.defaultModel.description": "Główny model do rozmów",
"settings.providers.smallModel.title": "Mały model",
+5 -4
View File
@@ -1541,10 +1541,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Блоки изменений кода",
"settings.display.codeEdit.description":
"Выберите, будут ли блоки изменений кода и различий изначально развёрнуты или свёрнуты.",
"settings.display.codeEdit.expanded": "Развёрнуты",
"settings.display.codeEdit.collapsed": "Свёрнуты",
"settings.providers.defaultModel.title": "Модель по умолчанию",
"settings.providers.defaultModel.description": "Основная модель для разговоров",
"settings.providers.smallModel.title": "Малая модель",
+4 -4
View File
@@ -1511,10 +1511,10 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "บล็อกการแก้ไขโค้ด",
"settings.display.codeEdit.description": "เลือกว่าบล็อกการแก้ไขโค้ดและบล็อกแสดงความแตกต่างจะเริ่มต้นแบบขยายหรือยุบ",
"settings.display.codeEdit.expanded": "ขยาย",
"settings.display.codeEdit.collapsed": "ยุบ",
"settings.providers.defaultModel.title": "โมเดลเริ่มต้น",
"settings.providers.defaultModel.description": "โมเดลหลักสำหรับบทสนทนา",
"settings.providers.smallModel.title": "โมเดลขนาดเล็ก",
+5 -4
View File
@@ -1496,10 +1496,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Kod Düzenleme Blokları",
"settings.display.codeEdit.description":
"Kod düzenleme ve fark bloklarının başlangıçta genişletilmiş mi yoksa daraltılmış mı olacağını seçin.",
"settings.display.codeEdit.expanded": "Genişletilmiş",
"settings.display.codeEdit.collapsed": "Daraltılmış",
"settings.providers.defaultModel.title": "Varsayılan Model",
"settings.providers.defaultModel.description": "Sohbetler için birincil model",
+5 -4
View File
@@ -1495,10 +1495,11 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Блоки редагування коду",
"settings.display.codeEdit.description":
"Виберіть, чи будуть блоки редагування коду та відмінностей спочатку розгорнутими чи згорнутими.",
"settings.display.codeEdit.expanded": "Розгорнуті",
"settings.display.codeEdit.collapsed": "Згорнуті",
"settings.providers.defaultModel.title": "Модель за замовчуванням",
"settings.providers.defaultModel.description": "Основна модель для чатів",
+4 -4
View File
@@ -1475,10 +1475,10 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "代码编辑块",
"settings.display.codeEdit.description": "选择代码编辑块和差异块的初始状态:展开或折叠。",
"settings.display.codeEdit.expanded": "展开",
"settings.display.codeEdit.collapsed": "折叠",
"settings.providers.defaultModel.title": "默认模型",
"settings.providers.defaultModel.description": "对话的主要模型",
"settings.providers.smallModel.title": "小模型",
+4 -4
View File
@@ -1445,10 +1445,10 @@ export const dict = {
"settings.display.terminalCommand.description": "Choose whether terminal command blocks start expanded or collapsed.",
"settings.display.terminalCommand.expanded": "Expanded",
"settings.display.terminalCommand.collapsed": "Collapsed",
"settings.display.codeEdit.title": "Code Edit Blocks",
"settings.display.codeEdit.description": "Choose whether code edit and diff blocks start expanded or collapsed.",
"settings.display.codeEdit.expanded": "Expanded",
"settings.display.codeEdit.collapsed": "Collapsed",
"settings.display.codeEdit.title": "程式碼編輯區塊",
"settings.display.codeEdit.description": "選擇程式碼編輯區塊與差異區塊的初始狀態:展開或收合。",
"settings.display.codeEdit.expanded": "展開",
"settings.display.codeEdit.collapsed": "收合",
"settings.providers.defaultModel.title": "預設模型",
"settings.providers.defaultModel.description": "對話的主要模型",
"settings.providers.smallModel.title": "小模型",