release: ship v1.6.0 with paged suggestions and a cleaner phrase memory
Next-sentence suggestions now arrive one at a time up to twelve, shown three per page with Ctrl+Alt+Up/Down to move, Left/Right to page, Enter to accept and Esc to close; old default bindings migrate and the panel guide follows the live bindings. The overlay is redesigned, stays put while candidates stream and sits outside the input box when no caret is reported. The personal phrase memory stops learning from terminals, code editors and the coding-agent hub, ignores symbol-heavy lines and empty-field placeholders, and prunes existing entries that break those rules. Fixes suggestion keys starting dictation, installs stuck on a pre-1.5.0 speech engine without the focus endpoint, Ollama runner windows flashing while typing, the speech engine starting twice, and cold-model timeouts. Live captions can be dragged to a remembered position and show a waiting notice until the first line arrives. Bumps the product version to 1.6.0 (Android/iOS build 1060000).
This commit is contained in:
parent
856e375f3e
commit
2fe20fa7b5
71 changed files with 2469 additions and 366 deletions
|
|
@ -681,6 +681,8 @@ export type KeyBindingActionId =
|
|||
| 'suggestion-next'
|
||||
| 'suggestion-prev'
|
||||
| 'suggestion-dismiss'
|
||||
| 'suggestion-page-next'
|
||||
| 'suggestion-page-prev'
|
||||
|
||||
/** 액션 그룹 (설정 화면 섹션) */
|
||||
export type KeyBindingActionGroup = 'voice' | 'window' | 'input'
|
||||
|
|
@ -700,7 +702,8 @@ export interface KeyBindingActionSpec {
|
|||
defaultBindings: readonly KeyBinding[]
|
||||
}
|
||||
|
||||
function kb(
|
||||
/** 키보드 바인딩을 간결하게 만든다. 기본값(옛 기본값 등)을 구성할 때 이 모듈 밖에서도 쓴다. */
|
||||
export function kb(
|
||||
code: number,
|
||||
mods: Partial<Pick<KeyBinding, 'ctrl' | 'alt' | 'shift' | 'meta'>> = {}
|
||||
): KeyBinding {
|
||||
|
|
@ -783,9 +786,9 @@ export const KEYBINDING_ACTIONS: readonly KeyBindingActionSpec[] = Object.freeze
|
|||
descriptionKey: 'keybinding.action.suggestionAccept.desc',
|
||||
holdMode: false,
|
||||
doublePress: false,
|
||||
// 사용자 요청으로 Ctrl+Alt+화살표 계열로 통일했다:
|
||||
// 오른쪽 수락 / 아래 다음 후보 / 위 이전 후보 / 왼쪽 닫기.
|
||||
defaultBindings: [kb(VK.ArrowRight, { ctrl: true, alt: true })]
|
||||
// Ctrl+Alt+화살표 계열: 아래/위로 후보 순환, 좌우로 페이지 이동(12개까지
|
||||
// 순차 생성 — 사용자 요청). 화살표를 페이지 이동에 내주기 위해 수락은 Enter로 옮겼다.
|
||||
defaultBindings: [kb(VK.Enter, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
id: 'suggestion-next',
|
||||
|
|
@ -805,6 +808,24 @@ export const KEYBINDING_ACTIONS: readonly KeyBindingActionSpec[] = Object.freeze
|
|||
doublePress: false,
|
||||
defaultBindings: [kb(VK.ArrowUp, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
id: 'suggestion-page-next',
|
||||
group: 'input',
|
||||
labelKey: 'keybinding.action.suggestionPageNext',
|
||||
descriptionKey: 'keybinding.action.suggestionPageNext.desc',
|
||||
holdMode: false,
|
||||
doublePress: false,
|
||||
defaultBindings: [kb(VK.ArrowRight, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
id: 'suggestion-page-prev',
|
||||
group: 'input',
|
||||
labelKey: 'keybinding.action.suggestionPagePrev',
|
||||
descriptionKey: 'keybinding.action.suggestionPagePrev.desc',
|
||||
holdMode: false,
|
||||
doublePress: false,
|
||||
defaultBindings: [kb(VK.ArrowLeft, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
id: 'suggestion-dismiss',
|
||||
group: 'input',
|
||||
|
|
@ -812,7 +833,11 @@ export const KEYBINDING_ACTIONS: readonly KeyBindingActionSpec[] = Object.freeze
|
|||
descriptionKey: 'keybinding.action.suggestionDismiss.desc',
|
||||
holdMode: false,
|
||||
doublePress: false,
|
||||
defaultBindings: [kb(VK.ArrowLeft, { ctrl: true, alt: true })]
|
||||
// "모든 액션은 기본 바인딩을 하나 이상 갖는다" 가 카탈로그 불변식이라
|
||||
// (KEYBINDING_ACTIONS 불변식 테스트) 빈 배열을 기본값으로 두지 않는다.
|
||||
// 평범한 Esc(전역, 수정자 없음)가 오버레이가 떠 있을 때만 반응하는
|
||||
// 별도 경로로 항상 닫아 주므로, 이 바인딩은 보조 수단이다.
|
||||
defaultBindings: [kb(VK.Backspace, { ctrl: true, alt: true })]
|
||||
}
|
||||
])
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue