@@ -25,6 +25,8 @@ public enum ConverterServerCodec {
2525public enum ConverterServerCommand : Codable , Sendable {
2626 case activate( sessionID: String )
2727 case deactivate( sessionID: String )
28+ case listSettings( sessionID: String , capabilities: ConverterSettingClientCapabilities )
29+ case updateSetting( sessionID: String , key: String , value: ConverterSettingValue )
2830 case snapshot( sessionID: String , inputState: ConverterInputState )
2931 case stopComposition( sessionID: String )
3032 case forgetMemory( sessionID: String )
@@ -38,6 +40,102 @@ public enum ConverterServerCommand: Codable, Sendable {
3840 case submitSelectedReplaceSuggestion( sessionID: String )
3941}
4042
43+ public struct ConverterSettingClientCapabilities : Codable , Sendable , Equatable {
44+ public var supportedKinds : Set < ConverterSettingKindIdentifier >
45+ public var supportedActions : Set < String >
46+ public var supportedCustomSurfaces : Set < String >
47+
48+ public init (
49+ supportedKinds: Set < ConverterSettingKindIdentifier > = [ ] ,
50+ supportedActions: Set < String > = [ ] ,
51+ supportedCustomSurfaces: Set < String > = [ ]
52+ ) {
53+ self . supportedKinds = supportedKinds
54+ self . supportedActions = supportedActions
55+ self . supportedCustomSurfaces = supportedCustomSurfaces
56+ }
57+ }
58+
59+ public enum ConverterSettingKindIdentifier : String , Codable , Sendable , Hashable {
60+ case toggle
61+ case selector
62+ case textField
63+ case number
64+ case button
65+ case custom
66+ }
67+
68+ public enum ConverterSettingKind : Codable , Sendable , Equatable {
69+ case toggle
70+ case selector( options: [ ConverterSettingOption ] )
71+ case textField( secure: Bool )
72+ case number( min: Double ? , max: Double ? , step: Double ? )
73+ case button( action: String )
74+ case custom( surface: String )
75+
76+ public var identifier : ConverterSettingKindIdentifier {
77+ switch self {
78+ case . toggle:
79+ . toggle
80+ case . selector:
81+ . selector
82+ case . textField:
83+ . textField
84+ case . number:
85+ . number
86+ case . button:
87+ . button
88+ case . custom:
89+ . custom
90+ }
91+ }
92+ }
93+
94+ public enum ConverterSettingValue : Codable , Sendable , Equatable {
95+ case bool( Bool )
96+ case string( String )
97+ case int( Int )
98+ case double( Double )
99+ }
100+
101+ public struct ConverterSettingOption : Codable , Sendable , Equatable {
102+ public var title : String
103+ public var value : ConverterSettingValue
104+
105+ public init ( title: String , value: ConverterSettingValue ) {
106+ self . title = title
107+ self . value = value
108+ }
109+ }
110+
111+ public struct ConverterSettingDescriptor : Codable , Sendable , Equatable {
112+ public var key : String
113+ public var title : String
114+ public var section : String
115+ public var kind : ConverterSettingKind
116+ public var value : ConverterSettingValue ?
117+ public var isEnabled : Bool
118+ public var requiresClientUpdate : Bool
119+
120+ public init (
121+ key: String ,
122+ title: String ,
123+ section: String ,
124+ kind: ConverterSettingKind ,
125+ value: ConverterSettingValue ? = nil ,
126+ isEnabled: Bool = true ,
127+ requiresClientUpdate: Bool = false
128+ ) {
129+ self . key = key
130+ self . title = title
131+ self . section = section
132+ self . kind = kind
133+ self . value = value
134+ self . isEnabled = isEnabled
135+ self . requiresClientUpdate = requiresClientUpdate
136+ }
137+ }
138+
41139public struct ConverterSessionConfig : Codable , Sendable {
42140 public var aiBackendPreference : Config . AIBackendPreference . Value
43141 public var openAIModelName : String
@@ -144,19 +242,22 @@ public struct ConverterServerResponse: Codable, Sendable {
144242 public var effects : [ ConverterClientEffect ]
145243 public var inputState : ConverterInputState
146244 public var inputLanguage : InputLanguage ?
245+ public var settings : [ ConverterSettingDescriptor ]
147246 public var snapshot : ConverterSessionSnapshot
148247
149248 public init (
150249 handled: Bool = true ,
151250 effects: [ ConverterClientEffect ] = [ ] ,
152251 inputState: ConverterInputState = . none,
153252 inputLanguage: InputLanguage ? = nil ,
253+ settings: [ ConverterSettingDescriptor ] = [ ] ,
154254 snapshot: ConverterSessionSnapshot
155255 ) {
156256 self . handled = handled
157257 self . effects = effects
158258 self . inputState = inputState
159259 self . inputLanguage = inputLanguage
260+ self . settings = settings
160261 self . snapshot = snapshot
161262 }
162263}
0 commit comments