@@ -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 " ,
0 commit comments