@camstack/system 1.2.263 → 1.2.264

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 (65) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/camera-grid/addon.d.ts +20 -0
  12. package/dist/builtins/camera-grid/grid-activity-mirror.d.ts +32 -0
  13. package/dist/builtins/camera-grid/grid-activity.d.ts +50 -0
  14. package/dist/builtins/camera-grid/grid-camera-device.d.ts +11 -1
  15. package/dist/builtins/camera-grid/grid-canvas.d.ts +83 -0
  16. package/dist/builtins/camera-grid/grid-compositor.d.ts +36 -0
  17. package/dist/builtins/camera-grid/grid-detection-mapping.d.ts +31 -0
  18. package/dist/builtins/camera-grid/grid-tile-feed.d.ts +38 -0
  19. package/dist/builtins/camera-grid/grid-tile-plan.d.ts +32 -0
  20. package/dist/builtins/camera-grid/index.js +416 -7
  21. package/dist/builtins/camera-grid/index.mjs +416 -7
  22. package/dist/builtins/camera-grid/silence-analysis.d.ts +7 -0
  23. package/dist/builtins/console-logging/index.js +1 -1
  24. package/dist/builtins/console-logging/index.mjs +1 -1
  25. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  26. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  27. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  28. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  29. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  30. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  31. package/dist/builtins/hub-forwarder/index.js +1 -1
  32. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  33. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  34. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  35. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  36. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  37. package/dist/builtins/local-network/local-network.addon.js +1 -1
  38. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  39. package/dist/builtins/loki-logging/index.js +1 -1
  40. package/dist/builtins/loki-logging/index.mjs +1 -1
  41. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  42. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  43. package/dist/builtins/platform-probe/index.js +1 -1
  44. package/dist/builtins/platform-probe/index.mjs +1 -1
  45. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  46. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  47. package/dist/builtins/snapshot/index.js +1 -1
  48. package/dist/builtins/snapshot/index.mjs +1 -1
  49. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  50. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  51. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  52. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  53. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  54. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  55. package/dist/builtins/system-config/system-config.addon.js +1 -1
  56. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  57. package/dist/builtins/winston-logging/index.js +1 -1
  58. package/dist/builtins/winston-logging/index.mjs +1 -1
  59. package/dist/{dist-6hiXbrNY.js → dist-BhYweLVr.js} +74 -15
  60. package/dist/{dist-CQ7ItBIG.mjs → dist-CO2O_ddo.mjs} +61 -8
  61. package/dist/index.js +1 -1
  62. package/dist/index.mjs +1 -1
  63. package/dist/{retired-settings-keys-CCXmaFTK.mjs → retired-settings-keys-BnnHWyfj.mjs} +1 -1
  64. package/dist/{retired-settings-keys-AmmGrCp1.js → retired-settings-keys-CKLI8VmE.js} +1 -1
  65. package/package.json +4 -1
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { It as reducePoints, Lt as resolveBucketMs, Nn as EventCategory, Ot as metricsProviderCapability, in as errMsg, lt as foldSnapshotByFunction, on as BaseAddon, yn as createEvent } from "../../dist-CQ7ItBIG.mjs";
1
+ import { Lt as reducePoints, Ot as metricsProviderCapability, Pn as EventCategory, Rt as resolveBucketMs, an as errMsg, bn as createEvent, lt as foldSnapshotByFunction, sn as BaseAddon } from "../../dist-CO2O_ddo.mjs";
2
2
  import { access, readFile, readdir } from "node:fs/promises";
3
3
  import * as fs from "node:fs";
4
4
  import { constants, readFileSync } from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_child_process = require("node:child_process");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Nn as EventCategory, Nt as platformProbeCapability, Wt as scoreRuntimes, in as errMsg, nt as enumerateInferenceDevices, on as BaseAddon, xn as emitReadiness } from "../../dist-CQ7ItBIG.mjs";
2
+ import { Gt as scoreRuntimes, Pn as EventCategory, Pt as platformProbeCapability, Sn as emitReadiness, an as errMsg, nt as enumerateInferenceDevices, sn as BaseAddon } from "../../dist-CO2O_ddo.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import { execFile } from "node:child_process";
5
5
  import * as os from "node:os";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { Nn as EventCategory, on as BaseAddon } from "../../dist-CQ7ItBIG.mjs";
1
+ import { Pn as EventCategory, sn as BaseAddon } from "../../dist-CO2O_ddo.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  const require_snapshot_courtesy = require("../../snapshot-courtesy-Cqs7GkOV.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { $t as streamQualityLabel, B as bareAddonId, En as nodePin, Nn as EventCategory, V as batteryCapability, Z as deriveBatteryPresence, fn as DeviceType, in as errMsg, o as BatteryStatusSchema, on as BaseAddon, qt as snapshotCapability, un as DeviceFeature } from "../../dist-CQ7ItBIG.mjs";
1
+ import { B as bareAddonId, Dn as nodePin, Jt as snapshotCapability, Pn as EventCategory, V as batteryCapability, Z as deriveBatteryPresence, a as BatteryStatusSchema, an as errMsg, dn as DeviceFeature, en as streamQualityLabel, pn as DeviceType, sn as BaseAddon } from "../../dist-CO2O_ddo.mjs";
2
2
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CZPvteq2.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Zt as storageProviderCapability, ct as filesystemBrowseCapability, on as BaseAddon } from "../../dist-CQ7ItBIG.mjs";
1
+ import { Qt as storageProviderCapability, ct as filesystemBrowseCapability, sn as BaseAddon } from "../../dist-CO2O_ddo.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { A as StorageLocationModeSchema, Dn as parseJsonObject, Dt as mayWriteToLocation, Et as mayReadLocation, Gt as settingsStoreCapability, Jt as storageCapability, M as StorageMigrationJobSchema, Nn as EventCategory, W as collectSecretConfigKeys, Yt as storageMigrationCapability, j as StorageLocationTypeSchema, k as StorageCleanupJobSchema, kt as modeMayWrite, on as BaseAddon, ot as evictionPolicyOfLocation, pt as isLocationEnabled, rn as withLocationMode, ut as gbToBytes, v as LegacyStorageLocationDefaultSchema, x as REDACTED_SECRET, yt as legacyModeOf, zt as resolveLocationMode } from "../../dist-CQ7ItBIG.mjs";
1
+ import { A as StorageLocationModeSchema, Bt as resolveLocationMode, Dt as mayWriteToLocation, Et as mayReadLocation, Kt as settingsStoreCapability, M as StorageMigrationJobSchema, On as parseJsonObject, Pn as EventCategory, W as collectSecretConfigKeys, Xt as storageMigrationCapability, Yt as storageCapability, _ as LegacyStorageLocationDefaultSchema, in as withLocationMode, j as StorageLocationTypeSchema, k as StorageCleanupJobSchema, kt as modeMayWrite, ot as evictionPolicyOfLocation, pt as isLocationEnabled, sn as BaseAddon, ut as gbToBytes, x as REDACTED_SECRET, yt as legacyModeOf } from "../../dist-CO2O_ddo.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  //#region src/builtins/system-config/system-config.addon.ts
8
8
  /**
9
9
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -1,4 +1,4 @@
1
- import { Cn as hydrateSchema, in as errMsg, on as BaseAddon } from "../../dist-CQ7ItBIG.mjs";
1
+ import { an as errMsg, sn as BaseAddon, wn as hydrateSchema } from "../../dist-CO2O_ddo.mjs";
2
2
  //#region src/builtins/system-config/system-config.addon.ts
3
3
  /**
4
4
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-6hiXbrNY.js");
6
+ const require_dist = require("../../dist-BhYweLVr.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Ct as logDestinationCapability, on as BaseAddon } from "../../dist-CQ7ItBIG.mjs";
1
+ import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-CO2O_ddo.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -3404,7 +3404,7 @@ function sleep(ms) {
3404
3404
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
3405
3405
  }
3406
3406
  //#endregion
3407
- //#region ../types/dist/canonical-hash-DI7tT-zZ.mjs
3407
+ //#region ../types/dist/canonical-hash-B-5nFwFn.mjs
3408
3408
  var AUDIO_ENCODER_BY_CODEC = {
3409
3409
  opus: "libopus",
3410
3410
  aac: "aac",
@@ -3468,6 +3468,10 @@ function buildInputArgs(input, decodeHwAccel) {
3468
3468
  if (input.useWallclockTimestamps === true) args.push("-use_wallclock_as_timestamps", "1");
3469
3469
  if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
3470
3470
  if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
3471
+ if (input.rawVideo !== void 0) {
3472
+ const raw = input.rawVideo;
3473
+ args.push("-f", "rawvideo", "-pix_fmt", raw.pixelFormat, "-video_size", `${String(raw.width)}x${String(raw.height)}`, "-framerate", String(raw.framerate));
3474
+ }
3471
3475
  args.push("-i", input.url);
3472
3476
  return args;
3473
3477
  }
@@ -4284,13 +4288,37 @@ var CameraSwitchGroupSchema = zod.z.object({
4284
4288
  fetchedAt: zod.z.number()
4285
4289
  });
4286
4290
  /**
4287
- * The wrapper capability each wrapper-backed switch controls. Named constants
4288
- * because the same strings appear in `legacy-migrations.ts`, in
4289
- * `isCapActiveForDevice` call sites and in the fake harness — a typo in any of
4290
- * them is a switch that silently writes a binding nobody reads.
4291
+ * Every analyser a camera CamStack BUILDS is created with switched off.
4292
+ *
4293
+ * A grid and a Terminal camera are `DeviceType.Camera`, so every wrapper that
4294
+ * declares `defaultActive: true` for a camera binds to them the instant they
4295
+ * exist — the whole analysis family included. There is nothing there to
4296
+ * analyse: a grid's subjects are already counted on the cameras it composes (a
4297
+ * person in the bottom-right cell is a person on THAT camera, not on the grid),
4298
+ * and a Terminal camera shows a shell.
4299
+ *
4300
+ * ONE list, in the package both already depend on, because there were two and
4301
+ * they had already drifted: the Terminal's and the grid's each named three caps
4302
+ * and neither named `pipeline-analytics` — which has no gate of its own except
4303
+ * this binding, so a grid that forwards its sources' motion (so the viewer can
4304
+ * light its tile) would open a motion EPISODE per forwarded event, duplicating
4305
+ * the rows those sources already write.
4306
+ *
4307
+ * `motion-detection` sits first deliberately: it is the one that holds the
4308
+ * decode session open, so its absence is the difference between a derived
4309
+ * camera costing a composition and costing a full decode pipeline.
4310
+ *
4311
+ * Applied ONLY at creation. An operator who deliberately turns analysis back on
4312
+ * for a grid must win, and a reconcile that re-asserted this every pass would
4313
+ * silently overrule them once a minute.
4291
4314
  */
4292
- var DETECTION_PIPELINE_CAP_NAME = "detection-pipeline";
4293
- var AUDIO_ANALYSIS_CAP_NAME = "audio-analysis";
4315
+ var DERIVED_CAMERA_SILENCED_CAP_NAMES = [
4316
+ "motion-detection",
4317
+ "detection-pipeline",
4318
+ "audio-analysis",
4319
+ "pipeline-analytics",
4320
+ "scene-monitor"
4321
+ ];
4294
4322
  /**
4295
4323
  * The value a redacted secret is replaced with on every read surface.
4296
4324
  *
@@ -30864,6 +30892,31 @@ authKey: zod.z.string().optional() }), zod.z.object({
30864
30892
  }), { kind: "mutation" })
30865
30893
  }
30866
30894
  };
30895
+ /**
30896
+ * Hardware / firmware motion sensor cap — binary detected state plus
30897
+ * a timestamp of the last observation. Distinct from
30898
+ * `motion-detection.cap.ts` which owns the LOCAL ML motion pipeline;
30899
+ * `motion` is the lightweight readout from on-camera motion (Reolink
30900
+ * `GetMdState`, Baichuan push `type: motion`, ONVIF analytics).
30901
+ *
30902
+ * Native-motion providers also fan out to `detection.camera-native`
30903
+ * with `source: 'onboard'` so cross-cutting system services
30904
+ * (alert-center, advanced-notifier) can subscribe once and receive
30905
+ * motion from every camera.
30906
+ */
30907
+ /**
30908
+ * How long after a camera's last rising edge `pipeline-analytics` closes the
30909
+ * motion EPISODE row it kept open for it (D475) — "il delay della cap", in
30910
+ * the operator's words. One authority for the whole system: every provider
30911
+ * that seeds `autoClearAfterMs` on a `Camera` device writes this SAME
30912
+ * constant while `detected: true` (never its own number — Hikvision used to
30913
+ * seed its internal 3 s inactivity timer here, which is a different clock for
30914
+ * a different purpose), and `MotionEpisodeTracker` imports it directly rather
30915
+ * than reading the live cap value on the hot path. A `Sensor` device (HA
30916
+ * binary sensor, Homematic) gets a genuine push both ways and has no episode
30917
+ * to close on a timer, so it writes `null`, never this constant.
30918
+ */
30919
+ var MOTION_CLOSE_AFTER_MS = 15e3;
30867
30920
  var MotionStatusSchema = zod.z.object({
30868
30921
  detected: zod.z.boolean(),
30869
30922
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -48763,12 +48816,6 @@ Object.defineProperty(exports, "ALL_CAPABILITY_DEFINITIONS", {
48763
48816
  return ALL_CAPABILITY_DEFINITIONS;
48764
48817
  }
48765
48818
  });
48766
- Object.defineProperty(exports, "AUDIO_ANALYSIS_CAP_NAME", {
48767
- enumerable: true,
48768
- get: function() {
48769
- return AUDIO_ANALYSIS_CAP_NAME;
48770
- }
48771
- });
48772
48819
  Object.defineProperty(exports, "AlertSchema", {
48773
48820
  enumerable: true,
48774
48821
  get: function() {
@@ -48841,10 +48888,10 @@ Object.defineProperty(exports, "DEFAULT_FIRST_SIGHTING_FRESHNESS_MS", {
48841
48888
  return DEFAULT_FIRST_SIGHTING_FRESHNESS_MS;
48842
48889
  }
48843
48890
  });
48844
- Object.defineProperty(exports, "DETECTION_PIPELINE_CAP_NAME", {
48891
+ Object.defineProperty(exports, "DERIVED_CAMERA_SILENCED_CAP_NAMES", {
48845
48892
  enumerable: true,
48846
48893
  get: function() {
48847
- return DETECTION_PIPELINE_CAP_NAME;
48894
+ return DERIVED_CAMERA_SILENCED_CAP_NAMES;
48848
48895
  }
48849
48896
  });
48850
48897
  Object.defineProperty(exports, "DEVICE_SETTINGS_CONTRIBUTION_METHODS", {
@@ -48925,6 +48972,12 @@ Object.defineProperty(exports, "METHOD_ACCESS_MAP", {
48925
48972
  return METHOD_ACCESS_MAP;
48926
48973
  }
48927
48974
  });
48975
+ Object.defineProperty(exports, "MOTION_CLOSE_AFTER_MS", {
48976
+ enumerable: true,
48977
+ get: function() {
48978
+ return MOTION_CLOSE_AFTER_MS;
48979
+ }
48980
+ });
48928
48981
  Object.defineProperty(exports, "REDACTED_SECRET", {
48929
48982
  enumerable: true,
48930
48983
  get: function() {
@@ -49393,6 +49446,12 @@ Object.defineProperty(exports, "modeMayWrite", {
49393
49446
  return modeMayWrite;
49394
49447
  }
49395
49448
  });
49449
+ Object.defineProperty(exports, "motionCapability", {
49450
+ enumerable: true,
49451
+ get: function() {
49452
+ return motionCapability;
49453
+ }
49454
+ });
49396
49455
  Object.defineProperty(exports, "nodePin", {
49397
49456
  enumerable: true,
49398
49457
  get: function() {
@@ -3404,7 +3404,7 @@ function sleep(ms) {
3404
3404
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
3405
3405
  }
3406
3406
  //#endregion
3407
- //#region ../types/dist/canonical-hash-DI7tT-zZ.mjs
3407
+ //#region ../types/dist/canonical-hash-B-5nFwFn.mjs
3408
3408
  var AUDIO_ENCODER_BY_CODEC = {
3409
3409
  opus: "libopus",
3410
3410
  aac: "aac",
@@ -3468,6 +3468,10 @@ function buildInputArgs(input, decodeHwAccel) {
3468
3468
  if (input.useWallclockTimestamps === true) args.push("-use_wallclock_as_timestamps", "1");
3469
3469
  if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
3470
3470
  if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
3471
+ if (input.rawVideo !== void 0) {
3472
+ const raw = input.rawVideo;
3473
+ args.push("-f", "rawvideo", "-pix_fmt", raw.pixelFormat, "-video_size", `${String(raw.width)}x${String(raw.height)}`, "-framerate", String(raw.framerate));
3474
+ }
3471
3475
  args.push("-i", input.url);
3472
3476
  return args;
3473
3477
  }
@@ -4284,13 +4288,37 @@ var CameraSwitchGroupSchema = z.object({
4284
4288
  fetchedAt: z.number()
4285
4289
  });
4286
4290
  /**
4287
- * The wrapper capability each wrapper-backed switch controls. Named constants
4288
- * because the same strings appear in `legacy-migrations.ts`, in
4289
- * `isCapActiveForDevice` call sites and in the fake harness — a typo in any of
4290
- * them is a switch that silently writes a binding nobody reads.
4291
+ * Every analyser a camera CamStack BUILDS is created with switched off.
4292
+ *
4293
+ * A grid and a Terminal camera are `DeviceType.Camera`, so every wrapper that
4294
+ * declares `defaultActive: true` for a camera binds to them the instant they
4295
+ * exist — the whole analysis family included. There is nothing there to
4296
+ * analyse: a grid's subjects are already counted on the cameras it composes (a
4297
+ * person in the bottom-right cell is a person on THAT camera, not on the grid),
4298
+ * and a Terminal camera shows a shell.
4299
+ *
4300
+ * ONE list, in the package both already depend on, because there were two and
4301
+ * they had already drifted: the Terminal's and the grid's each named three caps
4302
+ * and neither named `pipeline-analytics` — which has no gate of its own except
4303
+ * this binding, so a grid that forwards its sources' motion (so the viewer can
4304
+ * light its tile) would open a motion EPISODE per forwarded event, duplicating
4305
+ * the rows those sources already write.
4306
+ *
4307
+ * `motion-detection` sits first deliberately: it is the one that holds the
4308
+ * decode session open, so its absence is the difference between a derived
4309
+ * camera costing a composition and costing a full decode pipeline.
4310
+ *
4311
+ * Applied ONLY at creation. An operator who deliberately turns analysis back on
4312
+ * for a grid must win, and a reconcile that re-asserted this every pass would
4313
+ * silently overrule them once a minute.
4291
4314
  */
4292
- var DETECTION_PIPELINE_CAP_NAME = "detection-pipeline";
4293
- var AUDIO_ANALYSIS_CAP_NAME = "audio-analysis";
4315
+ var DERIVED_CAMERA_SILENCED_CAP_NAMES = [
4316
+ "motion-detection",
4317
+ "detection-pipeline",
4318
+ "audio-analysis",
4319
+ "pipeline-analytics",
4320
+ "scene-monitor"
4321
+ ];
4294
4322
  /**
4295
4323
  * The value a redacted secret is replaced with on every read surface.
4296
4324
  *
@@ -30864,6 +30892,31 @@ authKey: z.string().optional() }), z.object({
30864
30892
  }), { kind: "mutation" })
30865
30893
  }
30866
30894
  };
30895
+ /**
30896
+ * Hardware / firmware motion sensor cap — binary detected state plus
30897
+ * a timestamp of the last observation. Distinct from
30898
+ * `motion-detection.cap.ts` which owns the LOCAL ML motion pipeline;
30899
+ * `motion` is the lightweight readout from on-camera motion (Reolink
30900
+ * `GetMdState`, Baichuan push `type: motion`, ONVIF analytics).
30901
+ *
30902
+ * Native-motion providers also fan out to `detection.camera-native`
30903
+ * with `source: 'onboard'` so cross-cutting system services
30904
+ * (alert-center, advanced-notifier) can subscribe once and receive
30905
+ * motion from every camera.
30906
+ */
30907
+ /**
30908
+ * How long after a camera's last rising edge `pipeline-analytics` closes the
30909
+ * motion EPISODE row it kept open for it (D475) — "il delay della cap", in
30910
+ * the operator's words. One authority for the whole system: every provider
30911
+ * that seeds `autoClearAfterMs` on a `Camera` device writes this SAME
30912
+ * constant while `detected: true` (never its own number — Hikvision used to
30913
+ * seed its internal 3 s inactivity timer here, which is a different clock for
30914
+ * a different purpose), and `MotionEpisodeTracker` imports it directly rather
30915
+ * than reading the live cap value on the hot path. A `Sensor` device (HA
30916
+ * binary sensor, Homematic) gets a genuine push both ways and has no episode
30917
+ * to close on a timer, so it writes `null`, never this constant.
30918
+ */
30919
+ var MOTION_CLOSE_AFTER_MS = 15e3;
30867
30920
  var MotionStatusSchema = z.object({
30868
30921
  detected: z.boolean(),
30869
30922
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -48757,4 +48810,4 @@ function enumerateInferenceDevices(hw) {
48757
48810
  return out;
48758
48811
  }
48759
48812
  //#endregion
48760
- export { deviceStateCapability as $, streamQualityLabel as $t, StorageLocationModeSchema as A, resolveCapMount as An, normalizeUnit as At, bareAddonId as B, resolveMethodAuth as Bt, RecordingStatusSchema as C, hydrateSchema as Cn, logDestinationCapability as Ct, STREAM_PROFILE_META as D, parseJsonObject as Dn, mayWriteToLocation as Dt, STORAGE_ACCESS_FALLBACK as E, nodePin as En, mayReadLocation as Et, addonSettingsCapability as F, ptzAutotrackCapability as Ft, coreBlockAddonId as G, settingsStoreCapability as Gt, buildStreamParamsConfigSchema as H, scopesAllowAddon as Ht, addonWidgetsCapability as I, reducePoints as It, dataStoreProviderCapability as J, storageCapability as Jt, coreBlockIdFromAddonId as K, siteZoneKey as Kt, alertsCapability as L, resolveBucketMs as Lt, StorageMigrationJobSchema as M, sleep as Mn, parseStreamParamsFormPatch as Mt, UserRecordSchema as N, EventCategory as Nn, platformProbeCapability as Nt, ScopedTokenSchema as O, parseJsonUnknown as On, metricsProviderCapability as Ot, addonPagesCapability as P, procedureAuthKey as Pt, deviceManagerCapability as Q, streamCatalogCapability as Qt, authProviderCapability as R, resolveContainerPrimaryChild as Rt, RUNTIME_DEFAULTS as S, expandCapMethods as Sn, locationIconKey as St, SOURCE_DEVICE_TYPES as T, isEvent as Tn, looseSchema as Tt, cameraGridLayoutCapability as U, scopesAllowDeviceCap as Ut, batteryCapability as V, runtimeStatePolicyFor as Vt, collectSecretConfigKeys as W, scoreRuntimes as Wt, decodeVectorBase64 as X, storageOccupancyCapability as Xt, declarationOwnerNodeId as Y, storageMigrationCapability as Yt, deriveBatteryPresence as Z, storageProviderCapability as Zt, LOG_LEVEL_RANK as _, asNumber as _n, isVoidInput as _t, BaseDevice as a, buildFfmpegArgs as an, evaluateSensorEdge as at, METHOD_ACCESS_MAP as b, emitDownForOwnedCaps as bn, lifecycleJobSchema as bt, CAP_NAMES_WITH_STATUS as c, DEVICE_SETTINGS_CONTRIBUTION_METHODS as cn, filesystemBrowseCapability as ct, CoreBlockSchema as d, DeviceRole as dn, isArrayOutputSchema as dt, userManagementCapability as en, deviceStatusCapability as et, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as f, DeviceType as fn, isCollectionArrayMethod as ft, FIRST_LEVEL_MACRO_CLASSES as g, asJsonObject as gn, isSourceCap as gt, DeviceStatusSchema as h, WELL_KNOWN_TAB_MAP as hn, isSameAddonId as ht, ApiKeyRecordSchema as i, errMsg as in, enumerateSchemaFields as it, StorageLocationTypeSchema as j, scopeKey as jn, objectInputDeclaresAddonId as jt, StorageCleanupJobSchema as k, readinessKey as kn, modeMayWrite as kt, CORE_BLOCKS_ADDON_ID as l, DEVICE_STATUS_METHOD as ln, foldSnapshotByFunction as lt, DeclaredDevices as m, ReadinessTimeoutError as mn, isObjectInput as mt, AUDIO_ANALYSIS_CAP_NAME as n, vectorStoreCapability as nn, enumerateInferenceDevices as nt, BatteryStatusSchema as o, BaseAddon as on, evictionPolicyOfLocation as ot, DETECTION_PIPELINE_CAP_NAME as p, ReadinessRegistry as pn, isLocationEnabled as pt, coreBlocksCapability as q, snapshotCapability as qt, AlertSchema as r, withLocationMode as rn, enumerateItemArrayFields as rt, CAMERA_SWITCH_ORDER as s, DATAPLANE_SECRET_HEADER as sn, extractNestedAddonId as st, ALL_CAPABILITY_DEFINITIONS as t, vectorDimFromBase64 as tn, doorbellCapability as tt, CORE_BLOCK_ADDON_PREFIX as u, DeviceFeature as un, gbToBytes as ut, LegacyStorageLocationDefaultSchema as v, asString as vn, kebabToCamel as vt, SOURCE_CAPS as w, isDeviceConfigCap as wn, logLevelAtMost as wt, REDACTED_SECRET as x, emitReadiness as xn, localNetworkCapability as xt, LocationIconIdSchema as y, createEvent as yn, legacyModeOf as yt, backupCapability as z, resolveLocationMode as zt };
48813
+ export { deviceStateCapability as $, streamCatalogCapability as $t, StorageLocationModeSchema as A, readinessKey as An, motionCapability as At, bareAddonId as B, resolveLocationMode as Bt, RecordingStatusSchema as C, expandCapMethods as Cn, logDestinationCapability as Ct, STREAM_PROFILE_META as D, nodePin as Dn, mayWriteToLocation as Dt, STORAGE_ACCESS_FALLBACK as E, isEvent as En, mayReadLocation as Et, addonSettingsCapability as F, procedureAuthKey as Ft, coreBlockAddonId as G, scoreRuntimes as Gt, buildStreamParamsConfigSchema as H, runtimeStatePolicyFor as Ht, addonWidgetsCapability as I, ptzAutotrackCapability as It, dataStoreProviderCapability as J, snapshotCapability as Jt, coreBlockIdFromAddonId as K, settingsStoreCapability as Kt, alertsCapability as L, reducePoints as Lt, StorageMigrationJobSchema as M, scopeKey as Mn, objectInputDeclaresAddonId as Mt, UserRecordSchema as N, sleep as Nn, parseStreamParamsFormPatch as Nt, ScopedTokenSchema as O, parseJsonObject as On, metricsProviderCapability as Ot, addonPagesCapability as P, EventCategory as Pn, platformProbeCapability as Pt, deviceManagerCapability as Q, storageProviderCapability as Qt, authProviderCapability as R, resolveBucketMs as Rt, RUNTIME_DEFAULTS as S, emitReadiness as Sn, locationIconKey as St, SOURCE_DEVICE_TYPES as T, isDeviceConfigCap as Tn, looseSchema as Tt, cameraGridLayoutCapability as U, scopesAllowAddon as Ut, batteryCapability as V, resolveMethodAuth as Vt, collectSecretConfigKeys as W, scopesAllowDeviceCap as Wt, decodeVectorBase64 as X, storageMigrationCapability as Xt, declarationOwnerNodeId as Y, storageCapability as Yt, deriveBatteryPresence as Z, storageOccupancyCapability as Zt, LegacyStorageLocationDefaultSchema as _, asJsonObject as _n, isVoidInput as _t, BatteryStatusSchema as a, errMsg as an, evaluateSensorEdge as at, MOTION_CLOSE_AFTER_MS as b, createEvent as bn, lifecycleJobSchema as bt, CORE_BLOCKS_ADDON_ID as c, DATAPLANE_SECRET_HEADER as cn, filesystemBrowseCapability as ct, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as d, DeviceFeature as dn, isArrayOutputSchema as dt, streamQualityLabel as en, deviceStatusCapability as et, DERIVED_CAMERA_SILENCED_CAP_NAMES as f, DeviceRole as fn, isCollectionArrayMethod as ft, LOG_LEVEL_RANK as g, WELL_KNOWN_TAB_MAP as gn, isSourceCap as gt, FIRST_LEVEL_MACRO_CLASSES as h, ReadinessTimeoutError as hn, isSameAddonId as ht, BaseDevice as i, withLocationMode as in, enumerateSchemaFields as it, StorageLocationTypeSchema as j, resolveCapMount as jn, normalizeUnit as jt, StorageCleanupJobSchema as k, parseJsonUnknown as kn, modeMayWrite as kt, CORE_BLOCK_ADDON_PREFIX as l, DEVICE_SETTINGS_CONTRIBUTION_METHODS as ln, foldSnapshotByFunction as lt, DeviceStatusSchema as m, ReadinessRegistry as mn, isObjectInput as mt, AlertSchema as n, vectorDimFromBase64 as nn, enumerateInferenceDevices as nt, CAMERA_SWITCH_ORDER as o, buildFfmpegArgs as on, evictionPolicyOfLocation as ot, DeclaredDevices as p, DeviceType as pn, isLocationEnabled as pt, coreBlocksCapability as q, siteZoneKey as qt, ApiKeyRecordSchema as r, vectorStoreCapability as rn, enumerateItemArrayFields as rt, CAP_NAMES_WITH_STATUS as s, BaseAddon as sn, extractNestedAddonId as st, ALL_CAPABILITY_DEFINITIONS as t, userManagementCapability as tn, doorbellCapability as tt, CoreBlockSchema as u, DEVICE_STATUS_METHOD as un, gbToBytes as ut, LocationIconIdSchema as v, asNumber as vn, kebabToCamel as vt, SOURCE_CAPS as w, hydrateSchema as wn, logLevelAtMost as wt, REDACTED_SECRET as x, emitDownForOwnedCaps as xn, localNetworkCapability as xt, METHOD_ACCESS_MAP as y, asString as yn, legacyModeOf as yt, backupCapability as z, resolveContainerPrimaryChild as zt };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-6hiXbrNY.js");
3
+ const require_dist = require("./dist-BhYweLVr.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { An as resolveCapMount, Bt as resolveMethodAuth, Dn as parseJsonObject, F as addonSettingsCapability, Ht as scopesAllowAddon, Nn as EventCategory$1, On as parseJsonUnknown, Pt as procedureAuthKey, S as RUNTIME_DEFAULTS, Sn as expandCapMethods, Tt as looseSchema, Ut as scopesAllowDeviceCap, _ as LOG_LEVEL_RANK, _n as asNumber, _t as isVoidInput, b as METHOD_ACCESS_MAP, bn as emitDownForOwnedCaps, bt as lifecycleJobSchema, cn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, dt as isArrayOutputSchema, ft as isCollectionArrayMethod, gn as asJsonObject$1, in as errMsg$1, jn as scopeKey, jt as objectInputDeclaresAddonId, kn as readinessKey, ln as DEVICE_STATUS_METHOD, mn as ReadinessTimeoutError, mt as isObjectInput, pn as ReadinessRegistry, sn as DATAPLANE_SECRET_HEADER$1, st as extractNestedAddonId, t as ALL_CAPABILITY_DEFINITIONS, vn as asString$1, vt as kebabToCamel, wt as logLevelAtMost, yn as createEvent } from "./dist-CQ7ItBIG.mjs";
2
+ import { An as readinessKey, Cn as expandCapMethods, F as addonSettingsCapability, Ft as procedureAuthKey, Mn as scopeKey, Mt as objectInputDeclaresAddonId, On as parseJsonObject, Pn as EventCategory$1, S as RUNTIME_DEFAULTS, Tt as looseSchema, Ut as scopesAllowAddon, Vt as resolveMethodAuth, Wt as scopesAllowDeviceCap, _n as asJsonObject$1, _t as isVoidInput, an as errMsg$1, bn as createEvent, bt as lifecycleJobSchema, cn as DATAPLANE_SECRET_HEADER$1, dt as isArrayOutputSchema, ft as isCollectionArrayMethod, g as LOG_LEVEL_RANK, hn as ReadinessTimeoutError, jn as resolveCapMount, kn as parseJsonUnknown, ln as DEVICE_SETTINGS_CONTRIBUTION_METHODS, mn as ReadinessRegistry, mt as isObjectInput, st as extractNestedAddonId, t as ALL_CAPABILITY_DEFINITIONS, un as DEVICE_STATUS_METHOD, vn as asNumber, vt as kebabToCamel, wt as logLevelAtMost, xn as emitDownForOwnedCaps, y as METHOD_ACCESS_MAP, yn as asString$1 } from "./dist-CO2O_ddo.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -1,4 +1,4 @@
1
- import { gn as asJsonObject } from "./dist-CQ7ItBIG.mjs";
1
+ import { _n as asJsonObject } from "./dist-CO2O_ddo.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-6hiXbrNY.js");
1
+ const require_dist = require("./dist-BhYweLVr.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.263",
3
+ "version": "1.2.264",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",
@@ -368,6 +368,9 @@
368
368
  "capabilities": [
369
369
  {
370
370
  "name": "camera-grid-layout"
371
+ },
372
+ {
373
+ "name": "motion"
371
374
  }
372
375
  ]
373
376
  }