@m1kad0/hannah-proto 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/hannah.js CHANGED
@@ -5,6 +5,709 @@
5
5
  // protoc unknown
6
6
  // source: hannah.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.protobufPackage = void 0;
8
+ exports.HannahServiceClient = exports.HannahServiceService = exports.protobufPackage = void 0;
9
9
  /* eslint-disable */
10
+ const grpc_js_1 = require("@grpc/grpc-js");
11
+ const agent_1 = require("./agent");
12
+ const car_state_1 = require("./car_state");
13
+ const control_1 = require("./control");
14
+ const device_control_menu_1 = require("./device_control_menu");
15
+ const event_stream_1 = require("./event_stream");
16
+ const satellite_provisioning_1 = require("./satellite_provisioning");
17
+ const satellite_proxy_1 = require("./satellite_proxy");
18
+ const shared_1 = require("./shared");
19
+ const speaker_enrollment_1 = require("./speaker_enrollment");
20
+ const timer_service_1 = require("./timer_service");
21
+ const user_registry_1 = require("./user_registry");
22
+ const wakeword_capture_1 = require("./wakeword_capture");
10
23
  exports.protobufPackage = "hannah";
24
+ exports.HannahServiceService = {
25
+ /** --- User Registry --- */
26
+ getUsers: {
27
+ path: "/hannah.HannahService/GetUsers",
28
+ requestStream: false,
29
+ responseStream: false,
30
+ requestSerialize: (value) => Buffer.from(user_registry_1.GetUsersRequest.encode(value).finish()),
31
+ requestDeserialize: (value) => user_registry_1.GetUsersRequest.decode(value),
32
+ responseSerialize: (value) => Buffer.from(user_registry_1.GetUsersResponse.encode(value).finish()),
33
+ responseDeserialize: (value) => user_registry_1.GetUsersResponse.decode(value),
34
+ },
35
+ getUser: {
36
+ path: "/hannah.HannahService/GetUser",
37
+ requestStream: false,
38
+ responseStream: false,
39
+ requestSerialize: (value) => Buffer.from(user_registry_1.GetUserRequest.encode(value).finish()),
40
+ requestDeserialize: (value) => user_registry_1.GetUserRequest.decode(value),
41
+ responseSerialize: (value) => Buffer.from(user_registry_1.UserResponse.encode(value).finish()),
42
+ responseDeserialize: (value) => user_registry_1.UserResponse.decode(value),
43
+ },
44
+ linkAccount: {
45
+ path: "/hannah.HannahService/LinkAccount",
46
+ requestStream: false,
47
+ responseStream: false,
48
+ requestSerialize: (value) => Buffer.from(user_registry_1.LinkAccountRequest.encode(value).finish()),
49
+ requestDeserialize: (value) => user_registry_1.LinkAccountRequest.decode(value),
50
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
51
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
52
+ },
53
+ unlinkAccount: {
54
+ path: "/hannah.HannahService/UnlinkAccount",
55
+ requestStream: false,
56
+ responseStream: false,
57
+ requestSerialize: (value) => Buffer.from(user_registry_1.UnlinkAccountRequest.encode(value).finish()),
58
+ requestDeserialize: (value) => user_registry_1.UnlinkAccountRequest.decode(value),
59
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
60
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
61
+ },
62
+ setTrustLevel: {
63
+ path: "/hannah.HannahService/SetTrustLevel",
64
+ requestStream: false,
65
+ responseStream: false,
66
+ requestSerialize: (value) => Buffer.from(user_registry_1.SetTrustLevelRequest.encode(value).finish()),
67
+ requestDeserialize: (value) => user_registry_1.SetTrustLevelRequest.decode(value),
68
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
69
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
70
+ },
71
+ setSystemMessages: {
72
+ path: "/hannah.HannahService/SetSystemMessages",
73
+ requestStream: false,
74
+ responseStream: false,
75
+ requestSerialize: (value) => Buffer.from(user_registry_1.SetSystemMessagesRequest.encode(value).finish()),
76
+ requestDeserialize: (value) => user_registry_1.SetSystemMessagesRequest.decode(value),
77
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
78
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
79
+ },
80
+ login: {
81
+ path: "/hannah.HannahService/Login",
82
+ requestStream: false,
83
+ responseStream: false,
84
+ requestSerialize: (value) => Buffer.from(user_registry_1.LoginRequest.encode(value).finish()),
85
+ requestDeserialize: (value) => user_registry_1.LoginRequest.decode(value),
86
+ responseSerialize: (value) => Buffer.from(user_registry_1.UserResponse.encode(value).finish()),
87
+ responseDeserialize: (value) => user_registry_1.UserResponse.decode(value),
88
+ },
89
+ /** --- User-Verwaltung (Admin-UI, #27 Phase 6) --- */
90
+ createUser: {
91
+ path: "/hannah.HannahService/CreateUser",
92
+ requestStream: false,
93
+ responseStream: false,
94
+ requestSerialize: (value) => Buffer.from(user_registry_1.CreateUserRequest.encode(value).finish()),
95
+ requestDeserialize: (value) => user_registry_1.CreateUserRequest.decode(value),
96
+ responseSerialize: (value) => Buffer.from(user_registry_1.CreateUserResponse.encode(value).finish()),
97
+ responseDeserialize: (value) => user_registry_1.CreateUserResponse.decode(value),
98
+ },
99
+ updateUser: {
100
+ path: "/hannah.HannahService/UpdateUser",
101
+ requestStream: false,
102
+ responseStream: false,
103
+ requestSerialize: (value) => Buffer.from(user_registry_1.UpdateUserRequest.encode(value).finish()),
104
+ requestDeserialize: (value) => user_registry_1.UpdateUserRequest.decode(value),
105
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
106
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
107
+ },
108
+ deleteUser: {
109
+ path: "/hannah.HannahService/DeleteUser",
110
+ requestStream: false,
111
+ responseStream: false,
112
+ requestSerialize: (value) => Buffer.from(user_registry_1.DeleteUserRequest.encode(value).finish()),
113
+ requestDeserialize: (value) => user_registry_1.DeleteUserRequest.decode(value),
114
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
115
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
116
+ },
117
+ /** Residents (Roomies/Guests/Pets) aus dem ioBroker-Adapter-Cache — fürs "Resident verknüpfen"-Dropdown. */
118
+ getResidents: {
119
+ path: "/hannah.HannahService/GetResidents",
120
+ requestStream: false,
121
+ responseStream: false,
122
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
123
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
124
+ responseSerialize: (value) => Buffer.from(user_registry_1.GetResidentsResponse.encode(value).finish()),
125
+ responseDeserialize: (value) => user_registry_1.GetResidentsResponse.decode(value),
126
+ },
127
+ /**
128
+ * --- Device Control Menu ---
129
+ * Returns all rooms and devices with current state — for building control menus.
130
+ */
131
+ getDevices: {
132
+ path: "/hannah.HannahService/GetDevices",
133
+ requestStream: false,
134
+ responseStream: false,
135
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
136
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
137
+ responseSerialize: (value) => Buffer.from(device_control_menu_1.GetDevicesResponse.encode(value).finish()),
138
+ responseDeserialize: (value) => device_control_menu_1.GetDevicesResponse.decode(value),
139
+ },
140
+ /** Directly set a device state (bypasses NLU). Trust level check is done by the caller. */
141
+ controlDevice: {
142
+ path: "/hannah.HannahService/ControlDevice",
143
+ requestStream: false,
144
+ responseStream: false,
145
+ requestSerialize: (value) => Buffer.from(device_control_menu_1.ControlDeviceRequest.encode(value).finish()),
146
+ requestDeserialize: (value) => device_control_menu_1.ControlDeviceRequest.decode(value),
147
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
148
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
149
+ },
150
+ /**
151
+ * --- Control ---
152
+ * Submit a plain-text command; Hannah processes it through NLU and returns the answer.
153
+ */
154
+ submitText: {
155
+ path: "/hannah.HannahService/SubmitText",
156
+ requestStream: false,
157
+ responseStream: false,
158
+ requestSerialize: (value) => Buffer.from(control_1.SubmitTextRequest.encode(value).finish()),
159
+ requestDeserialize: (value) => control_1.SubmitTextRequest.decode(value),
160
+ responseSerialize: (value) => Buffer.from(control_1.SubmitTextResponse.encode(value).finish()),
161
+ responseDeserialize: (value) => control_1.SubmitTextResponse.decode(value),
162
+ },
163
+ /** Submit a voice message (OGG/Opus bytes); Hannah does STT → NLU → TTS and returns the result. */
164
+ submitVoice: {
165
+ path: "/hannah.HannahService/SubmitVoice",
166
+ requestStream: false,
167
+ responseStream: false,
168
+ requestSerialize: (value) => Buffer.from(control_1.SubmitVoiceRequest.encode(value).finish()),
169
+ requestDeserialize: (value) => control_1.SubmitVoiceRequest.decode(value),
170
+ responseSerialize: (value) => Buffer.from(control_1.SubmitVoiceResponse.encode(value).finish()),
171
+ responseDeserialize: (value) => control_1.SubmitVoiceResponse.decode(value),
172
+ },
173
+ /** Send a TTS announcement to one satellite or all ("all"). */
174
+ announce: {
175
+ path: "/hannah.HannahService/Announce",
176
+ requestStream: false,
177
+ responseStream: false,
178
+ requestSerialize: (value) => Buffer.from(control_1.AnnounceRequest.encode(value).finish()),
179
+ requestDeserialize: (value) => control_1.AnnounceRequest.decode(value),
180
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
181
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
182
+ },
183
+ /**
184
+ * Send a notification from ioBroker to Hannah. Returns ok=true when queued.
185
+ * direct=true: skip LLM reformulation. severity: "alert"|"notify"|"info".
186
+ */
187
+ notify: {
188
+ path: "/hannah.HannahService/Notify",
189
+ requestStream: false,
190
+ responseStream: false,
191
+ requestSerialize: (value) => Buffer.from(agent_1.AgentNotification.encode(value).finish()),
192
+ requestDeserialize: (value) => agent_1.AgentNotification.decode(value),
193
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
194
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
195
+ },
196
+ /** List all known satellites (DB + live status merged). */
197
+ getSatellites: {
198
+ path: "/hannah.HannahService/GetSatellites",
199
+ requestStream: false,
200
+ responseStream: false,
201
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
202
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
203
+ responseSerialize: (value) => Buffer.from(control_1.GetSatellitesResponse.encode(value).finish()),
204
+ responseDeserialize: (value) => control_1.GetSatellitesResponse.decode(value),
205
+ },
206
+ /** --- Satellites (Admin-UI, #27 Phase 2) --- */
207
+ setSatelliteRoom: {
208
+ path: "/hannah.HannahService/SetSatelliteRoom",
209
+ requestStream: false,
210
+ responseStream: false,
211
+ requestSerialize: (value) => Buffer.from(control_1.SetSatelliteRoomRequest.encode(value).finish()),
212
+ requestDeserialize: (value) => control_1.SetSatelliteRoomRequest.decode(value),
213
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
214
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
215
+ },
216
+ setSatelliteDisplayName: {
217
+ path: "/hannah.HannahService/SetSatelliteDisplayName",
218
+ requestStream: false,
219
+ responseStream: false,
220
+ requestSerialize: (value) => Buffer.from(control_1.SetSatelliteDisplayNameRequest.encode(value).finish()),
221
+ requestDeserialize: (value) => control_1.SetSatelliteDisplayNameRequest.decode(value),
222
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
223
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
224
+ },
225
+ /** Assign a satellite to a Person (User), independent of its room. #31 */
226
+ setSatelliteOwner: {
227
+ path: "/hannah.HannahService/SetSatelliteOwner",
228
+ requestStream: false,
229
+ responseStream: false,
230
+ requestSerialize: (value) => Buffer.from(control_1.SetSatelliteOwnerRequest.encode(value).finish()),
231
+ requestDeserialize: (value) => control_1.SetSatelliteOwnerRequest.decode(value),
232
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
233
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
234
+ },
235
+ /** Delete existing satellite */
236
+ deleteSatellite: {
237
+ path: "/hannah.HannahService/DeleteSatellite",
238
+ requestStream: false,
239
+ responseStream: false,
240
+ requestSerialize: (value) => Buffer.from(control_1.DeleteSatelliteRequest.encode(value).finish()),
241
+ requestDeserialize: (value) => control_1.DeleteSatelliteRequest.decode(value),
242
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
243
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
244
+ },
245
+ /** --- Rooms/Groups (Admin-UI, #27 Phase 1) --- */
246
+ getRooms: {
247
+ path: "/hannah.HannahService/GetRooms",
248
+ requestStream: false,
249
+ responseStream: false,
250
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
251
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
252
+ responseSerialize: (value) => Buffer.from(control_1.GetRoomsResponse.encode(value).finish()),
253
+ responseDeserialize: (value) => control_1.GetRoomsResponse.decode(value),
254
+ },
255
+ getGroups: {
256
+ path: "/hannah.HannahService/GetGroups",
257
+ requestStream: false,
258
+ responseStream: false,
259
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
260
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
261
+ responseSerialize: (value) => Buffer.from(control_1.GetGroupsResponse.encode(value).finish()),
262
+ responseDeserialize: (value) => control_1.GetGroupsResponse.decode(value),
263
+ },
264
+ createGroup: {
265
+ path: "/hannah.HannahService/CreateGroup",
266
+ requestStream: false,
267
+ responseStream: false,
268
+ requestSerialize: (value) => Buffer.from(control_1.CreateGroupRequest.encode(value).finish()),
269
+ requestDeserialize: (value) => control_1.CreateGroupRequest.decode(value),
270
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
271
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
272
+ },
273
+ updateGroup: {
274
+ path: "/hannah.HannahService/UpdateGroup",
275
+ requestStream: false,
276
+ responseStream: false,
277
+ requestSerialize: (value) => Buffer.from(control_1.UpdateGroupRequest.encode(value).finish()),
278
+ requestDeserialize: (value) => control_1.UpdateGroupRequest.decode(value),
279
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
280
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
281
+ },
282
+ deleteGroup: {
283
+ path: "/hannah.HannahService/DeleteGroup",
284
+ requestStream: false,
285
+ responseStream: false,
286
+ requestSerialize: (value) => Buffer.from(control_1.DeleteGroupRequest.encode(value).finish()),
287
+ requestDeserialize: (value) => control_1.DeleteGroupRequest.decode(value),
288
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
289
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
290
+ },
291
+ setGroupRooms: {
292
+ path: "/hannah.HannahService/SetGroupRooms",
293
+ requestStream: false,
294
+ responseStream: false,
295
+ requestSerialize: (value) => Buffer.from(control_1.SetGroupRoomsRequest.encode(value).finish()),
296
+ requestDeserialize: (value) => control_1.SetGroupRoomsRequest.decode(value),
297
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
298
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
299
+ },
300
+ /** --- Routines/Triggers (Admin-UI, #27 Phase 4) --- */
301
+ getRoutines: {
302
+ path: "/hannah.HannahService/GetRoutines",
303
+ requestStream: false,
304
+ responseStream: false,
305
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
306
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
307
+ responseSerialize: (value) => Buffer.from(control_1.GetRoutinesResponse.encode(value).finish()),
308
+ responseDeserialize: (value) => control_1.GetRoutinesResponse.decode(value),
309
+ },
310
+ createRoutine: {
311
+ path: "/hannah.HannahService/CreateRoutine",
312
+ requestStream: false,
313
+ responseStream: false,
314
+ requestSerialize: (value) => Buffer.from(control_1.CreateRoutineRequest.encode(value).finish()),
315
+ requestDeserialize: (value) => control_1.CreateRoutineRequest.decode(value),
316
+ responseSerialize: (value) => Buffer.from(control_1.CreateRoutineResponse.encode(value).finish()),
317
+ responseDeserialize: (value) => control_1.CreateRoutineResponse.decode(value),
318
+ },
319
+ updateRoutine: {
320
+ path: "/hannah.HannahService/UpdateRoutine",
321
+ requestStream: false,
322
+ responseStream: false,
323
+ requestSerialize: (value) => Buffer.from(control_1.UpdateRoutineRequest.encode(value).finish()),
324
+ requestDeserialize: (value) => control_1.UpdateRoutineRequest.decode(value),
325
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
326
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
327
+ },
328
+ deleteRoutine: {
329
+ path: "/hannah.HannahService/DeleteRoutine",
330
+ requestStream: false,
331
+ responseStream: false,
332
+ requestSerialize: (value) => Buffer.from(control_1.DeleteRoutineRequest.encode(value).finish()),
333
+ requestDeserialize: (value) => control_1.DeleteRoutineRequest.decode(value),
334
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
335
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
336
+ },
337
+ getTriggers: {
338
+ path: "/hannah.HannahService/GetTriggers",
339
+ requestStream: false,
340
+ responseStream: false,
341
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
342
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
343
+ responseSerialize: (value) => Buffer.from(control_1.GetTriggersResponse.encode(value).finish()),
344
+ responseDeserialize: (value) => control_1.GetTriggersResponse.decode(value),
345
+ },
346
+ createTrigger: {
347
+ path: "/hannah.HannahService/CreateTrigger",
348
+ requestStream: false,
349
+ responseStream: false,
350
+ requestSerialize: (value) => Buffer.from(control_1.CreateTriggerRequest.encode(value).finish()),
351
+ requestDeserialize: (value) => control_1.CreateTriggerRequest.decode(value),
352
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
353
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
354
+ },
355
+ updateTrigger: {
356
+ path: "/hannah.HannahService/UpdateTrigger",
357
+ requestStream: false,
358
+ responseStream: false,
359
+ requestSerialize: (value) => Buffer.from(control_1.UpdateTriggerRequest.encode(value).finish()),
360
+ requestDeserialize: (value) => control_1.UpdateTriggerRequest.decode(value),
361
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
362
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
363
+ },
364
+ deleteTrigger: {
365
+ path: "/hannah.HannahService/DeleteTrigger",
366
+ requestStream: false,
367
+ responseStream: false,
368
+ requestSerialize: (value) => Buffer.from(control_1.DeleteTriggerRequest.encode(value).finish()),
369
+ requestDeserialize: (value) => control_1.DeleteTriggerRequest.decode(value),
370
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
371
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
372
+ },
373
+ /** --- Alarms (Wecker, #4) --- */
374
+ getAlarms: {
375
+ path: "/hannah.HannahService/GetAlarms",
376
+ requestStream: false,
377
+ responseStream: false,
378
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
379
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
380
+ responseSerialize: (value) => Buffer.from(control_1.GetAlarmsResponse.encode(value).finish()),
381
+ responseDeserialize: (value) => control_1.GetAlarmsResponse.decode(value),
382
+ },
383
+ createAlarm: {
384
+ path: "/hannah.HannahService/CreateAlarm",
385
+ requestStream: false,
386
+ responseStream: false,
387
+ requestSerialize: (value) => Buffer.from(control_1.CreateAlarmRequest.encode(value).finish()),
388
+ requestDeserialize: (value) => control_1.CreateAlarmRequest.decode(value),
389
+ responseSerialize: (value) => Buffer.from(control_1.CreateAlarmResponse.encode(value).finish()),
390
+ responseDeserialize: (value) => control_1.CreateAlarmResponse.decode(value),
391
+ },
392
+ updateAlarm: {
393
+ path: "/hannah.HannahService/UpdateAlarm",
394
+ requestStream: false,
395
+ responseStream: false,
396
+ requestSerialize: (value) => Buffer.from(control_1.UpdateAlarmRequest.encode(value).finish()),
397
+ requestDeserialize: (value) => control_1.UpdateAlarmRequest.decode(value),
398
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
399
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
400
+ },
401
+ deleteAlarm: {
402
+ path: "/hannah.HannahService/DeleteAlarm",
403
+ requestStream: false,
404
+ responseStream: false,
405
+ requestSerialize: (value) => Buffer.from(control_1.DeleteAlarmRequest.encode(value).finish()),
406
+ requestDeserialize: (value) => control_1.DeleteAlarmRequest.decode(value),
407
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
408
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
409
+ },
410
+ /**
411
+ * --- Settings (Admin-UI, #27 Phase 5) ---
412
+ * CreateSetting/DeleteSetting wurden mit #115 entfernt: ble.tags/cars haben jetzt
413
+ * eigene Modelle+CRUD (unten), nlu/iobroker.state_names/llm.system_prompt sind immer
414
+ * vorab bekannt/geseedet — es gibt keinen verbleibenden Bedarf, neue Settings anzulegen.
415
+ */
416
+ getSettings: {
417
+ path: "/hannah.HannahService/GetSettings",
418
+ requestStream: false,
419
+ responseStream: false,
420
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
421
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
422
+ responseSerialize: (value) => Buffer.from(control_1.GetSettingsResponse.encode(value).finish()),
423
+ responseDeserialize: (value) => control_1.GetSettingsResponse.decode(value),
424
+ },
425
+ updateConfig: {
426
+ path: "/hannah.HannahService/UpdateConfig",
427
+ requestStream: false,
428
+ responseStream: false,
429
+ requestSerialize: (value) => Buffer.from(control_1.UpdateConfigRequest.encode(value).finish()),
430
+ requestDeserialize: (value) => control_1.UpdateConfigRequest.decode(value),
431
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
432
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
433
+ },
434
+ /** --- BLE Tags (Admin-UI, #115 — eigenes Modell statt Settings-JSON-Blob) --- */
435
+ getBleTags: {
436
+ path: "/hannah.HannahService/GetBleTags",
437
+ requestStream: false,
438
+ responseStream: false,
439
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
440
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
441
+ responseSerialize: (value) => Buffer.from(control_1.GetBleTagsResponse.encode(value).finish()),
442
+ responseDeserialize: (value) => control_1.GetBleTagsResponse.decode(value),
443
+ },
444
+ createBleTag: {
445
+ path: "/hannah.HannahService/CreateBleTag",
446
+ requestStream: false,
447
+ responseStream: false,
448
+ requestSerialize: (value) => Buffer.from(control_1.CreateBleTagRequest.encode(value).finish()),
449
+ requestDeserialize: (value) => control_1.CreateBleTagRequest.decode(value),
450
+ responseSerialize: (value) => Buffer.from(control_1.CreateBleTagResponse.encode(value).finish()),
451
+ responseDeserialize: (value) => control_1.CreateBleTagResponse.decode(value),
452
+ },
453
+ updateBleTag: {
454
+ path: "/hannah.HannahService/UpdateBleTag",
455
+ requestStream: false,
456
+ responseStream: false,
457
+ requestSerialize: (value) => Buffer.from(control_1.UpdateBleTagRequest.encode(value).finish()),
458
+ requestDeserialize: (value) => control_1.UpdateBleTagRequest.decode(value),
459
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
460
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
461
+ },
462
+ deleteBleTag: {
463
+ path: "/hannah.HannahService/DeleteBleTag",
464
+ requestStream: false,
465
+ responseStream: false,
466
+ requestSerialize: (value) => Buffer.from(control_1.DeleteBleTagRequest.encode(value).finish()),
467
+ requestDeserialize: (value) => control_1.DeleteBleTagRequest.decode(value),
468
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
469
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
470
+ },
471
+ /** --- Cars (Admin-UI, #115 — eigenes Modell + user_to_car-Pivot statt Settings-JSON-Blob) --- */
472
+ getCars: {
473
+ path: "/hannah.HannahService/GetCars",
474
+ requestStream: false,
475
+ responseStream: false,
476
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
477
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
478
+ responseSerialize: (value) => Buffer.from(control_1.GetCarsResponse.encode(value).finish()),
479
+ responseDeserialize: (value) => control_1.GetCarsResponse.decode(value),
480
+ },
481
+ createCar: {
482
+ path: "/hannah.HannahService/CreateCar",
483
+ requestStream: false,
484
+ responseStream: false,
485
+ requestSerialize: (value) => Buffer.from(control_1.CreateCarRequest.encode(value).finish()),
486
+ requestDeserialize: (value) => control_1.CreateCarRequest.decode(value),
487
+ responseSerialize: (value) => Buffer.from(control_1.CreateCarResponse.encode(value).finish()),
488
+ responseDeserialize: (value) => control_1.CreateCarResponse.decode(value),
489
+ },
490
+ updateCar: {
491
+ path: "/hannah.HannahService/UpdateCar",
492
+ requestStream: false,
493
+ responseStream: false,
494
+ requestSerialize: (value) => Buffer.from(control_1.UpdateCarRequest.encode(value).finish()),
495
+ requestDeserialize: (value) => control_1.UpdateCarRequest.decode(value),
496
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
497
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
498
+ },
499
+ deleteCar: {
500
+ path: "/hannah.HannahService/DeleteCar",
501
+ requestStream: false,
502
+ responseStream: false,
503
+ requestSerialize: (value) => Buffer.from(control_1.DeleteCarRequest.encode(value).finish()),
504
+ requestDeserialize: (value) => control_1.DeleteCarRequest.decode(value),
505
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
506
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
507
+ },
508
+ /**
509
+ * --- Car state (Live-VW-Connect-Status, unabhängig von der Car-Konfiguration oben) ---
510
+ * Returns the current cached car state (available=false if no data received yet).
511
+ */
512
+ getCarState: {
513
+ path: "/hannah.HannahService/GetCarState",
514
+ requestStream: false,
515
+ responseStream: false,
516
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
517
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
518
+ responseSerialize: (value) => Buffer.from(car_state_1.CarStateResponse.encode(value).finish()),
519
+ responseDeserialize: (value) => car_state_1.CarStateResponse.decode(value),
520
+ },
521
+ /** Returns all tracked car states (one per configured car). */
522
+ getAllCarStates: {
523
+ path: "/hannah.HannahService/GetAllCarStates",
524
+ requestStream: false,
525
+ responseStream: false,
526
+ requestSerialize: (value) => Buffer.from(shared_1.Empty.encode(value).finish()),
527
+ requestDeserialize: (value) => shared_1.Empty.decode(value),
528
+ responseSerialize: (value) => Buffer.from(car_state_1.GetAllCarStatesResponse.encode(value).finish()),
529
+ responseDeserialize: (value) => car_state_1.GetAllCarStatesResponse.decode(value),
530
+ },
531
+ /**
532
+ * --- Event stream ---
533
+ * Opens a server-side stream; Hannah pushes events as they occur.
534
+ * Pass event_types to filter (empty = all events).
535
+ * Known event types: "car.parked", "resident.arrived", "resident.departed", "satellite.firmware"
536
+ */
537
+ subscribeEvents: {
538
+ path: "/hannah.HannahService/SubscribeEvents",
539
+ requestStream: false,
540
+ responseStream: true,
541
+ requestSerialize: (value) => Buffer.from(event_stream_1.EventFilter.encode(value).finish()),
542
+ requestDeserialize: (value) => event_stream_1.EventFilter.decode(value),
543
+ responseSerialize: (value) => Buffer.from(event_stream_1.HannahEvent.encode(value).finish()),
544
+ responseDeserialize: (value) => event_stream_1.HannahEvent.decode(value),
545
+ },
546
+ /**
547
+ * --- Firmware Manager ---
548
+ * Trigger an immediate OTA update for a satellite (bypasses residents check).
549
+ */
550
+ triggerFirmwareUpdate: {
551
+ path: "/hannah.HannahService/TriggerFirmwareUpdate",
552
+ requestStream: false,
553
+ responseStream: false,
554
+ requestSerialize: (value) => Buffer.from(event_stream_1.TriggerFirmwareUpdateRequest.encode(value).finish()),
555
+ requestDeserialize: (value) => event_stream_1.TriggerFirmwareUpdateRequest.decode(value),
556
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
557
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
558
+ },
559
+ /**
560
+ * --- Wakeword Capture ---
561
+ * Put a satellite in audio-capture mode for wakeword training data collection.
562
+ * While captured: wakeword detection is suspended, speaker is muted, DND is active.
563
+ * Hannah relays raw PCM chunks from the satellite to the collector via StreamSatelliteAudio.
564
+ * The stream stays open until the collector disconnects; Hannah then auto-releases the satellite.
565
+ */
566
+ requestSatelliteCapture: {
567
+ path: "/hannah.HannahService/RequestSatelliteCapture",
568
+ requestStream: false,
569
+ responseStream: false,
570
+ requestSerialize: (value) => Buffer.from(wakeword_capture_1.SatelliteCaptureRequest.encode(value).finish()),
571
+ requestDeserialize: (value) => wakeword_capture_1.SatelliteCaptureRequest.decode(value),
572
+ responseSerialize: (value) => Buffer.from(wakeword_capture_1.SatelliteCaptureResponse.encode(value).finish()),
573
+ responseDeserialize: (value) => wakeword_capture_1.SatelliteCaptureResponse.decode(value),
574
+ },
575
+ releaseSatelliteCapture: {
576
+ path: "/hannah.HannahService/ReleaseSatelliteCapture",
577
+ requestStream: false,
578
+ responseStream: false,
579
+ requestSerialize: (value) => Buffer.from(wakeword_capture_1.SatelliteCaptureRequest.encode(value).finish()),
580
+ requestDeserialize: (value) => wakeword_capture_1.SatelliteCaptureRequest.decode(value),
581
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
582
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
583
+ },
584
+ streamSatelliteAudio: {
585
+ path: "/hannah.HannahService/StreamSatelliteAudio",
586
+ requestStream: false,
587
+ responseStream: true,
588
+ requestSerialize: (value) => Buffer.from(wakeword_capture_1.SatelliteCaptureRequest.encode(value).finish()),
589
+ requestDeserialize: (value) => wakeword_capture_1.SatelliteCaptureRequest.decode(value),
590
+ responseSerialize: (value) => Buffer.from(wakeword_capture_1.SatelliteAudioChunk.encode(value).finish()),
591
+ responseDeserialize: (value) => wakeword_capture_1.SatelliteAudioChunk.decode(value),
592
+ },
593
+ /**
594
+ * Play a plink sound on the satellite, then hold virtual PTT for record_duration seconds.
595
+ * Returns after PTT is released — Collector calls this in a loop for guided hey-hannah collection.
596
+ */
597
+ triggerPlink: {
598
+ path: "/hannah.HannahService/TriggerPlink",
599
+ requestStream: false,
600
+ responseStream: false,
601
+ requestSerialize: (value) => Buffer.from(wakeword_capture_1.TriggerPlinkRequest.encode(value).finish()),
602
+ requestDeserialize: (value) => wakeword_capture_1.TriggerPlinkRequest.decode(value),
603
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
604
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
605
+ },
606
+ /**
607
+ * --- Satellite Proxy (Go gRPC proxy) ---
608
+ * Bidirectional keepalive stream. Proxy sends heartbeats; Hannah sends TTS
609
+ * audio commands back (for announcements). While this stream is open, Hannah
610
+ * disables its own UDP server. If the stream drops, Hannah re-enables UDP.
611
+ */
612
+ registerProxy: {
613
+ path: "/hannah.HannahService/RegisterProxy",
614
+ requestStream: true,
615
+ responseStream: true,
616
+ requestSerialize: (value) => Buffer.from(satellite_proxy_1.ProxyHeartbeat.encode(value).finish()),
617
+ requestDeserialize: (value) => satellite_proxy_1.ProxyHeartbeat.decode(value),
618
+ responseSerialize: (value) => Buffer.from(satellite_proxy_1.ProxyCommand.encode(value).finish()),
619
+ responseDeserialize: (value) => satellite_proxy_1.ProxyCommand.decode(value),
620
+ },
621
+ /**
622
+ * Submit a complete satellite audio session for processing.
623
+ * Hannah runs the full pipeline (STT → NLU → TTS → MQTT status) and returns
624
+ * the result so the proxy can play TTS audio back to the satellite.
625
+ */
626
+ submitSatelliteAudio: {
627
+ path: "/hannah.HannahService/SubmitSatelliteAudio",
628
+ requestStream: false,
629
+ responseStream: false,
630
+ requestSerialize: (value) => Buffer.from(satellite_proxy_1.SubmitSatelliteAudioRequest.encode(value).finish()),
631
+ requestDeserialize: (value) => satellite_proxy_1.SubmitSatelliteAudioRequest.decode(value),
632
+ responseSerialize: (value) => Buffer.from(satellite_proxy_1.SubmitSatelliteAudioResponse.encode(value).finish()),
633
+ responseDeserialize: (value) => satellite_proxy_1.SubmitSatelliteAudioResponse.decode(value),
634
+ },
635
+ /**
636
+ * Notify Hannah that a satellite registered or disconnected via the proxy.
637
+ * Hannah updates its room registry (hannah/rooms MQTT) immediately.
638
+ */
639
+ notifySatelliteRegistered: {
640
+ path: "/hannah.HannahService/NotifySatelliteRegistered",
641
+ requestStream: false,
642
+ responseStream: false,
643
+ requestSerialize: (value) => Buffer.from(satellite_proxy_1.SatelliteRegistration.encode(value).finish()),
644
+ requestDeserialize: (value) => satellite_proxy_1.SatelliteRegistration.decode(value),
645
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
646
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
647
+ },
648
+ notifySatelliteGone: {
649
+ path: "/hannah.HannahService/NotifySatelliteGone",
650
+ requestStream: false,
651
+ responseStream: false,
652
+ requestSerialize: (value) => Buffer.from(satellite_proxy_1.SatelliteRegistration.encode(value).finish()),
653
+ requestDeserialize: (value) => satellite_proxy_1.SatelliteRegistration.decode(value),
654
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
655
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
656
+ },
657
+ /**
658
+ * --- Satellite Provisioning ---
659
+ * Called by the ioBroker adapter before WebFlash to pre-register a seed + display name + room.
660
+ * When the satellite first connects with that seed, Hannah links serial → pre-config and clears the seed.
661
+ */
662
+ provisionSatellite: {
663
+ path: "/hannah.HannahService/ProvisionSatellite",
664
+ requestStream: false,
665
+ responseStream: false,
666
+ requestSerialize: (value) => Buffer.from(satellite_provisioning_1.ProvisionSatelliteRequest.encode(value).finish()),
667
+ requestDeserialize: (value) => satellite_provisioning_1.ProvisionSatelliteRequest.decode(value),
668
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
669
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
670
+ },
671
+ /** --- Speaker Enrollment --- */
672
+ enrollVoiceprint: {
673
+ path: "/hannah.HannahService/EnrollVoiceprint",
674
+ requestStream: false,
675
+ responseStream: false,
676
+ requestSerialize: (value) => Buffer.from(speaker_enrollment_1.EnrollVoiceprintRequest.encode(value).finish()),
677
+ requestDeserialize: (value) => speaker_enrollment_1.EnrollVoiceprintRequest.decode(value),
678
+ responseSerialize: (value) => Buffer.from(shared_1.StatusResponse.encode(value).finish()),
679
+ responseDeserialize: (value) => shared_1.StatusResponse.decode(value),
680
+ },
681
+ /**
682
+ * --- Timer Service ---
683
+ * Bidirectional stream between the Hannah Timer Service and Hannah Core.
684
+ * The Timer Service initiates the connection; if Hannah restarts, the service reconnects.
685
+ * Hannah sends timer commands (create, cancel, list); the service fires events when timers expire.
686
+ */
687
+ timerConnect: {
688
+ path: "/hannah.HannahService/TimerConnect",
689
+ requestStream: true,
690
+ responseStream: true,
691
+ requestSerialize: (value) => Buffer.from(timer_service_1.TimerMessage.encode(value).finish()),
692
+ requestDeserialize: (value) => timer_service_1.TimerMessage.decode(value),
693
+ responseSerialize: (value) => Buffer.from(timer_service_1.TimerCommand.encode(value).finish()),
694
+ responseDeserialize: (value) => timer_service_1.TimerCommand.decode(value),
695
+ },
696
+ /**
697
+ * --- ioBroker Agent ---
698
+ * Single bidirectional stream between the HannahAgent ioBroker adapter and Hannah Core.
699
+ * The adapter pushes state updates (device states, presence, text commands);
700
+ * Hannah pushes device-control commands and on-demand state-subscription requests back.
701
+ * The adapter initiates the connection; if Hannah restarts, the adapter reconnects.
702
+ */
703
+ agentConnect: {
704
+ path: "/hannah.HannahService/AgentConnect",
705
+ requestStream: true,
706
+ responseStream: true,
707
+ requestSerialize: (value) => Buffer.from(agent_1.AgentMessage.encode(value).finish()),
708
+ requestDeserialize: (value) => agent_1.AgentMessage.decode(value),
709
+ responseSerialize: (value) => Buffer.from(agent_1.AgentCommand.encode(value).finish()),
710
+ responseDeserialize: (value) => agent_1.AgentCommand.decode(value),
711
+ },
712
+ };
713
+ exports.HannahServiceClient = (0, grpc_js_1.makeGenericClientConstructor)(exports.HannahServiceService, "hannah.HannahService");