feat(caption): let live captions use their own speech model
The speech engine now keeps an auxiliary model next to the dictation model and transcribes with whichever the request names, reloading it once if the engine restarted. Settings > STT gains a live-caption model so captions can run on large-v3-turbo while dictation keeps its own model. The runtime minimum rises to 1.7.0 because older engines would silently ignore the model choice. Suggestion paging moves to Up/Down: the page follows the selection and the last item waits while more candidates are being generated. The Left/Right page shortcuts are removed; they did nothing until a page had filled and clash with Intel's display-rotation hotkeys.
This commit is contained in:
parent
39b8e7448e
commit
4b0f685941
29 changed files with 222 additions and 234 deletions
|
|
@ -6,7 +6,6 @@ import type { AppConfig, ConfigChangedEvent, KeyBinding, KeyBindingActionId, Key
|
|||
import {
|
||||
bindingsEqual,
|
||||
createDefaultBindingMap,
|
||||
detectBindingConflicts,
|
||||
findActionSpec,
|
||||
kb,
|
||||
normalizeBinding,
|
||||
|
|
@ -76,14 +75,12 @@ function bindingListEquals(a: readonly KeyBinding[], b: readonly KeyBinding[]):
|
|||
}
|
||||
|
||||
/**
|
||||
* 다음 문장 페이지 넘기기(최대 12개 순차 생성) 도입에 맞춰 제안 단축키를 옮긴다.
|
||||
* 다음 문장 제안 단축키를 1.6.0 배치로 옮긴다.
|
||||
*
|
||||
* - 수락은 화살표(→)에서 Enter 로 옮긴다 — 화살표를 페이지 이동에 내주기 위해서다.
|
||||
* - 닫기는 화살표(←)에서 Backspace 로 옮긴다(평범한 Esc 가 주 수단이 됐다).
|
||||
* - 수락은 화살표(→)에서 Enter 로, 닫기는 화살표(←)에서 Backspace 로 옮긴다
|
||||
* (평범한 Esc 가 주 수단이 됐다).
|
||||
* - 사용자가 정확히 옛 기본값 그대로일 때만 옮긴다. 다른 키로 커스터마이즈했다면
|
||||
* 절대 건드리지 않는다(설계 요구사항).
|
||||
* - 새 페이지 이동 액션(suggestion-page-next/prev)의 기본값은, 위 이관 뒤에도 다른
|
||||
* 액션과 충돌하지 않을 때만 켠다. 충돌하면 바인딩 없이 두고 경고를 남긴다.
|
||||
* 절대 건드리지 않는다.
|
||||
*/
|
||||
function migrateSuggestionOverlayBindings(activeStore: ElectronStore<AppConfig>): void {
|
||||
const raw = activeStore.store as unknown as Record<string, unknown>
|
||||
|
|
@ -99,19 +96,6 @@ function migrateSuggestionOverlayBindings(activeStore: ElectronStore<AppConfig>)
|
|||
migrateIfOldDefault('suggestion-accept', OLD_SUGGESTION_ACCEPT_DEFAULT)
|
||||
migrateIfOldDefault('suggestion-dismiss', OLD_SUGGESTION_DISMISS_DEFAULT)
|
||||
|
||||
for (const actionId of ['suggestion-page-next', 'suggestion-page-prev'] as const) {
|
||||
const candidate = bindings[actionId] ?? []
|
||||
const hasConflict = candidate.some(
|
||||
(binding) => detectBindingConflicts(actionId, binding, bindings).length > 0
|
||||
)
|
||||
if (hasConflict) {
|
||||
logger.warn(
|
||||
`${actionId} 기본 바인딩이 다른 액션과 충돌해 바인딩 없이 둔다 (사용자가 설정에서 직접 지정할 수 있다)`
|
||||
)
|
||||
bindings[actionId] = []
|
||||
}
|
||||
}
|
||||
|
||||
activeStore.set('keyBindings', bindings)
|
||||
}
|
||||
|
||||
|
|
@ -187,6 +171,7 @@ const CONFIG_DEFAULTS: AppConfig = {
|
|||
captionAudioSource: 'mic',
|
||||
captionOverlayPosition: null,
|
||||
captionRefineEnabled: true,
|
||||
captionSttModelId: null,
|
||||
updateChannel: 'latest',
|
||||
updateDeviceId: '',
|
||||
skippedUpdateVersion: null,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue