@camstack/addon-post-analysis 1.2.628 → 1.2.630

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.
Files changed (15) hide show
  1. package/dist/{clip-model-registry-CK0QHBLo.js → clip-model-registry-DB0TSd14.js} +239 -93
  2. package/dist/{clip-model-registry-CXp8hOtz.mjs → clip-model-registry-wZ4Nt5jo.mjs} +224 -90
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BSMQI14W.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BjktQPk_.mjs} +2 -2
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BxPKSyZo.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DdbV-R1z.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-DZur54eI.mjs → hostInit-BMCiXaWO.mjs} +2 -2
  10. package/dist/pipeline-analytics/index.js +111833 -108469
  11. package/dist/pipeline-analytics/index.mjs +111654 -108290
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CC5fsXdm.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DdDfkgWU.mjs +0 -26
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  }) : target, mod));
31
31
  //#endregion
32
32
  let node_crypto = require("node:crypto");
33
- //#region ../types/dist/event-category-fDPduoeC.mjs
33
+ //#region ../types/dist/event-category-Ceif8n-v.mjs
34
34
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
35
35
  EventCategory["SystemBoot"] = "system.boot";
36
36
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -502,6 +502,10 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
502
502
  * on the device detail page.
503
503
  */
504
504
  EventCategory["DoorbellOnPressed"] = "doorbell.onPressed";
505
+ /** Mirrors `runningStateCapability.events.onStarted`. */
506
+ EventCategory["RunningStarted"] = "running.started";
507
+ /** Mirrors `runningStateCapability.events.onFinished`. */
508
+ EventCategory["RunningFinished"] = "running.finished";
505
509
  /**
506
510
  * Cap event fired by every device that registers the `event-emitter`
507
511
  * capability. Mirrors `eventEmitterCapability.events.onEvent`. Carries
@@ -5659,7 +5663,7 @@ var ZodIssueCode = {
5659
5663
  var ZodFirstPartyTypeKind;
5660
5664
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5661
5665
  //#endregion
5662
- //#region ../types/dist/sleep-CHIEEJkY.mjs
5666
+ //#region ../types/dist/sleep-CYfIZzGv.mjs
5663
5667
  /**
5664
5668
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5665
5669
  * window to float samples (D455).
@@ -5998,7 +6002,7 @@ Object.fromEntries([
5998
6002
  * `hydrateSchema` to skip the `value` injection for structural-only fields.
5999
6003
  */
6000
6004
  function isValuelessField(field) {
6001
- return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button";
6005
+ return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button" || field.type === "account-sign-in" || field.type === "secret-presence";
6002
6006
  }
6003
6007
  function hydrateSchema(schema, values, options = {}) {
6004
6008
  return {
@@ -8916,7 +8920,7 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
8916
8920
  * can answer "may a rule actuate this?" without importing the schema barrel
8917
8921
  * (~144MB RSS per runner, D28).
8918
8922
  *
8919
- * Coverage: 90 device-scoped capabilities.
8923
+ * Coverage: 91 device-scoped capabilities.
8920
8924
  */
8921
8925
  var DEVICE_SCOPED_CAPS = new Set([
8922
8926
  "accessories",
@@ -8988,6 +8992,7 @@ var DEVICE_SCOPED_CAPS = new Set([
8988
8992
  "recording",
8989
8993
  "recording-onboard",
8990
8994
  "recording-signal",
8995
+ "running-state",
8991
8996
  "scene-monitor",
8992
8997
  "script-runner",
8993
8998
  "smoke",
@@ -9407,7 +9412,7 @@ function errMsg(err) {
9407
9412
  return String(err);
9408
9413
  }
9409
9414
  //#endregion
9410
- //#region ../types/dist/composition-CB6PMT9p.mjs
9415
+ //#region ../types/dist/composition-xz-ud5EQ.mjs
9411
9416
  /**
9412
9417
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
9413
9418
  * canonical form sorts object keys alphabetically at every depth so two
@@ -9868,6 +9873,20 @@ var table = {
9868
9873
  apply: () => {
9869
9874
  throw new ExpressionEvalError("count: stateful evaluation context is required");
9870
9875
  }
9876
+ },
9877
+ dwell: {
9878
+ minArgs: 3,
9879
+ maxArgs: 3,
9880
+ apply: () => {
9881
+ throw new ExpressionEvalError("dwell: stateful evaluation context is required");
9882
+ }
9883
+ },
9884
+ latchedAt: {
9885
+ minArgs: 1,
9886
+ maxArgs: 1,
9887
+ apply: () => {
9888
+ throw new ExpressionEvalError("latchedAt: stateful evaluation context is required");
9889
+ }
9871
9890
  }
9872
9891
  };
9873
9892
  Object.freeze(Object.assign(Object.create(null), table));
@@ -17600,7 +17619,15 @@ Object.freeze({
17600
17619
  kind: "fixed",
17601
17620
  result: ["number", "null"]
17602
17621
  },
17603
- count: NUMBER
17622
+ count: NUMBER,
17623
+ dwell: {
17624
+ kind: "fixed",
17625
+ result: ["boolean", "null"]
17626
+ },
17627
+ latchedAt: {
17628
+ kind: "fixed",
17629
+ result: ["number", "null"]
17630
+ }
17604
17631
  });
17605
17632
  `${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
17606
17633
  /**
@@ -44184,9 +44211,6 @@ var NcSystemEventKindSchema = _enum([
44184
44211
  "device-battery-normal",
44185
44212
  "device-consumable-low",
44186
44213
  "device-consumable-normal",
44187
- "device-tank-low",
44188
- "device-tank-full",
44189
- "device-tank-normal",
44190
44214
  "stream-online",
44191
44215
  "stream-offline",
44192
44216
  "node-online",
@@ -44233,13 +44257,14 @@ var NcSystemEventKindSchema = _enum([
44233
44257
  "camera-enabled"
44234
44258
  ]);
44235
44259
  /** The legacy tail of {@link NcSystemEventKindSchema} — see its docblock. */
44236
- var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
44260
+ var NC_LEGACY_SYSTEM_EVENT_KINDS = [
44237
44261
  "camera-online",
44238
44262
  "camera-offline",
44239
44263
  "camera-disabled",
44240
44264
  "camera-enabled"
44241
- ]);
44242
- NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
44265
+ ];
44266
+ var NC_LEGACY_SYSTEM_EVENT_KIND_SET = new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
44267
+ NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KIND_SET.has(kind));
44243
44268
  /**
44244
44269
  * The panel's transitions, as ONE list.
44245
44270
  *
@@ -44269,12 +44294,6 @@ var NC_ALARM_SYSTEM_EVENT_KINDS = [
44269
44294
  * and both editors read it.
44270
44295
  */
44271
44296
  var NC_CONSUMABLE_SYSTEM_EVENT_KINDS = ["device-consumable-low", "device-consumable-normal"];
44272
- /** A vacuum's tank alerts (D642) — raised on the provider's own verdict. */
44273
- var NC_TANK_SYSTEM_EVENT_KINDS = [
44274
- "device-tank-low",
44275
- "device-tank-full",
44276
- "device-tank-normal"
44277
- ];
44278
44297
  /**
44279
44298
  * The consumable threshold a rule that does not state one judges at (D642).
44280
44299
  * The operator's number ("default 15 %, configurable on the rule"), and the
@@ -45450,18 +45469,18 @@ var NcRuleSchema = NcRuleInputSchema.extend({
45450
45469
  * `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
45451
45470
  * job is not an open state, and the alarm stays instant.
45452
45471
  */
45453
- var NcStateSummarySectionIdSchema = _enum([
45472
+ var NC_STATE_SUMMARY_SECTION_IDS = [
45454
45473
  "device-state",
45455
45474
  "streams",
45456
45475
  "battery",
45457
45476
  "consumables",
45458
- "tanks",
45459
45477
  "detection-blind",
45460
45478
  "nodes",
45461
45479
  "addons",
45462
45480
  "addon-updates",
45463
45481
  "updates"
45464
- ]);
45482
+ ];
45483
+ var NcStateSummarySectionIdSchema = _enum(NC_STATE_SUMMARY_SECTION_IDS);
45465
45484
  /** One section of a previewed state summary. `unavailable` = its state could not be read. */
45466
45485
  var NcStateSummaryPreviewSectionSchema = object({
45467
45486
  id: NcStateSummarySectionIdSchema,
@@ -45836,18 +45855,6 @@ var NC_CONDITION_CATALOG = [
45836
45855
  value: "device-consumable-normal",
45837
45856
  label: "Consumable replaced"
45838
45857
  },
45839
- {
45840
- value: "device-tank-low",
45841
- label: "Tank low (water, detergent)"
45842
- },
45843
- {
45844
- value: "device-tank-full",
45845
- label: "Tank full (dirty water, dust)"
45846
- },
45847
- {
45848
- value: "device-tank-normal",
45849
- label: "Tank back to normal"
45850
- },
45851
45858
  {
45852
45859
  value: "export-completed",
45853
45860
  label: "Export completed"
@@ -47595,6 +47602,18 @@ Object.freeze({
47595
47602
  reason: "camera sensor mappings not loaded"
47596
47603
  });
47597
47604
  /**
47605
+ * What the vision model must answer before a package event is emitted
47606
+ * when a packages rule has "Confirm with the LLM" on.
47607
+ *
47608
+ * `package` is the verdict. `confidence` is 0..1. `reason` is the model's
47609
+ * one-line explanation, stored on the event so a drop is not silent.
47610
+ */
47611
+ var PackageLlmVerdictSchema = object({
47612
+ package: boolean(),
47613
+ confidence: number().min(0).max(1),
47614
+ reason: string().min(1)
47615
+ });
47616
+ /**
47598
47617
  * A model choice has a SCOPE, and a scope change has a workflow.
47599
47618
  *
47600
47619
  * ## The two scopes
@@ -48603,6 +48622,21 @@ var ObjectEventSchema = object({
48603
48622
  * pick-up written before D684 — UNKNOWN, never 0 and never `timestamp`.
48604
48623
  */
48605
48624
  observedAt: number().optional(),
48625
+ /**
48626
+ * The delivery was emitted without a vision-model yes (D931).
48627
+ *
48628
+ * Set only when the packages rule asked for an LLM confirm and the model
48629
+ * was unreachable, timed out, or answered something that did not parse.
48630
+ * A notification reads it so it can say "possible" instead of a definite
48631
+ * delivery. Absent on every other row, and on a confirm that said yes.
48632
+ */
48633
+ packagePossible: boolean().optional(),
48634
+ /**
48635
+ * The vision model's verdict, when a packages rule asked for one and the
48636
+ * model answered the schema (D931). A "no" never becomes a row — the
48637
+ * detector drops it and logs the reason. Present on a yes.
48638
+ */
48639
+ packageLlmVerdict: PackageLlmVerdictSchema.optional(),
48606
48640
  /** The parent track's key-event importance [0,1], propagated to every object
48607
48641
  * event of the track (so an event row can be sorted by importance without a
48608
48642
  * track join). Absent on legacy rows / before the track was scored. */
@@ -51608,11 +51642,18 @@ var KeptReasonSchema = _enum(["custom-pin"]);
51608
51642
  * Where a choice's latency came from (D791): this node's own benchmark
51609
51643
  * result, or the hardware-class table. Measured on the node beats the table.
51610
51644
  */
51611
- var LatencySourceSchema = discriminatedUnion("kind", [object({ kind: literal("table") }), object({
51612
- kind: literal("node-benchmark"),
51613
- resultId: string(),
51614
- measuredAtMs: number()
51615
- })]);
51645
+ var LatencySourceSchema = discriminatedUnion("kind", [
51646
+ object({ kind: literal("table") }),
51647
+ object({
51648
+ kind: literal("node-benchmark"),
51649
+ resultId: string(),
51650
+ measuredAtMs: number()
51651
+ }),
51652
+ object({
51653
+ kind: literal("estimated"),
51654
+ estimatedFrom: HardwareClassIdSchema
51655
+ })
51656
+ ]);
51616
51657
  var DeviceModelChoiceSchema = object({
51617
51658
  modelId: string(),
51618
51659
  p50Ms: number(),
@@ -51620,6 +51661,11 @@ var DeviceModelChoiceSchema = object({
51620
51661
  measured: boolean(),
51621
51662
  /** Absent on a plan from before D791 — read as the table. */
51622
51663
  source: LatencySourceSchema.optional(),
51664
+ /**
51665
+ * The measured class this latency was scaled from (D930). Absent when the
51666
+ * cell is the table or a node benchmark.
51667
+ */
51668
+ estimatedFrom: HardwareClassIdSchema.optional(),
51623
51669
  /** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
51624
51670
  capacitySessions: number(),
51625
51671
  personRecall: number()
@@ -58848,6 +58894,20 @@ _enum([
58848
58894
  "empty",
58849
58895
  "full"
58850
58896
  ]);
58897
+ /** The kind of an item, with the documented default for an absent one. */
58898
+ function consumableKindOf(item) {
58899
+ return item.kind ?? "wear";
58900
+ }
58901
+ /** The kind's default form: wear → part, waste → bin, supply → product. */
58902
+ var FORM_OF_KIND = {
58903
+ wear: "part",
58904
+ waste: "bin",
58905
+ supply: "product"
58906
+ };
58907
+ /** The form of an item: its own when the provider names one, else its kind's default. */
58908
+ function consumableFormOf(item) {
58909
+ return item.form ?? FORM_OF_KIND[consumableKindOf(item)];
58910
+ }
58851
58911
  /** Units a remaining-life counter is reported in. Closed: the panel renders
58852
58912
  * each. */
58853
58913
  var ConsumableRemainingUnitSchema = _enum([
@@ -64206,6 +64266,30 @@ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly(
64206
64266
  })
64207
64267
  }
64208
64268
  };
64269
+ var CORE_ULTRA_265K_IGPU_CLOCK_MHZ = 2e3;
64270
+ var positiveOrNull = number().nullable().transform((value) => value !== null && Number.isFinite(value) && value > 0 ? value : null);
64271
+ var textOrNull = string().nullable().transform((value) => value !== null && value.trim() !== "" ? value : null);
64272
+ var PrecisionGopsSchema = object({
64273
+ int8: positiveOrNull,
64274
+ fp16: positiveOrNull
64275
+ });
64276
+ /** What one accelerator device reported. Every failed query is null. */
64277
+ var AcceleratorComputeSchema = object({
64278
+ deviceKey: string(),
64279
+ fullDeviceName: textOrNull,
64280
+ executionUnits: positiveOrNull,
64281
+ clockMHz: positiveOrNull,
64282
+ gops: PrecisionGopsSchema.nullable(),
64283
+ architecture: textOrNull,
64284
+ npuName: textOrNull,
64285
+ tops: positiveOrNull,
64286
+ vendor: textOrNull,
64287
+ webgpuArchitecture: textOrNull,
64288
+ webgpuDevice: textOrNull,
64289
+ computeUnits: positiveOrNull
64290
+ });
64291
+ object({ accelerators: array(AcceleratorComputeSchema).nullable() });
64292
+ 64 * CORE_ULTRA_265K_IGPU_CLOCK_MHZ;
64209
64293
  var ModelFormatSchema = _enum(MODEL_FORMATS);
64210
64294
  var HwAccelBackendInputSchema = _enum([
64211
64295
  "videotoolbox",
@@ -64319,7 +64403,12 @@ var HardwareInfoSchema = object({
64319
64403
  availableRAM_MB: number(),
64320
64404
  gpu: GpuInfoSchema.nullable(),
64321
64405
  npu: NpuInfoSchema.nullable(),
64322
- coral: CoralInfoSchema.nullable().optional()
64406
+ coral: CoralInfoSchema.nullable().optional(),
64407
+ /**
64408
+ * Per-accelerator compute (D930). Omitted by a node that has not probed it.
64409
+ * `null` fields inside an entry are a failed query, never a zero.
64410
+ */
64411
+ accelerators: array(AcceleratorComputeSchema).readonly().optional()
64323
64412
  });
64324
64413
  var PlatformScoreSchema = object({
64325
64414
  runtime: literal("python"),
@@ -65150,6 +65239,41 @@ var ptzAutotrackCapability = {
65150
65239
  */
65151
65240
  history: "none"
65152
65241
  };
65242
+ var RunningStateSourceSchema = _enum(["native", "assigned"]);
65243
+ var RunningStateStatusSchema = object({
65244
+ /** null = unknown — never coerced to false (D393). */
65245
+ running: boolean().nullable(),
65246
+ /** Epoch ms the current boolean began; null while `running` is null. */
65247
+ since: number().nullable(),
65248
+ source: RunningStateSourceSchema,
65249
+ phase: string().nullable(),
65250
+ lastFetchedAt: number()
65251
+ });
65252
+ var RunningFlipEventDataSchema = object({
65253
+ deviceId: number(),
65254
+ since: number().nullable(),
65255
+ phase: string().nullable()
65256
+ });
65257
+ var runningStateCapability = {
65258
+ name: "running-state",
65259
+ scope: "device",
65260
+ deviceNative: true,
65261
+ mode: "singleton",
65262
+ deviceTypes: Object.values(DeviceType),
65263
+ methods: {},
65264
+ events: {
65265
+ onStarted: { data: RunningFlipEventDataSchema },
65266
+ onFinished: { data: RunningFlipEventDataSchema }
65267
+ },
65268
+ status: {
65269
+ schema: RunningStateStatusSchema,
65270
+ kind: "push"
65271
+ },
65272
+ runtimeState: RunningStateStatusSchema,
65273
+ durability: "restored",
65274
+ history: { fields: { running: { kind: "boolean" } } },
65275
+ volatileStateFields: ["lastFetchedAt"]
65276
+ };
65153
65277
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
65154
65278
  kind: "mutation",
65155
65279
  auth: "admin"
@@ -67177,7 +67301,20 @@ var ZoneRuleSchema = object({
67177
67301
  * Defaults to `true` so operators creating a rule via the UI
67178
67302
  * see it active immediately.
67179
67303
  */
67180
- enabled: boolean().default(true)
67304
+ enabled: boolean().default(true),
67305
+ /**
67306
+ * Package stage only. When true, a package candidate may open from a
67307
+ * scene difference in this rule's zone after a person leaves. The
67308
+ * package model, when it boxes something overlapping, is extra evidence
67309
+ * and is not the gate. Absent or false keeps today's model path.
67310
+ */
67311
+ detectBySceneDifference: boolean().optional(),
67312
+ /**
67313
+ * Package stage only. When true, a promoted package is shown to the
67314
+ * `llm` cap before the delivery event is emitted. Absent or false emits
67315
+ * as today. Usable with or without `detectBySceneDifference`.
67316
+ */
67317
+ confirmWithLlm: boolean().optional()
67181
67318
  });
67182
67319
  array(ZoneRuleSchema).readonly();
67183
67320
  /**
@@ -70221,6 +70358,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
70221
70358
  ptzAutotrack: ptzAutotrackCapability,
70222
70359
  recordingOnboard: recordingOnboardCapability,
70223
70360
  recordingSignal: recordingSignalCapability,
70361
+ runningState: runningStateCapability,
70224
70362
  sceneMonitor: sceneMonitorCapability,
70225
70363
  scriptRunner: scriptRunnerCapability,
70226
70364
  smoke: smokeCapability,
@@ -78480,6 +78618,13 @@ Object.freeze({
78480
78618
  access: "create",
78481
78619
  role: "admin"
78482
78620
  },
78621
+ "runningState.getStatus": {
78622
+ capName: "running-state",
78623
+ capScope: "device",
78624
+ addonId: null,
78625
+ access: "view",
78626
+ role: "viewer"
78627
+ },
78483
78628
  "sceneMonitor.captureReference": {
78484
78629
  capName: "scene-monitor",
78485
78630
  capScope: "device",
@@ -83194,6 +83339,32 @@ var APPLIANCE_CAP_VOCABULARY = {
83194
83339
  }],
83195
83340
  events: { onSent: { notOperatorFacing: "a delivery receipt of a send this system made — not a fact about the world" } }
83196
83341
  },
83342
+ "running-state": {
83343
+ scope: "device",
83344
+ noun: t("Running", "In funzione"),
83345
+ state: [{
83346
+ kind: "boolean",
83347
+ field: "running",
83348
+ label: t("Running", "In funzione"),
83349
+ whenTrue: t("When {device} starts", "Quando {device} inizia"),
83350
+ whenFalse: t("When {device} finishes", "Quando {device} finisce"),
83351
+ icon: "play"
83352
+ }],
83353
+ events: {
83354
+ onStarted: {
83355
+ category: EventCategory.RunningStarted,
83356
+ label: t("Started running", "Ha iniziato a funzionare"),
83357
+ phrase: t("When {device} starts running", "Quando {device} inizia a funzionare"),
83358
+ icon: "play"
83359
+ },
83360
+ onFinished: {
83361
+ category: EventCategory.RunningFinished,
83362
+ label: t("Finished", "Ha finito"),
83363
+ phrase: t("When {device} finishes", "Quando {device} finisce"),
83364
+ icon: "square"
83365
+ }
83366
+ }
83367
+ },
83197
83368
  update: {
83198
83369
  scope: "device",
83199
83370
  noun: t("Firmware update", "Aggiornamento firmware"),
@@ -86734,6 +86905,11 @@ Object.freeze({
86734
86905
  form: "single",
86735
86906
  optional: true
86736
86907
  }],
86908
+ "runningState.getStatus": [{
86909
+ name: "deviceId",
86910
+ form: "single",
86911
+ optional: false
86912
+ }],
86737
86913
  "sceneMonitor.captureReference": [{
86738
86914
  name: "deviceId",
86739
86915
  form: "single",
@@ -87450,6 +87626,7 @@ new Set(["devices", "classes"]);
87450
87626
  * narrows, and still fails CLOSED on a subject that cannot produce the identity
87451
87627
  * it tests (a device the mirror cannot name is not evidence of a camera).
87452
87628
  */
87629
+ var LEGACY_KINDS_WITHOUT_FILTERS = new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
87453
87630
  /**
87454
87631
  * Every filter, for the callers that must cover all of them (guards, tests).
87455
87632
  *
@@ -87473,6 +87650,7 @@ var NC_SYSTEM_EVENT_FILTER_KEYS = [
87473
87650
  * ignores it and an editor hides its input. It never means "excluded".
87474
87651
  */
87475
87652
  function systemEventFilterApplies(kind, filter) {
87653
+ if (LEGACY_KINDS_WITHOUT_FILTERS.has(kind)) return false;
87476
87654
  switch (filter) {
87477
87655
  case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind.startsWith("motion-") || kind.startsWith("recording-") || kind === "alarm-triggered";
87478
87656
  case "deviceTypes": return kind.startsWith("device-") || kind === "detection-blind" || kind.startsWith("motion-");
@@ -87514,9 +87692,6 @@ var NC_SYSTEM_EVENT_FAMILY = {
87514
87692
  "device-battery-normal": "device-events",
87515
87693
  "device-consumable-low": "device-events",
87516
87694
  "device-consumable-normal": "device-events",
87517
- "device-tank-low": "device-events",
87518
- "device-tank-full": "device-events",
87519
- "device-tank-normal": "device-events",
87520
87695
  "stream-online": "device-events",
87521
87696
  "stream-offline": "device-events",
87522
87697
  "detection-blind": "device-events",
@@ -87611,16 +87786,6 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
87611
87786
  label: "Consumables",
87612
87787
  kinds: ["device-consumable-low", "device-consumable-normal"]
87613
87788
  },
87614
- {
87615
- id: "tanks",
87616
- family: "device-events",
87617
- label: "Tanks",
87618
- kinds: [
87619
- "device-tank-low",
87620
- "device-tank-full",
87621
- "device-tank-normal"
87622
- ]
87623
- },
87624
87789
  {
87625
87790
  id: "detection-blind",
87626
87791
  family: "device-events",
@@ -89029,11 +89194,6 @@ var RULE_BODY_ONLY = ["body"];
89029
89194
  var RULE_TEXT = ["title", "body"];
89030
89195
  var BATTERY = ["device-battery-low", "device-battery-normal"];
89031
89196
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
89032
- var TANK = [
89033
- "device-tank-low",
89034
- "device-tank-full",
89035
- "device-tank-normal"
89036
- ];
89037
89197
  var ALERT_EPISODE = [
89038
89198
  "alert-critical",
89039
89199
  "alert-error",
@@ -89065,7 +89225,6 @@ var DEVICE_EVENTS = [
89065
89225
  "device-enabled",
89066
89226
  ...BATTERY,
89067
89227
  ...CONSUMABLE,
89068
- ...TANK,
89069
89228
  "stream-online",
89070
89229
  "stream-offline",
89071
89230
  "detection-blind",
@@ -89111,12 +89270,6 @@ var STATE_SUMMARY_SECTION_VARS = [
89111
89270
  example: "Robot — filter 10 %",
89112
89271
  kinds: CONSUMABLE
89113
89272
  },
89114
- {
89115
- name: "summaryTanks",
89116
- label: "Summary: tanks",
89117
- example: "Robot — clean water low",
89118
- kinds: TANK
89119
- },
89120
89273
  {
89121
89274
  name: "summaryDetection",
89122
89275
  label: "Summary: cameras detecting nothing",
@@ -89525,18 +89678,7 @@ var NC_TEMPLATE_VARS = [
89525
89678
  families: ["rule"],
89526
89679
  fields: [...RULE_TEXT],
89527
89680
  kinds: ["system"],
89528
- systemEventKinds: [...CONSUMABLE, ...TANK]
89529
- },
89530
- {
89531
- name: "tank",
89532
- label: "Tank",
89533
- description: "Which tank, as a stable token: cleanWater, dirtyWater, detergent, dustBin, or the device key of any other supply (salt, rinse aid).",
89534
- example: "clean water",
89535
- group: "system",
89536
- families: ["rule"],
89537
- fields: [...RULE_TEXT],
89538
- kinds: ["system"],
89539
- systemEventKinds: [...TANK]
89681
+ systemEventKinds: [...CONSUMABLE]
89540
89682
  },
89541
89683
  {
89542
89684
  name: "profile",
@@ -90187,9 +90329,6 @@ var NC_TEMPLATE_VARS = [
90187
90329
  * delete it from here then, and the served catalog names it again.
90188
90330
  */
90189
90331
  var NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS = [
90190
- "device-tank-low",
90191
- "device-tank-full",
90192
- "device-tank-normal",
90193
90332
  "node-restarting",
90194
90333
  "node-updating",
90195
90334
  "alert-critical",
@@ -90349,15 +90488,6 @@ var CLASS_BY_KIND = new Map([
90349
90488
  snapshotLabel: "Consumables low now",
90350
90489
  snapshotSection: "consumables"
90351
90490
  },
90352
- {
90353
- id: "tanks",
90354
- family: "device-events",
90355
- label: "Tanks (low or full / back to normal)",
90356
- bad: ["device-tank-low", "device-tank-full"],
90357
- recovery: ["device-tank-normal"],
90358
- snapshotLabel: "Tanks low or full now",
90359
- snapshotSection: "tanks"
90360
- },
90361
90491
  {
90362
90492
  id: "motion-noise",
90363
90493
  family: "device-events",
@@ -91268,6 +91398,10 @@ function readTimelapseGeneratedAt(rule, deviceId) {
91268
91398
  return rule.lastGeneratedAt ?? 0;
91269
91399
  }
91270
91400
  MotionOnMotionChangedDataSchema.omit({ triggeredBy: true });
91401
+ Object.freeze({
91402
+ person: .8,
91403
+ vehicle: .8
91404
+ });
91271
91405
  object({
91272
91406
  /**
91273
91407
  * Fraction of the box's own size added on EACH side before cutting.
@@ -92757,16 +92891,16 @@ Object.defineProperty(exports, "NC_SNOOZE_MAX_MINUTES", {
92757
92891
  return NC_SNOOZE_MAX_MINUTES;
92758
92892
  }
92759
92893
  });
92760
- Object.defineProperty(exports, "NC_SYSTEM_EVENT_KIND_GROUP_SPECS", {
92894
+ Object.defineProperty(exports, "NC_STATE_SUMMARY_SECTION_IDS", {
92761
92895
  enumerable: true,
92762
92896
  get: function() {
92763
- return NC_SYSTEM_EVENT_KIND_GROUP_SPECS;
92897
+ return NC_STATE_SUMMARY_SECTION_IDS;
92764
92898
  }
92765
92899
  });
92766
- Object.defineProperty(exports, "NC_TANK_SYSTEM_EVENT_KINDS", {
92900
+ Object.defineProperty(exports, "NC_SYSTEM_EVENT_KIND_GROUP_SPECS", {
92767
92901
  enumerable: true,
92768
92902
  get: function() {
92769
- return NC_TANK_SYSTEM_EVENT_KINDS;
92903
+ return NC_SYSTEM_EVENT_KIND_GROUP_SPECS;
92770
92904
  }
92771
92905
  });
92772
92906
  Object.defineProperty(exports, "NC_TAXONOMY", {
@@ -92937,6 +93071,12 @@ Object.defineProperty(exports, "OpsLogEntrySchema", {
92937
93071
  return OpsLogEntrySchema;
92938
93072
  }
92939
93073
  });
93074
+ Object.defineProperty(exports, "PackageLlmVerdictSchema", {
93075
+ enumerable: true,
93076
+ get: function() {
93077
+ return PackageLlmVerdictSchema;
93078
+ }
93079
+ });
92940
93080
  Object.defineProperty(exports, "PoolMemoryWatchdog", {
92941
93081
  enumerable: true,
92942
93082
  get: function() {
@@ -93303,6 +93443,12 @@ Object.defineProperty(exports, "cloneAlarmSettings", {
93303
93443
  return cloneAlarmSettings;
93304
93444
  }
93305
93445
  });
93446
+ Object.defineProperty(exports, "consumableFormOf", {
93447
+ enumerable: true,
93448
+ get: function() {
93449
+ return consumableFormOf;
93450
+ }
93451
+ });
93306
93452
  Object.defineProperty(exports, "consumableLowPercentOf", {
93307
93453
  enumerable: true,
93308
93454
  get: function() {