diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 07b9770c..b5266050 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed IME hardware cursor positioning in the custom extension editor (`ctx.ui.editor()` / extension editor dialog) by propagating focus to the internal `Editor`, preventing the terminal cursor from getting stuck at the bottom-right during composition. + ## [0.55.4] - 2026-03-02 ### New Features diff --git a/packages/coding-agent/src/modes/interactive/components/extension-editor.ts b/packages/coding-agent/src/modes/interactive/components/extension-editor.ts index a9912f00..2b4d4814 100644 --- a/packages/coding-agent/src/modes/interactive/components/extension-editor.ts +++ b/packages/coding-agent/src/modes/interactive/components/extension-editor.ts @@ -11,6 +11,7 @@ import { Container, Editor, type EditorOptions, + type Focusable, getEditorKeybindings, Spacer, Text, @@ -21,13 +22,22 @@ import { getEditorTheme, theme } from "../theme/theme.js"; import { DynamicBorder } from "./dynamic-border.js"; import { appKeyHint, keyHint } from "./keybinding-hints.js"; -export class ExtensionEditorComponent extends Container { +export class ExtensionEditorComponent extends Container implements Focusable { private editor: Editor; private onSubmitCallback: (value: string) => void; private onCancelCallback: () => void; private tui: TUI; private keybindings: KeybindingsManager; + private _focused = false; + get focused(): boolean { + return this._focused; + } + set focused(value: boolean) { + this._focused = value; + this.editor.focused = value; + } + constructor( tui: TUI, keybindings: KeybindingsManager,