@projectqai/proto 0.0.48 → 0.0.49

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/device.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createClient, type Client, ConnectError, Code } from "@connectrpc/connect";
2
2
  import { createTransport } from "@connectrpc/connect/protocol-connect";
3
3
  import type { UniversalClientFn } from "@connectrpc/connect/protocol";
4
- import { create, clone } from "@bufbuild/protobuf";
4
+ import { create, clone, type JsonObject, type JsonValue } from "@bufbuild/protobuf";
5
5
  import {
6
6
  WorldService,
7
7
  EntitySchema,
@@ -114,14 +114,14 @@ export function push(client: WorldClient, ...entities: Entity[]) {
114
114
 
115
115
  // Schema → typed config inference
116
116
 
117
- type SchemaProperty = { readonly type: string; readonly default?: unknown; readonly [key: string]: unknown };
117
+ type SchemaProperty = Record<string, JsonValue> & { readonly type: string; readonly default?: JsonValue };
118
118
  type SchemaProperties = Readonly<Record<string, SchemaProperty>>;
119
119
 
120
120
  type InferProperty<P extends SchemaProperty> =
121
121
  P extends { type: "string" } ? string :
122
122
  P extends { type: "boolean" } ? boolean :
123
123
  P extends { type: "number" | "integer" } ? number :
124
- unknown;
124
+ JsonValue;
125
125
 
126
126
  export type InferConfig<S extends SchemaProperties> = {
127
127
  [K in keyof S]?: InferProperty<S[K]>;
@@ -141,13 +141,13 @@ function extractConfig<S extends SchemaProperties>(entity: Entity, schema: S): I
141
141
 
142
142
  export type HealthResult = boolean | Record<number, { label: string; value: number | bigint }>;
143
143
 
144
- export interface AttachOptions<S extends SchemaProperties> {
144
+ export interface AttachOptions<S extends SchemaProperties = Record<string, never>> {
145
145
  id: string;
146
146
  label?: string;
147
147
  controller?: string;
148
148
  device?: { category?: string };
149
149
  icon?: string;
150
- schema: S;
150
+ schema?: S;
151
151
  /** Default config to push on attach so the plugin starts without manual
152
152
  * configuration. Pushed with fresh=0 so it won't overwrite an existing config. */
153
153
  config?: InferConfig<S>;
@@ -182,11 +182,12 @@ function sleep(ms: number, signal: AbortSignal): Promise<void> {
182
182
  * `false` to skip the heartbeat (device expires via TTL), or a metrics map
183
183
  * to push metrics alongside the heartbeat.
184
184
  */
185
- export async function attach<S extends SchemaProperties>(opts: AttachOptions<S>) {
185
+ export async function attach<S extends SchemaProperties = Record<string, never>>(opts: AttachOptions<S>) {
186
186
  const client = connect();
187
187
  const entityID = opts.id;
188
188
  const interval = opts.interval ?? DEFAULT_INTERVAL;
189
189
  const health = opts.health ?? (() => true);
190
+ const schema = (opts.schema ?? {}) as S;
190
191
 
191
192
  const entity = create(EntitySchema, {
192
193
  id: entityID,
@@ -195,7 +196,7 @@ export async function attach<S extends SchemaProperties>(opts: AttachOptions<S>)
195
196
  ...(opts.device && { device: create(DeviceComponentSchema, opts.device) }),
196
197
  ...(opts.icon && { interactivity: create(InteractivityComponentSchema, { icon: opts.icon }) }),
197
198
  configurable: create(ConfigurableComponentSchema, {
198
- schema: { type: "object", properties: opts.schema as Record<string, unknown> },
199
+ schema: { type: "object", properties: schema } as JsonObject,
199
200
  }),
200
201
  });
201
202
 
@@ -208,7 +209,7 @@ export async function attach<S extends SchemaProperties>(opts: AttachOptions<S>)
208
209
  await push(client, create(EntitySchema, {
209
210
  id: entityID,
210
211
  config: create(ConfigurationComponentSchema, {
211
- value: opts.config as Record<string, unknown>,
212
+ value: opts.config as JsonObject,
212
213
  }),
213
214
  lifetime: create(LifetimeSchema, {
214
215
  fresh: create(TimestampSchema, { seconds: 0n }),
@@ -226,9 +227,11 @@ export async function attach<S extends SchemaProperties>(opts: AttachOptions<S>)
226
227
 
227
228
  const pushHeartbeat = (result?: Record<number, { label: string; value: number | bigint }>) => {
228
229
  const state = initialized ? DeviceState.DeviceStateActive : DeviceState.DeviceStatePending;
230
+ const device = entity.device ? clone(DeviceComponentSchema, entity.device) : create(DeviceComponentSchema);
231
+ device.state = state;
229
232
  const e = create(EntitySchema, {
230
233
  id: entityID,
231
- device: create(DeviceComponentSchema, { ...entity.device, state }),
234
+ device,
232
235
  lifetime: create(LifetimeSchema, {
233
236
  until: create(TimestampSchema, { seconds: BigInt(Math.floor((Date.now() + interval + 1_000) / 1000)) }),
234
237
  }),
@@ -238,7 +241,7 @@ export async function attach<S extends SchemaProperties>(opts: AttachOptions<S>)
238
241
  metrics: Object.entries(result).map(([idStr, { label, value }]) =>
239
242
  typeof value === "bigint"
240
243
  ? create(MetricSchema, { id: Number(idStr), label, kind: MetricKind.MetricKindCount, unit: MetricUnit.MetricUnitCount, val: { case: "uint64", value } })
241
- : create(MetricSchema, { id: Number(idStr), label, kind: MetricKind.MetricKindGauge, unit: MetricUnit.MetricUnitNone, val: { case: "float", value } }),
244
+ : create(MetricSchema, { id: Number(idStr), label, kind: MetricKind.MetricKindUnspecified, unit: MetricUnit.MetricUnitUnspecified, val: { case: "float", value } }),
242
245
  ),
243
246
  });
244
247
  }
@@ -296,7 +299,7 @@ export async function attach<S extends SchemaProperties>(opts: AttachOptions<S>)
296
299
  await pushState(e, ConfigurableState.ConfigurableStateStarting);
297
300
 
298
301
  try {
299
- if (opts.init) await opts.init(client, extractConfig(e, opts.schema), childSignal);
302
+ if (opts.init) await opts.init(client, extractConfig(e, schema), childSignal);
300
303
  } catch (err) {
301
304
  if (childSignal.aborted || isCanceled(err)) return;
302
305
  console.error(`init failed entity=${entityID}`, err);
@@ -309,7 +312,7 @@ export async function attach<S extends SchemaProperties>(opts: AttachOptions<S>)
309
312
  await pushState(e, ConfigurableState.ConfigurableStateActive);
310
313
 
311
314
  try {
312
- await opts.run(client, extractConfig(e, opts.schema), childSignal);
315
+ await opts.run(client, extractConfig(e, schema), childSignal);
313
316
  } catch (err) {
314
317
  if (childSignal.aborted || isCanceled(err)) return;
315
318
  console.error(`error, restarting entity=${entityID}`, err);
@@ -11,6 +11,75 @@ import type { Timestamp } from "@bufbuild/protobuf/wkt";
11
11
  */
12
12
  export declare const file_metrics: GenFile;
13
13
 
14
+ /**
15
+ * @generated from message world.MetricRange
16
+ */
17
+ export declare type MetricRange = Message<"world.MetricRange"> & {
18
+ /**
19
+ * @generated from oneof world.MetricRange.min
20
+ */
21
+ min: {
22
+ /**
23
+ * @generated from field: double min_double = 1;
24
+ */
25
+ value: number;
26
+ case: "minDouble";
27
+ } | {
28
+ /**
29
+ * @generated from field: float min_float = 2;
30
+ */
31
+ value: number;
32
+ case: "minFloat";
33
+ } | {
34
+ /**
35
+ * @generated from field: sint64 min_sint64 = 3;
36
+ */
37
+ value: bigint;
38
+ case: "minSint64";
39
+ } | {
40
+ /**
41
+ * @generated from field: uint64 min_uint64 = 4;
42
+ */
43
+ value: bigint;
44
+ case: "minUint64";
45
+ } | { case: undefined; value?: undefined };
46
+
47
+ /**
48
+ * @generated from oneof world.MetricRange.max
49
+ */
50
+ max: {
51
+ /**
52
+ * @generated from field: double max_double = 10;
53
+ */
54
+ value: number;
55
+ case: "maxDouble";
56
+ } | {
57
+ /**
58
+ * @generated from field: float max_float = 11;
59
+ */
60
+ value: number;
61
+ case: "maxFloat";
62
+ } | {
63
+ /**
64
+ * @generated from field: sint64 max_sint64 = 12;
65
+ */
66
+ value: bigint;
67
+ case: "maxSint64";
68
+ } | {
69
+ /**
70
+ * @generated from field: uint64 max_uint64 = 13;
71
+ */
72
+ value: bigint;
73
+ case: "maxUint64";
74
+ } | { case: undefined; value?: undefined };
75
+ };
76
+
77
+ /**
78
+ * Describes the message world.MetricRange.
79
+ * Use `create(MetricRangeSchema)` to create a new message.
80
+ */
81
+ export declare const MetricRangeSchema: GenMessage<MetricRange>;
82
+
14
83
  /**
15
84
  * @generated from message world.Metric
16
85
  */
@@ -44,6 +113,16 @@ export declare type Metric = Message<"world.Metric"> & {
44
113
  */
45
114
  measuredAt?: Timestamp;
46
115
 
116
+ /**
117
+ * @generated from field: optional world.MetricRange range = 6;
118
+ */
119
+ range?: MetricRange;
120
+
121
+ /**
122
+ * @generated from field: optional world.SensorClip clipping = 7;
123
+ */
124
+ clipping?: SensorClip;
125
+
47
126
  /**
48
127
  * @generated from oneof world.Metric.val
49
128
  */
@@ -861,6 +940,35 @@ export enum MetricUnit {
861
940
  */
862
941
  export declare const MetricUnitSchema: GenEnum<MetricUnit>;
863
942
 
943
+ /**
944
+ * @generated from enum world.SensorClip
945
+ */
946
+ export enum SensorClip {
947
+ /**
948
+ * @generated from enum value: SensorClipNone = 0;
949
+ */
950
+ SensorClipNone = 0,
951
+
952
+ /**
953
+ * actual value may be higher than reported due to sensor range exceeded
954
+ *
955
+ * @generated from enum value: SensorClipHigh = 1;
956
+ */
957
+ SensorClipHigh = 1,
958
+
959
+ /**
960
+ * actual value may be lower than reported due to sensor range exceeded
961
+ *
962
+ * @generated from enum value: SensorClipLow = 2;
963
+ */
964
+ SensorClipLow = 2,
965
+ }
966
+
967
+ /**
968
+ * Describes the enum world.SensorClip.
969
+ */
970
+ export declare const SensorClipSchema: GenEnum<SensorClip>;
971
+
864
972
  /**
865
973
  * @generated from enum world.AlertLevel
866
974
  */
@@ -9,21 +9,28 @@ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
9
  * Describes the file metrics.proto.
10
10
  */
11
11
  export const file_metrics = /*@__PURE__*/
12
- fileDesc("Cg1tZXRyaWNzLnByb3RvEgV3b3JsZCLZAgoGTWV0cmljEh8KBHVuaXQYASABKA4yES53b3JsZC5NZXRyaWNVbml0Eg8KAmlkGAIgASgNSAGIAQESJAoEa2luZBgDIAEoDjIRLndvcmxkLk1ldHJpY0tpbmRIAogBARISCgVsYWJlbBgEIAEoCUgDiAEBEjQKC21lYXN1cmVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEhAKBmRvdWJsZRgKIAEoAUgAEg8KBWZsb2F0GAsgASgCSAASEAoGc2ludDY0GAwgASgSSAASEAoGdWludDY0GA0gASgESAASKAoIYWxlcnRpbmcYFCABKA4yES53b3JsZC5BbGVydExldmVsSAWIAQFCBQoDdmFsQgUKA19pZEIHCgVfa2luZEIICgZfbGFiZWxCDgoMX21lYXN1cmVkX2F0QgsKCV9hbGVydGluZyIxCg9NZXRyaWNDb21wb25lbnQSHgoHbWV0cmljcxgBIAMoCzINLndvcmxkLk1ldHJpYyrwCAoKTWV0cmljS2luZBIZChVNZXRyaWNLaW5kVW5zcGVjaWZpZWQQABIZChVNZXRyaWNLaW5kVGVtcGVyYXR1cmUQARIWChJNZXRyaWNLaW5kUHJlc3N1cmUQAhIWChJNZXRyaWNLaW5kSHVtaWRpdHkQAxIZChVNZXRyaWNLaW5kSWxsdW1pbmFuY2UQBBIYChRNZXRyaWNLaW5kU291bmRMZXZlbBAFEhcKE01ldHJpY0tpbmRXaW5kU3BlZWQQBhIbChdNZXRyaWNLaW5kV2luZERpcmVjdGlvbhAHEhsKF01ldHJpY0tpbmRQcmVjaXBpdGF0aW9uEAgSGAoUTWV0cmljS2luZElycmFkaWFuY2UQCRIVChFNZXRyaWNLaW5kVm9sdGFnZRAUEhUKEU1ldHJpY0tpbmRDdXJyZW50EBUSEwoPTWV0cmljS2luZFBvd2VyEBYSFAoQTWV0cmljS2luZEVuZXJneRAXEhcKE01ldHJpY0tpbmRGcmVxdWVuY3kQGBIYChRNZXRyaWNLaW5kUmVzaXN0YW5jZRAZEhYKEk1ldHJpY0tpbmRQcm9ncmVzcxAoEhgKFE1ldHJpY0tpbmRQZXJjZW50YWdlECkSFgoSTWV0cmljS2luZERpc3RhbmNlEDwSEwoPTWV0cmljS2luZFNwZWVkED0SGgoWTWV0cmljS2luZEFjY2VsZXJhdGlvbhA+EhMKD01ldHJpY0tpbmREZXB0aBA/EhYKEk1ldHJpY0tpbmREYXRhUmF0ZRBQEhUKEU1ldHJpY0tpbmRMYXRlbmN5EFESFgoSTWV0cmljS2luZERhdGFTaXplEFISEQoNTWV0cmljS2luZENvMhBkEhIKDk1ldHJpY0tpbmRQbTI1EGUSEgoOTWV0cmljS2luZFBtMTAQZhIRCg1NZXRyaWNLaW5kQXFpEGcSEAoMTWV0cmljS2luZFBoEGgSEwoPTWV0cmljS2luZFJhZG9uEGkSFAoQTWV0cmljS2luZE94eWdlbhBqEh4KGU1ldHJpY0tpbmRSYWRpYXRpb25IYXphcmQQggESHQoYTWV0cmljS2luZENoZW1pY2FsSGF6YXJkEIMBEh8KGk1ldHJpY0tpbmRCaW9sb2dpY2FsSGF6YXJkEIQBEhwKF01ldHJpY0tpbmROdWNsZWFySGF6YXJkEIUBEhQKEE1ldHJpY0tpbmRXZWlnaHQQbhIUChBNZXRyaWNLaW5kVm9sdW1lEHASHAoYTWV0cmljS2luZFZvbHVtZUZsb3dSYXRlEHESHAoYTWV0cmljS2luZFNpZ25hbFN0cmVuZ3RoEHMSGAoTTWV0cmljS2luZEhlYXJ0UmF0ZRCMARIfChpNZXRyaWNLaW5kT3h5Z2VuU2F0dXJhdGlvbhCNARIeChlNZXRyaWNLaW5kQm9keVRlbXBlcmF0dXJlEI4BEhYKEk1ldHJpY0tpbmREdXJhdGlvbhB2EhMKD01ldHJpY0tpbmRDb3VudBB4KoUSCgpNZXRyaWNVbml0EhkKFU1ldHJpY1VuaXRVbnNwZWNpZmllZBAAEhUKEU1ldHJpY1VuaXRDZWxzaXVzEAESGAoUTWV0cmljVW5pdEZhaHJlbmhlaXQQAhIUChBNZXRyaWNVbml0S2VsdmluEAMSGQoVTWV0cmljVW5pdEhlY3RvcGFzY2FsEAoSEQoNTWV0cmljVW5pdFBzaRALEhEKDU1ldHJpY1VuaXRCYXIQDBIWChJNZXRyaWNVbml0TWlsbGliYXIQDRISCg5NZXRyaWNVbml0SW5IZxAOEhUKEU1ldHJpY1VuaXRQZXJjZW50EBQSEwoPTWV0cmljVW5pdFJhdGlvEBUSEgoOTWV0cmljVW5pdFZvbHQQHhIXChNNZXRyaWNVbml0TWlsbGl2b2x0EB8SFAoQTWV0cmljVW5pdEFtcGVyZRAgEhkKFU1ldHJpY1VuaXRNaWxsaWFtcGVyZRAhEhIKDk1ldHJpY1VuaXRXYXR0ECISFgoSTWV0cmljVW5pdEtpbG93YXR0ECMSFgoSTWV0cmljVW5pdFdhdHRIb3VyECQSGgoWTWV0cmljVW5pdEtpbG93YXR0SG91chAlEhMKD01ldHJpY1VuaXRIZXJ0ehAmEhcKE01ldHJpY1VuaXRLaWxvaGVydHoQJxIXChNNZXRyaWNVbml0TWVnYWhlcnR6ECgSEQoNTWV0cmljVW5pdE9obRApEhMKD01ldHJpY1VuaXRNZXRlchAyEhcKE01ldHJpY1VuaXRLaWxvbWV0ZXIQMxISCg5NZXRyaWNVbml0Rm9vdBA0EhoKFk1ldHJpY1VuaXROYXV0aWNhbE1pbGUQNRIcChhNZXRyaWNVbml0TWV0ZXJQZXJTZWNvbmQQNhISCg5NZXRyaWNVbml0S25vdBA3Eh4KGk1ldHJpY1VuaXRLaWxvbWV0ZXJQZXJIb3VyEDgSIwofTWV0cmljVW5pdE1ldGVyUGVyU2Vjb25kU3F1YXJlZBA5EhEKDU1ldHJpY1VuaXRMdXgQPBIVChFNZXRyaWNVbml0RGVjaWJlbBBGEhYKEk1ldHJpY1VuaXREZWNpYmVsQRBHEhoKFk1ldHJpY1VuaXRCaXRQZXJTZWNvbmQQUBIeChpNZXRyaWNVbml0S2lsb2JpdFBlclNlY29uZBBREh4KGk1ldHJpY1VuaXRNZWdhYml0UGVyU2Vjb25kEFISEgoOTWV0cmljVW5pdEJ5dGUQVBIWChJNZXRyaWNVbml0S2lsb2J5dGUQVRIWChJNZXRyaWNVbml0TWVnYWJ5dGUQVhIWChJNZXRyaWNVbml0R2lnYWJ5dGUQVxIdChlNZXRyaWNVbml0UGFydHNQZXJNaWxsaW9uEFoSJAogTWV0cmljVW5pdE1pY3JvZ3JhbVBlckN1YmljTWV0ZXIQWxIkCiBNZXRyaWNVbml0QmVjcXVlcmVsUGVyQ3ViaWNNZXRlchBcEhoKFU1ldHJpY1VuaXROYW5vc2lldmVydBCCARIhChxNZXRyaWNVbml0TmFub3NpZXZlcnRQZXJIb3VyEIMBEhsKFk1ldHJpY1VuaXRNaWNyb3NpZXZlcnQQhAESIgodTWV0cmljVW5pdE1pY3Jvc2lldmVydFBlckhvdXIQhQESGwoWTWV0cmljVW5pdE1pbGxpc2lldmVydBCGARIiCh1NZXRyaWNVbml0TWlsbGlzaWV2ZXJ0UGVySG91chCHARIWChFNZXRyaWNVbml0U2lldmVydBCIARIdChhNZXRyaWNVbml0U2lldmVydFBlckhvdXIQiQESFwoSTWV0cmljVW5pdE5hbm9ncmF5EJYBEh4KGU1ldHJpY1VuaXROYW5vZ3JheVBlckhvdXIQlwESGAoTTWV0cmljVW5pdE1pY3JvZ3JheRCYARIfChpNZXRyaWNVbml0TWljcm9ncmF5UGVySG91chCZARIYChNNZXRyaWNVbml0TWlsbGlncmF5EJoBEh8KGk1ldHJpY1VuaXRNaWxsaWdyYXlQZXJIb3VyEJsBEhMKDk1ldHJpY1VuaXRHcmF5EJwBEhoKFU1ldHJpY1VuaXRHcmF5UGVySG91chCdARIYChNNZXRyaWNVbml0Q2VudGlncmF5EJ4BEh4KGU1ldHJpY1VuaXRDb3VudHNQZXJTZWNvbmQQoAESHgoZTWV0cmljVW5pdFBhcnRzUGVyQmlsbGlvbhCKARIlCiBNZXRyaWNVbml0TWlsbGlncmFtUGVyQ3ViaWNNZXRlchCLARImCiFNZXRyaWNVbml0TWljcm9ncmFtUGVyU3F1YXJlTWV0ZXIQjAESEgoNTWV0cmljVW5pdEJpbhCNARIYChRNZXRyaWNVbml0TWlsbGltZXRlchBeEh8KG01ldHJpY1VuaXRNaWxsaW1ldGVyUGVySG91chBfEhQKEE1ldHJpY1VuaXREZWdyZWUQZBIUChBNZXRyaWNVbml0UmFkaWFuEGUSGQoVTWV0cmljVW5pdE1pbGxpc2Vjb25kEFMSFAoQTWV0cmljVW5pdFNlY29uZBBuEhQKEE1ldHJpY1VuaXRNaW51dGUQbxISCg5NZXRyaWNVbml0SG91chBwEhYKEk1ldHJpY1VuaXRLaWxvZ3JhbRBxEhIKDk1ldHJpY1VuaXRHcmFtEHISEwoPTWV0cmljVW5pdFBvdW5kEHMSEwoPTWV0cmljVW5pdExpdGVyEHQSGAoUTWV0cmljVW5pdE1pbGxpbGl0ZXIQdRIYChRNZXRyaWNVbml0Q3ViaWNNZXRlchB2EhQKEE1ldHJpY1VuaXRHYWxsb24QdxIdChhNZXRyaWNVbml0QmVhdHNQZXJNaW51dGUQqgESEwoPTWV0cmljVW5pdENvdW50EHgSHAoYTWV0cmljVW5pdExpdGVyUGVyTWludXRlEHkSHwobTWV0cmljVW5pdEN1YmljTWV0ZXJQZXJIb3VyEHoSHgoaTWV0cmljVW5pdERlY2liZWxNaWxsaXdhdHQQexIgChxNZXRyaWNVbml0V2F0dFBlclNxdWFyZU1ldGVyEHwqZAoKQWxlcnRMZXZlbBISCg5BbGVydExldmVsTm9uZRAAEhUKEUFsZXJ0TGV2ZWxXYXJuaW5nEAESEwoPQWxlcnRMZXZlbEFsYXJtEAISFgoSQWxlcnRMZXZlbENyaXRpY2FsEANCIFoeZ2l0aHViLmNvbS9wcm9qZWN0cWFpL3Byb3RvL2dvYgZwcm90bzM", [file_google_protobuf_timestamp]);
12
+ fileDesc("Cg1tZXRyaWNzLnByb3RvEgV3b3JsZCLJAQoLTWV0cmljUmFuZ2USFAoKbWluX2RvdWJsZRgBIAEoAUgAEhMKCW1pbl9mbG9hdBgCIAEoAkgAEhQKCm1pbl9zaW50NjQYAyABKBJIABIUCgptaW5fdWludDY0GAQgASgESAASFAoKbWF4X2RvdWJsZRgKIAEoAUgBEhMKCW1heF9mbG9hdBgLIAEoAkgBEhQKCm1heF9zaW50NjQYDCABKBJIARIUCgptYXhfdWludDY0GA0gASgESAFCBQoDbWluQgUKA21heCLCAwoGTWV0cmljEh8KBHVuaXQYASABKA4yES53b3JsZC5NZXRyaWNVbml0Eg8KAmlkGAIgASgNSAGIAQESJAoEa2luZBgDIAEoDjIRLndvcmxkLk1ldHJpY0tpbmRIAogBARISCgVsYWJlbBgEIAEoCUgDiAEBEjQKC21lYXN1cmVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEiYKBXJhbmdlGAYgASgLMhIud29ybGQuTWV0cmljUmFuZ2VIBYgBARIoCghjbGlwcGluZxgHIAEoDjIRLndvcmxkLlNlbnNvckNsaXBIBogBARIQCgZkb3VibGUYCiABKAFIABIPCgVmbG9hdBgLIAEoAkgAEhAKBnNpbnQ2NBgMIAEoEkgAEhAKBnVpbnQ2NBgNIAEoBEgAEigKCGFsZXJ0aW5nGBQgASgOMhEud29ybGQuQWxlcnRMZXZlbEgHiAEBQgUKA3ZhbEIFCgNfaWRCBwoFX2tpbmRCCAoGX2xhYmVsQg4KDF9tZWFzdXJlZF9hdEIICgZfcmFuZ2VCCwoJX2NsaXBwaW5nQgsKCV9hbGVydGluZyIxCg9NZXRyaWNDb21wb25lbnQSHgoHbWV0cmljcxgBIAMoCzINLndvcmxkLk1ldHJpYyrwCAoKTWV0cmljS2luZBIZChVNZXRyaWNLaW5kVW5zcGVjaWZpZWQQABIZChVNZXRyaWNLaW5kVGVtcGVyYXR1cmUQARIWChJNZXRyaWNLaW5kUHJlc3N1cmUQAhIWChJNZXRyaWNLaW5kSHVtaWRpdHkQAxIZChVNZXRyaWNLaW5kSWxsdW1pbmFuY2UQBBIYChRNZXRyaWNLaW5kU291bmRMZXZlbBAFEhcKE01ldHJpY0tpbmRXaW5kU3BlZWQQBhIbChdNZXRyaWNLaW5kV2luZERpcmVjdGlvbhAHEhsKF01ldHJpY0tpbmRQcmVjaXBpdGF0aW9uEAgSGAoUTWV0cmljS2luZElycmFkaWFuY2UQCRIVChFNZXRyaWNLaW5kVm9sdGFnZRAUEhUKEU1ldHJpY0tpbmRDdXJyZW50EBUSEwoPTWV0cmljS2luZFBvd2VyEBYSFAoQTWV0cmljS2luZEVuZXJneRAXEhcKE01ldHJpY0tpbmRGcmVxdWVuY3kQGBIYChRNZXRyaWNLaW5kUmVzaXN0YW5jZRAZEhYKEk1ldHJpY0tpbmRQcm9ncmVzcxAoEhgKFE1ldHJpY0tpbmRQZXJjZW50YWdlECkSFgoSTWV0cmljS2luZERpc3RhbmNlEDwSEwoPTWV0cmljS2luZFNwZWVkED0SGgoWTWV0cmljS2luZEFjY2VsZXJhdGlvbhA+EhMKD01ldHJpY0tpbmREZXB0aBA/EhYKEk1ldHJpY0tpbmREYXRhUmF0ZRBQEhUKEU1ldHJpY0tpbmRMYXRlbmN5EFESFgoSTWV0cmljS2luZERhdGFTaXplEFISEQoNTWV0cmljS2luZENvMhBkEhIKDk1ldHJpY0tpbmRQbTI1EGUSEgoOTWV0cmljS2luZFBtMTAQZhIRCg1NZXRyaWNLaW5kQXFpEGcSEAoMTWV0cmljS2luZFBoEGgSEwoPTWV0cmljS2luZFJhZG9uEGkSFAoQTWV0cmljS2luZE94eWdlbhBqEh4KGU1ldHJpY0tpbmRSYWRpYXRpb25IYXphcmQQggESHQoYTWV0cmljS2luZENoZW1pY2FsSGF6YXJkEIMBEh8KGk1ldHJpY0tpbmRCaW9sb2dpY2FsSGF6YXJkEIQBEhwKF01ldHJpY0tpbmROdWNsZWFySGF6YXJkEIUBEhQKEE1ldHJpY0tpbmRXZWlnaHQQbhIUChBNZXRyaWNLaW5kVm9sdW1lEHASHAoYTWV0cmljS2luZFZvbHVtZUZsb3dSYXRlEHESHAoYTWV0cmljS2luZFNpZ25hbFN0cmVuZ3RoEHMSGAoTTWV0cmljS2luZEhlYXJ0UmF0ZRCMARIfChpNZXRyaWNLaW5kT3h5Z2VuU2F0dXJhdGlvbhCNARIeChlNZXRyaWNLaW5kQm9keVRlbXBlcmF0dXJlEI4BEhYKEk1ldHJpY0tpbmREdXJhdGlvbhB2EhMKD01ldHJpY0tpbmRDb3VudBB4KoUSCgpNZXRyaWNVbml0EhkKFU1ldHJpY1VuaXRVbnNwZWNpZmllZBAAEhUKEU1ldHJpY1VuaXRDZWxzaXVzEAESGAoUTWV0cmljVW5pdEZhaHJlbmhlaXQQAhIUChBNZXRyaWNVbml0S2VsdmluEAMSGQoVTWV0cmljVW5pdEhlY3RvcGFzY2FsEAoSEQoNTWV0cmljVW5pdFBzaRALEhEKDU1ldHJpY1VuaXRCYXIQDBIWChJNZXRyaWNVbml0TWlsbGliYXIQDRISCg5NZXRyaWNVbml0SW5IZxAOEhUKEU1ldHJpY1VuaXRQZXJjZW50EBQSEwoPTWV0cmljVW5pdFJhdGlvEBUSEgoOTWV0cmljVW5pdFZvbHQQHhIXChNNZXRyaWNVbml0TWlsbGl2b2x0EB8SFAoQTWV0cmljVW5pdEFtcGVyZRAgEhkKFU1ldHJpY1VuaXRNaWxsaWFtcGVyZRAhEhIKDk1ldHJpY1VuaXRXYXR0ECISFgoSTWV0cmljVW5pdEtpbG93YXR0ECMSFgoSTWV0cmljVW5pdFdhdHRIb3VyECQSGgoWTWV0cmljVW5pdEtpbG93YXR0SG91chAlEhMKD01ldHJpY1VuaXRIZXJ0ehAmEhcKE01ldHJpY1VuaXRLaWxvaGVydHoQJxIXChNNZXRyaWNVbml0TWVnYWhlcnR6ECgSEQoNTWV0cmljVW5pdE9obRApEhMKD01ldHJpY1VuaXRNZXRlchAyEhcKE01ldHJpY1VuaXRLaWxvbWV0ZXIQMxISCg5NZXRyaWNVbml0Rm9vdBA0EhoKFk1ldHJpY1VuaXROYXV0aWNhbE1pbGUQNRIcChhNZXRyaWNVbml0TWV0ZXJQZXJTZWNvbmQQNhISCg5NZXRyaWNVbml0S25vdBA3Eh4KGk1ldHJpY1VuaXRLaWxvbWV0ZXJQZXJIb3VyEDgSIwofTWV0cmljVW5pdE1ldGVyUGVyU2Vjb25kU3F1YXJlZBA5EhEKDU1ldHJpY1VuaXRMdXgQPBIVChFNZXRyaWNVbml0RGVjaWJlbBBGEhYKEk1ldHJpY1VuaXREZWNpYmVsQRBHEhoKFk1ldHJpY1VuaXRCaXRQZXJTZWNvbmQQUBIeChpNZXRyaWNVbml0S2lsb2JpdFBlclNlY29uZBBREh4KGk1ldHJpY1VuaXRNZWdhYml0UGVyU2Vjb25kEFISEgoOTWV0cmljVW5pdEJ5dGUQVBIWChJNZXRyaWNVbml0S2lsb2J5dGUQVRIWChJNZXRyaWNVbml0TWVnYWJ5dGUQVhIWChJNZXRyaWNVbml0R2lnYWJ5dGUQVxIdChlNZXRyaWNVbml0UGFydHNQZXJNaWxsaW9uEFoSJAogTWV0cmljVW5pdE1pY3JvZ3JhbVBlckN1YmljTWV0ZXIQWxIkCiBNZXRyaWNVbml0QmVjcXVlcmVsUGVyQ3ViaWNNZXRlchBcEhoKFU1ldHJpY1VuaXROYW5vc2lldmVydBCCARIhChxNZXRyaWNVbml0TmFub3NpZXZlcnRQZXJIb3VyEIMBEhsKFk1ldHJpY1VuaXRNaWNyb3NpZXZlcnQQhAESIgodTWV0cmljVW5pdE1pY3Jvc2lldmVydFBlckhvdXIQhQESGwoWTWV0cmljVW5pdE1pbGxpc2lldmVydBCGARIiCh1NZXRyaWNVbml0TWlsbGlzaWV2ZXJ0UGVySG91chCHARIWChFNZXRyaWNVbml0U2lldmVydBCIARIdChhNZXRyaWNVbml0U2lldmVydFBlckhvdXIQiQESFwoSTWV0cmljVW5pdE5hbm9ncmF5EJYBEh4KGU1ldHJpY1VuaXROYW5vZ3JheVBlckhvdXIQlwESGAoTTWV0cmljVW5pdE1pY3JvZ3JheRCYARIfChpNZXRyaWNVbml0TWljcm9ncmF5UGVySG91chCZARIYChNNZXRyaWNVbml0TWlsbGlncmF5EJoBEh8KGk1ldHJpY1VuaXRNaWxsaWdyYXlQZXJIb3VyEJsBEhMKDk1ldHJpY1VuaXRHcmF5EJwBEhoKFU1ldHJpY1VuaXRHcmF5UGVySG91chCdARIYChNNZXRyaWNVbml0Q2VudGlncmF5EJ4BEh4KGU1ldHJpY1VuaXRDb3VudHNQZXJTZWNvbmQQoAESHgoZTWV0cmljVW5pdFBhcnRzUGVyQmlsbGlvbhCKARIlCiBNZXRyaWNVbml0TWlsbGlncmFtUGVyQ3ViaWNNZXRlchCLARImCiFNZXRyaWNVbml0TWljcm9ncmFtUGVyU3F1YXJlTWV0ZXIQjAESEgoNTWV0cmljVW5pdEJpbhCNARIYChRNZXRyaWNVbml0TWlsbGltZXRlchBeEh8KG01ldHJpY1VuaXRNaWxsaW1ldGVyUGVySG91chBfEhQKEE1ldHJpY1VuaXREZWdyZWUQZBIUChBNZXRyaWNVbml0UmFkaWFuEGUSGQoVTWV0cmljVW5pdE1pbGxpc2Vjb25kEFMSFAoQTWV0cmljVW5pdFNlY29uZBBuEhQKEE1ldHJpY1VuaXRNaW51dGUQbxISCg5NZXRyaWNVbml0SG91chBwEhYKEk1ldHJpY1VuaXRLaWxvZ3JhbRBxEhIKDk1ldHJpY1VuaXRHcmFtEHISEwoPTWV0cmljVW5pdFBvdW5kEHMSEwoPTWV0cmljVW5pdExpdGVyEHQSGAoUTWV0cmljVW5pdE1pbGxpbGl0ZXIQdRIYChRNZXRyaWNVbml0Q3ViaWNNZXRlchB2EhQKEE1ldHJpY1VuaXRHYWxsb24QdxIdChhNZXRyaWNVbml0QmVhdHNQZXJNaW51dGUQqgESEwoPTWV0cmljVW5pdENvdW50EHgSHAoYTWV0cmljVW5pdExpdGVyUGVyTWludXRlEHkSHwobTWV0cmljVW5pdEN1YmljTWV0ZXJQZXJIb3VyEHoSHgoaTWV0cmljVW5pdERlY2liZWxNaWxsaXdhdHQQexIgChxNZXRyaWNVbml0V2F0dFBlclNxdWFyZU1ldGVyEHwqRwoKU2Vuc29yQ2xpcBISCg5TZW5zb3JDbGlwTm9uZRAAEhIKDlNlbnNvckNsaXBIaWdoEAESEQoNU2Vuc29yQ2xpcExvdxACKmQKCkFsZXJ0TGV2ZWwSEgoOQWxlcnRMZXZlbE5vbmUQABIVChFBbGVydExldmVsV2FybmluZxABEhMKD0FsZXJ0TGV2ZWxBbGFybRACEhYKEkFsZXJ0TGV2ZWxDcml0aWNhbBADQiBaHmdpdGh1Yi5jb20vcHJvamVjdHFhaS9wcm90by9nb2IGcHJvdG8z", [file_google_protobuf_timestamp]);
13
+
14
+ /**
15
+ * Describes the message world.MetricRange.
16
+ * Use `create(MetricRangeSchema)` to create a new message.
17
+ */
18
+ export const MetricRangeSchema = /*@__PURE__*/
19
+ messageDesc(file_metrics, 0);
13
20
 
14
21
  /**
15
22
  * Describes the message world.Metric.
16
23
  * Use `create(MetricSchema)` to create a new message.
17
24
  */
18
25
  export const MetricSchema = /*@__PURE__*/
19
- messageDesc(file_metrics, 0);
26
+ messageDesc(file_metrics, 1);
20
27
 
21
28
  /**
22
29
  * Describes the message world.MetricComponent.
23
30
  * Use `create(MetricComponentSchema)` to create a new message.
24
31
  */
25
32
  export const MetricComponentSchema = /*@__PURE__*/
26
- messageDesc(file_metrics, 1);
33
+ messageDesc(file_metrics, 2);
27
34
 
28
35
  /**
29
36
  * Describes the enum world.MetricKind.
@@ -49,11 +56,23 @@ export const MetricUnitSchema = /*@__PURE__*/
49
56
  export const MetricUnit = /*@__PURE__*/
50
57
  tsEnum(MetricUnitSchema);
51
58
 
59
+ /**
60
+ * Describes the enum world.SensorClip.
61
+ */
62
+ export const SensorClipSchema = /*@__PURE__*/
63
+ enumDesc(file_metrics, 2);
64
+
65
+ /**
66
+ * @generated from enum world.SensorClip
67
+ */
68
+ export const SensorClip = /*@__PURE__*/
69
+ tsEnum(SensorClipSchema);
70
+
52
71
  /**
53
72
  * Describes the enum world.AlertLevel.
54
73
  */
55
74
  export const AlertLevelSchema = /*@__PURE__*/
56
- enumDesc(file_metrics, 2);
75
+ enumDesc(file_metrics, 3);
57
76
 
58
77
  /**
59
78
  * @generated from enum world.AlertLevel
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectqai/proto",
3
- "version": "0.0.48",
3
+ "version": "0.0.49",
4
4
  "author": "projectq-release-bot",
5
5
  "type": "module",
6
6
  "exports": {