@cobotar/protocol 0.19.15 → 0.19.17

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/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # CobotAR-Protocol
2
2
  A collection of protobuf messages for the CobotAR-project
3
3
 
4
- Current version: 0.19.15
4
+ Current version: 0.19.17
5
5
 
6
6
  ## Documentation
7
7
  Find it here: [documentation/README.md](documentation/README.md)
@@ -2,8 +2,8 @@
2
2
  // @generated from file ar/v1/ar_config.proto (package ar.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
- import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
- import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
5
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
7
7
  import type { ActionMessage } from "./action_pb.ts";
8
8
  import { file_ar_v1_action } from "./action_pb.ts";
9
9
  import type { FeedbackMessage } from "./feedback_pb.ts";
@@ -13,13 +13,14 @@ import { file_ar_v1_helper } from "./helper_pb.ts";
13
13
  import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts";
14
14
  import type { Property } from "../../common/v1/property_pb.ts";
15
15
  import { file_common_v1_property } from "../../common/v1/property_pb.ts";
16
+ import { file_validation_v1_predefined_string_rules } from "../../validation/v1/predefined_string_rules_pb.ts";
16
17
  import type { Message } from "@bufbuild/protobuf";
17
18
 
18
19
  /**
19
20
  * Describes the file ar/v1/ar_config.proto.
20
21
  */
21
22
  export const file_ar_v1_ar_config: GenFile = /*@__PURE__*/
22
- fileDesc("ChVhci92MS9hcl9jb25maWcucHJvdG8SBWFyLnYxIl0KE0FSQ29uZmlnSW5mb01lc3NhZ2USCgoCaWQYASABKAkSFwoEbmFtZRgCIAEoCUIJukgGcgQQARhAEgwKBGljb24YAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiQQoUQVJDb25maWdJbmZvTWVzc2FnZXMSKQoFaW5mb3MYASADKAsyGi5hci52MS5BUkNvbmZpZ0luZm9NZXNzYWdlIqUCCg9BUkNvbmZpZ01lc3NhZ2USCgoCaWQYASABKAkSFwoEbmFtZRgCIAEoCUIJukgGcgQQARhAEgwKBGljb24YAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSKAoIZmVlZGJhY2sYBSADKAsyFi5hci52MS5GZWVkYmFja01lc3NhZ2USJQoHYWN0aW9ucxgGIAMoCzIULmFyLnYxLkFjdGlvbk1lc3NhZ2USJQoHaGVscGVycxgHIAMoCzIULmFyLnYxLkhlbHBlck1lc3NhZ2USJwoKcHJvcGVydGllcxgIIAMoCzITLmNvbW1vbi52MS5Qcm9wZXJ0eRIpChVhcl9kaXNhcHBlYXJfZGlzdGFuY2UYCSABKANCCrpIByIFSN4CKAAiOwoQQVJDb25maWdNZXNzYWdlcxInCgdjb25maWdzGAEgAygLMhYuYXIudjEuQVJDb25maWdNZXNzYWdlQokBCgljb20uYXIudjFCDUFyQ29uZmlnUHJvdG9QAVovZ2l0aHViLmNvbS9jb2JvdGFyL3Byb3RvY29sL21lc3NhZ2VzL2FyL3YxO2FydjGiAgNBWFiqAg5NZXNzYWdlcy5BUi5WMcoCBUFyXFYx4gIRQXJcVjFcR1BCTWV0YWRhdGHqAgZBcjo6VjFiBnByb3RvMw", [file_ar_v1_action, file_ar_v1_feedback, file_ar_v1_helper, file_buf_validate_validate, file_common_v1_property]);
23
+ fileDesc("ChVhci92MS9hcl9jb25maWcucHJvdG8SBWFyLnYxIl0KE0FSQ29uZmlnSW5mb01lc3NhZ2USCgoCaWQYASABKAkSFwoEbmFtZRgCIAEoCUIJukgGcgQQARhAEgwKBGljb24YAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiQQoUQVJDb25maWdJbmZvTWVzc2FnZXMSKQoFaW5mb3MYASADKAsyGi5hci52MS5BUkNvbmZpZ0luZm9NZXNzYWdlIssBCg5BUlJlc291cmNlU2xvdBIVCgJpZBgBIAEoCUIJukgGcgQQARhAEhcKBG5hbWUYAiABKAlCCbpIBnIEgPEEARIMCgRpY29uGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEjQKBHR5cGUYBSABKA4yGS5hci52MS5BUlJlc291cmNlU2xvdFR5cGVCC7pICMgBAYIBAhABEhAKCHJlcXVpcmVkGAYgASgIEh4KC3Byb3BlcnR5X2lkGAcgASgJQgm6SAZyBJjxBAEiyQEKDUFSQ29udGV4dFNsb3QSFQoCaWQYASABKAlCCbpIBnIEEAEYQBIXCgRuYW1lGAIgASgJQgm6SAZyBIDxBAESDAoEaWNvbhgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIzCgR0eXBlGAUgASgOMhguYXIudjEuQVJDb250ZXh0U2xvdFR5cGVCC7pICMgBAYIBAhABEhAKCHJlcXVpcmVkGAYgASgIEh4KC3Byb3BlcnR5X2lkGAcgASgJQgm6SAZyBJjxBAEigQMKD0FSQ29uZmlnTWVzc2FnZRIKCgJpZBgBIAEoCRIXCgRuYW1lGAIgASgJQgm6SAZyBBABGEASDAoEaWNvbhgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCRIoCghmZWVkYmFjaxgFIAMoCzIWLmFyLnYxLkZlZWRiYWNrTWVzc2FnZRIlCgdhY3Rpb25zGAYgAygLMhQuYXIudjEuQWN0aW9uTWVzc2FnZRIlCgdoZWxwZXJzGAcgAygLMhQuYXIudjEuSGVscGVyTWVzc2FnZRInCgpwcm9wZXJ0aWVzGAggAygLMhMuY29tbW9uLnYxLlByb3BlcnR5EikKFWFyX2Rpc2FwcGVhcl9kaXN0YW5jZRgJIAEoA0IKukgHIgVI3gIoABItCg5yZXNvdXJjZV9zbG90cxgKIAMoCzIVLmFyLnYxLkFSUmVzb3VyY2VTbG90EisKDWNvbnRleHRfc2xvdHMYCyADKAsyFC5hci52MS5BUkNvbnRleHRTbG90IjsKEEFSQ29uZmlnTWVzc2FnZXMSJwoHY29uZmlncxgBIAMoCzIWLmFyLnYxLkFSQ29uZmlnTWVzc2FnZSp9ChJBUlJlc291cmNlU2xvdFR5cGUSJQohQVJfUkVTT1VSQ0VfU0xPVF9UWVBFX1VOU1BFQ0lGSUVEEAASHwobQVJfUkVTT1VSQ0VfU0xPVF9UWVBFX1JPQk9UEAESHwobQVJfUkVTT1VSQ0VfU0xPVF9UWVBFX0FTU0VUEAIqvwIKEUFSQ29udGV4dFNsb3RUeXBlEiQKIEFSX0NPTlRFWFRfU0xPVF9UWVBFX1VOU1BFQ0lGSUVEEAASIAocQVJfQ09OVEVYVF9TTE9UX1RZUEVfTElORV9JRBABEiAKHEFSX0NPTlRFWFRfU0xPVF9UWVBFX0NFTExfSUQQAhIjCh9BUl9DT05URVhUX1NMT1RfVFlQRV9TVEFUSU9OX0lEEAMSIgoeQVJfQ09OVEVYVF9TTE9UX1RZUEVfV09SS0VSX0lEEAQSJwojQVJfQ09OVEVYVF9TTE9UX1RZUEVfUFJPQ0VTU19SVU5fSUQQBRIoCiRBUl9DT05URVhUX1NMT1RfVFlQRV9TRVFVRU5DRV9SVU5fSUQQBhIkCiBBUl9DT05URVhUX1NMT1RfVFlQRV9UQVNLX1JVTl9JRBAHQokBCgljb20uYXIudjFCDUFyQ29uZmlnUHJvdG9QAVovZ2l0aHViLmNvbS9jb2JvdGFyL3Byb3RvY29sL21lc3NhZ2VzL2FyL3YxO2FydjGiAgNBWFiqAg5NZXNzYWdlcy5BUi5WMcoCBUFyXFYx4gIRQXJcVjFcR1BCTWV0YWRhdGHqAgZBcjo6VjFiBnByb3RvMw", [file_ar_v1_action, file_ar_v1_feedback, file_ar_v1_helper, file_buf_validate_validate, file_common_v1_property, file_validation_v1_predefined_string_rules]);
23
24
 
24
25
  /**
25
26
  * Just delete this?
@@ -72,6 +73,114 @@ export type ARConfigInfoMessages = Message<"ar.v1.ARConfigInfoMessages"> & {
72
73
  export const ARConfigInfoMessagesSchema: GenMessage<ARConfigInfoMessages> = /*@__PURE__*/
73
74
  messageDesc(file_ar_v1_ar_config, 1);
74
75
 
76
+ /**
77
+ * ARResourceSlot declares a typed resource hole that must be bound when an
78
+ * ARConfig is attached to a concrete station or cell.
79
+ *
80
+ * The slot keeps generic authoring inside the ARConfig while allowing each
81
+ * binding to provide the concrete robot or asset instance available in the
82
+ * target workspace.
83
+ *
84
+ * @generated from message ar.v1.ARResourceSlot
85
+ */
86
+ export type ARResourceSlot = Message<"ar.v1.ARResourceSlot"> & {
87
+ /**
88
+ * @generated from field: string id = 1;
89
+ */
90
+ id: string;
91
+
92
+ /**
93
+ * @generated from field: string name = 2;
94
+ */
95
+ name: string;
96
+
97
+ /**
98
+ * @generated from field: string icon = 3;
99
+ */
100
+ icon: string;
101
+
102
+ /**
103
+ * @generated from field: string description = 4;
104
+ */
105
+ description: string;
106
+
107
+ /**
108
+ * @generated from field: ar.v1.ARResourceSlotType type = 5;
109
+ */
110
+ type: ARResourceSlotType;
111
+
112
+ /**
113
+ * @generated from field: bool required = 6;
114
+ */
115
+ required: boolean;
116
+
117
+ /**
118
+ * @generated from field: string property_id = 7;
119
+ */
120
+ propertyId: string;
121
+ };
122
+
123
+ /**
124
+ * Describes the message ar.v1.ARResourceSlot.
125
+ * Use `create(ARResourceSlotSchema)` to create a new message.
126
+ */
127
+ export const ARResourceSlotSchema: GenMessage<ARResourceSlot> = /*@__PURE__*/
128
+ messageDesc(file_ar_v1_ar_config, 2);
129
+
130
+ /**
131
+ * ARContextSlot declares a typed runtime context input that the resolver may
132
+ * populate from the active line/cell/station/execution scope.
133
+ *
134
+ * Unlike resource slots, context slots are not bound manually per station or
135
+ * cell. Their values come from the runtime resolution request and are injected
136
+ * into the loaded config instance after binding resolution.
137
+ *
138
+ * @generated from message ar.v1.ARContextSlot
139
+ */
140
+ export type ARContextSlot = Message<"ar.v1.ARContextSlot"> & {
141
+ /**
142
+ * @generated from field: string id = 1;
143
+ */
144
+ id: string;
145
+
146
+ /**
147
+ * @generated from field: string name = 2;
148
+ */
149
+ name: string;
150
+
151
+ /**
152
+ * @generated from field: string icon = 3;
153
+ */
154
+ icon: string;
155
+
156
+ /**
157
+ * @generated from field: string description = 4;
158
+ */
159
+ description: string;
160
+
161
+ /**
162
+ * @generated from field: ar.v1.ARContextSlotType type = 5;
163
+ */
164
+ type: ARContextSlotType;
165
+
166
+ /**
167
+ * @generated from field: bool required = 6;
168
+ */
169
+ required: boolean;
170
+
171
+ /**
172
+ * @generated from field: string property_id = 7;
173
+ */
174
+ propertyId: string;
175
+ };
176
+
177
+ /**
178
+ * Describes the message ar.v1.ARContextSlot.
179
+ * Use `create(ARContextSlotSchema)` to create a new message.
180
+ */
181
+ export const ARContextSlotSchema: GenMessage<ARContextSlot> = /*@__PURE__*/
182
+ messageDesc(file_ar_v1_ar_config, 3);
183
+
75
184
  /**
76
185
  * @generated from message ar.v1.ARConfigMessage
77
186
  */
@@ -124,6 +233,20 @@ export type ARConfigMessage = Message<"ar.v1.ARConfigMessage"> & {
124
233
  * @generated from field: int64 ar_disappear_distance = 9;
125
234
  */
126
235
  arDisappearDistance: bigint;
236
+
237
+ /**
238
+ * Typed station/cell resource slots that must be bound for runtime use.
239
+ *
240
+ * @generated from field: repeated ar.v1.ARResourceSlot resource_slots = 10;
241
+ */
242
+ resourceSlots: ARResourceSlot[];
243
+
244
+ /**
245
+ * Typed runtime context inputs populated from the active execution/workspace scope.
246
+ *
247
+ * @generated from field: repeated ar.v1.ARContextSlot context_slots = 11;
248
+ */
249
+ contextSlots: ARContextSlot[];
127
250
  };
128
251
 
129
252
  /**
@@ -131,7 +254,7 @@ export type ARConfigMessage = Message<"ar.v1.ARConfigMessage"> & {
131
254
  * Use `create(ARConfigMessageSchema)` to create a new message.
132
255
  */
133
256
  export const ARConfigMessageSchema: GenMessage<ARConfigMessage> = /*@__PURE__*/
134
- messageDesc(file_ar_v1_ar_config, 2);
257
+ messageDesc(file_ar_v1_ar_config, 4);
135
258
 
136
259
  /**
137
260
  * @generated from message ar.v1.ARConfigMessages
@@ -148,5 +271,82 @@ export type ARConfigMessages = Message<"ar.v1.ARConfigMessages"> & {
148
271
  * Use `create(ARConfigMessagesSchema)` to create a new message.
149
272
  */
150
273
  export const ARConfigMessagesSchema: GenMessage<ARConfigMessages> = /*@__PURE__*/
151
- messageDesc(file_ar_v1_ar_config, 3);
274
+ messageDesc(file_ar_v1_ar_config, 5);
275
+
276
+ /**
277
+ * @generated from enum ar.v1.ARResourceSlotType
278
+ */
279
+ export enum ARResourceSlotType {
280
+ /**
281
+ * @generated from enum value: AR_RESOURCE_SLOT_TYPE_UNSPECIFIED = 0;
282
+ */
283
+ AR_RESOURCE_SLOT_TYPE_UNSPECIFIED = 0,
284
+
285
+ /**
286
+ * @generated from enum value: AR_RESOURCE_SLOT_TYPE_ROBOT = 1;
287
+ */
288
+ AR_RESOURCE_SLOT_TYPE_ROBOT = 1,
289
+
290
+ /**
291
+ * @generated from enum value: AR_RESOURCE_SLOT_TYPE_ASSET = 2;
292
+ */
293
+ AR_RESOURCE_SLOT_TYPE_ASSET = 2,
294
+ }
295
+
296
+ /**
297
+ * Describes the enum ar.v1.ARResourceSlotType.
298
+ */
299
+ export const ARResourceSlotTypeSchema: GenEnum<ARResourceSlotType> = /*@__PURE__*/
300
+ enumDesc(file_ar_v1_ar_config, 0);
301
+
302
+ /**
303
+ * @generated from enum ar.v1.ARContextSlotType
304
+ */
305
+ export enum ARContextSlotType {
306
+ /**
307
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_UNSPECIFIED = 0;
308
+ */
309
+ AR_CONTEXT_SLOT_TYPE_UNSPECIFIED = 0,
310
+
311
+ /**
312
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_LINE_ID = 1;
313
+ */
314
+ AR_CONTEXT_SLOT_TYPE_LINE_ID = 1,
315
+
316
+ /**
317
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_CELL_ID = 2;
318
+ */
319
+ AR_CONTEXT_SLOT_TYPE_CELL_ID = 2,
320
+
321
+ /**
322
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_STATION_ID = 3;
323
+ */
324
+ AR_CONTEXT_SLOT_TYPE_STATION_ID = 3,
325
+
326
+ /**
327
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_WORKER_ID = 4;
328
+ */
329
+ AR_CONTEXT_SLOT_TYPE_WORKER_ID = 4,
330
+
331
+ /**
332
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_PROCESS_RUN_ID = 5;
333
+ */
334
+ AR_CONTEXT_SLOT_TYPE_PROCESS_RUN_ID = 5,
335
+
336
+ /**
337
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_SEQUENCE_RUN_ID = 6;
338
+ */
339
+ AR_CONTEXT_SLOT_TYPE_SEQUENCE_RUN_ID = 6,
340
+
341
+ /**
342
+ * @generated from enum value: AR_CONTEXT_SLOT_TYPE_TASK_RUN_ID = 7;
343
+ */
344
+ AR_CONTEXT_SLOT_TYPE_TASK_RUN_ID = 7,
345
+ }
346
+
347
+ /**
348
+ * Describes the enum ar.v1.ARContextSlotType.
349
+ */
350
+ export const ARContextSlotTypeSchema: GenEnum<ARContextSlotType> = /*@__PURE__*/
351
+ enumDesc(file_ar_v1_ar_config, 1);
152
352
 
@@ -4,13 +4,15 @@
4
4
 
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
7
+ import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts";
8
+ import { file_validation_v1_predefined_string_rules } from "../../validation/v1/predefined_string_rules_pb.ts";
7
9
  import type { Message } from "@bufbuild/protobuf";
8
10
 
9
11
  /**
10
12
  * Describes the file ar/v1/config_load.proto.
11
13
  */
12
14
  export const file_ar_v1_config_load: GenFile = /*@__PURE__*/
13
- fileDesc("Chdhci92MS9jb25maWdfbG9hZC5wcm90bxIFYXIudjEiVgoYQ29uZmlndXJhdGlvbkxvYWRNZXNzYWdlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJY29uZmlnX2lkGAIgASgJEhMKC2luc3RhbmNlX2lkGAMgASgJQosBCgljb20uYXIudjFCD0NvbmZpZ0xvYWRQcm90b1ABWi9naXRodWIuY29tL2NvYm90YXIvcHJvdG9jb2wvbWVzc2FnZXMvYXIvdjE7YXJ2MaICA0FYWKoCDk1lc3NhZ2VzLkFSLlYxygIFQXJcVjHiAhFBclxWMVxHUEJNZXRhZGF0YeoCBkFyOjpWMWIGcHJvdG8z");
15
+ fileDesc("Chdhci92MS9jb25maWdfbG9hZC5wcm90bxIFYXIudjEidQoYQ29uZmlndXJhdGlvbkxvYWRNZXNzYWdlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJY29uZmlnX2lkGAIgASgJEhMKC2luc3RhbmNlX2lkGAMgASgJEh0KCmJpbmRpbmdfaWQYBCABKAlCCbpIBnIE6OswAUKLAQoJY29tLmFyLnYxQg9Db25maWdMb2FkUHJvdG9QAVovZ2l0aHViLmNvbS9jb2JvdGFyL3Byb3RvY29sL21lc3NhZ2VzL2FyL3YxO2FydjGiAgNBWFiqAg5NZXNzYWdlcy5BUi5WMcoCBUFyXFYx4gIRQXJcVjFcR1BCTWV0YWRhdGHqAgZBcjo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_validation_v1_predefined_string_rules]);
14
16
 
15
17
  /**
16
18
  * @generated from message ar.v1.ConfigurationLoadMessage
@@ -22,7 +24,7 @@ export type ConfigurationLoadMessage = Message<"ar.v1.ConfigurationLoadMessage">
22
24
  requestId: string;
23
25
 
24
26
  /**
25
- * Id of the configuration to be loaded
27
+ * Id of the reusable config template to be loaded, mainly for authoring/editor flows.
26
28
  *
27
29
  * @generated from field: string config_id = 2;
28
30
  */
@@ -34,6 +36,13 @@ export type ConfigurationLoadMessage = Message<"ar.v1.ConfigurationLoadMessage">
34
36
  * @generated from field: string instance_id = 3;
35
37
  */
36
38
  instanceId: string;
39
+
40
+ /**
41
+ * Preferred for runtime loads when a station/cell-specific binding should be resolved.
42
+ *
43
+ * @generated from field: string binding_id = 4;
44
+ */
45
+ bindingId: string;
37
46
  };
38
47
 
39
48
  /**
@@ -0,0 +1,386 @@
1
+ // @generated by protoc-gen-es v2.10.2 with parameter "target=ts,import_extension=ts"
2
+ // @generated from file ar/v1/config_resolve.proto (package ar.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
7
+ import type { ARConfigMessage, ARContextSlotType } from "./ar_config_pb.ts";
8
+ import { file_ar_v1_ar_config } from "./ar_config_pb.ts";
9
+ import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts";
10
+ import { file_validation_v1_predefined_string_rules } from "../../validation/v1/predefined_string_rules_pb.ts";
11
+ import type { Message } from "@bufbuild/protobuf";
12
+
13
+ /**
14
+ * Describes the file ar/v1/config_resolve.proto.
15
+ */
16
+ export const file_ar_v1_config_resolve: GenFile = /*@__PURE__*/
17
+ fileDesc("Chphci92MS9jb25maWdfcmVzb2x2ZS5wcm90bxIFYXIudjEimwMKG0NvbmZpZ3VyYXRpb25SZXNvbHZlQ29udGV4dBIaCgdsaW5lX2lkGAEgASgJQgm6SAZyBMDyBAESGgoHY2VsbF9pZBgCIAEoCUIJukgGcgS48gQBEh0KCnN0YXRpb25faWQYAyABKAlCCbpIBnIE+PEEARIcCgl3b3JrZXJfaWQYBCABKAlCCbpIBnIE2OswARIhCg5wcm9jZXNzX3J1bl9pZBgFIAEoCUIJukgGcgSI8gQBEiIKD3NlcXVlbmNlX3J1bl9pZBgGIAEoCUIJukgGcgSQ8gQBEh4KC3Rhc2tfcnVuX2lkGAcgASgJQgm6SAZyBJjyBAE6nwG6SJsBGpgBCjZjb25maWd1cmF0aW9uX3Jlc29sdmVfY29udGV4dC5yZXF1aXJlc19zdGF0aW9uX29yX2NlbGwSMWF0IGxlYXN0IG9uZSBvZiBzdGF0aW9uX2lkIG9yIGNlbGxfaWQgbXVzdCBiZSBzZXQaK3RoaXMuc3RhdGlvbl9pZCAhPSAnJyB8fCB0aGlzLmNlbGxfaWQgIT0gJycimwEKG0NvbmZpZ3VyYXRpb25SZXNvbHZlUmVxdWVzdBISCgpyZXF1ZXN0X2lkGAEgASgJEjsKB2NvbnRleHQYAiABKAsyIi5hci52MS5Db25maWd1cmF0aW9uUmVzb2x2ZUNvbnRleHRCBrpIA8gBARIrChNsb2FkZWRfaW5zdGFuY2VfaWRzGAMgAygJQg66SAuSAQgiBnIE8OswASKGAgoXUmVzb2x2ZWRSZXNvdXJjZUJpbmRpbmcSGgoHc2xvdF9pZBgBIAEoCUIJukgGcgQQARhAEh4KC3Byb3BlcnR5X2lkGAIgASgJQgm6SAZyBJjxBAESKQoRcm9ib3RfaW5zdGFuY2VfaWQYAyABKAlCCbpIBnIEqPEEAUgAiAEBEikKEWFzc2V0X2luc3RhbmNlX2lkGAQgASgJQgm6SAZyBLjxBAFIAYgBATotukgqIigKEXJvYm90X2luc3RhbmNlX2lkChFhc3NldF9pbnN0YW5jZV9pZBABQhQKEl9yb2JvdF9pbnN0YW5jZV9pZEIUChJfYXNzZXRfaW5zdGFuY2VfaWQinwEKFlJlc29sdmVkQ29udGV4dEJpbmRpbmcSGgoHc2xvdF9pZBgBIAEoCUIJukgGcgQQARhAEh4KC3Byb3BlcnR5X2lkGAIgASgJQgm6SAZyBJjxBAESMwoEdHlwZRgDIAEoDjIYLmFyLnYxLkFSQ29udGV4dFNsb3RUeXBlQgu6SAjIAQGCAQIQARIUCgxzdHJpbmdfdmFsdWUYBCABKAkirwEKGUNvbmZpZ3VyYXRpb25SZXNvbHZlSXNzdWUSRAoIc2V2ZXJpdHkYASABKA4yKC5hci52MS5Db25maWd1cmF0aW9uUmVzb2x2ZUlzc3VlU2V2ZXJpdHlCCLpIBYIBAhABEh0KCmJpbmRpbmdfaWQYAiABKAlCCbpIBnIE6OswARIcCgljb25maWdfaWQYAyABKAlCCbpIBnIEkPEEARIPCgdtZXNzYWdlGAQgASgJIvEDChVSZXNvbHZlZENvbmZpZ3VyYXRpb24SHgoLaW5zdGFuY2VfaWQYASABKAlCCbpIBnIE8OswARIdCgpiaW5kaW5nX2lkGAIgASgJQgm6SAZyBOjrMAESHAoJY29uZmlnX2lkGAMgASgJQgm6SAZyBJDxBAESPgoFc2NvcGUYBCABKA4yJS5hci52MS5SZXNvbHZlZENvbmZpZ3VyYXRpb25TY29wZVR5cGVCCLpIBYIBAhABEhoKB2xpbmVfaWQYBSABKAlCCbpIBnIEwPIEARIaCgdjZWxsX2lkGAYgASgJQgm6SAZyBLjyBAESHQoKc3RhdGlvbl9pZBgHIAEoCUIJukgGcgT48QQBEhIKCnN0YW5kYWxvbmUYCCABKAgSEAoIcHJpb3JpdHkYCSABKAUSOAoQZWZmZWN0aXZlX2NvbmZpZxgKIAEoCzIWLmFyLnYxLkFSQ29uZmlnTWVzc2FnZUIGukgDyAEBEkIKGnJlc29sdmVkX3Jlc291cmNlX2JpbmRpbmdzGAsgAygLMh4uYXIudjEuUmVzb2x2ZWRSZXNvdXJjZUJpbmRpbmcSQAoZcmVzb2x2ZWRfY29udGV4dF9iaW5kaW5ncxgMIAMoCzIdLmFyLnYxLlJlc29sdmVkQ29udGV4dEJpbmRpbmcixQEKGkNvbmZpZ3VyYXRpb25SZXNvbHZlUmVzdWx0EhIKCnJlcXVlc3RfaWQYASABKAkSNAoOY29uZmlndXJhdGlvbnMYAiADKAsyHC5hci52MS5SZXNvbHZlZENvbmZpZ3VyYXRpb24SKwoTdW5sb2FkX2luc3RhbmNlX2lkcxgDIAMoCUIOukgLkgEIIgZyBPDrMAESMAoGaXNzdWVzGAQgAygLMiAuYXIudjEuQ29uZmlndXJhdGlvblJlc29sdmVJc3N1ZSquAQoeUmVzb2x2ZWRDb25maWd1cmF0aW9uU2NvcGVUeXBlEjEKLVJFU09MVkVEX0NPTkZJR1VSQVRJT05fU0NPUEVfVFlQRV9VTlNQRUNJRklFRBAAEi0KKVJFU09MVkVEX0NPTkZJR1VSQVRJT05fU0NPUEVfVFlQRV9TVEFUSU9OEAESKgomUkVTT0xWRURfQ09ORklHVVJBVElPTl9TQ09QRV9UWVBFX0NFTEwQAirqAQohQ29uZmlndXJhdGlvblJlc29sdmVJc3N1ZVNldmVyaXR5EjQKMENPTkZJR1VSQVRJT05fUkVTT0xWRV9JU1NVRV9TRVZFUklUWV9VTlNQRUNJRklFRBAAEi0KKUNPTkZJR1VSQVRJT05fUkVTT0xWRV9JU1NVRV9TRVZFUklUWV9JTkZPEAESMAosQ09ORklHVVJBVElPTl9SRVNPTFZFX0lTU1VFX1NFVkVSSVRZX1dBUk5JTkcQAhIuCipDT05GSUdVUkFUSU9OX1JFU09MVkVfSVNTVUVfU0VWRVJJVFlfRVJST1IQA0KOAQoJY29tLmFyLnYxQhJDb25maWdSZXNvbHZlUHJvdG9QAVovZ2l0aHViLmNvbS9jb2JvdGFyL3Byb3RvY29sL21lc3NhZ2VzL2FyL3YxO2FydjGiAgNBWFiqAg5NZXNzYWdlcy5BUi5WMcoCBUFyXFYx4gIRQXJcVjFcR1BCTWV0YWRhdGHqAgZBcjo6VjFiBnByb3RvMw", [file_ar_v1_ar_config, file_buf_validate_validate, file_validation_v1_predefined_string_rules]);
18
+
19
+ /**
20
+ * ConfigurationResolveContext describes the active runtime scope from which AR
21
+ * bindings and context values should be resolved.
22
+ *
23
+ * @generated from message ar.v1.ConfigurationResolveContext
24
+ */
25
+ export type ConfigurationResolveContext = Message<"ar.v1.ConfigurationResolveContext"> & {
26
+ /**
27
+ * @generated from field: string line_id = 1;
28
+ */
29
+ lineId: string;
30
+
31
+ /**
32
+ * @generated from field: string cell_id = 2;
33
+ */
34
+ cellId: string;
35
+
36
+ /**
37
+ * @generated from field: string station_id = 3;
38
+ */
39
+ stationId: string;
40
+
41
+ /**
42
+ * @generated from field: string worker_id = 4;
43
+ */
44
+ workerId: string;
45
+
46
+ /**
47
+ * @generated from field: string process_run_id = 5;
48
+ */
49
+ processRunId: string;
50
+
51
+ /**
52
+ * @generated from field: string sequence_run_id = 6;
53
+ */
54
+ sequenceRunId: string;
55
+
56
+ /**
57
+ * @generated from field: string task_run_id = 7;
58
+ */
59
+ taskRunId: string;
60
+ };
61
+
62
+ /**
63
+ * Describes the message ar.v1.ConfigurationResolveContext.
64
+ * Use `create(ConfigurationResolveContextSchema)` to create a new message.
65
+ */
66
+ export const ConfigurationResolveContextSchema: GenMessage<ConfigurationResolveContext> = /*@__PURE__*/
67
+ messageDesc(file_ar_v1_config_resolve, 0);
68
+
69
+ /**
70
+ * ConfigurationResolveRequest asks the runtime/backend to resolve all AR
71
+ * configs that should currently be active for the supplied context.
72
+ *
73
+ * Recommended resolution flow:
74
+ * - find direct station bindings matching context.station_id
75
+ * - find parent/shared cell bindings matching context.cell_id
76
+ * - reject disabled bindings
77
+ * - reject bindings whose required resource slots or required context slots
78
+ * cannot be satisfied
79
+ * - if any surviving binding is standalone, keep only standalone bindings with
80
+ * the highest priority
81
+ * - otherwise keep all surviving bindings sorted by priority descending, with
82
+ * station-scoped bindings preferred over cell-scoped bindings for equal
83
+ * priority
84
+ *
85
+ * @generated from message ar.v1.ConfigurationResolveRequest
86
+ */
87
+ export type ConfigurationResolveRequest = Message<"ar.v1.ConfigurationResolveRequest"> & {
88
+ /**
89
+ * @generated from field: string request_id = 1;
90
+ */
91
+ requestId: string;
92
+
93
+ /**
94
+ * @generated from field: ar.v1.ConfigurationResolveContext context = 2;
95
+ */
96
+ context?: ConfigurationResolveContext;
97
+
98
+ /**
99
+ * Instances already loaded by the caller, used to compute unloads/deltas.
100
+ *
101
+ * @generated from field: repeated string loaded_instance_ids = 3;
102
+ */
103
+ loadedInstanceIds: string[];
104
+ };
105
+
106
+ /**
107
+ * Describes the message ar.v1.ConfigurationResolveRequest.
108
+ * Use `create(ConfigurationResolveRequestSchema)` to create a new message.
109
+ */
110
+ export const ConfigurationResolveRequestSchema: GenMessage<ConfigurationResolveRequest> = /*@__PURE__*/
111
+ messageDesc(file_ar_v1_config_resolve, 1);
112
+
113
+ /**
114
+ * ResolvedResourceBinding captures the concrete resource value selected for a
115
+ * config resource slot.
116
+ *
117
+ * @generated from message ar.v1.ResolvedResourceBinding
118
+ */
119
+ export type ResolvedResourceBinding = Message<"ar.v1.ResolvedResourceBinding"> & {
120
+ /**
121
+ * @generated from field: string slot_id = 1;
122
+ */
123
+ slotId: string;
124
+
125
+ /**
126
+ * @generated from field: string property_id = 2;
127
+ */
128
+ propertyId: string;
129
+
130
+ /**
131
+ * @generated from field: optional string robot_instance_id = 3;
132
+ */
133
+ robotInstanceId?: string;
134
+
135
+ /**
136
+ * @generated from field: optional string asset_instance_id = 4;
137
+ */
138
+ assetInstanceId?: string;
139
+ };
140
+
141
+ /**
142
+ * Describes the message ar.v1.ResolvedResourceBinding.
143
+ * Use `create(ResolvedResourceBindingSchema)` to create a new message.
144
+ */
145
+ export const ResolvedResourceBindingSchema: GenMessage<ResolvedResourceBinding> = /*@__PURE__*/
146
+ messageDesc(file_ar_v1_config_resolve, 2);
147
+
148
+ /**
149
+ * ResolvedContextBinding captures the concrete runtime context value selected
150
+ * for a config context slot.
151
+ *
152
+ * Current context bindings resolve to string ids that are injected into the
153
+ * mapped property_id as PROPERTY_TYPE_STRING values.
154
+ *
155
+ * @generated from message ar.v1.ResolvedContextBinding
156
+ */
157
+ export type ResolvedContextBinding = Message<"ar.v1.ResolvedContextBinding"> & {
158
+ /**
159
+ * @generated from field: string slot_id = 1;
160
+ */
161
+ slotId: string;
162
+
163
+ /**
164
+ * @generated from field: string property_id = 2;
165
+ */
166
+ propertyId: string;
167
+
168
+ /**
169
+ * @generated from field: ar.v1.ARContextSlotType type = 3;
170
+ */
171
+ type: ARContextSlotType;
172
+
173
+ /**
174
+ * @generated from field: string string_value = 4;
175
+ */
176
+ stringValue: string;
177
+ };
178
+
179
+ /**
180
+ * Describes the message ar.v1.ResolvedContextBinding.
181
+ * Use `create(ResolvedContextBindingSchema)` to create a new message.
182
+ */
183
+ export const ResolvedContextBindingSchema: GenMessage<ResolvedContextBinding> = /*@__PURE__*/
184
+ messageDesc(file_ar_v1_config_resolve, 3);
185
+
186
+ /**
187
+ * @generated from message ar.v1.ConfigurationResolveIssue
188
+ */
189
+ export type ConfigurationResolveIssue = Message<"ar.v1.ConfigurationResolveIssue"> & {
190
+ /**
191
+ * @generated from field: ar.v1.ConfigurationResolveIssueSeverity severity = 1;
192
+ */
193
+ severity: ConfigurationResolveIssueSeverity;
194
+
195
+ /**
196
+ * @generated from field: string binding_id = 2;
197
+ */
198
+ bindingId: string;
199
+
200
+ /**
201
+ * @generated from field: string config_id = 3;
202
+ */
203
+ configId: string;
204
+
205
+ /**
206
+ * @generated from field: string message = 4;
207
+ */
208
+ message: string;
209
+ };
210
+
211
+ /**
212
+ * Describes the message ar.v1.ConfigurationResolveIssue.
213
+ * Use `create(ConfigurationResolveIssueSchema)` to create a new message.
214
+ */
215
+ export const ConfigurationResolveIssueSchema: GenMessage<ConfigurationResolveIssue> = /*@__PURE__*/
216
+ messageDesc(file_ar_v1_config_resolve, 4);
217
+
218
+ /**
219
+ * ResolvedConfiguration is the fully selected config instance a runtime client
220
+ * should activate.
221
+ *
222
+ * effective_config should already include all binding-level property overrides.
223
+ * The runtime/client should then inject resolved_resource_bindings and
224
+ * resolved_context_bindings into the mapped properties before evaluating local
225
+ * property mirroring, helpers, actions, and feedback.
226
+ *
227
+ * @generated from message ar.v1.ResolvedConfiguration
228
+ */
229
+ export type ResolvedConfiguration = Message<"ar.v1.ResolvedConfiguration"> & {
230
+ /**
231
+ * @generated from field: string instance_id = 1;
232
+ */
233
+ instanceId: string;
234
+
235
+ /**
236
+ * @generated from field: string binding_id = 2;
237
+ */
238
+ bindingId: string;
239
+
240
+ /**
241
+ * @generated from field: string config_id = 3;
242
+ */
243
+ configId: string;
244
+
245
+ /**
246
+ * @generated from field: ar.v1.ResolvedConfigurationScopeType scope = 4;
247
+ */
248
+ scope: ResolvedConfigurationScopeType;
249
+
250
+ /**
251
+ * @generated from field: string line_id = 5;
252
+ */
253
+ lineId: string;
254
+
255
+ /**
256
+ * @generated from field: string cell_id = 6;
257
+ */
258
+ cellId: string;
259
+
260
+ /**
261
+ * @generated from field: string station_id = 7;
262
+ */
263
+ stationId: string;
264
+
265
+ /**
266
+ * @generated from field: bool standalone = 8;
267
+ */
268
+ standalone: boolean;
269
+
270
+ /**
271
+ * @generated from field: int32 priority = 9;
272
+ */
273
+ priority: number;
274
+
275
+ /**
276
+ * @generated from field: ar.v1.ARConfigMessage effective_config = 10;
277
+ */
278
+ effectiveConfig?: ARConfigMessage;
279
+
280
+ /**
281
+ * @generated from field: repeated ar.v1.ResolvedResourceBinding resolved_resource_bindings = 11;
282
+ */
283
+ resolvedResourceBindings: ResolvedResourceBinding[];
284
+
285
+ /**
286
+ * @generated from field: repeated ar.v1.ResolvedContextBinding resolved_context_bindings = 12;
287
+ */
288
+ resolvedContextBindings: ResolvedContextBinding[];
289
+ };
290
+
291
+ /**
292
+ * Describes the message ar.v1.ResolvedConfiguration.
293
+ * Use `create(ResolvedConfigurationSchema)` to create a new message.
294
+ */
295
+ export const ResolvedConfigurationSchema: GenMessage<ResolvedConfiguration> = /*@__PURE__*/
296
+ messageDesc(file_ar_v1_config_resolve, 5);
297
+
298
+ /**
299
+ * @generated from message ar.v1.ConfigurationResolveResult
300
+ */
301
+ export type ConfigurationResolveResult = Message<"ar.v1.ConfigurationResolveResult"> & {
302
+ /**
303
+ * @generated from field: string request_id = 1;
304
+ */
305
+ requestId: string;
306
+
307
+ /**
308
+ * @generated from field: repeated ar.v1.ResolvedConfiguration configurations = 2;
309
+ */
310
+ configurations: ResolvedConfiguration[];
311
+
312
+ /**
313
+ * @generated from field: repeated string unload_instance_ids = 3;
314
+ */
315
+ unloadInstanceIds: string[];
316
+
317
+ /**
318
+ * @generated from field: repeated ar.v1.ConfigurationResolveIssue issues = 4;
319
+ */
320
+ issues: ConfigurationResolveIssue[];
321
+ };
322
+
323
+ /**
324
+ * Describes the message ar.v1.ConfigurationResolveResult.
325
+ * Use `create(ConfigurationResolveResultSchema)` to create a new message.
326
+ */
327
+ export const ConfigurationResolveResultSchema: GenMessage<ConfigurationResolveResult> = /*@__PURE__*/
328
+ messageDesc(file_ar_v1_config_resolve, 6);
329
+
330
+ /**
331
+ * @generated from enum ar.v1.ResolvedConfigurationScopeType
332
+ */
333
+ export enum ResolvedConfigurationScopeType {
334
+ /**
335
+ * @generated from enum value: RESOLVED_CONFIGURATION_SCOPE_TYPE_UNSPECIFIED = 0;
336
+ */
337
+ UNSPECIFIED = 0,
338
+
339
+ /**
340
+ * @generated from enum value: RESOLVED_CONFIGURATION_SCOPE_TYPE_STATION = 1;
341
+ */
342
+ STATION = 1,
343
+
344
+ /**
345
+ * @generated from enum value: RESOLVED_CONFIGURATION_SCOPE_TYPE_CELL = 2;
346
+ */
347
+ CELL = 2,
348
+ }
349
+
350
+ /**
351
+ * Describes the enum ar.v1.ResolvedConfigurationScopeType.
352
+ */
353
+ export const ResolvedConfigurationScopeTypeSchema: GenEnum<ResolvedConfigurationScopeType> = /*@__PURE__*/
354
+ enumDesc(file_ar_v1_config_resolve, 0);
355
+
356
+ /**
357
+ * @generated from enum ar.v1.ConfigurationResolveIssueSeverity
358
+ */
359
+ export enum ConfigurationResolveIssueSeverity {
360
+ /**
361
+ * @generated from enum value: CONFIGURATION_RESOLVE_ISSUE_SEVERITY_UNSPECIFIED = 0;
362
+ */
363
+ UNSPECIFIED = 0,
364
+
365
+ /**
366
+ * @generated from enum value: CONFIGURATION_RESOLVE_ISSUE_SEVERITY_INFO = 1;
367
+ */
368
+ INFO = 1,
369
+
370
+ /**
371
+ * @generated from enum value: CONFIGURATION_RESOLVE_ISSUE_SEVERITY_WARNING = 2;
372
+ */
373
+ WARNING = 2,
374
+
375
+ /**
376
+ * @generated from enum value: CONFIGURATION_RESOLVE_ISSUE_SEVERITY_ERROR = 3;
377
+ */
378
+ ERROR = 3,
379
+ }
380
+
381
+ /**
382
+ * Describes the enum ar.v1.ConfigurationResolveIssueSeverity.
383
+ */
384
+ export const ConfigurationResolveIssueSeveritySchema: GenEnum<ConfigurationResolveIssueSeverity> = /*@__PURE__*/
385
+ enumDesc(file_ar_v1_config_resolve, 1);
386
+
@@ -5,6 +5,8 @@
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
7
7
  import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts";
8
+ import type { PropertyValueUpdate } from "../../common/v1/property_pb.ts";
9
+ import { file_common_v1_property } from "../../common/v1/property_pb.ts";
8
10
  import { file_validation_v1_predefined_string_rules } from "../../validation/v1/predefined_string_rules_pb.ts";
9
11
  import type { Message } from "@bufbuild/protobuf";
10
12
 
@@ -12,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
12
14
  * Describes the file ar/v1/mapping.proto.
13
15
  */
14
16
  export const file_ar_v1_mapping: GenFile = /*@__PURE__*/
15
- fileDesc("ChNhci92MS9tYXBwaW5nLnByb3RvEgVhci52MSJLCgxSb2JvdE1hcHBpbmcSGwoIcm9ib3RfaWQYASABKAlCCbpIBnIEoPEEARIeCgtwcm9wZXJ0eV9pZBgCIAEoCUIJukgGcgSY8QQBIksKDEFzc2V0TWFwcGluZxIbCghhc3NldF9pZBgBIAEoCUIJukgGcgSw8QQBEh4KC3Byb3BlcnR5X2lkGAIgASgJQgm6SAZyBJjxBAEisgIKDk1hcHBpbmdNZXNzYWdlEgoKAmlkGAEgASgJEhcKBG5hbWUYAiABKAlCCbpIBnIEgPEEARIMCgRpY29uGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEiQKDmVudmlyb25tZW50X2lkGAUgASgJQgy6SAnIAQFyBMDxBAESIgoMYXJfY29uZmlnX2lkGAYgASgJQgy6SAnIAQFyBJDxBAESEAoIZGlzYWJsZWQYByABKAgSKgoNcm9ib3RfbWFwcGluZxgIIAMoCzITLmFyLnYxLlJvYm90TWFwcGluZxIqCg1hc3NldF9tYXBwaW5nGAkgAygLMhMuYXIudjEuQXNzZXRNYXBwaW5nEhIKCnN0YW5kYWxvbmUYCiABKAgSEAoIcHJpb3JpdHkYCyABKAUiOgoPTWFwcGluZ01lc3NhZ2VzEicKCG1hcHBpbmdzGAEgAygLMhUuYXIudjEuTWFwcGluZ01lc3NhZ2VCiAEKCWNvbS5hci52MUIMTWFwcGluZ1Byb3RvUAFaL2dpdGh1Yi5jb20vY29ib3Rhci9wcm90b2NvbC9tZXNzYWdlcy9hci92MTthcnYxogIDQVhYqgIOTWVzc2FnZXMuQVIuVjHKAgVBclxWMeICEUFyXFYxXEdQQk1ldGFkYXRh6gIGQXI6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_validation_v1_predefined_string_rules]);
17
+ fileDesc("ChNhci92MS9tYXBwaW5nLnByb3RvEgVhci52MSJLCgxSb2JvdE1hcHBpbmcSGwoIcm9ib3RfaWQYASABKAlCCbpIBnIEoPEEARIeCgtwcm9wZXJ0eV9pZBgCIAEoCUIJukgGcgSY8QQBIksKDEFzc2V0TWFwcGluZxIbCghhc3NldF9pZBgBIAEoCUIJukgGcgSw8QQBEh4KC3Byb3BlcnR5X2lkGAIgASgJQgm6SAZyBJjxBAEi4AEKEUFSUmVzb3VyY2VCaW5kaW5nEhoKB3Nsb3RfaWQYASABKAlCCbpIBnIEEAEYQBIpChFyb2JvdF9pbnN0YW5jZV9pZBgCIAEoCUIJukgGcgSo8QQBSACIAQESKQoRYXNzZXRfaW5zdGFuY2VfaWQYAyABKAlCCbpIBnIEuPEEAUgBiAEBOi26SCoiKAoRcm9ib3RfaW5zdGFuY2VfaWQKEWFzc2V0X2luc3RhbmNlX2lkEAFCFAoSX3JvYm90X2luc3RhbmNlX2lkQhQKEl9hc3NldF9pbnN0YW5jZV9pZCK2AwoWQVJDb25maWdCaW5kaW5nTWVzc2FnZRIVCgJpZBgBIAEoCUIJukgGcgTo6zABEhcKBG5hbWUYAiABKAlCCbpIBnIEgPEEARIMCgRpY29uGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEiIKCnN0YXRpb25faWQYBSABKAlCCbpIBnIE+PEEAUgAiAEBEh8KB2NlbGxfaWQYBiABKAlCCbpIBnIEuPIEAUgBiAEBEiIKDGFyX2NvbmZpZ19pZBgHIAEoCUIMukgJyAEBcgSQ8QQBEhAKCGRpc2FibGVkGAggASgIEhIKCnN0YW5kYWxvbmUYCSABKAgSEAoIcHJpb3JpdHkYCiABKAUSMwoRcmVzb3VyY2VfYmluZGluZ3MYCyADKAsyGC5hci52MS5BUlJlc291cmNlQmluZGluZxI6ChJwcm9wZXJ0eV9vdmVycmlkZXMYDCADKAsyHi5jb21tb24udjEuUHJvcGVydHlWYWx1ZVVwZGF0ZTocukgZIhcKCnN0YXRpb25faWQKB2NlbGxfaWQQAUINCgtfc3RhdGlvbl9pZEIKCghfY2VsbF9pZCJKChdBUkNvbmZpZ0JpbmRpbmdNZXNzYWdlcxIvCghiaW5kaW5ncxgBIAMoCzIdLmFyLnYxLkFSQ29uZmlnQmluZGluZ01lc3NhZ2UisgIKDk1hcHBpbmdNZXNzYWdlEgoKAmlkGAEgASgJEhcKBG5hbWUYAiABKAlCCbpIBnIEgPEEARIMCgRpY29uGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEiQKDmVudmlyb25tZW50X2lkGAUgASgJQgy6SAnIAQFyBMDxBAESIgoMYXJfY29uZmlnX2lkGAYgASgJQgy6SAnIAQFyBJDxBAESEAoIZGlzYWJsZWQYByABKAgSKgoNcm9ib3RfbWFwcGluZxgIIAMoCzITLmFyLnYxLlJvYm90TWFwcGluZxIqCg1hc3NldF9tYXBwaW5nGAkgAygLMhMuYXIudjEuQXNzZXRNYXBwaW5nEhIKCnN0YW5kYWxvbmUYCiABKAgSEAoIcHJpb3JpdHkYCyABKAUiOgoPTWFwcGluZ01lc3NhZ2VzEicKCG1hcHBpbmdzGAEgAygLMhUuYXIudjEuTWFwcGluZ01lc3NhZ2VCiAEKCWNvbS5hci52MUIMTWFwcGluZ1Byb3RvUAFaL2dpdGh1Yi5jb20vY29ib3Rhci9wcm90b2NvbC9tZXNzYWdlcy9hci92MTthcnYxogIDQVhYqgIOTWVzc2FnZXMuQVIuVjHKAgVBclxWMeICEUFyXFYxXEdQQk1ldGFkYXRh6gIGQXI6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_common_v1_property, file_validation_v1_predefined_string_rules]);
16
18
 
17
19
  /**
18
20
  * @generated from message ar.v1.RobotMapping
@@ -59,6 +61,146 @@ export const AssetMappingSchema: GenMessage<AssetMapping> = /*@__PURE__*/
59
61
  messageDesc(file_ar_v1_mapping, 1);
60
62
 
61
63
  /**
64
+ * ARResourceBinding binds a config-declared slot to a concrete resource
65
+ * instance owned by the target station or cell.
66
+ *
67
+ * @generated from message ar.v1.ARResourceBinding
68
+ */
69
+ export type ARResourceBinding = Message<"ar.v1.ARResourceBinding"> & {
70
+ /**
71
+ * @generated from field: string slot_id = 1;
72
+ */
73
+ slotId: string;
74
+
75
+ /**
76
+ * @generated from field: optional string robot_instance_id = 2;
77
+ */
78
+ robotInstanceId?: string;
79
+
80
+ /**
81
+ * @generated from field: optional string asset_instance_id = 3;
82
+ */
83
+ assetInstanceId?: string;
84
+ };
85
+
86
+ /**
87
+ * Describes the message ar.v1.ARResourceBinding.
88
+ * Use `create(ARResourceBindingSchema)` to create a new message.
89
+ */
90
+ export const ARResourceBindingSchema: GenMessage<ARResourceBinding> = /*@__PURE__*/
91
+ messageDesc(file_ar_v1_mapping, 2);
92
+
93
+ /**
94
+ * ARConfigBindingMessage binds a reusable ARConfig to a concrete runtime
95
+ * workspace.
96
+ *
97
+ * Runtime resolution should typically work like this:
98
+ * - load bindings targeted directly at the active station
99
+ * - load bindings targeted at the parent cell
100
+ * - sort by standalone/priority
101
+ * - apply property_overrides after the config template is loaded
102
+ * - populate resource slot properties and runtime context values afterwards
103
+ *
104
+ * This keeps ARConfig authoring reusable while making station/cell-specific
105
+ * resource wiring explicit and safe.
106
+ *
107
+ * @generated from message ar.v1.ARConfigBindingMessage
108
+ */
109
+ export type ARConfigBindingMessage = Message<"ar.v1.ARConfigBindingMessage"> & {
110
+ /**
111
+ * @generated from field: string id = 1;
112
+ */
113
+ id: string;
114
+
115
+ /**
116
+ * @generated from field: string name = 2;
117
+ */
118
+ name: string;
119
+
120
+ /**
121
+ * @generated from field: string icon = 3;
122
+ */
123
+ icon: string;
124
+
125
+ /**
126
+ * @generated from field: string description = 4;
127
+ */
128
+ description: string;
129
+
130
+ /**
131
+ * @generated from field: optional string station_id = 5;
132
+ */
133
+ stationId?: string;
134
+
135
+ /**
136
+ * @generated from field: optional string cell_id = 6;
137
+ */
138
+ cellId?: string;
139
+
140
+ /**
141
+ * @generated from field: string ar_config_id = 7;
142
+ */
143
+ arConfigId: string;
144
+
145
+ /**
146
+ * @generated from field: bool disabled = 8;
147
+ */
148
+ disabled: boolean;
149
+
150
+ /**
151
+ * If true, only standalone bindings with the highest priority should be shown.
152
+ *
153
+ * @generated from field: bool standalone = 9;
154
+ */
155
+ standalone: boolean;
156
+
157
+ /**
158
+ * Higher values should be resolved before lower values.
159
+ *
160
+ * @generated from field: int32 priority = 10;
161
+ */
162
+ priority: number;
163
+
164
+ /**
165
+ * @generated from field: repeated ar.v1.ARResourceBinding resource_bindings = 11;
166
+ */
167
+ resourceBindings: ARResourceBinding[];
168
+
169
+ /**
170
+ * Station/cell-local values applied to config properties before runtime values.
171
+ *
172
+ * @generated from field: repeated common.v1.PropertyValueUpdate property_overrides = 12;
173
+ */
174
+ propertyOverrides: PropertyValueUpdate[];
175
+ };
176
+
177
+ /**
178
+ * Describes the message ar.v1.ARConfigBindingMessage.
179
+ * Use `create(ARConfigBindingMessageSchema)` to create a new message.
180
+ */
181
+ export const ARConfigBindingMessageSchema: GenMessage<ARConfigBindingMessage> = /*@__PURE__*/
182
+ messageDesc(file_ar_v1_mapping, 3);
183
+
184
+ /**
185
+ * @generated from message ar.v1.ARConfigBindingMessages
186
+ */
187
+ export type ARConfigBindingMessages = Message<"ar.v1.ARConfigBindingMessages"> & {
188
+ /**
189
+ * @generated from field: repeated ar.v1.ARConfigBindingMessage bindings = 1;
190
+ */
191
+ bindings: ARConfigBindingMessage[];
192
+ };
193
+
194
+ /**
195
+ * Describes the message ar.v1.ARConfigBindingMessages.
196
+ * Use `create(ARConfigBindingMessagesSchema)` to create a new message.
197
+ */
198
+ export const ARConfigBindingMessagesSchema: GenMessage<ARConfigBindingMessages> = /*@__PURE__*/
199
+ messageDesc(file_ar_v1_mapping, 4);
200
+
201
+ /**
202
+ * Deprecated legacy environment-based mapping.
203
+ *
62
204
  * @generated from message ar.v1.MappingMessage
63
205
  */
64
206
  export type MappingMessage = Message<"ar.v1.MappingMessage"> & {
@@ -127,7 +269,7 @@ export type MappingMessage = Message<"ar.v1.MappingMessage"> & {
127
269
  * Use `create(MappingMessageSchema)` to create a new message.
128
270
  */
129
271
  export const MappingMessageSchema: GenMessage<MappingMessage> = /*@__PURE__*/
130
- messageDesc(file_ar_v1_mapping, 2);
272
+ messageDesc(file_ar_v1_mapping, 5);
131
273
 
132
274
  /**
133
275
  * @generated from message ar.v1.MappingMessages
@@ -144,5 +286,5 @@ export type MappingMessages = Message<"ar.v1.MappingMessages"> & {
144
286
  * Use `create(MappingMessagesSchema)` to create a new message.
145
287
  */
146
288
  export const MappingMessagesSchema: GenMessage<MappingMessages> = /*@__PURE__*/
147
- messageDesc(file_ar_v1_mapping, 3);
289
+ messageDesc(file_ar_v1_mapping, 6);
148
290
 
@@ -11,6 +11,7 @@ import type { SequenceDefinition } from "./sequence_definition_pb.ts";
11
11
  import { file_process_v1_sequence_definition } from "./sequence_definition_pb.ts";
12
12
  import type { TaskDefinition } from "./task_definition_pb.ts";
13
13
  import { file_process_v1_task_definition } from "./task_definition_pb.ts";
14
+ import { file_validation_v1_predefined_string_rules } from "../../validation/v1/predefined_string_rules_pb.ts";
14
15
  import type { VariantConfiguration } from "../../variance/v1/variant_configuration_pb.ts";
15
16
  import { file_variance_v1_variant_configuration } from "../../variance/v1/variant_configuration_pb.ts";
16
17
  import type { Message } from "@bufbuild/protobuf";
@@ -19,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf";
19
20
  * Describes the file process/v1/generation_requests.proto.
20
21
  */
21
22
  export const file_process_v1_generation_requests: GenFile = /*@__PURE__*/
22
- fileDesc("CiRwcm9jZXNzL3YxL2dlbmVyYXRpb25fcmVxdWVzdHMucHJvdG8SCnByb2Nlc3MudjEi6wMKIURyYWZ0UHJvY2Vzc1JlY2lwZUdlbmVyYXRlUmVxdWVzdBIlChVwcm9kdWN0X2RlZmluaXRpb25faWQYASABKAlCBrpIA8gBARIZCglyZWNpcGVfaWQYAiABKAlCBrpIA8gBARITCgtyZWNpcGVfbmFtZRgDIAEoCRITCgtyZWNpcGVfaWNvbhgEIAEoCRIaChJyZWNpcGVfZGVzY3JpcHRpb24YBSABKAkSQAoVdmFyaWFudF9jb25maWd1cmF0aW9uGAYgASgLMiEudmFyaWFuY2UudjEuVmFyaWFudENvbmZpZ3VyYXRpb24SKAogaW5zZXJ0X2FsaWduX2JlZm9yZV9mYXN0ZW5fZ3JvdXAYByABKAgSIQoZZ3JvdXBfZmFzdGVuZXJzX3RocmVzaG9sZBgIIAEoBRImCh5ncm91cF9yZXBlYXRlZF9wYXJ0c190aHJlc2hvbGQYCSABKAUSHQoVZ2VuZXJhdGVfdmVyaWZ5X3Rhc2tzGAogASgIEicKH3ByZWZlcl9tb3ZlX3Rhc2tzX3doZW5fcG9zc2libGUYCyABKAgSHgoWaW5jbHVkZV9vcHRpb25hbF9ub2RlcxgMIAEoCBIfChdnZW5lcmF0ZV9ncmVhc2luZ190YXNrcxgNIAEoCCJvCh9EcmFmdFByb2Nlc3NSZWNpcGVHZW5lcmF0ZUlzc3VlEhcKB21lc3NhZ2UYASABKAlCBrpIA8gBARIXCgdub2RlX2lkGAIgASgJQga6SAPIAQESGgoScGFydF9kZWZpbml0aW9uX2lkGAMgASgJIvABCiBEcmFmdFByb2Nlc3NSZWNpcGVHZW5lcmF0ZVJlc3VsdBIxCgZyZWNpcGUYASABKAsyGS5wcm9jZXNzLnYxLlByb2Nlc3NSZWNpcGVCBrpIA8gBARIxCglzZXF1ZW5jZXMYAiADKAsyHi5wcm9jZXNzLnYxLlNlcXVlbmNlRGVmaW5pdGlvbhIpCgV0YXNrcxgDIAMoCzIaLnByb2Nlc3MudjEuVGFza0RlZmluaXRpb24SOwoGaXNzdWVzGAQgAygLMisucHJvY2Vzcy52MS5EcmFmdFByb2Nlc3NSZWNpcGVHZW5lcmF0ZUlzc3VlQrYBCg5jb20ucHJvY2Vzcy52MUIXR2VuZXJhdGlvblJlcXVlc3RzUHJvdG9QAVo5Z2l0aHViLmNvbS9jb2JvdGFyL3Byb3RvY29sL21lc3NhZ2VzL3Byb2Nlc3MvdjE7cHJvY2Vzc3YxogIDUFhYqgITTWVzc2FnZXMuUHJvY2Vzcy5WMcoCClByb2Nlc3NcVjHiAhZQcm9jZXNzXFYxXEdQQk1ldGFkYXRh6gILUHJvY2Vzczo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_process_v1_process_recipe, file_process_v1_sequence_definition, file_process_v1_task_definition, file_variance_v1_variant_configuration]);
23
+ fileDesc("CiRwcm9jZXNzL3YxL2dlbmVyYXRpb25fcmVxdWVzdHMucHJvdG8SCnByb2Nlc3MudjEi0wUKIURyYWZ0UHJvY2Vzc1JlY2lwZUdlbmVyYXRlUmVxdWVzdBIrChVwcm9kdWN0X2RlZmluaXRpb25faWQYASABKAlCDLpICcgBAXIE4OswARIfCglyZWNpcGVfaWQYAiABKAlCDLpICcgBAXIEoPIEARITCgtyZWNpcGVfbmFtZRgDIAEoCRITCgtyZWNpcGVfaWNvbhgEIAEoCRIaChJyZWNpcGVfZGVzY3JpcHRpb24YBSABKAkSQAoVdmFyaWFudF9jb25maWd1cmF0aW9uGAYgASgLMiEudmFyaWFuY2UudjEuVmFyaWFudENvbmZpZ3VyYXRpb24SKAogaW5zZXJ0X2FsaWduX2JlZm9yZV9mYXN0ZW5fZ3JvdXAYByABKAgSIQoZZ3JvdXBfZmFzdGVuZXJzX3RocmVzaG9sZBgIIAEoBRImCh5ncm91cF9yZXBlYXRlZF9wYXJ0c190aHJlc2hvbGQYCSABKAUSHQoVZ2VuZXJhdGVfdmVyaWZ5X3Rhc2tzGAogASgIEicKH3ByZWZlcl9tb3ZlX3Rhc2tzX3doZW5fcG9zc2libGUYCyABKAgSHgoWaW5jbHVkZV9vcHRpb25hbF9ub2RlcxgMIAEoCBIcChRnZW5lcmF0ZV9hcHBseV90YXNrcxgNIAEoCBIUCgxyb290X25vZGVfaWQYDiABKAkSNQotYXNzZW1ibGVfc3ViYXNzZW1ibGllc19hc191bml0c193aGVuX3Bvc3NpYmxlGA8gASgIEh4KFmdlbmVyYXRlX2luc3BlY3RfdGFza3MYECABKAgSNwofc291cmNlX2NvbnRhaW5lcl9kZWZpbml0aW9uX2lkcxgRIAMoCUIOukgLkgEIIgZyBMjyBAESNwofdGFyZ2V0X2NvbnRhaW5lcl9kZWZpbml0aW9uX2lkcxgSIAMoCUIOukgLkgEIIgZyBMjyBAEiwgUKLERyYWZ0RGlzYXNzZW1ibHlQcm9jZXNzUmVjaXBlR2VuZXJhdGVSZXF1ZXN0EisKFXByb2R1Y3RfZGVmaW5pdGlvbl9pZBgBIAEoCUIMukgJyAEBcgTg6zABEh8KCXJlY2lwZV9pZBgCIAEoCUIMukgJyAEBcgSg8gQBEhMKC3JlY2lwZV9uYW1lGAMgASgJEhMKC3JlY2lwZV9pY29uGAQgASgJEhoKEnJlY2lwZV9kZXNjcmlwdGlvbhgFIAEoCRJAChV2YXJpYW50X2NvbmZpZ3VyYXRpb24YBiABKAsyIS52YXJpYW5jZS52MS5WYXJpYW50Q29uZmlndXJhdGlvbhIpCiFpbnNlcnRfaG9sZF9iZWZvcmVfdW5mYXN0ZW5fZ3JvdXAYByABKAgSIQoZZ3JvdXBfZmFzdGVuZXJzX3RocmVzaG9sZBgIIAEoBRImCh5ncm91cF9yZXBlYXRlZF9wYXJ0c190aHJlc2hvbGQYCSABKAUSHQoVZ2VuZXJhdGVfdmVyaWZ5X3Rhc2tzGAogASgIEicKH3ByZWZlcl9tb3ZlX3Rhc2tzX3doZW5fcG9zc2libGUYCyABKAgSHgoWaW5jbHVkZV9vcHRpb25hbF9ub2RlcxgMIAEoCBIbChNnZW5lcmF0ZV93aXBlX3Rhc2tzGA0gASgIEjcKH3RhcmdldF9jb250YWluZXJfZGVmaW5pdGlvbl9pZHMYDiADKAlCDrpIC5IBCCIGcgTI8gQBEhQKDHJvb3Rfbm9kZV9pZBgPIAEoCRIsCiRwcmVzZXJ2ZV9zdWJhc3NlbWJsaWVzX3doZW5fcG9zc2libGUYECABKAgSJAoccmV2ZXJzZV9jaGlsZF9zZXF1ZW5jZV9vcmRlchgRIAEoCBIeChZnZW5lcmF0ZV9pbnNwZWN0X3Rhc2tzGBIgASgIInoKH0RyYWZ0UHJvY2Vzc1JlY2lwZUdlbmVyYXRlSXNzdWUSFwoHbWVzc2FnZRgBIAEoCUIGukgDyAEBEhcKB25vZGVfaWQYAiABKAlCBrpIA8gBARIlChJwYXJ0X2RlZmluaXRpb25faWQYAyABKAlCCbpIBnIEyPEEASLwAQogRHJhZnRQcm9jZXNzUmVjaXBlR2VuZXJhdGVSZXN1bHQSMQoGcmVjaXBlGAEgASgLMhkucHJvY2Vzcy52MS5Qcm9jZXNzUmVjaXBlQga6SAPIAQESMQoJc2VxdWVuY2VzGAIgAygLMh4ucHJvY2Vzcy52MS5TZXF1ZW5jZURlZmluaXRpb24SKQoFdGFza3MYAyADKAsyGi5wcm9jZXNzLnYxLlRhc2tEZWZpbml0aW9uEjsKBmlzc3VlcxgEIAMoCzIrLnByb2Nlc3MudjEuRHJhZnRQcm9jZXNzUmVjaXBlR2VuZXJhdGVJc3N1ZUK2AQoOY29tLnByb2Nlc3MudjFCF0dlbmVyYXRpb25SZXF1ZXN0c1Byb3RvUAFaOWdpdGh1Yi5jb20vY29ib3Rhci9wcm90b2NvbC9tZXNzYWdlcy9wcm9jZXNzL3YxO3Byb2Nlc3N2MaICA1BYWKoCE01lc3NhZ2VzLlByb2Nlc3MuVjHKAgpQcm9jZXNzXFYx4gIWUHJvY2Vzc1xWMVxHUEJNZXRhZGF0YeoCC1Byb2Nlc3M6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_process_v1_process_recipe, file_process_v1_sequence_definition, file_process_v1_task_definition, file_validation_v1_predefined_string_rules, file_variance_v1_variant_configuration]);
23
24
 
24
25
  /**
25
26
  * DraftProcessRecipeGenerateRequest asks the backend to generate a draft
@@ -114,18 +115,59 @@ export type DraftProcessRecipeGenerateRequest = Message<"process.v1.DraftProcess
114
115
  preferMoveTasksWhenPossible: boolean;
115
116
 
116
117
  /**
117
- * If true, nodes marked as optional will be included
118
+ * If true, nodes marked as optional will be included.
118
119
  *
119
120
  * @generated from field: bool include_optional_nodes = 12;
120
121
  */
121
122
  includeOptionalNodes: boolean;
122
123
 
123
124
  /**
124
- * If true, the generator may insert APPLY (assembly), WIPE (disassembly) tasks where appropriate
125
+ * If true, the generator may insert APPLY tasks where appropriate.
125
126
  *
126
- * @generated from field: bool generate_greasing_tasks = 13;
127
+ * @generated from field: bool generate_apply_tasks = 13;
127
128
  */
128
- generateGreasingTasks: boolean;
129
+ generateApplyTasks: boolean;
130
+
131
+ /**
132
+ * Optional assembly scope. If empty, the generator may consider the full
133
+ * product structure. If set, generation should focus on the specified
134
+ * assembly node and its relevant assembly paths/subtrees.
135
+ *
136
+ * @generated from field: string root_node_id = 14;
137
+ */
138
+ rootNodeId: string;
139
+
140
+ /**
141
+ * If true, the generator should prefer assembling subassemblies as intact
142
+ * units when feasible instead of always expanding them into all child parts.
143
+ *
144
+ * @generated from field: bool assemble_subassemblies_as_units_when_possible = 15;
145
+ */
146
+ assembleSubassembliesAsUnitsWhenPossible: boolean;
147
+
148
+ /**
149
+ * If true, the generator may insert INSPECT tasks where appropriate, for
150
+ * example to assess fit, alignment, damage, or assembly condition.
151
+ *
152
+ * @generated from field: bool generate_inspect_tasks = 16;
153
+ */
154
+ generateInspectTasks: boolean;
155
+
156
+ /**
157
+ * Container definitions that may act as sources for parts during assembly,
158
+ * for example trays, kits, or storage containers.
159
+ *
160
+ * @generated from field: repeated string source_container_definition_ids = 17;
161
+ */
162
+ sourceContainerDefinitionIds: string[];
163
+
164
+ /**
165
+ * Container definitions that may act as targets/workholding during assembly,
166
+ * for example fixtures or pallets used to hold the product being assembled.
167
+ *
168
+ * @generated from field: repeated string target_container_definition_ids = 18;
169
+ */
170
+ targetContainerDefinitionIds: string[];
129
171
  };
130
172
 
131
173
  /**
@@ -135,6 +177,164 @@ export type DraftProcessRecipeGenerateRequest = Message<"process.v1.DraftProcess
135
177
  export const DraftProcessRecipeGenerateRequestSchema: GenMessage<DraftProcessRecipeGenerateRequest> = /*@__PURE__*/
136
178
  messageDesc(file_process_v1_generation_requests, 0);
137
179
 
180
+ /**
181
+ * DraftDisassemblyProcessRecipeGenerateRequest asks the backend to generate a
182
+ * draft ProcessRecipe of type DISASSEMBLY from a ProductDefinition plus
183
+ * generation options.
184
+ *
185
+ * This is intended for authoring-time generation, not runtime execution.
186
+ *
187
+ * @generated from message process.v1.DraftDisassemblyProcessRecipeGenerateRequest
188
+ */
189
+ export type DraftDisassemblyProcessRecipeGenerateRequest = Message<"process.v1.DraftDisassemblyProcessRecipeGenerateRequest"> & {
190
+ /**
191
+ * The product structure that should be transformed into a draft recipe.
192
+ *
193
+ * @generated from field: string product_definition_id = 1;
194
+ */
195
+ productDefinitionId: string;
196
+
197
+ /**
198
+ * Optional explicit recipe id for the generated recipe.
199
+ * If empty, the generator/backend may assign one.
200
+ *
201
+ * @generated from field: string recipe_id = 2;
202
+ */
203
+ recipeId: string;
204
+
205
+ /**
206
+ * Human-readable name for the generated recipe.
207
+ *
208
+ * @generated from field: string recipe_name = 3;
209
+ */
210
+ recipeName: string;
211
+
212
+ /**
213
+ * Optional icon for the generated recipe.
214
+ *
215
+ * @generated from field: string recipe_icon = 4;
216
+ */
217
+ recipeIcon: string;
218
+
219
+ /**
220
+ * Optional human-readable description for the generated recipe.
221
+ *
222
+ * @generated from field: string recipe_description = 5;
223
+ */
224
+ recipeDescription: string;
225
+
226
+ /**
227
+ * Selected product variants used to filter applicability and annotate the
228
+ * generated recipe applicability.
229
+ *
230
+ * @generated from field: variance.v1.VariantConfiguration variant_configuration = 6;
231
+ */
232
+ variantConfiguration?: VariantConfiguration;
233
+
234
+ /**
235
+ * If true, the generator may insert HOLD tasks before grouped UNFASTEN work
236
+ * when that improves stability and task flow during disassembly.
237
+ *
238
+ * @generated from field: bool insert_hold_before_unfasten_group = 7;
239
+ */
240
+ insertHoldBeforeUnfastenGroup: boolean;
241
+
242
+ /**
243
+ * Minimum number of sibling fasteners required before grouping them into a
244
+ * shared fastener-removal-oriented sequence.
245
+ *
246
+ * @generated from field: int32 group_fasteners_threshold = 8;
247
+ */
248
+ groupFastenersThreshold: number;
249
+
250
+ /**
251
+ * Minimum number of repeated sibling parts required before grouping them into
252
+ * a shared repeated-parts disassembly sequence.
253
+ *
254
+ * @generated from field: int32 group_repeated_parts_threshold = 9;
255
+ */
256
+ groupRepeatedPartsThreshold: number;
257
+
258
+ /**
259
+ * If true, the generator may insert VERIFY tasks where appropriate, for
260
+ * example to confirm that a part, fastener, or material has been removed.
261
+ *
262
+ * @generated from field: bool generate_verify_tasks = 10;
263
+ */
264
+ generateVerifyTasks: boolean;
265
+
266
+ /**
267
+ * If true, the generator may prefer MOVE tasks when the operation can be
268
+ * reasonably interpreted as repositioning rather than removal.
269
+ *
270
+ * @generated from field: bool prefer_move_tasks_when_possible = 11;
271
+ */
272
+ preferMoveTasksWhenPossible: boolean;
273
+
274
+ /**
275
+ * If true, nodes marked as optional will be included.
276
+ *
277
+ * @generated from field: bool include_optional_nodes = 12;
278
+ */
279
+ includeOptionalNodes: boolean;
280
+
281
+ /**
282
+ * If true, the generator may insert WIPE tasks where appropriate.
283
+ *
284
+ * @generated from field: bool generate_wipe_tasks = 13;
285
+ */
286
+ generateWipeTasks: boolean;
287
+
288
+ /**
289
+ * Container definitions that removed parts, fasteners, or subassemblies may
290
+ * be staged into during disassembly. These can be fixtures, trays, kits, or
291
+ * storage containers depending on the intended workflow.
292
+ *
293
+ * @generated from field: repeated string target_container_definition_ids = 14;
294
+ */
295
+ targetContainerDefinitionIds: string[];
296
+
297
+ /**
298
+ * Optional disassembly scope. If empty, the generator may consider the full
299
+ * product structure. If set, generation should focus on the specified
300
+ * assembly node and its relevant disassembly paths/subtrees.
301
+ *
302
+ * @generated from field: string root_node_id = 15;
303
+ */
304
+ rootNodeId: string;
305
+
306
+ /**
307
+ * If true, the generator should prefer removing subassemblies as intact units
308
+ * when feasible instead of always decomposing them into all child parts.
309
+ *
310
+ * @generated from field: bool preserve_subassemblies_when_possible = 16;
311
+ */
312
+ preserveSubassembliesWhenPossible: boolean;
313
+
314
+ /**
315
+ * If true, the generator may prefer reversing child ordering hints from the
316
+ * product structure when deriving disassembly sequences.
317
+ *
318
+ * @generated from field: bool reverse_child_sequence_order = 17;
319
+ */
320
+ reverseChildSequenceOrder: boolean;
321
+
322
+ /**
323
+ * If true, the generator may insert INSPECT tasks where appropriate, for
324
+ * example to assess wear, damage, residue, or part condition after removal.
325
+ *
326
+ * @generated from field: bool generate_inspect_tasks = 18;
327
+ */
328
+ generateInspectTasks: boolean;
329
+ };
330
+
331
+ /**
332
+ * Describes the message process.v1.DraftDisassemblyProcessRecipeGenerateRequest.
333
+ * Use `create(DraftDisassemblyProcessRecipeGenerateRequestSchema)` to create a new message.
334
+ */
335
+ export const DraftDisassemblyProcessRecipeGenerateRequestSchema: GenMessage<DraftDisassemblyProcessRecipeGenerateRequest> = /*@__PURE__*/
336
+ messageDesc(file_process_v1_generation_requests, 1);
337
+
138
338
  /**
139
339
  * DraftProcessRecipeGenerateIssue describes a non-fatal issue or warning
140
340
  * encountered during recipe generation.
@@ -163,7 +363,7 @@ export type DraftProcessRecipeGenerateIssue = Message<"process.v1.DraftProcessRe
163
363
  * Use `create(DraftProcessRecipeGenerateIssueSchema)` to create a new message.
164
364
  */
165
365
  export const DraftProcessRecipeGenerateIssueSchema: GenMessage<DraftProcessRecipeGenerateIssue> = /*@__PURE__*/
166
- messageDesc(file_process_v1_generation_requests, 1);
366
+ messageDesc(file_process_v1_generation_requests, 2);
167
367
 
168
368
  /**
169
369
  * DraftProcessRecipeGenerateResult contains the generated draft recipe.
@@ -197,5 +397,5 @@ export type DraftProcessRecipeGenerateResult = Message<"process.v1.DraftProcessR
197
397
  * Use `create(DraftProcessRecipeGenerateResultSchema)` to create a new message.
198
398
  */
199
399
  export const DraftProcessRecipeGenerateResultSchema: GenMessage<DraftProcessRecipeGenerateResult> = /*@__PURE__*/
200
- messageDesc(file_process_v1_generation_requests, 2);
400
+ messageDesc(file_process_v1_generation_requests, 3);
201
401
 
@@ -18,7 +18,7 @@ import type { Message } from "@bufbuild/protobuf";
18
18
  * Describes the file product/v1/part_definition.proto.
19
19
  */
20
20
  export const file_product_v1_part_definition: GenFile = /*@__PURE__*/
21
- fileDesc("CiBwcm9kdWN0L3YxL3BhcnRfZGVmaW5pdGlvbi5wcm90bxIKcHJvZHVjdC52MSJmCgpEaW1lbnNpb25zEhwKBHhfbW0YASABKAFCDrpICxIJKQAAAAAAAAAAEhwKBHlfbW0YAiABKAFCDrpICxIJKQAAAAAAAAAAEhwKBHpfbW0YAyABKAFCDrpICxIJKQAAAAAAAAAAIlsKDE1hdGVyaWFsU3BlYxIuCghjYXRlZ29yeRgBIAEoDjIcLnByb2R1Y3QudjEuTWF0ZXJpYWxDYXRlZ29yeRIMCgRuYW1lGAIgASgJEg0KBWdyYWRlGAMgASgJIsACChNQYXJ0SGFuZGxpbmdQcm9maWxlEg8KB2ZyYWdpbGUYASABKAgSFQoNZXNkX3NlbnNpdGl2ZRgCIAEoCBIeChZyZXF1aXJlc190d29faGFuZF9saWZ0GAMgASgIEiAKGHJlcXVpcmVzX2ZpeHR1cmVfc3VwcG9ydBgEIAEoCBIfChdwcmVfbHVicmljYXRpb25fcGFydF9pZBgFIAEoCRIgChhwb3N0X2x1YnJpY2F0aW9uX3BhcnRfaWQYBiABKAkSFwoPcmVxdWlyZXNfd2lwaW5nGAcgASgIEhgKEG1heF9ncmlwX2ZvcmNlX24YCCABKAESFQoNbWF4X3RvcnF1ZV9ubRgJIAEoARIyCgtjb25zdHJhaW50cxgKIAMoCzIdLmNvbW1vbi52MS5LZXlWYWx1ZUNvbnN0cmFpbnQiygMKDlBhcnREZWZpbml0aW9uEgoKAmlkGAEgASgJEhcKBG5hbWUYAiABKAlCCbpIBnIEgPEEARIMCgRpY29uGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEiwKBHR5cGUYBSABKA4yFC5wcm9kdWN0LnYxLlBhcnRUeXBlQgi6SAWCAQIQARIPCgdzdWJ0eXBlGAYgASgJEhkKCHdlaWdodF9nGAcgASgDQge6SAQiAigAEioKCmRpbWVuc2lvbnMYCCABKAsyFi5wcm9kdWN0LnYxLkRpbWVuc2lvbnMSKgoIbWF0ZXJpYWwYCSABKAsyGC5wcm9kdWN0LnYxLk1hdGVyaWFsU3BlYxIjChBkZWZhdWx0X21vZGVsX2lkGAogASgJQgm6SAZyBIjxBAESMQoIaGFuZGxpbmcYCyABKAsyHy5wcm9kdWN0LnYxLlBhcnRIYW5kbGluZ1Byb2ZpbGUSOQoTZXh0ZXJuYWxfcmVmZXJlbmNlcxgMIAMoCzIcLmNvbW1vbi52MS5FeHRlcm5hbFJlZmVyZW5jZRIrCgZjdXN0b20YDSABKAsyGy5jb21tb24udjEuQ3VzdG9tUHJvcGVydGllcyI8Cg9QYXJ0RGVmaW5pdGlvbnMSKQoFaXRlbXMYASADKAsyGi5wcm9kdWN0LnYxLlBhcnREZWZpbml0aW9uKssCCghQYXJ0VHlwZRIZChVQQVJUX1RZUEVfVU5TUEVDSUZJRUQQABIXChNQQVJUX1RZUEVfQ09NUE9ORU5UEAESFgoSUEFSVF9UWVBFX0ZBU1RFTkVSEAISGQoVUEFSVF9UWVBFX1NVQkFTU0VNQkxZEAMSGAoUUEFSVF9UWVBFX0NPTlNVTUFCTEUQBBITCg9QQVJUX1RZUEVfTEFCRUwQBRIXChNQQVJUX1RZUEVfUEFDS0FHSU5HEAYSEQoNUEFSVF9UWVBFX1BDQhAHEiIKHlBBUlRfVFlQRV9FTEVDVFJPTklDX0NPTVBPTkVOVBAIEiIKHlBBUlRfVFlQRV9FTEVDVFJJQ0FMX0NPTVBPTkVOVBAJEhMKD1BBUlRfVFlQRV9DQUJMRRAKEiAKHFBBUlRfVFlQRV9ESVNQRU5TRURfTUFURVJJQUwQCyqRAwoQTWF0ZXJpYWxDYXRlZ29yeRIhCh1NQVRFUklBTF9DQVRFR09SWV9VTlNQRUNJRklFRBAAEhsKF01BVEVSSUFMX0NBVEVHT1JZX01FVEFMEAESHQoZTUFURVJJQUxfQ0FURUdPUllfUE9MWU1FUhACEh8KG01BVEVSSUFMX0NBVEVHT1JZX0VMQVNUT01FUhADEh8KG01BVEVSSUFMX0NBVEVHT1JZX0NPTVBPU0lURRAEEh0KGU1BVEVSSUFMX0NBVEVHT1JZX0NFUkFNSUMQBRIbChdNQVRFUklBTF9DQVRFR09SWV9HTEFTUxAGEhoKFk1BVEVSSUFMX0NBVEVHT1JZX1dPT0QQBxIaChZNQVRFUklBTF9DQVRFR09SWV9GT0FNEAgSKwonTUFURVJJQUxfQ0FURUdPUllfRUxFQ1RST05JQ1NfU1VCU1RSQVRFEAkSHgoaTUFURVJJQUxfQ0FURUdPUllfQ0hFTUlDQUwQChIbChdNQVRFUklBTF9DQVRFR09SWV9PVEhFUhBjQrIBCg5jb20ucHJvZHVjdC52MUITUGFydERlZmluaXRpb25Qcm90b1ABWjlnaXRodWIuY29tL2NvYm90YXIvcHJvdG9jb2wvbWVzc2FnZXMvcHJvZHVjdC92MTtwcm9kdWN0djGiAgNQWFiqAhNNZXNzYWdlcy5Qcm9kdWN0LlYxygIKUHJvZHVjdFxWMeICFlByb2R1Y3RcVjFcR1BCTWV0YWRhdGHqAgtQcm9kdWN0OjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_common_v1_custom_properties, file_common_v1_external_references, file_common_v1_key_value_constraint, file_validation_v1_predefined_string_rules]);
21
+ fileDesc("CiBwcm9kdWN0L3YxL3BhcnRfZGVmaW5pdGlvbi5wcm90bxIKcHJvZHVjdC52MSJmCgpEaW1lbnNpb25zEhwKBHhfbW0YASABKAFCDrpICxIJKQAAAAAAAAAAEhwKBHlfbW0YAiABKAFCDrpICxIJKQAAAAAAAAAAEhwKBHpfbW0YAyABKAFCDrpICxIJKQAAAAAAAAAAIlsKDE1hdGVyaWFsU3BlYxIuCghjYXRlZ29yeRgBIAEoDjIcLnByb2R1Y3QudjEuTWF0ZXJpYWxDYXRlZ29yeRIMCgRuYW1lGAIgASgJEg0KBWdyYWRlGAMgASgJIoQDChNQYXJ0SGFuZGxpbmdQcm9maWxlEg8KB2ZyYWdpbGUYASABKAgSFQoNZXNkX3NlbnNpdGl2ZRgCIAEoCBIeChZyZXF1aXJlc190d29faGFuZF9saWZ0GAMgASgIEiAKGHJlcXVpcmVzX2ZpeHR1cmVfc3VwcG9ydBgEIAEoCBIfChdwcmVfbHVicmljYXRpb25fcGFydF9pZBgFIAEoCRIgChhwb3N0X2x1YnJpY2F0aW9uX3BhcnRfaWQYBiABKAkSFwoPcmVxdWlyZXNfd2lwaW5nGAcgASgIEh8KF2luc3BlY3RfYmVmb3JlX2Fzc2VtYmxlGAggASgIEiEKGWluc3BlY3RfYWZ0ZXJfZGlzYXNzZW1ibGUYCSABKAgSGAoQbWF4X2dyaXBfZm9yY2VfbhgKIAEoARIVCg1tYXhfdG9ycXVlX25tGAsgASgBEjIKC2NvbnN0cmFpbnRzGAwgAygLMh0uY29tbW9uLnYxLktleVZhbHVlQ29uc3RyYWludCLKAwoOUGFydERlZmluaXRpb24SCgoCaWQYASABKAkSFwoEbmFtZRgCIAEoCUIJukgGcgSA8QQBEgwKBGljb24YAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkSLAoEdHlwZRgFIAEoDjIULnByb2R1Y3QudjEuUGFydFR5cGVCCLpIBYIBAhABEg8KB3N1YnR5cGUYBiABKAkSGQoId2VpZ2h0X2cYByABKANCB7pIBCICKAASKgoKZGltZW5zaW9ucxgIIAEoCzIWLnByb2R1Y3QudjEuRGltZW5zaW9ucxIqCghtYXRlcmlhbBgJIAEoCzIYLnByb2R1Y3QudjEuTWF0ZXJpYWxTcGVjEiMKEGRlZmF1bHRfbW9kZWxfaWQYCiABKAlCCbpIBnIEiPEEARIxCghoYW5kbGluZxgLIAEoCzIfLnByb2R1Y3QudjEuUGFydEhhbmRsaW5nUHJvZmlsZRI5ChNleHRlcm5hbF9yZWZlcmVuY2VzGAwgAygLMhwuY29tbW9uLnYxLkV4dGVybmFsUmVmZXJlbmNlEisKBmN1c3RvbRgNIAEoCzIbLmNvbW1vbi52MS5DdXN0b21Qcm9wZXJ0aWVzIjwKD1BhcnREZWZpbml0aW9ucxIpCgVpdGVtcxgBIAMoCzIaLnByb2R1Y3QudjEuUGFydERlZmluaXRpb24qywIKCFBhcnRUeXBlEhkKFVBBUlRfVFlQRV9VTlNQRUNJRklFRBAAEhcKE1BBUlRfVFlQRV9DT01QT05FTlQQARIWChJQQVJUX1RZUEVfRkFTVEVORVIQAhIZChVQQVJUX1RZUEVfU1VCQVNTRU1CTFkQAxIYChRQQVJUX1RZUEVfQ09OU1VNQUJMRRAEEhMKD1BBUlRfVFlQRV9MQUJFTBAFEhcKE1BBUlRfVFlQRV9QQUNLQUdJTkcQBhIRCg1QQVJUX1RZUEVfUENCEAcSIgoeUEFSVF9UWVBFX0VMRUNUUk9OSUNfQ09NUE9ORU5UEAgSIgoeUEFSVF9UWVBFX0VMRUNUUklDQUxfQ09NUE9ORU5UEAkSEwoPUEFSVF9UWVBFX0NBQkxFEAoSIAocUEFSVF9UWVBFX0RJU1BFTlNFRF9NQVRFUklBTBALKpEDChBNYXRlcmlhbENhdGVnb3J5EiEKHU1BVEVSSUFMX0NBVEVHT1JZX1VOU1BFQ0lGSUVEEAASGwoXTUFURVJJQUxfQ0FURUdPUllfTUVUQUwQARIdChlNQVRFUklBTF9DQVRFR09SWV9QT0xZTUVSEAISHwobTUFURVJJQUxfQ0FURUdPUllfRUxBU1RPTUVSEAMSHwobTUFURVJJQUxfQ0FURUdPUllfQ09NUE9TSVRFEAQSHQoZTUFURVJJQUxfQ0FURUdPUllfQ0VSQU1JQxAFEhsKF01BVEVSSUFMX0NBVEVHT1JZX0dMQVNTEAYSGgoWTUFURVJJQUxfQ0FURUdPUllfV09PRBAHEhoKFk1BVEVSSUFMX0NBVEVHT1JZX0ZPQU0QCBIrCidNQVRFUklBTF9DQVRFR09SWV9FTEVDVFJPTklDU19TVUJTVFJBVEUQCRIeChpNQVRFUklBTF9DQVRFR09SWV9DSEVNSUNBTBAKEhsKF01BVEVSSUFMX0NBVEVHT1JZX09USEVSEGNCsgEKDmNvbS5wcm9kdWN0LnYxQhNQYXJ0RGVmaW5pdGlvblByb3RvUAFaOWdpdGh1Yi5jb20vY29ib3Rhci9wcm90b2NvbC9tZXNzYWdlcy9wcm9kdWN0L3YxO3Byb2R1Y3R2MaICA1BYWKoCE01lc3NhZ2VzLlByb2R1Y3QuVjHKAgpQcm9kdWN0XFYx4gIWUHJvZHVjdFxWMVxHUEJNZXRhZGF0YeoCC1Byb2R1Y3Q6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_common_v1_custom_properties, file_common_v1_external_references, file_common_v1_key_value_constraint, file_validation_v1_predefined_string_rules]);
22
22
 
23
23
  /**
24
24
  * @generated from message product.v1.Dimensions
@@ -136,17 +136,27 @@ export type PartHandlingProfile = Message<"product.v1.PartHandlingProfile"> & {
136
136
  requiresWiping: boolean;
137
137
 
138
138
  /**
139
- * @generated from field: double max_grip_force_n = 8;
139
+ * @generated from field: bool inspect_before_assemble = 8;
140
+ */
141
+ inspectBeforeAssemble: boolean;
142
+
143
+ /**
144
+ * @generated from field: bool inspect_after_disassemble = 9;
145
+ */
146
+ inspectAfterDisassemble: boolean;
147
+
148
+ /**
149
+ * @generated from field: double max_grip_force_n = 10;
140
150
  */
141
151
  maxGripForceN: number;
142
152
 
143
153
  /**
144
- * @generated from field: double max_torque_nm = 9;
154
+ * @generated from field: double max_torque_nm = 11;
145
155
  */
146
156
  maxTorqueNm: number;
147
157
 
148
158
  /**
149
- * @generated from field: repeated common.v1.KeyValueConstraint constraints = 10;
159
+ * @generated from field: repeated common.v1.KeyValueConstraint constraints = 12;
150
160
  */
151
161
  constraints: KeyValueConstraint[];
152
162
  };
@@ -11,7 +11,7 @@ import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts";
11
11
  * Describes the file validation/v1/predefined_string_rules.proto.
12
12
  */
13
13
  export const file_validation_v1_predefined_string_rules: GenFile = /*@__PURE__*/
14
- fileDesc("Cit2YWxpZGF0aW9uL3YxL3ByZWRlZmluZWRfc3RyaW5nX3J1bGVzLnByb3RvEg12YWxpZGF0aW9uLnYxOrEBCg5uYW1lX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiQTiABKAhCbsJIawppChVzdHJpbmcubmFtZV9jb21wb25lbnQSKk5hbWUgbXVzdCBoYXZlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycxokdGhpcy5zaXplKCkgPiAwICYmIHRoaXMuc2l6ZSgpIDw9IDY0Ug1uYW1lQ29tcG9uZW50OroBChJtb2RlbF9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYkU4gASgIQnDCSG0KawoZc3RyaW5nLm1vZGVsX2lkX2NvbXBvbmVudBIjdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgbW9kZWwgaWQaKSh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnbW9kZWwtJykpUhBtb2RlbElkQ29tcG9uZW50OswBChZhcl9jb25maWdfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJJOIAEoCEJ7wkh4CnYKHXN0cmluZy5hcl9jb25maWdfaWRfY29tcG9uZW50EiZ0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBBUkNvbmZpZyBpZBotKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdhcl9jb25maWctJykpUhNhckNvbmZpZ0lkQ29tcG9uZW50OskBChVwcm9wZXJ0eV9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYk04gASgIQnnCSHYKdAocc3RyaW5nLnByb3BlcnR5X2lkX2NvbXBvbmVudBImdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgcHJvcGVydHkgaWQaLCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncHJvcGVydHktJykpUhNwcm9wZXJ0eUlkQ29tcG9uZW50OvMBCh1yb2JvdF9kZWZpbml0aW9uX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiUTiABKAhCkwHCSI8BCowBCiRzdHJpbmcucm9ib3RfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSLnRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHJvYm90IGRlZmluaXRpb24gaWQaNCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncm9ib3RfZGVmaW5pdGlvbi0nKSlSGnJvYm90RGVmaW5pdGlvbklkQ29tcG9uZW50OukBChtyb2JvdF9pbnN0YW5jZV9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYlU4gASgIQo0BwkiJAQqGAQoic3RyaW5nLnJvYm90X2luc3RhbmNlX2lkX2NvbXBvbmVudBIsdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgcm9ib3QgaW5zdGFuY2UgaWQaMih0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncm9ib3RfaW5zdGFuY2UtJykpUhhyb2JvdEluc3RhbmNlSWRDb21wb25lbnQ68wEKHWFzc2V0X2RlZmluaXRpb25faWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJZOIAEoCEKTAcJIjwEKjAEKJHN0cmluZy5hc3NldF9kZWZpbml0aW9uX2lkX2NvbXBvbmVudBIudGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgYXNzZXQgZGVmaW5pdGlvbiBpZBo0KHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdhc3NldF9kZWZpbml0aW9uLScpKVIaYXNzZXREZWZpbml0aW9uSWRDb21wb25lbnQ66QEKG2Fzc2V0X2luc3RhbmNlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiXTiABKAhCjQHCSIkBCoYBCiJzdHJpbmcuYXNzZXRfaW5zdGFuY2VfaWRfY29tcG9uZW50Eix0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBhc3NldCBpbnN0YW5jZSBpZBoyKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdhc3NldF9pbnN0YW5jZS0nKSlSGGFzc2V0SW5zdGFuY2VJZENvbXBvbmVudDrZAQoYZW52aXJvbm1lbnRfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJhOIAEoCEKCAcJIfwp9Ch9zdHJpbmcuZW52aXJvbm1lbnRfaWRfY29tcG9uZW50Eil0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBlbnZpcm9ubWVudCBpZBovKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdlbnZpcm9ubWVudC0nKSlSFmVudmlyb25tZW50SWRDb21wb25lbnQ67gEKHHBhcnRfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYmU4gASgIQpABwkiMAQqJAQojc3RyaW5nLnBhcnRfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSLXRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHBhcnQgZGVmaW5pdGlvbiBpZBozKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdwYXJ0X2RlZmluaXRpb24tJykpUhlwYXJ0RGVmaW5pdGlvbklkQ29tcG9uZW50OuQBChpwYXJ0X2luc3RhbmNlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiaTiABKAhCigHCSIYBCoMBCiFzdHJpbmcucGFydF9pbnN0YW5jZV9pZF9jb21wb25lbnQSK3RoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHBhcnQgaW5zdGFuY2UgaWQaMSh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncGFydF9pbnN0YW5jZS0nKSlSF3BhcnRJbnN0YW5jZUlkQ29tcG9uZW50Ou4BChx0b29sX2RlZmluaXRpb25faWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJtOIAEoCEKQAcJIjAEKiQEKI3N0cmluZy50b29sX2RlZmluaXRpb25faWRfY29tcG9uZW50Ei10aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSB0b29sIGRlZmluaXRpb24gaWQaMyh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgndG9vbF9kZWZpbml0aW9uLScpKVIZdG9vbERlZmluaXRpb25JZENvbXBvbmVudDrPAQoadG9vbF9pbnN0YW5jZV9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYnE4gASgIQnbCSHMKcQoYc3RyaW5nLnRvb2xfaWRfY29tcG9uZW50EiJ0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSB0b29sIGlkGjEodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3Rvb2xfaW5zdGFuY2UtJykpUhd0b29sSW5zdGFuY2VJZENvbXBvbmVudDq/AQoTbWFya2VyX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxidTiABKAhCc8JIcApuChpzdHJpbmcubWFya2VyX2lkX2NvbXBvbmVudBIkdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgbWFya2VyIGlkGioodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ21hcmtlci0nKSlSEW1hcmtlcklkQ29tcG9uZW50OsQBChRmaXh0dXJlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxieTiABKAhCdsJIcwpxChtzdHJpbmcuZml4dHVyZV9pZF9jb21wb25lbnQSJXRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGZpeHR1cmUgaWQaKyh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnZml4dHVyZS0nKSlSEmZpeHR1cmVJZENvbXBvbmVudDrEAQoUc3RhdGlvbl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYn04gASgIQnbCSHMKcQobc3RyaW5nLnN0YXRpb25faWRfY29tcG9uZW50EiV0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBzdGF0aW9uIGlkGisodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3N0YXRpb24tJykpUhJzdGF0aW9uSWRDb21wb25lbnQ6ugEKEnNraWxsX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxigTiABKAhCcMJIbQprChlzdHJpbmcuc2tpbGxfaWRfY29tcG9uZW50EiN0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBza2lsbCBpZBopKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdza2lsbC0nKSlSEHNraWxsSWRDb21wb25lbnQ62AEKGHByb2Nlc3NfcnVuX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxihTiABKAhCggHCSH8KfQofc3RyaW5nLnByb2Nlc3NfcnVuX2lkX2NvbXBvbmVudBIpdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgcHJvY2VzcyBydW4gaWQaLyh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncHJvY2Vzc19ydW4tJykpUhVwcm9jZXNzUnVuSWRDb21wb25lbnQ63wEKGXNlcXVlbmNlX3J1bl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYok4gASgIQocBwkiDAQqAAQogc3RyaW5nLnNlcXVlbmNlX3J1bl9pZF9jb21wb25lbnQSKnRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHNlcXVlbmNlIHJ1biBpZBowKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdzZXF1ZW5jZV9ydW4tJykpUhZzZXF1ZW5jZVJ1bklkQ29tcG9uZW50OsgBChV0YXNrX3J1bl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYo04gASgIQnnCSHYKdAocc3RyaW5nLnRhc2tfcnVuX2lkX2NvbXBvbmVudBImdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgdGFzayBydW4gaWQaLCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgndGFza19ydW4tJykpUhJ0YXNrUnVuSWRDb21wb25lbnQ66QEKG3Byb2Nlc3NfcmVjaXBlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxikTiABKAhCjQHCSIkBCoYBCiJzdHJpbmcucHJvY2Vzc19yZWNpcGVfaWRfY29tcG9uZW50Eix0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBwcm9jZXNzIHJlY2lwZSBpZBoyKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdwcm9jZXNzX3JlY2lwZS0nKSlSGHByb2Nlc3NSZWNpcGVJZENvbXBvbmVudDqCAgogc2VxdWVuY2VfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYpU4gASgIQpwBwkiYAQqVAQonc3RyaW5nLnNlcXVlbmNlX2RlZmluaXRpb25faWRfY29tcG9uZW50EjF0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBzZXF1ZW5jZSBkZWZpbml0aW9uIGlkGjcodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3NlcXVlbmNlX2RlZmluaXRpb24tJykpUh1zZXF1ZW5jZURlZmluaXRpb25JZENvbXBvbmVudDruAQocdGFza19kZWZpbml0aW9uX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcximTiABKAhCkAHCSIwBCokBCiNzdHJpbmcudGFza19kZWZpbml0aW9uX2lkX2NvbXBvbmVudBItdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgdGFzayBkZWZpbml0aW9uIGlkGjModGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3Rhc2tfZGVmaW5pdGlvbi0nKSlSGXRhc2tEZWZpbml0aW9uSWRDb21wb25lbnQ6tQEKEWNlbGxfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGKdOIAEoCEJtwkhqCmgKGHN0cmluZy5jZWxsX2lkX2NvbXBvbmVudBIidGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgY2VsbCBpZBooKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdjZWxsLScpKVIPY2VsbElkQ29tcG9uZW50OrUBChFsaW5lX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxioTiABKAhCbcJIagpoChhzdHJpbmcubGluZV9pZF9jb21wb25lbnQSInRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGxpbmUgaWQaKCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnbGluZS0nKSlSD2xpbmVJZENvbXBvbmVudDqHAgohY29udGFpbmVyX2RlZmluaXRpb25faWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGKlOIAEoCEKfAcJImwEKmAEKKHN0cmluZy5jb250YWluZXJfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSMnRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGNvbnRhaW5lciBkZWZpbml0aW9uIGlkGjgodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ2NvbnRhaW5lcl9kZWZpbml0aW9uLScpKVIeY29udGFpbmVyRGVmaW5pdGlvbklkQ29tcG9uZW50OvoBCh9jb250YWluZXJfaW5zdGFuY2VfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLqNBiABKAhClQHCSJEBCo4BCiJzdHJpbmcucm9ib3RfaW5zdGFuY2VfaWRfY29tcG9uZW50EjB0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBjb250YWluZXIgaW5zdGFuY2UgaWQaNih0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnY29udGFpbmVyX2luc3RhbmNlLScpKVIcY29udGFpbmVySW5zdGFuY2VJZENvbXBvbmVudDrAAQoTd29ya2VyX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi7jQYgASgIQnPCSHAKbgoac3RyaW5nLndvcmtlcl9pZF9jb21wb25lbnQSJHRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHdvcmtlciBpZBoqKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCd3b3JrZXItJykpUhF3b3JrZXJJZENvbXBvbmVudEK1AQoRY29tLnZhbGlkYXRpb24udjFCGlByZWRlZmluZWRTdHJpbmdSdWxlc1Byb3RvUAFaP2dpdGh1Yi5jb20vY29ib3Rhci9wcm90b2NvbC9tZXNzYWdlcy92YWxpZGF0aW9uL3YxO3ZhbGlkYXRpb252MaICA1ZYWMoCDVZhbGlkYXRpb25cVjHiAhlWYWxpZGF0aW9uXFYxXEdQQk1ldGFkYXRh6gIOVmFsaWRhdGlvbjo6VjE", [file_buf_validate_validate]);
14
+ fileDesc("Cit2YWxpZGF0aW9uL3YxL3ByZWRlZmluZWRfc3RyaW5nX3J1bGVzLnByb3RvEg12YWxpZGF0aW9uLnYxOrEBCg5uYW1lX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiQTiABKAhCbsJIawppChVzdHJpbmcubmFtZV9jb21wb25lbnQSKk5hbWUgbXVzdCBoYXZlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycxokdGhpcy5zaXplKCkgPiAwICYmIHRoaXMuc2l6ZSgpIDw9IDY0Ug1uYW1lQ29tcG9uZW50OroBChJtb2RlbF9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYkU4gASgIQnDCSG0KawoZc3RyaW5nLm1vZGVsX2lkX2NvbXBvbmVudBIjdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgbW9kZWwgaWQaKSh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnbW9kZWwtJykpUhBtb2RlbElkQ29tcG9uZW50OswBChZhcl9jb25maWdfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJJOIAEoCEJ7wkh4CnYKHXN0cmluZy5hcl9jb25maWdfaWRfY29tcG9uZW50EiZ0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBBUkNvbmZpZyBpZBotKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdhcl9jb25maWctJykpUhNhckNvbmZpZ0lkQ29tcG9uZW50OskBChVwcm9wZXJ0eV9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYk04gASgIQnnCSHYKdAocc3RyaW5nLnByb3BlcnR5X2lkX2NvbXBvbmVudBImdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgcHJvcGVydHkgaWQaLCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncHJvcGVydHktJykpUhNwcm9wZXJ0eUlkQ29tcG9uZW50OvMBCh1yb2JvdF9kZWZpbml0aW9uX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiUTiABKAhCkwHCSI8BCowBCiRzdHJpbmcucm9ib3RfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSLnRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHJvYm90IGRlZmluaXRpb24gaWQaNCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncm9ib3RfZGVmaW5pdGlvbi0nKSlSGnJvYm90RGVmaW5pdGlvbklkQ29tcG9uZW50OukBChtyb2JvdF9pbnN0YW5jZV9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYlU4gASgIQo0BwkiJAQqGAQoic3RyaW5nLnJvYm90X2luc3RhbmNlX2lkX2NvbXBvbmVudBIsdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgcm9ib3QgaW5zdGFuY2UgaWQaMih0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncm9ib3RfaW5zdGFuY2UtJykpUhhyb2JvdEluc3RhbmNlSWRDb21wb25lbnQ68wEKHWFzc2V0X2RlZmluaXRpb25faWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJZOIAEoCEKTAcJIjwEKjAEKJHN0cmluZy5hc3NldF9kZWZpbml0aW9uX2lkX2NvbXBvbmVudBIudGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgYXNzZXQgZGVmaW5pdGlvbiBpZBo0KHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdhc3NldF9kZWZpbml0aW9uLScpKVIaYXNzZXREZWZpbml0aW9uSWRDb21wb25lbnQ66QEKG2Fzc2V0X2luc3RhbmNlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiXTiABKAhCjQHCSIkBCoYBCiJzdHJpbmcuYXNzZXRfaW5zdGFuY2VfaWRfY29tcG9uZW50Eix0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBhc3NldCBpbnN0YW5jZSBpZBoyKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdhc3NldF9pbnN0YW5jZS0nKSlSGGFzc2V0SW5zdGFuY2VJZENvbXBvbmVudDrZAQoYZW52aXJvbm1lbnRfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJhOIAEoCEKCAcJIfwp9Ch9zdHJpbmcuZW52aXJvbm1lbnRfaWRfY29tcG9uZW50Eil0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBlbnZpcm9ubWVudCBpZBovKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdlbnZpcm9ubWVudC0nKSlSFmVudmlyb25tZW50SWRDb21wb25lbnQ67gEKHHBhcnRfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYmU4gASgIQpABwkiMAQqJAQojc3RyaW5nLnBhcnRfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSLXRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHBhcnQgZGVmaW5pdGlvbiBpZBozKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdwYXJ0X2RlZmluaXRpb24tJykpUhlwYXJ0RGVmaW5pdGlvbklkQ29tcG9uZW50OuQBChpwYXJ0X2luc3RhbmNlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxiaTiABKAhCigHCSIYBCoMBCiFzdHJpbmcucGFydF9pbnN0YW5jZV9pZF9jb21wb25lbnQSK3RoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHBhcnQgaW5zdGFuY2UgaWQaMSh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncGFydF9pbnN0YW5jZS0nKSlSF3BhcnRJbnN0YW5jZUlkQ29tcG9uZW50Ou4BChx0b29sX2RlZmluaXRpb25faWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGJtOIAEoCEKQAcJIjAEKiQEKI3N0cmluZy50b29sX2RlZmluaXRpb25faWRfY29tcG9uZW50Ei10aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSB0b29sIGRlZmluaXRpb24gaWQaMyh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgndG9vbF9kZWZpbml0aW9uLScpKVIZdG9vbERlZmluaXRpb25JZENvbXBvbmVudDrPAQoadG9vbF9pbnN0YW5jZV9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYnE4gASgIQnbCSHMKcQoYc3RyaW5nLnRvb2xfaWRfY29tcG9uZW50EiJ0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSB0b29sIGlkGjEodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3Rvb2xfaW5zdGFuY2UtJykpUhd0b29sSW5zdGFuY2VJZENvbXBvbmVudDq/AQoTbWFya2VyX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxidTiABKAhCc8JIcApuChpzdHJpbmcubWFya2VyX2lkX2NvbXBvbmVudBIkdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgbWFya2VyIGlkGioodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ21hcmtlci0nKSlSEW1hcmtlcklkQ29tcG9uZW50OsQBChRmaXh0dXJlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxieTiABKAhCdsJIcwpxChtzdHJpbmcuZml4dHVyZV9pZF9jb21wb25lbnQSJXRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGZpeHR1cmUgaWQaKyh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnZml4dHVyZS0nKSlSEmZpeHR1cmVJZENvbXBvbmVudDrEAQoUc3RhdGlvbl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYn04gASgIQnbCSHMKcQobc3RyaW5nLnN0YXRpb25faWRfY29tcG9uZW50EiV0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBzdGF0aW9uIGlkGisodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3N0YXRpb24tJykpUhJzdGF0aW9uSWRDb21wb25lbnQ6ugEKEnNraWxsX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxigTiABKAhCcMJIbQprChlzdHJpbmcuc2tpbGxfaWRfY29tcG9uZW50EiN0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBza2lsbCBpZBopKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdza2lsbC0nKSlSEHNraWxsSWRDb21wb25lbnQ62AEKGHByb2Nlc3NfcnVuX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxihTiABKAhCggHCSH8KfQofc3RyaW5nLnByb2Nlc3NfcnVuX2lkX2NvbXBvbmVudBIpdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgcHJvY2VzcyBydW4gaWQaLyh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgncHJvY2Vzc19ydW4tJykpUhVwcm9jZXNzUnVuSWRDb21wb25lbnQ63wEKGXNlcXVlbmNlX3J1bl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYok4gASgIQocBwkiDAQqAAQogc3RyaW5nLnNlcXVlbmNlX3J1bl9pZF9jb21wb25lbnQSKnRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHNlcXVlbmNlIHJ1biBpZBowKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdzZXF1ZW5jZV9ydW4tJykpUhZzZXF1ZW5jZVJ1bklkQ29tcG9uZW50OsgBChV0YXNrX3J1bl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYo04gASgIQnnCSHYKdAocc3RyaW5nLnRhc2tfcnVuX2lkX2NvbXBvbmVudBImdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgdGFzayBydW4gaWQaLCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgndGFza19ydW4tJykpUhJ0YXNrUnVuSWRDb21wb25lbnQ66QEKG3Byb2Nlc3NfcmVjaXBlX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxikTiABKAhCjQHCSIkBCoYBCiJzdHJpbmcucHJvY2Vzc19yZWNpcGVfaWRfY29tcG9uZW50Eix0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBwcm9jZXNzIHJlY2lwZSBpZBoyKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdwcm9jZXNzX3JlY2lwZS0nKSlSGHByb2Nlc3NSZWNpcGVJZENvbXBvbmVudDqCAgogc2VxdWVuY2VfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYpU4gASgIQpwBwkiYAQqVAQonc3RyaW5nLnNlcXVlbmNlX2RlZmluaXRpb25faWRfY29tcG9uZW50EjF0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBzZXF1ZW5jZSBkZWZpbml0aW9uIGlkGjcodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3NlcXVlbmNlX2RlZmluaXRpb24tJykpUh1zZXF1ZW5jZURlZmluaXRpb25JZENvbXBvbmVudDruAQocdGFza19kZWZpbml0aW9uX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcximTiABKAhCkAHCSIwBCokBCiNzdHJpbmcudGFza19kZWZpbml0aW9uX2lkX2NvbXBvbmVudBItdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgdGFzayBkZWZpbml0aW9uIGlkGjModGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ3Rhc2tfZGVmaW5pdGlvbi0nKSlSGXRhc2tEZWZpbml0aW9uSWRDb21wb25lbnQ6tQEKEWNlbGxfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGKdOIAEoCEJtwkhqCmgKGHN0cmluZy5jZWxsX2lkX2NvbXBvbmVudBIidGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgY2VsbCBpZBooKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdjZWxsLScpKVIPY2VsbElkQ29tcG9uZW50OrUBChFsaW5lX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxioTiABKAhCbcJIagpoChhzdHJpbmcubGluZV9pZF9jb21wb25lbnQSInRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGxpbmUgaWQaKCh0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnbGluZS0nKSlSD2xpbmVJZENvbXBvbmVudDqHAgohY29udGFpbmVyX2RlZmluaXRpb25faWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGKlOIAEoCEKfAcJImwEKmAEKKHN0cmluZy5jb250YWluZXJfZGVmaW5pdGlvbl9pZF9jb21wb25lbnQSMnRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGNvbnRhaW5lciBkZWZpbml0aW9uIGlkGjgodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ2NvbnRhaW5lcl9kZWZpbml0aW9uLScpKVIeY29udGFpbmVyRGVmaW5pdGlvbklkQ29tcG9uZW50OvoBCh9jb250YWluZXJfaW5zdGFuY2VfaWRfY29tcG9uZW50EhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLqNBiABKAhClQHCSJEBCo4BCiJzdHJpbmcucm9ib3RfaW5zdGFuY2VfaWRfY29tcG9uZW50EjB0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBjb250YWluZXIgaW5zdGFuY2UgaWQaNih0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnY29udGFpbmVyX2luc3RhbmNlLScpKVIcY29udGFpbmVySW5zdGFuY2VJZENvbXBvbmVudDrAAQoTd29ya2VyX2lkX2NvbXBvbmVudBIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi7jQYgASgIQnPCSHAKbgoac3RyaW5nLndvcmtlcl9pZF9jb21wb25lbnQSJHRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHdvcmtlciBpZBoqKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCd3b3JrZXItJykpUhF3b3JrZXJJZENvbXBvbmVudDrFAQoUcHJvZHVjdF9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvI0GIAEoCEJ2wkhzCnEKG3N0cmluZy5wcm9kdWN0X2lkX2NvbXBvbmVudBIldGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgcHJvZHVjdCBpZBorKHRoaXMgPT0gJycgfHwgdGhpcy5zdGFydHNXaXRoKCdwcm9kdWN0LScpKVIScHJvZHVjdElkQ29tcG9uZW50OvgBCh5hcl9jb25maWdfYmluZGluZ19pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvY0GIAEoCEKWAcJIkgEKjwEKJXN0cmluZy5hcl9jb25maWdfYmluZGluZ19pZF9jb21wb25lbnQSL3RoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSBhIEFSIGNvbmZpZyBiaW5kaW5nIGlkGjUodGhpcyA9PSAnJyB8fCB0aGlzLnN0YXJ0c1dpdGgoJ2FyX2NvbmZpZ19iaW5kaW5nLScpKVIaYXJDb25maWdCaW5kaW5nSWRDb21wb25lbnQ6/QEKH2FyX2NvbmZpZ19pbnN0YW5jZV9pZF9jb21wb25lbnQSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvo0GIAEoCEKZAcJIlQEKkgEKJnN0cmluZy5hcl9jb25maWdfaW5zdGFuY2VfaWRfY29tcG9uZW50EjB0aGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBBUiBjb25maWcgaW5zdGFuY2UgaWQaNih0aGlzID09ICcnIHx8IHRoaXMuc3RhcnRzV2l0aCgnYXJfY29uZmlnX2luc3RhbmNlLScpKVIbYXJDb25maWdJbnN0YW5jZUlkQ29tcG9uZW50QrUBChFjb20udmFsaWRhdGlvbi52MUIaUHJlZGVmaW5lZFN0cmluZ1J1bGVzUHJvdG9QAVo/Z2l0aHViLmNvbS9jb2JvdGFyL3Byb3RvY29sL21lc3NhZ2VzL3ZhbGlkYXRpb24vdjE7dmFsaWRhdGlvbnYxogIDVlhYygINVmFsaWRhdGlvblxWMeICGVZhbGlkYXRpb25cVjFcR1BCTWV0YWRhdGHqAg5WYWxpZGF0aW9uOjpWMQ", [file_buf_validate_validate]);
15
15
 
16
16
  /**
17
17
  * @generated from extension: optional bool name_component = 10000;
@@ -181,3 +181,21 @@ export const container_instance_id_component: GenExtension<StringRules, boolean>
181
181
  export const worker_id_component: GenExtension<StringRules, boolean> = /*@__PURE__*/
182
182
  extDesc(file_validation_v1_predefined_string_rules, 27);
183
183
 
184
+ /**
185
+ * @generated from extension: optional bool product_id_component = 100028;
186
+ */
187
+ export const product_id_component: GenExtension<StringRules, boolean> = /*@__PURE__*/
188
+ extDesc(file_validation_v1_predefined_string_rules, 28);
189
+
190
+ /**
191
+ * @generated from extension: optional bool ar_config_binding_id_component = 100029;
192
+ */
193
+ export const ar_config_binding_id_component: GenExtension<StringRules, boolean> = /*@__PURE__*/
194
+ extDesc(file_validation_v1_predefined_string_rules, 29);
195
+
196
+ /**
197
+ * @generated from extension: optional bool ar_config_instance_id_component = 100030;
198
+ */
199
+ export const ar_config_instance_id_component: GenExtension<StringRules, boolean> = /*@__PURE__*/
200
+ extDesc(file_validation_v1_predefined_string_rules, 30);
201
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cobotar/protocol",
3
- "version": "0.19.15",
3
+ "version": "0.19.17",
4
4
  "description": "A collection of protobuf messages for the CobotAR-project",
5
5
  "homepage": "https://github.com/cobotar/protocol#readme",
6
6
  "files": [