Skip to content

Commit 5d7a25c

Browse files
committed
feat: add long/short prompt mode with auto engine switching
1 parent 1192860 commit 5d7a25c

4 files changed

Lines changed: 330 additions & 13 deletions

File tree

macos/AppState.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ final class AppState: ObservableObject {
1212
let context: ContextRoutingState
1313

1414
private var moduleCancellables = Set<AnyCancellable>()
15+
private var coordinationCancellables = Set<AnyCancellable>()
1516
private lazy var promptStore = PromptTemplateStore()
1617
private var promptStoreBound = false
1718

@@ -26,6 +27,7 @@ final class AppState: ObservableObject {
2627
runtime = RuntimeState()
2728
context = ContextRoutingState()
2829
bridgeModuleChanges()
30+
setupPromptLengthCoordination()
2931
}
3032

3133
subscript<T>(dynamicMember keyPath: KeyPath<EngineConfig, T>) -> T {
@@ -133,6 +135,10 @@ final class AppState: ObservableObject {
133135
prompts.resolvedDictateSystemPrompt(lockedDictationPrompt: lockedDictationPrompt)
134136
}
135137

138+
func resolvedDictationPrompt(for preset: PromptPreset) -> String {
139+
prompts.resolvedDictationPrompt(for: preset)
140+
}
141+
136142
func resolvedAskSystemPrompt() -> String {
137143
prompts.resolvedAskSystemPrompt()
138144
}
@@ -190,6 +196,18 @@ final class AppState: ObservableObject {
190196
promptStoreBound = false
191197
}
192198

199+
private func setupPromptLengthCoordination() {
200+
coordinationCancellables.removeAll()
201+
engine.$llmEngine
202+
.removeDuplicates()
203+
.sink { [weak self] llmEngine in
204+
self?.prompts.applyAutoPromptLength(for: llmEngine)
205+
}
206+
.store(in: &coordinationCancellables)
207+
208+
prompts.applyAutoPromptLength(for: engine.llmEngine)
209+
}
210+
193211
private func ensurePromptStore() -> PromptTemplateStore {
194212
if !promptStoreBound {
195213
bindModule(promptStore)
@@ -238,6 +256,7 @@ final class AppState: ObservableObject {
238256
"pretranscribeEndSilenceMS", "pretranscribeMaxInFlight", "pretranscribeFallbackPolicy",
239257
"dictateShortcut", "askShortcut", "translateShortcut",
240258
"selectedPromptPresetID", "customPromptPresets",
259+
"promptLengthMode", "autoPromptLengthSwitchingEnabled",
241260
// Note: prompt template content keys are intentionally excluded —
242261
// let PromptTemplateStore always load the latest builtin content on first run.
243262
"contextAutoPresetSwitchingEnabled", "contextLockCurrentPreset",

macos/DictationContextManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ final class DictationContextManager {
4444
preset: DictationResolvedPreset(
4545
id: preset.id,
4646
title: preset.name,
47-
dictationPrompt: preset.dictateSystemPrompt
47+
dictationPrompt: state.resolvedDictationPrompt(for: preset)
4848
),
4949
matchedRule: resolution.matchedRule
5050
)

0 commit comments

Comments
 (0)