From 22279bc03b046c856a4d312b3452dc12f61a8fe3 Mon Sep 17 00:00:00 2001 From: Christian Stewart Date: Thu, 25 Jun 2026 13:00:32 -0700 Subject: [PATCH 1/2] fix: cramped slash autocomplete menu --- packages/coding-agent/CHANGELOG.md | 4 ++++ .../src/config/settings-schema.ts | 3 +-- packages/tui/CHANGELOG.md | 4 ++++ packages/tui/src/components/editor.ts | 3 +-- packages/tui/test/editor.test.ts | 24 +++++++++++++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 702ba1d2e..a939e8b83 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Changed + +- Increased the default autocomplete dropdown from 5 to 10 visible items so slash command menus are less cramped. + ## [16.3.8] - 2026-07-05 ### Fixed diff --git a/packages/coding-agent/src/config/settings-schema.ts b/packages/coding-agent/src/config/settings-schema.ts index 00af4ed69..da512d952 100644 --- a/packages/coding-agent/src/config/settings-schema.ts +++ b/packages/coding-agent/src/config/settings-schema.ts @@ -1493,7 +1493,7 @@ export const SETTINGS_SCHEMA = { autocompleteMaxVisible: { type: "number", - default: 5, + default: 10, ui: { tab: "interaction", group: "Input", @@ -1502,7 +1502,6 @@ export const SETTINGS_SCHEMA = { options: [ { value: "3", label: "3 items" }, { value: "5", label: "5 items" }, - { value: "7", label: "7 items" }, { value: "10", label: "10 items" }, { value: "15", label: "15 items" }, { value: "20", label: "20 items" }, diff --git a/packages/tui/CHANGELOG.md b/packages/tui/CHANGELOG.md index b99d781d7..8c01a59cd 100644 --- a/packages/tui/CHANGELOG.md +++ b/packages/tui/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Kept slash command autocomplete rows compact by truncating descriptions instead of wrapping them into multi-line blocks, and raised the editor's default autocomplete window to 10 items. + ## [16.3.7] - 2026-07-05 ### Fixed diff --git a/packages/tui/src/components/editor.ts b/packages/tui/src/components/editor.ts index 2eb353fd3..4d88f266f 100644 --- a/packages/tui/src/components/editor.ts +++ b/packages/tui/src/components/editor.ts @@ -31,7 +31,6 @@ const SLASH_COMMAND_SELECT_LIST_LAYOUT: SelectListLayoutOptions = { minPrimaryColumnWidth: 12, maxPrimaryColumnWidth: 32, overflowSearch: false, - wrapDescription: true, }; function sanitizeLoadedText(text: string): string { @@ -423,7 +422,7 @@ export class Editor implements Component, Focusable { #autocompleteState: "regular" | "force" | null = null; #autocompletePrefix: string = ""; #autocompleteRequestId: number = 0; - #autocompleteMaxVisible: number = 5; + #autocompleteMaxVisible: number = 10; onAutocompleteUpdate?: () => void; // Paste tracking for large pastes diff --git a/packages/tui/test/editor.test.ts b/packages/tui/test/editor.test.ts index d451c758e..9240aebb0 100644 --- a/packages/tui/test/editor.test.ts +++ b/packages/tui/test/editor.test.ts @@ -309,6 +309,30 @@ describe("Editor component", () => { await expect(promise).resolves.toBe("/"); }); + it("renders slash-command suggestions as compact item rows", async () => { + const editor = new Editor(defaultEditorTheme); + const longDescription = + "Plan and execute non-trivial architectural improvements to the codebase without turning each slash command into a multi-line block."; + editor.setAutocompleteProvider( + new CombinedAutocompleteProvider( + Array.from({ length: 12 }, (_, i) => ({ + name: `cmd${i}`, + description: longDescription, + })), + "/tmp", + ), + ); + + editor.handleInput("/"); + await Bun.sleep(0); + + const rendered = editor.render(80).map(line => stripVTControlCharacters(line)); + for (let i = 0; i < 10; i += 1) { + expect(rendered.some(line => line.includes(`cmd${i}`))).toBe(true); + } + expect(rendered.some(line => line.includes("cmd10"))).toBe(false); + }); + it("triggers file-reference autocomplete when typing at-sign", async () => { const editor = new Editor(defaultEditorTheme); const { promise, resolve } = Promise.withResolvers(); From b9a12a815f474215eb77f10b7ff9c98485b272d9 Mon Sep 17 00:00:00 2001 From: Christian Stewart Date: Sun, 5 Jul 2026 17:27:35 -0700 Subject: [PATCH 2/2] fix(tui): keep autocomplete row fix behavior-preserving Signed-off-by: Christian Stewart --- packages/coding-agent/CHANGELOG.md | 3 --- packages/coding-agent/src/config/settings-schema.ts | 3 ++- packages/tui/CHANGELOG.md | 2 +- packages/tui/src/components/editor.ts | 2 +- packages/tui/test/editor.test.ts | 1 + 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index a939e8b83..65cdbf02c 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,9 +2,6 @@ ## [Unreleased] -### Changed - -- Increased the default autocomplete dropdown from 5 to 10 visible items so slash command menus are less cramped. ## [16.3.8] - 2026-07-05 diff --git a/packages/coding-agent/src/config/settings-schema.ts b/packages/coding-agent/src/config/settings-schema.ts index da512d952..00af4ed69 100644 --- a/packages/coding-agent/src/config/settings-schema.ts +++ b/packages/coding-agent/src/config/settings-schema.ts @@ -1493,7 +1493,7 @@ export const SETTINGS_SCHEMA = { autocompleteMaxVisible: { type: "number", - default: 10, + default: 5, ui: { tab: "interaction", group: "Input", @@ -1502,6 +1502,7 @@ export const SETTINGS_SCHEMA = { options: [ { value: "3", label: "3 items" }, { value: "5", label: "5 items" }, + { value: "7", label: "7 items" }, { value: "10", label: "10 items" }, { value: "15", label: "15 items" }, { value: "20", label: "20 items" }, diff --git a/packages/tui/CHANGELOG.md b/packages/tui/CHANGELOG.md index 8c01a59cd..1c864ff3e 100644 --- a/packages/tui/CHANGELOG.md +++ b/packages/tui/CHANGELOG.md @@ -4,7 +4,7 @@ ### Fixed -- Kept slash command autocomplete rows compact by truncating descriptions instead of wrapping them into multi-line blocks, and raised the editor's default autocomplete window to 10 items. +- Kept slash command autocomplete rows compact by truncating descriptions instead of wrapping them into multi-line blocks. ## [16.3.7] - 2026-07-05 diff --git a/packages/tui/src/components/editor.ts b/packages/tui/src/components/editor.ts index 4d88f266f..10e23a1ab 100644 --- a/packages/tui/src/components/editor.ts +++ b/packages/tui/src/components/editor.ts @@ -422,7 +422,7 @@ export class Editor implements Component, Focusable { #autocompleteState: "regular" | "force" | null = null; #autocompletePrefix: string = ""; #autocompleteRequestId: number = 0; - #autocompleteMaxVisible: number = 10; + #autocompleteMaxVisible: number = 5; onAutocompleteUpdate?: () => void; // Paste tracking for large pastes diff --git a/packages/tui/test/editor.test.ts b/packages/tui/test/editor.test.ts index 9240aebb0..da3f0f7d3 100644 --- a/packages/tui/test/editor.test.ts +++ b/packages/tui/test/editor.test.ts @@ -311,6 +311,7 @@ describe("Editor component", () => { it("renders slash-command suggestions as compact item rows", async () => { const editor = new Editor(defaultEditorTheme); + editor.setAutocompleteMaxVisible(10); const longDescription = "Plan and execute non-trivial architectural improvements to the codebase without turning each slash command into a multi-line block."; editor.setAutocompleteProvider(